@agiflowai/agent-cli 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.js","sources":["../src/systems/cli/apps/daemon/components/DaemonConnectionManager.tsx","../src/systems/cli/apps/daemon/components/TokenInput.tsx","../src/systems/cli/apps/daemon/guards/OauthSetup.tsx","../src/systems/cli/apps/daemon/components/AgentTabs.tsx","../src/systems/cli/apps/daemon/screens/Agents/index.tsx","../src/systems/cli/apps/daemon/screens/Onboarding/index.tsx","../src/systems/cli/apps/daemon/index.tsx"],"sourcesContent":["import { cliContainer } from '@cli/container';\nimport React, { useEffect, useRef } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport type { DaemonManager } from '@/services';\nimport type { AppDispatch } from '@/store';\nimport { RootState } from '@/store';\nimport { launchDaemon } from '@/store/slices/daemonStatusSlice';\nimport { GLOBAL_TYPES } from '@/types';\nimport { useInk } from '../../../contexts/InkContext';\nimport { clearShutdownCallback, setShutdownCallback } from '../../../services/StdinManager';\n\ninterface DaemonConnectionManagerProps {\n children: React.ReactNode;\n}\n\nexport const DaemonConnectionManager: React.FC<DaemonConnectionManagerProps> = ({ children }) => {\n const { Box, Text } = useInk();\n const dispatch = useDispatch<AppDispatch>();\n const status = useSelector((state: RootState) => state.daemonStatus.status);\n const error = useSelector((state: RootState) => state.daemonStatus.error);\n const isShuttingDown = useRef(false);\n\n useEffect(() => {\n dispatch(launchDaemon());\n\n // Register shutdown callback for Ctrl+C handling\n const handleShutdown = async () => {\n if (isShuttingDown.current) return;\n isShuttingDown.current = true;\n\n try {\n const daemonManager = cliContainer.get<DaemonManager>(GLOBAL_TYPES.DaemonManager);\n if (daemonManager.isRunning()) {\n await daemonManager.stop();\n }\n } catch {\n // Ignore errors during shutdown\n }\n // daemonManager.stop() calls process.exit() at the end\n };\n\n setShutdownCallback(handleShutdown);\n\n return () => {\n clearShutdownCallback();\n };\n }, [dispatch]);\n\n if (status === 'starting') {\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Text color=\"yellow\">Connecting to Agiflow...</Text>\n </Box>\n );\n }\n\n if (status === 'error') {\n return (\n <Box flexDirection=\"column\" padding={1} borderStyle=\"round\" borderColor=\"red\">\n <Text color=\"red\" bold>\n Connection Error\n </Text>\n <Text>{error}</Text>\n <Text dimColor>Retrying in background...</Text>\n </Box>\n );\n }\n\n if (status === 'connected') {\n return <>{children}</>;\n }\n\n return null;\n};\n","import React, { useRef, useState } from 'react';\nimport { useInk } from '../../../contexts/InkContext';\n\ninterface TokenInputProps {\n onSubmit: (token: string) => void;\n onCancel?: () => void;\n}\n\nexport const TokenInput: React.FC<TokenInputProps> = ({ onSubmit, onCancel }) => {\n const { Box, Text, useInput } = useInk();\n const [value, setValue] = useState('');\n const valueRef = useRef('');\n\n useInput((input, key) => {\n // Ctrl+C clears text if there's any, otherwise allows default behavior (exit)\n if (key.ctrl && input === 'c' && valueRef.current.length > 0) {\n valueRef.current = '';\n setValue('');\n return;\n }\n\n if (key.return) {\n const currentValue = valueRef.current.trim();\n if (currentValue) {\n onSubmit(currentValue);\n }\n return;\n }\n\n if (key.escape) {\n onCancel?.();\n return;\n }\n\n if (key.backspace || key.delete) {\n const newValue = valueRef.current.slice(0, -1);\n valueRef.current = newValue;\n setValue(newValue);\n return;\n }\n\n if (input && !key.ctrl && !key.meta) {\n const newValue = valueRef.current + input;\n valueRef.current = newValue;\n setValue(newValue);\n }\n });\n\n return (\n <Box flexDirection=\"column\">\n <Text>\n <Text bold color=\"cyan\">\n Token:{' '}\n </Text>\n <Text color=\"green\">{value.length > 0 ? `${value.slice(0, 20)}...` : <Text dimColor>(paste token)</Text>}</Text>\n </Text>\n <Text dimColor>\n <Text bold>Enter</Text> to submit • <Text bold>Esc</Text> to cancel\n </Text>\n </Box>\n );\n};\n","import { cliContainer } from '@cli/container';\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport React, { useEffect, useState } from 'react';\nimport { CredentialsService, DeviceCodeAuthService, type DeviceCodeResponse } from '@/services';\nimport { GLOBAL_TYPES } from '@/types';\nimport { useInk } from '../../../contexts/InkContext';\nimport { TokenInput } from '../components/TokenInput';\n\ninterface OauthSetupProps {\n children: (props: { isAuthenticated: boolean }) => React.ReactNode;\n}\n\nexport const OauthSetup: React.FC<OauthSetupProps> = ({ children }) => {\n const { Box, Text, Newline, Static, Link } = useInk();\n const queryClient = useQueryClient();\n const [deviceCode, setDeviceCode] = useState<DeviceCodeResponse | null>(null);\n const [showTokenInput, setShowTokenInput] = useState(false);\n\n // Get services from DI container\n const authService = cliContainer.get<DeviceCodeAuthService>(GLOBAL_TYPES.DeviceCodeAuthService);\n const credentialsService = cliContainer.get<CredentialsService>(GLOBAL_TYPES.CredentialsService);\n\n // Check existing authentication\n const { data: existingAuth, isLoading: isCheckingAuth } = useQuery({\n queryKey: ['auth', 'check'],\n queryFn: async () => {\n const creds = await credentialsService.load();\n if (creds && creds.apiKey && creds.expiresAt && authService.isTokenValid(creds.expiresAt)) {\n return { authenticated: true };\n }\n return { authenticated: false };\n },\n retry: false,\n });\n\n // Request device code\n const deviceCodeMutation = useMutation({\n mutationFn: async () => {\n const baseUrl = authService.getServerUrl();\n const clientId = authService.getClientId();\n\n const response = await fetch(`${baseUrl}/api/v1/oauth/device/authorize`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n client_id: clientId,\n scope: 'openid profile email',\n }),\n });\n\n if (!response.ok) {\n const errorData = await response.json();\n throw new Error(errorData.error_description || `Device authorization failed: ${response.status}`);\n }\n\n return response.json() as Promise<DeviceCodeResponse>;\n },\n onSuccess: (data) => {\n setDeviceCode(data);\n setShowTokenInput(true);\n },\n });\n\n // Verify token mutation\n const verifyTokenMutation = useMutation({\n mutationFn: async (token: string) => {\n if (!deviceCode) {\n throw new Error('Device code not available');\n }\n const apiKeyToken = await authService.exchangeTokenForApiKey(token, deviceCode.device_code);\n // Save to credentials.json\n await credentialsService.setApiKey({\n apiKey: apiKeyToken.api_key,\n organizationId: apiKeyToken.organization_id,\n expiresAt: apiKeyToken.expires_at,\n deviceId: apiKeyToken.device_id,\n });\n return { success: true };\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['auth', 'check'] });\n },\n });\n\n // Trigger device code request when not authenticated\n useEffect(() => {\n if (existingAuth && !existingAuth.authenticated && !deviceCodeMutation.isPending && !deviceCode) {\n deviceCodeMutation.mutate();\n }\n }, [existingAuth, deviceCodeMutation, deviceCode]);\n\n // Authenticated - render children\n if (existingAuth?.authenticated) {\n return <>{children({ isAuthenticated: true })}</>;\n }\n\n // Checking authentication\n if (isCheckingAuth) {\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Box marginBottom={1}>\n <Text bold color=\"cyan\">\n 🔐 Agiflow Authentication\n </Text>\n </Box>\n <Box borderStyle=\"round\" borderColor=\"cyan\" padding={1}>\n <Box flexDirection=\"column\">\n <Text>\n <Text color=\"cyan\">◉ </Text>\n <Text>Checking existing credentials...</Text>\n </Text>\n </Box>\n </Box>\n </Box>\n );\n }\n\n // Requesting device code\n if (deviceCodeMutation.isPending) {\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Box marginBottom={1}>\n <Text bold color=\"cyan\">\n 🔐 Agiflow Authentication\n </Text>\n </Box>\n <Box borderStyle=\"round\" borderColor=\"cyan\" padding={1}>\n <Box flexDirection=\"column\">\n <Text>\n <Text color=\"green\">✓ </Text>\n <Text dimColor>Checked existing credentials</Text>\n </Text>\n <Text>\n <Text color=\"cyan\">◉ </Text>\n <Text>Requesting device authorization...</Text>\n </Text>\n </Box>\n </Box>\n </Box>\n );\n }\n\n // Show authentication instructions\n if (deviceCode) {\n const verificationUrl = `${deviceCode.verification_uri}?code=${encodeURIComponent(deviceCode.user_code)}`;\n\n return (\n <>\n <Static items={[1]}>\n {() => (\n <Box flexDirection=\"column\" padding={1}>\n <Box marginBottom={1}>\n <Text bold color=\"cyan\">\n 🔐 Agiflow Authentication\n </Text>\n </Box>\n\n <Box borderStyle=\"round\" borderColor=\"green\" padding={1} marginBottom={1}>\n <Box flexDirection=\"column\">\n <Text>\n <Text color=\"green\">✓ </Text>\n <Text dimColor>Checked existing credentials</Text>\n </Text>\n <Text>\n <Text color=\"green\">✓ </Text>\n <Text dimColor>Device authorization requested</Text>\n </Text>\n <Text>\n <Text color=\"cyan\">◉ </Text>\n <Text bold>Waiting for browser confirmation</Text>\n </Text>\n </Box>\n </Box>\n\n <Box borderStyle=\"double\" borderColor=\"yellow\" padding={1} marginBottom={1}>\n <Box flexDirection=\"column\">\n <Text bold color=\"yellow\">\n 📋 Authentication Steps:\n </Text>\n <Newline />\n\n <Text>\n <Text bold color=\"cyan\">\n 1.{' '}\n </Text>\n <Text>Open this URL in your browser:</Text>\n </Text>\n <Box paddingLeft={3} marginBottom={1}>\n <Link url={verificationUrl}>\n <Text color=\"blue\" bold>\n {verificationUrl}\n </Text>\n </Link>\n </Box>\n\n <Text>\n <Text bold color=\"cyan\">\n 2.{' '}\n </Text>\n <Text>Enter this verification code:</Text>\n </Text>\n <Box paddingLeft={3} marginBottom={1} borderStyle=\"single\" borderColor=\"green\" paddingX={2}>\n <Text color=\"green\" bold>\n {deviceCode.user_code}\n </Text>\n </Box>\n\n <Text>\n <Text bold color=\"cyan\">\n 3.{' '}\n </Text>\n <Text>Sign in and authorize the device</Text>\n </Text>\n <Newline />\n\n <Text>\n <Text bold color=\"cyan\">\n 4.{' '}\n </Text>\n <Text>Copy the verification token (JWT) shown after confirmation</Text>\n </Text>\n <Newline />\n\n <Text dimColor>The browser will show a long token that starts with \"eyJ...\"</Text>\n </Box>\n </Box>\n\n <Box borderStyle=\"round\" borderColor=\"gray\" padding={1} marginBottom={1}>\n <Box flexDirection=\"column\">\n <Text dimColor>⏱️ Expires in: {Math.floor(deviceCode.expires_in / 60)} minutes</Text>\n <Text dimColor>💡 Tip: The URL includes your verification code for convenience</Text>\n </Box>\n </Box>\n </Box>\n )}\n </Static>\n\n {showTokenInput && (\n <Box borderStyle=\"round\" borderColor=\"cyan\" padding={1}>\n <TokenInput\n onSubmit={(token) => verifyTokenMutation.mutate(token)}\n onCancel={() => setShowTokenInput(false)}\n />\n </Box>\n )}\n </>\n );\n }\n\n // Verifying token\n if (verifyTokenMutation.isPending) {\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Box marginBottom={1}>\n <Text bold color=\"cyan\">\n 🔐 Agiflow Authentication\n </Text>\n </Box>\n <Box borderStyle=\"round\" borderColor=\"cyan\" padding={1}>\n <Box flexDirection=\"column\">\n <Text>\n <Text color=\"cyan\">◉ </Text>\n <Text>Verifying token...</Text>\n </Text>\n </Box>\n </Box>\n </Box>\n );\n }\n\n // Error state\n if (deviceCodeMutation.isError || verifyTokenMutation.isError) {\n const error = deviceCodeMutation.error || verifyTokenMutation.error;\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Box marginBottom={1}>\n <Text bold color=\"red\">\n ❌ Authentication Error\n </Text>\n </Box>\n <Box borderStyle=\"round\" borderColor=\"red\" padding={1} marginBottom={1}>\n <Text color=\"red\">{error?.message || 'Unknown error occurred'}</Text>\n </Box>\n <Box borderStyle=\"single\" borderColor=\"gray\" padding={1}>\n <Box flexDirection=\"column\">\n <Text dimColor>💡 Troubleshooting:</Text>\n <Text dimColor> • Check your internet connection</Text>\n <Text dimColor> • Verify the server URL is correct</Text>\n <Text dimColor> • Ensure the token is valid and not expired</Text>\n <Text dimColor> • Try running the daemon again</Text>\n <Newline />\n <Text dimColor>⌨️ Press Ctrl+C to exit</Text>\n </Box>\n </Box>\n </Box>\n );\n }\n\n // Default loading state\n return null;\n};\n","import React, { useMemo } from 'react';\nimport { shallowEqual, useSelector } from 'react-redux';\nimport type { AgentManager } from '@/services';\nimport { RootState } from '@/store';\nimport { GLOBAL_TYPES } from '@/types';\nimport { LaunchAgent } from '../../../components/LaunchAgent';\nimport { cliContainer } from '../../../container';\nimport { useInk } from '../../../contexts/InkContext';\nimport { AgentConfigService } from '../../../services/agent/AgentConfigService';\nimport { AGENT_TYPES } from '../../../types';\n\nconst isMacOS = process.platform === 'darwin';\n\ninterface TabIndicatorProps {\n tabId: string;\n}\n\ninterface TabItemProps {\n tabId: string;\n index: number;\n}\n\n/**\n * Memoized component to display unread count badge\n * Only re-renders when unreadCount or activeTabId changes for this specific tab\n */\nconst UnreadCount: React.FC<TabIndicatorProps> = React.memo(({ tabId }) => {\n const unreadCount = useSelector((state: RootState) => state.agentTabs.tabs.find((t) => t.id === tabId)?.unreadCount);\n const isActive = useSelector((state: RootState) => state.agentTabs.activeTabId === tabId);\n\n if (!unreadCount || unreadCount <= 0 || isActive) {\n return null;\n }\n\n return <> ({unreadCount})</>;\n});\n\nUnreadCount.displayName = 'UnreadCount';\n\n/**\n * Memoized component to display waiting input indicator (red dot)\n * Only re-renders when waitingInput or activeTabId changes for this specific tab\n */\nconst WaitingInputIndicator: React.FC<TabIndicatorProps> = React.memo(({ tabId }) => {\n const { Text } = useInk();\n const waitingInput = useSelector(\n (state: RootState) => state.agentTabs.tabs.find((t) => t.id === tabId)?.waitingInput,\n );\n const isActive = useSelector((state: RootState) => state.agentTabs.activeTabId === tabId);\n\n if (!waitingInput || isActive) {\n return null;\n }\n\n return <Text color=\"red\">● </Text>;\n});\n\nWaitingInputIndicator.displayName = 'WaitingInputIndicator';\n\n/**\n * Memoized component for individual tab rendering\n * Selects only the data it needs (id, label) to minimize re-renders\n */\nconst TabItem: React.FC<TabItemProps> = React.memo(({ tabId, index }) => {\n const { Box, Text } = useInk();\n const label = useSelector((state: RootState) => state.agentTabs.tabs.find((t) => t.id === tabId)?.label);\n const isActive = useSelector((state: RootState) => state.agentTabs.activeTabId === tabId);\n\n const fKeyLabel = `^F${index + 1}`;\n\n return (\n <Box marginRight={2} borderStyle={isActive ? 'round' : undefined}>\n <WaitingInputIndicator tabId={tabId} />\n <Text color={'#d1d5db'} bold={isActive} dimColor={!isActive}>\n [{fKeyLabel}] {label}\n <UnreadCount tabId={tabId} />\n </Text>\n <LaunchAgent tabId={tabId} />\n </Box>\n );\n});\n\nTabItem.displayName = 'TabItem';\n\nexport const AgentTabs: React.FC = () => {\n const { Box, Text } = useInk();\n // Only select tab IDs - won't re-render when other tab properties change\n const tabIds = useSelector((state: RootState) => state.agentTabs.tabs.map((t) => t.id), shallowEqual);\n const activeTabId = useSelector((state: RootState) => state.agentTabs.activeTabId);\n\n // Get the effective working directory for the active tab\n const activeWorkingDir = useMemo(() => {\n if (!activeTabId) return null;\n\n try {\n const agentManager = cliContainer.get<AgentManager>(GLOBAL_TYPES.AgentManager);\n const agentContainer = agentManager.getAgentContainer(activeTabId);\n\n if (agentContainer) {\n const agentConfigService = agentContainer.get<AgentConfigService>(AGENT_TYPES.AgentConfigService);\n return agentConfigService.getEffectiveWorkingDir();\n }\n } catch {\n // Container or service not available yet\n }\n\n return process.cwd();\n }, [activeTabId]);\n\n return (\n <Box flexDirection=\"column\" marginTop={1}>\n <Box alignItems=\"center\" borderTop borderTopColor={'#d1d5db'} borderDimColor>\n {tabIds.map((tabId, index) => (\n <TabItem key={tabId} tabId={tabId} index={index} />\n ))}\n </Box>\n {activeWorkingDir && <Text dimColor>{activeWorkingDir}</Text>}\n {isMacOS && <Text dimColor>Press fn + Shift + F[num] to switch tabs</Text>}\n </Box>\n );\n};\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { RootState } from '@/store';\nimport { StdinForwarder } from '@/systems/cli/components/StdinForwarder';\nimport { AgentView } from '../../../../components/AgentView';\nimport { BoxSizeMeasure } from '../../../../components/BoxSizeMeasure';\nimport { CAPermissionGuard } from '../../../../components/CAPermissionGuard';\nimport { useInk } from '../../../../contexts/InkContext';\nimport { AgentTabs } from '../../components/AgentTabs';\n\nexport const Agents: React.FC = () => {\n const { Box } = useInk();\n const activeTabId = useSelector((state: RootState) => state.agentTabs.activeTabId);\n // F-key tab switching is handled by StdinForwarder via escape sequences\n\n return (\n <Box flexDirection=\"column\" flexGrow={1}>\n <CAPermissionGuard>\n <AgentView key={activeTabId} />\n </CAPermissionGuard>\n <BoxSizeMeasure>\n <AgentTabs />\n </BoxSizeMeasure>\n <StdinForwarder />\n </Box>\n );\n};\n","import React from 'react';\nimport { useInk } from '../../../../contexts/InkContext';\n\nexport const Onboarding: React.FC = () => {\n const { Box, Text } = useInk();\n\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"green\" padding={1} flexGrow={1}>\n <Text bold color=\"green\">\n Welcome to Agent CLI Daemon!\n </Text>\n <Box marginTop={1}>\n <Text>It looks like you don't have any active agent sessions.</Text>\n </Box>\n <Box marginTop={1}>\n <Text>\n Please use the Agiflow UI Dashboard to start a{' '}\n <Text bold color=\"blue\">\n Project Plan\n </Text>\n ,{' '}\n <Text bold color=\"blue\">\n Work Unit\n </Text>\n , or{' '}\n <Text bold color=\"blue\">\n Task Chat\n </Text>{' '}\n to begin.\n </Text>\n </Box>\n <Box marginTop={1}>\n <Text dimColor>The Agiflow UI Dashboard can be accessed in your browser.</Text>\n </Box>\n </Box>\n );\n};\n","import 'reflect-metadata'; // Must be first import for InversifyJS\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport React from 'react';\nimport { Provider, useSelector } from 'react-redux';\nimport { RootState, store } from '@/store';\nimport { InkProvider, useInk } from '../../contexts/InkContext';\nimport { DaemonConnectionManager } from './components/DaemonConnectionManager';\nimport { OauthSetup } from './guards/OauthSetup';\nimport { Agents } from './screens/Agents';\nimport { Onboarding } from './screens/Onboarding';\n\n// Create a client with memory management\nconst queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n retry: false,\n refetchOnWindowFocus: false,\n gcTime: 5 * 60 * 1000, // Garbage collect unused queries after 5 minutes\n staleTime: 30 * 1000, // Consider data stale after 30 seconds\n },\n },\n});\n\nconst DaemonAppContent: React.FC = () => {\n const { Box } = useInk();\n\n const tabs = useSelector((state: RootState) => state.agentTabs.tabs);\n const hasAgentTabs = tabs.length > 0; // No dashboard, so any tab is an agent\n\n return (\n <OauthSetup>\n {({ isAuthenticated }) => (\n <DaemonConnectionManager>\n <Box flexGrow={1} flexDirection=\"column\">\n {isAuthenticated && !hasAgentTabs ? <Onboarding /> : <Agents />}\n </Box>\n </DaemonConnectionManager>\n )}\n </OauthSetup>\n );\n};\n\nconst DaemonApp: React.FC = () => {\n return (\n <InkProvider>\n <Provider store={store}>\n <QueryClientProvider client={queryClient}>\n <DaemonAppContent />\n </QueryClientProvider>\n </Provider>\n </InkProvider>\n );\n};\n\nexport const startDaemonApp = async () => {\n // Dynamically import Ink's render function to avoid top-level yoga-layout import\n const { render } = await import('ink');\n // Disable Ink's stdin handling - we use StdinManager instead\n const { waitUntilExit } = render(<DaemonApp />, {\n stdin: process.stdin,\n stdout: process.stdout,\n stderr: process.stderr,\n });\n return waitUntilExit();\n};\n"],"names":["DaemonConnectionManager","children","Box","Text","useInk","dispatch","useDispatch","status","useSelector","state","error","isShuttingDown","useRef","useEffect","launchDaemon","setShutdownCallback","daemonManager","cliContainer","GLOBAL_TYPES","clearShutdownCallback","jsxDEV","this","TokenInput","onSubmit","onCancel","useInput","value","setValue","useState","valueRef","input","key","currentValue","newValue","OauthSetup","Newline","Static","Link","queryClient","useQueryClient","deviceCode","setDeviceCode","showTokenInput","setShowTokenInput","authService","credentialsService","existingAuth","isCheckingAuth","useQuery","creds","deviceCodeMutation","useMutation","baseUrl","clientId","response","errorData","data","verifyTokenMutation","token","apiKeyToken","verificationUrl","Fragment","isMacOS","UnreadCount","React","tabId","unreadCount","t","isActive","WaitingInputIndicator","waitingInput","TabItem","index","label","fKeyLabel","LaunchAgent","AgentTabs","tabIds","shallowEqual","activeTabId","activeWorkingDir","useMemo","agentContainer","AGENT_TYPES","Agents","CAPermissionGuard","AgentView","BoxSizeMeasure","StdinForwarder","Onboarding","QueryClient","DaemonAppContent","hasAgentTabs","isAuthenticated","DaemonApp","InkProvider","Provider","store","QueryClientProvider","startDaemonApp","render","waitUntilExit"],"mappings":";;;;AAeO,MAAMA,IAAkE,CAAC,EAAE,UAAAC,QAAe;AAC/F,QAAM,EAAE,KAAAC,GAAK,MAAAC,EAAA,IAASC,EAAA,GAChBC,IAAWC,EAAA,GACXC,IAASC,EAAY,CAACC,MAAqBA,EAAM,aAAa,MAAM,GACpEC,IAAQF,EAAY,CAACC,MAAqBA,EAAM,aAAa,KAAK,GAClEE,IAAiBC,EAAO,EAAK;AA4BnC,SA1BAC,EAAU,OACRR,EAASS,GAAc,GAkBvBC,EAfuB,YAAY;AACjC,QAAI,CAAAJ,EAAe,SACnB;AAAA,MAAAA,EAAe,UAAU;AAEzB,UAAI;AACF,cAAMK,IAAgBC,EAAa,IAAmBC,EAAa,aAAa;AAChF,QAAIF,EAAc,eAChB,MAAMA,EAAc,KAAA;AAAA,MAExB,QAAQ;AAAA,MAER;AAAA;AAAA,EAEF,CAEkC,GAE3B,MAAM;AACX,IAAAG,EAAA;AAAA,EACF,IACC,CAACd,CAAQ,CAAC,GAETE,MAAW,aAEXa,gBAAAA,EAAAA,OAAClB,GAAA,EAAI,eAAc,UAAS,SAAS,GACnC,UAAAkB,gBAAAA,EAAAA,OAACjB,GAAA,EAAK,OAAM,UAAS,UAAA,2BAAA,GAArB,QAAA,IAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAkB,MAA6C,EAAA,GAD/C,QAAA,IAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAEA,IAIAd,MAAW,UAEXa,gBAAAA,SAAClB,KAAI,eAAc,UAAS,SAAS,GAAG,aAAY,SAAQ,aAAY,OACtE,UAAA;AAAA,IAAAkB,gBAAAA,EAAAA,OAACjB,GAAA,EAAK,OAAM,OAAM,MAAI,IAAC,UAAA,sBAAvB,QAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAAkB,MAEA;AAAA,IACAD,gBAAAA,EAAAA,OAACjB,KAAM,UAAAO,EAAA,GAAP,QAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAAW,MAAa;AAAA,IACbD,gBAAAA,SAACjB,GAAA,EAAK,UAAQ,IAAC,UAAA,4BAAA,GAAf,QAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAAkB,MAAwC;AAAA,EAAA,EAAA,GAL1C,QAAA,IAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAMA,IAIAd,MAAW,qDACH,UAAAN,EAAA,GAAH,QAAA,IAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAoB,MAAY,IAGd;AACT,GCjEaC,KAAwC,CAAC,EAAE,UAAAC,GAAU,UAAAC,QAAe;AAC/E,QAAM,EAAE,KAAAtB,GAAK,MAAAC,GAAM,UAAAsB,EAAA,IAAarB,EAAA,GAC1B,CAACsB,GAAOC,CAAQ,IAAIC,EAAS,EAAE,GAC/BC,IAAWjB,EAAO,EAAE;AAE1B,SAAAa,EAAS,CAACK,GAAOC,MAAQ;AAEvB,QAAIA,EAAI,QAAQD,MAAU,OAAOD,EAAS,QAAQ,SAAS,GAAG;AAC5D,MAAAA,EAAS,UAAU,IACnBF,EAAS,EAAE;AACX;AAAA,IACF;AAEA,QAAII,EAAI,QAAQ;AACd,YAAMC,IAAeH,EAAS,QAAQ,KAAA;AACtC,MAAIG,KACFT,EAASS,CAAY;AAEvB;AAAA,IACF;AAEA,QAAID,EAAI,QAAQ;AACd,MAAAP,IAAA;AACA;AAAA,IACF;AAEA,QAAIO,EAAI,aAAaA,EAAI,QAAQ;AAC/B,YAAME,IAAWJ,EAAS,QAAQ,MAAM,GAAG,EAAE;AAC7C,MAAAA,EAAS,UAAUI,GACnBN,EAASM,CAAQ;AACjB;AAAA,IACF;AAEA,QAAIH,KAAS,CAACC,EAAI,QAAQ,CAACA,EAAI,MAAM;AACnC,YAAME,IAAWJ,EAAS,UAAUC;AACpC,MAAAD,EAAS,UAAUI,GACnBN,EAASM,CAAQ;AAAA,IACnB;AAAA,EACF,CAAC,GAGCb,gBAAAA,EAAAA,OAAClB,GAAA,EAAI,eAAc,UACjB,UAAA;AAAA,IAAAkB,gBAAAA,SAACjB,GAAA,EACC,UAAA;AAAA,MAAAiB,gBAAAA,EAAAA,OAACjB,GAAA,EAAK,MAAI,IAAC,OAAM,QAAO,UAAA;AAAA,QAAA;AAAA,QACf;AAAA,MAAA,EAAA,GADT,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAkB,MAEA;AAAA,+BACClB,GAAA,EAAK,OAAM,SAAS,UAAAuB,EAAM,SAAS,IAAI,GAAGA,EAAM,MAAM,GAAG,EAAE,CAAC,iCAASvB,GAAA,EAAK,UAAQ,IAAC,UAAA,mBAAf,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAkB,MAA4B,EAAA,GAAjG,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAAyG;AAAA,IAAA,EAAA,GAJ3G,QAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAAA,MAKA;AAAA,IACAD,gBAAAA,EAAAA,OAACjB,GAAA,EAAK,UAAQ,IACZ,UAAA;AAAA,MAAAiB,gBAAAA,SAACjB,GAAA,EAAK,MAAI,IAAC,UAAA,QAAA,GAAX,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAkB,MAAgB;AAAA,MAAO;AAAA,MAAaD,gBAAAA,SAACjB,GAAA,EAAK,MAAI,IAAC,UAAA,MAAA,GAAX,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAkB,MAAc;AAAA,MAAO;AAAA,IAAA,EAAA,GAD3D,QAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAAA,MAEA;AAAA,EAAA,EAAA,GATF,QAAA,IAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAUA;AAEJ,GCjDaa,KAAwC,CAAC,EAAE,UAAAjC,QAAe;AACrE,QAAM,EAAE,KAAAC,GAAK,MAAAC,GAAM,SAAAgC,GAAS,QAAAC,GAAQ,MAAAC,EAAA,IAASjC,EAAA,GACvCkC,IAAcC,EAAA,GACd,CAACC,GAAYC,CAAa,IAAIb,EAAoC,IAAI,GACtE,CAACc,GAAgBC,CAAiB,IAAIf,EAAS,EAAK,GAGpDgB,IAAc3B,EAAa,IAA2BC,EAAa,qBAAqB,GACxF2B,IAAqB5B,EAAa,IAAwBC,EAAa,kBAAkB,GAGzF,EAAE,MAAM4B,GAAc,WAAWC,EAAA,IAAmBC,EAAS;AAAA,IACjE,UAAU,CAAC,QAAQ,OAAO;AAAA,IAC1B,SAAS,YAAY;AACnB,YAAMC,IAAQ,MAAMJ,EAAmB,KAAA;AACvC,aAAII,KAASA,EAAM,UAAUA,EAAM,aAAaL,EAAY,aAAaK,EAAM,SAAS,IAC/E,EAAE,eAAe,GAAA,IAEnB,EAAE,eAAe,GAAA;AAAA,IAC1B;AAAA,IACA,OAAO;AAAA,EAAA,CACR,GAGKC,IAAqBC,EAAY;AAAA,IACrC,YAAY,YAAY;AACtB,YAAMC,IAAUR,EAAY,aAAA,GACtBS,IAAWT,EAAY,YAAA,GAEvBU,IAAW,MAAM,MAAM,GAAGF,CAAO,kCAAkC;AAAA,QACvE,QAAQ;AAAA,QACR,SAAS,EAAE,gBAAgB,mBAAA;AAAA,QAC3B,MAAM,KAAK,UAAU;AAAA,UACnB,WAAWC;AAAA,UACX,OAAO;AAAA,QAAA,CACR;AAAA,MAAA,CACF;AAED,UAAI,CAACC,EAAS,IAAI;AAChB,cAAMC,IAAY,MAAMD,EAAS,KAAA;AACjC,cAAM,IAAI,MAAMC,EAAU,qBAAqB,gCAAgCD,EAAS,MAAM,EAAE;AAAA,MAClG;AAEA,aAAOA,EAAS,KAAA;AAAA,IAClB;AAAA,IACA,WAAW,CAACE,MAAS;AACnB,MAAAf,EAAce,CAAI,GAClBb,EAAkB,EAAI;AAAA,IACxB;AAAA,EAAA,CACD,GAGKc,IAAsBN,EAAY;AAAA,IACtC,YAAY,OAAOO,MAAkB;AACnC,UAAI,CAAClB;AACH,cAAM,IAAI,MAAM,2BAA2B;AAE7C,YAAMmB,IAAc,MAAMf,EAAY,uBAAuBc,GAAOlB,EAAW,WAAW;AAE1F,mBAAMK,EAAmB,UAAU;AAAA,QACjC,QAAQc,EAAY;AAAA,QACpB,gBAAgBA,EAAY;AAAA,QAC5B,WAAWA,EAAY;AAAA,QACvB,UAAUA,EAAY;AAAA,MAAA,CACvB,GACM,EAAE,SAAS,GAAA;AAAA,IACpB;AAAA,IACA,WAAW,MAAM;AACf,MAAArB,EAAY,kBAAkB,EAAE,UAAU,CAAC,QAAQ,OAAO,GAAG;AAAA,IAC/D;AAAA,EAAA,CACD;AAUD,MAPAzB,EAAU,MAAM;AACd,IAAIiC,KAAgB,CAACA,EAAa,iBAAiB,CAACI,EAAmB,aAAa,CAACV,KACnFU,EAAmB,OAAA;AAAA,EAEvB,GAAG,CAACJ,GAAcI,GAAoBV,CAAU,CAAC,GAG7CM,GAAc;AAChB,kDAAU,UAAA7C,EAAS,EAAE,iBAAiB,GAAA,CAAM,KAArC,QAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAAoB,MAAuC;AAIhD,MAAI0B;AACF,WACE3B,gBAAAA,EAAAA,OAAClB,GAAA,EAAI,eAAc,UAAS,SAAS,GACnC,UAAA;AAAA,MAAAkB,gBAAAA,EAAAA,OAAClB,GAAA,EAAI,cAAc,GACjB,UAAAkB,gBAAAA,EAAAA,OAACjB,KAAK,MAAI,IAAC,OAAM,QAAO,UAAA,4BAAA,GAAxB,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAkB,MAEA,EAAA,GAHF,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAIA;AAAA,MACAD,gBAAAA,SAAClB,GAAA,EAAI,aAAY,SAAQ,aAAY,QAAO,SAAS,GACnD,UAAAkB,gBAAAA,EAAAA,OAAClB,GAAA,EAAI,eAAc,UACjB,mCAACC,GAAA,EACC,UAAA;AAAA,QAAAiB,gBAAAA,SAACjB,GAAA,EAAK,OAAM,QAAO,UAAA,KAAA,GAAnB,QAAA,IAAA;AAAA,UAAA,UAAA;AAAA,UAAA,YAAA;AAAA,UAAA,cAAA;AAAA,QAAA,GAAAkB,MAAqB;AAAA,QACrBD,gBAAAA,EAAAA,OAACjB,KAAK,UAAA,mCAAA,GAAN,QAAA,IAAA;AAAA,UAAA,UAAA;AAAA,UAAA,YAAA;AAAA,UAAA,cAAA;AAAA,QAAA,GAAAkB,MAAsC;AAAA,MAAA,EAAA,GAFxC,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAGA,EAAA,GAJF,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAKA,EAAA,GANF,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAOA;AAAA,IAAA,EAAA,GAbF,QAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAAA,MAcA;AAKJ,MAAI6B,EAAmB;AACrB,WACE9B,gBAAAA,EAAAA,OAAClB,GAAA,EAAI,eAAc,UAAS,SAAS,GACnC,UAAA;AAAA,MAAAkB,gBAAAA,EAAAA,OAAClB,GAAA,EAAI,cAAc,GACjB,UAAAkB,gBAAAA,EAAAA,OAACjB,KAAK,MAAI,IAAC,OAAM,QAAO,UAAA,4BAAA,GAAxB,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAkB,MAEA,EAAA,GAHF,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAIA;AAAA,MACAD,gBAAAA,EAAAA,OAAClB,GAAA,EAAI,aAAY,SAAQ,aAAY,QAAO,SAAS,GACnD,UAAAkB,gBAAAA,EAAAA,OAAClB,GAAA,EAAI,eAAc,UACjB,UAAA;AAAA,QAAAkB,gBAAAA,SAACjB,GAAA,EACC,UAAA;AAAA,UAAAiB,gBAAAA,SAACjB,GAAA,EAAK,OAAM,SAAQ,UAAA,KAAA,GAApB,QAAA,IAAA;AAAA,YAAA,UAAA;AAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA,GAAAkB,MAAsB;AAAA,UACtBD,gBAAAA,SAACjB,GAAA,EAAK,UAAQ,IAAC,UAAA,+BAAA,GAAf,QAAA,IAAA;AAAA,YAAA,UAAA;AAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA,GAAAkB,MAA2C;AAAA,QAAA,EAAA,GAF7C,QAAA,IAAA;AAAA,UAAA,UAAA;AAAA,UAAA,YAAA;AAAA,UAAA,cAAA;AAAA,QAAA,GAAAA,MAGA;AAAA,iCACClB,GAAA,EACC,UAAA;AAAA,UAAAiB,gBAAAA,SAACjB,GAAA,EAAK,OAAM,QAAO,UAAA,KAAA,GAAnB,QAAA,IAAA;AAAA,YAAA,UAAA;AAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA,GAAAkB,MAAqB;AAAA,UACrBD,gBAAAA,EAAAA,OAACjB,KAAK,UAAA,qCAAA,GAAN,QAAA,IAAA;AAAA,YAAA,UAAA;AAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA,GAAAkB,MAAwC;AAAA,QAAA,EAAA,GAF1C,QAAA,IAAA;AAAA,UAAA,UAAA;AAAA,UAAA,YAAA;AAAA,UAAA,cAAA;AAAA,QAAA,GAAAA,MAGA;AAAA,MAAA,EAAA,GARF,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MASA,EAAA,GAVF,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAWA;AAAA,IAAA,EAAA,GAjBF,QAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAAA,MAkBA;AAKJ,MAAImB,GAAY;AACd,UAAMoB,IAAkB,GAAGpB,EAAW,gBAAgB,SAAS,mBAAmBA,EAAW,SAAS,CAAC;AAEvG,WACEpB,gBAAAA,EAAAA,OAAAyC,YAAA,EACE,UAAA;AAAA,MAAAzC,gBAAAA,EAAAA,OAACgB,GAAA,EAAO,OAAO,CAAC,CAAC,GACd,UAAA,MACChB,gBAAAA,EAAAA,OAAClB,GAAA,EAAI,eAAc,UAAS,SAAS,GACnC,UAAA;AAAA,QAAAkB,gBAAAA,EAAAA,OAAClB,GAAA,EAAI,cAAc,GACjB,UAAAkB,gBAAAA,EAAAA,OAACjB,KAAK,MAAI,IAAC,OAAM,QAAO,UAAA,4BAAA,GAAxB,QAAA,IAAA;AAAA,UAAA,UAAA;AAAA,UAAA,YAAA;AAAA,UAAA,cAAA;AAAA,QAAA,GAAAkB,MAEA,EAAA,GAHF,QAAA,IAAA;AAAA,UAAA,UAAA;AAAA,UAAA,YAAA;AAAA,UAAA,cAAA;AAAA,QAAA,GAAAA,MAIA;AAAA,QAEAD,gBAAAA,EAAAA,OAAClB,GAAA,EAAI,aAAY,SAAQ,aAAY,SAAQ,SAAS,GAAG,cAAc,GACrE,UAAAkB,gBAAAA,EAAAA,OAAClB,GAAA,EAAI,eAAc,UACjB,UAAA;AAAA,UAAAkB,gBAAAA,SAACjB,GAAA,EACC,UAAA;AAAA,YAAAiB,gBAAAA,SAACjB,GAAA,EAAK,OAAM,SAAQ,UAAA,KAAA,GAApB,QAAA,IAAA;AAAA,cAAA,UAAA;AAAA,cAAA,YAAA;AAAA,cAAA,cAAA;AAAA,YAAA,GAAAkB,MAAsB;AAAA,YACtBD,gBAAAA,SAACjB,GAAA,EAAK,UAAQ,IAAC,UAAA,+BAAA,GAAf,QAAA,IAAA;AAAA,cAAA,UAAA;AAAA,cAAA,YAAA;AAAA,cAAA,cAAA;AAAA,YAAA,GAAAkB,MAA2C;AAAA,UAAA,EAAA,GAF7C,QAAA,IAAA;AAAA,YAAA,UAAA;AAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA,GAAAA,MAGA;AAAA,mCACClB,GAAA,EACC,UAAA;AAAA,YAAAiB,gBAAAA,SAACjB,GAAA,EAAK,OAAM,SAAQ,UAAA,KAAA,GAApB,QAAA,IAAA;AAAA,cAAA,UAAA;AAAA,cAAA,YAAA;AAAA,cAAA,cAAA;AAAA,YAAA,GAAAkB,MAAsB;AAAA,YACtBD,gBAAAA,SAACjB,GAAA,EAAK,UAAQ,IAAC,UAAA,iCAAA,GAAf,QAAA,IAAA;AAAA,cAAA,UAAA;AAAA,cAAA,YAAA;AAAA,cAAA,cAAA;AAAA,YAAA,GAAAkB,MAA6C;AAAA,UAAA,EAAA,GAF/C,QAAA,IAAA;AAAA,YAAA,UAAA;AAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA,GAAAA,MAGA;AAAA,mCACClB,GAAA,EACC,UAAA;AAAA,YAAAiB,gBAAAA,SAACjB,GAAA,EAAK,OAAM,QAAO,UAAA,KAAA,GAAnB,QAAA,IAAA;AAAA,cAAA,UAAA;AAAA,cAAA,YAAA;AAAA,cAAA,cAAA;AAAA,YAAA,GAAAkB,MAAqB;AAAA,YACrBD,gBAAAA,SAACjB,GAAA,EAAK,MAAI,IAAC,UAAA,mCAAA,GAAX,QAAA,IAAA;AAAA,cAAA,UAAA;AAAA,cAAA,YAAA;AAAA,cAAA,cAAA;AAAA,YAAA,GAAAkB,MAA2C;AAAA,UAAA,EAAA,GAF7C,QAAA,IAAA;AAAA,YAAA,UAAA;AAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA,GAAAA,MAGA;AAAA,QAAA,EAAA,GAZF,QAAA,IAAA;AAAA,UAAA,UAAA;AAAA,UAAA,YAAA;AAAA,UAAA,cAAA;AAAA,QAAA,GAAAA,MAaA,EAAA,GAdF,QAAA,IAAA;AAAA,UAAA,UAAA;AAAA,UAAA,YAAA;AAAA,UAAA,cAAA;AAAA,QAAA,GAAAA,MAeA;AAAA,QAEAD,gBAAAA,EAAAA,OAAClB,GAAA,EAAI,aAAY,UAAS,aAAY,UAAS,SAAS,GAAG,cAAc,GACvE,UAAAkB,gBAAAA,EAAAA,OAAClB,GAAA,EAAI,eAAc,UACjB,UAAA;AAAA,UAAAkB,gBAAAA,EAAAA,OAACjB,GAAA,EAAK,MAAI,IAAC,OAAM,UAAS,UAAA,8BAA1B,QAAA,IAAA;AAAA,YAAA,UAAA;AAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA,GAAAkB,MAEA;AAAA,mCACCc,GAAA,IAAD,QAAA,IAAA;AAAA,YAAA,UAAA;AAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA,GAAAd,MAAS;AAAA,mCAERlB,GAAA,EACC,UAAA;AAAA,YAAAiB,gBAAAA,EAAAA,OAACjB,GAAA,EAAK,MAAI,IAAC,OAAM,QAAO,UAAA;AAAA,cAAA;AAAA,cACnB;AAAA,YAAA,EAAA,GADL,QAAA,IAAA;AAAA,cAAA,UAAA;AAAA,cAAA,YAAA;AAAA,cAAA,cAAA;AAAA,YAAA,GAAAkB,MAEA;AAAA,YACAD,gBAAAA,EAAAA,OAACjB,KAAK,UAAA,iCAAA,GAAN,QAAA,IAAA;AAAA,cAAA,UAAA;AAAA,cAAA,YAAA;AAAA,cAAA,cAAA;AAAA,YAAA,GAAAkB,MAAoC;AAAA,UAAA,EAAA,GAJtC,QAAA,IAAA;AAAA,YAAA,UAAA;AAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA,GAAAA,MAKA;AAAA,mCACCnB,GAAA,EAAI,aAAa,GAAG,cAAc,GACjC,UAAAkB,gBAAAA,EAAAA,OAACiB,GAAA,EAAK,KAAKuB,GACT,mCAACzD,GAAA,EAAK,OAAM,QAAO,MAAI,IACpB,UAAAyD,KADH,QAAA,IAAA;AAAA,YAAA,UAAA;AAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA,GAAAvC,MAEA,EAAA,GAHF,QAAA,IAAA;AAAA,YAAA,UAAA;AAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA,GAAAA,MAIA,EAAA,GALF,QAAA,IAAA;AAAA,YAAA,UAAA;AAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA,GAAAA,MAMA;AAAA,mCAEClB,GAAA,EACC,UAAA;AAAA,YAAAiB,gBAAAA,EAAAA,OAACjB,GAAA,EAAK,MAAI,IAAC,OAAM,QAAO,UAAA;AAAA,cAAA;AAAA,cACnB;AAAA,YAAA,EAAA,GADL,QAAA,IAAA;AAAA,cAAA,UAAA;AAAA,cAAA,YAAA;AAAA,cAAA,cAAA;AAAA,YAAA,GAAAkB,MAEA;AAAA,YACAD,gBAAAA,EAAAA,OAACjB,KAAK,UAAA,gCAAA,GAAN,QAAA,IAAA;AAAA,cAAA,UAAA;AAAA,cAAA,YAAA;AAAA,cAAA,cAAA;AAAA,YAAA,GAAAkB,MAAmC;AAAA,UAAA,EAAA,GAJrC,QAAA,IAAA;AAAA,YAAA,UAAA;AAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA,GAAAA,MAKA;AAAA,mCACCnB,GAAA,EAAI,aAAa,GAAG,cAAc,GAAG,aAAY,UAAS,aAAY,SAAQ,UAAU,GACvF,mCAACC,GAAA,EAAK,OAAM,SAAQ,MAAI,IACrB,YAAW,aADd,QAAA,IAAA;AAAA,YAAA,UAAA;AAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA,GAAAkB,MAEA,EAAA,GAHF,QAAA,IAAA;AAAA,YAAA,UAAA;AAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA,GAAAA,MAIA;AAAA,mCAEClB,GAAA,EACC,UAAA;AAAA,YAAAiB,gBAAAA,EAAAA,OAACjB,GAAA,EAAK,MAAI,IAAC,OAAM,QAAO,UAAA;AAAA,cAAA;AAAA,cACnB;AAAA,YAAA,EAAA,GADL,QAAA,IAAA;AAAA,cAAA,UAAA;AAAA,cAAA,YAAA;AAAA,cAAA,cAAA;AAAA,YAAA,GAAAkB,MAEA;AAAA,YACAD,gBAAAA,EAAAA,OAACjB,KAAK,UAAA,mCAAA,GAAN,QAAA,IAAA;AAAA,cAAA,UAAA;AAAA,cAAA,YAAA;AAAA,cAAA,cAAA;AAAA,YAAA,GAAAkB,MAAsC;AAAA,UAAA,EAAA,GAJxC,QAAA,IAAA;AAAA,YAAA,UAAA;AAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA,GAAAA,MAKA;AAAA,mCACCc,GAAA,IAAD,QAAA,IAAA;AAAA,YAAA,UAAA;AAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA,GAAAd,MAAS;AAAA,mCAERlB,GAAA,EACC,UAAA;AAAA,YAAAiB,gBAAAA,EAAAA,OAACjB,GAAA,EAAK,MAAI,IAAC,OAAM,QAAO,UAAA;AAAA,cAAA;AAAA,cACnB;AAAA,YAAA,EAAA,GADL,QAAA,IAAA;AAAA,cAAA,UAAA;AAAA,cAAA,YAAA;AAAA,cAAA,cAAA;AAAA,YAAA,GAAAkB,MAEA;AAAA,YACAD,gBAAAA,EAAAA,OAACjB,KAAK,UAAA,6DAAA,GAAN,QAAA,IAAA;AAAA,cAAA,UAAA;AAAA,cAAA,YAAA;AAAA,cAAA,cAAA;AAAA,YAAA,GAAAkB,MAAgE;AAAA,UAAA,EAAA,GAJlE,QAAA,IAAA;AAAA,YAAA,UAAA;AAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA,GAAAA,MAKA;AAAA,mCACCc,GAAA,IAAD,QAAA,IAAA;AAAA,YAAA,UAAA;AAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA,GAAAd,MAAS;AAAA,UAETD,gBAAAA,SAACjB,GAAA,EAAK,UAAQ,IAAC,UAAA,+DAAA,GAAf,QAAA,IAAA;AAAA,YAAA,UAAA;AAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA,GAAAkB,MAA2E;AAAA,QAAA,EAAA,GAhD7E,QAAA,IAAA;AAAA,UAAA,UAAA;AAAA,UAAA,YAAA;AAAA,UAAA,cAAA;AAAA,QAAA,GAAAA,MAiDA,EAAA,GAlDF,QAAA,IAAA;AAAA,UAAA,UAAA;AAAA,UAAA,YAAA;AAAA,UAAA,cAAA;AAAA,QAAA,GAAAA,MAmDA;AAAA,QAEAD,gBAAAA,EAAAA,OAAClB,GAAA,EAAI,aAAY,SAAQ,aAAY,QAAO,SAAS,GAAG,cAAc,GACpE,UAAAkB,gBAAAA,EAAAA,OAAClB,GAAA,EAAI,eAAc,UACjB,UAAA;AAAA,UAAAkB,gBAAAA,EAAAA,OAACjB,GAAA,EAAK,UAAQ,IAAC,UAAA;AAAA,YAAA;AAAA,YAAgB,KAAK,MAAMqC,EAAW,aAAa,EAAE;AAAA,YAAE;AAAA,UAAA,EAAA,GAAtE,QAAA,IAAA;AAAA,YAAA,UAAA;AAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA,GAAAnB,MAA8E;AAAA,UAC9ED,gBAAAA,SAACjB,GAAA,EAAK,UAAQ,IAAC,UAAA,kEAAA,GAAf,QAAA,IAAA;AAAA,YAAA,UAAA;AAAA,YAAA,YAAA;AAAA,YAAA,cAAA;AAAA,UAAA,GAAAkB,MAA8E;AAAA,QAAA,EAAA,GAFhF,QAAA,IAAA;AAAA,UAAA,UAAA;AAAA,UAAA,YAAA;AAAA,UAAA,cAAA;AAAA,QAAA,GAAAA,MAGA,EAAA,GAJF,QAAA,IAAA;AAAA,UAAA,UAAA;AAAA,UAAA,YAAA;AAAA,UAAA,cAAA;AAAA,QAAA,GAAAA,MAKA;AAAA,MAAA,EAAA,GAlFF,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAmFA,EAAA,GArFJ,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAuFA;AAAA,MAECqB,8BACExC,GAAA,EAAI,aAAY,SAAQ,aAAY,QAAO,SAAS,GACnD,UAAAkB,gBAAAA,EAAAA;AAAAA,QAACE;AAAA,QAAA;AAAA,UACC,UAAU,CAACoC,MAAUD,EAAoB,OAAOC,CAAK;AAAA,UACrD,UAAU,MAAMf,EAAkB,EAAK;AAAA,QAAA;AAAA,QAFzC;AAAA,QAAA;AAAA,QAAA;AAAA,UAAA,UAAA;AAAA,UAAA,YAAA;AAAA,UAAA,cAAA;AAAA,QAAA;AAAA,QAAAtB;AAAAA,MAAA,EAGA,GAJF,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAKA;AAAA,IAAA,EAAA,GAhGJ,QAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAAA,MAkGA;AAAA,EAEJ;AAGA,MAAIoC,EAAoB;AACtB,WACErC,gBAAAA,EAAAA,OAAClB,GAAA,EAAI,eAAc,UAAS,SAAS,GACnC,UAAA;AAAA,MAAAkB,gBAAAA,EAAAA,OAAClB,GAAA,EAAI,cAAc,GACjB,UAAAkB,gBAAAA,EAAAA,OAACjB,KAAK,MAAI,IAAC,OAAM,QAAO,UAAA,4BAAA,GAAxB,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAkB,MAEA,EAAA,GAHF,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAIA;AAAA,MACAD,gBAAAA,SAAClB,GAAA,EAAI,aAAY,SAAQ,aAAY,QAAO,SAAS,GACnD,UAAAkB,gBAAAA,EAAAA,OAAClB,GAAA,EAAI,eAAc,UACjB,mCAACC,GAAA,EACC,UAAA;AAAA,QAAAiB,gBAAAA,SAACjB,GAAA,EAAK,OAAM,QAAO,UAAA,KAAA,GAAnB,QAAA,IAAA;AAAA,UAAA,UAAA;AAAA,UAAA,YAAA;AAAA,UAAA,cAAA;AAAA,QAAA,GAAAkB,MAAqB;AAAA,QACrBD,gBAAAA,EAAAA,OAACjB,KAAK,UAAA,qBAAA,GAAN,QAAA,IAAA;AAAA,UAAA,UAAA;AAAA,UAAA,YAAA;AAAA,UAAA,cAAA;AAAA,QAAA,GAAAkB,MAAwB;AAAA,MAAA,EAAA,GAF1B,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAGA,EAAA,GAJF,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAKA,EAAA,GANF,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAOA;AAAA,IAAA,EAAA,GAbF,QAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAAA,MAcA;AAKJ,MAAI6B,EAAmB,WAAWO,EAAoB,SAAS;AAC7D,UAAM/C,IAAQwC,EAAmB,SAASO,EAAoB;AAC9D,WACErC,gBAAAA,EAAAA,OAAClB,GAAA,EAAI,eAAc,UAAS,SAAS,GACnC,UAAA;AAAA,MAAAkB,gBAAAA,EAAAA,OAAClB,GAAA,EAAI,cAAc,GACjB,UAAAkB,gBAAAA,EAAAA,OAACjB,KAAK,MAAI,IAAC,OAAM,OAAM,UAAA,yBAAA,GAAvB,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAkB,MAEA,EAAA,GAHF,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAIA;AAAA,+BACCnB,GAAA,EAAI,aAAY,SAAQ,aAAY,OAAM,SAAS,GAAG,cAAc,GACnE,mCAACC,GAAA,EAAK,OAAM,OAAO,UAAAO,GAAO,WAAW,yBAAA,GAArC,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAW,MAA8D,EAAA,GADhE,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAEA;AAAA,MACAD,gBAAAA,EAAAA,OAAClB,GAAA,EAAI,aAAY,UAAS,aAAY,QAAO,SAAS,GACpD,UAAAkB,gBAAAA,EAAAA,OAAClB,GAAA,EAAI,eAAc,UACjB,UAAA;AAAA,QAAAkB,gBAAAA,SAACjB,GAAA,EAAK,UAAQ,IAAC,UAAA,sBAAA,GAAf,QAAA,IAAA;AAAA,UAAA,UAAA;AAAA,UAAA,YAAA;AAAA,UAAA,cAAA;AAAA,QAAA,GAAAkB,MAAkC;AAAA,QAClCD,gBAAAA,SAACjB,GAAA,EAAK,UAAQ,IAAC,UAAA,oCAAA,GAAf,QAAA,IAAA;AAAA,UAAA,UAAA;AAAA,UAAA,YAAA;AAAA,UAAA,cAAA;AAAA,QAAA,GAAAkB,MAAgD;AAAA,QAChDD,gBAAAA,SAACjB,GAAA,EAAK,UAAQ,IAAC,UAAA,sCAAA,GAAf,QAAA,IAAA;AAAA,UAAA,UAAA;AAAA,UAAA,YAAA;AAAA,UAAA,cAAA;AAAA,QAAA,GAAAkB,MAAkD;AAAA,QAClDD,gBAAAA,SAACjB,GAAA,EAAK,UAAQ,IAAC,UAAA,+CAAA,GAAf,QAAA,IAAA;AAAA,UAAA,UAAA;AAAA,UAAA,YAAA;AAAA,UAAA,cAAA;AAAA,QAAA,GAAAkB,MAA2D;AAAA,QAC3DD,gBAAAA,SAACjB,GAAA,EAAK,UAAQ,IAAC,UAAA,kCAAA,GAAf,QAAA,IAAA;AAAA,UAAA,UAAA;AAAA,UAAA,YAAA;AAAA,UAAA,cAAA;AAAA,QAAA,GAAAkB,MAA8C;AAAA,iCAC7Cc,GAAA,IAAD,QAAA,IAAA;AAAA,UAAA,UAAA;AAAA,UAAA,YAAA;AAAA,UAAA,cAAA;AAAA,QAAA,GAAAd,MAAS;AAAA,QACTD,gBAAAA,SAACjB,GAAA,EAAK,UAAQ,IAAC,UAAA,0BAAA,GAAf,QAAA,IAAA;AAAA,UAAA,UAAA;AAAA,UAAA,YAAA;AAAA,UAAA,cAAA;AAAA,QAAA,GAAAkB,MAAsC;AAAA,MAAA,EAAA,GAPxC,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAQA,EAAA,GATF,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAA,MAUA;AAAA,IAAA,EAAA,GAnBF,QAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAAA,MAoBA;AAAA,EAEJ;AAGA,SAAO;AACT,GCjSMyC,KAAU,QAAQ,aAAa,UAe/BC,IAA2CC,EAAM,KAAK,CAAC,EAAE,OAAAC,QAAY;AACzE,QAAMC,IAAc1D,EAAY,CAACC,MAAqBA,EAAM,UAAU,KAAK,KAAK,CAAC0D,MAAMA,EAAE,OAAOF,CAAK,GAAG,WAAW,GAC7GG,IAAW5D,EAAY,CAACC,MAAqBA,EAAM,UAAU,gBAAgBwD,CAAK;AAExF,SAAI,CAACC,KAAeA,KAAe,KAAKE,IAC/B,OAGFhD,gBAAAA,EAAAA,OAAAyC,YAAA,EAAE,UAAA;AAAA,IAAA;AAAA,IAAGK;AAAA,IAAY;AAAA,EAAA,EAAA,GAAjB,QAAA,IAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAA7C,MAAkB;AAC3B,CAAC;AAED0C,EAAY,cAAc;AAM1B,MAAMM,IAAqDL,EAAM,KAAK,CAAC,EAAE,OAAAC,QAAY;AACnF,QAAM,EAAE,MAAA9D,EAAA,IAASC,EAAA,GACXkE,IAAe9D;AAAA,IACnB,CAACC,MAAqBA,EAAM,UAAU,KAAK,KAAK,CAAC0D,MAAMA,EAAE,OAAOF,CAAK,GAAG;AAAA,EAAA,GAEpEG,IAAW5D,EAAY,CAACC,MAAqBA,EAAM,UAAU,gBAAgBwD,CAAK;AAExF,SAAI,CAACK,KAAgBF,IACZ,OAGFhD,gBAAAA,EAAAA,OAACjB,GAAA,EAAK,OAAM,OAAM,UAAA,KAAA,GAAlB,QAAA,IAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAkB,MAAoB;AAC7B,CAAC;AAEDgD,EAAsB,cAAc;AAMpC,MAAME,IAAkCP,EAAM,KAAK,CAAC,EAAE,OAAAC,GAAO,OAAAO,QAAY;AACvE,QAAM,EAAE,KAAAtE,GAAK,MAAAC,EAAA,IAASC,EAAA,GAChBqE,IAAQjE,EAAY,CAACC,MAAqBA,EAAM,UAAU,KAAK,KAAK,CAAC0D,MAAMA,EAAE,OAAOF,CAAK,GAAG,KAAK,GACjGG,IAAW5D,EAAY,CAACC,MAAqBA,EAAM,UAAU,gBAAgBwD,CAAK,GAElFS,IAAY,KAAKF,IAAQ,CAAC;AAEhC,kCACGtE,GAAA,EAAI,aAAa,GAAG,aAAakE,IAAW,UAAU,QACrD,UAAA;AAAA,IAAAhD,gBAAAA,EAAAA,OAACiD,KAAsB,OAAAJ,EAAA,GAAvB,QAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAA5C,MAAqC;AAAA,IACrCD,gBAAAA,SAACjB,KAAK,OAAO,WAAW,MAAMiE,GAAU,UAAU,CAACA,GAAU,UAAA;AAAA,MAAA;AAAA,MACzDM;AAAA,MAAU;AAAA,MAAGD;AAAA,MACfrD,gBAAAA,EAAAA,OAAC2C,KAAY,OAAAE,EAAA,GAAb,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAA5C,MAA2B;AAAA,IAAA,EAAA,GAF7B,QAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAAA,MAGA;AAAA,IACAD,gBAAAA,EAAAA,OAACuD,KAAY,OAAAV,EAAA,GAAb,QAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAA5C,MAA2B;AAAA,EAAA,EAAA,GAN7B,QAAA,IAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAOA;AAEJ,CAAC;AAEDkD,EAAQ,cAAc;AAEf,MAAMK,KAAsB,MAAM;AACvC,QAAM,EAAE,KAAA1E,GAAK,MAAAC,EAAA,IAASC,EAAA,GAEhByE,IAASrE,EAAY,CAACC,MAAqBA,EAAM,UAAU,KAAK,IAAI,CAAC,MAAM,EAAE,EAAE,GAAGqE,CAAY,GAC9FC,IAAcvE,EAAY,CAACC,MAAqBA,EAAM,UAAU,WAAW,GAG3EuE,IAAmBC,EAAQ,MAAM;AACrC,QAAI,CAACF,EAAa,QAAO;AAEzB,QAAI;AAEF,YAAMG,IADejE,EAAa,IAAkBC,EAAa,YAAY,EACzC,kBAAkB6D,CAAW;AAEjE,UAAIG;AAEF,eAD2BA,EAAe,IAAwBC,EAAY,kBAAkB,EACtE,uBAAA;AAAA,IAE9B,QAAQ;AAAA,IAER;AAEA,WAAO,QAAQ,IAAA;AAAA,EACjB,GAAG,CAACJ,CAAW,CAAC;AAEhB,SACE3D,gBAAAA,EAAAA,OAAClB,GAAA,EAAI,eAAc,UAAS,WAAW,GACrC,UAAA;AAAA,IAAAkB,gBAAAA,EAAAA,OAAClB,KAAI,YAAW,UAAS,WAAS,IAAC,gBAAgB,WAAW,gBAAc,IACzE,UAAA2E,EAAO,IAAI,CAACZ,GAAOO,+BACjBD,GAAA,EAAoB,OAAAN,GAAc,OAAAO,KAArBP,GAAd,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAA5C,MAAiD,CAClD,KAHH,QAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAAA,MAIA;AAAA,IACC2D,KAAoB5D,gBAAAA,EAAAA,OAACjB,GAAA,EAAK,UAAQ,IAAE,UAAA6E,EAAA,GAAhB,QAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAA3D,MAAiC;AAAA,IACrDyC,MAAW1C,gBAAAA,EAAAA,OAACjB,GAAA,EAAK,UAAQ,IAAC,UAAA,2CAAA,GAAf,QAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAAkB,MAAuD;AAAA,EAAA,EAAA,GAPrE,QAAA,IAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAQA;AAEJ,GC9Ga+D,KAAmB,MAAM;AACpC,QAAM,EAAE,KAAAlF,EAAA,IAAQE,EAAA,GACV2E,IAAcvE,EAAY,CAACC,MAAqBA,EAAM,UAAU,WAAW;AAGjF,SACEW,gBAAAA,EAAAA,OAAClB,GAAA,EAAI,eAAc,UAAS,UAAU,GACpC,UAAA;AAAA,IAAAkB,gBAAAA,SAACiE,GAAA,EACC,UAAAjE,gBAAAA,EAAAA,OAACkE,GAAA,CAAA,GAAeP,GAAhB,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAA1D,MAA6B,EAAA,GAD/B,QAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAAA,MAEA;AAAA,IACAD,gBAAAA,SAACmE,GAAA,EACC,UAAAnE,gBAAAA,EAAAA,OAACwD,IAAA,CAAA,GAAD,QAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAAvD,MAAW,EAAA,GADb,QAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAAA,MAEA;AAAA,6BACCmE,GAAA,IAAD,QAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAAnE,MAAgB;AAAA,EAAA,EAAA,GAPlB,QAAA,IAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAQA;AAEJ,GCvBaoE,KAAuB,MAAM;AACxC,QAAM,EAAE,KAAAvF,GAAK,MAAAC,EAAA,IAASC,EAAA;AAEtB,SACEgB,gBAAAA,EAAAA,OAAClB,GAAA,EAAI,eAAc,UAAS,aAAY,SAAQ,aAAY,SAAQ,SAAS,GAAG,UAAU,GACxF,UAAA;AAAA,IAAAkB,gBAAAA,EAAAA,OAACjB,GAAA,EAAK,MAAI,IAAC,OAAM,SAAQ,UAAA,kCAAzB,QAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAAkB,MAEA;AAAA,6BACCnB,GAAA,EAAI,WAAW,GACd,UAAAkB,gBAAAA,EAAAA,OAACjB,KAAK,UAAA,6DAAN,QAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAAkB,MAA6D,EAAA,GAD/D,QAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAAA,MAEA;AAAA,IACAD,gBAAAA,SAAClB,GAAA,EAAI,WAAW,GACd,mCAACC,GAAA,EAAK,UAAA;AAAA,MAAA;AAAA,MAC2C;AAAA,+BAC9CA,GAAA,EAAK,MAAI,IAAC,OAAM,QAAO,UAAA,kBAAxB,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAkB,MAEA;AAAA,MAAO;AAAA,MACL;AAAA,+BACDlB,GAAA,EAAK,MAAI,IAAC,OAAM,QAAO,UAAA,eAAxB,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAkB,MAEA;AAAA,MAAO;AAAA,MACF;AAAA,+BACJlB,GAAA,EAAK,MAAI,IAAC,OAAM,QAAO,UAAA,eAAxB,QAAA,IAAA;AAAA,QAAA,UAAA;AAAA,QAAA,YAAA;AAAA,QAAA,cAAA;AAAA,MAAA,GAAAkB,MAEA;AAAA,MAAQ;AAAA,MAAI;AAAA,IAAA,EAAA,GAZd,QAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAAA,MAcA,EAAA,GAfF,QAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAAA,MAgBA;AAAA,IACAD,gBAAAA,EAAAA,OAAClB,KAAI,WAAW,GACd,mCAACC,GAAA,EAAK,UAAQ,IAAC,UAAA,4DAAA,GAAf,QAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAAkB,MAAwE,EAAA,GAD1E,QAAA,IAAA;AAAA,MAAA,UAAA;AAAA,MAAA,YAAA;AAAA,MAAA,cAAA;AAAA,IAAA,GAAAA,MAEA;AAAA,EAAA,EAAA,GA1BF,QAAA,IAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MA2BA;AAEJ,GCxBMiB,KAAc,IAAIoD,EAAY;AAAA,EAClC,gBAAgB;AAAA,IACd,SAAS;AAAA,MACP,OAAO;AAAA,MACP,sBAAsB;AAAA,MACtB,QAAQ,MAAS;AAAA;AAAA,MACjB,WAAW,KAAK;AAAA;AAAA,IAAA;AAAA,EAClB;AAEJ,CAAC,GAEKC,KAA6B,MAAM;AACvC,QAAM,EAAE,KAAAzF,EAAA,IAAQE,EAAA,GAGVwF,IADOpF,EAAY,CAACC,MAAqBA,EAAM,UAAU,IAAI,EACzC,SAAS;AAEnC,kCACGyB,IAAA,EACE,UAAA,CAAC,EAAE,iBAAA2D,iCACD7F,GAAA,EACC,UAAAoB,gBAAAA,EAAAA,OAAClB,GAAA,EAAI,UAAU,GAAG,eAAc,UAC7B,eAAmB,CAAC0F,6BAAgBH,IAAA,IAAD,QAAA,IAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAApE,MAAY,6BAAM+D,IAAA,CAAA,GAAD,QAAA,IAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAA/D,MAAQ,EAAA,GAD/D,QAAA,IAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAEA,EAAA,GAHF,QAAA,IAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAIA,EAAA,GANJ,QAAA,IAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAA,MAQA;AAEJ,GAEMyE,KAAsB,MAExB1E,gBAAAA,EAAAA,OAAC2E,GAAA,EACC,UAAA3E,gBAAAA,EAAAA,OAAC4E,GAAA,EAAS,OAAAC,GACR,mCAACC,GAAA,EAAoB,QAAQ5D,IAC3B,UAAAlB,gBAAAA,EAAAA,OAACuE,IAAA,CAAA,GAAD,QAAA,IAAA;AAAA,EAAA,UAAA;AAAA,EAAA,YAAA;AAAA,EAAA,cAAA;AAAA,GAAAtE,MAAkB,EAAA,GADpB,QAAA,IAAA;AAAA,EAAA,UAAA;AAAA,EAAA,YAAA;AAAA,EAAA,cAAA;AAAA,GAAAA,MAEA,EAAA,GAHF,QAAA,IAAA;AAAA,EAAA,UAAA;AAAA,EAAA,YAAA;AAAA,EAAA,cAAA;AAAA,GAAAA,MAIA,EAAA,GALF,QAAA,IAAA;AAAA,EAAA,UAAA;AAAA,EAAA,YAAA;AAAA,EAAA,cAAA;AAAA,GAAAA,MAMA,GAIS8E,KAAiB,YAAY;AAExC,QAAM,EAAE,QAAAC,EAAA,IAAW,MAAM,OAAO,KAAK,GAE/B,EAAE,eAAAC,EAAA,IAAkBD,2BAAQN,IAAA,CAAA,GAAD,QAAA,IAAA;AAAA,IAAA,UAAA;AAAA,IAAA,YAAA;AAAA,IAAA,cAAA;AAAA,EAAA,GAAAzE,MAAW,GAAI;AAAA,IAC9C,OAAO,QAAQ;AAAA,IACf,QAAQ,QAAQ;AAAA,IAChB,QAAQ,QAAQ;AAAA,EAAA,CACjB;AACD,SAAOgF,EAAA;AACT;"}
1
+ {"version":3,"file":"daemon.js","sources":["../src/systems/cli/apps/daemon/components/DaemonConnectionManager.tsx","../src/systems/cli/apps/daemon/guards/OauthSetup.tsx","../src/systems/cli/apps/daemon/components/AgentTabs.tsx","../src/systems/cli/apps/daemon/screens/Agents/index.tsx","../src/systems/cli/apps/daemon/screens/Onboarding/index.tsx","../src/systems/cli/apps/daemon/index.tsx"],"sourcesContent":["import { cliContainer } from '@cli/container';\nimport React, { useEffect, useRef } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport type { DaemonManager } from '@/services';\nimport type { AppDispatch } from '@/store';\nimport { RootState } from '@/store';\nimport { launchDaemon } from '@/store/slices/daemonStatusSlice';\nimport { GLOBAL_TYPES } from '@/types';\nimport { useInk } from '../../../contexts/InkContext';\nimport { clearShutdownCallback, setShutdownCallback } from '../../../services/StdinManager';\n\ninterface DaemonConnectionManagerProps {\n children: React.ReactNode;\n}\n\nexport const DaemonConnectionManager: React.FC<DaemonConnectionManagerProps> = ({ children }) => {\n const { Box, Text } = useInk();\n const dispatch = useDispatch<AppDispatch>();\n const status = useSelector((state: RootState) => state.daemonStatus.status);\n const error = useSelector((state: RootState) => state.daemonStatus.error);\n const isShuttingDown = useRef(false);\n\n useEffect(() => {\n dispatch(launchDaemon());\n\n // Register shutdown callback for Ctrl+C handling\n const handleShutdown = async () => {\n if (isShuttingDown.current) return;\n isShuttingDown.current = true;\n\n try {\n const daemonManager = cliContainer.get<DaemonManager>(GLOBAL_TYPES.DaemonManager);\n if (daemonManager.isRunning()) {\n await daemonManager.stop();\n }\n } catch {\n // Ignore errors during shutdown\n }\n // daemonManager.stop() calls process.exit() at the end\n };\n\n setShutdownCallback(handleShutdown);\n\n return () => {\n clearShutdownCallback();\n };\n }, [dispatch]);\n\n if (status === 'starting') {\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Text color=\"yellow\">Connecting to Agiflow...</Text>\n </Box>\n );\n }\n\n if (status === 'error') {\n return (\n <Box flexDirection=\"column\" padding={1} borderStyle=\"round\" borderColor=\"red\">\n <Text color=\"red\" bold>\n Connection Error\n </Text>\n <Text>{error}</Text>\n <Text dimColor>Retrying in background...</Text>\n </Box>\n );\n }\n\n if (status === 'connected') {\n return <>{children}</>;\n }\n\n return null;\n};\n","import { cliContainer } from '@cli/container';\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { CredentialsService, DeviceCodeAuthService, type DeviceCodeResponse, type OrganizationInfo } from '@/services';\nimport { GLOBAL_TYPES } from '@/types';\nimport { useInk } from '../../../contexts/InkContext';\n\ninterface OauthSetupProps {\n children: (props: { isAuthenticated: boolean }) => React.ReactNode;\n}\n\ntype AuthStatus =\n | 'checking'\n | 'requesting_code'\n | 'polling'\n | 'selecting_org'\n | 'exchanging'\n | 'authenticated'\n | 'error';\n\nexport const OauthSetup: React.FC<OauthSetupProps> = ({ children }) => {\n const { Box, Text, Newline, Static, Link, useInput } = useInk();\n const queryClient = useQueryClient();\n const [deviceCode, setDeviceCode] = useState<DeviceCodeResponse | null>(null);\n const [accessToken, setAccessToken] = useState<string | null>(null);\n const [organizations, setOrganizations] = useState<OrganizationInfo[]>([]);\n const [selectedOrgIndex, setSelectedOrgIndex] = useState(0);\n const [status, setStatus] = useState<AuthStatus>('checking');\n const [errorMessage, setErrorMessage] = useState<string>('');\n const abortControllerRef = useRef<AbortController | null>(null);\n\n // Get services from DI container\n const authService = cliContainer.get<DeviceCodeAuthService>(GLOBAL_TYPES.DeviceCodeAuthService);\n const credentialsService = cliContainer.get<CredentialsService>(GLOBAL_TYPES.CredentialsService);\n\n // Check existing authentication\n const { data: existingAuth, isLoading: isCheckingAuth } = useQuery({\n queryKey: ['auth', 'check'],\n queryFn: async () => {\n const creds = await credentialsService.load();\n if (creds && creds.apiKey && creds.expiresAt && authService.isTokenValid(creds.expiresAt)) {\n return { authenticated: true };\n }\n return { authenticated: false };\n },\n retry: false,\n });\n\n // Request device code\n const deviceCodeMutation = useMutation({\n mutationFn: async () => {\n setStatus('requesting_code');\n return authService.requestDeviceCode('openid profile email');\n },\n onSuccess: (data) => {\n setDeviceCode(data);\n setStatus('polling');\n pollTokenMutation.mutate(data);\n },\n onError: (error) => {\n setStatus('error');\n setErrorMessage(error instanceof Error ? error.message : 'Failed to request device code');\n },\n });\n\n // Poll for token - now just gets token and organizations, doesn't exchange yet\n const pollTokenMutation = useMutation({\n mutationFn: async (codeResponse: DeviceCodeResponse) => {\n abortControllerRef.current = new AbortController();\n\n // Poll for the access token\n const tokenResponse = await authService.pollForToken(codeResponse.device_code, codeResponse.interval || 5, {\n signal: abortControllerRef.current.signal,\n });\n\n // Get user's organizations\n const orgs = await authService.listOrganizations(tokenResponse.access_token);\n\n return { accessToken: tokenResponse.access_token, organizations: orgs };\n },\n onSuccess: (data) => {\n setAccessToken(data.accessToken);\n setOrganizations(data.organizations);\n\n if (data.organizations.length === 0) {\n setStatus('error');\n setErrorMessage('You have no organizations. Please create one first.');\n } else if (data.organizations.length === 1) {\n // Auto-select single org\n exchangeForAgentMutation.mutate({ accessToken: data.accessToken, organizationId: data.organizations[0].id });\n } else {\n // Show organization selection\n setStatus('selecting_org');\n }\n },\n onError: (error) => {\n setStatus('error');\n setErrorMessage(error instanceof Error ? error.message : 'Failed to poll for token');\n },\n });\n\n // Exchange token for agent API key\n const exchangeForAgentMutation = useMutation({\n mutationFn: async ({ accessToken, organizationId }: { accessToken: string; organizationId: string }) => {\n setStatus('exchanging');\n return authService.exchangeForAgentApiKey(accessToken, organizationId);\n },\n onSuccess: async (apiKeyToken) => {\n // Save to credentials.json\n await credentialsService.setApiKey({\n apiKey: apiKeyToken.api_key,\n organizationId: apiKeyToken.organization_id,\n expiresAt: apiKeyToken.expires_at,\n deviceId: apiKeyToken.device_id,\n });\n\n setStatus('authenticated');\n queryClient.invalidateQueries({ queryKey: ['auth', 'check'] });\n },\n onError: (error) => {\n setStatus('error');\n setErrorMessage(error instanceof Error ? error.message : 'Failed to exchange for agent API key');\n },\n });\n\n // Handle organization selection input\n const handleSelectOrg = useCallback(() => {\n if (accessToken && organizations[selectedOrgIndex]) {\n exchangeForAgentMutation.mutate({\n accessToken,\n organizationId: organizations[selectedOrgIndex].id,\n });\n }\n }, [accessToken, organizations, selectedOrgIndex, exchangeForAgentMutation]);\n\n // Keyboard input for organization selection\n useInput(\n (_input, key) => {\n if (status !== 'selecting_org') return;\n\n if (key.upArrow) {\n setSelectedOrgIndex((prev) => Math.max(0, prev - 1));\n } else if (key.downArrow) {\n setSelectedOrgIndex((prev) => Math.min(organizations.length - 1, prev + 1));\n } else if (key.return) {\n handleSelectOrg();\n }\n },\n { isActive: status === 'selecting_org' },\n );\n\n // Cleanup abort controller on unmount\n useEffect(() => {\n return () => {\n abortControllerRef.current?.abort();\n };\n }, []);\n\n // Trigger device code request when not authenticated\n useEffect(() => {\n if (existingAuth && !existingAuth.authenticated && status === 'checking' && !isCheckingAuth) {\n deviceCodeMutation.mutate();\n }\n }, [existingAuth, status, isCheckingAuth, deviceCodeMutation]);\n\n // Authenticated - render children\n if (existingAuth?.authenticated) {\n return <>{children({ isAuthenticated: true })}</>;\n }\n\n // Checking authentication\n if (isCheckingAuth) {\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Box marginBottom={1}>\n <Text bold color=\"cyan\">\n 🔐 Agiflow Authentication\n </Text>\n </Box>\n <Box borderStyle=\"round\" borderColor=\"cyan\" padding={1}>\n <Box flexDirection=\"column\">\n <Text>\n <Text color=\"cyan\">◉ </Text>\n <Text>Checking existing credentials...</Text>\n </Text>\n </Box>\n </Box>\n </Box>\n );\n }\n\n // Requesting device code\n if (deviceCodeMutation.isPending) {\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Box marginBottom={1}>\n <Text bold color=\"cyan\">\n 🔐 Agiflow Authentication\n </Text>\n </Box>\n <Box borderStyle=\"round\" borderColor=\"cyan\" padding={1}>\n <Box flexDirection=\"column\">\n <Text>\n <Text color=\"green\">✓ </Text>\n <Text dimColor>Checked existing credentials</Text>\n </Text>\n <Text>\n <Text color=\"cyan\">◉ </Text>\n <Text>Requesting device authorization...</Text>\n </Text>\n </Box>\n </Box>\n </Box>\n );\n }\n\n // Show authentication instructions with automatic polling\n if (deviceCode) {\n const verificationUrl = `${deviceCode.verification_uri}?code=${encodeURIComponent(deviceCode.user_code)}`;\n\n return (\n <Static items={[1]}>\n {() => (\n <Box flexDirection=\"column\" padding={1}>\n <Box marginBottom={1}>\n <Text bold color=\"cyan\">\n 🔐 Agiflow Authentication\n </Text>\n </Box>\n\n <Box borderStyle=\"round\" borderColor=\"green\" padding={1} marginBottom={1}>\n <Box flexDirection=\"column\">\n <Text>\n <Text color=\"green\">✓ </Text>\n <Text dimColor>Checked existing credentials</Text>\n </Text>\n <Text>\n <Text color=\"green\">✓ </Text>\n <Text dimColor>Device authorization requested</Text>\n </Text>\n <Text>\n <Text color=\"cyan\">◉ </Text>\n <Text bold>Polling for authorization...</Text>\n </Text>\n </Box>\n </Box>\n\n <Box borderStyle=\"double\" borderColor=\"yellow\" padding={1} marginBottom={1}>\n <Box flexDirection=\"column\">\n <Text bold color=\"yellow\">\n 📋 Authentication Steps:\n </Text>\n <Newline />\n\n <Text>\n <Text bold color=\"cyan\">\n 1.{' '}\n </Text>\n <Text>Open this URL in your browser:</Text>\n </Text>\n <Box paddingLeft={3} marginBottom={1}>\n <Link url={verificationUrl}>\n <Text color=\"blue\" bold>\n {verificationUrl}\n </Text>\n </Link>\n </Box>\n\n <Text>\n <Text bold color=\"cyan\">\n 2.{' '}\n </Text>\n <Text>Enter this verification code:</Text>\n </Text>\n <Box paddingLeft={3} marginBottom={1} borderStyle=\"single\" borderColor=\"green\" paddingX={2}>\n <Text color=\"green\" bold>\n {deviceCode.user_code}\n </Text>\n </Box>\n\n <Text>\n <Text bold color=\"cyan\">\n 3.{' '}\n </Text>\n <Text>Sign in and approve the device</Text>\n </Text>\n <Newline />\n\n <Text dimColor>The CLI will automatically detect when you approve the device.</Text>\n </Box>\n </Box>\n\n <Box borderStyle=\"round\" borderColor=\"gray\" padding={1} marginBottom={1}>\n <Box flexDirection=\"column\">\n <Text dimColor>⏱️ Expires in: {Math.floor(deviceCode.expires_in / 60)} minutes</Text>\n <Text dimColor>💡 Tip: The URL includes your verification code for convenience</Text>\n </Box>\n </Box>\n </Box>\n )}\n </Static>\n );\n }\n\n // Organization selection state\n if (status === 'selecting_org') {\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Box marginBottom={1}>\n <Text bold color=\"cyan\">\n 🔐 Agiflow Authentication\n </Text>\n </Box>\n\n <Box borderStyle=\"round\" borderColor=\"green\" padding={1} marginBottom={1}>\n <Box flexDirection=\"column\">\n <Text>\n <Text color=\"green\">✓ </Text>\n <Text dimColor>Device authorized successfully</Text>\n </Text>\n <Text>\n <Text color=\"cyan\">◉ </Text>\n <Text bold>Select an organization</Text>\n </Text>\n </Box>\n </Box>\n\n <Box borderStyle=\"double\" borderColor=\"yellow\" padding={1} marginBottom={1}>\n <Box flexDirection=\"column\">\n <Text bold color=\"yellow\">\n 📋 Select Organization:\n </Text>\n <Newline />\n {organizations.map((org, index) => (\n <Text key={org.id}>\n <Text color={index === selectedOrgIndex ? 'green' : 'gray'}>\n {index === selectedOrgIndex ? '❯ ' : ' '}\n </Text>\n <Text bold={index === selectedOrgIndex}>{org.name}</Text>\n <Text dimColor> ({org.slug})</Text>\n </Text>\n ))}\n <Newline />\n <Text dimColor>Use ↑/↓ arrows to navigate, Enter to select</Text>\n </Box>\n </Box>\n </Box>\n );\n }\n\n // Exchanging token state\n if (status === 'exchanging') {\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Box marginBottom={1}>\n <Text bold color=\"cyan\">\n 🔐 Agiflow Authentication\n </Text>\n </Box>\n <Box borderStyle=\"round\" borderColor=\"cyan\" padding={1}>\n <Box flexDirection=\"column\">\n <Text>\n <Text color=\"green\">✓ </Text>\n <Text dimColor>Device authorized</Text>\n </Text>\n <Text>\n <Text color=\"green\">✓ </Text>\n <Text dimColor>Organization selected</Text>\n </Text>\n <Text>\n <Text color=\"cyan\">◉ </Text>\n <Text>Creating agent credentials...</Text>\n </Text>\n </Box>\n </Box>\n </Box>\n );\n }\n\n // Error state\n if (status === 'error' || deviceCodeMutation.isError || pollTokenMutation.isError) {\n const mutationError = deviceCodeMutation.error || pollTokenMutation.error;\n const displayMessage = errorMessage || mutationError?.message || 'Unknown error occurred';\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Box marginBottom={1}>\n <Text bold color=\"red\">\n ❌ Authentication Error\n </Text>\n </Box>\n <Box borderStyle=\"round\" borderColor=\"red\" padding={1} marginBottom={1}>\n <Text color=\"red\">{displayMessage}</Text>\n </Box>\n <Box borderStyle=\"single\" borderColor=\"gray\" padding={1}>\n <Box flexDirection=\"column\">\n <Text dimColor>💡 Troubleshooting:</Text>\n <Text dimColor> • Check your internet connection</Text>\n <Text dimColor> • Verify the server URL is correct</Text>\n <Text dimColor> • Ensure the token is valid and not expired</Text>\n <Text dimColor> • Try running the daemon again</Text>\n <Newline />\n <Text dimColor>⌨️ Press Ctrl+C to exit</Text>\n </Box>\n </Box>\n </Box>\n );\n }\n\n // Default loading state\n return null;\n};\n","import React, { useMemo } from 'react';\nimport { shallowEqual, useSelector } from 'react-redux';\nimport type { AgentManager } from '@/services';\nimport { RootState } from '@/store';\nimport { GLOBAL_TYPES } from '@/types';\nimport { LaunchAgent } from '../../../components/LaunchAgent';\nimport { cliContainer } from '../../../container';\nimport { useInk } from '../../../contexts/InkContext';\nimport { AgentConfigService } from '../../../services/agent/AgentConfigService';\nimport { AGENT_TYPES } from '../../../types';\n\nconst isMacOS = process.platform === 'darwin';\n\ninterface TabIndicatorProps {\n tabId: string;\n}\n\ninterface TabItemProps {\n tabId: string;\n index: number;\n}\n\n/**\n * Memoized component to display unread count badge\n * Only re-renders when unreadCount or activeTabId changes for this specific tab\n */\nconst UnreadCount: React.FC<TabIndicatorProps> = React.memo(({ tabId }) => {\n const unreadCount = useSelector((state: RootState) => state.agentTabs.tabs.find((t) => t.id === tabId)?.unreadCount);\n const isActive = useSelector((state: RootState) => state.agentTabs.activeTabId === tabId);\n\n if (!unreadCount || unreadCount <= 0 || isActive) {\n return null;\n }\n\n return <> ({unreadCount})</>;\n});\n\nUnreadCount.displayName = 'UnreadCount';\n\n/**\n * Memoized component to display waiting input indicator (red dot)\n * Only re-renders when waitingInput or activeTabId changes for this specific tab\n */\nconst WaitingInputIndicator: React.FC<TabIndicatorProps> = React.memo(({ tabId }) => {\n const { Text } = useInk();\n const waitingInput = useSelector(\n (state: RootState) => state.agentTabs.tabs.find((t) => t.id === tabId)?.waitingInput,\n );\n const isActive = useSelector((state: RootState) => state.agentTabs.activeTabId === tabId);\n\n if (!waitingInput || isActive) {\n return null;\n }\n\n return <Text color=\"red\">● </Text>;\n});\n\nWaitingInputIndicator.displayName = 'WaitingInputIndicator';\n\n/**\n * Memoized component for individual tab rendering\n * Selects only the data it needs (id, label) to minimize re-renders\n */\nconst TabItem: React.FC<TabItemProps> = React.memo(({ tabId, index }) => {\n const { Box, Text } = useInk();\n const label = useSelector((state: RootState) => state.agentTabs.tabs.find((t) => t.id === tabId)?.label);\n const isActive = useSelector((state: RootState) => state.agentTabs.activeTabId === tabId);\n\n const fKeyLabel = `^F${index + 1}`;\n\n return (\n <Box marginRight={2} borderStyle={isActive ? 'round' : undefined}>\n <WaitingInputIndicator tabId={tabId} />\n <Text color={'#d1d5db'} bold={isActive} dimColor={!isActive}>\n [{fKeyLabel}] {label}\n <UnreadCount tabId={tabId} />\n </Text>\n <LaunchAgent tabId={tabId} />\n </Box>\n );\n});\n\nTabItem.displayName = 'TabItem';\n\nexport const AgentTabs: React.FC = () => {\n const { Box, Text } = useInk();\n // Only select tab IDs - won't re-render when other tab properties change\n const tabIds = useSelector((state: RootState) => state.agentTabs.tabs.map((t) => t.id), shallowEqual);\n const activeTabId = useSelector((state: RootState) => state.agentTabs.activeTabId);\n\n // Get the effective working directory for the active tab\n const activeWorkingDir = useMemo(() => {\n if (!activeTabId) return null;\n\n try {\n const agentManager = cliContainer.get<AgentManager>(GLOBAL_TYPES.AgentManager);\n const agentContainer = agentManager.getAgentContainer(activeTabId);\n\n if (agentContainer) {\n const agentConfigService = agentContainer.get<AgentConfigService>(AGENT_TYPES.AgentConfigService);\n return agentConfigService.getEffectiveWorkingDir();\n }\n } catch {\n // Container or service not available yet\n }\n\n return process.cwd();\n }, [activeTabId]);\n\n return (\n <Box flexDirection=\"column\" marginTop={1}>\n <Box alignItems=\"center\" borderTop borderTopColor={'#d1d5db'} borderDimColor>\n {tabIds.map((tabId, index) => (\n <TabItem key={tabId} tabId={tabId} index={index} />\n ))}\n </Box>\n {activeWorkingDir && <Text dimColor>{activeWorkingDir}</Text>}\n {isMacOS && <Text dimColor>Press fn + Shift + F[num] to switch tabs</Text>}\n </Box>\n );\n};\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { RootState } from '@/store';\nimport { StdinForwarder } from '@/systems/cli/components/StdinForwarder';\nimport { AgentView } from '../../../../components/AgentView';\nimport { BoxSizeMeasure } from '../../../../components/BoxSizeMeasure';\nimport { CAPermissionGuard } from '../../../../components/CAPermissionGuard';\nimport { useInk } from '../../../../contexts/InkContext';\nimport { AgentTabs } from '../../components/AgentTabs';\n\nexport const Agents: React.FC = () => {\n const { Box } = useInk();\n const activeTabId = useSelector((state: RootState) => state.agentTabs.activeTabId);\n // F-key tab switching is handled by StdinForwarder via escape sequences\n\n return (\n <Box flexDirection=\"column\" flexGrow={1}>\n <CAPermissionGuard>\n <AgentView key={activeTabId} />\n </CAPermissionGuard>\n <BoxSizeMeasure>\n <AgentTabs />\n </BoxSizeMeasure>\n <StdinForwarder />\n </Box>\n );\n};\n","import React from 'react';\nimport { useInk } from '../../../../contexts/InkContext';\n\nexport const Onboarding: React.FC = () => {\n const { Box, Text } = useInk();\n\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"green\" padding={1} flexGrow={1}>\n <Text bold color=\"green\">\n Welcome to Agent CLI Daemon!\n </Text>\n <Box marginTop={1}>\n <Text>It looks like you don't have any active agent sessions.</Text>\n </Box>\n <Box marginTop={1}>\n <Text>\n Please use the Agiflow UI Dashboard to start a{' '}\n <Text bold color=\"blue\">\n Project Plan\n </Text>\n ,{' '}\n <Text bold color=\"blue\">\n Work Unit\n </Text>\n , or{' '}\n <Text bold color=\"blue\">\n Task Chat\n </Text>{' '}\n to begin.\n </Text>\n </Box>\n <Box marginTop={1}>\n <Text dimColor>The Agiflow UI Dashboard can be accessed in your browser.</Text>\n </Box>\n </Box>\n );\n};\n","import 'reflect-metadata'; // Must be first import for InversifyJS\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport React from 'react';\nimport { Provider, useSelector } from 'react-redux';\nimport { RootState, store } from '@/store';\nimport { InkProvider, useInk } from '../../contexts/InkContext';\nimport { DaemonConnectionManager } from './components/DaemonConnectionManager';\nimport { OauthSetup } from './guards/OauthSetup';\nimport { Agents } from './screens/Agents';\nimport { Onboarding } from './screens/Onboarding';\n\n// Create a client with memory management\nconst queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n retry: false,\n refetchOnWindowFocus: false,\n gcTime: 5 * 60 * 1000, // Garbage collect unused queries after 5 minutes\n staleTime: 30 * 1000, // Consider data stale after 30 seconds\n },\n },\n});\n\nconst DaemonAppContent: React.FC = () => {\n const { Box } = useInk();\n\n const tabs = useSelector((state: RootState) => state.agentTabs.tabs);\n const hasAgentTabs = tabs.length > 0; // No dashboard, so any tab is an agent\n\n return (\n <OauthSetup>\n {({ isAuthenticated }) => (\n <DaemonConnectionManager>\n <Box flexGrow={1} flexDirection=\"column\">\n {isAuthenticated && !hasAgentTabs ? <Onboarding /> : <Agents />}\n </Box>\n </DaemonConnectionManager>\n )}\n </OauthSetup>\n );\n};\n\nconst DaemonApp: React.FC = () => {\n return (\n <InkProvider>\n <Provider store={store}>\n <QueryClientProvider client={queryClient}>\n <DaemonAppContent />\n </QueryClientProvider>\n </Provider>\n </InkProvider>\n );\n};\n\nexport const startDaemonApp = async () => {\n // Dynamically import Ink's render function to avoid top-level yoga-layout import\n const { render } = await import('ink');\n // Disable Ink's stdin handling - we use StdinManager instead\n const { waitUntilExit } = render(<DaemonApp />, {\n stdin: process.stdin,\n stdout: process.stdout,\n stderr: process.stderr,\n });\n return waitUntilExit();\n};\n"],"names":["DaemonConnectionManager","children","Box","Text","useInk","dispatch","useDispatch","status","useSelector","state","error","isShuttingDown","useRef","useEffect","launchDaemon","setShutdownCallback","daemonManager","cliContainer","GLOBAL_TYPES","clearShutdownCallback","jsxDEV","this","OauthSetup","Newline","Static","Link","useInput","queryClient","useQueryClient","deviceCode","setDeviceCode","useState","accessToken","setAccessToken","organizations","setOrganizations","selectedOrgIndex","setSelectedOrgIndex","setStatus","errorMessage","setErrorMessage","abortControllerRef","authService","credentialsService","existingAuth","isCheckingAuth","useQuery","creds","deviceCodeMutation","useMutation","data","pollTokenMutation","codeResponse","tokenResponse","orgs","exchangeForAgentMutation","organizationId","apiKeyToken","handleSelectOrg","useCallback","_input","key","prev","verificationUrl","org","index","mutationError","displayMessage","isMacOS","UnreadCount","React","tabId","unreadCount","t","isActive","Fragment","WaitingInputIndicator","waitingInput","TabItem","label","fKeyLabel","LaunchAgent","AgentTabs","tabIds","shallowEqual","activeTabId","activeWorkingDir","useMemo","agentContainer","AGENT_TYPES","Agents","CAPermissionGuard","AgentView","BoxSizeMeasure","StdinForwarder","Onboarding","QueryClient","DaemonAppContent","hasAgentTabs","isAuthenticated","DaemonApp","InkProvider","Provider","store","QueryClientProvider","startDaemonApp","render","waitUntilExit"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { ak as s, aj as t, ab as o, ag as c, af as S, a2 as m, a6 as r, ai as n, aa as h, a8 as g, an as l, a9 as p, ae as M, al as P, ah as T, a7 as u, a3 as i, ac as C, ad as v, a5 as I, a4 as d, am as x, ao as A, ap as R, ar as f, aq as q, as as V } from "./index-C0rzZTeN.mjs";
1
+ import { ak as s, aj as t, ab as o, ag as c, af as S, a2 as m, a6 as r, ai as n, aa as h, a8 as g, an as l, a9 as p, ae as M, al as P, ah as T, a7 as u, a3 as i, ac as C, ad as v, a5 as I, a4 as d, am as x, ao as A, ap as R, ar as f, aq as q, as as V } from "./index-DBPWFpwa.mjs";
2
2
  export {
3
3
  s as AgentMessageCreateSchema,
4
4
  t as AgentMessageTypeSchema,
@@ -28,4 +28,4 @@ export {
28
28
  q as createTextPart,
29
29
  V as createToolInvocationInput
30
30
  };
31
- //# sourceMappingURL=index-C_8Nd03u.mjs.map
31
+ //# sourceMappingURL=index-B3zbGK0T.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-B3zbGK0T.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -1,4 +1,4 @@
1
- import { A as a, a as t, b as n, c as S, d as m, e as o, f as E, g as c, h as A, i as g, j as h, k as v, l as u, m as i, n as r, o as R, p, q as D, r as T, s as M, t as q, u as O, v as d, w as k, x as N, y as _, z as P, B as I, C as l, D as C, E as U, F as G, G as L, H as Y, I as f, J as B, K as V, L as x, M as y, N as z, O as b, P as j, Q as w, R as F, S as H, T as J, U as K, V as Q, W, X, Y as Z, Z as $, _ as ee, $ as se, a0 as ae, a1 as te } from "./index-C0rzZTeN.mjs";
1
+ import { A as a, a as t, b as n, c as S, d as m, e as o, f as E, g as c, h as A, i as g, j as h, k as v, l as u, m as i, n as r, o as R, p, q as D, r as T, s as M, t as q, u as O, v as d, w as k, x as N, y as _, z as P, B as I, C as l, D as C, E as U, F as G, G as L, H as Y, I as f, J as B, K as V, L as x, M as y, N as z, O as b, P as j, Q as w, R as F, S as H, T as J, U as K, V as Q, W, X, Y as Z, Z as $, _ as ee, $ as se, a0 as ae, a1 as te } from "./index-DBPWFpwa.mjs";
2
2
  export {
3
3
  a as AGENT_EVENT_TYPES,
4
4
  t as AGENT_STATUS,
@@ -57,4 +57,4 @@ export {
57
57
  ae as OutputStreamSchema,
58
58
  te as TraceIdSchema
59
59
  };
60
- //# sourceMappingURL=index-DFH7PylK.mjs.map
60
+ //# sourceMappingURL=index-Cm-TlnID.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-Cm-TlnID.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -12493,7 +12493,7 @@ let Ko = class {
12493
12493
  this.runtimeConfig = Cv.parse(t), this.appConfig = sw.parse({
12494
12494
  VITE_INJECT_AGIFLOW_APP_ENDPOINT: "https://agiflow.io",
12495
12495
  VITE_INJECT_AGIFLOW_APP_DOCKER_ENDPOINT: "https://agiflow.io",
12496
- VITE_AGENT_CLI_DOCKER_IMAGE: "agiflowai/agent-cli:v0.2.2",
12496
+ VITE_AGENT_CLI_DOCKER_IMAGE: "agiflowai/agent-cli:v0.2.3",
12497
12497
  VITE_AGENT_CLI_DOCKER_NETWORK: "",
12498
12498
  VITE_SAVE_RAW: "",
12499
12499
  VITE_MULTIPLEX_SOCKET_PATH: process.env.VITE_MULTIPLEX_SOCKET_PATH
@@ -14942,45 +14942,137 @@ let ku = class {
14942
14942
  return this.clientId;
14943
14943
  }
14944
14944
  /**
14945
- * Exchange verification token for API key
14946
- * Used by UI components after user completes browser authentication
14945
+ * Request a device code from the device authorization endpoint
14946
+ * RFC 8628 Device Authorization Request
14947
14947
  */
14948
- async exchangeTokenForApiKey(t, e) {
14949
- const r = await fetch(`${this.baseUrl}/api/v1/oauth/device/token`, {
14948
+ async requestDeviceCode(t = "openid profile email") {
14949
+ const e = await fetch(`${this.baseUrl}/api/v1/auth/device/code`, {
14950
14950
  method: "POST",
14951
14951
  headers: {
14952
- "Content-Type": "application/x-www-form-urlencoded"
14952
+ "Content-Type": "application/json"
14953
14953
  },
14954
- body: new URLSearchParams({
14955
- grant_type: "urn:ietf:params:oauth:grant-type:device_code",
14956
- device_code: e,
14957
- verification_token: t.trim(),
14958
- client_id: this.clientId
14954
+ body: JSON.stringify({
14955
+ client_id: this.clientId,
14956
+ scope: t
14957
+ })
14958
+ });
14959
+ if (!e.ok) {
14960
+ const r = await e.json().catch(() => ({}));
14961
+ throw new Error(r.error_description || `Device code request failed: ${e.status}`);
14962
+ }
14963
+ return e.json();
14964
+ }
14965
+ /**
14966
+ * Poll for device token using Better Auth's device token endpoint
14967
+ * RFC 8628 Device Access Token Request
14968
+ * Polls until user approves, denies, or token expires
14969
+ */
14970
+ async pollForToken(t, e, r) {
14971
+ let i = e;
14972
+ for (; ; ) {
14973
+ if (r?.signal?.aborted)
14974
+ throw new Error("Polling aborted");
14975
+ await this.sleep(i * 1e3);
14976
+ const n = await fetch(`${this.baseUrl}/api/v1/auth/device/token`, {
14977
+ method: "POST",
14978
+ headers: {
14979
+ "Content-Type": "application/json"
14980
+ },
14981
+ body: JSON.stringify({
14982
+ grant_type: "urn:ietf:params:oauth:grant-type:device_code",
14983
+ device_code: t,
14984
+ client_id: this.clientId
14985
+ })
14986
+ });
14987
+ if (n.ok)
14988
+ return n.json();
14989
+ const o = await n.json().catch(() => ({
14990
+ error: "authorization_pending"
14991
+ }));
14992
+ switch (o.error) {
14993
+ case "authorization_pending":
14994
+ r?.onPending?.();
14995
+ break;
14996
+ case "slow_down":
14997
+ i += 5, r?.onSlowDown?.();
14998
+ break;
14999
+ case "access_denied":
15000
+ throw new Error("Authorization denied by user");
15001
+ case "expired_token":
15002
+ throw new Error("Device code expired. Please start the authorization process again.");
15003
+ default:
15004
+ throw new Error(o.error_description || `Token request failed: ${o.error}`);
15005
+ }
15006
+ }
15007
+ }
15008
+ /**
15009
+ * List user's organizations from the access token
15010
+ * Used to let user select which organization the CLI agent should belong to
15011
+ */
15012
+ async listOrganizations(t) {
15013
+ const e = await fetch(`${this.baseUrl}/api/v1/cli/organizations`, {
15014
+ method: "GET",
15015
+ headers: {
15016
+ "Content-Type": "application/json",
15017
+ Authorization: `Bearer ${t}`
15018
+ }
15019
+ });
15020
+ if (!e.ok) {
15021
+ const i = await e.text();
15022
+ throw new Error(`Failed to list organizations: ${e.status} ${i}`);
15023
+ }
15024
+ return (await e.json()).organizations || [];
15025
+ }
15026
+ /**
15027
+ * Exchange user's access token for an agent API key in a specific organization
15028
+ * Creates or finds CLI daemon agent member and returns its API key
15029
+ */
15030
+ async exchangeForAgentApiKey(t, e) {
15031
+ const r = await fetch(`${this.baseUrl}/api/v1/cli/exchange-for-agent`, {
15032
+ method: "POST",
15033
+ headers: {
15034
+ "Content-Type": "application/json",
15035
+ Authorization: `Bearer ${t}`
15036
+ },
15037
+ body: JSON.stringify({
15038
+ organizationId: e
14959
15039
  })
14960
15040
  });
14961
15041
  if (!r.ok) {
14962
- const o = await r.text();
14963
- throw new Error(`Token exchange failed: ${r.status} ${o}`);
15042
+ const n = await r.text();
15043
+ throw new Error(`Failed to exchange for agent API key: ${r.status} ${n}`);
14964
15044
  }
14965
15045
  const i = await r.json();
14966
- if (!i.api_key)
14967
- throw new Error("Token exchange response missing api_key");
14968
- if (!i.organization_id)
14969
- throw new Error("Token exchange response missing organization_id");
14970
15046
  return {
14971
15047
  api_key: i.api_key,
14972
- key_id: "device-flow",
14973
- expires_at: Date.now() + i.expires_in * 1e3,
15048
+ key_id: i.key_id,
15049
+ expires_at: i.expires_at || Date.now() + 365 * 24 * 60 * 60 * 1e3,
14974
15050
  organization_id: i.organization_id,
14975
15051
  prefix: "agiflow_"
14976
15052
  };
14977
15053
  }
15054
+ /**
15055
+ * @deprecated Use listOrganizations + exchangeForAgentApiKey instead
15056
+ * Kept for backward compatibility
15057
+ */
15058
+ async createApiKeyFromToken(t) {
15059
+ const e = await this.listOrganizations(t);
15060
+ if (e.length === 0)
15061
+ throw new Error("User has no organizations");
15062
+ return this.exchangeForAgentApiKey(t, e[0].id);
15063
+ }
14978
15064
  /**
14979
15065
  * Check if token is still valid (with 5 minute buffer)
14980
15066
  */
14981
15067
  isTokenValid(t) {
14982
15068
  return Date.now() < t - 3e5;
14983
15069
  }
15070
+ /**
15071
+ * Helper to sleep for a specified duration
15072
+ */
15073
+ sleep(t) {
15074
+ return new Promise((e) => setTimeout(e, t));
15075
+ }
14984
15076
  };
14985
15077
  ku = gC([
14986
15078
  Ae(),
@@ -19301,7 +19393,7 @@ let Bu = class {
19301
19393
  const t = this.agentConfigService.getStoredAgentSessionId();
19302
19394
  if (t)
19303
19395
  try {
19304
- const { createGetAgentStatus: e } = await Promise.resolve().then(() => pT), { createSendAgentStatus: r } = await Promise.resolve().then(() => fI), { AGENT_STATUS: i } = await import("./index-DFH7PylK.mjs"), n = e(t, t), a = (await this.multiplexClient.request(n))?.payload?.result || i.IDLE;
19396
+ const { createGetAgentStatus: e } = await Promise.resolve().then(() => pT), { createSendAgentStatus: r } = await Promise.resolve().then(() => fI), { AGENT_STATUS: i } = await import("./index-Cm-TlnID.mjs"), n = e(t, t), a = (await this.multiplexClient.request(n))?.payload?.result || i.IDLE;
19305
19397
  await this.multiplexClient.publish(
19306
19398
  r(t, {
19307
19399
  agentType: this.agentConfigService.getAgentType() ?? void 0,
@@ -21213,7 +21305,7 @@ let ts = class {
21213
21305
  * Middleware layers wrap around this with setup (BEFORE) and cleanup (AFTER)
21214
21306
  */
21215
21307
  async launchPty(t) {
21216
- const { AGENT_STATUS: e } = await import("./index-DFH7PylK.mjs"), r = t.metadata.agentCommand, i = t.metadata.agentArgs;
21308
+ const { AGENT_STATUS: e } = await import("./index-Cm-TlnID.mjs"), r = t.metadata.agentCommand, i = t.metadata.agentArgs;
21217
21309
  if (!r)
21218
21310
  throw new Error("launchPty requires metadata.agentCommand to be set by middleware");
21219
21311
  const n = await this.getAgentEnvironmentVariablesForContext(t);
@@ -22414,7 +22506,7 @@ class ET extends dy {
22414
22506
  if (!e.length) return;
22415
22507
  const i = (/* @__PURE__ */ new Date()).toISOString();
22416
22508
  try {
22417
- const { createSelectComponent: n, createToolInvocationInput: o } = await import("./index-C_8Nd03u.mjs"), { createRequestApproval: s } = await Promise.resolve().then(() => Bi), a = e.map((_) => ({ label: _.text, value: _.number, selected: !!_.selected })), u = n(a), c = o(!1, u), f = s(r.agentSessionId, {
22509
+ const { createSelectComponent: n, createToolInvocationInput: o } = await import("./index-B3zbGK0T.mjs"), { createRequestApproval: s } = await Promise.resolve().then(() => Bi), a = e.map((_) => ({ label: _.text, value: _.number, selected: !!_.selected })), u = n(a), c = o(!1, u), f = s(r.agentSessionId, {
22418
22510
  toolName: "selectOption",
22419
22511
  toolArgs: { timestamp: i, options: a },
22420
22512
  input: c
@@ -42828,4 +42920,4 @@ export {
42828
42920
  gw as y,
42829
42921
  $v as z
42830
42922
  };
42831
- //# sourceMappingURL=index-C0rzZTeN.mjs.map
42923
+ //# sourceMappingURL=index-DBPWFpwa.mjs.map