Gramforge

Images API reference

Exports of @gramforge/images. Back to the module

Functions

rasterizeSvgResvgWasm

function

Rasterize an SVG string to PNG via `@resvg/resvg-wasm` (portable). The resvg wasm binary is injected and initialized once per process.

rasterizeSvgResvgWasm(svg: string, wasm: InitInput): Promise<RasterizeResult>

rasterizeSvgSharp

function

Rasterize an SVG string to PNG via sharp (Node-only).

rasterizeSvgSharp(svg: string, width: number, height: number): Promise<RasterizeResult>

resetBackendSelection

function

Test-only: clear the memoized native probe.

resetBackendSelection(): void

selectBackend

function

Select the backend to serve renders. Native probing is memoized per process; forcing and wasm selection are evaluated fresh each call (they carry per-call injected inputs).

selectBackend(options?: SelectBackendOptions): Promise<BackendSelection>

toRendererBackend

function

Map a `BackendSelection` to the `RendererBackend` reported in `RenderMeta`.

toRendererBackend(selection: BackendSelection): RendererBackend

tryCreateTakumiNativeBackend

function

Attempt to construct the native backend: dynamic-import the napi binding, instantiate a `Renderer`, and register the provided font buffers once.

tryCreateTakumiNativeBackend(fonts: readonly Uint8Array[]): Promise<NativeLoadResult>

createTakumiWasmBackend

function

Create the wasm backend. Instantiation of the wasm module and font registration happen lazily on the first `renderPng` call so this factory is synchronous and side-effect-free until a render is actually requested.

createTakumiWasmBackend(inputs: TakumiWasmInputs): ImageBackend

createInMemoryFileIdCacheStore

function

A process-lifetime `Map`-backed store for development/testing.

createInMemoryFileIdCacheStore(): FileIdCacheStore

recordUpload

function

Record a newly-uploaded `file_id` into the store. The single place a caller writes a `file_id` back — this package itself never performs the upload.

recordUpload(store: FileIdCacheStore, hash: ContentHash, botId: BotId, fileId: TelegramFileId): Promise<void>

chartToSvg

function

Render a validated `ChartSpec` to an SVG string (pure, no rasterization).

chartToSvg(spec: ChartSpec, dimensions: ChartDimensions): string

renderChart

function

Render a chart spec to PNG bytes. Validates the spec, generates the SVG via ECharts SSR, then rasterizes with sharp. Returns the shared `RenderResult` DU.

renderChart(spec: ChartSpec, dimensions?: ChartDimensions): Promise<RenderResult>

containsColorEmoji

function

True when `input` contains at least one codepoint in a color-emoji presentation range (emoticons, symbols/pictographs, transport, supplemental, regional indicators, and the common Misc-Symbols/Dingbats emoji subset).

containsColorEmoji(input: string): boolean

emojiCodepoints

function

Collect the distinct emoji codepoints (as `U+XXXX` strings) in `input`.

emojiCodepoints(input: string): string[]

loadBundledFont

function

The bundled font bytes, read once and memoized for the process lifetime.

loadBundledFont(): Uint8Array

computeContentHash

function

SHA-256 of `bytes`, returned as a branded lowercase-hex `ContentHash`.

computeContentHash(bytes: Uint8Array): Promise<ContentHash>

resetDiagnostics

function

Test-only: clear the dedup set between tests.

resetDiagnostics(): void

setDiagnosticHook

function
setDiagnosticHook(fn: ((e: DiagnosticEvent) => void) | null): void

warnDegraded

function
warnDegraded(context: string, detail: string): void

warnNotImplemented

function
warnNotImplemented(category: string, detail: string): void

warnUnexpected

function
warnUnexpected(context: string, detail: string, data?: Record<string, unknown>): void

chartCard

function
chartCard(input: ChartCardInput): CardTemplate

completionCard

function
completionCard(input: CompletionCardInput): CardTemplate

failureCard

function
failureCard(input: FailureCardInput): CardTemplate

fleetOverviewCard

function
fleetOverviewCard(input: FleetOverviewCardInput): CardTemplate

needsInputCard

function
needsInputCard(input: Omit<NeedsInputCardInput, "options"> & { readonly options: NonEmptyArray<NeedsInputOption>; }): CardTemplate

renderCard

function

Validate a card input, optionally short-circuit via the file_id cache, else render the matching template. Never throws for expected failures.

renderCard(input: CardInput, options?: RenderCardOptions): Promise<RenderResult | CachedFileHit>

renderCardTree

function

Render a neutral card tree to a `RenderResult`. `contentHash` is supplied by the caller (card path uses the input hash; callers may pass a byte hash).

renderCardTree(node: CardNode, dims: RenderPngOptions, contentHash: ContentHash, options?: RenderCardTreeOptions): Promise<RenderResult>

statusCard

function
statusCard(input: StatusCardInput): CardTemplate

col

function

A vertical flex container (`flexDirection: column`).

col(style: CardStyle, children: readonly CardNode[]): BoxNode

div

function

A generic flex container.

div(style: CardStyle, children: readonly CardNode[]): BoxNode

img

function

An image leaf carrying raw bytes (e.g. a rendered chart PNG).

img(input: { readonly src: Uint8Array; readonly width: number; readonly height: number; readonly style?: CardStyle; }): ImageNode

row

function

A horizontal flex container (`flexDirection: row`).

row(style: CardStyle, children: readonly CardNode[]): BoxNode

text

function

A text leaf.

text(value: string, style?: CardStyle): TextNode

Types

RasterizeResult

type
type RasterizeResult = | {
      readonly ok: true;
      readonly bytes: Uint8Array;
      readonly width: number;
      readonly height: number;
    }
  | { readonly ok: false; readonly message: string }

BackendSelection

type
type BackendSelection = | { readonly kind: "takumi-native"; readonly backend: ImageBackend }
  | { readonly kind: "takumi-wasm"; readonly backend: ImageBackend }
  | { readonly kind: "fallback"; readonly reason: RendererFallbackReason }

