diff --git a/hive-ag3nt/assets/app.js b/hive-ag3nt/assets/app.js index f4670fd..98ea546 100644 --- a/hive-ag3nt/assets/app.js +++ b/hive-ag3nt/assets/app.js @@ -614,38 +614,51 @@ default: return name + ' ' + trim(JSON.stringify(input), 200); } } - // Build a tool_use row for Write/Edit as a collapsed
- // 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
, 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; - const path = input.file_path || '?'; - let body; - let plus = 0; - let minus = 0; - if (name === 'Write') { - const content = String(input.content || ''); - const lines = content.split('\n'); - plus = lines.length; - body = lines.map(l => '+ ' + l).join('\n'); - } else { - const oldLines = String(input.old_string || '').split('\n'); - const newLines = String(input.new_string || '').split('\n'); - minus = oldLines.length; - plus = newLines.length; - body = oldLines.map(l => '- ' + l).join('\n') - + '\n' - + newLines.map(l => '+ ' + l).join('\n'); + if (name === 'Write' || name === 'Edit') { + const path = input.file_path || '?'; + let body; + let plus = 0; + let minus = 0; + if (name === 'Write') { + const content = String(input.content || ''); + const lines = content.split('\n'); + plus = lines.length; + body = lines.map(l => '+ ' + l).join('\n'); + } else { + const oldLines = String(input.old_string || '').split('\n'); + const newLines = String(input.new_string || '').split('\n'); + minus = oldLines.length; + plus = newLines.length; + body = oldLines.map(l => '- ' + l).join('\n') + + '\n' + + newLines.map(l => '+ ' + l).join('\n'); + } + const summary = '→ ' + name + ' ' + path + ' · ' + + (minus ? '-' + minus + ' ' : '') + '+' + plus; + return detailsDiff('tool-use', summary, body); } - const summary = '→ ' + name + ' ' + path + ' · ' - + (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(); @@ -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 + //
with the full body text; everything else + // stays as the flat row produced by fmtToolUse. + if (!renderRichToolUse(c)) { row('tool-use', '→ ' + fmtToolUse(c)); } }