{"record":{"id":"eb26bb1fa36b4cf3","repo":"paperclipai/paperclip","slug":"bundled-plugin-auto-install-key-key-is-not-in","errorCode":null,"errorMessage":"bundled plugin auto-install key \"${key}\" is not in the bundled catalog (known keys: ${known}); refusing to start","messagePattern":"bundled plugin auto-install key \"(.+?)\" is not in the bundled catalog \\(known keys: (.+?)\\); refusing to start","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"server/src/services/bundled-plugins.ts","lineNumber":170,"sourceCode":" */\nexport function resolveBundledPluginInstalls(\n  keys: readonly string[],\n  opts: {\n    catalogRoot: string;\n    env: Record<string, string | undefined>;\n    enforceCatalogRoot: boolean;\n  },\n): ResolvedBundledPlugin[] {\n  const resolved: ResolvedBundledPlugin[] = [];\n  const seen = new Set<string>();\n  const canonicalRoot = canonicalize(opts.catalogRoot);\n  for (const key of keys) {\n    if (seen.has(key)) continue;\n    seen.add(key);\n    const entry = BUNDLED_PLUGIN_CATALOG.find((candidate) => candidate.key === key);\n    if (!entry) {\n      const known = BUNDLED_PLUGIN_CATALOG.map((candidate) => candidate.key).join(\", \");\n      throw new Error(\n        `bundled plugin auto-install key \"${key}\" is not in the bundled catalog (known keys: ${known}); refusing to start`,\n      );\n    }\n    const override = entry.pathOverrideEnvVar\n      ? opts.env[entry.pathOverrideEnvVar]?.trim()\n      : undefined;\n    const localPath = override\n      ? path.resolve(override)\n      : path.resolve(opts.catalogRoot, entry.relativePath);\n    if (opts.enforceCatalogRoot && !isInsideRoot(canonicalize(localPath), canonicalRoot)) {\n      throw new Error(\n        `bundled plugin \"${key}\" resolves to \"${localPath}\", outside the bundled catalog root \"${opts.catalogRoot}\"; refusing to start`,\n      );\n    }\n    resolved.push({ key: entry.key, pluginKey: entry.pluginKey, localPath });\n  }\n  return resolved;\n}","sourceCodeStart":152,"sourceCodeEnd":188,"githubUrl":"https://github.com/paperclipai/paperclip/blob/01ad8584922b5d85292b1723cae71fa0d9b07a19/server/src/services/bundled-plugins.ts#L152-L188","documentation":"Catalog guard in resolveBundledPluginInstalls: an auto-install key (from bundled plugin config) has no matching entry in BUNDLED_PLUGIN_CATALOG. The message lists all known keys; startup refuses rather than silently skipping a requested plugin.","triggerScenarios":"Thrown at server/src/services/bundled-plugins.ts:170 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Use one of the known bundled catalog keys listed in the message for auto-install.","Remove the unknown key from the auto-install configuration."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"01ad8584922b5d85292b1723cae71fa0d9b07a19","analyzedAt":"2026-08-18T22:49:45.177Z","contentChangedAt":"2026-08-18T22:49:45.177Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}