

























@@ -28,6 +28,7 @@ import {
2828resolveProviderEnvAuthLookupMaps,
2929} from "../../agents/model-auth-env-vars.js";
3030import { resolveEnvApiKey, resolveUsableCustomProviderApiKey } from "../../agents/model-auth.js";
31+import { resolveCliRuntimeExecutionProvider } from "../../agents/model-runtime-aliases.js";
3132import {
3233buildModelAliasIndex,
3334isCliProvider,
@@ -361,12 +362,17 @@ export async function modelsStatusCommand(
361362})?.ref;
362363};
363364const providersFromModels = new Set<string>();
364-const providerUses: Array<{ provider: string; allowCodexRuntimeFallback: boolean }> = [];
365+const providerUses: Array<{
366+provider: string;
367+model: string;
368+allowCodexRuntimeFallback: boolean;
369+}> = [];
365370const addProviderUse = (raw: string | undefined, allowCodexRuntimeFallback: boolean) => {
366371const ref = resolveStatusModelRef(raw);
367372if (ref?.provider) {
368373providerUses.push({
369374provider: normalizeProviderId(ref.provider),
375+model: ref.model,
370376 allowCodexRuntimeFallback,
371377});
372378}
@@ -416,13 +422,36 @@ export async function modelsStatusCommand(
416422}).map((provider) => normalizeProviderId(provider)),
417423);
418424const syntheticAuthByProvider = new Map<string, StatusSyntheticAuth>();
425+const cliRuntimeAuthUsages = providerUses
426+.filter((usage) => usage.allowCodexRuntimeFallback)
427+.map((usage) => {
428+const runtimeProvider = resolveCliRuntimeExecutionProvider({
429+provider: usage.provider,
430+modelId: usage.model,
431+ cfg,
432+agentId: workspaceAgentId,
433+});
434+const normalizedRuntime = runtimeProvider
435+ ? normalizeProviderId(runtimeProvider)
436+ : undefined;
437+return normalizedRuntime && normalizedRuntime !== usage.provider
438+ ? {
439+provider: usage.provider,
440+model: usage.model,
441+allowCodexRuntimeFallback: usage.allowCodexRuntimeFallback,
442+runtime: normalizedRuntime,
443+}
444+ : undefined;
445+})
446+.filter((usage): usage is NonNullable<typeof usage> => Boolean(usage));
419447420448const providers = Array.from(
421449new Set([
422450 ...providersFromStore,
423451 ...providersFromConfig,
424452 ...providersFromModels,
425453 ...providersFromEnv,
454+ ...cliRuntimeAuthUsages.map((usage) => usage.runtime),
426455]),
427456)
428457.map((p) => normalizeOptionalString(p) ?? "")
@@ -696,25 +725,41 @@ export async function modelsStatusCommand(
696725}
697726return false;
698727};
728+const hasUsableDirectProviderAuth = (provider: string): boolean => {
729+const normalized = normalizeProviderId(provider);
730+const hasUsableProfile = listProviderProfileCandidates(normalized).some((profileId) => {
731+const credential = store.profiles[profileId];
732+return credential ? hasUsableAuthProfile(profileId, credential) : false;
733+});
734+return hasUsableProfile || hasUsableNonProfileAuth(normalized);
735+};
699736const hasUsableProviderAuth = (
700737provider: string,
701738options?: { includeLegacyOpenAICodex?: boolean },
702739): boolean => {
703740for (const candidate of listRuntimeAuthProviderCandidates(provider, options)) {
704-const hasUsableProfile = listProviderProfileCandidates(candidate).some((profileId) => {
705-const credential = store.profiles[profileId];
706-return credential ? hasUsableAuthProfile(profileId, credential) : false;
707-});
708-if (hasUsableProfile || hasUsableNonProfileAuth(candidate)) {
741+if (hasUsableDirectProviderAuth(candidate)) {
709742return true;
710743}
711744}
712745return false;
713746};
747+const resolveCliRuntimeAuthProvider = (usage: (typeof providerUses)[number]) =>
748+cliRuntimeAuthUsages.find(
749+(candidate) =>
750+candidate.provider === usage.provider &&
751+candidate.model === usage.model &&
752+candidate.allowCodexRuntimeFallback === usage.allowCodexRuntimeFallback,
753+)?.runtime;
714754const hasUsableAuthForProviderInUse = (
715-provider: string,
755+usage: (typeof providerUses)[number],
716756options: { allowCodexRuntimeFallback: boolean },
717757): boolean => {
758+const cliRuntimeAuthProvider = resolveCliRuntimeAuthProvider(usage);
759+if (cliRuntimeAuthProvider) {
760+return hasUsableDirectProviderAuth(cliRuntimeAuthProvider);
761+}
762+const { provider } = usage;
718763if (hasUsableProviderAuth(provider)) {
719764return true;
720765}
@@ -727,8 +772,8 @@ export async function modelsStatusCommand(
727772);
728773};
729774const runtimeAuthRoutes = Array.from(
730-new Map(
731-codexRuntimeAuthUsages.map((usage) => {
775+new Map([
776+...codexRuntimeAuthUsages.map((usage) => {
732777const effective = resolveRuntimeAuthRouteEffective(codexProvider);
733778return [
734779`${usage.provider}:codex:${codexProvider}`,
@@ -745,21 +790,38 @@ export async function modelsStatusCommand(
745790},
746791] as const;
747792}),
748-).values(),
793+ ...cliRuntimeAuthUsages.map((usage) => {
794+const effective = resolveRuntimeAuthRouteEffective(usage.runtime);
795+return [
796+`${usage.provider}:${usage.runtime}:${usage.runtime}`,
797+{
798+provider: usage.provider,
799+runtime: usage.runtime,
800+authProvider: usage.runtime,
801+status: hasUsableDirectProviderAuth(usage.runtime) ? "usable" : "missing",
802+ effective,
803+},
804+] as const;
805+}),
806+]).values(),
749807).toSorted((a, b) => a.provider.localeCompare(b.provider));
750808const missingProvidersInUse = Array.from(
751809new Set(
752810providerUses
753811.filter(
754812(usage) =>
755-!hasUsableAuthForProviderInUse(usage.provider, {
813+!hasUsableAuthForProviderInUse(usage, {
756814allowCodexRuntimeFallback: usage.allowCodexRuntimeFallback,
757815}),
758816)
759-.map((usage) => usage.provider),
817+.map((usage) => resolveCliRuntimeAuthProvider(usage) ?? usage.provider),
760818),
761819)
762-.filter((provider) => !isCliProvider(provider, cfg))
820+.filter(
821+(provider) =>
822+!isCliProvider(provider, cfg) ||
823+cliRuntimeAuthUsages.some((usage) => usage.runtime === provider),
824+)
763825.toSorted((a, b) => a.localeCompare(b));
764826765827const probeProfileIds = (() => {
@@ -891,6 +953,12 @@ export async function modelsStatusCommand(
891953const checkStatus = (() => {
892954const providersInUse = new Set<string>();
893955for (const usage of providerUses) {
956+const cliRuntimeAuthProvider = resolveCliRuntimeAuthProvider(usage);
957+if (cliRuntimeAuthProvider) {
958+providersInUse.add(cliRuntimeAuthProvider);
959+providersInUse.add(resolveProviderAuthHealthId(cliRuntimeAuthProvider));
960+continue;
961+}
894962providersInUse.add(usage.provider);
895963providersInUse.add(resolveProviderAuthHealthId(usage.provider));
896964if (
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。