diff --git a/vibn-frontend/components/vibn-chat/chat-panel.tsx b/vibn-frontend/components/vibn-chat/chat-panel.tsx
index 6c9d484..5260661 100644
--- a/vibn-frontend/components/vibn-chat/chat-panel.tsx
+++ b/vibn-frontend/components/vibn-chat/chat-panel.tsx
@@ -302,7 +302,7 @@ function escapeHtmlAttr(s: string): string {
}
const LINK_STYLE =
- "color:#4338ca;text-decoration:underline;text-underline-offset:2px;overflow-wrap:anywhere;word-break:break-all";
+ "color:#4f46e5;text-decoration:none;font-weight:500;border-bottom:1px solid #c7d2fe;transition:all 0.2s ease;overflow-wrap:anywhere;word-break:break-all";
/** [label](https://...) — href restricted to http(s) */
function markdownLinksToHtml(s: string): string {
@@ -963,6 +963,31 @@ const suggestionChipStyle: React.CSSProperties = {
transition: "all 0.1s ease",
};
+import {
+ FileText,
+ Terminal,
+ Search,
+ Globe,
+ FolderTree,
+ Wrench,
+ CheckCircle2,
+ XCircle,
+ Database,
+ CloudUpload
+} from "lucide-react";
+
+function getToolIcon(name: string) {
+ const n = name.toLowerCase();
+ if (n.includes("read") || n.includes("edit") || n.includes("write")) return ;
+ if (n.includes("shell") || n.includes("exec") || n.includes("command")) return ;
+ if (n.includes("search") || n.includes("grep") || n.includes("find")) return ;
+ if (n.includes("fetch") || n.includes("curl") || n.includes("browser")) return ;
+ if (n.includes("list") || n.includes("tree")) return ;
+ if (n.includes("deploy") || n.includes("ship")) return ;
+ if (n.includes("database") || n.includes("sql")) return ;
+ return ;
+}
+
export function ChatPanel({
structural = false,
artifactSlot,