backend:
- add 429 retry handling with backoff in CivArchive API requests
- add page-scraping fallback for CivArchive model payloads
- normalize CivArchive mirrors with dead/gated/paid/sha256 metadata
- include file metadata and mirror data in normalized archive files
- propagate additional dead/missing status field aliases
- include metadata in normalized CivitAI files
frontend:
- render mirror lists with source grouping, dead-link indicators, and skull icons
- add file badges (primary, type, format, size, fp, mirror count, id)
- improve secondary info in resolve/download methods to include base model
- enhance search panel secondary info with base model and filename
- on selecting a version with empty files, fetch fresh version details
- propagate base model context to CivitAI search state and display labels
Replace all link dialog terminology with resolver terminology
throughout the codebase, including module names, CSS classes,
IDs, JS variables, SVG gradient IDs, and log module names.
Remove the old web/linker/ tree and introduce the new web/resolver/
tree with parallel structure. Also replace core/linker.py with
core/resolver.py.
- Replace unicode text ('⛶', '×') with SVG icons for fullscreen/close buttons
- Add new SVG icons (windowMaximize, windowRestore, x) to icon_utils.js
- Update CSS selectors to scope window button styles under #model-linker-modal
- Remove border/box-shadow from buttons, add hover states
- Increase button size to 46x40px with full height
- Add aria-label attributes for accessibility
- Adjust dialog controls layout with stretch alignment
- Add new utility classes: ml-is-hidden, ml-is-visible, ml-is-inline-flex
- Add ml-is-muted and ml-is-error for text color states
- Add ml-is-success-action for success button styling
- Add ml-icon-img for icon vertical alignment
- Replace style.display = 'block/none' with classList toggles in linker.js
- Update getIconHtml to use ml-icon-img class instead of inline styles
- Changed icon mapping for lora-archive, lora_manager_archive, and lora-manager-archive from 'archive' to 'loraManager'
- Added new loraManager SVG icon in icon_utils.js
- Removed redundant 'Not needed' status display before search controls in download section
- Add getMissingNodeDisplay() helper to centralize node label formatting
- Make missing list rows keyboard-accessible (Enter/Space selection)
- Add clickable locate buttons for missing nodes to center in graph
- Style focus states for accessibility (outline, box-shadow)
- Add refreshCw icon to icon_utils.js for combo refresh buttons
- Refactor row HTML structure for better semantics
- Rename web/utils/{css-loader→css_loader,ErrorHandler→error_handler,IconUtils→icon_utils,ResourceManager→resource_manager} and web/log_system/{LoggerUtils→log_funcs} to lowercase_kebab-case naming convention
- Update all cross-import paths in the recreated utils and linker.js accordingly
- Add removeResolvedFromPopup / markEntryAsResolved to visually mark resolved entries in the ComfyUI Missing Models popup
- Add updateNodesDirectly to update graph node widgets in-place without triggering a full workflow reload
- Add checkAndOpenForMissingModels with isAutoOpenEnabled/setAutoOpenEnabled to auto-open the linker dialog when a workflow with missing models is loaded
- Add helper methods getMissingSearchKey, getSearchState, mergeSearchResults for per-entry search state caching and merging
Remove ~8000 lines of inline JavaScript styles from linker.js and organize
them into two focused stylesheets:
- linker-shell.css: modal shell, backdrop, window controls, layout structure
- linker-main.css: main content area (cards, buttons, forms, dialogs, tabs)
Simplify and clean up css-variables.css variable definitions.
Update css-loader.js to load both new stylesheet files.
Significantly improves code maintainability and separation of concerns.
Remove individual CSS component file references and streamline css-loader
to only load css-variables.css. The web/css directory now contains the
consolidated stylesheet, reducing complexity and improving maintainability.
Enhance logging system with configurable module names and dynamic
localStorage keys to avoid conflicts between multiple plugin instances.
- Add LOG_MODULE_NAME and DEFAULT_LOGGER_NAME to web/log_system/config.js
- Update logger.js to use dynamic storage keys based on module name
- Change window property from ResolutionMasterLogger to dynamic key
- Add PyDoc metadata to core/log_system/config.py
- Add JSDoc metadata blocks to all web log_system files
Reorganize web utilities:
- Move css-loader.js from web/ to web/utils/
- Add ErrorHandler.js for centralized error handling
- Add ResourceManager.js for stylesheet and template loading
rename: web/css-loader.js => web/utils/css-loader.js