@gen3/workspaces 0.12.67 → 0.12.68
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dts/components/CostTracker.d.ts.map +1 -1
- package/dist/dts/components/CostTracker.js +16 -8
- package/dist/dts/components/CostTracker.js.map +1 -1
- package/dist/index/cjs/index.js +68 -21
- package/dist/index/cjs/index.js.map +1 -1
- package/dist/index/esm/index.js +69 -22
- package/dist/index/esm/index.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/WorkspaceTierCard.tsx","../../../src/components/TierSelectorLanding.tsx","../../../src/workspace/tiers/FreeWorkspace.tsx","../../../src/workspace/tiers/utils.ts","../../../src/constants.ts","../../../src/core/types.ts","../../../src/core/hatcheryApi.ts","../../../src/utils.ts","../../../src/providers/useMicroContainerRedux.ts","../../../src/providers/utils.ts","../../../src/providers/useJEGWorkspaceResourceMonitor.tsx","../../../src/providers/MicroContainerReduxProvider.tsx","../../../src/components/MicroContainerReduxPanel.tsx","../../../src/workspace/tiers/RemoteComputeWorkspace.tsx","../../../src/core/kernelApi.ts","../../../src/core/jegGatewayApi.ts","../../../src/components/KernelLifecyclePanel/ActiveKernelInfoPanel.tsx","../../../src/components/KernelLifecyclePanel/styling.ts","../../../src/components/KernelLifecyclePanel/ActiveKernelsPanel.tsx","../../../src/components/KernelLifecyclePanel/ConnectionStatusBadge.tsx","../../../src/components/KernelLifecyclePanel/GatewayConnectionPanel.tsx","../../../src/components/KernelLifecyclePanel/KernelSelector.tsx","../../../src/providers/useGatewayConnectionStatus.ts","../../../src/components/KernelLifecyclePanel/KernelLifecyclePanel.tsx","../../../src/workspace/WorkspaceLayout/styling.ts","../../../src/components/UpgradeActionsPanel.tsx","../../../src/components/HorizontalAccordian.tsx","../../../src/workspace/WorkspaceLayout/SettingsPanel.tsx","../../../src/components/CostTracker.tsx","../../../src/workspace/WorkspaceLayout/WorkspaceToolbar.tsx","../../../src/lib/llmClient.ts","../../../src/lib/ragContext.ts","../../../src/hooks/useCodeInjector.ts","../../../src/components/CodingAssistantPanel/MessageBubble.tsx","../../../src/components/CodingAssistantPanel/CodingAssistantPanel.tsx","../../../src/components/CompactDictionaryPanel/FieldLinkCountBadge.tsx","../../../src/components/CompactDictionaryPanel/CompactDictionaryPanel.tsx","../../../src/components/DataToolsPanel.tsx","../../../src/workspace/WorkspaceLayout/ToolsPanel.tsx","../../../src/workspace/WorkspaceLayout/WorkspaceLayout.tsx","../../../src/workspace/WorkspaceCenter.tsx","../../../src/pages/WorkspacesCenter/WorkspacesCenterPage.tsx","../../../src/pages/WorkspacesCenter/data.ts"],"sourcesContent":["import React, { useCallback } from 'react';\nimport {\n Badge,\n Button,\n Card,\n Group,\n List,\n Stack,\n Text,\n Tooltip,\n} from '@mantine/core';\nimport { Icon } from '@iconify-icon/react';\nimport { WorkspaceCardConfig } from './types';\nimport { type WorkspaceTier } from '../types';\n\nexport interface WorkspaceTierCardProps extends Omit<\n WorkspaceCardConfig,\n 'tierConfiguration'\n> {\n onSelectTier: (tier: WorkspaceTier) => void;\n}\n\nconst WorkspaceTierCard = ({\n label,\n description,\n tier,\n tierLabel = undefined,\n features = [],\n tooltip = 'Launch workspace',\n buttonLabel = 'Launch',\n onSelectTier,\n baseColor,\n}: WorkspaceTierCardProps) => {\n const handleClick = useCallback(\n () => onSelectTier(tier),\n [onSelectTier, tier],\n );\n\n const icon = (\n <span className=\"mb-0.5\">\n <Icon icon=\"gen3:right-arrow\" width=\"24\" height=\"24\" />\n </span>\n );\n\n return (\n <Card\n withBorder\n radius=\"sm\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n backgroundColor: baseColor ?? 'var(--mantine-color-base-lighter)',\n }}\n >\n <Card.Section inheritPadding py=\"sm\">\n <Stack align=\"left\">\n <Badge\n classNames={{\n root: 'font-header',\n }}\n color=\"primary.4\"\n size=\"lg\"\n fw={500}\n >\n {tierLabel ?? (tier === 'remote' ? 'paid' : 'free')}\n </Badge>\n </Stack>\n </Card.Section>\n <Card.Section inheritPadding py=\"xs\">\n <Stack justify=\"left\">\n <Text fw={600} c=\"base-contrast.4\">\n {label}\n </Text>\n <Text c=\"base-contrast.4\" size=\"xs\">\n {description}\n </Text>\n </Stack>\n </Card.Section>\n <Card.Section inheritPadding py=\"xs\">\n <Stack align=\"left\">\n <List size=\"sm\" listStyleType=\"disc\">\n {features.map((feature: string) => (\n <List.Item key={feature}>{feature}</List.Item>\n ))}\n </List>\n </Stack>\n </Card.Section>\n <Card.Section\n withBorder\n inheritPadding\n py=\"sm\"\n style={{ marginTop: 'auto' }}\n >\n <Group justify=\"center\">\n <Tooltip label={tooltip}>\n <Button\n aria-label={`Select ${buttonLabel}`}\n variant=\"subtle\"\n rightSection={icon}\n onClick={handleClick}\n >\n <Text tt=\"uppercase\">{buttonLabel}</Text>\n </Button>\n </Tooltip>\n </Group>\n </Card.Section>\n </Card>\n );\n};\n\nexport default WorkspaceTierCard;\n","import React, { useMemo } from 'react';\nimport {\n DefaultTierLandingClassnames,\n TierSelectorLandingConfiguration,\n WorkspaceCardConfig,\n} from './types';\nimport { type WorkspaceTier } from '../types';\nimport WorkspaceTierCard from './WorkspaceTierCard';\nimport { mergeDefaultTailwindClassnames } from '@gen3/frontend';\nimport { Container, SimpleGrid, Stack, Text } from '@mantine/core';\n\nexport interface TierSelectorLandingProps extends Partial<TierSelectorLandingConfiguration> {\n cards: Record<string, WorkspaceCardConfig>;\n onSelectTier: (tier: WorkspaceTier) => void;\n}\n\nconst DEFAULT_CLASSNAMES: DefaultTierLandingClassnames = {\n root: 'mx-auto w-full h-full overflow-auto max-w-7xl p-6 sm:p-2 md:p-4 lg:p-8',\n background: 'relative overflow-hidden sm:p-2 md:p-4 lg:p-8',\n label: 'text-md uppercase tracking-[0.28em] text-primary',\n description:\n 'font-black leading-tight text-primary md:text-3xl sm:text-2xl xs:text-lg mt-4 mb-4',\n additionalDescription: 'max-w-2xl text-md font-medium text-base-contrast',\n button:\n 'mt-10 flex w-full items-center justify-center rounded-md bg-primary px-8 py-3 text-sm font-semibold text-primary-contrast shadow-sm hover:bg-primary focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary',\n};\n\nconst TierSelectorLanding = ({\n cards,\n onSelectTier,\n classNames,\n label = 'Gen3 JupyterHub Workspaces',\n description = 'Launch a secure notebook workspace',\n additionalDescriptions = [\n 'Choose local browser notebooks for speed or remote kernels for scalable compute',\n 'Both modes preserve your host app auth context.',\n ],\n}: TierSelectorLandingProps) => {\n const mergedClassnames = useMemo(\n () => mergeDefaultTailwindClassnames(DEFAULT_CLASSNAMES, classNames ?? {}),\n [classNames],\n );\n\n return (\n <Container size=\"xl\" className={mergedClassnames.root}>\n <Stack gap=\"lg\" className={mergedClassnames.background}>\n <Stack gap=\"xs\">\n <Text className={mergedClassnames.label}>{label}</Text>\n <Text className={mergedClassnames.description}>{description}</Text>\n {additionalDescriptions.map((desc) => (\n <Text\n className={mergedClassnames.additionalDescription}\n key={desc.slice(0, 20)}\n >\n {desc}\n </Text>\n ))}\n </Stack>\n\n <SimpleGrid\n cols={{ base: 2, sm: 2, md: 2, lg: 3 }}\n spacing=\"md\"\n role=\"list\"\n aria-label=\"Workspace tier selection\"\n >\n {Object.values(cards).map((card) => (\n <WorkspaceTierCard\n key={card.tier}\n tier={card.tier}\n tierLabel={card.tierLabel}\n onSelectTier={onSelectTier}\n label={card.label}\n description={card.description}\n features={card.features}\n tooltip={card.tooltip}\n buttonLabel={card.buttonLabel}\n baseColor={card.baseColor}\n />\n ))}\n </SimpleGrid>\n </Stack>\n </Container>\n );\n};\n\nexport default TierSelectorLanding;\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { Button, Card, LoadingOverlay, Text } from '@mantine/core';\nimport { ACTIVITY_CHANNEL } from '@gen3/frontend';\n\nexport interface FreeWorkspaceProps {\n assetBaseUrl?: string;\n className?: string;\n onReady?: () => void;\n onError?: (error: Error) => void;\n}\n\nconst FreeWorkspace = ({\n assetBaseUrl = '/api/workspace-assets/free',\n onReady,\n onError,\n}: FreeWorkspaceProps) => {\n const [loading, setLoading] = useState(true);\n const [loadError, setLoadError] = useState(false);\n const [retryCount, setRetryCount] = useState(0);\n const [jupyterReady, setJupyterReady] = useState(false);\n const iframeRef = useRef<HTMLIFrameElement | null>(null);\n const broadcastChannelRef = useRef<BroadcastChannel | null>(null);\n\n const url = `${assetBaseUrl}/lab/index.html`;\n\n const handleRetry = useCallback(() => {\n setLoadError(false);\n setLoading(true);\n setRetryCount((n) => n + 1);\n }, []);\n\n // set up BroadcastChannel\n useEffect(() => {\n if (!broadcastChannelRef?.current) {\n broadcastChannelRef.current = new BroadcastChannel(ACTIVITY_CHANNEL);\n }\n\n return () => {\n if (broadcastChannelRef.current) {\n broadcastChannelRef.current.close();\n broadcastChannelRef.current = null;\n }\n };\n }, []);\n\n // Handle setting up iframe event listeners for activity detection.\n // Tries same-origin contentDocument access first; falls back to\n // focus/blur heuristics when the iframe is cross-origin.\n useEffect(() => {\n if (!jupyterReady) return;\n\n const updateUserActivity = () => {\n if (broadcastChannelRef.current) {\n broadcastChannelRef.current.postMessage({\n type: 'activity-update',\n timestamp: Date.now(),\n });\n }\n };\n\n const iframe = iframeRef.current;\n let usedDirectListeners = false;\n\n if (iframe?.contentWindow) {\n try {\n const iframeDoc =\n iframe.contentDocument || iframe.contentWindow.document;\n\n if (iframeDoc) {\n iframeDoc.addEventListener('mousedown', updateUserActivity);\n iframeDoc.addEventListener('keypress', updateUserActivity);\n iframeDoc.addEventListener('scroll', updateUserActivity);\n iframeDoc.addEventListener('touchstart', updateUserActivity);\n usedDirectListeners = true;\n }\n } catch {\n // cross-origin — fall through to focus/blur fallback\n }\n }\n\n // Fallback: treat iframe receiving focus as user activity.\n // This fires when the user clicks into the iframe even if we\n // cannot attach listeners to its document directly.\n if (!usedDirectListeners) {\n window.addEventListener('blur', updateUserActivity);\n window.addEventListener('focus', updateUserActivity);\n }\n\n return () => {\n if (usedDirectListeners && iframe?.contentWindow) {\n try {\n const iframeDoc =\n iframe.contentDocument || iframe.contentWindow.document;\n if (iframeDoc) {\n iframeDoc.removeEventListener('mousedown', updateUserActivity);\n iframeDoc.removeEventListener('keypress', updateUserActivity);\n iframeDoc.removeEventListener('scroll', updateUserActivity);\n iframeDoc.removeEventListener('touchstart', updateUserActivity);\n }\n } catch {\n // Ignore cleanup errors\n }\n }\n if (!usedDirectListeners) {\n window.removeEventListener('blur', updateUserActivity);\n window.removeEventListener('focus', updateUserActivity);\n }\n };\n }, [jupyterReady]);\n\n if (loadError) {\n return (\n <div>\n <Card withBorder shadow=\"sm\" padding=\"md\" w=\"100%\" maw={448}>\n <Text fw={600} c=\"primary\">\n Jupyter failed to render\n </Text>\n <Text size=\"sm\" c=\"dimmed\" mt={4}>\n Unable to load JupyterLite. Check the browser console for details.\n </Text>\n <Button variant=\"default\" size=\"xs\" mt=\"sm\" onClick={handleRetry}>\n Retry\n </Button>\n </Card>\n </div>\n );\n }\n\n return (\n <div className=\"w-full flex flex-col grow\">\n <LoadingOverlay visible={loading} />\n <iframe\n src={url}\n width=\"100%\"\n height=\"100%\"\n style={{ border: 'none' }}\n key={retryCount}\n ref={iframeRef}\n title=\"JupyterLite Workspace\"\n sandbox=\"allow-scripts allow-same-origin allow-forms allow-popups allow-downloads allow-modals allow-storage-access-by-user-activation\"\n allow=\"clipboard-read; clipboard-write; cross-origin-isolated\"\n className=\"min-h-0 flex-1 border-0\"\n onLoad={() => {\n setLoading(false);\n setJupyterReady(true);\n onReady?.();\n }}\n onError={() => {\n setLoadError(true);\n onError?.(new Error('Unable to load JupyterLite workspace.'));\n }}\n />\n </div>\n );\n};\n\nexport default FreeWorkspace;\n","/* ------------------------------------------------------------------ */\n/* Scoped notebook path — deterministic, multi-tenant isolated path */\n/* ------------------------------------------------------------------ */\n\n// NFC normalization runs first so visually identical Unicode sequences (e.g.\n// decomposed combining characters) are collapsed before the ASCII whitelist strips them.\nexport const sanitizeSegment = (s: string) =>\n s.normalize('NFC').replace(/[^a-zA-Z0-9._-]/g, '_');\n\nexport const generateScopedNotebookPath = (opts: {\n tenantId: string;\n workspaceId: string;\n userId: string;\n notebookName?: string;\n}): string => {\n const { tenantId, workspaceId, userId, notebookName = 'untitled' } = opts;\n if (!tenantId || !workspaceId || !userId) {\n throw new Error(\n 'tenantId, workspaceId, and userId are required for session scoping',\n );\n }\n return `/${sanitizeSegment(tenantId)}/${sanitizeSegment(workspaceId)}/${sanitizeSegment(userId)}/${sanitizeSegment(notebookName)}.ipynb`;\n};\n","import { GEN3_API, GEN3_WORKSPACE_API } from '@gen3/core';\n\n// TODO: migrate this to @gen3/core\n\nexport const GEN3_HATCHERY_API =\n GEN3_WORKSPACE_API || '/workspace-api/workspace/hatchery'; // get replaced by revproxy\n\nexport const GEN3_KERNEL_API =\n process.env.GEN3_KERNEL_API || `${GEN3_API}/lw-workspace/proxy/jeg-panel/api`;\n\nexport const GEN3_JEG_GATEWAY_API =\n process.env.JEG_GATEWAY_API || `${GEN3_API}/lw-workspace/proxy/jeg-panel/api`;\n\n// TODO: resolve this with @gen3/core\nexport const GEN3_WORKSPACES_API =\n GEN3_WORKSPACE_API || `${GEN3_API}/lw-workspace`;\n\nexport const JEG_SERVICE_API =\n 'http://jupyter-enterprise-gateway.jupyter-pods.svc.cluster.local:8888';\n","interface ProcessProxyConfig {\n image_name: string;\n}\n\ninterface ProcessProxy {\n class_name: string;\n config: ProcessProxyConfig;\n}\n\ninterface KernelSpecMetadata {\n costPerHour: number;\n debugger: boolean;\n nodeType: string;\n process_proxy: ProcessProxy;\n}\n\ninterface KernelSpec {\n argv: string[];\n display_name: string;\n env: Record<string, string>;\n interrupt_mode: string;\n language: string;\n metadata: KernelSpecMetadata;\n}\n\ninterface KernelSpecResources {\n 'logo-64x64': string;\n}\n\ninterface KernelSpecEntryMetadata {\n name: string;\n resources: KernelSpecResources;\n spec: KernelSpec;\n}\n\ninterface KernelSpecs {\n [kernelName: string]: KernelSpecEntryMetadata;\n}\n\nexport interface KernelSpecsResponse {\n default: string;\n kernelspecs: KernelSpecs;\n}\n\n/* The Kernal type the frontend uses to represent a kernel spec entry */\nexport interface KernelSpecEntry {\n name: string;\n displayName: string;\n language?: string;\n /** Cost per hour from KernelSpecPolicy. 0 = included. Injected by kernel lifecycle proxy. */\n costPerHour?: number;\n /** Display tier from KernelSpecPolicy. e.g. \"micro\" | \"gpu\" */\n nodeType?: string;\n /** CPU allocation (e.g. \"4\" cores). From JEG resources or policy. */\n cpu?: string;\n /** Memory allocation (e.g. \"16Gi\"). From JEG resources or policy. */\n memory?: string;\n /** GPU type/size (e.g. \"NVIDIA A100 40GB\"). From JEG resources or policy. */\n gpuType?: string;\n}\n\nexport interface KernelRow {\n kernelId: string;\n kernelName?: string;\n executionState?: string;\n /** How long the kernel has been alive, in minutes. */\n uptimeMinutes?: number | null;\n staleState?: 'healthy' | 'warning' | 'kill';\n idleDays?: number | null;\n}\n\nexport type GatewayKernelSpec = {\n name: string;\n spec: {\n display_name: string;\n language: string;\n argv?: string[];\n metadata?: Record<string, unknown>;\n };\n resources?: Record<string, string>;\n};\n\nexport type GatewayKernelSpecsResponse = {\n default: string;\n kernelspecs: Record<string, GatewayKernelSpec>;\n};\n\nexport type GatewayKernel = {\n id: string;\n name: string;\n last_activity: string;\n execution_state: string;\n connections: number;\n};\n\nexport type GatewaySession = {\n id: string;\n path: string;\n name: string;\n type: string;\n kernel: {\n id: string;\n name: string;\n last_activity: string;\n execution_state: string;\n connections: number;\n };\n};\n\nexport type GatewayConnectionState =\n | 'idle'\n | 'launching'\n | 'attaching'\n | 'connected'\n | 'reconnecting' // transient — iframe + lifecycle panel remain visible\n | 'error'\n | 'unavailable'; // JEG not configured for this deployment — no polling, no retry\n\nexport enum HatcheryServiceState {\n unknown = 'unknown',\n running = 'running',\n stopped = 'stopped',\n terminating = 'terminating',\n launching = 'launching',\n error = 'error',\n}\n\nexport interface HatcheryServiceStatus {\n status: HatcheryServiceState;\n idleTimeLimit?: number;\n lastActivityTime: number;\n workspaceType?: string;\n}\n","import {\n gen3Api,\n WorkspaceInfo,\n WorkspaceInfoResponse,\n WorkspaceOptions,\n WorkspaceOptionsResponse,\n} from '@gen3/core';\nimport { GEN3_HATCHERY_API } from '../constants';\nimport { HatcheryServiceState, HatcheryServiceStatus } from './types';\n\nconst HatcheryWithTags = gen3Api.enhanceEndpoints({\n addTagTypes: ['Hatchery'],\n});\n\n/*\n * Hatchery states:\n *\n * `Terminating` - The workspace is shutting down\n * `Launching` - The workspace is starting up\n * `Stopped` - The workspace is in a failed state and must be terminated\n * `Running` - The workspace is running and ready to be used\n * `Not Found` - The workspace could not be found\n */\n\nconst StatusStringToHatcheryServiceStatus: Record<string, Array<string>> = {\n launching: ['launching', 'pending', 'starting'],\n running: ['running', 'ready'],\n stopped: ['stopped'],\n terminating: ['terminating', 'stopping'],\n unknown: ['not found', 'unknown'],\n};\n\ninterface HatcheryItem {\n name?: string;\n hash?: string;\n id?: string;\n}\n\ninterface HatcheryStatusResponse {\n status: string;\n conditions: unknown;\n containerStates: unknown;\n idleTimeLimit: number;\n lastActivityTime: number;\n workspaceType: string;\n}\n\nexport const hatcheryApi = HatcheryWithTags.injectEndpoints({\n endpoints: (builder) => ({\n doesHatcheryOptionExists: builder.query<string | null, string>({\n query: () => `${GEN3_HATCHERY_API}/options`,\n transformResponse: (response: Array<HatcheryItem>, _meta, tag) => {\n const match = response.find((o) => o.name?.includes(tag));\n return match?.hash ?? match?.id ?? null;\n },\n }),\n hatcheryOptions: builder.query<WorkspaceOptions | null, void>({\n query: () => `${GEN3_HATCHERY_API}/options`,\n transformResponse: (response: WorkspaceOptionsResponse) => {\n return response.map((workspace: WorkspaceInfoResponse) => {\n return {\n id: workspace.id,\n name: workspace.name,\n idleTimeLimit: workspace['idle-time-limit'],\n memoryLimit: workspace['memory-limit'],\n cpuLimit: workspace['cpu-limit'],\n } as WorkspaceInfo;\n });\n },\n }),\n hatcheryStatus: builder.query<HatcheryServiceStatus, string | null>({\n query: (containerHash) => {\n const hash = containerHash;\n const query = hash ? `?id=${encodeURIComponent(hash)}` : '';\n return `${GEN3_HATCHERY_API}/status${query}`;\n },\n transformErrorResponse: (_error) => {\n return {\n status: HatcheryServiceState.error,\n idleTimeLimit: 0,\n lastActivity: 0,\n workspaceType: '',\n };\n },\n transformResponse: (response: HatcheryStatusResponse) => {\n const results = (response.status || 'unknown').toLowerCase();\n let hatcheryStatus = HatcheryServiceState.unknown;\n\n if (StatusStringToHatcheryServiceStatus.unknown.includes(results)) {\n hatcheryStatus = HatcheryServiceState.unknown;\n }\n\n if (StatusStringToHatcheryServiceStatus.launching.includes(results)) {\n hatcheryStatus = HatcheryServiceState.launching;\n }\n\n if (StatusStringToHatcheryServiceStatus.running.includes(results)) {\n hatcheryStatus = HatcheryServiceState.running;\n }\n\n if (StatusStringToHatcheryServiceStatus.stopped.includes(results)) {\n hatcheryStatus = HatcheryServiceState.stopped;\n }\n\n if (StatusStringToHatcheryServiceStatus.terminating.includes(results)) {\n hatcheryStatus = HatcheryServiceState.terminating;\n }\n\n // return other stats from the hatchery response\n return {\n status: hatcheryStatus,\n idleTimeLimit: response.idleTimeLimit,\n lastActivityTime: response.lastActivityTime,\n workspaceType: response.workspaceType,\n };\n },\n }),\n launchHatcheryWorkspace: builder.mutation<boolean, string>({\n query: (id) => ({\n url: `${GEN3_HATCHERY_API}/launch?id=${id}`,\n method: 'POST',\n responseHandler: async (response) => {\n if (!response.ok) {\n // If the server errored (4xx/5xx), parse the error body as JSON\n return response.text();\n }\n // If the server succeeded (2xx), parse the body as plain text\n return response.text();\n },\n }),\n invalidatesTags: ['Hatchery'],\n transformResponse: async (response: string) => {\n return !!(response && response === 'Success');\n },\n }),\n terminateHatcheryWorkspace: builder.mutation<string, string>({\n query: (id) => {\n return {\n url: `${GEN3_HATCHERY_API}/terminate?id=${id}`,\n method: 'POST',\n responseHandler: (response) => response.text(),\n };\n },\n invalidatesTags: ['Hatchery'],\n }),\n }),\n overrideExisting: true,\n});\n\nexport const {\n useDoesHatcheryOptionExistsQuery,\n useHatcheryOptionsQuery,\n useLazyHatcheryOptionsQuery,\n useHatcheryStatusQuery,\n useLazyHatcheryStatusQuery,\n useLaunchHatcheryWorkspaceMutation,\n useTerminateHatcheryWorkspaceMutation,\n} = hatcheryApi;\n","import { FetchBaseQueryError } from '@reduxjs/toolkit/query';\n\n/**\n * Type guard to check if an object has FetchBaseQueryError shape\n */\nfunction isFetchBaseQueryErrorShape(\n error: unknown,\n): error is FetchBaseQueryError {\n return typeof error === 'object' && error !== null && 'status' in error;\n}\n\n/**\n * Type guard to check if an object has a message property\n */\nfunction hasMessageProperty(obj: unknown): obj is { message: unknown } {\n return typeof obj === 'object' && obj !== null && 'message' in obj;\n}\n\n/**\n * Type guard to check if an object has an error property\n */\nfunction hasErrorProperty(obj: unknown): obj is { error: unknown } {\n return typeof obj === 'object' && obj !== null && 'error' in obj;\n}\n\n/**\n * Extracts a message from FetchBaseQueryError data field\n */\nfunction extractMessageFromData(data: unknown): string | null {\n if (typeof data === 'string') {\n return data;\n }\n\n if (typeof data === 'object' && data !== null) {\n if (hasMessageProperty(data)) {\n return String(data.message);\n }\n if (hasErrorProperty(data)) {\n return String(data.error);\n }\n try {\n return JSON.stringify(data);\n } catch {\n return String(data);\n }\n }\n\n return null;\n}\n\n/**\n * Extracts error message from a FetchBaseQueryError\n */\nfunction extractFetchBaseQueryErrorMessage(\n error: FetchBaseQueryError,\n): string | null {\n if ('error' in error && typeof error.error === 'string') {\n return error.error;\n }\n\n if ('data' in error) {\n return extractMessageFromData(error.data);\n }\n\n return null;\n}\n\n/**\n * Extracts a human-readable error message from RTK Query errors.\n * Handles both FetchBaseQueryError and SerializedError types.\n *\n * @param error - The error object from RTK Query\n * @returns A string representation of the error message\n */\nexport function getRTKQErrorMessage(error: unknown): string {\n if (!error) {\n return 'Unknown error';\n }\n\n if (isFetchBaseQueryErrorShape(error)) {\n const message = extractFetchBaseQueryErrorMessage(error);\n if (message) {\n return message;\n }\n }\n\n // Handle SerializedError\n if (hasMessageProperty(error)) {\n return String(error.message);\n }\n\n return String(error);\n}\n","import { useCallback, useEffect, useMemo, useState } from 'react';\nimport {\n useDoesHatcheryOptionExistsQuery,\n useLaunchHatcheryWorkspaceMutation,\n useTerminateHatcheryWorkspaceMutation,\n} from '../core/hatcheryApi';\nimport {\n isFetchBaseQueryError,\n RequestedWorkspaceStatus,\n selectJEGActiveWorkspaceStatus,\n setJEGActiveWorkspaceId,\n setJEGActiveWorkspaceStatus,\n setJEGRequestedWorkspaceStatus,\n useCoreDispatch,\n useCoreSelector,\n WorkspaceStatus,\n} from '@gen3/core';\nimport { useDeepCompareEffect } from 'use-deep-compare';\nimport { notifications } from '@mantine/notifications';\nimport { MicroContainerReduxContextValue } from './types';\nimport { getRTKQErrorMessage } from '../utils';\n\n/**\n * Resolves an error message for a workspace-related operation.\n *\n * This function determines the error message to return based on the provided `error` object.\n * If the `error` object matches the criteria for a Fetch Base Query Error, the appropriate\n * RTK Query error message is returned. Otherwise, a default error message is used.\n *\n * @param {unknown} error - The error object encountered during the operation. Can be of any type.\n * @param {string} defaultMessage - The default message to use if the error does not match\n * a Fetch Base Query Error.\n * @returns {string} The resolved error message, either derived from the specific error or the default message.\n */\nconst getWorkspaceErrorMessage = (\n error: unknown,\n defaultMessage: string,\n): string => {\n if (isFetchBaseQueryError(error)) {\n return getRTKQErrorMessage(error);\n }\n return defaultMessage;\n};\n\n/**\n * Displays an error notification with the specified title and message.\n *\n * This function clears any existing notifications before showing a new\n * one. Notifications are displayed at the top-center of the screen.\n *\n * @param {string} title - The title of the error notification.\n * @param {string} message - The message content of the error notification.\n */\n\n// oxlint-disable-next-line no-unused-vars\nconst showErrorNotification = (title: string, message: string) => {\n // Clear any existing notifications first\n notifications.clean(); // TODO debounce instead of clearing\n\n notifications.show({\n title,\n message,\n position: 'top-center',\n });\n};\n\n/**\n * Custom React hook that integrates with a micro-container system using Redux.\n * Enables launching and terminating containerized workspaces while managing state and errors.\n * Note must use the JEG versions of the redux actions.\n *\n * @param {string} tag - A unique identifier or tag for the container.\n * @param {boolean} enabled - A flag indicating whether the functionality is enabled.\n * @return {MicroContainerReduxContextValue} An object containing the workspace status, container hash,\n * and functions to launch or terminate the workspace.\n *\n * @typedef {Object} MicroContainerReduxContextValue\n * @property {WorkspaceStatus} status - The current status of the workspace container (e.g., launching, running, terminating).\n * @property {string | null} containerHash - The unique hash of the container, or null if not yet set.\n * @property {Function} launch - Function to asynchronously launch the workspace container.\n * @property {Function} terminate - Function to asynchronously terminate the workspace container.\n */\nexport function useMicroContainerRedux(\n tag: string,\n enabled: boolean,\n): MicroContainerReduxContextValue {\n const workspaceContainerStatus = useCoreSelector(\n selectJEGActiveWorkspaceStatus,\n );\n const [containerHash, setContainerHash] = useState<string | null>(null);\n const coreDispatch = useCoreDispatch();\n\n // get the options for the workspace could move to parent\n const { data: optionData } = useDoesHatcheryOptionExistsQuery(tag, {\n skip: containerHash !== null,\n });\n\n const [\n launchTrigger,\n { isError: isWorkspaceLaunchError, error: workspaceLaunchError },\n ] = useLaunchHatcheryWorkspaceMutation();\n const [\n terminateWorkspace,\n { isError: isTerminateError, error: workspaceTerminateError },\n ] = useTerminateHatcheryWorkspaceMutation();\n useEffect(() => {\n if (optionData) setContainerHash(optionData);\n }, [optionData]);\n\n // handle errors in launching, getting status, or terminating\n useDeepCompareEffect(() => {\n if (isWorkspaceLaunchError || isTerminateError) {\n const errorMessage = getWorkspaceErrorMessage(\n isWorkspaceLaunchError ? workspaceLaunchError : workspaceTerminateError,\n isWorkspaceLaunchError\n ? 'Error launching workspace'\n : 'Error stopping workspace',\n );\n\n console.error(\n 'useMicroContainerRedux (workspace launch or terminate)',\n errorMessage,\n );\n\n if (isWorkspaceLaunchError) {\n coreDispatch(setJEGActiveWorkspaceStatus(WorkspaceStatus.LaunchError));\n } else {\n coreDispatch(\n setJEGActiveWorkspaceStatus(WorkspaceStatus.TerminateError),\n );\n }\n coreDispatch(\n setJEGRequestedWorkspaceStatus(RequestedWorkspaceStatus.Unset),\n );\n }\n }, [isWorkspaceLaunchError, isTerminateError]);\n\n const launch = useCallback(async (tag?: string): Promise<void> => {\n if (\n !enabled ||\n workspaceContainerStatus === WorkspaceStatus.Launching ||\n workspaceContainerStatus === WorkspaceStatus.Running\n )\n return; // already running or launching so ignore\n\n const isTagString = tag && typeof tag === 'string';\n if (isTagString) {\n // set hash to passed in tag\n setContainerHash(tag);\n }\n\n try {\n coreDispatch(\n setJEGRequestedWorkspaceStatus(RequestedWorkspaceStatus.Launch),\n );\n coreDispatch(setJEGActiveWorkspaceStatus(WorkspaceStatus.Launching));\n // use tag if provided to prevent race condition with setContainerHash\n const query = isTagString ? encodeURIComponent(tag) : (containerHash ? encodeURIComponent(containerHash) : '');\n const launchResults = await launchTrigger(query).unwrap();\n if (!launchResults) {\n // launch error, will show error message and then reset\n coreDispatch(setJEGActiveWorkspaceStatus(WorkspaceStatus.LaunchError));\n } else {\n // Keep status as Launching — the monitor will promote to Running\n // once the pod actually reports running status\n coreDispatch(\n setJEGActiveWorkspaceId({ id: containerHash ?? 'default' }),\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_error: unknown) {\n coreDispatch(setJEGActiveWorkspaceStatus(WorkspaceStatus.LaunchError));\n }\n // Status will resolve to 'running' on the next poll\n }, [\n enabled,\n workspaceContainerStatus,\n coreDispatch,\n containerHash,\n launchTrigger,\n ]);\n\n const terminate = useCallback(async () => {\n if (!enabled || workspaceContainerStatus === WorkspaceStatus.Terminating)\n return; // skip if already terminating\n\n const containerId = containerHash ? encodeURIComponent(containerHash) : '';\n // Fire-and-forget: errors are handled by the useDeepCompareEffect watching isTerminateError\n terminateWorkspace(containerId);\n coreDispatch(\n setJEGRequestedWorkspaceStatus(RequestedWorkspaceStatus.Terminate),\n );\n coreDispatch(setJEGActiveWorkspaceStatus(WorkspaceStatus.Terminating));\n }, [\n enabled,\n workspaceContainerStatus,\n coreDispatch,\n containerHash,\n terminateWorkspace,\n ]);\n\n return useMemo(\n () => ({\n status: workspaceContainerStatus,\n containerHash,\n launch,\n terminate,\n }),\n [workspaceContainerStatus, containerHash, launch, terminate],\n );\n}\n","import { WorkspaceStatus } from '@gen3/core';\nimport { MicroContainerStatus } from './types';\nimport { HatcheryServiceState } from '../core/types';\n\nexport const hatcheryStateToMicroContainerStatus = (\n state: HatcheryServiceState,\n): MicroContainerStatus => {\n switch (state) {\n case HatcheryServiceState.running:\n return 'running';\n case HatcheryServiceState.launching:\n return 'launching';\n case HatcheryServiceState.terminating:\n return 'terminating';\n case HatcheryServiceState.stopped:\n return 'not-running';\n case HatcheryServiceState.error:\n return 'error';\n case HatcheryServiceState.unknown:\n default:\n return 'unknown';\n }\n};\n\nexport const hatcheryStateToWorkspaceStatus = (\n state: HatcheryServiceState,\n): WorkspaceStatus => {\n switch (state) {\n case HatcheryServiceState.running:\n return WorkspaceStatus.Running;\n case HatcheryServiceState.launching:\n return WorkspaceStatus.Launching;\n case HatcheryServiceState.terminating:\n return WorkspaceStatus.Terminating;\n case HatcheryServiceState.stopped:\n return WorkspaceStatus.Stopped;\n case HatcheryServiceState.error:\n return WorkspaceStatus.Errored;\n case HatcheryServiceState.unknown:\n return WorkspaceStatus.NotFound;\n default:\n return WorkspaceStatus.NotFound;\n }\n};\n","import { useEffect, useState } from 'react';\nimport {\n isTimeGreaterThan,\n RequestedWorkspaceStatus,\n selectJEGActiveWorkspaceStatus,\n selectJEGRequestedWorkspaceStatus,\n selectJEGRequestedWorkspaceStatusTimestamp,\n setJEGActiveWorkspaceStatus,\n setJEGRequestedWorkspaceStatus,\n useCoreDispatch,\n useCoreSelector,\n WorkspaceStatus,\n} from '@gen3/core';\nimport { notifications } from '@mantine/notifications';\nimport { useDeepCompareEffect } from 'use-deep-compare';\nimport { convertSecondsToMilliseconds } from '@gen3/frontend';\nimport {\n useHatcheryStatusQuery,\n useTerminateHatcheryWorkspaceMutation,\n} from '../core/hatcheryApi';\nimport { HatcheryServiceState } from '../core/types';\nimport { hatcheryStateToWorkspaceStatus } from './utils';\nimport { getRTKQErrorMessage } from '../utils';\n\nconst MAXIMUM_START_TIME_IN_MINUTES = 6;\n\nenum NotificationStatus {\n Info,\n Warn,\n Error,\n}\n\nconst notifyUser = (\n title: string,\n message: string,\n status = NotificationStatus.Info,\n) => {\n const NotificationMap: Record<NotificationStatus, string> = {\n [NotificationStatus.Info]: 'utility.1',\n [NotificationStatus.Warn]: 'utility.2',\n [NotificationStatus.Error]: 'utility.4',\n };\n\n notifications.clean();\n notifications.show({\n title,\n message,\n color: NotificationMap[status],\n position: 'top-center',\n });\n};\n\n// TODO: convert to seconds/minutes for readability\nconst WorkspacePollingInterval: Record<WorkspaceStatus, number> = {\n [WorkspaceStatus.NotFound]: 0,\n [WorkspaceStatus.Launching]: convertSecondsToMilliseconds(5),\n [WorkspaceStatus.Terminating]: convertSecondsToMilliseconds(5),\n [WorkspaceStatus.Running]: convertSecondsToMilliseconds(60),\n [WorkspaceStatus.Stopped]: convertSecondsToMilliseconds(60),\n [WorkspaceStatus.Errored]: convertSecondsToMilliseconds(10),\n [WorkspaceStatus.LaunchError]: convertSecondsToMilliseconds(10),\n [WorkspaceStatus.TerminateError]: convertSecondsToMilliseconds(10),\n [WorkspaceStatus.StatusError]: 0,\n};\n\nconst workspaceShutdownAlertLimit = 30000; // 5 minutes: 5 * 60 * 1000 TODO Figure how to configure this\n\n/**\n * Monitors resource usage.\n * Handles state changes and polls for workspace status using the JEG APIs\n */\n\nexport const useJEGWorkspaceResourceMonitor = (\n workspaceId: string | null = null,\n monitorWorkspace: boolean,\n startTimeLimit: number = MAXIMUM_START_TIME_IN_MINUTES,\n) => {\n // start with default polling interval of 1 second\n const [pollingInterval, setPollingInterval] = useState<number>(\n convertSecondsToMilliseconds(1),\n );\n const [error, setError] = useState<string | null>(null);\n\n const {\n data: workspaceStatusData,\n isError: isWorkspaceStatusError,\n error: workspaceStatusError,\n } = useHatcheryStatusQuery(\n workspaceId,\n monitorWorkspace // && workspaceId // TODO check to see if this is needed\n ? {\n pollingInterval: pollingInterval,\n refetchOnMountOrArgChange: 1800,\n refetchOnFocus: true,\n }\n : {\n skip: true,\n },\n );\n\n const [terminateWorkspace] = useTerminateHatcheryWorkspaceMutation();\n const activeStatus = useCoreSelector(selectJEGActiveWorkspaceStatus);\n const requestedStatus = useCoreSelector(selectJEGRequestedWorkspaceStatus); // trigger to start/stop workspaces\n const requestedStatusTimestamp = useCoreSelector(\n selectJEGRequestedWorkspaceStatusTimestamp,\n );\n const dispatch = useCoreDispatch();\n const idleTimeLimit = workspaceStatusData?.idleTimeLimit;\n const lastActivityTime = workspaceStatusData?.lastActivityTime;\n\n useEffect(() => {\n if (isWorkspaceStatusError) {\n dispatch(setJEGActiveWorkspaceStatus(WorkspaceStatus.StatusError));\n setPollingInterval(0); // stop polling\n const errorMessage = getRTKQErrorMessage(workspaceStatusError);\n setError(errorMessage);\n }\n }, [isWorkspaceStatusError, dispatch, workspaceStatusError]);\n\n // update the polling based on the requested state\n useEffect(() => {\n if (requestedStatus === RequestedWorkspaceStatus.Launch) {\n setPollingInterval(WorkspacePollingInterval[WorkspaceStatus.Launching]);\n }\n if (requestedStatus === RequestedWorkspaceStatus.Terminate) {\n setPollingInterval(WorkspacePollingInterval[WorkspaceStatus.Terminating]);\n }\n }, [requestedStatus]);\n\n useDeepCompareEffect(() => {\n // TODO: add better error logging\n if (error) {\n console.log('useJEGWorkspaceResourceMonitor', error);\n }\n }, [error]);\n\n useDeepCompareEffect(() => {\n // No status data means we are not polling\n if (!workspaceStatusData) return;\n // LaunchError is set client-side by the launch() call from useMicroContainerRedux and cleared by the\n // auto-reset timer in the panel. Polling data must not override it or the\n // timer will be canceled before it fires.\n if (activeStatus === WorkspaceStatus.LaunchError) return;\n const workspaceQueryStatus = hatcheryStateToWorkspaceStatus(\n workspaceStatusData?.status,\n );\n\n // handle cases of unknown, running, terminating, or launching\n if (workspaceStatusData.status === HatcheryServiceState.unknown) {\n // check for unknown state\n // NotFound means pod is not running\n // either starting up\n // or finally terminated.\n if (requestedStatus === RequestedWorkspaceStatus.Launch) {\n // if the workspace becomes idle too long after a Launch request, switch to\n // Unset and NotFound.\n console.warn(\n \"requested status is Launch, but workspace pod isn't running yet.\",\n );\n return;\n }\n // both requested status and workspace pod status are the same, so stop all polling\n setPollingInterval(WorkspacePollingInterval[WorkspaceStatus.NotFound]);\n dispatch(setJEGActiveWorkspaceStatus(WorkspaceStatus.NotFound));\n if (requestedStatus === RequestedWorkspaceStatus.Terminate) {\n // Cleanup termination after terminated\n dispatch(\n setJEGRequestedWorkspaceStatus(RequestedWorkspaceStatus.Unset),\n );\n }\n return;\n }\n\n // Check if the workspace is running.\n // If so: need to check workspace idle if set\n if (workspaceStatusData.status === HatcheryServiceState.running) {\n // in some state other than idle\n if (!idleTimeLimit || idleTimeLimit <= 0) {\n // Workspace is running, but no idle limit set.\n // Continue to poll to ensure we detect if it crashes or stops.\n dispatch(\n setJEGRequestedWorkspaceStatus(RequestedWorkspaceStatus.Unset),\n );\n dispatch(setJEGActiveWorkspaceStatus(WorkspaceStatus.Running)); // workspace is running\n setPollingInterval(WorkspacePollingInterval[WorkspaceStatus.Running]);\n return;\n }\n\n // handle if idle time is defined\n if (\n idleTimeLimit &&\n idleTimeLimit > 0 &&\n lastActivityTime &&\n lastActivityTime > 0\n ) {\n const remainingWorkspaceKernelLife =\n idleTimeLimit - (Date.now() - lastActivityTime);\n\n if (remainingWorkspaceKernelLife <= 0) {\n // kernel has died due to inactivity\n // so terminate\n (async () => {\n try {\n if (workspaceId)\n await terminateWorkspace(\n encodeURIComponent(workspaceId),\n ).unwrap();\n } catch (error) {\n const errorMessage =\n (error as Error).message || 'Unknown error occurred';\n console.error('Workspace termination failed: ', errorMessage);\n notifyUser(\n 'Workspace Error',\n `Failed to terminate workspace: ${errorMessage}`,\n NotificationStatus.Error,\n );\n }\n })();\n dispatch(\n setJEGRequestedWorkspaceStatus(RequestedWorkspaceStatus.Terminate),\n );\n setPollingInterval(\n WorkspacePollingInterval[WorkspaceStatus.Terminating],\n );\n dispatch(setJEGActiveWorkspaceStatus(WorkspaceStatus.Terminating));\n notifyUser(\n 'Workspace Shutdown',\n 'Workspace has been idle for too long. Shutting workspace down',\n NotificationStatus.Error,\n );\n return;\n }\n if (remainingWorkspaceKernelLife <= workspaceShutdownAlertLimit) {\n setError('Workspace has been idle for too long. Will shutdown soon');\n }\n }\n }\n\n // Stopped means the pod is in a failed state — auto-terminate it\n if (workspaceStatusData.status === HatcheryServiceState.stopped) {\n (async () => {\n try {\n if (workspaceId)\n await terminateWorkspace(encodeURIComponent(workspaceId)).unwrap();\n } catch (error) {\n const errorMessage =\n (error as Error).message || 'Unknown error occurred';\n console.error(\n 'Workspace termination of stopped pod failed: ',\n errorMessage,\n );\n notifyUser(\n 'Workspace Error',\n `Failed to terminate stopped workspace: ${errorMessage}`,\n NotificationStatus.Error,\n );\n }\n })();\n dispatch(\n setJEGRequestedWorkspaceStatus(RequestedWorkspaceStatus.Terminate),\n );\n dispatch(setJEGActiveWorkspaceStatus(WorkspaceStatus.Terminating));\n setPollingInterval(WorkspacePollingInterval[WorkspaceStatus.Terminating]);\n notifyUser(\n 'Workspace Stopped',\n 'Workspace entered a failed state and is being terminated',\n NotificationStatus.Error,\n );\n return;\n }\n\n if (requestedStatus === RequestedWorkspaceStatus.Launch) {\n // if we have a launch error then requested status has not been met\n if (workspaceQueryStatus === WorkspaceStatus.LaunchError) {\n dispatch(\n setJEGRequestedWorkspaceStatus(RequestedWorkspaceStatus.Unset),\n );\n dispatch(setJEGActiveWorkspaceStatus(WorkspaceStatus.LaunchError));\n return;\n }\n if (workspaceQueryStatus === WorkspaceStatus.NotFound) {\n return; // pod not yet created, keep waiting\n }\n if (workspaceQueryStatus === WorkspaceStatus.Running) {\n // workspace is running — requested status has been met\n dispatch(\n setJEGRequestedWorkspaceStatus(RequestedWorkspaceStatus.Unset),\n );\n dispatch(setJEGActiveWorkspaceStatus(WorkspaceStatus.Running));\n return;\n }\n // still launching — update active status but keep requestedStatus as Launch\n dispatch(setJEGActiveWorkspaceStatus(workspaceQueryStatus));\n return;\n }\n\n if (requestedStatus === RequestedWorkspaceStatus.Terminate) {\n return;\n }\n\n // if here, update active workspace status and polling for other states\n dispatch(setJEGActiveWorkspaceStatus(workspaceQueryStatus));\n setPollingInterval(WorkspacePollingInterval[workspaceQueryStatus]);\n }, [dispatch, workspaceStatusData, requestedStatus, activeStatus]);\n\n useEffect(() => {\n // time out if exceeding maximum start time\n if (\n requestedStatus === RequestedWorkspaceStatus.Launch &&\n isTimeGreaterThan(requestedStatusTimestamp, startTimeLimit)\n ) {\n if (workspaceId) terminateWorkspace(encodeURIComponent(workspaceId));\n dispatch(\n setJEGRequestedWorkspaceStatus(RequestedWorkspaceStatus.Terminate),\n // no need to set as it will get set above\n );\n setError('Workspace failed to start. Shutting down');\n }\n }, [\n requestedStatus,\n requestedStatusTimestamp,\n dispatch,\n workspaceStatusData,\n workspaceId,\n terminateWorkspace,\n startTimeLimit,\n ]);\n};\n","import React, { createContext, ReactNode } from 'react';\nimport { useMicroContainerRedux } from './useMicroContainerRedux';\nimport { WorkspaceStatus } from '@gen3/core';\nimport { MicroContainerReduxContextValue } from './types';\nimport { useJEGWorkspaceResourceMonitor } from './useJEGWorkspaceResourceMonitor';\n\nconst MicroContainerReduxProviderContext =\n createContext<MicroContainerReduxContextValue>({\n status: WorkspaceStatus.NotFound,\n containerHash: null,\n launch: () => Promise.resolve(),\n terminate: () => Promise.resolve(),\n });\n\nexport const useMicroContainerReduxContext = () => {\n const context = React.useContext(MicroContainerReduxProviderContext);\n if (context === undefined) {\n throw Error(\n 'useMicroContainerContext must be used inside a MicroContainerProvider',\n );\n }\n return context;\n};\n\ninterface MicroContainerProviderProps {\n children: ReactNode;\n identifierTag?: string;\n enabled: boolean;\n startTimeLimit?: number;\n}\n\nexport function MicroContainerReduxProvider({\n children,\n identifierTag,\n enabled,\n startTimeLimit = undefined,\n}: MicroContainerProviderProps) {\n const tag =\n identifierTag ?? (process.env.NEXT_PUBLIC_MICRO_CONTAINER_TAG || '');\n\n const value = useMicroContainerRedux(tag, enabled);\n useJEGWorkspaceResourceMonitor(value.containerHash, true, startTimeLimit);\n\n return (\n <MicroContainerReduxProviderContext.Provider value={value}>\n {children}\n </MicroContainerReduxProviderContext.Provider>\n );\n}\n","import React, { useCallback, useEffect, useState, useMemo } from 'react';\nimport { Alert, Button, Loader, Select, ComboboxItem } from '@mantine/core';\nimport { useInterval } from '@mantine/hooks';\nimport {\n selectJEGActiveWorkspaceStatus,\n selectJEGRequestedWorkspaceStatusTimestamp,\n setJEGActiveWorkspaceStatus,\n useCoreDispatch,\n useCoreSelector,\n WorkspaceStatus,\n} from '@gen3/core';\nimport { useMicroContainerReduxContext } from '../providers/MicroContainerReduxProvider';\nimport { useHatcheryOptionsQuery } from '../core/hatcheryApi';\nimport { Icon } from '@iconify-icon/react';\nimport { MdExpandMore } from 'react-icons/md';\n\nconst icon = <Icon icon=\"gen3:error-outline\" size={24} />;\n\n/**\n * Micro container lifecycle UI — five exclusive states.\n *\n * not-running → \"Launch Workspace\" button + cost context. Nothing else.\n * launching → Spinner + elapsed timer + \"Starting your workspace…\" + Cancel.\n * running → Compact status badge (renders at top of right panel).\n * terminating → Spinner + \"Stopping workspace…\". No actions until pod is gone.\n * error → Error message + Terminate / Retry buttons.\n *\n * The iframe and KernelLifecyclePanel are rendered by the PARENT only when\n * status === 'running' && useJupyterReady.ready === true.\n */\n\nconst PanelStyle =\n 'h-full w-full flex flex-col items-center justify-start gap-6 px-6 mt-20';\n\nconst MicroContainerReduxPanel = ({enableOptions = false}) => {\n const { launch, terminate, containerHash } = useMicroContainerReduxContext();\n const { data: hatcheryOptions, isLoading: isHatcheryOptionsLoading, isError: isHatcheryOptionsError} = useHatcheryOptionsQuery();\n const [ workspaceOptionSelected, setWorkspaceOptionSelected ] = useState<ComboboxItem | null>(null);\n\n const status = useCoreSelector(selectJEGActiveWorkspaceStatus);\n const requestedStatusTimestamp: number = useCoreSelector(\n selectJEGRequestedWorkspaceStatusTimestamp,\n );\n\n const coreDispatch = useCoreDispatch();\n\n const resetStatus = useCallback(() => {\n coreDispatch(setJEGActiveWorkspaceStatus(WorkspaceStatus.NotFound));\n }, [coreDispatch]);\n\n /* ── Elapsed timer for launching state ── */\n const [elapsedSec, setElapsedSec] = useState(0);\n\n const interval = useInterval(() => {\n const elapsed = Math.floor(\n (Date.now() - (requestedStatusTimestamp as number)) / 1000,\n );\n setElapsedSec(elapsed);\n }, 1000);\n\n useEffect(() => {\n if (status === WorkspaceStatus.Launching) {\n interval.start();\n } else {\n setElapsedSec(0);\n interval.stop();\n }\n return interval.stop;\n }, [status, interval]);\n\n /* ── Auto-reset after 15 s in launch-error state ── */\n useEffect(() => {\n if (status !== WorkspaceStatus.LaunchError) return;\n const t = setTimeout(() => resetStatus(), 6_000);\n return () => clearTimeout(t);\n }, [status, resetStatus]);\n\n const simpleLaunchWorkspaceBtn = (\n <Button variant=\"outline\" color=\"accent.3\" onClick={()=>launch()}>\n Launch Workspace\n </Button>\n );\n\n const launchWorkspaceBtn = useMemo(()=>{\n if (isHatcheryOptionsLoading) {\n return (<Loader size={24} />);\n }\n if (isHatcheryOptionsError) {\n return (\n <Alert\n variant=\"light\"\n color=\"accentWarm.4\"\n title=\"Options API Error\"\n icon={icon}\n >\n Failed to Fetch Options\n </Alert>\n );\n }\n if ( hatcheryOptions && hatcheryOptions.length > 1) {\n\n const workspaceOptionLaunch = () => {\n if (workspaceOptionSelected?.value) {\n launch(workspaceOptionSelected.value);\n }\n };\n const hatcheryOptionForSelect = hatcheryOptions.map((obj)=>({\n label: obj.name,\n value: obj.id\n }));\n return (\n <div className='flex'>\n <Select\n rightSection={\n <MdExpandMore\n className=\"text-accent\"\n size=\"1.5em\"\n aria-hidden\n />\n }\n withCheckIcon={false}\n data={hatcheryOptionForSelect}\n value={workspaceOptionSelected ? workspaceOptionSelected.value : null}\n placeholder='-- Select workspace type --'\n onChange={(_value, option) => setWorkspaceOptionSelected(option)}\n classNames={{input: 'rounded-r-none'}}\n color=\"accent.3\"\n />\n <Button \n onClick={workspaceOptionLaunch}\n className='rounded-l-none w-64 disabled:bg-accent-lighter disabled:text-accent-contrast'\n disabled={!workspaceOptionSelected?.value}\n color=\"accent.3\"\n >\n Launch Workspace\n </Button>\n </div>\n );\n }\n return simpleLaunchWorkspaceBtn;\n }, [isHatcheryOptionsLoading, workspaceOptionSelected, containerHash]);\n\n if (status === WorkspaceStatus.StatusError) {\n return (\n <div className={PanelStyle}>\n <Alert\n variant=\"light\"\n color=\"accentWarm.4\"\n title=\"Status Error\"\n icon={icon}\n >\n Unable to get the status of your workspace. Please try again later.\n </Alert>\n </div>\n );\n }\n\n /* ── not-running ── */\n if (status === WorkspaceStatus.NotFound) {\n return (\n <div className={PanelStyle}>\n <div className=\"text-center\">\n <Icon\n icon=\"gen3:run\"\n width={60}\n height={60}\n className=\"text-accent\"\n />\n\n <p className=\"mt-2 max-w-lg text-sm text-base-darker\">\n Start your personal micro compute environment. Use it for light analysis, upgrade to a GPU kernel when you need to run large workflows.\n </p>\n </div>\n { enableOptions ? launchWorkspaceBtn: simpleLaunchWorkspaceBtn }\n </div>\n );\n }\n\n /* ── launching ── */\n if (status === WorkspaceStatus.Launching) {\n return (\n <div role=\"status\" className={PanelStyle}>\n <Loader size={48} />\n <span className=\"sr-only\">Starting workspace, please wait.</span>\n <div className=\"text-center\">\n <p className=\"text-base font-bold text-base-darkest\">\n Starting your workspace…\n </p>\n <p className=\"mt-1 text-sm text-base-darker\">\n Elapsed: {elapsedSec} {elapsedSec === 1 ? 'second' : 'seconds'}\n </p>\n <p className=\"mt-1 text-xs text-base-dark\">\n Usually takes 30–90 seconds on a cold start.\n </p>\n </div>\n <Button onClick={terminate} variant=\"outline\">\n Cancel\n </Button>\n </div>\n );\n }\n\n /* ── error ── */\n if (status === WorkspaceStatus.LaunchError) {\n return (\n <div role=\"alert\" className={PanelStyle}>\n <Alert\n variant=\"light\"\n color=\"accentWarm.4\"\n title=\"Status Error\"\n icon={icon}\n >\n Workspace failed to start.\n </Alert>\n <div className=\"flex items-center gap-3\">\n <Button onClick={resetStatus} variant=\"default\">\n Reset\n </Button>\n </div>\n </div>\n );\n }\n\n /* ── error ── */\n if (status === WorkspaceStatus.Stopped) {\n return (\n <div role=\"alert\" className={PanelStyle}>\n <div className=\"text-center\">\n <p className=\"text-base font-bold text-base-darkest\">\n Workspace stopped\n </p>\n </div>\n <div className=\"flex items-center gap-3\">\n <Button onClick={terminate} variant=\"outline\">\n Terminate\n </Button>\n <Button onClick={()=>launch()} variant=\"default\">\n Retry\n </Button>\n </div>\n </div>\n );\n }\n\n /* ── terminating ── */\n if (status === WorkspaceStatus.Terminating) {\n return (\n <div role=\"status\" className={PanelStyle}>\n <Loader size={48} />\n <span className=\"sr-only\">Stopping workspace, please wait.</span>\n <div className=\"text-center\">\n <p className=\"text-base font-bold text-base-darkest\">\n Stopping your workspace…\n </p>\n <p className=\"mt-1 text-xs text-base-darker\">\n Waiting for the container to shut down. This usually takes under a\n minute.\n </p>\n </div>\n </div>\n );\n }\n\n // none of the above so render nothing\n return null;\n};\n\nexport default MicroContainerReduxPanel;\n","import React, {\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\nimport type { WorkspaceAuthContext } from '../../auth/auth';\nimport { generateScopedNotebookPath } from './utils';\nimport { Button, Card, Loader, Text } from '@mantine/core';\nimport MicroContainerReduxPanel from '../../components/MicroContainerReduxPanel';\nimport { useMicroContainerReduxContext } from '../../providers/MicroContainerReduxProvider';\nimport { WorkspaceStatus } from '@gen3/core';\nimport { type RemoteComputeWorkspaceHandle } from './types';\nimport { ACTIVITY_CHANNEL } from '@gen3/frontend';\n\nexport type RemoteComputeWorkspaceProps = {\n assetBaseUrl?: string;\n enableOptions?: boolean;\n className?: string;\n onReady?: () => void;\n onError?: (error: Error) => void;\n authContext?: WorkspaceAuthContext;\n runtimeModeKey?: string;\n // Multi-tenant scope for session isolation and audit trails\n tenantId: string;\n workspaceId: string;\n userId: string;\n notebookName?: string;\n};\n\n/**\n * Handle a Jupyter Enterprise Gateway session.\n */\nconst RemoteComputeWorkspace = React.memo(\n React.forwardRef<RemoteComputeWorkspaceHandle, RemoteComputeWorkspaceProps>(\n (\n {\n assetBaseUrl = '/api/workspace-assets/remote',\n enableOptions = false,\n tenantId,\n workspaceId,\n userId,\n notebookName = 'remote-workspace',\n onReady = () => {},\n onError = () => {},\n }: RemoteComputeWorkspaceProps,\n ref,\n ) => {\n const [loading, setLoading] = useState(true);\n const [loadError, setLoadError] = useState(false);\n const [retryCount, setRetryCount] = useState(0);\n const [jupyterReady, setJupyterReady] = useState(false);\n const iframeRef = useRef<HTMLIFrameElement | null>(null);\n const broadcastChannelRef = useRef<BroadcastChannel | null>(null);\n const { status } = useMicroContainerReduxContext();\n\n const normalizedBase = assetBaseUrl.replace(/\\/$/, '');\n\n // Scoped notebook path for session isolation\n let scopedNotebookPath: string;\n try {\n scopedNotebookPath = generateScopedNotebookPath({\n tenantId,\n workspaceId,\n userId,\n notebookName,\n });\n } catch (error: unknown) {\n if (error instanceof Error) {\n // show the error in the console\n console.error(error.message);\n }\n const userHash = btoa(userId || 'anonymous').substring(0, 8);\n scopedNotebookPath = `/workspace/${userHash}/${notebookName}.ipynb`;\n }\n\n // let accessToken = undefined;\n // if (process.env.NODE_ENV === 'development') {\n // // NOTE: This cookie can only be accessed from the client side\n // // in development mode. Otherwise, the cookie is set as httpOnly\n // accessToken = getCookie('credentials_token');\n // }\n\n // set up BroadcastChannel\n useEffect(() => {\n if (!broadcastChannelRef?.current) {\n broadcastChannelRef.current = new BroadcastChannel(ACTIVITY_CHANNEL);\n }\n\n return () => {\n if (broadcastChannelRef.current) {\n broadcastChannelRef.current.close();\n broadcastChannelRef.current = null;\n }\n };\n }, []);\n\n // Handle setting up iframe event listeners for activity detection.\n // Tries same-origin contentDocument access first; falls back to\n // focus/blur heuristics when the iframe is cross-origin.\n useEffect(() => {\n if (!jupyterReady) return;\n\n const updateUserActivity = () => {\n if (broadcastChannelRef.current) {\n broadcastChannelRef.current.postMessage({\n type: 'activity-update',\n timestamp: Date.now(),\n });\n }\n };\n\n const iframe = iframeRef.current;\n let usedDirectListeners = false;\n\n if (iframe?.contentWindow) {\n try {\n const iframeDoc =\n iframe.contentDocument || iframe.contentWindow.document;\n\n if (iframeDoc) {\n iframeDoc.addEventListener('mousedown', updateUserActivity);\n iframeDoc.addEventListener('keypress', updateUserActivity);\n iframeDoc.addEventListener('scroll', updateUserActivity);\n iframeDoc.addEventListener('touchstart', updateUserActivity);\n usedDirectListeners = true;\n }\n } catch {\n // cross-origin — fall through to focus/blur fallback\n }\n }\n\n // Fallback: treat iframe receiving focus as user activity.\n // This fires when the user clicks into the iframe even if we\n // cannot attach listeners to its document directly.\n if (!usedDirectListeners) {\n window.addEventListener('blur', updateUserActivity);\n window.addEventListener('focus', updateUserActivity);\n }\n\n return () => {\n if (usedDirectListeners && iframe?.contentWindow) {\n try {\n const iframeDoc =\n iframe.contentDocument || iframe.contentWindow.document;\n if (iframeDoc) {\n iframeDoc.removeEventListener('mousedown', updateUserActivity);\n iframeDoc.removeEventListener('keypress', updateUserActivity);\n iframeDoc.removeEventListener('scroll', updateUserActivity);\n iframeDoc.removeEventListener('touchstart', updateUserActivity);\n }\n } catch {\n // Ignore cleanup errors\n }\n }\n if (!usedDirectListeners) {\n window.removeEventListener('blur', updateUserActivity);\n window.removeEventListener('focus', updateUserActivity);\n }\n };\n }, [jupyterReady]);\n /* ---- Wait for JupyterLite app inside the iframe --------------- */\n\n useEffect(() => {\n if (!iframeRef.current || loadError) return;\n if (jupyterReady) return;\n\n let mounted = true;\n let attempts = 0;\n const maxAttempts = 60; // ~30s at 500ms intervals\n\n const poll = () => {\n if (!mounted) return;\n attempts += 1;\n try {\n const app = (iframeRef.current?.contentWindow as any)?.jupyterapp;\n\n /* ------ TODO Remove\n // Inject server-side JEG token — overrides any client-supplied auth header.\n // This ensures calls from JupyterLite's own serverconnection.js are also authenticated.\n let accessToken = getCookie('access_token');\n if (process.env.NODE_ENV === 'development') {\n // NOTE: This cookie can only be accessed from the client side\n // in development mode. Otherwise, the cookie is set as httpOnly\n accessToken = getCookie('credentials_token');\n }\n\n if (app && accessToken) {\n console.log(\n 'Injecting server-side JEG token into JupyterLite app',\n app,\n );\n const win = iframeRef.current?.contentWindow as any;\n // JupyterLab reads token from PageConfig at startup; after startup, update ServerConnection\n if (win.PageConfig) {\n win.PageConfig.setOption('token', accessToken);\n }\n // Also update the service manager's settings if accessible\n if (app.serviceManager?.serverSettings) {\n // ServerConnection.makeSettings merges with existing settings\n const SC =\n win.JupyterFrontEnd?.ServerConnection ?? win.ServerConnection;\n if (SC?.makeSettings) {\n const newSettings = SC.makeSettings({\n ...app.serviceManager.serverSettings,\n token: accessToken,\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n // Reassign — works on many JupyterLab 3/4 builds\n app.serviceManager._serverSettings = newSettings;\n }\n }\n }\n ------ */\n\n if (app?.status === 'ready' || app?.started) {\n setJupyterReady(true);\n onReady?.();\n console.log('Remote kernel JupyterLite app is ready');\n return;\n }\n } catch (error: unknown) {\n if (error instanceof Error) {\n console.error(`Remote error ${error.message}`);\n }\n // cross-origin or not loaded yet\n }\n if (attempts < maxAttempts) {\n window.setTimeout(poll, 500);\n }\n };\n\n // Start polling after iframe fires onLoad\n if (!loading) {\n poll();\n }\n\n return () => {\n mounted = false;\n };\n }, [loading, loadError, jupyterReady, onReady]);\n\n /* ---- Kernel attachment via same-origin iframe access ----------- */\n\n const attachKernel = useCallback(\n async (kernelId: string, kernelName: string): Promise<boolean> => {\n try {\n const app = (iframeRef.current?.contentWindow as any)?.jupyterapp;\n if (!app?.serviceManager?.sessions) {\n console.warn(\n '[RemoteComputeWorkspace] JupyterApp not ready for kernel attachment',\n );\n return false;\n }\n\n await app.serviceManager.sessions.startNew({\n name: notebookName,\n path: scopedNotebookPath,\n type: 'notebook',\n kernel: { id: kernelId, name: kernelName },\n });\n\n return true;\n } catch (err) {\n console.error(\n '[RemoteComputeWorkspace] Failed to attach kernel:',\n err,\n );\n return false;\n }\n },\n [scopedNotebookPath, notebookName],\n );\n\n /* ---- Expose handle to parent ---------------------------------- */\n\n useImperativeHandle(\n ref,\n () => ({\n attachKernel,\n isReady: jupyterReady,\n }),\n [attachKernel, jupyterReady],\n );\n\n /* ---- Retry handler -------------------------------------------- */\n\n const handleRetry = () => {\n setLoadError(false);\n setLoading(true);\n setJupyterReady(false);\n setRetryCount((n) => n + 1);\n };\n\n if (status !== WorkspaceStatus.Running) {\n return (\n <div className=\"w-full flex flex-col grow\">\n <MicroContainerReduxPanel enableOptions={enableOptions}/>\n </div>\n );\n }\n\n return (\n <div className=\"w-full flex flex-col grow\">\n {loading && !loadError && (\n <div\n role=\"status\"\n aria-label=\"Connecting to remote workspace\"\n className=\"w-full h-full pointer-events-none flex items-center justify-center\"\n >\n <div className=\"pointer-events-auto flex flex-col items-center gap-3 rounded-xl border border-slate-200 bg-white p-6 shadow-xl dark:border-slate-700 dark:bg-slate-900\">\n <Loader size={24} />\n <Text size=\"sm\" c=\"dimmed\" mt={4}>\n Connecting to Remote Gateway...\n </Text>\n <Button\n variant=\"default\"\n size=\"xs\"\n mt=\"sm\"\n onClick={handleRetry}\n >\n Taking too long? Reload\n </Button>\n </div>\n </div>\n )}\n {loadError && (\n <div>\n <Card withBorder shadow=\"sm\" padding=\"md\" w=\"100%\" maw={448}>\n <Text fw={600} c=\"primary\">\n Remote workspace failed to load\n </Text>\n <Text size=\"sm\" c=\"dimmed\" mt={4}>\n Unable to connect to the Jupyter Gateway. Check the browser\n console for details.\n </Text>\n <Button\n variant=\"default\"\n size=\"xs\"\n mt=\"sm\"\n onClick={handleRetry}\n >\n Retry\n </Button>\n </Card>\n </div>\n )}\n\n <div className=\"w-full flex flex-col grow\">\n <iframe\n key={retryCount}\n ref={iframeRef}\n src={`${normalizedBase}/lab/index.html`}\n width=\"100%\"\n height=\"100%\"\n title=\"Remote Jupyter Workspace\"\n sandbox=\"allow-scripts allow-same-origin allow-forms allow-popups allow-downloads allow-modals allow-storage-access-by-user-activation\"\n allow=\"clipboard-read; clipboard-write; cross-origin-isolated\"\n className=\"min-h-0 flex-1 border-0\"\n onLoad={() => {\n setLoading(false);\n // jupyterReady is set by the polling effect once the\n // JupyterLite app reports status === 'ready'\n }}\n onError={() => {\n setLoadError(true);\n onError?.(\n new Error('Unable to load remote Jupyter workspace.'),\n );\n }}\n />\n </div>\n </div>\n );\n },\n ),\n);\n\nexport default RemoteComputeWorkspace;\n\nRemoteComputeWorkspace.displayName = 'RemoteComputeWorkspace';\n","import { gen3Api } from '@gen3/core';\nimport { GEN3_KERNEL_API } from '../constants';\nimport { KernelSpecEntry, KernelSpecsResponse } from './types';\n\nconst KernelWithTags = gen3Api.enhanceEndpoints({\n addTagTypes: ['Kernel'],\n});\n\ninterface KernelItemResponse {\n name: string;\n id: string;\n execution_state: string;\n last_activity: string;\n connections: number;\n}\n\nexport interface KernelItem extends Omit<\n KernelItemResponse,\n 'execution_state' | 'last_activity'\n> {\n executionState: string;\n lastActivity: string;\n}\n\nexport const kernelApi = KernelWithTags.injectEndpoints({\n endpoints: (builder) => ({\n kernels: builder.query<Array<KernelItem>, void>({\n query: () => `${GEN3_KERNEL_API}/kernels`,\n transformResponse: (response: Array<KernelItemResponse>) => {\n return response.map((kernel) => ({\n ...kernel,\n executionState: kernel.execution_state,\n lastActivity: kernel.last_activity,\n }));\n },\n }),\n kernalSpecs: builder.query<Array<KernelSpecEntry>, void>({\n query: () => {\n return `${GEN3_KERNEL_API}/kernelspecs`;\n },\n transformResponse: (response: KernelSpecsResponse) => {\n const res = Object.values(response.kernelspecs).reduce((acc, value) => {\n acc.push({\n name: value.name,\n displayName: value.spec.display_name,\n language: value.spec.language,\n nodeType: value.spec.metadata?.nodeType,\n // TODO: cpu and gpu\n // cpu: value.spec.metadata?.cpu,\n // gpu: value.spec.metadata?.gpu,\n });\n return acc;\n }, [] as Array<KernelSpecEntry>);\n return res;\n },\n }),\n kernelsList: builder.query<Array<KernelItem>, void>({\n query: () => `${GEN3_KERNEL_API}/kernels_list`,\n transformResponse: (response: Array<KernelItemResponse>) => {\n return response.map((kernel) => ({\n ...kernel,\n executionState: kernel.execution_state,\n lastActivity: kernel.last_activity,\n }));\n },\n }),\n }),\n overrideExisting: true,\n});\n\nexport const { useKernelsQuery, useKernalSpecsQuery, useKernelsListQuery } =\n kernelApi;\n","import { gen3Api } from '@gen3/core';\nimport { GEN3_JEG_GATEWAY_API } from '../constants';\nimport { GatewayKernel } from '../core/types';\n\n/**\n * manages lifecycle of kernels from JEG Gateway API\n */\n\nconst GatewayWithTags = gen3Api.enhanceEndpoints({\n addTagTypes: ['Gateway', 'ActiveKernels'],\n});\n\nexport const jegGatewayApi = GatewayWithTags.injectEndpoints({\n endpoints: (builder) => ({\n activeKernels: builder.query<Array<GatewayKernel>, void>({\n query: () => ({\n url: `${GEN3_JEG_GATEWAY_API}/kernels`,\n // Auth proxies may redirect 401/403 to a login page (302→200 HTML).\n // Per-request validateStatus catches that by rejecting redirected responses.\n validateStatus: (response) =>\n !response.redirected &&\n response.status >= 200 &&\n response.status < 300,\n }),\n transformResponse: (response: Array<GatewayKernel>) => {\n return response;\n },\n providesTags: ['ActiveKernels'],\n }),\n jegGatewayStatus: builder.query<boolean, void>({\n query: () => `${GEN3_JEG_GATEWAY_API}/status`,\n transformResponse: (response: Record<string, unknown>, _meta) => {\n const data = response as { enabled?: boolean };\n return data?.enabled ?? false;\n },\n }),\n launchKernel: builder.mutation<GatewayKernel, string>({\n query: (kernelName: string) => {\n return {\n url: `${GEN3_JEG_GATEWAY_API}/kernels`,\n method: 'POST',\n body: JSON.stringify({ name: kernelName }),\n };\n },\n invalidatesTags: ['ActiveKernels'],\n }),\n terminateKernel: builder.mutation<void, string>({\n query: (kernelId) => ({\n url: `${GEN3_JEG_GATEWAY_API}/kernels/${encodeURIComponent(kernelId)}`,\n method: 'DELETE',\n }),\n invalidatesTags: ['ActiveKernels'],\n }),\n reapKernels: builder.mutation<any, void>({\n query: () => {\n return {\n url: `/api/workspace/kernel/reap`,\n method: 'POST',\n };\n },\n invalidatesTags: ['ActiveKernels'],\n }),\n }),\n overrideExisting: true,\n});\n\nexport const {\n useActiveKernelsQuery,\n useLaunchKernelMutation,\n useTerminateKernelMutation,\n useJegGatewayStatusQuery,\n useReapKernelsMutation,\n} = jegGatewayApi;\n\n// select active kernels\nexport const selectActiveKernels =\n jegGatewayApi.endpoints.activeKernels.select();\n","import React from 'react';\nimport { formatUptimeInMinutes } from '@gen3/core';\nimport { Badge, Button, Divider, Stack, Text } from '@mantine/core';\nimport { KernelRow, KernelSpecEntry } from '../../core/types';\nimport { useTerminateKernelMutation } from '../../core/jegGatewayApi';\n\ninterface RunningKernelPanelProps extends KernelRow {\n onOpenNotebook?: (kernelId: string) => void;\n forceTerminate?: boolean;\n rowSpec?: KernelSpecEntry;\n connections?: number;\n}\n\nconst ActiveKernelInfoPanel = ({\n kernelId,\n kernelName,\n executionState,\n uptimeMinutes,\n forceTerminate = false,\n rowSpec,\n connections = 0,\n}: RunningKernelPanelProps) => {\n const [terminateKernel, { isLoading: isTerminatingLoading }] =\n useTerminateKernelMutation();\n\n const isStaleOrIdle = executionState === 'idle';\n return (\n <div\n key={kernelId}\n className=\"rounded-sm border-2 border-base-light bg-base-lighter p-2 transition hover:shadow-sm\"\n >\n <div className=\"flex min-w-0 items-start justify-between gap-2 m-2\">\n <div className=\"min-w-0\">\n <p className=\"truncate text-base font-bold text-base-darkest\">\n {kernelName || 'python3'}\n </p>\n <p className=\"mt-1 text-xs font-medium text-base-darker\">\n State:{' '}\n <span className=\"uppercase\">{executionState || 'unknown'}</span>\n </p>\n {/* TODO: See where this is set\n staleState === 'warning' && (\n <p className=\"mt-1 text-xs text-accentWarm-dark\">\n Idle warning: inactive for about{' '}\n {Math.floor(idleDays || 0)} day(s).\n </p>\n ) */}\n {/*\n TODO: See where this is set\n staleState === 'kill' && (\n <p className=\"mt-1 text-xs text-primary\">\n Stale kill policy applies; autosave + terminate pending.\n </p>\n )*/}\n </div>\n <Badge color={isStaleOrIdle ? 'utility.2' : 'utility.6'}>\n <Text size=\"xs\" tt=\"uppercase\" fw={600} c=\"base-contrast.4\" />\n {isStaleOrIdle ? 'Idle' : 'Active'}\n </Badge>\n </div>\n\n <Stack\n className=\" rounded-lg bg-accent-lightest bg-opacity-10 p-4 text-xs text-base-darkest m-2\"\n gap={4}\n >\n <div className=\"flex items-center justify-between\">\n <span className=\"font-semibold text-base-darker\">Last Activity:</span>\n <span className=\"font-bold text-base-darkest\">\n {formatUptimeInMinutes(uptimeMinutes)}\n </span>\n </div>\n <Divider color=\"primary.4\" />\n <div className=\"flex items-center justify-between\">\n <span className=\"font-semibold text-base-darker\">GPU:</span>\n <span className=\"font-bold text-accent-dark\">\n {rowSpec?.gpuType || 'none'}\n </span>\n </div>\n <Divider color=\"primary.4\" />\n <div className=\"flex items-center justify-between\">\n <span className=\"font-semibold text-base-darker\">Connections:</span>\n <span className=\"font-bold text-accent-dark\">\n {connections.toLocaleString()}\n </span>\n </div>\n {(rowSpec?.cpu || rowSpec?.memory) && (\n <div className=\"flex gap-3 border-t border-base-lighter pt-2\">\n {rowSpec?.cpu && (\n <span className=\"text-base-darker\">\n CPU:{' '}\n <strong className=\"text-base-darkest\">{rowSpec.cpu}</strong>\n </span>\n )}\n {rowSpec?.memory && (\n <span className=\"text-base-darker\">\n RAM:{' '}\n <strong className=\"text-base-darkest\">{rowSpec.memory}</strong>\n </span>\n )}\n </div>\n )}\n </Stack>\n\n <div className=\"mt-5 flex gap-3 m-2\">\n {/* TODO: Implement when functionality is available\n <Button\n aria-label={`Open notebook for ${kernelName || 'python3'} kernel`}\n onClick={() => onOpenNotebook?.(kernelId)}\n disabled={!onOpenNotebook}\n color=\"accent\"\n variant=\"light\"\n className=\"flex-1 border-accent-light/60\"\n >\n Open Notebook\n </Button>\n ----------- */}\n <Button\n aria-label={`${forceTerminate ? 'Force terminate' : 'Terminate'} ${kernelName || 'python3'} kernel`}\n onClick={() => terminateKernel(kernelId)}\n loading={isTerminatingLoading}\n variant=\"outline\"\n color=\"primary.4\"\n fullWidth\n >\n {forceTerminate ? 'Force Terminate' : 'Terminate'}\n </Button>\n </div>\n </div>\n );\n};\n\nexport default ActiveKernelInfoPanel;\n","export const TextStyle =\n 'text-md font-bold uppercase tracking-wider text-base-darker';\n\nexport const PanelStyle =\n 'min-w-0 rounded-sm border-2 border-base-lighter bg-base-max p-2 transition hover:shadow-sm';\n","import React, { useEffect } from 'react';\nimport { useKernalSpecsQuery } from '../../core/kernelApi';\nimport { LoadingOverlay, Stack, Text } from '@mantine/core';\nimport ActiveKernelInfoPanel from './ActiveKernelInfoPanel';\nimport { useActiveKernelsQuery } from '../../core/jegGatewayApi';\nimport {\n CoreState,\n normalizeRtkError,\n removeManyJEGActiveKernels,\n selectJEGKernelIds,\n upsertManyJEGActiveKernels,\n useCoreDispatch,\n useCoreSelector,\n} from '@gen3/core';\nimport { PanelStyle, TextStyle } from './styling';\n\nexport const ActiveKernelsPanel = () => {\n const {\n data: kernels,\n isLoading,\n isError,\n error,\n } = useActiveKernelsQuery(undefined, {\n pollingInterval: 10000,\n refetchOnMountOrArgChange: 1800,\n refetchOnFocus: true,\n selectFromResult: ({ data, isLoading, isError, error }) => ({\n data,\n isLoading,\n isError,\n error,\n }),\n });\n\n const persistedActiveKernels = useCoreSelector((state: CoreState) =>\n selectJEGKernelIds(state),\n );\n const coreDispatch = useCoreDispatch();\n\n useEffect(() => {\n if (!kernels) return;\n\n const liveIds = new Set(kernels.map((k) => k.id));\n\n const staleIds = (persistedActiveKernels as string[]).filter(\n (id) => !liveIds.has(id),\n );\n if (staleIds.length > 0) {\n coreDispatch(removeManyJEGActiveKernels(staleIds));\n }\n\n coreDispatch(\n upsertManyJEGActiveKernels(\n kernels.map((k) => ({\n id: k.id,\n name: k.name,\n connections: k.connections,\n executionState: k.execution_state.toLowerCase(),\n lastActivity: k.last_activity,\n })),\n ),\n );\n }, [coreDispatch, kernels, persistedActiveKernels]);\n\n const {\n data: kernelSpecs,\n isFetching: isFetchingKernelSpecs,\n isError: isErrorKernelSpecs,\n error: errorKernelSpecs,\n } = useKernalSpecsQuery();\n\n if (isError) {\n const normalizedError = normalizeRtkError(error);\n const status = normalizedError?.status;\n const isAuthError = status === 401 || status === 403;\n return (\n <div className=\"mt-4 flex justify-center items-center text-sm bg-accent-lighter text-accent-contrast-lighter p-2\">\n <LoadingOverlay visible={isLoading} />\n <Text size=\"sm\">\n {isAuthError\n ? 'You must be logged in to view active kernels.'\n : 'Failed to load active kernels.'}\n </Text>\n </div>\n );\n }\n\n if (isErrorKernelSpecs) {\n const normalizedError = normalizeRtkError(errorKernelSpecs);\n const status = normalizedError?.status;\n const isAuthError = status === 401 || status === 403;\n return (\n <div className=\"mt-4 flex justify-center items-center text-sm bg-accent-lighter text-accent-contrast-lighter p-2\">\n <LoadingOverlay visible={isFetchingKernelSpecs} />\n <Text size=\"sm\">\n {isAuthError\n ? 'You must be logged in to view kernel specs.'\n : 'Failed to load kernel specs.'}\n </Text>\n </div>\n );\n }\n\n return (\n <Stack\n gap={2}\n classNames={{\n root: PanelStyle,\n }}\n >\n <LoadingOverlay visible={isLoading} />\n <Text className={TextStyle}>Active Kernels</Text>\n {kernels && kernels?.length > 0 ? (\n kernels.map((kernel) => {\n // convert last_activity from iso timestamp to minutes\n const kernelUptime =\n new Date().getTime() - new Date(kernel.last_activity).getTime();\n\n return (\n <ActiveKernelInfoPanel\n kernelId={kernel.id}\n kernelName={kernel.name}\n executionState={kernel.execution_state.toLowerCase()}\n uptimeMinutes={Math.floor(kernelUptime / 60000)}\n connections={kernel.connections}\n rowSpec={kernelSpecs?.find((spec) => spec.name === kernel.name)}\n key={kernel.id}\n />\n );\n })\n ) : (\n <div className=\"mt-4 flex justify-center items-center text-sm bg-accent-lighter text-accent-contrast-lighter p-2\">\n <Text size=\"sm\">No active kernels.</Text>\n </div>\n )}\n </Stack>\n );\n};\n\nexport default ActiveKernelsPanel;\n","import React from 'react';\nimport { Badge, Loader } from '@mantine/core';\nimport type { GatewayConnectionState } from '../../hooks/useGatewayConnection';\n\nexport interface ConnectionStatusBadgeProps {\n state: GatewayConnectionState;\n /** Called when user clicks the \"Retry\" link in error state. */\n onRetry?: () => void;\n}\n\n/**\n * Small inline indicator rendered inside KernelLifecyclePanel header.\n * In 'reconnecting' state the lifecycle panel and iframe remain visible —\n * this badge is the ONLY signal to the user, preserving their workflow.\n */\nconst ConnectionStatusBadge = ({ state }: ConnectionStatusBadgeProps) => {\n if (state === 'idle') return null;\n\n if (state === 'connected') {\n return (\n <Badge\n variant=\"light\"\n leftSection={\n <span\n className=\"h-1.5 w-1.5 rounded-full bg-accent-dark\"\n aria-hidden=\"true\"\n />\n }\n color=\"accent\"\n className=\"normal-case\"\n role=\"status\"\n >\n Connected\n </Badge>\n );\n }\n\n if (state === 'launching') {\n return (\n <Badge\n variant=\"light\"\n leftSection={<Loader size=\"0.75rem\" />}\n className=\"normal-case\"\n role=\"status\"\n aria-live=\"polite\"\n >\n Starting kernel…\n </Badge>\n );\n }\n\n if (state === 'attaching') {\n return (\n <Badge\n variant=\"light\"\n leftSection={<Loader size=\"0.75rem\" />}\n className=\"normal-case\"\n role=\"status\"\n aria-live=\"polite\"\n >\n Connecting…\n </Badge>\n );\n }\n\n if (state === 'reconnecting') {\n return (\n <Badge\n variant=\"light\"\n leftSection={<Loader size=\"0.75rem\" />}\n className=\"normal-case\"\n role=\"status\"\n aria-live=\"polite\"\n >\n Reconnecting…\n </Badge>\n );\n }\n\n if (state === 'error') {\n return (\n <Badge\n variant=\"light\"\n leftSection={<span aria-hidden=\"true\">✕</span>}\n className=\"normal-case\"\n role=\"alert\"\n >\n Error\n </Badge>\n );\n }\n\n return null;\n};\n\nexport default ConnectionStatusBadge;\n","import React from 'react';\nimport { Stack, Text } from '@mantine/core';\nimport ConnectionStatusBadge from './ConnectionStatusBadge';\nimport type { GatewayConnectionState } from '../../hooks/useGatewayConnection';\nimport { PanelStyle, TextStyle } from './styling';\nimport { useReapKernelsMutation } from '../../core/jegGatewayApi';\n\ninterface GatewayConnectionPanelProps {\n gatewayStatus: string;\n onRetryConnection?: () => void;\n onRunStaleReap?: () => void;\n}\n\nexport const GatewayConnectionPanel = ({\n gatewayStatus,\n onRetryConnection = () => null,\n // oxlint-disable-next-line no-unused-vars\n onRunStaleReap = () => null,\n}: GatewayConnectionPanelProps) => {\n // TODO Add support for stale kernel reap\n // oxlint-disable-next-line no-unused-vars\n const [reapKernels, { isLoading, isError }] = useReapKernelsMutation();\n return (\n <Stack className={PanelStyle} justify=\"space-between\">\n <Text className={TextStyle}>Gateway</Text>\n <div className=\"flex items-center gap-2\">\n {gatewayStatus && (\n <ConnectionStatusBadge\n state={gatewayStatus as GatewayConnectionState}\n onRetry={onRetryConnection}\n />\n )}\n {/* TODO: Implement or place somewhere else\n <Button\n onClick={() => reapKernels()}\n disabled={!onRunStaleReap}\n variant=\"default\"\n loading={isLoading}\n >\n Reap Stale Kernels\n </Button>\n */}\n </div>\n </Stack>\n );\n};\n\nexport default GatewayConnectionPanel;\n","import React, { useEffect, useState } from 'react';\nimport { Button, Group, LoadingOverlay, Select, Text } from '@mantine/core';\nimport { InfoRolloverButton } from '@gen3/frontend';\nimport { useKernalSpecsQuery } from '../../core/kernelApi';\nimport { KernelSelection } from './types';\nimport { PanelStyle, TextStyle } from './styling';\n\ninterface KernelSelectorProps {\n handleLaunchKernel: (kernelName: string) => void;\n isLaunchingLoading: boolean;\n onKernelSelectionChange?: (selection: KernelSelection) => void;\n disabled?: boolean;\n}\n\nconst KernelSelector = ({\n handleLaunchKernel,\n isLaunchingLoading,\n onKernelSelectionChange,\n disabled = false,\n}: KernelSelectorProps) => {\n const { data: kernelSpecs, isLoading, isError } = useKernalSpecsQuery();\n\n const [selectedKernelName, setSelectedKernelName] = useState<string>(\n kernelSpecs?.[0]?.name || 'python3',\n );\n\n // When specs arrive after first render (async load), reset selectedKernelName\n // if the current value is no longer a valid spec name.\n useEffect(() => {\n if (kernelSpecs && kernelSpecs?.length > 0) {\n setSelectedKernelName((prev) => {\n if (!kernelSpecs?.find((s) => s.name === prev)) {\n return kernelSpecs?.[0]?.name || 'python3';\n }\n return prev;\n });\n }\n }, [kernelSpecs]);\n\n // set the global kernel selection\n useEffect(() => {\n onKernelSelectionChange?.({\n kernelName: selectedKernelName || undefined,\n });\n }, [selectedKernelName, onKernelSelectionChange]);\n\n const selectedSpec = kernelSpecs?.find((s) => s.name === selectedKernelName);\n const selectedSpecCost = selectedSpec?.costPerHour ?? 0;\n const resourceTags = selectedSpec\n ? ((\n [\n selectedSpec.cpu && {\n label: 'CPU',\n value: selectedSpec.cpu,\n gpu: false,\n },\n selectedSpec.memory && {\n label: 'RAM',\n value: selectedSpec.memory,\n gpu: false,\n },\n selectedSpec.gpuType && {\n label: 'GPU',\n value: selectedSpec.gpuType,\n gpu: true,\n },\n ] as const\n ).filter(Boolean) as { label: string; value: string; gpu: boolean }[])\n : [];\n\n return (\n <div className={PanelStyle}>\n <Group gap={4}>\n <Text className={TextStyle}>Launch Kernel</Text>\n <InfoRolloverButton\n label=\"Launch and manage compute kernels.\"\n size=\"sm\"\n />\n </Group>\n <div className=\"mt-4 space-y-4\">\n <LoadingOverlay visible={isLoading} />\n <div>\n {/*<label htmlFor=\"klp-kernel-spec\" className=\"mb-1.5 block text-xs font-bold uppercase tracking-wide text-base-dark\">Kernel Spec</label>*/}\n <Select\n id=\"klp-kernel-spec\"\n value={selectedKernelName}\n onChange={(value) => setSelectedKernelName(value as string)}\n disabled={disabled || isError}\n data={\n kernelSpecs?.length === 0\n ? [{ value: 'python3', label: 'python3' }]\n : kernelSpecs?.map((spec) => {\n const parts: string[] = [];\n if (spec.cpu) parts.push(`${spec.cpu} CPU`);\n if (spec.memory) parts.push(spec.memory);\n if (spec.gpuType) parts.push(spec.gpuType);\n const resources =\n parts.length > 0 ? ` · ${parts.join(' · ')}` : '';\n const cost =\n spec.costPerHour != null && spec.costPerHour > 0\n ? ` — $${spec.costPerHour.toFixed(2)}/hr`\n : spec.nodeType === 'micro'\n ? ' — included'\n : '';\n return {\n value: spec.name,\n label: `${spec.displayName}${resources}${cost}`,\n };\n })\n }\n label=\"Kernels\"\n />\n {selectedSpecCost > 0 && (\n <p className=\"mt-1 text-xs text-accentWarm-dark\">\n GPU kernels auto-terminate after 4h idle. Max 1 GPU kernel per\n user.\n </p>\n )}\n </div>\n\n {/* Resource summary for the selected spec */}\n {resourceTags.length > 0 && (\n <div className=\"flex flex-wrap gap-2 text-xs\">\n {resourceTags.map(({ label, value, gpu }) => (\n <span\n key={label}\n className={`rounded-full px-2.5 py-1 font-semibold ${\n gpu\n ? 'bg-accent-max text-accent-dark'\n : 'bg-base-lightest text-base-darkest'\n }`}\n >\n {label}: {value}\n </span>\n ))}\n </div>\n )}\n\n <Button\n onClick={() => handleLaunchKernel(selectedKernelName || 'python3')}\n loading={isLaunchingLoading}\n fullWidth\n disabled={disabled || isError}\n >\n {isLaunchingLoading ? 'Working...' : 'Launch Kernel'}\n </Button>\n </div>\n </div>\n );\n};\n\nexport default KernelSelector;\n","import React, { useCallback, useMemo } from 'react';\nimport { useJegGatewayStatusQuery } from '../core/jegGatewayApi';\n\nexport type GatewayConnectionStatus =\n | 'connected'\n | 'disconnected'\n | 'fetching'\n | 'service_unavailable';\n\nexport function useGatewayConnectionStatus() {\n const [gatewayStatus, setGatewayStatus] =\n React.useState<string>('disconnected');\n const [gatewayMessage, setGatewayMessage] = React.useState<string | null>(\n null,\n );\n\n const setGatewayStatusAndMessage = useCallback(\n (state: string, message?: string) => {\n setGatewayStatus(state);\n setGatewayMessage(message ?? null);\n },\n [],\n );\n\n // get the status of the gateway\n const {\n data: gatewayStatusData,\n isFetching: isGatewayFetching,\n isError,\n } = useJegGatewayStatusQuery(undefined, {\n pollingInterval: 10000,\n refetchOnMountOrArgChange: 1800,\n refetchOnFocus: true,\n });\n\n const gatewayServiceStatus = useMemo(() => {\n if (isGatewayFetching) return 'fetching';\n if (!isError) return 'service_unavailable';\n if (!gatewayStatus) return 'service_unavailable';\n if (gatewayStatusData) return 'connected';\n return 'disconnected';\n }, [gatewayStatus, gatewayStatusData, isError, isGatewayFetching]);\n\n return useMemo(\n () => ({\n gatewayServiceStatus,\n gatewayStatus,\n gatewayMessage,\n setGatewayStatusAndMessage,\n }),\n [\n gatewayServiceStatus,\n gatewayStatus,\n gatewayMessage,\n setGatewayStatusAndMessage,\n ],\n );\n}\n","import React, { useEffect } from 'react';\nimport { Group, Text } from '@mantine/core';\nimport type { GatewayConnectionState } from '../../hooks/useGatewayConnection';\nimport { InfoRolloverButton } from '@gen3/frontend';\nimport ActiveKernelsPanel from './ActiveKernelsPanel';\nimport { useLaunchKernelMutation } from '../../core/jegGatewayApi';\nimport GatewayConnectionPanel from './GatewayConnectionPanel';\nimport KernelSelector from './KernelSelector';\nimport { KernelSelection } from './types';\nimport { useKernalSpecsQuery } from '../../core/kernelApi';\nimport { useGatewayConnectionStatus } from '../../providers/useGatewayConnectionStatus';\nimport {\n addJEGActiveKernel,\n selectAllJEGKernels,\n useCoreDispatch,\n useCoreSelector,\n} from '@gen3/core';\nimport { useDeepCompareEffect } from 'use-deep-compare';\nimport { TextStyle } from './styling';\n\ninterface LaunchKernelInput {\n kernelName: string;\n}\n\nexport interface KernelLifecyclePanelProps {\n notice?: string | null;\n launching?: boolean;\n /** Current gateway connection state — drives status badge and reconnect strip. */\n connectionState?: GatewayConnectionState;\n /** The currently active kernel (for billing banner). */\n activeKernelName?: string | null;\n /** How long the micro-container has been online, in minutes. Shown per-kernel as \"Container Uptime\". */\n containerUptimeMinutes?: number | null;\n /** Called when user clicks Retry in the error badge. */\n onRetryConnection?: () => void;\n onRunStaleReap?: () => void;\n onLaunchKernel?: (input: LaunchKernelInput) => void;\n onOpenNotebook?: (kernelId: string) => void;\n onTerminateKernel?: (kernelId: string) => void;\n onKernelSelectionChange?: (selection: KernelSelection) => void;\n idleKillDays?: number;\n maxKernelAgeDays?: number;\n /**\n * When true, the terminate button on each kernel row is labelled \"Force Terminate\"\n * and is always visible regardless of kernel execution state.\n * Use this in JEG mode where GPU kernels can get stuck and must be force-evicted.\n */\n forceTerminate?: boolean;\n}\n\nconst MAX_KERNELS_ACTIVE = 2;\n\nconst KernelLifecyclePanel = ({\n activeKernelName,\n onRetryConnection,\n onRunStaleReap,\n}: KernelLifecyclePanelProps) => {\n const notice = undefined;\n\n const coreDispatch = useCoreDispatch();\n\n const numActiveKernels = useCoreSelector(selectAllJEGKernels)?.length || 0;\n\n const { gatewayServiceStatus, gatewayStatus, setGatewayStatusAndMessage } =\n useGatewayConnectionStatus();\n\n useEffect(() => {\n setGatewayStatusAndMessage('reconnecting');\n // check store to see if last known kernels are still running\n }, []);\n\n useDeepCompareEffect(() => {\n if (gatewayServiceStatus) {\n setGatewayStatusAndMessage('connected');\n }\n }, [gatewayServiceStatus]);\n\n const { data: kernelSpecs } = useKernalSpecsQuery();\n\n // get the function to launch kernels\n const [launchKernel, { isLoading: isLaunchingLoading }] =\n useLaunchKernelMutation();\n\n const handleLaunchKernel = async (kernelName: string) => {\n try {\n setGatewayStatusAndMessage('launching');\n // .unwrap() forces the promise to reject on HTTP failure\n const results = await launchKernel(kernelName).unwrap();\n // add to active kernels\n setGatewayStatusAndMessage('connected');\n\n // add to active kernels so these will persist between page reloads\n coreDispatch(\n addJEGActiveKernel({\n id: results.id,\n name: results.name,\n connections: results.connections,\n lastActivity: results.last_activity,\n executionState: results.execution_state,\n }),\n );\n } catch (error) {\n console.error('Launch kernel failed!', error);\n // The user can now manually hit \"Submit\" again to retry safely\n setGatewayStatusAndMessage('error', 'Launch kernel failed!');\n }\n };\n\n // Billing banner: show when any active kernel has a cost > 0\n const activeKernelSpec = activeKernelName\n ? kernelSpecs?.find((s) => s.name === activeKernelName)\n : null;\n const billingActive = (activeKernelSpec?.costPerHour ?? 0) > 0;\n\n return (\n <div className=\"flex flex-col overflow-hidden gap-y-4 p-2\">\n <Group gap={4}>\n <Text className={TextStyle}>Kernel Lifecycle</Text>\n <InfoRolloverButton\n label=\"Launch and manage compute kernels.\"\n size=\"sm\"\n />\n </Group>\n <GatewayConnectionPanel\n gatewayStatus={gatewayStatus}\n onRetryConnection={onRetryConnection}\n onRunStaleReap={onRunStaleReap}\n />\n\n {/* Reconnect strip — non-disruptive yellow banner; lifecycle panel stays usable */}\n {gatewayStatus === 'reconnecting' && (\n <div\n role=\"status\"\n aria-live=\"polite\"\n className=\"flex items-center gap-2 rounded-md border border-accentWarm-light bg-accentWarm-max px-3 py-2 text-xs text-accentWarm-dark\"\n >\n <span aria-hidden=\"true\">⟳</span>\n Connection to kernel interrupted — reconnecting automatically. Your\n work is safe.\n </div>\n )}\n\n {/* Billing banner — persistent warning when a paid kernel is active */}\n {billingActive && activeKernelSpec && (\n <div\n role=\"status\"\n aria-live=\"polite\"\n className=\"mt-3 flex items-center justify-between gap-2 rounded-md border border-accentWarm bg-accentWarm-max px-3 py-2 text-xs font-semibold text-accentWarm-darkest\"\n >\n <span>\n GPU kernel running — billing active ($\n {activeKernelSpec.costPerHour?.toFixed(2)}/hr). Terminate to stop\n charges.\n </span>\n </div>\n )}\n\n {notice && (\n <p\n role=\"status\"\n className=\"mt-4 rounded-md border border-base-lighter bg-base-lightest bg-opacity-50 px-3 py-2 text-sm text-base-darker\"\n >\n {notice}\n </p>\n )}\n\n <KernelSelector\n handleLaunchKernel={handleLaunchKernel}\n isLaunchingLoading={isLaunchingLoading}\n disabled={numActiveKernels >= MAX_KERNELS_ACTIVE}\n />\n <ActiveKernelsPanel />\n </div>\n );\n};\n\nexport type { LaunchKernelInput };\nexport default KernelLifecyclePanel;\n","export const PanelStyle =\n 'w-full h-full bg-base-lightest border-base-lighter border-2 border-t-0';\nexport const PanelHeaderStyle =\n 'flex items-center justify-between px-4 py-2 border-b-2 border-base-lighter bg-base-max';\nexport const PanelHeaderTextStyle =\n 'uppercase text-lg font-semibold text-base-contrast-max';\nexport const PanelBodyStyle = 'flex-1 overflow-auto p-2';\n","import React from 'react';\nimport { Button, Group, Stack, Text } from '@mantine/core';\nimport { Icon } from '@iconify-icon/react';\nimport { WorkspaceTier } from '../types';\n\nexport interface UpgradeActionsPanelProps {\n currentTier: WorkspaceTier;\n onUpgradeToRemote?: () => void;\n onRequestQuotaIncrease?: () => void;\n onOpenBillingSupport?: () => void;\n}\n\nconst UpgradeActionsPanel = ({\n currentTier,\n onUpgradeToRemote,\n onRequestQuotaIncrease,\n onOpenBillingSupport,\n}: UpgradeActionsPanelProps) => {\n const canUpgrade = currentTier === 'free' || Boolean(onUpgradeToRemote);\n\n return (\n <section className=\"mt-6 overflow-hidden rounded-xl border-2 border-base bg-base-max shadow-sm\">\n <div className=\"px-4 py-3\">\n <Group justify=\"space-between\" wrap=\"nowrap\">\n <Text size=\"lg\" fw={600} c=\"base-darker\" tt=\"uppercase\">\n Capacity & Upgrade\n </Text>\n <Icon icon=\"gen3:bolt\" width={16} height={16} />\n </Group>\n </div>\n\n <div className=\"space-y-2 p-4 pt-0\">\n <Stack>\n <p className=\"my-1 text-sm text-base-contrast-max\">\n {currentTier === 'free'\n ? 'Upgrade to remote kernels for long-running jobs and larger memory footprints.'\n : 'Remote compute is active. You can request expanded quota for larger workloads.'}\n </p>\n </Stack>\n\n {currentTier === 'free' && (\n <Button\n onClick={onUpgradeToRemote}\n disabled={!canUpgrade}\n className=\"w-full border-primary-light\"\n variant=\"filled\"\n leftSection={\n <Icon icon=\"gen3:up-trend-arrow\" width={16} height={16} />\n }\n >\n Upgrade To Remote Tier\n </Button>\n )}\n {currentTier !== 'free' && (\n <>\n <Button\n onClick={onRequestQuotaIncrease}\n disabled={!onRequestQuotaIncrease}\n className=\"w-full\"\n variant=\"default\"\n >\n Request Quota Increase\n </Button>\n <Button\n onClick={onOpenBillingSupport}\n disabled={!onOpenBillingSupport}\n className=\"w-full\"\n variant=\"default\"\n >\n Contact Workspace Support\n </Button>{' '}\n </>\n )}\n </div>\n </section>\n );\n};\n\nexport default UpgradeActionsPanel;\n","import type { ReactNode } from 'react';\nimport React from 'react';\nimport { ActionIcon, Text, Tooltip } from '@mantine/core';\nimport { Icon } from '@iconify-icon/react';\nimport {\n PanelHeaderTextStyle,\n PanelStyle,\n} from '../workspace/WorkspaceLayout/styling';\nimport {\n mergeDefaultTailwindClassnames,\n StylingOverrideWithMergeControl,\n} from '@gen3/frontend';\n\nconst TRANSITION_MS = 250;\nconst ICON_SIZE = 24;\n\nconst STYLING_DEFAULTS = {\n root: PanelStyle,\n header: PanelHeaderTextStyle,\n label: PanelHeaderTextStyle,\n};\n\ntype HorizontalAccordionProps = {\n label: ReactNode;\n expanded: boolean;\n setExpanded: (expanded: boolean) => void;\n children: ReactNode;\n rightSide?: boolean;\n expandedWidth?: number | string;\n collapsedWidth?: number | string;\n classNames?: StylingOverrideWithMergeControl;\n};\n\nexport function HorizontalAccordion({\n label,\n expanded,\n setExpanded,\n children,\n expandedWidth = 300,\n collapsedWidth = 36,\n rightSide = false,\n classNames = {},\n}: HorizontalAccordionProps) {\n const closeIcon = rightSide ? (\n <Icon icon=\"gen3:sidebar-close\" width={ICON_SIZE} height={ICON_SIZE} />\n ) : (\n <Icon icon=\"gen3:sidebar-open\" width={ICON_SIZE} height={ICON_SIZE} />\n );\n\n const openIcon = rightSide ? (\n <Icon icon=\"gen3:sidebar-open\" width={ICON_SIZE} height={ICON_SIZE} />\n ) : (\n <Icon icon=\"gen3:sidebar-close\" width={ICON_SIZE} height={ICON_SIZE} />\n );\n\n const mergedClassNames = mergeDefaultTailwindClassnames(\n STYLING_DEFAULTS,\n classNames,\n );\n\n return (\n <div\n className={`${mergedClassNames.root}`}\n style={{\n width: expanded ? expandedWidth : collapsedWidth,\n transition: `width ${TRANSITION_MS}ms ease`,\n }}\n >\n <div className=\"flex flex-col no-wrap h-full overflow-hidden\">\n <div className=\"flex items-center justify-between px-1 py-1 bg-base-max\">\n <Text\n fw={600}\n size=\"sm\"\n className={`overflow-hidden text-nowrap ${mergedClassNames.label}`}\n style={{\n opacity: expanded ? 1 : 0,\n transition: `opacity transform ${TRANSITION_MS}ms ease`,\n transform: expanded ? 'translateX(0.625rem)' : 'translateX(0)',\n }}\n >\n {label}\n </Text>\n\n <Tooltip label={expanded ? `Collapse ${label}` : `Expand ${label}`}>\n <ActionIcon\n variant=\"subtle\"\n aria-label={expanded ? 'Collapse panel' : 'Expand panel'}\n onClick={() => setExpanded(!expanded)}\n radius=\"xs\"\n >\n {expanded ? openIcon : closeIcon}\n </ActionIcon>\n </Tooltip>\n </div>\n\n <div\n className=\"overflow-hidden px-2\"\n style={{\n opacity: expanded ? 1 : 0,\n pointerEvents: expanded ? 'auto' : 'none',\n transition: `opacity ${TRANSITION_MS}ms ease`,\n width: expandedWidth,\n }}\n >\n {children}\n </div>\n </div>\n </div>\n );\n}\n\nexport default HorizontalAccordion;\n","import React, { useCallback } from 'react';\nimport { SettingsPanelConfiguration } from '../tiers/types';\nimport KernelLifecyclePanel from '../../components/KernelLifecyclePanel/KernelLifecyclePanel';\nimport { PanelStyle } from './styling';\nimport UpgradeActionsPanel from '../../components/UpgradeActionsPanel';\nimport {\n selectWorkspaceTier,\n setWorkspaceTier,\n useCoreDispatch,\n useCoreSelector,\n} from '@gen3/core';\nimport { WorkspaceTier } from '../../types';\nimport HorizontalAccordion from '../../components/HorizontalAccordian';\n\ninterface SettingsPanelProps extends SettingsPanelConfiguration {\n expanded: boolean;\n setExpanded: (_arg: boolean) => void;\n}\n\nexport const SettingsPanel = ({\n showKernels,\n expanded,\n setExpanded,\n width = 380,\n}: SettingsPanelProps) => {\n const currentTier = useCoreSelector(selectWorkspaceTier);\n const coreDispatch = useCoreDispatch();\n\n const onUpgradeToRemote = useCallback(() => {\n coreDispatch(setWorkspaceTier('remote' as WorkspaceTier));\n }, [coreDispatch]);\n\n return (\n <HorizontalAccordion\n label=\"Settings\"\n expanded={expanded}\n setExpanded={setExpanded}\n rightSide\n expandedWidth={width}\n >\n <div className={`${PanelStyle} overflow-y-scroll`}>\n {showKernels && <KernelLifecyclePanel />}\n <UpgradeActionsPanel\n currentTier={\n currentTier !== null ? (currentTier as WorkspaceTier) : 'free'\n }\n onUpgradeToRemote={onUpgradeToRemote}\n />\n </div>\n </HorizontalAccordion>\n );\n};\n\nexport default SettingsPanel;\n","import React, { ReactElement, useState } from 'react';\nimport {\n Accordion,\n Center,\n Group,\n Loader,\n SelectProps,\n Text,\n Popover,\n Button,\n Progress,\n Divider,\n Radio,\n} from '@mantine/core';\nimport {\n type PayModel,\n useGetWorkspacePayModelsQuery,\n useSetCurrentPayModelMutation,\n} from '@gen3/core';\nimport { useDeepCompareCallback, useDeepCompareMemo } from 'use-deep-compare';\nimport {\n FaExclamationCircle as InactiveIcon,\n FaUser as ActiveIcon,\n} from 'react-icons/fa';\nimport { MdExpandMore, MdOpenInNew } from 'react-icons/md';\nimport { FetchBaseQueryError } from '@reduxjs/toolkit/query/react';\nimport { SerializedError } from '@reduxjs/toolkit';\n\n// TODO rework once requirements are made\n\ninterface PayModelMenuItem {\n value: string;\n label: string;\n icon: ReactElement;\n totalUsage: number;\n currentPayModel: boolean; // temp\n}\n\nconst PaymentNumberToString = (\n x: number | undefined,\n undefinedValue = 'N/A',\n precision = 2,\n): string => {\n if (typeof x !== 'number' || Number.isNaN(x)) return undefinedValue;\n\n return x.toFixed(precision);\n};\n\n\nconst isNoPayModelError = (error: FetchBaseQueryError | SerializedError) => {\n return (\n 'status' in error &&\n error.status === 'PARSING_ERROR' &&\n error.originalStatus === 404\n );\n};\n\nconst NoPayModel = () => {\n return (\n <Group\n className=\"p-2 border-1 border-l-0 border-r-0 border-base-lighter w-full h-16\"\n justify=\"space-between\"\n >\n <Text\n className=\"pl-4\"\n size=\"md\"\n classNames={{ root: 'font-heading text-utility-warning' }}\n >\n No pay model defined\n </Text>\n </Group>\n );\n};\n\nconst CostTracker = ({workspaceAccountManagerTarget = ''}) => {\n const { data, isLoading, isFetching, isError, error } =\n useGetWorkspacePayModelsQuery(\n undefined,\n {\n pollingInterval: 120000, // 2 min\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [setWorkspacePayModel] = useSetCurrentPayModelMutation();\n\n const [selectedPayModel, setSelectedPayModel] = useState<string | null>(null);\n\n const [opened, setOpened] = useState<boolean>(false);\n\n const setPayModel = useDeepCompareCallback(\n (id: string) => {\n void setWorkspacePayModel(id); // triggers the call to the service to select the pay model\n setSelectedPayModel(id); // set the paymodel value for the select component\n },\n [setWorkspacePayModel, selectedPayModel],\n );\n\n const { usersPayModels, workspaceName, hardLimit, totalUsage } =\n useDeepCompareMemo(() => {\n if (!data)\n return {\n usersPayModels: [],\n selectedPayModel: [],\n workspaceName: 'Not Set',\n totalUsage: undefined,\n hardLimit: undefined,\n };\n const usersPayModels = data.allPayModels.map(\n (payModel: PayModel): PayModelMenuItem => {\n return {\n value: payModel.bmh_workspace_id ?? payModel.workspace_type,\n label: payModel.workspace_type,\n totalUsage: payModel['total-usage'],\n currentPayModel: payModel['current_pay_model'],//TODO temp rework with existing code\n icon:\n payModel.request_status === 'active' ? (\n <ActiveIcon />\n ) : (\n <InactiveIcon />\n ),\n };\n },\n );\n\n setSelectedPayModel(\n data.currentPayModel.bmh_workspace_id ??\n data.currentPayModel.workspace_type,\n );\n return {\n usersPayModels,\n workspaceName:\n data.currentPayModel.bmh_workspace_id.length > 0\n ? data.currentPayModel.bmh_workspace_id\n : data.currentPayModel.workspace_type,\n totalUsage: data.currentPayModel['total-usage'],\n hardLimit: data.currentPayModel['hard-limit'],\n };\n }, [data]);\n\n const PayModelSelectItem: SelectProps['renderOption'] = ({ option }) => {\n const menuItem = usersPayModels[Number(option.value)];\n if (!menuItem) return null;\n return (\n <div>\n <Group wrap=\"nowrap\">\n <Text size=\"sm\">{menuItem.label}</Text>\n <Text size=\"sm\">{menuItem.totalUsage}</Text>\n {menuItem.icon}\n </Group>\n </div>\n );\n };\n\n if (isLoading && isFetching)\n return (\n <div className=\"flex justify-center p-2 border-1 border-l-0 border-r-0 border-base-lighter w-full h-14\">\n <Loader />\n </div>\n );\n\n if (isError) {\n if (isNoPayModelError(error)) {\n return <NoPayModel />;\n } else\n return (\n <Center>\n Unable to get Payment information\n {/*<ErrorCard message=\"Unable to get Payment information\" />*/}\n </Center>\n );\n }\n\n const ProgressBar = (className = '') => (\n <Progress\n size=\"sm\"\n radius=\"xl\"\n aria-label='Monthly Workflow Limit'\n value={!hardLimit ? 100 : (hardLimit / totalUsage) * 100}\n color={!hardLimit || totalUsage >= hardLimit ? 'red.5' : 'green.1'}\n className={className}\n />\n );\n\n return (\n <Popover\n width=\"target\"\n position=\"bottom\"\n shadow=\"lg\"\n trapFocus\n opened={opened} onChange={setOpened}\n >\n <Popover.Target>\n <Button\n onClick={() => setOpened((o) => !o)}\n size=\"xs\" \n radius=\"xl\"\n variant=\"default\"\n className='h-[--badge-height]'\n rightSection={\n <MdExpandMore\n className=\"text-accent\"\n size=\"1.5em\"\n aria-label={opened ? 'close': 'open'}\n style={{\n transform: opened ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 200ms ease',\n }}\n />}\n >\n {ProgressBar('w-[110px]')}\n <span className='font-black pl-3 pr-2'>${PaymentNumberToString(totalUsage)}</span>\n <span className='font-normal'>/${PaymentNumberToString(hardLimit)}</span>\n </Button>\n </Popover.Target>\n <Popover.Dropdown className='px-2'>\n {workspaceAccountManagerTarget && <Button\n component=\"a\"\n href={workspaceAccountManagerTarget}\n target=\"_blank\"\n variant=\"outline\"\n leftSection={\n <MdOpenInNew\n size=\"1.1em\"\n aria-label='external'\n />}\n size=\"xs\"\n className='w-full mb-4'\n >\n Workspace Account Manager\n </Button>}\n <Text size=\"sm\" className='uppercase pb-2 px-2'>Limit <span className='font-black pl-1'>${PaymentNumberToString(hardLimit)}</span></Text>\n {ProgressBar('mx-2')}\n <Divider my=\"sm\" />\n <Text size=\"sm\" className='uppercase pb-2 px-2'>Account & Charges</Text>\n <Accordion\n variant=\"unstyled\"\n classNames={{\n root: '',\n control: 'p-0 px-2',\n label: 'p-0',\n chevron: 'text-accent',\n panel: 'p-0',\n content: 'p-0'\n }}\n >\n <Accordion.Item value=\"accountInformation\">\n <Accordion.Control>\n <Text size=\"sm\" className='font-black'>{workspaceName} - ${PaymentNumberToString(totalUsage)}</Text>\n </Accordion.Control>\n <Accordion.Panel>\n <Radio.Group\n className='pt-2'\n >\n {usersPayModels.map((obj)=>(\n <Radio.Card\n checked={obj.currentPayModel}\n disabled\n key={obj.value}\n className='p-2 border-none data-checked:bg-primary-lightest data-checked:border-primary-darker data-checked:font-black hover:bg-primary-max '\n >\n <Group wrap=\"nowrap\" align=\"flex-start\">\n <Text size=\"sm\" className='grow'>{obj.label}</Text>\n <Text size=\"sm\">${PaymentNumberToString(obj.totalUsage)}</Text>\n <Radio.Indicator color='accent'/>\n </Group>\n </Radio.Card>\n ))}\n </Radio.Group>\n </Accordion.Panel>\n </Accordion.Item>\n </Accordion>\n </Popover.Dropdown>\n </Popover>\n );\n};\n\n/*<Accordion chevronPosition=\"left\">\n <Accordion.Item value=\"accountInformation\">\n <Accordion.Control>\n <Group justify=\"space-between\">\n Account Information\n <Group className=\"font-heading text-base-contrast\">\n <Text fw={600}>{workspaceName}</Text>\n <div className=\"flex items-center\">\n <Text fw={500} size=\"sm\" className=\"mr-1\">\n Total Usage:\n </Text>\n <Text fw={500} size=\"sm\">\n {PaymentNumberToString(totalUsage)}\n </Text>\n </div>\n <div className=\"flex items-center pr-1\">\n <Text fw={500} size=\"sm\" className=\"mr-1\">\n Hard Limit:\n </Text>\n <Text fw={500} size=\"sm\">\n {PaymentNumberToString(hardLimit)}\n </Text>\n </div>\n </Group>\n </Group>\n </Accordion.Control>\n <Accordion.Panel>\n <div className=\"grid grid-cols-3 p-4\">\n <div className=\"flex flex-col border-1 border-gray p-2 mr-4\">\n <div className=\"flex justify-between border-b-1 border-gray mb-2 w-full py-2\">\n <div className=\"ml-2 text-xs\">Account</div>\n <div className=\"mr-2 text-xs\">Workspace Account Manager</div>\n </div>\n <div className=\"text-center\">\n <div>\n <Select\n placeholder=\"Select Workspace\"\n renderOption={PayModelSelectItem}\n data={usersPayModels}\n onChange={(id) => {\n if (id) setPayModel(id);\n }}\n value={selectedPayModel}\n />\n </div>\n </div>\n </div>\n <div className=\"flex flex-col text-center border-1 border-gray p-2 mr-4\">\n <div className=\"text-md border-b-1 border-gray mb-2 w-full py-2 text-xs\">\n Total Charges (USD)\n </div>\n <Text>{PaymentNumberToString(totalUsage)}</Text>\n </div>\n <div className=\"flex flex-col text-center border-1 border-gray p-2\">\n <div className=\"text-md border-b-1 border-gray mb-2 w-full py-2 text-xs\">\n Spending Limit (USD)\n </div>\n <Text>{PaymentNumberToString(hardLimit)}</Text>\n </div>\n </div>\n </Accordion.Panel>\n </Accordion.Item>\n </Accordion>*/\n\nexport default CostTracker;","import React, { forwardRef, useCallback } from 'react';\nimport {\n ActionIcon,\n Badge,\n Button,\n Group,\n Stack,\n Text,\n Tooltip,\n} from '@mantine/core';\nimport { Icon } from '@iconify-icon/react';\nimport { TierToolbarConfiguration } from '../tiers/types';\nimport {\n CoreState,\n selectJEGActiveWorkspaceStatus,\n selectWorkspaceFullscreen,\n selectWorkspaceTier,\n setWorkspaceFullscreen,\n setWorkspaceTier,\n useCoreDispatch,\n useCoreSelector,\n WorkspaceStatus,\n} from '@gen3/core';\nimport CostTracker from '../../components/CostTracker';\n\nimport { WorkspaceTier } from '../../types';\nimport { useMicroContainerReduxContext } from '../../providers/MicroContainerReduxProvider';\n\ninterface WorkspaceToolbarProps {\n toolbarConfiguration?: TierToolbarConfiguration;\n}\n\nconst WorkspaceToolbar = forwardRef<HTMLDivElement, WorkspaceToolbarProps>(\n ({ toolbarConfiguration }, ref) => {\n const workspaceTier = useCoreSelector(\n (state: CoreState) => selectWorkspaceTier(state) as WorkspaceTier | null,\n );\n\n const workspaceStatus = useCoreSelector((state: CoreState) =>\n selectJEGActiveWorkspaceStatus(state),\n );\n\n const isFullscreen = useCoreSelector((state: CoreState) =>\n selectWorkspaceFullscreen(state),\n );\n\n const { showStatus, showStop, tierLabel, requirePayModel, workspaceAccountManagerTarget } = toolbarConfiguration || {};\n\n const coreDispatch = useCoreDispatch();\n\n const toggleFullscreen = useCallback(() => {\n coreDispatch(setWorkspaceFullscreen(!isFullscreen));\n }, [coreDispatch, isFullscreen]);\n\n const returnToWorkspaceSelection = () => {\n coreDispatch(setWorkspaceTier(null));\n };\n\n const { terminate } = useMicroContainerReduxContext();\n\n const fullscreenLabel = isFullscreen\n ? 'Exit Fullscreen'\n : 'Fullscreen View';\n const statusLabel =\n workspaceStatus === WorkspaceStatus.NotFound\n ? 'Not Running'\n : (workspaceStatus as string);\n\n return (\n <div\n ref={ref}\n role=\"toolbar\"\n aria-label=\"Workspace toolbar\"\n className=\"flex items-center justify-between px-4 border-b-2 border-base-lighter pb-4\"\n >\n <div className=\"flex items-center gap-2\">\n <ActionIcon\n variant=\"outline\"\n radius=\"xl\"\n size=\"lg\"\n aria-label=\"Back to workspace list\"\n color=\"primary.5\"\n className=\"mr-4\"\n onClick={returnToWorkspaceSelection}\n >\n <Icon\n icon=\"gen3:back-arrow\"\n width=\"100%\"\n height=\"100%\"\n aria-hidden=\"true\"\n />\n </ActionIcon>\n <Stack gap=\"-10px\">\n <Text size=\"xl\" c=\"primary.4\">\n {toolbarConfiguration?.label}\n </Text>\n <Group>\n <Text size=\"sm\">{toolbarConfiguration?.description}</Text>\n <Badge\n aria-label={`Workspace tier: ${tierLabel ?? (workspaceTier as string)}`}\n >\n {tierLabel ?? (workspaceTier as string)}\n </Badge>\n {requirePayModel && (<CostTracker workspaceAccountManagerTarget={workspaceAccountManagerTarget}/>)}\n </Group>\n </Stack>\n </div>\n <div className=\"flex items-center gap-4 mr-8\">\n {showStatus && (\n <Group gap=\"xs\" role=\"status\" aria-label=\"Workspace status\">\n <Text size=\"md\" c=\"base-contrast.4\" aria-hidden=\"true\">\n Workspace Status:\n </Text>\n <Badge\n size=\"md\"\n radius=\"md\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {statusLabel}\n </Badge>\n </Group>\n )}\n {showStop && (\n <Button\n size=\"sm\"\n variant={\n workspaceStatus !== WorkspaceStatus.Running\n ? 'outline'\n : 'filled'\n }\n aria-label=\"Stop workspace\"\n aria-disabled={workspaceStatus !== WorkspaceStatus.Running}\n color={\n workspaceStatus !== WorkspaceStatus.Running\n ? 'primary.5'\n : 'utility.4'\n }\n onClick={terminate}\n disabled={workspaceStatus !== WorkspaceStatus.Running}\n leftSection={\n <Icon\n icon=\"gen3:dot\"\n width={36}\n height={36}\n aria-hidden=\"true\"\n className={\n workspaceStatus !== WorkspaceStatus.Running\n ? 'text-primary-contrast'\n : 'text-utility-success'\n }\n />\n }\n >\n Stop Workspace\n </Button>\n )}\n <Tooltip label={fullscreenLabel}>\n <Button\n size=\"sm\"\n variant=\"outline\"\n aria-label={fullscreenLabel}\n aria-pressed={isFullscreen}\n color=\"primary.5\"\n onClick={toggleFullscreen}\n leftSection={\n isFullscreen ? (\n <Icon\n icon=\"gen3:fullscreen-exit\"\n width={24}\n height={24}\n aria-hidden=\"true\"\n />\n ) : (\n <Icon\n icon=\"gen3:fullscreen\"\n width={24}\n height={24}\n aria-hidden=\"true\"\n />\n )\n }\n >\n {fullscreenLabel}\n </Button>\n </Tooltip>\n </div>\n </div>\n );\n },\n);\n\nWorkspaceToolbar.displayName = 'WorkspaceToolbar';\n\nexport default WorkspaceToolbar;\n","// Streaming LLM client — OpenAI, Anthropic, Gemini, Ollama\n// All requests go directly from the browser to provider APIs (no backend proxy).\n\nexport type LLMProvider = 'openai' | 'anthropic' | 'gemini' | 'ollama';\n\nexport type LLMConfig = {\n provider: LLMProvider;\n apiKey?: string;\n model: string;\n ollamaUrl?: string; // default: http://localhost:11434\n};\n\nexport type ChatMessage = {\n role: 'user' | 'assistant' | 'system';\n content: string;\n};\n\nconst DEFAULT_OLLAMA_URL = 'http://localhost:11434';\n\n// ── OpenAI ──────────────────────────────────────────────────────────────\n\nasync function* streamOpenAI(\n config: LLMConfig,\n messages: ChatMessage[],\n systemPrompt?: string,\n): AsyncGenerator<string> {\n const allMessages: ChatMessage[] = systemPrompt\n ? [{ role: 'system', content: systemPrompt }, ...messages]\n : messages;\n\n const res = await fetch('https://api.openai.com/v1/chat/completions', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${config.apiKey}`,\n },\n body: JSON.stringify({\n model: config.model,\n messages: allMessages.map((m) => ({ role: m.role, content: m.content })),\n stream: true,\n }),\n });\n\n if (!res.ok) {\n const text = await res.text().catch(() => '');\n throw new Error(`OpenAI ${res.status}: ${text || res.statusText}`);\n }\n\n yield* readSSEStream(res, (json) => {\n return json.choices?.[0]?.delta?.content ?? '';\n });\n}\n\n// ── Anthropic ───────────────────────────────────────────────────────────\n\nasync function* streamAnthropic(\n config: LLMConfig,\n messages: ChatMessage[],\n systemPrompt?: string,\n): AsyncGenerator<string> {\n const userMessages = messages.filter((m) => m.role !== 'system');\n\n const body: Record<string, unknown> = {\n model: config.model,\n max_tokens: 4096,\n stream: true,\n messages: userMessages.map((m) => ({ role: m.role, content: m.content })),\n };\n if (systemPrompt) {\n body.system = systemPrompt;\n }\n\n const res = await fetch('https://api.anthropic.com/v1/messages', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': config.apiKey ?? '',\n 'anthropic-version': '2023-06-01',\n 'anthropic-dangerous-direct-browser-access': 'true',\n },\n body: JSON.stringify(body),\n });\n\n if (!res.ok) {\n const text = await res.text().catch(() => '');\n throw new Error(`Anthropic ${res.status}: ${text || res.statusText}`);\n }\n\n yield* readSSEStream(res, (json) => {\n if (json.type === 'content_block_delta' && json.delta?.type === 'text_delta') {\n return json.delta.text ?? '';\n }\n return '';\n });\n}\n\n// ── Gemini ──────────────────────────────────────────────────────────────\n\nasync function* streamGemini(\n config: LLMConfig,\n messages: ChatMessage[],\n systemPrompt?: string,\n): AsyncGenerator<string> {\n const url = `https://generativelanguage.googleapis.com/v1beta/models/${config.model}:streamGenerateContent?alt=sse&key=${encodeURIComponent(config.apiKey ?? '')}`;\n\n const contents: Array<{ role: string; parts: Array<{ text: string }> }> = [];\n for (const m of messages) {\n if (m.role === 'system') continue;\n contents.push({\n role: m.role === 'assistant' ? 'model' : 'user',\n parts: [{ text: m.content }],\n });\n }\n\n const body: Record<string, unknown> = { contents };\n if (systemPrompt) {\n body.systemInstruction = { parts: [{ text: systemPrompt }] };\n }\n\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n });\n\n if (!res.ok) {\n const text = await res.text().catch(() => '');\n throw new Error(`Gemini ${res.status}: ${text || res.statusText}`);\n }\n\n yield* readSSEStream(res, (json) => {\n return json.candidates?.[0]?.content?.parts?.[0]?.text ?? '';\n });\n}\n\n// ── Ollama ──────────────────────────────────────────────────────────────\n\nasync function* streamOllama(\n config: LLMConfig,\n messages: ChatMessage[],\n systemPrompt?: string,\n): AsyncGenerator<string> {\n const ollamaUrl = (config.ollamaUrl || DEFAULT_OLLAMA_URL).replace(/\\/+$/, '');\n\n const allMessages: ChatMessage[] = systemPrompt\n ? [{ role: 'system', content: systemPrompt }, ...messages]\n : messages;\n\n const res = await fetch(`${ollamaUrl}/api/chat`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n model: config.model,\n messages: allMessages.map((m) => ({ role: m.role, content: m.content })),\n stream: true,\n }),\n });\n\n if (!res.ok) {\n const text = await res.text().catch(() => '');\n throw new Error(`Ollama ${res.status}: ${text || res.statusText}`);\n }\n\n // Ollama streams newline-delimited JSON (not SSE)\n const reader = res.body?.getReader();\n if (!reader) return;\n const decoder = new TextDecoder();\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n for (const line of lines) {\n if (!line.trim()) continue;\n try {\n const json = JSON.parse(line);\n const text = json.message?.content ?? '';\n if (text) yield text;\n } catch {\n // skip malformed lines\n }\n }\n }\n // process remaining buffer\n if (buffer.trim()) {\n try {\n const json = JSON.parse(buffer);\n const text = json.message?.content ?? '';\n if (text) yield text;\n } catch {\n // skip\n }\n }\n } finally {\n reader.releaseLock();\n }\n}\n\n// ── SSE stream reader (shared by OpenAI, Anthropic, Gemini) ─────────\n\nasync function* readSSEStream(\n res: Response,\n extractText: (json: Record<string, any>) => string,\n): AsyncGenerator<string> {\n const reader = res.body?.getReader();\n if (!reader) return;\n const decoder = new TextDecoder();\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n for (const line of lines) {\n if (line.startsWith('data: ')) {\n const data = line.slice(6).trim();\n if (data === '[DONE]') return;\n try {\n const json = JSON.parse(data);\n const text = extractText(json);\n if (text) yield text;\n } catch {\n // skip malformed JSON chunks\n }\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n}\n\n// ── Public API ──────────────────────────────────────────────────────────\n\nexport async function* sendMessage(\n config: LLMConfig,\n messages: ChatMessage[],\n systemPrompt?: string,\n): AsyncGenerator<string> {\n switch (config.provider) {\n case 'openai':\n yield* streamOpenAI(config, messages, systemPrompt);\n break;\n case 'anthropic':\n yield* streamAnthropic(config, messages, systemPrompt);\n break;\n case 'gemini':\n yield* streamGemini(config, messages, systemPrompt);\n break;\n case 'ollama':\n yield* streamOllama(config, messages, systemPrompt);\n break;\n default:\n throw new Error(`Unknown provider: ${(config as any).provider}`);\n }\n}\n\n// ── Default model per provider ──────────────────────────────────────────\n\nexport const DEFAULT_MODELS: Record<LLMProvider, string> = {\n openai: 'gpt-4o',\n anthropic: 'claude-sonnet-4-20250514',\n gemini: 'gemini-3.1-pro',\n ollama: 'llama3',\n};\n\n/** Well-known models per provider for the settings selector. */\nexport const MODEL_OPTIONS: Record<LLMProvider, Array<{ id: string; label: string }>> = {\n openai: [\n { id: 'gpt-4o', label: 'GPT-4o' },\n { id: 'gpt-4o-mini', label: 'GPT-4o Mini' },\n { id: 'o3-mini', label: 'o3-mini' },\n { id: 'o1', label: 'o1' },\n { id: 'o1-mini', label: 'o1-mini' },\n ],\n anthropic: [\n { id: 'claude-opus-4-20250514', label: 'Claude Opus 4' },\n { id: 'claude-sonnet-4-20250514', label: 'Claude Sonnet 4' },\n { id: 'claude-haiku-3-5-20241022', label: 'Claude Haiku 3.5' },\n ],\n gemini: [\n { id: 'gemini-3.1-pro', label: 'Gemini 3.1 Pro' },\n { id: 'gemini-3.1-pro-preview', label: 'Gemini 3.1 Pro Preview' },\n ],\n ollama: [\n { id: 'llama3', label: 'Llama 3' },\n { id: 'codellama', label: 'Code Llama' },\n { id: 'mistral', label: 'Mistral' },\n { id: 'deepseek-coder', label: 'DeepSeek Coder' },\n ],\n};\n","// RAG context builder — dictionary context stuffing + external KB search\n// No vector DB: dictionary is directly injected into system prompt (~3-8K tokens).\n// External KB articles are fetched, chunked, keyword-matched, and top-N injected.\n\nexport type SchemaNode = {\n id: string;\n title: string;\n description?: string;\n category?: string;\n properties: Record<string, { type?: string; description?: string; enum?: string[] }>;\n required: string[];\n links: Array<{ name: string; target_type: string; multiplicity: string }>;\n};\n\n// ── Parse /schema.json into structured nodes ────────────────────────────\n\nexport function parseSchemaNodes(schema: Record<string, any>): SchemaNode[] {\n // The schema may be a JSON Schema with top-level keys as node IDs,\n // or wrapped in a \"properties\" or \"definitions\" envelope.\n const raw: Record<string, any> = schema.properties ?? schema.definitions ?? schema;\n const nodes: SchemaNode[] = [];\n\n for (const [id, def] of Object.entries(raw)) {\n if (!def || typeof def !== 'object') continue;\n // Skip meta-fields like $schema, _definitions, etc.\n if (id.startsWith('$') || id.startsWith('_')) continue;\n\n const props: SchemaNode['properties'] = {};\n const defProps = def.properties ?? {};\n for (const [k, v] of Object.entries(defProps)) {\n if (typeof v !== 'object' || v === null) continue;\n const vTyped = v as Record<string, any>;\n props[k] = {\n type: vTyped.type ?? vTyped.oneOf?.[0]?.type ?? undefined,\n description: vTyped.description ?? undefined,\n enum: Array.isArray(vTyped.enum) ? vTyped.enum.slice(0, 10) : undefined,\n };\n }\n\n const links: SchemaNode['links'] = [];\n if (Array.isArray(def.links)) {\n for (const link of def.links) {\n links.push({\n name: link.name ?? link.label ?? link.backref ?? '?',\n target_type: link.target_type ?? link.targetType ?? '?',\n multiplicity: link.multiplicity ?? link.label ?? '',\n });\n }\n }\n\n nodes.push({\n id,\n title: (def.title as string) ?? id,\n description: (def.description as string) ?? undefined,\n category: (def.category as string) ?? (def.namespace as string) ?? undefined,\n properties: props,\n required: Array.isArray(def.required) ? def.required : [],\n links,\n });\n }\n\n return nodes.sort((a, b) => a.id.localeCompare(b.id));\n}\n\n// ── Build compact dictionary context for system prompt ──────────────────\n\nexport function buildDictionaryContext(nodes: SchemaNode[]): string {\n if (!nodes.length) return '';\n\n const lines: string[] = ['## Data Dictionary\\n'];\n for (const node of nodes) {\n lines.push(`### ${node.title}${node.category ? ` (${node.category})` : ''}`);\n if (node.description) lines.push(node.description);\n\n const fieldLines: string[] = [];\n for (const [name, info] of Object.entries(node.properties)) {\n const parts = [name];\n if (info.type) parts.push(`: ${info.type}`);\n if (node.required.includes(name)) parts.push(' *required*');\n if (info.enum) parts.push(` [${info.enum.join(', ')}]`);\n fieldLines.push(` - ${parts.join('')}`);\n }\n if (fieldLines.length) {\n lines.push('Fields:');\n lines.push(...fieldLines);\n }\n\n if (node.links.length) {\n lines.push('Links:');\n for (const link of node.links) {\n lines.push(` - ${link.name} → ${link.target_type} (${link.multiplicity})`);\n }\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\n// ── External KB context (fetch → chunk → keyword search) ────────────────\n\nconst KB_CACHE_KEY = 'gen3-kb-cache';\n\ntype KBCache = {\n url: string;\n passages: string[];\n fetchedAt: number;\n};\n\nfunction getKBCache(): KBCache | null {\n try {\n const raw = sessionStorage.getItem(KB_CACHE_KEY);\n if (!raw) return null;\n return JSON.parse(raw) as KBCache;\n } catch {\n return null;\n }\n}\n\nfunction setKBCache(cache: KBCache): void {\n try {\n sessionStorage.setItem(KB_CACHE_KEY, JSON.stringify(cache));\n } catch {\n // sessionStorage full — ignore\n }\n}\n\nfunction chunkText(text: string, maxLen = 800): string[] {\n // Split on double-newlines (paragraphs) first, then by sentences if needed\n const paragraphs = text.split(/\\n{2,}/);\n const chunks: string[] = [];\n\n for (const para of paragraphs) {\n const trimmed = para.trim();\n if (!trimmed) continue;\n if (trimmed.length <= maxLen) {\n chunks.push(trimmed);\n } else {\n // Split long paragraphs by sentences\n const sentences = trimmed.split(/(?<=[.!?])\\s+/);\n let current = '';\n for (const sentence of sentences) {\n if (current.length + sentence.length > maxLen && current) {\n chunks.push(current.trim());\n current = '';\n }\n current += (current ? ' ' : '') + sentence;\n }\n if (current.trim()) chunks.push(current.trim());\n }\n }\n return chunks;\n}\n\nfunction scorePassage(passage: string, queryWords: string[]): number {\n const lower = passage.toLowerCase();\n let score = 0;\n for (const word of queryWords) {\n if (lower.includes(word)) score++;\n }\n return score;\n}\n\nexport async function buildKBContext(kbUrl: string, query: string, topN = 5): Promise<string> {\n if (!kbUrl) return '';\n\n // Check cache\n const cached = getKBCache();\n let passages: string[];\n\n if (cached && cached.url === kbUrl && Date.now() - cached.fetchedAt < 30 * 60 * 1000) {\n passages = cached.passages;\n } else {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10_000);\n const res = await fetch(kbUrl, { signal: controller.signal });\n clearTimeout(timeoutId);\n if (!res.ok) return '';\n const text = await res.text();\n passages = chunkText(text);\n setKBCache({ url: kbUrl, passages, fetchedAt: Date.now() });\n } catch {\n return '';\n }\n }\n\n const queryWords = query.toLowerCase().split(/\\s+/).filter((w) => w.length > 2);\n if (!queryWords.length) return '';\n\n const scored = passages\n .map((p, i) => ({ passage: p, score: scorePassage(p, queryWords), index: i }))\n .filter((s) => s.score > 0)\n .sort((a, b) => b.score - a.score || a.index - b.index)\n .slice(0, topN);\n\n if (!scored.length) return '';\n return '## Knowledge Base Context\\n\\n' + scored.map((s) => s.passage).join('\\n\\n---\\n\\n');\n}\n\n// ── Assemble full system prompt ─────────────────────────────────────────\n\nconst BASE_SYSTEM_PROMPT = `You are a data science coding assistant embedded in a Jupyter notebook workspace.\nYou help users write Python code for data analysis, bioinformatics, and genomics.\nWhen generating code, prefer clear and concise solutions.\nAlways wrap code in fenced code blocks with the language specified (e.g. \\`\\`\\`python).\nIf you reference data fields, use the exact names from the data dictionary when available.`;\n\nexport function buildSystemPrompt(dictionaryContext: string, kbContext?: string): string {\n const parts = [BASE_SYSTEM_PROMPT];\n if (dictionaryContext) parts.push(dictionaryContext);\n if (kbContext) parts.push(kbContext);\n return parts.join('\\n\\n');\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\n/**\n * Hook that provides code injection into a same-origin JupyterLab iframe.\n * Finds the active CodeMirror cell and inserts text programmatically.\n *\n * Caches the last-known active CM6 EditorView so that clicking \"Insert\"\n * in the sidebar (which steals focus from the iframe) still targets the\n * correct cell.\n */\nexport function useCodeInjector() {\n const [iframeReady, setIframeReady] = useState(false);\n const iframeRef = useRef<HTMLIFrameElement | null>(null);\n const lastEditorRef = useRef<HTMLElement | null>(null);\n\n // Poll for the JupyterLab iframe and cache the active editor view\n useEffect(() => {\n const check = () => {\n const iframe = document.querySelector<HTMLIFrameElement>(\n 'iframe[src*=\"/lab\"]',\n );\n iframeRef.current = iframe ?? null;\n if (iframe) {\n try {\n const doc = iframe.contentDocument ?? iframe.contentWindow?.document;\n setIframeReady(!!doc);\n // Cache the active cell's CM6 EditorView while focus info is fresh\n if (doc) {\n const activeCell = doc.querySelector('.jp-Cell.jp-mod-active');\n if (activeCell) {\n const cmContent = activeCell.querySelector('.cm-content') as any;\n const view = cmContent?.cmView?.view;\n if (view) {\n lastEditorRef.current = view;\n }\n }\n }\n } catch {\n setIframeReady(false);\n }\n } else {\n setIframeReady(false);\n }\n };\n\n check();\n const interval = setInterval(check, 1000);\n return () => clearInterval(interval);\n }, []);\n\n const insertCode = useCallback((code: string): boolean => {\n // Re-acquire iframe if the cached reference is detached\n const iframe = iframeRef.current?.isConnected\n ? iframeRef.current\n : document.querySelector<HTMLIFrameElement>('iframe[src*=\"/lab\"]');\n if (!iframe) return false;\n\n try {\n const iframeDoc =\n iframe.contentDocument ?? iframe.contentWindow?.document;\n if (!iframeDoc) return false;\n\n // Strategy 1: Find active cell's CodeMirror 6 editor view\n const activeCell = iframeDoc.querySelector('.jp-Cell.jp-mod-active');\n const cmContent = (activeCell ?? iframeDoc).querySelector(\n '.cm-content',\n ) as HTMLElement | null;\n\n let cmView: any = null;\n if (cmContent) {\n cmView = (cmContent as any)?.cmView?.view ?? null;\n }\n\n // Fall back to the cached editor when the click stole focus from the iframe\n if (!cmView && lastEditorRef.current) {\n cmView = lastEditorRef.current;\n }\n\n if (cmView) {\n // Update the cache to the editor we're actually inserting into\n lastEditorRef.current = cmView;\n const { state } = cmView;\n const cursor = state.selection.main.head;\n cmView.dispatch({\n changes: { from: cursor, insert: code },\n selection: { anchor: cursor + code.length },\n });\n return true;\n }\n\n if (cmContent) {\n // Fallback: use execCommand-based insertion (works in contenteditable)\n cmContent.focus();\n const selection = iframe.contentWindow?.getSelection();\n if (selection) {\n // Move cursor to end\n selection.selectAllChildren(cmContent);\n selection.collapseToEnd();\n }\n\n // Use insertText command for undo support\n const inserted = iframeDoc.execCommand('insertText', false, code);\n if (inserted) return true;\n\n // Last resort: direct text manipulation\n cmContent.textContent = (cmContent.textContent ?? '') + code;\n cmContent.dispatchEvent(new Event('input', { bubbles: true }));\n return true;\n }\n\n // Strategy 2: Find any focused textarea (JupyterLite or classic notebook)\n const textarea = iframeDoc.querySelector(\n 'textarea:focus',\n ) as HTMLTextAreaElement | null;\n if (textarea) {\n const start = textarea.selectionStart ?? textarea.value.length;\n textarea.value =\n textarea.value.slice(0, start) + code + textarea.value.slice(start);\n textarea.selectionStart = textarea.selectionEnd = start + code.length;\n textarea.dispatchEvent(new Event('input', { bubbles: true }));\n return true;\n }\n\n return false;\n } catch {\n return false;\n }\n }, []);\n\n return { insertCode, iframeReady };\n}\n","import React, { useMemo } from 'react';\nimport { Button } from '@mantine/core';\nimport { UIMessage } from './types';\n\n// oxlint-disable-next-line no-unused-vars\nfunction extractCodeBlocks(\n text: string,\n): Array<{ lang: string; code: string }> {\n // Regex defined inside the function to avoid shared lastIndex state across calls\n // (module-level /g regexes retain lastIndex between invocations).\n const CODE_BLOCK_RE = /```(\\w+)?\\n([\\s\\S]*?)```/g;\n const blocks: Array<{ lang: string; code: string }> = [];\n let match: RegExpExecArray | null;\n while ((match = CODE_BLOCK_RE.exec(text)) !== null) {\n blocks.push({ lang: match[1] ?? '', code: match[2].trim() });\n }\n return blocks;\n}\n\nconst MessageBubble = ({\n message,\n onInsert,\n}: {\n message: UIMessage;\n onInsert: (code: string) => void;\n}) => {\n const isUser = message.role === 'user';\n\n // Render content with code blocks highlighted\n const renderedContent = useMemo(() => {\n if (!message.content) return null;\n\n const parts: React.ReactNode[] = [];\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n const re = /```(\\w+)?\\n([\\s\\S]*?)```/g;\n\n while ((match = re.exec(message.content)) !== null) {\n // Text before code block\n if (match.index > lastIndex) {\n parts.push(\n <span key={`t-${lastIndex}`} className=\"whitespace-pre-wrap\">\n {message.content.slice(lastIndex, match.index)}\n </span>,\n );\n }\n\n const lang = match[1] ?? '';\n const code = match[2].trim();\n parts.push(\n <div\n key={`c-${match.index}`}\n className=\"my-1.5 rounded-md bg-base-darkest\"\n >\n <div className=\"flex items-center justify-between px-2.5 py-1 text-xs text-base-darker\">\n <span>{lang || 'code'}</span>\n <Button onClick={() => onInsert(code)} color=\"accent\">\n Insert ↗\n </Button>\n </div>\n <pre className=\"overflow-x-auto px-2.5 pb-2 text-sm leading-relaxed text-utility-category4\">\n <code>{code}</code>\n </pre>\n </div>,\n );\n\n lastIndex = match.index + match[0].length;\n }\n\n if (lastIndex < message.content.length) {\n parts.push(\n <span key={`t-${lastIndex}`} className=\"whitespace-pre-wrap\">\n {message.content.slice(lastIndex)}\n </span>,\n );\n }\n\n return parts;\n }, [message.content, onInsert]);\n\n return (\n <div\n className={`rounded-lg px-2.5 py-2 text-xs leading-relaxed ${\n isUser\n ? 'bg-utility-category1 bg-opacity-5 text-utility-category1'\n : 'bg-base-lightest bg-opacity-50 text-base-darkest'\n }`}\n >\n <div className=\"mb-0.5 text-xs font-semibold uppercase tracking-wider text-base-darkest\">\n {isUser ? 'You' : message.streaming ? 'AI ●' : 'AI'}\n </div>\n <div>{renderedContent}</div>\n </div>\n );\n};\n\nexport default MessageBubble;\n","import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { Button, Select, Textarea, TextInput } from '@mantine/core';\nimport { IoSettingsSharp as SettingsIcon } from 'react-icons/io5';\nimport { BsFillInfoCircleFill as InfoIcon } from 'react-icons/bs';\nimport {\n type ChatMessage,\n DEFAULT_MODELS,\n type LLMConfig,\n type LLMProvider,\n MODEL_OPTIONS,\n sendMessage,\n} from '../../lib/llmClient';\nimport {\n buildDictionaryContext,\n buildKBContext,\n buildSystemPrompt,\n parseSchemaNodes,\n} from '../../lib/ragContext';\nimport { useCodeInjector } from '../../hooks/useCodeInjector';\nimport MessageBubble from './MessageBubble';\nimport { UIMessage } from './types';\n\nexport interface CodingAssistantPanelProps {\n schemaUrl?: string;\n kbUrl?: string;\n onInsertCode?: (code: string) => void;\n}\n\n// ── Persistence helpers ─────────────────────────────────────────────────\n\nconst STORAGE_PREFIX = 'gen3-ai-';\n\nfunction loadSetting<T>(key: string, fallback: T): T {\n try {\n const raw = sessionStorage.getItem(STORAGE_PREFIX + key);\n return raw ? JSON.parse(raw) : fallback;\n } catch {\n return fallback;\n }\n}\n\nfunction saveSetting(key: string, value: unknown): void {\n try {\n sessionStorage.setItem(STORAGE_PREFIX + key, JSON.stringify(value));\n } catch {\n // ignore\n }\n}\n\n// ── Component ───────────────────────────────────────────────────────────\n\nconst CodingAssistantPanel = ({\n schemaUrl,\n kbUrl,\n onInsertCode,\n}: CodingAssistantPanelProps) => {\n // Settings state\n const [provider, setProvider] = useState<LLMProvider>(\n () => loadSetting('provider', 'openai') as LLMProvider,\n );\n const [apiKey, setApiKey] = useState(() => loadSetting('apiKey', ''));\n const [model, setModel] = useState(() =>\n loadSetting('model', DEFAULT_MODELS[provider]),\n );\n const [ollamaUrl, setOllamaUrl] = useState(() =>\n loadSetting('ollamaUrl', 'http://localhost:11434'),\n );\n const [showSettings, setShowSettings] = useState(() => {\n // Show settings on first use (no key/model configured)\n return !loadSetting('provider', '');\n });\n\n // Chat state\n const [messages, setMessages] = useState<UIMessage[]>([]);\n const [input, setInput] = useState('');\n const [streaming, setStreaming] = useState(false);\n const messagesEndRef = useRef<HTMLDivElement>(null);\n\n // RAG context\n const [dictContext, setDictContext] = useState('');\n const { insertCode, iframeReady } = useCodeInjector();\n\n // Load dictionary context once\n useEffect(() => {\n if (!schemaUrl) return;\n let cancelled = false;\n (async () => {\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 10_000);\n const res = await fetch(schemaUrl, { signal: controller.signal });\n clearTimeout(timeout);\n if (!res.ok) return;\n const schema = await res.json();\n const nodes = parseSchemaNodes(schema);\n if (!cancelled) setDictContext(buildDictionaryContext(nodes));\n } catch {\n // Silently skip — dictionary RAG is best-effort\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [schemaUrl]);\n\n // Persist settings on change\n useEffect(() => {\n saveSetting('provider', provider);\n saveSetting('model', model);\n saveSetting('ollamaUrl', ollamaUrl);\n // Only persist key if non-empty (user explicitly entered one)\n if (apiKey) saveSetting('apiKey', apiKey);\n }, [provider, apiKey, model, ollamaUrl]);\n\n // Auto-update default model when switching providers\n useEffect(() => {\n setModel(DEFAULT_MODELS[provider]);\n }, [provider]);\n\n // Auto-scroll on new messages\n useEffect(() => {\n messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });\n }, [messages]);\n\n const llmConfig = useMemo<LLMConfig>(\n () => ({\n provider,\n apiKey: provider === 'ollama' ? undefined : apiKey, // pragma: allowlist-secret;\n model,\n ollamaUrl: provider === 'ollama' ? ollamaUrl : undefined,\n }),\n [provider, apiKey, model, ollamaUrl],\n );\n\n const handleSend = useCallback(async () => {\n const trimmed = input.trim();\n if (!trimmed || streaming) return;\n\n const userMsg: UIMessage = {\n id: `u-${Date.now()}`,\n role: 'user',\n content: trimmed,\n };\n\n const assistantMsg: UIMessage = {\n id: `a-${Date.now()}`,\n role: 'assistant',\n content: '',\n streaming: true,\n };\n\n setMessages((prev) => [...prev, userMsg, assistantMsg]);\n setInput('');\n setStreaming(true);\n\n const chatHistory: ChatMessage[] = [\n ...messages\n .filter((m) => !m.streaming)\n .map((m) => ({ role: m.role, content: m.content })),\n { role: 'user' as const, content: trimmed },\n ];\n\n // Build system prompt with RAG context\n let kbCtx = '';\n if (kbUrl) {\n try {\n kbCtx = await buildKBContext(kbUrl, trimmed);\n } catch {\n // ignore KB errors\n }\n }\n const systemPrompt = buildSystemPrompt(dictContext, kbCtx);\n\n try {\n let fullText = '';\n for await (const chunk of sendMessage(\n llmConfig,\n chatHistory,\n systemPrompt,\n )) {\n fullText += chunk;\n setMessages((prev) =>\n prev.map((m) =>\n m.id === assistantMsg.id ? { ...m, content: fullText } : m,\n ),\n );\n }\n\n // Mark streaming complete\n setMessages((prev) =>\n prev.map((m) =>\n m.id === assistantMsg.id ? { ...m, streaming: false } : m,\n ),\n );\n } catch (err: any) {\n setMessages((prev) =>\n prev.map((m) =>\n m.id === assistantMsg.id\n ? {\n ...m,\n content: `⚠️ ${err.message || 'Request failed'}`,\n streaming: false,\n }\n : m,\n ),\n );\n } finally {\n setStreaming(false);\n }\n }, [input, streaming, messages, llmConfig, dictContext, kbUrl]);\n\n const handleInsert = useCallback(\n (code: string) => {\n if (onInsertCode) {\n onInsertCode(code);\n } else {\n insertCode(code);\n }\n },\n [onInsertCode, insertCode],\n );\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSend();\n }\n };\n\n const clearChat = () => {\n setMessages([]);\n };\n\n const needsApiKey = provider !== 'ollama'; // pragma: allowlist-secret;\n const isConfigured = provider === 'ollama' || !!apiKey;\n\n // ── Settings form (shared between onboarding and collapsible) ─────\n const settingsForm = (\n <div className=\"flex flex-col gap-2\">\n <Select\n label=\"Provider\"\n data={[\n { value: 'openai', label: 'OpenAI' },\n { value: 'anthropic', label: 'Anthropic' },\n { value: 'gemini', label: 'Gemini' },\n { value: 'ollama', label: 'Ollama (local)' },\n ]}\n value={provider}\n onChange={(value) => setProvider(value as LLMProvider)}\n />\n\n {needsApiKey && (\n <>\n <TextInput\n type=\"password\"\n value={apiKey}\n onChange={(e) => setApiKey(e.target.value)}\n placeholder={`Paste your ${provider} API key`}\n label=\"API Key\"\n />\n <span className=\"text-xs text-base-dark\">\n Stored in this tab only — never sent to our servers\n </span>\n </>\n )}\n\n {provider === 'ollama' && (\n <TextInput\n label={'Ollama URL'}\n value={ollamaUrl}\n onChange={(e) => setOllamaUrl(e.target.value)}\n placeholder=\"http://localhost:11434\"\n />\n )}\n\n <Select\n value={\n MODEL_OPTIONS[provider].some((m) => m.id === model)\n ? model\n : '__custom'\n }\n onChange={(value) => {\n if (value !== '__custom') setModel(value as string);\n }}\n label=\"Model\"\n data={[\n ...MODEL_OPTIONS[provider].map((m) => ({\n value: m.id,\n label: m.label,\n })),\n !(MODEL_OPTIONS?.[provider] || []).some((m) => m.id === model)\n ? { value: '__custom', label: '(custom)' }\n : undefined,\n ].filter((v) => v != undefined)}\n />\n <TextInput\n value={model || ''}\n onChange={(e) => setModel(e.target.value)}\n placeholder=\"Or type a custom model ID\"\n />\n\n <div className=\"flex flex-wrap gap-2 text-xs\">\n {dictContext && (\n <span className=\"rounded bg-utility-category4 bg-opacity-20 px-1.5 py-0.5 text-utility-category4\">\n Dictionary RAG active\n </span>\n )}\n {kbUrl && (\n <span className=\"rounded bg-utility-category1 bg-opacity-20 px-1.5 py-0.5 text-utility-category1\">\n KB RAG active\n </span>\n )}\n {iframeReady && (\n <span className=\"rounded bg-utility-category3 bg-opacity-20 px-1.5 py-0.5 text-utility-category3\">\n Code injection ready\n </span>\n )}\n </div>\n </div>\n );\n\n // ── Onboarding (no API key yet) ──────────────────────────────────\n if (!isConfigured) {\n return (\n <div className=\"flex h-full flex-col gap-3\">\n <div className=\"rounded-lg border border-blue-200 bg-gradient-to-b from-blue-50 to-white p-3\">\n <div className=\"mb-2 flex items-center gap-2\">\n <InfoIcon className=\"text-utility-info\" aria-hidden=\"true\" />\n <span className=\"text-xs font-semibold text-base-darkest\">\n AI Coding Assistant\n </span>\n </div>\n <p className=\"mb-3 text-sm leading-relaxed text-base-darker\">\n Get help writing Python code, querying data, and exploring the data\n dictionary — powered by your own API key. Choose a provider and\n paste your key below to start.\n </p>\n {settingsForm}\n </div>\n <div className=\"mt-1 text-center text-sm text-base-darker\">\n Your key stays in this browser tab and is never stored on our servers.\n </div>\n </div>\n );\n }\n\n // ── Configured: normal chat UI ───────────────────────────────────\n return (\n <div className=\"flex h-full flex-col gap-2 w-full\">\n {/* Compact header with settings toggle + clear */}\n <div className=\"flex items-center justify-between\">\n <button\n type=\"button\"\n onClick={() => setShowSettings((v) => !v)}\n className=\"flex items-center gap-1 text-sm font-medium text-base-darker hover:text-base-darkest\"\n aria-label={\n showSettings ? 'Hide provider settings' : 'Show provider settings'\n }\n >\n <SettingsIcon aria-hidden=\"true\" />\n {showSettings ? 'Hide' : provider}\n </button>\n {messages.length > 0 && (\n <button\n type=\"button\"\n onClick={clearChat}\n className=\"text-sm text-base-darker hover:text-accentWarm-dark\"\n >\n Clear\n </button>\n )}\n </div>\n\n {showSettings && (\n <div className=\"rounded-lg border border-base-lighter bg-base-slightest bg-opacity-50 p-2.5\">\n {settingsForm}\n </div>\n )}\n\n {/* Messages */}\n <div className=\"flex min-h-0 flex-1 flex-col gap-2 overflow-y-auto\">\n {messages.length === 0 && !showSettings && (\n <div className=\"flex flex-col items-center gap-2 py-6 text-center\">\n <span className=\"text-sm text-base-darker\">\n Ready — using <strong>{provider}</strong> ({model})\n </span>\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-sm text-base-darker\">Try asking:</span>\n {[\n 'Write a pandas query to count rows by category',\n 'How do I read a TSV file from the Gen3 workspace?',\n 'Plot a histogram of ages using matplotlib',\n ].map((q) => (\n <button\n key={q}\n type=\"button\"\n onClick={() => {\n setInput(q);\n }}\n className=\"rounded-md border border-base-lighter bg-white px-2 py-1 text-left text-sm text-base-darker hover:border-utility-link hover:text-utility-link\"\n >\n {q}\n </button>\n ))}\n </div>\n </div>\n )}\n\n {messages.map((msg) => (\n <MessageBubble key={msg.id} message={msg} onInsert={handleInsert} />\n ))}\n <div ref={messagesEndRef} />\n </div>\n\n {/* Input */}\n <div className=\"flex gap-1.5\">\n <Textarea\n value={input}\n onChange={(e) => setInput(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={\n streaming ? 'Generating…' : 'Ask a question… (Enter to send)'\n }\n rows={2}\n disabled={streaming}\n className=\"w-full\"\n />\n <Button\n onClick={handleSend}\n disabled={streaming || !input.trim()}\n className=\"shrink-0 self-end\"\n >\n {streaming ? '…' : 'Send'}\n </Button>\n </div>\n </div>\n );\n};\n\nexport default CodingAssistantPanel;\n","import React from 'react';\nimport { Badge, Group, Text } from '@mantine/core';\n\ntype FieldLinkCountBadgeProps = {\n fieldsCount: number;\n linksCount?: number;\n};\n\nconst FieldLinkCountBadge = ({\n fieldsCount,\n linksCount,\n}: FieldLinkCountBadgeProps) => {\n return (\n <Group gap=\"xs\">\n <Badge color=\"accent.1\" variant=\"light\" radius=\"sm\">\n <Text span size=\"xs\" fw={400}>\n {fieldsCount} {fieldsCount === 1 ? 'field' : 'fields'}\n </Text>\n </Badge>\n\n {linksCount && (\n <Badge color=\"accent.1\" variant=\"light\" radius=\"sm\">\n <Text span size=\"xs\" fw={400}>\n {linksCount} {linksCount === 1 ? 'link' : 'links'}\n </Text>\n </Badge>\n )}\n </Group>\n );\n};\n\nexport default FieldLinkCountBadge;\n","import React, { useEffect, useMemo, useState } from 'react';\nimport {\n Badge,\n Group,\n LoadingOverlay,\n Scroller,\n Table,\n Text,\n TextInput,\n} from '@mantine/core';\nimport { useElementSize } from '@mantine/hooks';\nimport {\n MdKeyboardArrowDown as DownArrowIcon,\n MdKeyboardArrowRight as RightArrowIcon,\n} from 'react-icons/md';\nimport { OverflowTooltippedLabel } from '@gen3/frontend';\nimport { parseSchemaNodes, type SchemaNode } from '../../lib/ragContext';\nimport {\n isFetchBaseQueryError,\n useGetDictionaryFromUrlQuery,\n} from '@gen3/core';\nimport FieldLinkCountBadge from './FieldLinkCountBadge';\n\nexport interface CompactDictionaryPanelProps {\n schemaUrl?: string;\n}\n\nconst CompactDictionaryPanel = ({\n schemaUrl = '_dictionary/_all',\n}: CompactDictionaryPanelProps) => {\n const { ref, width } = useElementSize<HTMLDivElement>();\n const isNarrow = width > 0 && width < 280;\n const isCompact = width > 0 && width < 360;\n\n const [nodes, setNodes] = useState<SchemaNode[]>([]);\n const [search, setSearch] = useState('');\n const [expandedId, setExpandedId] = useState<string | null>(null);\n const { data, isFetching, isError, error, isSuccess } =\n useGetDictionaryFromUrlQuery(schemaUrl);\n\n const filtered = useMemo(() => {\n if (!search.trim()) return nodes;\n const q = search.toLowerCase();\n return nodes.filter(\n (n) =>\n n.id.toLowerCase().includes(q) ||\n n.title.toLowerCase().includes(q) ||\n n.category?.toLowerCase().includes(q) ||\n Object.keys(n.properties).some((k) => k.toLowerCase().includes(q)),\n );\n }, [nodes, search]);\n\n useEffect(() => {\n if (isSuccess) {\n const parsed = parseSchemaNodes(data);\n setNodes(parsed);\n }\n }, [isSuccess, data]);\n\n if (isError) {\n let message = 'Could not load dictionary';\n if (isFetchBaseQueryError(error)) {\n message = `Error loading dictionary from server`;\n }\n return (\n <div className=\"rounded-lg border border-utility-error bg-utility-error opacity-90 px-3 py-2 text-xs text-utility-contrast-error\">\n {message}\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className=\"relative flex flex-col gap-2 bg-base-lightest p-2 h-full\"\n >\n <LoadingOverlay visible={isFetching} />\n <TextInput\n placeholder=\"Filter nodes…\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n <div className=\"text-xs text-base-darker\">\n {filtered.length} node{filtered.length !== 1 ? 's' : ''}\n {search && ` matching \"${search}\"`}\n </div>\n\n <div className=\"flex h-full flex-1 flex-col gap-0.5 overflow-y-scroll\">\n {filtered.map((node) => {\n const isExpanded = expandedId === node.id;\n const propCount = Object.keys(node.properties).length;\n const linkCount = node.links.length;\n\n return (\n <div\n key={node.id}\n className=\"rounded-md border border-base-lightest bg-base-max\"\n >\n <button\n type=\"button\"\n onClick={() => setExpandedId(isExpanded ? null : node.id)}\n className=\"flex w-full flex-col px-2.5 py-2 text-left hover:bg-base-lightest hover:bg-opacity-50\"\n aria-label={`Expand description for ${node.title}`}\n aria-expanded={isExpanded}\n >\n {/* Top row: arrow + title (+ badge when not narrow) */}\n <div className=\"flex w-full items-center gap-2\">\n {isExpanded ? <DownArrowIcon /> : <RightArrowIcon />}\n <div className=\"min-w-0 flex-1\">\n <div className=\"truncate text-xs font-semibold text-base-darkest\">\n {node.title}\n </div>\n {!isNarrow && node.category && (\n <div className=\"truncate text-sm text-base-darker\">\n {node.category}\n </div>\n )}\n </div>\n {!isNarrow && (\n <FieldLinkCountBadge\n fieldsCount={propCount}\n linksCount={linkCount}\n />\n )}\n </div>\n\n {/* Second row (narrow only): category + badge */}\n {isNarrow && (\n <div className=\"flex w-full items-center justify-between pl-5 pt-0.5\">\n {node.category && (\n <span className=\"truncate text-xs text-base-darker\">\n {node.category}\n </span>\n )}\n </div>\n )}\n </button>\n\n {isExpanded && (\n <div className=\"border-t border-base-lightest px-2.5 py-2\">\n {node.description && (\n <p className=\"mb-2 text-sm italic text-base-darker px-4\">\n {node.description}\n </p>\n )}\n\n {propCount > 0 && (\n <Table>\n <Table.Thead>\n <Table.Tr>\n <Table.Th>Field</Table.Th>\n <Table.Th>Type</Table.Th>\n {!isCompact && <Table.Th />}\n </Table.Tr>\n </Table.Thead>\n <Table.Tbody>\n {Object.entries(node.properties).map(([name, info]) => (\n <Table.Tr key={name}>\n <Table.Td>\n <Text size=\"xs\" c=\"base-contrast.5\">\n {name}\n </Text>\n </Table.Td>\n <Table.Td>\n <Text size=\"xs\" c=\"base-contrast.5\">\n {info.type}\n </Text>\n </Table.Td>\n {!isCompact && (\n <Table.Td>\n {info.enum && (\n <Scroller draggable>\n <Group gap=\"xs\" wrap=\"nowrap\">\n {info.enum.map((value) => (\n <Badge\n variant=\"light\"\n size=\"sm\"\n color=\"secondary.4\"\n key={value}\n >\n <OverflowTooltippedLabel\n label={value}\n className=\"font-bold text-secondary-contrast\"\n color=\"accent-light\"\n noTruncate={true}\n >\n {value}\n </OverflowTooltippedLabel>\n </Badge>\n ))}\n </Group>\n </Scroller>\n )}\n </Table.Td>\n )}\n </Table.Tr>\n ))}\n </Table.Tbody>\n </Table>\n )}\n\n {linkCount > 0 && (\n <div>\n <div className=\"mb-1 text-sm font-semibold uppercase tracking-wider text-base-darker\">\n Links\n </div>\n <div className=\"flex flex-col gap-0.5\">\n {node.links.map((link, i) => (\n <div key={i} className=\"text-sm text-base-darker\">\n <span className=\"font-mono\">{link.name}</span>\n <span className=\"text-base-dark\"> → </span>\n <span className=\"text-utility-category3\">\n {link.target_type}\n </span>\n {link.multiplicity && (\n <span className=\"text-xs text-base-dark\">\n {' '}\n ({link.multiplicity})\n </span>\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n};\n\nexport default CompactDictionaryPanel;\n","import React from 'react';\nimport { Tabs } from '@mantine/core';\nimport { Icon } from '@iconify-icon/react';\nimport CodingAssistantPanel from './CodingAssistantPanel';\nimport CompactDictionaryPanel from './CompactDictionaryPanel/CompactDictionaryPanel';\nimport { PanelErrorBoundary } from '@gen3/frontend';\n\nexport interface DataToolsPanelProps {\n schemaUrl?: string;\n kbUrl?: string;\n}\n\nconst DEFAULT_DICTIONARY_SCHEMA_URL = '_dictionary/_all';\nconst ICON_SIZE = 16;\n\ntype Tab = 'dictionary' | 'assistant';\n\nconst TABS: Array<{ id: Tab; label: string; icon: React.ReactNode }> = [\n {\n id: 'dictionary',\n label: 'Dictionary',\n icon: (\n <Icon\n icon=\"gen3:compact-dictionary\"\n width={ICON_SIZE}\n height={ICON_SIZE}\n />\n ),\n },\n /*\n {\n id: 'assistant',\n label: 'AI Assistant',\n icon: <Icon icon=\"gen3:ai-chat\" width={ICON_SIZE} height={ICON_SIZE} />,\n },\n */\n];\n\nconst DataToolsPanel = ({\n schemaUrl = DEFAULT_DICTIONARY_SCHEMA_URL,\n kbUrl,\n}: DataToolsPanelProps) => {\n return (\n <div className=\"flex flex-col h-full\">\n <Tabs\n defaultValue=\"dictionary\"\n variant=\"outline\"\n classNames={{ root: 'flex flex-col p-2 h-full' }}\n keepMounted\n >\n {/* Tab bar */}\n <Tabs.List className=\"bg-base-max\">\n {TABS.map((tab) => (\n <Tabs.Tab value={tab.id} leftSection={tab.icon} key={tab.id}>\n {tab.label}\n </Tabs.Tab>\n ))}\n </Tabs.List>\n {/* Tab content */}\n <div className=\"flex-1 min-h-0 h-full pt-4\">\n <PanelErrorBoundary>\n <Tabs.Panel value=\"dictionary\" className=\"h-full\">\n <CompactDictionaryPanel schemaUrl={schemaUrl} />\n </Tabs.Panel>\n <Tabs.Panel value=\"assistant\">\n <CodingAssistantPanel schemaUrl={schemaUrl} kbUrl={kbUrl} />\n </Tabs.Panel>\n </PanelErrorBoundary>\n </div>\n </Tabs>\n </div>\n );\n};\n\nexport default DataToolsPanel;\n","import React from 'react';\nimport DataToolsPanel from '../../components/DataToolsPanel';\n\nimport HorizontalAccordion from '../../components/HorizontalAccordian';\n\ninterface ToolsPanelProps {\n expanded: boolean;\n setExpanded: (_arg: boolean) => void;\n width?: number;\n}\n\nconst ToolsPanel = ({\n expanded = true,\n setExpanded = () => {},\n width = 310,\n}: ToolsPanelProps) => {\n return (\n <HorizontalAccordion\n label=\"Data & Tools\"\n expanded={expanded}\n setExpanded={setExpanded}\n expandedWidth={width}\n >\n <DataToolsPanel />\n </HorizontalAccordion>\n );\n};\n\nexport default ToolsPanel;\n","import React, { ReactNode, useEffect } from 'react';\n\nimport SettingsPanel from '../../workspace/WorkspaceLayout/SettingsPanel';\nimport WorkspaceToolbar from './WorkspaceToolbar';\nimport { useDisclosure, useResizeObserver } from '@mantine/hooks';\nimport {\n CoreState,\n selectWorkspaceFullscreen,\n selectWorkspaceTier,\n useCoreSelector,\n} from '@gen3/core';\nimport { WorkspaceTier } from '../../types';\nimport ToolsPanel from './ToolsPanel';\nimport {\n FreeWorkspaceTierConfiguration,\n RemoteComputeWorkspaceTierConfiguration,\n} from '../tiers/types';\n\ninterface WorkspaceLayoutProps {\n children: ReactNode;\n className?: string;\n /** Extra content rendered in the toolbar row, between fullscreen and Hide Tools. */\n toolbarExtra?: ReactNode;\n tierConfiguration:\n | FreeWorkspaceTierConfiguration\n | RemoteComputeWorkspaceTierConfiguration;\n}\n\nconst WorkspaceLayout = ({\n children,\n tierConfiguration,\n}: WorkspaceLayoutProps) => {\n const workspaceTier = useCoreSelector(\n (state: CoreState) => selectWorkspaceTier(state) as WorkspaceTier | null,\n );\n const [toolsExpanded, { set: setToolsExpanded }] = useDisclosure(true);\n const [settingsExpanded, { set: setSettingsExpanded }] = useDisclosure(true);\n const [toolbarRef, toolbarRect] = useResizeObserver<HTMLDivElement>();\n\n const isFullScreen = useCoreSelector((state) =>\n selectWorkspaceFullscreen(state),\n );\n\n useEffect(() => {\n if (isFullScreen) {\n setToolsExpanded(false);\n setSettingsExpanded(false);\n } else {\n setToolsExpanded(true);\n setSettingsExpanded(true);\n }\n }, [isFullScreen, setSettingsExpanded, setToolsExpanded]);\n\n if (!workspaceTier) return null;\n\n return (\n <div className=\"flex flex-col w-full grow\">\n <WorkspaceToolbar\n toolbarConfiguration={tierConfiguration.toolbar}\n ref={toolbarRef}\n />\n <div\n className=\"flex w-full nowrap\"\n style={{\n height: `calc(100% - ${toolbarRect?.height ?? 0}px`,\n }}\n >\n {tierConfiguration.dataAndTools.enabled && (\n <ToolsPanel\n expanded={toolsExpanded}\n setExpanded={setToolsExpanded}\n width={tierConfiguration.dataAndTools.width}\n />\n )}\n {children}\n {tierConfiguration.settings.enabled && (\n <SettingsPanel\n showKernels={tierConfiguration.settings.showKernels}\n expanded={settingsExpanded}\n setExpanded={setSettingsExpanded}\n width={tierConfiguration.settings.width}\n />\n )}\n </div>\n </div>\n );\n};\n\nexport default WorkspaceLayout;\n","import React, { useMemo } from 'react';\nimport TierSelectorLanding from '../components/TierSelectorLanding';\nimport FreeWorkspace from './tiers/FreeWorkspace';\nimport RemoteWorkspace from './tiers/RemoteComputeWorkspace';\nimport { WorkspacesCenterConfiguration } from '../workspace/types';\nimport { RemoteComputeWorkspaceTierConfiguration } from '../workspace/tiers/types';\nimport WorkspaceLayout from '../workspace/WorkspaceLayout/WorkspaceLayout';\nimport {\n CoreState,\n selectWorkspaceTier,\n setWorkspaceTier,\n useCoreDispatch,\n useCoreSelector,\n useUserAuth,\n} from '@gen3/core';\nimport { MicroContainerReduxProvider } from '../providers/MicroContainerReduxProvider';\nimport { Card, Center } from '@mantine/core';\nimport { ProtectedContent } from '@gen3/frontend';\n\nexport type WorkspaceAuthContext = {\n username?: string;\n rbac?: string[];\n abac?: Record<string, unknown>;\n tenantId?: string;\n workspaceId?: string;\n};\n\nconst WorkspaceCenter = ({\n workspaces,\n landingPage,\n tierConfiguration,\n}: WorkspacesCenterConfiguration) => {\n // get the workspace tier from the core store allowing persistent state across page reloads and navigation changes\n const workspaceTier = useCoreSelector((state: CoreState) =>\n selectWorkspaceTier(state),\n );\n\n const coreDispatch = useCoreDispatch();\n\n const handleSelectTier = (tier: string) => {\n coreDispatch(setWorkspaceTier(tier));\n };\n\n const { data: userData } = useUserAuth(false);\n\n const isDevelopment = process.env.NODE_ENV !== 'production';\n\n const username =\n userData?.username ||\n userData?.preferred_username ||\n userData?.email ||\n undefined;\n\n const authContext = useMemo<WorkspaceAuthContext>(() => {\n if (isDevelopment) {\n return {\n username: username || 'dev-local-user',\n jwt: process.env.JEG_WORKSPACE_DEV_LOCAL_JWT ?? '',\n rbac: userData?.authz ? Object.keys(userData.authz) : [],\n abac: { devBypass: true },\n };\n }\n\n return {\n username,\n rbac: userData?.authz ? Object.keys(userData.authz) : [],\n abac: {},\n };\n }, [isDevelopment, userData, username]);\n\n if (!workspaceTier) {\n return (\n <div className=\"w-full h-full overflow-hidden bg-base-lightest \">\n <TierSelectorLanding\n cards={workspaces}\n onSelectTier={handleSelectTier}\n label={landingPage?.label}\n description={landingPage?.description}\n additionalDescriptions={landingPage?.additionalDescriptions}\n classNames={landingPage?.classNames}\n />\n </div>\n );\n }\n\n if (workspaceTier === 'free') {\n return (\n <WorkspaceLayout tierConfiguration={tierConfiguration.free}>\n <FreeWorkspace />\n </WorkspaceLayout>\n );\n }\n\n if (workspaceTier === 'remote') {\n const config =\n tierConfiguration.remote as RemoteComputeWorkspaceTierConfiguration;\n return (\n <ProtectedContent>\n <MicroContainerReduxProvider\n enabled={true}\n startTimeLimit={config?.startTimeLimit}\n >\n <WorkspaceLayout tierConfiguration={tierConfiguration.remote}>\n <RemoteWorkspace\n tenantId={authContext?.tenantId || 'default'}\n workspaceId={authContext?.workspaceId || 'workspace-default'}\n userId={authContext?.username || 'anonymous'}\n enableOptions={config?.enableOptions}\n />\n </WorkspaceLayout>\n </MicroContainerReduxProvider>\n </ProtectedContent>\n );\n }\n return (\n <Card shadow=\"sm\" padding=\"lg\" withBorder>\n <Center>\n Workspaces are not configured correctly or are not supported by this\n instance. Please contact your administrator.\n </Center>\n </Card>\n );\n};\n\nexport default WorkspaceCenter;\n","import { WorkspacesPageLayoutProps } from './types';\nimport React, { JSX } from 'react';\nimport { FixedNavPageLayout } from '@gen3/frontend';\nimport WorkspaceCenter from '../../workspace/WorkspaceCenter';\n\nimport { selectWorkspaceFullscreen, useCoreSelector } from '@gen3/core';\n\nconst WorkspacesCenterPage = ({\n headerProps,\n footerProps,\n configuration,\n}: WorkspacesPageLayoutProps): JSX.Element => {\n const isFullScreen = useCoreSelector((state) =>\n selectWorkspaceFullscreen(state),\n );\n\n return (\n <FixedNavPageLayout\n headerProps={headerProps}\n footerProps={{ ...footerProps, hideFooter: isFullScreen }}\n headerMetadata={{\n title: 'Gen3 Workspace Page',\n content: 'Workspace page',\n key: 'gen3-workspace-page',\n ...(configuration?.headerMetadata ? configuration.headerMetadata : {}),\n }}\n >\n <WorkspaceCenter {...configuration} />\n </FixedNavPageLayout>\n );\n};\n\nexport default WorkspacesCenterPage;\n","import { GetServerSideProps } from 'next';\nimport { merge } from 'lodash';\nimport { ContentSource, getNavPageLayoutPropsFromConfig } from '@gen3/frontend';\nimport {\n WorkspacesCenterPageConfiguration,\n WorkspacesPageLayoutProps,\n} from './types';\nimport { GEN3_COMMONS_NAME } from '@gen3/core';\nimport { WorkspaceTier } from '../../types';\nimport {\n FreeWorkspaceTierConfiguration,\n RemoteComputeWorkspaceTierConfiguration,\n} from '../../workspace/tiers/types';\n\nconst DEFAULT_WORKSPACES_CONFIGURATION: WorkspacesCenterPageConfiguration = {\n workspaces: {},\n tierConfiguration: {\n free: {\n baseUrl:\n process.env.FREE_WORKSPACE_ASSETS_BASE_URL ??\n '/api/workspace-assets/free',\n toolbar: {\n label: 'JupyterLite',\n description: 'Running via JupyterLite',\n showStop: false,\n showStatus: false,\n },\n settings: {\n enabled: true,\n showKernels: false,\n },\n dataAndTools: {\n enabled: true,\n tabs: [\n {\n label: 'Dictionary',\n description: 'Data Dictionary',\n app: 'dictionary',\n },\n ],\n width: 300,\n },\n },\n remote: {\n baseUrl:\n process.env.REMOTE_COMPUTE_WORKSPACE_ASSETS_BASE_URL ??\n '/api/workspace-assets/remote',\n enableOptions: false,\n toolbar: {\n label: 'Trusted Research Environment',\n description: 'Running with Remote Kernels',\n showStop: true,\n showStatus: true,\n },\n settings: {\n enabled: true,\n showKernels: true,\n },\n dataAndTools: {\n enabled: true,\n tabs: [\n {\n label: 'Dictionary',\n description: 'Data Dictionary',\n app: 'dictionary',\n },\n ],\n },\n },\n } as Record<\n WorkspaceTier,\n FreeWorkspaceTierConfiguration | RemoteComputeWorkspaceTierConfiguration\n >,\n};\n\nexport const WorkspacesCenterPageGetServerSideProps: GetServerSideProps<\n WorkspacesPageLayoutProps\n> = async () => {\n try {\n const workspacesCenterConfiguration: WorkspacesCenterPageConfiguration =\n await ContentSource.getContentDatabase().get(\n `${GEN3_COMMONS_NAME}/workspaces.json`,\n );\n\n const mergedConfiguration = merge(\n {},\n DEFAULT_WORKSPACES_CONFIGURATION,\n workspacesCenterConfiguration,\n );\n\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n configuration: mergedConfiguration,\n },\n };\n } catch (error: unknown) {\n if (error instanceof Error) {\n console.warn('Error fetching query configuration:', error.message);\n console.warn('Returning default configuration');\n }\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n configuration: DEFAULT_WORKSPACES_CONFIGURATION,\n },\n };\n }\n};\n"],"names":["WorkspaceTierCard","label","description","tier","tierLabel","undefined","features","tooltip","buttonLabel","onSelectTier","baseColor","handleClick","useCallback","icon","_jsx","span","className","Icon","width","height","_jsxs","Card","withBorder","radius","style","display","flexDirection","backgroundColor","Section","inheritPadding","py","Stack","align","Badge","classNames","root","color","size","fw","justify","Text","c","List","listStyleType","map","feature","Item","marginTop","Group","Tooltip","Button","aria-label","variant","rightSection","onClick","tt","DEFAULT_CLASSNAMES","background","additionalDescription","button","TierSelectorLanding","cards","additionalDescriptions","mergedClassnames","useMemo","mergeDefaultTailwindClassnames","Container","gap","desc","slice","SimpleGrid","cols","base","sm","md","lg","spacing","role","Object","values","card","FreeWorkspace","assetBaseUrl","onReady","onError","loading","setLoading","useState","loadError","setLoadError","retryCount","setRetryCount","jupyterReady","setJupyterReady","iframeRef","useRef","broadcastChannelRef","url","handleRetry","n","useEffect","current","BroadcastChannel","ACTIVITY_CHANNEL","close","updateUserActivity","postMessage","type","timestamp","Date","now","iframe","usedDirectListeners","contentWindow","iframeDoc","contentDocument","document","addEventListener","window","removeEventListener","div","shadow","padding","w","maw","mt","LoadingOverlay","visible","src","border","ref","title","sandbox","allow","onLoad","Error","sanitizeSegment","s","normalize","replace","generateScopedNotebookPath","opts","tenantId","workspaceId","userId","notebookName","GEN3_HATCHERY_API","GEN3_WORKSPACE_API","GEN3_KERNEL_API","process","env","GEN3_API","GEN3_JEG_GATEWAY_API","JEG_GATEWAY_API","HatcheryServiceState","HatcheryWithTags","gen3Api","enhanceEndpoints","addTagTypes","StatusStringToHatcheryServiceStatus","launching","running","stopped","terminating","unknown","hatcheryApi","injectEndpoints","endpoints","builder","doesHatcheryOptionExists","query","transformResponse","response","_meta","tag","match","find","o","name","includes","hash","id","hatcheryOptions","workspace","idleTimeLimit","memoryLimit","cpuLimit","hatcheryStatus","containerHash","encodeURIComponent","transformErrorResponse","_error","status","error","lastActivity","workspaceType","results","toLowerCase","lastActivityTime","launchHatcheryWorkspace","mutation","method","responseHandler","ok","text","invalidatesTags","terminateHatcheryWorkspace","overrideExisting","useDoesHatcheryOptionExistsQuery","useHatcheryOptionsQuery","useLazyHatcheryOptionsQuery","useHatcheryStatusQuery","useLazyHatcheryStatusQuery","useLaunchHatcheryWorkspaceMutation","useTerminateHatcheryWorkspaceMutation","isFetchBaseQueryErrorShape","hasMessageProperty","obj","hasErrorProperty","extractMessageFromData","data","String","message","JSON","stringify","extractFetchBaseQueryErrorMessage","getRTKQErrorMessage","getWorkspaceErrorMessage","defaultMessage","isFetchBaseQueryError","useMicroContainerRedux","enabled","workspaceContainerStatus","useCoreSelector","selectJEGActiveWorkspaceStatus","setContainerHash","coreDispatch","useCoreDispatch","optionData","skip","launchTrigger","isError","isWorkspaceLaunchError","workspaceLaunchError","terminateWorkspace","isTerminateError","workspaceTerminateError","useDeepCompareEffect","errorMessage","console","setJEGActiveWorkspaceStatus","WorkspaceStatus","LaunchError","TerminateError","setJEGRequestedWorkspaceStatus","RequestedWorkspaceStatus","Unset","launch","Launching","Running","isTagString","Launch","launchResults","unwrap","setJEGActiveWorkspaceId","terminate","Terminating","containerId","Terminate","hatcheryStateToWorkspaceStatus","state","Stopped","Errored","NotFound","MAXIMUM_START_TIME_IN_MINUTES","notifyUser","NotificationMap","notifications","clean","show","position","WorkspacePollingInterval","convertSecondsToMilliseconds","StatusError","workspaceShutdownAlertLimit","useJEGWorkspaceResourceMonitor","monitorWorkspace","startTimeLimit","pollingInterval","setPollingInterval","setError","workspaceStatusData","isWorkspaceStatusError","workspaceStatusError","refetchOnMountOrArgChange","refetchOnFocus","activeStatus","requestedStatus","selectJEGRequestedWorkspaceStatus","requestedStatusTimestamp","selectJEGRequestedWorkspaceStatusTimestamp","dispatch","log","workspaceQueryStatus","warn","remainingWorkspaceKernelLife","isTimeGreaterThan","MicroContainerReduxProviderContext","createContext","Promise","resolve","useMicroContainerReduxContext","context","React","useContext","MicroContainerReduxProvider","children","identifierTag","NEXT_PUBLIC_MICRO_CONTAINER_TAG","value","Provider","PanelStyle","MicroContainerReduxPanel","enableOptions","isLoading","isHatcheryOptionsLoading","isHatcheryOptionsError","workspaceOptionSelected","setWorkspaceOptionSelected","resetStatus","elapsedSec","setElapsedSec","interval","useInterval","elapsed","Math","floor","start","stop","t","setTimeout","clearTimeout","simpleLaunchWorkspaceBtn","launchWorkspaceBtn","Loader","Alert","length","workspaceOptionLaunch","hatcheryOptionForSelect","Select","MdExpandMore","aria-hidden","withCheckIcon","placeholder","onChange","_value","option","input","disabled","p","RemoteComputeWorkspace","memo","forwardRef","normalizedBase","scopedNotebookPath","userHash","btoa","substring","mounted","attempts","maxAttempts","poll","app","jupyterapp","started","attachKernel","kernelId","kernelName","serviceManager","sessions","startNew","path","kernel","err","useImperativeHandle","isReady","displayName","KernelWithTags","kernelApi","kernels","executionState","execution_state","last_activity","kernalSpecs","res","kernelspecs","reduce","acc","push","spec","display_name","language","nodeType","metadata","kernelsList","useKernelsQuery","useKernalSpecsQuery","useKernelsListQuery","GatewayWithTags","jegGatewayApi","activeKernels","validateStatus","redirected","providesTags","jegGatewayStatus","launchKernel","body","terminateKernel","reapKernels","useActiveKernelsQuery","useLaunchKernelMutation","useTerminateKernelMutation","useJegGatewayStatusQuery","useReapKernelsMutation","select","ActiveKernelInfoPanel","uptimeMinutes","forceTerminate","rowSpec","connections","isTerminatingLoading","isStaleOrIdle","formatUptimeInMinutes","Divider","gpuType","toLocaleString","cpu","memory","strong","fullWidth","TextStyle","ActiveKernelsPanel","selectFromResult","persistedActiveKernels","selectJEGKernelIds","liveIds","Set","k","staleIds","filter","has","removeManyJEGActiveKernels","upsertManyJEGActiveKernels","kernelSpecs","isFetching","isFetchingKernelSpecs","isErrorKernelSpecs","errorKernelSpecs","normalizedError","normalizeRtkError","isAuthError","kernelUptime","getTime","ConnectionStatusBadge","leftSection","aria-live","GatewayConnectionPanel","gatewayStatus","onRetryConnection","onRunStaleReap","onRetry","KernelSelector","handleLaunchKernel","isLaunchingLoading","onKernelSelectionChange","selectedKernelName","setSelectedKernelName","prev","selectedSpec","selectedSpecCost","costPerHour","resourceTags","gpu","Boolean","InfoRolloverButton","parts","resources","join","cost","toFixed","useGatewayConnectionStatus","setGatewayStatus","gatewayMessage","setGatewayMessage","setGatewayStatusAndMessage","gatewayStatusData","isGatewayFetching","gatewayServiceStatus","MAX_KERNELS_ACTIVE","KernelLifecyclePanel","activeKernelName","notice","numActiveKernels","selectAllJEGKernels","addJEGActiveKernel","activeKernelSpec","billingActive","PanelHeaderTextStyle","UpgradeActionsPanel","currentTier","onUpgradeToRemote","onRequestQuotaIncrease","onOpenBillingSupport","canUpgrade","section","wrap","_Fragment","TRANSITION_MS","ICON_SIZE","STYLING_DEFAULTS","header","HorizontalAccordion","expanded","setExpanded","expandedWidth","collapsedWidth","rightSide","closeIcon","openIcon","mergedClassNames","transition","opacity","transform","ActionIcon","pointerEvents","SettingsPanel","showKernels","selectWorkspaceTier","setWorkspaceTier","PaymentNumberToString","x","undefinedValue","precision","Number","isNaN","isNoPayModelError","originalStatus","NoPayModel","CostTracker","workspaceAccountManagerTarget","useGetWorkspacePayModelsQuery","setWorkspacePayModel","useSetCurrentPayModelMutation","selectedPayModel","setSelectedPayModel","opened","setOpened","useDeepCompareCallback","usersPayModels","workspaceName","hardLimit","totalUsage","useDeepCompareMemo","allPayModels","payModel","bmh_workspace_id","workspace_type","currentPayModel","request_status","ActiveIcon","InactiveIcon","Center","ProgressBar","Progress","Popover","trapFocus","Target","Dropdown","component","href","target","MdOpenInNew","my","Accordion","control","chevron","panel","content","Control","Panel","Radio","checked","Indicator","WorkspaceToolbar","toolbarConfiguration","workspaceTier","workspaceStatus","isFullscreen","selectWorkspaceFullscreen","showStatus","showStop","requirePayModel","toggleFullscreen","setWorkspaceFullscreen","returnToWorkspaceSelection","fullscreenLabel","statusLabel","aria-atomic","aria-disabled","aria-pressed","DEFAULT_OLLAMA_URL","streamOpenAI","config","messages","systemPrompt","allMessages","fetch","headers","Authorization","apiKey","model","m","stream","catch","statusText","readSSEStream","json","choices","delta","streamAnthropic","userMessages","max_tokens","system","streamGemini","contents","systemInstruction","candidates","streamOllama","ollamaUrl","reader","getReader","decoder","TextDecoder","buffer","done","read","decode","lines","split","pop","line","trim","parse","releaseLock","extractText","startsWith","sendMessage","provider","DEFAULT_MODELS","openai","anthropic","gemini","ollama","MODEL_OPTIONS","parseSchemaNodes","schema","raw","properties","definitions","nodes","def","entries","props","defProps","v","vTyped","oneOf","enum","Array","isArray","links","link","backref","target_type","targetType","multiplicity","category","namespace","required","sort","a","b","localeCompare","buildDictionaryContext","node","fieldLines","info","KB_CACHE_KEY","getKBCache","sessionStorage","getItem","setKBCache","cache","setItem","chunkText","maxLen","paragraphs","chunks","para","trimmed","sentences","sentence","scorePassage","passage","queryWords","lower","score","word","buildKBContext","kbUrl","topN","cached","passages","fetchedAt","controller","AbortController","timeoutId","abort","signal","scored","i","index","BASE_SYSTEM_PROMPT","buildSystemPrompt","dictionaryContext","kbContext","useCodeInjector","iframeReady","setIframeReady","lastEditorRef","check","querySelector","doc","activeCell","cmContent","view","cmView","setInterval","clearInterval","insertCode","code","isConnected","cursor","selection","main","head","changes","from","insert","anchor","focus","getSelection","selectAllChildren","collapseToEnd","inserted","execCommand","textContent","dispatchEvent","Event","bubbles","textarea","selectionStart","selectionEnd","MessageBubble","onInsert","isUser","renderedContent","lastIndex","re","exec","lang","pre","streaming","STORAGE_PREFIX","loadSetting","key","fallback","saveSetting","CodingAssistantPanel","schemaUrl","onInsertCode","setProvider","setApiKey","setModel","setOllamaUrl","showSettings","setShowSettings","setMessages","setInput","setStreaming","messagesEndRef","dictContext","setDictContext","cancelled","timeout","scrollIntoView","behavior","llmConfig","handleSend","userMsg","assistantMsg","chatHistory","kbCtx","fullText","chunk","handleInsert","handleKeyDown","e","shiftKey","preventDefault","clearChat","needsApiKey","isConfigured","settingsForm","TextInput","some","InfoIcon","SettingsIcon","q","msg","Textarea","onKeyDown","rows","FieldLinkCountBadge","fieldsCount","linksCount","CompactDictionaryPanel","useElementSize","isNarrow","isCompact","setNodes","search","setSearch","expandedId","setExpandedId","isSuccess","useGetDictionaryFromUrlQuery","filtered","keys","parsed","isExpanded","propCount","linkCount","aria-expanded","DownArrowIcon","RightArrowIcon","Table","Thead","Tr","Th","Tbody","Td","Scroller","draggable","OverflowTooltippedLabel","noTruncate","DEFAULT_DICTIONARY_SCHEMA_URL","TABS","DataToolsPanel","Tabs","defaultValue","keepMounted","tab","Tab","PanelErrorBoundary","ToolsPanel","WorkspaceLayout","tierConfiguration","toolsExpanded","set","setToolsExpanded","useDisclosure","settingsExpanded","setSettingsExpanded","toolbarRef","toolbarRect","useResizeObserver","isFullScreen","toolbar","dataAndTools","settings","WorkspaceCenter","workspaces","landingPage","handleSelectTier","userData","useUserAuth","isDevelopment","NODE_ENV","username","preferred_username","email","authContext","jwt","JEG_WORKSPACE_DEV_LOCAL_JWT","rbac","authz","abac","devBypass","free","remote","ProtectedContent","RemoteWorkspace","WorkspacesCenterPage","headerProps","footerProps","configuration","FixedNavPageLayout","hideFooter","headerMetadata","DEFAULT_WORKSPACES_CONFIGURATION","baseUrl","FREE_WORKSPACE_ASSETS_BASE_URL","tabs","REMOTE_COMPUTE_WORKSPACE_ASSETS_BASE_URL","WorkspacesCenterPageGetServerSideProps","workspacesCenterConfiguration","ContentSource","getContentDatabase","get","GEN3_COMMONS_NAME","mergedConfiguration","merge","getNavPageLayoutPropsFromConfig"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/WorkspaceTierCard.tsx","../../../src/components/TierSelectorLanding.tsx","../../../src/workspace/tiers/FreeWorkspace.tsx","../../../src/workspace/tiers/utils.ts","../../../src/constants.ts","../../../src/core/types.ts","../../../src/core/hatcheryApi.ts","../../../src/utils.ts","../../../src/providers/useMicroContainerRedux.ts","../../../src/providers/utils.ts","../../../src/providers/useJEGWorkspaceResourceMonitor.tsx","../../../src/providers/MicroContainerReduxProvider.tsx","../../../src/components/MicroContainerReduxPanel.tsx","../../../src/workspace/tiers/RemoteComputeWorkspace.tsx","../../../src/core/kernelApi.ts","../../../src/core/jegGatewayApi.ts","../../../src/components/KernelLifecyclePanel/ActiveKernelInfoPanel.tsx","../../../src/components/KernelLifecyclePanel/styling.ts","../../../src/components/KernelLifecyclePanel/ActiveKernelsPanel.tsx","../../../src/components/KernelLifecyclePanel/ConnectionStatusBadge.tsx","../../../src/components/KernelLifecyclePanel/GatewayConnectionPanel.tsx","../../../src/components/KernelLifecyclePanel/KernelSelector.tsx","../../../src/providers/useGatewayConnectionStatus.ts","../../../src/components/KernelLifecyclePanel/KernelLifecyclePanel.tsx","../../../src/workspace/WorkspaceLayout/styling.ts","../../../src/components/UpgradeActionsPanel.tsx","../../../src/components/HorizontalAccordian.tsx","../../../src/workspace/WorkspaceLayout/SettingsPanel.tsx","../../../src/components/CostTracker.tsx","../../../src/workspace/WorkspaceLayout/WorkspaceToolbar.tsx","../../../src/lib/llmClient.ts","../../../src/lib/ragContext.ts","../../../src/hooks/useCodeInjector.ts","../../../src/components/CodingAssistantPanel/MessageBubble.tsx","../../../src/components/CodingAssistantPanel/CodingAssistantPanel.tsx","../../../src/components/CompactDictionaryPanel/FieldLinkCountBadge.tsx","../../../src/components/CompactDictionaryPanel/CompactDictionaryPanel.tsx","../../../src/components/DataToolsPanel.tsx","../../../src/workspace/WorkspaceLayout/ToolsPanel.tsx","../../../src/workspace/WorkspaceLayout/WorkspaceLayout.tsx","../../../src/workspace/WorkspaceCenter.tsx","../../../src/pages/WorkspacesCenter/WorkspacesCenterPage.tsx","../../../src/pages/WorkspacesCenter/data.ts"],"sourcesContent":["import React, { useCallback } from 'react';\nimport {\n Badge,\n Button,\n Card,\n Group,\n List,\n Stack,\n Text,\n Tooltip,\n} from '@mantine/core';\nimport { Icon } from '@iconify-icon/react';\nimport { WorkspaceCardConfig } from './types';\nimport { type WorkspaceTier } from '../types';\n\nexport interface WorkspaceTierCardProps extends Omit<\n WorkspaceCardConfig,\n 'tierConfiguration'\n> {\n onSelectTier: (tier: WorkspaceTier) => void;\n}\n\nconst WorkspaceTierCard = ({\n label,\n description,\n tier,\n tierLabel = undefined,\n features = [],\n tooltip = 'Launch workspace',\n buttonLabel = 'Launch',\n onSelectTier,\n baseColor,\n}: WorkspaceTierCardProps) => {\n const handleClick = useCallback(\n () => onSelectTier(tier),\n [onSelectTier, tier],\n );\n\n const icon = (\n <span className=\"mb-0.5\">\n <Icon icon=\"gen3:right-arrow\" width=\"24\" height=\"24\" />\n </span>\n );\n\n return (\n <Card\n withBorder\n radius=\"sm\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n backgroundColor: baseColor ?? 'var(--mantine-color-base-lighter)',\n }}\n >\n <Card.Section inheritPadding py=\"sm\">\n <Stack align=\"left\">\n <Badge\n classNames={{\n root: 'font-header',\n }}\n color=\"primary.4\"\n size=\"lg\"\n fw={500}\n >\n {tierLabel ?? (tier === 'remote' ? 'paid' : 'free')}\n </Badge>\n </Stack>\n </Card.Section>\n <Card.Section inheritPadding py=\"xs\">\n <Stack justify=\"left\">\n <Text fw={600} c=\"base-contrast.4\">\n {label}\n </Text>\n <Text c=\"base-contrast.4\" size=\"xs\">\n {description}\n </Text>\n </Stack>\n </Card.Section>\n <Card.Section inheritPadding py=\"xs\">\n <Stack align=\"left\">\n <List size=\"sm\" listStyleType=\"disc\">\n {features.map((feature: string) => (\n <List.Item key={feature}>{feature}</List.Item>\n ))}\n </List>\n </Stack>\n </Card.Section>\n <Card.Section\n withBorder\n inheritPadding\n py=\"sm\"\n style={{ marginTop: 'auto' }}\n >\n <Group justify=\"center\">\n <Tooltip label={tooltip}>\n <Button\n aria-label={`Select ${buttonLabel}`}\n variant=\"subtle\"\n rightSection={icon}\n onClick={handleClick}\n >\n <Text tt=\"uppercase\">{buttonLabel}</Text>\n </Button>\n </Tooltip>\n </Group>\n </Card.Section>\n </Card>\n );\n};\n\nexport default WorkspaceTierCard;\n","import React, { useMemo } from 'react';\nimport {\n DefaultTierLandingClassnames,\n TierSelectorLandingConfiguration,\n WorkspaceCardConfig,\n} from './types';\nimport { type WorkspaceTier } from '../types';\nimport WorkspaceTierCard from './WorkspaceTierCard';\nimport { mergeDefaultTailwindClassnames } from '@gen3/frontend';\nimport { Container, SimpleGrid, Stack, Text } from '@mantine/core';\n\nexport interface TierSelectorLandingProps extends Partial<TierSelectorLandingConfiguration> {\n cards: Record<string, WorkspaceCardConfig>;\n onSelectTier: (tier: WorkspaceTier) => void;\n}\n\nconst DEFAULT_CLASSNAMES: DefaultTierLandingClassnames = {\n root: 'mx-auto w-full h-full overflow-auto max-w-7xl p-6 sm:p-2 md:p-4 lg:p-8',\n background: 'relative overflow-hidden sm:p-2 md:p-4 lg:p-8',\n label: 'text-md uppercase tracking-[0.28em] text-primary',\n description:\n 'font-black leading-tight text-primary md:text-3xl sm:text-2xl xs:text-lg mt-4 mb-4',\n additionalDescription: 'max-w-2xl text-md font-medium text-base-contrast',\n button:\n 'mt-10 flex w-full items-center justify-center rounded-md bg-primary px-8 py-3 text-sm font-semibold text-primary-contrast shadow-sm hover:bg-primary focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary',\n};\n\nconst TierSelectorLanding = ({\n cards,\n onSelectTier,\n classNames,\n label = 'Gen3 JupyterHub Workspaces',\n description = 'Launch a secure notebook workspace',\n additionalDescriptions = [\n 'Choose local browser notebooks for speed or remote kernels for scalable compute',\n 'Both modes preserve your host app auth context.',\n ],\n}: TierSelectorLandingProps) => {\n const mergedClassnames = useMemo(\n () => mergeDefaultTailwindClassnames(DEFAULT_CLASSNAMES, classNames ?? {}),\n [classNames],\n );\n\n return (\n <Container size=\"xl\" className={mergedClassnames.root}>\n <Stack gap=\"lg\" className={mergedClassnames.background}>\n <Stack gap=\"xs\">\n <Text className={mergedClassnames.label}>{label}</Text>\n <Text className={mergedClassnames.description}>{description}</Text>\n {additionalDescriptions.map((desc) => (\n <Text\n className={mergedClassnames.additionalDescription}\n key={desc.slice(0, 20)}\n >\n {desc}\n </Text>\n ))}\n </Stack>\n\n <SimpleGrid\n cols={{ base: 2, sm: 2, md: 2, lg: 3 }}\n spacing=\"md\"\n role=\"list\"\n aria-label=\"Workspace tier selection\"\n >\n {Object.values(cards).map((card) => (\n <WorkspaceTierCard\n key={card.tier}\n tier={card.tier}\n tierLabel={card.tierLabel}\n onSelectTier={onSelectTier}\n label={card.label}\n description={card.description}\n features={card.features}\n tooltip={card.tooltip}\n buttonLabel={card.buttonLabel}\n baseColor={card.baseColor}\n />\n ))}\n </SimpleGrid>\n </Stack>\n </Container>\n );\n};\n\nexport default TierSelectorLanding;\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { Button, Card, LoadingOverlay, Text } from '@mantine/core';\nimport { ACTIVITY_CHANNEL } from '@gen3/frontend';\n\nexport interface FreeWorkspaceProps {\n assetBaseUrl?: string;\n className?: string;\n onReady?: () => void;\n onError?: (error: Error) => void;\n}\n\nconst FreeWorkspace = ({\n assetBaseUrl = '/api/workspace-assets/free',\n onReady,\n onError,\n}: FreeWorkspaceProps) => {\n const [loading, setLoading] = useState(true);\n const [loadError, setLoadError] = useState(false);\n const [retryCount, setRetryCount] = useState(0);\n const [jupyterReady, setJupyterReady] = useState(false);\n const iframeRef = useRef<HTMLIFrameElement | null>(null);\n const broadcastChannelRef = useRef<BroadcastChannel | null>(null);\n\n const url = `${assetBaseUrl}/lab/index.html`;\n\n const handleRetry = useCallback(() => {\n setLoadError(false);\n setLoading(true);\n setRetryCount((n) => n + 1);\n }, []);\n\n // set up BroadcastChannel\n useEffect(() => {\n if (!broadcastChannelRef?.current) {\n broadcastChannelRef.current = new BroadcastChannel(ACTIVITY_CHANNEL);\n }\n\n return () => {\n if (broadcastChannelRef.current) {\n broadcastChannelRef.current.close();\n broadcastChannelRef.current = null;\n }\n };\n }, []);\n\n // Handle setting up iframe event listeners for activity detection.\n // Tries same-origin contentDocument access first; falls back to\n // focus/blur heuristics when the iframe is cross-origin.\n useEffect(() => {\n if (!jupyterReady) return;\n\n const updateUserActivity = () => {\n if (broadcastChannelRef.current) {\n broadcastChannelRef.current.postMessage({\n type: 'activity-update',\n timestamp: Date.now(),\n });\n }\n };\n\n const iframe = iframeRef.current;\n let usedDirectListeners = false;\n\n if (iframe?.contentWindow) {\n try {\n const iframeDoc =\n iframe.contentDocument || iframe.contentWindow.document;\n\n if (iframeDoc) {\n iframeDoc.addEventListener('mousedown', updateUserActivity);\n iframeDoc.addEventListener('keypress', updateUserActivity);\n iframeDoc.addEventListener('scroll', updateUserActivity);\n iframeDoc.addEventListener('touchstart', updateUserActivity);\n usedDirectListeners = true;\n }\n } catch {\n // cross-origin — fall through to focus/blur fallback\n }\n }\n\n // Fallback: treat iframe receiving focus as user activity.\n // This fires when the user clicks into the iframe even if we\n // cannot attach listeners to its document directly.\n if (!usedDirectListeners) {\n window.addEventListener('blur', updateUserActivity);\n window.addEventListener('focus', updateUserActivity);\n }\n\n return () => {\n if (usedDirectListeners && iframe?.contentWindow) {\n try {\n const iframeDoc =\n iframe.contentDocument || iframe.contentWindow.document;\n if (iframeDoc) {\n iframeDoc.removeEventListener('mousedown', updateUserActivity);\n iframeDoc.removeEventListener('keypress', updateUserActivity);\n iframeDoc.removeEventListener('scroll', updateUserActivity);\n iframeDoc.removeEventListener('touchstart', updateUserActivity);\n }\n } catch {\n // Ignore cleanup errors\n }\n }\n if (!usedDirectListeners) {\n window.removeEventListener('blur', updateUserActivity);\n window.removeEventListener('focus', updateUserActivity);\n }\n };\n }, [jupyterReady]);\n\n if (loadError) {\n return (\n <div>\n <Card withBorder shadow=\"sm\" padding=\"md\" w=\"100%\" maw={448}>\n <Text fw={600} c=\"primary\">\n Jupyter failed to render\n </Text>\n <Text size=\"sm\" c=\"dimmed\" mt={4}>\n Unable to load JupyterLite. Check the browser console for details.\n </Text>\n <Button variant=\"default\" size=\"xs\" mt=\"sm\" onClick={handleRetry}>\n Retry\n </Button>\n </Card>\n </div>\n );\n }\n\n return (\n <div className=\"w-full flex flex-col grow\">\n <LoadingOverlay visible={loading} />\n <iframe\n src={url}\n width=\"100%\"\n height=\"100%\"\n style={{ border: 'none' }}\n key={retryCount}\n ref={iframeRef}\n title=\"JupyterLite Workspace\"\n sandbox=\"allow-scripts allow-same-origin allow-forms allow-popups allow-downloads allow-modals allow-storage-access-by-user-activation\"\n allow=\"clipboard-read; clipboard-write; cross-origin-isolated\"\n className=\"min-h-0 flex-1 border-0\"\n onLoad={() => {\n setLoading(false);\n setJupyterReady(true);\n onReady?.();\n }}\n onError={() => {\n setLoadError(true);\n onError?.(new Error('Unable to load JupyterLite workspace.'));\n }}\n />\n </div>\n );\n};\n\nexport default FreeWorkspace;\n","/* ------------------------------------------------------------------ */\n/* Scoped notebook path — deterministic, multi-tenant isolated path */\n/* ------------------------------------------------------------------ */\n\n// NFC normalization runs first so visually identical Unicode sequences (e.g.\n// decomposed combining characters) are collapsed before the ASCII whitelist strips them.\nexport const sanitizeSegment = (s: string) =>\n s.normalize('NFC').replace(/[^a-zA-Z0-9._-]/g, '_');\n\nexport const generateScopedNotebookPath = (opts: {\n tenantId: string;\n workspaceId: string;\n userId: string;\n notebookName?: string;\n}): string => {\n const { tenantId, workspaceId, userId, notebookName = 'untitled' } = opts;\n if (!tenantId || !workspaceId || !userId) {\n throw new Error(\n 'tenantId, workspaceId, and userId are required for session scoping',\n );\n }\n return `/${sanitizeSegment(tenantId)}/${sanitizeSegment(workspaceId)}/${sanitizeSegment(userId)}/${sanitizeSegment(notebookName)}.ipynb`;\n};\n","import { GEN3_API, GEN3_WORKSPACE_API } from '@gen3/core';\n\n// TODO: migrate this to @gen3/core\n\nexport const GEN3_HATCHERY_API =\n GEN3_WORKSPACE_API || '/workspace-api/workspace/hatchery'; // get replaced by revproxy\n\nexport const GEN3_KERNEL_API =\n process.env.GEN3_KERNEL_API || `${GEN3_API}/lw-workspace/proxy/jeg-panel/api`;\n\nexport const GEN3_JEG_GATEWAY_API =\n process.env.JEG_GATEWAY_API || `${GEN3_API}/lw-workspace/proxy/jeg-panel/api`;\n\n// TODO: resolve this with @gen3/core\nexport const GEN3_WORKSPACES_API =\n GEN3_WORKSPACE_API || `${GEN3_API}/lw-workspace`;\n\nexport const JEG_SERVICE_API =\n 'http://jupyter-enterprise-gateway.jupyter-pods.svc.cluster.local:8888';\n","interface ProcessProxyConfig {\n image_name: string;\n}\n\ninterface ProcessProxy {\n class_name: string;\n config: ProcessProxyConfig;\n}\n\ninterface KernelSpecMetadata {\n costPerHour: number;\n debugger: boolean;\n nodeType: string;\n process_proxy: ProcessProxy;\n}\n\ninterface KernelSpec {\n argv: string[];\n display_name: string;\n env: Record<string, string>;\n interrupt_mode: string;\n language: string;\n metadata: KernelSpecMetadata;\n}\n\ninterface KernelSpecResources {\n 'logo-64x64': string;\n}\n\ninterface KernelSpecEntryMetadata {\n name: string;\n resources: KernelSpecResources;\n spec: KernelSpec;\n}\n\ninterface KernelSpecs {\n [kernelName: string]: KernelSpecEntryMetadata;\n}\n\nexport interface KernelSpecsResponse {\n default: string;\n kernelspecs: KernelSpecs;\n}\n\n/* The Kernal type the frontend uses to represent a kernel spec entry */\nexport interface KernelSpecEntry {\n name: string;\n displayName: string;\n language?: string;\n /** Cost per hour from KernelSpecPolicy. 0 = included. Injected by kernel lifecycle proxy. */\n costPerHour?: number;\n /** Display tier from KernelSpecPolicy. e.g. \"micro\" | \"gpu\" */\n nodeType?: string;\n /** CPU allocation (e.g. \"4\" cores). From JEG resources or policy. */\n cpu?: string;\n /** Memory allocation (e.g. \"16Gi\"). From JEG resources or policy. */\n memory?: string;\n /** GPU type/size (e.g. \"NVIDIA A100 40GB\"). From JEG resources or policy. */\n gpuType?: string;\n}\n\nexport interface KernelRow {\n kernelId: string;\n kernelName?: string;\n executionState?: string;\n /** How long the kernel has been alive, in minutes. */\n uptimeMinutes?: number | null;\n staleState?: 'healthy' | 'warning' | 'kill';\n idleDays?: number | null;\n}\n\nexport type GatewayKernelSpec = {\n name: string;\n spec: {\n display_name: string;\n language: string;\n argv?: string[];\n metadata?: Record<string, unknown>;\n };\n resources?: Record<string, string>;\n};\n\nexport type GatewayKernelSpecsResponse = {\n default: string;\n kernelspecs: Record<string, GatewayKernelSpec>;\n};\n\nexport type GatewayKernel = {\n id: string;\n name: string;\n last_activity: string;\n execution_state: string;\n connections: number;\n};\n\nexport type GatewaySession = {\n id: string;\n path: string;\n name: string;\n type: string;\n kernel: {\n id: string;\n name: string;\n last_activity: string;\n execution_state: string;\n connections: number;\n };\n};\n\nexport type GatewayConnectionState =\n | 'idle'\n | 'launching'\n | 'attaching'\n | 'connected'\n | 'reconnecting' // transient — iframe + lifecycle panel remain visible\n | 'error'\n | 'unavailable'; // JEG not configured for this deployment — no polling, no retry\n\nexport enum HatcheryServiceState {\n unknown = 'unknown',\n running = 'running',\n stopped = 'stopped',\n terminating = 'terminating',\n launching = 'launching',\n error = 'error',\n}\n\nexport interface HatcheryServiceStatus {\n status: HatcheryServiceState;\n idleTimeLimit?: number;\n lastActivityTime: number;\n workspaceType?: string;\n}\n","import {\n gen3Api,\n WorkspaceInfo,\n WorkspaceInfoResponse,\n WorkspaceOptions,\n WorkspaceOptionsResponse,\n} from '@gen3/core';\nimport { GEN3_HATCHERY_API } from '../constants';\nimport { HatcheryServiceState, HatcheryServiceStatus } from './types';\n\nconst HatcheryWithTags = gen3Api.enhanceEndpoints({\n addTagTypes: ['Hatchery'],\n});\n\n/*\n * Hatchery states:\n *\n * `Terminating` - The workspace is shutting down\n * `Launching` - The workspace is starting up\n * `Stopped` - The workspace is in a failed state and must be terminated\n * `Running` - The workspace is running and ready to be used\n * `Not Found` - The workspace could not be found\n */\n\nconst StatusStringToHatcheryServiceStatus: Record<string, Array<string>> = {\n launching: ['launching', 'pending', 'starting'],\n running: ['running', 'ready'],\n stopped: ['stopped'],\n terminating: ['terminating', 'stopping'],\n unknown: ['not found', 'unknown'],\n};\n\ninterface HatcheryItem {\n name?: string;\n hash?: string;\n id?: string;\n}\n\ninterface HatcheryStatusResponse {\n status: string;\n conditions: unknown;\n containerStates: unknown;\n idleTimeLimit: number;\n lastActivityTime: number;\n workspaceType: string;\n}\n\nexport const hatcheryApi = HatcheryWithTags.injectEndpoints({\n endpoints: (builder) => ({\n doesHatcheryOptionExists: builder.query<string | null, string>({\n query: () => `${GEN3_HATCHERY_API}/options`,\n transformResponse: (response: Array<HatcheryItem>, _meta, tag) => {\n const match = response.find((o) => o.name?.includes(tag));\n return match?.hash ?? match?.id ?? null;\n },\n }),\n hatcheryOptions: builder.query<WorkspaceOptions | null, void>({\n query: () => `${GEN3_HATCHERY_API}/options`,\n transformResponse: (response: WorkspaceOptionsResponse) => {\n return response.map((workspace: WorkspaceInfoResponse) => {\n return {\n id: workspace.id,\n name: workspace.name,\n idleTimeLimit: workspace['idle-time-limit'],\n memoryLimit: workspace['memory-limit'],\n cpuLimit: workspace['cpu-limit'],\n } as WorkspaceInfo;\n });\n },\n }),\n hatcheryStatus: builder.query<HatcheryServiceStatus, string | null>({\n query: (containerHash) => {\n const hash = containerHash;\n const query = hash ? `?id=${encodeURIComponent(hash)}` : '';\n return `${GEN3_HATCHERY_API}/status${query}`;\n },\n transformErrorResponse: (_error) => {\n return {\n status: HatcheryServiceState.error,\n idleTimeLimit: 0,\n lastActivity: 0,\n workspaceType: '',\n };\n },\n transformResponse: (response: HatcheryStatusResponse) => {\n const results = (response.status || 'unknown').toLowerCase();\n let hatcheryStatus = HatcheryServiceState.unknown;\n\n if (StatusStringToHatcheryServiceStatus.unknown.includes(results)) {\n hatcheryStatus = HatcheryServiceState.unknown;\n }\n\n if (StatusStringToHatcheryServiceStatus.launching.includes(results)) {\n hatcheryStatus = HatcheryServiceState.launching;\n }\n\n if (StatusStringToHatcheryServiceStatus.running.includes(results)) {\n hatcheryStatus = HatcheryServiceState.running;\n }\n\n if (StatusStringToHatcheryServiceStatus.stopped.includes(results)) {\n hatcheryStatus = HatcheryServiceState.stopped;\n }\n\n if (StatusStringToHatcheryServiceStatus.terminating.includes(results)) {\n hatcheryStatus = HatcheryServiceState.terminating;\n }\n\n // return other stats from the hatchery response\n return {\n status: hatcheryStatus,\n idleTimeLimit: response.idleTimeLimit,\n lastActivityTime: response.lastActivityTime,\n workspaceType: response.workspaceType,\n };\n },\n }),\n launchHatcheryWorkspace: builder.mutation<boolean, string>({\n query: (id) => ({\n url: `${GEN3_HATCHERY_API}/launch?id=${id}`,\n method: 'POST',\n responseHandler: async (response) => {\n if (!response.ok) {\n // If the server errored (4xx/5xx), parse the error body as JSON\n return response.text();\n }\n // If the server succeeded (2xx), parse the body as plain text\n return response.text();\n },\n }),\n invalidatesTags: ['Hatchery'],\n transformResponse: async (response: string) => {\n return !!(response && response === 'Success');\n },\n }),\n terminateHatcheryWorkspace: builder.mutation<string, string>({\n query: (id) => {\n return {\n url: `${GEN3_HATCHERY_API}/terminate?id=${id}`,\n method: 'POST',\n responseHandler: (response) => response.text(),\n };\n },\n invalidatesTags: ['Hatchery'],\n }),\n }),\n overrideExisting: true,\n});\n\nexport const {\n useDoesHatcheryOptionExistsQuery,\n useHatcheryOptionsQuery,\n useLazyHatcheryOptionsQuery,\n useHatcheryStatusQuery,\n useLazyHatcheryStatusQuery,\n useLaunchHatcheryWorkspaceMutation,\n useTerminateHatcheryWorkspaceMutation,\n} = hatcheryApi;\n","import { FetchBaseQueryError } from '@reduxjs/toolkit/query';\n\n/**\n * Type guard to check if an object has FetchBaseQueryError shape\n */\nfunction isFetchBaseQueryErrorShape(\n error: unknown,\n): error is FetchBaseQueryError {\n return typeof error === 'object' && error !== null && 'status' in error;\n}\n\n/**\n * Type guard to check if an object has a message property\n */\nfunction hasMessageProperty(obj: unknown): obj is { message: unknown } {\n return typeof obj === 'object' && obj !== null && 'message' in obj;\n}\n\n/**\n * Type guard to check if an object has an error property\n */\nfunction hasErrorProperty(obj: unknown): obj is { error: unknown } {\n return typeof obj === 'object' && obj !== null && 'error' in obj;\n}\n\n/**\n * Extracts a message from FetchBaseQueryError data field\n */\nfunction extractMessageFromData(data: unknown): string | null {\n if (typeof data === 'string') {\n return data;\n }\n\n if (typeof data === 'object' && data !== null) {\n if (hasMessageProperty(data)) {\n return String(data.message);\n }\n if (hasErrorProperty(data)) {\n return String(data.error);\n }\n try {\n return JSON.stringify(data);\n } catch {\n return String(data);\n }\n }\n\n return null;\n}\n\n/**\n * Extracts error message from a FetchBaseQueryError\n */\nfunction extractFetchBaseQueryErrorMessage(\n error: FetchBaseQueryError,\n): string | null {\n if ('error' in error && typeof error.error === 'string') {\n return error.error;\n }\n\n if ('data' in error) {\n return extractMessageFromData(error.data);\n }\n\n return null;\n}\n\n/**\n * Extracts a human-readable error message from RTK Query errors.\n * Handles both FetchBaseQueryError and SerializedError types.\n *\n * @param error - The error object from RTK Query\n * @returns A string representation of the error message\n */\nexport function getRTKQErrorMessage(error: unknown): string {\n if (!error) {\n return 'Unknown error';\n }\n\n if (isFetchBaseQueryErrorShape(error)) {\n const message = extractFetchBaseQueryErrorMessage(error);\n if (message) {\n return message;\n }\n }\n\n // Handle SerializedError\n if (hasMessageProperty(error)) {\n return String(error.message);\n }\n\n return String(error);\n}\n","import { useCallback, useEffect, useMemo, useState } from 'react';\nimport {\n useDoesHatcheryOptionExistsQuery,\n useLaunchHatcheryWorkspaceMutation,\n useTerminateHatcheryWorkspaceMutation,\n} from '../core/hatcheryApi';\nimport {\n isFetchBaseQueryError,\n RequestedWorkspaceStatus,\n selectJEGActiveWorkspaceStatus,\n setJEGActiveWorkspaceId,\n setJEGActiveWorkspaceStatus,\n setJEGRequestedWorkspaceStatus,\n useCoreDispatch,\n useCoreSelector,\n WorkspaceStatus,\n} from '@gen3/core';\nimport { useDeepCompareEffect } from 'use-deep-compare';\nimport { notifications } from '@mantine/notifications';\nimport { MicroContainerReduxContextValue } from './types';\nimport { getRTKQErrorMessage } from '../utils';\n\n/**\n * Resolves an error message for a workspace-related operation.\n *\n * This function determines the error message to return based on the provided `error` object.\n * If the `error` object matches the criteria for a Fetch Base Query Error, the appropriate\n * RTK Query error message is returned. Otherwise, a default error message is used.\n *\n * @param {unknown} error - The error object encountered during the operation. Can be of any type.\n * @param {string} defaultMessage - The default message to use if the error does not match\n * a Fetch Base Query Error.\n * @returns {string} The resolved error message, either derived from the specific error or the default message.\n */\nconst getWorkspaceErrorMessage = (\n error: unknown,\n defaultMessage: string,\n): string => {\n if (isFetchBaseQueryError(error)) {\n return getRTKQErrorMessage(error);\n }\n return defaultMessage;\n};\n\n/**\n * Displays an error notification with the specified title and message.\n *\n * This function clears any existing notifications before showing a new\n * one. Notifications are displayed at the top-center of the screen.\n *\n * @param {string} title - The title of the error notification.\n * @param {string} message - The message content of the error notification.\n */\n\n// oxlint-disable-next-line no-unused-vars\nconst showErrorNotification = (title: string, message: string) => {\n // Clear any existing notifications first\n notifications.clean(); // TODO debounce instead of clearing\n\n notifications.show({\n title,\n message,\n position: 'top-center',\n });\n};\n\n/**\n * Custom React hook that integrates with a micro-container system using Redux.\n * Enables launching and terminating containerized workspaces while managing state and errors.\n * Note must use the JEG versions of the redux actions.\n *\n * @param {string} tag - A unique identifier or tag for the container.\n * @param {boolean} enabled - A flag indicating whether the functionality is enabled.\n * @return {MicroContainerReduxContextValue} An object containing the workspace status, container hash,\n * and functions to launch or terminate the workspace.\n *\n * @typedef {Object} MicroContainerReduxContextValue\n * @property {WorkspaceStatus} status - The current status of the workspace container (e.g., launching, running, terminating).\n * @property {string | null} containerHash - The unique hash of the container, or null if not yet set.\n * @property {Function} launch - Function to asynchronously launch the workspace container.\n * @property {Function} terminate - Function to asynchronously terminate the workspace container.\n */\nexport function useMicroContainerRedux(\n tag: string,\n enabled: boolean,\n): MicroContainerReduxContextValue {\n const workspaceContainerStatus = useCoreSelector(\n selectJEGActiveWorkspaceStatus,\n );\n const [containerHash, setContainerHash] = useState<string | null>(null);\n const coreDispatch = useCoreDispatch();\n\n // get the options for the workspace could move to parent\n const { data: optionData } = useDoesHatcheryOptionExistsQuery(tag, {\n skip: containerHash !== null,\n });\n\n const [\n launchTrigger,\n { isError: isWorkspaceLaunchError, error: workspaceLaunchError },\n ] = useLaunchHatcheryWorkspaceMutation();\n const [\n terminateWorkspace,\n { isError: isTerminateError, error: workspaceTerminateError },\n ] = useTerminateHatcheryWorkspaceMutation();\n useEffect(() => {\n if (optionData) setContainerHash(optionData);\n }, [optionData]);\n\n // handle errors in launching, getting status, or terminating\n useDeepCompareEffect(() => {\n if (isWorkspaceLaunchError || isTerminateError) {\n const errorMessage = getWorkspaceErrorMessage(\n isWorkspaceLaunchError ? workspaceLaunchError : workspaceTerminateError,\n isWorkspaceLaunchError\n ? 'Error launching workspace'\n : 'Error stopping workspace',\n );\n\n console.error(\n 'useMicroContainerRedux (workspace launch or terminate)',\n errorMessage,\n );\n\n if (isWorkspaceLaunchError) {\n coreDispatch(setJEGActiveWorkspaceStatus(WorkspaceStatus.LaunchError));\n } else {\n coreDispatch(\n setJEGActiveWorkspaceStatus(WorkspaceStatus.TerminateError),\n );\n }\n coreDispatch(\n setJEGRequestedWorkspaceStatus(RequestedWorkspaceStatus.Unset),\n );\n }\n }, [isWorkspaceLaunchError, isTerminateError]);\n\n const launch = useCallback(async (tag?: string): Promise<void> => {\n if (\n !enabled ||\n workspaceContainerStatus === WorkspaceStatus.Launching ||\n workspaceContainerStatus === WorkspaceStatus.Running\n )\n return; // already running or launching so ignore\n\n const isTagString = tag && typeof tag === 'string';\n if (isTagString) {\n // set hash to passed in tag\n setContainerHash(tag);\n }\n\n try {\n coreDispatch(\n setJEGRequestedWorkspaceStatus(RequestedWorkspaceStatus.Launch),\n );\n coreDispatch(setJEGActiveWorkspaceStatus(WorkspaceStatus.Launching));\n // use tag if provided to prevent race condition with setContainerHash\n const query = isTagString ? encodeURIComponent(tag) : (containerHash ? encodeURIComponent(containerHash) : '');\n const launchResults = await launchTrigger(query).unwrap();\n if (!launchResults) {\n // launch error, will show error message and then reset\n coreDispatch(setJEGActiveWorkspaceStatus(WorkspaceStatus.LaunchError));\n } else {\n // Keep status as Launching — the monitor will promote to Running\n // once the pod actually reports running status\n coreDispatch(\n setJEGActiveWorkspaceId({ id: containerHash ?? 'default' }),\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_error: unknown) {\n coreDispatch(setJEGActiveWorkspaceStatus(WorkspaceStatus.LaunchError));\n }\n // Status will resolve to 'running' on the next poll\n }, [\n enabled,\n workspaceContainerStatus,\n coreDispatch,\n containerHash,\n launchTrigger,\n ]);\n\n const terminate = useCallback(async () => {\n if (!enabled || workspaceContainerStatus === WorkspaceStatus.Terminating)\n return; // skip if already terminating\n\n const containerId = containerHash ? encodeURIComponent(containerHash) : '';\n // Fire-and-forget: errors are handled by the useDeepCompareEffect watching isTerminateError\n terminateWorkspace(containerId);\n coreDispatch(\n setJEGRequestedWorkspaceStatus(RequestedWorkspaceStatus.Terminate),\n );\n coreDispatch(setJEGActiveWorkspaceStatus(WorkspaceStatus.Terminating));\n }, [\n enabled,\n workspaceContainerStatus,\n coreDispatch,\n containerHash,\n terminateWorkspace,\n ]);\n\n return useMemo(\n () => ({\n status: workspaceContainerStatus,\n containerHash,\n launch,\n terminate,\n }),\n [workspaceContainerStatus, containerHash, launch, terminate],\n );\n}\n","import { WorkspaceStatus } from '@gen3/core';\nimport { MicroContainerStatus } from './types';\nimport { HatcheryServiceState } from '../core/types';\n\nexport const hatcheryStateToMicroContainerStatus = (\n state: HatcheryServiceState,\n): MicroContainerStatus => {\n switch (state) {\n case HatcheryServiceState.running:\n return 'running';\n case HatcheryServiceState.launching:\n return 'launching';\n case HatcheryServiceState.terminating:\n return 'terminating';\n case HatcheryServiceState.stopped:\n return 'not-running';\n case HatcheryServiceState.error:\n return 'error';\n case HatcheryServiceState.unknown:\n default:\n return 'unknown';\n }\n};\n\nexport const hatcheryStateToWorkspaceStatus = (\n state: HatcheryServiceState,\n): WorkspaceStatus => {\n switch (state) {\n case HatcheryServiceState.running:\n return WorkspaceStatus.Running;\n case HatcheryServiceState.launching:\n return WorkspaceStatus.Launching;\n case HatcheryServiceState.terminating:\n return WorkspaceStatus.Terminating;\n case HatcheryServiceState.stopped:\n return WorkspaceStatus.Stopped;\n case HatcheryServiceState.error:\n return WorkspaceStatus.Errored;\n case HatcheryServiceState.unknown:\n return WorkspaceStatus.NotFound;\n default:\n return WorkspaceStatus.NotFound;\n }\n};\n","import { useEffect, useState } from 'react';\nimport {\n isTimeGreaterThan,\n RequestedWorkspaceStatus,\n selectJEGActiveWorkspaceStatus,\n selectJEGRequestedWorkspaceStatus,\n selectJEGRequestedWorkspaceStatusTimestamp,\n setJEGActiveWorkspaceStatus,\n setJEGRequestedWorkspaceStatus,\n useCoreDispatch,\n useCoreSelector,\n WorkspaceStatus,\n} from '@gen3/core';\nimport { notifications } from '@mantine/notifications';\nimport { useDeepCompareEffect } from 'use-deep-compare';\nimport { convertSecondsToMilliseconds } from '@gen3/frontend';\nimport {\n useHatcheryStatusQuery,\n useTerminateHatcheryWorkspaceMutation,\n} from '../core/hatcheryApi';\nimport { HatcheryServiceState } from '../core/types';\nimport { hatcheryStateToWorkspaceStatus } from './utils';\nimport { getRTKQErrorMessage } from '../utils';\n\nconst MAXIMUM_START_TIME_IN_MINUTES = 6;\n\nenum NotificationStatus {\n Info,\n Warn,\n Error,\n}\n\nconst notifyUser = (\n title: string,\n message: string,\n status = NotificationStatus.Info,\n) => {\n const NotificationMap: Record<NotificationStatus, string> = {\n [NotificationStatus.Info]: 'utility.1',\n [NotificationStatus.Warn]: 'utility.2',\n [NotificationStatus.Error]: 'utility.4',\n };\n\n notifications.clean();\n notifications.show({\n title,\n message,\n color: NotificationMap[status],\n position: 'top-center',\n });\n};\n\n// TODO: convert to seconds/minutes for readability\nconst WorkspacePollingInterval: Record<WorkspaceStatus, number> = {\n [WorkspaceStatus.NotFound]: 0,\n [WorkspaceStatus.Launching]: convertSecondsToMilliseconds(5),\n [WorkspaceStatus.Terminating]: convertSecondsToMilliseconds(5),\n [WorkspaceStatus.Running]: convertSecondsToMilliseconds(60),\n [WorkspaceStatus.Stopped]: convertSecondsToMilliseconds(60),\n [WorkspaceStatus.Errored]: convertSecondsToMilliseconds(10),\n [WorkspaceStatus.LaunchError]: convertSecondsToMilliseconds(10),\n [WorkspaceStatus.TerminateError]: convertSecondsToMilliseconds(10),\n [WorkspaceStatus.StatusError]: 0,\n};\n\nconst workspaceShutdownAlertLimit = 30000; // 5 minutes: 5 * 60 * 1000 TODO Figure how to configure this\n\n/**\n * Monitors resource usage.\n * Handles state changes and polls for workspace status using the JEG APIs\n */\n\nexport const useJEGWorkspaceResourceMonitor = (\n workspaceId: string | null = null,\n monitorWorkspace: boolean,\n startTimeLimit: number = MAXIMUM_START_TIME_IN_MINUTES,\n) => {\n // start with default polling interval of 1 second\n const [pollingInterval, setPollingInterval] = useState<number>(\n convertSecondsToMilliseconds(1),\n );\n const [error, setError] = useState<string | null>(null);\n\n const {\n data: workspaceStatusData,\n isError: isWorkspaceStatusError,\n error: workspaceStatusError,\n } = useHatcheryStatusQuery(\n workspaceId,\n monitorWorkspace // && workspaceId // TODO check to see if this is needed\n ? {\n pollingInterval: pollingInterval,\n refetchOnMountOrArgChange: 1800,\n refetchOnFocus: true,\n }\n : {\n skip: true,\n },\n );\n\n const [terminateWorkspace] = useTerminateHatcheryWorkspaceMutation();\n const activeStatus = useCoreSelector(selectJEGActiveWorkspaceStatus);\n const requestedStatus = useCoreSelector(selectJEGRequestedWorkspaceStatus); // trigger to start/stop workspaces\n const requestedStatusTimestamp = useCoreSelector(\n selectJEGRequestedWorkspaceStatusTimestamp,\n );\n const dispatch = useCoreDispatch();\n const idleTimeLimit = workspaceStatusData?.idleTimeLimit;\n const lastActivityTime = workspaceStatusData?.lastActivityTime;\n\n useEffect(() => {\n if (isWorkspaceStatusError) {\n dispatch(setJEGActiveWorkspaceStatus(WorkspaceStatus.StatusError));\n setPollingInterval(0); // stop polling\n const errorMessage = getRTKQErrorMessage(workspaceStatusError);\n setError(errorMessage);\n }\n }, [isWorkspaceStatusError, dispatch, workspaceStatusError]);\n\n // update the polling based on the requested state\n useEffect(() => {\n if (requestedStatus === RequestedWorkspaceStatus.Launch) {\n setPollingInterval(WorkspacePollingInterval[WorkspaceStatus.Launching]);\n }\n if (requestedStatus === RequestedWorkspaceStatus.Terminate) {\n setPollingInterval(WorkspacePollingInterval[WorkspaceStatus.Terminating]);\n }\n }, [requestedStatus]);\n\n useDeepCompareEffect(() => {\n // TODO: add better error logging\n if (error) {\n console.log('useJEGWorkspaceResourceMonitor', error);\n }\n }, [error]);\n\n useDeepCompareEffect(() => {\n // No status data means we are not polling\n if (!workspaceStatusData) return;\n // LaunchError is set client-side by the launch() call from useMicroContainerRedux and cleared by the\n // auto-reset timer in the panel. Polling data must not override it or the\n // timer will be canceled before it fires.\n if (activeStatus === WorkspaceStatus.LaunchError) return;\n const workspaceQueryStatus = hatcheryStateToWorkspaceStatus(\n workspaceStatusData?.status,\n );\n\n // handle cases of unknown, running, terminating, or launching\n if (workspaceStatusData.status === HatcheryServiceState.unknown) {\n // check for unknown state\n // NotFound means pod is not running\n // either starting up\n // or finally terminated.\n if (requestedStatus === RequestedWorkspaceStatus.Launch) {\n // if the workspace becomes idle too long after a Launch request, switch to\n // Unset and NotFound.\n console.warn(\n \"requested status is Launch, but workspace pod isn't running yet.\",\n );\n return;\n }\n // both requested status and workspace pod status are the same, so stop all polling\n setPollingInterval(WorkspacePollingInterval[WorkspaceStatus.NotFound]);\n dispatch(setJEGActiveWorkspaceStatus(WorkspaceStatus.NotFound));\n if (requestedStatus === RequestedWorkspaceStatus.Terminate) {\n // Cleanup termination after terminated\n dispatch(\n setJEGRequestedWorkspaceStatus(RequestedWorkspaceStatus.Unset),\n );\n }\n return;\n }\n\n // Check if the workspace is running.\n // If so: need to check workspace idle if set\n if (workspaceStatusData.status === HatcheryServiceState.running) {\n // in some state other than idle\n if (!idleTimeLimit || idleTimeLimit <= 0) {\n // Workspace is running, but no idle limit set.\n // Continue to poll to ensure we detect if it crashes or stops.\n dispatch(\n setJEGRequestedWorkspaceStatus(RequestedWorkspaceStatus.Unset),\n );\n dispatch(setJEGActiveWorkspaceStatus(WorkspaceStatus.Running)); // workspace is running\n setPollingInterval(WorkspacePollingInterval[WorkspaceStatus.Running]);\n return;\n }\n\n // handle if idle time is defined\n if (\n idleTimeLimit &&\n idleTimeLimit > 0 &&\n lastActivityTime &&\n lastActivityTime > 0\n ) {\n const remainingWorkspaceKernelLife =\n idleTimeLimit - (Date.now() - lastActivityTime);\n\n if (remainingWorkspaceKernelLife <= 0) {\n // kernel has died due to inactivity\n // so terminate\n (async () => {\n try {\n if (workspaceId)\n await terminateWorkspace(\n encodeURIComponent(workspaceId),\n ).unwrap();\n } catch (error) {\n const errorMessage =\n (error as Error).message || 'Unknown error occurred';\n console.error('Workspace termination failed: ', errorMessage);\n notifyUser(\n 'Workspace Error',\n `Failed to terminate workspace: ${errorMessage}`,\n NotificationStatus.Error,\n );\n }\n })();\n dispatch(\n setJEGRequestedWorkspaceStatus(RequestedWorkspaceStatus.Terminate),\n );\n setPollingInterval(\n WorkspacePollingInterval[WorkspaceStatus.Terminating],\n );\n dispatch(setJEGActiveWorkspaceStatus(WorkspaceStatus.Terminating));\n notifyUser(\n 'Workspace Shutdown',\n 'Workspace has been idle for too long. Shutting workspace down',\n NotificationStatus.Error,\n );\n return;\n }\n if (remainingWorkspaceKernelLife <= workspaceShutdownAlertLimit) {\n setError('Workspace has been idle for too long. Will shutdown soon');\n }\n }\n }\n\n // Stopped means the pod is in a failed state — auto-terminate it\n if (workspaceStatusData.status === HatcheryServiceState.stopped) {\n (async () => {\n try {\n if (workspaceId)\n await terminateWorkspace(encodeURIComponent(workspaceId)).unwrap();\n } catch (error) {\n const errorMessage =\n (error as Error).message || 'Unknown error occurred';\n console.error(\n 'Workspace termination of stopped pod failed: ',\n errorMessage,\n );\n notifyUser(\n 'Workspace Error',\n `Failed to terminate stopped workspace: ${errorMessage}`,\n NotificationStatus.Error,\n );\n }\n })();\n dispatch(\n setJEGRequestedWorkspaceStatus(RequestedWorkspaceStatus.Terminate),\n );\n dispatch(setJEGActiveWorkspaceStatus(WorkspaceStatus.Terminating));\n setPollingInterval(WorkspacePollingInterval[WorkspaceStatus.Terminating]);\n notifyUser(\n 'Workspace Stopped',\n 'Workspace entered a failed state and is being terminated',\n NotificationStatus.Error,\n );\n return;\n }\n\n if (requestedStatus === RequestedWorkspaceStatus.Launch) {\n // if we have a launch error then requested status has not been met\n if (workspaceQueryStatus === WorkspaceStatus.LaunchError) {\n dispatch(\n setJEGRequestedWorkspaceStatus(RequestedWorkspaceStatus.Unset),\n );\n dispatch(setJEGActiveWorkspaceStatus(WorkspaceStatus.LaunchError));\n return;\n }\n if (workspaceQueryStatus === WorkspaceStatus.NotFound) {\n return; // pod not yet created, keep waiting\n }\n if (workspaceQueryStatus === WorkspaceStatus.Running) {\n // workspace is running — requested status has been met\n dispatch(\n setJEGRequestedWorkspaceStatus(RequestedWorkspaceStatus.Unset),\n );\n dispatch(setJEGActiveWorkspaceStatus(WorkspaceStatus.Running));\n return;\n }\n // still launching — update active status but keep requestedStatus as Launch\n dispatch(setJEGActiveWorkspaceStatus(workspaceQueryStatus));\n return;\n }\n\n if (requestedStatus === RequestedWorkspaceStatus.Terminate) {\n return;\n }\n\n // if here, update active workspace status and polling for other states\n dispatch(setJEGActiveWorkspaceStatus(workspaceQueryStatus));\n setPollingInterval(WorkspacePollingInterval[workspaceQueryStatus]);\n }, [dispatch, workspaceStatusData, requestedStatus, activeStatus]);\n\n useEffect(() => {\n // time out if exceeding maximum start time\n if (\n requestedStatus === RequestedWorkspaceStatus.Launch &&\n isTimeGreaterThan(requestedStatusTimestamp, startTimeLimit)\n ) {\n if (workspaceId) terminateWorkspace(encodeURIComponent(workspaceId));\n dispatch(\n setJEGRequestedWorkspaceStatus(RequestedWorkspaceStatus.Terminate),\n // no need to set as it will get set above\n );\n setError('Workspace failed to start. Shutting down');\n }\n }, [\n requestedStatus,\n requestedStatusTimestamp,\n dispatch,\n workspaceStatusData,\n workspaceId,\n terminateWorkspace,\n startTimeLimit,\n ]);\n};\n","import React, { createContext, ReactNode } from 'react';\nimport { useMicroContainerRedux } from './useMicroContainerRedux';\nimport { WorkspaceStatus } from '@gen3/core';\nimport { MicroContainerReduxContextValue } from './types';\nimport { useJEGWorkspaceResourceMonitor } from './useJEGWorkspaceResourceMonitor';\n\nconst MicroContainerReduxProviderContext =\n createContext<MicroContainerReduxContextValue>({\n status: WorkspaceStatus.NotFound,\n containerHash: null,\n launch: () => Promise.resolve(),\n terminate: () => Promise.resolve(),\n });\n\nexport const useMicroContainerReduxContext = () => {\n const context = React.useContext(MicroContainerReduxProviderContext);\n if (context === undefined) {\n throw Error(\n 'useMicroContainerContext must be used inside a MicroContainerProvider',\n );\n }\n return context;\n};\n\ninterface MicroContainerProviderProps {\n children: ReactNode;\n identifierTag?: string;\n enabled: boolean;\n startTimeLimit?: number;\n}\n\nexport function MicroContainerReduxProvider({\n children,\n identifierTag,\n enabled,\n startTimeLimit = undefined,\n}: MicroContainerProviderProps) {\n const tag =\n identifierTag ?? (process.env.NEXT_PUBLIC_MICRO_CONTAINER_TAG || '');\n\n const value = useMicroContainerRedux(tag, enabled);\n useJEGWorkspaceResourceMonitor(value.containerHash, true, startTimeLimit);\n\n return (\n <MicroContainerReduxProviderContext.Provider value={value}>\n {children}\n </MicroContainerReduxProviderContext.Provider>\n );\n}\n","import React, { useCallback, useEffect, useState, useMemo } from 'react';\nimport { Alert, Button, Loader, Select, ComboboxItem } from '@mantine/core';\nimport { useInterval } from '@mantine/hooks';\nimport {\n selectJEGActiveWorkspaceStatus,\n selectJEGRequestedWorkspaceStatusTimestamp,\n setJEGActiveWorkspaceStatus,\n useCoreDispatch,\n useCoreSelector,\n WorkspaceStatus,\n} from '@gen3/core';\nimport { useMicroContainerReduxContext } from '../providers/MicroContainerReduxProvider';\nimport { useHatcheryOptionsQuery } from '../core/hatcheryApi';\nimport { Icon } from '@iconify-icon/react';\nimport { MdExpandMore } from 'react-icons/md';\n\nconst icon = <Icon icon=\"gen3:error-outline\" size={24} />;\n\n/**\n * Micro container lifecycle UI — five exclusive states.\n *\n * not-running → \"Launch Workspace\" button + cost context. Nothing else.\n * launching → Spinner + elapsed timer + \"Starting your workspace…\" + Cancel.\n * running → Compact status badge (renders at top of right panel).\n * terminating → Spinner + \"Stopping workspace…\". No actions until pod is gone.\n * error → Error message + Terminate / Retry buttons.\n *\n * The iframe and KernelLifecyclePanel are rendered by the PARENT only when\n * status === 'running' && useJupyterReady.ready === true.\n */\n\nconst PanelStyle =\n 'h-full w-full flex flex-col items-center justify-start gap-6 px-6 mt-20';\n\nconst MicroContainerReduxPanel = ({enableOptions = false}) => {\n const { launch, terminate, containerHash } = useMicroContainerReduxContext();\n const { data: hatcheryOptions, isLoading: isHatcheryOptionsLoading, isError: isHatcheryOptionsError} = useHatcheryOptionsQuery();\n const [ workspaceOptionSelected, setWorkspaceOptionSelected ] = useState<ComboboxItem | null>(null);\n\n const status = useCoreSelector(selectJEGActiveWorkspaceStatus);\n const requestedStatusTimestamp: number = useCoreSelector(\n selectJEGRequestedWorkspaceStatusTimestamp,\n );\n\n const coreDispatch = useCoreDispatch();\n\n const resetStatus = useCallback(() => {\n coreDispatch(setJEGActiveWorkspaceStatus(WorkspaceStatus.NotFound));\n }, [coreDispatch]);\n\n /* ── Elapsed timer for launching state ── */\n const [elapsedSec, setElapsedSec] = useState(0);\n\n const interval = useInterval(() => {\n const elapsed = Math.floor(\n (Date.now() - (requestedStatusTimestamp as number)) / 1000,\n );\n setElapsedSec(elapsed);\n }, 1000);\n\n useEffect(() => {\n if (status === WorkspaceStatus.Launching) {\n interval.start();\n } else {\n setElapsedSec(0);\n interval.stop();\n }\n return interval.stop;\n }, [status, interval]);\n\n /* ── Auto-reset after 15 s in launch-error state ── */\n useEffect(() => {\n if (status !== WorkspaceStatus.LaunchError) return;\n const t = setTimeout(() => resetStatus(), 6_000);\n return () => clearTimeout(t);\n }, [status, resetStatus]);\n\n const simpleLaunchWorkspaceBtn = (\n <Button variant=\"outline\" color=\"accent.3\" onClick={()=>launch()}>\n Launch Workspace\n </Button>\n );\n\n const launchWorkspaceBtn = useMemo(()=>{\n if (isHatcheryOptionsLoading) {\n return (<Loader size={24} />);\n }\n if (isHatcheryOptionsError) {\n return (\n <Alert\n variant=\"light\"\n color=\"accentWarm.4\"\n title=\"Options API Error\"\n icon={icon}\n >\n Failed to Fetch Options\n </Alert>\n );\n }\n if ( hatcheryOptions && hatcheryOptions.length > 1) {\n\n const workspaceOptionLaunch = () => {\n if (workspaceOptionSelected?.value) {\n launch(workspaceOptionSelected.value);\n }\n };\n const hatcheryOptionForSelect = hatcheryOptions.map((obj)=>({\n label: obj.name,\n value: obj.id\n }));\n return (\n <div className='flex'>\n <Select\n rightSection={\n <MdExpandMore\n className=\"text-accent\"\n size=\"1.5em\"\n aria-hidden\n />\n }\n withCheckIcon={false}\n data={hatcheryOptionForSelect}\n value={workspaceOptionSelected ? workspaceOptionSelected.value : null}\n placeholder='-- Select workspace type --'\n onChange={(_value, option) => setWorkspaceOptionSelected(option)}\n classNames={{input: 'rounded-r-none'}}\n color=\"accent.3\"\n />\n <Button \n onClick={workspaceOptionLaunch}\n className='rounded-l-none w-64 disabled:bg-accent-lighter disabled:text-accent-contrast'\n disabled={!workspaceOptionSelected?.value}\n color=\"accent.3\"\n >\n Launch Workspace\n </Button>\n </div>\n );\n }\n return simpleLaunchWorkspaceBtn;\n }, [isHatcheryOptionsLoading, workspaceOptionSelected, containerHash]);\n\n if (status === WorkspaceStatus.StatusError) {\n return (\n <div className={PanelStyle}>\n <Alert\n variant=\"light\"\n color=\"accentWarm.4\"\n title=\"Status Error\"\n icon={icon}\n >\n Unable to get the status of your workspace. Please try again later.\n </Alert>\n </div>\n );\n }\n\n /* ── not-running ── */\n if (status === WorkspaceStatus.NotFound) {\n return (\n <div className={PanelStyle}>\n <div className=\"text-center\">\n <Icon\n icon=\"gen3:run\"\n width={60}\n height={60}\n className=\"text-accent\"\n />\n\n <p className=\"mt-2 max-w-lg text-sm text-base-darker\">\n Start your personal micro compute environment. Use it for light analysis, upgrade to a GPU kernel when you need to run large workflows.\n </p>\n </div>\n { enableOptions ? launchWorkspaceBtn: simpleLaunchWorkspaceBtn }\n </div>\n );\n }\n\n /* ── launching ── */\n if (status === WorkspaceStatus.Launching) {\n return (\n <div role=\"status\" className={PanelStyle}>\n <Loader size={48} />\n <span className=\"sr-only\">Starting workspace, please wait.</span>\n <div className=\"text-center\">\n <p className=\"text-base font-bold text-base-darkest\">\n Starting your workspace…\n </p>\n <p className=\"mt-1 text-sm text-base-darker\">\n Elapsed: {elapsedSec} {elapsedSec === 1 ? 'second' : 'seconds'}\n </p>\n <p className=\"mt-1 text-xs text-base-dark\">\n Usually takes 30–90 seconds on a cold start.\n </p>\n </div>\n <Button onClick={terminate} variant=\"outline\">\n Cancel\n </Button>\n </div>\n );\n }\n\n /* ── error ── */\n if (status === WorkspaceStatus.LaunchError) {\n return (\n <div role=\"alert\" className={PanelStyle}>\n <Alert\n variant=\"light\"\n color=\"accentWarm.4\"\n title=\"Status Error\"\n icon={icon}\n >\n Workspace failed to start.\n </Alert>\n <div className=\"flex items-center gap-3\">\n <Button onClick={resetStatus} variant=\"default\">\n Reset\n </Button>\n </div>\n </div>\n );\n }\n\n /* ── error ── */\n if (status === WorkspaceStatus.Stopped) {\n return (\n <div role=\"alert\" className={PanelStyle}>\n <div className=\"text-center\">\n <p className=\"text-base font-bold text-base-darkest\">\n Workspace stopped\n </p>\n </div>\n <div className=\"flex items-center gap-3\">\n <Button onClick={terminate} variant=\"outline\">\n Terminate\n </Button>\n <Button onClick={()=>launch()} variant=\"default\">\n Retry\n </Button>\n </div>\n </div>\n );\n }\n\n /* ── terminating ── */\n if (status === WorkspaceStatus.Terminating) {\n return (\n <div role=\"status\" className={PanelStyle}>\n <Loader size={48} />\n <span className=\"sr-only\">Stopping workspace, please wait.</span>\n <div className=\"text-center\">\n <p className=\"text-base font-bold text-base-darkest\">\n Stopping your workspace…\n </p>\n <p className=\"mt-1 text-xs text-base-darker\">\n Waiting for the container to shut down. This usually takes under a\n minute.\n </p>\n </div>\n </div>\n );\n }\n\n // none of the above so render nothing\n return null;\n};\n\nexport default MicroContainerReduxPanel;\n","import React, {\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\nimport type { WorkspaceAuthContext } from '../../auth/auth';\nimport { generateScopedNotebookPath } from './utils';\nimport { Button, Card, Loader, Text } from '@mantine/core';\nimport MicroContainerReduxPanel from '../../components/MicroContainerReduxPanel';\nimport { useMicroContainerReduxContext } from '../../providers/MicroContainerReduxProvider';\nimport { WorkspaceStatus } from '@gen3/core';\nimport { type RemoteComputeWorkspaceHandle } from './types';\nimport { ACTIVITY_CHANNEL } from '@gen3/frontend';\n\nexport type RemoteComputeWorkspaceProps = {\n assetBaseUrl?: string;\n enableOptions?: boolean;\n className?: string;\n onReady?: () => void;\n onError?: (error: Error) => void;\n authContext?: WorkspaceAuthContext;\n runtimeModeKey?: string;\n // Multi-tenant scope for session isolation and audit trails\n tenantId: string;\n workspaceId: string;\n userId: string;\n notebookName?: string;\n};\n\n/**\n * Handle a Jupyter Enterprise Gateway session.\n */\nconst RemoteComputeWorkspace = React.memo(\n React.forwardRef<RemoteComputeWorkspaceHandle, RemoteComputeWorkspaceProps>(\n (\n {\n assetBaseUrl = '/api/workspace-assets/remote',\n enableOptions = false,\n tenantId,\n workspaceId,\n userId,\n notebookName = 'remote-workspace',\n onReady = () => {},\n onError = () => {},\n }: RemoteComputeWorkspaceProps,\n ref,\n ) => {\n const [loading, setLoading] = useState(true);\n const [loadError, setLoadError] = useState(false);\n const [retryCount, setRetryCount] = useState(0);\n const [jupyterReady, setJupyterReady] = useState(false);\n const iframeRef = useRef<HTMLIFrameElement | null>(null);\n const broadcastChannelRef = useRef<BroadcastChannel | null>(null);\n const { status } = useMicroContainerReduxContext();\n\n const normalizedBase = assetBaseUrl.replace(/\\/$/, '');\n\n // Scoped notebook path for session isolation\n let scopedNotebookPath: string;\n try {\n scopedNotebookPath = generateScopedNotebookPath({\n tenantId,\n workspaceId,\n userId,\n notebookName,\n });\n } catch (error: unknown) {\n if (error instanceof Error) {\n // show the error in the console\n console.error(error.message);\n }\n const userHash = btoa(userId || 'anonymous').substring(0, 8);\n scopedNotebookPath = `/workspace/${userHash}/${notebookName}.ipynb`;\n }\n\n // let accessToken = undefined;\n // if (process.env.NODE_ENV === 'development') {\n // // NOTE: This cookie can only be accessed from the client side\n // // in development mode. Otherwise, the cookie is set as httpOnly\n // accessToken = getCookie('credentials_token');\n // }\n\n // set up BroadcastChannel\n useEffect(() => {\n if (!broadcastChannelRef?.current) {\n broadcastChannelRef.current = new BroadcastChannel(ACTIVITY_CHANNEL);\n }\n\n return () => {\n if (broadcastChannelRef.current) {\n broadcastChannelRef.current.close();\n broadcastChannelRef.current = null;\n }\n };\n }, []);\n\n // Handle setting up iframe event listeners for activity detection.\n // Tries same-origin contentDocument access first; falls back to\n // focus/blur heuristics when the iframe is cross-origin.\n useEffect(() => {\n if (!jupyterReady) return;\n\n const updateUserActivity = () => {\n if (broadcastChannelRef.current) {\n broadcastChannelRef.current.postMessage({\n type: 'activity-update',\n timestamp: Date.now(),\n });\n }\n };\n\n const iframe = iframeRef.current;\n let usedDirectListeners = false;\n\n if (iframe?.contentWindow) {\n try {\n const iframeDoc =\n iframe.contentDocument || iframe.contentWindow.document;\n\n if (iframeDoc) {\n iframeDoc.addEventListener('mousedown', updateUserActivity);\n iframeDoc.addEventListener('keypress', updateUserActivity);\n iframeDoc.addEventListener('scroll', updateUserActivity);\n iframeDoc.addEventListener('touchstart', updateUserActivity);\n usedDirectListeners = true;\n }\n } catch {\n // cross-origin — fall through to focus/blur fallback\n }\n }\n\n // Fallback: treat iframe receiving focus as user activity.\n // This fires when the user clicks into the iframe even if we\n // cannot attach listeners to its document directly.\n if (!usedDirectListeners) {\n window.addEventListener('blur', updateUserActivity);\n window.addEventListener('focus', updateUserActivity);\n }\n\n return () => {\n if (usedDirectListeners && iframe?.contentWindow) {\n try {\n const iframeDoc =\n iframe.contentDocument || iframe.contentWindow.document;\n if (iframeDoc) {\n iframeDoc.removeEventListener('mousedown', updateUserActivity);\n iframeDoc.removeEventListener('keypress', updateUserActivity);\n iframeDoc.removeEventListener('scroll', updateUserActivity);\n iframeDoc.removeEventListener('touchstart', updateUserActivity);\n }\n } catch {\n // Ignore cleanup errors\n }\n }\n if (!usedDirectListeners) {\n window.removeEventListener('blur', updateUserActivity);\n window.removeEventListener('focus', updateUserActivity);\n }\n };\n }, [jupyterReady]);\n /* ---- Wait for JupyterLite app inside the iframe --------------- */\n\n useEffect(() => {\n if (!iframeRef.current || loadError) return;\n if (jupyterReady) return;\n\n let mounted = true;\n let attempts = 0;\n const maxAttempts = 60; // ~30s at 500ms intervals\n\n const poll = () => {\n if (!mounted) return;\n attempts += 1;\n try {\n const app = (iframeRef.current?.contentWindow as any)?.jupyterapp;\n\n /* ------ TODO Remove\n // Inject server-side JEG token — overrides any client-supplied auth header.\n // This ensures calls from JupyterLite's own serverconnection.js are also authenticated.\n let accessToken = getCookie('access_token');\n if (process.env.NODE_ENV === 'development') {\n // NOTE: This cookie can only be accessed from the client side\n // in development mode. Otherwise, the cookie is set as httpOnly\n accessToken = getCookie('credentials_token');\n }\n\n if (app && accessToken) {\n console.log(\n 'Injecting server-side JEG token into JupyterLite app',\n app,\n );\n const win = iframeRef.current?.contentWindow as any;\n // JupyterLab reads token from PageConfig at startup; after startup, update ServerConnection\n if (win.PageConfig) {\n win.PageConfig.setOption('token', accessToken);\n }\n // Also update the service manager's settings if accessible\n if (app.serviceManager?.serverSettings) {\n // ServerConnection.makeSettings merges with existing settings\n const SC =\n win.JupyterFrontEnd?.ServerConnection ?? win.ServerConnection;\n if (SC?.makeSettings) {\n const newSettings = SC.makeSettings({\n ...app.serviceManager.serverSettings,\n token: accessToken,\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n // Reassign — works on many JupyterLab 3/4 builds\n app.serviceManager._serverSettings = newSettings;\n }\n }\n }\n ------ */\n\n if (app?.status === 'ready' || app?.started) {\n setJupyterReady(true);\n onReady?.();\n console.log('Remote kernel JupyterLite app is ready');\n return;\n }\n } catch (error: unknown) {\n if (error instanceof Error) {\n console.error(`Remote error ${error.message}`);\n }\n // cross-origin or not loaded yet\n }\n if (attempts < maxAttempts) {\n window.setTimeout(poll, 500);\n }\n };\n\n // Start polling after iframe fires onLoad\n if (!loading) {\n poll();\n }\n\n return () => {\n mounted = false;\n };\n }, [loading, loadError, jupyterReady, onReady]);\n\n /* ---- Kernel attachment via same-origin iframe access ----------- */\n\n const attachKernel = useCallback(\n async (kernelId: string, kernelName: string): Promise<boolean> => {\n try {\n const app = (iframeRef.current?.contentWindow as any)?.jupyterapp;\n if (!app?.serviceManager?.sessions) {\n console.warn(\n '[RemoteComputeWorkspace] JupyterApp not ready for kernel attachment',\n );\n return false;\n }\n\n await app.serviceManager.sessions.startNew({\n name: notebookName,\n path: scopedNotebookPath,\n type: 'notebook',\n kernel: { id: kernelId, name: kernelName },\n });\n\n return true;\n } catch (err) {\n console.error(\n '[RemoteComputeWorkspace] Failed to attach kernel:',\n err,\n );\n return false;\n }\n },\n [scopedNotebookPath, notebookName],\n );\n\n /* ---- Expose handle to parent ---------------------------------- */\n\n useImperativeHandle(\n ref,\n () => ({\n attachKernel,\n isReady: jupyterReady,\n }),\n [attachKernel, jupyterReady],\n );\n\n /* ---- Retry handler -------------------------------------------- */\n\n const handleRetry = () => {\n setLoadError(false);\n setLoading(true);\n setJupyterReady(false);\n setRetryCount((n) => n + 1);\n };\n\n if (status !== WorkspaceStatus.Running) {\n return (\n <div className=\"w-full flex flex-col grow\">\n <MicroContainerReduxPanel enableOptions={enableOptions}/>\n </div>\n );\n }\n\n return (\n <div className=\"w-full flex flex-col grow\">\n {loading && !loadError && (\n <div\n role=\"status\"\n aria-label=\"Connecting to remote workspace\"\n className=\"w-full h-full pointer-events-none flex items-center justify-center\"\n >\n <div className=\"pointer-events-auto flex flex-col items-center gap-3 rounded-xl border border-slate-200 bg-white p-6 shadow-xl dark:border-slate-700 dark:bg-slate-900\">\n <Loader size={24} />\n <Text size=\"sm\" c=\"dimmed\" mt={4}>\n Connecting to Remote Gateway...\n </Text>\n <Button\n variant=\"default\"\n size=\"xs\"\n mt=\"sm\"\n onClick={handleRetry}\n >\n Taking too long? Reload\n </Button>\n </div>\n </div>\n )}\n {loadError && (\n <div>\n <Card withBorder shadow=\"sm\" padding=\"md\" w=\"100%\" maw={448}>\n <Text fw={600} c=\"primary\">\n Remote workspace failed to load\n </Text>\n <Text size=\"sm\" c=\"dimmed\" mt={4}>\n Unable to connect to the Jupyter Gateway. Check the browser\n console for details.\n </Text>\n <Button\n variant=\"default\"\n size=\"xs\"\n mt=\"sm\"\n onClick={handleRetry}\n >\n Retry\n </Button>\n </Card>\n </div>\n )}\n\n <div className=\"w-full flex flex-col grow\">\n <iframe\n key={retryCount}\n ref={iframeRef}\n src={`${normalizedBase}/lab/index.html`}\n width=\"100%\"\n height=\"100%\"\n title=\"Remote Jupyter Workspace\"\n sandbox=\"allow-scripts allow-same-origin allow-forms allow-popups allow-downloads allow-modals allow-storage-access-by-user-activation\"\n allow=\"clipboard-read; clipboard-write; cross-origin-isolated\"\n className=\"min-h-0 flex-1 border-0\"\n onLoad={() => {\n setLoading(false);\n // jupyterReady is set by the polling effect once the\n // JupyterLite app reports status === 'ready'\n }}\n onError={() => {\n setLoadError(true);\n onError?.(\n new Error('Unable to load remote Jupyter workspace.'),\n );\n }}\n />\n </div>\n </div>\n );\n },\n ),\n);\n\nexport default RemoteComputeWorkspace;\n\nRemoteComputeWorkspace.displayName = 'RemoteComputeWorkspace';\n","import { gen3Api } from '@gen3/core';\nimport { GEN3_KERNEL_API } from '../constants';\nimport { KernelSpecEntry, KernelSpecsResponse } from './types';\n\nconst KernelWithTags = gen3Api.enhanceEndpoints({\n addTagTypes: ['Kernel'],\n});\n\ninterface KernelItemResponse {\n name: string;\n id: string;\n execution_state: string;\n last_activity: string;\n connections: number;\n}\n\nexport interface KernelItem extends Omit<\n KernelItemResponse,\n 'execution_state' | 'last_activity'\n> {\n executionState: string;\n lastActivity: string;\n}\n\nexport const kernelApi = KernelWithTags.injectEndpoints({\n endpoints: (builder) => ({\n kernels: builder.query<Array<KernelItem>, void>({\n query: () => `${GEN3_KERNEL_API}/kernels`,\n transformResponse: (response: Array<KernelItemResponse>) => {\n return response.map((kernel) => ({\n ...kernel,\n executionState: kernel.execution_state,\n lastActivity: kernel.last_activity,\n }));\n },\n }),\n kernalSpecs: builder.query<Array<KernelSpecEntry>, void>({\n query: () => {\n return `${GEN3_KERNEL_API}/kernelspecs`;\n },\n transformResponse: (response: KernelSpecsResponse) => {\n const res = Object.values(response.kernelspecs).reduce((acc, value) => {\n acc.push({\n name: value.name,\n displayName: value.spec.display_name,\n language: value.spec.language,\n nodeType: value.spec.metadata?.nodeType,\n // TODO: cpu and gpu\n // cpu: value.spec.metadata?.cpu,\n // gpu: value.spec.metadata?.gpu,\n });\n return acc;\n }, [] as Array<KernelSpecEntry>);\n return res;\n },\n }),\n kernelsList: builder.query<Array<KernelItem>, void>({\n query: () => `${GEN3_KERNEL_API}/kernels_list`,\n transformResponse: (response: Array<KernelItemResponse>) => {\n return response.map((kernel) => ({\n ...kernel,\n executionState: kernel.execution_state,\n lastActivity: kernel.last_activity,\n }));\n },\n }),\n }),\n overrideExisting: true,\n});\n\nexport const { useKernelsQuery, useKernalSpecsQuery, useKernelsListQuery } =\n kernelApi;\n","import { gen3Api } from '@gen3/core';\nimport { GEN3_JEG_GATEWAY_API } from '../constants';\nimport { GatewayKernel } from '../core/types';\n\n/**\n * manages lifecycle of kernels from JEG Gateway API\n */\n\nconst GatewayWithTags = gen3Api.enhanceEndpoints({\n addTagTypes: ['Gateway', 'ActiveKernels'],\n});\n\nexport const jegGatewayApi = GatewayWithTags.injectEndpoints({\n endpoints: (builder) => ({\n activeKernels: builder.query<Array<GatewayKernel>, void>({\n query: () => ({\n url: `${GEN3_JEG_GATEWAY_API}/kernels`,\n // Auth proxies may redirect 401/403 to a login page (302→200 HTML).\n // Per-request validateStatus catches that by rejecting redirected responses.\n validateStatus: (response) =>\n !response.redirected &&\n response.status >= 200 &&\n response.status < 300,\n }),\n transformResponse: (response: Array<GatewayKernel>) => {\n return response;\n },\n providesTags: ['ActiveKernels'],\n }),\n jegGatewayStatus: builder.query<boolean, void>({\n query: () => `${GEN3_JEG_GATEWAY_API}/status`,\n transformResponse: (response: Record<string, unknown>, _meta) => {\n const data = response as { enabled?: boolean };\n return data?.enabled ?? false;\n },\n }),\n launchKernel: builder.mutation<GatewayKernel, string>({\n query: (kernelName: string) => {\n return {\n url: `${GEN3_JEG_GATEWAY_API}/kernels`,\n method: 'POST',\n body: JSON.stringify({ name: kernelName }),\n };\n },\n invalidatesTags: ['ActiveKernels'],\n }),\n terminateKernel: builder.mutation<void, string>({\n query: (kernelId) => ({\n url: `${GEN3_JEG_GATEWAY_API}/kernels/${encodeURIComponent(kernelId)}`,\n method: 'DELETE',\n }),\n invalidatesTags: ['ActiveKernels'],\n }),\n reapKernels: builder.mutation<any, void>({\n query: () => {\n return {\n url: `/api/workspace/kernel/reap`,\n method: 'POST',\n };\n },\n invalidatesTags: ['ActiveKernels'],\n }),\n }),\n overrideExisting: true,\n});\n\nexport const {\n useActiveKernelsQuery,\n useLaunchKernelMutation,\n useTerminateKernelMutation,\n useJegGatewayStatusQuery,\n useReapKernelsMutation,\n} = jegGatewayApi;\n\n// select active kernels\nexport const selectActiveKernels =\n jegGatewayApi.endpoints.activeKernels.select();\n","import React from 'react';\nimport { formatUptimeInMinutes } from '@gen3/core';\nimport { Badge, Button, Divider, Stack, Text } from '@mantine/core';\nimport { KernelRow, KernelSpecEntry } from '../../core/types';\nimport { useTerminateKernelMutation } from '../../core/jegGatewayApi';\n\ninterface RunningKernelPanelProps extends KernelRow {\n onOpenNotebook?: (kernelId: string) => void;\n forceTerminate?: boolean;\n rowSpec?: KernelSpecEntry;\n connections?: number;\n}\n\nconst ActiveKernelInfoPanel = ({\n kernelId,\n kernelName,\n executionState,\n uptimeMinutes,\n forceTerminate = false,\n rowSpec,\n connections = 0,\n}: RunningKernelPanelProps) => {\n const [terminateKernel, { isLoading: isTerminatingLoading }] =\n useTerminateKernelMutation();\n\n const isStaleOrIdle = executionState === 'idle';\n return (\n <div\n key={kernelId}\n className=\"rounded-sm border-2 border-base-light bg-base-lighter p-2 transition hover:shadow-sm\"\n >\n <div className=\"flex min-w-0 items-start justify-between gap-2 m-2\">\n <div className=\"min-w-0\">\n <p className=\"truncate text-base font-bold text-base-darkest\">\n {kernelName || 'python3'}\n </p>\n <p className=\"mt-1 text-xs font-medium text-base-darker\">\n State:{' '}\n <span className=\"uppercase\">{executionState || 'unknown'}</span>\n </p>\n {/* TODO: See where this is set\n staleState === 'warning' && (\n <p className=\"mt-1 text-xs text-accentWarm-dark\">\n Idle warning: inactive for about{' '}\n {Math.floor(idleDays || 0)} day(s).\n </p>\n ) */}\n {/*\n TODO: See where this is set\n staleState === 'kill' && (\n <p className=\"mt-1 text-xs text-primary\">\n Stale kill policy applies; autosave + terminate pending.\n </p>\n )*/}\n </div>\n <Badge color={isStaleOrIdle ? 'utility.2' : 'utility.6'}>\n <Text size=\"xs\" tt=\"uppercase\" fw={600} c=\"base-contrast.4\" />\n {isStaleOrIdle ? 'Idle' : 'Active'}\n </Badge>\n </div>\n\n <Stack\n className=\" rounded-lg bg-accent-lightest bg-opacity-10 p-4 text-xs text-base-darkest m-2\"\n gap={4}\n >\n <div className=\"flex items-center justify-between\">\n <span className=\"font-semibold text-base-darker\">Last Activity:</span>\n <span className=\"font-bold text-base-darkest\">\n {formatUptimeInMinutes(uptimeMinutes)}\n </span>\n </div>\n <Divider color=\"primary.4\" />\n <div className=\"flex items-center justify-between\">\n <span className=\"font-semibold text-base-darker\">GPU:</span>\n <span className=\"font-bold text-accent-dark\">\n {rowSpec?.gpuType || 'none'}\n </span>\n </div>\n <Divider color=\"primary.4\" />\n <div className=\"flex items-center justify-between\">\n <span className=\"font-semibold text-base-darker\">Connections:</span>\n <span className=\"font-bold text-accent-dark\">\n {connections.toLocaleString()}\n </span>\n </div>\n {(rowSpec?.cpu || rowSpec?.memory) && (\n <div className=\"flex gap-3 border-t border-base-lighter pt-2\">\n {rowSpec?.cpu && (\n <span className=\"text-base-darker\">\n CPU:{' '}\n <strong className=\"text-base-darkest\">{rowSpec.cpu}</strong>\n </span>\n )}\n {rowSpec?.memory && (\n <span className=\"text-base-darker\">\n RAM:{' '}\n <strong className=\"text-base-darkest\">{rowSpec.memory}</strong>\n </span>\n )}\n </div>\n )}\n </Stack>\n\n <div className=\"mt-5 flex gap-3 m-2\">\n {/* TODO: Implement when functionality is available\n <Button\n aria-label={`Open notebook for ${kernelName || 'python3'} kernel`}\n onClick={() => onOpenNotebook?.(kernelId)}\n disabled={!onOpenNotebook}\n color=\"accent\"\n variant=\"light\"\n className=\"flex-1 border-accent-light/60\"\n >\n Open Notebook\n </Button>\n ----------- */}\n <Button\n aria-label={`${forceTerminate ? 'Force terminate' : 'Terminate'} ${kernelName || 'python3'} kernel`}\n onClick={() => terminateKernel(kernelId)}\n loading={isTerminatingLoading}\n variant=\"outline\"\n color=\"primary.4\"\n fullWidth\n >\n {forceTerminate ? 'Force Terminate' : 'Terminate'}\n </Button>\n </div>\n </div>\n );\n};\n\nexport default ActiveKernelInfoPanel;\n","export const TextStyle =\n 'text-md font-bold uppercase tracking-wider text-base-darker';\n\nexport const PanelStyle =\n 'min-w-0 rounded-sm border-2 border-base-lighter bg-base-max p-2 transition hover:shadow-sm';\n","import React, { useEffect } from 'react';\nimport { useKernalSpecsQuery } from '../../core/kernelApi';\nimport { LoadingOverlay, Stack, Text } from '@mantine/core';\nimport ActiveKernelInfoPanel from './ActiveKernelInfoPanel';\nimport { useActiveKernelsQuery } from '../../core/jegGatewayApi';\nimport {\n CoreState,\n normalizeRtkError,\n removeManyJEGActiveKernels,\n selectJEGKernelIds,\n upsertManyJEGActiveKernels,\n useCoreDispatch,\n useCoreSelector,\n} from '@gen3/core';\nimport { PanelStyle, TextStyle } from './styling';\n\nexport const ActiveKernelsPanel = () => {\n const {\n data: kernels,\n isLoading,\n isError,\n error,\n } = useActiveKernelsQuery(undefined, {\n pollingInterval: 10000,\n refetchOnMountOrArgChange: 1800,\n refetchOnFocus: true,\n selectFromResult: ({ data, isLoading, isError, error }) => ({\n data,\n isLoading,\n isError,\n error,\n }),\n });\n\n const persistedActiveKernels = useCoreSelector((state: CoreState) =>\n selectJEGKernelIds(state),\n );\n const coreDispatch = useCoreDispatch();\n\n useEffect(() => {\n if (!kernels) return;\n\n const liveIds = new Set(kernels.map((k) => k.id));\n\n const staleIds = (persistedActiveKernels as string[]).filter(\n (id) => !liveIds.has(id),\n );\n if (staleIds.length > 0) {\n coreDispatch(removeManyJEGActiveKernels(staleIds));\n }\n\n coreDispatch(\n upsertManyJEGActiveKernels(\n kernels.map((k) => ({\n id: k.id,\n name: k.name,\n connections: k.connections,\n executionState: k.execution_state.toLowerCase(),\n lastActivity: k.last_activity,\n })),\n ),\n );\n }, [coreDispatch, kernels, persistedActiveKernels]);\n\n const {\n data: kernelSpecs,\n isFetching: isFetchingKernelSpecs,\n isError: isErrorKernelSpecs,\n error: errorKernelSpecs,\n } = useKernalSpecsQuery();\n\n if (isError) {\n const normalizedError = normalizeRtkError(error);\n const status = normalizedError?.status;\n const isAuthError = status === 401 || status === 403;\n return (\n <div className=\"mt-4 flex justify-center items-center text-sm bg-accent-lighter text-accent-contrast-lighter p-2\">\n <LoadingOverlay visible={isLoading} />\n <Text size=\"sm\">\n {isAuthError\n ? 'You must be logged in to view active kernels.'\n : 'Failed to load active kernels.'}\n </Text>\n </div>\n );\n }\n\n if (isErrorKernelSpecs) {\n const normalizedError = normalizeRtkError(errorKernelSpecs);\n const status = normalizedError?.status;\n const isAuthError = status === 401 || status === 403;\n return (\n <div className=\"mt-4 flex justify-center items-center text-sm bg-accent-lighter text-accent-contrast-lighter p-2\">\n <LoadingOverlay visible={isFetchingKernelSpecs} />\n <Text size=\"sm\">\n {isAuthError\n ? 'You must be logged in to view kernel specs.'\n : 'Failed to load kernel specs.'}\n </Text>\n </div>\n );\n }\n\n return (\n <Stack\n gap={2}\n classNames={{\n root: PanelStyle,\n }}\n >\n <LoadingOverlay visible={isLoading} />\n <Text className={TextStyle}>Active Kernels</Text>\n {kernels && kernels?.length > 0 ? (\n kernels.map((kernel) => {\n // convert last_activity from iso timestamp to minutes\n const kernelUptime =\n new Date().getTime() - new Date(kernel.last_activity).getTime();\n\n return (\n <ActiveKernelInfoPanel\n kernelId={kernel.id}\n kernelName={kernel.name}\n executionState={kernel.execution_state.toLowerCase()}\n uptimeMinutes={Math.floor(kernelUptime / 60000)}\n connections={kernel.connections}\n rowSpec={kernelSpecs?.find((spec) => spec.name === kernel.name)}\n key={kernel.id}\n />\n );\n })\n ) : (\n <div className=\"mt-4 flex justify-center items-center text-sm bg-accent-lighter text-accent-contrast-lighter p-2\">\n <Text size=\"sm\">No active kernels.</Text>\n </div>\n )}\n </Stack>\n );\n};\n\nexport default ActiveKernelsPanel;\n","import React from 'react';\nimport { Badge, Loader } from '@mantine/core';\nimport type { GatewayConnectionState } from '../../hooks/useGatewayConnection';\n\nexport interface ConnectionStatusBadgeProps {\n state: GatewayConnectionState;\n /** Called when user clicks the \"Retry\" link in error state. */\n onRetry?: () => void;\n}\n\n/**\n * Small inline indicator rendered inside KernelLifecyclePanel header.\n * In 'reconnecting' state the lifecycle panel and iframe remain visible —\n * this badge is the ONLY signal to the user, preserving their workflow.\n */\nconst ConnectionStatusBadge = ({ state }: ConnectionStatusBadgeProps) => {\n if (state === 'idle') return null;\n\n if (state === 'connected') {\n return (\n <Badge\n variant=\"light\"\n leftSection={\n <span\n className=\"h-1.5 w-1.5 rounded-full bg-accent-dark\"\n aria-hidden=\"true\"\n />\n }\n color=\"accent\"\n className=\"normal-case\"\n role=\"status\"\n >\n Connected\n </Badge>\n );\n }\n\n if (state === 'launching') {\n return (\n <Badge\n variant=\"light\"\n leftSection={<Loader size=\"0.75rem\" />}\n className=\"normal-case\"\n role=\"status\"\n aria-live=\"polite\"\n >\n Starting kernel…\n </Badge>\n );\n }\n\n if (state === 'attaching') {\n return (\n <Badge\n variant=\"light\"\n leftSection={<Loader size=\"0.75rem\" />}\n className=\"normal-case\"\n role=\"status\"\n aria-live=\"polite\"\n >\n Connecting…\n </Badge>\n );\n }\n\n if (state === 'reconnecting') {\n return (\n <Badge\n variant=\"light\"\n leftSection={<Loader size=\"0.75rem\" />}\n className=\"normal-case\"\n role=\"status\"\n aria-live=\"polite\"\n >\n Reconnecting…\n </Badge>\n );\n }\n\n if (state === 'error') {\n return (\n <Badge\n variant=\"light\"\n leftSection={<span aria-hidden=\"true\">✕</span>}\n className=\"normal-case\"\n role=\"alert\"\n >\n Error\n </Badge>\n );\n }\n\n return null;\n};\n\nexport default ConnectionStatusBadge;\n","import React from 'react';\nimport { Stack, Text } from '@mantine/core';\nimport ConnectionStatusBadge from './ConnectionStatusBadge';\nimport type { GatewayConnectionState } from '../../hooks/useGatewayConnection';\nimport { PanelStyle, TextStyle } from './styling';\nimport { useReapKernelsMutation } from '../../core/jegGatewayApi';\n\ninterface GatewayConnectionPanelProps {\n gatewayStatus: string;\n onRetryConnection?: () => void;\n onRunStaleReap?: () => void;\n}\n\nexport const GatewayConnectionPanel = ({\n gatewayStatus,\n onRetryConnection = () => null,\n // oxlint-disable-next-line no-unused-vars\n onRunStaleReap = () => null,\n}: GatewayConnectionPanelProps) => {\n // TODO Add support for stale kernel reap\n // oxlint-disable-next-line no-unused-vars\n const [reapKernels, { isLoading, isError }] = useReapKernelsMutation();\n return (\n <Stack className={PanelStyle} justify=\"space-between\">\n <Text className={TextStyle}>Gateway</Text>\n <div className=\"flex items-center gap-2\">\n {gatewayStatus && (\n <ConnectionStatusBadge\n state={gatewayStatus as GatewayConnectionState}\n onRetry={onRetryConnection}\n />\n )}\n {/* TODO: Implement or place somewhere else\n <Button\n onClick={() => reapKernels()}\n disabled={!onRunStaleReap}\n variant=\"default\"\n loading={isLoading}\n >\n Reap Stale Kernels\n </Button>\n */}\n </div>\n </Stack>\n );\n};\n\nexport default GatewayConnectionPanel;\n","import React, { useEffect, useState } from 'react';\nimport { Button, Group, LoadingOverlay, Select, Text } from '@mantine/core';\nimport { InfoRolloverButton } from '@gen3/frontend';\nimport { useKernalSpecsQuery } from '../../core/kernelApi';\nimport { KernelSelection } from './types';\nimport { PanelStyle, TextStyle } from './styling';\n\ninterface KernelSelectorProps {\n handleLaunchKernel: (kernelName: string) => void;\n isLaunchingLoading: boolean;\n onKernelSelectionChange?: (selection: KernelSelection) => void;\n disabled?: boolean;\n}\n\nconst KernelSelector = ({\n handleLaunchKernel,\n isLaunchingLoading,\n onKernelSelectionChange,\n disabled = false,\n}: KernelSelectorProps) => {\n const { data: kernelSpecs, isLoading, isError } = useKernalSpecsQuery();\n\n const [selectedKernelName, setSelectedKernelName] = useState<string>(\n kernelSpecs?.[0]?.name || 'python3',\n );\n\n // When specs arrive after first render (async load), reset selectedKernelName\n // if the current value is no longer a valid spec name.\n useEffect(() => {\n if (kernelSpecs && kernelSpecs?.length > 0) {\n setSelectedKernelName((prev) => {\n if (!kernelSpecs?.find((s) => s.name === prev)) {\n return kernelSpecs?.[0]?.name || 'python3';\n }\n return prev;\n });\n }\n }, [kernelSpecs]);\n\n // set the global kernel selection\n useEffect(() => {\n onKernelSelectionChange?.({\n kernelName: selectedKernelName || undefined,\n });\n }, [selectedKernelName, onKernelSelectionChange]);\n\n const selectedSpec = kernelSpecs?.find((s) => s.name === selectedKernelName);\n const selectedSpecCost = selectedSpec?.costPerHour ?? 0;\n const resourceTags = selectedSpec\n ? ((\n [\n selectedSpec.cpu && {\n label: 'CPU',\n value: selectedSpec.cpu,\n gpu: false,\n },\n selectedSpec.memory && {\n label: 'RAM',\n value: selectedSpec.memory,\n gpu: false,\n },\n selectedSpec.gpuType && {\n label: 'GPU',\n value: selectedSpec.gpuType,\n gpu: true,\n },\n ] as const\n ).filter(Boolean) as { label: string; value: string; gpu: boolean }[])\n : [];\n\n return (\n <div className={PanelStyle}>\n <Group gap={4}>\n <Text className={TextStyle}>Launch Kernel</Text>\n <InfoRolloverButton\n label=\"Launch and manage compute kernels.\"\n size=\"sm\"\n />\n </Group>\n <div className=\"mt-4 space-y-4\">\n <LoadingOverlay visible={isLoading} />\n <div>\n {/*<label htmlFor=\"klp-kernel-spec\" className=\"mb-1.5 block text-xs font-bold uppercase tracking-wide text-base-dark\">Kernel Spec</label>*/}\n <Select\n id=\"klp-kernel-spec\"\n value={selectedKernelName}\n onChange={(value) => setSelectedKernelName(value as string)}\n disabled={disabled || isError}\n data={\n kernelSpecs?.length === 0\n ? [{ value: 'python3', label: 'python3' }]\n : kernelSpecs?.map((spec) => {\n const parts: string[] = [];\n if (spec.cpu) parts.push(`${spec.cpu} CPU`);\n if (spec.memory) parts.push(spec.memory);\n if (spec.gpuType) parts.push(spec.gpuType);\n const resources =\n parts.length > 0 ? ` · ${parts.join(' · ')}` : '';\n const cost =\n spec.costPerHour != null && spec.costPerHour > 0\n ? ` — $${spec.costPerHour.toFixed(2)}/hr`\n : spec.nodeType === 'micro'\n ? ' — included'\n : '';\n return {\n value: spec.name,\n label: `${spec.displayName}${resources}${cost}`,\n };\n })\n }\n label=\"Kernels\"\n />\n {selectedSpecCost > 0 && (\n <p className=\"mt-1 text-xs text-accentWarm-dark\">\n GPU kernels auto-terminate after 4h idle. Max 1 GPU kernel per\n user.\n </p>\n )}\n </div>\n\n {/* Resource summary for the selected spec */}\n {resourceTags.length > 0 && (\n <div className=\"flex flex-wrap gap-2 text-xs\">\n {resourceTags.map(({ label, value, gpu }) => (\n <span\n key={label}\n className={`rounded-full px-2.5 py-1 font-semibold ${\n gpu\n ? 'bg-accent-max text-accent-dark'\n : 'bg-base-lightest text-base-darkest'\n }`}\n >\n {label}: {value}\n </span>\n ))}\n </div>\n )}\n\n <Button\n onClick={() => handleLaunchKernel(selectedKernelName || 'python3')}\n loading={isLaunchingLoading}\n fullWidth\n disabled={disabled || isError}\n >\n {isLaunchingLoading ? 'Working...' : 'Launch Kernel'}\n </Button>\n </div>\n </div>\n );\n};\n\nexport default KernelSelector;\n","import React, { useCallback, useMemo } from 'react';\nimport { useJegGatewayStatusQuery } from '../core/jegGatewayApi';\n\nexport type GatewayConnectionStatus =\n | 'connected'\n | 'disconnected'\n | 'fetching'\n | 'service_unavailable';\n\nexport function useGatewayConnectionStatus() {\n const [gatewayStatus, setGatewayStatus] =\n React.useState<string>('disconnected');\n const [gatewayMessage, setGatewayMessage] = React.useState<string | null>(\n null,\n );\n\n const setGatewayStatusAndMessage = useCallback(\n (state: string, message?: string) => {\n setGatewayStatus(state);\n setGatewayMessage(message ?? null);\n },\n [],\n );\n\n // get the status of the gateway\n const {\n data: gatewayStatusData,\n isFetching: isGatewayFetching,\n isError,\n } = useJegGatewayStatusQuery(undefined, {\n pollingInterval: 10000,\n refetchOnMountOrArgChange: 1800,\n refetchOnFocus: true,\n });\n\n const gatewayServiceStatus = useMemo(() => {\n if (isGatewayFetching) return 'fetching';\n if (!isError) return 'service_unavailable';\n if (!gatewayStatus) return 'service_unavailable';\n if (gatewayStatusData) return 'connected';\n return 'disconnected';\n }, [gatewayStatus, gatewayStatusData, isError, isGatewayFetching]);\n\n return useMemo(\n () => ({\n gatewayServiceStatus,\n gatewayStatus,\n gatewayMessage,\n setGatewayStatusAndMessage,\n }),\n [\n gatewayServiceStatus,\n gatewayStatus,\n gatewayMessage,\n setGatewayStatusAndMessage,\n ],\n );\n}\n","import React, { useEffect } from 'react';\nimport { Group, Text } from '@mantine/core';\nimport type { GatewayConnectionState } from '../../hooks/useGatewayConnection';\nimport { InfoRolloverButton } from '@gen3/frontend';\nimport ActiveKernelsPanel from './ActiveKernelsPanel';\nimport { useLaunchKernelMutation } from '../../core/jegGatewayApi';\nimport GatewayConnectionPanel from './GatewayConnectionPanel';\nimport KernelSelector from './KernelSelector';\nimport { KernelSelection } from './types';\nimport { useKernalSpecsQuery } from '../../core/kernelApi';\nimport { useGatewayConnectionStatus } from '../../providers/useGatewayConnectionStatus';\nimport {\n addJEGActiveKernel,\n selectAllJEGKernels,\n useCoreDispatch,\n useCoreSelector,\n} from '@gen3/core';\nimport { useDeepCompareEffect } from 'use-deep-compare';\nimport { TextStyle } from './styling';\n\ninterface LaunchKernelInput {\n kernelName: string;\n}\n\nexport interface KernelLifecyclePanelProps {\n notice?: string | null;\n launching?: boolean;\n /** Current gateway connection state — drives status badge and reconnect strip. */\n connectionState?: GatewayConnectionState;\n /** The currently active kernel (for billing banner). */\n activeKernelName?: string | null;\n /** How long the micro-container has been online, in minutes. Shown per-kernel as \"Container Uptime\". */\n containerUptimeMinutes?: number | null;\n /** Called when user clicks Retry in the error badge. */\n onRetryConnection?: () => void;\n onRunStaleReap?: () => void;\n onLaunchKernel?: (input: LaunchKernelInput) => void;\n onOpenNotebook?: (kernelId: string) => void;\n onTerminateKernel?: (kernelId: string) => void;\n onKernelSelectionChange?: (selection: KernelSelection) => void;\n idleKillDays?: number;\n maxKernelAgeDays?: number;\n /**\n * When true, the terminate button on each kernel row is labelled \"Force Terminate\"\n * and is always visible regardless of kernel execution state.\n * Use this in JEG mode where GPU kernels can get stuck and must be force-evicted.\n */\n forceTerminate?: boolean;\n}\n\nconst MAX_KERNELS_ACTIVE = 2;\n\nconst KernelLifecyclePanel = ({\n activeKernelName,\n onRetryConnection,\n onRunStaleReap,\n}: KernelLifecyclePanelProps) => {\n const notice = undefined;\n\n const coreDispatch = useCoreDispatch();\n\n const numActiveKernels = useCoreSelector(selectAllJEGKernels)?.length || 0;\n\n const { gatewayServiceStatus, gatewayStatus, setGatewayStatusAndMessage } =\n useGatewayConnectionStatus();\n\n useEffect(() => {\n setGatewayStatusAndMessage('reconnecting');\n // check store to see if last known kernels are still running\n }, []);\n\n useDeepCompareEffect(() => {\n if (gatewayServiceStatus) {\n setGatewayStatusAndMessage('connected');\n }\n }, [gatewayServiceStatus]);\n\n const { data: kernelSpecs } = useKernalSpecsQuery();\n\n // get the function to launch kernels\n const [launchKernel, { isLoading: isLaunchingLoading }] =\n useLaunchKernelMutation();\n\n const handleLaunchKernel = async (kernelName: string) => {\n try {\n setGatewayStatusAndMessage('launching');\n // .unwrap() forces the promise to reject on HTTP failure\n const results = await launchKernel(kernelName).unwrap();\n // add to active kernels\n setGatewayStatusAndMessage('connected');\n\n // add to active kernels so these will persist between page reloads\n coreDispatch(\n addJEGActiveKernel({\n id: results.id,\n name: results.name,\n connections: results.connections,\n lastActivity: results.last_activity,\n executionState: results.execution_state,\n }),\n );\n } catch (error) {\n console.error('Launch kernel failed!', error);\n // The user can now manually hit \"Submit\" again to retry safely\n setGatewayStatusAndMessage('error', 'Launch kernel failed!');\n }\n };\n\n // Billing banner: show when any active kernel has a cost > 0\n const activeKernelSpec = activeKernelName\n ? kernelSpecs?.find((s) => s.name === activeKernelName)\n : null;\n const billingActive = (activeKernelSpec?.costPerHour ?? 0) > 0;\n\n return (\n <div className=\"flex flex-col overflow-hidden gap-y-4 p-2\">\n <Group gap={4}>\n <Text className={TextStyle}>Kernel Lifecycle</Text>\n <InfoRolloverButton\n label=\"Launch and manage compute kernels.\"\n size=\"sm\"\n />\n </Group>\n <GatewayConnectionPanel\n gatewayStatus={gatewayStatus}\n onRetryConnection={onRetryConnection}\n onRunStaleReap={onRunStaleReap}\n />\n\n {/* Reconnect strip — non-disruptive yellow banner; lifecycle panel stays usable */}\n {gatewayStatus === 'reconnecting' && (\n <div\n role=\"status\"\n aria-live=\"polite\"\n className=\"flex items-center gap-2 rounded-md border border-accentWarm-light bg-accentWarm-max px-3 py-2 text-xs text-accentWarm-dark\"\n >\n <span aria-hidden=\"true\">⟳</span>\n Connection to kernel interrupted — reconnecting automatically. Your\n work is safe.\n </div>\n )}\n\n {/* Billing banner — persistent warning when a paid kernel is active */}\n {billingActive && activeKernelSpec && (\n <div\n role=\"status\"\n aria-live=\"polite\"\n className=\"mt-3 flex items-center justify-between gap-2 rounded-md border border-accentWarm bg-accentWarm-max px-3 py-2 text-xs font-semibold text-accentWarm-darkest\"\n >\n <span>\n GPU kernel running — billing active ($\n {activeKernelSpec.costPerHour?.toFixed(2)}/hr). Terminate to stop\n charges.\n </span>\n </div>\n )}\n\n {notice && (\n <p\n role=\"status\"\n className=\"mt-4 rounded-md border border-base-lighter bg-base-lightest bg-opacity-50 px-3 py-2 text-sm text-base-darker\"\n >\n {notice}\n </p>\n )}\n\n <KernelSelector\n handleLaunchKernel={handleLaunchKernel}\n isLaunchingLoading={isLaunchingLoading}\n disabled={numActiveKernels >= MAX_KERNELS_ACTIVE}\n />\n <ActiveKernelsPanel />\n </div>\n );\n};\n\nexport type { LaunchKernelInput };\nexport default KernelLifecyclePanel;\n","export const PanelStyle =\n 'w-full h-full bg-base-lightest border-base-lighter border-2 border-t-0';\nexport const PanelHeaderStyle =\n 'flex items-center justify-between px-4 py-2 border-b-2 border-base-lighter bg-base-max';\nexport const PanelHeaderTextStyle =\n 'uppercase text-lg font-semibold text-base-contrast-max';\nexport const PanelBodyStyle = 'flex-1 overflow-auto p-2';\n","import React from 'react';\nimport { Button, Group, Stack, Text } from '@mantine/core';\nimport { Icon } from '@iconify-icon/react';\nimport { WorkspaceTier } from '../types';\n\nexport interface UpgradeActionsPanelProps {\n currentTier: WorkspaceTier;\n onUpgradeToRemote?: () => void;\n onRequestQuotaIncrease?: () => void;\n onOpenBillingSupport?: () => void;\n}\n\nconst UpgradeActionsPanel = ({\n currentTier,\n onUpgradeToRemote,\n onRequestQuotaIncrease,\n onOpenBillingSupport,\n}: UpgradeActionsPanelProps) => {\n const canUpgrade = currentTier === 'free' || Boolean(onUpgradeToRemote);\n\n return (\n <section className=\"mt-6 overflow-hidden rounded-xl border-2 border-base bg-base-max shadow-sm\">\n <div className=\"px-4 py-3\">\n <Group justify=\"space-between\" wrap=\"nowrap\">\n <Text size=\"lg\" fw={600} c=\"base-darker\" tt=\"uppercase\">\n Capacity & Upgrade\n </Text>\n <Icon icon=\"gen3:bolt\" width={16} height={16} />\n </Group>\n </div>\n\n <div className=\"space-y-2 p-4 pt-0\">\n <Stack>\n <p className=\"my-1 text-sm text-base-contrast-max\">\n {currentTier === 'free'\n ? 'Upgrade to remote kernels for long-running jobs and larger memory footprints.'\n : 'Remote compute is active. You can request expanded quota for larger workloads.'}\n </p>\n </Stack>\n\n {currentTier === 'free' && (\n <Button\n onClick={onUpgradeToRemote}\n disabled={!canUpgrade}\n className=\"w-full border-primary-light\"\n variant=\"filled\"\n leftSection={\n <Icon icon=\"gen3:up-trend-arrow\" width={16} height={16} />\n }\n >\n Upgrade To Remote Tier\n </Button>\n )}\n {currentTier !== 'free' && (\n <>\n <Button\n onClick={onRequestQuotaIncrease}\n disabled={!onRequestQuotaIncrease}\n className=\"w-full\"\n variant=\"default\"\n >\n Request Quota Increase\n </Button>\n <Button\n onClick={onOpenBillingSupport}\n disabled={!onOpenBillingSupport}\n className=\"w-full\"\n variant=\"default\"\n >\n Contact Workspace Support\n </Button>{' '}\n </>\n )}\n </div>\n </section>\n );\n};\n\nexport default UpgradeActionsPanel;\n","import type { ReactNode } from 'react';\nimport React from 'react';\nimport { ActionIcon, Text, Tooltip } from '@mantine/core';\nimport { Icon } from '@iconify-icon/react';\nimport {\n PanelHeaderTextStyle,\n PanelStyle,\n} from '../workspace/WorkspaceLayout/styling';\nimport {\n mergeDefaultTailwindClassnames,\n StylingOverrideWithMergeControl,\n} from '@gen3/frontend';\n\nconst TRANSITION_MS = 250;\nconst ICON_SIZE = 24;\n\nconst STYLING_DEFAULTS = {\n root: PanelStyle,\n header: PanelHeaderTextStyle,\n label: PanelHeaderTextStyle,\n};\n\ntype HorizontalAccordionProps = {\n label: ReactNode;\n expanded: boolean;\n setExpanded: (expanded: boolean) => void;\n children: ReactNode;\n rightSide?: boolean;\n expandedWidth?: number | string;\n collapsedWidth?: number | string;\n classNames?: StylingOverrideWithMergeControl;\n};\n\nexport function HorizontalAccordion({\n label,\n expanded,\n setExpanded,\n children,\n expandedWidth = 300,\n collapsedWidth = 36,\n rightSide = false,\n classNames = {},\n}: HorizontalAccordionProps) {\n const closeIcon = rightSide ? (\n <Icon icon=\"gen3:sidebar-close\" width={ICON_SIZE} height={ICON_SIZE} />\n ) : (\n <Icon icon=\"gen3:sidebar-open\" width={ICON_SIZE} height={ICON_SIZE} />\n );\n\n const openIcon = rightSide ? (\n <Icon icon=\"gen3:sidebar-open\" width={ICON_SIZE} height={ICON_SIZE} />\n ) : (\n <Icon icon=\"gen3:sidebar-close\" width={ICON_SIZE} height={ICON_SIZE} />\n );\n\n const mergedClassNames = mergeDefaultTailwindClassnames(\n STYLING_DEFAULTS,\n classNames,\n );\n\n return (\n <div\n className={`${mergedClassNames.root}`}\n style={{\n width: expanded ? expandedWidth : collapsedWidth,\n transition: `width ${TRANSITION_MS}ms ease`,\n }}\n >\n <div className=\"flex flex-col no-wrap h-full overflow-hidden\">\n <div className=\"flex items-center justify-between px-1 py-1 bg-base-max\">\n <Text\n fw={600}\n size=\"sm\"\n className={`overflow-hidden text-nowrap ${mergedClassNames.label}`}\n style={{\n opacity: expanded ? 1 : 0,\n transition: `opacity transform ${TRANSITION_MS}ms ease`,\n transform: expanded ? 'translateX(0.625rem)' : 'translateX(0)',\n }}\n >\n {label}\n </Text>\n\n <Tooltip label={expanded ? `Collapse ${label}` : `Expand ${label}`}>\n <ActionIcon\n variant=\"subtle\"\n aria-label={expanded ? 'Collapse panel' : 'Expand panel'}\n onClick={() => setExpanded(!expanded)}\n radius=\"xs\"\n >\n {expanded ? openIcon : closeIcon}\n </ActionIcon>\n </Tooltip>\n </div>\n\n <div\n className=\"overflow-hidden px-2\"\n style={{\n opacity: expanded ? 1 : 0,\n pointerEvents: expanded ? 'auto' : 'none',\n transition: `opacity ${TRANSITION_MS}ms ease`,\n width: expandedWidth,\n }}\n >\n {children}\n </div>\n </div>\n </div>\n );\n}\n\nexport default HorizontalAccordion;\n","import React, { useCallback } from 'react';\nimport { SettingsPanelConfiguration } from '../tiers/types';\nimport KernelLifecyclePanel from '../../components/KernelLifecyclePanel/KernelLifecyclePanel';\nimport { PanelStyle } from './styling';\nimport UpgradeActionsPanel from '../../components/UpgradeActionsPanel';\nimport {\n selectWorkspaceTier,\n setWorkspaceTier,\n useCoreDispatch,\n useCoreSelector,\n} from '@gen3/core';\nimport { WorkspaceTier } from '../../types';\nimport HorizontalAccordion from '../../components/HorizontalAccordian';\n\ninterface SettingsPanelProps extends SettingsPanelConfiguration {\n expanded: boolean;\n setExpanded: (_arg: boolean) => void;\n}\n\nexport const SettingsPanel = ({\n showKernels,\n expanded,\n setExpanded,\n width = 380,\n}: SettingsPanelProps) => {\n const currentTier = useCoreSelector(selectWorkspaceTier);\n const coreDispatch = useCoreDispatch();\n\n const onUpgradeToRemote = useCallback(() => {\n coreDispatch(setWorkspaceTier('remote' as WorkspaceTier));\n }, [coreDispatch]);\n\n return (\n <HorizontalAccordion\n label=\"Settings\"\n expanded={expanded}\n setExpanded={setExpanded}\n rightSide\n expandedWidth={width}\n >\n <div className={`${PanelStyle} overflow-y-scroll`}>\n {showKernels && <KernelLifecyclePanel />}\n <UpgradeActionsPanel\n currentTier={\n currentTier !== null ? (currentTier as WorkspaceTier) : 'free'\n }\n onUpgradeToRemote={onUpgradeToRemote}\n />\n </div>\n </HorizontalAccordion>\n );\n};\n\nexport default SettingsPanel;\n","import React, { ReactElement, useState } from 'react';\nimport {\n Accordion,\n Group,\n Loader,\n SelectProps,\n Text,\n Popover,\n Button,\n Progress,\n Divider,\n Radio,\n Badge,\n} from '@mantine/core';\nimport {\n type PayModel,\n useGetWorkspacePayModelsQuery,\n useSetCurrentPayModelMutation,\n} from '@gen3/core';\nimport { useDeepCompareCallback, useDeepCompareMemo } from 'use-deep-compare';\nimport {\n FaExclamationCircle as InactiveIcon,\n FaUser as ActiveIcon,\n} from 'react-icons/fa';\nimport { MdExpandMore, MdOpenInNew } from 'react-icons/md';\nimport { FetchBaseQueryError } from '@reduxjs/toolkit/query/react';\nimport { SerializedError } from '@reduxjs/toolkit';\n\n// TODO rework once requirements are made\n\ninterface PayModelMenuItem {\n value: string;\n label: string;\n icon: ReactElement;\n totalUsage: number;\n currentPayModel: boolean; // temp\n}\n\nconst PaymentNumberToString = (\n x: number | undefined,\n undefinedValue = 'N/A',\n precision = 2,\n): string => {\n if (typeof x !== 'number' || Number.isNaN(x)) return undefinedValue;\n\n return x.toFixed(precision);\n};\n\n\nconst isNoPayModelError = (error: FetchBaseQueryError | SerializedError) => {\n return (\n 'status' in error &&\n error.status === 'PARSING_ERROR' &&\n error.originalStatus === 404\n );\n};\n\nconst CostTracker = ({workspaceAccountManagerTarget = ''}) => {\n const { data, isLoading, isFetching, isError, error } =\n useGetWorkspacePayModelsQuery(\n undefined,\n {\n pollingInterval: 120000, // 2 min\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [setWorkspacePayModel] = useSetCurrentPayModelMutation();\n\n const [selectedPayModel, setSelectedPayModel] = useState<string | null>(null);\n\n const [opened, setOpened] = useState<boolean>(false);\n\n const setPayModel = useDeepCompareCallback(\n (id: string) => {\n void setWorkspacePayModel(id); // triggers the call to the service to select the pay model\n setSelectedPayModel(id); // set the paymodel value for the select component\n },\n [setWorkspacePayModel, selectedPayModel],\n );\n\n const { usersPayModels, workspaceName, hardLimit, totalUsage } =\n useDeepCompareMemo(() => {\n if (!data)\n return {\n usersPayModels: [],\n selectedPayModel: [],\n workspaceName: 'Not Set',\n totalUsage: undefined,\n hardLimit: undefined,\n };\n const usersPayModels = data.allPayModels.map(\n (payModel: PayModel): PayModelMenuItem => {\n return {\n value: payModel.bmh_workspace_id ?? payModel.workspace_type,\n label: payModel.workspace_type,\n totalUsage: payModel['total-usage'],\n currentPayModel: payModel['current_pay_model'],//TODO temp rework with existing code\n icon:\n payModel.request_status === 'active' ? (\n <ActiveIcon />\n ) : (\n <InactiveIcon />\n ),\n };\n },\n );\n\n setSelectedPayModel(\n data.currentPayModel.bmh_workspace_id ??\n data.currentPayModel.workspace_type,\n );\n return {\n usersPayModels,\n workspaceName:\n data.currentPayModel.bmh_workspace_id.length > 0\n ? data.currentPayModel.bmh_workspace_id\n : data.currentPayModel.workspace_type,\n totalUsage: data.currentPayModel['total-usage'],\n hardLimit: data.currentPayModel['hard-limit'],\n };\n }, [data]);\n\n const PayModelSelectItem: SelectProps['renderOption'] = ({ option }) => {\n const menuItem = usersPayModels[Number(option.value)];\n if (!menuItem) return null;\n return (\n <div>\n <Group wrap=\"nowrap\">\n <Text size=\"sm\">{menuItem.label}</Text>\n <Text size=\"sm\">{menuItem.totalUsage}</Text>\n {menuItem.icon}\n </Group>\n </div>\n );\n };\n\n if (isLoading && isFetching)\n return (\n <Badge \n leftSection={<Loader size=\"xs\" type=\"dots\" className='m-1'/>} \n variant=\"default\"\n >\n Loading...\n </Badge>\n );\n \n const PayModelError = (message: string) => {\n // dropdown error state to provide user access to Account Manager if available\n if (workspaceAccountManagerTarget) {\n return (<Popover\n width=\"target\"\n position=\"bottom\"\n shadow=\"lg\"\n trapFocus\n opened={opened} onChange={setOpened}\n >\n <Popover.Target>\n <Button\n onClick={() => setOpened((o) => !o)}\n size=\"xs\" \n radius=\"xl\"\n className='h-[--badge-height] uppercase'\n color='utility.3'\n rightSection={\n <MdExpandMore\n size=\"1.5em\"\n aria-label={opened ? 'close': 'open'}\n style={{\n transform: opened ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 200ms ease',\n }}\n />}\n >\n <span className='font-black'>{message}</span>\n </Button>\n </Popover.Target>\n <Popover.Dropdown className='px-2'>\n <Button\n component=\"a\"\n href={workspaceAccountManagerTarget}\n target=\"_blank\"\n variant=\"outline\"\n leftSection={\n <MdOpenInNew\n size=\"1.1em\"\n aria-label='external'\n />}\n size=\"xs\"\n className='w-full'\n >\n Workspace Account Manager\n </Button>\n </Popover.Dropdown>\n </Popover>);\n }\n return (\n <Badge color='utility.3'>\n {message}\n </Badge>\n );\n };\n if (isError) {\n if (isNoPayModelError(error)) {\n return PayModelError('No pay model defined');\n } else {\n return PayModelError('Unable to get Payment information');\n }\n }\n\n const ProgressBar = (className = '') => (\n <Progress\n size=\"sm\"\n radius=\"xl\"\n aria-label='Monthly Workflow Limit'\n value={!hardLimit ? 100 : (hardLimit / totalUsage) * 100}\n color={!hardLimit || totalUsage >= hardLimit ? 'red.5' : 'green.1'}\n className={className}\n />\n );\n\n return (\n <Popover\n width=\"target\"\n position=\"bottom\"\n shadow=\"lg\"\n trapFocus\n opened={opened} onChange={setOpened}\n >\n <Popover.Target>\n <Button\n onClick={() => setOpened((o) => !o)}\n size=\"xs\" \n radius=\"xl\"\n variant=\"default\"\n className='h-[--badge-height]'\n rightSection={\n <MdExpandMore\n className=\"text-accent\"\n size=\"1.5em\"\n aria-label={opened ? 'close': 'open'}\n style={{\n transform: opened ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 200ms ease',\n }}\n />}\n >\n {ProgressBar('w-[110px]')}\n <span className='font-black pl-3 pr-2'>${PaymentNumberToString(totalUsage)}</span>\n <span className='font-normal'>/${PaymentNumberToString(hardLimit)}</span>\n </Button>\n </Popover.Target>\n <Popover.Dropdown className='px-2'>\n {workspaceAccountManagerTarget && <Button\n component=\"a\"\n href={workspaceAccountManagerTarget}\n target=\"_blank\"\n variant=\"outline\"\n leftSection={\n <MdOpenInNew\n size=\"1.1em\"\n aria-label='external'\n />}\n size=\"xs\"\n className='w-full mb-4'\n >\n Workspace Account Manager\n </Button>}\n <Text size=\"sm\" className='uppercase pb-2 px-2'>Limit <span className='font-black pl-1'>${PaymentNumberToString(hardLimit)}</span></Text>\n {ProgressBar('mx-2')}\n <Divider my=\"sm\" />\n <Text size=\"sm\" className='uppercase pb-2 px-2'>Account & Charges</Text>\n <Accordion\n variant=\"unstyled\"\n classNames={{\n root: '',\n control: 'p-0 px-2',\n label: 'p-0',\n chevron: 'text-accent',\n panel: 'p-0',\n content: 'p-0'\n }}\n >\n <Accordion.Item value=\"accountInformation\">\n <Accordion.Control>\n <Text size=\"sm\" className='font-black'>{workspaceName} - ${PaymentNumberToString(totalUsage)}</Text>\n </Accordion.Control>\n <Accordion.Panel>\n <Radio.Group\n className='pt-2'\n >\n {usersPayModels.map((obj)=>(\n <Radio.Card\n checked={obj.currentPayModel}\n disabled\n key={obj.value}\n className='p-2 border-none data-checked:bg-primary-lightest data-checked:border-primary-darker data-checked:font-black hover:bg-primary-max '\n >\n <Group wrap=\"nowrap\" align=\"flex-start\">\n <Text size=\"sm\" className='grow'>{obj.label}</Text>\n <Text size=\"sm\">${PaymentNumberToString(obj.totalUsage)}</Text>\n <Radio.Indicator color='accent'/>\n </Group>\n </Radio.Card>\n ))}\n </Radio.Group>\n </Accordion.Panel>\n </Accordion.Item>\n </Accordion>\n </Popover.Dropdown>\n </Popover>\n );\n};\n\n/*<Accordion chevronPosition=\"left\">\n <Accordion.Item value=\"accountInformation\">\n <Accordion.Control>\n <Group justify=\"space-between\">\n Account Information\n <Group className=\"font-heading text-base-contrast\">\n <Text fw={600}>{workspaceName}</Text>\n <div className=\"flex items-center\">\n <Text fw={500} size=\"sm\" className=\"mr-1\">\n Total Usage:\n </Text>\n <Text fw={500} size=\"sm\">\n {PaymentNumberToString(totalUsage)}\n </Text>\n </div>\n <div className=\"flex items-center pr-1\">\n <Text fw={500} size=\"sm\" className=\"mr-1\">\n Hard Limit:\n </Text>\n <Text fw={500} size=\"sm\">\n {PaymentNumberToString(hardLimit)}\n </Text>\n </div>\n </Group>\n </Group>\n </Accordion.Control>\n <Accordion.Panel>\n <div className=\"grid grid-cols-3 p-4\">\n <div className=\"flex flex-col border-1 border-gray p-2 mr-4\">\n <div className=\"flex justify-between border-b-1 border-gray mb-2 w-full py-2\">\n <div className=\"ml-2 text-xs\">Account</div>\n <div className=\"mr-2 text-xs\">Workspace Account Manager</div>\n </div>\n <div className=\"text-center\">\n <div>\n <Select\n placeholder=\"Select Workspace\"\n renderOption={PayModelSelectItem}\n data={usersPayModels}\n onChange={(id) => {\n if (id) setPayModel(id);\n }}\n value={selectedPayModel}\n />\n </div>\n </div>\n </div>\n <div className=\"flex flex-col text-center border-1 border-gray p-2 mr-4\">\n <div className=\"text-md border-b-1 border-gray mb-2 w-full py-2 text-xs\">\n Total Charges (USD)\n </div>\n <Text>{PaymentNumberToString(totalUsage)}</Text>\n </div>\n <div className=\"flex flex-col text-center border-1 border-gray p-2\">\n <div className=\"text-md border-b-1 border-gray mb-2 w-full py-2 text-xs\">\n Spending Limit (USD)\n </div>\n <Text>{PaymentNumberToString(hardLimit)}</Text>\n </div>\n </div>\n </Accordion.Panel>\n </Accordion.Item>\n </Accordion>*/\n\nexport default CostTracker;","import React, { forwardRef, useCallback } from 'react';\nimport {\n ActionIcon,\n Badge,\n Button,\n Group,\n Stack,\n Text,\n Tooltip,\n} from '@mantine/core';\nimport { Icon } from '@iconify-icon/react';\nimport { TierToolbarConfiguration } from '../tiers/types';\nimport {\n CoreState,\n selectJEGActiveWorkspaceStatus,\n selectWorkspaceFullscreen,\n selectWorkspaceTier,\n setWorkspaceFullscreen,\n setWorkspaceTier,\n useCoreDispatch,\n useCoreSelector,\n WorkspaceStatus,\n} from '@gen3/core';\nimport CostTracker from '../../components/CostTracker';\n\nimport { WorkspaceTier } from '../../types';\nimport { useMicroContainerReduxContext } from '../../providers/MicroContainerReduxProvider';\n\ninterface WorkspaceToolbarProps {\n toolbarConfiguration?: TierToolbarConfiguration;\n}\n\nconst WorkspaceToolbar = forwardRef<HTMLDivElement, WorkspaceToolbarProps>(\n ({ toolbarConfiguration }, ref) => {\n const workspaceTier = useCoreSelector(\n (state: CoreState) => selectWorkspaceTier(state) as WorkspaceTier | null,\n );\n\n const workspaceStatus = useCoreSelector((state: CoreState) =>\n selectJEGActiveWorkspaceStatus(state),\n );\n\n const isFullscreen = useCoreSelector((state: CoreState) =>\n selectWorkspaceFullscreen(state),\n );\n\n const { showStatus, showStop, tierLabel, requirePayModel, workspaceAccountManagerTarget } = toolbarConfiguration || {};\n\n const coreDispatch = useCoreDispatch();\n\n const toggleFullscreen = useCallback(() => {\n coreDispatch(setWorkspaceFullscreen(!isFullscreen));\n }, [coreDispatch, isFullscreen]);\n\n const returnToWorkspaceSelection = () => {\n coreDispatch(setWorkspaceTier(null));\n };\n\n const { terminate } = useMicroContainerReduxContext();\n\n const fullscreenLabel = isFullscreen\n ? 'Exit Fullscreen'\n : 'Fullscreen View';\n const statusLabel =\n workspaceStatus === WorkspaceStatus.NotFound\n ? 'Not Running'\n : (workspaceStatus as string);\n\n return (\n <div\n ref={ref}\n role=\"toolbar\"\n aria-label=\"Workspace toolbar\"\n className=\"flex items-center justify-between px-4 border-b-2 border-base-lighter pb-4\"\n >\n <div className=\"flex items-center gap-2\">\n <ActionIcon\n variant=\"outline\"\n radius=\"xl\"\n size=\"lg\"\n aria-label=\"Back to workspace list\"\n color=\"primary.5\"\n className=\"mr-4\"\n onClick={returnToWorkspaceSelection}\n >\n <Icon\n icon=\"gen3:back-arrow\"\n width=\"100%\"\n height=\"100%\"\n aria-hidden=\"true\"\n />\n </ActionIcon>\n <Stack gap=\"-10px\">\n <Text size=\"xl\" c=\"primary.4\">\n {toolbarConfiguration?.label}\n </Text>\n <Group>\n <Text size=\"sm\">{toolbarConfiguration?.description}</Text>\n <Badge\n aria-label={`Workspace tier: ${tierLabel ?? (workspaceTier as string)}`}\n >\n {tierLabel ?? (workspaceTier as string)}\n </Badge>\n {requirePayModel && (<CostTracker workspaceAccountManagerTarget={workspaceAccountManagerTarget}/>)}\n </Group>\n </Stack>\n </div>\n <div className=\"flex items-center gap-4 mr-8\">\n {showStatus && (\n <Group gap=\"xs\" role=\"status\" aria-label=\"Workspace status\">\n <Text size=\"md\" c=\"base-contrast.4\" aria-hidden=\"true\">\n Workspace Status:\n </Text>\n <Badge\n size=\"md\"\n radius=\"md\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {statusLabel}\n </Badge>\n </Group>\n )}\n {showStop && (\n <Button\n size=\"sm\"\n variant={\n workspaceStatus !== WorkspaceStatus.Running\n ? 'outline'\n : 'filled'\n }\n aria-label=\"Stop workspace\"\n aria-disabled={workspaceStatus !== WorkspaceStatus.Running}\n color={\n workspaceStatus !== WorkspaceStatus.Running\n ? 'primary.5'\n : 'utility.4'\n }\n onClick={terminate}\n disabled={workspaceStatus !== WorkspaceStatus.Running}\n leftSection={\n <Icon\n icon=\"gen3:dot\"\n width={36}\n height={36}\n aria-hidden=\"true\"\n className={\n workspaceStatus !== WorkspaceStatus.Running\n ? 'text-primary-contrast'\n : 'text-utility-success'\n }\n />\n }\n >\n Stop Workspace\n </Button>\n )}\n <Tooltip label={fullscreenLabel}>\n <Button\n size=\"sm\"\n variant=\"outline\"\n aria-label={fullscreenLabel}\n aria-pressed={isFullscreen}\n color=\"primary.5\"\n onClick={toggleFullscreen}\n leftSection={\n isFullscreen ? (\n <Icon\n icon=\"gen3:fullscreen-exit\"\n width={24}\n height={24}\n aria-hidden=\"true\"\n />\n ) : (\n <Icon\n icon=\"gen3:fullscreen\"\n width={24}\n height={24}\n aria-hidden=\"true\"\n />\n )\n }\n >\n {fullscreenLabel}\n </Button>\n </Tooltip>\n </div>\n </div>\n );\n },\n);\n\nWorkspaceToolbar.displayName = 'WorkspaceToolbar';\n\nexport default WorkspaceToolbar;\n","// Streaming LLM client — OpenAI, Anthropic, Gemini, Ollama\n// All requests go directly from the browser to provider APIs (no backend proxy).\n\nexport type LLMProvider = 'openai' | 'anthropic' | 'gemini' | 'ollama';\n\nexport type LLMConfig = {\n provider: LLMProvider;\n apiKey?: string;\n model: string;\n ollamaUrl?: string; // default: http://localhost:11434\n};\n\nexport type ChatMessage = {\n role: 'user' | 'assistant' | 'system';\n content: string;\n};\n\nconst DEFAULT_OLLAMA_URL = 'http://localhost:11434';\n\n// ── OpenAI ──────────────────────────────────────────────────────────────\n\nasync function* streamOpenAI(\n config: LLMConfig,\n messages: ChatMessage[],\n systemPrompt?: string,\n): AsyncGenerator<string> {\n const allMessages: ChatMessage[] = systemPrompt\n ? [{ role: 'system', content: systemPrompt }, ...messages]\n : messages;\n\n const res = await fetch('https://api.openai.com/v1/chat/completions', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${config.apiKey}`,\n },\n body: JSON.stringify({\n model: config.model,\n messages: allMessages.map((m) => ({ role: m.role, content: m.content })),\n stream: true,\n }),\n });\n\n if (!res.ok) {\n const text = await res.text().catch(() => '');\n throw new Error(`OpenAI ${res.status}: ${text || res.statusText}`);\n }\n\n yield* readSSEStream(res, (json) => {\n return json.choices?.[0]?.delta?.content ?? '';\n });\n}\n\n// ── Anthropic ───────────────────────────────────────────────────────────\n\nasync function* streamAnthropic(\n config: LLMConfig,\n messages: ChatMessage[],\n systemPrompt?: string,\n): AsyncGenerator<string> {\n const userMessages = messages.filter((m) => m.role !== 'system');\n\n const body: Record<string, unknown> = {\n model: config.model,\n max_tokens: 4096,\n stream: true,\n messages: userMessages.map((m) => ({ role: m.role, content: m.content })),\n };\n if (systemPrompt) {\n body.system = systemPrompt;\n }\n\n const res = await fetch('https://api.anthropic.com/v1/messages', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': config.apiKey ?? '',\n 'anthropic-version': '2023-06-01',\n 'anthropic-dangerous-direct-browser-access': 'true',\n },\n body: JSON.stringify(body),\n });\n\n if (!res.ok) {\n const text = await res.text().catch(() => '');\n throw new Error(`Anthropic ${res.status}: ${text || res.statusText}`);\n }\n\n yield* readSSEStream(res, (json) => {\n if (json.type === 'content_block_delta' && json.delta?.type === 'text_delta') {\n return json.delta.text ?? '';\n }\n return '';\n });\n}\n\n// ── Gemini ──────────────────────────────────────────────────────────────\n\nasync function* streamGemini(\n config: LLMConfig,\n messages: ChatMessage[],\n systemPrompt?: string,\n): AsyncGenerator<string> {\n const url = `https://generativelanguage.googleapis.com/v1beta/models/${config.model}:streamGenerateContent?alt=sse&key=${encodeURIComponent(config.apiKey ?? '')}`;\n\n const contents: Array<{ role: string; parts: Array<{ text: string }> }> = [];\n for (const m of messages) {\n if (m.role === 'system') continue;\n contents.push({\n role: m.role === 'assistant' ? 'model' : 'user',\n parts: [{ text: m.content }],\n });\n }\n\n const body: Record<string, unknown> = { contents };\n if (systemPrompt) {\n body.systemInstruction = { parts: [{ text: systemPrompt }] };\n }\n\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n });\n\n if (!res.ok) {\n const text = await res.text().catch(() => '');\n throw new Error(`Gemini ${res.status}: ${text || res.statusText}`);\n }\n\n yield* readSSEStream(res, (json) => {\n return json.candidates?.[0]?.content?.parts?.[0]?.text ?? '';\n });\n}\n\n// ── Ollama ──────────────────────────────────────────────────────────────\n\nasync function* streamOllama(\n config: LLMConfig,\n messages: ChatMessage[],\n systemPrompt?: string,\n): AsyncGenerator<string> {\n const ollamaUrl = (config.ollamaUrl || DEFAULT_OLLAMA_URL).replace(/\\/+$/, '');\n\n const allMessages: ChatMessage[] = systemPrompt\n ? [{ role: 'system', content: systemPrompt }, ...messages]\n : messages;\n\n const res = await fetch(`${ollamaUrl}/api/chat`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n model: config.model,\n messages: allMessages.map((m) => ({ role: m.role, content: m.content })),\n stream: true,\n }),\n });\n\n if (!res.ok) {\n const text = await res.text().catch(() => '');\n throw new Error(`Ollama ${res.status}: ${text || res.statusText}`);\n }\n\n // Ollama streams newline-delimited JSON (not SSE)\n const reader = res.body?.getReader();\n if (!reader) return;\n const decoder = new TextDecoder();\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n for (const line of lines) {\n if (!line.trim()) continue;\n try {\n const json = JSON.parse(line);\n const text = json.message?.content ?? '';\n if (text) yield text;\n } catch {\n // skip malformed lines\n }\n }\n }\n // process remaining buffer\n if (buffer.trim()) {\n try {\n const json = JSON.parse(buffer);\n const text = json.message?.content ?? '';\n if (text) yield text;\n } catch {\n // skip\n }\n }\n } finally {\n reader.releaseLock();\n }\n}\n\n// ── SSE stream reader (shared by OpenAI, Anthropic, Gemini) ─────────\n\nasync function* readSSEStream(\n res: Response,\n extractText: (json: Record<string, any>) => string,\n): AsyncGenerator<string> {\n const reader = res.body?.getReader();\n if (!reader) return;\n const decoder = new TextDecoder();\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n for (const line of lines) {\n if (line.startsWith('data: ')) {\n const data = line.slice(6).trim();\n if (data === '[DONE]') return;\n try {\n const json = JSON.parse(data);\n const text = extractText(json);\n if (text) yield text;\n } catch {\n // skip malformed JSON chunks\n }\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n}\n\n// ── Public API ──────────────────────────────────────────────────────────\n\nexport async function* sendMessage(\n config: LLMConfig,\n messages: ChatMessage[],\n systemPrompt?: string,\n): AsyncGenerator<string> {\n switch (config.provider) {\n case 'openai':\n yield* streamOpenAI(config, messages, systemPrompt);\n break;\n case 'anthropic':\n yield* streamAnthropic(config, messages, systemPrompt);\n break;\n case 'gemini':\n yield* streamGemini(config, messages, systemPrompt);\n break;\n case 'ollama':\n yield* streamOllama(config, messages, systemPrompt);\n break;\n default:\n throw new Error(`Unknown provider: ${(config as any).provider}`);\n }\n}\n\n// ── Default model per provider ──────────────────────────────────────────\n\nexport const DEFAULT_MODELS: Record<LLMProvider, string> = {\n openai: 'gpt-4o',\n anthropic: 'claude-sonnet-4-20250514',\n gemini: 'gemini-3.1-pro',\n ollama: 'llama3',\n};\n\n/** Well-known models per provider for the settings selector. */\nexport const MODEL_OPTIONS: Record<LLMProvider, Array<{ id: string; label: string }>> = {\n openai: [\n { id: 'gpt-4o', label: 'GPT-4o' },\n { id: 'gpt-4o-mini', label: 'GPT-4o Mini' },\n { id: 'o3-mini', label: 'o3-mini' },\n { id: 'o1', label: 'o1' },\n { id: 'o1-mini', label: 'o1-mini' },\n ],\n anthropic: [\n { id: 'claude-opus-4-20250514', label: 'Claude Opus 4' },\n { id: 'claude-sonnet-4-20250514', label: 'Claude Sonnet 4' },\n { id: 'claude-haiku-3-5-20241022', label: 'Claude Haiku 3.5' },\n ],\n gemini: [\n { id: 'gemini-3.1-pro', label: 'Gemini 3.1 Pro' },\n { id: 'gemini-3.1-pro-preview', label: 'Gemini 3.1 Pro Preview' },\n ],\n ollama: [\n { id: 'llama3', label: 'Llama 3' },\n { id: 'codellama', label: 'Code Llama' },\n { id: 'mistral', label: 'Mistral' },\n { id: 'deepseek-coder', label: 'DeepSeek Coder' },\n ],\n};\n","// RAG context builder — dictionary context stuffing + external KB search\n// No vector DB: dictionary is directly injected into system prompt (~3-8K tokens).\n// External KB articles are fetched, chunked, keyword-matched, and top-N injected.\n\nexport type SchemaNode = {\n id: string;\n title: string;\n description?: string;\n category?: string;\n properties: Record<string, { type?: string; description?: string; enum?: string[] }>;\n required: string[];\n links: Array<{ name: string; target_type: string; multiplicity: string }>;\n};\n\n// ── Parse /schema.json into structured nodes ────────────────────────────\n\nexport function parseSchemaNodes(schema: Record<string, any>): SchemaNode[] {\n // The schema may be a JSON Schema with top-level keys as node IDs,\n // or wrapped in a \"properties\" or \"definitions\" envelope.\n const raw: Record<string, any> = schema.properties ?? schema.definitions ?? schema;\n const nodes: SchemaNode[] = [];\n\n for (const [id, def] of Object.entries(raw)) {\n if (!def || typeof def !== 'object') continue;\n // Skip meta-fields like $schema, _definitions, etc.\n if (id.startsWith('$') || id.startsWith('_')) continue;\n\n const props: SchemaNode['properties'] = {};\n const defProps = def.properties ?? {};\n for (const [k, v] of Object.entries(defProps)) {\n if (typeof v !== 'object' || v === null) continue;\n const vTyped = v as Record<string, any>;\n props[k] = {\n type: vTyped.type ?? vTyped.oneOf?.[0]?.type ?? undefined,\n description: vTyped.description ?? undefined,\n enum: Array.isArray(vTyped.enum) ? vTyped.enum.slice(0, 10) : undefined,\n };\n }\n\n const links: SchemaNode['links'] = [];\n if (Array.isArray(def.links)) {\n for (const link of def.links) {\n links.push({\n name: link.name ?? link.label ?? link.backref ?? '?',\n target_type: link.target_type ?? link.targetType ?? '?',\n multiplicity: link.multiplicity ?? link.label ?? '',\n });\n }\n }\n\n nodes.push({\n id,\n title: (def.title as string) ?? id,\n description: (def.description as string) ?? undefined,\n category: (def.category as string) ?? (def.namespace as string) ?? undefined,\n properties: props,\n required: Array.isArray(def.required) ? def.required : [],\n links,\n });\n }\n\n return nodes.sort((a, b) => a.id.localeCompare(b.id));\n}\n\n// ── Build compact dictionary context for system prompt ──────────────────\n\nexport function buildDictionaryContext(nodes: SchemaNode[]): string {\n if (!nodes.length) return '';\n\n const lines: string[] = ['## Data Dictionary\\n'];\n for (const node of nodes) {\n lines.push(`### ${node.title}${node.category ? ` (${node.category})` : ''}`);\n if (node.description) lines.push(node.description);\n\n const fieldLines: string[] = [];\n for (const [name, info] of Object.entries(node.properties)) {\n const parts = [name];\n if (info.type) parts.push(`: ${info.type}`);\n if (node.required.includes(name)) parts.push(' *required*');\n if (info.enum) parts.push(` [${info.enum.join(', ')}]`);\n fieldLines.push(` - ${parts.join('')}`);\n }\n if (fieldLines.length) {\n lines.push('Fields:');\n lines.push(...fieldLines);\n }\n\n if (node.links.length) {\n lines.push('Links:');\n for (const link of node.links) {\n lines.push(` - ${link.name} → ${link.target_type} (${link.multiplicity})`);\n }\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\n// ── External KB context (fetch → chunk → keyword search) ────────────────\n\nconst KB_CACHE_KEY = 'gen3-kb-cache';\n\ntype KBCache = {\n url: string;\n passages: string[];\n fetchedAt: number;\n};\n\nfunction getKBCache(): KBCache | null {\n try {\n const raw = sessionStorage.getItem(KB_CACHE_KEY);\n if (!raw) return null;\n return JSON.parse(raw) as KBCache;\n } catch {\n return null;\n }\n}\n\nfunction setKBCache(cache: KBCache): void {\n try {\n sessionStorage.setItem(KB_CACHE_KEY, JSON.stringify(cache));\n } catch {\n // sessionStorage full — ignore\n }\n}\n\nfunction chunkText(text: string, maxLen = 800): string[] {\n // Split on double-newlines (paragraphs) first, then by sentences if needed\n const paragraphs = text.split(/\\n{2,}/);\n const chunks: string[] = [];\n\n for (const para of paragraphs) {\n const trimmed = para.trim();\n if (!trimmed) continue;\n if (trimmed.length <= maxLen) {\n chunks.push(trimmed);\n } else {\n // Split long paragraphs by sentences\n const sentences = trimmed.split(/(?<=[.!?])\\s+/);\n let current = '';\n for (const sentence of sentences) {\n if (current.length + sentence.length > maxLen && current) {\n chunks.push(current.trim());\n current = '';\n }\n current += (current ? ' ' : '') + sentence;\n }\n if (current.trim()) chunks.push(current.trim());\n }\n }\n return chunks;\n}\n\nfunction scorePassage(passage: string, queryWords: string[]): number {\n const lower = passage.toLowerCase();\n let score = 0;\n for (const word of queryWords) {\n if (lower.includes(word)) score++;\n }\n return score;\n}\n\nexport async function buildKBContext(kbUrl: string, query: string, topN = 5): Promise<string> {\n if (!kbUrl) return '';\n\n // Check cache\n const cached = getKBCache();\n let passages: string[];\n\n if (cached && cached.url === kbUrl && Date.now() - cached.fetchedAt < 30 * 60 * 1000) {\n passages = cached.passages;\n } else {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10_000);\n const res = await fetch(kbUrl, { signal: controller.signal });\n clearTimeout(timeoutId);\n if (!res.ok) return '';\n const text = await res.text();\n passages = chunkText(text);\n setKBCache({ url: kbUrl, passages, fetchedAt: Date.now() });\n } catch {\n return '';\n }\n }\n\n const queryWords = query.toLowerCase().split(/\\s+/).filter((w) => w.length > 2);\n if (!queryWords.length) return '';\n\n const scored = passages\n .map((p, i) => ({ passage: p, score: scorePassage(p, queryWords), index: i }))\n .filter((s) => s.score > 0)\n .sort((a, b) => b.score - a.score || a.index - b.index)\n .slice(0, topN);\n\n if (!scored.length) return '';\n return '## Knowledge Base Context\\n\\n' + scored.map((s) => s.passage).join('\\n\\n---\\n\\n');\n}\n\n// ── Assemble full system prompt ─────────────────────────────────────────\n\nconst BASE_SYSTEM_PROMPT = `You are a data science coding assistant embedded in a Jupyter notebook workspace.\nYou help users write Python code for data analysis, bioinformatics, and genomics.\nWhen generating code, prefer clear and concise solutions.\nAlways wrap code in fenced code blocks with the language specified (e.g. \\`\\`\\`python).\nIf you reference data fields, use the exact names from the data dictionary when available.`;\n\nexport function buildSystemPrompt(dictionaryContext: string, kbContext?: string): string {\n const parts = [BASE_SYSTEM_PROMPT];\n if (dictionaryContext) parts.push(dictionaryContext);\n if (kbContext) parts.push(kbContext);\n return parts.join('\\n\\n');\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\n/**\n * Hook that provides code injection into a same-origin JupyterLab iframe.\n * Finds the active CodeMirror cell and inserts text programmatically.\n *\n * Caches the last-known active CM6 EditorView so that clicking \"Insert\"\n * in the sidebar (which steals focus from the iframe) still targets the\n * correct cell.\n */\nexport function useCodeInjector() {\n const [iframeReady, setIframeReady] = useState(false);\n const iframeRef = useRef<HTMLIFrameElement | null>(null);\n const lastEditorRef = useRef<HTMLElement | null>(null);\n\n // Poll for the JupyterLab iframe and cache the active editor view\n useEffect(() => {\n const check = () => {\n const iframe = document.querySelector<HTMLIFrameElement>(\n 'iframe[src*=\"/lab\"]',\n );\n iframeRef.current = iframe ?? null;\n if (iframe) {\n try {\n const doc = iframe.contentDocument ?? iframe.contentWindow?.document;\n setIframeReady(!!doc);\n // Cache the active cell's CM6 EditorView while focus info is fresh\n if (doc) {\n const activeCell = doc.querySelector('.jp-Cell.jp-mod-active');\n if (activeCell) {\n const cmContent = activeCell.querySelector('.cm-content') as any;\n const view = cmContent?.cmView?.view;\n if (view) {\n lastEditorRef.current = view;\n }\n }\n }\n } catch {\n setIframeReady(false);\n }\n } else {\n setIframeReady(false);\n }\n };\n\n check();\n const interval = setInterval(check, 1000);\n return () => clearInterval(interval);\n }, []);\n\n const insertCode = useCallback((code: string): boolean => {\n // Re-acquire iframe if the cached reference is detached\n const iframe = iframeRef.current?.isConnected\n ? iframeRef.current\n : document.querySelector<HTMLIFrameElement>('iframe[src*=\"/lab\"]');\n if (!iframe) return false;\n\n try {\n const iframeDoc =\n iframe.contentDocument ?? iframe.contentWindow?.document;\n if (!iframeDoc) return false;\n\n // Strategy 1: Find active cell's CodeMirror 6 editor view\n const activeCell = iframeDoc.querySelector('.jp-Cell.jp-mod-active');\n const cmContent = (activeCell ?? iframeDoc).querySelector(\n '.cm-content',\n ) as HTMLElement | null;\n\n let cmView: any = null;\n if (cmContent) {\n cmView = (cmContent as any)?.cmView?.view ?? null;\n }\n\n // Fall back to the cached editor when the click stole focus from the iframe\n if (!cmView && lastEditorRef.current) {\n cmView = lastEditorRef.current;\n }\n\n if (cmView) {\n // Update the cache to the editor we're actually inserting into\n lastEditorRef.current = cmView;\n const { state } = cmView;\n const cursor = state.selection.main.head;\n cmView.dispatch({\n changes: { from: cursor, insert: code },\n selection: { anchor: cursor + code.length },\n });\n return true;\n }\n\n if (cmContent) {\n // Fallback: use execCommand-based insertion (works in contenteditable)\n cmContent.focus();\n const selection = iframe.contentWindow?.getSelection();\n if (selection) {\n // Move cursor to end\n selection.selectAllChildren(cmContent);\n selection.collapseToEnd();\n }\n\n // Use insertText command for undo support\n const inserted = iframeDoc.execCommand('insertText', false, code);\n if (inserted) return true;\n\n // Last resort: direct text manipulation\n cmContent.textContent = (cmContent.textContent ?? '') + code;\n cmContent.dispatchEvent(new Event('input', { bubbles: true }));\n return true;\n }\n\n // Strategy 2: Find any focused textarea (JupyterLite or classic notebook)\n const textarea = iframeDoc.querySelector(\n 'textarea:focus',\n ) as HTMLTextAreaElement | null;\n if (textarea) {\n const start = textarea.selectionStart ?? textarea.value.length;\n textarea.value =\n textarea.value.slice(0, start) + code + textarea.value.slice(start);\n textarea.selectionStart = textarea.selectionEnd = start + code.length;\n textarea.dispatchEvent(new Event('input', { bubbles: true }));\n return true;\n }\n\n return false;\n } catch {\n return false;\n }\n }, []);\n\n return { insertCode, iframeReady };\n}\n","import React, { useMemo } from 'react';\nimport { Button } from '@mantine/core';\nimport { UIMessage } from './types';\n\n// oxlint-disable-next-line no-unused-vars\nfunction extractCodeBlocks(\n text: string,\n): Array<{ lang: string; code: string }> {\n // Regex defined inside the function to avoid shared lastIndex state across calls\n // (module-level /g regexes retain lastIndex between invocations).\n const CODE_BLOCK_RE = /```(\\w+)?\\n([\\s\\S]*?)```/g;\n const blocks: Array<{ lang: string; code: string }> = [];\n let match: RegExpExecArray | null;\n while ((match = CODE_BLOCK_RE.exec(text)) !== null) {\n blocks.push({ lang: match[1] ?? '', code: match[2].trim() });\n }\n return blocks;\n}\n\nconst MessageBubble = ({\n message,\n onInsert,\n}: {\n message: UIMessage;\n onInsert: (code: string) => void;\n}) => {\n const isUser = message.role === 'user';\n\n // Render content with code blocks highlighted\n const renderedContent = useMemo(() => {\n if (!message.content) return null;\n\n const parts: React.ReactNode[] = [];\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n const re = /```(\\w+)?\\n([\\s\\S]*?)```/g;\n\n while ((match = re.exec(message.content)) !== null) {\n // Text before code block\n if (match.index > lastIndex) {\n parts.push(\n <span key={`t-${lastIndex}`} className=\"whitespace-pre-wrap\">\n {message.content.slice(lastIndex, match.index)}\n </span>,\n );\n }\n\n const lang = match[1] ?? '';\n const code = match[2].trim();\n parts.push(\n <div\n key={`c-${match.index}`}\n className=\"my-1.5 rounded-md bg-base-darkest\"\n >\n <div className=\"flex items-center justify-between px-2.5 py-1 text-xs text-base-darker\">\n <span>{lang || 'code'}</span>\n <Button onClick={() => onInsert(code)} color=\"accent\">\n Insert ↗\n </Button>\n </div>\n <pre className=\"overflow-x-auto px-2.5 pb-2 text-sm leading-relaxed text-utility-category4\">\n <code>{code}</code>\n </pre>\n </div>,\n );\n\n lastIndex = match.index + match[0].length;\n }\n\n if (lastIndex < message.content.length) {\n parts.push(\n <span key={`t-${lastIndex}`} className=\"whitespace-pre-wrap\">\n {message.content.slice(lastIndex)}\n </span>,\n );\n }\n\n return parts;\n }, [message.content, onInsert]);\n\n return (\n <div\n className={`rounded-lg px-2.5 py-2 text-xs leading-relaxed ${\n isUser\n ? 'bg-utility-category1 bg-opacity-5 text-utility-category1'\n : 'bg-base-lightest bg-opacity-50 text-base-darkest'\n }`}\n >\n <div className=\"mb-0.5 text-xs font-semibold uppercase tracking-wider text-base-darkest\">\n {isUser ? 'You' : message.streaming ? 'AI ●' : 'AI'}\n </div>\n <div>{renderedContent}</div>\n </div>\n );\n};\n\nexport default MessageBubble;\n","import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { Button, Select, Textarea, TextInput } from '@mantine/core';\nimport { IoSettingsSharp as SettingsIcon } from 'react-icons/io5';\nimport { BsFillInfoCircleFill as InfoIcon } from 'react-icons/bs';\nimport {\n type ChatMessage,\n DEFAULT_MODELS,\n type LLMConfig,\n type LLMProvider,\n MODEL_OPTIONS,\n sendMessage,\n} from '../../lib/llmClient';\nimport {\n buildDictionaryContext,\n buildKBContext,\n buildSystemPrompt,\n parseSchemaNodes,\n} from '../../lib/ragContext';\nimport { useCodeInjector } from '../../hooks/useCodeInjector';\nimport MessageBubble from './MessageBubble';\nimport { UIMessage } from './types';\n\nexport interface CodingAssistantPanelProps {\n schemaUrl?: string;\n kbUrl?: string;\n onInsertCode?: (code: string) => void;\n}\n\n// ── Persistence helpers ─────────────────────────────────────────────────\n\nconst STORAGE_PREFIX = 'gen3-ai-';\n\nfunction loadSetting<T>(key: string, fallback: T): T {\n try {\n const raw = sessionStorage.getItem(STORAGE_PREFIX + key);\n return raw ? JSON.parse(raw) : fallback;\n } catch {\n return fallback;\n }\n}\n\nfunction saveSetting(key: string, value: unknown): void {\n try {\n sessionStorage.setItem(STORAGE_PREFIX + key, JSON.stringify(value));\n } catch {\n // ignore\n }\n}\n\n// ── Component ───────────────────────────────────────────────────────────\n\nconst CodingAssistantPanel = ({\n schemaUrl,\n kbUrl,\n onInsertCode,\n}: CodingAssistantPanelProps) => {\n // Settings state\n const [provider, setProvider] = useState<LLMProvider>(\n () => loadSetting('provider', 'openai') as LLMProvider,\n );\n const [apiKey, setApiKey] = useState(() => loadSetting('apiKey', ''));\n const [model, setModel] = useState(() =>\n loadSetting('model', DEFAULT_MODELS[provider]),\n );\n const [ollamaUrl, setOllamaUrl] = useState(() =>\n loadSetting('ollamaUrl', 'http://localhost:11434'),\n );\n const [showSettings, setShowSettings] = useState(() => {\n // Show settings on first use (no key/model configured)\n return !loadSetting('provider', '');\n });\n\n // Chat state\n const [messages, setMessages] = useState<UIMessage[]>([]);\n const [input, setInput] = useState('');\n const [streaming, setStreaming] = useState(false);\n const messagesEndRef = useRef<HTMLDivElement>(null);\n\n // RAG context\n const [dictContext, setDictContext] = useState('');\n const { insertCode, iframeReady } = useCodeInjector();\n\n // Load dictionary context once\n useEffect(() => {\n if (!schemaUrl) return;\n let cancelled = false;\n (async () => {\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 10_000);\n const res = await fetch(schemaUrl, { signal: controller.signal });\n clearTimeout(timeout);\n if (!res.ok) return;\n const schema = await res.json();\n const nodes = parseSchemaNodes(schema);\n if (!cancelled) setDictContext(buildDictionaryContext(nodes));\n } catch {\n // Silently skip — dictionary RAG is best-effort\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [schemaUrl]);\n\n // Persist settings on change\n useEffect(() => {\n saveSetting('provider', provider);\n saveSetting('model', model);\n saveSetting('ollamaUrl', ollamaUrl);\n // Only persist key if non-empty (user explicitly entered one)\n if (apiKey) saveSetting('apiKey', apiKey);\n }, [provider, apiKey, model, ollamaUrl]);\n\n // Auto-update default model when switching providers\n useEffect(() => {\n setModel(DEFAULT_MODELS[provider]);\n }, [provider]);\n\n // Auto-scroll on new messages\n useEffect(() => {\n messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });\n }, [messages]);\n\n const llmConfig = useMemo<LLMConfig>(\n () => ({\n provider,\n apiKey: provider === 'ollama' ? undefined : apiKey, // pragma: allowlist-secret;\n model,\n ollamaUrl: provider === 'ollama' ? ollamaUrl : undefined,\n }),\n [provider, apiKey, model, ollamaUrl],\n );\n\n const handleSend = useCallback(async () => {\n const trimmed = input.trim();\n if (!trimmed || streaming) return;\n\n const userMsg: UIMessage = {\n id: `u-${Date.now()}`,\n role: 'user',\n content: trimmed,\n };\n\n const assistantMsg: UIMessage = {\n id: `a-${Date.now()}`,\n role: 'assistant',\n content: '',\n streaming: true,\n };\n\n setMessages((prev) => [...prev, userMsg, assistantMsg]);\n setInput('');\n setStreaming(true);\n\n const chatHistory: ChatMessage[] = [\n ...messages\n .filter((m) => !m.streaming)\n .map((m) => ({ role: m.role, content: m.content })),\n { role: 'user' as const, content: trimmed },\n ];\n\n // Build system prompt with RAG context\n let kbCtx = '';\n if (kbUrl) {\n try {\n kbCtx = await buildKBContext(kbUrl, trimmed);\n } catch {\n // ignore KB errors\n }\n }\n const systemPrompt = buildSystemPrompt(dictContext, kbCtx);\n\n try {\n let fullText = '';\n for await (const chunk of sendMessage(\n llmConfig,\n chatHistory,\n systemPrompt,\n )) {\n fullText += chunk;\n setMessages((prev) =>\n prev.map((m) =>\n m.id === assistantMsg.id ? { ...m, content: fullText } : m,\n ),\n );\n }\n\n // Mark streaming complete\n setMessages((prev) =>\n prev.map((m) =>\n m.id === assistantMsg.id ? { ...m, streaming: false } : m,\n ),\n );\n } catch (err: any) {\n setMessages((prev) =>\n prev.map((m) =>\n m.id === assistantMsg.id\n ? {\n ...m,\n content: `⚠️ ${err.message || 'Request failed'}`,\n streaming: false,\n }\n : m,\n ),\n );\n } finally {\n setStreaming(false);\n }\n }, [input, streaming, messages, llmConfig, dictContext, kbUrl]);\n\n const handleInsert = useCallback(\n (code: string) => {\n if (onInsertCode) {\n onInsertCode(code);\n } else {\n insertCode(code);\n }\n },\n [onInsertCode, insertCode],\n );\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSend();\n }\n };\n\n const clearChat = () => {\n setMessages([]);\n };\n\n const needsApiKey = provider !== 'ollama'; // pragma: allowlist-secret;\n const isConfigured = provider === 'ollama' || !!apiKey;\n\n // ── Settings form (shared between onboarding and collapsible) ─────\n const settingsForm = (\n <div className=\"flex flex-col gap-2\">\n <Select\n label=\"Provider\"\n data={[\n { value: 'openai', label: 'OpenAI' },\n { value: 'anthropic', label: 'Anthropic' },\n { value: 'gemini', label: 'Gemini' },\n { value: 'ollama', label: 'Ollama (local)' },\n ]}\n value={provider}\n onChange={(value) => setProvider(value as LLMProvider)}\n />\n\n {needsApiKey && (\n <>\n <TextInput\n type=\"password\"\n value={apiKey}\n onChange={(e) => setApiKey(e.target.value)}\n placeholder={`Paste your ${provider} API key`}\n label=\"API Key\"\n />\n <span className=\"text-xs text-base-dark\">\n Stored in this tab only — never sent to our servers\n </span>\n </>\n )}\n\n {provider === 'ollama' && (\n <TextInput\n label={'Ollama URL'}\n value={ollamaUrl}\n onChange={(e) => setOllamaUrl(e.target.value)}\n placeholder=\"http://localhost:11434\"\n />\n )}\n\n <Select\n value={\n MODEL_OPTIONS[provider].some((m) => m.id === model)\n ? model\n : '__custom'\n }\n onChange={(value) => {\n if (value !== '__custom') setModel(value as string);\n }}\n label=\"Model\"\n data={[\n ...MODEL_OPTIONS[provider].map((m) => ({\n value: m.id,\n label: m.label,\n })),\n !(MODEL_OPTIONS?.[provider] || []).some((m) => m.id === model)\n ? { value: '__custom', label: '(custom)' }\n : undefined,\n ].filter((v) => v != undefined)}\n />\n <TextInput\n value={model || ''}\n onChange={(e) => setModel(e.target.value)}\n placeholder=\"Or type a custom model ID\"\n />\n\n <div className=\"flex flex-wrap gap-2 text-xs\">\n {dictContext && (\n <span className=\"rounded bg-utility-category4 bg-opacity-20 px-1.5 py-0.5 text-utility-category4\">\n Dictionary RAG active\n </span>\n )}\n {kbUrl && (\n <span className=\"rounded bg-utility-category1 bg-opacity-20 px-1.5 py-0.5 text-utility-category1\">\n KB RAG active\n </span>\n )}\n {iframeReady && (\n <span className=\"rounded bg-utility-category3 bg-opacity-20 px-1.5 py-0.5 text-utility-category3\">\n Code injection ready\n </span>\n )}\n </div>\n </div>\n );\n\n // ── Onboarding (no API key yet) ──────────────────────────────────\n if (!isConfigured) {\n return (\n <div className=\"flex h-full flex-col gap-3\">\n <div className=\"rounded-lg border border-blue-200 bg-gradient-to-b from-blue-50 to-white p-3\">\n <div className=\"mb-2 flex items-center gap-2\">\n <InfoIcon className=\"text-utility-info\" aria-hidden=\"true\" />\n <span className=\"text-xs font-semibold text-base-darkest\">\n AI Coding Assistant\n </span>\n </div>\n <p className=\"mb-3 text-sm leading-relaxed text-base-darker\">\n Get help writing Python code, querying data, and exploring the data\n dictionary — powered by your own API key. Choose a provider and\n paste your key below to start.\n </p>\n {settingsForm}\n </div>\n <div className=\"mt-1 text-center text-sm text-base-darker\">\n Your key stays in this browser tab and is never stored on our servers.\n </div>\n </div>\n );\n }\n\n // ── Configured: normal chat UI ───────────────────────────────────\n return (\n <div className=\"flex h-full flex-col gap-2 w-full\">\n {/* Compact header with settings toggle + clear */}\n <div className=\"flex items-center justify-between\">\n <button\n type=\"button\"\n onClick={() => setShowSettings((v) => !v)}\n className=\"flex items-center gap-1 text-sm font-medium text-base-darker hover:text-base-darkest\"\n aria-label={\n showSettings ? 'Hide provider settings' : 'Show provider settings'\n }\n >\n <SettingsIcon aria-hidden=\"true\" />\n {showSettings ? 'Hide' : provider}\n </button>\n {messages.length > 0 && (\n <button\n type=\"button\"\n onClick={clearChat}\n className=\"text-sm text-base-darker hover:text-accentWarm-dark\"\n >\n Clear\n </button>\n )}\n </div>\n\n {showSettings && (\n <div className=\"rounded-lg border border-base-lighter bg-base-slightest bg-opacity-50 p-2.5\">\n {settingsForm}\n </div>\n )}\n\n {/* Messages */}\n <div className=\"flex min-h-0 flex-1 flex-col gap-2 overflow-y-auto\">\n {messages.length === 0 && !showSettings && (\n <div className=\"flex flex-col items-center gap-2 py-6 text-center\">\n <span className=\"text-sm text-base-darker\">\n Ready — using <strong>{provider}</strong> ({model})\n </span>\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-sm text-base-darker\">Try asking:</span>\n {[\n 'Write a pandas query to count rows by category',\n 'How do I read a TSV file from the Gen3 workspace?',\n 'Plot a histogram of ages using matplotlib',\n ].map((q) => (\n <button\n key={q}\n type=\"button\"\n onClick={() => {\n setInput(q);\n }}\n className=\"rounded-md border border-base-lighter bg-white px-2 py-1 text-left text-sm text-base-darker hover:border-utility-link hover:text-utility-link\"\n >\n {q}\n </button>\n ))}\n </div>\n </div>\n )}\n\n {messages.map((msg) => (\n <MessageBubble key={msg.id} message={msg} onInsert={handleInsert} />\n ))}\n <div ref={messagesEndRef} />\n </div>\n\n {/* Input */}\n <div className=\"flex gap-1.5\">\n <Textarea\n value={input}\n onChange={(e) => setInput(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={\n streaming ? 'Generating…' : 'Ask a question… (Enter to send)'\n }\n rows={2}\n disabled={streaming}\n className=\"w-full\"\n />\n <Button\n onClick={handleSend}\n disabled={streaming || !input.trim()}\n className=\"shrink-0 self-end\"\n >\n {streaming ? '…' : 'Send'}\n </Button>\n </div>\n </div>\n );\n};\n\nexport default CodingAssistantPanel;\n","import React from 'react';\nimport { Badge, Group, Text } from '@mantine/core';\n\ntype FieldLinkCountBadgeProps = {\n fieldsCount: number;\n linksCount?: number;\n};\n\nconst FieldLinkCountBadge = ({\n fieldsCount,\n linksCount,\n}: FieldLinkCountBadgeProps) => {\n return (\n <Group gap=\"xs\">\n <Badge color=\"accent.1\" variant=\"light\" radius=\"sm\">\n <Text span size=\"xs\" fw={400}>\n {fieldsCount} {fieldsCount === 1 ? 'field' : 'fields'}\n </Text>\n </Badge>\n\n {linksCount && (\n <Badge color=\"accent.1\" variant=\"light\" radius=\"sm\">\n <Text span size=\"xs\" fw={400}>\n {linksCount} {linksCount === 1 ? 'link' : 'links'}\n </Text>\n </Badge>\n )}\n </Group>\n );\n};\n\nexport default FieldLinkCountBadge;\n","import React, { useEffect, useMemo, useState } from 'react';\nimport {\n Badge,\n Group,\n LoadingOverlay,\n Scroller,\n Table,\n Text,\n TextInput,\n} from '@mantine/core';\nimport { useElementSize } from '@mantine/hooks';\nimport {\n MdKeyboardArrowDown as DownArrowIcon,\n MdKeyboardArrowRight as RightArrowIcon,\n} from 'react-icons/md';\nimport { OverflowTooltippedLabel } from '@gen3/frontend';\nimport { parseSchemaNodes, type SchemaNode } from '../../lib/ragContext';\nimport {\n isFetchBaseQueryError,\n useGetDictionaryFromUrlQuery,\n} from '@gen3/core';\nimport FieldLinkCountBadge from './FieldLinkCountBadge';\n\nexport interface CompactDictionaryPanelProps {\n schemaUrl?: string;\n}\n\nconst CompactDictionaryPanel = ({\n schemaUrl = '_dictionary/_all',\n}: CompactDictionaryPanelProps) => {\n const { ref, width } = useElementSize<HTMLDivElement>();\n const isNarrow = width > 0 && width < 280;\n const isCompact = width > 0 && width < 360;\n\n const [nodes, setNodes] = useState<SchemaNode[]>([]);\n const [search, setSearch] = useState('');\n const [expandedId, setExpandedId] = useState<string | null>(null);\n const { data, isFetching, isError, error, isSuccess } =\n useGetDictionaryFromUrlQuery(schemaUrl);\n\n const filtered = useMemo(() => {\n if (!search.trim()) return nodes;\n const q = search.toLowerCase();\n return nodes.filter(\n (n) =>\n n.id.toLowerCase().includes(q) ||\n n.title.toLowerCase().includes(q) ||\n n.category?.toLowerCase().includes(q) ||\n Object.keys(n.properties).some((k) => k.toLowerCase().includes(q)),\n );\n }, [nodes, search]);\n\n useEffect(() => {\n if (isSuccess) {\n const parsed = parseSchemaNodes(data);\n setNodes(parsed);\n }\n }, [isSuccess, data]);\n\n if (isError) {\n let message = 'Could not load dictionary';\n if (isFetchBaseQueryError(error)) {\n message = `Error loading dictionary from server`;\n }\n return (\n <div className=\"rounded-lg border border-utility-error bg-utility-error opacity-90 px-3 py-2 text-xs text-utility-contrast-error\">\n {message}\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className=\"relative flex flex-col gap-2 bg-base-lightest p-2 h-full\"\n >\n <LoadingOverlay visible={isFetching} />\n <TextInput\n placeholder=\"Filter nodes…\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n <div className=\"text-xs text-base-darker\">\n {filtered.length} node{filtered.length !== 1 ? 's' : ''}\n {search && ` matching \"${search}\"`}\n </div>\n\n <div className=\"flex h-full flex-1 flex-col gap-0.5 overflow-y-scroll\">\n {filtered.map((node) => {\n const isExpanded = expandedId === node.id;\n const propCount = Object.keys(node.properties).length;\n const linkCount = node.links.length;\n\n return (\n <div\n key={node.id}\n className=\"rounded-md border border-base-lightest bg-base-max\"\n >\n <button\n type=\"button\"\n onClick={() => setExpandedId(isExpanded ? null : node.id)}\n className=\"flex w-full flex-col px-2.5 py-2 text-left hover:bg-base-lightest hover:bg-opacity-50\"\n aria-label={`Expand description for ${node.title}`}\n aria-expanded={isExpanded}\n >\n {/* Top row: arrow + title (+ badge when not narrow) */}\n <div className=\"flex w-full items-center gap-2\">\n {isExpanded ? <DownArrowIcon /> : <RightArrowIcon />}\n <div className=\"min-w-0 flex-1\">\n <div className=\"truncate text-xs font-semibold text-base-darkest\">\n {node.title}\n </div>\n {!isNarrow && node.category && (\n <div className=\"truncate text-sm text-base-darker\">\n {node.category}\n </div>\n )}\n </div>\n {!isNarrow && (\n <FieldLinkCountBadge\n fieldsCount={propCount}\n linksCount={linkCount}\n />\n )}\n </div>\n\n {/* Second row (narrow only): category + badge */}\n {isNarrow && (\n <div className=\"flex w-full items-center justify-between pl-5 pt-0.5\">\n {node.category && (\n <span className=\"truncate text-xs text-base-darker\">\n {node.category}\n </span>\n )}\n </div>\n )}\n </button>\n\n {isExpanded && (\n <div className=\"border-t border-base-lightest px-2.5 py-2\">\n {node.description && (\n <p className=\"mb-2 text-sm italic text-base-darker px-4\">\n {node.description}\n </p>\n )}\n\n {propCount > 0 && (\n <Table>\n <Table.Thead>\n <Table.Tr>\n <Table.Th>Field</Table.Th>\n <Table.Th>Type</Table.Th>\n {!isCompact && <Table.Th />}\n </Table.Tr>\n </Table.Thead>\n <Table.Tbody>\n {Object.entries(node.properties).map(([name, info]) => (\n <Table.Tr key={name}>\n <Table.Td>\n <Text size=\"xs\" c=\"base-contrast.5\">\n {name}\n </Text>\n </Table.Td>\n <Table.Td>\n <Text size=\"xs\" c=\"base-contrast.5\">\n {info.type}\n </Text>\n </Table.Td>\n {!isCompact && (\n <Table.Td>\n {info.enum && (\n <Scroller draggable>\n <Group gap=\"xs\" wrap=\"nowrap\">\n {info.enum.map((value) => (\n <Badge\n variant=\"light\"\n size=\"sm\"\n color=\"secondary.4\"\n key={value}\n >\n <OverflowTooltippedLabel\n label={value}\n className=\"font-bold text-secondary-contrast\"\n color=\"accent-light\"\n noTruncate={true}\n >\n {value}\n </OverflowTooltippedLabel>\n </Badge>\n ))}\n </Group>\n </Scroller>\n )}\n </Table.Td>\n )}\n </Table.Tr>\n ))}\n </Table.Tbody>\n </Table>\n )}\n\n {linkCount > 0 && (\n <div>\n <div className=\"mb-1 text-sm font-semibold uppercase tracking-wider text-base-darker\">\n Links\n </div>\n <div className=\"flex flex-col gap-0.5\">\n {node.links.map((link, i) => (\n <div key={i} className=\"text-sm text-base-darker\">\n <span className=\"font-mono\">{link.name}</span>\n <span className=\"text-base-dark\"> → </span>\n <span className=\"text-utility-category3\">\n {link.target_type}\n </span>\n {link.multiplicity && (\n <span className=\"text-xs text-base-dark\">\n {' '}\n ({link.multiplicity})\n </span>\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n};\n\nexport default CompactDictionaryPanel;\n","import React from 'react';\nimport { Tabs } from '@mantine/core';\nimport { Icon } from '@iconify-icon/react';\nimport CodingAssistantPanel from './CodingAssistantPanel';\nimport CompactDictionaryPanel from './CompactDictionaryPanel/CompactDictionaryPanel';\nimport { PanelErrorBoundary } from '@gen3/frontend';\n\nexport interface DataToolsPanelProps {\n schemaUrl?: string;\n kbUrl?: string;\n}\n\nconst DEFAULT_DICTIONARY_SCHEMA_URL = '_dictionary/_all';\nconst ICON_SIZE = 16;\n\ntype Tab = 'dictionary' | 'assistant';\n\nconst TABS: Array<{ id: Tab; label: string; icon: React.ReactNode }> = [\n {\n id: 'dictionary',\n label: 'Dictionary',\n icon: (\n <Icon\n icon=\"gen3:compact-dictionary\"\n width={ICON_SIZE}\n height={ICON_SIZE}\n />\n ),\n },\n /*\n {\n id: 'assistant',\n label: 'AI Assistant',\n icon: <Icon icon=\"gen3:ai-chat\" width={ICON_SIZE} height={ICON_SIZE} />,\n },\n */\n];\n\nconst DataToolsPanel = ({\n schemaUrl = DEFAULT_DICTIONARY_SCHEMA_URL,\n kbUrl,\n}: DataToolsPanelProps) => {\n return (\n <div className=\"flex flex-col h-full\">\n <Tabs\n defaultValue=\"dictionary\"\n variant=\"outline\"\n classNames={{ root: 'flex flex-col p-2 h-full' }}\n keepMounted\n >\n {/* Tab bar */}\n <Tabs.List className=\"bg-base-max\">\n {TABS.map((tab) => (\n <Tabs.Tab value={tab.id} leftSection={tab.icon} key={tab.id}>\n {tab.label}\n </Tabs.Tab>\n ))}\n </Tabs.List>\n {/* Tab content */}\n <div className=\"flex-1 min-h-0 h-full pt-4\">\n <PanelErrorBoundary>\n <Tabs.Panel value=\"dictionary\" className=\"h-full\">\n <CompactDictionaryPanel schemaUrl={schemaUrl} />\n </Tabs.Panel>\n <Tabs.Panel value=\"assistant\">\n <CodingAssistantPanel schemaUrl={schemaUrl} kbUrl={kbUrl} />\n </Tabs.Panel>\n </PanelErrorBoundary>\n </div>\n </Tabs>\n </div>\n );\n};\n\nexport default DataToolsPanel;\n","import React from 'react';\nimport DataToolsPanel from '../../components/DataToolsPanel';\n\nimport HorizontalAccordion from '../../components/HorizontalAccordian';\n\ninterface ToolsPanelProps {\n expanded: boolean;\n setExpanded: (_arg: boolean) => void;\n width?: number;\n}\n\nconst ToolsPanel = ({\n expanded = true,\n setExpanded = () => {},\n width = 310,\n}: ToolsPanelProps) => {\n return (\n <HorizontalAccordion\n label=\"Data & Tools\"\n expanded={expanded}\n setExpanded={setExpanded}\n expandedWidth={width}\n >\n <DataToolsPanel />\n </HorizontalAccordion>\n );\n};\n\nexport default ToolsPanel;\n","import React, { ReactNode, useEffect } from 'react';\n\nimport SettingsPanel from '../../workspace/WorkspaceLayout/SettingsPanel';\nimport WorkspaceToolbar from './WorkspaceToolbar';\nimport { useDisclosure, useResizeObserver } from '@mantine/hooks';\nimport {\n CoreState,\n selectWorkspaceFullscreen,\n selectWorkspaceTier,\n useCoreSelector,\n} from '@gen3/core';\nimport { WorkspaceTier } from '../../types';\nimport ToolsPanel from './ToolsPanel';\nimport {\n FreeWorkspaceTierConfiguration,\n RemoteComputeWorkspaceTierConfiguration,\n} from '../tiers/types';\n\ninterface WorkspaceLayoutProps {\n children: ReactNode;\n className?: string;\n /** Extra content rendered in the toolbar row, between fullscreen and Hide Tools. */\n toolbarExtra?: ReactNode;\n tierConfiguration:\n | FreeWorkspaceTierConfiguration\n | RemoteComputeWorkspaceTierConfiguration;\n}\n\nconst WorkspaceLayout = ({\n children,\n tierConfiguration,\n}: WorkspaceLayoutProps) => {\n const workspaceTier = useCoreSelector(\n (state: CoreState) => selectWorkspaceTier(state) as WorkspaceTier | null,\n );\n const [toolsExpanded, { set: setToolsExpanded }] = useDisclosure(true);\n const [settingsExpanded, { set: setSettingsExpanded }] = useDisclosure(true);\n const [toolbarRef, toolbarRect] = useResizeObserver<HTMLDivElement>();\n\n const isFullScreen = useCoreSelector((state) =>\n selectWorkspaceFullscreen(state),\n );\n\n useEffect(() => {\n if (isFullScreen) {\n setToolsExpanded(false);\n setSettingsExpanded(false);\n } else {\n setToolsExpanded(true);\n setSettingsExpanded(true);\n }\n }, [isFullScreen, setSettingsExpanded, setToolsExpanded]);\n\n if (!workspaceTier) return null;\n\n return (\n <div className=\"flex flex-col w-full grow\">\n <WorkspaceToolbar\n toolbarConfiguration={tierConfiguration.toolbar}\n ref={toolbarRef}\n />\n <div\n className=\"flex w-full nowrap\"\n style={{\n height: `calc(100% - ${toolbarRect?.height ?? 0}px`,\n }}\n >\n {tierConfiguration.dataAndTools.enabled && (\n <ToolsPanel\n expanded={toolsExpanded}\n setExpanded={setToolsExpanded}\n width={tierConfiguration.dataAndTools.width}\n />\n )}\n {children}\n {tierConfiguration.settings.enabled && (\n <SettingsPanel\n showKernels={tierConfiguration.settings.showKernels}\n expanded={settingsExpanded}\n setExpanded={setSettingsExpanded}\n width={tierConfiguration.settings.width}\n />\n )}\n </div>\n </div>\n );\n};\n\nexport default WorkspaceLayout;\n","import React, { useMemo } from 'react';\nimport TierSelectorLanding from '../components/TierSelectorLanding';\nimport FreeWorkspace from './tiers/FreeWorkspace';\nimport RemoteWorkspace from './tiers/RemoteComputeWorkspace';\nimport { WorkspacesCenterConfiguration } from '../workspace/types';\nimport { RemoteComputeWorkspaceTierConfiguration } from '../workspace/tiers/types';\nimport WorkspaceLayout from '../workspace/WorkspaceLayout/WorkspaceLayout';\nimport {\n CoreState,\n selectWorkspaceTier,\n setWorkspaceTier,\n useCoreDispatch,\n useCoreSelector,\n useUserAuth,\n} from '@gen3/core';\nimport { MicroContainerReduxProvider } from '../providers/MicroContainerReduxProvider';\nimport { Card, Center } from '@mantine/core';\nimport { ProtectedContent } from '@gen3/frontend';\n\nexport type WorkspaceAuthContext = {\n username?: string;\n rbac?: string[];\n abac?: Record<string, unknown>;\n tenantId?: string;\n workspaceId?: string;\n};\n\nconst WorkspaceCenter = ({\n workspaces,\n landingPage,\n tierConfiguration,\n}: WorkspacesCenterConfiguration) => {\n // get the workspace tier from the core store allowing persistent state across page reloads and navigation changes\n const workspaceTier = useCoreSelector((state: CoreState) =>\n selectWorkspaceTier(state),\n );\n\n const coreDispatch = useCoreDispatch();\n\n const handleSelectTier = (tier: string) => {\n coreDispatch(setWorkspaceTier(tier));\n };\n\n const { data: userData } = useUserAuth(false);\n\n const isDevelopment = process.env.NODE_ENV !== 'production';\n\n const username =\n userData?.username ||\n userData?.preferred_username ||\n userData?.email ||\n undefined;\n\n const authContext = useMemo<WorkspaceAuthContext>(() => {\n if (isDevelopment) {\n return {\n username: username || 'dev-local-user',\n jwt: process.env.JEG_WORKSPACE_DEV_LOCAL_JWT ?? '',\n rbac: userData?.authz ? Object.keys(userData.authz) : [],\n abac: { devBypass: true },\n };\n }\n\n return {\n username,\n rbac: userData?.authz ? Object.keys(userData.authz) : [],\n abac: {},\n };\n }, [isDevelopment, userData, username]);\n\n if (!workspaceTier) {\n return (\n <div className=\"w-full h-full overflow-hidden bg-base-lightest \">\n <TierSelectorLanding\n cards={workspaces}\n onSelectTier={handleSelectTier}\n label={landingPage?.label}\n description={landingPage?.description}\n additionalDescriptions={landingPage?.additionalDescriptions}\n classNames={landingPage?.classNames}\n />\n </div>\n );\n }\n\n if (workspaceTier === 'free') {\n return (\n <WorkspaceLayout tierConfiguration={tierConfiguration.free}>\n <FreeWorkspace />\n </WorkspaceLayout>\n );\n }\n\n if (workspaceTier === 'remote') {\n const config =\n tierConfiguration.remote as RemoteComputeWorkspaceTierConfiguration;\n return (\n <ProtectedContent>\n <MicroContainerReduxProvider\n enabled={true}\n startTimeLimit={config?.startTimeLimit}\n >\n <WorkspaceLayout tierConfiguration={tierConfiguration.remote}>\n <RemoteWorkspace\n tenantId={authContext?.tenantId || 'default'}\n workspaceId={authContext?.workspaceId || 'workspace-default'}\n userId={authContext?.username || 'anonymous'}\n enableOptions={config?.enableOptions}\n />\n </WorkspaceLayout>\n </MicroContainerReduxProvider>\n </ProtectedContent>\n );\n }\n return (\n <Card shadow=\"sm\" padding=\"lg\" withBorder>\n <Center>\n Workspaces are not configured correctly or are not supported by this\n instance. Please contact your administrator.\n </Center>\n </Card>\n );\n};\n\nexport default WorkspaceCenter;\n","import { WorkspacesPageLayoutProps } from './types';\nimport React, { JSX } from 'react';\nimport { FixedNavPageLayout } from '@gen3/frontend';\nimport WorkspaceCenter from '../../workspace/WorkspaceCenter';\n\nimport { selectWorkspaceFullscreen, useCoreSelector } from '@gen3/core';\n\nconst WorkspacesCenterPage = ({\n headerProps,\n footerProps,\n configuration,\n}: WorkspacesPageLayoutProps): JSX.Element => {\n const isFullScreen = useCoreSelector((state) =>\n selectWorkspaceFullscreen(state),\n );\n\n return (\n <FixedNavPageLayout\n headerProps={headerProps}\n footerProps={{ ...footerProps, hideFooter: isFullScreen }}\n headerMetadata={{\n title: 'Gen3 Workspace Page',\n content: 'Workspace page',\n key: 'gen3-workspace-page',\n ...(configuration?.headerMetadata ? configuration.headerMetadata : {}),\n }}\n >\n <WorkspaceCenter {...configuration} />\n </FixedNavPageLayout>\n );\n};\n\nexport default WorkspacesCenterPage;\n","import { GetServerSideProps } from 'next';\nimport { merge } from 'lodash';\nimport { ContentSource, getNavPageLayoutPropsFromConfig } from '@gen3/frontend';\nimport {\n WorkspacesCenterPageConfiguration,\n WorkspacesPageLayoutProps,\n} from './types';\nimport { GEN3_COMMONS_NAME } from '@gen3/core';\nimport { WorkspaceTier } from '../../types';\nimport {\n FreeWorkspaceTierConfiguration,\n RemoteComputeWorkspaceTierConfiguration,\n} from '../../workspace/tiers/types';\n\nconst DEFAULT_WORKSPACES_CONFIGURATION: WorkspacesCenterPageConfiguration = {\n workspaces: {},\n tierConfiguration: {\n free: {\n baseUrl:\n process.env.FREE_WORKSPACE_ASSETS_BASE_URL ??\n '/api/workspace-assets/free',\n toolbar: {\n label: 'JupyterLite',\n description: 'Running via JupyterLite',\n showStop: false,\n showStatus: false,\n },\n settings: {\n enabled: true,\n showKernels: false,\n },\n dataAndTools: {\n enabled: true,\n tabs: [\n {\n label: 'Dictionary',\n description: 'Data Dictionary',\n app: 'dictionary',\n },\n ],\n width: 300,\n },\n },\n remote: {\n baseUrl:\n process.env.REMOTE_COMPUTE_WORKSPACE_ASSETS_BASE_URL ??\n '/api/workspace-assets/remote',\n enableOptions: false,\n toolbar: {\n label: 'Trusted Research Environment',\n description: 'Running with Remote Kernels',\n showStop: true,\n showStatus: true,\n },\n settings: {\n enabled: true,\n showKernels: true,\n },\n dataAndTools: {\n enabled: true,\n tabs: [\n {\n label: 'Dictionary',\n description: 'Data Dictionary',\n app: 'dictionary',\n },\n ],\n },\n },\n } as Record<\n WorkspaceTier,\n FreeWorkspaceTierConfiguration | RemoteComputeWorkspaceTierConfiguration\n >,\n};\n\nexport const WorkspacesCenterPageGetServerSideProps: GetServerSideProps<\n WorkspacesPageLayoutProps\n> = async () => {\n try {\n const workspacesCenterConfiguration: WorkspacesCenterPageConfiguration =\n await ContentSource.getContentDatabase().get(\n `${GEN3_COMMONS_NAME}/workspaces.json`,\n );\n\n const mergedConfiguration = merge(\n {},\n DEFAULT_WORKSPACES_CONFIGURATION,\n workspacesCenterConfiguration,\n );\n\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n configuration: mergedConfiguration,\n },\n };\n } catch (error: unknown) {\n if (error instanceof Error) {\n console.warn('Error fetching query configuration:', error.message);\n console.warn('Returning default configuration');\n }\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n configuration: DEFAULT_WORKSPACES_CONFIGURATION,\n },\n };\n }\n};\n"],"names":["WorkspaceTierCard","label","description","tier","tierLabel","undefined","features","tooltip","buttonLabel","onSelectTier","baseColor","handleClick","useCallback","icon","_jsx","span","className","Icon","width","height","_jsxs","Card","withBorder","radius","style","display","flexDirection","backgroundColor","Section","inheritPadding","py","Stack","align","Badge","classNames","root","color","size","fw","justify","Text","c","List","listStyleType","map","feature","Item","marginTop","Group","Tooltip","Button","aria-label","variant","rightSection","onClick","tt","DEFAULT_CLASSNAMES","background","additionalDescription","button","TierSelectorLanding","cards","additionalDescriptions","mergedClassnames","useMemo","mergeDefaultTailwindClassnames","Container","gap","desc","slice","SimpleGrid","cols","base","sm","md","lg","spacing","role","Object","values","card","FreeWorkspace","assetBaseUrl","onReady","onError","loading","setLoading","useState","loadError","setLoadError","retryCount","setRetryCount","jupyterReady","setJupyterReady","iframeRef","useRef","broadcastChannelRef","url","handleRetry","n","useEffect","current","BroadcastChannel","ACTIVITY_CHANNEL","close","updateUserActivity","postMessage","type","timestamp","Date","now","iframe","usedDirectListeners","contentWindow","iframeDoc","contentDocument","document","addEventListener","window","removeEventListener","div","shadow","padding","w","maw","mt","LoadingOverlay","visible","src","border","ref","title","sandbox","allow","onLoad","Error","sanitizeSegment","s","normalize","replace","generateScopedNotebookPath","opts","tenantId","workspaceId","userId","notebookName","GEN3_HATCHERY_API","GEN3_WORKSPACE_API","GEN3_KERNEL_API","process","env","GEN3_API","GEN3_JEG_GATEWAY_API","JEG_GATEWAY_API","HatcheryServiceState","HatcheryWithTags","gen3Api","enhanceEndpoints","addTagTypes","StatusStringToHatcheryServiceStatus","launching","running","stopped","terminating","unknown","hatcheryApi","injectEndpoints","endpoints","builder","doesHatcheryOptionExists","query","transformResponse","response","_meta","tag","match","find","o","name","includes","hash","id","hatcheryOptions","workspace","idleTimeLimit","memoryLimit","cpuLimit","hatcheryStatus","containerHash","encodeURIComponent","transformErrorResponse","_error","status","error","lastActivity","workspaceType","results","toLowerCase","lastActivityTime","launchHatcheryWorkspace","mutation","method","responseHandler","ok","text","invalidatesTags","terminateHatcheryWorkspace","overrideExisting","useDoesHatcheryOptionExistsQuery","useHatcheryOptionsQuery","useLazyHatcheryOptionsQuery","useHatcheryStatusQuery","useLazyHatcheryStatusQuery","useLaunchHatcheryWorkspaceMutation","useTerminateHatcheryWorkspaceMutation","isFetchBaseQueryErrorShape","hasMessageProperty","obj","hasErrorProperty","extractMessageFromData","data","String","message","JSON","stringify","extractFetchBaseQueryErrorMessage","getRTKQErrorMessage","getWorkspaceErrorMessage","defaultMessage","isFetchBaseQueryError","useMicroContainerRedux","enabled","workspaceContainerStatus","useCoreSelector","selectJEGActiveWorkspaceStatus","setContainerHash","coreDispatch","useCoreDispatch","optionData","skip","launchTrigger","isError","isWorkspaceLaunchError","workspaceLaunchError","terminateWorkspace","isTerminateError","workspaceTerminateError","useDeepCompareEffect","errorMessage","console","setJEGActiveWorkspaceStatus","WorkspaceStatus","LaunchError","TerminateError","setJEGRequestedWorkspaceStatus","RequestedWorkspaceStatus","Unset","launch","Launching","Running","isTagString","Launch","launchResults","unwrap","setJEGActiveWorkspaceId","terminate","Terminating","containerId","Terminate","hatcheryStateToWorkspaceStatus","state","Stopped","Errored","NotFound","MAXIMUM_START_TIME_IN_MINUTES","notifyUser","NotificationMap","notifications","clean","show","position","WorkspacePollingInterval","convertSecondsToMilliseconds","StatusError","workspaceShutdownAlertLimit","useJEGWorkspaceResourceMonitor","monitorWorkspace","startTimeLimit","pollingInterval","setPollingInterval","setError","workspaceStatusData","isWorkspaceStatusError","workspaceStatusError","refetchOnMountOrArgChange","refetchOnFocus","activeStatus","requestedStatus","selectJEGRequestedWorkspaceStatus","requestedStatusTimestamp","selectJEGRequestedWorkspaceStatusTimestamp","dispatch","log","workspaceQueryStatus","warn","remainingWorkspaceKernelLife","isTimeGreaterThan","MicroContainerReduxProviderContext","createContext","Promise","resolve","useMicroContainerReduxContext","context","React","useContext","MicroContainerReduxProvider","children","identifierTag","NEXT_PUBLIC_MICRO_CONTAINER_TAG","value","Provider","PanelStyle","MicroContainerReduxPanel","enableOptions","isLoading","isHatcheryOptionsLoading","isHatcheryOptionsError","workspaceOptionSelected","setWorkspaceOptionSelected","resetStatus","elapsedSec","setElapsedSec","interval","useInterval","elapsed","Math","floor","start","stop","t","setTimeout","clearTimeout","simpleLaunchWorkspaceBtn","launchWorkspaceBtn","Loader","Alert","length","workspaceOptionLaunch","hatcheryOptionForSelect","Select","MdExpandMore","aria-hidden","withCheckIcon","placeholder","onChange","_value","option","input","disabled","p","RemoteComputeWorkspace","memo","forwardRef","normalizedBase","scopedNotebookPath","userHash","btoa","substring","mounted","attempts","maxAttempts","poll","app","jupyterapp","started","attachKernel","kernelId","kernelName","serviceManager","sessions","startNew","path","kernel","err","useImperativeHandle","isReady","displayName","KernelWithTags","kernelApi","kernels","executionState","execution_state","last_activity","kernalSpecs","res","kernelspecs","reduce","acc","push","spec","display_name","language","nodeType","metadata","kernelsList","useKernelsQuery","useKernalSpecsQuery","useKernelsListQuery","GatewayWithTags","jegGatewayApi","activeKernels","validateStatus","redirected","providesTags","jegGatewayStatus","launchKernel","body","terminateKernel","reapKernels","useActiveKernelsQuery","useLaunchKernelMutation","useTerminateKernelMutation","useJegGatewayStatusQuery","useReapKernelsMutation","select","ActiveKernelInfoPanel","uptimeMinutes","forceTerminate","rowSpec","connections","isTerminatingLoading","isStaleOrIdle","formatUptimeInMinutes","Divider","gpuType","toLocaleString","cpu","memory","strong","fullWidth","TextStyle","ActiveKernelsPanel","selectFromResult","persistedActiveKernels","selectJEGKernelIds","liveIds","Set","k","staleIds","filter","has","removeManyJEGActiveKernels","upsertManyJEGActiveKernels","kernelSpecs","isFetching","isFetchingKernelSpecs","isErrorKernelSpecs","errorKernelSpecs","normalizedError","normalizeRtkError","isAuthError","kernelUptime","getTime","ConnectionStatusBadge","leftSection","aria-live","GatewayConnectionPanel","gatewayStatus","onRetryConnection","onRunStaleReap","onRetry","KernelSelector","handleLaunchKernel","isLaunchingLoading","onKernelSelectionChange","selectedKernelName","setSelectedKernelName","prev","selectedSpec","selectedSpecCost","costPerHour","resourceTags","gpu","Boolean","InfoRolloverButton","parts","resources","join","cost","toFixed","useGatewayConnectionStatus","setGatewayStatus","gatewayMessage","setGatewayMessage","setGatewayStatusAndMessage","gatewayStatusData","isGatewayFetching","gatewayServiceStatus","MAX_KERNELS_ACTIVE","KernelLifecyclePanel","activeKernelName","notice","numActiveKernels","selectAllJEGKernels","addJEGActiveKernel","activeKernelSpec","billingActive","PanelHeaderTextStyle","UpgradeActionsPanel","currentTier","onUpgradeToRemote","onRequestQuotaIncrease","onOpenBillingSupport","canUpgrade","section","wrap","_Fragment","TRANSITION_MS","ICON_SIZE","STYLING_DEFAULTS","header","HorizontalAccordion","expanded","setExpanded","expandedWidth","collapsedWidth","rightSide","closeIcon","openIcon","mergedClassNames","transition","opacity","transform","ActionIcon","pointerEvents","SettingsPanel","showKernels","selectWorkspaceTier","setWorkspaceTier","PaymentNumberToString","x","undefinedValue","precision","Number","isNaN","isNoPayModelError","originalStatus","CostTracker","workspaceAccountManagerTarget","useGetWorkspacePayModelsQuery","setWorkspacePayModel","useSetCurrentPayModelMutation","selectedPayModel","setSelectedPayModel","opened","setOpened","useDeepCompareCallback","usersPayModels","workspaceName","hardLimit","totalUsage","useDeepCompareMemo","allPayModels","payModel","bmh_workspace_id","workspace_type","currentPayModel","request_status","ActiveIcon","InactiveIcon","PayModelError","Popover","trapFocus","Target","Dropdown","component","href","target","MdOpenInNew","ProgressBar","Progress","my","Accordion","control","chevron","panel","content","Control","Panel","Radio","checked","Indicator","WorkspaceToolbar","toolbarConfiguration","workspaceTier","workspaceStatus","isFullscreen","selectWorkspaceFullscreen","showStatus","showStop","requirePayModel","toggleFullscreen","setWorkspaceFullscreen","returnToWorkspaceSelection","fullscreenLabel","statusLabel","aria-atomic","aria-disabled","aria-pressed","DEFAULT_OLLAMA_URL","streamOpenAI","config","messages","systemPrompt","allMessages","fetch","headers","Authorization","apiKey","model","m","stream","catch","statusText","readSSEStream","json","choices","delta","streamAnthropic","userMessages","max_tokens","system","streamGemini","contents","systemInstruction","candidates","streamOllama","ollamaUrl","reader","getReader","decoder","TextDecoder","buffer","done","read","decode","lines","split","pop","line","trim","parse","releaseLock","extractText","startsWith","sendMessage","provider","DEFAULT_MODELS","openai","anthropic","gemini","ollama","MODEL_OPTIONS","parseSchemaNodes","schema","raw","properties","definitions","nodes","def","entries","props","defProps","v","vTyped","oneOf","enum","Array","isArray","links","link","backref","target_type","targetType","multiplicity","category","namespace","required","sort","a","b","localeCompare","buildDictionaryContext","node","fieldLines","info","KB_CACHE_KEY","getKBCache","sessionStorage","getItem","setKBCache","cache","setItem","chunkText","maxLen","paragraphs","chunks","para","trimmed","sentences","sentence","scorePassage","passage","queryWords","lower","score","word","buildKBContext","kbUrl","topN","cached","passages","fetchedAt","controller","AbortController","timeoutId","abort","signal","scored","i","index","BASE_SYSTEM_PROMPT","buildSystemPrompt","dictionaryContext","kbContext","useCodeInjector","iframeReady","setIframeReady","lastEditorRef","check","querySelector","doc","activeCell","cmContent","view","cmView","setInterval","clearInterval","insertCode","code","isConnected","cursor","selection","main","head","changes","from","insert","anchor","focus","getSelection","selectAllChildren","collapseToEnd","inserted","execCommand","textContent","dispatchEvent","Event","bubbles","textarea","selectionStart","selectionEnd","MessageBubble","onInsert","isUser","renderedContent","lastIndex","re","exec","lang","pre","streaming","STORAGE_PREFIX","loadSetting","key","fallback","saveSetting","CodingAssistantPanel","schemaUrl","onInsertCode","setProvider","setApiKey","setModel","setOllamaUrl","showSettings","setShowSettings","setMessages","setInput","setStreaming","messagesEndRef","dictContext","setDictContext","cancelled","timeout","scrollIntoView","behavior","llmConfig","handleSend","userMsg","assistantMsg","chatHistory","kbCtx","fullText","chunk","handleInsert","handleKeyDown","e","shiftKey","preventDefault","clearChat","needsApiKey","isConfigured","settingsForm","TextInput","some","InfoIcon","SettingsIcon","q","msg","Textarea","onKeyDown","rows","FieldLinkCountBadge","fieldsCount","linksCount","CompactDictionaryPanel","useElementSize","isNarrow","isCompact","setNodes","search","setSearch","expandedId","setExpandedId","isSuccess","useGetDictionaryFromUrlQuery","filtered","keys","parsed","isExpanded","propCount","linkCount","aria-expanded","DownArrowIcon","RightArrowIcon","Table","Thead","Tr","Th","Tbody","Td","Scroller","draggable","OverflowTooltippedLabel","noTruncate","DEFAULT_DICTIONARY_SCHEMA_URL","TABS","DataToolsPanel","Tabs","defaultValue","keepMounted","tab","Tab","PanelErrorBoundary","ToolsPanel","WorkspaceLayout","tierConfiguration","toolsExpanded","set","setToolsExpanded","useDisclosure","settingsExpanded","setSettingsExpanded","toolbarRef","toolbarRect","useResizeObserver","isFullScreen","toolbar","dataAndTools","settings","WorkspaceCenter","workspaces","landingPage","handleSelectTier","userData","useUserAuth","isDevelopment","NODE_ENV","username","preferred_username","email","authContext","jwt","JEG_WORKSPACE_DEV_LOCAL_JWT","rbac","authz","abac","devBypass","free","remote","ProtectedContent","RemoteWorkspace","Center","WorkspacesCenterPage","headerProps","footerProps","configuration","FixedNavPageLayout","hideFooter","headerMetadata","DEFAULT_WORKSPACES_CONFIGURATION","baseUrl","FREE_WORKSPACE_ASSETS_BASE_URL","tabs","REMOTE_COMPUTE_WORKSPACE_ASSETS_BASE_URL","WorkspacesCenterPageGetServerSideProps","workspacesCenterConfiguration","ContentSource","getContentDatabase","get","GEN3_COMMONS_NAME","mergedConfiguration","merge","getNavPageLayoutPropsFromConfig"],"mappings":"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"}
|