| import { css, html, LitElement } from "lit"; |
| import { unsafeHTML } from "lit/directives/unsafe-html.js"; |
| import { customElement, property } from "lit/decorators.js"; |
| import { ToolCall } from "../types"; |
| import { marked } from "marked"; |
| |
| // Safely renders markdown with fallback to plain text on failure |
| function renderMarkdown(markdownContent: string): string { |
| try { |
| return marked.parse(markdownContent, { |
| gfm: true, |
| breaks: true, |
| async: false, |
| }) as string; |
| } catch (error) { |
| console.error("Error rendering markdown:", error); |
| return markdownContent; |
| } |
| } |
| |
| @customElement("sketch-tool-card-knowledge-base") |
| export class SketchToolCardKnowledgeBase extends LitElement { |
| @property() toolCall: ToolCall; |
| @property() open: boolean; |
| |
| static styles = css` |
| .summary-text { |
| font-style: italic; |
| } |
| .knowledge-content { |
| background: rgb(246, 248, 250); |
| border-radius: 6px; |
| padding: 12px; |
| margin-top: 10px; |
| max-height: 300px; |
| overflow-y: auto; |
| border: 1px solid #e1e4e8; |
| } |
| .topic-label { |
| font-weight: bold; |
| color: #24292e; |
| } |
| .icon { |
| margin-right: 6px; |
| } |
| `; |
| |
| render() { |
| const inputData = JSON.parse(this.toolCall?.input || "{}"); |
| const topic = inputData.topic || "unknown"; |
| const resultText = this.toolCall?.result_message?.tool_result || ""; |
| |
| return html` |
| <sketch-tool-card .open=${this.open} .toolCall=${this.toolCall}> |
| <span slot="summary" class="summary-text"> |
| <span class="icon">📚</span> Knowledge: ${topic} |
| </span> |
| <div slot="input"> |
| <div><span class="topic-label">Topic:</span> ${topic}</div> |
| </div> |
| ${this.toolCall?.result_message?.tool_result |
| ? html`<div slot="result"> |
| <div class="knowledge-content"> |
| ${unsafeHTML(renderMarkdown(resultText))} |
| </div> |
| </div>` |
| : ""} |
| </sketch-tool-card> |
| `; |
| } |
| } |
| |
| declare global { |
| interface HTMLElementTagNameMap { |
| "sketch-tool-card-knowledge-base": SketchToolCardKnowledgeBase; |
| } |
| } |