{"record":{"id":"187e80306f661c53","repo":"paperclipai/paperclip","slug":"cannot-reinstall-built-in-adapter","errorCode":null,"errorMessage":"Cannot reinstall built-in adapter.","messagePattern":"Cannot reinstall built-in adapter\\.","errorType":"http","errorClass":null,"httpStatus":400,"severity":"error","filePath":"server/src/routes/adapters.ts","lineNumber":654,"sourceCode":"      const message = err instanceof Error ? err.message : String(err);\n      logger.error({ err, type }, \"Failed to reload external adapter\");\n      res.status(500).json({ error: `Failed to reload adapter: ${message}` });\n    }\n  });\n\n  // ── POST /api/adapters/:type/reinstall ──────────────────────────────────\n  // Reinstall an npm-sourced external adapter (pulls latest from registry).\n  // Local-path adapters cannot be reinstalled — use Reload instead.\n  //\n  // This is a convenience shortcut for remove + install with the same\n  // package name, but without the risk of losing the store record.\n  router.post(\"/adapters/:type/reinstall\", async (req, res) => {\n    assertInstanceAdmin(req);\n    assertAdapterCodeInstallAllowed();\n    assertAdapterManagementVisible();\n\n    const type = req.params.type;\n\n    if (BUILTIN_ADAPTER_TYPES.has(type) && !getAdapterPluginByType(type)) {\n      res.status(400).json({ error: \"Cannot reinstall built-in adapter.\" });\n      return;\n    }\n\n    const record = getAdapterPluginByType(type);\n    if (!record) {\n      res.status(404).json({ error: `Adapter \"${type}\" is not an externally installed adapter.` });\n      return;\n    }\n\n    if (record.localPath) {\n      res.status(400).json({ error: \"Local-path adapters cannot be reinstalled. Use Reload instead.\" });\n      return;\n    }\n\n    try {\n      const pluginsDir = getAdapterPluginsDir();","sourceCodeStart":636,"sourceCodeEnd":672,"githubUrl":"https://github.com/paperclipai/paperclip/blob/5716fe907e596ce73501408fc6efdb19fb61edf2/server/src/routes/adapters.ts#L636-L672","documentation":"Type guard on POST /api/adapters/:type/reinstall: the target is a builtin adapter type with no external override, and builtins cannot be reinstalled from npm, so the route returns 400 before running npm install.","triggerScenarios":"Thrown at server/src/routes/adapters.ts:596 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Built-in adapters cannot be reinstalled; update the app version to update builtin adapters."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"5716fe907e596ce73501408fc6efdb19fb61edf2","analyzedAt":"2026-08-18T22:49:45.177Z","contentChangedAt":"2026-08-18T22:49:45.177Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}