';
- for (var pi = 0; pi < pipelines.length; pi++) {
- var pl = pipelines[pi];
- var steps = pl.steps || [];
- var hasMsg = steps.some(function(s){ return s.hop === 'msg_received'; });
- html += '
';
- // Pipeline header
- html += '
';
- html += '๐จ ' + escHtml(pl.sender || '?') + (pl.platform ? ' ยท ' + escHtml(pl.platform) : '') + '';
- html += '' + (pl.timestamp || '').substring(11,19) + '';
- html += '
';
- // Pipeline steps
- html += '
';
- for (var si = 0; si < steps.length; si++) {
- var s = steps[si];
- var hopIcon = {msg_received:'๐ฅ',msg_sent:'๐ค',llm_call:'๐ง ',tool_call:'๐ง',session:'๐ค'}[s.hop] || 'โ';
- var hopColor = s.status === 'error' ? 'var(--red)' : (s.hop === 'msg_received' ? 'var(--blue)' : s.hop === 'msg_sent' ? 'var(--green)' : 'var(--text2)');
- html += '
';
- html += '' + hopIcon + '';
- html += '' + escHtml(s.label) + '';
- if (s.detail) html += '
' + escHtml(s.detail) + '';
- if (s.durationMs > 0) html += ' (' + (s.durationMs >= 1000 ? (s.durationMs/1000).toFixed(1)+'s' : s.durationMs+'ms') + ')';
- html += '
';
- }
- html += '