import { type MutationLock } from "../recovery/service.js"; import { qualificationResourceReservations } from "../approval/human.js"; import { createQualificationWorkspaceLocked, observeQualificationWorkspace, preflightQualificationResources } from "./qualification.js"; import type { CloseResourceResult } from "./qualification.js"; /** Authority-side context projected from the approved qualification scope. */ export interface AuthorityContext { readonly commonDir: string; readonly repository: string; readonly repositoryId: string; readonly hostId: string; readonly controlEpochDigest: string; readonly credentialBindingHash: string; readonly endpointHash: string; readonly configHash: string; readonly artifactDigest: string; readonly runnerHash: string; readonly observedAt: string; } /** Workspace-side context projected from the approved qualification scope. */ export interface WorkspaceContext { readonly approvalRef: string; readonly resourceIds: ReadonlyArray; readonly observedHeads: Readonly>; readonly reservedAt: string | undefined; } /** Read-only snapshot of the runtime's authority + workspace + current reservations. */ export interface RuntimeSnapshot { readonly authority: AuthorityContext; readonly workspace: WorkspaceContext; readonly reservations: ReadonlyArray[number]>; readonly observedAt: string; } /** Public runtime handle. Opaque + process-local; cannot be JSON-serialized or reconstructed. */ export interface QualificationWorkspaceRuntime { readonly authority: AuthorityContext; readonly workspace: WorkspaceContext; snapshot(): RuntimeSnapshot; preflight(input: unknown): ReturnType; reserve(lock: MutationLock): void; allocate(lock: MutationLock, resourceId: string): ReturnType; observe(resourceId: string): ReturnType; close(lock: MutationLock, resourceId: string): CloseResourceResult; dispose(): void; } /** * Open a scoped workspace runtime for one approved `qualification-run` scope. The runtime * is opaque + process-local; two runtimes for the same approval observe the same * authority + workspace but acquire their own assertion tokens. */ export declare function createQualificationWorkspaceRuntime(projectRoot: string, approvalRef: string, held?: MutationLock): QualificationWorkspaceRuntime; //# sourceMappingURL=qualification_runtime.d.ts.map