diff --git a/extension/sidepanel.css b/extension/sidepanel.css index 2f82719f..5b99b7bf 100644 --- a/extension/sidepanel.css +++ b/extension/sidepanel.css @@ -290,6 +290,32 @@ body::after { line-height: 1.5; word-break: break-word; } +/* Collapsed reasoning disclosure */ +.agent-reasoning { + margin: 4px 0; +} +.agent-reasoning summary { + cursor: pointer; + font-size: 11px; + font-family: var(--font-mono); + color: var(--text-meta); + padding: 3px 0; + user-select: none; + list-style: none; +} +.agent-reasoning summary::before { + content: '▶ '; + font-size: 9px; +} +.agent-reasoning[open] summary::before { + content: '▼ '; +} +.agent-reasoning summary:hover { + color: var(--text-label); +} +.agent-reasoning .agent-tool { + margin-left: 4px; +} /* Legacy classes kept for compat */ .tool-name { color: var(--amber-500); diff --git a/extension/sidepanel.js b/extension/sidepanel.js index f3dfca42..16cd917f 100644 --- a/extension/sidepanel.js +++ b/extension/sidepanel.js @@ -196,8 +196,27 @@ function handleAgentEvent(entry) { if (thinking) thinking.remove(); updateStopButton(false); stopFastPoll(); - // Add timestamp + // Collapse tool calls into a "See reasoning" disclosure if (agentContainer) { + const tools = agentContainer.querySelectorAll('.agent-tool'); + if (tools.length > 0) { + const details = document.createElement('details'); + details.className = 'agent-reasoning'; + const summary = document.createElement('summary'); + summary.textContent = `See reasoning (${tools.length} step${tools.length > 1 ? 's' : ''})`; + details.appendChild(summary); + for (const tool of tools) { + details.appendChild(tool); + } + // Insert the disclosure before the text response (if any) + const textEl = agentContainer.querySelector('.agent-text'); + if (textEl) { + agentContainer.insertBefore(details, textEl); + } else { + agentContainer.appendChild(details); + } + } + // Add timestamp const ts = document.createElement('span'); ts.className = 'chat-time'; ts.textContent = formatChatTime(entry.ts);