Skip to content

feat: node-specific error tab with selection-aware grouping and error overlay#8956

Merged
christian-byrne merged 19 commits intomainfrom
feat/node-specific-error-tab
Feb 20, 2026
Merged

feat: node-specific error tab with selection-aware grouping and error overlay#8956
christian-byrne merged 19 commits intomainfrom
feat/node-specific-error-tab

Conversation

@jaeone94
Copy link
Collaborator

@jaeone94 jaeone94 commented Feb 18, 2026

Summary

Enhances the error panel with node-specific views: single-node selection shows errors grouped by message in compact mode, container nodes (subgraph/group) expose child errors via a badge and "See Error" button, and a floating ErrorOverlay appears after execution failure with a deduplicated summary and quick navigation to the errors tab.

Changes

  • Consolidate error tab: Remove TabError.vue; merge all error display into TabErrors.vue and drop the separate error tab type from rightSidePanelStore
  • Selection-aware grouping: Single-node selection regroups errors by message (not class_type) and renders ErrorNodeCard in compact mode
  • Container node support: Detect child-node errors in subgraph/group nodes via execution ID prefix matching; show error badge and "See Error" button in SectionWidgets
  • ErrorOverlay: New floating card shown after execution failure with deduplicated error messages, "Dismiss" and "See Errors" actions; isErrorOverlayOpen / showErrorOverlay / dismissErrorOverlay added to executionStore
  • Refactor: Centralize error ID collection in executionStore (allErrorExecutionIds, hasInternalErrorForNode); split errorGroups into allErrorGroups (unfiltered) and tabErrorGroups (selection-filtered); move ErrorOverlay business logic into useErrorGroups

Review Focus

  • useErrorGroups.ts: split into allErrorGroups / tabErrorGroups and the new filterBySelection parameter flow
  • executionStore.ts: hasInternalErrorForNode helper and allErrorExecutionIds computed
  • ErrorOverlay.vue: integration with executionStore overlay state and useErrorGroups

Screenshots

image image image

…erlay

- Remove TabError.vue; consolidate all error display into TabErrors.vue and
  remove the separate 'error' tab type from rightSidePanelStore
- Single-node selection mode: regroup errors by message instead of class_type
  and render ErrorNodeCard in compact mode (hiding redundant header/message)
- Container node support: detect internal errors in subgraph/group nodes by
  matching execution ID prefixes against selected container node IDs
- SectionWidgets: show error badge and 'See Error' button for subgraph/group
  nodes that contain child-node errors, navigating directly to the errors tab
- Add ErrorOverlay component: floating card after execution failure showing a
  deduplicated error summary with 'Dismiss' and 'See Errors' actions;
  'See Errors' deselects all nodes and opens Errors tab in overview mode
- Add isErrorOverlayOpen, showErrorOverlay, dismissErrorOverlay to
  executionStore; reset overlay state on execution_start
- Add allErrorExecutionIds computed to executionStore to centralize
  error ID collection from lastNodeErrors and lastExecutionError
- Add hasInternalErrorForNode helper to executionStore to
  encapsulate prefix-based container error detection
- Replace duplicated error ID collection and prefix checks in
  RightSidePanel and SectionWidgets with store computed/helper
- Split errorGroups into allErrorGroups (unfiltered) and
  tabErrorGroups (selection-filtered) in useErrorGroups
- Add filterBySelection param (default: false) to
  addNodeErrorToGroup, processNodeErrors, processExecutionError
- Add groupedErrorMessages computed derived from allErrorGroups
  for deduped message list used by ErrorOverlay
- Migrate ErrorOverlay business logic to useErrorGroups composable,
  removing inline groupedErrors computed and redundant totalErrorCount wrapper
@jaeone94 jaeone94 requested a review from a team as a code owner February 18, 2026 09:34
@jaeone94 jaeone94 added enhancement New feature or request area:nodes area:ui General user interface and experience improvements labels Feb 18, 2026
@jaeone94 jaeone94 requested a review from a team as a code owner February 18, 2026 09:34
@dosubot dosubot bot added the size:XL This PR changes 500-999 lines, ignoring generated files. label Feb 18, 2026
@github-actions
Copy link

github-actions bot commented Feb 18, 2026

Playwright: ❌ 526 passed, 2 failed · 2 flaky

❌ Failed Tests

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

@github-actions
Copy link

github-actions bot commented Feb 18, 2026

🎨 Storybook Build Status

Build completed successfully!

⏰ Completed at: 02/20/2026, 08:02:46 PM UTC

🔗 Links


🎉 Your Storybook is ready for review!

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 18, 2026

Note

Reviews paused

It 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 reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds a new ErrorOverlay component mounted in the top menu, extends executionStore with cloud-validation parsing and overlay state, refactors error grouping to be selection- and group-aware, replaces legacy TabError with TabErrors, and updates right-side panel, canvas focusing, and UI gating for the Errors tab.

Changes

Cohort / File(s) Summary
Error overlay & top menu
src/components/error/ErrorOverlay.vue, src/components/TopMenuSection.vue
Adds a new dismissible ErrorOverlay SFC and mounts it in TopMenuSection (import + template render).
Execution store & error metrics
src/stores/executionStore.ts
Parses cloud validation errors, adds service/cloud handlers, exposes overlay state (isErrorOverlayOpen, showErrorOverlay, dismissErrorOverlay), aggregated error IDs/counts, and hasInternalErrorForNode.
Right-side panel core & grouping
src/components/rightSidePanel/RightSidePanel.vue, src/components/rightSidePanel/errors/useErrorGroups.ts
Major refactor to selection-aware grouping and container/group node resolution; useErrorGroups return expanded; Errors tab visibility logic updated to use hasRelevantErrors.
Errors UI components
src/components/rightSidePanel/errors/TabErrors.vue, src/components/rightSidePanel/TabError.vue
Removes legacy TabError.vue; introduces TabErrors.vue with compact mode, internal locate/enter handlers, toast on contactSupport failure.
Error node card
src/components/rightSidePanel/errors/ErrorNodeCard.vue
Adds compact prop, hides header/message in compact mode, adjusts badge sizing, and introduces internal handlers for locate/enter-subgraph events.
Tab wiring & caching
src/components/rightSidePanel/errors/TabErrors.vue, src/components/rightSidePanel/errors/useErrorGroups.ts
TabErrors uses errorNodeCache, adds isSingleNodeSelected and collapse state; useErrorGroups expanded to return multiple grouped outputs and UI state.
Canvas focus/navigation
src/composables/canvas/useFocusNode.ts
focusNode and enterSubgraph accept optional executionIdMap, handle nodes inside group nodes by navigating parent group and animating/fitting view.
Parameter widgets & node UI gating
src/components/rightSidePanel/parameters/SectionWidgets.vue, src/renderer/extensions/vueNodes/components/LGraphNode.vue
Adds direct vs container internal error checks; gates error-button visibility and opens errors panel only when Comfy.RightSidePanel.ShowErrorsTab is enabled.
App integration
src/scripts/app.ts
On certain execution errors triggers error overlay when the ShowErrorsTab setting is enabled; falls back to dialog otherwise.
API error parsing
src/scripts/api.ts
Improves non-JSON error handling in queuePrompt, producing structured error objects when response body isn't valid JSON.
Localization & settings
src/locales/en/main.json, src/platform/settings/constants/coreSettings.ts
Adds translations for error overlay and related messages; flips default Comfy.RightSidePanel.ShowErrorsTab to enabled.
Right-side panel store types
src/stores/workspace/rightSidePanelStore.ts
Removes legacy 'error' tab discriminant in favor of 'errors'.

Sequence Diagram

sequenceDiagram
    participant Exec as Execution Handler
    participant Store as Execution Store
    participant Overlay as ErrorOverlay (UI)
    participant Panel as RightSidePanel
    participant Canvas as Canvas/Litegraph

    Exec->>Store: handleExecutionError(detail)
    alt Cloud validation error
        Store->>Store: handleCloudValidationError(detail)
    else Service-level error
        Store->>Store: handleServiceLevelError(detail)
    end
    Store->>Store: update error state (errors, allErrorExecutionIds, totalErrorCount)
    opt ShowErrorsTab enabled
        Store->>Store: showErrorOverlay()
        Store->>Overlay: isErrorOverlayOpen = true
        Overlay->>Overlay: render grouped errors via useErrorGroups
        alt User clicks "See Errors"
            Overlay->>Store: dismissErrorOverlay()
            Overlay->>Panel: request open 'errors' tab
            Panel->>Canvas: clear selections
            Panel->>Panel: render TabErrors (uses useErrorGroups)
        else User dismisses
            Overlay->>Store: dismissErrorOverlay()
        end
    end
    Panel->>Canvas: focusNode(nodeId, executionIdMap?)
    alt Node inside group
        Canvas->>Canvas: navigate to parent group, animateToBounds, fitView
    else Normal node
        Canvas->>Canvas: focus node directly
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

