Add working message vibes for TUI.

Provides context-aware working status messages based on prompt keywords
and tool names, with random emoji for visual interest.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
ace-pm 2026-04-15 16:17:04 +02:00
parent 7e03021b25
commit c18f67d278

View file

@ -0,0 +1,67 @@
import type { ExtensionContext } from "@sf-run/pi-coding-agent";
const EMOJIS = ["✨", "🔥", "🚀", "⚡", "🧠", "🔍", "🛠️", "🎨", "🧪", "📦", "🔮", "🌊", "💫", "🎯", "🏗️", "📝"];
function emoji(): string {
return EMOJIS[Math.floor(Math.random() * EMOJIS.length)];
}
export function setVibeForPrompt(ctx: ExtensionContext, prompt: string): void {
if (!ctx.hasUI) return;
const p = prompt.toLowerCase();
if (p.includes("fix") || p.includes("bug") || p.includes("error") || p.includes("crash")) {
return ctx.ui.setWorkingMessage(`${emoji()} Hunting bugs...`);
}
if (p.includes("test") || p.includes("spec") || p.includes("jest") || p.includes("vitest")) {
return ctx.ui.setWorkingMessage(`${emoji()} Writing tests...`);
}
if (p.includes("refactor") || p.includes("clean") || p.includes("simplify")) {
return ctx.ui.setWorkingMessage(`${emoji()} Refactoring...`);
}
if (p.includes("doc") || p.includes("readme") || p.includes("comment")) {
return ctx.ui.setWorkingMessage(`${emoji()} Writing docs...`);
}
if (p.includes("deploy") || p.includes("release") || p.includes("publish")) {
return ctx.ui.setWorkingMessage(`${emoji()} Shipping it...`);
}
if (p.includes("review") || p.includes("audit") || p.includes("check")) {
return ctx.ui.setWorkingMessage(`${emoji()} Reviewing code...`);
}
if (p.includes("plan") || p.includes("design") || p.includes("architect")) {
return ctx.ui.setWorkingMessage(`${emoji()} Architecting...`);
}
if (p.includes("search") || p.includes("find") || p.includes("lookup")) {
return ctx.ui.setWorkingMessage(`${emoji()} Searching...`);
}
if (p.includes("implement") || p.includes("build") || p.includes("create")) {
return ctx.ui.setWorkingMessage(`${emoji()} Building...`);
}
ctx.ui.setWorkingMessage(`${emoji()} Thinking...`);
}
export function setVibeForTool(ctx: ExtensionContext, toolName: string): void {
if (!ctx.hasUI) return;
switch (toolName) {
case "bash":
return ctx.ui.setWorkingMessage(`${emoji()} Running shell spells...`);
case "write":
return ctx.ui.setWorkingMessage(`${emoji()} Inscribing files...`);
case "edit":
return ctx.ui.setWorkingMessage(`${emoji()} Patching code...`);
case "read":
return ctx.ui.setWorkingMessage(`${emoji()} Reading the scrolls...`);
case "search-the-web":
return ctx.ui.setWorkingMessage(`${emoji()} Searching the web...`);
case "browser-navigate":
return ctx.ui.setWorkingMessage(`${emoji()} Browsing...`);
case "ask_user_questions":
return ctx.ui.setWorkingMessage(`${emoji()} Asking questions...`);
default:
return ctx.ui.setWorkingMessage(`${emoji()} Working...`);
}
}
export function clearVibe(ctx: ExtensionContext): void {
if (!ctx.hasUI) return;
ctx.ui.setWorkingMessage();
}