{"record":{"id":"24b642818a42b700","repo":"firecrawl/open-lovable","slug":"setupviteapp-not-implemented-for-this-provider","errorCode":null,"errorMessage":"setupViteApp not implemented for this provider","messagePattern":"setupViteApp not implemented for this provider","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"lib/sandbox/types.ts","lineNumber":58,"sourceCode":"  constructor(config: SandboxProviderConfig) {\n    this.config = config;\n  }\n\n  abstract createSandbox(): Promise<SandboxInfo>;\n  abstract runCommand(command: string): Promise<CommandResult>;\n  abstract writeFile(path: string, content: string): Promise<void>;\n  abstract readFile(path: string): Promise<string>;\n  abstract listFiles(directory?: string): Promise<string[]>;\n  abstract installPackages(packages: string[]): Promise<CommandResult>;\n  abstract getSandboxUrl(): string | null;\n  abstract getSandboxInfo(): SandboxInfo | null;\n  abstract terminate(): Promise<void>;\n  abstract isAlive(): boolean;\n  \n  // Optional methods that providers can override\n  async setupViteApp(): Promise<void> {\n    // Default implementation for setting up a Vite React app\n    throw new Error('setupViteApp not implemented for this provider');\n  }\n  \n  async restartViteServer(): Promise<void> {\n    // Default implementation for restarting Vite\n    throw new Error('restartViteServer not implemented for this provider');\n  }\n}","sourceCodeStart":40,"sourceCodeEnd":65,"githubUrl":"https://github.com/firecrawl/open-lovable/blob/69bd93bae7a9c97ef989eb70aabe6797fb3dac89/lib/sandbox/types.ts#L40-L65","documentation":"The abstract SandboxProvider base class (lib/sandbox/types.ts) provides a default setupViteApp() that throws this Error. Providers that have not overridden it cannot scaffold a Vite app, so calling the base implementation fails fast to signal the capability is unsupported for that provider.","triggerScenarios":"Calling setupViteApp() on a provider subclass (other than VercelProvider) that did not override setupViteApp — e.g. a minimal E2B or custom provider. Switching providers via config while the UI unconditionally calls setupViteApp after creation.","commonSituations":"Config points at a provider like 'e2b' or a stub/local provider that only implements create/read/run; a feature flag switches providers but the scaffold step is unconditional; a newly added provider missing the optional override.","solutions":["Implement setupViteApp() in the active provider class (copy the VercelProvider approach)","Or route scaffold calls only to providers that support it (capability check before calling)","Or replace the throw in the base class with a no-op/default scaffold if all runtimes can support it","Verify which provider is configured and switch to one supporting Vite scaffolding"],"exampleFix":"// before\nclass MyProvider extends SandboxProvider { /* no setupViteApp */ }\n// after\nclass MyProvider extends SandboxProvider {\n  async setupViteApp(): Promise<void> {\n    await this.runCommand('mkdir -p src');\n    // scaffold Vite app...\n  }\n}","handlingStrategy":"validation","validationCode":"if (provider.setupViteApp === SandboxProvider.prototype.setupViteApp) {\n  throw new Error(`Provider ${providerName} does not support Vite scaffolding`);\n}","typeGuard":"function supportsViteSetup(p: SandboxProvider): boolean { return p.setupViteApp !== SandboxProvider.prototype.setupViteApp; }","tryCatchPattern":"try {\n  await provider.setupViteApp();\n} catch (e) {\n  if (e.message.includes('not implemented')) { fallbackToManualScaffold(provider); return; }\n  throw e;\n}","preventionTips":["Declare provider capabilities explicitly in config","Only call setupViteApp for providers that override it","Add an override when implementing a new SandboxProvider subclass","Test the full create->scaffold flow per provider"],"tags":["not-implemented","provider","capability"],"backgroundTag":"method-not-implemented","analyzedSha":"69bd93bae7a9c97ef989eb70aabe6797fb3dac89","analyzedAt":"2026-08-28T22:20:32.339Z","schemaVersion":2},"datasetVersion":"2026-08-29T02:17:18.158Z"}