export type ChildQuestionMethod = "select" | "confirm" | "input" | "editor"; export interface ChildQuestionEvent { requestId: string; method: ChildQuestionMethod; title: string; message?: string; options?: string[]; placeholder?: string; prefill?: string; /** Nominal for a held question, which has no deadline. */ timeout: number; /** The run holds this question for a person with no deadline. */ hold?: true; } export type ChildQuestionFrame = { type: "extension_ui_response"; id: string; value: string; } | { type: "extension_ui_response"; id: string; confirmed: boolean; } | { type: "extension_ui_response"; id: string; cancelled: true; }; export declare class ChildQuestionRelay { #private; readonly defaultTimeoutMs: number; readonly io: { emit(question: ChildQuestionEvent): void; send(frame: ChildQuestionFrame): void; /** Blocked since a time, with the decision of the oldest question that has one; undefined when unblocked. */ blocked(since: number | undefined, decisionId?: string): void; }; readonly now: () => number; readonly options: { hold?: boolean; }; constructor(defaultTimeoutMs: number, io: { emit(question: ChildQuestionEvent): void; send(frame: ChildQuestionFrame): void; /** Blocked since a time, with the decision of the oldest question that has one; undefined when unblocked. */ blocked(since: number | undefined, decisionId?: string): void; }, now?: () => number, options?: { hold?: boolean; }); get pending(): number; /** Handle one select/confirm/input/editor request (routing it or cancelling it); false when malformed. */ request(event: Record): boolean; /** Apply a parent `ui_decision` steer command naming the decision behind a pending question. */ decide(command: Record): boolean; /** Apply a parent `ui_response` steer command; unknown or stale ids are ignored. */ respond(command: Record): boolean; close(): void; } //# sourceMappingURL=questions.d.ts.map