























@@ -7,6 +7,7 @@ const mocks = vi.hoisted(() => ({
77resolveAuthProfileDisplayLabel: vi.fn(),
88resolveUsableCustomProviderApiKey: vi.fn(() => null),
99resolveEnvApiKey: vi.fn(() => null),
10+readCodexCliCredentialsCached: vi.fn<() => unknown>(() => null),
1011}));
11121213vi.mock("./auth-profiles.js", () => ({
@@ -21,6 +22,10 @@ vi.mock("./model-auth.js", () => ({
2122resolveEnvApiKey: mocks.resolveEnvApiKey,
2223}));
232425+vi.mock("./cli-credentials.js", () => ({
26+readCodexCliCredentialsCached: mocks.readCodexCliCredentialsCached,
27+}));
28+2429let resolveModelAuthLabel: typeof import("./model-auth-label.js").resolveModelAuthLabel;
25302631describe("resolveModelAuthLabel", () => {
@@ -36,6 +41,8 @@ describe("resolveModelAuthLabel", () => {
3641mocks.resolveUsableCustomProviderApiKey.mockReturnValue(null);
3742mocks.resolveEnvApiKey.mockReset();
3843mocks.resolveEnvApiKey.mockReturnValue(null);
44+mocks.readCodexCliCredentialsCached.mockReset();
45+mocks.readCodexCliCredentialsCached.mockReturnValue(null);
3946});
40474148it("does not include token value in label for token profiles", () => {
@@ -112,6 +119,28 @@ describe("resolveModelAuthLabel", () => {
112119expect(label).toBe("oauth (anthropic:oauth)");
113120});
114121122+it("shows codex cli auth for codex provider without auth profiles", () => {
123+mocks.ensureAuthProfileStore.mockReturnValue({
124+version: 1,
125+profiles: {},
126+} as never);
127+mocks.resolveAuthProfileOrder.mockReturnValue([]);
128+mocks.readCodexCliCredentialsCached.mockReturnValue({
129+type: "oauth",
130+provider: "openai-codex",
131+access: "token",
132+refresh: "refresh",
133+expires: Date.now() + 60_000,
134+});
135+136+const label = resolveModelAuthLabel({
137+provider: "codex",
138+cfg: {},
139+});
140+141+expect(label).toBe("oauth (codex-cli)");
142+});
143+115144it("can skip external auth profile overlays for status labels", () => {
116145mocks.loadAuthProfileStoreWithoutExternalProfiles.mockReturnValue({
117146version: 1,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。