{"record":{"id":"cbfbf6b492b6a6a6","repo":"router-for-me/CLIProxyAPI","slug":"invalid-plugin-id-q","errorCode":null,"errorMessage":"invalid plugin id %q","messagePattern":"invalid plugin id %q","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/homeplugins/sync.go","lineNumber":436,"sourceCode":"\t\tstatus.InstallStatus = pluginInstallStatusDeleted\n\tdefault:\n\t\tstatus.InstallStatus = pluginInstallStatusMissing\n\t}\n\treport.Plugins = append(report.Plugins, status)\n\tfinishReport(&report, errDelete)\n\treturn report\n}\n\nfunc deletePluginArtifact(ctx context.Context, root string, id string, pluginRuntime PluginRuntime) (string, bool, error) {\n\tif ctx == nil {\n\t\tctx = context.Background()\n\t}\n\tif errContext := ctx.Err(); errContext != nil {\n\t\treturn \"\", false, errContext\n\t}\n\tid = strings.TrimSpace(id)\n\tif !validPluginFileID(id) {\n\t\treturn \"\", false, fmt.Errorf(\"invalid plugin id %q\", id)\n\t}\n\tpaths, errPaths := pluginFilePaths(root, id)\n\tif errPaths != nil {\n\t\treturn \"\", false, errPaths\n\t}\n\tif errContext := ctx.Err(); errContext != nil {\n\t\treturn \"\", false, errContext\n\t}\n\tif len(paths) == 0 {\n\t\treturn \"\", false, nil\n\t}\n\tif pluginRuntime != nil && pluginRuntime.PluginBusy(id) {\n\t\tif errContext := ctx.Err(); errContext != nil {\n\t\t\treturn paths[0], false, errContext\n\t\t}\n\t\tunloaded := false\n\t\tif contextual, ok := pluginRuntime.(contextualPluginUnloader); ok {\n\t\t\tunloaded = contextual.UnloadPluginContext(ctx, id)","sourceCodeStart":418,"sourceCodeEnd":454,"githubUrl":"https://github.com/router-for-me/CLIProxyAPI/blob/78f0c4079e3e6273d65d03b5549cffc898703264/internal/homeplugins/sync.go#L418-L454","documentation":"Error \"invalid plugin id %q\" thrown in router-for-me/CLIProxyAPI.","triggerScenarios":"Thrown at internal/homeplugins/sync.go:436 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Use a plugin id matching the allowed format (letters, digits, dash/underscore).","Correct the plugin id in the manifest or request."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"78f0c4079e3e6273d65d03b5549cffc898703264","analyzedAt":"2026-08-15T12:26:37.444Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}