History

fix: restore config options fallback in discoverCursorModelsViaAcp

Restore the catchCause fallback that builds models from session/new config options when cursor/list_available_models fails or is unsupported. This re-adds buildCursorDiscoveredModelsFromConfigOptions and its findCursorModelConfigOption helper, which were removed in the prior commit.

Cursor Agent committed 5 months ago

Commit d079be11 parent a6c98421 file · +50 −1Browse files

Unified · Split

apps/server/src/provider/Layers/CursorProvider.ts+50−1
@@ -154,6 +154,12 @@ function normalizeCursorReasoningValue(value: string | null | undefined): string · 153 unmodified lines
154154 }
155155 }
156156
157+function findCursorModelConfigOption(
158+ configOptions: ReadonlyArray<EffectAcpSchema.SessionConfigOption>,
159+): EffectAcpSchema.SessionConfigOption | undefined {
160+ return configOptions.find((option) => option.category === "model");
161+}
162+
157163 function getCursorConfigOptionCategory(option: EffectAcpSchema.SessionConfigOption): string {
158164 return option.category?.trim().toLowerCase() ?? "";
159165 }
@@ -411,6 +417,35 @@ export function mergeCursorDiscoveredModelCapabilities( · 251 unmodified lines
411417 return mergedModels;
412418 }
413419
420+export function buildCursorDiscoveredModelsFromConfigOptions(
421+ configOptions: ReadonlyArray<EffectAcpSchema.SessionConfigOption> | null | undefined,
422+): ReadonlyArray<ServerProviderModel> {
423+ if (!configOptions || configOptions.length === 0) {
424+ return [];
425+ }
426+
427+ const modelOption = findCursorModelConfigOption(configOptions);
428+ const modelChoices = flattenSessionConfigSelectOptions(modelOption);
429+ if (!modelOption || modelChoices.length === 0) {
430+ return [];
431+ }
432+
433+ const currentModelValue =
434+ modelOption.type === "select" ? modelOption.currentValue?.trim() || undefined : undefined;
435+ const currentModelCapabilities = buildCursorCapabilitiesFromConfigOptions(configOptions);
436+
437+ return buildCursorDiscoveredModels(
438+ modelChoices.map((modelChoice) => ({
439+ slug: modelChoice.value.trim(),
440+ name: modelChoice.name.trim(),
441+ capabilities:
442+ currentModelValue === modelChoice.value.trim()
443+ ? currentModelCapabilities
444+ : EMPTY_CAPABILITIES,
445+ })),
446+ );
447+}
448+
414449 function buildCursorDiscoveredModelsFromAvailableModelsResponse(
415450 response: typeof CursorListAvailableModelsResponse.Type,
416451 ): ReadonlyArray<ServerProviderModel> {
@@ -602,7 +637,21 @@ const discoverCursorModelsViaListAvailableModels = ( · 185 unmodified lines
602637 export const discoverCursorModelsViaAcp = (
603638 cursorSettings: CursorSettings,
604639 environment: NodeJS.ProcessEnv = process.env,
605−) => discoverCursorModelsViaListAvailableModels(cursorSettings, environment);
640+) =>
641+ discoverCursorModelsViaListAvailableModels(cursorSettings, environment).pipe(
642+ Effect.catchCause(() =>
643+ withCursorAcpProbeRuntime(
644+ cursorSettings,
645+ (acp) =>
646+ Effect.map(acp.start(), (started) =>
647+ buildCursorDiscoveredModelsFromConfigOptions(
648+ started.sessionSetupResult.configOptions ?? [],
649+ ),
650+ ),
651+ environment,
652+ ),
653+ ),
654+ );
606655
607656 export const discoverCursorModelCapabilitiesViaAcp = (
608657 cursorSettings: CursorSettings,