export type ArtifactEnv = Record; export interface ReleaseArtifactRef { ref: string; name: string; } export function releaseArtifactNamespace(env: ArtifactEnv = process.env): string { const namespace = env.RELEASE_ARTIFACT_NAMESPACE?.trim() || "agent-os"; if (!/^[a-z0-9][a-z0-9-]*$/.test(namespace)) { throw new Error(`invalid RELEASE_ARTIFACT_NAMESPACE: ${namespace}`); } return namespace; } export function releaseArtifactPrefix( artifact: ReleaseArtifactRef, env: ArtifactEnv = process.env, ): string { return `${releaseArtifactNamespace(env)}/${artifact.ref}/${artifact.name}/`; } export function releaseUserAgent(env: ArtifactEnv = process.env): string { const namespace = releaseArtifactNamespace(env); const repositoryUrl = env.RELEASE_REPOSITORY_URL ?? `https://github.com/rivet-dev/${namespace}`; return `${namespace}-release-publisher (${repositoryUrl})`; }