/** * The lens library — the game designer's judgment layer. * * Each lens distills one industry-proven design philosophy into a form an AI * coding assistant can apply while a programmer builds: the idea itself, the * questions a designer would ask right now, red flags phrased in code/backlog * terms, and concrete prescriptions. Provenance is real and attributed; the * distillations are original text. * * The "lens" framing (a named perspective you deliberately look through) * follows Jesse Schell's *The Art of Game Design: A Book of Lenses* — the * lenses here are not Schell's; each comes from its own primary source. */ export interface Lens { /** Stable kebab-case id, e.g. "game-feel" */ id: string; name: string; oneLiner: string; /** Who/what this comes from — real, checkable sources */ provenance: string; /** The philosophy distilled — written to be internalized, not summarized */ philosophy: string; /** The questions a designer would ask about the current work */ questions: string[]; /** Warning signs, phrased in terms a programmer will recognize in their * own codebase, backlog, or playtest notes */ redFlags: string[]; /** Concrete moves — what to actually do */ prescriptions: string[]; /** Development phases where this lens earns its keep */ phases: Array<"prototype" | "production" | "polish" | "launch">; /** Matching vocabulary — lowercase; multi-word phrases match as substrings */ keywords: string[]; /** Source pointers for going deeper */ furtherReading: string[]; } export declare const LENSES: Lens[]; export interface LensMatch { lens: Lens; score: number; } /** * Match lenses to a described situation. * * Scoring is deliberately simple and deterministic: multi-word keyword * phrases that appear in the text score 3, single-word keywords score 1, * with a small bonus when the lens id/name itself is mentioned. The model * consuming this tool provides the semantic understanding; this just has * to surface the right 2-4 candidates with their full content. */ export declare function matchLenses(situation: string, limit?: number): LensMatch[]; /** Look up a lens by id or name, tolerating close misses */ export declare function findLens(nameOrId: string): Lens | null;