@earendil-works/pi-coding-agent
Version:
Coding agent CLI with read, bash, edit, write tools and session management
104 lines • 3.84 kB
JavaScript
export { clearApiKeyCache } from "./provider-composer.js";
/**
* Synchronous compatibility facade exposed to extensions.
* Coding-agent internals use ModelRuntime directly.
*/
export class ModelRegistry {
runtime;
constructor(runtime) {
this.runtime = runtime;
}
/** Reload models.json asynchronously. Await before making synchronous registry reads. */
async refresh() {
await this.runtime.refresh();
}
getError() {
return this.runtime.getError();
}
getAll() {
return [...this.runtime.getModels()];
}
getAvailable() {
return [...this.runtime.getAvailableSnapshot()];
}
find(provider, modelId) {
return this.runtime.getModel(provider, modelId);
}
hasConfiguredAuth(model) {
return this.runtime.hasConfiguredAuth(model.provider);
}
async getApiKeyAndHeaders(model) {
try {
const resolution = await this.runtime.getAuth(model);
if (!resolution) {
const compatibility = this.runtime.getCompatibilityRequestConfig(model);
if (compatibility.authHeader) {
return { ok: false, error: `No API key found for "${model.provider}"` };
}
const headers = compatibility.headers
? Object.fromEntries(Object.entries(compatibility.headers).filter((entry) => entry[1] !== null))
: undefined;
return { ok: true, headers };
}
const headers = resolution.auth.headers
? Object.fromEntries(Object.entries(resolution.auth.headers).filter((entry) => entry[1] !== null))
: undefined;
return { ok: true, apiKey: resolution.auth.apiKey, headers, env: resolution.env };
}
catch (error) {
const cause = error instanceof Error ? error.cause : undefined;
const message = cause instanceof Error ? cause.message : error instanceof Error ? error.message : String(error);
return {
ok: false,
error: message === "authHeader requires a resolved API key"
? `No API key found for "${model.provider}"`
: message,
};
}
}
getProviderAuthStatus(provider) {
return this.runtime.getProviderAuthStatus(provider);
}
getProvider(provider) {
return this.runtime.getProvider(provider);
}
getProviderDisplayName(provider) {
return this.runtime.getProvider(provider)?.name ?? provider;
}
getProviderAuth(provider) {
return this.runtime.getAuth(provider);
}
async getApiKeyForProvider(provider) {
try {
return (await this.runtime.getAuth(provider))?.auth.apiKey;
}
catch {
return undefined;
}
}
isUsingOAuth(model) {
return this.runtime.isUsingOAuth(model.provider);
}
registerProvider(providerOrName, config) {
if (typeof providerOrName === "string") {
if (!config)
throw new Error("Provider config is required when registering by name");
this.runtime.registerProvider(providerOrName, config);
return;
}
this.runtime.registerNativeProvider(providerOrName);
}
unregisterProvider(providerName) {
this.runtime.unregisterProvider(providerName);
}
getRegisteredProviderConfig(providerName) {
return this.runtime.getRegisteredProviderConfig(providerName);
}
getRegisteredNativeProvider(providerName) {
return this.runtime.getRegisteredNativeProvider(providerName);
}
getRegisteredProviderIds() {
return this.runtime.getRegisteredProviderIds();
}
}
//# sourceMappingURL=model-registry.js.map