export interface BotmuxPm2App { name: string; online: boolean; /** Raw bots.json slot assigned by the generated PM2 ecosystem config. */ botIndex?: string; /** Exact Feishu App identity assigned by the generated PM2 ecosystem config. */ larkAppId?: string; /** App identity carried only by a gated managed-activation daemon. */ activationAppId?: string; /** Durable activation receipt carried only by the exact gated PM2 process. */ activationJobId?: string; } export type BotmuxPm2Inspection = { ok: true; apps: BotmuxPm2App[]; } | { ok: false; message: string; }; export type ExactPm2StopResult = { ok: true; state: 'stopped' | 'already-stopped'; processName: string; } | { ok: false; reason: 'pm2_error'; message: string; }; export declare function isExactPm2BotActivationReceipt(app: BotmuxPm2App, processName: string, index: number, appId: string, activationJobId?: string): boolean; export declare function managedActivationPm2Disposition(apps: BotmuxPm2App[], processName: string, index: number, appId: string, activationJobId: string): 'acknowledged' | 'replace' | 'identity_mismatch'; /** * Parse the real `pm2 jlist` transport shape. PM2 may prefix stdout with log * lines, but a syntactically valid non-array JSON document is never process * absence. */ export declare function parsePm2JlistOutputStrict(output: string): any[]; /** Keep PM2 transport/parse failures distinct from confirmed process absence. */ export declare function inspectBotmuxPm2Apps(load: () => unknown[]): BotmuxPm2Inspection; /** Delete one exact row, then require a successful readback proving absence. */ export declare function stopExactPm2Process(processName: string, list: () => BotmuxPm2Inspection, remove: (processName: string) => void): ExactPm2StopResult; //# sourceMappingURL=bot-live-control.d.ts.map