import * as React from 'react' import { useState } from 'react' import { Box, Link, Text } from '../ink.js' import { saveNvidiaApiKey } from '../utils/auth.js' import { Spinner } from './Spinner.js' import TextInput from './TextInput.js' type NvidiaLoginFlowProps = { onDone: () => void startingMessage?: string } export function NvidiaLoginFlow({ onDone, startingMessage, }: NvidiaLoginFlowProps): React.ReactNode { const [isBusy, setIsBusy] = useState(false) const [status, setStatus] = useState(null) const [inputValue, setInputValue] = useState('') const [cursorOffset, setCursorOffset] = useState(0) async function handleSubmit(value: string): Promise { const trimmed = value.trim() if (!trimmed) { return } setIsBusy(true) setStatus(null) try { await saveNvidiaApiKey(trimmed) onDone() } catch (error) { setStatus(error instanceof Error ? error.message : String(error)) } finally { setIsBusy(false) } } if (isBusy) { return ( Configuring NVIDIA NIM for Mervelas... Mervelas is connecting to NVIDIA inference microservices. ) } return ( {startingMessage ?? 'Mervelas can use NVIDIA NIM with your NVIDIA API key.'} NVIDIA NIM offers many free AI models. You need an NVIDIA Developer account to get started. Create a key at build.nvidia.com to use NVIDIA's endpoint. Paste your NVIDIA API key: { setInputValue('') setCursorOffset(0) }} cursorOffset={cursorOffset} onChangeCursorOffset={setCursorOffset} columns={72} mask="*" /> {status ? {status} : null} Press Enter to save, or Esc{' '} to cancel. ) }