What happened
In the V2 TUI, a tool call without a dedicated renderer (plugin or MCP tool) is rendered by GenericTool. Its collapsed one-line summary prints every primitive input argument as key=value with no truncation or elision, so calling a tool with a long string argument dumps that entire string into the transcript without the user expanding anything.
Note: the tool body (output) is correctly collapsed (createSignal(false), opened on click). Only the summary line is affected.
Steps to reproduce
- Use any V2 TUI build (reproduced on
@opencode/cli 2.0.3, tag v2.0.3).
- Call a plugin/MCP tool whose input contains a long string, e.g. a document ingestion tool:
ingest_document(content="<~5 KB document text>")
- The collapsed row renders
ingest_document [content=<the whole ~5 KB document>], soft-wrapped across many lines, with no click required.
Tools whose long payload is in the output (not the input) are unaffected, because the body stays behind the toggle. Any tool taking a large string argument hits this.
Expected behavior
The collapsed summary should truncate/elide long argument values (e.g. ingest_document [content="Hallazgos del 2026-09-13…"]) and keep the full input behind the existing expand toggle, so a single tool call occupies a single line.
Root cause
packages/tui/src/routes/session/index.tsx: GenericTool renders genericToolSummary(props.tool, props.input).
genericToolSummary calls primitiveInputSummary(input), which builds [key=value, ...] from all primitive arguments with no truncation, no slice, no ellipsis.
InlineToolRow renders its children inside <text flexGrow={1}> with no maxWidth (the maxWidth="100%" only applies to InlineToolLabel, which GenericTool does not use), so the text soft-wraps over the full line budget.
Suggested fix
Truncate/elide values in primitiveInputSummary/genericToolSummary (e.g. a per-argument character cap plus …), and/or make InlineToolRow respect the available viewport width. This affects every plugin and MCP tool, since any name outside the hardcoded renderer set falls through to GenericTool.
Related
Version
@opencode/cli 2.0.3 (channel latest), Windows, TUI (no desktop app).
What happened
In the V2 TUI, a tool call without a dedicated renderer (plugin or MCP tool) is rendered by
GenericTool. Its collapsed one-line summary prints every primitive input argument askey=valuewith no truncation or elision, so calling a tool with a long string argument dumps that entire string into the transcript without the user expanding anything.Note: the tool body (output) is correctly collapsed (
createSignal(false), opened on click). Only the summary line is affected.Steps to reproduce
@opencode/cli2.0.3, tagv2.0.3).ingest_document(content="<~5 KB document text>")ingest_document [content=<the whole ~5 KB document>], soft-wrapped across many lines, with no click required.Tools whose long payload is in the output (not the input) are unaffected, because the body stays behind the toggle. Any tool taking a large string argument hits this.
Expected behavior
The collapsed summary should truncate/elide long argument values (e.g.
ingest_document [content="Hallazgos del 2026-09-13…"]) and keep the full input behind the existing expand toggle, so a single tool call occupies a single line.Root cause
packages/tui/src/routes/session/index.tsx:GenericToolrendersgenericToolSummary(props.tool, props.input).genericToolSummarycallsprimitiveInputSummary(input), which builds[key=value, ...]from all primitive arguments with no truncation, no slice, no ellipsis.InlineToolRowrenders its children inside<text flexGrow={1}>with nomaxWidth(themaxWidth="100%"only applies toInlineToolLabel, whichGenericTooldoes not use), so the text soft-wraps over the full line budget.Suggested fix
Truncate/elide values in
primitiveInputSummary/genericToolSummary(e.g. a per-argument character cap plus…), and/or makeInlineToolRowrespect the available viewport width. This affects every plugin and MCP tool, since any name outside the hardcoded renderer set falls through toGenericTool.Related
session.toggle.generic_tool_outputis also absent from the currentv2.0.3/betakeybind config.Version
@opencode/cli2.0.3 (channellatest), Windows, TUI (no desktop app).