import { Ora } from "ora" export function createStreamingDisplay() { let buffer = "" let lastUpdateTime = 0 const UPDATE_INTERVAL_MS = 50 return { onToken(token: string): void { buffer += token const now = Date.now() if (now - lastUpdateTime > UPDATE_INTERVAL_MS) { process.stdout.write(token) lastUpdateTime = now } }, flush(): void { if (buffer) { process.stdout.write("\n") buffer = "" } }, getBuffer(): string { return buffer }, } } export function showSpinner(text: string): Ora { const ora = require("ora") return ora({ text, color: "cyan" }).start() } export function formatToolCall(name: string, input: Record): string { const summary = summarizeToolInput(name, input) return ` \x1b[33m*\x1b[0m ${name}${summary ? `(${summary})` : ""}` } function summarizeToolInput(name: string, input: Record): string { switch (name.toLowerCase()) { case "bash": { const cmd = String(input.command || "") return cmd.length > 60 ? cmd.slice(0, 57) + "..." : cmd } case "read": case "write": case "edit": return String(input.file_path || input.path || "") case "glob": return String(input.pattern || "") case "grep": return String(input.pattern || "") default: return "" } } export function formatToolResult(name: string, output: unknown): string { if (typeof output === "string") { return output.length > 200 ? output.slice(0, 197) + "..." : output } return JSON.stringify(output).slice(0, 200) }