import fs from "node:fs"; import { isRecord } from "../utils.js"; import { resolveProviderEnvApiKeyCandidates } from "./model-auth-env-vars.js"; import { resolveEnvApiKey } from "./model-auth-env.js"; import type { PiCredentialMap } from "./pi-auth-credentials.js";
export function addEnvBackedPiCredentials(
credentials: PiCredentialMap,
env: NodeJS.ProcessEnv = process.env,
): PiCredentialMap { const next = { ...credentials }; // pi-coding-agent hides providers from its registry when auth storage lacks // a matching credential entry. Mirror env-backed provider auth here so // live/model discovery sees the same providers runtime auth can use. for (const provider of Object.keys(resolveProviderEnvApiKeyCandidates({ env }))) { if (next[provider]) { continue;
} const resolved = resolveEnvApiKey(provider, env); if (!resolved?.apiKey) { continue;
}
next[provider] = {
type: "api_key",
key: resolved.apiKey,
};
} return next;
}
export function scrubLegacyStaticAuthJsonEntriesForDiscovery(pathname: string): void{ if (process.env.OPENCLAW_AUTH_STORE_READONLY === "1") { return;
} if (!fs.existsSync(pathname)) { return;
}
let parsed: unknown; try {
parsed = JSON.parse(fs.readFileSync(pathname, "utf8")) as unknown;
} catch { return;
} if (!isRecord(parsed)) { return;
}
let changed = false; for (const [provider, value] of Object.entries(parsed)) { if (!isRecord(value)) { continue;
} if (value.type !== "api_key") { continue;
} delete parsed[provider];
changed = true;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.