Skip to content

feat: add workflow execution state indicators to tabs#8592

Open
christian-byrne wants to merge 12 commits intomainfrom
feat/tab-execution-state-indicator
Open

feat: add workflow execution state indicators to tabs#8592
christian-byrne wants to merge 12 commits intomainfrom
feat/tab-execution-state-indicator

Conversation

@christian-byrne
Copy link
Contributor

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

Summary

Add visual indicators to workflow tabs showing execution state (running, completed, error).

Changes

  • executionStore: Added WorkflowExecutionResult type and lastExecutionResultByWorkflowId state to track execution results per workflow
  • useWorkflowExecutionState: New composable that derives execution state (idle/running/completed/error) from store data
  • WorkflowExecutionIndicator: New component displaying 16x16 icons with animations and semantic colors
  • WorkflowTab: Integrated indicator with 5-second auto-clear for completed state
  • WorkflowsSidebarTab: Added execution badge to sidebar workflow list via WorkflowExecutionBadge wrapper

Design

  • 🔄 Running: loader-circle icon with animate-spin, text-muted-foreground
  • ✅ Completed: circle-check icon, text-jade-600, auto-hides after 5 seconds
  • ❌ Error: circle-alert icon, text-coral-600, persists until next execution

Review Focus

  • State derivation logic in useWorkflowExecutionState - correctly maps prompt IDs to workflow IDs
  • Cleanup of timeout in WorkflowTab.vue on unmount
  • Test coverage for both the composable and indicator component

┆Issue is synchronized with this Notion page by Unito

@christian-byrne christian-byrne added area:workflows area:ui General user interface and experience improvements preview-cpu Creates a preview ephemeral environment for this PR (CPU only) labels Feb 3, 2026
@christian-byrne christian-byrne self-assigned this Feb 3, 2026
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 3, 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 per-workflow execution tracking and UI indicators: new execution store types/state and APIs, a composable to read/clear workflow execution state, indicator/badge components in topbar and sidebar, queue/app integrations to record outcomes, i18n strings, and unit tests. (49 words)

Changes

Cohort / File(s) Summary
State & Store
src/stores/executionStore.ts, src/stores/executionStore.test.ts
Adds WorkflowExecutionResult/WorkflowExecutionState, lastExecutionResultByWorkflowId, workflowExecutionStates, getWorkflowExecutionState, clearWorkflowExecutionResult, setters and batchSetWorkflowExecutionResults; handlers updated to record results on success/error; tests for state derivation and precedence.
Composable
src/composables/useWorkflowExecutionState.ts, src/composables/useWorkflowExecutionState.test.ts
New useWorkflowExecutionState(workflowId) returning computed state and clearResult(); tests cover idle/running/completed/error, reactivity, and clear behavior.
Topbar UI
src/components/topbar/WorkflowExecutionIndicator.vue, src/components/topbar/WorkflowExecutionIndicator.test.ts, src/components/topbar/WorkflowTab.vue
Adds WorkflowExecutionIndicator (prop state) with spinner/check/alert and i18n ARIA labels; tests for states; WorkflowTab.vue wired to composable and conditionally renders the indicator.
Sidebar UI
src/components/sidebar/tabs/WorkflowsSidebarTab.vue, src/components/sidebar/tabs/workflows/WorkflowExecutionBadge.vue
Adds WorkflowExecutionBadge component that uses the composable and renders WorkflowExecutionIndicator via an after-label slot for workflow tree nodes; sidebar tab imports and renders the badge for nodes.
Queue Integration
src/stores/queueStore.ts
Deduplicates history by workflow_id, maps job statuses to execution states, builds batched WorkflowExecutionResult entries, and calls batchSetWorkflowExecutionResults(...).
App Error Path
src/scripts/app.ts
On prompt execution errors, derives active workflow id (fallback to initial) and records its execution result as error.
Localization
src/locales/en/main.json
Adds workflowExecution translations: running, completed, error.

Sequence Diagram(s)

sequenceDiagram
    participant Engine as Execution Engine
    participant Queue as Queue Store
    participant Store as executionStore
    participant Composable as useWorkflowExecutionState
    participant Indicator as WorkflowExecutionIndicator
    participant UI as Topbar/Sidebar

    Engine->>Queue: emit job history / events
    Queue->>Store: batchSetWorkflowExecutionResults(batch)
    Engine->>Store: emit running/completion/error events (promptId ↔ workflowId)
    Store->>Composable: update workflowExecutionStates / lastExecutionResultByWorkflowId
    Composable->>Indicator: computed state -> "running"/"completed"/"error"
    Indicator->>UI: render spinner/check/alert (aria-label via i18n)
    UI->>Composable: clearResult(workflowId)
    Composable->>Store: clearWorkflowExecutionResult(workflowId)
    Store->>Composable: state -> "idle"
    Indicator->>UI: hide indicator
Loading

Estimated Code Review Effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Poem

🐇 I hop through logs and nudge each glowing light,
Spinners whirl, then checks appear so bright,
Errors thump — I twitch, then clear the trace,
Badges gleam across the workflow space,
A rabbit's cheer for states now in their place.

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 6.67% 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 'feat: add workflow execution state indicators to tabs' clearly summarizes the main feature addition and is directly aligned with the comprehensive changes across components, store, and composables.
Description check ✅ Passed The description covers all required template sections (Summary, Changes, Review Focus), provides detailed implementation details with design specifications, and addresses the substantive scope of the changes.

✏️ 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/tab-execution-state-indicator

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

@github-actions
Copy link

github-actions bot commented Feb 3, 2026

🎭 Playwright: ❌ 515 passed, 15 failed · 6 flaky

❌ Failed Tests

