export const scumFeatureKeys = ["configuration", "players", "rewards"] as const; export type SCUMFeatureKey = (typeof scumFeatureKeys)[number]; export type SCUMFeatureAvailability = { feature: SCUMFeatureKey; available: boolean; reason?: string }; export type SCUMCommandResult = { status: "delivered" | "failed" | "unknown" | "unsupported" | "validation-failed" | "queued"; summary: string; audit?: Record }; export type SCUMLogicalDirectory = { key: string; label: string; scope: "config" | "logs" }; export type SCUMLogicalFile = { key: string; directoryKey: string; label: string; kind: "config" | "log"; streamKey?: string; editable?: boolean }; export type SCUMConfigField = { key: string; label: string; description: string; control: "text" | "number" | "port" | "boolean"; fileKey: string; configKey: string; defaultValue: string; restartImpact: "restart-required" | "none"; minimum?: number; maximum?: number; }; export type SCUMConfigRead = { fields: Record; observedAt: string }; export type SCUMConfigPatch = { changes: Array<{ key: string; value: string }>; reason: string; idempotencyKey: string }; export type SCUMPlayer = { id: string; gamePlayerId: string; displayName: string; lastSeenAt?: string; status: "online" | "offline" | "unknown" }; export type SCUMPlayerSession = { id: string; playerId: string; kind: "login" | "logout"; occurredAt: string; networkCorrelation?: string }; export type SCUMPlayerProfile = { player: SCUMPlayer; sessions: SCUMPlayerSession[] }; export type SCUMGiftItem = { key: string; label: string; quantity: number }; export type SCUMGiftRevision = { id: string; catalogId: string; revision: number; items: SCUMGiftItem[]; publishedAt: string }; export type SCUMGiftGrant = { id: string; revisionId: string; playerId: string; notice: string; status: "pending-approval" | "queued" | "delivered" | "notification_failed" | "failed" | "unknown"; createdAt: string; completedAt?: string }; export type SCUMFeatureWorkspace = { defaultDirectoryKey?: string; directories?: SCUMLogicalDirectory[]; files?: SCUMLogicalFile[]; configFields?: SCUMConfigField[]; map?: { mapId: string; mapVersion: string; precision: number; sampleDistance: number; sampleIntervalSeconds: number; retentionSeconds: number } };