ForcedBackend

type
type ForcedBackend = "takumi-native" | "takumi-wasm" | "fallback"

NativeLoadResult

type
type NativeLoadResult = | { readonly ok: true; readonly backend: ImageBackend }
  | { readonly ok: false; readonly error: unknown }

BackendKind

type
type BackendKind = "takumi-native" | "takumi-wasm"

DiagnosticKind

type

Runtime diagnostics — the house alternative to deferred-work comments. Three functions: `warnNotImplemented`, `warnDegraded`, `warnUnexpected`. Each fires once per stable key (except `warnUnexpected`, which always fires), is greppable, and can be piped into a UI panel via {@link setDiagnosticHook}. Usage: warnDegraded("MyModule.fallback", "linear interp — cubic deferred, spec:120-140"); warnNotImplemented("MyModule.featureX", "spec §4 not yet lowered"); warnUnexpected("MyModule.parse", "expected number, got string", { value });

type DiagnosticKind = "not-implemented" | "degraded" | "unexpected"

NonEmptyArray

type
type NonEmptyArray = NonEmptyArray<T>

BotId

type
type BotId = string & z.BRAND<"BotId">

CachedFileHit

type
type CachedFileHit = { hit?: true; fileId?: string & z.BRAND<"TelegramFileId">; contentHash?: string & z.BRAND<"ContentHash">; }

CardInput

type
type CardInput = { template?: "status"; agentName?: string; level?: "ok" | "warn" | "error"; headline?: string; detail?: { kind?: "none"; } | { kind?: "text"; value?: string; }; timestampIso?: string; } | { title?: string; template?: "fleet-overview"; timestampIso?: string; agents?: { name?: string; level?: "ok" | "warn" | "error"; note?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }[]; chart?: { kind?: "none"; } | { kind?: "spec"; spec?: { kind?: "bar" | "line"; title?: string; categories?: string[]; series?: { values?: number[]; name?: string; }[]; }; }; } | { options?: { label?: string; hint?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }[]; template?: "needs-input"; agentName?: string; timestampIso?: string; question?: string; } | { template?: "completion"; agentName?: string; headline?: string; timestampIso?: string; summary?: { kind?: "none"; } | { kind?: "text"; value?: string; }; durationMs?: number; } | { template?: "failure"; agentName?: string; headline?: string; detail?: { kind?: "none"; } | { kind?: "text"; value?: string; }; timestampIso?: string; } | { template?: "chart"; spec?: { kind?: "bar" | "line"; title?: string; categories?: string[]; series?: { values?: number[]; name?: string; }[]; }; caption?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }

ChartCardInput

type
type ChartCardInput = { template?: "chart"; spec?: { kind?: "bar" | "line"; title?: string; categories?: string[]; series?: { values?: number[]; name?: string; }[]; }; caption?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }

ChartKind

type
type ChartKind = "bar" | "line"

ChartSeries

type
type ChartSeries = { values?: number[]; name?: string; }

ChartSpec

type
type ChartSpec = { kind?: "bar" | "line"; title?: string; categories?: string[]; series?: { values?: number[]; name?: string; }[]; }

CompletionCardInput

type
type CompletionCardInput = { template?: "completion"; agentName?: string; headline?: string; timestampIso?: string; summary?: { kind?: "none"; } | { kind?: "text"; value?: string; }; durationMs?: number; }

ContentHash

type
type ContentHash = string & z.BRAND<"ContentHash">

FailureCardInput

type
type FailureCardInput = { template?: "failure"; agentName?: string; headline?: string; detail?: { kind?: "none"; } | { kind?: "text"; value?: string; }; timestampIso?: string; }

FleetAgent

type
type FleetAgent = { name?: string; level?: "ok" | "warn" | "error"; note?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }

FleetOverviewCardInput

type
type FleetOverviewCardInput = { title?: string; template?: "fleet-overview"; timestampIso?: string; agents?: { name?: string; level?: "ok" | "warn" | "error"; note?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }[]; chart?: { kind?: "none"; } | { kind?: "spec"; spec?: { kind?: "bar" | "line"; title?: string; categories?: string[]; series?: { values?: number[]; name?: string; }[]; }; }; }

NeedsInputCardInput

type
type NeedsInputCardInput = { options?: { label?: string; hint?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }[]; template?: "needs-input"; agentName?: string; timestampIso?: string; question?: string; }

NeedsInputOption

type
type NeedsInputOption = { label?: string; hint?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }

NetworkUsage

type
type NetworkUsage = { kind?: "offline"; } | { kind?: "emoji-font-fetch"; codepoints?: string[]; }

RenderErr

type
type RenderErr = { readonly ok: false; readonly error: RenderFailure }

RendererBackend

type
type RendererBackend = { kind?: "takumi"; } | { kind?: "satori-sharp"; reason?: { kind?: "native-module-load-failed"; platform?: string; arch?: string; } | { kind?: "forced-fallback"; }; }

RendererFallbackReason

type
type RendererFallbackReason = { kind?: "native-module-load-failed"; platform?: string; arch?: string; } | { kind?: "forced-fallback"; }

RenderFailure

type
type RenderFailure = { kind?: "invalid-template-input"; issues?: string[]; } | { kind?: "renderer-unavailable"; attempted?: ({ kind?: "takumi"; } | { kind?: "satori-sharp"; reason?: { kind?: "native-module-load-failed"; platform?: string; arch?: string; } | { kind?: "forced-fallback"; }; })[]; } | { kind?: "rasterize-failed"; message?: string; } | { kind?: "chart-spec-invalid"; issues?: string[]; }

RenderMeta

type
type RenderMeta = { contentHash?: string & z.BRAND<"ContentHash">; backend?: { kind?: "takumi"; } | { kind?: "satori-sharp"; reason?: { kind?: "native-module-load-failed"; platform?: string; arch?: string; } | { kind?: "forced-fallback"; }; }; network?: { kind?: "offline"; } | { kind?: "emoji-font-fetch"; codepoints?: string[]; }; renderMs?: number; widthPx?: number; heightPx?: number; }

