{title}
diff --git a/web/app/dashboard/ai-workflows/_components/workflow-node-icon.tsx b/web/app/dashboard/ai-workflows/_components/workflow-node-icon.tsx
index 2960962..0513dcc 100644
--- a/web/app/dashboard/ai-workflows/_components/workflow-node-icon.tsx
+++ b/web/app/dashboard/ai-workflows/_components/workflow-node-icon.tsx
@@ -1,17 +1,19 @@
import { cn } from "@/lib/utils"
-import { getWorkflowNodeMeta } from "./workflow-node-meta"
+import { FileTextIcon, type LucideIcon } from "lucide-react"
+import * as LucideIcons from "lucide-react"
+
+const lucideIconComponents = LucideIcons as unknown as Record
export function WorkflowNodeIcon({
- type,
+ icon,
size = "md",
className,
}: {
- type: string
+ icon?: string
size?: "sm" | "md"
className?: string
}) {
- const meta = getWorkflowNodeMeta(type)
- const Icon = meta.icon
+ const Icon = icon ? lucideIconComponents[icon] ?? FileTextIcon : FileTextIcon
return (
= {
- start: { icon: PlayCircleIcon },
- conversation_understanding: { icon: MessageCircleIcon },
- reply_policy: { icon: ShieldCheckIcon },
- knowledge_retrieve: { icon: BookOpenIcon },
- answerability_gate: { icon: HelpCircleIcon },
- llm_reply: { icon: BotIcon },
- condition: { icon: GitBranchIcon },
- analyze_conversation: { icon: SearchIcon },
- prepare_ticket_draft: { icon: ClipboardListIcon },
- human_confirm: { icon: UserCheckIcon },
- create_ticket: { icon: TicketIcon },
- handoff_to_human: { icon: HeadphonesIcon },
- send_reply: { icon: SendIcon },
- end: { icon: FlagIcon },
-}
-
-export function getWorkflowNodeMeta(type: string): WorkflowNodeMeta {
- return workflowNodeMetaByType[type] ?? { icon: FileTextIcon }
-}
diff --git a/web/app/dashboard/ai-workflows/_components/workflow-node-palette.tsx b/web/app/dashboard/ai-workflows/_components/workflow-node-palette.tsx
index 575d0e9..2053bb3 100644
--- a/web/app/dashboard/ai-workflows/_components/workflow-node-palette.tsx
+++ b/web/app/dashboard/ai-workflows/_components/workflow-node-palette.tsx
@@ -24,7 +24,7 @@ export function WorkflowNodePalette({
className="flex w-full items-start gap-2 rounded-md px-2 py-2 text-left text-sm transition-colors hover:bg-muted"
onClick={() => onAddNode(spec)}
>
-
+
{spec.title || spec.type}
{spec.description}
diff --git a/web/lib/api/admin.ts b/web/lib/api/admin.ts
index 0a70589..658c774 100644
--- a/web/lib/api/admin.ts
+++ b/web/lib/api/admin.ts
@@ -380,6 +380,7 @@ export type AIWorkflowNodeSpec = {
type: string
title: string
description: string
+ icon: string
riskLevel: "low" | "medium" | "high"
interruptible: boolean
requiresConfirmationPredecessor: boolean