




















@@ -4,6 +4,7 @@ import type { AuthProfileStore } from "../agents/auth-profiles/types.js";
44describe("provider auth profile helpers", () => {
55afterEach(() => {
66vi.doUnmock("../agents/agent-scope-config.js");
7+vi.doUnmock("../agents/auth-profiles/external-cli-discovery.js");
78vi.doUnmock("../agents/auth-profiles/oauth.js");
89vi.doUnmock("../agents/auth-profiles/order.js");
910vi.doUnmock("../agents/auth-profiles/store.js");
@@ -84,4 +85,59 @@ describe("provider auth profile helpers", () => {
8485}),
8586);
8687});
88+89+it("scopes external CLI auth discovery to provider profile resolution", async () => {
90+vi.resetModules();
91+92+const store: AuthProfileStore = {
93+version: 1,
94+profiles: {
95+"openai-codex:default": {
96+type: "oauth",
97+provider: "openai-codex",
98+access: "oauth-access",
99+refresh: "oauth-refresh",
100+expires: Date.now() + 60_000,
101+},
102+},
103+};
104+const externalCli = { mode: "scoped", providerIds: ["openai-codex"] };
105+const loadAuthProfileStoreForSecretsRuntime = vi.fn(() => store);
106+107+vi.doMock("../agents/agent-scope-config.js", () => ({
108+resolveDefaultAgentDir: () => "/tmp/openclaw-agent",
109+}));
110+vi.doMock("../agents/auth-profiles/external-cli-discovery.js", () => ({
111+externalCliDiscoveryForProviderAuth: vi.fn(() => externalCli),
112+}));
113+vi.doMock("../agents/auth-profiles/oauth.js", () => ({
114+resolveApiKeyForProfile: vi.fn(),
115+}));
116+vi.doMock("../agents/auth-profiles/order.js", () => ({
117+resolveAuthProfileOrder: ({
118+ provider,
119+ store,
120+}: {
121+provider: string;
122+store: AuthProfileStore;
123+}) =>
124+Object.entries(store.profiles)
125+.filter(([, profile]) => profile.provider === provider)
126+.map(([profileId]) => profileId),
127+}));
128+vi.doMock("../agents/auth-profiles/store.js", () => ({
129+ensureAuthProfileStore: vi.fn(() => store),
130+ensureAuthProfileStoreForLocalUpdate: vi.fn(() => store),
131+ loadAuthProfileStoreForSecretsRuntime,
132+loadAuthProfileStoreWithoutExternalProfiles: vi.fn(() => ({ version: 1, profiles: {} })),
133+updateAuthProfileStoreWithLock: vi.fn(),
134+}));
135+136+const { isProviderAuthProfileConfigured } = await import("./provider-auth.js");
137+138+expect(isProviderAuthProfileConfigured({ provider: "openai-codex" })).toBe(true);
139+expect(loadAuthProfileStoreForSecretsRuntime).toHaveBeenCalledWith("/tmp/openclaw-agent", {
140+ externalCli,
141+});
142+});
87143});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。