agentgui 1.0.260 → 1.0.261

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.260",
3
+ "version": "1.0.261",
4
4
  "description": "Multi-agent ACP client with real-time communication",
5
5
  "type": "module",
6
6
  "main": "server.js",
package/static/index.html CHANGED
@@ -1854,22 +1854,176 @@
1854
1854
  .block-type-text { background: #f8fafc; }
1855
1855
  html.dark .block-type-text { background: #1e293b; }
1856
1856
 
1857
- .block-type-tool_use { background: #ecfeff; }
1858
- html.dark .block-type-tool_use { background: #0c1a24; }
1859
- .block-type-tool_use.folded-tool > .folded-tool-bar { background: #cffafe; }
1860
- html.dark .block-type-tool_use.folded-tool > .folded-tool-bar { background: #0e2a3a; }
1861
- .block-type-tool_use.folded-tool > .folded-tool-bar:hover { background: #a5f3fc; }
1862
- html.dark .block-type-tool_use.folded-tool > .folded-tool-bar:hover { background: #164e63; }
1863
- .block-type-tool_use.folded-tool > .folded-tool-bar::before { color: #0891b2; }
1864
- html.dark .block-type-tool_use.folded-tool > .folded-tool-bar::before { color: #22d3ee; }
1865
- .block-type-tool_use .folded-tool-icon { color: #0891b2; }
1866
- html.dark .block-type-tool_use .folded-tool-icon { color: #22d3ee; }
1867
- .block-type-tool_use .folded-tool-name { color: #155e75; }
1868
- html.dark .block-type-tool_use .folded-tool-name { color: #67e8f9; }
1869
- .block-type-tool_use .folded-tool-desc { color: #0e7490; }
1870
- html.dark .block-type-tool_use .folded-tool-desc { color: #22d3ee; }
1871
- .block-type-tool_use > .folded-tool-body { border-top-color: #a5f3fc; }
1872
- html.dark .block-type-tool_use > .folded-tool-body { border-top-color: #164e63; }
1857
+ /* --- Per-tool-name header colors (tool-color-*) --- */
1858
+ .tool-color-read.folded-tool > .folded-tool-bar { background: #dbeafe; }
1859
+ html.dark .tool-color-read.folded-tool > .folded-tool-bar { background: #1e3a5f; }
1860
+ .tool-color-read.folded-tool > .folded-tool-bar:hover { background: #bfdbfe; }
1861
+ html.dark .tool-color-read.folded-tool > .folded-tool-bar:hover { background: #1e40af; }
1862
+ .tool-color-read.folded-tool > .folded-tool-bar::before { color: #2563eb; }
1863
+ html.dark .tool-color-read.folded-tool > .folded-tool-bar::before { color: #60a5fa; }
1864
+ .tool-color-read .folded-tool-icon { color: #2563eb; }
1865
+ html.dark .tool-color-read .folded-tool-icon { color: #60a5fa; }
1866
+ .tool-color-read .folded-tool-name { color: #1e40af; }
1867
+ html.dark .tool-color-read .folded-tool-name { color: #93bbfd; }
1868
+ .tool-color-read .folded-tool-desc { color: #1d4ed8; }
1869
+ html.dark .tool-color-read .folded-tool-desc { color: #60a5fa; }
1870
+ .tool-color-read { background: #eff6ff; }
1871
+ html.dark .tool-color-read { background: #0c1929; }
1872
+ .tool-color-read > .folded-tool-body { border-top-color: #bfdbfe; }
1873
+ html.dark .tool-color-read > .folded-tool-body { border-top-color: #1e3a5f; }
1874
+
1875
+ .tool-color-write.folded-tool > .folded-tool-bar { background: #fef3c7; }
1876
+ html.dark .tool-color-write.folded-tool > .folded-tool-bar { background: #422006; }
1877
+ .tool-color-write.folded-tool > .folded-tool-bar:hover { background: #fde68a; }
1878
+ html.dark .tool-color-write.folded-tool > .folded-tool-bar:hover { background: #78350f; }
1879
+ .tool-color-write.folded-tool > .folded-tool-bar::before { color: #d97706; }
1880
+ html.dark .tool-color-write.folded-tool > .folded-tool-bar::before { color: #fbbf24; }
1881
+ .tool-color-write .folded-tool-icon { color: #d97706; }
1882
+ html.dark .tool-color-write .folded-tool-icon { color: #fbbf24; }
1883
+ .tool-color-write .folded-tool-name { color: #92400e; }
1884
+ html.dark .tool-color-write .folded-tool-name { color: #fcd34d; }
1885
+ .tool-color-write .folded-tool-desc { color: #b45309; }
1886
+ html.dark .tool-color-write .folded-tool-desc { color: #fbbf24; }
1887
+ .tool-color-write { background: #fffbeb; }
1888
+ html.dark .tool-color-write { background: #1c1507; }
1889
+ .tool-color-write > .folded-tool-body { border-top-color: #fde68a; }
1890
+ html.dark .tool-color-write > .folded-tool-body { border-top-color: #422006; }
1891
+
1892
+ .tool-color-edit.folded-tool > .folded-tool-bar { background: #ede9fe; }
1893
+ html.dark .tool-color-edit.folded-tool > .folded-tool-bar { background: #2e1065; }
1894
+ .tool-color-edit.folded-tool > .folded-tool-bar:hover { background: #ddd6fe; }
1895
+ html.dark .tool-color-edit.folded-tool > .folded-tool-bar:hover { background: #4c1d95; }
1896
+ .tool-color-edit.folded-tool > .folded-tool-bar::before { color: #7c3aed; }
1897
+ html.dark .tool-color-edit.folded-tool > .folded-tool-bar::before { color: #a78bfa; }
1898
+ .tool-color-edit .folded-tool-icon { color: #7c3aed; }
1899
+ html.dark .tool-color-edit .folded-tool-icon { color: #a78bfa; }
1900
+ .tool-color-edit .folded-tool-name { color: #5b21b6; }
1901
+ html.dark .tool-color-edit .folded-tool-name { color: #c4b5fd; }
1902
+ .tool-color-edit .folded-tool-desc { color: #6d28d9; }
1903
+ html.dark .tool-color-edit .folded-tool-desc { color: #a78bfa; }
1904
+ .tool-color-edit { background: #f5f3ff; }
1905
+ html.dark .tool-color-edit { background: #1a0a2e; }
1906
+ .tool-color-edit > .folded-tool-body { border-top-color: #ddd6fe; }
1907
+ html.dark .tool-color-edit > .folded-tool-body { border-top-color: #2e1065; }
1908
+
1909
+ .tool-color-bash.folded-tool > .folded-tool-bar { background: #e2e8f0; }
1910
+ html.dark .tool-color-bash.folded-tool > .folded-tool-bar { background: #1e293b; }
1911
+ .tool-color-bash.folded-tool > .folded-tool-bar:hover { background: #cbd5e1; }
1912
+ html.dark .tool-color-bash.folded-tool > .folded-tool-bar:hover { background: #334155; }
1913
+ .tool-color-bash.folded-tool > .folded-tool-bar::before { color: #475569; }
1914
+ html.dark .tool-color-bash.folded-tool > .folded-tool-bar::before { color: #94a3b8; }
1915
+ .tool-color-bash .folded-tool-icon { color: #475569; }
1916
+ html.dark .tool-color-bash .folded-tool-icon { color: #94a3b8; }
1917
+ .tool-color-bash .folded-tool-name { color: #334155; }
1918
+ html.dark .tool-color-bash .folded-tool-name { color: #cbd5e1; }
1919
+ .tool-color-bash .folded-tool-desc { color: #475569; }
1920
+ html.dark .tool-color-bash .folded-tool-desc { color: #94a3b8; }
1921
+ .tool-color-bash { background: #f8fafc; }
1922
+ html.dark .tool-color-bash { background: #0f172a; }
1923
+ .tool-color-bash > .folded-tool-body { border-top-color: #cbd5e1; }
1924
+ html.dark .tool-color-bash > .folded-tool-body { border-top-color: #334155; }
1925
+
1926
+ .tool-color-glob.folded-tool > .folded-tool-bar { background: #d1fae5; }
1927
+ html.dark .tool-color-glob.folded-tool > .folded-tool-bar { background: #064e3b; }
1928
+ .tool-color-glob.folded-tool > .folded-tool-bar:hover { background: #a7f3d0; }
1929
+ html.dark .tool-color-glob.folded-tool > .folded-tool-bar:hover { background: #065f46; }
1930
+ .tool-color-glob.folded-tool > .folded-tool-bar::before { color: #059669; }
1931
+ html.dark .tool-color-glob.folded-tool > .folded-tool-bar::before { color: #34d399; }
1932
+ .tool-color-glob .folded-tool-icon { color: #059669; }
1933
+ html.dark .tool-color-glob .folded-tool-icon { color: #34d399; }
1934
+ .tool-color-glob .folded-tool-name { color: #065f46; }
1935
+ html.dark .tool-color-glob .folded-tool-name { color: #6ee7b7; }
1936
+ .tool-color-glob .folded-tool-desc { color: #047857; }
1937
+ html.dark .tool-color-glob .folded-tool-desc { color: #34d399; }
1938
+ .tool-color-glob { background: #ecfdf5; }
1939
+ html.dark .tool-color-glob { background: #022c22; }
1940
+ .tool-color-glob > .folded-tool-body { border-top-color: #a7f3d0; }
1941
+ html.dark .tool-color-glob > .folded-tool-body { border-top-color: #064e3b; }
1942
+
1943
+ .tool-color-grep.folded-tool > .folded-tool-bar { background: #ffe4e6; }
1944
+ html.dark .tool-color-grep.folded-tool > .folded-tool-bar { background: #4c0519; }
1945
+ .tool-color-grep.folded-tool > .folded-tool-bar:hover { background: #fecdd3; }
1946
+ html.dark .tool-color-grep.folded-tool > .folded-tool-bar:hover { background: #881337; }
1947
+ .tool-color-grep.folded-tool > .folded-tool-bar::before { color: #e11d48; }
1948
+ html.dark .tool-color-grep.folded-tool > .folded-tool-bar::before { color: #fb7185; }
1949
+ .tool-color-grep .folded-tool-icon { color: #e11d48; }
1950
+ html.dark .tool-color-grep .folded-tool-icon { color: #fb7185; }
1951
+ .tool-color-grep .folded-tool-name { color: #9f1239; }
1952
+ html.dark .tool-color-grep .folded-tool-name { color: #fda4af; }
1953
+ .tool-color-grep .folded-tool-desc { color: #be123c; }
1954
+ html.dark .tool-color-grep .folded-tool-desc { color: #fb7185; }
1955
+ .tool-color-grep { background: #fff1f2; }
1956
+ html.dark .tool-color-grep { background: #2a0a10; }
1957
+ .tool-color-grep > .folded-tool-body { border-top-color: #fecdd3; }
1958
+ html.dark .tool-color-grep > .folded-tool-body { border-top-color: #4c0519; }
1959
+
1960
+ .tool-color-web.folded-tool > .folded-tool-bar { background: #e0f2fe; }
1961
+ html.dark .tool-color-web.folded-tool > .folded-tool-bar { background: #0c4a6e; }
1962
+ .tool-color-web.folded-tool > .folded-tool-bar:hover { background: #bae6fd; }
1963
+ html.dark .tool-color-web.folded-tool > .folded-tool-bar:hover { background: #075985; }
1964
+ .tool-color-web.folded-tool > .folded-tool-bar::before { color: #0284c7; }
1965
+ html.dark .tool-color-web.folded-tool > .folded-tool-bar::before { color: #38bdf8; }
1966
+ .tool-color-web .folded-tool-icon { color: #0284c7; }
1967
+ html.dark .tool-color-web .folded-tool-icon { color: #38bdf8; }
1968
+ .tool-color-web .folded-tool-name { color: #075985; }
1969
+ html.dark .tool-color-web .folded-tool-name { color: #7dd3fc; }
1970
+ .tool-color-web .folded-tool-desc { color: #0369a1; }
1971
+ html.dark .tool-color-web .folded-tool-desc { color: #38bdf8; }
1972
+ .tool-color-web { background: #f0f9ff; }
1973
+ html.dark .tool-color-web { background: #0a1929; }
1974
+ .tool-color-web > .folded-tool-body { border-top-color: #bae6fd; }
1975
+ html.dark .tool-color-web > .folded-tool-body { border-top-color: #0c4a6e; }
1976
+
1977
+ .tool-color-todo.folded-tool > .folded-tool-bar { background: #ffedd5; }
1978
+ html.dark .tool-color-todo.folded-tool > .folded-tool-bar { background: #431407; }
1979
+ .tool-color-todo.folded-tool > .folded-tool-bar:hover { background: #fed7aa; }
1980
+ html.dark .tool-color-todo.folded-tool > .folded-tool-bar:hover { background: #7c2d12; }
1981
+ .tool-color-todo.folded-tool > .folded-tool-bar::before { color: #ea580c; }
1982
+ html.dark .tool-color-todo.folded-tool > .folded-tool-bar::before { color: #fb923c; }
1983
+ .tool-color-todo .folded-tool-icon { color: #ea580c; }
1984
+ html.dark .tool-color-todo .folded-tool-icon { color: #fb923c; }
1985
+ .tool-color-todo .folded-tool-name { color: #9a3412; }
1986
+ html.dark .tool-color-todo .folded-tool-name { color: #fdba74; }
1987
+ .tool-color-todo .folded-tool-desc { color: #c2410c; }
1988
+ html.dark .tool-color-todo .folded-tool-desc { color: #fb923c; }
1989
+ .tool-color-todo { background: #fff7ed; }
1990
+ html.dark .tool-color-todo { background: #1c0f02; }
1991
+ .tool-color-todo > .folded-tool-body { border-top-color: #fed7aa; }
1992
+ html.dark .tool-color-todo > .folded-tool-body { border-top-color: #431407; }
1993
+
1994
+ .tool-color-task.folded-tool > .folded-tool-bar { background: #e0e7ff; }
1995
+ html.dark .tool-color-task.folded-tool > .folded-tool-bar { background: #1e1b4b; }
1996
+ .tool-color-task.folded-tool > .folded-tool-bar:hover { background: #c7d2fe; }
1997
+ html.dark .tool-color-task.folded-tool > .folded-tool-bar:hover { background: #312e81; }
1998
+ .tool-color-task.folded-tool > .folded-tool-bar::before { color: #4f46e5; }
1999
+ html.dark .tool-color-task.folded-tool > .folded-tool-bar::before { color: #818cf8; }
2000
+ .tool-color-task .folded-tool-icon { color: #4f46e5; }
2001
+ html.dark .tool-color-task .folded-tool-icon { color: #818cf8; }
2002
+ .tool-color-task .folded-tool-name { color: #3730a3; }
2003
+ html.dark .tool-color-task .folded-tool-name { color: #a5b4fc; }
2004
+ .tool-color-task .folded-tool-desc { color: #4338ca; }
2005
+ html.dark .tool-color-task .folded-tool-desc { color: #818cf8; }
2006
+ .tool-color-task { background: #eef2ff; }
2007
+ html.dark .tool-color-task { background: #0f0d29; }
2008
+ .tool-color-task > .folded-tool-body { border-top-color: #c7d2fe; }
2009
+ html.dark .tool-color-task > .folded-tool-body { border-top-color: #1e1b4b; }
2010
+
2011
+ .tool-color-default.folded-tool > .folded-tool-bar { background: #cffafe; }
2012
+ html.dark .tool-color-default.folded-tool > .folded-tool-bar { background: #0e2a3a; }
2013
+ .tool-color-default.folded-tool > .folded-tool-bar:hover { background: #a5f3fc; }
2014
+ html.dark .tool-color-default.folded-tool > .folded-tool-bar:hover { background: #164e63; }
2015
+ .tool-color-default.folded-tool > .folded-tool-bar::before { color: #0891b2; }
2016
+ html.dark .tool-color-default.folded-tool > .folded-tool-bar::before { color: #22d3ee; }
2017
+ .tool-color-default .folded-tool-icon { color: #0891b2; }
2018
+ html.dark .tool-color-default .folded-tool-icon { color: #22d3ee; }
2019
+ .tool-color-default .folded-tool-name { color: #155e75; }
2020
+ html.dark .tool-color-default .folded-tool-name { color: #67e8f9; }
2021
+ .tool-color-default .folded-tool-desc { color: #0e7490; }
2022
+ html.dark .tool-color-default .folded-tool-desc { color: #22d3ee; }
2023
+ .tool-color-default { background: #ecfeff; }
2024
+ html.dark .tool-color-default { background: #0c1a24; }
2025
+ .tool-color-default > .folded-tool-body { border-top-color: #a5f3fc; }
2026
+ html.dark .tool-color-default > .folded-tool-body { border-top-color: #164e63; }
1873
2027
 
1874
2028
  .block-type-tool_result { background: #f0fdf4; }
1875
2029
  html.dark .block-type-tool_result { background: #0a1f0f; }
@@ -1188,9 +1188,10 @@ class AgentGUIClient {
1188
1188
  const tTitle = hasRenderer && block.input ? StreamingRenderer.getToolTitle(tn, block.input) : '';
1189
1189
  const iconHtml = hasRenderer && this.renderer ? `<span class="folded-tool-icon">${this.renderer.getToolIcon(tn)}</span>` : '';
1190
1190
  const typeClass = hasRenderer && this.renderer ? this.renderer._getBlockTypeClass('tool_use') : 'block-type-tool_use';
1191
+ const toolColorClass = hasRenderer && this.renderer ? this.renderer._getToolColorClass(tn) : 'tool-color-default';
1191
1192
  const nextBlock = blocks[blockIdx + 1];
1192
1193
  const resultClass = nextBlock?.type === 'tool_result' ? (nextBlock.is_error ? 'has-error' : 'has-success') : '';
1193
- html += `<details class="block-tool-use folded-tool ${typeClass} ${resultClass}"><summary class="folded-tool-bar">${iconHtml}<span class="folded-tool-name">${this.escapeHtml(dName)}</span>${tTitle ? `<span class="folded-tool-desc">${this.escapeHtml(tTitle)}</span>` : ''}</summary>${inputHtml}`;
1194
+ html += `<details class="block-tool-use folded-tool ${typeClass} ${toolColorClass} ${resultClass}"><summary class="folded-tool-bar">${iconHtml}<span class="folded-tool-name">${this.escapeHtml(dName)}</span>${tTitle ? `<span class="folded-tool-desc">${this.escapeHtml(tTitle)}</span>` : ''}</summary>${inputHtml}`;
1194
1195
  pendingToolUseClose = true;
1195
1196
  } else if (block.type === 'tool_result') {
1196
1197
  const content = typeof block.content === 'string' ? block.content : JSON.stringify(block.content);
@@ -422,6 +422,12 @@ class StreamingRenderer {
422
422
  return validTypes.includes(blockType) ? `block-type-${blockType}` : 'block-type-generic';
423
423
  }
424
424
 
425
+ _getToolColorClass(toolName) {
426
+ const n = (toolName || '').replace(/^mcp__[^_]+__/, '').toLowerCase();
427
+ const map = { read: 'read', write: 'write', edit: 'edit', bash: 'bash', glob: 'glob', grep: 'grep', webfetch: 'web', websearch: 'web', todowrite: 'todo', task: 'task', notebookedit: 'edit' };
428
+ return `tool-color-${map[n] || 'default'}`;
429
+ }
430
+
425
431
  containsHtmlTags(text) {
426
432
  const htmlPattern = /<(?:div|table|section|article|ul|ol|dl|nav|header|footer|main|aside|figure|details|summary|h[1-6]|p|blockquote|pre|code|span|strong|em|a|img|br|hr|li|td|tr|th|thead|tbody|tfoot)\b[^>]*>/i;
427
433
  return htmlPattern.test(text);
@@ -737,6 +743,7 @@ class StreamingRenderer {
737
743
  details.className = 'block-tool-use folded-tool';
738
744
  if (block.id) details.dataset.toolUseId = block.id;
739
745
  details.classList.add(this._getBlockTypeClass('tool_use'));
746
+ details.classList.add(this._getToolColorClass(toolName));
740
747
  const summary = document.createElement('summary');
741
748
  summary.className = 'folded-tool-bar';
742
749
  const displayName = this.getToolUseDisplayName(toolName);
@@ -1625,6 +1632,8 @@ class StreamingRenderer {
1625
1632
  const fileName = event.path ? event.path.split('/').pop() : 'unknown';
1626
1633
  const details = document.createElement('details');
1627
1634
  details.className = 'block-tool-use folded-tool';
1635
+ details.classList.add(this._getBlockTypeClass('tool_use'));
1636
+ details.classList.add(this._getToolColorClass('Read'));
1628
1637
  details.dataset.eventId = event.id || '';
1629
1638
  details.dataset.eventType = 'file_read';
1630
1639
  const summary = document.createElement('summary');
@@ -1656,6 +1665,8 @@ class StreamingRenderer {
1656
1665
  const fileName = event.path ? event.path.split('/').pop() : 'unknown';
1657
1666
  const details = document.createElement('details');
1658
1667
  details.className = 'block-tool-use folded-tool';
1668
+ details.classList.add(this._getBlockTypeClass('tool_use'));
1669
+ details.classList.add(this._getToolColorClass('Write'));
1659
1670
  details.dataset.eventId = event.id || '';
1660
1671
  details.dataset.eventType = 'file_write';
1661
1672
  const summary = document.createElement('summary');
@@ -1719,6 +1730,8 @@ class StreamingRenderer {
1719
1730
 
1720
1731
  const details = document.createElement('details');
1721
1732
  details.className = 'block-tool-use folded-tool';
1733
+ details.classList.add(this._getBlockTypeClass('tool_use'));
1734
+ details.classList.add(this._getToolColorClass('Bash'));
1722
1735
  details.dataset.eventId = event.id || '';
1723
1736
  details.dataset.eventType = 'command_execute';
1724
1737
  const summary = document.createElement('summary');