@terminai/cli 0.21.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.
- package/dist/package.json +4 -4
- package/dist/src/config/auth.js +59 -3
- package/dist/src/config/auth.js.map +1 -1
- package/dist/src/config/auth.test.js +33 -5
- package/dist/src/config/auth.test.js.map +1 -1
- package/dist/src/config/config.js +9 -53
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/effectiveAuthType.d.ts +9 -0
- package/dist/src/config/effectiveAuthType.js +48 -0
- package/dist/src/config/effectiveAuthType.js.map +1 -0
- package/dist/src/config/keyBindings.js +21 -3
- package/dist/src/config/keyBindings.js.map +1 -1
- package/dist/src/config/settingsToProviderConfig.d.ts +19 -0
- package/dist/src/config/settingsToProviderConfig.js +114 -0
- package/dist/src/config/settingsToProviderConfig.js.map +1 -0
- package/dist/src/core/initializer.js +4 -2
- package/dist/src/core/initializer.js.map +1 -1
- package/dist/src/core/initializer.test.js +16 -3
- package/dist/src/core/initializer.test.js.map +1 -1
- package/dist/src/gemini.js +18 -6
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/generated/git-commit.js.map +1 -1
- package/dist/src/services/BuiltinCommandLoader.js +2 -0
- package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
- package/dist/src/test-utils/render.js +1 -0
- package/dist/src/test-utils/render.js.map +1 -1
- package/dist/src/ui/AppContainer.js +26 -25
- package/dist/src/ui/AppContainer.js.map +1 -1
- package/dist/src/ui/auth/AuthDialog.test.js +9 -2
- package/dist/src/ui/auth/AuthDialog.test.js.map +1 -1
- package/dist/src/ui/auth/AuthProviderWizardFlow.d.ts +14 -0
- package/dist/src/ui/auth/AuthProviderWizardFlow.js +40 -0
- package/dist/src/ui/auth/AuthProviderWizardFlow.js.map +1 -0
- package/dist/src/ui/auth/AuthProviderWizardFlow.test.d.ts +7 -0
- package/dist/src/ui/auth/AuthProviderWizardFlow.test.js +104 -0
- package/dist/src/ui/auth/AuthProviderWizardFlow.test.js.map +1 -0
- package/dist/src/ui/auth/OpenAIChatGptOAuthSetupDialog.d.ts +16 -0
- package/dist/src/ui/auth/OpenAIChatGptOAuthSetupDialog.js +344 -0
- package/dist/src/ui/auth/OpenAIChatGptOAuthSetupDialog.js.map +1 -0
- package/dist/src/ui/auth/OpenAICompatibleSetupDialog.d.ts +3 -2
- package/dist/src/ui/auth/OpenAICompatibleSetupDialog.js +85 -16
- package/dist/src/ui/auth/OpenAICompatibleSetupDialog.js.map +1 -1
- package/dist/src/ui/auth/ProviderWizard.d.ts +3 -2
- package/dist/src/ui/auth/ProviderWizard.js +40 -4
- package/dist/src/ui/auth/ProviderWizard.js.map +1 -1
- package/dist/src/ui/auth/ProviderWizard.test.js +41 -3
- package/dist/src/ui/auth/ProviderWizard.test.js.map +1 -1
- package/dist/src/ui/auth/useAuth.js +9 -8
- package/dist/src/ui/auth/useAuth.js.map +1 -1
- package/dist/src/ui/auth/useAuth.test.js +1 -1
- package/dist/src/ui/auth/useAuth.test.js.map +1 -1
- package/dist/src/ui/commands/authCommand.js +103 -4
- package/dist/src/ui/commands/authCommand.js.map +1 -1
- package/dist/src/ui/commands/authCommand.test.js +36 -4
- package/dist/src/ui/commands/authCommand.test.js.map +1 -1
- package/dist/src/ui/commands/thinkCommand.d.ts +8 -0
- package/dist/src/ui/commands/thinkCommand.js +29 -0
- package/dist/src/ui/commands/thinkCommand.js.map +1 -0
- package/dist/src/ui/commands/types.d.ts +1 -1
- package/dist/src/ui/commands/types.js.map +1 -1
- package/dist/src/ui/components/DialogManager.js +66 -16
- package/dist/src/ui/components/DialogManager.js.map +1 -1
- package/dist/src/ui/components/Footer.js +3 -1
- package/dist/src/ui/components/Footer.js.map +1 -1
- package/dist/src/ui/components/SettingsDialog.d.ts +2 -1
- package/dist/src/ui/components/SettingsDialog.js +84 -8
- package/dist/src/ui/components/SettingsDialog.js.map +1 -1
- package/dist/src/ui/components/shared/TextInput.js +1 -1
- package/dist/src/ui/components/shared/TextInput.js.map +1 -1
- package/dist/src/ui/contexts/UIActionsContext.d.ts +1 -2
- package/dist/src/ui/contexts/UIActionsContext.js.map +1 -1
- package/dist/src/ui/hooks/slashCommandProcessor.d.ts +1 -0
- package/dist/src/ui/hooks/slashCommandProcessor.js +3 -0
- package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/slashCommandProcessor.test.js +1 -0
- package/dist/src/ui/hooks/slashCommandProcessor.test.js.map +1 -1
- package/dist/src/ui/hooks/useAtCompletion.test.js +50 -45
- package/dist/src/ui/hooks/useAtCompletion.test.js.map +1 -1
- package/dist/src/ui/hooks/useQuotaAndFallback.js +4 -1
- package/dist/src/ui/hooks/useQuotaAndFallback.js.map +1 -1
- package/dist/src/ui/hooks/useQuotaAndFallback.test.js +1 -1
- package/dist/src/ui/hooks/useQuotaAndFallback.test.js.map +1 -1
- package/dist/src/ui/types.d.ts +2 -1
- package/dist/src/ui/types.js +1 -0
- package/dist/src/ui/types.js.map +1 -1
- package/dist/src/utils/handleAutoUpdate.d.ts +1 -1
- package/dist/src/utils/updateEventEmitter.d.ts +1 -1
- package/dist/src/utils/webRemoteServer.js +3 -6
- package/dist/src/utils/webRemoteServer.js.map +1 -1
- package/dist/src/utils/webRemoteServer.test.js +1 -1
- package/dist/src/utils/webRemoteServer.test.js.map +1 -1
- package/dist/src/validateNonInterActiveAuth.js +4 -1
- package/dist/src/validateNonInterActiveAuth.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
|
@@ -7,40 +7,65 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
7
7
|
*/
|
|
8
8
|
import { Box, Text } from 'ink';
|
|
9
9
|
import { useMemo, useState } from 'react';
|
|
10
|
-
import {
|
|
10
|
+
import { buildWizardSettingsPatch } from '@terminai/core';
|
|
11
11
|
import { SettingScope } from '../../config/settings.js';
|
|
12
12
|
import { theme } from '../semantic-colors.js';
|
|
13
|
-
import { useUIState } from '../contexts/UIStateContext.js';
|
|
14
13
|
import { useTextBuffer } from '../components/shared/text-buffer.js';
|
|
15
14
|
import { TextInput } from '../components/shared/TextInput.js';
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
import { checkExhaustive } from '../../utils/checks.js';
|
|
16
|
+
import process from 'node:process';
|
|
17
|
+
export function OpenAICompatibleSetupDialog({ settings, terminalWidth, onBack, onComplete, onAuthError, }) {
|
|
18
|
+
const viewportWidth = Math.max(20, (terminalWidth ?? process.stdout.columns ?? 80) - 8);
|
|
19
19
|
const [step, setStep] = useState('base_url');
|
|
20
|
+
// Prefill from settings if available
|
|
21
|
+
const openaiSettings = settings.merged.llm?.openaiCompatible;
|
|
22
|
+
const defaultBaseUrl = openaiSettings?.baseUrl || 'http://localhost:11434/v1';
|
|
23
|
+
const defaultModel = openaiSettings?.model || '';
|
|
24
|
+
const defaultEnvVar = openaiSettings?.auth?.envVarName || 'OPENAI_API_KEY';
|
|
20
25
|
const baseUrlBuffer = useTextBuffer({
|
|
21
|
-
initialText:
|
|
22
|
-
initialCursorOffset:
|
|
26
|
+
initialText: defaultBaseUrl,
|
|
27
|
+
initialCursorOffset: defaultBaseUrl.length,
|
|
23
28
|
viewport: { width: viewportWidth, height: 3 },
|
|
24
29
|
isValidPath: () => false,
|
|
25
30
|
inputFilter: (text) => text.replace(/[\r\n]/g, ''),
|
|
26
31
|
singleLine: true,
|
|
27
32
|
});
|
|
28
33
|
const modelBuffer = useTextBuffer({
|
|
29
|
-
initialText:
|
|
30
|
-
initialCursorOffset:
|
|
34
|
+
initialText: defaultModel,
|
|
35
|
+
initialCursorOffset: defaultModel.length,
|
|
31
36
|
viewport: { width: viewportWidth, height: 3 },
|
|
32
37
|
isValidPath: () => false,
|
|
33
38
|
inputFilter: (text) => text.replace(/[\r\n]/g, ''),
|
|
34
39
|
singleLine: true,
|
|
35
40
|
});
|
|
36
41
|
const envVarBuffer = useTextBuffer({
|
|
37
|
-
initialText:
|
|
38
|
-
initialCursorOffset:
|
|
42
|
+
initialText: defaultEnvVar,
|
|
43
|
+
initialCursorOffset: defaultEnvVar.length,
|
|
39
44
|
viewport: { width: viewportWidth, height: 3 },
|
|
40
45
|
isValidPath: () => false,
|
|
41
46
|
inputFilter: (text) => text.replace(/[\r\n]/g, ''),
|
|
42
47
|
singleLine: true,
|
|
43
48
|
});
|
|
49
|
+
const apiKeyBuffer = useTextBuffer({
|
|
50
|
+
initialText: '',
|
|
51
|
+
initialCursorOffset: 0,
|
|
52
|
+
viewport: { width: viewportWidth, height: 3 },
|
|
53
|
+
isValidPath: () => false,
|
|
54
|
+
inputFilter: (text) => text.replace(/[\r\n]/g, ''),
|
|
55
|
+
singleLine: true,
|
|
56
|
+
});
|
|
57
|
+
const targetScope = useMemo(() => {
|
|
58
|
+
const workspaceSettings = settings.forScope(SettingScope.Workspace).settings;
|
|
59
|
+
const workspaceOpenai = workspaceSettings.llm?.openaiCompatible;
|
|
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?.auth?.type ||
|
|
66
|
+
!!workspaceOpenai?.auth?.envVarName;
|
|
67
|
+
return hasWorkspaceOverride ? SettingScope.Workspace : SettingScope.User;
|
|
68
|
+
}, [settings]);
|
|
44
69
|
const { title, description, buffer, onSubmit } = useMemo(() => {
|
|
45
70
|
switch (step) {
|
|
46
71
|
case 'base_url':
|
|
@@ -87,28 +112,72 @@ export function OpenAICompatibleSetupDialog({ settings, onBack, onComplete, onAu
|
|
|
87
112
|
onAuthError('Env var name is required.');
|
|
88
113
|
return;
|
|
89
114
|
}
|
|
115
|
+
setStep('api_key');
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
case 'api_key':
|
|
119
|
+
return {
|
|
120
|
+
title: 'OpenAI Compatible setup',
|
|
121
|
+
description: 'Optional: paste your API key for this session now (press Enter to skip).',
|
|
122
|
+
buffer: apiKeyBuffer,
|
|
123
|
+
onSubmit: () => {
|
|
124
|
+
onAuthError(null);
|
|
125
|
+
const baseUrl = baseUrlBuffer.text.trim();
|
|
126
|
+
const model = modelBuffer.text.trim();
|
|
127
|
+
const envVarName = envVarBuffer.text.trim();
|
|
128
|
+
const apiKey = apiKeyBuffer.text.trim();
|
|
129
|
+
if (!baseUrl) {
|
|
130
|
+
onAuthError('Base URL is required.');
|
|
131
|
+
setStep('base_url');
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
if (!model) {
|
|
135
|
+
onAuthError('Model is required.');
|
|
136
|
+
setStep('model');
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
if (!envVarName) {
|
|
140
|
+
onAuthError('Env var name is required.');
|
|
141
|
+
setStep('env_var');
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
90
144
|
const patches = buildWizardSettingsPatch({
|
|
91
145
|
provider: 'openai_compatible',
|
|
92
146
|
openaiCompatible: { baseUrl, model, envVarName },
|
|
93
147
|
});
|
|
94
148
|
for (const patch of patches) {
|
|
95
|
-
settings.setValue(
|
|
149
|
+
settings.setValue(targetScope, patch.path, patch.value);
|
|
96
150
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
151
|
+
if (apiKey.length > 0) {
|
|
152
|
+
process.env[envVarName] = apiKey;
|
|
153
|
+
}
|
|
154
|
+
void onComplete();
|
|
155
|
+
},
|
|
156
|
+
};
|
|
157
|
+
default:
|
|
158
|
+
checkExhaustive(step);
|
|
159
|
+
return {
|
|
160
|
+
title: 'OpenAI Compatible setup',
|
|
161
|
+
description: 'Enter the base URL for your provider (http:// allowed for local).',
|
|
162
|
+
buffer: baseUrlBuffer,
|
|
163
|
+
onSubmit: () => {
|
|
164
|
+
onAuthError(null);
|
|
165
|
+
setStep('model');
|
|
100
166
|
},
|
|
101
167
|
};
|
|
102
168
|
}
|
|
103
169
|
}, [
|
|
104
170
|
baseUrlBuffer,
|
|
105
171
|
envVarBuffer,
|
|
172
|
+
apiKeyBuffer,
|
|
106
173
|
modelBuffer,
|
|
107
174
|
onAuthError,
|
|
108
175
|
settings,
|
|
109
176
|
step,
|
|
110
177
|
onComplete,
|
|
178
|
+
setStep,
|
|
179
|
+
targetScope,
|
|
111
180
|
]);
|
|
112
|
-
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 }) }), _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 }) }) }), step === 'env_var' && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: theme.text.secondary, children: "Your API key is NOT stored in settings." }), _jsx(Text, { color: theme.text.secondary, children: "Export it before running TerminaI:" }),
|
|
181
|
+
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 }) }), _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 }) }) }), (step === 'env_var' || step === 'api_key') && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: theme.text.secondary, children: "Your API key is NOT stored in settings." }), _jsx(Text, { color: theme.text.secondary, children: "Export it before running TerminaI:" }), _jsx(Text, { color: theme.text.link, children: `export ${envVarBuffer.text || 'OPENAI_API_KEY'}='YOUR_KEY'` }), _jsxs(Text, { color: theme.text.secondary, children: ["Saving config scope:", ' ', targetScope === SettingScope.Workspace ? 'workspace' : 'user'] })] })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: theme.text.secondary, children: "(Press Enter to continue, Esc to go back)" }) })] }));
|
|
113
182
|
}
|
|
114
183
|
//# sourceMappingURL=OpenAICompatibleSetupDialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAICompatibleSetupDialog.js","sourceRoot":"","sources":["../../../../src/ui/auth/OpenAICompatibleSetupDialog.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,
|
|
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
|
-
|
|
11
|
+
onSelectOpenAIChatGptOauth: () => void;
|
|
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,18 +10,43 @@ 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
|
+
})();
|
|
24
|
+
const targetScope = (() => {
|
|
25
|
+
const workspaceSettings = settings.forScope(SettingScope.Workspace).settings;
|
|
26
|
+
const hasWorkspaceOverride = workspaceSettings.llm?.provider !== undefined ||
|
|
27
|
+
workspaceSettings.llm?.openaiCompatible !== undefined;
|
|
28
|
+
return hasWorkspaceOverride ? SettingScope.Workspace : SettingScope.User;
|
|
29
|
+
})();
|
|
14
30
|
const applyPatches = (patches) => {
|
|
15
31
|
for (const patch of patches) {
|
|
16
|
-
settings.setValue(
|
|
32
|
+
settings.setValue(targetScope, patch.path, patch.value);
|
|
17
33
|
}
|
|
18
34
|
};
|
|
19
|
-
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: [
|
|
20
36
|
{
|
|
21
37
|
label: 'Google Gemini',
|
|
22
38
|
value: 'gemini',
|
|
23
39
|
key: 'gemini',
|
|
24
40
|
},
|
|
41
|
+
...(isOpenAiChatGptOauthDisabled
|
|
42
|
+
? []
|
|
43
|
+
: [
|
|
44
|
+
{
|
|
45
|
+
label: 'ChatGPT Plus/Pro (OAuth)',
|
|
46
|
+
value: 'openai_chatgpt_oauth',
|
|
47
|
+
key: 'openai_chatgpt_oauth',
|
|
48
|
+
},
|
|
49
|
+
]),
|
|
25
50
|
{
|
|
26
51
|
label: 'OpenAI Compatible',
|
|
27
52
|
value: 'openai_compatible',
|
|
@@ -39,13 +64,24 @@ export function ProviderWizard({ settings, onSelectOpenAICompatible, onProceedTo
|
|
|
39
64
|
onSelectOpenAICompatible();
|
|
40
65
|
return;
|
|
41
66
|
}
|
|
67
|
+
if (provider === 'openai_chatgpt_oauth') {
|
|
68
|
+
onSelectOpenAIChatGptOauth();
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
42
71
|
if (provider === 'anthropic') {
|
|
43
72
|
onAuthError('Anthropic is not yet supported.');
|
|
44
73
|
return;
|
|
45
74
|
}
|
|
46
75
|
// Gemini: persist provider selection, then proceed to existing auth dialog.
|
|
47
76
|
applyPatches(buildWizardSettingsPatch({ provider: 'gemini' }));
|
|
48
|
-
|
|
77
|
+
// 2.2 Fix: Clear OpenAI auth type if present to avoid inconsistent state
|
|
78
|
+
const currentAuthType = settings.merged.security?.auth?.selectedType;
|
|
79
|
+
if (currentAuthType === 'openai-compatible' ||
|
|
80
|
+
currentAuthType === 'openai-chatgpt-oauth') {
|
|
81
|
+
settings.setValue(SettingScope.User, 'security.auth.selectedType', undefined);
|
|
82
|
+
settings.setValue(SettingScope.Workspace, 'security.auth.selectedType', undefined);
|
|
83
|
+
}
|
|
84
|
+
void onProceedToGeminiAuth();
|
|
49
85
|
}, onHighlight: () => {
|
|
50
86
|
onAuthError(null);
|
|
51
87
|
} }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: theme.text.secondary, children: "(Use Enter to select)" }) })] }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProviderWizard.js","sourceRoot":"","sources":["../../../../src/ui/auth/ProviderWizard.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAE9E,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAmB,MAAM,gBAAgB,CAAC;
|
|
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,33 +22,71 @@ 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: {},
|
|
28
31
|
setValue: vi.fn(),
|
|
32
|
+
forScope: vi.fn(() => ({ settings: {} })),
|
|
29
33
|
};
|
|
30
34
|
const onSelectOpenAICompatible = vi.fn();
|
|
35
|
+
const onSelectOpenAIChatGptOauth = vi.fn();
|
|
31
36
|
const onProceedToGeminiAuth = vi.fn();
|
|
32
37
|
const onAuthError = vi.fn();
|
|
33
|
-
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 }));
|
|
34
39
|
getRadioProps().onSelect('gemini');
|
|
35
40
|
expect(settings.setValue).toHaveBeenCalledWith(SettingScope.User, 'llm.provider', 'gemini');
|
|
36
41
|
expect(onProceedToGeminiAuth).toHaveBeenCalledOnce();
|
|
37
42
|
expect(onSelectOpenAICompatible).not.toHaveBeenCalled();
|
|
43
|
+
expect(onSelectOpenAIChatGptOauth).not.toHaveBeenCalled();
|
|
38
44
|
});
|
|
39
45
|
it('selecting openai_compatible proceeds to OpenAI setup without writing partial settings', () => {
|
|
40
46
|
const settings = {
|
|
41
47
|
merged: {},
|
|
42
48
|
setValue: vi.fn(),
|
|
49
|
+
forScope: vi.fn(() => ({ settings: {} })),
|
|
43
50
|
};
|
|
44
51
|
const onSelectOpenAICompatible = vi.fn();
|
|
52
|
+
const onSelectOpenAIChatGptOauth = vi.fn();
|
|
45
53
|
const onProceedToGeminiAuth = vi.fn();
|
|
46
54
|
const onAuthError = vi.fn();
|
|
47
|
-
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 }));
|
|
48
56
|
getRadioProps().onSelect('openai_compatible');
|
|
49
57
|
expect(onSelectOpenAICompatible).toHaveBeenCalledOnce();
|
|
50
58
|
expect(onProceedToGeminiAuth).not.toHaveBeenCalled();
|
|
51
59
|
expect(settings.setValue).not.toHaveBeenCalled();
|
|
52
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
|
+
});
|
|
53
91
|
});
|
|
54
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":";AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAa,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"ProviderWizard.test.js","sourceRoot":"","sources":["../../../../src/ui/auth/ProviderWizard.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ import { AuthType, loadApiKey, debugLogger } from '@terminai/core';
|
|
|
9
9
|
import { getErrorMessage } from '@terminai/core';
|
|
10
10
|
import { AuthState } from '../types.js';
|
|
11
11
|
import { validateAuthMethod } from '../../config/auth.js';
|
|
12
|
+
import { resolveEffectiveAuthType } from '../../config/effectiveAuthType.js';
|
|
12
13
|
export function validateAuthMethodWithSettings(authType, settings) {
|
|
13
14
|
const enforcedType = settings.merged.security?.auth?.enforcedType;
|
|
14
15
|
if (enforcedType && enforcedType !== authType) {
|
|
@@ -55,24 +56,24 @@ export const useAuthCommand = (settings, config) => {
|
|
|
55
56
|
if (authState !== AuthState.Unauthenticated) {
|
|
56
57
|
return;
|
|
57
58
|
}
|
|
58
|
-
const
|
|
59
|
-
if (!
|
|
59
|
+
const effectiveAuthType = resolveEffectiveAuthType(settings.merged);
|
|
60
|
+
if (!effectiveAuthType) {
|
|
60
61
|
if (process.env['GEMINI_API_KEY']) {
|
|
61
|
-
onAuthError('Existing API key detected (GEMINI_API_KEY). Select "Gemini API Key" option to use it.');
|
|
62
|
+
onAuthError('Existing API key detected (GEMINI_API_KEY). Select "Gemini API Key" option to use it, or run /auth to switch providers.');
|
|
62
63
|
}
|
|
63
64
|
else {
|
|
64
|
-
onAuthError('No authentication method selected.');
|
|
65
|
+
onAuthError('No authentication method selected. Run /auth to set up.');
|
|
65
66
|
}
|
|
66
67
|
return;
|
|
67
68
|
}
|
|
68
|
-
if (
|
|
69
|
+
if (effectiveAuthType === AuthType.USE_GEMINI) {
|
|
69
70
|
const key = await reloadApiKey(); // Use the unified function
|
|
70
71
|
if (!key) {
|
|
71
72
|
setAuthState(AuthState.AwaitingApiKeyInput);
|
|
72
73
|
return;
|
|
73
74
|
}
|
|
74
75
|
}
|
|
75
|
-
const error = validateAuthMethodWithSettings(
|
|
76
|
+
const error = validateAuthMethodWithSettings(effectiveAuthType, settings);
|
|
76
77
|
if (error) {
|
|
77
78
|
onAuthError(error);
|
|
78
79
|
return;
|
|
@@ -85,8 +86,8 @@ export const useAuthCommand = (settings, config) => {
|
|
|
85
86
|
return;
|
|
86
87
|
}
|
|
87
88
|
try {
|
|
88
|
-
await config.refreshAuth(
|
|
89
|
-
debugLogger.log(`Authenticated via "${
|
|
89
|
+
await config.refreshAuth(effectiveAuthType);
|
|
90
|
+
debugLogger.log(`Authenticated via "${effectiveAuthType}".`);
|
|
90
91
|
setAuthError(null);
|
|
91
92
|
setAuthState(AuthState.Authenticated);
|
|
92
93
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAuth.js","sourceRoot":"","sources":["../../../../src/ui/auth/useAuth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,EAAE,QAAQ,EAAe,UAAU,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"useAuth.js","sourceRoot":"","sources":["../../../../src/ui/auth/useAuth.ts"],"names":[],"mappings":"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"}
|
|
@@ -104,7 +104,7 @@ describe('useAuth', () => {
|
|
|
104
104
|
it('should set error if no auth type is selected and no env key', async () => {
|
|
105
105
|
const { result } = renderHook(() => useAuthCommand(createSettings(undefined), mockConfig));
|
|
106
106
|
await waitFor(() => {
|
|
107
|
-
expect(result.current.authError).toBe('No authentication method selected.');
|
|
107
|
+
expect(result.current.authError).toBe('No authentication method selected. Run /auth to set up.');
|
|
108
108
|
expect(result.current.authState).toBe(AuthState.Updating);
|
|
109
109
|
});
|
|
110
110
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAuth.test.js","sourceRoot":"","sources":["../../../../src/ui/auth/useAuth.test.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,QAAQ,EACR,EAAE,EACF,MAAM,EACN,EAAE,EACF,UAAU,EACV,SAAS,GAEV,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAe,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEpD,oBAAoB;AACpB,MAAM,cAAc,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAC/B,MAAM,sBAAsB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAEvC,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE;IACjD,MAAM,MAAM,GAAG,MAAM,cAAc,EAAmC,CAAC;IACvE,OAAO;QACL,GAAG,MAAM;QACT,UAAU,EAAE,GAAG,EAAE,CAAC,cAAc,EAAE;KACnC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,CAAC;IACrC,kBAAkB,EAAE,CAAC,QAAkB,EAAE,EAAE,CAAC,sBAAsB,CAAC,QAAQ,CAAC;CAC7E,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACrC,OAAO,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC9C,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;YACzE,MAAM,QAAQ,GAAG;gBACf,MAAM,EAAE;oBACN,QAAQ,EAAE;wBACR,IAAI,EAAE;4BACJ,YAAY,EAAE,QAAQ,CAAC,iBAAiB;yBACzC;qBACF;iBACF;aACgB,CAAC;YAEpB,MAAM,KAAK,GAAG,8BAA8B,CAC1C,QAAQ,CAAC,UAAU,EACnB,QAAQ,CACT,CAAC;YACF,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,wCAAwC,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,QAAQ,GAAG;gBACf,MAAM,EAAE;oBACN,QAAQ,EAAE;wBACR,IAAI,EAAE;4BACJ,WAAW,EAAE,IAAI;yBAClB;qBACF;iBACF;aACgB,CAAC;YAEpB,MAAM,KAAK,GAAG,8BAA8B,CAC1C,QAAQ,CAAC,iBAAiB,EAC1B,QAAQ,CACT,CAAC;YACF,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,QAAQ,GAAG;gBACf,MAAM,EAAE;oBACN,QAAQ,EAAE;wBACR,IAAI,EAAE,EAAE;qBACT;iBACF;aACgB,CAAC;YAEpB,MAAM,KAAK,GAAG,8BAA8B,CAC1C,QAAQ,CAAC,UAAU,EACnB,QAAQ,CACT,CAAC;YACF,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,MAAM,QAAQ,GAAG;gBACf,MAAM,EAAE;oBACN,QAAQ,EAAE;wBACR,IAAI,EAAE,EAAE;qBACT;iBACF;aACgB,CAAC;YAEpB,sBAAsB,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC;YAC3D,MAAM,KAAK,GAAG,8BAA8B,CAC1C,QAAQ,CAAC,iBAAiB,EAC1B,QAAQ,CACT,CAAC;YACF,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACvC,MAAM,CAAC,sBAAsB,CAAC,CAAC,oBAAoB,CACjD,QAAQ,CAAC,iBAAiB,CAC3B,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,MAAM,UAAU,GAAG;YACjB,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE;SACA,CAAC;QAEvB,MAAM,cAAc,GAAG,CAAC,YAAuB,EAAE,EAAE,CACjD,CAAC;YACC,MAAM,EAAE;gBACN,QAAQ,EAAE;oBACR,IAAI,EAAE;wBACJ,YAAY;qBACb;iBACF;aACF;SACF,CAAmB,CAAC;QAEvB,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CACjC,cAAc,CAAC,cAAc,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,UAAU,CAAC,CACvE,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;YAC3E,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CACjC,cAAc,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC,CACtD,CAAC;YAEF,MAAM,OAAO,CAAC,GAAG,EAAE;gBACjB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CACnC,
|
|
1
|
+
{"version":3,"file":"useAuth.test.js","sourceRoot":"","sources":["../../../../src/ui/auth/useAuth.test.tsx"],"names":[],"mappings":"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"}
|