RenderOk

type
type RenderOk = { readonly ok: true; readonly bytes: Uint8Array; readonly meta: RenderMeta }

RenderResult

type
type RenderResult = RenderOk | RenderErr

StatusCardInput

type
type StatusCardInput = { template?: "status"; agentName?: string; level?: "ok" | "warn" | "error"; headline?: string; detail?: { kind?: "none"; } | { kind?: "text"; value?: string; }; timestampIso?: string; }

StatusLevel

type
type StatusLevel = "ok" | "warn" | "error"

TelegramFileId

type
type TelegramFileId = string & z.BRAND<"TelegramFileId">

BoxNode

type
type BoxNode = {
  readonly kind: "box";
  readonly style: CardStyle;
  readonly children: readonly CardNode[];
}

CardNode

type
type CardNode = BoxNode | TextNode | ImageNode

FlexAlign

type
type FlexAlign = "flex-start" | "center" | "flex-end" | "stretch" | "baseline"

FlexDirection

type

The single flexbox-safe authoring format for both backends. Card templates build a neutral `CardNode` tree via `div`/`row`/`col`/`text`/ `img`. The backends convert it to their native shape (Takumi's `{ type: "container" | "text" | "image" }` nodes, or a satori element tree). `CardStyle` deliberately exposes only flexbox-compatible props — there is no CSS Grid and no free-form `style: string` escape hatch, so a template that type-checks renders consistently on Takumi and satori alike.

type FlexDirection = "row" | "column"

FlexJustify

type
type FlexJustify = | "flex-start"
  | "center"
  | "flex-end"
  | "space-between"
  | "space-around"
  | "space-evenly"

FlexWrap

type
type FlexWrap = "nowrap" | "wrap"

ImageNode

type
type ImageNode = {
  readonly kind: "image";
  readonly style: CardStyle;
  readonly src: Uint8Array;
  readonly width: number;
  readonly height: number;
}

ObjectFit

type
type ObjectFit = "fill" | "contain" | "cover"

TextAlign

type
type TextAlign = "left" | "center" | "right"

TextNode

type
type TextNode = { readonly kind: "text"; readonly style: CardStyle; readonly text: string }

Interfaces

SelectBackendOptions

interface
interface SelectBackendOptions

force

property
force: ForcedBackend

fonts

property

Font buffers for the native backend (defaults handled by the caller).

fonts: readonly Uint8Array<ArrayBufferLike>[]

wasm

property

Required to select the wasm backend.

wasm: TakumiWasmInputs

TakumiWasmInputs

interface
interface TakumiWasmInputs

wasm

property

The `takumi_wasm_bg.wasm` bytes or a precompiled module.

wasm: SyncInitInput

fonts

property

Font buffers to register (e.g. a Latin/monospace font).

fonts: readonly Uint8Array<ArrayBufferLike>[]

ImageBackend

interface
interface ImageBackend

kind

property
kind: BackendKind

renderPng

method
renderPng(node: CardNode, opts: RenderPngOptions): Promise<Uint8Array>

RenderPngOptions

interface
interface RenderPngOptions

width

property
width: number

height

property
height: number

FileIdCacheStore

interface

Pluggable storage port. The in-memory default ships here; callers substitute a persistent (SQLite/Redis) implementation without any change to `renderCard`.

interface FileIdCacheStore

get

method
get(hash: ContentHash, botId: BotId): Promise<TelegramFileId | null>

set

method
set(hash: ContentHash, botId: BotId, fileId: TelegramFileId): Promise<void>

ChartDimensions

interface
interface ChartDimensions

width

property
width: number

height

property
height: number

DiagnosticEvent

interface
interface DiagnosticEvent

kind

property
kind: DiagnosticKind

category

property
category: string

detail

property
detail: string

stack

property
stack: string

data

property
data: Record<string, unknown>

timestamp

property
timestamp: number

CardTemplate

interface
interface CardTemplate

template

property
template: "status" | "fleet-overview" | "chart" | "needs-input" | "completion" | "failure"

dimensions

property
dimensions: RenderPngOptions

buildTree

method
buildTree(): Promise<CardNode>

render

method
render(options?: RenderCardTreeOptions): Promise<RenderResult>

RenderCardOptions

interface
interface RenderCardOptions

lookup

property
lookup: FileIdCacheStore

botId

property
botId: string & import("/home/andrew/gits/github/gramforge/gramforge-sf-phase3-npmf/node_modules/.pnpm/zod@3.25.76/node_modules/zod/index").BRAND<"BotId">

RenderCardTreeOptions

interface
interface RenderCardTreeOptions

force

property
force: ForcedBackend

fonts

property
fonts: readonly Uint8Array<ArrayBufferLike>[]

wasm

property
wasm: TakumiWasmInputs

CardStyle

interface

The flexbox-only style subset. Every property is optional at the type level, but there is no `[k: string]: unknown` index signature and no raw string escape hatch, so unsupported CSS (grid, position tricks) cannot be expressed.

interface CardStyle

flexDirection

property
flexDirection: FlexDirection

alignItems

property
alignItems: FlexAlign

justifyContent

property
justifyContent: FlexJustify

flexWrap

property
flexWrap: FlexWrap

flexGrow

property
flexGrow: number

flexShrink

property
flexShrink: number

flexBasis

property
flexBasis: string | number

gap

property
gap: number

padding

property
padding: string | number

margin

property
margin: string | number

width

property
width: string | number

height

property
height: string | number

minWidth

property
minWidth: string | number

maxWidth

property
maxWidth: string | number

minHeight

property
minHeight: string | number

maxHeight

property
maxHeight: string | number

backgroundColor

property
backgroundColor: string

color

property
color: string

fontSize

property
fontSize: number

fontWeight

property
fontWeight: number

fontFamily

property
fontFamily: string

lineHeight

property
lineHeight: number

letterSpacing

property
letterSpacing: number

textAlign

property
textAlign: TextAlign

borderRadius

property
borderRadius: number

borderWidth

property
borderWidth: number

borderColor

property
borderColor: string

borderStyle

property
borderStyle: "solid"

objectFit

property
objectFit: ObjectFit

opacity

property
opacity: number

Constants

DEFAULT_CHART_HEIGHT

const
const DEFAULT_CHART_HEIGHT: 480

DEFAULT_CHART_WIDTH

const
const DEFAULT_CHART_WIDTH: 800

BUNDLED_FONT_FAMILY

const
const BUNDLED_FONT_FAMILY: "DejaVu Sans"

BotIdSchema

const
const BotIdSchema: z.ZodBranded<z.ZodString, "BotId">

CachedFileHitSchema

const
const CachedFileHitSchema: z.ZodObject<{ hit: z.ZodLiteral<true>; fileId: z.ZodBranded<z.ZodString, "TelegramFileId">; contentHash: z.ZodBranded<z.ZodString, "ContentHash">; }, "strip", z.ZodTypeAny, { hit?: true; fileId?: string & z.BRAND<"TelegramFileId">; contentHash?: string & z.BRAND<"ContentHash">; }, { hit?: true; fileId?: string; contentHash?: string; }>

CardInputSchema

const
const CardInputSchema: z.ZodDiscriminatedUnion<"template", [z.ZodObject<{ template: z.ZodLiteral<"status">; agentName: z.ZodString; level: z.ZodEnum<["ok", "warn", "error"]>; headline: z.ZodString; detail: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ kind: z.ZodLiteral<"none">; }, "strip", z.ZodTypeAny, { kind?: "none"; }, { kind?: "none"; }>, z.ZodObject<{ kind: z.ZodLiteral<"text">; value: z.ZodString; }, "strip", z.ZodTypeAny, { kind?: "text"; value?: string; }, { kind?: "text"; value?: string; }>]>; timestampIso: z.ZodString; }, "strip", z.ZodTypeAny, { template?: "status"; agentName?: string; level?: "ok" | "warn" | "error"; headline?: string; detail?: { kind?: "none"; } | { kind?: "text"; value?: string; }; timestampIso?: string; }, { template?: "status"; agentName?: string; level?: "ok" | "warn" | "error"; headline?: string; detail?: { kind?: "none"; } | { kind?: "text"; value?: string; }; timestampIso?: string; }>, z.ZodObject<{ template: z.ZodLiteral<"fleet-overview">; title: z.ZodString; agents: z.ZodArray<z.ZodObject<{ name: z.ZodString; level: z.ZodEnum<["ok", "warn", "error"]>; note: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ kind: z.ZodLiteral<"none">; }, "strip", z.ZodTypeAny, { kind?: "none"; }, { kind?: "none"; }>, z.ZodObject<{ kind: z.ZodLiteral<"text">; value: z.ZodString; }, "strip", z.ZodTypeAny, { kind?: "text"; value?: string; }, { kind?: "text"; value?: string; }>]>; }, "strip", z.ZodTypeAny, { name?: string; level?: "ok" | "warn" | "error"; note?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }, { name?: string; level?: "ok" | "warn" | "error"; note?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }>, "many">; chart: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ kind: z.ZodLiteral<"none">; }, "strip", z.ZodTypeAny, { kind?: "none"; }, { kind?: "none"; }>, z.ZodObject<{ kind: z.ZodLiteral<"spec">; spec: z.ZodObject<{ kind: z.ZodEnum<["bar", "line"]>; title: z.ZodString; categories: z.ZodArray<z.ZodString, "many">; series: z.ZodArray<z.ZodObject<{ name: z.ZodString; values: z.ZodArray<z.ZodNumber, "many">; }, "strip", z.ZodTypeAny, { values?: number[]; name?: string; }, { values?: number[]; name?: string; }>, "many">; }, "strip", z.ZodTypeAny, { kind?: "bar" | "line"; title?: string; categories?: string[]; series?: { values?: number[]; name?: string; }[]; }, { kind?: "bar" | "line"; title?: string; categories?: string[]; series?: { values?: number[]; name?: string; }[]; }>; }, "strip", z.ZodTypeAny, { kind?: "spec"; spec?: { kind?: "bar" | "line"; title?: string; categories?: string[]; series?: { values?: number[]; name?: string; }[]; }; }, { kind?: "spec"; spec?: { kind?: "bar" | "line"; title?: string; categories?: string[]; series?: { values?: number[]; name?: string; }[]; }; }>]>; timestampIso: z.ZodString; }, "strip", z.ZodTypeAny, { title?: string; template?: "fleet-overview"; timestampIso?: string; agents?: { name?: string; level?: "ok" | "warn" | "error"; note?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }[]; chart?: { kind?: "none"; } | { kind?: "spec"; spec?: { kind?: "bar" | "line"; title?: string; categories?: string[]; series?: { values?: number[]; name?: string; }[]; }; }; }, { title?: string; template?: "fleet-overview"; timestampIso?: string; agents?: { name?: string; level?: "ok" | "warn" | "error"; note?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }[]; chart?: { kind?: "none"; } | { kind?: "spec"; spec?: { kind?: "bar" | "line"; title?: string; categories?: string[]; series?: { values?: number[]; name?: string; }[]; }; }; }>, z.ZodObject<{ template: z.ZodLiteral<"needs-input">; agentName: z.ZodString; question: z.ZodString; options: z.ZodArray<z.ZodObject<{ label: z.ZodString; hint: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ kind: z.ZodLiteral<"none">; }, "strip", z.ZodTypeAny, { kind?: "none"; }, { kind?: "none"; }>, z.ZodObject<{ kind: z.ZodLiteral<"text">; value: z.ZodString; }, "strip", z.ZodTypeAny, { kind?: "text"; value?: string; }, { kind?: "text"; value?: string; }>]>; }, "strip", z.ZodTypeAny, { label?: string; hint?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }, { label?: string; hint?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }>, "many">; timestampIso: z.ZodString; }, "strip", z.ZodTypeAny, { options?: { label?: string; hint?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }[]; template?: "needs-input"; agentName?: string; timestampIso?: string; question?: string; }, { options?: { label?: string; hint?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }[]; template?: "needs-input"; agentName?: string; timestampIso?: string; question?: string; }>, z.ZodObject<{ template: z.ZodLiteral<"completion">; agentName: z.ZodString; headline: z.ZodString; summary: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ kind: z.ZodLiteral<"none">; }, "strip", z.ZodTypeAny, { kind?: "none"; }, { kind?: "none"; }>, z.ZodObject<{ kind: z.ZodLiteral<"text">; value: z.ZodString; }, "strip", z.ZodTypeAny, { kind?: "text"; value?: string; }, { kind?: "text"; value?: string; }>]>; durationMs: z.ZodNumber; timestampIso: z.ZodString; }, "strip", z.ZodTypeAny, { template?: "completion"; agentName?: string; headline?: string; timestampIso?: string; summary?: { kind?: "none"; } | { kind?: "text"; value?: string; }; durationMs?: number; }, { template?: "completion"; agentName?: string; headline?: string; timestampIso?: string; summary?: { kind?: "none"; } | { kind?: "text"; value?: string; }; durationMs?: number; }>, z.ZodObject<{ template: z.ZodLiteral<"failure">; agentName: z.ZodString; headline: z.ZodString; detail: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ kind: z.ZodLiteral<"none">; }, "strip", z.ZodTypeAny, { kind?: "none"; }, { kind?: "none"; }>, z.ZodObject<{ kind: z.ZodLiteral<"text">; value: z.ZodString; }, "strip", z.ZodTypeAny, { kind?: "text"; value?: string; }, { kind?: "text"; value?: string; }>]>; timestampIso: z.ZodString; }, "strip", z.ZodTypeAny, { template?: "failure"; agentName?: string; headline?: string; detail?: { kind?: "none"; } | { kind?: "text"; value?: string; }; timestampIso?: string; }, { template?: "failure"; agentName?: string; headline?: string; detail?: { kind?: "none"; } | { kind?: "text"; value?: string; }; timestampIso?: string; }>, z.ZodObject<{ template: z.ZodLiteral<"chart">; spec: z.ZodObject<{ kind: z.ZodEnum<["bar", "line"]>; title: z.ZodString; categories: z.ZodArray<z.ZodString, "many">; series: z.ZodArray<z.ZodObject<{ name: z.ZodString; values: z.ZodArray<z.ZodNumber, "many">; }, "strip", z.ZodTypeAny, { values?: number[]; name?: string; }, { values?: number[]; name?: string; }>, "many">; }, "strip", z.ZodTypeAny, { kind?: "bar" | "line"; title?: string; categories?: string[]; series?: { values?: number[]; name?: string; }[]; }, { kind?: "bar" | "line"; title?: string; categories?: string[]; series?: { values?: number[]; name?: string; }[]; }>; caption: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ kind: z.ZodLiteral<"none">; }, "strip", z.ZodTypeAny, { kind?: "none"; }, { kind?: "none"; }>, z.ZodObject<{ kind: z.ZodLiteral<"text">; value: z.ZodString; }, "strip", z.ZodTypeAny, { kind?: "text"; value?: string; }, { kind?: "text"; value?: string; }>]>; }, "strip", z.ZodTypeAny, { template?: "chart"; spec?: { kind?: "bar" | "line"; title?: string; categories?: string[]; series?: { values?: number[]; name?: string; }[]; }; caption?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }, { template?: "chart"; spec?: { kind?: "bar" | "line"; title?: string; categories?: string[]; series?: { values?: number[]; name?: string; }[]; }; caption?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }>]>

ChartCardInputSchema

const
const ChartCardInputSchema: z.ZodObject<{ template: z.ZodLiteral<"chart">; spec: z.ZodObject<{ kind: z.ZodEnum<["bar", "line"]>; title: z.ZodString; categories: z.ZodArray<z.ZodString, "many">; series: z.ZodArray<z.ZodObject<{ name: z.ZodString; values: z.ZodArray<z.ZodNumber, "many">; }, "strip", z.ZodTypeAny, { values?: number[]; name?: string; }, { values?: number[]; name?: string; }>, "many">; }, "strip", z.ZodTypeAny, { kind?: "bar" | "line"; title?: string; categories?: string[]; series?: { values?: number[]; name?: string; }[]; }, { kind?: "bar" | "line"; title?: string; categories?: string[]; series?: { values?: number[]; name?: string; }[]; }>; caption: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ kind: z.ZodLiteral<"none">; }, "strip", z.ZodTypeAny, { kind?: "none"; }, { kind?: "none"; }>, z.ZodObject<{ kind: z.ZodLiteral<"text">; value: z.ZodString; }, "strip", z.ZodTypeAny, { kind?: "text"; value?: string; }, { kind?: "text"; value?: string; }>]>; }, "strip", z.ZodTypeAny, { template?: "chart"; spec?: { kind?: "bar" | "line"; title?: string; categories?: string[]; series?: { values?: number[]; name?: string; }[]; }; caption?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }, { template?: "chart"; spec?: { kind?: "bar" | "line"; title?: string; categories?: string[]; series?: { values?: number[]; name?: string; }[]; }; caption?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }>

