import { EventRegistrationManager } from "../registration/EventRegistrationManager";
import { IngesterRegistrationManager } from "../registration/IngesterRegistrationManager";
import { CommandRegistrationManager } from "./CommandRegistrationManager";
import { ExtensionPack } from "./ExtensionPack";
import { FunctionalUnit } from "./FunctionalUnit";
import { GoalDrivenMachine } from "./GoalDrivenMachine";
import { ListenerRegistrationManager } from "./ListenerRegistrationManager";
import { SoftwareDeliveryMachineConfiguration } from "./SoftwareDeliveryMachineOptions";
/**
 * Class instantiated to create a **Software Delivery MachineConfiguration**.
 * Combines commands and delivery event handling using _goals_.
 *
 * Goals and goal "implementations" can be defined by users.
 *
 * The most important element of a software delivery machine is setting
 * zero or more _push rules_.
 * This is normally done using an internal DSL
 */
export interface SoftwareDeliveryMachine<O extends SoftwareDeliveryMachineConfiguration = SoftwareDeliveryMachineConfiguration> extends GoalDrivenMachine<O>, ListenerRegistrationManager, CommandRegistrationManager, EventRegistrationManager, IngesterRegistrationManager, FunctionalUnit {
    /**
     * Add capabilities from these extension packs.
     * This is the primary SDM extension
     * mechanism. Extension packs are typically brought in as Node modules,
     * and can contribute goals as well configure SDM behavior.
     * @param {ExtensionPack} packs
     * @return {this}
     */
    addExtensionPacks(...packs: ExtensionPack[]): this;
    readonly extensionPacks: ReadonlyArray<ExtensionPack>;
}
//# sourceMappingURL=SoftwareDeliveryMachine.d.ts.map