Suggested labels

size:XXL

Suggested reviewers

  • viva-jinyi
  • AustinMroz
  • christian-byrne

Poem

🐰 I nibble code beneath the moon,
An overlay hums a gentle tune.
Groups and nodes in tidy rows,
I hop to focus where error light glows.
Dismiss or view — the rabbit knows.

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 14.29% 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 directly describes the main feature: node-specific error tab with selection-aware grouping and error overlay, matching the core changes.
Description check ✅ Passed The description includes required sections: Summary explains the enhancement, Changes detail what was modified (consolidate, grouping, container support, overlay, refactor), and Review Focus highlights critical areas. All content is substantive and well-structured.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/node-specific-error-tab

Tip

Issue Planner is now in beta. Read the docs and try it out! Share your feedback on Discord.


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

❤️ Share

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

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: 1

Caution

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

⚠️ Outside diff range comments (1)
src/scripts/app.ts (1)

73-73: ⚠️ Potential issue | 🔴 Critical

Remove unused useRightSidePanelStore import (TS6133).
CI is failing with an unused import after the error-panel logic change.

🧹 Suggested fix
-import { useRightSidePanelStore } from '@/stores/workspace/rightSidePanelStore'
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/scripts/app.ts` at line 73, Remove the unused import
useRightSidePanelStore from the module: delete the line importing
useRightSidePanelStore (or remove it from the import list) so the symbol is not
imported anywhere in the file (e.g., the import statement that currently reads
"import { useRightSidePanelStore } ..."); ensure no other code in this file
references useRightSidePanelStore and run TypeScript/CI to confirm TS6133 is
resolved.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/stores/executionStore.ts`:
- Around line 458-484: handleCloudValidationError sets lastPromptError (and
lastNodeErrors) before calling resetExecutionState, but resetExecutionState
clears those values so prompt-level errors disappear; modify
handleCloudValidationError (or reorder calls) so you capture the extracted
prompt error/node errors, call clearInitializationByPromptId and
resetExecutionState first, then assign lastNodeErrors.value or
lastPromptError.value from the previously extracted error object (use
tryExtractValidationError result), ensuring you still return true when handled;
reference function names: handleCloudValidationError, tryExtractValidationError,
clearInitializationByPromptId, resetExecutionState, and variables
lastPromptError / lastNodeErrors.

---

Outside diff comments:
In `@src/scripts/app.ts`:
- Line 73: Remove the unused import useRightSidePanelStore from the module:
delete the line importing useRightSidePanelStore (or remove it from the import
list) so the symbol is not imported anywhere in the file (e.g., the import
statement that currently reads "import { useRightSidePanelStore } ..."); ensure
no other code in this file references useRightSidePanelStore and run
TypeScript/CI to confirm TS6133 is resolved.

@github-actions
Copy link

github-actions bot commented Feb 18, 2026

📦 Bundle: 4.32 MB gzip 🔴 +2.62 kB

Details

Summary

  • Raw size: 20.3 MB baseline 20.3 MB — 🔴 +11.9 kB
  • Gzip: 4.32 MB baseline 4.32 MB — 🔴 +2.62 kB
  • Brotli: 3.33 MB baseline 3.33 MB — 🔴 +2.19 kB
  • Bundles: 219 current • 219 baseline • 109 added / 109 removed

Category Glance
Graph Workspace 🔴 +7.28 kB (941 kB) · Data & Services 🔴 +4.17 kB (2.47 MB) · Other 🔴 +439 B (7.38 MB) · Vendor & Third-Party ⚪ 0 B (8.86 MB) · Panels & Settings ⚪ 0 B (430 kB) · Views & Navigation ⚪ 0 B (68.6 kB) · + 5 more

App Entry Points — 21.4 kB (baseline 21.4 kB) • ⚪ 0 B

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-CjlcR-bm.js (removed) 21.4 kB 🟢 -21.4 kB 🟢 -6.99 kB 🟢 -6.06 kB
assets/index-DVFa5-ux.js (new) 21.4 kB 🔴 +21.4 kB 🔴 +6.99 kB 🔴 +6.08 kB

Status: 1 added / 1 removed

Graph Workspace — 941 kB (baseline 934 kB) • 🔴 +7.28 kB

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-CU4s-Qyb.js (new) 941 kB 🔴 +941 kB 🔴 +201 kB 🔴 +152 kB
assets/GraphView-UyrGmSPu.js (removed) 934 kB 🟢 -934 kB 🟢 -199 kB 🟢 -151 kB

Status: 1 added / 1 removed

Views & Navigation — 68.6 kB (baseline 68.6 kB) • ⚪ 0 B

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudSurveyView-C8ZOC8V0.js (removed) 15.5 kB 🟢 -15.5 kB 🟢 -3.32 kB 🟢 -2.83 kB
assets/CloudSurveyView-G8KRi3B1.js (new) 15.5 kB 🔴 +15.5 kB 🔴 +3.32 kB 🔴 +2.83 kB
assets/CloudLoginView-BEjcS-Hw.js (removed) 10 kB 🟢 -10 kB 🟢 -2.92 kB 🟢 -2.56 kB
assets/CloudLoginView-DJqthaMI.js (new) 10 kB 🔴 +10 kB 🔴 +2.91 kB 🔴 +2.56 kB
assets/UserCheckView-BK5SjFvO.js (removed) 8.41 kB 🟢 -8.41 kB 🟢 -2.23 kB 🟢 -1.94 kB
assets/UserCheckView-CpJPs8N4.js (new) 8.41 kB 🔴 +8.41 kB 🔴 +2.23 kB 🔴 +1.94 kB
assets/CloudSignupView-CRdDN5wy.js (new) 7.38 kB 🔴 +7.38 kB 🔴 +2.31 kB 🔴 +2.02 kB
assets/CloudSignupView-DiGwWyTZ.js (removed) 7.38 kB 🟢 -7.38 kB 🟢 -2.31 kB 🟢 -2.03 kB
assets/CloudLayoutView-IfXgdTTB.js (new) 6.4 kB 🔴 +6.4 kB 🔴 +2.09 kB 🔴 +1.82 kB
assets/CloudLayoutView-WxWrbsBJ.js (removed) 6.4 kB 🟢 -6.4 kB 🟢 -2.09 kB 🟢 -1.81 kB
assets/CloudForgotPasswordView-CO_j9RyJ.js (new) 5.53 kB 🔴 +5.53 kB 🔴 +1.92 kB 🔴 +1.69 kB
assets/CloudForgotPasswordView-ZEOf5Pwb.js (removed) 5.53 kB 🟢 -5.53 kB 🟢 -1.93 kB 🟢 -1.7 kB
assets/CloudAuthTimeoutView-Bs2hcp0X.js (new) 4.88 kB 🔴 +4.88 kB 🔴 +1.75 kB 🔴 +1.54 kB
assets/CloudAuthTimeoutView-C0Va0hHO.js (removed) 4.88 kB 🟢 -4.88 kB 🟢 -1.76 kB 🟢 -1.54 kB
assets/CloudSubscriptionRedirectView-BWwh5hSo.js (removed) 4.68 kB 🟢 -4.68 kB 🟢 -1.77 kB 🟢 -1.56 kB
assets/CloudSubscriptionRedirectView-DVtq2EeL.js (new) 4.68 kB 🔴 +4.68 kB 🔴 +1.76 kB 🔴 +1.56 kB
assets/UserSelectView-BA24d2yu.js (new) 4.5 kB 🔴 +4.5 kB 🔴 +1.64 kB 🔴 +1.46 kB
assets/UserSelectView-Cp26ynZV.js (removed) 4.5 kB 🟢 -4.5 kB 🟢 -1.64 kB 🟢 -1.46 kB
assets/CloudSorryContactSupportView-CgAH2vyP.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/layout-B8-bSqjh.js 296 B 296 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 9 added / 9 removed

