/**
 * Defines an action to perform.
 */
export type Action = SimpleAction | CompositeAction;
/**
 * Determines which action to perform. It is up to the calling application how
 * it transforms an action name into actual executable code.
 */
export type ActionName = string;
/**
 * Defines a single action to perform.
 */
export type SimpleAction = ActionName | BoundAction;
/**
 * A composite action that is made up of a sequence of one or more actions. The
 * intent is that the application should execute these in the given order. If
 * any of the actions produces an output, that should be used as the input
 * arguments for all subsequent actions.
 */
export type CompositeAction = SimpleAction[];
/**
 * An action that is bound to arguments.
 */
export interface BoundAction {
    /**
     * Determines which action to perform. It is up to the calling application
     * how it transforms an action name into actual executable code.
     */
    name: string;
    /**
     * Arguments for the action. Can either be a primitive value (string,
     * number, boolean), or a plain JSON object containing named arguments.
     */
    arguments: unknown;
}
