diff --git a/packages/ui/src/components/tool-call/renderers/index.ts b/packages/ui/src/components/tool-call/renderers/index.ts index b2dde81b..366e9592 100644 --- a/packages/ui/src/components/tool-call/renderers/index.ts +++ b/packages/ui/src/components/tool-call/renderers/index.ts @@ -5,6 +5,7 @@ import { editRenderer } from "./edit" import { applyPatchRenderer } from "./apply-patch" import { patchRenderer } from "./patch" import { readRenderer } from "./read" +import { skillRenderer } from "./skill" import { taskRenderer } from "./task" import { todoRenderer } from "./todo" import { webfetchRenderer } from "./webfetch" @@ -15,6 +16,7 @@ import { searchRenderer } from "./search" const TOOL_RENDERERS: ToolRenderer[] = [ bashRenderer, + skillRenderer, readRenderer, writeRenderer, editRenderer, diff --git a/packages/ui/src/components/tool-call/renderers/read.tsx b/packages/ui/src/components/tool-call/renderers/read.tsx index a6aef269..ff37e2e8 100644 --- a/packages/ui/src/components/tool-call/renderers/read.tsx +++ b/packages/ui/src/components/tool-call/renderers/read.tsx @@ -12,7 +12,7 @@ function getReadPath(input: Record): string { } export const readRenderer: ToolRenderer = { - tools: ["read", "skill"], + tools: ["read"], getSearchText: getReadToolSearchText, getAction: () => tGlobal("toolCall.renderer.action.readingFile"), getTitle({ toolName, toolState }) { diff --git a/packages/ui/src/components/tool-call/renderers/skill.tsx b/packages/ui/src/components/tool-call/renderers/skill.tsx new file mode 100644 index 00000000..adaa2cc6 --- /dev/null +++ b/packages/ui/src/components/tool-call/renderers/skill.tsx @@ -0,0 +1,28 @@ +import type { ToolRenderer } from "../types" +import { ensureMarkdownContent, formatUnknown, getToolName } from "../utils" +import { getDefaultToolSearchText } from "../search-text" + +export const skillRenderer: ToolRenderer = { + tools: ["skill"], + getSearchText: getDefaultToolSearchText, + getTitle() { + return getToolName("skill") + }, + getOutputChrome({ toolState }) { + const state = toolState() + if (!state || state.status !== "completed") return undefined + + const output = formatUnknown(state.output)?.text ?? null + if (!output) return undefined + return { copyText: output, suppressInnerHeader: true } + }, + renderBody({ toolState, renderMarkdown }) { + const state = toolState() + if (!state || state.status !== "completed") return null + + const output = formatUnknown(state.output)?.text ?? null + const content = ensureMarkdownContent(output, undefined, false) + if (!content) return null + return
{renderMarkdown({ content })}
+ }, +} diff --git a/packages/ui/src/components/tool-call/tool-title.ts b/packages/ui/src/components/tool-call/tool-title.ts index 85a7f931..1bae8526 100644 --- a/packages/ui/src/components/tool-call/tool-title.ts +++ b/packages/ui/src/components/tool-call/tool-title.ts @@ -5,6 +5,7 @@ import { enMessages } from "../../lib/i18n/messages/en" import { defaultRenderer } from "./renderers/default" import { bashRenderer } from "./renderers/bash" import { readRenderer } from "./renderers/read" +import { skillRenderer } from "./renderers/skill" import { writeRenderer } from "./renderers/write" import { editRenderer } from "./renderers/edit" import { applyPatchRenderer } from "./renderers/apply-patch" @@ -17,7 +18,7 @@ import { searchRenderer } from "./renderers/search" const TITLE_RENDERERS: Record = { bash: bashRenderer, read: readRenderer, - skill: readRenderer, + skill: skillRenderer, write: writeRenderer, edit: editRenderer, apply_patch: applyPatchRenderer, diff --git a/packages/ui/src/styles/messaging/tool-call.css b/packages/ui/src/styles/messaging/tool-call.css index 5f871b9f..391acfa6 100644 --- a/packages/ui/src/styles/messaging/tool-call.css +++ b/packages/ui/src/styles/messaging/tool-call.css @@ -1,6 +1,7 @@ /* Tool call rendering */ @import "./tool-call/todo.css"; @import "./tool-call/task.css"; +@import "./tool-call/skill.css"; .tool-call-message { @apply flex flex-col gap-0 p-0 w-full; diff --git a/packages/ui/src/styles/messaging/tool-call/skill.css b/packages/ui/src/styles/messaging/tool-call/skill.css new file mode 100644 index 00000000..81ccd713 --- /dev/null +++ b/packages/ui/src/styles/messaging/tool-call/skill.css @@ -0,0 +1,3 @@ +.tool-call-skill-body { + padding: var(--space-md); +}