@iaforged/context-code 1.0.77 → 1.0.79
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/README.md +68 -68
- package/cli.js +8515 -8515
- package/context-bootstrap.js +27 -27
- package/dist/src/bootstrap/state.js +3 -0
- package/dist/src/bridge/bridgeMain.js +40 -40
- package/dist/src/cli/print.js +12 -12
- package/dist/src/commands/agent/agent.js +8 -0
- package/dist/src/commands/commit-push-pr.js +55 -55
- package/dist/src/commands/createMovedToPluginCommand.js +9 -9
- package/dist/src/commands/init-verifiers.js +238 -238
- package/dist/src/commands/init.js +216 -216
- package/dist/src/commands/install.js +2 -2
- package/dist/src/commands/login/login.js +24 -10
- package/dist/src/commands/orchestrate/index.js +1 -1
- package/dist/src/commands/orchestrate/orchestrate.js +110 -24
- package/dist/src/commands/profile/profile.js +15 -1
- package/dist/src/commands/provider/index.js +1 -1
- package/dist/src/commands/provider/provider.js +34 -1
- package/dist/src/commands/review.js +22 -22
- package/dist/src/commands/run/index.js +2 -2
- package/dist/src/commands/run/run.js +63 -61
- package/dist/src/commands/team/index.js +1 -1
- package/dist/src/commands/team/team.js +84 -76
- package/dist/src/commands/team-auto/teamAuto.js +89 -29
- package/dist/src/commands/terminalSetup/terminalSetup.js +24 -24
- package/dist/src/commands/usage/index.js +7 -0
- package/dist/src/commands/usage/usage.js +5 -0
- package/dist/src/commands/workspace/workspace.js +39 -31
- package/dist/src/commands.js +0 -2
- package/dist/src/components/ConsoleOAuthFlow.js +92 -14
- package/dist/src/components/ModelPicker.js +2 -0
- package/dist/src/components/agents/generateAgent.js +92 -92
- package/dist/src/components/grove/Grove.js +10 -10
- package/dist/src/components/permissions/AskUserQuestionPermissionRequest/AskUserQuestionPermissionRequest.js +8 -8
- package/dist/src/constants/geminiOAuth.js +13 -0
- package/dist/src/constants/github-app.js +134 -134
- package/dist/src/constants/prompts.js +123 -123
- package/dist/src/coordinator/coordinatorMode.js +252 -252
- package/dist/src/hooks/useTypeahead.js +7 -7
- package/dist/src/ink/reconciler.js +7 -7
- package/dist/src/main.js +5 -5
- package/dist/src/memdir/findRelevantMemories.js +6 -6
- package/dist/src/services/MagicDocs/prompts.js +56 -56
- package/dist/src/services/PromptSuggestion/promptSuggestion.js +29 -29
- package/dist/src/services/SessionMemory/prompts.js +66 -66
- package/dist/src/services/api/openai.js +584 -21
- package/dist/src/services/limits/adapters/ollama.js +3 -3
- package/dist/src/services/oauth/geminiCli.js +107 -0
- package/dist/src/services/orchestration/execution/AgentTaskExecutor.js +5 -3
- package/dist/src/services/orchestration/execution/OrchestrationExecutionRuntime.js +18 -18
- package/dist/src/services/orchestration/global/reporting.js +2 -2
- package/dist/src/services/toolUseSummary/toolUseSummaryGenerator.js +9 -9
- package/dist/src/skills/bundled/batch.js +78 -78
- package/dist/src/skills/bundled/claudeApi.js +34 -34
- package/dist/src/skills/bundled/claudeInChrome.js +4 -4
- package/dist/src/skills/bundled/debug.js +36 -36
- package/dist/src/skills/bundled/scheduleRemoteAgents.js +151 -151
- package/dist/src/skills/bundled/skillify.js +132 -132
- package/dist/src/skills/bundled/stuck.js +53 -53
- package/dist/src/skills/bundled/updateConfig.js +418 -418
- package/dist/src/tasks/RemoteAgentTask/RemoteAgentTask.js +26 -26
- package/dist/src/tools/AgentTool/AgentTool.js +7 -7
- package/dist/src/tools/AgentTool/built-in/claudeCodeGuideAgent.js +67 -67
- package/dist/src/tools/AgentTool/built-in/exploreAgent.js +32 -32
- package/dist/src/tools/AgentTool/built-in/generalPurposeAgent.js +13 -13
- package/dist/src/tools/AgentTool/built-in/planAgent.js +49 -49
- package/dist/src/tools/AgentTool/built-in/statuslineSetup.js +129 -129
- package/dist/src/tools/AgentTool/built-in/verificationAgent.js +119 -119
- package/dist/src/tools/AgentTool/prompt.js +131 -131
- package/dist/src/tools/AgentTool/runAgent.js +9 -9
- package/dist/src/tools/BashTool/BashTool.js +10 -10
- package/dist/src/tools/BashTool/prompt.js +94 -94
- package/dist/src/tools/ConfigTool/prompt.js +29 -29
- package/dist/src/tools/EnterWorktreeTool/prompt.js +27 -27
- package/dist/src/tools/FileReadTool/prompt.js +12 -12
- package/dist/src/tools/PowerShellTool/prompt.js +82 -82
- package/dist/src/tools/RemoteTriggerTool/prompt.js +9 -9
- package/dist/src/tools/ScheduleCronTool/prompt.js +37 -37
- package/dist/src/tools/TeamCreateTool/prompt.js +110 -110
- package/dist/src/tools/TeamDeleteTool/prompt.js +13 -13
- package/dist/src/utils/advisor.js +15 -15
- package/dist/src/utils/api.js +2 -2
- package/dist/src/utils/auth.js +207 -2
- package/dist/src/utils/autoUpdater.js +18 -18
- package/dist/src/utils/bash/ShellSnapshot.js +86 -86
- package/dist/src/utils/bash/commands.js +61 -61
- package/dist/src/utils/claudeInChrome/prompt.js +53 -53
- package/dist/src/utils/claudeInChrome/setup.js +8 -8
- package/dist/src/utils/databaseMcp/server/queries.js +632 -632
- package/dist/src/utils/deepLink/registerProtocol.js +35 -35
- package/dist/src/utils/deepLink/terminalLauncher.js +12 -12
- package/dist/src/utils/hooks/execAgentHook.js +7 -7
- package/dist/src/utils/hooks/execPromptHook.js +4 -4
- package/dist/src/utils/hooks/skillImprovement.js +36 -36
- package/dist/src/utils/logoV2Utils.js +1 -1
- package/dist/src/utils/mcp/dateTimeParser.js +9 -9
- package/dist/src/utils/messages.js +191 -191
- package/dist/src/utils/model/model.js +18 -0
- package/dist/src/utils/model/modelOptions.js +51 -1
- package/dist/src/utils/model/modelStrings.js +5 -1
- package/dist/src/utils/model/modelSupportOverrides.js +3 -0
- package/dist/src/utils/model/providerBaseUrls.js +6 -1
- package/dist/src/utils/model/providerCatalog.js +64 -28
- package/dist/src/utils/model/providerModels.js +88 -17
- package/dist/src/utils/model/providerProfiles.js +8 -0
- package/dist/src/utils/model/providerProfilesDb.js +578 -393
- package/dist/src/utils/model/providerSwitch.js +12 -0
- package/dist/src/utils/model/providerWorkspaces.js +2 -0
- package/dist/src/utils/model/providers.js +65 -2
- package/dist/src/utils/orchestration/store/providerWorkspaceStore.js +3 -1
- package/dist/src/utils/orchestration/store/runStore.js +47 -47
- package/dist/src/utils/orchestration/store/teamStore.js +61 -61
- package/dist/src/utils/powershell/parser.js +253 -253
- package/dist/src/utils/sessionTitle.js +12 -12
- package/dist/src/utils/sideQuestion.js +17 -17
- package/dist/src/utils/status.js +1 -1
- package/dist/src/utils/swarm/backends/registry.js +9 -9
- package/dist/src/utils/telemetry/instrumentation.js +9 -9
- package/dist/src/utils/teleport.js +15 -15
- package/dist/src/utils/undercover.js +28 -28
- package/package.json +1 -1
|
@@ -1,13 +1,49 @@
|
|
|
1
1
|
export const VISIBLE_PROVIDERS = [
|
|
2
2
|
{
|
|
3
|
-
id: '
|
|
4
|
-
label: '
|
|
5
|
-
description: '
|
|
3
|
+
id: 'minimax',
|
|
4
|
+
label: 'MiniMax',
|
|
5
|
+
description: 'API key propia. Usa el endpoint Anthropic-compatible y luego elige un modelo en /model.',
|
|
6
6
|
setup: {
|
|
7
|
-
kind: '
|
|
8
|
-
intro: '
|
|
9
|
-
nextStep: 'Despues
|
|
10
|
-
actionLabel: '
|
|
7
|
+
kind: 'api-key',
|
|
8
|
+
intro: 'Pega tu API key de MiniMax.',
|
|
9
|
+
nextStep: 'Despues, elige un modelo MiniMax compatible con Anthropic desde /model.',
|
|
10
|
+
actionLabel: 'Pegar API key',
|
|
11
|
+
},
|
|
12
|
+
implemented: true,
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
id: 'openrouter',
|
|
16
|
+
label: 'OpenRouter',
|
|
17
|
+
description: 'API key propia. Luego elige un modelo en /model.',
|
|
18
|
+
setup: {
|
|
19
|
+
kind: 'api-key',
|
|
20
|
+
intro: 'Pega tu API key de OpenRouter.',
|
|
21
|
+
nextStep: 'Despues, elige un modelo compatible desde /model.',
|
|
22
|
+
actionLabel: 'Pegar API key',
|
|
23
|
+
},
|
|
24
|
+
implemented: true,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
id: 'ollama',
|
|
28
|
+
label: 'Ollama',
|
|
29
|
+
description: 'Servidor Ollama compatible. Incluye modelos locales y modelos cloud si hiciste ollama signin.',
|
|
30
|
+
setup: {
|
|
31
|
+
kind: 'local-server',
|
|
32
|
+
intro: 'Esto solo configura el servidor Ollama; no abre un login OAuth.',
|
|
33
|
+
nextStep: 'Asegurate de tener ollama serve activo. Si usas cloud, ejecuta ollama signin fuera del CLI.',
|
|
34
|
+
actionLabel: 'Continuar con Ollama',
|
|
35
|
+
},
|
|
36
|
+
implemented: true,
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
id: 'ollama-cloud',
|
|
40
|
+
label: 'Ollama Cloud',
|
|
41
|
+
description: 'Modelos cloud desde tu servidor Ollama autenticado con ollama signin.',
|
|
42
|
+
setup: {
|
|
43
|
+
kind: 'local-server',
|
|
44
|
+
intro: 'Esto usa tu servidor Ollama ya autenticado; no abre un login OAuth.',
|
|
45
|
+
nextStep: 'Ejecuta ollama signin fuera del CLI, usa http://localhost:11434/v1 y despues elige un modelo cloud desde /model.',
|
|
46
|
+
actionLabel: 'Continuar con Ollama Cloud',
|
|
11
47
|
},
|
|
12
48
|
implemented: true,
|
|
13
49
|
},
|
|
@@ -24,26 +60,26 @@ export const VISIBLE_PROVIDERS = [
|
|
|
24
60
|
implemented: true,
|
|
25
61
|
},
|
|
26
62
|
{
|
|
27
|
-
id: '
|
|
28
|
-
label: '
|
|
29
|
-
description: '
|
|
63
|
+
id: 'gemini-google',
|
|
64
|
+
label: 'Gemini Google OAuth',
|
|
65
|
+
description: 'Cuenta Google mediante OAuth compatible con Gemini CLI.',
|
|
30
66
|
setup: {
|
|
31
|
-
kind: '
|
|
32
|
-
intro: '
|
|
33
|
-
nextStep: '
|
|
34
|
-
actionLabel: '
|
|
67
|
+
kind: 'oauth',
|
|
68
|
+
intro: 'Inicia sesion con tu cuenta de Google usando el flujo OAuth de Gemini CLI.',
|
|
69
|
+
nextStep: 'Usa /login y elige Gemini Google para abrir el navegador y guardar el token OAuth.',
|
|
70
|
+
actionLabel: 'Continuar con Google',
|
|
35
71
|
},
|
|
36
72
|
implemented: true,
|
|
37
73
|
},
|
|
38
74
|
{
|
|
39
|
-
id: '
|
|
40
|
-
label: '
|
|
41
|
-
description: '
|
|
75
|
+
id: 'gemini-api',
|
|
76
|
+
label: 'Gemini API',
|
|
77
|
+
description: 'API key de Google AI Studio, usando endpoint OpenAI-compatible.',
|
|
42
78
|
setup: {
|
|
43
|
-
kind: '
|
|
44
|
-
intro: '
|
|
45
|
-
nextStep: '
|
|
46
|
-
actionLabel: '
|
|
79
|
+
kind: 'api-key',
|
|
80
|
+
intro: 'Pega tu API key de Gemini / Google AI Studio.',
|
|
81
|
+
nextStep: 'Despues, elige un modelo Gemini desde /model.',
|
|
82
|
+
actionLabel: 'Pegar API key',
|
|
47
83
|
},
|
|
48
84
|
implemented: true,
|
|
49
85
|
},
|
|
@@ -60,14 +96,14 @@ export const VISIBLE_PROVIDERS = [
|
|
|
60
96
|
implemented: true,
|
|
61
97
|
},
|
|
62
98
|
{
|
|
63
|
-
id: '
|
|
64
|
-
label: '
|
|
65
|
-
description: '
|
|
99
|
+
id: 'claude',
|
|
100
|
+
label: 'Claude (Anthropic)',
|
|
101
|
+
description: 'Suscripcion Claude o Anthropic Console',
|
|
66
102
|
setup: {
|
|
67
|
-
kind: '
|
|
68
|
-
intro: '
|
|
69
|
-
nextStep: 'Despues, elige un modelo
|
|
70
|
-
actionLabel: '
|
|
103
|
+
kind: 'oauth',
|
|
104
|
+
intro: 'Inicia sesion con tu cuenta de Claude o Anthropic Console.',
|
|
105
|
+
nextStep: 'Despues de iniciar sesion, elige un modelo desde /model.',
|
|
106
|
+
actionLabel: 'Continuar con Claude',
|
|
71
107
|
},
|
|
72
108
|
implemented: true,
|
|
73
109
|
},
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getMiniMaxAccessToken, getOpenAICompatibleAccessToken } from '../auth.js';
|
|
1
|
+
import { getGeminiGoogleAuthHeaders, getMiniMaxAccessToken, getOpenAICompatibleAccessToken, } from '../auth.js';
|
|
2
2
|
import { getConfiguredProviderBaseUrl } from './providerBaseUrls.js';
|
|
3
3
|
import { getResolvedProviderProfileId, isProfiledProvider, } from './providerProfiles.js';
|
|
4
4
|
const MINIMAX_MODEL_DESCRIPTIONS = {
|
|
@@ -23,6 +23,38 @@ const MINIMAX_ANTHROPIC_MODELS = [
|
|
|
23
23
|
label: modelId,
|
|
24
24
|
description: MINIMAX_MODEL_DESCRIPTIONS[modelId.toLowerCase()] ?? '',
|
|
25
25
|
}));
|
|
26
|
+
const GEMINI_DEFAULT_MODELS = [
|
|
27
|
+
{
|
|
28
|
+
value: 'gemini-3.1-pro-preview',
|
|
29
|
+
label: 'Gemini 3.1 Pro Preview',
|
|
30
|
+
description: 'Modelo Gemini principal para razonamiento, codigo y agentes.',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
value: 'gemini-3-flash-preview',
|
|
34
|
+
label: 'Gemini 3 Flash Preview',
|
|
35
|
+
description: 'Modelo Gemini rapido con capacidades multimodales y de codigo.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
value: 'gemini-3.1-flash-lite-preview',
|
|
39
|
+
label: 'Gemini 3.1 Flash-Lite Preview',
|
|
40
|
+
description: 'Variante de bajo costo y baja latencia.',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
value: 'gemini-2.5-pro',
|
|
44
|
+
label: 'Gemini 2.5 Pro',
|
|
45
|
+
description: 'Modelo estable para razonamiento y codigo.',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
value: 'gemini-2.5-flash',
|
|
49
|
+
label: 'Gemini 2.5 Flash',
|
|
50
|
+
description: 'Modelo estable rapido para alto volumen.',
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
value: 'gemini-2.5-flash-lite',
|
|
54
|
+
label: 'Gemini 2.5 Flash-Lite',
|
|
55
|
+
description: 'Modelo estable economico y de baja latencia.',
|
|
56
|
+
},
|
|
57
|
+
];
|
|
26
58
|
const providerModelCache = new Map();
|
|
27
59
|
const providerHealthCache = new Map();
|
|
28
60
|
const PROVIDER_HEALTH_CACHE_TTL_MS = 30_000;
|
|
@@ -33,6 +65,15 @@ function ensureV1Suffix(value) {
|
|
|
33
65
|
const trimmed = trimTrailingSlash(value);
|
|
34
66
|
return trimmed.endsWith('/v1') ? trimmed : `${trimmed}/v1`;
|
|
35
67
|
}
|
|
68
|
+
function isLocalOllamaProviderHost(baseUrl) {
|
|
69
|
+
try {
|
|
70
|
+
const parsed = new URL(baseUrl);
|
|
71
|
+
return parsed.hostname === 'localhost' || parsed.hostname === '127.0.0.1';
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return baseUrl.includes('localhost') || baseUrl.includes('127.0.0.1');
|
|
75
|
+
}
|
|
76
|
+
}
|
|
36
77
|
function getProviderCacheKey(provider) {
|
|
37
78
|
const baseUrl = getProviderBaseUrl(provider);
|
|
38
79
|
const profileId = isProfiledProvider(provider) ? getResolvedProviderProfileId(provider) : null;
|
|
@@ -43,9 +84,13 @@ function getProviderLabel(provider) {
|
|
|
43
84
|
case 'openrouter':
|
|
44
85
|
return 'OpenRouter';
|
|
45
86
|
case 'ollama':
|
|
46
|
-
return 'Ollama
|
|
87
|
+
return 'Ollama';
|
|
47
88
|
case 'ollama-cloud':
|
|
48
89
|
return 'Ollama Cloud';
|
|
90
|
+
case 'gemini-api':
|
|
91
|
+
return 'Gemini API';
|
|
92
|
+
case 'gemini-google':
|
|
93
|
+
return 'Gemini Google';
|
|
49
94
|
case 'zai':
|
|
50
95
|
return 'Z.AI';
|
|
51
96
|
case 'minimax':
|
|
@@ -65,13 +110,24 @@ function getProviderBaseUrl(provider) {
|
|
|
65
110
|
getConfiguredProviderBaseUrl('ollama') ||
|
|
66
111
|
'http://localhost:11434/v1');
|
|
67
112
|
case 'ollama-cloud':
|
|
68
|
-
return ensureV1Suffix(process.env.
|
|
113
|
+
return ensureV1Suffix(process.env.OLLAMA_CLOUD_BASE_URL ||
|
|
114
|
+
process.env.OLLAMA_BASE_URL ||
|
|
69
115
|
getConfiguredProviderBaseUrl('ollama-cloud') ||
|
|
70
116
|
'http://localhost:11434/v1');
|
|
71
117
|
case 'zai':
|
|
72
118
|
return trimTrailingSlash(process.env.ZAI_BASE_URL ||
|
|
73
119
|
getConfiguredProviderBaseUrl('zai') ||
|
|
74
120
|
'https://api.z.ai/api/coding/paas/v4');
|
|
121
|
+
case 'gemini-api':
|
|
122
|
+
return trimTrailingSlash(process.env.GEMINI_BASE_URL ||
|
|
123
|
+
process.env.GEMINI_API_BASE_URL ||
|
|
124
|
+
getConfiguredProviderBaseUrl('gemini-api') ||
|
|
125
|
+
'https://generativelanguage.googleapis.com/v1beta/openai');
|
|
126
|
+
case 'gemini-google':
|
|
127
|
+
return trimTrailingSlash(process.env.GEMINI_GOOGLE_BASE_URL ||
|
|
128
|
+
process.env.GEMINI_BASE_URL ||
|
|
129
|
+
getConfiguredProviderBaseUrl('gemini-google') ||
|
|
130
|
+
'https://generativelanguage.googleapis.com/v1beta/openai');
|
|
75
131
|
case 'minimax':
|
|
76
132
|
return trimTrailingSlash(process.env.MINIMAX_BASE_URL ||
|
|
77
133
|
getConfiguredProviderBaseUrl('minimax') ||
|
|
@@ -82,10 +138,16 @@ function getProviderBaseUrl(provider) {
|
|
|
82
138
|
'https://api.openai.com/v1');
|
|
83
139
|
}
|
|
84
140
|
}
|
|
85
|
-
function buildProviderHeaders(provider) {
|
|
141
|
+
async function buildProviderHeaders(provider) {
|
|
142
|
+
if (provider === 'gemini-google') {
|
|
143
|
+
return getGeminiGoogleAuthHeaders();
|
|
144
|
+
}
|
|
86
145
|
const headers = {};
|
|
87
146
|
const token = getOpenAICompatibleAccessToken(provider);
|
|
88
|
-
|
|
147
|
+
const baseUrl = getProviderBaseUrl(provider);
|
|
148
|
+
const shouldSendBearer = provider !== 'ollama' &&
|
|
149
|
+
!(provider === 'ollama-cloud' && isLocalOllamaProviderHost(baseUrl));
|
|
150
|
+
if (shouldSendBearer && token) {
|
|
89
151
|
headers.Authorization = `Bearer ${token}`;
|
|
90
152
|
}
|
|
91
153
|
if (provider === 'openrouter') {
|
|
@@ -145,11 +207,8 @@ function mapOllamaModels(payload) {
|
|
|
145
207
|
})
|
|
146
208
|
.filter((model) => model !== null);
|
|
147
209
|
}
|
|
148
|
-
function filterOllamaModels(provider, models) {
|
|
149
|
-
if (provider === 'ollama') {
|
|
150
|
-
return models.filter(model => !model.value.toLowerCase().endsWith(':cloud'));
|
|
151
|
-
}
|
|
152
|
-
if (provider === 'ollama-cloud') {
|
|
210
|
+
function filterOllamaModels(provider, models, baseUrl) {
|
|
211
|
+
if (provider === 'ollama-cloud' && isLocalOllamaProviderHost(baseUrl)) {
|
|
153
212
|
return models.filter(model => model.value.toLowerCase().endsWith(':cloud'));
|
|
154
213
|
}
|
|
155
214
|
return models;
|
|
@@ -224,12 +283,13 @@ export async function checkProviderHealth(provider, options = {}) {
|
|
|
224
283
|
Authorization: `Bearer ${getMiniMaxAccessToken() ?? ''}`,
|
|
225
284
|
'Content-Type': 'application/json',
|
|
226
285
|
}
|
|
227
|
-
: buildProviderHeaders(provider);
|
|
286
|
+
: await buildProviderHeaders(provider);
|
|
228
287
|
const apiKey = provider === 'minimax'
|
|
229
288
|
? getMiniMaxAccessToken()
|
|
230
289
|
: getOpenAICompatibleAccessToken(provider);
|
|
231
290
|
if (provider !== 'ollama' &&
|
|
232
|
-
|
|
291
|
+
provider !== 'gemini-google' &&
|
|
292
|
+
!(provider === 'ollama-cloud' && isLocalOllamaProviderHost(baseUrl)) &&
|
|
233
293
|
!apiKey) {
|
|
234
294
|
return cacheProviderHealth(buildHealthResult(provider, 'needs-setup', `${label} no tiene credenciales configuradas.`, { baseUrl }));
|
|
235
295
|
}
|
|
@@ -313,22 +373,33 @@ export async function fetchProviderModels(provider) {
|
|
|
313
373
|
const baseUrl = getProviderBaseUrl(provider);
|
|
314
374
|
const rootUrl = baseUrl.endsWith('/v1') ? baseUrl.slice(0, -3) : baseUrl;
|
|
315
375
|
try {
|
|
316
|
-
const payload = (await fetchJson(`${rootUrl}/api/tags`, buildProviderHeaders(provider)));
|
|
317
|
-
models = filterOllamaModels(provider, mapOllamaModels(payload));
|
|
376
|
+
const payload = (await fetchJson(`${rootUrl}/api/tags`, await buildProviderHeaders(provider)));
|
|
377
|
+
models = filterOllamaModels(provider, mapOllamaModels(payload), baseUrl);
|
|
318
378
|
}
|
|
319
379
|
catch {
|
|
320
|
-
const payload = (await fetchJson(`${baseUrl}/models`, buildProviderHeaders(provider)));
|
|
321
|
-
models = filterOllamaModels(provider, mapOpenAICompatibleModels(payload, provider));
|
|
380
|
+
const payload = (await fetchJson(`${baseUrl}/models`, await buildProviderHeaders(provider)));
|
|
381
|
+
models = filterOllamaModels(provider, mapOpenAICompatibleModels(payload, provider), baseUrl);
|
|
322
382
|
}
|
|
323
383
|
}
|
|
324
384
|
else {
|
|
325
|
-
const payload = (await fetchJson(`${getProviderBaseUrl(provider)}/models`, buildProviderHeaders(provider)));
|
|
385
|
+
const payload = (await fetchJson(`${getProviderBaseUrl(provider)}/models`, await buildProviderHeaders(provider)));
|
|
326
386
|
models = mapOpenAICompatibleModels(payload, provider);
|
|
327
387
|
}
|
|
388
|
+
if (provider === 'gemini-api' || provider === 'gemini-google') {
|
|
389
|
+
const seen = new Set(GEMINI_DEFAULT_MODELS.map(model => model.value));
|
|
390
|
+
models = [
|
|
391
|
+
...GEMINI_DEFAULT_MODELS,
|
|
392
|
+
...models.filter(model => !seen.has(model.value)),
|
|
393
|
+
];
|
|
394
|
+
}
|
|
328
395
|
providerModelCache.set(cacheKey, models);
|
|
329
396
|
return models;
|
|
330
397
|
}
|
|
331
398
|
catch {
|
|
399
|
+
if (provider === 'gemini-api' || provider === 'gemini-google') {
|
|
400
|
+
providerModelCache.set(cacheKey, GEMINI_DEFAULT_MODELS);
|
|
401
|
+
return GEMINI_DEFAULT_MODELS;
|
|
402
|
+
}
|
|
332
403
|
return [];
|
|
333
404
|
}
|
|
334
405
|
}
|
|
@@ -5,6 +5,8 @@ const PROFILED_PROVIDERS = new Set([
|
|
|
5
5
|
'openrouter',
|
|
6
6
|
'ollama',
|
|
7
7
|
'ollama-cloud',
|
|
8
|
+
'gemini-api',
|
|
9
|
+
'gemini-google',
|
|
8
10
|
'zai',
|
|
9
11
|
'minimax',
|
|
10
12
|
]);
|
|
@@ -14,6 +16,8 @@ const DEFAULT_PROFILE_NAMES = {
|
|
|
14
16
|
openrouter: 'main',
|
|
15
17
|
ollama: 'local',
|
|
16
18
|
'ollama-cloud': 'main',
|
|
19
|
+
'gemini-api': 'main',
|
|
20
|
+
'gemini-google': 'main',
|
|
17
21
|
zai: 'main',
|
|
18
22
|
minimax: 'main',
|
|
19
23
|
};
|
|
@@ -23,6 +27,8 @@ const DEFAULT_AGENT_NAMES = {
|
|
|
23
27
|
openrouter: 'openrouter',
|
|
24
28
|
ollama: 'ollama-local',
|
|
25
29
|
'ollama-cloud': 'ollama-cloud',
|
|
30
|
+
'gemini-api': 'gemini-api',
|
|
31
|
+
'gemini-google': 'gemini-google',
|
|
26
32
|
zai: 'z-ai',
|
|
27
33
|
minimax: 'minimax',
|
|
28
34
|
};
|
|
@@ -30,6 +36,8 @@ const DEFAULT_PROFILE_BASE_URLS = {
|
|
|
30
36
|
openrouter: 'https://openrouter.ai/api/v1',
|
|
31
37
|
ollama: 'http://localhost:11434/v1',
|
|
32
38
|
'ollama-cloud': 'http://localhost:11434/v1',
|
|
39
|
+
'gemini-api': 'https://generativelanguage.googleapis.com/v1beta/openai',
|
|
40
|
+
'gemini-google': 'https://generativelanguage.googleapis.com/v1beta/openai',
|
|
33
41
|
zai: 'https://api.z.ai/api/coding/paas/v4',
|
|
34
42
|
minimax: 'https://api.minimax.io/anthropic',
|
|
35
43
|
};
|