import type { WorkspaceTarget } from './dist-lib/types/workspace/contracts.js'; import type { SourceFilePlan } from './dist-lib/types/host/sourceFilePlan.js'; import type { WorkspaceFileSourceRequest } from './dist-lib/types/workspace/source/flowContracts.js'; import type { WorkspaceDraftSourceRequest, createWorkspaceDraftPreviewService } from './draft-preview.js'; import type { WorkspaceApplicationSurface } from './dist-lib/types/workspace/contracts.js'; export interface SourceValidationInput { target: WorkspaceTarget; plan: SourceFilePlan; request?: WorkspaceDraftSourceRequest } export interface SourceValidationIdentity { sourceRevision: string; screenId: string; planHash: string; requestHash: string } export interface CapturedSourceValidationInput extends SourceValidationInput { request: WorkspaceDraftSourceRequest; identity: SourceValidationIdentity } export interface SourceValidationResult { status: 'passed' | 'failed' | 'blocked'; [key: string]: unknown } export interface SourceValidationReceipt { version: 1; id: string; identity: SourceValidationIdentity; startedAt?: number; createdAt: number; expiresAt: number; build: SourceValidationResult; qa: SourceValidationResult; } export interface SourceProposalValidation { validate(input: SourceValidationInput, signal?: AbortSignal): Promise; verify(receipt: SourceValidationReceipt, input: SourceValidationInput): SourceValidationReceipt; clear(): void; } /** Configure the same gate on every proposal service used by an integration. Never accept browser success flags. */ export interface SourceProposalValidationOptions { build(input: Readonly, signal?: AbortSignal): Promise; qa(input: Readonly, signal?: AbortSignal): Promise; assertTarget(target: WorkspaceTarget, signal?: AbortSignal): void | Promise; now?: () => number; ttlMs?: number; maxReceipts?: number; } export declare function createSourceProposalValidation(options: SourceProposalValidationOptions): SourceProposalValidation; export declare function createSourcePlanPreviewRequest(input: SourceValidationInput): WorkspaceFileSourceRequest; export declare function createDraftSourceProposalValidation(options: Omit & { /** A fresh service per validation; the gate disposes it on success, failure or cancellation. */ createPreview(): ReturnType | Promise>; /** Resolve the route from trusted host declarations without reentering a locked proposal service. */ resolvePreview(input: Readonly, signal?: AbortSignal): { request: WorkspaceDraftSourceRequest; documentRevision: string; route: string } | Promise<{ request: WorkspaceDraftSourceRequest; documentRevision: string; route: string }>; runQa(input: Readonly, signal?: AbortSignal): Promise; }): SourceProposalValidation;