AUXteam's picture
Upload folder using huggingface_hub
e6b89d5 verified
export interface SandboxFile {
path: string;
content: string;
lastModified?: number;
}
export interface SandboxInfo {
sandboxId: string;
url: string;
provider: 'e2b' | 'vercel';
createdAt: Date;
}
export interface CommandResult {
stdout: string;
stderr: string;
exitCode: number;
success: boolean;
}
export interface SandboxProviderConfig {
e2b?: {
apiKey: string;
timeoutMs?: number;
template?: string;
};
vercel?: {
teamId?: string;
projectId?: string;
token?: string;
authMethod?: 'oidc' | 'pat';
};
}
export abstract class SandboxProvider {
protected config: SandboxProviderConfig;
protected sandbox: any;
protected sandboxInfo: SandboxInfo | null = null;
constructor(config: SandboxProviderConfig) {
this.config = config;
}
abstract createSandbox(): Promise<SandboxInfo>;
abstract runCommand(command: string): Promise<CommandResult>;
abstract writeFile(path: string, content: string): Promise<void>;
abstract readFile(path: string): Promise<string>;
abstract listFiles(directory?: string): Promise<string[]>;
abstract installPackages(packages: string[]): Promise<CommandResult>;
abstract getSandboxUrl(): string | null;
abstract getSandboxInfo(): SandboxInfo | null;
abstract terminate(): Promise<void>;
abstract isAlive(): boolean;
// Optional methods that providers can override
async setupViteApp(): Promise<void> {
// Default implementation for setting up a Vite React app
throw new Error('setupViteApp not implemented for this provider');
}
async setupPythonEnv(): Promise<void> {
// Default implementation for setting up a Python environment
throw new Error('setupPythonEnv not implemented for this provider');
}
async restartViteServer(): Promise<void> {
// Default implementation for restarting Vite
throw new Error('restartViteServer not implemented for this provider');
}
}