@aomi-labs/widget-lib 0.2.0 → 1.0.0

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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../node_modules/eventemitter3/index.js","../src/types/constants.ts","../src/types/errors.ts","../src/types/index.ts","../src/utils/index.ts","../src/core/ChatManager.ts","../src/core/ThemeManager.ts","../src/core/WalletManager.ts","../src/core/AomiChatWidget.ts","../src/index.ts"],"sourcesContent":["'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","// Constants for the Aomi Chat Widget\n\nimport type { AomiChatWidgetPaletteColors, SupportedChainId, ThemeDefinition } from './index';\n\n/*\n * ============================================================================\n * WIDGET DEFAULTS\n * ============================================================================\n */\n\nexport const DEFAULT_WIDGET_WIDTH = '400px';\nexport const DEFAULT_WIDGET_HEIGHT = '600px';\nexport const DEFAULT_MAX_HEIGHT = 800;\nexport const DEFAULT_MESSAGE_LENGTH = 2000;\nexport const DEFAULT_RECONNECT_ATTEMPTS = 5;\nexport const DEFAULT_RECONNECT_DELAY = 3000;\n\n/*\n * ============================================================================\n * NETWORK CONSTANTS\n * ============================================================================\n */\n\nexport const SUPPORTED_CHAINS: Record<SupportedChainId, string> = {\n 1: 'Ethereum',\n 5: 'Goerli',\n 10: 'Optimism',\n 100: 'Gnosis',\n 1337: 'Localhost',\n 31337: 'Anvil',\n 137: 'Polygon',\n 42161: 'Arbitrum One',\n 59140: 'Linea Sepolia',\n 59144: 'Linea',\n 8453: 'Base',\n 11155111: 'Sepolia',\n} as const;\n\nexport const DEFAULT_CHAIN_ID: SupportedChainId = 1;\n\n/*\n * ============================================================================\n * THEME PALETTES\n * ============================================================================\n */\n\nexport const THEME_PALETTES: Record<string, AomiChatWidgetPaletteColors> = {\n light: {\n primary: '#007bff',\n background: '#ffffff',\n surface: '#f8f9fa',\n text: '#212529',\n textSecondary: '#6c757d',\n border: '#dee2e6',\n success: '#28a745',\n error: '#dc3545',\n warning: '#ffc107',\n accent: '#6f42c1',\n },\n\n dark: {\n primary: '#0d6efd',\n background: '#121212',\n surface: '#1e1e1e',\n text: '#ffffff',\n textSecondary: '#b3b3b3',\n border: '#404040',\n success: '#00d26a',\n error: '#ff4757',\n warning: '#ffa500',\n accent: '#8b5cf6',\n },\n\n terminal: {\n primary: '#00ff00',\n background: '#0a0a0a',\n surface: '#161b22',\n text: '#00ff00',\n textSecondary: '#22c55e',\n border: '#30363d',\n success: '#00ff88',\n error: '#ff5555',\n warning: '#ffff55',\n accent: '#ff00ff',\n },\n\n neon: {\n primary: '#ff007f',\n background: '#0d0015',\n surface: '#1a0033',\n text: '#ffffff',\n textSecondary: '#cc99ff',\n border: '#4a0066',\n success: '#00ffaa',\n error: '#ff3366',\n warning: '#ffaa00',\n accent: '#00aaff',\n },\n\n minimal: {\n primary: '#000000',\n background: '#ffffff',\n surface: '#fafafa',\n text: '#333333',\n textSecondary: '#888888',\n border: '#e0e0e0',\n success: '#4caf50',\n error: '#f44336',\n warning: '#ff9800',\n accent: '#9c27b0',\n },\n} as const;\n\n/*\n * ============================================================================\n * COMPLETE THEME DEFINITIONS\n * ============================================================================\n */\n\nexport const PREDEFINED_THEMES: Record<string, ThemeDefinition> = {\n light: {\n name: 'Light',\n palette: THEME_PALETTES.light,\n fonts: {\n primary: '\"Segoe UI\", \"Roboto\", \"Helvetica Neue\", Arial, sans-serif',\n monospace: '\"SF Mono\", \"Monaco\", \"Inconsolata\", \"Roboto Mono\", monospace',\n },\n spacing: {\n xs: '4px',\n sm: '8px',\n md: '16px',\n lg: '24px',\n xl: '32px',\n },\n borderRadius: {\n sm: '4px',\n md: '8px',\n lg: '12px',\n },\n shadows: {\n sm: '0 1px 3px rgba(0, 0, 0, 0.1)',\n md: '0 4px 12px rgba(0, 0, 0, 0.15)',\n lg: '0 8px 24px rgba(0, 0, 0, 0.2)',\n },\n },\n\n dark: {\n name: 'Dark',\n palette: THEME_PALETTES.dark,\n fonts: {\n primary: '\"Segoe UI\", \"Roboto\", \"Helvetica Neue\", Arial, sans-serif',\n monospace: '\"SF Mono\", \"Monaco\", \"Inconsolata\", \"Roboto Mono\", monospace',\n },\n spacing: {\n xs: '4px',\n sm: '8px',\n md: '16px',\n lg: '24px',\n xl: '32px',\n },\n borderRadius: {\n sm: '4px',\n md: '8px',\n lg: '12px',\n },\n shadows: {\n sm: '0 1px 3px rgba(0, 0, 0, 0.3)',\n md: '0 4px 12px rgba(0, 0, 0, 0.4)',\n lg: '0 8px 24px rgba(0, 0, 0, 0.5)',\n },\n },\n\n terminal: {\n name: 'Terminal',\n palette: THEME_PALETTES.terminal,\n fonts: {\n primary: '\"SF Mono\", \"Monaco\", \"Inconsolata\", \"Roboto Mono\", monospace',\n monospace: '\"SF Mono\", \"Monaco\", \"Inconsolata\", \"Roboto Mono\", monospace',\n },\n spacing: {\n xs: '2px',\n sm: '4px',\n md: '8px',\n lg: '16px',\n xl: '24px',\n },\n borderRadius: {\n sm: '0px',\n md: '2px',\n lg: '4px',\n },\n shadows: {\n sm: '0 0 8px rgba(0, 255, 0, 0.3)',\n md: '0 0 16px rgba(0, 255, 0, 0.5)',\n lg: '0 0 24px rgba(0, 255, 0, 0.7)',\n },\n },\n\n neon: {\n name: 'Neon',\n palette: THEME_PALETTES.neon,\n fonts: {\n primary: '\"Orbitron\", \"Rajdhani\", \"Exo 2\", sans-serif',\n monospace: '\"Share Tech Mono\", \"Courier New\", monospace',\n },\n spacing: {\n xs: '4px',\n sm: '8px',\n md: '16px',\n lg: '24px',\n xl: '32px',\n },\n borderRadius: {\n sm: '2px',\n md: '6px',\n lg: '10px',\n },\n shadows: {\n sm: '0 0 8px rgba(255, 0, 127, 0.4)',\n md: '0 0 16px rgba(255, 0, 127, 0.6)',\n lg: '0 0 24px rgba(255, 0, 127, 0.8)',\n },\n },\n\n minimal: {\n name: 'Minimal',\n palette: THEME_PALETTES.minimal,\n fonts: {\n primary: '\"Inter\", \"Helvetica Neue\", Arial, sans-serif',\n monospace: '\"JetBrains Mono\", \"SF Mono\", monospace',\n },\n spacing: {\n xs: '4px',\n sm: '8px',\n md: '16px',\n lg: '24px',\n xl: '32px',\n },\n borderRadius: {\n sm: '2px',\n md: '4px',\n lg: '6px',\n },\n shadows: {\n sm: '0 1px 2px rgba(0, 0, 0, 0.05)',\n md: '0 2px 8px rgba(0, 0, 0, 0.1)',\n lg: '0 4px 16px rgba(0, 0, 0, 0.15)',\n },\n },\n} as const;\n\n/*\n * ============================================================================\n * ERROR CODES\n * ============================================================================\n */\n\nexport const ERROR_CODES = {\n // Configuration errors\n INVALID_CONFIG: 'INVALID_CONFIG',\n MISSING_APP_CODE: 'MISSING_APP_CODE',\n INVALID_THEME: 'INVALID_THEME',\n INVALID_DIMENSIONS: 'INVALID_DIMENSIONS',\n\n // Connection errors\n CONNECTION_FAILED: 'CONNECTION_FAILED',\n CONNECTION_TIMEOUT: 'CONNECTION_TIMEOUT',\n BACKEND_UNAVAILABLE: 'BACKEND_UNAVAILABLE',\n AUTHENTICATION_FAILED: 'AUTHENTICATION_FAILED',\n\n // Wallet errors\n WALLET_NOT_CONNECTED: 'WALLET_NOT_CONNECTED',\n WALLET_CONNECTION_FAILED: 'WALLET_CONNECTION_FAILED',\n UNSUPPORTED_NETWORK: 'UNSUPPORTED_NETWORK',\n TRANSACTION_FAILED: 'TRANSACTION_FAILED',\n TRANSACTION_REJECTED: 'TRANSACTION_REJECTED',\n\n // Chat errors\n MESSAGE_TOO_LONG: 'MESSAGE_TOO_LONG',\n RATE_LIMITED: 'RATE_LIMITED',\n INVALID_MESSAGE: 'INVALID_MESSAGE',\n SESSION_EXPIRED: 'SESSION_EXPIRED',\n\n // General errors\n UNKNOWN_ERROR: 'UNKNOWN_ERROR',\n INITIALIZATION_FAILED: 'INITIALIZATION_FAILED',\n PROVIDER_ERROR: 'PROVIDER_ERROR',\n} as const;\n\n/*\n * ============================================================================\n * EVENT NAMES\n * ============================================================================\n */\n\nexport const WIDGET_EVENTS = {\n // Widget lifecycle\n READY: 'ready',\n DESTROY: 'destroy',\n RESIZE: 'resize',\n\n // Chat events\n MESSAGE: 'message',\n TYPING_CHANGE: 'typingChange',\n PROCESSING_CHANGE: 'processingChange',\n\n // Connection events\n CONNECTION_CHANGE: 'connectionChange',\n SESSION_START: 'sessionStart',\n SESSION_END: 'sessionEnd',\n\n // Wallet events\n WALLET_CONNECT: 'walletConnect',\n WALLET_DISCONNECT: 'walletDisconnect',\n NETWORK_CHANGE: 'networkChange',\n TRANSACTION_REQUEST: 'transactionRequest',\n\n // Error events\n ERROR: 'error',\n} as const;\n\n/*\n * ============================================================================\n * CSS CLASS NAMES\n * ============================================================================\n */\n\nexport const CSS_CLASSES = {\n // Root classes\n WIDGET_ROOT: 'aomi-chat-widget',\n WIDGET_CONTAINER: 'aomi-chat-container',\n WIDGET_IFRAME: 'aomi-chat-iframe',\n\n // Theme classes\n THEME_LIGHT: 'aomi-theme-light',\n THEME_DARK: 'aomi-theme-dark',\n THEME_TERMINAL: 'aomi-theme-terminal',\n THEME_NEON: 'aomi-theme-neon',\n THEME_MINIMAL: 'aomi-theme-minimal',\n\n // Mode classes\n MODE_FULL: 'aomi-mode-full',\n MODE_MINIMAL: 'aomi-mode-minimal',\n MODE_COMPACT: 'aomi-mode-compact',\n MODE_TERMINAL: 'aomi-mode-terminal',\n\n // Component classes\n CHAT_INTERFACE: 'aomi-chat-interface',\n CHAT_HEADER: 'aomi-chat-header',\n CHAT_TITLE: 'aomi-chat-title',\n CHAT_BODY: 'aomi-chat-body',\n STATUS_BADGE: 'aomi-status-badge',\n MESSAGE_LIST: 'aomi-message-list',\n MESSAGE_CONTAINER: 'aomi-message-container',\n MESSAGE_BUBBLE: 'aomi-message',\n MESSAGE_USER: 'aomi-message-user',\n MESSAGE_ASSISTANT: 'aomi-message-assistant',\n MESSAGE_SYSTEM: 'aomi-message-system',\n ACTION_BAR: 'aomi-action-bar',\n MESSAGE_INPUT: 'aomi-message-input',\n INPUT_FORM: 'aomi-chat-input-form',\n INPUT_FIELD: 'aomi-chat-input-field',\n SEND_BUTTON: 'aomi-chat-send-button',\n WALLET_STATUS: 'aomi-wallet-status',\n TYPING_INDICATOR: 'aomi-typing-indicator',\n\n // State classes\n LOADING: 'aomi-loading',\n ERROR: 'aomi-error',\n DISABLED: 'aomi-disabled',\n CONNECTED: 'aomi-connected',\n DISCONNECTED: 'aomi-disconnected',\n} as const;\n\n/*\n * ============================================================================\n * API ENDPOINTS\n * ============================================================================\n */\n\nexport const API_ENDPOINTS = {\n CHAT: '/api/chat',\n CHAT_STREAM: '/api/chat/stream',\n STATE: '/api/state',\n INTERRUPT: '/api/interrupt',\n SYSTEM: '/api/system',\n MCP_COMMAND: '/api/mcp-command',\n HEALTH: '/health',\n} as const;\n\n/*\n * ============================================================================\n * TIMING CONSTANTS\n * ============================================================================\n */\n\nexport const TIMING = {\n TYPING_INDICATOR_DELAY: 100,\n MESSAGE_ANIMATION_DURATION: 300,\n CONNECTION_TIMEOUT: 10000,\n RETRY_DELAY: 1000,\n HEARTBEAT_INTERVAL: 30000,\n SESSION_TIMEOUT: 3600000, // 1 hour\n} as const;\n","// Error types and classes for the Aomi Chat Widget\n\nimport { ERROR_CODES } from './constants';\n\n/*\n * ============================================================================\n * BASE ERROR CLASS\n * ============================================================================\n */\n\nexport class AomiChatError extends Error {\n public readonly code: string;\n public readonly timestamp: Date;\n public readonly details?: unknown;\n\n constructor(code: string, message: string, details?: unknown) {\n super(message);\n this.name = 'AomiChatError';\n this.code = code;\n this.timestamp = new Date();\n this.details = details;\n\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, AomiChatError);\n }\n }\n\n public toJSON() {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n timestamp: this.timestamp.toISOString(),\n details: this.details,\n stack: this.stack,\n };\n }\n\n public toString(): string {\n return `${this.name} [${this.code}]: ${this.message}`;\n }\n}\n\n/*\n * ============================================================================\n * SPECIFIC ERROR CLASSES\n * ============================================================================\n */\n\nexport class ConfigurationError extends AomiChatError {\n constructor(message: string, details?: unknown) {\n super(ERROR_CODES.INVALID_CONFIG, message, details);\n this.name = 'ConfigurationError';\n }\n}\n\nexport class ConnectionError extends AomiChatError {\n constructor(message: string, details?: unknown) {\n super(ERROR_CODES.CONNECTION_FAILED, message, details);\n this.name = 'ConnectionError';\n }\n}\n\nexport class WalletError extends AomiChatError {\n constructor(code: string, message: string, details?: unknown) {\n super(code, message, details);\n this.name = 'WalletError';\n }\n}\n\nexport class TransactionError extends WalletError {\n constructor(message: string, details?: unknown) {\n super(ERROR_CODES.TRANSACTION_FAILED, message, details);\n this.name = 'TransactionError';\n }\n}\n\nexport class ChatError extends AomiChatError {\n constructor(code: string, message: string, details?: unknown) {\n super(code, message, details);\n this.name = 'ChatError';\n }\n}\n\nexport class RateLimitError extends ChatError {\n constructor(message: string, details?: unknown) {\n super(ERROR_CODES.RATE_LIMITED, message, details);\n this.name = 'RateLimitError';\n }\n}\n\nexport class SessionError extends AomiChatError {\n constructor(message: string, details?: unknown) {\n super(ERROR_CODES.SESSION_EXPIRED, message, details);\n this.name = 'SessionError';\n }\n}\n\n/*\n * ============================================================================\n * ERROR FACTORY FUNCTIONS\n * ============================================================================\n */\n\nexport function createConfigurationError(message: string, details?: unknown): ConfigurationError {\n return new ConfigurationError(message, details);\n}\n\nexport function createConnectionError(message: string, details?: unknown): ConnectionError {\n return new ConnectionError(message, details);\n}\n\nexport function createWalletError(code: string, message: string, details?: unknown): WalletError {\n return new WalletError(code, message, details);\n}\n\nexport function createTransactionError(message: string, details?: unknown): TransactionError {\n return new TransactionError(message, details);\n}\n\nexport function createChatError(code: string, message: string, details?: unknown): ChatError {\n return new ChatError(code, message, details);\n}\n\nexport function createRateLimitError(message: string, details?: unknown): RateLimitError {\n return new RateLimitError(message, details);\n}\n\nexport function createSessionError(message: string, details?: unknown): SessionError {\n return new SessionError(message, details);\n}\n\n/*\n * ============================================================================\n * ERROR HANDLING UTILITIES\n * ============================================================================\n */\n\nexport function isAomiChatError(error: unknown): error is AomiChatError {\n return error instanceof AomiChatError;\n}\n\nexport function isConfigurationError(error: unknown): error is ConfigurationError {\n return error instanceof ConfigurationError;\n}\n\nexport function isConnectionError(error: unknown): error is ConnectionError {\n return error instanceof ConnectionError;\n}\n\nexport function isWalletError(error: unknown): error is WalletError {\n return error instanceof WalletError;\n}\n\nexport function isTransactionError(error: unknown): error is TransactionError {\n return error instanceof TransactionError;\n}\n\nexport function isChatError(error: unknown): error is ChatError {\n return error instanceof ChatError;\n}\n\nexport function isRateLimitError(error: unknown): error is RateLimitError {\n return error instanceof RateLimitError;\n}\n\nexport function isSessionError(error: unknown): error is SessionError {\n return error instanceof SessionError;\n}\n\n/*\n * ============================================================================\n * ERROR SEVERITY LEVELS\n * ============================================================================\n */\n\n/* eslint-disable no-unused-vars, @typescript-eslint/no-unused-vars */\nexport enum ErrorSeverity {\n LOW = 'low',\n MEDIUM = 'medium',\n HIGH = 'high',\n CRITICAL = 'critical',\n}\n\nexport function getErrorSeverity(error: AomiChatError): ErrorSeverity {\n switch (error.code) {\n case ERROR_CODES.MISSING_APP_CODE:\n case ERROR_CODES.INITIALIZATION_FAILED:\n case ERROR_CODES.BACKEND_UNAVAILABLE:\n return ErrorSeverity.CRITICAL;\n\n case ERROR_CODES.CONNECTION_FAILED:\n case ERROR_CODES.AUTHENTICATION_FAILED:\n case ERROR_CODES.SESSION_EXPIRED:\n return ErrorSeverity.HIGH;\n\n case ERROR_CODES.WALLET_NOT_CONNECTED:\n case ERROR_CODES.UNSUPPORTED_NETWORK:\n case ERROR_CODES.TRANSACTION_FAILED:\n return ErrorSeverity.MEDIUM;\n\n case ERROR_CODES.MESSAGE_TOO_LONG:\n case ERROR_CODES.RATE_LIMITED:\n case ERROR_CODES.INVALID_MESSAGE:\n return ErrorSeverity.LOW;\n\n default:\n return ErrorSeverity.MEDIUM;\n }\n}\n\n/*\n * ============================================================================\n * ERROR MESSAGES\n * ============================================================================\n */\n\nexport const ERROR_MESSAGES = {\n [ERROR_CODES.INVALID_CONFIG]: 'Invalid widget configuration provided',\n [ERROR_CODES.MISSING_APP_CODE]: 'App code is required for widget initialization',\n [ERROR_CODES.INVALID_THEME]: 'Invalid theme configuration',\n [ERROR_CODES.INVALID_DIMENSIONS]: 'Invalid widget dimensions',\n\n [ERROR_CODES.CONNECTION_FAILED]: 'Failed to connect to the chat backend',\n [ERROR_CODES.CONNECTION_TIMEOUT]: 'Connection timed out',\n [ERROR_CODES.BACKEND_UNAVAILABLE]: 'Chat backend is currently unavailable',\n [ERROR_CODES.AUTHENTICATION_FAILED]: 'Authentication failed',\n\n [ERROR_CODES.WALLET_NOT_CONNECTED]: 'Wallet is not connected',\n [ERROR_CODES.WALLET_CONNECTION_FAILED]: 'Failed to connect to wallet',\n [ERROR_CODES.UNSUPPORTED_NETWORK]: 'Unsupported network',\n [ERROR_CODES.TRANSACTION_FAILED]: 'Transaction failed',\n [ERROR_CODES.TRANSACTION_REJECTED]: 'Transaction was rejected by user',\n\n [ERROR_CODES.MESSAGE_TOO_LONG]: 'Message exceeds maximum length',\n [ERROR_CODES.RATE_LIMITED]: 'Rate limit exceeded, please slow down',\n [ERROR_CODES.INVALID_MESSAGE]: 'Invalid message format',\n [ERROR_CODES.SESSION_EXPIRED]: 'Chat session has expired',\n\n [ERROR_CODES.UNKNOWN_ERROR]: 'An unknown error occurred',\n [ERROR_CODES.INITIALIZATION_FAILED]: 'Widget initialization failed',\n [ERROR_CODES.PROVIDER_ERROR]: 'Provider error occurred',\n} as const;\n\n/*\n * ============================================================================\n * ERROR RECOVERY STRATEGIES\n * ============================================================================\n */\n\nexport enum RecoveryStrategy {\n RETRY = 'retry',\n RECONNECT = 'reconnect',\n REFRESH = 'refresh',\n FALLBACK = 'fallback',\n MANUAL = 'manual',\n NONE = 'none',\n}\n/* eslint-enable no-unused-vars, @typescript-eslint/no-unused-vars */\n\nexport function getRecoveryStrategy(error: AomiChatError): RecoveryStrategy {\n switch (error.code) {\n case ERROR_CODES.CONNECTION_FAILED:\n case ERROR_CODES.CONNECTION_TIMEOUT:\n return RecoveryStrategy.RECONNECT;\n\n case ERROR_CODES.BACKEND_UNAVAILABLE:\n return RecoveryStrategy.RETRY;\n\n case ERROR_CODES.SESSION_EXPIRED:\n return RecoveryStrategy.REFRESH;\n\n case ERROR_CODES.WALLET_NOT_CONNECTED:\n case ERROR_CODES.UNSUPPORTED_NETWORK:\n return RecoveryStrategy.MANUAL;\n\n case ERROR_CODES.RATE_LIMITED:\n return RecoveryStrategy.RETRY;\n\n case ERROR_CODES.MISSING_APP_CODE:\n case ERROR_CODES.INVALID_CONFIG:\n return RecoveryStrategy.NONE;\n\n default:\n return RecoveryStrategy.RETRY;\n }\n}\n\n/*\n * ============================================================================\n * ERROR REPORTING\n * ============================================================================\n */\n\nexport interface ErrorReport {\n error: AomiChatError;\n severity: ErrorSeverity;\n recoveryStrategy: RecoveryStrategy;\n context: {\n timestamp: string;\n userAgent: string;\n url: string;\n widgetConfig?: Partial<unknown>;\n };\n}\n\nexport function createErrorReport(\n error: AomiChatError,\n widgetConfig?: Partial<unknown>,\n): ErrorReport {\n return {\n error,\n severity: getErrorSeverity(error),\n recoveryStrategy: getRecoveryStrategy(error),\n context: {\n timestamp: new Date().toISOString(),\n userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : 'unknown',\n url: typeof window !== 'undefined' ? window.location.href : 'unknown',\n widgetConfig,\n },\n };\n}\n","/* eslint-disable no-unused-vars, @typescript-eslint/no-unused-vars */\n// Core type definitions for Aomi Chat Widget\n\n/*\n * ============================================================================\n * CORE WIDGET TYPES\n * ============================================================================\n */\n\nexport type SupportedChainId =\n | 1\n | 5\n | 10\n | 100\n | 1337\n | 31337\n | 137\n | 42161\n | 59140\n | 59144\n | 8453\n | 11155111;\n\nexport type PerNetworkConfig<T> = Partial<Record<SupportedChainId, T>>;\nexport type PerModeConfig<T> = Partial<Record<AomiChatMode, T>>;\n\nexport type FlexibleConfig<T> =\n | T\n | PerNetworkConfig<T>\n | PerModeConfig<T>\n | PerModeConfig<PerNetworkConfig<T>>\n | PerNetworkConfig<PerModeConfig<T>>;\n\n/*\n * ============================================================================\n * CHAT MESSAGE TYPES\n * ============================================================================\n */\n\nexport interface ChatMessage {\n id: string;\n type: 'user' | 'assistant' | 'system';\n content: string;\n timestamp: Date;\n toolStream?: {\n topic: string;\n content: string;\n };\n metadata?: Record<string, unknown>;\n}\n\nexport interface WalletTransaction {\n to: string;\n value: string;\n data: string;\n gas?: string;\n description: string;\n timestamp: string;\n}\n\n/*\n * ============================================================================\n * CONFIGURATION TYPES\n * ============================================================================\n */\n\nexport type AomiChatMode = 'full' | 'minimal' | 'compact' | 'terminal';\nexport type AomiChatTheme = 'light' | 'dark' | 'terminal' | 'neon' | 'minimal';\n\nexport interface AomiChatWidgetPaletteColors {\n primary: string;\n background: string;\n surface: string;\n text: string;\n textSecondary: string;\n border: string;\n success: string;\n error: string;\n warning: string;\n accent: string;\n}\n\nexport interface AomiChatWidgetPalette extends AomiChatWidgetPaletteColors {\n baseTheme: AomiChatTheme;\n}\n\nexport interface RateLimitConfig {\n maxMessages?: number;\n windowMs?: number;\n skipWhenConnected?: boolean;\n}\n\nexport interface AnalyticsConfig {\n trackEvents?: boolean;\n customId?: string;\n excludeContent?: boolean;\n}\n\nexport interface ChatCommand {\n command: string;\n description: string;\n handler: (args: string[]) => Promise<void> | void;\n}\n\n/*\n * ============================================================================\n * MAIN WIDGET CONFIGURATION\n * ============================================================================\n */\n\nexport interface AomiChatWidgetParams {\n // Required\n appCode: string;\n\n // Core Configuration\n width?: string;\n height?: string;\n maxHeight?: number;\n baseUrl?: string;\n sessionId?: string;\n\n // UI Customization\n theme?: AomiChatTheme | AomiChatWidgetPalette;\n mode?: AomiChatMode;\n welcomeMessage?: string;\n placeholder?: string;\n showWalletStatus?: boolean;\n showNetworkSelector?: boolean;\n hideHeader?: boolean;\n hideFooter?: boolean;\n\n // Network Configuration\n chainId?: SupportedChainId;\n supportedChains?: SupportedChainId[];\n\n // Behavioral Settings\n enableTransactions?: boolean;\n requireWalletConnection?: boolean;\n sessionPersistence?: boolean;\n autoConnect?: boolean;\n standaloneMode?: boolean;\n\n // Advanced Features\n customCommands?: ChatCommand[];\n rateLimiting?: FlexibleConfig<RateLimitConfig>;\n\n // Integration Settings\n apiKey?: string;\n webhookUrl?: string;\n analytics?: AnalyticsConfig;\n\n // Sounds and Media\n sounds?: {\n messageReceived?: string | null;\n messageSent?: string | null;\n transactionSuccess?: string | null;\n transactionError?: string | null;\n };\n\n // Content Customization\n content?: {\n welcomeTitle?: string;\n connectWalletText?: string;\n disconnectText?: string;\n networkSwitchText?: string;\n errorMessages?: Record<string, string>;\n };\n}\n\n/*\n * ============================================================================\n * WIDGET STATE TYPES\n * ============================================================================\n */\n\nexport enum ConnectionStatus {\n CONNECTING = 'connecting',\n CONNECTED = 'connected',\n DISCONNECTED = 'disconnected',\n ERROR = 'error',\n RECONNECTING = 'reconnecting'\n}\n\nexport enum ReadinessPhase {\n INITIALIZING = 'initializing',\n CONNECTING_MCP = 'connecting_mcp',\n VALIDATING_ANTHROPIC = 'validating_anthropic',\n READY = 'ready',\n MISSING_API_KEY = 'missing_api_key',\n ERROR = 'error'\n}\n\nexport interface BackendReadiness {\n phase: ReadinessPhase;\n detail?: string;\n retryCount?: number;\n}\n\nexport interface WalletState {\n isConnected: boolean;\n address?: string;\n chainId?: SupportedChainId;\n networkName?: string;\n balance?: string;\n}\n\nexport interface ChatState {\n messages: ChatMessage[];\n isTyping: boolean;\n isProcessing: boolean;\n connectionStatus: ConnectionStatus;\n readiness: BackendReadiness;\n walletState: WalletState;\n sessionId: string;\n pendingTransaction?: WalletTransaction;\n}\n\n/*\n * ============================================================================\n * EVENT TYPES\n * ============================================================================\n */\n\nexport interface AomiChatEventListeners {\n onReady?: () => void;\n onMessage?: (message: ChatMessage) => void;\n onTransactionRequest?: (transaction: WalletTransaction) => void;\n onError?: (error: AomiChatError) => void;\n onSessionStart?: (sessionId: string) => void;\n onSessionEnd?: (sessionId: string) => void;\n onNetworkChange?: (chainId: SupportedChainId) => void;\n onWalletConnect?: (address: string) => void;\n onWalletDisconnect?: () => void;\n onTypingChange?: (isTyping: boolean) => void;\n onProcessingChange?: (isProcessing: boolean) => void;\n onConnectionChange?: (status: ConnectionStatus) => void;\n onResize?: (dimensions: { width: number; height: number }) => void;\n}\n\nexport interface AomiChatError {\n code: string;\n message: string;\n details?: unknown;\n timestamp: Date;\n}\n\n/*\n * ============================================================================\n * WIDGET HANDLER INTERFACE\n * ============================================================================\n */\n\nexport interface AomiChatWidgetHandler {\n // Core methods\n sendMessage: (message: string) => Promise<void>;\n updateParams: (params: Partial<AomiChatWidgetParams>) => void;\n updateProvider: (provider?: EthereumProvider) => void;\n destroy: () => void;\n\n // State getters\n getState: () => ChatState;\n getSessionId: () => string;\n isReady: () => boolean;\n\n // Event handling\n on: <K extends keyof AomiChatEventListeners>(\n event: K,\n listener: NonNullable<AomiChatEventListeners[K]>\n ) => AomiChatWidgetHandler;\n off: <K extends keyof AomiChatEventListeners>(\n event: K,\n listener: NonNullable<AomiChatEventListeners[K]>\n ) => AomiChatWidgetHandler;\n\n // Utility methods\n clearChat: () => void;\n exportChat: () => ChatMessage[];\n resize: (width?: string, height?: string) => void;\n focus: () => void;\n}\n\n/*\n * ============================================================================\n * ETHEREUM PROVIDER TYPES\n * ============================================================================\n */\n\nexport interface JsonRpcRequest {\n id: number;\n method: string;\n params: unknown[];\n}\n\nexport interface EthereumProvider {\n request<T>(params: JsonRpcRequest): Promise<T>;\n on(event: string, handler: (...args: unknown[]) => void): void;\n removeListener?(event: string, handler: (...args: unknown[]) => void): void;\n isMetaMask?: boolean;\n isWalletConnect?: boolean;\n}\n\n/*\n * ============================================================================\n * INTERNAL TYPES\n * ============================================================================\n */\n\nexport interface WidgetConfig {\n params: AomiChatWidgetParams;\n provider?: EthereumProvider;\n listeners?: AomiChatEventListeners;\n}\n\nexport interface BackendApiConfig {\n baseUrl: string;\n sessionId: string;\n timeout?: number;\n retryAttempts?: number;\n}\n\nexport interface ChatManagerConfig {\n backendUrl: string;\n sessionId: string;\n maxMessageLength?: number;\n reconnectAttempts?: number;\n reconnectDelay?: number;\n}\n\n/*\n * ============================================================================\n * COMPONENT PROPS (for React components)\n * ============================================================================\n */\n\nexport interface ChatInterfaceProps {\n messages: ChatMessage[];\n isTyping: boolean;\n isProcessing: boolean;\n onSendMessage: (message: string) => void;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n}\n\nexport interface MessageListProps {\n messages: ChatMessage[];\n isTyping: boolean;\n className?: string;\n}\n\nexport interface MessageInputProps {\n onSendMessage: (message: string) => void;\n placeholder?: string;\n disabled?: boolean;\n maxLength?: number;\n className?: string;\n}\n\nexport interface WalletStatusProps {\n walletState: WalletState;\n onConnect?: () => void;\n onDisconnect?: () => void;\n onNetworkSwitch?: (chainId: SupportedChainId) => void;\n showNetworkSelector?: boolean;\n className?: string;\n}\n\nexport interface TypingIndicatorProps {\n isTyping: boolean;\n className?: string;\n}\n\n/*\n * ============================================================================\n * THEME TYPES\n * ============================================================================\n */\n\nexport interface ThemeDefinition {\n name: string;\n palette: AomiChatWidgetPaletteColors;\n fonts?: {\n primary?: string;\n monospace?: string;\n };\n spacing?: {\n xs?: string;\n sm?: string;\n md?: string;\n lg?: string;\n xl?: string;\n };\n borderRadius?: {\n sm?: string;\n md?: string;\n lg?: string;\n };\n shadows?: {\n sm?: string;\n md?: string;\n lg?: string;\n };\n}\n\n/*\n * ============================================================================\n * UTILITY TYPES\n * ============================================================================\n */\n\nexport type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];\n};\n\nexport type RequiredKeys<T, K extends keyof T> = T & Required<Pick<T, K>>;\n\nexport type OptionalKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\n\n/*\n * ============================================================================\n * EXPORTS\n * ============================================================================\n */\n\nexport * from './constants';\nexport * from './errors';\n\n/* eslint-enable no-unused-vars, @typescript-eslint/no-unused-vars */\n","// Utility functions for the Aomi Chat Widget\n\nimport type {\n AomiChatWidgetParams,\n FlexibleConfig,\n SupportedChainId,\n AomiChatMode,\n AomiChatTheme,\n AomiChatWidgetPalette,\n} from '../types';\nimport { SUPPORTED_CHAINS, PREDEFINED_THEMES } from '../types/constants';\n\n/*\n * ============================================================================\n * CONFIGURATION UTILITIES\n * ============================================================================\n */\n\n/**\n * Resolves a flexible configuration value based on chain ID and mode\n */\nexport function resolveFlexibleConfig<T>(\n config: FlexibleConfig<T>,\n chainId: SupportedChainId,\n mode: AomiChatMode,\n): T | undefined {\n // If it's a simple value, return it\n if (typeof config !== 'object' || config === null) {\n return config as T;\n }\n\n // Check if it's a per-mode configuration\n if (isPerModeConfig(config)) {\n const modeValue = config[mode];\n if (modeValue === undefined) {\n return undefined;\n }\n\n // If the mode value is itself a per-network config\n if (isPerNetworkConfig(modeValue)) {\n return modeValue[chainId];\n }\n\n return modeValue as T;\n }\n\n // Check if it's a per-network configuration\n if (isPerNetworkConfig(config)) {\n const networkValue = config[chainId];\n if (networkValue === undefined) {\n return undefined;\n }\n\n // If the network value is itself a per-mode config\n if (isPerModeConfig(networkValue)) {\n return networkValue[mode];\n }\n\n return networkValue as T;\n }\n\n return config as T;\n}\n\nfunction isPerModeConfig<T>(config: unknown): config is Partial<Record<AomiChatMode, T>> {\n if (typeof config !== 'object' || config === null) return false;\n\n const modes: AomiChatMode[] = ['full', 'minimal', 'compact', 'terminal'];\n const keys = Object.keys(config);\n\n return keys.length > 0 && keys.every(key => modes.includes(key as AomiChatMode));\n}\n\nfunction isPerNetworkConfig<T>(config: unknown): config is Partial<Record<SupportedChainId, T>> {\n if (typeof config !== 'object' || config === null) return false;\n\n const chainIds = Object.keys(SUPPORTED_CHAINS).map(id => parseInt(id) as SupportedChainId);\n const keys = Object.keys(config).map(key => parseInt(key));\n\n return keys.length > 0 && keys.every(key => chainIds.includes(key as SupportedChainId));\n}\n\n/*\n * ============================================================================\n * VALIDATION UTILITIES\n * ============================================================================\n */\n\n/**\n * Validates widget configuration parameters\n */\nexport function validateWidgetParams(params: AomiChatWidgetParams): string[] {\n const errors: string[] = [];\n\n // Required fields\n if (!params.appCode || typeof params.appCode !== 'string') {\n errors.push('appCode is required and must be a string');\n }\n\n // Validate dimensions\n if (params.width && !isValidDimension(params.width)) {\n errors.push('width must be a valid CSS dimension (e.g., \"400px\", \"100%\")');\n }\n\n if (params.height && !isValidDimension(params.height)) {\n errors.push('height must be a valid CSS dimension (e.g., \"600px\", \"100vh\")');\n }\n\n if (params.maxHeight && (typeof params.maxHeight !== 'number' || params.maxHeight <= 0)) {\n errors.push('maxHeight must be a positive number');\n }\n\n // Validate chain ID\n if (params.chainId && !Object.keys(SUPPORTED_CHAINS).includes(params.chainId.toString())) {\n errors.push(`chainId must be one of: ${Object.keys(SUPPORTED_CHAINS).join(', ')}`);\n }\n\n // Validate supported chains\n if (params.supportedChains) {\n const invalidChains = params.supportedChains.filter(\n id => !Object.keys(SUPPORTED_CHAINS).includes(id.toString()),\n );\n if (invalidChains.length > 0) {\n errors.push(`supportedChains contains invalid chain IDs: ${invalidChains.join(', ')}`);\n }\n }\n\n // Validate theme\n if (params.theme && !isValidTheme(params.theme)) {\n errors.push('theme must be a valid theme name or theme palette object');\n }\n\n // Validate mode\n if (params.mode && !['full', 'minimal', 'compact', 'terminal'].includes(params.mode)) {\n errors.push('mode must be one of: full, minimal, compact, terminal');\n }\n\n return errors;\n}\n\nfunction isValidDimension(dimension: string): boolean {\n // Simple regex to validate CSS dimensions\n return /^(\\d+(\\.\\d+)?(px|%|em|rem|vh|vw)|auto|inherit)$/.test(dimension);\n}\n\nfunction isValidTheme(theme: AomiChatTheme | AomiChatWidgetPalette): boolean {\n if (typeof theme === 'string') {\n return Object.keys(PREDEFINED_THEMES).includes(theme);\n }\n\n if (typeof theme === 'object' && theme !== null) {\n return 'baseTheme' in theme && typeof theme.baseTheme === 'string';\n }\n\n return false;\n}\n\n/*\n * ============================================================================\n * SESSION UTILITIES\n * ============================================================================\n */\n\n/**\n * Generates a unique session ID\n */\nexport function generateSessionId(): string {\n // Use crypto.randomUUID if available (modern browsers)\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n\n // Fallback UUID v4 implementation\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = Math.random() * 16 | 0;\n const v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n}\n\n/**\n * Validates a session ID format\n */\nexport function isValidSessionId(sessionId: string): boolean {\n // UUID v4 format\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n return uuidRegex.test(sessionId);\n}\n\n/*\n * ============================================================================\n * URL UTILITIES\n * ============================================================================\n */\n\n/**\n * Builds widget URL with parameters\n */\nexport function buildWidgetUrl(baseUrl: string, params: AomiChatWidgetParams): string {\n const url = new URL('/widget', baseUrl);\n\n // Add essential parameters\n url.searchParams.set('appCode', params.appCode);\n\n if (params.sessionId) {\n url.searchParams.set('sessionId', params.sessionId);\n }\n\n if (params.theme) {\n if (typeof params.theme === 'string') {\n url.searchParams.set('theme', params.theme);\n } else {\n // For complex theme objects, encode as JSON\n url.searchParams.set('palette', JSON.stringify(params.theme));\n }\n }\n\n if (params.mode) {\n url.searchParams.set('mode', params.mode);\n }\n\n if (params.chainId) {\n url.searchParams.set('chainId', params.chainId.toString());\n }\n\n if (params.welcomeMessage) {\n url.searchParams.set('welcomeMessage', params.welcomeMessage);\n }\n\n if (params.placeholder) {\n url.searchParams.set('placeholder', params.placeholder);\n }\n\n // Boolean flags\n if (params.showWalletStatus === false) {\n url.searchParams.set('showWalletStatus', 'false');\n }\n\n if (params.showNetworkSelector === false) {\n url.searchParams.set('showNetworkSelector', 'false');\n }\n\n if (params.hideHeader) {\n url.searchParams.set('hideHeader', 'true');\n }\n\n if (params.hideFooter) {\n url.searchParams.set('hideFooter', 'true');\n }\n\n if (params.enableTransactions === false) {\n url.searchParams.set('enableTransactions', 'false');\n }\n\n if (params.requireWalletConnection) {\n url.searchParams.set('requireWalletConnection', 'true');\n }\n\n if (params.standaloneMode === false) {\n url.searchParams.set('standaloneMode', 'false');\n }\n\n return url.toString();\n}\n\n/**\n * Parses widget parameters from URL search params\n */\nexport function parseWidgetParams(searchParams: URLSearchParams): Partial<AomiChatWidgetParams> {\n const params: Partial<AomiChatWidgetParams> = {};\n\n const appCode = searchParams.get('appCode');\n if (appCode) params.appCode = appCode;\n\n const sessionId = searchParams.get('sessionId');\n if (sessionId) params.sessionId = sessionId;\n\n const theme = searchParams.get('theme');\n if (theme) params.theme = theme as AomiChatTheme;\n\n const palette = searchParams.get('palette');\n if (palette) {\n try {\n params.theme = JSON.parse(palette) as AomiChatWidgetPalette;\n } catch {\n // Ignore invalid JSON\n }\n }\n\n const mode = searchParams.get('mode');\n if (mode) params.mode = mode as AomiChatMode;\n\n const chainId = searchParams.get('chainId');\n if (chainId) {\n const parsed = parseInt(chainId);\n if (!isNaN(parsed)) params.chainId = parsed as SupportedChainId;\n }\n\n const welcomeMessage = searchParams.get('welcomeMessage');\n if (welcomeMessage) params.welcomeMessage = welcomeMessage;\n\n const placeholder = searchParams.get('placeholder');\n if (placeholder) params.placeholder = placeholder;\n\n // Boolean parameters\n const showWalletStatus = searchParams.get('showWalletStatus');\n if (showWalletStatus === 'false') params.showWalletStatus = false;\n\n const showNetworkSelector = searchParams.get('showNetworkSelector');\n if (showNetworkSelector === 'false') params.showNetworkSelector = false;\n\n const hideHeader = searchParams.get('hideHeader');\n if (hideHeader === 'true') params.hideHeader = true;\n\n const hideFooter = searchParams.get('hideFooter');\n if (hideFooter === 'true') params.hideFooter = true;\n\n const enableTransactions = searchParams.get('enableTransactions');\n if (enableTransactions === 'false') params.enableTransactions = false;\n\n const requireWalletConnection = searchParams.get('requireWalletConnection');\n if (requireWalletConnection === 'true') params.requireWalletConnection = true;\n\n const standaloneMode = searchParams.get('standaloneMode');\n if (standaloneMode === 'false') params.standaloneMode = false;\n\n return params;\n}\n\n/*\n * ============================================================================\n * DOM UTILITIES\n * ============================================================================\n */\n\n/**\n * Creates a DOM element with classes and attributes\n */\nexport function createElement<K extends keyof HTMLElementTagNameMap>(\n tagName: K,\n options: {\n className?: string | string[];\n attributes?: Record<string, string>;\n styles?: Partial<CSSStyleDeclaration>;\n children?: (HTMLElement | string)[];\n } = {},\n): HTMLElementTagNameMap[K] {\n const element = document.createElement(tagName);\n\n // Set classes\n if (options.className) {\n if (Array.isArray(options.className)) {\n element.classList.add(...options.className);\n } else {\n element.className = options.className;\n }\n }\n\n // Set attributes\n if (options.attributes) {\n Object.entries(options.attributes).forEach(([key, value]) => {\n element.setAttribute(key, value);\n });\n }\n\n // Set styles\n if (options.styles) {\n Object.assign(element.style, options.styles);\n }\n\n // Add children\n if (options.children) {\n options.children.forEach(child => {\n if (typeof child === 'string') {\n element.appendChild(document.createTextNode(child));\n } else {\n element.appendChild(child);\n }\n });\n }\n\n return element;\n}\n\n/**\n * Checks if an element is visible in the viewport\n */\nexport function isElementVisible(element: HTMLElement): boolean {\n const rect = element.getBoundingClientRect();\n return (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n}\n\n/*\n * ============================================================================\n * TYPE GUARDS\n * ============================================================================\n */\n\n/**\n * Type guard to check if a value is a valid Ethereum address\n */\nexport function isEthereumAddress(value: unknown): value is string {\n if (typeof value !== 'string') return false;\n return /^0x[a-fA-F0-9]{40}$/.test(value);\n}\n\n/**\n * Type guard to check if a value is a valid transaction hash\n */\nexport function isTransactionHash(value: unknown): value is string {\n if (typeof value !== 'string') return false;\n return /^0x[a-fA-F0-9]{64}$/.test(value);\n}\n\n/**\n * Type guard to check if an object has a specific property\n */\nexport function hasProperty<T extends object, K extends string | number | symbol>(\n obj: T,\n prop: K,\n): obj is T & Record<K, unknown> {\n return prop in obj;\n}\n\n/*\n * ============================================================================\n * ASYNC UTILITIES\n * ============================================================================\n */\n\n/**\n * Delays execution for a specified number of milliseconds\n */\nexport function delay(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\n/**\n * Creates a promise that rejects after a timeout\n */\nexport function withTimeout<T>(promise: Promise<T>, timeoutMs: number): Promise<T> {\n return Promise.race([\n promise,\n new Promise<never>((_, reject) =>\n setTimeout(() => reject(new Error('Operation timed out')), timeoutMs)),\n ]);\n}\n\n/**\n * Retries a function with exponential backoff\n */\nexport async function retry<T>(\n fn: () => Promise<T>,\n options: {\n maxAttempts?: number;\n delay?: number;\n backoffFactor?: number;\n // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars\n shouldRetry?: (error: unknown) => boolean;\n } = {},\n): Promise<T> {\n const {\n maxAttempts = 3,\n delay: initialDelay = 1000,\n backoffFactor = 2,\n shouldRetry = () => true,\n } = options;\n\n let lastError: unknown;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error;\n\n if (attempt === maxAttempts || !shouldRetry(error)) {\n throw error;\n }\n\n const delayMs = initialDelay * Math.pow(backoffFactor, attempt - 1);\n await delay(delayMs);\n }\n }\n\n throw lastError;\n}\n\n/*\n * ============================================================================\n * ENVIRONMENT UTILITIES\n * ============================================================================\n */\n\n/**\n * Detects if running in a browser environment\n */\nexport function isBrowser(): boolean {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\n/**\n * Detects if running on a mobile device\n */\nexport function isMobile(): boolean {\n if (!isBrowser()) return false;\n\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent,\n );\n}\n\n/**\n * Gets the current viewport dimensions\n */\nexport function getViewportDimensions(): { width: number; height: number } {\n if (!isBrowser()) {\n return { width: 0, height: 0 };\n }\n\n return {\n width: window.innerWidth || document.documentElement.clientWidth,\n height: window.innerHeight || document.documentElement.clientHeight,\n };\n}\n\n/*\n * ============================================================================\n * FORMATTING UTILITIES\n * ============================================================================\n */\n\n/**\n * Formats a timestamp as a human-readable string\n */\nexport function formatTimestamp(timestamp: Date): string {\n const now = new Date();\n const diff = now.getTime() - timestamp.getTime();\n\n if (diff < 60000) { // Less than 1 minute\n return 'just now';\n } else if (diff < 3600000) { // Less than 1 hour\n const minutes = Math.floor(diff / 60000);\n return `${minutes} minute${minutes > 1 ? 's' : ''} ago`;\n } else if (diff < 86400000) { // Less than 1 day\n const hours = Math.floor(diff / 3600000);\n return `${hours} hour${hours > 1 ? 's' : ''} ago`;\n } else {\n return timestamp.toLocaleDateString();\n }\n}\n\n/**\n * Truncates an Ethereum address for display\n */\nexport function truncateAddress(address: string, startChars = 6, endChars = 4): string {\n if (!isEthereumAddress(address)) return address;\n\n if (address.length <= startChars + endChars) return address;\n\n return `${address.slice(0, startChars)}...${address.slice(-endChars)}`;\n}\n\n/**\n * Formats a number with appropriate decimal places\n */\nexport function formatNumber(\n value: number,\n options: {\n decimals?: number;\n compact?: boolean;\n currency?: string;\n } = {},\n): string {\n const { decimals = 2, compact = false, currency } = options;\n\n const formatter = new Intl.NumberFormat('en-US', {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n notation: compact ? 'compact' : 'standard',\n style: currency ? 'currency' : 'decimal',\n currency: currency || 'USD',\n });\n\n return formatter.format(value);\n}\n","/*\n * ChatManager - Aligns widget behaviour with the updated frontend core logic\n */\n\nimport { EventEmitter } from 'eventemitter3';\nimport {\n ConnectionStatus,\n ReadinessPhase,\n type ChatMessage,\n type ChatState,\n type BackendReadiness,\n type WalletTransaction,\n type WalletState,\n type ChatManagerConfig,\n type AomiChatError,\n} from '../types';\nimport {\n createConnectionError,\n createChatError,\n} from '../types/errors';\nimport { ERROR_CODES, API_ENDPOINTS, TIMING } from '../types/constants';\nimport { generateSessionId, withTimeout } from '../utils';\n\ninterface SessionMessagePayload {\n sender?: string;\n content?: string;\n timestamp?: string;\n tool_stream?: ToolStreamPayload;\n}\n\ninterface SessionResponsePayload {\n messages?: SessionMessagePayload[] | null;\n is_processing?: boolean;\n pending_wallet_tx?: string | null;\n readiness?: ReadinessPayload | null;\n}\n\ntype ToolStreamPayload = [string, string] | { topic?: unknown; content?: unknown } | null | undefined;\n\ninterface ReadinessPayload {\n phase?: unknown;\n detail?: unknown;\n message?: unknown;\n}\n\ninterface ChatManagerEvents {\n stateChange: [ChatState];\n message: [ChatMessage];\n error: [AomiChatError];\n connectionChange: [ConnectionStatus];\n transactionRequest: [WalletTransaction];\n}\n\ntype NetworkSwitchResult = {\n success: boolean;\n message: string;\n data?: Record<string, unknown>;\n};\n\nexport class ChatManager extends EventEmitter<ChatManagerEvents> {\n private config: ChatManagerConfig;\n private state: ChatState;\n private eventSource: EventSource | null = null;\n private reconnectAttempt = 0;\n private reconnectTimer: ReturnType<typeof setTimeout> | null = null;\n private heartbeatTimer: ReturnType<typeof setInterval> | null = null;\n private lastPendingTransactionRaw: string | null = null;\n\n constructor(config: Partial<ChatManagerConfig> = {}) {\n super();\n\n this.config = {\n backendUrl: config.backendUrl || 'http://localhost:8080',\n sessionId: config.sessionId || generateSessionId(),\n maxMessageLength: config.maxMessageLength || 2000,\n reconnectAttempts: config.reconnectAttempts || 5,\n reconnectDelay: config.reconnectDelay || 3000,\n };\n\n this.state = {\n messages: [],\n isTyping: false,\n isProcessing: false,\n connectionStatus: ConnectionStatus.DISCONNECTED,\n readiness: {\n phase: ReadinessPhase.INITIALIZING,\n },\n walletState: {\n isConnected: false,\n },\n sessionId: this.config.sessionId,\n pendingTransaction: undefined,\n };\n }\n\n /*\n * ============================================================================\n * PUBLIC API\n * ============================================================================\n */\n\n public getState(): ChatState {\n return {\n ...this.state,\n messages: [...this.state.messages],\n walletState: { ...this.state.walletState },\n };\n }\n\n public getSessionId(): string {\n return this.config.sessionId;\n }\n\n public setSessionId(sessionId: string): void {\n this.config.sessionId = sessionId;\n this.state.sessionId = sessionId;\n\n if (this.state.connectionStatus === ConnectionStatus.CONNECTED) {\n void this.connectSSE();\n }\n }\n\n public async connectSSE(): Promise<void> {\n this.setConnectionStatus(ConnectionStatus.CONNECTING);\n this.updateReadiness({ phase: ReadinessPhase.CONNECTING_MCP });\n\n this.teardownEventSource();\n\n try {\n const streamUrl = `${this.config.backendUrl}${API_ENDPOINTS.CHAT_STREAM}?session_id=${encodeURIComponent(\n this.config.sessionId,\n )}`;\n this.eventSource = new EventSource(streamUrl);\n\n this.eventSource.onopen = () => {\n this.setConnectionStatus(ConnectionStatus.CONNECTED);\n this.reconnectAttempt = 0;\n this.startHeartbeat();\n void this.refreshState();\n };\n\n this.eventSource.onmessage = (event) => {\n try {\n const payload = JSON.parse(event.data) as SessionResponsePayload;\n this.processBackendPayload(payload);\n } catch (error) {\n console.error('Failed to parse SSE payload:', error);\n this.emit('error', createChatError(ERROR_CODES.INVALID_MESSAGE, 'Invalid message format'));\n }\n };\n\n this.eventSource.onerror = (event) => {\n console.error('SSE connection error:', event);\n\n if (this.state.isProcessing) {\n this.state.isProcessing = false;\n this.state.isTyping = false;\n this.emitStateChange();\n }\n\n this.handleConnectionError();\n void this.refreshState();\n };\n } catch (error) {\n console.error('Failed to create SSE connection:', error);\n this.emit('error', createConnectionError('Failed to establish connection'));\n this.handleConnectionError();\n }\n }\n\n public disconnectSSE(): void {\n this.teardownEventSource();\n this.setConnectionStatus(ConnectionStatus.DISCONNECTED);\n }\n\n\n public async sendMessage(message: string): Promise<void> {\n const content = message.trim();\n\n if (!content) {\n throw createChatError(ERROR_CODES.INVALID_MESSAGE, 'Message cannot be empty');\n }\n\n if (content.length > (this.config.maxMessageLength ?? 0)) {\n throw createChatError(ERROR_CODES.MESSAGE_TOO_LONG, `Message exceeds ${this.config.maxMessageLength} characters`);\n }\n\n if (this.state.connectionStatus !== ConnectionStatus.CONNECTED) {\n throw createConnectionError('Not connected to backend');\n }\n\n try {\n const response = await this.postToBackend(API_ENDPOINTS.CHAT, {\n message: content,\n session_id: this.config.sessionId,\n });\n\n this.processBackendPayload(response);\n } catch (error) {\n console.error('Failed to send message:', error);\n throw createChatError(ERROR_CODES.UNKNOWN_ERROR, 'Failed to send message');\n }\n }\n\n public async sendSystemMessage(message: string): Promise<void> {\n try {\n const response = await this.postToBackend(API_ENDPOINTS.SYSTEM, {\n message,\n session_id: this.config.sessionId,\n });\n\n this.processBackendPayload(response);\n } catch (error) {\n console.error('Failed to send system message:', error);\n throw createChatError(ERROR_CODES.UNKNOWN_ERROR, 'Failed to send system message');\n }\n }\n\n public async interrupt(): Promise<void> {\n try {\n const response = await this.postToBackend(API_ENDPOINTS.INTERRUPT, {\n session_id: this.config.sessionId,\n });\n\n this.processBackendPayload(response);\n } catch (error) {\n console.error('Failed to interrupt:', error);\n throw createChatError(ERROR_CODES.UNKNOWN_ERROR, 'Failed to interrupt processing');\n }\n }\n\n public async sendNetworkSwitchRequest(networkName: string): Promise<NetworkSwitchResult> {\n try {\n await this.sendSystemMessage(`Detected user's wallet connected to ${networkName} network`);\n return {\n success: true,\n message: `Network switch system message sent for ${networkName}`,\n data: { network: networkName },\n };\n } catch (error) {\n const err = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n message: err,\n };\n }\n }\n\n public async sendTransactionResult(success: boolean, transactionHash?: string, error?: string): Promise<void> {\n const message = success\n ? `Transaction sent: ${transactionHash}`\n : `Transaction rejected by user${error ? `: ${error}` : ''}`;\n\n try {\n await this.sendSystemMessage(message);\n } catch (err) {\n console.error('Failed to send transaction result:', err);\n } finally {\n this.clearPendingTransaction();\n }\n }\n\n public clearPendingTransaction(): void {\n if (this.state.pendingTransaction) {\n this.state.pendingTransaction = undefined;\n this.lastPendingTransactionRaw = null;\n this.emitStateChange();\n }\n }\n\n public clearMessages(): void {\n if (this.state.messages.length === 0) return;\n this.state.messages = [];\n this.emitStateChange();\n }\n\n public updateWalletState(walletState: Partial<WalletState>): void {\n this.state.walletState = { ...this.state.walletState, ...walletState };\n this.emitStateChange();\n }\n\n public destroy(): void {\n this.disconnectSSE();\n this.removeAllListeners();\n }\n\n /*\n * ============================================================================\n * INTERNAL STATE HANDLING\n * ============================================================================\n */\n\n private processBackendPayload(payload: SessionResponsePayload): void {\n if (!payload) {\n return;\n }\n\n const previousMessages = this.state.messages;\n let stateChanged = false;\n\n if (Array.isArray(payload.messages)) {\n const nextMessages = this.buildMessages(payload.messages, previousMessages);\n this.state.messages = nextMessages;\n stateChanged = true;\n\n nextMessages.forEach((message, index) => {\n const previous = previousMessages[index];\n const isNewMessage = !previous || previous.id !== message.id;\n const contentChanged = previous && previous.content !== message.content;\n const toolStreamChanged = previous && !areToolStreamsEqual(previous.toolStream, message.toolStream);\n\n if (isNewMessage || contentChanged || toolStreamChanged) {\n this.emit('message', message);\n }\n });\n } else if (payload.messages === null) {\n if (previousMessages.length > 0) {\n this.state.messages = [];\n stateChanged = true;\n }\n } else if (payload.messages !== undefined) {\n console.error('Received malformed messages payload from backend:', payload.messages);\n }\n\n if (payload.is_processing !== undefined) {\n const processing = Boolean(payload.is_processing);\n if (processing !== this.state.isProcessing) {\n this.state.isProcessing = processing;\n stateChanged = true;\n }\n\n if (this.state.isTyping !== processing) {\n this.state.isTyping = processing;\n stateChanged = true;\n }\n }\n\n if (payload.readiness !== undefined) {\n const readiness = this.normaliseReadiness(payload.readiness);\n if (readiness) {\n const current = this.state.readiness;\n if (\n current.phase !== readiness.phase ||\n current.detail !== readiness.detail\n ) {\n this.state.readiness = readiness;\n stateChanged = true;\n }\n }\n }\n\n if (payload.pending_wallet_tx !== undefined) {\n if (payload.pending_wallet_tx === null) {\n if (this.state.pendingTransaction) {\n this.state.pendingTransaction = undefined;\n this.lastPendingTransactionRaw = null;\n stateChanged = true;\n }\n } else if (payload.pending_wallet_tx !== this.lastPendingTransactionRaw) {\n try {\n const transaction = JSON.parse(payload.pending_wallet_tx) as WalletTransaction;\n this.state.pendingTransaction = transaction;\n this.lastPendingTransactionRaw = payload.pending_wallet_tx;\n this.emit('transactionRequest', transaction);\n stateChanged = true;\n } catch (error) {\n console.error('Failed to parse wallet transaction payload:', error);\n }\n }\n }\n\n if ('pending_wallet_tx' in payload) {\n const raw = payload.pending_wallet_tx ?? null;\n\n if (raw === null) {\n if (this.state.pendingTransaction) {\n this.state.pendingTransaction = undefined;\n this.lastPendingTransactionRaw = null;\n stateChanged = true;\n }\n } else if (raw !== this.lastPendingTransactionRaw) {\n this.lastPendingTransactionRaw = raw;\n try {\n const parsed = JSON.parse(raw) as WalletTransaction;\n this.state.pendingTransaction = parsed;\n stateChanged = true;\n this.emit('transactionRequest', parsed);\n } catch (error) {\n console.error('Failed to parse wallet transaction request:', error);\n }\n }\n }\n\n if (stateChanged) {\n this.emitStateChange();\n }\n }\n\n private buildMessages(messages: SessionMessagePayload[], previousMessages: ChatMessage[]): ChatMessage[] {\n return messages\n .filter((msg): msg is SessionMessagePayload => Boolean(msg))\n .map((msg, index) => {\n const type = this.normaliseSender(msg.sender);\n const content = msg.content ?? '';\n const timestamp = this.parseTimestamp(msg.timestamp);\n const toolStream = normaliseToolStream(msg.tool_stream);\n\n const previous = previousMessages[index];\n const id = previous ? previous.id : generateSessionId();\n\n return {\n id,\n type,\n content,\n timestamp,\n toolStream,\n };\n });\n }\n\n private normaliseSender(sender?: string): ChatMessage['type'] {\n switch (sender) {\n case 'user':\n return 'user';\n case 'system':\n return 'system';\n default:\n return 'assistant';\n }\n }\n\n private parseTimestamp(timestamp?: string): Date {\n if (!timestamp) {\n return new Date();\n }\n\n const parsed = new Date(timestamp);\n if (Number.isNaN(parsed.valueOf())) {\n return new Date();\n }\n\n return parsed;\n }\n\n private normaliseReadiness(payload?: ReadinessPayload | null): BackendReadiness | null {\n if (!payload || typeof payload.phase !== 'string') {\n return null;\n }\n\n const detailRaw = typeof payload.detail === 'string' && payload.detail.trim().length > 0\n ? payload.detail.trim()\n : typeof payload.message === 'string' && payload.message.trim().length > 0\n ? payload.message.trim()\n : undefined;\n\n switch (payload.phase) {\n case 'connecting_mcp':\n return { phase: ReadinessPhase.CONNECTING_MCP, detail: detailRaw };\n case 'validating_anthropic':\n return { phase: ReadinessPhase.VALIDATING_ANTHROPIC, detail: detailRaw };\n case 'ready':\n return { phase: ReadinessPhase.READY, detail: detailRaw };\n case 'missing_api_key':\n return { phase: ReadinessPhase.MISSING_API_KEY, detail: detailRaw };\n case 'error':\n return { phase: ReadinessPhase.ERROR, detail: detailRaw };\n default:\n return { phase: ReadinessPhase.ERROR, detail: detailRaw };\n }\n }\n\n private updateReadiness(readiness: BackendReadiness): void {\n this.state.readiness = readiness;\n this.emitStateChange();\n }\n\n private setConnectionStatus(status: ConnectionStatus): void {\n if (this.state.connectionStatus !== status) {\n this.state.connectionStatus = status;\n this.emit('connectionChange', status);\n this.emitStateChange();\n }\n }\n\n private emitStateChange(): void {\n this.emit('stateChange', this.getState());\n }\n\n /*\n * ============================================================================\n * BACKEND COMMUNICATION\n * ============================================================================\n */\n\n private async postToBackend(endpoint: string, data: Record<string, unknown>): Promise<SessionResponsePayload> {\n const url = `${this.config.backendUrl}${endpoint}`;\n\n try {\n const response = await withTimeout(\n fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(data),\n }),\n TIMING.CONNECTION_TIMEOUT,\n );\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n return await response.json() as SessionResponsePayload;\n } catch (error) {\n if (error instanceof Error && error.message.includes('timed out')) {\n throw createConnectionError('Request timed out');\n }\n throw createConnectionError(`Request failed: ${error}`);\n }\n }\n\n private async refreshState(): Promise<void> {\n try {\n const response = await withTimeout(\n fetch(\n `${this.config.backendUrl}${API_ENDPOINTS.STATE}?session_id=${encodeURIComponent(\n this.config.sessionId,\n )}`,\n ),\n TIMING.CONNECTION_TIMEOUT,\n );\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const payload = await response.json() as SessionResponsePayload;\n this.processBackendPayload(payload);\n } catch (error) {\n console.warn('Failed to refresh chat state:', error);\n }\n }\n\n /*\n * ============================================================================\n * CONNECTION MANAGEMENT\n * ============================================================================\n */\n\n private handleConnectionError(): void {\n this.setConnectionStatus(ConnectionStatus.ERROR);\n this.stopHeartbeat();\n\n if (this.reconnectAttempt < (this.config.reconnectAttempts ?? 0)) {\n this.scheduleReconnect();\n } else {\n this.updateReadiness({ phase: ReadinessPhase.ERROR, detail: 'Connection lost' });\n this.setConnectionStatus(ConnectionStatus.DISCONNECTED);\n this.emit('error', createConnectionError('Max reconnection attempts reached'));\n this.setConnectionStatus(ConnectionStatus.DISCONNECTED);\n }\n }\n\n private scheduleReconnect(): void {\n this.clearReconnectTimer();\n this.setConnectionStatus(ConnectionStatus.RECONNECTING);\n this.updateReadiness({ phase: ReadinessPhase.CONNECTING_MCP });\n\n const delay = (this.config.reconnectDelay ?? 0) * Math.pow(2, this.reconnectAttempt);\n this.reconnectAttempt += 1;\n\n this.reconnectTimer = setTimeout(() => {\n void this.connectSSE();\n }, delay);\n }\n\n private clearReconnectTimer(): void {\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n }\n\n private startHeartbeat(): void {\n this.stopHeartbeat();\n this.heartbeatTimer = setInterval(() => {\n if (this.state.connectionStatus === ConnectionStatus.CONNECTED && this.eventSource) {\n if (this.eventSource.readyState !== EventSource.OPEN) {\n console.warn('SSE connection lost, attempting to reconnect');\n this.handleConnectionError();\n }\n }\n }, TIMING.HEARTBEAT_INTERVAL);\n }\n\n private stopHeartbeat(): void {\n if (this.heartbeatTimer) {\n clearInterval(this.heartbeatTimer);\n this.heartbeatTimer = null;\n }\n }\n\n private teardownEventSource(): void {\n if (this.eventSource) {\n this.eventSource.close();\n this.eventSource = null;\n }\n this.stopHeartbeat();\n this.clearReconnectTimer();\n }\n}\n\nfunction normaliseToolStream(raw: ToolStreamPayload): ChatMessage['toolStream'] | undefined {\n if (!raw) {\n return undefined;\n }\n\n if (Array.isArray(raw)) {\n const [topic, content] = raw;\n return typeof topic === 'string'\n ? { topic, content: typeof content === 'string' ? content : '' }\n : undefined;\n }\n\n if (typeof raw === 'object') {\n const { topic, content } = raw as { topic?: unknown; content?: unknown };\n return typeof topic === 'string'\n ? { topic, content: typeof content === 'string' ? content : '' }\n : undefined;\n }\n\n return undefined;\n}\n\nfunction areToolStreamsEqual(a?: ChatMessage['toolStream'], b?: ChatMessage['toolStream']): boolean {\n if (!a && !b) {\n return true;\n }\n\n if (!a || !b) {\n return false;\n }\n\n return a.topic === b.topic && a.content === b.content;\n}\n","// ThemeManager - Handles theme configuration and application\n\nimport type {\n AomiChatTheme,\n AomiChatWidgetPalette,\n AomiChatWidgetPaletteColors,\n ThemeDefinition,\n} from '../types';\nimport {\n PREDEFINED_THEMES,\n THEME_PALETTES,\n CSS_CLASSES,\n} from '../types/constants';\nimport { createConfigurationError } from '../types/errors';\n\n/*\n * ============================================================================\n * THEME MANAGER CLASS\n * ============================================================================\n */\n\nexport class ThemeManager {\n private currentTheme: ThemeDefinition;\n private customPalette: AomiChatWidgetPaletteColors | null = null;\n\n constructor(theme?: AomiChatTheme | AomiChatWidgetPalette) {\n this.currentTheme = this.resolveTheme(theme);\n }\n\n /*\n * ============================================================================\n * PUBLIC API\n * ============================================================================\n */\n\n /**\n * Updates the current theme\n */\n public updateTheme(theme?: AomiChatTheme | AomiChatWidgetPalette): void {\n this.currentTheme = this.resolveTheme(theme);\n this.customPalette = this.isCustomPalette(theme) ? theme : null;\n }\n\n /**\n * Gets the current computed theme\n */\n public getComputedTheme(): ThemeDefinition {\n if (this.customPalette) {\n return {\n ...this.currentTheme,\n palette: this.customPalette,\n };\n }\n return this.currentTheme;\n }\n\n /**\n * Gets a specific color from the current theme\n */\n public getColor(colorKey: keyof AomiChatWidgetPaletteColors): string {\n const theme = this.getComputedTheme();\n return theme.palette[colorKey] || THEME_PALETTES.light[colorKey];\n }\n\n /**\n * Gets the CSS class name for the current theme\n */\n public getThemeClass(): string {\n const baseTheme = (this.customPalette as any)?.baseTheme || this.getBaseThemeName();\n\n switch (baseTheme) {\n case 'light':\n return CSS_CLASSES.THEME_LIGHT;\n case 'dark':\n return CSS_CLASSES.THEME_DARK;\n case 'terminal':\n return CSS_CLASSES.THEME_TERMINAL;\n case 'neon':\n return CSS_CLASSES.THEME_NEON;\n case 'minimal':\n return CSS_CLASSES.THEME_MINIMAL;\n default:\n return CSS_CLASSES.THEME_LIGHT;\n }\n }\n\n /**\n * Gets the font family for the current theme\n */\n public getFontFamily(): string {\n return this.currentTheme.fonts?.primary || 'system-ui, sans-serif';\n }\n\n /**\n * Gets the monospace font family for the current theme\n */\n public getMonospaceFontFamily(): string {\n return this.currentTheme.fonts?.monospace || 'monospace';\n }\n\n /**\n * Gets a spacing value for the current theme\n */\n public getSpacing(size: 'xs' | 'sm' | 'md' | 'lg' | 'xl'): string {\n return this.currentTheme.spacing?.[size] || '8px';\n }\n\n /**\n * Gets a border radius value for the current theme\n */\n public getBorderRadius(size: 'sm' | 'md' | 'lg'): string {\n return this.currentTheme.borderRadius?.[size] || '4px';\n }\n\n /**\n * Gets a shadow value for the current theme\n */\n public getShadow(size: 'sm' | 'md' | 'lg'): string {\n return this.currentTheme.shadows?.[size] || 'none';\n }\n\n /**\n * Generates CSS custom properties for the current theme\n */\n public getCSSCustomProperties(): Record<string, string> {\n const theme = this.getComputedTheme();\n const properties: Record<string, string> = {};\n\n // Color properties\n Object.entries(theme.palette).forEach(([key, value]) => {\n properties[`--aomi-color-${key}`] = value;\n });\n\n // Font properties\n if (theme.fonts?.primary) {\n properties['--aomi-font-primary'] = theme.fonts.primary;\n }\n if (theme.fonts?.monospace) {\n properties['--aomi-font-monospace'] = theme.fonts.monospace;\n }\n\n // Spacing properties\n if (theme.spacing) {\n Object.entries(theme.spacing).forEach(([key, value]) => {\n properties[`--aomi-spacing-${key}`] = value;\n });\n }\n\n // Border radius properties\n if (theme.borderRadius) {\n Object.entries(theme.borderRadius).forEach(([key, value]) => {\n properties[`--aomi-radius-${key}`] = value;\n });\n }\n\n // Shadow properties\n if (theme.shadows) {\n Object.entries(theme.shadows).forEach(([key, value]) => {\n properties[`--aomi-shadow-${key}`] = value;\n });\n }\n\n return properties;\n }\n\n /**\n * Applies the theme to a DOM element\n */\n public applyThemeToElement(element: HTMLElement): void {\n const properties = this.getCSSCustomProperties();\n\n Object.entries(properties).forEach(([property, value]) => {\n element.style.setProperty(property, value);\n });\n\n // Add theme class\n element.classList.add(this.getThemeClass());\n }\n\n /**\n * Generates CSS string for the current theme\n */\n public generateCSS(selector = '.aomi-chat-widget'): string {\n const properties = this.getCSSCustomProperties();\n const cssRules: string[] = [];\n\n // Main theme CSS\n const mainRule = Object.entries(properties)\n .map(([property, value]) => ` ${property}: ${value};`)\n .join('\\n');\n\n cssRules.push(`${selector} {\\n${mainRule}\\n}`);\n\n // Add component-specific styles\n cssRules.push(this.generateComponentCSS(selector));\n\n return cssRules.join('\\n\\n');\n }\n\n /**\n * Destroys the theme manager\n */\n public destroy(): void {\n // Clean up any resources if needed\n }\n\n /*\n * ============================================================================\n * PRIVATE METHODS\n * ============================================================================\n */\n\n private resolveTheme(theme?: AomiChatTheme | AomiChatWidgetPalette): ThemeDefinition {\n if (!theme) {\n return PREDEFINED_THEMES.light;\n }\n\n if (typeof theme === 'string') {\n const predefinedTheme = PREDEFINED_THEMES[theme];\n if (!predefinedTheme) {\n throw createConfigurationError(`Unknown theme: ${theme}`);\n }\n return predefinedTheme;\n }\n\n if (this.isCustomPalette(theme)) {\n const baseTheme = PREDEFINED_THEMES[theme.baseTheme];\n if (!baseTheme) {\n throw createConfigurationError(`Unknown base theme: ${theme.baseTheme}`);\n }\n\n return {\n ...baseTheme,\n palette: {\n primary: theme.primary,\n background: theme.background,\n surface: theme.surface,\n text: theme.text,\n textSecondary: theme.textSecondary,\n border: theme.border,\n success: theme.success,\n error: theme.error,\n warning: theme.warning,\n accent: theme.accent,\n },\n };\n }\n\n throw createConfigurationError('Invalid theme configuration');\n }\n\n private isCustomPalette(theme: unknown): theme is AomiChatWidgetPalette {\n if (typeof theme !== 'object' || theme === null) return false;\n\n const palette = theme as Record<string, unknown>;\n\n return (\n typeof palette.baseTheme === 'string' &&\n typeof palette.primary === 'string' &&\n typeof palette.background === 'string' &&\n typeof palette.surface === 'string' &&\n typeof palette.text === 'string' &&\n typeof palette.textSecondary === 'string' &&\n typeof palette.border === 'string' &&\n typeof palette.success === 'string' &&\n typeof palette.error === 'string' &&\n typeof palette.warning === 'string' &&\n typeof palette.accent === 'string'\n );\n }\n\n private getBaseThemeName(): AomiChatTheme {\n // Find the base theme name by comparing palettes\n for (const [themeName, themeDefinition] of Object.entries(PREDEFINED_THEMES)) {\n if (this.isPaletteEqual(themeDefinition.palette, this.currentTheme.palette)) {\n return themeName as AomiChatTheme;\n }\n }\n return 'light'; // fallback\n }\n\n private isPaletteEqual(\n palette1: AomiChatWidgetPaletteColors,\n palette2: AomiChatWidgetPaletteColors,\n ): boolean {\n const keys = Object.keys(palette1) as (keyof AomiChatWidgetPaletteColors)[];\n return keys.every(key => palette1[key] === palette2[key]);\n }\n\n private generateComponentCSS(selector: string): string {\n return `\n/* Chat Interface */\n${selector} .${CSS_CLASSES.CHAT_INTERFACE} {\n background-color: var(--aomi-color-background);\n color: var(--aomi-color-text);\n border: 1px solid var(--aomi-color-border);\n border-radius: var(--aomi-radius-md);\n font-family: var(--aomi-font-primary);\n}\n\n/* Message List */\n${selector} .${CSS_CLASSES.MESSAGE_LIST} {\n padding: var(--aomi-spacing-md);\n overflow-y: auto;\n}\n\n/* Message Input */\n${selector} .${CSS_CLASSES.MESSAGE_INPUT} {\n background-color: var(--aomi-color-surface);\n border: 1px solid var(--aomi-color-border);\n border-radius: var(--aomi-radius-sm);\n color: var(--aomi-color-text);\n padding: var(--aomi-spacing-sm);\n font-family: var(--aomi-font-primary);\n}\n\n${selector} .${CSS_CLASSES.MESSAGE_INPUT}:focus {\n outline: none;\n border-color: var(--aomi-color-primary);\n box-shadow: 0 0 0 2px var(--aomi-color-primary)25;\n}\n\n/* Wallet Status */\n${selector} .${CSS_CLASSES.WALLET_STATUS} {\n background-color: var(--aomi-color-surface);\n color: var(--aomi-color-textSecondary);\n padding: var(--aomi-spacing-sm);\n border-radius: var(--aomi-radius-sm);\n font-size: 12px;\n}\n\n${selector} .${CSS_CLASSES.WALLET_STATUS}.${CSS_CLASSES.CONNECTED} {\n color: var(--aomi-color-success);\n}\n\n${selector} .${CSS_CLASSES.WALLET_STATUS}.${CSS_CLASSES.DISCONNECTED} {\n color: var(--aomi-color-error);\n}\n\n/* Typing Indicator */\n${selector} .${CSS_CLASSES.TYPING_INDICATOR} {\n color: var(--aomi-color-textSecondary);\n font-style: italic;\n padding: var(--aomi-spacing-sm);\n}\n\n/* State Classes */\n${selector}.${CSS_CLASSES.LOADING} {\n opacity: 0.7;\n pointer-events: none;\n}\n\n${selector}.${CSS_CLASSES.ERROR} {\n border-color: var(--aomi-color-error);\n}\n\n${selector}.${CSS_CLASSES.DISABLED} {\n opacity: 0.5;\n pointer-events: none;\n}\n\n/* Terminal Theme Specific */\n${selector}.${CSS_CLASSES.THEME_TERMINAL} {\n font-family: var(--aomi-font-monospace);\n background-color: var(--aomi-color-background);\n}\n\n${selector}.${CSS_CLASSES.THEME_TERMINAL} .${CSS_CLASSES.CHAT_INTERFACE} {\n border: 1px solid var(--aomi-color-primary);\n box-shadow: var(--aomi-shadow-md);\n}\n\n/* Neon Theme Specific */\n${selector}.${CSS_CLASSES.THEME_NEON} {\n background: linear-gradient(135deg, var(--aomi-color-background), var(--aomi-color-surface));\n}\n\n${selector}.${CSS_CLASSES.THEME_NEON} .${CSS_CLASSES.CHAT_INTERFACE} {\n border: 1px solid var(--aomi-color-primary);\n box-shadow: 0 0 20px var(--aomi-color-primary)50;\n}`;\n }\n}\n\n/*\n * ============================================================================\n * UTILITY FUNCTIONS\n * ============================================================================\n */\n\n/**\n * Creates a theme manager instance\n */\nexport function createThemeManager(theme?: AomiChatTheme | AomiChatWidgetPalette): ThemeManager {\n return new ThemeManager(theme);\n}\n\n/**\n * Gets all available predefined themes\n */\nexport function getAvailableThemes(): Record<string, ThemeDefinition> {\n return { ...PREDEFINED_THEMES };\n}\n\n/**\n * Validates a custom palette\n */\nexport function validateCustomPalette(palette: unknown): palette is AomiChatWidgetPalette {\n if (typeof palette !== 'object' || palette === null) return false;\n\n const p = palette as Record<string, unknown>;\n const requiredKeys: (keyof AomiChatWidgetPalette)[] = [\n 'baseTheme', 'primary', 'background', 'surface', 'text', 'textSecondary',\n 'border', 'success', 'error', 'warning', 'accent',\n ];\n\n return requiredKeys.every(key => typeof p[key] === 'string');\n}\n\n/**\n * Creates a custom palette from a base theme\n */\nexport function createCustomPalette(\n baseTheme: AomiChatTheme,\n overrides: Partial<AomiChatWidgetPaletteColors>,\n): AomiChatWidgetPalette {\n const basePalette = THEME_PALETTES[baseTheme];\n if (!basePalette) {\n throw createConfigurationError(`Unknown base theme: ${baseTheme}`);\n }\n\n return {\n baseTheme,\n ...basePalette,\n ...overrides,\n };\n}\n","// WalletManager - Handles wallet connection and transactions\n\nimport { EventEmitter } from 'eventemitter3';\nimport type {\n EthereumProvider,\n SupportedChainId,\n AomiChatError,\n} from '../types';\nimport {\n createWalletError,\n createTransactionError,\n} from '../types/errors';\nimport { SUPPORTED_CHAINS, ERROR_CODES } from '../types/constants';\nimport { isEthereumAddress, isTransactionHash } from '../utils';\n\n/*\n * ============================================================================\n * TYPES\n * ============================================================================\n */\n\ninterface TransactionRequest {\n to: string;\n value: string;\n data: string;\n gas?: string;\n}\n\ninterface WalletManagerEvents {\n connect: [string];\n disconnect: [];\n chainChange: [SupportedChainId];\n accountsChange: [string[]];\n error: [AomiChatError];\n}\n\n/*\n * ============================================================================\n * WALLET MANAGER CLASS\n * ============================================================================\n */\n\nexport class WalletManager extends EventEmitter<WalletManagerEvents> {\n private provider: EthereumProvider;\n private currentAccount: string | null = null;\n private currentChainId: SupportedChainId | null = null;\n private isConnected = false;\n\n constructor(provider: EthereumProvider) {\n super();\n this.provider = provider;\n this.setupEventListeners();\n this.initializeState();\n }\n\n /*\n * ============================================================================\n * PUBLIC API\n * ============================================================================\n */\n\n /**\n * Gets the current connected account\n */\n public getCurrentAccount(): string | null {\n return this.currentAccount;\n }\n\n /**\n * Gets the current chain ID\n */\n public getCurrentChainId(): SupportedChainId | null {\n return this.currentChainId;\n }\n\n /**\n * Gets the current network name\n */\n public getCurrentNetworkName(): string | null {\n if (!this.currentChainId) return null;\n return SUPPORTED_CHAINS[this.currentChainId] || 'Unknown Network';\n }\n\n /**\n * Checks if wallet is connected\n */\n public getIsConnected(): boolean {\n return this.isConnected;\n }\n\n /**\n * Connects to the wallet\n */\n public async connect(): Promise<string> {\n try {\n const accounts = await this.provider.request({\n id: Date.now(),\n method: 'eth_requestAccounts',\n params: [],\n }) as string[];\n\n if (!accounts || accounts.length === 0) {\n throw createWalletError(\n ERROR_CODES.WALLET_CONNECTION_FAILED,\n 'No accounts returned from wallet',\n );\n }\n\n const account = accounts[0];\n if (!isEthereumAddress(account)) {\n throw createWalletError(\n ERROR_CODES.WALLET_CONNECTION_FAILED,\n 'Invalid account address',\n );\n }\n\n this.currentAccount = account;\n this.isConnected = true;\n\n // Get chain ID\n await this.updateChainId();\n\n this.emit('connect', account);\n return account;\n\n } catch (error) {\n const walletError = error instanceof Error\n ? createWalletError(ERROR_CODES.WALLET_CONNECTION_FAILED, error.message)\n : createWalletError(ERROR_CODES.WALLET_CONNECTION_FAILED, 'Unknown error');\n\n this.emit('error', walletError);\n throw walletError;\n }\n }\n\n /**\n * Disconnects from the wallet\n */\n public disconnect(): void {\n this.currentAccount = null;\n this.currentChainId = null;\n this.isConnected = false;\n this.emit('disconnect');\n }\n\n /**\n * Switches to a specific network\n */\n public async switchNetwork(chainId: SupportedChainId): Promise<void> {\n try {\n await this.provider.request({\n id: Date.now(),\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: `0x${chainId.toString(16)}` }],\n });\n } catch (error: any) {\n // If the chain is not added, try to add it\n if (error.code === 4902) {\n await this.addNetwork(chainId);\n } else {\n throw createWalletError(\n ERROR_CODES.UNSUPPORTED_NETWORK,\n `Failed to switch to network ${chainId}: ${error.message}`,\n );\n }\n }\n }\n\n /**\n * Sends a transaction\n */\n public async sendTransaction(transaction: TransactionRequest): Promise<string> {\n if (!this.isConnected || !this.currentAccount) {\n throw createWalletError(\n ERROR_CODES.WALLET_NOT_CONNECTED,\n 'Wallet is not connected',\n );\n }\n\n try {\n // Validate transaction\n this.validateTransaction(transaction);\n\n // Prepare transaction parameters\n const txParams: any = {\n from: this.currentAccount,\n to: transaction.to,\n value: transaction.value,\n data: transaction.data,\n };\n\n if (transaction.gas) {\n txParams.gas = transaction.gas;\n }\n\n // Send transaction\n const txHash = await this.provider.request({\n id: Date.now(),\n method: 'eth_sendTransaction',\n params: [txParams],\n }) as string;\n\n if (!isTransactionHash(txHash)) {\n throw createTransactionError('Invalid transaction hash returned');\n }\n\n return txHash;\n\n } catch (error: any) {\n // Handle user rejection\n if (error.code === 4001) {\n throw createWalletError(\n ERROR_CODES.TRANSACTION_REJECTED,\n 'Transaction was rejected by user',\n );\n }\n\n const message = error.message || 'Transaction failed';\n throw createTransactionError(message);\n }\n }\n\n /**\n * Signs a message\n */\n public async signMessage(message: string): Promise<string> {\n if (!this.isConnected || !this.currentAccount) {\n throw createWalletError(\n ERROR_CODES.WALLET_NOT_CONNECTED,\n 'Wallet is not connected',\n );\n }\n\n try {\n const signature = await this.provider.request({\n id: Date.now(),\n method: 'personal_sign',\n params: [message, this.currentAccount],\n }) as string;\n\n return signature;\n\n } catch (error: any) {\n if (error.code === 4001) {\n throw createWalletError(\n ERROR_CODES.TRANSACTION_REJECTED,\n 'Message signing was rejected by user',\n );\n }\n\n throw createWalletError(\n ERROR_CODES.UNKNOWN_ERROR,\n `Failed to sign message: ${error.message}`,\n );\n }\n }\n\n /**\n * Gets account balance\n */\n public async getBalance(address?: string): Promise<string> {\n const accountAddress = address || this.currentAccount;\n\n if (!accountAddress) {\n throw createWalletError(\n ERROR_CODES.WALLET_NOT_CONNECTED,\n 'No account available',\n );\n }\n\n try {\n const balance = await this.provider.request({\n id: Date.now(),\n method: 'eth_getBalance',\n params: [accountAddress, 'latest'],\n }) as string;\n\n return balance;\n\n } catch (error: any) {\n throw createWalletError(\n ERROR_CODES.UNKNOWN_ERROR,\n `Failed to get balance: ${error.message}`,\n );\n }\n }\n\n /**\n * Updates the provider\n */\n public updateProvider(provider: EthereumProvider): void {\n // Clean up old provider\n this.removeProviderListeners();\n\n // Set new provider\n this.provider = provider;\n\n // Setup new listeners\n this.setupEventListeners();\n\n // Re-initialize state\n this.initializeState();\n }\n\n /**\n * Destroys the wallet manager\n */\n public destroy(): void {\n this.removeProviderListeners();\n this.disconnect();\n this.removeAllListeners();\n }\n\n /*\n * ============================================================================\n * PRIVATE METHODS\n * ============================================================================\n */\n\n private async initializeState(): Promise<void> {\n try {\n // Check if already connected\n const accounts = await this.provider.request({\n id: Date.now(),\n method: 'eth_accounts',\n params: [],\n }) as string[];\n\n if (accounts && accounts.length > 0 && isEthereumAddress(accounts[0])) {\n this.currentAccount = accounts[0];\n this.isConnected = true;\n await this.updateChainId();\n this.emit('connect', accounts[0]);\n }\n } catch (error) {\n // Ignore errors during initialization\n console.warn('Failed to initialize wallet state:', error);\n }\n }\n\n private async updateChainId(): Promise<void> {\n try {\n const chainId = await this.provider.request({\n id: Date.now(),\n method: 'eth_chainId',\n params: [],\n }) as string;\n\n const numericChainId = parseInt(chainId, 16) as SupportedChainId;\n\n if (this.currentChainId !== numericChainId) {\n this.currentChainId = numericChainId;\n this.emit('chainChange', numericChainId);\n }\n } catch (error) {\n console.warn('Failed to get chain ID:', error);\n }\n }\n\n private setupEventListeners(): void {\n if (this.provider.on) {\n this.provider.on('accountsChanged', this.handleAccountsChanged.bind(this) as any);\n this.provider.on('chainChanged', this.handleChainChanged.bind(this) as any);\n this.provider.on('disconnect', this.handleDisconnect.bind(this));\n }\n }\n\n private removeProviderListeners(): void {\n if (this.provider.removeListener) {\n this.provider.removeListener?.('accountsChanged', this.handleAccountsChanged.bind(this) as any);\n this.provider.removeListener?.('chainChanged', this.handleChainChanged.bind(this) as any);\n this.provider.removeListener('disconnect', this.handleDisconnect.bind(this));\n }\n }\n\n private handleAccountsChanged(accounts: string[]): void {\n if (!accounts || accounts.length === 0) {\n this.disconnect();\n } else if (accounts[0] !== this.currentAccount) {\n this.currentAccount = accounts[0];\n this.isConnected = true;\n this.emit('accountsChange', accounts);\n this.emit('connect', accounts[0]);\n }\n }\n\n private handleChainChanged(chainId: string): void {\n const numericChainId = parseInt(chainId, 16) as SupportedChainId;\n this.currentChainId = numericChainId;\n this.emit('chainChange', numericChainId);\n }\n\n private handleDisconnect(): void {\n this.disconnect();\n }\n\n private validateTransaction(transaction: TransactionRequest): void {\n if (!isEthereumAddress(transaction.to)) {\n throw createTransactionError('Invalid recipient address');\n }\n\n // Validate value (should be hex string)\n if (!/^0x[0-9a-fA-F]*$/.test(transaction.value)) {\n throw createTransactionError('Invalid transaction value');\n }\n\n // Validate data (should be hex string)\n if (transaction.data && !/^0x[0-9a-fA-F]*$/.test(transaction.data)) {\n throw createTransactionError('Invalid transaction data');\n }\n\n // Validate gas (should be hex string if provided)\n if (transaction.gas && !/^0x[0-9a-fA-F]*$/.test(transaction.gas)) {\n throw createTransactionError('Invalid gas value');\n }\n }\n\n private async addNetwork(chainId: SupportedChainId): Promise<void> {\n const networkConfig = this.getNetworkConfig(chainId);\n\n if (!networkConfig) {\n throw createWalletError(\n ERROR_CODES.UNSUPPORTED_NETWORK,\n `Network ${chainId} is not supported`,\n );\n }\n\n try {\n await this.provider.request({\n id: Date.now(),\n method: 'wallet_addEthereumChain',\n params: [networkConfig],\n });\n } catch (error: any) {\n throw createWalletError(\n ERROR_CODES.UNSUPPORTED_NETWORK,\n `Failed to add network ${chainId}: ${error.message}`,\n );\n }\n }\n\n private getNetworkConfig(chainId: SupportedChainId): any {\n const configs: Record<SupportedChainId, any> = {\n 1: null, // Mainnet is built-in\n 5: null, // Goerli is built-in\n 10: {\n chainId: '0xa',\n chainName: 'Optimism',\n nativeCurrency: {\n name: 'Ether',\n symbol: 'ETH',\n decimals: 18,\n },\n rpcUrls: ['https://mainnet.optimism.io'],\n blockExplorerUrls: ['https://optimistic.etherscan.io'],\n },\n 11155111: null, // Sepolia is built-in\n 100: {\n chainId: '0x64',\n chainName: 'Gnosis',\n nativeCurrency: {\n name: 'xDai',\n symbol: 'XDAI',\n decimals: 18,\n },\n rpcUrls: ['https://rpc.gnosischain.com'],\n blockExplorerUrls: ['https://gnosisscan.io'],\n },\n 1337: null, // Local development\n 31337: null, // Anvil/Hardhat\n 137: {\n chainId: '0x89',\n chainName: 'Polygon',\n nativeCurrency: {\n name: 'MATIC',\n symbol: 'MATIC',\n decimals: 18,\n },\n rpcUrls: ['https://polygon-rpc.com'],\n blockExplorerUrls: ['https://polygonscan.com'],\n },\n 42161: {\n chainId: '0xa4b1',\n chainName: 'Arbitrum One',\n nativeCurrency: {\n name: 'Ether',\n symbol: 'ETH',\n decimals: 18,\n },\n rpcUrls: ['https://arb1.arbitrum.io/rpc'],\n blockExplorerUrls: ['https://arbiscan.io'],\n },\n 8453: {\n chainId: '0x2105',\n chainName: 'Base',\n nativeCurrency: {\n name: 'Ether',\n symbol: 'ETH',\n decimals: 18,\n },\n rpcUrls: ['https://mainnet.base.org'],\n blockExplorerUrls: ['https://basescan.org'],\n },\n 59140: {\n chainId: '0xe704',\n chainName: 'Linea Sepolia',\n nativeCurrency: {\n name: 'Linea Ether',\n symbol: 'ETH',\n decimals: 18,\n },\n rpcUrls: ['https://rpc-sepolia.linea.build'],\n blockExplorerUrls: ['https://sepolia.lineascan.build'],\n },\n 59144: {\n chainId: '0xe708',\n chainName: 'Linea',\n nativeCurrency: {\n name: 'Linea Ether',\n symbol: 'ETH',\n decimals: 18,\n },\n rpcUrls: ['https://rpc.linea.build'],\n blockExplorerUrls: ['https://lineascan.build'],\n },\n };\n\n return configs[chainId];\n }\n}\n\n/*\n * ============================================================================\n * UTILITY FUNCTIONS\n * ============================================================================\n */\n\n/**\n * Creates a wallet manager instance\n */\nexport function createWalletManager(provider: EthereumProvider): WalletManager {\n return new WalletManager(provider);\n}\n\n/**\n * Checks if a provider supports the required methods\n */\nexport function isValidProvider(provider: unknown): provider is EthereumProvider {\n if (!provider || typeof provider !== 'object') return false;\n\n const p = provider as any;\n return (\n typeof p.request === 'function' &&\n typeof p.on === 'function'\n );\n}\n\n/**\n * Detects available wallets\n */\nexport function detectWallets(): Array<{ name: string; provider: EthereumProvider }> {\n if (typeof window === 'undefined') return [];\n\n const wallets: Array<{ name: string; provider: EthereumProvider }> = [];\n\n // MetaMask\n if (window.ethereum?.isMetaMask) {\n wallets.push({\n name: 'MetaMask',\n provider: window.ethereum,\n });\n }\n\n // WalletConnect\n if (window.ethereum?.isWalletConnect) {\n wallets.push({\n name: 'WalletConnect',\n provider: window.ethereum,\n });\n }\n\n // Generic ethereum provider\n if (window.ethereum && !window.ethereum.isMetaMask && !window.ethereum.isWalletConnect) {\n wallets.push({\n name: 'Injected Wallet',\n provider: window.ethereum,\n });\n }\n\n return wallets;\n}\n\n// Extend global Window interface\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars\n interface Window {\n ethereum?: EthereumProvider & {\n isMetaMask?: boolean;\n isWalletConnect?: boolean;\n };\n }\n}\n","// AomiChatWidget - Main widget factory and management class\n\nimport { EventEmitter } from 'eventemitter3';\nimport {\n ConnectionStatus,\n type AomiChatWidgetParams,\n type AomiChatWidgetHandler,\n type WidgetConfig,\n type ChatState,\n type AomiChatEventListeners,\n type EthereumProvider,\n type ChatMessage,\n type WalletTransaction,\n type SupportedChainId,\n} from '../types';\nimport {\n createConfigurationError,\n createConnectionError,\n AomiChatError as AomiError,\n} from '../types/errors';\nimport {\n ERROR_CODES,\n DEFAULT_WIDGET_WIDTH,\n DEFAULT_WIDGET_HEIGHT,\n DEFAULT_CHAIN_ID,\n CSS_CLASSES,\n WIDGET_EVENTS,\n} from '../types/constants';\nimport {\n validateWidgetParams,\n generateSessionId,\n createElement,\n isBrowser,\n} from '../utils';\nimport { ChatManager } from './ChatManager';\nimport { ThemeManager } from './ThemeManager';\nimport { WalletManager } from './WalletManager';\n\n/*\n * ============================================================================\n * WIDGET HANDLER IMPLEMENTATION\n * ============================================================================\n */\n\nclass AomiChatWidgetHandlerImpl implements AomiChatWidgetHandler {\n private container: HTMLElement;\n private config: WidgetConfig;\n private chatManager: ChatManager;\n private themeManager: ThemeManager;\n private walletManager: WalletManager | null = null;\n private widgetElement: HTMLElement | null = null;\n private isDestroyed = false;\n private eventEmitter: EventEmitter;\n private hasPromptedNetworkSwitch = false;\n\n constructor(container: HTMLElement, config: WidgetConfig) {\n this.eventEmitter = new EventEmitter();\n\n this.container = container;\n this.config = config;\n\n // Initialize managers\n this.chatManager = new ChatManager({\n backendUrl: config.params.baseUrl || 'http://localhost:8080',\n sessionId: config.params.sessionId || generateSessionId(),\n maxMessageLength: 2000,\n reconnectAttempts: 5,\n reconnectDelay: 3000,\n });\n\n this.themeManager = new ThemeManager(config.params.theme);\n\n // Initialize wallet manager if provider is available\n if (config.provider) {\n this.walletManager = new WalletManager(config.provider);\n }\n\n this.setupEventListeners();\n this.render();\n this.initialize();\n }\n\n /*\n * ============================================================================\n * PUBLIC API METHODS\n * ============================================================================\n */\n\n public async sendMessage(message: string): Promise<void> {\n if (this.isDestroyed) {\n throw new AomiError(ERROR_CODES.INITIALIZATION_FAILED, 'Widget has been destroyed');\n }\n\n return this.chatManager.sendMessage(message);\n }\n\n public updateParams(params: Partial<AomiChatWidgetParams>): void {\n if (this.isDestroyed) {\n throw new AomiError(ERROR_CODES.INITIALIZATION_FAILED, 'Widget has been destroyed');\n }\n\n // Validate new parameters\n const previousParams = this.config.params;\n const mergedParams = { ...previousParams, ...params };\n const errors = validateWidgetParams(mergedParams);\n\n if (errors.length > 0) {\n throw createConfigurationError(`Invalid parameters: ${errors.join(', ')}`);\n }\n\n // Update configuration\n this.config.params = mergedParams;\n\n if (params.chainId && params.chainId !== previousParams.chainId) {\n this.hasPromptedNetworkSwitch = false;\n }\n\n // Update theme if changed\n if (params.theme) {\n this.themeManager.updateTheme(params.theme);\n this.applyTheme();\n }\n\n // Update dimensions if changed\n if (params.width || params.height) {\n this.updateDimensions();\n }\n\n // Re-render if necessary\n this.render();\n }\n\n public updateProvider(provider?: EthereumProvider): void {\n if (this.isDestroyed) {\n throw new AomiError(ERROR_CODES.INITIALIZATION_FAILED, 'Widget has been destroyed');\n }\n\n this.config.provider = provider;\n this.hasPromptedNetworkSwitch = false;\n\n if (provider) {\n if (this.walletManager) {\n this.walletManager.updateProvider(provider);\n } else {\n this.walletManager = new WalletManager(provider);\n this.setupWalletEventListeners();\n }\n } else {\n if (this.walletManager) {\n this.walletManager.destroy();\n this.walletManager = null;\n }\n }\n }\n\n public getState(): ChatState {\n return this.chatManager.getState();\n }\n\n public getSessionId(): string {\n return this.chatManager.getSessionId();\n }\n\n public isReady(): boolean {\n const state = this.getState();\n return state.connectionStatus === ConnectionStatus.CONNECTED;\n }\n\n public on<K extends keyof AomiChatEventListeners>(\n event: K,\n listener: NonNullable<AomiChatEventListeners[K]>,\n ): AomiChatWidgetHandler {\n this.eventEmitter.on(event as string, listener as any);\n return this;\n }\n\n public off<K extends keyof AomiChatEventListeners>(\n event: K,\n listener: NonNullable<AomiChatEventListeners[K]>,\n ): AomiChatWidgetHandler {\n this.eventEmitter.off(event as string, listener as any);\n return this;\n }\n\n public clearChat(): void {\n if (this.isDestroyed) return;\n this.chatManager.clearMessages();\n }\n\n public exportChat(): ChatMessage[] {\n return this.getState().messages;\n }\n\n public resize(width?: string, height?: string): void {\n if (this.isDestroyed) return;\n\n if (width) this.config.params.width = width;\n if (height) this.config.params.height = height;\n\n this.updateDimensions();\n this.eventEmitter.emit(WIDGET_EVENTS.RESIZE, {\n width: parseInt(width || this.config.params.width || '0'),\n height: parseInt(height || this.config.params.height || '0'),\n });\n }\n\n public focus(): void {\n if (this.isDestroyed || !this.widgetElement) return;\n\n const input = this.widgetElement.querySelector('input, textarea') as HTMLElement;\n if (input) {\n input.focus();\n }\n }\n\n public destroy(): void {\n if (this.isDestroyed) return;\n\n this.isDestroyed = true;\n\n // Clean up managers\n this.chatManager.destroy();\n this.themeManager.destroy();\n\n if (this.walletManager) {\n this.walletManager.destroy();\n }\n\n // Remove widget from DOM\n if (this.widgetElement && this.widgetElement.parentNode) {\n this.widgetElement.parentNode.removeChild(this.widgetElement);\n }\n\n // Clear container\n this.container.innerHTML = '';\n\n // Remove all event listeners\n this.eventEmitter.removeAllListeners();\n\n this.eventEmitter.emit(WIDGET_EVENTS.DESTROY);\n }\n\n /*\n * ============================================================================\n * PRIVATE METHODS\n * ============================================================================\n */\n\n private async initialize(): Promise<void> {\n try {\n // Connect to backend\n await this.chatManager.connectSSE();\n\n // Send welcome message if configured\n if (this.config.params.welcomeMessage) {\n await this.chatManager.sendSystemMessage(this.config.params.welcomeMessage);\n }\n\n this.eventEmitter.emit(WIDGET_EVENTS.READY);\n } catch (error) {\n const chatError = error instanceof AomiError\n ? error\n : createConnectionError('Failed to initialize widget');\n\n this.eventEmitter.emit(WIDGET_EVENTS.ERROR, chatError);\n }\n }\n\n private setupEventListeners(): void {\n // Chat manager events\n this.chatManager.on('stateChange', (state) => {\n // Forward state changes to widget listeners\n this.forwardStateEvents(state);\n });\n\n this.chatManager.on('message', (message) => {\n this.eventEmitter.emit(WIDGET_EVENTS.MESSAGE, message);\n });\n\n this.chatManager.on('error', (error) => {\n this.eventEmitter.emit(WIDGET_EVENTS.ERROR, error);\n });\n\n this.chatManager.on('connectionChange', (status) => {\n this.eventEmitter.emit(WIDGET_EVENTS.CONNECTION_CHANGE, status);\n });\n\n this.chatManager.on('transactionRequest', (transaction) => {\n this.eventEmitter.emit(WIDGET_EVENTS.TRANSACTION_REQUEST, transaction);\n this.handleTransactionRequest(transaction);\n });\n\n // Set up wallet event listeners if wallet manager exists\n if (this.walletManager) {\n this.setupWalletEventListeners();\n }\n }\n\n private setupWalletEventListeners(): void {\n if (!this.walletManager) return;\n\n this.walletManager.on('connect', (address) => {\n const chainId = this.walletManager?.getCurrentChainId() ?? null;\n const networkName = this.getNetworkName(chainId);\n\n this.chatManager.updateWalletState({\n isConnected: true,\n address,\n chainId: chainId ?? undefined,\n networkName,\n });\n this.eventEmitter.emit(WIDGET_EVENTS.WALLET_CONNECT, address);\n\n const chainLabel = chainId ?? 'unknown';\n const connectMessage =\n `User connected wallet with address ${address} on ${networkName} network ` +\n `(Chain ID: ${chainLabel}). Ready to help with transactions.`;\n void this.safeSendSystemMessage(connectMessage);\n void this.maybePromptNetworkSwitch();\n });\n\n this.walletManager.on('disconnect', () => {\n this.chatManager.updateWalletState({\n isConnected: false,\n address: undefined,\n chainId: undefined,\n networkName: undefined,\n });\n this.hasPromptedNetworkSwitch = false;\n this.eventEmitter.emit(WIDGET_EVENTS.WALLET_DISCONNECT);\n void this.safeSendSystemMessage('Wallet disconnected. Confirm to switch to testnet');\n });\n\n this.walletManager.on('chainChange', (chainId) => {\n const networkName = this.getNetworkName(chainId);\n this.chatManager.updateWalletState({ chainId, networkName });\n this.hasPromptedNetworkSwitch = false;\n this.eventEmitter.emit(WIDGET_EVENTS.NETWORK_CHANGE, chainId);\n void this.safeSendSystemMessage(\n `User switched wallet to ${networkName} network (Chain ID: ${chainId}).`,\n );\n void this.maybePromptNetworkSwitch();\n });\n\n this.walletManager.on('error', (error) => {\n this.eventEmitter.emit(WIDGET_EVENTS.ERROR, error);\n });\n }\n\n private forwardStateEvents(state: ChatState): void {\n // Forward typing and processing changes\n this.eventEmitter.emit(WIDGET_EVENTS.TYPING_CHANGE, state.isTyping);\n this.eventEmitter.emit(WIDGET_EVENTS.PROCESSING_CHANGE, state.isProcessing);\n }\n\n private async handleTransactionRequest(transaction: WalletTransaction): Promise<void> {\n if (!this.walletManager) {\n await this.chatManager.sendTransactionResult(\n false,\n undefined,\n 'No wallet connected',\n );\n return;\n }\n\n try {\n const txHash = await this.walletManager.sendTransaction({\n to: transaction.to,\n value: transaction.value,\n data: transaction.data,\n gas: transaction.gas,\n });\n\n await this.chatManager.sendTransactionResult(true, txHash);\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Transaction failed';\n await this.chatManager.sendTransactionResult(false, undefined, message);\n }\n }\n\n private async safeSendSystemMessage(message: string): Promise<void> {\n try {\n await this.chatManager.sendSystemMessage(message);\n } catch (error) {\n this.eventEmitter.emit(WIDGET_EVENTS.ERROR, error);\n }\n }\n\n private async maybePromptNetworkSwitch(): Promise<void> {\n if (!this.walletManager) return;\n\n const chainId = this.walletManager.getCurrentChainId();\n if (!chainId) return;\n\n if (this.hasPromptedNetworkSwitch) return;\n\n const walletNetwork = this.getNetworkName(chainId);\n const backendNetwork = this.getNetworkName(this.config.params.chainId ?? DEFAULT_CHAIN_ID);\n\n if (walletNetwork === backendNetwork) return;\n\n this.hasPromptedNetworkSwitch = true;\n\n const promptMessage =\n `New wallet connection: ${walletNetwork}, System configuration: ${backendNetwork}. ` +\n 'Prompt user to confirm network switch';\n await this.safeSendSystemMessage(promptMessage);\n }\n\n private getNetworkName(chainId?: SupportedChainId | null): string {\n switch (chainId) {\n case 1:\n return 'mainnet';\n case 5:\n case 11155111:\n case 1337:\n case 31337:\n return 'testnet';\n case 10:\n return 'optimism';\n case 100:\n return 'gnosis';\n case 137:\n return 'polygon';\n case 42161:\n return 'arbitrum';\n case 8453:\n return 'base';\n case 59140:\n return 'linea-sepolia';\n case 59144:\n return 'linea';\n default:\n return 'testnet';\n }\n }\n\n private render(): void {\n // Clear existing content\n this.container.innerHTML = '';\n\n // Create widget element\n this.widgetElement = createElement('div', {\n className: [\n CSS_CLASSES.WIDGET_ROOT,\n CSS_CLASSES.WIDGET_CONTAINER,\n this.themeManager.getThemeClass(),\n this.getModeClass(),\n ],\n styles: {\n width: this.config.params.width || DEFAULT_WIDGET_WIDTH,\n height: this.config.params.height || DEFAULT_WIDGET_HEIGHT,\n position: 'relative',\n overflow: 'hidden',\n fontFamily: this.themeManager.getFontFamily(),\n },\n });\n\n // Apply theme\n this.applyTheme();\n\n // Render chat interface\n this.renderChatInterface();\n\n // Add to container\n this.container.appendChild(this.widgetElement);\n }\n\n private renderChatInterface(): void {\n if (!this.widgetElement) return;\n\n /*\n * This would render the actual chat UI\n * For now, create a placeholder\n */\n const chatInterface = createElement('div', {\n className: CSS_CLASSES.CHAT_INTERFACE,\n styles: {\n width: '100%',\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: this.themeManager.getColor('background'),\n color: this.themeManager.getColor('text'),\n border: `1px solid ${this.themeManager.getColor('border')}`,\n borderRadius: '8px',\n },\n children: [\n createElement('div', {\n styles: {\n padding: '16px',\n textAlign: 'center',\n fontSize: '14px',\n color: this.themeManager.getColor('textSecondary'),\n },\n children: ['Chat interface will be implemented here'],\n }),\n ],\n });\n\n this.widgetElement.appendChild(chatInterface);\n }\n\n private applyTheme(): void {\n if (!this.widgetElement) return;\n\n const theme = this.themeManager.getComputedTheme();\n\n // Apply CSS custom properties for theme colors\n Object.entries(theme.palette).forEach(([key, value]) => {\n this.widgetElement!.style.setProperty(`--aomi-${key}`, value);\n });\n\n // Apply theme class\n this.widgetElement.className = [\n CSS_CLASSES.WIDGET_ROOT,\n CSS_CLASSES.WIDGET_CONTAINER,\n this.themeManager.getThemeClass(),\n this.getModeClass(),\n ].join(' ');\n }\n\n private getModeClass(): string {\n switch (this.config.params.mode) {\n case 'minimal':\n return CSS_CLASSES.MODE_MINIMAL;\n case 'compact':\n return CSS_CLASSES.MODE_COMPACT;\n case 'terminal':\n return CSS_CLASSES.MODE_TERMINAL;\n default:\n return CSS_CLASSES.MODE_FULL;\n }\n }\n\n private updateDimensions(): void {\n if (!this.widgetElement) return;\n\n this.widgetElement.style.width = this.config.params.width || DEFAULT_WIDGET_WIDTH;\n this.widgetElement.style.height = this.config.params.height || DEFAULT_WIDGET_HEIGHT;\n }\n}\n\n/*\n * ============================================================================\n * WIDGET FACTORY FUNCTION\n * ============================================================================\n */\n\n/**\n * Creates and initializes an Aomi Chat Widget\n */\nexport function createAomiChatWidget(\n container: HTMLElement,\n config: WidgetConfig,\n): AomiChatWidgetHandler {\n // Validate environment\n if (!isBrowser()) {\n throw createConfigurationError('Widget can only be created in a browser environment');\n }\n\n // Validate container\n if (!container || !(container instanceof HTMLElement)) {\n throw createConfigurationError('Container must be a valid HTML element');\n }\n\n // Validate configuration\n const errors = validateWidgetParams(config.params);\n if (errors.length > 0) {\n throw createConfigurationError(`Configuration errors: ${errors.join(', ')}`);\n }\n\n // Create and return widget handler\n return new AomiChatWidgetHandlerImpl(container, config);\n}\n\n// Export the handler class for testing\nexport { AomiChatWidgetHandlerImpl as AomiChatWidgetHandler };\n","// Main entry point for the Aomi Chat Widget Library\n\nimport { createAomiChatWidget } from './core/AomiChatWidget';\nimport {\n SUPPORTED_CHAINS,\n PREDEFINED_THEMES,\n ERROR_CODES,\n WIDGET_EVENTS,\n} from './types/constants';\n\n// Core widget factory\nexport { createAomiChatWidget };\n\n// Core managers\nexport { ChatManager } from './core/ChatManager';\nexport {\n ThemeManager,\n createThemeManager,\n getAvailableThemes,\n validateCustomPalette,\n createCustomPalette,\n} from './core/ThemeManager';\nexport {\n WalletManager,\n createWalletManager,\n isValidProvider,\n detectWallets,\n} from './core/WalletManager';\n\n// Types\nexport type {\n // Main widget types\n AomiChatWidgetParams,\n AomiChatWidgetHandler,\n WidgetConfig,\n AomiChatEventListeners,\n\n // Chat types\n ChatMessage,\n ChatState,\n WalletTransaction,\n WalletState,\n\n // Configuration types\n AomiChatMode,\n AomiChatTheme,\n AomiChatWidgetPalette,\n AomiChatWidgetPaletteColors,\n FlexibleConfig,\n SupportedChainId,\n\n // Network and provider types\n EthereumProvider,\n JsonRpcRequest,\n\n // State types\n ConnectionStatus,\n BackendReadiness,\n ReadinessPhase,\n\n\n // Theme types\n ThemeDefinition,\n\n // Component types (for React usage)\n ChatInterfaceProps,\n MessageListProps,\n MessageInputProps,\n WalletStatusProps,\n TypingIndicatorProps,\n\n // Utility types\n DeepPartial,\n RequiredKeys,\n OptionalKeys,\n} from './types';\n\n// Error classes\nexport {\n type AomiChatError,\n ConfigurationError,\n ConnectionError,\n WalletError,\n TransactionError,\n ChatError,\n RateLimitError,\n SessionError,\n createConfigurationError,\n createConnectionError,\n createWalletError,\n createTransactionError,\n createChatError,\n createRateLimitError,\n createSessionError,\n isAomiChatError,\n isConfigurationError,\n isConnectionError,\n isWalletError,\n isTransactionError,\n isChatError,\n isRateLimitError,\n isSessionError,\n} from './types/errors';\n\n// Constants\nexport {\n // Widget defaults\n DEFAULT_WIDGET_WIDTH,\n DEFAULT_WIDGET_HEIGHT,\n DEFAULT_MAX_HEIGHT,\n DEFAULT_MESSAGE_LENGTH,\n DEFAULT_RECONNECT_ATTEMPTS,\n DEFAULT_RECONNECT_DELAY,\n\n // Network constants\n SUPPORTED_CHAINS,\n DEFAULT_CHAIN_ID,\n\n // Theme constants\n THEME_PALETTES,\n PREDEFINED_THEMES,\n\n // Error codes\n ERROR_CODES,\n\n // Event names\n WIDGET_EVENTS,\n\n // CSS classes\n CSS_CLASSES,\n\n // API endpoints\n API_ENDPOINTS,\n\n // Timing constants\n TIMING,\n} from './types/constants';\n\n// Utilities\nexport {\n // Configuration utilities\n resolveFlexibleConfig,\n validateWidgetParams,\n\n // Session utilities\n generateSessionId,\n isValidSessionId,\n\n // URL utilities\n buildWidgetUrl,\n parseWidgetParams,\n\n // DOM utilities\n createElement,\n isElementVisible,\n\n // Type guards\n isEthereumAddress,\n isTransactionHash,\n hasProperty,\n\n // Async utilities\n delay,\n withTimeout,\n retry,\n\n // Environment utilities\n isBrowser,\n isMobile,\n getViewportDimensions,\n\n // Formatting utilities\n formatTimestamp,\n truncateAddress,\n formatNumber,\n} from './utils';\n\n// Package version (this would be set during build)\nexport const VERSION = '0.1.0';\n\n// Import necessary types for the convenience function\nimport type {\n AomiChatTheme,\n AomiChatWidgetPalette,\n EthereumProvider,\n ChatMessage,\n AomiChatError,\n AomiChatWidgetHandler,\n WidgetConfig,\n} from './types';\nimport { createConfigurationError } from './types/errors';\n\n/* eslint-disable no-unused-vars, @typescript-eslint/no-unused-vars */\ninterface CreateChatWidgetOptions {\n appCode: string;\n theme?: AomiChatTheme | AomiChatWidgetPalette;\n width?: string;\n height?: string;\n baseUrl?: string;\n provider?: EthereumProvider;\n onReady?: () => void;\n onMessage?: (message: ChatMessage) => void;\n onError?: (error: AomiChatError) => void;\n}\n/* eslint-enable no-unused-vars, @typescript-eslint/no-unused-vars */\n\n// Simple convenience function for basic usage\nexport function createChatWidget(\n containerId: string | HTMLElement,\n options: CreateChatWidgetOptions,\n): AomiChatWidgetHandler {\n // Get container element\n const container = typeof containerId === 'string'\n ? document.getElementById(containerId)\n : containerId;\n\n if (!container) {\n throw createConfigurationError(\n typeof containerId === 'string'\n ? `Element with id \"${containerId}\" not found`\n : 'Invalid container element',\n );\n }\n\n // Create widget configuration\n const config: WidgetConfig = {\n params: {\n appCode: options.appCode,\n theme: options.theme,\n width: options.width,\n height: options.height,\n baseUrl: options.baseUrl,\n },\n provider: options.provider,\n listeners: {\n onReady: options.onReady,\n onMessage: options.onMessage,\n onError: options.onError,\n },\n };\n\n return createAomiChatWidget(container, config);\n}\n\n// Default export for convenience\nexport default {\n createChatWidget,\n createAomiChatWidget,\n VERSION,\n SUPPORTED_CHAINS,\n PREDEFINED_THEMES,\n ERROR_CODES,\n WIDGET_EVENTS,\n};\n"],"names":["AomiError"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"sources":["../src/components/aomi-frame.tsx","../src/components/assistant-ui/thread.tsx","../src/components/ui/button.tsx","../src/lib/utils.ts","../src/components/assistant-ui/markdown-text.tsx","../src/components/assistant-ui/tooltip-icon-button.tsx","../src/components/ui/tooltip.tsx","../src/components/assistant-ui/tool-fallback.tsx","../src/components/assistant-ui/attachment.tsx","../src/components/ui/dialog.tsx","../src/components/ui/avatar.tsx","../src/lib/thread-context.tsx","../src/components/assistant-ui/threadlist-sidebar.tsx","../src/components/ui/sidebar.tsx","../src/hooks/use-mobile.ts","../src/components/ui/input.tsx","../src/components/ui/separator.tsx","../src/components/ui/sheet.tsx","../src/components/ui/skeleton.tsx","../src/components/assistant-ui/thread-list.tsx","../src/components/ui/breadcrumb.tsx","../src/components/assistant-ui/runtime.tsx","../src/lib/backend-api.ts","../src/lib/conversion.ts","../src/utils/wallet.ts","../src/components/assistant-ui/base-sidebar.tsx","../src/components/ui/card.tsx","../src/components/ui/badge.tsx","../src/components/ui/label.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, useCallback, type CSSProperties, type ReactNode } from \"react\";\nimport { Thread } from \"@/components/assistant-ui/thread\";\nimport { ThreadListSidebar } from \"@/components/assistant-ui/threadlist-sidebar\";\nimport {\n SidebarInset,\n SidebarProvider,\n SidebarTrigger,\n} from \"@/components/ui/sidebar\";\nimport { Separator } from \"@/components/ui/separator\";\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbList,\n BreadcrumbSeparator,\n} from \"@/components/ui/breadcrumb\";\nimport { cn } from \"@/lib/utils\";\nimport { AomiRuntimeProvider } from \"@/components/assistant-ui/runtime\";\nimport { ThreadContextProvider, useCurrentThreadMetadata, useThreadContext } from \"@/lib/thread-context\";\nimport {\n WalletSystemMessageEmitter,\n type WalletButtonState,\n type WalletFooterProps,\n} from \"@/utils/wallet\";\n\ntype AomiFrameProps = {\n width?: CSSProperties[\"width\"];\n height?: CSSProperties[\"height\"];\n className?: string;\n style?: CSSProperties;\n /** Render prop for wallet footer - receives wallet state and setter from lib */\n walletFooter?: (props: WalletFooterProps) => ReactNode;\n /** Additional content to render inside the frame */\n children?: ReactNode;\n};\n\nexport const AomiFrame = ({\n width = \"100%\",\n height = \"80vh\",\n className,\n style,\n walletFooter,\n children,\n}: AomiFrameProps) => {\n const backendUrl = process.env.NEXT_PUBLIC_BACKEND_URL ?? \"http://localhost:8080\";\n const frameStyle: CSSProperties = { width, height, ...style };\n\n // Local wallet state (replaces Zustand)\n const [wallet, setWalletState] = useState<WalletButtonState>({\n isConnected: false,\n address: undefined,\n chainId: undefined,\n ensName: undefined,\n });\n\n const setWallet = useCallback((data: Partial<WalletButtonState>) => {\n setWalletState((prev) => ({ ...prev, ...data }));\n }, []);\n\n return (\n <ThreadContextProvider>\n <AomiRuntimeProvider backendUrl={backendUrl} publicKey={wallet.address}>\n {/* Internal: watches wallet state and sends system messages */}\n <WalletSystemMessageEmitter wallet={wallet} />\n <FrameShell\n className={className}\n frameStyle={frameStyle}\n walletFooter={walletFooter}\n wallet={wallet}\n setWallet={setWallet}\n >\n {children}\n </FrameShell>\n </AomiRuntimeProvider>\n </ThreadContextProvider>\n );\n};\n\ntype FrameShellProps = {\n className?: string;\n frameStyle: CSSProperties;\n walletFooter?: (props: WalletFooterProps) => ReactNode;\n wallet: WalletButtonState;\n setWallet: (data: Partial<WalletButtonState>) => void;\n children?: ReactNode;\n};\n\nconst FrameShell = ({\n className,\n frameStyle,\n walletFooter,\n wallet,\n setWallet,\n children,\n}: FrameShellProps) => {\n const currentTitle = useCurrentThreadMetadata()?.title ?? \"New Chat\";\n const { currentThreadId, threadViewKey } = useThreadContext();\n\n return (\n <SidebarProvider>\n {children}\n <div\n className={cn(\n \"flex h-full w-full overflow-hidden rounded-2xl bg-white shadow-2xl dark:bg-neutral-950\",\n className\n )}\n style={frameStyle}\n >\n <ThreadListSidebar footer={walletFooter?.({ wallet, setWallet })} />\n <SidebarInset className=\"relative\">\n <header className=\"flex h-14 mt-1 shrink-0 items-center gap-2 border-b px-3\">\n <SidebarTrigger />\n <Separator orientation=\"vertical\" className=\"mr-2 h-4\" />\n <Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem className=\"hidden md:block\">\n {currentTitle}\n </BreadcrumbItem>\n <BreadcrumbSeparator className=\"hidden md:block\" />\n </BreadcrumbList>\n </Breadcrumb>\n </header>\n <div className=\"flex-1 overflow-hidden\">\n <Thread key={`${currentThreadId}-${threadViewKey}`} />\n </div>\n </SidebarInset>\n </div>\n </SidebarProvider>\n );\n};\n","import {\n AlertCircleIcon,\n ArrowDownIcon,\n ArrowUpIcon,\n CheckIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n CopyIcon,\n PencilIcon,\n RefreshCwIcon,\n Square,\n} from \"lucide-react\";\n\nimport {\n ActionBarPrimitive,\n BranchPickerPrimitive,\n ComposerPrimitive,\n ErrorPrimitive,\n MessagePrimitive,\n ThreadPrimitive,\n} from \"@assistant-ui/react\";\n\nimport type { FC } from \"react\";\nimport { useEffect } from \"react\";\nimport { LazyMotion, MotionConfig, domAnimation } from \"motion/react\";\nimport * as m from \"motion/react-m\";\n\nimport { Button } from \"@/components/ui/button\";\nimport { MarkdownText } from \"@/components/assistant-ui/markdown-text\";\nimport { ToolFallback } from \"@/components/assistant-ui/tool-fallback\";\nimport { TooltipIconButton } from \"@/components/assistant-ui/tooltip-icon-button\";\nimport {\n ComposerAddAttachment,\n ComposerAttachments,\n UserMessageAttachments,\n} from \"@/components/assistant-ui/attachment\";\n\nimport { cn } from \"@/lib/utils\";\nimport { useThreadContext } from \"@/lib/thread-context\";\nimport { useAssistantApi } from \"@assistant-ui/react\";\n\nexport const Thread: FC = () => {\n const api = useAssistantApi();\n const { threadViewKey } = useThreadContext();\n\n useEffect(() => {\n try {\n const composer = api.composer();\n composer.setText(\"\");\n void composer.clearAttachments?.();\n } catch (error) {\n console.error(\"Failed to reset composer input:\", error);\n }\n }, [api, threadViewKey]);\n\n return (\n <LazyMotion features={domAnimation}>\n <MotionConfig reducedMotion=\"user\">\n <ThreadPrimitive.Root\n className=\"aui-root aui-thread-root @container flex h-full flex-col bg-background\"\n style={{\n [\"--thread-max-width\" as string]: \"44rem\",\n }}\n >\n <ThreadPrimitive.Viewport className=\"aui-thread-viewport relative flex flex-1 flex-col overflow-x-auto overflow-y-scroll px-4\">\n <ThreadPrimitive.If empty>\n <ThreadWelcome />\n </ThreadPrimitive.If>\n\n <ThreadPrimitive.Messages\n components={{\n UserMessage,\n EditComposer,\n AssistantMessage,\n SystemMessage,\n }}\n />\n\n <ThreadPrimitive.If empty={false}>\n <div className=\"aui-thread-viewport-spacer min-h-8 grow\" />\n </ThreadPrimitive.If>\n\n <Composer />\n </ThreadPrimitive.Viewport>\n </ThreadPrimitive.Root>\n </MotionConfig>\n </LazyMotion>\n );\n};\n\nconst ThreadScrollToBottom: FC = () => {\n return (\n <ThreadPrimitive.ScrollToBottom asChild>\n <TooltipIconButton\n tooltip=\"Scroll to bottom\"\n variant=\"outline\"\n className=\"aui-thread-scroll-to-bottom absolute -top-12 z-10 self-center rounded-full p-4 disabled:invisible dark:bg-background dark:hover:bg-accent\"\n >\n <ArrowDownIcon />\n </TooltipIconButton>\n </ThreadPrimitive.ScrollToBottom>\n );\n};\n\nconst ThreadWelcome: FC = () => {\n return (\n <div className=\"aui-thread-welcome-root mx-auto my-auto flex w-full max-w-[var(--thread-max-width)] flex-grow flex-col\">\n <div className=\"aui-thread-welcome-center flex w-full flex-grow flex-col items-center justify-center\">\n <div className=\"aui-thread-welcome-message flex size-full flex-col justify-center px-8\">\n <m.div\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: 10 }}\n className=\"aui-thread-welcome-message-motion-1 text-2xl font-semibold\"\n >\n Hello there!\n </m.div>\n <m.div\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: 10 }}\n transition={{ delay: 0.1 }}\n className=\"aui-thread-welcome-message-motion-2 text-2xl text-muted-foreground/65\"\n >\n How can I help you today?\n </m.div>\n </div>\n </div>\n <ThreadSuggestions />\n </div>\n );\n};\n\nconst ThreadSuggestions: FC = () => {\n return (\n <div className=\"aui-thread-welcome-suggestions grid w-full gap-2 pb-4 @md:grid-cols-2\">\n {[\n {\n title: \"Show my wallet balances\",\n label: \"and positions\",\n action: \"Show my wallet balances and positions\",\n },\n {\n title: \"Swap 1 ETH to USDC\",\n label: \"with the best price\",\n action: \"Swap 1 ETH to USDC with the best price\",\n },\n {\n title: \"Stake half of my ETH\",\n label: \"in the highest yield pool\",\n action: \"Stake half of my ETH in the highest yield pool\",\n },\n {\n title: \"Bridge 100 USDC\",\n label: \"from Ethereum to Arbitrum\",\n action: \"Bridge 100 USDC from Ethereum to Arbitrum\",\n },\n ].map((suggestedAction, index) => (\n <m.div\n initial={{ opacity: 0, y: 20 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: 20 }}\n transition={{ delay: 0.05 * index }}\n key={`suggested-action-${suggestedAction.title}-${index}`}\n className=\"aui-thread-welcome-suggestion-display [&:nth-child(n+3)]:hidden @md:[&:nth-child(n+3)]:block\"\n >\n <ThreadPrimitive.Suggestion\n prompt={suggestedAction.action}\n send\n asChild\n >\n <Button\n variant=\"ghost\"\n className=\"aui-thread-welcome-suggestion h-auto w-full flex-1 flex-wrap items-start justify-start gap-1 rounded-3xl border px-5 py-4 text-left text-sm @md:flex-col dark:hover:bg-accent/60\"\n aria-label={suggestedAction.action}\n >\n <span className=\"aui-thread-welcome-suggestion-text-1 font-medium\">\n {suggestedAction.title}\n </span>\n <span className=\"aui-thread-welcome-suggestion-text-2 text-muted-foreground\">\n {suggestedAction.label}\n </span>\n </Button>\n </ThreadPrimitive.Suggestion>\n </m.div>\n ))}\n </div>\n );\n};\n\nconst Composer: FC = () => {\n return (\n <div className=\"aui-composer-wrapper sticky bottom-0 mx-auto flex w-full max-w-[var(--thread-max-width)] flex-col gap-4 overflow-visible rounded-t-3xl bg-background pb-4 md:pb-6\">\n <ThreadScrollToBottom />\n <ComposerPrimitive.Root className=\"aui-composer-root relative flex w-full flex-col rounded-4xl border bg-white px-1 pt-2 shadow-[0_9px_9px_0px_rgba(0,0,0,0.01),0_2px_5px_0px_rgba(0,0,0,0.06)] dark:border-muted-foreground/15\">\n <ComposerAttachments />\n <ComposerPrimitive.Input\n placeholder=\"Send a message...\"\n className=\"aui-composer-input ml-3 mt-2 max-h-32 min-h-16 w-full resize-none bg-transparent px-3.5 pt-1.5 pb-3 text-sm outline-none placeholder:text-muted-foreground focus:outline-primary\"\n rows={1}\n autoFocus\n aria-label=\"Message input\"\n />\n <ComposerAction />\n </ComposerPrimitive.Root>\n </div>\n );\n};\n\nconst ComposerAction: FC = () => {\n return (\n <div className=\"aui-composer-action-wrapper relative mx-1 mt-2 mb-2 flex items-center justify-between\">\n <ComposerAddAttachment />\n\n <ThreadPrimitive.If running={false}>\n <ComposerPrimitive.Send asChild>\n <TooltipIconButton\n tooltip=\"Send message\"\n side=\"bottom\"\n type=\"submit\"\n variant=\"default\"\n size=\"icon\"\n className=\"aui-composer-send mr-3 mb-3 size-[34px] rounded-full p-1\"\n aria-label=\"Send message\"\n >\n <ArrowUpIcon className=\"aui-composer-send-icon size-5\" />\n </TooltipIconButton>\n </ComposerPrimitive.Send>\n </ThreadPrimitive.If>\n\n <ThreadPrimitive.If running>\n <ComposerPrimitive.Cancel asChild>\n <Button\n type=\"button\"\n variant=\"default\"\n size=\"icon\"\n className=\"aui-composer-cancel size-[34px] rounded-full border border-muted-foreground/60 hover:bg-primary/75 dark:border-muted-foreground/90\"\n aria-label=\"Stop generating\"\n >\n <Square className=\"aui-composer-cancel-icon size-3.5 fill-white dark:fill-black\" />\n </Button>\n </ComposerPrimitive.Cancel>\n </ThreadPrimitive.If>\n </div>\n );\n};\n\nconst MessageError: FC = () => {\n return (\n <MessagePrimitive.Error>\n <ErrorPrimitive.Root className=\"aui-message-error-root mt-2 rounded-md border border-destructive bg-destructive/10 p-3 text-sm text-destructive dark:bg-destructive/5 dark:text-red-200\">\n <ErrorPrimitive.Message className=\"aui-message-error-message line-clamp-2\" />\n </ErrorPrimitive.Root>\n </MessagePrimitive.Error>\n );\n};\n\nconst AssistantMessage: FC = () => {\n return (\n <MessagePrimitive.Root asChild>\n <div\n className=\"aui-assistant-message-root relative mx-auto w-full max-w-[var(--thread-max-width)] animate-in py-4 duration-150 ease-out fade-in slide-in-from-bottom-1 last:mb-24\"\n data-role=\"assistant\"\n >\n <div className=\"aui-assistant-message-content text-sm mx-2 leading-5 break-words text-foreground\">\n <MessagePrimitive.Parts\n components={{\n Text: MarkdownText,\n tools: { Fallback: ToolFallback },\n }}\n />\n <MessageError />\n </div>\n\n <div className=\"aui-assistant-message-footer mt-2 ml-2 flex\">\n <BranchPicker />\n <AssistantActionBar />\n </div>\n </div>\n </MessagePrimitive.Root>\n );\n};\n\nconst AssistantActionBar: FC = () => {\n return (\n <ActionBarPrimitive.Root\n hideWhenRunning\n autohide=\"not-last\"\n autohideFloat=\"single-branch\"\n className=\"aui-assistant-action-bar-root col-start-3 row-start-2 -ml-1 flex gap-1 text-muted-foreground data-floating:absolute data-floating:rounded-md data-floating:border data-floating:bg-background data-floating:p-1 data-floating:shadow-sm\"\n >\n <ActionBarPrimitive.Copy asChild>\n <TooltipIconButton tooltip=\"Copy\">\n <MessagePrimitive.If copied>\n <CheckIcon />\n </MessagePrimitive.If>\n <MessagePrimitive.If copied={false}>\n <CopyIcon />\n </MessagePrimitive.If>\n </TooltipIconButton>\n </ActionBarPrimitive.Copy>\n <ActionBarPrimitive.Reload asChild>\n <TooltipIconButton tooltip=\"Refresh\">\n <RefreshCwIcon />\n </TooltipIconButton>\n </ActionBarPrimitive.Reload>\n </ActionBarPrimitive.Root>\n );\n};\n\nconst UserMessage: FC = () => {\n return (\n <MessagePrimitive.Root asChild>\n <div\n className=\"aui-user-message-root mx-auto grid w-full max-w-[var(--thread-max-width)] animate-in auto-rows-auto grid-cols-[minmax(72px,1fr)_auto] gap-y-2 px-2 py-4 duration-150 ease-out fade-in slide-in-from-bottom-1 first:mt-3 last:mb-5 [&:where(>*)]:col-start-2\"\n data-role=\"user\"\n >\n <UserMessageAttachments />\n\n <div className=\"aui-user-message-content-wrapper relative col-start-2 min-w-0\">\n <div className=\"aui-user-message-content text-sm rounded-3xl bg-muted px-5 py-2.5 break-words text-foreground\">\n <MessagePrimitive.Parts />\n </div>\n <div className=\"aui-user-action-bar-wrapper absolute top-1/2 left-0 -translate-x-full -translate-y-1/2 pr-2\">\n <UserActionBar />\n </div>\n </div>\n\n <BranchPicker className=\"aui-user-branch-picker col-span-full col-start-1 row-start-3 -mr-1 justify-end\" />\n </div>\n </MessagePrimitive.Root>\n );\n};\n\nconst UserActionBar: FC = () => {\n return (\n <ActionBarPrimitive.Root\n hideWhenRunning\n autohide=\"not-last\"\n className=\"aui-user-action-bar-root flex flex-col items-end\"\n >\n <ActionBarPrimitive.Edit asChild>\n <TooltipIconButton tooltip=\"Edit\" className=\"aui-user-action-edit p-4\">\n <PencilIcon />\n </TooltipIconButton>\n </ActionBarPrimitive.Edit>\n </ActionBarPrimitive.Root>\n );\n};\n\nconst EditComposer: FC = () => {\n return (\n <div className=\"aui-edit-composer-wrapper mx-auto flex w-full max-w-[var(--thread-max-width)] flex-col gap-4 px-2 first:mt-4\">\n <ComposerPrimitive.Root className=\"aui-edit-composer-root ml-auto flex w-full max-w-7/8 flex-col rounded-xl bg-muted\">\n <ComposerPrimitive.Input\n className=\"aui-edit-composer-input flex min-h-[60px] w-full resize-none bg-transparent p-4 text-foreground outline-none\"\n autoFocus\n />\n\n <div className=\"aui-edit-composer-footer mx-3 mb-3 flex items-center justify-center gap-2 self-end\">\n <ComposerPrimitive.Cancel asChild>\n <Button variant=\"ghost\" size=\"sm\" aria-label=\"Cancel edit\">\n Cancel\n </Button>\n </ComposerPrimitive.Cancel>\n <ComposerPrimitive.Send asChild>\n <Button size=\"sm\" aria-label=\"Update message\">\n Update\n </Button>\n </ComposerPrimitive.Send>\n </div>\n </ComposerPrimitive.Root>\n </div>\n );\n};\n\nconst BranchPicker: FC<BranchPickerPrimitive.Root.Props> = ({\n className,\n ...rest\n}) => {\n return (\n <BranchPickerPrimitive.Root\n hideWhenSingleBranch\n className={cn(\n \"aui-branch-picker-root mr-2 -ml-2 inline-flex items-center text-xs text-muted-foreground\",\n className,\n )}\n {...rest}\n >\n <BranchPickerPrimitive.Previous asChild>\n <TooltipIconButton tooltip=\"Previous\">\n <ChevronLeftIcon />\n </TooltipIconButton>\n </BranchPickerPrimitive.Previous>\n <span className=\"aui-branch-picker-state font-medium\">\n <BranchPickerPrimitive.Number /> / <BranchPickerPrimitive.Count />\n </span>\n <BranchPickerPrimitive.Next asChild>\n <TooltipIconButton tooltip=\"Next\">\n <ChevronRightIcon />\n </TooltipIconButton>\n </BranchPickerPrimitive.Next>\n </BranchPickerPrimitive.Root>\n );\n};\n\nconst SystemMessage: FC = () => {\n return (\n <MessagePrimitive.Root asChild>\n <div\n className=\"aui-system-message-root mx-auto w-full max-w-[var(--thread-max-width)] px-2 py-4 animate-in fade-in slide-in-from-bottom-1\"\n data-role=\"system\"\n >\n <div className=\"aui-system-message-card flex w-full flex-wrap items-start gap-3 rounded-3xl border px-5 py-4 text-left text-sm bg-background/70 dark:bg-muted/30\">\n <AlertCircleIcon className=\"aui-system-message-icon mt-0.5 size-4 shrink-0 text-blue-500 dark:text-blue-300\" />\n <div className=\"aui-system-message-body flex flex-col gap-1\">\n <span className=\"aui-system-message-title font-medium text-foreground\">\n System notice\n </span>\n <div className=\"aui-system-message-content leading-relaxed text-muted-foreground\">\n <MessagePrimitive.Parts components={{ Text: MarkdownText }} />\n </div>\n </div>\n </div>\n </div>\n </MessagePrimitive.Root>\n );\n};\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nexport { Button, buttonVariants };\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n\nexport function generateSessionId(): string {\n // Use crypto.randomUUID if available (modern browsers), otherwise fallback\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n // Fallback UUID v4 implementation\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n const r = Math.random() * 16 | 0;\n const v = c == 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n}","\"use client\";\n\nimport \"@assistant-ui/react-markdown/styles/dot.css\";\n\nimport {\n type CodeHeaderProps,\n MarkdownTextPrimitive,\n unstable_memoizeMarkdownComponents as memoizeMarkdownComponents,\n useIsMarkdownCodeBlock,\n} from \"@assistant-ui/react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport { type FC, memo, useState } from \"react\";\nimport { CheckIcon, CopyIcon } from \"lucide-react\";\n\nimport { TooltipIconButton } from \"@/components/assistant-ui/tooltip-icon-button\";\nimport { cn } from \"@/lib/utils\";\n\nconst MarkdownTextImpl = () => {\n return (\n <MarkdownTextPrimitive\n remarkPlugins={[remarkGfm]}\n className=\"aui-md\"\n components={defaultComponents}\n />\n );\n};\n\nexport const MarkdownText = memo(MarkdownTextImpl);\n\nconst CodeHeader: FC<CodeHeaderProps> = ({ language, code }) => {\n const { isCopied, copyToClipboard } = useCopyToClipboard();\n const onCopy = () => {\n if (!code || isCopied) return;\n copyToClipboard(code);\n };\n\n return (\n <div className=\"aui-code-header-root mt-4 flex items-center justify-between gap-4 rounded-t-lg bg-muted-foreground/15 px-4 py-2 text-sm font-semibold text-foreground dark:bg-muted-foreground/20\">\n <span className=\"aui-code-header-language lowercase [&>span]:text-xs\">\n {language}\n </span>\n <TooltipIconButton tooltip=\"Copy\" onClick={onCopy}>\n {!isCopied && <CopyIcon />}\n {isCopied && <CheckIcon />}\n </TooltipIconButton>\n </div>\n );\n};\n\nconst useCopyToClipboard = ({\n copiedDuration = 3000,\n}: {\n copiedDuration?: number;\n} = {}) => {\n const [isCopied, setIsCopied] = useState<boolean>(false);\n\n const copyToClipboard = (value: string) => {\n if (!value) return;\n\n navigator.clipboard.writeText(value).then(() => {\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), copiedDuration);\n });\n };\n\n return { isCopied, copyToClipboard };\n};\n\nconst defaultComponents = memoizeMarkdownComponents({\n h1: ({ className, ...props }) => (\n <h1\n className={cn(\n \"aui-md-h1 mb-8 scroll-m-20 text-4xl font-extrabold tracking-tight last:mb-0\",\n className,\n )}\n {...props}\n />\n ),\n h2: ({ className, ...props }) => (\n <h2\n className={cn(\n \"aui-md-h2 mt-8 mb-4 scroll-m-20 text-3xl font-semibold tracking-tight first:mt-0 last:mb-0\",\n className,\n )}\n {...props}\n />\n ),\n h3: ({ className, ...props }) => (\n <h3\n className={cn(\n \"aui-md-h3 mt-6 mb-4 scroll-m-20 text-2xl font-semibold tracking-tight first:mt-0 last:mb-0\",\n className,\n )}\n {...props}\n />\n ),\n h4: ({ className, ...props }) => (\n <h4\n className={cn(\n \"aui-md-h4 mt-6 mb-4 scroll-m-20 text-xl font-semibold tracking-tight first:mt-0 last:mb-0\",\n className,\n )}\n {...props}\n />\n ),\n h5: ({ className, ...props }) => (\n <h5\n className={cn(\n \"aui-md-h5 my-4 text-lg font-semibold first:mt-0 last:mb-0\",\n className,\n )}\n {...props}\n />\n ),\n h6: ({ className, ...props }) => (\n <h6\n className={cn(\n \"aui-md-h6 my-4 font-semibold first:mt-0 last:mb-0\",\n className,\n )}\n {...props}\n />\n ),\n p: ({ className, ...props }) => (\n <p\n className={cn(\n \"aui-md-p mt-5 mb-5 leading-7 first:mt-0 last:mb-0\",\n className,\n )}\n {...props}\n />\n ),\n a: ({ className, ...props }) => (\n <a\n className={cn(\n \"aui-md-a font-medium text-primary underline underline-offset-4\",\n className,\n )}\n {...props}\n />\n ),\n blockquote: ({ className, ...props }) => (\n <blockquote\n className={cn(\"aui-md-blockquote border-l-2 pl-6 italic\", className)}\n {...props}\n />\n ),\n ul: ({ className, ...props }) => (\n <ul\n className={cn(\"aui-md-ul my-5 ml-6 list-disc [&>li]:mt-2\", className)}\n {...props}\n />\n ),\n ol: ({ className, ...props }) => (\n <ol\n className={cn(\"aui-md-ol my-5 ml-6 list-decimal [&>li]:mt-2\", className)}\n {...props}\n />\n ),\n hr: ({ className, ...props }) => (\n <hr className={cn(\"aui-md-hr my-5 border-b\", className)} {...props} />\n ),\n table: ({ className, ...props }) => (\n <table\n className={cn(\n \"aui-md-table my-5 w-full border-separate border-spacing-0 overflow-y-auto\",\n className,\n )}\n {...props}\n />\n ),\n th: ({ className, ...props }) => (\n <th\n className={cn(\n \"aui-md-th bg-muted px-4 py-2 text-left font-bold first:rounded-tl-lg last:rounded-tr-lg [&[align=center]]:text-center [&[align=right]]:text-right\",\n className,\n )}\n {...props}\n />\n ),\n td: ({ className, ...props }) => (\n <td\n className={cn(\n \"aui-md-td border-b border-l px-4 py-2 text-left last:border-r [&[align=center]]:text-center [&[align=right]]:text-right\",\n className,\n )}\n {...props}\n />\n ),\n tr: ({ className, ...props }) => (\n <tr\n className={cn(\n \"aui-md-tr m-0 border-b p-0 first:border-t [&:last-child>td:first-child]:rounded-bl-lg [&:last-child>td:last-child]:rounded-br-lg\",\n className,\n )}\n {...props}\n />\n ),\n sup: ({ className, ...props }) => (\n <sup\n className={cn(\"aui-md-sup [&>a]:text-xs [&>a]:no-underline\", className)}\n {...props}\n />\n ),\n pre: ({ className, ...props }) => (\n <pre\n className={cn(\n \"aui-md-pre overflow-x-auto !rounded-t-none rounded-b-lg bg-accent p-6 text-black text-[12px]\",\n className,\n )}\n {...props}\n />\n ),\n code: function Code({ className, ...props }) {\n const isCodeBlock = useIsMarkdownCodeBlock();\n return (\n <code\n className={cn(\n !isCodeBlock &&\n \"aui-md-inline-code rounded border bg-muted text-[12px]\",\n className,\n )}\n {...props}\n />\n );\n },\n CodeHeader,\n});\n","\"use client\";\n\nimport { ComponentPropsWithRef, forwardRef } from \"react\";\nimport { Slottable } from \"@radix-ui/react-slot\";\n\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport { Button } from \"@/components/ui/button\";\nimport { cn } from \"@/lib/utils\";\n\nexport type TooltipIconButtonProps = ComponentPropsWithRef<typeof Button> & {\n tooltip: string;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n};\n\nexport const TooltipIconButton = forwardRef<\n HTMLButtonElement,\n TooltipIconButtonProps\n>(({ children, tooltip, side = \"bottom\", className, ...rest }, ref) => {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n {...rest}\n className={cn(\"aui-button-icon size-6 p-1\", className)}\n ref={ref}\n >\n <Slottable>{children}</Slottable>\n <span className=\"aui-sr-only sr-only\">{tooltip}</span>\n </Button>\n </TooltipTrigger>\n <TooltipContent side={side}>{tooltip}</TooltipContent>\n </Tooltip>\n );\n});\n\nTooltipIconButton.displayName = \"TooltipIconButton\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n );\n}\n\nfunction Tooltip({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n );\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in rounded-md bg-primary px-3 py-1.5 text-xs text-balance text-primary-foreground fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n className,\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-primary fill-primary\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","import type { ToolCallMessagePartComponent } from \"@assistant-ui/react\";\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { Button } from \"@/components/ui/button\";\n\nexport const ToolFallback: ToolCallMessagePartComponent = ({\n toolName,\n argsText,\n result,\n}) => {\n const [isCollapsed, setIsCollapsed] = useState(true);\n return (\n <div className=\"aui-tool-fallback-root mb-4 flex w-full flex-col gap-3 rounded-lg border py-3\">\n <div className=\"aui-tool-fallback-header flex items-center gap-2 px-4\">\n <CheckIcon className=\"aui-tool-fallback-icon size-4\" />\n <p className=\"aui-tool-fallback-title flex-grow\">\n Used tool: <b>{toolName}</b>\n </p>\n <Button onClick={() => setIsCollapsed(!isCollapsed)}>\n {isCollapsed ? <ChevronUpIcon /> : <ChevronDownIcon />}\n </Button>\n </div>\n {!isCollapsed && (\n <div className=\"aui-tool-fallback-content flex flex-col gap-2 border-t pt-2 bg-muted\">\n <div className=\"aui-tool-fallback-args-root px-4\">\n <pre className=\"aui-tool-fallback-args-value whitespace-pre-wrap\">\n {argsText}\n </pre>\n </div>\n {result !== undefined && (\n <div className=\"aui-tool-fallback-result-root border-t border-dashed px-4 pt-2\">\n <p className=\"aui-tool-fallback-result-header font-semibold\">\n Result:\n </p>\n <pre className=\"aui-tool-fallback-result-content whitespace-pre-wrap text-[012px]\">\n {typeof result === \"string\"\n ? result\n : JSON.stringify(result, null, 2)}\n </pre>\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n","\"use client\";\n\nimport { PropsWithChildren, useEffect, useState, type FC } from \"react\";\nimport Image from \"next/image\";\nimport { XIcon, PlusIcon, FileText } from \"lucide-react\";\nimport {\n AttachmentPrimitive,\n ComposerPrimitive,\n MessagePrimitive,\n useAssistantState,\n useAssistantApi,\n} from \"@assistant-ui/react\";\nimport { useShallow } from \"zustand/shallow\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogTrigger,\n} from \"@/components/ui/dialog\";\nimport { Avatar, AvatarImage, AvatarFallback } from \"@/components/ui/avatar\";\nimport { TooltipIconButton } from \"@/components/assistant-ui/tooltip-icon-button\";\nimport { cn } from \"@/lib/utils\";\n\nconst useFileSrc = (file: File | undefined) => {\n const [src, setSrc] = useState<string | undefined>(undefined);\n\n useEffect(() => {\n if (!file) {\n setSrc(undefined);\n return;\n }\n\n const objectUrl = URL.createObjectURL(file);\n setSrc(objectUrl);\n\n return () => {\n URL.revokeObjectURL(objectUrl);\n };\n }, [file]);\n\n return src;\n};\n\nconst useAttachmentSrc = () => {\n const { file, src } = useAssistantState(\n useShallow(({ attachment }): { file?: File; src?: string } => {\n if (attachment.type !== \"image\") return {};\n if (attachment.file) return { file: attachment.file };\n const src = attachment.content?.filter((c) => c.type === \"image\")[0]\n ?.image;\n if (!src) return {};\n return { src };\n }),\n );\n\n return useFileSrc(file) ?? src;\n};\n\ntype AttachmentPreviewProps = {\n src: string;\n};\n\nconst AttachmentPreview: FC<AttachmentPreviewProps> = ({ src }) => {\n const [isLoaded, setIsLoaded] = useState(false);\n return (\n <Image\n src={src}\n alt=\"Image Preview\"\n width={1}\n height={1}\n className={\n isLoaded\n ? \"aui-attachment-preview-image-loaded block h-auto max-h-[80vh] w-auto max-w-full object-contain\"\n : \"aui-attachment-preview-image-loading hidden\"\n }\n onLoadingComplete={() => setIsLoaded(true)}\n priority={false}\n />\n );\n};\n\nconst AttachmentPreviewDialog: FC<PropsWithChildren> = ({ children }) => {\n const src = useAttachmentSrc();\n\n if (!src) return children;\n\n return (\n <Dialog>\n <DialogTrigger\n className=\"aui-attachment-preview-trigger cursor-pointer transition-colors hover:bg-accent/50\"\n asChild\n >\n {children}\n </DialogTrigger>\n <DialogContent className=\"aui-attachment-preview-dialog-content p-2 sm:max-w-3xl [&_svg]:text-background [&>button]:rounded-full [&>button]:bg-foreground/60 [&>button]:p-1 [&>button]:opacity-100 [&>button]:!ring-0 [&>button]:hover:[&_svg]:text-destructive\">\n <DialogTitle className=\"aui-sr-only sr-only\">\n Image Attachment Preview\n </DialogTitle>\n <div className=\"aui-attachment-preview relative mx-auto flex max-h-[80dvh] w-full items-center justify-center overflow-hidden bg-background\">\n <AttachmentPreview src={src} />\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n\nconst AttachmentThumb: FC = () => {\n const isImage = useAssistantState(\n ({ attachment }) => attachment.type === \"image\",\n );\n const src = useAttachmentSrc();\n\n return (\n <Avatar className=\"aui-attachment-tile-avatar h-full w-full rounded-none\">\n <AvatarImage\n src={src}\n alt=\"Attachment preview\"\n className=\"aui-attachment-tile-image object-cover\"\n />\n <AvatarFallback delayMs={isImage ? 200 : 0}>\n <FileText className=\"aui-attachment-tile-fallback-icon size-8 text-muted-foreground\" />\n </AvatarFallback>\n </Avatar>\n );\n};\n\nconst AttachmentUI: FC = () => {\n const api = useAssistantApi();\n const isComposer = api.attachment.source === \"composer\";\n\n const isImage = useAssistantState(\n ({ attachment }) => attachment.type === \"image\",\n );\n const typeLabel = useAssistantState(({ attachment }) => {\n const type = attachment.type;\n switch (type) {\n case \"image\":\n return \"Image\";\n case \"document\":\n return \"Document\";\n case \"file\":\n return \"File\";\n default:\n const _exhaustiveCheck: never = type;\n throw new Error(`Unknown attachment type: ${_exhaustiveCheck}`);\n }\n });\n\n return (\n <Tooltip>\n <AttachmentPrimitive.Root\n className={cn(\n \"aui-attachment-root relative\",\n isImage &&\n \"aui-attachment-root-composer only:[&>#attachment-tile]:size-24\",\n )}\n >\n <AttachmentPreviewDialog>\n <TooltipTrigger asChild>\n <div\n className={cn(\n \"aui-attachment-tile size-14 cursor-pointer overflow-hidden rounded-[14px] border bg-muted transition-opacity hover:opacity-75\",\n isComposer &&\n \"aui-attachment-tile-composer border-foreground/20\",\n )}\n role=\"button\"\n id=\"attachment-tile\"\n aria-label={`${typeLabel} attachment`}\n >\n <AttachmentThumb />\n </div>\n </TooltipTrigger>\n </AttachmentPreviewDialog>\n {isComposer && <AttachmentRemove />}\n </AttachmentPrimitive.Root>\n <TooltipContent side=\"top\">\n <AttachmentPrimitive.Name />\n </TooltipContent>\n </Tooltip>\n );\n};\n\nconst AttachmentRemove: FC = () => {\n return (\n <AttachmentPrimitive.Remove asChild>\n <TooltipIconButton\n tooltip=\"Remove file\"\n className=\"aui-attachment-tile-remove absolute top-1.5 right-1.5 size-3.5 rounded-full bg-white text-muted-foreground opacity-100 shadow-sm hover:!bg-white [&_svg]:text-black hover:[&_svg]:text-destructive\"\n side=\"top\"\n >\n <XIcon className=\"aui-attachment-remove-icon size-3 dark:stroke-[2.5px]\" />\n </TooltipIconButton>\n </AttachmentPrimitive.Remove>\n );\n};\n\nexport const UserMessageAttachments: FC = () => {\n return (\n <div className=\"aui-user-message-attachments-end col-span-full col-start-1 row-start-1 flex w-full flex-row justify-end gap-2\">\n <MessagePrimitive.Attachments components={{ Attachment: AttachmentUI }} />\n </div>\n );\n};\n\nexport const ComposerAttachments: FC = () => {\n return (\n <div className=\"aui-composer-attachments mb-2 flex w-full flex-row items-center gap-2 overflow-x-auto px-1.5 pt-0.5 pb-1 empty:hidden\">\n <ComposerPrimitive.Attachments\n components={{ Attachment: AttachmentUI }}\n />\n </div>\n );\n};\n\nexport const ComposerAddAttachment: FC = () => {\n return (\n <ComposerPrimitive.AddAttachment asChild>\n <TooltipIconButton\n tooltip=\"Add Attachment\"\n side=\"bottom\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"aui-composer-add-attachment size-[34px] rounded-full p-1 text-xs font-semibold hover:bg-muted-foreground/15 dark:border-muted-foreground/15 dark:hover:bg-muted-foreground/30\"\n aria-label=\"Add Attachment\"\n >\n <PlusIcon className=\"aui-attachment-add-icon size-5 stroke-[1.5px]\" />\n </TooltipIconButton>\n </ComposerPrimitive.AddAttachment>\n );\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { XIcon } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction Dialog({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />;\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean;\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg\",\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n );\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n );\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction Avatar({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Root>) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n className={cn(\n \"relative flex size-8 shrink-0 overflow-hidden rounded-full\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarImage({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn(\"aspect-square size-full\", className)}\n {...props}\n />\n );\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n \"flex size-full items-center justify-center rounded-full bg-muted\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Avatar, AvatarImage, AvatarFallback };\n","\"use client\";\n\nimport { createContext, useContext, useState, ReactNode, useCallback } from \"react\";\nimport type { ThreadMessageLike } from \"@assistant-ui/react\";\n\n/**\n * Generate a UUID v4 session ID (matches backend's generate_session_id)\n */\nfunction generateSessionId(): string {\n return crypto.randomUUID();\n}\n\n/**\n * Thread Context Value\n *\n * Manages global state for multi-thread support:\n * - Current active thread ID\n * - Message history for all threads\n * - Thread metadata (title, archived status)\n */\nexport type ThreadContextValue = {\n // Current thread\n currentThreadId: string;\n setCurrentThreadId: (id: string) => void;\n threadViewKey: number;\n bumpThreadViewKey: () => void;\n\n // Thread messages (Map: threadId -> messages)\n threads: Map<string, ThreadMessageLike[]>;\n setThreads: React.Dispatch<React.SetStateAction<Map<string, ThreadMessageLike[]>>>;\n\n // Thread metadata (Map: threadId -> { title, status })\n threadMetadata: Map<string, ThreadMetadata>;\n setThreadMetadata: React.Dispatch<React.SetStateAction<Map<string, ThreadMetadata>>>;\n\n // Thread counter for sequential titles\n threadCnt: number;\n setThreadCnt: React.Dispatch<React.SetStateAction<number>>;\n\n // Helper methods\n getThreadMessages: (threadId: string) => ThreadMessageLike[];\n setThreadMessages: (threadId: string, messages: ThreadMessageLike[]) => void;\n getThreadMetadata: (threadId: string) => ThreadMetadata | undefined;\n updateThreadMetadata: (threadId: string, updates: Partial<ThreadMetadata>) => void;\n};\n\nexport type ThreadMetadata = {\n title: string;\n status: \"regular\" | \"archived\" | \"pending\";\n lastActiveAt?: string | number;\n};\n\n/**\n * Thread Context\n *\n * IMPORTANT: Do not use this directly. Use the useThreadContext hook instead.\n */\nconst ThreadContext = createContext<ThreadContextValue | null>(null);\n\n/**\n * Hook to access Thread Context\n *\n * Must be used within a ThreadContextProvider\n *\n * @example\n * ```tsx\n * const { currentThreadId, setCurrentThreadId } = useThreadContext();\n * ```\n */\nexport function useThreadContext(): ThreadContextValue {\n const context = useContext(ThreadContext);\n if (!context) {\n throw new Error(\n \"useThreadContext must be used within ThreadContextProvider. \" +\n \"Wrap your app with <ThreadContextProvider>...</ThreadContextProvider>\"\n );\n }\n return context;\n}\n\n/**\n * Thread Context Provider Props\n */\nexport type ThreadContextProviderProps = {\n children: ReactNode;\n /**\n * Initial thread ID to set as current\n * @default Generated UUID v4 (matches backend's generate_session_id)\n */\n initialThreadId?: string;\n};\n\n/**\n * Thread Context Provider\n *\n * Provides global state for multi-thread management.\n * Should be placed high in your component tree, typically in your root layout.\n *\n * @example\n * ```tsx\n * // app/layout.tsx\n * export default function Layout({ children }) {\n * return (\n * <ThreadContextProvider>\n * <AomiRuntimeProvider>\n * {children}\n * </AomiRuntimeProvider>\n * </ThreadContextProvider>\n * );\n * }\n * ```\n */\nexport function ThreadContextProvider({\n children,\n initialThreadId,\n}: ThreadContextProviderProps) {\n\n // Generate UUID v4 on initialization if no initialThreadId provided\n const [generateThreadId] = useState(() => {\n const id = initialThreadId || generateSessionId();\n console.log('🔵 [ThreadContext] Initialized with thread ID:', id);\n return id;\n });\n\n const [threadCnt, setThreadCnt] = useState<number>(1); // For sequential \"Chat N\" titles\n\n // Thread messages storage\n const [threads, setThreads] = useState<Map<string, ThreadMessageLike[]>>(\n () => new Map([[generateThreadId, []]])\n );\n\n // Thread metadata storage\n const [threadMetadata, setThreadMetadata] = useState<Map<string, ThreadMetadata>>(\n () =>\n new Map([\n [\n generateThreadId,\n { title: \"New Chat\", status: \"pending\", lastActiveAt: new Date().toISOString() },\n ],\n ])\n );\n\n // Ensure a thread has placeholder metadata/messages before use\n const ensureThreadExists = useCallback(\n (threadId: string) => {\n setThreadMetadata((prev) => {\n if (prev.has(threadId)) return prev;\n const next = new Map(prev);\n next.set(threadId, { title: \"New Chat\", status: \"regular\", lastActiveAt: new Date().toISOString() });\n return next;\n });\n\n setThreads((prev) => {\n if (prev.has(threadId)) return prev;\n const next = new Map(prev);\n next.set(threadId, []);\n return next;\n });\n },\n []\n );\n\n // Current thread ID\n const [currentThreadId, _setCurrentThreadId] = useState(generateThreadId);\n const [threadViewKey, setThreadViewKey] = useState(0);\n\n const bumpThreadViewKey = useCallback(() => {\n setThreadViewKey((prev) => prev + 1);\n }, []);\n\n const setCurrentThreadId = useCallback(\n (threadId: string) => {\n ensureThreadExists(threadId);\n _setCurrentThreadId(threadId);\n },\n [ensureThreadExists]\n );\n\n // Helper: Get messages for a specific thread\n const getThreadMessages = useCallback(\n (threadId: string): ThreadMessageLike[] => {\n return threads.get(threadId) || [];\n },\n [threads]\n );\n\n // Helper: Set messages for a specific thread\n const setThreadMessages = useCallback(\n (threadId: string, messages: ThreadMessageLike[]) => {\n setThreads((prev) => {\n const next = new Map(prev);\n next.set(threadId, messages);\n return next;\n });\n },\n []\n );\n\n // Helper: Get metadata for a specific thread\n const getThreadMetadata = useCallback(\n (threadId: string): ThreadMetadata | undefined => {\n return threadMetadata.get(threadId);\n },\n [threadMetadata]\n );\n\n // Helper: Update metadata for a specific thread\n const updateThreadMetadata = useCallback(\n (threadId: string, updates: Partial<ThreadMetadata>) => {\n setThreadMetadata((prev) => {\n const existing = prev.get(threadId);\n if (!existing) {\n console.warn(`Thread metadata not found for threadId: ${threadId}`);\n return prev;\n }\n\n const next = new Map(prev);\n next.set(threadId, { ...existing, ...updates });\n return next;\n });\n },\n []\n );\n\n const value: ThreadContextValue = {\n currentThreadId,\n setCurrentThreadId,\n threadViewKey,\n bumpThreadViewKey,\n threads,\n setThreads,\n threadMetadata,\n setThreadMetadata,\n threadCnt,\n setThreadCnt,\n getThreadMessages,\n setThreadMessages,\n getThreadMetadata,\n updateThreadMetadata,\n };\n\n return (\n <ThreadContext.Provider value={value}>\n {children}\n </ThreadContext.Provider>\n );\n}\n\n/**\n * Hook to get current thread messages\n *\n * Convenience hook that returns messages for the current thread\n *\n * @example\n * ```tsx\n * const messages = useCurrentThreadMessages();\n * ```\n */\nexport function useCurrentThreadMessages(): ThreadMessageLike[] {\n const { currentThreadId, getThreadMessages } = useThreadContext();\n return getThreadMessages(currentThreadId);\n}\n\n/**\n * Hook to get current thread metadata\n *\n * Convenience hook that returns metadata for the current thread\n *\n * @example\n * ```tsx\n * const metadata = useCurrentThreadMetadata();\n * console.log(metadata.title, metadata.status);\n * ```\n */\nexport function useCurrentThreadMetadata(): ThreadMetadata | undefined {\n const { currentThreadId, getThreadMetadata } = useThreadContext();\n return getThreadMetadata(currentThreadId);\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport Link from \"next/link\";\nimport Image from \"next/image\";\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarHeader,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarRail,\n} from \"@/components/ui/sidebar\";\nimport { ThreadList } from \"@/components/assistant-ui/thread-list\";\n\ntype ThreadListSidebarProps = React.ComponentProps<typeof Sidebar> & {\n /** Optional footer component (e.g., WalletFooter from consumer app) */\n footer?: React.ReactNode;\n};\n\nexport function ThreadListSidebar({\n footer,\n ...props\n}: ThreadListSidebarProps) {\n return (\n <Sidebar\n collapsible=\"offcanvas\"\n variant=\"inset\"\n className=\"relative\"\n {...props}\n >\n <SidebarHeader className=\"aomi-sidebar-header\">\n <div className=\"aomi-sidebar-header-content flex items-center justify-between\">\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton size=\"lg\" asChild>\n <Link\n href=\"https://aomi.dev\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <div className=\"aomi-sidebar-header-icon-wrapper flex aspect-square size-8 items-center justify-center rounded-lg bg-white\">\n <Image\n src=\"/assets/images/a.svg\"\n alt=\"Logo\"\n width={28}\n height={28}\n className=\"aomi-sidebar-header-icon size-7 ml-3\"\n priority\n />\n </div>\n </Link>\n </SidebarMenuButton>\n </SidebarMenuItem>\n </SidebarMenu>\n </div>\n </SidebarHeader>\n <SidebarContent className=\"aomi-sidebar-content\">\n <ThreadList />\n </SidebarContent>\n <SidebarRail />\n {footer && (\n <SidebarFooter className=\"aomi-sidebar-footer border-t border-sm py-4\">\n {footer}\n </SidebarFooter>\n )}\n </Sidebar>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, VariantProps } from \"class-variance-authority\";\nimport { PanelLeftIcon } from \"lucide-react\";\n\nimport { useIsMobile } from \"@/hooks/use-mobile\";\nimport { cn } from \"@/lib/utils\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Separator } from \"@/components/ui/separator\";\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"@/components/ui/sheet\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\";\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\";\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nconst SIDEBAR_WIDTH = \"16rem\";\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\";\nconst SIDEBAR_WIDTH_ICON = \"3rem\";\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\";\nconst SIDEBAR_MIN_WIDTH = 100; // px\nconst SIDEBAR_MAX_WIDTH = 200; // px\n\ntype SidebarContextProps = {\n state: \"expanded\" | \"collapsed\";\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n sidebarWidth: number;\n setSidebarWidth: (width: number) => void;\n};\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null);\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext);\n if (!context) {\n throw new Error(\"useSidebar must be used within a SidebarProvider.\");\n }\n\n return context;\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = React.useState(false);\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen);\n const open = openProp ?? _open;\n\n // Sidebar width state (in pixels)\n const [sidebarWidth, setSidebarWidth] = React.useState(256); // 16rem = 256px\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === \"function\" ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n },\n [setOpenProp, open],\n );\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open);\n }, [isMobile, setOpen, setOpenMobile]);\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey)\n ) {\n event.preventDefault();\n toggleSidebar();\n }\n };\n\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [toggleSidebar]);\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? \"expanded\" : \"collapsed\";\n\n const contextValue = React.useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n sidebarWidth,\n setSidebarWidth,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar, sidebarWidth],\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n \"--sidebar-width\": `${sidebarWidth}px`,\n \"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n \"group/sidebar-wrapper flex h-full w-full has-data-[variant=offcanvas]:bg-sidebar\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\nfunction Sidebar({\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n side?: \"left\" | \"right\";\n variant?: \"sidebar\" | \"floating\" | \"inset\";\n collapsible?: \"offcanvas\" | \"icon\" | \"none\";\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === \"none\") {\n return (\n <div\n data-slot=\"sidebar\"\n className={cn(\n \"flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n );\n }\n\n\n return (\n <div\n className={cn(\n \"relative group peer hidden text-sidebar-foreground md:block\",\n \"w-[var(--sidebar-width)]\",\n \"data-[collapsible=offcanvas]:w-0\",\n \"transition-[width] duration-200 ease-linear\",\n )}\n data-state={state}\n data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n \"relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear\",\n \"group-data-[collapsible=offcanvas]:w-0\",\n \"group-data-[side=right]:rotate-180\",\n variant === \"floating\" || variant === \"inset\"\n ? \"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\",\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n \"fixed inset-y-0 z-10 hidden h-full w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex\",\n side === \"left\"\n ? \"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]\"\n : \"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]\",\n // Adjust the padding for floating and inset variants.\n variant === \"floating\" || variant === \"inset\"\n ? \"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l\",\n className,\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"flex h-full w-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow-sm\"\n >\n {children}\n </div>\n </div>\n </div>\n );\n}\n\nfunction SidebarTrigger({\n className,\n onClick,\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\"size-7\", className)}\n onClick={(event) => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<\"button\">) {\n const { toggleSidebar, sidebarWidth, setSidebarWidth, setOpen } = useSidebar();\n const isDraggingRef = React.useRef(false);\n const startXRef = React.useRef(0);\n const startWidthRef = React.useRef(0);\n const hasDraggedRef = React.useRef(false);\n const rafRef = React.useRef<number | null>(null);\n\n const handleMouseDown = React.useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n isDraggingRef.current = true;\n hasDraggedRef.current = false;\n startXRef.current = e.clientX;\n startWidthRef.current = sidebarWidth;\n document.body.style.cursor = \"ew-resize\";\n document.body.style.userSelect = \"none\";\n },\n [sidebarWidth]\n );\n\n React.useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n if (!isDraggingRef.current) return;\n\n // Cancel any pending RAF\n if (rafRef.current) {\n cancelAnimationFrame(rafRef.current);\n }\n\n rafRef.current = requestAnimationFrame(() => {\n const deltaX = e.clientX - startXRef.current;\n if (Math.abs(deltaX) > 5) {\n hasDraggedRef.current = true;\n }\n\n const rawWidth = startWidthRef.current + deltaX;\n\n if (rawWidth < SIDEBAR_MIN_WIDTH) {\n setOpen(false);\n } else {\n setOpen(true);\n setSidebarWidth(Math.min(SIDEBAR_MAX_WIDTH, rawWidth));\n }\n });\n };\n\n const handleMouseUp = () => {\n if (!isDraggingRef.current) return;\n isDraggingRef.current = false;\n document.body.style.cursor = \"\";\n document.body.style.userSelect = \"\";\n if (rafRef.current) {\n cancelAnimationFrame(rafRef.current);\n }\n };\n\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, [setSidebarWidth, setOpen]);\n\n const handleClick = React.useCallback(() => {\n if (!hasDraggedRef.current) {\n toggleSidebar();\n }\n }, [toggleSidebar]);\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onMouseDown={handleMouseDown}\n onClick={handleClick}\n title=\"Drag to resize, click to toggle\"\n className={cn(\n \"absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-sidebar-border sm:flex\",\n \"cursor-ew-resize\",\n \"group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full hover:group-data-[collapsible=offcanvas]:bg-sidebar\",\n \"[[data-side=left][data-collapsible=offcanvas]_&]:-right-2\",\n \"[[data-side=right][data-collapsible=offcanvas]_&]:-left-2\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<\"main\">) {\n return (\n <main\n data-slot=\"sidebar-inset\"\n className={cn(\"relative flex w-full flex-1 flex-col bg-background\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarInput({\n className,\n ...props\n}: React.ComponentProps<typeof Input>) {\n return (\n <Input\n data-slot=\"sidebar-input\"\n data-sidebar=\"input\"\n className={cn(\"h-8 w-full bg-background shadow-none\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn(\"flex mr-2 flex-col gap-2 p-2\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n className={cn(\"mx-2 w-auto bg-sidebar-border\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(\n \"flex mr-2 min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn(\"relative flex w-full min-w-0 flex-col p-2\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"div\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"div\";\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n \"flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 ring-sidebar-ring outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n \"group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n \"absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn(\"w-full text-sm\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn(\"flex w-full min-w-0 flex-col gap-1\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn(\"group/menu-item relative\", className)}\n {...props}\n />\n );\n}\n\nconst sidebarMenuButtonVariants = cva(\n \"peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n outline:\n \"bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]\",\n },\n size: {\n default: \"h-8 text-sm\",\n sm: \"h-7 text-xs\",\n lg: \"h-12 text-sm group-data-[collapsible=icon]:p-0!\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n tooltip,\n className,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? Slot : \"button\";\n const { isMobile, state } = useSidebar();\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n\n if (!tooltip) {\n return button;\n }\n\n if (typeof tooltip === \"string\") {\n tooltip = {\n children: tooltip,\n };\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent\n side=\"right\"\n align=\"center\"\n hidden={state !== \"collapsed\" || isMobile}\n {...tooltip}\n />\n </Tooltip>\n );\n}\n\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean;\n showOnHover?: boolean;\n}) {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n \"absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform peer-hover/menu-button:text-sidebar-accent-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n showOnHover &&\n \"group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground data-[state=open]:opacity-100 md:opacity-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuBadge({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n \"pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium text-sidebar-foreground tabular-nums select-none\",\n \"peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showIcon?: boolean;\n}) {\n // Random width between 50 to 90%.\n const width = React.useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n }, []);\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn(\"flex h-8 items-center gap-2 rounded-md px-2\", className)}\n {...props}\n >\n {showIcon && (\n <Skeleton\n className=\"size-4 rounded-md\"\n data-sidebar=\"menu-skeleton-icon\"\n />\n )}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n \"--skeleton-width\": width,\n } as React.CSSProperties\n }\n />\n </div>\n );\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n \"mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubItem({\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn(\"group/menu-sub-item relative\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubButton({\n asChild = false,\n size = \"md\",\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<\"a\"> & {\n asChild?: boolean;\n size?: \"sm\" | \"md\";\n isActive?: boolean;\n}) {\n const Comp = asChild ? Slot : \"a\";\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n \"flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground ring-sidebar-ring outline-hidden hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground\",\n \"data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground\",\n size === \"sm\" && \"text-xs\",\n size === \"md\" && \"text-sm\",\n \"group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n};\n","import * as React from \"react\";\n\nconst MOBILE_BREAKPOINT = 768;\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(\n undefined,\n );\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n };\n mql.addEventListener(\"change\", onChange);\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n return () => mql.removeEventListener(\"change\", onChange);\n }, []);\n\n return !!isMobile;\n}\n","import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"flex h-9 w-full min-w-0 rounded-md border-sm border-input bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none selection:bg-primary selection:text-primary-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:bg-input/30\",\n \"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50\",\n \"aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Separator };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\";\nimport { XIcon } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />;\n}\n\nfunction SheetTrigger({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />;\n}\n\nfunction SheetClose({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />;\n}\n\nfunction SheetPortal({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />;\n}\n\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n \"fixed z-50 flex flex-col gap-4 bg-background shadow-lg transition ease-in-out data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:animate-in data-[state=open]:duration-500\",\n side === \"right\" &&\n \"inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm\",\n side === \"left\" &&\n \"inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm\",\n side === \"top\" &&\n \"inset-x-0 top-0 h-auto border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top\",\n side === \"bottom\" &&\n \"inset-x-0 bottom-0 h-auto border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom\",\n className,\n )}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-secondary\">\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Content>\n </SheetPortal>\n );\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-1.5 p-4\", className)}\n {...props}\n />\n );\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n );\n}\n\nfunction SheetTitle({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\"font-semibold text-foreground\", className)}\n {...props}\n />\n );\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n};\n","import { cn } from \"@/lib/utils\";\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\"animate-pulse rounded-md bg-accent\", className)}\n {...props}\n />\n );\n}\n\nexport { Skeleton };\n","import type { FC } from \"react\";\nimport {\n ThreadListItemPrimitive,\n ThreadListPrimitive,\n useAssistantState,\n} from \"@assistant-ui/react\";\nimport { PlusIcon, TrashIcon } from \"lucide-react\";\n\nimport { Button } from \"@/components/ui/button\";\nimport { TooltipIconButton } from \"@/components/assistant-ui/tooltip-icon-button\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\n\nexport const ThreadList: FC = () => {\n return (\n <ThreadListPrimitive.Root className=\"aui-root aui-thread-list-root flex flex-col items-stretch gap-1.5\">\n <ThreadListNew />\n <ThreadListItems />\n </ThreadListPrimitive.Root>\n );\n};\n\nconst ThreadListNew: FC = () => {\n return (\n <ThreadListPrimitive.New asChild>\n <Button\n className=\"aui-thread-list-new flex items-center justify-start gap-1 rounded-lg px-2.5 py-2 text-start hover:bg-muted data-active:bg-muted\"\n variant=\"ghost\"\n >\n <PlusIcon />\n New Chat\n </Button>\n </ThreadListPrimitive.New>\n );\n};\n\nconst ThreadListItems: FC = () => {\n const isLoading = useAssistantState(({ threads }) => threads.isLoading);\n\n if (isLoading) {\n return <ThreadListSkeleton />;\n }\n\n return <ThreadListPrimitive.Items components={{ ThreadListItem }} />;\n};\n\nconst ThreadListSkeleton: FC = () => {\n return (\n <>\n {Array.from({ length: 5 }, (_, i) => (\n <div\n key={i}\n role=\"status\"\n aria-label=\"Loading threads\"\n aria-live=\"polite\"\n className=\"aui-thread-list-skeleton-wrapper flex items-center gap-2 rounded-md px-3 py-2\"\n >\n <Skeleton className=\"aui-thread-list-skeleton h-[22px] flex-grow\" />\n </div>\n ))}\n </>\n );\n};\n\nconst ThreadListItem: FC = () => {\n return (\n <ThreadListItemPrimitive.Root className=\"aui-thread-list-item flex items-center gap-2 rounded-lg transition-all hover:bg-muted focus-visible:bg-muted focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none data-active:bg-muted\">\n <ThreadListItemPrimitive.Trigger className=\"aui-thread-list-item-trigger flex-grow px-3 py-2 text-start\">\n <ThreadListItemTitle />\n </ThreadListItemPrimitive.Trigger>\n <ThreadListItemDelete />\n </ThreadListItemPrimitive.Root>\n );\n};\n\nconst ThreadListItemTitle: FC = () => {\n return (\n <span className=\"aui-thread-list-item-title text-sm\">\n <ThreadListItemPrimitive.Title fallback=\"New Chat\" />\n </span>\n );\n};\n\nconst ThreadListItemDelete: FC = () => {\n return (\n <ThreadListItemPrimitive.Delete asChild>\n <TooltipIconButton\n className=\"aui-thread-list-item-delete mr-3 ml-auto size-4 p-0 text-foreground hover:text-primary\"\n variant=\"ghost\"\n tooltip=\"Delete thread\"\n onClick={(event) => {\n const confirmed = window.confirm(\n \"Delete this chat? This action cannot be undone.\"\n );\n if (!confirmed) {\n event.preventDefault();\n event.stopPropagation();\n }\n }}\n >\n <TrashIcon />\n </TooltipIconButton>\n </ThreadListItemPrimitive.Delete>\n );\n};\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { ChevronRight, MoreHorizontal } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction Breadcrumb({ ...props }: React.ComponentProps<\"nav\">) {\n return <nav aria-label=\"breadcrumb\" data-slot=\"breadcrumb\" {...props} />;\n}\n\nfunction BreadcrumbList({ className, ...props }: React.ComponentProps<\"ol\">) {\n return (\n <ol\n data-slot=\"breadcrumb-list\"\n className={cn(\n \"flex flex-wrap items-center gap-1.5 text-sm break-words text-muted-foreground sm:gap-2.5\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction BreadcrumbItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"breadcrumb-item\"\n className={cn(\"inline-flex items-center gap-1.5\", className)}\n {...props}\n />\n );\n}\n\nfunction BreadcrumbLink({\n asChild,\n className,\n ...props\n}: React.ComponentProps<\"a\"> & {\n asChild?: boolean;\n}) {\n const Comp = asChild ? Slot : \"a\";\n\n return (\n <Comp\n data-slot=\"breadcrumb-link\"\n className={cn(\"transition-colors hover:text-foreground\", className)}\n {...props}\n />\n );\n}\n\nfunction BreadcrumbPage({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"breadcrumb-page\"\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn(\"font-normal text-foreground\", className)}\n {...props}\n />\n );\n}\n\nfunction BreadcrumbSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"breadcrumb-separator\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"[&>svg]:size-3.5\", className)}\n {...props}\n >\n {children ?? <ChevronRight />}\n </li>\n );\n}\n\nfunction BreadcrumbEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"breadcrumb-ellipsis\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"flex size-9 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontal className=\"size-4\" />\n <span className=\"sr-only\">More</span>\n </span>\n );\n}\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n};\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { createContext, useCallback, useContext, useEffect, useRef, useState } from \"react\";\nimport {\n AssistantRuntimeProvider,\n useExternalStoreRuntime,\n type AppendMessage,\n type ThreadMessageLike,\n type ExternalStoreThreadListAdapter,\n type ExternalStoreThreadData,\n} from \"@assistant-ui/react\";\nimport { BackendApi, type SessionMessage } from \"@/lib/backend-api\";\nimport { constructSystemMessage, constructThreadMessage } from \"@/lib/conversion\";\nimport { useThreadContext, type ThreadMetadata } from \"@/lib/thread-context\";\ntype RuntimeActions = {\n sendSystemMessage: (message: string) => Promise<void>;\n};\nconst RuntimeActionsContext = createContext<RuntimeActions | undefined>(undefined);\n\nconst isTempThreadId = (id: string) => id.startsWith(\"temp-\");\nconst parseTimestamp = (value?: string | number) => {\n if (value === undefined || value === null) return 0;\n if (typeof value === \"number\") {\n // Accept both ms and seconds since backend may send either\n return Number.isFinite(value) ? (value < 1e12 ? value * 1000 : value) : 0;\n }\n\n // Numeric strings like \"1725654321\" are not parsed by Date.parse, so coerce first\n const numeric = Number(value);\n if (!Number.isNaN(numeric)) {\n return numeric < 1e12 ? numeric * 1000 : numeric;\n }\n\n const ts = Date.parse(value);\n return Number.isNaN(ts) ? 0 : ts;\n};\nconst isPlaceholderTitle = (title?: string) => {\n const normalized = title?.trim() ?? \"\";\n return !normalized || normalized.startsWith(\"#[\");\n};\n\nexport const useRuntimeActions = () => {\n const context = useContext(RuntimeActionsContext);\n if (!context) {\n throw new Error(\"useRuntimeActions must be used within AomiRuntimeProvider\");\n }\n return context;\n};\n\nexport function AomiRuntimeProvider({\n children,\n backendUrl = \"http://localhost:8080\",\n publicKey,\n}: Readonly<{\n children: ReactNode;\n backendUrl?: string;\n publicKey?: string;\n}>) {\n // ==================== Thread Context Integration ====================\n const {\n currentThreadId,\n setCurrentThreadId,\n bumpThreadViewKey,\n threads,\n setThreads,\n threadMetadata,\n setThreadMetadata,\n threadCnt,\n setThreadCnt,\n getThreadMessages,\n setThreadMessages,\n updateThreadMetadata,\n } = useThreadContext();\n\n // ==================== State ====================\n const [isRunning, setIsRunning] = useState(false);\n const backendApiRef = useRef(new BackendApi(backendUrl));\n const pollingIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const pendingSystemMessagesRef = useRef<Map<string, string[]>>(new Map());\n // Queue for chat messages sent before backend ID is available\n const pendingChatMessagesRef = useRef<Map<string, string[]>>(new Map());\n // Track in-flight creation to avoid duplicate backend requests\n const creatingThreadIdRef = useRef<string | null>(null);\n const createThreadPromiseRef = useRef<Promise<void> | null>(null);\n const findPendingThreadId = useCallback(() => {\n if (creatingThreadIdRef.current) return creatingThreadIdRef.current;\n for (const [id, meta] of threadMetadata.entries()) {\n if (meta.status === \"pending\") return id;\n }\n return null;\n }, [threadMetadata]);\n\n // Get messages for current thread\n const currentMessages = getThreadMessages(currentThreadId);\n\n // Ref to track current thread ID for async callbacks (avoids stale closures)\n const currentThreadIdRef = useRef(currentThreadId);\n useEffect(() => {\n currentThreadIdRef.current = currentThreadId;\n }, [currentThreadId]);\n\n // Ref to track threads that were just created and should skip initial fetch\n // This prevents the fetchState from clearing input when switching from temp to real thread\n const skipInitialFetchRef = useRef<Set<string>>(new Set());\n\n // Ref to map temp thread IDs to their real backend IDs\n // This allows us to keep using tempId in the UI while using backendId for API calls\n const tempToBackendIdRef = useRef<Map<string, string>>(new Map());\n\n // Helper to resolve a thread ID to its backend ID (handles temp -> real mapping)\n const resolveThreadId = useCallback((threadId: string): string => {\n return tempToBackendIdRef.current.get(threadId) || threadId;\n }, []);\n\n // Helper to find a temp thread ID for a given backend ID (reverse lookup)\n const findTempIdForBackendId = useCallback((backendId: string): string | undefined => {\n for (const [tempId, bId] of tempToBackendIdRef.current.entries()) {\n if (bId === backendId) return tempId;\n }\n return undefined;\n }, []);\n\n // Check if a thread is ready for API calls (either not temp, or temp with backend ID)\n const isThreadReady = useCallback((threadId: string): boolean => {\n if (!isTempThreadId(threadId)) return true;\n return tempToBackendIdRef.current.has(threadId);\n }, []);\n\n // ==================== Message Processing ====================\n const applyMessages = useCallback((msgs?: SessionMessage[] | null) => {\n if (!msgs) return;\n\n // Don't overwrite messages if there are pending chat messages waiting to be sent\n // This prevents the UI from losing user messages while waiting for backend ID\n const hasPendingMessages = pendingChatMessagesRef.current.has(currentThreadId) && \n (pendingChatMessagesRef.current.get(currentThreadId)?.length ?? 0) > 0;\n if (hasPendingMessages) {\n console.log(\"Skipping applyMessages - pending messages exist for thread:\", currentThreadId);\n return;\n }\n\n const threadMessages: ThreadMessageLike[] = [];\n\n for (const msg of msgs) {\n if (msg.sender === \"system\") {\n const systemMessage = constructSystemMessage(msg);\n if (systemMessage) {\n threadMessages.push(systemMessage);\n }\n continue;\n }\n const threadMessage = constructThreadMessage(msg);\n if (threadMessage) {\n threadMessages.push(threadMessage);\n }\n }\n\n setThreadMessages(currentThreadId, threadMessages);\n }, [currentThreadId, setThreadMessages]);\n\n // ==================== Backend API ====================\n useEffect(() => {\n backendApiRef.current = new BackendApi(backendUrl);\n }, [backendUrl]);\n\n // ==================== Polling Logic ====================\n const stopPolling = useCallback(() => {\n if (pollingIntervalRef.current) {\n clearInterval(pollingIntervalRef.current);\n pollingIntervalRef.current = null;\n }\n }, []);\n\n const startPolling = useCallback(() => {\n if (!isThreadReady(currentThreadId)) return;\n if (pollingIntervalRef.current) return;\n const backendThreadId = resolveThreadId(currentThreadId);\n setIsRunning(true);\n pollingIntervalRef.current = setInterval(async () => {\n try {\n const state = await backendApiRef.current.fetchState(backendThreadId);\n if (state.session_exists === false) {\n setIsRunning(false);\n stopPolling();\n return;\n }\n applyMessages(state.messages);\n\n if (!state.is_processing) {\n setIsRunning(false);\n stopPolling();\n }\n } catch (error) {\n console.error(\"Polling error:\", error);\n stopPolling();\n setIsRunning(false);\n }\n }, 500);\n }, [currentThreadId, applyMessages, stopPolling, isThreadReady, resolveThreadId]);\n\n // ==================== Load Initial Thread State ====================\n useEffect(() => {\n const fetchInitialState = async () => {\n // For temp threads without a backend ID yet, skip fetching\n if (isTempThreadId(currentThreadId) && !tempToBackendIdRef.current.has(currentThreadId)) {\n setIsRunning(false);\n return;\n }\n\n // Skip initial fetch for newly created threads (switched from temp to real)\n // This prevents fetchState from clearing input when the thread was just created\n if (skipInitialFetchRef.current.has(currentThreadId)) {\n skipInitialFetchRef.current.delete(currentThreadId);\n setIsRunning(false);\n return;\n }\n\n const backendThreadId = resolveThreadId(currentThreadId);\n\n try {\n const state = await backendApiRef.current.fetchState(backendThreadId);\n if (state.session_exists === false) {\n setIsRunning(false);\n return;\n }\n applyMessages(state.messages);\n\n if (state.is_processing) {\n setIsRunning(true);\n startPolling();\n } else {\n setIsRunning(false);\n }\n } catch (error) {\n console.error(\"Failed to fetch initial state:\", error);\n }\n };\n\n void fetchInitialState();\n return () => {\n stopPolling();\n };\n }, [currentThreadId, applyMessages, startPolling, stopPolling, resolveThreadId]);\n\n // ==================== Load Thread List from Backend ====================\n useEffect(() => {\n if (!publicKey) return;\n\n const fetchThreadList = async () => {\n try {\n const threadList = await backendApiRef.current.fetchThreads(publicKey);\n const newMetadata = new Map(threadMetadata);\n\n // Track highest chat number\n let maxChatNum = threadCnt;\n\n for (const thread of threadList) {\n const rawTitle = thread.title ?? \"\";\n const title = isPlaceholderTitle(rawTitle) ? \"\" : rawTitle;\n const lastActive =\n thread.last_active_at ||\n thread.updated_at ||\n thread.created_at ||\n newMetadata.get(thread.session_id)?.lastActiveAt ||\n new Date().toISOString();\n newMetadata.set(thread.session_id, {\n title,\n status: thread.is_archived ? \"archived\" : \"regular\",\n lastActiveAt: lastActive,\n });\n\n // Extract chat number if title follows \"Chat N\" format\n const match = title.match(/^Chat (\\d+)$/);\n if (match) {\n const num = parseInt(match[1], 10);\n if (num > maxChatNum) {\n maxChatNum = num;\n }\n }\n }\n\n setThreadMetadata(newMetadata);\n // Sync counter to highest chat number\n if (maxChatNum > threadCnt) {\n setThreadCnt(maxChatNum);\n }\n } catch (error) {\n console.error(\"Failed to fetch thread list:\", error);\n }\n };\n\n void fetchThreadList();\n }, [publicKey]); // Only run on mount and when publicKey changes\n\n // ==================== Thread List Adapter ====================\n const threadListAdapter: ExternalStoreThreadListAdapter = (() => {\n const sortByLastActiveDesc = (\n [, metaA]: [string, ThreadMetadata],\n [, metaB]: [string, ThreadMetadata]\n ) => {\n const tsA = parseTimestamp(metaA.lastActiveAt);\n const tsB = parseTimestamp(metaB.lastActiveAt);\n return tsB - tsA;\n };\n\n const regularThreads = Array.from(threadMetadata.entries())\n .filter(([_, meta]) => meta.status === \"regular\")\n .filter(([_, meta]) => !isPlaceholderTitle(meta.title))\n .sort(sortByLastActiveDesc)\n .map(([id, meta]): ExternalStoreThreadData<\"regular\"> => ({\n id,\n title: meta.title || \"New Chat\",\n status: \"regular\",\n }));\n\n const archivedThreadsArray = Array.from(threadMetadata.entries())\n .filter(([_, meta]) => meta.status === \"archived\")\n .filter(([_, meta]) => !isPlaceholderTitle(meta.title))\n .sort(sortByLastActiveDesc)\n .map(([id, meta]): ExternalStoreThreadData<\"archived\"> => ({\n id,\n title: meta.title || \"New Chat\",\n status: \"archived\",\n }));\n\n return {\n threadId: currentThreadId,\n threads: regularThreads,\n archivedThreads: archivedThreadsArray,\n\n // Create new thread\n onSwitchToNewThread: async () => {\n const preparePendingThread = (newId: string) => {\n const previousPendingId = creatingThreadIdRef.current;\n if (previousPendingId && previousPendingId !== newId) {\n setThreadMetadata((prev) => {\n const next = new Map(prev);\n next.delete(previousPendingId);\n return next;\n });\n setThreads((prev) => {\n const next = new Map(prev);\n next.delete(previousPendingId);\n return next;\n });\n pendingChatMessagesRef.current.delete(previousPendingId);\n pendingSystemMessagesRef.current.delete(previousPendingId);\n tempToBackendIdRef.current.delete(previousPendingId);\n skipInitialFetchRef.current.delete(previousPendingId);\n }\n\n creatingThreadIdRef.current = newId;\n pendingChatMessagesRef.current.delete(newId);\n pendingSystemMessagesRef.current.delete(newId);\n setThreadMetadata((prev) =>\n new Map(prev).set(newId, {\n title: \"New Chat\",\n status: \"pending\",\n lastActiveAt: new Date().toISOString(),\n })\n );\n setThreadMessages(newId, []);\n setCurrentThreadId(newId);\n setIsRunning(false);\n bumpThreadViewKey();\n };\n\n // If any pending thread exists (either in-flight or awaiting title), reuse it without new request\n const existingPendingId = findPendingThreadId();\n if (existingPendingId) {\n preparePendingThread(existingPendingId);\n return;\n }\n\n // If a creation request is already in flight, just reset UI with a fresh pending thread\n if (createThreadPromiseRef.current) {\n preparePendingThread(creatingThreadIdRef.current ?? `temp-${crypto.randomUUID()}`);\n return;\n }\n\n // Generate a temporary ID for immediate UI update\n const tempId = `temp-${crypto.randomUUID()}`;\n preparePendingThread(tempId);\n\n // Create thread on backend in background (with null title)\n const createPromise = backendApiRef.current\n .createThread(publicKey, undefined)\n .then(async (newThread) => {\n const uiThreadId = creatingThreadIdRef.current ?? tempId;\n const backendId = newThread.session_id;\n\n // Store the mapping from tempId to backendId\n // This allows API calls to use the real backendId while UI stays on tempId\n tempToBackendIdRef.current.set(uiThreadId, backendId);\n\n // Mark this temp thread to skip initial fetch - we just created it,\n // and fetching would overwrite any messages the user has typed\n skipInitialFetchRef.current.add(uiThreadId);\n\n const backendTitle = newThread.title;\n if (backendTitle && !isPlaceholderTitle(backendTitle)) {\n setThreadMetadata((prev) => {\n const next = new Map(prev);\n const existing = next.get(uiThreadId);\n const nextStatus =\n existing?.status === \"archived\" ? \"archived\" : \"regular\";\n next.set(uiThreadId, {\n title: backendTitle,\n status: nextStatus,\n lastActiveAt: existing?.lastActiveAt ?? new Date().toISOString(),\n });\n return next;\n });\n if (creatingThreadIdRef.current === uiThreadId) {\n creatingThreadIdRef.current = null;\n }\n }\n\n // Flush any pending chat messages that were queued while waiting for backend ID\n const pendingMessages = pendingChatMessagesRef.current.get(uiThreadId);\n if (pendingMessages?.length) {\n pendingChatMessagesRef.current.delete(uiThreadId);\n for (const text of pendingMessages) {\n try {\n await backendApiRef.current.postChatMessage(backendId, text);\n } catch (error) {\n console.error(\"Failed to send queued message:\", error);\n }\n }\n // Start polling after messages are sent (only if user is still on this thread)\n if (currentThreadIdRef.current === uiThreadId) {\n startPolling();\n }\n }\n })\n .catch((error) => {\n console.error(\"Failed to create new thread:\", error);\n const failedId = creatingThreadIdRef.current ?? tempId;\n // On error, remove the temp thread from UI\n setThreadMetadata((prev) => {\n const next = new Map(prev);\n next.delete(failedId);\n return next;\n });\n setThreads((prev) => {\n const next = new Map(prev);\n next.delete(failedId);\n return next;\n });\n if (creatingThreadIdRef.current === failedId) {\n creatingThreadIdRef.current = null;\n }\n })\n .finally(() => {\n createThreadPromiseRef.current = null;\n });\n\n createThreadPromiseRef.current = createPromise;\n },\n\n // Switch to existing thread\n onSwitchToThread: (threadId: string) => {\n setCurrentThreadId(threadId);\n },\n\n // Rename thread\n onRename: async (threadId: string, newTitle: string) => {\n // Optimistic update\n updateThreadMetadata(threadId, { title: isPlaceholderTitle(newTitle) ? \"\" : newTitle });\n\n try {\n await backendApiRef.current.renameThread(threadId, newTitle);\n } catch (error) {\n console.error(\"Failed to rename thread:\", error);\n // Could rollback here, but we'll keep the optimistic update\n }\n },\n\n // Archive thread\n onArchive: async (threadId: string) => {\n // Optimistic update\n updateThreadMetadata(threadId, { status: \"archived\" });\n\n try {\n await backendApiRef.current.archiveThread(threadId);\n } catch (error) {\n console.error(\"Failed to archive thread:\", error);\n // Rollback on error\n updateThreadMetadata(threadId, { status: \"regular\" });\n }\n },\n\n // Unarchive thread\n onUnarchive: async (threadId: string) => {\n // Optimistic update\n updateThreadMetadata(threadId, { status: \"regular\" });\n\n try {\n await backendApiRef.current.unarchiveThread(threadId);\n } catch (error) {\n console.error(\"Failed to unarchive thread:\", error);\n // Rollback on error\n updateThreadMetadata(threadId, { status: \"archived\" });\n }\n },\n\n // Delete thread\n onDelete: async (threadId: string) => {\n try {\n await backendApiRef.current.deleteThread(threadId);\n\n // Remove from context\n setThreadMetadata((prev) => {\n const next = new Map(prev);\n next.delete(threadId);\n return next;\n });\n setThreads((prev) => {\n const next = new Map(prev);\n next.delete(threadId);\n return next;\n });\n\n // Switch to another thread if current was deleted\n if (currentThreadId === threadId) {\n const firstRegularThread = Array.from(threadMetadata.entries())\n .find(([id, meta]) => meta.status === \"regular\" && id !== threadId);\n\n if (firstRegularThread) {\n setCurrentThreadId(firstRegularThread[0]);\n } else {\n // No threads left, create a default one\n const defaultId = \"default-session\";\n setThreadMetadata((prev) =>\n new Map(prev).set(defaultId, {\n title: \"New Chat\",\n status: \"regular\",\n lastActiveAt: new Date().toISOString(),\n })\n );\n setThreadMessages(defaultId, []);\n setCurrentThreadId(defaultId);\n }\n }\n } catch (error) {\n console.error(\"Failed to delete thread:\", error);\n throw error; // Let the UI handle the error\n }\n },\n };\n })();\n\n // ==================== Message Handlers ====================\n const sendSystemMessageNow = useCallback(\n async (threadId: string, message: string) => {\n const backendThreadId = resolveThreadId(threadId);\n setIsRunning(true);\n try {\n const response = await backendApiRef.current.postSystemMessage(backendThreadId, message);\n\n if (response.res) {\n const systemMessage = constructSystemMessage(response.res);\n if (systemMessage) {\n const updatedMessages = [...getThreadMessages(threadId), systemMessage];\n setThreadMessages(threadId, updatedMessages);\n }\n }\n\n await startPolling();\n } catch (error) {\n console.error(\"Failed to send system message:\", error);\n setIsRunning(false);\n }\n },\n [getThreadMessages, setThreadMessages, startPolling, resolveThreadId]\n );\n\n const flushPendingSystemMessages = useCallback(\n async (threadId: string) => {\n const pending = pendingSystemMessagesRef.current.get(threadId);\n if (!pending?.length) return;\n\n pendingSystemMessagesRef.current.delete(threadId);\n for (const pendingMessage of pending) {\n // Send sequentially to preserve order\n await sendSystemMessageNow(threadId, pendingMessage);\n }\n },\n [sendSystemMessageNow]\n );\n\n // Flush pending chat messages when backend ID becomes available\n const flushPendingChatMessages = useCallback(\n async (threadId: string) => {\n const pending = pendingChatMessagesRef.current.get(threadId);\n if (!pending?.length) return;\n\n pendingChatMessagesRef.current.delete(threadId);\n const backendThreadId = resolveThreadId(threadId);\n\n for (const text of pending) {\n try {\n await backendApiRef.current.postChatMessage(backendThreadId, text);\n } catch (error) {\n console.error(\"Failed to send queued message:\", error);\n }\n }\n // Start polling after all messages are sent\n startPolling();\n },\n [resolveThreadId, startPolling]\n );\n\n const onNew = useCallback(\n async (message: AppendMessage) => {\n const text = message.content\n .filter((part): part is Extract<typeof part, { type: \"text\" }> => part.type === \"text\")\n .map((part: Extract<typeof message.content[number], { type: \"text\" }>) => part.text)\n .join(\"\\n\");\n\n if (!text) return;\n\n const userMessage: ThreadMessageLike = {\n role: \"user\",\n content: [{ type: \"text\", text }],\n createdAt: new Date(),\n };\n\n // Add message to current thread (show immediately in UI)\n setThreadMessages(currentThreadId, [...currentMessages, userMessage]);\n updateThreadMetadata(currentThreadId, { lastActiveAt: new Date().toISOString() });\n\n // If thread isn't ready (backend ID not available yet), queue the message\n if (!isThreadReady(currentThreadId)) {\n console.log(\"Thread not ready yet; queuing message for later delivery.\");\n setIsRunning(true); // Show pending state\n const pending = pendingChatMessagesRef.current.get(currentThreadId) || [];\n pendingChatMessagesRef.current.set(currentThreadId, [...pending, text]);\n return;\n }\n\n const backendThreadId = resolveThreadId(currentThreadId);\n\n try {\n setIsRunning(true);\n await backendApiRef.current.postChatMessage(backendThreadId, text);\n await flushPendingSystemMessages(currentThreadId);\n startPolling();\n } catch (error) {\n console.error(\"Failed to send message:\", error);\n setIsRunning(false);\n }\n },\n [\n currentThreadId,\n currentMessages,\n flushPendingSystemMessages,\n setThreadMessages,\n startPolling,\n isThreadReady,\n resolveThreadId,\n updateThreadMetadata,\n ]\n );\n\n const sendSystemMessage = useCallback(\n async (message: string) => {\n if (!isThreadReady(currentThreadId)) return;\n const threadMessages = getThreadMessages(currentThreadId);\n const hasUserMessages = threadMessages.some((msg) => msg.role === \"user\");\n\n if (!hasUserMessages) {\n const pending = pendingSystemMessagesRef.current.get(currentThreadId) || [];\n pendingSystemMessagesRef.current.set(currentThreadId, [...pending, message]);\n return;\n }\n\n await sendSystemMessageNow(currentThreadId, message);\n },\n [currentThreadId, getThreadMessages, sendSystemMessageNow, isThreadReady]\n );\n\n const onCancel = useCallback(async () => {\n if (!isThreadReady(currentThreadId)) return;\n stopPolling();\n\n const backendThreadId = resolveThreadId(currentThreadId);\n\n try {\n await backendApiRef.current.postInterrupt(backendThreadId);\n setIsRunning(false);\n } catch (error) {\n console.error(\"Failed to cancel:\", error);\n }\n }, [currentThreadId, stopPolling, isThreadReady, resolveThreadId]);\n\n // ==================== Runtime ====================\n const runtime = useExternalStoreRuntime({\n messages: currentMessages,\n setMessages: (msgs) => setThreadMessages(currentThreadId, [...msgs]),\n isRunning,\n onNew,\n onCancel,\n convertMessage: (msg) => msg,\n adapters: {\n threadList: threadListAdapter, // 🎯 Thread list adapter enabled!\n },\n });\n\n useEffect(() => {\n if (isTempThreadId(currentThreadId)) return;\n const hasUserMessages = currentMessages.some((msg) => msg.role === \"user\");\n if (hasUserMessages) {\n void flushPendingSystemMessages(currentThreadId);\n }\n }, [currentMessages, currentThreadId, flushPendingSystemMessages]);\n\n useEffect(() => {\n const unsubscribe = backendApiRef.current.subscribeToUpdates(\n (update) => {\n if (update.type !== \"TitleChanged\") return;\n const sessionId = update.data.session_id;\n const newTitle = update.data.new_title;\n\n // Check if this sessionId corresponds to a temp thread\n // If so, update the temp thread's metadata, not create a new one\n const tempId = findTempIdForBackendId(sessionId);\n const threadIdToUpdate = tempId || sessionId;\n\n setThreadMetadata((prev) => {\n const next = new Map(prev);\n const existing = next.get(threadIdToUpdate);\n const normalizedTitle = isPlaceholderTitle(newTitle) ? \"\" : newTitle;\n const nextStatus =\n existing?.status === \"archived\" ? \"archived\" : \"regular\";\n next.set(threadIdToUpdate, {\n title: normalizedTitle,\n status: nextStatus,\n lastActiveAt: existing?.lastActiveAt ?? new Date().toISOString(),\n });\n return next;\n });\n if (!isPlaceholderTitle(newTitle) && creatingThreadIdRef.current === threadIdToUpdate) {\n creatingThreadIdRef.current = null;\n }\n },\n (error) => {\n console.error(\"Failed to handle system update SSE:\", error);\n }\n );\n\n return () => {\n unsubscribe();\n };\n }, [backendUrl, setThreadMetadata, findTempIdForBackendId]);\n\n return (\n <RuntimeActionsContext.Provider value={{ sendSystemMessage }}>\n <AssistantRuntimeProvider runtime={runtime}>{children}</AssistantRuntimeProvider>\n </RuntimeActionsContext.Provider>\n );\n}\n","export interface SessionMessage {\n sender?: string;\n content?: string;\n timestamp?: string;\n is_streaming?: boolean;\n tool_stream?: [string, string] | { topic?: unknown; content?: unknown } | null;\n}\n\nexport interface SessionResponsePayload {\n messages?: SessionMessage[] | null;\n is_processing?: boolean;\n session_exists?: boolean;\n session_id?: string;\n pending_wallet_tx?: string | null;\n}\n\nexport type BackendSessionResponse = SessionResponsePayload;\n\nexport interface SystemResponsePayload {\n res?: SessionMessage | null;\n}\n\n// Thread Management Types\nexport interface ThreadMetadata {\n session_id: string;\n title: string;\n is_archived?: boolean;\n created_at?: string;\n updated_at?: string;\n last_active_at?: string;\n}\n\nexport interface CreateThreadResponse {\n session_id: string;\n title?: string;\n}\n\nexport type SystemUpdate =\n | {\n type: \"TitleChanged\";\n data: {\n session_id: string;\n new_title: string;\n };\n };\n\nfunction toQueryString(payload: Record<string, unknown>): string {\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(payload)) {\n if (value === undefined || value === null) continue;\n params.set(key, String(value));\n }\n const qs = params.toString();\n return qs ? `?${qs}` : \"\";\n}\n\nasync function postState<T>(\n backendUrl: string,\n path: string,\n payload: Record<string, unknown>\n): Promise<T> {\n const query = toQueryString(payload);\n const url = `${backendUrl}${path}${query}`;\n console.log('🔵 [postState] URL:', url);\n console.log('🔵 [postState] Payload:', payload);\n\n const response = await fetch(url, {\n method: \"POST\",\n });\n console.log('🔵 [postState] Response status:', response.status);\n\n if (!response.ok) {\n console.error('🔴 [postState] Error:', response.status, response.statusText);\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const data = (await response.json()) as T;\n console.log('🟢 [postState] Success:', data);\n return data;\n}\n\nexport class BackendApi {\n private connectionStatus = false;\n private eventSource: EventSource | null = null;\n private updatesEventSource: EventSource | null = null;\n\n constructor(private readonly backendUrl: string) {}\n\n async fetchState(sessionId: string): Promise<SessionResponsePayload> {\n console.log('🔵 [fetchState] Called with sessionId:', sessionId);\n const url = `${this.backendUrl}/api/state?session_id=${encodeURIComponent(sessionId)}`;\n console.log('🔵 [fetchState] URL:', url);\n\n const response = await fetch(url);\n console.log('🔵 [fetchState] Response status:', response.status, response.statusText);\n\n if (!response.ok) {\n console.error('🔴 [fetchState] Error:', response.status, response.statusText);\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const data = (await response.json()) as SessionResponsePayload;\n console.log('🟢 [fetchState] Success:', data);\n return data;\n }\n\n async postChatMessage(sessionId: string, message: string): Promise<SessionResponsePayload> {\n console.log('🔵 [postChatMessage] Called with sessionId:', sessionId, 'message:', message);\n const result = await postState<SessionResponsePayload>(this.backendUrl, \"/api/chat\", { message, session_id: sessionId });\n console.log('🟢 [postChatMessage] Success:', result);\n return result;\n }\n\n async postSystemMessage(sessionId: string, message: string): Promise<SystemResponsePayload> {\n console.log('🔵 [postSystemMessage] Called with sessionId:', sessionId, 'message:', message);\n const result = await postState<SystemResponsePayload>(this.backendUrl, \"/api/system\", { message, session_id: sessionId });\n console.log('🟢 [postSystemMessage] Success:', result);\n return result;\n }\n\n async postInterrupt(sessionId: string): Promise<SessionResponsePayload> {\n console.log('🔵 [postInterrupt] Called with sessionId:', sessionId);\n const result = await postState<SessionResponsePayload>(this.backendUrl, \"/api/interrupt\", { session_id: sessionId });\n console.log('🟢 [postInterrupt] Success:', result);\n return result;\n }\n\n disconnectSSE(): void {\n if (this.eventSource) {\n this.eventSource.close();\n this.eventSource = null;\n }\n this.setConnectionStatus(false);\n }\n\n setConnectionStatus(on: boolean): void {\n this.connectionStatus = on\n }\n\n async connectSSE(sessionId: string, publicKey?: string) {\n // Close existing connection\n this.disconnectSSE();\n\n try {\n // Build URL with optional public_key parameter\n const url = new URL(`${this.backendUrl}/api/chat/stream`);\n url.searchParams.set('session_id', sessionId);\n if (publicKey) {\n url.searchParams.set('public_key', publicKey);\n }\n\n this.eventSource = new EventSource(url.toString());\n\n this.eventSource.onopen = () => {\n console.log('🌐 SSE connection opened to:', url.toString());\n this.setConnectionStatus(true);\n };\n\n this.eventSource.onmessage = (event) => {\n try {\n const data = JSON.parse(event.data);\n // this.updateChatState(data);\n } catch (error) {\n console.error('Failed to parse SSE data:', error);\n }\n };\n\n this.eventSource.onerror = (error) => {\n console.error('SSE connection error:', error);\n };\n\n } catch (error) {\n console.error('Failed to establish SSE connection:', error);\n this.handleConnectionError(sessionId, publicKey);\n }\n }\n\n private handleConnectionError(sessionId: string, publicKey?: string): void {\n this.setConnectionStatus(false);\n let attempt = 0;\n let total = 3;\n if (attempt < total) {\n attempt++;\n console.log(`Attempting to reconnect (${attempt}/${total})...`);\n\n setTimeout(() => {\n this.connectSSE(sessionId, publicKey);\n }, 100);\n } else {\n console.error('Max reconnection attempts reached');\n this.setConnectionStatus(false);\n }\n }\n\n subscribeToUpdates(\n onUpdate: (update: SystemUpdate) => void,\n onError?: (error: unknown) => void\n ): () => void {\n // Close any existing connection before opening a new one\n if (this.updatesEventSource) {\n this.updatesEventSource.close();\n }\n\n const updatesUrl = new URL(\"/api/updates\", this.backendUrl).toString();\n this.updatesEventSource = new EventSource(updatesUrl);\n\n this.updatesEventSource.onmessage = (event) => {\n try {\n const parsed = JSON.parse(event.data) as SystemUpdate;\n onUpdate(parsed);\n } catch (error) {\n console.error(\"Failed to parse system update SSE:\", error);\n onError?.(error);\n }\n };\n\n this.updatesEventSource.onerror = (error) => {\n console.error(\"System updates SSE error:\", error);\n onError?.(error);\n };\n\n return () => {\n if (this.updatesEventSource) {\n this.updatesEventSource.close();\n this.updatesEventSource = null;\n }\n };\n }\n\n // ==================== Thread Management API ====================\n\n /**\n * Fetch all threads/sessions for a given public key\n * @param publicKey - User's wallet address\n * @returns Array of thread metadata\n */\n async fetchThreads(publicKey: string): Promise<ThreadMetadata[]> {\n console.log('🔵 [fetchThreads] Called with publicKey:', publicKey);\n const url = `${this.backendUrl}/api/sessions?public_key=${encodeURIComponent(publicKey)}`;\n console.log('🔵 [fetchThreads] URL:', url);\n\n const response = await fetch(url);\n console.log('🔵 [fetchThreads] Response status:', response.status);\n\n if (!response.ok) {\n console.error('🔴 [fetchThreads] Error:', response.status);\n throw new Error(`Failed to fetch threads: HTTP ${response.status}`);\n }\n\n const data = (await response.json()) as ThreadMetadata[];\n console.log('🟢 [fetchThreads] Success:', data);\n return data;\n }\n\n /**\n * Create a new thread/session\n * @param publicKey - Optional user's wallet address\n * @param title - Thread title (keep empty for backend to own the title)\n * @returns Created thread information with backend-generated ID\n */\n async createThread(publicKey?: string, title?: string): Promise<CreateThreadResponse> {\n console.log('🔵 [createThread] Called with publicKey:', publicKey, 'title:', title);\n const body: Record<string, string> = {};\n if (publicKey) {\n body.public_key = publicKey;\n }\n if (title) {\n body.title = title;\n }\n console.log('🔵 [createThread] Request body:', body);\n\n const url = `${this.backendUrl}/api/sessions`;\n console.log('🔵 [createThread] URL:', url);\n\n const response = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n });\n console.log('🔵 [createThread] Response status:', response.status);\n\n if (!response.ok) {\n console.error('🔴 [createThread] Error:', response.status);\n throw new Error(`Failed to create thread: HTTP ${response.status}`);\n }\n\n const data = (await response.json()) as CreateThreadResponse;\n console.log('🟢 [createThread] Success:', data);\n return data;\n }\n\n /**\n * Archive a thread/session\n * @param sessionId - The session ID to archive\n */\n async archiveThread(sessionId: string): Promise<void> {\n console.log('🔵 [archiveThread] Called with sessionId:', sessionId);\n const url = `${this.backendUrl}/api/sessions/${encodeURIComponent(sessionId)}/archive`;\n console.log('🔵 [archiveThread] URL:', url);\n\n const response = await fetch(url, { method: 'POST' });\n console.log('🔵 [archiveThread] Response status:', response.status);\n\n if (!response.ok) {\n console.error('🔴 [archiveThread] Error:', response.status);\n throw new Error(`Failed to archive thread: HTTP ${response.status}`);\n }\n console.log('🟢 [archiveThread] Success');\n }\n\n /**\n * Unarchive a thread/session\n * @param sessionId - The session ID to unarchive\n */\n async unarchiveThread(sessionId: string): Promise<void> {\n console.log('🔵 [unarchiveThread] Called with sessionId:', sessionId);\n const url = `${this.backendUrl}/api/sessions/${encodeURIComponent(sessionId)}/unarchive`;\n console.log('🔵 [unarchiveThread] URL:', url);\n\n const response = await fetch(url, { method: 'POST' });\n console.log('🔵 [unarchiveThread] Response status:', response.status);\n\n if (!response.ok) {\n console.error('🔴 [unarchiveThread] Error:', response.status);\n throw new Error(`Failed to unarchive thread: HTTP ${response.status}`);\n }\n console.log('🟢 [unarchiveThread] Success');\n }\n\n /**\n * Delete a thread/session permanently\n * @param sessionId - The session ID to delete\n */\n async deleteThread(sessionId: string): Promise<void> {\n console.log('🔵 [deleteThread] Called with sessionId:', sessionId);\n const url = `${this.backendUrl}/api/sessions/${encodeURIComponent(sessionId)}`;\n console.log('🔵 [deleteThread] URL:', url);\n\n const response = await fetch(url, { method: 'DELETE' });\n console.log('🔵 [deleteThread] Response status:', response.status);\n\n if (!response.ok) {\n console.error('🔴 [deleteThread] Error:', response.status);\n throw new Error(`Failed to delete thread: HTTP ${response.status}`);\n }\n console.log('🟢 [deleteThread] Success');\n }\n\n /**\n * Rename a thread/session\n * @param sessionId - The session ID to rename\n * @param newTitle - The new title for the thread\n */\n async renameThread(sessionId: string, newTitle: string): Promise<void> {\n console.log('🔵 [renameThread] Called with sessionId:', sessionId, 'newTitle:', newTitle);\n const url = `${this.backendUrl}/api/sessions/${encodeURIComponent(sessionId)}`;\n console.log('🔵 [renameThread] URL:', url);\n\n const response = await fetch(url, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ title: newTitle }),\n });\n console.log('🔵 [renameThread] Response status:', response.status);\n\n if (!response.ok) {\n console.error('🔴 [renameThread] Error:', response.status);\n throw new Error(`Failed to rename thread: HTTP ${response.status}`);\n }\n console.log('🟢 [renameThread] Success');\n }\n}\n","import { SessionMessage } from \"@/lib/backend-api\";\nimport { ThreadMessageLike } from \"@assistant-ui/react\";\n\nexport function constructThreadMessage(msg: SessionMessage): ThreadMessageLike | null {\n if (msg.sender === \"system\") return null;\n\n const content = [];\n const role: ThreadMessageLike[\"role\"] = msg.sender === \"user\" ? \"user\" : \"assistant\";\n\n if (msg.content) {\n content.push({ type: \"text\" as const, text: msg.content });\n }\n\n const [topic, toolContent] = parseToolStream(msg.tool_stream) ?? [];\n if (topic && toolContent) {\n content.push({\n type: \"tool-call\" as const,\n toolCallId: `tool_${Date.now()}`,\n toolName: topic,\n args: undefined,\n result: (() => {\n try {\n return JSON.parse(toolContent);\n } catch {\n return { args: toolContent };\n }\n })(),\n });\n }\n\n const threadMessage = {\n role,\n content: content.length > 0 ? content : [{ type: \"text\" as const, text: \"\" }],\n ...(msg.timestamp && { createdAt: new Date(msg.timestamp) }),\n };\n\n return threadMessage;\n}\n\n\n// SessionMessage {\n// sender: 'system';\n// content: 'system's msg to the agent'; => system send to the agent e.g. \"wallet connected on X network with address Y, call tools with network param X\"\n// timestamp: some-time; => \"Error calling tool WebSearch: 404\"\n// is_streaming: false;\n// tool_stream: ['notification name to print', '']; => system notification to show to the user \"Wallet connected on X network\"\n// => \"WebSearch Error\"\n// }\n\nexport function constructSystemMessage(msg: SessionMessage): ThreadMessageLike | null {\n const [topic] = parseToolStream(msg.tool_stream) ?? [];\n const messageText = topic || msg.content || \"\";\n const timestamp = parseTimestamp(msg.timestamp);\n\n if (!messageText.trim()) return null;\n\n return {\n role: \"system\",\n content: [{ type: \"text\", text: messageText }],\n ...(timestamp && { createdAt: timestamp }),\n };\n}\n\nexport function constructUITool(): string {\n // TODO\n return '';\n}\n\nfunction parseTimestamp(timestamp?: string) {\n if (!timestamp) return undefined;\n const parsed = new Date(timestamp);\n return Number.isNaN(parsed.valueOf()) ? undefined : parsed;\n}\n\n\nfunction parseToolStream(toolStream: SessionMessage[\"tool_stream\"]): [string, string] | null {\n if (!toolStream) return null;\n\n if (Array.isArray(toolStream) && toolStream.length === 2) {\n const [topic, content] = toolStream;\n return [String(topic), content];\n } else if (typeof toolStream === \"object\") {\n const topic = (toolStream as { topic?: unknown }).topic;\n const content = (toolStream as { content?: unknown }).content;\n return topic ? [String(topic), String(content)] : null;\n }\n\n return null;\n}\n","\"use client\";\n\nimport { useEffect, useRef } from \"react\";\nimport { useRuntimeActions } from \"@/components/assistant-ui/runtime\";\n\n// ============================================\n// Types\n// ============================================\n\nexport type WalletButtonState = {\n address?: string;\n chainId?: number;\n isConnected: boolean;\n ensName?: string;\n};\n\nexport type WalletFooterProps = {\n wallet: WalletButtonState;\n setWallet: (data: Partial<WalletButtonState>) => void;\n};\n\n// ============================================\n// Utility Functions\n// ============================================\n\n/**\n * Get network name from chainId\n */\nexport const getNetworkName = (chainId: number | string | undefined): string => {\n if (chainId === undefined) return \"\";\n const id = typeof chainId === \"string\" ? Number(chainId) : chainId;\n switch (id) {\n case 1:\n return \"ethereum\";\n case 137:\n return \"polygon\";\n case 42161:\n return \"arbitrum\";\n case 8453:\n return \"base\";\n case 10:\n return \"optimism\";\n case 11155111:\n return \"sepolia\";\n case 1337:\n case 31337:\n return \"testnet\";\n case 59140:\n return \"linea-sepolia\";\n case 59144:\n return \"linea\";\n default:\n return \"testnet\";\n }\n};\n\n/**\n * Format wallet address for display (0x1234...5678)\n */\nexport const formatAddress = (addr?: string): string =>\n addr ? `${addr.slice(0, 6)}...${addr.slice(-4)}` : \"Connect Wallet\";\n\n// ============================================\n// WalletSystemMessageEmitter\n// ============================================\n\ntype WalletSystemMessageEmitterProps = {\n wallet: WalletButtonState;\n};\n\n/**\n * Internal component that watches wallet state and sends system messages\n * to the backend when wallet connects, disconnects, or switches networks.\n */\nexport function WalletSystemMessageEmitter({ wallet }: WalletSystemMessageEmitterProps) {\n const { sendSystemMessage } = useRuntimeActions();\n const lastWalletRef = useRef<{\n isConnected: boolean;\n address?: string;\n chainId?: number;\n }>({ isConnected: false });\n\n useEffect(() => {\n const prev = lastWalletRef.current;\n const { address, chainId, isConnected } = wallet;\n const normalizedAddress = address?.toLowerCase();\n\n // Handle connect\n if (\n isConnected &&\n normalizedAddress &&\n chainId &&\n (!prev.isConnected || prev.address !== normalizedAddress)\n ) {\n const networkName = getNetworkName(chainId);\n const message = `User connected wallet with address ${normalizedAddress} on ${networkName} network (Chain ID: ${chainId}). Ready to help with transactions.`;\n console.log(message);\n void sendSystemMessage(message);\n lastWalletRef.current = { isConnected: true, address: normalizedAddress, chainId };\n return;\n }\n\n // Handle disconnect\n if (!isConnected && prev.isConnected) {\n void sendSystemMessage(\"Wallet disconnected by user.\");\n console.log(\"Wallet disconnected by user.\");\n lastWalletRef.current = { isConnected: false };\n return;\n }\n\n // Handle network switch\n if (\n isConnected &&\n normalizedAddress &&\n chainId &&\n prev.isConnected &&\n prev.address === normalizedAddress &&\n prev.chainId !== chainId\n ) {\n const networkName = getNetworkName(chainId);\n const message = `User switched wallet to ${networkName} network (Chain ID: ${chainId}).`;\n console.log(message);\n void sendSystemMessage(message);\n lastWalletRef.current = { isConnected: true, address: normalizedAddress, chainId };\n }\n }, [wallet, sendSystemMessage]);\n\n return null;\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport Link from \"next/link\";\nimport Image from \"next/image\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarHeader,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarRail,\n} from \"@/components/ui/sidebar\";\nimport { ThreadList } from \"@/components/assistant-ui/thread-list\";\n\ntype BaseSidebarProps = React.ComponentProps<typeof Sidebar> & {\n /** Label to display on the footer button */\n footerLabel?: string;\n /** Secondary label (e.g., network name) */\n footerSecondaryLabel?: string;\n /** Click handler for footer button */\n onFooterClick?: () => void;\n /** Logo URL (defaults to aomi logo) */\n logoUrl?: string;\n /** Logo link href */\n logoHref?: string;\n};\n\nexport function BaseSidebar({\n footerLabel = \"Connect Wallet\",\n footerSecondaryLabel,\n onFooterClick,\n logoUrl = \"/assets/images/a.svg\",\n logoHref = \"https://aomi.dev\",\n ...props\n}: BaseSidebarProps) {\n return (\n <Sidebar\n collapsible=\"offcanvas\"\n variant=\"inset\"\n className=\"relative\"\n {...props}\n >\n <SidebarHeader className=\"aomi-sidebar-header\">\n <div className=\"aomi-sidebar-header-content flex items-center justify-between\">\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton size=\"lg\" asChild>\n <Link\n href={logoHref}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <div className=\"aomi-sidebar-header-icon-wrapper flex aspect-square size-8 items-center justify-center rounded-lg bg-white\">\n <Image\n src={logoUrl}\n alt=\"Logo\"\n width={28}\n height={28}\n className=\"aomi-sidebar-header-icon size-7 ml-3\"\n priority\n />\n </div>\n </Link>\n </SidebarMenuButton>\n </SidebarMenuItem>\n </SidebarMenu>\n </div>\n </SidebarHeader>\n <SidebarContent className=\"aomi-sidebar-content\">\n <ThreadList />\n </SidebarContent>\n <SidebarRail />\n <SidebarFooter className=\"aomi-sidebar-footer border-t border-sm py-4\">\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton size=\"lg\" asChild>\n <Button\n className=\"w-full justify-center rounded-full text-white shadow-lg hover:bg-[var(--muted-foreground)] hover:text-white\"\n onClick={onFooterClick}\n >\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm\">{footerLabel}</span>\n {footerSecondaryLabel ? (\n <span className=\"text-[11px] text-white/80\">• {footerSecondaryLabel}</span>\n ) : null}\n </div>\n </Button>\n </SidebarMenuButton>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarFooter>\n </Sidebar>\n );\n}\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-lg border bg-card text-card-foreground shadow-sm\",\n className\n )}\n {...props}\n />\n))\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...props}\n />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\n \"text-2xl font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground hover:bg-primary/80\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n destructive:\n \"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80\",\n outline: \"text-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n )\n}\n\nexport { Badge, badgeVariants }\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Label = React.forwardRef<\n HTMLLabelElement,\n React.LabelHTMLAttributes<HTMLLabelElement>\n>(({ className, ...props }, ref) => (\n <label\n ref={ref}\n className={cn(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\",\n className\n )}\n {...props}\n />\n))\nLabel.displayName = \"Label\"\n\nexport { Label }\n"],"mappings":"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","names":["useState","useCallback","CheckIcon","CopyIcon","ComposerPrimitive","MessagePrimitive","useEffect","jsx","jsx","jsxs","jsx","jsxs","CheckIcon","useState","jsx","jsxs","useState","CheckIcon","useState","Image","XIcon","jsx","jsxs","jsx","jsx","jsxs","useState","_a","src","Image","XIcon","useState","jsx","useState","useAssistantApi","jsx","jsxs","useAssistantApi","useEffect","ComposerPrimitive","MessagePrimitive","CheckIcon","CopyIcon","Image","React","Slot","cva","jsx","jsx","XIcon","jsx","jsxs","XIcon","jsx","jsx","jsxs","open","jsx","jsxs","jsx","Slot","cva","jsxs","jsx","Slot","useAssistantState","PlusIcon","jsx","jsxs","PlusIcon","useAssistantState","jsx","jsxs","Image","Slot","jsx","jsxs","Slot","createContext","useCallback","useContext","useEffect","useRef","useState","jsx","createContext","parseTimestamp","useContext","useState","useRef","useCallback","useEffect","_a","useEffect","useRef","useRef","useEffect","jsx","jsxs","useState","useCallback","Link","Image","jsx","jsxs","Link","Image","React","jsx","cva","jsx","cva","React","jsx"]}