{"record":{"id":"c867a40063a21978","repo":"router-for-me/CLIProxyAPI","slug":"home-plugins-manifest-plugin-id-is-empty","errorCode":null,"errorMessage":"home plugins: manifest plugin id is empty","messagePattern":"home plugins: manifest plugin id is empty","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/homeplugins/sync.go","lineNumber":353,"sourceCode":"\t\tfiles, errFiles := pluginFileInfos(root, id)\n\t\tif errFiles != nil {\n\t\t\treturn nil, fmt.Errorf(\"home plugins: discover installed plugin %s: %w\", id, errFiles)\n\t\t}\n\t\tif len(files) == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tversion := strings.TrimSpace(files[0].Version)\n\t\tif version != \"\" {\n\t\t\tversions[strings.TrimSpace(id)] = version\n\t\t}\n\t}\n\treturn versions, nil\n}\n\nfunc installManifest(ctx context.Context, client sdkpluginstore.Client, manifest sdkpluginstore.Manifest, root string, platform Platform, pluginRuntime PluginRuntime) (sdkpluginstore.InstallResult, error) {\n\tid := strings.TrimSpace(manifest.ID)\n\tif id == \"\" {\n\t\treturn sdkpluginstore.InstallResult{}, fmt.Errorf(\"home plugins: manifest plugin id is empty\")\n\t}\n\tpluginIsBusy := func() bool {\n\t\treturn pluginRuntime != nil && pluginRuntime.PluginBusy(id)\n\t}\n\tresult, errInstall := client.InstallManifest(ctx, manifest, sdkpluginstore.InstallOptions{\n\t\tPluginsDir:   root,\n\t\tGOOS:         platform.GOOS,\n\t\tGOARCH:       platform.GOARCH,\n\t\tPluginLoaded: pluginIsBusy,\n\t})\n\tif errInstall != nil {\n\t\treturn sdkpluginstore.InstallResult{}, fmt.Errorf(\"home plugins: install %s: %w\", id, errInstall)\n\t}\n\treturn result, nil\n}\n\nfunc DeleteWithReport(ctx context.Context, cfg *config.Config, pluginRuntime PluginRuntime, taskID uint, pluginID string) SyncReport {\n\tif ctx == nil {","sourceCodeStart":335,"sourceCodeEnd":371,"githubUrl":"https://github.com/router-for-me/CLIProxyAPI/blob/78f0c4079e3e6273d65d03b5549cffc898703264/internal/homeplugins/sync.go#L335-L371","documentation":"Error \"home plugins: manifest plugin id is empty\" thrown in router-for-me/CLIProxyAPI.","triggerScenarios":"Thrown at internal/homeplugins/sync.go:353 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Fix the store manifest so every plugin entry has a non-empty id.","Re-fetch the manifest from the plugin store if it is corrupted."],"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"}