Skip to content

refactor: replace runtime isElectron() with build-time isDesktop constant#8710

Merged
christian-byrne merged 1 commit intomainfrom
refactor/replace-is-electron-with-is-desktop
Feb 8, 2026
Merged

refactor: replace runtime isElectron() with build-time isDesktop constant#8710
christian-byrne merged 1 commit intomainfrom
refactor/replace-is-electron-with-is-desktop

Conversation

@christian-byrne
Copy link
Contributor

@christian-byrne christian-byrne commented Feb 7, 2026

Summary

Replace all runtime isElectron() function calls with the build-time isDesktop constant from @/platform/distribution/types, enabling dead-code elimination in non-desktop builds.

Changes

  • What: Migrate 30 files from runtime isElectron() detection (checking window.electronAPI) to the compile-time isDesktop constant (driven by __DISTRIBUTION__ Vite define). Remove isElectron from envUtil.ts. Update isNativeWindow() to use isDesktop. Guard electronAPI() calls behind isDesktop checks in stores. Update 7 test files to use vi.hoisted + getter mock pattern for per-test isDesktop toggling. Add DISTRIBUTION=desktop to dev:electron script.

Review Focus

┆Issue is synchronized with this Notion page by Unito

@christian-byrne christian-byrne self-assigned this Feb 7, 2026
@dosubot dosubot bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Feb 7, 2026
@github-actions
Copy link

github-actions bot commented Feb 7, 2026

🎭 Playwright Tests: ⚠️ Passed with flaky tests

Results: 517 passed, 0 failed, 3 flaky, 8 skipped (Total: 528)

❌ Failed Tests

📊 Browser Reports
  • chromium: View Report (✅ 505 / ❌ 0 / ⚠️ 3 / ⏭️ 8)
  • chromium-2x: View Report (✅ 2 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • chromium-0.5x: View Report (✅ 1 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • mobile-chrome: View Report (✅ 9 / ❌ 0 / ⚠️ 0 / ⏭️ 0)

@github-actions
Copy link

github-actions bot commented Feb 7, 2026

🎨 Storybook Build Status

Build completed successfully!

⏰ Completed at: 02/07/2026, 11:25:49 PM UTC

🔗 Links


🎉 Your Storybook is ready for review!

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 7, 2026

📝 Walkthrough

Walkthrough

The PR replaces runtime isElectron() checks with a distribution-driven isDesktop boolean, removes isElectron() from src/utils/envUtil.ts, updates the dev script to set DISTRIBUTION=desktop, and updates imports/usages across components, stores, composables, and tests to use isDesktop.

Changes

Cohort / File(s) Summary
Dev Script
package.json
scripts.dev:electron wrapped with cross-env DISTRIBUTION=desktop (env var added to the existing command).
Platform Types
src/platform/distribution/types.ts
isDesktop simplified to DISTRIBUTION === 'desktop'; removed isElectron usage and isLocalhost export.
Utility Removal
src/utils/envUtil.ts
Removed exported isElectron(); isNativeWindow() now uses isDesktop.
Global/Adapter Logic
src/extensions/core/electronAdapter.ts, src/router.ts, src/platform/settings/composables/useSettingUI.ts
Replaced isElectron() checks with imported isDesktop and adjusted gating logic accordingly.
Stores
src/stores/aboutPanelStore.ts, src/stores/systemStatsStore.ts, src/stores/workspace/bottomPanelStore.ts, src/platform/updates/common/releaseStore.ts
Environment checks switched to isDesktop; releaseStore and others updated predicates to use isDesktop with existing isCloud logic.
Electron Download Store
src/stores/electronDownloadStore.ts
Major change: added isDesktop guard, conditional DownloadManager usage, non-null assertions for DownloadManager calls, and new inProgressDownloads computed export.
Components & Views
src/App.vue, src/components/.../TopMenuSection.vue, src/components/.../BaseTerminal.vue, src/components/dialog/content/MissingModelsWarning.vue, src/components/helpcenter/HelpCenterMenuContent.vue, src/components/sidebar/tabs/ModelLibrarySidebarTab.vue, src/components/topbar/WorkflowTabs.vue, src/views/GraphView.vue, src/views/templates/BaseViewTemplate.vue
Replaced isElectron() runtime calls/imports with isDesktop imports from @/platform/distribution/types; updated conditional rendering and guards accordingly.
Composables & Hooks
src/composables/sidebarTabs/useModelLibrarySidebarTab.ts, src/composables/useExternalLink.ts, src/composables/useExternalLink.test.ts
Switched platform detection to isDesktop boolean; tests use hoisted mockData.isDesktop and mock the @/platform/distribution/types getter.
Release / Update Components
src/platform/updates/components/ReleaseNotificationToast.vue, src/platform/updates/components/ReleaseNotificationToast.test.ts, src/platform/updates/common/releaseStore.test.ts
Update handlers and tests now use isDesktop to choose desktop updater flow; tests mock isDesktop via hoisted mockData.
Tests (misc)
src/components/TopMenuSection.test.ts, src/components/bottomPanel/tabs/terminal/BaseTerminal.test.ts, src/stores/systemStatsStore.test.ts, src/stores/workspace/bottomPanelStore.test.ts
Replaced isElectron mocks with @/platform/distribution/types mock exposing a getter isDesktop driven by hoisted mockData.isDesktop; updated test descriptions to "desktop" terminology.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🐰 The desktop flag hops in, neat and spry,

No runtime calls to catch the eye.
DISTRIBUTION set, the checks align,
Tests and views now sip chamomile tea—refined. 🥕

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 28.57% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the main refactoring: replacing runtime isElectron() function calls with the build-time isDesktop constant, which is the primary objective of this changeset.
Description check ✅ Passed The description comprehensively covers all required sections with clear details: Summary explains the change and reason, Changes section lists What was modified with specifics, Review Focus highlights critical design decisions and known issues.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch refactor/replace-is-electron-with-is-desktop

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

@github-actions
Copy link

github-actions bot commented Feb 7, 2026

Bundle Size Report

Summary

  • Raw size: 19.7 MB baseline 19.7 MB — 🟢 -2.07 kB
  • Gzip: 4.2 MB baseline 4.2 MB — 🟢 -836 B
  • Brotli: 3.26 MB baseline 3.26 MB — 🟢 -905 B
  • Bundles: 234 current • 234 baseline • 162 added / 162 removed

Category Glance
Other 🟢 -1.03 kB (7.15 MB) · Panels & Settings 🟢 -244 B (409 kB) · Views & Navigation 🟢 -210 B (68.8 kB) · Data & Services 🟢 -149 B (2.11 MB) · Utilities & Hooks 🟢 -114 B (237 kB) · Graph Workspace 🟢 -102 B (854 kB) · + 5 more

Per-category breakdown
App Entry Points — 22.2 kB (baseline 22.2 kB) • 🟢 -22 B

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-ANN21I5p.js (removed) 22.2 kB 🟢 -22.2 kB 🟢 -7.19 kB 🟢 -6.24 kB
assets/index-Dw11q6i3.js (new) 22.2 kB 🔴 +22.2 kB 🔴 +7.2 kB 🔴 +6.27 kB

Status: 1 added / 1 removed

Graph Workspace — 854 kB (baseline 854 kB) • 🟢 -102 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-Cc3taE-P.js (removed) 854 kB 🟢 -854 kB 🟢 -183 kB 🟢 -140 kB
assets/GraphView-CVQs3NDw.js (new) 854 kB 🔴 +854 kB 🔴 +183 kB 🔴 +140 kB

Status: 1 added / 1 removed

Views & Navigation — 68.8 kB (baseline 69 kB) • 🟢 -210 B

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudSurveyView-Bc5lCtc4.js (removed) 15.4 kB 🟢 -15.4 kB 🟢 -3.3 kB 🟢 -2.8 kB
assets/CloudSurveyView-UhmqFHLq.js (new) 15.4 kB 🔴 +15.4 kB 🔴 +3.3 kB 🔴 +2.8 kB
assets/CloudLoginView-CApBqFpc.js (removed) 10.1 kB 🟢 -10.1 kB 🟢 -2.95 kB 🟢 -2.58 kB
assets/CloudLoginView-CA5H2d81.js (new) 10.1 kB 🔴 +10.1 kB 🔴 +2.94 kB 🔴 +2.58 kB
assets/UserCheckView-Di3RbggW.js (removed) 8.4 kB 🟢 -8.4 kB 🟢 -2.22 kB 🟢 -1.93 kB
assets/UserCheckView-CC9vItWy.js (new) 8.37 kB 🔴 +8.37 kB 🔴 +2.21 kB 🔴 +1.92 kB
assets/CloudSignupView-BUQ8RIzD.js (new) 7.46 kB 🔴 +7.46 kB 🔴 +2.35 kB 🔴 +2.05 kB
assets/CloudSignupView-DAFtAnLo.js (removed) 7.46 kB 🟢 -7.46 kB 🟢 -2.35 kB 🟢 -2.05 kB
assets/CloudLayoutView-BjrY60gw.js (removed) 6.47 kB 🟢 -6.47 kB 🟢 -2.13 kB 🟢 -1.84 kB
assets/CloudLayoutView-BX4CI5Wk.js (new) 6.45 kB 🔴 +6.45 kB 🔴 +2.12 kB 🔴 +1.84 kB
assets/CloudForgotPasswordView-epHoBlGl.js (removed) 5.6 kB 🟢 -5.6 kB 🟢 -1.96 kB 🟢 -1.74 kB
assets/CloudForgotPasswordView-BZ2oso5d.js (new) 5.57 kB 🔴 +5.57 kB 🔴 +1.95 kB 🔴 +1.71 kB
assets/CloudAuthTimeoutView-9gFC7mhC.js (removed) 4.95 kB 🟢 -4.95 kB 🟢 -1.79 kB 🟢 -1.57 kB
assets/CloudAuthTimeoutView-B13GpaA7.js (new) 4.92 kB 🔴 +4.92 kB 🔴 +1.78 kB 🔴 +1.56 kB
assets/CloudSubscriptionRedirectView-A0EjgEy6.js (removed) 4.75 kB 🟢 -4.75 kB 🟢 -1.8 kB 🟢 -1.59 kB
assets/CloudSubscriptionRedirectView-DbveZXdT.js (new) 4.72 kB 🔴 +4.72 kB 🔴 +1.79 kB 🔴 +1.58 kB
assets/UserSelectView-BK2XYe7Q.js (removed) 4.49 kB 🟢 -4.49 kB 🟢 -1.64 kB 🟢 -1.47 kB
assets/UserSelectView-05dKwDTg.js (new) 4.46 kB 🔴 +4.46 kB 🔴 +1.62 kB 🔴 +1.46 kB
assets/CloudSorryContactSupportView-BO-_Aoqq.js (removed) 1.02 kB 🟢 -1.02 kB 🟢 -538 B 🟢 -469 B
assets/CloudSorryContactSupportView-DPgIvmSL.js (new) 1.02 kB 🔴 +1.02 kB 🔴 +538 B 🔴 +470 B
assets/layout-C9XfGlzo.js (new) 296 B 🔴 +296 B 🔴 +223 B 🔴 +187 B
assets/layout-o35PGLAb.js (removed) 296 B 🟢 -296 B 🟢 -224 B 🟢 -188 B

Status: 11 added / 11 removed

Panels & Settings — 409 kB (baseline 409 kB) • 🟢 -244 B

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/WorkspacePanel-B7IeVDKC.js (removed) 26.8 kB 🟢 -26.8 kB 🟢 -5.64 kB 🟢 -4.96 kB
assets/WorkspacePanel-CvKc55cl.js (new) 26.8 kB 🔴 +26.8 kB 🔴 +5.63 kB 🔴 +4.96 kB
assets/SecretsPanel-DA-IBHDy.js (removed) 21.5 kB 🟢 -21.5 kB 🟢 -5.31 kB 🟢 -4.66 kB
assets/SecretsPanel-CLRB5UP1.js (new) 21.5 kB 🔴 +21.5 kB 🔴 +5.29 kB 🔴 +4.64 kB
assets/LegacyCreditsPanel-CJ5fTblO.js (removed) 20.9 kB 🟢 -20.9 kB 🟢 -5.63 kB 🟢 -4.95 kB
assets/LegacyCreditsPanel-taTTCH9K.js (new) 20.8 kB 🔴 +20.8 kB 🔴 +5.61 kB 🔴 +4.93 kB
assets/SubscriptionPanel-Cceys392.js (new) 18.7 kB 🔴 +18.7 kB 🔴 +4.76 kB 🔴 +4.21 kB
assets/SubscriptionPanel-DXPYIYrc.js (removed) 18.7 kB 🟢 -18.7 kB 🟢 -4.76 kB 🟢 -4.2 kB
assets/KeybindingPanel-CZ9PyFeO.js (removed) 12.7 kB 🟢 -12.7 kB 🟢 -3.65 kB 🟢 -3.22 kB
assets/KeybindingPanel-HVwUnnjY.js (new) 12.6 kB 🔴 +12.6 kB 🔴 +3.64 kB 🔴 +3.22 kB
assets/ExtensionPanel-FqRcPiF-.js (removed) 9.54 kB 🟢 -9.54 kB 🟢 -2.71 kB 🟢 -2.4 kB
assets/ExtensionPanel-CnFG_FX3.js (new) 9.51 kB 🔴 +9.51 kB 🔴 +2.69 kB 🔴 +2.4 kB
assets/AboutPanel-BO9Nx84Z.js (removed) 8.62 kB 🟢 -8.62 kB 🟢 -2.46 kB 🟢 -2.23 kB
assets/AboutPanel-C82amIKb.js (new) 8.62 kB 🔴 +8.62 kB 🔴 +2.46 kB 🔴 +2.21 kB
assets/ServerConfigPanel-DqK2NaWR.js (removed) 6.68 kB 🟢 -6.68 kB 🟢 -2.18 kB 🟢 -1.97 kB
assets/ServerConfigPanel-BxDgaXWv.js (new) 6.65 kB 🔴 +6.65 kB 🔴 +2.16 kB 🔴 +1.96 kB
assets/UserPanel-CdQ1Y8vi.js (removed) 6.32 kB 🟢 -6.32 kB 🟢 -2.04 kB 🟢 -1.79 kB
assets/UserPanel-BoUs_c5N.js (new) 6.29 kB 🔴 +6.29 kB 🔴 +2.03 kB 🔴 +1.78 kB
assets/cloudRemoteConfig-BKzBPga9.js (removed) 1.48 kB 🟢 -1.48 kB 🟢 -732 B 🟢 -626 B
assets/cloudRemoteConfig-CrLhS6IX.js (new) 1.45 kB 🔴 +1.45 kB 🔴 +714 B 🔴 +620 B
assets/refreshRemoteConfig-CS0h5U_-.js (new) 1.14 kB 🔴 +1.14 kB 🔴 +520 B 🔴 +464 B
assets/refreshRemoteConfig-DawS_0e-.js (removed) 1.14 kB 🟢 -1.14 kB 🟢 -519 B 🟢 -474 B
assets/config-BK8UYp9G.js (new) 1.01 kB 🔴 +1.01 kB 🔴 +549 B 🔴 +450 B
assets/config-CJ8VnGvP.js (removed) 1.01 kB 🟢 -1.01 kB 🟢 -549 B 🟢 -445 B
assets/settings-B4SEKci9.js 26.8 kB 26.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BC1cc0fS.js 23.6 kB 23.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-Bc2B6dtS.js 24.1 kB 24.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BcpoYtvB.js 20.8 kB 20.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BthVWLgQ.js 23.3 kB 23.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CBYZ18F3.js 28.1 kB 28.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-Cnka_dKX.js 25.7 kB 25.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-D6HkNk7G.js 25 kB 25 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-gIPnacUu.js 24.2 kB 24.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-HfVYOjFC.js 32 kB 32 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-KJ7OpQSN.js 20.3 kB 20.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 12 added / 12 removed

User & Accounts — 16 kB (baseline 16.1 kB) • 🟢 -90 B

Authentication, profile, and account management bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/PasswordFields-BGrbyWzK.js (new) 4.51 kB 🔴 +4.51 kB 🔴 +1.36 kB 🔴 +1.2 kB
assets/PasswordFields-DZduq3DY.js (removed) 4.51 kB 🟢 -4.51 kB 🟢 -1.36 kB 🟢 -1.2 kB
assets/auth-BY88EWc3.js (new) 3.4 kB 🔴 +3.4 kB 🔴 +1.18 kB 🔴 +992 B
assets/auth-voln8Yeb.js (removed) 3.4 kB 🟢 -3.4 kB 🟢 -1.18 kB 🟢 -989 B
assets/SignUpForm-Bd69odZg.js (new) 3.01 kB 🔴 +3.01 kB 🔴 +1.23 kB 🔴 +1.1 kB
assets/SignUpForm-D6GOmEa-.js (removed) 3.01 kB 🟢 -3.01 kB 🟢 -1.23 kB 🟢 -1.1 kB
assets/UpdatePasswordContent-CTlbOLKU.js (removed) 2.41 kB 🟢 -2.41 kB 🟢 -1.09 kB 🟢 -964 B
assets/UpdatePasswordContent-BKzhptKw.js (new) 2.38 kB 🔴 +2.38 kB 🔴 +1.08 kB 🔴 +955 B
assets/firebaseAuthStore-DfAyZ-Oc.js (removed) 833 B 🟢 -833 B 🟢 -410 B 🟢 -368 B
assets/firebaseAuthStore-Cz_Sf6TS.js (new) 803 B 🔴 +803 B 🔴 +397 B 🔴 +353 B
assets/auth-Da_-CzX5.js (removed) 347 B 🟢 -347 B 🟢 -220 B 🟢 -214 B
assets/auth-C2xgDIOM.js (new) 317 B 🔴 +317 B 🔴 +203 B 🔴 +176 B
assets/WorkspaceProfilePic-B0BztYjc.js 1.57 kB 1.57 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 6 added / 6 removed

Editors & Dialogs — 751 B (baseline 781 B) • 🟢 -30 B

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useSubscriptionDialog-Bpzj9IKL.js (removed) 781 B 🟢 -781 B 🟢 -400 B 🟢 -344 B
assets/useSubscriptionDialog-nYiSL-Dc.js (new) 751 B 🔴 +751 B 🔴 +386 B 🔴 +332 B

Status: 1 added / 1 removed

UI Components — 36.6 kB (baseline 36.6 kB) • 🟢 -80 B

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useTerminalTabs-Dt2RcBzl.js (removed) 9.88 kB 🟢 -9.88 kB 🟢 -3.42 kB 🟢 -3.02 kB
assets/useTerminalTabs-DAdBCkeH.js (new) 9.86 kB 🔴 +9.86 kB 🔴 +3.41 kB 🔴 +3.01 kB
assets/TopbarBadge-BtCjsN6c.js (removed) 7.52 kB 🟢 -7.52 kB 🟢 -1.82 kB 🟢 -1.61 kB
assets/TopbarBadge-DSq-ReLB.js (new) 7.52 kB 🔴 +7.52 kB 🔴 +1.82 kB 🔴 +1.61 kB
assets/ComfyQueueButton-D-of0Nls.js (new) 7.17 kB 🔴 +7.17 kB 🔴 +2.32 kB 🔴 +2.07 kB
assets/ComfyQueueButton-DOv24G3Y.js (removed) 7.17 kB 🟢 -7.17 kB 🟢 -2.32 kB 🟢 -2.07 kB
assets/Button-LGYfUhES.js (new) 3 kB 🔴 +3 kB 🔴 +1.21 kB 🔴 +1.07 kB
assets/Button-uiq1UxTY.js (removed) 3 kB 🟢 -3 kB 🟢 -1.21 kB 🟢 -1.06 kB
assets/SubscribeButton-BIjp1vOi.js (removed) 2.35 kB 🟢 -2.35 kB 🟢 -1.02 kB 🟢 -893 B
assets/SubscribeButton-DZslxu8F.js (new) 2.35 kB 🔴 +2.35 kB 🔴 +1.02 kB 🔴 +891 B
assets/WidgetButton-CA5MtriV.js (removed) 1.84 kB 🟢 -1.84 kB 🟢 -877 B 🟢 -770 B
assets/WidgetButton-Dd8TTZez.js (new) 1.84 kB 🔴 +1.84 kB 🔴 +876 B 🔴 +776 B
assets/cloudFeedbackTopbarButton-EALvv_dL.js (removed) 1.64 kB 🟢 -1.64 kB 🟢 -878 B 🟢 -774 B
assets/cloudFeedbackTopbarButton-BlAEdUsW.js (new) 1.61 kB 🔴 +1.61 kB 🔴 +863 B 🔴 +763 B
assets/CloudBadge-Bjd4gDLV.js (new) 1.24 kB 🔴 +1.24 kB 🔴 +605 B 🔴 +530 B
assets/CloudBadge-DQn-idej.js (removed) 1.24 kB 🟢 -1.24 kB 🟢 -606 B 🟢 -526 B
assets/ComfyQueueButton-Jqi6ML2I.js (removed) 838 B 🟢 -838 B 🟢 -415 B 🟢 -374 B
assets/ComfyQueueButton-DOgRpDR7.js (new) 808 B 🔴 +808 B 🔴 +403 B 🔴 +358 B
assets/UserAvatar-B50esQ9A.js 1.17 kB 1.17 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 9 added / 9 removed

Data & Services — 2.11 MB (baseline 2.11 MB) • 🟢 -149 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/dialogService-CzO0-enb.js (new) 1.34 MB 🔴 +1.34 MB 🔴 +302 kB 🔴 +234 kB
assets/dialogService-D3I9SxLx.js (removed) 1.34 MB 🟢 -1.34 MB 🟢 -302 kB 🟢 -234 kB
assets/api-BsaXswE5.js (new) 643 kB 🔴 +643 kB 🔴 +145 kB 🔴 +116 kB
assets/api-d0snTXIQ.js (removed) 643 kB 🟢 -643 kB 🟢 -145 kB 🟢 -116 kB
assets/load3dService-0_G-bLLB.js (new) 91.2 kB 🔴 +91.2 kB 🔴 +19.1 kB 🔴 +16.5 kB
assets/load3dService-Bp3N4UfW.js (removed) 91.2 kB 🟢 -91.2 kB 🟢 -19.1 kB 🟢 -16.5 kB
assets/systemStatsStore-CN3ytykv.js (removed) 12.3 kB 🟢 -12.3 kB 🟢 -4.29 kB 🟢 -3.77 kB
assets/systemStatsStore-CTIXGvri.js (new) 12.2 kB 🔴 +12.2 kB 🔴 +4.27 kB 🔴 +3.76 kB
assets/releaseStore-DKmC47x4.js (removed) 8.14 kB 🟢 -8.14 kB 🟢 -2.23 kB 🟢 -1.97 kB
assets/releaseStore-Bdbdw2pH.js (new) 8.09 kB 🔴 +8.09 kB 🔴 +2.21 kB 🔴 +1.95 kB
assets/keybindingService-9i1EY4lc.js (removed) 6.58 kB 🟢 -6.58 kB 🟢 -1.71 kB 🟢 -1.48 kB
assets/keybindingService-BCf4zoeI.js (new) 6.58 kB 🔴 +6.58 kB 🔴 +1.71 kB 🔴 +1.47 kB
assets/dialogStore-BNo1twEf.js (new) 4.1 kB 🔴 +4.1 kB 🔴 +1.24 kB 🔴 +1.09 kB
assets/dialogStore-Ch4cJ-8o.js (removed) 4.1 kB 🟢 -4.1 kB 🟢 -1.24 kB 🟢 -1.09 kB
assets/bootstrapStore-B05KfpVC.js (removed) 2.13 kB 🟢 -2.13 kB 🟢 -884 B 🟢 -812 B
assets/bootstrapStore-uag1CSlN.js (new) 2.13 kB 🔴 +2.13 kB 🔴 +883 B 🔴 +808 B
assets/userStore-Bwh6DJrc.js (new) 1.85 kB 🔴 +1.85 kB 🔴 +720 B 🔴 +635 B
assets/userStore-CQKf-5Wv.js (removed) 1.85 kB 🟢 -1.85 kB 🟢 -721 B 🟢 -684 B
assets/audioService-D6z_8C0k.js (removed) 1.73 kB 🟢 -1.73 kB 🟢 -849 B 🟢 -728 B
assets/audioService-DpJ77Ya4.js (new) 1.73 kB 🔴 +1.73 kB 🔴 +847 B 🔴 +730 B
assets/releaseStore-DkAuVX4_.js (removed) 805 B 🟢 -805 B 🟢 -406 B 🟢 -353 B
assets/workflowDraftStore-BInV1Ybt.js (removed) 781 B 🟢 -781 B 🟢 -400 B 🟢 -346 B
assets/releaseStore-Due4jGKY.js (new) 775 B 🔴 +775 B 🔴 +393 B 🔴 +339 B
assets/dialogService-C0Kyp-2u.js (removed) 770 B 🟢 -770 B 🟢 -392 B 🟢 -343 B
assets/workflowDraftStore-DCLMv-pr.js (new) 751 B 🔴 +751 B 🔴 +387 B 🔴 +337 B
assets/dialogService-UioZpOHv.js (new) 740 B 🔴 +740 B 🔴 +376 B 🔴 +336 B
assets/serverConfigStore-Cg1Zzouw.js 2.32 kB 2.32 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 13 added / 13 removed

Utilities & Hooks — 237 kB (baseline 237 kB) • 🟢 -114 B

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useConflictDetection-Cgs5mKzE.js (removed) 177 kB 🟢 -177 kB 🟢 -38.9 kB 🟢 -32.4 kB
assets/useConflictDetection-DGm601vr.js (new) 177 kB 🔴 +177 kB 🔴 +38.9 kB 🔴 +32.3 kB
assets/useLoad3d-DYPJJWpN.js (new) 14.4 kB 🔴 +14.4 kB 🔴 +3.56 kB 🔴 +3.14 kB
assets/useLoad3d-ezR4laCc.js (removed) 14.4 kB 🟢 -14.4 kB 🟢 -3.56 kB 🟢 -3.14 kB
assets/useLoad3dViewer-CIwzAvfE.js (new) 14.2 kB 🔴 +14.2 kB 🔴 +3.15 kB 🔴 +2.8 kB
assets/useLoad3dViewer-gl4YwT8Y.js (removed) 14.2 kB 🟢 -14.2 kB 🟢 -3.16 kB 🟢 -2.8 kB
assets/colorUtil-CMnqUgIc.js (removed) 7 kB 🟢 -7 kB 🟢 -2.14 kB 🟢 -1.9 kB
assets/colorUtil-DOjEWuNN.js (new) 7 kB 🔴 +7 kB 🔴 +2.14 kB 🔴 +1.9 kB
assets/subscriptionCheckoutUtil-BU8CR5tb.js (removed) 4.12 kB 🟢 -4.12 kB 🟢 -1.53 kB 🟢 -1.33 kB
assets/subscriptionCheckoutUtil-wSor-k0k.js (new) 4.12 kB 🔴 +4.12 kB 🔴 +1.53 kB 🔴 +1.33 kB
assets/useFeatureFlags-CV9BbBqc.js (removed) 3.34 kB 🟢 -3.34 kB 🟢 -1.05 kB 🟢 -904 B
assets/useFeatureFlags-D66P3u-W.js (new) 3.34 kB 🔴 +3.34 kB 🔴 +1.05 kB 🔴 +907 B
assets/useWorkspaceUI-BAjCI-FK.js (removed) 3.15 kB 🟢 -3.15 kB 🟢 -891 B 🟢 -758 B
assets/useWorkspaceUI-CY3cZrD6.js (new) 3.15 kB 🔴 +3.15 kB 🔴 +889 B 🔴 +767 B
assets/useSubscriptionCredits-BukJ_MT6.js (removed) 2.75 kB 🟢 -2.75 kB 🟢 -1.04 kB 🟢 -909 B
assets/useSubscriptionCredits-BYbpz-Ld.js (new) 2.75 kB 🔴 +2.75 kB 🔴 +1.04 kB 🔴 +898 B
assets/useExternalLink-BjUBNwdD.js (new) 1.66 kB 🔴 +1.66 kB 🔴 +772 B 🔴 +680 B
assets/useExternalLink-f0I8RuzF.js (removed) 1.63 kB 🟢 -1.63 kB 🟢 -757 B 🟢 -669 B
assets/useCopyToClipboard-BjI7mr10.js (new) 1.57 kB 🔴 +1.57 kB 🔴 +670 B 🔴 +560 B
assets/useCopyToClipboard-DfGUC3g3.js (removed) 1.57 kB 🟢 -1.57 kB 🟢 -669 B 🟢 -565 B
assets/useErrorHandling-IsmmCVNm.js (new) 1.34 kB 🔴 +1.34 kB 🔴 +553 B 🔴 +477 B
assets/useErrorHandling-lLuQk7tJ.js (removed) 1.34 kB 🟢 -1.34 kB 🟢 -554 B 🟢 -481 B
assets/networkUtil-DSA9UCpE.js (new) 1.07 kB 🔴 +1.07 kB 🔴 +587 B 🔴 +498 B
assets/networkUtil-OoGWgngm.js (removed) 1.07 kB 🟢 -1.07 kB 🟢 -587 B 🟢 -489 B
assets/useLoad3d-Tv_YuMfU.js (removed) 904 B 🟢 -904 B 🟢 -445 B 🟢 -396 B
assets/useLoad3dViewer-C_5JntzH.js (removed) 883 B 🟢 -883 B 🟢 -431 B 🟢 -387 B
assets/useLoad3d-BMBMAX90.js (new) 874 B 🔴 +874 B 🔴 +436 B 🔴 +390 B
assets/audioUtils-B-iJKDkp.js (new) 858 B 🔴 +858 B 🔴 +498 B 🔴 +411 B
assets/audioUtils-nSC-AYhw.js (removed) 858 B 🟢 -858 B 🟢 -500 B 🟢 -421 B
assets/useLoad3dViewer-D0jfnqq4.js (new) 853 B 🔴 +853 B 🔴 +421 B 🔴 +374 B
assets/useCurrentUser-CjfRrJP9.js (removed) 767 B 🟢 -767 B 🟢 -394 B 🟢 -343 B
assets/useCurrentUser-sxeUSnKf.js (new) 737 B 🔴 +737 B 🔴 +379 B 🔴 +335 B
assets/envUtil-Djb4sHrV.js (removed) 524 B 🟢 -524 B 🟢 -299 B 🟢 -245 B
assets/envUtil-BoEUYO9X.js (new) 466 B 🔴 +466 B 🔴 +294 B 🔴 +258 B
assets/_plugin-vue_export-helper-D3CTfeG5.js (removed) 315 B 🟢 -315 B 🟢 -230 B 🟢 -206 B
assets/_plugin-vue_export-helper-D53b894U.js (new) 315 B 🔴 +315 B 🔴 +230 B 🔴 +206 B
assets/markdownRendererUtil-YzPqYQr3.js 1.56 kB 1.56 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SkeletonUtils-CWsb-x0f.js 133 B 133 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 18 added / 18 removed

Vendor & Third-Party — 8.77 MB (baseline 8.77 MB) • ⚪ 0 B

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-other-B5SCkhZ3.js (removed) 1.55 MB 🟢 -1.55 MB 🟢 -323 kB 🟢 -257 kB
assets/vendor-other-C1doMZFE.js (new) 1.55 MB 🔴 +1.55 MB 🔴 +323 kB 🔴 +257 kB
assets/vendor-tiptap-BkdC6us-.js (removed) 632 kB 🟢 -632 kB 🟢 -147 kB 🟢 -120 kB
assets/vendor-tiptap-eGUDVAYp.js (new) 632 kB 🔴 +632 kB 🔴 +147 kB 🔴 +119 kB
assets/vendor-reka-ui-BBMmji0g.js (new) 240 kB 🔴 +240 kB 🔴 +49 kB 🔴 +40.8 kB
assets/vendor-reka-ui-CPrt7lw0.js (removed) 240 kB 🟢 -240 kB 🟢 -49 kB 🟢 -40.8 kB
assets/vendor-yjs-B7dXz571.js (new) 143 kB 🔴 +143 kB 🔴 +29.6 kB 🔴 +25.9 kB
assets/vendor-yjs-BtrvIr1x.js (removed) 143 kB 🟢 -143 kB 🟢 -29.6 kB 🟢 -25.9 kB
assets/vendor-i18n-C6_f776o.js (removed) 132 kB 🟢 -132 kB 🟢 -27.6 kB 🟢 -23.7 kB
assets/vendor-i18n-cn-CKf2l.js (new) 132 kB 🔴 +132 kB 🔴 +27.6 kB 🔴 +23.7 kB
assets/vendor-vueuse-BNJllOi7.js (new) 111 kB 🔴 +111 kB 🔴 +27.4 kB 🔴 +24 kB
assets/vendor-vueuse-CS5mlw4Q.js (removed) 111 kB 🟢 -111 kB 🟢 -27.4 kB 🟢 -24 kB
assets/vendor-zod-BTzCBa7h.js (new) 110 kB 🔴 +110 kB 🔴 +19.7 kB 🔴 +16.7 kB
assets/vendor-zod-gAWmQIF-.js (removed) 110 kB 🟢 -110 kB 🟢 -19.7 kB 🟢 -16.7 kB
assets/vendor-axios-D0w6WYH0.js (removed) 71.6 kB 🟢 -71.6 kB 🟢 -20.2 kB 🟢 -17.8 kB
assets/vendor-axios-qYA_aG5-.js (new) 71.6 kB 🔴 +71.6 kB 🔴 +20.2 kB 🔴 +17.8 kB
assets/vendor-chart-DPuwexxf.js 399 kB 399 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-firebase-CLEC0CcJ.js 842 kB 842 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-markdown-CLFqBOQ2.js 102 kB 102 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-BrYQO8Nm.js 1.74 MB 1.74 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-sentry-BVA5kbUC.js 183 kB 183 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-three-Q97wQk05.js 1.8 MB 1.8 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-core-BBP9kkTE.js 312 kB 312 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-CZroAclV.js 398 kB 398 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 8 added / 8 removed

Other — 7.15 MB (baseline 7.15 MB) • 🟢 -1.03 kB

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/i18n-CPOw31P3.js (new) 482 kB 🔴 +482 kB 🔴 +92.4 kB 🔴 +72.1 kB
assets/i18n-CVBqs4R5.js (removed) 482 kB 🟢 -482 kB 🟢 -92.4 kB 🟢 -72.1 kB
assets/core-vvTxeZ41.js (removed) 71.8 kB 🟢 -71.8 kB 🟢 -18.5 kB 🟢 -15.9 kB
assets/core-DuKpirEK.js (new) 71.8 kB 🔴 +71.8 kB 🔴 +18.5 kB 🔴 +15.9 kB
assets/groupNode-CSVuujyQ.js (removed) 70.9 kB 🟢 -70.9 kB 🟢 -17.5 kB 🟢 -15.4 kB
assets/groupNode-DQl7VJup.js (new) 70.9 kB 🔴 +70.9 kB 🔴 +17.5 kB 🔴 +15.4 kB
assets/WidgetSelect-CrFu21GU.js (removed) 56.8 kB 🟢 -56.8 kB 🟢 -12 kB 🟢 -10.4 kB
assets/WidgetSelect-DiGmnpTX.js (new) 56.8 kB 🔴 +56.8 kB 🔴 +12 kB 🔴 +10.4 kB
assets/SubscriptionRequiredDialogContentWorkspace-_qb85vjF.js (removed) 46 kB 🟢 -46 kB 🟢 -8.61 kB 🟢 -7.45 kB
assets/SubscriptionRequiredDialogContentWorkspace-BJvqAsuK.js (new) 46 kB 🔴 +46 kB 🔴 +8.6 kB 🔴 +7.42 kB
assets/Load3DControls-CjSxg5a9.js (removed) 30.9 kB 🟢 -30.9 kB 🟢 -5.34 kB 🟢 -4.65 kB
assets/Load3DControls-ynswmwcZ.js (new) 30.9 kB 🔴 +30.9 kB 🔴 +5.34 kB 🔴 +4.66 kB
assets/SettingDialogContent-CsFHSrZc.js (removed) 30.9 kB 🟢 -30.9 kB 🟢 -8.01 kB 🟢 -7.04 kB
assets/SettingDialogContent-BCoxQqD8.js (new) 30.8 kB 🔴 +30.8 kB 🔴 +8.01 kB 🔴 +7.04 kB
assets/SubscriptionRequiredDialogContent-DGgRSVYK.js (new) 26.1 kB 🔴 +26.1 kB 🔴 +6.56 kB 🔴 +5.75 kB
assets/SubscriptionRequiredDialogContent-DQ7Yntbv.js (removed) 26.1 kB 🟢 -26.1 kB 🟢 -6.55 kB 🟢 -5.76 kB
assets/Load3dViewerContent-BA2vSsRT.js (removed) 23.3 kB 🟢 -23.3 kB 🟢 -5.28 kB 🟢 -4.57 kB
assets/Load3dViewerContent-BsC_1Kpm.js (new) 23.3 kB 🔴 +23.3 kB 🔴 +5.27 kB 🔴 +4.57 kB
assets/WidgetImageCrop-x8dFIkFm.js (removed) 22.4 kB 🟢 -22.4 kB 🟢 -5.53 kB 🟢 -4.87 kB
assets/WidgetImageCrop-BKSxJDfv.js (new) 22.3 kB 🔴 +22.3 kB 🔴 +5.52 kB 🔴 +4.85 kB
assets/SubscriptionPanelContentWorkspace-BbduPAXd.js (new) 21.8 kB 🔴 +21.8 kB 🔴 +5.19 kB 🔴 +4.59 kB
assets/SubscriptionPanelContentWorkspace-mzJk8qxm.js (removed) 21.8 kB 🟢 -21.8 kB 🟢 -5.19 kB 🟢 -4.59 kB
assets/CurrentUserPopoverWorkspace-DtT3_ge0.js (removed) 20.7 kB 🟢 -20.7 kB 🟢 -5.11 kB 🟢 -4.53 kB
assets/CurrentUserPopoverWorkspace-qC7zwiAN.js (new) 20.7 kB 🔴 +20.7 kB 🔴 +5.11 kB 🔴 +4.54 kB
assets/FormItem-B_wvuq6x.js (new) 20.2 kB 🔴 +20.2 kB 🔴 +4.87 kB 🔴 +4.25 kB
assets/FormItem-Dg5u4a7J.js (removed) 20.2 kB 🟢 -20.2 kB 🟢 -4.87 kB 🟢 -4.25 kB
assets/SignInContent-B-XwcEcD.js (removed) 19 kB 🟢 -19 kB 🟢 -4.83 kB 🟢 -4.22 kB
assets/SignInContent-Flu-_OzX.js (new) 19 kB 🔴 +19 kB 🔴 +4.82 kB 🔴 +4.21 kB
assets/WidgetRecordAudio-D2watA4T.js (removed) 17.3 kB 🟢 -17.3 kB 🟢 -4.97 kB 🟢 -4.44 kB
assets/WidgetRecordAudio-CfGXrvsR.js (new) 17.3 kB 🔴 +17.3 kB 🔴 +4.96 kB 🔴 +4.45 kB
assets/Load3D-D1NZBaaY.js (new) 16.2 kB 🔴 +16.2 kB 🔴 +4.04 kB 🔴 +3.52 kB
assets/Load3D-WqGqjLuA.js (removed) 16.2 kB 🟢 -16.2 kB 🟢 -4.04 kB 🟢 -3.53 kB
assets/MissingModelsWarning-Cd-usuaE.js (removed) 16.1 kB 🟢 -16.1 kB 🟢 -4.41 kB 🟢 -3.93 kB
assets/MissingModelsWarning-BLXi4vRl.js (new) 16.1 kB 🔴 +16.1 kB 🔴 +4.41 kB 🔴 +3.92 kB
assets/WidgetInputNumber-B3igw07I.js (new) 15.8 kB 🔴 +15.8 kB 🔴 +4.26 kB 🔴 +3.79 kB
assets/WidgetInputNumber-BP7rkueB.js (removed) 15.8 kB 🟢 -15.8 kB 🟢 -4.26 kB 🟢 -3.8 kB
assets/load3d-DlWXP9V7.js (removed) 14.8 kB 🟢 -14.8 kB 🟢 -4.2 kB 🟢 -3.66 kB
assets/load3d-CjMRiJ1V.js (new) 14.8 kB 🔴 +14.8 kB 🔴 +4.19 kB 🔴 +3.65 kB
assets/LazyImage-27bDBTQB.js (removed) 12.3 kB 🟢 -12.3 kB 🟢 -3.8 kB 🟢 -3.34 kB
assets/LazyImage-Br35X4MU.js (new) 12.3 kB 🔴 +12.3 kB 🔴 +3.8 kB 🔴 +3.35 kB
assets/AudioPreviewPlayer-10QylVrQ.js (removed) 10.9 kB 🟢 -10.9 kB 🟢 -3.21 kB 🟢 -2.87 kB
assets/AudioPreviewPlayer-B7gqfZW-.js (new) 10.9 kB 🔴 +10.9 kB 🔴 +3.21 kB 🔴 +2.87 kB
assets/NodeConflictDialogContent-BhQY3RNr.js (removed) 10.5 kB 🟢 -10.5 kB 🟢 -2.37 kB 🟢 -2.09 kB
assets/NodeConflictDialogContent-iNQQ5eU_.js (new) 10.5 kB 🔴 +10.5 kB 🔴 +2.36 kB 🔴 +2.06 kB
assets/changeTracker-CDuOfhDX.js (new) 9.4 kB 🔴 +9.4 kB 🔴 +2.9 kB 🔴 +2.56 kB
assets/changeTracker-DmLTQ-2d.js (removed) 9.4 kB 🟢 -9.4 kB 🟢 -2.9 kB 🟢 -2.56 kB
assets/nodeTemplates-DCk_xPNa.js (removed) 9.37 kB 🟢 -9.37 kB 🟢 -3.29 kB 🟢 -2.89 kB
assets/nodeTemplates-Bi7H84bQ.js (new) 9.34 kB 🔴 +9.34 kB 🔴 +3.28 kB 🔴 +2.88 kB
assets/SelectValue-CCewhfpC.js (new) 8.94 kB 🔴 +8.94 kB 🔴 +2.27 kB 🔴 +1.99 kB
assets/SelectValue-DlZV-zTo.js (removed) 8.94 kB 🟢 -8.94 kB 🟢 -2.27 kB 🟢 -1.99 kB
assets/InviteMemberDialogContent-CUNmGYs9.js (removed) 7.95 kB 🟢 -7.95 kB 🟢 -2.58 kB 🟢 -2.23 kB
assets/InviteMemberDialogContent-D2U1AtmW.js (new) 7.92 kB 🔴 +7.92 kB 🔴 +2.56 kB 🔴 +2.24 kB
assets/WidgetWithControl-D2TFp1ZT.js (removed) 7.04 kB 🟢 -7.04 kB 🟢 -2.63 kB 🟢 -2.34 kB
assets/WidgetWithControl-Dg-5tXUM.js (new) 7.04 kB 🔴 +7.04 kB 🔴 +2.63 kB 🔴 +2.36 kB
assets/Load3DConfiguration-Bs9u-tYN.js (removed) 6.36 kB 🟢 -6.36 kB 🟢 -1.93 kB 🟢 -1.69 kB
assets/Load3DConfiguration-qMfMj9P5.js (new) 6.36 kB 🔴 +6.36 kB 🔴 +1.93 kB 🔴 +1.69 kB
assets/MissingNodesContent-3Vc9mgEI.js (new) 6.15 kB 🔴 +6.15 kB 🔴 +2.09 kB 🔴 +1.86 kB
assets/MissingNodesContent-Ct_PivfK.js (removed) 6.15 kB 🟢 -6.15 kB 🟢 -2.08 kB 🟢 -1.85 kB
assets/CreateWorkspaceDialogContent-CKQVKWN-.js (removed) 5.58 kB 🟢 -5.58 kB 🟢 -2.01 kB 🟢 -1.75 kB
assets/CreateWorkspaceDialogContent-CmgcK6KT.js (new) 5.55 kB 🔴 +5.55 kB 🔴 +2 kB 🔴 +1.75 kB
assets/EditWorkspaceDialogContent-B4gsYwIf.js (removed) 5.38 kB 🟢 -5.38 kB 🟢 -1.97 kB 🟢 -1.71 kB
assets/EditWorkspaceDialogContent-B4Rnl12V.js (new) 5.35 kB 🔴 +5.35 kB 🔴 +1.95 kB 🔴 +1.71 kB
assets/ValueControlPopover-DHe-QyS8.js (removed) 4.96 kB 🟢 -4.96 kB 🟢 -1.79 kB 🟢 -1.6 kB
assets/ValueControlPopover-gwmTNjnR.js (new) 4.93 kB 🔴 +4.93 kB 🔴 +1.78 kB 🔴 +1.59 kB
assets/Preview3d-CbfYeYpF.js (removed) 4.86 kB 🟢 -4.86 kB 🟢 -1.59 kB 🟢 -1.39 kB
assets/CancelSubscriptionDialogContent-BdocZni7.js (removed) 4.84 kB 🟢 -4.84 kB 🟢 -1.8 kB 🟢 -1.58 kB
assets/Preview3d-BBHJSVZT.js (new) 4.83 kB 🔴 +4.83 kB 🔴 +1.58 kB 🔴 +1.37 kB
assets/CancelSubscriptionDialogContent-CedpTfzW.js (new) 4.81 kB 🔴 +4.81 kB 🔴 +1.79 kB 🔴 +1.57 kB
assets/MissingNodesFooter-DgYp66d_.js (removed) 4.81 kB 🟢 -4.81 kB 🟢 -1.78 kB 🟢 -1.57 kB
assets/MissingNodesFooter-ISeGEZsa.js (new) 4.81 kB 🔴 +4.81 kB 🔴 +1.78 kB 🔴 +1.58 kB
assets/AnimationControls-CaZCanJe.js (new) 4.61 kB 🔴 +4.61 kB 🔴 +1.6 kB 🔴 +1.41 kB
assets/AnimationControls-s1zsJztH.js (removed) 4.61 kB 🟢 -4.61 kB 🟢 -1.6 kB 🟢 -1.41 kB
assets/DeleteWorkspaceDialogContent-_CBVxQwv.js (removed) 4.28 kB 🟢 -4.28 kB 🟢 -1.65 kB 🟢 -1.43 kB
assets/DeleteWorkspaceDialogContent-BAmu3zAt.js (new) 4.25 kB 🔴 +4.25 kB 🔴 +1.64 kB 🔴 +1.43 kB
assets/LeaveWorkspaceDialogContent-DyuB-JO_.js (removed) 4.11 kB 🟢 -4.11 kB 🟢 -1.6 kB 🟢 -1.39 kB
assets/RemoveMemberDialogContent-CsLbxbvi.js (removed) 4.09 kB 🟢 -4.09 kB 🟢 -1.55 kB 🟢 -1.35 kB
assets/LeaveWorkspaceDialogContent-C7pOlgl0.js (new) 4.08 kB 🔴 +4.08 kB 🔴 +1.59 kB 🔴 +1.38 kB
assets/RemoveMemberDialogContent-BkgSMqcD.js (new) 4.06 kB 🔴 +4.06 kB 🔴 +1.54 kB 🔴 +1.33 kB
assets/RevokeInviteDialogContent-BDc-Ni36.js (removed) 4 kB 🟢 -4 kB 🟢 -1.56 kB 🟢 -1.37 kB
assets/RevokeInviteDialogContent-2z3nivl7.js (new) 3.97 kB 🔴 +3.97 kB 🔴 +1.55 kB 🔴 +1.35 kB
assets/WidgetGalleria-DXX2ajdG.js (removed) 3.61 kB 🟢 -3.61 kB 🟢 -1.4 kB 🟢 -1.25 kB
assets/WidgetGalleria-QnD5GX-o.js (new) 3.61 kB 🔴 +3.61 kB 🔴 +1.39 kB 🔴 +1.25 kB
assets/Slider-B7gOoOBF.js (removed) 3.52 kB 🟢 -3.52 kB 🟢 -1.36 kB 🟢 -1.19 kB
assets/Slider-D6pElFCM.js (new) 3.52 kB 🔴 +3.52 kB 🔴 +1.37 kB 🔴 +1.19 kB
assets/saveMesh-Cx0AMLcj.js (removed) 3.42 kB 🟢 -3.42 kB 🟢 -1.47 kB 🟢 -1.31 kB
assets/saveMesh-Cj5QHiQA.js (new) 3.4 kB 🔴 +3.4 kB 🔴 +1.45 kB 🔴 +1.31 kB
assets/WidgetTextarea-CNKkymLA.js (new) 3.14 kB 🔴 +3.14 kB 🔴 +1.3 kB 🔴 +1.14 kB
assets/WidgetTextarea-IA4Drc0U.js (removed) 3.14 kB 🟢 -3.14 kB 🟢 -1.3 kB 🟢 -1.14 kB
assets/cloudSessionCookie-D22sDh14.js (removed) 3.12 kB 🟢 -3.12 kB 🟢 -1.09 kB 🟢 -964 B
assets/cloudSessionCookie-DyJsxW9o.js (new) 3.12 kB 🔴 +3.12 kB 🔴 +1.09 kB 🔴 +991 B
assets/WidgetImageCompare-BA7xV_Kz.js (new) 3.1 kB 🔴 +3.1 kB 🔴 +1.15 kB 🔴 +997 B
assets/WidgetImageCompare-D8fnwO5D.js (removed) 3.1 kB 🟢 -3.1 kB 🟢 -1.15 kB 🟢 -1.01 kB
assets/GlobalToast-B2lLjZKI.js (removed) 2.91 kB 🟢 -2.91 kB 🟢 -1.22 kB 🟢 -1.07 kB
assets/GlobalToast-CCF4R72q.js (new) 2.91 kB 🔴 +2.91 kB 🔴 +1.21 kB 🔴 +1.03 kB
assets/WidgetColorPicker-D6HnwloN.js (new) 2.9 kB 🔴 +2.9 kB 🔴 +1.23 kB 🔴 +1.11 kB
assets/WidgetColorPicker-r92nsnE8.js (removed) 2.9 kB 🟢 -2.9 kB 🟢 -1.23 kB 🟢 -1.11 kB
assets/ApiNodesSignInContent-BkAcNhna.js (new) 2.69 kB 🔴 +2.69 kB 🔴 +1.05 kB 🔴 +921 B
assets/ApiNodesSignInContent-CORRuzcg.js (removed) 2.69 kB 🟢 -2.69 kB 🟢 -1.05 kB 🟢 -947 B
assets/WidgetToggleSwitch-DumzquCf.js (new) 2.5 kB 🔴 +2.5 kB 🔴 +1.09 kB 🔴 +974 B
assets/WidgetToggleSwitch-gI503ait.js (removed) 2.5 kB 🟢 -2.5 kB 🟢 -1.1 kB 🟢 -992 B
assets/NodeConflictFooter-Bkib4phv.js (removed) 2.37 kB 🟢 -2.37 kB 🟢 -1.03 kB 🟢 -892 B
assets/NodeConflictFooter-DbA4rwFa.js (new) 2.37 kB 🔴 +2.37 kB 🔴 +1.03 kB 🔴 +907 B
assets/SubscribeToRun-C2GgGUaK.js (new) 2.2 kB 🔴 +2.2 kB 🔴 +1.01 kB 🔴 +900 B
assets/SubscribeToRun-CswYzceR.js (removed) 2.2 kB 🟢 -2.2 kB 🟢 -1.01 kB 🟢 -899 B
assets/WidgetLayoutField-D2vH95iI.js (removed) 1.95 kB 🟢 -1.95 kB 🟢 -880 B 🟢 -764 B
assets/WidgetLayoutField-Dr-F4uad.js (new) 1.95 kB 🔴 +1.95 kB 🔴 +881 B 🔴 +758 B
assets/ImportFailedNodeFooter-BpTP1fnO.js (new) 1.88 kB 🔴 +1.88 kB 🔴 +865 B 🔴 +752 B
assets/ImportFailedNodeFooter-DtjCNMK9.js (removed) 1.88 kB 🟢 -1.88 kB 🟢 -867 B 🟢 -754 B
assets/WidgetInputText-BoC2pNt7.js (new) 1.85 kB 🔴 +1.85 kB 🔴 +872 B 🔴 +791 B
assets/WidgetInputText-Dco9umyN.js (removed) 1.85 kB 🟢 -1.85 kB 🟢 -876 B 🟢 -802 B
assets/SettingDialogHeader-Bh7iIKnA.js (removed) 1.8 kB 🟢 -1.8 kB 🟢 -895 B 🟢 -792 B
assets/SettingDialogHeader-LQdPnftm.js (new) 1.8 kB 🔴 +1.8 kB 🔴 +895 B 🔴 +806 B
assets/BaseViewTemplate-DSXMzViN.js (new) 1.78 kB 🔴 +1.78 kB 🔴 +926 B 🔴 +809 B
assets/BaseViewTemplate-CUITYRai.js (removed) 1.75 kB 🟢 -1.75 kB 🟢 -912 B 🟢 -826 B
assets/MediaImageTop-CfSf55hX.js (new) 1.75 kB 🔴 +1.75 kB 🔴 +879 B 🔴 +749 B
assets/MediaImageTop-Ci7hK6Hx.js (removed) 1.75 kB 🟢 -1.75 kB 🟢 -879 B 🟢 -750 B
assets/CloudRunButtonWrapper-DoPRxCYv.js (removed) 1.72 kB 🟢 -1.72 kB 🟢 -809 B 🟢 -733 B
assets/CloudRunButtonWrapper-CNCtZOJw.js (new) 1.69 kB 🔴 +1.69 kB 🔴 +795 B 🔴 +717 B
assets/signInSchema-CXnpEfIH.js (removed) 1.53 kB 🟢 -1.53 kB 🟢 -563 B 🟢 -488 B
assets/signInSchema-Dce6V2W-.js (new) 1.53 kB 🔴 +1.53 kB 🔴 +562 B 🔴 +525 B
assets/cloudBadges-Dg7vdSl9.js (removed) 1.41 kB 🟢 -1.41 kB 🟢 -730 B 🟢 -636 B
assets/cloudBadges-DJXsfu2F.js (new) 1.38 kB 🔴 +1.38 kB 🔴 +717 B 🔴 +619 B
assets/cloudSubscription-D-pdzhjs.js (removed) 1.37 kB 🟢 -1.37 kB 🟢 -678 B 🟢 -584 B
assets/cloudSubscription-7GhWAeG7.js (new) 1.34 kB 🔴 +1.34 kB 🔴 +665 B 🔴 +578 B
assets/MissingNodesHeader-BzeTTUc-.js (new) 1.09 kB 🔴 +1.09 kB 🔴 +579 B 🔴 +503 B
assets/MissingNodesHeader-YwveLyUp.js (removed) 1.09 kB 🟢 -1.09 kB 🟢 -579 B 🟢 -503 B
assets/NodeConflictHeader-DyMP7Pq3.js (new) 1.09 kB 🔴 +1.09 kB 🔴 +566 B 🔴 +478 B
assets/NodeConflictHeader-WwA-9ZoH.js (removed) 1.09 kB 🟢 -1.09 kB 🟢 -566 B 🟢 -479 B
assets/Load3D-D5owQZKw.js (removed) 1.08 kB 🟢 -1.08 kB 🟢 -508 B 🟢 -449 B
assets/ImportFailedNodeHeader-BoA1xnh6.js (removed) 1.08 kB 🟢 -1.08 kB 🟢 -551 B 🟢 -470 B
assets/ImportFailedNodeHeader-BuiKS0Ld.js (new) 1.08 kB 🔴 +1.08 kB 🔴 +552 B 🔴 +472 B
assets/Load3D-BTXKjrkf.js (new) 1.05 kB 🔴 +1.05 kB 🔴 +494 B 🔴 +435 B
assets/nightlyBadges-VvXHbYaC.js (removed) 1.05 kB 🟢 -1.05 kB 🟢 -555 B 🟢 -492 B
assets/nightlyBadges-CeRkMYCR.js (new) 1.02 kB 🔴 +1.02 kB 🔴 +541 B 🔴 +480 B
assets/Load3dViewerContent-QeBgBqk5.js (removed) 1 kB 🟢 -1 kB 🟢 -478 B 🟢 -426 B
assets/SubscriptionPanelContentWorkspace-B_H2V92Q.js (removed) 975 B 🟢 -975 B 🟢 -460 B 🟢 -396 B
assets/Load3dViewerContent-uN3KSuR1.js (new) 974 B 🔴 +974 B 🔴 +464 B 🔴 +410 B
assets/SubscriptionPanelContentWorkspace-DJTcuKup.js (new) 945 B 🔴 +945 B 🔴 +445 B 🔴 +389 B
assets/SettingDialogContent-CdKrMxnS.js (removed) 917 B 🟢 -917 B 🟢 -443 B 🟢 -394 B
assets/ComfyOrgHeader-Cb9w2YJJ.js (new) 909 B 🔴 +909 B 🔴 +496 B 🔴 +434 B
assets/ComfyOrgHeader-DFENHLtB.js (removed) 909 B 🟢 -909 B 🟢 -494 B 🟢 -424 B
assets/SettingDialogContent-BBEBObFr.js (new) 887 B 🔴 +887 B 🔴 +431 B 🔴 +379 B
assets/changeTracker-DfMB7KTU.js (removed) 802 B 🟢 -802 B 🟢 -406 B 🟢 -352 B
assets/WidgetLegacy-CS2zdwQ_.js (removed) 790 B 🟢 -790 B 🟢 -407 B 🟢 -358 B
assets/changeTracker-COvZhEcU.js (new) 772 B 🔴 +772 B 🔴 +393 B 🔴 +340 B
assets/graphHasMissingNodes-BlVvrkK0.js (new) 761 B 🔴 +761 B 🔴 +374 B 🔴 +321 B
assets/graphHasMissingNodes-CxEGaFyi.js (removed) 761 B 🟢 -761 B 🟢 -373 B 🟢 -323 B
assets/WidgetLegacy-B1Bb78Rs.js (new) 760 B 🔴 +760 B 🔴 +394 B 🔴 +342 B
assets/widget-DZ2L2V2o.js (new) 445 B 🔴 +445 B 🔴 +304 B 🔴 +247 B
assets/widget-RLUqfB5N.js (removed) 445 B 🟢 -445 B 🟢 -305 B 🟢 -247 B
assets/widgetTypes-CvFcS86j.js (removed) 393 B 🟢 -393 B 🟢 -259 B 🟢 -213 B
assets/widgetTypes-CYQJBz0f.js (new) 393 B 🔴 +393 B 🔴 +260 B 🔴 +245 B
assets/WidgetInputNumber-CCnYwFxg.js (removed) 392 B 🟢 -392 B 🟢 -231 B 🟢 -205 B
assets/WidgetInputNumber-CPIhtc83.js (new) 392 B 🔴 +392 B 🔴 +232 B 🔴 +216 B
assets/SettingDialogHeader-jyR7Y2ds.js (removed) 375 B 🟢 -375 B 🟢 -227 B 🟢 -211 B
assets/SettingDialogHeader-CDGlJoTl.js (new) 345 B 🔴 +345 B 🔴 +211 B 🔴 +191 B
assets/types-VDank0gz.js (removed) 318 B 🟢 -318 B 🟢 -225 B 🟢 -204 B
assets/src-Dgc1EJR_.js (removed) 251 B 🟢 -251 B 🟢 -213 B 🟢 -196 B
assets/src-Q7PYLmIC.js (new) 251 B 🔴 +251 B 🔴 +213 B 🔴 +188 B
assets/types-BYdQ-wbS.js (new) 245 B 🔴 +245 B 🔴 +175 B 🔴 +139 B
assets/telemetry-C9AnI0k5.js (new) 226 B 🔴 +226 B 🔴 +185 B 🔴 +154 B
assets/telemetry-ClsP3hA9.js (removed) 226 B 🟢 -226 B 🟢 -183 B 🟢 -158 B
assets/i18n-BZqhM1Bl.js (new) 199 B 🔴 +199 B 🔴 +160 B 🔴 +139 B
assets/i18n-KKbabUHa.js (removed) 199 B 🟢 -199 B 🟢 -161 B 🟢 -140 B
assets/auto-zCGpezkl.js 1.7 kB 1.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/comfy-logo-single-CzGozBag.js 198 B 198 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-5h65sKz2.js 16.2 kB 16.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-B1ebAe6N.js 16.7 kB 16.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CRx-vqG1.js 15.4 kB 15.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DIwahzUa.js 15.2 kB 15.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DMlRtEU0.js 15.3 kB 15.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DpS8y4O5.js 17.9 kB 17.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-FXC3_zxH.js 16.7 kB 16.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-hWSmKRGf.js 14.6 kB 14.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-j-tQgnMj.js 14.4 kB 14.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-SmCqaJk0.js 15.9 kB 15.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-WU4257sl.js 15.4 kB 15.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ImportFailedNodeContent-CFc03Tip.js 2.48 kB 2.48 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-C38gxHH8.js 114 kB 114 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CgjHOkrX.js 161 kB 161 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Cgqg3q6e.js 180 kB 180 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CqLSuwgg.js 128 kB 128 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CUnKsvCy.js 129 kB 129 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-D1jWNpGv.js 113 kB 113 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-D5rAzkkP.js 131 kB 131 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DmB5sahX.js 136 kB 136 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DY2iV8sv.js 148 kB 148 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-MY2-qMci.js 155 kB 155 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-ZndfQssq.js 133 kB 133 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DTop-68BNrAjP.js 1.82 kB 1.82 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-Iq5PlzyI.js 1.43 kB 1.43 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-MY4C12Xl.js 2.23 kB 2.23 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BSsCapVw.js 375 kB 375 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BtRKM3M2.js 405 kB 405 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-ClO6R62B.js 329 kB 329 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DJgvVsx3.js 358 kB 358 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DjqMN7vc.js 332 kB 332 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DLQi6_4L.js 406 kB 406 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DSY1ao6T.js 361 kB 361 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-eHA8ICwM.js 361 kB 361 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-GqHfcoE5.js 354 kB 354 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-oC4LLwGi.js 442 kB 442 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-ZrZ0pB9x.js 365 kB 365 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/OBJLoader2WorkerModule-DTMpvldF.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/PanelTemplate-CIz8rKRB.js 1.2 kB 1.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/previousFullPath-B7z583a8.js 665 B 665 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/rolldown-runtime-Ca2S-reV.js 1.87 kB 1.87 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-DNUpZ6Xj.js 131 B 131 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-q5CDrAhg.js 3.94 kB 3.94 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-rk55tEpB.js 2.21 kB 2.21 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMarkdown-C97vcvEN.js 2.88 kB 2.88 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-HMrZZpDm.js 1.1 kB 1.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 82 added / 82 removed

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
src/views/templates/BaseViewTemplate.vue (1)

25-49: ⚠️ Potential issue | 🟠 Major

Guard against missing electronAPI() to avoid runtime crashes.
isDesktop is compile-time, but electronAPI() can still be null (e.g., preload failure or dev runs). Add a null check before calling changeTheme.

Suggested fix
 onMounted(async () => {
   if (isDesktop) {
     await nextTick()

-    electronAPI().changeTheme({
+    const api = electronAPI()
+    if (!api) return
+    api.changeTheme({
       ...(dark ? darkTheme : lightTheme),
       height: topMenuRef.value?.getBoundingClientRect().height ?? 0
     })
   }
 })
src/stores/electronDownloadStore.ts (1)

53-64: ⚠️ Potential issue | 🟡 Minor

Guard actions when DownloadManager is unavailable.
With the non-null assertions, any unexpected call path in web builds will throw. Consider a defensive guard (or a controlled error) to avoid hard crashes.

🛡️ Suggested defensive guard
-  }) => DownloadManager!.startDownload(url, savePath, filename)
-  const pause = (url: string) => DownloadManager!.pauseDownload(url)
-  const resume = (url: string) => DownloadManager!.resumeDownload(url)
-  const cancel = (url: string) => DownloadManager!.cancelDownload(url)
+  }) => {
+    if (!DownloadManager) return
+    return DownloadManager.startDownload(url, savePath, filename)
+  }
+  const pause = (url: string) => {
+    if (!DownloadManager) return
+    return DownloadManager.pauseDownload(url)
+  }
+  const resume = (url: string) => {
+    if (!DownloadManager) return
+    return DownloadManager.resumeDownload(url)
+  }
+  const cancel = (url: string) => {
+    if (!DownloadManager) return
+    return DownloadManager.cancelDownload(url)
+  }

