← Back to Kontasks
Flow Timeline WebSocket Handler Fix
Fixed handler not being globally accessible for WebSocket events
Output
🔧 Flow Timeline Auto-Update Fixed
Root Cause
The handleFlowTimelineKontaskEvent function was defined inside the flow-timeline-pane script, but it was not accessible globally.
layout.ts checks:
if (typeof handleFlowTimelineKontaskEvent === 'function') {
handleFlowTimelineKontaskEvent({...});
}
⚠️ But the function was scoped inside the IIFE, not on window!
Fix Applied
Added global exposure in flow-timeline-pane.ts:
// Expose handler globally so layout.ts WebSocket handlers can call it window.handleFlowTimelineKontaskEvent = handleFlowTimelineKontaskEvent; // Also register in handlers array for backwards compatibility if (typeof window.adminBroadcastHandlers !== 'undefined') { window.adminBroadcastHandlers.push(handleFlowTimelineKontaskEvent); } else { window.adminBroadcastHandlers = [handleFlowTimelineKontaskEvent]; }
What Was Happening
| ❌ Before | WebSocket event received → typeof handleFlowTimelineKontaskEvent returned "undefined" → Handler never called → No update |
| ✅ After | WebSocket event received → typeof handleFlowTimelineKontaskEvent returns "function" → Handler called → Timeline updates |
Verification
✅ All 372 tests pass
Commit
f8f522e3 Turn: Fix flow timeline WebSocket handler not being called
⚠️ Restart konui to apply this fix.
Quick Actions
Original Request
No layout configured
Details
Type
General
Status
Completed
Scope
greatvibe
Tags
konuiwebsocketbugfixtimeline
Created
11 Jan 2026, 11:35 am
Updated
11 Jan 2026, 11:35 am
Timing
⏱️ 102.1s
0 tools
● TTFE 0%
● Thinking 100%
● Tools 0%
Created By
claude
📋 Claude's Context
Session
ses_40728090...
🔗 Git Commit
f8f522e3
Raw Data
{
"id": "19c20dfe-118a-4adc-baa8-e21661669176",
"type": "general",
"status": "completed",
"title": "Flow Timeline WebSocket Handler Fix",
"description": "Fixed handler not being globally accessible for WebSocket events",
"context": {
"output": "<div style=\"background:#1e1e1e;color:#e0e0e0;padding:20px;border-radius:8px;font-family:'Consolas','Monaco',monospace;\">\n<h2 style=\"font-family:sans-serif;color:#fff;margin:0 0 16px 0;\">🔧 Flow Timeline Auto-Update Fixed</h2>\n\n<h3 style=\"color:#98c379;margin:16px 0 8px 0;\">Root Cause</h3>\n<p style=\"color:#abb2bf;\">The <code style=\"background:#2d2d2d;padding:2px 6px;border-radius:3px;\">handleFlowTimelineKontaskEvent</code> function was defined inside the flow-timeline-pane script, but it was <strong style=\"color:#e06c75;\">not accessible globally</strong>.</p>\n\n<div style=\"background:#2d2d2d;padding:16px;border-radius:6px;margin:12px 0;\">\n<p style=\"color:#7f848e;margin:0 0 8px 0;\">layout.ts checks:</p>\n<pre style=\"color:#e5c07b;margin:0;\">if (typeof handleFlowTimelineKontaskEvent === 'function') {\n handleFlowTimelineKontaskEvent({...});\n}</pre>\n<p style=\"color:#e06c75;margin:8px 0 0 0;\">⚠️ But the function was scoped inside the IIFE, not on window!</p>\n</div>\n\n<h3 style=\"color:#98c379;margin:16px 0 8px 0;\">Fix Applied</h3>\n<p style=\"color:#abb2bf;\">Added global exposure in <code style=\"background:#2d2d2d;padding:2px 6px;border-radius:3px;\">flow-timeline-pane.ts</code>:</p>\n\n<pre style=\"background:#2d2d2d;padding:16px;border-radius:6px;overflow-x:auto;line-height:1.8;margin:12px 0;\">\n<span style=\"color:#7f848e;\">// Expose handler globally so layout.ts WebSocket handlers can call it</span>\n<span style=\"color:#56b6c2;font-weight:bold;\">window.handleFlowTimelineKontaskEvent = handleFlowTimelineKontaskEvent;</span>\n\n<span style=\"color:#7f848e;\">// Also register in handlers array for backwards compatibility</span>\nif (typeof window.adminBroadcastHandlers !== 'undefined') {\n window.adminBroadcastHandlers.push(handleFlowTimelineKontaskEvent);\n} else {\n window.adminBroadcastHandlers = [handleFlowTimelineKontaskEvent];\n}</pre>\n\n<h3 style=\"color:#98c379;margin:16px 0 8px 0;\">What Was Happening</h3>\n<table style=\"width:100%;border-collapse:collapse;margin:12px 0;\">\n<tr style=\"border-bottom:1px solid #3e4451;\">\n<td style=\"padding:8px;color:#e06c75;\">❌ Before</td>\n<td style=\"padding:8px;color:#abb2bf;\">WebSocket event received → <code>typeof handleFlowTimelineKontaskEvent</code> returned <code>\"undefined\"</code> → Handler never called → No update</td>\n</tr>\n<tr>\n<td style=\"padding:8px;color:#98c379;\">✅ After</td>\n<td style=\"padding:8px;color:#abb2bf;\">WebSocket event received → <code>typeof handleFlowTimelineKontaskEvent</code> returns <code>\"function\"</code> → Handler called → Timeline updates</td>\n</tr>\n</table>\n\n<h3 style=\"color:#98c379;margin:16px 0 8px 0;\">Verification</h3>\n<div style=\"background:#2d2d2d;padding:12px 16px;border-radius:6px;border-left:4px solid #22c55e;\">\n<span style=\"color:#22c55e;font-weight:bold;\">✅ All 372 tests pass</span>\n</div>\n\n<h3 style=\"color:#98c379;margin:16px 0 8px 0;\">Commit</h3>\n<pre style=\"background:#2d2d2d;padding:12px 16px;border-radius:6px;color:#61afef;\">f8f522e3 Turn: Fix flow timeline WebSocket handler not being called</pre>\n\n<p style=\"color:#f59e0b;font-size:0.95em;margin-top:16px;\">⚠️ <strong>Restart konui</strong> to apply this fix.</p>\n</div>",
"requestedAt": "2026-01-11T00:32:00.000Z",
"requestId": "b8e219d2-d59c-4d0b-89ef-adbe878eb950",
"commitSha": "f8f522e3",
"choices": [
{
"label": "Restart konui",
"value": "Restart konui service to apply the WebSocket handler fix",
"primary": true
},
{
"label": "Run all tests",
"value": "Run the full konui test suite"
},
{
"label": "View code change",
"value": "Show the git diff for this fix"
}
],
"turnTiming": {
"totalMs": 102073,
"ttfeMs": 53,
"thinkingMs": 102020,
"toolExecutionMs": 0,
"toolCallCount": 0,
"thinkingPct": 100,
"toolsPct": 0,
"ttfePct": 0
}
},
"createdBy": "claude",
"createdAt": "2026-01-11T01:35:13.854Z",
"updatedAt": "2026-01-11T01:35:18.572Z",
"requestId": "b8e219d2-d59c-4d0b-89ef-adbe878eb950",
"scope": "greatvibe",
"tags": [
"konui",
"websocket",
"bugfix",
"timeline"
],
"sessionId": "ses_40728090-b86"
}