import type { HarnessSession, StepInput } from "#harness/types.js";
import type { JsonObject } from "#shared/json.js";
import type { RunMode } from "#shared/run-mode.js";
/**
 * Resolves the single output schema in effect for this turn, decoupling schema
 * enforcement from {@link RunMode}: downstream the harness reads
 * `session.outputSchema` unconditionally and never re-derives it from mode.
 *
 * A run-scoped (client-supplied) schema on the turn's {@link StepInput} always
 * wins. With no run-scoped schema, a task run adopts the agent's declared
 * return schema — its function-output contract, which only applies when the
 * agent is invoked directly as a task-mode schedule or job. Subagent
 * dispatch carries its declared schema as a run-scoped schema instead.
 * A conversation run with no run-scoped schema enforces nothing. Continuation
 * steps (no new `StepInput`) preserve whatever is already in effect.
 */
export declare function resolveEffectiveOutputSchema(input: {
    readonly agentOutputSchema: JsonObject | undefined;
    readonly input: StepInput | undefined;
    readonly mode: RunMode;
    readonly session: HarnessSession;
}): HarnessSession;
