export const ARTIFACT_EVENT_TYPE = "stream.thought.artifact"; export const ARTIFACT_REQUEST_EVENT_TYPE = "stream.thought.artifact.requested"; export const ARTIFACT_SCHEMA_VERSION = 1; export const ARTIFACT_REQUEST_SCHEMA_VERSION = 1; export const ARTIFACT_KINDS = ["skill", "spec", "report", "design", "code", "document", "image"] as const; export type ArtifactKind = (typeof ARTIFACT_KINDS)[number]; export const ARTIFACT_MEDIA_TYPES = [ "text/markdown", "text/plain", "application/json", "application/yaml", "text/yaml", "image/png", "image/jpeg", ] as const; export type ArtifactMediaType = (typeof ARTIFACT_MEDIA_TYPES)[number]; export const ARTIFACT_VISIBILITY = ["private", "sensitive"] as const; export type ArtifactVisibility = (typeof ARTIFACT_VISIBILITY)[number]; export const ARTIFACT_REQUEST_STATUSES = ["pending", "failed", "denied"] as const; export type ArtifactRequestStatus = (typeof ARTIFACT_REQUEST_STATUSES)[number]; export const ARTIFACT_MAX_TEXT_BYTES = 256 * 1024; export const ARTIFACT_MAX_IMAGE_BYTES = 8 * 1024 * 1024; export const ARTIFACT_MAX_BODY_BYTES = ARTIFACT_MAX_TEXT_BYTES; export const ARTIFACT_MAX_TITLE_LENGTH = 500; export const ARTIFACT_MAX_SUMMARY_LENGTH = 2_000; export interface ArtifactProvenance { source: string; label: string } export interface ArtifactRelation { type: string; eventId: string } export interface ArtifactBlobReference { algorithm: "sha256"; sha256: string; relativePath: string; byteCount: number; } export interface ArtifactPayload { artifactId: string; artifactVersion: number; kind: ArtifactKind; title: string; summary: string; mediaType: ArtifactMediaType; blob: ArtifactBlobReference; provenance: ArtifactProvenance; relations: ArtifactRelation[]; visibility: ArtifactVisibility; publicationEligible: false; supersedesArtifactEventId?: string; } export interface ArtifactRequestPayload { requestId: string; workspaceLeaseId: string; workspaceRootLabel: string; relativeFilePath: string; artifactId: string; artifactVersion: number; kind: ArtifactKind; title: string; summary: string; mediaType: ArtifactMediaType; provenance: ArtifactProvenance; visibility: ArtifactVisibility; publicationEligible: false; publicationAuthority: false; status: ArtifactRequestStatus; reasonCode?: string; requestingAgentId?: string; requestingRunId?: string; sourceEventId?: string; supersedesArtifactEventId?: string; }