5113 Commits

Author SHA1 Message Date
Christian Byrne
8549e17c37 [backport rh-test]: fix template query param stripped during login views (#6711)
Backport of #6677 to rh-test branch.

## Changes
- Adds `preservedQueryTracker` to preserve template/source query params
during login/signup flows
- Resolves merge conflicts by keeping rh-test routing structure while
adding the fix

## Conflict Resolution
Kept rh-test branch structure:
- Import path: `./onboardingCloudRoutes` (not nested path)
- `PUBLIC_ROUTE_NAMES` and `isPublicRoute` at top level with
`/cloud/code` check
- Existing auth guard logic intact

Added from PR #6677:
- `installPreservedQueryTracker` with template/source keys
- New navigation utility files

## Testing
 Typecheck passes
 All new tests pass (20/20)

Fixes issue where template query params were being stripped during login
flows.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6711-Backport-6677-fix-template-query-param-stripped-during-login-views-2ac6d73d36508115ad5fe2776fd93c7c)
by [Unito](https://www.unito.io)
2025-11-15 14:37:19 -07:00
Comfy Org PR Bot
434b53236b [backport rh-test] Safer restoration of widgets_values on subgraph nodes (#6686)
Backport of #6015 to `rh-test`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6686-backport-rh-test-Safer-restoration-of-widgets_values-on-subgraph-nodes-2aa6d73d365081b596f1f434d0da6d2b)
by [Unito](https://www.unito.io)

Co-authored-by: AustinMroz <austin@comfy.org>
2025-11-13 16:19:09 -07:00
Comfy Org PR Bot
5bd2a098e2 [backport rh-test] cloud: fix credits tooltips (#6658)
Backport of #6655 to `rh-test`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6658-backport-rh-test-cloud-fix-credits-tooltips-2a96d73d365081f6aa28ef959cada111)
by [Unito](https://www.unito.io)

Co-authored-by: Christian Byrne <cbyrne@comfy.org>
2025-11-11 18:34:21 -07:00
Comfy Org PR Bot
299ddbf3c0 [backport rh-test] fix: improve template URL loading UX and prevent re-triggering (#6654)
Backport of #6593 to `rh-test`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6654-backport-rh-test-fix-improve-template-URL-loading-UX-and-prevent-re-triggering-2a86d73d36508163834fdea17353ed37)
by [Unito](https://www.unito.io)

Co-authored-by: Christian Byrne <cbyrne@comfy.org>
Co-authored-by: Christian Byrne <c.byrne@comfy.org>
2025-11-11 16:17:56 -07:00
Comfy Org PR Bot
dd1eff2344 [backport rh-test] increase tracking heartbeat interval from 30sec to 5min (#6632)
Backport of #6631 to `rh-test`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6632-backport-rh-test-increase-tracking-heartbeat-interval-from-30sec-to-5min-2a46d73d3650812cb1cfc58d0797a9d9)
by [Unito](https://www.unito.io)

Co-authored-by: Christian Byrne <cbyrne@comfy.org>
2025-11-07 15:06:05 -07:00
Comfy Org PR Bot
0303d9077f [backport rh-test] fix: Handle vite:preloadError for graceful deployment asset updates (#6616)
Backport of #6609 to `rh-test`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6616-backport-rh-test-fix-Handle-vite-preloadError-for-graceful-deployment-asset-updates-2a36d73d365081ba813fca8d72492cac)
by [Unito](https://www.unito.io)

Co-authored-by: Jin Yi <jin12cc@gmail.com>
2025-11-06 23:15:46 -07:00
Comfy Org PR Bot
be942fb564 [backport rh-test] Fix cloud routing issues caused by incorrect api_base calculation (#6578)
Backport of #6572 to `rh-test`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6578-backport-rh-test-Fix-cloud-routing-issues-caused-by-incorrect-api_base-calculation-2a16d73d36508157a3edfca38af1cf03)
by [Unito](https://www.unito.io)

Co-authored-by: Jin Yi <jin12cc@gmail.com>
2025-11-05 01:39:03 -07:00
Comfy Org PR Bot
6f9bef3c5c [backport rh-test] fix(AssetCard): use tooltip instead of title for overflow text (#6558)
Backport of #6556 to `rh-test`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6558-backport-rh-test-fix-AssetCard-use-tooltip-instead-of-title-for-overflow-text-2a06d73d365081bd8e12dea668538935)
by [Unito](https://www.unito.io)

Co-authored-by: Arjan Singh <1598641+arjansingh@users.noreply.github.com>
2025-11-05 01:37:10 -07:00
Christian Byrne
bdf94bdf7e fix: keep topbar badges in main topbar regardless of workflow tabs position (#6592)
## Summary

Fixes incorrect badge placement from PR #6515. Badges should remain in
the main topbar row at all times, not move to the second row with
workflow tabs.

## Problem

PR #6515 added `TopbarBadges` to `SecondRowWorkflowTabs.vue`, causing
badges to appear in the second row when workflow tabs position was set
to `'Topbar (2nd-row)'`.

The original issue was that badges weren't visible when tabs were in
second-row mode because they were conditionally rendered only when
`workflowTabsPosition === 'Topbar'`.

## Changes

- Remove `TopbarBadges` from `SecondRowWorkflowTabs.vue` (badges should
never be in second row)
- Move `TopbarBadges` from conditional workflow tabs row to main topbar
in `TopMenubar.vue`
- Badges now always display in main topbar regardless of workflow tabs
position

## Testing

- Badges visible in main topbar when `workflowTabsPosition === 'Topbar'`
- Badges visible in main topbar when `workflowTabsPosition === 'Topbar
(2nd-row)'`
- Workflow tabs correctly move to second row without badges

Fixes issue introduced in #6515
2025-11-04 23:34:38 -07:00
Benjamin Lu
a83b376430 Backport telemetry: settings + UI tracking (#6504, #6511) and dialog import refactor (#6567)
Backports the combined changes from the following PRs into `rh-test`:

- #6504 — Settings telemetry (track `SETTING_CHANGED` on successful
update)
- #6511 — UI telemetry (actionbar drag handle, run button
choices/multi‑batch submit, breadcrumb item/root selection)

Key points
- Settings telemetry added via `SettingItem.vue` after successful
setting updates and wired to `TelemetryEvents.SETTING_CHANGED`.
- UI telemetry wired for run/queue actions and breadcrumbs to match
upstream behavior.

Divergences from the source PRs
- Removed `input_type`, `category`, and `sub_category` from
`SettingChangedMetadata` to keep the event shape focused and consistent
with downstream consumers.
- Replaced lazy telemetry import in `dialogService` error dialog
`onClose` handlers with a top‑level `useTelemetry()` import for clarity
and to avoid unnecessary dynamic imports.
- Kept a few additional telemetry events already present in this branch
(error dialog actions, graph/sidebar/template interactions). Happy to
trim these for a strict backport if desired.

Validation
- Ran `pnpm lint:fix && pnpm typecheck` successfully locally.

References
- Upstream PRs: https://github.com/Comfy-Org/ComfyUI_frontend/pull/6504,
https://github.com/Comfy-Org/ComfyUI_frontend/pull/6511
- Branch: `backport-6511-6504-to-rh-test`

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6567-Backport-telemetry-settings-UI-tracking-6504-6511-and-dialog-import-refactor-2a16d73d365081ce80a0f973c4483653)
by [Unito](https://www.unito.io)
2025-11-03 20:49:56 -07:00
Comfy Org PR Bot
657eadbe7e [backport rh-test] load template workflow via URL query param (#6553)
Backport of #6546 to `rh-test`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6553-backport-rh-test-load-template-workflow-via-URL-query-param-2a06d73d36508134b560dadeb00a4510)
by [Unito](https://www.unito.io)

Co-authored-by: Christian Byrne <cbyrne@comfy.org>
Co-authored-by: Christian Byrne <c.byrne@comfy.org>
2025-11-02 21:29:24 -08:00
Christian Byrne
56412a4076 [Backport to rh-test] fix(telemetry): remove redundant run tracking; keep click analytics + single execution event (#6552)
## Summary
Manual backport of #6518 to the `rh-test` branch.

Deduplicates workflow run telemetry and keeps a single source of truth
for execution while retaining click analytics and attributing initiator
source.

- Keep execution tracking in one place via `trackWorkflowExecution()`
- Keep click analytics via `trackRunButton(...)`
- Attribute initiator with `trigger_source` = 'button' | 'keybinding' |
'legacy_ui'
- Remove pre-tracking from keybindings to avoid double/triple counting
- Update legacy UI buttons to emit both click + execution events

## Backport Notes
This backport required manual conflict resolution in:
- `src/components/actionbar/ComfyRunButton/ComfyQueueButton.vue` - Added
batchCount tracking and trigger_source metadata
- `src/composables/useCoreCommands.ts` - Added error handling and
execution tracking
- `src/platform/telemetry/providers/cloud/MixpanelTelemetryProvider.ts`
- Updated trackRunButton signature with trigger_source support

Additionally added:
- `trackUiButtonClicked` method to TelemetryProvider interface
- `UiButtonClickMetadata` type definition
- `UI_BUTTON_CLICKED` event constant

All conflicts resolved intelligently to maintain the intent of the
original PR while adapting to the rh-test branch codebase.

## Original PR
- Original PR: #6518  
- Original commit: 6fe88dba54

## Testing
-  Typecheck passed
-  Pre-commit hooks passed (lint, format)
-  All conflicts resolved

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6552-Backport-to-rh-test-fix-telemetry-remove-redundant-run-tracking-keep-click-analytics-2a06d73d365081f78e4ad46a16be69f1)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Christian Byrne <c.byrne@comfy.org>
Co-authored-by: Alexander Brown <drjkl@comfy.org>
Co-authored-by: Benjamin Lu <benjaminlu1107@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Christian Byrne <chrbyrne96@gmail.com>
2025-11-02 20:49:02 -08:00
Comfy Org PR Bot
044b675138 [backport rh-test] fix: Use environment-specific log API endpoints for Cloud and OSS (#6544)
Backport of #6539 to `rh-test`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6544-backport-rh-test-fix-Use-environment-specific-log-API-endpoints-for-Cloud-and-OSS-29f6d73d365081dc9dd7d95805242774)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Jin Yi <jin12cc@gmail.com>
Co-authored-by: Christian Byrne <cbyrne@comfy.org>
2025-11-02 13:43:23 -08:00
Comfy Org PR Bot
947b66e60c [backport rh-test] Update diffusion_models display to 'Diffusion' in asset browser (#6534)
Backport of #6533 to `rh-test`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6534-backport-rh-test-Update-diffusion_models-display-to-Diffusion-in-asset-browser-29f6d73d36508110915ddd68923a05c4)
by [Unito](https://www.unito.io)

Co-authored-by: Christian Byrne <cbyrne@comfy.org>
Co-authored-by: Christian Byrne <chrbyrne96@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
2025-11-02 08:43:14 -08:00
Benjamin Lu
48173615aa feat(telemetry): track API credit top-up success via audit events (#6500) (#6520)
Manual backport of
https://github.com/Comfy-Org/ComfyUI_frontend/pull/6500, nothing changed
other than imports and some types

---

Summary
- Add TelemetryEvents.API_CREDIT_TOPUP_SUCCEEDED and provider method
trackApiCreditTopupSucceeded
- Introduce topupTrackerStore to persist pending top-ups per user
(localStorage) and reconcile against recent audit logs
- Hook purchase flow to start tracking before opening Stripe checkout
- Reconcile after fetching audit events (UsageLogsTable) and after
fetchBalance, then emit telemetry, refresh balance, and clear pending
- Minor refactor in customerEventsService to return awaited result

Implementation details
- Matching strategy:
  - Event type: credit_added
  - Time window: createdAt between top-up start time and +24h
  - Amount: if known, e.params.amount must equal expected cents
- Cross-tab/user changes: synchronize via storage event and userId
watcher

Limitations / Follow-up
- Reconciliation fetches only page 1 (limit 10) of events; in
high-volume cases, a recent credit_added could fall outside the first
page
- The window and pagination issue will be "resolved by a followup PR to
core and cloud"

Files touched
- src/stores/topupTrackerStore.ts (new)
- src/components/dialog/content/setting/UsageLogsTable.vue
- src/composables/auth/useFirebaseAuthActions.ts
- src/platform/telemetry/providers/cloud/MixpanelTelemetryProvider.ts
- src/platform/telemetry/types.ts
- src/services/customerEventsService.ts



page](https://www.notion.so/PR-6500-feat-telemetry-track-API-credit-top-up-success-via-audit-events-29e6d73d365081169941efae70cf71fe)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Christian Byrne <chrbyrne96@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6520-feat-telemetry-track-API-credit-top-up-success-via-audit-events-6500-29e6d73d365081a18717ca29546ea050)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Christian Byrne <chrbyrne96@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
2025-11-01 23:10:18 -07:00
Comfy Org PR Bot
d447b5df93 [backport rh-test] fix: Change h-screen to h-svh in BaseViewTemplate (#6532)
Backport of #6529 to `rh-test`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6532-backport-rh-test-fix-Change-h-screen-to-h-svh-in-BaseViewTemplate-29f6d73d365081d5a116d237f15c840e)
by [Unito](https://www.unito.io)

Co-authored-by: Jin Yi <jin12cc@gmail.com>
2025-11-01 22:52:45 -07:00
Arjan Singh
9182b1a85a [rh-test] Telemetry Backports (#6522)
## Summary

Resolves issues with #6503

## Changes

- Backport #6400
- Fix circular dependency issue
- Backport #6505

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6522-rh-test-Telemetry-Backports-29e6d73d365081258d10c08299bde69b)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Christian Byrne <cbyrne@comfy.org>
Co-authored-by: Christian Byrne <chrbyrne96@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
2025-11-01 16:18:48 -07:00
Christian Byrne
dcda95d0ef fix: correct subscription credits test values and improve test stability (#6519)
## Summary
- Fix `useSubscriptionCredits` test to use cents (500) instead of
incorrect micros (5000000)
- Despite API field names containing `micros`, the server actually
returns cents (1/100)
- Add clarifying comment to `usdToMicros()` about the cents vs micros
confusion
- Increase performance test threshold from 10ms to 50ms to reduce
flakiness

## Context
The API response fields are named `amount_micros`,
`cloud_credit_balance_micros`, etc., but the server actually sends
**cents** (1/100 of a dollar), not true micros (1/1,000,000).

Verified with real API response:
```json
{
  "amount_micros": 2725.927956,  // = $27.26 when divided by 100
  "currency": "usd"
}
```

## Changes
-
`tests-ui/tests/platform/cloud/subscription/composables/useSubscriptionCredits.test.ts`:
Update test values from micros to cents
- `packages/shared-frontend-utils/src/formatUtil.ts`: Add clarifying
documentation
- `tests-ui/tests/store/modelToNodeStore.test.ts`: Increase performance
test threshold to reduce flakiness

## Test Plan
-  All unit tests pass (3202 passed, 206 skipped)
-  Linting passes
-  Formatting passes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-01 12:45:29 -07:00
Benjamin Lu
a8987396ae backport(pr-6499): unified app:run_triggered event onto rh-test (#6501)
Backport of upstream PR #6499 onto `rh-test`.

Summary
- Adds unified telemetry event `app:run_triggered` with `{
trigger_source: 'button' | 'keybinding' | 'menu' }`.
- Instruments all run initiation paths:
- Queue button emits `run_triggered` (source `button`) and still emits
`run_button_click` for UI-only tracking.
  - Keybindings emit `run_triggered` (source `keybinding`).
- Menus (menubar + legacy menu buttons) emit `run_triggered` (source
`menu`).
- Mixpanel provider implements `trackRunTriggered`.
- No changes to `execution_start` logic.

Files changed (matching PR #6499 exactly)
- src/components/actionbar/ComfyRunButton/ComfyQueueButton.vue
- src/platform/telemetry/providers/cloud/MixpanelTelemetryProvider.ts
- src/platform/telemetry/types.ts
- src/scripts/ui.ts
- src/services/keybindingService.ts
- src/stores/menuItemStore.ts

Notes
- Strictly limited to PR #6499; does NOT include unrelated changes
(e.g., PR #6476 `workflow_opened`).
- Local pre-push hook (knip) flagged an exported type as unused; pushed
with `--no-verify` to avoid adding non-PR changes. Lint and typecheck
pass locally (`pnpm lint:fix && pnpm typecheck`).

Upstream reference:
https://github.com/Comfy-Org/ComfyUI_frontend/pull/6499

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6501-backport-pr-6499-unified-app-run_triggered-event-onto-rh-test-29e6d73d36508122ab3df5296e544b03)
by [Unito](https://www.unito.io)

---------

Co-authored-by: GitHub Action <action@github.com>
2025-11-01 11:43:10 -07:00
Christian Byrne
4658b426a2 fix: hide node name badge on cloud builds (#6517)
## Summary

Hides the node name badge in queue task items on cloud builds since
workflow data is not available.

## Problem

On cloud distribution, `extra_data.extra_pnginfo.workflow` is omitted
from history task items to reduce memory usage. The node name badge
relies on this workflow data to:
1. Get the `nodeId` from the task output
2. Find the matching node in `workflow.nodes[]`
3. Display `node.type (#node.id)` (e.g., "SaveImage (#8)")

Without workflow data, the badge would be empty or show undefined
values.

## Changes

- Added `isCloud` check to the node badge `v-if` condition
- Badge now only renders when `!isCloud && isFlatTask && task.isHistory`
- Imported `isCloud` from `@/platform/distribution/types`

## Impact

- **Cloud builds**: Node name badge hidden in flat list view (workflow
data unavailable)
- **OSS/localhost builds**: Node name badge continues to show normally
(workflow data available)

## Note

This is an **rh-test only** change since cloud builds use this branch.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6517-fix-hide-node-name-badge-on-cloud-builds-29e6d73d36508163818acb07be90cf74)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Christian Byrne <c.byrne@comfy.org>
Co-authored-by: GitHub Action <action@github.com>
2025-11-01 11:13:31 -07:00
Comfy Org PR Bot
8df48f912d [backport rh-test] fix: set transparent border for gradient subscribe button (#6512)
Backport of #6510 to `rh-test`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6512-backport-rh-test-fix-set-transparent-border-for-gradient-subscribe-button-29e6d73d36508139b5ede16bc23c644c)
by [Unito](https://www.unito.io)

Co-authored-by: Christian Byrne <cbyrne@comfy.org>
Co-authored-by: Christian Byrne <chrbyrne96@gmail.com>
2025-11-01 03:32:58 -07:00
Christian Byrne
5303b3c70f fix: add cloud badges and server health alerts to second-row workflow tabs (#6515)
## Summary

Fixes missing cloud badges and server health alerts when workflow tabs
are in the second-row position.

## Problem

Badges were only visible when `Comfy.Workflow.WorkflowTabsPosition` was
set to `'Topbar'`, but not when set to `'Topbar (2nd-row)'` which is the
**default for screens < 1536px wide** on rh-test.

The `SecondRowWorkflowTabs.vue` component only rendered `<WorkflowTabs
/>` but was missing `<TopbarBadges />`.

## Changes

- Added `<TopbarBadges />` component to `SecondRowWorkflowTabs.vue`
- Updated container to use flex layout to match other topbar badge
implementations
- Badges now display in both 'Topbar' and 'Topbar (2nd-row)' positions

## Testing

- Cloud badges should now be visible on screens < 1536px wide (default
setting)
- Server health alerts from remote config should display properly in
second-row tabs

## Note

This is an **rh-test only** issue. The main branch removed the 'Topbar
(2nd-row)' option in the Floating Menus PR (#5980).

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6515-fix-add-cloud-badges-and-server-health-alerts-to-second-row-workflow-tabs-29e6d73d365081c4a4defaf97d2e789e)
by [Unito](https://www.unito.io)

Co-authored-by: Christian Byrne <c.byrne@comfy.org>
2025-11-01 03:30:02 -07:00
Comfy Org PR Bot
31d4bcbd4e [backport rh-test] fix: Display appropriate title for unsubscribed state (#6513)
Backport of #6396 to `rh-test`

Automatically created by backport workflow.

Co-authored-by: Christian Byrne <cbyrne@comfy.org>
Co-authored-by: Claude <noreply@anthropic.com>
2025-11-01 02:45:14 -07:00
Benjamin Lu
52534a562c Backport: telemetry API credit + node metrics; fix onboarding payload typing (#6492)
This backport adds the new telemetry:

- Subscription/credit events:
  - MONTHLY_SUBSCRIPTION_SUCCEEDED
  - ADD_API_CREDIT_BUTTON_CLICKED
  - API_CREDIT_TOPUP_BUTTON_PURCHASE_CLICKED(amount)

- Run/Execution context now includes node composition metrics:
  - total_node_count, subgraph_count, has_api_nodes, api_node_names
  - ExecutionContext also includes custom_node_count and api_node_count

Fixes type errors during onboarding by including required fields in
minimal payloads for:
- RUN_BUTTON_CLICKED (uses zeroed node metrics)
- EXECUTION_START (uses zeroed node metrics)

Implementation notes:
- Node metrics computed via collectAllNodes + nodeDefStore; safe
defaults on failure.
- Onboarding minimal payloads include zeroed metrics to satisfy new
typings.

This is a manual backport of
https://github.com/Comfy-Org/ComfyUI_frontend/pull/6468

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6492-Backport-telemetry-API-credit-node-metrics-fix-onboarding-payload-typing-29d6d73d365081a58d96c47fc069daa6)
by [Unito](https://www.unito.io)
2025-11-01 02:40:34 -07:00
Benjamin Lu
4412ae4bff Backport: telemetry workflow_opened with open_source and missing node metrics (#6476) (#6497)
Backport of #6476 onto rh-test.

- Adds telemetry events for `workflow_opened` and `workflow_imported`
including `open_source` and missing node metrics.
- Resolves merge conflict in `src/scripts/app.ts` by keeping the
telemetry block after `afterConfigureGraph`.
- Includes template load and file input changes to pass `openSource`.

Files changed:
- src/platform/telemetry/providers/cloud/MixpanelTelemetryProvider.ts
- src/platform/telemetry/types.ts
- src/platform/workflow/templates/composables/useTemplateWorkflows.ts
- src/scripts/app.ts
- src/scripts/ui.ts

Validated with `pnpm lint:fix` and `pnpm typecheck`.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6497-Backport-telemetry-workflow_opened-with-open_source-and-missing-node-metrics-6476-29e6d73d365081238b8cef1d1a44287f)
by [Unito](https://www.unito.io)

Co-authored-by: bymyself <cbyrne@comfy.org>
2025-11-01 01:38:42 -07:00
Comfy Org PR Bot
c5acb39c30 [backport rh-test] add api node link (#6509)
Backport of #6494 to `rh-test`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6509-backport-rh-test-add-api-node-link-29e6d73d36508108b7adca718c7878a8)
by [Unito](https://www.unito.io)

Co-authored-by: Terry Jia <terryjia88@gmail.com>
2025-11-01 01:17:48 -07:00
Comfy Org PR Bot
c23bba2ce2 [backport rh-test] chore(pnpm): allow building @sentry/cli for sourcemap uploads (#6508)
Backport of #6491 to `rh-test`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6508-backport-rh-test-chore-pnpm-allow-building-sentry-cli-for-sourcemap-uploads-29e6d73d36508140b3e5f6c8de57662f)
by [Unito](https://www.unito.io)

Co-authored-by: Benjamin Lu <benceruleanlu@proton.me>
2025-11-01 01:17:32 -07:00
Johnpaul Chiwetelu
556132d3ff Fix unit tests in rh test (#6479)
This pull request makes a minor adjustment to the test setup for
`useSubscriptionCredits`. The change ensures that the actual Pinia store
implementation is used for `firebaseAuthStore` rather than a mocked
version, which can help improve the reliability and accuracy of the
tests.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6479-Fix-unit-tests-in-rh-test-29d6d73d365081be8a54c260b2ce10fe)
by [Unito](https://www.unito.io)
2025-11-01 00:43:15 -07:00
Jin Yi
2383a38aa0 fix: remove unused X-Reconnecting header check (#6495)
## Summary

Remove dead code that checks for X-Reconnecting header which is never
actually set anywhere in the codebase.

## Changes

- Remove X-Reconnecting header check in fetchApi() method  
- Simplify getAuthHeader() call to not pass unused parameter

## Context

The X-Reconnecting header was being checked but never set, making this
code non-functional. This cleanup removes the confusion and simplifies
the authentication flow.

## Test Plan

- Code builds without errors
- TypeScript validation passes  
- Linting passes

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6495-fix-remove-unused-X-Reconnecting-header-check-29e6d73d365081df88faeb46b1789a83)
by [Unito](https://www.unito.io)
2025-10-31 18:19:00 -07:00
Comfy Org PR Bot
86346f97a8 [backport rh-test] update user profile dropdown (#6490)
Backport of #6475 to `rh-test`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6490-backport-rh-test-update-user-profile-dropdown-29d6d73d3650817f842deac125e3cbd9)
by [Unito](https://www.unito.io)

Co-authored-by: Terry Jia <terryjia88@gmail.com>
Co-authored-by: GitHub Action <action@github.com>
2025-10-31 17:57:49 -07:00
--list
7a7e1d58a2 feat: add telemetry to answer for user failed to find template (#6489)
## Summary

Adds mixpanel telemetry with goal of: "We currently only know when a
user opens a template workflow. But we also want to know if they failed
to find what they want"

Example mixpanel query:

```
app:template_library_closed
  WHERE template_selected = false AND time_spent_seconds >= 10
  ```

But can drill down further into what filters were selected etc to answer what they were looking for but couldn't find.

```
 1. Event: app:template_filter_changed
  2. Filter:
- Add formula: "Where user also triggered app:template_library_closed
with template_selected = false in same session"
  3. Breakdown by: search_query
  4. Sort by: Total Count (descending)

  Search Query           Failed Sessions
  -----------------------------------
  "flux video"             45 times
  "sdxl controlnet"     32 times
  "upscaler"               28 times
  (empty/just filter)   20 times
```

```
 Event: app:template_filter_changed
  WHERE filtered_count = 0
    AND user did app:template_library_closed
    with template_selected = false

  Breakdown by: search_query
  ```
  etc.

https://www.notion.so/comfy-org/Number-of-users-who-open-the-template-library-and-where-do-they-click-29b6d73d36508044a595c0fb653ca6dc?source=copy_link

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6489-feat-add-telemetry-to-answer-for-user-failed-to-find-template-29d6d73d365081cdad72fd7c6ada5dc7)
by [Unito](https://www.unito.io)
2025-10-31 16:43:19 -07:00
Jin Yi
6dbe00d47c fix: prevent logged-in users from accessing login page unless switching accounts (#6478)
## Summary
- Prevents logged-in users from viewing the login page unnecessarily  
- Adds explicit account switching flow with query parameter
- Fixes issue where logged-in users could see the login page when
directly navigating to `/cloud/login`

## Changes
1. Added `beforeEnter` guard to `cloud-login` route to check
authentication status
2. Redirect authenticated users to `cloud-user-check` (which handles
survey, waitlist, and main page routing)
3. Added `switchAccount` query parameter to allow intentional access to
login page for account switching
4. Updated CloudClaimInviteView and CloudWaitlistView to include the
`switchAccount` parameter when users click "Switch accounts"
5. Reverted UserCheckView to use `window.location.href = '/'` instead of
`router.replace('/')` to prevent infinite loading issue

## Context
The change in UserCheckView reverts to the original implementation
(`window.location.href = '/'`) because using `router.replace('/')`
caused an infinite loading issue. The direct window navigation avoids
the router's internal state issues and ensures a clean redirect to the
main application.

## Test plan
- [ ] Navigate to `/cloud/login` while logged in → Should redirect to
appropriate page
- [ ] Click "Switch accounts" from waitlist or invite views → Should
stay on login page
- [ ] Complete login flow → Should redirect properly based on user
status
- [ ] Verify no infinite loading occurs when redirecting to main app

🤖 Generated with [Claude Code](https://claude.ai/code)

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6478-fix-prevent-logged-in-users-from-accessing-login-page-unless-switching-accounts-29d6d73d3650815a9d98c11951425241)
by [Unito](https://www.unito.io)

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-01 06:52:24 +09:00
Christian Byrne
daa9aff1f3 [Backport] update subscription panel for new designs (#6397)
## Summary
Backport of PR #6378 to `rh-test` branch.

## Changes
- Extract credit calculations into useSubscriptionCredits composable
- Extract action handlers into useSubscriptionActions composable
- Add comprehensive component and unit tests
- Update subscription panel layout to match Figma design exactly
- Add proper design tokens for modal card surfaces
- Update terminology from "API Nodes" to "Partner Nodes"
- Make credit breakdown dynamic with real API data
- Add proper loading states and error handling
- Remove unused tailwindcss eslint dependencies

## Conflicts Resolved
- Resolved merge conflicts in `packages/design-system/src/css/style.css`
related to button surface CSS variables

## Test plan
- Existing tests pass
- New tests for subscription composables and components

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6397-Backport-update-subscription-panel-for-new-designs-29c6d73d3650812aaa12ff242fd5e078)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: Johnpaul Chiwetelu <49923152+Myestery@users.noreply.github.com>
2025-10-30 22:11:13 -07:00
Jin Yi
5fa4dcdc67 fix: force token refresh for session cookie creation (#6477)
## Summary
- Force token refresh when creating session cookies to prevent
authentication failures
- Fixes Sentry issue #6976234063 affecting 29 users

🤖 Generated with [Claude Code](https://claude.ai/code)

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6477-fix-force-token-refresh-for-session-cookie-creation-29d6d73d365081c394c1d8f672884fd8)
by [Unito](https://www.unito.io)

Co-authored-by: Claude <noreply@anthropic.com>
2025-10-30 22:10:46 -07:00
Jin Yi
61660a8128 fix: improve whitelist feature flag comments for clarity (#6457)
## Summary

This PR improves code comments to accurately describe the whitelist
feature flag implementation logic.

## Changes

- Updated comments in `router.ts` and `UserCheckView.vue` to clarify
that the feature flag is checked first before user status
- Removed unreachable comment after return statement in
`UserCheckView.vue`
- Comments now accurately reflect the actual code execution order

## Technical Details

The logic flow remains unchanged:
1. Check `require_whitelist` feature flag first (defaults to `true`)
2. If flag is `true` AND user status is not `'active'`, redirect to
waitlist
3. If flag is `false`, allow all users to proceed regardless of status

## Testing

No functional changes - only comment improvements for better code
maintainability.

🤖 Generated with [Claude Code](https://claude.ai/code)

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6457-fix-improve-whitelist-feature-flag-comments-for-clarity-29c6d73d365081cf8a59d662118f7243)
by [Unito](https://www.unito.io)

Co-authored-by: Claude <noreply@anthropic.com>
2025-10-31 11:50:50 +09:00
Jin Yi
b575a8d7a2 fix: prevent unwanted login redirects during WebSocket reconnection (#6410)
## 🐛 Problem

Users were experiencing the following issues during WebSocket
reconnection:

1. Automatic redirect to login page after "Reconnecting" toast message
appears
2. Automatic re-login after a few seconds, returning to the main
interface
3. This cycle repeats, severely degrading user experience

## 🔍 Root Cause Analysis

### 1. Router Guard Catching Too Many Errors
```typescript
// Problematic code
try {
  const { getUserCloudStatus, getSurveyCompletedStatus } = await import('@/api/auth')
  const userStatus = await getUserCloudStatus()
  // ...
} catch (error) {
  // All types of errors are caught here
  return next({ name: 'cloud-user-check' })
}
```

With dynamic import inside the try block, the following were all being
caught:
- Errors during `@/api/auth` module loading
- Runtime errors from the API singleton
- Actual API call errors

Everything was caught and redirected to `cloud-user-check`.

### 2. Full Page Reload in UserCheckView
```typescript
// Problematic code
window.location.href = '/'  // Full page reload!
```

This caused:
- Loss of SPA benefits
- Firebase Auth re-initialization → temporarily null user
- Router guard re-execution → potential for another redirect

##  Solution

### 1. router.ts: Move dynamic import outside try block
```typescript
// After fix
const { getUserCloudStatus, getSurveyCompletedStatus } = await import('@/api/auth')

try {
  // Only API calls inside try
  const userStatus = await getUserCloudStatus()
  // ...
} catch (error) {
  // Now only catches pure API call errors
  return next({ name: 'cloud-user-check' })
}
```

### 2. UserCheckView.vue: Use SPA routing
```typescript
// After fix
await router.replace('/')  // Use Vue Router instead of window.location.href
```

🤖 Generated with [Claude Code](https://claude.ai/code)

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6410-fix-prevent-unwanted-login-redirects-during-WebSocket-reconnection-29c6d73d3650818a8a1acbdcebd2f703)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: GitHub Action <action@github.com>
2025-10-31 11:16:22 +09:00
Comfy Org PR Bot
750a9d882a [backport rh-test] use shared composable for subscription (#6395)
Backport of #6390 to `rh-test`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6395-backport-rh-test-use-shared-composable-for-subscription-29c6d73d365081928afdf080703793e7)
by [Unito](https://www.unito.io)

Co-authored-by: Christian Byrne <cbyrne@comfy.org>
2025-10-30 12:56:50 -07:00
Arjan Singh
2febb24d6c [rh-test] ci: update lockfile 2025-10-30 12:34:50 -07:00
Arjan Singh
d42e38300d [rh-test] ci: update pnpm-lock file (#6465)
## Summary

Messed it up with last manual backport.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6465-rh-test-ci-update-pnpm-lock-file-29c6d73d365081209727f48fe67150ac)
by [Unito](https://www.unito.io)
2025-10-30 12:24:12 -07:00
Arjan Singh
20687c2945 [rh-test backport] ci: add sentryVitePlugin (#6394) (#6463)
Note: had to manually resolve conflicts on this one.

This will be used to upload source maps in configured environments.

Docs:
https://docs.sentry.io/platforms/javascript/sourcemaps/uploading/vite/



page](https://www.notion.so/PR-6394-ci-add-sentryVitePlugin-29c6d73d365081239f48f2fd261736d5)
by [Unito](https://www.unito.io)

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6463-rh-test-backport-ci-add-sentryVitePlugin-6394-29c6d73d365081d2b7cdce59a2c5529d)
by [Unito](https://www.unito.io)
2025-10-30 11:52:14 -07:00
Christian Byrne
b32a1e9ce8 [feat] add troubleshooting details to auth timeout view (#6380)
## Summary
- Enhances authentication timeout error page with actionable
troubleshooting information
- Adds collapsible technical error details for debugging
- Shows common causes: firewall blocks, VPN restrictions, browser
extensions, regional limitations
- Disables incompatible tailwindcss eslint plugin (Tailwind v4
compatibility issue)

## Changes
- Updated `CloudAuthTimeoutView.vue` with troubleshooting section and
collapsible technical details
- Pass error message from router to timeout view via route params
- Added i18n strings for new troubleshooting content
- Removed `eslint-plugin-tailwindcss` (incompatible with Tailwind
v4.1.12)
- Cleaned up unused knip entries

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6380-feat-add-troubleshooting-details-to-auth-timeout-view-29b6d73d365081fea4e3d46b804d3116)
by [Unito](https://www.unito.io)
2025-10-29 19:31:56 -07:00
Comfy Org PR Bot
94cb6bf294 [backport rh-test] refactor subscription composable (#6376)
Backport of #6365 to `rh-test`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6376-backport-rh-test-refactor-subscription-composable-29b6d73d365081d7b9d8fc583b914de4)
by [Unito](https://www.unito.io)

Co-authored-by: Christian Byrne <cbyrne@comfy.org>
2025-10-29 10:58:15 -07:00
Christian Byrne
379f27a001 fix: remove unnecessary route guard from subscription enforcement (#6377)
Removes the route guard logic from requireActiveSubscription that was
checking for /cloud/* paths. The logout fix already prevents stale
extension state by using full page navigation, making this route
checking unnecessary and overly complex.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6377-fix-remove-unnecessary-route-guard-from-subscription-enforcement-29b6d73d365081738620e9c1d4efe1b2)
by [Unito](https://www.unito.io)

---------

Co-authored-by: GitHub Action <action@github.com>
2025-10-29 09:46:22 -07:00
Christian Byrne
17ae4cbf53 Fix subscription dialog appearing during onboarding (#6367)
Fixes subscription dialog incorrectly appearing on cloud onboarding
pages (email verification, survey, waitlist). Root cause: logout uses
SPA routing leaving extensions with stale auth state. Solution: (1) use
full page navigation for logout to reset app state, (2) add defensive
route guard to skip subscription checks on /cloud/* paths. Prevents
subscription modal from showing during account switching and onboarding
flows.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6367-Fix-subscription-dialog-appearing-during-onboarding-29b6d73d3650818d88e0d59ade7de02e)
by [Unito](https://www.unito.io)
2025-10-29 08:45:21 -07:00
Christian Byrne
97949c61fb remove email verification temporarily (#6366)
## Summary

- Temporarily remove email verification. After susbcription gating was
enabled, this is less important
- Will re-add the logic back at a later time, defering requirement until
time to subscribe
- For time being, typo emails can be resolved through custom service
(https://support.comfy.org/hc/en-us/requests/new?tf_42243568391700=ccloud&tf_123456=X)
- Keep the route and redirect for deprecation. Not really needed since
the server falls back to root route anyway but generally good practice
and is more resistant to future changes + avoids a single extra routing
step in that scenario.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6366-remove-email-verification-temporarily-29b6d73d3650810095a4e7c4591b3327)
by [Unito](https://www.unito.io)
2025-10-29 00:23:48 -07:00
Comfy Org PR Bot
84ce6c183d [backport rh-test] add dynamic config field for requiring/not requiring whitelist (#6356)
Backport of #6355 to `rh-test`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6356-backport-rh-test-add-dynamic-config-field-for-requiring-not-requiring-whitelist-29b6d73d36508151bd9dc34a4d62bcf1)
by [Unito](https://www.unito.io)

Co-authored-by: Christian Byrne <cbyrne@comfy.org>
2025-10-28 20:16:20 -07:00
Comfy Org PR Bot
9adf0c179f [backport rh-test] update subscription dialog (#6351)
Backport of #6350 to `rh-test`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6351-backport-rh-test-update-subscription-dialog-29a6d73d365081f284f1f5a9127e2cb3)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Christian Byrne <cbyrne@comfy.org>
Co-authored-by: GitHub Action <action@github.com>
2025-10-28 20:16:10 -07:00
Comfy Org PR Bot
84189a208e [backport rh-test] subscription improve (#6347)
Backport of #6339 to `rh-test`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6347-backport-rh-test-subscription-improve-29a6d73d365081c695f6f9c764997be6)
by [Unito](https://www.unito.io)

Co-authored-by: Terry Jia <terryjia88@gmail.com>
Co-authored-by: bymyself <cbyrne@comfy.org>
2025-10-28 14:12:51 -07:00
Comfy Org PR Bot
3b38e4353a [backport rh-test] add title to asset names in model browser (#6345)
Backport of #6338 to `rh-test`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6345-backport-rh-test-add-title-to-asset-names-in-model-browser-29a6d73d36508116af70c360f1d2db41)
by [Unito](https://www.unito.io)

Co-authored-by: Christian Byrne <cbyrne@comfy.org>
2025-10-28 11:20:40 -07:00
Christian Byrne
5e972d8512 add TOS and privacy policy text on cloud login view (#6341)
## Summary

Adds these missing sentences that might have been dropped when bringing
this component over from main or during some refactoring.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-6341-add-TOS-and-privacy-policy-text-on-cloud-login-view-29a6d73d36508124b9dad689184a4ae3)
by [Unito](https://www.unito.io)
2025-10-27 21:14:29 -07:00