Panels & Settings — 430 kB (baseline 430 kB) • ⚪ 0 B

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/SecretsPanel-BjkEZ8A9.js (removed) 21.5 kB 🟢 -21.5 kB 🟢 -5.31 kB 🟢 -4.66 kB
assets/SecretsPanel-DVaFlpbv.js (new) 21.5 kB 🔴 +21.5 kB 🔴 +5.31 kB 🔴 +4.65 kB
assets/LegacyCreditsPanel-BdKArmOn.js (removed) 20.6 kB 🟢 -20.6 kB 🟢 -5.55 kB 🟢 -4.88 kB
assets/LegacyCreditsPanel-BE9LOa-F.js (new) 20.6 kB 🔴 +20.6 kB 🔴 +5.55 kB 🔴 +4.88 kB
assets/SubscriptionPanel-BgCleXD6.js (removed) 18.5 kB 🟢 -18.5 kB 🟢 -4.69 kB 🟢 -4.14 kB
assets/SubscriptionPanel-DqzWYq_v.js (new) 18.5 kB 🔴 +18.5 kB 🔴 +4.68 kB 🔴 +4.13 kB
assets/KeybindingPanel-BdYQzATp.js (removed) 12.3 kB 🟢 -12.3 kB 🟢 -3.57 kB 🟢 -3.15 kB
assets/KeybindingPanel-BF5JML0g.js (new) 12.3 kB 🔴 +12.3 kB 🔴 +3.56 kB 🔴 +3.15 kB
assets/ExtensionPanel-BhGPheJU.js (new) 9.35 kB 🔴 +9.35 kB 🔴 +2.63 kB 🔴 +2.33 kB
assets/ExtensionPanel-Qdsxmqop.js (removed) 9.35 kB 🟢 -9.35 kB 🟢 -2.64 kB 🟢 -2.34 kB
assets/AboutPanel-CoH8Mtkn.js (removed) 8.53 kB 🟢 -8.53 kB 🟢 -2.44 kB 🟢 -2.2 kB
assets/AboutPanel-LEjLmVVz.js (new) 8.53 kB 🔴 +8.53 kB 🔴 +2.44 kB 🔴 +2.2 kB
assets/ServerConfigPanel-Cs33uqkB.js (new) 6.41 kB 🔴 +6.41 kB 🔴 +2.11 kB 🔴 +1.9 kB
assets/ServerConfigPanel-rvqaYYP_.js (removed) 6.41 kB 🟢 -6.41 kB 🟢 -2.12 kB 🟢 -1.91 kB
assets/UserPanel-CUj13maM.js (removed) 6.13 kB 🟢 -6.13 kB 🟢 -1.98 kB 🟢 -1.74 kB
assets/UserPanel-CWNz3m_e.js (new) 6.13 kB 🔴 +6.13 kB 🔴 +1.98 kB 🔴 +1.73 kB
assets/cloudRemoteConfig-B5zxSTWv.js (new) 1.41 kB 🔴 +1.41 kB 🔴 +692 B 🔴 +598 B
assets/cloudRemoteConfig-DuJ6Xf5X.js (removed) 1.41 kB 🟢 -1.41 kB 🟢 -696 B 🟢 -598 B
assets/refreshRemoteConfig-BHcsabr9.js (new) 1.14 kB 🔴 +1.14 kB 🔴 +519 B 🔴 +470 B
assets/refreshRemoteConfig-BYAWoA0B.js (removed) 1.14 kB 🟢 -1.14 kB 🟢 -522 B 🟢 -472 B
assets/config-C5QaqZix.js 996 B 996 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-B0mOvnTo.js 32 kB 32 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BcrCrxYO.js 27.4 kB 27.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BdMQ9yxb.js 24.2 kB 24.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BMpJMaIw.js 33.7 kB 33.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-C-rh-es6.js 30.1 kB 30.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CgiUGcth.js 23.6 kB 23.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CzjpXwlp.js 38 kB 38 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CzpC_oh3.js 28.4 kB 28.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-Dp3u6l4N.js 29.5 kB 29.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DZjzU5N0.js 28.4 kB 28.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-rQc1NwAI.js 27.6 kB 27.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 10 added / 10 removed

User & Accounts — 16 kB (baseline 16 kB) • ⚪ 0 B

Authentication, profile, and account management bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/auth-CWiH7Knp.js (removed) 3.4 kB 🟢 -3.4 kB 🟢 -1.18 kB 🟢 -986 B
assets/auth-DM-gG7Qb.js (new) 3.4 kB 🔴 +3.4 kB 🔴 +1.18 kB 🔴 +989 B
assets/SignUpForm-B3ZRzZDF.js (new) 3.01 kB 🔴 +3.01 kB 🔴 +1.23 kB 🔴 +1.1 kB
assets/SignUpForm-CK7ELOmZ.js (removed) 3.01 kB 🟢 -3.01 kB 🟢 -1.23 kB 🟢 -1.11 kB
assets/UpdatePasswordContent-ckmL7eKc.js (new) 2.34 kB 🔴 +2.34 kB 🔴 +1.05 kB 🔴 +929 B
assets/UpdatePasswordContent-CzQxBGoj.js (removed) 2.34 kB 🟢 -2.34 kB 🟢 -1.06 kB 🟢 -933 B
assets/firebaseAuthStore-C2h-a11x.js (new) 758 B 🔴 +758 B 🔴 +376 B 🔴 +355 B
assets/firebaseAuthStore-qKtN_BDR.js (removed) 758 B 🟢 -758 B 🟢 -376 B 🟢 -336 B
assets/auth-BIJfM_Po.js (new) 357 B 🔴 +357 B 🔴 +223 B 🔴 +193 B
assets/auth-CfDoLgxI.js (removed) 357 B 🟢 -357 B 🟢 -224 B 🟢 -191 B
assets/PasswordFields-BlvAA1Ro.js 4.51 kB 4.51 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WorkspaceProfilePic-CqcS6A50.js 1.57 kB 1.57 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

Editors & Dialogs — 706 B (baseline 706 B) • ⚪ 0 B

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useSubscriptionDialog-BXBUI_gS.js (removed) 706 B 🟢 -706 B 🟢 -365 B 🟢 -315 B
assets/useSubscriptionDialog-hsgmbfgL.js (new) 706 B 🔴 +706 B 🔴 +366 B 🔴 +313 B

Status: 1 added / 1 removed

UI Components — 43.2 kB (baseline 43.2 kB) • ⚪ 0 B

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useTerminalTabs-BF6SJyv_.js (new) 9.81 kB 🔴 +9.81 kB 🔴 +3.39 kB 🔴 +2.98 kB
assets/useTerminalTabs-W5r9ZXE5.js (removed) 9.81 kB 🟢 -9.81 kB 🟢 -3.39 kB 🟢 -2.99 kB
assets/ComfyQueueButton-DixaznjL.js (new) 8.02 kB 🔴 +8.02 kB 🔴 +2.49 kB 🔴 +2.23 kB
assets/ComfyQueueButton-pMSiqPZt.js (removed) 8.02 kB 🟢 -8.02 kB 🟢 -2.49 kB 🟢 -2.22 kB
assets/SubscribeButton-A8L5-gF3.js (new) 2.35 kB 🔴 +2.35 kB 🔴 +1.02 kB 🔴 +890 B
assets/SubscribeButton-DybAQp5V.js (removed) 2.35 kB 🟢 -2.35 kB 🟢 -1.02 kB 🟢 -888 B
assets/cloudFeedbackTopbarButton-bduOYLLC.js (removed) 1.56 kB 🟢 -1.56 kB 🟢 -844 B 🟢 -740 B
assets/cloudFeedbackTopbarButton-BXNoL0uT.js (new) 1.56 kB 🔴 +1.56 kB 🔴 +840 B 🔴 +746 B
assets/ComfyQueueButton-C-CMgCxQ.js (removed) 763 B 🟢 -763 B 🟢 -380 B 🟢 -336 B
assets/ComfyQueueButton-tM36k-kh.js (new) 763 B 🔴 +763 B 🔴 +382 B 🔴 +338 B
assets/Button-BsKiLsiK.js 2.98 kB 2.98 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudBadge-DsWsl22p.js 1.24 kB 1.24 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ScrubableNumberInput-C0lDHdes.js 5.96 kB 5.96 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/TopbarBadge-ywTy5WOA.js 7.45 kB 7.45 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar-CFOb8MYw.js 1.17 kB 1.17 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetButton-Dy-ogYZ8.js 1.84 kB 1.84 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

