- Extract ArtifactsToolRenderer from ArtifactsPanel into standalone renderer - Fix ChatPanel to register ArtifactsToolRenderer instead of panel - Implement command-specific rendering logic (create/update/rewrite/get/logs/delete) - Create reusable Console component with copy button and autoscroll toggle - Replace custom console implementation with ExpandableSection and Console - Fix Lit reactivity for HtmlArtifact logs using spread operator - Add Lucide icons (FileCode2, ChevronsDown, Lock) for UI consistency - Follow skill.ts patterns with renderHeader and state handling - Add i18n strings for all artifact actions and console features
30 lines
1014 B
TypeScript
30 lines
1014 B
TypeScript
import type { TemplateResult } from "@mariozechner/mini-lit";
|
|
import type { ToolResultMessage } from "@mariozechner/pi-ai";
|
|
import { getToolRenderer, registerToolRenderer } from "./renderer-registry.js";
|
|
import { BashRenderer } from "./renderers/BashRenderer.js";
|
|
import { DefaultRenderer } from "./renderers/DefaultRenderer.js";
|
|
import "./javascript-repl.js"; // Auto-registers the renderer
|
|
|
|
// Register all built-in tool renderers
|
|
registerToolRenderer("bash", new BashRenderer());
|
|
|
|
const defaultRenderer = new DefaultRenderer();
|
|
|
|
/**
|
|
* Render tool - unified function that handles params, result, and streaming state
|
|
*/
|
|
export function renderTool(
|
|
toolName: string,
|
|
params: any | undefined,
|
|
result: ToolResultMessage | undefined,
|
|
isStreaming?: boolean,
|
|
): TemplateResult {
|
|
const renderer = getToolRenderer(toolName);
|
|
if (renderer) {
|
|
return renderer.render(params, result, isStreaming);
|
|
}
|
|
return defaultRenderer.render(params, result, isStreaming);
|
|
}
|
|
|
|
export { registerToolRenderer, getToolRenderer };
|