{"record":{"id":"33bad7bbb5e897f0","repo":"router-for-me/CLIProxyAPI","slug":"home-plugins-discover-installed-plugin-s-w","errorCode":null,"errorMessage":"home plugins: discover installed plugin %s: %w","messagePattern":"home plugins: discover installed plugin (.+?): %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/homeplugins/sync.go","lineNumber":337,"sourceCode":"func installResolvedManifest(ctx context.Context, cfg *config.Config, manifest sdkpluginstore.Manifest, auth []sdkpluginstore.ResolvedAuthConfig, expiresAt time.Time, root string, platform Platform, pluginRuntime PluginRuntime) (sdkpluginstore.InstallResult, error) {\n\tclient := newResolvedPluginStoreClient(cfg, auth, expiresAt)\n\tdefer client.ClearAuth()\n\treturn installManifest(ctx, client, manifest, root, platform, pluginRuntime)\n}\n\nfunc InstalledVersions(cfg *config.Config) (map[string]string, error) {\n\tif cfg == nil {\n\t\treturn map[string]string{}, nil\n\t}\n\troot, errResolvePluginsDir := config.ResolvePluginsDir(cfg.Plugins.Dir)\n\tif errResolvePluginsDir != nil {\n\t\treturn nil, fmt.Errorf(\"home plugins: %w\", errResolvePluginsDir)\n\t}\n\tversions := make(map[string]string, len(cfg.Plugins.Configs))\n\tfor id := range cfg.Plugins.Configs {\n\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 {","sourceCodeStart":319,"sourceCodeEnd":355,"githubUrl":"https://github.com/router-for-me/CLIProxyAPI/blob/78f0c4079e3e6273d65d03b5549cffc898703264/internal/homeplugins/sync.go#L319-L355","documentation":"Error \"home plugins: discover installed plugin %s: %w\" thrown in router-for-me/CLIProxyAPI.","triggerScenarios":"Thrown at internal/homeplugins/sync.go:337 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check the wrapped error for why the installed plugin could not be discovered.","Verify the plugin files exist in the plugins directory and are readable."],"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-15T17:31:12.345Z"}