ChartKindSchema

const
const ChartKindSchema: z.ZodEnum<["bar", "line"]>

ChartSeriesSchema

const
const ChartSeriesSchema: z.ZodObject<{ name: z.ZodString; values: z.ZodArray<z.ZodNumber, "many">; }, "strip", z.ZodTypeAny, { values?: number[]; name?: string; }, { values?: number[]; name?: string; }>

ChartSpecSchema

const
const ChartSpecSchema: z.ZodObject<{ kind: z.ZodEnum<["bar", "line"]>; title: z.ZodString; categories: z.ZodArray<z.ZodString, "many">; series: z.ZodArray<z.ZodObject<{ name: z.ZodString; values: z.ZodArray<z.ZodNumber, "many">; }, "strip", z.ZodTypeAny, { values?: number[]; name?: string; }, { values?: number[]; name?: string; }>, "many">; }, "strip", z.ZodTypeAny, { kind?: "bar" | "line"; title?: string; categories?: string[]; series?: { values?: number[]; name?: string; }[]; }, { kind?: "bar" | "line"; title?: string; categories?: string[]; series?: { values?: number[]; name?: string; }[]; }>

CompletionCardInputSchema

const
const CompletionCardInputSchema: z.ZodObject<{ template: z.ZodLiteral<"completion">; agentName: z.ZodString; headline: z.ZodString; summary: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ kind: z.ZodLiteral<"none">; }, "strip", z.ZodTypeAny, { kind?: "none"; }, { kind?: "none"; }>, z.ZodObject<{ kind: z.ZodLiteral<"text">; value: z.ZodString; }, "strip", z.ZodTypeAny, { kind?: "text"; value?: string; }, { kind?: "text"; value?: string; }>]>; durationMs: z.ZodNumber; timestampIso: z.ZodString; }, "strip", z.ZodTypeAny, { template?: "completion"; agentName?: string; headline?: string; timestampIso?: string; summary?: { kind?: "none"; } | { kind?: "text"; value?: string; }; durationMs?: number; }, { template?: "completion"; agentName?: string; headline?: string; timestampIso?: string; summary?: { kind?: "none"; } | { kind?: "text"; value?: string; }; durationMs?: number; }>

