@amodalai/react 0.2.0 → 0.2.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/dist/{event-bus-h26clqbZ.js → chat-api-CqMQa8r3.js} +85 -85
- package/dist/chat-api-CqMQa8r3.js.map +1 -0
- package/dist/client.js +2 -2
- package/dist/hooks/useAmodalChat.d.ts +2 -2
- package/dist/hooks/useAmodalChat.d.ts.map +1 -1
- package/dist/hooks/useChat.d.ts +2 -2
- package/dist/hooks/useChat.d.ts.map +1 -1
- package/dist/hooks/useChatStream.d.ts +47 -0
- package/dist/hooks/useChatStream.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/react.js +373 -638
- package/dist/react.js.map +1 -1
- package/dist/theme-C051UgQ1.js +801 -0
- package/dist/theme-C051UgQ1.js.map +1 -0
- package/dist/types.d.ts +19 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/widget.js +3 -3
- package/package.json +1 -1
- package/dist/event-bus-h26clqbZ.js.map +0 -1
- package/dist/theme-VAUsolBG.js +0 -693
- package/dist/theme-VAUsolBG.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-C051UgQ1.js","sources":["../src/hooks/useChatStream.ts","../src/hooks/useChat.ts","../src/hooks/useWidgetEvents.ts","../src/hooks/useSessionHistory.ts","../src/theme.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\n/**\n * Canonical chat-stream hook.\n *\n * Owns the reducer, the SSE event-processing loop, activeToolCalls tracking,\n * and the widget event bus. Transport is injected via `streamFn` — callers\n * are responsible for their own endpoint, auth, session id, etc.\n *\n * The higher-level hooks `useChat` and `useAmodalChat` wrap this one: they\n * add session resume, history loading, ask-user POST helpers, and provider-\n * specific transport. `ConfigChatPage` uses this hook directly.\n *\n * Design goals:\n * - single canonical reducer (no more drift between useChat/useAmodalChat)\n * - single canonical SSE → action mapping\n * - every event type is handled (no silently-dropped events)\n * - transport is injected (works with /chat/stream, /config/chat, or any\n * future endpoint that emits our SSE shape)\n */\nimport { useCallback, useEffect, useReducer, useRef } from 'react';\nimport type {\n ChatState,\n ChatAction,\n ChatMessage,\n AssistantTextMessage,\n ToolCallInfo,\n KBProposalInfo,\n WidgetInfo,\n ContentBlock,\n ConfirmationInfo,\n SSEEvent,\n} from '../types';\nimport { WidgetEventBus } from '../events/event-bus';\nimport type { WidgetEvent, EntityExtractor } from '../events/types';\n\n// ---------------------------------------------------------------------------\n// State\n// ---------------------------------------------------------------------------\n\nconst initialState: ChatState = {\n messages: [],\n sessionId: null,\n isStreaming: false,\n error: null,\n activeToolCalls: [],\n isHistorical: false,\n usage: { inputTokens: 0, outputTokens: 0 },\n};\n\nlet messageCounter = 0;\nfunction createMessageId(): string {\n messageCounter++;\n return `msg-${Date.now()}-${String(messageCounter)}`;\n}\n\n// ---------------------------------------------------------------------------\n// Canonical reducer (superset of former useChat/useAmodalChat reducers)\n// ---------------------------------------------------------------------------\n\nexport function chatReducer(state: ChatState, action: ChatAction): ChatState {\n switch (action.type) {\n case 'SEND_MESSAGE': {\n const userMessage: ChatMessage = {\n type: 'user',\n id: createMessageId(),\n text: action.text,\n timestamp: new Date().toISOString(),\n };\n const assistantMessage: AssistantTextMessage = {\n type: 'assistant_text',\n id: createMessageId(),\n text: '',\n toolCalls: [],\n confirmations: [],\n skillActivations: [],\n kbProposals: [],\n widgets: [],\n contentBlocks: [],\n timestamp: new Date().toISOString(),\n };\n return {\n ...state,\n messages: [...state.messages, userMessage, assistantMessage],\n isStreaming: true,\n error: null,\n activeToolCalls: [],\n isHistorical: false,\n };\n }\n case 'STREAM_INIT':\n return { ...state, sessionId: action.sessionId };\n case 'STREAM_TEXT_DELTA': {\n const msgs = [...state.messages];\n const last = msgs[msgs.length - 1];\n if (last && last.type === 'assistant_text') {\n const blocks = [...last.contentBlocks];\n const lastBlock = blocks[blocks.length - 1];\n if (lastBlock && lastBlock.type === 'text') {\n blocks[blocks.length - 1] = { type: 'text', text: lastBlock.text + action.content };\n } else {\n blocks.push({ type: 'text', text: action.content });\n }\n msgs[msgs.length - 1] = { ...last, text: last.text + action.content, contentBlocks: blocks };\n }\n return { ...state, messages: msgs };\n }\n case 'STREAM_TOOL_CALL_START': {\n const msgs = [...state.messages];\n const last = msgs[msgs.length - 1];\n const toolCall: ToolCallInfo = {\n toolId: action.toolId,\n toolName: action.toolName,\n parameters: action.parameters,\n status: 'running',\n };\n if (last && last.type === 'assistant_text') {\n const updatedToolCalls = [...last.toolCalls, toolCall];\n const blocks = [...last.contentBlocks];\n const lastBlock = blocks[blocks.length - 1];\n if (lastBlock && lastBlock.type === 'tool_calls') {\n blocks[blocks.length - 1] = { type: 'tool_calls', calls: [...lastBlock.calls, toolCall] };\n } else {\n blocks.push({ type: 'tool_calls', calls: [toolCall] });\n }\n msgs[msgs.length - 1] = { ...last, toolCalls: updatedToolCalls, contentBlocks: blocks };\n }\n return {\n ...state,\n messages: msgs,\n activeToolCalls: [...state.activeToolCalls, toolCall],\n };\n }\n case 'STREAM_TOOL_CALL_RESULT': {\n const msgs = [...state.messages];\n const last = msgs[msgs.length - 1];\n if (last && last.type === 'assistant_text') {\n const updateCall = (tc: ToolCallInfo): ToolCallInfo =>\n tc.toolId === action.toolId\n ? {\n ...tc,\n status: action.status,\n result: action.result,\n parameters: action.parameters ?? tc.parameters,\n duration_ms: action.duration_ms,\n error: action.error,\n }\n : tc;\n const updatedCalls = last.toolCalls.map(updateCall);\n const blocks = last.contentBlocks.map((block): ContentBlock =>\n block.type === 'tool_calls'\n ? { ...block, calls: block.calls.map(updateCall) }\n : block,\n );\n msgs[msgs.length - 1] = { ...last, toolCalls: updatedCalls, contentBlocks: blocks };\n }\n const activeToolCalls = state.activeToolCalls.filter((tc) => tc.toolId !== action.toolId);\n return { ...state, messages: msgs, activeToolCalls };\n }\n case 'STREAM_SUBAGENT_EVENT': {\n const msgs = [...state.messages];\n const last = msgs[msgs.length - 1];\n if (last && last.type === 'assistant_text') {\n const appendEvent = (tc: ToolCallInfo): ToolCallInfo =>\n tc.toolId === action.parentToolId\n ? { ...tc, subagentEvents: [...(tc.subagentEvents ?? []), action.event] }\n : tc;\n const updatedCalls = last.toolCalls.map(appendEvent);\n const blocks = last.contentBlocks.map((block) =>\n block.type === 'tool_calls'\n ? { ...block, calls: block.calls.map(appendEvent) }\n : block,\n );\n msgs[msgs.length - 1] = { ...last, toolCalls: updatedCalls, contentBlocks: blocks };\n }\n return { ...state, messages: msgs };\n }\n case 'STREAM_SKILL_ACTIVATED': {\n const msgs = [...state.messages];\n const last = msgs[msgs.length - 1];\n if (last && last.type === 'assistant_text') {\n msgs[msgs.length - 1] = {\n ...last,\n skillActivations: [...last.skillActivations, action.skill],\n };\n }\n return { ...state, messages: msgs };\n }\n case 'STREAM_KB_PROPOSAL': {\n const msgs = [...state.messages];\n const last = msgs[msgs.length - 1];\n const proposal: KBProposalInfo = {\n scope: action.scope,\n title: action.title,\n reasoning: action.reasoning,\n };\n if (last && last.type === 'assistant_text') {\n msgs[msgs.length - 1] = {\n ...last,\n kbProposals: [...last.kbProposals, proposal],\n };\n }\n return { ...state, messages: msgs };\n }\n case 'STREAM_WIDGET': {\n const msgs = [...state.messages];\n const last = msgs[msgs.length - 1];\n if (last && last.type === 'assistant_text') {\n const widget: WidgetInfo = {\n widgetType: action.widgetType,\n data: action.data,\n };\n const block: ContentBlock = {\n type: 'widget',\n widgetType: action.widgetType,\n data: action.data,\n };\n msgs[msgs.length - 1] = {\n ...last,\n widgets: [...last.widgets, widget],\n contentBlocks: [...last.contentBlocks, block],\n };\n }\n return { ...state, messages: msgs };\n }\n case 'STREAM_ASK_USER': {\n const msgs = [...state.messages];\n const last = msgs[msgs.length - 1];\n if (last && last.type === 'assistant_text') {\n const block: ContentBlock = {\n type: 'ask_user',\n askId: action.askId,\n questions: action.questions,\n status: 'pending',\n };\n msgs[msgs.length - 1] = {\n ...last,\n contentBlocks: [...last.contentBlocks, block],\n };\n }\n return { ...state, messages: msgs };\n }\n case 'ASK_USER_SUBMITTED': {\n const msgs = [...state.messages];\n const last = msgs[msgs.length - 1];\n if (last && last.type === 'assistant_text') {\n const blocks = last.contentBlocks.map((block) =>\n block.type === 'ask_user' && block.askId === action.askId\n ? { ...block, status: 'submitted' as const, answers: action.answers }\n : block,\n );\n msgs[msgs.length - 1] = { ...last, contentBlocks: blocks };\n }\n return { ...state, messages: msgs };\n }\n case 'STREAM_CONFIRMATION_REQUIRED': {\n const msgs = [...state.messages];\n const last = msgs[msgs.length - 1];\n if (last && last.type === 'assistant_text') {\n const block: ContentBlock = {\n type: 'confirmation',\n confirmation: action.confirmation,\n };\n msgs[msgs.length - 1] = {\n ...last,\n confirmations: [...last.confirmations, action.confirmation],\n contentBlocks: [...last.contentBlocks, block],\n };\n }\n return { ...state, messages: msgs };\n }\n case 'CONFIRMATION_RESPONDED': {\n const msgs = [...state.messages];\n const last = msgs[msgs.length - 1];\n if (last && last.type === 'assistant_text') {\n const newStatus: ConfirmationInfo['status'] = action.approved ? 'approved' : 'denied';\n const updatedConfirmations = last.confirmations.map((c) =>\n c.correlationId === action.correlationId ? { ...c, status: newStatus } : c,\n );\n const blocks = last.contentBlocks.map((block) =>\n block.type === 'confirmation' && block.confirmation.correlationId === action.correlationId\n ? { ...block, confirmation: { ...block.confirmation, status: newStatus } }\n : block,\n );\n msgs[msgs.length - 1] = { ...last, confirmations: updatedConfirmations, contentBlocks: blocks };\n }\n return { ...state, messages: msgs };\n }\n case 'STREAM_TOOL_LOG': {\n // Tool logs are ephemeral progress from tool executors. We store\n // the latest log message per-tool on the active ToolCallInfo so\n // the UI can show it under the spinning badge. When the tool\n // completes (STREAM_TOOL_CALL_RESULT), the message is cleared.\n const msgs = [...state.messages];\n const last = msgs[msgs.length - 1];\n if (last && last.type === 'assistant_text') {\n const updateLog = (tc: ToolCallInfo): ToolCallInfo =>\n tc.toolName === action.toolName && tc.status === 'running'\n ? { ...tc, logMessage: action.message }\n : tc;\n const updatedCalls = last.toolCalls.map(updateLog);\n const blocks = last.contentBlocks.map((block) =>\n block.type === 'tool_calls'\n ? { ...block, calls: block.calls.map(updateLog) }\n : block,\n );\n msgs[msgs.length - 1] = { ...last, toolCalls: updatedCalls, contentBlocks: blocks };\n }\n return { ...state, messages: msgs };\n }\n case 'STREAM_CREDENTIAL_SAVED':\n case 'STREAM_APPROVED':\n // Emitted by the server but not reflected in message state today.\n return state;\n case 'STREAM_ERROR':\n return { ...state, isStreaming: false, error: action.message, activeToolCalls: [] };\n case 'STREAM_DONE': {\n // Mark any still-running tool calls as stopped + attach per-turn usage.\n const doneMessages = [...state.messages];\n const lastMsg = doneMessages[doneMessages.length - 1];\n if (lastMsg && lastMsg.type === 'assistant_text') {\n const stopRunning = (tc: ToolCallInfo): ToolCallInfo =>\n tc.status === 'running' ? { ...tc, status: 'error', error: 'Stopped' } : tc;\n const stoppedCalls = lastMsg.toolCalls.map(stopRunning);\n const stoppedBlocks = lastMsg.contentBlocks.map((block) =>\n block.type === 'tool_calls'\n ? { ...block, calls: block.calls.map(stopRunning) }\n : block,\n );\n doneMessages[doneMessages.length - 1] = {\n ...lastMsg,\n toolCalls: stoppedCalls,\n contentBlocks: stoppedBlocks,\n ...(action.usage ? { usage: action.usage } : {}),\n };\n }\n const newUsage = action.usage\n ? {\n inputTokens: state.usage.inputTokens + action.usage.inputTokens,\n outputTokens: state.usage.outputTokens + action.usage.outputTokens,\n }\n : state.usage;\n return {\n ...state,\n messages: doneMessages,\n isStreaming: false,\n activeToolCalls: [],\n usage: newUsage,\n };\n }\n case 'LOAD_HISTORY':\n return {\n ...initialState,\n messages: action.messages,\n sessionId: action.sessionId,\n isHistorical: true,\n };\n case 'RESET':\n return { ...initialState };\n default: {\n // Exhaustiveness check — adding a new ChatAction variant will fail\n // the compile here, not silently fall through.\n const _exhaustive: never = action;\n void _exhaustive;\n return state;\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n\nexport interface UseChatStreamOptions {\n /**\n * Connect to the transport. Called on every `send()` invocation. The\n * returned async iterable must yield `SSEEvent`s and complete (or throw)\n * when the stream ends. `signal` is the hook-managed abort controller —\n * the implementation should pass it to its underlying fetch/client call.\n */\n streamFn: (text: string, signal: AbortSignal) => AsyncIterable<SSEEvent>;\n\n onToolCall?: (call: ToolCallInfo) => void;\n onKBProposal?: (proposal: KBProposalInfo) => void;\n onEvent?: (event: WidgetEvent) => void;\n onStreamEnd?: () => void;\n onSessionCreated?: (sessionId: string) => void;\n onConfirmation?: (confirmation: ConfirmationInfo) => void;\n\n /** Extractors registered on the internal event bus. */\n entityExtractors?: EntityExtractor[];\n}\n\nexport interface UseChatStreamReturn {\n messages: ChatMessage[];\n isStreaming: boolean;\n activeToolCalls: ToolCallInfo[];\n sessionId: string | null;\n error: string | null;\n usage: { inputTokens: number; outputTokens: number };\n /** True when a loaded historical session is being viewed (read-only). */\n isHistorical: boolean;\n\n send: (text: string) => void;\n stop: () => void;\n reset: () => void;\n respondToConfirmation: (correlationId: string, approved: boolean) => void;\n\n /**\n * Escape hatch for transport-specific actions (e.g. `LOAD_HISTORY` after\n * fetching a session, `ASK_USER_SUBMITTED` after POSTing an answer).\n */\n dispatch: (action: ChatAction) => void;\n\n /** Widget-event bus. External consumers subscribe to receive events. */\n eventBus: WidgetEventBus;\n}\n\nexport function useChatStream(options: UseChatStreamOptions): UseChatStreamReturn {\n const { entityExtractors } = options;\n const [state, dispatch] = useReducer(chatReducer, initialState);\n\n const abortControllerRef = useRef<AbortController | null>(null);\n const callbacksRef = useRef(options);\n callbacksRef.current = options;\n\n // Event bus — one per hook instance, configured with the caller's extractors.\n const eventBusRef = useRef<WidgetEventBus | null>(null);\n if (!eventBusRef.current) {\n eventBusRef.current = new WidgetEventBus();\n if (entityExtractors) {\n eventBusRef.current.setExtractors(entityExtractors);\n }\n }\n const eventBus = eventBusRef.current;\n\n // Forward entity_referenced events to the onEvent callback.\n const entityRefHandlerRef = useRef<((e: WidgetEvent) => void) | null>(null);\n if (!entityRefHandlerRef.current) {\n entityRefHandlerRef.current = (e: WidgetEvent) => {\n callbacksRef.current.onEvent?.(e);\n };\n eventBus.on('entity_referenced', entityRefHandlerRef.current);\n }\n\n // tool_call_start carries the name + params, tool_call_result usually\n // doesn't echo them — keep a map so result events can re-associate.\n const pendingToolCallsRef = useRef<\n Map<string, { toolName: string; parameters: Record<string, unknown> }>\n >(new Map());\n\n const send = useCallback(\n (text: string): void => {\n if (state.isStreaming) return;\n\n dispatch({ type: 'SEND_MESSAGE', text });\n\n const controller = new AbortController();\n abortControllerRef.current = controller;\n\n const runStream = async (): Promise<void> => {\n let receivedDone = false;\n try {\n const stream = callbacksRef.current.streamFn(text, controller.signal);\n for await (const event of stream) {\n processEvent(event, dispatch, pendingToolCallsRef.current, callbacksRef.current, eventBus);\n if (event.type === 'done') receivedDone = true;\n }\n } catch (err) {\n if (!(err instanceof DOMException && err.name === 'AbortError')) {\n dispatch({\n type: 'STREAM_ERROR',\n message: err instanceof Error ? err.message : 'Unknown error',\n });\n }\n } finally {\n abortControllerRef.current = null;\n // Safety net: if the stream ended without a `done` event\n // (network drop, mid-stream error), still fire onStreamEnd and\n // flip isStreaming off so the UI doesn't get stuck.\n if (!receivedDone && !controller.signal.aborted) {\n dispatch({ type: 'STREAM_DONE' });\n callbacksRef.current.onStreamEnd?.();\n }\n }\n };\n\n void runStream();\n },\n // streamFn is read via callbacksRef on each call, so it doesn't need\n // to be a dep here. Keeping send() identity stable across streamFn\n // changes prevents downstream consumers from re-running effects.\n [state.isStreaming, eventBus],\n );\n\n const stop = useCallback((): void => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n abortControllerRef.current = null;\n }\n dispatch({ type: 'STREAM_DONE' });\n }, []);\n\n const reset = useCallback((): void => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n abortControllerRef.current = null;\n }\n pendingToolCallsRef.current.clear();\n dispatch({ type: 'RESET' });\n }, []);\n\n const respondToConfirmation = useCallback(\n (correlationId: string, approved: boolean): void => {\n dispatch({ type: 'CONFIRMATION_RESPONDED', correlationId, approved });\n // Matches the legacy useAmodalChat behavior: send the decision as a\n // follow-up user turn so the agent can react.\n if (!state.isStreaming) {\n const text = approved\n ? `I approve the action (correlation: ${correlationId})`\n : `I deny the action (correlation: ${correlationId})`;\n send(text);\n }\n },\n [send, state.isStreaming],\n );\n\n // Abort on unmount.\n useEffect(\n () => () => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n },\n [],\n );\n\n return {\n messages: state.messages,\n isStreaming: state.isStreaming,\n activeToolCalls: state.activeToolCalls,\n sessionId: state.sessionId,\n error: state.error,\n usage: state.usage,\n isHistorical: state.isHistorical,\n send,\n stop,\n reset,\n respondToConfirmation,\n dispatch,\n eventBus,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Event-to-action translation (the single canonical SSE mapping)\n// ---------------------------------------------------------------------------\n\ntype Dispatch = (action: ChatAction) => void;\ntype PendingToolCalls = Map<string, { toolName: string; parameters: Record<string, unknown> }>;\n\n/**\n * Translate a single SSE event into reducer actions + callback invocations.\n * Pure with respect to `state` — any side effects go through `dispatch` or\n * the passed callbacks. Split out of the loop for testability.\n */\nfunction processEvent(\n event: SSEEvent,\n dispatch: Dispatch,\n pending: PendingToolCalls,\n callbacks: UseChatStreamOptions,\n eventBus: WidgetEventBus,\n): void {\n switch (event.type) {\n case 'init':\n dispatch({ type: 'STREAM_INIT', sessionId: event.session_id });\n callbacks.onSessionCreated?.(event.session_id);\n return;\n case 'text_delta':\n dispatch({ type: 'STREAM_TEXT_DELTA', content: event.content });\n return;\n case 'tool_call_start':\n dispatch({\n type: 'STREAM_TOOL_CALL_START',\n toolId: event.tool_id,\n toolName: event.tool_name,\n parameters: event.parameters,\n });\n pending.set(event.tool_id, {\n toolName: event.tool_name,\n parameters: event.parameters,\n });\n return;\n case 'tool_call_result': {\n const pendingCall = pending.get(event.tool_id);\n const toolCallResult: ToolCallInfo = {\n toolId: event.tool_id,\n toolName: pendingCall?.toolName ?? '',\n parameters: pendingCall?.parameters ?? {},\n status: event.status,\n result: event.result,\n duration_ms: event.duration_ms,\n error: event.error,\n };\n pending.delete(event.tool_id);\n dispatch({\n type: 'STREAM_TOOL_CALL_RESULT',\n toolId: event.tool_id,\n status: event.status,\n result: event.result,\n duration_ms: event.duration_ms,\n error: event.error,\n });\n callbacks.onToolCall?.(toolCallResult);\n const toolEvent: WidgetEvent = {\n type: 'tool_executed',\n toolName: toolCallResult.toolName,\n toolId: toolCallResult.toolId,\n parameters: toolCallResult.parameters,\n status: event.status,\n result: event.result,\n duration_ms: event.duration_ms,\n error: event.error,\n timestamp: event.timestamp,\n };\n eventBus.processEvent(toolEvent);\n callbacks.onEvent?.(toolEvent);\n return;\n }\n case 'subagent_event':\n dispatch({\n type: 'STREAM_SUBAGENT_EVENT',\n parentToolId: event.parent_tool_id,\n event: {\n agentName: event.agent_name,\n eventType: event.event_type,\n toolName: event.tool_name,\n toolArgs: event.tool_args,\n result: event.result,\n text: event.text,\n error: event.error,\n timestamp: event.timestamp,\n },\n });\n return;\n case 'skill_activated': {\n dispatch({ type: 'STREAM_SKILL_ACTIVATED', skill: event.skill });\n const skillEvent: WidgetEvent = {\n type: 'skill_activated',\n skill: event.skill,\n timestamp: event.timestamp,\n };\n eventBus.processEvent(skillEvent);\n callbacks.onEvent?.(skillEvent);\n return;\n }\n case 'kb_proposal': {\n const proposal: KBProposalInfo = {\n scope: event.scope,\n title: event.title,\n reasoning: event.reasoning,\n };\n dispatch({\n type: 'STREAM_KB_PROPOSAL',\n scope: event.scope,\n title: event.title,\n reasoning: event.reasoning,\n });\n callbacks.onKBProposal?.(proposal);\n const kbEvent: WidgetEvent = {\n type: 'kb_proposal',\n proposal,\n timestamp: event.timestamp,\n };\n eventBus.processEvent(kbEvent);\n callbacks.onEvent?.(kbEvent);\n return;\n }\n case 'widget': {\n dispatch({ type: 'STREAM_WIDGET', widgetType: event.widget_type, data: event.data });\n const widgetEvent: WidgetEvent = {\n type: 'widget_rendered',\n widgetType: event.widget_type,\n data: event.data,\n timestamp: event.timestamp,\n };\n eventBus.processEvent(widgetEvent);\n callbacks.onEvent?.(widgetEvent);\n return;\n }\n case 'ask_user':\n dispatch({\n type: 'STREAM_ASK_USER',\n askId: event.ask_id,\n questions: event.questions,\n });\n return;\n case 'credential_saved':\n dispatch({ type: 'STREAM_CREDENTIAL_SAVED', connectionName: event.connection_name });\n return;\n case 'approved':\n dispatch({\n type: 'STREAM_APPROVED',\n resourceType: event.resource_type,\n previewId: event.preview_id,\n });\n return;\n case 'confirmation_required': {\n const confirmation: ConfirmationInfo = {\n endpoint: event.endpoint,\n method: event.method,\n reason: event.reason,\n escalated: event.escalated,\n params: event.params,\n connectionName: event.connection_name,\n correlationId: event.correlation_id,\n status: 'pending',\n };\n dispatch({ type: 'STREAM_CONFIRMATION_REQUIRED', confirmation });\n callbacks.onConfirmation?.(confirmation);\n return;\n }\n case 'tool_log':\n dispatch({ type: 'STREAM_TOOL_LOG', toolName: event.tool_name, message: event.message });\n return;\n case 'error':\n dispatch({ type: 'STREAM_ERROR', message: event.message });\n return;\n case 'done':\n dispatch({\n type: 'STREAM_DONE',\n usage: event.usage\n ? { inputTokens: event.usage.input_tokens, outputTokens: event.usage.output_tokens }\n : undefined,\n });\n callbacks.onStreamEnd?.();\n return;\n case 'explore_start':\n case 'explore_end':\n case 'plan_mode':\n case 'field_scrub':\n // Observability-only events — not reflected in message state today.\n return;\n default: {\n // Exhaustiveness check — any new SSE event must be routed here.\n const _exhaustive: never = event;\n void _exhaustive;\n return;\n }\n }\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\n/**\n * High-level chat hook for consumers that use the `/chat/stream` endpoint\n * (Bearer-auth, session resume, history loading, ask-user POST helpers).\n *\n * This hook is a thin wrapper around `useChatStream` — the canonical\n * reducer + SSE event loop lives there. Everything here is transport\n * and session management specific to the main chat flow:\n * - streamChat() → POST /chat/stream\n * - GET /chat/sessions/:id/history\n * - POST /chat/sessions/:id/ask-user-response\n * - `initialMessage` auto-send + StrictMode safe retry\n * - `resumeSessionId` mount-time history load\n *\n * The public API (UseChatOptions, UseChatReturn) is unchanged from\n * earlier versions; this file used to carry its own copy of the reducer.\n */\nimport { useCallback, useEffect, useRef } from 'react';\nimport type {\n ChatMessage,\n ToolCallInfo,\n KBProposalInfo,\n ContentBlock,\n ChatUser,\n SSEEvent,\n} from '../types';\nimport { streamChat, getSessionHistory } from '../client/chat-api';\nimport type { WidgetEventBus } from '../events/event-bus';\nimport type { WidgetEvent, EntityExtractor } from '../events/types';\nimport { useChatStream } from './useChatStream';\n\nexport { chatReducer } from './useChatStream';\n\n// ---------------------------------------------------------------------------\n// Public API (unchanged)\n// ---------------------------------------------------------------------------\n\nexport interface UseChatOptions {\n serverUrl: string;\n user: ChatUser;\n /** Return a Bearer token (API key or JWT) for authenticated requests. */\n getToken?: () => string | null | undefined;\n onToolCall?: (call: ToolCallInfo) => void;\n onKBProposal?: (proposal: KBProposalInfo) => void;\n /** Callback for all widget events (agent-driven + interaction). */\n onEvent?: (event: WidgetEvent) => void;\n /** Custom entity extractors. If provided, replaces the default extractor. */\n entityExtractors?: EntityExtractor[];\n /** Session type — controls which skills, tools, KB docs load into this session. */\n sessionType?: string;\n /** Specific deployment ID to load instead of the active deployment. */\n deployId?: string;\n /** Auto-send this message when the hook mounts. Sent exactly once via ref guard. */\n initialMessage?: string;\n /** Load an existing session on mount (read-only history view). Takes precedence over initialMessage. */\n resumeSessionId?: string;\n /** Called when the SSE stream ends (agent finishes responding). */\n onStreamEnd?: () => void;\n /** Called when a session ID is received from the server (first stream init). */\n onSessionCreated?: (sessionId: string) => void;\n}\n\nexport interface UseChatReturn {\n messages: ChatMessage[];\n send: (text: string) => void;\n /** Stop the current stream without clearing history. */\n stop: () => void;\n isStreaming: boolean;\n activeToolCalls: ToolCallInfo[];\n session: { id: string | null; role?: string };\n error: string | null;\n reset: () => void;\n /** Event bus for subscribing to widget events. */\n eventBus: WidgetEventBus;\n /** Submit answers to a pending ask_user prompt. */\n submitAskUserResponse: (askId: string, answers: Record<string, string>) => void;\n /** Load a historical session for read-only viewing. */\n loadSession: (sessionId: string) => void;\n /** True when viewing a loaded historical session. */\n isHistorical: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n\nexport function useChat(options: UseChatOptions): UseChatReturn {\n const {\n serverUrl,\n user,\n getToken,\n onToolCall,\n onKBProposal,\n onEvent,\n entityExtractors,\n sessionType,\n deployId,\n initialMessage,\n resumeSessionId,\n onStreamEnd,\n onSessionCreated,\n } = options;\n\n // We keep callbacks + request metadata in refs so the streamFn closure\n // captured by useChatStream stays stable while still using fresh values.\n const authRef = useRef({ getToken, user, sessionType, deployId });\n authRef.current = { getToken, user, sessionType, deployId };\n\n // Track current session id in a ref so the streamFn closure can pass it\n // with every POST (used to resume an in-flight session).\n const sessionIdRef = useRef<string | null>(null);\n\n // Build a transport function that calls streamChat with /chat/stream.\n const streamFn = useCallback(\n (text: string, signal: AbortSignal): AsyncIterable<SSEEvent> => {\n const token = authRef.current.getToken?.() ?? undefined;\n return streamChat(\n serverUrl,\n {\n message: text,\n session_id: sessionIdRef.current ?? undefined,\n role: authRef.current.user.role,\n session_type: authRef.current.sessionType,\n deploy_id: authRef.current.deployId,\n },\n signal,\n token,\n );\n },\n [serverUrl],\n );\n\n const stream = useChatStream({\n streamFn,\n ...(onToolCall ? { onToolCall } : {}),\n ...(onKBProposal ? { onKBProposal } : {}),\n ...(onEvent ? { onEvent } : {}),\n ...(onStreamEnd ? { onStreamEnd } : {}),\n ...(onSessionCreated ? { onSessionCreated } : {}),\n ...(entityExtractors ? { entityExtractors } : {}),\n });\n\n // Mirror sessionId into the ref so streamFn picks up the value on the\n // next send() call — streamFn closure captures the ref, not a snapshot.\n sessionIdRef.current = stream.sessionId;\n\n // ---------------------------------------------------------------------\n // Session resume + initialMessage auto-send (unchanged behavior)\n // ---------------------------------------------------------------------\n\n const initialMessageSentRef = useRef(false);\n const initialMessageDeliveredRef = useRef(false);\n const resumeLoadedRef = useRef(false);\n\n const loadSession = useCallback(\n (sessionId: string) => {\n // Suppress initial message when loading a previous session.\n initialMessageDeliveredRef.current = true;\n const doLoad = async (): Promise<void> => {\n try {\n const token = authRef.current.getToken?.() ?? undefined;\n const detail = await getSessionHistory(serverUrl, sessionId, token);\n const chatMessages = rehydrateHistory(detail.messages);\n stream.dispatch({ type: 'LOAD_HISTORY', sessionId, messages: chatMessages });\n } catch (err) {\n stream.dispatch({\n type: 'STREAM_ERROR',\n message: err instanceof Error ? err.message : 'Failed to load session',\n });\n }\n };\n void doLoad();\n },\n // stream.dispatch is stable (React guarantees); serverUrl is the real dep.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [serverUrl],\n );\n\n // Resume an existing session on mount (takes precedence over initialMessage).\n useEffect(() => {\n if (!resumeSessionId || resumeLoadedRef.current) return;\n resumeLoadedRef.current = true;\n initialMessageDeliveredRef.current = true;\n loadSession(resumeSessionId);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [resumeSessionId]);\n\n // Auto-send initialMessage once. Two refs:\n // - `sent`: flips true once send() is called — prevents re-sends on\n // re-renders caused by dependency changes.\n // - `delivered`: flips true after the stream completes without abort —\n // prevents re-sends after successful delivery. Stays false on abort\n // (StrictMode unmount), allowing retry on remount.\n useEffect(() => {\n if (resumeSessionId) return;\n if (stream.sessionId && !initialMessage) return; // resumed session path\n if (!initialMessage || initialMessageDeliveredRef.current) return;\n initialMessageSentRef.current = false;\n\n const timer = setTimeout(() => {\n if (!initialMessageSentRef.current && !initialMessageDeliveredRef.current) {\n initialMessageSentRef.current = true;\n stream.send(initialMessage);\n }\n }, 0);\n return () => { clearTimeout(timer); };\n // Only depend on initialMessage — send changes when isStreaming toggles\n // and we don't want that to re-trigger the initial send.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialMessage]);\n\n // Flip `delivered` once the first send completes.\n useEffect(() => {\n if (\n initialMessage &&\n initialMessageSentRef.current &&\n !stream.isStreaming &&\n stream.messages.length > 0\n ) {\n initialMessageDeliveredRef.current = true;\n }\n }, [initialMessage, stream.isStreaming, stream.messages.length]);\n\n // ---------------------------------------------------------------------\n // submitAskUserResponse — POST answers then mark the ask_user block.\n // ---------------------------------------------------------------------\n\n const submitAskUserResponse = useCallback(\n (askId: string, answers: Record<string, string>): void => {\n const sid = sessionIdRef.current;\n if (!sid) return;\n\n stream.dispatch({ type: 'ASK_USER_SUBMITTED', askId, answers });\n\n const doSubmit = async (): Promise<void> => {\n try {\n const token = authRef.current.getToken?.() ?? undefined;\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n await fetch(`${serverUrl}/chat/sessions/${sid}/ask-user-response`, {\n method: 'POST',\n headers,\n body: JSON.stringify({ ask_id: askId, answers }),\n });\n } catch {\n // Non-critical: if this fails the server will time out the ask_user.\n }\n };\n void doSubmit();\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [serverUrl],\n );\n\n return {\n messages: stream.messages,\n send: stream.send,\n stop: stream.stop,\n isStreaming: stream.isStreaming,\n activeToolCalls: stream.activeToolCalls,\n session: { id: stream.sessionId, role: user.role },\n error: stream.error,\n reset: stream.reset,\n eventBus: stream.eventBus,\n submitAskUserResponse,\n loadSession,\n isHistorical: stream.isHistorical,\n };\n}\n\n// ---------------------------------------------------------------------------\n// History rehydration — stored DB messages → ChatMessage shapes\n// ---------------------------------------------------------------------------\n\ntype StoredMessage = Awaited<ReturnType<typeof getSessionHistory>>['messages'][number];\n\nfunction rehydrateHistory(stored: readonly StoredMessage[]): ChatMessage[] {\n return stored.map((m): ChatMessage => {\n if (m.type === 'assistant_text') {\n const toolCalls: ToolCallInfo[] = (m.toolCalls ?? []).map((tc) => ({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- stored field\n toolId: (tc['toolId'] as string) ?? '',\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- stored field\n toolName: (tc['toolName'] as string) ?? '',\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- stored field\n parameters: (tc['args'] as Record<string, unknown>) ?? {},\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- stored field\n status: (tc['status'] as ToolCallInfo['status']) ?? 'success',\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- stored field\n duration_ms: tc['duration_ms'] as number | undefined,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- stored field\n error: tc['error'] as string | undefined,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- stored field\n result: tc['result'] as string | undefined,\n }));\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- stored widgets from DB\n const widgets = (m.widgets ?? []) as unknown as Array<import('../types').WidgetInfo>;\n\n // Rebuild content blocks.\n const storedBlocks = m.contentBlocks;\n const contentBlocks: ContentBlock[] = [];\n if (storedBlocks && storedBlocks.length > 0) {\n const toolCallById = new Map(toolCalls.map((tc) => [tc.toolId, tc]));\n for (const block of storedBlocks) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- stored block from DB\n const blockType = block['type'] as string;\n if (blockType === 'text') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- stored field\n const text = block['text'] as string;\n if (text.length > 0) {\n contentBlocks.push({ type: 'text', text });\n }\n } else if (blockType === 'tool_calls') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- stored field\n const callIds = block['callIds'] as string[] | undefined;\n const calls = callIds\n ? callIds\n .map((id) => toolCallById.get(id))\n .filter((tc): tc is ToolCallInfo => tc != null)\n : toolCalls;\n if (calls.length > 0) {\n contentBlocks.push({ type: 'tool_calls', calls });\n }\n } else if (blockType === 'widget') {\n contentBlocks.push({\n type: 'widget',\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- stored field\n widgetType: block['widgetType'] as string,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- stored field\n data: (block['data'] as Record<string, unknown>) ?? {},\n });\n }\n }\n } else {\n // Legacy messages without stored contentBlocks.\n if (toolCalls.length > 0) contentBlocks.push({ type: 'tool_calls', calls: toolCalls });\n if (m.text.length > 0) contentBlocks.push({ type: 'text', text: m.text });\n for (const w of widgets) {\n contentBlocks.push({ type: 'widget', widgetType: w.widgetType, data: w.data });\n }\n }\n\n return {\n type: 'assistant_text',\n id: m.id,\n text: m.text,\n toolCalls,\n confirmations: [],\n skillActivations: m.skillActivations ?? [],\n kbProposals: [],\n widgets,\n contentBlocks,\n timestamp: m.timestamp,\n };\n }\n if (m.type === 'error') {\n return { type: 'error', id: m.id, message: m.text, timestamp: m.timestamp };\n }\n return { type: 'user', id: m.id, text: m.text, timestamp: m.timestamp };\n });\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { useEffect, useRef, useCallback } from 'react';\nimport type { WidgetEventBus } from '../events/event-bus';\nimport type { WidgetEventMap, WidgetEvent } from '../events/types';\n\ntype Unsubscribe = () => void;\n\nexport interface UseWidgetEventsReturn {\n /** Subscribe to a specific event type. Returns unsubscribe function. */\n on: <K extends keyof WidgetEventMap>(\n event: K,\n listener: (data: WidgetEventMap[K]) => void,\n ) => Unsubscribe;\n /** Subscribe to all events. Returns unsubscribe function. */\n onAny: (listener: (data: WidgetEvent) => void) => Unsubscribe;\n}\n\n/**\n * React hook for subscribing to widget events with automatic cleanup on unmount.\n * Subscriptions created via `on` / `onAny` are tracked and removed when the\n * component unmounts.\n */\nexport function useWidgetEvents(eventBus: WidgetEventBus | null | undefined): UseWidgetEventsReturn {\n // Track all active subscriptions for cleanup\n const subscriptions = useRef<Array<() => void>>([]);\n\n // Cleanup on unmount\n useEffect(\n () => () => {\n for (const unsub of subscriptions.current) {\n unsub();\n }\n subscriptions.current = [];\n },\n [],\n );\n\n const on = useCallback(\n <K extends keyof WidgetEventMap>(\n event: K,\n listener: (data: WidgetEventMap[K]) => void,\n ): Unsubscribe => {\n if (!eventBus) {\n return () => {};\n }\n eventBus.on(event, listener);\n const unsub = () => {\n eventBus.off(event, listener);\n };\n subscriptions.current.push(unsub);\n return unsub;\n },\n [eventBus],\n );\n\n const onAny = useCallback(\n (listener: (data: WidgetEvent) => void): Unsubscribe => {\n if (!eventBus) {\n return () => {};\n }\n eventBus.on('*', listener);\n const unsub = () => {\n eventBus.off('*', listener);\n };\n subscriptions.current.push(unsub);\n return unsub;\n },\n [eventBus],\n );\n\n return { on, onAny };\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { listSessions, updateSession } from '../client/chat-api';\nimport type { SessionHistoryItem } from '../client/chat-api';\n\nexport interface UseSessionHistoryOptions {\n serverUrl: string;\n getToken?: () => string | null | undefined;\n enabled: boolean;\n}\n\nexport interface UseSessionHistoryReturn {\n sessions: SessionHistoryItem[];\n isLoading: boolean;\n error: string | null;\n refresh: () => void;\n updateTags: (sessionId: string, tags: string[]) => void;\n updateTitle: (sessionId: string, title: string) => void;\n allTags: string[];\n}\n\nexport function useSessionHistory(options: UseSessionHistoryOptions): UseSessionHistoryReturn {\n const { serverUrl, getToken, enabled } = options;\n const [sessions, setSessions] = useState<SessionHistoryItem[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const getTokenRef = useRef(getToken);\n getTokenRef.current = getToken;\n\n const refresh = useCallback(() => {\n if (!enabled) return;\n setIsLoading(true);\n setError(null);\n\n const doFetch = async () => {\n try {\n const token = getTokenRef.current?.() ?? undefined;\n const result = await listSessions(serverUrl, token);\n setSessions(result);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load sessions');\n } finally {\n setIsLoading(false);\n }\n };\n void doFetch();\n }, [serverUrl, enabled]);\n\n const updateTags = useCallback(\n (sessionId: string, tags: string[]) => {\n const doUpdate = async () => {\n try {\n const token = getTokenRef.current?.() ?? undefined;\n await updateSession(serverUrl, sessionId, { tags }, token);\n setSessions((prev) =>\n prev.map((s) => (s.id === sessionId ? { ...s, tags } : s)),\n );\n } catch {\n // Non-critical\n }\n };\n void doUpdate();\n },\n [serverUrl],\n );\n\n const updateTitle = useCallback(\n (sessionId: string, title: string) => {\n const doUpdate = async () => {\n try {\n const token = getTokenRef.current?.() ?? undefined;\n await updateSession(serverUrl, sessionId, { title }, token);\n setSessions((prev) =>\n prev.map((s) => (s.id === sessionId ? { ...s, title } : s)),\n );\n } catch {\n // Non-critical\n }\n };\n void doUpdate();\n },\n [serverUrl],\n );\n\n // Collect all unique tags across sessions\n const allTags = [...new Set(sessions.flatMap((s) => s.tags))].sort();\n\n // Auto-fetch on mount if enabled\n useEffect(() => {\n if (enabled) {\n refresh();\n }\n }, [enabled, refresh]);\n\n return { sessions, isLoading, error, refresh, updateTags, updateTitle, allTags };\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport type { ChatTheme } from './types';\n\nexport const defaultTheme: ChatTheme = {\n primaryColor: '#1e40af',\n backgroundColor: '#ffffff',\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontSize: '14px',\n borderRadius: '8px',\n userBubbleColor: '#1e40af',\n agentBubbleColor: '#f3f4f6',\n toolCallColor: '#f9fafb',\n headerText: 'AI Assistant',\n placeholder: 'Type a message...',\n emptyStateText: 'Send a message to start a conversation.',\n};\n\nconst themeToCSS: Record<keyof ChatTheme, string> = {\n primaryColor: '--pcw-primary',\n backgroundColor: '--pcw-bg',\n fontFamily: '--pcw-font',\n fontSize: '--pcw-font-size',\n borderRadius: '--pcw-radius',\n userBubbleColor: '--pcw-user-bubble',\n agentBubbleColor: '--pcw-agent-bubble',\n toolCallColor: '--pcw-tool-call-bg',\n headerText: '--pcw-header-text',\n placeholder: '--pcw-placeholder',\n emptyStateText: '--pcw-empty-state-text',\n};\n\n/**\n * Apply theme values as CSS custom properties on a DOM element.\n */\nexport function applyTheme(element: HTMLElement, theme: ChatTheme): void {\n const merged = { ...defaultTheme, ...theme };\n for (const [key, cssVar] of Object.entries(themeToCSS)) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- Known theme keys\n const value = merged[key as keyof ChatTheme];\n if (value !== undefined) {\n element.style.setProperty(cssVar, value);\n }\n }\n}\n\n/**\n * Get the merged theme with defaults filled in.\n */\nexport function mergeTheme(theme?: ChatTheme): Required<ChatTheme> {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- All defaults provided\n return { ...defaultTheme, ...theme } as Required<ChatTheme>;\n}\n"],"names":["initialState","messageCounter","createMessageId","chatReducer","state","action","userMessage","assistantMessage","msgs","last","blocks","lastBlock","toolCall","updatedToolCalls","updateCall","tc","updatedCalls","block","activeToolCalls","appendEvent","proposal","widget","newStatus","updatedConfirmations","c","updateLog","doneMessages","lastMsg","stopRunning","stoppedCalls","stoppedBlocks","newUsage","useChatStream","options","entityExtractors","dispatch","useReducer","abortControllerRef","useRef","callbacksRef","eventBusRef","WidgetEventBus","eventBus","entityRefHandlerRef","e","_b","_a","pendingToolCallsRef","send","useCallback","text","controller","receivedDone","stream","event","processEvent","err","stop","reset","respondToConfirmation","correlationId","approved","useEffect","pending","callbacks","pendingCall","toolCallResult","toolEvent","_c","skillEvent","_d","_e","kbEvent","_f","widgetEvent","_g","confirmation","_h","_i","useChat","serverUrl","user","getToken","onToolCall","onKBProposal","onEvent","sessionType","deployId","initialMessage","resumeSessionId","onStreamEnd","onSessionCreated","authRef","sessionIdRef","streamFn","signal","token","streamChat","initialMessageSentRef","initialMessageDeliveredRef","resumeLoadedRef","loadSession","sessionId","detail","getSessionHistory","chatMessages","rehydrateHistory","timer","submitAskUserResponse","askId","answers","sid","headers","stored","m","toolCalls","widgets","storedBlocks","contentBlocks","toolCallById","blockType","callIds","calls","id","w","useWidgetEvents","subscriptions","unsub","on","listener","onAny","useSessionHistory","enabled","sessions","setSessions","useState","isLoading","setIsLoading","error","setError","getTokenRef","refresh","result","listSessions","updateTags","tags","updateSession","prev","s","updateTitle","title","allTags","defaultTheme","themeToCSS","applyTheme","element","theme","merged","key","cssVar","value","mergeTheme"],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Copyright 2025 Amodal Labs, Inc.
|
|
4
4
|
* SPDX-License-Identifier: MIT
|
|
5
5
|
*/
|
|
6
|
-
export type SSEEventType = 'init' | 'text_delta' | 'tool_call_start' | 'tool_call_result' | 'subagent_event' | 'skill_activated' | 'widget' | 'kb_proposal' | 'credential_saved' | 'approved' | 'ask_user' | 'explore_start' | 'explore_end' | 'plan_mode' | 'field_scrub' | 'confirmation_required' | 'error' | 'done';
|
|
6
|
+
export type SSEEventType = 'init' | 'text_delta' | 'tool_call_start' | 'tool_call_result' | 'subagent_event' | 'skill_activated' | 'widget' | 'kb_proposal' | 'credential_saved' | 'approved' | 'ask_user' | 'explore_start' | 'explore_end' | 'plan_mode' | 'field_scrub' | 'confirmation_required' | 'tool_log' | 'error' | 'done';
|
|
7
7
|
export interface SSEInitEvent {
|
|
8
8
|
type: 'init';
|
|
9
9
|
session_id: string;
|
|
@@ -115,6 +115,12 @@ export interface SSEConfirmationRequiredEvent {
|
|
|
115
115
|
correlation_id?: string;
|
|
116
116
|
timestamp: string;
|
|
117
117
|
}
|
|
118
|
+
export interface SSEToolLogEvent {
|
|
119
|
+
type: 'tool_log';
|
|
120
|
+
tool_name: string;
|
|
121
|
+
message: string;
|
|
122
|
+
timestamp: string;
|
|
123
|
+
}
|
|
118
124
|
export interface SSEErrorEvent {
|
|
119
125
|
type: 'error';
|
|
120
126
|
message: string;
|
|
@@ -128,7 +134,7 @@ export interface SSEDoneEvent {
|
|
|
128
134
|
output_tokens: number;
|
|
129
135
|
};
|
|
130
136
|
}
|
|
131
|
-
export type SSEEvent = SSEInitEvent | SSETextDeltaEvent | SSEToolCallStartEvent | SSEToolCallResultEvent | SSESubagentEvent | SSESkillActivatedEvent | SSEWidgetEvent | SSEKBProposalEvent | SSECredentialSavedEvent | SSEApprovedEvent | SSEAskUserEvent | SSEExploreStartEvent | SSEExploreEndEvent | SSEPlanModeEvent | SSEFieldScrubEvent | SSEConfirmationRequiredEvent | SSEErrorEvent | SSEDoneEvent;
|
|
137
|
+
export type SSEEvent = SSEInitEvent | SSETextDeltaEvent | SSEToolCallStartEvent | SSEToolCallResultEvent | SSESubagentEvent | SSESkillActivatedEvent | SSEWidgetEvent | SSEKBProposalEvent | SSECredentialSavedEvent | SSEApprovedEvent | SSEAskUserEvent | SSEExploreStartEvent | SSEExploreEndEvent | SSEPlanModeEvent | SSEFieldScrubEvent | SSEConfirmationRequiredEvent | SSEToolLogEvent | SSEErrorEvent | SSEDoneEvent;
|
|
132
138
|
export interface AskUserQuestion {
|
|
133
139
|
question: string;
|
|
134
140
|
header: string;
|
|
@@ -161,6 +167,8 @@ export interface ToolCallInfo {
|
|
|
161
167
|
duration_ms?: number;
|
|
162
168
|
error?: string;
|
|
163
169
|
subagentEvents?: SubagentEventInfo[];
|
|
170
|
+
/** Ephemeral progress message from the tool executor (via ctx.log). */
|
|
171
|
+
logMessage?: string;
|
|
164
172
|
}
|
|
165
173
|
export interface ConfirmationInfo {
|
|
166
174
|
endpoint: string;
|
|
@@ -206,6 +214,11 @@ export interface AssistantTextMessage {
|
|
|
206
214
|
widgets: WidgetInfo[];
|
|
207
215
|
contentBlocks: ContentBlock[];
|
|
208
216
|
timestamp: string;
|
|
217
|
+
/** Per-turn token usage (populated when the turn's done event arrives). */
|
|
218
|
+
usage?: {
|
|
219
|
+
inputTokens: number;
|
|
220
|
+
outputTokens: number;
|
|
221
|
+
};
|
|
209
222
|
}
|
|
210
223
|
export interface ErrorMessage {
|
|
211
224
|
type: 'error';
|
|
@@ -354,6 +367,10 @@ export type ChatAction = {
|
|
|
354
367
|
} | {
|
|
355
368
|
type: 'STREAM_ERROR';
|
|
356
369
|
message: string;
|
|
370
|
+
} | {
|
|
371
|
+
type: 'STREAM_TOOL_LOG';
|
|
372
|
+
toolName: string;
|
|
373
|
+
message: string;
|
|
357
374
|
} | {
|
|
358
375
|
type: 'STREAM_DONE';
|
|
359
376
|
usage?: {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/widget.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as e, jsxs as n, Fragment as ne } from "react/jsx-runtime";
|
|
2
2
|
import { useState as w, useCallback as b, Component as re, useRef as B, useEffect as M } from "react";
|
|
3
|
-
import { m as ie,
|
|
4
|
-
import { d as ct,
|
|
5
|
-
import { W as nt, a as rt, d as it, g as lt, l as ot } from "./
|
|
3
|
+
import { m as ie, b as le, e as oe, a as de } from "./theme-C051UgQ1.js";
|
|
4
|
+
import { d as ct, f as st } from "./theme-C051UgQ1.js";
|
|
5
|
+
import { W as nt, a as rt, d as it, g as lt, l as ot } from "./chat-api-CqMQa8r3.js";
|
|
6
6
|
/**
|
|
7
7
|
* @license
|
|
8
8
|
* Copyright 2025 Amodal Labs, Inc.
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"event-bus-h26clqbZ.js","sources":["../src/client/sse-client.ts","../src/client/chat-api.ts","../src/client/EventEmitter.ts","../src/events/entity-extractor.ts","../src/events/event-bus.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport type { SSEEvent } from '../types';\n\n/**\n * Parse a single SSE data line into a typed event.\n * Returns null for non-data lines or empty data.\n */\nexport function parseSSELine(line: string): SSEEvent | null {\n if (!line.startsWith('data: ')) return null;\n const json = line.slice(6).trim();\n if (json.length === 0) return null;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- SSE event from server\n return JSON.parse(json) as SSEEvent;\n}\n\nexport interface StreamSSEOptions {\n signal?: AbortSignal;\n headers?: Record<string, string>;\n}\n\n/**\n * Streams SSE events from a POST endpoint.\n * Uses fetch + ReadableStream (not EventSource, which only supports GET).\n */\nexport async function* streamSSE(\n url: string,\n body: Record<string, unknown>,\n options?: StreamSSEOptions,\n): AsyncGenerator<SSEEvent> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...options?.headers,\n };\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n signal: options?.signal,\n });\n\n if (!response.ok) {\n throw new Error(`SSE request failed: ${String(response.status)} ${response.statusText}`);\n }\n\n yield* readSSEStream(response);\n}\n\n/**\n * Streams SSE events from a GET endpoint (e.g., task streaming).\n */\nexport async function* streamSSEGet(\n url: string,\n options?: StreamSSEOptions,\n): AsyncGenerator<SSEEvent> {\n const response = await fetch(url, {\n method: 'GET',\n headers: options?.headers,\n signal: options?.signal,\n });\n\n if (!response.ok) {\n throw new Error(`SSE request failed: ${String(response.status)} ${response.statusText}`);\n }\n\n yield* readSSEStream(response);\n}\n\n/**\n * Reads SSE events from a Response body stream.\n */\nasync function* readSSEStream(response: Response): AsyncGenerator<SSEEvent> {\n const body = response.body;\n if (!body) {\n throw new Error('Response body is null');\n }\n\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed.length === 0) continue;\n const event = parseSSELine(trimmed);\n if (event) {\n yield event;\n }\n }\n }\n\n // Process any remaining buffer\n if (buffer.trim().length > 0) {\n const event = parseSSELine(buffer.trim());\n if (event) {\n yield event;\n }\n }\n } finally {\n reader.releaseLock();\n }\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport type { SSEEvent } from '../types';\nimport { streamSSE } from './sse-client';\n\nexport interface ChatStreamRequest {\n message: string;\n session_id?: string;\n role?: string;\n session_type?: string;\n deploy_id?: string;\n}\n\nexport interface SessionInfo {\n session_id: string;\n role: string;\n}\n\n/**\n * Streams chat responses from the API server's SSE endpoint.\n * Delegates to the shared streamSSE utility.\n */\nexport async function* streamChat(\n serverUrl: string,\n request: ChatStreamRequest,\n signal?: AbortSignal,\n token?: string,\n): AsyncGenerator<SSEEvent> {\n const url = `${serverUrl}/chat/stream`;\n\n const headers: Record<string, string> = {};\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n\n const body: Record<string, unknown> = { message: request.message };\n if (request.session_id) body['session_id'] = request.session_id;\n if (request.role) body['role'] = request.role;\n if (request.session_type) body['session_type'] = request.session_type;\n if (request.deploy_id) body['deploy_id'] = request.deploy_id;\n\n yield* streamSSE(url, body, {\n signal,\n headers,\n });\n}\n\n/**\n * Creates a new chat session on the server.\n */\nexport async function createSession(\n serverUrl: string,\n user: { id: string; role?: string },\n token?: string,\n): Promise<SessionInfo> {\n const url = `${serverUrl}/sessions`;\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n\n const body: Record<string, string> = { user_id: user.id };\n if (user.role) body['role'] = user.role;\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n throw new Error(`Session creation failed: ${String(response.status)} ${response.statusText}`);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- Server response\n return (await response.json()) as SessionInfo;\n}\n\n// ---------------------------------------------------------------------------\n// Session history API\n// ---------------------------------------------------------------------------\n\nexport interface SessionHistoryItem {\n id: string;\n app_id: string;\n title?: string;\n tags: string[];\n status: string;\n session_type?: string;\n message_count: number;\n created_at: string;\n updated_at: string;\n}\n\nexport interface SessionDetail extends SessionHistoryItem {\n messages: Array<{\n type: string;\n id: string;\n text: string;\n timestamp: string;\n toolCalls?: Array<Record<string, unknown>>;\n skillActivations?: string[];\n widgets?: Array<Record<string, unknown>>;\n contentBlocks?: Array<Record<string, unknown>>;\n }>;\n}\n\nfunction authHeaders(token?: string | null): Record<string, string> {\n const headers: Record<string, string> = {};\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n return headers;\n}\n\n/**\n * List past sessions for the authenticated app.\n */\nexport async function listSessions(\n serverUrl: string,\n token?: string | null,\n tags?: string[],\n): Promise<SessionHistoryItem[]> {\n const qs = tags && tags.length > 0 ? `?tags=${tags.join(',')}` : '';\n const url = `${serverUrl}/sessions/history${qs}`;\n\n const response = await fetch(url, { headers: authHeaders(token) });\n if (!response.ok) {\n throw new Error(`List sessions failed: ${String(response.status)} ${response.statusText}`);\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- Server response\n return (await response.json()) as SessionHistoryItem[];\n}\n\n/**\n * Get a single session with full message history.\n */\nexport async function getSessionHistory(\n serverUrl: string,\n sessionId: string,\n token?: string | null,\n): Promise<SessionDetail> {\n const url = `${serverUrl}/sessions/history/${sessionId}`;\n\n const response = await fetch(url, { headers: authHeaders(token) });\n if (!response.ok) {\n throw new Error(`Get session failed: ${String(response.status)} ${response.statusText}`);\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- Server response\n return (await response.json()) as SessionDetail;\n}\n\n/**\n * Update session title and/or tags.\n */\nexport async function updateSession(\n serverUrl: string,\n sessionId: string,\n updates: { title?: string; tags?: string[] },\n token?: string | null,\n): Promise<SessionDetail> {\n const url = `${serverUrl}/sessions/history/${sessionId}`;\n\n const response = await fetch(url, {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json',\n ...authHeaders(token),\n },\n body: JSON.stringify(updates),\n });\n if (!response.ok) {\n throw new Error(`Update session failed: ${String(response.status)} ${response.statusText}`);\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- Server response\n return (await response.json()) as SessionDetail;\n}\n\n/**\n * Creates a configured chat client instance.\n */\nexport function createChatClient(serverUrl: string, token?: string) {\n return {\n stream: (request: ChatStreamRequest, signal?: AbortSignal) =>\n streamChat(serverUrl, request, signal, token),\n createSession: (user: { id: string; role?: string }) =>\n createSession(serverUrl, user, token),\n listSessions: (tags?: string[]) => listSessions(serverUrl, token, tags),\n getSessionHistory: (sessionId: string) => getSessionHistory(serverUrl, sessionId, token),\n updateSession: (sessionId: string, updates: { title?: string; tags?: string[] }) =>\n updateSession(serverUrl, sessionId, updates, token),\n };\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\n/**\n * Minimal typed event emitter with no external dependencies.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- generic event map constraint\nexport class TypedEventEmitter<Events extends Record<string, any>> {\n private listeners = new Map<keyof Events, Set<(data: never) => void>>();\n\n on<K extends keyof Events>(event: K, listener: (data: Events[K]) => void): this {\n let set = this.listeners.get(event);\n if (!set) {\n set = new Set();\n this.listeners.set(event, set);\n }\n set.add(listener as (data: never) => void);\n return this;\n }\n\n off<K extends keyof Events>(event: K, listener: (data: Events[K]) => void): this {\n const set = this.listeners.get(event);\n if (set) {\n set.delete(listener as (data: never) => void);\n if (set.size === 0) {\n this.listeners.delete(event);\n }\n }\n return this;\n }\n\n protected emit<K extends keyof Events>(event: K, data: Events[K]): void {\n const set = this.listeners.get(event);\n if (set) {\n for (const listener of set) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- generic event dispatch\n (listener as (data: Events[K]) => void)(data);\n }\n }\n }\n\n removeAllListeners(): this {\n this.listeners.clear();\n return this;\n }\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport type { EntityReference, WidgetEvent } from './types';\n\n/**\n * Default entity extractor. Inspects agent-driven events and extracts entity\n * references from known widget data shapes and tool parameters.\n */\nexport function defaultEntityExtractor(event: WidgetEvent): EntityReference[] {\n const entities: EntityReference[] = [];\n\n if (event.type === 'widget_rendered') {\n extractFromWidget(event.widgetType, event.data, entities);\n }\n\n if (event.type === 'tool_executed') {\n extractFromToolParams(event.parameters, entities);\n }\n\n return entities;\n}\n\nfunction extractFromWidget(\n widgetType: string,\n data: Record<string, unknown>,\n entities: EntityReference[],\n): void {\n switch (widgetType) {\n case 'entity-card': {\n if (typeof data['mac'] === 'string') {\n entities.push({\n entityType: 'device',\n entityId: data['mac'],\n source: 'widget:entity-card',\n });\n }\n if (typeof data['zone'] === 'string') {\n entities.push({\n entityType: 'zone',\n entityId: data['zone'],\n source: 'widget:entity-card',\n });\n }\n break;\n }\n case 'entity-list': {\n const devices = data['devices'];\n if (Array.isArray(devices)) {\n for (const device of devices) {\n if (typeof device === 'object' && device !== null && 'mac' in device && typeof device['mac'] === 'string') {\n entities.push({\n entityType: 'device',\n entityId: device['mac'],\n source: 'widget:entity-list',\n });\n }\n }\n }\n break;\n }\n case 'scope-map': {\n const zones = data['highlight_zones'];\n if (Array.isArray(zones)) {\n for (const zone of zones) {\n if (typeof zone === 'string') {\n entities.push({\n entityType: 'zone',\n entityId: zone,\n source: 'widget:scope-map',\n });\n }\n }\n }\n const devices = data['highlight_devices'];\n if (Array.isArray(devices)) {\n for (const mac of devices) {\n if (typeof mac === 'string') {\n entities.push({\n entityType: 'device',\n entityId: mac,\n source: 'widget:scope-map',\n });\n }\n }\n }\n break;\n }\n case 'alert-card': {\n const alertId = data['alert_id'] ?? data['id'];\n if (typeof alertId === 'string') {\n entities.push({\n entityType: 'alert',\n entityId: alertId,\n source: 'widget:alert-card',\n });\n }\n break;\n }\n default:\n break;\n }\n}\n\nfunction extractFromToolParams(\n parameters: Record<string, unknown>,\n entities: EntityReference[],\n): void {\n if (typeof parameters['zone'] === 'string') {\n entities.push({\n entityType: 'zone',\n entityId: parameters['zone'],\n source: 'tool:parameter',\n });\n }\n if (typeof parameters['mac'] === 'string') {\n entities.push({\n entityType: 'device',\n entityId: parameters['mac'],\n source: 'tool:parameter',\n });\n }\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { TypedEventEmitter } from '../client/EventEmitter';\nimport { defaultEntityExtractor } from './entity-extractor';\nimport type { WidgetEventMap, WidgetEvent, EntityExtractor, EntityReferencedEvent } from './types';\n\n/**\n * Event bus for widget events. Emits both agent-driven events (from SSE stream)\n * and user interaction events (hover/click on entities in the chat).\n *\n * Subscribing to `'*'` receives all events.\n */\nexport class WidgetEventBus extends TypedEventEmitter<WidgetEventMap> {\n private extractors: EntityExtractor[] = [defaultEntityExtractor];\n\n /**\n * Process an agent-driven event: emit on its typed channel + '*',\n * then run entity extractors and emit entity_referenced for each found entity.\n */\n processEvent(event: WidgetEvent): void {\n // Emit on the typed channel\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- event type matches map key\n this.emit(event.type as keyof WidgetEventMap, event as never);\n this.emit('*', event);\n\n // Run entity extractors only for agent-driven events (not interaction events, not entity_referenced)\n if (\n event.type === 'tool_executed' ||\n event.type === 'skill_activated' ||\n event.type === 'widget_rendered' ||\n event.type === 'kb_proposal'\n ) {\n for (const extractor of this.extractors) {\n const entities = extractor(event);\n for (const entity of entities) {\n const refEvent: EntityReferencedEvent = {\n type: 'entity_referenced',\n entity,\n sourceEvent: event,\n timestamp: new Date().toISOString(),\n };\n this.emit('entity_referenced', refEvent);\n this.emit('*', refEvent);\n }\n }\n }\n }\n\n /**\n * Emit an interaction event (entity_hovered, entity_unhovered, entity_clicked).\n * These are emitted on their typed channel + '*' without running extractors,\n * since interaction events already carry their EntityReference.\n */\n emitInteraction(event: WidgetEvent): void {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- event type matches map key\n this.emit(event.type as keyof WidgetEventMap, event as never);\n this.emit('*', event);\n }\n\n /** Add a custom entity extractor. */\n addExtractor(fn: EntityExtractor): void {\n this.extractors.push(fn);\n }\n\n /** Replace all entity extractors (including the default). */\n setExtractors(fns: EntityExtractor[]): void {\n this.extractors = [...fns];\n }\n}\n"],"names":["parseSSELine","line","json","streamSSE","url","body","options","headers","response","readSSEStream","streamSSEGet","reader","decoder","buffer","done","value","lines","trimmed","event","streamChat","serverUrl","request","signal","token","createSession","user","authHeaders","listSessions","tags","qs","getSessionHistory","sessionId","updateSession","updates","createChatClient","TypedEventEmitter","__publicField","listener","set","data","defaultEntityExtractor","entities","extractFromWidget","extractFromToolParams","widgetType","devices","device","zones","zone","mac","alertId","parameters","WidgetEventBus","extractor","entity","refEvent","fn","fns"],"mappings":"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"}
|