@didim365/agent-cli-core 0.2.18 → 0.2.20

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.
@@ -72,3 +72,14 @@ export declare function getDefaultModelFromRegistry(providerKey: string): string
72
72
  * @returns true if the model is valid for the provider
73
73
  */
74
74
  export declare function isModelValidForProvider(model: string, providerKey: string): boolean;
75
+ /**
76
+ * Check if a model is a registered model (preset or model ID) of a specific provider.
77
+ *
78
+ * Unlike `isModelValidForProvider`, this does NOT consider `allowCustomModels` or `freeformInput`.
79
+ * Returns true only if the model is an exact match in the provider's preset values or model IDs.
80
+ *
81
+ * @param model - Model ID to check
82
+ * @param providerKey - Target provider key
83
+ * @returns true if the model is explicitly registered for the provider
84
+ */
85
+ export declare function isRegisteredModelForProvider(model: string, providerKey: string): boolean;
@@ -173,12 +173,32 @@ export function isModelValidForProvider(model, providerKey) {
173
173
  }
174
174
  return false;
175
175
  }
176
+ /**
177
+ * Check if a model is a registered model (preset or model ID) of a specific provider.
178
+ *
179
+ * Unlike `isModelValidForProvider`, this does NOT consider `allowCustomModels` or `freeformInput`.
180
+ * Returns true only if the model is an exact match in the provider's preset values or model IDs.
181
+ *
182
+ * @param model - Model ID to check
183
+ * @param providerKey - Target provider key
184
+ * @returns true if the model is explicitly registered for the provider
185
+ */
186
+ export function isRegisteredModelForProvider(model, providerKey) {
187
+ const group = PROVIDER_MODEL_REGISTRY[providerKey];
188
+ if (!group)
189
+ return false;
190
+ if (group.freeformInput || group.modelSelectionDisabled)
191
+ return false;
192
+ const presetValues = group.presets.map((p) => p.value);
193
+ const modelIds = group.models.map((m) => m.id);
194
+ return presetValues.includes(model) || modelIds.includes(model);
195
+ }
176
196
  /**
177
197
  * Determine if a model clearly belongs to another provider based on prefix heuristics.
178
198
  *
179
199
  * Prefix rules:
180
200
  * - `claude-*` → claude
181
- * - `gpt-*`, `o[0-9]*` → openai
201
+ * - `gpt-[0-9]*`, `o[0-9]*` → openai
182
202
  * - `gemini-*`, `auto-gemini*` → gemini
183
203
  */
