export type DesignSystemSurface = 'web' | 'image' | 'video' | 'audio';
export type DesignSystemSummary = {
    id: string;
    title: string;
    category: string;
    summary: string;
    swatches: string[];
    surface: DesignSystemSurface;
    body: string;
};
export declare function listDesignSystems(root: string): Promise<DesignSystemSummary[]>;
export declare function readDesignSystem(root: string, id: string): Promise<string | null>;
/**
 * Structured (compiled) form of a brand's design system. Optional sibling
 * files alongside DESIGN.md that, when present, give agents a
 * machine-readable token contract and a worked fixture instead of having
 * to re-derive both from prose. Both fields are individually optional —
 * the daemon falls back to the DESIGN.md-only path when neither is
 * available, which is the current state for the ~138 brands without
 * hand-authored or derived tokens.
 *
 * - `tokensCss`     — verbatim content of `<brand>/tokens.css`.
 * - `fixtureHtml`   — verbatim content of `<brand>/components.html`.
 */
export type DesignSystemAssets = {
    tokensCss?: string | undefined;
    fixtureHtml?: string | undefined;
};
export declare function readDesignSystemAssets(root: string, id: string): Promise<DesignSystemAssets>;
/**
 * Returns true when the daemon should inject the structured design-system
 * channel (tokens.css + components.html) into the system prompt for the
 * active brand. Default-on as of PR-D — the only value that disables
 * the channel is the literal string `'0'` on `OD_DESIGN_TOKEN_CHANNEL`,
 * which acts as the kill switch. Unset, `'1'`, `'true'`, empty string,
 * or any other value all keep the new default.
 *
 * Extracted from `server.ts` so the env-flag semantics (the single
 * line PR-D actually flipped) can be unit-tested independently of the
 * full daemon boot path. A regression that, say, restored the old
 * `=== '1'` semantics or read the wrong env name would change the
 * return value here and fail the unit test, even before any
 * downstream prompt-assembly behaviour drifts.
 */
export declare function isDesignTokenChannelEnabled(env?: NodeJS.ProcessEnv): boolean;
/**
 * Resolves the structured design-system assets the daemon will hand to
 * `composeSystemPrompt` for a given brand, applying both the
 * `OD_DESIGN_TOKEN_CHANNEL` kill-switch and the built-in →
 * user-installed root fallback chain.
 *
 * This is the function `server.ts` calls at the prompt-assembly seam.
 * Extracted so the *whole* server-side asset-resolution path —
 * env gate + per-file fallback + result shape — is unit-testable
 * end-to-end from real disk fixtures, not just the boolean predicate.
 *
 * Behaviour (pinned by `tests/design-system-assets.test.ts`):
 *
 * - **`OD_DESIGN_TOKEN_CHANNEL=0`** (kill switch) — returns
 *   `{ tokensCss: undefined, fixtureHtml: undefined }` regardless of
 *   what's on disk. The composer skips both blocks, falling back to
 *   the pre-PR-C DESIGN.md-only prompt.
 * - **Any other env state** (unset, `'1'`, `'true'`, …) — reads
 *   `tokens.css` and `components.html` from `builtInRoot/<id>/`. Any
 *   file missing there falls back to `userInstalledRoot/<id>/`
 *   independently per file, so a brand can ship one half built-in and
 *   the other half from user-installed without losing either.
 *
 * Real fs errors that are not "file not found" still propagate (see
 * `readFileOptional`), so a misconfigured brand surfaces loudly
 * instead of silently degrading to the prose-only prompt.
 */
export declare function resolveDesignSystemAssets(designSystemId: string, builtInRoot: string, userInstalledRoot: string, env?: NodeJS.ProcessEnv): Promise<DesignSystemAssets>;
