import type { GameModelAPI } from '../domains/gameModel.js'; import type { Scalars } from '../generated/graphql.js'; import type { EngineDetector } from './engine.js'; /** Options for {@link DirectorKit}. */ export interface DirectorKitOptions { /** The director module name. Defaults to `'director'`. */ moduleName?: string; /** The encounter-definition container type. Defaults to `'EncounterDef'`. */ defTypeName?: string; } /** One wave of an encounter definition. */ export interface KitWaveSpec { units: Array<{ mobId: string; count: number; }>; delayMs?: number; /** Boss wave: hp + phase thresholds (descending hp percentages). */ boss?: { hp: number; phases?: number[]; }; } /** A director run's state. */ export interface KitDirectorRun { runId: string; encounterId: string; players: number; phase: Record; pending: number; wavesCleared: number; wavesTotal: number; boss: { hp: number; maxHp: number; phase: number; thresholds: number[]; } | null; finished: boolean; outcome: string; } /** * Runtime helpers for the director engine (Wave 2): data-driven encounter * direction — wave schedules, spawn budgets, boss phases, party scaling. * The director emits `director_spawn` compute events; the mob layer * simulates and reports kills back. * * Obtained via `client.kit(appId).director`. */ export declare class DirectorKit { private readonly appId; private readonly gameModel; private readonly engines; private readonly moduleName; private readonly defTypeName; constructor(appId: Scalars['BigInt']['input'], gameModel: GameModelAPI, engines: EngineDetector, options?: DirectorKitOptions); /** Is the director deployed + enabled (cached per session)? */ engineAvailable(): Promise; /** STUDIO (admin) — create an encounter definition container. */ defineEncounter(input: { encounterId: string; displayName?: string; waves: KitWaveSpec[]; spawnBudget?: number; }): Promise<{ __typename?: "GmContainer"; containerId: string; appId: string; sessionId: string | null; typeName: string; displayName: string; description: string | null; ownerUserId: string | null; metadataJson: string; }>; /** Start a run (party size scales unit counts server-side). */ startRun(encounterId: string, players?: number): Promise; /** Report kills toward the live wave (trusted callers/engines). */ reportKill(runId: string, count?: number): Promise; /** Report boss hp; phase transitions announce on the compute bus. */ reportBossHp(runId: string, hp: number): Promise; /** Force-clear the live wave (run creator only). */ skipWave(runId: string): Promise; /** One run's state (or engine totals without an id). */ runState(runId?: string): Promise>; private invoke; } //# sourceMappingURL=director.d.ts.map