📊 Browser Reports
  • chromium: View Report (✅ 504 / ❌ 14 / ⚠️ 6 / ⏭️ 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 3, 2026

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 02/27/2026, 02:53:15 AM UTC

Links

@github-actions
Copy link

github-actions bot commented Feb 3, 2026

📦 Bundle: 4.44 MB gzip 🔴 +1.21 kB

Details

Summary

  • Raw size: 20.8 MB baseline 20.8 MB — 🔴 +6.55 kB
  • Gzip: 4.44 MB baseline 4.44 MB — 🔴 +1.21 kB
  • Brotli: 3.43 MB baseline 3.43 MB — 🔴 +921 B
  • Bundles: 228 current • 228 baseline • 113 added / 113 removed

Category Glance
Data & Services 🔴 +5.75 kB (2.56 MB) · Graph Workspace 🔴 +651 B (1.02 MB) · Other 🔴 +151 B (7.77 MB) · Vendor & Third-Party ⚪ 0 B (8.84 MB) · Panels & Settings ⚪ 0 B (435 kB) · Views & Navigation ⚪ 0 B (72.1 kB) · + 5 more

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

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-CaELe7dl.js (removed) 17.9 kB 🟢 -17.9 kB 🟢 -6.34 kB 🟢 -5.51 kB
assets/index-Cs7qLp0-.js (new) 17.9 kB 🔴 +17.9 kB 🔴 +6.34 kB 🔴 +5.48 kB

Status: 1 added / 1 removed

Graph Workspace — 1.02 MB (baseline 1.02 MB) • 🔴 +651 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-koGY43C3.js (new) 1.02 MB 🔴 +1.02 MB 🔴 +218 kB 🔴 +164 kB
assets/GraphView-BlFa7nSi.js (removed) 1.02 MB 🟢 -1.02 MB 🟢 -218 kB 🟢 -164 kB

Status: 1 added / 1 removed

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

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudSurveyView-i87VdMIa.js (new) 15.5 kB 🔴 +15.5 kB 🔴 +3.32 kB 🔴 +2.82 kB
assets/CloudSurveyView-tp2D6_WM.js (removed) 15.5 kB 🟢 -15.5 kB 🟢 -3.32 kB 🟢 -2.82 kB
assets/CloudLoginView-BevH5zSb.js (removed) 11.4 kB 🟢 -11.4 kB 🟢 -3.19 kB 🟢 -2.82 kB
assets/CloudLoginView-BjuA2Fh1.js (new) 11.4 kB 🔴 +11.4 kB 🔴 +3.19 kB 🔴 +2.82 kB
assets/CloudSignupView-DGykF5ub.js (removed) 9.37 kB 🟢 -9.37 kB 🟢 -2.7 kB 🟢 -2.36 kB
assets/CloudSignupView-DkfIkVmx.js (new) 9.37 kB 🔴 +9.37 kB 🔴 +2.69 kB 🔴 +2.36 kB
assets/UserCheckView-BFJJ4dZL.js (removed) 8.41 kB 🟢 -8.41 kB 🟢 -2.23 kB 🟢 -1.94 kB
assets/UserCheckView-BTBD5zwY.js (new) 8.41 kB 🔴 +8.41 kB 🔴 +2.23 kB 🔴 +1.94 kB
assets/CloudLayoutView-B2XMaMtk.js (removed) 6.43 kB 🟢 -6.43 kB 🟢 -2.1 kB 🟢 -1.82 kB
assets/CloudLayoutView-DQJsU-Pg.js (new) 6.43 kB 🔴 +6.43 kB 🔴 +2.1 kB 🔴 +1.82 kB
assets/CloudForgotPasswordView-Bvsfsf2r.js (removed) 5.56 kB 🟢 -5.56 kB 🟢 -1.93 kB 🟢 -1.71 kB
assets/CloudForgotPasswordView-RfQ-YpZk.js (new) 5.56 kB 🔴 +5.56 kB 🔴 +1.93 kB 🔴 +1.7 kB
assets/CloudAuthTimeoutView-B-DUXb1M.js (new) 4.91 kB 🔴 +4.91 kB 🔴 +1.77 kB 🔴 +1.54 kB
assets/CloudAuthTimeoutView-s2F7JGPJ.js (removed) 4.91 kB 🟢 -4.91 kB 🟢 -1.77 kB 🟢 -1.54 kB
assets/CloudSubscriptionRedirectView-BUARoA-M.js (new) 4.75 kB 🔴 +4.75 kB 🔴 +1.78 kB 🔴 +1.57 kB
assets/CloudSubscriptionRedirectView-QkMgqRSJ.js (removed) 4.75 kB 🟢 -4.75 kB 🟢 -1.78 kB 🟢 -1.57 kB
assets/UserSelectView-BZtCx_xg.js (removed) 4.5 kB 🟢 -4.5 kB 🟢 -1.64 kB 🟢 -1.47 kB
assets/UserSelectView-CPSTfBXU.js (new) 4.5 kB 🔴 +4.5 kB 🔴 +1.64 kB 🔴 +1.47 kB
assets/CloudSorryContactSupportView-Bypca0av.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/layout-CI4MZk1L.js 296 B 296 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 9 added / 9 removed

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

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/SecretsPanel-CA_QLPKJ.js (new) 21.5 kB 🔴 +21.5 kB 🔴 +5.31 kB 🔴 +4.66 kB
assets/SecretsPanel-CWwcEzfQ.js (removed) 21.5 kB 🟢 -21.5 kB 🟢 -5.31 kB 🟢 -4.66 kB
assets/LegacyCreditsPanel-LMxQsDPE.js (new) 20.6 kB 🔴 +20.6 kB 🔴 +5.56 kB 🔴 +4.89 kB
assets/LegacyCreditsPanel-W5zlLljm.js (removed) 20.6 kB 🟢 -20.6 kB 🟢 -5.56 kB 🟢 -4.9 kB
assets/SubscriptionPanel-B72WNyEj.js (removed) 18.2 kB 🟢 -18.2 kB 🟢 -4.66 kB 🟢 -4.11 kB
assets/SubscriptionPanel-eG2j1ShN.js (new) 18.2 kB 🔴 +18.2 kB 🔴 +4.66 kB 🔴 +4.09 kB
assets/KeybindingPanel-C_Ce_pxt.js (removed) 12.3 kB 🟢 -12.3 kB 🟢 -3.52 kB 🟢 -3.11 kB
assets/KeybindingPanel-C1ZCqAGN.js (new) 12.3 kB 🔴 +12.3 kB 🔴 +3.51 kB 🔴 +3.12 kB
assets/AboutPanel-DGKmduyT.js (removed) 9.79 kB 🟢 -9.79 kB 🟢 -2.73 kB 🟢 -2.45 kB
assets/AboutPanel-DwsFR_xc.js (new) 9.79 kB 🔴 +9.79 kB 🔴 +2.73 kB 🔴 +2.45 kB
assets/ExtensionPanel-CYJ8B2lv.js (removed) 9.38 kB 🟢 -9.38 kB 🟢 -2.65 kB 🟢 -2.36 kB
assets/ExtensionPanel-DjT3qQ4t.js (new) 9.38 kB 🔴 +9.38 kB 🔴 +2.65 kB 🔴 +2.36 kB
assets/ServerConfigPanel-BpwzcoRB.js (new) 6.44 kB 🔴 +6.44 kB 🔴 +2.12 kB 🔴 +1.91 kB
assets/ServerConfigPanel-C0TRP1Ex.js (removed) 6.44 kB 🟢 -6.44 kB 🟢 -2.12 kB 🟢 -1.89 kB
assets/UserPanel-BpU9s_7L.js (new) 6.16 kB 🔴 +6.16 kB 🔴 +1.99 kB 🔴 +1.74 kB
assets/UserPanel-D1CWSD_y.js (removed) 6.16 kB 🟢 -6.16 kB 🟢 -1.99 kB 🟢 -1.75 kB
assets/cloudRemoteConfig-DBHfrATc.js (new) 1.44 kB 🔴 +1.44 kB 🔴 +701 B 🔴 +608 B
assets/cloudRemoteConfig-Ddj8hQZI.js (removed) 1.44 kB 🟢 -1.44 kB 🟢 -703 B 🟢 -609 B
assets/refreshRemoteConfig-CEnssXwC.js (removed) 1.14 kB 🟢 -1.14 kB 🟢 -520 B 🟢 -458 B
assets/refreshRemoteConfig-CT_euQUS.js (new) 1.14 kB 🔴 +1.14 kB 🔴 +521 B 🔴 +459 B
assets/config-CGn5JFmU.js 996 B 996 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-B5oF6TeI.js 29.9 kB 29.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BVYOg4dh.js 24.5 kB 24.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CBEvSL1z.js 38.5 kB 38.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CGx1t8IZ.js 27.8 kB 27.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CNcb_4nC.js 30.5 kB 30.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-Cx1dZM6H.js 23.9 kB 23.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-Dw-QS6Nb.js 27.9 kB 27.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DXxgnCSn.js 32.4 kB 32.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-GRFn4guL.js 34.2 kB 34.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-mgwKIVQ2.js 28.8 kB 28.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-s83B801I.js 28.7 kB 28.7 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-A6aOk8qX.js (removed) 3.4 kB 🟢 -3.4 kB 🟢 -1.18 kB 🟢 -985 B
assets/auth-I_dlMhG3.js (new) 3.4 kB 🔴 +3.4 kB 🔴 +1.18 kB 🔴 +990 B
assets/SignUpForm-C6JuQ8ZM.js (new) 3.01 kB 🔴 +3.01 kB 🔴 +1.23 kB 🔴 +1.09 kB
assets/SignUpForm-IPCd3lOf.js (removed) 3.01 kB 🟢 -3.01 kB 🟢 -1.23 kB 🟢 -1.09 kB
assets/UpdatePasswordContent-BE6lk63e.js (new) 2.37 kB 🔴 +2.37 kB 🔴 +1.07 kB 🔴 +937 B
assets/UpdatePasswordContent-DOWRP1hr.js (removed) 2.37 kB 🟢 -2.37 kB 🟢 -1.07 kB 🟢 -941 B
assets/firebaseAuthStore-_UJFMn3g.js (new) 788 B 🔴 +788 B 🔴 +384 B 🔴 +338 B
assets/firebaseAuthStore-vrvmEmmj.js (removed) 788 B 🟢 -788 B 🟢 -390 B 🟢 -347 B
assets/auth-B8YNIUsk.js (new) 357 B 🔴 +357 B 🔴 +226 B 🔴 +197 B
assets/auth-bdTbaYr6.js (removed) 357 B 🟢 -357 B 🟢 -227 B 🟢 -193 B
assets/PasswordFields-DLbVLg8O.js 4.51 kB 4.51 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WorkspaceProfilePic-D6ioir1T.js 1.57 kB 1.57 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

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

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useSubscriptionDialog-Cmw1WKY-.js (new) 736 B 🔴 +736 B 🔴 +376 B 🔴 +323 B
assets/useSubscriptionDialog-pyivOuVL.js (removed) 736 B 🟢 -736 B 🟢 -381 B 🟢 -350 B

Status: 1 added / 1 removed

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

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useTerminalTabs-CDOe2i9E.js (new) 9.84 kB 🔴 +9.84 kB 🔴 +3.39 kB 🔴 +2.99 kB
assets/useTerminalTabs-hLuNZQu3.js (removed) 9.84 kB 🟢 -9.84 kB 🟢 -3.4 kB 🟢 -3 kB
assets/ComfyQueueButton-Azlau2kk.js (new) 8.02 kB 🔴 +8.02 kB 🔴 +2.48 kB 🔴 +2.23 kB
assets/ComfyQueueButton-B2_Dj06P.js (removed) 8.02 kB 🟢 -8.02 kB 🟢 -2.49 kB 🟢 -2.23 kB
assets/SubscribeButton-D6YHzNb_.js (new) 2.48 kB 🔴 +2.48 kB 🔴 +1.07 kB 🔴 +927 B
assets/SubscribeButton-kNHSgOaw.js (removed) 2.48 kB 🟢 -2.48 kB 🟢 -1.07 kB 🟢 -941 B
assets/cloudFeedbackTopbarButton-CFvRnJu8.js (new) 1.59 kB 🔴 +1.59 kB 🔴 +850 B 🔴 +761 B
assets/cloudFeedbackTopbarButton-gRxVplVc.js (removed) 1.59 kB 🟢 -1.59 kB 🟢 -852 B 🟢 -758 B
assets/ComfyQueueButton-B5h4IXir.js (removed) 793 B 🟢 -793 B 🟢 -391 B 🟢 -349 B
assets/ComfyQueueButton-DLdn2I-L.js (new) 793 B 🔴 +793 B 🔴 +391 B 🔴 +345 B
assets/Button-D1z3poyI.js 2.98 kB 2.98 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudBadge-BEnZAylJ.js 1.24 kB 1.24 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/FormSearchInput-Bg4LklDe.js 3.73 kB 3.73 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ScrubableNumberInput-DecBFGbM.js 5.94 kB 5.94 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/TopbarBadge-CJNpTEnW.js 7.44 kB 7.44 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar-CnQQLXB-.js 1.17 kB 1.17 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetButton-sg8Jj4MY.js 1.84 kB 1.84 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

Data & Services — 2.56 MB (baseline 2.55 MB) • 🔴 +5.75 kB

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/dialogService-Bk8rBXM3.js (new) 1.75 MB 🔴 +1.75 MB 🔴 +394 kB 🔴 +297 kB
assets/dialogService-BfTcc-ND.js (removed) 1.75 MB 🟢 -1.75 MB 🟢 -393 kB 🟢 -296 kB
assets/api-BdZSXQ_8.js (new) 678 kB 🔴 +678 kB 🔴 +153 kB 🔴 +122 kB
assets/api-RqllEVak.js (removed) 678 kB 🟢 -678 kB 🟢 -153 kB 🟢 -122 kB
assets/load3dService-BCBJbpZz.js (removed) 91 kB 🟢 -91 kB 🟢 -19.1 kB 🟢 -16.4 kB
assets/load3dService-BtUzS7UX.js (new) 91 kB 🔴 +91 kB 🔴 +19.1 kB 🔴 +16.4 kB
assets/extensionStore-BapW-6FA.js (new) 12.1 kB 🔴 +12.1 kB 🔴 +4.21 kB 🔴 +3.7 kB
assets/extensionStore-DCkvMazm.js (removed) 12.1 kB 🟢 -12.1 kB 🟢 -4.21 kB 🟢 -3.69 kB
assets/releaseStore-DGkqKpfB.js (removed) 7.96 kB 🟢 -7.96 kB 🟢 -2.22 kB 🟢 -1.95 kB
assets/releaseStore-qcaBLqoS.js (new) 7.96 kB 🔴 +7.96 kB 🔴 +2.22 kB 🔴 +1.95 kB
assets/keybindingService-BMBixyxu.js (new) 6.52 kB 🔴 +6.52 kB 🔴 +1.71 kB 🔴 +1.47 kB
assets/keybindingService-TCfeDVIT.js (removed) 6.52 kB 🟢 -6.52 kB 🟢 -1.71 kB 🟢 -1.47 kB
assets/bootstrapStore-BPe07mav.js (removed) 2.08 kB 🟢 -2.08 kB 🟢 -875 B 🟢 -784 B
assets/bootstrapStore-DN1ErJ07.js (new) 2.08 kB 🔴 +2.08 kB 🔴 +873 B 🔴 +791 B
assets/userStore-BetVD8KB.js (new) 1.85 kB 🔴 +1.85 kB 🔴 +721 B 🔴 +633 B
assets/userStore-DOOhmxK8.js (removed) 1.85 kB 🟢 -1.85 kB 🟢 -720 B 🟢 -631 B
assets/audioService-Qw1VXqCe.js (new) 1.73 kB 🔴 +1.73 kB 🔴 +851 B 🔴 +728 B
assets/audioService-W2TdI9Z1.js (removed) 1.73 kB 🟢 -1.73 kB 🟢 -849 B 🟢 -724 B
assets/releaseStore-C_GdZ9QL.js (removed) 760 B 🟢 -760 B 🟢 -385 B 🟢 -337 B
assets/releaseStore-DfwqNfor.js (new) 760 B 🔴 +760 B 🔴 +382 B 🔴 +334 B
assets/settingStore-B7RcFUWW.js (removed) 744 B 🟢 -744 B 🟢 -387 B 🟢 -365 B
assets/settingStore-BS4v1xnQ.js (new) 744 B 🔴 +744 B 🔴 +383 B 🔴 +335 B
assets/workflowDraftStore-CUEdIWxQ.js (new) 736 B 🔴 +736 B 🔴 +375 B 🔴 +329 B
assets/workflowDraftStore-G4cfd76B.js (removed) 736 B 🟢 -736 B 🟢 -381 B 🟢 -332 B
assets/dialogService-CBbiokgh.js (removed) 725 B 🟢 -725 B 🟢 -367 B 🟢 -325 B
assets/dialogService-Cl5Gz4xN.js (new) 725 B 🔴 +725 B 🔴 +363 B 🔴 +321 B
assets/serverConfigStore-EPk4OtIK.js 2.32 kB 2.32 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 13 added / 13 removed

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

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useLoad3d-CH4dGH0t.js (new) 14.6 kB 🔴 +14.6 kB 🔴 +3.63 kB 🔴 +3.21 kB
assets/useLoad3d-RuiihLO1.js (removed) 14.6 kB 🟢 -14.6 kB 🟢 -3.63 kB 🟢 -3.2 kB
assets/useLoad3dViewer-hLNlYAow.js (removed) 14.1 kB 🟢 -14.1 kB 🟢 -3.15 kB 🟢 -2.79 kB
assets/useLoad3dViewer-ncc082nn.js (new) 14.1 kB 🔴 +14.1 kB 🔴 +3.15 kB 🔴 +2.79 kB
assets/useFeatureFlags-C6wJFrI7.js (new) 4.14 kB 🔴 +4.14 kB 🔴 +1.24 kB 🔴 +1.06 kB
assets/useFeatureFlags-CVZ6kZJ5.js (removed) 4.14 kB 🟢 -4.14 kB 🟢 -1.24 kB 🟢 -1.06 kB
assets/useWorkspaceUI-BRjJjrwr.js (new) 3 kB 🔴 +3 kB 🔴 +822 B 🔴 +702 B
assets/useWorkspaceUI-DwwOZk2W.js (removed) 3 kB 🟢 -3 kB 🟢 -822 B 🟢 -699 B
assets/subscriptionCheckoutUtil-DiIKGDj9.js (removed) 2.53 kB 🟢 -2.53 kB 🟢 -1.06 kB 🟢 -946 B
assets/subscriptionCheckoutUtil-qWh6p-0E.js (new) 2.53 kB 🔴 +2.53 kB 🔴 +1.06 kB 🔴 +952 B
assets/useExternalLink-BXD21Keo.js (new) 1.66 kB 🔴 +1.66 kB 🔴 +770 B 🔴 +677 B
assets/useExternalLink-DzcPdi1l.js (removed) 1.66 kB 🟢 -1.66 kB 🟢 -773 B 🟢 -675 B
assets/useErrorHandling-CpIybvuy.js (new) 1.5 kB 🔴 +1.5 kB 🔴 +628 B 🔴 +534 B
assets/useErrorHandling-p_KEFjUh.js (removed) 1.5 kB 🟢 -1.5 kB 🟢 -628 B 🟢 -533 B
assets/useWorkspaceSwitch-B2I7XxiF.js (new) 1.25 kB 🔴 +1.25 kB 🔴 +545 B 🔴 +486 B
assets/useWorkspaceSwitch-BARcFwFn.js (removed) 1.25 kB 🟢 -1.25 kB 🟢 -544 B 🟢 -483 B
assets/useLoad3d-CBhmFSZR.js (removed) 859 B 🟢 -859 B 🟢 -425 B 🟢 -375 B
assets/useLoad3d-DZ2lEM0C.js (new) 859 B 🔴 +859 B 🔴 +421 B 🔴 +375 B
assets/audioUtils-BOa4gz2g.js (new) 858 B 🔴 +858 B 🔴 +501 B 🔴 +402 B
assets/audioUtils-p3iHgBSB.js (removed) 858 B 🟢 -858 B 🟢 -498 B 🟢 -410 B
assets/useLoad3dViewer-C5gwnJiY.js (removed) 838 B 🟢 -838 B 🟢 -411 B 🟢 -365 B
assets/useLoad3dViewer-D3APne0c.js (new) 838 B 🔴 +838 B 🔴 +405 B 🔴 +363 B
assets/useCurrentUser-DPzwfLPD.js (new) 722 B 🔴 +722 B 🔴 +367 B 🔴 +321 B
assets/useCurrentUser-wWuEQkIE.js (removed) 722 B 🟢 -722 B 🟢 -372 B 🟢 -349 B
assets/_plugin-vue_export-helper-ralzwvFM.js 315 B 315 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/colorUtil-CY7QMUhQ.js 7 kB 7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/envUtil-Clzmwvt4.js 466 B 466 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/markdownRendererUtil-Cddas8Zl.js 1.56 kB 1.56 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SkeletonUtils-BputJAFn.js 133 B 133 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 12 added / 12 removed

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

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-axios-Cp6hch1I.js 70.7 kB 70.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-chart-BxkFiWzp.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-DNX73mqE.js 133 kB 133 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-markdown-D5S6AC80.js 103 kB 103 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-other-DrYd4O-6.js 1.52 MB 1.52 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-BnCPTL0g.js 1.73 MB 1.73 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-reka-ui-DVmi2O2Z.js 388 kB 388 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-LBLOE6BD.js 1.8 MB 1.8 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-BnYkbQDM.js 634 kB 634 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-core-DtiQ1dr9.js 311 kB 311 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vueuse-D2jVNnmE.js 113 kB 113 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-MKpa1ZAW.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.77 MB (baseline 7.77 MB) • 🔴 +151 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/i18n-CfbnZinl.js (new) 527 kB 🔴 +527 kB 🔴 +102 kB 🔴 +79.4 kB
assets/i18n-DKWcz8Zh.js (removed) 527 kB 🟢 -527 kB 🟢 -102 kB 🟢 -79.3 kB
assets/core-acXtCu1m.js (removed) 73.4 kB 🟢 -73.4 kB 🟢 -18.9 kB 🟢 -16.2 kB
assets/core-Bgr2-WDj.js (new) 73.4 kB 🔴 +73.4 kB 🔴 +18.9 kB 🔴 +16.2 kB
assets/groupNode-cYCmJYr1.js (new) 71.8 kB 🔴 +71.8 kB 🔴 +17.7 kB 🔴 +15.5 kB
assets/groupNode-D3_6rAak.js (removed) 71.8 kB 🟢 -71.8 kB 🟢 -17.7 kB 🟢 -15.6 kB
assets/WidgetSelect-2yknCTBx.js (new) 58.1 kB 🔴 +58.1 kB 🔴 +12.4 kB 🔴 +10.7 kB
assets/WidgetSelect-BwaTfEuW.js (removed) 58.1 kB 🟢 -58.1 kB 🟢 -12.4 kB 🟢 -10.7 kB
assets/SubscriptionRequiredDialogContentWorkspace-DUwW-Duy.js (new) 46.3 kB 🔴 +46.3 kB 🔴 +8.65 kB 🔴 +7.52 kB
assets/SubscriptionRequiredDialogContentWorkspace-UBswvrxl.js (removed) 46.3 kB 🟢 -46.3 kB 🟢 -8.65 kB 🟢 -7.5 kB
assets/WidgetPainter-CwfoA3kZ.js (removed) 32.5 kB 🟢 -32.5 kB 🟢 -7.96 kB 🟢 -7.07 kB
assets/WidgetPainter-DW2qMcpz.js (new) 32.5 kB 🔴 +32.5 kB 🔴 +7.96 kB 🔴 +7.07 kB
assets/Load3DControls-BIiicqOB.js (removed) 30.9 kB 🟢 -30.9 kB 🟢 -5.34 kB 🟢 -4.64 kB
assets/Load3DControls-BTgPhXZE.js (new) 30.9 kB 🔴 +30.9 kB 🔴 +5.34 kB 🔴 +4.64 kB
assets/WorkspacePanelContent-BpUpRmSt.js (new) 29.3 kB 🔴 +29.3 kB 🔴 +6.14 kB 🔴 +5.39 kB
assets/WorkspacePanelContent-C9r8TZdE.js (removed) 29.3 kB 🟢 -29.3 kB 🟢 -6.14 kB 🟢 -5.39 kB
assets/SubscriptionRequiredDialogContent-BEDS6J4R.js (removed) 25.7 kB 🟢 -25.7 kB 🟢 -6.57 kB 🟢 -5.77 kB
assets/SubscriptionRequiredDialogContent-CB1MPyHI.js (new) 25.7 kB 🔴 +25.7 kB 🔴 +6.57 kB 🔴 +5.77 kB
assets/Load3dViewerContent-C5JCuV8W.js (new) 23 kB 🔴 +23 kB 🔴 +5.18 kB 🔴 +4.49 kB
assets/Load3dViewerContent-DnDkiLVx.js (removed) 23 kB 🟢 -23 kB 🟢 -5.18 kB 🟢 -4.5 kB
assets/WidgetImageCrop-BlXjlEZt.js (removed) 22.1 kB 🟢 -22.1 kB 🟢 -5.5 kB 🟢 -4.85 kB
assets/WidgetImageCrop-C3irWuwL.js (new) 22.1 kB 🔴 +22.1 kB 🔴 +5.51 kB 🔴 +4.86 kB
assets/SubscriptionPanelContentWorkspace-BCUqNzss.js (new) 21.6 kB 🔴 +21.6 kB 🔴 +5.06 kB 🔴 +4.46 kB
assets/SubscriptionPanelContentWorkspace-DaC85suE.js (removed) 21.6 kB 🟢 -21.6 kB 🟢 -5.05 kB 🟢 -4.45 kB
assets/CurrentUserPopoverWorkspace-B3kDw4Tg.js (removed) 19.9 kB 🟢 -19.9 kB 🟢 -4.88 kB 🟢 -4.34 kB
assets/CurrentUserPopoverWorkspace-DKwQt_FR.js (new) 19.9 kB 🔴 +19.9 kB 🔴 +4.88 kB 🔴 +4.34 kB
assets/SignInContent-d5YB4RXY.js (removed) 18.9 kB 🟢 -18.9 kB 🟢 -4.76 kB 🟢 -4.16 kB
assets/SignInContent-De-c4Rn2.js (new) 18.9 kB 🔴 +18.9 kB 🔴 +4.75 kB 🔴 +4.17 kB
assets/WidgetInputNumber-CcSiiqhh.js (new) 18.7 kB 🔴 +18.7 kB 🔴 +4.75 kB 🔴 +4.22 kB
assets/WidgetInputNumber-DdVVB6-I.js (removed) 18.7 kB 🟢 -18.7 kB 🟢 -4.75 kB 🟢 -4.22 kB
assets/WidgetRecordAudio-BLdb403E.js (removed) 17.3 kB 🟢 -17.3 kB 🟢 -4.94 kB 🟢 -4.42 kB
assets/WidgetRecordAudio-ByJS0wk3.js (new) 17.3 kB 🔴 +17.3 kB 🔴 +4.94 kB 🔴 +4.43 kB
assets/Load3D-C9IXLDz6.js (removed) 16.2 kB 🟢 -16.2 kB 🟢 -4.03 kB 🟢 -3.51 kB
assets/Load3D-DBT8iKPn.js (new) 16.2 kB 🔴 +16.2 kB 🔴 +4.03 kB 🔴 +3.51 kB
assets/load3d-DQV_GAok.js (removed) 14.7 kB 🟢 -14.7 kB 🟢 -4.18 kB 🟢 -3.63 kB
assets/load3d-INBgrnK5.js (new) 14.7 kB 🔴 +14.7 kB 🔴 +4.19 kB 🔴 +3.63 kB
assets/AudioPreviewPlayer-Ca89BBcn.js (new) 10.9 kB 🔴 +10.9 kB 🔴 +3.19 kB 🔴 +2.85 kB
assets/AudioPreviewPlayer-Pu16kmv0.js (removed) 10.9 kB 🟢 -10.9 kB 🟢 -3.19 kB 🟢 -2.86 kB
assets/changeTracker-BB0XK4Xj.js (new) 9.38 kB 🔴 +9.38 kB 🔴 +2.9 kB 🔴 +2.54 kB
assets/changeTracker-DiEvuTE7.js (removed) 9.38 kB 🟢 -9.38 kB 🟢 -2.89 kB 🟢 -2.55 kB
assets/nodeTemplates-C2KJkHba.js (removed) 9.29 kB 🟢 -9.29 kB 🟢 -3.25 kB 🟢 -2.86 kB
assets/nodeTemplates-D4uYJQE1.js (new) 9.29 kB 🔴 +9.29 kB 🔴 +3.26 kB 🔴 +2.86 kB
assets/InviteMemberDialogContent-6rMY9FJj.js (new) 7.38 kB 🔴 +7.38 kB 🔴 +2.29 kB 🔴 +2 kB
assets/InviteMemberDialogContent-TPIaM7RK.js (removed) 7.38 kB 🟢 -7.38 kB 🟢 -2.29 kB 🟢 -2 kB
assets/Load3DConfiguration-B6VoaSwy.js (removed) 6.27 kB 🟢 -6.27 kB 🟢 -1.91 kB 🟢 -1.68 kB
assets/Load3DConfiguration-D7pqAqtr.js (new) 6.27 kB 🔴 +6.27 kB 🔴 +1.91 kB 🔴 +1.68 kB
assets/CreateWorkspaceDialogContent-CqHTrb0O.js (removed) 5.53 kB 🟢 -5.53 kB 🟢 -1.99 kB 🟢 -1.74 kB
assets/CreateWorkspaceDialogContent-Cs0BsiGw.js (new) 5.53 kB 🔴 +5.53 kB 🔴 +1.99 kB 🔴 +1.73 kB
assets/onboardingCloudRoutes-C7siQGen.js (new) 5.41 kB 🔴 +5.41 kB 🔴 +1.84 kB 🔴 +1.6 kB
assets/onboardingCloudRoutes-D1qWOztf.js (removed) 5.41 kB 🟢 -5.41 kB 🟢 -1.84 kB 🟢 -1.6 kB
assets/FreeTierDialogContent-BON2nlt1.js (removed) 5.39 kB 🟢 -5.39 kB 🟢 -1.89 kB 🟢 -1.67 kB
assets/FreeTierDialogContent-wzQZiGQj.js (new) 5.39 kB 🔴 +5.39 kB 🔴 +1.9 kB 🔴 +1.67 kB
assets/EditWorkspaceDialogContent-BYcMvMhw.js (new) 5.33 kB 🔴 +5.33 kB 🔴 +1.94 kB 🔴 +1.69 kB
assets/EditWorkspaceDialogContent-D3HeJ11N.js (removed) 5.33 kB 🟢 -5.33 kB 🟢 -1.94 kB 🟢 -1.7 kB
assets/ValueControlPopover-BlafgSYw.js (removed) 4.92 kB 🟢 -4.92 kB 🟢 -1.76 kB 🟢 -1.57 kB
assets/ValueControlPopover-D2oiCHa4.js (new) 4.92 kB 🔴 +4.92 kB 🔴 +1.76 kB 🔴 +1.57 kB
assets/Preview3d-B2Z0vDvQ.js (new) 4.81 kB 🔴 +4.81 kB 🔴 +1.56 kB 🔴 +1.36 kB
assets/Preview3d-Dz9gOXvO.js (removed) 4.81 kB 🟢 -4.81 kB 🟢 -1.57 kB 🟢 -1.36 kB
assets/CancelSubscriptionDialogContent-CGQMQ-wk.js (removed) 4.79 kB 🟢 -4.79 kB 🟢 -1.78 kB 🟢 -1.56 kB
assets/CancelSubscriptionDialogContent-Cvchna7c.js (new) 4.79 kB 🔴 +4.79 kB 🔴 +1.78 kB 🔴 +1.56 kB
assets/DeleteWorkspaceDialogContent-CbOZIBXV.js (new) 4.23 kB 🔴 +4.23 kB 🔴 +1.63 kB 🔴 +1.43 kB
assets/DeleteWorkspaceDialogContent-RH_aF6h9.js (removed) 4.23 kB 🟢 -4.23 kB 🟢 -1.63 kB 🟢 -1.42 kB
assets/WidgetWithControl-BOxrzL9X.js (removed) 4.1 kB 🟢 -4.1 kB 🟢 -1.77 kB 🟢 -1.58 kB
assets/WidgetWithControl-CNg_674z.js (new) 4.1 kB 🔴 +4.1 kB 🔴 +1.77 kB 🔴 +1.61 kB
assets/LeaveWorkspaceDialogContent-5JVK_RYT.js (removed) 4.06 kB 🟢 -4.06 kB 🟢 -1.57 kB 🟢 -1.37 kB
assets/LeaveWorkspaceDialogContent-BIcazaJ4.js (new) 4.06 kB 🔴 +4.06 kB 🔴 +1.58 kB 🔴 +1.37 kB
assets/RemoveMemberDialogContent-Be-1VjYV.js (removed) 4.04 kB 🟢 -4.04 kB 🟢 -1.52 kB 🟢 -1.33 kB
assets/RemoveMemberDialogContent-DAfSVDpG.js (new) 4.04 kB 🔴 +4.04 kB 🔴 +1.52 kB 🔴 +1.33 kB
assets/RevokeInviteDialogContent-BtnfBBz7.js (removed) 3.95 kB 🟢 -3.95 kB 🟢 -1.54 kB 🟢 -1.35 kB
assets/RevokeInviteDialogContent-D79avaRB.js (new) 3.95 kB 🔴 +3.95 kB 🔴 +1.54 kB 🔴 +1.35 kB
assets/InviteMemberUpsellDialogContent-9dxmKV74.js (new) 3.82 kB 🔴 +3.82 kB 🔴 +1.4 kB 🔴 +1.23 kB
assets/InviteMemberUpsellDialogContent-Bu2kyYmS.js (removed) 3.82 kB 🟢 -3.82 kB 🟢 -1.4 kB 🟢 -1.22 kB
assets/tierBenefits-B-FbV4zK.js (removed) 3.66 kB 🟢 -3.66 kB 🟢 -1.3 kB 🟢 -1.17 kB
assets/tierBenefits-B0GXLkgK.js (new) 3.66 kB 🔴 +3.66 kB 🔴 +1.31 kB 🔴 +1.17 kB
assets/saveMesh-BWWx_tdb.js (new) 3.38 kB 🔴 +3.38 kB 🔴 +1.45 kB 🔴 +1.28 kB
assets/saveMesh-CmMLlVTz.js (removed) 3.38 kB 🟢 -3.38 kB 🟢 -1.45 kB 🟢 -1.29 kB
assets/cloudSessionCookie-A_lo_8FD.js (new) 3.1 kB 🔴 +3.1 kB 🔴 +1.08 kB 🔴 +983 B
assets/cloudSessionCookie-CKLohnB-.js (removed) 3.1 kB 🟢 -3.1 kB 🟢 -1.08 kB 🟢 -941 B
assets/GlobalToast-ctE62tUI.js (removed) 2.91 kB 🟢 -2.91 kB 🟢 -1.21 kB 🟢 -1.03 kB
assets/GlobalToast-D0C2RHpk.js (new) 2.91 kB 🔴 +2.91 kB 🔴 +1.21 kB 🔴 +1.07 kB
assets/ApiNodesSignInContent-Bzv_bB5d.js (removed) 2.69 kB 🟢 -2.69 kB 🟢 -1.05 kB 🟢 -920 B
assets/ApiNodesSignInContent-FBJDTmDk.js (new) 2.69 kB 🔴 +2.69 kB 🔴 +1.05 kB 🔴 +923 B
assets/SubscribeToRun-DyP0j9Bd.js (new) 2.2 kB 🔴 +2.2 kB 🔴 +1.01 kB 🔴 +866 B
assets/SubscribeToRun-DZOftgTJ.js (removed) 2.2 kB 🟢 -2.2 kB 🟢 -1.01 kB 🟢 -867 B
assets/CloudRunButtonWrapper-Dep1fVWF.js (removed) 1.68 kB 🟢 -1.68 kB 🟢 -786 B 🟢 -704 B
assets/CloudRunButtonWrapper-Dzb12RRT.js (new) 1.68 kB 🔴 +1.68 kB 🔴 +784 B 🔴 +691 B
assets/signInSchema-CIXWGcS0.js (removed) 1.53 kB 🟢 -1.53 kB 🟢 -563 B 🟢 -513 B
assets/signInSchema-JV_Favpi.js (new) 1.53 kB 🔴 +1.53 kB 🔴 +561 B 🔴 +518 B
assets/previousFullPath-BKwucQVG.js (new) 1.39 kB 🔴 +1.39 kB 🔴 +652 B 🔴 +577 B
assets/previousFullPath-Dnx2g6xk.js (removed) 1.39 kB 🟢 -1.39 kB 🟢 -651 B 🟢 -579 B
assets/cloudBadges-1MkkkwBy.js (removed) 1.37 kB 🟢 -1.37 kB 🟢 -700 B 🟢 -607 B
assets/cloudBadges-BopaUnxK.js (new) 1.37 kB 🔴 +1.37 kB 🔴 +698 B 🔴 +608 B
assets/cloudSubscription-CCHRqv5N.js (new) 1.33 kB 🔴 +1.33 kB 🔴 +653 B 🔴 +569 B
assets/cloudSubscription-D5IPEopo.js (removed) 1.33 kB 🟢 -1.33 kB 🟢 -653 B 🟢 -566 B
assets/Load3D-47dfq6ba.js (new) 1.07 kB 🔴 +1.07 kB 🔴 +492 B 🔴 +444 B
assets/Load3D-BKBdE9TP.js (removed) 1.07 kB 🟢 -1.07 kB 🟢 -498 B 🟢 -442 B
assets/nightlyBadges-3KCjLZga.js (new) 1 kB 🔴 +1 kB 🔴 +527 B 🔴 +472 B
assets/nightlyBadges-BrYu6A8H.js (removed) 1 kB 🟢 -1 kB 🟢 -530 B 🟢 -467 B
assets/Load3dViewerContent-Bo5KOZRH.js (new) 993 B 🔴 +993 B 🔴 +462 B 🔴 +416 B
assets/Load3dViewerContent-Cy4pODpg.js (removed) 993 B 🟢 -993 B 🟢 -468 B 🟢 -414 B
assets/SubscriptionPanelContentWorkspace-BL-bjZTp.js (new) 920 B 🔴 +920 B 🔴 +436 B 🔴 +373 B
assets/SubscriptionPanelContentWorkspace-C9OvaAxb.js (removed) 920 B 🟢 -920 B 🟢 -438 B 🟢 -374 B
assets/graphHasMissingNodes-byLH6wZ_.js (removed) 761 B 🟢 -761 B 🟢 -375 B 🟢 -332 B
assets/graphHasMissingNodes-kY6H-31H.js (new) 761 B 🔴 +761 B 🔴 +375 B 🔴 +329 B
assets/changeTracker-CRflf7uW.js (new) 757 B 🔴 +757 B 🔴 +378 B 🔴 +335 B
assets/changeTracker-D1Bbl-pJ.js (removed) 757 B 🟢 -757 B 🟢 -385 B 🟢 -335 B
assets/WidgetLegacy-CGKYUNVw.js (removed) 745 B 🟢 -745 B 🟢 -385 B 🟢 -359 B
assets/WidgetLegacy-l0Se6GIT.js (new) 745 B 🔴 +745 B 🔴 +377 B 🔴 +330 B
assets/WidgetInputNumber-AkgYEMIi.js (new) 469 B 🔴 +469 B 🔴 +265 B 🔴 +227 B
assets/WidgetInputNumber-BRfHTpPD.js (removed) 469 B 🟢 -469 B 🟢 -264 B 🟢 -227 B
assets/i18n-BHEnH5TD.js (new) 199 B 🔴 +199 B 🔴 +160 B 🔴 +139 B
assets/i18n-J0aEQYXk.js (removed) 199 B 🟢 -199 B 🟢 -162 B 🟢 -139 B
assets/AnimationControls-e1OB6oJR.js 4.61 kB 4.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/auto-BTnZwrs2.js 1.7 kB 1.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/BaseViewTemplate-DQKI7wOs.js 1.78 kB 1.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/comfy-logo-single-D9MrYETV.js 198 B 198 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ComfyOrgHeader-CuEodz4y.js 910 B 910 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-B-AdR9IA.js 17.5 kB 17.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CbkxT8K8.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CJGmjcIS.js 15.9 kB 15.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CMaLgTTb.js 16.7 kB 16.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Cw07MMbJ.js 18.8 kB 18.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-D7EtdE6o.js 16.9 kB 16.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DknEFpK3.js 15.2 kB 15.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Ds6WuXnw.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Dvq-F-mb.js 17.5 kB 17.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-pUOay9Eo.js 15.1 kB 15.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-u2AZ8xU4.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/constants-htt0vt7m.js 579 B 579 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-0eBOvZE-.js 147 kB 147 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-B2sg68b4.js 169 kB 169 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BonGln7m.js 183 kB 183 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Bwaiyhg6.js 130 kB 130 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CgPRGKFQ.js 128 kB 128 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-COpUCFH6.js 154 kB 154 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-D5fk3t1K.js 176 kB 176 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DQn-D-q9.js 151 kB 151 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DRFXRCEv.js 205 kB 205 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-e5nfEcC2.js 146 kB 146 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-MEdUGbq0.js 149 kB 149 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DTop-Dqa2c7nZ.js 1.82 kB 1.82 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-DLiWNcHw.js 1.43 kB 1.43 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-BLQErkwF.js 1.75 kB 1.75 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaOtherTop-NQGNpa4H.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaTextTop-0crUoXWV.js 1.01 kB 1.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-sJMrm9jB.js 2.77 kB 2.77 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BmbASBY9.js 409 kB 409 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BPIx0d5-.js 393 kB 393 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BWj_hhU9.js 393 kB 393 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-C7at0SVC.js 385 kB 385 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-D00E-J_2.js 390 kB 390 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DRodGSrf.js 362 kB 362 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-ezyqmmhm.js 443 kB 443 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-GaT9kQvQ.js 483 kB 483 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-hnjb8NXS.js 397 kB 397 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-ITpXEN3V.js 442 kB 442 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-ZK3OUxU7.js 358 kB 358 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/OBJLoader2WorkerModule-DTMpvldF.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Popover-BIYdg9E5.js 3.65 kB 3.65 kB ⚪ 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-C_7cycpB.js 8.94 kB 8.94 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Slider-DVkw5nPu.js 3.52 kB 3.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/src-CbNGuSYA.js 251 B 251 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionBenefits-DVSfLULk.js 2.01 kB 2.01 kB ⚪ 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/VideoPlayOverlay-D-ZhKuWc.js 1.35 kB 1.35 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widget-NeEr3XWN.js 586 B 586 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-BYbwNME9.js 283 B 283 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-GzA4D-L-.js 3.19 kB 3.19 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-BtoXUSiF.js 2.21 kB 2.21 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetColorPicker-DCbDfd19.js 2.9 kB 2.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetCurve-CIcV8pqy.js 9.36 kB 9.36 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetGalleria-DZSYhGzO.js 3.61 kB 3.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-oYMwrOjF.js 7 kB 7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputText-0CncUIzA.js 1.86 kB 1.86 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLayoutField-TvCt3ARa.js 1.98 kB 1.98 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMarkdown-Cqdttdn1.js 2.93 kB 2.93 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-DN03zIgB.js 1.1 kB 1.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetTextarea-B7IIifV6.js 3.96 kB 3.96 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetToggleSwitch-CTquGMvp.js 6.8 kB 6.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetTypes-Br_tbhcL.js 393 B 393 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 56 added / 56 removed

@christian-byrne christian-byrne marked this pull request as ready for review February 3, 2026 21:35
@christian-byrne christian-byrne requested review from a team and pythongosssss as code owners February 3, 2026 21:35
@dosubot dosubot bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Feb 3, 2026
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

🤖 Fix all issues with AI agents
In `@src/components/topbar/WorkflowTab.vue`:
- Around line 96-108: The watch on executionState should run immediately on
mount so a pre-existing 'completed' state schedules the 5s hide; update the
watch call for executionState to include the options object { immediate: true }
(referencing the watch invocation, executionState, clearTimeoutId and
clearResult) so the handler runs once on mount and still runs on subsequent
state changes, preserving the existing timeout-creation and clearTimeout logic.

In `@src/composables/useWorkflowExecutionState.ts`:
- Around line 13-21: The computed state in useWorkflowExecutionState relies on
executionStore.promptIdToWorkflowId (and runningPromptIds) but mutations via
Map.set() won't trigger Vue ref reactivity; update
registerPromptWorkflowIdMapping()/storePrompt() to follow the immutable pattern
used for lastExecutionResultByWorkflowId by creating a new Map instance when
adding/updating entries and assigning it back to
executionStore.promptIdToWorkflowId (instead of mutating the existing Map),
which will ensure the computed in useWorkflowExecutionState (and its dependency
on promptIdToWorkflowId and runningPromptIds) re-runs and the workflow state
reflects new mappings.
🧹 Nitpick comments (1)
src/components/topbar/WorkflowExecutionIndicator.vue (1)

1-28: Prefer $t in the template and drop useI18n here.

t is only used in the template, so $t keeps the script leaner and follows repo convention.

♻️ Suggested refactor
 <template>
   <i
     v-if="state === 'running'"
     class="icon-[lucide--loader-circle] size-4 shrink-0 animate-spin text-muted-foreground"
-    :aria-label="t('workflowExecution.running')"
+    :aria-label="$t('workflowExecution.running')"
   />
   <i
     v-else-if="state === 'completed'"
     class="icon-[lucide--circle-check] size-4 shrink-0 text-jade-600"
-    :aria-label="t('workflowExecution.completed')"
+    :aria-label="$t('workflowExecution.completed')"
   />
   <i
     v-else-if="state === 'error'"
     class="icon-[lucide--circle-alert] size-4 shrink-0 text-coral-600"
-    :aria-label="t('workflowExecution.error')"
+    :aria-label="$t('workflowExecution.error')"
   />
 </template>

 <script setup lang="ts">
-import { useI18n } from 'vue-i18n'
-
 import type { WorkflowExecutionState } from '@/composables/useWorkflowExecutionState'

 defineProps<{
   state: WorkflowExecutionState
 }>()
-
-const { t } = useI18n()
 </script>

Based on learnings: In Vue single-file components where the i18n t function is only used within the template, prefer using the built-in $t instead of importing useI18n.

@christian-byrne
Copy link
Contributor Author

Addressed all review comments:

  1. WorkflowExecutionIndicator.vue - Now uses $t directly in template instead of importing useI18n
  2. executionStore.ts - Moved state derivation logic into getWorkflowExecutionState() function; extracted duplicate result-setting code into setWorkflowExecutionResult() helper
  3. useWorkflowExecutionState.ts - Now delegates to store's getWorkflowExecutionState() instead of containing its own logic
  4. WorkflowTab.vue - Removed manual 5-second timeout; state is now managed entirely via WS messages

The composable remains for convenience in components but the core logic is centralized in the store as suggested.

@christian-byrne christian-byrne added preview-gpu Creates a preview ephemeral environment for this PR (GPU available) and removed preview-cpu Creates a preview ephemeral environment for this PR (CPU only) labels Feb 3, 2026
@dosubot dosubot bot added size:XL This PR changes 500-999 lines, ignoring generated files. and removed size:L This PR changes 100-499 lines, ignoring generated files. labels Feb 6, 2026
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

🤖 Fix all issues with AI agents
In `@src/stores/executionStore.ts`:
- Around line 49-55: Change the WorkflowExecutionResult type so promptId is
optional (promptId?: string) instead of always present with an empty string;
update any other related types/usages in this file that mirror that shape (e.g.,
any other execution result/type declarations around the later block referenced)
to accept undefined and adjust code that constructs WorkflowExecutionResult
(functions or assignments that set promptId) to only include promptId when
available (remove assignments of '' and guard consumers to handle undefined).
Ensure all references to promptId in this module (including read/serialization
logic and consumers of WorkflowExecutionResult) are updated to handle an
optional string.
- Around line 766-772: The store is exporting two internals that are only used
in tests; remove lastExecutionResultByWorkflowId and getWorkflowExecutionState
from the store's public export so they remain internal implementation details,
leaving clearWorkflowExecutionResult, setWorkflowExecutionResultByWorkflowId,
and workflowExecutionStates exported as before; update tests to stop importing
those internals (either assert behavior via the public API
setWorkflowExecutionResultByWorkflowId/clearWorkflowExecutionResult/workflowExecutionStates
or access the store instance directly if absolutely necessary) so tests still
pass without exposing the internal symbols.

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

🤖 Fix all issues with AI agents
In `@src/stores/queueStore.ts`:
- Around line 538-556: The loop only updates execution results for
'failed'/'completed' statuses, so workflows whose latest history is non-final
keep stale indicators; after handling seenWorkflows and determining workflowId
for each job in sortedHistory, add an else branch that clears the stored result
for non-final statuses by calling
executionStore.setWorkflowExecutionResultByWorkflowId(workflowId, null, null)
(or the store's clear method if one exists) so the UI no longer shows a previous
completed/error state when the newest history entry is cancelled/ running/other.

@dosubot dosubot bot added size:L This PR changes 100-499 lines, ignoring generated files. and removed size:XL This PR changes 500-999 lines, ignoring generated files. labels Feb 6, 2026
@christian-byrne
Copy link
Contributor Author

christian-byrne commented Feb 8, 2026

Note: this is currently non-functional until https://github.com/Comfy-Org/cloud/pull/2364 is merged on cloud and the equivalent on ComfyUI. It can still be reviewed though.

@christian-byrne christian-byrne marked this pull request as draft February 8, 2026 20:18
@christian-byrne christian-byrne added preview-gpu Creates a preview ephemeral environment for this PR (GPU available) and removed preview-gpu Creates a preview ephemeral environment for this PR (GPU available) labels Feb 14, 2026
@christian-byrne christian-byrne force-pushed the feat/tab-execution-state-indicator branch from 5e5a900 to 9ff3b03 Compare February 14, 2026 02:55
@christian-byrne christian-byrne removed the preview-gpu Creates a preview ephemeral environment for this PR (GPU available) label Feb 15, 2026
@christian-byrne christian-byrne added preview-cpu Creates a preview ephemeral environment for this PR (CPU only) preview-gpu Creates a preview ephemeral environment for this PR (GPU available) and removed preview-cpu Creates a preview ephemeral environment for this PR (CPU only) labels Feb 15, 2026
@christian-byrne christian-byrne force-pushed the feat/tab-execution-state-indicator branch from 88494f7 to ecae58b Compare February 20, 2026 10:44
@christian-byrne
Copy link
Contributor Author

@coderabbitai review

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 20, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

- Add WorkflowExecutionResult type and lastExecutionResultByWorkflowId to executionStore
- Create useWorkflowExecutionState composable for tracking execution state
- Create WorkflowExecutionIndicator.vue with running/completed/error icons
- Integrate indicator into WorkflowTab.vue with 5s auto-clear for completed
- Add WorkflowExecutionBadge.vue for sidebar display
- Add i18n accessibility labels

Amp-Thread-ID: https://ampcode.com/threads/T-019c2557-1ba9-726a-8e93-978864992fd4
…ctor

Replace all leftover promptId-based identifiers with their jobId
equivalents after the upstream rename:
- promptIdToWorkflowId → jobIdToWorkflowId
- runningPromptIds → runningJobIds
- Use setWorkflowExecutionResult helper instead of inline Map logic
  in handleExecutionSuccess

Amp-Thread-ID: https://ampcode.com/threads/T-019c7a97-8947-767b-bbb7-185ccb27a17f
The upstream refactor renamed storePrompt → storeJob and
nodeProgressStatesByPrompt → nodeProgressStatesByJob.

Amp-Thread-ID: https://ampcode.com/threads/T-019c7a97-8947-767b-bbb7-185ccb27a17f
Add items-center to the workflow tab flex container so the execution
state icons are vertically centered with the tab label text.

Amp-Thread-ID: https://ampcode.com/threads/T-019c7a97-8947-767b-bbb7-185ccb27a17f
The batchResults Map already deduplicates by workflowId. The
seenWorkflows Set served the same purpose and can be removed.

Amp-Thread-ID: https://ampcode.com/threads/T-019c7a97-8947-767b-bbb7-185ccb27a17f
Align the type and all helpers with the upstream promptId → jobId
rename for consistency.

Amp-Thread-ID: https://ampcode.com/threads/T-019c7a97-8947-767b-bbb7-185ccb27a17f
When the most recent history entry for a workflow is cancelled (or
other non-terminal status), clear the previous completed/error
indicator instead of leaving it stale.

Addresses CodeRabbit review feedback.

Amp-Thread-ID: https://ampcode.com/threads/T-019c7a97-8947-767b-bbb7-185ccb27a17f
- Fix Map.set() reactivity for jobIdToWorkflowId by using immutable
  pattern (new Map) instead of in-place mutation
- Stop exporting lastExecutionResultByWorkflowId; add
  getWorkflowExecutionResult() getter to minimize public API surface
- Update tests to use public API (setWorkflowExecutionResultByWorkflowId)
  instead of directly writing to internal state

Amp-Thread-ID: https://ampcode.com/threads/T-019c7daf-994a-76e5-bbac-aa5e849899ac
@christian-byrne christian-byrne force-pushed the feat/tab-execution-state-indicator branch from 8f663dc to 9fe7f7e Compare February 21, 2026 05:21
@christian-byrne christian-byrne marked this pull request as ready for review February 21, 2026 05:21
@dosubot
Copy link

dosubot bot commented Feb 21, 2026

Related Documentation

Checked 0 published document(s) in 1 knowledge base(s). No updates required.

How did I do? Any feedback?  Join Discord

@christian-byrne christian-byrne added preview-gpu Creates a preview ephemeral environment for this PR (GPU available) and removed preview-gpu Creates a preview ephemeral environment for this PR (GPU available) labels Feb 21, 2026
…dicators

When duplicating a workflow, the cloned state retained the original's id,
causing execution state indicators to appear on the duplicate instead of
only on the original. By deleting state.id before loading, _configureBase()
generates a fresh UUID for the duplicate.

Amp-Thread-ID: https://ampcode.com/threads/T-019c837b-e368-77a9-98b2-293a462d8df6
@dosubot dosubot bot added size:XL This PR changes 500-999 lines, ignoring generated files. and removed size:L This PR changes 100-499 lines, ignoring generated files. labels Feb 22, 2026
christian-byrne and others added 3 commits February 21, 2026 20:36
- Keep WorkflowExecutionResult/WorkflowExecutionState types (this PR)
- Drop local subgraph helpers (moved to graphTraversalUtil on main)
- Drop stale error overlay re-exports (now in executionErrorStore)

Amp-Thread-ID: https://ampcode.com/threads/T-019c837b-e368-77a9-98b2-293a462d8df6
Keep WorkflowExecutionIndicator in ContextMenu-wrapped WorkflowTab,
keep both workflowExecution and essentials/builderToolbar i18n entries,
keep both execution state and missing node type tests.

Amp-Thread-ID: https://ampcode.com/threads/T-019c9cf4-bad6-7159-aede-17d16949916c
@github-actions
Copy link

⚡ Performance Report

Metric Baseline PR Δ
canvas-idle: style recalcs 126 123 -2% ⚪
canvas-idle: layouts 1 0 -100% 🟢
canvas-idle: task duration 489ms 385ms -21% 🟢
canvas-mouse-sweep: style recalcs 184 179 -3% ⚪
canvas-mouse-sweep: layouts 13 12 -8% ⚪
canvas-mouse-sweep: task duration 1035ms 862ms -17% 🟢
dom-widget-clipping: style recalcs 42 45 +7% ⚪
dom-widget-clipping: layouts 0 0 +0% ⚪
dom-widget-clipping: task duration 362ms 376ms +4% ⚪
Raw data
{
  "timestamp": "2026-02-27T02:54:59.135Z",
  "gitSha": "82e631e42bd69c94a63fcf8c769dc00e28e33a19",
  "branch": "feat/tab-execution-state-indicator",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2026.065999999986,
      "styleRecalcs": 123,
      "styleRecalcDurationMs": 19.290000000000003,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 384.556,
      "heapDeltaBytes": -3734536
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1932.3200000000043,
      "styleRecalcs": 179,
      "styleRecalcDurationMs": 52.343,
      "layouts": 12,
      "layoutDurationMs": 3.6300000000000003,
      "taskDurationMs": 861.8789999999999,
      "heapDeltaBytes": -3893144
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 599.5259999999973,
      "styleRecalcs": 45,
      "styleRecalcDurationMs": 13.718,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 375.97099999999995,
      "heapDeltaBytes": 7708436
    }
  ]
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:ui General user interface and experience improvements area:workflows preview-gpu Creates a preview ephemeral environment for this PR (GPU available) size:XL This PR changes 500-999 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants