{"record":{"id":"2bf668dc08287544","repo":"paperclipai/paperclip","slug":"exe-dev-environments-require-an-api-key-in-config","errorCode":null,"errorMessage":"exe.dev environments require an API key in config or EXE_API_KEY.","messagePattern":"exe\\.dev environments require an API key in config or EXE_API_KEY\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/plugins/sandbox-providers/exe-dev/src/plugin.ts","lineNumber":274,"sourceCode":"    integrations: parseStringArray(raw.integrations),\n    tags: parseStringArray(raw.tags),\n    setupScript: parseOptionalString(raw.setupScript),\n    prompt: parseOptionalString(raw.prompt),\n    timeoutMs: Number.isFinite(timeoutMs) ? Math.trunc(timeoutMs) : DEFAULT_TIMEOUT_MS,\n    reuseLease: raw.reuseLease === true,\n    sshUser: parseOptionalString(raw.sshUser),\n    sshPrivateKey: parseOptionalString(raw.sshPrivateKey),\n    sshIdentityFile: parseOptionalString(raw.sshIdentityFile),\n    sshPort: Number.isFinite(sshPort) ? Math.trunc(sshPort) : 22,\n    strictHostKeyChecking: parseOptionalString(raw.strictHostKeyChecking) ?? \"accept-new\",\n  };\n}\n\nfunction resolveApiKey(config: ExeDevDriverConfig): string {\n  if (config.apiKey) return config.apiKey;\n  const envApiKey = process.env.EXE_API_KEY?.trim() ?? \"\";\n  if (!envApiKey) {\n    throw new Error(\"exe.dev environments require an API key in config or EXE_API_KEY.\");\n  }\n  return envApiKey;\n}\n\nfunction isValidShellEnvKey(value: string): boolean {\n  return /^[A-Za-z_][A-Za-z0-9_]*$/.test(value);\n}\n\nfunction shellQuote(value: string): string {\n  return `'${value.replace(/'/g, `'\"'\"'`)}'`;\n}\n\nfunction formatErrorMessage(error: unknown): string {\n  return error instanceof Error ? error.message : String(error);\n}\n\nfunction buildVmName(config: ExeDevDriverConfig, params: PluginEnvironmentAcquireLeaseParams): string {\n  const envPart = params.environmentId.replace(/[^a-z0-9]+/gi, \"\").slice(0, 8).toLowerCase() || \"env\";","sourceCodeStart":256,"sourceCodeEnd":292,"githubUrl":"https://github.com/paperclipai/paperclip/blob/a7e689b3c35347b529cb9f54c9b9a8575a3dcab6/packages/plugins/sandbox-providers/exe-dev/src/plugin.ts#L256-L292","documentation":"Credential resolution failure in resolveApiKey for the exe.dev driver: no API key was found in the environment config and the EXE_API_KEY env var fallback is also unset. Without it every exe.dev API call would be unauthenticated, so the driver fails at credential resolution rather than at request time.","triggerScenarios":"Thrown at packages/plugins/sandbox-providers/exe-dev/src/plugin.ts:272 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set EXE_API_KEY or configure apiKey in the environment config."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"a7e689b3c35347b529cb9f54c9b9a8575a3dcab6","analyzedAt":"2026-08-18T22:49:45.177Z","contentChangedAt":"2026-08-18T22:49:45.177Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}