{"record":{"id":"f432e6665b660e7f","repo":"paperclipai/paperclip","slug":"exe-dev-api-command-failed-response-status-fo","errorCode":null,"errorMessage":"exe.dev API command failed (${response.status}) for: ${logCommand}","messagePattern":"exe\\.dev API command failed \\((.+?)\\) for: (.+?)","errorType":"exception","errorClass":"ExeDevApiError","httpStatus":null,"severity":"error","filePath":"packages/plugins/sandbox-providers/exe-dev/src/plugin.ts","lineNumber":390,"sourceCode":"}\n\nasync function runLifecycleCommand(\n  config: ExeDevDriverConfig,\n  command: string,\n  logCommand = command,\n): Promise<unknown> {\n  const response = await fetch(config.apiUrl, {\n    method: \"POST\",\n    headers: {\n      Authorization: `Bearer ${resolveApiKey(config)}`,\n      \"Content-Type\": \"text/plain; charset=utf-8\",\n    },\n    body: command,\n    signal: AbortSignal.timeout(Math.min(config.timeoutMs, EXE_DEV_API_MAX_TIMEOUT_MS)),\n  });\n  const body = await response.text();\n  if (!response.ok) {\n    throw new ExeDevApiError(\n      `exe.dev API command failed (${response.status}) for: ${logCommand}`,\n      response.status,\n      body,\n    );\n  }\n\n  const trimmed = body.trim();\n  if (!trimmed) return null;\n  try {\n    return JSON.parse(trimmed);\n  } catch {\n    return body;\n  }\n}\n\nfunction parseVmRecord(value: unknown, depth = 0): ExeDevVmRecord | null {\n  if (depth > MAX_VM_RECORD_DEPTH) return null;\n  if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;","sourceCodeStart":372,"sourceCodeEnd":408,"githubUrl":"https://github.com/paperclipai/paperclip/blob/a7e689b3c35347b529cb9f54c9b9a8575a3dcab6/packages/plugins/sandbox-providers/exe-dev/src/plugin.ts#L372-L408","documentation":"HTTP failure surfacing in runLifecycleCommand: the POST to the exe.dev API endpoint returned a non-ok status (status code in message) for the named (possibly redacted) lifecycle command. Response body text was parsed and attached as error detail; wrapped as ExeDevApiError so callers can distinguish exe.dev API failures from local ones.","triggerScenarios":"Thrown at packages/plugins/sandbox-providers/exe-dev/src/plugin.ts:388 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check the exe.dev CLI output and credentials; fix the failing command and retry."],"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"}