{"record":{"id":"ab8b952552b692b8","repo":"paperclipai/paperclip","slug":"plugin-installed-but-manifest-is-missing","errorCode":null,"errorMessage":"Plugin installed but manifest is missing","messagePattern":"Plugin installed but manifest is missing","errorType":"http","errorClass":null,"httpStatus":500,"severity":"error","filePath":"server/src/routes/plugins.ts","lineNumber":1213,"sourceCode":"      if (cloudManaged && !(await isWithinBundledPluginRoot(validated.canonicalPath))) {\n        res.status(403).json({\n          error:\n            \"cloud-managed instances may only install plugins from the bundled plugin catalog\",\n        });\n        return;\n      }\n      canonicalLocalPath = validated.canonicalPath;\n    }\n\n    try {\n      const installOptions = canonicalLocalPath !== undefined\n        ? { localPath: canonicalLocalPath }\n        : { packageName: trimmedPackage, version: version?.trim() };\n\n      const discovered = await loader.installPlugin(installOptions);\n\n      if (!discovered.manifest) {\n        res.status(500).json({ error: \"Plugin installed but manifest is missing\" });\n        return;\n      }\n\n      // Transition to ready state\n      const existingPlugin = await registry.getByKey(discovered.manifest.id);\n      if (existingPlugin) {\n        await lifecycle.load(existingPlugin.id);\n        const updated = await registry.getById(existingPlugin.id);\n        await logPluginMutationActivity(req, \"plugin.installed\", existingPlugin.id, {\n          pluginId: existingPlugin.id,\n          pluginKey: existingPlugin.pluginKey,\n          packageName: updated?.packageName ?? existingPlugin.packageName,\n          version: updated?.version ?? existingPlugin.version,\n          source: isLocalPath ? \"local_path\" : \"npm\",\n        });\n        publishGlobalLiveEvent({ type: \"plugin.ui.updated\", payload: { pluginId: existingPlugin.id, action: \"installed\" } });\n        res.json(updated);\n      } else {","sourceCodeStart":1195,"sourceCodeEnd":1231,"githubUrl":"https://github.com/paperclipai/paperclip/blob/a7e689b3c35347b529cb9f54c9b9a8575a3dcab6/server/src/routes/plugins.ts#L1195-L1231","documentation":"500 from POST /plugins/install. Fires when loader.installPlugin reports success but the discovered result has no manifest — installation succeeded on disk yet the manifest is absent, which indicates a loader bug rather than user error.","triggerScenarios":"Thrown at server/src/routes/plugins.ts:1197 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Include the required field(s) in the request path, query, or body as named by the error message, then retry.","Check the API contract in packages/shared validators for the exact required shape of this endpoint."],"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-14T00:17:10.932Z"}