@rodrigocoliveira/agno-react 1.0.2 → 1.0.3

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.
Files changed (159) hide show
  1. package/README.md +2 -2
  2. package/dist/components/GenerativeUIRenderer.d.ts +21 -0
  3. package/dist/components/GenerativeUIRenderer.d.ts.map +1 -0
  4. package/dist/context/AgnoContext.d.ts +16 -0
  5. package/dist/context/AgnoContext.d.ts.map +1 -0
  6. package/dist/context/ToolHandlerContext.d.ts +44 -0
  7. package/dist/context/ToolHandlerContext.d.ts.map +1 -0
  8. package/dist/hooks/useAgnoActions.d.ts +25 -0
  9. package/dist/hooks/useAgnoActions.d.ts.map +1 -0
  10. package/dist/hooks/useAgnoChat.d.ts +22 -0
  11. package/dist/hooks/useAgnoChat.d.ts.map +1 -0
  12. package/dist/hooks/useAgnoCustomEvents.d.ts +38 -0
  13. package/dist/hooks/useAgnoCustomEvents.d.ts.map +1 -0
  14. package/dist/hooks/useAgnoEvals.d.ts +39 -0
  15. package/dist/hooks/useAgnoEvals.d.ts.map +1 -0
  16. package/dist/hooks/useAgnoKnowledge.d.ts +56 -0
  17. package/dist/hooks/useAgnoKnowledge.d.ts.map +1 -0
  18. package/dist/hooks/useAgnoMemory.d.ts +42 -0
  19. package/dist/hooks/useAgnoMemory.d.ts.map +1 -0
  20. package/dist/hooks/useAgnoMetrics.d.ts +51 -0
  21. package/dist/hooks/useAgnoMetrics.d.ts.map +1 -0
  22. package/dist/hooks/useAgnoSession.d.ts +38 -0
  23. package/dist/hooks/useAgnoSession.d.ts.map +1 -0
  24. package/dist/hooks/useAgnoToolExecution.d.ts +70 -0
  25. package/dist/hooks/useAgnoToolExecution.d.ts.map +1 -0
  26. package/dist/hooks/useAgnoTraces.d.ts +51 -0
  27. package/dist/hooks/useAgnoTraces.d.ts.map +1 -0
  28. package/dist/index.d.ts +27 -723
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +932 -1052
  31. package/dist/index.js.map +24 -0
  32. package/dist/index.mjs +816 -909
  33. package/dist/index.mjs.map +24 -0
  34. package/dist/ui/components/artifact.d.ts +24 -0
  35. package/dist/ui/components/artifact.d.ts.map +1 -0
  36. package/dist/ui/components/audio-recorder.d.ts +32 -0
  37. package/dist/ui/components/audio-recorder.d.ts.map +1 -0
  38. package/dist/ui/components/code-block.d.ts +15 -0
  39. package/dist/ui/components/code-block.d.ts.map +1 -0
  40. package/dist/ui/components/conversation.d.ts +17 -0
  41. package/dist/ui/components/conversation.d.ts.map +1 -0
  42. package/dist/ui/components/file-preview-card.d.ts +13 -0
  43. package/dist/ui/components/file-preview-card.d.ts.map +1 -0
  44. package/dist/ui/components/file-preview-modal.d.ts +8 -0
  45. package/dist/ui/components/file-preview-modal.d.ts.map +1 -0
  46. package/dist/ui/components/image-lightbox.d.ts +12 -0
  47. package/dist/ui/components/image-lightbox.d.ts.map +1 -0
  48. package/dist/ui/components/message.d.ts +19 -0
  49. package/dist/ui/components/message.d.ts.map +1 -0
  50. package/dist/ui/components/prompt-input/attachments.d.ts +21 -0
  51. package/dist/ui/components/prompt-input/attachments.d.ts.map +1 -0
  52. package/dist/ui/components/prompt-input/buttons.d.ts +19 -0
  53. package/dist/ui/components/prompt-input/buttons.d.ts.map +1 -0
  54. package/dist/ui/components/prompt-input/command.d.ts +17 -0
  55. package/dist/ui/components/prompt-input/command.d.ts.map +1 -0
  56. package/dist/ui/components/prompt-input/context.d.ts +36 -0
  57. package/dist/ui/components/prompt-input/context.d.ts.map +1 -0
  58. package/dist/ui/components/prompt-input/drop-zone.d.ts +7 -0
  59. package/dist/ui/components/prompt-input/drop-zone.d.ts.map +1 -0
  60. package/dist/ui/components/prompt-input/footer.d.ts +11 -0
  61. package/dist/ui/components/prompt-input/footer.d.ts.map +1 -0
  62. package/dist/ui/components/prompt-input/index.d.ts +25 -0
  63. package/dist/ui/components/prompt-input/index.d.ts.map +1 -0
  64. package/dist/ui/components/prompt-input/model-select.d.ts +13 -0
  65. package/dist/ui/components/prompt-input/model-select.d.ts.map +1 -0
  66. package/dist/ui/components/prompt-input/prompt-input.d.ts +22 -0
  67. package/dist/ui/components/prompt-input/prompt-input.d.ts.map +1 -0
  68. package/dist/ui/components/prompt-input/provider.d.ts +6 -0
  69. package/dist/ui/components/prompt-input/provider.d.ts.map +1 -0
  70. package/dist/ui/components/prompt-input/speech.d.ts +51 -0
  71. package/dist/ui/components/prompt-input/speech.d.ts.map +1 -0
  72. package/dist/ui/components/prompt-input/tabs.d.ts +12 -0
  73. package/dist/ui/components/prompt-input/tabs.d.ts.map +1 -0
  74. package/dist/ui/components/prompt-input/textarea.d.ts +5 -0
  75. package/dist/ui/components/prompt-input/textarea.d.ts.map +1 -0
  76. package/dist/ui/components/response.d.ts +5 -0
  77. package/dist/ui/components/response.d.ts.map +1 -0
  78. package/dist/ui/components/smart-timestamp.d.ts +8 -0
  79. package/dist/ui/components/smart-timestamp.d.ts.map +1 -0
  80. package/dist/ui/components/streaming-indicator.d.ts +8 -0
  81. package/dist/ui/components/streaming-indicator.d.ts.map +1 -0
  82. package/dist/ui/components/tool.d.ts +24 -0
  83. package/dist/ui/components/tool.d.ts.map +1 -0
  84. package/dist/ui/composed/AgnoChatInput.d.ts +44 -0
  85. package/dist/ui/composed/AgnoChatInput.d.ts.map +1 -0
  86. package/dist/ui/composed/AgnoChatInterface.d.ts +49 -0
  87. package/dist/ui/composed/AgnoChatInterface.d.ts.map +1 -0
  88. package/dist/ui/composed/AgnoMessageItem.d.ts +38 -0
  89. package/dist/ui/composed/AgnoMessageItem.d.ts.map +1 -0
  90. package/dist/ui/composed/agno-chat/agno-chat.d.ts +9 -0
  91. package/dist/ui/composed/agno-chat/agno-chat.d.ts.map +1 -0
  92. package/dist/ui/composed/agno-chat/context.d.ts +33 -0
  93. package/dist/ui/composed/agno-chat/context.d.ts.map +1 -0
  94. package/dist/ui/composed/agno-chat/empty-state.d.ts +6 -0
  95. package/dist/ui/composed/agno-chat/empty-state.d.ts.map +1 -0
  96. package/dist/ui/composed/agno-chat/error-bar.d.ts +5 -0
  97. package/dist/ui/composed/agno-chat/error-bar.d.ts.map +1 -0
  98. package/dist/ui/composed/agno-chat/index.d.ts +33 -0
  99. package/dist/ui/composed/agno-chat/index.d.ts.map +1 -0
  100. package/dist/ui/composed/agno-chat/input.d.ts +39 -0
  101. package/dist/ui/composed/agno-chat/input.d.ts.map +1 -0
  102. package/dist/ui/composed/agno-chat/messages.d.ts +21 -0
  103. package/dist/ui/composed/agno-chat/messages.d.ts.map +1 -0
  104. package/dist/ui/composed/agno-chat/suggested-prompts.d.ts +7 -0
  105. package/dist/ui/composed/agno-chat/suggested-prompts.d.ts.map +1 -0
  106. package/dist/ui/composed/agno-chat/tool-status.d.ts +5 -0
  107. package/dist/ui/composed/agno-chat/tool-status.d.ts.map +1 -0
  108. package/dist/ui/composed/index.d.ts +9 -0
  109. package/dist/ui/composed/index.d.ts.map +1 -0
  110. package/dist/ui/index.d.ts +59 -0
  111. package/dist/ui/index.d.ts.map +1 -0
  112. package/dist/ui/lib/cn.d.ts +3 -0
  113. package/dist/ui/lib/cn.d.ts.map +1 -0
  114. package/dist/ui/lib/file-utils.d.ts +20 -0
  115. package/dist/ui/lib/file-utils.d.ts.map +1 -0
  116. package/dist/ui/lib/format-timestamp.d.ts +16 -0
  117. package/dist/ui/lib/format-timestamp.d.ts.map +1 -0
  118. package/dist/ui/primitives/accordion.d.ts +8 -0
  119. package/dist/ui/primitives/accordion.d.ts.map +1 -0
  120. package/dist/ui/primitives/avatar.d.ts +7 -0
  121. package/dist/ui/primitives/avatar.d.ts.map +1 -0
  122. package/dist/ui/primitives/badge.d.ts +10 -0
  123. package/dist/ui/primitives/badge.d.ts.map +1 -0
  124. package/dist/ui/primitives/button.d.ts +12 -0
  125. package/dist/ui/primitives/button.d.ts.map +1 -0
  126. package/dist/ui/primitives/collapsible.d.ts +6 -0
  127. package/dist/ui/primitives/collapsible.d.ts.map +1 -0
  128. package/dist/ui/primitives/command.d.ts +79 -0
  129. package/dist/ui/primitives/command.d.ts.map +1 -0
  130. package/dist/ui/primitives/dialog.d.ts +26 -0
  131. package/dist/ui/primitives/dialog.d.ts.map +1 -0
  132. package/dist/ui/primitives/dropdown-menu.d.ts +28 -0
  133. package/dist/ui/primitives/dropdown-menu.d.ts.map +1 -0
  134. package/dist/ui/primitives/hover-card.d.ts +7 -0
  135. package/dist/ui/primitives/hover-card.d.ts.map +1 -0
  136. package/dist/ui/primitives/index.d.ts +16 -0
  137. package/dist/ui/primitives/index.d.ts.map +1 -0
  138. package/dist/ui/primitives/input-group.d.ts +17 -0
  139. package/dist/ui/primitives/input-group.d.ts.map +1 -0
  140. package/dist/ui/primitives/select.d.ts +14 -0
  141. package/dist/ui/primitives/select.d.ts.map +1 -0
  142. package/dist/ui/primitives/tooltip.d.ts +8 -0
  143. package/dist/ui/primitives/tooltip.d.ts.map +1 -0
  144. package/dist/ui/types.d.ts +56 -0
  145. package/dist/ui/types.d.ts.map +1 -0
  146. package/dist/ui.d.ts +2 -891
  147. package/dist/ui.d.ts.map +1 -0
  148. package/dist/ui.js +2757 -2323
  149. package/dist/ui.js.map +60 -0
  150. package/dist/ui.mjs +2644 -2055
  151. package/dist/ui.mjs.map +60 -0
  152. package/dist/utils/component-registry.d.ts +63 -0
  153. package/dist/utils/component-registry.d.ts.map +1 -0
  154. package/dist/utils/ui-helpers.d.ts +165 -0
  155. package/dist/utils/ui-helpers.d.ts.map +1 -0
  156. package/package.json +9 -10
  157. package/LICENSE +0 -21
  158. package/dist/index.d.mts +0 -724
  159. package/dist/ui.d.mts +0 -891
