





























@@ -8,6 +8,7 @@ const mocks = vi.hoisted(() => ({
88resolveAuthProfileDisplayLabel: vi.fn(),
99resolveUsableCustomProviderApiKey: vi.fn(() => null),
1010resolveEnvApiKey: vi.fn<() => { apiKey: string; source: string } | null>(() => null),
11+readClaudeCliCredentialsCached: vi.fn<(options?: unknown) => unknown>(() => null),
1112readCodexCliCredentialsCached: vi.fn<(options?: unknown) => unknown>(() => null),
1213}));
1314@@ -25,7 +26,7 @@ vi.mock("./model-auth.js", () => ({
2526}));
26272728vi.mock("./cli-credentials.js", () => ({
28-readClaudeCliCredentialsCached: () => null,
29+readClaudeCliCredentialsCached: mocks.readClaudeCliCredentialsCached,
2930readCodexCliCredentialsCached: mocks.readCodexCliCredentialsCached,
3031}));
3132@@ -46,6 +47,8 @@ describe("resolveModelAuthLabel", () => {
4647mocks.resolveUsableCustomProviderApiKey.mockReturnValue(null);
4748mocks.resolveEnvApiKey.mockReset();
4849mocks.resolveEnvApiKey.mockReturnValue(null);
50+mocks.readClaudeCliCredentialsCached.mockReset();
51+mocks.readClaudeCliCredentialsCached.mockReturnValue(null);
4952mocks.readCodexCliCredentialsCached.mockReset();
5053mocks.readCodexCliCredentialsCached.mockReturnValue(null);
5154});
@@ -150,6 +153,32 @@ describe("resolveModelAuthLabel", () => {
150153});
151154});
152155156+it("shows claude cli auth for claude-cli provider without auth profiles", () => {
157+mocks.ensureAuthProfileStore.mockReturnValue({
158+version: 1,
159+profiles: {},
160+} as never);
161+mocks.resolveAuthProfileOrder.mockReturnValue([]);
162+mocks.readClaudeCliCredentialsCached.mockReturnValue({
163+type: "oauth",
164+provider: "claude-cli",
165+access: "token",
166+refresh: "refresh",
167+expires: Date.now() + 60_000,
168+});
169+170+const label = resolveModelAuthLabel({
171+provider: "claude-cli",
172+cfg: {},
173+});
174+175+expect(label).toBe("oauth (claude-cli)");
176+expect(mocks.readClaudeCliCredentialsCached).toHaveBeenCalledWith({
177+ttlMs: 5_000,
178+allowKeychainPrompt: false,
179+});
180+});
181+153182it("can skip external auth profile overlays for status labels", () => {
154183mocks.loadAuthProfileStoreWithoutExternalProfiles.mockReturnValue({
155184version: 1,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。