Something went wrong. Try again.
more up to date at codeberg https://codeberg.org/cowie/tau.git
Something went wrong. Try again.
1.9 kB · 55 lines
TypeScript
at main
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556import { Box, Markdown, type MarkdownTheme, Text } from "@earendil-works/pi-tui";import type { ParsedSkillBlock } from "../../../core/agent-session.ts";import { getMarkdownTheme, theme } from "../theme/theme.ts";import { keyText } from "./keybinding-hints.ts";
/** * Component that renders a skill invocation message with collapsed/expanded state. * Uses same background color as custom messages for visual consistency. * Only renders the skill block itself - user message is rendered separately. */export class SkillInvocationMessageComponent extends Box { private expanded = false; private skillBlock: ParsedSkillBlock; private markdownTheme: MarkdownTheme;
constructor(skillBlock: ParsedSkillBlock, markdownTheme: MarkdownTheme = getMarkdownTheme()) { super(1, 1, (t) => theme.bg("customMessageBg", t)); this.skillBlock = skillBlock; this.markdownTheme = markdownTheme; this.updateDisplay(); }
setExpanded(expanded: boolean): void { this.expanded = expanded; this.updateDisplay(); }
override invalidate(): void { super.invalidate(); this.updateDisplay(); }
private updateDisplay(): void { this.clear();
if (this.expanded) { // Expanded: label + skill name header + full content const label = theme.fg("customMessageLabel", `\x1b[1m[skill]\x1b[22m`); this.addChild(new Text(label, 0, 0)); const header = `**${this.skillBlock.name}**\n\n`; this.addChild( new Markdown(header + this.skillBlock.content, 0, 0, this.markdownTheme, { color: (text: string) => theme.fg("customMessageText", text), }), ); } else { // Collapsed: single line - [skill] name (hint to expand) const line = theme.fg("customMessageLabel", `\x1b[1m[skill]\x1b[22m `) + theme.fg("customMessageText", this.skillBlock.name) + theme.fg("dim", ` (${keyText("app.tools.expand")} to expand)`); this.addChild(new Text(line, 0, 0)); } }}