Devolutions/UniGetUI · warning · InvalidOperationException

Unsupported queue action "{action}".

Error message

Unsupported queue action "{action}".

What it means

Thrown by ReorderOperation when the action parameter does not normalize to one of 'run-now', 'run-next', or 'run-last'. NormalizeQueueAction trims and lower-cases the input before matching; any value outside the three accepted strings triggers this error (it also throws from NormalizeQueueAction itself with the same message, so the throw site depends on code path).

Source

Thrown at src/UniGetUI.Interface.IpcApi/IpcOperationApi.cs:255

        {
            throw new InvalidOperationException(
                "Only queued operations can be reordered."
            );
        }

        switch (NormalizeQueueAction(action))
        {
            case "run-now":
                tracked.Operation.SkipQueue();
                break;
            case "run-next":
                tracked.Operation.RunNext();
                break;
            case "run-last":
                tracked.Operation.BackOfTheQueue();
                break;
            default:
                throw new InvalidOperationException($"Unsupported queue action \"{action}\".");
        }

        return IpcCommandResult.Success("reorder-operation");
    }

    public static IpcCommandResult ForgetOperation(string operationId)
    {
        var tracked = GetTrackedOperation(operationId);
        if (IsActive(tracked.Operation.Status))
        {
            throw new InvalidOperationException(
                "Running or queued operations cannot be forgotten."
            );
        }

        ForgetTracking(operationId);
        return IpcCommandResult.Success("forget-operation");
    }

View on GitHub (pinned to 9b1d7d0eab)

Solutions

  1. Use one of: 'run-now', 'run-next', 'run-last' (case-insensitive).
  2. Read AvailableQueueActions from GetOperation to see exactly which actions are valid.
  3. Add client-side validation against the AvailableQueueActions list before calling.

Example fix

// before
IpcOperationApi.ReorderOperation(opId, "priority-high");
// after
IpcOperationApi.ReorderOperation(opId, "run-now");
Defensive patterns

Strategy: validation

Validate before calling

static readonly HashSet<string> ValidQueueActions = new(StringComparer.OrdinalIgnoreCase)
{
    "run-now", "run-next", "run-last"
};
if (!ValidQueueActions.Contains(action))
    throw new ArgumentException($"Invalid queue action: {action}. Valid: run-now, run-next, run-last");

Prevention

When it happens

Trigger: Calling ReorderOperation with an action string that is not 'run-now', 'run-next', or 'run-last' (case-insensitive after trimming). Whitespace-only or null action throws ArgumentException from NormalizeQueueAction instead.

Common situations: Client sends a free-text action like 'cancel' or 'priority' to the reorder endpoint. Typo in the action string. Using a queue action from a different API version that was renamed. The AvailableQueueActions list on IpcOperationInfo provides the authoritative valid values.

Related errors


AI-assisted analysis of Devolutions/UniGetUI@9b1d7d0eab (2026-08-13). Data as JSON: /api/errors/fb1df07009abf0f1. Report an issue: GitHub.