{"record":{"id":"1f39fca8be90d1a1","repo":"musistudio/claude-code-router","slug":"plugin-id-is-required","errorCode":null,"errorMessage":"Plugin id is required.","messagePattern":"Plugin id is required\\.","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/electron/src/main/deep-link.ts","lineNumber":342,"sourceCode":"  if (action && action !== \"open\") {\n    throw new Error(`Unsupported plugin link action: ${action}`);\n  }\n\n  const appId = boundedPluginId(url.searchParams.get(\"app\") || url.searchParams.get(\"appId\"), true);\n  return {\n    ...(appId ? { appId } : {}),\n    pluginId,\n    rawUrl\n  };\n}\n\nfunction boundedPluginId(value: string | null | undefined, optional = false): string {\n  const normalized = value?.trim();\n  if (!normalized) {\n    if (optional) {\n      return \"\";\n    }\n    throw new Error(\"Plugin id is required.\");\n  }\n  if (normalized.length > 120 || !/^[a-z0-9][a-z0-9._-]*$/i.test(normalized)) {\n    throw new Error(`Invalid plugin id: ${normalized}`);\n  }\n  return normalized;\n}\n\nfunction resolvePluginApp(config: Pick<AppConfig, \"plugins\">, request: PluginDeepLinkRequest): GatewayPluginAppConfig | undefined {\n  const plugin = config.plugins.find((candidate) => candidate.enabled !== false && candidate.id === request.pluginId);\n  if (!plugin) {\n    return resolveKnownBuiltInPluginApp(request);\n  }\n\n  const apps = configuredPluginApps(plugin.id, plugin.apps);\n  if (!apps.length) {\n    return undefined;\n  }\n","sourceCodeStart":324,"sourceCodeEnd":360,"githubUrl":"https://github.com/musistudio/claude-code-router/blob/99f24806c6a2c660b16e53e95211c517448a6c90/packages/electron/src/main/deep-link.ts#L324-L360","documentation":"Error \"Plugin id is required.\" thrown in musistudio/claude-code-router.","triggerScenarios":"Thrown at packages/electron/src/main/deep-link.ts:342 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"99f24806c6a2c660b16e53e95211c517448a6c90","analyzedAt":"2026-08-27T04:11:01.184Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}