/** * Registry — Manages specs, design system data, and generation state. * Persists to .memoire/ directory for cross-session continuity. */ import { EventEmitter } from "events"; import { AnySpec } from "../specs/types.js"; import type { Finding } from "../codegen/generator.js"; import type { LayoutCritique } from "../codegen/layout-critic.js"; export interface DesignSystem { tokens: DesignToken[]; components: DesignComponent[]; styles: DesignStyle[]; lastSync: string; } export interface DesignToken { name: string; collection: string; type: "color" | "spacing" | "typography" | "radius" | "shadow" | "other"; values: Record; cssVariable: string; } export interface DesignComponent { name: string; key: string; description: string; variants: string[]; properties: Record; figmaNodeId: string; } export interface DesignStyle { name: string; type: "fill" | "text" | "effect" | "grid"; value: Record; } export interface GenerationState { specName: string; generatedAt: string; files: string[]; specHash: string; /** Quality-gate findings from the generation that produced this state. Never set for a blocked generation — see CodeGenerator.generate(). */ findings?: Finding[]; /** AI layout critique (page specs only, when an API key was configured). */ critique?: LayoutCritique; } export declare class Registry extends EventEmitter { private arkDir; private specs; private generations; private saveTimer; private _designSystem; constructor(arkDir: string); get designSystem(): DesignSystem; load(): Promise; getSpec(name: string): Promise; getAllSpecs(): Promise; saveSpec(spec: AnySpec): Promise; addToken(token: DesignToken): void; updateToken(name: string, token: DesignToken): void; removeToken(name: string): boolean; save(): Promise; /** Coalesce rapid token mutations into a single disk write (100ms debounce). */ private deferSave; updateDesignSystem(ds: DesignSystem): Promise; recordGeneration(state: GenerationState): Promise; getGenerationState(specName: string): GenerationState | null; private loadSpecsFrom; }