@terminai/cli 0.23.0 → 0.25.0

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.
Files changed (51) hide show
  1. package/dist/package.json +4 -4
  2. package/dist/src/config/auth.js +21 -0
  3. package/dist/src/config/auth.js.map +1 -1
  4. package/dist/src/config/effectiveAuthType.d.ts +9 -0
  5. package/dist/src/config/effectiveAuthType.js +48 -0
  6. package/dist/src/config/effectiveAuthType.js.map +1 -0
  7. package/dist/src/config/settingsToProviderConfig.js +28 -0
  8. package/dist/src/config/settingsToProviderConfig.js.map +1 -1
  9. package/dist/src/core/initializer.js +4 -2
  10. package/dist/src/core/initializer.js.map +1 -1
  11. package/dist/src/core/initializer.test.js +16 -3
  12. package/dist/src/core/initializer.test.js.map +1 -1
  13. package/dist/src/gemini.js +6 -5
  14. package/dist/src/gemini.js.map +1 -1
  15. package/dist/src/generated/git-commit.d.ts +2 -2
  16. package/dist/src/generated/git-commit.js +2 -2
  17. package/dist/src/ui/AppContainer.js +21 -6
  18. package/dist/src/ui/AppContainer.js.map +1 -1
  19. package/dist/src/ui/auth/AuthProviderWizardFlow.js +11 -1
  20. package/dist/src/ui/auth/AuthProviderWizardFlow.js.map +1 -1
  21. package/dist/src/ui/auth/AuthProviderWizardFlow.test.js +26 -0
  22. package/dist/src/ui/auth/AuthProviderWizardFlow.test.js.map +1 -1
  23. package/dist/src/ui/auth/OpenAIChatGptOAuthSetupDialog.d.ts +16 -0
  24. package/dist/src/ui/auth/OpenAIChatGptOAuthSetupDialog.js +344 -0
  25. package/dist/src/ui/auth/OpenAIChatGptOAuthSetupDialog.js.map +1 -0
  26. package/dist/src/ui/auth/OpenAICompatibleSetupDialog.js +3 -1
  27. package/dist/src/ui/auth/OpenAICompatibleSetupDialog.js.map +1 -1
  28. package/dist/src/ui/auth/ProviderWizard.d.ts +2 -1
  29. package/dist/src/ui/auth/ProviderWizard.js +27 -3
  30. package/dist/src/ui/auth/ProviderWizard.js.map +1 -1
  31. package/dist/src/ui/auth/ProviderWizard.test.js +39 -3
  32. package/dist/src/ui/auth/ProviderWizard.test.js.map +1 -1
  33. package/dist/src/ui/auth/useAuth.js +7 -6
  34. package/dist/src/ui/auth/useAuth.js.map +1 -1
  35. package/dist/src/ui/commands/authCommand.js +78 -2
  36. package/dist/src/ui/commands/authCommand.js.map +1 -1
  37. package/dist/src/ui/commands/authCommand.test.js +3 -1
  38. package/dist/src/ui/commands/authCommand.test.js.map +1 -1
  39. package/dist/src/ui/components/DialogManager.js +22 -0
  40. package/dist/src/ui/components/DialogManager.js.map +1 -1
  41. package/dist/src/ui/hooks/useQuotaAndFallback.js +2 -1
  42. package/dist/src/ui/hooks/useQuotaAndFallback.js.map +1 -1
  43. package/dist/src/ui/hooks/useQuotaAndFallback.test.js +1 -1
  44. package/dist/src/ui/hooks/useQuotaAndFallback.test.js.map +1 -1
  45. package/dist/src/ui/types.d.ts +2 -1
  46. package/dist/src/ui/types.js +1 -0
  47. package/dist/src/ui/types.js.map +1 -1
  48. package/dist/src/validateNonInterActiveAuth.js +4 -1
  49. package/dist/src/validateNonInterActiveAuth.js.map +1 -1
  50. package/dist/tsconfig.tsbuildinfo +1 -1
  51. package/package.json +4 -4
