import type { AppConfig } from "./utils/config"; import type { ApprovalPolicy } from "@lib/approvals"; import type { ResponseItem } from "openai/resources/responses/responses"; import TerminalChat from "./components/chat/terminal-chat"; import TerminalChatPastRollout from "./components/chat/terminal-chat-past-rollout"; import { checkInGit } from "./utils/check-in-git"; import { CLI_VERSION, type TerminalChatSession } from "./utils/session.js"; import { onExit } from "./utils/terminal"; import { ConfirmInput } from "@inkjs/ui"; import { Box, Text, useApp, useStdin } from "ink"; import React, { useMemo, useState } from "react"; export type AppRollout = { session: TerminalChatSession; items: Array; }; type Props = { prompt?: string; config: AppConfig; imagePaths?: Array; rollout?: AppRollout; approvalPolicy: ApprovalPolicy; fullStdout: boolean; }; export default function App({ prompt, config, rollout, imagePaths, approvalPolicy, fullStdout, }: Props): JSX.Element { const app = useApp(); const [accepted, setAccepted] = useState(() => false); const [cwd, inGitRepo] = useMemo( () => [process.cwd(), checkInGit(process.cwd())], [], ); const { internal_eventEmitter } = useStdin(); internal_eventEmitter.setMaxListeners(20); if (rollout) { return ( ); } if (!inGitRepo && !accepted) { return ( ● OpenAI Codex{" "} (research preview) v{CLI_VERSION} Warning! It can be dangerous to run a coding agent outside of a git repo in case there are changes that you want to revert. Do you want to continue? {cwd} { app.exit(); onExit(); // eslint-disable-next-line console.error( "Quitting! Run again to accept or from inside a git repo", ); }} onConfirm={() => setAccepted(true)} /> ); } return ( ); }