dooers-agents-client 0.8.0 → 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.cjs +255 -39
- package/dist/main.cjs.map +1 -1
- package/dist/main.d.cts +184 -2
- package/dist/main.d.ts +184 -2
- package/dist/main.js +256 -41
- package/dist/main.js.map +1 -1
- package/package.json +1 -1
package/dist/main.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/helpers/api-messages-url-to-ws.ts","../src/types.ts","../src/client.ts","../src/store.ts","../src/provider.tsx","../src/hooks/use-analytics.ts","../src/hooks/use-audio-recorder.ts","../src/hooks/use-connection.ts","../src/hooks/use-feedback.ts","../src/hooks/use-form.ts","../src/hooks/use-form-file-upload.ts","../src/hooks/use-message.ts","../src/hooks/use-settings.ts","../src/hooks/use-settings-file-upload.ts","../src/hooks/use-thread.ts","../src/hooks/use-threads.ts","../src/hooks/use-upload.ts"],"names":["createStore","createContext","useRef","useEffect","useMemo","useContext","useZustandStore","useShallow","useCallback","useState"],"mappings":"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","file":"main.cjs","sourcesContent":["/**\n * Browser `WebSocket` and Node's `WebSocket` require `ws:` / `wss:` URLs.\n * Agent \"API Messages URL\" is often stored as `https://host/ws` — normalize before connecting.\n */\nexport function apiMessagesUrlToWebSocketUrl(url: string): string {\n const t = url.trim()\n if (!t) {\n throw new Error('API Messages URL is empty')\n }\n if (/^wss:\\/\\//i.test(t) || /^ws:\\/\\//i.test(t)) {\n return t\n }\n if (/^https:\\/\\//i.test(t)) {\n return `wss://${t.slice('https://'.length)}`\n }\n if (/^http:\\/\\//i.test(t)) {\n return `ws://${t.slice('http://'.length)}`\n }\n throw new Error('API Messages URL must start with http://, https://, ws://, or wss://')\n}\n","// --- Send content parts (client → server, used in send()) ---\n\nexport interface TextSendPart {\n type: 'text'\n text: string\n}\n\nexport interface AudioSendPart {\n type: 'audio'\n refId: string\n duration?: number\n /** When the upload response included a URL (persisted attachment). */\n url?: string\n}\n\nexport interface ImageSendPart {\n type: 'image'\n refId: string\n /** When the upload response included a fetchable URL (persisted chat attachment). */\n url?: string\n}\n\nexport interface DocumentSendPart {\n type: 'document'\n refId: string\n /** When the upload response included a URL (persisted attachment). */\n url?: string\n}\n\nexport type SendContentPart = TextSendPart | AudioSendPart | ImageSendPart | DocumentSendPart\n\n// --- Display content parts (server → client, rendered in chat) ---\n\nexport interface TextDisplayPart {\n type: 'text'\n text: string\n}\n\nexport interface AudioDisplayPart {\n type: 'audio'\n url?: string\n mimeType?: string\n duration?: number\n filename?: string\n}\n\nexport interface ImageDisplayPart {\n type: 'image'\n url?: string\n mimeType?: string\n width?: number\n height?: number\n alt?: string\n filename?: string\n}\n\nexport interface DocumentDisplayPart {\n type: 'document'\n url?: string\n filename?: string\n mimeType?: string\n sizeBytes?: number\n}\n\nexport type DisplayContentPart =\n | TextDisplayPart\n | AudioDisplayPart\n | ImageDisplayPart\n | DocumentDisplayPart\n\n// Backward-compatible aliases\nexport type ContentPart = SendContentPart\nexport type TextPart = TextSendPart\nexport type ImagePart = ImageSendPart\nexport type DocumentPart = DocumentSendPart\nexport type AudioPart = AudioSendPart\n\n// --- Form element types (content parts for form events) ---\n\nexport interface FormOption {\n value: string\n label: string\n}\n\nexport interface FormTextElement {\n type: 'text_input'\n name: string\n label: string\n order: number\n required: boolean\n disabled: boolean\n placeholder: string | null\n default: string | null\n inputType: 'text' | 'password' | 'email' | 'number'\n}\n\nexport interface FormTextareaElement {\n type: 'textarea_input'\n name: string\n label: string\n order: number\n required: boolean\n disabled: boolean\n placeholder: string | null\n default: string | null\n rows: number | null\n}\n\nexport interface FormSelectElement {\n type: 'select_input'\n name: string\n label: string\n options: FormOption[]\n order: number\n required: boolean\n disabled: boolean\n default: string | null\n placeholder: string | null\n}\n\nexport interface FormRadioElement {\n type: 'radio_input'\n name: string\n label: string\n options: FormOption[]\n order: number\n required: boolean\n disabled: boolean\n default: string | null\n variant: 'native' | 'button'\n}\n\nexport interface FormCheckboxElement {\n type: 'checkbox_input'\n name: string\n label: string\n options: FormOption[]\n order: number\n required: boolean\n disabled: boolean\n default: string[] | null\n variant: 'native' | 'button'\n}\n\nexport interface FormFileElement {\n type: 'file_input'\n name: string\n label: string\n uploadUrl: string\n order: number\n required: boolean\n disabled: boolean\n accept: string | null\n multiple: boolean\n}\n\nexport type FormElement =\n | FormTextElement\n | FormTextareaElement\n | FormSelectElement\n | FormRadioElement\n | FormCheckboxElement\n | FormFileElement\n\nexport type FormSize = 'small' | 'medium' | 'large'\n\nexport interface FormEventData {\n message: string\n elements: FormElement[]\n submitLabel: string\n cancelLabel: string\n size: FormSize\n}\n\nexport interface FormResponseEventData {\n formEventId: string\n cancelled: boolean\n values: Record<string, unknown>\n}\n\nexport type Actor = 'user' | 'assistant' | 'system' | 'tool'\nexport type EventType =\n | 'message'\n | 'run.started'\n | 'run.finished'\n | 'tool.call'\n | 'tool.result'\n | 'tool.transaction'\n | 'form'\n | 'form.response'\nexport type RunStatus = 'running' | 'succeeded' | 'failed' | 'canceled'\nexport type ConnectionStatus = 'idle' | 'connecting' | 'connected' | 'disconnected' | 'error'\n\nexport interface User {\n userId: string\n userName?: string | null\n userEmail?: string | null\n identityIds?: string[]\n systemRole: string\n organizationRole: string\n workspaceRole: string\n}\n\nexport interface Thread {\n id: string\n agentId: string\n organizationId: string\n workspaceId: string\n owner: User\n users: User[]\n title: string | null\n createdAt: string\n updatedAt: string\n lastEventAt: string\n}\n\nexport interface ThreadEvent {\n id: string\n threadId: string\n runId: string | null\n type: EventType\n actor: Actor\n author: string | null\n user?: User\n content?: DisplayContentPart[]\n data?: Record<string, unknown>\n createdAt: string\n clientEventId?: string\n}\n\nexport interface Run {\n id: string\n threadId: string\n agentId: string | null\n status: RunStatus\n startedAt: string\n endedAt: string | null\n error: string | null\n}\n\n// --- Settings ---\n\nexport type SettingsFieldType =\n | 'text'\n | 'number'\n | 'select'\n | 'checkbox'\n | 'textarea'\n | 'password'\n | 'email'\n | 'date'\n | 'image'\n | 'file'\n | 'file_multi'\n\nexport type SettingsFieldVisibility = 'internal' | 'creator' | 'user'\n\nexport interface SettingsSelectOption {\n value: string\n label: string\n}\n\nexport interface SettingsField {\n id: string\n type: SettingsFieldType\n label: string\n required: boolean\n readonly: boolean\n user_editable?: boolean\n visibility: SettingsFieldVisibility\n value: unknown\n placeholder: string | null\n options: SettingsSelectOption[] | null\n min: number | null\n max: number | null\n rows: number | null\n src: string | null\n width: number | null\n height: number | null\n uploadUrl: string | null\n accept: string | null\n}\n\nexport interface SettingsFieldGroup {\n id: string\n label: string\n fields: SettingsField[]\n collapsible: 'open' | 'closed' | null\n visibility: SettingsFieldVisibility\n}\n\nexport type SettingsItem = SettingsField | SettingsFieldGroup\n\nexport function isSettingsFieldGroup(item: SettingsItem): item is SettingsFieldGroup {\n return 'fields' in item && Array.isArray((item as SettingsFieldGroup).fields)\n}\n\n// --- Feedback ---\n\nexport type FeedbackType = 'like' | 'dislike'\nexport type FeedbackTarget = 'event' | 'run' | 'thread'\n\n// --- Analytics ---\n\nexport interface AnalyticsEvent {\n event: string\n timestamp: string\n agentId: string\n threadId: string | null\n userId: string | null\n runId: string | null\n eventId: string | null\n data: Record<string, unknown> | null\n}\n\nexport interface ThreadState {\n thread: Thread | null\n events: ThreadEvent[]\n runs: Run[]\n isLoading: boolean\n isWaiting: boolean\n}\n\n// --- Wire → Public transforms ---\n\nimport type {\n WireAnalyticsEvent,\n WireC2S_ContentPart,\n WireRun,\n WireS2C_ContentPart,\n WireS2C_FormElement,\n WireSettingsField,\n WireSettingsFieldGroup,\n WireSettingsItem,\n WireThread,\n WireThreadEvent,\n WireUser,\n} from './protocol/models'\n\nexport function toUser(w: WireUser): User\nexport function toUser(w: WireUser | undefined): User | undefined\nexport function toUser(w?: WireUser): User | undefined {\n if (!w) return undefined\n return {\n userId: w.user_id,\n userName: w.user_name,\n userEmail: w.user_email,\n identityIds: w.identity_ids,\n systemRole: w.system_role,\n organizationRole: w.organization_role,\n workspaceRole: w.workspace_role,\n }\n}\n\nexport function toThread(w: WireThread): Thread {\n return {\n id: w.id,\n agentId: w.agent_id,\n organizationId: w.organization_id,\n workspaceId: w.workspace_id,\n owner: toUser(w.owner),\n users: w.users.map((u) => toUser(u)),\n title: w.title,\n createdAt: w.created_at,\n updatedAt: w.updated_at,\n lastEventAt: w.last_event_at,\n }\n}\n\nexport function toDisplayContentPart(w: WireS2C_ContentPart): DisplayContentPart {\n switch (w.type) {\n case 'text':\n return { type: 'text', text: w.text }\n case 'audio':\n return {\n type: 'audio',\n url: w.url,\n mimeType: w.mime_type,\n duration: w.duration,\n filename: w.filename,\n }\n case 'image':\n return {\n type: 'image',\n url: w.url,\n mimeType: w.mime_type,\n width: w.width,\n height: w.height,\n alt: w.alt,\n filename: w.filename,\n }\n case 'document':\n return {\n type: 'document',\n url: w.url,\n filename: w.filename,\n mimeType: w.mime_type,\n sizeBytes: w.size_bytes,\n }\n }\n}\n\n// Backward-compatible alias\nexport const toContentPart = toDisplayContentPart\n\nexport function toFormElement(w: WireS2C_FormElement): FormElement {\n const base = {\n name: w.name,\n label: w.label,\n order: w.order ?? 0,\n required: w.required ?? false,\n disabled: w.disabled ?? false,\n }\n switch (w.type) {\n case 'text_input':\n return {\n ...base,\n type: 'text_input',\n placeholder: w.placeholder ?? null,\n default: w.default ?? null,\n inputType: w.input_type ?? 'text',\n }\n case 'textarea_input':\n return {\n ...base,\n type: 'textarea_input',\n placeholder: w.placeholder ?? null,\n default: w.default ?? null,\n rows: w.rows ?? null,\n }\n case 'select_input':\n return {\n ...base,\n type: 'select_input',\n options: w.options,\n default: w.default ?? null,\n placeholder: w.placeholder ?? null,\n }\n case 'radio_input':\n return {\n ...base,\n type: 'radio_input',\n options: w.options,\n default: w.default ?? null,\n variant: w.variant ?? 'native',\n }\n case 'checkbox_input':\n return {\n ...base,\n type: 'checkbox_input',\n options: w.options,\n default: w.default ?? null,\n variant: w.variant ?? 'native',\n }\n case 'file_input':\n return {\n ...base,\n type: 'file_input',\n uploadUrl: w.upload_url,\n accept: w.accept ?? null,\n multiple: w.multiple ?? false,\n }\n }\n}\n\nexport function toFormEventData(data: Record<string, unknown>): FormEventData {\n const elements = (data.elements as WireS2C_FormElement[]) ?? []\n return {\n message: (data.message as string) ?? '',\n elements: elements.map(toFormElement),\n submitLabel: (data.submit_label as string) ?? 'Send',\n cancelLabel: (data.cancel_label as string) ?? 'Cancel',\n size: ((data.size as string) ?? 'medium') as FormSize,\n }\n}\n\nexport function toFormResponseEventData(data: Record<string, unknown>): FormResponseEventData {\n return {\n formEventId: (data.form_event_id as string) ?? '',\n cancelled: (data.cancelled as boolean) ?? false,\n values: (data.values as Record<string, unknown>) ?? {},\n }\n}\n\nexport function toThreadEvent(w: WireThreadEvent): ThreadEvent {\n return {\n id: w.id,\n threadId: w.thread_id,\n runId: w.run_id,\n type: w.type,\n actor: w.actor,\n author: w.author,\n user: toUser(w.user),\n content: w.content?.map(toDisplayContentPart),\n data: w.data,\n createdAt: w.created_at,\n clientEventId: w.client_event_id,\n }\n}\n\nexport function toRun(w: WireRun): Run {\n return {\n id: w.id,\n threadId: w.thread_id,\n agentId: w.agent_id,\n status: w.status,\n startedAt: w.started_at,\n endedAt: w.ended_at,\n error: w.error,\n }\n}\n\n// --- Settings transforms ---\n\nexport function toSettingsField(w: WireSettingsField): SettingsField {\n return {\n id: w.id,\n type: w.type as SettingsFieldType,\n label: w.label,\n required: w.required,\n readonly: w.readonly,\n user_editable: w.user_editable ?? true,\n visibility: w.visibility ?? 'user',\n value: w.value,\n placeholder: w.placeholder,\n options: w.options,\n min: w.min,\n max: w.max,\n rows: w.rows,\n src: w.src,\n width: w.width,\n height: w.height,\n uploadUrl: w.upload_url,\n accept: w.accept,\n }\n}\n\nexport function toSettingsItem(w: WireSettingsItem): SettingsItem {\n if ('fields' in w && Array.isArray((w as WireSettingsFieldGroup).fields)) {\n const g = w as WireSettingsFieldGroup\n return {\n id: g.id,\n label: g.label,\n fields: g.fields.map(toSettingsField),\n collapsible: g.collapsible,\n visibility: g.visibility ?? 'user',\n }\n }\n return toSettingsField(w as WireSettingsField)\n}\n\n// --- Analytics transforms ---\n\nexport function toAnalyticsEvent(w: WireAnalyticsEvent): AnalyticsEvent {\n return {\n event: w.event,\n timestamp: w.timestamp,\n agentId: w.agent_id,\n threadId: w.thread_id,\n userId: w.user_id,\n runId: w.run_id,\n eventId: w.event_id,\n data: w.data,\n }\n}\n\n// --- Public → Wire transforms (for sending content) ---\n\nexport function toWireContentPart(p: SendContentPart): WireC2S_ContentPart {\n switch (p.type) {\n case 'text':\n return { type: 'text', text: p.text }\n case 'audio': {\n const w: { type: 'audio'; ref_id: string; duration?: number; url?: string } = {\n type: 'audio',\n ref_id: p.refId,\n }\n if (p.duration != null) w.duration = p.duration\n if (p.url) w.url = p.url\n return w\n }\n case 'image': {\n const w: { type: 'image'; ref_id: string; url?: string } = {\n type: 'image',\n ref_id: p.refId,\n }\n if (p.url) w.url = p.url\n return w\n }\n case 'document': {\n const w: { type: 'document'; ref_id: string; url?: string } = {\n type: 'document',\n ref_id: p.refId,\n }\n if (p.url) w.url = p.url\n return w\n }\n }\n}\n","import { apiMessagesUrlToWebSocketUrl } from './helpers/api-messages-url-to-ws'\nimport type { ServerToClient } from './protocol/frames'\nimport type { WireC2S_ContentPart, WireSettingsItem } from './protocol/models'\nimport type { AgentActions } from './store'\nimport type { DisplayContentPart, SendContentPart, SettingsItem, ThreadEvent } from './types'\nimport {\n toAnalyticsEvent,\n toRun,\n toSettingsItem,\n toThread,\n toThreadEvent,\n toWireContentPart,\n} from './types'\n\nconst MAX_RECONNECT_ATTEMPTS = 5\nconst RECONNECT_DELAYS = [1000, 2000, 4000, 8000, 16000]\nconst SEND_MESSAGE_TIMEOUT = 30_000\n\nexport interface AgentConnectionConfig {\n organizationId?: string\n workspaceId?: string\n userId?: string\n userName?: string\n userEmail?: string\n identityIds?: string[]\n systemRole?: string\n organizationRole?: string\n workspaceRole?: string\n authToken?: string\n}\n\nexport type OnErrorCallback = (error: { code: string; message: string; frameType: string }) => void\n\nexport interface UploadResult {\n refId: string\n mimeType: string\n filename: string\n sizeBytes: number\n /** Present when the template persisted the file (HTTP(S) or null if not applicable). */\n publicUrl?: string | null\n}\n\nexport interface PublicSettingsSchemaResult {\n version: string\n fields: SettingsItem[]\n}\n\n/**\n * Talks to the agent messages server without an agent session (no `connect` frame).\n * Use for public/bootstrap operations allowed before an {@link AgentClient} is connected.\n */\nexport class AgentServerClient {\n private readonly wsUrl: string\n\n constructor(apiMessagesUrl: string) {\n this.wsUrl = apiMessagesUrlToWebSocketUrl(apiMessagesUrl)\n }\n\n /**\n * Opens a short-lived WebSocket, requests `settings.public_schema`, and returns the public field\n * list. Closes the socket when done.\n */\n fetchPublicSettingsSchema(options?: { timeoutMs?: number }): Promise<PublicSettingsSchemaResult> {\n const timeoutMs = options?.timeoutMs ?? 15_000\n\n return new Promise((resolve, reject) => {\n const ws = new WebSocket(this.wsUrl)\n const frameId = crypto.randomUUID()\n let settled = false\n\n const finish = (fn: () => void) => {\n if (settled) return\n settled = true\n clearTimeout(timer)\n try {\n ws.close()\n } catch {\n /* ignore */\n }\n fn()\n }\n\n const timer = setTimeout(() => {\n finish(() => reject(new Error('AgentServerClient.fetchPublicSettingsSchema: timeout')))\n }, timeoutMs)\n\n ws.onopen = () => {\n ws.send(\n JSON.stringify({\n id: frameId,\n type: 'settings.public_schema',\n payload: {},\n })\n )\n }\n\n ws.onmessage = (ev: MessageEvent) => {\n let msg: {\n id?: string\n type?: string\n payload?: {\n ack_id?: string\n ok?: boolean\n error?: { code?: string; message?: string }\n schema?: { version?: string; fields?: WireSettingsItem[] }\n }\n }\n try {\n msg = JSON.parse(ev.data as string)\n } catch {\n return\n }\n\n if (msg.type === 'ack' && msg.payload?.ack_id === frameId) {\n if (msg.payload?.ok === false) {\n finish(() =>\n reject(\n new Error(\n msg.payload?.error?.message ??\n 'AgentServerClient.fetchPublicSettingsSchema: request rejected'\n )\n )\n )\n }\n return\n }\n\n if (msg.type === 'settings.public_schema.result' && msg.id === frameId) {\n const raw = msg.payload?.schema as\n | { version?: string; fields?: WireSettingsItem[] }\n | undefined\n const fieldsWire = raw?.fields ?? []\n const fields = fieldsWire.map((w) => toSettingsItem(w))\n finish(() =>\n resolve({\n version: typeof raw?.version === 'string' ? raw.version : '1.0',\n fields,\n })\n )\n }\n }\n\n ws.onerror = () => {\n finish(() =>\n reject(new Error('AgentServerClient.fetchPublicSettingsSchema: WebSocket error'))\n )\n }\n\n ws.onclose = (ev) => {\n if (settled) return\n finish(() =>\n reject(\n new Error(\n `AgentServerClient.fetchPublicSettingsSchema: connection closed (${ev.code})${ev.reason ? ` ${ev.reason}` : ''}`\n )\n )\n )\n }\n })\n }\n}\n\nexport class AgentClient {\n private ws: WebSocket | null = null\n private callbacks: AgentActions\n private onError: OnErrorCallback | null = null\n\n private url = ''\n private httpBaseUrl = ''\n private agentId = ''\n private uploadUrl: string | undefined\n private config: AgentConnectionConfig = {\n organizationId: '',\n workspaceId: '',\n userId: '',\n }\n\n private connectFrameId = ''\n private isIntentionallyClosed = false\n private reconnectAttempts = 0\n private reconnectTimer: ReturnType<typeof setTimeout> | null = null\n\n // Refcounted subscriptions\n private subscriptionRefs = new Map<string, number>()\n\n // Track optimistic events for reconciliation\n private pendingOptimistic = new Map<string, { threadId: string; clientEventId: string }>()\n\n // Pending message promises — resolved when event.append arrives with matching clientEventId\n private pendingMessages = new Map<\n string,\n { resolve: (value: { threadId: string }) => void; timer: ReturnType<typeof setTimeout> }\n >()\n\n // Track last event ID per thread for gap recovery on reconnect\n private lastEventIds = new Map<string, string>()\n\n // Pagination\n private lastThreadListCursor: string | null = null\n private isLoadingMore = false\n\n // Event pagination cursors per thread\n private eventPaginationCursors = new Map<string, string | null>()\n\n constructor(callbacks: AgentActions) {\n this.callbacks = callbacks\n }\n\n setOnError(cb: OnErrorCallback | null) {\n this.onError = cb\n }\n\n setUploadUrl(url: string | undefined) {\n this.uploadUrl = url\n }\n\n async upload(file: File | Blob): Promise<UploadResult> {\n if (!this.uploadUrl) {\n throw new Error('uploadUrl not configured')\n }\n\n const formData = new FormData()\n formData.append('file', file)\n if (this.agentId) {\n formData.append('agent_id', this.agentId)\n }\n\n const headers: Record<string, string> = {}\n if (this.config.authToken) {\n headers.Authorization = `Bearer ${this.config.authToken}`\n }\n\n const response = await fetch(this.uploadUrl, {\n method: 'POST',\n body: formData,\n headers,\n })\n\n if (!response.ok) {\n throw new Error(`Upload failed: ${response.status} ${response.statusText}`)\n }\n\n const result = await response.json()\n return {\n refId: result.ref_id,\n mimeType: result.mime_type,\n filename: result.filename,\n sizeBytes: result.size_bytes ?? result.size ?? 0,\n publicUrl: result.public_url ?? undefined,\n }\n }\n\n connect(url: string, agentId: string, config?: AgentConnectionConfig) {\n this.url = apiMessagesUrlToWebSocketUrl(url)\n this.agentId = agentId\n this.config = config ?? { organizationId: '', workspaceId: '', userId: '' }\n this.isIntentionallyClosed = false\n\n // Derive HTTP base URL from WebSocket URL for resolving relative content URLs\n try {\n const parsed = new URL(this.url)\n parsed.protocol = parsed.protocol === 'wss:' ? 'https:' : 'http:'\n parsed.pathname = ''\n parsed.search = ''\n parsed.hash = ''\n this.httpBaseUrl = parsed.toString().replace(/\\/$/, '')\n } catch {\n this.httpBaseUrl = ''\n }\n\n this.callbacks.setConnectionStatus('connecting')\n this.createConnection()\n }\n\n disconnect() {\n this.isIntentionallyClosed = true\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer)\n this.reconnectTimer = null\n }\n // Clean up pending message promises\n for (const [, pending] of this.pendingMessages) {\n clearTimeout(pending.timer)\n }\n this.pendingMessages.clear()\n if (this.ws) {\n this.ws.onopen = null\n this.ws.onmessage = null\n this.ws.onclose = null\n this.ws.onerror = null\n this.ws.close()\n this.ws = null\n }\n this.callbacks.setConnectionStatus('disconnected')\n }\n\n retry() {\n this.reconnectAttempts = 0\n this.isIntentionallyClosed = false\n this.callbacks.setConnectionStatus('connecting')\n this.createConnection()\n }\n\n // --- Thread operations ---\n\n requestThreadList(cursor?: string | null, limit?: number) {\n this.send('thread.list', { cursor, limit })\n }\n\n subscribe(threadId: string) {\n const refs = this.subscriptionRefs.get(threadId) ?? 0\n this.subscriptionRefs.set(threadId, refs + 1)\n if (refs === 0) {\n const afterEventId = this.lastEventIds.get(threadId) ?? null\n this.send('thread.subscribe', { thread_id: threadId, after_event_id: afterEventId })\n this.callbacks.addSubscription(threadId)\n }\n }\n\n unsubscribe(threadId: string) {\n const refs = this.subscriptionRefs.get(threadId) ?? 0\n if (refs <= 1) {\n this.subscriptionRefs.delete(threadId)\n this.lastEventIds.delete(threadId)\n this.eventPaginationCursors.delete(threadId)\n this.send('thread.unsubscribe', { thread_id: threadId })\n this.callbacks.removeSubscription(threadId)\n } else {\n this.subscriptionRefs.set(threadId, refs - 1)\n }\n }\n\n deleteThread(threadId: string) {\n this.send('thread.delete', { thread_id: threadId })\n }\n\n loadMoreThreads(limit?: number) {\n const cursor = this.lastThreadListCursor\n if (!cursor || this.isLoadingMore) return\n this.isLoadingMore = true\n this.send('thread.list', { cursor, limit })\n }\n\n loadOlderEvents(threadId: string, limit?: number) {\n const cursor = this.eventPaginationCursors.get(threadId)\n this.send('event.list', {\n thread_id: threadId,\n before_event_id: cursor ?? null,\n limit,\n })\n }\n\n // --- Settings ---\n\n subscribeSettings(options?: { audience?: 'creator' | 'user'; agentOwnerUserId?: string | null }) {\n this.send('settings.subscribe', {\n agent_id: this.agentId,\n audience: options?.audience ?? 'user',\n agent_owner_user_id: options?.agentOwnerUserId ?? null,\n })\n }\n\n unsubscribeSettings() {\n this.send('settings.unsubscribe', { agent_id: this.agentId })\n }\n\n patchSetting(fieldId: string, value: unknown) {\n this.send('settings.patch', { field_id: fieldId, value })\n }\n\n // --- Feedback ---\n\n sendFeedback(\n targetType: string,\n targetId: string,\n feedback: 'like' | 'dislike',\n reason?: string,\n classification?: string\n ) {\n this.send('feedback', {\n target_type: targetType,\n target_id: targetId,\n feedback,\n reason,\n classification,\n })\n }\n\n // --- Analytics ---\n\n subscribeAnalytics() {\n this.send('analytics.subscribe', { agent_id: this.agentId })\n }\n\n unsubscribeAnalytics() {\n this.send('analytics.unsubscribe', { agent_id: this.agentId })\n }\n\n // --- Messaging ---\n\n sendMessage(params: {\n text?: string\n threadId?: string\n content?: SendContentPart[]\n }): Promise<{ threadId: string }> {\n const clientEventId = crypto.randomUUID()\n const content: WireC2S_ContentPart[] = params.content\n ? params.content.map(toWireContentPart)\n : [{ type: 'text', text: params.text ?? '' }]\n\n // Build optimistic display content from send parts\n const displayContent: DisplayContentPart[] = params.content\n ? params.content.map((p): DisplayContentPart => {\n switch (p.type) {\n case 'text':\n return { type: 'text', text: p.text }\n case 'audio':\n return { type: 'audio', duration: p.duration }\n case 'image':\n return { type: 'image' }\n case 'document':\n return { type: 'document' }\n default:\n return { type: 'text', text: '' }\n }\n })\n : [{ type: 'text', text: params.text ?? '' }]\n\n // Build optimistic event\n const optimisticEvent: ThreadEvent = {\n id: `optimistic-${clientEventId}`,\n threadId: params.threadId ?? '',\n runId: null,\n type: 'message',\n actor: 'user',\n author: null,\n user: {\n userId: this.config.userId ?? '',\n userName: this.config.userName,\n userEmail: this.config.userEmail,\n identityIds: this.config.identityIds,\n systemRole: this.config.systemRole ?? 'user',\n organizationRole: this.config.organizationRole ?? 'member',\n workspaceRole: this.config.workspaceRole ?? 'member',\n },\n content: displayContent,\n createdAt: new Date().toISOString(),\n }\n\n if (params.threadId) {\n this.callbacks.addOptimistic(params.threadId, optimisticEvent, clientEventId)\n }\n\n this.pendingOptimistic.set(clientEventId, {\n threadId: params.threadId ?? '',\n clientEventId,\n })\n\n const promise = this.createPendingPromise(clientEventId)\n\n this.send('event.create', {\n thread_id: params.threadId,\n client_event_id: clientEventId,\n event: {\n type: 'message' as const,\n actor: 'user' as const,\n content,\n },\n })\n\n return promise\n }\n\n sendFormResponse(params: {\n threadId: string\n formEventId: string\n cancelled: boolean\n values: Record<string, unknown>\n }): Promise<{ threadId: string }> {\n const clientEventId = crypto.randomUUID()\n const promise = this.createPendingPromise(clientEventId)\n\n this.send('event.create', {\n thread_id: params.threadId,\n client_event_id: clientEventId,\n event: {\n type: 'form.response' as const,\n actor: 'user' as const,\n content: [],\n data: {\n form_event_id: params.formEventId,\n cancelled: params.cancelled,\n values: params.values,\n },\n },\n })\n\n return promise\n }\n\n // --- Private ---\n\n private createPendingPromise(clientEventId: string): Promise<{ threadId: string }> {\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n this.pendingMessages.delete(clientEventId)\n reject(new Error('Request timed out waiting for server response'))\n }, SEND_MESSAGE_TIMEOUT)\n\n this.pendingMessages.set(clientEventId, { resolve, timer })\n })\n }\n\n private createConnection() {\n if (this.ws) {\n this.ws.onopen = null\n this.ws.onmessage = null\n this.ws.onclose = null\n this.ws.onerror = null\n this.ws.close()\n }\n\n this.ws = new WebSocket(this.url)\n\n this.ws.onopen = () => {\n this.authenticate()\n }\n\n this.ws.onmessage = (e: MessageEvent) => {\n try {\n const frame = JSON.parse(e.data as string) as ServerToClient\n this.route(frame)\n } catch {\n // Ignore malformed frames\n }\n }\n\n this.ws.onclose = () => {\n if (!this.isIntentionallyClosed) {\n this.scheduleReconnect()\n }\n }\n\n this.ws.onerror = () => {\n // onclose will fire after onerror\n }\n }\n\n private authenticate() {\n this.connectFrameId = crypto.randomUUID()\n this.sendRaw({\n id: this.connectFrameId,\n type: 'connect',\n payload: {\n agent_id: this.agentId,\n organization_id: this.config.organizationId ?? '',\n workspace_id: this.config.workspaceId ?? '',\n user: {\n user_id: this.config.userId ?? '',\n user_name: this.config.userName ?? null,\n user_email: this.config.userEmail ?? null,\n identity_ids: this.config.identityIds ?? [],\n system_role: this.config.systemRole ?? 'user',\n organization_role: this.config.organizationRole ?? 'member',\n workspace_role: this.config.workspaceRole ?? 'member',\n },\n auth_token: this.config.authToken,\n client: { name: 'dooers-agents-client', version: '0.1.0' },\n },\n })\n }\n\n private route(frame: ServerToClient) {\n switch (frame.type) {\n case 'ack': {\n if (frame.payload.ack_id === this.connectFrameId) {\n if (frame.payload.ok) {\n this.callbacks.setConnectionStatus('connected')\n this.callbacks.resetReconnect()\n this.requestThreadList()\n // Re-subscribe to previously tracked threads\n for (const threadId of this.subscriptionRefs.keys()) {\n const afterEventId = this.lastEventIds.get(threadId) ?? null\n this.send('thread.subscribe', {\n thread_id: threadId,\n after_event_id: afterEventId,\n })\n }\n } else {\n this.callbacks.setConnectionStatus('error', frame.payload.error?.message)\n }\n } else if (!frame.payload.ok && frame.payload.error) {\n this.onError?.({\n code: frame.payload.error.code,\n message: frame.payload.error.message,\n frameType: 'ack',\n })\n }\n break\n }\n\n case 'thread.list.result': {\n const threads = frame.payload.threads.map(toThread)\n const cursor = frame.payload.cursor ?? null\n const totalCount = frame.payload.total_count\n this.lastThreadListCursor = cursor\n if (this.isLoadingMore) {\n this.callbacks.onThreadListAppend(threads, cursor, totalCount)\n } else {\n this.callbacks.onThreadList(threads, cursor, totalCount)\n }\n this.isLoadingMore = false\n break\n }\n\n case 'thread.snapshot': {\n const thread = toThread(frame.payload.thread)\n const events = this.resolveEventUrls(frame.payload.events.map(toThreadEvent))\n const runs = (frame.payload.runs ?? []).map(toRun)\n // Track last event for gap recovery\n const lastEvent = events[events.length - 1]\n if (lastEvent) {\n this.lastEventIds.set(thread.id, lastEvent.id)\n }\n // Set initial event pagination cursor to oldest event\n const oldestEvent = events[0]\n if (oldestEvent) {\n this.eventPaginationCursors.set(thread.id, oldestEvent.id)\n }\n this.callbacks.onThreadSnapshot(thread, events, runs)\n break\n }\n\n case 'event.append': {\n const events = this.resolveEventUrls(frame.payload.events.map(toThreadEvent))\n // Collect reconciled client event IDs and resolve pending message promises\n const resolvedClientEventIds: string[] = []\n for (const event of events) {\n if (event.clientEventId && this.pendingOptimistic.has(event.clientEventId)) {\n resolvedClientEventIds.push(event.clientEventId)\n this.pendingOptimistic.delete(event.clientEventId)\n }\n if (event.clientEventId && this.pendingMessages.has(event.clientEventId)) {\n const pendingMessage = this.pendingMessages.get(event.clientEventId)\n if (pendingMessage) {\n clearTimeout(pendingMessage.timer)\n pendingMessage.resolve({ threadId: frame.payload.thread_id })\n this.pendingMessages.delete(event.clientEventId)\n }\n }\n }\n // Track last event for gap recovery on reconnect.\n // Only for subscribed threads — new threads receive event.append\n // before subscription exists, and lastEventIds feeds after_event_id\n // in subscribe(), which controls what the server includes in snapshots.\n const lastEvent = events[events.length - 1]\n if (lastEvent && this.subscriptionRefs.has(frame.payload.thread_id)) {\n this.lastEventIds.set(frame.payload.thread_id, lastEvent.id)\n }\n // Atomically append confirmed events and remove reconciled optimistic events\n if (resolvedClientEventIds.length > 0) {\n this.callbacks.reconcileEvents(frame.payload.thread_id, events, resolvedClientEventIds)\n } else {\n this.callbacks.onEventAppend(frame.payload.thread_id, events)\n }\n break\n }\n\n case 'event.list.result': {\n const events = this.resolveEventUrls(frame.payload.events.map(toThreadEvent))\n this.eventPaginationCursors.set(frame.payload.thread_id, frame.payload.cursor)\n this.callbacks.onEventListResult(\n frame.payload.thread_id,\n events,\n frame.payload.cursor,\n frame.payload.has_more\n )\n break\n }\n\n case 'thread.upsert':\n this.callbacks.onThreadUpsert(toThread(frame.payload.thread))\n break\n\n case 'thread.deleted':\n this.callbacks.onThreadDeleted(frame.payload.thread_id)\n this.lastEventIds.delete(frame.payload.thread_id)\n break\n\n case 'run.upsert':\n this.callbacks.onRunUpsert(toRun(frame.payload.run))\n break\n\n case 'settings.snapshot': {\n const fields = frame.payload.fields.map(toSettingsItem)\n this.callbacks.onSettingsSnapshot(fields, frame.payload.updated_at)\n break\n }\n\n case 'settings.patch':\n this.callbacks.onSettingsPatch(\n frame.payload.field_id,\n frame.payload.value,\n frame.payload.updated_at\n )\n break\n\n case 'settings.public_schema.result':\n break\n\n case 'feedback.ack':\n if (frame.payload.ok) {\n this.callbacks.onFeedbackAck(\n frame.payload.target_id,\n frame.payload.feedback as 'like' | 'dislike'\n )\n }\n break\n\n case 'analytics.event':\n this.callbacks.onAnalyticsEvent(toAnalyticsEvent(frame.payload))\n break\n }\n }\n\n private scheduleReconnect() {\n if (this.reconnectAttempts >= MAX_RECONNECT_ATTEMPTS) {\n this.callbacks.setReconnectFailed()\n this.callbacks.setConnectionStatus('error', 'Connection lost after maximum retries')\n return\n }\n this.callbacks.setConnectionStatus('disconnected')\n const delay = RECONNECT_DELAYS[this.reconnectAttempts] ?? 16000\n this.reconnectAttempts++\n this.reconnectTimer = setTimeout(() => {\n this.callbacks.setConnectionStatus('connecting')\n this.createConnection()\n }, delay)\n }\n\n private send(type: string, payload: unknown) {\n this.sendRaw({ id: crypto.randomUUID(), type, payload })\n }\n\n private sendRaw(frame: unknown) {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) return\n this.ws.send(JSON.stringify(frame))\n }\n\n /** Resolve relative URLs in event content parts against the agent's HTTP base. */\n private resolveEventUrls(events: ThreadEvent[]): ThreadEvent[] {\n if (!this.httpBaseUrl) return events\n const base = this.httpBaseUrl\n return events.map((event) => {\n if (!event.content?.some((p) => 'url' in p && p.url?.startsWith('/'))) return event\n return {\n ...event,\n content: event.content.map((part) =>\n 'url' in part && part.url?.startsWith('/') ? { ...part, url: `${base}${part.url}` } : part\n ),\n }\n })\n }\n}\n","import { createStore } from 'zustand/vanilla'\nimport type { AnalyticsEvent, Run, SettingsItem, Thread, ThreadEvent } from './types'\nimport { isSettingsFieldGroup } from './types'\n\ntype FormState = {\n values: Record<string, unknown>\n submitting: boolean\n submitted: boolean\n cancelled: boolean\n}\n\n/** Extract form states from form.response events to restore submitted/cancelled state. */\nfunction extractFormStates(\n events: ThreadEvent[],\n existing: Record<string, FormState>\n): Record<string, FormState> {\n let result = existing\n for (const e of events) {\n if (e.type === 'form.response' && e.data) {\n const formEventId = e.data.form_event_id as string\n if (formEventId && !result[formEventId]) {\n const cancelled = (e.data.cancelled as boolean) ?? false\n const values = (e.data.values as Record<string, unknown>) ?? {}\n result = {\n ...result,\n [formEventId]: { values, submitting: false, submitted: !cancelled, cancelled },\n }\n }\n }\n }\n return result\n}\n\nexport interface AgentActions {\n setConnectionStatus: (status: AgentState['connection']['status'], error?: string) => void\n setReconnectFailed: () => void\n resetReconnect: () => void\n onThreadList: (threads: Thread[], cursor?: string | null, totalCount?: number) => void\n onThreadListAppend: (threads: Thread[], cursor?: string | null, totalCount?: number) => void\n onThreadUpsert: (thread: Thread) => void\n onThreadDeleted: (threadId: string) => void\n onThreadSnapshot: (thread: Thread, events: ThreadEvent[], runs: Run[]) => void\n onEventAppend: (threadId: string, events: ThreadEvent[]) => void\n reconcileEvents: (\n threadId: string,\n events: ThreadEvent[],\n resolvedClientEventIds: string[]\n ) => void\n onEventListResult: (\n threadId: string,\n events: ThreadEvent[],\n cursor: string | null,\n hasMore: boolean\n ) => void\n onRunUpsert: (run: Run) => void\n addOptimistic: (threadId: string, event: ThreadEvent, clientEventId: string) => void\n removeOptimistic: (threadId: string, clientEventId: string) => void\n addSubscription: (threadId: string) => void\n removeSubscription: (threadId: string) => void\n onSettingsSnapshot: (fields: SettingsItem[], updatedAt: string) => void\n onSettingsPatch: (fieldId: string, value: unknown, updatedAt: string) => void\n onFeedbackAck: (targetId: string, feedback: 'like' | 'dislike') => void\n onAnalyticsEvent: (event: AnalyticsEvent) => void\n resetAnalytics: () => void\n initFormState: (formEventId: string, defaults: Record<string, unknown>) => void\n setFormValue: (formEventId: string, fieldName: string, value: unknown) => void\n setFormSubmitting: (formEventId: string, submitting: boolean) => void\n setFormSubmitted: (formEventId: string) => void\n setFormCancelled: (formEventId: string) => void\n}\n\nexport interface AgentState {\n connection: {\n status: 'idle' | 'connecting' | 'connected' | 'disconnected' | 'error'\n error: string | null\n reconnectAttempts: number\n reconnectFailed: boolean\n }\n threads: Record<string, Thread>\n threadOrder: string[]\n threadListCursor: string | null\n threadListHasMore: boolean\n threadListTotalCount: number\n events: Record<string, ThreadEvent[]>\n eventPagination: Record<string, { cursor: string | null; hasMore: boolean }>\n optimistic: Record<string, ThreadEvent[]>\n optimisticKeys: Record<string, string[]>\n runs: Record<string, Run[]>\n settings: {\n fields: SettingsItem[]\n updatedAt: string | null\n isLoading: boolean\n }\n feedback: Record<string, 'like' | 'dislike'>\n analytics: {\n events: AnalyticsEvent[]\n counters: {\n totalRequests: number\n feedbackLikes: number\n feedbackDislikes: number\n }\n }\n formStates: Record<string, FormState>\n subscriptions: Set<string>\n loadingThreads: Set<string>\n actions: AgentActions\n}\n\nexport type AgentStore = ReturnType<typeof createAgentStore>\n\nexport function createAgentStore() {\n return createStore<AgentState>()((set) => ({\n connection: {\n status: 'idle',\n error: null,\n reconnectAttempts: 0,\n reconnectFailed: false,\n },\n threads: {},\n threadOrder: [],\n threadListCursor: null,\n threadListHasMore: false,\n threadListTotalCount: 0,\n events: {},\n eventPagination: {},\n optimistic: {},\n optimisticKeys: {},\n runs: {},\n settings: {\n fields: [],\n updatedAt: null,\n isLoading: true,\n },\n feedback: {},\n formStates: {},\n analytics: {\n events: [],\n counters: { totalRequests: 0, feedbackLikes: 0, feedbackDislikes: 0 },\n },\n subscriptions: new Set(),\n loadingThreads: new Set(),\n\n actions: {\n setConnectionStatus: (status, error) =>\n set((s) => ({\n connection: { ...s.connection, status, error: error ?? null },\n })),\n\n setReconnectFailed: () =>\n set((s) => ({\n connection: { ...s.connection, reconnectFailed: true },\n })),\n\n resetReconnect: () =>\n set((s) => ({\n connection: { ...s.connection, reconnectAttempts: 0, reconnectFailed: false },\n })),\n\n onThreadList: (threads, cursor, totalCount) =>\n set(() => {\n const map: Record<string, Thread> = {}\n const order: string[] = []\n for (const t of threads) {\n map[t.id] = t\n order.push(t.id)\n }\n return {\n threads: map,\n threadOrder: order,\n threadListCursor: cursor ?? null,\n threadListHasMore: cursor != null,\n threadListTotalCount: totalCount ?? 0,\n }\n }),\n\n onThreadListAppend: (threads, cursor) =>\n set((s) => {\n const map = { ...s.threads }\n const order = [...s.threadOrder]\n for (const t of threads) {\n if (!map[t.id]) {\n order.push(t.id)\n }\n map[t.id] = t\n }\n return {\n threads: map,\n threadOrder: order,\n threadListCursor: cursor ?? null,\n threadListHasMore: cursor != null,\n }\n }),\n\n onThreadUpsert: (thread) =>\n set((s) => {\n const threads = { ...s.threads, [thread.id]: thread }\n const threadOrder = s.threadOrder.includes(thread.id)\n ? s.threadOrder\n : [thread.id, ...s.threadOrder]\n return { threads, threadOrder }\n }),\n\n onThreadDeleted: (threadId) =>\n set((s) => {\n const { [threadId]: _, ...threads } = s.threads\n const { [threadId]: _e, ...events } = s.events\n const { [threadId]: _r, ...runs } = s.runs\n const { [threadId]: _o, ...optimistic } = s.optimistic\n const { [threadId]: _k, ...optimisticKeys } = s.optimisticKeys\n const { [threadId]: _p, ...eventPagination } = s.eventPagination\n const threadOrder = s.threadOrder.filter((id) => id !== threadId)\n const subscriptions = new Set(s.subscriptions)\n subscriptions.delete(threadId)\n const loadingThreads = new Set(s.loadingThreads)\n loadingThreads.delete(threadId)\n // Clean up form states for events belonging to this thread\n const deletedEvents = s.events[threadId] ?? []\n const deletedEventIds = new Set(deletedEvents.map((e) => e.id))\n const formStates = { ...s.formStates }\n for (const key of Object.keys(formStates)) {\n if (deletedEventIds.has(key)) {\n delete formStates[key]\n }\n }\n return {\n threads,\n threadOrder,\n events,\n runs,\n optimistic,\n optimisticKeys,\n eventPagination,\n subscriptions,\n loadingThreads,\n formStates,\n }\n }),\n\n onThreadSnapshot: (thread, snapshotEvents, runs) =>\n set((s) => {\n const threads = { ...s.threads, [thread.id]: thread }\n const threadOrder = s.threadOrder.includes(thread.id)\n ? s.threadOrder\n : [thread.id, ...s.threadOrder]\n const loadingThreads = new Set(s.loadingThreads)\n loadingThreads.delete(thread.id)\n\n // Events may already exist from event.append arriving before the\n // snapshot (race between the two data paths). Existing array is\n // already in chronological order. Append only snapshot events we\n // don't have yet — never reorder what's already in place.\n const existing = s.events[thread.id] ?? []\n let mergedEvents: ThreadEvent[]\n if (existing.length === 0) {\n mergedEvents = snapshotEvents\n } else {\n const existingIds = new Set(existing.map((e) => e.id))\n const newFromSnapshot = snapshotEvents.filter((e) => !existingIds.has(e.id))\n mergedEvents = newFromSnapshot.length > 0 ? [...existing, ...newFromSnapshot] : existing\n }\n\n // Snapshot is authoritative — clear optimistic state for this thread.\n const optimistic = { ...s.optimistic }\n const optimisticKeys = { ...s.optimisticKeys }\n delete optimistic[thread.id]\n delete optimisticKeys[thread.id]\n\n return {\n threads,\n threadOrder,\n events: { ...s.events, [thread.id]: mergedEvents },\n runs: { ...s.runs, [thread.id]: runs },\n optimistic,\n optimisticKeys,\n loadingThreads,\n formStates: extractFormStates(mergedEvents, s.formStates),\n }\n }),\n\n onEventAppend: (threadId, newEvents) =>\n set((s) => {\n const existing = s.events[threadId] ?? []\n const existingIds = new Set(existing.map((e) => e.id))\n // Separate new events from updates to existing events\n const updates = new Map<string, ThreadEvent>()\n const appends: ThreadEvent[] = []\n for (const e of newEvents) {\n if (existingIds.has(e.id)) {\n updates.set(e.id, e)\n } else {\n appends.push(e)\n }\n }\n // Apply in-place updates then append new events\n const merged = updates.size > 0 ? existing.map((e) => updates.get(e.id) ?? e) : existing\n return {\n events: { ...s.events, [threadId]: [...merged, ...appends] },\n formStates: extractFormStates(appends, s.formStates),\n }\n }),\n\n reconcileEvents: (threadId, newEvents, resolvedClientEventIds) =>\n set((s) => {\n // Append confirmed events\n const existing = s.events[threadId] ?? []\n const existingIds = new Set(existing.map((e) => e.id))\n const unique = newEvents.filter((e) => !existingIds.has(e.id))\n\n // Remove reconciled optimistic events\n let optEvents = s.optimistic[threadId] ?? []\n let optKeys = s.optimisticKeys[threadId] ?? []\n for (const clientEventId of resolvedClientEventIds) {\n const idx = optKeys.indexOf(clientEventId)\n if (idx >= 0) {\n optEvents = [...optEvents]\n optEvents.splice(idx, 1)\n optKeys = [...optKeys]\n optKeys.splice(idx, 1)\n }\n }\n\n return {\n events: { ...s.events, [threadId]: [...existing, ...unique] },\n optimistic: { ...s.optimistic, [threadId]: optEvents },\n optimisticKeys: { ...s.optimisticKeys, [threadId]: optKeys },\n }\n }),\n\n onEventListResult: (threadId, olderEvents, cursor, hasMore) =>\n set((s) => {\n const existing = s.events[threadId] ?? []\n const existingIds = new Set(existing.map((e) => e.id))\n const unique = olderEvents.filter((e) => !existingIds.has(e.id))\n return {\n events: { ...s.events, [threadId]: [...unique, ...existing] },\n eventPagination: {\n ...s.eventPagination,\n [threadId]: { cursor, hasMore },\n },\n }\n }),\n\n onRunUpsert: (run) =>\n set((s) => {\n const existing = s.runs[run.threadId] ?? []\n const idx = existing.findIndex((r) => r.id === run.id)\n const updated =\n idx >= 0 ? existing.map((r) => (r.id === run.id ? run : r)) : [...existing, run]\n return { runs: { ...s.runs, [run.threadId]: updated } }\n }),\n\n addOptimistic: (threadId, event, clientEventId) =>\n set((s) => ({\n optimistic: {\n ...s.optimistic,\n [threadId]: [...(s.optimistic[threadId] ?? []), event],\n },\n optimisticKeys: {\n ...s.optimisticKeys,\n [threadId]: [...(s.optimisticKeys[threadId] ?? []), clientEventId],\n },\n })),\n\n removeOptimistic: (threadId, clientEventId) =>\n set((s) => {\n const keys = s.optimisticKeys[threadId] ?? []\n const idx = keys.indexOf(clientEventId)\n if (idx < 0) return s\n const newKeys = [...keys]\n newKeys.splice(idx, 1)\n const newEvents = [...(s.optimistic[threadId] ?? [])]\n newEvents.splice(idx, 1)\n return {\n optimistic: { ...s.optimistic, [threadId]: newEvents },\n optimisticKeys: { ...s.optimisticKeys, [threadId]: newKeys },\n }\n }),\n\n addSubscription: (threadId) =>\n set((s) => {\n const subscriptions = new Set(s.subscriptions)\n subscriptions.add(threadId)\n const loadingThreads = new Set(s.loadingThreads)\n loadingThreads.add(threadId)\n return { subscriptions, loadingThreads }\n }),\n\n removeSubscription: (threadId) =>\n set((s) => {\n const subscriptions = new Set(s.subscriptions)\n subscriptions.delete(threadId)\n const loadingThreads = new Set(s.loadingThreads)\n loadingThreads.delete(threadId)\n return { subscriptions, loadingThreads }\n }),\n\n onSettingsSnapshot: (fields, updatedAt) =>\n set(() => ({\n settings: { fields, updatedAt, isLoading: false },\n })),\n\n onSettingsPatch: (fieldId, value, updatedAt) =>\n set((s) => ({\n settings: {\n ...s.settings,\n updatedAt,\n fields: s.settings.fields.map((item) => {\n if (isSettingsFieldGroup(item)) {\n const hasField = item.fields.some((f) => f.id === fieldId)\n if (hasField) {\n return {\n ...item,\n fields: item.fields.map((f) => (f.id === fieldId ? { ...f, value } : f)),\n }\n }\n return item\n }\n return item.id === fieldId ? { ...item, value } : item\n }),\n },\n })),\n\n onFeedbackAck: (targetId, feedback) =>\n set((s) => ({\n feedback: { ...s.feedback, [targetId]: feedback },\n })),\n\n onAnalyticsEvent: (event) =>\n set((s) => {\n const events = [...s.analytics.events, event]\n const trimmed = events.length > 50 ? events.slice(-50) : events\n const counters = { ...s.analytics.counters }\n if (event.event === 'feedback.like') {\n counters.feedbackLikes += 1\n } else if (event.event === 'feedback.dislike') {\n counters.feedbackDislikes += 1\n } else {\n counters.totalRequests += 1\n }\n return { analytics: { events: trimmed, counters } }\n }),\n\n resetAnalytics: () =>\n set(() => ({\n analytics: {\n events: [],\n counters: { totalRequests: 0, feedbackLikes: 0, feedbackDislikes: 0 },\n },\n })),\n initFormState: (formEventId, defaults) =>\n set((s) => {\n if (s.formStates[formEventId]) return s\n return {\n formStates: {\n ...s.formStates,\n [formEventId]: {\n values: defaults,\n submitting: false,\n submitted: false,\n cancelled: false,\n },\n },\n }\n }),\n setFormSubmitting: (formEventId, submitting) =>\n set((s) => {\n const existing = s.formStates[formEventId]\n if (!existing) return s\n return {\n formStates: {\n ...s.formStates,\n [formEventId]: { ...existing, submitting },\n },\n }\n }),\n setFormValue: (formEventId, fieldName, value) =>\n set((s) => {\n const existing = s.formStates[formEventId]\n if (!existing || existing.submitted || existing.cancelled) return s\n return {\n formStates: {\n ...s.formStates,\n [formEventId]: {\n ...existing,\n values: { ...existing.values, [fieldName]: value },\n },\n },\n }\n }),\n setFormSubmitted: (formEventId) =>\n set((s) => {\n const existing = s.formStates[formEventId]\n if (!existing) return s\n return {\n formStates: {\n ...s.formStates,\n [formEventId]: { ...existing, submitting: false, submitted: true },\n },\n }\n }),\n setFormCancelled: (formEventId) =>\n set((s) => {\n const existing = s.formStates[formEventId]\n if (!existing) return s\n return {\n formStates: {\n ...s.formStates,\n [formEventId]: { ...existing, submitting: false, cancelled: true },\n },\n }\n }),\n },\n }))\n}\n","import { createContext, type ReactNode, useContext, useEffect, useMemo, useRef } from 'react'\nimport { useStore as useZustandStore } from 'zustand'\nimport { useShallow } from 'zustand/shallow'\nimport { AgentClient, type OnErrorCallback } from './client'\nimport { type AgentState, type AgentStore, createAgentStore } from './store'\n\ninterface AgentContextValue {\n store: AgentStore\n client: AgentClient\n}\n\nconst AgentContext = createContext<AgentContextValue | null>(null)\n\nexport interface AgentProviderProps {\n url?: string\n agentId?: string\n organizationId?: string\n workspaceId?: string\n userId?: string\n userName?: string\n userEmail?: string\n identityIds?: string[]\n systemRole?: string\n organizationRole?: string\n workspaceRole?: string\n authToken?: string\n uploadUrl?: string\n onError?: OnErrorCallback\n children: ReactNode\n}\n\nexport function AgentProvider({\n url,\n agentId,\n organizationId,\n workspaceId,\n userId,\n userName,\n userEmail,\n identityIds,\n systemRole,\n organizationRole,\n workspaceRole,\n authToken,\n uploadUrl,\n onError,\n children,\n}: AgentProviderProps) {\n const storeRef = useRef<AgentStore | undefined>(undefined)\n const clientRef = useRef<AgentClient | undefined>(undefined)\n\n if (!storeRef.current) {\n storeRef.current = createAgentStore()\n clientRef.current = new AgentClient(storeRef.current.getState().actions)\n }\n\n // Update onError callback\n useEffect(() => {\n clientRef.current?.setOnError(onError ?? null)\n }, [onError])\n\n // Update upload URL\n useEffect(() => {\n clientRef.current?.setUploadUrl(uploadUrl)\n }, [uploadUrl])\n\n // Stable key for identityIds to avoid reference-equality churn\n const identityIdsKey = identityIds?.join(',') ?? ''\n\n // Connect/disconnect lifecycle — skips connection when url or agentId are missing\n useEffect(() => {\n if (!url || !agentId) return\n clientRef.current?.connect(url, agentId, {\n organizationId,\n workspaceId,\n userId,\n userName,\n userEmail,\n identityIds: identityIdsKey ? identityIdsKey.split(',') : undefined,\n systemRole,\n organizationRole,\n workspaceRole,\n authToken,\n })\n return () => clientRef.current?.disconnect()\n }, [\n url,\n agentId,\n organizationId,\n workspaceId,\n userId,\n userName,\n userEmail,\n identityIdsKey,\n systemRole,\n organizationRole,\n workspaceRole,\n authToken,\n ])\n\n // Stable context value — refs never change after initial creation\n const contextValue = useMemo<AgentContextValue>(\n () => ({ store: storeRef.current!, client: clientRef.current! }),\n []\n )\n\n return <AgentContext.Provider value={contextValue}>{children}</AgentContext.Provider>\n}\n\n// Internal hook for other hooks to access context\nexport function useAgentContext(): AgentContextValue {\n const ctx = useContext(AgentContext)\n if (!ctx) {\n throw new Error('useAgentContext must be used within a <AgentProvider>')\n }\n return ctx\n}\n\n// Selector hook with Object.is equality (for primitives)\nexport function useStore<T>(selector: (state: AgentState) => T): T {\n const { store } = useAgentContext()\n return useZustandStore(store, selector)\n}\n\n// Selector hook with shallow equality (for objects/arrays)\nexport function useShallowStore<T>(selector: (state: AgentState) => T): T {\n const { store } = useAgentContext()\n return useZustandStore(store, useShallow(selector))\n}\n","import { useCallback } from 'react'\nimport { useAgentContext, useShallowStore } from '../provider'\n\nexport function useAnalytics() {\n const { client } = useAgentContext()\n\n const events = useShallowStore((s) => s.analytics.events)\n const counters = useShallowStore((s) => s.analytics.counters)\n\n const subscribe = useCallback(() => client.subscribeAnalytics(), [client])\n const unsubscribe = useCallback(() => client.unsubscribeAnalytics(), [client])\n\n return { events, counters, subscribe, unsubscribe }\n}\n","import { useCallback, useEffect, useRef, useState } from 'react'\n\nfunction getPreferredMimeType(): string {\n if (typeof MediaRecorder !== 'undefined') {\n if (MediaRecorder.isTypeSupported('audio/webm;codecs=opus')) return 'audio/webm;codecs=opus'\n if (MediaRecorder.isTypeSupported('audio/webm')) return 'audio/webm'\n if (MediaRecorder.isTypeSupported('audio/mp4')) return 'audio/mp4'\n }\n return 'audio/webm'\n}\n\nexport function useAudioRecorder() {\n const [isRecording, setIsRecording] = useState(false)\n const [duration, setDuration] = useState(0)\n const mediaRecorderRef = useRef<MediaRecorder | null>(null)\n const streamRef = useRef<MediaStream | null>(null)\n const chunksRef = useRef<Blob[]>([])\n const timerRef = useRef<ReturnType<typeof setInterval> | null>(null)\n const startTimeRef = useRef<number>(0)\n const resolveStopRef = useRef<((blob: Blob) => void) | null>(null)\n const audioContextRef = useRef<AudioContext | null>(null)\n const analyserRef = useRef<AnalyserNode | null>(null)\n\n const releaseAudioContext = useCallback(() => {\n analyserRef.current = null\n if (audioContextRef.current && audioContextRef.current.state !== 'closed') {\n audioContextRef.current.close()\n }\n audioContextRef.current = null\n }, [])\n\n const releaseStream = useCallback(() => {\n streamRef.current?.getTracks().forEach((t) => {\n t.stop()\n })\n streamRef.current = null\n releaseAudioContext()\n }, [releaseAudioContext])\n\n const clearTimer = useCallback(() => {\n if (timerRef.current) {\n clearInterval(timerRef.current)\n timerRef.current = null\n }\n }, [])\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (mediaRecorderRef.current?.state === 'recording') {\n mediaRecorderRef.current.stop()\n }\n releaseStream()\n clearTimer()\n }\n }, [releaseStream, clearTimer])\n\n const start = useCallback(async () => {\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true })\n streamRef.current = stream\n\n const audioContext = new AudioContext()\n audioContextRef.current = audioContext\n const source = audioContext.createMediaStreamSource(stream)\n const analyser = audioContext.createAnalyser()\n analyser.fftSize = 256\n source.connect(analyser)\n analyserRef.current = analyser\n\n const mimeType = getPreferredMimeType()\n const recorder = new MediaRecorder(stream, { mimeType })\n mediaRecorderRef.current = recorder\n chunksRef.current = []\n\n recorder.ondataavailable = (e) => {\n if (e.data.size > 0) chunksRef.current.push(e.data)\n }\n\n recorder.onstop = () => {\n const blob = new Blob(chunksRef.current, { type: mimeType.split(';')[0] })\n releaseStream()\n clearTimer()\n resolveStopRef.current?.(blob)\n resolveStopRef.current = null\n }\n\n startTimeRef.current = Date.now()\n setDuration(0)\n timerRef.current = setInterval(() => {\n setDuration(Math.floor((Date.now() - startTimeRef.current) / 1000))\n }, 1000)\n\n recorder.start()\n setIsRecording(true)\n }, [releaseStream, clearTimer])\n\n const stop = useCallback((): Promise<Blob> => {\n return new Promise((resolve, reject) => {\n if (!mediaRecorderRef.current || mediaRecorderRef.current.state === 'inactive') {\n reject(new Error('No active recording to stop'))\n return\n }\n resolveStopRef.current = resolve\n mediaRecorderRef.current.stop()\n setIsRecording(false)\n setDuration(0)\n })\n }, [])\n\n const cancel = useCallback(() => {\n resolveStopRef.current = null\n if (mediaRecorderRef.current?.state === 'recording') {\n mediaRecorderRef.current.stop()\n }\n releaseStream()\n clearTimer()\n setIsRecording(false)\n setDuration(0)\n }, [releaseStream, clearTimer])\n\n return { start, stop, cancel, isRecording, duration, analyserNode: analyserRef.current }\n}\n","import { useCallback } from 'react'\nimport { useAgentContext, useStore } from '../provider'\n\nexport function useConnection() {\n const { client } = useAgentContext()\n\n const status = useStore((s) => s.connection.status)\n const error = useStore((s) => s.connection.error)\n const reconnectFailed = useStore((s) => s.connection.reconnectFailed)\n\n const reconnect = useCallback(() => client.retry(), [client])\n\n return { status, error, reconnectFailed, reconnect }\n}\n","import { useCallback } from 'react'\nimport { useAgentContext, useStore } from '../provider'\nimport type { FeedbackTarget } from '../types'\n\nexport function useFeedback(targetId: string, targetType: FeedbackTarget = 'event') {\n const { client } = useAgentContext()\n\n const feedback = useStore((s) => s.feedback[targetId] ?? null)\n\n const like = useCallback(\n (reason?: string, classification?: string) =>\n client.sendFeedback(targetType, targetId, 'like', reason, classification),\n [client, targetType, targetId]\n )\n\n const dislike = useCallback(\n (reason?: string, classification?: string) =>\n client.sendFeedback(targetType, targetId, 'dislike', reason, classification),\n [client, targetType, targetId]\n )\n\n return { feedback, like, dislike }\n}\n","import { useCallback, useEffect, useState } from 'react'\nimport { useAgentContext, useStore } from '../provider'\nimport type { FormElement, FormEventData } from '../types'\n\nexport function useForm(formEventId: string, formData: FormEventData, threadId?: string) {\n const { client, store } = useAgentContext()\n const formState = useStore((s) => s.formStates[formEventId])\n const [errors, setErrors] = useState<Record<string, string>>({})\n\n // Initialize form state with defaults\n useEffect(() => {\n const defaults: Record<string, unknown> = {}\n for (const el of formData.elements) {\n if ('default' in el && el.default != null) {\n defaults[el.name] = el.default\n }\n }\n store.getState().actions.initFormState(formEventId, defaults)\n }, [formEventId, formData.elements, store])\n\n const values = formState?.values ?? {}\n const isSubmitting = formState?.submitting ?? false\n const isSubmitted = formState?.submitted ?? false\n const isCancelled = formState?.cancelled ?? false\n const isDisabled = isSubmitting || isSubmitted || isCancelled\n\n const setValue = useCallback(\n (fieldName: string, value: unknown) => {\n store.getState().actions.setFormValue(formEventId, fieldName, value)\n setErrors((prev) => {\n if (!prev[fieldName]) return prev\n const next = { ...prev }\n delete next[fieldName]\n return next\n })\n },\n [formEventId, store]\n )\n\n const validate = useCallback((): boolean => {\n const currentValues = store.getState().formStates[formEventId]?.values ?? {}\n const newErrors: Record<string, string> = {}\n\n for (const el of formData.elements) {\n if (!el.required) continue\n const val = currentValues[el.name]\n if (isEmptyValue(el, val)) {\n newErrors[el.name] = 'Required'\n }\n }\n\n setErrors(newErrors)\n return Object.keys(newErrors).length === 0\n }, [formEventId, formData.elements, store])\n\n const submit = useCallback(async () => {\n const state = store.getState()\n const fs = state.formStates[formEventId]\n if (!fs || fs.submitting || fs.submitted || fs.cancelled) return\n if (!validate()) return\n\n state.actions.setFormSubmitting(formEventId, true)\n const currentValues = state.formStates[formEventId]?.values ?? {}\n\n if (!threadId) {\n state.actions.setFormSubmitted(formEventId)\n return\n }\n\n try {\n await client.sendFormResponse({\n threadId,\n formEventId,\n cancelled: false,\n values: currentValues,\n })\n store.getState().actions.setFormSubmitted(formEventId)\n } catch {\n store.getState().actions.setFormSubmitting(formEventId, false)\n }\n }, [formEventId, threadId, validate, client, store])\n\n const cancel = useCallback(async () => {\n const state = store.getState()\n const fs = state.formStates[formEventId]\n if (!fs || fs.submitting || fs.submitted || fs.cancelled) return\n\n state.actions.setFormSubmitting(formEventId, true)\n\n if (!threadId) {\n state.actions.setFormCancelled(formEventId)\n return\n }\n\n try {\n await client.sendFormResponse({\n threadId,\n formEventId,\n cancelled: true,\n values: {},\n })\n store.getState().actions.setFormCancelled(formEventId)\n } catch {\n store.getState().actions.setFormSubmitting(formEventId, false)\n }\n }, [formEventId, threadId, client, store])\n\n return {\n values,\n errors,\n setValue,\n validate,\n submit,\n cancel,\n isSubmitting,\n isSubmitted,\n isCancelled,\n isDisabled,\n }\n}\n\nfunction isEmptyValue(element: FormElement, val: unknown): boolean {\n if (val == null) return true\n if (typeof val === 'string' && val.trim() === '') return true\n if (element.type === 'checkbox_input' && Array.isArray(val) && val.length === 0) return true\n return false\n}\n","import { useCallback, useState } from 'react'\n\nexport interface FormFileMetadata {\n id?: string\n filename: string\n public_url?: string\n mime_type?: string\n size?: number\n [key: string]: unknown\n}\n\nexport function useFormFileUpload() {\n const [isUploading, setIsUploading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n const upload = useCallback(\n async (params: {\n file: File\n uploadUrl: string\n fieldId: string\n agentId: string\n runId: string\n threadId: string\n }): Promise<FormFileMetadata> => {\n setIsUploading(true)\n setError(null)\n try {\n const formData = new FormData()\n formData.append('file', params.file)\n formData.append('field_id', params.fieldId)\n formData.append('source', 'chat')\n formData.append('agent_id', params.agentId)\n formData.append('run_id', params.runId)\n formData.append('thread_id', params.threadId)\n\n const response = await fetch(params.uploadUrl, {\n method: 'POST',\n body: formData,\n })\n\n if (!response.ok) {\n const detail = await response.text().catch(() => '')\n throw new Error(detail || `Upload failed (${response.status})`)\n }\n\n return await response.json()\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Upload failed'\n setError(message)\n throw err\n } finally {\n setIsUploading(false)\n }\n },\n []\n )\n\n const clearError = useCallback(() => setError(null), [])\n\n return { upload, isUploading, error, clearError }\n}\n","import { useCallback } from 'react'\nimport { useAgentContext } from '../provider'\nimport type { ContentPart } from '../types'\n\nexport function useMessage() {\n const { client } = useAgentContext()\n\n const send = useCallback(\n (params: { text?: string; threadId?: string; content?: ContentPart[] }) => {\n return client.sendMessage(params)\n },\n [client]\n )\n\n return { send }\n}\n","import { useCallback } from 'react'\nimport { useAgentContext, useShallowStore, useStore } from '../provider'\n\nexport function useSettings() {\n const { client } = useAgentContext()\n\n const fields = useShallowStore((s) => s.settings.fields)\n const updatedAt = useStore((s) => s.settings.updatedAt)\n const isLoading = useStore((s) => s.settings.isLoading)\n\n const subscribe = useCallback(\n (options?: { audience?: 'creator' | 'user'; agentOwnerUserId?: string | null }) =>\n client.subscribeSettings(options),\n [client]\n )\n const unsubscribe = useCallback(() => client.unsubscribeSettings(), [client])\n\n const patchField = useCallback(\n (fieldId: string, value: unknown) => client.patchSetting(fieldId, value),\n [client]\n )\n\n return { fields, updatedAt, isLoading, subscribe, unsubscribe, patchField }\n}\n","import { useCallback, useState } from 'react'\n\nexport interface SettingsFileMetadata {\n id?: string\n filename: string\n public_url?: string\n mime_type?: string\n size?: number\n [key: string]: unknown\n}\n\nexport function useSettingsFileUpload() {\n const [isUploading, setIsUploading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n const upload = useCallback(\n async (params: {\n file: File\n uploadUrl: string\n fieldId: string\n agentId: string\n }): Promise<SettingsFileMetadata> => {\n setIsUploading(true)\n setError(null)\n try {\n const formData = new FormData()\n formData.append('file', params.file)\n formData.append('source', 'settings')\n formData.append('field_id', params.fieldId)\n formData.append('agent_id', params.agentId)\n\n const response = await fetch(params.uploadUrl, {\n method: 'POST',\n body: formData,\n })\n\n if (!response.ok) {\n const detail = await response.text().catch(() => '')\n throw new Error(detail || `Upload failed (${response.status})`)\n }\n\n return await response.json()\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Upload failed'\n setError(message)\n throw err\n } finally {\n setIsUploading(false)\n }\n },\n []\n )\n\n const clearError = useCallback(() => setError(null), [])\n\n return { upload, isUploading, error, clearError }\n}\n","import { useCallback, useEffect, useMemo } from 'react'\nimport { useAgentContext, useStore } from '../provider'\nimport type { Run, Thread, ThreadEvent, ThreadState } from '../types'\n\nconst EMPTY_ARRAY: ThreadEvent[] = []\nconst EMPTY_RUNS: Run[] = []\n\nexport function useThreadDetails(threadId: string | null): ThreadState {\n const { client } = useAgentContext()\n\n // Auto-subscribe/unsubscribe\n useEffect(() => {\n if (!threadId) return\n client.subscribe(threadId)\n return () => client.unsubscribe(threadId)\n }, [threadId, client])\n\n // All selectors return direct store references or constants — Object.is is sufficient\n const thread = useStore((s): Thread | null => (threadId ? (s.threads[threadId] ?? null) : null))\n const isLoading = useStore((s) => (threadId ? s.loadingThreads.has(threadId) : false))\n const isWaiting = useStore((s) => {\n if (!threadId) return false\n const r = s.runs[threadId]\n return r ? r.some((run) => run.status === 'running') : false\n })\n\n const optimistic = useStore((s) =>\n threadId ? (s.optimistic[threadId] ?? EMPTY_ARRAY) : EMPTY_ARRAY\n )\n const confirmed = useStore((s) => (threadId ? (s.events[threadId] ?? EMPTY_ARRAY) : EMPTY_ARRAY))\n const runs = useStore((s) => (threadId ? (s.runs[threadId] ?? EMPTY_RUNS) : EMPTY_RUNS))\n\n // Merge with useMemo — stable ref when inputs are the same arrays\n const events = useMemo(\n () => (optimistic.length ? [...confirmed, ...optimistic] : confirmed),\n [optimistic, confirmed]\n )\n\n return { thread, events, runs, isLoading, isWaiting }\n}\n\nexport function useThreadEvents(threadId: string | null) {\n const { client } = useAgentContext()\n\n const hasOlderEvents = useStore((s) =>\n threadId ? (s.eventPagination[threadId]?.hasMore ?? false) : false\n )\n\n const loadOlderEvents = useCallback(\n (limit?: number) => {\n if (threadId) client.loadOlderEvents(threadId, limit)\n },\n [threadId, client]\n )\n\n return { hasOlderEvents, loadOlderEvents }\n}\n","import { useCallback, useMemo } from 'react'\nimport { useAgentContext, useStore } from '../provider'\n\n/** Lightweight read-only hook — thread list, count, and loading state. */\nexport function useThreadsList() {\n const threadOrder = useStore((s) => s.threadOrder)\n const threadMap = useStore((s) => s.threads)\n\n const threads = useMemo(\n () =>\n threadOrder.flatMap((id) => {\n const t = threadMap[id]\n return t ? [t] : []\n }),\n [threadOrder, threadMap]\n )\n\n const isLoading = useStore((s) => s.connection.status !== 'connected')\n const hasMore = useStore((s) => s.threadListHasMore)\n const totalCount = useStore((s) => s.threadListTotalCount)\n\n return { threads, isLoading, hasMore, totalCount }\n}\n\n/** Actions-only hook (delete, load more). */\nexport function useThreadsActions() {\n const { client } = useAgentContext()\n\n const deleteThread = useCallback((threadId: string) => client.deleteThread(threadId), [client])\n const loadMore = useCallback((limit?: number) => client.loadMoreThreads(limit), [client])\n\n return { deleteThread, loadMore }\n}\n","import { useCallback, useRef, useState } from 'react'\nimport type { UploadResult } from '../client'\nimport { useAgentContext } from '../provider'\n\nexport function useUpload() {\n const { client } = useAgentContext()\n const [isUploading, setIsUploading] = useState(false)\n const activeCountRef = useRef(0)\n\n const upload = useCallback(\n async (file: File | Blob): Promise<UploadResult> => {\n activeCountRef.current++\n setIsUploading(true)\n try {\n return await client.upload(file)\n } finally {\n activeCountRef.current--\n if (activeCountRef.current === 0) {\n setIsUploading(false)\n }\n }\n },\n [client]\n )\n\n return { upload, isUploading }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/helpers/api-messages-url-to-ws.ts","../src/types.ts","../src/client.ts","../src/store.ts","../src/provider.tsx","../src/hooks/use-analytics.ts","../src/hooks/use-audio-recorder.ts","../src/hooks/use-connection.ts","../src/hooks/use-feedback.ts","../src/hooks/use-form.ts","../src/hooks/use-form-file-upload.ts","../src/hooks/use-message.ts","../src/hooks/use-settings.ts","../src/hooks/use-settings-file-upload.ts","../src/hooks/use-thread.ts","../src/hooks/use-threads.ts","../src/hooks/use-upload.ts"],"names":["createStore","createContext","useRef","useEffect","useMemo","useContext","useZustandStore","useShallow","useCallback","useState"],"mappings":"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","file":"main.cjs","sourcesContent":["/**\n * Browser `WebSocket` and Node's `WebSocket` require `ws:` / `wss:` URLs.\n * Agent \"API Messages URL\" is often stored as `https://host/ws` — normalize before connecting.\n */\nexport function apiMessagesUrlToWebSocketUrl(url: string): string {\n const t = url.trim()\n if (!t) {\n throw new Error('API Messages URL is empty')\n }\n if (/^wss:\\/\\//i.test(t) || /^ws:\\/\\//i.test(t)) {\n return t\n }\n if (/^https:\\/\\//i.test(t)) {\n return `wss://${t.slice('https://'.length)}`\n }\n if (/^http:\\/\\//i.test(t)) {\n return `ws://${t.slice('http://'.length)}`\n }\n throw new Error('API Messages URL must start with http://, https://, ws://, or wss://')\n}\n","// --- Send content parts (client → server, used in send()) ---\n\nexport interface TextSendPart {\n type: 'text'\n text: string\n}\n\nexport interface AudioSendPart {\n type: 'audio'\n refId: string\n duration?: number\n /** Original name from upload; required for durable blob keys when the server resolves ``ref_id`` from storage. */\n filename?: string\n mimeType?: string\n /** When the upload response included a URL (persisted attachment). */\n url?: string\n}\n\nexport interface ImageSendPart {\n type: 'image'\n refId: string\n filename?: string\n mimeType?: string\n /** When the upload response included a fetchable URL (persisted chat attachment). */\n url?: string\n}\n\nexport interface DocumentSendPart {\n type: 'document'\n refId: string\n filename?: string\n mimeType?: string\n /** When the upload response included a URL (persisted attachment). */\n url?: string\n}\n\nexport type SendContentPart = TextSendPart | AudioSendPart | ImageSendPart | DocumentSendPart\n\n// --- Display content parts (server → client, rendered in chat) ---\n\nexport interface TextDisplayPart {\n type: 'text'\n text: string\n}\n\nexport interface AudioDisplayPart {\n type: 'audio'\n url?: string\n mimeType?: string\n duration?: number\n filename?: string\n}\n\nexport interface ImageDisplayPart {\n type: 'image'\n url?: string\n mimeType?: string\n width?: number\n height?: number\n alt?: string\n filename?: string\n}\n\nexport interface DocumentDisplayPart {\n type: 'document'\n url?: string\n filename?: string\n mimeType?: string\n sizeBytes?: number\n}\n\nexport type DisplayContentPart =\n | TextDisplayPart\n | AudioDisplayPart\n | ImageDisplayPart\n | DocumentDisplayPart\n\n// Backward-compatible aliases\nexport type ContentPart = SendContentPart\nexport type TextPart = TextSendPart\nexport type ImagePart = ImageSendPart\nexport type DocumentPart = DocumentSendPart\nexport type AudioPart = AudioSendPart\n\n// --- Form element types (content parts for form events) ---\n\nexport interface FormOption {\n value: string\n label: string\n}\n\nexport interface FormTextElement {\n type: 'text_input'\n name: string\n label: string\n order: number\n required: boolean\n disabled: boolean\n placeholder: string | null\n default: string | null\n inputType: 'text' | 'password' | 'email' | 'number'\n}\n\nexport interface FormTextareaElement {\n type: 'textarea_input'\n name: string\n label: string\n order: number\n required: boolean\n disabled: boolean\n placeholder: string | null\n default: string | null\n rows: number | null\n}\n\nexport interface FormSelectElement {\n type: 'select_input'\n name: string\n label: string\n options: FormOption[]\n order: number\n required: boolean\n disabled: boolean\n default: string | null\n placeholder: string | null\n}\n\nexport interface FormRadioElement {\n type: 'radio_input'\n name: string\n label: string\n options: FormOption[]\n order: number\n required: boolean\n disabled: boolean\n default: string | null\n variant: 'native' | 'button'\n}\n\nexport interface FormCheckboxElement {\n type: 'checkbox_input'\n name: string\n label: string\n options: FormOption[]\n order: number\n required: boolean\n disabled: boolean\n default: string[] | null\n variant: 'native' | 'button'\n}\n\nexport interface FormFileElement {\n type: 'file_input'\n name: string\n label: string\n uploadUrl: string\n order: number\n required: boolean\n disabled: boolean\n accept: string | null\n multiple: boolean\n}\n\nexport type FormElement =\n | FormTextElement\n | FormTextareaElement\n | FormSelectElement\n | FormRadioElement\n | FormCheckboxElement\n | FormFileElement\n\nexport type FormSize = 'small' | 'medium' | 'large'\n\nexport interface FormEventData {\n message: string\n elements: FormElement[]\n submitLabel: string\n cancelLabel: string\n size: FormSize\n}\n\nexport interface FormResponseEventData {\n formEventId: string\n cancelled: boolean\n values: Record<string, unknown>\n}\n\nexport type Actor = 'user' | 'assistant' | 'system' | 'tool'\nexport type EventType =\n | 'message'\n | 'run.started'\n | 'run.finished'\n | 'tool.call'\n | 'tool.result'\n | 'tool.transaction'\n | 'form'\n | 'form.response'\nexport type RunStatus = 'running' | 'succeeded' | 'failed' | 'canceled'\nexport type ConnectionStatus = 'idle' | 'connecting' | 'connected' | 'disconnected' | 'error'\n\nexport interface User {\n userId: string\n userName?: string | null\n userEmail?: string | null\n identityIds?: string[]\n systemRole: string\n organizationRole: string\n workspaceRole: string\n}\n\nexport interface Thread {\n id: string\n agentId: string\n organizationId: string\n workspaceId: string\n owner: User\n users: User[]\n title: string | null\n metadata: Record<string, unknown> | null\n createdAt: string\n updatedAt: string\n lastEventAt: string\n}\n\nexport interface ThreadEvent {\n id: string\n threadId: string\n runId: string | null\n type: EventType\n actor: Actor\n author: string | null\n user?: User\n content?: DisplayContentPart[]\n data?: Record<string, unknown>\n createdAt: string\n clientEventId?: string\n}\n\nexport interface Run {\n id: string\n threadId: string\n agentId: string | null\n status: RunStatus\n startedAt: string\n endedAt: string | null\n error: string | null\n}\n\n// --- Settings ---\n\nexport type SettingsFieldType =\n | 'text'\n | 'number'\n | 'select'\n | 'checkbox'\n | 'textarea'\n | 'password'\n | 'email'\n | 'date'\n | 'image'\n | 'file'\n | 'file_multi'\n\nexport type SettingsFieldVisibility = 'internal' | 'creator' | 'user'\n\nexport interface SettingsSelectOption {\n value: string\n label: string\n}\n\nexport interface SettingsField {\n id: string\n type: SettingsFieldType\n label: string\n required: boolean\n readonly: boolean\n user_editable?: boolean\n visibility: SettingsFieldVisibility\n value: unknown\n placeholder: string | null\n options: SettingsSelectOption[] | null\n min: number | null\n max: number | null\n rows: number | null\n src: string | null\n width: number | null\n height: number | null\n uploadUrl: string | null\n accept: string | null\n}\n\nexport interface SettingsFieldGroup {\n id: string\n label: string\n fields: SettingsField[]\n collapsible: 'open' | 'closed' | null\n visibility: SettingsFieldVisibility\n}\n\nexport type SettingsItem = SettingsField | SettingsFieldGroup\n\nexport function isSettingsFieldGroup(item: SettingsItem): item is SettingsFieldGroup {\n return 'fields' in item && Array.isArray((item as SettingsFieldGroup).fields)\n}\n\n// --- Feedback ---\n\nexport type FeedbackType = 'like' | 'dislike'\nexport type FeedbackTarget = 'event' | 'run' | 'thread'\n\n// --- Analytics ---\n\nexport interface AnalyticsEvent {\n event: string\n timestamp: string\n agentId: string\n threadId: string | null\n userId: string | null\n runId: string | null\n eventId: string | null\n data: Record<string, unknown> | null\n}\n\nexport interface ThreadState {\n thread: Thread | null\n events: ThreadEvent[]\n runs: Run[]\n isLoading: boolean\n isWaiting: boolean\n}\n\n// --- Wire → Public transforms ---\n\nimport type {\n WireAnalyticsEvent,\n WireC2S_ContentPart,\n WireRun,\n WireS2C_ContentPart,\n WireS2C_FormElement,\n WireSettingsField,\n WireSettingsFieldGroup,\n WireSettingsItem,\n WireThread,\n WireThreadEvent,\n WireUser,\n} from './protocol/models'\n\nexport function toUser(w: WireUser): User\nexport function toUser(w: WireUser | undefined): User | undefined\nexport function toUser(w?: WireUser): User | undefined {\n if (!w) return undefined\n return {\n userId: w.user_id,\n userName: w.user_name,\n userEmail: w.user_email,\n identityIds: w.identity_ids,\n systemRole: w.system_role,\n organizationRole: w.organization_role,\n workspaceRole: w.workspace_role,\n }\n}\n\nexport function toThread(w: WireThread): Thread {\n return {\n id: w.id,\n agentId: w.agent_id,\n organizationId: w.organization_id,\n workspaceId: w.workspace_id,\n owner: toUser(w.owner),\n users: w.users.map((u) => toUser(u)),\n title: w.title,\n metadata: w.metadata ?? null,\n createdAt: w.created_at,\n updatedAt: w.updated_at,\n lastEventAt: w.last_event_at,\n }\n}\n\nexport function toDisplayContentPart(w: WireS2C_ContentPart): DisplayContentPart {\n switch (w.type) {\n case 'text':\n return { type: 'text', text: w.text }\n case 'audio':\n return {\n type: 'audio',\n url: w.url,\n mimeType: w.mime_type,\n duration: w.duration,\n filename: w.filename,\n }\n case 'image':\n return {\n type: 'image',\n url: w.url,\n mimeType: w.mime_type,\n width: w.width,\n height: w.height,\n alt: w.alt,\n filename: w.filename,\n }\n case 'document':\n return {\n type: 'document',\n url: w.url,\n filename: w.filename,\n mimeType: w.mime_type,\n sizeBytes: w.size_bytes,\n }\n }\n}\n\n// Backward-compatible alias\nexport const toContentPart = toDisplayContentPart\n\nexport function toFormElement(w: WireS2C_FormElement): FormElement {\n const base = {\n name: w.name,\n label: w.label,\n order: w.order ?? 0,\n required: w.required ?? false,\n disabled: w.disabled ?? false,\n }\n switch (w.type) {\n case 'text_input':\n return {\n ...base,\n type: 'text_input',\n placeholder: w.placeholder ?? null,\n default: w.default ?? null,\n inputType: w.input_type ?? 'text',\n }\n case 'textarea_input':\n return {\n ...base,\n type: 'textarea_input',\n placeholder: w.placeholder ?? null,\n default: w.default ?? null,\n rows: w.rows ?? null,\n }\n case 'select_input':\n return {\n ...base,\n type: 'select_input',\n options: w.options,\n default: w.default ?? null,\n placeholder: w.placeholder ?? null,\n }\n case 'radio_input':\n return {\n ...base,\n type: 'radio_input',\n options: w.options,\n default: w.default ?? null,\n variant: w.variant ?? 'native',\n }\n case 'checkbox_input':\n return {\n ...base,\n type: 'checkbox_input',\n options: w.options,\n default: w.default ?? null,\n variant: w.variant ?? 'native',\n }\n case 'file_input':\n return {\n ...base,\n type: 'file_input',\n uploadUrl: w.upload_url,\n accept: w.accept ?? null,\n multiple: w.multiple ?? false,\n }\n }\n}\n\nexport function toFormEventData(data: Record<string, unknown>): FormEventData {\n const elements = (data.elements as WireS2C_FormElement[]) ?? []\n return {\n message: (data.message as string) ?? '',\n elements: elements.map(toFormElement),\n submitLabel: (data.submit_label as string) ?? 'Send',\n cancelLabel: (data.cancel_label as string) ?? 'Cancel',\n size: ((data.size as string) ?? 'medium') as FormSize,\n }\n}\n\nexport function toFormResponseEventData(data: Record<string, unknown>): FormResponseEventData {\n return {\n formEventId: (data.form_event_id as string) ?? '',\n cancelled: (data.cancelled as boolean) ?? false,\n values: (data.values as Record<string, unknown>) ?? {},\n }\n}\n\nexport function toThreadEvent(w: WireThreadEvent): ThreadEvent {\n return {\n id: w.id,\n threadId: w.thread_id,\n runId: w.run_id,\n type: w.type,\n actor: w.actor,\n author: w.author,\n user: toUser(w.user),\n content: w.content?.map(toDisplayContentPart),\n data: w.data,\n createdAt: w.created_at,\n clientEventId: w.client_event_id,\n }\n}\n\nexport function toRun(w: WireRun): Run {\n return {\n id: w.id,\n threadId: w.thread_id,\n agentId: w.agent_id,\n status: w.status,\n startedAt: w.started_at,\n endedAt: w.ended_at,\n error: w.error,\n }\n}\n\n// --- Settings transforms ---\n\nexport function toSettingsField(w: WireSettingsField): SettingsField {\n return {\n id: w.id,\n type: w.type as SettingsFieldType,\n label: w.label,\n required: w.required,\n readonly: w.readonly,\n user_editable: w.user_editable ?? true,\n visibility: w.visibility ?? 'user',\n value: w.value,\n placeholder: w.placeholder,\n options: w.options,\n min: w.min,\n max: w.max,\n rows: w.rows,\n src: w.src,\n width: w.width,\n height: w.height,\n uploadUrl: w.upload_url,\n accept: w.accept,\n }\n}\n\nexport function toSettingsItem(w: WireSettingsItem): SettingsItem {\n if ('fields' in w && Array.isArray((w as WireSettingsFieldGroup).fields)) {\n const g = w as WireSettingsFieldGroup\n return {\n id: g.id,\n label: g.label,\n fields: g.fields.map(toSettingsField),\n collapsible: g.collapsible,\n visibility: g.visibility ?? 'user',\n }\n }\n return toSettingsField(w as WireSettingsField)\n}\n\n// --- Analytics transforms ---\n\nexport function toAnalyticsEvent(w: WireAnalyticsEvent): AnalyticsEvent {\n return {\n event: w.event,\n timestamp: w.timestamp,\n agentId: w.agent_id,\n threadId: w.thread_id,\n userId: w.user_id,\n runId: w.run_id,\n eventId: w.event_id,\n data: w.data,\n }\n}\n\n// --- Public → Wire transforms (for sending content) ---\n\nexport function toWireContentPart(p: SendContentPart): WireC2S_ContentPart {\n switch (p.type) {\n case 'text':\n return { type: 'text', text: p.text }\n case 'audio': {\n const w: {\n type: 'audio'\n ref_id: string\n duration?: number\n filename?: string\n mime_type?: string\n url?: string\n } = {\n type: 'audio',\n ref_id: p.refId,\n }\n if (p.duration != null) w.duration = p.duration\n if (p.filename?.trim()) w.filename = p.filename.trim()\n if (p.mimeType?.trim()) w.mime_type = p.mimeType.trim()\n if (p.url) w.url = p.url\n return w\n }\n case 'image': {\n const w: {\n type: 'image'\n ref_id: string\n filename?: string\n mime_type?: string\n url?: string\n } = {\n type: 'image',\n ref_id: p.refId,\n }\n if (p.filename?.trim()) w.filename = p.filename.trim()\n if (p.mimeType?.trim()) w.mime_type = p.mimeType.trim()\n if (p.url) w.url = p.url\n return w\n }\n case 'document': {\n const w: {\n type: 'document'\n ref_id: string\n filename?: string\n mime_type?: string\n url?: string\n } = {\n type: 'document',\n ref_id: p.refId,\n }\n if (p.filename?.trim()) w.filename = p.filename.trim()\n if (p.mimeType?.trim()) w.mime_type = p.mimeType.trim()\n if (p.url) w.url = p.url\n return w\n }\n }\n}\n","import { apiMessagesUrlToWebSocketUrl } from './helpers/api-messages-url-to-ws'\nimport type { ServerToClient } from './protocol/frames'\nimport type { WireC2S_ContentPart, WireSettingsItem } from './protocol/models'\nimport type { AgentActions } from './store'\nimport type { DisplayContentPart, SendContentPart, SettingsItem, ThreadEvent } from './types'\nimport {\n toAnalyticsEvent,\n toRun,\n toSettingsItem,\n toThread,\n toThreadEvent,\n toWireContentPart,\n} from './types'\n\nconst MAX_RECONNECT_ATTEMPTS = 5\nconst RECONNECT_DELAYS = [1000, 2000, 4000, 8000, 16000]\nconst SEND_MESSAGE_TIMEOUT = 30_000\n\n/** Multipart filename for ``Blob`` uploads so server blob keys match WebSocket ``filename``. */\nfunction blobPartFilename(blob: Blob, override?: string): string {\n const o = (override ?? '').trim()\n if (o) return o\n const t = (blob.type || '').toLowerCase()\n if (t.includes('webm')) return 'recording.webm'\n if (t.includes('ogg')) return 'recording.ogg'\n if (t.includes('mpeg') || t.includes('mp3')) return 'recording.mp3'\n if (t.includes('mp4') || t.includes('m4a') || t.includes('aac')) return 'recording.m4a'\n if (t.startsWith('audio/')) return `recording.${t.split('/')[1]?.split('+')[0] || 'bin'}`\n return 'recording.bin'\n}\n\nasync function readHttpErrorMessage(response: Response): Promise<string> {\n const raw = (await response.text().catch(() => '')) || ''\n const trimmed = raw.trim()\n if (!trimmed) {\n return `Upload failed: ${response.status} ${response.statusText}`.trim()\n }\n try {\n const j = JSON.parse(trimmed) as { detail?: unknown }\n const d = j.detail\n if (typeof d === 'string') return d\n if (Array.isArray(d) && d.length > 0) {\n const first = d[0] as { msg?: string }\n if (first && typeof first.msg === 'string') return first.msg\n }\n } catch {\n /* use body */\n }\n return trimmed.length > 300 ? `${trimmed.slice(0, 300)}…` : trimmed\n}\n\nexport interface AgentConnectionConfig {\n organizationId?: string\n workspaceId?: string\n userId?: string\n userName?: string\n userEmail?: string\n identityIds?: string[]\n systemRole?: string\n organizationRole?: string\n workspaceRole?: string\n authToken?: string\n}\n\nexport type OnErrorCallback = (error: { code: string; message: string; frameType: string }) => void\n\nexport interface UploadResult {\n refId: string\n mimeType: string\n filename: string\n sizeBytes: number\n /** Present when the template persisted the file (HTTP(S) or null if not applicable). */\n publicUrl?: string | null\n}\n\nexport interface PublicSettingsSchemaResult {\n version: string\n fields: SettingsItem[]\n}\n\n/**\n * Talks to the agent messages server without an agent session (no `connect` frame).\n * Use for public/bootstrap operations allowed before an {@link AgentClient} is connected.\n */\nexport class AgentServerClient {\n private readonly wsUrl: string\n\n constructor(apiMessagesUrl: string) {\n this.wsUrl = apiMessagesUrlToWebSocketUrl(apiMessagesUrl)\n }\n\n /**\n * Opens a short-lived WebSocket, requests `settings.public_schema`, and returns the public field\n * list. Closes the socket when done.\n */\n fetchPublicSettingsSchema(options?: { timeoutMs?: number }): Promise<PublicSettingsSchemaResult> {\n const timeoutMs = options?.timeoutMs ?? 15_000\n\n return new Promise((resolve, reject) => {\n const ws = new WebSocket(this.wsUrl)\n const frameId = crypto.randomUUID()\n let settled = false\n\n const finish = (fn: () => void) => {\n if (settled) return\n settled = true\n clearTimeout(timer)\n try {\n ws.close()\n } catch {\n /* ignore */\n }\n fn()\n }\n\n const timer = setTimeout(() => {\n finish(() => reject(new Error('AgentServerClient.fetchPublicSettingsSchema: timeout')))\n }, timeoutMs)\n\n ws.onopen = () => {\n ws.send(\n JSON.stringify({\n id: frameId,\n type: 'settings.public_schema',\n payload: {},\n })\n )\n }\n\n ws.onmessage = (ev: MessageEvent) => {\n let msg: {\n id?: string\n type?: string\n payload?: {\n ack_id?: string\n ok?: boolean\n error?: { code?: string; message?: string }\n schema?: { version?: string; fields?: WireSettingsItem[] }\n }\n }\n try {\n msg = JSON.parse(ev.data as string)\n } catch {\n return\n }\n\n if (msg.type === 'ack' && msg.payload?.ack_id === frameId) {\n if (msg.payload?.ok === false) {\n finish(() =>\n reject(\n new Error(\n msg.payload?.error?.message ??\n 'AgentServerClient.fetchPublicSettingsSchema: request rejected'\n )\n )\n )\n }\n return\n }\n\n if (msg.type === 'settings.public_schema.result' && msg.id === frameId) {\n const raw = msg.payload?.schema as\n | { version?: string; fields?: WireSettingsItem[] }\n | undefined\n const fieldsWire = raw?.fields ?? []\n const fields = fieldsWire.map((w) => toSettingsItem(w))\n finish(() =>\n resolve({\n version: typeof raw?.version === 'string' ? raw.version : '1.0',\n fields,\n })\n )\n }\n }\n\n ws.onerror = () => {\n finish(() =>\n reject(new Error('AgentServerClient.fetchPublicSettingsSchema: WebSocket error'))\n )\n }\n\n ws.onclose = (ev) => {\n if (settled) return\n finish(() =>\n reject(\n new Error(\n `AgentServerClient.fetchPublicSettingsSchema: connection closed (${ev.code})${ev.reason ? ` ${ev.reason}` : ''}`\n )\n )\n )\n }\n })\n }\n}\n\nexport class AgentClient {\n private ws: WebSocket | null = null\n private callbacks: AgentActions\n private onError: OnErrorCallback | null = null\n\n private url = ''\n private httpBaseUrl = ''\n private agentId = ''\n /** Mirrors ``AgentProvider`` ``agentId`` so HTTP uploads work before WS ``connect`` completes. */\n private uploadAgentId = ''\n /** Current chat thread id for ``POST /uploads`` (aligns GCS path with ``hydrate_thread_events``). */\n private uploadThreadId = ''\n /** Optional run id for ``POST /uploads`` (metadata only). */\n private uploadRunId = ''\n private uploadUrl: string | undefined\n private config: AgentConnectionConfig = {\n organizationId: '',\n workspaceId: '',\n userId: '',\n }\n\n private connectFrameId = ''\n private isIntentionallyClosed = false\n private reconnectAttempts = 0\n private reconnectTimer: ReturnType<typeof setTimeout> | null = null\n\n // Refcounted subscriptions\n private subscriptionRefs = new Map<string, number>()\n\n // Track optimistic events for reconciliation\n private pendingOptimistic = new Map<string, { threadId: string; clientEventId: string }>()\n\n // Pending message promises — keyed by outbound frame id (same as client_event_id for sends).\n private pendingMessages = new Map<\n string,\n {\n resolve: (value: { threadId: string }) => void\n reject: (reason: Error) => void\n timer: ReturnType<typeof setTimeout>\n }\n >()\n\n // Track last event ID per thread for gap recovery on reconnect\n private lastEventIds = new Map<string, string>()\n\n // Pagination\n private lastThreadListCursor: string | null = null\n private isLoadingMore = false\n\n // Event pagination cursors per thread\n private eventPaginationCursors = new Map<string, string | null>()\n\n constructor(callbacks: AgentActions) {\n this.callbacks = callbacks\n }\n\n setOnError(cb: OnErrorCallback | null) {\n this.onError = cb\n }\n\n setUploadUrl(url: string | undefined) {\n this.uploadUrl = url\n }\n\n /** Sync from ``AgentProvider`` ``agentId``; used for ``POST /uploads`` ``agent_id`` (non-WS). */\n setUploadAgentId(agentId: string | undefined) {\n this.uploadAgentId = (agentId ?? '').trim()\n }\n\n /** Sync active thread id for chat uploads (must match persisted thread for signed URL keys). */\n setUploadThreadId(threadId: string | undefined) {\n this.uploadThreadId = (threadId ?? '').trim()\n }\n\n setUploadRunId(runId: string | undefined) {\n this.uploadRunId = (runId ?? '').trim()\n }\n\n async upload(file: File | Blob, options?: { filename?: string }): Promise<UploadResult> {\n if (!this.uploadUrl) {\n throw new Error('uploadUrl not configured')\n }\n\n const aid = (this.uploadAgentId || this.agentId || '').trim()\n if (!aid) {\n throw new Error('agentId is required for upload (set AgentProvider agentId)')\n }\n\n const formData = new FormData()\n if (file instanceof File) {\n const partName = options?.filename?.trim() || file.name.trim() || 'upload'\n formData.append('file', file, partName)\n } else {\n formData.append('file', file, blobPartFilename(file, options?.filename))\n }\n formData.append('agent_id', aid)\n const tid = this.uploadThreadId.trim()\n if (tid) {\n formData.append('thread_id', tid)\n }\n const rid = this.uploadRunId.trim()\n if (rid) {\n formData.append('run_id', rid)\n }\n\n const headers: Record<string, string> = {}\n if (this.config.authToken) {\n headers.Authorization = `Bearer ${this.config.authToken}`\n }\n\n const response = await fetch(this.uploadUrl, {\n method: 'POST',\n body: formData,\n headers,\n })\n\n if (!response.ok) {\n const detail = await readHttpErrorMessage(response)\n throw new Error(detail)\n }\n\n const result = await response.json()\n return {\n refId: result.ref_id,\n mimeType: result.mime_type,\n filename: result.filename,\n sizeBytes: result.size_bytes ?? result.size ?? 0,\n publicUrl: result.public_url ?? undefined,\n }\n }\n\n connect(url: string, agentId: string, config?: AgentConnectionConfig) {\n this.url = apiMessagesUrlToWebSocketUrl(url)\n this.agentId = agentId\n this.uploadAgentId = agentId.trim()\n this.config = config ?? { organizationId: '', workspaceId: '', userId: '' }\n this.isIntentionallyClosed = false\n\n // Derive HTTP base URL from WebSocket URL for resolving relative content URLs\n try {\n const parsed = new URL(this.url)\n parsed.protocol = parsed.protocol === 'wss:' ? 'https:' : 'http:'\n parsed.pathname = ''\n parsed.search = ''\n parsed.hash = ''\n this.httpBaseUrl = parsed.toString().replace(/\\/$/, '')\n } catch {\n this.httpBaseUrl = ''\n }\n\n this.callbacks.setConnectionStatus('connecting')\n this.createConnection()\n }\n\n /** Clear the last in-chat send error banner (see ``connection.sendError``). */\n clearSendError() {\n this.callbacks.setSendError(null)\n }\n\n private abortPendingMessages(reason: string) {\n for (const [clientEventId, pending] of this.pendingMessages) {\n clearTimeout(pending.timer)\n const opt = this.pendingOptimistic.get(clientEventId)\n if (opt?.threadId) {\n this.callbacks.removeOptimistic(opt.threadId, clientEventId)\n }\n this.pendingOptimistic.delete(clientEventId)\n pending.reject(new Error(reason))\n }\n this.pendingMessages.clear()\n }\n\n disconnect() {\n this.isIntentionallyClosed = true\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer)\n this.reconnectTimer = null\n }\n this.abortPendingMessages('Disconnected')\n if (this.ws) {\n this.ws.onopen = null\n this.ws.onmessage = null\n this.ws.onclose = null\n this.ws.onerror = null\n this.ws.close()\n this.ws = null\n }\n this.callbacks.setConnectionStatus('disconnected')\n }\n\n retry() {\n this.reconnectAttempts = 0\n this.isIntentionallyClosed = false\n this.callbacks.setConnectionStatus('connecting')\n this.createConnection()\n }\n\n // --- Thread operations ---\n\n requestThreadList(cursor?: string | null, limit?: number) {\n this.send('thread.list', { cursor, limit })\n }\n\n subscribe(threadId: string) {\n const refs = this.subscriptionRefs.get(threadId) ?? 0\n this.subscriptionRefs.set(threadId, refs + 1)\n if (refs === 0) {\n const afterEventId = this.lastEventIds.get(threadId) ?? null\n this.send('thread.subscribe', { thread_id: threadId, after_event_id: afterEventId })\n this.callbacks.addSubscription(threadId)\n }\n }\n\n unsubscribe(threadId: string) {\n const refs = this.subscriptionRefs.get(threadId) ?? 0\n if (refs <= 1) {\n this.subscriptionRefs.delete(threadId)\n this.lastEventIds.delete(threadId)\n this.eventPaginationCursors.delete(threadId)\n this.send('thread.unsubscribe', { thread_id: threadId })\n this.callbacks.removeSubscription(threadId)\n } else {\n this.subscriptionRefs.set(threadId, refs - 1)\n }\n }\n\n deleteThread(threadId: string) {\n this.send('thread.delete', { thread_id: threadId })\n }\n\n loadMoreThreads(limit?: number) {\n const cursor = this.lastThreadListCursor\n if (!cursor || this.isLoadingMore) return\n this.isLoadingMore = true\n this.send('thread.list', { cursor, limit })\n }\n\n loadOlderEvents(threadId: string, limit?: number) {\n const cursor = this.eventPaginationCursors.get(threadId)\n this.send('event.list', {\n thread_id: threadId,\n before_event_id: cursor ?? null,\n limit,\n })\n }\n\n // --- Settings ---\n\n subscribeSettings(options?: { audience?: 'creator' | 'user'; agentOwnerUserId?: string | null }) {\n this.send('settings.subscribe', {\n agent_id: this.agentId,\n audience: options?.audience ?? 'user',\n agent_owner_user_id: options?.agentOwnerUserId ?? null,\n })\n }\n\n unsubscribeSettings() {\n this.send('settings.unsubscribe', { agent_id: this.agentId })\n }\n\n patchSetting(fieldId: string, value: unknown) {\n this.send('settings.patch', { field_id: fieldId, value })\n }\n\n // --- Feedback ---\n\n sendFeedback(\n targetType: string,\n targetId: string,\n feedback: 'like' | 'dislike',\n reason?: string,\n classification?: string\n ) {\n this.send('feedback', {\n target_type: targetType,\n target_id: targetId,\n feedback,\n reason,\n classification,\n })\n }\n\n // --- Analytics ---\n\n subscribeAnalytics() {\n this.send('analytics.subscribe', { agent_id: this.agentId })\n }\n\n unsubscribeAnalytics() {\n this.send('analytics.unsubscribe', { agent_id: this.agentId })\n }\n\n // --- Messaging ---\n\n sendMessage(params: {\n text?: string\n threadId?: string\n content?: SendContentPart[]\n metadata?: Record<string, unknown>\n }): Promise<{ threadId: string }> {\n this.callbacks.setSendError(null)\n const clientEventId = crypto.randomUUID()\n const content: WireC2S_ContentPart[] = params.content\n ? params.content.map(toWireContentPart)\n : [{ type: 'text', text: params.text ?? '' }]\n\n // Build optimistic display content from send parts\n const displayContent: DisplayContentPart[] = params.content\n ? params.content.map((p): DisplayContentPart => {\n switch (p.type) {\n case 'text':\n return { type: 'text', text: p.text }\n case 'audio':\n return {\n type: 'audio',\n duration: p.duration,\n ...(p.url ? { url: p.url } : {}),\n ...(p.mimeType ? { mimeType: p.mimeType } : {}),\n ...(p.filename ? { filename: p.filename } : {}),\n }\n case 'image':\n return {\n type: 'image',\n ...(p.url ? { url: p.url } : {}),\n ...(p.mimeType ? { mimeType: p.mimeType } : {}),\n ...(p.filename ? { filename: p.filename } : {}),\n }\n case 'document':\n return {\n type: 'document',\n ...(p.url ? { url: p.url } : {}),\n ...(p.mimeType ? { mimeType: p.mimeType } : {}),\n ...(p.filename ? { filename: p.filename } : {}),\n }\n default:\n return { type: 'text', text: '' }\n }\n })\n : [{ type: 'text', text: params.text ?? '' }]\n\n // Build optimistic event\n const optimisticEvent: ThreadEvent = {\n id: `optimistic-${clientEventId}`,\n threadId: params.threadId ?? '',\n runId: null,\n type: 'message',\n actor: 'user',\n author: null,\n user: {\n userId: this.config.userId ?? '',\n userName: this.config.userName,\n userEmail: this.config.userEmail,\n identityIds: this.config.identityIds,\n systemRole: this.config.systemRole ?? 'user',\n organizationRole: this.config.organizationRole ?? 'member',\n workspaceRole: this.config.workspaceRole ?? 'member',\n },\n content: displayContent,\n createdAt: new Date().toISOString(),\n }\n\n if (params.threadId) {\n this.callbacks.addOptimistic(params.threadId, optimisticEvent, clientEventId)\n }\n\n this.pendingOptimistic.set(clientEventId, {\n threadId: params.threadId ?? '',\n clientEventId,\n })\n\n const promise = this.createPendingPromise(clientEventId)\n\n const payload: Record<string, unknown> = {\n thread_id: params.threadId,\n client_event_id: clientEventId,\n event: {\n type: 'message' as const,\n actor: 'user' as const,\n content,\n },\n }\n if (params.metadata) {\n payload.metadata = params.metadata\n }\n\n this.sendRaw({\n id: clientEventId,\n type: 'event.create',\n payload,\n })\n\n return promise\n }\n\n sendFormResponse(params: {\n threadId: string\n formEventId: string\n cancelled: boolean\n values: Record<string, unknown>\n }): Promise<{ threadId: string }> {\n this.callbacks.setSendError(null)\n const clientEventId = crypto.randomUUID()\n const promise = this.createPendingPromise(clientEventId)\n\n this.sendRaw({\n id: clientEventId,\n type: 'event.create',\n payload: {\n thread_id: params.threadId,\n client_event_id: clientEventId,\n event: {\n type: 'form.response' as const,\n actor: 'user' as const,\n content: [],\n data: {\n form_event_id: params.formEventId,\n cancelled: params.cancelled,\n values: params.values,\n },\n },\n },\n })\n\n return promise\n }\n\n // --- Private ---\n\n private createPendingPromise(clientEventId: string): Promise<{ threadId: string }> {\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n const opt = this.pendingOptimistic.get(clientEventId)\n if (opt?.threadId) {\n this.callbacks.removeOptimistic(opt.threadId, clientEventId)\n }\n this.pendingOptimistic.delete(clientEventId)\n this.pendingMessages.delete(clientEventId)\n reject(new Error('Request timed out waiting for server response'))\n }, SEND_MESSAGE_TIMEOUT)\n\n this.pendingMessages.set(clientEventId, { resolve, reject, timer })\n })\n }\n\n private createConnection() {\n if (this.ws) {\n this.abortPendingMessages('Connection lost; reconnecting')\n this.ws.onopen = null\n this.ws.onmessage = null\n this.ws.onclose = null\n this.ws.onerror = null\n this.ws.close()\n }\n\n this.ws = new WebSocket(this.url)\n\n this.ws.onopen = () => {\n this.authenticate()\n }\n\n this.ws.onmessage = (e: MessageEvent) => {\n try {\n const frame = JSON.parse(e.data as string) as ServerToClient\n this.route(frame)\n } catch {\n // Ignore malformed frames\n }\n }\n\n this.ws.onclose = () => {\n if (!this.isIntentionallyClosed) {\n this.scheduleReconnect()\n }\n }\n\n this.ws.onerror = () => {\n // onclose will fire after onerror\n }\n }\n\n private authenticate() {\n this.connectFrameId = crypto.randomUUID()\n this.sendRaw({\n id: this.connectFrameId,\n type: 'connect',\n payload: {\n agent_id: this.agentId,\n organization_id: this.config.organizationId ?? '',\n workspace_id: this.config.workspaceId ?? '',\n user: {\n user_id: this.config.userId ?? '',\n user_name: this.config.userName ?? null,\n user_email: this.config.userEmail ?? null,\n identity_ids: this.config.identityIds ?? [],\n system_role: this.config.systemRole ?? 'user',\n organization_role: this.config.organizationRole ?? 'member',\n workspace_role: this.config.workspaceRole ?? 'member',\n },\n auth_token: this.config.authToken,\n client: { name: 'dooers-agents-client', version: '0.1.0' },\n },\n })\n }\n\n private route(frame: ServerToClient) {\n switch (frame.type) {\n case 'ack': {\n if (frame.payload.ack_id === this.connectFrameId) {\n if (frame.payload.ok) {\n this.callbacks.setConnectionStatus('connected')\n this.callbacks.resetReconnect()\n this.requestThreadList()\n // Re-subscribe to previously tracked threads\n for (const threadId of this.subscriptionRefs.keys()) {\n const afterEventId = this.lastEventIds.get(threadId) ?? null\n this.send('thread.subscribe', {\n thread_id: threadId,\n after_event_id: afterEventId,\n })\n }\n } else {\n this.callbacks.setConnectionStatus('error', frame.payload.error?.message)\n }\n } else if (!frame.payload.ok && frame.payload.error) {\n const ackId = frame.payload.ack_id\n const err = frame.payload.error\n if (ackId) {\n const pending = this.pendingMessages.get(ackId)\n if (pending) {\n clearTimeout(pending.timer)\n this.pendingMessages.delete(ackId)\n const msg = err.message || 'Request rejected'\n const opt = this.pendingOptimistic.get(ackId)\n if (opt?.threadId) {\n this.callbacks.removeOptimistic(opt.threadId, ackId)\n }\n this.pendingOptimistic.delete(ackId)\n pending.reject(new Error(msg))\n this.callbacks.setSendError(msg)\n }\n }\n this.onError?.({\n code: err.code,\n message: err.message,\n frameType: 'ack',\n })\n }\n break\n }\n\n case 'thread.list.result': {\n const threads = frame.payload.threads.map(toThread)\n const cursor = frame.payload.cursor ?? null\n const totalCount = frame.payload.total_count\n this.lastThreadListCursor = cursor\n if (this.isLoadingMore) {\n this.callbacks.onThreadListAppend(threads, cursor, totalCount)\n } else {\n this.callbacks.onThreadList(threads, cursor, totalCount)\n }\n this.isLoadingMore = false\n break\n }\n\n case 'thread.snapshot': {\n const thread = toThread(frame.payload.thread)\n const events = this.resolveEventUrls(frame.payload.events.map(toThreadEvent))\n const runs = (frame.payload.runs ?? []).map(toRun)\n // Track last event for gap recovery\n const lastEvent = events[events.length - 1]\n if (lastEvent) {\n this.lastEventIds.set(thread.id, lastEvent.id)\n }\n // Set initial event pagination cursor to oldest event\n const oldestEvent = events[0]\n if (oldestEvent) {\n this.eventPaginationCursors.set(thread.id, oldestEvent.id)\n }\n this.callbacks.onThreadSnapshot(thread, events, runs)\n break\n }\n\n case 'event.append': {\n const events = this.resolveEventUrls(frame.payload.events.map(toThreadEvent))\n // Collect reconciled client event IDs; resolve sends only after store update\n const resolvedClientEventIds: string[] = []\n const pendingIdsToResolve: string[] = []\n for (const event of events) {\n if (event.clientEventId && this.pendingOptimistic.has(event.clientEventId)) {\n resolvedClientEventIds.push(event.clientEventId)\n this.pendingOptimistic.delete(event.clientEventId)\n }\n if (event.clientEventId && this.pendingMessages.has(event.clientEventId)) {\n const pendingMessage = this.pendingMessages.get(event.clientEventId)\n if (pendingMessage) {\n clearTimeout(pendingMessage.timer)\n pendingIdsToResolve.push(event.clientEventId)\n }\n }\n }\n // Track last event for gap recovery on reconnect.\n // Only for subscribed threads — new threads receive event.append\n // before subscription exists, and lastEventIds feeds after_event_id\n // in subscribe(), which controls what the server includes in snapshots.\n const lastEvent = events[events.length - 1]\n if (lastEvent && this.subscriptionRefs.has(frame.payload.thread_id)) {\n this.lastEventIds.set(frame.payload.thread_id, lastEvent.id)\n }\n // Atomically append confirmed events and remove reconciled optimistic events\n if (resolvedClientEventIds.length > 0) {\n this.callbacks.reconcileEvents(frame.payload.thread_id, events, resolvedClientEventIds)\n } else {\n this.callbacks.onEventAppend(frame.payload.thread_id, events)\n }\n const tid = frame.payload.thread_id\n for (const id of pendingIdsToResolve) {\n const pending = this.pendingMessages.get(id)\n if (pending) {\n pending.resolve({ threadId: tid })\n this.pendingMessages.delete(id)\n }\n }\n break\n }\n\n case 'event.list.result': {\n const events = this.resolveEventUrls(frame.payload.events.map(toThreadEvent))\n this.eventPaginationCursors.set(frame.payload.thread_id, frame.payload.cursor)\n this.callbacks.onEventListResult(\n frame.payload.thread_id,\n events,\n frame.payload.cursor,\n frame.payload.has_more\n )\n break\n }\n\n case 'thread.upsert':\n this.callbacks.onThreadUpsert(toThread(frame.payload.thread))\n break\n\n case 'thread.deleted':\n this.callbacks.onThreadDeleted(frame.payload.thread_id)\n this.lastEventIds.delete(frame.payload.thread_id)\n break\n\n case 'run.upsert':\n this.callbacks.onRunUpsert(toRun(frame.payload.run))\n break\n\n case 'settings.snapshot': {\n const fields = frame.payload.fields.map(toSettingsItem)\n this.callbacks.onSettingsSnapshot(fields, frame.payload.updated_at)\n break\n }\n\n case 'settings.patch':\n this.callbacks.onSettingsPatch(\n frame.payload.field_id,\n frame.payload.value,\n frame.payload.updated_at\n )\n break\n\n case 'settings.public_schema.result':\n break\n\n case 'feedback.ack':\n if (frame.payload.ok) {\n this.callbacks.onFeedbackAck(\n frame.payload.target_id,\n frame.payload.feedback as 'like' | 'dislike'\n )\n }\n break\n\n case 'analytics.event':\n this.callbacks.onAnalyticsEvent(toAnalyticsEvent(frame.payload))\n break\n }\n }\n\n private scheduleReconnect() {\n if (this.reconnectAttempts >= MAX_RECONNECT_ATTEMPTS) {\n this.abortPendingMessages('Connection lost after maximum retries')\n this.callbacks.setReconnectFailed()\n this.callbacks.setConnectionStatus('error', 'Connection lost after maximum retries')\n return\n }\n this.callbacks.setConnectionStatus('disconnected')\n const delay = RECONNECT_DELAYS[this.reconnectAttempts] ?? 16000\n this.reconnectAttempts++\n this.reconnectTimer = setTimeout(() => {\n this.callbacks.setConnectionStatus('connecting')\n this.createConnection()\n }, delay)\n }\n\n private send(type: string, payload: unknown) {\n this.sendRaw({ id: crypto.randomUUID(), type, payload })\n }\n\n private sendRaw(frame: unknown) {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) return\n this.ws.send(JSON.stringify(frame))\n }\n\n /** Resolve relative URLs in event content parts against the agent's HTTP base. */\n private resolveEventUrls(events: ThreadEvent[]): ThreadEvent[] {\n if (!this.httpBaseUrl) return events\n const base = this.httpBaseUrl\n return events.map((event) => {\n if (!event.content?.some((p) => 'url' in p && p.url?.startsWith('/'))) return event\n return {\n ...event,\n content: event.content.map((part) =>\n 'url' in part && part.url?.startsWith('/') ? { ...part, url: `${base}${part.url}` } : part\n ),\n }\n })\n }\n}\n","import { createStore } from 'zustand/vanilla'\nimport type {\n AnalyticsEvent,\n DisplayContentPart,\n Run,\n SettingsItem,\n Thread,\n ThreadEvent,\n} from './types'\nimport { isSettingsFieldGroup } from './types'\n\ntype FormState = {\n values: Record<string, unknown>\n submitting: boolean\n submitted: boolean\n cancelled: boolean\n}\n\n/** Extract form states from form.response events to restore submitted/cancelled state. */\n/** Merge wire content so a later frame (e.g. run_id patch) does not drop a hydrated ``url``. */\nfunction mergeDisplayContentParts(\n prev: DisplayContentPart[] | undefined,\n next: DisplayContentPart[] | undefined\n): DisplayContentPart[] | undefined {\n if (!next?.length) return prev\n if (!prev?.length) return next\n const out: DisplayContentPart[] = []\n const len = Math.max(prev.length, next.length)\n for (let i = 0; i < len; i++) {\n const p = prev[i]\n const n = next[i]\n if (!n) {\n if (p) out.push(p)\n continue\n }\n if (!p) {\n out.push(n)\n continue\n }\n if (p.type !== n.type) {\n out.push(n)\n continue\n }\n if (n.type === 'image' || n.type === 'audio' || n.type === 'document') {\n const url = n.url ?? ('url' in p ? p.url : undefined)\n out.push({ ...p, ...n, ...(url ? { url } : {}) } as DisplayContentPart)\n continue\n }\n out.push(n)\n }\n return out\n}\n\nfunction mergeThreadEventById(prev: ThreadEvent, next: ThreadEvent): ThreadEvent {\n const content = mergeDisplayContentParts(prev.content, next.content)\n return {\n ...prev,\n ...next,\n ...(content !== undefined ? { content } : {}),\n }\n}\n\nfunction extractFormStates(\n events: ThreadEvent[],\n existing: Record<string, FormState>\n): Record<string, FormState> {\n let result = existing\n for (const e of events) {\n if (e.type === 'form.response' && e.data) {\n const formEventId = e.data.form_event_id as string\n if (formEventId && !result[formEventId]) {\n const cancelled = (e.data.cancelled as boolean) ?? false\n const values = (e.data.values as Record<string, unknown>) ?? {}\n result = {\n ...result,\n [formEventId]: { values, submitting: false, submitted: !cancelled, cancelled },\n }\n }\n }\n }\n return result\n}\n\nexport interface AgentActions {\n setConnectionStatus: (status: AgentState['connection']['status'], error?: string) => void\n setSendError: (message: string | null) => void\n setReconnectFailed: () => void\n resetReconnect: () => void\n onThreadList: (threads: Thread[], cursor?: string | null, totalCount?: number) => void\n onThreadListAppend: (threads: Thread[], cursor?: string | null, totalCount?: number) => void\n onThreadUpsert: (thread: Thread) => void\n onThreadDeleted: (threadId: string) => void\n onThreadSnapshot: (thread: Thread, events: ThreadEvent[], runs: Run[]) => void\n onEventAppend: (threadId: string, events: ThreadEvent[]) => void\n reconcileEvents: (\n threadId: string,\n events: ThreadEvent[],\n resolvedClientEventIds: string[]\n ) => void\n onEventListResult: (\n threadId: string,\n events: ThreadEvent[],\n cursor: string | null,\n hasMore: boolean\n ) => void\n onRunUpsert: (run: Run) => void\n addOptimistic: (threadId: string, event: ThreadEvent, clientEventId: string) => void\n removeOptimistic: (threadId: string, clientEventId: string) => void\n addSubscription: (threadId: string) => void\n removeSubscription: (threadId: string) => void\n onSettingsSnapshot: (fields: SettingsItem[], updatedAt: string) => void\n onSettingsPatch: (fieldId: string, value: unknown, updatedAt: string) => void\n onFeedbackAck: (targetId: string, feedback: 'like' | 'dislike') => void\n onAnalyticsEvent: (event: AnalyticsEvent) => void\n resetAnalytics: () => void\n initFormState: (formEventId: string, defaults: Record<string, unknown>) => void\n setFormValue: (formEventId: string, fieldName: string, value: unknown) => void\n setFormSubmitting: (formEventId: string, submitting: boolean) => void\n setFormSubmitted: (formEventId: string) => void\n setFormCancelled: (formEventId: string) => void\n}\n\nexport interface AgentState {\n connection: {\n status: 'idle' | 'connecting' | 'connected' | 'disconnected' | 'error'\n error: string | null\n /** Last server rejection for ``event.create`` / send (e.g. upload ref not found). */\n sendError: string | null\n reconnectAttempts: number\n reconnectFailed: boolean\n }\n threads: Record<string, Thread>\n threadOrder: string[]\n threadListCursor: string | null\n threadListHasMore: boolean\n threadListTotalCount: number\n events: Record<string, ThreadEvent[]>\n eventPagination: Record<string, { cursor: string | null; hasMore: boolean }>\n optimistic: Record<string, ThreadEvent[]>\n optimisticKeys: Record<string, string[]>\n runs: Record<string, Run[]>\n settings: {\n fields: SettingsItem[]\n updatedAt: string | null\n isLoading: boolean\n }\n feedback: Record<string, 'like' | 'dislike'>\n analytics: {\n events: AnalyticsEvent[]\n counters: {\n totalRequests: number\n feedbackLikes: number\n feedbackDislikes: number\n }\n }\n formStates: Record<string, FormState>\n subscriptions: Set<string>\n loadingThreads: Set<string>\n actions: AgentActions\n}\n\nexport type AgentStore = ReturnType<typeof createAgentStore>\n\nexport function createAgentStore() {\n return createStore<AgentState>()((set) => ({\n connection: {\n status: 'idle',\n error: null,\n sendError: null,\n reconnectAttempts: 0,\n reconnectFailed: false,\n },\n threads: {},\n threadOrder: [],\n threadListCursor: null,\n threadListHasMore: false,\n threadListTotalCount: 0,\n events: {},\n eventPagination: {},\n optimistic: {},\n optimisticKeys: {},\n runs: {},\n settings: {\n fields: [],\n updatedAt: null,\n isLoading: true,\n },\n feedback: {},\n formStates: {},\n analytics: {\n events: [],\n counters: { totalRequests: 0, feedbackLikes: 0, feedbackDislikes: 0 },\n },\n subscriptions: new Set(),\n loadingThreads: new Set(),\n\n actions: {\n setConnectionStatus: (status, error) =>\n set((s) => ({\n connection: {\n ...s.connection,\n status,\n error: error ?? null,\n ...(status === 'connected' ? { sendError: null } : {}),\n },\n })),\n\n setSendError: (message) =>\n set((s) => ({\n connection: { ...s.connection, sendError: message },\n })),\n\n setReconnectFailed: () =>\n set((s) => ({\n connection: { ...s.connection, reconnectFailed: true },\n })),\n\n resetReconnect: () =>\n set((s) => ({\n connection: { ...s.connection, reconnectAttempts: 0, reconnectFailed: false },\n })),\n\n onThreadList: (threads, cursor, totalCount) =>\n set(() => {\n const map: Record<string, Thread> = {}\n const order: string[] = []\n for (const t of threads) {\n map[t.id] = t\n order.push(t.id)\n }\n return {\n threads: map,\n threadOrder: order,\n threadListCursor: cursor ?? null,\n threadListHasMore: cursor != null,\n threadListTotalCount: totalCount ?? 0,\n }\n }),\n\n onThreadListAppend: (threads, cursor) =>\n set((s) => {\n const map = { ...s.threads }\n const order = [...s.threadOrder]\n for (const t of threads) {\n if (!map[t.id]) {\n order.push(t.id)\n }\n map[t.id] = t\n }\n return {\n threads: map,\n threadOrder: order,\n threadListCursor: cursor ?? null,\n threadListHasMore: cursor != null,\n }\n }),\n\n onThreadUpsert: (thread) =>\n set((s) => {\n const threads = { ...s.threads, [thread.id]: thread }\n const threadOrder = s.threadOrder.includes(thread.id)\n ? s.threadOrder\n : [thread.id, ...s.threadOrder]\n return { threads, threadOrder }\n }),\n\n onThreadDeleted: (threadId) =>\n set((s) => {\n const { [threadId]: _, ...threads } = s.threads\n const { [threadId]: _e, ...events } = s.events\n const { [threadId]: _r, ...runs } = s.runs\n const { [threadId]: _o, ...optimistic } = s.optimistic\n const { [threadId]: _k, ...optimisticKeys } = s.optimisticKeys\n const { [threadId]: _p, ...eventPagination } = s.eventPagination\n const threadOrder = s.threadOrder.filter((id) => id !== threadId)\n const subscriptions = new Set(s.subscriptions)\n subscriptions.delete(threadId)\n const loadingThreads = new Set(s.loadingThreads)\n loadingThreads.delete(threadId)\n // Clean up form states for events belonging to this thread\n const deletedEvents = s.events[threadId] ?? []\n const deletedEventIds = new Set(deletedEvents.map((e) => e.id))\n const formStates = { ...s.formStates }\n for (const key of Object.keys(formStates)) {\n if (deletedEventIds.has(key)) {\n delete formStates[key]\n }\n }\n return {\n threads,\n threadOrder,\n events,\n runs,\n optimistic,\n optimisticKeys,\n eventPagination,\n subscriptions,\n loadingThreads,\n formStates,\n }\n }),\n\n onThreadSnapshot: (thread, snapshotEvents, runs) =>\n set((s) => {\n const threads = { ...s.threads, [thread.id]: thread }\n const threadOrder = s.threadOrder.includes(thread.id)\n ? s.threadOrder\n : [thread.id, ...s.threadOrder]\n const loadingThreads = new Set(s.loadingThreads)\n loadingThreads.delete(thread.id)\n\n // Events may already exist from event.append arriving before the\n // snapshot (race between the two data paths). Existing array is\n // already in chronological order. Append only snapshot events we\n // don't have yet — never reorder what's already in place.\n const existing = s.events[thread.id] ?? []\n let mergedEvents: ThreadEvent[]\n if (existing.length === 0) {\n mergedEvents = snapshotEvents\n } else {\n const existingIds = new Set(existing.map((e) => e.id))\n const snapById = new Map(snapshotEvents.map((e) => [e.id, e]))\n const mergedExisting = existing.map((e) => {\n const snap = snapById.get(e.id)\n return snap ? mergeThreadEventById(e, snap) : e\n })\n const newFromSnapshot = snapshotEvents.filter((e) => !existingIds.has(e.id))\n mergedEvents =\n newFromSnapshot.length > 0 ? [...mergedExisting, ...newFromSnapshot] : mergedExisting\n }\n\n // Snapshot is authoritative — clear optimistic state for this thread.\n const optimistic = { ...s.optimistic }\n const optimisticKeys = { ...s.optimisticKeys }\n delete optimistic[thread.id]\n delete optimisticKeys[thread.id]\n\n return {\n threads,\n threadOrder,\n events: { ...s.events, [thread.id]: mergedEvents },\n runs: { ...s.runs, [thread.id]: runs },\n optimistic,\n optimisticKeys,\n loadingThreads,\n formStates: extractFormStates(mergedEvents, s.formStates),\n }\n }),\n\n onEventAppend: (threadId, newEvents) =>\n set((s) => {\n const existing = s.events[threadId] ?? []\n const existingIds = new Set(existing.map((e) => e.id))\n // Separate new events from updates to existing events\n const updates = new Map<string, ThreadEvent>()\n const appends: ThreadEvent[] = []\n for (const e of newEvents) {\n if (existingIds.has(e.id)) {\n const prev = existing.find((x) => x.id === e.id)!\n updates.set(e.id, mergeThreadEventById(prev, e))\n } else {\n appends.push(e)\n }\n }\n // Apply in-place updates then append new events\n const merged = updates.size > 0 ? existing.map((e) => updates.get(e.id) ?? e) : existing\n return {\n events: { ...s.events, [threadId]: [...merged, ...appends] },\n formStates: extractFormStates(appends, s.formStates),\n }\n }),\n\n reconcileEvents: (threadId, newEvents, resolvedClientEventIds) =>\n set((s) => {\n // Append confirmed events\n const existing = s.events[threadId] ?? []\n const existingIds = new Set(existing.map((e) => e.id))\n const mergedExisting =\n newEvents.length > 0\n ? existing.map((e) => {\n const up = newEvents.find((n) => n.id === e.id)\n return up ? mergeThreadEventById(e, up) : e\n })\n : existing\n const unique = newEvents.filter((e) => !existingIds.has(e.id))\n\n // Remove reconciled optimistic events\n let optEvents = s.optimistic[threadId] ?? []\n let optKeys = s.optimisticKeys[threadId] ?? []\n for (const clientEventId of resolvedClientEventIds) {\n const idx = optKeys.indexOf(clientEventId)\n if (idx >= 0) {\n optEvents = [...optEvents]\n optEvents.splice(idx, 1)\n optKeys = [...optKeys]\n optKeys.splice(idx, 1)\n }\n }\n\n return {\n events: { ...s.events, [threadId]: [...mergedExisting, ...unique] },\n optimistic: { ...s.optimistic, [threadId]: optEvents },\n optimisticKeys: { ...s.optimisticKeys, [threadId]: optKeys },\n }\n }),\n\n onEventListResult: (threadId, olderEvents, cursor, hasMore) =>\n set((s) => {\n const existing = s.events[threadId] ?? []\n const existingIds = new Set(existing.map((e) => e.id))\n const unique = olderEvents.filter((e) => !existingIds.has(e.id))\n return {\n events: { ...s.events, [threadId]: [...unique, ...existing] },\n eventPagination: {\n ...s.eventPagination,\n [threadId]: { cursor, hasMore },\n },\n }\n }),\n\n onRunUpsert: (run) =>\n set((s) => {\n const existing = s.runs[run.threadId] ?? []\n const idx = existing.findIndex((r) => r.id === run.id)\n const updated =\n idx >= 0 ? existing.map((r) => (r.id === run.id ? run : r)) : [...existing, run]\n return { runs: { ...s.runs, [run.threadId]: updated } }\n }),\n\n addOptimistic: (threadId, event, clientEventId) =>\n set((s) => ({\n optimistic: {\n ...s.optimistic,\n [threadId]: [...(s.optimistic[threadId] ?? []), event],\n },\n optimisticKeys: {\n ...s.optimisticKeys,\n [threadId]: [...(s.optimisticKeys[threadId] ?? []), clientEventId],\n },\n })),\n\n removeOptimistic: (threadId, clientEventId) =>\n set((s) => {\n const keys = s.optimisticKeys[threadId] ?? []\n const idx = keys.indexOf(clientEventId)\n if (idx < 0) return s\n const newKeys = [...keys]\n newKeys.splice(idx, 1)\n const newEvents = [...(s.optimistic[threadId] ?? [])]\n newEvents.splice(idx, 1)\n return {\n optimistic: { ...s.optimistic, [threadId]: newEvents },\n optimisticKeys: { ...s.optimisticKeys, [threadId]: newKeys },\n }\n }),\n\n addSubscription: (threadId) =>\n set((s) => {\n const subscriptions = new Set(s.subscriptions)\n subscriptions.add(threadId)\n const loadingThreads = new Set(s.loadingThreads)\n const alreadyHadEvents = (s.events[threadId]?.length ?? 0) > 0\n if (!alreadyHadEvents) {\n loadingThreads.add(threadId)\n }\n return { subscriptions, loadingThreads }\n }),\n\n removeSubscription: (threadId) =>\n set((s) => {\n const subscriptions = new Set(s.subscriptions)\n subscriptions.delete(threadId)\n const loadingThreads = new Set(s.loadingThreads)\n loadingThreads.delete(threadId)\n return { subscriptions, loadingThreads }\n }),\n\n onSettingsSnapshot: (fields, updatedAt) =>\n set(() => ({\n settings: { fields, updatedAt, isLoading: false },\n })),\n\n onSettingsPatch: (fieldId, value, updatedAt) =>\n set((s) => ({\n settings: {\n ...s.settings,\n updatedAt,\n fields: s.settings.fields.map((item) => {\n if (isSettingsFieldGroup(item)) {\n const hasField = item.fields.some((f) => f.id === fieldId)\n if (hasField) {\n return {\n ...item,\n fields: item.fields.map((f) => (f.id === fieldId ? { ...f, value } : f)),\n }\n }\n return item\n }\n return item.id === fieldId ? { ...item, value } : item\n }),\n },\n })),\n\n onFeedbackAck: (targetId, feedback) =>\n set((s) => ({\n feedback: { ...s.feedback, [targetId]: feedback },\n })),\n\n onAnalyticsEvent: (event) =>\n set((s) => {\n const events = [...s.analytics.events, event]\n const trimmed = events.length > 50 ? events.slice(-50) : events\n const counters = { ...s.analytics.counters }\n if (event.event === 'feedback.like') {\n counters.feedbackLikes += 1\n } else if (event.event === 'feedback.dislike') {\n counters.feedbackDislikes += 1\n } else {\n counters.totalRequests += 1\n }\n return { analytics: { events: trimmed, counters } }\n }),\n\n resetAnalytics: () =>\n set(() => ({\n analytics: {\n events: [],\n counters: { totalRequests: 0, feedbackLikes: 0, feedbackDislikes: 0 },\n },\n })),\n initFormState: (formEventId, defaults) =>\n set((s) => {\n if (s.formStates[formEventId]) return s\n return {\n formStates: {\n ...s.formStates,\n [formEventId]: {\n values: defaults,\n submitting: false,\n submitted: false,\n cancelled: false,\n },\n },\n }\n }),\n setFormSubmitting: (formEventId, submitting) =>\n set((s) => {\n const existing = s.formStates[formEventId]\n if (!existing) return s\n return {\n formStates: {\n ...s.formStates,\n [formEventId]: { ...existing, submitting },\n },\n }\n }),\n setFormValue: (formEventId, fieldName, value) =>\n set((s) => {\n const existing = s.formStates[formEventId]\n if (!existing || existing.submitted || existing.cancelled) return s\n return {\n formStates: {\n ...s.formStates,\n [formEventId]: {\n ...existing,\n values: { ...existing.values, [fieldName]: value },\n },\n },\n }\n }),\n setFormSubmitted: (formEventId) =>\n set((s) => {\n const existing = s.formStates[formEventId]\n if (!existing) return s\n return {\n formStates: {\n ...s.formStates,\n [formEventId]: { ...existing, submitting: false, submitted: true },\n },\n }\n }),\n setFormCancelled: (formEventId) =>\n set((s) => {\n const existing = s.formStates[formEventId]\n if (!existing) return s\n return {\n formStates: {\n ...s.formStates,\n [formEventId]: { ...existing, submitting: false, cancelled: true },\n },\n }\n }),\n },\n }))\n}\n","import { createContext, type ReactNode, useContext, useEffect, useMemo, useRef } from 'react'\nimport { useStore as useZustandStore } from 'zustand'\nimport { useShallow } from 'zustand/shallow'\nimport { AgentClient, type OnErrorCallback } from './client'\nimport { type AgentState, type AgentStore, createAgentStore } from './store'\n\ninterface AgentContextValue {\n store: AgentStore\n client: AgentClient\n}\n\nconst AgentContext = createContext<AgentContextValue | null>(null)\n\nexport interface AgentProviderProps {\n url?: string\n agentId?: string\n organizationId?: string\n workspaceId?: string\n userId?: string\n userName?: string\n userEmail?: string\n identityIds?: string[]\n systemRole?: string\n organizationRole?: string\n workspaceRole?: string\n authToken?: string\n uploadUrl?: string\n onError?: OnErrorCallback\n children: ReactNode\n}\n\nexport function AgentProvider({\n url,\n agentId,\n organizationId,\n workspaceId,\n userId,\n userName,\n userEmail,\n identityIds,\n systemRole,\n organizationRole,\n workspaceRole,\n authToken,\n uploadUrl,\n onError,\n children,\n}: AgentProviderProps) {\n const storeRef = useRef<AgentStore | undefined>(undefined)\n const clientRef = useRef<AgentClient | undefined>(undefined)\n\n if (!storeRef.current) {\n storeRef.current = createAgentStore()\n clientRef.current = new AgentClient(storeRef.current.getState().actions)\n }\n\n // Update onError callback\n useEffect(() => {\n clientRef.current?.setOnError(onError ?? null)\n }, [onError])\n\n // Update upload URL\n useEffect(() => {\n clientRef.current?.setUploadUrl(uploadUrl)\n }, [uploadUrl])\n\n // HTTP uploads require agent_id before WS connect completes\n useEffect(() => {\n clientRef.current?.setUploadAgentId(agentId)\n }, [agentId])\n\n // Stable key for identityIds to avoid reference-equality churn\n const identityIdsKey = identityIds?.join(',') ?? ''\n\n // Connect/disconnect lifecycle — skips connection when url or agentId are missing\n useEffect(() => {\n if (!url || !agentId) return\n clientRef.current?.connect(url, agentId, {\n organizationId,\n workspaceId,\n userId,\n userName,\n userEmail,\n identityIds: identityIdsKey ? identityIdsKey.split(',') : undefined,\n systemRole,\n organizationRole,\n workspaceRole,\n authToken,\n })\n return () => clientRef.current?.disconnect()\n }, [\n url,\n agentId,\n organizationId,\n workspaceId,\n userId,\n userName,\n userEmail,\n identityIdsKey,\n systemRole,\n organizationRole,\n workspaceRole,\n authToken,\n ])\n\n // Stable context value — refs never change after initial creation\n const contextValue = useMemo<AgentContextValue>(\n () => ({ store: storeRef.current!, client: clientRef.current! }),\n []\n )\n\n return <AgentContext.Provider value={contextValue}>{children}</AgentContext.Provider>\n}\n\n// Internal hook for other hooks to access context\nexport function useAgentContext(): AgentContextValue {\n const ctx = useContext(AgentContext)\n if (!ctx) {\n throw new Error('useAgentContext must be used within a <AgentProvider>')\n }\n return ctx\n}\n\n// Selector hook with Object.is equality (for primitives)\nexport function useStore<T>(selector: (state: AgentState) => T): T {\n const { store } = useAgentContext()\n return useZustandStore(store, selector)\n}\n\n// Selector hook with shallow equality (for objects/arrays)\nexport function useShallowStore<T>(selector: (state: AgentState) => T): T {\n const { store } = useAgentContext()\n return useZustandStore(store, useShallow(selector))\n}\n","import { useCallback } from 'react'\nimport { useAgentContext, useShallowStore } from '../provider'\n\nexport function useAnalytics() {\n const { client } = useAgentContext()\n\n const events = useShallowStore((s) => s.analytics.events)\n const counters = useShallowStore((s) => s.analytics.counters)\n\n const subscribe = useCallback(() => client.subscribeAnalytics(), [client])\n const unsubscribe = useCallback(() => client.unsubscribeAnalytics(), [client])\n\n return { events, counters, subscribe, unsubscribe }\n}\n","import { useCallback, useEffect, useRef, useState } from 'react'\n\nfunction getPreferredMimeType(): string {\n if (typeof MediaRecorder !== 'undefined') {\n if (MediaRecorder.isTypeSupported('audio/webm;codecs=opus')) return 'audio/webm;codecs=opus'\n if (MediaRecorder.isTypeSupported('audio/webm')) return 'audio/webm'\n if (MediaRecorder.isTypeSupported('audio/mp4')) return 'audio/mp4'\n }\n return 'audio/webm'\n}\n\nexport function useAudioRecorder() {\n const [isRecording, setIsRecording] = useState(false)\n const [duration, setDuration] = useState(0)\n const mediaRecorderRef = useRef<MediaRecorder | null>(null)\n const streamRef = useRef<MediaStream | null>(null)\n const chunksRef = useRef<Blob[]>([])\n const timerRef = useRef<ReturnType<typeof setInterval> | null>(null)\n const startTimeRef = useRef<number>(0)\n const resolveStopRef = useRef<((blob: Blob) => void) | null>(null)\n const audioContextRef = useRef<AudioContext | null>(null)\n const analyserRef = useRef<AnalyserNode | null>(null)\n\n const releaseAudioContext = useCallback(() => {\n analyserRef.current = null\n if (audioContextRef.current && audioContextRef.current.state !== 'closed') {\n audioContextRef.current.close()\n }\n audioContextRef.current = null\n }, [])\n\n const releaseStream = useCallback(() => {\n streamRef.current?.getTracks().forEach((t) => {\n t.stop()\n })\n streamRef.current = null\n releaseAudioContext()\n }, [releaseAudioContext])\n\n const clearTimer = useCallback(() => {\n if (timerRef.current) {\n clearInterval(timerRef.current)\n timerRef.current = null\n }\n }, [])\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (mediaRecorderRef.current?.state === 'recording') {\n mediaRecorderRef.current.stop()\n }\n releaseStream()\n clearTimer()\n }\n }, [releaseStream, clearTimer])\n\n const start = useCallback(async () => {\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true })\n streamRef.current = stream\n\n const audioContext = new AudioContext()\n audioContextRef.current = audioContext\n const source = audioContext.createMediaStreamSource(stream)\n const analyser = audioContext.createAnalyser()\n analyser.fftSize = 256\n source.connect(analyser)\n analyserRef.current = analyser\n\n const mimeType = getPreferredMimeType()\n const recorder = new MediaRecorder(stream, { mimeType })\n mediaRecorderRef.current = recorder\n chunksRef.current = []\n\n recorder.ondataavailable = (e) => {\n if (e.data.size > 0) chunksRef.current.push(e.data)\n }\n\n recorder.onstop = () => {\n const blob = new Blob(chunksRef.current, { type: mimeType.split(';')[0] })\n releaseStream()\n clearTimer()\n resolveStopRef.current?.(blob)\n resolveStopRef.current = null\n }\n\n startTimeRef.current = Date.now()\n setDuration(0)\n timerRef.current = setInterval(() => {\n setDuration(Math.floor((Date.now() - startTimeRef.current) / 1000))\n }, 1000)\n\n recorder.start()\n setIsRecording(true)\n }, [releaseStream, clearTimer])\n\n const stop = useCallback((): Promise<Blob> => {\n return new Promise((resolve, reject) => {\n if (!mediaRecorderRef.current || mediaRecorderRef.current.state === 'inactive') {\n reject(new Error('No active recording to stop'))\n return\n }\n resolveStopRef.current = resolve\n mediaRecorderRef.current.stop()\n setIsRecording(false)\n setDuration(0)\n })\n }, [])\n\n const cancel = useCallback(() => {\n resolveStopRef.current = null\n if (mediaRecorderRef.current?.state === 'recording') {\n mediaRecorderRef.current.stop()\n }\n releaseStream()\n clearTimer()\n setIsRecording(false)\n setDuration(0)\n }, [releaseStream, clearTimer])\n\n return { start, stop, cancel, isRecording, duration, analyserNode: analyserRef.current }\n}\n","import { useCallback } from 'react'\nimport { useAgentContext, useStore } from '../provider'\n\nexport function useConnection() {\n const { client } = useAgentContext()\n\n const status = useStore((s) => s.connection.status)\n const error = useStore((s) => s.connection.error)\n const sendError = useStore((s) => s.connection.sendError)\n const reconnectFailed = useStore((s) => s.connection.reconnectFailed)\n\n const reconnect = useCallback(() => client.retry(), [client])\n const dismissSendError = useCallback(() => {\n client.clearSendError()\n }, [client])\n\n return { status, error, sendError, dismissSendError, reconnectFailed, reconnect }\n}\n","import { useCallback } from 'react'\nimport { useAgentContext, useStore } from '../provider'\nimport type { FeedbackTarget } from '../types'\n\nexport function useFeedback(targetId: string, targetType: FeedbackTarget = 'event') {\n const { client } = useAgentContext()\n\n const feedback = useStore((s) => s.feedback[targetId] ?? null)\n\n const like = useCallback(\n (reason?: string, classification?: string) =>\n client.sendFeedback(targetType, targetId, 'like', reason, classification),\n [client, targetType, targetId]\n )\n\n const dislike = useCallback(\n (reason?: string, classification?: string) =>\n client.sendFeedback(targetType, targetId, 'dislike', reason, classification),\n [client, targetType, targetId]\n )\n\n return { feedback, like, dislike }\n}\n","import { useCallback, useEffect, useState } from 'react'\nimport { useAgentContext, useStore } from '../provider'\nimport type { FormElement, FormEventData } from '../types'\n\nexport function useForm(formEventId: string, formData: FormEventData, threadId?: string) {\n const { client, store } = useAgentContext()\n const formState = useStore((s) => s.formStates[formEventId])\n const [errors, setErrors] = useState<Record<string, string>>({})\n\n // Initialize form state with defaults\n useEffect(() => {\n const defaults: Record<string, unknown> = {}\n for (const el of formData.elements) {\n if ('default' in el && el.default != null) {\n defaults[el.name] = el.default\n }\n }\n store.getState().actions.initFormState(formEventId, defaults)\n }, [formEventId, formData.elements, store])\n\n const values = formState?.values ?? {}\n const isSubmitting = formState?.submitting ?? false\n const isSubmitted = formState?.submitted ?? false\n const isCancelled = formState?.cancelled ?? false\n const isDisabled = isSubmitting || isSubmitted || isCancelled\n\n const setValue = useCallback(\n (fieldName: string, value: unknown) => {\n store.getState().actions.setFormValue(formEventId, fieldName, value)\n setErrors((prev) => {\n if (!prev[fieldName]) return prev\n const next = { ...prev }\n delete next[fieldName]\n return next\n })\n },\n [formEventId, store]\n )\n\n const validate = useCallback((): boolean => {\n const currentValues = store.getState().formStates[formEventId]?.values ?? {}\n const newErrors: Record<string, string> = {}\n\n for (const el of formData.elements) {\n if (!el.required) continue\n const val = currentValues[el.name]\n if (isEmptyValue(el, val)) {\n newErrors[el.name] = 'Required'\n }\n }\n\n setErrors(newErrors)\n return Object.keys(newErrors).length === 0\n }, [formEventId, formData.elements, store])\n\n const submit = useCallback(async () => {\n const state = store.getState()\n const fs = state.formStates[formEventId]\n if (!fs || fs.submitting || fs.submitted || fs.cancelled) return\n if (!validate()) return\n\n state.actions.setFormSubmitting(formEventId, true)\n const currentValues = state.formStates[formEventId]?.values ?? {}\n\n if (!threadId) {\n state.actions.setFormSubmitted(formEventId)\n return\n }\n\n try {\n await client.sendFormResponse({\n threadId,\n formEventId,\n cancelled: false,\n values: currentValues,\n })\n store.getState().actions.setFormSubmitted(formEventId)\n } catch {\n store.getState().actions.setFormSubmitting(formEventId, false)\n }\n }, [formEventId, threadId, validate, client, store])\n\n const cancel = useCallback(async () => {\n const state = store.getState()\n const fs = state.formStates[formEventId]\n if (!fs || fs.submitting || fs.submitted || fs.cancelled) return\n\n state.actions.setFormSubmitting(formEventId, true)\n\n if (!threadId) {\n state.actions.setFormCancelled(formEventId)\n return\n }\n\n try {\n await client.sendFormResponse({\n threadId,\n formEventId,\n cancelled: true,\n values: {},\n })\n store.getState().actions.setFormCancelled(formEventId)\n } catch {\n store.getState().actions.setFormSubmitting(formEventId, false)\n }\n }, [formEventId, threadId, client, store])\n\n return {\n values,\n errors,\n setValue,\n validate,\n submit,\n cancel,\n isSubmitting,\n isSubmitted,\n isCancelled,\n isDisabled,\n }\n}\n\nfunction isEmptyValue(element: FormElement, val: unknown): boolean {\n if (val == null) return true\n if (typeof val === 'string' && val.trim() === '') return true\n if (element.type === 'checkbox_input' && Array.isArray(val) && val.length === 0) return true\n return false\n}\n","import { useCallback, useState } from 'react'\n\nexport interface FormFileMetadata {\n id?: string\n filename: string\n public_url?: string\n mime_type?: string\n size?: number\n [key: string]: unknown\n}\n\nexport function useFormFileUpload() {\n const [isUploading, setIsUploading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n const upload = useCallback(\n async (params: {\n file: File\n uploadUrl: string\n fieldId: string\n agentId: string\n runId: string\n threadId: string\n }): Promise<FormFileMetadata> => {\n setIsUploading(true)\n setError(null)\n try {\n const aid = (params.agentId || '').trim()\n if (!aid) {\n throw new Error('agentId is required for upload')\n }\n const formData = new FormData()\n formData.append('file', params.file)\n formData.append('field_id', params.fieldId)\n formData.append('source', 'chat')\n formData.append('agent_id', aid)\n formData.append('run_id', params.runId)\n formData.append('thread_id', params.threadId)\n\n const response = await fetch(params.uploadUrl, {\n method: 'POST',\n body: formData,\n })\n\n if (!response.ok) {\n const detail = await response.text().catch(() => '')\n throw new Error(detail || `Upload failed (${response.status})`)\n }\n\n return await response.json()\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Upload failed'\n setError(message)\n throw err\n } finally {\n setIsUploading(false)\n }\n },\n []\n )\n\n const clearError = useCallback(() => setError(null), [])\n\n return { upload, isUploading, error, clearError }\n}\n","import { useCallback } from 'react'\nimport { useAgentContext } from '../provider'\nimport type { ContentPart } from '../types'\n\nexport function useMessage() {\n const { client } = useAgentContext()\n\n const send = useCallback(\n (params: {\n text?: string\n threadId?: string\n content?: ContentPart[]\n metadata?: Record<string, unknown>\n }) => {\n return client.sendMessage(params)\n },\n [client]\n )\n\n return { send }\n}\n","import { useCallback } from 'react'\nimport { useAgentContext, useShallowStore, useStore } from '../provider'\n\nexport function useSettings() {\n const { client } = useAgentContext()\n\n const fields = useShallowStore((s) => s.settings.fields)\n const updatedAt = useStore((s) => s.settings.updatedAt)\n const isLoading = useStore((s) => s.settings.isLoading)\n\n const subscribe = useCallback(\n (options?: { audience?: 'creator' | 'user'; agentOwnerUserId?: string | null }) =>\n client.subscribeSettings(options),\n [client]\n )\n const unsubscribe = useCallback(() => client.unsubscribeSettings(), [client])\n\n const patchField = useCallback(\n (fieldId: string, value: unknown) => client.patchSetting(fieldId, value),\n [client]\n )\n\n return { fields, updatedAt, isLoading, subscribe, unsubscribe, patchField }\n}\n","import { useCallback, useState } from 'react'\n\nexport interface SettingsFileMetadata {\n id?: string\n filename: string\n public_url?: string\n mime_type?: string\n size?: number\n [key: string]: unknown\n}\n\nexport function useSettingsFileUpload() {\n const [isUploading, setIsUploading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n const upload = useCallback(\n async (params: {\n file: File\n uploadUrl: string\n fieldId: string\n agentId: string\n }): Promise<SettingsFileMetadata> => {\n setIsUploading(true)\n setError(null)\n try {\n const formData = new FormData()\n formData.append('file', params.file)\n formData.append('source', 'settings')\n formData.append('field_id', params.fieldId)\n formData.append('agent_id', params.agentId)\n\n const response = await fetch(params.uploadUrl, {\n method: 'POST',\n body: formData,\n })\n\n if (!response.ok) {\n const detail = await response.text().catch(() => '')\n throw new Error(detail || `Upload failed (${response.status})`)\n }\n\n return await response.json()\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Upload failed'\n setError(message)\n throw err\n } finally {\n setIsUploading(false)\n }\n },\n []\n )\n\n const clearError = useCallback(() => setError(null), [])\n\n return { upload, isUploading, error, clearError }\n}\n","import { useCallback, useEffect, useMemo } from 'react'\nimport { useAgentContext, useStore } from '../provider'\nimport type { Run, Thread, ThreadEvent, ThreadState } from '../types'\n\nconst EMPTY_ARRAY: ThreadEvent[] = []\nconst EMPTY_RUNS: Run[] = []\n\nexport function useThreadDetails(threadId: string | null): ThreadState {\n const { client } = useAgentContext()\n\n // Auto-subscribe/unsubscribe\n useEffect(() => {\n if (!threadId) return\n client.subscribe(threadId)\n return () => client.unsubscribe(threadId)\n }, [threadId, client])\n\n // All selectors return direct store references or constants — Object.is is sufficient\n const thread = useStore((s): Thread | null => (threadId ? (s.threads[threadId] ?? null) : null))\n const isLoading = useStore((s) => (threadId ? s.loadingThreads.has(threadId) : false))\n const isWaiting = useStore((s) => {\n if (!threadId) return false\n const r = s.runs[threadId]\n return r ? r.some((run) => run.status === 'running') : false\n })\n\n const optimistic = useStore((s) =>\n threadId ? (s.optimistic[threadId] ?? EMPTY_ARRAY) : EMPTY_ARRAY\n )\n const confirmed = useStore((s) => (threadId ? (s.events[threadId] ?? EMPTY_ARRAY) : EMPTY_ARRAY))\n const runs = useStore((s) => (threadId ? (s.runs[threadId] ?? EMPTY_RUNS) : EMPTY_RUNS))\n\n // Merge with useMemo — stable ref when inputs are the same arrays\n const events = useMemo(\n () => (optimistic.length ? [...confirmed, ...optimistic] : confirmed),\n [optimistic, confirmed]\n )\n\n return { thread, events, runs, isLoading, isWaiting }\n}\n\nexport function useThreadEvents(threadId: string | null) {\n const { client } = useAgentContext()\n\n const hasOlderEvents = useStore((s) =>\n threadId ? (s.eventPagination[threadId]?.hasMore ?? false) : false\n )\n\n const loadOlderEvents = useCallback(\n (limit?: number) => {\n if (threadId) client.loadOlderEvents(threadId, limit)\n },\n [threadId, client]\n )\n\n return { hasOlderEvents, loadOlderEvents }\n}\n","import { useCallback, useMemo } from 'react'\nimport { useAgentContext, useStore } from '../provider'\n\n/** Lightweight read-only hook — thread list, count, and loading state. */\nexport function useThreadsList() {\n const threadOrder = useStore((s) => s.threadOrder)\n const threadMap = useStore((s) => s.threads)\n\n const threads = useMemo(\n () =>\n threadOrder.flatMap((id) => {\n const t = threadMap[id]\n return t ? [t] : []\n }),\n [threadOrder, threadMap]\n )\n\n const isLoading = useStore((s) => s.connection.status !== 'connected')\n const hasMore = useStore((s) => s.threadListHasMore)\n const totalCount = useStore((s) => s.threadListTotalCount)\n\n return { threads, isLoading, hasMore, totalCount }\n}\n\n/** Actions-only hook (delete, load more). */\nexport function useThreadsActions() {\n const { client } = useAgentContext()\n\n const deleteThread = useCallback((threadId: string) => client.deleteThread(threadId), [client])\n const loadMore = useCallback((limit?: number) => client.loadMoreThreads(limit), [client])\n\n return { deleteThread, loadMore }\n}\n","import { useCallback, useRef, useState } from 'react'\nimport type { UploadResult } from '../client'\nimport { useAgentContext } from '../provider'\n\nexport function useUpload() {\n const { client } = useAgentContext()\n const [isUploading, setIsUploading] = useState(false)\n const activeCountRef = useRef(0)\n\n const upload = useCallback(\n async (file: File | Blob, options?: { filename?: string }): Promise<UploadResult> => {\n activeCountRef.current++\n setIsUploading(true)\n try {\n return await client.upload(file, options)\n } finally {\n activeCountRef.current--\n if (activeCountRef.current === 0) {\n setIsUploading(false)\n }\n }\n },\n [client]\n )\n\n return { upload, isUploading }\n}\n"]}
|