@@ -0,0 +1,344 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * @license
4
+ * Copyright 2025 Google LLC
5
+ * Portions Copyright 2025 TerminaI Authors
6
+ * SPDX-License-Identifier: Apache-2.0
7
+ */
8
+ import { Box, Text } from 'ink';
9
+ import { useCallback, useEffect, useRef, useState } from 'react';
10
+ import { buildWizardSettingsPatch, ChatGptOAuthClient, ChatGptOAuthCredentialStorage, DEFAULT_CHATGPT_CODEX_BASE_URL, DEFAULT_OPENAI_OAUTH_REDIRECT_PORT, tryImportFromCodexCli, tryImportFromOpenCode, coreEvents, CoreEvent, } from '@terminai/core';
11
+ import { SettingScope } from '../../config/settings.js';
12
+ import { theme } from '../semantic-colors.js';
13
+ import { useTextBuffer } from '../components/shared/text-buffer.js';
14
+ import { TextInput } from '../components/shared/TextInput.js';
15
+ import { checkExhaustive } from '../../utils/checks.js';
16
+ import process from 'node:process';
17
+ import * as http from 'node:http';
18
+ import { URL } from 'node:url';
19
+ import { CliSpinner } from '../components/CliSpinner.js';
20
+ import open from 'open';
21
+ export function OpenAIChatGptOAuthSetupDialog({ settings, terminalWidth, onBack, onComplete, onAuthError, }) {
22
+ const viewportWidth = Math.max(20, (terminalWidth ?? process.stdout.columns ?? 80) - 8);
23
+ const [step, setStep] = useState('model');
24
+ const [authUrl, setAuthUrl] = useState(null);
25
+ const [oauthState, setOauthState] = useState(null);
26
+ const [codeVerifier, setCodeVerifier] = useState(null);
27
+ const [oauthInProgress, setOauthInProgress] = useState(false);
28
+ const serverRef = useRef(null);
29
+ const openaiSettings = settings.merged.llm?.openaiChatgptOauth;
30
+ const defaultModel = openaiSettings?.model || '';
31
+ const defaultBaseUrl = openaiSettings?.baseUrl || DEFAULT_CHATGPT_CODEX_BASE_URL;
32
+ const modelBuffer = useTextBuffer({
33
+ initialText: defaultModel,
34
+ initialCursorOffset: defaultModel.length,
35
+ viewport: { width: viewportWidth, height: 3 },
36
+ isValidPath: () => false,
37
+ inputFilter: (text) => text.replace(/[\r\n]/g, ''),
38
+ singleLine: true,
39
+ });
40
+ const baseUrlBuffer = useTextBuffer({
41
+ initialText: defaultBaseUrl,
42
+ initialCursorOffset: defaultBaseUrl.length,
43
+ viewport: { width: viewportWidth, height: 3 },
44
+ isValidPath: () => false,
45
+ inputFilter: (text) => text.replace(/[\r\n]/g, ''),
46
+ singleLine: true,
47
+ });
48
+ const manualPasteBuffer = useTextBuffer({
49
+ initialText: '',
50
+ initialCursorOffset: 0,
51
+ viewport: { width: viewportWidth, height: 3 },
52
+ isValidPath: () => false,
53
+ inputFilter: (text) => text.replace(/[\r\n]/g, ''),
54
+ singleLine: true,
55
+ });
56
+ // Calculate target scope freshly on every render to avoid stale closure issues
57
+ // if settings object is mutated but not replaced.
58
+ const workspaceSettings = settings.forScope(SettingScope.Workspace).settings;
59
+ const workspaceOpenai = workspaceSettings.llm?.openaiChatgptOauth;
60
+ const hasWorkspaceOverride = workspaceSettings.llm?.provider !== undefined ||
61
+ workspaceSettings.llm?.openaiCompatible !== undefined ||
62
+ workspaceSettings.llm?.openaiChatgptOauth !== undefined ||
63
+ !!workspaceOpenai?.baseUrl ||
64
+ !!workspaceOpenai?.model ||
65
+ !!workspaceOpenai?.internalModel;
66
+ const targetScope = hasWorkspaceOverride
67
+ ? SettingScope.Workspace
68
+ : SettingScope.User;
69
+ useEffect(() => () => {
70
+ try {
71
+ serverRef.current?.close();
72
+ }
73
+ catch {
74
+ // ignore
75
+ }
76
+ serverRef.current = null;
77
+ }, []);
78
+ const startOauthFlow = useCallback(async (client) => {
79
+ const redirectUri = `http://localhost:${DEFAULT_OPENAI_OAUTH_REDIRECT_PORT}/auth/callback`;
80
+ const start = client.startAuthorization({ redirectUri });
81
+ setAuthUrl(start.authUrl);
82
+ setOauthState(start.state);
83
+ setCodeVerifier(start.codeVerifier);
84
+ setOauthInProgress(true);
85
+ // Auto-open browser like Google OAuth does
86
+ coreEvents.emit(CoreEvent.UserFeedback, {
87
+ severity: 'info',
88
+ message: `\nChatGPT OAuth login required.\n` +
89
+ `Attempting to open authentication page in your browser.\n` +
90
+ `Otherwise navigate to:\n${start.authUrl}\n`,
91
+ });
92
+ try {
93
+ const childProcess = await open(start.authUrl);
94
+ childProcess.on('error', (error) => {
95
+ coreEvents.emit(CoreEvent.UserFeedback, {
96
+ severity: 'warning',
97
+ message: `Could not auto-open browser: ${error.message}. Please copy the URL above.`,
98
+ });
99
+ });
100
+ }
101
+ catch (_err) {
102
+ // Browser auto-open failed, user can still copy the URL
103
+ coreEvents.emit(CoreEvent.UserFeedback, {
104
+ severity: 'warning',
105
+ message: 'Could not auto-open browser. Please copy the URL above.',
106
+ });
107
+ }
108
+ const server = await bindOAuthServerWithCancelRetry({
109
+ expectedState: start.state,
110
+ onCode: async (code) => {
111
+ const creds = await client.exchangeAuthorizationCode({
112
+ code,
113
+ redirectUri,
114
+ codeVerifier: start.codeVerifier,
115
+ });
116
+ await ChatGptOAuthCredentialStorage.save(creds);
117
+ coreEvents.emit(CoreEvent.UserFeedback, {
118
+ severity: 'info',
119
+ message: 'ChatGPT OAuth authentication succeeded!\n',
120
+ });
121
+ void onComplete();
122
+ },
123
+ onError: (e) => {
124
+ onAuthError(e.message);
125
+ },
126
+ });
127
+ serverRef.current = server;
128
+ }, [onAuthError, onComplete]);
129
+ const applyProviderSettings = useCallback(() => {
130
+ const model = modelBuffer.text.trim();
131
+ if (!model) {
132
+ onAuthError('Model is required.');
133
+ setStep('model');
134
+ return false;
135
+ }
136
+ const baseUrl = baseUrlBuffer.text.trim() || DEFAULT_CHATGPT_CODEX_BASE_URL;
137
+ const patches = buildWizardSettingsPatch({
138
+ provider: 'openai_chatgpt_oauth',
139
+ openaiChatgptOauth: { model, baseUrl },
140
+ });
141
+ for (const patch of patches) {
142
+ settings.setValue(targetScope, patch.path, patch.value);
143
+ }
144
+ return true;
145
+ }, [
146
+ baseUrlBuffer.text,
147
+ modelBuffer.text,
148
+ onAuthError,
149
+ settings,
150
+ targetScope,
151
+ ]);
152
+ const onSubmit = async () => {
153
+ switch (step) {
154
+ case 'model':
155
+ onAuthError(null);
156
+ setStep('base_url');
157
+ return;
158
+ case 'base_url': {
159
+ onAuthError(null);
160
+ if (!applyProviderSettings())
161
+ return;
162
+ const client = new ChatGptOAuthClient();
163
+ const imported = (await tryImportFromCodexCli(client)) ??
164
+ (await tryImportFromOpenCode(client));
165
+ // Ensure imported credentials strictly have the required account ID
166
+ if (imported && imported.accountId) {
167
+ await ChatGptOAuthCredentialStorage.save(imported);
168
+ void onComplete();
169
+ return;
170
+ }
171
+ setStep('oauth');
172
+ return;
173
+ }
174
+ case 'oauth': {
175
+ // Manual paste submit
176
+ onAuthError(null);
177
+ const redirectUrl = manualPasteBuffer.text.trim();
178
+ const parsed = parseRedirectUrl(redirectUrl);
179
+ if (!parsed) {
180
+ onAuthError('Could not parse redirect URL. Paste the full URL from your browser.');
181
+ return;
182
+ }
183
+ if (!oauthState || parsed.state !== oauthState) {
184
+ onAuthError('State mismatch. Restart the OAuth flow and try again.');
185
+ return;
186
+ }
187
+ if (!codeVerifier) {
188
+ onAuthError('OAuth state is missing. Restart the OAuth flow.');
189
+ return;
190
+ }
191
+ const redirectUri = `http://localhost:${DEFAULT_OPENAI_OAUTH_REDIRECT_PORT}/auth/callback`;
192
+ const client = new ChatGptOAuthClient();
193
+ const creds = await client.exchangeAuthorizationCode({
194
+ code: parsed.code,
195
+ redirectUri,
196
+ codeVerifier,
197
+ });
198
+ await ChatGptOAuthCredentialStorage.save(creds);
199
+ void onComplete();
200
+ return;
201
+ }
202
+ default:
203
+ checkExhaustive(step);
204
+ }
205
+ };
206
+ useEffect(() => {
207
+ if (step !== 'oauth' || oauthInProgress)
208
+ return;
209
+ if (!applyProviderSettings())
210
+ return;
211
+ const client = new ChatGptOAuthClient();
212
+ void startOauthFlow(client).catch((e) => {
213
+ const msg = e instanceof Error ? e.message : 'Failed to start OAuth flow';
214
+ onAuthError(msg);
215
+ });
216
+ }, [
217
+ applyProviderSettings,
218
+ oauthInProgress,
219
+ onAuthError,
220
+ startOauthFlow,
221
+ step,
222
+ ]);
223
+ const title = 'ChatGPT OAuth setup';
224
+ const description = (() => {
225
+ switch (step) {
226
+ case 'model':
227
+ return 'Enter the model ID (e.g. gpt-5.2-codex).';
228
+ case 'base_url':
229
+ return 'Optional: override the Codex base URL (default is chatgpt.com).';
230
+ case 'oauth':
231
+ return authUrl
232
+ ? 'Open the URL below in your browser to sign in. If you cannot use the local callback, paste the final redirect URL here.'
233
+ : 'Starting OAuth...';
234
+ default:
235
+ checkExhaustive(step);
236
+ return '';
237
+ }
238
+ })();
239
+ const buffer = step === 'model'
240
+ ? modelBuffer
241
+ : step === 'base_url'
242
+ ? baseUrlBuffer
243
+ : manualPasteBuffer;
244
+ return (_jsxs(Box, { borderStyle: "round", borderColor: theme.border.focused, flexDirection: "column", padding: 1, width: "100%", children: [_jsx(Text, { bold: true, color: theme.text.primary, children: title }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: theme.text.primary, children: description }) }), step === 'oauth' && authUrl && (_jsxs(Box, { marginTop: 1, flexDirection: "column", width: "100%", children: [_jsx(Text, { color: theme.text.secondary, children: "If browser didn't open, copy this URL:" }), _jsx(Box, { marginTop: 1, width: "100%", children: _jsx(Text, { color: theme.text.link, wrap: "wrap", children: authUrl }) }), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: theme.text.secondary, children: [_jsx(CliSpinner, { type: "dots" }), " Waiting for OAuth callback on", ' ', `localhost:${DEFAULT_OPENAI_OAUTH_REDIRECT_PORT}`] }) })] })), _jsx(Box, { marginTop: 1, children: _jsx(Box, { borderStyle: "round", borderColor: theme.border.default, paddingX: 1, flexGrow: 1, children: _jsx(TextInput, { buffer: buffer, onSubmit: onSubmit, onCancel: onBack }) }) }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: theme.text.secondary, children: "(Press Enter to continue, Esc to go back)" }), _jsxs(Text, { color: theme.text.secondary, children: ["Saving config scope:", ' ', targetScope === SettingScope.Workspace ? 'workspace' : 'user'] })] })] }));
245
+ }
246
+ function parseRedirectUrl(urlText) {
247
+ try {
248
+ const url = new URL(urlText);
249
+ const code = url.searchParams.get('code') ?? '';
250
+ const state = url.searchParams.get('state') ?? '';
251
+ if (!code || !state)
252
+ return null;
253
+ return { code, state };
254
+ }
255
+ catch {
256
+ return null;
257
+ }
258
+ }
259
+ async function bindOAuthServerWithCancelRetry(input) {
260
+ const port = DEFAULT_OPENAI_OAUTH_REDIRECT_PORT;
261
+ const host = 'localhost';
262
+ const server = http.createServer((req, res) => {
263
+ try {
264
+ const url = new URL(req.url ?? '/', `http://${host}:${port}`);
265
+ if (url.pathname === '/cancel') {
266
+ res.writeHead(200, { 'Content-Type': 'text/plain' });
267
+ res.end('cancelled');
268
+ try {
269
+ server.close();
270
+ }
271
+ catch {
272
+ // ignore
273
+ }
274
+ return;
275
+ }
276
+ if (url.pathname !== '/auth/callback') {
277
+ res.writeHead(404, { 'Content-Type': 'text/plain' });
278
+ res.end('not found');
279
+ return;
280
+ }
281
+ const code = url.searchParams.get('code') ?? '';
282
+ const state = url.searchParams.get('state') ?? '';
283
+ if (!code || !state) {
284
+ res.writeHead(400, { 'Content-Type': 'text/plain' });
285
+ res.end('missing code/state');
286
+ return;
287
+ }
288
+ if (state !== input.expectedState) {
289
+ res.writeHead(400, { 'Content-Type': 'text/plain' });
290
+ res.end('state mismatch');
291
+ return;
292
+ }
293
+ res.writeHead(200, { 'Content-Type': 'text/html' });
294
+ res.end('<!doctype html><meta charset="utf-8"><title>TerminaI</title><p>Authentication complete. You can close this tab.</p>');
295
+ void input.onCode(code).catch((e) => {
296
+ const err = e instanceof Error ? e : new Error('OAuth exchange failed');
297
+ input.onError(err);
298
+ });
299
+ }
300
+ catch (e) {
301
+ const err = e instanceof Error ? e : new Error('OAuth callback failed');
302
+ input.onError(err);
303
+ res.writeHead(500, { 'Content-Type': 'text/plain' });
304
+ res.end('error');
305
+ }
306
+ });
307
+ await listenWithCancelRetry(server, { host, port });
308
+ return server;
309
+ }
310
+ async function listenWithCancelRetry(server, input) {
311
+ const attempts = 10;
312
+ const delayMs = 200;
313
+ for (let i = 0; i < attempts; i++) {
314
+ try {
315
+ await new Promise((resolve, reject) => {
316
+ const onError = (err) => {
317
+ server.off('error', onError);
318
+ reject(err);
319
+ };
320
+ server.once('error', onError);
321
+ server.listen(input.port, input.host, () => {
322
+ server.off('error', onError);
323
+ resolve();
324
+ });
325
+ });
326
+ return;
327
+ }
328
+ catch (e) {
329
+ const code = typeof e === 'object' &&
330
+ e !== null &&
331
+ 'code' in e &&
332
+ typeof e.code === 'string'
333
+ ? e.code
334
+ : '';
335
+ if (code !== 'EADDRINUSE') {
336
+ throw e;
337
+ }
338
+ await fetch(`http://${input.host}:${input.port}/cancel`).catch(() => { });
339
+ await new Promise((r) => setTimeout(r, delayMs));
340
+ }
341
+ }
342
+ throw new Error(`Failed to bind ${input.host}:${input.port}`);
343
+ }
344
+ //# sourceMappingURL=OpenAIChatGptOAuthSetupDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenAIChatGptOAuthSetupDialog.js","sourceRoot":"","sources":["../../../../src/ui/auth/OpenAIChatGptOAuthSetupDialog.tsx"],"names":[],"mappings":"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"}
@@ -57,7 +57,9 @@ export function OpenAICompatibleSetupDialog({ settings, terminalWidth, onBack, o
57
57
  const targetScope = useMemo(() => {
58
58
  const workspaceSettings = settings.forScope(SettingScope.Workspace).settings;
59
59
  const workspaceOpenai = workspaceSettings.llm?.openaiCompatible;
60
- const hasWorkspaceOverride = workspaceSettings.llm?.provider === 'openai_compatible' ||
60
+ const hasWorkspaceOverride = workspaceSettings.llm?.provider !== undefined ||
61
+ workspaceSettings.llm?.openaiCompatible !== undefined ||
62
+ workspaceSettings.llm?.openaiChatgptOauth !== undefined ||
61
63
  !!workspaceOpenai?.baseUrl ||
62
64
  !!workspaceOpenai?.model ||
63
65
  !!workspaceOpenai?.auth?.type ||
@@ -1 +1 @@
1
- {"version":3,"file":"OpenAICompatibleSetupDialog.js","sourceRoot":"","sources":["../../../../src/ui/auth/OpenAICompatibleSetupDialog.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OpenAICompatibleSetupDialog.js","sourceRoot":"","sources":["../../../../src/ui/auth/OpenAICompatibleSetupDialog.tsx"],"names":[],"mappings":"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"}
@@ -8,8 +8,9 @@ import type { LoadedSettings } from '../../config/settings.js';
8
8
  interface Props {
9
9
  settings: LoadedSettings;
10
10
  onSelectOpenAICompatible: () => void;
11
+ onSelectOpenAIChatGptOauth: () => void;
11
12
  onProceedToGeminiAuth: () => void | Promise<void>;
12
13
  onAuthError: (error: string | null) => void;
13
14
  }
14
- export declare function ProviderWizard({ settings, onSelectOpenAICompatible, onProceedToGeminiAuth, onAuthError, }: Props): import("react/jsx-runtime").JSX.Element;
15
+ export declare function ProviderWizard({ settings, onSelectOpenAICompatible, onSelectOpenAIChatGptOauth, onProceedToGeminiAuth, onAuthError, }: Props): import("react/jsx-runtime").JSX.Element;
15
16
  export {};
@@ -10,7 +10,17 @@ import { theme } from '../semantic-colors.js';
10
10
  import { RadioButtonSelect } from '../components/shared/RadioButtonSelect.js';
11
11
  import { SettingScope } from '../../config/settings.js';
12
12
  import { buildWizardSettingsPatch } from '@terminai/core';
13
- export function ProviderWizard({ settings, onSelectOpenAICompatible, onProceedToGeminiAuth, onAuthError, }) {
13
+ export function ProviderWizard({ settings, onSelectOpenAICompatible, onSelectOpenAIChatGptOauth, onProceedToGeminiAuth, onAuthError, }) {
14
+ const isOpenAiChatGptOauthDisabled = (() => {
15
+ const raw = process.env['TERMINAI_DISABLE_OPENAI_CHATGPT_OAUTH'];
16
+ if (raw === undefined)
17
+ return false;
18
+ const normalized = raw.trim().toLowerCase();
19
+ return (normalized === '1' ||
20
+ normalized === 'true' ||
21
+ normalized === 'yes' ||
22
+ normalized === 'on');
23
+ })();
14
24
  const targetScope = (() => {
15
25
  const workspaceSettings = settings.forScope(SettingScope.Workspace).settings;
16
26
  const hasWorkspaceOverride = workspaceSettings.llm?.provider !== undefined ||
@@ -22,12 +32,21 @@ export function ProviderWizard({ settings, onSelectOpenAICompatible, onProceedTo
22
32
  settings.setValue(targetScope, patch.path, patch.value);
23
33
  }
24
34
  };
25
- return (_jsxs(Box, { borderStyle: "round", borderColor: theme.border.focused, flexDirection: "column", padding: 1, width: "100%", children: [_jsx(Text, { bold: true, color: theme.text.primary, children: "Choose your model provider" }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: theme.text.primary, children: "TerminaI can use different providers. Select one to continue:" }) }), _jsx(Box, { marginTop: 1, children: _jsx(RadioButtonSelect, { items: [
35
+ return (_jsxs(Box, { borderStyle: "round", borderColor: theme.border.focused, flexDirection: "column", padding: 1, width: "100%", children: [_jsx(Text, { bold: true, color: theme.text.primary, children: "Choose your model provider" }), targetScope === SettingScope.Workspace && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "yellow", children: "\u26A0\uFE0F Workspace settings detected - selection will apply to this project only." }) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: theme.text.primary, children: "TerminaI can use different providers. Select one to continue:" }) }), _jsx(Box, { marginTop: 1, children: _jsx(RadioButtonSelect, { items: [
26
36
  {
27
37
  label: 'Google Gemini',
28
38
  value: 'gemini',
29
39
  key: 'gemini',
30
40
  },
41
+ ...(isOpenAiChatGptOauthDisabled
42
+ ? []
43
+ : [
44
+ {
45
+ label: 'ChatGPT Plus/Pro (OAuth)',
46
+ value: 'openai_chatgpt_oauth',
47
+ key: 'openai_chatgpt_oauth',
48
+ },
49
+ ]),
31
50
  {
32
51
  label: 'OpenAI Compatible',
33
52
  value: 'openai_compatible',
@@ -45,6 +64,10 @@ export function ProviderWizard({ settings, onSelectOpenAICompatible, onProceedTo
45
64
  onSelectOpenAICompatible();
46
65
  return;
47
66
  }
67
+ if (provider === 'openai_chatgpt_oauth') {
68
+ onSelectOpenAIChatGptOauth();
69
+ return;
70
+ }
48
71
  if (provider === 'anthropic') {
49
72
  onAuthError('Anthropic is not yet supported.');
50
73
  return;
@@ -53,7 +76,8 @@ export function ProviderWizard({ settings, onSelectOpenAICompatible, onProceedTo
53
76
  applyPatches(buildWizardSettingsPatch({ provider: 'gemini' }));
54
77
  // 2.2 Fix: Clear OpenAI auth type if present to avoid inconsistent state
55
78
  const currentAuthType = settings.merged.security?.auth?.selectedType;
56
- if (currentAuthType === 'openai-compatible') {
79
+ if (currentAuthType === 'openai-compatible' ||
80
+ currentAuthType === 'openai-chatgpt-oauth') {
57
81
  settings.setValue(SettingScope.User, 'security.auth.selectedType', undefined);
58
82
  settings.setValue(SettingScope.Workspace, 'security.auth.selectedType', undefined);
59
83
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ProviderWizard.js","sourceRoot":"","sources":["../../../../src/ui/auth/ProviderWizard.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProviderWizard.js","sourceRoot":"","sources":["../../../../src/ui/auth/ProviderWizard.tsx"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
5
5
  * Portions Copyright 2025 TerminaI Authors
6
6
  * SPDX-License-Identifier: Apache-2.0
7
7
  */
8
- import { describe, expect, it, vi } from 'vitest';
8
+ import { describe, expect, it, vi, afterEach } from 'vitest';
9
9
  import { ProviderWizard } from './ProviderWizard.js';
10
10
  import { renderWithProviders } from '../../test-utils/render.js';
11
11
  import { SettingScope } from '../../config/settings.js';
@@ -22,6 +22,9 @@ function getRadioProps() {
22
22
  return call;
23
23
  }
24
24
  describe('ProviderWizard', () => {
25
+ afterEach(() => {
26
+ vi.unstubAllEnvs();
27
+ });
25
28
  it('selecting gemini writes llm.provider and proceeds to gemini auth', () => {
26
29
  const settings = {
27
30
  merged: {},
@@ -29,13 +32,15 @@ describe('ProviderWizard', () => {
29
32
  forScope: vi.fn(() => ({ settings: {} })),
30
33
  };
31
34
  const onSelectOpenAICompatible = vi.fn();
35
+ const onSelectOpenAIChatGptOauth = vi.fn();
32
36
  const onProceedToGeminiAuth = vi.fn();
33
37
  const onAuthError = vi.fn();
34
- renderWithProviders(_jsx(ProviderWizard, { settings: settings, onSelectOpenAICompatible: onSelectOpenAICompatible, onProceedToGeminiAuth: onProceedToGeminiAuth, onAuthError: onAuthError }));
38
+ renderWithProviders(_jsx(ProviderWizard, { settings: settings, onSelectOpenAICompatible: onSelectOpenAICompatible, onSelectOpenAIChatGptOauth: onSelectOpenAIChatGptOauth, onProceedToGeminiAuth: onProceedToGeminiAuth, onAuthError: onAuthError }));
35
39
  getRadioProps().onSelect('gemini');
36
40
  expect(settings.setValue).toHaveBeenCalledWith(SettingScope.User, 'llm.provider', 'gemini');
37
41
  expect(onProceedToGeminiAuth).toHaveBeenCalledOnce();
38
42
  expect(onSelectOpenAICompatible).not.toHaveBeenCalled();
43
+ expect(onSelectOpenAIChatGptOauth).not.toHaveBeenCalled();
39
44
  });
40
45
  it('selecting openai_compatible proceeds to OpenAI setup without writing partial settings', () => {
41
46
  const settings = {
@@ -44,13 +49,44 @@ describe('ProviderWizard', () => {
44
49
  forScope: vi.fn(() => ({ settings: {} })),
45
50
  };
46
51
  const onSelectOpenAICompatible = vi.fn();
52
+ const onSelectOpenAIChatGptOauth = vi.fn();
47
53
  const onProceedToGeminiAuth = vi.fn();
48
54
  const onAuthError = vi.fn();
49
- renderWithProviders(_jsx(ProviderWizard, { settings: settings, onSelectOpenAICompatible: onSelectOpenAICompatible, onProceedToGeminiAuth: onProceedToGeminiAuth, onAuthError: onAuthError }));
55
+ renderWithProviders(_jsx(ProviderWizard, { settings: settings, onSelectOpenAICompatible: onSelectOpenAICompatible, onSelectOpenAIChatGptOauth: onSelectOpenAIChatGptOauth, onProceedToGeminiAuth: onProceedToGeminiAuth, onAuthError: onAuthError }));
50
56
  getRadioProps().onSelect('openai_compatible');
51
57
  expect(onSelectOpenAICompatible).toHaveBeenCalledOnce();
52
58
  expect(onProceedToGeminiAuth).not.toHaveBeenCalled();
53
59
  expect(settings.setValue).not.toHaveBeenCalled();
54
60
  });
61
+ it('selecting openai_chatgpt_oauth proceeds to ChatGPT OAuth setup without writing partial settings', () => {
62
+ const settings = {
63
+ merged: {},
64
+ setValue: vi.fn(),
65
+ forScope: vi.fn(() => ({ settings: {} })),
66
+ };
67
+ const onSelectOpenAICompatible = vi.fn();
68
+ const onSelectOpenAIChatGptOauth = vi.fn();
69
+ const onProceedToGeminiAuth = vi.fn();
70
+ const onAuthError = vi.fn();
71
+ renderWithProviders(_jsx(ProviderWizard, { settings: settings, onSelectOpenAICompatible: onSelectOpenAICompatible, onSelectOpenAIChatGptOauth: onSelectOpenAIChatGptOauth, onProceedToGeminiAuth: onProceedToGeminiAuth, onAuthError: onAuthError }));
72
+ getRadioProps().onSelect('openai_chatgpt_oauth');
73
+ expect(onSelectOpenAIChatGptOauth).toHaveBeenCalledOnce();
74
+ expect(onProceedToGeminiAuth).not.toHaveBeenCalled();
75
+ expect(onSelectOpenAICompatible).not.toHaveBeenCalled();
76
+ expect(settings.setValue).not.toHaveBeenCalled();
77
+ });
78
+ it('hides openai_chatgpt_oauth when disabled by env var', () => {
79
+ vi.stubEnv('TERMINAI_DISABLE_OPENAI_CHATGPT_OAUTH', '1');
80
+ const settings = {
81
+ merged: {},
82
+ setValue: vi.fn(),
83
+ forScope: vi.fn(() => ({ settings: {} })),
84
+ };
85
+ renderWithProviders(_jsx(ProviderWizard, { settings: settings, onSelectOpenAICompatible: vi.fn(), onSelectOpenAIChatGptOauth: vi.fn(), onProceedToGeminiAuth: vi.fn(), onAuthError: vi.fn() }));
86
+ const values = getRadioProps().items.map((item) => item.value);
87
+ expect(values).not.toContain('openai_chatgpt_oauth');
88
+ expect(values).toContain('openai_compatible');
89
+ expect(values).toContain('gemini');
90
+ });
55
91
  });
56
92
  //# sourceMappingURL=ProviderWizard.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProviderWizard.test.js","sourceRoot":"","sources":["../../../../src/ui/auth/ProviderWizard.test.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProviderWizard.test.js","sourceRoot":"","sources":["../../../../src/ui/auth/ProviderWizard.test.tsx"],"names":[],"mappings":"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"}