Skip to content

[v2.5] Add provider registry and factory pattern #32

@frankbria

Description

@frankbria

Overview

Create a registry system for managing multiple sandbox providers and a factory for creating provider instances.

Design

Provider Registry

// src/e2b/providers/registry.ts

export class ProviderRegistry {
  private providers: Map<string, SandboxProvider> = new Map();
  
  register(provider: SandboxProvider): void {
    this.providers.set(provider.name, provider);
  }
  
  get(name: string): SandboxProvider | undefined {
    return this.providers.get(name);
  }
  
  list(): string[] {
    return Array.from(this.providers.keys());
  }
  
  getDefault(): SandboxProvider {
    // Return based on config or first available
  }
}

Provider Factory

// src/e2b/providers/factory.ts

export function createProvider(
  name: string, 
  config?: ProviderConfig
): SandboxProvider {
  switch (name) {
    case 'e2b':
      return new E2BProvider(config);
    case 'native':
      return new NativeProvider(config);
    case 'docker':
      return new DockerProvider(config);
    default:
      throw new Error(\`Unknown provider: \${name}\`);
  }
}

Auto-Discovery

// Auto-discover available providers on startup
async function discoverProviders(): Promise<string[]> {
  const available: string[] = [];
  
  if (await E2BProvider.isAvailable()) available.push('e2b');
  if (await NativeProvider.isAvailable()) available.push('native');
  if (await DockerProvider.isAvailable()) available.push('docker');
  
  return available;
}

Configuration

// ~/.parallel-cc/config.json
{
  "sandbox": {
    "defaultProvider": "e2b",
    "fallbackChain": ["native", "docker"],
    "providers": {
      "e2b": {
        "template": "anthropic-claude-code"
      },
      "docker": {
        "image": "claude-code:latest"
      }
    }
  }
}

Files to Create

  • src/e2b/providers/registry.ts
  • src/e2b/providers/factory.ts
  • src/e2b/providers/discovery.ts

Acceptance Criteria

  • Registry can manage multiple providers
  • Factory creates correct provider types
  • Auto-discovery detects available providers
  • Configuration file respected
  • Fallback chain works correctly

Dependencies

Metadata

Metadata

Assignees

No one assigned

    Labels

    component-e2bE2B sandbox integrationenhancementNew feature or requestphase-2-multi-providerPhase 2: Multi-provider sandbox architecture (v2.5)priority-mediumMedium priority - next milestone

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions