({ config, settings, startupWarnings = [], version }: AppProps)
| 128 | }; |
| 129 | |
| 130 | const App = ({ config, settings, startupWarnings = [], version }: AppProps) => { |
| 131 | const isFocused = useFocus(); |
| 132 | useBracketedPaste(); |
| 133 | const [updateInfo, setUpdateInfo] = useState<UpdateObject | null>(null); |
| 134 | const { stdout } = useStdout(); |
| 135 | const nightly = version.includes('nightly'); |
| 136 | const { history, addItem, clearItems, loadHistory } = useHistory(); |
| 137 | |
| 138 | const [idePromptAnswered, setIdePromptAnswered] = useState(false); |
| 139 | const currentIDE = config.getIdeClient().getCurrentIde(); |
| 140 | useEffect(() => { |
| 141 | registerCleanup(() => config.getIdeClient().disconnect()); |
| 142 | }, [config]); |
| 143 | const shouldShowIdePrompt = |
| 144 | currentIDE && |
| 145 | !config.getIdeMode() && |
| 146 | !settings.merged.hasSeenIdeIntegrationNudge && |
| 147 | !idePromptAnswered; |
| 148 | |
| 149 | useEffect(() => { |
| 150 | const cleanup = setUpdateHandler(addItem, setUpdateInfo); |
| 151 | return cleanup; |
| 152 | }, [addItem]); |
| 153 | |
| 154 | const { |
| 155 | consoleMessages, |
| 156 | handleNewMessage, |
| 157 | clearConsoleMessages: clearConsoleMessagesState, |
| 158 | } = useConsoleMessages(); |
| 159 | |
| 160 | useEffect(() => { |
| 161 | const consolePatcher = new ConsolePatcher({ |
| 162 | onNewMessage: handleNewMessage, |
| 163 | debugMode: config.getDebugMode(), |
| 164 | }); |
| 165 | consolePatcher.patch(); |
| 166 | registerCleanup(consolePatcher.cleanup); |
| 167 | }, [handleNewMessage, config]); |
| 168 | |
| 169 | const { stats: sessionStats } = useSessionStats(); |
| 170 | const [staticNeedsRefresh, setStaticNeedsRefresh] = useState(false); |
| 171 | const [staticKey, setStaticKey] = useState(0); |
| 172 | const refreshStatic = useCallback(() => { |
| 173 | stdout.write(ansiEscapes.clearTerminal); |
| 174 | setStaticKey((prev) => prev + 1); |
| 175 | }, [setStaticKey, stdout]); |
| 176 | |
| 177 | const [anusMdFileCount, setAnusMdFileCount] = useState<number>(0); |
| 178 | const [debugMessage, setDebugMessage] = useState<string>(''); |
| 179 | const [themeError, setThemeError] = useState<string | null>(null); |
| 180 | const [authError, setAuthError] = useState<string | null>(null); |
| 181 | const [editorError, setEditorError] = useState<string | null>(null); |
| 182 | const [footerHeight, setFooterHeight] = useState<number>(0); |
| 183 | const [corgiMode, setCorgiMode] = useState(false); |
| 184 | const [isTrustedFolderState, setIsTrustedFolder] = useState( |
| 185 | config.isTrustedFolder(), |
| 186 | ); |
| 187 | const [currentModel, setCurrentModel] = useState(config.getModel()); |
nothing calls this directly
no test coverage detected