export type GOAPValue = string | number | boolean | null;
export type GOAPStateShape = Record<string, GOAPValue>;
export interface GOAPActionOptions {
    readonly name: string;
    readonly cost?: number;
    readonly preconditions?: GOAPStateShape;
    readonly effects: GOAPStateShape;
    readonly enabled?: boolean;
}
export interface GOAPPlannerOptions {
    readonly maxIterations?: number;
    readonly maxPlanLength?: number;
}
export interface GOAPPlan {
    readonly valid: boolean;
    readonly actions: readonly string[];
    readonly cost: number;
    readonly nodesExplored: number;
    readonly finalState: GOAPStateShape;
}
export declare class WorldState {
    private readonly values;
    constructor(initial?: GOAPStateShape);
    static from(initial: GOAPStateShape): WorldState;
    set(key: string, value: GOAPValue): void;
    get(key: string): GOAPValue | undefined;
    satisfies(goal: WorldState): boolean;
    matches(shape: GOAPStateShape): boolean;
    apply(shape: GOAPStateShape): WorldState;
    clone(): WorldState;
    entries(): readonly (readonly [string, GOAPValue])[];
    toObject(): GOAPStateShape;
    key(): string;
}
export declare class GOAPAction {
    readonly name: string;
    readonly cost: number;
    readonly preconditions: GOAPStateShape;
    readonly effects: GOAPStateShape;
    enabled: boolean;
    constructor(options: GOAPActionOptions);
    canRun(state: WorldState): boolean;
    apply(state: WorldState): WorldState;
}
export declare class GOAPPlanner {
    private readonly maxIterations;
    private readonly maxPlanLength;
    constructor(options?: GOAPPlannerOptions);
    plan(current: WorldState, goal: WorldState, actions: readonly GOAPAction[]): GOAPPlan;
}
//# sourceMappingURL=GOAP.d.ts.map