184
204
  function isModelOwnedByOtherProvider(model, currentProvider) {
@@ -186,7 +206,7 @@ function isModelOwnedByOtherProvider(model, currentProvider) {
186
206
  const normalized = model.toLowerCase();
187
207
  const providerPrefixes = {
188
208
  claude: [(m) => m.startsWith('claude-')],
189
- openai: [(m) => m.startsWith('gpt-'), (m) => /^o[0-9]/.test(m)],
209
+ openai: [(m) => /^gpt-[0-9]/.test(m), (m) => /^o[0-9]/.test(m)],
190
210
  gemini: [
191
211
  (m) => m.startsWith('gemini-'),
192
212
  (m) => m.startsWith('auto-gemini'),
@@ -1 +1 @@
1
- {"version":3,"file":"providerModels.js","sourceRoot":"","sources":["../../../src/config/providerModels.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"providerModels.js","sourceRoot":"","sources":["../../../src/config/providerModels.ts"],"names":[],"mappings":"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"}
@@ -3,5 +3,5 @@
3
3
  * Copyright 2026 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- export declare const GIT_COMMIT_INFO = "b50a6a7ab";
6
+ export declare const GIT_COMMIT_INFO = "987cc151f";
7
7
  export declare const CLI_VERSION = "0.30.0";
@@ -5,6 +5,6 @@
5
5
  */
6
6
  // This file is auto-generated by the build script (scripts/generate-git-commit-info.js)
7
7
  // Do not edit this file manually.
8
- export const GIT_COMMIT_INFO = 'b50a6a7ab';
8
+ export const GIT_COMMIT_INFO = '987cc151f';
9
9
  export const CLI_VERSION = '0.30.0';
10
10
  //# sourceMappingURL=git-commit.js.map
@@ -46,21 +46,21 @@ export declare const FileSchema: z.ZodObject<{
46
46
  }, "strip", z.ZodTypeAny, {
47
47
  path: string;
48
48
  timestamp: number;
49
- isActive?: boolean | undefined;
50
- selectedText?: string | undefined;
51
49
  cursor?: {
52
50
  line: number;
53
51
  character: number;
54
52
  } | undefined;
53
+ isActive?: boolean | undefined;
54
+ selectedText?: string | undefined;
55
55
  }, {
56
56
  path: string;
57
57
  timestamp: number;
58
- isActive?: boolean | undefined;
59
- selectedText?: string | undefined;
60
58
  cursor?: {
61
59
  line: number;
62
60
  character: number;
63
61
  } | undefined;
62
+ isActive?: boolean | undefined;
63
+ selectedText?: string | undefined;
64
64
  }>;
65
65
  export type File = z.infer<typeof FileSchema>;
66
66
  /**
@@ -110,21 +110,21 @@ export declare const IdeContextSchema: z.ZodObject<{
110
110
  }, "strip", z.ZodTypeAny, {
111
111
  path: string;
112
112
  timestamp: number;
113
- isActive?: boolean | undefined;
114
- selectedText?: string | undefined;
115
113
  cursor?: {
116
114
  line: number;
117
115
  character: number;
118
116
  } | undefined;
117
+ isActive?: boolean | undefined;
118
+ selectedText?: string | undefined;
119
119
  }, {
120
120
  path: string;
121
121
  timestamp: number;
122
- isActive?: boolean | undefined;
123
- selectedText?: string | undefined;
124
122
  cursor?: {
125
123
  line: number;
126
124
  character: number;
127
125
  } | undefined;
126
+ isActive?: boolean | undefined;
127
+ selectedText?: string | undefined;
128
128
  }>, "many">>;
129
129
  /**
130
130
  * Whether the workspace is trusted.
@@ -134,24 +134,24 @@ export declare const IdeContextSchema: z.ZodObject<{
134
134
  openFiles?: {
135
135
  path: string;
136
136
  timestamp: number;
137
- isActive?: boolean | undefined;
138
- selectedText?: string | undefined;
139
137
  cursor?: {
140
138
  line: number;
141
139
  character: number;
142
140
  } | undefined;
141
+ isActive?: boolean | undefined;
142
+ selectedText?: string | undefined;
143
143
  }[] | undefined;
144
144
  isTrusted?: boolean | undefined;
145
145
  }, {
146
146
  openFiles?: {
147
147
  path: string;
148
148
  timestamp: number;
149
- isActive?: boolean | undefined;
150
- selectedText?: string | undefined;
151
149
  cursor?: {
152
150
  line: number;
153
151
  character: number;
154
152
  } | undefined;
153
+ isActive?: boolean | undefined;
154
+ selectedText?: string | undefined;
155
155
  }[] | undefined;
156
156
  isTrusted?: boolean | undefined;
157
157
  }>>;
@@ -160,12 +160,12 @@ export declare const IdeContextSchema: z.ZodObject<{
160
160
  openFiles?: {
161
161
  path: string;
162
162
  timestamp: number;
163
- isActive?: boolean | undefined;
164
- selectedText?: string | undefined;
165
163
  cursor?: {
166
164
  line: number;
167
165
  character: number;
168
166
  } | undefined;
167
+ isActive?: boolean | undefined;
168
+ selectedText?: string | undefined;
169
169
  }[] | undefined;
170
170
  isTrusted?: boolean | undefined;
171
171
  } | undefined;
@@ -174,12 +174,12 @@ export declare const IdeContextSchema: z.ZodObject<{
174
174
  openFiles?: {
175
175
  path: string;
176
176
  timestamp: number;
177
- isActive?: boolean | undefined;
178
- selectedText?: string | undefined;
179
177
  cursor?: {
180
178
  line: number;
181
179
  character: number;
182
180
  } | undefined;
181
+ isActive?: boolean | undefined;
182
+ selectedText?: string | undefined;
183
183
  }[] | undefined;
184
184
  isTrusted?: boolean | undefined;
185
185
  } | undefined;
@@ -235,21 +235,21 @@ export declare const IdeContextNotificationSchema: z.ZodObject<{
235
235
  }, "strip", z.ZodTypeAny, {
236
236
  path: string;
237
237
  timestamp: number;
238
- isActive?: boolean | undefined;
239
- selectedText?: string | undefined;
240
238
  cursor?: {
241
239
  line: number;
242
240
  character: number;
243
241
  } | undefined;
242
+ isActive?: boolean | undefined;
243
+ selectedText?: string | undefined;
244
244
  }, {
245
245
  path: string;
246
246
  timestamp: number;
247
- isActive?: boolean | undefined;
248
- selectedText?: string | undefined;
249
247
  cursor?: {
250
248
  line: number;
251
249
  character: number;
252
250
  } | undefined;
251
+ isActive?: boolean | undefined;
252
+ selectedText?: string | undefined;
253
253
  }>, "many">>;
254
254
  /**
255
255
  * Whether the workspace is trusted.
@@ -259,24 +259,24 @@ export declare const IdeContextNotificationSchema: z.ZodObject<{
259
259
  openFiles?: {
260
260
  path: string;
261
261
  timestamp: number;
262
- isActive?: boolean | undefined;
263
- selectedText?: string | undefined;
264
262
  cursor?: {
265
263
  line: number;
266
264
  character: number;
267
265
  } | undefined;
266
+ isActive?: boolean | undefined;
267
+ selectedText?: string | undefined;
268
268
  }[] | undefined;
269
269
  isTrusted?: boolean | undefined;
270
270
  }, {
271
271
  openFiles?: {
272
272
  path: string;
273
273
  timestamp: number;
274
- isActive?: boolean | undefined;
275
- selectedText?: string | undefined;
276
274
  cursor?: {
277
275
  line: number;
278
276
  character: number;
279
277
  } | undefined;
278
+ isActive?: boolean | undefined;
279
+ selectedText?: string | undefined;
280
280
  }[] | undefined;
281
281
  isTrusted?: boolean | undefined;
282
282
  }>>;
@@ -285,12 +285,12 @@ export declare const IdeContextNotificationSchema: z.ZodObject<{
285
285
  openFiles?: {
286
286
  path: string;
287
287
  timestamp: number;
288
- isActive?: boolean | undefined;
289
- selectedText?: string | undefined;
290
288
  cursor?: {
291
289
  line: number;
292
290
  character: number;
293
291
  } | undefined;
292
+ isActive?: boolean | undefined;
293
+ selectedText?: string | undefined;
294
294
  }[] | undefined;
295
295
  isTrusted?: boolean | undefined;
296
296
  } | undefined;
@@ -299,12 +299,12 @@ export declare const IdeContextNotificationSchema: z.ZodObject<{
299
299
  openFiles?: {
300
300
  path: string;
301
301
  timestamp: number;
302
- isActive?: boolean | undefined;
303
- selectedText?: string | undefined;
304
302
  cursor?: {
305
303
  line: number;
306
304
  character: number;
307
305
  } | undefined;
306
+ isActive?: boolean | undefined;
307
+ selectedText?: string | undefined;
308
308
  }[] | undefined;
309
309
  isTrusted?: boolean | undefined;
310
310
  } | undefined;
@@ -315,12 +315,12 @@ export declare const IdeContextNotificationSchema: z.ZodObject<{
315
315
  openFiles?: {
316
316
  path: string;
317
317
  timestamp: number;
318
- isActive?: boolean | undefined;
319
- selectedText?: string | undefined;
320
318
  cursor?: {
321
319
  line: number;
322
320
  character: number;
323
321
  } | undefined;
322
+ isActive?: boolean | undefined;
323
+ selectedText?: string | undefined;
324
324
  }[] | undefined;
325
325
  isTrusted?: boolean | undefined;
326
326
  } | undefined;
@@ -333,12 +333,12 @@ export declare const IdeContextNotificationSchema: z.ZodObject<{
333
333
  openFiles?: {
334
334
  path: string;
335
335
  timestamp: number;
336
- isActive?: boolean | undefined;
337
- selectedText?: string | undefined;
338
336
  cursor?: {
339
337
  line: number;
340
338
  character: number;
341
339
  } | undefined;
340
+ isActive?: boolean | undefined;
341
+ selectedText?: string | undefined;
342
342
  }[] | undefined;
343
343
  isTrusted?: boolean | undefined;
344
344
  } | undefined;
@@ -362,23 +362,23 @@ export declare const IdeDiffAcceptedNotificationSchema: z.ZodObject<{
362
362
  */
363
363
  content: z.ZodString;
364
364
  }, "strip", z.ZodTypeAny, {
365
- content: string;
366
365
  filePath: string;
367
- }, {
368
366
  content: string;
367
+ }, {
369
368
  filePath: string;
369
+ content: string;
370
370
  }>;
371
371
  }, "strip", z.ZodTypeAny, {
372
372
  params: {
373
- content: string;
374
373
  filePath: string;
374
+ content: string;
375
375
  };
376
376
  jsonrpc: "2.0";
377
377
  method: "ide/diffAccepted";
378
378
  }, {
379
379
  params: {
380
- content: string;
381
380
  filePath: string;
381
+ content: string;
382
382
  };
383
383
  jsonrpc: "2.0";
384
384
  method: "ide/diffAccepted";
@@ -25,6 +25,28 @@ import type { LlmGenerateRequest, LlmToolDefinition } from '../types.js';
25
25
  * This is the reverse of GeminiConverter.toGeminiTools().
26
26
  */
27
27
  export declare function convertGeminiToolsToLlm(tools: Tool[]): LlmToolDefinition[];
28
+ /**
29
+ * Reconcile functionCall/functionResponse IDs in Gemini history.
30
+ *
31
+ * When the Gemini native path handles tool calls, Turn.handlePendingFunctionCall
32
+ * generates a callId via crypto.randomUUID() and stores it in the
33
+ * functionResponse.id. However, the Gemini SDK does NOT write this back to
34
+ * the functionCall.id in history (it remains undefined).
35
+ *
36
+ * On provider switch (Gemini → OpenAI), convertPartToLlmContent generates a
37
+ * NEW random UUID for the undefined functionCall.id, causing a mismatch with
38
+ * the functionResponse.id. OpenAI API then rejects the request with:
39
+ * "tool_call_id not found in tool_calls of previous message"
40
+ *
41
+ * This function pre-processes the history by matching functionCall/functionResponse
42
+ * pairs. Matching strategy:
43
+ * 1. Positional match (call[n] ↔ response[n]) with name validation
44
+ * 2. Name-based fallback when positional names don't match
45
+ *
46
+ * @returns A new Content[] with reconciled IDs (does NOT mutate the original).
47
+ * Returns the same reference if no reconciliation is needed.
48
+ */
49
+ export declare function reconcileFunctionCallIds(history: Content[]): Content[];
28
50
  /**
29
51
  * Options for building an LlmGenerateRequest from Gemini runtime state.
30
52
  */
@@ -3,6 +3,7 @@
3
3
  * Copyright 2026 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ import { randomUUID } from 'node:crypto';
6
7
  import { fixToolResultRoles } from '../../core/llmMessageUtils.js';
7
8
  import { convertContentsToLlmMessages, convertPartListUnionToLlmContents, } from './typeConversion.js';
8
9
  // ============================================================================
@@ -85,6 +86,131 @@ export function convertGeminiToolsToLlm(tools) {
85
86
  }
86
87
  return result;
87
88
  }
89
+ // ============================================================================
90
+ // History ID reconciliation for provider switching
91
+ // ============================================================================
92
+ /**
93
+ * Reconcile functionCall/functionResponse IDs in Gemini history.
94
+ *
95
+ * When the Gemini native path handles tool calls, Turn.handlePendingFunctionCall
96
+ * generates a callId via crypto.randomUUID() and stores it in the
97
+ * functionResponse.id. However, the Gemini SDK does NOT write this back to
98
+ * the functionCall.id in history (it remains undefined).
99
+ *
100
+ * On provider switch (Gemini → OpenAI), convertPartToLlmContent generates a
101
+ * NEW random UUID for the undefined functionCall.id, causing a mismatch with
102
+ * the functionResponse.id. OpenAI API then rejects the request with:
103
+ * "tool_call_id not found in tool_calls of previous message"
104
+ *
105
+ * This function pre-processes the history by matching functionCall/functionResponse
106
+ * pairs. Matching strategy:
107
+ * 1. Positional match (call[n] ↔ response[n]) with name validation
108
+ * 2. Name-based fallback when positional names don't match
109
+ *
110
+ * @returns A new Content[] with reconciled IDs (does NOT mutate the original).
111
+ * Returns the same reference if no reconciliation is needed.
112
+ */
113
+ export function reconcileFunctionCallIds(history) {
114
+ // Quick check: skip clone if no reconciliation needed
115
+ let needsReconciliation = false;
116
+ for (const content of history) {
117
+ if (content.role !== 'model' || !content.parts)
118
+ continue;
119
+ if (content.parts.some((p) => p.functionCall && !p.functionCall.id)) {
120
+ needsReconciliation = true;
121
+ break;
122
+ }
123
+ }
124
+ if (!needsReconciliation)
125
+ return history;
126
+ const cloned = structuredClone(history);
127
+ for (let i = 0; i < cloned.length; i++) {
128
+ const content = cloned[i];
129
+ if (content.role !== 'model' || !content.parts)
130
+ continue;
131
+ // Get ALL functionCall parts (preserving original position indices)
132
+ const allCalls = content.parts.filter((p) => p.functionCall);
133
+ if (allCalls.length === 0)
134
+ continue;
135
+ if (allCalls.every((p) => p.functionCall.id))
136
+ continue;
137
+ // Scan forward for the nearest user Content with functionResponse parts.
138
+ // Stops at the next model Content to avoid crossing turn boundaries.
139
+ let responseContent;
140
+ for (let k = i + 1; k < cloned.length; k++) {
141
+ if (cloned[k].role === 'model')
142
+ break;
143
+ if (cloned[k].role === 'user' &&
144
+ cloned[k].parts?.some((p) => p.functionResponse)) {
145
+ responseContent = cloned[k];
146
+ break;
147
+ }
148
+ }
149
+ if (!responseContent?.parts)
150
+ continue;
151
+ const allResponses = responseContent.parts.filter((p) => p.functionResponse);
152
+ // 2-pass matching with "used" tracking to prevent duplicate ID assignment.
153
+ //
154
+ // Pass 1: Mark responses already claimed by calls that have IDs.
155
+ // This prevents a subsequent ID-less call from stealing an already-
156
+ // matched response (the root cause of the same-name mixed-ID bug).
157
+ //
158
+ // Pass 2: For each ID-less call, find the best unused response
159
+ // (positional match → name-based fallback).
160
+ const usedResponseIndices = new Set();
161
+ // Pass 1: claim responses for calls that already have IDs
162
+ for (let j = 0; j < allCalls.length; j++) {
163
+ const fc = allCalls[j].functionCall;
164
+ if (!fc.id)
165
+ continue;
166
+ const idx = allResponses.findIndex((p) => p.functionResponse?.id === fc.id);
167
+ if (idx >= 0) {
168
+ usedResponseIndices.add(idx);
169
+ }
170
+ }
171
+ // Pass 2: reconcile calls without IDs
172
+ for (let j = 0; j < allCalls.length; j++) {
173
+ const fc = allCalls[j].functionCall;
174
+ if (fc.id)
175
+ continue;
176
+ let fr = undefined;
177
+ let frIdx = -1;
178
+ // 1. Try positional match (if not already used)
179
+ if (!usedResponseIndices.has(j) && allResponses[j]?.functionResponse) {
180
+ const candidate = allResponses[j].functionResponse;
181
+ if (!fc.name || !candidate.name || fc.name === candidate.name) {
182
+ fr = candidate;
183
+ frIdx = j;
184
+ }
185
+ }
186
+ // 2. Name-based fallback: find first UNUSED response with matching name
187
+ if (!fr && fc.name) {
188
+ for (let r = 0; r < allResponses.length; r++) {
189
+ if (usedResponseIndices.has(r))
190
+ continue;
191
+ const candidate = allResponses[r].functionResponse;
192
+ if (candidate?.name === fc.name) {
193
+ fr = candidate;
194
+ frIdx = r;
195
+ break;
196
+ }
197
+ }
198
+ }
199
+ if (!fr || frIdx < 0)
200
+ continue;
201
+ usedResponseIndices.add(frIdx);
202
+ if (fr.id) {
203
+ fc.id = fr.id;
204
+ }
205
+ else {
206
+ const newId = randomUUID();
207
+ fc.id = newId;
208
+ fr.id = newId;
209
+ }
210
+ }
211
+ }
212
+ return cloned;
213
+ }
88
214
  /**
89
215
  * Build an LlmGenerateRequest from Gemini runtime state.
90
216
  *
@@ -96,8 +222,12 @@ export function convertGeminiToolsToLlm(tools) {
96
222
  * that are accessed through llm* methods on the content generator.
97
223
  */
98
224
  export function buildLlmRequestFromGeminiState(opts) {
225
+ // Reconcile functionCall/functionResponse IDs before conversion.
226
+ // Required for provider switching: Gemini history may have undefined
227
+ // functionCall.id while functionResponse.id is set.
228
+ const reconciledHistory = reconcileFunctionCallIds(opts.history);
99
229
  // Convert history Content[] → LlmMessage[]
100
- const historyMessages = convertContentsToLlmMessages(opts.history);
230
+ const historyMessages = convertContentsToLlmMessages(reconciledHistory);
101
231
  // Convert current request PartListUnion → LlmContent[]
102
232
  const currentContents = convertPartListUnionToLlmContents(opts.currentRequest);
103
233
  // Append current request as a user message
@@ -1 +1 @@
1
- {"version":3,"file":"requestBuilder.js","sourceRoot":"","sources":["../../../../src/providers/gemini/requestBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"requestBuilder.js","sourceRoot":"","sources":["../../../../src/providers/gemini/requestBuilder.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { ProviderType, getProviderForAuthType, } from './providerTypes.js';
7
7
  import { LlmError, LlmErrorType } from './errors.js';
8
- import { PROVIDER_MODEL_REGISTRY, getDefaultModelFromRegistry, isModelValidForProvider, } from '../config/providerModels.js';
8
+ import { PROVIDER_MODEL_REGISTRY, getDefaultModelFromRegistry, isModelValidForProvider, isRegisteredModelForProvider, } from '../config/providerModels.js';
9
9
  /**
10
10
  * Required environment variables per provider.
11
11
  */
@@ -189,29 +189,167 @@ export function isGeminiSpecificModel(model) {
189
189
  * @returns Resolved model name appropriate for the provider
190
190
  */
191
191
  export function resolveProviderModel(model, provider) {
192
+ // Normalize provider alias to canonical registry key (e.g., 'openai_compatible' → 'openai-compatible')
193
+ const normalizedProvider = normalizeProviderRegistryKey(provider);
192
194
  // modelSelectionDisabled providers always use their fixed default
193
- const group = PROVIDER_MODEL_REGISTRY[provider];
195
+ const group = PROVIDER_MODEL_REGISTRY[normalizedProvider];
194
196
  if (group?.modelSelectionDisabled) {
195
- return getDefaultModelFromRegistry(provider);
197
+ return getDefaultModelFromRegistry(normalizedProvider);
196
198
  }
197
199
  // Gemini-specific model handling
198
200
  if (isGeminiSpecificModel(model)) {
199
- if (provider === ProviderType.Gemini)
201
+ if (normalizedProvider === ProviderType.Gemini)
200
202
  return model;
201
203
  // LLM_MODEL env var: validate before use to prevent cross-provider leak
202
204
  const llmModel = process.env['LLM_MODEL'];
203
- if (llmModel && isModelValidForProvider(llmModel, provider)) {
205
+ if (llmModel && isModelValidForProvider(llmModel, normalizedProvider)) {
204
206
  return llmModel;
205
207
  }
206
208
  // Gemini-specific model + non-Gemini provider → provider default
207
- return getDefaultModelFromRegistry(provider);
209
+ return getDefaultModelFromRegistry(normalizedProvider);
208
210
  }
209
- // Non-Gemini model: validate against target provider
210
- if (!isModelValidForProvider(model, provider)) {
211
- return getDefaultModelFromRegistry(provider);
211
+ // Non-Gemini model handling
212
+ const llmModelEnv = process.env['LLM_MODEL'];
213
+ // Cross-provider stale model detection.
214
+ // Two detection strategies work in tandem:
215
+ //
216
+ // 1. Prefix/registry heuristic (isRegisteredModelOfOtherProvider):
217
+ // Catches well-known models like 'claude-sonnet-4-6' or 'gpt-4o'.
218
+ //
219
+ // 2. Non-registered model check (isRegisteredModelForProvider):
220
+ // For freeformInput providers, any model is "valid", so (1) is the only guard.
221
+ // For non-freeformInput providers (Claude/OpenAI), models unknown to ALL providers
222
+ // (e.g., 'gpt-oss-20b' from sLM) pass allowCustomModels validation.
223
+ // If LLM_MODEL differs from model AND model is not in target's registry,
224
+ // this is a provider-switch scenario → prefer LLM_MODEL or default.
225
+ if (llmModelEnv && llmModelEnv !== model) {
226
+ // Strategy 1: model is a known model of another provider (prefix or registry)
227
+ if (isRegisteredModelOfOtherProvider(model, normalizedProvider)) {
228
+ if (isModelValidForProvider(llmModelEnv, normalizedProvider)) {
229
+ return llmModelEnv;
230
+ }
231
+ return getDefaultModelFromRegistry(normalizedProvider);
232
+ }
233
+ // Strategy 2: model is not registered for target provider (non-freeformInput only)
234
+ // On freeformInput, unknown models may be user-specified (--model) → respect them.
235
+ // Exclude models with target provider's own prefix (e.g., 'claude-sonnet-4-20250514'
236
+ // on Claude) — these are legitimate custom versions of the provider's own models
237
+ // accepted via allowCustomModels, not cross-provider leaks.
238
+ const group = PROVIDER_MODEL_REGISTRY[normalizedProvider];
239
+ if (group &&
240
+ !group.freeformInput &&
241
+ !isRegisteredModelForProvider(model, normalizedProvider) &&
242
+ !isOwnProviderPrefix(model, normalizedProvider)) {
243
+ if (isModelValidForProvider(llmModelEnv, normalizedProvider)) {
244
+ return llmModelEnv;
245
+ }
246
+ return getDefaultModelFromRegistry(normalizedProvider);
247
+ }
248
+ }
249
+ // No LLM_MODEL: detect stale models using prefix/registry heuristic only.
250
+ // Without LLM_MODEL signal, we cannot distinguish user-specified custom models
251
+ // (e.g., --model my-custom-model) from stale cross-provider models. Delegate
252
+ // to isModelValidForProvider which respects allowCustomModels.
253
+ if (!llmModelEnv &&
254
+ isRegisteredModelOfOtherProvider(model, normalizedProvider)) {
255
+ return getDefaultModelFromRegistry(normalizedProvider);
256
+ }
257
+ if (!isModelValidForProvider(model, normalizedProvider)) {
258
+ return getDefaultModelFromRegistry(normalizedProvider);
212
259
  }
213
260
  return model;
214
261
  }
262
+ /**
263
+ * Normalize provider alias to canonical registry key.
264
+ *
265
+ * Maps common aliases (e.g., 'openai_compatible', 'anthropic') to registry keys
266
+ * used in PROVIDER_MODEL_REGISTRY. This prevents registry lookup misses when
267
+ * alias strings are passed from env vars or settings.
268
+ */
269
+ function normalizeProviderRegistryKey(provider) {
270
+ const normalized = (typeof provider === 'string' ? provider : provider)
271
+ .toLowerCase()
272
+ .trim();
273
+ switch (normalized) {
274
+ case 'openai_compatible':
275
+ case 'slm':
276
+ return 'openai-compatible';
277
+ case 'anthropic':
278
+ return 'claude';
279
+ case 'vertex-ai':
280
+ case 'vertex_ai':
281
+ return 'gemini';
282
+ case 'didim-studio':
283
+ case 'didim_studio':
284
+ return 'didim';
285
+ default:
286
+ return normalized;
287
+ }
288
+ }
289
+ /**
290
+ * Check if a model has the target provider's own naming prefix.
291
+ *
292
+ * E.g., 'claude-sonnet-4-20250514' has Claude's own prefix on Claude provider.
293
+ * These models are legitimate custom/unreleased versions, not cross-provider leaks.
294
+ */
295
+ function isOwnProviderPrefix(model, provider) {
296
+ const normalized = model.toLowerCase();
297
+ const prefixMap = {
298
+ claude: [(m) => m.startsWith('claude-')],
299
+ openai: [(m) => /^gpt-[0-9]/.test(m), (m) => /^o[0-9]/.test(m)],
300
+ gemini: [
301
+ (m) => m.startsWith('gemini-'),
302
+ (m) => m.startsWith('auto-gemini'),
303
+ ],
304
+ };
305
+ const checks = prefixMap[provider];
306
+ if (!checks)
307
+ return false;
308
+ return checks.some((check) => check(normalized));
309
+ }
310
+ /**
311
+ * Check if a model clearly belongs to another provider.
312
+ *
313
+ * Uses two detection methods:
314
+ * 1. Registry match: exact preset value or model ID in another provider's registry
315
+ * 2. Prefix heuristic: known provider prefixes (claude-*, gpt-[0-9]*, o[0-9]*, gemini-*)
316
+ *
317
+ * This avoids false positives from allowCustomModels/freeformInput, which would
318
+ * incorrectly flag user-specified models (e.g., 'my-custom-llama') as belonging
319
+ * to another provider.
320
+ */
321
+ function isRegisteredModelOfOtherProvider(model, currentProvider) {
322
+ const normalized = model.toLowerCase();
323
+ // Prefix heuristics for well-known provider model naming conventions
324
+ const providerPrefixes = {
325
+ claude: [(m) => m.startsWith('claude-')],
326
+ openai: [(m) => /^gpt-[0-9]/.test(m), (m) => /^o[0-9]/.test(m)],
327
+ gemini: [
328
+ (m) => m.startsWith('gemini-'),
329
+ (m) => m.startsWith('auto-gemini'),
330
+ ],
331
+ };
332
+ for (const [providerKey, checks] of Object.entries(providerPrefixes)) {
333
+ if (providerKey === currentProvider)
334
+ continue;
335
+ if (checks.some((check) => check(normalized)))
336
+ return true;
337
+ }
338
+ // Registry match: exact preset/model ID in another provider
339
+ for (const [key, g] of Object.entries(PROVIDER_MODEL_REGISTRY)) {
340
+ if (key === currentProvider ||
341
+ g.freeformInput ||
342
+ g.modelSelectionDisabled) {
343
+ continue;
344
+ }
345
+ const presetValues = g.presets.map((p) => p.value);
346
+ const modelIds = g.models.map((m) => m.id);
347
+ if (presetValues.includes(model) || modelIds.includes(model)) {
348
+ return true;
349
+ }
350
+ }
351
+ return false;
352
+ }
215
353
  /**
216
354
  * Get API key for a provider from environment.
217
355
  */
@@ -1 +1 @@
1
- {"version":3,"file":"providerSelector.js","sourceRoot":"","sources":["../../../src/providers/providerSelector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"providerSelector.js","sourceRoot":"","sources":["../../../src/providers/providerSelector.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@didim365/agent-cli-core",
3
- "version": "0.2.18",
3
+ "version": "0.2.20",
4
4
  "description": "Gemini CLI Core",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {