Files
stack/packages/agent/src/runtime-provider-registry.ts
jason.woltje e92186d768
All checks were successful
ci/woodpecker/push/ci-image Pipeline was successful
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/push/publish Pipeline was successful
feat: add Tess runtime provider registry (#722)
2026-07-12 23:53:54 +00:00

41 lines
1.3 KiB
TypeScript

import type { AgentRuntimeProvider } from '@mosaicstack/types';
/**
* Registry for runtime providers. Registration is explicit and replacement is
* forbidden so a provider identity cannot be silently hijacked at runtime.
*/
export class AgentRuntimeProviderRegistry {
private readonly providers = new Map<string, AgentRuntimeProvider>();
register(provider: AgentRuntimeProvider): void {
const providerId = provider.id.trim();
if (providerId.length === 0) {
throw new Error('Runtime provider ID is required');
}
if (this.providers.has(providerId)) {
throw new Error(`Runtime provider is already registered: ${providerId}`);
}
this.providers.set(providerId, provider);
}
get(providerId: string): AgentRuntimeProvider | undefined {
return this.providers.get(providerId);
}
require(providerId: string): AgentRuntimeProvider {
const normalizedProviderId = providerId.trim();
if (normalizedProviderId.length === 0) {
throw new Error('Runtime provider ID is required');
}
const provider = this.providers.get(normalizedProviderId);
if (!provider) {
throw new Error(`Runtime provider is not registered: ${normalizedProviderId}`);
}
return provider;
}
list(): AgentRuntimeProvider[] {
return Array.from(this.providers.values());
}
}