diff --git a/webui/src/web-components/demo/mermaid-test/index.html b/webui/src/web-components/demo/mermaid-test/index.html
index e2fd202..3635122 100644
--- a/webui/src/web-components/demo/mermaid-test/index.html
+++ b/webui/src/web-components/demo/mermaid-test/index.html
@@ -1,34 +1,39 @@
-<!DOCTYPE html>
+<!doctype html>
 <html lang="en">
-<head>
-  <meta charset="UTF-8">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0">
-  <title>Mermaid Diagram Test</title>
-  <script type="module" src="./mermaid-test.ts"></script>
-  <style>
-    body {
-      font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
-      padding: 20px;
-      max-width: 1000px;
-      margin: 0 auto;
-    }
-    h1 {
-      color: #333;
-    }
-    .container {
-      border: 1px solid #ddd;
-      border-radius: 4px;
-      padding: 20px;
-      margin: 20px 0;
-    }
-  </style>
-</head>
-<body>
-  <h1>Mermaid Diagram Testing</h1>
-  <p>This page tests the integration of Mermaid diagrams in the markdown renderer.</p>
-  
-  <div class="container">
-    <mermaid-test-component></mermaid-test-component>
-  </div>
-</body>
-</html>
\ No newline at end of file
+  <head>
+    <meta charset="UTF-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>Mermaid Diagram Test</title>
+    <script type="module" src="./mermaid-test.ts"></script>
+    <style>
+      body {
+        font-family:
+          -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu,
+          Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
+        padding: 20px;
+        max-width: 1000px;
+        margin: 0 auto;
+      }
+      h1 {
+        color: #333;
+      }
+      .container {
+        border: 1px solid #ddd;
+        border-radius: 4px;
+        padding: 20px;
+        margin: 20px 0;
+      }
+    </style>
+  </head>
+  <body>
+    <h1>Mermaid Diagram Testing</h1>
+    <p>
+      This page tests the integration of Mermaid diagrams in the markdown
+      renderer.
+    </p>
+
+    <div class="container">
+      <mermaid-test-component></mermaid-test-component>
+    </div>
+  </body>
+</html>
diff --git a/webui/src/web-components/demo/mermaid-test/mermaid-test.ts b/webui/src/web-components/demo/mermaid-test/mermaid-test.ts
index 7d8e04f..b697d92 100644
--- a/webui/src/web-components/demo/mermaid-test/mermaid-test.ts
+++ b/webui/src/web-components/demo/mermaid-test/mermaid-test.ts
@@ -1,9 +1,9 @@
-import { html, css, LitElement } from 'lit';
-import { customElement } from 'lit/decorators.js';
-import '../../sketch-timeline-message.ts';
+import { html, css, LitElement } from "lit";
+import { customElement } from "lit/decorators.js";
+import "../../sketch-timeline-message.ts";
 // Using simple objects matching the AgentMessage interface
 
