import React, { useState } from "react"; import { Box, Text, useApp, useInput } from "ink"; import { CustomAuthFlow } from "./components/add-model-flow.tsx"; import { Config, writeConfig, mergeEnvVar, mergeAutofixEnvVar } from "./config.ts"; import { HeightlessCenteredBox } from "./components/centered-box.tsx"; export function PreflightModelAuth({ model, config, configPath, error }: { model: Config["models"][number], config: Config, configPath: string, error?: string, }) { const app = useApp(); const [ exitMessage, setExitMessage ] = useState(null); useInput((_, key) => { if(!key.escape) setExitMessage(null); }); return { error && { error } } {setExitMessage("Press CTRL-C to exit")}} onComplete={async (apiEnvVar) => { let index = config.models.indexOf(model); if(index >= 0) { if(apiEnvVar) await writeConfig(mergeEnvVar(config, model, apiEnvVar), configPath); } app.exit(); }} /> { exitMessage && { exitMessage } } } export function PreflightAutofixAuth< K extends "diffApply" | "fixJson" >({ autofixKey, model, config, configPath }: { autofixKey: K, model: Exclude, config: Config, configPath: string, }) { const app = useApp(); const [ exitMessage, setExitMessage ] = useState(null); useInput((_, key) => { if(!key.escape) setExitMessage(null); }); const modelName = (() => { if(autofixKey === "diffApply") return "diff-apply"; const _: "fixJson" = autofixKey; return "fix-json"; })(); return {`It looks like we need to set up auth for the ${modelName} model`} {setExitMessage("Press CTRL-C to exit")}} onComplete={async (apiEnvVar) => { if(apiEnvVar) { await writeConfig( mergeAutofixEnvVar(config, autofixKey, model, apiEnvVar), configPath, ); } app.exit(); }} /> { exitMessage && { exitMessage } } }