feat(coding-agent): unified resolution logic for deferred model patterns
- Enabled comma-separated string splitting within array-based model patterns. - Expanded deferred model patterns before registration to align with immediate resolution behavior. - Unified resolution logic to ensure deferred patterns support the same role aliases and chaining as the standard path.
This commit is contained in:
@@ -864,7 +864,7 @@ function getModelRoleAlias(value: string): ModelRole | undefined {
|
||||
|
||||
function normalizeModelPatternList(value: string | string[] | undefined): string[] {
|
||||
if (!value) return [];
|
||||
const patterns = Array.isArray(value) ? value : value.split(",");
|
||||
const patterns = Array.isArray(value) ? value.flatMap(pattern => pattern.split(",")) : value.split(",");
|
||||
return patterns.map(pattern => pattern.trim()).filter(Boolean);
|
||||
}
|
||||
|
||||
|
||||
@@ -41,6 +41,7 @@ import {
|
||||
parseModelString,
|
||||
pickDefaultAvailableModel,
|
||||
resolveAllowedModels,
|
||||
resolveConfiguredModelPatterns,
|
||||
resolveModelRoleValue,
|
||||
} from "./config/model-resolver";
|
||||
import { loadPromptTemplates as loadPromptTemplatesInternal, type PromptTemplate } from "./config/prompt-templates";
|
||||
@@ -1969,12 +1970,16 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Resolve deferred --model/subagent patterns now that extension models are registered.
|
||||
// Resolve deferred --model/subagent patterns now that extension models are
|
||||
// registered. Expand role aliases (`pi/smol`) and comma chains to concrete
|
||||
// selectors first so deferred resolution accepts everything the immediate
|
||||
// path (resolveModelOverride → resolveModelRoleValue) accepts.
|
||||
if (!model && deferredModelPatterns.length > 0) {
|
||||
const expandedModelPatterns = resolveConfiguredModelPatterns(deferredModelPatterns, settings);
|
||||
const availableModels = modelRegistry.getAll();
|
||||
const matchPreferences = getModelMatchPreferences(settings);
|
||||
for (let patternIndex = 0; patternIndex < deferredModelPatterns.length; patternIndex += 1) {
|
||||
const pattern = deferredModelPatterns[patternIndex];
|
||||
for (let patternIndex = 0; patternIndex < expandedModelPatterns.length; patternIndex += 1) {
|
||||
const pattern = expandedModelPatterns[patternIndex];
|
||||
const primary = parseModelPattern(pattern, availableModels, matchPreferences);
|
||||
if (!primary.model) continue;
|
||||
let selectedModel = primary.model;
|
||||
@@ -2007,7 +2012,7 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
||||
);
|
||||
const seenSelectors = new Set<string>([primarySelector]);
|
||||
const fallbackSelectors: string[] = [];
|
||||
for (const fallbackPattern of deferredModelPatterns.slice(patternIndex + 1)) {
|
||||
for (const fallbackPattern of expandedModelPatterns.slice(patternIndex + 1)) {
|
||||
const fallback = parseModelPattern(fallbackPattern, availableModels, matchPreferences);
|
||||
if (!fallback.model) continue;
|
||||
const fallbackSelector = formatModelSelectorValue(
|
||||
|
||||
Reference in New Issue
Block a user