import { html } from "@mariozechner/mini-lit"; import type { ToolResultMessage } from "@mariozechner/pi-ai"; import { SquareTerminal } from "lucide"; import { i18n } from "../../utils/i18n.js"; import { renderHeader } from "../renderer-registry.js"; import type { ToolRenderer, ToolRenderResult } from "../types.js"; interface BashParams { command: string; } // Bash tool has undefined details (only uses output) export class BashRenderer implements ToolRenderer { render(params: BashParams | undefined, result: ToolResultMessage | undefined): ToolRenderResult { const state = result ? (result.isError ? "error" : "complete") : "inprogress"; // With result: show command + output if (result && params?.command) { const output = result.output || ""; const combined = output ? `> ${params.command}\n\n${output}` : `> ${params.command}`; return { content: html`
${renderHeader(state, SquareTerminal, i18n("Running command..."))}
`, isCustom: false, }; } // Just params (streaming or waiting) if (params?.command) { return { content: html`
${renderHeader(state, SquareTerminal, i18n("Running command..."))} ${params.command}`}>
`, isCustom: false, }; } // No params yet return { content: renderHeader(state, SquareTerminal, i18n("Waiting for command...")), isCustom: false }; } }