@@ -0,0 +1,24 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/context/AgnoContext.tsx", "../src/context/ToolHandlerContext.tsx", "../src/components/GenerativeUIRenderer.tsx", "../src/utils/component-registry.ts", "../src/hooks/useAgnoToolExecution.ts", "../src/utils/ui-helpers.ts", "../src/hooks/useAgnoChat.ts", "../src/hooks/useAgnoSession.ts", "../src/hooks/useAgnoActions.ts", "../src/hooks/useAgnoCustomEvents.ts", "../src/hooks/useAgnoMemory.ts", "../src/hooks/useAgnoKnowledge.ts", "../src/hooks/useAgnoMetrics.ts", "../src/hooks/useAgnoEvals.ts", "../src/hooks/useAgnoTraces.ts"],
4
+ "sourcesContent": [
5
+ "import React, { createContext, useContext, useMemo, useEffect } from 'react';\nimport { AgnoClient } from '@rodrigocoliveira/agno-client';\nimport type { AgnoClientConfig } from '@rodrigocoliveira/agno-types';\n\n/**\n * Context for providing AgnoClient instance\n */\nconst AgnoContext = createContext<AgnoClient | null>(null);\n\nexport interface AgnoProviderProps {\n config: AgnoClientConfig;\n children: React.ReactNode;\n}\n\n/**\n * Provider component that creates and manages an AgnoClient instance\n */\nexport function AgnoProvider({ config, children }: AgnoProviderProps) {\n // Create client only once using useMemo (React best practice)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const client = useMemo(() => new AgnoClient(config), []);\n\n // Sync config changes to the client instance\n useEffect(() => {\n client.updateConfig(config);\n }, [client, config]);\n\n // Cleanup on unmount to prevent memory leaks\n useEffect(() => {\n return () => {\n // Remove all event listeners when provider unmounts\n client.removeAllListeners();\n };\n }, [client]);\n\n return (\n <AgnoContext.Provider value={client}>\n {children}\n </AgnoContext.Provider>\n );\n}\n\n/**\n * Hook to access the AgnoClient instance\n */\nexport function useAgnoClient(): AgnoClient {\n const client = useContext(AgnoContext);\n\n if (!client) {\n throw new Error('useAgnoClient must be used within an AgnoProvider');\n }\n\n return client;\n}\n",
6
+ "import React, { createContext, useContext, useState, useCallback } from 'react';\nimport type { ToolHandler } from '../hooks/useAgnoToolExecution';\n\n/**\n * Context value for tool handler registry\n */\nexport interface ToolHandlerContextValue {\n handlers: Record<string, ToolHandler>;\n registerHandler: (name: string, handler: ToolHandler) => void;\n unregisterHandler: (name: string) => void;\n}\n\n/**\n * Context for providing global tool handlers\n */\nconst ToolHandlerContext = createContext<ToolHandlerContextValue | null>(null);\n\nexport interface ToolHandlerProviderProps {\n handlers?: Record<string, ToolHandler>;\n children: React.ReactNode;\n}\n\n/**\n * Provider component that manages global tool handlers\n *\n * @example\n * ```tsx\n * const globalHandlers = {\n * fill_form: async (args) => {\n * // Implementation\n * return { success: true };\n * }\n * };\n *\n * <ToolHandlerProvider handlers={globalHandlers}>\n * <App />\n * </ToolHandlerProvider>\n * ```\n */\nexport function ToolHandlerProvider({ handlers: initialHandlers = {}, children }: ToolHandlerProviderProps) {\n const [handlers, setHandlers] = useState<Record<string, ToolHandler>>(initialHandlers);\n\n /**\n * Register a new tool handler or update an existing one\n */\n const registerHandler = useCallback((name: string, handler: ToolHandler) => {\n setHandlers(prev => ({ ...prev, [name]: handler }));\n }, []);\n\n /**\n * Unregister a tool handler\n */\n const unregisterHandler = useCallback((name: string) => {\n setHandlers(prev => {\n const { [name]: _, ...rest } = prev;\n return rest;\n });\n }, []);\n\n const value: ToolHandlerContextValue = {\n handlers,\n registerHandler,\n unregisterHandler,\n };\n\n return (\n <ToolHandlerContext.Provider value={value}>\n {children}\n </ToolHandlerContext.Provider>\n );\n}\n\n/**\n * Hook to access global tool handlers\n *\n * @returns Tool handler context value or null if not within ToolHandlerProvider\n *\n * @example\n * ```tsx\n * const { handlers, registerHandler } = useToolHandlers() || { handlers: {} };\n * ```\n */\nexport function useToolHandlers(): ToolHandlerContextValue | null {\n return useContext(ToolHandlerContext);\n}\n",
7
+ "/**\n * Generative UI Renderer\n *\n * Renders UI components based on specifications from the agent.\n * Supports both registry-based components and custom render functions.\n */\n\nimport React from 'react';\nimport type { UIComponentSpec } from '@rodrigocoliveira/agno-types';\nimport { getComponentRegistry } from '../utils/component-registry';\nimport { getCustomRender } from '../hooks/useAgnoToolExecution';\n\nexport interface GenerativeUIRendererProps {\n /** The UI component specification to render */\n spec: UIComponentSpec;\n /** Optional className for styling */\n className?: string;\n /** Error boundary fallback */\n onError?: (error: Error) => void;\n}\n\n/**\n * Error Boundary for UI rendering errors\n */\nclass UIErrorBoundary extends React.Component<\n { children: React.ReactNode; onError?: (error: Error) => void; fallback?: React.ReactNode },\n { hasError: boolean; error?: Error }\n> {\n constructor(props: any) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(error: Error) {\n return { hasError: true, error };\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {\n console.error('[GenerativeUIRenderer] Error rendering component:', error, errorInfo);\n this.props.onError?.(error);\n }\n\n render() {\n if (this.state.hasError) {\n return (\n this.props.fallback || (\n <div className=\"p-4 border border-red-300 rounded-md bg-red-50 text-red-800\">\n <p className=\"font-semibold\">Failed to render UI component</p>\n <p className=\"text-sm mt-1\">{this.state.error?.message || 'Unknown error'}</p>\n </div>\n )\n );\n }\n\n return this.props.children;\n }\n}\n\n/**\n * Main Generative UI Renderer component\n */\nexport function GenerativeUIRenderer({\n spec,\n className,\n onError,\n}: GenerativeUIRendererProps): React.ReactElement {\n const registry = getComponentRegistry();\n\n // Handle custom render functions\n if (spec.type === 'custom') {\n const customSpec = spec as any;\n if (customSpec.renderKey) {\n const renderFn = getCustomRender(customSpec.renderKey);\n if (renderFn) {\n return (\n <UIErrorBoundary onError={onError}>\n <div className={className}>{renderFn(customSpec.props || {})}</div>\n </UIErrorBoundary>\n );\n }\n }\n // Fallback if custom render not found\n return (\n <div className={`p-4 border border-yellow-300 rounded-md bg-yellow-50 text-yellow-800 ${className || ''}`}>\n <p className=\"font-semibold\">Custom component not available</p>\n <p className=\"text-sm mt-1\">The custom render function for this component is not available.</p>\n </div>\n );\n }\n\n // Handle chart components\n if (spec.type === 'chart') {\n const chartSpec = spec as any;\n const chartType = `chart:${chartSpec.component}`;\n\n if (registry.has(chartType)) {\n const ChartRenderer = registry.get(chartType)!;\n return (\n <UIErrorBoundary onError={onError}>\n <div className={className}>\n {chartSpec.title && <h3 className=\"font-semibold mb-2\">{chartSpec.title}</h3>}\n {chartSpec.description && <p className=\"text-sm text-gray-600 mb-4\">{chartSpec.description}</p>}\n <ChartRenderer {...chartSpec.props} />\n </div>\n </UIErrorBoundary>\n );\n }\n\n // Fallback: render data as JSON\n return (\n <div className={`p-4 border border-gray-300 rounded-md ${className || ''}`}>\n <p className=\"font-semibold mb-2\">{chartSpec.title || 'Chart Data'}</p>\n {chartSpec.description && <p className=\"text-sm text-gray-600 mb-2\">{chartSpec.description}</p>}\n <pre className=\"text-xs bg-gray-100 p-2 rounded overflow-auto\">\n {JSON.stringify(chartSpec.props.data, null, 2)}\n </pre>\n </div>\n );\n }\n\n // Handle card grid\n if (spec.type === 'card-grid') {\n const cardGridSpec = spec as any;\n if (registry.has('card-grid')) {\n const CardGridRenderer = registry.get('card-grid')!;\n return (\n <UIErrorBoundary onError={onError}>\n <div className={className}>\n {cardGridSpec.title && <h3 className=\"font-semibold mb-2\">{cardGridSpec.title}</h3>}\n {cardGridSpec.description && <p className=\"text-sm text-gray-600 mb-4\">{cardGridSpec.description}</p>}\n <CardGridRenderer {...cardGridSpec.props} />\n </div>\n </UIErrorBoundary>\n );\n }\n }\n\n // Handle table\n if (spec.type === 'table') {\n const tableSpec = spec as any;\n if (registry.has('table')) {\n const TableRenderer = registry.get('table')!;\n return (\n <UIErrorBoundary onError={onError}>\n <div className={className}>\n {tableSpec.title && <h3 className=\"font-semibold mb-2\">{tableSpec.title}</h3>}\n {tableSpec.description && <p className=\"text-sm text-gray-600 mb-4\">{tableSpec.description}</p>}\n <TableRenderer {...tableSpec.props} />\n </div>\n </UIErrorBoundary>\n );\n }\n }\n\n // Handle markdown\n if (spec.type === 'markdown') {\n const markdownSpec = spec as any;\n if (registry.has('markdown')) {\n const MarkdownRenderer = registry.get('markdown')!;\n return (\n <UIErrorBoundary onError={onError}>\n <div className={className}>\n <MarkdownRenderer {...markdownSpec.props} />\n </div>\n </UIErrorBoundary>\n );\n }\n // Fallback: render as plain text\n return <div className={className}>{markdownSpec.props.content}</div>;\n }\n\n // Handle artifact (container with multiple children)\n if (spec.type === 'artifact') {\n const artifactSpec = spec as any;\n return (\n <UIErrorBoundary onError={onError}>\n <div className={`p-4 border rounded-md ${className || ''}`}>\n {artifactSpec.title && <h3 className=\"font-semibold mb-4\">{artifactSpec.title}</h3>}\n {artifactSpec.description && <p className=\"text-sm text-gray-600 mb-4\">{artifactSpec.description}</p>}\n <div className=\"space-y-4\">\n {artifactSpec.props.content?.map((childSpec: UIComponentSpec, index: number) => (\n <GenerativeUIRenderer key={index} spec={childSpec} onError={onError} />\n ))}\n </div>\n </div>\n </UIErrorBoundary>\n );\n }\n\n // Unknown type fallback\n return (\n <div className={`p-4 border border-gray-300 rounded-md ${className || ''}`}>\n <p className=\"font-semibold\">Unsupported UI component</p>\n <p className=\"text-sm text-gray-600 mt-1\">Component type: {spec.type}</p>\n </div>\n );\n}\n",
8
+ "/**\n * Component Registry for Generative UI\n *\n * Maps component specifications to actual React components.\n * Allows registering custom components at runtime.\n */\n\n/**\n * Component renderer function type\n */\nexport type ComponentRenderer = (props: any) => any; // React.ReactNode in React context\n\n/**\n * Component registry class\n */\nexport class ComponentRegistry {\n private static instance: ComponentRegistry;\n private components: Map<string, ComponentRenderer> = new Map();\n\n private constructor() {\n // Private constructor for singleton\n }\n\n /**\n * Get the singleton instance\n */\n static getInstance(): ComponentRegistry {\n if (!ComponentRegistry.instance) {\n ComponentRegistry.instance = new ComponentRegistry();\n }\n return ComponentRegistry.instance;\n }\n\n /**\n * Register a component renderer\n */\n register(type: string, renderer: ComponentRenderer): void {\n this.components.set(type, renderer);\n }\n\n /**\n * Register multiple components at once\n */\n registerBatch(components: Record<string, ComponentRenderer>): void {\n Object.entries(components).forEach(([type, renderer]) => {\n this.register(type, renderer);\n });\n }\n\n /**\n * Get a registered component renderer\n */\n get(type: string): ComponentRenderer | undefined {\n return this.components.get(type);\n }\n\n /**\n * Check if a component is registered\n */\n has(type: string): boolean {\n return this.components.has(type);\n }\n\n /**\n * Unregister a component\n */\n unregister(type: string): void {\n this.components.delete(type);\n }\n\n /**\n * Get all registered component types\n */\n getRegisteredTypes(): string[] {\n return Array.from(this.components.keys());\n }\n\n /**\n * Clear all registered components\n */\n clear(): void {\n this.components.clear();\n }\n}\n\n/**\n * Get the global component registry instance\n */\nexport function getComponentRegistry(): ComponentRegistry {\n return ComponentRegistry.getInstance();\n}\n\n/**\n * Helper to register a chart component\n */\nexport function registerChartComponent(name: string, renderer: ComponentRenderer): void {\n getComponentRegistry().register(`chart:${name}`, renderer);\n}\n\n/**\n * Helper to get a chart component\n */\nexport function getChartComponent(name: string): ComponentRenderer | undefined {\n return getComponentRegistry().get(`chart:${name}`);\n}\n",
9
+ "import { useState, useEffect, useCallback, useMemo } from 'react';\nimport type {\n ToolCall,\n UIComponentSpec,\n ToolHandlerResult,\n CustomRenderFunction\n} from '@rodrigocoliveira/agno-types';\nimport { useAgnoClient } from '../context/AgnoContext';\nimport { useToolHandlers } from '../context/ToolHandlerContext';\n\n/**\n * Tool handler function type (now supports generative UI)\n */\nexport type ToolHandler = (args: Record<string, any>) => Promise<any>;\n\n/**\n * Runtime registry for custom render functions (not serializable)\n * These are React components/functions that can't be stored in JSON\n */\nconst customRenderRegistry = new Map<string, CustomRenderFunction>();\n\n/**\n * Store a custom render function and return its unique key\n */\nfunction registerCustomRender(renderFn: CustomRenderFunction): string {\n const key = `custom-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n customRenderRegistry.set(key, renderFn);\n return key;\n}\n\n/**\n * Get a custom render function by key\n */\nexport function getCustomRender(key: string): CustomRenderFunction | undefined {\n return customRenderRegistry.get(key);\n}\n\n/**\n * Check if a value is a ToolHandlerResult with UI spec\n */\nfunction isToolHandlerResult(value: any): value is ToolHandlerResult {\n return value && typeof value === 'object' && ('data' in value || 'ui' in value);\n}\n\n/**\n * Check if a value is a UIComponentSpec\n */\nfunction isUIComponentSpec(value: any): value is UIComponentSpec {\n return value && typeof value === 'object' && 'type' in value;\n}\n\n/**\n * Process tool handler result and extract data/UI\n * Exported for use in session loading UI hydration\n */\nexport function processToolResult(result: any, _tool: ToolCall): {\n resultData: string;\n uiComponent?: any;\n} {\n // Case 1: ToolHandlerResult with data and ui\n if (isToolHandlerResult(result)) {\n const { data, ui } = result;\n\n let uiComponent: any = undefined;\n if (ui) {\n // Handle custom render functions\n if (ui.type === 'custom' && typeof (ui as any).render === 'function') {\n const renderKey = registerCustomRender((ui as any).render);\n uiComponent = {\n ...ui,\n renderKey,\n render: undefined, // Don't store the function itself\n };\n } else {\n // Serializable UI spec\n uiComponent = ui;\n }\n }\n\n return {\n resultData: typeof data === 'string' ? data : JSON.stringify(data),\n uiComponent,\n };\n }\n\n // Case 2: Direct UI component spec (no separate data)\n if (isUIComponentSpec(result)) {\n let uiComponent: any;\n if (result.type === 'custom' && typeof (result as any).render === 'function') {\n const renderKey = registerCustomRender((result as any).render);\n uiComponent = {\n ...result,\n renderKey,\n render: undefined,\n };\n } else {\n uiComponent = result;\n }\n\n return {\n resultData: JSON.stringify(result),\n uiComponent,\n };\n }\n\n // Case 3: Legacy format - plain data (backward compatible)\n return {\n resultData: typeof result === 'string' ? result : JSON.stringify(result),\n uiComponent: undefined,\n };\n}\n\n/**\n * Tool execution event payload\n */\nexport interface ToolExecutionEvent {\n runId?: string;\n sessionId?: string;\n tools: ToolCall[];\n}\n\n/**\n * Hook for handling frontend tool execution (HITL)\n *\n * **Note:** HITL (Human-in-the-Loop) frontend tool execution is only supported for agents.\n * Teams do not support the continue endpoint. This hook will log a warning and no-op if used with team mode.\n *\n * @param handlers - Map of tool names to handler functions (local handlers)\n * @param autoExecute - Whether to automatically execute tools when paused (default: true)\n *\n * @example\n * ```tsx\n * const toolHandlers = {\n * navigate_to_page: async (args) => {\n * window.location.href = args.url;\n * return { success: true };\n * },\n * fill_form: async (args) => {\n * document.querySelector(args.selector).value = args.value;\n * return { filled: true };\n * }\n * };\n *\n * const { isPaused, isExecuting, pendingTools } = useAgnoToolExecution(toolHandlers);\n * ```\n */\nexport function useAgnoToolExecution(\n handlers: Record<string, ToolHandler> = {},\n autoExecute: boolean = true\n) {\n const client = useAgnoClient();\n const toolHandlerContext = useToolHandlers();\n\n // Check if in team mode - teams don't support HITL\n const isTeamMode = client.getConfig().mode === 'team';\n\n // Log warning once if in team mode\n useEffect(() => {\n if (isTeamMode) {\n console.warn(\n '[useAgnoToolExecution] HITL (Human-in-the-Loop) frontend tool execution is not supported for teams. ' +\n 'Only agents support the continue endpoint. This hook will not function in team mode.'\n );\n }\n }, [isTeamMode]);\n\n // Merge global handlers with local handlers (local takes precedence)\n const mergedHandlers = useMemo(() => {\n const globalHandlers = toolHandlerContext?.handlers || {};\n return { ...globalHandlers, ...handlers };\n }, [toolHandlerContext?.handlers, handlers]);\n\n const [pendingTools, setPendingTools] = useState<ToolCall[]>([]);\n const [isPaused, setIsPaused] = useState(false);\n const [isExecuting, setIsExecuting] = useState(false);\n const [executionError, setExecutionError] = useState<string | undefined>();\n\n // Listen for run:paused events (only for agents, not teams)\n useEffect(() => {\n // Don't register listeners if in team mode\n if (isTeamMode) {\n return;\n }\n\n const handleRunPaused = (event: ToolExecutionEvent) => {\n setIsPaused(true);\n setPendingTools(event.tools);\n setExecutionError(undefined);\n };\n\n const handleRunContinued = () => {\n setIsPaused(false);\n setPendingTools([]);\n setIsExecuting(false);\n setExecutionError(undefined);\n };\n\n client.on('run:paused', handleRunPaused);\n client.on('run:continued', handleRunContinued);\n\n return () => {\n client.off('run:paused', handleRunPaused);\n client.off('run:continued', handleRunContinued);\n };\n }, [client, isTeamMode]);\n\n /**\n * Execute all pending tools and continue the run\n */\n const executeAndContinue = useCallback(async () => {\n if (!isPaused || pendingTools.length === 0) {\n console.warn('[useAgnoToolExecution] Cannot execute: no pending tools');\n return;\n }\n\n setIsExecuting(true);\n setExecutionError(undefined);\n\n try {\n // Execute each tool\n const updatedTools = await Promise.all(\n pendingTools.map(async (tool) => {\n const handler = mergedHandlers[tool.tool_name];\n\n if (!handler) {\n return {\n ...tool,\n result: JSON.stringify({\n error: `No handler registered for ${tool.tool_name}`,\n }),\n };\n }\n\n try {\n const result = await handler(tool.tool_args);\n\n // Process result to extract data and UI components\n const { resultData, uiComponent } = processToolResult(result, tool);\n\n return {\n ...tool,\n result: resultData,\n ui_component: uiComponent,\n } as ToolCall;\n } catch (error) {\n return {\n ...tool,\n result: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n };\n }\n })\n );\n\n // Store UI components in the client's message store before continuing\n // This ensures the UI components are visible even if the backend doesn't echo them back\n const toolsWithUI = updatedTools.filter(t => (t as any).ui_component);\n if (toolsWithUI.length > 0) {\n // Emit a custom event with the UI data\n client.emit('ui:render', {\n tools: updatedTools,\n runId: client.getState().pausedRunId,\n });\n }\n\n // Add frontend-executed tool calls to the message before continuing\n // This ensures they appear in the UI and persist in the message\n client.addToolCallsToLastMessage(updatedTools);\n\n // Continue the run with results\n await client.continueRun(updatedTools);\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n setExecutionError(errorMessage);\n setIsExecuting(false);\n throw error;\n }\n }, [client, mergedHandlers, isPaused, pendingTools]);\n\n /**\n * Hydrate tool calls with UI when session loads\n */\n useEffect(() => {\n const handleSessionLoaded = async (_sessionId: string) => {\n const messages = client.getMessages();\n\n for (const message of messages) {\n if (!message.tool_calls) continue;\n\n for (const tool of message.tool_calls) {\n // Skip if already has UI\n if ((tool as any).ui_component) continue;\n\n const handler = mergedHandlers[tool.tool_name];\n if (!handler) continue;\n\n try {\n const result = await handler(tool.tool_args);\n const { uiComponent } = processToolResult(result, tool);\n\n if (uiComponent) {\n client.hydrateToolCallUI(tool.tool_call_id, uiComponent);\n }\n } catch (err) {\n console.error(`Failed to hydrate UI for ${tool.tool_name}:`, err);\n }\n }\n }\n };\n\n client.on('session:loaded', handleSessionLoaded);\n return () => {\n client.off('session:loaded', handleSessionLoaded);\n };\n }, [client, mergedHandlers]);\n\n /**\n * Execute tools manually (for user confirmation flows)\n * Returns the updated tools with results set\n */\n const executeTools = useCallback(\n async (tools: ToolCall[]): Promise<ToolCall[]> => {\n return Promise.all(\n tools.map(async (tool) => {\n const handler = mergedHandlers[tool.tool_name];\n if (!handler) return tool;\n\n try {\n const result = await handler(tool.tool_args);\n\n // Process result to extract data and UI components\n const { resultData, uiComponent } = processToolResult(result, tool);\n\n return {\n ...tool,\n result: resultData,\n ui_component: uiComponent,\n } as ToolCall;\n } catch (error) {\n return {\n ...tool,\n result: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n };\n }\n })\n );\n },\n [mergedHandlers]\n );\n\n /**\n * Manually continue the run with custom tool results\n */\n const continueWithResults = useCallback(\n async (tools: ToolCall[], options?: { headers?: Record<string, string>; params?: Record<string, string> }) => {\n if (!isPaused) {\n throw new Error('No paused run to continue');\n }\n setIsExecuting(true);\n try {\n await client.continueRun(tools, options);\n } catch (error) {\n setIsExecuting(false);\n throw error;\n }\n },\n [client, isPaused]\n );\n\n // Auto-execute when paused (if enabled)\n useEffect(() => {\n if (autoExecute && isPaused && !isExecuting && pendingTools.length > 0) {\n executeAndContinue();\n }\n }, [autoExecute, isPaused, isExecuting, pendingTools.length, executeAndContinue]);\n\n return {\n /** Whether the run is currently paused awaiting tool execution */\n isPaused,\n /** Whether tools are currently being executed */\n isExecuting,\n /** Tools awaiting execution */\n pendingTools,\n /** Execute all pending tools and continue the run */\n executeAndContinue,\n /** Execute specific tools and return results without continuing */\n executeTools,\n /** Continue the run with manually provided tool results */\n continueWithResults,\n /** Error from tool execution, if any */\n executionError,\n };\n}\n",
10
+ "/**\n * Helper utilities for creating UI component specifications\n *\n * These helpers make it easy to create common UI patterns without\n * manually constructing the full specification object.\n */\n\nimport type {\n ChartComponentSpec,\n CardGridComponentSpec,\n CardData,\n TableComponentSpec,\n TableColumn,\n MarkdownComponentSpec,\n ArtifactComponentSpec,\n UIComponentSpec,\n ToolHandlerResult,\n} from '@rodrigocoliveira/agno-types';\n\n/**\n * Chart helper options\n */\nexport interface ChartHelperOptions {\n /** Chart title */\n title?: string;\n /** Chart description */\n description?: string;\n /** Layout preference */\n layout?: 'inline' | 'artifact';\n /** Show legend */\n showLegend?: boolean;\n /** Show grid */\n showGrid?: boolean;\n /** Chart height */\n height?: number | string;\n /** Chart width */\n width?: number | string;\n}\n\n/**\n * Create a bar chart specification\n */\nexport function createBarChart(\n data: any[],\n xKey: string,\n bars: Array<{ key: string; label?: string; color?: string }>,\n options?: ChartHelperOptions\n): ChartComponentSpec {\n return {\n type: 'chart',\n component: 'BarChart',\n layout: options?.layout,\n title: options?.title,\n description: options?.description,\n props: {\n data,\n xKey,\n bars: bars.map(bar => ({\n key: bar.key,\n label: bar.label || bar.key,\n color: bar.color,\n })),\n showLegend: options?.showLegend ?? true,\n showGrid: options?.showGrid ?? true,\n height: options?.height,\n width: options?.width,\n },\n };\n}\n\n/**\n * Create a line chart specification\n */\nexport function createLineChart(\n data: any[],\n xKey: string,\n lines: Array<{ key: string; label?: string; color?: string }>,\n options?: ChartHelperOptions\n): ChartComponentSpec {\n return {\n type: 'chart',\n component: 'LineChart',\n layout: options?.layout,\n title: options?.title,\n description: options?.description,\n props: {\n data,\n xKey,\n lines: lines.map(line => ({\n key: line.key,\n label: line.label || line.key,\n color: line.color,\n })),\n showLegend: options?.showLegend ?? true,\n showGrid: options?.showGrid ?? true,\n height: options?.height,\n width: options?.width,\n },\n };\n}\n\n/**\n * Create a pie chart specification\n */\nexport function createPieChart(\n data: any[],\n dataKey: string,\n nameKey: string,\n options?: ChartHelperOptions & { showLabel?: boolean }\n): ChartComponentSpec {\n return {\n type: 'chart',\n component: 'PieChart',\n layout: options?.layout,\n title: options?.title,\n description: options?.description,\n props: {\n data,\n pie: {\n dataKey,\n nameKey,\n label: options?.showLabel ?? true,\n },\n showLegend: options?.showLegend ?? true,\n height: options?.height || 400,\n width: options?.width,\n },\n };\n}\n\n/**\n * Create an area chart specification\n */\nexport function createAreaChart(\n data: any[],\n xKey: string,\n areas: Array<{ key: string; label?: string; color?: string }>,\n options?: ChartHelperOptions\n): ChartComponentSpec {\n return {\n type: 'chart',\n component: 'AreaChart',\n layout: options?.layout,\n title: options?.title,\n description: options?.description,\n props: {\n data,\n xKey,\n areas: areas.map(area => ({\n key: area.key,\n label: area.label || area.key,\n color: area.color,\n })),\n showLegend: options?.showLegend ?? true,\n showGrid: options?.showGrid ?? true,\n height: options?.height,\n width: options?.width,\n },\n };\n}\n\n/**\n * Card grid helper options\n */\nexport interface CardGridHelperOptions {\n title?: string;\n description?: string;\n layout?: 'inline' | 'artifact';\n columns?: {\n default?: number;\n sm?: number;\n md?: number;\n lg?: number;\n xl?: number;\n };\n variant?: 'default' | 'bordered' | 'elevated';\n}\n\n/**\n * Create a card grid specification\n */\nexport function createCardGrid(\n cards: CardData[],\n options?: CardGridHelperOptions\n): CardGridComponentSpec {\n return {\n type: 'card-grid',\n layout: options?.layout,\n title: options?.title,\n description: options?.description,\n props: {\n cards,\n columns: options?.columns || { default: 1, md: 2, lg: 3 },\n variant: options?.variant || 'default',\n },\n };\n}\n\n/**\n * Create a simple card\n */\nexport function createCard(\n id: string,\n title: string,\n description?: string,\n options?: {\n image?: string;\n metadata?: Record<string, any>;\n actions?: CardData['actions'];\n }\n): CardData {\n return {\n id,\n title,\n description,\n image: options?.image,\n metadata: options?.metadata,\n actions: options?.actions,\n };\n}\n\n/**\n * Table helper options\n */\nexport interface TableHelperOptions {\n title?: string;\n description?: string;\n layout?: 'inline' | 'artifact';\n sortable?: boolean;\n filterable?: boolean;\n pagination?: {\n pageSize?: number;\n pageSizeOptions?: number[];\n };\n density?: 'comfortable' | 'compact';\n}\n\n/**\n * Create a table specification\n */\nexport function createTable(\n data: Record<string, any>[],\n columns: TableColumn[],\n options?: TableHelperOptions\n): TableComponentSpec {\n return {\n type: 'table',\n layout: options?.layout,\n title: options?.title,\n description: options?.description,\n props: {\n data,\n columns,\n sortable: options?.sortable ?? true,\n filterable: options?.filterable,\n pagination: options?.pagination,\n density: options?.density || 'comfortable',\n },\n };\n}\n\n/**\n * Create a table column definition\n */\nexport function createColumn(\n key: string,\n header: string,\n options?: {\n width?: number | string;\n sortable?: boolean;\n cellType?: 'text' | 'number' | 'date' | 'badge' | 'link';\n format?: TableColumn['format'];\n }\n): TableColumn {\n return {\n key,\n header,\n width: options?.width,\n sortable: options?.sortable,\n cellType: options?.cellType || 'text',\n format: options?.format,\n };\n}\n\n/**\n * Create a markdown specification\n */\nexport function createMarkdown(\n content: string,\n options?: {\n title?: string;\n description?: string;\n layout?: 'inline' | 'artifact';\n syntaxHighlight?: boolean;\n }\n): MarkdownComponentSpec {\n return {\n type: 'markdown',\n layout: options?.layout,\n title: options?.title,\n description: options?.description,\n props: {\n content,\n syntaxHighlight: options?.syntaxHighlight ?? true,\n },\n };\n}\n\n/**\n * Create an artifact container with multiple child components\n */\nexport function createArtifact(\n content: UIComponentSpec[],\n options?: {\n title?: string;\n description?: string;\n variant?: 'default' | 'bordered' | 'elevated';\n }\n): ArtifactComponentSpec {\n return {\n type: 'artifact',\n title: options?.title,\n description: options?.description,\n props: {\n content,\n variant: options?.variant || 'default',\n },\n };\n}\n\n/**\n * Smart chart creator - automatically chooses the best chart type based on data\n */\nexport function createSmartChart(\n data: any[],\n options?: {\n title?: string;\n description?: string;\n layout?: 'inline' | 'artifact';\n xKey?: string;\n yKeys?: string[];\n preferredType?: 'bar' | 'line' | 'area' | 'pie';\n }\n): ChartComponentSpec {\n // If no data, return a default bar chart\n if (!data || data.length === 0) {\n return createBarChart([], '', [], options);\n }\n\n // Auto-detect keys if not provided\n const firstItem = data[0];\n const keys = Object.keys(firstItem);\n\n // Try to find suitable xKey (first string key or 'name', 'label', 'category', etc.)\n const xKey =\n options?.xKey ||\n keys.find(k =>\n ['name', 'label', 'category', 'date', 'time', 'month', 'year'].includes(k.toLowerCase())\n ) ||\n keys[0];\n\n // Get numeric keys for yKeys\n const numericKeys = keys.filter(k => k !== xKey && typeof firstItem[k] === 'number');\n const yKeys = options?.yKeys || numericKeys;\n\n // Respect explicit preferredType first\n if (options?.preferredType) {\n switch (options.preferredType) {\n case 'bar':\n return createBarChart(\n data,\n xKey,\n yKeys.map(key => ({ key })),\n options\n );\n case 'line':\n return createLineChart(\n data,\n xKey,\n yKeys.map(key => ({ key })),\n options\n );\n case 'area':\n return createAreaChart(\n data,\n xKey,\n yKeys.map(key => ({ key })),\n options\n );\n case 'pie':\n return createPieChart(data, yKeys[0], xKey, options);\n }\n }\n\n // Auto-detect based on data characteristics\n // If only one value key and non-numeric xKey, consider pie chart\n if (yKeys.length === 1 && typeof firstItem[xKey] === 'string') {\n return createPieChart(data, yKeys[0], xKey, options);\n }\n\n // If xKey looks like a date/time, prefer line chart\n if (\n xKey.toLowerCase().includes('date') ||\n xKey.toLowerCase().includes('time') ||\n xKey.toLowerCase().includes('month') ||\n xKey.toLowerCase().includes('year')\n ) {\n return createLineChart(\n data,\n xKey,\n yKeys.map(key => ({ key })),\n options\n );\n }\n\n // Default to bar chart for comparisons\n return createBarChart(\n data,\n xKey,\n yKeys.map(key => ({ key })),\n options\n );\n}\n\n/**\n * Wrap data and UI into a ToolHandlerResult\n */\nexport function createToolResult(data: any, ui: UIComponentSpec): ToolHandlerResult {\n return { data, ui };\n}\n\n/**\n * Quick helper: create a tool result with a bar chart\n */\nexport function resultWithBarChart(\n data: any[],\n xKey: string,\n bars: Array<{ key: string; label?: string; color?: string }>,\n options?: ChartHelperOptions\n): ToolHandlerResult {\n return createToolResult(data, createBarChart(data, xKey, bars, options));\n}\n\n/**\n * Quick helper: create a tool result with a smart chart\n */\nexport function resultWithSmartChart(\n data: any[],\n options?: Parameters<typeof createSmartChart>[1]\n): ToolHandlerResult {\n return createToolResult(data, createSmartChart(data, options));\n}\n\n/**\n * Quick helper: create a tool result with a card grid\n */\nexport function resultWithCardGrid(\n cards: CardData[],\n options?: CardGridHelperOptions\n): ToolHandlerResult {\n return createToolResult(cards, createCardGrid(cards, options));\n}\n\n/**\n * Quick helper: create a tool result with a table\n */\nexport function resultWithTable(\n data: Record<string, any>[],\n columns: TableColumn[],\n options?: TableHelperOptions\n): ToolHandlerResult {\n return createToolResult(data, createTable(data, columns, options));\n}\n",
11
+ "import { useState, useEffect, useCallback } from 'react';\nimport type { ChatMessage, ClientState } from '@rodrigocoliveira/agno-types';\nimport { useAgnoClient } from '../context/AgnoContext';\n\n/**\n * Main hook for chat interactions\n * Provides messages, state, and methods to interact with the agent\n */\nexport function useAgnoChat() {\n const client = useAgnoClient();\n const [messages, setMessages] = useState<ChatMessage[]>(client.getMessages());\n const [state, setState] = useState<ClientState>(client.getState());\n const [error, setError] = useState<string | undefined>();\n\n // Listen to client events and update React state\n useEffect(() => {\n const handleMessageUpdate = (updatedMessages: ChatMessage[]) => {\n setMessages(updatedMessages);\n };\n\n const handleMessageComplete = (updatedMessages: ChatMessage[]) => {\n setMessages(updatedMessages);\n };\n\n const handleMessageRefreshed = (updatedMessages: ChatMessage[]) => {\n setMessages(updatedMessages);\n };\n\n const handleMessageError = (errorMessage: string) => {\n setError(errorMessage);\n };\n\n const handleStateChange = (newState: ClientState) => {\n setState(newState);\n };\n\n // Handle UI render event from frontend tool execution\n const handleUIRender = (event: any) => {\n const { tools } = event;\n\n // Update each tool call with its UI component\n for (const tool of tools) {\n if ((tool as any).ui_component) {\n client.hydrateToolCallUI(tool.tool_call_id, (tool as any).ui_component);\n }\n }\n };\n\n // Handle run cancelled event\n const handleRunCancelled = () => {\n // State is already updated via state:change event\n // This handler can be used for additional cancellation logic if needed\n };\n\n client.on('message:update', handleMessageUpdate);\n client.on('message:complete', handleMessageComplete);\n client.on('message:refreshed', handleMessageRefreshed);\n client.on('message:error', handleMessageError);\n client.on('state:change', handleStateChange);\n client.on('ui:render', handleUIRender);\n client.on('run:cancelled', handleRunCancelled);\n\n // Initialize state\n setMessages(client.getMessages());\n setState(client.getState());\n\n return () => {\n client.off('message:update', handleMessageUpdate);\n client.off('message:complete', handleMessageComplete);\n client.off('message:refreshed', handleMessageRefreshed);\n client.off('message:error', handleMessageError);\n client.off('state:change', handleStateChange);\n client.off('ui:render', handleUIRender);\n client.off('run:cancelled', handleRunCancelled);\n };\n }, [client]);\n\n /**\n * Send a message to the agent/team\n */\n const sendMessage = useCallback(\n async (message: string | FormData, options?: { headers?: Record<string, string>; params?: Record<string, string> }) => {\n setError(undefined);\n try {\n await client.sendMessage(message, options);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n }\n },\n [client]\n );\n\n /**\n * Clear all messages\n */\n const clearMessages = useCallback(() => {\n client.clearMessages();\n setMessages([]);\n setError(undefined);\n }, [client]);\n\n /**\n * Cancel the current run\n */\n const cancelRun = useCallback(async () => {\n try {\n await client.cancelRun();\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n }\n }, [client]);\n\n return {\n messages,\n sendMessage,\n clearMessages,\n cancelRun,\n isStreaming: state.isStreaming,\n isRefreshing: state.isRefreshing,\n isPaused: state.isPaused,\n isCancelling: state.isCancelling,\n currentRunId: state.currentRunId,\n error,\n state,\n };\n}\n",
12
+ "import { useState, useEffect, useCallback } from 'react';\nimport type {\n SessionEntry,\n ChatMessage,\n AgentSessionDetailSchema,\n TeamSessionDetailSchema,\n RunSchema,\n TeamRunSchema,\n CreateSessionRequest,\n UpdateSessionRequest,\n} from '@rodrigocoliveira/agno-types';\nimport { useAgnoClient } from '../context/AgnoContext';\n\n/**\n * Hook for session management\n */\nexport function useAgnoSession() {\n const client = useAgnoClient();\n const [sessions, setSessions] = useState<SessionEntry[]>([]);\n const [currentSessionId, setCurrentSessionId] = useState<string | undefined>(\n client.getConfig().sessionId\n );\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | undefined>();\n\n // Listen to session events\n useEffect(() => {\n const handleSessionLoaded = (sessionId: string) => {\n setCurrentSessionId(sessionId);\n };\n\n const handleSessionCreated = (session: SessionEntry) => {\n setSessions((prev) => [session, ...prev]);\n setCurrentSessionId(session.session_id);\n };\n\n const handleStateChange = () => {\n const config = client.getConfig();\n setCurrentSessionId(config.sessionId);\n setSessions(client.getState().sessions);\n };\n\n client.on('session:loaded', handleSessionLoaded);\n client.on('session:created', handleSessionCreated);\n client.on('state:change', handleStateChange);\n\n // Initialize\n setSessions(client.getState().sessions);\n setCurrentSessionId(client.getConfig().sessionId);\n\n return () => {\n client.off('session:loaded', handleSessionLoaded);\n client.off('session:created', handleSessionCreated);\n client.off('state:change', handleStateChange);\n };\n }, [client]);\n\n /**\n * Load a specific session\n */\n const loadSession = useCallback(\n async (sessionId: string, options?: { params?: Record<string, string> }): Promise<ChatMessage[]> => {\n setIsLoading(true);\n setError(undefined);\n try {\n const messages = await client.loadSession(sessionId, options);\n setCurrentSessionId(sessionId);\n return messages;\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n /**\n * Fetch all sessions\n */\n const fetchSessions = useCallback(async (options?: { params?: Record<string, string> }): Promise<SessionEntry[]> => {\n setIsLoading(true);\n setError(undefined);\n try {\n const fetchedSessions = await client.fetchSessions(options);\n setSessions(fetchedSessions);\n return fetchedSessions;\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n }, [client]);\n\n /**\n * Get a session by ID\n */\n const getSessionById = useCallback(\n async (\n sessionId: string,\n options?: { params?: Record<string, string> }\n ): Promise<AgentSessionDetailSchema | TeamSessionDetailSchema> => {\n setIsLoading(true);\n setError(undefined);\n try {\n return await client.getSessionById(sessionId, options);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n /**\n * Get a run by ID\n */\n const getRunById = useCallback(\n async (\n sessionId: string,\n runId: string,\n options?: { params?: Record<string, string> }\n ): Promise<RunSchema | TeamRunSchema> => {\n setIsLoading(true);\n setError(undefined);\n try {\n return await client.getRunById(sessionId, runId, options);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n /**\n * Create a new session\n */\n const createSession = useCallback(\n async (\n request?: CreateSessionRequest,\n options?: { params?: Record<string, string> }\n ): Promise<AgentSessionDetailSchema | TeamSessionDetailSchema> => {\n setIsLoading(true);\n setError(undefined);\n try {\n const session = await client.createSession(request, options);\n return session;\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n /**\n * Update a session\n */\n const updateSession = useCallback(\n async (\n sessionId: string,\n request: UpdateSessionRequest,\n options?: { params?: Record<string, string> }\n ): Promise<AgentSessionDetailSchema | TeamSessionDetailSchema> => {\n setIsLoading(true);\n setError(undefined);\n try {\n return await client.updateSession(sessionId, request, options);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n /**\n * Rename a session\n */\n const renameSession = useCallback(\n async (\n sessionId: string,\n newName: string,\n options?: { params?: Record<string, string> }\n ): Promise<AgentSessionDetailSchema | TeamSessionDetailSchema> => {\n setIsLoading(true);\n setError(undefined);\n try {\n return await client.renameSession(sessionId, newName, options);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n /**\n * Delete a session\n */\n const deleteSession = useCallback(\n async (\n sessionId: string,\n options?: { params?: Record<string, string> }\n ): Promise<void> => {\n setIsLoading(true);\n setError(undefined);\n try {\n await client.deleteSession(sessionId, options);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n /**\n * Delete multiple sessions\n */\n const deleteMultipleSessions = useCallback(\n async (\n sessionIds: string[],\n options?: { params?: Record<string, string> }\n ): Promise<void> => {\n setIsLoading(true);\n setError(undefined);\n try {\n await client.deleteMultipleSessions(sessionIds, options);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n return {\n sessions,\n currentSessionId,\n loadSession,\n fetchSessions,\n getSessionById,\n getRunById,\n createSession,\n updateSession,\n renameSession,\n deleteSession,\n deleteMultipleSessions,\n isLoading,\n error,\n };\n}\n",
13
+ "import { useState, useCallback } from 'react';\nimport type { AgentDetails, TeamDetails } from '@rodrigocoliveira/agno-types';\nimport { useAgnoClient } from '../context/AgnoContext';\n\n/**\n * Hook for common actions like initialization, fetching agents/teams\n */\nexport function useAgnoActions() {\n const client = useAgnoClient();\n const [isInitializing, setIsInitializing] = useState(false);\n const [error, setError] = useState<string | undefined>();\n\n /**\n * Initialize the client (check status and fetch agents/teams)\n */\n const initialize = useCallback(async (options?: { params?: Record<string, string> }): Promise<{\n agents: AgentDetails[];\n teams: TeamDetails[];\n }> => {\n setIsInitializing(true);\n setError(undefined);\n try {\n const result = await client.initialize(options);\n return result;\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsInitializing(false);\n }\n }, [client]);\n\n /**\n * Check endpoint status\n */\n const checkStatus = useCallback(async (options?: { params?: Record<string, string> }): Promise<boolean> => {\n setError(undefined);\n try {\n return await client.checkStatus(options);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n return false;\n }\n }, [client]);\n\n /**\n * Fetch agents\n */\n const fetchAgents = useCallback(async (options?: { params?: Record<string, string> }): Promise<AgentDetails[]> => {\n setError(undefined);\n try {\n return await client.fetchAgents(options);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n }\n }, [client]);\n\n /**\n * Fetch teams\n */\n const fetchTeams = useCallback(async (options?: { params?: Record<string, string> }): Promise<TeamDetails[]> => {\n setError(undefined);\n try {\n return await client.fetchTeams(options);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n }\n }, [client]);\n\n /**\n * Update client configuration\n */\n const updateConfig = useCallback(\n (updates: Partial<Parameters<typeof client.updateConfig>[0]>) => {\n client.updateConfig(updates);\n },\n [client]\n );\n\n return {\n initialize,\n checkStatus,\n fetchAgents,\n fetchTeams,\n updateConfig,\n isInitializing,\n error,\n };\n}\n",
14
+ "import { useState, useEffect, useCallback, useRef } from 'react';\nimport type { CustomEventData } from '@rodrigocoliveira/agno-types';\nimport { useAgnoClient } from '../context/AgnoContext';\n\n/**\n * React hook to subscribe to custom events emitted by the agent backend (yielding CustomEventData).\n *\n * Custom events are emitted when agent yeilds data not directly related to tool execution or chat messages,\n * through the CustomEvent API event type.\n *\n * @param handler - Optional callback invoked for each custom event\n * @returns Object containing accumulated custom events and a clear function\n *\n * @example\n * // Collect all custom events\n * const { events } = useAgnoCustomEvents();\n *\n * @example\n * // Handle events as they arrive\n * const { events } = useAgnoCustomEvents((event) => {\n * if (event.greeting) {\n * showToast(event.greeting);\n * }\n * });\n *\n * @example\n * // Filter for specific event types\n * const { events } = useAgnoCustomEvents();\n * const greetings = events.filter(e => 'greeting' in e);\n *\n * @example\n * // Clear accumulated events\n * const { events, clearEvents } = useAgnoCustomEvents();\n * // Later...\n * clearEvents();\n */\nexport function useAgnoCustomEvents(\n handler?: (event: CustomEventData) => void\n): {\n events: CustomEventData[];\n clearEvents: () => void;\n} {\n const client = useAgnoClient();\n const [events, setEvents] = useState<CustomEventData[]>([]);\n\n // Use ref to avoid stale closure issues with the handler\n const handlerRef = useRef(handler);\n handlerRef.current = handler;\n\n useEffect(() => {\n const handleCustomEvent = (event: CustomEventData) => {\n setEvents((prev) => [...prev, event]);\n handlerRef.current?.(event);\n };\n\n client.on('custom:event', handleCustomEvent);\n\n return () => {\n client.off('custom:event', handleCustomEvent);\n };\n }, [client]);\n\n const clearEvents = useCallback(() => {\n setEvents([]);\n }, []);\n\n return { events, clearEvents };\n}\n",
15
+ "import { useState, useEffect, useCallback } from 'react';\nimport type {\n UserMemory,\n MemoriesListResponse,\n ListMemoriesParams,\n CreateMemoryRequest,\n UpdateMemoryRequest,\n UserMemoryStatsResponse,\n UserMemoryStatsParams,\n} from '@rodrigocoliveira/agno-types';\nimport { useAgnoClient } from '../context/AgnoContext';\n\n/**\n * Hook for memory management\n */\nexport function useAgnoMemory() {\n const client = useAgnoClient();\n const [memories, setMemories] = useState<UserMemory[]>([]);\n const [topics, setTopics] = useState<string[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | undefined>();\n\n // Listen to memory events\n useEffect(() => {\n const handleMemoryCreated = (memory: UserMemory) => {\n setMemories((prev) => [memory, ...prev]);\n };\n\n const handleMemoryUpdated = (memory: UserMemory) => {\n setMemories((prev) =>\n prev.map((m) => (m.memory_id === memory.memory_id ? memory : m))\n );\n };\n\n const handleMemoryDeleted = ({ memoryId }: { memoryId: string }) => {\n setMemories((prev) => prev.filter((m) => m.memory_id !== memoryId));\n };\n\n const handleMemoriesDeleted = ({ memoryIds }: { memoryIds: string[] }) => {\n const deletedIds = new Set(memoryIds);\n setMemories((prev) => prev.filter((m) => !deletedIds.has(m.memory_id)));\n };\n\n const handleStateChange = () => {\n const state = client.getState();\n setMemories(state.memories);\n setTopics(state.memoryTopics);\n };\n\n client.on('memory:created', handleMemoryCreated);\n client.on('memory:updated', handleMemoryUpdated);\n client.on('memory:deleted', handleMemoryDeleted);\n client.on('memories:deleted', handleMemoriesDeleted);\n client.on('state:change', handleStateChange);\n\n // Initialize\n const state = client.getState();\n setMemories(state.memories);\n setTopics(state.memoryTopics);\n\n return () => {\n client.off('memory:created', handleMemoryCreated);\n client.off('memory:updated', handleMemoryUpdated);\n client.off('memory:deleted', handleMemoryDeleted);\n client.off('memories:deleted', handleMemoriesDeleted);\n client.off('state:change', handleStateChange);\n };\n }, [client]);\n\n /**\n * Fetch memories with optional filtering and pagination\n */\n const fetchMemories = useCallback(\n async (\n queryParams?: ListMemoriesParams,\n options?: { params?: Record<string, string> }\n ): Promise<MemoriesListResponse> => {\n setIsLoading(true);\n setError(undefined);\n try {\n const response = await client.fetchMemories(queryParams, options);\n setMemories(response.data);\n return response;\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n /**\n * Get a specific memory by ID\n */\n const getMemoryById = useCallback(\n async (\n memoryId: string,\n options?: { params?: Record<string, string>; table?: string }\n ): Promise<UserMemory> => {\n setIsLoading(true);\n setError(undefined);\n try {\n return await client.getMemoryById(memoryId, options);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n /**\n * Get all available memory topics\n */\n const getMemoryTopics = useCallback(\n async (\n options?: { params?: Record<string, string>; table?: string }\n ): Promise<string[]> => {\n setIsLoading(true);\n setError(undefined);\n try {\n const result = await client.getMemoryTopics(options);\n setTopics(result);\n return result;\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n /**\n * Get user memory statistics\n */\n const getUserMemoryStats = useCallback(\n async (\n queryParams?: UserMemoryStatsParams,\n options?: { params?: Record<string, string> }\n ): Promise<UserMemoryStatsResponse> => {\n setIsLoading(true);\n setError(undefined);\n try {\n return await client.getUserMemoryStats(queryParams, options);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n /**\n * Create a new memory\n */\n const createMemory = useCallback(\n async (\n request: CreateMemoryRequest,\n options?: { params?: Record<string, string>; table?: string }\n ): Promise<UserMemory> => {\n setIsLoading(true);\n setError(undefined);\n try {\n return await client.createMemory(request, options);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n /**\n * Update an existing memory\n */\n const updateMemory = useCallback(\n async (\n memoryId: string,\n request: UpdateMemoryRequest,\n options?: { params?: Record<string, string>; table?: string }\n ): Promise<UserMemory> => {\n setIsLoading(true);\n setError(undefined);\n try {\n return await client.updateMemory(memoryId, request, options);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n /**\n * Delete a single memory\n */\n const deleteMemory = useCallback(\n async (\n memoryId: string,\n options?: { params?: Record<string, string>; table?: string }\n ): Promise<void> => {\n setIsLoading(true);\n setError(undefined);\n try {\n await client.deleteMemory(memoryId, options);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n /**\n * Delete multiple memories\n */\n const deleteMultipleMemories = useCallback(\n async (\n memoryIds: string[],\n options?: { params?: Record<string, string>; table?: string; userId?: string }\n ): Promise<void> => {\n setIsLoading(true);\n setError(undefined);\n try {\n await client.deleteMultipleMemories(memoryIds, options);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n return {\n memories,\n topics,\n isLoading,\n error,\n fetchMemories,\n getMemoryById,\n getMemoryTopics,\n getUserMemoryStats,\n createMemory,\n updateMemory,\n deleteMemory,\n deleteMultipleMemories,\n };\n}\n",
16
+ "import { useState, useCallback } from 'react';\nimport type {\n KnowledgeConfigResponse,\n ContentResponse,\n ContentStatusResponse,\n ContentListResponse,\n ContentListOptions,\n VectorSearchRequest,\n VectorSearchResponse,\n ContentUpdateRequest,\n} from '@rodrigocoliveira/agno-types';\nimport { useAgnoClient } from '../context/AgnoContext';\n\n/**\n * Hook for knowledge management\n */\nexport function useAgnoKnowledge() {\n const client = useAgnoClient();\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | undefined>();\n const [config, setConfig] = useState<KnowledgeConfigResponse | undefined>();\n const [content, setContent] = useState<ContentResponse[]>([]);\n\n /**\n * Get knowledge configuration\n */\n const getConfig = useCallback(\n async (\n options?: { dbId?: string; params?: Record<string, string> }\n ): Promise<KnowledgeConfigResponse> => {\n setIsLoading(true);\n setError(undefined);\n try {\n const result = await client.getKnowledgeConfig(options);\n setConfig(result);\n return result;\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n /**\n * List all content\n */\n const listContent = useCallback(\n async (\n listOptions?: ContentListOptions,\n options?: { params?: Record<string, string> }\n ): Promise<ContentListResponse> => {\n setIsLoading(true);\n setError(undefined);\n try {\n const result = await client.listKnowledgeContent(listOptions, options);\n setContent(result.data);\n return result;\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n /**\n * Get content by ID\n */\n const getContent = useCallback(\n async (\n contentId: string,\n options?: { dbId?: string; params?: Record<string, string> }\n ): Promise<ContentResponse> => {\n setIsLoading(true);\n setError(undefined);\n try {\n return await client.getKnowledgeContent(contentId, options);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n /**\n * Get content status\n */\n const getContentStatus = useCallback(\n async (\n contentId: string,\n options?: { dbId?: string; params?: Record<string, string> }\n ): Promise<ContentStatusResponse> => {\n setIsLoading(true);\n setError(undefined);\n try {\n return await client.getKnowledgeContentStatus(contentId, options);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n /**\n * Search knowledge base\n */\n const search = useCallback(\n async (\n request: VectorSearchRequest,\n options?: { params?: Record<string, string> }\n ): Promise<VectorSearchResponse> => {\n setIsLoading(true);\n setError(undefined);\n try {\n return await client.searchKnowledge(request, options);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n /**\n * Upload content\n */\n const uploadContent = useCallback(\n async (\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 setIsLoading(true);\n setError(undefined);\n try {\n const result = await client.uploadKnowledgeContent(data, options);\n // Add to local state\n setContent((prev) => [result, ...prev]);\n return result;\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n /**\n * Update content\n */\n const updateContent = useCallback(\n async (\n contentId: string,\n request: ContentUpdateRequest,\n options?: { dbId?: string; params?: Record<string, string> }\n ): Promise<ContentResponse> => {\n setIsLoading(true);\n setError(undefined);\n try {\n const result = await client.updateKnowledgeContent(\n contentId,\n request,\n options\n );\n // Update in local state\n setContent((prev) => prev.map((c) => (c.id === contentId ? result : c)));\n return result;\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n /**\n * Delete all content\n */\n const deleteAllContent = useCallback(\n async (\n options?: { dbId?: string; params?: Record<string, string> }\n ): Promise<void> => {\n setIsLoading(true);\n setError(undefined);\n try {\n await client.deleteAllKnowledgeContent(options);\n setContent([]);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n /**\n * Delete content by ID\n */\n const deleteContent = useCallback(\n async (\n contentId: string,\n options?: { dbId?: string; params?: Record<string, string> }\n ): Promise<ContentResponse> => {\n setIsLoading(true);\n setError(undefined);\n try {\n const result = await client.deleteKnowledgeContent(contentId, options);\n // Remove from local state\n setContent((prev) => prev.filter((c) => c.id !== contentId));\n return result;\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n return {\n // State\n config,\n content,\n isLoading,\n error,\n // Methods\n getConfig,\n listContent,\n getContent,\n getContentStatus,\n search,\n uploadContent,\n updateContent,\n deleteAllContent,\n deleteContent,\n };\n}\n",
17
+ "import { useState, useCallback } from 'react';\nimport type {\n MetricsResponse,\n DayAggregatedMetrics,\n MetricsOptions,\n RefreshMetricsOptions,\n} from '@rodrigocoliveira/agno-types';\nimport { useAgnoClient } from '../context/AgnoContext';\n\n/**\n * Hook for metrics management\n *\n * Provides methods to fetch and refresh AgentOS metrics.\n *\n * @example\n * ```tsx\n * function MetricsDashboard() {\n * const {\n * metrics,\n * fetchMetrics,\n * refreshMetrics,\n * isLoading,\n * isRefreshing,\n * error,\n * } = useAgnoMetrics();\n *\n * useEffect(() => {\n * fetchMetrics({\n * startingDate: '2024-01-01',\n * endingDate: '2024-01-31',\n * });\n * }, [fetchMetrics]);\n *\n * if (isLoading) return <div>Loading metrics...</div>;\n * if (error) return <div>Error: {error}</div>;\n *\n * return (\n * <div>\n * {metrics?.metrics.map((day) => (\n * <div key={day.id}>\n * <h3>{day.date}</h3>\n * <p>Agent Runs: {day.agent_runs_count}</p>\n * </div>\n * ))}\n * </div>\n * );\n * }\n * ```\n */\nexport function useAgnoMetrics() {\n const client = useAgnoClient();\n const [isLoading, setIsLoading] = useState(false);\n const [isRefreshing, setIsRefreshing] = useState(false);\n const [error, setError] = useState<string | undefined>();\n const [metrics, setMetrics] = useState<MetricsResponse | undefined>();\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 const fetchMetrics = useCallback(\n async (options?: MetricsOptions): Promise<MetricsResponse> => {\n setIsLoading(true);\n setError(undefined);\n try {\n const result = await client.fetchMetrics(options);\n setMetrics(result);\n return result;\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\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 const refreshMetrics = useCallback(\n async (options?: RefreshMetricsOptions): Promise<DayAggregatedMetrics[]> => {\n setIsRefreshing(true);\n setError(undefined);\n try {\n const result = await client.refreshMetrics(options);\n return result;\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsRefreshing(false);\n }\n },\n [client]\n );\n\n /**\n * Clear cached metrics and error state\n */\n const clearMetrics = useCallback(() => {\n setMetrics(undefined);\n setError(undefined);\n }, []);\n\n return {\n // Data\n metrics,\n\n // Actions\n fetchMetrics,\n refreshMetrics,\n clearMetrics,\n\n // State\n isLoading,\n isRefreshing,\n error,\n };\n}\n",
18
+ "import { useState, useCallback } from 'react';\nimport type {\n EvalSchema,\n EvalRunsListResponse,\n ListEvalRunsParams,\n ExecuteEvalRequest,\n UpdateEvalRunRequest,\n} from '@rodrigocoliveira/agno-types';\nimport { useAgnoClient } from '../context/AgnoContext';\n\n/**\n * Hook for evaluation management\n */\nexport function useAgnoEvals() {\n const client = useAgnoClient();\n const [evalRuns, setEvalRuns] = useState<EvalSchema[]>([]);\n const [pagination, setPagination] = useState<EvalRunsListResponse['meta'] | undefined>();\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | undefined>();\n\n /**\n * List evaluation runs with optional filtering and pagination\n */\n const listEvalRuns = useCallback(\n async (\n listParams: ListEvalRunsParams = {},\n options?: { params?: Record<string, string> }\n ): Promise<EvalRunsListResponse> => {\n setIsLoading(true);\n setError(undefined);\n try {\n const response = await client.listEvalRuns(listParams, options);\n setEvalRuns(response.data);\n setPagination(response.meta);\n return response;\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n /**\n * Get a specific evaluation run by ID\n */\n const getEvalRun = useCallback(\n async (\n evalRunId: string,\n options?: { dbId?: string; table?: string; params?: Record<string, string> }\n ): Promise<EvalSchema> => {\n setIsLoading(true);\n setError(undefined);\n try {\n return await client.getEvalRun(evalRunId, options);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n /**\n * Execute a new evaluation\n */\n const executeEval = useCallback(\n async (\n request: ExecuteEvalRequest,\n options?: { dbId?: string; table?: string; params?: Record<string, string> }\n ): Promise<EvalSchema> => {\n setIsLoading(true);\n setError(undefined);\n try {\n const result = await client.executeEval(request, options);\n // Add the new eval run to the list\n setEvalRuns((prev) => [result, ...prev]);\n return result;\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n /**\n * Update an evaluation run (rename)\n */\n const updateEvalRun = useCallback(\n async (\n evalRunId: string,\n request: UpdateEvalRunRequest,\n options?: { dbId?: string; table?: string; params?: Record<string, string> }\n ): Promise<EvalSchema> => {\n setIsLoading(true);\n setError(undefined);\n try {\n const result = await client.updateEvalRun(evalRunId, request, options);\n // Update the eval run in the list\n setEvalRuns((prev) =>\n prev.map((evalRun) => (evalRun.id === evalRunId ? result : evalRun))\n );\n return result;\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n /**\n * Delete multiple evaluation runs\n */\n const deleteEvalRuns = useCallback(\n async (\n evalRunIds: string[],\n options?: { dbId?: string; table?: string; params?: Record<string, string> }\n ): Promise<void> => {\n setIsLoading(true);\n setError(undefined);\n try {\n await client.deleteEvalRuns(evalRunIds, options);\n // Remove deleted eval runs from the list\n const deletedSet = new Set(evalRunIds);\n setEvalRuns((prev) => prev.filter((evalRun) => !deletedSet.has(evalRun.id)));\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n /**\n * Rename an evaluation run (convenience method)\n */\n const renameEvalRun = useCallback(\n async (\n evalRunId: string,\n newName: string,\n options?: { dbId?: string; table?: string; params?: Record<string, string> }\n ): Promise<EvalSchema> => {\n return updateEvalRun(evalRunId, { name: newName }, options);\n },\n [updateEvalRun]\n );\n\n return {\n // State\n evalRuns,\n pagination,\n isLoading,\n error,\n\n // Methods\n listEvalRuns,\n getEvalRun,\n executeEval,\n updateEvalRun,\n deleteEvalRuns,\n renameEvalRun,\n };\n}\n",
19
+ "import { useState, useEffect, useCallback } from 'react';\nimport type {\n TraceSummary,\n TraceDetail,\n TraceNode,\n TraceSessionStats,\n ListTracesOptions,\n GetTraceOptions,\n GetTraceSessionStatsOptions,\n} from '@rodrigocoliveira/agno-types';\nimport type {\n PaginatedTracesResult,\n PaginatedTraceSessionStatsResult,\n} from '@rodrigocoliveira/agno-client';\nimport { useAgnoClient } from '../context/AgnoContext';\n\n// Re-export for convenience\nexport type { PaginatedTracesResult, PaginatedTraceSessionStatsResult };\n\n/**\n * Hook for traces management\n *\n * Provides methods to:\n * - List traces with filters (fetchTraces)\n * - Get trace detail or specific span (getTraceDetail)\n * - Get trace session statistics (fetchTraceSessionStats)\n *\n * @example\n * ```tsx\n * const { traces, fetchTraces, isLoading, error } = useAgnoTraces();\n *\n * // Fetch traces for a specific session\n * useEffect(() => {\n * fetchTraces({ session_id: 'my-session-id' });\n * }, []);\n *\n * // Fetch traces with pagination\n * const result = await fetchTraces({ page: 1, limit: 10 });\n * console.log(result.pagination.total_count);\n * ```\n */\nexport function useAgnoTraces() {\n const client = useAgnoClient();\n const [traces, setTraces] = useState<TraceSummary[]>([]);\n const [traceSessionStats, setTraceSessionStats] = useState<TraceSessionStats[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | undefined>();\n\n // Listen to state changes from client\n useEffect(() => {\n const handleStateChange = () => {\n const state = client.getState();\n setTraces(state.traces);\n setTraceSessionStats(state.traceSessionStats);\n };\n\n client.on('state:change', handleStateChange);\n\n // Initialize from current state\n const state = client.getState();\n setTraces(state.traces);\n setTraceSessionStats(state.traceSessionStats);\n\n return () => {\n client.off('state:change', handleStateChange);\n };\n }, [client]);\n\n /**\n * Fetch traces with optional filters\n *\n * @param options - Filter and pagination options\n * @param requestOptions - Optional per-request headers and params\n * @returns Traces result with pagination info\n */\n const fetchTraces = useCallback(\n async (\n options: ListTracesOptions = {},\n requestOptions?: { headers?: Record<string, string>; params?: Record<string, string> }\n ): Promise<PaginatedTracesResult> => {\n setIsLoading(true);\n setError(undefined);\n try {\n const result = await client.fetchTraces(options, requestOptions);\n setTraces(result.traces);\n return result;\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n /**\n * Get trace detail or a specific span\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 const getTraceDetail = useCallback(\n async (\n traceId: string,\n options: GetTraceOptions = {},\n requestOptions?: { headers?: Record<string, string>; params?: Record<string, string> }\n ): Promise<TraceDetail | TraceNode> => {\n setIsLoading(true);\n setError(undefined);\n try {\n return await client.getTraceDetail(traceId, options, requestOptions);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n /**\n * Fetch trace session statistics\n *\n * @param options - Filter and pagination options\n * @param requestOptions - Optional per-request headers and params\n * @returns Trace session stats result with pagination info\n */\n const fetchTraceSessionStats = useCallback(\n async (\n options: GetTraceSessionStatsOptions = {},\n requestOptions?: { headers?: Record<string, string>; params?: Record<string, string> }\n ): Promise<PaginatedTraceSessionStatsResult> => {\n setIsLoading(true);\n setError(undefined);\n try {\n const result = await client.fetchTraceSessionStats(options, requestOptions);\n setTraceSessionStats(result.stats);\n return result;\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n setError(errorMessage);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client]\n );\n\n return {\n /** Current list of traces (from last fetchTraces call) */\n traces,\n /** Current trace session statistics (from last fetchTraceSessionStats call) */\n traceSessionStats,\n /** Fetch traces with optional filters and pagination */\n fetchTraces,\n /** Get trace detail or specific span */\n getTraceDetail,\n /** Fetch trace session statistics */\n fetchTraceSessionStats,\n /** Loading state */\n isLoading,\n /** Error message if last operation failed */\n error,\n };\n}\n"
20
+ ],
21
+ "mappings": "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",
22
+ "debugId": "7C493B5C15A68B3E64756E2164756E21",
23
+ "names": []
24
+ }