diff --git a/apps/web/src/api/types.ts b/apps/web/src/api/types.ts index cc31319..88d7a67 100644 --- a/apps/web/src/api/types.ts +++ b/apps/web/src/api/types.ts @@ -182,10 +182,14 @@ export interface Message { // majority of messages. metadata: MessageMetadata | null; // v1.13.1-C: reasoning content captured from models that stream reasoning - // tokens separately (qwen3.6 etc.). Backend populates from message_parts; - // optional on the wire — frontend doesn't render this yet (reserved for - // a v1.14 UI surface). + // tokens separately (qwen3.6 etc.) and from external agents over ACP + // (agent_thought_chunk). Backend populates from message_parts; rendered by + // MessageBubble as a collapsible "Thinking" block. reasoning_parts?: Array<{ text: string }> | null; + // Coder wire shape pre-joins reasoning_parts into a single string + // (CoderPane/CoderMessageList) and streams it live via reasoning_delta + // frames. MessageBubble reads whichever of the two is present. + reasoning_text?: string | null; // v1.11: anchored rolling compaction fields. Optional on the wire so that // older API responses (or test fixtures) parse without explicit nulls. // summary — true on the assistant row that holds the active diff --git a/apps/web/src/components/AgentCommandsHint.tsx b/apps/web/src/components/AgentCommandsHint.tsx index 64fc741..04d9da7 100644 --- a/apps/web/src/components/AgentCommandsHint.tsx +++ b/apps/web/src/components/AgentCommandsHint.tsx @@ -9,6 +9,7 @@ interface Props { export function AgentCommandsHint({ commands }: Props) { const [open, setOpen] = useState(false); + const [expanded, setExpanded] = useState(null); if (commands.length === 0) return null; @@ -25,10 +26,19 @@ export function AgentCommandsHint({ commands }: Props) { {open && (