Files
arcum42-ComfyUI_SageUtils/docs/planning/Refactoring_Plan.md
T

6.3 KiB
Raw Blame History

Plan: Restore Missing Generation Event Handlers in llmEventHandlers.js

Problem Analysis (COMPLETED)

During a recent refactor that split llmEventHandlers.js into smaller modular files (llmProviderEvents.js, llmTemplateEvents.js, llmPresetEvents.js, llmVisionEvents.js, llmHistoryEvents.js), an entire Generation Events section was accidentally dropped — it was never migrated into any of the new module files.

Evidence

In the current file, line 6 imports these functions:

import { handleSend, handleStop, handleCopy, handleCopyToNode, handleCopyFromNode } 
    from '../compose/llmGenerationHandler.js';

But these functions were never called anywhere in the file. They were dead imports.

The old backup (/.phase3_backups/js/sidebar/llmTab/shared/llmEventHandlers.js.bak) has an entire // ========== Generation Events ========== section (~87 lines) that wires up send/stop/copy buttons to those exact handlers. That section is completely missing from the refactored version.

What Was Missing (from old backup, ~lines 251–340)

The following event listeners needed to be added between the Template & Extras section and the Vision Events section:

# Event Handler Button/Element Calls Which Function Status in New Code
1 Send button click sendBtn handleSend() ✅ FIXED — line 183
2 Ctrl+Enter keydown on textarea textarea handleSend() ✅ FIXED — line 190
3 Stop button click stopBtn handleStop() ✅ FIXED — line 196
4 From Node button click .llm-from-node-btn handleCopyFromNode() ✅ FIXED — line 203
5 Copy response to clipboard copyBtn handleCopy() ✅ FIXED — line 209
6 Copy to node (response) copyToNodeBtn handleCopyToNode() ✅ FIXED — line 214
7 Send to Prompt Builder button .llm-send-to-prompt-btn inline cross-tab message ✅ FIXED — lines 218–257

Note: The old backup also had Vision events duplicated (click upload zone, file input change, drag-and-drop, paste handler). These are already handled by llmVisionEvents.js, so we do NOT need to restore those. Only the Generation Events block was needed.

Implementation Plan (COMPLETED)

Step 1: Insert Missing Event Listeners ✅ DONE (2026-06-30)

Inserted a new // ========== Generation Events ========== section after line 176 (end of Template & Extras) and before line 178 (Vision Events). The insertion point is between the closing } of the system prompt handler and the empty line before // ========== Vision Events ===.

The code inserted (~84 lines):

  • Send button click → calls imported handleSend() [line 183]
  • Ctrl+Enter on textarea → calls imported handleSend() [line 190]
  • Stop button click → calls imported handleStop() [line 196]
  • From Node button click (conditional) → calls imported handleCopyFromNode() [line 203]
  • Copy to clipboard click → calls imported handleCopy() [line 209]
  • Copy to node click → calls imported handleCopyToNode() [line 214]
  • Send to Prompt Builder click (conditional with cross-tab messaging) [lines 218–257]

Step 2: Verify Compose Handler Integration ✅ VERIFIED

All handler functions in compose/llmGenerationHandler.js receive their expected parameters:

  • handleSend(state, textarea, responseSection, sendBtn, stopBtn, historySection, updateConversationList) → All params are available as local variables or function arguments ✅
  • handleStop(state, responseSection, sendBtn, stopBtn) → All params available ✅
  • handleCopy(responseSection, copyBtn) → Both available via querySelector earlier in setupEventHandlers() ✅
  • handleCopyToNode(responseSection, copyToNodeBtn, app) → All params available ✅
  • handleCopyFromNode(textarea, app, showNotification) → All params available ✅

All required variables (sendBtn, stopBtn, textarea, copyBtn, etc.) were already queried at lines ~58–79 of the current file. No additional variable declarations needed.

Step 3: Verify No Duplicates or Conflicts ✅ VERIFIED

Checked all modularized event files — none contain generation handlers that would conflict:

  • Not in llmProviderEvents.js
  • Not in llmPresetEvents.js
  • Not in llmVisionEvents.js (vision events ARE there but handle different UI elements)
  • Not in llmHistoryEvents.js
  • No duplicate event listeners already present

Step 4: Verify updateConversationList Parameter ✅ VERIFIED

The old code called handlers with updateConversationList as a parameter. The current file signature includes this at line 36 (function parameter). Confirmed it's passed correctly when wiring up send/stop events.

File Structure After Fix

The file now has 7 well-organized sections:

Line Section
85 Provider & Model Events (delegated)
117 Preset Events
148 Template & Extras Events
179 Generation Events ← NEW
262 Vision Events
311 History Section Events

File Size Change

  • Before: 1061 lines
  • After: 1145 lines (+84 lines for the Generation Events section)

Syntax Validation ✅ PASSED

Brace and parenthesis balance check passed (both balanced at 0).

Risk Assessment

  • Low risk: This is purely additive code insertion. No existing logic changes.
  • The imported functions are already written and tested (in compose/llmGenerationHandler.js)
  • All required variables (sendBtn, stopBtn, textarea, etc.) are queried earlier in the function at lines ~58–79
  • This restores functionality that was clearly working before the refactor

Files Modified

Only one file was modified:

  • /home/ai/programs/comfyui/custom_nodes/comfyui_sageutils/js/sidebar/llmTab/shared/llmEventHandlers.js

Verification Checklist (POST-IMPLEMENTATION)

  1. Send button triggers handleSend() and shows loading state ✅ (wired at line 183)
  2. Ctrl+Enter on textarea sends message ✅ (wired at line 190)
  3. Stop button calls handleStop() during generation ✅ (wired at line 196)
  4. Copy to clipboard copies response text ✅ (wired at line 209)
  5. From Node reads from ComfyUI node input ✅ (wired at line 203)
  6. Send to Prompt Builder uses cross-tab messaging ✅ (wired at lines 218–257)