Data & Services — 2.47 MB (baseline 2.47 MB) • 🔴 +4.17 kB

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/dialogService-Bf80OMut.js (new) 1.7 MB 🔴 +1.7 MB 🔴 +379 kB 🔴 +288 kB
assets/dialogService-BOaCJNG6.js (removed) 1.69 MB 🟢 -1.69 MB 🟢 -378 kB 🟢 -287 kB
assets/api-Bg8QQASt.js (new) 650 kB 🔴 +650 kB 🔴 +147 kB 🔴 +117 kB
assets/api-D98QBZ4i.js (removed) 649 kB 🟢 -649 kB 🟢 -147 kB 🟢 -117 kB
assets/load3dService-Aejw2ArE.js (new) 90.9 kB 🔴 +90.9 kB 🔴 +19 kB 🔴 +16.4 kB
assets/load3dService-H8etn_Ts.js (removed) 90.9 kB 🟢 -90.9 kB 🟢 -19 kB 🟢 -16.4 kB
assets/systemStatsStore-nCo0172g.js (new) 12.3 kB 🔴 +12.3 kB 🔴 +4.31 kB 🔴 +3.79 kB
assets/systemStatsStore-Y27ZQBet.js (removed) 12.3 kB 🟢 -12.3 kB 🟢 -4.31 kB 🟢 -3.79 kB
assets/releaseStore-Bps78OGG.js (new) 7.96 kB 🔴 +7.96 kB 🔴 +2.22 kB 🔴 +1.95 kB
assets/releaseStore-BW0GeI5d.js (removed) 7.96 kB 🟢 -7.96 kB 🟢 -2.22 kB 🟢 -1.96 kB
assets/keybindingService-BdqTM16J.js (new) 6.52 kB 🔴 +6.52 kB 🔴 +1.71 kB 🔴 +1.47 kB
assets/keybindingService-CwJz-VRn.js (removed) 6.52 kB 🟢 -6.52 kB 🟢 -1.71 kB 🟢 -1.48 kB
assets/bootstrapStore-BNN5qP81.js (removed) 2.08 kB 🟢 -2.08 kB 🟢 -878 B 🟢 -795 B
assets/bootstrapStore-Dqafq--B.js (new) 2.08 kB 🔴 +2.08 kB 🔴 +876 B 🔴 +795 B
assets/userStore-BYs-w9cl.js (new) 1.85 kB 🔴 +1.85 kB 🔴 +720 B 🔴 +674 B
assets/userStore-D5ULkxx-.js (removed) 1.85 kB 🟢 -1.85 kB 🟢 -721 B 🟢 -672 B
assets/audioService-Cr3Tyl47.js (removed) 1.73 kB 🟢 -1.73 kB 🟢 -851 B 🟢 -726 B
assets/audioService-qyxmIQcU.js (new) 1.73 kB 🔴 +1.73 kB 🔴 +850 B 🔴 +727 B
assets/releaseStore-BF6mR90T.js (removed) 730 B 🟢 -730 B 🟢 -373 B 🟢 -325 B
assets/releaseStore-D81GQrdC.js (new) 730 B 🔴 +730 B 🔴 +374 B 🔴 +327 B
assets/settingStore-Br8sOY5V.js (new) 714 B 🔴 +714 B 🔴 +375 B 🔴 +346 B
assets/settingStore-DqevUcEz.js (removed) 714 B 🟢 -714 B 🟢 -375 B 🟢 -325 B
assets/workflowDraftStore-DJ7AnvfR.js (new) 706 B 🔴 +706 B 🔴 +367 B 🔴 +341 B
assets/workflowDraftStore-fIp_7S96.js (removed) 706 B 🟢 -706 B 🟢 -366 B 🟢 -321 B
assets/dialogService-BRRDclhe.js (new) 695 B 🔴 +695 B 🔴 +355 B 🔴 +330 B
assets/dialogService-DX7BY3rW.js (removed) 695 B 🟢 -695 B 🟢 -355 B 🟢 -314 B
assets/serverConfigStore-LxCPjmH7.js 2.32 kB 2.32 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 13 added / 13 removed

