// contracts §2 — Core Primitive Types
// File: ids.ts — primitive ID aliases, Clock, IdGenerator

export type ISOTimeString = string
export type UUID = string
export type ProjectID = string
export type SessionID = string
export type MessageID = string
export type TaskID = string
export type AgentID = string
export type ToolRunID = string
export type CommandRunID = string
export type ArtifactID = string
export type EvidenceRefID = string
export type WorkspaceID = string
export type SummaryID = string
export type CapabilityID = string
export type ProviderID = string
export type ModelID = string
export type WaveID = string

export type JsonObject = Record<string, unknown>
export type JsonValue = null | boolean | number | string | JsonValue[] | { [key: string]: JsonValue }

// JsonSchema<T> is nominal-only: T provides no compile-time runtime check,
// but documents the expected shape for tool schema consumers.
// The T parameter is retained for documentation purposes but is not used at runtime.
export type JsonSchema<_T = unknown> = JsonObject

export interface Clock {
  now(): ISOTimeString
}

export interface IdGenerator {
  uuid(): UUID
  project_id(): ProjectID
  session_id(): SessionID
  message_id(): MessageID
  task_id(): TaskID
  agent_id(): AgentID
  tool_run_id(): ToolRunID
  command_run_id(): CommandRunID
  artifact_id(): ArtifactID
  evidence_ref_id(): EvidenceRefID
  workspace_id(): WorkspaceID
  summary_id(): SummaryID
}