As per coding guidelines: Implement proper error handling; Provide user-friendly and actionable error messages.

🧹 Nitpick comments (1)
src/platform/updates/common/releaseStore.test.ts (1)

21-28: Reset mockData.isDesktop in the root beforeEach to avoid state leakage.
Because the hoisted object is mutable, later suites can inherit the previous state unless it’s reset explicitly.

♻️ Suggested reset for test isolation
   beforeEach(() => {
     setActivePinia(createTestingPinia({ stubActions: false }))
 
     vi.resetAllMocks()
     mockSystemStatsState.reset()
+    mockData.isDesktop = true
   })

Based on learnings: Applies to **/*.test.ts : Keep module mocks contained; do not use global mutable state within test files; use vi.hoisted() if necessary for per-test Arrange phase manipulation.

…tant

Replace all runtime isElectron() function calls with the build-time
isDesktop constant from @/platform/distribution/types. This aligns
desktop detection with the existing distribution system (__DISTRIBUTION__
compile-time constant set by Vite), enabling dead-code elimination in
non-desktop builds.

- Remove isElectron() from envUtil.ts
- Update isNativeWindow() to use isDesktop
- Migrate 30 files from isElectron() to isDesktop
- Guard electronAPI() calls behind isDesktop checks
- Update 7 test files to use vi.hoisted mock pattern
- Add DISTRIBUTION=desktop to dev:electron script

Amp-Thread-ID: https://ampcode.com/threads/T-019c3604-e5ba-7062-9561-a97d8f427725
@christian-byrne christian-byrne force-pushed the refactor/replace-is-electron-with-is-desktop branch from 0f57c00 to fa32f19 Compare February 7, 2026 23:24
@socket-security
Copy link

Warning

Review the following alerts detected in dependencies.

According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.

Action Severity Alert  (click "▶" to expand/collapse)
Warn High
Obfuscated code: npm entities is 91.0% likely obfuscated

Confidence: 0.91

Location: Package overview

From: pnpm-lock.yamlnpm/entities@4.5.0

ℹ Read more on: This package | This alert | What is obfuscated code?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should not obfuscate their code. Consider not using packages with obfuscated code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/entities@4.5.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn High
Obfuscated code: npm entities is 91.0% likely obfuscated

Confidence: 0.91

Location: Package overview

From: pnpm-lock.yamlnpm/entities@6.0.1

ℹ Read more on: This package | This alert | What is obfuscated code?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should not obfuscate their code. Consider not using packages with obfuscated code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/entities@6.0.1. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

View full report

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/stores/electronDownloadStore.ts (1)

53-64: ⚠️ Potential issue | 🟠 Major

Non-null assertions on DownloadManager! can crash in non-desktop builds.

The start, pause, resume, and cancel methods use non-null assertions (DownloadManager!), but these methods are exported and could be called by consumers in web builds where DownloadManager is undefined. This contradicts the PR objective to "guard electronAPI() calls behind isDesktop checks... to avoid crashes in non-desktop builds."

🛡️ Proposed fix: Add guards or throw descriptive errors

Option 1: Early return with no-op (silent)

  const start = ({
    url,
    savePath,
    filename
  }: {
    url: string
    savePath: string
    filename: string
-  }) => DownloadManager!.startDownload(url, savePath, filename)
-  const pause = (url: string) => DownloadManager!.pauseDownload(url)
-  const resume = (url: string) => DownloadManager!.resumeDownload(url)
-  const cancel = (url: string) => DownloadManager!.cancelDownload(url)
+  }) => DownloadManager?.startDownload(url, savePath, filename)
+  const pause = (url: string) => DownloadManager?.pauseDownload(url)
+  const resume = (url: string) => DownloadManager?.resumeDownload(url)
+  const cancel = (url: string) => DownloadManager?.cancelDownload(url)

Option 2: Throw descriptive error (explicit)

+ function assertDesktop(): asserts DownloadManager is NonNullable<typeof DownloadManager> {
+   if (!DownloadManager) {
+     throw new Error('Download operations are only available in desktop builds')
+   }
+ }
+
  const start = ({
    url,
    savePath,
    filename
  }: {
    url: string
    savePath: string
    filename: string
-  }) => DownloadManager!.startDownload(url, savePath, filename)
+  }) => {
+    assertDesktop()
+    return DownloadManager.startDownload(url, savePath, filename)
+  }

@christian-byrne christian-byrne merged commit 6c8473e into main Feb 8, 2026
29 checks passed
@christian-byrne christian-byrne deleted the refactor/replace-is-electron-with-is-desktop branch February 8, 2026 03:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants