@rodrigocoliveira/agno-client 1.2.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/client.ts", "../src/stores/message-store.ts", "../src/managers/config-manager.ts", "../src/managers/session-manager.ts", "../src/managers/memory-manager.ts", "../src/managers/knowledge-manager.ts", "../src/managers/eval-manager.ts", "../src/managers/traces-manager.ts", "../src/managers/schedule-manager.ts", "../src/managers/approval-manager.ts", "../src/managers/component-manager.ts", "../src/managers/session-state-manager.ts", "../src/processors/event-processor.ts", "../src/utils/json-markdown.ts", "../src/parsers/stream-parser.ts", "../src/utils/logger.ts", "../src/index.ts"],
3
+ "sources": ["../src/client.ts", "../src/stores/message-store.ts", "../src/managers/config-manager.ts", "../src/utils/parse-tool-arg.ts", "../src/managers/session-manager.ts", "../src/managers/memory-manager.ts", "../src/managers/knowledge-manager.ts", "../src/managers/eval-manager.ts", "../src/managers/traces-manager.ts", "../src/managers/schedule-manager.ts", "../src/managers/approval-manager.ts", "../src/managers/component-manager.ts", "../src/managers/session-state-manager.ts", "../src/processors/event-processor.ts", "../src/utils/json-markdown.ts", "../src/parsers/stream-parser.ts", "../src/utils/logger.ts", "../src/index.ts"],
4
4
  "sourcesContent": [
5
- "import EventEmitter from 'eventemitter3';\nimport type {\n AgnoClientConfig,\n ChatMessage,\n ImageData,\n AudioData,\n UserFileAttachment,\n RunResponse,\n SessionEntry,\n AgentDetails,\n TeamDetails,\n ClientState,\n ToolCall,\n CustomEventData,\n AgentSessionDetailSchema,\n TeamSessionDetailSchema,\n RunSchema,\n TeamRunSchema,\n CreateSessionRequest,\n UpdateSessionRequest,\n UserMemory,\n MemoriesListResponse,\n ListMemoriesParams,\n CreateMemoryRequest,\n UpdateMemoryRequest,\n DeleteMultipleMemoriesRequest,\n UserMemoryStatsResponse,\n UserMemoryStatsParams,\n KnowledgeConfigResponse,\n ContentResponse,\n ContentStatusResponse,\n ContentListResponse,\n ContentListOptions,\n VectorSearchRequest,\n VectorSearchResponse,\n ContentUpdateRequest,\n MetricsResponse,\n MetricsOptions,\n RefreshMetricsOptions,\n DayAggregatedMetrics,\n EvalSchema,\n EvalRunsListResponse,\n ListEvalRunsParams,\n ExecuteEvalRequest,\n UpdateEvalRunRequest,\n TraceDetail,\n TraceNode,\n ListTracesOptions,\n GetTraceOptions,\n GetTraceSessionStatsOptions,\n ScheduleResponse,\n ScheduleCreate,\n ScheduleUpdate,\n ScheduleStateResponse,\n ScheduleRunResponse,\n SchedulesListResponse,\n ScheduleRunsListResponse,\n ListSchedulesParams,\n ListScheduleRunsParams,\n ApprovalResponse,\n ApprovalResolve,\n ApprovalCountResponse,\n ApprovalStatusResponse,\n ApprovalsListResponse,\n ListApprovalsParams,\n ComponentResponse,\n ComponentCreate,\n ComponentUpdate,\n ComponentConfigResponse,\n ConfigCreate,\n ConfigUpdate,\n ComponentsListResponse,\n ListComponentsParams,\n} from '@rodrigocoliveira/agno-types';\nimport { RunEvent } from '@rodrigocoliveira/agno-types';\nimport { MessageStore } from './stores/message-store';\nimport { ConfigManager } from './managers/config-manager';\nimport { SessionManager } from './managers/session-manager';\nimport { MemoryManager } from './managers/memory-manager';\nimport { KnowledgeManager } from './managers/knowledge-manager';\nimport { EvalManager } from './managers/eval-manager';\nimport { TracesManager, PaginatedTracesResult, PaginatedTraceSessionStatsResult } from './managers/traces-manager';\nimport { ScheduleManager } from './managers/schedule-manager';\nimport { ApprovalManager } from './managers/approval-manager';\nimport { ComponentManager } from './managers/component-manager';\nimport { SessionStateManager } from './managers/session-state-manager';\nimport { EventProcessor } from './processors/event-processor';\nimport { streamResponse } from './parsers/stream-parser';\nimport { Logger } from './utils/logger';\n\n/**\n * Safely converts a Unix timestamp to ISO string with validation\n */\nfunction toSafeISOString(timestamp: number | undefined): string {\n const now = Date.now();\n const ts = timestamp ? timestamp * 1000 : now;\n\n // Validate timestamp is reasonable (between 2000 and 2100)\n const MIN_TIMESTAMP = 946684800000; // 2000-01-01\n const MAX_TIMESTAMP = 4102444800000; // 2100-01-01\n\n if (ts < MIN_TIMESTAMP || ts > MAX_TIMESTAMP || !Number.isFinite(ts)) {\n Logger.warn(`Invalid timestamp: ${timestamp}, using current time`);\n return new Date(now).toISOString();\n }\n\n return new Date(ts).toISOString();\n}\n\n/**\n * Main Agno client class\n * Provides stateful management of agent/team interactions with streaming support\n */\nexport class AgnoClient extends EventEmitter {\n private messageStore: MessageStore;\n private configManager: ConfigManager;\n private sessionManager: SessionManager;\n private memoryManager: MemoryManager;\n private knowledgeManager: KnowledgeManager;\n private evalManager: EvalManager;\n private tracesManager: TracesManager;\n private scheduleManager: ScheduleManager;\n private approvalManager: ApprovalManager;\n private componentManager: ComponentManager;\n private sessionStateManager: SessionStateManager;\n private eventProcessor: EventProcessor;\n private state: ClientState;\n private pendingUISpecs: Map<string, any>; // toolCallId -> UIComponentSpec\n private runCompletedSuccessfully: boolean = false;\n private currentRunId?: string;\n private abortController?: AbortController;\n\n constructor(config: AgnoClientConfig) {\n super();\n this.messageStore = new MessageStore();\n this.configManager = new ConfigManager(config);\n this.sessionManager = new SessionManager();\n this.memoryManager = new MemoryManager();\n this.knowledgeManager = new KnowledgeManager();\n this.evalManager = new EvalManager();\n this.tracesManager = new TracesManager();\n this.scheduleManager = new ScheduleManager();\n this.approvalManager = new ApprovalManager();\n this.componentManager = new ComponentManager();\n this.sessionStateManager = new SessionStateManager();\n this.eventProcessor = new EventProcessor();\n this.pendingUISpecs = new Map();\n this.state = {\n isStreaming: false,\n isRefreshing: false,\n isEndpointActive: false,\n agents: [],\n teams: [],\n sessions: [],\n isPaused: false,\n pausedRunId: undefined,\n toolsAwaitingExecution: undefined,\n currentRunId: undefined,\n isCancelling: false,\n memories: [],\n memoryTopics: [],\n traces: [],\n traceSessionStats: [],\n schedules: [],\n approvals: [],\n components: [],\n sessionState: null,\n isSessionStateRefreshing: false,\n };\n }\n\n /**\n * Get current messages\n */\n getMessages(): ChatMessage[] {\n return this.messageStore.getMessages();\n }\n\n /**\n * Get current configuration\n */\n getConfig(): AgnoClientConfig {\n return this.configManager.getConfig();\n }\n\n /**\n * Get current state\n */\n getState(): ClientState {\n return { ...this.state };\n }\n\n /**\n * Update configuration\n */\n updateConfig(updates: Partial<AgnoClientConfig>): void {\n this.configManager.updateConfig(updates);\n this.emit('config:change', this.configManager.getConfig());\n }\n\n /**\n * Clear all messages\n */\n clearMessages(): void {\n this.messageStore.clear();\n this.configManager.setSessionId(undefined);\n this.pendingUISpecs.clear(); // Clear any pending UI specs to prevent memory leaks\n this.state.errorMessage = undefined;\n this.sessionStateManager.invalidate();\n if (this.sessionStateManager.clear()) {\n this.state.sessionState = null;\n this.emit('session-state:change', null);\n }\n this.emit('message:update', this.messageStore.getMessages());\n this.emit('state:change', this.getState());\n }\n\n /**\n * Get the current cached session_state (backend-managed per-session dict).\n * Populated from `loadSession`, `RunCompleted` chunks, custom events, or\n * `refreshSessionState()`. Returns null when unknown.\n */\n getSessionState<T extends Record<string, unknown> = Record<string, unknown>>():\n | T\n | null {\n return this.sessionStateManager.get() as T | null;\n }\n\n /**\n * Replace session_state in the cache and persist via PATCH /sessions/{id}.\n * Emits `session-state:change` and `state:change` on success.\n */\n async setSessionState(\n state: Record<string, unknown>,\n options?: { params?: Record<string, string> }\n ): Promise<void> {\n const sessionId = this.configManager.getSessionId();\n if (!sessionId) {\n throw new Error('setSessionState requires an active session — call sendMessage or loadSession first.');\n }\n await this.updateSession(sessionId, { session_state: state }, options);\n this.applySessionState(state, { source: 'manual-set' });\n }\n\n /**\n * Re-fetch the active session's session_state from the backend. Used as the\n * escape hatch when streamed sources are unreliable (e.g., team runs where\n * TeamRunCompleted does not carry session_state).\n */\n async refreshSessionState(\n options?: { params?: Record<string, string>; silent?: boolean }\n ): Promise<Record<string, unknown> | null> {\n const sessionId = this.configManager.getSessionId();\n if (!sessionId) return null;\n\n const epoch = this.sessionStateManager.currentEpoch();\n if (!options?.silent) {\n this.state.isSessionStateRefreshing = true;\n this.emit('session-state:refresh:start');\n this.emit('state:change', this.getState());\n }\n\n try {\n const detail = await this.getSessionById(sessionId, { params: options?.params });\n if (!this.sessionStateManager.isEpochCurrent(epoch)) {\n // The user switched sessions mid-refresh — discard this response.\n return null;\n }\n const next = (detail.session_state ?? null) as Record<string, unknown> | null;\n this.applySessionState(next, { source: 'refresh' });\n return next;\n } finally {\n if (!options?.silent && this.sessionStateManager.isEpochCurrent(epoch)) {\n this.state.isSessionStateRefreshing = false;\n this.emit('session-state:refresh:end');\n this.emit('state:change', this.getState());\n }\n }\n }\n\n /**\n * Internal: push a new session_state into the cache and notify listeners.\n * Guards against no-op writes and exposes the origin for debugging.\n */\n private applySessionState(\n next: Record<string, unknown> | null | undefined,\n meta: { source: 'custom-event' | 'run-completed' | 'refresh' | 'load-session' | 'manual-set' }\n ): void {\n const changed = this.sessionStateManager.set(next ?? null);\n if (!changed) return;\n this.state.sessionState = this.sessionStateManager.get();\n Logger.debug(`[AgnoClient] session_state updated via ${meta.source}`);\n this.emit('session-state:change', this.state.sessionState);\n this.emit('state:change', this.getState());\n }\n\n /**\n * Send a message to the agent/team (streaming)\n *\n * To cancel a running request, use the `cancelRun()` method which:\n * 1. Aborts the local fetch stream (immediate UI feedback)\n * 2. Notifies the backend to stop processing (saves compute costs)\n */\n async sendMessage(\n message: string | FormData,\n options?: { headers?: Record<string, string>; params?: Record<string, string> }\n ): Promise<void> {\n if (this.state.isStreaming) {\n throw new Error('Already streaming a message');\n }\n\n // Reset completion flag for new message\n this.runCompletedSuccessfully = false;\n\n // Create new AbortController for this request\n this.abortController = new AbortController();\n\n const runUrl = this.configManager.getRunUrl();\n if (!runUrl) {\n throw new Error('No agent or team selected');\n }\n\n this.state.isStreaming = true;\n this.state.errorMessage = undefined;\n this.emit('stream:start');\n this.emit('state:change', this.getState());\n\n const formData = message instanceof FormData ? message : new FormData();\n if (typeof message === 'string') {\n formData.append('message', message);\n }\n\n // Remove previous error messages if retrying\n const lastMessage = this.messageStore.getLastMessage();\n if (lastMessage?.streamingError) {\n const secondLast = this.messageStore.getMessages()[\n this.messageStore.getMessages().length - 2\n ];\n if (secondLast?.role === 'user') {\n this.messageStore.removeLastMessages(2);\n }\n }\n\n // Extract file metadata from FormData for immediate UI rendering\n const userImages: ImageData[] = [];\n const userAudio: AudioData[] = [];\n const userFiles: UserFileAttachment[] = [];\n\n if (message instanceof FormData) {\n // Agno API uses a single \"files\" field for all media types\n const entries = message.getAll('files');\n for (const entry of entries) {\n if (typeof entry !== 'string') {\n const file = entry as File;\n const url = URL.createObjectURL(file);\n const mimeType = file.type || '';\n\n if (mimeType.startsWith('image/')) {\n userImages.push({ url, revised_prompt: file.name || 'Uploaded image' });\n } else if (mimeType.startsWith('audio/')) {\n userAudio.push({ url, mime_type: mimeType });\n } else {\n userFiles.push({\n name: file.name || 'file',\n type: mimeType,\n url,\n size: file.size,\n });\n }\n }\n }\n }\n\n // Add user message\n this.messageStore.addMessage({\n role: 'user',\n content: formData.get('message') as string,\n created_at: Math.floor(Date.now() / 1000),\n ...(userImages.length > 0 ? { images: userImages } : {}),\n ...(userAudio.length > 0 ? { audio: userAudio } : {}),\n ...(userFiles.length > 0 ? { files: userFiles } : {}),\n });\n\n // Add placeholder agent message\n this.messageStore.addMessage({\n role: 'agent',\n content: '',\n tool_calls: [],\n streamingError: false,\n created_at: Math.floor(Date.now() / 1000) + 1,\n });\n\n this.emit('message:update', this.messageStore.getMessages());\n this.eventProcessor.reset();\n\n let newSessionId = this.configManager.getSessionId();\n\n formData.append('stream', 'true');\n formData.append('session_id', newSessionId ?? '');\n\n // Add user_id if configured\n const userId = this.configManager.getUserId();\n if (userId) {\n formData.append('user_id', userId);\n }\n\n // For team mode, control whether backend sends member events\n if (this.configManager.getMode() === 'team') {\n const streamMembers = this.configManager.getStreamMemberEvents();\n formData.append('stream_member_events', String(streamMembers));\n }\n\n await this.executeStream({\n apiUrl: runUrl,\n requestBody: formData,\n signal: this.abortController.signal,\n perRequestHeaders: options?.headers,\n perRequestParams: options?.params,\n onChunk: (chunk: RunResponse) => {\n this.handleChunk(chunk, newSessionId, formData.get('message') as string);\n\n if (\n chunk.event === RunEvent.RunStarted ||\n chunk.event === RunEvent.TeamRunStarted ||\n chunk.event === RunEvent.ReasoningStarted ||\n chunk.event === RunEvent.TeamReasoningStarted\n ) {\n if (chunk.session_id) {\n newSessionId = chunk.session_id;\n this.configManager.setSessionId(chunk.session_id);\n }\n }\n },\n onError: (error) => {\n this.handleError(error, newSessionId);\n },\n onComplete: async () => {\n this.state.isStreaming = false;\n this.currentRunId = undefined;\n this.state.currentRunId = undefined;\n this.abortController = undefined;\n this.emit('stream:end');\n this.emit('message:complete', this.messageStore.getMessages());\n this.emit('state:change', this.getState());\n\n // Trigger refresh if run completed successfully\n if (this.runCompletedSuccessfully) {\n this.runCompletedSuccessfully = false;\n\n // Team runs need an out-of-band session_state fetch because\n // TeamRunCompleted does not carry the field on the wire.\n // See scripts/verify-session-state/FINDINGS.md.\n const cfg = this.configManager.getConfig();\n const shouldRefreshTeamState =\n this.configManager.getMode() === 'team' &&\n (cfg.refreshTeamSessionStateOnStreamEnd ?? true);\n if (shouldRefreshTeamState) {\n try {\n await this.refreshSessionState({ silent: false });\n } catch (err) {\n Logger.debug('[AgnoClient] Post-team-run session_state refresh failed:', err);\n }\n }\n\n await this.refreshSessionMessages();\n }\n },\n });\n }\n\n /**\n * Determine if a RunEvent is a team-level event (prefixed with \"Team\")\n */\n private isTeamEvent(event: RunEvent): boolean {\n return event.toString().startsWith('Team');\n }\n\n /**\n * Determine if an event should update the user-facing message based on mode.\n *\n * In team mode: only Team* events should update the user-facing message.\n * In agent mode: only Run* (non-Team) events should update the user-facing message.\n *\n * Certain events are always processed regardless of mode:\n * - CustomEvent, RunPaused, RunContinued (control flow events)\n */\n private shouldProcessForUserMessage(event: RunEvent): boolean {\n // Control flow events are always processed\n if (\n event === RunEvent.CustomEvent ||\n event === RunEvent.RunPaused ||\n event === RunEvent.RunContinued\n ) {\n return true;\n }\n\n const mode = this.configManager.getMode();\n const isTeam = this.isTeamEvent(event);\n\n if (mode === 'team') {\n // In team mode, only Team* events update user-facing messages\n return isTeam;\n }\n\n // In agent mode, only non-Team events update user-facing messages\n return !isTeam;\n }\n\n /**\n * Emit member-specific events for internal team member activity.\n * Only emits when emitMemberEvents config option is true.\n */\n private emitMemberEvent(event: RunEvent, chunk: RunResponse): void {\n if (!this.configManager.getEmitMemberEvents()) return;\n\n this.emit('member:event', chunk);\n\n // Emit specific member events based on event type\n if (event === RunEvent.RunStarted) {\n this.emit('member:started', chunk);\n } else if (event === RunEvent.RunContent) {\n this.emit('member:content', chunk);\n } else if (event === RunEvent.RunCompleted) {\n this.emit('member:completed', chunk);\n } else if (event === RunEvent.RunError) {\n this.emit('member:error', chunk);\n }\n }\n\n /**\n * Handle streaming chunk\n */\n private handleChunk(chunk: RunResponse, currentSessionId: string | undefined, messageContent: string): void {\n const event = chunk.event as RunEvent;\n\n // Handle session creation and run ID tracking (always process these regardless of mode)\n if (\n event === RunEvent.RunStarted ||\n event === RunEvent.TeamRunStarted ||\n event === RunEvent.ReasoningStarted ||\n event === RunEvent.TeamReasoningStarted\n ) {\n // Track current run ID (only for root-level events)\n if (this.shouldProcessForUserMessage(event) && chunk.run_id) {\n this.currentRunId = chunk.run_id;\n this.state.currentRunId = chunk.run_id;\n this.emit('state:change', this.getState());\n }\n\n if (chunk.session_id && (!currentSessionId || currentSessionId !== chunk.session_id)) {\n const sessionData: SessionEntry = {\n session_id: chunk.session_id,\n session_name: messageContent,\n created_at: toSafeISOString(chunk.created_at),\n };\n\n const sessionExists = this.state.sessions.some(\n (s) => s.session_id === chunk.session_id\n );\n\n if (!sessionExists) {\n this.state.sessions = [sessionData, ...this.state.sessions];\n this.emit('session:created', sessionData);\n }\n }\n }\n\n // Handle run cancellation (user-initiated, distinct from errors)\n if (event === RunEvent.RunCancelled || event === RunEvent.TeamRunCancelled) {\n this.handleRunCancelled(chunk);\n return;\n }\n\n // Handle pause for HITL\n if (event === RunEvent.RunPaused) {\n this.state.isStreaming = false;\n this.state.isPaused = true;\n this.state.pausedRunId = chunk.run_id;\n this.state.toolsAwaitingExecution =\n chunk.tools_awaiting_external_execution ||\n chunk.tools_requiring_confirmation ||\n chunk.tools_requiring_user_input ||\n chunk.tools ||\n [];\n\n this.emit('run:paused', {\n runId: chunk.run_id,\n sessionId: chunk.session_id,\n tools: this.state.toolsAwaitingExecution,\n });\n this.emit('state:change', this.getState());\n return;\n }\n\n // In team mode, filter out internal agent events from user-facing messages\n if (!this.shouldProcessForUserMessage(event)) {\n // Emit member events for debugging/advanced UIs if configured\n this.emitMemberEvent(event, chunk);\n return;\n }\n\n // Handle errors\n if (\n event === RunEvent.RunError ||\n event === RunEvent.TeamRunError\n ) {\n const errorContent =\n (chunk.content as string) || 'Error during run';\n\n this.state.errorMessage = errorContent;\n const lastMessage = this.messageStore.getLastMessage();\n if (lastMessage?.role === 'agent') {\n this.messageStore.removeLastMessages(1);\n }\n this.emit('message:update', this.messageStore.getMessages());\n\n // Remove the session if it was just created\n if (chunk.session_id) {\n this.state.sessions = this.state.sessions.filter(\n (s) => s.session_id !== chunk.session_id\n );\n }\n\n this.emit('message:error', errorContent);\n return;\n }\n\n // Emit semantic custom:event for CustomEvent types\n if (event === RunEvent.CustomEvent) {\n const customEvent = chunk as unknown as CustomEventData;\n this.emit('custom:event', customEvent);\n\n // Live-sync session_state if the payload carries it (opt-out via config).\n const extractor = this.configManager.getConfig().extractSessionStateFromCustomEvent;\n const extracted = this.sessionStateManager.extractFromCustomEvent(customEvent, extractor);\n if (extracted) {\n this.applySessionState(extracted, { source: 'custom-event' });\n }\n }\n\n // Process the chunk and update message\n this.messageStore.updateLastMessage((lastMessage) => {\n const updated = this.eventProcessor.processChunk(chunk, lastMessage);\n return updated || lastMessage;\n });\n\n // Apply any pending UI specs to newly arrived tool calls\n this.applyPendingUISpecs();\n\n // Track if run completed successfully for post-stream refresh\n if (event === RunEvent.RunCompleted || event === RunEvent.TeamRunCompleted) {\n this.runCompletedSuccessfully = true;\n\n // Agent runs carry session_state on the RunCompleted chunk. Teams emit\n // TeamRunCompleted WITHOUT session_state through Agno 2.6.0 — those are\n // handled by the post-stream refresh in onComplete below.\n if (event === RunEvent.RunCompleted && chunk.session_state !== undefined) {\n this.applySessionState(chunk.session_state, { source: 'run-completed' });\n }\n }\n\n this.emit('message:update', this.messageStore.getMessages());\n }\n\n /**\n * Handle error\n */\n private handleError(error: Error, sessionId: string | undefined): void {\n this.state.isStreaming = false;\n this.state.errorMessage = error.message;\n\n const lastMessage = this.messageStore.getLastMessage();\n if (lastMessage?.role === 'agent') {\n this.messageStore.removeLastMessages(1);\n }\n this.emit('message:update', this.messageStore.getMessages());\n\n if (sessionId) {\n this.state.sessions = this.state.sessions.filter(\n (s) => s.session_id !== sessionId\n );\n }\n\n this.emit('message:error', error.message);\n this.emit('stream:end');\n this.emit('state:change', this.getState());\n }\n\n /**\n * Handle RunCancelled event from backend\n * Cancellation is user-initiated and distinct from errors\n */\n private handleRunCancelled(chunk: RunResponse): void {\n this.state.isStreaming = false;\n this.state.isCancelling = false;\n this.state.currentRunId = undefined;\n this.currentRunId = undefined;\n this.abortController = undefined;\n\n // Mark message as cancelled (distinct from error)\n this.messageStore.updateLastMessage((msg) => ({\n ...msg,\n cancelled: true,\n }));\n\n this.emit('run:cancelled', {\n runId: chunk.run_id,\n sessionId: chunk.session_id,\n });\n this.emit('stream:end');\n this.emit('message:update', this.messageStore.getMessages());\n this.emit('state:change', this.getState());\n }\n\n /**\n * Handle local cancellation cleanup\n * Called when user cancels, regardless of backend response\n */\n private handleLocalCancellation(): void {\n const runId = this.currentRunId;\n const sessionId = this.configManager.getSessionId();\n\n this.state.isStreaming = false;\n this.state.isCancelling = false;\n this.state.currentRunId = undefined;\n this.currentRunId = undefined;\n this.abortController = undefined;\n\n this.messageStore.updateLastMessage((msg) => ({\n ...msg,\n cancelled: true,\n }));\n\n this.emit('run:cancelled', { runId, sessionId });\n this.emit('stream:end');\n this.emit('message:update', this.messageStore.getMessages());\n this.emit('state:change', this.getState());\n }\n\n /**\n * Check if an error is a 401 Unauthorized error with \"Token has expired\" detail.\n * Only triggers token refresh for expired tokens, not other auth failures.\n */\n private isTokenExpiredError(error: unknown): boolean {\n if (!(error instanceof Error)) return false;\n const errorWithStatus = error as Error & { status?: number };\n const is401 = errorWithStatus.status === 401 || error.message.includes('401');\n const isExpired = error.message.toLowerCase().includes('token has expired');\n return is401 && isExpired;\n }\n\n /**\n * Attempt to refresh the token using the onTokenExpired callback.\n * If successful, updates the auth token in config.\n *\n * @returns true if token was refreshed, false otherwise\n */\n private async tryRefreshToken(): Promise<boolean> {\n const onTokenExpired = this.configManager.getOnTokenExpired();\n if (!onTokenExpired) {\n return false;\n }\n\n try {\n const newToken = await onTokenExpired();\n if (newToken) {\n this.configManager.setAuthToken(newToken);\n Logger.debug('Token refreshed successfully');\n return true;\n }\n } catch (refreshError) {\n Logger.warn('Token refresh failed:', refreshError);\n }\n\n return false;\n }\n\n /**\n * Execute an operation with automatic token refresh on 401 Unauthorized.\n * Centralizes the token refresh and retry logic for all non-streaming API calls.\n *\n * @param operation - A function that performs the API call and returns a Promise\n * @returns The result of the operation\n * @throws The original error if it's not a 401 or if token refresh fails\n */\n private async withTokenRefresh<T>(operation: () => Promise<T>): Promise<T> {\n try {\n return await operation();\n } catch (error) {\n if (this.isTokenExpiredError(error)) {\n const refreshed = await this.tryRefreshToken();\n if (refreshed) {\n return await operation();\n }\n }\n throw error;\n }\n }\n\n /**\n * Execute a streaming request with automatic token refresh on 401 Unauthorized.\n * This method handles the complexity of rebuilding headers after token refresh.\n *\n * @param config - Configuration for the streaming request\n */\n private async executeStream(config: {\n apiUrl: string;\n requestBody: FormData;\n signal: AbortSignal;\n perRequestHeaders?: Record<string, string>;\n perRequestParams?: Record<string, string>;\n onChunk: (chunk: RunResponse) => void;\n onError: (error: Error) => void;\n onComplete: () => Promise<void>;\n }): Promise<void> {\n const executeStream = async () => {\n const headers = this.configManager.buildRequestHeaders(config.perRequestHeaders);\n const params = this.configManager.buildQueryString(config.perRequestParams);\n\n await streamResponse({\n apiUrl: config.apiUrl,\n headers,\n params,\n requestBody: config.requestBody,\n signal: config.signal,\n onChunk: config.onChunk,\n onError: config.onError,\n onComplete: config.onComplete,\n });\n };\n\n try {\n await executeStream();\n } catch (error) {\n if (this.isTokenExpiredError(error)) {\n const refreshed = await this.tryRefreshToken();\n if (refreshed) {\n try {\n await executeStream();\n return;\n } catch (retryError) {\n config.onError(\n retryError instanceof Error ? retryError : new Error(String(retryError))\n );\n return;\n }\n }\n }\n config.onError(\n error instanceof Error ? error : new Error(String(error))\n );\n }\n }\n\n /**\n * Check if a fetch Response is a 401 with \"Token has expired\" detail.\n * Reads the response body to check for the specific error message.\n */\n private async isTokenExpiredResponse(response: Response): Promise<boolean> {\n if (response.status !== 401) {\n return false;\n }\n\n try {\n const cloned = response.clone();\n const body = await cloned.json();\n const detail = body?.detail?.toLowerCase() || '';\n return detail.includes('token has expired');\n } catch {\n return false;\n }\n }\n\n /**\n * Wrapper for fetch that handles 401 \"Token has expired\" errors with automatic token refresh and retry.\n * Used for non-streaming API calls.\n *\n * @param url - The URL to fetch\n * @param init - Optional fetch init options (method, body, etc.)\n * @returns The fetch Response\n */\n private async fetchWithTokenRefresh(\n url: string,\n init?: RequestInit\n ): Promise<Response> {\n const headers = this.configManager.buildRequestHeaders(\n init?.headers as Record<string, string> | undefined\n );\n\n let response = await fetch(url, { ...init, headers });\n\n // If 401 with \"Token has expired\", try to refresh token and retry once\n if (await this.isTokenExpiredResponse(response)) {\n const refreshed = await this.tryRefreshToken();\n if (refreshed) {\n const newHeaders = this.configManager.buildRequestHeaders(\n init?.headers as Record<string, string> | undefined\n );\n response = await fetch(url, { ...init, headers: newHeaders });\n }\n }\n\n return response;\n }\n\n /**\n * Cancel the current running agent/team run.\n *\n * This will:\n * 1. Abort the local fetch stream (immediate UI feedback)\n * 2. Notify the backend to stop processing\n * 3. Emit 'run:cancelled' event\n *\n * @param options - Optional request headers and query parameters\n * @throws Error if no run is currently streaming\n */\n async cancelRun(options?: {\n headers?: Record<string, string>;\n params?: Record<string, string>;\n }): Promise<void> {\n if (!this.state.isStreaming) {\n throw new Error('No active run to cancel');\n }\n\n if (!this.currentRunId) {\n throw new Error('No run ID available for cancellation');\n }\n\n this.state.isCancelling = true;\n this.emit('state:change', this.getState());\n\n // 1. Abort local stream immediately for instant UI feedback\n if (this.abortController) {\n this.abortController.abort();\n this.abortController = undefined;\n }\n\n // 2. Notify backend to stop processing\n const cancelUrl = this.configManager.getCancelUrl(this.currentRunId);\n if (!cancelUrl) {\n // Still cleanup local state even if no cancel URL\n this.handleLocalCancellation();\n return;\n }\n\n const params = this.configManager.buildQueryString(options?.params);\n const url = new URL(cancelUrl);\n if (params.toString()) {\n params.forEach((value, key) => url.searchParams.set(key, value));\n }\n\n try {\n const response = await this.fetchWithTokenRefresh(url.toString(), {\n method: 'POST',\n headers: options?.headers,\n });\n\n if (!response.ok) {\n Logger.warn(`[AgnoClient] Cancel request failed: ${response.status}`);\n // Still cleanup local state\n }\n } catch (error) {\n Logger.warn('[AgnoClient] Cancel request error:', error);\n // Still cleanup local state even on network error\n }\n\n // 3. Cleanup local state (in case backend didn't send RunCancelled event)\n this.handleLocalCancellation();\n }\n\n /**\n * Get current run ID (if streaming)\n */\n getCurrentRunId(): string | undefined {\n return this.currentRunId;\n }\n\n /**\n * Refresh messages from the session API after run completion.\n * Replaces streamed messages with authoritative session data.\n * Preserves client-side properties like ui_component that aren't stored on the server.\n * @private\n */\n private async refreshSessionMessages(): Promise<void> {\n const sessionId = this.configManager.getSessionId();\n if (!sessionId) {\n Logger.debug('[AgnoClient] Cannot refresh: no session ID');\n return;\n }\n\n this.state.isRefreshing = true;\n this.emit('state:change', this.getState());\n\n try {\n // Preserve client-side properties before refresh (API doesn't store these)\n const existingUIComponents = new Map<string, any>();\n const existingUserAttachments: Array<{\n images?: ChatMessage['images'];\n audio?: ChatMessage['audio'];\n files?: ChatMessage['files'];\n }> = [];\n\n for (const message of this.messageStore.getMessages()) {\n // Preserve ui_component from tool calls\n if (message.tool_calls) {\n for (const toolCall of message.tool_calls) {\n if ((toolCall as any).ui_component) {\n existingUIComponents.set(toolCall.tool_call_id, (toolCall as any).ui_component);\n }\n }\n }\n // Preserve user message attachments (blob URLs created client-side)\n if (message.role === 'user') {\n existingUserAttachments.push({\n images: message.images,\n audio: message.audio,\n files: message.files,\n });\n }\n }\n\n const config = this.configManager.getConfig();\n const entityType = this.configManager.getMode();\n const dbId = this.configManager.getDbId() || '';\n const userId = this.configManager.getUserId();\n\n const params = this.configManager.buildQueryString();\n\n const response = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.sessionManager.fetchSession(\n config.endpoint,\n entityType,\n sessionId,\n dbId,\n headers,\n userId,\n params\n );\n });\n\n const messages = this.sessionManager.convertSessionToMessages(response);\n\n // Re-apply preserved ui_component properties to matching tool calls\n if (existingUIComponents.size > 0) {\n for (const message of messages) {\n if (message.tool_calls) {\n for (let i = 0; i < message.tool_calls.length; i++) {\n const toolCall = message.tool_calls[i];\n const uiComponent = existingUIComponents.get(toolCall.tool_call_id);\n if (uiComponent) {\n (message.tool_calls[i] as any).ui_component = uiComponent;\n }\n }\n }\n }\n }\n\n // Re-apply preserved user attachments (blob URLs) to user messages\n // The API may not return input_media, so we fall back to client-side data\n if (existingUserAttachments.length > 0) {\n let userIdx = 0;\n for (const message of messages) {\n if (message.role === 'user' && userIdx < existingUserAttachments.length) {\n const saved = existingUserAttachments[userIdx];\n // Only apply if the refreshed message lacks attachments\n if (!message.images?.length && saved.images?.length) {\n message.images = saved.images;\n }\n if (!message.audio?.length && saved.audio?.length) {\n message.audio = saved.audio;\n }\n if (!message.files?.length && saved.files?.length) {\n message.files = saved.files;\n }\n userIdx++;\n }\n }\n }\n\n this.messageStore.setMessages(messages);\n\n Logger.debug('[AgnoClient] Session refreshed:', `${messages.length} messages`);\n\n this.emit('message:refreshed', messages);\n this.emit('message:update', messages);\n } catch (error) {\n Logger.error('[AgnoClient] Failed to refresh session:', error);\n this.emit('message:error', `Session refresh failed: ${error instanceof Error ? error.message : String(error)}`);\n } finally {\n this.state.isRefreshing = false;\n this.emit('state:change', this.getState());\n }\n }\n\n /**\n * Load a session\n */\n async loadSession(\n sessionId: string,\n options?: { params?: Record<string, string> }\n ): Promise<ChatMessage[]> {\n Logger.debug('[AgnoClient] loadSession called with sessionId:', sessionId);\n const config = this.configManager.getConfig();\n const entityType = this.configManager.getMode();\n const dbId = this.configManager.getDbId() || '';\n const userId = this.configManager.getUserId();\n Logger.debug('[AgnoClient] Loading session with:', { entityType, dbId, userId });\n\n const params = this.configManager.buildQueryString(options?.params);\n\n // Switching sessions invalidates any in-flight session_state refresh so\n // a stale response can't overwrite the new session's state.\n this.sessionStateManager.invalidate();\n\n // Fetch runs (messages) and session detail (session_state) in parallel.\n // /runs does not include session_state; /sessions/{id} does — verified in\n // scripts/verify-session-state/FINDINGS.md.\n const hydrateStatePromise: Promise<void> = this.getSessionById(sessionId, {\n params: options?.params,\n })\n .then((detail) => {\n this.applySessionState(detail.session_state ?? null, { source: 'load-session' });\n })\n .catch((err) => {\n // A session_state hydration failure should not break message loading.\n Logger.debug('[AgnoClient] loadSession: session_state hydration failed:', err);\n });\n\n const response = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.sessionManager.fetchSession(\n config.endpoint,\n entityType,\n sessionId,\n dbId,\n headers,\n userId,\n params\n );\n });\n\n // Don't block on hydration, but do not leave the promise dangling either.\n await hydrateStatePromise;\n\n const messages = this.sessionManager.convertSessionToMessages(response);\n Logger.debug('[AgnoClient] Setting messages to store:', `${messages.length} messages`);\n this.messageStore.setMessages(messages);\n this.configManager.setSessionId(sessionId);\n this.state.errorMessage = undefined;\n\n // Detect runs that are still paused (user reloaded before answering a HITL tool).\n // Only agents support HITL — teams have no /continue endpoint.\n if (this.configManager.getMode() === 'agent') {\n const pausedRun = response.find(\n (run: any) => typeof run.status === 'string' && run.status.toLowerCase() === 'paused'\n );\n if (pausedRun) {\n const pendingTools = ((pausedRun as any).tools ?? []).filter(\n (t: any) => t.external_execution_required === true && t.result === null\n );\n if (pendingTools.length > 0) {\n this.state.isPaused = true;\n this.state.pausedRunId = (pausedRun as any).run_id;\n this.state.toolsAwaitingExecution = pendingTools;\n }\n }\n }\n\n Logger.debug('[AgnoClient] Emitting events...');\n this.emit('session:loaded', sessionId);\n this.emit('message:update', this.messageStore.getMessages());\n this.emit('state:change', this.getState());\n\n // Emit run:paused AFTER session:loaded so handleSessionLoaded completes first.\n // This re-establishes the HITL flow: autoExecute will trigger the handler (e.g. modal).\n if (this.state.isPaused && this.state.pausedRunId) {\n this.emit('run:paused', {\n runId: this.state.pausedRunId,\n sessionId,\n tools: this.state.toolsAwaitingExecution ?? [],\n });\n }\n\n Logger.debug('[AgnoClient] Events emitted, returning messages');\n\n return messages;\n }\n\n /**\n * Fetch all sessions\n */\n async fetchSessions(options?: { params?: Record<string, string> }): Promise<SessionEntry[]> {\n const config = this.configManager.getConfig();\n const entityType = this.configManager.getMode();\n const entityId = this.configManager.getCurrentEntityId();\n const dbId = this.configManager.getDbId() || '';\n\n if (!entityId) {\n throw new Error('Entity ID must be configured');\n }\n\n const params = this.configManager.buildQueryString(options?.params);\n\n const sessions = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.sessionManager.fetchSessions(\n config.endpoint,\n entityType,\n entityId,\n dbId,\n headers,\n params\n );\n });\n\n this.state.sessions = sessions;\n this.emit('state:change', this.getState());\n\n return sessions;\n }\n\n /**\n * Delete a session\n */\n async deleteSession(\n sessionId: string,\n options?: { params?: Record<string, string> }\n ): Promise<void> {\n const config = this.configManager.getConfig();\n const dbId = this.configManager.getDbId() || '';\n\n const params = this.configManager.buildQueryString(options?.params);\n\n await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.sessionManager.deleteSession(\n config.endpoint,\n sessionId,\n dbId,\n headers,\n params\n );\n });\n\n // Remove from state\n this.state.sessions = this.state.sessions.filter(\n (s) => s.session_id !== sessionId\n );\n\n // Clear messages if this was the current session\n if (this.configManager.getSessionId() === sessionId) {\n this.clearMessages();\n }\n\n this.emit('session:deleted', { sessionId });\n this.emit('state:change', this.getState());\n }\n\n /**\n * Get a session by ID\n */\n async getSessionById(\n sessionId: string,\n options?: { params?: Record<string, string> }\n ): Promise<AgentSessionDetailSchema | TeamSessionDetailSchema> {\n const config = this.configManager.getConfig();\n const entityType = this.configManager.getMode();\n const dbId = this.configManager.getDbId() || '';\n const userId = this.configManager.getUserId();\n\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.sessionManager.getSessionById(\n config.endpoint,\n entityType,\n sessionId,\n dbId,\n headers,\n userId,\n params\n );\n });\n }\n\n /**\n * Get a run by ID\n */\n async getRunById(\n sessionId: string,\n runId: string,\n options?: { params?: Record<string, string> }\n ): Promise<RunSchema | TeamRunSchema> {\n const config = this.configManager.getConfig();\n const entityType = this.configManager.getMode();\n const dbId = this.configManager.getDbId() || '';\n const userId = this.configManager.getUserId();\n\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.sessionManager.getRunById(\n config.endpoint,\n entityType,\n sessionId,\n runId,\n dbId,\n headers,\n userId,\n params\n );\n });\n }\n\n /**\n * Create a new session\n */\n async createSession(\n request?: CreateSessionRequest,\n options?: { params?: Record<string, string> }\n ): Promise<AgentSessionDetailSchema | TeamSessionDetailSchema> {\n const config = this.configManager.getConfig();\n const entityType = this.configManager.getMode();\n const entityId = this.configManager.getCurrentEntityId();\n const dbId = this.configManager.getDbId() || '';\n\n // Build request with entity ID\n const sessionRequest: CreateSessionRequest = {\n ...request,\n ...(entityType === 'agent' ? { agent_id: entityId } : { team_id: entityId }),\n };\n\n const params = this.configManager.buildQueryString(options?.params);\n\n const session = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.sessionManager.createSession(\n config.endpoint,\n entityType,\n sessionRequest,\n dbId,\n headers,\n params\n );\n });\n\n // Add to state and emit event\n const sessionEntry: SessionEntry = {\n session_id: session.session_id,\n session_name: session.session_name,\n created_at: session.created_at || null,\n updated_at: session.updated_at || null,\n };\n this.state.sessions = [sessionEntry, ...this.state.sessions];\n this.emit('session:created', sessionEntry);\n this.emit('state:change', this.getState());\n\n return session;\n }\n\n /**\n * Update a session\n */\n async updateSession(\n sessionId: string,\n request: UpdateSessionRequest,\n options?: { params?: Record<string, string> }\n ): Promise<AgentSessionDetailSchema | TeamSessionDetailSchema> {\n const config = this.configManager.getConfig();\n const entityType = this.configManager.getMode();\n const dbId = this.configManager.getDbId() || '';\n const userId = this.configManager.getUserId();\n\n const params = this.configManager.buildQueryString(options?.params);\n\n const session = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.sessionManager.updateSession(\n config.endpoint,\n entityType,\n sessionId,\n request,\n dbId,\n headers,\n userId,\n params\n );\n });\n\n // Update in state\n this.state.sessions = this.state.sessions.map((s) =>\n s.session_id === sessionId\n ? {\n ...s,\n session_name: session.session_name,\n updated_at: session.updated_at || s.updated_at,\n }\n : s\n );\n this.emit('session:updated', session);\n this.emit('state:change', this.getState());\n\n return session;\n }\n\n /**\n * Rename a session\n */\n async renameSession(\n sessionId: string,\n newName: string,\n options?: { params?: Record<string, string> }\n ): Promise<AgentSessionDetailSchema | TeamSessionDetailSchema> {\n const config = this.configManager.getConfig();\n const entityType = this.configManager.getMode();\n const dbId = this.configManager.getDbId() || '';\n\n const params = this.configManager.buildQueryString(options?.params);\n\n const session = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.sessionManager.renameSession(\n config.endpoint,\n entityType,\n sessionId,\n newName,\n dbId,\n headers,\n params\n );\n });\n\n // Update in state\n this.state.sessions = this.state.sessions.map((s) =>\n s.session_id === sessionId\n ? {\n ...s,\n session_name: newName,\n updated_at: session.updated_at || s.updated_at,\n }\n : s\n );\n this.emit('session:renamed', { sessionId, newName, session });\n this.emit('state:change', this.getState());\n\n return session;\n }\n\n /**\n * Delete multiple sessions\n */\n async deleteMultipleSessions(\n sessionIds: string[],\n options?: { params?: Record<string, string> }\n ): Promise<void> {\n const config = this.configManager.getConfig();\n const entityType = this.configManager.getMode();\n const dbId = this.configManager.getDbId() || '';\n\n // All sessions will be of the same type (current entity type)\n const sessionTypes = sessionIds.map(() => entityType);\n\n const params = this.configManager.buildQueryString(options?.params);\n\n await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.sessionManager.deleteMultipleSessions(\n config.endpoint,\n sessionIds,\n sessionTypes,\n dbId,\n headers,\n params\n );\n });\n\n // Remove from state\n const deletedIds = new Set(sessionIds);\n this.state.sessions = this.state.sessions.filter(\n (s) => !deletedIds.has(s.session_id)\n );\n\n // Clear messages if current session was deleted\n const currentSessionId = this.configManager.getSessionId();\n if (currentSessionId && deletedIds.has(currentSessionId)) {\n this.clearMessages();\n }\n\n this.emit('sessions:deleted', { sessionIds });\n this.emit('state:change', this.getState());\n }\n\n /**\n * Add tool calls to the last message\n * Used by frontend execution to add tool calls that were executed locally\n */\n addToolCallsToLastMessage(toolCalls: ToolCall[]): void {\n const lastMessage = this.messageStore.getLastMessage();\n if (!lastMessage || lastMessage.role !== 'agent') {\n return;\n }\n\n const existingToolCalls = lastMessage.tool_calls || [];\n const existingIds = new Set(existingToolCalls.map(t => t.tool_call_id));\n\n // Only add tool calls that don't already exist\n const newToolCalls = toolCalls.filter(t => !existingIds.has(t.tool_call_id));\n\n if (newToolCalls.length > 0) {\n this.messageStore.updateLastMessage((msg) => ({\n ...msg,\n tool_calls: [...existingToolCalls, ...newToolCalls],\n }));\n\n this.emit('message:update', this.messageStore.getMessages());\n }\n }\n\n /**\n * Hydrate a specific tool call with its UI component\n * If tool call doesn't exist yet, stores UI spec as pending\n */\n hydrateToolCallUI(toolCallId: string, uiSpec: any): void {\n // Find the message containing this tool call and update it\n const messages = this.messageStore.getMessages();\n\n for (let i = messages.length - 1; i >= 0; i--) {\n const message = messages[i];\n\n if (message.tool_calls) {\n const toolIndex = message.tool_calls.findIndex(\n t => t.tool_call_id === toolCallId\n );\n\n if (toolIndex !== -1) {\n // Update this specific message\n this.messageStore.updateMessage(i, (msg) => {\n const updatedToolCalls = [...(msg.tool_calls || [])];\n updatedToolCalls[toolIndex] = {\n ...updatedToolCalls[toolIndex],\n ui_component: uiSpec,\n };\n\n return {\n ...msg,\n tool_calls: updatedToolCalls,\n };\n });\n\n // Remove from pending if it was there\n this.pendingUISpecs.delete(toolCallId);\n\n // Emit event to sync with React state\n this.emit('message:update', this.messageStore.getMessages());\n return;\n }\n }\n }\n\n // Tool call not found yet - store UI spec as pending\n this.pendingUISpecs.set(toolCallId, uiSpec);\n }\n\n /**\n * Apply any pending UI specs to tool calls that have just been added\n * Called after message updates to attach UI to newly arrived tool calls\n * Batches all updates to emit only one message:update event\n */\n private applyPendingUISpecs(): void {\n if (this.pendingUISpecs.size === 0) return;\n\n const messages = this.messageStore.getMessages();\n const updatedMessages: { index: number; message: ChatMessage }[] = [];\n\n // Collect all updates first (batching)\n for (let i = messages.length - 1; i >= 0; i--) {\n const message = messages[i];\n\n if (message.tool_calls) {\n let messageUpdated = false;\n const updatedToolCalls = [...message.tool_calls];\n\n for (let j = 0; j < updatedToolCalls.length; j++) {\n const toolCall = updatedToolCalls[j];\n const pendingUI = this.pendingUISpecs.get(toolCall.tool_call_id);\n\n if (pendingUI && !(toolCall as any).ui_component) {\n updatedToolCalls[j] = {\n ...updatedToolCalls[j],\n ui_component: pendingUI,\n };\n\n this.pendingUISpecs.delete(toolCall.tool_call_id);\n messageUpdated = true;\n }\n }\n\n if (messageUpdated) {\n updatedMessages.push({\n index: i,\n message: {\n ...message,\n tool_calls: updatedToolCalls,\n },\n });\n }\n }\n }\n\n // Apply all updates at once\n if (updatedMessages.length > 0) {\n updatedMessages.forEach(({ index, message }) => {\n this.messageStore.updateMessage(index, () => message);\n });\n\n this.emit('message:update', this.messageStore.getMessages());\n }\n }\n\n /**\n * Continue a paused run with tool execution results.\n *\n * **Note:** HITL (Human-in-the-Loop) frontend tool execution is only supported for agents.\n * Teams do not support the continue endpoint.\n *\n * To cancel a running request, use the `cancelRun()` method.\n *\n * @param tools - Array of tool calls with execution results\n * @param options - Optional request headers and query parameters\n * @throws Error if no paused run exists\n * @throws Error if called with team mode (teams don't support HITL)\n */\n async continueRun(\n tools: ToolCall[],\n options?: { headers?: Record<string, string>; params?: Record<string, string> }\n ): Promise<void> {\n // Validate that we're not in team mode (teams don't support continue endpoint)\n if (this.configManager.getMode() === 'team') {\n throw new Error(\n 'HITL (Human-in-the-Loop) frontend tool execution is not supported for teams. ' +\n 'Only agents support the continue endpoint.'\n );\n }\n\n if (!this.state.isPaused || !this.state.pausedRunId) {\n throw new Error('No paused run to continue');\n }\n\n const runUrl = this.configManager.getRunUrl();\n if (!runUrl) {\n throw new Error('No agent or team selected');\n }\n\n // Build continue URL: POST /agents/{id}/runs/{run_id}/continue\n const continueUrl = `${runUrl}/${this.state.pausedRunId}/continue`;\n\n // Create new AbortController for this request\n this.abortController = new AbortController();\n\n this.state.isPaused = false;\n this.state.isStreaming = true;\n this.emit('run:continued', { runId: this.state.pausedRunId });\n this.emit('state:change', this.getState());\n\n // Clean tools before sending to backend (remove UI-specific fields)\n const cleanedTools = tools.map(tool => {\n const { ui_component, ...backendTool } = tool as any;\n return backendTool;\n });\n\n const formData = new FormData();\n formData.append('tools', JSON.stringify(cleanedTools));\n formData.append('stream', 'true');\n\n const currentSessionId = this.configManager.getSessionId();\n if (currentSessionId) {\n formData.append('session_id', currentSessionId);\n }\n\n // Add user_id if configured\n const userId = this.configManager.getUserId();\n if (userId) {\n formData.append('user_id', userId);\n }\n\n await this.executeStream({\n apiUrl: continueUrl,\n requestBody: formData,\n signal: this.abortController.signal,\n perRequestHeaders: options?.headers,\n perRequestParams: options?.params,\n onChunk: (chunk: RunResponse) => {\n this.handleChunk(chunk, currentSessionId, '');\n },\n onError: (error) => {\n this.handleError(error, currentSessionId);\n },\n onComplete: async () => {\n this.state.isStreaming = false;\n this.state.pausedRunId = undefined;\n this.state.toolsAwaitingExecution = undefined;\n this.currentRunId = undefined;\n this.state.currentRunId = undefined;\n this.abortController = undefined;\n this.emit('stream:end');\n this.emit('message:complete', this.messageStore.getMessages());\n this.emit('state:change', this.getState());\n\n // Trigger refresh if run completed successfully\n if (this.runCompletedSuccessfully) {\n this.runCompletedSuccessfully = false;\n await this.refreshSessionMessages();\n }\n },\n });\n }\n\n /**\n * Check endpoint status\n */\n async checkStatus(options?: { params?: Record<string, string> }): Promise<boolean> {\n try {\n const params = this.configManager.buildQueryString(options?.params);\n const url = new URL(`${this.configManager.getEndpoint()}/health`);\n if (params.toString()) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n const response = await this.fetchWithTokenRefresh(url.toString());\n const isActive = response.ok;\n this.state.isEndpointActive = isActive;\n this.emit('state:change', this.getState());\n return isActive;\n } catch {\n this.state.isEndpointActive = false;\n this.emit('state:change', this.getState());\n return false;\n }\n }\n\n /**\n * Fetch agents from endpoint\n */\n async fetchAgents(options?: { params?: Record<string, string> }): Promise<AgentDetails[]> {\n const params = this.configManager.buildQueryString(options?.params);\n const url = new URL(`${this.configManager.getEndpoint()}/agents`);\n if (params.toString()) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n const response = await this.fetchWithTokenRefresh(url.toString());\n if (!response.ok) {\n throw new Error('Failed to fetch agents');\n }\n\n const agents: AgentDetails[] = await response.json();\n this.state.agents = agents;\n this.emit('state:change', this.getState());\n\n return agents;\n }\n\n /**\n * Fetch teams from endpoint\n */\n async fetchTeams(options?: { params?: Record<string, string> }): Promise<TeamDetails[]> {\n const params = this.configManager.buildQueryString(options?.params);\n const url = new URL(`${this.configManager.getEndpoint()}/teams`);\n if (params.toString()) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n const response = await this.fetchWithTokenRefresh(url.toString());\n if (!response.ok) {\n throw new Error('Failed to fetch teams');\n }\n\n const teams: TeamDetails[] = await response.json();\n this.state.teams = teams;\n this.emit('state:change', this.getState());\n\n return teams;\n }\n\n /**\n * Initialize client (check status and fetch agents/teams)\n * Automatically selects the first available agent or team if none is configured\n */\n async initialize(options?: { params?: Record<string, string> }): Promise<{\n agents: AgentDetails[];\n teams: TeamDetails[];\n }> {\n const isActive = await this.checkStatus(options);\n if (!isActive) {\n return { agents: [], teams: [] };\n }\n\n const [agents, teams] = await Promise.all([\n this.fetchAgents(options),\n this.fetchTeams(options),\n ]);\n\n // Auto-select first available agent or team if none is configured\n const currentConfig = this.configManager.getConfig();\n const hasAgentConfigured = currentConfig.agentId;\n const hasTeamConfigured = currentConfig.teamId;\n\n if (!hasAgentConfigured && !hasTeamConfigured) {\n if (agents.length > 0) {\n // Select first agent\n const firstAgent = agents[0];\n this.configManager.updateConfig({\n mode: 'agent',\n agentId: firstAgent.id,\n dbId: firstAgent.db_id || undefined,\n });\n this.emit('config:change', this.configManager.getConfig());\n } else if (teams.length > 0) {\n // Select first team if no agents available\n const firstTeam = teams[0];\n this.configManager.updateConfig({\n mode: 'team',\n teamId: firstTeam.id,\n dbId: firstTeam.db_id || undefined,\n });\n this.emit('config:change', this.configManager.getConfig());\n }\n }\n\n return { agents, teams };\n }\n\n // ============================================================================\n // Memory Methods\n // ============================================================================\n\n /**\n * Fetch memories with optional filtering and pagination\n */\n async fetchMemories(\n queryParams?: ListMemoriesParams,\n options?: { params?: Record<string, string> }\n ): Promise<MemoriesListResponse> {\n const config = this.configManager.getConfig();\n const dbId = this.configManager.getDbId() || '';\n\n const params = this.configManager.buildQueryString(options?.params);\n\n const response = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.memoryManager.fetchMemories(\n config.endpoint,\n dbId,\n headers,\n queryParams,\n params\n );\n });\n\n this.state.memories = response.data;\n this.emit('state:change', this.getState());\n\n return response;\n }\n\n /**\n * Get a specific memory by ID\n */\n async getMemoryById(\n memoryId: string,\n options?: { params?: Record<string, string>; table?: string }\n ): Promise<UserMemory> {\n const config = this.configManager.getConfig();\n const dbId = this.configManager.getDbId() || '';\n const userId = this.configManager.getUserId();\n\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.memoryManager.getMemoryById(\n config.endpoint,\n memoryId,\n dbId,\n headers,\n userId,\n options?.table,\n params\n );\n });\n }\n\n /**\n * Get all available memory topics\n */\n async getMemoryTopics(\n options?: { params?: Record<string, string>; table?: string }\n ): Promise<string[]> {\n const config = this.configManager.getConfig();\n const dbId = this.configManager.getDbId() || '';\n\n const params = this.configManager.buildQueryString(options?.params);\n\n const topics = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.memoryManager.getMemoryTopics(\n config.endpoint,\n dbId,\n headers,\n options?.table,\n params\n );\n });\n\n this.state.memoryTopics = topics;\n this.emit('state:change', this.getState());\n\n return topics;\n }\n\n /**\n * Get user memory statistics\n */\n async getUserMemoryStats(\n queryParams?: UserMemoryStatsParams,\n options?: { params?: Record<string, string> }\n ): Promise<UserMemoryStatsResponse> {\n const config = this.configManager.getConfig();\n const dbId = this.configManager.getDbId() || '';\n\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.memoryManager.getUserMemoryStats(\n config.endpoint,\n dbId,\n headers,\n queryParams,\n params\n );\n });\n }\n\n /**\n * Create a new memory\n */\n async createMemory(\n request: CreateMemoryRequest,\n options?: { params?: Record<string, string>; table?: string }\n ): Promise<UserMemory> {\n const config = this.configManager.getConfig();\n const dbId = this.configManager.getDbId() || '';\n\n const params = this.configManager.buildQueryString(options?.params);\n\n const memory = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.memoryManager.createMemory(\n config.endpoint,\n request,\n dbId,\n headers,\n options?.table,\n params\n );\n });\n\n // Add to state\n this.state.memories = [memory, ...this.state.memories];\n this.emit('memory:created', memory);\n this.emit('state:change', this.getState());\n\n return memory;\n }\n\n /**\n * Update an existing memory\n */\n async updateMemory(\n memoryId: string,\n request: UpdateMemoryRequest,\n options?: { params?: Record<string, string>; table?: string }\n ): Promise<UserMemory> {\n const config = this.configManager.getConfig();\n const dbId = this.configManager.getDbId() || '';\n\n const params = this.configManager.buildQueryString(options?.params);\n\n const memory = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.memoryManager.updateMemory(\n config.endpoint,\n memoryId,\n request,\n dbId,\n headers,\n options?.table,\n params\n );\n });\n\n // Update in state\n this.state.memories = this.state.memories.map((m) =>\n m.memory_id === memoryId ? memory : m\n );\n this.emit('memory:updated', memory);\n this.emit('state:change', this.getState());\n\n return memory;\n }\n\n /**\n * Delete a single memory\n */\n async deleteMemory(\n memoryId: string,\n options?: { params?: Record<string, string>; table?: string }\n ): Promise<void> {\n const config = this.configManager.getConfig();\n const dbId = this.configManager.getDbId() || '';\n const userId = this.configManager.getUserId();\n\n const params = this.configManager.buildQueryString(options?.params);\n\n await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.memoryManager.deleteMemory(\n config.endpoint,\n memoryId,\n dbId,\n headers,\n userId,\n options?.table,\n params\n );\n });\n\n // Remove from state\n this.state.memories = this.state.memories.filter(\n (m) => m.memory_id !== memoryId\n );\n this.emit('memory:deleted', { memoryId });\n this.emit('state:change', this.getState());\n }\n\n /**\n * Delete multiple memories\n */\n async deleteMultipleMemories(\n memoryIds: string[],\n options?: { params?: Record<string, string>; table?: string; userId?: string }\n ): Promise<void> {\n const config = this.configManager.getConfig();\n const dbId = this.configManager.getDbId() || '';\n\n const params = this.configManager.buildQueryString(options?.params);\n\n const request: DeleteMultipleMemoriesRequest = {\n memory_ids: memoryIds,\n user_id: options?.userId,\n };\n\n await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.memoryManager.deleteMultipleMemories(\n config.endpoint,\n request,\n dbId,\n headers,\n options?.table,\n params\n );\n });\n\n // Remove from state\n const deletedIds = new Set(memoryIds);\n this.state.memories = this.state.memories.filter(\n (m) => !deletedIds.has(m.memory_id)\n );\n this.emit('memories:deleted', { memoryIds });\n this.emit('state:change', this.getState());\n }\n\n // ============================================================================\n // Knowledge API Methods\n // ============================================================================\n\n /**\n * Get knowledge configuration\n */\n async getKnowledgeConfig(\n options?: { dbId?: string; params?: Record<string, string> }\n ): Promise<KnowledgeConfigResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.knowledgeManager.getConfig(\n config.endpoint,\n headers,\n options?.dbId ?? this.configManager.getDbId(),\n params\n );\n });\n }\n\n /**\n * List knowledge content\n */\n async listKnowledgeContent(\n listOptions?: ContentListOptions,\n options?: { params?: Record<string, string> }\n ): Promise<ContentListResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.knowledgeManager.listContent(\n config.endpoint,\n headers,\n listOptions,\n params\n );\n });\n }\n\n /**\n * Get knowledge content by ID\n */\n async getKnowledgeContent(\n contentId: string,\n options?: { dbId?: string; params?: Record<string, string> }\n ): Promise<ContentResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.knowledgeManager.getContent(\n config.endpoint,\n contentId,\n headers,\n options?.dbId ?? this.configManager.getDbId(),\n params\n );\n });\n }\n\n /**\n * Get knowledge content status\n */\n async getKnowledgeContentStatus(\n contentId: string,\n options?: { dbId?: string; params?: Record<string, string> }\n ): Promise<ContentStatusResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.knowledgeManager.getContentStatus(\n config.endpoint,\n contentId,\n headers,\n options?.dbId ?? this.configManager.getDbId(),\n params\n );\n });\n }\n\n /**\n * Search knowledge base\n */\n async searchKnowledge(\n request: VectorSearchRequest,\n options?: { params?: Record<string, string> }\n ): Promise<VectorSearchResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n // Use dbId from config if not specified in request\n const searchRequest: VectorSearchRequest = {\n ...request,\n db_id: request.db_id ?? this.configManager.getDbId(),\n };\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.knowledgeManager.search(\n config.endpoint,\n searchRequest,\n headers,\n params\n );\n });\n }\n\n /**\n * Upload knowledge content\n * @param data - FormData with file/text_content or ContentUploadRequest object\n */\n async uploadKnowledgeContent(\n data:\n | FormData\n | {\n name?: string;\n description?: string;\n url?: string;\n metadata?: Record<string, unknown>;\n file?: File;\n text_content?: string;\n reader_id?: string;\n chunker?: string;\n chunk_size?: number;\n chunk_overlap?: number;\n },\n options?: { dbId?: string; params?: Record<string, string> }\n ): Promise<ContentResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n // Convert object to FormData if needed\n let formData: FormData;\n if (data instanceof FormData) {\n formData = data;\n } else {\n formData = new FormData();\n if (data.name) formData.append('name', data.name);\n if (data.description) formData.append('description', data.description);\n if (data.url) formData.append('url', data.url);\n if (data.metadata) formData.append('metadata', JSON.stringify(data.metadata));\n if (data.file) formData.append('file', data.file);\n if (data.text_content) formData.append('text_content', data.text_content);\n if (data.reader_id) formData.append('reader_id', data.reader_id);\n if (data.chunker) formData.append('chunker', data.chunker);\n if (data.chunk_size !== undefined)\n formData.append('chunk_size', String(data.chunk_size));\n if (data.chunk_overlap !== undefined)\n formData.append('chunk_overlap', String(data.chunk_overlap));\n }\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.knowledgeManager.uploadContent(\n config.endpoint,\n formData,\n headers,\n options?.dbId ?? this.configManager.getDbId(),\n params\n );\n });\n }\n\n /**\n * Update knowledge content\n */\n async updateKnowledgeContent(\n contentId: string,\n request: ContentUpdateRequest,\n options?: { dbId?: string; params?: Record<string, string> }\n ): Promise<ContentResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.knowledgeManager.updateContent(\n config.endpoint,\n contentId,\n request,\n headers,\n options?.dbId ?? this.configManager.getDbId(),\n params\n );\n });\n }\n\n /**\n * Delete all knowledge content\n */\n async deleteAllKnowledgeContent(\n options?: { dbId?: string; params?: Record<string, string> }\n ): Promise<void> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.knowledgeManager.deleteAllContent(\n config.endpoint,\n headers,\n options?.dbId ?? this.configManager.getDbId(),\n params\n );\n });\n }\n\n /**\n * Delete knowledge content by ID\n */\n async deleteKnowledgeContent(\n contentId: string,\n options?: { dbId?: string; params?: Record<string, string> }\n ): Promise<ContentResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.knowledgeManager.deleteContent(\n config.endpoint,\n contentId,\n headers,\n options?.dbId ?? this.configManager.getDbId(),\n params\n );\n });\n }\n\n // ============================================================================\n // Metrics API Methods\n // ============================================================================\n\n /**\n * Fetch aggregated metrics from the endpoint\n *\n * @param options - Options including date range, dbId, table, and custom params\n * @returns MetricsResponse containing daily aggregated metrics\n */\n async fetchMetrics(options?: MetricsOptions): Promise<MetricsResponse> {\n const url = new URL(`${this.configManager.getEndpoint()}/metrics`);\n\n // Build query params from global config + per-request params\n const params = this.configManager.buildQueryString(options?.params);\n\n // Add metrics-specific parameters\n if (options?.startingDate) {\n params.set('starting_date', options.startingDate);\n }\n if (options?.endingDate) {\n params.set('ending_date', options.endingDate);\n }\n\n // Use provided dbId or fall back to config\n const dbId = options?.dbId ?? this.configManager.getDbId();\n if (dbId) {\n params.set('db_id', dbId);\n }\n\n if (options?.table) {\n params.set('table', options.table);\n }\n\n // Apply params to URL\n if (params.toString()) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await this.fetchWithTokenRefresh(url.toString());\n if (!response.ok) {\n throw new Error(`Failed to fetch metrics: ${response.status} ${response.statusText}`);\n }\n\n const metrics: MetricsResponse = await response.json();\n return metrics;\n }\n\n /**\n * Refresh/recalculate metrics on the backend\n *\n * @param options - Options including dbId, table, and custom params\n * @returns Array of refreshed DayAggregatedMetrics\n */\n async refreshMetrics(options?: RefreshMetricsOptions): Promise<DayAggregatedMetrics[]> {\n const url = new URL(`${this.configManager.getEndpoint()}/metrics/refresh`);\n\n // Build query params from global config + per-request params\n const params = this.configManager.buildQueryString(options?.params);\n\n // Use provided dbId or fall back to config\n const dbId = options?.dbId ?? this.configManager.getDbId();\n if (dbId) {\n params.set('db_id', dbId);\n }\n\n if (options?.table) {\n params.set('table', options.table);\n }\n\n // Apply params to URL\n if (params.toString()) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await this.fetchWithTokenRefresh(url.toString(), {\n method: 'POST',\n });\n\n if (!response.ok) {\n throw new Error(`Failed to refresh metrics: ${response.status} ${response.statusText}`);\n }\n\n const metrics: DayAggregatedMetrics[] = await response.json();\n return metrics;\n }\n\n // ============================================================================\n // Evaluation Methods\n // ============================================================================\n\n /**\n * List evaluation runs with optional filtering and pagination\n * @param listParams - Parameters for filtering and pagination\n * @param options - Optional request query parameters\n */\n async listEvalRuns(\n listParams: ListEvalRunsParams = {},\n options?: { params?: Record<string, string> }\n ): Promise<EvalRunsListResponse> {\n const additionalParams = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.evalManager.listEvalRuns(\n this.configManager.getEndpoint(),\n listParams,\n headers,\n additionalParams\n );\n });\n }\n\n /**\n * Get a specific evaluation run by ID\n * @param evalRunId - The evaluation run ID\n * @param options - Optional db_id, table, and query parameters\n */\n async getEvalRun(\n evalRunId: string,\n options?: { dbId?: string; table?: string; params?: Record<string, string> }\n ): Promise<EvalSchema> {\n const additionalParams = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.evalManager.getEvalRun(\n this.configManager.getEndpoint(),\n evalRunId,\n options?.dbId,\n options?.table,\n headers,\n additionalParams\n );\n });\n }\n\n /**\n * Execute a new evaluation\n * @param request - The evaluation request parameters\n * @param options - Optional db_id, table, and query parameters\n */\n async executeEval(\n request: ExecuteEvalRequest,\n options?: { dbId?: string; table?: string; params?: Record<string, string> }\n ): Promise<EvalSchema> {\n const additionalParams = this.configManager.buildQueryString(options?.params);\n\n const result = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.evalManager.executeEval(\n this.configManager.getEndpoint(),\n request,\n options?.dbId,\n options?.table,\n headers,\n additionalParams\n );\n });\n\n this.emit('eval:executed', result);\n return result;\n }\n\n /**\n * Update an evaluation run (rename)\n * @param evalRunId - The evaluation run ID\n * @param request - The update request with new name\n * @param options - Optional db_id, table, and query parameters\n */\n async updateEvalRun(\n evalRunId: string,\n request: UpdateEvalRunRequest,\n options?: { dbId?: string; table?: string; params?: Record<string, string> }\n ): Promise<EvalSchema> {\n const additionalParams = this.configManager.buildQueryString(options?.params);\n\n const result = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.evalManager.updateEvalRun(\n this.configManager.getEndpoint(),\n evalRunId,\n request,\n options?.dbId,\n options?.table,\n headers,\n additionalParams\n );\n });\n\n this.emit('eval:updated', result);\n return result;\n }\n\n /**\n * Delete multiple evaluation runs\n * @param evalRunIds - Array of evaluation run IDs to delete\n * @param options - Optional db_id, table, and query parameters\n */\n async deleteEvalRuns(\n evalRunIds: string[],\n options?: { dbId?: string; table?: string; params?: Record<string, string> }\n ): Promise<void> {\n const additionalParams = this.configManager.buildQueryString(options?.params);\n\n await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.evalManager.deleteEvalRuns(\n this.configManager.getEndpoint(),\n { eval_run_ids: evalRunIds },\n options?.dbId,\n options?.table,\n headers,\n additionalParams\n );\n });\n\n this.emit('evals:deleted', { evalRunIds });\n }\n\n // =============================================================================\n // TRACES API METHODS\n // =============================================================================\n\n /**\n * Fetch traces with optional filters\n * GET /traces\n *\n * @param options - Filter and pagination options\n * @param requestOptions - Optional per-request headers and params\n * @returns Paginated traces result with traces and pagination info\n */\n async fetchTraces(\n options: ListTracesOptions = {},\n requestOptions?: { headers?: Record<string, string>; params?: Record<string, string> }\n ): Promise<PaginatedTracesResult> {\n const config = this.configManager.getConfig();\n const dbId = this.configManager.getDbId();\n\n // Apply dbId from config if not specified in options\n const traceOptions: ListTracesOptions = {\n ...options,\n db_id: options.db_id ?? dbId,\n };\n\n const params = this.configManager.buildQueryString(requestOptions?.params);\n\n const result = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders(requestOptions?.headers);\n return this.tracesManager.fetchTraces(config.endpoint, traceOptions, headers, params);\n });\n\n // Update state with fetched traces\n this.state.traces = result.traces;\n this.emit('state:change', this.getState());\n\n return result;\n }\n\n /**\n * Get trace detail or a specific span\n * GET /traces/{trace_id}\n *\n * @param traceId - The trace ID to fetch\n * @param options - Options including optional span_id, run_id, db_id\n * @param requestOptions - Optional per-request headers and params\n * @returns TraceDetail (full trace) or TraceNode (specific span)\n */\n async getTraceDetail(\n traceId: string,\n options: GetTraceOptions = {},\n requestOptions?: { headers?: Record<string, string>; params?: Record<string, string> }\n ): Promise<TraceDetail | TraceNode> {\n const config = this.configManager.getConfig();\n const dbId = this.configManager.getDbId();\n\n // Apply dbId from config if not specified in options\n const traceOptions: GetTraceOptions = {\n ...options,\n db_id: options.db_id ?? dbId,\n };\n\n const params = this.configManager.buildQueryString(requestOptions?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders(requestOptions?.headers);\n return this.tracesManager.getTraceDetail(config.endpoint, traceId, traceOptions, headers, params);\n });\n }\n\n /**\n * Get trace session statistics\n * GET /trace_session_stats\n *\n * @param options - Filter and pagination options\n * @param requestOptions - Optional per-request headers and params\n * @returns Paginated trace session stats result\n */\n async fetchTraceSessionStats(\n options: GetTraceSessionStatsOptions = {},\n requestOptions?: { headers?: Record<string, string>; params?: Record<string, string> }\n ): Promise<PaginatedTraceSessionStatsResult> {\n const config = this.configManager.getConfig();\n const dbId = this.configManager.getDbId();\n\n // Apply dbId from config if not specified in options\n const statsOptions: GetTraceSessionStatsOptions = {\n ...options,\n db_id: options.db_id ?? dbId,\n };\n\n const params = this.configManager.buildQueryString(requestOptions?.params);\n\n const result = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders(requestOptions?.headers);\n return this.tracesManager.getTraceSessionStats(config.endpoint, statsOptions, headers, params);\n });\n\n // Update state with fetched stats\n this.state.traceSessionStats = result.stats;\n this.emit('state:change', this.getState());\n\n return result;\n }\n\n // ==========================================================================\n // Schedules API\n // ==========================================================================\n\n /**\n * Fetch schedules with filtering and pagination\n */\n async fetchSchedules(\n queryParams?: ListSchedulesParams,\n options?: { params?: Record<string, string> }\n ): Promise<SchedulesListResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n const response = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.scheduleManager.fetchSchedules(config.endpoint, headers, queryParams, params);\n });\n\n this.state.schedules = response.data;\n this.emit('state:change', this.getState());\n\n return response;\n }\n\n /**\n * Get a specific schedule by ID\n */\n async getScheduleById(\n scheduleId: string,\n options?: { params?: Record<string, string> }\n ): Promise<ScheduleResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.scheduleManager.getScheduleById(config.endpoint, scheduleId, headers, params);\n });\n }\n\n /**\n * Create a new schedule\n */\n async createSchedule(\n request: ScheduleCreate,\n options?: { params?: Record<string, string> }\n ): Promise<ScheduleResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n const schedule = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.scheduleManager.createSchedule(config.endpoint, request, headers, params);\n });\n\n this.state.schedules = [schedule, ...this.state.schedules];\n this.emit('schedule:created', schedule);\n this.emit('state:change', this.getState());\n\n return schedule;\n }\n\n /**\n * Update an existing schedule\n */\n async updateSchedule(\n scheduleId: string,\n request: ScheduleUpdate,\n options?: { params?: Record<string, string> }\n ): Promise<ScheduleResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n const schedule = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.scheduleManager.updateSchedule(config.endpoint, scheduleId, request, headers, params);\n });\n\n this.state.schedules = this.state.schedules.map((s) =>\n s.id === scheduleId ? schedule : s\n );\n this.emit('schedule:updated', schedule);\n this.emit('state:change', this.getState());\n\n return schedule;\n }\n\n /**\n * Delete a schedule\n */\n async deleteSchedule(\n scheduleId: string,\n options?: { params?: Record<string, string> }\n ): Promise<void> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.scheduleManager.deleteSchedule(config.endpoint, scheduleId, headers, params);\n });\n\n this.state.schedules = this.state.schedules.filter((s) => s.id !== scheduleId);\n this.emit('schedule:deleted', { scheduleId });\n this.emit('state:change', this.getState());\n }\n\n /**\n * Enable a schedule\n */\n async enableSchedule(\n scheduleId: string,\n options?: { params?: Record<string, string> }\n ): Promise<ScheduleStateResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n const result = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.scheduleManager.enableSchedule(config.endpoint, scheduleId, headers, params);\n });\n\n this.state.schedules = this.state.schedules.map((s) =>\n s.id === scheduleId ? { ...s, enabled: true, next_run_at: result.next_run_at, updated_at: result.updated_at } : s\n );\n this.emit('schedule:enabled', result);\n this.emit('state:change', this.getState());\n\n return result;\n }\n\n /**\n * Disable a schedule\n */\n async disableSchedule(\n scheduleId: string,\n options?: { params?: Record<string, string> }\n ): Promise<ScheduleStateResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n const result = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.scheduleManager.disableSchedule(config.endpoint, scheduleId, headers, params);\n });\n\n this.state.schedules = this.state.schedules.map((s) =>\n s.id === scheduleId ? { ...s, enabled: false, next_run_at: result.next_run_at, updated_at: result.updated_at } : s\n );\n this.emit('schedule:disabled', result);\n this.emit('state:change', this.getState());\n\n return result;\n }\n\n /**\n * Trigger a schedule to run immediately\n */\n async triggerSchedule(\n scheduleId: string,\n options?: { params?: Record<string, string> }\n ): Promise<ScheduleRunResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n const run = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.scheduleManager.triggerSchedule(config.endpoint, scheduleId, headers, params);\n });\n\n this.emit('schedule:triggered', run);\n\n return run;\n }\n\n /**\n * Fetch runs for a specific schedule\n */\n async fetchScheduleRuns(\n scheduleId: string,\n queryParams?: ListScheduleRunsParams,\n options?: { params?: Record<string, string> }\n ): Promise<ScheduleRunsListResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.scheduleManager.fetchScheduleRuns(config.endpoint, scheduleId, headers, queryParams, params);\n });\n }\n\n /**\n * Get a specific schedule run by ID\n */\n async getScheduleRunById(\n scheduleId: string,\n runId: string,\n options?: { params?: Record<string, string> }\n ): Promise<ScheduleRunResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.scheduleManager.getScheduleRunById(config.endpoint, scheduleId, runId, headers, params);\n });\n }\n\n // ==========================================================================\n // Approvals API\n // ==========================================================================\n\n /**\n * Fetch approvals with filtering and pagination\n */\n async fetchApprovals(\n queryParams?: ListApprovalsParams,\n options?: { params?: Record<string, string> }\n ): Promise<ApprovalsListResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n const response = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.approvalManager.fetchApprovals(config.endpoint, headers, queryParams, params);\n });\n\n this.state.approvals = response.data;\n this.emit('state:change', this.getState());\n\n return response;\n }\n\n /**\n * Get approval count\n */\n async getApprovalCount(\n options?: { params?: Record<string, string>; userId?: string }\n ): Promise<ApprovalCountResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n const userId = options?.userId ?? this.configManager.getUserId();\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.approvalManager.getApprovalCount(config.endpoint, headers, userId, params);\n });\n }\n\n /**\n * Get approval status\n */\n async getApprovalStatus(\n approvalId: string,\n options?: { params?: Record<string, string> }\n ): Promise<ApprovalStatusResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.approvalManager.getApprovalStatus(config.endpoint, approvalId, headers, params);\n });\n }\n\n /**\n * Get a specific approval by ID\n */\n async getApprovalById(\n approvalId: string,\n options?: { params?: Record<string, string> }\n ): Promise<ApprovalResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.approvalManager.getApprovalById(config.endpoint, approvalId, headers, params);\n });\n }\n\n /**\n * Resolve an approval (approve or reject)\n */\n async resolveApproval(\n approvalId: string,\n request: ApprovalResolve,\n options?: { params?: Record<string, string> }\n ): Promise<ApprovalResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n const approval = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.approvalManager.resolveApproval(config.endpoint, approvalId, request, headers, params);\n });\n\n this.state.approvals = this.state.approvals.map((a) =>\n a.id === approvalId ? approval : a\n );\n this.emit('approval:resolved', approval);\n this.emit('state:change', this.getState());\n\n return approval;\n }\n\n /**\n * Delete an approval\n */\n async deleteApproval(\n approvalId: string,\n options?: { params?: Record<string, string> }\n ): Promise<void> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.approvalManager.deleteApproval(config.endpoint, approvalId, headers, params);\n });\n\n this.state.approvals = this.state.approvals.filter((a) => a.id !== approvalId);\n this.emit('approval:deleted', { approvalId });\n this.emit('state:change', this.getState());\n }\n\n // ==========================================================================\n // Components API\n // ==========================================================================\n\n /**\n * Fetch components with filtering and pagination\n */\n async fetchComponents(\n queryParams?: ListComponentsParams,\n options?: { params?: Record<string, string> }\n ): Promise<ComponentsListResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n const response = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.componentManager.fetchComponents(config.endpoint, headers, queryParams, params);\n });\n\n this.state.components = response.data;\n this.emit('state:change', this.getState());\n\n return response;\n }\n\n /**\n * Create a new component\n */\n async createComponent(\n request: ComponentCreate,\n options?: { params?: Record<string, string> }\n ): Promise<ComponentResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n const component = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.componentManager.createComponent(config.endpoint, request, headers, params);\n });\n\n this.state.components = [component, ...this.state.components];\n this.emit('component:created', component);\n this.emit('state:change', this.getState());\n\n return component;\n }\n\n /**\n * Get a specific component by ID\n */\n async getComponentById(\n componentId: string,\n options?: { params?: Record<string, string> }\n ): Promise<ComponentResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.componentManager.getComponentById(config.endpoint, componentId, headers, params);\n });\n }\n\n /**\n * Update an existing component\n */\n async updateComponent(\n componentId: string,\n request: ComponentUpdate,\n options?: { params?: Record<string, string> }\n ): Promise<ComponentResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n const component = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.componentManager.updateComponent(config.endpoint, componentId, request, headers, params);\n });\n\n this.state.components = this.state.components.map((c) =>\n c.component_id === componentId ? component : c\n );\n this.emit('component:updated', component);\n this.emit('state:change', this.getState());\n\n return component;\n }\n\n /**\n * Delete a component\n */\n async deleteComponent(\n componentId: string,\n options?: { params?: Record<string, string> }\n ): Promise<void> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.componentManager.deleteComponent(config.endpoint, componentId, headers, params);\n });\n\n this.state.components = this.state.components.filter((c) => c.component_id !== componentId);\n this.emit('component:deleted', { componentId });\n this.emit('state:change', this.getState());\n }\n\n /**\n * Fetch all config versions for a component\n */\n async fetchComponentConfigs(\n componentId: string,\n options?: { params?: Record<string, string> }\n ): Promise<ComponentConfigResponse[]> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.componentManager.fetchComponentConfigs(config.endpoint, componentId, headers, params);\n });\n }\n\n /**\n * Create a new config version for a component\n */\n async createComponentConfig(\n componentId: string,\n request: ConfigCreate,\n options?: { params?: Record<string, string> }\n ): Promise<ComponentConfigResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n const configResponse = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.componentManager.createComponentConfig(config.endpoint, componentId, request, headers, params);\n });\n\n this.emit('component:config:created', configResponse);\n\n return configResponse;\n }\n\n /**\n * Get the current active config for a component\n */\n async getCurrentComponentConfig(\n componentId: string,\n options?: { params?: Record<string, string> }\n ): Promise<ComponentConfigResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.componentManager.getCurrentConfig(config.endpoint, componentId, headers, params);\n });\n }\n\n /**\n * Get a specific config version for a component\n */\n async getComponentConfigByVersion(\n componentId: string,\n version: number,\n options?: { params?: Record<string, string> }\n ): Promise<ComponentConfigResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.componentManager.getConfigByVersion(config.endpoint, componentId, version, headers, params);\n });\n }\n\n /**\n * Update a draft config version for a component\n */\n async updateComponentConfig(\n componentId: string,\n version: number,\n request: ConfigUpdate,\n options?: { params?: Record<string, string> }\n ): Promise<ComponentConfigResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n const configResponse = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.componentManager.updateConfig(config.endpoint, componentId, version, request, headers, params);\n });\n\n this.emit('component:config:updated', configResponse);\n\n return configResponse;\n }\n\n /**\n * Delete a draft config version for a component\n */\n async deleteComponentConfig(\n componentId: string,\n version: number,\n options?: { params?: Record<string, string> }\n ): Promise<void> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.componentManager.deleteConfig(config.endpoint, componentId, version, headers, params);\n });\n\n this.emit('component:config:deleted', { componentId, version });\n }\n\n /**\n * Set a config version as the current active config for a component\n */\n async setCurrentComponentConfig(\n componentId: string,\n version: number,\n options?: { params?: Record<string, string> }\n ): Promise<ComponentConfigResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n const configResponse = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.componentManager.setCurrentConfig(config.endpoint, componentId, version, headers, params);\n });\n\n this.emit('component:config:set-current', configResponse);\n\n return configResponse;\n }\n}\n",
5
+ "import EventEmitter from 'eventemitter3';\nimport type {\n AgnoClientConfig,\n ChatMessage,\n ImageData,\n AudioData,\n UserFileAttachment,\n RunResponse,\n SessionEntry,\n AgentDetails,\n TeamDetails,\n ClientState,\n ToolCall,\n CustomEventData,\n AgentSessionDetailSchema,\n TeamSessionDetailSchema,\n RunSchema,\n TeamRunSchema,\n CreateSessionRequest,\n UpdateSessionRequest,\n UserMemory,\n MemoriesListResponse,\n ListMemoriesParams,\n CreateMemoryRequest,\n UpdateMemoryRequest,\n DeleteMultipleMemoriesRequest,\n UserMemoryStatsResponse,\n UserMemoryStatsParams,\n KnowledgeConfigResponse,\n ContentResponse,\n ContentStatusResponse,\n ContentListResponse,\n ContentListOptions,\n VectorSearchRequest,\n VectorSearchResponse,\n ContentUpdateRequest,\n MetricsResponse,\n MetricsOptions,\n RefreshMetricsOptions,\n DayAggregatedMetrics,\n EvalSchema,\n EvalRunsListResponse,\n ListEvalRunsParams,\n ExecuteEvalRequest,\n UpdateEvalRunRequest,\n TraceDetail,\n TraceNode,\n ListTracesOptions,\n GetTraceOptions,\n GetTraceSessionStatsOptions,\n ScheduleResponse,\n ScheduleCreate,\n ScheduleUpdate,\n ScheduleStateResponse,\n ScheduleRunResponse,\n SchedulesListResponse,\n ScheduleRunsListResponse,\n ListSchedulesParams,\n ListScheduleRunsParams,\n ApprovalResponse,\n ApprovalResolve,\n ApprovalCountResponse,\n ApprovalStatusResponse,\n ApprovalsListResponse,\n ListApprovalsParams,\n ComponentResponse,\n ComponentCreate,\n ComponentUpdate,\n ComponentConfigResponse,\n ConfigCreate,\n ConfigUpdate,\n ComponentsListResponse,\n ListComponentsParams,\n} from '@rodrigocoliveira/agno-types';\nimport { RunEvent } from '@rodrigocoliveira/agno-types';\nimport { MessageStore } from './stores/message-store';\nimport { ConfigManager } from './managers/config-manager';\nimport { SessionManager } from './managers/session-manager';\nimport { MemoryManager } from './managers/memory-manager';\nimport { KnowledgeManager } from './managers/knowledge-manager';\nimport { EvalManager } from './managers/eval-manager';\nimport { TracesManager, PaginatedTracesResult, PaginatedTraceSessionStatsResult } from './managers/traces-manager';\nimport { ScheduleManager } from './managers/schedule-manager';\nimport { ApprovalManager } from './managers/approval-manager';\nimport { ComponentManager } from './managers/component-manager';\nimport { SessionStateManager } from './managers/session-state-manager';\nimport { EventProcessor } from './processors/event-processor';\nimport { streamResponse } from './parsers/stream-parser';\nimport { Logger } from './utils/logger';\nimport { parseToolArgs } from './utils/parse-tool-arg';\n\n/**\n * Safely converts a Unix timestamp to ISO string with validation\n */\nfunction toSafeISOString(timestamp: number | undefined): string {\n const now = Date.now();\n const ts = timestamp ? timestamp * 1000 : now;\n\n // Validate timestamp is reasonable (between 2000 and 2100)\n const MIN_TIMESTAMP = 946684800000; // 2000-01-01\n const MAX_TIMESTAMP = 4102444800000; // 2100-01-01\n\n if (ts < MIN_TIMESTAMP || ts > MAX_TIMESTAMP || !Number.isFinite(ts)) {\n Logger.warn(`Invalid timestamp: ${timestamp}, using current time`);\n return new Date(now).toISOString();\n }\n\n return new Date(ts).toISOString();\n}\n\n/**\n * Main Agno client class\n * Provides stateful management of agent/team interactions with streaming support\n */\nexport class AgnoClient extends EventEmitter {\n private messageStore: MessageStore;\n private configManager: ConfigManager;\n private sessionManager: SessionManager;\n private memoryManager: MemoryManager;\n private knowledgeManager: KnowledgeManager;\n private evalManager: EvalManager;\n private tracesManager: TracesManager;\n private scheduleManager: ScheduleManager;\n private approvalManager: ApprovalManager;\n private componentManager: ComponentManager;\n private sessionStateManager: SessionStateManager;\n private eventProcessor: EventProcessor;\n private state: ClientState;\n private pendingUISpecs: Map<string, any>; // toolCallId -> UIComponentSpec\n private runCompletedSuccessfully: boolean = false;\n private currentRunId?: string;\n private abortController?: AbortController;\n\n constructor(config: AgnoClientConfig) {\n super();\n this.messageStore = new MessageStore();\n this.configManager = new ConfigManager(config);\n this.sessionManager = new SessionManager();\n this.memoryManager = new MemoryManager();\n this.knowledgeManager = new KnowledgeManager();\n this.evalManager = new EvalManager();\n this.tracesManager = new TracesManager();\n this.scheduleManager = new ScheduleManager();\n this.approvalManager = new ApprovalManager();\n this.componentManager = new ComponentManager();\n this.sessionStateManager = new SessionStateManager();\n this.eventProcessor = new EventProcessor();\n this.pendingUISpecs = new Map();\n this.state = {\n isStreaming: false,\n isRefreshing: false,\n isEndpointActive: false,\n agents: [],\n teams: [],\n sessions: [],\n isPaused: false,\n pausedRunId: undefined,\n toolsAwaitingExecution: undefined,\n currentRunId: undefined,\n isCancelling: false,\n memories: [],\n memoryTopics: [],\n traces: [],\n traceSessionStats: [],\n schedules: [],\n approvals: [],\n components: [],\n sessionState: null,\n isSessionStateRefreshing: false,\n };\n }\n\n /**\n * Get current messages\n */\n getMessages(): ChatMessage[] {\n return this.messageStore.getMessages();\n }\n\n /**\n * Get current configuration\n */\n getConfig(): AgnoClientConfig {\n return this.configManager.getConfig();\n }\n\n /**\n * Get current state\n */\n getState(): ClientState {\n return { ...this.state };\n }\n\n /**\n * Update configuration\n */\n updateConfig(updates: Partial<AgnoClientConfig>): void {\n this.configManager.updateConfig(updates);\n this.emit('config:change', this.configManager.getConfig());\n }\n\n /**\n * Clear all messages\n */\n clearMessages(): void {\n this.messageStore.clear();\n this.configManager.setSessionId(undefined);\n this.pendingUISpecs.clear(); // Clear any pending UI specs to prevent memory leaks\n this.state.errorMessage = undefined;\n this.sessionStateManager.invalidate();\n if (this.sessionStateManager.clear()) {\n this.state.sessionState = null;\n this.emit('session-state:change', null);\n }\n this.emit('message:update', this.messageStore.getMessages());\n this.emit('state:change', this.getState());\n }\n\n /**\n * Get the current cached session_state (backend-managed per-session dict).\n * Populated from `loadSession`, `RunCompleted` chunks, custom events, or\n * `refreshSessionState()`. Returns null when unknown.\n */\n getSessionState<T extends Record<string, unknown> = Record<string, unknown>>():\n | T\n | null {\n return this.sessionStateManager.get() as T | null;\n }\n\n /**\n * Replace session_state in the cache and persist via PATCH /sessions/{id}.\n * Emits `session-state:change` and `state:change` on success.\n */\n async setSessionState(\n state: Record<string, unknown>,\n options?: { params?: Record<string, string> }\n ): Promise<void> {\n const sessionId = this.configManager.getSessionId();\n if (!sessionId) {\n throw new Error('setSessionState requires an active session — call sendMessage or loadSession first.');\n }\n await this.updateSession(sessionId, { session_state: state }, options);\n this.applySessionState(state, { source: 'manual-set' });\n }\n\n /**\n * Re-fetch the active session's session_state from the backend. Used as the\n * escape hatch when streamed sources are unreliable (e.g., team runs where\n * TeamRunCompleted does not carry session_state).\n */\n async refreshSessionState(\n options?: { params?: Record<string, string>; silent?: boolean }\n ): Promise<Record<string, unknown> | null> {\n const sessionId = this.configManager.getSessionId();\n if (!sessionId) return null;\n\n const epoch = this.sessionStateManager.currentEpoch();\n if (!options?.silent) {\n this.state.isSessionStateRefreshing = true;\n this.emit('session-state:refresh:start');\n this.emit('state:change', this.getState());\n }\n\n try {\n const detail = await this.getSessionById(sessionId, { params: options?.params });\n if (!this.sessionStateManager.isEpochCurrent(epoch)) {\n // The user switched sessions mid-refresh — discard this response.\n return null;\n }\n const next = (detail.session_state ?? null) as Record<string, unknown> | null;\n this.applySessionState(next, { source: 'refresh' });\n return next;\n } finally {\n if (!options?.silent && this.sessionStateManager.isEpochCurrent(epoch)) {\n this.state.isSessionStateRefreshing = false;\n this.emit('session-state:refresh:end');\n this.emit('state:change', this.getState());\n }\n }\n }\n\n /**\n * Internal: push a new session_state into the cache and notify listeners.\n * Guards against no-op writes and exposes the origin for debugging.\n */\n private applySessionState(\n next: Record<string, unknown> | null | undefined,\n meta: { source: 'custom-event' | 'run-completed' | 'refresh' | 'load-session' | 'manual-set' }\n ): void {\n const changed = this.sessionStateManager.set(next ?? null);\n if (!changed) return;\n this.state.sessionState = this.sessionStateManager.get();\n Logger.debug(`[AgnoClient] session_state updated via ${meta.source}`);\n this.emit('session-state:change', this.state.sessionState);\n this.emit('state:change', this.getState());\n }\n\n /**\n * Send a message to the agent/team (streaming)\n *\n * To cancel a running request, use the `cancelRun()` method which:\n * 1. Aborts the local fetch stream (immediate UI feedback)\n * 2. Notifies the backend to stop processing (saves compute costs)\n */\n async sendMessage(\n message: string | FormData,\n options?: { headers?: Record<string, string>; params?: Record<string, string> }\n ): Promise<void> {\n if (this.state.isStreaming) {\n throw new Error('Already streaming a message');\n }\n\n // Reset completion flag for new message\n this.runCompletedSuccessfully = false;\n\n // Create new AbortController for this request\n this.abortController = new AbortController();\n\n const runUrl = this.configManager.getRunUrl();\n if (!runUrl) {\n throw new Error('No agent or team selected');\n }\n\n this.state.isStreaming = true;\n this.state.errorMessage = undefined;\n this.emit('stream:start');\n this.emit('state:change', this.getState());\n\n const formData = message instanceof FormData ? message : new FormData();\n if (typeof message === 'string') {\n formData.append('message', message);\n }\n\n // Remove previous error messages if retrying\n const lastMessage = this.messageStore.getLastMessage();\n if (lastMessage?.streamingError) {\n const secondLast = this.messageStore.getMessages()[\n this.messageStore.getMessages().length - 2\n ];\n if (secondLast?.role === 'user') {\n this.messageStore.removeLastMessages(2);\n }\n }\n\n // Extract file metadata from FormData for immediate UI rendering\n const userImages: ImageData[] = [];\n const userAudio: AudioData[] = [];\n const userFiles: UserFileAttachment[] = [];\n\n if (message instanceof FormData) {\n // Agno API uses a single \"files\" field for all media types\n const entries = message.getAll('files');\n for (const entry of entries) {\n if (typeof entry !== 'string') {\n const file = entry as File;\n const url = URL.createObjectURL(file);\n const mimeType = file.type || '';\n\n if (mimeType.startsWith('image/')) {\n userImages.push({ url, revised_prompt: file.name || 'Uploaded image' });\n } else if (mimeType.startsWith('audio/')) {\n userAudio.push({ url, mime_type: mimeType });\n } else {\n userFiles.push({\n name: file.name || 'file',\n type: mimeType,\n url,\n size: file.size,\n });\n }\n }\n }\n }\n\n // Add user message\n this.messageStore.addMessage({\n role: 'user',\n content: formData.get('message') as string,\n created_at: Math.floor(Date.now() / 1000),\n ...(userImages.length > 0 ? { images: userImages } : {}),\n ...(userAudio.length > 0 ? { audio: userAudio } : {}),\n ...(userFiles.length > 0 ? { files: userFiles } : {}),\n });\n\n // Add placeholder agent message\n this.messageStore.addMessage({\n role: 'agent',\n content: '',\n tool_calls: [],\n streamingError: false,\n created_at: Math.floor(Date.now() / 1000) + 1,\n });\n\n this.emit('message:update', this.messageStore.getMessages());\n this.eventProcessor.reset();\n\n let newSessionId = this.configManager.getSessionId();\n\n formData.append('stream', 'true');\n formData.append('session_id', newSessionId ?? '');\n\n // Add user_id if configured\n const userId = this.configManager.getUserId();\n if (userId) {\n formData.append('user_id', userId);\n }\n\n // For team mode, control whether backend sends member events\n if (this.configManager.getMode() === 'team') {\n const streamMembers = this.configManager.getStreamMemberEvents();\n formData.append('stream_member_events', String(streamMembers));\n }\n\n await this.executeStream({\n apiUrl: runUrl,\n requestBody: formData,\n signal: this.abortController.signal,\n perRequestHeaders: options?.headers,\n perRequestParams: options?.params,\n onChunk: (chunk: RunResponse) => {\n this.handleChunk(chunk, newSessionId, formData.get('message') as string);\n\n if (\n chunk.event === RunEvent.RunStarted ||\n chunk.event === RunEvent.TeamRunStarted ||\n chunk.event === RunEvent.ReasoningStarted ||\n chunk.event === RunEvent.TeamReasoningStarted\n ) {\n if (chunk.session_id) {\n newSessionId = chunk.session_id;\n this.configManager.setSessionId(chunk.session_id);\n }\n }\n },\n onError: (error) => {\n this.handleError(error, newSessionId);\n },\n onComplete: async () => {\n this.state.isStreaming = false;\n this.currentRunId = undefined;\n this.state.currentRunId = undefined;\n this.abortController = undefined;\n this.emit('stream:end');\n this.emit('message:complete', this.messageStore.getMessages());\n this.emit('state:change', this.getState());\n\n // Trigger refresh if run completed successfully\n if (this.runCompletedSuccessfully) {\n this.runCompletedSuccessfully = false;\n\n // Team runs need an out-of-band session_state fetch because\n // TeamRunCompleted does not carry the field on the wire.\n // See scripts/verify-session-state/FINDINGS.md.\n const cfg = this.configManager.getConfig();\n const shouldRefreshTeamState =\n this.configManager.getMode() === 'team' &&\n (cfg.refreshTeamSessionStateOnStreamEnd ?? true);\n if (shouldRefreshTeamState) {\n try {\n await this.refreshSessionState({ silent: false });\n } catch (err) {\n Logger.debug('[AgnoClient] Post-team-run session_state refresh failed:', err);\n }\n }\n\n await this.refreshSessionMessages();\n }\n },\n });\n }\n\n /**\n * Determine if a RunEvent is a team-level event (prefixed with \"Team\")\n */\n private isTeamEvent(event: RunEvent): boolean {\n return event.toString().startsWith('Team');\n }\n\n /**\n * Determine if an event should update the user-facing message based on mode.\n *\n * In team mode: only Team* events should update the user-facing message.\n * In agent mode: only Run* (non-Team) events should update the user-facing message.\n *\n * Certain events are always processed regardless of mode:\n * - CustomEvent, RunPaused, RunContinued (control flow events)\n */\n private shouldProcessForUserMessage(event: RunEvent): boolean {\n // Control flow events are always processed\n if (\n event === RunEvent.CustomEvent ||\n event === RunEvent.RunPaused ||\n event === RunEvent.RunContinued\n ) {\n return true;\n }\n\n const mode = this.configManager.getMode();\n const isTeam = this.isTeamEvent(event);\n\n if (mode === 'team') {\n // In team mode, only Team* events update user-facing messages\n return isTeam;\n }\n\n // In agent mode, only non-Team events update user-facing messages\n return !isTeam;\n }\n\n /**\n * Emit member-specific events for internal team member activity.\n * Only emits when emitMemberEvents config option is true.\n */\n private emitMemberEvent(event: RunEvent, chunk: RunResponse): void {\n if (!this.configManager.getEmitMemberEvents()) return;\n\n this.emit('member:event', chunk);\n\n // Emit specific member events based on event type\n if (event === RunEvent.RunStarted) {\n this.emit('member:started', chunk);\n } else if (event === RunEvent.RunContent) {\n this.emit('member:content', chunk);\n } else if (event === RunEvent.RunCompleted) {\n this.emit('member:completed', chunk);\n } else if (event === RunEvent.RunError) {\n this.emit('member:error', chunk);\n }\n }\n\n /**\n * Handle streaming chunk\n */\n private handleChunk(chunk: RunResponse, currentSessionId: string | undefined, messageContent: string): void {\n const event = chunk.event as RunEvent;\n\n // Handle session creation and run ID tracking (always process these regardless of mode)\n if (\n event === RunEvent.RunStarted ||\n event === RunEvent.TeamRunStarted ||\n event === RunEvent.ReasoningStarted ||\n event === RunEvent.TeamReasoningStarted\n ) {\n // Track current run ID (only for root-level events)\n if (this.shouldProcessForUserMessage(event) && chunk.run_id) {\n this.currentRunId = chunk.run_id;\n this.state.currentRunId = chunk.run_id;\n this.emit('state:change', this.getState());\n }\n\n if (chunk.session_id && (!currentSessionId || currentSessionId !== chunk.session_id)) {\n const sessionData: SessionEntry = {\n session_id: chunk.session_id,\n session_name: messageContent,\n created_at: toSafeISOString(chunk.created_at),\n };\n\n const sessionExists = this.state.sessions.some(\n (s) => s.session_id === chunk.session_id\n );\n\n if (!sessionExists) {\n this.state.sessions = [sessionData, ...this.state.sessions];\n this.emit('session:created', sessionData);\n }\n }\n }\n\n // Handle run cancellation (user-initiated, distinct from errors)\n if (event === RunEvent.RunCancelled || event === RunEvent.TeamRunCancelled) {\n this.handleRunCancelled(chunk);\n return;\n }\n\n // Handle pause for HITL\n if (event === RunEvent.RunPaused) {\n this.state.isStreaming = false;\n this.state.isPaused = true;\n this.state.pausedRunId = chunk.run_id;\n const pendingTools =\n chunk.tools_awaiting_external_execution ||\n chunk.tools_requiring_confirmation ||\n chunk.tools_requiring_user_input ||\n (chunk.tools || []).filter(\n (t: any) =>\n (t.external_execution_required === true || t.external_execution === true) &&\n (t.result === null || t.result === undefined)\n );\n // Coerce Python-repr tool_args (workaround for agno#8007 / agno-client#11).\n this.state.toolsAwaitingExecution = pendingTools.map((t: any) => ({\n ...t,\n tool_args: parseToolArgs(t.tool_args as Record<string, unknown>),\n }));\n\n this.emit('run:paused', {\n runId: chunk.run_id,\n sessionId: chunk.session_id,\n tools: this.state.toolsAwaitingExecution,\n });\n this.emit('state:change', this.getState());\n return;\n }\n\n // In team mode, filter out internal agent events from user-facing messages\n if (!this.shouldProcessForUserMessage(event)) {\n // Emit member events for debugging/advanced UIs if configured\n this.emitMemberEvent(event, chunk);\n return;\n }\n\n // Handle errors\n if (\n event === RunEvent.RunError ||\n event === RunEvent.TeamRunError\n ) {\n const errorContent =\n (chunk.content as string) || 'Error during run';\n\n this.state.errorMessage = errorContent;\n const lastMessage = this.messageStore.getLastMessage();\n if (lastMessage?.role === 'agent') {\n this.messageStore.removeLastMessages(1);\n }\n this.emit('message:update', this.messageStore.getMessages());\n\n // Remove the session if it was just created\n if (chunk.session_id) {\n this.state.sessions = this.state.sessions.filter(\n (s) => s.session_id !== chunk.session_id\n );\n }\n\n this.emit('message:error', errorContent);\n return;\n }\n\n // Emit semantic custom:event for CustomEvent types\n if (event === RunEvent.CustomEvent) {\n const customEvent = chunk as unknown as CustomEventData;\n this.emit('custom:event', customEvent);\n\n // Live-sync session_state if the payload carries it (opt-out via config).\n const extractor = this.configManager.getConfig().extractSessionStateFromCustomEvent;\n const extracted = this.sessionStateManager.extractFromCustomEvent(customEvent, extractor);\n if (extracted) {\n this.applySessionState(extracted, { source: 'custom-event' });\n }\n }\n\n // Process the chunk and update message\n this.messageStore.updateLastMessage((lastMessage) => {\n const updated = this.eventProcessor.processChunk(chunk, lastMessage);\n return updated || lastMessage;\n });\n\n // Apply any pending UI specs to newly arrived tool calls\n this.applyPendingUISpecs();\n\n // Track if run completed successfully for post-stream refresh\n if (event === RunEvent.RunCompleted || event === RunEvent.TeamRunCompleted) {\n this.runCompletedSuccessfully = true;\n\n // Agent runs carry session_state on the RunCompleted chunk. Teams emit\n // TeamRunCompleted WITHOUT session_state through Agno 2.6.0 — those are\n // handled by the post-stream refresh in onComplete below.\n if (event === RunEvent.RunCompleted && chunk.session_state !== undefined) {\n this.applySessionState(chunk.session_state, { source: 'run-completed' });\n }\n }\n\n this.emit('message:update', this.messageStore.getMessages());\n }\n\n /**\n * Handle error\n */\n private handleError(error: Error, sessionId: string | undefined): void {\n this.state.isStreaming = false;\n this.state.errorMessage = error.message;\n\n const lastMessage = this.messageStore.getLastMessage();\n if (lastMessage?.role === 'agent') {\n this.messageStore.removeLastMessages(1);\n }\n this.emit('message:update', this.messageStore.getMessages());\n\n if (sessionId) {\n this.state.sessions = this.state.sessions.filter(\n (s) => s.session_id !== sessionId\n );\n }\n\n this.emit('message:error', error.message);\n this.emit('stream:end');\n this.emit('state:change', this.getState());\n }\n\n /**\n * Handle RunCancelled event from backend\n * Cancellation is user-initiated and distinct from errors\n */\n private handleRunCancelled(chunk: RunResponse): void {\n this.state.isStreaming = false;\n this.state.isCancelling = false;\n this.state.currentRunId = undefined;\n this.currentRunId = undefined;\n this.abortController = undefined;\n\n // Mark message as cancelled (distinct from error)\n this.messageStore.updateLastMessage((msg) => ({\n ...msg,\n cancelled: true,\n }));\n\n this.emit('run:cancelled', {\n runId: chunk.run_id,\n sessionId: chunk.session_id,\n });\n this.emit('stream:end');\n this.emit('message:update', this.messageStore.getMessages());\n this.emit('state:change', this.getState());\n }\n\n /**\n * Handle local cancellation cleanup\n * Called when user cancels, regardless of backend response\n */\n private handleLocalCancellation(): void {\n const runId = this.currentRunId;\n const sessionId = this.configManager.getSessionId();\n\n this.state.isStreaming = false;\n this.state.isCancelling = false;\n this.state.currentRunId = undefined;\n this.currentRunId = undefined;\n this.abortController = undefined;\n\n this.messageStore.updateLastMessage((msg) => ({\n ...msg,\n cancelled: true,\n }));\n\n this.emit('run:cancelled', { runId, sessionId });\n this.emit('stream:end');\n this.emit('message:update', this.messageStore.getMessages());\n this.emit('state:change', this.getState());\n }\n\n /**\n * Check if an error is a 401 Unauthorized error with \"Token has expired\" detail.\n * Only triggers token refresh for expired tokens, not other auth failures.\n */\n private isTokenExpiredError(error: unknown): boolean {\n if (!(error instanceof Error)) return false;\n const errorWithStatus = error as Error & { status?: number };\n const is401 = errorWithStatus.status === 401 || error.message.includes('401');\n const isExpired = error.message.toLowerCase().includes('token has expired');\n return is401 && isExpired;\n }\n\n /**\n * Attempt to refresh the token using the onTokenExpired callback.\n * If successful, updates the auth token in config.\n *\n * @returns true if token was refreshed, false otherwise\n */\n private async tryRefreshToken(): Promise<boolean> {\n const onTokenExpired = this.configManager.getOnTokenExpired();\n if (!onTokenExpired) {\n return false;\n }\n\n try {\n const newToken = await onTokenExpired();\n if (newToken) {\n this.configManager.setAuthToken(newToken);\n Logger.debug('Token refreshed successfully');\n return true;\n }\n } catch (refreshError) {\n Logger.warn('Token refresh failed:', refreshError);\n }\n\n return false;\n }\n\n /**\n * Execute an operation with automatic token refresh on 401 Unauthorized.\n * Centralizes the token refresh and retry logic for all non-streaming API calls.\n *\n * @param operation - A function that performs the API call and returns a Promise\n * @returns The result of the operation\n * @throws The original error if it's not a 401 or if token refresh fails\n */\n private async withTokenRefresh<T>(operation: () => Promise<T>): Promise<T> {\n try {\n return await operation();\n } catch (error) {\n if (this.isTokenExpiredError(error)) {\n const refreshed = await this.tryRefreshToken();\n if (refreshed) {\n return await operation();\n }\n }\n throw error;\n }\n }\n\n /**\n * Execute a streaming request with automatic token refresh on 401 Unauthorized.\n * This method handles the complexity of rebuilding headers after token refresh.\n *\n * @param config - Configuration for the streaming request\n */\n private async executeStream(config: {\n apiUrl: string;\n requestBody: FormData;\n signal: AbortSignal;\n perRequestHeaders?: Record<string, string>;\n perRequestParams?: Record<string, string>;\n onChunk: (chunk: RunResponse) => void;\n onError: (error: Error) => void;\n onComplete: () => Promise<void>;\n }): Promise<void> {\n const executeStream = async () => {\n const headers = this.configManager.buildRequestHeaders(config.perRequestHeaders);\n const params = this.configManager.buildQueryString(config.perRequestParams);\n\n await streamResponse({\n apiUrl: config.apiUrl,\n headers,\n params,\n requestBody: config.requestBody,\n signal: config.signal,\n onChunk: config.onChunk,\n onError: config.onError,\n onComplete: config.onComplete,\n });\n };\n\n try {\n await executeStream();\n } catch (error) {\n if (this.isTokenExpiredError(error)) {\n const refreshed = await this.tryRefreshToken();\n if (refreshed) {\n try {\n await executeStream();\n return;\n } catch (retryError) {\n config.onError(\n retryError instanceof Error ? retryError : new Error(String(retryError))\n );\n return;\n }\n }\n }\n config.onError(\n error instanceof Error ? error : new Error(String(error))\n );\n }\n }\n\n /**\n * Check if a fetch Response is a 401 with \"Token has expired\" detail.\n * Reads the response body to check for the specific error message.\n */\n private async isTokenExpiredResponse(response: Response): Promise<boolean> {\n if (response.status !== 401) {\n return false;\n }\n\n try {\n const cloned = response.clone();\n const body = await cloned.json();\n const detail = body?.detail?.toLowerCase() || '';\n return detail.includes('token has expired');\n } catch {\n return false;\n }\n }\n\n /**\n * Wrapper for fetch that handles 401 \"Token has expired\" errors with automatic token refresh and retry.\n * Used for non-streaming API calls.\n *\n * @param url - The URL to fetch\n * @param init - Optional fetch init options (method, body, etc.)\n * @returns The fetch Response\n */\n private async fetchWithTokenRefresh(\n url: string,\n init?: RequestInit\n ): Promise<Response> {\n const headers = this.configManager.buildRequestHeaders(\n init?.headers as Record<string, string> | undefined\n );\n\n let response = await fetch(url, { ...init, headers });\n\n // If 401 with \"Token has expired\", try to refresh token and retry once\n if (await this.isTokenExpiredResponse(response)) {\n const refreshed = await this.tryRefreshToken();\n if (refreshed) {\n const newHeaders = this.configManager.buildRequestHeaders(\n init?.headers as Record<string, string> | undefined\n );\n response = await fetch(url, { ...init, headers: newHeaders });\n }\n }\n\n return response;\n }\n\n /**\n * Cancel the current running agent/team run.\n *\n * This will:\n * 1. Abort the local fetch stream (immediate UI feedback)\n * 2. Notify the backend to stop processing\n * 3. Emit 'run:cancelled' event\n *\n * @param options - Optional request headers and query parameters\n * @throws Error if no run is currently streaming\n */\n async cancelRun(options?: {\n headers?: Record<string, string>;\n params?: Record<string, string>;\n }): Promise<void> {\n if (!this.state.isStreaming) {\n throw new Error('No active run to cancel');\n }\n\n if (!this.currentRunId) {\n throw new Error('No run ID available for cancellation');\n }\n\n this.state.isCancelling = true;\n this.emit('state:change', this.getState());\n\n // 1. Abort local stream immediately for instant UI feedback\n if (this.abortController) {\n this.abortController.abort();\n this.abortController = undefined;\n }\n\n // 2. Notify backend to stop processing\n const cancelUrl = this.configManager.getCancelUrl(this.currentRunId);\n if (!cancelUrl) {\n // Still cleanup local state even if no cancel URL\n this.handleLocalCancellation();\n return;\n }\n\n const params = this.configManager.buildQueryString(options?.params);\n const url = new URL(cancelUrl);\n if (params.toString()) {\n params.forEach((value, key) => url.searchParams.set(key, value));\n }\n\n try {\n const response = await this.fetchWithTokenRefresh(url.toString(), {\n method: 'POST',\n headers: options?.headers,\n });\n\n if (!response.ok) {\n Logger.warn(`[AgnoClient] Cancel request failed: ${response.status}`);\n // Still cleanup local state\n }\n } catch (error) {\n Logger.warn('[AgnoClient] Cancel request error:', error);\n // Still cleanup local state even on network error\n }\n\n // 3. Cleanup local state (in case backend didn't send RunCancelled event)\n this.handleLocalCancellation();\n }\n\n /**\n * Get current run ID (if streaming)\n */\n getCurrentRunId(): string | undefined {\n return this.currentRunId;\n }\n\n /**\n * Refresh messages from the session API after run completion.\n * Replaces streamed messages with authoritative session data.\n * Preserves client-side properties like ui_component that aren't stored on the server.\n * @private\n */\n private async refreshSessionMessages(): Promise<void> {\n const sessionId = this.configManager.getSessionId();\n if (!sessionId) {\n Logger.debug('[AgnoClient] Cannot refresh: no session ID');\n return;\n }\n\n this.state.isRefreshing = true;\n this.emit('state:change', this.getState());\n\n try {\n // Preserve client-side properties before refresh (API doesn't store these)\n const existingUIComponents = new Map<string, any>();\n const existingUserAttachments: Array<{\n images?: ChatMessage['images'];\n audio?: ChatMessage['audio'];\n files?: ChatMessage['files'];\n }> = [];\n\n for (const message of this.messageStore.getMessages()) {\n // Preserve ui_component from tool calls\n if (message.tool_calls) {\n for (const toolCall of message.tool_calls) {\n if ((toolCall as any).ui_component) {\n existingUIComponents.set(toolCall.tool_call_id, (toolCall as any).ui_component);\n }\n }\n }\n // Preserve user message attachments (blob URLs created client-side)\n if (message.role === 'user') {\n existingUserAttachments.push({\n images: message.images,\n audio: message.audio,\n files: message.files,\n });\n }\n }\n\n const config = this.configManager.getConfig();\n const entityType = this.configManager.getMode();\n const dbId = this.configManager.getDbId() || '';\n const userId = this.configManager.getUserId();\n\n const params = this.configManager.buildQueryString();\n\n const response = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.sessionManager.fetchSession(\n config.endpoint,\n entityType,\n sessionId,\n dbId,\n headers,\n userId,\n params\n );\n });\n\n const messages = this.sessionManager.convertSessionToMessages(response);\n\n // Re-apply preserved ui_component properties to matching tool calls\n if (existingUIComponents.size > 0) {\n for (const message of messages) {\n if (message.tool_calls) {\n for (let i = 0; i < message.tool_calls.length; i++) {\n const toolCall = message.tool_calls[i];\n const uiComponent = existingUIComponents.get(toolCall.tool_call_id);\n if (uiComponent) {\n (message.tool_calls[i] as any).ui_component = uiComponent;\n }\n }\n }\n }\n }\n\n // Re-apply preserved user attachments (blob URLs) to user messages\n // The API may not return input_media, so we fall back to client-side data\n if (existingUserAttachments.length > 0) {\n let userIdx = 0;\n for (const message of messages) {\n if (message.role === 'user' && userIdx < existingUserAttachments.length) {\n const saved = existingUserAttachments[userIdx];\n // Only apply if the refreshed message lacks attachments\n if (!message.images?.length && saved.images?.length) {\n message.images = saved.images;\n }\n if (!message.audio?.length && saved.audio?.length) {\n message.audio = saved.audio;\n }\n if (!message.files?.length && saved.files?.length) {\n message.files = saved.files;\n }\n userIdx++;\n }\n }\n }\n\n this.messageStore.setMessages(messages);\n\n Logger.debug('[AgnoClient] Session refreshed:', `${messages.length} messages`);\n\n this.emit('message:refreshed', messages);\n this.emit('message:update', messages);\n } catch (error) {\n Logger.error('[AgnoClient] Failed to refresh session:', error);\n this.emit('message:error', `Session refresh failed: ${error instanceof Error ? error.message : String(error)}`);\n } finally {\n this.state.isRefreshing = false;\n this.emit('state:change', this.getState());\n }\n }\n\n /**\n * Load a session\n */\n async loadSession(\n sessionId: string,\n options?: { params?: Record<string, string> }\n ): Promise<ChatMessage[]> {\n Logger.debug('[AgnoClient] loadSession called with sessionId:', sessionId);\n const config = this.configManager.getConfig();\n const entityType = this.configManager.getMode();\n const dbId = this.configManager.getDbId() || '';\n const userId = this.configManager.getUserId();\n Logger.debug('[AgnoClient] Loading session with:', { entityType, dbId, userId });\n\n const params = this.configManager.buildQueryString(options?.params);\n\n // Switching sessions invalidates any in-flight session_state refresh so\n // a stale response can't overwrite the new session's state.\n this.sessionStateManager.invalidate();\n\n // Fetch runs (messages) and session detail (session_state) in parallel.\n // /runs does not include session_state; /sessions/{id} does — verified in\n // scripts/verify-session-state/FINDINGS.md.\n const hydrateStatePromise: Promise<void> = this.getSessionById(sessionId, {\n params: options?.params,\n })\n .then((detail) => {\n this.applySessionState(detail.session_state ?? null, { source: 'load-session' });\n })\n .catch((err) => {\n // A session_state hydration failure should not break message loading.\n Logger.debug('[AgnoClient] loadSession: session_state hydration failed:', err);\n });\n\n const response = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.sessionManager.fetchSession(\n config.endpoint,\n entityType,\n sessionId,\n dbId,\n headers,\n userId,\n params\n );\n });\n\n // Don't block on hydration, but do not leave the promise dangling either.\n await hydrateStatePromise;\n\n const messages = this.sessionManager.convertSessionToMessages(response);\n Logger.debug('[AgnoClient] Setting messages to store:', `${messages.length} messages`);\n this.messageStore.setMessages(messages);\n this.configManager.setSessionId(sessionId);\n this.state.errorMessage = undefined;\n\n // Detect runs that are still paused (user reloaded before answering a HITL tool).\n // Only agents support HITL — teams have no /continue endpoint.\n if (this.configManager.getMode() === 'agent') {\n const pausedRun = response.find(\n (run: any) => typeof run.status === 'string' && run.status.toLowerCase() === 'paused'\n );\n if (pausedRun) {\n const pendingTools = ((pausedRun as any).tools ?? [])\n .filter((t: any) => t.external_execution_required === true && t.result === null)\n // Coerce Python-repr tool_args (workaround for agno#8007 / agno-client#11).\n .map((t: any) => ({\n ...t,\n tool_args: parseToolArgs(t.tool_args as Record<string, unknown>),\n }));\n if (pendingTools.length > 0) {\n this.state.isPaused = true;\n this.state.pausedRunId = (pausedRun as any).run_id;\n this.state.toolsAwaitingExecution = pendingTools;\n }\n }\n }\n\n Logger.debug('[AgnoClient] Emitting events...');\n this.emit('session:loaded', sessionId);\n this.emit('message:update', this.messageStore.getMessages());\n this.emit('state:change', this.getState());\n\n // Emit run:paused AFTER session:loaded so handleSessionLoaded completes first.\n // This re-establishes the HITL flow: autoExecute will trigger the handler (e.g. modal).\n if (this.state.isPaused && this.state.pausedRunId) {\n this.emit('run:paused', {\n runId: this.state.pausedRunId,\n sessionId,\n tools: this.state.toolsAwaitingExecution ?? [],\n });\n }\n\n Logger.debug('[AgnoClient] Events emitted, returning messages');\n\n return messages;\n }\n\n /**\n * Fetch all sessions\n */\n async fetchSessions(options?: { params?: Record<string, string> }): Promise<SessionEntry[]> {\n const config = this.configManager.getConfig();\n const entityType = this.configManager.getMode();\n const entityId = this.configManager.getCurrentEntityId();\n const dbId = this.configManager.getDbId() || '';\n\n if (!entityId) {\n throw new Error('Entity ID must be configured');\n }\n\n const params = this.configManager.buildQueryString(options?.params);\n\n const sessions = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.sessionManager.fetchSessions(\n config.endpoint,\n entityType,\n entityId,\n dbId,\n headers,\n params\n );\n });\n\n this.state.sessions = sessions;\n this.emit('state:change', this.getState());\n\n return sessions;\n }\n\n /**\n * Delete a session\n */\n async deleteSession(\n sessionId: string,\n options?: { params?: Record<string, string> }\n ): Promise<void> {\n const config = this.configManager.getConfig();\n const dbId = this.configManager.getDbId() || '';\n\n const params = this.configManager.buildQueryString(options?.params);\n\n await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.sessionManager.deleteSession(\n config.endpoint,\n sessionId,\n dbId,\n headers,\n params\n );\n });\n\n // Remove from state\n this.state.sessions = this.state.sessions.filter(\n (s) => s.session_id !== sessionId\n );\n\n // Clear messages if this was the current session\n if (this.configManager.getSessionId() === sessionId) {\n this.clearMessages();\n }\n\n this.emit('session:deleted', { sessionId });\n this.emit('state:change', this.getState());\n }\n\n /**\n * Get a session by ID\n */\n async getSessionById(\n sessionId: string,\n options?: { params?: Record<string, string> }\n ): Promise<AgentSessionDetailSchema | TeamSessionDetailSchema> {\n const config = this.configManager.getConfig();\n const entityType = this.configManager.getMode();\n const dbId = this.configManager.getDbId() || '';\n const userId = this.configManager.getUserId();\n\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.sessionManager.getSessionById(\n config.endpoint,\n entityType,\n sessionId,\n dbId,\n headers,\n userId,\n params\n );\n });\n }\n\n /**\n * Get a run by ID\n */\n async getRunById(\n sessionId: string,\n runId: string,\n options?: { params?: Record<string, string> }\n ): Promise<RunSchema | TeamRunSchema> {\n const config = this.configManager.getConfig();\n const entityType = this.configManager.getMode();\n const dbId = this.configManager.getDbId() || '';\n const userId = this.configManager.getUserId();\n\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.sessionManager.getRunById(\n config.endpoint,\n entityType,\n sessionId,\n runId,\n dbId,\n headers,\n userId,\n params\n );\n });\n }\n\n /**\n * Create a new session\n */\n async createSession(\n request?: CreateSessionRequest,\n options?: { params?: Record<string, string> }\n ): Promise<AgentSessionDetailSchema | TeamSessionDetailSchema> {\n const config = this.configManager.getConfig();\n const entityType = this.configManager.getMode();\n const entityId = this.configManager.getCurrentEntityId();\n const dbId = this.configManager.getDbId() || '';\n\n // Build request with entity ID\n const sessionRequest: CreateSessionRequest = {\n ...request,\n ...(entityType === 'agent' ? { agent_id: entityId } : { team_id: entityId }),\n };\n\n const params = this.configManager.buildQueryString(options?.params);\n\n const session = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.sessionManager.createSession(\n config.endpoint,\n entityType,\n sessionRequest,\n dbId,\n headers,\n params\n );\n });\n\n // Add to state and emit event\n const sessionEntry: SessionEntry = {\n session_id: session.session_id,\n session_name: session.session_name,\n created_at: session.created_at || null,\n updated_at: session.updated_at || null,\n };\n this.state.sessions = [sessionEntry, ...this.state.sessions];\n this.emit('session:created', sessionEntry);\n this.emit('state:change', this.getState());\n\n return session;\n }\n\n /**\n * Update a session\n */\n async updateSession(\n sessionId: string,\n request: UpdateSessionRequest,\n options?: { params?: Record<string, string> }\n ): Promise<AgentSessionDetailSchema | TeamSessionDetailSchema> {\n const config = this.configManager.getConfig();\n const entityType = this.configManager.getMode();\n const dbId = this.configManager.getDbId() || '';\n const userId = this.configManager.getUserId();\n\n const params = this.configManager.buildQueryString(options?.params);\n\n const session = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.sessionManager.updateSession(\n config.endpoint,\n entityType,\n sessionId,\n request,\n dbId,\n headers,\n userId,\n params\n );\n });\n\n // Update in state\n this.state.sessions = this.state.sessions.map((s) =>\n s.session_id === sessionId\n ? {\n ...s,\n session_name: session.session_name,\n updated_at: session.updated_at || s.updated_at,\n }\n : s\n );\n this.emit('session:updated', session);\n this.emit('state:change', this.getState());\n\n return session;\n }\n\n /**\n * Rename a session\n */\n async renameSession(\n sessionId: string,\n newName: string,\n options?: { params?: Record<string, string> }\n ): Promise<AgentSessionDetailSchema | TeamSessionDetailSchema> {\n const config = this.configManager.getConfig();\n const entityType = this.configManager.getMode();\n const dbId = this.configManager.getDbId() || '';\n\n const params = this.configManager.buildQueryString(options?.params);\n\n const session = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.sessionManager.renameSession(\n config.endpoint,\n entityType,\n sessionId,\n newName,\n dbId,\n headers,\n params\n );\n });\n\n // Update in state\n this.state.sessions = this.state.sessions.map((s) =>\n s.session_id === sessionId\n ? {\n ...s,\n session_name: newName,\n updated_at: session.updated_at || s.updated_at,\n }\n : s\n );\n this.emit('session:renamed', { sessionId, newName, session });\n this.emit('state:change', this.getState());\n\n return session;\n }\n\n /**\n * Delete multiple sessions\n */\n async deleteMultipleSessions(\n sessionIds: string[],\n options?: { params?: Record<string, string> }\n ): Promise<void> {\n const config = this.configManager.getConfig();\n const entityType = this.configManager.getMode();\n const dbId = this.configManager.getDbId() || '';\n\n // All sessions will be of the same type (current entity type)\n const sessionTypes = sessionIds.map(() => entityType);\n\n const params = this.configManager.buildQueryString(options?.params);\n\n await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.sessionManager.deleteMultipleSessions(\n config.endpoint,\n sessionIds,\n sessionTypes,\n dbId,\n headers,\n params\n );\n });\n\n // Remove from state\n const deletedIds = new Set(sessionIds);\n this.state.sessions = this.state.sessions.filter(\n (s) => !deletedIds.has(s.session_id)\n );\n\n // Clear messages if current session was deleted\n const currentSessionId = this.configManager.getSessionId();\n if (currentSessionId && deletedIds.has(currentSessionId)) {\n this.clearMessages();\n }\n\n this.emit('sessions:deleted', { sessionIds });\n this.emit('state:change', this.getState());\n }\n\n /**\n * Add tool calls to the last message\n * Used by frontend execution to add tool calls that were executed locally\n */\n addToolCallsToLastMessage(toolCalls: ToolCall[]): void {\n const lastMessage = this.messageStore.getLastMessage();\n if (!lastMessage || lastMessage.role !== 'agent') {\n return;\n }\n\n const existingToolCalls = lastMessage.tool_calls || [];\n const existingIds = new Set(existingToolCalls.map(t => t.tool_call_id));\n\n // Only add tool calls that don't already exist\n const newToolCalls = toolCalls.filter(t => !existingIds.has(t.tool_call_id));\n\n if (newToolCalls.length > 0) {\n this.messageStore.updateLastMessage((msg) => ({\n ...msg,\n tool_calls: [...existingToolCalls, ...newToolCalls],\n }));\n\n this.emit('message:update', this.messageStore.getMessages());\n }\n }\n\n /**\n * Hydrate a specific tool call with its UI component\n * If tool call doesn't exist yet, stores UI spec as pending\n */\n hydrateToolCallUI(toolCallId: string, uiSpec: any): void {\n // Find the message containing this tool call and update it\n const messages = this.messageStore.getMessages();\n\n for (let i = messages.length - 1; i >= 0; i--) {\n const message = messages[i];\n\n if (message.tool_calls) {\n const toolIndex = message.tool_calls.findIndex(\n t => t.tool_call_id === toolCallId\n );\n\n if (toolIndex !== -1) {\n // Update this specific message\n this.messageStore.updateMessage(i, (msg) => {\n const updatedToolCalls = [...(msg.tool_calls || [])];\n updatedToolCalls[toolIndex] = {\n ...updatedToolCalls[toolIndex],\n ui_component: uiSpec,\n };\n\n return {\n ...msg,\n tool_calls: updatedToolCalls,\n };\n });\n\n // Remove from pending if it was there\n this.pendingUISpecs.delete(toolCallId);\n\n // Emit event to sync with React state\n this.emit('message:update', this.messageStore.getMessages());\n return;\n }\n }\n }\n\n // Tool call not found yet - store UI spec as pending\n this.pendingUISpecs.set(toolCallId, uiSpec);\n }\n\n /**\n * Apply any pending UI specs to tool calls that have just been added\n * Called after message updates to attach UI to newly arrived tool calls\n * Batches all updates to emit only one message:update event\n */\n private applyPendingUISpecs(): void {\n if (this.pendingUISpecs.size === 0) return;\n\n const messages = this.messageStore.getMessages();\n const updatedMessages: { index: number; message: ChatMessage }[] = [];\n\n // Collect all updates first (batching)\n for (let i = messages.length - 1; i >= 0; i--) {\n const message = messages[i];\n\n if (message.tool_calls) {\n let messageUpdated = false;\n const updatedToolCalls = [...message.tool_calls];\n\n for (let j = 0; j < updatedToolCalls.length; j++) {\n const toolCall = updatedToolCalls[j];\n const pendingUI = this.pendingUISpecs.get(toolCall.tool_call_id);\n\n if (pendingUI && !(toolCall as any).ui_component) {\n updatedToolCalls[j] = {\n ...updatedToolCalls[j],\n ui_component: pendingUI,\n };\n\n this.pendingUISpecs.delete(toolCall.tool_call_id);\n messageUpdated = true;\n }\n }\n\n if (messageUpdated) {\n updatedMessages.push({\n index: i,\n message: {\n ...message,\n tool_calls: updatedToolCalls,\n },\n });\n }\n }\n }\n\n // Apply all updates at once\n if (updatedMessages.length > 0) {\n updatedMessages.forEach(({ index, message }) => {\n this.messageStore.updateMessage(index, () => message);\n });\n\n this.emit('message:update', this.messageStore.getMessages());\n }\n }\n\n /**\n * Continue a paused run with tool execution results.\n *\n * **Note:** HITL (Human-in-the-Loop) frontend tool execution is only supported for agents.\n * Teams do not support the continue endpoint.\n *\n * To cancel a running request, use the `cancelRun()` method.\n *\n * @param tools - Array of tool calls with execution results\n * @param options - Optional request headers and query parameters\n * @throws Error if no paused run exists\n * @throws Error if called with team mode (teams don't support HITL)\n */\n async continueRun(\n tools: ToolCall[],\n options?: { headers?: Record<string, string>; params?: Record<string, string> }\n ): Promise<void> {\n // Validate that we're not in team mode (teams don't support continue endpoint)\n if (this.configManager.getMode() === 'team') {\n throw new Error(\n 'HITL (Human-in-the-Loop) frontend tool execution is not supported for teams. ' +\n 'Only agents support the continue endpoint.'\n );\n }\n\n if (!this.state.isPaused || !this.state.pausedRunId) {\n throw new Error('No paused run to continue');\n }\n\n const runUrl = this.configManager.getRunUrl();\n if (!runUrl) {\n throw new Error('No agent or team selected');\n }\n\n // Build continue URL: POST /agents/{id}/runs/{run_id}/continue\n const continueUrl = `${runUrl}/${this.state.pausedRunId}/continue`;\n\n // Create new AbortController for this request\n this.abortController = new AbortController();\n\n this.state.isPaused = false;\n this.state.isStreaming = true;\n this.emit('run:continued', { runId: this.state.pausedRunId });\n this.emit('state:change', this.getState());\n\n // Clean tools before sending to backend (remove UI-specific fields)\n const cleanedTools = tools.map(tool => {\n const { ui_component, ...backendTool } = tool as any;\n return backendTool;\n });\n\n const formData = new FormData();\n formData.append('tools', JSON.stringify(cleanedTools));\n formData.append('stream', 'true');\n\n const currentSessionId = this.configManager.getSessionId();\n if (currentSessionId) {\n formData.append('session_id', currentSessionId);\n }\n\n // Add user_id if configured\n const userId = this.configManager.getUserId();\n if (userId) {\n formData.append('user_id', userId);\n }\n\n await this.executeStream({\n apiUrl: continueUrl,\n requestBody: formData,\n signal: this.abortController.signal,\n perRequestHeaders: options?.headers,\n perRequestParams: options?.params,\n onChunk: (chunk: RunResponse) => {\n this.handleChunk(chunk, currentSessionId, '');\n },\n onError: (error) => {\n this.handleError(error, currentSessionId);\n },\n onComplete: async () => {\n this.state.isStreaming = false;\n this.state.pausedRunId = undefined;\n this.state.toolsAwaitingExecution = undefined;\n this.currentRunId = undefined;\n this.state.currentRunId = undefined;\n this.abortController = undefined;\n this.emit('stream:end');\n this.emit('message:complete', this.messageStore.getMessages());\n this.emit('state:change', this.getState());\n\n // Trigger refresh if run completed successfully\n if (this.runCompletedSuccessfully) {\n this.runCompletedSuccessfully = false;\n await this.refreshSessionMessages();\n }\n },\n });\n }\n\n /**\n * Check endpoint status\n */\n async checkStatus(options?: { params?: Record<string, string> }): Promise<boolean> {\n try {\n const params = this.configManager.buildQueryString(options?.params);\n const url = new URL(`${this.configManager.getEndpoint()}/health`);\n if (params.toString()) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n const response = await this.fetchWithTokenRefresh(url.toString());\n const isActive = response.ok;\n this.state.isEndpointActive = isActive;\n this.emit('state:change', this.getState());\n return isActive;\n } catch {\n this.state.isEndpointActive = false;\n this.emit('state:change', this.getState());\n return false;\n }\n }\n\n /**\n * Fetch agents from endpoint\n */\n async fetchAgents(options?: { params?: Record<string, string> }): Promise<AgentDetails[]> {\n const params = this.configManager.buildQueryString(options?.params);\n const url = new URL(`${this.configManager.getEndpoint()}/agents`);\n if (params.toString()) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n const response = await this.fetchWithTokenRefresh(url.toString());\n if (!response.ok) {\n throw new Error('Failed to fetch agents');\n }\n\n const agents: AgentDetails[] = await response.json();\n this.state.agents = agents;\n this.emit('state:change', this.getState());\n\n return agents;\n }\n\n /**\n * Fetch teams from endpoint\n */\n async fetchTeams(options?: { params?: Record<string, string> }): Promise<TeamDetails[]> {\n const params = this.configManager.buildQueryString(options?.params);\n const url = new URL(`${this.configManager.getEndpoint()}/teams`);\n if (params.toString()) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n const response = await this.fetchWithTokenRefresh(url.toString());\n if (!response.ok) {\n throw new Error('Failed to fetch teams');\n }\n\n const teams: TeamDetails[] = await response.json();\n this.state.teams = teams;\n this.emit('state:change', this.getState());\n\n return teams;\n }\n\n /**\n * Initialize client (check status and fetch agents/teams)\n * Automatically selects the first available agent or team if none is configured\n */\n async initialize(options?: { params?: Record<string, string> }): Promise<{\n agents: AgentDetails[];\n teams: TeamDetails[];\n }> {\n const isActive = await this.checkStatus(options);\n if (!isActive) {\n return { agents: [], teams: [] };\n }\n\n const [agents, teams] = await Promise.all([\n this.fetchAgents(options),\n this.fetchTeams(options),\n ]);\n\n // Auto-select first available agent or team if none is configured\n const currentConfig = this.configManager.getConfig();\n const hasAgentConfigured = currentConfig.agentId;\n const hasTeamConfigured = currentConfig.teamId;\n\n if (!hasAgentConfigured && !hasTeamConfigured) {\n if (agents.length > 0) {\n // Select first agent\n const firstAgent = agents[0];\n this.configManager.updateConfig({\n mode: 'agent',\n agentId: firstAgent.id,\n dbId: firstAgent.db_id || undefined,\n });\n this.emit('config:change', this.configManager.getConfig());\n } else if (teams.length > 0) {\n // Select first team if no agents available\n const firstTeam = teams[0];\n this.configManager.updateConfig({\n mode: 'team',\n teamId: firstTeam.id,\n dbId: firstTeam.db_id || undefined,\n });\n this.emit('config:change', this.configManager.getConfig());\n }\n }\n\n return { agents, teams };\n }\n\n // ============================================================================\n // Memory Methods\n // ============================================================================\n\n /**\n * Fetch memories with optional filtering and pagination\n */\n async fetchMemories(\n queryParams?: ListMemoriesParams,\n options?: { params?: Record<string, string> }\n ): Promise<MemoriesListResponse> {\n const config = this.configManager.getConfig();\n const dbId = this.configManager.getDbId() || '';\n\n const params = this.configManager.buildQueryString(options?.params);\n\n const response = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.memoryManager.fetchMemories(\n config.endpoint,\n dbId,\n headers,\n queryParams,\n params\n );\n });\n\n this.state.memories = response.data;\n this.emit('state:change', this.getState());\n\n return response;\n }\n\n /**\n * Get a specific memory by ID\n */\n async getMemoryById(\n memoryId: string,\n options?: { params?: Record<string, string>; table?: string }\n ): Promise<UserMemory> {\n const config = this.configManager.getConfig();\n const dbId = this.configManager.getDbId() || '';\n const userId = this.configManager.getUserId();\n\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.memoryManager.getMemoryById(\n config.endpoint,\n memoryId,\n dbId,\n headers,\n userId,\n options?.table,\n params\n );\n });\n }\n\n /**\n * Get all available memory topics\n */\n async getMemoryTopics(\n options?: { params?: Record<string, string>; table?: string }\n ): Promise<string[]> {\n const config = this.configManager.getConfig();\n const dbId = this.configManager.getDbId() || '';\n\n const params = this.configManager.buildQueryString(options?.params);\n\n const topics = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.memoryManager.getMemoryTopics(\n config.endpoint,\n dbId,\n headers,\n options?.table,\n params\n );\n });\n\n this.state.memoryTopics = topics;\n this.emit('state:change', this.getState());\n\n return topics;\n }\n\n /**\n * Get user memory statistics\n */\n async getUserMemoryStats(\n queryParams?: UserMemoryStatsParams,\n options?: { params?: Record<string, string> }\n ): Promise<UserMemoryStatsResponse> {\n const config = this.configManager.getConfig();\n const dbId = this.configManager.getDbId() || '';\n\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.memoryManager.getUserMemoryStats(\n config.endpoint,\n dbId,\n headers,\n queryParams,\n params\n );\n });\n }\n\n /**\n * Create a new memory\n */\n async createMemory(\n request: CreateMemoryRequest,\n options?: { params?: Record<string, string>; table?: string }\n ): Promise<UserMemory> {\n const config = this.configManager.getConfig();\n const dbId = this.configManager.getDbId() || '';\n\n const params = this.configManager.buildQueryString(options?.params);\n\n const memory = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.memoryManager.createMemory(\n config.endpoint,\n request,\n dbId,\n headers,\n options?.table,\n params\n );\n });\n\n // Add to state\n this.state.memories = [memory, ...this.state.memories];\n this.emit('memory:created', memory);\n this.emit('state:change', this.getState());\n\n return memory;\n }\n\n /**\n * Update an existing memory\n */\n async updateMemory(\n memoryId: string,\n request: UpdateMemoryRequest,\n options?: { params?: Record<string, string>; table?: string }\n ): Promise<UserMemory> {\n const config = this.configManager.getConfig();\n const dbId = this.configManager.getDbId() || '';\n\n const params = this.configManager.buildQueryString(options?.params);\n\n const memory = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.memoryManager.updateMemory(\n config.endpoint,\n memoryId,\n request,\n dbId,\n headers,\n options?.table,\n params\n );\n });\n\n // Update in state\n this.state.memories = this.state.memories.map((m) =>\n m.memory_id === memoryId ? memory : m\n );\n this.emit('memory:updated', memory);\n this.emit('state:change', this.getState());\n\n return memory;\n }\n\n /**\n * Delete a single memory\n */\n async deleteMemory(\n memoryId: string,\n options?: { params?: Record<string, string>; table?: string }\n ): Promise<void> {\n const config = this.configManager.getConfig();\n const dbId = this.configManager.getDbId() || '';\n const userId = this.configManager.getUserId();\n\n const params = this.configManager.buildQueryString(options?.params);\n\n await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.memoryManager.deleteMemory(\n config.endpoint,\n memoryId,\n dbId,\n headers,\n userId,\n options?.table,\n params\n );\n });\n\n // Remove from state\n this.state.memories = this.state.memories.filter(\n (m) => m.memory_id !== memoryId\n );\n this.emit('memory:deleted', { memoryId });\n this.emit('state:change', this.getState());\n }\n\n /**\n * Delete multiple memories\n */\n async deleteMultipleMemories(\n memoryIds: string[],\n options?: { params?: Record<string, string>; table?: string; userId?: string }\n ): Promise<void> {\n const config = this.configManager.getConfig();\n const dbId = this.configManager.getDbId() || '';\n\n const params = this.configManager.buildQueryString(options?.params);\n\n const request: DeleteMultipleMemoriesRequest = {\n memory_ids: memoryIds,\n user_id: options?.userId,\n };\n\n await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.memoryManager.deleteMultipleMemories(\n config.endpoint,\n request,\n dbId,\n headers,\n options?.table,\n params\n );\n });\n\n // Remove from state\n const deletedIds = new Set(memoryIds);\n this.state.memories = this.state.memories.filter(\n (m) => !deletedIds.has(m.memory_id)\n );\n this.emit('memories:deleted', { memoryIds });\n this.emit('state:change', this.getState());\n }\n\n // ============================================================================\n // Knowledge API Methods\n // ============================================================================\n\n /**\n * Get knowledge configuration\n */\n async getKnowledgeConfig(\n options?: { dbId?: string; params?: Record<string, string> }\n ): Promise<KnowledgeConfigResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.knowledgeManager.getConfig(\n config.endpoint,\n headers,\n options?.dbId ?? this.configManager.getDbId(),\n params\n );\n });\n }\n\n /**\n * List knowledge content\n */\n async listKnowledgeContent(\n listOptions?: ContentListOptions,\n options?: { params?: Record<string, string> }\n ): Promise<ContentListResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.knowledgeManager.listContent(\n config.endpoint,\n headers,\n listOptions,\n params\n );\n });\n }\n\n /**\n * Get knowledge content by ID\n */\n async getKnowledgeContent(\n contentId: string,\n options?: { dbId?: string; params?: Record<string, string> }\n ): Promise<ContentResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.knowledgeManager.getContent(\n config.endpoint,\n contentId,\n headers,\n options?.dbId ?? this.configManager.getDbId(),\n params\n );\n });\n }\n\n /**\n * Get knowledge content status\n */\n async getKnowledgeContentStatus(\n contentId: string,\n options?: { dbId?: string; params?: Record<string, string> }\n ): Promise<ContentStatusResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.knowledgeManager.getContentStatus(\n config.endpoint,\n contentId,\n headers,\n options?.dbId ?? this.configManager.getDbId(),\n params\n );\n });\n }\n\n /**\n * Search knowledge base\n */\n async searchKnowledge(\n request: VectorSearchRequest,\n options?: { params?: Record<string, string> }\n ): Promise<VectorSearchResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n // Use dbId from config if not specified in request\n const searchRequest: VectorSearchRequest = {\n ...request,\n db_id: request.db_id ?? this.configManager.getDbId(),\n };\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.knowledgeManager.search(\n config.endpoint,\n searchRequest,\n headers,\n params\n );\n });\n }\n\n /**\n * Upload knowledge content\n * @param data - FormData with file/text_content or ContentUploadRequest object\n */\n async uploadKnowledgeContent(\n data:\n | FormData\n | {\n name?: string;\n description?: string;\n url?: string;\n metadata?: Record<string, unknown>;\n file?: File;\n text_content?: string;\n reader_id?: string;\n chunker?: string;\n chunk_size?: number;\n chunk_overlap?: number;\n },\n options?: { dbId?: string; params?: Record<string, string> }\n ): Promise<ContentResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n // Convert object to FormData if needed\n let formData: FormData;\n if (data instanceof FormData) {\n formData = data;\n } else {\n formData = new FormData();\n if (data.name) formData.append('name', data.name);\n if (data.description) formData.append('description', data.description);\n if (data.url) formData.append('url', data.url);\n if (data.metadata) formData.append('metadata', JSON.stringify(data.metadata));\n if (data.file) formData.append('file', data.file);\n if (data.text_content) formData.append('text_content', data.text_content);\n if (data.reader_id) formData.append('reader_id', data.reader_id);\n if (data.chunker) formData.append('chunker', data.chunker);\n if (data.chunk_size !== undefined)\n formData.append('chunk_size', String(data.chunk_size));\n if (data.chunk_overlap !== undefined)\n formData.append('chunk_overlap', String(data.chunk_overlap));\n }\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.knowledgeManager.uploadContent(\n config.endpoint,\n formData,\n headers,\n options?.dbId ?? this.configManager.getDbId(),\n params\n );\n });\n }\n\n /**\n * Update knowledge content\n */\n async updateKnowledgeContent(\n contentId: string,\n request: ContentUpdateRequest,\n options?: { dbId?: string; params?: Record<string, string> }\n ): Promise<ContentResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.knowledgeManager.updateContent(\n config.endpoint,\n contentId,\n request,\n headers,\n options?.dbId ?? this.configManager.getDbId(),\n params\n );\n });\n }\n\n /**\n * Delete all knowledge content\n */\n async deleteAllKnowledgeContent(\n options?: { dbId?: string; params?: Record<string, string> }\n ): Promise<void> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.knowledgeManager.deleteAllContent(\n config.endpoint,\n headers,\n options?.dbId ?? this.configManager.getDbId(),\n params\n );\n });\n }\n\n /**\n * Delete knowledge content by ID\n */\n async deleteKnowledgeContent(\n contentId: string,\n options?: { dbId?: string; params?: Record<string, string> }\n ): Promise<ContentResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.knowledgeManager.deleteContent(\n config.endpoint,\n contentId,\n headers,\n options?.dbId ?? this.configManager.getDbId(),\n params\n );\n });\n }\n\n // ============================================================================\n // Metrics API Methods\n // ============================================================================\n\n /**\n * Fetch aggregated metrics from the endpoint\n *\n * @param options - Options including date range, dbId, table, and custom params\n * @returns MetricsResponse containing daily aggregated metrics\n */\n async fetchMetrics(options?: MetricsOptions): Promise<MetricsResponse> {\n const url = new URL(`${this.configManager.getEndpoint()}/metrics`);\n\n // Build query params from global config + per-request params\n const params = this.configManager.buildQueryString(options?.params);\n\n // Add metrics-specific parameters\n if (options?.startingDate) {\n params.set('starting_date', options.startingDate);\n }\n if (options?.endingDate) {\n params.set('ending_date', options.endingDate);\n }\n\n // Use provided dbId or fall back to config\n const dbId = options?.dbId ?? this.configManager.getDbId();\n if (dbId) {\n params.set('db_id', dbId);\n }\n\n if (options?.table) {\n params.set('table', options.table);\n }\n\n // Apply params to URL\n if (params.toString()) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await this.fetchWithTokenRefresh(url.toString());\n if (!response.ok) {\n throw new Error(`Failed to fetch metrics: ${response.status} ${response.statusText}`);\n }\n\n const metrics: MetricsResponse = await response.json();\n return metrics;\n }\n\n /**\n * Refresh/recalculate metrics on the backend\n *\n * @param options - Options including dbId, table, and custom params\n * @returns Array of refreshed DayAggregatedMetrics\n */\n async refreshMetrics(options?: RefreshMetricsOptions): Promise<DayAggregatedMetrics[]> {\n const url = new URL(`${this.configManager.getEndpoint()}/metrics/refresh`);\n\n // Build query params from global config + per-request params\n const params = this.configManager.buildQueryString(options?.params);\n\n // Use provided dbId or fall back to config\n const dbId = options?.dbId ?? this.configManager.getDbId();\n if (dbId) {\n params.set('db_id', dbId);\n }\n\n if (options?.table) {\n params.set('table', options.table);\n }\n\n // Apply params to URL\n if (params.toString()) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await this.fetchWithTokenRefresh(url.toString(), {\n method: 'POST',\n });\n\n if (!response.ok) {\n throw new Error(`Failed to refresh metrics: ${response.status} ${response.statusText}`);\n }\n\n const metrics: DayAggregatedMetrics[] = await response.json();\n return metrics;\n }\n\n // ============================================================================\n // Evaluation Methods\n // ============================================================================\n\n /**\n * List evaluation runs with optional filtering and pagination\n * @param listParams - Parameters for filtering and pagination\n * @param options - Optional request query parameters\n */\n async listEvalRuns(\n listParams: ListEvalRunsParams = {},\n options?: { params?: Record<string, string> }\n ): Promise<EvalRunsListResponse> {\n const additionalParams = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.evalManager.listEvalRuns(\n this.configManager.getEndpoint(),\n listParams,\n headers,\n additionalParams\n );\n });\n }\n\n /**\n * Get a specific evaluation run by ID\n * @param evalRunId - The evaluation run ID\n * @param options - Optional db_id, table, and query parameters\n */\n async getEvalRun(\n evalRunId: string,\n options?: { dbId?: string; table?: string; params?: Record<string, string> }\n ): Promise<EvalSchema> {\n const additionalParams = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.evalManager.getEvalRun(\n this.configManager.getEndpoint(),\n evalRunId,\n options?.dbId,\n options?.table,\n headers,\n additionalParams\n );\n });\n }\n\n /**\n * Execute a new evaluation\n * @param request - The evaluation request parameters\n * @param options - Optional db_id, table, and query parameters\n */\n async executeEval(\n request: ExecuteEvalRequest,\n options?: { dbId?: string; table?: string; params?: Record<string, string> }\n ): Promise<EvalSchema> {\n const additionalParams = this.configManager.buildQueryString(options?.params);\n\n const result = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.evalManager.executeEval(\n this.configManager.getEndpoint(),\n request,\n options?.dbId,\n options?.table,\n headers,\n additionalParams\n );\n });\n\n this.emit('eval:executed', result);\n return result;\n }\n\n /**\n * Update an evaluation run (rename)\n * @param evalRunId - The evaluation run ID\n * @param request - The update request with new name\n * @param options - Optional db_id, table, and query parameters\n */\n async updateEvalRun(\n evalRunId: string,\n request: UpdateEvalRunRequest,\n options?: { dbId?: string; table?: string; params?: Record<string, string> }\n ): Promise<EvalSchema> {\n const additionalParams = this.configManager.buildQueryString(options?.params);\n\n const result = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.evalManager.updateEvalRun(\n this.configManager.getEndpoint(),\n evalRunId,\n request,\n options?.dbId,\n options?.table,\n headers,\n additionalParams\n );\n });\n\n this.emit('eval:updated', result);\n return result;\n }\n\n /**\n * Delete multiple evaluation runs\n * @param evalRunIds - Array of evaluation run IDs to delete\n * @param options - Optional db_id, table, and query parameters\n */\n async deleteEvalRuns(\n evalRunIds: string[],\n options?: { dbId?: string; table?: string; params?: Record<string, string> }\n ): Promise<void> {\n const additionalParams = this.configManager.buildQueryString(options?.params);\n\n await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.evalManager.deleteEvalRuns(\n this.configManager.getEndpoint(),\n { eval_run_ids: evalRunIds },\n options?.dbId,\n options?.table,\n headers,\n additionalParams\n );\n });\n\n this.emit('evals:deleted', { evalRunIds });\n }\n\n // =============================================================================\n // TRACES API METHODS\n // =============================================================================\n\n /**\n * Fetch traces with optional filters\n * GET /traces\n *\n * @param options - Filter and pagination options\n * @param requestOptions - Optional per-request headers and params\n * @returns Paginated traces result with traces and pagination info\n */\n async fetchTraces(\n options: ListTracesOptions = {},\n requestOptions?: { headers?: Record<string, string>; params?: Record<string, string> }\n ): Promise<PaginatedTracesResult> {\n const config = this.configManager.getConfig();\n const dbId = this.configManager.getDbId();\n\n // Apply dbId from config if not specified in options\n const traceOptions: ListTracesOptions = {\n ...options,\n db_id: options.db_id ?? dbId,\n };\n\n const params = this.configManager.buildQueryString(requestOptions?.params);\n\n const result = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders(requestOptions?.headers);\n return this.tracesManager.fetchTraces(config.endpoint, traceOptions, headers, params);\n });\n\n // Update state with fetched traces\n this.state.traces = result.traces;\n this.emit('state:change', this.getState());\n\n return result;\n }\n\n /**\n * Get trace detail or a specific span\n * GET /traces/{trace_id}\n *\n * @param traceId - The trace ID to fetch\n * @param options - Options including optional span_id, run_id, db_id\n * @param requestOptions - Optional per-request headers and params\n * @returns TraceDetail (full trace) or TraceNode (specific span)\n */\n async getTraceDetail(\n traceId: string,\n options: GetTraceOptions = {},\n requestOptions?: { headers?: Record<string, string>; params?: Record<string, string> }\n ): Promise<TraceDetail | TraceNode> {\n const config = this.configManager.getConfig();\n const dbId = this.configManager.getDbId();\n\n // Apply dbId from config if not specified in options\n const traceOptions: GetTraceOptions = {\n ...options,\n db_id: options.db_id ?? dbId,\n };\n\n const params = this.configManager.buildQueryString(requestOptions?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders(requestOptions?.headers);\n return this.tracesManager.getTraceDetail(config.endpoint, traceId, traceOptions, headers, params);\n });\n }\n\n /**\n * Get trace session statistics\n * GET /trace_session_stats\n *\n * @param options - Filter and pagination options\n * @param requestOptions - Optional per-request headers and params\n * @returns Paginated trace session stats result\n */\n async fetchTraceSessionStats(\n options: GetTraceSessionStatsOptions = {},\n requestOptions?: { headers?: Record<string, string>; params?: Record<string, string> }\n ): Promise<PaginatedTraceSessionStatsResult> {\n const config = this.configManager.getConfig();\n const dbId = this.configManager.getDbId();\n\n // Apply dbId from config if not specified in options\n const statsOptions: GetTraceSessionStatsOptions = {\n ...options,\n db_id: options.db_id ?? dbId,\n };\n\n const params = this.configManager.buildQueryString(requestOptions?.params);\n\n const result = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders(requestOptions?.headers);\n return this.tracesManager.getTraceSessionStats(config.endpoint, statsOptions, headers, params);\n });\n\n // Update state with fetched stats\n this.state.traceSessionStats = result.stats;\n this.emit('state:change', this.getState());\n\n return result;\n }\n\n // ==========================================================================\n // Schedules API\n // ==========================================================================\n\n /**\n * Fetch schedules with filtering and pagination\n */\n async fetchSchedules(\n queryParams?: ListSchedulesParams,\n options?: { params?: Record<string, string> }\n ): Promise<SchedulesListResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n const response = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.scheduleManager.fetchSchedules(config.endpoint, headers, queryParams, params);\n });\n\n this.state.schedules = response.data;\n this.emit('state:change', this.getState());\n\n return response;\n }\n\n /**\n * Get a specific schedule by ID\n */\n async getScheduleById(\n scheduleId: string,\n options?: { params?: Record<string, string> }\n ): Promise<ScheduleResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.scheduleManager.getScheduleById(config.endpoint, scheduleId, headers, params);\n });\n }\n\n /**\n * Create a new schedule\n */\n async createSchedule(\n request: ScheduleCreate,\n options?: { params?: Record<string, string> }\n ): Promise<ScheduleResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n const schedule = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.scheduleManager.createSchedule(config.endpoint, request, headers, params);\n });\n\n this.state.schedules = [schedule, ...this.state.schedules];\n this.emit('schedule:created', schedule);\n this.emit('state:change', this.getState());\n\n return schedule;\n }\n\n /**\n * Update an existing schedule\n */\n async updateSchedule(\n scheduleId: string,\n request: ScheduleUpdate,\n options?: { params?: Record<string, string> }\n ): Promise<ScheduleResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n const schedule = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.scheduleManager.updateSchedule(config.endpoint, scheduleId, request, headers, params);\n });\n\n this.state.schedules = this.state.schedules.map((s) =>\n s.id === scheduleId ? schedule : s\n );\n this.emit('schedule:updated', schedule);\n this.emit('state:change', this.getState());\n\n return schedule;\n }\n\n /**\n * Delete a schedule\n */\n async deleteSchedule(\n scheduleId: string,\n options?: { params?: Record<string, string> }\n ): Promise<void> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.scheduleManager.deleteSchedule(config.endpoint, scheduleId, headers, params);\n });\n\n this.state.schedules = this.state.schedules.filter((s) => s.id !== scheduleId);\n this.emit('schedule:deleted', { scheduleId });\n this.emit('state:change', this.getState());\n }\n\n /**\n * Enable a schedule\n */\n async enableSchedule(\n scheduleId: string,\n options?: { params?: Record<string, string> }\n ): Promise<ScheduleStateResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n const result = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.scheduleManager.enableSchedule(config.endpoint, scheduleId, headers, params);\n });\n\n this.state.schedules = this.state.schedules.map((s) =>\n s.id === scheduleId ? { ...s, enabled: true, next_run_at: result.next_run_at, updated_at: result.updated_at } : s\n );\n this.emit('schedule:enabled', result);\n this.emit('state:change', this.getState());\n\n return result;\n }\n\n /**\n * Disable a schedule\n */\n async disableSchedule(\n scheduleId: string,\n options?: { params?: Record<string, string> }\n ): Promise<ScheduleStateResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n const result = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.scheduleManager.disableSchedule(config.endpoint, scheduleId, headers, params);\n });\n\n this.state.schedules = this.state.schedules.map((s) =>\n s.id === scheduleId ? { ...s, enabled: false, next_run_at: result.next_run_at, updated_at: result.updated_at } : s\n );\n this.emit('schedule:disabled', result);\n this.emit('state:change', this.getState());\n\n return result;\n }\n\n /**\n * Trigger a schedule to run immediately\n */\n async triggerSchedule(\n scheduleId: string,\n options?: { params?: Record<string, string> }\n ): Promise<ScheduleRunResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n const run = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.scheduleManager.triggerSchedule(config.endpoint, scheduleId, headers, params);\n });\n\n this.emit('schedule:triggered', run);\n\n return run;\n }\n\n /**\n * Fetch runs for a specific schedule\n */\n async fetchScheduleRuns(\n scheduleId: string,\n queryParams?: ListScheduleRunsParams,\n options?: { params?: Record<string, string> }\n ): Promise<ScheduleRunsListResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.scheduleManager.fetchScheduleRuns(config.endpoint, scheduleId, headers, queryParams, params);\n });\n }\n\n /**\n * Get a specific schedule run by ID\n */\n async getScheduleRunById(\n scheduleId: string,\n runId: string,\n options?: { params?: Record<string, string> }\n ): Promise<ScheduleRunResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.scheduleManager.getScheduleRunById(config.endpoint, scheduleId, runId, headers, params);\n });\n }\n\n // ==========================================================================\n // Approvals API\n // ==========================================================================\n\n /**\n * Fetch approvals with filtering and pagination\n */\n async fetchApprovals(\n queryParams?: ListApprovalsParams,\n options?: { params?: Record<string, string> }\n ): Promise<ApprovalsListResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n const response = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.approvalManager.fetchApprovals(config.endpoint, headers, queryParams, params);\n });\n\n this.state.approvals = response.data;\n this.emit('state:change', this.getState());\n\n return response;\n }\n\n /**\n * Get approval count\n */\n async getApprovalCount(\n options?: { params?: Record<string, string>; userId?: string }\n ): Promise<ApprovalCountResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n const userId = options?.userId ?? this.configManager.getUserId();\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.approvalManager.getApprovalCount(config.endpoint, headers, userId, params);\n });\n }\n\n /**\n * Get approval status\n */\n async getApprovalStatus(\n approvalId: string,\n options?: { params?: Record<string, string> }\n ): Promise<ApprovalStatusResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.approvalManager.getApprovalStatus(config.endpoint, approvalId, headers, params);\n });\n }\n\n /**\n * Get a specific approval by ID\n */\n async getApprovalById(\n approvalId: string,\n options?: { params?: Record<string, string> }\n ): Promise<ApprovalResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.approvalManager.getApprovalById(config.endpoint, approvalId, headers, params);\n });\n }\n\n /**\n * Resolve an approval (approve or reject)\n */\n async resolveApproval(\n approvalId: string,\n request: ApprovalResolve,\n options?: { params?: Record<string, string> }\n ): Promise<ApprovalResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n const approval = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.approvalManager.resolveApproval(config.endpoint, approvalId, request, headers, params);\n });\n\n this.state.approvals = this.state.approvals.map((a) =>\n a.id === approvalId ? approval : a\n );\n this.emit('approval:resolved', approval);\n this.emit('state:change', this.getState());\n\n return approval;\n }\n\n /**\n * Delete an approval\n */\n async deleteApproval(\n approvalId: string,\n options?: { params?: Record<string, string> }\n ): Promise<void> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.approvalManager.deleteApproval(config.endpoint, approvalId, headers, params);\n });\n\n this.state.approvals = this.state.approvals.filter((a) => a.id !== approvalId);\n this.emit('approval:deleted', { approvalId });\n this.emit('state:change', this.getState());\n }\n\n // ==========================================================================\n // Components API\n // ==========================================================================\n\n /**\n * Fetch components with filtering and pagination\n */\n async fetchComponents(\n queryParams?: ListComponentsParams,\n options?: { params?: Record<string, string> }\n ): Promise<ComponentsListResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n const response = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.componentManager.fetchComponents(config.endpoint, headers, queryParams, params);\n });\n\n this.state.components = response.data;\n this.emit('state:change', this.getState());\n\n return response;\n }\n\n /**\n * Create a new component\n */\n async createComponent(\n request: ComponentCreate,\n options?: { params?: Record<string, string> }\n ): Promise<ComponentResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n const component = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.componentManager.createComponent(config.endpoint, request, headers, params);\n });\n\n this.state.components = [component, ...this.state.components];\n this.emit('component:created', component);\n this.emit('state:change', this.getState());\n\n return component;\n }\n\n /**\n * Get a specific component by ID\n */\n async getComponentById(\n componentId: string,\n options?: { params?: Record<string, string> }\n ): Promise<ComponentResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.componentManager.getComponentById(config.endpoint, componentId, headers, params);\n });\n }\n\n /**\n * Update an existing component\n */\n async updateComponent(\n componentId: string,\n request: ComponentUpdate,\n options?: { params?: Record<string, string> }\n ): Promise<ComponentResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n const component = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.componentManager.updateComponent(config.endpoint, componentId, request, headers, params);\n });\n\n this.state.components = this.state.components.map((c) =>\n c.component_id === componentId ? component : c\n );\n this.emit('component:updated', component);\n this.emit('state:change', this.getState());\n\n return component;\n }\n\n /**\n * Delete a component\n */\n async deleteComponent(\n componentId: string,\n options?: { params?: Record<string, string> }\n ): Promise<void> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.componentManager.deleteComponent(config.endpoint, componentId, headers, params);\n });\n\n this.state.components = this.state.components.filter((c) => c.component_id !== componentId);\n this.emit('component:deleted', { componentId });\n this.emit('state:change', this.getState());\n }\n\n /**\n * Fetch all config versions for a component\n */\n async fetchComponentConfigs(\n componentId: string,\n options?: { params?: Record<string, string> }\n ): Promise<ComponentConfigResponse[]> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.componentManager.fetchComponentConfigs(config.endpoint, componentId, headers, params);\n });\n }\n\n /**\n * Create a new config version for a component\n */\n async createComponentConfig(\n componentId: string,\n request: ConfigCreate,\n options?: { params?: Record<string, string> }\n ): Promise<ComponentConfigResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n const configResponse = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.componentManager.createComponentConfig(config.endpoint, componentId, request, headers, params);\n });\n\n this.emit('component:config:created', configResponse);\n\n return configResponse;\n }\n\n /**\n * Get the current active config for a component\n */\n async getCurrentComponentConfig(\n componentId: string,\n options?: { params?: Record<string, string> }\n ): Promise<ComponentConfigResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.componentManager.getCurrentConfig(config.endpoint, componentId, headers, params);\n });\n }\n\n /**\n * Get a specific config version for a component\n */\n async getComponentConfigByVersion(\n componentId: string,\n version: number,\n options?: { params?: Record<string, string> }\n ): Promise<ComponentConfigResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n return await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.componentManager.getConfigByVersion(config.endpoint, componentId, version, headers, params);\n });\n }\n\n /**\n * Update a draft config version for a component\n */\n async updateComponentConfig(\n componentId: string,\n version: number,\n request: ConfigUpdate,\n options?: { params?: Record<string, string> }\n ): Promise<ComponentConfigResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n const configResponse = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.componentManager.updateConfig(config.endpoint, componentId, version, request, headers, params);\n });\n\n this.emit('component:config:updated', configResponse);\n\n return configResponse;\n }\n\n /**\n * Delete a draft config version for a component\n */\n async deleteComponentConfig(\n componentId: string,\n version: number,\n options?: { params?: Record<string, string> }\n ): Promise<void> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.componentManager.deleteConfig(config.endpoint, componentId, version, headers, params);\n });\n\n this.emit('component:config:deleted', { componentId, version });\n }\n\n /**\n * Set a config version as the current active config for a component\n */\n async setCurrentComponentConfig(\n componentId: string,\n version: number,\n options?: { params?: Record<string, string> }\n ): Promise<ComponentConfigResponse> {\n const config = this.configManager.getConfig();\n const params = this.configManager.buildQueryString(options?.params);\n\n const configResponse = await this.withTokenRefresh(() => {\n const headers = this.configManager.buildRequestHeaders();\n return this.componentManager.setCurrentConfig(config.endpoint, componentId, version, headers, params);\n });\n\n this.emit('component:config:set-current', configResponse);\n\n return configResponse;\n }\n}\n",
6
6
  "import type { ChatMessage } from '@rodrigocoliveira/agno-types';\n\n/**\n * Manages message state with immutable updates\n */\nexport class MessageStore {\n private messages: ChatMessage[] = [];\n\n /**\n * Get all messages\n */\n getMessages(): ChatMessage[] {\n return [...this.messages];\n }\n\n /**\n * Set messages (replaces all)\n */\n setMessages(messages: ChatMessage[]): void {\n this.messages = [...messages];\n }\n\n /**\n * Add a message\n */\n addMessage(message: ChatMessage): void {\n this.messages = [...this.messages, message];\n }\n\n /**\n * Update the last message\n */\n updateLastMessage(\n updater: (lastMessage: ChatMessage) => ChatMessage\n ): ChatMessage | undefined {\n if (this.messages.length === 0) return undefined;\n\n const lastMessage = this.messages[this.messages.length - 1];\n const updatedMessage = updater(lastMessage);\n\n this.messages = [\n ...this.messages.slice(0, -1),\n updatedMessage,\n ];\n\n return updatedMessage;\n }\n\n /**\n * Update a specific message by index\n */\n updateMessage(\n index: number,\n updater: (message: ChatMessage) => ChatMessage\n ): ChatMessage | undefined {\n if (index < 0 || index >= this.messages.length) return undefined;\n\n const message = this.messages[index];\n const updatedMessage = updater(message);\n\n this.messages = [\n ...this.messages.slice(0, index),\n updatedMessage,\n ...this.messages.slice(index + 1),\n ];\n\n return updatedMessage;\n }\n\n /**\n * Remove last N messages\n */\n removeLastMessages(count: number): void {\n this.messages = this.messages.slice(0, -count);\n }\n\n /**\n * Clear all messages\n */\n clear(): void {\n this.messages = [];\n }\n\n /**\n * Get the last message\n */\n getLastMessage(): ChatMessage | undefined {\n return this.messages.length > 0\n ? this.messages[this.messages.length - 1]\n : undefined;\n }\n\n /**\n * Check if last message has streaming error\n */\n hasLastMessageError(): boolean {\n const lastMessage = this.getLastMessage();\n return lastMessage?.streamingError === true;\n }\n}\n",
7
7
  "import type { AgnoClientConfig } from '@rodrigocoliveira/agno-types';\n\n/**\n * Manages client configuration\n */\nexport class ConfigManager {\n private config: AgnoClientConfig;\n\n constructor(initialConfig: AgnoClientConfig) {\n this.config = { ...initialConfig };\n }\n\n /**\n * Get current configuration\n */\n getConfig(): AgnoClientConfig {\n return { ...this.config };\n }\n\n /**\n * Update configuration\n */\n updateConfig(updates: Partial<AgnoClientConfig>): void {\n this.config = { ...this.config, ...updates };\n }\n\n /**\n * Helper to update a single field immutably\n */\n private updateField<K extends keyof AgnoClientConfig>(\n key: K,\n value: AgnoClientConfig[K]\n ): void {\n this.config = { ...this.config, [key]: value };\n }\n\n /**\n * Get endpoint URL\n */\n getEndpoint(): string {\n return this.config.endpoint;\n }\n\n /**\n * Set endpoint URL\n */\n setEndpoint(endpoint: string): void {\n this.updateField('endpoint', endpoint);\n }\n\n /**\n * Get auth token\n */\n getAuthToken(): string | undefined {\n return this.config.authToken;\n }\n\n /**\n * Set auth token\n */\n setAuthToken(token: string | undefined): void {\n this.updateField('authToken', token);\n }\n\n /**\n * Get mode (agent or team)\n */\n getMode(): 'agent' | 'team' {\n return this.config.mode || 'agent';\n }\n\n /**\n * Set mode\n */\n setMode(mode: 'agent' | 'team'): void {\n this.updateField('mode', mode);\n }\n\n /**\n * Get agent ID\n */\n getAgentId(): string | undefined {\n return this.config.agentId;\n }\n\n /**\n * Set agent ID\n */\n setAgentId(agentId: string | undefined): void {\n this.updateField('agentId', agentId);\n }\n\n /**\n * Get team ID\n */\n getTeamId(): string | undefined {\n return this.config.teamId;\n }\n\n /**\n * Set team ID\n */\n setTeamId(teamId: string | undefined): void {\n this.updateField('teamId', teamId);\n }\n\n /**\n * Get database ID\n */\n getDbId(): string | undefined {\n return this.config.dbId;\n }\n\n /**\n * Set database ID\n */\n setDbId(dbId: string | undefined): void {\n this.updateField('dbId', dbId);\n }\n\n /**\n * Get session ID\n */\n getSessionId(): string | undefined {\n return this.config.sessionId;\n }\n\n /**\n * Set session ID\n */\n setSessionId(sessionId: string | undefined): void {\n this.updateField('sessionId', sessionId);\n }\n\n /**\n * Get user ID\n */\n getUserId(): string | undefined {\n return this.config.userId;\n }\n\n /**\n * Set user ID\n */\n setUserId(userId: string | undefined): void {\n this.updateField('userId', userId);\n }\n\n /**\n * Get custom headers\n */\n getHeaders(): Record<string, string> | undefined {\n return this.config.headers;\n }\n\n /**\n * Set custom headers\n */\n setHeaders(headers: Record<string, string> | undefined): void {\n this.updateField('headers', headers);\n }\n\n /**\n * Get global query parameters\n */\n getParams(): Record<string, string> | undefined {\n return this.config.params;\n }\n\n /**\n * Set global query parameters\n */\n setParams(params: Record<string, string> | undefined): void {\n this.updateField('params', params);\n }\n\n /**\n * Get the onTokenExpired callback\n */\n getOnTokenExpired(): AgnoClientConfig['onTokenExpired'] {\n return this.config.onTokenExpired;\n }\n\n /**\n * Set the onTokenExpired callback\n */\n setOnTokenExpired(callback: AgnoClientConfig['onTokenExpired']): void {\n this.config.onTokenExpired = callback;\n }\n\n /**\n * Get whether to emit member:* events for internal team activity\n */\n getEmitMemberEvents(): boolean {\n return this.config.emitMemberEvents ?? false;\n }\n\n /**\n * Set whether to emit member:* events\n */\n setEmitMemberEvents(emit: boolean): void {\n this.updateField('emitMemberEvents', emit);\n }\n\n /**\n * Get whether to request member events from backend\n */\n getStreamMemberEvents(): boolean {\n return this.config.streamMemberEvents ?? false;\n }\n\n /**\n * Set whether to request member events from backend\n */\n setStreamMemberEvents(stream: boolean): void {\n this.updateField('streamMemberEvents', stream);\n }\n\n /**\n * Get current entity ID (agent or team based on mode)\n */\n getCurrentEntityId(): string | undefined {\n return this.getMode() === 'agent' ? this.getAgentId() : this.getTeamId();\n }\n\n /**\n * Construct the run URL based on current config\n */\n getRunUrl(): string | null {\n const mode = this.getMode();\n const endpoint = this.getEndpoint();\n const entityId = this.getCurrentEntityId();\n\n if (!entityId) return null;\n\n // Encode entity ID to prevent path traversal and handle special characters\n const encodedEntityId = encodeURIComponent(entityId);\n\n if (mode === 'team') {\n return `${endpoint}/teams/${encodedEntityId}/runs`;\n } else {\n return `${endpoint}/agents/${encodedEntityId}/runs`;\n }\n }\n\n /**\n * Construct the cancel URL for a specific run\n * POST /agents/{agent_id}/runs/{run_id}/cancel\n * POST /teams/{team_id}/runs/{run_id}/cancel\n *\n * @param runId - The run ID to cancel\n * @returns The cancel URL or null if entity ID is not configured\n */\n getCancelUrl(runId: string): string | null {\n const mode = this.getMode();\n const endpoint = this.getEndpoint();\n const entityId = this.getCurrentEntityId();\n\n if (!entityId || !runId) return null;\n\n // Encode IDs to prevent path traversal and handle special characters\n const encodedEntityId = encodeURIComponent(entityId);\n const encodedRunId = encodeURIComponent(runId);\n\n if (mode === 'team') {\n return `${endpoint}/teams/${encodedEntityId}/runs/${encodedRunId}/cancel`;\n } else {\n return `${endpoint}/agents/${encodedEntityId}/runs/${encodedRunId}/cancel`;\n }\n }\n\n /**\n * Build request headers by merging global headers, per-request headers, and auth token.\n * Merge order (lowest to highest precedence):\n * 1. Global headers from config\n * 2. Per-request headers (overrides global)\n * 3. Authorization header from authToken (overrides all)\n *\n * @param perRequestHeaders - Optional headers for this specific request\n * @returns Merged headers object ready for fetch\n */\n buildRequestHeaders(perRequestHeaders?: Record<string, string>): Record<string, string> {\n const headers: Record<string, string> = {};\n\n // 1. Apply global headers from config\n const globalHeaders = this.getHeaders();\n if (globalHeaders) {\n Object.assign(headers, globalHeaders);\n }\n\n // 2. Apply per-request headers (overrides global)\n if (perRequestHeaders) {\n Object.assign(headers, perRequestHeaders);\n }\n\n // 3. Apply Authorization from authToken (overrides all)\n const authToken = this.getAuthToken();\n if (authToken) {\n headers['Authorization'] = `Bearer ${authToken}`;\n }\n\n return headers;\n }\n\n /**\n * Build query string by merging global params and per-request params.\n * Merge order (lowest to highest precedence):\n * 1. Global params from config\n * 2. Per-request params (overrides global)\n *\n * @param perRequestParams - Optional query parameters for this specific request\n * @returns URLSearchParams object ready to append to URLs\n */\n buildQueryString(perRequestParams?: Record<string, string>): URLSearchParams {\n const params: Record<string, string> = {};\n\n // 1. Apply global params from config\n const globalParams = this.getParams();\n if (globalParams) {\n Object.assign(params, globalParams);\n }\n\n // 2. Apply per-request params (overrides global)\n if (perRequestParams) {\n Object.assign(params, perRequestParams);\n }\n\n return new URLSearchParams(params);\n }\n}\n",
8
- "import type {\n SessionEntry,\n SessionsListResponse,\n ChatMessage,\n ImageData,\n AudioData,\n UserFileAttachment,\n RunSchema,\n TeamRunSchema,\n ToolCall,\n AgentSessionDetailSchema,\n TeamSessionDetailSchema,\n CreateSessionRequest,\n UpdateSessionRequest,\n} from '@rodrigocoliveira/agno-types';\n\n/**\n * Manages session operations\n */\nexport class SessionManager {\n /**\n * Fetch all sessions for an entity\n */\n async fetchSessions(\n endpoint: string,\n entityType: 'agent' | 'team',\n entityId: string,\n dbId: string,\n headers: Record<string, string>,\n params?: URLSearchParams\n ): Promise<SessionEntry[]> {\n const url = new URL(`${endpoint}/sessions`);\n url.searchParams.set('type', entityType);\n url.searchParams.set('component_id', entityId);\n if (dbId) {\n url.searchParams.set('db_id', dbId);\n }\n\n // Merge additional params if provided\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), { headers });\n\n if (!response.ok) {\n if (response.status === 404) {\n return [];\n }\n throw new Error(`Failed to fetch sessions: ${response.statusText}`);\n }\n\n const data: SessionsListResponse = await response.json();\n return data.data ?? [];\n }\n\n /**\n * Fetch a specific session's runs\n * Returns an array of RunSchema directly (not wrapped in { data, meta })\n */\n async fetchSession(\n endpoint: string,\n entityType: 'agent' | 'team',\n sessionId: string,\n dbId: string,\n headers: Record<string, string>,\n userId?: string,\n params?: URLSearchParams\n ): Promise<Array<RunSchema | TeamRunSchema>> {\n const url = new URL(`${endpoint}/sessions/${sessionId}/runs`);\n url.searchParams.set('type', entityType);\n if (dbId) {\n url.searchParams.set('db_id', dbId);\n }\n if (userId) {\n url.searchParams.set('user_id', userId);\n }\n\n // Merge additional params if provided\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), { headers });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch session: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Delete a session\n */\n async deleteSession(\n endpoint: string,\n sessionId: string,\n dbId: string,\n headers: Record<string, string>,\n params?: URLSearchParams\n ): Promise<void> {\n const url = new URL(`${endpoint}/sessions/${sessionId}`);\n if (dbId) {\n url.searchParams.set('db_id', dbId);\n }\n\n // Merge additional params if provided\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'DELETE',\n headers,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to delete session: ${response.statusText}`);\n }\n }\n\n /**\n * Get a session by ID\n */\n async getSessionById(\n endpoint: string,\n entityType: 'agent' | 'team',\n sessionId: string,\n dbId: string,\n headers: Record<string, string>,\n userId?: string,\n params?: URLSearchParams\n ): Promise<AgentSessionDetailSchema | TeamSessionDetailSchema> {\n const url = new URL(`${endpoint}/sessions/${sessionId}`);\n url.searchParams.set('type', entityType);\n if (dbId) {\n url.searchParams.set('db_id', dbId);\n }\n if (userId) {\n url.searchParams.set('user_id', userId);\n }\n\n // Merge additional params if provided\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), { headers });\n\n if (!response.ok) {\n throw new Error(`Failed to get session: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Get a run by ID\n */\n async getRunById(\n endpoint: string,\n entityType: 'agent' | 'team',\n sessionId: string,\n runId: string,\n dbId: string,\n headers: Record<string, string>,\n userId?: string,\n params?: URLSearchParams\n ): Promise<RunSchema | TeamRunSchema> {\n const url = new URL(`${endpoint}/sessions/${sessionId}/runs/${runId}`);\n url.searchParams.set('type', entityType);\n if (dbId) {\n url.searchParams.set('db_id', dbId);\n }\n if (userId) {\n url.searchParams.set('user_id', userId);\n }\n\n // Merge additional params if provided\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), { headers });\n\n if (!response.ok) {\n throw new Error(`Failed to get run: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Create a new session\n */\n async createSession(\n endpoint: string,\n entityType: 'agent' | 'team',\n request: CreateSessionRequest,\n dbId: string,\n headers: Record<string, string>,\n params?: URLSearchParams\n ): Promise<AgentSessionDetailSchema | TeamSessionDetailSchema> {\n const url = new URL(`${endpoint}/sessions`);\n url.searchParams.set('type', entityType);\n if (dbId) {\n url.searchParams.set('db_id', dbId);\n }\n\n // Merge additional params if provided\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'POST',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to create session: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Update a session\n */\n async updateSession(\n endpoint: string,\n entityType: 'agent' | 'team',\n sessionId: string,\n request: UpdateSessionRequest,\n dbId: string,\n headers: Record<string, string>,\n userId?: string,\n params?: URLSearchParams\n ): Promise<AgentSessionDetailSchema | TeamSessionDetailSchema> {\n const url = new URL(`${endpoint}/sessions/${sessionId}`);\n url.searchParams.set('type', entityType);\n if (dbId) {\n url.searchParams.set('db_id', dbId);\n }\n if (userId) {\n url.searchParams.set('user_id', userId);\n }\n\n // Merge additional params if provided\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'PATCH',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to update session: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Rename a session\n */\n async renameSession(\n endpoint: string,\n entityType: 'agent' | 'team',\n sessionId: string,\n newName: string,\n dbId: string,\n headers: Record<string, string>,\n params?: URLSearchParams\n ): Promise<AgentSessionDetailSchema | TeamSessionDetailSchema> {\n const url = new URL(`${endpoint}/sessions/${sessionId}/rename`);\n url.searchParams.set('type', entityType);\n if (dbId) {\n url.searchParams.set('db_id', dbId);\n }\n\n // Merge additional params if provided\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'POST',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ session_name: newName }),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to rename session: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Delete multiple sessions\n */\n async deleteMultipleSessions(\n endpoint: string,\n sessionIds: string[],\n sessionTypes: Array<'agent' | 'team'>,\n dbId: string,\n headers: Record<string, string>,\n params?: URLSearchParams\n ): Promise<void> {\n const url = new URL(`${endpoint}/sessions`);\n if (dbId) {\n url.searchParams.set('db_id', dbId);\n }\n\n // Merge additional params if provided\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'DELETE',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n session_ids: sessionIds,\n session_types: sessionTypes,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to delete sessions: ${response.statusText}`);\n }\n }\n\n /**\n * Convert session runs array to chat messages.\n * Filters out child runs (those with parent_run_id) to prevent\n * internal team member communications from appearing as user messages.\n */\n convertSessionToMessages(\n runs: Array<RunSchema | TeamRunSchema>\n ): ChatMessage[] {\n // Filter to only root-level runs (no parent = user-initiated)\n // Child runs have parent_run_id set and represent internal team member work\n const rootRuns = runs.filter(run => !run.parent_run_id);\n const messages = this.convertRunsToMessages(rootRuns);\n return messages;\n }\n\n /**\n * Convert RunSchema[] to ChatMessage[]\n * Each run represents a user input + agent response pair\n */\n private convertRunsToMessages(\n runs: Array<RunSchema | TeamRunSchema>\n ): ChatMessage[] {\n const messages: ChatMessage[] = [];\n\n for (const run of runs) {\n // Parse created_at timestamp\n const timestamp = run.created_at\n ? new Date(run.created_at).getTime() / 1000\n : Math.floor(Date.now() / 1000);\n\n // Add user message (from run_input)\n if (run.run_input) {\n // Extract user-uploaded media from input_media\n const userImages: ImageData[] = [];\n const userAudio: AudioData[] = [];\n const userFiles: UserFileAttachment[] = [];\n\n if (run.input_media && typeof run.input_media === 'object') {\n const media = run.input_media as Record<string, unknown>;\n\n // Parse images from input_media\n // API returns: { id, format, mime_type, content (base64) }\n if (Array.isArray(media.images)) {\n for (const img of media.images) {\n const imgObj = img as Record<string, unknown>;\n let url = imgObj.url as string | undefined;\n // Construct data URL from base64 content if no URL provided\n if (!url && imgObj.content) {\n const mimeType = (imgObj.mime_type as string) || `image/${imgObj.format || 'png'}`;\n url = `data:${mimeType};base64,${imgObj.content}`;\n }\n if (url) {\n userImages.push({\n url,\n revised_prompt: (imgObj.original_name as string) || 'Uploaded image',\n });\n }\n }\n }\n\n // Parse audio from input_media\n // API returns: { id, format, mime_type, content (base64) }\n if (Array.isArray(media.audio)) {\n for (const aud of media.audio) {\n const audObj = aud as Record<string, unknown>;\n let url = audObj.url as string | undefined;\n if (!url && audObj.content) {\n const mimeType = (audObj.mime_type as string) || `audio/${audObj.format || 'wav'}`;\n url = `data:${mimeType};base64,${audObj.content}`;\n }\n if (url) {\n userAudio.push({\n url,\n mime_type: (audObj.mime_type as string) || undefined,\n });\n }\n }\n }\n\n // Parse files from input_media\n if (Array.isArray(media.files)) {\n for (const file of media.files) {\n const fileObj = file as Record<string, unknown>;\n let url = fileObj.url as string | undefined;\n if (!url && fileObj.content) {\n const mimeType = (fileObj.mime_type as string) || (fileObj.content_type as string) || 'application/octet-stream';\n url = `data:${mimeType};base64,${fileObj.content}`;\n }\n userFiles.push({\n name: (fileObj.original_name as string) || (fileObj.name as string) || 'file',\n type: (fileObj.content_type as string) || (fileObj.mime_type as string) || '',\n url,\n size: (fileObj.size as number) || undefined,\n });\n }\n }\n }\n\n messages.push({\n role: 'user',\n content: run.run_input,\n created_at: timestamp,\n ...(userImages.length > 0 ? { images: userImages } : {}),\n ...(userAudio.length > 0 ? { audio: userAudio } : {}),\n ...(userFiles.length > 0 ? { files: userFiles } : {}),\n });\n }\n\n // Extract tool calls from tools array\n const toolCalls: ToolCall[] = [];\n\n if (run.tools && Array.isArray(run.tools)) {\n for (const tool of run.tools) {\n const toolObj = tool as Record<string, unknown>;\n const toolCall = {\n role: 'tool' as const,\n content: (toolObj.content as string) ?? '',\n result: (toolObj.result as string) ?? undefined,\n tool_call_id: (toolObj.tool_call_id as string) ?? '',\n tool_name: (toolObj.tool_name as string) ?? '',\n tool_args: (toolObj.tool_args as Record<string, string>) ?? {},\n tool_call_error: (toolObj.tool_call_error as boolean) ?? false,\n metrics: (toolObj.metrics as { time: number }) ?? { time: 0 },\n created_at: timestamp,\n };\n\n toolCalls.push(toolCall);\n }\n }\n\n // Extract additional tool calls from reasoning_messages\n if (run.reasoning_messages && Array.isArray(run.reasoning_messages)) {\n for (const msg of run.reasoning_messages) {\n const reasoningMsg = msg as Record<string, unknown>;\n if (reasoningMsg.role === 'tool') {\n toolCalls.push({\n role: 'tool',\n content: (reasoningMsg.content as string) ?? '',\n tool_call_id: (reasoningMsg.tool_call_id as string) ?? '',\n tool_name: (reasoningMsg.tool_name as string) ?? '',\n tool_args: (reasoningMsg.tool_args as Record<string, string>) ?? {},\n tool_call_error: (reasoningMsg.tool_call_error as boolean) ?? false,\n metrics: (reasoningMsg.metrics as { time: number }) ?? { time: 0 },\n created_at: (reasoningMsg.created_at as number) ?? timestamp,\n });\n }\n }\n }\n\n // Convert content to string if it's an object\n let contentStr = '';\n if (typeof run.content === 'string') {\n contentStr = run.content;\n } else if (run.content && typeof run.content === 'object') {\n contentStr = JSON.stringify(run.content);\n }\n\n // Build extra_data if there's any reasoning/reference content\n // Cast to any to avoid type issues with generic Record<string, unknown> from API\n const extraData =\n run.reasoning_messages || run.reasoning_steps || run.references\n ? ({\n reasoning_messages: run.reasoning_messages,\n reasoning_steps: run.reasoning_steps,\n references: run.references,\n } as any)\n : undefined;\n\n // Detect error runs — backend stores exception text as run.content\n // but the LLM never actually produced this output.\n // Skip adding the agent message entirely for error runs;\n // errors are shown via the error bar, not as chat bubbles.\n //\n // Three layers of detection (any one triggers skip):\n // 1. run.status === 'error' – explicit status from backend (strongest signal)\n // 2. RunError/TeamRunError in events – standard error event\n // 3. events array missing/empty AND content exists – exception fired\n // before any events were emitted (e.g. pre-hook or early init failure)\n const hasErrorStatus =\n typeof run.status === 'string' &&\n run.status.toLowerCase() === 'error';\n\n const hasRunErrorEvent = run.events?.some(\n (e) => e.event === 'RunError' || e.event === 'TeamRunError'\n );\n\n const hasNoEvents = !run.events || run.events.length === 0;\n const suspectedEarlyError = hasNoEvents && !!contentStr;\n\n const isErrorRun = hasErrorStatus || hasRunErrorEvent || suspectedEarlyError;\n\n if (!isErrorRun) {\n // Add agent response message\n messages.push({\n role: 'agent',\n content: contentStr,\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n extra_data: extraData,\n images: run.images as any,\n videos: run.videos as any,\n audio: run.audio as any,\n response_audio: run.response_audio as any,\n created_at: timestamp + 1, // Agent response is slightly after user message\n });\n }\n }\n\n return messages;\n }\n}\n",
8
+ "/**\n * Workaround for upstream agno bug — see:\n * - https://github.com/agno-agi/agno/issues/8007 (upstream)\n * - https://github.com/rodrigocoliveira/agno-client/issues/11 (downstream)\n *\n * The agno backend (Python) serializes list/dict values inside `tool_args` via\n * `str()` / `repr()`, producing single-quoted Python literals that are NOT\n * valid JSON. We coerce them at the parser boundary so consumers always see\n * structured JS values.\n *\n * This module is forward-compatible: when agno emits structured JSON (or\n * json.dumps strings), the coercion becomes a no-op transparently and can be\n * removed by deleting this file and reverting the call sites.\n */\n\n/**\n * Coerce a single tool_args value into its structured JS form.\n *\n * Attempts, in order:\n * 1. Non-string → return as-is (forward-compat: agno may emit structured)\n * 2. Empty/whitespace string → return as-is\n * 3. Valid JSON → JSON.parse result\n * 4. Looks like a Python literal → parse with internal Python-literal parser\n * 5. Otherwise → return original string unchanged\n *\n * Never throws — failed parses fall through to the original value.\n */\nexport function parseToolArg(value: unknown): unknown {\n if (typeof value !== 'string') return value;\n const trimmed = value.trim();\n if (trimmed === '') return value;\n\n try {\n return JSON.parse(trimmed);\n } catch {\n // fall through\n }\n\n if (looksLikePythonLiteral(trimmed)) {\n try {\n return parsePythonLiteral(trimmed);\n } catch {\n // fall through to raw string\n }\n }\n\n return value;\n}\n\n/** Apply parseToolArg to every value of a tool_args dict. */\nexport function parseToolArgs(\n args: Record<string, unknown> | undefined | null\n): Record<string, unknown> {\n if (!args || typeof args !== 'object') return {};\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(args)) {\n out[key] = parseToolArg(args[key]);\n }\n return out;\n}\n\nfunction looksLikePythonLiteral(s: string): boolean {\n if (s.length === 0) return false;\n const c = s[0];\n if (c === '[' || c === '{' || c === '(' || c === \"'\") return true;\n return s === 'True' || s === 'False' || s === 'None';\n}\n\n/**\n * Minimal Python-literal parser. Handles the subset agno emits via repr():\n * - lists `[...]`, tuples `(...)` (treated as arrays), dicts `{...}`\n * - single- and double-quoted strings with `\\\\`, `\\'`, `\\\"`, `\\n`, `\\r`,\n * `\\t`, `\\b`, `\\f`, `\\0`, `\\xHH`, `\\uHHHH` escapes\n * - ints, floats (incl. negative, scientific), `True`, `False`, `None`\n * - trailing commas, arbitrary whitespace\n *\n * Recursive descent over a position index.\n */\nfunction parsePythonLiteral(src: string): unknown {\n let i = 0;\n\n function err(msg: string): never {\n throw new Error(`parsePythonLiteral: ${msg} at offset ${i}`);\n }\n\n function skipWs(): void {\n while (i < src.length) {\n const c = src.charCodeAt(i);\n if (c === 32 || c === 9 || c === 10 || c === 13) i++;\n else break;\n }\n }\n\n function parseValue(): unknown {\n skipWs();\n if (i >= src.length) err('unexpected end');\n const c = src[i];\n\n if (c === '[' || c === '(') return parseList(c === '[' ? ']' : ')');\n if (c === '{') return parseDict();\n if (c === \"'\" || c === '\"') return parseString(c);\n if (c === '-' || c === '+' || (c >= '0' && c <= '9')) return parseNumber();\n if (c === 'T' && src.startsWith('True', i)) {\n i += 4;\n return true;\n }\n if (c === 'F' && src.startsWith('False', i)) {\n i += 5;\n return false;\n }\n if (c === 'N' && src.startsWith('None', i)) {\n i += 4;\n return null;\n }\n err(`unexpected char '${c}'`);\n }\n\n function parseList(closer: string): unknown[] {\n i++; // consume opener\n const out: unknown[] = [];\n skipWs();\n if (src[i] === closer) {\n i++;\n return out;\n }\n while (i < src.length) {\n out.push(parseValue());\n skipWs();\n if (src[i] === ',') {\n i++;\n skipWs();\n if (src[i] === closer) {\n i++;\n return out;\n }\n continue;\n }\n if (src[i] === closer) {\n i++;\n return out;\n }\n err(`expected ',' or '${closer}'`);\n }\n err('unterminated list');\n }\n\n function parseDict(): Record<string, unknown> {\n i++; // consume '{'\n const out: Record<string, unknown> = {};\n skipWs();\n if (src[i] === '}') {\n i++;\n return out;\n }\n while (i < src.length) {\n skipWs();\n const key = parseValue();\n const keyStr = typeof key === 'string' ? key : String(key);\n skipWs();\n if (src[i] !== ':') err(\"expected ':' in dict\");\n i++;\n const value = parseValue();\n out[keyStr] = value;\n skipWs();\n if (src[i] === ',') {\n i++;\n skipWs();\n if (src[i] === '}') {\n i++;\n return out;\n }\n continue;\n }\n if (src[i] === '}') {\n i++;\n return out;\n }\n err(\"expected ',' or '}'\");\n }\n err('unterminated dict');\n }\n\n function parseString(quote: string): string {\n i++; // consume opener\n let out = '';\n while (i < src.length) {\n const c = src[i];\n if (c === '\\\\') {\n i++;\n if (i >= src.length) err('dangling escape');\n const e = src[i++];\n switch (e) {\n case 'n': out += '\\n'; break;\n case 't': out += '\\t'; break;\n case 'r': out += '\\r'; break;\n case 'b': out += '\\b'; break;\n case 'f': out += '\\f'; break;\n case '0': out += '\\0'; break;\n case '\\\\': out += '\\\\'; break;\n case \"'\": out += \"'\"; break;\n case '\"': out += '\"'; break;\n case 'x': {\n const hex = src.slice(i, i + 2);\n if (!/^[0-9a-fA-F]{2}$/.test(hex)) err('bad \\\\x escape');\n out += String.fromCharCode(parseInt(hex, 16));\n i += 2;\n break;\n }\n case 'u': {\n const hex = src.slice(i, i + 4);\n if (!/^[0-9a-fA-F]{4}$/.test(hex)) err('bad \\\\u escape');\n out += String.fromCharCode(parseInt(hex, 16));\n i += 4;\n break;\n }\n default:\n // Unknown escape — keep the char literal (Python's behavior in\n // non-raw strings would warn; we just pass through).\n out += e;\n }\n continue;\n }\n if (c === quote) {\n i++;\n return out;\n }\n out += c;\n i++;\n }\n err('unterminated string');\n }\n\n function parseNumber(): number {\n const start = i;\n if (src[i] === '+' || src[i] === '-') i++;\n while (i < src.length && /[0-9]/.test(src[i])) i++;\n let isFloat = false;\n if (src[i] === '.') {\n isFloat = true;\n i++;\n while (i < src.length && /[0-9]/.test(src[i])) i++;\n }\n if (src[i] === 'e' || src[i] === 'E') {\n isFloat = true;\n i++;\n if (src[i] === '+' || src[i] === '-') i++;\n while (i < src.length && /[0-9]/.test(src[i])) i++;\n }\n const slice = src.slice(start, i);\n if (slice === '' || slice === '+' || slice === '-') err('expected number');\n const n = isFloat ? parseFloat(slice) : parseInt(slice, 10);\n if (Number.isNaN(n)) err(`bad number '${slice}'`);\n return n;\n }\n\n const result = parseValue();\n skipWs();\n if (i !== src.length) err('trailing characters');\n return result;\n}\n",
9
+ "import type {\n SessionEntry,\n SessionsListResponse,\n ChatMessage,\n ImageData,\n AudioData,\n UserFileAttachment,\n RunSchema,\n TeamRunSchema,\n ToolCall,\n AgentSessionDetailSchema,\n TeamSessionDetailSchema,\n CreateSessionRequest,\n UpdateSessionRequest,\n} from '@rodrigocoliveira/agno-types';\nimport { parseToolArgs } from '../utils/parse-tool-arg';\n\n/**\n * Manages session operations\n */\nexport class SessionManager {\n /**\n * Fetch all sessions for an entity\n */\n async fetchSessions(\n endpoint: string,\n entityType: 'agent' | 'team',\n entityId: string,\n dbId: string,\n headers: Record<string, string>,\n params?: URLSearchParams\n ): Promise<SessionEntry[]> {\n const url = new URL(`${endpoint}/sessions`);\n url.searchParams.set('type', entityType);\n url.searchParams.set('component_id', entityId);\n if (dbId) {\n url.searchParams.set('db_id', dbId);\n }\n\n // Merge additional params if provided\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), { headers });\n\n if (!response.ok) {\n if (response.status === 404) {\n return [];\n }\n throw new Error(`Failed to fetch sessions: ${response.statusText}`);\n }\n\n const data: SessionsListResponse = await response.json();\n return data.data ?? [];\n }\n\n /**\n * Fetch a specific session's runs\n * Returns an array of RunSchema directly (not wrapped in { data, meta })\n */\n async fetchSession(\n endpoint: string,\n entityType: 'agent' | 'team',\n sessionId: string,\n dbId: string,\n headers: Record<string, string>,\n userId?: string,\n params?: URLSearchParams\n ): Promise<Array<RunSchema | TeamRunSchema>> {\n const url = new URL(`${endpoint}/sessions/${sessionId}/runs`);\n url.searchParams.set('type', entityType);\n if (dbId) {\n url.searchParams.set('db_id', dbId);\n }\n if (userId) {\n url.searchParams.set('user_id', userId);\n }\n\n // Merge additional params if provided\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), { headers });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch session: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Delete a session\n */\n async deleteSession(\n endpoint: string,\n sessionId: string,\n dbId: string,\n headers: Record<string, string>,\n params?: URLSearchParams\n ): Promise<void> {\n const url = new URL(`${endpoint}/sessions/${sessionId}`);\n if (dbId) {\n url.searchParams.set('db_id', dbId);\n }\n\n // Merge additional params if provided\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'DELETE',\n headers,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to delete session: ${response.statusText}`);\n }\n }\n\n /**\n * Get a session by ID\n */\n async getSessionById(\n endpoint: string,\n entityType: 'agent' | 'team',\n sessionId: string,\n dbId: string,\n headers: Record<string, string>,\n userId?: string,\n params?: URLSearchParams\n ): Promise<AgentSessionDetailSchema | TeamSessionDetailSchema> {\n const url = new URL(`${endpoint}/sessions/${sessionId}`);\n url.searchParams.set('type', entityType);\n if (dbId) {\n url.searchParams.set('db_id', dbId);\n }\n if (userId) {\n url.searchParams.set('user_id', userId);\n }\n\n // Merge additional params if provided\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), { headers });\n\n if (!response.ok) {\n throw new Error(`Failed to get session: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Get a run by ID\n */\n async getRunById(\n endpoint: string,\n entityType: 'agent' | 'team',\n sessionId: string,\n runId: string,\n dbId: string,\n headers: Record<string, string>,\n userId?: string,\n params?: URLSearchParams\n ): Promise<RunSchema | TeamRunSchema> {\n const url = new URL(`${endpoint}/sessions/${sessionId}/runs/${runId}`);\n url.searchParams.set('type', entityType);\n if (dbId) {\n url.searchParams.set('db_id', dbId);\n }\n if (userId) {\n url.searchParams.set('user_id', userId);\n }\n\n // Merge additional params if provided\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), { headers });\n\n if (!response.ok) {\n throw new Error(`Failed to get run: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Create a new session\n */\n async createSession(\n endpoint: string,\n entityType: 'agent' | 'team',\n request: CreateSessionRequest,\n dbId: string,\n headers: Record<string, string>,\n params?: URLSearchParams\n ): Promise<AgentSessionDetailSchema | TeamSessionDetailSchema> {\n const url = new URL(`${endpoint}/sessions`);\n url.searchParams.set('type', entityType);\n if (dbId) {\n url.searchParams.set('db_id', dbId);\n }\n\n // Merge additional params if provided\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'POST',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to create session: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Update a session\n */\n async updateSession(\n endpoint: string,\n entityType: 'agent' | 'team',\n sessionId: string,\n request: UpdateSessionRequest,\n dbId: string,\n headers: Record<string, string>,\n userId?: string,\n params?: URLSearchParams\n ): Promise<AgentSessionDetailSchema | TeamSessionDetailSchema> {\n const url = new URL(`${endpoint}/sessions/${sessionId}`);\n url.searchParams.set('type', entityType);\n if (dbId) {\n url.searchParams.set('db_id', dbId);\n }\n if (userId) {\n url.searchParams.set('user_id', userId);\n }\n\n // Merge additional params if provided\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'PATCH',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to update session: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Rename a session\n */\n async renameSession(\n endpoint: string,\n entityType: 'agent' | 'team',\n sessionId: string,\n newName: string,\n dbId: string,\n headers: Record<string, string>,\n params?: URLSearchParams\n ): Promise<AgentSessionDetailSchema | TeamSessionDetailSchema> {\n const url = new URL(`${endpoint}/sessions/${sessionId}/rename`);\n url.searchParams.set('type', entityType);\n if (dbId) {\n url.searchParams.set('db_id', dbId);\n }\n\n // Merge additional params if provided\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'POST',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ session_name: newName }),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to rename session: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Delete multiple sessions\n */\n async deleteMultipleSessions(\n endpoint: string,\n sessionIds: string[],\n sessionTypes: Array<'agent' | 'team'>,\n dbId: string,\n headers: Record<string, string>,\n params?: URLSearchParams\n ): Promise<void> {\n const url = new URL(`${endpoint}/sessions`);\n if (dbId) {\n url.searchParams.set('db_id', dbId);\n }\n\n // Merge additional params if provided\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'DELETE',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n session_ids: sessionIds,\n session_types: sessionTypes,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to delete sessions: ${response.statusText}`);\n }\n }\n\n /**\n * Convert session runs array to chat messages.\n * Filters out child runs (those with parent_run_id) to prevent\n * internal team member communications from appearing as user messages.\n */\n convertSessionToMessages(\n runs: Array<RunSchema | TeamRunSchema>\n ): ChatMessage[] {\n // Filter to only root-level runs (no parent = user-initiated)\n // Child runs have parent_run_id set and represent internal team member work\n const rootRuns = runs.filter(run => !run.parent_run_id);\n const messages = this.convertRunsToMessages(rootRuns);\n return messages;\n }\n\n /**\n * Convert RunSchema[] to ChatMessage[]\n * Each run represents a user input + agent response pair\n */\n private convertRunsToMessages(\n runs: Array<RunSchema | TeamRunSchema>\n ): ChatMessage[] {\n const messages: ChatMessage[] = [];\n\n for (const run of runs) {\n // Parse created_at timestamp\n const timestamp = run.created_at\n ? new Date(run.created_at).getTime() / 1000\n : Math.floor(Date.now() / 1000);\n\n // Add user message (from run_input)\n if (run.run_input) {\n // Extract user-uploaded media from input_media\n const userImages: ImageData[] = [];\n const userAudio: AudioData[] = [];\n const userFiles: UserFileAttachment[] = [];\n\n if (run.input_media && typeof run.input_media === 'object') {\n const media = run.input_media as Record<string, unknown>;\n\n // Parse images from input_media\n // API returns: { id, format, mime_type, content (base64) }\n if (Array.isArray(media.images)) {\n for (const img of media.images) {\n const imgObj = img as Record<string, unknown>;\n let url = imgObj.url as string | undefined;\n // Construct data URL from base64 content if no URL provided\n if (!url && imgObj.content) {\n const mimeType = (imgObj.mime_type as string) || `image/${imgObj.format || 'png'}`;\n url = `data:${mimeType};base64,${imgObj.content}`;\n }\n if (url) {\n userImages.push({\n url,\n revised_prompt: (imgObj.original_name as string) || 'Uploaded image',\n });\n }\n }\n }\n\n // Parse audio from input_media\n // API returns: { id, format, mime_type, content (base64) }\n if (Array.isArray(media.audio)) {\n for (const aud of media.audio) {\n const audObj = aud as Record<string, unknown>;\n let url = audObj.url as string | undefined;\n if (!url && audObj.content) {\n const mimeType = (audObj.mime_type as string) || `audio/${audObj.format || 'wav'}`;\n url = `data:${mimeType};base64,${audObj.content}`;\n }\n if (url) {\n userAudio.push({\n url,\n mime_type: (audObj.mime_type as string) || undefined,\n });\n }\n }\n }\n\n // Parse files from input_media\n if (Array.isArray(media.files)) {\n for (const file of media.files) {\n const fileObj = file as Record<string, unknown>;\n let url = fileObj.url as string | undefined;\n if (!url && fileObj.content) {\n const mimeType = (fileObj.mime_type as string) || (fileObj.content_type as string) || 'application/octet-stream';\n url = `data:${mimeType};base64,${fileObj.content}`;\n }\n userFiles.push({\n name: (fileObj.original_name as string) || (fileObj.name as string) || 'file',\n type: (fileObj.content_type as string) || (fileObj.mime_type as string) || '',\n url,\n size: (fileObj.size as number) || undefined,\n });\n }\n }\n }\n\n messages.push({\n role: 'user',\n content: run.run_input,\n created_at: timestamp,\n ...(userImages.length > 0 ? { images: userImages } : {}),\n ...(userAudio.length > 0 ? { audio: userAudio } : {}),\n ...(userFiles.length > 0 ? { files: userFiles } : {}),\n });\n }\n\n // Extract tool calls from tools array\n const toolCalls: ToolCall[] = [];\n\n if (run.tools && Array.isArray(run.tools)) {\n for (const tool of run.tools) {\n const toolObj = tool as Record<string, unknown>;\n const toolCall = {\n role: 'tool' as const,\n content: (toolObj.content as string) ?? '',\n result: (toolObj.result as string) ?? undefined,\n tool_call_id: (toolObj.tool_call_id as string) ?? '',\n tool_name: (toolObj.tool_name as string) ?? '',\n tool_args: parseToolArgs(toolObj.tool_args as Record<string, unknown>),\n tool_call_error: (toolObj.tool_call_error as boolean) ?? false,\n metrics: (toolObj.metrics as { time: number }) ?? { time: 0 },\n created_at: timestamp,\n };\n\n toolCalls.push(toolCall);\n }\n }\n\n // Extract additional tool calls from reasoning_messages\n if (run.reasoning_messages && Array.isArray(run.reasoning_messages)) {\n for (const msg of run.reasoning_messages) {\n const reasoningMsg = msg as Record<string, unknown>;\n if (reasoningMsg.role === 'tool') {\n toolCalls.push({\n role: 'tool',\n content: (reasoningMsg.content as string) ?? '',\n tool_call_id: (reasoningMsg.tool_call_id as string) ?? '',\n tool_name: (reasoningMsg.tool_name as string) ?? '',\n tool_args: parseToolArgs(reasoningMsg.tool_args as Record<string, unknown>),\n tool_call_error: (reasoningMsg.tool_call_error as boolean) ?? false,\n metrics: (reasoningMsg.metrics as { time: number }) ?? { time: 0 },\n created_at: (reasoningMsg.created_at as number) ?? timestamp,\n });\n }\n }\n }\n\n // Convert content to string if it's an object\n let contentStr = '';\n if (typeof run.content === 'string') {\n contentStr = run.content;\n } else if (run.content && typeof run.content === 'object') {\n contentStr = JSON.stringify(run.content);\n }\n\n // Build extra_data if there's any reasoning/reference content\n // Cast to any to avoid type issues with generic Record<string, unknown> from API\n const extraData =\n run.reasoning_messages || run.reasoning_steps || run.references\n ? ({\n reasoning_messages: run.reasoning_messages,\n reasoning_steps: run.reasoning_steps,\n references: run.references,\n } as any)\n : undefined;\n\n // Detect error runs — backend stores exception text as run.content\n // but the LLM never actually produced this output.\n // Skip adding the agent message entirely for error runs;\n // errors are shown via the error bar, not as chat bubbles.\n //\n // Three layers of detection (any one triggers skip):\n // 1. run.status === 'error' – explicit status from backend (strongest signal)\n // 2. RunError/TeamRunError in events – standard error event\n // 3. events array missing/empty AND content exists – exception fired\n // before any events were emitted (e.g. pre-hook or early init failure)\n const hasErrorStatus =\n typeof run.status === 'string' &&\n run.status.toLowerCase() === 'error';\n\n const hasRunErrorEvent = run.events?.some(\n (e) => e.event === 'RunError' || e.event === 'TeamRunError'\n );\n\n const hasNoEvents = !run.events || run.events.length === 0;\n const suspectedEarlyError = hasNoEvents && !!contentStr;\n\n const isErrorRun = hasErrorStatus || hasRunErrorEvent || suspectedEarlyError;\n\n if (!isErrorRun) {\n // Add agent response message\n messages.push({\n role: 'agent',\n content: contentStr,\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n extra_data: extraData,\n images: run.images as any,\n videos: run.videos as any,\n audio: run.audio as any,\n response_audio: run.response_audio as any,\n created_at: timestamp + 1, // Agent response is slightly after user message\n });\n }\n }\n\n return messages;\n }\n}\n",
9
10
  "import type {\n UserMemory,\n MemoriesListResponse,\n ListMemoriesParams,\n CreateMemoryRequest,\n UpdateMemoryRequest,\n DeleteMultipleMemoriesRequest,\n UserMemoryStatsResponse,\n UserMemoryStatsParams,\n} from '@rodrigocoliveira/agno-types';\n\n/**\n * Manages memory operations\n */\nexport class MemoryManager {\n /**\n * Fetch memories with filtering and pagination\n */\n async fetchMemories(\n endpoint: string,\n dbId: string,\n headers: Record<string, string>,\n queryParams?: ListMemoriesParams,\n params?: URLSearchParams\n ): Promise<MemoriesListResponse> {\n const url = new URL(`${endpoint}/memories`);\n\n // Add query parameters from ListMemoriesParams\n if (queryParams) {\n if (queryParams.user_id) url.searchParams.set('user_id', queryParams.user_id);\n if (queryParams.agent_id) url.searchParams.set('agent_id', queryParams.agent_id);\n if (queryParams.team_id) url.searchParams.set('team_id', queryParams.team_id);\n if (queryParams.search_content) url.searchParams.set('search_content', queryParams.search_content);\n if (queryParams.limit !== undefined) url.searchParams.set('limit', String(queryParams.limit));\n if (queryParams.page !== undefined) url.searchParams.set('page', String(queryParams.page));\n if (queryParams.sort_by) url.searchParams.set('sort_by', queryParams.sort_by);\n if (queryParams.sort_order) url.searchParams.set('sort_order', queryParams.sort_order);\n if (queryParams.db_id) url.searchParams.set('db_id', queryParams.db_id);\n if (queryParams.table) url.searchParams.set('table', queryParams.table);\n if (queryParams.topics && queryParams.topics.length > 0) {\n url.searchParams.set('topics', queryParams.topics.join(','));\n }\n }\n\n // Use dbId from config if not provided in queryParams\n if (!queryParams?.db_id && dbId) {\n url.searchParams.set('db_id', dbId);\n }\n\n // Merge additional params if provided\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), { headers });\n\n if (!response.ok) {\n if (response.status === 404) {\n return { data: [], meta: { page: 0, limit: 20, total_pages: 0, total_count: 0, search_time_ms: 0 } };\n }\n throw new Error(`Failed to fetch memories: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Get a specific memory by ID\n */\n async getMemoryById(\n endpoint: string,\n memoryId: string,\n dbId: string,\n headers: Record<string, string>,\n userId?: string,\n table?: string,\n params?: URLSearchParams\n ): Promise<UserMemory> {\n const url = new URL(`${endpoint}/memories/${memoryId}`);\n\n if (userId) url.searchParams.set('user_id', userId);\n if (dbId) url.searchParams.set('db_id', dbId);\n if (table) url.searchParams.set('table', table);\n\n // Merge additional params if provided\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), { headers });\n\n if (!response.ok) {\n throw new Error(`Failed to get memory: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Get all available memory topics\n */\n async getMemoryTopics(\n endpoint: string,\n dbId: string,\n headers: Record<string, string>,\n table?: string,\n params?: URLSearchParams\n ): Promise<string[]> {\n const url = new URL(`${endpoint}/memory_topics`);\n\n if (dbId) url.searchParams.set('db_id', dbId);\n if (table) url.searchParams.set('table', table);\n\n // Merge additional params if provided\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), { headers });\n\n if (!response.ok) {\n if (response.status === 404) {\n return [];\n }\n throw new Error(`Failed to get memory topics: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Get user memory statistics\n */\n async getUserMemoryStats(\n endpoint: string,\n dbId: string,\n headers: Record<string, string>,\n queryParams?: UserMemoryStatsParams,\n params?: URLSearchParams\n ): Promise<UserMemoryStatsResponse> {\n const url = new URL(`${endpoint}/user_memory_stats`);\n\n if (queryParams) {\n if (queryParams.limit !== undefined) url.searchParams.set('limit', String(queryParams.limit));\n if (queryParams.page !== undefined) url.searchParams.set('page', String(queryParams.page));\n if (queryParams.db_id) url.searchParams.set('db_id', queryParams.db_id);\n if (queryParams.table) url.searchParams.set('table', queryParams.table);\n }\n\n // Use dbId from config if not provided in queryParams\n if (!queryParams?.db_id && dbId) {\n url.searchParams.set('db_id', dbId);\n }\n\n // Merge additional params if provided\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), { headers });\n\n if (!response.ok) {\n if (response.status === 404) {\n return { data: [], meta: { page: 0, limit: 20, total_pages: 0, total_count: 0, search_time_ms: 0 } };\n }\n throw new Error(`Failed to get user memory stats: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Create a new memory\n */\n async createMemory(\n endpoint: string,\n request: CreateMemoryRequest,\n dbId: string,\n headers: Record<string, string>,\n table?: string,\n params?: URLSearchParams\n ): Promise<UserMemory> {\n const url = new URL(`${endpoint}/memories`);\n\n if (dbId) url.searchParams.set('db_id', dbId);\n if (table) url.searchParams.set('table', table);\n\n // Merge additional params if provided\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'POST',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to create memory: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Update an existing memory\n */\n async updateMemory(\n endpoint: string,\n memoryId: string,\n request: UpdateMemoryRequest,\n dbId: string,\n headers: Record<string, string>,\n table?: string,\n params?: URLSearchParams\n ): Promise<UserMemory> {\n const url = new URL(`${endpoint}/memories/${memoryId}`);\n\n if (dbId) url.searchParams.set('db_id', dbId);\n if (table) url.searchParams.set('table', table);\n\n // Merge additional params if provided\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'PATCH',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to update memory: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Delete a single memory\n */\n async deleteMemory(\n endpoint: string,\n memoryId: string,\n dbId: string,\n headers: Record<string, string>,\n userId?: string,\n table?: string,\n params?: URLSearchParams\n ): Promise<void> {\n const url = new URL(`${endpoint}/memories/${memoryId}`);\n\n if (userId) url.searchParams.set('user_id', userId);\n if (dbId) url.searchParams.set('db_id', dbId);\n if (table) url.searchParams.set('table', table);\n\n // Merge additional params if provided\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'DELETE',\n headers,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to delete memory: ${response.statusText}`);\n }\n }\n\n /**\n * Delete multiple memories\n */\n async deleteMultipleMemories(\n endpoint: string,\n request: DeleteMultipleMemoriesRequest,\n dbId: string,\n headers: Record<string, string>,\n table?: string,\n params?: URLSearchParams\n ): Promise<void> {\n const url = new URL(`${endpoint}/memories`);\n\n if (dbId) url.searchParams.set('db_id', dbId);\n if (table) url.searchParams.set('table', table);\n\n // Merge additional params if provided\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'DELETE',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to delete memories: ${response.statusText}`);\n }\n }\n}\n",
10
11
  "import type {\n KnowledgeConfigResponse,\n ContentResponse,\n ContentStatusResponse,\n ContentListResponse,\n ContentListOptions,\n VectorSearchRequest,\n VectorSearchResponse,\n ContentUpdateRequest,\n} from '@rodrigocoliveira/agno-types';\n\n/**\n * Manages knowledge operations\n */\nexport class KnowledgeManager {\n /**\n * Get knowledge configuration\n * GET /knowledge/config\n */\n async getConfig(\n endpoint: string,\n headers: Record<string, string>,\n dbId?: string,\n params?: URLSearchParams\n ): Promise<KnowledgeConfigResponse> {\n const url = new URL(`${endpoint}/knowledge/config`);\n if (dbId) {\n url.searchParams.set('db_id', dbId);\n }\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), { headers });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch knowledge config: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * List all content\n * GET /knowledge/content\n */\n async listContent(\n endpoint: string,\n headers: Record<string, string>,\n options?: ContentListOptions,\n params?: URLSearchParams\n ): Promise<ContentListResponse> {\n const url = new URL(`${endpoint}/knowledge/content`);\n\n if (options?.limit !== undefined) {\n url.searchParams.set('limit', String(options.limit));\n }\n if (options?.page !== undefined) {\n url.searchParams.set('page', String(options.page));\n }\n if (options?.sort_by) {\n url.searchParams.set('sort_by', options.sort_by);\n }\n if (options?.sort_order) {\n url.searchParams.set('sort_order', options.sort_order);\n }\n if (options?.db_id) {\n url.searchParams.set('db_id', options.db_id);\n }\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), { headers });\n\n if (!response.ok) {\n throw new Error(`Failed to list content: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Get content by ID\n * GET /knowledge/content/{content_id}\n */\n async getContent(\n endpoint: string,\n contentId: string,\n headers: Record<string, string>,\n dbId?: string,\n params?: URLSearchParams\n ): Promise<ContentResponse> {\n const url = new URL(\n `${endpoint}/knowledge/content/${encodeURIComponent(contentId)}`\n );\n if (dbId) {\n url.searchParams.set('db_id', dbId);\n }\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), { headers });\n\n if (!response.ok) {\n throw new Error(`Failed to get content: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Get content status\n * GET /knowledge/content/{content_id}/status\n */\n async getContentStatus(\n endpoint: string,\n contentId: string,\n headers: Record<string, string>,\n dbId?: string,\n params?: URLSearchParams\n ): Promise<ContentStatusResponse> {\n const url = new URL(\n `${endpoint}/knowledge/content/${encodeURIComponent(contentId)}/status`\n );\n if (dbId) {\n url.searchParams.set('db_id', dbId);\n }\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), { headers });\n\n if (!response.ok) {\n throw new Error(`Failed to get content status: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Search knowledge base\n * POST /knowledge/search\n */\n async search(\n endpoint: string,\n request: VectorSearchRequest,\n headers: Record<string, string>,\n params?: URLSearchParams\n ): Promise<VectorSearchResponse> {\n const url = new URL(`${endpoint}/knowledge/search`);\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'POST',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to search knowledge: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Upload content\n * POST /knowledge/content\n * Returns 202 Accepted - content is processed asynchronously\n */\n async uploadContent(\n endpoint: string,\n formData: FormData,\n headers: Record<string, string>,\n dbId?: string,\n params?: URLSearchParams\n ): Promise<ContentResponse> {\n const url = new URL(`${endpoint}/knowledge/content`);\n if (dbId) {\n url.searchParams.set('db_id', dbId);\n }\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n // Don't set Content-Type header - browser will set it with boundary for multipart/form-data\n const { 'Content-Type': _, ...headersWithoutContentType } = headers;\n\n const response = await fetch(url.toString(), {\n method: 'POST',\n headers: headersWithoutContentType,\n body: formData,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to upload content: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Update content\n * PATCH /knowledge/content/{content_id}\n */\n async updateContent(\n endpoint: string,\n contentId: string,\n request: ContentUpdateRequest,\n headers: Record<string, string>,\n dbId?: string,\n params?: URLSearchParams\n ): Promise<ContentResponse> {\n const url = new URL(\n `${endpoint}/knowledge/content/${encodeURIComponent(contentId)}`\n );\n if (dbId) {\n url.searchParams.set('db_id', dbId);\n }\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n // Build URL-encoded form data\n const formBody = new URLSearchParams();\n if (request.name !== undefined && request.name !== null) {\n formBody.set('name', request.name);\n }\n if (request.description !== undefined && request.description !== null) {\n formBody.set('description', request.description);\n }\n if (request.metadata !== undefined && request.metadata !== null) {\n formBody.set('metadata', request.metadata);\n }\n if (request.reader_id !== undefined && request.reader_id !== null) {\n formBody.set('reader_id', request.reader_id);\n }\n\n const response = await fetch(url.toString(), {\n method: 'PATCH',\n headers: {\n ...headers,\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: formBody.toString(),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to update content: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Delete all content\n * DELETE /knowledge/content\n */\n async deleteAllContent(\n endpoint: string,\n headers: Record<string, string>,\n dbId?: string,\n params?: URLSearchParams\n ): Promise<void> {\n const url = new URL(`${endpoint}/knowledge/content`);\n if (dbId) {\n url.searchParams.set('db_id', dbId);\n }\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'DELETE',\n headers,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to delete all content: ${response.statusText}`);\n }\n }\n\n /**\n * Delete content by ID\n * DELETE /knowledge/content/{content_id}\n */\n async deleteContent(\n endpoint: string,\n contentId: string,\n headers: Record<string, string>,\n dbId?: string,\n params?: URLSearchParams\n ): Promise<ContentResponse> {\n const url = new URL(\n `${endpoint}/knowledge/content/${encodeURIComponent(contentId)}`\n );\n if (dbId) {\n url.searchParams.set('db_id', dbId);\n }\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'DELETE',\n headers,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to delete content: ${response.statusText}`);\n }\n\n return await response.json();\n }\n}\n",
11
12
  "import type {\n EvalSchema,\n EvalRunsListResponse,\n ListEvalRunsParams,\n ExecuteEvalRequest,\n UpdateEvalRunRequest,\n DeleteEvalRunsRequest,\n} from '@rodrigocoliveira/agno-types';\n\n/**\n * Manages evaluation operations\n */\nexport class EvalManager {\n /**\n * List evaluation runs with optional filtering and pagination\n */\n async listEvalRuns(\n endpoint: string,\n listParams: ListEvalRunsParams,\n headers: Record<string, string>,\n additionalParams?: URLSearchParams\n ): Promise<EvalRunsListResponse> {\n const url = new URL(`${endpoint}/eval-runs`);\n\n // Add list parameters as query params\n if (listParams.agent_id) url.searchParams.set('agent_id', listParams.agent_id);\n if (listParams.team_id) url.searchParams.set('team_id', listParams.team_id);\n if (listParams.workflow_id) url.searchParams.set('workflow_id', listParams.workflow_id);\n if (listParams.model_id) url.searchParams.set('model_id', listParams.model_id);\n if (listParams.type) url.searchParams.set('type', listParams.type);\n if (listParams.limit !== undefined) url.searchParams.set('limit', String(listParams.limit));\n if (listParams.page !== undefined) url.searchParams.set('page', String(listParams.page));\n if (listParams.sort_by) url.searchParams.set('sort_by', listParams.sort_by);\n if (listParams.sort_order) url.searchParams.set('sort_order', listParams.sort_order);\n if (listParams.db_id) url.searchParams.set('db_id', listParams.db_id);\n if (listParams.table) url.searchParams.set('table', listParams.table);\n if (listParams.eval_types) url.searchParams.set('eval_types', listParams.eval_types);\n\n // Merge additional params if provided\n if (additionalParams) {\n additionalParams.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), { headers });\n\n if (!response.ok) {\n if (response.status === 404) {\n return { data: [], meta: { page: 1, limit: 20, total_pages: 0, total_count: 0, search_time_ms: 0 } };\n }\n throw new Error(`Failed to list evaluation runs: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Get a specific evaluation run by ID\n */\n async getEvalRun(\n endpoint: string,\n evalRunId: string,\n dbId?: string,\n table?: string,\n headers?: Record<string, string>,\n additionalParams?: URLSearchParams\n ): Promise<EvalSchema> {\n const url = new URL(`${endpoint}/eval-runs/${encodeURIComponent(evalRunId)}`);\n\n if (dbId) url.searchParams.set('db_id', dbId);\n if (table) url.searchParams.set('table', table);\n\n // Merge additional params if provided\n if (additionalParams) {\n additionalParams.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), { headers });\n\n if (!response.ok) {\n throw new Error(`Failed to get evaluation run: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Execute a new evaluation\n */\n async executeEval(\n endpoint: string,\n request: ExecuteEvalRequest,\n dbId?: string,\n table?: string,\n headers?: Record<string, string>,\n additionalParams?: URLSearchParams\n ): Promise<EvalSchema> {\n const url = new URL(`${endpoint}/eval-runs`);\n\n if (dbId) url.searchParams.set('db_id', dbId);\n if (table) url.searchParams.set('table', table);\n\n // Merge additional params if provided\n if (additionalParams) {\n additionalParams.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'POST',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n const errorBody = await response.text();\n throw new Error(`Failed to execute evaluation: ${response.statusText}. ${errorBody}`);\n }\n\n return await response.json();\n }\n\n /**\n * Update an evaluation run (rename)\n */\n async updateEvalRun(\n endpoint: string,\n evalRunId: string,\n request: UpdateEvalRunRequest,\n dbId?: string,\n table?: string,\n headers?: Record<string, string>,\n additionalParams?: URLSearchParams\n ): Promise<EvalSchema> {\n const url = new URL(`${endpoint}/eval-runs/${encodeURIComponent(evalRunId)}`);\n\n if (dbId) url.searchParams.set('db_id', dbId);\n if (table) url.searchParams.set('table', table);\n\n // Merge additional params if provided\n if (additionalParams) {\n additionalParams.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'PATCH',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to update evaluation run: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Delete multiple evaluation runs\n */\n async deleteEvalRuns(\n endpoint: string,\n request: DeleteEvalRunsRequest,\n dbId?: string,\n table?: string,\n headers?: Record<string, string>,\n additionalParams?: URLSearchParams\n ): Promise<void> {\n const url = new URL(`${endpoint}/eval-runs`);\n\n if (dbId) url.searchParams.set('db_id', dbId);\n if (table) url.searchParams.set('table', table);\n\n // Merge additional params if provided\n if (additionalParams) {\n additionalParams.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'DELETE',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to delete evaluation runs: ${response.statusText}`);\n }\n }\n}\n",
@@ -14,13 +15,13 @@
14
15
  "import type {\n ApprovalResponse,\n ApprovalResolve,\n ApprovalCountResponse,\n ApprovalStatusResponse,\n ApprovalsListResponse,\n ListApprovalsParams,\n} from '@rodrigocoliveira/agno-types';\n\n/**\n * Manages approval operations\n */\nexport class ApprovalManager {\n /**\n * Fetch approvals with filtering and pagination\n */\n async fetchApprovals(\n endpoint: string,\n headers: Record<string, string>,\n queryParams?: ListApprovalsParams,\n params?: URLSearchParams\n ): Promise<ApprovalsListResponse> {\n const url = new URL(`${endpoint}/approvals`);\n\n if (queryParams) {\n if (queryParams.status) url.searchParams.set('status', queryParams.status);\n if (queryParams.source_type) url.searchParams.set('source_type', queryParams.source_type);\n if (queryParams.approval_type) url.searchParams.set('approval_type', queryParams.approval_type);\n if (queryParams.pause_type) url.searchParams.set('pause_type', queryParams.pause_type);\n if (queryParams.agent_id) url.searchParams.set('agent_id', queryParams.agent_id);\n if (queryParams.team_id) url.searchParams.set('team_id', queryParams.team_id);\n if (queryParams.workflow_id) url.searchParams.set('workflow_id', queryParams.workflow_id);\n if (queryParams.user_id) url.searchParams.set('user_id', queryParams.user_id);\n if (queryParams.schedule_id) url.searchParams.set('schedule_id', queryParams.schedule_id);\n if (queryParams.run_id) url.searchParams.set('run_id', queryParams.run_id);\n if (queryParams.limit !== undefined) url.searchParams.set('limit', String(queryParams.limit));\n if (queryParams.page !== undefined) url.searchParams.set('page', String(queryParams.page));\n }\n\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), { headers });\n\n if (!response.ok) {\n if (response.status === 404) {\n return {\n data: [],\n meta: { page: 1, limit: 100, total_pages: 0, total_count: 0, search_time_ms: 0 },\n };\n }\n throw new Error(`Failed to fetch approvals: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Get approval count\n */\n async getApprovalCount(\n endpoint: string,\n headers: Record<string, string>,\n userId?: string,\n params?: URLSearchParams\n ): Promise<ApprovalCountResponse> {\n const url = new URL(`${endpoint}/approvals/count`);\n\n if (userId) url.searchParams.set('user_id', userId);\n\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), { headers });\n\n if (!response.ok) {\n throw new Error(`Failed to get approval count: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Get approval status\n */\n async getApprovalStatus(\n endpoint: string,\n approvalId: string,\n headers: Record<string, string>,\n params?: URLSearchParams\n ): Promise<ApprovalStatusResponse> {\n const url = new URL(`${endpoint}/approvals/${encodeURIComponent(approvalId)}/status`);\n\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), { headers });\n\n if (!response.ok) {\n throw new Error(`Failed to get approval status: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Get a specific approval by ID\n */\n async getApprovalById(\n endpoint: string,\n approvalId: string,\n headers: Record<string, string>,\n params?: URLSearchParams\n ): Promise<ApprovalResponse> {\n const url = new URL(`${endpoint}/approvals/${encodeURIComponent(approvalId)}`);\n\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), { headers });\n\n if (!response.ok) {\n throw new Error(`Failed to get approval: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Resolve an approval (approve or reject)\n */\n async resolveApproval(\n endpoint: string,\n approvalId: string,\n request: ApprovalResolve,\n headers: Record<string, string>,\n params?: URLSearchParams\n ): Promise<ApprovalResponse> {\n const url = new URL(`${endpoint}/approvals/${encodeURIComponent(approvalId)}/resolve`);\n\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'POST',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to resolve approval: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Delete an approval\n */\n async deleteApproval(\n endpoint: string,\n approvalId: string,\n headers: Record<string, string>,\n params?: URLSearchParams\n ): Promise<void> {\n const url = new URL(`${endpoint}/approvals/${encodeURIComponent(approvalId)}`);\n\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'DELETE',\n headers,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to delete approval: ${response.statusText}`);\n }\n }\n}\n",
15
16
  "import type {\n ComponentResponse,\n ComponentCreate,\n ComponentUpdate,\n ComponentConfigResponse,\n ConfigCreate,\n ConfigUpdate,\n ComponentsListResponse,\n ListComponentsParams,\n} from '@rodrigocoliveira/agno-types';\n\n/**\n * Manages component and config operations\n */\nexport class ComponentManager {\n /**\n * Fetch components with filtering and pagination\n */\n async fetchComponents(\n endpoint: string,\n headers: Record<string, string>,\n queryParams?: ListComponentsParams,\n params?: URLSearchParams\n ): Promise<ComponentsListResponse> {\n const url = new URL(`${endpoint}/components`);\n\n if (queryParams) {\n if (queryParams.component_type) url.searchParams.set('component_type', queryParams.component_type);\n if (queryParams.limit !== undefined) url.searchParams.set('limit', String(queryParams.limit));\n if (queryParams.page !== undefined) url.searchParams.set('page', String(queryParams.page));\n }\n\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), { headers });\n\n if (!response.ok) {\n if (response.status === 404) {\n return { data: [], meta: { page: 1, limit: 100, total_pages: 0, total_count: 0, search_time_ms: 0 } };\n }\n throw new Error(`Failed to fetch components: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Create a new component\n */\n async createComponent(\n endpoint: string,\n request: ComponentCreate,\n headers: Record<string, string>,\n params?: URLSearchParams\n ): Promise<ComponentResponse> {\n const url = new URL(`${endpoint}/components`);\n\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'POST',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to create component: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Get a specific component by ID\n */\n async getComponentById(\n endpoint: string,\n componentId: string,\n headers: Record<string, string>,\n params?: URLSearchParams\n ): Promise<ComponentResponse> {\n const url = new URL(`${endpoint}/components/${encodeURIComponent(componentId)}`);\n\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), { headers });\n\n if (!response.ok) {\n throw new Error(`Failed to get component: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Update an existing component\n */\n async updateComponent(\n endpoint: string,\n componentId: string,\n request: ComponentUpdate,\n headers: Record<string, string>,\n params?: URLSearchParams\n ): Promise<ComponentResponse> {\n const url = new URL(`${endpoint}/components/${encodeURIComponent(componentId)}`);\n\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'PATCH',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to update component: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Delete a component\n */\n async deleteComponent(\n endpoint: string,\n componentId: string,\n headers: Record<string, string>,\n params?: URLSearchParams\n ): Promise<void> {\n const url = new URL(`${endpoint}/components/${encodeURIComponent(componentId)}`);\n\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'DELETE',\n headers,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to delete component: ${response.statusText}`);\n }\n }\n\n /**\n * Fetch all config versions for a component\n */\n async fetchComponentConfigs(\n endpoint: string,\n componentId: string,\n headers: Record<string, string>,\n params?: URLSearchParams\n ): Promise<ComponentConfigResponse[]> {\n const url = new URL(`${endpoint}/components/${encodeURIComponent(componentId)}/configs`);\n\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), { headers });\n\n if (!response.ok) {\n if (response.status === 404) {\n return [];\n }\n throw new Error(`Failed to fetch component configs: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Create a new config version for a component\n */\n async createComponentConfig(\n endpoint: string,\n componentId: string,\n request: ConfigCreate,\n headers: Record<string, string>,\n params?: URLSearchParams\n ): Promise<ComponentConfigResponse> {\n const url = new URL(`${endpoint}/components/${encodeURIComponent(componentId)}/configs`);\n\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'POST',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to create component config: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Get the current active config for a component\n */\n async getCurrentConfig(\n endpoint: string,\n componentId: string,\n headers: Record<string, string>,\n params?: URLSearchParams\n ): Promise<ComponentConfigResponse> {\n const url = new URL(`${endpoint}/components/${encodeURIComponent(componentId)}/configs/current`);\n\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), { headers });\n\n if (!response.ok) {\n throw new Error(`Failed to get current config: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Get a specific config version\n */\n async getConfigByVersion(\n endpoint: string,\n componentId: string,\n version: number,\n headers: Record<string, string>,\n params?: URLSearchParams\n ): Promise<ComponentConfigResponse> {\n const url = new URL(`${endpoint}/components/${encodeURIComponent(componentId)}/configs/${version}`);\n\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), { headers });\n\n if (!response.ok) {\n throw new Error(`Failed to get config version: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Update a draft config version\n */\n async updateConfig(\n endpoint: string,\n componentId: string,\n version: number,\n request: ConfigUpdate,\n headers: Record<string, string>,\n params?: URLSearchParams\n ): Promise<ComponentConfigResponse> {\n const url = new URL(`${endpoint}/components/${encodeURIComponent(componentId)}/configs/${version}`);\n\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'PATCH',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to update config: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n /**\n * Delete a draft config version\n */\n async deleteConfig(\n endpoint: string,\n componentId: string,\n version: number,\n headers: Record<string, string>,\n params?: URLSearchParams\n ): Promise<void> {\n const url = new URL(`${endpoint}/components/${encodeURIComponent(componentId)}/configs/${version}`);\n\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'DELETE',\n headers,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to delete config: ${response.statusText}`);\n }\n }\n\n /**\n * Set a config version as the current active config\n */\n async setCurrentConfig(\n endpoint: string,\n componentId: string,\n version: number,\n headers: Record<string, string>,\n params?: URLSearchParams\n ): Promise<ComponentConfigResponse> {\n const url = new URL(`${endpoint}/components/${encodeURIComponent(componentId)}/configs/${version}/set-current`);\n\n if (params) {\n params.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'POST',\n headers,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to set current config: ${response.statusText}`);\n }\n\n return await response.json();\n }\n}\n",
16
17
  "import type { CustomEventData } from '@rodrigocoliveira/agno-types';\n\n/**\n * Tracks in-flight session_state refreshes so that stale responses (from a\n * previously-selected session or a previous run) do not overwrite the cache\n * after the user has moved on.\n *\n * Uses an epoch counter instead of an AbortController because the underlying\n * fetch (SessionManager.getSessionById) doesn't currently accept a signal —\n * this is a cheaper way to get the same correctness guarantee without touching\n * the shared SessionManager API.\n */\nexport class SessionStateManager {\n private state: Record<string, unknown> | null = null;\n private epoch = 0;\n\n /** Current cached state. */\n get(): Record<string, unknown> | null {\n return this.state;\n }\n\n /**\n * Replace the cached state. Returns `true` if the value changed (shallow\n * reference compare) so the caller can decide whether to emit.\n */\n set(next: Record<string, unknown> | null | undefined): boolean {\n const value = next ?? null;\n if (value === this.state) return false;\n this.state = value;\n return true;\n }\n\n /** Shallow-merge a partial into the cached state. */\n merge(partial: Record<string, unknown>): boolean {\n const base = this.state ?? {};\n const next = { ...base, ...partial };\n this.state = next;\n return true;\n }\n\n /** Clear the cache. Used on session switch or clearMessages(). */\n clear(): boolean {\n if (this.state === null) return false;\n this.state = null;\n return true;\n }\n\n /**\n * Bump the epoch. Call this whenever the \"owning context\" changes —\n * session switch, clearMessages, or anything that makes older refresh\n * responses irrelevant. Returns the new epoch for the caller to remember.\n */\n invalidate(): number {\n this.epoch += 1;\n return this.epoch;\n }\n\n /** Snapshot the current epoch. Pair with `isEpochCurrent` after an async call. */\n currentEpoch(): number {\n return this.epoch;\n }\n\n /** Whether a previously-snapshot epoch is still the active one. */\n isEpochCurrent(snapshot: number): boolean {\n return this.epoch === snapshot;\n }\n\n /**\n * Apply the user's `extractSessionStateFromCustomEvent` setting to a\n * CustomEvent chunk. Returns the state payload to cache, or null if the\n * event should be ignored.\n */\n extractFromCustomEvent(\n event: CustomEventData,\n extractor:\n | boolean\n | ((event: CustomEventData) => Record<string, unknown> | null | undefined)\n | undefined\n ): Record<string, unknown> | null {\n if (extractor === false) return null;\n\n if (typeof extractor === 'function') {\n const result = extractor(event);\n return result ?? null;\n }\n\n // Default (extractor === true or undefined): pick up the `session_state`\n // field if present on the payload.\n const candidate = (event as unknown as Record<string, unknown>).session_state;\n if (candidate && typeof candidate === 'object') {\n return candidate as Record<string, unknown>;\n }\n return null;\n }\n}\n",
17
- "import type {\n RunEvent,\n RunResponse,\n RunResponseContent,\n ChatMessage,\n ToolCall,\n} from '@rodrigocoliveira/agno-types';\nimport { RunEvent as RunEventEnum } from '@rodrigocoliveira/agno-types';\nimport { getJsonMarkdown } from '../utils/json-markdown';\n\n/**\n * Processes a new tool call and adds/updates it in the message\n */\nexport function processToolCall(\n toolCall: ToolCall,\n prevToolCalls: ToolCall[] = []\n): ToolCall[] {\n const toolCallId =\n toolCall.tool_call_id || `${toolCall.tool_name}-${toolCall.created_at}`;\n\n const existingToolCallIndex = prevToolCalls.findIndex(\n (tc) =>\n (tc.tool_call_id && tc.tool_call_id === toolCall.tool_call_id) ||\n (!tc.tool_call_id &&\n toolCall.tool_name &&\n toolCall.created_at &&\n `${tc.tool_name}-${tc.created_at}` === toolCallId)\n );\n\n if (existingToolCallIndex >= 0) {\n const updatedToolCalls = [...prevToolCalls];\n updatedToolCalls[existingToolCallIndex] = {\n ...updatedToolCalls[existingToolCallIndex],\n ...toolCall,\n };\n return updatedToolCalls;\n } else {\n return [...prevToolCalls, toolCall];\n }\n}\n\n/**\n * Processes tool calls from a chunk\n */\nexport function processChunkToolCalls(\n chunk: RunResponseContent | RunResponse,\n existingToolCalls: ToolCall[] = []\n): ToolCall[] {\n let updatedToolCalls = [...existingToolCalls];\n\n if (chunk.tool) {\n updatedToolCalls = processToolCall(chunk.tool, updatedToolCalls);\n }\n\n if (chunk.tools && chunk.tools.length > 0) {\n for (const toolCall of chunk.tools) {\n updatedToolCalls = processToolCall(toolCall, updatedToolCalls);\n }\n }\n\n return updatedToolCalls;\n}\n\n/**\n * Event processor that handles different RunEvent types\n */\nexport class EventProcessor {\n private lastContent = '';\n\n /**\n * Process a chunk and update the last message\n */\n processChunk(\n chunk: RunResponse,\n lastMessage: ChatMessage | undefined\n ): ChatMessage | undefined {\n if (!lastMessage || lastMessage.role !== 'agent') {\n return lastMessage;\n }\n\n const event = chunk.event as RunEvent;\n const updatedMessage = { ...lastMessage };\n\n switch (event) {\n case RunEventEnum.RunStarted:\n case RunEventEnum.TeamRunStarted:\n case RunEventEnum.ReasoningStarted:\n case RunEventEnum.TeamReasoningStarted:\n // These events are handled at the client level for session management\n break;\n\n case RunEventEnum.ToolCallStarted:\n case RunEventEnum.TeamToolCallStarted:\n case RunEventEnum.ToolCallCompleted:\n case RunEventEnum.TeamToolCallCompleted:\n updatedMessage.tool_calls = processChunkToolCalls(\n chunk,\n lastMessage.tool_calls\n );\n break;\n\n case RunEventEnum.RunContent:\n case RunEventEnum.TeamRunContent:\n if (typeof chunk.content === 'string') {\n const uniqueContent = chunk.content.replace(this.lastContent, '');\n updatedMessage.content =\n (updatedMessage.content as string) + uniqueContent;\n this.lastContent = chunk.content;\n } else if (\n typeof chunk.content !== 'string' &&\n chunk.content !== null\n ) {\n const jsonBlock = getJsonMarkdown(chunk.content);\n updatedMessage.content = (updatedMessage.content as string) + jsonBlock;\n this.lastContent = jsonBlock;\n }\n\n // Handle tool calls streaming\n updatedMessage.tool_calls = processChunkToolCalls(\n chunk,\n lastMessage.tool_calls\n );\n\n // Handle extra data\n if (chunk.extra_data?.reasoning_steps) {\n updatedMessage.extra_data = {\n ...updatedMessage.extra_data,\n reasoning_steps: chunk.extra_data.reasoning_steps,\n };\n }\n\n if (chunk.extra_data?.references) {\n updatedMessage.extra_data = {\n ...updatedMessage.extra_data,\n references: chunk.extra_data.references,\n };\n }\n\n // Note: UI components are now stored in tool_calls array, not extra_data\n // This section is preserved for backward compatibility but doesn't update extra_data\n\n updatedMessage.created_at = chunk.created_at ?? lastMessage.created_at;\n\n if (chunk.images) {\n updatedMessage.images = chunk.images;\n }\n if (chunk.videos) {\n updatedMessage.videos = chunk.videos;\n }\n if (chunk.audio) {\n updatedMessage.audio = chunk.audio;\n }\n\n // Handle response audio transcript\n if (\n chunk.response_audio?.transcript &&\n typeof chunk.response_audio.transcript === 'string'\n ) {\n const transcript = chunk.response_audio.transcript;\n updatedMessage.response_audio = {\n ...updatedMessage.response_audio,\n transcript:\n (updatedMessage.response_audio?.transcript || '') + transcript,\n };\n }\n break;\n\n case RunEventEnum.ReasoningStep:\n case RunEventEnum.TeamReasoningStep:\n const existingSteps = lastMessage.extra_data?.reasoning_steps ?? [];\n const incomingSteps = chunk.extra_data?.reasoning_steps ?? [];\n updatedMessage.extra_data = {\n ...updatedMessage.extra_data,\n reasoning_steps: [...existingSteps, ...incomingSteps],\n };\n break;\n\n case RunEventEnum.ReasoningCompleted:\n case RunEventEnum.TeamReasoningCompleted:\n if (chunk.extra_data?.reasoning_steps) {\n updatedMessage.extra_data = {\n ...updatedMessage.extra_data,\n reasoning_steps: chunk.extra_data.reasoning_steps,\n };\n }\n break;\n\n case RunEventEnum.RunCompleted:\n case RunEventEnum.TeamRunCompleted:\n let updatedContent: string;\n if (typeof chunk.content === 'string') {\n updatedContent = chunk.content;\n } else {\n try {\n updatedContent = JSON.stringify(chunk.content);\n } catch {\n updatedContent = 'Error parsing response';\n }\n }\n\n updatedMessage.content = updatedContent;\n updatedMessage.tool_calls = processChunkToolCalls(\n chunk,\n lastMessage.tool_calls\n );\n updatedMessage.images = chunk.images ?? lastMessage.images;\n updatedMessage.videos = chunk.videos ?? lastMessage.videos;\n updatedMessage.response_audio = chunk.response_audio;\n updatedMessage.created_at = chunk.created_at ?? lastMessage.created_at;\n updatedMessage.extra_data = {\n reasoning_steps:\n chunk.extra_data?.reasoning_steps ??\n lastMessage.extra_data?.reasoning_steps,\n references:\n chunk.extra_data?.references ?? lastMessage.extra_data?.references,\n };\n break;\n\n case RunEventEnum.UpdatingMemory:\n case RunEventEnum.TeamMemoryUpdateStarted:\n case RunEventEnum.TeamMemoryUpdateCompleted:\n // No-op for now\n break;\n\n case RunEventEnum.RunPaused:\n // Run paused for HITL - handled at client level\n // Don't update the message, just let the client emit run:paused event\n case RunEventEnum.CustomEvent:\n // Custom events are passed through without modifying message state.\n // They are handled at the client level via the 'custom:event' emission.\n // Tool-emitted custom data is available in the raw event payload.\n break;\n\n case RunEventEnum.RunCancelled:\n // User-initiated cancellation - mark as cancelled, not error\n updatedMessage.cancelled = true;\n break;\n\n case RunEventEnum.RunError:\n case RunEventEnum.TeamRunError:\n case RunEventEnum.TeamRunCancelled:\n updatedMessage.streamingError = true;\n break;\n }\n\n return updatedMessage;\n }\n\n /**\n * Reset the processor state (e.g., between messages)\n */\n reset() {\n this.lastContent = '';\n }\n}\n",
18
+ "import type {\n RunEvent,\n RunResponse,\n RunResponseContent,\n ChatMessage,\n ToolCall,\n ReasoningSteps,\n} from '@rodrigocoliveira/agno-types';\nimport { RunEvent as RunEventEnum } from '@rodrigocoliveira/agno-types';\nimport { getJsonMarkdown } from '../utils/json-markdown';\nimport { parseToolArgs } from '../utils/parse-tool-arg';\n\n/**\n * Processes a new tool call and adds/updates it in the message\n */\nexport function processToolCall(\n toolCall: ToolCall,\n prevToolCalls: ToolCall[] = []\n): ToolCall[] {\n // Coerce Python-repr tool_args at the parser boundary\n // (workaround for agno#8007 / agno-client#11).\n const normalized: ToolCall = toolCall.tool_args\n ? { ...toolCall, tool_args: parseToolArgs(toolCall.tool_args) }\n : toolCall;\n\n const toolCallId =\n normalized.tool_call_id || `${normalized.tool_name}-${normalized.created_at}`;\n\n const existingToolCallIndex = prevToolCalls.findIndex(\n (tc) =>\n (tc.tool_call_id && tc.tool_call_id === normalized.tool_call_id) ||\n (!tc.tool_call_id &&\n normalized.tool_name &&\n normalized.created_at &&\n `${tc.tool_name}-${tc.created_at}` === toolCallId)\n );\n\n if (existingToolCallIndex >= 0) {\n const updatedToolCalls = [...prevToolCalls];\n updatedToolCalls[existingToolCallIndex] = {\n ...updatedToolCalls[existingToolCallIndex],\n ...normalized,\n };\n return updatedToolCalls;\n } else {\n return [...prevToolCalls, normalized];\n }\n}\n\n/**\n * Processes tool calls from a chunk\n */\nexport function processChunkToolCalls(\n chunk: RunResponseContent | RunResponse,\n existingToolCalls: ToolCall[] = []\n): ToolCall[] {\n let updatedToolCalls = [...existingToolCalls];\n\n if (chunk.tool) {\n updatedToolCalls = processToolCall(chunk.tool, updatedToolCalls);\n }\n\n if (chunk.tools && chunk.tools.length > 0) {\n for (const toolCall of chunk.tools) {\n updatedToolCalls = processToolCall(toolCall, updatedToolCalls);\n }\n }\n\n return updatedToolCalls;\n}\n\n/**\n * Event processor that handles different RunEvent types\n */\nexport class EventProcessor {\n private lastContent = '';\n\n /**\n * Process a chunk and update the last message\n */\n processChunk(\n chunk: RunResponse,\n lastMessage: ChatMessage | undefined\n ): ChatMessage | undefined {\n if (!lastMessage || lastMessage.role !== 'agent') {\n return lastMessage;\n }\n\n const event = chunk.event as RunEvent;\n const updatedMessage = { ...lastMessage };\n\n switch (event) {\n case RunEventEnum.RunStarted:\n case RunEventEnum.TeamRunStarted:\n case RunEventEnum.ReasoningStarted:\n case RunEventEnum.TeamReasoningStarted:\n // These events are handled at the client level for session management\n break;\n\n case RunEventEnum.ToolCallStarted:\n case RunEventEnum.TeamToolCallStarted:\n case RunEventEnum.ToolCallCompleted:\n case RunEventEnum.TeamToolCallCompleted:\n updatedMessage.tool_calls = processChunkToolCalls(\n chunk,\n lastMessage.tool_calls\n );\n break;\n\n case RunEventEnum.RunContent:\n case RunEventEnum.TeamRunContent:\n if (typeof chunk.content === 'string') {\n const uniqueContent = chunk.content.replace(this.lastContent, '');\n updatedMessage.content =\n (updatedMessage.content as string) + uniqueContent;\n this.lastContent = chunk.content;\n } else if (\n typeof chunk.content !== 'string' &&\n chunk.content !== null\n ) {\n const jsonBlock = getJsonMarkdown(chunk.content);\n updatedMessage.content = (updatedMessage.content as string) + jsonBlock;\n this.lastContent = jsonBlock;\n }\n\n // Handle tool calls streaming\n updatedMessage.tool_calls = processChunkToolCalls(\n chunk,\n lastMessage.tool_calls\n );\n\n // Handle extra data\n if (chunk.extra_data?.reasoning_steps) {\n updatedMessage.extra_data = {\n ...updatedMessage.extra_data,\n reasoning_steps: chunk.extra_data.reasoning_steps,\n };\n }\n\n if (chunk.extra_data?.references) {\n updatedMessage.extra_data = {\n ...updatedMessage.extra_data,\n references: chunk.extra_data.references,\n };\n }\n\n // Note: UI components are now stored in tool_calls array, not extra_data\n // This section is preserved for backward compatibility but doesn't update extra_data\n\n updatedMessage.created_at = chunk.created_at ?? lastMessage.created_at;\n\n if (chunk.images) {\n updatedMessage.images = chunk.images;\n }\n if (chunk.videos) {\n updatedMessage.videos = chunk.videos;\n }\n if (chunk.audio) {\n updatedMessage.audio = chunk.audio;\n }\n\n // Handle response audio transcript\n if (\n chunk.response_audio?.transcript &&\n typeof chunk.response_audio.transcript === 'string'\n ) {\n const transcript = chunk.response_audio.transcript;\n updatedMessage.response_audio = {\n ...updatedMessage.response_audio,\n transcript:\n (updatedMessage.response_audio?.transcript || '') + transcript,\n };\n }\n break;\n\n case RunEventEnum.ReasoningStep:\n case RunEventEnum.TeamReasoningStep: {\n const existingSteps = lastMessage.extra_data?.reasoning_steps ?? [];\n\n // Agno backend emits one ReasoningStep per event with the step in\n // `chunk.content`. Keep `extra_data.reasoning_steps` as a fallback for\n // backend variants that surface an accumulated list there.\n const incomingSteps =\n chunk.extra_data?.reasoning_steps ??\n (chunk.content && typeof chunk.content === 'object'\n ? [chunk.content as ReasoningSteps]\n : []);\n\n updatedMessage.extra_data = {\n ...updatedMessage.extra_data,\n reasoning_steps: [...existingSteps, ...incomingSteps],\n };\n break;\n }\n\n case RunEventEnum.ReasoningCompleted:\n case RunEventEnum.TeamReasoningCompleted:\n if (chunk.extra_data?.reasoning_steps) {\n updatedMessage.extra_data = {\n ...updatedMessage.extra_data,\n reasoning_steps: chunk.extra_data.reasoning_steps,\n };\n }\n break;\n\n case RunEventEnum.RunCompleted:\n case RunEventEnum.TeamRunCompleted:\n let updatedContent: string;\n if (typeof chunk.content === 'string') {\n updatedContent = chunk.content;\n } else {\n try {\n updatedContent = JSON.stringify(chunk.content);\n } catch {\n updatedContent = 'Error parsing response';\n }\n }\n\n updatedMessage.content = updatedContent;\n updatedMessage.tool_calls = processChunkToolCalls(\n chunk,\n lastMessage.tool_calls\n );\n updatedMessage.images = chunk.images ?? lastMessage.images;\n updatedMessage.videos = chunk.videos ?? lastMessage.videos;\n updatedMessage.response_audio = chunk.response_audio;\n updatedMessage.created_at = chunk.created_at ?? lastMessage.created_at;\n updatedMessage.extra_data = {\n reasoning_steps:\n chunk.extra_data?.reasoning_steps ??\n lastMessage.extra_data?.reasoning_steps,\n references:\n chunk.extra_data?.references ?? lastMessage.extra_data?.references,\n };\n break;\n\n case RunEventEnum.UpdatingMemory:\n case RunEventEnum.TeamMemoryUpdateStarted:\n case RunEventEnum.TeamMemoryUpdateCompleted:\n // No-op for now\n break;\n\n case RunEventEnum.RunPaused:\n // Run paused for HITL - handled at client level\n // Don't update the message, just let the client emit run:paused event\n case RunEventEnum.CustomEvent:\n // Custom events are passed through without modifying message state.\n // They are handled at the client level via the 'custom:event' emission.\n // Tool-emitted custom data is available in the raw event payload.\n break;\n\n case RunEventEnum.RunCancelled:\n // User-initiated cancellation - mark as cancelled, not error\n updatedMessage.cancelled = true;\n break;\n\n case RunEventEnum.RunError:\n case RunEventEnum.TeamRunError:\n case RunEventEnum.TeamRunCancelled:\n updatedMessage.streamingError = true;\n break;\n }\n\n return updatedMessage;\n }\n\n /**\n * Reset the processor state (e.g., between messages)\n */\n reset() {\n this.lastContent = '';\n }\n}\n",
18
19
  "/**\n * Converts a JSON object to markdown code block\n */\nexport function getJsonMarkdown(content: unknown): string {\n try {\n const jsonString = JSON.stringify(content, null, 2);\n return `\\`\\`\\`json\\n${jsonString}\\n\\`\\`\\``;\n } catch {\n return '```\\nError formatting JSON\\n```';\n }\n}\n",
19
20
  "import type { RunResponseContent } from '@rodrigocoliveira/agno-types';\n\n/**\n * Detects if the incoming data is in the legacy format (direct RunResponseContent)\n */\nfunction isLegacyFormat(data: RunResponseContent): boolean {\n return (\n typeof data === 'object' &&\n data !== null &&\n 'event' in data &&\n !('data' in data) &&\n typeof data.event === 'string'\n );\n}\n\ninterface NewFormatData {\n event: string;\n data: string | Record<string, unknown>;\n}\n\ntype LegacyEventFormat = RunResponseContent & { event: string };\n\n/**\n * Converts new format to legacy format for compatibility\n */\nfunction convertNewFormatToLegacy(\n newFormatData: NewFormatData\n): LegacyEventFormat {\n const { event, data } = newFormatData;\n\n let parsedData: Record<string, unknown>;\n if (typeof data === 'string') {\n try {\n parsedData = JSON.parse(data);\n } catch {\n parsedData = {};\n }\n } else {\n parsedData = data;\n }\n\n return {\n event,\n ...parsedData,\n } as LegacyEventFormat;\n}\n\n/**\n * Processes a single JSON chunk\n */\nfunction processChunk(\n chunk: RunResponseContent,\n onChunk: (chunk: RunResponseContent) => void\n) {\n onChunk(chunk);\n}\n\n/**\n * Parses a string buffer to extract complete JSON objects\n * Handles incremental streaming with partial JSON accumulation\n */\nexport function parseBuffer(\n buffer: string,\n onChunk: (chunk: RunResponseContent) => void\n): string {\n let currentIndex = 0;\n let jsonStartIndex = buffer.indexOf('{', currentIndex);\n\n while (jsonStartIndex !== -1 && jsonStartIndex < buffer.length) {\n let braceCount = 0;\n let inString = false;\n let escapeNext = false;\n let jsonEndIndex = -1;\n let i = jsonStartIndex;\n\n for (; i < buffer.length; i++) {\n const char = buffer[i];\n\n if (inString) {\n if (escapeNext) {\n escapeNext = false;\n } else if (char === '\\\\') {\n escapeNext = true;\n } else if (char === '\"') {\n inString = false;\n }\n } else {\n if (char === '\"') {\n inString = true;\n } else if (char === '{') {\n braceCount++;\n } else if (char === '}') {\n braceCount--;\n if (braceCount === 0) {\n jsonEndIndex = i;\n break;\n }\n }\n }\n }\n\n if (jsonEndIndex !== -1) {\n const jsonString = buffer.slice(jsonStartIndex, jsonEndIndex + 1);\n\n try {\n const parsed = JSON.parse(jsonString);\n\n if (isLegacyFormat(parsed)) {\n processChunk(parsed, onChunk);\n } else {\n const legacyChunk = convertNewFormatToLegacy(parsed);\n processChunk(legacyChunk, onChunk);\n }\n } catch (error) {\n // Log parse errors in development mode for debugging\n if (typeof process !== 'undefined' && process.env?.NODE_ENV === 'development') {\n console.error('Failed to parse JSON chunk:', {\n error,\n chunk: jsonString.substring(0, 100) + (jsonString.length > 100 ? '...' : ''),\n position: jsonStartIndex,\n });\n }\n\n // Throw error for very large unparseable chunks (indicates real problem)\n if (jsonString.length > 10000) {\n throw new Error(`Failed to parse large JSON chunk at position ${jsonStartIndex}`);\n }\n\n jsonStartIndex = buffer.indexOf('{', jsonStartIndex + 1);\n continue;\n }\n\n currentIndex = jsonEndIndex + 1;\n buffer = buffer.slice(currentIndex).trim();\n currentIndex = 0;\n jsonStartIndex = buffer.indexOf('{', currentIndex);\n } else {\n break;\n }\n }\n\n return buffer;\n}\n\n/**\n * Streams a response from the API and processes JSON chunks\n */\nexport async function streamResponse(options: {\n apiUrl: string;\n headers?: Record<string, string>;\n params?: URLSearchParams;\n requestBody: FormData | Record<string, unknown>;\n onChunk: (chunk: RunResponseContent) => void;\n onError: (error: Error) => void;\n onComplete: () => void;\n signal: AbortSignal;\n}): Promise<void> {\n const {\n apiUrl,\n headers = {},\n params,\n requestBody,\n onChunk,\n onError,\n onComplete,\n signal,\n } = options;\n\n let buffer = '';\n\n // Append query parameters to URL if provided\n const finalUrl = params && params.toString()\n ? `${apiUrl}?${params.toString()}`\n : apiUrl;\n\n try {\n const response = await fetch(finalUrl, {\n method: 'POST',\n headers: {\n ...(!(requestBody instanceof FormData) && {\n 'Content-Type': 'application/json',\n }),\n ...headers,\n },\n body:\n requestBody instanceof FormData\n ? requestBody\n : JSON.stringify(requestBody),\n signal,\n });\n\n if (!response.ok) {\n let errorMessage = `HTTP ${response.status}: ${response.statusText}`;\n\n const contentType = response.headers.get('content-type');\n if (contentType?.includes('application/json')) {\n try {\n const errorData = await response.json();\n errorMessage = errorData.detail || errorData.message || errorMessage;\n } catch {\n // Fallback to status text if JSON parsing fails\n }\n }\n\n const error = new Error(errorMessage);\n // Attach status code to error for identification (e.g., 401 handling)\n (error as Error & { status?: number }).status = response.status;\n throw error;\n }\n\n if (!response.body) {\n throw new Error('No response body');\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n\n const processStream = async (): Promise<void> => {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n buffer = parseBuffer(buffer, onChunk);\n onComplete();\n return;\n }\n\n buffer += decoder.decode(value, { stream: true });\n buffer = parseBuffer(buffer, onChunk);\n }\n };\n\n await processStream();\n } catch (error) {\n // Handle abort gracefully without calling onError\n if (error instanceof Error && error.name === 'AbortError') {\n return;\n }\n\n if (typeof error === 'object' && error !== null && 'detail' in error) {\n onError(new Error(String(error.detail)));\n } else {\n onError(new Error(String(error)));\n }\n }\n}\n",
20
21
  "/**\n * Logger utility with sensitive data sanitization\n * Only logs in development mode to prevent auth token exposure\n */\n\nconst SENSITIVE_KEYS = ['authToken', 'Authorization', 'token', 'password', 'apiKey'];\n\n/**\n * Sanitize an object by redacting sensitive fields\n */\nfunction sanitizeObject(obj: unknown): unknown {\n if (obj === null || obj === undefined) {\n return obj;\n }\n\n if (typeof obj !== 'object') {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(sanitizeObject);\n }\n\n const sanitized: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n if (SENSITIVE_KEYS.some((sensitiveKey) =>\n key.toLowerCase().includes(sensitiveKey.toLowerCase())\n )) {\n sanitized[key] = value ? '[REDACTED]' : undefined;\n } else if (typeof value === 'object' && value !== null) {\n sanitized[key] = sanitizeObject(value);\n } else {\n sanitized[key] = value;\n }\n }\n\n return sanitized;\n}\n\n/**\n * Check if we're in development mode\n */\nfunction isDevelopment(): boolean {\n return typeof process !== 'undefined' && process.env?.NODE_ENV === 'development';\n}\n\n/**\n * Logger class with sanitization and environment-aware logging\n */\nexport class Logger {\n /**\n * Log debug information (only in development)\n */\n static debug(message: string, data?: unknown): void {\n if (isDevelopment()) {\n const sanitized = data ? sanitizeObject(data) : undefined;\n console.debug(`[DEBUG] ${message}`, sanitized || '');\n }\n }\n\n /**\n * Log informational messages (only in development)\n */\n static info(message: string, data?: unknown): void {\n if (isDevelopment()) {\n const sanitized = data ? sanitizeObject(data) : undefined;\n console.info(`[INFO] ${message}`, sanitized || '');\n }\n }\n\n /**\n * Log warnings (always logs)\n */\n static warn(message: string, data?: unknown): void {\n const sanitized = data ? sanitizeObject(data) : undefined;\n console.warn(`[WARN] ${message}`, sanitized || '');\n }\n\n /**\n * Log errors (always logs)\n */\n static error(message: string, data?: unknown): void {\n const sanitized = data ? sanitizeObject(data) : undefined;\n console.error(`[ERROR] ${message}`, sanitized || '');\n }\n}\n",
21
- "/**\n * @rodrigocoliveira/agno-client\n * Core client library for Agno agents with streaming support\n */\n\n// Main client\nexport { AgnoClient } from './client';\n\n// Utilities\nexport { Logger } from './utils/logger';\n\n// Traces manager types\nexport type {\n PaginatedTracesResult,\n PaginatedTraceSessionStatsResult,\n} from './managers/traces-manager';\n\n// Re-export types from @rodrigocoliveira/agno-types\nexport type {\n AgnoClientConfig,\n ChatMessage,\n ToolCall,\n RunResponse,\n RunResponseContent,\n SessionEntry,\n AgentDetails,\n TeamDetails,\n ClientState,\n MessageExtraData,\n ImageData,\n VideoData,\n AudioData,\n ResponseAudioData,\n // Memory types\n UserMemory,\n MemoriesListResponse,\n ListMemoriesParams,\n CreateMemoryRequest,\n UpdateMemoryRequest,\n DeleteMultipleMemoriesRequest,\n UserMemoryStats,\n UserMemoryStatsResponse,\n UserMemoryStatsParams,\n // Knowledge API types\n ContentStatus,\n ReaderSchema,\n ChunkerSchema,\n VectorDbSchema,\n KnowledgeConfigResponse,\n ContentResponse,\n ContentStatusResponse,\n ContentListResponse,\n ContentListOptions,\n VectorSearchRequest,\n VectorSearchResult,\n VectorSearchResponse,\n ContentUploadRequest,\n ContentUpdateRequest,\n // Metrics API types\n TokenMetrics,\n ModelMetrics,\n DayAggregatedMetrics,\n MetricsResponse,\n MetricsOptions,\n RefreshMetricsOptions,\n // Evaluation types\n EvalType,\n EvalComponentType,\n ScoringStrategy,\n SortOrder,\n EvalSchema,\n ListEvalRunsParams,\n EvalRunsListResponse,\n ExecuteEvalRequest,\n UpdateEvalRunRequest,\n DeleteEvalRunsRequest,\n // Traces types\n TraceStatus,\n TraceSummary,\n TraceNode,\n TraceDetail,\n TraceSessionStats,\n TracesListResponse,\n TraceSessionStatsResponse,\n ListTracesOptions,\n GetTraceOptions,\n GetTraceSessionStatsOptions,\n PaginationInfo,\n // Schedules types\n ListSchedulesParams,\n ListScheduleRunsParams,\n ScheduleCreate,\n ScheduleUpdate,\n ScheduleResponse,\n ScheduleStateResponse,\n ScheduleRunStatus,\n ScheduleRunResponse,\n SchedulesListResponse,\n ScheduleRunsListResponse,\n // Approvals types\n ApprovalStatus,\n ApprovalSourceType,\n ApprovalPauseType,\n ApprovalRunStatus,\n ListApprovalsParams,\n ApprovalResponse,\n ApprovalResolve,\n ApprovalCountResponse,\n ApprovalStatusResponse,\n ApprovalsListResponse,\n // Components types\n ComponentType,\n ListComponentsParams,\n ComponentCreate,\n ComponentUpdate,\n ComponentResponse,\n ConfigCreate,\n ConfigUpdate,\n ComponentConfigResponse,\n ComponentsListResponse,\n} from '@rodrigocoliveira/agno-types';\n\nexport { RunEvent } from '@rodrigocoliveira/agno-types';\n"
22
+ "/**\n * @rodrigocoliveira/agno-client\n * Core client library for Agno agents with streaming support\n */\n\n// Main client\nexport { AgnoClient } from './client';\n\n// Utilities\nexport { Logger } from './utils/logger';\nexport { parseToolArg, parseToolArgs } from './utils/parse-tool-arg';\n\n// Traces manager types\nexport type {\n PaginatedTracesResult,\n PaginatedTraceSessionStatsResult,\n} from './managers/traces-manager';\n\n// Re-export types from @rodrigocoliveira/agno-types\nexport type {\n AgnoClientConfig,\n ChatMessage,\n ToolCall,\n RunResponse,\n RunResponseContent,\n SessionEntry,\n AgentDetails,\n TeamDetails,\n ClientState,\n MessageExtraData,\n ImageData,\n VideoData,\n AudioData,\n ResponseAudioData,\n // Memory types\n UserMemory,\n MemoriesListResponse,\n ListMemoriesParams,\n CreateMemoryRequest,\n UpdateMemoryRequest,\n DeleteMultipleMemoriesRequest,\n UserMemoryStats,\n UserMemoryStatsResponse,\n UserMemoryStatsParams,\n // Knowledge API types\n ContentStatus,\n ReaderSchema,\n ChunkerSchema,\n VectorDbSchema,\n KnowledgeConfigResponse,\n ContentResponse,\n ContentStatusResponse,\n ContentListResponse,\n ContentListOptions,\n VectorSearchRequest,\n VectorSearchResult,\n VectorSearchResponse,\n ContentUploadRequest,\n ContentUpdateRequest,\n // Metrics API types\n TokenMetrics,\n ModelMetrics,\n DayAggregatedMetrics,\n MetricsResponse,\n MetricsOptions,\n RefreshMetricsOptions,\n // Evaluation types\n EvalType,\n EvalComponentType,\n ScoringStrategy,\n SortOrder,\n EvalSchema,\n ListEvalRunsParams,\n EvalRunsListResponse,\n ExecuteEvalRequest,\n UpdateEvalRunRequest,\n DeleteEvalRunsRequest,\n // Traces types\n TraceStatus,\n TraceSummary,\n TraceNode,\n TraceDetail,\n TraceSessionStats,\n TracesListResponse,\n TraceSessionStatsResponse,\n ListTracesOptions,\n GetTraceOptions,\n GetTraceSessionStatsOptions,\n PaginationInfo,\n // Schedules types\n ListSchedulesParams,\n ListScheduleRunsParams,\n ScheduleCreate,\n ScheduleUpdate,\n ScheduleResponse,\n ScheduleStateResponse,\n ScheduleRunStatus,\n ScheduleRunResponse,\n SchedulesListResponse,\n ScheduleRunsListResponse,\n // Approvals types\n ApprovalStatus,\n ApprovalSourceType,\n ApprovalPauseType,\n ApprovalRunStatus,\n ListApprovalsParams,\n ApprovalResponse,\n ApprovalResolve,\n ApprovalCountResponse,\n ApprovalStatusResponse,\n ApprovalsListResponse,\n // Components types\n ComponentType,\n ListComponentsParams,\n ComponentCreate,\n ComponentUpdate,\n ComponentResponse,\n ConfigCreate,\n ConfigUpdate,\n ComponentConfigResponse,\n ComponentsListResponse,\n} from '@rodrigocoliveira/agno-types';\n\nexport { RunEvent } from '@rodrigocoliveira/agno-types';\n"
22
23
  ],
23
- "mappings": "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",
24
- "debugId": "789DD8CF6983A36F64756E2164756E21",
24
+ "mappings": "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",
25
+ "debugId": "7F4B77C26050ACF264756E2164756E21",
25
26
  "names": []
26
27
  }