@datalayer/agent-runtimes 0.0.9 → 0.0.11

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 (291) hide show
  1. package/README.md +2 -1
  2. package/lib/{examples/components → components}/AgentConfiguration.d.ts +54 -9
  3. package/lib/components/AgentConfiguration.js +585 -0
  4. package/lib/{examples/components → components}/FooterMetrics.d.ts +1 -2
  5. package/lib/{examples/components → components}/Header.d.ts +1 -6
  6. package/lib/{examples/components → components}/Header.js +5 -39
  7. package/lib/{examples/components → components}/HeaderControls.d.ts +1 -2
  8. package/lib/{examples/components → components}/HeaderControls.js +1 -1
  9. package/lib/{examples/components → components}/LexicalEditor.d.ts +2 -3
  10. package/lib/{examples/components → components}/LexicalEditor.js +2 -2
  11. package/lib/components/MainContent.d.ts +34 -0
  12. package/lib/{examples/components → components}/MainContent.js +18 -9
  13. package/lib/components/McpServerManager.d.ts +30 -0
  14. package/lib/components/McpServerManager.js +331 -0
  15. package/lib/{examples/components → components}/MockFileBrowser.d.ts +1 -2
  16. package/lib/{examples/components → components}/SessionTabs.d.ts +2 -3
  17. package/lib/{examples/components → components}/TimeTravel.d.ts +1 -2
  18. package/lib/components/chat/components/AgentDetails.d.ts +3 -1
  19. package/lib/components/chat/components/AgentDetails.js +472 -22
  20. package/lib/components/chat/components/Chat.d.ts +37 -3
  21. package/lib/components/chat/components/Chat.js +29 -10
  22. package/lib/components/chat/components/ChatFloating.d.ts +27 -2
  23. package/lib/components/chat/components/ChatFloating.js +17 -10
  24. package/lib/components/chat/components/ChatPopupStandalone.js +1 -1
  25. package/lib/components/chat/components/ChatSidebar.d.ts +1 -1
  26. package/lib/components/chat/components/ChatStandalone.d.ts +1 -1
  27. package/lib/components/chat/components/ChatStandalone.js +1 -1
  28. package/lib/components/chat/components/ContextDistribution.d.ts +70 -6
  29. package/lib/components/chat/components/ContextDistribution.js +13 -6
  30. package/lib/components/chat/components/ContextInspector.d.ts +81 -0
  31. package/lib/components/chat/components/ContextInspector.js +263 -0
  32. package/lib/components/chat/components/ContextPanel.d.ts +112 -0
  33. package/lib/components/chat/components/ContextPanel.js +368 -0
  34. package/lib/components/chat/components/base/ChatBase.d.ts +74 -19
  35. package/lib/components/chat/components/base/ChatBase.js +296 -37
  36. package/lib/components/chat/components/index.d.ts +3 -1
  37. package/lib/components/chat/components/index.js +2 -0
  38. package/lib/components/chat/extensions/ExtensionRegistry.d.ts +1 -1
  39. package/lib/components/chat/extensions/index.d.ts +1 -0
  40. package/lib/components/chat/index.d.ts +3 -3
  41. package/lib/components/chat/protocols/AGUIAdapter.js +24 -4
  42. package/lib/components/chat/protocols/VercelAIAdapter.js +35 -1
  43. package/lib/components/chat/store/chatStore.d.ts +2 -3
  44. package/lib/components/chat/store/conversationStore.d.ts +83 -0
  45. package/lib/components/chat/store/conversationStore.js +174 -0
  46. package/lib/components/chat/store/index.d.ts +2 -1
  47. package/lib/components/chat/store/index.js +1 -0
  48. package/lib/components/chat/types/inference.d.ts +17 -0
  49. package/lib/components/chat/types/protocol.d.ts +10 -0
  50. package/lib/components/index.d.ts +23 -0
  51. package/lib/components/index.js +11 -0
  52. package/lib/config/agents/code-ai/agents.d.ts +25 -0
  53. package/lib/config/agents/code-ai/agents.js +70 -0
  54. package/lib/config/agents/code-ai/index.d.ts +1 -0
  55. package/lib/config/agents/code-ai/index.js +5 -0
  56. package/lib/config/agents/codemode-paper/agents.d.ts +29 -0
  57. package/lib/config/agents/codemode-paper/agents.js +288 -0
  58. package/lib/config/agents/codemode-paper/index.d.ts +1 -0
  59. package/lib/config/agents/codemode-paper/index.js +5 -0
  60. package/lib/config/agents/datalayer-ai/agents.d.ts +29 -0
  61. package/lib/config/agents/datalayer-ai/agents.js +267 -0
  62. package/lib/config/agents/datalayer-ai/index.d.ts +1 -0
  63. package/lib/config/agents/datalayer-ai/index.js +5 -0
  64. package/lib/config/agents/index.d.ts +19 -0
  65. package/lib/config/agents/index.js +38 -0
  66. package/lib/config/envvars.d.ts +28 -0
  67. package/lib/config/envvars.js +115 -0
  68. package/lib/config/index.d.ts +5 -0
  69. package/lib/config/index.js +9 -0
  70. package/lib/config/mcpServers.d.ts +18 -0
  71. package/lib/config/mcpServers.js +153 -0
  72. package/lib/config/skills.d.ts +27 -0
  73. package/lib/config/skills.js +60 -0
  74. package/lib/{lib → config}/utils.d.ts +1 -1
  75. package/lib/{lib → config}/utils.js +2 -2
  76. package/lib/examples/AgentRuntimeLexical2Example.d.ts +1 -0
  77. package/lib/examples/AgentRuntimeLexical2Example.js +3 -2
  78. package/lib/examples/AgentRuntimeLexicalExample.d.ts +1 -0
  79. package/lib/examples/AgentRuntimeLexicalExample.js +5 -3
  80. package/lib/examples/AgentRuntimeLexicalSidebarExample.d.ts +1 -0
  81. package/lib/examples/AgentRuntimeLexicalSidebarExample.js +3 -3
  82. package/lib/examples/AgentRuntimeNotebookExample.js +1 -1
  83. package/lib/examples/AgentSpaceFormExample.d.ts +2 -2
  84. package/lib/examples/AgentSpaceFormExample.js +215 -35
  85. package/lib/examples/CopilotKitLexicalExample.d.ts +1 -0
  86. package/lib/examples/CopilotKitLexicalExample.js +3 -2
  87. package/lib/examples/index.d.ts +1 -0
  88. package/lib/examples/stores/notebooks/NotebookExample2.ipynb.json +43 -43
  89. package/lib/hooks/useAGUI.d.ts +1 -1
  90. package/lib/hooks/useAGUI.js +1 -1
  91. package/lib/identity/types.d.ts +1 -1
  92. package/lib/index.d.ts +2 -0
  93. package/lib/index.js +1 -0
  94. package/lib/runtime/index.d.ts +3 -0
  95. package/lib/runtime/runtimeStore.d.ts +3 -4
  96. package/lib/runtime/useAgentConnection.d.ts +2 -3
  97. package/lib/runtime/useAgentRuntime.d.ts +2 -3
  98. package/lib/stories/Cell.stories.js +1 -1
  99. package/lib/tools/adapters/agent-runtimes/notebookHooks.js +1 -0
  100. package/lib/tools/adapters/copilotkit/notebookHooks.js +1 -0
  101. package/lib/types.d.ts +158 -0
  102. package/package.json +5 -6
  103. package/scripts/apply-patches.sh +1 -1
  104. package/scripts/codegen/generate_agents.py +863 -0
  105. package/scripts/codegen/generate_envvars.py +302 -0
  106. package/scripts/codegen/generate_mcp_servers.py +436 -0
  107. package/scripts/codegen/generate_skills.py +334 -0
  108. package/scripts/download-ai-elements.py +35 -20
  109. package/scripts/sync-jupyter.sh +6 -0
  110. package/lib/components/ui/accordion.d.ts +0 -7
  111. package/lib/components/ui/accordion.js +0 -22
  112. package/lib/components/ui/alert-dialog.d.ts +0 -14
  113. package/lib/components/ui/alert-dialog.js +0 -43
  114. package/lib/components/ui/alert.d.ts +0 -9
  115. package/lib/components/ui/alert.js +0 -24
  116. package/lib/components/ui/aspect-ratio.d.ts +0 -3
  117. package/lib/components/ui/aspect-ratio.js +0 -11
  118. package/lib/components/ui/avatar.d.ts +0 -6
  119. package/lib/components/ui/avatar.js +0 -18
  120. package/lib/components/ui/badge.d.ts +0 -9
  121. package/lib/components/ui/badge.js +0 -22
  122. package/lib/components/ui/breadcrumb.d.ts +0 -11
  123. package/lib/components/ui/breadcrumb.js +0 -27
  124. package/lib/components/ui/button-group.d.ts +0 -11
  125. package/lib/components/ui/button-group.js +0 -31
  126. package/lib/components/ui/button.d.ts +0 -13
  127. package/lib/components/ui/button.js +0 -39
  128. package/lib/components/ui/calendar.d.ts +0 -8
  129. package/lib/components/ui/calendar.js +0 -80
  130. package/lib/components/ui/card.d.ts +0 -9
  131. package/lib/components/ui/card.js +0 -24
  132. package/lib/components/ui/carousel.d.ts +0 -19
  133. package/lib/components/ui/carousel.js +0 -95
  134. package/lib/components/ui/chart.d.ts +0 -53
  135. package/lib/components/ui/chart.js +0 -136
  136. package/lib/components/ui/checkbox.d.ts +0 -4
  137. package/lib/components/ui/checkbox.js +0 -13
  138. package/lib/components/ui/collapsible.d.ts +0 -5
  139. package/lib/components/ui/collapsible.js +0 -17
  140. package/lib/components/ui/command.d.ts +0 -18
  141. package/lib/components/ui/command.js +0 -38
  142. package/lib/components/ui/context-menu.d.ts +0 -25
  143. package/lib/components/ui/context-menu.js +0 -55
  144. package/lib/components/ui/dialog.d.ts +0 -15
  145. package/lib/components/ui/dialog.js +0 -40
  146. package/lib/components/ui/drawer.d.ts +0 -13
  147. package/lib/components/ui/drawer.js +0 -39
  148. package/lib/components/ui/dropdown-menu.d.ts +0 -25
  149. package/lib/components/ui/dropdown-menu.js +0 -55
  150. package/lib/components/ui/empty.d.ts +0 -11
  151. package/lib/components/ui/empty.js +0 -37
  152. package/lib/components/ui/field.d.ts +0 -24
  153. package/lib/components/ui/field.js +0 -80
  154. package/lib/components/ui/form.d.ts +0 -24
  155. package/lib/components/ui/form.js +0 -63
  156. package/lib/components/ui/hover-card.d.ts +0 -6
  157. package/lib/components/ui/hover-card.js +0 -18
  158. package/lib/components/ui/input-group.d.ts +0 -19
  159. package/lib/components/ui/input-group.js +0 -69
  160. package/lib/components/ui/input-otp.d.ts +0 -11
  161. package/lib/components/ui/input-otp.js +0 -25
  162. package/lib/components/ui/input.d.ts +0 -3
  163. package/lib/components/ui/input.js +0 -6
  164. package/lib/components/ui/item.d.ts +0 -23
  165. package/lib/components/ui/item.js +0 -66
  166. package/lib/components/ui/kbd.d.ts +0 -3
  167. package/lib/components/ui/kbd.js +0 -13
  168. package/lib/components/ui/label.d.ts +0 -4
  169. package/lib/components/ui/label.js +0 -12
  170. package/lib/components/ui/menubar.d.ts +0 -26
  171. package/lib/components/ui/menubar.js +0 -58
  172. package/lib/components/ui/navigation-menu.d.ts +0 -14
  173. package/lib/components/ui/navigation-menu.js +0 -31
  174. package/lib/components/ui/pagination.d.ts +0 -13
  175. package/lib/components/ui/pagination.js +0 -29
  176. package/lib/components/ui/popover.d.ts +0 -7
  177. package/lib/components/ui/popover.js +0 -21
  178. package/lib/components/ui/progress.d.ts +0 -4
  179. package/lib/components/ui/progress.js +0 -12
  180. package/lib/components/ui/radio-group.d.ts +0 -5
  181. package/lib/components/ui/radio-group.js +0 -16
  182. package/lib/components/ui/resizable.d.ts +0 -8
  183. package/lib/components/ui/resizable.js +0 -19
  184. package/lib/components/ui/scroll-area.d.ts +0 -5
  185. package/lib/components/ui/scroll-area.js +0 -17
  186. package/lib/components/ui/select.d.ts +0 -15
  187. package/lib/components/ui/select.js +0 -42
  188. package/lib/components/ui/separator.d.ts +0 -4
  189. package/lib/components/ui/separator.js +0 -12
  190. package/lib/components/ui/sheet.d.ts +0 -13
  191. package/lib/components/ui/sheet.js +0 -44
  192. package/lib/components/ui/sidebar.d.ts +0 -69
  193. package/lib/components/ui/sidebar.js +0 -216
  194. package/lib/components/ui/skeleton.d.ts +0 -2
  195. package/lib/components/ui/skeleton.js +0 -10
  196. package/lib/components/ui/slider.d.ts +0 -4
  197. package/lib/components/ui/slider.js +0 -18
  198. package/lib/components/ui/sonner.d.ts +0 -3
  199. package/lib/components/ui/sonner.js +0 -25
  200. package/lib/components/ui/spinner.d.ts +0 -2
  201. package/lib/components/ui/spinner.js +0 -11
  202. package/lib/components/ui/switch.d.ts +0 -4
  203. package/lib/components/ui/switch.js +0 -12
  204. package/lib/components/ui/table.d.ts +0 -10
  205. package/lib/components/ui/table.js +0 -32
  206. package/lib/components/ui/tabs.d.ts +0 -7
  207. package/lib/components/ui/tabs.js +0 -21
  208. package/lib/components/ui/textarea.d.ts +0 -3
  209. package/lib/components/ui/textarea.js +0 -6
  210. package/lib/components/ui/toast.d.ts +0 -15
  211. package/lib/components/ui/toast.js +0 -38
  212. package/lib/components/ui/toaster.d.ts +0 -1
  213. package/lib/components/ui/toaster.js +0 -14
  214. package/lib/components/ui/toggle-group.d.ts +0 -9
  215. package/lib/components/ui/toggle-group.js +0 -26
  216. package/lib/components/ui/toggle.d.ts +0 -9
  217. package/lib/components/ui/toggle.js +0 -30
  218. package/lib/components/ui/tooltip.d.ts +0 -7
  219. package/lib/components/ui/tooltip.js +0 -21
  220. package/lib/components/vercel-ai-elements/artifact.d.ts +0 -23
  221. package/lib/components/vercel-ai-elements/artifact.js +0 -24
  222. package/lib/components/vercel-ai-elements/code-block.d.ts +0 -17
  223. package/lib/components/vercel-ai-elements/code-block.js +0 -94
  224. package/lib/components/vercel-ai-elements/conversation.d.ts +0 -15
  225. package/lib/components/vercel-ai-elements/conversation.js +0 -21
  226. package/lib/components/vercel-ai-elements/loader.d.ts +0 -5
  227. package/lib/components/vercel-ai-elements/loader.js +0 -8
  228. package/lib/components/vercel-ai-elements/message.d.ts +0 -46
  229. package/lib/components/vercel-ai-elements/message.js +0 -109
  230. package/lib/components/vercel-ai-elements/model-selector.d.ts +0 -35
  231. package/lib/components/vercel-ai-elements/model-selector.js +0 -22
  232. package/lib/components/vercel-ai-elements/prompt-input.d.ts +0 -195
  233. package/lib/components/vercel-ai-elements/prompt-input.js +0 -589
  234. package/lib/components/vercel-ai-elements/reasoning.d.ts +0 -26
  235. package/lib/components/vercel-ai-elements/reasoning.js +0 -80
  236. package/lib/components/vercel-ai-elements/shimmer.d.ts +0 -9
  237. package/lib/components/vercel-ai-elements/shimmer.js +0 -22
  238. package/lib/components/vercel-ai-elements/sources.d.ts +0 -12
  239. package/lib/components/vercel-ai-elements/sources.js +0 -13
  240. package/lib/components/vercel-ai-elements/suggestion.d.ts +0 -10
  241. package/lib/components/vercel-ai-elements/suggestion.js +0 -16
  242. package/lib/components/vercel-ai-elements/tool.d.ts +0 -23
  243. package/lib/components/vercel-ai-elements/tool.js +0 -52
  244. package/lib/examples/components/AgentConfiguration.js +0 -382
  245. package/lib/examples/components/MainContent.d.ts +0 -19
  246. package/lib/examples/components/index.d.ts +0 -10
  247. package/lib/examples/components/index.js +0 -13
  248. package/lib/examples/vercel-ai-elements/VercelAiElementsShowcase.d.ts +0 -12
  249. package/lib/examples/vercel-ai-elements/VercelAiElementsShowcase.js +0 -69
  250. package/lib/examples/vercel-ai-elements/components/ArtifactShowcase.d.ts +0 -1
  251. package/lib/examples/vercel-ai-elements/components/ArtifactShowcase.js +0 -85
  252. package/lib/examples/vercel-ai-elements/components/CodeBlockShowcase.d.ts +0 -1
  253. package/lib/examples/vercel-ai-elements/components/CodeBlockShowcase.js +0 -62
  254. package/lib/examples/vercel-ai-elements/components/ConversationShowcase.d.ts +0 -1
  255. package/lib/examples/vercel-ai-elements/components/ConversationShowcase.js +0 -51
  256. package/lib/examples/vercel-ai-elements/components/LoaderShowcase.d.ts +0 -1
  257. package/lib/examples/vercel-ai-elements/components/LoaderShowcase.js +0 -9
  258. package/lib/examples/vercel-ai-elements/components/MessageShowcase.d.ts +0 -1
  259. package/lib/examples/vercel-ai-elements/components/MessageShowcase.js +0 -56
  260. package/lib/examples/vercel-ai-elements/components/ModelSelectorShowcase.d.ts +0 -1
  261. package/lib/examples/vercel-ai-elements/components/ModelSelectorShowcase.js +0 -50
  262. package/lib/examples/vercel-ai-elements/components/PromptInputShowcase.d.ts +0 -1
  263. package/lib/examples/vercel-ai-elements/components/PromptInputShowcase.js +0 -16
  264. package/lib/examples/vercel-ai-elements/components/ReasoningShowcase.d.ts +0 -1
  265. package/lib/examples/vercel-ai-elements/components/ReasoningShowcase.js +0 -72
  266. package/lib/examples/vercel-ai-elements/components/ShimmerShowcase.d.ts +0 -1
  267. package/lib/examples/vercel-ai-elements/components/ShimmerShowcase.js +0 -9
  268. package/lib/examples/vercel-ai-elements/components/SourcesShowcase.d.ts +0 -1
  269. package/lib/examples/vercel-ai-elements/components/SourcesShowcase.js +0 -43
  270. package/lib/examples/vercel-ai-elements/components/SuggestionShowcase.d.ts +0 -1
  271. package/lib/examples/vercel-ai-elements/components/SuggestionShowcase.js +0 -31
  272. package/lib/examples/vercel-ai-elements/components/ToolShowcase.d.ts +0 -1
  273. package/lib/examples/vercel-ai-elements/components/ToolShowcase.js +0 -54
  274. package/lib/examples/vercel-ai-elements/index.d.ts +0 -13
  275. package/lib/examples/vercel-ai-elements/index.js +0 -17
  276. package/lib/examples/vercel-ai-elements/main.d.ts +0 -1
  277. package/lib/examples/vercel-ai-elements/main.js +0 -9
  278. package/lib/examples/vercel-ai-elements/showcase.css +0 -128
  279. package/lib/hooks/useToast.d.ts +0 -44
  280. package/lib/hooks/useToast.js +0 -128
  281. package/patches/@datalayer+jupyter-lexical+1.0.8.patch +0 -11628
  282. package/patches/@datalayer+jupyter-react+2.0.2.patch +0 -5338
  283. package/style/showcase-vercel-ai.css +0 -137
  284. /package/lib/{examples/components → components}/FooterMetrics.js +0 -0
  285. /package/lib/{examples/components → components}/MockFileBrowser.js +0 -0
  286. /package/lib/{examples/components → components}/SessionTabs.js +0 -0
  287. /package/lib/{examples/components → components}/TimeTravel.js +0 -0
  288. /package/lib/{models → types}/AIAgent.d.ts +0 -0
  289. /package/lib/{models → types}/AIAgent.js +0 -0
  290. /package/lib/{models → types}/index.d.ts +0 -0
  291. /package/lib/{models → types}/index.js +0 -0
