agent terminal: show full body for send tool calls

send was truncating to 80 chars in the tool_use row, hiding
anything past the first sentence. now renders as a collapsed
<details> like Write/Edit — summary still shows the recipient +
headline (so the operator can scan), expanding reveals the full
body unchanged.

recv side was already covered: the wake prompt shows the full
incoming body, and explicit recv() tool_result rows expand to
the full text via the existing collapsed-results path.
This commit is contained in:
müde 2026-05-15 21:35:48 +02:00
parent 3b532753b3
commit fd0e493bf5

View file

@ -614,17 +614,19 @@
default: return name + ' ' + trim(JSON.stringify(input), 200);
}
}
// Build a tool_use row for Write/Edit as a collapsed <details>
// showing the actual change. Returns null for any other tool so
// the caller falls back to the flat-row path.
// Build a "rich" tool_use row for tools whose input has a body
// we want the operator to see in full. Returns null for any
// other tool so the caller falls back to the flat-row path.
//
// Write: every input.content line is "+".
// Edit: old_string lines as "-", new_string lines as "+".
// Not a true diff algorithm — claude's Edit blocks are already a
// contiguous old/new pair, so a literal -/+ rendering is honest.
function renderFileWriteEdit(c) {
// mcp__hyperhive__send: collapsed <details>, full body text
// inside. Truncating to 80 chars in the summary was hiding
// anything past the first sentence.
function renderRichToolUse(c) {
const name = c.name || '';
const input = c.input || {};
if (name !== 'Write' && name !== 'Edit') return null;
if (name === 'Write' || name === 'Edit') {
const path = input.file_path || '?';
let body;
let plus = 0;
@ -647,6 +649,17 @@
+ (minus ? '-' + minus + ' ' : '') + '+' + plus;
return detailsDiff('tool-use', summary, body);
}
if (name === 'mcp__hyperhive__send') {
const to = input.to || '?';
const body = String(input.body || '');
const headline = body.replace(/\s+/g, ' ').trim().slice(0, 80);
const lines = body.split('\n').length;
const summary = '→ send → ' + to + (lines > 1 ? ` · ${lines}L` : '')
+ (headline ? ' · ' + headline + (body.length > 80 ? '…' : '') : '');
return details('tool-use', summary, body);
}
return null;
}
function detailsDiff(cls, summary, body) {
clearPlaceholder();
const d = document.createElement('details');
@ -705,9 +718,10 @@
row('thinking', txt ? '· ' + txt : '· thinking …');
}
else if (c.type === 'tool_use') {
// Write/Edit get a collapsed +/- diff body; everything
// else stays as the flat row produced by fmtToolUse.
if (!renderFileWriteEdit(c)) {
// Write/Edit get a +/- diff body; send gets a collapsed
// <details> with the full body text; everything else
// stays as the flat row produced by fmtToolUse.
if (!renderRichToolUse(c)) {
row('tool-use', '→ ' + fmtToolUse(c));
}
}