Old workflows (saved before the control_after_generate feature) carry a
shorter widgets_values array. The frontend's index-based widget restore
then shifts the old weight_dtype value into the hidden control widget
(leaving an invalid value like 'default') and silently resets
weight_dtype to its default. On graph load, hand the shifted value back
to weight_dtype when it still sits at its default, then reset the
control mode to 'fixed' so old workflows keep loading deterministically.
CLIP Text Encode and friends whose text widget is backed by a connected
input cannot have their text changed via the widget (execution reads the
linked input), so sending to them was a silent no-op.
- Registry: compute text_widget_connected capability from the widget's
backing input link state; has_text_widget drops to false when wired;
include the flag in the registration fingerprint so link changes
re-register the affected nodes
- Registry: hook link connect/disconnect (graph events on new litegraph,
onAfterChange fallback for classic) on root and subgraphs, plus
subgraph-created for future subgraphs
- applyWidgetUpdate: skip inject_text when the target widget is connected
and self-heal the registry instead of writing a value that is ignored
- Web UI: drop text_widget_connected nodes from prompt/embedding send
candidates; show a Mark as -> Send Prompt Target hint toast when no
candidates remain (new uiHelpers.workflow.noPromptTargets key, synced
to all locales; zh-CN/zh-TW translated)
- Extract shared resolveTextWidget() used by both the candidate-set
logic and the write path so the two cannot drift apart
- Tests: workflow registry connection-state registration, subgraph
handling, fingerprint re-registration, inject_text write/skip paths,
setup link-change hooks; uiHelpers candidate filtering and hint toast
Add new move_recipes_bulk endpoint to handle moving multiple recipes simultaneously. This improves efficiency when reorganizing recipe collections by allowing batch operations instead of individual moves.
- Add move_recipes_bulk handler method with proper error handling
- Register new POST /api/lm/recipes/move-bulk route
- Implement bulk move logic in persistence service
- Validate required parameters (recipe_ids and target_path)
- Handle common error cases including validation, not found, and server errors