This commit integrates the previously recovered ComfyUI Manager functionality
with significant enhancements from PR #3367, including:
## Core Manager System Recovery
- **v2 API Integration**: All manager endpoints now use `/v2/manager/queue/*`
- **Task Queue System**: Complete client-side task queuing with WebSocket status
- **Service Layer**: Comprehensive manager service with all CRUD operations
- **Store Integration**: Full manager store with progress dialog support
## New Features & Enhancements
- **Reactive Feature Flags**: Foundation for dynamic feature toggling
- **Enhanced UI Components**: Improved loading states, progress tracking
- **Package Management**: Install, update, enable/disable functionality
- **Version Selection**: Support for latest/nightly package versions
- **Progress Dialogs**: Real-time installation progress with logs
- **Missing Node Detection**: Automated detection and installation prompts
## Technical Improvements
- **TypeScript Definitions**: Complete type system for manager operations
- **WebSocket Integration**: Real-time status updates via `cm-queue-status`
- **Error Handling**: Comprehensive error handling with user feedback
- **Testing**: Updated test suites for new functionality
- **Documentation**: Complete backup documentation for recovery process
## API Endpoints Restored
- `manager/queue/start` - Start task queue
- `manager/queue/status` - Get queue status
- `manager/queue/task` - Queue individual tasks
- `manager/queue/install` - Install packages
- `manager/queue/update` - Update packages
- `manager/queue/disable` - Disable packages
## Breaking Changes
- Manager API base URL changed to `/v2/`
- Updated TypeScript interfaces for manager operations
- New WebSocket message format for queue status
This restores all critical manager functionality lost during the previous
rebase while integrating the latest enhancements and maintaining compatibility
with the current main branch.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Add support for custom iconify using tailwind plugin
- Register svgs from custom icons folder
- Update existing custom icons to remove padding
- Swap component icons for classes in sidebar tabs
- Update browse templates in menu to use custom icon
* Add basic check for custom SVG icons
* Remove unused iconify packages
* [test] regenerate browser test baselines after flaky PR #5158
Trigger fresh baseline generation for browser tests. The animated webp
screenshot baseline was corrupted by flaky results and needs regeneration.
* Update test expectations [skip ci]
---------
Co-authored-by: github-actions <github-actions@github.com>
* [fix] update selection overlay tests after canvas migration
Update browser tests to work with canvas-based selection overlay introduced in PR #5158.
Replaces DOM-based .selection-overlay-container checks with .selection-toolbox visibility
and converts border visibility tests to canvas screenshot comparisons.
Fixes#5158
* [chore] remove unused file flagged by knip
* [fix] adjust test expectations for canvas-based positioning
- Skip animated webp test unrelated to selection overlay changes
- Update toolbox position expectations to match canvas-based coordinates
- Canvas positioning uses different coordinate system than DOM overlay
* [fix] improve positioning test flexibility and revert webp skip
- Make toolbox position test more flexible for canvas-based coordinates
- Revert animated webp test skip as requested in review
- Canvas positioning varies more than DOM, use reasonable bounds instead
* Update test expectations [skip ci]
* [refactor] address review comments - use fixture locators
- Add selectionToolbox locator to ComfyPage fixture as requested
- Replace .isVisible() === false with .not.toBeVisible() pattern
- Update all selection toolbox locators to use fixture instead of inline selectors
- Improves maintainability and follows established patterns
* [refactor] use fixture canvas locator for screenshots
Replace inline canvas locators with comfyPage.canvas fixture property
for consistency and maintainability as suggested in review.
---------
Co-authored-by: github-actions <github-actions@github.com>
* fix: layout perf issue
* feat: skip a whole host of transform issues created by the SelectionOverlay and instead allowing the canvas to render the overlay and then injecting props to the SelecitonToolbox itself
* refactor: removed unused files/functionality
* refactor: removed unused types
* fix: z index issue
* fix: PR feedback
* fix: PR feedback and more perf improvements
* Update test expectations [skip ci]
---------
Co-authored-by: github-actions <github-actions@github.com>
* [feat] Add formatKeySequence function to format keybindings for commands
* [feat] Add lock and unlock canvas commands with keybindings and update localization
* feat: Implement canvas scale synchronization and zoom level adjustment
* feat: Enhance GraphCanvasMenu with zoom controls and improved button functionality
* feat: Refactor MiniMap component layout and remove unused bottomPanelStore
* feat: Update zoom control shortcuts to use formatted key sequences
* feat: Add tests for ZoomControlsModal and enhance GraphCanvasMenu tests
* Update locales [skip ci]
* Fix browser tests
* ui: align minimap properly
* Update locales [skip ci]
* feat: focus zoom input when zoom modal loads
* style: improve styling of zoom controls and add focus effect
* fix styling and tests
* styling: add divider to graph canvas menu
* styling: position minimap properly
* styling: add close button for minimap
* styling: add horizontal divider to minimap
* styling: update minimap toggle button text and remove old styles
* Update locales [skip ci]
* Update locales [skip ci]
* feat: disable canvas menu in viewport settings after zoom adjustments
* Update test expectations [skip ci]
* fix: update canvas read-only property access to use state object
* Update locales [skip ci]
* fix: adjust button group and minimap positioning
* feat: enhance zoom controls and adjust minimap positioning per PR comments
* feat: implement zoom controls composable
* feat: add timeout delays for headless tests
* fix: update zoom input validation range in applyZoom function
* [refactor] Update positioning and styles for GraphCanvasMenu, MiniMap, and ZoomControlsModal components
* [refactor] Adjust z-index and positioning for GraphCanvasMenu, MiniMap, and ZoomControlsModal components
* [style] Adjust margin for minimap button styles in GraphCanvasMenu component
* [refactor] minimap should show on focus mode
* [refactor] Update LiteGraphCanvasSplitterOverlay to conditionally render side and bottom panels based on focus mode
* [style] Adjust right positioning for MiniMap and ZoomControlsModal components
* [style] Adjust right positioning for MiniMap and ZoomControlsModal components
---------
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: Christian Byrne <cbyrne@comfy.org>
* [feat] Add Cloudflare Pages deployment for Playwright test reports
- Deploy test reports to separate Cloudflare projects per browser
- Add real-time PR comments with progressive test status updates
- Use wrangler-action for unified Cloudflare tooling
- Support cross-browser testing with individual report links
- Document CI/CD integration in browser_tests/README.md
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Fix Cloudflare project name for chromium-0.5x browser
* Extract project name transformation to variable for consistent URL formatting
* chore(ci): update branch filters for push and pull_request events in test-ui workflow to refine CI triggers
* [feat] Improve test-ui deployment with branch isolation and building page
- Use Cloudflare Pages --branch flag for proper branch isolation instead of modifying project names
- Add auto-refresh building page that shows test progress in real-time
- Deploy building page immediately when tests start for instant feedback
- Update URL generation to use branch-based Cloudflare Pages URLs format
- Maintain clean project names while isolating branches properly
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* chore(test-ui.yaml): increase sleep duration from 5 to 10 seconds for cache propagation and restore cached setup steps for improved workflow efficiency
* [refactor] Remove building-page to reduce complexity
- Remove auto-refresh building page and related deployment steps
- Simplify PR comments to show basic test status without progress page
- Keep branch-based deployment for proper isolation while reducing complexity
- Maintain clean workflow focused on core functionality
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* chore(test-ui.yaml): add a separator in the workflow file for better readability and organization of the test status section
* [feat] Add Cloudflare Pages deployment for Playwright test reports
- Deploy test reports to separate Cloudflare projects per browser
- Add real-time PR comments with progressive test status updates
- Use wrangler-action for unified Cloudflare tooling
- Support cross-browser testing with individual report links
- Document CI/CD integration in browser_tests/README.md
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Fix Cloudflare project name for chromium-0.5x browser
* Extract project name transformation to variable for consistent URL formatting
* chore(ci): update branch filters for push and pull_request events in test-ui workflow to refine CI triggers
* [feat] Improve test-ui deployment with branch isolation and building page
- Use Cloudflare Pages --branch flag for proper branch isolation instead of modifying project names
- Add auto-refresh building page that shows test progress in real-time
- Deploy building page immediately when tests start for instant feedback
- Update URL generation to use branch-based Cloudflare Pages URLs format
- Maintain clean project names while isolating branches properly
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* chore(test-ui.yaml): increase sleep duration from 5 to 10 seconds for cache propagation and restore cached setup steps for improved workflow efficiency
* [refactor] Remove building-page to reduce complexity
- Remove auto-refresh building page and related deployment steps
- Simplify PR comments to show basic test status without progress page
- Keep branch-based deployment for proper isolation while reducing complexity
- Maintain clean workflow focused on core functionality
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* chore(test-ui.yaml): add a separator in the workflow file for better readability and organization of the test status section
* [fix] Address PR review feedback - improve workflow architecture and security
- [HIGH] Fix continue-on-error masking by adding final test result check that fails CI on test failures
- [MEDIUM] Move branch sanitization to setup job to reduce performance overhead
- [MEDIUM] Add compatibility-date to Cloudflare deployment for stability
- [LOW] Extract date format to environment variable to follow DRY principle
- [LOW] Quote shell variables properly to prevent word splitting
- [LOW] Update documentation to use dynamic branch-specific URLs
Addresses all security, performance, and code quality issues raised in automated PR review.
Maintains test report deployment while ensuring CI integrity.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* chore(test-ui.yaml): replace loading emoji with an image for better visual consistency in test logs
style(test-ui.yaml): clean up whitespace in the workflow file for improved readability
* style(test-ui.yaml): format message to combine two lines into one for better readability
* chore(test-ui.yaml): add a blank line for better readability in the workflow file
* style(test-ui.yaml): update loading image alt text and format messages for better readability in GitHub Actions workflow
* [architecture] Separate test execution from deployment - clean CI design
BREAKING: Remove continue-on-error from test execution for proper CI integrity
**Clean Architecture Changes:**
- Remove `continue-on-error: true` from Playwright test execution
- Create separate `deploy-reports` job that always runs for debugging
- Test jobs now properly fail when tests fail (maintains CI integrity)
- Reports still deploy for debugging via dedicated deployment job
- Capture and pass actual exit codes between jobs via artifacts
**Benefits:**
- ✅ CI fails when tests fail (no longer masked)
- ✅ Reports still deploy for debugging regardless of test outcome
- ✅ Clean separation of concerns (test vs deploy responsibilities)
- ✅ Proper job dependencies and error handling
- ✅ Individual browser test results preserved
**Job Flow:**
1. `setup` - Cache and prepare environment
2. `playwright-tests` - Run tests, fail if tests fail, upload artifacts
3. `deploy-reports` - Always deploy reports using artifacts (parallel)
4. `comment-summary` - Generate summary and fail workflow if needed
This addresses the high-priority architecture concern about continue-on-error
masking test failures while maintaining report deployment functionality.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* [refactor] Simplify deployment architecture - remove over-engineering
**Reverted to clean, simple approach based on feedback:**
1. ✅ **Faster deployment** - Deploy immediately after each test (no waiting for matrix completion)
2. ✅ **Remove unnecessary GITHUB_OUTPUT** - Don't save exit codes, use step.conclusion instead
3. ✅ **Single job approach** - Use `if: always()` instead of separate deploy-reports job
**Key Changes:**
- Removed separate `deploy-reports` job (86 lines deleted!)
- Deploy in same job with `if: always()` - much faster
- Use `steps.playwright.conclusion` instead of captured exit codes
- Cleaner, simpler architecture with same functionality
**Benefits:**
- 🚀 **Much faster** - Reports deploy immediately per browser, not waiting for all tests
- 🧹 **Simpler** - One job handles test + deploy, easier to understand
- ✅ **Still maintains CI integrity** - Tests fail properly when they should
- 📊 **Reports always deploy** - Available for debugging regardless of test outcome
The previous approach was over-engineered. This is much cleaner and faster.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix(workflow): reorder condition in PR comment step for clarity and consistency
* chore(test-ui.yaml): update deployment command to remove compatibility date for better maintainability
docs(test-ui.yaml): add note to always() condition for clarity on artifact upload behavior
* [performance] Remove redundant branch sanitization - 75% processing reduction
**Issue**: Complex bash string operations running 4 times per build in matrix jobs
**Solution**: Remove duplicate branch sanitization, use pre-computed value from setup job
**Before**: Branch sanitization ran in both setup job AND each matrix job (5 total times)
**After**: Branch sanitization runs only once in setup job, reused via outputs
**Performance Impact**:
- 4 redundant tr/sed operations eliminated (matrix chromium, chromium-2x, chromium-0.5x, mobile-chrome)
- 75% reduction in branch name processing overhead
- Cleaner, more maintainable code
**Implementation**:
- Setup job: Computes `sanitized-branch` output once
- Matrix jobs: Use `${{ needs.setup.outputs.sanitized-branch }}` directly
- No duplicate string processing logic
Addresses PR review comment: [performance] medium Priority - Complex bash string operations in GitHub Actions matrix
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>
* move subgraph test assets into subfolder
* [refactor] Organize browser test assets into logical folders
Reorganized test assets for better maintainability:
- groupnodes/: GroupNode feature tests
- groups/: Visual grouping tests
- missing/: Missing nodes/models tests
- links/: Link-related tests
- inputs/: Input widget tests
- widgets/: Widget-specific tests
- nodes/: Node-related tests
- workflowInMedia/: Workflow media files
Updated all loadWorkflow references to use new folder structure.
Fixed programmatic filename references to prevent test failures.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* [fix] Update mobile test to use new asset path
* [fix] Update remaining loadWorkflow calls to use new folder structure
* [fix] Fix remaining programmatic filename references
* [fix] Run prettier formatting
* [fix] Fix setupWorkflowsDirectory references to use correct folder paths
* [refactor] Rename subgraph folder to subgraphs for consistency
* [fix] Fix breadcrumb name in subgraph DOM widget test
* Update test expectations [skip ci]
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: github-actions <github-actions@github.com>
* Restructures the application menu
- rename Workflow to File
- move new & template items to top level
- add View menu and related sub items
Commands
- add "active" state getter shown as checkmark in the menu
Node side panel
- add refresh node defs
- change reset view icon
Help center
- change to use store for visibility
Fixes
- Fix bug with mouse down where if you drag mouse out, mouse up wasn't caught
- Fix issue with canvas info setting not triggering a redraw on change
* Fix missing translation warnings
* Add separator under new
* tidy
* Update locales [skip ci]
* fix some tests
* fix
* Hide icon if there is an active state within the menu item group
* Update locales [skip ci]
* Fix tests
* Implement feedback
- Remove queue, node lib, model lib, workflows, manager, help center
- Add minimap, link visibility
* Update locales [skip ci]
* Add plus icon on "New" menu item
* Update locales [skip ci]
* Fix test
* Fix translations
* Update locales [skip ci]
* Update locales [skip ci]
---------
Co-authored-by: github-actions <github-actions@github.com>
## Summary
- Partially reverts commit c84218d6 to restore group node functionality
in context menus
- Adds "(Deprecated)" label to indicate the feature is deprecated
- Fixes TypeError when right-clicking on group nodes
- Re-enables tests that were disabled when the feature was removed
## Changes
1. **Restored context menu options** - Added back "Convert to Group Node
(Deprecated)" and "Manage Group Nodes" menu items
2. **Fixed null reference error** - Added null-safe operator to prevent
errors when right-clicking group nodes
3. **Re-enabled tests** - Restored 7 tests that were disabled in commit
586f8824
## Test plan
- [x] Right-click on canvas → verify "Convert to Group Node
(Deprecated)" appears
- [x] Right-click on nodes → verify the same menu option appears
- [x] Select multiple nodes and use the menu option → verify conversion
works
- [x] Right-click on group nodes → verify no errors occur
- [x] Run browser tests → verify all re-enabled tests pass
┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-4967-feat-Restore-group-node-conversion-menu-with-deprecated-label-24e6d73d36508149a6f2dbef47223e94)
by [Unito](https://www.unito.io)
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: github-actions <github-actions@github.com>
Updated import from @comfyorg/litegraph npm package to relative path
since browser tests don't have @ alias configured in tsconfig
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>