Utilities & Hooks — 57.6 kB (baseline 57.6 kB) • ⚪ 0 B

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useLoad3d-BxPNrmzv.js (removed) 14.6 kB 🟢 -14.6 kB 🟢 -3.63 kB 🟢 -3.21 kB
assets/useLoad3d-LNIrQaF1.js (new) 14.6 kB 🔴 +14.6 kB 🔴 +3.63 kB 🔴 +3.22 kB
assets/useLoad3dViewer-CAv-t7BD.js (new) 14.1 kB 🔴 +14.1 kB 🔴 +3.15 kB 🔴 +2.8 kB
assets/useLoad3dViewer-DmfQNgou.js (removed) 14.1 kB 🟢 -14.1 kB 🟢 -3.15 kB 🟢 -2.79 kB
assets/useFeatureFlags-CoiMQd3c.js (removed) 3.5 kB 🟢 -3.5 kB 🟢 -1.08 kB 🟢 -930 B
assets/useFeatureFlags-DKscdQOs.js (new) 3.5 kB 🔴 +3.5 kB 🔴 +1.08 kB 🔴 +928 B
assets/useWorkspaceUI-JGzbdaEP.js (new) 3 kB 🔴 +3 kB 🔴 +823 B 🔴 +705 B
assets/useWorkspaceUI-ow55kwJb.js (removed) 3 kB 🟢 -3 kB 🟢 -824 B 🟢 -745 B
assets/useSubscriptionCredits-DjnASXno.js (new) 2.75 kB 🔴 +2.75 kB 🔴 +1.04 kB 🔴 +903 B
assets/useSubscriptionCredits-DtS8FXol.js (removed) 2.75 kB 🟢 -2.75 kB 🟢 -1.04 kB 🟢 -899 B
assets/subscriptionCheckoutUtil-CrTemknv.js (new) 2.53 kB 🔴 +2.53 kB 🔴 +1.06 kB 🔴 +952 B
assets/subscriptionCheckoutUtil-toqL2bW2.js (removed) 2.53 kB 🟢 -2.53 kB 🟢 -1.06 kB 🟢 -952 B
assets/useExternalLink-BhkKvClj.js (new) 1.66 kB 🔴 +1.66 kB 🔴 +772 B 🔴 +677 B
assets/useExternalLink-CVOdUmTY.js (removed) 1.66 kB 🟢 -1.66 kB 🟢 -773 B 🟢 -682 B
assets/useErrorHandling-Cw-6odbu.js (new) 1.5 kB 🔴 +1.5 kB 🔴 +629 B 🔴 +534 B
assets/useErrorHandling-D68kDCBh.js (removed) 1.5 kB 🟢 -1.5 kB 🟢 -631 B 🟢 -535 B
assets/useWorkspaceSwitch-BbznzwXg.js (new) 1.25 kB 🔴 +1.25 kB 🔴 +546 B 🔴 +480 B
assets/useWorkspaceSwitch-CKPDJCJg.js (removed) 1.25 kB 🟢 -1.25 kB 🟢 -546 B 🟢 -482 B
assets/audioUtils-lliHCYTy.js (new) 858 B 🔴 +858 B 🔴 +499 B 🔴 +416 B
assets/audioUtils-xMpDcWfG.js (removed) 858 B 🟢 -858 B 🟢 -501 B 🟢 -405 B
assets/useLoad3d-BVpnW8AS.js (removed) 829 B 🟢 -829 B 🟢 -411 B 🟢 -364 B
assets/useLoad3d-C3KgZDeQ.js (new) 829 B 🔴 +829 B 🔴 +414 B 🔴 +367 B
assets/useLoad3dViewer-CCk7aMGT.js (new) 808 B 🔴 +808 B 🔴 +398 B 🔴 +355 B
assets/useLoad3dViewer-pvCavbH8.js (removed) 808 B 🟢 -808 B 🟢 -397 B 🟢 -356 B
assets/useCurrentUser-DCcYNvop.js (removed) 692 B 🟢 -692 B 🟢 -360 B 🟢 -310 B
assets/useCurrentUser-DIWZEl60.js (new) 692 B 🔴 +692 B 🔴 +361 B 🔴 +328 B
assets/_plugin-vue_export-helper-CY4XIWDa.js 315 B 315 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/colorUtil-C4W9XXdl.js 7 kB 7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/envUtil-BQSmRN2Q.js 466 B 466 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/markdownRendererUtil-BNtwue5s.js 1.56 kB 1.56 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SkeletonUtils-Dbobu-mZ.js 133 B 133 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 13 added / 13 removed

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

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-axios-C4mPrLmU.js 70.3 kB 70.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-chart-BVph5xqx.js 399 kB 399 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-firebase-BvMr43CG.js 836 kB 836 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-i18n-CJliEbVY.js 131 kB 131 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-markdown-DDKkCsp-.js 145 kB 145 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-other-CzqznI4C.js 1.52 MB 1.52 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-CoGfUUGx.js 1.73 MB 1.73 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-reka-ui-CWMIYdD2.js 379 kB 379 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-sentry-SQwstEKc.js 182 kB 182 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-three-DSpQy18i.js 1.8 MB 1.8 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-Bi_34iZD.js 625 kB 625 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-core-CmHHRvL9.js 311 kB 311 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vueuse-B4hGe0IQ.js 113 kB 113 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-C4cqihSk.js 374 kB 374 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-yjs-CP_4YO8u.js 143 kB 143 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-zod-DcCUUPIi.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Other — 7.38 MB (baseline 7.38 MB) • 🔴 +439 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/i18n-CXbLglzR.js (new) 506 kB 🔴 +506 kB 🔴 +97.1 kB 🔴 +75.7 kB
assets/i18n-DTfKv3IO.js (removed) 506 kB 🟢 -506 kB 🟢 -97 kB 🟢 -75.7 kB
assets/core-DTCffovZ.js (new) 72.2 kB 🔴 +72.2 kB 🔴 +18.6 kB 🔴 +16 kB
assets/core-ENjFOLQu.js (removed) 72.2 kB 🟢 -72.2 kB 🟢 -18.6 kB 🟢 -16 kB
assets/groupNode-Ib89hEwK.js (new) 71.8 kB 🔴 +71.8 kB 🔴 +17.7 kB 🔴 +15.6 kB
assets/groupNode-vwUJX0Sf.js (removed) 71.8 kB 🟢 -71.8 kB 🟢 -17.7 kB 🟢 -15.5 kB
assets/WidgetSelect-C5pLTlW-.js (removed) 57.6 kB 🟢 -57.6 kB 🟢 -12.2 kB 🟢 -10.5 kB
assets/WidgetSelect-CzShKXIz.js (new) 57.6 kB 🔴 +57.6 kB 🔴 +12.2 kB 🔴 +10.5 kB
assets/SubscriptionRequiredDialogContentWorkspace-CUm9WyJu.js (new) 45.8 kB 🔴 +45.8 kB 🔴 +8.54 kB 🔴 +7.4 kB
assets/SubscriptionRequiredDialogContentWorkspace-CYuBA3CJ.js (removed) 45.8 kB 🟢 -45.8 kB 🟢 -8.55 kB 🟢 -7.41 kB
assets/Load3DControls-BWVFHKbj.js (new) 30.9 kB 🔴 +30.9 kB 🔴 +5.34 kB 🔴 +4.65 kB
assets/Load3DControls-DaB6lfKl.js (removed) 30.9 kB 🟢 -30.9 kB 🟢 -5.34 kB 🟢 -4.64 kB
assets/WorkspacePanelContent-B0AAwF-8.js (new) 29.2 kB 🔴 +29.2 kB 🔴 +6.08 kB 🔴 +5.34 kB
assets/WorkspacePanelContent-C8zbRcZz.js (removed) 29.2 kB 🟢 -29.2 kB 🟢 -6.09 kB 🟢 -5.36 kB
assets/SubscriptionRequiredDialogContent-BWdeRpQ1.js (removed) 26.2 kB 🟢 -26.2 kB 🟢 -6.56 kB 🟢 -5.77 kB
assets/SubscriptionRequiredDialogContent-Cr8egBZe.js (new) 26.2 kB 🔴 +26.2 kB 🔴 +6.55 kB 🔴 +5.76 kB
assets/Load3dViewerContent-BFGmrYz7.js (new) 23 kB 🔴 +23 kB 🔴 +5.19 kB 🔴 +4.5 kB
assets/Load3dViewerContent-CncnX3uD.js (removed) 23 kB 🟢 -23 kB 🟢 -5.18 kB 🟢 -4.5 kB
assets/WidgetImageCrop-DY--Vcil.js (new) 22.1 kB 🔴 +22.1 kB 🔴 +5.49 kB 🔴 +4.83 kB
assets/WidgetImageCrop-vbAZ8_EJ.js (removed) 22.1 kB 🟢 -22.1 kB 🟢 -5.5 kB 🟢 -4.83 kB
assets/SubscriptionPanelContentWorkspace-Be2tfGZ3.js (removed) 21.6 kB 🟢 -21.6 kB 🟢 -5.02 kB 🟢 -4.43 kB
assets/SubscriptionPanelContentWorkspace-C3NppAE2.js (new) 21.6 kB 🔴 +21.6 kB 🔴 +5.02 kB 🔴 +4.43 kB
assets/CurrentUserPopoverWorkspace-CzZvi2S5.js (new) 19.8 kB 🔴 +19.8 kB 🔴 +4.84 kB 🔴 +4.32 kB
assets/CurrentUserPopoverWorkspace-DP8VApta.js (removed) 19.8 kB 🟢 -19.8 kB 🟢 -4.85 kB 🟢 -4.32 kB
assets/SignInContent-C0Kyx_52.js (removed) 18.9 kB 🟢 -18.9 kB 🟢 -4.78 kB 🟢 -4.19 kB
assets/SignInContent-j6SJPPlI.js (new) 18.9 kB 🔴 +18.9 kB 🔴 +4.77 kB 🔴 +4.18 kB
assets/WidgetRecordAudio-BmtadMx_.js (new) 17.3 kB 🔴 +17.3 kB 🔴 +4.92 kB 🔴 +4.41 kB
assets/WidgetRecordAudio-DbsgVu7V.js (removed) 17.3 kB 🟢 -17.3 kB 🟢 -4.93 kB 🟢 -4.41 kB
assets/Load3D-BBQ2xooJ.js (new) 16.2 kB 🔴 +16.2 kB 🔴 +4.03 kB 🔴 +3.52 kB
assets/Load3D-UxFa9gXu.js (removed) 16.2 kB 🟢 -16.2 kB 🟢 -4.03 kB 🟢 -3.52 kB
assets/load3d-C6X47TMO.js (new) 14.7 kB 🔴 +14.7 kB 🔴 +4.18 kB 🔴 +3.61 kB
assets/load3d-D-8EWfqy.js (removed) 14.7 kB 🟢 -14.7 kB 🟢 -4.18 kB 🟢 -3.62 kB
assets/WidgetInputNumber-CQGKTj9l.js (new) 11.8 kB 🔴 +11.8 kB 🔴 +3.32 kB 🔴 +2.97 kB
assets/WidgetInputNumber-D7WXEX10.js (removed) 11.8 kB 🟢 -11.8 kB 🟢 -3.32 kB 🟢 -2.97 kB
assets/AudioPreviewPlayer-0mP11-8m.js (new) 10.8 kB 🔴 +10.8 kB 🔴 +3.18 kB 🔴 +2.84 kB
assets/AudioPreviewPlayer-cE1adAMa.js (removed) 10.8 kB 🟢 -10.8 kB 🟢 -3.19 kB 🟢 -2.84 kB
assets/changeTracker-BLLcr1fT.js (new) 9.38 kB 🔴 +9.38 kB 🔴 +2.89 kB 🔴 +2.55 kB
assets/changeTracker-BuYecYAe.js (removed) 9.38 kB 🟢 -9.38 kB 🟢 -2.89 kB 🟢 -2.54 kB
assets/nodeTemplates-BLH4EeCp.js (removed) 9.26 kB 🟢 -9.26 kB 🟢 -3.25 kB 🟢 -2.85 kB
assets/nodeTemplates-CT1IFA0m.js (new) 9.26 kB 🔴 +9.26 kB 🔴 +3.24 kB 🔴 +2.84 kB
assets/InviteMemberDialogContent--y9cKqTS.js (removed) 7.35 kB 🟢 -7.35 kB 🟢 -2.28 kB 🟢 -1.99 kB
assets/InviteMemberDialogContent-CNj4PevO.js (new) 7.35 kB 🔴 +7.35 kB 🔴 +2.28 kB 🔴 +1.99 kB
assets/WidgetWithControl-BLrVQBnb.js (new) 7.06 kB 🔴 +7.06 kB 🔴 +2.65 kB 🔴 +2.37 kB
assets/WidgetWithControl-DOZt8hLp.js (removed) 7.06 kB 🟢 -7.06 kB 🟢 -2.66 kB 🟢 -2.37 kB
assets/Load3DConfiguration-D3_CJnVo.js (removed) 6.27 kB 🟢 -6.27 kB 🟢 -1.92 kB 🟢 -1.68 kB
assets/Load3DConfiguration-v5xIRx69.js (new) 6.27 kB 🔴 +6.27 kB 🔴 +1.91 kB 🔴 +1.68 kB
assets/CreateWorkspaceDialogContent-DvdXR-Ze.js (removed) 5.5 kB 🟢 -5.5 kB 🟢 -1.98 kB 🟢 -1.72 kB
assets/CreateWorkspaceDialogContent-DYbh2RKf.js (new) 5.5 kB 🔴 +5.5 kB 🔴 +1.98 kB 🔴 +1.72 kB
assets/EditWorkspaceDialogContent-BJ7s1tse.js (new) 5.3 kB 🔴 +5.3 kB 🔴 +1.93 kB 🔴 +1.69 kB
assets/EditWorkspaceDialogContent-BwcdOeNe.js (removed) 5.3 kB 🟢 -5.3 kB 🟢 -1.93 kB 🟢 -1.69 kB
assets/ValueControlPopover-9y1fU84I.js (new) 4.89 kB 🔴 +4.89 kB 🔴 +1.75 kB 🔴 +1.57 kB
assets/ValueControlPopover-FWF9ka2u.js (removed) 4.89 kB 🟢 -4.89 kB 🟢 -1.76 kB 🟢 -1.57 kB
assets/Preview3d-DHStiYz1.js (new) 4.78 kB 🔴 +4.78 kB 🔴 +1.55 kB 🔴 +1.36 kB
assets/Preview3d-kkzZ1tUh.js (removed) 4.78 kB 🟢 -4.78 kB 🟢 -1.55 kB 🟢 -1.35 kB
assets/CancelSubscriptionDialogContent-CtQIG1y6.js (new) 4.76 kB 🔴 +4.76 kB 🔴 +1.77 kB 🔴 +1.55 kB
assets/CancelSubscriptionDialogContent-eflhDU7V.js (removed) 4.76 kB 🟢 -4.76 kB 🟢 -1.77 kB 🟢 -1.55 kB
assets/DeleteWorkspaceDialogContent-BbeXZ2A6.js (new) 4.2 kB 🔴 +4.2 kB 🔴 +1.62 kB 🔴 +1.4 kB
assets/DeleteWorkspaceDialogContent-BhWwEOU5.js (removed) 4.2 kB 🟢 -4.2 kB 🟢 -1.62 kB 🟢 -1.41 kB
assets/LeaveWorkspaceDialogContent-BbFqXysI.js (removed) 4.03 kB 🟢 -4.03 kB 🟢 -1.57 kB 🟢 -1.37 kB
assets/LeaveWorkspaceDialogContent-DJ8rehAU.js (new) 4.03 kB 🔴 +4.03 kB 🔴 +1.56 kB 🔴 +1.36 kB
assets/RemoveMemberDialogContent-9fuaXziG.js (removed) 4.01 kB 🟢 -4.01 kB 🟢 -1.51 kB 🟢 -1.32 kB
assets/RemoveMemberDialogContent-BsUm75dE.js (new) 4.01 kB 🔴 +4.01 kB 🔴 +1.51 kB 🔴 +1.32 kB
assets/RevokeInviteDialogContent-BKdSc1UX.js (new) 3.92 kB 🔴 +3.92 kB 🔴 +1.53 kB 🔴 +1.35 kB
assets/RevokeInviteDialogContent-BvoFvEBl.js (removed) 3.92 kB 🟢 -3.92 kB 🟢 -1.53 kB 🟢 -1.34 kB
assets/InviteMemberUpsellDialogContent-DuCw3GIv.js (removed) 3.79 kB 🟢 -3.79 kB 🟢 -1.39 kB 🟢 -1.22 kB
assets/InviteMemberUpsellDialogContent-E7QlYpD8.js (new) 3.79 kB 🔴 +3.79 kB 🔴 +1.39 kB 🔴 +1.22 kB
assets/saveMesh-BXMBz1lp.js (new) 3.35 kB 🔴 +3.35 kB 🔴 +1.44 kB 🔴 +1.29 kB
assets/saveMesh-CaphZKr3.js (removed) 3.35 kB 🟢 -3.35 kB 🟢 -1.44 kB 🟢 -1.28 kB
assets/cloudSessionCookie-Cl-QfxkK.js (removed) 3.07 kB 🟢 -3.07 kB 🟢 -1.07 kB 🟢 -959 B
assets/cloudSessionCookie-QXfNJSy_.js (new) 3.07 kB 🔴 +3.07 kB 🔴 +1.07 kB 🔴 +960 B
assets/GlobalToast-BXjj-4n-.js (removed) 2.91 kB 🟢 -2.91 kB 🟢 -1.21 kB 🟢 -1.03 kB
assets/GlobalToast-BXs8F9KG.js (new) 2.91 kB 🔴 +2.91 kB 🔴 +1.21 kB 🔴 +1.03 kB
assets/ApiNodesSignInContent-B8HDHVPi.js (removed) 2.69 kB 🟢 -2.69 kB 🟢 -1.05 kB 🟢 -922 B
assets/ApiNodesSignInContent-CdKoSkwN.js (new) 2.69 kB 🔴 +2.69 kB 🔴 +1.05 kB 🔴 +960 B
assets/SubscribeToRun-CXEHGYl9.js (new) 2.2 kB 🔴 +2.2 kB 🔴 +1.01 kB 🔴 +864 B
assets/SubscribeToRun-Qfg_OoMK.js (removed) 2.2 kB 🟢 -2.2 kB 🟢 -1.01 kB 🟢 -866 B
assets/CloudRunButtonWrapper-C4iwbSJP.js (removed) 1.65 kB 🟢 -1.65 kB 🟢 -772 B 🟢 -689 B
assets/CloudRunButtonWrapper-DI1sGkrd.js (new) 1.65 kB 🔴 +1.65 kB 🔴 +773 B 🔴 +689 B
assets/signInSchema-4HnB0n3d.js (removed) 1.53 kB 🟢 -1.53 kB 🟢 -563 B 🟢 -512 B
assets/signInSchema-DLYp-sLS.js (new) 1.53 kB 🔴 +1.53 kB 🔴 +562 B 🔴 +518 B
assets/cloudBadges-Ccjh9OdW.js (removed) 1.34 kB 🟢 -1.34 kB 🟢 -694 B 🟢 -601 B
assets/cloudBadges-xUR9_W5T.js (new) 1.34 kB 🔴 +1.34 kB 🔴 +689 B 🔴 +597 B
assets/cloudSubscription-C31dZMNs.js (new) 1.3 kB 🔴 +1.3 kB 🔴 +641 B 🔴 +553 B
assets/cloudSubscription-DOgd7Fpw.js (removed) 1.3 kB 🟢 -1.3 kB 🟢 -641 B 🟢 -554 B
assets/Load3D-BmB5USXr.js (new) 1.04 kB 🔴 +1.04 kB 🔴 +488 B 🔴 +430 B
assets/Load3D-C_Jkqrrh.js (removed) 1.04 kB 🟢 -1.04 kB 🟢 -487 B 🟢 -430 B
assets/nightlyBadges-BGE-cSSw.js (removed) 971 B 🟢 -971 B 🟢 -521 B 🟢 -458 B
assets/nightlyBadges-CWmGy2EI.js (new) 971 B 🔴 +971 B 🔴 +518 B 🔴 +451 B
assets/Load3dViewerContent-248WMHqe.js (new) 963 B 🔴 +963 B 🔴 +454 B 🔴 +400 B
assets/Load3dViewerContent-BNO_jmaG.js (removed) 963 B 🟢 -963 B 🟢 -454 B 🟢 -402 B
assets/SubscriptionPanelContentWorkspace-Buxfsu-C.js (new) 900 B 🔴 +900 B 🔴 +426 B 🔴 +368 B
assets/SubscriptionPanelContentWorkspace-CG95dfJA.js (removed) 900 B 🟢 -900 B 🟢 -426 B 🟢 -369 B
assets/graphHasMissingNodes-aXEjWAAS.js (removed) 761 B 🟢 -761 B 🟢 -375 B 🟢 -319 B
assets/graphHasMissingNodes-Dc32BYgm.js (new) 761 B 🔴 +761 B 🔴 +373 B 🔴 +355 B
assets/changeTracker-BMEujHuE.js (removed) 727 B 🟢 -727 B 🟢 -373 B 🟢 -321 B
assets/changeTracker-Dnv3rCvL.js (new) 727 B 🔴 +727 B 🔴 +373 B 🔴 +347 B
assets/WidgetLegacy-Cf5aH_jF.js (new) 715 B 🔴 +715 B 🔴 +373 B 🔴 +337 B
assets/WidgetLegacy-Dt-gHO8C.js (removed) 715 B 🟢 -715 B 🟢 -372 B 🟢 -325 B
assets/WidgetInputNumber-BilNAr8M.js (new) 437 B 🔴 +437 B 🔴 +249 B 🔴 +236 B
assets/WidgetInputNumber-C29bDooY.js (removed) 437 B 🟢 -437 B 🟢 -250 B 🟢 -214 B
assets/i18n-Dr76WCgm.js (removed) 199 B 🟢 -199 B 🟢 -161 B 🟢 -139 B
assets/i18n-jDIEsJbh.js (new) 199 B 🔴 +199 B 🔴 +160 B 🔴 +139 B
assets/AnimationControls-uQSjTFcj.js 4.61 kB 4.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/auto-P6cmVFBq.js 1.7 kB 1.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/BaseViewTemplate-Ct70qdN0.js 1.78 kB 1.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/comfy-logo-single-Bzuu84gN.js 198 B 198 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ComfyOrgHeader-DFzBWZrP.js 910 B 910 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-6ntdtqc9.js 16.6 kB 16.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-B4RbG9Th.js 17.2 kB 17.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BmIbopvA.js 14.9 kB 14.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Br2FiHkj.js 17.1 kB 17.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BrlWvwVz.js 15.7 kB 15.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BV_NDvWz.js 15.5 kB 15.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CSxUmE31.js 14.7 kB 14.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-D3gGGUgv.js 16.3 kB 16.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DBqn--Z9.js 15.8 kB 15.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DgX9pWvG.js 15.8 kB 15.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DlSpFU8-.js 18.4 kB 18.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/constants-BKU8e69-.js 579 B 579 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/LazyImage-BThYoZlE.js 12.3 kB 12.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Bg-1LcRk.js 120 kB 120 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BhTuc8pp.js 144 kB 144 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BjNyGyrP.js 136 kB 136 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Bl8Fy3rY.js 141 kB 141 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Bo3hm2ug.js 190 kB 190 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-C-XiaTzV.js 157 kB 157 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-D-LaWT4q.js 121 kB 121 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DkPPQYpL.js 170 kB 170 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-paKyiK5-.js 137 kB 137 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-wXc1MGIE.js 139 kB 139 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-XEp46eGp.js 164 kB 164 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DTop-Dh4-HFFk.js 1.82 kB 1.82 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-DzoZYGHS.js 1.43 kB 1.43 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-CL20xhK_.js 1.75 kB 1.75 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-CfUwIe0I.js 2.23 kB 2.23 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Bheu43Bb.js 391 kB 391 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BPuceShu.js 346 kB 346 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BvgDpig6.js 377 kB 377 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BZpu0NoU.js 463 kB 463 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Cev_L1ap.js 381 kB 381 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CGC_NG3k.js 369 kB 369 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Cj5X8IGf.js 343 kB 343 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DAEaB4hJ.js 373 kB 373 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DJG4rq9g.js 377 kB 377 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DJl7ITPK.js 424 kB 424 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Dywtk58C.js 424 kB 424 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/OBJLoader2WorkerModule-DTMpvldF.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/previousFullPath-CxcvRxyJ.js 665 B 665 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/rolldown-runtime-DLICfi3-.js 1.97 kB 1.97 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SelectValue-C3sWXfX5.js 8.94 kB 8.94 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Slider-GQ9VWDai.js 3.52 kB 3.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/src-nNVkhr_P.js 251 B 251 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/telemetry-zZf2dHJ2.js 226 B 226 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/types-DT3N7am7.js 204 B 204 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widget-DTUjK0ZE.js 445 B 445 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-IjS9HZ0B.js 283 B 283 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-TjlkeDqM.js 3.19 kB 3.19 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-D9xu7nZ_.js 2.21 kB 2.21 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetColorPicker-BbpzLsd8.js 2.9 kB 2.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetGalleria-BHuY17AM.js 3.61 kB 3.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-D4L7op4g.js 3.1 kB 3.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputText-BhIQJgjH.js 1.86 kB 1.86 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLayoutField-BN4bMP-H.js 1.95 kB 1.95 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMarkdown-Eg9fZF2S.js 2.93 kB 2.93 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-DfMXJwGW.js 1.1 kB 1.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetTextarea-BVc4_cxh.js 3.13 kB 3.13 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetToggleSwitch-C5hOqXif.js 6.8 kB 6.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetTypes-BtuQMzwn.js 393 B 393 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 51 added / 51 removed

…ed by reset

- Replace :class='cn('...')' with static class and remove unused cn import
  in ErrorOverlay
- Fix prompt-only cloud validation errors being wiped by resetExecutionState
  by capturing the error before reset and applying it after
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: 2

🧹 Nitpick comments (3)
src/components/error/ErrorOverlay.vue (2)

73-73: Inline ref('') creates an anonymous ref; prefer a named constant.

useErrorGroups(ref(''), t) works correctly (the ref is stable for the component lifetime), but naming it improves readability and makes the intent explicit.

♻️ Proposed refactor
+const searchQuery = ref('')
-const { groupedErrorMessages } = useErrorGroups(ref(''), t)
+const { groupedErrorMessages } = useErrorGroups(searchQuery, t)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/components/error/ErrorOverlay.vue` at line 73, Replace the anonymous ref
passed into useErrorGroups by creating a named const (e.g., const errorKey =
ref('')) and pass that named ref into useErrorGroups instead of ref(''); update
any references to the original anonymous ref usage around groupedErrorMessages
to use the new constant to improve readability and make the intent explicit when
calling useErrorGroups(errorKey, t).

2-6: Missing leave-transition classes causes abrupt dismissal.

The <Transition> only defines enter animation. When isVisible becomes false (on dismiss), the overlay disappears instantly with no animation, inconsistent with the smooth enter slide-down.

✨ Proposed fix – add leave classes
  <Transition
    enter-active-class="transition-all duration-300 ease-out"
    enter-from-class="-translate-y-3 opacity-0"
    enter-to-class="translate-y-0 opacity-100"
+   leave-active-class="transition-all duration-200 ease-in"
+   leave-from-class="translate-y-0 opacity-100"
+   leave-to-class="-translate-y-3 opacity-0"
  >
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/components/error/ErrorOverlay.vue` around lines 2 - 6, The Transition
currently only defines enter classes so the overlay dismisses abruptly; update
the <Transition> element (the Transition wrapper around the overlay) to add
matching leave classes — e.g., add leave-active-class, leave-from-class, and
leave-to-class that mirror the enter animation in reverse (use a short duration
and ease-in, with leave-from being translate-y-0 opacity-100 and leave-to being
-translate-y-3 opacity-0) so the overlay animates smoothly on dismissal.
src/stores/executionStore.ts (1)

467-479: let promptError = null — prefer an immutable assignment via a helper.

Per coding guidelines, "avoid mutable state; prefer immutability and assignment at point of declaration." promptError is declared as null and conditionally reassigned across three branches. Extracting a small helper keeps the assignment at declaration:

♻️ Proposed refactor
+function buildPromptError(
+  error: CloudValidationError['error']
+): PromptError | null {
+  if (error && typeof error === 'object') {
+    return {
+      type: error.type ?? 'error',
+      message: error.message ?? '',
+      details: error.details ?? ''
+    }
+  }
+  if (typeof error === 'string') {
+    return { type: 'error', message: error, details: '' }
+  }
+  return null
+}

 function handleCloudValidationError(detail: ExecutionErrorWsMessage): boolean {
   const extracted = tryExtractValidationError(detail.exception_message)
   if (!extracted) return false

   const { error, node_errors } = extracted
   const hasNodeErrors = node_errors && Object.keys(node_errors).length > 0

-  let promptError = null
-  if (!hasNodeErrors) {
-    if (error && typeof error === 'object') {
-      promptError = {
-        type: error.type ?? 'error',
-        message: error.message ?? '',
-        details: error.details ?? ''
-      }
-    } else if (typeof error === 'string') {
-      promptError = { type: 'error', message: error, details: '' }
-    } else {
-      return false
-    }
-  }
+  const promptError = hasNodeErrors ? null : buildPromptError(error)
+  if (!hasNodeErrors && !promptError) return false

   clearInitializationByPromptId(detail.prompt_id)
   resetExecutionState(detail.prompt_id)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/stores/executionStore.ts` around lines 467 - 479, Replace the mutable
promptError variable with an immutable assignment by extracting the branching
logic into a small helper (e.g., buildPromptError) and then declare const
promptError = !hasNodeErrors ? buildPromptError(error) : null; implement
buildPromptError(error) to return the same shapes: if error is object return {
type: error.type ?? 'error', message: error.message ?? '', details:
error.details ?? '' }, if string return { type: 'error', message: error,
details: '' }, and if neither return null so the caller can still handle the
early return (preserve the existing return false behavior when buildPromptError
returns null); update references to promptError accordingly and keep
function/variable names like promptError, hasNodeErrors, and error to locate the
change.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/stores/executionStore.ts`:
- Around line 445-456: handleServiceLevelError currently uses
isEmpty(detail.node_id) which treats numeric node IDs (including 0) as empty and
incorrectly routes OSS runtime errors to service-level handling; change the
guard to an explicit presence check on detail.node_id (e.g., check
detail.node_id !== null && detail.node_id !== undefined && detail.node_id !==
'') so numeric IDs are considered present, keep the rest of the function
(clearInitializationByPromptId, resetExecutionState, setting lastPromptError)
unchanged, and ensure handleExecutionError will continue down the OSS path when
a node_id is present.
- Around line 450-453: The message template for lastPromptError currently
interpolates detail.exception_type without a fallback causing "null: ..." or
"undefined: ..."; update the construction of lastPromptError.message to use the
same null-coalescing used for type (e.g., replace the template that uses
detail.exception_type with one that uses detail.exception_type ?? 'error' or
omit the prefix when absent) so message and type remain consistent; adjust the
assignment around lastPromptError.value and the message construction to
reference detail.exception_type ?? 'error' (or conditional inclusion) and
detail.exception_message, leaving details as-is.

---

Duplicate comments:
In `@src/stores/executionStore.ts`:
- Around line 458-491: The PR correctly preserves prompt-only validation errors
by extracting the error before calling resetExecutionState and then setting
lastPromptError or lastNodeErrors after reset; ensure the ordering in
handleCloudValidationError remains: call tryExtractValidationError, capture
promptError, call clearInitializationByPromptId and resetExecutionState, then
assign lastNodeErrors.value or lastPromptError.value as appropriate (references:
handleCloudValidationError, tryExtractValidationError,
clearInitializationByPromptId, resetExecutionState, lastNodeErrors,
lastPromptError).

---

Nitpick comments:
In `@src/components/error/ErrorOverlay.vue`:
- Line 73: Replace the anonymous ref passed into useErrorGroups by creating a
named const (e.g., const errorKey = ref('')) and pass that named ref into
useErrorGroups instead of ref(''); update any references to the original
anonymous ref usage around groupedErrorMessages to use the new constant to
improve readability and make the intent explicit when calling
useErrorGroups(errorKey, t).
- Around line 2-6: The Transition currently only defines enter classes so the
overlay dismisses abruptly; update the <Transition> element (the Transition
wrapper around the overlay) to add matching leave classes — e.g., add
leave-active-class, leave-from-class, and leave-to-class that mirror the enter
animation in reverse (use a short duration and ease-in, with leave-from being
translate-y-0 opacity-100 and leave-to being -translate-y-3 opacity-0) so the
overlay animates smoothly on dismissal.

In `@src/stores/executionStore.ts`:
- Around line 467-479: Replace the mutable promptError variable with an
immutable assignment by extracting the branching logic into a small helper
(e.g., buildPromptError) and then declare const promptError = !hasNodeErrors ?
buildPromptError(error) : null; implement buildPromptError(error) to return the
same shapes: if error is object return { type: error.type ?? 'error', message:
error.message ?? '', details: error.details ?? '' }, if string return { type:
'error', message: error, details: '' }, and if neither return null so the caller
can still handle the early return (preserve the existing return false behavior
when buildPromptError returns null); update references to promptError
accordingly and keep function/variable names like promptError, hasNodeErrors,
and error to locate the change.

- Replace isEmpty(node_id) with explicit presence check to prevent
  numeric node IDs from being misclassified as service-level errors
- Guard exception_type in message template to avoid 'null: ...' output
  when exception_type is absent
- Remove unused isEmpty import from es-toolkit/compat
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: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/stores/executionStore.ts`:
- Around line 753-762: The computed allErrorExecutionIds currently pushes
String(lastExecutionError.value.node_id) unguarded which can produce
"null"/"undefined"; update the allErrorExecutionIds computed to only push
lastExecutionError.value.node_id when lastExecutionError.value exists and
lastExecutionError.value.node_id is not null/undefined (e.g. check typeof or !=
null) so you only push valid IDs, and continue to spread
Object.keys(lastNodeErrors.value) from lastNodeErrors as before; reference the
allErrorExecutionIds computed, lastExecutionError, and lastNodeErrors symbols
when making this guard change.
- Around line 317-320: The handler handleExecutionStart resets some error state
but misses clearing node-level errors, causing stale entries to affect
totalErrorCount and allErrorExecutionIds; update handleExecutionStart to set
lastNodeErrors.value = null alongside lastExecutionError.value = null,
lastPromptError.value = null and isErrorOverlayOpen.value = false so node
validation errors are cleared at the start of a new execution.

…ErrorExecutionIds

- Add lastNodeErrors.value = null in handleExecutionStart to prevent
  stale node errors from persisting into the next execution
- Guard against null/undefined node_id before pushing to allErrorExecutionIds
jaeone94 and others added 7 commits February 19, 2026 20:48
- Catch non-JSON server errors and wrap into PromptExecutionError
- Differentiate 500 error i18n messages by cloud/local environment
- Properly show error details in right side panel Error Cards
- ErrorOverlay: clamp messages to 3 lines and handle word breaks
- ErrorNodeCard: clamp message height to 4 lines with scroll, enforce word breaks for traceback
- Prevent unspaced long text (e.g. tensors/paths) from breaking flex layouts
Copy link
Contributor

@christian-byrne christian-byrne left a comment

Choose a reason for hiding this comment

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

Looking good!

- Extract getRootParentNode utility to eliminate duplicated parent
  node parsing logic in useFocusNode and useErrorGroups
- Move expandFocusedErrorGroup watcher from useErrorGroups to
  TabErrors.vue to fix race condition with ErrorOverlay
- Decouple isCloud from error object: unify server_error type in
  api.ts, resolve i18n keys at display time in useErrorGroups
- Extract cloud validation error logic into executionErrorUtil.ts
  with classifyCloudValidationError for testability (18 unit tests)
- Use deterministic JSON boundary extraction (indexOf + lastIndexOf)
- Split totalErrorCount into composable per-category computeds
  (promptErrorCount, nodeErrorCount, executionErrorCount)
- Add role='alert' and aria-live='assertive' to ErrorOverlay
- Remove unnecessary try/catch from contactSupport in TabErrors.vue
@dosubot dosubot bot added size:XXL This PR changes 1000+ lines, ignoring generated files. and removed size:XL This PR changes 500-999 lines, ignoring generated files. labels Feb 20, 2026
Copy link
Contributor

@christian-byrne christian-byrne left a comment

Choose a reason for hiding this comment

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

LGTM!

@christian-byrne
Copy link
Contributor

The browser tests that check execution error behaviors will need to be updated, otherwise looks good to merge.

… error dialog

- Add data-testid="error-overlay" to ErrorOverlay.vue for stable test selection
- Update execution.spec.ts and dialog.spec.ts to use ErrorOverlay selector
- Override UseNewMenu to 'Top' in error test blocks (ErrorOverlay requires Top menu)
- Replace canvas clickEmptySpace with Escape key to avoid toolbar interception
- Use command.executeCommand instead of queueButton.click for Top menu compatibility
@christian-byrne christian-byrne added the New Browser Test Expectations New browser test screenshot should be set by github action label Feb 20, 2026
@github-actions
Copy link

Updating Playwright Expectations

@github-actions github-actions bot removed the New Browser Test Expectations New browser test screenshot should be set by github action label Feb 20, 2026
@christian-byrne christian-byrne merged commit 46c40c7 into main Feb 20, 2026
27 of 29 checks passed
@christian-byrne christian-byrne deleted the feat/node-specific-error-tab branch February 20, 2026 20:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:nodes area:ui General user interface and experience improvements enhancement New feature or request size:XXL This PR changes 1000+ lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants