/** S3 key for a workflow's persistent workspace snapshot. Scoped PER WORKFLOW (not per run), so the * snapshot carries across every run of the workflow. Derived server-side from the run token's * org + workflow, so a runner can only ever reach its own workflow's workspace. */ export declare function workspaceS3Key(orgId: string, workflowId: string): string; /** Tag key/value the lifecycle rule filters on. */ export declare const RUN_ARTIFACT_RETENTION_TAG: { key: string; value: string; }; /** The same tag as the URL-encoded query string S3's `Tagging` param / `x-amz-tagging` header want. */ export declare const RUN_ARTIFACT_RETENTION_TAGGING: string; /** S3 key for a run's artifact. The prefix is the per-run isolation boundary the broker enforces: * `orgs/{org}/runs/{run}/...` (ArtifactService.register re-checks it). */ export declare function artifactS3Key(orgId: string, runId: string, token: string, name: string, contentType: string): string; /** Pick a file extension: prefer the name's own, else map the content type, else none. */ export declare function extFor(name: string, contentType: string): string; /** * Map an agent-supplied content type to one safe to serve inline from a Boardwalk origin. Active * types are forced to text/plain so the browser renders them as inert text instead of executing * embedded script. The base type (before any `;` params) is what's matched. The body is * never altered — only the type the object is SERVED as. * * MUST run server-side (in the broker), never on the untrusted runner: the served content type is * what the CDN returns, so the runner must not be able to choose an active type. */ export declare function neutralizeActiveContentType(contentType: string): string; /** Largest raw artifact body the broker will accept INLINE (proxied). Comfortably under the 5 MiB * control-plane body cap so the base64 string + JSON envelope fit. Above this ⇒ presigned PUT. */ export declare const ARTIFACT_PROXY_MAX_BYTES: number; /** Hard ceiling on a single artifact (presigned path included) — bounds runner + broker memory. */ export declare const ARTIFACT_MAX_BYTES: number; /** True when a body must use the presigned-PUT path instead of the inline proxy (it's too big to * buffer through the broker). Pure — the worker's BrokerArtifactStore routes on it. */ export declare function shouldPresignArtifact(byteLength: number): boolean; /** Decode an artifact body string to its raw bytes (base64 → binary, else UTF-8). The decoded length * is the artifact's true byte size — what the proxy/presign routing + the catalog row key off. */ export declare function decodeArtifactBody(body: string, encoding?: "utf8" | "base64"): Buffer;