Skip to content

Commit fbd95ea

Browse files
committed
test(agents): assert SecretRef markers through ordered read-only discovery
1 parent 738d74f commit fbd95ea

1 file changed

Lines changed: 60 additions & 2 deletions

File tree

src/agents/agent-model-discovery.auth.test.ts

Lines changed: 60 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -267,11 +267,69 @@ describe("discoverAuthStorage", () => {
267267

268268
expect(credentials.openrouter).toBeUndefined();
269269
expect(credentials.anthropic).toBeUndefined();
270-
expect(discoveryCredentials.openrouter?.type).toBe("api_key");
271-
expect(discoveryCredentials.anthropic?.type).toBe("api_key");
270+
// Read-only discovery must keep configured SecretRef markers, not drop the
271+
// provider when resolveAuthProfileOrder runs in readinessMode "read-only".
272+
expect(discoveryCredentials.openrouter).toEqual({
273+
type: "api_key",
274+
key: "openclaw-secret-ref-configured",
275+
});
276+
expect(discoveryCredentials.anthropic).toEqual({
277+
type: "api_key",
278+
key: "openclaw-secret-ref-configured",
279+
});
272280
expect(discoveryCredentials.expired).toBeUndefined();
273281
});
274282

283+
it("keeps keyRef-only profiles through ordered read-only discovery", () => {
284+
// Regression for SecretRef-backed providers: ordering must not filter
285+
// unresolved_ref profiles when discovery requests placeholders.
286+
const store = {
287+
version: 1 as const,
288+
profiles: {
289+
"openai:ref-only": {
290+
type: "api_key" as const,
291+
provider: "openai",
292+
keyRef: { source: "env" as const, provider: "default", id: "OPENAI_API_KEY" },
293+
},
294+
"openai:literal-second": {
295+
type: "api_key" as const,
296+
provider: "openai",
297+
key: "sk-literal-fallback",
298+
},
299+
},
300+
};
301+
const executionMap = resolveAgentCredentialMapFromStore(store, {
302+
config: {
303+
auth: {
304+
order: {
305+
openai: ["openai:ref-only", "openai:literal-second"],
306+
},
307+
},
308+
} as never,
309+
});
310+
const readOnlyMap = resolveAgentCredentialMapFromStore(store, {
311+
includeSecretRefPlaceholders: true,
312+
config: {
313+
auth: {
314+
order: {
315+
openai: ["openai:ref-only", "openai:literal-second"],
316+
},
317+
},
318+
} as never,
319+
});
320+
321+
// Execution mode cannot resolve the SecretRef, so it falls through.
322+
expect(executionMap.openai).toEqual({
323+
type: "api_key",
324+
key: "sk-literal-fallback",
325+
});
326+
// Read-only discovery keeps the ordered keyRef profile as the configured marker.
327+
expect(readOnlyMap.openai).toEqual({
328+
type: "api_key",
329+
key: "openclaw-secret-ref-configured",
330+
});
331+
});
332+
275333
it("marks keyRef-only auth profiles configured for read-only model discovery", async () => {
276334
await withAgentDir(async (agentDir) => {
277335
writeAuthProfilesSqlite(agentDir, {

0 commit comments

Comments
 (0)