export type DiagramNodeKind = "actor" | "system" | "service" | "database" | "queue" | "boundary"; export type DiagramConnectorKind = "sync" | "async" | "data" | "control"; export type DiagramDirection = "right" | "down"; export type DiagramSeverity = "error" | "warning"; export interface DiagramText { label: string; description?: string; } export interface DiagramIconRef { semantic: string; iconifyId: string; } export interface DiagramNode { id: string; kind: DiagramNodeKind; text: DiagramText; groupId?: string; icon?: DiagramIconRef; } export interface DiagramGroup { id: string; title: string; } export interface DiagramConnector { id: string; from: string; to: string; kind: DiagramConnectorKind; label?: string; } export interface DiagramModel { id: string; title: string; direction: DiagramDirection; nodes: DiagramNode[]; connectors: DiagramConnector[]; groups?: DiagramGroup[]; } export interface DiagramPoint { x: number; y: number; } export interface DiagramRect extends DiagramPoint { width: number; height: number; } export interface DiagramNodeLayout extends DiagramRect { nodeId: string; icon?: DiagramRect; text: DiagramRect; } export interface DiagramGroupLayout extends DiagramRect { groupId: string; } export interface DiagramConnectorLayout { connectorId: string; points: DiagramPoint[]; label?: DiagramRect; } export interface DiagramLayout { modelId: string; canvas: DiagramRect; nodes: DiagramNodeLayout[]; connectors: DiagramConnectorLayout[]; groups: DiagramGroupLayout[]; } export interface DiagramValidationFinding { id: string; severity: DiagramSeverity; rule: string; message: string; elementId: string; } export interface DiagramArtifact { model: DiagramModel; layout: DiagramLayout; svg: string; findings: DiagramValidationFinding[]; } export interface DiagramPipelineRunOptions { maxPasses?: number; retainIterations?: boolean; } export interface DiagramPipelineIteration { pass: number; artifact: DiagramArtifact; action: "rendered" | "wrapped-text" | "accepted"; retained: boolean; } export interface DiagramPipelineRun { final: DiagramArtifact; iterations: DiagramPipelineIteration[]; discardedIterations: number; }