mirror of
https://github.com/qwibitai/nanoclaw.git
synced 2026-07-12 19:00:58 +08:00
1f3b023a5a
Providers now mirror the channels pattern: each module calls registerProvider() at top level, and providers/index.ts is a barrel of side-effect imports. createProvider() becomes a thin registry lookup; the closed ProviderName union is gone (now a string alias, since the env var is a runtime string anyway). Also adds a host-side provider-container-registry so providers can declare their own mounts and env passthrough in src/providers/<name>.ts instead of the container-runner having to know about each one. The resolver runs once per spawn and threads provider + contribution through buildMounts and buildContainerArgs so side effects (mkdir, etc.) fire exactly once. Both barrels are append-only — adding a new provider is a new file + one import line per barrel, no edits to existing files. The built-in providers (claude, mock) don't need host-side config, so src/providers/ ships with an empty barrel; the container-side barrel imports both. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
14 lines
523 B
TypeScript
14 lines
523 B
TypeScript
import type { AgentProvider, ProviderOptions } from './types.js';
|
|
import { getProviderFactory } from './provider-registry.js';
|
|
|
|
/**
|
|
* Any registered provider name. Kept as a named alias for readability; the
|
|
* set of valid names is open and determined at runtime by whichever provider
|
|
* modules the `providers/index.ts` barrel imports.
|
|
*/
|
|
export type ProviderName = string;
|
|
|
|
export function createProvider(name: ProviderName, options: ProviderOptions = {}): AgentProvider {
|
|
return getProviderFactory(name)(options);
|
|
}
|