/** Trusted admission boundary; protocol payloads cannot select identity, policy or grants. */
export interface DurableProtocolHost {
supervisor: DurableTaskSupervisor;
/** Persist an owned task before returning. Mint/validate immutable refs and deduplicate message IDs here. */
admit(identity: DurableReader, input: DurableProtocolAdmission): Promise<DurableTaskKey>;
authorize(identity: DurableReader, task: Readonly<DurableTaskRecord>, operation: "read" | "cancel" | "input" | "wake"): Promise<boolean>;
/** Re-deliver a persisted task to its registered driver. Failure leaves it available for host recovery. */
wake(key: DurableTaskKey): Promise<unknown>;
/** Explicit trusted human-consent channel. Persist via DurableActionLedger.decide; never trust tool text. */
respond?(identity: DurableReader, task: Readonly<DurableTaskRecord>, response: DurableProtocolApprovalResponse): Promise<void>;
/** Return only authorized public output. Resolve artifacts through DurableRunRecords; no automatic URLs. */
output?(identity: DurableReader, task: Readonly<DurableTaskRecord>): Promise<DurableProtocolOutput>;
}