{"record":{"id":"f78faffa0ce61797","repo":"google-gemini/gemini-cli","slug":"updated-extension-not-found-after-installation-go","errorCode":null,"errorMessage":"Updated extension not found after installation, got error:\\n${e}","messagePattern":"Updated extension not found after installation, got error:\\\\n(.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/cli/src/config/extensions/update.ts","lineNumber":118,"sourceCode":"  const originalVersion = extension.version;\n\n  const tempDir = await ExtensionStorage.createTmpDir();\n  try {\n    const previousExtensionConfig = await extensionManager.loadExtensionConfig(\n      extension.path,\n    );\n    let updatedExtension: GeminiCLIExtension;\n    try {\n      updatedExtension = await extensionManager.installOrUpdateExtension(\n        installMetadata,\n        previousExtensionConfig,\n      );\n    } catch (e) {\n      dispatchExtensionStateUpdate({\n        type: 'SET_STATE',\n        payload: { name: extension.name, state: ExtensionUpdateState.ERROR },\n      });\n      throw new Error(\n        `Updated extension not found after installation, got error:\\n${e}`,\n      );\n    }\n    const updatedVersion = updatedExtension.version;\n    dispatchExtensionStateUpdate({\n      type: 'SET_STATE',\n      payload: {\n        name: extension.name,\n        state: enableExtensionReloading\n          ? ExtensionUpdateState.UPDATED\n          : ExtensionUpdateState.UPDATED_NEEDS_RESTART,\n      },\n    });\n    return {\n      name: extension.name,\n      originalVersion,\n      updatedVersion,\n    };","sourceCodeStart":100,"sourceCodeEnd":136,"githubUrl":"https://github.com/google-gemini/gemini-cli/blob/5024443c7217464a66e98f80d73172a26440bd8f/packages/cli/src/config/extensions/update.ts#L100-L136","documentation":"Thrown when extensionManager.installOrUpdateExtension rejects during an update. The updater catches the install error, sets the extension state to ERROR, and re-throws with the original error interpolated into the message.","triggerScenarios":"installOrUpdateExtension fails: clone/release download error, disk full, destination not writable, version resolution finds nothing newer, or a write conflict.","commonSituations":"Network blip during re-download; out of disk space; permissions changed on the extensions directory; concurrent update attempts racing on the same extension.","solutions":["Read the interpolated error (\\n${e}) to find the underlying install failure and fix it.","Free space / fix permissions on the extensions directory and retry.","Serialize updates per-extension to avoid concurrent-install races."],"exampleFix":"// before\ntry { updatedExtension = await installOrUpdateExtension(meta, prev); }\ncatch (e) { throw new Error(`Updated extension not found...\\n${e}`); }\n// after\ntry { updatedExtension = await installOrUpdateExtension(meta, prev); }\ncatch (e) {\n  logger.error('install/update failed for %s:', extension.name, e);\n  throw new Error(`Updated extension not found after installation: ${getErrorMessage(e)}`, { cause: e });\n}","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { await checkForExtensionUpdate(ext, mgr); } catch (e) { const msg = String(e); if (/not found after installation/.test(msg)) { logInstallFailure(ext.name, e); } throw e; }","preventionTips":["Free disk space and verify permissions before batch updates.","Serialize updates per extension to avoid install races."],"tags":["extensions","updates","installation","error-wrapping"],"backgroundTag":null,"analyzedSha":"5024443c7217464a66e98f80d73172a26440bd8f","analyzedAt":"2026-08-12T06:01:53.711Z","schemaVersion":2},"datasetVersion":"2026-08-12T13:17:24.610Z"}