router-for-me/CLIProxyAPI · error

invalid plugin id %q

Error message

invalid plugin id %q

What it means

Error "invalid plugin id %q" thrown in router-for-me/CLIProxyAPI.

Source

Thrown at internal/homeplugins/sync.go:436

		status.InstallStatus = pluginInstallStatusDeleted
	default:
		status.InstallStatus = pluginInstallStatusMissing
	}
	report.Plugins = append(report.Plugins, status)
	finishReport(&report, errDelete)
	return report
}

func deletePluginArtifact(ctx context.Context, root string, id string, pluginRuntime PluginRuntime) (string, bool, error) {
	if ctx == nil {
		ctx = context.Background()
	}
	if errContext := ctx.Err(); errContext != nil {
		return "", false, errContext
	}
	id = strings.TrimSpace(id)
	if !validPluginFileID(id) {
		return "", false, fmt.Errorf("invalid plugin id %q", id)
	}
	paths, errPaths := pluginFilePaths(root, id)
	if errPaths != nil {
		return "", false, errPaths
	}
	if errContext := ctx.Err(); errContext != nil {
		return "", false, errContext
	}
	if len(paths) == 0 {
		return "", false, nil
	}
	if pluginRuntime != nil && pluginRuntime.PluginBusy(id) {
		if errContext := ctx.Err(); errContext != nil {
			return paths[0], false, errContext
		}
		unloaded := false
		if contextual, ok := pluginRuntime.(contextualPluginUnloader); ok {
			unloaded = contextual.UnloadPluginContext(ctx, id)

View on GitHub (pinned to 78f0c4079e)

Solutions

  1. Use a plugin id matching the allowed format (letters, digits, dash/underscore).
  2. Correct the plugin id in the manifest or request.

When it happens

Trigger: Thrown at internal/homeplugins/sync.go:436 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of router-for-me/CLIProxyAPI@78f0c4079e (2026-08-15). Data as JSON: /api/errors/cbfbf6b492b6a6a6. Report an issue: GitHub.