ContentHashSchema

const
const ContentHashSchema: z.ZodBranded<z.ZodString, "ContentHash">

FailureCardInputSchema

const
const FailureCardInputSchema: z.ZodObject<{ template: z.ZodLiteral<"failure">; agentName: z.ZodString; headline: z.ZodString; detail: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ kind: z.ZodLiteral<"none">; }, "strip", z.ZodTypeAny, { kind?: "none"; }, { kind?: "none"; }>, z.ZodObject<{ kind: z.ZodLiteral<"text">; value: z.ZodString; }, "strip", z.ZodTypeAny, { kind?: "text"; value?: string; }, { kind?: "text"; value?: string; }>]>; timestampIso: z.ZodString; }, "strip", z.ZodTypeAny, { template?: "failure"; agentName?: string; headline?: string; detail?: { kind?: "none"; } | { kind?: "text"; value?: string; }; timestampIso?: string; }, { template?: "failure"; agentName?: string; headline?: string; detail?: { kind?: "none"; } | { kind?: "text"; value?: string; }; timestampIso?: string; }>

FleetAgentSchema

const
const FleetAgentSchema: z.ZodObject<{ name: z.ZodString; level: z.ZodEnum<["ok", "warn", "error"]>; note: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ kind: z.ZodLiteral<"none">; }, "strip", z.ZodTypeAny, { kind?: "none"; }, { kind?: "none"; }>, z.ZodObject<{ kind: z.ZodLiteral<"text">; value: z.ZodString; }, "strip", z.ZodTypeAny, { kind?: "text"; value?: string; }, { kind?: "text"; value?: string; }>]>; }, "strip", z.ZodTypeAny, { name?: string; level?: "ok" | "warn" | "error"; note?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }, { name?: string; level?: "ok" | "warn" | "error"; note?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }>

FleetOverviewCardInputSchema

const
const FleetOverviewCardInputSchema: z.ZodObject<{ template: z.ZodLiteral<"fleet-overview">; title: z.ZodString; agents: z.ZodArray<z.ZodObject<{ name: z.ZodString; level: z.ZodEnum<["ok", "warn", "error"]>; note: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ kind: z.ZodLiteral<"none">; }, "strip", z.ZodTypeAny, { kind?: "none"; }, { kind?: "none"; }>, z.ZodObject<{ kind: z.ZodLiteral<"text">; value: z.ZodString; }, "strip", z.ZodTypeAny, { kind?: "text"; value?: string; }, { kind?: "text"; value?: string; }>]>; }, "strip", z.ZodTypeAny, { name?: string; level?: "ok" | "warn" | "error"; note?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }, { name?: string; level?: "ok" | "warn" | "error"; note?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }>, "many">; chart: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ kind: z.ZodLiteral<"none">; }, "strip", z.ZodTypeAny, { kind?: "none"; }, { kind?: "none"; }>, z.ZodObject<{ kind: z.ZodLiteral<"spec">; spec: z.ZodObject<{ kind: z.ZodEnum<["bar", "line"]>; title: z.ZodString; categories: z.ZodArray<z.ZodString, "many">; series: z.ZodArray<z.ZodObject<{ name: z.ZodString; values: z.ZodArray<z.ZodNumber, "many">; }, "strip", z.ZodTypeAny, { values?: number[]; name?: string; }, { values?: number[]; name?: string; }>, "many">; }, "strip", z.ZodTypeAny, { kind?: "bar" | "line"; title?: string; categories?: string[]; series?: { values?: number[]; name?: string; }[]; }, { kind?: "bar" | "line"; title?: string; categories?: string[]; series?: { values?: number[]; name?: string; }[]; }>; }, "strip", z.ZodTypeAny, { kind?: "spec"; spec?: { kind?: "bar" | "line"; title?: string; categories?: string[]; series?: { values?: number[]; name?: string; }[]; }; }, { kind?: "spec"; spec?: { kind?: "bar" | "line"; title?: string; categories?: string[]; series?: { values?: number[]; name?: string; }[]; }; }>]>; timestampIso: z.ZodString; }, "strip", z.ZodTypeAny, { title?: string; template?: "fleet-overview"; timestampIso?: string; agents?: { name?: string; level?: "ok" | "warn" | "error"; note?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }[]; chart?: { kind?: "none"; } | { kind?: "spec"; spec?: { kind?: "bar" | "line"; title?: string; categories?: string[]; series?: { values?: number[]; name?: string; }[]; }; }; }, { title?: string; template?: "fleet-overview"; timestampIso?: string; agents?: { name?: string; level?: "ok" | "warn" | "error"; note?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }[]; chart?: { kind?: "none"; } | { kind?: "spec"; spec?: { kind?: "bar" | "line"; title?: string; categories?: string[]; series?: { values?: number[]; name?: string; }[]; }; }; }>

