@tanstack/ai-devtools-core 0.0.1
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/LICENSE +21 -0
- package/README.md +131 -0
- package/dist/esm/components/ConversationDetails.d.ts +2 -0
- package/dist/esm/components/ConversationDetails.js +134 -0
- package/dist/esm/components/ConversationDetails.js.map +1 -0
- package/dist/esm/components/ConversationsList.d.ts +2 -0
- package/dist/esm/components/ConversationsList.js +30 -0
- package/dist/esm/components/ConversationsList.js.map +1 -0
- package/dist/esm/components/Shell.d.ts +1 -0
- package/dist/esm/components/Shell.js +94 -0
- package/dist/esm/components/Shell.js.map +1 -0
- package/dist/esm/components/conversation/ChunkBadges.d.ts +7 -0
- package/dist/esm/components/conversation/ChunkBadges.js +54 -0
- package/dist/esm/components/conversation/ChunkBadges.js.map +1 -0
- package/dist/esm/components/conversation/ChunkItem.d.ts +9 -0
- package/dist/esm/components/conversation/ChunkItem.js +247 -0
- package/dist/esm/components/conversation/ChunkItem.js.map +1 -0
- package/dist/esm/components/conversation/ChunksCollapsible.d.ts +7 -0
- package/dist/esm/components/conversation/ChunksCollapsible.js +77 -0
- package/dist/esm/components/conversation/ChunksCollapsible.js.map +1 -0
- package/dist/esm/components/conversation/ChunksTab.d.ts +8 -0
- package/dist/esm/components/conversation/ChunksTab.js +87 -0
- package/dist/esm/components/conversation/ChunksTab.js.map +1 -0
- package/dist/esm/components/conversation/ConversationHeader.d.ts +7 -0
- package/dist/esm/components/conversation/ConversationHeader.js +187 -0
- package/dist/esm/components/conversation/ConversationHeader.js.map +1 -0
- package/dist/esm/components/conversation/ConversationTabs.d.ts +10 -0
- package/dist/esm/components/conversation/ConversationTabs.js +88 -0
- package/dist/esm/components/conversation/ConversationTabs.js.map +1 -0
- package/dist/esm/components/conversation/EmbeddingsTab.d.ts +7 -0
- package/dist/esm/components/conversation/EmbeddingsTab.js +90 -0
- package/dist/esm/components/conversation/EmbeddingsTab.js.map +1 -0
- package/dist/esm/components/conversation/MessageCard.d.ts +7 -0
- package/dist/esm/components/conversation/MessageCard.js +152 -0
- package/dist/esm/components/conversation/MessageCard.js.map +1 -0
- package/dist/esm/components/conversation/MessageGroup.d.ts +15 -0
- package/dist/esm/components/conversation/MessageGroup.js +119 -0
- package/dist/esm/components/conversation/MessageGroup.js.map +1 -0
- package/dist/esm/components/conversation/MessagesTab.d.ts +7 -0
- package/dist/esm/components/conversation/MessagesTab.js +37 -0
- package/dist/esm/components/conversation/MessagesTab.js.map +1 -0
- package/dist/esm/components/conversation/SummariesTab.d.ts +7 -0
- package/dist/esm/components/conversation/SummariesTab.js +110 -0
- package/dist/esm/components/conversation/SummariesTab.js.map +1 -0
- package/dist/esm/components/conversation/ToolCallDisplay.d.ts +7 -0
- package/dist/esm/components/conversation/ToolCallDisplay.js +123 -0
- package/dist/esm/components/conversation/ToolCallDisplay.js.map +1 -0
- package/dist/esm/components/conversation/index.d.ts +7 -0
- package/dist/esm/components/list/ConversationRow.d.ts +7 -0
- package/dist/esm/components/list/ConversationRow.js +122 -0
- package/dist/esm/components/list/ConversationRow.js.map +1 -0
- package/dist/esm/components/list/index.d.ts +1 -0
- package/dist/esm/components/utils/format.d.ts +6 -0
- package/dist/esm/components/utils/format.js +68 -0
- package/dist/esm/components/utils/format.js.map +1 -0
- package/dist/esm/components/utils/index.d.ts +1 -0
- package/dist/esm/core.d.ts +18 -0
- package/dist/esm/core.js +9 -0
- package/dist/esm/core.js.map +1 -0
- package/dist/esm/index.d.ts +9 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/production.d.ts +2 -0
- package/dist/esm/production.js +5 -0
- package/dist/esm/production.js.map +1 -0
- package/dist/esm/store/ai-context.d.ts +126 -0
- package/dist/esm/store/ai-context.js +1081 -0
- package/dist/esm/store/ai-context.js.map +1 -0
- package/dist/esm/store/ai-store.d.ts +1 -0
- package/dist/esm/styles/tokens.d.ts +298 -0
- package/dist/esm/styles/tokens.js +107 -0
- package/dist/esm/styles/tokens.js.map +1 -0
- package/dist/esm/styles/use-styles.d.ts +226 -0
- package/dist/esm/styles/use-styles.js +1538 -0
- package/dist/esm/styles/use-styles.js.map +1 -0
- package/package.json +61 -0
- package/src/components/ConversationDetails.tsx +89 -0
- package/src/components/ConversationsList.tsx +21 -0
- package/src/components/Shell.tsx +93 -0
- package/src/components/conversation/ChunkBadges.tsx +51 -0
- package/src/components/conversation/ChunkItem.tsx +273 -0
- package/src/components/conversation/ChunksCollapsible.tsx +58 -0
- package/src/components/conversation/ChunksTab.tsx +85 -0
- package/src/components/conversation/ConversationHeader.tsx +130 -0
- package/src/components/conversation/ConversationTabs.tsx +104 -0
- package/src/components/conversation/EmbeddingsTab.tsx +80 -0
- package/src/components/conversation/MessageCard.tsx +137 -0
- package/src/components/conversation/MessageGroup.tsx +101 -0
- package/src/components/conversation/MessagesTab.tsx +30 -0
- package/src/components/conversation/SummariesTab.tsx +91 -0
- package/src/components/conversation/ToolCallDisplay.tsx +99 -0
- package/src/components/conversation/index.ts +8 -0
- package/src/components/list/ConversationRow.tsx +85 -0
- package/src/components/list/index.ts +1 -0
- package/src/components/utils/format.ts +61 -0
- package/src/components/utils/index.ts +1 -0
- package/src/core.tsx +10 -0
- package/src/index.ts +8 -0
- package/src/production.ts +3 -0
- package/src/store/ai-context.tsx +1784 -0
- package/src/store/ai-store.ts +2 -0
- package/src/styles/tokens.ts +305 -0
- package/src/styles/use-styles.ts +1537 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-context.js","sources":["../../../src/store/ai-context.tsx"],"sourcesContent":["import { batch, createContext, onCleanup, onMount, useContext } from 'solid-js'\nimport { createStore, produce } from 'solid-js/store'\nimport { aiEventClient } from '@tanstack/ai/event-client'\nimport type { ParentComponent } from 'solid-js'\n\ninterface MessagePart {\n type: 'text' | 'tool-call' | 'tool-result'\n content?: string\n toolCallId?: string\n toolName?: string\n arguments?: string\n state?: string\n output?: unknown\n error?: string\n}\n\nexport interface ToolCall {\n id: string\n name: string\n arguments: string\n state: string\n result?: unknown\n approvalRequired?: boolean\n approvalId?: string\n /** Duration of tool execution in milliseconds */\n duration?: number\n}\n\ninterface TokenUsage {\n promptTokens: number\n completionTokens: number\n totalTokens: number\n}\n\nexport interface Message {\n id: string\n role: 'user' | 'assistant' | 'system' | 'tool'\n content: string\n timestamp: number\n parts?: Array<MessagePart>\n toolCalls?: Array<ToolCall>\n /** Consolidated chunks - consecutive same-type chunks are merged into one entry */\n chunks?: Array<Chunk>\n /** Total number of raw chunks received (before consolidation) */\n totalChunkCount?: number\n model?: string\n usage?: TokenUsage\n thinkingContent?: string\n /** Source of the message: 'client' for aggregated client-side data, 'server' for individual server chunks */\n source?: 'client' | 'server'\n}\n\n/**\n * Consolidated chunk - represents one or more raw chunks of the same type.\n * Consecutive content/thinking chunks are merged into a single entry with accumulated content.\n */\nexport interface Chunk {\n id: string\n type:\n | 'content'\n | 'tool_call'\n | 'tool_result'\n | 'done'\n | 'error'\n | 'approval'\n | 'thinking'\n timestamp: number\n messageId?: string\n /** Accumulated content from all merged chunks */\n content?: string\n /** The last delta received (kept for debugging) */\n delta?: string\n toolName?: string\n toolCallId?: string\n finishReason?: string\n error?: string\n approvalId?: string\n input?: unknown\n /** Tool arguments for tool_call chunks */\n arguments?: string\n /** Tool result data for tool_result chunks */\n result?: unknown\n /** Duration in ms for tool execution */\n duration?: number\n /** Number of raw chunks that were merged into this consolidated chunk */\n chunkCount: number\n}\n\nexport interface EmbeddingOperation {\n id: string\n model: string\n inputCount: number\n duration: number\n timestamp: number\n status: 'started' | 'completed'\n}\n\nexport interface SummarizeOperation {\n id: string\n model: string\n inputLength: number\n outputLength?: number\n duration?: number\n timestamp: number\n status: 'started' | 'completed'\n}\n\nexport interface Conversation {\n id: string\n type: 'client' | 'server'\n label: string\n messages: Array<Message>\n chunks: Array<Chunk>\n model?: string\n provider?: string\n status: 'active' | 'completed' | 'error'\n startedAt: number\n completedAt?: number\n usage?: TokenUsage\n iterationCount?: number\n toolNames?: Array<string>\n options?: Record<string, unknown>\n providerOptions?: Record<string, unknown>\n /** Flags for which operation types this conversation has */\n hasChat?: boolean\n hasEmbedding?: boolean\n hasSummarize?: boolean\n /** Embedding operations in this conversation */\n embeddings?: Array<EmbeddingOperation>\n /** Summarize operations in this conversation */\n summaries?: Array<SummarizeOperation>\n}\n\ninterface AIStoreState {\n conversations: Record<string, Conversation>\n activeConversationId: string | null\n}\n\ninterface AIContextValue {\n state: AIStoreState\n clearAllConversations: () => void\n selectConversation: (id: string) => void\n}\n\nconst AIContext = createContext<AIContextValue>()\n\nexport function useAIStore(): AIContextValue {\n const context = useContext(AIContext)\n if (!context) {\n throw new Error('useAIStore must be used within an AIProvider')\n }\n return context\n}\n\nexport const AIProvider: ParentComponent = (props) => {\n const [state, setState] = createStore<AIStoreState>({\n conversations: {},\n activeConversationId: null,\n })\n\n const streamToConversation = new Map<string, string>()\n const requestToConversation = new Map<string, string>()\n\n // Batching system for high-frequency chunk updates with consolidated chunk merging\n // Stores: conversationId -> { chunks to merge, totalNewChunks count }\n const pendingConversationChunks = new Map<\n string,\n { chunks: Array<Chunk>; newChunkCount: number }\n >()\n // Stores: conversationId -> messageIndex -> { chunks to merge, totalNewChunks count }\n const pendingMessageChunks = new Map<\n string,\n Map<number, { chunks: Array<Chunk>; newChunkCount: number }>\n >()\n let batchScheduled = false\n\n function scheduleBatchFlush(): void {\n if (batchScheduled) return\n batchScheduled = true\n queueMicrotask(flushPendingChunks)\n }\n\n /** Check if a chunk type can be merged with consecutive same-type chunks */\n function isMergeableChunkType(type: Chunk['type']): boolean {\n return type === 'content' || type === 'thinking'\n }\n\n /** Merge pending chunks into existing chunks array, consolidating consecutive same-type chunks */\n function mergeChunks(existing: Array<Chunk>, pending: Array<Chunk>): void {\n for (const chunk of pending) {\n const lastChunk = existing[existing.length - 1]\n\n // If last chunk exists, is the same type, and both are mergeable types, merge them\n if (\n lastChunk &&\n lastChunk.type === chunk.type &&\n isMergeableChunkType(chunk.type) &&\n lastChunk.messageId === chunk.messageId\n ) {\n // Merge: use the new chunk's content (it's already accumulated), update delta, increment count\n lastChunk.content = chunk.content || lastChunk.content\n lastChunk.delta = chunk.delta\n lastChunk.chunkCount += chunk.chunkCount\n } else {\n // Different type or not mergeable - add as new entry\n existing.push(chunk)\n }\n }\n }\n\n function flushPendingChunks(): void {\n batchScheduled = false\n\n batch(() => {\n // Flush conversation-level chunks\n for (const [\n conversationId,\n { chunks, newChunkCount },\n ] of pendingConversationChunks) {\n const conv = state.conversations[conversationId]\n if (conv) {\n setState(\n 'conversations',\n conversationId,\n 'chunks',\n produce((arr: Array<Chunk>) => {\n mergeChunks(arr, chunks)\n }),\n )\n }\n }\n pendingConversationChunks.clear()\n\n // Flush message-level chunks\n for (const [conversationId, messageMap] of pendingMessageChunks) {\n const conv = state.conversations[conversationId]\n if (!conv) continue\n\n for (const [messageIndex, { chunks, newChunkCount }] of messageMap) {\n const message = conv.messages[messageIndex]\n if (message) {\n // Update chunks array with merging\n setState(\n 'conversations',\n conversationId,\n 'messages',\n messageIndex,\n 'chunks',\n produce((arr: Array<Chunk> | undefined) => {\n if (!arr) {\n // First time - just set the chunks (they're already consolidated in pending)\n return chunks\n }\n mergeChunks(arr, chunks)\n return arr\n }),\n )\n // Update total chunk count\n const currentTotal = message.totalChunkCount || 0\n setState(\n 'conversations',\n conversationId,\n 'messages',\n messageIndex,\n 'totalChunkCount',\n currentTotal + newChunkCount,\n )\n }\n }\n }\n pendingMessageChunks.clear()\n })\n }\n\n function queueChunk(conversationId: string, chunk: Chunk): void {\n if (!pendingConversationChunks.has(conversationId)) {\n pendingConversationChunks.set(conversationId, {\n chunks: [],\n newChunkCount: 0,\n })\n }\n const pending = pendingConversationChunks.get(conversationId)!\n\n // Pre-merge in pending buffer to reduce array operations during flush\n const lastPending = pending.chunks[pending.chunks.length - 1]\n if (\n lastPending &&\n lastPending.type === chunk.type &&\n isMergeableChunkType(chunk.type) &&\n lastPending.messageId === chunk.messageId\n ) {\n // Merge into pending buffer - only append delta (incremental content)\n // Use the new chunk's content as the accumulated content (it's already accumulated)\n lastPending.content = chunk.content || lastPending.content\n lastPending.delta = chunk.delta\n lastPending.chunkCount += chunk.chunkCount\n } else {\n pending.chunks.push(chunk)\n }\n pending.newChunkCount += chunk.chunkCount\n scheduleBatchFlush()\n }\n\n function queueMessageChunk(\n conversationId: string,\n messageIndex: number,\n chunk: Chunk,\n ): void {\n if (!pendingMessageChunks.has(conversationId)) {\n pendingMessageChunks.set(conversationId, new Map())\n }\n const messageMap = pendingMessageChunks.get(conversationId)!\n if (!messageMap.has(messageIndex)) {\n messageMap.set(messageIndex, { chunks: [], newChunkCount: 0 })\n }\n const pending = messageMap.get(messageIndex)!\n\n // Pre-merge in pending buffer\n const lastPending = pending.chunks[pending.chunks.length - 1]\n if (\n lastPending &&\n lastPending.type === chunk.type &&\n isMergeableChunkType(chunk.type) &&\n lastPending.messageId === chunk.messageId\n ) {\n // Merge into pending buffer - only append delta (incremental content)\n // Use the new chunk's content as the accumulated content (it's already accumulated)\n lastPending.content = chunk.content || lastPending.content\n lastPending.delta = chunk.delta\n lastPending.chunkCount += chunk.chunkCount\n } else {\n pending.chunks.push(chunk)\n }\n pending.newChunkCount += chunk.chunkCount\n scheduleBatchFlush()\n }\n\n // Optimized helper functions using path-based updates\n function getOrCreateConversation(\n id: string,\n type: 'client' | 'server',\n label: string,\n ): void {\n if (!state.conversations[id]) {\n setState('conversations', id, {\n id,\n type,\n label,\n messages: [],\n chunks: [],\n status: 'active',\n startedAt: Date.now(),\n })\n if (!state.activeConversationId) {\n setState('activeConversationId', id)\n }\n }\n }\n\n function addMessage(conversationId: string, message: Message): void {\n const conv = state.conversations[conversationId]\n if (!conv) return\n setState(\n 'conversations',\n conversationId,\n 'messages',\n conv.messages.length,\n message,\n )\n }\n\n function addChunkToMessage(conversationId: string, chunk: Chunk): void {\n const conv = state.conversations[conversationId]\n if (!conv) return\n\n if (chunk.messageId) {\n const messageIndex = conv.messages.findIndex(\n (msg) => msg.id === chunk.messageId,\n )\n\n if (messageIndex !== -1) {\n queueMessageChunk(conversationId, messageIndex, chunk)\n return\n } else {\n // Create new message with the chunk\n const newMessage: Message = {\n id: chunk.messageId,\n role: 'assistant',\n content: '',\n timestamp: chunk.timestamp,\n model: conv.model,\n chunks: [chunk],\n }\n setState(\n 'conversations',\n conversationId,\n 'messages',\n conv.messages.length,\n newMessage,\n )\n return\n }\n }\n\n // Find last assistant message\n for (let i = conv.messages.length - 1; i >= 0; i--) {\n const message = conv.messages[i]\n if (message && message.role === 'assistant') {\n queueMessageChunk(conversationId, i, chunk)\n return\n }\n }\n }\n\n function updateMessageUsage(\n conversationId: string,\n messageId: string | undefined,\n cumulativeUsage: TokenUsage,\n ): void {\n const conv = state.conversations[conversationId]\n if (!conv) return\n\n // Calculate the sum of usage from all previous messages (excluding the target message)\n let previousPromptTokens = 0\n let previousCompletionTokens = 0\n\n // Find the target message index\n let targetMessageIndex = -1\n if (messageId) {\n targetMessageIndex = conv.messages.findIndex(\n (msg) => msg.id === messageId,\n )\n } else {\n // Find last assistant message\n for (let i = conv.messages.length - 1; i >= 0; i--) {\n if (conv.messages[i]?.role === 'assistant') {\n targetMessageIndex = i\n break\n }\n }\n }\n\n if (targetMessageIndex === -1) return\n\n // Sum up usage from all previous assistant messages\n for (let i = 0; i < targetMessageIndex; i++) {\n const msg = conv.messages[i]\n if (msg?.role === 'assistant' && msg.usage) {\n previousPromptTokens += msg.usage.promptTokens\n previousCompletionTokens += msg.usage.completionTokens\n }\n }\n\n // Calculate delta usage for this message\n const deltaUsage: TokenUsage = {\n promptTokens: Math.max(\n 0,\n cumulativeUsage.promptTokens - previousPromptTokens,\n ),\n completionTokens: Math.max(\n 0,\n cumulativeUsage.completionTokens - previousCompletionTokens,\n ),\n totalTokens: 0,\n }\n deltaUsage.totalTokens =\n deltaUsage.promptTokens + deltaUsage.completionTokens\n\n setState(\n 'conversations',\n conversationId,\n 'messages',\n targetMessageIndex,\n 'usage',\n deltaUsage,\n )\n }\n\n // Public actions\n function clearAllConversations() {\n setState('conversations', {})\n setState('activeConversationId', null)\n streamToConversation.clear()\n requestToConversation.clear()\n pendingConversationChunks.clear()\n pendingMessageChunks.clear()\n }\n\n function selectConversation(id: string) {\n setState('activeConversationId', id)\n }\n\n // Additional optimized helper functions\n function updateConversation(\n conversationId: string,\n updates: Partial<Conversation>,\n ): void {\n if (!state.conversations[conversationId]) return\n for (const [key, value] of Object.entries(updates)) {\n setState(\n 'conversations',\n conversationId,\n key as keyof Conversation,\n value as Conversation[keyof Conversation],\n )\n }\n }\n\n function updateMessage(\n conversationId: string,\n messageIndex: number,\n updates: Partial<Message>,\n ): void {\n const conv = state.conversations[conversationId]\n if (!conv || !conv.messages[messageIndex]) return\n for (const [key, value] of Object.entries(updates)) {\n setState(\n 'conversations',\n conversationId,\n 'messages',\n messageIndex,\n key as keyof Message,\n value as Message[keyof Message],\n )\n }\n }\n\n function updateToolCall(\n conversationId: string,\n messageIndex: number,\n toolCallIndex: number,\n updates: Partial<ToolCall>,\n ): void {\n const conv = state.conversations[conversationId]\n if (!conv?.messages[messageIndex]?.toolCalls?.[toolCallIndex]) return\n setState(\n 'conversations',\n conversationId,\n 'messages',\n messageIndex,\n 'toolCalls',\n toolCallIndex,\n produce((tc: ToolCall) => Object.assign(tc, updates)),\n )\n }\n\n function setToolCalls(\n conversationId: string,\n messageIndex: number,\n toolCalls: Array<ToolCall>,\n ): void {\n if (!state.conversations[conversationId]?.messages[messageIndex]) return\n setState(\n 'conversations',\n conversationId,\n 'messages',\n messageIndex,\n 'toolCalls',\n toolCalls,\n )\n }\n\n function addChunk(conversationId: string, chunk: Chunk): void {\n if (!state.conversations[conversationId]) return\n queueChunk(conversationId, chunk)\n }\n\n /**\n * For server conversations, ensure a message exists for the given messageId.\n * This creates a placeholder message that will be updated as chunks arrive.\n */\n function ensureMessageForChunk(\n conversationId: string,\n messageId: string | undefined,\n timestamp: number,\n ): void {\n if (!messageId) return\n const conv = state.conversations[conversationId]\n if (!conv || conv.type === 'client') return\n\n // Check if message already exists\n const existingMessage = conv.messages.find((m) => m.id === messageId)\n if (existingMessage) return\n\n // Create a new message for this messageId (server-side message)\n addMessage(conversationId, {\n id: messageId,\n role: 'assistant',\n content: '',\n timestamp,\n source: 'server',\n })\n }\n\n // Register all event listeners on mount\n onMount(() => {\n const cleanupFns: Array<() => void> = []\n\n // ============= Client Events =============\n\n cleanupFns.push(\n aiEventClient.on(\n 'client:created',\n (e) => {\n const clientId = e.payload.clientId\n getOrCreateConversation(\n clientId,\n 'client',\n `Client Chat (${clientId.substring(0, 8)})`,\n )\n updateConversation(clientId, { model: undefined, provider: 'Client' })\n },\n { withEventTarget: false },\n ),\n )\n\n cleanupFns.push(\n aiEventClient.on(\n 'client:message-sent',\n (e) => {\n const clientId = e.payload.clientId\n if (!state.conversations[clientId]) {\n getOrCreateConversation(\n clientId,\n 'client',\n `Client Chat (${clientId.substring(0, 8)})`,\n )\n }\n addMessage(clientId, {\n id: e.payload.messageId,\n role: 'user',\n content: e.payload.content,\n timestamp: e.payload.timestamp,\n source: 'client',\n })\n updateConversation(clientId, { status: 'active' })\n },\n { withEventTarget: false },\n ),\n )\n\n cleanupFns.push(\n aiEventClient.on(\n 'client:message-appended',\n (e) => {\n const clientId = e.payload.clientId\n const role = e.payload.role\n\n if (role === 'user') return\n if (!state.conversations[clientId]) return\n\n if (role === 'assistant') {\n addMessage(clientId, {\n id: e.payload.messageId,\n role: 'assistant',\n content: e.payload.contentPreview,\n timestamp: e.payload.timestamp,\n source: 'client',\n })\n } else if (role === 'tool') {\n // Tool result message from the LLM\n addMessage(clientId, {\n id: e.payload.messageId,\n role: 'tool',\n content: e.payload.contentPreview,\n timestamp: e.payload.timestamp,\n source: 'client',\n })\n }\n },\n { withEventTarget: false },\n ),\n )\n\n cleanupFns.push(\n aiEventClient.on(\n 'client:loading-changed',\n (e) => {\n const clientId = e.payload.clientId\n if (state.conversations[clientId]) {\n updateConversation(clientId, {\n status: e.payload.isLoading ? 'active' : 'completed',\n })\n }\n },\n { withEventTarget: false },\n ),\n )\n\n cleanupFns.push(\n aiEventClient.on(\n 'client:stopped',\n (e) => {\n const clientId = e.payload.clientId\n if (state.conversations[clientId]) {\n updateConversation(clientId, {\n status: 'completed',\n completedAt: e.payload.timestamp,\n })\n }\n },\n { withEventTarget: false },\n ),\n )\n\n cleanupFns.push(\n aiEventClient.on(\n 'client:messages-cleared',\n (e) => {\n const clientId = e.payload.clientId\n if (state.conversations[clientId]) {\n updateConversation(clientId, {\n messages: [],\n chunks: [],\n usage: undefined,\n })\n }\n },\n { withEventTarget: false },\n ),\n )\n\n cleanupFns.push(\n aiEventClient.on(\n 'client:reloaded',\n (e) => {\n const clientId = e.payload.clientId\n const conv = state.conversations[clientId]\n if (conv) {\n updateConversation(clientId, {\n messages: conv.messages.slice(0, e.payload.fromMessageIndex),\n status: 'active',\n })\n }\n },\n { withEventTarget: false },\n ),\n )\n\n cleanupFns.push(\n aiEventClient.on(\n 'client:error-changed',\n (e) => {\n const clientId = e.payload.clientId\n if (state.conversations[clientId] && e.payload.error) {\n updateConversation(clientId, { status: 'error' })\n }\n },\n { withEventTarget: false },\n ),\n )\n\n cleanupFns.push(\n aiEventClient.on(\n 'client:assistant-message-updated',\n (e) => {\n const clientId = e.payload.clientId\n const messageId = e.payload.messageId\n const content = e.payload.content\n\n if (!state.conversations[clientId]) return\n\n const conv = state.conversations[clientId]\n\n // Find message by ID anywhere in the list, not just the last one\n const messageIndex = conv.messages.findIndex(\n (m: Message) => m.id === messageId,\n )\n\n // Only update existing messages, don't create new ones\n // (client:message-appended is responsible for creating messages)\n if (messageIndex >= 0) {\n updateMessage(clientId, messageIndex, {\n content,\n model: conv.model,\n })\n }\n },\n { withEventTarget: false },\n ),\n )\n\n cleanupFns.push(\n aiEventClient.on(\n 'client:tool-call-updated',\n (e) => {\n const {\n clientId,\n messageId,\n toolCallId,\n toolName,\n state: toolCallState,\n arguments: args,\n } = e.payload as {\n clientId: string\n messageId: string\n toolCallId: string\n toolName: string\n state: string\n arguments: unknown\n timestamp: number\n }\n\n if (!state.conversations[clientId]) return\n\n const conv = state.conversations[clientId]\n const messageIndex = conv.messages.findIndex(\n (m: Message) => m.id === messageId,\n )\n if (messageIndex === -1) return\n\n const message = conv.messages[messageIndex]\n if (!message) return\n\n const toolCalls = message.toolCalls || []\n const existingToolIndex = toolCalls.findIndex(\n (t: ToolCall) => t.id === toolCallId,\n )\n\n const toolCall: ToolCall = {\n id: toolCallId,\n name: toolName,\n arguments: JSON.stringify(args, null, 2),\n state: toolCallState,\n }\n\n if (existingToolIndex >= 0) {\n updateToolCall(clientId, messageIndex, existingToolIndex, toolCall)\n } else {\n setToolCalls(clientId, messageIndex, [...toolCalls, toolCall])\n }\n },\n { withEventTarget: false },\n ),\n )\n\n cleanupFns.push(\n aiEventClient.on(\n 'client:approval-requested',\n (e) => {\n const { clientId, messageId, toolCallId, approvalId } = e.payload\n\n if (!state.conversations[clientId]) return\n\n const conv = state.conversations[clientId]\n const messageIndex = conv.messages.findIndex(\n (m) => m.id === messageId,\n )\n if (messageIndex === -1) return\n\n const message = conv.messages[messageIndex]\n if (!message?.toolCalls) return\n\n const toolCallIndex = message.toolCalls.findIndex(\n (t) => t.id === toolCallId,\n )\n if (toolCallIndex === -1) return\n\n updateToolCall(clientId, messageIndex, toolCallIndex, {\n approvalRequired: true,\n approvalId,\n state: 'approval-requested',\n })\n },\n { withEventTarget: false },\n ),\n )\n\n // ============= Tool Events =============\n\n cleanupFns.push(\n aiEventClient.on(\n 'tool:result-added',\n (e) => {\n const {\n clientId,\n toolCallId,\n toolName,\n output,\n state: resultState,\n timestamp,\n } = e.payload\n\n if (!state.conversations[clientId]) return\n\n const conv = state.conversations[clientId]\n\n // Find the message with the tool call and update it\n for (\n let messageIndex = conv.messages.length - 1;\n messageIndex >= 0;\n messageIndex--\n ) {\n const message = conv.messages[messageIndex]\n if (!message?.toolCalls) continue\n\n const toolCallIndex = message.toolCalls.findIndex(\n (t: ToolCall) => t.id === toolCallId,\n )\n if (toolCallIndex >= 0) {\n // Update the tool call state\n updateToolCall(clientId, messageIndex, toolCallIndex, {\n result: output,\n state: resultState === 'output-error' ? 'error' : 'complete',\n })\n\n // Also add a chunk to show the tool result in the chunks view\n const chunk: Chunk = {\n id: `chunk-tool-result-${toolCallId}-${Date.now()}`,\n type: 'tool_result',\n messageId: message.id,\n toolCallId,\n toolName,\n result: output,\n timestamp,\n chunkCount: 1,\n }\n addChunkToMessage(clientId, chunk)\n return\n }\n }\n },\n { withEventTarget: false },\n ),\n )\n\n cleanupFns.push(\n aiEventClient.on(\n 'tool:approval-responded',\n (e) => {\n const { clientId, toolCallId, approved } = e.payload\n\n if (!state.conversations[clientId]) return\n\n const conv = state.conversations[clientId]\n\n for (\n let messageIndex = conv.messages.length - 1;\n messageIndex >= 0;\n messageIndex--\n ) {\n const message = conv.messages[messageIndex]\n if (!message?.toolCalls) continue\n\n const toolCallIndex = message.toolCalls.findIndex(\n (t: ToolCall) => t.id === toolCallId,\n )\n if (toolCallIndex >= 0) {\n updateToolCall(clientId, messageIndex, toolCallIndex, {\n state: approved ? 'approved' : 'denied',\n approvalRequired: false,\n })\n return\n }\n }\n },\n { withEventTarget: false },\n ),\n )\n\n // ============= Stream Events =============\n\n cleanupFns.push(\n aiEventClient.on(\n 'stream:chunk:content',\n (e) => {\n const streamId = e.payload.streamId\n const conversationId = streamToConversation.get(streamId)\n if (!conversationId) return\n\n const chunk: Chunk = {\n id: `chunk-${Date.now()}-${Math.random()}`,\n type: 'content',\n messageId: e.payload.messageId,\n content: e.payload.content,\n delta: e.payload.delta,\n timestamp: e.payload.timestamp,\n chunkCount: 1,\n }\n\n const conv = state.conversations[conversationId]\n if (conv?.type === 'client') {\n addChunkToMessage(conversationId, chunk)\n } else {\n ensureMessageForChunk(\n conversationId,\n e.payload.messageId,\n e.payload.timestamp,\n )\n addChunk(conversationId, chunk)\n }\n },\n { withEventTarget: false },\n ),\n )\n\n cleanupFns.push(\n aiEventClient.on(\n 'stream:chunk:tool-call',\n (e) => {\n const streamId = e.payload.streamId\n const conversationId = streamToConversation.get(streamId)\n if (!conversationId) return\n\n const chunk: Chunk = {\n id: `chunk-${Date.now()}-${Math.random()}`,\n type: 'tool_call',\n messageId: e.payload.messageId,\n toolCallId: e.payload.toolCallId,\n toolName: e.payload.toolName,\n arguments: e.payload.arguments,\n timestamp: e.payload.timestamp,\n chunkCount: 1,\n }\n\n const conv = state.conversations[conversationId]\n if (conv?.type === 'client') {\n addChunkToMessage(conversationId, chunk)\n } else {\n ensureMessageForChunk(\n conversationId,\n e.payload.messageId,\n e.payload.timestamp,\n )\n addChunk(conversationId, chunk)\n }\n },\n { withEventTarget: false },\n ),\n )\n\n cleanupFns.push(\n aiEventClient.on(\n 'stream:chunk:tool-result',\n (e) => {\n const streamId = e.payload.streamId\n const conversationId = streamToConversation.get(streamId)\n if (!conversationId) return\n\n const chunk: Chunk = {\n id: `chunk-${Date.now()}-${Math.random()}`,\n type: 'tool_result',\n messageId: e.payload.messageId,\n toolCallId: e.payload.toolCallId,\n content: e.payload.result,\n timestamp: e.payload.timestamp,\n chunkCount: 1,\n }\n\n const conv = state.conversations[conversationId]\n if (conv?.type === 'client') {\n addChunkToMessage(conversationId, chunk)\n } else {\n ensureMessageForChunk(\n conversationId,\n e.payload.messageId,\n e.payload.timestamp,\n )\n addChunk(conversationId, chunk)\n }\n\n // Also update the toolCalls array with the result\n if (conv && e.payload.toolCallId) {\n for (let i = conv.messages.length - 1; i >= 0; i--) {\n const message = conv.messages[i]\n if (!message?.toolCalls) continue\n\n const toolCallIndex = message.toolCalls.findIndex(\n (t) => t.id === e.payload.toolCallId,\n )\n if (toolCallIndex >= 0) {\n updateToolCall(conversationId, i, toolCallIndex, {\n result: e.payload.result,\n state: 'complete',\n })\n break\n }\n }\n }\n },\n { withEventTarget: false },\n ),\n )\n\n cleanupFns.push(\n aiEventClient.on(\n 'stream:chunk:thinking',\n (e) => {\n const streamId = e.payload.streamId\n const conversationId = streamToConversation.get(streamId)\n if (!conversationId) return\n\n const chunk: Chunk = {\n id: `chunk-${Date.now()}-${Math.random()}`,\n type: 'thinking',\n messageId: e.payload.messageId,\n content: e.payload.content,\n delta: e.payload.delta,\n timestamp: e.payload.timestamp,\n chunkCount: 1,\n }\n\n const conv = state.conversations[conversationId]\n if (conv?.type === 'client') {\n addChunkToMessage(conversationId, chunk)\n\n if (e.payload.messageId) {\n const messageIndex = conv.messages.findIndex(\n (msg) => msg.id === e.payload.messageId,\n )\n if (messageIndex !== -1) {\n updateMessage(conversationId, messageIndex, {\n thinkingContent: e.payload.content,\n })\n }\n }\n } else {\n ensureMessageForChunk(\n conversationId,\n e.payload.messageId,\n e.payload.timestamp,\n )\n addChunk(conversationId, chunk)\n }\n },\n { withEventTarget: false },\n ),\n )\n\n cleanupFns.push(\n aiEventClient.on(\n 'stream:chunk:done',\n (e) => {\n const streamId = e.payload.streamId\n const conversationId = streamToConversation.get(streamId)\n if (!conversationId) return\n\n const chunk: Chunk = {\n id: `chunk-${Date.now()}-${Math.random()}`,\n type: 'done',\n messageId: e.payload.messageId,\n finishReason: e.payload.finishReason || undefined,\n timestamp: e.payload.timestamp,\n chunkCount: 1,\n }\n\n if (e.payload.usage) {\n updateConversation(conversationId, { usage: e.payload.usage })\n updateMessageUsage(\n conversationId,\n e.payload.messageId,\n e.payload.usage,\n )\n }\n\n const conv = state.conversations[conversationId]\n if (conv?.type === 'client') {\n addChunkToMessage(conversationId, chunk)\n } else {\n ensureMessageForChunk(\n conversationId,\n e.payload.messageId,\n e.payload.timestamp,\n )\n addChunk(conversationId, chunk)\n }\n\n updateConversation(conversationId, {\n status: 'completed',\n completedAt: e.payload.timestamp,\n })\n },\n { withEventTarget: false },\n ),\n )\n\n cleanupFns.push(\n aiEventClient.on(\n 'stream:chunk:error',\n (e) => {\n const streamId = e.payload.streamId\n const conversationId = streamToConversation.get(streamId)\n if (!conversationId) return\n\n const chunk: Chunk = {\n id: `chunk-${Date.now()}-${Math.random()}`,\n type: 'error',\n messageId: e.payload.messageId,\n error: e.payload.error,\n timestamp: e.payload.timestamp,\n chunkCount: 1,\n }\n\n const conv = state.conversations[conversationId]\n if (conv?.type === 'client') {\n addChunkToMessage(conversationId, chunk)\n } else {\n ensureMessageForChunk(\n conversationId,\n e.payload.messageId,\n e.payload.timestamp,\n )\n addChunk(conversationId, chunk)\n }\n\n updateConversation(conversationId, {\n status: 'error',\n completedAt: e.payload.timestamp,\n })\n },\n { withEventTarget: false },\n ),\n )\n\n cleanupFns.push(\n aiEventClient.on(\n 'stream:ended',\n (e) => {\n const streamId = e.payload.streamId\n const conversationId = streamToConversation.get(streamId)\n if (!conversationId) return\n\n updateConversation(conversationId, {\n status: 'completed',\n completedAt: e.payload.timestamp,\n })\n },\n { withEventTarget: false },\n ),\n )\n\n cleanupFns.push(\n aiEventClient.on(\n 'stream:approval-requested',\n (e) => {\n const {\n streamId,\n messageId,\n toolCallId,\n toolName,\n input,\n approvalId,\n timestamp,\n } = e.payload\n\n const conversationId = streamToConversation.get(streamId)\n if (!conversationId) return\n\n const conv = state.conversations[conversationId]\n if (!conv) return\n\n const chunk: Chunk = {\n id: `chunk-${Date.now()}-${Math.random()}`,\n type: 'approval',\n messageId: messageId,\n toolCallId,\n toolName,\n approvalId,\n input,\n timestamp,\n chunkCount: 1,\n }\n\n if (conv.type === 'client') {\n addChunkToMessage(conversationId, chunk)\n } else {\n addChunk(conversationId, chunk)\n }\n\n for (let i = conv.messages.length - 1; i >= 0; i--) {\n const message = conv.messages[i]\n if (!message) continue\n\n if (message.role === 'assistant' && message.toolCalls) {\n const toolCallIndex = message.toolCalls.findIndex(\n (t: ToolCall) => t.id === toolCallId,\n )\n if (toolCallIndex >= 0) {\n updateToolCall(conversationId, i, toolCallIndex, {\n approvalRequired: true,\n approvalId,\n state: 'approval-requested',\n })\n return\n }\n }\n }\n },\n { withEventTarget: false },\n ),\n )\n\n // ============= Processor Events =============\n\n cleanupFns.push(\n aiEventClient.on(\n 'processor:text-updated',\n (e) => {\n const streamId = e.payload.streamId\n\n let conversationId = streamToConversation.get(streamId)\n\n if (!conversationId) {\n const activeClients = Object.values(state.conversations)\n .filter((c) => c.type === 'client' && c.status === 'active')\n .sort((a, b) => b.startedAt - a.startedAt)\n\n if (activeClients.length > 0 && activeClients[0]) {\n conversationId = activeClients[0].id\n streamToConversation.set(streamId, conversationId)\n }\n }\n\n if (!conversationId) return\n\n const conv = state.conversations[conversationId]\n if (!conv) return\n\n // Only update existing assistant messages, don't create new ones\n // (client:message-appended is responsible for creating messages)\n const lastMessage = conv.messages[conv.messages.length - 1]\n if (lastMessage && lastMessage.role === 'assistant') {\n updateMessage(conversationId, conv.messages.length - 1, {\n content: e.payload.content,\n })\n }\n },\n { withEventTarget: false },\n ),\n )\n\n cleanupFns.push(\n aiEventClient.on(\n 'processor:tool-call-state-changed',\n (e) => {\n const streamId = e.payload.streamId\n const conversationId = streamToConversation.get(streamId)\n\n if (!conversationId || !state.conversations[conversationId]) return\n\n const conv = state.conversations[conversationId]\n const lastMessage = conv.messages[conv.messages.length - 1]\n\n if (lastMessage && lastMessage.role === 'assistant') {\n const toolCalls = lastMessage.toolCalls || []\n const existingToolIndex = toolCalls.findIndex(\n (t) => t.id === e.payload.toolCallId,\n )\n\n const toolCall: ToolCall = {\n id: e.payload.toolCallId,\n name: e.payload.toolName,\n arguments: JSON.stringify(e.payload.arguments, null, 2),\n state: e.payload.state,\n }\n\n if (existingToolIndex >= 0) {\n updateToolCall(\n conversationId,\n conv.messages.length - 1,\n existingToolIndex,\n toolCall,\n )\n } else {\n setToolCalls(conversationId, conv.messages.length - 1, [\n ...toolCalls,\n toolCall,\n ])\n }\n }\n },\n { withEventTarget: false },\n ),\n )\n\n cleanupFns.push(\n aiEventClient.on(\n 'processor:tool-result-state-changed',\n (e) => {\n const streamId = e.payload.streamId\n const conversationId = streamToConversation.get(streamId)\n\n if (!conversationId || !state.conversations[conversationId]) return\n\n const conv = state.conversations[conversationId]\n\n for (let i = conv.messages.length - 1; i >= 0; i--) {\n const message = conv.messages[i]\n if (!message?.toolCalls) continue\n\n const toolCallIndex = message.toolCalls.findIndex(\n (t) => t.id === e.payload.toolCallId,\n )\n if (toolCallIndex >= 0) {\n updateToolCall(conversationId, i, toolCallIndex, {\n result: e.payload.content,\n state: e.payload.error ? 'error' : e.payload.state,\n })\n return\n }\n }\n },\n { withEventTarget: false },\n ),\n )\n\n // ============= Chat Events (for usage tracking) =============\n\n cleanupFns.push(\n aiEventClient.on(\n 'chat:started',\n (e) => {\n const streamId = e.payload.streamId\n const model = e.payload.model\n const provider = e.payload.provider\n const clientId = e.payload.clientId\n\n if (clientId && state.conversations[clientId]) {\n streamToConversation.set(streamId, clientId)\n updateConversation(clientId, { status: 'active', ...e.payload })\n return\n }\n\n const activeClient = Object.values(state.conversations).find(\n (c) => c.type === 'client' && c.status === 'active' && !c.model,\n )\n\n if (activeClient) {\n streamToConversation.set(streamId, activeClient.id)\n updateConversation(activeClient.id, { ...e.payload })\n } else {\n const existingServerConv = Object.values(state.conversations).find(\n (c) => c.type === 'server' && c.model === model,\n )\n\n if (existingServerConv) {\n streamToConversation.set(streamId, existingServerConv.id)\n updateConversation(existingServerConv.id, {\n status: 'active',\n ...e.payload,\n })\n } else {\n const serverId = `server-${model}`\n getOrCreateConversation(serverId, 'server', `${model} Server`)\n streamToConversation.set(streamId, serverId)\n updateConversation(serverId, { ...e.payload })\n }\n }\n },\n { withEventTarget: false },\n ),\n )\n\n cleanupFns.push(\n aiEventClient.on(\n 'chat:completed',\n (e) => {\n const { requestId, usage } = e.payload\n\n const conversationId = requestToConversation.get(requestId)\n if (conversationId && state.conversations[conversationId]) {\n const updates: Partial<Conversation> = {\n status: 'completed',\n completedAt: e.payload.timestamp,\n }\n if (usage) {\n updates.usage = usage\n }\n updateConversation(conversationId, updates)\n if (usage) {\n updateMessageUsage(conversationId, e.payload.messageId, usage)\n }\n }\n },\n { withEventTarget: false },\n ),\n )\n\n cleanupFns.push(\n aiEventClient.on(\n 'chat:iteration',\n (e) => {\n const { requestId, iterationNumber } = e.payload\n\n const conversationId = requestToConversation.get(requestId)\n if (conversationId && state.conversations[conversationId]) {\n updateConversation(conversationId, {\n iterationCount: iterationNumber,\n })\n }\n },\n { withEventTarget: false },\n ),\n )\n\n cleanupFns.push(\n aiEventClient.on(\n 'usage:tokens',\n (e) => {\n const { requestId, usage, messageId } = e.payload\n\n const conversationId = requestToConversation.get(requestId)\n if (conversationId && state.conversations[conversationId]) {\n updateConversation(conversationId, { usage })\n updateMessageUsage(conversationId, messageId, usage)\n }\n },\n { withEventTarget: false },\n ),\n )\n\n // ============= Tool Call Completed (with duration) =============\n\n cleanupFns.push(\n aiEventClient.on(\n 'tool:call-completed',\n (e) => {\n const {\n streamId,\n toolCallId,\n toolName,\n result,\n duration,\n messageId,\n timestamp,\n } = e.payload\n\n const conversationId = streamToConversation.get(streamId)\n if (!conversationId || !state.conversations[conversationId]) return\n\n const conv = state.conversations[conversationId]\n\n // Add a tool_result chunk to show the result in the chunks view\n const chunk: Chunk = {\n id: `chunk-tool-result-${toolCallId}-${Date.now()}`,\n type: 'tool_result',\n messageId: messageId,\n toolCallId,\n toolName,\n result,\n duration,\n timestamp,\n chunkCount: 1,\n }\n\n // Add chunk to message if it's a client conversation, otherwise to conversation\n if (conv.type === 'client' && messageId) {\n const messageIndex = conv.messages.findIndex(\n (m) => m.id === messageId,\n )\n if (messageIndex !== -1) {\n queueMessageChunk(conversationId, messageIndex, chunk)\n } else {\n // If message not found, add to last assistant message\n for (let i = conv.messages.length - 1; i >= 0; i--) {\n if (conv.messages[i]?.role === 'assistant') {\n queueMessageChunk(conversationId, i, chunk)\n break\n }\n }\n }\n } else {\n addChunk(conversationId, chunk)\n }\n\n // Update the tool call with duration\n for (let i = conv.messages.length - 1; i >= 0; i--) {\n const message = conv.messages[i]\n if (!message?.toolCalls) continue\n\n const toolCallIndex = message.toolCalls.findIndex(\n (t) => t.id === toolCallId,\n )\n if (toolCallIndex >= 0) {\n updateToolCall(conversationId, i, toolCallIndex, {\n duration,\n result,\n })\n return\n }\n }\n },\n { withEventTarget: false },\n ),\n )\n\n // ============= Embedding Events =============\n\n cleanupFns.push(\n aiEventClient.on(\n 'embedding:started',\n (e) => {\n const { requestId, model, inputCount, timestamp, clientId } =\n e.payload\n\n // Try to find an active conversation to attach to, or create a new one\n let conversationId = clientId\n if (!conversationId || !state.conversations[conversationId]) {\n // Find most recent active client conversation\n const activeClients = Object.values(state.conversations)\n .filter((c) => c.type === 'client' && c.status === 'active')\n .sort((a, b) => b.startedAt - a.startedAt)\n\n if (activeClients.length > 0 && activeClients[0]) {\n conversationId = activeClients[0].id\n } else {\n // Create a new conversation for embeddings\n conversationId = `embedding-${requestId}`\n getOrCreateConversation(\n conversationId,\n 'server',\n `Embedding (${model})`,\n )\n updateConversation(conversationId, { model })\n }\n }\n\n requestToConversation.set(requestId, conversationId)\n\n const embeddingOp: EmbeddingOperation = {\n id: requestId,\n model,\n inputCount,\n duration: 0,\n timestamp,\n status: 'started',\n }\n\n const conv = state.conversations[conversationId]\n if (conv) {\n const embeddings = conv.embeddings || []\n setState('conversations', conversationId, 'embeddings', [\n ...embeddings,\n embeddingOp,\n ])\n setState('conversations', conversationId, 'hasEmbedding', true)\n }\n },\n { withEventTarget: false },\n ),\n )\n\n cleanupFns.push(\n aiEventClient.on(\n 'embedding:completed',\n (e) => {\n const { requestId, duration } = e.payload\n\n const conversationId = requestToConversation.get(requestId)\n if (!conversationId || !state.conversations[conversationId]) return\n\n const conv = state.conversations[conversationId]\n if (!conv.embeddings) return\n\n const embeddingIndex = conv.embeddings.findIndex(\n (op) => op.id === requestId,\n )\n if (embeddingIndex >= 0) {\n setState(\n 'conversations',\n conversationId,\n 'embeddings',\n embeddingIndex,\n produce((op: EmbeddingOperation) => {\n op.duration = duration\n op.status = 'completed'\n }),\n )\n }\n },\n { withEventTarget: false },\n ),\n )\n\n // ============= Summarize Events =============\n\n cleanupFns.push(\n aiEventClient.on(\n 'summarize:started',\n (e) => {\n const { requestId, model, inputLength, timestamp, clientId } =\n e.payload\n\n // Try to find an active conversation to attach to, or create a new one\n let conversationId = clientId\n if (!conversationId || !state.conversations[conversationId]) {\n // Find most recent active client conversation\n const activeClients = Object.values(state.conversations)\n .filter((c) => c.type === 'client' && c.status === 'active')\n .sort((a, b) => b.startedAt - a.startedAt)\n\n if (activeClients.length > 0 && activeClients[0]) {\n conversationId = activeClients[0].id\n } else {\n // Create a new conversation for summaries\n conversationId = `summarize-${requestId}`\n getOrCreateConversation(\n conversationId,\n 'server',\n `Summarize (${model})`,\n )\n updateConversation(conversationId, { model })\n }\n }\n\n requestToConversation.set(requestId, conversationId)\n\n const summarizeOp: SummarizeOperation = {\n id: requestId,\n model,\n inputLength,\n timestamp,\n status: 'started',\n }\n\n const conv = state.conversations[conversationId]\n if (conv) {\n const summaries = conv.summaries || []\n setState('conversations', conversationId, 'summaries', [\n ...summaries,\n summarizeOp,\n ])\n setState('conversations', conversationId, 'hasSummarize', true)\n }\n },\n { withEventTarget: false },\n ),\n )\n\n cleanupFns.push(\n aiEventClient.on(\n 'summarize:completed',\n (e) => {\n const { requestId, outputLength, duration } = e.payload\n\n const conversationId = requestToConversation.get(requestId)\n if (!conversationId || !state.conversations[conversationId]) return\n\n const conv = state.conversations[conversationId]\n if (!conv.summaries) return\n\n const summaryIndex = conv.summaries.findIndex(\n (op) => op.id === requestId,\n )\n if (summaryIndex >= 0) {\n setState(\n 'conversations',\n conversationId,\n 'summaries',\n summaryIndex,\n produce((op: SummarizeOperation) => {\n op.duration = duration\n op.outputLength = outputLength\n op.status = 'completed'\n }),\n )\n }\n },\n { withEventTarget: false },\n ),\n )\n\n // Cleanup all listeners on unmount\n onCleanup(() => {\n for (const cleanup of cleanupFns) {\n cleanup()\n }\n streamToConversation.clear()\n requestToConversation.clear()\n })\n })\n\n const contextValue: AIContextValue = {\n state,\n clearAllConversations,\n selectConversation,\n }\n\n return (\n <AIContext.Provider value={contextValue}>\n {props.children}\n </AIContext.Provider>\n )\n}\n"],"names":["AIContext","createContext","useAIStore","context","useContext","Error","AIProvider","props","state","setState","createStore","conversations","activeConversationId","streamToConversation","Map","requestToConversation","pendingConversationChunks","pendingMessageChunks","batchScheduled","scheduleBatchFlush","queueMicrotask","flushPendingChunks","isMergeableChunkType","type","mergeChunks","existing","pending","chunk","lastChunk","length","messageId","content","delta","chunkCount","push","batch","conversationId","chunks","newChunkCount","conv","produce","arr","clear","messageMap","messageIndex","message","messages","currentTotal","totalChunkCount","queueChunk","has","set","get","lastPending","queueMessageChunk","getOrCreateConversation","id","label","status","startedAt","Date","now","addMessage","addChunkToMessage","findIndex","msg","newMessage","role","timestamp","model","i","updateMessageUsage","cumulativeUsage","previousPromptTokens","previousCompletionTokens","targetMessageIndex","usage","promptTokens","completionTokens","deltaUsage","Math","max","totalTokens","clearAllConversations","selectConversation","updateConversation","updates","key","value","Object","entries","updateMessage","updateToolCall","toolCallIndex","toolCalls","tc","assign","setToolCalls","addChunk","ensureMessageForChunk","existingMessage","find","m","source","onMount","cleanupFns","aiEventClient","on","e","clientId","payload","substring","undefined","provider","withEventTarget","contentPreview","isLoading","completedAt","slice","fromMessageIndex","error","toolCallId","toolName","toolCallState","arguments","args","existingToolIndex","t","toolCall","name","JSON","stringify","approvalId","approvalRequired","output","resultState","result","approved","streamId","random","thinkingContent","finishReason","input","activeClients","values","filter","c","sort","a","b","lastMessage","activeClient","existingServerConv","serverId","requestId","iterationNumber","iterationCount","duration","inputCount","embeddingOp","embeddings","embeddingIndex","op","inputLength","summarizeOp","summaries","outputLength","summaryIndex","onCleanup","cleanup","contextValue","_$createComponent","Provider","children"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type { ToolCall, Message, Chunk, Conversation } from './ai-context.js';
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
export declare const tokens: {
|
|
2
|
+
readonly colors: {
|
|
3
|
+
readonly inherit: "inherit";
|
|
4
|
+
readonly current: "currentColor";
|
|
5
|
+
readonly transparent: "transparent";
|
|
6
|
+
readonly black: "#000000";
|
|
7
|
+
readonly white: "#ffffff";
|
|
8
|
+
readonly neutral: {
|
|
9
|
+
readonly 50: "#f9fafb";
|
|
10
|
+
readonly 100: "#f2f4f7";
|
|
11
|
+
readonly 200: "#eaecf0";
|
|
12
|
+
readonly 300: "#d0d5dd";
|
|
13
|
+
readonly 400: "#98a2b3";
|
|
14
|
+
readonly 500: "#667085";
|
|
15
|
+
readonly 600: "#475467";
|
|
16
|
+
readonly 700: "#344054";
|
|
17
|
+
readonly 800: "#1d2939";
|
|
18
|
+
readonly 900: "#101828";
|
|
19
|
+
};
|
|
20
|
+
readonly darkGray: {
|
|
21
|
+
readonly 50: "#525c7a";
|
|
22
|
+
readonly 100: "#49536e";
|
|
23
|
+
readonly 200: "#414962";
|
|
24
|
+
readonly 300: "#394056";
|
|
25
|
+
readonly 400: "#313749";
|
|
26
|
+
readonly 500: "#292e3d";
|
|
27
|
+
readonly 600: "#212530";
|
|
28
|
+
readonly 700: "#191c24";
|
|
29
|
+
readonly 800: "#111318";
|
|
30
|
+
readonly 900: "#0b0d10";
|
|
31
|
+
};
|
|
32
|
+
readonly gray: {
|
|
33
|
+
readonly 50: "#f9fafb";
|
|
34
|
+
readonly 100: "#f2f4f7";
|
|
35
|
+
readonly 200: "#eaecf0";
|
|
36
|
+
readonly 300: "#d0d5dd";
|
|
37
|
+
readonly 400: "#98a2b3";
|
|
38
|
+
readonly 500: "#667085";
|
|
39
|
+
readonly 600: "#475467";
|
|
40
|
+
readonly 700: "#344054";
|
|
41
|
+
readonly 800: "#1d2939";
|
|
42
|
+
readonly 900: "#101828";
|
|
43
|
+
};
|
|
44
|
+
readonly blue: {
|
|
45
|
+
readonly 25: "#F5FAFF";
|
|
46
|
+
readonly 50: "#EFF8FF";
|
|
47
|
+
readonly 100: "#D1E9FF";
|
|
48
|
+
readonly 200: "#B2DDFF";
|
|
49
|
+
readonly 300: "#84CAFF";
|
|
50
|
+
readonly 400: "#53B1FD";
|
|
51
|
+
readonly 500: "#2E90FA";
|
|
52
|
+
readonly 600: "#1570EF";
|
|
53
|
+
readonly 700: "#175CD3";
|
|
54
|
+
readonly 800: "#1849A9";
|
|
55
|
+
readonly 900: "#194185";
|
|
56
|
+
};
|
|
57
|
+
readonly green: {
|
|
58
|
+
readonly 25: "#F6FEF9";
|
|
59
|
+
readonly 50: "#ECFDF3";
|
|
60
|
+
readonly 100: "#D1FADF";
|
|
61
|
+
readonly 200: "#A6F4C5";
|
|
62
|
+
readonly 300: "#6CE9A6";
|
|
63
|
+
readonly 400: "#32D583";
|
|
64
|
+
readonly 500: "#12B76A";
|
|
65
|
+
readonly 600: "#039855";
|
|
66
|
+
readonly 700: "#027A48";
|
|
67
|
+
readonly 800: "#05603A";
|
|
68
|
+
readonly 900: "#054F31";
|
|
69
|
+
};
|
|
70
|
+
readonly red: {
|
|
71
|
+
readonly 50: "#fef2f2";
|
|
72
|
+
readonly 100: "#fee2e2";
|
|
73
|
+
readonly 200: "#fecaca";
|
|
74
|
+
readonly 300: "#fca5a5";
|
|
75
|
+
readonly 400: "#f87171";
|
|
76
|
+
readonly 500: "#ef4444";
|
|
77
|
+
readonly 600: "#dc2626";
|
|
78
|
+
readonly 700: "#b91c1c";
|
|
79
|
+
readonly 800: "#991b1b";
|
|
80
|
+
readonly 900: "#7f1d1d";
|
|
81
|
+
readonly 950: "#450a0a";
|
|
82
|
+
};
|
|
83
|
+
readonly yellow: {
|
|
84
|
+
readonly 25: "#FFFCF5";
|
|
85
|
+
readonly 50: "#FFFAEB";
|
|
86
|
+
readonly 100: "#FEF0C7";
|
|
87
|
+
readonly 200: "#FEDF89";
|
|
88
|
+
readonly 300: "#FEC84B";
|
|
89
|
+
readonly 400: "#FDB022";
|
|
90
|
+
readonly 500: "#F79009";
|
|
91
|
+
readonly 600: "#DC6803";
|
|
92
|
+
readonly 700: "#B54708";
|
|
93
|
+
readonly 800: "#93370D";
|
|
94
|
+
readonly 900: "#7A2E0E";
|
|
95
|
+
};
|
|
96
|
+
readonly purple: {
|
|
97
|
+
readonly 25: "#FAFAFF";
|
|
98
|
+
readonly 50: "#F4F3FF";
|
|
99
|
+
readonly 100: "#EBE9FE";
|
|
100
|
+
readonly 200: "#D9D6FE";
|
|
101
|
+
readonly 300: "#BDB4FE";
|
|
102
|
+
readonly 400: "#9B8AFB";
|
|
103
|
+
readonly 500: "#7A5AF8";
|
|
104
|
+
readonly 600: "#6938EF";
|
|
105
|
+
readonly 700: "#5925DC";
|
|
106
|
+
readonly 800: "#4A1FB8";
|
|
107
|
+
readonly 900: "#3E1C96";
|
|
108
|
+
};
|
|
109
|
+
readonly teal: {
|
|
110
|
+
readonly 25: "#F6FEFC";
|
|
111
|
+
readonly 50: "#F0FDF9";
|
|
112
|
+
readonly 100: "#CCFBEF";
|
|
113
|
+
readonly 200: "#99F6E0";
|
|
114
|
+
readonly 300: "#5FE9D0";
|
|
115
|
+
readonly 400: "#2ED3B7";
|
|
116
|
+
readonly 500: "#15B79E";
|
|
117
|
+
readonly 600: "#0E9384";
|
|
118
|
+
readonly 700: "#107569";
|
|
119
|
+
readonly 800: "#125D56";
|
|
120
|
+
readonly 900: "#134E48";
|
|
121
|
+
};
|
|
122
|
+
readonly pink: {
|
|
123
|
+
readonly 25: "#fdf2f8";
|
|
124
|
+
readonly 50: "#fce7f3";
|
|
125
|
+
readonly 100: "#fbcfe8";
|
|
126
|
+
readonly 200: "#f9a8d4";
|
|
127
|
+
readonly 300: "#f472b6";
|
|
128
|
+
readonly 400: "#ec4899";
|
|
129
|
+
readonly 500: "#db2777";
|
|
130
|
+
readonly 600: "#be185d";
|
|
131
|
+
readonly 700: "#9d174d";
|
|
132
|
+
readonly 800: "#831843";
|
|
133
|
+
readonly 900: "#500724";
|
|
134
|
+
};
|
|
135
|
+
readonly cyan: {
|
|
136
|
+
readonly 25: "#ecfeff";
|
|
137
|
+
readonly 50: "#cffafe";
|
|
138
|
+
readonly 100: "#a5f3fc";
|
|
139
|
+
readonly 200: "#67e8f9";
|
|
140
|
+
readonly 300: "#22d3ee";
|
|
141
|
+
readonly 400: "#06b6d4";
|
|
142
|
+
readonly 500: "#0891b2";
|
|
143
|
+
readonly 600: "#0e7490";
|
|
144
|
+
readonly 700: "#155e75";
|
|
145
|
+
readonly 800: "#164e63";
|
|
146
|
+
readonly 900: "#083344";
|
|
147
|
+
};
|
|
148
|
+
};
|
|
149
|
+
readonly alpha: {
|
|
150
|
+
readonly 100: "ff";
|
|
151
|
+
readonly 90: "e5";
|
|
152
|
+
readonly 80: "cc";
|
|
153
|
+
readonly 70: "b3";
|
|
154
|
+
readonly 60: "99";
|
|
155
|
+
readonly 50: "80";
|
|
156
|
+
readonly 40: "66";
|
|
157
|
+
readonly 30: "4d";
|
|
158
|
+
readonly 20: "33";
|
|
159
|
+
readonly 10: "1a";
|
|
160
|
+
readonly 0: "00";
|
|
161
|
+
};
|
|
162
|
+
readonly font: {
|
|
163
|
+
readonly size: {
|
|
164
|
+
readonly '2xs': "calc(var(--tsrd-font-size) * 0.625)";
|
|
165
|
+
readonly xs: "calc(var(--tsrd-font-size) * 0.75)";
|
|
166
|
+
readonly sm: "calc(var(--tsrd-font-size) * 0.875)";
|
|
167
|
+
readonly md: "var(--tsrd-font-size)";
|
|
168
|
+
readonly lg: "calc(var(--tsrd-font-size) * 1.125)";
|
|
169
|
+
readonly xl: "calc(var(--tsrd-font-size) * 1.25)";
|
|
170
|
+
readonly '2xl': "calc(var(--tsrd-font-size) * 1.5)";
|
|
171
|
+
readonly '3xl': "calc(var(--tsrd-font-size) * 1.875)";
|
|
172
|
+
readonly '4xl': "calc(var(--tsrd-font-size) * 2.25)";
|
|
173
|
+
readonly '5xl': "calc(var(--tsrd-font-size) * 3)";
|
|
174
|
+
readonly '6xl': "calc(var(--tsrd-font-size) * 3.75)";
|
|
175
|
+
readonly '7xl': "calc(var(--tsrd-font-size) * 4.5)";
|
|
176
|
+
readonly '8xl': "calc(var(--tsrd-font-size) * 6)";
|
|
177
|
+
readonly '9xl': "calc(var(--tsrd-font-size) * 8)";
|
|
178
|
+
};
|
|
179
|
+
readonly lineHeight: {
|
|
180
|
+
readonly '3xs': "calc(var(--tsrd-font-size) * 0.75)";
|
|
181
|
+
readonly '2xs': "calc(var(--tsrd-font-size) * 0.875)";
|
|
182
|
+
readonly xs: "calc(var(--tsrd-font-size) * 1)";
|
|
183
|
+
readonly sm: "calc(var(--tsrd-font-size) * 1.25)";
|
|
184
|
+
readonly md: "calc(var(--tsrd-font-size) * 1.5)";
|
|
185
|
+
readonly lg: "calc(var(--tsrd-font-size) * 1.75)";
|
|
186
|
+
readonly xl: "calc(var(--tsrd-font-size) * 2)";
|
|
187
|
+
readonly '2xl': "calc(var(--tsrd-font-size) * 2.25)";
|
|
188
|
+
readonly '3xl': "calc(var(--tsrd-font-size) * 2.5)";
|
|
189
|
+
readonly '4xl': "calc(var(--tsrd-font-size) * 2.75)";
|
|
190
|
+
readonly '5xl': "calc(var(--tsrd-font-size) * 3)";
|
|
191
|
+
readonly '6xl': "calc(var(--tsrd-font-size) * 3.25)";
|
|
192
|
+
readonly '7xl': "calc(var(--tsrd-font-size) * 3.5)";
|
|
193
|
+
readonly '8xl': "calc(var(--tsrd-font-size) * 3.75)";
|
|
194
|
+
readonly '9xl': "calc(var(--tsrd-font-size) * 4)";
|
|
195
|
+
};
|
|
196
|
+
readonly weight: {
|
|
197
|
+
readonly thin: "100";
|
|
198
|
+
readonly extralight: "200";
|
|
199
|
+
readonly light: "300";
|
|
200
|
+
readonly normal: "400";
|
|
201
|
+
readonly medium: "500";
|
|
202
|
+
readonly semibold: "600";
|
|
203
|
+
readonly bold: "700";
|
|
204
|
+
readonly extrabold: "800";
|
|
205
|
+
readonly black: "900";
|
|
206
|
+
};
|
|
207
|
+
readonly fontFamily: {
|
|
208
|
+
readonly sans: "ui-sans-serif, Inter, system-ui, sans-serif, sans-serif";
|
|
209
|
+
readonly mono: "ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace";
|
|
210
|
+
};
|
|
211
|
+
};
|
|
212
|
+
readonly breakpoints: {
|
|
213
|
+
readonly xs: "320px";
|
|
214
|
+
readonly sm: "640px";
|
|
215
|
+
readonly md: "768px";
|
|
216
|
+
readonly lg: "1024px";
|
|
217
|
+
readonly xl: "1280px";
|
|
218
|
+
readonly '2xl': "1536px";
|
|
219
|
+
};
|
|
220
|
+
readonly border: {
|
|
221
|
+
readonly radius: {
|
|
222
|
+
readonly none: "0px";
|
|
223
|
+
readonly xs: "calc(var(--tsrd-font-size) * 0.125)";
|
|
224
|
+
readonly sm: "calc(var(--tsrd-font-size) * 0.25)";
|
|
225
|
+
readonly md: "calc(var(--tsrd-font-size) * 0.375)";
|
|
226
|
+
readonly lg: "calc(var(--tsrd-font-size) * 0.5)";
|
|
227
|
+
readonly xl: "calc(var(--tsrd-font-size) * 0.75)";
|
|
228
|
+
readonly '2xl': "calc(var(--tsrd-font-size) * 1)";
|
|
229
|
+
readonly '3xl': "calc(var(--tsrd-font-size) * 1.5)";
|
|
230
|
+
readonly full: "9999px";
|
|
231
|
+
};
|
|
232
|
+
};
|
|
233
|
+
readonly size: {
|
|
234
|
+
readonly 0: "0px";
|
|
235
|
+
readonly 0.25: "calc(var(--tsrd-font-size) * 0.0625)";
|
|
236
|
+
readonly 0.5: "calc(var(--tsrd-font-size) * 0.125)";
|
|
237
|
+
readonly 1: "calc(var(--tsrd-font-size) * 0.25)";
|
|
238
|
+
readonly 1.5: "calc(var(--tsrd-font-size) * 0.375)";
|
|
239
|
+
readonly 2: "calc(var(--tsrd-font-size) * 0.5)";
|
|
240
|
+
readonly 2.5: "calc(var(--tsrd-font-size) * 0.625)";
|
|
241
|
+
readonly 3: "calc(var(--tsrd-font-size) * 0.75)";
|
|
242
|
+
readonly 3.5: "calc(var(--tsrd-font-size) * 0.875)";
|
|
243
|
+
readonly 4: "calc(var(--tsrd-font-size) * 1)";
|
|
244
|
+
readonly 4.5: "calc(var(--tsrd-font-size) * 1.125)";
|
|
245
|
+
readonly 5: "calc(var(--tsrd-font-size) * 1.25)";
|
|
246
|
+
readonly 5.5: "calc(var(--tsrd-font-size) * 1.375)";
|
|
247
|
+
readonly 6: "calc(var(--tsrd-font-size) * 1.5)";
|
|
248
|
+
readonly 6.5: "calc(var(--tsrd-font-size) * 1.625)";
|
|
249
|
+
readonly 7: "calc(var(--tsrd-font-size) * 1.75)";
|
|
250
|
+
readonly 8: "calc(var(--tsrd-font-size) * 2)";
|
|
251
|
+
readonly 9: "calc(var(--tsrd-font-size) * 2.25)";
|
|
252
|
+
readonly 10: "calc(var(--tsrd-font-size) * 2.5)";
|
|
253
|
+
readonly 11: "calc(var(--tsrd-font-size) * 2.75)";
|
|
254
|
+
readonly 12: "calc(var(--tsrd-font-size) * 3)";
|
|
255
|
+
readonly 14: "calc(var(--tsrd-font-size) * 3.5)";
|
|
256
|
+
readonly 16: "calc(var(--tsrd-font-size) * 4)";
|
|
257
|
+
readonly 20: "calc(var(--tsrd-font-size) * 5)";
|
|
258
|
+
readonly 24: "calc(var(--tsrd-font-size) * 6)";
|
|
259
|
+
readonly 28: "calc(var(--tsrd-font-size) * 7)";
|
|
260
|
+
readonly 32: "calc(var(--tsrd-font-size) * 8)";
|
|
261
|
+
readonly 36: "calc(var(--tsrd-font-size) * 9)";
|
|
262
|
+
readonly 40: "calc(var(--tsrd-font-size) * 10)";
|
|
263
|
+
readonly 44: "calc(var(--tsrd-font-size) * 11)";
|
|
264
|
+
readonly 48: "calc(var(--tsrd-font-size) * 12)";
|
|
265
|
+
readonly 52: "calc(var(--tsrd-font-size) * 13)";
|
|
266
|
+
readonly 56: "calc(var(--tsrd-font-size) * 14)";
|
|
267
|
+
readonly 60: "calc(var(--tsrd-font-size) * 15)";
|
|
268
|
+
readonly 64: "calc(var(--tsrd-font-size) * 16)";
|
|
269
|
+
readonly 72: "calc(var(--tsrd-font-size) * 18)";
|
|
270
|
+
readonly 80: "calc(var(--tsrd-font-size) * 20)";
|
|
271
|
+
readonly 96: "calc(var(--tsrd-font-size) * 24)";
|
|
272
|
+
};
|
|
273
|
+
readonly shadow: {
|
|
274
|
+
readonly xs: (_?: string) => "0 1px 2px 0 rgb(0 0 0 / 0.05)";
|
|
275
|
+
readonly sm: (color?: string) => `0 1px 3px 0 ${string}, 0 1px 2px -1px ${string}`;
|
|
276
|
+
readonly md: (color?: string) => `0 4px 6px -1px ${string}, 0 2px 4px -2px ${string}`;
|
|
277
|
+
readonly lg: (color?: string) => `0 10px 15px -3px ${string}, 0 4px 6px -4px ${string}`;
|
|
278
|
+
readonly xl: (color?: string) => `0 20px 25px -5px ${string}, 0 8px 10px -6px ${string}`;
|
|
279
|
+
readonly '2xl': (color?: string) => `0 25px 50px -12px ${string}`;
|
|
280
|
+
readonly inner: (color?: string) => `inset 0 2px 4px 0 ${string}`;
|
|
281
|
+
readonly none: () => "none";
|
|
282
|
+
};
|
|
283
|
+
readonly zIndices: {
|
|
284
|
+
readonly hide: -1;
|
|
285
|
+
readonly auto: "auto";
|
|
286
|
+
readonly base: 0;
|
|
287
|
+
readonly docked: 10;
|
|
288
|
+
readonly dropdown: 1000;
|
|
289
|
+
readonly sticky: 1100;
|
|
290
|
+
readonly banner: 1200;
|
|
291
|
+
readonly overlay: 1300;
|
|
292
|
+
readonly modal: 1400;
|
|
293
|
+
readonly popover: 1500;
|
|
294
|
+
readonly skipLink: 1600;
|
|
295
|
+
readonly toast: 1700;
|
|
296
|
+
readonly tooltip: 1800;
|
|
297
|
+
};
|
|
298
|
+
};
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
const tokens = {
|
|
2
|
+
colors: {
|
|
3
|
+
black: "#000000",
|
|
4
|
+
white: "#ffffff",
|
|
5
|
+
darkGray: {
|
|
6
|
+
400: "#313749",
|
|
7
|
+
500: "#292e3d",
|
|
8
|
+
600: "#212530",
|
|
9
|
+
700: "#191c24",
|
|
10
|
+
800: "#111318",
|
|
11
|
+
900: "#0b0d10"
|
|
12
|
+
},
|
|
13
|
+
gray: {
|
|
14
|
+
50: "#f9fafb",
|
|
15
|
+
100: "#f2f4f7",
|
|
16
|
+
200: "#eaecf0",
|
|
17
|
+
300: "#d0d5dd",
|
|
18
|
+
400: "#98a2b3",
|
|
19
|
+
500: "#667085",
|
|
20
|
+
600: "#475467",
|
|
21
|
+
700: "#344054",
|
|
22
|
+
800: "#1d2939",
|
|
23
|
+
900: "#101828"
|
|
24
|
+
},
|
|
25
|
+
blue: {
|
|
26
|
+
100: "#D1E9FF",
|
|
27
|
+
300: "#84CAFF",
|
|
28
|
+
400: "#53B1FD",
|
|
29
|
+
500: "#2E90FA",
|
|
30
|
+
600: "#1570EF",
|
|
31
|
+
700: "#175CD3",
|
|
32
|
+
900: "#194185"
|
|
33
|
+
},
|
|
34
|
+
green: {
|
|
35
|
+
400: "#32D583",
|
|
36
|
+
500: "#12B76A"
|
|
37
|
+
},
|
|
38
|
+
red: {
|
|
39
|
+
400: "#f87171",
|
|
40
|
+
500: "#ef4444"
|
|
41
|
+
},
|
|
42
|
+
yellow: {
|
|
43
|
+
400: "#FDB022",
|
|
44
|
+
500: "#F79009"
|
|
45
|
+
},
|
|
46
|
+
purple: {
|
|
47
|
+
400: "#9B8AFB",
|
|
48
|
+
500: "#7A5AF8"
|
|
49
|
+
},
|
|
50
|
+
pink: {
|
|
51
|
+
400: "#ec4899",
|
|
52
|
+
500: "#db2777"
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
alpha: {
|
|
56
|
+
80: "cc",
|
|
57
|
+
30: "4d",
|
|
58
|
+
20: "33"
|
|
59
|
+
},
|
|
60
|
+
font: {
|
|
61
|
+
size: {
|
|
62
|
+
xs: "calc(var(--tsrd-font-size) * 0.75)",
|
|
63
|
+
sm: "calc(var(--tsrd-font-size) * 0.875)",
|
|
64
|
+
md: "var(--tsrd-font-size)",
|
|
65
|
+
lg: "calc(var(--tsrd-font-size) * 1.125)"
|
|
66
|
+
},
|
|
67
|
+
weight: {
|
|
68
|
+
normal: "400",
|
|
69
|
+
medium: "500",
|
|
70
|
+
semibold: "600",
|
|
71
|
+
bold: "700"
|
|
72
|
+
},
|
|
73
|
+
fontFamily: {
|
|
74
|
+
mono: `ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace`
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
border: {
|
|
78
|
+
radius: {
|
|
79
|
+
sm: "calc(var(--tsrd-font-size) * 0.25)",
|
|
80
|
+
md: "calc(var(--tsrd-font-size) * 0.375)",
|
|
81
|
+
lg: "calc(var(--tsrd-font-size) * 0.5)"
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
size: {
|
|
85
|
+
1: "calc(var(--tsrd-font-size) * 0.25)",
|
|
86
|
+
1.5: "calc(var(--tsrd-font-size) * 0.375)",
|
|
87
|
+
2: "calc(var(--tsrd-font-size) * 0.5)",
|
|
88
|
+
3: "calc(var(--tsrd-font-size) * 0.75)",
|
|
89
|
+
4: "calc(var(--tsrd-font-size) * 1)",
|
|
90
|
+
6: "calc(var(--tsrd-font-size) * 1.5)",
|
|
91
|
+
8: "calc(var(--tsrd-font-size) * 2)"
|
|
92
|
+
},
|
|
93
|
+
shadow: {
|
|
94
|
+
xs: (_ = "rgb(0 0 0 / 0.1)") => `0 1px 2px 0 rgb(0 0 0 / 0.05)`,
|
|
95
|
+
sm: (color = "rgb(0 0 0 / 0.1)") => `0 1px 3px 0 ${color}, 0 1px 2px -1px ${color}`,
|
|
96
|
+
md: (color = "rgb(0 0 0 / 0.1)") => `0 4px 6px -1px ${color}, 0 2px 4px -2px ${color}`,
|
|
97
|
+
lg: (color = "rgb(0 0 0 / 0.1)") => `0 10px 15px -3px ${color}, 0 4px 6px -4px ${color}`,
|
|
98
|
+
xl: (color = "rgb(0 0 0 / 0.1)") => `0 20px 25px -5px ${color}, 0 8px 10px -6px ${color}`,
|
|
99
|
+
"2xl": (color = "rgb(0 0 0 / 0.25)") => `0 25px 50px -12px ${color}`,
|
|
100
|
+
inner: (color = "rgb(0 0 0 / 0.05)") => `inset 0 2px 4px 0 ${color}`,
|
|
101
|
+
none: () => `none`
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
export {
|
|
105
|
+
tokens
|
|
106
|
+
};
|
|
107
|
+
//# sourceMappingURL=tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.js","sources":["../../../src/styles/tokens.ts"],"sourcesContent":["export const tokens = {\n colors: {\n inherit: 'inherit',\n current: 'currentColor',\n transparent: 'transparent',\n black: '#000000',\n white: '#ffffff',\n neutral: {\n 50: '#f9fafb',\n 100: '#f2f4f7',\n 200: '#eaecf0',\n 300: '#d0d5dd',\n 400: '#98a2b3',\n 500: '#667085',\n 600: '#475467',\n 700: '#344054',\n 800: '#1d2939',\n 900: '#101828',\n },\n darkGray: {\n 50: '#525c7a',\n 100: '#49536e',\n 200: '#414962',\n 300: '#394056',\n 400: '#313749',\n 500: '#292e3d',\n 600: '#212530',\n 700: '#191c24',\n 800: '#111318',\n 900: '#0b0d10',\n },\n gray: {\n 50: '#f9fafb',\n 100: '#f2f4f7',\n 200: '#eaecf0',\n 300: '#d0d5dd',\n 400: '#98a2b3',\n 500: '#667085',\n 600: '#475467',\n 700: '#344054',\n 800: '#1d2939',\n 900: '#101828',\n },\n blue: {\n 25: '#F5FAFF',\n 50: '#EFF8FF',\n 100: '#D1E9FF',\n 200: '#B2DDFF',\n 300: '#84CAFF',\n 400: '#53B1FD',\n 500: '#2E90FA',\n 600: '#1570EF',\n 700: '#175CD3',\n 800: '#1849A9',\n 900: '#194185',\n },\n green: {\n 25: '#F6FEF9',\n 50: '#ECFDF3',\n 100: '#D1FADF',\n 200: '#A6F4C5',\n 300: '#6CE9A6',\n 400: '#32D583',\n 500: '#12B76A',\n 600: '#039855',\n 700: '#027A48',\n 800: '#05603A',\n 900: '#054F31',\n },\n red: {\n 50: '#fef2f2',\n 100: '#fee2e2',\n 200: '#fecaca',\n 300: '#fca5a5',\n 400: '#f87171',\n 500: '#ef4444',\n 600: '#dc2626',\n 700: '#b91c1c',\n 800: '#991b1b',\n 900: '#7f1d1d',\n 950: '#450a0a',\n },\n yellow: {\n 25: '#FFFCF5',\n 50: '#FFFAEB',\n 100: '#FEF0C7',\n 200: '#FEDF89',\n 300: '#FEC84B',\n 400: '#FDB022',\n 500: '#F79009',\n 600: '#DC6803',\n 700: '#B54708',\n 800: '#93370D',\n 900: '#7A2E0E',\n },\n purple: {\n 25: '#FAFAFF',\n 50: '#F4F3FF',\n 100: '#EBE9FE',\n 200: '#D9D6FE',\n 300: '#BDB4FE',\n 400: '#9B8AFB',\n 500: '#7A5AF8',\n 600: '#6938EF',\n 700: '#5925DC',\n 800: '#4A1FB8',\n 900: '#3E1C96',\n },\n teal: {\n 25: '#F6FEFC',\n 50: '#F0FDF9',\n 100: '#CCFBEF',\n 200: '#99F6E0',\n 300: '#5FE9D0',\n 400: '#2ED3B7',\n 500: '#15B79E',\n 600: '#0E9384',\n 700: '#107569',\n 800: '#125D56',\n 900: '#134E48',\n },\n pink: {\n 25: '#fdf2f8',\n 50: '#fce7f3',\n 100: '#fbcfe8',\n 200: '#f9a8d4',\n 300: '#f472b6',\n 400: '#ec4899',\n 500: '#db2777',\n 600: '#be185d',\n 700: '#9d174d',\n 800: '#831843',\n 900: '#500724',\n },\n cyan: {\n 25: '#ecfeff',\n 50: '#cffafe',\n 100: '#a5f3fc',\n 200: '#67e8f9',\n 300: '#22d3ee',\n 400: '#06b6d4',\n 500: '#0891b2',\n 600: '#0e7490',\n 700: '#155e75',\n 800: '#164e63',\n 900: '#083344',\n },\n },\n alpha: {\n 100: 'ff',\n 90: 'e5',\n 80: 'cc',\n 70: 'b3',\n 60: '99',\n 50: '80',\n 40: '66',\n 30: '4d',\n 20: '33',\n 10: '1a',\n 0: '00',\n },\n font: {\n size: {\n '2xs': 'calc(var(--tsrd-font-size) * 0.625)',\n xs: 'calc(var(--tsrd-font-size) * 0.75)',\n sm: 'calc(var(--tsrd-font-size) * 0.875)',\n md: 'var(--tsrd-font-size)',\n lg: 'calc(var(--tsrd-font-size) * 1.125)',\n xl: 'calc(var(--tsrd-font-size) * 1.25)',\n '2xl': 'calc(var(--tsrd-font-size) * 1.5)',\n '3xl': 'calc(var(--tsrd-font-size) * 1.875)',\n '4xl': 'calc(var(--tsrd-font-size) * 2.25)',\n '5xl': 'calc(var(--tsrd-font-size) * 3)',\n '6xl': 'calc(var(--tsrd-font-size) * 3.75)',\n '7xl': 'calc(var(--tsrd-font-size) * 4.5)',\n '8xl': 'calc(var(--tsrd-font-size) * 6)',\n '9xl': 'calc(var(--tsrd-font-size) * 8)',\n },\n lineHeight: {\n '3xs': 'calc(var(--tsrd-font-size) * 0.75)',\n '2xs': 'calc(var(--tsrd-font-size) * 0.875)',\n xs: 'calc(var(--tsrd-font-size) * 1)',\n sm: 'calc(var(--tsrd-font-size) * 1.25)',\n md: 'calc(var(--tsrd-font-size) * 1.5)',\n lg: 'calc(var(--tsrd-font-size) * 1.75)',\n xl: 'calc(var(--tsrd-font-size) * 2)',\n '2xl': 'calc(var(--tsrd-font-size) * 2.25)',\n '3xl': 'calc(var(--tsrd-font-size) * 2.5)',\n '4xl': 'calc(var(--tsrd-font-size) * 2.75)',\n '5xl': 'calc(var(--tsrd-font-size) * 3)',\n '6xl': 'calc(var(--tsrd-font-size) * 3.25)',\n '7xl': 'calc(var(--tsrd-font-size) * 3.5)',\n '8xl': 'calc(var(--tsrd-font-size) * 3.75)',\n '9xl': 'calc(var(--tsrd-font-size) * 4)',\n },\n weight: {\n thin: '100',\n extralight: '200',\n light: '300',\n normal: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n extrabold: '800',\n black: '900',\n },\n fontFamily: {\n sans: 'ui-sans-serif, Inter, system-ui, sans-serif, sans-serif',\n mono: `ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace`,\n },\n },\n breakpoints: {\n xs: '320px',\n sm: '640px',\n md: '768px',\n lg: '1024px',\n xl: '1280px',\n '2xl': '1536px',\n },\n border: {\n radius: {\n none: '0px',\n xs: 'calc(var(--tsrd-font-size) * 0.125)',\n sm: 'calc(var(--tsrd-font-size) * 0.25)',\n md: 'calc(var(--tsrd-font-size) * 0.375)',\n lg: 'calc(var(--tsrd-font-size) * 0.5)',\n xl: 'calc(var(--tsrd-font-size) * 0.75)',\n '2xl': 'calc(var(--tsrd-font-size) * 1)',\n '3xl': 'calc(var(--tsrd-font-size) * 1.5)',\n full: '9999px',\n },\n },\n size: {\n 0: '0px',\n 0.25: 'calc(var(--tsrd-font-size) * 0.0625)',\n 0.5: 'calc(var(--tsrd-font-size) * 0.125)',\n 1: 'calc(var(--tsrd-font-size) * 0.25)',\n 1.5: 'calc(var(--tsrd-font-size) * 0.375)',\n 2: 'calc(var(--tsrd-font-size) * 0.5)',\n 2.5: 'calc(var(--tsrd-font-size) * 0.625)',\n 3: 'calc(var(--tsrd-font-size) * 0.75)',\n 3.5: 'calc(var(--tsrd-font-size) * 0.875)',\n 4: 'calc(var(--tsrd-font-size) * 1)',\n 4.5: 'calc(var(--tsrd-font-size) * 1.125)',\n 5: 'calc(var(--tsrd-font-size) * 1.25)',\n 5.5: 'calc(var(--tsrd-font-size) * 1.375)',\n 6: 'calc(var(--tsrd-font-size) * 1.5)',\n 6.5: 'calc(var(--tsrd-font-size) * 1.625)',\n 7: 'calc(var(--tsrd-font-size) * 1.75)',\n 8: 'calc(var(--tsrd-font-size) * 2)',\n 9: 'calc(var(--tsrd-font-size) * 2.25)',\n 10: 'calc(var(--tsrd-font-size) * 2.5)',\n 11: 'calc(var(--tsrd-font-size) * 2.75)',\n 12: 'calc(var(--tsrd-font-size) * 3)',\n 14: 'calc(var(--tsrd-font-size) * 3.5)',\n 16: 'calc(var(--tsrd-font-size) * 4)',\n 20: 'calc(var(--tsrd-font-size) * 5)',\n 24: 'calc(var(--tsrd-font-size) * 6)',\n 28: 'calc(var(--tsrd-font-size) * 7)',\n 32: 'calc(var(--tsrd-font-size) * 8)',\n 36: 'calc(var(--tsrd-font-size) * 9)',\n 40: 'calc(var(--tsrd-font-size) * 10)',\n 44: 'calc(var(--tsrd-font-size) * 11)',\n 48: 'calc(var(--tsrd-font-size) * 12)',\n 52: 'calc(var(--tsrd-font-size) * 13)',\n 56: 'calc(var(--tsrd-font-size) * 14)',\n 60: 'calc(var(--tsrd-font-size) * 15)',\n 64: 'calc(var(--tsrd-font-size) * 16)',\n 72: 'calc(var(--tsrd-font-size) * 18)',\n 80: 'calc(var(--tsrd-font-size) * 20)',\n 96: 'calc(var(--tsrd-font-size) * 24)',\n },\n shadow: {\n xs: (_: string = 'rgb(0 0 0 / 0.1)') =>\n `0 1px 2px 0 rgb(0 0 0 / 0.05)` as const,\n sm: (color: string = 'rgb(0 0 0 / 0.1)') =>\n `0 1px 3px 0 ${color}, 0 1px 2px -1px ${color}` as const,\n md: (color: string = 'rgb(0 0 0 / 0.1)') =>\n `0 4px 6px -1px ${color}, 0 2px 4px -2px ${color}` as const,\n lg: (color: string = 'rgb(0 0 0 / 0.1)') =>\n `0 10px 15px -3px ${color}, 0 4px 6px -4px ${color}` as const,\n xl: (color: string = 'rgb(0 0 0 / 0.1)') =>\n `0 20px 25px -5px ${color}, 0 8px 10px -6px ${color}` as const,\n '2xl': (color: string = 'rgb(0 0 0 / 0.25)') =>\n `0 25px 50px -12px ${color}` as const,\n inner: (color: string = 'rgb(0 0 0 / 0.05)') =>\n `inset 0 2px 4px 0 ${color}` as const,\n none: () => `none` as const,\n },\n zIndices: {\n hide: -1,\n auto: 'auto',\n base: 0,\n docked: 10,\n dropdown: 1000,\n sticky: 1100,\n banner: 1200,\n overlay: 1300,\n modal: 1400,\n popover: 1500,\n skipLink: 1600,\n toast: 1700,\n tooltip: 1800,\n },\n} as const\n"],"names":[],"mappings":"AAAO,MAAM,SAAS;AAAA,EACpB,QAAQ;AAAA,IAIN,OAAO;AAAA,IACP,OAAO;AAAA,IAaP,UAAU;AAAA,MAKR,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IAAA;AAAA,IAEP,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IAAA;AAAA,IAEP,MAAM;AAAA,MAGJ,KAAK;AAAA,MAEL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MAEL,KAAK;AAAA,IAAA;AAAA,IAEP,OAAO;AAAA,MAML,KAAK;AAAA,MACL,KAAK;AAAA,IAKP;AAAA,IACA,KAAK;AAAA,MAKH,KAAK;AAAA,MACL,KAAK;AAAA,IAMP;AAAA,IACA,QAAQ;AAAA,MAMN,KAAK;AAAA,MACL,KAAK;AAAA,IAKP;AAAA,IACA,QAAQ;AAAA,MAMN,KAAK;AAAA,MACL,KAAK;AAAA,IAKP;AAAA,IAcA,MAAM;AAAA,MAMJ,KAAK;AAAA,MACL,KAAK;AAAA,IAKP;AAAA,EAcF;AAAA,EACA,OAAO;AAAA,IAGL,IAAI;AAAA,IAKJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAGN;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,MAEJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAUN;AAAA,IAkBA,QAAQ;AAAA,MAIN,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,MAAM;AAAA,IAGR;AAAA,IACA,YAAY;AAAA,MAEV,MAAM;AAAA,IAAA;AAAA,EACR;AAAA,EAUF,QAAQ;AAAA,IACN,QAAQ;AAAA,MAGN,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAKN;AAAA,EAAA;AAAA,EAEF,MAAM;AAAA,IAIJ,GAAG;AAAA,IACH,KAAK;AAAA,IACL,GAAG;AAAA,IAEH,GAAG;AAAA,IAEH,GAAG;AAAA,IAIH,GAAG;AAAA,IAGH,GAAG;AAAA,EAsBL;AAAA,EACA,QAAQ;AAAA,IACN,IAAI,CAAC,IAAY,uBACf;AAAA,IACF,IAAI,CAAC,QAAgB,uBACnB,eAAe,KAAK,oBAAoB,KAAK;AAAA,IAC/C,IAAI,CAAC,QAAgB,uBACnB,kBAAkB,KAAK,oBAAoB,KAAK;AAAA,IAClD,IAAI,CAAC,QAAgB,uBACnB,oBAAoB,KAAK,oBAAoB,KAAK;AAAA,IACpD,IAAI,CAAC,QAAgB,uBACnB,oBAAoB,KAAK,qBAAqB,KAAK;AAAA,IACrD,OAAO,CAAC,QAAgB,wBACtB,qBAAqB,KAAK;AAAA,IAC5B,OAAO,CAAC,QAAgB,wBACtB,qBAAqB,KAAK;AAAA,IAC5B,MAAM,MAAM;AAAA,EAAA;AAiBhB;"}
|