{"version":3,"sources":["../../src/hooks/useSoma.ts","../../src/components/SomaChat.tsx","../../src/components/SomaCopilot.tsx","../../src/components/SomaConversationList.tsx","../../src/components/SomaFileBrowser.tsx","../../src/components/SomaFileViewer.tsx","../../src/components/SomaSkillEditor.tsx","../../src/components/AgentSkillPanel.tsx"],"names":["ws","useState","useRef","useCallback","input","useEffect","thinkingOpen","jsx","jsxs","S"],"mappings":"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","file":"index.mjs","sourcesContent":["'use client'\n\nimport { useState, useRef, useEffect, useCallback } from 'react'\nimport type { UseSomaOptions, UseSomaReturn, SomaMessage, SomaStreamEvent } from '../types'\n\nexport function useSoma(options: UseSomaOptions): UseSomaReturn {\n  const {\n    agentId,\n    conversationId = `dm:${agentId}`,\n    apiKey,\n    baseUrl = '',\n    onDelta, onThinking, onTool, onDone, onCancelled, onError,\n  } = options\n\n  const wsRef = useRef<WebSocket | null>(null)\n  const readyRef = useRef(false)\n  const pendingRef = useRef<string[]>([])\n  const optionsRef = useRef(options)\n  optionsRef.current = options\n\n  const [messages, setMessages] = useState<SomaMessage[]>([])\n  const [isConnected, setIsConnected] = useState(false)\n  const [isStreaming, setIsStreaming] = useState(false)\n  const [streamContent, setStreamContent] = useState('')\n  const streamRef = useRef('')\n  const historyLoaded = useRef(false)\n\n  const wsUrl = baseUrl\n    ? `${baseUrl.replace('https', 'wss').replace('http', 'ws')}${options.wsPath || '/agent-ws'}`\n    : `${typeof window !== 'undefined' && window.location.protocol === 'https:' ? 'wss' : 'ws'}://${typeof window !== 'undefined' ? window.location.host : 'localhost'}${options.wsPath || '/agent-ws'}`\n\n  const contentRef = useRef('')\n  const thinkingRef = useRef('')\n\n  const connect = useCallback(() => {\n    if (wsRef.current?.readyState === WebSocket.OPEN) return\n    const ws = new WebSocket(wsUrl)\n    // Ensure we receive ArrayBuffer (not Blob) for binary frames\n    ws.binaryType = 'arraybuffer'\n\n    ws.onopen = () => {\n      console.log('[useSoma] ws open → sending init')\n      ws.send(JSON.stringify({ type: 'init', uid: agentId, cid: conversationId, token: apiKey || '' }))\n    }\n\n    ws.onmessage = (event) => {\n      try {\n        // Handle text, ArrayBuffer, and Blob WebSocket messages\n        let raw: string\n        if (typeof event.data === 'string') {\n          raw = event.data\n        } else if (event.data instanceof ArrayBuffer) {\n          raw = new TextDecoder().decode(event.data)\n        } else if (event.data instanceof Blob) {\n          // Blob fallback — should not happen with binaryType='arraybuffer',\n          // but handle it gracefully instead of failing silently.\n          event.data.text().then((text: string) => {\n            processMessage(text, ws)\n          }).catch(() => {})\n          return\n        } else {\n          console.warn('[useSoma] unknown message type:', typeof event.data, event.data)\n          return\n        }\n        processMessage(raw, ws)\n      } catch (e) {\n        console.error('[useSoma] onmessage error:', e, 'raw type:', typeof event.data)\n      }\n    }\n\n    function processMessage(raw: string, ws: WebSocket) {\n      const d: SomaStreamEvent = JSON.parse(raw)\n      switch (d.type) {\n        case 'ready':\n          readyRef.current = true\n          setIsConnected(true)\n          console.log('[useSoma] ← ready, pending:', pendingRef.current.length)\n          for (const t of pendingRef.current) {\n            ws.send(JSON.stringify({ type: 'prompt', text: t }))\n          }\n          pendingRef.current = []\n          break\n        case 'thinking_start':\n          setIsStreaming(true)\n          thinkingRef.current = ''\n          break\n        case 'thinking':\n          thinkingRef.current += d.text\n          onThinking?.(d.text)\n          break\n        case 'thinking_end':\n          break\n        case 'delta':\n          streamRef.current += d.text\n          contentRef.current = streamRef.current\n          setStreamContent(streamRef.current)\n          onDelta?.(d.text)\n          break\n        case 'tool':\n          onTool?.(d.name, d.input)\n          break\n        case 'done': {\n          setIsStreaming(false)\n          // contentRef mirrors streamRef — always synchronous, never stale.\n          const content = contentRef.current || streamRef.current\n          console.log('[useSoma] ← done, content length:', content.length, 'contentRef:', !!contentRef.current, 'streamRef:', !!streamRef.current)\n          const thinking = thinkingRef.current.trim() || undefined\n          console.log('[useSoma] ← done, content:', content.length, 'thinking:', (thinking || '').length, 'contentRef:', !!contentRef.current)\n          if (content || thinking) {\n            setMessages(prev => [...prev, {\n              id: crypto.randomUUID(),\n              role: 'assistant',\n              content: content || '(sin respuesta)',\n              thinking,\n              timestamp: new Date(),\n            }])\n            contentRef.current = ''\n            streamRef.current = ''\n            thinkingRef.current = ''\n            setStreamContent('')\n          } else {\n            console.warn('[useSoma] ← done but NO content accumulated — message lost')\n          }\n          onDone?.()\n          break\n        }\n        case 'cancelled': {\n          setIsStreaming(false)\n          const content = contentRef.current || streamRef.current || ''\n          if (content) {\n            setMessages(prev => [...prev, {\n              id: crypto.randomUUID(),\n              role: 'assistant',\n              content: content + '\\n\\n_⏹️ Cancelado_',\n              thinking: thinkingRef.current.trim() || undefined,\n              timestamp: new Date(),\n            }])\n            contentRef.current = ''\n            streamRef.current = ''\n            thinkingRef.current = ''\n            setStreamContent('')\n          }\n          onCancelled?.()\n          break\n        }\n        case 'error':\n          setIsStreaming(false)\n          console.error('[useSoma] ← error:', d.message)\n          onError?.(d.message)\n          break\n      }\n    }\n\n    ws.onclose = () => { setIsConnected(false); console.log('[useSoma] ws closed') }\n    ws.onerror = () => { console.error('[useSoma] ws error'); onError?.('Connection error') }\n    wsRef.current = ws\n  }, [wsUrl, agentId, conversationId])\n\n  useEffect(() => {\n    // Cargar historial antes de conectar\n    if (!historyLoaded.current && apiKey && conversationId) {\n      historyLoaded.current = true\n      const api = baseUrl ? `${baseUrl}/api/conversations/${encodeURIComponent(conversationId)}` : ''\n      if (api) {\n        fetch(api, { headers: { Authorization: `Bearer ${apiKey}` } })\n          .then(r => r.json())\n          .then(d => {\n            if (d.messages?.length) setMessages(d.messages.map((m: any) => ({\n              id: m.id || crypto.randomUUID(),\n              role: m.role,\n              content: m.content,\n              thinking: m.thinking,\n              tools: m.tools,\n              timestamp: new Date(m.timestamp || Date.now()),\n            })))\n          })\n          .catch(() => {})\n      }\n    }\n    connect()\n    return () => { wsRef.current?.close() }\n  }, [agentId, conversationId])\n\n  const send = useCallback((text: string) => {\n    setMessages(prev => [...prev, {\n      id: crypto.randomUUID(), role: 'user', content: text, timestamp: new Date(),\n    }])\n    if (readyRef.current && wsRef.current?.readyState === WebSocket.OPEN) {\n      wsRef.current.send(JSON.stringify({ type: 'prompt', text }))\n    } else {\n      pendingRef.current.push(text)\n      connect()\n    }\n  }, [connect])\n\n  const cancel = useCallback(() => {\n    wsRef.current?.send(JSON.stringify({ type: 'cancel' }))\n  }, [])\n\n  const reconnect = useCallback(() => {\n    wsRef.current?.close()\n    connect()\n  }, [connect])\n\n  return { send, cancel, isConnected, isStreaming, messages, streamContent, reconnect }\n}\n","'use client'\n\nimport React, { useState, useRef, useEffect, useCallback } from 'react'\nimport { useSoma } from '../hooks/useSoma'\n\n// ── Types ──\n\nexport interface SomaChatProps {\n  agentId: string\n  conversationId?: string\n  apiKey?: string\n  baseUrl?: string\n  placeholder?: string\n  welcomeMessage?: string\n  /** CSS class applied to root element */\n  className?: string\n  /** Quick color overrides — for full control use CSS variables on parent */\n  colors?: Partial<SomaChatColors>\n  /** Custom render functions for specific parts */\n  renderMessage?: (msg: SomaChatMessage, defaultRender: React.ReactNode) => React.ReactNode\n  renderInput?: (defaultRender: React.ReactNode) => React.ReactNode\n}\n\nexport interface SomaChatColors {\n  bg: string\n  text: string\n  textMuted: string\n  userBubble: string\n  userBubbleText: string\n  agentBubble: string\n  agentBubbleText: string\n  thinkingBg: string\n  thinkingText: string\n  thinkingBorder: string\n  toolBg: string\n  toolText: string\n  toolBorder: string\n  resultBg: string\n  resultText: string\n  resultBorder: string\n  inputBg: string\n  inputBorder: string\n  primary: string\n  primaryText: string\n  font: string\n  radius: string\n}\n\nexport interface SomaChatMessage {\n  id: string; role: 'user' | 'assistant' | 'system'; content: string; thinking?: string; timestamp: Date\n}\n\n// ── Default colors (ZEA design tokens) ──\n\nconst defaultColors: SomaChatColors = {\n  bg: 'var(--soma-bg, transparent)',\n  text: 'var(--soma-text, var(--zea-bc, #e6edf3))',\n  textMuted: 'var(--soma-text-muted, color-mix(in oklch, var(--zea-bc, #e6edf3) 50%, transparent))',\n  userBubble: 'var(--soma-user-bubble, var(--zea-p, #16a34a))',\n  userBubbleText: 'var(--soma-user-text, var(--zea-pc, #fff))',\n  agentBubble: 'var(--soma-agent-bubble, var(--zea-b1, #2a3040))',\n  agentBubbleText: 'var(--soma-agent-text, var(--zea-bc, #e6edf3))',\n  thinkingBg: 'var(--soma-thinking-bg, color-mix(in oklch, #7c3aed 8%, transparent))',\n  thinkingText: 'var(--soma-thinking-text, oklch(70% 0.2 292))',\n  thinkingBorder: 'var(--soma-thinking-border, color-mix(in oklch, #7c3aed 20%, transparent))',\n  toolBg: 'var(--soma-tool-bg, color-mix(in oklch, #7c3aed 10%, transparent))',\n  toolText: 'var(--soma-tool-text, oklch(65% 0.2 292))',\n  toolBorder: 'var(--soma-tool-border, color-mix(in oklch, #7c3aed 20%, transparent))',\n  resultBg: 'var(--soma-result-bg, color-mix(in oklch, var(--zea-su, #10b981) 10%, transparent))',\n  resultText: 'var(--soma-result-text, oklch(60% 0.14 180))',\n  resultBorder: 'var(--soma-result-border, color-mix(in oklch, var(--zea-su, #10b981) 25%, transparent))',\n  inputBg: 'var(--soma-input-bg, var(--zea-b2, #1e2432))',\n  inputBorder: 'var(--soma-input-border, var(--zea-b2, #1e2432))',\n  primary: 'var(--soma-primary, var(--zea-p, #16a34a))',\n  primaryText: 'var(--soma-primary-text, var(--zea-pc, #fff))',\n  font: 'var(--soma-font, var(--zea-sans, system-ui, sans-serif))',\n  radius: 'var(--soma-radius, 12px)',\n}\n\n// ── Streaming blocks ──\n\ntype StreamBlock =\n  | { type: 'thinking_start' }\n  | { type: 'thinking_delta'; text: string }\n  | { type: 'thinking_end' }\n  | { type: 'text_delta'; text: string }\n  | { type: 'tool_call'; name: string; input: unknown }\n  | { type: 'tool_result'; content: string }\n\nfunction pushBlock(blocks: StreamBlock[], b: StreamBlock): StreamBlock[] {\n  const last = blocks[blocks.length - 1]\n  if (b.type === 'thinking_delta' && last?.type === 'thinking_delta')\n    return [...blocks.slice(0, -1), { type: 'thinking_delta', text: last.text + b.text }]\n  if (b.type === 'text_delta' && last?.type === 'text_delta')\n    return [...blocks.slice(0, -1), { type: 'text_delta', text: last.text + b.text }]\n  return [...blocks, b]\n}\n\nfunction escapeHtml(s: string): string {\n  return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')\n}\n\nfunction renderMarkdown(text: string): string {\n  // 1. Extract code blocks BEFORE escaping (avoid double-escape)\n  const codeBlocks: string[] = []\n  let html = text.replace(/```(\\w*)\\n?([\\s\\S]*?)```/g, (_m, lang, code) => {\n    codeBlocks.push(\n      `<pre><code class=\"soma-code${lang ? ` language-${lang}` : ''}\">${escapeHtml(code)}</code></pre>`\n    )\n    return `\\x00CODEBLOCK_${codeBlocks.length - 1}\\x00`\n  })\n\n  // 2. Escape remaining HTML\n  html = escapeHtml(html)\n\n  // 3. Inline code\n  html = html.replace(/`([^`]+)`/g, '<code class=\"soma-code\">$1</code>')\n\n  // 4. Bold and italic\n  html = html.replace(/\\*\\*(.+?)\\*\\*/g, '<strong>$1</strong>')\n  html = html.replace(/\\*(.+?)\\*/g, '<em>$1</em>')\n\n  // 5. Newlines\n  html = html.replace(/\\n/g, '<br/>')\n\n  // 6. Restore code blocks\n  html = html.replace(/\\x00CODEBLOCK_(\\d+)\\x00/g, (_m, i) => codeBlocks[parseInt(i)])\n\n  return html\n}\n\n// ── Component ──\n\nexport function SomaChat({\n  agentId, conversationId, apiKey, baseUrl,\n  placeholder = 'Mensaje para el agente...',\n  welcomeMessage = '¡Hola! Soy tu agente. ¿En qué puedo ayudarte?',\n  className = '', colors: colorsOverride, renderMessage, renderInput,\n}: SomaChatProps) {\n  const c = { ...defaultColors, ...colorsOverride }\n  const css = (o: Record<string, string|number>) => o as React.CSSProperties\n\n  const [streamBlocks, setStreamBlocks] = useState<StreamBlock[]>([])\n  const [thinkingOpen, setThinkingOpen] = useState(true)\n  const streamRef = useRef<StreamBlock[]>([])\n\n  const { send, cancel, isStreaming, messages } = useSoma({\n    agentId, conversationId, apiKey, baseUrl,\n    onDelta: useCallback((text: string) => {\n      streamRef.current = pushBlock(streamRef.current, { type: 'text_delta', text })\n      setStreamBlocks([...streamRef.current])\n    }, []),\n    onThinking: useCallback((text: string) => {\n      streamRef.current = pushBlock(streamRef.current, { type: 'thinking_delta', text })\n      setStreamBlocks([...streamRef.current])\n    }, []),\n    onTool: useCallback((name: string, input: unknown) => {\n      streamRef.current = pushBlock(streamRef.current, { type: 'tool_call', name, input })\n      setStreamBlocks([...streamRef.current])\n    }, []),\n    onDone: useCallback(() => { streamRef.current = []; setStreamBlocks([]) }, []),\n    onCancelled: useCallback(() => { streamRef.current = []; setStreamBlocks([]) }, []),\n  })\n\n  const [input, setInput] = useState('')\n  const [cancelling, setCancelling] = useState(false)\n  const feedRef = useRef<HTMLDivElement>(null)\n\n  useEffect(() => {\n    feedRef.current?.scrollTo({ top: feedRef.current.scrollHeight, behavior: 'smooth' })\n  }, [messages, streamBlocks])\n  useEffect(() => { if (!isStreaming) setCancelling(false) }, [isStreaming])\n\n  const handleSend = () => { const t = input.trim(); if (t && !isStreaming) { send(t); setInput('') } }\n  const handleCancel = () => { setCancelling(true); cancel() }\n\n  // Per-message thinking open state (Record avoids TSX generic ambiguity)\n  const [thinkingOpenIds, setThinkingOpenIds] = useState<Record<string, boolean>>({})\n  const toggleMsgThinking = useCallback((id: string) => {\n    setThinkingOpenIds(prev => ({ ...prev, [id]: !prev[id] }))\n  }, [])\n\n  // ── Message bubble ──\n  const defaultMessage = (msg: SomaChatMessage) => {\n    const thinkingOpen = !!thinkingOpenIds[msg.id]\n    return (\n    <div key={msg.id} className=\"soma-msg\" style={css({ display:'flex', flexDirection:'column', alignItems: msg.role==='user'?'flex-end':'flex-start', gap:4 })}>\n      {/* Thinking block (persisted) */}\n      {msg.thinking && (\n        <div className=\"soma-thinking-persisted\" style={css({ maxWidth:'85%', borderRadius: c.radius, overflow:'hidden' })}>\n          <button onClick={() => toggleMsgThinking(msg.id)} style={css({\n            display:'flex', alignItems:'center', gap:6, width:'100%', padding:'4px 10px',\n            border:'none', cursor:'pointer', background:c.thinkingBg, color:c.thinkingText,\n            fontSize:10, fontFamily:c.font, fontWeight:600, borderRadius: thinkingOpen ? `${c.radius} ${c.radius} 0 0` : c.radius,\n          })}>\n            <span style={css({ fontSize:10 })}>{thinkingOpen ? '▼' : '▶'}</span>\n            <span style={css({ padding:'0px 5px', borderRadius:3, background:c.thinkingBorder, fontSize:9 })}>thinking</span>\n          </button>\n          {thinkingOpen && (\n            <div style={css({\n              padding:'6px 10px', background:c.thinkingBg, borderLeft:`2px solid ${c.thinkingBorder}`,\n              fontSize:11, lineHeight:1.5, color:c.thinkingText, whiteSpace:'pre-wrap', fontStyle:'italic',\n            })}>{msg.thinking}</div>\n          )}\n        </div>\n      )}\n      {/* Text bubble */}\n      <div className=\"soma-bubble\" style={css({\n        maxWidth:'85%', padding:'10px 14px', borderRadius: c.radius, fontSize:13, lineHeight:1.55,\n        background: msg.role==='user' ? c.userBubble : c.agentBubble,\n        color: msg.role==='user' ? c.userBubbleText : c.agentBubbleText,\n        borderBottomRightRadius: msg.role==='user' ? '4px' : c.radius,\n        borderBottomLeftRadius: msg.role!=='user' ? '4px' : c.radius,\n      })}>\n        <div className=\"soma-md\" dangerouslySetInnerHTML={{ __html: renderMarkdown(msg.content) }} />\n      </div>\n    </div>\n  )}\n\n  // ── Input area ──\n  const defaultInput = (\n    <div className=\"soma-input-area\" style={css({ padding:'12px 16px', borderTop:`1px solid ${c.inputBorder}`, flexShrink:0 })}>\n      <div className=\"soma-input-row\" style={css({\n        display:'flex', alignItems:'flex-end', gap:8, background:c.inputBg,\n        border:`1px solid ${c.inputBorder}`, borderRadius:c.radius, padding:'8px 12px',\n      })}>\n        <textarea value={input} onChange={e => setInput(e.target.value)}\n          onKeyDown={e => { if (e.key==='Enter' && !e.shiftKey) { e.preventDefault(); handleSend() } }}\n          placeholder={isStreaming ? 'El agente está respondiendo...' : placeholder}\n          rows={2} disabled={isStreaming}\n          className=\"soma-textarea\" style={css({\n            flex:1, resize:'none', border:'none', outline:'none', background:'transparent',\n            color:c.text, fontSize:13, fontFamily:c.font, opacity: isStreaming ? 0.5 : 1,\n          })} />\n        {isStreaming ? (\n          <button onClick={handleCancel} disabled={cancelling} className=\"soma-btn-cancel\" style={css({\n            width:32, height:32, borderRadius:'50%', border:'none',\n            background: cancelling ? c.inputBorder : c.primary,\n            color: cancelling ? c.textMuted : c.primaryText, cursor: cancelling?'default':'pointer',\n            display:'flex', alignItems:'center', justifyContent:'center', fontSize:14, flexShrink:0,\n          })}>{cancelling ? '⏳' : '■'}</button>\n        ) : (\n          <button onClick={handleSend} className=\"soma-btn-send\" style={css({\n            width:32, height:32, borderRadius:'50%', border:'none',\n            background: input.trim() ? c.primary : c.inputBorder, color: c.primaryText,\n            cursor: input.trim()?'pointer':'default', display:'flex', alignItems:'center',\n            justifyContent:'center', fontSize:16, flexShrink:0, opacity: input.trim()?1:0.4,\n          })}>↑</button>\n        )}\n      </div>\n    </div>\n  )\n\n  return (\n    <div className={`soma-root ${className}`} style={css({ display:'flex', flexDirection:'column', height:'100%', background:c.bg, fontFamily:c.font })}>\n      {/* Messages feed */}\n      <div ref={feedRef} className=\"soma-feed\" style={css({ flex:1, overflowY:'auto', padding:'16px', display:'flex', flexDirection:'column', gap:12 })}>\n        {messages.length === 0 && !isStreaming && (\n          <p className=\"soma-welcome\" style={css({ textAlign:'center', fontSize:13, color:c.textMuted, marginTop:'40%' })}>{welcomeMessage}</p>\n        )}\n        {messages.map(msg => renderMessage ? renderMessage(msg, defaultMessage(msg)) : defaultMessage(msg))}\n        {streamBlocks.length > 0 && (\n          <StreamingView blocks={streamBlocks} colors={c} thinkingOpen={thinkingOpen} onToggleThinking={() => setThinkingOpen(o => !o)} />\n        )}\n        {isStreaming && streamBlocks.length === 0 && (\n          <div className=\"soma-thinking-indicator\" style={css({ display:'flex', alignItems:'center', gap:8, padding:'8px 0' })}>\n            <div style={css({ width:6, height:6, borderRadius:'50%', background:c.thinkingText, animation:'soma-pulse 1.2s ease-in-out infinite' })} />\n            <span style={css({ fontSize:12, color:c.textMuted })}>Pensando...</span>\n          </div>\n        )}\n      </div>\n\n      {/* Input */}\n      {renderInput ? renderInput(defaultInput) : defaultInput}\n\n      <style>{'@keyframes soma-pulse{0%,100%{opacity:1}50%{opacity:0.3}}.soma-md,.soma-md *{color:inherit!important}.soma-code{background:var(--soma-code-bg,var(--zea-b2,#1e2432));color:var(--soma-text,#e6edf3);padding:1px 5px;border-radius:4px;font-size:0.9em}.soma-md pre{background:var(--soma-code-bg,var(--zea-b2,#1e2432));color:var(--soma-text,#e6edf3);padding:12px;border-radius:8px;overflow-x:auto;font-size:12px;line-height:1.5;margin:8px 0}.soma-md pre code{background:transparent;padding:0;font-size:inherit}'}</style>\n    </div>\n  )\n}\n\n// ── Streaming View ──\n\nfunction StreamingView({ blocks, colors: c, thinkingOpen, onToggleThinking }: {\n  blocks: StreamBlock[]; colors: SomaChatColors; thinkingOpen: boolean; onToggleThinking: () => void\n}) {\n  const css = (o: Record<string, string|number>) => o as React.CSSProperties\n  const hasThinking = blocks.some(b => b.type.startsWith('thinking'))\n  const textBlocks = blocks.filter(b => b.type === 'text_delta')\n  const lastText = textBlocks[textBlocks.length - 1]?.text || ''\n\n  return (\n    <div className=\"soma-stream\" style={css({ display:'flex', flexDirection:'column', gap:8 })}>\n      {hasThinking && (\n        <div className=\"soma-thinking\" style={css({ borderRadius: c.radius, overflow:'hidden' })}>\n          <button onClick={onToggleThinking} className=\"soma-thinking-toggle\" style={css({\n            display:'flex', alignItems:'center', gap:6, width:'100%', padding:'6px 12px',\n            border:'none', cursor:'pointer', background:c.thinkingBg, color:c.thinkingText,\n            fontSize:11, fontFamily:c.font, fontWeight:600,\n          })}>\n            <span>{thinkingOpen ? '▼' : '▶'}</span>\n            <span style={css({ padding:'1px 6px', borderRadius:4, background:c.thinkingBorder, fontSize:10 })}>thinking</span>\n          </button>\n          {thinkingOpen && (\n            <div className=\"soma-thinking-body\" style={css({\n              padding:'8px 12px', background:c.thinkingBg, borderLeft:`2px solid ${c.thinkingBorder}`,\n              fontSize:12, lineHeight:1.5, color:c.thinkingText, whiteSpace:'pre-wrap', fontStyle:'italic',\n            })}>\n              {blocks.filter(b => b.type==='thinking_delta').map(b => b.text).join('')}\n            </div>\n          )}\n        </div>\n      )}\n\n      {blocks.filter(b => b.type==='tool_call').map((b, i) => (\n        <div key={i} className=\"soma-tool\" style={css({\n          display:'flex', alignItems:'center', gap:8, padding:'6px 12px', borderRadius:8,\n          background:c.toolBg, border:`1px solid ${c.toolBorder}`, fontSize:12, color:c.toolText,\n        })}>\n          <span style={css({ fontWeight:600 })}>🔧 {b.name}</span>\n          <span style={css({ opacity:0.7, overflow:'hidden', textOverflow:'ellipsis', whiteSpace:'nowrap', flex:1 })}>\n            {typeof b.input==='string' ? b.input : JSON.stringify(b.input)}\n          </span>\n        </div>\n      ))}\n\n      {blocks.filter(b => b.type==='tool_result').map((b, i) => (\n        <div key={i} className=\"soma-result\" style={css({\n          padding:'8px 12px', borderRadius:8, background:c.resultBg, border:`1px solid ${c.resultBorder}`,\n          fontSize:11, lineHeight:1.5, maxHeight:150, overflowY:'auto', color:c.resultText,\n          whiteSpace:'pre-wrap', fontFamily:'monospace',\n        })}>{b.content.slice(0, 2000)}</div>\n      ))}\n\n      {lastText && (\n        <div className=\"soma-bubble soma-stream-text\" style={css({\n          padding:'10px 14px', borderRadius:c.radius, background:c.agentBubble, color:c.agentBubbleText,\n          fontSize:13, lineHeight:1.55, maxWidth:'85%', borderBottomLeftRadius:'4px',\n        })}>\n          <div className=\"soma-md\" dangerouslySetInnerHTML={{ __html: renderMarkdown(lastText) }} />\n        </div>\n      )}\n    </div>\n  )\n}\n","'use client'\n\nimport React, { useState } from 'react'\nimport { SomaChat } from './SomaChat'\n\ninterface SomaCopilotProps {\n  agentId: string\n  apiKey?: string\n  baseUrl?: string\n  open?: boolean\n  onClose?: () => void\n}\n\nexport function SomaCopilot({ agentId, apiKey, baseUrl, open = false, onClose }: SomaCopilotProps) {\n  const [isOpen, setIsOpen] = useState(open)\n  const [width, setWidth] = useState(440)\n\n  const toggle = () => {\n    setIsOpen(!isOpen)\n    if (isOpen) onClose?.()\n  }\n\n  if (!isOpen) {\n    return (\n      <button onClick={toggle}\n        className=\"fixed bottom-6 right-6 w-14 h-14 rounded-full bg-blue-600 text-white shadow-lg hover:bg-blue-700 z-50 flex items-center justify-center text-2xl\">\n        💬\n      </button>\n    )\n  }\n\n  return (\n    <>\n      <div className=\"fixed inset-0 z-40 bg-black/10\" onClick={toggle} />\n      <aside className=\"fixed right-0 top-0 h-full z-50 flex flex-col border-l bg-white shadow-xl\"\n        style={{ width: `${width}px` }}>\n        <div className=\"flex items-center gap-2 p-3 border-b\">\n          <span className=\"font-semibold text-sm flex-1\">Copilot</span>\n          <button onClick={() => {}} className=\"p-1 hover:bg-gray-100 rounded\" title=\"Refresh\">↻</button>\n          <button onClick={toggle} className=\"p-1 hover:bg-gray-100 rounded\" title=\"Close\">✕</button>\n        </div>\n        <SomaChat agentId={agentId} apiKey={apiKey} baseUrl={baseUrl} />\n      </aside>\n    </>\n  )\n}\n","'use client'\n\nimport React from 'react'\n\ninterface SomaConversationListProps {\n  conversations: Array<{ id: string; title: string; lastMessageAt: string; messageCount: number }>\n  activeId?: string\n  onSelect?: (id: string) => void\n  onNew?: (agentId: string) => void\n  agents?: Array<{ id: string; name: string }>\n}\n\nexport function SomaConversationList({ conversations, activeId, onSelect, onNew, agents = [] }: SomaConversationListProps) {\n  return (\n    <div className=\"flex flex-col gap-1 p-2\">\n      {/* New conversation button — always visible when onNew is provided */}\n      {onNew && (\n        <button\n          onClick={() => onNew(agents[0]?.id || '')}\n          className=\"w-full text-left px-3 py-2 rounded-lg text-sm font-medium flex items-center gap-2 transition-colors\"\n          style={{\n            color: '#7c3aed',\n            border: '1px dashed #7c3aed40',\n            background: '#7c3aed0a',\n          }}\n          onMouseEnter={e => { e.currentTarget.style.background = '#7c3aed18' }}\n          onMouseLeave={e => { e.currentTarget.style.background = '#7c3aed0a' }}\n        >\n          <span className=\"text-lg leading-none\">+</span>\n          <span>Nueva conversación</span>\n        </button>\n      )}\n      {conversations.length === 0 && (\n        <p className=\"text-xs text-gray-400 text-center py-4\">No conversations yet</p>\n      )}\n      {conversations.map(conv => (\n        <button key={conv.id} onClick={() => onSelect?.(conv.id)}\n          className={`w-full text-left px-3 py-2 rounded-lg text-sm hover:bg-gray-100 flex flex-col ${\n            activeId === conv.id ? 'bg-blue-50' : ''\n          }`}>\n          <span className=\"font-medium truncate\">{conv.title || 'Nueva conversación'}</span>\n          <span className=\"text-xs text-gray-400\">{conv.messageCount} mensajes</span>\n        </button>\n      ))}\n    </div>\n  )\n}\n","'use client'\n\nimport React, { useState } from 'react'\nimport type { SomaFile } from '../types'\n\nexport interface SomaFileBrowserProps {\n  files: SomaFile[]\n  loading?: boolean\n  onSelect?: (file: SomaFile) => void\n  onUpload?: (name: string, data: string, path?: string) => Promise<boolean>\n  onMkdir?: (path: string) => Promise<void>\n  onDelete?: (path: string) => Promise<void>\n  onRename?: (path: string, newName: string) => Promise<void>\n  /** Si se provee, muestra contenido del archivo al clickear */\n  readFile?: (path: string) => Promise<string | null>\n}\n\nconst S = {\n  bg: '#0d1117', row: '#161b22', bc: '#21262d',\n  tx: '#e6edf3', mu: '#8b949e', pr: '#58a6ff', ha: '#484f58',\n}\n\nfunction formatSize(bytes: number): string {\n  if (bytes < 1024) return `${bytes} B`\n  if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n  return `${(bytes / (1024 * 1024)).toFixed(1)} MB`\n}\n\nfunction fileIcon(f: SomaFile): string {\n  if (f.type === 'dir') return '📁'\n  const ext = f.ext?.toLowerCase() || ''\n  if (['.md', '.markdown'].includes(ext)) return '📝'\n  if (['.json'].includes(ext)) return '📋'\n  if (['.js', '.ts', '.tsx', '.jsx'].includes(ext)) return '⚡'\n  if (['.txt', '.log'].includes(ext)) return '📄'\n  if (['.csv', '.xlsx', '.xls'].includes(ext)) return '📊'\n  if (['.png', '.jpg', '.jpeg', '.gif', '.svg'].includes(ext)) return '🖼️'\n  return '📄'\n}\n\nexport function SomaFileBrowser({ files, loading, onSelect, readFile }: SomaFileBrowserProps) {\n  const [viewingFile, setViewingFile] = useState<{ name: string; content: string | null; loading: boolean } | null>(null)\n  const [currentPath, setCurrentPath] = useState('')\n\n  const handleFileClick = async (f: SomaFile) => {\n    if (f.type === 'dir') {\n      setCurrentPath(f.name)\n      onSelect?.(f)\n      return\n    }\n\n    if (readFile) {\n      setViewingFile({ name: f.name, content: null, loading: true })\n      const content = await readFile(f.name)\n      setViewingFile({ name: f.name, content, loading: false })\n    } else {\n      onSelect?.(f)\n    }\n  }\n\n  const closeViewer = () => setViewingFile(null)\n\n  if (loading) {\n    return <div style={{ padding: 16, color: S.mu, fontSize: 13, fontFamily: 'system-ui, sans-serif' }}>Cargando archivos...</div>\n  }\n\n  if (files.length === 0) {\n    return <div style={{ padding: 16, color: S.mu, fontSize: 13, fontFamily: 'system-ui, sans-serif' }}>No hay archivos.</div>\n  }\n\n  // Ordenar: dirs primero, luego alfabético\n  const sorted = [...files].sort((a, b) => {\n    if (a.type !== b.type) return a.type === 'dir' ? -1 : 1\n    return a.name.localeCompare(b.name)\n  })\n\n  // ── File viewer inline ──\n  if (viewingFile) {\n    return (\n      <div style={{ height: '100%', display: 'flex', flexDirection: 'column', fontFamily: 'system-ui, sans-serif' }}>\n        <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '8px 12px', borderBottom: `1px solid ${S.bc}`, background: S.row }}>\n          <span style={{ fontSize: 12, color: S.tx }}>📄 {viewingFile.name}</span>\n          <button onClick={closeViewer} style={{ background: 'none', border: 'none', color: S.mu, cursor: 'pointer', fontSize: 16 }}>← Volver</button>\n        </div>\n        <div style={{ flex: 1, overflow: 'auto', padding: 16, background: S.bg, color: S.tx, fontSize: 13, lineHeight: 1.6, whiteSpace: 'pre-wrap', wordBreak: 'break-word' }}>\n          {viewingFile.loading ? 'Cargando...' : (viewingFile.content || '(archivo vacío)')}\n        </div>\n      </div>\n    )\n  }\n\n  // ── Tabla ──\n  return (\n    <div style={{ fontFamily: 'system-ui, sans-serif', fontSize: 13 }}>\n      <table style={{ width: '100%', borderCollapse: 'collapse' }}>\n        <thead>\n          <tr style={{ borderBottom: `1px solid ${S.bc}` }}>\n            <th style={{ padding: '6px 12px', textAlign: 'left', color: S.mu, fontWeight: 500, width: 30 }}></th>\n            <th style={{ padding: '6px 12px', textAlign: 'left', color: S.mu, fontWeight: 500 }}>Nombre</th>\n            <th style={{ padding: '6px 12px', textAlign: 'left', color: S.mu, fontWeight: 500, width: 70 }}>Tipo</th>\n            <th style={{ padding: '6px 12px', textAlign: 'right', color: S.mu, fontWeight: 500, width: 80 }}>Tamaño</th>\n          </tr>\n        </thead>\n        <tbody>\n          {sorted.map((f, i) => (\n            <tr key={i}\n              onClick={() => handleFileClick(f)}\n              style={{\n                cursor: 'pointer',\n                borderBottom: `1px solid ${S.bc}`,\n                background: i % 2 === 0 ? S.row : S.bg,\n              }}\n              onMouseEnter={e => (e.currentTarget.style.background = `${S.pr}10`)}\n              onMouseLeave={e => (e.currentTarget.style.background = i % 2 === 0 ? S.row : S.bg)}\n            >\n              <td style={{ padding: '6px 12px', textAlign: 'center' }}>{fileIcon(f)}</td>\n              <td style={{ padding: '6px 12px', color: f.type === 'dir' ? S.pr : S.tx }}>\n                {f.name}\n              </td>\n              <td style={{ padding: '6px 12px', color: S.mu }}>\n                {f.type === 'dir' ? 'Directorio' : (f.ext || 'archivo')}\n              </td>\n              <td style={{ padding: '6px 12px', textAlign: 'right', color: S.mu }}>\n                {f.type === 'file' ? formatSize(f.size) : '—'}\n              </td>\n            </tr>\n          ))}\n        </tbody>\n      </table>\n    </div>\n  )\n}\n","'use client'\n\nimport React from 'react'\n\nexport interface SomaFileViewerProps {\n  content: string | null\n  fileName?: string\n  loading?: boolean\n  error?: string | null\n  onClose?: () => void\n}\n\nexport function SomaFileViewer({ content, fileName, loading, error, onClose }: SomaFileViewerProps) {\n  if (loading) {\n    return (\n      <div style={{ padding: 16, color: '#8b949e', fontSize: 13, fontFamily: 'system-ui, sans-serif' }}>\n        Cargando contenido...\n      </div>\n    )\n  }\n\n  if (error) {\n    return (\n      <div style={{ padding: 16, color: '#f85149', fontSize: 13, fontFamily: 'system-ui, sans-serif' }}>\n        Error: {error}\n      </div>\n    )\n  }\n\n  if (content === null) {\n    return (\n      <div style={{ padding: 16, color: '#8b949e', fontSize: 13, fontFamily: 'system-ui, sans-serif' }}>\n        Seleccioná un archivo para ver su contenido.\n      </div>\n    )\n  }\n\n  const isMarkdown = fileName?.endsWith('.md')\n  const ext = fileName?.split('.').pop()?.toLowerCase()\n\n  return (\n    <div style={{ height: '100%', display: 'flex', flexDirection: 'column', fontFamily: 'system-ui, sans-serif' }}>\n      {/* Header */}\n      <div style={{\n        display: 'flex', alignItems: 'center', justifyContent: 'space-between',\n        padding: '8px 12px', borderBottom: '1px solid #21262d',\n        background: '#161b22', flexShrink: 0,\n      }}>\n        <span style={{ fontSize: 12, color: '#8b949e' }}>\n          📄 {fileName || 'archivo'}\n          {ext && <span style={{ marginLeft: 8, color: '#484f58' }}>.{ext}</span>}\n        </span>\n        {onClose && (\n          <button onClick={onClose}\n            style={{ background: 'none', border: 'none', color: '#8b949e', cursor: 'pointer', fontSize: 16, padding: 0 }}>\n            ✕\n          </button>\n        )}\n      </div>\n\n      {/* Content */}\n      <div style={{\n        flex: 1, overflow: 'auto', padding: 16,\n        background: '#0d1117', color: '#e6edf3',\n        fontSize: 13, lineHeight: 1.6, whiteSpace: 'pre-wrap',\n        wordBreak: 'break-word',\n        fontFamily: isMarkdown ? 'system-ui, sans-serif' : \"'SF Mono', 'Fira Code', monospace\",\n      }}>\n        {content}\n      </div>\n\n      {/* Footer */}\n      <div style={{\n        padding: '4px 12px', borderTop: '1px solid #21262d',\n        background: '#161b22', fontSize: 10, color: '#484f58',\n        flexShrink: 0,\n      }}>\n        {content.length.toLocaleString()} bytes · {content.split('\\n').length} líneas\n      </div>\n    </div>\n  )\n}\n","'use client'\n\nimport React from 'react'\nimport type { SomaSkill } from '../types'\n\ninterface SomaSkillEditorProps {\n  skills: SomaSkill[]\n  loading?: boolean\n  onCreate?: (name: string, content: string) => Promise<boolean>\n  onDelete?: (name: string) => Promise<void>\n}\n\nexport function SomaSkillEditor({ skills, loading, onCreate, onDelete }: SomaSkillEditorProps) {\n  if (loading) return <div className=\"p-4 text-sm text-gray-400\">Cargando...</div>\n\n  return (\n    <div className=\"flex flex-col gap-1 p-2\">\n      {skills.map(skill => (\n        <div key={skill.name} className=\"flex items-center gap-2 px-3 py-2 rounded-lg hover:bg-gray-50\">\n          <span className=\"text-xs\">{skill.custom ? '🟢' : '  '}</span>\n          <div className=\"flex-1 min-w-0\">\n            <div className=\"text-sm font-medium truncate\">{skill.name}</div>\n            <div className=\"text-xs text-gray-400 truncate\">{skill.description}</div>\n          </div>\n          {skill.custom && (\n            <button onClick={() => onDelete?.(skill.name)}\n              className=\"text-xs text-red-500 hover:text-red-700\">×</button>\n          )}\n        </div>\n      ))}\n    </div>\n  )\n}\n","'use client'\n\nimport React, { useState, useEffect } from 'react'\n\nexport interface AgentSkillPanelProps {\n  agentId: string\n  token: string\n  somaUrl?: string\n  onRefresh?: () => void\n}\n\ninterface Skill {\n  name: string\n  description: string\n  custom: boolean\n  builtin: boolean\n  agents?: string[]\n}\n\nconst S = {\n  bg: '#0d1117', row: '#161b22', bc: '#21262d',\n  tx: '#e6edf3', mu: '#8b949e', pr: '#58a6ff', ha: '#484f58',\n  green: '#238636', red: '#f85149', purple: '#6e40c9',\n}\n\nexport function AgentSkillPanel({ agentId, token, somaUrl = 'https://soma.zea.cl', onRefresh }: AgentSkillPanelProps) {\n  const [allSkills, setAllSkills] = useState<Skill[]>([])\n  const [loading, setLoading] = useState(true)\n  const [error, setError] = useState<string | null>(null)\n  const [viewingSkill, setViewingSkill] = useState<string | null>(null)\n  const [skillContent, setSkillContent] = useState<string | null>(null)\n\n  const headers = { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' }\n  const api = `${somaUrl}/api/v1`\n\n  const load = async () => {\n    setLoading(true)\n    try {\n      const res = await fetch(`${api}/skills`, { headers })\n      if (res.ok) setAllSkills((await res.json()).data || [])\n    } catch (e: any) { setError(e.message) }\n    finally { setLoading(false) }\n  }\n\n  useEffect(() => { load() }, [token, agentId])\n\n  const assignedSkills = allSkills.filter(s => (s.agents || []).includes(agentId))\n  const availableSkills = allSkills.filter(s => !(s.agents || []).includes(agentId))\n\n  const assign = async (skillName: string) => {\n    const currentAgents = allSkills.find(s => s.name === skillName)?.agents || []\n    await fetch(`${api}/skills/${skillName}/agents`, {\n      method: 'PUT', headers,\n      body: JSON.stringify({ agentIds: [...currentAgents, agentId] }),\n    })\n    onRefresh?.()\n    load()\n  }\n\n  const unassign = async (skillName: string) => {\n    const currentAgents = (allSkills.find(s => s.name === skillName)?.agents || []).filter((id: string) => id !== agentId)\n    await fetch(`${api}/skills/${skillName}/agents`, {\n      method: 'PUT', headers,\n      body: JSON.stringify({ agentIds: currentAgents }),\n    })\n    onRefresh?.()\n    load()\n  }\n\n  const viewContent = async (skillName: string) => {\n    if (viewingSkill === skillName) { setViewingSkill(null); return }\n    setViewingSkill(skillName)\n    try {\n      const res = await fetch(`${api}/skills/${skillName}`, { headers })\n      if (res.ok) setSkillContent((await res.json()).data?.content || null)\n    } catch { setSkillContent(null) }\n  }\n\n  if (loading) return <div style={{ padding: 16, color: S.mu, fontSize: 13 }}>Loading skills...</div>\n  if (error) return <div style={{ padding: 16, color: S.red, fontSize: 13 }}>{error}</div>\n\n  return (\n    <div style={{ padding: 16, fontFamily: 'system-ui, sans-serif', fontSize: 13, height: '100%', overflow: 'auto' }}>\n      {/* Assigned skills */}\n      <h3 style={{ fontSize: 14, fontWeight: 600, color: S.tx, marginBottom: 8 }}>📋 Skills asignadas ({assignedSkills.length})</h3>\n      {assignedSkills.length === 0 && <div style={{ color: S.mu, marginBottom: 16 }}>No hay skills asignadas a este agente.</div>}\n      {assignedSkills.map(s => (\n        <div key={s.name} style={{ padding: '8px 12px', marginBottom: 6, background: S.row, borderRadius: 6, border: `1px solid ${S.bc}` }}>\n          <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-start' }}>\n            <div style={{ cursor: 'pointer', flex: 1 }} onClick={() => viewContent(s.name)}>\n              <div style={{ color: S.tx, fontWeight: 500 }}>{s.name}</div>\n              <div style={{ color: S.ha, fontSize: 11, marginTop: 2 }}>{s.description?.slice(0, 100)}</div>\n            </div>\n            <button onClick={() => unassign(s.name)} style={{\n              background: S.red, color: '#fff', border: 'none', borderRadius: 4,\n              padding: '3px 8px', cursor: 'pointer', fontSize: 10, fontFamily: 'inherit', flexShrink: 0,\n            }}>✕ Desinstalar</button>\n          </div>\n          {viewingSkill === s.name && (\n            <div style={{ marginTop: 8, padding: 8, background: S.bg, borderRadius: 4, fontSize: 10, color: S.tx, maxHeight: 150, overflow: 'auto', whiteSpace: 'pre-wrap', fontFamily: 'monospace' }}>\n              {skillContent || '(sin contenido)'}\n            </div>\n          )}\n        </div>\n      ))}\n\n      {/* Available skills */}\n      <h3 style={{ fontSize: 14, fontWeight: 600, color: S.tx, marginBottom: 8, marginTop: 20 }}>📦 Skills disponibles ({availableSkills.length})</h3>\n      {availableSkills.length === 0 && <div style={{ color: S.mu }}>Todas las skills están asignadas.</div>}\n      {availableSkills.map(s => (\n        <div key={s.name} style={{ padding: '8px 12px', marginBottom: 6, background: S.row, borderRadius: 6, border: `1px dashed ${S.bc}`, opacity: 0.7 }}>\n          <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-start' }}>\n            <div style={{ cursor: 'pointer', flex: 1 }} onClick={() => viewContent(s.name)}>\n              <div style={{ color: S.tx, fontWeight: 500 }}>{s.name}</div>\n              <div style={{ color: S.ha, fontSize: 11, marginTop: 2 }}>{s.description?.slice(0, 100)}</div>\n            </div>\n            <button onClick={() => assign(s.name)} style={{\n              background: S.green, color: '#fff', border: 'none', borderRadius: 4,\n              padding: '3px 8px', cursor: 'pointer', fontSize: 10, fontFamily: 'inherit', flexShrink: 0,\n            }}>+ Instalar</button>\n          </div>\n          {viewingSkill === s.name && (\n            <div style={{ marginTop: 8, padding: 8, background: S.bg, borderRadius: 4, fontSize: 10, color: S.tx, maxHeight: 150, overflow: 'auto', whiteSpace: 'pre-wrap', fontFamily: 'monospace' }}>\n              {skillContent || '(sin contenido)'}\n            </div>\n          )}\n        </div>\n      ))}\n    </div>\n  )\n}\n"]}