@@ -1,382 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- /*
3
- * Copyright (c) 2025-2026 Datalayer, Inc.
4
- * Distributed under the terms of the Modified BSD License.
5
- */
6
- import { useMemo, useState, useCallback } from 'react';
7
- import { Text, TextInput, Button, FormControl, Select, Checkbox, Spinner, Flash, Label, IconButton, } from '@primer/react';
8
- import { ToolsIcon, KeyIcon, SyncIcon, PlusIcon, XIcon, LinkExternalIcon, } from '@primer/octicons-react';
9
- import { useQuery } from '@tanstack/react-query';
10
- import { Box } from '@datalayer/primer-addons';
11
- import { IdentityConnect, useIdentity } from '../../identity';
12
- import { IdentityCard } from '../../components/chat';
13
- /**
14
- * Token-based identity providers that can be connected via API key
15
- */
16
- const TOKEN_PROVIDERS = [
17
- {
18
- provider: 'kaggle',
19
- name: 'Kaggle',
20
- description: 'Access Kaggle datasets and notebooks',
21
- iconUrl: 'https://www.kaggle.com/static/images/favicon.ico',
22
- color: '#20beff',
23
- helpUrl: 'https://www.kaggle.com/settings/account',
24
- helpText: 'Get your API key from the Account page',
25
- placeholder: 'Enter your Kaggle API key',
26
- },
27
- ];
28
- /**
29
- * Combined component that shows:
30
- * - Connected identities with token status (from AgentIdentity)
31
- * - Connect buttons only for providers NOT yet connected (from IdentityConnect)
32
- * - Token input for token-based providers (Kaggle, etc.)
33
- */
34
- function IdentityConnectWithStatus({ identityProviders = {}, disabled = false, onConnect, onDisconnect, }) {
35
- const { identities, connectWithToken, disconnect } = useIdentity();
36
- const [expandedTokenProvider, setExpandedTokenProvider] = useState(null);
37
- const [tokenInput, setTokenInput] = useState('');
38
- const [isConnecting, setIsConnecting] = useState(false);
39
- // Get list of connected provider names
40
- const connectedProviders = useMemo(() => new Set(identities.map(id => id.provider)), [identities]);
41
- // Get providers that have config and are already connected (OAuth providers)
42
- // Plus any token-based providers that are connected (no config needed)
43
- const connectedIdentities = useMemo(() => {
44
- const providerKeys = Object.keys(identityProviders);
45
- return identities.filter(id => providerKeys.includes(id.provider) ||
46
- (id.authType === 'token' && id.isConnected));
47
- }, [identities, identityProviders]);
48
- // Get OAuth providers that are NOT yet connected
49
- const unconnectedProviders = useMemo(() => {
50
- const providerKeys = Object.keys(identityProviders);
51
- const unconnected = {};
52
- for (const provider of providerKeys) {
53
- if (!connectedProviders.has(provider)) {
54
- unconnected[provider] = identityProviders[provider];
55
- }
56
- }
57
- return unconnected;
58
- }, [identityProviders, connectedProviders]);
59
- // Get token providers that are NOT yet connected
60
- const unconnectedTokenProviders = useMemo(() => {
61
- return TOKEN_PROVIDERS.filter(tp => !connectedProviders.has(tp.provider));
62
- }, [connectedProviders]);
63
- const hasUnconnected = Object.keys(unconnectedProviders).length > 0;
64
- const hasUnconnectedToken = unconnectedTokenProviders.length > 0;
65
- // Check if there's anything to show
66
- const hasContent = connectedIdentities.length > 0 || hasUnconnected || hasUnconnectedToken;
67
- // Handle token connection
68
- const handleTokenConnect = useCallback(async (provider, displayName, iconUrl) => {
69
- if (!tokenInput.trim())
70
- return;
71
- setIsConnecting(true);
72
- try {
73
- const identity = await connectWithToken(provider, tokenInput.trim(), {
74
- displayName,
75
- iconUrl,
76
- });
77
- onConnect?.(identity);
78
- setTokenInput('');
79
- setExpandedTokenProvider(null);
80
- }
81
- catch (err) {
82
- console.error(`Failed to connect ${provider}:`, err);
83
- }
84
- finally {
85
- setIsConnecting(false);
86
- }
87
- }, [tokenInput, connectWithToken, onConnect]);
88
- // Handle token disconnect
89
- const handleTokenDisconnect = useCallback(async (provider) => {
90
- try {
91
- await disconnect(provider);
92
- onDisconnect?.(provider);
93
- }
94
- catch (err) {
95
- console.error(`Failed to disconnect ${provider}:`, err);
96
- }
97
- }, [disconnect, onDisconnect]);
98
- if (!hasContent) {
99
- return null;
100
- }
101
- return (_jsxs(Box, { sx: { display: 'flex', flexDirection: 'column', gap: 3 }, children: [connectedIdentities.length > 0 && (_jsx(Box, { sx: { display: 'flex', flexDirection: 'column', gap: 2 }, children: connectedIdentities.map(identity => (_jsx(IdentityCard, { identity: identity, providerConfig: identityProviders?.[identity.provider], showExpirationDetails: true, allowReconnect: !disabled && identity.authType !== 'token', onConnect: onConnect, onDisconnect: identity.authType === 'token'
102
- ? () => handleTokenDisconnect(identity.provider)
103
- : onDisconnect }, identity.provider))) })), hasUnconnected && (_jsx(IdentityConnect, { providers: unconnectedProviders, layout: "list", showHeader: false, size: "medium", showDescriptions: true, disabled: disabled, onConnect: onConnect, onDisconnect: onDisconnect })), hasUnconnectedToken && !disabled && (_jsx(Box, { sx: { display: 'flex', flexDirection: 'column', gap: 2 }, children: unconnectedTokenProviders.map(tp => (_jsxs(Box, { sx: {
104
- border: '1px solid',
105
- borderColor: expandedTokenProvider === tp.provider
106
- ? tp.color
107
- : 'border.default',
108
- borderRadius: 2,
109
- overflow: 'hidden',
110
- }, children: [_jsxs(Box, { as: "button", onClick: () => {
111
- setExpandedTokenProvider(expandedTokenProvider === tp.provider ? null : tp.provider);
112
- setTokenInput('');
113
- }, sx: {
114
- width: '100%',
115
- display: 'flex',
116
- alignItems: 'center',
117
- gap: 2,
118
- padding: 2,
119
- backgroundColor: 'canvas.subtle',
120
- border: 'none',
121
- cursor: 'pointer',
122
- '&:hover': {
123
- backgroundColor: 'canvas.inset',
124
- },
125
- }, children: [tp.iconUrl ? (_jsx("img", { src: tp.iconUrl, alt: tp.name, style: { width: 20, height: 20 } })) : (_jsx(KeyIcon, { size: 20 })), _jsxs(Box, { sx: { flex: 1, textAlign: 'left' }, children: [_jsxs(Text, { sx: { fontWeight: 'semibold', display: 'block' }, children: ["Connect ", tp.name] }), _jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: tp.description })] }), _jsx(PlusIcon, { size: 16 })] }), expandedTokenProvider === tp.provider && (_jsxs(Box, { sx: { padding: 3, backgroundColor: 'canvas.default' }, children: [_jsxs(Box, { sx: {
126
- mb: 2,
127
- display: 'flex',
128
- alignItems: 'center',
129
- gap: 1,
130
- }, children: [_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: tp.helpText }), _jsx(Button, { as: "a", href: tp.helpUrl, target: "_blank", rel: "noopener noreferrer", variant: "invisible", size: "small", leadingVisual: LinkExternalIcon, sx: { fontSize: 0 }, children: "Get API Key" })] }), _jsxs(Box, { sx: { display: 'flex', gap: 2 }, children: [_jsx(TextInput, { type: "password", placeholder: tp.placeholder, value: tokenInput, onChange: e => setTokenInput(e.target.value), onKeyDown: e => {
131
- if (e.key === 'Enter' && tokenInput.trim()) {
132
- handleTokenConnect(tp.provider, tp.name, tp.iconUrl);
133
- }
134
- }, sx: { flex: 1 }, disabled: isConnecting, autoFocus: true }), _jsx(Button, { onClick: () => handleTokenConnect(tp.provider, tp.name, tp.iconUrl), disabled: !tokenInput.trim() || isConnecting, variant: "primary", children: isConnecting ? _jsx(Spinner, { size: "small" }) : 'Connect' }), _jsx(IconButton, { icon: XIcon, "aria-label": "Cancel", onClick: () => {
135
- setExpandedTokenProvider(null);
136
- setTokenInput('');
137
- }, variant: "invisible" })] })] }))] }, tp.provider))) }))] }));
138
- }
139
- const AGENT_LIBRARIES = [
140
- {
141
- value: 'pydantic-ai',
142
- label: 'Pydantic AI',
143
- description: 'Type-safe agents with Pydantic models',
144
- },
145
- {
146
- value: 'langchain',
147
- label: 'LangChain',
148
- description: 'Complex chains and agent workflows',
149
- disabled: true,
150
- },
151
- {
152
- value: 'jupyter-ai',
153
- label: 'Simple AI',
154
- description: 'Simple notebook integration',
155
- disabled: true,
156
- },
157
- ];
158
- const TRANSPORTS = [
159
- {
160
- value: 'ag-ui',
161
- label: 'AG-UI',
162
- description: 'Pydantic AI native UI transport',
163
- },
164
- {
165
- value: 'acp',
166
- label: 'ACP (Agent Client Protocol)',
167
- description: 'Standard WebSocket-based transport',
168
- },
169
- {
170
- value: 'vercel-ai',
171
- label: 'Vercel AI',
172
- description: 'HTTP streaming with Vercel AI',
173
- },
174
- {
175
- value: 'vercel-ai-jupyter',
176
- label: 'Vercel AI (Jupyter)',
177
- description: 'Vercel AI via Jupyter server endpoint',
178
- },
179
- {
180
- value: 'a2a',
181
- label: 'A2A (Agent-to-Agent)',
182
- description: 'Inter-agent communication',
183
- },
184
- ];
185
- const EXTENSIONS = [
186
- {
187
- value: 'mcp-ui',
188
- label: 'MCP-UI',
189
- description: 'MCP UI resources extension',
190
- },
191
- {
192
- value: 'a2ui',
193
- label: 'A2UI',
194
- description: 'Agent-to-UI extension',
195
- },
196
- ];
197
- /**
198
- * Agent Configuration Component
199
- *
200
- * Form for configuring agent connection settings.
201
- */
202
- export const AgentConfiguration = ({ agentLibrary, transport, extensions, wsUrl, baseUrl, agentName, model, agents, selectedAgentId, isCreatingAgent = false, createError = null, enableCodemode = false, allowDirectToolCalls = false, enableToolReranker = false, availableSkills = [], selectedSkills = [], selectedMcpServers = [], identityProviders, onIdentityConnect, onIdentityDisconnect, onAgentLibraryChange, onTransportChange, onExtensionsChange, onWsUrlChange, onBaseUrlChange, onAgentNameChange, onModelChange, onAgentSelect, onConnect, onEnableCodemodeChange, onAllowDirectToolCallsChange, onEnableToolRerankerChange, onSelectedSkillsChange, onSelectedMcpServersChange, }) => {
203
- // Fetch MCP servers configuration from the backend
204
- const configQuery = useQuery({
205
- queryKey: ['agent-config', baseUrl],
206
- queryFn: async () => {
207
- const response = await fetch(`${baseUrl}/api/v1/configure`);
208
- if (!response.ok) {
209
- throw new Error('Failed to fetch configuration');
210
- }
211
- return response.json();
212
- },
213
- enabled: !!baseUrl,
214
- staleTime: 1000 * 60 * 5, // 5 minutes
215
- retry: 1,
216
- });
217
- // Fetch skills from the backend (only when codemode is enabled)
218
- const skillsQuery = useQuery({
219
- queryKey: ['agent-skills', baseUrl],
220
- queryFn: async () => {
221
- const response = await fetch(`${baseUrl}/api/v1/skills`);
222
- if (!response.ok) {
223
- throw new Error('Failed to fetch skills');
224
- }
225
- return response.json();
226
- },
227
- enabled: !!baseUrl && enableCodemode,
228
- staleTime: 1000 * 60 * 5, // 5 minutes
229
- retry: 1,
230
- });
231
- const mcpServers = configQuery.data?.mcpServers || [];
232
- const models = configQuery.data?.models || [];
233
- // Use fetched skills when codemode is enabled, otherwise use passed availableSkills (which may be empty)
234
- const fetchedSkills = skillsQuery.data?.skills || [];
235
- const displaySkills = enableCodemode ? fetchedSkills : availableSkills;
236
- const previewServers = selectedMcpServers.length
237
- ? mcpServers.filter(server => selectedMcpServers.includes(server.id))
238
- : [];
239
- const skillsEnabled = selectedSkills.length > 0;
240
- // Handle MCP server checkbox change
241
- const handleMcpServerChange = (serverId, checked) => {
242
- if (checked) {
243
- onSelectedMcpServersChange?.([...selectedMcpServers, serverId]);
244
- }
245
- else {
246
- onSelectedMcpServersChange?.(selectedMcpServers.filter(id => id !== serverId));
247
- }
248
- };
249
- const handleSkillChange = (skillId, checked) => {
250
- if (checked) {
251
- onSelectedSkillsChange?.([...selectedSkills, skillId]);
252
- }
253
- else {
254
- onSelectedSkillsChange?.(selectedSkills.filter(id => id !== skillId));
255
- }
256
- };
257
- // MCP servers are disabled for existing agents (new-agent only)
258
- const mcpServersDisabled = selectedAgentId !== 'new-agent';
259
- // Determine which extensions are enabled based on transport
260
- const isExtensionEnabled = (ext) => {
261
- if (selectedAgentId !== 'new-agent')
262
- return false;
263
- if (transport === 'ag-ui')
264
- return true; // Both mcp-ui and a2ui enabled
265
- if (transport === 'a2a')
266
- return ext === 'a2ui'; // Only a2ui enabled
267
- return false; // All others disabled
268
- };
269
- // Handle extension checkbox change
270
- const handleExtensionChange = (ext, checked) => {
271
- if (checked) {
272
- onExtensionsChange([...extensions, ext]);
273
- }
274
- else {
275
- onExtensionsChange(extensions.filter(e => e !== ext));
276
- }
277
- };
278
- return (_jsxs(Box, { sx: {
279
- padding: 3,
280
- border: '1px solid',
281
- borderColor: 'border.default',
282
- borderRadius: 2,
283
- backgroundColor: 'canvas.subtle',
284
- }, children: [_jsx(Text, { sx: {
285
- fontSize: 2,
286
- fontWeight: 'bold',
287
- display: 'block',
288
- marginBottom: 3,
289
- }, children: "Create a new Agent" }), _jsxs(FormControl, { sx: { marginBottom: 3 }, children: [_jsx(FormControl.Label, { children: "Available Agents" }), _jsxs(Select, { value: selectedAgentId, onChange: e => onAgentSelect(e.target.value), sx: { width: '100%' }, children: [_jsx(Select.Option, { value: "new-agent", children: "+ New Agent..." }), agents.map(agent => (_jsxs(Select.Option, { value: agent.id, children: [agent.status === 'running' && '● ', agent.name] }, agent.id)))] }), _jsx(FormControl.Caption, { children: selectedAgentId === 'new-agent'
290
- ? 'Configure a new custom agent'
291
- : 'Selected agent - form fields below are disabled' })] }), _jsxs(FormControl, { sx: { marginBottom: 3 }, children: [_jsx(FormControl.Label, { children: "Agent Name" }), _jsx(TextInput, { value: agentName, onChange: e => onAgentNameChange(e.target.value), disabled: selectedAgentId !== 'new-agent', placeholder: "demo-agent", sx: { width: '100%' } }), _jsx(FormControl.Caption, { children: "The name of the agent to connect to" })] }), _jsxs(FormControl, { sx: { marginBottom: 3 }, children: [_jsx(FormControl.Label, { children: transport === 'acp' ? 'WebSocket URL' : 'Base URL' }), _jsx(TextInput, { value: transport === 'acp' ? wsUrl : baseUrl, onChange: e => transport === 'acp'
292
- ? onWsUrlChange(e.target.value)
293
- : onBaseUrlChange(e.target.value), disabled: selectedAgentId !== 'new-agent', placeholder: transport === 'acp'
294
- ? 'ws://localhost:8000/api/v1/acp/ws'
295
- : 'http://localhost:8000', sx: { width: '100%' } }), _jsx(FormControl.Caption, { children: transport === 'acp'
296
- ? 'The WebSocket endpoint of your agent-runtimes server'
297
- : 'The base URL of your agent-runtimes server' })] }), _jsxs(Box, { sx: { display: 'flex', gap: 3, marginBottom: 3 }, children: [_jsxs(FormControl, { sx: { flex: 1 }, children: [_jsx(FormControl.Label, { children: "Agent Library" }), _jsx(Select, { value: agentLibrary, onChange: e => onAgentLibraryChange(e.target.value), disabled: selectedAgentId !== 'new-agent', sx: { width: '100%' }, children: AGENT_LIBRARIES.map(lib => (_jsxs(Select.Option, { value: lib.value, disabled: lib.disabled, children: [lib.label, lib.disabled && ' (Coming Soon)'] }, lib.value))) })] }), _jsxs(FormControl, { sx: { flex: 1 }, children: [_jsx(FormControl.Label, { children: "Model" }), _jsx(Select, { value: model, onChange: e => onModelChange(e.target.value), disabled: selectedAgentId !== 'new-agent' || models.length === 0, sx: { width: '100%' }, children: models.length === 0 ? (_jsx(Select.Option, { value: "", children: "Loading models..." })) : (models.map(m => (_jsxs(Select.Option, { value: m.id, disabled: !m.isAvailable, children: [m.name, !m.isAvailable && ' (API key required)'] }, m.id)))) })] }), _jsxs(FormControl, { sx: { flex: 1 }, children: [_jsx(FormControl.Label, { children: "Transport" }), _jsx(Select, { value: transport, onChange: e => onTransportChange(e.target.value), disabled: selectedAgentId !== 'new-agent', sx: { width: '100%' }, children: TRANSPORTS.map(t => (_jsx(Select.Option, { value: t.value, children: t.label }, t.value))) })] }), _jsxs(FormControl, { sx: { flex: 1 }, children: [_jsx(FormControl.Label, { children: "Extensions" }), _jsx(Box, { sx: { display: 'flex', flexDirection: 'column', gap: 2 }, children: EXTENSIONS.map(ext => (_jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 2 }, children: [_jsx(Checkbox, { value: ext.value, checked: extensions.includes(ext.value), disabled: !isExtensionEnabled(ext.value), onChange: e => handleExtensionChange(ext.value, e.target.checked) }), _jsx(Text, { children: ext.label })] }, ext.value))) })] })] }), _jsxs(Box, { sx: {
298
- marginBottom: 3,
299
- padding: 3,
300
- border: '1px solid',
301
- borderColor: 'border.default',
302
- borderRadius: 2,
303
- backgroundColor: 'canvas.default',
304
- }, children: [_jsxs(Box, { sx: {
305
- display: 'flex',
306
- alignItems: 'center',
307
- gap: 2,
308
- marginBottom: 2,
309
- }, children: [_jsx(KeyIcon, { size: 16 }), _jsx(Text, { sx: { fontSize: 1, fontWeight: 'bold' }, children: "Connected Accounts" })] }), _jsx(Text, { sx: { fontSize: 0, color: 'fg.muted', display: 'block', mb: 3 }, children: "Connect your accounts to give the agent access to external services like GitHub repositories, Google services, or Kaggle datasets." }), _jsx(IdentityConnectWithStatus, { identityProviders: identityProviders, disabled: selectedAgentId !== 'new-agent', onConnect: onIdentityConnect, onDisconnect: onIdentityDisconnect })] }), _jsxs(Box, { sx: {
310
- marginBottom: 3,
311
- padding: 3,
312
- border: '1px solid',
313
- borderColor: 'border.default',
314
- borderRadius: 2,
315
- backgroundColor: 'canvas.default',
316
- }, children: [_jsx(Text, { sx: { fontSize: 1, fontWeight: 'bold', display: 'block', mb: 2 }, children: "Agent Capabilities" }), _jsx(Box, { sx: { display: 'flex', gap: 4 }, children: _jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 2 }, children: [_jsx(Checkbox, { checked: enableCodemode, disabled: selectedAgentId !== 'new-agent', onChange: e => onEnableCodemodeChange?.(e.target.checked) }), _jsxs(Box, { children: [_jsx(Text, { sx: { fontSize: 1 }, children: "Codemode" }), _jsx(Text, { sx: { fontSize: 0, color: 'fg.muted', display: 'block' }, children: "Execute code to compose tools" })] })] }) }), skillsEnabled && enableCodemode && (_jsx(Flash, { variant: "default", sx: { mt: 3 }, children: _jsx(Text, { sx: { fontSize: 0 }, children: "Skills provide curated capabilities; Codemode composes tools with Python for multi-step execution." }) })), enableCodemode && (_jsxs(Box, { sx: { mt: 3, display: 'flex', flexDirection: 'column', gap: 2 }, children: [_jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 2 }, children: [_jsx(Checkbox, { checked: allowDirectToolCalls, disabled: selectedAgentId !== 'new-agent', onChange: e => onAllowDirectToolCallsChange?.(e.target.checked) }), _jsxs(Box, { children: [_jsx(Text, { sx: { fontSize: 1 }, children: "Allow direct tool calls" }), _jsx(Text, { sx: { fontSize: 0, color: 'fg.muted', display: 'block' }, children: "Expose call_tool for simple, single-tool operations" })] })] }), _jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 2 }, children: [_jsx(Checkbox, { checked: enableToolReranker, disabled: selectedAgentId !== 'new-agent', onChange: e => onEnableToolRerankerChange?.(e.target.checked) }), _jsxs(Box, { children: [_jsx(Text, { sx: { fontSize: 1 }, children: "Enable tool reranker" }), _jsx(Text, { sx: { fontSize: 0, color: 'fg.muted', display: 'block' }, children: "Reorder search results using the configured reranker" })] })] })] }))] }), _jsxs(Box, { sx: {
317
- marginBottom: 3,
318
- padding: 3,
319
- border: '1px solid',
320
- borderColor: 'border.default',
321
- borderRadius: 2,
322
- backgroundColor: 'canvas.default',
323
- opacity: enableCodemode ? 1 : 0.5,
324
- }, children: [_jsxs(Box, { sx: {
325
- display: 'flex',
326
- alignItems: 'center',
327
- gap: 2,
328
- marginBottom: 2,
329
- }, children: [_jsx(Text, { sx: { fontSize: 1, fontWeight: 'bold' }, children: "Skills" }), skillsQuery.isLoading && _jsx(Spinner, { size: "small" }), enableCodemode && !skillsQuery.isLoading && (_jsx(Button, { variant: "invisible", size: "small", onClick: () => skillsQuery.refetch(), sx: { padding: 1 }, "aria-label": "Refresh skills", children: _jsx(SyncIcon, { size: 14 }) }))] }), !enableCodemode ? (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: "Enable Codemode to use skills." })) : skillsQuery.isError ? (_jsx(Flash, { variant: "warning", sx: { marginBottom: 2 }, children: _jsx(Text, { sx: { fontSize: 0 }, children: "Unable to fetch skills. Check that the server is running." }) })) : displaySkills.length === 0 && !skillsQuery.isLoading ? (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: "No skills available." })) : (_jsx(Box, { sx: { display: 'flex', flexDirection: 'column', gap: 2 }, children: displaySkills.map(skill => (_jsxs(Box, { sx: {
330
- display: 'flex',
331
- alignItems: 'center',
332
- gap: 2,
333
- padding: 2,
334
- borderRadius: 1,
335
- backgroundColor: 'canvas.subtle',
336
- opacity: selectedAgentId !== 'new-agent' ? 0.6 : 1,
337
- }, children: [_jsx(Checkbox, { checked: selectedSkills.includes(skill.id), disabled: selectedAgentId !== 'new-agent', onChange: e => handleSkillChange(skill.id, e.target.checked) }), _jsxs(Box, { sx: { display: 'flex', flexDirection: 'column', gap: 1 }, children: [_jsx(Text, { sx: { fontWeight: 'semibold' }, children: skill.name }), skill.description && (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: skill.description }))] })] }, skill.id))) }))] }), _jsxs(Box, { sx: {
338
- marginBottom: 3,
339
- padding: 3,
340
- border: '1px solid',
341
- borderColor: 'border.default',
342
- borderRadius: 2,
343
- backgroundColor: 'canvas.default',
344
- }, children: [_jsxs(Box, { sx: {
345
- display: 'flex',
346
- alignItems: 'center',
347
- gap: 2,
348
- marginBottom: 2,
349
- }, children: [_jsx(ToolsIcon, { size: 16 }), _jsx(Text, { sx: { fontSize: 1, fontWeight: 'bold' }, children: "MCP Servers" }), configQuery.isLoading && _jsx(Spinner, { size: "small" }), !configQuery.isLoading && (_jsx(Button, { variant: "invisible", size: "small", onClick: () => configQuery.refetch(), sx: { padding: 1 }, "aria-label": "Refresh MCP servers", children: _jsx(SyncIcon, { size: 14 }) }))] }), configQuery.isError && (_jsx(Flash, { variant: "warning", sx: { marginBottom: 2 }, children: _jsx(Text, { sx: { fontSize: 0 }, children: "Unable to fetch MCP servers. Check that the server is running." }) })), mcpServers.length === 0 &&
350
- !configQuery.isLoading &&
351
- !configQuery.isError && (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: "No MCP servers configured." })), enableCodemode && (_jsx(Flash, { variant: "default", sx: { marginBottom: 2 }, children: _jsx(Text, { sx: { fontSize: 0 }, children: "When Codemode is enabled, selected MCP servers are used to build the Codemode tool registry (tools are exposed via Codemode meta tools like search and execute_code)." }) })), enableCodemode && (_jsxs(Box, { sx: {
352
- marginBottom: 2,
353
- padding: 2,
354
- borderRadius: 1,
355
- border: '1px solid',
356
- borderColor: 'border.default',
357
- backgroundColor: 'canvas.subtle',
358
- }, children: [_jsx(Text, { sx: { fontSize: 0, fontWeight: 'semibold', display: 'block' }, children: "Codemode registry preview" }), _jsx(Text, { sx: { fontSize: 0, color: 'fg.muted', mb: 1 }, children: selectedMcpServers.length > 0
359
- ? 'Using selected MCP servers'
360
- : 'No servers selected — select servers to scope Codemode tools.' }), previewServers.length > 0 ? (_jsx(Box, { sx: { display: 'flex', flexDirection: 'column', gap: 1 }, children: previewServers.map(server => (_jsxs(Text, { sx: { fontSize: 0 }, children: [server.name, " \u2014 ", server.tools.length, " tools"] }, server.id))) })) : (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: "No servers selected." })), _jsx(Text, { sx: { fontSize: 0, color: 'fg.muted', mt: 2 }, children: "Exposed meta-tools: list_tool_names, search_tools, get_tool_details, list_servers, execute_code, call_tool (optional)" })] })), mcpServers.length > 0 && (_jsx(Box, { sx: { display: 'flex', flexDirection: 'column', gap: 2 }, children: mcpServers.map(server => (_jsxs(Box, { sx: {
361
- display: 'flex',
362
- alignItems: 'flex-start',
363
- gap: 2,
364
- padding: 2,
365
- borderRadius: 1,
366
- backgroundColor: 'canvas.subtle',
367
- opacity: mcpServersDisabled || !server.isAvailable ? 0.6 : 1,
368
- }, children: [_jsx(Checkbox, { checked: selectedMcpServers.includes(server.id), disabled: mcpServersDisabled || !server.isAvailable, onChange: e => handleMcpServerChange(server.id, e.target.checked) }), _jsxs(Box, { sx: {
369
- display: 'flex',
370
- flexDirection: 'column',
371
- gap: 1,
372
- flex: 1,
373
- }, children: [_jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 2 }, children: [_jsx(Text, { sx: { fontWeight: 'semibold' }, children: server.name }), _jsx(Label, { variant: server.isAvailable ? 'success' : 'secondary', size: "small", children: server.isAvailable ? 'Available' : 'Not Available' })] }), server.tools.length > 0 && (_jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: ["Tools: ", server.tools.map(t => t.name).join(', ')] }))] })] }, server.id))) }))] }), createError && (_jsx(Flash, { variant: "danger", sx: { marginBottom: 3 }, children: createError })), _jsx(Button, { variant: "primary", onClick: onConnect, disabled: isCreatingAgent ||
374
- !agentName ||
375
- (transport === 'acp' ? !wsUrl : !baseUrl), sx: { width: '100%' }, children: isCreatingAgent ? (_jsxs(Box, { sx: {
376
- display: 'flex',
377
- alignItems: 'center',
378
- justifyContent: 'center',
379
- gap: 2,
380
- }, children: [_jsx(Spinner, { size: "small" }), _jsx("span", { children: "Creating Agent..." })] })) : selectedAgentId === 'new-agent' ? ('Create the Agent') : agents.find(a => a.id === selectedAgentId)?.status === 'running' ? ('Connect to the Agent') : ('Start and Connect to the Agent') })] }));
381
- };
382
- export { AGENT_LIBRARIES, TRANSPORTS, EXTENSIONS };
@@ -1,19 +0,0 @@
1
- import React from 'react';
2
- import type { ServiceManager } from '@jupyterlab/services';
3
- interface MainContentProps {
4
- showNotebook: boolean;
5
- timeTravel: number;
6
- onTimeTravelChange: (value: number) => void;
7
- richEditor: boolean;
8
- notebookFile?: string;
9
- lexicalFile?: string;
10
- isNewAgent?: boolean;
11
- serviceManager?: ServiceManager.IManager;
12
- }
13
- /**
14
- * Main Content Component
15
- *
16
- * Displays the main content area with Simple notebook viewer or Lexical editor and time travel.
17
- */
18
- export declare const MainContent: React.FC<MainContentProps>;
19
- export {};
@@ -1,10 +0,0 @@
1
- export { MockFileBrowser } from './MockFileBrowser';
2
- export { MainContent } from './MainContent';
3
- export { SessionTabs } from './SessionTabs';
4
- export { Header } from './Header';
5
- export { HeaderControls } from './HeaderControls';
6
- export { FooterMetrics } from './FooterMetrics';
7
- export { TimeTravel } from './TimeTravel';
8
- export { LexicalEditor } from './LexicalEditor';
9
- export { AgentConfiguration, AGENT_LIBRARIES, TRANSPORTS, EXTENSIONS, } from './AgentConfiguration';
10
- export type { AgentLibrary, Transport, Extension, MCPServerConfig, MCPServerTool, } from './AgentConfiguration';
@@ -1,13 +0,0 @@
1
- /*
2
- * Copyright (c) 2025-2026 Datalayer, Inc.
3
- * Distributed under the terms of the Modified BSD License.
4
- */
5
- export { MockFileBrowser } from './MockFileBrowser';
6
- export { MainContent } from './MainContent';
7
- export { SessionTabs } from './SessionTabs';
8
- export { Header } from './Header';
9
- export { HeaderControls } from './HeaderControls';
10
- export { FooterMetrics } from './FooterMetrics';
11
- export { TimeTravel } from './TimeTravel';
12
- export { LexicalEditor } from './LexicalEditor';
13
- export { AgentConfiguration, AGENT_LIBRARIES, TRANSPORTS, EXTENSIONS, } from './AgentConfiguration';
@@ -1,12 +0,0 @@
1
- import './showcase.css';
2
- import '../../../style/base.css';
3
- import '../../../style/showcase-vercel-ai.css';
4
- /**
5
- * Vercel AI Elements Showcase
6
- *
7
- * A comprehensive showcase of all available Vercel AI Elements components.
8
- * This page displays static examples of each component to demonstrate their
9
- * visual appearance and basic functionality.
10
- */
11
- export declare const VercelAiElementsShowcase: React.FC;
12
- export default VercelAiElementsShowcase;
@@ -1,69 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- /*
3
- * Copyright (c) 2025-2026 Datalayer, Inc.
4
- * Distributed under the terms of the Modified BSD License.
5
- */
6
- import { useState } from 'react';
7
- import { MessageShowcase } from './components/MessageShowcase';
8
- import { LoaderShowcase } from './components/LoaderShowcase';
9
- import { CodeBlockShowcase } from './components/CodeBlockShowcase';
10
- import { SuggestionShowcase } from './components/SuggestionShowcase';
11
- import { ShimmerShowcase } from './components/ShimmerShowcase';
12
- import { ArtifactShowcase } from './components/ArtifactShowcase';
13
- import { SourcesShowcase } from './components/SourcesShowcase';
14
- import { PromptInputShowcase } from './components/PromptInputShowcase';
15
- import { ConversationShowcase } from './components/ConversationShowcase';
16
- import { ModelSelectorShowcase } from './components/ModelSelectorShowcase';
17
- import { ReasoningShowcase } from './components/ReasoningShowcase';
18
- import { ToolShowcase } from './components/ToolShowcase';
19
- import './showcase.css';
20
- import '../../../style/base.css';
21
- import '../../../style/showcase-vercel-ai.css';
22
- /**
23
- * Vercel AI Elements Showcase
24
- *
25
- * A comprehensive showcase of all available Vercel AI Elements components.
26
- * This page displays static examples of each component to demonstrate their
27
- * visual appearance and basic functionality.
28
- */
29
- export const VercelAiElementsShowcase = () => {
30
- const [activeTab, setActiveTab] = useState('message');
31
- const components = [
32
- { id: 'message', label: 'Message', component: _jsx(MessageShowcase, {}) },
33
- {
34
- id: 'conversation',
35
- label: 'Conversation',
36
- component: _jsx(ConversationShowcase, {}),
37
- },
38
- {
39
- id: 'prompt-input',
40
- label: 'Prompt Input',
41
- component: _jsx(PromptInputShowcase, {}),
42
- },
43
- {
44
- id: 'model-selector',
45
- label: 'Model Selector',
46
- component: _jsx(ModelSelectorShowcase, {}),
47
- },
48
- { id: 'artifact', label: 'Artifact', component: _jsx(ArtifactShowcase, {}) },
49
- { id: 'code-block', label: 'Code Block', component: _jsx(CodeBlockShowcase, {}) },
50
- {
51
- id: 'suggestion',
52
- label: 'Suggestions',
53
- component: _jsx(SuggestionShowcase, {}),
54
- },
55
- { id: 'sources', label: 'Sources', component: _jsx(SourcesShowcase, {}) },
56
- { id: 'reasoning', label: 'Reasoning', component: _jsx(ReasoningShowcase, {}) },
57
- { id: 'tool', label: 'Tool', component: _jsx(ToolShowcase, {}) },
58
- { id: 'loader', label: 'Loader', component: _jsx(LoaderShowcase, {}) },
59
- { id: 'shimmer', label: 'Shimmer', component: _jsx(ShimmerShowcase, {}) },
60
- ];
61
- return (_jsxs("div", { className: "min-h-screen bg-background", children: [_jsx("header", { className: "border-b bg-card", children: _jsxs("div", { className: "container mx-auto py-6 px-4 md:px-6 lg:px-8", children: [_jsx("h1", { className: "text-3xl font-bold text-foreground", children: "Vercel AI Elements Showcase" }), _jsx("p", { className: "text-muted-foreground mt-2", children: "A comprehensive collection of all available Vercel AI Elements components" })] }) }), _jsx("main", { className: "container mx-auto py-8 px-4 md:px-6 lg:px-8", children: _jsxs("div", { className: "w-full", children: [_jsx("div", { className: "border-b border-border", children: _jsx("nav", { className: "flex gap-1 overflow-x-auto", "aria-label": "Component tabs", children: components.map(component => (_jsx("button", { onClick: () => setActiveTab(component.id), className: `
62
- px-4 py-2 text-sm font-medium whitespace-nowrap
63
- border-b-2 transition-colors
64
- ${activeTab === component.id
65
- ? 'border-primary text-primary'
66
- : 'border-transparent text-muted-foreground hover:text-foreground hover:border-border'}
67
- `, "aria-current": activeTab === component.id ? 'page' : undefined, children: component.label }, component.id))) }) }), _jsx("div", { className: "mt-6", children: components.map(component => (_jsx("div", { className: activeTab === component.id ? 'block' : 'hidden', role: "tabpanel", children: _jsxs("div", { className: "border rounded-lg bg-card", children: [_jsxs("div", { className: "border-b px-6 py-4", children: [_jsx("h2", { className: "text-2xl font-semibold text-foreground", children: component.label }), _jsxs("p", { className: "text-muted-foreground mt-1", children: ["Example implementations of the ", component.label, " component"] })] }), _jsx("div", { className: "p-6", children: _jsx("div", { className: "max-h-[calc(100vh-350px)] overflow-y-auto", children: component.component }) })] }) }, component.id))) })] }) })] }));
68
- };
69
- export default VercelAiElementsShowcase;
@@ -1 +0,0 @@
1
- export declare const ArtifactShowcase: () => import("react/jsx-runtime").JSX.Element;
@@ -1,85 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- /*
3
- * Copyright (c) 2025-2026 Datalayer, Inc.
4
- * Distributed under the terms of the Modified BSD License.
5
- */
6
- import { Artifact, ArtifactAction, ArtifactActions, ArtifactContent, ArtifactDescription, ArtifactHeader, ArtifactTitle, } from '@/components/vercel-ai-elements/artifact';
7
- import { CodeBlock } from '@/components/vercel-ai-elements/code-block';
8
- import { CopyIcon, DownloadIcon, PlayIcon, RefreshCwIcon, ShareIcon, } from 'lucide-react';
9
- const pythonCode = `# Dijkstra's Algorithm implementation
10
- import heapq
11
-
12
- def dijkstra(graph, start):
13
- distances = {node: float('inf') for node in graph}
14
- distances[start] = 0
15
- heap = [(0, start)]
16
- visited = set()
17
-
18
- while heap:
19
- current_distance, current_node = heapq.heappop(heap)
20
- if current_node in visited:
21
- continue
22
- visited.add(current_node)
23
-
24
- for neighbor, weight in graph[current_node].items():
25
- distance = current_distance + weight
26
- if distance < distances[neighbor]:
27
- distances[neighbor] = distance
28
- heapq.heappush(heap, (distance, neighbor))
29
-
30
- return distances
31
-
32
- # Example graph
33
- graph = {
34
- 'A': {'B': 1, 'C': 4},
35
- 'B': {'A': 1, 'C': 2, 'D': 5},
36
- 'C': {'A': 4, 'B': 2, 'D': 1},
37
- 'D': {'B': 5, 'C': 1}
38
- }
39
-
40
- print(dijkstra(graph, 'A'))`;
41
- const reactCode = `import React, { useState } from 'react';
42
-
43
- function TodoApp() {
44
- const [todos, setTodos] = useState([]);
45
- const [input, setInput] = useState('');
46
-
47
- const addTodo = () => {
48
- if (input.trim()) {
49
- setTodos([...todos, { id: Date.now(), text: input, done: false }]);
50
- setInput('');
51
- }
52
- };
53
-
54
- const toggleTodo = (id) => {
55
- setTodos(todos.map(todo =>
56
- todo.id === id ? { ...todo, done: !todo.done } : todo
57
- ));
58
- };
59
-
60
- return (
61
- <div>
62
- <h1>Todo List</h1>
63
- <input
64
- value={input}
65
- onChange={(e) => setInput(e.target.value)}
66
- onKeyPress={(e) => e.key === 'Enter' && addTodo()}
67
- />
68
- <button onClick={addTodo}>Add</button>
69
- <ul>
70
- {todos.map(todo => (
71
- <li
72
- key={todo.id}
73
- onClick={() => toggleTodo(todo.id)}
74
- style={{ textDecoration: todo.done ? 'line-through' : 'none' }}
75
- >
76
- {todo.text}
77
- </li>
78
- ))}
79
- </ul>
80
- </div>
81
- );
82
- }`;
83
- export const ArtifactShowcase = () => {
84
- return (_jsxs("div", { className: "space-y-8", children: [_jsxs("div", { children: [_jsx("h3", { className: "text-lg font-semibold mb-4", children: "Code Artifact" }), _jsxs(Artifact, { children: [_jsxs(ArtifactHeader, { children: [_jsxs("div", { children: [_jsx(ArtifactTitle, { children: "Dijkstra's Algorithm Implementation" }), _jsx(ArtifactDescription, { children: "Updated 1 minute ago" })] }), _jsx("div", { className: "flex items-center gap-2", children: _jsxs(ArtifactActions, { children: [_jsx(ArtifactAction, { icon: PlayIcon, label: "Run", onClick: () => console.log('Run'), tooltip: "Run code" }), _jsx(ArtifactAction, { icon: CopyIcon, label: "Copy", onClick: () => console.log('Copy'), tooltip: "Copy to clipboard" }), _jsx(ArtifactAction, { icon: RefreshCwIcon, label: "Regenerate", onClick: () => console.log('Regenerate'), tooltip: "Regenerate content" }), _jsx(ArtifactAction, { icon: DownloadIcon, label: "Download", onClick: () => console.log('Download'), tooltip: "Download file" }), _jsx(ArtifactAction, { icon: ShareIcon, label: "Share", onClick: () => console.log('Share'), tooltip: "Share artifact" })] }) })] }), _jsx(ArtifactContent, { className: "p-0", children: _jsx(CodeBlock, { className: "border-none", code: pythonCode, language: "python", showLineNumbers: true }) })] })] }), _jsxs("div", { children: [_jsx("h3", { className: "text-lg font-semibold mb-4", children: "React Component Artifact" }), _jsxs(Artifact, { children: [_jsxs(ArtifactHeader, { children: [_jsxs("div", { children: [_jsx(ArtifactTitle, { children: "Todo App Component" }), _jsx(ArtifactDescription, { children: "React component with hooks" })] }), _jsx("div", { className: "flex items-center gap-2", children: _jsxs(ArtifactActions, { children: [_jsx(ArtifactAction, { icon: CopyIcon, label: "Copy", onClick: () => console.log('Copy'), tooltip: "Copy to clipboard" }), _jsx(ArtifactAction, { icon: DownloadIcon, label: "Download", onClick: () => console.log('Download'), tooltip: "Download file" })] }) })] }), _jsx(ArtifactContent, { className: "p-0", children: _jsx(CodeBlock, { className: "border-none", code: reactCode, language: "tsx", showLineNumbers: true }) })] })] }), _jsxs("div", { children: [_jsx("h3", { className: "text-lg font-semibold mb-4", children: "Document Artifact" }), _jsxs(Artifact, { children: [_jsxs(ArtifactHeader, { children: [_jsxs("div", { children: [_jsx(ArtifactTitle, { children: "Project Documentation" }), _jsx(ArtifactDescription, { children: "Generated documentation" })] }), _jsx("div", { className: "flex items-center gap-2", children: _jsxs(ArtifactActions, { children: [_jsx(ArtifactAction, { icon: CopyIcon, label: "Copy", onClick: () => console.log('Copy'), tooltip: "Copy to clipboard" }), _jsx(ArtifactAction, { icon: ShareIcon, label: "Share", onClick: () => console.log('Share'), tooltip: "Share artifact" })] }) })] }), _jsx(ArtifactContent, { children: _jsxs("div", { className: "prose prose-sm max-w-none", children: [_jsx("h1", { children: "Getting Started" }), _jsx("p", { children: "This guide will help you get started with the project." }), _jsx("h2", { children: "Installation" }), _jsx("p", { children: "Install the dependencies using npm:" }), _jsx("pre", { children: _jsx("code", { children: "npm install" }) }), _jsx("h2", { children: "Usage" }), _jsx("p", { children: "Run the development server:" }), _jsx("pre", { children: _jsx("code", { children: "npm run dev" }) })] }) })] })] })] }));
85
- };
@@ -1 +0,0 @@
1
- export declare const CodeBlockShowcase: () => import("react/jsx-runtime").JSX.Element;