{"record":{"id":"f702c600e8557a6e","repo":"router-for-me/CLIProxyAPI","slug":"unsupported-install-type-q","errorCode":null,"errorMessage":"unsupported install type %q","messagePattern":"unsupported install type %q","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/pluginstore/install.go","lineNumber":83,"sourceCode":"\treturn c.installRelease(ctx, plugin, release, latestVersion, options)\n}\n\nfunc (c Client) InstallManifest(ctx context.Context, manifest Manifest, options InstallOptions) (InstallResult, error) {\n\tif errValidate := manifest.Validate(); errValidate != nil {\n\t\treturn InstallResult{}, errValidate\n\t}\n\toptions = normalizeInstallOptions(options)\n\tswitch manifest.InstallType() {\n\tcase InstallTypeDirect:\n\t\tplugin, errPlugin := c.directPluginFromManifest(ctx, manifest)\n\t\tif errPlugin != nil {\n\t\t\treturn InstallResult{}, errPlugin\n\t\t}\n\t\treturn c.InstallDirect(ctx, plugin, plugin.Install, options)\n\tcase InstallTypeGitHubRelease:\n\t\treturn c.InstallVersion(ctx, manifest.Plugin(), manifest.ReleaseTag, manifest.Version, options)\n\tdefault:\n\t\treturn InstallResult{}, fmt.Errorf(\"unsupported install type %q\", manifest.Install.Type)\n\t}\n}\n\n// InstallVersion installs a plugin artifact from a fixed release tag/version.\nfunc (c Client) InstallVersion(ctx context.Context, plugin Plugin, releaseTag string, version string, options InstallOptions) (InstallResult, error) {\n\tif errValidate := ValidatePlugin(plugin); errValidate != nil {\n\t\treturn InstallResult{}, errValidate\n\t}\n\toptions = normalizeInstallOptions(options)\n\tversion = normalizeVersion(version)\n\tif !validPluginVersion(version) {\n\t\treturn InstallResult{}, fmt.Errorf(\"invalid plugin version %q\", version)\n\t}\n\treleaseTag = strings.TrimSpace(releaseTag)\n\tif releaseTag == \"\" {\n\t\treleaseTag = version\n\t}\n\trelease, errRelease := c.FetchReleaseByTag(ctx, plugin, releaseTag)","sourceCodeStart":65,"sourceCodeEnd":101,"githubUrl":"https://github.com/router-for-me/CLIProxyAPI/blob/78f0c4079e3e6273d65d03b5549cffc898703264/internal/pluginstore/install.go#L65-L101","documentation":"Client.InstallFromManifest dispatched on manifest.InstallType() and hit the default branch — the install.type string is neither 'direct' nor the GitHub-release type. This indicates a manifest with a missing, empty, or newer/unknown install type that this client build cannot handle.","triggerScenarios":"InstallFromManifest with a manifest whose install.type is empty, misspelled ('Direct', 'github'), or a type introduced after this client version.","commonSituations":"Manifest authored by hand without install.type; index schema evolved and added a new install type; client binary older than the index.","solutions":["Set install.type to a supported value ('direct' or the GitHub release type) in the manifest","Upgrade the client to a version that knows the new install type","If installing from a GitHub release is acceptable, convert the manifest to that type"],"exampleFix":"// before\n{\"install\":{\"type\":\"source\"}}\n\n// after\n{\"install\":{\"type\":\"github-release\"}}","handlingStrategy":"validation","validationCode":"switch m.InstallType() {\ncase pluginstore.InstallTypeDirect, pluginstore.InstallTypeGitHubRelease:\ndefault:\n    return fmt.Errorf(\"unsupported install type %q\", m.Install.Type)\n}","typeGuard":"func supportedInstallType(m pluginstore.Manifest) bool {\n    switch m.InstallType() {\n    case pluginstore.InstallTypeDirect, pluginstore.InstallTypeGitHubRelease:\n        return true\n    }\n    return false\n}","tryCatchPattern":"if err != nil && strings.Contains(err.Error(), \"unsupported install type\") {\n    // check for client upgrade; otherwise normalize the manifest's install.type\n}","preventionTips":["Validate install.type against known values before calling InstallFromManifest","Upgrade clients before the index adopts new install types","Manifest templates should default install.type explicitly"],"tags":["manifest","install-type","version-skew","go"],"backgroundTag":null,"analyzedSha":"78f0c4079e3e6273d65d03b5549cffc898703264","analyzedAt":"2026-08-15T12:26:37.444Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}