@agno-hq/chat-react 0.3.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chat/index.cjs +82 -82
- package/dist/chat/index.d.cts +5 -2
- package/dist/chat/index.d.ts +5 -2
- package/dist/chat/index.js +1 -1
- package/dist/{chunk-JEPFGKHH.cjs → chunk-Q73XHL35.cjs} +19 -17
- package/dist/chunk-Q73XHL35.cjs.map +1 -0
- package/dist/{chunk-BZC2674Z.js → chunk-XTP3TMEZ.js} +20 -18
- package/dist/chunk-XTP3TMEZ.js.map +1 -0
- package/dist/index.cjs +83 -83
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-BZC2674Z.js.map +0 -1
- package/dist/chunk-JEPFGKHH.cjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/chat/useAgnoChat.ts","../src/cx.ts","../src/chat/ChatProvider.tsx","../src/chat/components/icons.tsx","../src/chat/components/ChatLauncher.tsx","../src/chat/components/FilePreview.tsx","../src/chat/components/ChatInput.tsx","../src/chat/components/Followups.tsx","../src/chat/components/HumanInput.tsx","../src/chat/sources.ts","../src/chat/highlight.ts","../src/chat/components/LinkPreview.tsx","../src/chat/components/Markdown.tsx","../src/chat/components/ToolCalls.tsx","../src/chat/components/BehindTheScenes.tsx","../src/chat/components/Citations.tsx","../src/chat/components/Multimedia.tsx","../src/chat/components/Message.tsx","../src/chat/components/MessageList.tsx","../src/chat/components/QuickPrompts.tsx","../src/chat/components/ChatWindow.tsx","../src/chat/components/providerIcons.tsx","../src/chat/components/EntityBadge.tsx","../src/chat/components/EntitySelector.tsx","../src/chat/components/SessionList.tsx","../src/chat/components/AgnoChat.tsx","../src/chat/components/Reasoning.tsx","../src/chat/components/MemberResponses.tsx","../src/chat/components/WorkflowSteps.tsx","../src/chat/components/StatusIndicator.tsx","../src/chat/components/EventLog.tsx"],"names":["status","activity","label","pausedTools","sessionId","useMemo","jsx","LucideChevronDown","LucideArrowUp","LucidePaperclip","LucideFileType2","LucideFileAudio","LucideFileVideo","LucideWrench","LucideBookOpen","LucideGlobe","LucideLink","LucideBrain","LucideBox","LucidePlus","LucideCheck","LucideCopy","icon","useState","useRef","useCallback","useEffect","jsxs","el","Fragment","clamp","createContext","useContext","loading","Glyph","createPortal","React","Link","Code","step","useId"],"mappings":"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","file":"chunk-BZC2674Z.js","sourcesContent":["/**\n * useAgnoChat — a headless React hook for running any Agno agent, team or\n * workflow against an AgentOS backend and consuming its streamed output.\n *\n * It owns the full chat lifecycle: sending a message, accumulating the streamed\n * response (content, tool calls, reasoning, media), surfacing live status and\n * the raw event feed, handling human-in-the-loop pauses, cancelling, and\n * rehydrating prior sessions.\n *\n * The hook renders nothing — pair it with the components in this package or\n * build your own UI from the values it returns.\n */\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport { AgnoClient } from '../core/client'\nimport {\n activityLabel,\n applyContentEvent,\n applyStepEvent,\n applySubRunEvent,\n isCancelledEvent,\n isCompletedEvent,\n isContentEvent,\n isErrorEvent,\n isFollowupsCompletedEvent,\n isPausedEvent,\n isReasoningCompletedEvent,\n isReasoningStepEvent,\n isStartedEvent,\n isStepEvent,\n isSubRunEvent,\n isToolEvent,\n mergeTool,\n toolsFromEvent,\n} from '../core/events'\nimport { sessionRunsToMessages } from '../core/session'\nimport type {\n ChatMessage,\n ChatStatus,\n Entity,\n EntityType,\n RunEventData,\n RunRequirement,\n SessionEntry,\n ToolExecution,\n} from '../core/types'\n\nexport interface UseAgnoChatOptions {\n /** AgentOS base URL, e.g. \"http://localhost:7777\". Ignored if `client` given. */\n baseUrl?: string\n /** A pre-built client (use this to share headers/auth across hooks). */\n client?: AgnoClient\n /** Extra request headers (e.g. Authorization). Used only with `baseUrl`. */\n headers?: Record<string, string>\n /** The agent/team/workflow to run. Can change between turns. */\n entity?: Entity | null\n /** User id sent with every run. */\n userId?: string\n /** Initial session id; updated automatically once the backend assigns one. */\n sessionId?: string\n /** Pre-seed the transcript (e.g. when restoring a session). */\n initialMessages?: ChatMessage[]\n /** Called with every raw run event, for logging/telemetry. */\n onEvent?: (event: RunEventData) => void\n /** Called when the session id changes (e.g. first run of a new session). */\n onSessionId?: (sessionId: string) => void\n}\n\nexport interface SendOptions {\n files?: File[]\n}\n\nexport interface UseAgnoChat {\n /** Full transcript, oldest first. */\n messages: ChatMessage[]\n /** The agent message currently streaming, or null when idle. */\n streamingMessage: ChatMessage | null\n /** Every raw event from the current/most-recent run, in arrival order. */\n events: RunEventData[]\n /** The most recent raw event. */\n currentEvent: RunEventData | null\n /** Lifecycle status of the active run. */\n status: ChatStatus\n /** Live \"what is it doing\" label, e.g. \"Calling get_weather\". */\n activity: string | null\n isStreaming: boolean\n isPaused: boolean\n error: string | null\n sessionId: string | undefined\n /** Type of the selected entity (agent / team / workflow). */\n entityType: EntityType | undefined\n\n /** Tool calls of the active/most-recent agent message. */\n tools: ToolExecution[]\n /** Reasoning steps of the active/most-recent agent message. */\n reasoning: ChatMessage['reasoning_steps']\n /** Outstanding human-in-the-loop requirements, if the run is paused. */\n pendingRequirements: RunRequirement[]\n\n /** Past sessions for the selected entity (populated by `refreshSessions`). */\n sessions: SessionEntry[]\n /**\n * Sessions with a run in flight — the visible one plus any still streaming\n * in the background after the user switched away.\n */\n streamingSessionIds: string[]\n sessionsLoading: boolean\n\n /** Send a user message and stream the response. */\n sendMessage: (message: string, options?: SendOptions) => Promise<void>\n /** Stop the active run. */\n cancel: () => Promise<void>\n /** Continue a paused run with explicitly resolved requirements. */\n continueRun: (resolution: {\n tools?: ToolExecution[]\n stepRequirements?: unknown[]\n }) => Promise<void>\n /** Approve or reject all pending tool confirmations, then continue. */\n respondToConfirmation: (approve: boolean) => Promise<void>\n /** Provide values for pending tool user-input fields, then continue. */\n submitUserInput: (values: Record<string, unknown>) => Promise<void>\n /** Fetch the list of past sessions for the selected entity. */\n refreshSessions: () => Promise<void>\n /** Load a past session's transcript into the chat. */\n loadSession: (sessionId: string) => Promise<void>\n /** Delete a past session, removing it from the list. */\n deleteSession: (sessionId: string) => Promise<void>\n /** Clear the transcript and start a new session. */\n reset: () => void\n /** Replace the transcript (e.g. after loading a session from the backend). */\n setMessages: React.Dispatch<React.SetStateAction<ChatMessage[]>>\n /** The underlying client, for ad-hoc calls (sessions, discovery, …). */\n client: AgnoClient\n}\n\nlet messageCounter = 0\nconst nextId = () => `m${Date.now().toString(36)}-${(messageCounter++).toString(36)}`\nconst nowSeconds = () => Math.floor(Date.now() / 1000)\n\n/** The state of a run that is streaming into the background. */\ninterface ParkedRun {\n sessionId: string\n messages: ChatMessage[]\n events: RunEventData[]\n status: ChatStatus\n activity: string | null\n error: string | null\n activeMsgId: string | null\n runId?: string\n bumped?: string\n}\n\ninterface RunChannel {\n controller: AbortController\n /** Non-null while the run streams in the background. */\n park: ParkedRun | null\n}\n\nexport function useAgnoChat(options: UseAgnoChatOptions): UseAgnoChat {\n const { entity, userId, onEvent, onSessionId } = options\n\n const client = useMemo(() => {\n if (options.client) return options.client\n return new AgnoClient({ baseUrl: options.baseUrl ?? '', headers: options.headers })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [options.client, options.baseUrl, JSON.stringify(options.headers)])\n\n const [messages, setMessages] = useState<ChatMessage[]>(options.initialMessages ?? [])\n const [events, setEvents] = useState<RunEventData[]>([])\n const [currentEvent, setCurrentEvent] = useState<RunEventData | null>(null)\n const [status, setStatus] = useState<ChatStatus>('idle')\n const [activity, setActivity] = useState<string | null>(null)\n const [error, setError] = useState<string | null>(null)\n const [sessionId, setSessionId] = useState<string | undefined>(options.sessionId)\n const [sessions, setSessions] = useState<SessionEntry[]>([])\n const [sessionsLoading, setSessionsLoading] = useState(false)\n\n /**\n * A run in flight. While it is attached its state lives in React state; once\n * the user navigates to another session the run is *parked* — it keeps\n * streaming into this snapshot instead of into the visible chat, and is\n * restored when they come back. AgentOS works the same way: changing session\n * does not stop the run.\n */\n const [backgroundRunning, setBackgroundRunning] = useState<string[]>([])\n\n // Refs that need to survive across stream callbacks without re-subscribing.\n const abortRef = useRef<AbortController | null>(null)\n const channelRef = useRef<RunChannel | null>(null)\n const backgroundRef = useRef<Map<string, RunChannel>>(new Map())\n const activeMsgIdRef = useRef<string | null>(null)\n const runIdRef = useRef<string | undefined>(undefined)\n const entityRef = useRef<Entity | null | undefined>(entity)\n const sessionIdRef = useRef<string | undefined>(options.sessionId)\n /** Name to give the session if this run turns out to have created one. */\n const pendingSessionNameRef = useRef<string | undefined>(undefined)\n /** Session already moved to the top of the list for the current run. */\n const bumpedSessionRef = useRef<string | undefined>(undefined)\n\n useEffect(() => {\n entityRef.current = entity\n }, [entity])\n useEffect(() => {\n sessionIdRef.current = sessionId\n }, [sessionId])\n\n /**\n * Seed the session list optimistically, the way AgentOS does: as soon as a\n * run reports its session id, the session appears at the top of the list —\n * named after the message that started it — instead of only showing up after\n * the next refresh.\n */\n const upsertSession = useCallback((id: string, createdAt?: number) => {\n setSessions((prev) => {\n const existing = prev.find((s) => s.session_id === id)\n const rest = prev.filter((s) => s.session_id !== id)\n const entry: SessionEntry = existing\n ? { ...existing, updated_at: nowSeconds() }\n : {\n session_id: id,\n session_name: pendingSessionNameRef.current || 'New Session',\n created_at: createdAt ?? nowSeconds(),\n updated_at: nowSeconds(),\n }\n return [entry, ...rest]\n })\n }, [])\n\n // Mirror of the visible state, so a run can be parked from a callback\n // without closing over stale values.\n const viewRef = useRef({ messages, events, status, activity, error })\n useEffect(() => {\n viewRef.current = { messages, events, status, activity, error }\n })\n\n /*\n * Writers: a parked run mutates its own snapshot; an attached run writes to\n * React state. Everything the stream touches goes through these.\n */\n const writeMessages = useCallback(\n (chan: RunChannel | null, fn: (prev: ChatMessage[]) => ChatMessage[]) => {\n const park = chan?.park\n if (park) park.messages = fn(park.messages)\n else setMessages(fn)\n },\n [],\n )\n const writeEvents = useCallback((chan: RunChannel | null, e: RunEventData) => {\n const park = chan?.park\n if (park) park.events = [...park.events, e]\n else {\n setEvents((prev) => [...prev, e])\n setCurrentEvent(e)\n }\n }, [])\n\n const writeStatus = useCallback((chan: RunChannel | null, status: ChatStatus) => {\n const park = chan?.park\n if (park) park.status = status\n else setStatus(status)\n }, [])\n const writeActivity = useCallback((chan: RunChannel | null, activity: string | null) => {\n const park = chan?.park\n if (park) park.activity = activity\n else setActivity(activity)\n }, [])\n const writeError = useCallback((chan: RunChannel | null, message: string | null) => {\n const park = chan?.park\n if (park) park.error = message\n else setError(message)\n }, [])\n\n /** Update the active agent message in place. */\n const patchActive = useCallback(\n (chan: RunChannel | null, patch: (m: ChatMessage) => ChatMessage) => {\n const id = chan?.park ? chan.park.activeMsgId : activeMsgIdRef.current\n if (!id) return\n writeMessages(chan, (prev) => prev.map((m) => (m.id === id ? patch(m) : m)))\n },\n [writeMessages],\n )\n\n /** Apply a single streamed event to the run's chat + status state. */\n const applyEvent = useCallback(\n (chan: RunChannel | null, e: RunEventData) => {\n writeEvents(chan, e)\n // Keep the run's own feed on its message, so each run carries the events\n // that produced it.\n patchActive(chan, (m) => ({ ...m, events: [...(m.events ?? []), e] }))\n onEvent?.(e)\n\n const label = activityLabel(e)\n if (label) writeActivity(chan, label)\n\n // Capture session/run ids as soon as we see them. A parked run must not\n // touch the session the user is now looking at.\n if (e.session_id && !chan?.park && e.session_id !== sessionIdRef.current) {\n sessionIdRef.current = e.session_id\n setSessionId(e.session_id)\n onSessionId?.(e.session_id)\n }\n // Once per run: put its session at the top of the list (creating the\n // entry if the backend just made the session).\n const bumped = chan?.park ? chan.park.bumped : bumpedSessionRef.current\n if (e.session_id && bumped !== e.session_id) {\n if (chan?.park) chan.park.bumped = e.session_id\n else bumpedSessionRef.current = e.session_id\n upsertSession(e.session_id, e.created_at)\n }\n if (e.run_id && !e.parent_run_id) {\n if (chan?.park) chan.park.runId = e.run_id\n else runIdRef.current = e.run_id\n }\n\n // Nested member (team) / executor (workflow) run — keep it out of the\n // main message content and accumulate it under `members`.\n if (isSubRunEvent(e)) {\n const kind = entityRef.current?.type === 'workflow' ? 'executor' : 'member'\n patchActive(chan, (m) => applySubRunEvent(m, e, kind))\n return\n }\n\n // Workflow step lifecycle / output.\n if (isStepEvent(e)) {\n patchActive(chan, (m) => applyStepEvent(m, e))\n return\n }\n\n if (isStartedEvent(e)) {\n patchActive(chan, (m) => ({\n ...m,\n run_id: e.run_id ?? m.run_id,\n session_id: e.session_id ?? m.session_id,\n status: 'streaming',\n }))\n return\n }\n\n if (isToolEvent(e)) {\n const incoming = toolsFromEvent(e)\n if (incoming.length) {\n patchActive(chan, (m) => {\n let tool_calls = m.tool_calls ?? []\n for (const t of incoming) tool_calls = mergeTool(tool_calls, t)\n return { ...m, tool_calls }\n })\n }\n return\n }\n\n if (isContentEvent(e)) {\n patchActive(chan, (m) => applyContentEvent(m, e))\n return\n }\n\n if (isReasoningStepEvent(e)) {\n const incoming = e.reasoning_steps ?? e.extra_data?.reasoning_steps ?? []\n if (incoming.length) {\n patchActive(chan, (m) => ({\n ...m,\n reasoning_steps: [...(m.reasoning_steps ?? []), ...incoming],\n }))\n }\n return\n }\n\n if (isReasoningCompletedEvent(e)) {\n const steps = e.reasoning_steps ?? e.extra_data?.reasoning_steps\n if (steps?.length) patchActive(chan, (m) => ({ ...m, reasoning_steps: steps }))\n return\n }\n\n // Arrives after the answer, before RunCompleted.\n if (isFollowupsCompletedEvent(e)) {\n const followups = e.followups\n if (followups?.length) patchActive(chan, (m) => ({ ...m, followups }))\n return\n }\n\n if (isPausedEvent(e)) {\n const requirements = (e.requirements as RunRequirement[] | undefined) ?? []\n const pausedTools = toolsFromEvent(e)\n writeStatus(chan, 'paused')\n writeActivity(chan, 'Waiting for input')\n patchActive(chan, (m) => {\n let tool_calls = m.tool_calls ?? []\n for (const t of pausedTools) tool_calls = mergeTool(tool_calls, t)\n return { ...m, status: 'paused', streaming: false, requirements, tool_calls }\n })\n return\n }\n\n if (isCompletedEvent(e)) {\n patchActive(chan, (m) => {\n const next: ChatMessage = { ...m, streaming: false, status: 'completed' }\n if (typeof e.content === 'string' && e.content) next.content = e.content\n const tools = toolsFromEvent(e)\n if (tools.length) {\n let tc = m.tool_calls ?? []\n for (const t of tools) tc = mergeTool(tc, t)\n next.tool_calls = tc\n }\n if (e.reasoning_steps?.length) next.reasoning_steps = e.reasoning_steps\n if (e.references?.length) next.references = e.references\n if (e.followups?.length) next.followups = e.followups\n if (e.images?.length) next.images = e.images\n if (e.videos?.length) next.videos = e.videos\n if (e.audio?.length) next.audio = e.audio\n if (e.response_audio) next.response_audio = e.response_audio\n return next\n })\n return\n }\n\n if (isCancelledEvent(e)) {\n patchActive(chan, (m) => ({ ...m, streaming: false, status: 'cancelled' }))\n writeStatus(chan, 'cancelled')\n return\n }\n\n if (isErrorEvent(e)) {\n const msg = typeof e.content === 'string' ? e.content : e.error || 'Error during run'\n patchActive(chan, (m) => ({ ...m, streaming: false, status: 'error', error: msg }))\n writeError(chan, msg)\n writeStatus(chan, 'error')\n return\n }\n },\n [\n onEvent,\n onSessionId,\n patchActive,\n upsertSession,\n writeActivity,\n writeError,\n writeEvents,\n writeStatus,\n ],\n )\n\n /**\n * Park the attached run: it keeps streaming into its own snapshot while the\n * user looks at another session, and `resumeRun` puts it back.\n */\n const parkRun = useCallback((chan: RunChannel, sessionId: string) => {\n const view = viewRef.current\n chan.park = {\n sessionId,\n messages: view.messages,\n events: view.events,\n status: view.status,\n activity: view.activity,\n error: view.error,\n activeMsgId: activeMsgIdRef.current,\n runId: runIdRef.current,\n bumped: bumpedSessionRef.current,\n }\n backgroundRef.current.set(sessionId, chan)\n setBackgroundRunning((prev) => (prev.includes(sessionId) ? prev : [...prev, sessionId]))\n channelRef.current = null\n abortRef.current = null\n activeMsgIdRef.current = null\n runIdRef.current = undefined\n }, [])\n\n /** Restore a backgrounded run (running or finished) into the visible chat. */\n const resumeRun = useCallback((sessionId: string): boolean => {\n const chan = backgroundRef.current.get(sessionId)\n const park = chan?.park\n if (!chan || !park) return false\n\n backgroundRef.current.delete(sessionId)\n setBackgroundRunning((prev) => prev.filter((s) => s !== sessionId))\n chan.park = null\n channelRef.current = chan\n abortRef.current = chan.controller\n activeMsgIdRef.current = park.activeMsgId\n runIdRef.current = park.runId\n bumpedSessionRef.current = park.bumped\n\n setMessages(park.messages)\n setEvents(park.events)\n setCurrentEvent(park.events[park.events.length - 1] ?? null)\n setStatus(park.status)\n setActivity(park.activity)\n setError(park.error)\n return true\n }, [])\n\n /**\n * Leave the current session. A run still in flight is parked rather than\n * aborted, so switching sessions never stops it.\n */\n const releaseCurrentRun = useCallback(() => {\n const chan = channelRef.current\n if (!chan || chan.park) return\n const from = sessionIdRef.current\n const streaming = viewRef.current.status === 'streaming'\n if (streaming && from) parkRun(chan, from)\n else {\n chan.controller.abort()\n channelRef.current = null\n abortRef.current = null\n }\n }, [parkRun])\n\n /** Drive a stream (either a fresh run or a continue) to completion. */\n const drive = useCallback(\n async (\n starter: (cb: {\n signal: AbortSignal\n onEvent: (e: RunEventData) => void\n onError: (err: Error) => void\n onComplete: () => void\n }) => Promise<void>,\n ) => {\n const controller = new AbortController()\n const chan: RunChannel = { controller, park: null }\n channelRef.current = chan\n abortRef.current = controller\n setError(null)\n setStatus('streaming')\n\n await starter({\n signal: controller.signal,\n // `chan.park` is read at call time, so events follow the run when the\n // user navigates away mid-stream.\n onEvent: (e) => applyEvent(chan, e),\n onError: (err) => {\n patchActive(chan, (m) => ({ ...m, streaming: false, status: 'error', error: err.message }))\n writeError(chan, err.message)\n writeStatus(chan, 'error')\n },\n onComplete: () => {\n writeActivity(chan, null)\n patchActive(chan, (m) => (m.streaming ? { ...m, streaming: false } : m))\n // Leave a terminal status (paused/error/cancelled) intact; otherwise mark completed.\n const park = chan.park\n if (park) park.status = park.status === 'streaming' ? 'completed' : park.status\n else setStatus((s) => (s === 'streaming' ? 'completed' : s))\n },\n })\n\n if (chan.park) {\n // Finished in the background — keep the snapshot so returning to that\n // session shows the answer, but stop advertising it as running.\n const { sessionId } = chan.park\n setBackgroundRunning((prev) => prev.filter((s) => s !== sessionId))\n } else if (channelRef.current === chan) {\n channelRef.current = null\n abortRef.current = null\n }\n },\n [applyEvent, patchActive, writeActivity, writeError, writeStatus],\n )\n\n const sendMessage = useCallback(\n async (message: string, sendOptions?: SendOptions) => {\n const ent = entityRef.current\n if (!ent) {\n setError('No agent, team or workflow selected.')\n return\n }\n\n // AgentOS names a brand-new session after the message that started it.\n pendingSessionNameRef.current =\n message.trim() || (sendOptions?.files?.length ? 'File Attachment' : 'New Session')\n bumpedSessionRef.current = undefined\n\n const userMsg: ChatMessage = {\n id: nextId(),\n role: 'user',\n content: message,\n created_at: nowSeconds(),\n }\n const agentMsg: ChatMessage = {\n id: nextId(),\n role: 'agent',\n content: '',\n created_at: nowSeconds() + 1,\n streaming: true,\n status: 'streaming',\n tool_calls: [],\n events: [],\n }\n activeMsgIdRef.current = agentMsg.id\n setEvents([])\n setCurrentEvent(null)\n setMessages((prev) => [...prev, userMsg, agentMsg])\n\n await drive((cb) =>\n client.run({\n type: ent.type,\n id: ent.id,\n message,\n sessionId: sessionIdRef.current,\n userId,\n files: sendOptions?.files,\n ...cb,\n }),\n )\n },\n [client, drive, userId],\n )\n\n const continueRun = useCallback(\n async (resolution: { tools?: ToolExecution[]; stepRequirements?: unknown[] }) => {\n const ent = entityRef.current\n const runId = runIdRef.current\n if (!ent || !runId) {\n setError('No paused run to continue.')\n return\n }\n // Re-open the existing agent message for more streamed output.\n patchActive(null, (m) => ({ ...m, streaming: true, status: 'streaming', requirements: undefined }))\n\n await drive((cb) =>\n client.continueRun({\n type: ent.type,\n id: ent.id,\n runId,\n sessionId: sessionIdRef.current,\n userId,\n tools: resolution.tools,\n stepRequirements: resolution.stepRequirements,\n ...cb,\n }),\n )\n },\n [client, drive, patchActive, userId],\n )\n\n // Pending requirements / paused tools come from the active message.\n const activeMessage = useMemo(\n () => messages.find((m) => m.id === activeMsgIdRef.current) ?? null,\n [messages],\n )\n\n const pausedTools = useMemo(\n () => (activeMessage?.tool_calls ?? []).filter((t) => t.requires_confirmation || t.requires_user_input),\n [activeMessage],\n )\n\n const respondToConfirmation = useCallback(\n async (approve: boolean) => {\n const ent = entityRef.current\n if (ent?.type === 'workflow') {\n // Workflows resolve via step_requirements; mirror the active requirements.\n const reqs = (activeMessage?.requirements ?? []).map((r) => ({ ...r, confirmation: approve }))\n await continueRun({ stepRequirements: reqs })\n return\n }\n const resolved = pausedTools.map((t) => ({ ...t, confirmed: approve }))\n await continueRun({ tools: resolved })\n },\n [activeMessage, continueRun, pausedTools],\n )\n\n const submitUserInput = useCallback(\n async (values: Record<string, unknown>) => {\n const ent = entityRef.current\n if (ent?.type === 'workflow') {\n const reqs = (activeMessage?.requirements ?? []).map((r) => ({\n ...r,\n user_input_schema: (r.user_input_schema ?? []).map((f) => ({\n ...f,\n value: f.name in values ? values[f.name] : f.value,\n })),\n }))\n await continueRun({ stepRequirements: reqs })\n return\n }\n const resolved = pausedTools.map((t) => ({\n ...t,\n confirmed: true,\n user_input_schema: (t.user_input_schema ?? []).map((f) => ({\n ...f,\n value: f.name in values ? values[f.name] : f.value,\n })),\n }))\n await continueRun({ tools: resolved })\n },\n [activeMessage, continueRun, pausedTools],\n )\n\n const cancel = useCallback(async () => {\n abortRef.current?.abort()\n channelRef.current = null\n const ent = entityRef.current\n const runId = runIdRef.current\n setStatus('cancelled')\n setActivity(null)\n patchActive(null, (m) => (m.streaming ? { ...m, streaming: false, status: 'cancelled' } : m))\n if (ent && runId) await client.cancelRun(ent.type, ent.id, runId, sessionIdRef.current)\n }, [client, patchActive])\n\n const refreshSessions = useCallback(async () => {\n const ent = entityRef.current\n if (!ent) {\n setSessions([])\n return\n }\n setSessionsLoading(true)\n try {\n const res = await client.getSessions(ent.type, ent.id, ent.db_id)\n const fetched = res.data ?? []\n setSessions((prev) => {\n // A session created by the run that just finished may not be in the\n // backend's list yet — keep the optimistic entry rather than have it\n // disappear from the sidebar.\n const active = sessionIdRef.current\n const pending =\n active && !fetched.some((s) => s.session_id === active)\n ? prev.find((s) => s.session_id === active)\n : undefined\n return pending ? [pending, ...fetched] : fetched\n })\n } finally {\n setSessionsLoading(false)\n }\n }, [client])\n\n const loadSession = useCallback(\n async (id: string) => {\n const ent = entityRef.current\n if (!ent) return\n if (id === sessionIdRef.current) return\n // A run in flight keeps going in the background instead of being killed.\n releaseCurrentRun()\n\n sessionIdRef.current = id\n setSessionId(id)\n onSessionId?.(id)\n\n // Coming back to a session whose run we parked: restore it live rather\n // than refetching a transcript that is still being written.\n if (resumeRun(id)) return\n\n activeMsgIdRef.current = null\n runIdRef.current = undefined\n setEvents([])\n setCurrentEvent(null)\n setStatus('idle')\n setActivity(null)\n setError(null)\n try {\n const runs = await client.getSessionRuns(ent.type, id, ent.db_id)\n setMessages(sessionRunsToMessages(runs))\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err))\n }\n },\n [client, onSessionId, releaseCurrentRun, resumeRun],\n )\n\n const deleteSession = useCallback(\n async (id: string) => {\n const ent = entityRef.current\n const ok = await client.deleteSession(id, ent?.db_id)\n if (ok) {\n const background = backgroundRef.current.get(id)\n if (background) {\n background.controller.abort()\n backgroundRef.current.delete(id)\n setBackgroundRunning((prev) => prev.filter((s) => s !== id))\n }\n setSessions((prev) => prev.filter((s) => s.session_id !== id))\n if (sessionIdRef.current === id) {\n sessionIdRef.current = undefined\n setSessionId(undefined)\n setMessages([])\n }\n }\n },\n [client],\n )\n\n const reset = useCallback(() => {\n // Starting a new chat leaves an in-flight run streaming in the background.\n releaseCurrentRun()\n activeMsgIdRef.current = null\n runIdRef.current = undefined\n sessionIdRef.current = undefined\n pendingSessionNameRef.current = undefined\n bumpedSessionRef.current = undefined\n setMessages([])\n setEvents([])\n setCurrentEvent(null)\n setStatus('idle')\n setActivity(null)\n setError(null)\n setSessionId(undefined)\n }, [releaseCurrentRun])\n\n // Abort every in-flight stream (visible or backgrounded) on unmount.\n useEffect(() => {\n const background = backgroundRef.current\n return () => {\n abortRef.current?.abort()\n for (const chan of background.values()) chan.controller.abort()\n background.clear()\n }\n }, [])\n\n const streamingMessage = useMemo(\n () => messages.find((m) => m.role === 'agent' && m.streaming) ?? null,\n [messages],\n )\n\n return {\n messages,\n streamingMessage,\n events,\n currentEvent,\n status,\n activity,\n isStreaming: status === 'streaming',\n isPaused: status === 'paused',\n error,\n sessionId,\n entityType: entity?.type,\n tools: activeMessage?.tool_calls ?? [],\n reasoning: activeMessage?.reasoning_steps,\n pendingRequirements: activeMessage?.requirements ?? [],\n /** Sessions with a run in flight, including ones streaming in the background. */\n streamingSessionIds: status === 'streaming' && sessionId ? [sessionId, ...backgroundRunning] : backgroundRunning,\n sessions,\n sessionsLoading,\n sendMessage,\n cancel,\n continueRun,\n respondToConfirmation,\n submitUserInput,\n refreshSessions,\n loadSession,\n deleteSession,\n reset,\n setMessages,\n client,\n }\n}\n","/** Class-name helpers shared by every component family. */\n\nexport type ClassValue = string | false | null | undefined\n\n/** Join truthy class names; returns undefined when nothing is left. */\nexport function cx(...parts: ClassValue[]): string | undefined {\n const out = parts.filter(Boolean).join(' ')\n return out || undefined\n}\n","/**\n * `<ChatProvider>` runs a chat and shares it with everything below it, so the\n * layout is entirely yours:\n *\n * ```tsx\n * <ChatProvider baseUrl=\"http://localhost:7777\" entity={agent}>\n * <MyOwnHeader />\n * <ChatTranscript />\n * <ChatComposer />\n * </ChatProvider>\n * ```\n *\n * Every chat component works standalone (pass it props directly) *or* inside a\n * provider (props omitted, values read from context). Reach for the raw values\n * with `useChatContext()`; use `useAgnoChat` directly if you'd rather own the\n * state yourself and skip the provider.\n */\n\nimport React, { createContext, useContext, useMemo } from 'react'\n\nimport { cx } from '../cx'\nimport type { ChatClassNames } from './classNames'\nimport type { RenderMarkdown } from './components/Markdown'\nimport type { LinkComponent, ResolveLinkPreview } from './sources'\nimport { useAgnoChat, type UseAgnoChat, type UseAgnoChatOptions } from './useAgnoChat'\n\nexport interface ChatContextValue {\n /** The live chat state and actions. */\n chat: UseAgnoChat\n /** Slot class overrides, threaded to every descendant. */\n classNames: ChatClassNames\n /** Markdown renderer override, threaded to every descendant. */\n renderMarkdown?: RenderMarkdown\n /** Link-preview metadata lookup, threaded to every descendant. */\n resolveLinkPreview?: ResolveLinkPreview\n /** Whether fenced code blocks carry a copy button. Defaults to true. */\n codeCopy?: boolean\n /** Renders every link in place of `<a>`, threaded to every descendant. */\n linkComponent?: LinkComponent\n}\n\nconst ChatContext = createContext<ChatContextValue | null>(null)\n\nexport interface ChatProviderProps extends UseAgnoChatOptions {\n children: React.ReactNode\n /** Slot class overrides shared by every component in the tree. */\n classNames?: ChatClassNames\n /** Markdown renderer shared by every component in the tree. */\n renderMarkdown?: RenderMarkdown\n /**\n * Fill out link previews with your own metadata (OpenGraph title,\n * description, image). Called at most once per URL, on first hover — see\n * `ResolveLinkPreview`. Without it previews still show the hostname, the site\n * favicon and whatever title the citation payload carried.\n */\n resolveLinkPreview?: ResolveLinkPreview\n /**\n * Put a copy button on fenced code blocks everywhere below this provider. On\n * by default; pass `false` to drop it.\n */\n codeCopy?: boolean\n /**\n * Render every link — in answers, on `[1]` chips, on source cards — with\n * your own component instead of `<a>`. A router link keeps in-app URLs\n * client-side; see `LinkComponent`.\n */\n linkComponent?: LinkComponent\n /**\n * Use an existing `useAgnoChat` result instead of creating one. Lets a parent\n * own the state (or share one chat across two providers).\n */\n chat?: UseAgnoChat\n /**\n * Wrapper element rendered around the children. Defaults to a plain `div`\n * carrying the theme classes; pass `false` to render children bare.\n */\n as?: React.ElementType | false\n className?: string\n /** Light theme instead of the default dark. */\n light?: boolean\n style?: React.CSSProperties\n}\n\nexport function ChatProvider({\n children,\n classNames,\n renderMarkdown,\n resolveLinkPreview,\n codeCopy,\n linkComponent,\n chat: externalChat,\n as,\n className,\n light,\n style,\n ...options\n}: ChatProviderProps): React.ReactElement {\n // Hooks can't be called conditionally, so always run the hook; when a chat is\n // supplied we simply ignore the internal one. Passing `entity: null` keeps the\n // unused instance idle (it never opens a connection on its own).\n const internal = useAgnoChat(externalChat ? { entity: null } : options)\n const chat = externalChat ?? internal\n\n const value = useMemo<ChatContextValue>(\n () => ({ chat, classNames: classNames ?? {}, renderMarkdown, resolveLinkPreview, codeCopy, linkComponent }),\n [chat, classNames, renderMarkdown, resolveLinkPreview, codeCopy, linkComponent],\n )\n\n const Wrapper = as === false ? null : ((as ?? 'div') as React.ElementType)\n\n return (\n <ChatContext.Provider value={value}>\n {Wrapper ? (\n <Wrapper\n className={cx('agno-root', light && 'agno-light', classNames?.root, className)}\n style={style}\n >\n {children}\n </Wrapper>\n ) : (\n children\n )}\n </ChatContext.Provider>\n )\n}\n\n/**\n * Read the chat, class overrides, markdown renderer and link-preview resolver\n * provided by the nearest `<ChatProvider>`. Throws outside a provider — use the\n * optional variant below if the component must also work standalone.\n */\nexport function useChatContext(): ChatContextValue {\n const value = useContext(ChatContext)\n if (!value) throw new Error('useChatContext must be used inside a <ChatProvider>')\n return value\n}\n\n/** Context lookup that returns null instead of throwing outside a provider. */\nexport function useOptionalChatContext(): ChatContextValue | null {\n return useContext(ChatContext)\n}\n\n/**\n * Resolve a prop against the surrounding provider: an explicitly passed value\n * always wins, otherwise fall back to context.\n */\nexport function useChatSlot<T>(explicit: T | undefined, pick: (ctx: ChatContextValue) => T): T | undefined {\n const ctx = useOptionalChatContext()\n if (explicit !== undefined) return explicit\n return ctx ? pick(ctx) : undefined\n}\n\n/** The chat instance, from the prop if given, otherwise from context. */\nexport function useResolvedChat(explicit?: UseAgnoChat): UseAgnoChat {\n const ctx = useOptionalChatContext()\n const chat = explicit ?? ctx?.chat\n if (!chat) {\n throw new Error(\n 'No chat found. Pass `chat={useAgnoChat(...)}` or render this inside a <ChatProvider>.',\n )\n }\n return chat\n}\n\n/** The provider's code-block copy setting, if one was supplied. */\nexport function useCodeCopy(): boolean | undefined {\n return useOptionalChatContext()?.codeCopy\n}\n\n/** The provider's link component, if one was supplied. */\nexport function useLinkComponent(): LinkComponent | undefined {\n return useOptionalChatContext()?.linkComponent\n}\n\n/** Merge the provider's class overrides with any passed directly. */\nexport function useResolvedClassNames(explicit?: ChatClassNames): ChatClassNames {\n const ctx = useOptionalChatContext()\n return useMemo(() => ({ ...ctx?.classNames, ...explicit }), [ctx?.classNames, explicit])\n}\n","/**\n * The icon set.\n *\n * Standard icons come from lucide-react, which is what AgentOS itself renders.\n * They were hand-traced here to keep the install dependency-free, and the\n * approximations drifted — the paperclip read as a hook rather than a clip —\n * so the geometry is now maintained upstream instead. lucide is\n * `sideEffects: false` and tree-shakeable, so only the icons imported below\n * reach a consumer's bundle.\n *\n * Re-exported under our own names so call sites stay stable if a mapping\n * changes, and so the two pieces of Agno artwork lucide has no equivalent for\n * — the brand mark and the team glyph — sit alongside them. Model-provider\n * marks live in `providerIcons.tsx` for the same reason.\n */\n\nimport type { LucideIcon } from 'lucide-react'\nimport {\n Activity,\n ArrowUp as LucideArrowUp,\n Box as LucideBox,\n Brain as LucideBrain,\n BookOpen as LucideBookOpen,\n Check as LucideCheck,\n ChevronDown as LucideChevronDown,\n Copy as LucideCopy,\n File,\n FileAudio as LucideFileAudio,\n FileType2 as LucideFileType2,\n FileVideo as LucideFileVideo,\n Globe as LucideGlobe,\n Link as LucideLink,\n LoaderCircle,\n MemoryStick,\n MessageSquare,\n Paperclip as LucidePaperclip,\n Plus as LucidePlus,\n RefreshCcw,\n Square,\n Trash2,\n Wrench as LucideWrench,\n X,\n} from 'lucide-react'\nimport React from 'react'\n\ntype IconProps = { size?: number; className?: string }\n\n/**\n * AgentOS renders lucide at its default stroke weight; these are drawn small\n * (12–16px), where the default reads heavy, so the set is pinned a little\n * lighter and every icon inherits it.\n */\nconst STROKE = 1.5\n\nconst icon = (Component: LucideIcon, defaultSize = 16) =>\n function Icon({ size = defaultSize, className }: IconProps): React.ReactElement {\n return <Component size={size} className={className} strokeWidth={STROKE} />\n }\n\nexport const ChevronDown = icon(LucideChevronDown)\nexport const ArrowUp = icon(LucideArrowUp)\nexport const Paperclip = icon(LucidePaperclip)\nexport const FileIcon = icon(File)\nexport const FileType = icon(LucideFileType2)\nexport const FileAudio = icon(LucideFileAudio)\nexport const FileVideo = icon(LucideFileVideo)\nexport const Wrench = icon(LucideWrench)\nexport const BookOpen = icon(LucideBookOpen)\nexport const Globe = icon(LucideGlobe)\n/** Trailing mark on a source pill. */\nexport const LinkIcon = icon(LucideLink)\nexport const Brain = icon(LucideBrain)\nexport const Box = icon(LucideBox)\nexport const Plus = icon(LucidePlus)\nexport const Check = icon(LucideCheck)\nexport const Copy = icon(LucideCopy)\nexport const Close = icon(X)\n\n/** Memory-update steps. */\nexport const Memory = icon(MemoryStick)\n/** Run-continued marker. */\nexport const Rerun = icon(RefreshCcw)\nexport const Pulse = icon(Activity)\nexport const Trash = icon(Trash2)\nexport const ChatBubble = icon(MessageSquare)\nexport const Spinner = icon(LoaderCircle, 12)\n\n/** The stop control is a filled square, not an outline. */\nexport function Stop({ size = 16, className }: IconProps): React.ReactElement {\n return <Square size={size} className={className} fill=\"currentColor\" strokeWidth={0} />\n}\n\n/** The Agno mark — used as the agent avatar, exactly as in AgentOS. */\nexport function AgnoMark({ size = 24, className }: IconProps): React.ReactElement {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n focusable=\"false\"\n className={className}\n >\n <rect width=\"24\" height=\"24\" rx=\"6\" fill=\"rgba(var(--color-brand-brand), 1)\" />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M5.12367 8.89082C4.72889 8.89922 4.40205 8.58599 4.39365 8.19121C4.36275 6.7392 4.72664 5.5803 5.68258 4.90055C6.59425 4.25228 7.84819 4.19087 9.21745 4.39441C9.60802 4.45247 9.87758 4.81616 9.81953 5.20674C9.76147 5.59732 9.39777 5.86688 9.0072 5.80882C7.73104 5.61912 6.95445 5.75076 6.51125 6.06591C6.11231 6.34959 5.79697 6.92451 5.82327 8.1608C5.83167 8.55558 5.51845 8.88242 5.12367 8.89082Z\"\n fill=\"white\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M18.9047 8.89099C19.2995 8.89939 19.6263 8.58617 19.6347 8.19139C19.6656 6.73937 19.3017 5.58048 18.3458 4.90073C17.4341 4.25245 16.1802 4.19105 14.8109 4.39458C14.4204 4.45264 14.1508 4.81634 14.2089 5.20691C14.2669 5.59749 14.6306 5.86705 15.0212 5.80899C16.2973 5.61929 17.0739 5.75093 17.5171 6.06609C17.9161 6.34976 18.2314 6.92468 18.2051 8.16097C18.1967 8.55575 18.5099 8.88259 18.9047 8.89099Z\"\n fill=\"white\"\n />\n <path\n d=\"M10.8097 11.7873C10.8097 12.4588 10.2653 13.0032 9.59378 13.0032C8.92225 13.0032 8.37787 12.4588 8.37787 11.7873C8.37787 11.1158 8.92225 10.5714 9.59378 10.5714C10.2653 10.5714 10.8097 11.1158 10.8097 11.7873Z\"\n fill=\"white\"\n />\n <path\n d=\"M15.8544 11.7873C15.8544 12.4588 15.31 13.0032 14.6385 13.0032C13.967 13.0032 13.4226 12.4588 13.4226 11.7873C13.4226 11.1158 13.967 10.5714 14.6385 10.5714C15.31 10.5714 15.8544 11.1158 15.8544 11.7873Z\"\n fill=\"white\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M18.9043 15.1609C19.2991 15.1525 19.626 15.4657 19.6344 15.8605C19.6653 17.3125 19.3014 18.4714 18.3454 19.1511C17.4338 19.7994 16.1798 19.8608 14.8106 19.6573C14.42 19.5992 14.1504 19.2355 14.2085 18.8449C14.2665 18.4544 14.6302 18.1848 15.0208 18.2429C16.297 18.4326 17.0736 18.3009 17.5168 17.9858C17.9157 17.7021 18.231 17.1272 18.2047 15.8909C18.1963 15.4961 18.5096 15.1693 18.9043 15.1609Z\"\n fill=\"white\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M5.12404 15.1609C4.72926 15.1525 4.40241 15.4657 4.39401 15.8605C4.36312 17.3125 4.72701 18.4714 5.68295 19.1511C6.59462 19.7994 7.84856 19.8608 9.21781 19.6573C9.60839 19.5992 9.87795 19.2355 9.81989 18.8449C9.76183 18.4544 9.39814 18.1848 9.00756 18.2429C7.73141 18.4326 6.95482 18.3009 6.51161 17.9858C6.11268 17.7021 5.79734 17.1272 5.82364 15.8909C5.83204 15.4961 5.51882 15.1693 5.12404 15.1609Z\"\n fill=\"white\"\n />\n </svg>\n )\n}\n\n/** The AgentOS `team` glyph, drawn in the current colour. */\nexport function TeamGlyph({ size = 16, className }: IconProps): React.ReactElement {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 17 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden\n focusable=\"false\"\n className={className}\n >\n <path\n d=\"M2.09998 4.66667V3.33333C2.09998 2.6 2.69998 2 3.43331 2H4.76664M11.4333 2H12.7666C13.5 2 14.1 2.6 14.1 3.33333V4.66667M14.1 11.3333V12.6667C14.1 13.4 13.5 14 12.7666 14H11.4333M4.76664 14H3.43331C2.69998 14 2.09998 13.4 2.09998 12.6667V11.3333M5.43331 4.66667H8.76664C9.13483 4.66667 9.43331 4.96514 9.43331 5.33333V7.33333C9.43331 7.70152 9.13483 8 8.76664 8H5.43331C5.06512 8 4.76664 7.70152 4.76664 7.33333V5.33333C4.76664 4.96514 5.06512 4.66667 5.43331 4.66667ZM7.43331 8H10.7666C11.1348 8 11.4333 8.29848 11.4333 8.66667V10.6667C11.4333 11.0349 11.1348 11.3333 10.7666 11.3333H7.43331C7.06512 11.3333 6.76664 11.0349 6.76664 10.6667V8.66667C6.76664 8.29848 7.06512 8 7.43331 8Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\n\n/** The grid loader AgentOS shows while a run is working. */\nexport function GridLoader({ className }: { className?: string }): React.ReactElement {\n return (\n <span className={['agno-loader', className].filter(Boolean).join(' ')} role=\"status\" aria-label=\"Loading\">\n <span className=\"agno-loader__dot\" />\n </span>\n )\n}\n","/**\n * The support-widget shell: a bubble pinned to a corner of the viewport that\n * opens the chat in a popover — or over the whole screen — and closes it again.\n *\n * `<AgnoChat mode=\"launcher\">` renders itself inside one of these. Use the\n * component directly to give your own `<ChatWindow>` the same behaviour.\n */\n\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { ChatBubble, Close } from './icons'\n\n/** Corner the bubble (and the panel it opens) is pinned to. */\nexport type LauncherPosition = 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'\n\n/** How far the panel opens: a corner popover, or the entire viewport. */\nexport type LauncherPanel = 'popover' | 'fullscreen'\n\nexport interface ChatLauncherProps {\n /** The chat surface to reveal — usually `<AgnoChat>` or `<ChatWindow>`. */\n children: React.ReactNode\n /** Corner to pin to. Default \"bottom-right\". */\n position?: LauncherPosition\n /** Distance from both edges of that corner. Number means px. Default 24. */\n offset?: number | string\n /** Popover (default) or full-screen when open. */\n panel?: LauncherPanel\n /** Popover width. Number means px. Default 400. Ignored when full-screen. */\n width?: number | string\n /** Popover height. Number means px. Default 620. Ignored when full-screen. */\n height?: number | string\n /** Controlled open state. Pair with `onOpenChange`. */\n open?: boolean\n /** Open state on first render when uncontrolled. Default false. */\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n /** Text beside the bubble glyph, e.g. \"Chat with us\". Icon-only without it. */\n label?: string\n /** Replaces the default speech-bubble glyph. */\n icon?: React.ReactNode\n /** Accessible name for the bubble. Default \"Open chat\" / \"Close chat\". */\n ariaLabel?: string\n /** Close on Escape. Default true. */\n closeOnEscape?: boolean\n /**\n * Keep the bubble (as a close button) while the panel is open. Default true.\n * Turn it off when the panel carries its own close control.\n */\n bubbleWhenOpen?: boolean\n /**\n * Keep the chat mounted after the first open, so closing the panel does not\n * discard the conversation or interrupt a run. Default true.\n */\n keepMounted?: boolean\n /** Render into `document.body`, escaping transformed ancestors. Default true. */\n portal?: boolean\n className?: string\n}\n\nconst px = (v: number | string | undefined, fallback: string): string =>\n v === undefined ? fallback : typeof v === 'number' ? `${v}px` : v\n\nexport function ChatLauncher({\n children,\n position = 'bottom-right',\n offset = 24,\n panel = 'popover',\n width,\n height,\n open,\n defaultOpen = false,\n onOpenChange,\n label,\n icon,\n ariaLabel,\n closeOnEscape = true,\n bubbleWhenOpen = true,\n keepMounted = true,\n portal = true,\n className,\n}: ChatLauncherProps): React.ReactElement | null {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen)\n const isOpen = open ?? uncontrolledOpen\n\n // Only mount the chat once it has been opened; keep it mounted afterwards so\n // the transcript (and any run in flight) survives closing the panel.\n const opened = useRef(isOpen)\n if (isOpen) opened.current = true\n const mounted = keepMounted ? opened.current : isOpen\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (open === undefined) setUncontrolledOpen(next)\n onOpenChange?.(next)\n },\n [open, onOpenChange],\n )\n\n useEffect(() => {\n if (!isOpen || !closeOnEscape) return\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setOpen(false)\n }\n document.addEventListener('keydown', onKeyDown)\n return () => document.removeEventListener('keydown', onKeyDown)\n }, [isOpen, closeOnEscape, setOpen])\n\n // A full-screen panel covers the page, so stop the page behind it scrolling.\n useEffect(() => {\n if (!isOpen || panel !== 'fullscreen') return\n const previous = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n return () => {\n document.body.style.overflow = previous\n }\n }, [isOpen, panel])\n\n // Portals need a document; render nothing on the server, mount on hydration.\n const [canPortal, setCanPortal] = useState(false)\n useEffect(() => setCanPortal(true), [])\n\n const classes = [\n 'agno-launcher',\n `agno-launcher--${position}`,\n panel === 'fullscreen' ? 'is-fullscreen' : 'is-popover',\n isOpen ? 'is-open' : 'is-closed',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const tree = (\n <div\n className={classes}\n style={\n {\n '--agno-launcher-offset': px(offset, '24px'),\n '--agno-launcher-width': px(width, '400px'),\n '--agno-launcher-height': px(height, '620px'),\n } as React.CSSProperties\n }\n >\n {mounted && (\n <div className=\"agno-launcher__panel\" role=\"dialog\" aria-modal={panel === 'fullscreen'} hidden={!isOpen}>\n {children}\n </div>\n )}\n {(!isOpen || bubbleWhenOpen) && (\n <button\n type=\"button\"\n className={['agno-launcher__bubble', label && !isOpen ? 'has-label' : ''].filter(Boolean).join(' ')}\n onClick={() => setOpen(!isOpen)}\n aria-expanded={isOpen}\n aria-label={ariaLabel ?? (isOpen ? 'Close chat' : 'Open chat')}\n >\n {isOpen ? <Close size={20} /> : (icon ?? <ChatBubble size={22} />)}\n {label && !isOpen && <span className=\"agno-launcher__label\">{label}</span>}\n </button>\n )}\n </div>\n )\n\n if (!portal) return tree\n if (!canPortal) return null\n return createPortal(tree, document.body)\n}\n","/**\n * Attachment previews, shown in a banner above the composer field — the\n * AgentOS `FileUpload` banner: a count with a \"clear all\" control, then a\n * horizontally scrolling row of items.\n *\n * Images render as a bordered thumbnail; everything else as a card with a\n * file-type mark, the name, and a `TYPE • SIZE` label. Every item carries its\n * remove control as a tab folded into the top-right corner.\n */\n\nimport React, { useEffect, useState } from 'react'\n\nimport { cx } from '../../cx'\nimport { Close, FileAudio, FileType, FileVideo } from './icons'\n\n/** Pick the mark for a file's MIME type, as AgentOS does. */\nfunction markFor(type: string): (props: { size?: number }) => React.ReactElement {\n if (type.startsWith('audio/')) return FileAudio\n if (type.startsWith('video/')) return FileVideo\n return FileType\n}\n\n/** `30MB`, `512KB` — the compact form the attachment cards and limit errors share. */\nexport function formatSize(bytes: number): string {\n return bytes >= 1024 * 1024\n ? `${Math.round((bytes / (1024 * 1024)) * 10) / 10}MB`\n : `${Math.max(1, Math.round(bytes / 1024))}KB`\n}\n\n/** The kind shown on a card: the extension when there is one, else the MIME subtype. */\nfunction kindOf(file: File): string {\n const dot = file.name.lastIndexOf('.')\n if (dot > 0 && dot < file.name.length - 1) return file.name.slice(dot + 1)\n const subtype = file.type.split('/')[1]\n return subtype || 'file'\n}\n\n/**\n * One attachment. Image previews need an object URL, which must be revoked or\n * the blob leaks for the lifetime of the document — so the URL is owned here,\n * per item, and released when the item unmounts or the file changes.\n */\nfunction Item({ file, onRemove }: { file: File; onRemove: () => void }): React.ReactElement {\n const isImage = file.type.startsWith('image/')\n const [url, setUrl] = useState<string | null>(null)\n\n useEffect(() => {\n if (!isImage) return\n const objectUrl = URL.createObjectURL(file)\n setUrl(objectUrl)\n return () => {\n URL.revokeObjectURL(objectUrl)\n setUrl(null)\n }\n }, [file, isImage])\n\n const Mark = markFor(file.type)\n\n return (\n <div className={cx('agno-file', isImage && url ? 'agno-file--image' : 'agno-file--card')}>\n {isImage && url ? (\n <img className=\"agno-file__thumb\" src={url} alt={file.name} />\n ) : (\n <>\n <span className=\"agno-file__mark\" aria-hidden>\n <Mark size={16} />\n </span>\n <span className=\"agno-file__meta\">\n <span className=\"agno-file__name\" title={file.name}>\n {file.name}\n </span>\n <span className=\"agno-file__type\">\n {kindOf(file)} • {formatSize(file.size)}\n </span>\n </span>\n </>\n )}\n <button type=\"button\" className=\"agno-file__remove\" onClick={onRemove} aria-label={`Remove ${file.name}`}>\n <Close size={12} />\n </button>\n </div>\n )\n}\n\nexport interface FilePreviewProps {\n files: File[]\n onRemove: (index: number) => void\n onClear?: () => void\n className?: string\n}\n\nexport function FilePreview({ files, onRemove, onClear, className }: FilePreviewProps): React.ReactElement | null {\n if (files.length === 0) return null\n\n return (\n <div className={cx('agno-files', className)}>\n <div className=\"agno-files__head\">\n <span className=\"agno-files__count\">\n {files.length} {files.length > 1 ? 'attachments' : 'attachment'}\n </span>\n {onClear && (\n <button type=\"button\" className=\"agno-files__clear\" onClick={onClear}>\n <Close size={14} />\n clear all\n </button>\n )}\n </div>\n <div className=\"agno-files__strip\">\n <div className=\"agno-files__row\">\n {files.map((file, i) => (\n <Item key={`${file.name}-${file.lastModified}-${i}`} file={file} onRemove={() => onRemove(i)} />\n ))}\n </div>\n </div>\n </div>\n )\n}\n","/**\n * The AgentOS chat dock: a rounded card holding an auto-growing textarea and a\n * bottom action row (attach on the left, send/stop on the right).\n *\n * It works as-is, and it also opens up for a host that needs more from the\n * composer than a textarea — an @mention menu, context chips, a highlighted\n * draft — without forking it:\n *\n * - `value` / `onValueChange` make the draft controlled.\n * - `textareaProps` reach the textarea itself (key handlers, ARIA); a key\n * handler that calls `preventDefault()` stops Enter from sending.\n * - `renderTextarea` swaps the element for your own, given the props this one\n * would have had — for a mirror-highlighted input, say.\n * - `above` and `below` render inside the dock, around the field.\n * - Dropped files land in the attachment tray, subject to `accept` and the\n * size limits; the first reason a file was refused shows under the tray.\n */\n\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\n\nimport { cx } from '../../cx'\nimport type { ChatClassNames } from '../classNames'\nimport { useOptionalChatContext, useResolvedClassNames } from '../ChatProvider'\nimport { FilePreview, formatSize } from './FilePreview'\nimport { ArrowUp, Paperclip, Stop } from './icons'\n\n/** Matches the AgentOS textarea bounds; the compact row is a single line that grows less. */\nconst BOUNDS = {\n dock: { min: 31, max: 213 },\n compact: { min: 24, max: 120 },\n}\n\n/** What the textarea receives — and what `renderTextarea` is handed. */\nexport type ChatTextareaProps = React.TextareaHTMLAttributes<HTMLTextAreaElement> & {\n ref: React.Ref<HTMLTextAreaElement>\n}\n\nexport interface FileLimits {\n /** Accepted extensions and/or MIME types, as the file picker takes them: `\".md,.py,image/*\"`. */\n accept?: string\n /** Most files attached at once. */\n maxFiles?: number\n /** Largest single file, in bytes. */\n maxFileSize?: number\n /** Largest total across every attached file, in bytes. */\n maxTotalSize?: number\n}\n\nexport interface ChatInputProps extends FileLimits {\n /**\n * Omit inside a `<ChatProvider>` to send through the provider's chat. Return\n * `false` (or a promise of it) to keep the draft — the send did not happen.\n */\n onSend?: (message: string, files?: File[]) => void | boolean | Promise<void | boolean>\n onStop?: () => void\n disabled?: boolean\n busy?: boolean\n placeholder?: string\n /** Allow attaching files. */\n allowFiles?: boolean\n /**\n * One row — the field with the buttons beside it — instead of the dock with\n * its action row beneath. For a sidebar, a launcher, anywhere narrow.\n */\n compact?: boolean\n /** The draft, when you own it. Pair with `onValueChange`. */\n value?: string\n onValueChange?: (value: string) => void\n /** Reach the textarea element. */\n textareaRef?: React.Ref<HTMLTextAreaElement>\n /**\n * Spread onto the textarea. Its `onKeyDown` runs before the Enter-to-send\n * handling; call `preventDefault()` there to claim a key.\n */\n textareaProps?: React.TextareaHTMLAttributes<HTMLTextAreaElement>\n /**\n * Replace the textarea with your own element, given the props this one would\n * have rendered with. Your element sizes itself.\n */\n renderTextarea?: (props: ChatTextareaProps) => React.ReactNode\n /** Rendered inside the dock, above the attachment tray and the field. */\n above?: React.ReactNode\n /** Rendered inside the dock, between the field and the action row. */\n below?: React.ReactNode\n /** Text shown while files are dragged over the dock. */\n dropLabel?: string\n /** Rendered in the left action group — where the entity picker sits. */\n leading?: React.ReactNode\n /** Rendered in the right action group, before send. */\n trailing?: React.ReactNode\n className?: string\n classNames?: ChatClassNames\n}\n\n/** Does the file match an `accept` list, by extension or MIME type? */\nexport function fileAccepted(file: File, accept?: string): boolean {\n if (!accept) return true\n const name = file.name.toLowerCase()\n const type = file.type.toLowerCase()\n return accept\n .split(',')\n .map((rule) => rule.trim().toLowerCase())\n .filter(Boolean)\n .some((rule) => {\n if (rule.startsWith('.')) return name.endsWith(rule)\n if (rule.endsWith('/*')) return type.startsWith(rule.slice(0, -1))\n return type === rule\n })\n}\n\n/**\n * Apply the limits to files being added. Every limit is enforced; the message\n * names the first reason something was left out.\n */\nexport function admitFiles(\n current: readonly File[],\n incoming: readonly File[],\n limits: FileLimits,\n): { files: File[]; error: string | null } {\n const { accept, maxFiles, maxFileSize, maxTotalSize } = limits\n const files = [...current]\n let total = current.reduce((sum, f) => sum + f.size, 0)\n let error: string | null = null\n const refuse = (reason: string) => {\n error ??= reason\n }\n\n for (const file of incoming) {\n if (!fileAccepted(file, accept)) refuse('Cannot add this file type')\n else if (maxFileSize != null && file.size > maxFileSize) refuse(`Cannot add files over ${formatSize(maxFileSize)}`)\n else if (maxFiles != null && files.length >= maxFiles) refuse(`Cannot add more than ${maxFiles} attachments`)\n else if (maxTotalSize != null && total + file.size > maxTotalSize) refuse('Cannot add more files')\n else {\n files.push(file)\n total += file.size\n }\n }\n return { files, error }\n}\n\nconst hasFiles = (e: React.DragEvent) => Array.from(e.dataTransfer.types).includes('Files')\n\nexport function ChatInput({\n onSend,\n onStop,\n disabled,\n busy,\n placeholder,\n allowFiles = false,\n compact = false,\n accept,\n maxFiles,\n maxFileSize,\n maxTotalSize,\n value: controlled,\n onValueChange,\n textareaRef: externalRef,\n textareaProps,\n renderTextarea,\n above,\n below,\n dropLabel = 'Drop files to attach',\n leading,\n trailing,\n className,\n classNames,\n}: ChatInputProps): React.ReactElement {\n const ctx = useOptionalChatContext()\n const cn = useResolvedClassNames(classNames)\n const [internal, setInternal] = useState('')\n const value = controlled ?? internal\n const setValue = (next: string) => {\n if (controlled === undefined) setInternal(next)\n onValueChange?.(next)\n }\n const [files, setFilesState] = useState<File[]>([])\n // Mirrors `files` so two drops in one frame both see the limits.\n const filesRef = useRef<File[]>([])\n const setFiles = (next: File[]) => {\n filesRef.current = next\n setFilesState(next)\n }\n const [fileError, setFileError] = useState<string | null>(null)\n const [dragging, setDragging] = useState(false)\n const dragDepth = useRef(0)\n const fileRef = useRef<HTMLInputElement>(null)\n const textareaRef = useRef<HTMLTextAreaElement | null>(null)\n\n const setTextareaRef = useCallback(\n (el: HTMLTextAreaElement | null) => {\n textareaRef.current = el\n if (typeof externalRef === 'function') externalRef(el)\n else if (externalRef) (externalRef as React.MutableRefObject<HTMLTextAreaElement | null>).current = el\n },\n [externalRef],\n )\n\n // Grow with the content, up to MAX_HEIGHT, then scroll — as AgentOS does.\n // A custom textarea sizes itself.\n const adjustHeight = useCallback(() => {\n const el = textareaRef.current\n if (!el || renderTextarea) return\n const { min, max } = compact ? BOUNDS.compact : BOUNDS.dock\n el.style.height = `${min}px`\n el.style.height = `${Math.min(Math.max(el.scrollHeight, min), max)}px`\n }, [renderTextarea, compact])\n\n useEffect(adjustHeight, [value, adjustHeight])\n\n // Standalone use passes these in; inside a provider they default to its chat.\n const send =\n onSend ??\n ((message: string, attached?: File[]) =>\n void ctx?.chat.sendMessage(message, attached ? { files: attached } : undefined))\n const stop = onStop ?? (ctx ? () => void ctx.chat.cancel() : undefined)\n const isBusy = busy ?? ctx?.chat.isStreaming ?? false\n const isDisabled = disabled ?? ctx?.chat.isPaused ?? false\n\n const limits: FileLimits = { accept, maxFiles, maxFileSize, maxTotalSize }\n const addFiles = (incoming: File[]) => {\n if (!incoming.length) return\n const next = admitFiles(filesRef.current, incoming, limits)\n setFiles(next.files)\n setFileError(next.error)\n if (fileRef.current) fileRef.current.value = ''\n }\n\n const submit = async () => {\n const text = value.trim()\n if (!text && files.length === 0) return\n const sent = files.length ? files : undefined\n const result = await send(text, sent)\n if (result === false) return\n setValue('')\n setFiles([])\n setFileError(null)\n }\n\n const canSend = !isDisabled && !isBusy && (Boolean(value.trim()) || files.length > 0)\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n textareaProps?.onKeyDown?.(e)\n if (e.defaultPrevented) return\n if (e.key === 'Enter' && !e.nativeEvent.isComposing && !e.shiftKey) {\n e.preventDefault()\n if (canSend) void submit()\n }\n }\n\n // Drag-and-drop counts enter/leave pairs: children fire their own.\n const onDragEnter = (e: React.DragEvent<HTMLDivElement>) => {\n if (!allowFiles || !hasFiles(e)) return\n e.preventDefault()\n dragDepth.current += 1\n setDragging(true)\n }\n const onDragOver = (e: React.DragEvent<HTMLDivElement>) => {\n if (!allowFiles || !hasFiles(e)) return\n e.preventDefault()\n e.dataTransfer.dropEffect = 'copy'\n }\n const onDragLeave = (e: React.DragEvent<HTMLDivElement>) => {\n if (!allowFiles || dragDepth.current === 0) return\n e.preventDefault()\n dragDepth.current = Math.max(0, dragDepth.current - 1)\n if (dragDepth.current === 0) setDragging(false)\n }\n const onDrop = (e: React.DragEvent<HTMLDivElement>) => {\n if (!allowFiles || !hasFiles(e)) return\n e.preventDefault()\n dragDepth.current = 0\n setDragging(false)\n addFiles(Array.from(e.dataTransfer.files))\n textareaRef.current?.focus()\n }\n\n const fieldProps: ChatTextareaProps = {\n rows: 1,\n ...textareaProps,\n ref: setTextareaRef,\n className: cx('agno-input__textarea', cn.textarea, textareaProps?.className),\n value,\n placeholder: placeholder ?? (isBusy ? 'Running...' : 'Ask anything...'),\n disabled: isDisabled,\n onChange: (e) => {\n setValue(e.target.value)\n textareaProps?.onChange?.(e)\n },\n onKeyDown,\n }\n\n const iconSize = compact ? 14 : 16\n const field = (\n <div className=\"agno-input__field\">\n {renderTextarea ? renderTextarea(fieldProps) : <textarea {...fieldProps} />}\n </div>\n )\n const attach = allowFiles && (\n <>\n <button\n type=\"button\"\n className={cx('agno-btn', compact ? 'agno-btn--ghost' : 'agno-btn--outline', 'agno-btn--icon', cn.attachButton)}\n onClick={() => fileRef.current?.click()}\n disabled={isDisabled}\n aria-label={files.length ? `Attach files; ${files.length} attached` : 'Attach files'}\n title={files.length ? files.map((f) => f.name).join(', ') : undefined}\n >\n <Paperclip size={iconSize} />\n </button>\n <input\n ref={fileRef}\n type=\"file\"\n multiple\n hidden\n accept={accept}\n onChange={(e) => addFiles(Array.from(e.target.files ?? []))}\n />\n </>\n )\n const primary =\n isBusy && stop ? (\n <button\n type=\"button\"\n className={cx('agno-btn', 'agno-btn--destructive', 'agno-btn--icon', cn.stopButton)}\n onClick={stop}\n aria-label=\"Stop\"\n >\n <Stop size={iconSize} />\n </button>\n ) : (\n <button\n type=\"button\"\n className={cx('agno-btn', 'agno-btn--icon', cn.sendButton)}\n onClick={() => void submit()}\n disabled={!canSend}\n aria-label=\"Send\"\n >\n <ArrowUp size={iconSize} />\n </button>\n )\n\n return (\n <div\n className={cx('agno-input', compact && 'agno-input--compact', cn.input, className)}\n data-dragging={dragging ? 'true' : undefined}\n onDragEnter={onDragEnter}\n onDragOver={onDragOver}\n onDragLeave={onDragLeave}\n onDrop={onDrop}\n >\n <div className=\"agno-input__dock\">\n {dragging && (\n <div className={cx('agno-input__drop', cn.dropOverlay)} aria-hidden>\n <Paperclip size={16} />\n <span>{dropLabel}</span>\n </div>\n )}\n {above}\n <FilePreview\n files={files}\n onRemove={(i) => {\n setFiles(filesRef.current.filter((_, j) => j !== i))\n setFileError(null)\n }}\n onClear={() => {\n setFiles([])\n setFileError(null)\n }}\n className={cn.files}\n />\n {fileError && (\n <p className={cx('agno-input__error', cn.fileError)} role=\"alert\">\n {fileError}\n </p>\n )}\n\n {compact ? (\n // One line: the field, then every control beside it.\n <div className={cx('agno-input__row', cn.inputRow)}>\n {leading}\n {field}\n <div className=\"agno-input__actions\">\n {attach}\n {trailing}\n {primary}\n </div>\n </div>\n ) : (\n field\n )}\n\n {below}\n\n {!compact && (\n <div className={cx('agno-input__row', cn.inputRow)}>\n <div className=\"agno-input__actions\">\n {leading}\n {attach}\n </div>\n <div className=\"agno-input__actions\">\n {trailing}\n {primary}\n </div>\n </div>\n )}\n </div>\n </div>\n )\n}\n","/**\n * \"Related questions\" — the follow-up prompts an agent suggests after its\n * answer, stacked as a list of one-line buttons. An agent built with\n * `followups=True` sends them as a `FollowupsCompleted` event and stores them\n * on the run; `<ChatWindow>` pins the latest answer's above the composer, and\n * `<Message onFollowup>` puts them under the answer instead. Render the\n * component yourself from `message.followups` to place them anywhere else.\n *\n * Prompts are trimmed, de-duplicated and clamped to one line each — a model\n * asked for \"5–10 words\" does not always comply, and a wrapped row reads like\n * an answer rather than a question to ask. The full text is on the `title`.\n */\n\nimport React from 'react'\n\nimport { cx } from '../../cx'\nimport type { ChatClassNames } from '../classNames'\nimport { useResolvedClassNames } from '../ChatProvider'\n\nexport interface FollowupsProps {\n /** The suggested prompts, as the run carried them. */\n items?: string[] | null\n /** Called with the prompt text to send. */\n onSelect: (prompt: string) => void\n /** Heading above the list. Pass `null` for none. Default \"Related questions\". */\n title?: React.ReactNode | null\n /**\n * Lines each prompt may take before it is cut with an ellipsis. Default 1;\n * `false` lets them wrap.\n */\n lines?: number | false\n /** Show at most this many. Default: all of them. */\n max?: number\n /** Grey the list out (a run is in flight, the composer is disabled…). */\n disabled?: boolean\n className?: string\n classNames?: ChatClassNames\n}\n\n/** Trim, drop empties, and keep the first of any duplicates (case-insensitively). */\nexport function normalizeFollowups(items?: readonly string[] | null): string[] {\n if (!items?.length) return []\n const seen = new Set<string>()\n const out: string[] = []\n for (const raw of items) {\n if (typeof raw !== 'string') continue\n const text = raw.replace(/\\s+/g, ' ').trim()\n const key = text.toLowerCase()\n if (!text || seen.has(key)) continue\n seen.add(key)\n out.push(text)\n }\n return out\n}\n\nexport function Followups({\n items,\n onSelect,\n title = 'Related questions',\n lines = 1,\n max,\n disabled,\n className,\n classNames,\n}: FollowupsProps): React.ReactElement | null {\n const cn = useResolvedClassNames(classNames)\n const prompts = normalizeFollowups(items).slice(0, max ?? undefined)\n if (prompts.length === 0) return null\n\n const clamp = lines === false ? 'none' : Math.max(1, Math.floor(lines))\n\n return (\n <div className={cx('agno-followups', cn.followups, className)} role=\"group\" aria-label=\"Related questions\">\n {title != null && <div className={cx('agno-followups__head', cn.followupsHead)}>{title}</div>}\n <div className=\"agno-followups__list\">\n {prompts.map((prompt) => (\n <button\n key={prompt}\n type=\"button\"\n className={cx('agno-followup', cn.followup)}\n style={{ '--agno-followup-lines': clamp } as React.CSSProperties}\n title={prompt}\n disabled={disabled}\n onClick={() => onSelect(prompt)}\n >\n <span className=\"agno-followup__text\">{prompt}</span>\n </button>\n ))}\n </div>\n </div>\n )\n}\n","/**\n * Human-in-the-loop panel, styled after the Agno OS chat HITL cards.\n *\n * When a run pauses, each pending tool / requirement renders as its own card:\n * the tool icon + UPPERCASE name, a collapsible Arguments accordion, per-card\n * Approve / Reject controls (with an optional rejection reason), and any\n * requested input fields. Submitting resolves every card and continues the run.\n */\n\nimport React, { useMemo, useState } from 'react'\n\nimport type { ChatMessage, EntityType, RunRequirement, ToolExecution, UserInputField } from '../../core/types'\nimport { cx } from '../../cx'\nimport { Check, ChevronDown, Close, Wrench } from './icons'\n\nexport interface HumanInputProps {\n message: ChatMessage\n entityType?: EntityType\n busy?: boolean\n /** Continue the run with the resolved tools (agent/team) or step requirements (workflow). */\n onResolve: (resolution: { tools?: ToolExecution[]; stepRequirements?: unknown[] }) => void\n className?: string\n}\n\ntype Choice = 'confirm' | 'reject'\n\ninterface Ask {\n id: string\n name?: string\n args?: Record<string, unknown>\n needsConfirmation: boolean\n fields: UserInputField[]\n tool?: ToolExecution\n requirement?: RunRequirement\n}\n\nconst isBoolField = (f: UserInputField) => f.field_type === 'bool' || f.field_type === 'boolean'\n\n/** Build the list of pending asks from the paused message. */\nfunction buildAsks(message: ChatMessage, entityType?: EntityType): Ask[] {\n const fromTools = (message.tool_calls ?? [])\n .filter((t) => t.requires_confirmation || t.requires_user_input)\n .map<Ask>((t) => ({\n id: t.tool_call_id ?? `${t.tool_name}`,\n name: t.tool_name,\n args: t.tool_args,\n needsConfirmation: Boolean(t.requires_confirmation) && t.confirmed == null,\n fields: t.requires_user_input ? t.user_input_schema ?? [] : [],\n tool: t,\n }))\n\n const fromReqs = (message.requirements ?? []).map<Ask>((r) => ({\n id: r.id,\n name: r.tool_execution?.tool_name,\n args: r.tool_execution?.tool_args,\n needsConfirmation: Boolean(r.tool_execution?.requires_confirmation) || r.confirmation == null,\n fields: r.user_input_schema ?? r.tool_execution?.user_input_schema ?? [],\n requirement: r,\n }))\n\n // Workflows resolve through requirements; agents/teams through tools.\n if (entityType === 'workflow') return fromReqs.length ? fromReqs : fromTools\n return fromTools.length ? fromTools : fromReqs\n}\n\nexport function HumanInput({\n message,\n entityType,\n busy,\n onResolve,\n className,\n}: HumanInputProps): React.ReactElement | null {\n const asks = useMemo(() => buildAsks(message, entityType), [message, entityType])\n const [choices, setChoices] = useState<Record<string, Choice>>({})\n const [values, setValues] = useState<Record<string, Record<string, unknown>>>({})\n const [reasons, setReasons] = useState<Record<string, string>>({})\n const [openArgs, setOpenArgs] = useState<Record<string, boolean>>({})\n\n if (asks.length === 0) return null\n\n const setValue = (id: string, name: string, value: unknown) =>\n setValues((v) => ({ ...v, [id]: { ...(v[id] ?? {}), [name]: value } }))\n\n const valueFor = (ask: Ask, field: UserInputField): unknown =>\n values[ask.id]?.[field.name] ?? field.value ?? (isBoolField(field) ? false : '')\n\n const fillFields = (ask: Ask): UserInputField[] =>\n ask.fields.map((f) => ({ ...f, value: valueFor(ask, f) }))\n\n // Every confirmation card must have an explicit choice before continuing.\n const ready = asks.every((a) => !a.needsConfirmation || choices[a.id])\n\n const submit = () => {\n if (entityType === 'workflow') {\n const stepRequirements = asks.map((a) => {\n const approved = a.needsConfirmation ? choices[a.id] === 'confirm' : true\n return {\n id: a.id,\n confirmation: approved,\n ...(a.fields.length ? { user_input_schema: fillFields(a) } : {}),\n tool_execution: a.requirement?.tool_execution,\n ...(reasons[a.id] ? { confirmation_note: reasons[a.id] } : {}),\n }\n })\n onResolve({ stepRequirements })\n return\n }\n\n const tools: ToolExecution[] = asks.map((a) => {\n const base = a.tool ?? { tool_call_id: a.id, tool_name: a.name }\n const approved = a.needsConfirmation ? choices[a.id] === 'confirm' : true\n return {\n ...base,\n ...(a.needsConfirmation ? { confirmed: approved } : {}),\n ...(a.fields.length ? { answered: true, user_input_schema: fillFields(a) } : {}),\n ...(reasons[a.id] ? { confirmation_note: reasons[a.id] } : {}),\n }\n })\n onResolve({ tools })\n }\n\n return (\n <div className={cx('agno-hitl', className)}>\n <div className=\"agno-hitl__title\">\n Your input is needed\n </div>\n\n {asks.map((ask) => {\n const choice = choices[ask.id]\n const hasArgs = ask.args && Object.keys(ask.args).length > 0\n const argsOpen = openArgs[ask.id] ?? true\n return (\n <div className=\"agno-hitl-card\" key={ask.id}>\n <div className=\"agno-hitl-card__head\">\n <span className=\"agno-hitl-card__tool\">\n <Wrench size={12} />\n {ask.name ?? 'tool'}\n </span>\n {ask.needsConfirmation && (\n <span className=\"agno-hitl-card__choices\">\n <button\n type=\"button\"\n className={`agno-hitl-card__choice ${choice === 'reject' ? 'is-active is-reject' : ''}`}\n aria-label=\"Reject\"\n disabled={busy}\n onClick={() => setChoices((c) => ({ ...c, [ask.id]: 'reject' }))}\n >\n <Close size={14} />\n </button>\n <button\n type=\"button\"\n className={`agno-hitl-card__choice ${choice === 'confirm' ? 'is-active is-confirm' : ''}`}\n aria-label=\"Approve\"\n disabled={busy}\n onClick={() => setChoices((c) => ({ ...c, [ask.id]: 'confirm' }))}\n >\n <Check size={14} />\n </button>\n </span>\n )}\n </div>\n\n {hasArgs && (\n <div className=\"agno-hitl-card__args\">\n <button\n type=\"button\"\n className=\"agno-hitl-card__args-head\"\n onClick={() => setOpenArgs((o) => ({ ...o, [ask.id]: !argsOpen }))}\n aria-expanded={argsOpen}\n >\n Arguments\n <ChevronDown size={14} className=\"agno-hitl-card__chev\" />\n </button>\n {argsOpen && (\n <div className=\"agno-hitl-card__args-body\">\n {Object.entries(ask.args ?? {}).map(([k, v]) => (\n <div className=\"agno-hitl-card__arg\" key={k}>\n <span className=\"agno-hitl-card__arg-key\">{k}</span>\n <span className=\"agno-hitl-card__arg-val\">\n {typeof v === 'object' ? JSON.stringify(v) : String(v)}\n </span>\n </div>\n ))}\n </div>\n )}\n </div>\n )}\n\n {choice === 'reject' && (\n <textarea\n className=\"agno-hitl-card__reason\"\n placeholder=\"Reason for rejection (optional)…\"\n rows={2}\n value={reasons[ask.id] ?? ''}\n disabled={busy}\n onChange={(e) => setReasons((r) => ({ ...r, [ask.id]: e.target.value }))}\n />\n )}\n\n {ask.fields.length > 0 && (\n <div className=\"agno-hitl-card__fields\">\n {ask.fields.map((field) => (\n <label key={field.name} className={`agno-hitl-card__field ${isBoolField(field) ? 'is-bool' : ''}`}>\n <span className=\"agno-hitl-card__field-name\">{field.description || field.name}</span>\n {isBoolField(field) ? (\n <input\n type=\"checkbox\"\n checked={Boolean(valueFor(ask, field))}\n disabled={busy}\n onChange={(e) => setValue(ask.id, field.name, e.target.checked)}\n />\n ) : (\n <input\n className=\"agno-hitl-card__input\"\n value={String(valueFor(ask, field) ?? '')}\n placeholder={field.field_type ?? 'text'}\n disabled={busy}\n onChange={(e) => setValue(ask.id, field.name, e.target.value)}\n />\n )}\n </label>\n ))}\n </div>\n )}\n </div>\n )\n })}\n\n <div className=\"agno-hitl__actions\">\n <button type=\"button\" className=\"agno-btn\" disabled={busy || !ready} onClick={submit}>\n Continue\n </button>\n </div>\n </div>\n )\n}\n","import type React from 'react'\n\n/**\n * Citation payloads arrive in two shapes — retrieved knowledge-base chunks\n * (`references`) and links the model browsed (`citations.urls`) — and neither\n * carries a stable number. The UI needs one flat, numbered list so that `[1]`\n * in the answer and the first card under it are the same thing.\n *\n * `collectSources` is that list. It is pure and exported: reach for it if you\n * render sources yourself instead of using `<Citations>`.\n */\n\nimport { createContext, useContext } from 'react'\n\nimport type { Citations, Reference, ReferenceData } from '../core/types'\n\n/**\n * Link metadata shown in a preview. Everything is optional — the URL-derived\n * fields (host, favicon) are always available, the rest arrive only if the\n * payload carried them or a `resolveLinkPreview` filled them in.\n */\nexport interface LinkPreview {\n title?: string\n description?: string\n /** Absolute URL of a preview image (OpenGraph `og:image`). */\n image?: string\n /** Absolute URL of the site icon. Defaults to `/favicon.ico` on the origin. */\n favicon?: string\n /** Human name of the site, e.g. \"Agno Docs\". Falls back to the hostname. */\n siteName?: string\n}\n\n/**\n * Resolve richer metadata for a link. Runs at most once per URL, lazily — on\n * first hover, never on render — so a transcript full of citations costs\n * nothing until someone actually points at one.\n *\n * Browsers can't read another origin's `<meta>` tags (CORS), so this has to be\n * backed by something server-side of your own:\n *\n * ```tsx\n * <ChatProvider\n * resolveLinkPreview={async (url) => {\n * const res = await fetch(`/api/og?url=${encodeURIComponent(url)}`)\n * return res.ok ? res.json() : null\n * }}\n * />\n * ```\n *\n * Return `null` when there's nothing to add; the card falls back to the\n * hostname, favicon and whatever title the citation payload carried.\n */\nexport type ResolveLinkPreview = (url: string) => Promise<LinkPreview | null> | LinkPreview | null\n\n/** One numbered entry in a message's source list. */\n/**\n * Renders every link the components emit — in answers, on `[1]` chips and on\n * source cards — in place of a plain `<a>`. Given `href`, `children` and the\n * anchor attributes the component would have set (class, title, ARIA); it\n * decides how to navigate, so nothing sets `target` for it. Hand it a router\n * link to keep in-app URLs client-side.\n */\nexport type LinkComponent = React.ComponentType<\n React.AnchorHTMLAttributes<HTMLAnchorElement> & { href: string; children?: React.ReactNode }\n>\n\nexport interface Source {\n /** 1-based position — what `[1]` in the answer text refers to. */\n index: number\n /** DOM id of this source's card, so inline markers can link to it. */\n anchorId: string\n /** A link the model browsed, or a chunk retrieved from a knowledge base. */\n kind: 'url' | 'document'\n /** Absolute URL, when there is one to open. */\n url?: string\n /** Display name: the payload's title, the document name, or the hostname. */\n title: string\n /** The passage that was actually retrieved, when the payload carries one. */\n snippet?: string\n /** Retrieval query that surfaced this chunk (knowledge-base sources only). */\n query?: string\n}\n\n/** Pull a URL out of a reference's free-form `meta_data`. */\nfunction metaUrl(meta?: Record<string, unknown>): string | undefined {\n if (!meta) return undefined\n for (const key of ['url', 'link', 'source_url', 'source', 'href']) {\n const value = meta[key]\n if (typeof value === 'string' && /^https?:\\/\\//i.test(value)) return value\n }\n return undefined\n}\n\n/** The hostname without `www.`, or undefined for anything unparseable. */\nexport function sourceHost(url?: string): string | undefined {\n if (!url) return undefined\n try {\n return new URL(url).hostname.replace(/^www\\./, '')\n } catch {\n return undefined\n }\n}\n\n/**\n * The site's own icon. Same-origin to the site being cited, so no third-party\n * favicon service is involved and nothing is requested until a card renders.\n */\nexport function faviconUrl(url?: string): string | undefined {\n if (!url) return undefined\n try {\n return new URL('/favicon.ico', url).href\n } catch {\n return undefined\n }\n}\n\n/** `docs.agno.com/introduction` — the host plus a trimmed path, for card chrome. */\nexport function displayUrl(url?: string): string | undefined {\n if (!url) return undefined\n const host = sourceHost(url)\n if (!host) return undefined\n try {\n const { pathname } = new URL(url)\n const path = pathname.replace(/\\/$/, '')\n if (!path) return host\n const full = `${host}${path}`\n return full.length > 42 ? `${full.slice(0, 41)}…` : full\n } catch {\n return host\n }\n}\n\n/** Trim a retrieved passage down to something that fits on a card. */\nfunction clamp(text: string | undefined, max = 180): string | undefined {\n if (!text) return undefined\n const flat = text.replace(/\\s+/g, ' ').trim()\n if (!flat) return undefined\n return flat.length > max ? `${flat.slice(0, max - 1)}…` : flat\n}\n\nfunction toSource(\n entry: { url?: string; title?: string; snippet?: string; query?: string },\n index: number,\n idBase: string,\n): Source {\n const host = sourceHost(entry.url)\n return {\n index,\n anchorId: `${idBase}-source-${index}`,\n kind: entry.url ? 'url' : 'document',\n url: entry.url,\n title: entry.title?.trim() || host || entry.url || `Source ${index}`,\n snippet: clamp(entry.snippet),\n query: entry.query,\n }\n}\n\n/**\n * Flatten a message's `references` and `citations` into one numbered list.\n *\n * Retrieved documents come first (they are what grounded the answer), then any\n * browsed links. Entries pointing at the same URL are merged, so a link that is\n * both retrieved and cited is numbered once.\n *\n * `idBase` seeds the DOM ids used to link inline markers to cards — pass a\n * value that is stable per message, e.g. React's `useId()`.\n */\nexport function collectSources(\n references: ReferenceData[] | undefined,\n citations: Citations | undefined,\n idBase = 'agno',\n): Source[] {\n const sources: Source[] = []\n const byUrl = new Map<string, Source>()\n\n const push = (entry: { url?: string; title?: string; snippet?: string; query?: string }) => {\n if (entry.url) {\n const existing = byUrl.get(entry.url)\n if (existing) {\n // A link cited *and* retrieved: keep the richer of the two.\n if (!existing.snippet && entry.snippet) existing.snippet = clamp(entry.snippet)\n if (entry.title && (!existing.title || existing.title === sourceHost(entry.url))) {\n existing.title = entry.title\n }\n return\n }\n }\n const source = toSource(entry, sources.length + 1, idBase)\n sources.push(source)\n if (source.url) byUrl.set(source.url, source)\n }\n\n for (const group of references ?? []) {\n for (const ref of (group.references ?? []) as Reference[]) {\n push({\n url: metaUrl(ref.meta_data),\n title: ref.name,\n snippet: ref.content,\n query: group.query,\n })\n }\n }\n\n for (const cited of citations?.urls ?? []) {\n if (!cited?.url) continue\n push({ url: cited.url, title: cited.title })\n }\n\n return sources\n}\n\n/* ------------------------------------------------------------------ */\n/* Sources the model wrote into the answer */\n/* ------------------------------------------------------------------ */\n\n/** A markdown link: `[label](https://…)`. */\nconst MARKDOWN_LINK = /\\[([^\\]]+)\\]\\((https?:\\/\\/[^\\s)]+)\\)/g\n\n/** Fenced blocks and inline code are examples, not citations. */\nfunction withoutCode(text: string): string {\n return text.replace(/```[\\s\\S]*?```/g, ' ').replace(/`[^`]*`/g, ' ')\n}\n\n/**\n * The sources a model cited inline, for runs that carry no `references` or\n * `citations` at all — a common shape, e.g.\n *\n * ```text\n * Call `Agent.run()` in production. [1](https://docs.agno.com/agents/building-agents)\n *\n * Sources: [Building Agents](https://docs.agno.com/agents/building-agents)\n * ```\n *\n * A link labelled with a bare number is the citation; a link labelled with text\n * names the same URL, so the trailing \"Sources:\" line titles the cards. Numbers\n * are kept exactly as the model wrote them, so the markers in the answer and\n * the cards below it can't disagree. An answer with no numbered links has no\n * sources — a plain link in prose is not a citation.\n */\nexport function sourcesFromMarkdown(content: string | undefined, idBase = 'agno'): Source[] {\n if (!content) return []\n const text = withoutCode(content)\n\n const titles = new Map<string, string>()\n const cited = new Map<number, string>()\n for (const [, label, url] of text.matchAll(MARKDOWN_LINK)) {\n const trimmed = label.trim()\n if (/^\\d+$/.test(trimmed)) {\n if (!cited.has(Number(trimmed))) cited.set(Number(trimmed), url)\n } else if (!titles.has(url)) {\n titles.set(url, trimmed)\n }\n }\n if (cited.size === 0) return []\n\n return [...cited.entries()]\n .sort(([a], [b]) => a - b)\n .map(([index, url]) => ({\n index,\n anchorId: `${idBase}-source-${index}`,\n kind: 'url' as const,\n url,\n title: titles.get(url) ?? sourceHost(url) ?? url,\n }))\n}\n\n/** A line that opens the model's own source list: `Sources:`, `**Sources**:`… */\nconst SOURCES_LINE = /^[ \\t]*(?:\\*\\*|__)?Sources?\\s*:?(?:\\*\\*|__)?:?[ \\t]*/gim\n\n/**\n * The answer without its trailing \"Sources:\" line.\n *\n * When `sourcesFromMarkdown` has turned that line into cards, leaving it in\n * the prose lists every source twice, back to back. The line is only dropped\n * when it is the last thing in the answer and holds nothing but links — a\n * paragraph that goes on to say something is prose, and stays. A half-written\n * line mid-stream counts as links, so it never flashes up before the cards do.\n */\nexport function withoutSourcesLine(content: string): string {\n const matches = [...content.matchAll(SOURCES_LINE)]\n const last = matches[matches.length - 1]\n if (!last || last.index === undefined) return content\n\n const rest = content.slice(last.index + last[0].length)\n const leftovers = rest\n .replace(MARKDOWN_LINK, '')\n // A link still arriving: `[Agents wi` or `[Agents](https://do`.\n .replace(/\\[[^\\]]*(?:\\]\\([^)]*)?$/, '')\n if (/[^\\s,;\\-*\\u2022\\d.]/.test(leftovers)) return content\n\n return content.slice(0, last.index).replace(/\\s+$/, '')\n}\n\n/* ------------------------------------------------------------------ */\n/* Pointing bare markers at their source */\n/* ------------------------------------------------------------------ */\n\n/** Fenced blocks and inline code, so a transform can step over them. */\nconst CODE_SPANS = /(```[\\s\\S]*?```|`[^`]*`)/g\n\n/**\n * `[1]`, `[^2]`, `[1, 3]` — a citation marker, with the space in front of it:\n * the marker belongs against the word it qualifies, so that space is dropped.\n */\nconst MARKER = /( ?)\\[\\^?(\\d+(?:\\s*,\\s*\\d+)*)\\]/g\n\n/**\n * Rewrite the bare citation markers in an answer as links to the source they\n * name: `context [1].` becomes ``context [1](https://…).``\n *\n * A Markdown parser has no concept of a citation marker — `[1]` is prose — so\n * this runs before parsing and leaves one shape for the renderer to handle. The\n * preceding space is absorbed so the marker sits against the word it qualifies,\n * the way a footnote does.\n *\n * Untouched: markers with no matching source, anything inside code, reference\n * links (`[text][1]`), link definitions (`[1]: https://…`) and markers that are\n * already links (`[1](…)`).\n */\nexport function linkCitations(content: string, sources: Source[]): string {\n if (!content || sources.length === 0) return content\n\n // split() with a capturing group interleaves prose and code, code at the odd\n // indices — so only the even ones are rewritten.\n return content\n .split(CODE_SPANS)\n .map((segment, i) => {\n if (i % 2 === 1) return segment\n return segment.replace(\n MARKER,\n (marker, _space: string, numbers: string, offset: number, whole: string) => {\n const before = whole[offset - 1]\n const after = whole[offset + marker.length]\n if (before === ']' || before === '!' || after === '(' || after === ':') return marker\n\n const cited = numbers.split(',').map((n) => sources.find((s) => s.index === Number(n.trim())))\n if (cited.some((s) => !s)) return marker\n\n return cited.map((s) => `[${s!.index}](${s!.url ?? `#${s!.anchorId}`})`).join('')\n },\n )\n })\n .join('')\n}\n\n/* ------------------------------------------------------------------ */\n/* Sharing a message's sources */\n/* ------------------------------------------------------------------ */\n\nconst SourcesContext = createContext<Source[]>([])\n\n/**\n * Publishes the sources of the message being rendered. `<Message>` wraps its\n * body in one, which is how a `[1]` in the answer finds the card it points at —\n * including inside a custom `renderMarkdown`.\n */\nexport const SourcesProvider = SourcesContext.Provider\n\n/** The sources of the surrounding message; empty outside one. */\nexport function useSources(): Source[] {\n return useContext(SourcesContext)\n}\n","/**\n * Syntax highlighting for fenced code, backed by [Shiki](https://shiki.style).\n *\n * Nothing loads until the first fenced block renders: the engine, the two\n * themes and each grammar arrive on demand and are kept for the session. Once\n * a grammar is in, highlighting is synchronous — so a block that is streaming\n * in re-highlights on every token without a plain-text flash in between.\n *\n * Tokens carry both themes as CSS custom properties (`--shiki-light`,\n * `--shiki-dark`); the stylesheet picks one by theme class, the same way every\n * other colour in the package is chosen.\n */\n\nimport { useEffect, useMemo, useReducer } from 'react'\nimport type { HighlighterCore, LanguageInput, ThemedToken } from 'shiki/core'\n\n/** The theme pair every token is coloured for. */\nconst THEMES = { light: 'github-light', dark: 'monokai' } as const\n\nlet highlighter: HighlighterCore | undefined\nlet booting: Promise<HighlighterCore> | undefined\nconst loading = new Map<string, Promise<void>>()\nconst loaded = new Set<string>()\nconst unsupported = new Set<string>()\n\nasync function boot(): Promise<HighlighterCore> {\n if (highlighter) return highlighter\n booting ??= (async () => {\n const [{ createHighlighterCore }, { createJavaScriptRegexEngine }, { bundledThemes }] =\n await Promise.all([import('shiki/core'), import('shiki/engine/javascript'), import('shiki/themes')])\n highlighter = await createHighlighterCore({\n themes: [bundledThemes[THEMES.light], bundledThemes[THEMES.dark]],\n langs: [],\n // No WASM: the JS engine keeps this a plain import. `forgiving` skips\n // the odd grammar rule it can't translate rather than failing the block.\n engine: createJavaScriptRegexEngine({ forgiving: true }),\n })\n return highlighter\n })()\n return booting\n}\n\n/** Load one grammar, once. Resolves either way; unknown languages stay plain. */\nfunction ensureLanguage(lang: string): Promise<void> {\n let pending = loading.get(lang)\n if (!pending) {\n pending = (async () => {\n const [core, { bundledLanguages }] = await Promise.all([boot(), import('shiki/langs')])\n const grammar = (bundledLanguages as Record<string, LanguageInput | undefined>)[lang]\n if (!grammar) {\n unsupported.add(lang)\n return\n }\n await core.loadLanguage(grammar)\n loaded.add(lang)\n })().catch(() => {\n unsupported.add(lang)\n })\n loading.set(lang, pending)\n }\n return pending\n}\n\n/** Normalise a fence's language tag to what Shiki knows it as. */\nexport function normalizeLanguage(language: string | undefined): string | undefined {\n const lang = language?.trim().toLowerCase()\n return lang || undefined\n}\n\n/**\n * Highlighted lines for `code`, or `null` while the grammar is still loading\n * (and for languages Shiki doesn't know) — render the text plain meanwhile.\n */\nexport function useHighlight(code: string, language: string | undefined): ThemedToken[][] | null {\n const [, rerender] = useReducer((n: number) => n + 1, 0)\n const lang = normalizeLanguage(language)\n const ready = Boolean(lang && loaded.has(lang))\n\n useEffect(() => {\n if (!lang || ready || unsupported.has(lang)) return\n let cancelled = false\n void ensureLanguage(lang).then(() => {\n if (!cancelled) rerender()\n })\n return () => {\n cancelled = true\n }\n }, [lang, ready])\n\n return useMemo(() => {\n if (!lang || !ready || !highlighter) return null\n try {\n return highlighter.codeToTokens(code, { lang, themes: THEMES, defaultColor: false }).tokens\n } catch {\n return null\n }\n }, [code, lang, ready])\n}\n","/**\n * Link previews: the little card that describes where a citation points.\n *\n * Two pieces of metadata feed it. The URL itself always yields a hostname and a\n * favicon, and the citation payload usually carries a title and the retrieved\n * passage — that much renders with no network beyond the site icon. Anything\n * richer (OpenGraph title, description, image) comes from the optional\n * `resolveLinkPreview` on `<ChatProvider>`, and only for links someone actually\n * points at: the fetch is triggered by the first hover, not by rendering.\n */\n\nimport React, {\n cloneElement,\n isValidElement,\n useCallback,\n useEffect,\n useLayoutEffect,\n useId,\n useRef,\n useState,\n} from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { cx } from '../../cx'\nimport { useOptionalChatContext, useResolvedClassNames } from '../ChatProvider'\nimport {\n displayUrl,\n faviconUrl,\n type LinkPreview as LinkPreviewData,\n type ResolveLinkPreview,\n type Source,\n} from '../sources'\nimport { BookOpen, Globe } from './icons'\n\n/** `useLayoutEffect` warns when it runs on the server; there it never has to. */\nconst useIsomorphicLayoutEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect\n\n/* ------------------------------------------------------------------ */\n/* Resolving */\n/* ------------------------------------------------------------------ */\n\n/**\n * One cache per resolver, so two providers pointing at different metadata\n * endpoints never read each other's answers, and a resolver that is swapped out\n * takes its cache with it.\n */\nconst caches = new WeakMap<ResolveLinkPreview, Map<string, LinkPreviewData | null>>()\nconst inflight = new WeakMap<ResolveLinkPreview, Map<string, Promise<LinkPreviewData | null>>>()\n\nfunction cacheFor<T>(store: WeakMap<ResolveLinkPreview, Map<string, T>>, key: ResolveLinkPreview) {\n let map = store.get(key)\n if (!map) {\n map = new Map<string, T>()\n store.set(key, map)\n }\n return map\n}\n\n/** The `resolveLinkPreview` from the nearest provider, if one was supplied. */\nexport function useLinkPreviewResolver(): ResolveLinkPreview | undefined {\n return useOptionalChatContext()?.resolveLinkPreview\n}\n\n/**\n * Resolve metadata for `url`, at most once per URL per resolver.\n *\n * Nothing happens until `enabled` flips true, which is how hovering pays for\n * the lookup instead of rendering. Returns `null` while there is nothing to\n * add — the caller still has the hostname and favicon to fall back on.\n */\nexport function useLinkPreview(\n url: string | undefined,\n enabled: boolean,\n): { preview: LinkPreviewData | null; loading: boolean } {\n const resolve = useLinkPreviewResolver()\n const cached = url && resolve ? cacheFor(caches, resolve).get(url) : undefined\n const [preview, setPreview] = useState<LinkPreviewData | null>(cached ?? null)\n const [loading, setLoading] = useState(false)\n\n useEffect(() => {\n if (!enabled || !url || !resolve) return\n const store = cacheFor(caches, resolve)\n if (store.has(url)) {\n setPreview(store.get(url) ?? null)\n return\n }\n\n let live = true\n const pending = cacheFor(inflight, resolve)\n const request =\n pending.get(url) ??\n (async () => {\n try {\n return (await resolve(url)) ?? null\n } catch {\n // A preview is decoration; a failed lookup falls back to the URL.\n return null\n }\n })()\n pending.set(url, request)\n\n setLoading(true)\n void request.then((result) => {\n store.set(url, result)\n pending.delete(url)\n if (!live) return\n setPreview(result)\n setLoading(false)\n })\n\n return () => {\n live = false\n }\n }, [enabled, url, resolve])\n\n return { preview, loading }\n}\n\n/* ------------------------------------------------------------------ */\n/* Favicon */\n/* ------------------------------------------------------------------ */\n\n/** The site's icon, falling back to a glyph when the origin serves none. */\nexport function Favicon({\n url,\n kind = 'url',\n size = 14,\n className,\n}: {\n url?: string\n kind?: Source['kind']\n size?: number\n className?: string\n}): React.ReactElement {\n const src = faviconUrl(url)\n const [failed, setFailed] = useState(false)\n\n // A new URL deserves a fresh attempt at its icon.\n useEffect(() => setFailed(false), [src])\n\n if (kind === 'document' || !src || failed) {\n const Glyph = kind === 'document' ? BookOpen : Globe\n return (\n <span className={cx('agno-favicon', 'agno-favicon--glyph', className)} aria-hidden>\n <Glyph size={size} />\n </span>\n )\n }\n\n return (\n <img\n className={cx('agno-favicon', className)}\n src={src}\n alt=\"\"\n width={size}\n height={size}\n loading=\"lazy\"\n decoding=\"async\"\n onError={() => setFailed(true)}\n aria-hidden\n />\n )\n}\n\n/* ------------------------------------------------------------------ */\n/* The card */\n/* ------------------------------------------------------------------ */\n\nexport interface LinkPreviewCardProps {\n source: Source\n /** Resolved metadata, when a `resolveLinkPreview` returned some. */\n preview?: LinkPreviewData | null\n loading?: boolean\n className?: string\n}\n\n/**\n * The preview body: site row, title, description. Shared by the hover card and\n * the source cards under a message, so the two always agree.\n */\nexport function LinkPreviewCard({\n source,\n preview,\n loading,\n className,\n}: LinkPreviewCardProps): React.ReactElement {\n const site = preview?.siteName ?? displayUrl(source.url) ?? source.query ?? 'Knowledge base'\n const title = preview?.title ?? source.title\n const body = preview?.description ?? source.snippet\n\n return (\n <div className={cx('agno-preview', className)} data-loading={loading ? 'true' : undefined}>\n <div className=\"agno-preview__site\">\n <Favicon url={preview?.favicon ?? source.url} kind={source.kind} />\n <span className=\"agno-preview__host\">{site}</span>\n </div>\n <div className=\"agno-preview__title\">{title}</div>\n {body && <div className=\"agno-preview__desc\">{body}</div>}\n {preview?.image && (\n <img className=\"agno-preview__image\" src={preview.image} alt=\"\" loading=\"lazy\" />\n )}\n </div>\n )\n}\n\n/* ------------------------------------------------------------------ */\n/* The hover card */\n/* ------------------------------------------------------------------ */\n\n/** Card width, in px. Set here rather than in CSS: the flip maths needs it. */\nconst PREVIEW_WIDTH = 320\n/** Space between the trigger and the card. */\nconst GAP = 8\n/** Long enough that skimming the text doesn't flash cards at you. */\nexport const OPEN_DELAY = 140\n/** Short enough to feel closed, long enough to cross the gap into the card. */\nexport const CLOSE_DELAY = 120\n\nexport type Placement = { top: number; left: number; side: 'top' | 'bottom' }\n\nexport interface PlacementOptions {\n /** Width of the floating element, in px — the flip maths needs it. */\n width?: number\n /** Centred on the trigger (a hover card) or flush with its left edge (a menu). */\n align?: 'center' | 'start'\n}\n\n/**\n * Fixed-position placement against the trigger. Fixed rather than absolute\n * because the card is portalled to `<body>` — the transcript is a scroll\n * container, and an in-flow popover would be clipped by it.\n */\nexport function usePlacement(\n anchor: HTMLElement | null,\n open: boolean,\n { width = PREVIEW_WIDTH, align = 'center' }: PlacementOptions = {},\n): Placement | null {\n const [placement, setPlacement] = useState<Placement | null>(null)\n\n useIsomorphicLayoutEffect(() => {\n if (!open || !anchor) return\n\n const place = () => {\n const rect = anchor.getBoundingClientRect()\n // Above by default — the answer text continues below, and covering what\n // you just read is worse than covering what you haven't.\n const side = rect.top > 220 ? 'top' : 'bottom'\n const wanted = align === 'center' ? rect.left + rect.width / 2 - width / 2 : rect.left\n const left = Math.max(GAP, Math.min(wanted, window.innerWidth - width - GAP))\n setPlacement({\n top: side === 'top' ? rect.top - GAP : rect.bottom + GAP,\n left,\n side,\n })\n }\n\n place()\n // `true` — the trigger usually sits inside the scrolling transcript, whose\n // scroll events never reach the window.\n window.addEventListener('scroll', place, true)\n window.addEventListener('resize', place)\n return () => {\n window.removeEventListener('scroll', place, true)\n window.removeEventListener('resize', place)\n }\n }, [anchor, open, width, align])\n\n return placement\n}\n\nexport interface HoverPreviewProps {\n source: Source\n /** The trigger — a citation marker or a link in the answer. */\n children: React.ReactElement\n /** Turn the hover card off and render the trigger bare. */\n disabled?: boolean\n className?: string\n}\n\n/**\n * Wraps a citation marker or link so that pointing at it — or tabbing to it —\n * reveals the preview card. Escape dismisses it; the card is reachable with the\n * pointer, so links inside it stay clickable.\n */\nexport function HoverPreview({\n source,\n children,\n disabled,\n className,\n}: HoverPreviewProps): React.ReactElement {\n const [open, setOpen] = useState(false)\n // Set once, on the first open: the resolver should run for links people look\n // at, and keep its result for the rest of the session.\n const [awake, setAwake] = useState(false)\n const [anchor, setAnchor] = useState<HTMLElement | null>(null)\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null)\n const id = useId()\n const cn = useResolvedClassNames()\n\n const { preview, loading } = useLinkPreview(source.url, awake)\n const placement = usePlacement(anchor, open)\n\n const schedule = useCallback((next: boolean) => {\n if (timer.current) clearTimeout(timer.current)\n timer.current = setTimeout(\n () => {\n setOpen(next)\n if (next) setAwake(true)\n },\n next ? OPEN_DELAY : CLOSE_DELAY,\n )\n }, [])\n\n useEffect(\n () => () => {\n if (timer.current) clearTimeout(timer.current)\n },\n [],\n )\n\n useEffect(() => {\n if (!open) return\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setOpen(false)\n }\n document.addEventListener('keydown', onKey)\n return () => document.removeEventListener('keydown', onKey)\n }, [open])\n\n // Portals need a document: render nothing on the server, mount on hydration.\n const [mounted, setMounted] = useState(false)\n useEffect(() => setMounted(true), [])\n\n if (disabled) return children\n\n const trigger = isValidElement(children)\n ? cloneElement(children as React.ReactElement<{ 'aria-describedby'?: string }>, {\n 'aria-describedby': open ? id : undefined,\n })\n : children\n\n // Portalled content escapes the `.agno-root` wrapper, so carry the theme with\n // it — tokens live on `:root` too, but a light embed on a dark page would\n // otherwise hand the card the page's palette.\n const light = anchor?.closest('.agno-light') ? 'agno-light' : undefined\n\n return (\n <span\n className={cx('agno-hover', className)}\n ref={setAnchor}\n onMouseEnter={() => schedule(true)}\n onMouseLeave={() => schedule(false)}\n onFocus={() => {\n setAwake(true)\n setOpen(true)\n }}\n onBlur={() => setOpen(false)}\n >\n {trigger}\n {mounted &&\n open &&\n placement &&\n createPortal(\n <div\n id={id}\n role=\"tooltip\"\n className={cx('agno-hovercard', `agno-hovercard--${placement.side}`, light, cn.linkPreview)}\n style={{ top: placement.top, left: placement.left, width: PREVIEW_WIDTH }}\n onMouseEnter={() => schedule(true)}\n onMouseLeave={() => schedule(false)}\n >\n <LinkPreviewCard source={source} preview={preview} loading={loading} />\n </div>,\n document.body,\n )}\n </span>\n )\n}\n","/**\n * Markdown for a chat transcript, rendered by [Streamdown](https://streamdown.ai).\n *\n * Answers arrive a token at a time, which is where a plain parser falls down:\n * mid-stream the text is full of unterminated bold, half-written links and\n * unclosed fences. Streamdown repairs that as it goes, and brings GFM (tables,\n * task lists, strikethrough) and a sanitising pass with it.\n *\n * Streamdown styles itself with Tailwind utility classes, which do nothing in\n * an app that doesn't use Tailwind. So every element is mapped back onto this\n * package's own `agno-md-*` classes: the shipped stylesheet keeps working, no\n * Tailwind is required, and `classNames`/tokens still govern the look.\n *\n * Prefer a different renderer? `renderMarkdown` on the chat components replaces\n * this one entirely.\n */\n\nimport React, { useEffect, useMemo, useState } from 'react'\nimport type { ThemedToken } from 'shiki/core'\nimport { Streamdown, type StreamdownProps } from 'streamdown'\n\nimport { cx } from '../../cx'\nimport { useCodeCopy, useLinkComponent, useResolvedClassNames } from '../ChatProvider'\nimport { normalizeLanguage, useHighlight } from '../highlight'\nimport { linkCitations, sourceHost, useSources, type LinkComponent, type Source } from '../sources'\nimport { HoverPreview, useLinkPreviewResolver } from './LinkPreview'\nimport { Check, Copy } from './icons'\n\nexport interface MarkdownProps {\n content: string\n className?: string\n /**\n * Sources the inline `[n]` markers refer to. Defaults to the sources of the\n * surrounding `<Message>`; pass `[]` to render markers as plain text.\n */\n sources?: Source[]\n /**\n * The answer is still streaming, so repair half-written markdown rather than\n * rendering a stray `**` or an unclosed fence.\n */\n streaming?: boolean\n /**\n * Put a copy button on fenced code blocks. On by default; set `false` to drop\n * it, or set `codeCopy` on `<ChatProvider>` to turn it off everywhere.\n */\n codeCopy?: boolean\n /**\n * Render links with your own component instead of `<a>` — a router link\n * keeps in-app URLs client-side. Defaults to the provider's `linkComponent`.\n */\n linkComponent?: LinkComponent\n /** Escape hatch onto Streamdown itself — anything not set here. */\n options?: Omit<StreamdownProps, 'children' | 'className' | 'components'>\n}\n\n/** What the element map needs to turn links into citations and previews. */\ninterface InlineContext {\n sources: Source[]\n /** Whether a `resolveLinkPreview` is configured — links only preview if so. */\n canResolve: boolean\n /** Class override for the inline `[1]` chip. */\n markerClass?: string\n /** Class override for the code-block copy button. */\n copyClass?: string\n /** Whether fenced code blocks carry a copy button. */\n codeCopy: boolean\n /** Renders links in place of `<a>`, when the host supplied one. */\n Link?: LinkComponent\n}\n\n/** Props every mapped element gets; `node` is Streamdown's, not the DOM's. */\ntype ElementProps = React.HTMLAttributes<HTMLElement> & { node?: unknown }\n\n/** Map one tag onto its `agno-*` class, dropping Streamdown's own. */\nfunction el(tag: string, className?: string) {\n return function Element({ node: _node, className: _theirs, ...rest }: ElementProps) {\n return React.createElement(tag, { className, ...rest })\n }\n}\n\n/** A link in the answer, as a source: the cited one if we have it. */\nfunction sourceForUrl(url: string | undefined, sources: Source[]): Source | undefined {\n return url ? sources.find((s) => s.url === url) : undefined\n}\n\n/**\n * A link labelled with a bare number — `[1](https://…)` — is a citation, which\n * is how a model cites when its run carries no citation payload, and what\n * `linkCitations` turns a bare `[1]` into. Everything else is just a link.\n */\nfunction citationForLink(\n label: string,\n href: string | undefined,\n ctx: InlineContext,\n): Source | undefined {\n if (!/^\\d+$/.test(label.trim())) return undefined\n return sourceForUrl(href, ctx.sources) ?? ctx.sources.find((s) => s.index === Number(label.trim()))\n}\n\n/** The text of a link, when it is a plain string — that's all a marker can be. */\nfunction labelOf(children: React.ReactNode): string {\n if (typeof children === 'string') return children\n if (Array.isArray(children) && children.length === 1 && typeof children[0] === 'string') {\n return children[0]\n }\n return ''\n}\n\n/** The `[1]` chip: jumps to the card below the answer, previews on hover. */\nfunction CitationMarker({\n source,\n className,\n Link,\n}: {\n source: Source\n className?: string\n Link?: LinkComponent\n}): React.ReactElement {\n const props = {\n className: cx('agno-cite', className),\n href: source.url ?? `#${source.anchorId}`,\n 'aria-label': `Source ${source.index}: ${source.title}`,\n }\n return (\n <HoverPreview source={source} className=\"agno-cite__wrap\">\n {Link && source.url ? (\n <Link {...props}>{source.index}</Link>\n ) : (\n <a\n {...props}\n target={source.url ? '_blank' : undefined}\n rel={source.url ? 'noreferrer noopener' : undefined}\n >\n {source.index}\n </a>\n )}\n </HoverPreview>\n )\n}\n\n/** How long the button stays in its \"copied\" state before reverting. */\nconst COPIED_FOR = 1600\n/** How long to wait on the async Clipboard API before trying the old way. */\nconst CLIPBOARD_TIMEOUT = 400\n\n/**\n * Copy text, by whichever route the browser allows.\n *\n * The async Clipboard API is the right one, but it rejects on an insecure\n * origin and whenever the document isn't focused — so a selection-based copy\n * stands behind it. Returns whether anything was actually copied: the button\n * should not claim success it didn't have.\n *\n * Exported because a host building its own copy affordance wants the same\n * fallbacks, and because the failure paths are worth testing.\n */\nexport async function writeClipboard(text: string): Promise<boolean> {\n try {\n // Raced, because in some states — an unfocused document, a pending\n // permission prompt — the promise neither resolves nor rejects, and an\n // unguarded await would leave the button stuck saying nothing happened.\n const wrote = await Promise.race([\n navigator.clipboard.writeText(text).then(() => true),\n new Promise<false>((resolve) => setTimeout(() => resolve(false), CLIPBOARD_TIMEOUT)),\n ])\n if (wrote) return true\n } catch {\n // Fall through to the older route.\n }\n\n try {\n const area = document.createElement('textarea')\n area.value = text\n area.setAttribute('readonly', '')\n // Off-screen but selectable, and fixed so selecting it can't scroll the page.\n area.style.cssText = 'position:fixed;top:0;left:-9999px;opacity:0'\n document.body.appendChild(area)\n area.select()\n const copied = document.execCommand('copy')\n document.body.removeChild(area)\n return copied\n } catch {\n return false\n }\n}\n\n/** Copies the block it sits on, from the header bar. */\nfunction CopyButton({ text, className }: { text: () => string; className?: string }): React.ReactElement {\n const [copied, setCopied] = useState(false)\n\n useEffect(() => {\n if (!copied) return\n const timer = setTimeout(() => setCopied(false), COPIED_FOR)\n return () => clearTimeout(timer)\n }, [copied])\n\n const copy = async () => {\n if (await writeClipboard(text())) setCopied(true)\n }\n\n return (\n <button\n type=\"button\"\n className={cx('agno-md-copy', copied && 'is-copied', className)}\n onClick={copy}\n aria-label={copied ? 'Copied' : 'Copy code'}\n title={copied ? 'Copied' : 'Copy code'}\n >\n {copied ? <Check size={13} /> : <Copy size={13} />}\n </button>\n )\n}\n\n/** Concatenate the text nodes of an element's children. */\nfunction textOf(children: React.ReactNode): string {\n if (typeof children === 'string') return children\n if (typeof children === 'number') return String(children)\n if (Array.isArray(children)) return children.map(textOf).join('')\n if (React.isValidElement<{ children?: React.ReactNode }>(children)) return textOf(children.props.children)\n return ''\n}\n\n/**\n * The language and text of a fenced block. Streamdown hands `pre` one child —\n * the `<code>` element, with the fence's language as a `language-*` class.\n */\nexport function fencedCode(children: React.ReactNode): { language?: string; code: string } {\n const child = Array.isArray(children) ? children[0] : children\n if (!React.isValidElement<{ className?: string; children?: React.ReactNode }>(child)) {\n return { code: textOf(children) }\n }\n const language = /(?:^|\\s)language-([^\\s]+)/.exec(child.props.className ?? '')?.[1]\n // The parser leaves the fence's closing newline on the text.\n return { language, code: textOf(child.props.children).replace(/\\n$/, '') }\n}\n\n/** Plain lines, in the shape the highlighter returns, for before it's ready. */\nfunction plainLines(code: string): ThemedToken[][] {\n return code.split('\\n').map((line) => [{ content: line, offset: 0 }])\n}\n\n/**\n * A fenced code block: a header bar naming the language and holding the copy\n * button, then the code with a line-number gutter and syntax colours.\n *\n * Line numbers are CSS counters, so they are neither selectable nor part of\n * what the copy button writes.\n */\nfunction CodeBlock({\n children,\n copyClass,\n codeCopy,\n}: {\n children?: React.ReactNode\n copyClass?: string\n codeCopy: boolean\n}): React.ReactElement {\n const { language, code } = useMemo(() => fencedCode(children), [children])\n const highlighted = useHighlight(code, language)\n const lines = highlighted ?? plainLines(code)\n const label = normalizeLanguage(language) ?? 'text'\n\n return (\n <div className=\"agno-md-code-block\" data-language={label}>\n <div className=\"agno-md-code-head\">\n <span className=\"agno-md-code-lang\">{label}</span>\n {codeCopy && <CopyButton className={copyClass} text={() => code} />}\n </div>\n <pre className=\"agno-md-pre\" style={{ '--agno-code-gutter': `${String(lines.length).length}ch` } as React.CSSProperties}>\n <code className={language ? `language-${language}` : undefined}>\n {lines.map((tokens, i) => (\n <React.Fragment key={i}>\n <span className=\"agno-md-line\">\n {tokens.map((token, j) => (\n <span key={j} style={token.htmlStyle as React.CSSProperties | undefined}>\n {token.content}\n </span>\n ))}\n </span>\n {i < lines.length - 1 && '\\n'}\n </React.Fragment>\n ))}\n </code>\n </pre>\n </div>\n )\n}\n\n/** Every element Streamdown renders, in this package's own clothes. */\nfunction elementsFor(ctx: InlineContext): StreamdownProps['components'] {\n const Link = function Link({\n node: _node,\n className: _theirs,\n href,\n children,\n ...rest\n }: ElementProps & { href?: string }) {\n const cited = citationForLink(labelOf(children), href, ctx)\n if (cited) return <CitationMarker source={cited} className={ctx.markerClass} Link={ctx.Link} />\n\n const link =\n ctx.Link && href ? (\n <ctx.Link href={href} {...rest}>\n {children}\n </ctx.Link>\n ) : (\n <a href={href} target=\"_blank\" rel=\"noreferrer noopener\" {...rest}>\n {children}\n </a>\n )\n const source = sourceForUrl(href, ctx.sources)\n if (!href || !/^https?:\\/\\//i.test(href) || (!source && !ctx.canResolve)) return link\n\n return (\n <HoverPreview\n source={\n source ?? {\n index: 0,\n anchorId: '',\n kind: 'url',\n url: href,\n title: labelOf(children) || sourceHost(href) || href,\n }\n }\n >\n {link}\n </HoverPreview>\n )\n }\n\n // Fenced code arrives with a `language-*` class and is already inside a\n // <pre>; anything else is inline code.\n const Code = function Code({ node: _node, className, ...rest }: ElementProps) {\n const fenced = typeof className === 'string' && className.includes('language-')\n return <code className={fenced ? className : 'agno-md-code'} {...rest} />\n }\n\n return {\n a: Link,\n code: Code,\n p: el('p', 'agno-md-p'),\n // Streamdown renders `**bold**` as a Tailwind-classed <span>, which is not\n // bold anywhere Tailwind isn't. These stay real elements, styled by the\n // browser and read correctly by a screen reader.\n strong: el('strong'),\n em: el('em'),\n del: el('del'),\n sub: el('sub'),\n sup: el('sup'),\n h1: el('h2', 'agno-md-heading'),\n h2: el('h3', 'agno-md-heading'),\n h3: el('h4', 'agno-md-heading'),\n h4: el('h5', 'agno-md-heading'),\n h5: el('h6', 'agno-md-heading'),\n h6: el('h6', 'agno-md-heading'),\n ul: el('ul', 'agno-md-list'),\n ol: el('ol', 'agno-md-list'),\n li: el('li'),\n pre: function Pre({ children }: ElementProps) {\n return (\n <CodeBlock copyClass={ctx.copyClass} codeCopy={ctx.codeCopy}>\n {children}\n </CodeBlock>\n )\n },\n blockquote: el('blockquote', 'agno-md-quote'),\n hr: el('hr', 'agno-md-rule'),\n table: function Table({ node: _node, className: _theirs, ...rest }: ElementProps) {\n // Wide tables scroll in place rather than stretching the transcript.\n return (\n <div className=\"agno-md-table-wrap\">\n <table className=\"agno-md-table\" {...rest} />\n </div>\n )\n },\n thead: el('thead'),\n tbody: el('tbody'),\n tr: el('tr'),\n th: el('th'),\n td: el('td'),\n img: function Image({ node: _node, className: _theirs, ...rest }: ElementProps) {\n return <img className=\"agno-md-img\" {...rest} />\n },\n }\n}\n\nexport function Markdown({\n content,\n className,\n sources,\n streaming,\n codeCopy,\n linkComponent,\n options,\n}: MarkdownProps): React.ReactElement {\n const fromMessage = useSources()\n const cn = useResolvedClassNames()\n const canResolve = Boolean(useLinkPreviewResolver())\n const fromProvider = useCodeCopy()\n const providerLink = useLinkComponent()\n const cited = sources ?? fromMessage\n const copy = codeCopy ?? fromProvider ?? true\n const Link = linkComponent ?? providerLink\n\n const components = useMemo(\n () =>\n elementsFor({\n sources: cited,\n canResolve,\n markerClass: cn.citationMarker,\n copyClass: cn.copyButton,\n codeCopy: copy,\n Link,\n }),\n [cited, canResolve, cn.citationMarker, cn.copyButton, copy, Link],\n )\n // Bare `[1]` markers are prose to a Markdown parser, so point them at their\n // source first — then one link renderer handles both citation shapes.\n const text = useMemo(() => linkCitations(content, cited), [content, cited])\n\n return (\n <Streamdown\n className={cx('agno-md', className)}\n components={components}\n mode={streaming ? 'streaming' : 'static'}\n parseIncompleteMarkdown={streaming !== false}\n {...options}\n >\n {text}\n </Streamdown>\n )\n}\n\nexport type RenderMarkdown = (content: string) => React.ReactNode\n","/**\n * Tool calls, rendered the AgentOS way: a row of compact uppercase pills above\n * the answer, with the selected one expanding into a detail panel showing its\n * arguments and result.\n */\n\nimport React, { useState } from 'react'\n\nimport type { ToolExecution } from '../../core/types'\nimport { Close, Spinner, Wrench } from './icons'\n\ntype ToolStatus = { label: string; cls: string }\n\nfunction statusOf(tool: ToolExecution): ToolStatus {\n if (tool.tool_call_error) return { label: 'error', cls: 'error' }\n if (tool.requires_confirmation && tool.confirmed == null) return { label: 'awaiting approval', cls: 'paused' }\n if (tool.requires_user_input && !tool.answered) return { label: 'awaiting input', cls: 'paused' }\n if (tool.result != null) return { label: 'done', cls: 'done' }\n return { label: 'running', cls: 'running' }\n}\n\nfunction hasDetail(tool: ToolExecution): boolean {\n return Boolean(tool.tool_args && Object.keys(tool.tool_args).length) || tool.result != null\n}\n\nexport function ToolCalls({ tools }: { tools?: ToolExecution[] }): React.ReactElement | null {\n const [openIndex, setOpenIndex] = useState<number | null>(null)\n if (!tools || tools.length === 0) return null\n\n const open = openIndex != null ? tools[openIndex] : undefined\n const openStatus = open ? statusOf(open) : undefined\n\n return (\n <div className=\"agno-tools\">\n <div className=\"agno-tools__row\">\n {tools.map((tool, i) => {\n const status = statusOf(tool)\n const expandable = hasDetail(tool)\n return (\n <button\n type=\"button\"\n key={tool.tool_call_id ?? `${tool.tool_name}-${i}`}\n className={`agno-tool agno-tool--${status.cls} ${openIndex === i ? 'is-open' : ''}`}\n onClick={() => setOpenIndex(openIndex === i ? null : expandable ? i : null)}\n aria-expanded={openIndex === i}\n title={status.label}\n >\n <span className=\"agno-tool__name\">{tool.tool_name ?? 'tool'}</span>\n {status.cls === 'running' ? (\n <Spinner size={12} className=\"agno-tool__spinner agno-spin\" />\n ) : (\n <Wrench size={12} className=\"agno-tool__icon\" />\n )}\n </button>\n )\n })}\n </div>\n\n {open && openStatus && (\n <div className=\"agno-tool-detail\">\n <div className=\"agno-tool-detail__head\">\n <span className=\"agno-tool-detail__name\">{open.tool_name ?? 'tool'}</span>\n <span className=\"agno-tool-detail__meta\">\n <span className={`agno-tool-detail__status agno-tool-detail__status--${openStatus.cls}`}>\n {openStatus.label}\n </span>\n </span>\n <button\n type=\"button\"\n className=\"agno-btn agno-btn--ghost agno-btn--icon-xs\"\n onClick={() => setOpenIndex(null)}\n aria-label=\"Close tool details\"\n >\n <Close size={14} />\n </button>\n </div>\n {open.tool_args && Object.keys(open.tool_args).length > 0 && (\n <div className=\"agno-tool-detail__section\">\n <div className=\"agno-tool-detail__label\">Arguments</div>\n <pre className=\"agno-tool-detail__pre\">{JSON.stringify(open.tool_args, null, 2)}</pre>\n </div>\n )}\n {open.result != null && (\n <div className=\"agno-tool-detail__section\">\n <div className=\"agno-tool-detail__label\">Result</div>\n <pre className=\"agno-tool-detail__pre\">{String(open.result)}</pre>\n </div>\n )}\n </div>\n )}\n </div>\n )\n}\n","/**\n * The AgentOS \"behind the scenes\" panel: everything the run did on its way to\n * the answer, folded under a single muted trigger above the message.\n *\n * The steps are derived from the run's own events, the way the AgentOS chat\n * builds them — content deltas, model-request and reasoning-delta events are\n * dropped, started/completed pairs collapse into one step that reports whether\n * it has finished, and run lifecycle events read as \"Run Started\" / \"Run\n * Completed\" with the run duration. Messages restored from session history\n * carry their stored events, so the panel looks the same there.\n *\n * When a message has no events at all, the steps are synthesised from what it\n * does carry (tools, reasoning, member turns, workflow steps).\n */\n\nimport React, { useState } from 'react'\n\nimport { cx } from '../../cx'\nimport type { ChatClassNames } from '../classNames'\n\nimport {\n activityLabel,\n isCancelledEvent,\n isCompletedEvent,\n isErrorEvent,\n isPausedEvent,\n isReasoningCompletedEvent,\n isReasoningStepEvent,\n isToolCompletedEvent,\n isToolEvent,\n toolsFromEvent,\n} from '../../core/events'\nimport type {\n ChatMessage,\n ReasoningStep,\n RunEventData,\n SubRun,\n ToolExecution,\n WorkflowStep,\n} from '../../core/types'\nimport { Box, Brain, ChevronDown, GridLoader, Memory, Rerun, TeamGlyph, Wrench } from './icons'\nimport { Markdown, type RenderMarkdown } from './Markdown'\nimport { ToolCalls } from './ToolCalls'\n\nexport interface BehindTheScenesProps {\n message: ChatMessage\n /** True while this message is the one streaming. */\n streaming?: boolean\n /** Live activity label, e.g. \"Calling get_weather\". */\n activity?: string | null\n renderMarkdown?: RenderMarkdown\n defaultOpen?: boolean\n hideReasoning?: boolean\n hideTools?: boolean\n className?: string\n classNames?: ChatClassNames\n}\n\nexport type BehindTheScenesStep =\n | { kind: 'status'; id: string; label: string; detail?: string; icon: 'run' | 'continued' }\n | { kind: 'tool'; id: string; tool: ToolExecution }\n | { kind: 'reasoning'; id: string; steps: ReasoningStep[]; completed: boolean }\n | { kind: 'memory'; id: string; completed: boolean }\n | { kind: 'member'; id: string; member: SubRun }\n | { kind: 'step'; id: string; step: WorkflowStep }\n\ntype Options = { hideReasoning?: boolean; hideTools?: boolean }\n\nconst eventName = (e: RunEventData): string => String(e.event ?? '')\n\n/** Events AgentOS never renders as a step. */\nfunction isNoiseEvent(e: RunEventData): boolean {\n const n = eventName(e)\n if (n.includes('ModelRequest') || n.includes('ReasoningContentDelta')) return true\n // Content deltas are the answer itself — only nested runs surface here.\n return n.includes('RunContent') && !e.parent_run_id\n}\n\nconst isMemoryEvent = (e: RunEventData): boolean => eventName(e).includes('MemoryUpdate')\nconst isMemoryCompleted = (e: RunEventData): boolean => eventName(e).includes('MemoryUpdateCompleted')\nconst isReasoningEvent = (e: RunEventData): boolean =>\n isReasoningStepEvent(e) || isReasoningCompletedEvent(e) || eventName(e).includes('ReasoningStarted')\n\n/** Seconds, at the precision the number deserves: `0.8s`, `3.5s`, `24s`. */\nfunction formatDuration(seconds: number): string {\n return seconds < 10 ? `${seconds.toFixed(1)}s` : `${Math.round(seconds)}s`\n}\n\n/** The duration a run reported in its own metrics — a float, and accurate. */\nfunction reportedDuration(e: RunEventData): number | undefined {\n const metrics = e.metrics as { duration?: number } | undefined\n const seconds = metrics?.duration\n return typeof seconds === 'number' && seconds > 0 ? seconds : undefined\n}\n\n/** How long a run reported taking, from its completion metrics. */\nfunction durationOf(e: RunEventData): string | undefined {\n const seconds = reportedDuration(e)\n return seconds == null ? undefined : formatDuration(seconds)\n}\n\n/** Build the platform's step list out of a run's events. */\nfunction stepsFromEvents(message: ChatMessage, { hideReasoning, hideTools }: Options): BehindTheScenesStep[] {\n const steps: BehindTheScenesStep[] = []\n const indexOf = new Map<string, number>()\n\n /** Replace an existing step of the same identity, or append a new one. */\n const put = (key: string, step: BehindTheScenesStep) => {\n const at = indexOf.get(key)\n if (at != null) steps[at] = step\n else {\n indexOf.set(key, steps.length)\n steps.push(step)\n }\n }\n\n const membersByRun = new Map((message.members ?? []).map((m) => [m.run_id, m]))\n const stepsByKey = new Map((message.steps ?? []).map((s) => [s.key, s]))\n\n for (const e of message.events ?? []) {\n if (isNoiseEvent(e)) continue\n\n // A nested run (team member / workflow executor) holds the place where it\n // first appeared, and renders from the accumulated sub-run.\n if (e.parent_run_id) {\n const runId = String(e.run_id ?? '')\n const member = membersByRun.get(runId)\n if (member) put(`member:${runId}`, { kind: 'member', id: `member-${runId}`, member })\n continue\n }\n\n if (isToolEvent(e)) {\n if (hideTools) continue\n for (const tool of toolsFromEvent(e)) {\n const key = `tool:${tool.tool_call_id ?? tool.tool_name}`\n const at = indexOf.get(key)\n const previous = at != null ? (steps[at] as { tool: ToolExecution }).tool : undefined\n const merged: ToolExecution = { ...previous, ...tool }\n // Keep a result already reported if a later event omits it.\n if (!isToolCompletedEvent(e) && previous?.result != null) merged.result = previous.result\n put(key, { kind: 'tool', id: key, tool: merged })\n }\n continue\n }\n\n if (isReasoningEvent(e)) {\n if (hideReasoning) continue\n const key = `reasoning:${e.run_id ?? 'run'}`\n const at = indexOf.get(key)\n const previous = at != null ? (steps[at] as { steps: ReasoningStep[] }).steps : []\n const incoming = e.reasoning_steps ?? e.extra_data?.reasoning_steps ?? []\n const completed = isReasoningCompletedEvent(e)\n put(key, {\n kind: 'reasoning',\n id: key,\n // The completed event carries the full set; steps accumulate until then.\n steps: completed && incoming.length ? incoming : [...previous, ...incoming],\n completed,\n })\n continue\n }\n\n if (isMemoryEvent(e)) {\n const key = `memory:${e.run_id ?? 'run'}`\n put(key, { kind: 'memory', id: key, completed: isMemoryCompleted(e) })\n continue\n }\n\n // Workflow steps render from their accumulated output.\n const stepKey = typeof e.step_id === 'string' ? e.step_id : undefined\n if (eventName(e).startsWith('Step') && stepKey && stepsByKey.has(stepKey)) {\n put(`step:${stepKey}`, {\n kind: 'step',\n id: `step-${stepKey}`,\n step: stepsByKey.get(stepKey) as WorkflowStep,\n })\n continue\n }\n\n // Run lifecycle — one step per kind, per run.\n const runKey = String(e.run_id ?? 'run')\n const n = eventName(e)\n if (n.includes('RunStarted') || n.includes('WorkflowStarted')) {\n put(`started:${runKey}`, { kind: 'status', id: `started-${runKey}`, label: 'Run Started', icon: 'run' })\n } else if (n.includes('RunContinued')) {\n put(`continued:${runKey}`, {\n kind: 'status',\n id: `continued-${runKey}`,\n label: 'Run Continued',\n icon: 'continued',\n })\n } else if (isCompletedEvent(e)) {\n put(`completed:${runKey}`, {\n kind: 'status',\n id: `completed-${runKey}`,\n label: 'Run Completed',\n detail: durationOf(e),\n icon: 'run',\n })\n } else if (isPausedEvent(e)) {\n put(`paused:${runKey}`, { kind: 'status', id: `paused-${runKey}`, label: 'Run Paused', icon: 'run' })\n } else if (isCancelledEvent(e)) {\n put(`cancelled:${runKey}`, {\n kind: 'status',\n id: `cancelled-${runKey}`,\n label: 'Run Cancelled',\n icon: 'run',\n })\n } else if (isErrorEvent(e)) {\n const detail = typeof e.content === 'string' ? e.content : e.error\n put(`error:${runKey}`, { kind: 'status', id: `error-${runKey}`, label: detail || 'Run Error', icon: 'run' })\n }\n }\n\n return steps\n}\n\n/** Fallback for messages with no events (older history, hand-built messages). */\nfunction stepsFromMessage(message: ChatMessage, { hideReasoning, hideTools }: Options): BehindTheScenesStep[] {\n const steps: BehindTheScenesStep[] = []\n\n const reasoning = message.reasoning_steps ?? []\n if (!hideReasoning && reasoning.length) {\n steps.push({ kind: 'reasoning', id: 'reasoning', steps: reasoning, completed: !message.streaming })\n }\n if (!hideTools) {\n const tools = [...(message.tool_calls ?? [])].sort((a, b) => (a.created_at ?? 0) - (b.created_at ?? 0))\n for (const [i, tool] of tools.entries()) {\n steps.push({ kind: 'tool', id: tool.tool_call_id ?? `tool-${i}`, tool })\n }\n }\n for (const member of message.members ?? []) {\n steps.push({ kind: 'member', id: `member-${member.run_id}`, member })\n }\n for (const step of message.steps ?? []) {\n steps.push({ kind: 'step', id: `step-${step.key}`, step })\n }\n return steps\n}\n\n/** The steps shown for a message — from its events when it has them. */\nexport function behindTheScenesItems(message: ChatMessage, opts: Options = {}): BehindTheScenesStep[] {\n const fromEvents = message.events?.length ? stepsFromEvents(message, opts) : []\n return fromEvents.length ? fromEvents : stepsFromMessage(message, opts)\n}\n\n/** Whether `<BehindTheScenes>` would render anything for this message. */\nexport function hasBehindTheScenes(message: ChatMessage, opts: Options = {}): boolean {\n return behindTheScenesItems(message, opts).length > 0\n}\n\n/** Seconds spent on the run, from its first event to its last. */\nfunction runDuration(message: ChatMessage): number | undefined {\n const events = message.events ?? []\n\n // What the run itself measured, off the completion metrics. Preferred,\n // because `created_at` is whole seconds: the span between two timestamps\n // can only ever be a rough number, and reads 0 for anything that finished\n // inside a second — which is why a fast run used to show no duration at all.\n for (let i = events.length - 1; i >= 0; i--) {\n const reported = reportedDuration(events[i])\n if (reported != null) return reported\n }\n\n const times = events.map((e) => e.created_at).filter((t): t is number => typeof t === 'number')\n if (times.length < 2) return undefined\n const seconds = Math.max(...times) - Math.min(...times)\n return seconds > 0 ? seconds : undefined\n}\n\n/**\n * What the run is doing right now, read off its own latest meaningful event —\n * \"Calling lookup_order\", \"Reasoning\", \"Updating memory\". Lets a `<Message>`\n * rendered on its own say what is happening, rather than depending on the host\n * to thread `chat.activity` down to it.\n */\nfunction liveActivity(message: ChatMessage): string | null {\n const events = message.events ?? []\n for (let i = events.length - 1; i >= 0; i--) {\n const label = activityLabel(events[i])\n if (label) return label\n }\n return message.activity ?? null\n}\n\n/** The trigger label, mirroring AgentOS's `getBehindTheScenesLabel`. */\nexport function behindTheScenesLabel(\n message: ChatMessage,\n streaming?: boolean,\n activity?: string | null,\n): string {\n if (streaming) return activity ?? liveActivity(message) ?? 'Working...'\n if (message.status === 'error') return message.error ?? 'Run failed'\n if (message.status === 'cancelled') return 'Cancelled'\n if (message.status === 'paused') return 'Waiting for input'\n const seconds = runDuration(message)\n if (seconds != null) return `Worked for ${formatDuration(seconds)}`\n return 'Behind the scenes'\n}\n\nfunction Row({ icon, children }: { icon: React.ReactNode; children: React.ReactNode }): React.ReactElement {\n return (\n <li className=\"agno-timeline__row\">\n <span className=\"agno-timeline__icon\">{icon}</span>\n <div className=\"agno-timeline__content\">{children}</div>\n </li>\n )\n}\n\n/**\n * One step line: label, truncated preview, and a marker on the right — the\n * loader while it runs, a chevron once there is detail to open. AgentOS opens\n * that detail in its side panel; this library expands it in place.\n */\nfunction Step({\n label,\n preview,\n detail,\n busy,\n children,\n}: {\n label: React.ReactNode\n preview?: string | null\n detail?: string\n busy?: boolean\n children?: React.ReactNode\n}): React.ReactElement {\n const [open, setOpen] = useState(false)\n\n if (!children) {\n return (\n <div className=\"agno-bts__step\">\n <span className=\"agno-bts__step-label\">{label}</span>\n {preview && <span className=\"agno-bts__preview\">{preview}</span>}\n {detail && <span className=\"agno-bts__detail\">{detail}</span>}\n {busy && <GridLoader />}\n </div>\n )\n }\n\n return (\n <>\n <button\n type=\"button\"\n className=\"agno-bts__step agno-bts__step--button\"\n onClick={() => setOpen((v) => !v)}\n aria-expanded={open}\n >\n <span className=\"agno-bts__step-label\">{label}</span>\n {preview && !open && <span className=\"agno-bts__preview\">{preview}</span>}\n <span className=\"agno-bts__step-marker\">\n {busy && <GridLoader />}\n <ChevronDown size={14} className=\"agno-bts__chev\" />\n </span>\n </button>\n {open && <div className=\"agno-bts__step-body\">{children}</div>}\n </>\n )\n}\n\nfunction reasoningPreview(steps: ReasoningStep[]): string | null {\n const text = steps\n .map((s) => s.result || s.reasoning || s.title || '')\n .filter(Boolean)\n .join(' ')\n .trim()\n return text || null\n}\n\nexport function BehindTheScenes({\n message,\n streaming,\n activity,\n renderMarkdown,\n defaultOpen = false,\n hideReasoning,\n hideTools,\n className,\n classNames,\n}: BehindTheScenesProps): React.ReactElement | null {\n const [open, setOpen] = useState(defaultOpen)\n const items = behindTheScenesItems(message, { hideReasoning, hideTools })\n if (items.length === 0) return null\n\n const label = behindTheScenesLabel(message, streaming, activity)\n\n return (\n <div className={cx('agno-bts', streaming && 'agno-bts--streaming', classNames?.panel, className)}>\n <button\n type=\"button\"\n className=\"agno-bts__toggle\"\n onClick={() => setOpen((v) => !v)}\n aria-expanded={open}\n >\n <span className=\"agno-bts__marker\">\n {streaming && <GridLoader />}\n <ChevronDown size={16} className=\"agno-bts__chev\" />\n </span>\n <span className=\"agno-bts__label-text\">{label}</span>\n </button>\n\n {open && (\n <ol className=\"agno-timeline agno-timeline--icons\">\n {items.map((item) => {\n if (item.kind === 'status') {\n return (\n <Row key={item.id} icon={item.icon === 'continued' ? <Rerun size={12} /> : <Box size={12} />}>\n <Step label={item.label} detail={item.detail} />\n </Row>\n )\n }\n if (item.kind === 'tool') {\n return (\n <Row key={item.id} icon={<Wrench size={12} />}>\n <ToolCalls tools={[item.tool]} />\n </Row>\n )\n }\n if (item.kind === 'reasoning') {\n return (\n <Row key={item.id} icon={<Brain size={12} />}>\n <Step\n label=\"Reasoning\"\n preview={reasoningPreview(item.steps)}\n busy={!item.completed && streaming}\n >\n {item.steps.length > 0 && (\n <ol className=\"agno-timeline\">\n {item.steps.map((step, i) => (\n <li key={i} className=\"agno-timeline__item\">\n {step.title && <div className=\"agno-reasoning__title\">{step.title}</div>}\n {step.reasoning && <div className=\"agno-reasoning__text\">{step.reasoning}</div>}\n {step.action && <div className=\"agno-reasoning__meta\">Action: {step.action}</div>}\n {step.result && <div className=\"agno-reasoning__meta\">Result: {step.result}</div>}\n {typeof step.confidence === 'number' && (\n <div className=\"agno-reasoning__meta\">\n Confidence: {Math.round(step.confidence * 100)}%\n </div>\n )}\n </li>\n ))}\n </ol>\n )}\n </Step>\n </Row>\n )\n }\n if (item.kind === 'memory') {\n return (\n <Row key={item.id} icon={<Memory size={12} />}>\n <Step\n label={item.completed ? 'Memory updated' : 'Memory updating...'}\n busy={!item.completed && streaming}\n />\n </Row>\n )\n }\n if (item.kind === 'member') {\n const { member } = item\n return (\n <Row key={item.id} icon={<TeamGlyph size={12} />}>\n <Step\n label={\n <>\n <span className=\"agno-bts__name\">{member.name ?? member.agent_id ?? 'Member'}</span>\n {member.kind === 'executor' ? ' ran this step' : ' responded'}\n </>\n }\n preview={member.content || null}\n busy={member.status === 'running'}\n >\n <ToolCalls tools={member.tool_calls} />\n {member.content && (\n <div className=\"agno-bts__content\">\n {renderMarkdown ? renderMarkdown(member.content) : <Markdown content={member.content} />}\n </div>\n )}\n </Step>\n </Row>\n )\n }\n const { step } = item\n return (\n <Row key={item.id} icon={<Box size={12} />}>\n <Step\n label={\n <>\n <span className=\"agno-bts__name\">{step.name ?? step.key}</span>\n {step.status === 'error' ? ' failed' : step.status === 'running' ? ' running' : ' completed'}\n </>\n }\n preview={step.error ?? step.content ?? null}\n busy={step.status === 'running'}\n >\n {step.error ? (\n <div className=\"agno-step__error\">{step.error}</div>\n ) : step.content ? (\n <div className=\"agno-bts__content\">\n {renderMarkdown ? renderMarkdown(step.content) : <Markdown content={step.content} />}\n </div>\n ) : null}\n </Step>\n </Row>\n )\n })}\n </ol>\n )}\n </div>\n )\n}\n","/**\n * The sources behind an answer, as cards.\n *\n * Everything the message cited — retrieved knowledge-base chunks and links the\n * model browsed — is flattened into one numbered list by `collectSources`, so\n * the numbers here are the same ones the inline `[1]` markers in the answer\n * point at.\n */\n\nimport React, { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport type { Citations as CitationsType, ReferenceData } from '../../core/types'\nimport { cx } from '../../cx'\nimport type { ChatClassNames } from '../classNames'\nimport { useLinkComponent, useResolvedClassNames } from '../ChatProvider'\nimport { collectSources, type Source } from '../sources'\nimport { LinkIcon } from './icons'\nimport { CLOSE_DELAY, Favicon, OPEN_DELAY, useLinkPreview, usePlacement } from './LinkPreview'\n\nexport interface CitationsProps {\n /** Retrieved knowledge-base chunks, as they arrive on the message. */\n references?: ReferenceData[]\n /** Links the model browsed, as they arrive on the message. */\n citations?: CitationsType\n /**\n * A pre-built list, e.g. from `collectSources`. Wins over `references` and\n * `citations` — pass it when the inline markers were numbered elsewhere.\n */\n sources?: Source[]\n /** Heading above the cards. Defaults to \"Sources used\". */\n title?: string\n /**\n * Pills shown in the row. The rest sit behind a \"+N more\" pill that opens a\n * list on hover. Defaults to 3; `0` puts every source in the row.\n */\n max?: number\n className?: string\n classNames?: ChatClassNames\n}\n\n/**\n * One card: the site's favicon, the title and a link mark, linking to the\n * source. The number, URL and cited passage live on the hover card — a row of\n * cards under an answer only needs to say where it can take you.\n */\nexport function SourceCard({\n source,\n className,\n}: {\n source: Source\n className?: string\n}): React.ReactElement {\n const cn = useResolvedClassNames()\n const Link = useLinkComponent()\n // A card doesn't trigger a lookup of its own — it only picks up metadata a\n // hover already resolved, so a long transcript stays quiet.\n const { preview } = useLinkPreview(source.url, false)\n\n const body = (\n <>\n <Favicon\n className=\"agno-source__icon\"\n url={preview?.favicon ?? source.url}\n kind={source.kind}\n size={24}\n />\n <span className=\"agno-source__title\">{preview?.title ?? source.title}</span>\n {source.url && <LinkIcon className=\"agno-source__link\" />}\n </>\n )\n\n const classes = cx('agno-source', `agno-source--${source.kind}`, cn.sourceCard, className)\n\n if (source.url && Link) {\n return (\n <Link id={source.anchorId} className={classes} href={source.url} title={source.url}>\n {body}\n </Link>\n )\n }\n return source.url ? (\n <a\n id={source.anchorId}\n className={classes}\n href={source.url}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n title={source.url}\n >\n {body}\n </a>\n ) : (\n <div id={source.anchorId} className={classes}>\n {body}\n </div>\n )\n}\n\n/** Width of the \"+N more\" list, in px. Set here: the flip maths needs it. */\nconst LIST_WIDTH = 240\n\n/**\n * The \"+N more\" pill: the next few favicons fanned out, then the count.\n * Pointing at it — or tabbing to it, or tapping it — opens the rest of the\n * sources as a list above it, so a long bibliography never pushes the answer's\n * footer around.\n */\nfunction SourcesOverflow({ sources }: { sources: Source[] }): React.ReactElement {\n const [open, setOpen] = useState(false)\n const [anchor, setAnchor] = useState<HTMLElement | null>(null)\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null)\n const id = useId()\n const placement = usePlacement(anchor, open, { width: LIST_WIDTH, align: 'start' })\n\n const schedule = useCallback((next: boolean) => {\n if (timer.current) clearTimeout(timer.current)\n timer.current = setTimeout(() => setOpen(next), next ? OPEN_DELAY : CLOSE_DELAY)\n }, [])\n\n useEffect(\n () => () => {\n if (timer.current) clearTimeout(timer.current)\n },\n [],\n )\n\n useEffect(() => {\n if (!open) return\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setOpen(false)\n }\n document.addEventListener('keydown', onKey)\n return () => document.removeEventListener('keydown', onKey)\n }, [open])\n\n // Portals need a document: render nothing on the server, mount on hydration.\n const [mounted, setMounted] = useState(false)\n useEffect(() => setMounted(true), [])\n\n // Portalled content escapes the `.agno-root` wrapper, so carry the theme.\n const light = anchor?.closest('.agno-light') ? 'agno-light' : undefined\n\n return (\n <span\n className=\"agno-sources__overflow\"\n ref={setAnchor}\n onMouseEnter={() => schedule(true)}\n onMouseLeave={() => schedule(false)}\n >\n <button\n type=\"button\"\n className=\"agno-sources__more\"\n aria-label={`${sources.length} more sources`}\n aria-expanded={open}\n aria-controls={open ? id : undefined}\n onClick={() => setOpen((v) => !v)}\n onFocus={() => setOpen(true)}\n onBlur={() => schedule(false)}\n >\n <span className=\"agno-sources__stack\" aria-hidden>\n {sources.slice(0, 3).map((source) => (\n <Favicon\n key={source.anchorId}\n className=\"agno-sources__stack-icon\"\n url={source.url}\n kind={source.kind}\n size={24}\n />\n ))}\n </span>\n <span className=\"agno-sources__more-label\">+{sources.length} more</span>\n </button>\n {mounted &&\n open &&\n placement &&\n createPortal(\n <div\n id={id}\n role=\"group\"\n aria-label=\"More sources\"\n className={cx('agno-sources__list', `agno-sources__list--${placement.side}`, light)}\n style={{ top: placement.top, left: placement.left, width: LIST_WIDTH }}\n onMouseEnter={() => schedule(true)}\n onMouseLeave={() => schedule(false)}\n onFocus={() => schedule(true)}\n onBlur={() => schedule(false)}\n >\n {sources.map((source) => (\n <SourceCard key={source.anchorId} source={source} className=\"agno-source--row\" />\n ))}\n </div>,\n document.body,\n )}\n </span>\n )\n}\n\nexport function Citations({\n references,\n citations,\n sources: given,\n title = 'Sources used',\n max = 3,\n className,\n classNames,\n}: CitationsProps): React.ReactElement | null {\n const cn = useResolvedClassNames(classNames)\n const uid = useId()\n\n const sources = useMemo(\n () => given ?? collectSources(references, citations, uid),\n [given, references, citations, uid],\n )\n\n if (sources.length === 0) return null\n\n const limit = max > 0 ? max : sources.length\n const visible = sources.slice(0, limit)\n const hidden = sources.slice(limit)\n\n return (\n <section className={cx('agno-sources', cn.citations, className)} aria-label={title}>\n <div className=\"agno-sources__head\">{title}</div>\n <div className=\"agno-sources__grid\">\n {visible.map((source) => (\n <SourceCard key={source.anchorId} source={source} />\n ))}\n {hidden.length > 0 && <SourcesOverflow sources={hidden} />}\n </div>\n </section>\n )\n}\n","/** Renders images, videos and audio attached to a message. */\n\nimport React from 'react'\n\nimport type { AudioData, ImageData, VideoData } from '../../core/types'\n\nfunction audioSrc(a: AudioData): string | undefined {\n if (a.url) return a.url\n if (a.base64_audio) return `data:${a.mime_type ?? 'audio/mpeg'};base64,${a.base64_audio}`\n if (a.content) return `data:${a.mime_type ?? 'audio/wav'};base64,${a.content}`\n return undefined\n}\n\nexport function Multimedia({\n images,\n videos,\n audio,\n responseAudio,\n}: {\n images?: ImageData[]\n videos?: VideoData[]\n audio?: AudioData[]\n responseAudio?: AudioData\n}): React.ReactElement | null {\n const audios = [...(audio ?? []), ...(responseAudio ? [responseAudio] : [])]\n if (!images?.length && !videos?.length && !audios.length) return null\n\n return (\n <div className=\"agno-media\">\n {images?.map((img, i) =>\n img.url ? (\n <img key={`img-${i}`} className=\"agno-media__img\" src={img.url} alt={img.revised_prompt ?? 'image'} />\n ) : null,\n )}\n {videos?.map((v, i) =>\n v.url ? (\n <video key={`vid-${i}`} className=\"agno-media__video\" src={v.url} controls />\n ) : null,\n )}\n {audios.map((a, i) => {\n const src = audioSrc(a)\n return src ? <audio key={`aud-${i}`} className=\"agno-media__audio\" src={src} controls /> : null\n })}\n </div>\n )\n}\n","/** Renders a single chat message: content, tools, reasoning, media, citations, follow-ups. */\n\nimport React, { useId, useMemo } from 'react'\n\nimport type { ChatMessage, EntityType } from '../../core/types'\nimport { cx } from '../../cx'\nimport type { ChatClassNames } from '../classNames'\nimport { useResolvedClassNames } from '../ChatProvider'\nimport { collectSources, sourcesFromMarkdown, SourcesProvider, withoutSourcesLine } from '../sources'\nimport { BehindTheScenes, hasBehindTheScenes } from './BehindTheScenes'\nimport { Citations } from './Citations'\nimport { Followups } from './Followups'\nimport { AgnoMark, GridLoader, TeamGlyph } from './icons'\nimport { Markdown, type RenderMarkdown } from './Markdown'\nimport { Multimedia } from './Multimedia'\n\nexport interface MessageProps {\n message: ChatMessage\n /** Override the Markdown renderer (e.g. plug in react-markdown). */\n renderMarkdown?: RenderMarkdown\n /** Live activity label, shown while streaming with no content yet. */\n activity?: string | null\n /** What is answering — picks the avatar (Agno mark vs. the team glyph). */\n entityType?: EntityType\n /** Initials shown on the user avatar. AgentOS falls back to \"ME\". */\n userInitials?: string\n /** Hide the reasoning panel. */\n hideReasoning?: boolean\n /** Hide tool calls. */\n hideTools?: boolean\n /** Hide the sources block under the answer. */\n hideSources?: boolean\n /**\n * Render the \"Related questions\" the agent suggested under this message,\n * sending the clicked one here. Off by default: `<ChatWindow>` pins them\n * above the composer instead, so they stay in reach as the transcript grows.\n */\n onFollowup?: (prompt: string) => void\n /** Replace the avatar entirely. Pass `false` to drop it. */\n avatar?: React.ReactNode | false\n /** Rendered after the message content, inside the body. */\n children?: React.ReactNode\n className?: string\n classNames?: ChatClassNames\n}\n\nexport function Message({\n message,\n renderMarkdown,\n activity,\n avatar,\n children,\n className,\n classNames,\n entityType = 'agent',\n userInitials = 'ME',\n hideReasoning,\n hideTools,\n hideSources,\n onFollowup,\n}: MessageProps): React.ReactElement {\n const cn = useResolvedClassNames(classNames)\n const uid = useId()\n // Numbered once, here: the `[1]` markers in the answer and the cards beneath\n // it have to agree, so both read the same list. A run that carries no\n // citation payload may still have cited inline, in the answer itself.\n const sources = useMemo(() => {\n const cited = collectSources(message.references, message.citations, uid)\n return cited.length ? cited : sourcesFromMarkdown(message.content, uid)\n }, [message.references, message.citations, message.content, uid])\n const isUser = message.role === 'user'\n const isAgent = message.role === 'agent'\n const showSources = isAgent && !hideSources && sources.length > 0\n // The cards below the answer already list the sources — the model's own\n // \"Sources:\" line would say it all again, so it goes (only once cards show).\n const content = useMemo(\n () => (showSources && message.content ? withoutSourcesLine(message.content) : message.content),\n [message.content, showSources],\n )\n // Nothing to show behind the scenes yet — the run is still warming up, so\n // the message carries the loader itself.\n const hasActivity =\n !message.content && !hasBehindTheScenes(message, { hideReasoning, hideTools })\n\n const kind = isUser ? 'user' : isAgent ? entityType : 'system'\n\n return (\n <div\n className={cx(\n 'agno-msg',\n `agno-msg--${message.role}`,\n `agno-msg--${kind}`,\n cn.message,\n isUser && cn.userMessage,\n isAgent && cn.agentMessage,\n className,\n )}\n data-status={message.status}\n data-role={message.role}\n >\n {avatar !== false && (\n <div className={cx('agno-msg__avatar', cn.avatar)}>\n {avatar ??\n (isUser ? (\n <span>{userInitials}</span>\n ) : isAgent && entityType === 'team' ? (\n <TeamGlyph size={16} />\n ) : (\n <AgnoMark size={24} />\n ))}\n </div>\n )}\n <SourcesProvider value={sources}>\n <div className={cx('agno-msg__body', cn.messageBody)} data-agent-message={isAgent ? 'true' : undefined}>\n {isAgent && (\n <BehindTheScenes\n message={message}\n streaming={message.streaming}\n activity={activity}\n renderMarkdown={renderMarkdown}\n hideReasoning={hideReasoning}\n hideTools={hideTools}\n classNames={cn}\n />\n )}\n\n {content ? (\n <div className={cx('agno-msg__content', cn.messageContent)}>\n {renderMarkdown ? (\n renderMarkdown(content)\n ) : (\n <Markdown content={content} className={cn.markdown} streaming={message.streaming} />\n )}\n {message.streaming && <span className=\"agno-msg__caret\" aria-hidden />}\n </div>\n ) : (\n isAgent &&\n message.streaming &&\n hasActivity && (\n <div className=\"agno-msg__activity\" role=\"status\" aria-live=\"polite\">\n <GridLoader />\n <span className=\"agno-msg__activity-label\">{activity ?? 'Working...'}</span>\n </div>\n )\n )}\n\n <Multimedia\n images={message.images}\n videos={message.videos}\n audio={message.audio}\n responseAudio={message.response_audio}\n />\n {showSources && <Citations sources={sources} classNames={cn} />}\n {isAgent && onFollowup && !message.streaming && (\n <Followups items={message.followups} onSelect={onFollowup} classNames={cn} />\n )}\n\n {message.error && <div className=\"agno-msg__error\">{message.error}</div>}\n {children}\n </div>\n </SourcesProvider>\n </div>\n )\n}\n","/** Scrollable transcript that auto-sticks to the bottom while streaming. */\n\nimport React, { useEffect, useRef } from 'react'\n\nimport type { ChatMessage, ChatStatus, EntityType } from '../../core/types'\nimport { cx } from '../../cx'\nimport type { ChatClassNames } from '../classNames'\nimport { useOptionalChatContext, useResolvedClassNames } from '../ChatProvider'\nimport type { RenderMarkdown } from './Markdown'\nimport { Message } from './Message'\n\nexport interface MessageListProps {\n /** Omit inside a `<ChatProvider>` to use the provider's transcript. */\n messages?: ChatMessage[]\n status?: ChatStatus\n activity?: string | null\n renderMarkdown?: RenderMarkdown\n emptyState?: React.ReactNode\n /** What is answering — picks the agent avatar. */\n entityType?: EntityType\n /** Initials shown on the user avatar. Defaults to AgentOS's \"ME\". */\n userInitials?: string\n /** Rendered after the last message (e.g. a human-in-the-loop panel). */\n footer?: React.ReactNode\n /** Rendered above the first message, inside the scroll area. */\n header?: React.ReactNode\n /** Replace how each message is rendered. */\n renderMessage?: (message: ChatMessage, activity?: string | null) => React.ReactNode\n className?: string\n classNames?: ChatClassNames\n}\n\nexport function MessageList({\n messages,\n status,\n activity,\n renderMarkdown,\n emptyState,\n entityType,\n userInitials,\n footer,\n header,\n renderMessage,\n className,\n classNames,\n}: MessageListProps): React.ReactElement {\n const ctx = useOptionalChatContext()\n const cn = useResolvedClassNames(classNames)\n const items = messages ?? ctx?.chat.messages ?? []\n const runStatus = status ?? ctx?.chat.status ?? 'idle'\n const runActivity = activity !== undefined ? activity : ctx?.chat.activity\n const markdown = renderMarkdown ?? ctx?.renderMarkdown\n const kind = entityType ?? ctx?.chat.entityType\n\n const endRef = useRef<HTMLDivElement>(null)\n const stick = useRef(true)\n const userScrolled = useRef(false)\n const containerRef = useRef<HTMLDivElement>(null)\n\n // Track whether the user has scrolled up; only auto-scroll when at the bottom.\n // Only a scroll the user made can unstick: a smooth scroll of our own fires\n // scroll events on its way down, and a block that lands all at once (the\n // follow-ups after an answer) puts the bottom briefly out of reach.\n const markUserScroll = () => {\n userScrolled.current = true\n }\n const onScroll = () => {\n const el = containerRef.current\n if (!el) return\n const atBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 80\n if (atBottom) stick.current = true\n else if (userScrolled.current) stick.current = false\n userScrolled.current = false\n }\n\n useEffect(() => {\n if (stick.current) endRef.current?.scrollIntoView({ behavior: 'smooth', block: 'end' })\n }, [items, runActivity, runStatus])\n\n return (\n <div\n className={cx('agno-list', cn.list, className)}\n ref={containerRef}\n onScroll={onScroll}\n onWheel={markUserScroll}\n onTouchMove={markUserScroll}\n onKeyDown={markUserScroll}\n // A scrollbar drag lands on the container itself, not on a message.\n onPointerDown={(e) => e.target === e.currentTarget && markUserScroll()}\n >\n {header}\n {items.length === 0 ? (\n <div className={cx('agno-list__empty', cn.empty)}>{emptyState ?? 'Start the conversation.'}</div>\n ) : (\n <div className=\"agno-list__inner\">\n {items.map((m) => {\n const live = m.streaming && runStatus === 'streaming' ? runActivity : undefined\n return renderMessage ? (\n <React.Fragment key={m.id}>{renderMessage(m, live)}</React.Fragment>\n ) : (\n <Message\n key={m.id}\n message={m}\n renderMarkdown={markdown}\n entityType={kind}\n userInitials={userInitials}\n activity={live}\n classNames={cn}\n />\n )\n })}\n {footer}\n <div ref={endRef} />\n </div>\n )}\n </div>\n )\n}\n","/**\n * Suggested-prompt chips — the \"what can I ask?\" row a support chat shows on an\n * empty transcript. `<ChatWindow>` renders these from its `quickPrompts` prop;\n * render the component yourself to place them somewhere else.\n */\n\nimport React from 'react'\n\n/** A chip: plain text, or a short label that sends a longer prompt. */\nexport type QuickPrompt = string | { label: string; prompt?: string }\n\nexport const quickPromptLabel = (p: QuickPrompt): string => (typeof p === 'string' ? p : p.label)\n\nexport const quickPromptText = (p: QuickPrompt): string =>\n typeof p === 'string' ? p : (p.prompt ?? p.label)\n\nexport interface QuickPromptsProps {\n prompts: QuickPrompt[]\n /** Called with the prompt text to send. */\n onSelect: (prompt: string) => void\n disabled?: boolean\n className?: string\n}\n\nexport function QuickPrompts({\n prompts,\n onSelect,\n disabled,\n className,\n}: QuickPromptsProps): React.ReactElement | null {\n if (prompts.length === 0) return null\n\n return (\n <div className={['agno-prompts', className].filter(Boolean).join(' ')}>\n {prompts.map((p, i) => (\n <button\n key={i}\n type=\"button\"\n className=\"agno-prompt\"\n disabled={disabled}\n onClick={() => onSelect(quickPromptText(p))}\n >\n {quickPromptLabel(p)}\n </button>\n ))}\n </div>\n )\n}\n","/**\n * A complete chat surface built from a `useAgnoChat` result. Pass the hook's\n * return value as `chat`; this renders the transcript, the live status, the\n * human-in-the-loop panel, and the input box.\n *\n * Use this when you call `useAgnoChat` yourself (so you control the entity,\n * session, headers, etc.). For a zero-wiring widget, use `<AgnoChat>`.\n */\n\nimport React from 'react'\n\nimport { cx } from '../../cx'\nimport type { ChatClassNames } from '../classNames'\nimport { useOptionalChatContext, useResolvedChat, useResolvedClassNames } from '../ChatProvider'\nimport type { UseAgnoChat } from '../useAgnoChat'\nimport { ChatInput } from './ChatInput'\nimport { Followups } from './Followups'\nimport { HumanInput } from './HumanInput'\nimport type { RenderMarkdown } from './Markdown'\nimport { MessageList, type MessageListProps } from './MessageList'\nimport { QuickPrompts } from './QuickPrompts'\nimport type { QuickPrompt } from './QuickPrompts'\n\nexport interface ChatWindowProps {\n /** Omit inside a `<ChatProvider>`. */\n chat?: UseAgnoChat\n placeholder?: string\n /** Initials shown on the user avatar. Defaults to AgentOS's \"ME\". */\n userInitials?: string\n emptyState?: React.ReactNode\n allowFiles?: boolean\n /** The one-row composer instead of the dock — see `<ChatInput compact>`. */\n compactInput?: boolean\n disabled?: boolean\n renderMarkdown?: RenderMarkdown\n /**\n * Render the last run error above the input. Default false — it is raw\n * backend text, too long for a narrow window. Read `chat.error` to show it\n * your own way.\n */\n showErrors?: boolean\n /** Suggested prompts, offered while the transcript is empty. */\n quickPrompts?: QuickPrompt[]\n /** What a chip does. Defaults to sending it as the first message. */\n onQuickPrompt?: (prompt: string) => void\n /** Hide the \"Related questions\" an agent suggests after its latest answer. */\n hideFollowups?: boolean\n /** What a follow-up does. Defaults to sending it as the next message. */\n onFollowup?: (prompt: string) => void\n /** Heading over the follow-ups. Default \"Related questions\"; `null` for none. */\n followupsTitle?: React.ReactNode | null\n /** Replace how each message is rendered — see `<MessageList>`. */\n renderMessage?: MessageListProps['renderMessage']\n /** Rendered above the transcript (your own toolbar, title, tabs…). */\n header?: React.ReactNode\n /** Replace the composer entirely. Pass `false` for a read-only transcript. */\n composer?: React.ReactNode | false\n className?: string\n classNames?: ChatClassNames\n}\n\nexport function ChatWindow({\n chat: chatProp,\n placeholder,\n userInitials,\n emptyState,\n allowFiles,\n compactInput,\n disabled,\n renderMarkdown,\n showErrors,\n quickPrompts,\n onQuickPrompt,\n hideFollowups,\n onFollowup,\n followupsTitle,\n renderMessage,\n header,\n composer,\n className,\n classNames,\n}: ChatWindowProps): React.ReactElement {\n const ctx = useOptionalChatContext()\n const chat = useResolvedChat(chatProp)\n const cn = useResolvedClassNames(classNames)\n const markdown = renderMarkdown ?? ctx?.renderMarkdown\n const sendPrompt = onQuickPrompt ?? ((prompt: string) => chat.sendMessage(prompt))\n\n const pausedMessage = chat.isPaused\n ? [...chat.messages].reverse().find((m) => m.status === 'paused')\n : undefined\n\n // Only the latest answer offers follow-ups — earlier ones have been answered\n // by the conversation moving on — and only once it has settled.\n const last = chat.messages[chat.messages.length - 1]\n const followups =\n !hideFollowups && last?.role === 'agent' && !last.streaming && !chat.isPaused ? last.followups : undefined\n\n return (\n <div className={cx('agno-chat', cn.chat, className)}>\n {header}\n <MessageList\n messages={chat.messages}\n status={chat.status}\n activity={chat.activity}\n entityType={chat.entityType}\n userInitials={userInitials}\n renderMarkdown={markdown}\n classNames={cn}\n emptyState={emptyState}\n renderMessage={renderMessage}\n footer={\n pausedMessage ? (\n <HumanInput\n message={pausedMessage}\n entityType={chat.entityType}\n busy={chat.isStreaming}\n onResolve={chat.continueRun}\n className={cn.humanInput}\n />\n ) : null\n }\n />\n {/* AgentOS stacks the suggestions directly above the dock rather than\n centring them in the transcript, so they read as input affordances. */}\n {quickPrompts && quickPrompts.length > 0 && chat.messages.length === 0 && (\n <QuickPrompts\n prompts={quickPrompts}\n onSelect={sendPrompt}\n disabled={disabled || chat.isStreaming}\n className={cn.panel}\n />\n )}\n {/* Pinned above the dock like the quick prompts, so they stay in reach\n however long the transcript gets. */}\n {followups && followups.length > 0 && (\n <Followups\n items={followups}\n title={followupsTitle}\n onSelect={onFollowup ?? ((prompt: string) => chat.sendMessage(prompt))}\n disabled={disabled || chat.isStreaming}\n className=\"agno-followups--dock\"\n classNames={cn}\n />\n )}\n {showErrors && chat.error && !chat.isPaused && (\n <div className={cx('agno-chat__error', cn.error)}>{chat.error}</div>\n )}\n {composer === false ? null : (\n composer ?? (\n <ChatInput\n onSend={(message, files) => chat.sendMessage(message, files ? { files } : undefined)}\n onStop={chat.cancel}\n busy={chat.isStreaming}\n disabled={disabled || chat.isPaused}\n placeholder={placeholder}\n allowFiles={allowFiles}\n compact={compactInput}\n classNames={cn}\n />\n )\n )}\n </div>\n )\n}\n","/**\n * Model-provider marks, shown on the selected-entity badge in the composer.\n *\n * The artwork is the AgentOS set (`agno-os/src/components/ui/icon/`), reduced to\n * plain geometry: the clip paths there wrap the full viewBox and their ids\n * would collide whenever an icon renders more than once on a page. Every mark\n * inherits `currentColor` so it follows the surrounding text.\n */\n\nimport React from 'react'\n\ninterface ProviderIconProps {\n size?: number\n className?: string\n}\n\n/** Shared wrapper: square box, aspect-correct artwork, inherited colour. */\nfunction Glyph({\n size = 12,\n viewBox,\n className,\n children,\n}: ProviderIconProps & { viewBox: string; children: React.ReactNode }): React.ReactElement {\n return (\n <svg\n width={size}\n height={size}\n viewBox={viewBox}\n fill=\"currentColor\"\n preserveAspectRatio=\"xMidYMid meet\"\n className={className}\n aria-hidden\n focusable=\"false\"\n >\n {children}\n </svg>\n )\n}\n\nexport const AnthropicLogo = ({ size = 12, className }: ProviderIconProps): React.ReactElement => (\n <Glyph size={size} viewBox=\"0 0 21 15\" className={className}>\n <path d=\"M14.6751 0H11.5612L17.2398 14.3478H20.3537L14.6751 0ZM5.67858 0L0 14.3478H3.17534L4.33662 11.3347H10.2775L11.4388 14.3478H14.6141L8.93553 0H5.67858ZM5.36383 8.67009L7.30705 3.62775L9.25028 8.67009H5.36383Z\" />\n </Glyph>\n)\n\nexport const OpenAILogo = ({ size = 12, className }: ProviderIconProps): React.ReactElement => (\n <Glyph size={size} viewBox=\"0 0 22 22\" className={className}>\n <path d=\"M19.928 9.17291C20.1619 8.48057 20.2431 7.74579 20.166 7.01908C20.0889 6.29237 19.8553 5.59098 19.4813 4.96315C18.9236 4.00802 18.0774 3.25435 17.0643 2.81052C16.0459 2.36318 14.9128 2.24653 13.8245 2.47697C13.3319 1.92958 12.7283 1.49331 12.0541 1.19715C11.3779 0.900007 10.6467 0.7488 9.90817 0.753398C8.79741 0.750306 7.71375 1.09622 6.81018 1.74229C5.91252 2.38357 5.24266 3.29435 4.89791 4.34234C4.17432 4.48829 3.48982 4.78574 2.88939 5.21515C2.29172 5.64211 1.79226 6.19195 1.42452 6.82779C0.865606 7.77609 0.626698 8.8791 0.743123 9.97369C0.859548 11.0683 1.32512 12.0964 2.071 12.9059C1.83719 13.598 1.75599 14.3327 1.83296 15.0592C1.90994 15.7858 2.14327 16.487 2.51693 17.1149C3.07465 18.07 3.92086 18.8237 4.9339 19.2675C5.95236 19.7148 7.08545 19.8315 8.17368 19.6011C8.66609 20.1484 9.26938 20.5847 9.94343 20.8809C10.6193 21.1777 11.351 21.329 12.0908 21.3246C13.2022 21.3284 14.2867 20.9828 15.191 20.3365C16.0897 19.6947 16.7602 18.7828 17.1047 17.7335C17.8283 17.5878 18.5128 17.2906 19.1132 16.8614C19.7108 16.4342 20.21 15.8841 20.5774 15.248C21.1355 14.2997 21.3737 13.1969 21.2567 12.1028C21.1398 11.0086 20.6739 9.98111 19.928 9.17217V9.17291ZM12.1334 19.9802C11.0961 19.9802 10.2931 19.6657 9.59154 19.0875C9.62313 19.0706 9.67896 19.0405 9.71496 19.0184L13.8657 16.6528C13.969 16.5946 14.0551 16.5099 14.1149 16.4076C14.1748 16.3052 14.2065 16.1888 14.2066 16.0702V10.2955L15.9616 11.2947C15.9707 11.2994 15.9784 11.3062 15.9843 11.3145C15.9902 11.3228 15.994 11.3324 15.9954 11.3424V16.1238C15.9954 18.2926 14.1654 19.9802 12.1334 19.9802ZM3.69897 16.4419C3.24145 15.6637 3.07607 14.7479 3.23247 13.8587C3.26333 13.8771 3.31696 13.9102 3.35589 13.9322L7.50662 16.2979C7.61026 16.3577 7.72783 16.3892 7.8475 16.3892C7.96717 16.3892 8.08473 16.3577 8.18837 16.2979L13.2559 13.4106V15.4089C13.2565 15.4191 13.2546 15.4293 13.2502 15.4386C13.2458 15.4478 13.2392 15.4558 13.231 15.4618L9.03541 17.8532C8.13546 18.3637 7.07136 18.5014 6.07113 18.2367C5.07431 17.9751 4.22209 17.3299 3.69897 16.4419ZM2.60509 7.50076C3.06415 6.71658 3.78377 6.11833 4.63858 5.81025V10.6827C4.63744 10.8015 4.66853 10.9185 4.72856 11.0211C4.78858 11.1237 4.87529 11.2081 4.97945 11.2653L10.0463 14.1526L8.29196 15.1518C8.28336 15.1574 8.27352 15.1609 8.26329 15.1619C8.25306 15.163 8.24273 15.1615 8.23318 15.1577L4.03544 12.7648C3.59337 12.5135 3.20522 12.1775 2.89322 11.776C2.58121 11.3744 2.35149 10.9153 2.2172 10.4248C2.08441 9.93612 2.05026 9.42588 2.11673 8.92385C2.1832 8.42182 2.3497 7.93805 2.60509 7.50076ZM17.021 10.8113L11.9534 7.92394L13.7077 6.92477C13.7163 6.91913 13.7262 6.91566 13.7364 6.91463C13.7466 6.91361 13.757 6.91507 13.7665 6.91889L17.9635 9.3103C18.6041 9.67505 19.1276 10.2148 19.4725 10.8664C19.8153 11.5148 19.9639 12.2485 19.9003 12.9793C19.8367 13.71 19.5637 14.407 19.114 14.9865C18.6616 15.5707 18.0528 16.0145 17.3582 16.2663V11.3931C17.3595 11.2748 17.3288 11.1583 17.2695 11.0559C17.2101 10.9535 17.1243 10.869 17.021 10.8113ZM18.7672 8.21561C18.7264 8.19087 18.6852 8.16662 18.6438 8.14288L14.4931 5.77719C14.3894 5.71749 14.2718 5.68607 14.1522 5.68607C14.0326 5.68607 13.915 5.71749 13.8113 5.77719L8.74376 8.66451V6.66469C8.74316 6.65448 8.74513 6.64429 8.74949 6.63505C8.75386 6.62581 8.76048 6.61781 8.76874 6.61179L12.965 4.22332C13.6091 3.85713 14.3432 3.67955 15.0834 3.71086C15.8237 3.74217 16.5401 3.98111 17.151 4.40038C17.7579 4.81692 18.2332 5.39805 18.5211 6.07547C18.8076 6.75138 18.8929 7.49341 18.7672 8.21561ZM7.79019 11.7803L6.0344 10.7811C6.02522 10.7767 6.01731 10.7699 6.0114 10.7616C6.0055 10.7532 6.00178 10.7435 6.00061 10.7334V5.95131C6.00134 5.21882 6.21365 4.50177 6.61183 3.8839C7.01235 3.26422 7.58077 2.77118 8.25082 2.46228C8.92372 2.15201 9.67027 2.03708 10.4053 2.13061C11.1404 2.22414 11.8344 2.52236 12.4082 2.99125C12.3666 3.01322 12.3254 3.036 12.2847 3.05958L8.13401 5.42527C8.03063 5.48349 7.94455 5.56809 7.88453 5.67044C7.82452 5.77279 7.79273 5.88923 7.7924 6.00788L7.79019 11.7803ZM8.74303 9.75258L10.9998 8.46761L13.2567 9.75331V12.3247L10.9998 13.6097L8.74303 12.324V9.75258Z\" />\n </Glyph>\n)\n\nexport const GeminiLogo = ({ size = 12, className }: ProviderIconProps): React.ReactElement => (\n <Glyph size={size} viewBox=\"0 0 44 44\" className={className}>\n <path d=\"M43.9999 22.044C38.2914 22.3943 32.9081 24.82 28.864 28.8641C24.8199 32.9082 22.3942 38.2915 22.0439 44H21.9559C21.6061 38.2913 19.1806 32.9077 15.1364 28.8634C11.0922 24.8192 5.70855 22.3937 -0.00012207 22.044L-0.00012207 21.956C5.70855 21.6063 11.0922 19.1808 15.1364 15.1366C19.1806 11.0923 21.6061 5.70868 21.9559 0L22.0439 0C22.3942 5.70847 24.8199 11.0918 28.864 15.1359C32.9081 19.18 38.2914 21.6057 43.9999 21.956V22.044Z\" />\n </Glyph>\n)\n\nexport const MistralLogo = ({ size = 12, className }: ProviderIconProps): React.ReactElement => (\n <Glyph size={size} viewBox=\"0 0 22 20\" className={className}>\n <path d=\"M19.4156 0.571411H15.6753V4.31167H19.4156V0.571411Z\" />\n <path d=\"M21.2857 0.571411H17.5454V4.31167H21.2857V0.571411Z\" />\n <path d=\"M4.45462 0.571411H0.714355V4.31167H4.45462V0.571411Z\" />\n <path d=\"M4.45462 4.31165H0.714355V8.05191H4.45462V4.31165Z\" />\n <path d=\"M4.45462 8.05188H0.714355V11.7921H4.45462V8.05188Z\" />\n <path d=\"M4.45462 11.7922H0.714355V15.5325H4.45462V11.7922Z\" />\n <path d=\"M4.45462 15.5323H0.714355V19.2726H4.45462V15.5323Z\" />\n <path d=\"M6.32473 0.571411H2.58447V4.31167H6.32473V0.571411Z\" />\n <path d=\"M21.2857 4.31165H17.5454V8.05191H21.2857V4.31165Z\" />\n <path d=\"M6.32473 4.31165H2.58447V8.05191H6.32473V4.31165Z\" />\n <path d=\"M15.6753 4.31165H11.9351V8.05191H15.6753V4.31165Z\" />\n <path d=\"M17.5454 4.31165H13.8052V8.05191H17.5454V4.31165Z\" />\n <path d=\"M10.065 4.31165H6.32471V8.05191H10.065V4.31165Z\" />\n <path d=\"M13.8052 8.05188H10.0649V11.7921H13.8052V8.05188Z\" />\n <path d=\"M17.5454 8.05188H13.8052V11.7921H17.5454V8.05188Z\" />\n <path d=\"M10.065 8.05188H6.32471V11.7921H10.065V8.05188Z\" />\n <path d=\"M11.9351 11.7922H8.19482V15.5325H11.9351V11.7922Z\" />\n <path d=\"M13.8052 11.7922H10.0649V15.5325H13.8052V11.7922Z\" />\n <path d=\"M21.2857 8.05188H17.5454V11.7921H21.2857V8.05188Z\" />\n <path d=\"M6.32473 8.05188H2.58447V11.7921H6.32473V8.05188Z\" />\n <path d=\"M19.4156 11.7922H15.6753V15.5325H19.4156V11.7922Z\" />\n <path d=\"M21.2857 11.7922H17.5454V15.5325H21.2857V11.7922Z\" />\n <path d=\"M19.4156 15.5323H15.6753V19.2726H19.4156V15.5323Z\" />\n <path d=\"M6.32473 11.7922H2.58447V15.5325H6.32473V11.7922Z\" />\n <path d=\"M21.2857 15.5323H17.5454V19.2726H21.2857V15.5323Z\" />\n <path d=\"M6.32473 15.5323H2.58447V19.2726H6.32473V15.5323Z\" />\n </Glyph>\n)\n\nexport const GroqLogo = ({ size = 12, className }: ProviderIconProps): React.ReactElement => (\n <Glyph size={size} viewBox=\"0 0 15 22\" className={className}>\n <path d=\"M7.12321 0.753296C3.27412 0.753296 0.143066 3.91255 0.143066 7.79593C0.143066 11.6793 3.27412 14.839 7.12321 14.839H9.41876V12.1977H7.12321C4.71767 12.1977 2.76072 10.2231 2.76072 7.79593C2.76072 5.36872 4.71767 3.39413 7.12321 3.39413C9.52875 3.39413 11.4959 5.36872 11.4959 7.79593V14.2821C11.4959 16.6934 9.54996 18.6573 7.16603 18.6827C6.02532 18.6732 4.9345 18.2107 4.13004 17.3946L2.27914 19.2622C3.56204 20.5634 5.3002 21.3037 7.11889 21.3235V21.3247C7.1346 21.3247 7.15031 21.3247 7.16563 21.3247H7.21473V21.3235C11.0088 21.2716 14.081 18.1508 14.0986 14.3138L14.101 7.62312C14.0099 3.81981 10.9146 0.753296 7.12321 0.753296Z\" />\n </Glyph>\n)\n\nexport const OllamaLogo = ({ size = 12, className }: ProviderIconProps): React.ReactElement => (\n <Glyph size={size} viewBox=\"0 0 16 22\" className={className}>\n <path d=\"M10.1044 9.89569C10.6837 10.3223 11.1157 10.8046 11.2561 11.5301C11.3088 12.2593 11.2197 12.6993 10.7819 13.2915C10.2833 13.8614 9.66528 14.2002 8.909 14.2593C8.67758 14.2659 8.44727 14.2686 8.21583 14.2665C8.07221 14.2654 7.92873 14.2665 7.78512 14.2678C6.90745 14.2692 6.21469 14.1208 5.56691 13.5025C5.13374 13.0334 4.90487 12.5888 4.91749 11.9451C4.91818 11.8916 4.91887 11.8381 4.91959 11.783C4.93565 11.3405 5.02996 11.0106 5.29433 10.6494C5.32796 10.6018 5.36158 10.5542 5.39622 10.5052C5.702 10.1169 6.08253 9.86684 6.51379 9.63317C6.56698 9.60356 6.62016 9.57396 6.67496 9.54345C7.73031 9.06067 9.14792 9.29968 10.1044 9.89569ZM5.97181 11.0559C5.73111 11.3772 5.64825 11.6993 5.66615 12.0999C5.74893 12.5188 5.99409 12.8873 6.32749 13.1518C6.8829 13.4828 7.46794 13.5287 8.10163 13.5244C8.20885 13.5265 8.20885 13.5265 8.31824 13.5285C9.02425 13.5281 9.61763 13.365 10.1319 12.8655C10.4247 12.5512 10.4727 12.3291 10.4583 11.907C10.4146 11.4051 10.2916 11.0688 9.89933 10.7362C8.65785 9.78646 7.01637 9.86496 5.97181 11.0559Z\" />\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M5.75158 2.91052C5.53174 2.0987 5.19725 1.27988 4.45008 0.82542C4.05056 0.669299 3.56483 0.665313 3.1941 0.893697C2.63015 1.3091 2.24679 2.08179 2.13263 2.76549L2.11014 2.92613C1.9698 3.69749 1.93035 4.46221 1.98516 5.24411L1.9974 5.39046C2.00502 5.48223 2.01295 5.57397 2.02122 5.66568C2.02479 5.69913 2.02905 5.73135 2.03318 5.76259C2.05519 5.92915 2.07352 6.06782 1.96459 6.2164C1.47913 6.59227 1.04256 7.12358 0.774236 7.67271L0.687434 7.87172C0.580734 8.10782 0.483549 8.34303 0.410356 8.59154C0.179013 9.54096 0.260673 10.6965 0.729776 11.5555C0.811546 11.7038 0.88611 11.8508 0.958425 12.0043C0.958425 12.2854 0.913432 12.3987 0.797524 12.6479C0.510049 13.2599 0.467807 13.9115 0.468974 14.579L0.471488 14.8074C0.471936 15.5967 0.528824 16.3265 0.899146 17.0388C1.03892 17.2886 1.1281 17.5052 1.0484 17.7902C0.557911 18.9435 0.551088 20.0587 0.687434 21.2858H1.97464V21.0148C1.71025 20.139 1.7711 19.1799 2.14639 18.3443L2.16683 18.3023C2.26477 18.1013 2.36207 17.9015 2.44888 17.6952C2.49898 17.4454 2.50268 17.2438 2.36843 17.0177C1.81616 16.4083 1.69579 15.7284 1.68018 14.9261L1.67825 14.71C1.66941 14.0734 1.72655 13.4939 2.03048 12.9245C2.04506 12.9028 2.05964 12.8813 2.07412 12.86C2.25028 12.6002 2.41333 12.3598 2.42347 12.034C2.39679 11.8872 2.38692 11.8329 2.36035 11.7887C2.34476 11.7627 2.32342 11.7402 2.28956 11.7045C1.84561 11.2805 1.59179 10.6432 1.5491 10.0426C1.51683 9.0468 1.7191 8.19467 2.39859 7.42818C3.15842 6.70012 3.8477 6.53584 4.86954 6.52391C4.96598 6.5241 5.06251 6.52249 5.15879 6.51676C5.18883 6.48672 5.20555 6.47 5.22023 6.45165C5.23866 6.42862 5.25388 6.40302 5.2882 6.34528C5.57717 5.85158 5.92486 5.40941 6.39519 5.07712C7.13017 4.62811 7.82723 4.41943 8.68961 4.57854C9.48851 4.83711 10.1926 5.25935 10.6464 5.97478C10.7408 6.17636 10.8301 6.35502 10.9851 6.51676C11.1486 6.56835 11.2843 6.57262 11.4554 6.5712L11.6329 6.56334C12.3759 6.56529 12.9767 6.70263 13.5293 7.23129L13.6273 7.32974C14.1182 7.76083 14.4817 8.37325 14.5757 9.02343C14.6238 9.87283 14.6564 10.7119 14.1137 11.42C13.9911 11.5669 13.8716 11.7115 13.7628 11.8688C13.7004 12.1932 13.7861 12.3474 13.966 12.6141C14.2804 13.0791 14.416 13.5478 14.4926 14.1032C14.5934 14.9993 14.5723 16.0844 13.9927 16.8163C13.8845 16.947 13.7861 17.0777 13.695 17.2209C13.6415 17.4446 13.6647 17.5634 13.7625 17.7698C14.2755 18.751 14.4241 19.7087 14.3047 20.8116L14.1692 21.2858H15.4565C15.6092 20.2164 15.6246 19.1262 15.2532 18.1016L15.1828 17.9169L15.1219 17.7544L15.0651 17.6226C15.0519 17.5586 15.0448 17.5235 15.0501 17.4905C15.0566 17.4505 15.0814 17.4135 15.1362 17.3318C15.1943 17.2431 15.2236 17.1984 15.2492 17.1518C15.2752 17.1045 15.2975 17.0552 15.3424 16.956C15.8611 15.6438 15.9282 14.0744 15.4183 12.7453L15.4061 12.716C15.3337 12.5424 15.2622 12.3706 15.204 12.1914C15.1892 12.1328 15.1811 12.1008 15.1856 12.0707C15.191 12.0347 15.2144 12.0013 15.2659 11.9281C15.8024 11.0772 15.9343 10.071 15.8439 9.08695C15.7088 8.08931 15.2318 7.07554 14.436 6.44902L14.2388 6.31352C14.1611 6.17326 14.122 6.10274 14.1061 6.02733C14.0901 5.95108 14.098 5.86984 14.1137 5.70644C14.1601 5.31445 14.1798 4.93296 14.1818 4.53832L14.1819 4.30649C14.1909 3.47534 14.106 2.75683 13.7903 1.98322C13.5457 1.44714 13.2471 0.983476 12.6788 0.758202C12.3661 0.718969 12.019 0.681597 11.7303 0.825949C11.1198 1.28795 10.7878 1.80066 10.5656 2.52997L10.5109 2.72289C10.4035 3.08351 10.3504 3.43907 10.3177 3.8132L10.3076 3.94235C9.93657 3.75103 9.55797 3.57883 9.16623 3.43424C8.0722 3.07745 7.00024 3.3833 6.00272 3.86057L5.83627 3.94235C5.84947 3.58589 5.82871 3.25921 5.75158 2.91052ZM3.80383 1.90991H4.00708C4.33115 2.30657 4.49953 2.77324 4.61681 3.26487L4.65888 3.41757C4.7506 3.7914 4.76816 4.16041 4.77347 4.54361L4.77709 4.69513C4.77672 4.98914 4.75524 5.15329 4.54906 5.36505C4.47886 5.38562 4.44208 5.3964 4.4046 5.40343C4.36336 5.41118 4.32128 5.41439 4.2329 5.42115L4.23281 5.42116L4.04955 5.43703L3.85888 5.44974L3.66582 5.46562C3.50863 5.47838 3.35145 5.48998 3.1941 5.50055C3.18729 5.20917 3.18243 4.91784 3.17922 4.62641C3.17787 4.52774 3.17604 4.42906 3.17366 4.33041C3.15372 3.48063 3.19343 2.56727 3.80383 1.90991ZM12.2046 1.90991H12.4078C13.1548 2.82926 13.0975 4.17989 13.0175 5.2973L12.9498 5.50055C12.7393 5.48564 12.5291 5.46795 12.3189 5.44974L12.138 5.43703C11.8611 5.41177 11.7625 5.40277 11.6777 5.36372C11.6308 5.34211 11.5881 5.3113 11.5218 5.26343C11.4243 4.99914 11.4264 4.74704 11.4297 4.46739L11.4311 4.28537C11.4507 3.46741 11.6017 2.51281 12.2046 1.90991Z\" />\n <path d=\"M12.1243 9.46396C12.3546 9.51627 12.5027 9.61403 12.6787 9.76856C12.8518 10.0522 12.8623 10.3252 12.8142 10.6493C12.6748 10.8753 12.5609 10.9763 12.34 11.1235C12.1058 11.1596 11.9417 11.1692 11.7342 11.0444C11.4216 10.7905 11.2914 10.5816 11.2222 10.1835C11.2644 9.91975 11.3519 9.78311 11.5331 9.58993C11.7296 9.44969 11.8881 9.44444 12.1243 9.46396Z\" />\n <path d=\"M4.4135 9.49766C4.78611 9.7009 4.78611 9.7009 4.88773 9.90415C4.92462 10.3394 4.87446 10.5651 4.61674 10.9204C4.42819 11.0742 4.31585 11.1189 4.07476 11.149C3.76776 11.1106 3.60323 11.0078 3.40999 10.7679C3.30581 10.5267 3.2975 10.3683 3.32953 10.1074C3.58695 9.62933 3.85303 9.39761 4.4135 9.49766Z\" />\n <path d=\"M7.65258 11.1829C7.83055 11.1899 7.96945 11.2151 8.13952 11.2592C8.16188 11.2368 8.18424 11.2144 8.20727 11.1914C8.40628 11.1787 8.40628 11.1787 8.61376 11.1914C8.74925 11.3269 8.74925 11.3269 8.77042 11.492C8.74925 11.6656 8.74925 11.6656 8.6561 11.7884C8.54601 11.8689 8.54601 11.8689 8.41051 11.8689C8.41209 11.9162 8.41366 11.9636 8.41528 12.0123C8.41711 12.1048 8.41711 12.1048 8.41898 12.1992C8.42055 12.2605 8.42213 12.3218 8.42375 12.3849C8.41051 12.5464 8.41051 12.5464 8.27502 12.6819C8.07177 12.6988 8.07177 12.6988 7.86853 12.6819C7.70573 12.5191 7.71722 12.4721 7.70763 12.25C7.6828 11.9563 7.60997 11.8674 7.3943 11.6656C7.37313 11.4497 7.37313 11.4497 7.3943 11.2592C7.46204 11.1914 7.46204 11.1914 7.65258 11.1829Z\" />\n </Glyph>\n)\n\nexport const DeepSeekLogo = ({ size = 12, className }: ProviderIconProps): React.ReactElement => (\n <Glyph size={size} viewBox=\"0 0 20 15\" className={className}>\n <path d=\"M19.7848 1.26275C19.5756 1.16126 19.486 1.36425 19.3565 1.46575C19.3166 1.4962 19.2768 1.54695 19.2469 1.5774C18.9381 1.91234 18.5795 2.13564 18.1013 2.10519C17.414 2.06459 16.8263 2.28789 16.2983 2.82583C16.1887 2.15594 15.8202 1.7601 15.2623 1.50635C14.9734 1.3744 14.6746 1.24245 14.4654 0.958259C14.326 0.755262 14.2861 0.521816 14.2164 0.29852C14.1666 0.166572 14.1267 0.0244731 13.9673 0.00417344C13.798 -0.0262761 13.7382 0.115822 13.6685 0.23762C13.4095 0.724812 13.3099 1.26275 13.3199 1.80069C13.3398 3.01867 13.8478 3.99306 14.8539 4.68325C14.9734 4.76445 14.9934 4.84565 14.9635 4.95729C14.8938 5.19074 14.8141 5.42419 14.7443 5.66778C14.6945 5.82003 14.6248 5.85048 14.4654 5.78958C13.9175 5.55614 13.4394 5.21104 13.021 4.78475C12.3038 4.08441 11.6563 3.30287 10.8594 2.69388C10.6701 2.55178 10.4809 2.41983 10.2816 2.28789C9.46481 1.4759 10.3912 0.806011 10.6004 0.724812C10.8196 0.643614 10.6801 0.359418 9.95291 0.359418C9.22573 0.359418 8.55832 0.613163 7.7116 0.937958C7.58211 0.988707 7.46257 1.01916 7.32311 1.04961C6.55609 0.897359 5.75917 0.86691 4.92242 0.968408C3.34852 1.15111 2.09339 1.90219 1.17694 3.20137C0.0712291 4.7543 -0.197728 6.52037 0.130997 8.36764C0.469684 10.3063 1.43594 11.9201 2.93014 13.1685C4.47416 14.4677 6.25724 15.1071 8.28936 14.9853C9.52458 14.9143 10.8992 14.7417 12.4532 13.402C12.8417 13.605 13.2601 13.676 13.9375 13.7369C14.4654 13.7877 14.9635 13.7065 15.3619 13.6253C15.9696 13.4933 15.9297 12.9148 15.7106 12.8133C13.9175 11.9607 14.306 12.3058 13.9474 12.0216C14.8639 10.9254 16.2385 9.77847 16.7765 6.06363C16.8163 5.76928 16.7765 5.58658 16.7765 5.34299C16.7765 5.20089 16.8063 5.13999 16.9657 5.12984C17.414 5.07909 17.8523 4.94715 18.2507 4.72385C19.4162 4.07426 19.8844 3.00853 19.994 1.72965C20.0139 1.5368 19.994 1.3338 19.7848 1.2323V1.26275ZM9.64411 12.7524C7.90087 11.3517 7.06412 10.8949 6.70551 10.9152C6.37678 10.9355 6.43655 11.3111 6.50628 11.5648C6.57601 11.8084 6.67562 11.981 6.81508 12.1941C6.90473 12.3362 6.97446 12.5494 6.72543 12.7016C6.16759 13.0569 5.19138 12.5798 5.14157 12.5595C4.00597 11.8795 3.05964 10.9761 2.39223 9.74802C1.74474 8.56049 1.37617 7.29176 1.30644 5.94183C1.28652 5.61703 1.38613 5.49524 1.7049 5.43434C2.12327 5.35314 2.56157 5.33284 2.97995 5.40389C4.75308 5.66778 6.2672 6.47977 7.5323 7.75865C8.25948 8.48944 8.80736 9.36232 9.36519 10.2149C9.96288 11.1182 10.6104 11.981 11.4272 12.6915C11.7161 12.9351 11.9452 13.1279 12.1743 13.27C11.5069 13.3512 10.3912 13.3614 9.62419 12.7524H9.64411ZM10.4809 7.28161C10.4809 7.12936 10.5904 7.01771 10.7399 7.01771C10.8893 7.01771 10.7996 7.01771 10.8295 7.03801C10.8594 7.04816 10.8992 7.06846 10.9192 7.09891C10.969 7.14966 10.9889 7.21056 10.9889 7.28161C10.9889 7.4237 10.8793 7.5455 10.7299 7.5455C10.5805 7.5455 10.4809 7.43385 10.4809 7.28161ZM13.0708 8.63154C12.9015 8.70258 12.7421 8.76348 12.5827 8.76348C12.3337 8.77363 12.0647 8.67213 11.9153 8.55033C11.6862 8.35749 11.5268 8.24584 11.4571 7.90075C11.4272 7.75865 11.4471 7.53535 11.467 7.4034C11.5268 7.12936 11.467 6.94666 11.2678 6.78426C11.1084 6.65232 10.9092 6.61172 10.6901 6.61172C10.4709 6.61172 10.5307 6.58127 10.4809 6.55082C10.3912 6.50007 10.3115 6.38842 10.3912 6.24632C10.4111 6.19558 10.5207 6.08393 10.5506 6.07378C10.8494 5.90123 11.1881 5.95198 11.5069 6.08393C11.7958 6.20572 12.0249 6.42902 12.3436 6.75382C12.6724 7.13951 12.7321 7.24101 12.9114 7.53535C13.0609 7.75865 13.1904 7.99209 13.28 8.25599C13.3398 8.41839 13.2601 8.56048 13.0708 8.64168V8.63154Z\" />\n </Glyph>\n)\n\nexport const XAILogo = ({ size = 12, className }: ProviderIconProps): React.ReactElement => (\n <Glyph size={size} viewBox=\"0 0 22 24\" className={className}>\n <path d=\"M11.334 14.201L18.9751 3.08215H15.2822L9.48779 11.5143L11.334 14.201Z\" />\n <path d=\"M6.71784 20.9178L8.5643 18.2311L6.71784 15.5444L3.0249 20.9178H6.71784Z\" />\n <path d=\"M11.3337 20.9179H15.0266L6.71784 8.82727H3.0249L11.3337 20.9179Z\" />\n <path d=\"M18.9752 4.42566L15.9502 8.82726L16.2527 20.9179H18.6727L18.9752 4.42566Z\" />\n </Glyph>\n)\n\nexport const CohereLogo = ({ size = 12, className }: ProviderIconProps): React.ReactElement => (\n <Glyph size={size} viewBox=\"0 0 18 18\" className={className}>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M5.8317 10.7281C6.31172 10.7281 7.27175 10.7041 8.61579 10.1521C10.1758 9.50407 13.2479 8.35203 15.48 7.15199C17.0401 6.31196 17.7121 5.20793 17.7121 3.71988C17.7121 1.67981 16.056 -0.000244141 13.992 -0.000244141H5.35169C2.39959 -0.000244141 -0.000488281 2.39983 -0.000488281 5.35193C-0.000488281 8.30403 2.25559 10.7281 5.8317 10.7281Z\" />\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M7.29541 14.4C7.29541 12.9599 8.15944 11.6399 9.50348 11.0879L12.2156 9.95983C14.9757 8.83179 17.9998 10.8479 17.9998 13.824C17.9998 16.128 16.1277 18.0001 13.8236 18.0001H10.8715C8.90346 18.0001 7.29541 16.392 7.29541 14.4Z\" />\n <path d=\"M3.09561 11.424C1.39156 11.424 -0.000488281 12.816 -0.000488281 14.5201V14.9281C-0.000488281 16.6081 1.39156 18.0002 3.09561 18.0002C4.79967 18.0002 6.19171 16.6081 6.19171 14.9041V14.4961C6.16771 12.816 4.79967 11.424 3.09561 11.424Z\" />\n </Glyph>\n)\n\nexport const AWSLogo = ({ size = 12, className }: ProviderIconProps): React.ReactElement => (\n <Glyph size={size} viewBox=\"0 0 22 14\" className={className}>\n <path d=\"M6.25274 4.80513C6.25274 5.07289 6.28169 5.28999 6.33235 5.4492C6.39024 5.60841 6.46261 5.7821 6.56393 5.97026C6.60011 6.02815 6.61459 6.08605 6.61459 6.1367C6.61459 6.20907 6.57117 6.28144 6.47709 6.35381L6.02117 6.65776C5.95603 6.70118 5.8909 6.72289 5.83301 6.72289C5.76064 6.72289 5.68827 6.6867 5.6159 6.62157C5.51459 6.51302 5.42774 6.39723 5.35538 6.28144C5.28301 6.15841 5.21064 6.02091 5.13103 5.85447C4.56656 6.52026 3.85735 6.85315 3.0034 6.85315C2.39551 6.85315 1.91064 6.67947 1.55603 6.3321C1.20143 5.98473 1.02051 5.52157 1.02051 4.94263C1.02051 4.32749 1.23761 3.82815 1.67906 3.45184C2.12051 3.07552 2.70669 2.88736 3.45209 2.88736C3.69814 2.88736 3.95143 2.90907 4.21919 2.94526C4.48695 2.98144 4.76196 3.03934 5.05143 3.10447V2.57618C5.05143 2.02618 4.93564 1.64263 4.7113 1.41828C4.47972 1.19394 4.08893 1.08539 3.53169 1.08539C3.2784 1.08539 3.01788 1.11434 2.75011 1.17947C2.48235 1.2446 2.22182 1.3242 1.96853 1.42552C1.85274 1.47618 1.7659 1.50513 1.71524 1.5196C1.66459 1.53407 1.6284 1.54131 1.59946 1.54131C1.49814 1.54131 1.44748 1.46894 1.44748 1.31697V0.962362C1.44748 0.846573 1.46196 0.759731 1.49814 0.709073C1.53432 0.658415 1.59946 0.607757 1.70077 0.557099C1.95406 0.426836 2.25801 0.318284 2.61261 0.231441C2.96722 0.137362 3.34353 0.0939415 3.74156 0.0939415C4.60274 0.0939415 5.23235 0.289336 5.63761 0.680126C6.03564 1.07091 6.23827 1.66434 6.23827 2.46039V4.80513H6.25274ZM3.31459 5.90513C3.5534 5.90513 3.79946 5.8617 4.05998 5.77486C4.32051 5.68802 4.55209 5.52881 4.74748 5.3117C4.86327 5.1742 4.95011 5.02223 4.99353 4.84855C5.03696 4.67486 5.0659 4.46499 5.0659 4.21894V3.91499C4.85603 3.86434 4.63169 3.82091 4.40011 3.79197C4.16853 3.76302 3.94419 3.74855 3.71985 3.74855C3.23498 3.74855 2.88038 3.84263 2.64156 4.03802C2.40274 4.23341 2.28696 4.50842 2.28696 4.87026C2.28696 5.21039 2.3738 5.46368 2.55472 5.63736C2.7284 5.81828 2.98169 5.90513 3.31459 5.90513ZM9.12577 6.6867C8.99551 6.6867 8.90867 6.66499 8.85077 6.61434C8.79288 6.57091 8.74222 6.4696 8.6988 6.3321L6.99814 0.73802C6.95472 0.593283 6.93301 0.499205 6.93301 0.448547C6.93301 0.332757 6.9909 0.267626 7.10669 0.267626H7.8159C7.9534 0.267626 8.04748 0.289336 8.09814 0.339994C8.15603 0.383415 8.19946 0.484731 8.24288 0.622231L9.45867 5.41302L10.5876 0.622231C10.6238 0.477494 10.6672 0.383415 10.7251 0.339994C10.783 0.296573 10.8843 0.267626 11.0146 0.267626H11.5935C11.731 0.267626 11.8251 0.289336 11.883 0.339994C11.9409 0.383415 11.9916 0.484731 12.0205 0.622231L13.1639 5.47091L14.4159 0.622231C14.4593 0.477494 14.51 0.383415 14.5606 0.339994C14.6185 0.296573 14.7126 0.267626 14.8429 0.267626H15.5159C15.6317 0.267626 15.6968 0.32552 15.6968 0.448547C15.6968 0.484731 15.6896 0.520915 15.6823 0.564336C15.6751 0.607757 15.6606 0.665652 15.6317 0.745257L13.8876 6.33934C13.8442 6.48407 13.7935 6.57815 13.7356 6.62157C13.6777 6.66499 13.5837 6.69394 13.4606 6.69394H12.8383C12.7008 6.69394 12.6067 6.67223 12.5488 6.62157C12.4909 6.57091 12.4402 6.47684 12.4113 6.3321L11.2896 1.66434L10.1751 6.32486C10.1389 6.4696 10.0955 6.56368 10.0376 6.61434C9.97972 6.66499 9.8784 6.6867 9.74814 6.6867H9.12577ZM18.4251 6.8821C18.0488 6.8821 17.6725 6.83868 17.3106 6.75184C16.9488 6.66499 16.6666 6.57091 16.4784 6.46236C16.3626 6.39723 16.283 6.32486 16.2541 6.25973C16.2251 6.1946 16.2106 6.12223 16.2106 6.0571V5.68802C16.2106 5.53605 16.2685 5.46368 16.3771 5.46368C16.4205 5.46368 16.4639 5.47091 16.5073 5.48539C16.5508 5.49986 16.6159 5.52881 16.6883 5.55776C16.9343 5.66631 17.2021 5.75315 17.4843 5.81105C17.7738 5.86894 18.056 5.89789 18.3455 5.89789C18.8014 5.89789 19.156 5.81828 19.4021 5.65907C19.6481 5.49986 19.7784 5.26828 19.7784 4.97157C19.7784 4.76894 19.7133 4.60249 19.583 4.46499C19.4527 4.32749 19.2067 4.20447 18.8521 4.08868L17.8027 3.76302C17.2745 3.59657 16.8837 3.35052 16.6448 3.02486C16.406 2.70644 16.283 2.35184 16.283 1.97552C16.283 1.67157 16.3481 1.40381 16.4784 1.17223C16.6087 0.940652 16.7823 0.73802 16.9995 0.57881C17.2166 0.412362 17.4626 0.289336 17.7521 0.202494C18.0416 0.115652 18.3455 0.0794678 18.6639 0.0794678C18.8231 0.0794678 18.9896 0.0867046 19.1488 0.108415C19.3152 0.130126 19.4672 0.159073 19.6192 0.18802C19.7639 0.224205 19.9014 0.260389 20.0317 0.30381C20.162 0.347231 20.2633 0.390652 20.3356 0.434073C20.437 0.491968 20.5093 0.549862 20.5527 0.614994C20.5962 0.672889 20.6179 0.752494 20.6179 0.85381V1.19394C20.6179 1.34591 20.56 1.42552 20.4514 1.42552C20.3935 1.42552 20.2995 1.39657 20.1764 1.33868C19.7639 1.15052 19.3008 1.05644 18.787 1.05644C18.3745 1.05644 18.0488 1.12157 17.8245 1.25907C17.6001 1.39657 17.4843 1.60644 17.4843 1.90315C17.4843 2.10578 17.5567 2.27947 17.7014 2.41697C17.8462 2.55447 18.1139 2.69197 18.4975 2.81499L19.5251 3.14065C20.0462 3.3071 20.4225 3.53868 20.6468 3.83539C20.8712 4.1321 20.9797 4.47223 20.9797 4.84855C20.9797 5.15973 20.9146 5.44197 20.7916 5.68802C20.6613 5.93407 20.4876 6.15118 20.2633 6.32486C20.0389 6.50578 19.7712 6.63605 19.46 6.73012C19.1343 6.83144 18.7942 6.8821 18.4251 6.8821Z\" />\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M19.7927 10.3991C17.4117 12.1577 13.9525 13.0912 10.9782 13.0912C6.80976 13.0912 3.05384 11.5498 0.217001 8.98792C-0.00734065 8.78529 0.195291 8.51029 0.463054 8.6695C3.53147 10.4498 7.31634 11.5281 11.2315 11.5281C13.8729 11.5281 16.7749 10.9781 19.4453 9.8491C19.8433 9.66818 20.1834 10.1096 19.7927 10.3991Z\" />\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M20.7838 9.27038C20.4799 8.87959 18.772 9.08222 17.9976 9.1763C17.7661 9.20525 17.7299 9.00262 17.9397 8.85064C19.3003 7.89538 21.5364 8.17038 21.797 8.4888C22.0575 8.81446 21.7246 11.0506 20.4509 12.1217C20.2555 12.2881 20.0674 12.2013 20.1542 11.9842C20.4437 11.2677 21.0878 9.65393 20.7838 9.27038Z\" />\n </Glyph>\n)\n\nexport const AzureLogo = ({ size = 12, className }: ProviderIconProps): React.ReactElement => (\n <Glyph size={size} viewBox=\"0 0 21 17\" className={className}>\n <path d=\"M11.4736 0L5.2828 5.44659L0 15.0667H4.76322L11.4736 0ZM12.2971 1.27434L9.65504 8.82946L14.7209 15.2868L4.89312 17H21L12.2971 1.27434Z\" />\n </Glyph>\n)\n\nexport const FireworksLogo = ({ size = 12, className }: ProviderIconProps): React.ReactElement => (\n <Glyph size={size} viewBox=\"0 0 22 11\" className={className}>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M13.5663 0L10.9988 6.22842L8.42884 0H6.78016L9.597 6.80871C9.83063 7.37681 10.3786 7.74377 10.9892 7.74377C11.5997 7.74377 12.1465 7.37681 12.3813 6.81115L15.215 0H13.5663ZM14.6635 9.48953L19.3602 4.68259L18.7195 3.15261L13.5892 8.41306C13.1605 8.85315 13.0377 9.50172 13.2749 10.0698C13.5109 10.633 14.0565 10.9976 14.6647 10.9976L14.6671 11L22 10.9817L21.3593 9.45173L14.6647 9.48953H14.6635ZM2.63981 4.67893L3.28049 3.14895L8.41077 8.4094C8.8395 8.84828 8.96354 9.49928 8.72509 10.0662C8.48905 10.6306 7.9411 10.9939 7.33534 10.9939L0.00240858 10.9768L0 10.9793L0.640683 9.4493L7.33534 9.48709L2.63981 4.67893Z\" />\n </Glyph>\n)\n\n/**\n * Pick a mark from a provider or model string, the way AgentOS does — matching\n * on a substring so \"anthropic\", \"claude-opus-5\" and \"us.anthropic.claude\"\n * all land on the same logo. Returns null when nothing matches, and the badge\n * then falls back to the model name as text.\n */\nexport function getProviderIcon(\n value?: string,\n): ((props: ProviderIconProps) => React.ReactElement) | null {\n if (!value) return null\n const v = value.toLowerCase()\n // Provider names first, then model families — \"gpt-4o\" has no provider in it.\n const table: Array<[string, (props: ProviderIconProps) => React.ReactElement]> = [\n ['anthropic', AnthropicLogo],\n ['openai', OpenAILogo],\n ['gemini', GeminiLogo],\n ['google', GeminiLogo],\n ['mistral', MistralLogo],\n ['groq', GroqLogo],\n ['ollama', OllamaLogo],\n ['deepseek', DeepSeekLogo],\n ['xai', XAILogo],\n ['grok', XAILogo],\n ['cohere', CohereLogo],\n ['aws', AWSLogo],\n ['bedrock', AWSLogo],\n ['azure', AzureLogo],\n ['fireworks', FireworksLogo],\n ['claude', AnthropicLogo],\n ['gpt', OpenAILogo],\n ['o1', OpenAILogo],\n ['o3', OpenAILogo],\n ]\n return table.find(([key]) => v.includes(key))?.[1] ?? null\n}\n","/**\n * The selected agent/team/workflow, shown read-only in the composer row — the\n * AgentOS `SelectComponentType` display: the name in mono uppercase, then the\n * model in a small bordered chip.\n *\n * This is deliberately not a control. AgentOS switches the entity from the\n * breadcrumb above the chat, not from the dock, so the selection is owned by\n * whatever renders the embed. Pass `entity` down and render `<EntitySelector>`\n * in your own chrome if you want users to change it.\n */\n\nimport React from 'react'\n\nimport type { Entity } from '../../core/types'\nimport { cx } from '../../cx'\nimport { getProviderIcon } from './providerIcons'\n\nexport interface EntityBadgeProps {\n entity?: Entity | null\n /** Shown when nothing is selected yet. */\n placeholder?: string\n /** Hide the model mark. */\n hideModel?: boolean\n className?: string\n}\n\nexport function EntityBadge({\n entity,\n placeholder = 'No agent selected',\n hideModel,\n className,\n}: EntityBadgeProps): React.ReactElement | null {\n const model = entity?.model?.model ?? entity?.model?.name\n const provider = entity?.model?.provider\n // AgentOS matches on the provider first, then falls back to the model string\n // so \"claude-opus-5\" still resolves when no provider is reported.\n const Icon = getProviderIcon(provider) ?? getProviderIcon(model)\n // The title carries the full \"provider - model\" the mark cannot show.\n const modelTitle = [provider, model].filter(Boolean).join(' - ')\n\n return (\n <div className={cx('agno-entity', className)}>\n <span className=\"agno-entity__name\" title={entity?.name}>\n {entity?.name ?? placeholder}\n </span>\n {!hideModel &&\n model &&\n (Icon ? (\n <span className=\"agno-entity__mark\" title={modelTitle || undefined}>\n <Icon size={11} />\n </span>\n ) : (\n // No mark for this provider — name the model rather than show nothing.\n <span className=\"agno-entity__model\" title={modelTitle || undefined}>\n {model}\n </span>\n ))}\n </div>\n )\n}\n","/**\n * Entity picker styled after the Agno OS chat selector: a compact bordered\n * trigger showing the selection in mono-uppercase, opening a dark popover with\n * muted group labels (Agents / Teams / Workflows) and a check on the active\n * item. Custom popover (no native <select>, no extra deps).\n */\n\nimport React, { useEffect, useRef, useState } from 'react'\n\nimport type { Entity } from '../../core/types'\nimport { cx } from '../../cx'\nimport type { ChatClassNames } from '../classNames'\nimport { useResolvedClassNames } from '../ChatProvider'\nimport { Check, ChevronDown } from './icons'\n\nconst TYPE_LABEL: Record<Entity['type'], string> = {\n agent: 'Agents',\n team: 'Teams',\n workflow: 'Workflows',\n}\n\nconst ORDER: Entity['type'][] = ['agent', 'team', 'workflow']\n\nexport function EntitySelector({\n entities,\n value,\n onChange,\n disabled,\n placeholder = 'Select an agent, team or workflow',\n className,\n classNames,\n}: {\n entities: Entity[]\n value?: Entity | null\n onChange: (entity: Entity) => void\n disabled?: boolean\n placeholder?: string\n className?: string\n classNames?: ChatClassNames\n}): React.ReactElement {\n const cn = useResolvedClassNames(classNames)\n const [open, setOpen] = useState(false)\n const rootRef = useRef<HTMLDivElement>(null)\n const key = (e: Entity) => `${e.type}:${e.id}`\n\n useEffect(() => {\n if (!open) return\n const onDocClick = (e: MouseEvent) => {\n if (rootRef.current && !rootRef.current.contains(e.target as Node)) setOpen(false)\n }\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setOpen(false)\n }\n document.addEventListener('mousedown', onDocClick)\n document.addEventListener('keydown', onKey)\n return () => {\n document.removeEventListener('mousedown', onDocClick)\n document.removeEventListener('keydown', onKey)\n }\n }, [open])\n\n return (\n <div className={cx('agno-select', cn.select, className)} ref={rootRef}>\n <button\n type=\"button\"\n className={cx('agno-select__trigger', cn.selectTrigger)}\n disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n onClick={() => setOpen((v) => !v)}\n >\n <span className=\"agno-select__value\">{value ? value.name : placeholder}</span>\n <ChevronDown size={16} className={`agno-select__chev ${open ? 'is-open' : ''}`} />\n </button>\n\n {open && (\n <div className={cx('agno-select__panel', cn.selectPanel)} role=\"listbox\">\n {entities.length === 0 && <div className=\"agno-select__empty\">Nothing available</div>}\n {ORDER.map((type) => {\n const items = entities.filter((e) => e.type === type)\n if (items.length === 0) return null\n return (\n <div className=\"agno-select__group\" key={type}>\n <div className=\"agno-select__group-label\">{TYPE_LABEL[type]}</div>\n {items.map((ent) => {\n const selected = value ? key(value) === key(ent) : false\n return (\n <button\n type=\"button\"\n key={key(ent)}\n role=\"option\"\n aria-selected={selected}\n className={cx('agno-select__option', selected && 'is-selected', cn.selectOption)}\n onClick={() => {\n onChange(ent)\n setOpen(false)\n }}\n >\n <span className=\"agno-select__check\">{selected && <Check size={14} />}</span>\n <span className=\"agno-select__label\">{ent.name}</span>\n {ent.model?.model && <span className=\"agno-select__model\">{ent.model.model}</span>}\n </button>\n )\n })}\n </div>\n )\n })}\n </div>\n )}\n </div>\n )\n}\n","/**\n * A sidebar listing the past sessions of the selected entity. Clicking a\n * session loads its transcript; the trash icon deletes it.\n *\n * Pair with `useAgnoChat`: pass `chat.sessions`, `chat.loadSession`, etc.\n */\n\nimport React from 'react'\n\nimport type { SessionEntry } from '../../core/types'\nimport { cx } from '../../cx'\nimport type { ChatClassNames } from '../classNames'\nimport { useOptionalChatContext, useResolvedClassNames } from '../ChatProvider'\nimport { Plus, Spinner, Trash } from './icons'\n\nexport interface SessionListProps {\n /** Omit inside a `<ChatProvider>` to use the provider's session list. */\n sessions?: SessionEntry[]\n activeSessionId?: string\n /** Sessions with a run in flight — each shows a spinner instead of the delete button. */\n streamingSessionIds?: string[]\n loading?: boolean\n onSelect?: (sessionId: string) => void\n onDelete?: (sessionId: string) => void\n onNew?: () => void\n title?: string\n /** Hide the header row. */\n hideTitle?: boolean\n className?: string\n classNames?: ChatClassNames\n}\n\nfunction label(session: SessionEntry): string {\n return session.session_name?.trim() || session.session_id\n}\n\n/**\n * Render a session's creation time, tolerating the various shapes the API may\n * return: Unix seconds, Unix milliseconds, or an ISO date string. Returns an\n * empty string for missing/unparseable values so we never show \"Invalid Date\".\n */\nfunction formatDate(value: SessionEntry['created_at']): string {\n if (value == null) return ''\n\n let date: Date\n if (typeof value === 'number') {\n // Heuristic: seconds vs. milliseconds. Timestamps before ~2001 in ms would\n // be implausibly old, so treat small values as seconds.\n date = new Date(value < 1e12 ? value * 1000 : value)\n } else {\n date = new Date(value)\n }\n\n if (Number.isNaN(date.getTime())) return ''\n return date.toLocaleDateString()\n}\n\nexport function SessionList({\n sessions,\n activeSessionId,\n streamingSessionIds,\n loading,\n onSelect,\n onDelete,\n onNew,\n title = 'Sessions',\n hideTitle,\n className,\n classNames,\n}: SessionListProps): React.ReactElement {\n const ctx = useOptionalChatContext()\n const cn = useResolvedClassNames(classNames)\n const items = sessions ?? ctx?.chat.sessions ?? []\n const active = activeSessionId ?? ctx?.chat.sessionId\n const streaming = streamingSessionIds ?? ctx?.chat.streamingSessionIds\n const isLoading = loading ?? ctx?.chat.sessionsLoading ?? false\n const select = onSelect ?? ((id: string) => void ctx?.chat.loadSession(id))\n const remove = onDelete ?? (ctx ? (id: string) => void ctx.chat.deleteSession(id) : undefined)\n const create = onNew ?? ctx?.chat.reset\n\n return (\n <div className={cx('agno-sessions', cn.sessions, className)}>\n {create && (\n <button\n type=\"button\"\n className={cx('agno-btn', 'agno-btn--block', cn.newSessionButton)}\n onClick={create}\n aria-label=\"New chat\"\n >\n <Plus size={14} /> New Chat\n </button>\n )}\n\n {!hideTitle && (\n <div className=\"agno-sessions__head\">\n <span className=\"agno-sessions__title\">{title}</span>\n </div>\n )}\n\n {isLoading && <div className=\"agno-sessions__empty\">Loading…</div>}\n {!isLoading && items.length === 0 && <div className=\"agno-sessions__empty\">No past sessions.</div>}\n\n <ul className=\"agno-sessions__list\">\n {items.map((session) => (\n <li\n key={session.session_id}\n className={cx(\n 'agno-sessions__item',\n session.session_id === active && 'is-active',\n cn.sessionItem,\n session.session_id === active && cn.activeSessionItem,\n )}\n >\n <button type=\"button\" className=\"agno-sessions__select\" onClick={() => select(session.session_id)}>\n <span className=\"agno-sessions__name\">{label(session)}</span>\n {formatDate(session.created_at) && (\n <span className=\"agno-sessions__date\">{formatDate(session.created_at)}</span>\n )}\n </button>\n {streaming?.includes(session.session_id) ? (\n <span className=\"agno-sessions__spinner\" aria-label=\"Running\">\n <Spinner size={14} className=\"agno-spin\" />\n </span>\n ) : (\n remove && (\n <button\n type=\"button\"\n className=\"agno-sessions__delete\"\n aria-label=\"Delete session\"\n onClick={() => remove(session.session_id)}\n >\n <Trash size={14} />\n </button>\n )\n )}\n </li>\n ))}\n </ul>\n </div>\n )\n}\n","/**\n * Zero-wiring chat widget. Point it at an AgentOS URL and it discovers the\n * available agents/teams/workflows, lets the user pick one, and runs a full\n * streaming chat — transcript, tools, reasoning, media and human-in-the-loop.\n *\n * It renders inline by default. `mode=\"launcher\"` turns it into a support\n * widget instead: a bubble pinned to a corner that opens the chat in a popover\n * (or over the whole screen with `panel=\"fullscreen\"`).\n *\n * For finer control (custom layout, auth headers, session restore), call\n * `useAgnoChat` directly and render `<ChatWindow>`.\n */\n\nimport React, { useEffect, useMemo, useState } from 'react'\n\nimport { AgnoClient } from '../../core/client'\nimport type { Entity } from '../../core/types'\nimport { useAgnoChat } from '../useAgnoChat'\nimport { ChatLauncher } from './ChatLauncher'\nimport { cx } from '../../cx'\nimport type { ChatClassNames } from '../classNames'\nimport { ChatProvider } from '../ChatProvider'\nimport type { LinkComponent, ResolveLinkPreview } from '../sources'\nimport type { LauncherPanel, LauncherPosition } from './ChatLauncher'\nimport { ChatInput } from './ChatInput'\nimport { ChatWindow } from './ChatWindow'\nimport { EntityBadge } from './EntityBadge'\nimport { EntitySelector } from './EntitySelector'\nimport { Close } from './icons'\nimport type { RenderMarkdown } from './Markdown'\nimport type { QuickPrompt } from './QuickPrompts'\nimport { SessionList } from './SessionList'\n\nexport interface AgnoChatProps {\n /** AgentOS base URL, e.g. \"http://localhost:7777\". */\n baseUrl?: string\n /** Pre-built client (overrides baseUrl); use for shared auth/headers. */\n client?: AgnoClient\n headers?: Record<string, string>\n userId?: string\n /**\n * The selected agent/team/workflow. Pass it to own the selection — the embed\n * then only displays it, the way AgentOS drives the chat from its breadcrumb.\n * Omit it and the embed discovers the entities and selects the first itself.\n */\n entity?: Entity\n /** Initial selection when `entity` is not supplied. */\n defaultEntity?: Entity\n /** Fires whenever the selection changes, controlled or not. */\n onEntityChange?: (entity: Entity) => void\n /** Provide entities explicitly instead of auto-discovering them. */\n entities?: Entity[]\n /**\n * Put an interactive picker in the composer instead of the read-only badge.\n * Off by default: AgentOS switches the entity from its own chrome, so the\n * dock just reports what is answering. `<EntitySelector>` is exported for\n * placing a picker in your `header` slot.\n */\n showEntityPicker?: boolean\n /** Hide the selection display in the composer entirely. */\n hideEntityBadge?: boolean\n placeholder?: string\n /** Show the attach-files control. Default true, as the AgentOS dock does. */\n allowFiles?: boolean\n /** The one-row composer instead of the dock. Suits a launcher or a sidebar. */\n compactInput?: boolean\n /** Show the past-sessions sidebar. Default false. */\n showSessions?: boolean\n /** Render the last run error above the input. Default false. */\n showErrors?: boolean\n /** Suggested prompts offered while the transcript is empty. */\n quickPrompts?: QuickPrompt[]\n /**\n * Hide the \"Related questions\" an agent built with `followups=True` suggests\n * after its latest answer. Shown above the composer by default; clicking one\n * sends it.\n */\n hideFollowups?: boolean\n /** Heading over the follow-ups. Default \"Related questions\"; `null` for none. */\n followupsTitle?: React.ReactNode | null\n renderMarkdown?: RenderMarkdown\n /**\n * Fill link previews with your own OpenGraph metadata. Called once per URL,\n * on first hover — see `ResolveLinkPreview`.\n */\n resolveLinkPreview?: ResolveLinkPreview\n /** Put a copy button on fenced code blocks. Defaults to true. */\n codeCopy?: boolean\n /** Render every link with your own component — a router link, say. */\n linkComponent?: LinkComponent\n /**\n * Your own header/toolbar, rendered above the chat. Nothing by default —\n * the embed ships without chrome so it drops into yours.\n */\n header?: React.ReactNode\n /** Rendered below the chat, outside the composer. */\n footer?: React.ReactNode\n /** Empty-state copy shown before the first message. */\n emptyState?: React.ReactNode\n /** Light theme instead of the default dark. */\n light?: boolean\n className?: string\n /** Per-slot class overrides — see `ChatClassNames`. */\n classNames?: ChatClassNames\n style?: React.CSSProperties\n /**\n * \"inline\" (default) renders the chat where you put it. \"launcher\" pins a\n * support-style bubble to a corner of the viewport that opens the chat.\n */\n mode?: 'inline' | 'launcher'\n /** Panel size — inline, or the launcher's popover. Number means px. */\n width?: number | string\n height?: number | string\n /** Launcher only: corner to pin to. Default \"bottom-right\". */\n position?: LauncherPosition\n /** Launcher only: distance from both edges of that corner. Default 24. */\n offset?: number | string\n /** Launcher only: open as a corner popover (default) or over the whole screen. */\n panel?: LauncherPanel\n /** Launcher only: text beside the bubble glyph, e.g. \"Chat with us\". */\n launcherLabel?: string\n /** Launcher only: replaces the default speech-bubble glyph. */\n launcherIcon?: React.ReactNode\n /** Launcher only: open on first render. Default false. */\n defaultOpen?: boolean\n /** Launcher only: controlled open state. Pair with `onOpenChange`. */\n open?: boolean\n onOpenChange?: (open: boolean) => void\n}\n\nexport function AgnoChat(props: AgnoChatProps): React.ReactElement {\n const client = useMemo(\n () => props.client ?? new AgnoClient({ baseUrl: props.baseUrl ?? '', headers: props.headers }),\n [props.client, props.baseUrl, props.headers],\n )\n\n const [discovered, setDiscovered] = useState<Entity[]>(props.entities ?? [])\n const [selected, setSelected] = useState<Entity | null>(props.defaultEntity ?? null)\n const [discoveryDone, setDiscoveryDone] = useState(Boolean(props.entity || props.entities))\n\n // Discover entities once if none were provided. A controlled `entity` still\n // discovers when a picker is asked for, since the picker needs the list.\n useEffect(() => {\n if ((props.entity && !props.showEntityPicker) || props.entities) return\n let cancelled = false\n setDiscoveryDone(false)\n client.getEntities().then((list) => {\n if (cancelled) return\n setDiscovered(list)\n setSelected((cur) => cur ?? list[0] ?? null)\n setDiscoveryDone(true)\n })\n return () => {\n cancelled = true\n }\n }, [client, props.entity, props.entities, props.showEntityPicker])\n\n const entity = props.entity ?? selected\n const chat = useAgnoChat({ client, entity, userId: props.userId })\n\n // Load the session list whenever the entity changes.\n const { refreshSessions } = chat\n useEffect(() => {\n if (props.showSessions && entity) refreshSessions()\n }, [props.showSessions, entity?.type, entity?.id, refreshSessions])\n\n // Refresh the list once a run finishes (a new session may have appeared).\n useEffect(() => {\n if (props.showSessions && entity && chat.status === 'completed') refreshSessions()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [chat.status])\n\n // Starting a new conversation when the entity changes keeps state coherent.\n const onSelect = (e: Entity) => {\n // Controlled: the parent owns `entity`, so only notify — writing local\n // state here would fight the prop on the next render.\n if (!props.entity) setSelected(e)\n props.onEntityChange?.(e)\n chat.reset()\n }\n\n const cn = props.classNames ?? {}\n const entities = props.entities ?? discovered\n const showPicker = Boolean(props.showEntityPicker)\n const showBadge = !showPicker && !props.hideEntityBadge && Boolean(entity)\n const noEntities = !props.entity && discoveryDone && entities.length === 0\n\n const launcher = props.mode === 'launcher'\n const fullscreen = props.panel === 'fullscreen'\n\n // A full-screen panel covers the page, so the bubble is no longer reachable —\n // the panel closes itself from its own header instead.\n const [selfOpen, setSelfOpen] = useState(props.defaultOpen ?? false)\n const isOpen = props.open ?? selfOpen\n const setOpen = (next: boolean) => {\n if (props.open === undefined) setSelfOpen(next)\n props.onOpenChange?.(next)\n }\n\n const root = (\n <div\n className={cx('agno-root', props.light && 'agno-light', cn.root, props.className)}\n style={\n launcher\n ? { height: '100%', width: '100%', ...props.style }\n : { height: props.height ?? '100%', width: props.width, ...props.style }\n }\n >\n {props.header}\n\n {/* A full-screen panel covers the bubble, so it needs its own way out.\n With the header gone this floats over the top-right of the surface. */}\n {launcher && fullscreen && (\n <button\n type=\"button\"\n className=\"agno-btn agno-btn--ghost agno-btn--icon agno-close-floating\"\n onClick={() => setOpen(false)}\n aria-label=\"Close chat\"\n >\n <Close size={16} />\n </button>\n )}\n\n {noEntities && (\n <div className={cx('agno-banner', cn.banner)}>\n No agents, teams or workflows found at <code>{client.baseUrl || '(no URL)'}</code>. Check the URL is\n correct, that AgentOS is running, and that this origin is in its CORS allowlist\n (<code>cors_allowed_origins</code>).\n </div>\n )}\n\n <div className={cx('agno-main', cn.main)}>\n {props.showSessions && (\n <div className={cx('agno-sidebar', 'agno-sidebar--left', cn.sidebar)}>\n <SessionList\n sessions={chat.sessions}\n activeSessionId={chat.sessionId}\n streamingSessionIds={chat.streamingSessionIds}\n loading={chat.sessionsLoading}\n onSelect={chat.loadSession}\n onDelete={chat.deleteSession}\n onNew={chat.reset}\n classNames={cn}\n />\n </div>\n )}\n <ChatWindow\n chat={chat}\n placeholder={props.placeholder}\n allowFiles={props.allowFiles ?? true}\n compactInput={props.compactInput}\n disabled={!entity}\n renderMarkdown={props.renderMarkdown}\n showErrors={props.showErrors}\n quickPrompts={props.quickPrompts}\n hideFollowups={props.hideFollowups}\n followupsTitle={props.followupsTitle}\n classNames={cn}\n emptyState={\n props.emptyState ??\n (entity ? `Chat with ${entity.name}.` : 'Select an agent, team or workflow to begin.')\n }\n composer={\n showPicker || showBadge ? (\n <ChatInput\n onSend={(message, files) => chat.sendMessage(message, files ? { files } : undefined)}\n onStop={chat.cancel}\n busy={chat.isStreaming}\n disabled={!entity || chat.isPaused}\n placeholder={props.placeholder}\n allowFiles={props.allowFiles ?? true}\n compact={props.compactInput}\n classNames={cn}\n trailing={\n showPicker ? (\n <EntitySelector\n entities={entities}\n value={entity}\n onChange={onSelect}\n disabled={chat.isStreaming}\n classNames={cn}\n />\n ) : (\n <EntityBadge entity={entity} />\n )\n }\n />\n ) : undefined\n }\n />\n </div>\n {props.footer}\n </div>\n )\n\n // Wrapping in a provider (without its own element) lets anything you pass\n // into `header`, `footer` or a custom composer call `useChatContext()`.\n const withContext = (\n <ChatProvider\n chat={chat}\n classNames={cn}\n renderMarkdown={props.renderMarkdown}\n resolveLinkPreview={props.resolveLinkPreview}\n codeCopy={props.codeCopy}\n linkComponent={props.linkComponent}\n as={false}\n >\n {root}\n </ChatProvider>\n )\n\n if (!launcher) return withContext\n\n return (\n <ChatLauncher\n position={props.position}\n offset={props.offset}\n panel={props.panel}\n width={props.width}\n height={props.height}\n label={props.launcherLabel}\n icon={props.launcherIcon}\n open={isOpen}\n onOpenChange={setOpen}\n bubbleWhenOpen={!fullscreen}\n className={props.className}\n >\n {withContext}\n </ChatLauncher>\n )\n}\n","/** Renders a message's reasoning steps in a collapsible timeline. */\n\nimport React, { useState } from 'react'\n\nimport type { ReasoningStep } from '../../core/types'\nimport { ChevronDown } from './icons'\n\nexport function Reasoning({\n steps,\n defaultOpen = false,\n}: {\n steps?: ReasoningStep[]\n defaultOpen?: boolean\n}): React.ReactElement | null {\n const [open, setOpen] = useState(defaultOpen)\n if (!steps || steps.length === 0) return null\n\n return (\n <div className=\"agno-reasoning\">\n <button\n type=\"button\"\n className=\"agno-disclosure__toggle\"\n onClick={() => setOpen((v) => !v)}\n aria-expanded={open}\n >\n <ChevronDown size={16} className=\"agno-disclosure__chev\" />\n <span>\n Reasoning · {steps.length} step{steps.length > 1 ? 's' : ''}\n </span>\n </button>\n {open && (\n <ol className=\"agno-timeline\">\n {steps.map((step, i) => (\n <li key={i} className=\"agno-timeline__item\">\n {step.title && <div className=\"agno-reasoning__title\">{step.title}</div>}\n {step.reasoning && <div className=\"agno-reasoning__text\">{step.reasoning}</div>}\n {step.action && <div className=\"agno-reasoning__meta\">Action: {step.action}</div>}\n {step.result && <div className=\"agno-reasoning__meta\">Result: {step.result}</div>}\n {typeof step.confidence === 'number' && (\n <div className=\"agno-reasoning__meta\">Confidence: {Math.round(step.confidence * 100)}%</div>\n )}\n </li>\n ))}\n </ol>\n )}\n </div>\n )\n}\n","/**\n * Renders the nested runs of a team or workflow turn — each team member's\n * response (or each workflow step's executor) as a collapsible card with the\n * member's name, streamed content and tool calls.\n */\n\nimport React, { useState } from 'react'\n\nimport type { SubRun } from '../../core/types'\nimport { ChevronDown } from './icons'\nimport type { RenderMarkdown } from './Markdown'\nimport { Markdown } from './Markdown'\nimport { ToolCalls } from './ToolCalls'\n\nfunction statusDot(status: SubRun['status']): string {\n if (status === 'error') return 'error'\n if (status === 'completed') return 'done'\n return 'running'\n}\n\nfunction MemberCard({ member, renderMarkdown }: { member: SubRun; renderMarkdown?: RenderMarkdown }): React.ReactElement {\n const [open, setOpen] = useState(true)\n const label = member.kind === 'executor' ? 'Step executor' : 'Member'\n\n return (\n <div className=\"agno-member\">\n <button type=\"button\" className=\"agno-member__head\" onClick={() => setOpen((v) => !v)} aria-expanded={open}>\n <span className={`agno-member__dot agno-member__dot--${statusDot(member.status)}`} aria-hidden />\n <span className=\"agno-member__name\">{member.name ?? member.agent_id ?? label}</span>\n <span className=\"agno-member__kind\">{label}</span>\n <ChevronDown size={16} className=\"agno-member__chev\" />\n </button>\n {open && (\n <div className=\"agno-member__body\">\n <ToolCalls tools={member.tool_calls} />\n {member.content && (\n <div className=\"agno-member__content\">\n {renderMarkdown ? renderMarkdown(member.content) : <Markdown content={member.content} />}\n </div>\n )}\n </div>\n )}\n </div>\n )\n}\n\nexport function MemberResponses({\n members,\n renderMarkdown,\n title = 'Member responses',\n}: {\n members?: SubRun[]\n renderMarkdown?: RenderMarkdown\n title?: string\n}): React.ReactElement | null {\n if (!members || members.length === 0) return null\n return (\n <div className=\"agno-members\">\n <div className=\"agno-members__title\">\n {title} ({members.length})\n </div>\n {members.map((m) => (\n <MemberCard key={m.run_id} member={m} renderMarkdown={renderMarkdown} />\n ))}\n </div>\n )\n}\n","/**\n * Renders the steps of a workflow run as an ordered progress list, each with a\n * status indicator, the step name, and its collapsible output.\n */\n\nimport React, { useState } from 'react'\n\nimport type { WorkflowStep } from '../../core/types'\nimport { ChevronDown } from './icons'\nimport type { RenderMarkdown } from './Markdown'\nimport { Markdown } from './Markdown'\n\nfunction StepRow({ step, renderMarkdown }: { step: WorkflowStep; renderMarkdown?: RenderMarkdown }): React.ReactElement {\n const [open, setOpen] = useState(false)\n const hasBody = Boolean(step.content || step.error)\n\n return (\n <div className={`agno-step agno-step--${step.status}`}>\n <button\n type=\"button\"\n className=\"agno-step__head\"\n onClick={() => hasBody && setOpen((v) => !v)}\n aria-expanded={open}\n >\n <span className={`agno-step__icon agno-step__icon--${step.status}`} aria-hidden>\n {step.status === 'completed' ? '✓' : step.status === 'error' ? '!' : '●'}\n </span>\n <span className=\"agno-step__name\">{step.name ?? step.key}</span>\n {hasBody && <ChevronDown size={16} className=\"agno-step__chev\" />}\n </button>\n {open && hasBody && (\n <div className=\"agno-step__body\">\n {step.error ? (\n <div className=\"agno-step__error\">{step.error}</div>\n ) : step.content ? (\n renderMarkdown ? renderMarkdown(step.content) : <Markdown content={step.content} />\n ) : null}\n </div>\n )}\n </div>\n )\n}\n\nexport function WorkflowSteps({\n steps,\n renderMarkdown,\n title = 'Steps',\n}: {\n steps?: WorkflowStep[]\n renderMarkdown?: RenderMarkdown\n title?: string\n}): React.ReactElement | null {\n if (!steps || steps.length === 0) return null\n return (\n <div className=\"agno-steps\">\n <div className=\"agno-steps__title\">\n {title} ({steps.length})\n </div>\n <div className=\"agno-steps__list\">\n {steps.map((s) => (\n <StepRow key={s.key} step={s} renderMarkdown={renderMarkdown} />\n ))}\n </div>\n </div>\n )\n}\n","/** A live status line showing what the run is currently doing. */\n\nimport React from 'react'\n\nimport type { ChatStatus } from '../../core/types'\nimport { GridLoader } from './icons'\n\nexport function StatusIndicator({\n status,\n activity,\n}: {\n status: ChatStatus\n activity?: string | null\n}): React.ReactElement | null {\n if (status !== 'streaming' && status !== 'paused') return null\n const label = activity ?? (status === 'paused' ? 'Waiting for input' : 'Working...')\n\n return (\n <div className={`agno-status agno-status--${status}`} role=\"status\" aria-live=\"polite\">\n <GridLoader />\n <span className=\"agno-status__label\">{label}</span>\n </div>\n )\n}\n","/**\n * A developer-facing live feed of run events. Consecutive repeats of the same\n * event (e.g. the stream of `RunContent` deltas) are folded into a single row\n * with a count, and each row is labelled with the agent/team/workflow it came\n * from — so a streaming run reads as one \"RunContent ×N\" line, not hundreds.\n */\n\nimport React, { useEffect, useMemo, useRef } from 'react'\n\nimport { activityLabel } from '../../core/events'\nimport type { RunEventData } from '../../core/types'\n\ninterface FoldedEvent {\n event: string\n source?: string\n count: number\n created_at?: number\n detail?: string | null\n}\n\nfunction sourceOf(e: RunEventData): string | undefined {\n return (\n (e.agent_name as string) ||\n (e.team_name as string) ||\n (e.workflow_name as string) ||\n (e.agent_id as string) ||\n (e.team_id as string) ||\n (e.workflow_id as string) ||\n undefined\n )\n}\n\n/** Merge consecutive events that share the same name + source into one row. */\nfunction fold(events: RunEventData[]): FoldedEvent[] {\n const rows: FoldedEvent[] = []\n for (const e of events) {\n const name = String(e.event)\n const source = sourceOf(e)\n const last = rows[rows.length - 1]\n if (last && last.event === name && last.source === source) {\n last.count += 1\n last.created_at = e.created_at ?? last.created_at\n continue\n }\n rows.push({ event: name, source, count: 1, created_at: e.created_at, detail: activityLabel(e) })\n }\n return rows\n}\n\nexport function EventLog({\n events,\n autoScroll = true,\n maxHeight = 240,\n}: {\n events: RunEventData[]\n autoScroll?: boolean\n maxHeight?: number\n}): React.ReactElement {\n const ref = useRef<HTMLDivElement>(null)\n const rows = useMemo(() => fold(events), [events])\n\n useEffect(() => {\n if (autoScroll && ref.current) ref.current.scrollTop = ref.current.scrollHeight\n }, [rows, autoScroll])\n\n return (\n <div className=\"agno-eventlog\" ref={ref} style={{ maxHeight }}>\n {rows.length === 0 && <div className=\"agno-eventlog__empty\">No events yet.</div>}\n {rows.map((row, i) => (\n <div key={i} className=\"agno-eventlog__row\">\n <span className=\"agno-eventlog__name\">{row.event}</span>\n {row.count > 1 && <span className=\"agno-eventlog__count\">×{row.count}</span>}\n {row.source && <span className=\"agno-eventlog__source\">{row.source}</span>}\n {row.created_at && (\n <span className=\"agno-eventlog__time\">\n {new Date(row.created_at * 1000).toLocaleTimeString()}\n </span>\n )}\n </div>\n ))}\n </div>\n )\n}\n"]}
|