agentgui 1.0.126 → 1.0.127

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentgui",
3
- "version": "1.0.126",
3
+ "version": "1.0.127",
4
4
  "description": "Multi-agent ACP client with real-time communication",
5
5
  "type": "module",
6
6
  "main": "server.js",
@@ -581,22 +581,14 @@ class StreamingRenderer {
581
581
  case 'dev__execute':
582
582
  case 'dev_execute':
583
583
  case 'execute': {
584
- // Handle mcp__plugin_gm_dev__execute and similar dev execution tools
585
584
  let html = '<div class="tool-params">';
586
585
 
587
- // Show working directory if present
588
586
  if (input.workingDirectory) {
589
- html += `<div style="margin-bottom:0.5rem;font-size:0.75rem;color:var(--color-text-secondary)">
590
- <span style="opacity:0.7">📁</span> ${this.escapeHtml(input.workingDirectory)}
591
- </div>`;
587
+ html += `<div style="margin-bottom:0.5rem;font-size:0.75rem;color:var(--color-text-secondary)"><span style="opacity:0.7">📁</span> ${this.escapeHtml(input.workingDirectory)}</div>`;
592
588
  }
593
589
 
594
- // Show timeout if present
595
590
  if (input.timeout) {
596
- const seconds = Math.round(input.timeout / 1000);
597
- html += `<div style="margin-bottom:0.5rem;font-size:0.75rem;color:var(--color-text-secondary)">
598
- <span style="opacity:0.7">⏱️</span> Timeout: ${seconds}s
599
- </div>`;
591
+ html += `<div style="margin-bottom:0.5rem;font-size:0.75rem;color:var(--color-text-secondary)"><span style="opacity:0.7">⏱️</span> Timeout: ${Math.round(input.timeout / 1000)}s</div>`;
600
592
  }
601
593
 
602
594
  // Render code with syntax highlighting
@@ -605,16 +597,16 @@ class StreamingRenderer {
605
597
  const lineCount = codeLines.length;
606
598
  const truncated = lineCount > 50;
607
599
  const displayCode = truncated ? codeLines.slice(0, 50).join('\n') : input.code;
608
-
609
600
  const lang = input.runtime || 'javascript';
610
- html += `<div style="margin-top:0.5rem">
611
- <div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:0.25rem">
612
- <span style="font-size:0.7rem;font-weight:600;color:#0891b2;text-transform:uppercase">${this.escapeHtml(lang)}</span>
613
- <span style="font-size:0.7rem;color:var(--color-text-secondary)">${lineCount} lines</span>
614
- </div>
615
- ${StreamingRenderer.renderCodeWithHighlight(displayCode, this.escapeHtml.bind(this))}
616
- ${truncated ? `<div style="font-size:0.7rem;color:var(--color-text-secondary);text-align:center;padding:0.25rem">... ${lineCount - 50} more lines</div>` : ''}
617
- </div>`;
601
+ html += `<div style="margin-top:0.5rem"><div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:0.25rem"><span style="font-size:0.7rem;font-weight:600;color:#0891b2;text-transform:uppercase">${this.escapeHtml(lang)}</span><span style="font-size:0.7rem;color:var(--color-text-secondary)">${lineCount} lines</span></div>${StreamingRenderer.renderCodeWithHighlight(displayCode, this.escapeHtml.bind(this))}${truncated ? `<div style="font-size:0.7rem;color:var(--color-text-secondary);text-align:center;padding:0.25rem">... ${lineCount - 50} more lines</div>` : ''}</div>`;
602
+ }
603
+
604
+ // Render commands (bash commands)
605
+ if (input.commands) {
606
+ const cmds = Array.isArray(input.commands) ? input.commands : [input.commands];
607
+ cmds.forEach(cmd => {
608
+ html += `<div style="margin-top:0.375rem"><div class="tool-param-command"><span class="prompt-char">$</span><span class="command-text">${this.escapeHtml(typeof cmd === 'string' ? cmd : JSON.stringify(cmd))}</span></div></div>`;
609
+ });
618
610
  }
619
611
 
620
612
  html += '</div>';
@@ -756,14 +748,23 @@ class StreamingRenderer {
756
748
  return `<div style="padding:0.5rem"><img src="${esc(trimmed)}" style="max-width:100%;max-height:24rem;border-radius:0.375rem" loading="lazy"></div>`;
757
749
  }
758
750
 
759
- // Instead of rendering JSON as parameters, check if it looks like code output
751
+ // Parse JSON and render as structured content
760
752
  if ((trimmed.startsWith('{') && trimmed.endsWith('}')) || (trimmed.startsWith('[') && trimmed.endsWith(']'))) {
761
753
  try {
762
- // Validate it's JSON, then render as highlighted code
763
- JSON.parse(trimmed);
764
- // Format JSON with proper indentation
765
- const formatted = JSON.stringify(JSON.parse(trimmed), null, 2);
766
- return StreamingRenderer.renderCodeWithHighlight(formatted, esc);
754
+ const parsed = JSON.parse(trimmed);
755
+
756
+ // Handle Claude content block arrays: [{type:"text", text:"..."}]
757
+ if (Array.isArray(parsed) && parsed.length > 0 && parsed[0] && parsed[0].type === 'text') {
758
+ const textParts = parsed.filter(b => b.type === 'text' && b.text);
759
+ if (textParts.length > 0) {
760
+ const combined = textParts.map(b => b.text).join('\n');
761
+ // Re-enter renderSmartContentHTML with the extracted text
762
+ return StreamingRenderer.renderSmartContentHTML(combined, esc);
763
+ }
764
+ }
765
+
766
+ // For other JSON, render as itemized key-value structure
767
+ return `<div style="padding:0.5rem 0.75rem">${StreamingRenderer.renderParamsHTML(parsed, 0, esc)}</div>`;
767
768
  } catch (e) {
768
769
  // Not valid JSON, might be code with braces
769
770
  }
@@ -1076,6 +1077,11 @@ class StreamingRenderer {
1076
1077
  if (typeof data === 'number') return `<span style="color:#7c3aed;font-weight:600">${data}</span>`;
1077
1078
 
1078
1079
  if (typeof data === 'string') {
1080
+ if (data.length > 200 && StreamingRenderer.detectCodeContent(data)) {
1081
+ const displayData = data.length > 1000 ? data.substring(0, 1000) : data;
1082
+ const suffix = data.length > 1000 ? `<div style="font-size:0.7rem;color:var(--color-text-secondary);text-align:center;padding:0.25rem">... ${data.length - 1000} more characters</div>` : '';
1083
+ return `<div style="max-height:200px;overflow-y:auto">${StreamingRenderer.renderCodeWithHighlight(displayData, esc)}${suffix}</div>`;
1084
+ }
1079
1085
  if (data.length > 500) {
1080
1086
  return `<div style="font-family:'Monaco','Menlo','Ubuntu Mono',monospace;font-size:0.75rem;white-space:pre-wrap;word-break:break-all;max-height:200px;overflow-y:auto;background:var(--color-bg-code);color:#d1d5db;padding:0.5rem;border-radius:0.375rem;line-height:1.5">${esc(data.substring(0, 1000))}${data.length > 1000 ? '\n... (' + (data.length - 1000) + ' more chars)' : ''}</div>`;
1081
1087
  }