NeedsInputCardInputSchema

const
const NeedsInputCardInputSchema: z.ZodObject<{ template: z.ZodLiteral<"needs-input">; agentName: z.ZodString; question: z.ZodString; options: z.ZodArray<z.ZodObject<{ label: z.ZodString; hint: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ kind: z.ZodLiteral<"none">; }, "strip", z.ZodTypeAny, { kind?: "none"; }, { kind?: "none"; }>, z.ZodObject<{ kind: z.ZodLiteral<"text">; value: z.ZodString; }, "strip", z.ZodTypeAny, { kind?: "text"; value?: string; }, { kind?: "text"; value?: string; }>]>; }, "strip", z.ZodTypeAny, { label?: string; hint?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }, { label?: string; hint?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }>, "many">; timestampIso: z.ZodString; }, "strip", z.ZodTypeAny, { options?: { label?: string; hint?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }[]; template?: "needs-input"; agentName?: string; timestampIso?: string; question?: string; }, { options?: { label?: string; hint?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }[]; template?: "needs-input"; agentName?: string; timestampIso?: string; question?: string; }>

NeedsInputOptionSchema

const
const NeedsInputOptionSchema: z.ZodObject<{ label: z.ZodString; hint: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ kind: z.ZodLiteral<"none">; }, "strip", z.ZodTypeAny, { kind?: "none"; }, { kind?: "none"; }>, z.ZodObject<{ kind: z.ZodLiteral<"text">; value: z.ZodString; }, "strip", z.ZodTypeAny, { kind?: "text"; value?: string; }, { kind?: "text"; value?: string; }>]>; }, "strip", z.ZodTypeAny, { label?: string; hint?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }, { label?: string; hint?: { kind?: "none"; } | { kind?: "text"; value?: string; }; }>

NetworkUsageSchema

const
const NetworkUsageSchema: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ kind: z.ZodLiteral<"offline">; }, "strip", z.ZodTypeAny, { kind?: "offline"; }, { kind?: "offline"; }>, z.ZodObject<{ kind: z.ZodLiteral<"emoji-font-fetch">; codepoints: z.ZodArray<z.ZodString, "many">; }, "strip", z.ZodTypeAny, { kind?: "emoji-font-fetch"; codepoints?: string[]; }, { kind?: "emoji-font-fetch"; codepoints?: string[]; }>]>

RendererBackendSchema

const
const RendererBackendSchema: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ kind: z.ZodLiteral<"takumi">; }, "strip", z.ZodTypeAny, { kind?: "takumi"; }, { kind?: "takumi"; }>, z.ZodObject<{ kind: z.ZodLiteral<"satori-sharp">; reason: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ kind: z.ZodLiteral<"native-module-load-failed">; platform: z.ZodString; arch: z.ZodString; }, "strip", z.ZodTypeAny, { kind?: "native-module-load-failed"; platform?: string; arch?: string; }, { kind?: "native-module-load-failed"; platform?: string; arch?: string; }>, z.ZodObject<{ kind: z.ZodLiteral<"forced-fallback">; }, "strip", z.ZodTypeAny, { kind?: "forced-fallback"; }, { kind?: "forced-fallback"; }>]>; }, "strip", z.ZodTypeAny, { kind?: "satori-sharp"; reason?: { kind?: "native-module-load-failed"; platform?: string; arch?: string; } | { kind?: "forced-fallback"; }; }, { kind?: "satori-sharp"; reason?: { kind?: "native-module-load-failed"; platform?: string; arch?: string; } | { kind?: "forced-fallback"; }; }>]>

RendererFallbackReasonSchema

const
const RendererFallbackReasonSchema: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ kind: z.ZodLiteral<"native-module-load-failed">; platform: z.ZodString; arch: z.ZodString; }, "strip", z.ZodTypeAny, { kind?: "native-module-load-failed"; platform?: string; arch?: string; }, { kind?: "native-module-load-failed"; platform?: string; arch?: string; }>, z.ZodObject<{ kind: z.ZodLiteral<"forced-fallback">; }, "strip", z.ZodTypeAny, { kind?: "forced-fallback"; }, { kind?: "forced-fallback"; }>]>

RenderFailureSchema