-@customElement('mermaid-test-component')
+@customElement("mermaid-test-component")
 export class MermaidTestComponent extends LitElement {
   static styles = css`
     :host {
@@ -21,8 +21,8 @@
   render() {
     // Create a sample message with Mermaid diagrams
     const flowchartMessage = {
-      id: 'test-1',
-      type: 'agent',
+      id: "test-1",
+      type: "agent",
       content: `# Mermaid Flowchart Example
 
 This is a test of a flowchart diagram in Mermaid syntax:
@@ -41,8 +41,8 @@
     };
 
     const sequenceDiagramMessage = {
-      id: 'test-2',
-      type: 'agent',
+      id: "test-2",
+      type: "agent",
       content: `# Mermaid Sequence Diagram Example
 
 Here's a sequence diagram showing a typical HTTP request:
@@ -64,8 +64,8 @@
     };
 
     const classDiagramMessage = {
-      id: 'test-3',
-      type: 'agent',
+      id: "test-3",
+      type: "agent",
       content: `# Mermaid Class Diagram Example
 
 A simple class diagram in Mermaid:
@@ -91,8 +91,8 @@
     };
 
     const normalMarkdownMessage = {
-      id: 'test-4',
-      type: 'agent',
+      id: "test-4",
+      type: "agent",
       content: `# Regular Markdown
 
 This is regular markdown with:
@@ -114,22 +114,30 @@
     return html`
       <div class="test-section">
         <h2>Flowchart Diagram Test</h2>
-        <sketch-timeline-message .message=${flowchartMessage}></sketch-timeline-message>
+        <sketch-timeline-message
+          .message=${flowchartMessage}
+        ></sketch-timeline-message>
       </div>
-      
+
       <div class="test-section">
         <h2>Sequence Diagram Test</h2>
-        <sketch-timeline-message .message=${sequenceDiagramMessage}></sketch-timeline-message>
+        <sketch-timeline-message
+          .message=${sequenceDiagramMessage}
+        ></sketch-timeline-message>
       </div>
 
       <div class="test-section">
         <h2>Class Diagram Test</h2>
-        <sketch-timeline-message .message=${classDiagramMessage}></sketch-timeline-message>
+        <sketch-timeline-message
+          .message=${classDiagramMessage}
+        ></sketch-timeline-message>
       </div>
 
       <div class="test-section">
         <h2>Normal Markdown Test</h2>
-        <sketch-timeline-message .message=${normalMarkdownMessage}></sketch-timeline-message>
+        <sketch-timeline-message
+          .message=${normalMarkdownMessage}
+        ></sketch-timeline-message>
       </div>
     `;
   }
diff --git a/webui/src/web-components/demo/sketch-timeline-message.demo.html b/webui/src/web-components/demo/sketch-timeline-message.demo.html
index add83a1..6b9dbf5 100644
--- a/webui/src/web-components/demo/sketch-timeline-message.demo.html
+++ b/webui/src/web-components/demo/sketch-timeline-message.demo.html
@@ -19,7 +19,7 @@
           content: "a tool use message",
         },
         {
-          type:"agent",
+          type: "agent",
           content: `Mermaid Sequence Diagram Example
 \`\`\`mermaid
 sequenceDiagram
diff --git a/webui/src/web-components/sketch-timeline-message.ts b/webui/src/web-components/sketch-timeline-message.ts
index b9c1455..1e950d5 100644
--- a/webui/src/web-components/sketch-timeline-message.ts
+++ b/webui/src/web-components/sketch-timeline-message.ts
@@ -418,7 +418,7 @@
       margin-block-start: 0.5em;
       margin-block-end: 0.5em;
     }
-    
+
     /* Mermaid diagram styling */
     .mermaid-container {
       margin: 1em 0;
@@ -427,7 +427,7 @@
       border-radius: 4px;
       overflow-x: auto;
     }
-    
+
     .mermaid {
       text-align: center;
     }
@@ -441,9 +441,9 @@
     // Initialize mermaid with specific config
     mermaid.initialize({
       startOnLoad: false,
-      theme: 'default',
-      securityLevel: 'loose', // Allows more flexibility but be careful with user-generated content
-      fontFamily: 'monospace'
+      theme: "default",
+      securityLevel: "loose", // Allows more flexibility but be careful with user-generated content
+      fontFamily: "monospace",
     });
   }
 
@@ -451,43 +451,44 @@
   connectedCallback() {
     super.connectedCallback();
   }
-  
+
   // After the component is updated and rendered, render any mermaid diagrams
   updated(changedProperties: Map<string, unknown>) {
     super.updated(changedProperties);
     this.renderMermaidDiagrams();
   }
-  
+
   // Render mermaid diagrams after the component is updated
   renderMermaidDiagrams() {
     // Add a small delay to ensure the DOM is fully rendered
     setTimeout(() => {
       // Find all mermaid containers in our shadow root
-      const containers = this.shadowRoot?.querySelectorAll('.mermaid');
+      const containers = this.shadowRoot?.querySelectorAll(".mermaid");
       if (!containers || containers.length === 0) return;
-      
+
       // Process each mermaid diagram
-      containers.forEach(container => {
+      containers.forEach((container) => {
         const id = container.id;
-        const code = container.textContent || '';
+        const code = container.textContent || "";
         if (!code || !id) return; // Use return for forEach instead of continue
-        
+
         try {
           // Clear any previous content
           container.innerHTML = code;
-          
+
           // Render the mermaid diagram using promise
-          mermaid.render(`${id}-svg`, code)
+          mermaid
+            .render(`${id}-svg`, code)
             .then(({ svg }) => {
               container.innerHTML = svg;
             })
-            .catch(err => {
-              console.error('Error rendering mermaid diagram:', err);
+            .catch((err) => {
+              console.error("Error rendering mermaid diagram:", err);
               // Show the original code as fallback
               container.innerHTML = `<pre>${code}</pre>`;
             });
         } catch (err) {
-          console.error('Error processing mermaid diagram:', err);
+          console.error("Error processing mermaid diagram:", err);
           // Show the original code as fallback
           container.innerHTML = `<pre>${code}</pre>`;
         }
@@ -505,13 +506,13 @@
       // Create a custom renderer
       const renderer = new Renderer();
       const originalCodeRenderer = renderer.code.bind(renderer);
-      
+
       // Override the code renderer to handle mermaid diagrams
-      renderer.code = function({ text, lang, escaped }: Tokens.Code): string {
-        if (lang === 'mermaid') {
+      renderer.code = function ({ text, lang, escaped }: Tokens.Code): string {
+        if (lang === "mermaid") {
           // Generate a unique ID for this diagram
           const id = `mermaid-diagram-${Math.random().toString(36).substring(2, 10)}`;
-          
+
           // Just create the container and mermaid div - we'll render it in the updated() lifecycle method
           return `<div class="mermaid-container">
                    <div class="mermaid" id="${id}">${text}</div>
@@ -520,13 +521,13 @@
         // Default rendering for other code blocks
         return originalCodeRenderer({ text, lang, escaped });
       };
-      
+
       // Set markdown options for proper code block highlighting and safety
       const markedOptions: MarkedOptions = {
         gfm: true, // GitHub Flavored Markdown
         breaks: true, // Convert newlines to <br>
         async: false,
-        renderer: renderer
+        renderer: renderer,
         // DOMPurify is recommended for production, but not included in this implementation
       };
       return marked.parse(markdownContent, markedOptions) as string;