const
const RenderFailureSchema: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ kind: z.ZodLiteral<"invalid-template-input">; issues: z.ZodArray<z.ZodString, "many">; }, "strip", z.ZodTypeAny, { kind?: "invalid-template-input"; issues?: string[]; }, { kind?: "invalid-template-input"; issues?: string[]; }>, z.ZodObject<{ kind: z.ZodLiteral<"renderer-unavailable">; attempted: z.ZodArray<z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ kind: z.ZodLiteral<"takumi">; }, "strip", z.ZodTypeAny, { kind?: "takumi"; }, { kind?: "takumi"; }>, z.ZodObject<{ kind: z.ZodLiteral<"satori-sharp">; reason: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ kind: z.ZodLiteral<"native-module-load-failed">; platform: z.ZodString; arch: z.ZodString; }, "strip", z.ZodTypeAny, { kind?: "native-module-load-failed"; platform?: string; arch?: string; }, { kind?: "native-module-load-failed"; platform?: string; arch?: string; }>, z.ZodObject<{ kind: z.ZodLiteral<"forced-fallback">; }, "strip", z.ZodTypeAny, { kind?: "forced-fallback"; }, { kind?: "forced-fallback"; }>]>; }, "strip", z.ZodTypeAny, { kind?: "satori-sharp"; reason?: { kind?: "native-module-load-failed"; platform?: string; arch?: string; } | { kind?: "forced-fallback"; }; }, { kind?: "satori-sharp"; reason?: { kind?: "native-module-load-failed"; platform?: string; arch?: string; } | { kind?: "forced-fallback"; }; }>]>, "many">; }, "strip", z.ZodTypeAny, { kind?: "renderer-unavailable"; attempted?: ({ kind?: "takumi"; } | { kind?: "satori-sharp"; reason?: { kind?: "native-module-load-failed"; platform?: string; arch?: string; } | { kind?: "forced-fallback"; }; })[]; }, { kind?: "renderer-unavailable"; attempted?: ({ kind?: "takumi"; } | { kind?: "satori-sharp"; reason?: { kind?: "native-module-load-failed"; platform?: string; arch?: string; } | { kind?: "forced-fallback"; }; })[]; }>, z.ZodObject<{ kind: z.ZodLiteral<"rasterize-failed">; message: z.ZodString; }, "strip", z.ZodTypeAny, { kind?: "rasterize-failed"; message?: string; }, { kind?: "rasterize-failed"; message?: string; }>, z.ZodObject<{ kind: z.ZodLiteral<"chart-spec-invalid">; issues: z.ZodArray<z.ZodString, "many">; }, "strip", z.ZodTypeAny, { kind?: "chart-spec-invalid"; issues?: string[]; }, { kind?: "chart-spec-invalid"; issues?: string[]; }>]>

RenderMetaSchema

const
const RenderMetaSchema: z.ZodObject<{ backend: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ kind: z.ZodLiteral<"takumi">; }, "strip", z.ZodTypeAny, { kind?: "takumi"; }, { kind?: "takumi"; }>, z.ZodObject<{ kind: z.ZodLiteral<"satori-sharp">; reason: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ kind: z.ZodLiteral<"native-module-load-failed">; platform: z.ZodString; arch: z.ZodString; }, "strip", z.ZodTypeAny, { kind?: "native-module-load-failed"; platform?: string; arch?: string; }, { kind?: "native-module-load-failed"; platform?: string; arch?: string; }>, z.ZodObject<{ kind: z.ZodLiteral<"forced-fallback">; }, "strip", z.ZodTypeAny, { kind?: "forced-fallback"; }, { kind?: "forced-fallback"; }>]>; }, "strip", z.ZodTypeAny, { kind?: "satori-sharp"; reason?: { kind?: "native-module-load-failed"; platform?: string; arch?: string; } | { kind?: "forced-fallback"; }; }, { kind?: "satori-sharp"; reason?: { kind?: "native-module-load-failed"; platform?: string; arch?: string; } | { kind?: "forced-fallback"; }; }>]>; contentHash: z.ZodBranded<z.ZodString, "ContentHash">; network: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ kind: z.ZodLiteral<"offline">; }, "strip", z.ZodTypeAny, { kind?: "offline"; }, { kind?: "offline"; }>, z.ZodObject<{ kind: z.ZodLiteral<"emoji-font-fetch">; codepoints: z.ZodArray<z.ZodString, "many">; }, "strip", z.ZodTypeAny, { kind?: "emoji-font-fetch"; codepoints?: string[]; }, { kind?: "emoji-font-fetch"; codepoints?: string[]; }>]>; renderMs: z.ZodNumber; widthPx: z.ZodNumber; heightPx: z.ZodNumber; }, "strip", z.ZodTypeAny, { contentHash?: string & z.BRAND<"ContentHash">; backend?: { kind?: "takumi"; } | { kind?: "satori-sharp"; reason?: { kind?: "native-module-load-failed"; platform?: string; arch?: string; } | { kind?: "forced-fallback"; }; }; network?: { kind?: "offline"; } | { kind?: "emoji-font-fetch"; codepoints?: string[]; }; renderMs?: number; widthPx?: number; heightPx?: number; }, { contentHash?: string; backend?: { kind?: "takumi"; } | { kind?: "satori-sharp"; reason?: { kind?: "native-module-load-failed"; platform?: string; arch?: string; } | { kind?: "forced-fallback"; }; }; network?: { kind?: "offline"; } | { kind?: "emoji-font-fetch"; codepoints?: string[]; }; renderMs?: number; widthPx?: number; heightPx?: number; }>

StatusCardInputSchema

const
const StatusCardInputSchema: z.ZodObject<{ template: z.ZodLiteral<"status">; agentName: z.ZodString; level: z.ZodEnum<["ok", "warn", "error"]>; headline: z.ZodString; detail: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ kind: z.ZodLiteral<"none">; }, "strip", z.ZodTypeAny, { kind?: "none"; }, { kind?: "none"; }>, z.ZodObject<{ kind: z.ZodLiteral<"text">; value: z.ZodString; }, "strip", z.ZodTypeAny, { kind?: "text"; value?: string; }, { kind?: "text"; value?: string; }>]>; timestampIso: z.ZodString; }, "strip", z.ZodTypeAny, { template?: "status"; agentName?: string; level?: "ok" | "warn" | "error"; headline?: string; detail?: { kind?: "none"; } | { kind?: "text"; value?: string; }; timestampIso?: string; }, { template?: "status"; agentName?: string; level?: "ok" | "warn" | "error"; headline?: string; detail?: { kind?: "none"; } | { kind?: "text"; value?: string; }; timestampIso?: string; }>

StatusLevelSchema

const
const StatusLevelSchema: z.ZodEnum<["ok", "warn", "error"]>

TelegramFileIdSchema

const
const TelegramFileIdSchema: z.ZodBranded<z.ZodString, "TelegramFileId">