@agentproto/catalog-sync 0.5.1 → 0.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.mjs +2 -1
- package/dist/bin.mjs.map +1 -1
- package/dist/index.mjs +2 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/snapshots/llm-anthropic.json +70 -1
- package/snapshots/llm-huggingface.json +2369 -2063
- package/snapshots/llm-moonshot.json +60 -56
- package/snapshots/llm-openrouter.json +3859 -3638
- package/snapshots/llm-requesty.json +7325 -6755
- package/snapshots/llm-xai.json +2 -2
- package/snapshots/voice-elevenlabs.json +4451 -4144
package/dist/bin.mjs
CHANGED
|
@@ -821,7 +821,8 @@ function mapModel(raw) {
|
|
|
821
821
|
}
|
|
822
822
|
var REPLICATE_SOURCE = {
|
|
823
823
|
id: "image-replicate",
|
|
824
|
-
url: "https://api.replicate.com/v1/models?query=image+generation"
|
|
824
|
+
url: "https://api.replicate.com/v1/models?query=image+generation",
|
|
825
|
+
headers: { Authorization: "Bearer env:REPLICATE_API_TOKEN" }
|
|
825
826
|
};
|
|
826
827
|
var imageReplicate = defineGenerator({
|
|
827
828
|
name: "image:replicate",
|
package/dist/bin.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts","../src/generators/llm-openrouter.ts","../src/generators/llm-requesty.ts","../src/generators/llm-huggingface.ts","../src/generators/llm-context-windows.ts","../src/generators/serialize-voices.ts","../src/generators/voice-elevenlabs.ts","../src/generators/voice-minimax.ts","../src/generators/image-replicate.ts","../src/runner.ts","../src/bin.ts"],"names":["OUTPUT_PATH","ModelSchema","z","SnapshotSchema","round6","per1m","fmt","vendorOf","serializeEntry","serializeFile","generate","sources","__dirname","files","changed"],"mappings":"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","file":"bin.mjs","sourcesContent":["/**\n * catalog-sync generator contract.\n *\n * FROZEN — a sibling agent builds provider generators against this surface.\n * Do not change field names, shapes, or the `defineGenerator` signature\n * without coordinating. Adding new generators is the expected extension\n * path; editing this file is not.\n */\n\nexport interface CatalogSource {\n id: string\n url: string\n /** HTTP method for the live (`--refresh`) fetch. Default `\"GET\"`. */\n method?: \"GET\" | \"POST\"\n /**\n * Request headers for the live fetch. A value may embed `env:VAR_NAME`\n * tokens, resolved from `process.env` at fetch time (e.g.\n * `{ \"xi-api-key\": \"env:ELEVENLABS_API_KEY\" }` or\n * `{ Authorization: \"Bearer env:MINIMAX_API_KEY\" }`). If any referenced env\n * var is unset, the source is treated as un-refreshable — the committed\n * snapshot is reused rather than fetched without auth. Offline reads\n * (default, no `--refresh`) ignore headers entirely.\n */\n headers?: Record<string, string>\n /** JSON request body for POST sources (e.g. MiniMax `get_voice`). */\n body?: unknown\n}\n\nexport interface GeneratorContext {\n /**\n * Reads the pinned snapshot at `snapshots/<src.id>.json`; if missing and\n * `refresh=true`, fetches `src.url` and writes the snapshot. Returns\n * parsed JSON.\n *\n * Offline by default: when no snapshot exists and `refresh` is false this\n * throws — generators MUST be runnable without network access so CI and\n * tests are deterministic. The only network path is behind `--refresh`.\n */\n fetchSource(src: CatalogSource): Promise<unknown>\n refresh: boolean\n}\n\n/** Repo-relative path → TS source text. */\nexport type GeneratedFiles = Record<string, string>\n\nexport interface CatalogGenerator {\n /** e.g. \"llm:openrouter\" */\n name: string\n modality: \"llm\" | \"image\" | \"video\" | \"audio\" | \"voice\"\n sources: CatalogSource[]\n generate(ctx: GeneratorContext): Promise<GeneratedFiles>\n}\n\n/** Identity helper — lets a generator module declare itself with type inference. */\nexport function defineGenerator(g: CatalogGenerator): CatalogGenerator {\n return g\n}\n","import { z } from \"zod\"\n\nimport { defineGenerator, type GeneratedFiles, type GeneratorContext } from \"../types.js\"\n\n/**\n * PINNED source. The OpenRouter `/api/v1/models` payload lists every route\n * the router exposes with per-token USD pricing. We never fetch it at build\n * or test time — only behind `--refresh`, which writes\n * `snapshots/llm-openrouter.json` so the next offline run is deterministic.\n */\nconst OPENROUTER_MODELS_URL = \"https://openrouter.ai/api/v1/models\"\n\n/** Repo-relative drop-in target for {@link @agentproto/model-catalog}. */\nconst OUTPUT_PATH = \"packages/model-catalog/src/llm/openrouter-routes.generated.ts\"\n\n// ── Source schema ────────────────────────────────────────────────────────\n// OpenRouter prices are STRINGS of USD-per-token (e.g. \"0.000003\" = $3/1M).\n// `input_cache_read` / `input_cache_write` are optional and only present for\n// models that support prompt caching (Anthropic, etc.). These are the REAL\n// OpenRouter field names (verified against the live /v1/models payload) — an\n// earlier draft used `cache_read`/`cache_write`, which never matched, so cache\n// multipliers were silently always absent. passthrough() keeps the other live\n// keys (web_search, image, audio, internal_reasoning, input_cache_write_1h)\n// forward-compatible without a regenerate — we only read what we model.\n\nconst PricingSchema = z\n .object({\n prompt: z.string().optional(),\n completion: z.string().optional(),\n input_cache_read: z.string().optional(),\n input_cache_write: z.string().optional(),\n })\n .passthrough()\n\nconst ModelSchema = z\n .object({\n id: z.string(),\n pricing: PricingSchema.optional(),\n })\n .passthrough()\n\nconst SnapshotSchema = z.object({\n data: z.array(ModelSchema),\n})\n\n// ── Output shape (mirrors model-catalog's LLMPricing) ────────────────────\n// Drop-in for `packages/model-catalog/src/llm/openrouter-routes.generated.ts`.\n// Structurally identical to LLMPricing — inputPer1M / outputPer1M in USD per\n// 1M tokens, plus cacheReadMultiplier / cacheWriteMultiplier WHEN the source\n// carries cache_read / cache_write. The existing committed file omits cache\n// fields; this generator emits them when present (per the P3 spec: \"plus\n// cache fields if the source has them\"). Fields are optional on LLMPricing,\n// so the output remains drop-in compatible.\n\ninterface LLMPricingEntry {\n inputPer1M: number\n outputPer1M: number\n cacheReadMultiplier?: number\n cacheWriteMultiplier?: number\n vendor: string\n provider: \"openrouter\"\n}\n\n// ── Number helpers ──────────────────────────────────────────────────────\n\n/** Round to 6 decimal places, killing binary-float noise from the per-token × 1e6 product. */\nfunction round6(n: number): number {\n return Math.round(n * 1_000_000) / 1_000_000\n}\n\n/** Convert a per-token USD string to USD-per-1M-tokens, or undefined if unpriced. */\nfunction per1m(tokenPrice: string | undefined): number | undefined {\n if (tokenPrice === undefined) return undefined\n const n = Number(tokenPrice)\n if (!Number.isFinite(n)) return undefined\n return round6(n * 1_000_000)\n}\n\n/** Shortest faithful decimal string (matches existing file: 1, 0.5, 0.7448, 1.25). */\nfunction fmt(n: number): string {\n if (!Number.isFinite(n)) return \"0\"\n return `${round6(n)}`\n}\n\n/** Vendor slug = first segment of the OpenRouter route id (`vendor/model`). */\nfunction vendorOf(id: string): string {\n if (!id.includes(\"/\")) return id\n return id.split(\"/\")[0] ?? id\n}\n\n// ── Serialization ────────────────────────────────────────────────────────\n\nfunction serializeEntry(e: LLMPricingEntry): string {\n const fields: string[] = [\n `inputPer1M: ${fmt(e.inputPer1M)}`,\n `outputPer1M: ${fmt(e.outputPer1M)}`,\n ]\n if (e.cacheReadMultiplier !== undefined) {\n fields.push(`cacheReadMultiplier: ${fmt(e.cacheReadMultiplier)}`)\n }\n if (e.cacheWriteMultiplier !== undefined) {\n fields.push(`cacheWriteMultiplier: ${fmt(e.cacheWriteMultiplier)}`)\n }\n fields.push(`vendor: ${JSON.stringify(e.vendor)}`)\n fields.push(`provider: ${JSON.stringify(e.provider)}`)\n return `{\\n ${fields.join(\",\\n \")},\\n }`\n}\n\nfunction serializeFile(entries: Record<string, LLMPricingEntry>): string {\n const ids = Object.keys(entries).sort()\n const providers = Array.from(new Set(ids.map(vendorOf))).sort()\n\n const lines: string[] = [\n \"// AUTO-GENERATED by @agentproto/catalog-sync (llm:openrouter).\",\n \"// Do not edit by hand — re-run `pnpm --filter @agentproto/catalog-sync generate`.\",\n `// Source: ${OPENROUTER_MODELS_URL}`,\n \"// Pricing carries provider USD (inputPer1M / outputPer1M) plus cache\",\n \"// multipliers (cacheReadMultiplier / cacheWriteMultiplier) derived from the\",\n \"// source's input_cache_read / input_cache_write per-token fields when present.\",\n \"\",\n 'import type { LLMPricing } from \"./catalog.js\"',\n \"\",\n \"export const OPENROUTER_ROUTES: Record<string, LLMPricing> = {\",\n ]\n for (const id of ids) {\n lines.push(` ${JSON.stringify(id)}: ${serializeEntry(entries[id]!)},`)\n }\n lines.push(\"}\")\n lines.push(\"\")\n lines.push(\"/** Provider slugs treated as OpenRouter routes by the picker. */\")\n lines.push(\"export const OPENROUTER_PROVIDERS: readonly string[] = [\")\n for (const p of providers) {\n lines.push(` ${JSON.stringify(p)},`)\n }\n lines.push(\"]\")\n lines.push(\"\")\n return lines.join(\"\\n\")\n}\n\n// ── Generator ───────────────────────────────────────────────────────────\n\nasync function generate(ctx: GeneratorContext): Promise<GeneratedFiles> {\n const src = sources[0]\n if (!src) throw new Error(\"llm:openrouter: no source configured\")\n const parsed = SnapshotSchema.parse(await ctx.fetchSource(src))\n\n const entries: Record<string, LLMPricingEntry> = {}\n for (const model of parsed.data) {\n const pricing = model.pricing\n if (!pricing) continue\n const inputPer1M = per1m(pricing.prompt)\n const outputPer1M = per1m(pricing.completion)\n if (inputPer1M === undefined || outputPer1M === undefined) continue\n // Skip unpriced routes (e.g. openrouter/auto, which carries \"0\" pricing).\n if (inputPer1M === 0 && outputPer1M === 0) continue\n\n const entry: LLMPricingEntry = {\n inputPer1M,\n outputPer1M,\n vendor: vendorOf(model.id),\n provider: \"openrouter\",\n }\n\n const cacheReadPer1M = per1m(pricing.input_cache_read)\n const cacheWritePer1M = per1m(pricing.input_cache_write)\n if (cacheReadPer1M !== undefined && cacheReadPer1M > 0 && inputPer1M > 0) {\n entry.cacheReadMultiplier = round6(cacheReadPer1M / inputPer1M)\n }\n if (cacheWritePer1M !== undefined && cacheWritePer1M > 0 && inputPer1M > 0) {\n entry.cacheWriteMultiplier = round6(cacheWritePer1M / inputPer1M)\n }\n\n entries[model.id] = entry\n }\n\n return { [OUTPUT_PATH]: serializeFile(entries) }\n}\n\nconst sources = [{ id: \"llm-openrouter\", url: OPENROUTER_MODELS_URL }]\n\nexport const llmOpenRouterGenerator = defineGenerator({\n name: \"llm:openrouter\",\n modality: \"llm\",\n sources,\n generate,\n})\n","import { z } from \"zod\"\n\nimport { defineGenerator, type GeneratedFiles, type GeneratorContext } from \"../types.js\"\n\n/**\n * PINNED source. The Requesty `/v1/models` payload lists every route the\n * router exposes with per-token USD pricing. We never fetch it at build or\n * test time — only behind `--refresh`, which writes\n * `snapshots/llm-requesty.json` so the next offline run is deterministic.\n * Live fetch requires `Authorization: Bearer $REQUESTY_API_KEY` (see\n * `sources` below) — without the key set, the framework reuses the\n * committed snapshot rather than fetching unauthenticated.\n */\nconst REQUESTY_MODELS_URL = \"https://router.requesty.ai/v1/models\"\n\n/** Repo-relative drop-in target for {@link @agentproto/model-catalog}. */\nconst OUTPUT_PATH = \"packages/model-catalog/src/llm/requesty-routes.generated.ts\"\n\n// ── Source schema ────────────────────────────────────────────────────────\n// UNLIKE OpenRouter, Requesty prices are JSON **numbers** in USD-PER-TOKEN\n// (e.g. `4e-7` = $0.40/1M), not strings, and live flat on the model entry\n// rather than nested under a `pricing` object. `cached_price` is a cache\n// READ price (no cache-write price exists in this source — we never emit\n// `cacheWriteMultiplier`). `supports_caching` gates whether `cached_price`\n// is actually meaningful: some entries carry a non-zero `cached_price` with\n// `supports_caching: false` (cache pricing published but not offered), so\n// the multiplier must only be derived when the flag is true. passthrough()\n// keeps the other live keys (context_window, supports_vision, description,\n// …) forward-compatible without a regenerate — we only read what we model.\n\nconst ModelSchema = z\n .object({\n id: z.string(),\n input_price: z.number().optional(),\n output_price: z.number().optional(),\n cached_price: z.number().optional(),\n supports_caching: z.boolean().optional(),\n })\n .passthrough()\n\nconst SnapshotSchema = z.object({\n data: z.array(ModelSchema),\n})\n\n// ── Output shape (mirrors model-catalog's LLMPricing) ────────────────────\n// Drop-in for `packages/model-catalog/src/llm/requesty-routes.generated.ts`.\n// Structurally identical to LLMPricing — inputPer1M / outputPer1M in USD per\n// 1M tokens, plus cacheReadMultiplier when the source carries a meaningful\n// `cached_price`. No `cacheWriteMultiplier` — Requesty has no cache-write\n// price to derive one from.\n\ninterface LLMPricingEntry {\n inputPer1M: number\n outputPer1M: number\n cacheReadMultiplier?: number\n vendor: string\n provider: \"requesty\"\n}\n\n// ── Number helpers ──────────────────────────────────────────────────────\n\n/** Round to 6 decimal places, killing binary-float noise from the per-token × 1e6 product. */\nfunction round6(n: number): number {\n return Math.round(n * 1_000_000) / 1_000_000\n}\n\n/**\n * Convert a per-token USD number to USD-per-1M-tokens, or undefined if\n * unpriced. UNLIKE OpenRouter (per-token USD strings), Requesty already\n * gives per-token USD as a JSON number, so there's no `Number(...)` parse\n * step — just the same ×1e6 + round6 normalization.\n */\nfunction per1m(tokenPrice: number | undefined): number | undefined {\n if (tokenPrice === undefined) return undefined\n if (!Number.isFinite(tokenPrice)) return undefined\n return round6(tokenPrice * 1_000_000)\n}\n\n/** Shortest faithful decimal string (matches existing file: 1, 0.5, 0.7448, 1.25). */\nfunction fmt(n: number): string {\n if (!Number.isFinite(n)) return \"0\"\n return `${round6(n)}`\n}\n\n/** Vendor slug = first segment of the Requesty route id (`vendor/model`). */\nfunction vendorOf(id: string): string {\n if (!id.includes(\"/\")) return id\n return id.split(\"/\")[0] ?? id\n}\n\n// ── Serialization ────────────────────────────────────────────────────────\n\nfunction serializeEntry(e: LLMPricingEntry): string {\n const fields: string[] = [\n `inputPer1M: ${fmt(e.inputPer1M)}`,\n `outputPer1M: ${fmt(e.outputPer1M)}`,\n ]\n if (e.cacheReadMultiplier !== undefined) {\n fields.push(`cacheReadMultiplier: ${fmt(e.cacheReadMultiplier)}`)\n }\n fields.push(`vendor: ${JSON.stringify(e.vendor)}`)\n fields.push(`provider: ${JSON.stringify(e.provider)}`)\n return `{\\n ${fields.join(\",\\n \")},\\n }`\n}\n\nfunction serializeFile(entries: Record<string, LLMPricingEntry>): string {\n const ids = Object.keys(entries).sort()\n const providers = Array.from(new Set(ids.map(vendorOf))).sort()\n\n const lines: string[] = [\n \"// AUTO-GENERATED by @agentproto/catalog-sync (llm:requesty).\",\n \"// Do not edit by hand — re-run `pnpm --filter @agentproto/catalog-sync generate`.\",\n `// Source: ${REQUESTY_MODELS_URL}`,\n \"// Pricing carries provider USD (inputPer1M / outputPer1M) plus a cache\",\n \"// multiplier (cacheReadMultiplier) derived from the source's cached_price\",\n \"// per-token field when `supports_caching` is true. Requesty has no\",\n \"// cache-write price, so cacheWriteMultiplier is never emitted.\",\n \"\",\n 'import type { LLMPricing } from \"./catalog.js\"',\n \"\",\n \"export const REQUESTY_ROUTES: Record<string, LLMPricing> = {\",\n ]\n for (const id of ids) {\n lines.push(` ${JSON.stringify(id)}: ${serializeEntry(entries[id]!)},`)\n }\n lines.push(\"}\")\n lines.push(\"\")\n lines.push(\"/** Provider slugs treated as Requesty routes by the picker. */\")\n lines.push(\"export const REQUESTY_PROVIDERS: readonly string[] = [\")\n for (const p of providers) {\n lines.push(` ${JSON.stringify(p)},`)\n }\n lines.push(\"]\")\n lines.push(\"\")\n return lines.join(\"\\n\")\n}\n\n// ── Generator ───────────────────────────────────────────────────────────\n\nasync function generate(ctx: GeneratorContext): Promise<GeneratedFiles> {\n const src = sources[0]\n if (!src) throw new Error(\"llm:requesty: no source configured\")\n const parsed = SnapshotSchema.parse(await ctx.fetchSource(src))\n\n const entries: Record<string, LLMPricingEntry> = {}\n for (const model of parsed.data) {\n const inputPer1M = per1m(model.input_price)\n const outputPer1M = per1m(model.output_price)\n if (inputPer1M === undefined || outputPer1M === undefined) continue\n // Skip unpriced routes.\n if (inputPer1M === 0 && outputPer1M === 0) continue\n\n const entry: LLMPricingEntry = {\n inputPer1M,\n outputPer1M,\n vendor: vendorOf(model.id),\n provider: \"requesty\",\n }\n\n if (model.supports_caching === true && inputPer1M > 0) {\n const cachePer1M = per1m(model.cached_price)\n if (cachePer1M !== undefined) {\n entry.cacheReadMultiplier = round6(cachePer1M / inputPer1M)\n }\n }\n\n entries[model.id] = entry\n }\n\n return { [OUTPUT_PATH]: serializeFile(entries) }\n}\n\nconst sources = [\n {\n id: \"llm-requesty\",\n url: REQUESTY_MODELS_URL,\n // Live refresh needs the account key (Bearer). Without REQUESTY_API_KEY\n // set, the framework reuses the committed snapshot.\n headers: { Authorization: \"Bearer env:REQUESTY_API_KEY\" },\n },\n]\n\nexport const llmRequestyGenerator = defineGenerator({\n name: \"llm:requesty\",\n modality: \"llm\",\n sources,\n generate,\n})\n","import { z } from \"zod\"\n\nimport { defineGenerator, type GeneratedFiles, type GeneratorContext } from \"../types.js\"\n\n/**\n * PINNED source. The HuggingFace router `/v1/models` payload lists every\n * model the router knows about, each carrying a per-model `providers[]`\n * array — one entry per inference provider currently serving it. We never\n * fetch it at build or test time — only behind `--refresh`, which writes\n * `snapshots/llm-huggingface.json` so the next offline run is deterministic.\n * No auth required — the listing endpoint returns HTTP 200 unauthenticated\n * (verified 2026-07-18).\n */\nconst HUGGINGFACE_MODELS_URL = \"https://router.huggingface.co/v1/models\"\n\n/** Repo-relative drop-in target for {@link @agentproto/model-catalog}. */\nconst OUTPUT_PATH = \"packages/model-catalog/src/llm/huggingface-routes.generated.ts\"\n\n// ── Source schema ────────────────────────────────────────────────────────\n// Every per-provider field except `provider`/`status` is optional — some\n// entries are sparse (provider+status only). `pricing.input`/`pricing.output`\n// are USD-PER-1M-TOKENS NUMBERS (unlike OpenRouter's per-token strings),\n// already at the scale LLMPricing expects — no ×1e6 conversion needed.\n// passthrough() keeps unread live fields (owned_by, architecture, is_free,\n// throughput, …) forward-compatible without a regenerate — we only read\n// what we model.\n\nconst HFProviderSchema = z\n .object({\n provider: z.string(),\n status: z.string(),\n context_length: z.number().optional(),\n pricing: z\n .object({\n input: z.number().optional(),\n output: z.number().optional(),\n })\n .optional(),\n supports_tools: z.boolean().optional(),\n supports_structured_output: z.boolean().optional(),\n })\n .passthrough()\n\nconst HFModelSchema = z\n .object({\n id: z.string(),\n providers: z.array(HFProviderSchema).optional(),\n })\n .passthrough()\n\nconst SnapshotSchema = z.object({\n data: z.array(HFModelSchema),\n})\n\n// ── Output shape (drop-in for model-catalog's route-identity resolver) ────\n\ninterface HuggingFaceRouteProviderEntry {\n provider: string\n status: string\n contextLength?: number\n inputPer1M?: number\n outputPer1M?: number\n supportsTools?: boolean\n supportsStructuredOutput?: boolean\n}\n\ninterface HuggingFaceRouteEntry {\n wireId: string\n providers: HuggingFaceRouteProviderEntry[]\n}\n\n// ── Number helpers ──────────────────────────────────────────────────────\n\n/** Round to 4 decimal places, killing binary-float noise from the source payload. */\nfunction round4(n: number): number {\n return Math.round(n * 10_000) / 10_000\n}\n\n// ── Serialization ────────────────────────────────────────────────────────\n\nfunction serializeProvider(p: HuggingFaceRouteProviderEntry): string {\n const fields: string[] = [\n `provider: ${JSON.stringify(p.provider)}`,\n `status: ${JSON.stringify(p.status)}`,\n ]\n if (p.contextLength !== undefined) fields.push(`contextLength: ${p.contextLength}`)\n if (p.inputPer1M !== undefined) fields.push(`inputPer1M: ${p.inputPer1M}`)\n if (p.outputPer1M !== undefined) fields.push(`outputPer1M: ${p.outputPer1M}`)\n if (p.supportsTools !== undefined) fields.push(`supportsTools: ${p.supportsTools}`)\n if (p.supportsStructuredOutput !== undefined) {\n fields.push(`supportsStructuredOutput: ${p.supportsStructuredOutput}`)\n }\n return ` {\\n ${fields.join(\",\\n \")},\\n }`\n}\n\nfunction serializeEntry(id: string, e: HuggingFaceRouteEntry): string {\n const providerLines = e.providers.map(serializeProvider).join(\",\\n\")\n return [\n ` ${JSON.stringify(id)}: {`,\n ` wireId: ${JSON.stringify(e.wireId)},`,\n ` providers: [`,\n providerLines,\n ` ],`,\n ` },`,\n ].join(\"\\n\")\n}\n\nfunction serializeFile(entries: Record<string, HuggingFaceRouteEntry>): string {\n const ids = Object.keys(entries).sort()\n\n const lines: string[] = [\n \"// AUTO-GENERATED by @agentproto/catalog-sync (llm:huggingface).\",\n \"// Do not edit by hand — re-run `pnpm --filter @agentproto/catalog-sync generate`.\",\n `// Source: ${HUGGINGFACE_MODELS_URL}`,\n \"// Per-model LIVE inference providers from the HuggingFace router. HF wire\",\n \"// ids are case-sensitive and preserved verbatim. Provider entries are\",\n \"// SPARSE on some models — every field below except provider/status is\",\n \"// optional and emitted only when the upstream response carries it. Only\",\n '// providers with status === \"live\" are kept; models with zero live',\n \"// providers are skipped. inputPer1M/outputPer1M are USD per 1M tokens\",\n \"// (HuggingFace router convention — already at that scale, unlike\",\n \"// OpenRouter's per-token strings).\",\n \"\",\n \"export interface HuggingFaceRouteProvider {\",\n \" provider: string\",\n \" status: string\",\n \" contextLength?: number\",\n \" inputPer1M?: number\",\n \" outputPer1M?: number\",\n \" supportsTools?: boolean\",\n \" supportsStructuredOutput?: boolean\",\n \"}\",\n \"\",\n \"export interface HuggingFaceRoute {\",\n \" wireId: string\",\n \" providers: HuggingFaceRouteProvider[]\",\n \"}\",\n \"\",\n \"export const HUGGINGFACE_ROUTES: Record<string, HuggingFaceRoute> = {\",\n ]\n for (const id of ids) {\n lines.push(serializeEntry(id, entries[id]!))\n }\n lines.push(\"}\")\n lines.push(\"\")\n return lines.join(\"\\n\")\n}\n\n// ── Generator ───────────────────────────────────────────────────────────\n\nasync function generate(ctx: GeneratorContext): Promise<GeneratedFiles> {\n const src = sources[0]\n if (!src) throw new Error(\"llm:huggingface: no source configured\")\n const parsed = SnapshotSchema.parse(await ctx.fetchSource(src))\n\n const entries: Record<string, HuggingFaceRouteEntry> = {}\n for (const model of parsed.data) {\n const liveProviders = (model.providers ?? []).filter((p) => p.status === \"live\")\n if (liveProviders.length === 0) continue\n\n const providers: HuggingFaceRouteProviderEntry[] = liveProviders\n .map((p) => {\n const entry: HuggingFaceRouteProviderEntry = {\n provider: p.provider,\n status: p.status,\n }\n if (p.context_length !== undefined) entry.contextLength = p.context_length\n if (p.pricing?.input !== undefined) entry.inputPer1M = round4(p.pricing.input)\n if (p.pricing?.output !== undefined) entry.outputPer1M = round4(p.pricing.output)\n if (p.supports_tools !== undefined) entry.supportsTools = p.supports_tools\n if (p.supports_structured_output !== undefined) {\n entry.supportsStructuredOutput = p.supports_structured_output\n }\n return entry\n })\n .sort((a, b) => a.provider.localeCompare(b.provider))\n\n entries[model.id] = { wireId: model.id, providers }\n }\n\n return { [OUTPUT_PATH]: serializeFile(entries) }\n}\n\nconst sources = [\n {\n id: \"llm-huggingface\",\n url: HUGGINGFACE_MODELS_URL,\n },\n]\n\nexport const llmHuggingfaceGenerator = defineGenerator({\n name: \"llm:huggingface\",\n modality: \"llm\",\n sources,\n generate,\n})\n","import { z } from \"zod\"\n\nimport { defineGenerator, type CatalogSource, type GeneratedFiles, type GeneratorContext } from \"../types.js\"\n\n/**\n * Context window (max input tokens) + max output tokens, live per model id,\n * for the four providers that publish a machine-readable models-list with\n * this data: Anthropic, Groq, xAI, Moonshot. This is NOT pricing — Anthropic's\n * `/v1/models` carries no price at all, and Groq/xAI pricing units need\n * separate verification before they're trusted for billing; see\n * `LLM_PRICING_CATALOG` / `OPENROUTER_ROUTES` in `catalog.ts` for that.\n *\n * ZAI/Zhipu and OpenAI are deliberately excluded: ZAI's `/v4/models` list\n * returns bare `{id, owned_by, created}` with no context field, and OpenAI\n * has no stable models-list endpoint at all (see `sources/openai.ts`) — both\n * stay hand-maintained until (if ever) they publish one.\n */\n\n/** Repo-relative drop-in target for {@link @agentproto/model-catalog}. */\nconst OUTPUT_PATH = \"packages/model-catalog/src/llm/context-windows.generated.ts\"\n\n// ── Output shape (mirrors ContextWindowEntry in model-catalog's catalog.ts) ──\n\ninterface ContextWindowEntry {\n contextWindow: number\n maxOutput?: number\n displayName?: string\n provider: \"anthropic\" | \"groq\" | \"xai\" | \"moonshot\"\n}\n\n// ── Source schemas ───────────────────────────────────────────────────────\n// Each provider's models-list shape, verified against the live payload\n// (2026-07-16). `passthrough()` keeps unrelated fields forward-compatible.\n\nconst AnthropicModelSchema = z\n .object({\n id: z.string(),\n display_name: z.string().optional(),\n max_input_tokens: z.number().optional(),\n max_tokens: z.number().optional(),\n })\n .passthrough()\nconst AnthropicSnapshotSchema = z.object({ data: z.array(AnthropicModelSchema) })\n\nconst GroqModelSchema = z\n .object({\n id: z.string(),\n context_window: z.number().optional(),\n max_completion_tokens: z.number().optional(),\n })\n .passthrough()\nconst GroqSnapshotSchema = z.object({ data: z.array(GroqModelSchema) })\n\n// xAI's `context_length` is `null` for non-text models (e.g. grok-imagine-video).\nconst XaiModelSchema = z\n .object({\n id: z.string(),\n context_length: z.number().nullable().optional(),\n })\n .passthrough()\nconst XaiSnapshotSchema = z.object({ data: z.array(XaiModelSchema) })\n\nconst MoonshotModelSchema = z\n .object({\n id: z.string(),\n context_length: z.number().optional(),\n })\n .passthrough()\nconst MoonshotSnapshotSchema = z.object({ data: z.array(MoonshotModelSchema) })\n\n// ── Serialization ────────────────────────────────────────────────────────\n\nfunction serializeEntry(e: ContextWindowEntry): string {\n const fields: string[] = [`contextWindow: ${e.contextWindow}`]\n if (e.maxOutput !== undefined) fields.push(`maxOutput: ${e.maxOutput}`)\n if (e.displayName !== undefined) fields.push(`displayName: ${JSON.stringify(e.displayName)}`)\n fields.push(`provider: ${JSON.stringify(e.provider)}`)\n return `{ ${fields.join(\", \")} }`\n}\n\nfunction serializeFile(entries: Record<string, ContextWindowEntry>): string {\n const ids = Object.keys(entries).sort()\n const lines: string[] = [\n \"// AUTO-GENERATED by @agentproto/catalog-sync (llm:context-windows).\",\n \"// Do not edit by hand — re-run `pnpm --filter @agentproto/catalog-sync generate --refresh`.\",\n \"// Sources: api.anthropic.com/v1/models, api.groq.com/openai/v1/models,\",\n \"// api.x.ai/v1/models, api.moonshot.ai/v1/models\",\n \"// Context window (max input tokens) + max output tokens per live model id.\",\n \"// NOT pricing — see LLM_PRICING_CATALOG / OPENROUTER_ROUTES in catalog.ts.\",\n \"\",\n \"export interface ContextWindowEntry {\",\n \" contextWindow: number\",\n \" maxOutput?: number\",\n \" displayName?: string\",\n ' provider: \"anthropic\" | \"groq\" | \"xai\" | \"moonshot\"',\n \"}\",\n \"\",\n \"export const CONTEXT_WINDOWS: Record<string, ContextWindowEntry> = {\",\n ]\n for (const id of ids) {\n lines.push(` ${JSON.stringify(id)}: ${serializeEntry(entries[id]!)},`)\n }\n lines.push(\"}\")\n lines.push(\"\")\n return lines.join(\"\\n\")\n}\n\n// ── Generator ───────────────────────────────────────────────────────────\n\nasync function generate(ctx: GeneratorContext): Promise<GeneratedFiles> {\n const entries: Record<string, ContextWindowEntry> = {}\n\n const anthropicSrc = sources.find(s => s.id === \"llm-anthropic\")\n if (anthropicSrc) {\n const parsed = AnthropicSnapshotSchema.parse(await ctx.fetchSource(anthropicSrc))\n for (const m of parsed.data) {\n if (!m.max_input_tokens || !m.max_tokens) continue\n entries[m.id] = {\n contextWindow: m.max_input_tokens,\n maxOutput: m.max_tokens,\n ...(m.display_name ? { displayName: m.display_name } : {}),\n provider: \"anthropic\",\n }\n }\n }\n\n const groqSrc = sources.find(s => s.id === \"llm-groq\")\n if (groqSrc) {\n const parsed = GroqSnapshotSchema.parse(await ctx.fetchSource(groqSrc))\n for (const m of parsed.data) {\n if (!m.context_window) continue\n entries[m.id] = {\n contextWindow: m.context_window,\n ...(m.max_completion_tokens ? { maxOutput: m.max_completion_tokens } : {}),\n provider: \"groq\",\n }\n }\n }\n\n const xaiSrc = sources.find(s => s.id === \"llm-xai\")\n if (xaiSrc) {\n const parsed = XaiSnapshotSchema.parse(await ctx.fetchSource(xaiSrc))\n for (const m of parsed.data) {\n if (!m.context_length) continue\n entries[m.id] = { contextWindow: m.context_length, provider: \"xai\" }\n }\n }\n\n const moonshotSrc = sources.find(s => s.id === \"llm-moonshot\")\n if (moonshotSrc) {\n const parsed = MoonshotSnapshotSchema.parse(await ctx.fetchSource(moonshotSrc))\n for (const m of parsed.data) {\n if (!m.context_length) continue\n entries[m.id] = { contextWindow: m.context_length, provider: \"moonshot\" }\n }\n }\n\n return { [OUTPUT_PATH]: serializeFile(entries) }\n}\n\nconst sources: CatalogSource[] = [\n {\n id: \"llm-anthropic\",\n url: \"https://api.anthropic.com/v1/models?limit=1000\",\n headers: {\n \"x-api-key\": \"env:ANTHROPIC_API_KEY\",\n \"anthropic-version\": \"2023-06-01\",\n },\n },\n {\n id: \"llm-groq\",\n url: \"https://api.groq.com/openai/v1/models\",\n headers: { Authorization: \"Bearer env:GROQ_API_KEY\" },\n },\n {\n id: \"llm-xai\",\n url: \"https://api.x.ai/v1/models\",\n headers: { Authorization: \"Bearer env:XAI_API_KEY\" },\n },\n {\n id: \"llm-moonshot\",\n url: \"https://api.moonshot.ai/v1/models\",\n headers: { Authorization: \"Bearer env:MOONSHOT_API_KEY\" },\n },\n]\n\nexport const llmContextWindowsGenerator = defineGenerator({\n name: \"llm:context-windows\",\n modality: \"llm\",\n sources,\n generate,\n})\n","/**\n * Shared CatalogVoice[] → TS-source serializer for the voice generators.\n *\n * The mapping (raw provider JSON → CatalogVoice) lives in\n * `@agentproto/model-catalog/providers` so build time and runtime share it;\n * this module only turns the mapped voices into a committed `*.generated.ts`.\n * Field emit order is fixed (matches the historical generator output) so the\n * generated file stays diff-stable across runs.\n */\n\nimport type { CatalogVoice } from \"@agentproto/model-catalog/schema/voice\"\n\nfunction serializeVoice(v: CatalogVoice): string {\n const lines: string[] = [\" {\"]\n lines.push(` catalogId: ${JSON.stringify(v.catalogId)},`)\n lines.push(` providerVoiceId: ${JSON.stringify(v.providerVoiceId)},`)\n lines.push(` provider: ${JSON.stringify(v.provider)},`)\n lines.push(` label: ${JSON.stringify(v.label)},`)\n lines.push(` description: ${JSON.stringify(v.description)},`)\n lines.push(` gender: ${JSON.stringify(v.gender)},`)\n lines.push(` primaryLanguage: ${JSON.stringify(v.primaryLanguage)},`)\n lines.push(\n ` supportedLanguages: [${v.supportedLanguages.map(l => JSON.stringify(l)).join(\", \")}],`,\n )\n if (v.quality !== undefined) lines.push(` quality: ${JSON.stringify(v.quality)},`)\n if (v.featured !== undefined) lines.push(` featured: ${v.featured},`)\n if (v.samplePath !== undefined) lines.push(` samplePath: ${JSON.stringify(v.samplePath)},`)\n if (v.age !== undefined) lines.push(` age: ${JSON.stringify(v.age)},`)\n lines.push(\" },\")\n return lines.join(\"\\n\")\n}\n\n/**\n * Render a full generated voice module.\n *\n * @param generatorName e.g. `voice:elevenlabs` (goes in the header comment)\n * @param exportName e.g. `ELEVENLABS_VOICES`\n * @param voices mapped voices, in emit order\n */\nexport function serializeVoiceModule(\n generatorName: string,\n exportName: string,\n voices: readonly CatalogVoice[],\n): string {\n const lines: string[] = [\n `// Generated by @agentproto/catalog-sync generator ${generatorName}`,\n \"// DO NOT EDIT MANUALLY — regenerate with catalog-sync\",\n \"\",\n 'import type { CatalogVoice } from \"@agentproto/model-catalog/schema/voice\"',\n \"\",\n `export const ${exportName}: readonly CatalogVoice[] = [`,\n ]\n for (const v of voices) lines.push(serializeVoice(v))\n lines.push(\"] as const\")\n lines.push(\"\")\n return lines.join(\"\\n\")\n}\n","/**\n * voice-elevenlabs generator — reads the ElevenLabs /v1/voices snapshot and\n * emits a CatalogVoice[]-shaped generated TS file.\n *\n * The raw → CatalogVoice mapping lives in\n * `@agentproto/model-catalog/providers` (shared with the runtime\n * live-on-setup path); this generator only fetches, validates, and\n * serializes. Provider-native ids only; no product-specific aliases.\n */\n\nimport {\n ElevenLabsVoicesSnapshotSchema,\n mapElevenLabsVoices,\n} from \"@agentproto/model-catalog/providers\"\n\nimport type {\n CatalogGenerator,\n CatalogSource,\n GeneratedFiles,\n GeneratorContext,\n} from \"../types.js\"\nimport { defineGenerator } from \"../types.js\"\nimport { serializeVoiceModule } from \"./serialize-voices.js\"\n\n// `id` MUST match the snapshot filename stem — the framework's\n// `ctx.fetchSource` resolves `snapshots/<id>.json` (and is the single,\n// dist-safe reader; generators never touch the filesystem themselves).\nexport const ELEVENLABS_SOURCE: CatalogSource = {\n id: \"voice-elevenlabs\",\n url: \"https://api.elevenlabs.io/v1/voices\",\n // Live refresh needs the account key; offline reads ignore this.\n headers: { \"xi-api-key\": \"env:ELEVENLABS_API_KEY\" },\n}\n\nconst OUTPUT_PATH = \"packages/catalog-sync/generated/voice-elevenlabs.generated.ts\"\n\nexport const voiceElevenlabs: CatalogGenerator = defineGenerator({\n name: \"voice:elevenlabs\",\n modality: \"voice\",\n sources: [ELEVENLABS_SOURCE],\n\n async generate(ctx: GeneratorContext): Promise<GeneratedFiles> {\n // Snapshot-first (refresh re-fetches) — both handled by the framework.\n const snapshot = ElevenLabsVoicesSnapshotSchema.parse(\n await ctx.fetchSource(ELEVENLABS_SOURCE),\n )\n const voices = mapElevenLabsVoices(snapshot)\n return {\n [OUTPUT_PATH]: serializeVoiceModule(\n \"voice:elevenlabs\",\n \"ELEVENLABS_VOICES\",\n voices,\n ),\n }\n },\n})\n","/**\n * voice-minimax generator — reads the MiniMax /v1/get_voice snapshot and\n * emits a CatalogVoice[]-shaped generated TS file.\n *\n * The raw → CatalogVoice mapping lives in\n * `@agentproto/model-catalog/providers` (shared with the runtime\n * live-on-setup path); this generator only fetches, validates, and\n * serializes. Provider-native ids only; no product-specific aliases.\n */\n\nimport {\n mapMinimaxVoices,\n MinimaxVoicesSnapshotSchema,\n} from \"@agentproto/model-catalog/providers\"\n\nimport type {\n CatalogGenerator,\n CatalogSource,\n GeneratedFiles,\n GeneratorContext,\n} from \"../types.js\"\nimport { defineGenerator } from \"../types.js\"\nimport { serializeVoiceModule } from \"./serialize-voices.js\"\n\n// `id` MUST match the snapshot filename stem — the framework's\n// `ctx.fetchSource` resolves `snapshots/<id>.json` (single dist-safe reader;\n// generators never touch the filesystem themselves).\nexport const MINIMAX_SOURCE: CatalogSource = {\n id: \"voice-minimax\",\n url: \"https://api.minimax.io/v1/get_voice\",\n // get_voice is a POST; live refresh needs the account key (Bearer). Without\n // MINIMAX_API_KEY set, the framework reuses the committed snapshot.\n method: \"POST\",\n headers: {\n Authorization: \"Bearer env:MINIMAX_API_KEY\",\n \"Content-Type\": \"application/json\",\n },\n body: { voice_type: \"system\" },\n}\n\nconst OUTPUT_PATH = \"packages/catalog-sync/generated/voice-minimax.generated.ts\"\n\nexport const voiceMinimax: CatalogGenerator = defineGenerator({\n name: \"voice:minimax\",\n modality: \"voice\",\n sources: [MINIMAX_SOURCE],\n\n async generate(ctx: GeneratorContext): Promise<GeneratedFiles> {\n // Snapshot-first (refresh re-fetches) — both handled by the framework.\n const snapshot = MinimaxVoicesSnapshotSchema.parse(\n await ctx.fetchSource(MINIMAX_SOURCE),\n )\n const voices = mapMinimaxVoices(snapshot)\n return {\n [OUTPUT_PATH]: serializeVoiceModule(\n \"voice:minimax\",\n \"MINIMAX_VOICES\",\n voices,\n ),\n }\n },\n})\n","/**\n * image-replicate generator — reads a curated Replicate image-models\n * snapshot and emits ImageModelDefinition[]-shaped generated TS entries.\n *\n * Mirrors the shape from packages/model-catalog/src/image/catalog.ts exactly.\n * Provider-native ids only; no product-specific aliases.\n */\n\nimport type {\n CatalogGenerator,\n CatalogSource,\n GeneratedFiles,\n GeneratorContext,\n} from \"../types.js\"\nimport { defineGenerator } from \"../types.js\"\n\n// ── Replicate snapshot shapes ───────────────────────────────────────────\n\ninterface ReplicateOpenApiSchema {\n input: { type: string; properties: Record<string, { type: string; items?: { type: string }; format?: string }> }\n output: { type: string; items?: { type: string; format?: string }; format?: string }\n}\n\ninterface ReplicateLatestVersion {\n id: string\n created_at: string\n openapi_schema: ReplicateOpenApiSchema\n}\n\ninterface ReplicateModel {\n owner: string\n name: string\n description: string\n visibility: string\n run_count: number\n cover_image_url: string | null\n latest_version: ReplicateLatestVersion\n}\n\ninterface ReplicateSnapshot {\n _meta: Record<string, unknown>\n models: ReplicateModel[]\n}\n\n// ── ImageModelDefinition mirror (from packages/model-catalog/src/image/catalog.ts) ──\n\ninterface ImageModelPricing {\n costPerImage: number\n costTier: \"low\" | \"medium\" | \"high\"\n billingUnit: \"per_image\"\n baseCost: number\n creditCost?: number\n overrideCreditCost?: number\n}\n\ninterface ImageModelCapabilities {\n generate: boolean\n edit: boolean\n upscale?: boolean\n}\n\ninterface ImageModelReferenceImages {\n supported: boolean\n fieldName: \"image_input\" | \"input_images\" | \"input_image\" | \"none\"\n maxCount: number\n singular: boolean\n}\n\ninterface ImageModelAspectRatio {\n supported: string[]\n default: string\n}\n\ninterface ImageModelEntry {\n id: string\n name: string\n providerId: string\n provider: string\n capabilities: ImageModelCapabilities\n referenceImages: ImageModelReferenceImages\n aspectRatio: ImageModelAspectRatio\n output: \"string\" | \"array\"\n pricing: ImageModelPricing\n description: string\n agentVisible: boolean\n triggerWord?: string\n}\n\n// ── Pricing (hand-authored, mirrors model-catalog) ──────────────────────\n\ninterface PricingRecord {\n costPerImage: number\n costTier: \"low\" | \"medium\" | \"high\"\n baseCost: number\n creditCost?: number\n overrideCreditCost?: number\n}\n\nconst PRICING: Record<string, PricingRecord> = {\n \"nano-banana-pro\": { costPerImage: 0.15, costTier: \"high\", baseCost: 0.15, creditCost: 10 },\n \"nano-banana-2\": { costPerImage: 0.06, costTier: \"medium\", baseCost: 0.06, creditCost: 5 },\n \"nano-banana\": { costPerImage: 0.04, costTier: \"low\", baseCost: 0.04, creditCost: 5 },\n \"flux-2-dev\": { costPerImage: 0.03, costTier: \"low\", baseCost: 0.03, creditCost: 3 },\n \"flux-kontext-pro\": { costPerImage: 0.04, costTier: \"low\", baseCost: 0.04, creditCost: 5 },\n \"flux-kontext-max\": { costPerImage: 0.08, costTier: \"medium\", baseCost: 0.08, creditCost: 8 },\n \"flux-1.1-pro-ultra\": { costPerImage: 0.06, costTier: \"medium\", baseCost: 0.06, creditCost: 8 },\n \"seedream-4\": { costPerImage: 0.03, costTier: \"low\", baseCost: 0.03, creditCost: 3 },\n \"recraft-v3\": { costPerImage: 0.04, costTier: \"low\", baseCost: 0.04, creditCost: 5 },\n \"image-01\": { costPerImage: 0.02, costTier: \"low\", baseCost: 0.02, creditCost: 2 },\n \"gpt-image-1\": { costPerImage: 0.04, costTier: \"low\", baseCost: 0.04, creditCost: 5 },\n \"ideogram-v3-turbo\": { costPerImage: 0.03, costTier: \"low\", baseCost: 0.03, creditCost: 4 },\n \"flux-1.1-pro\": { costPerImage: 0.04, costTier: \"low\", baseCost: 0.04, creditCost: 5 },\n}\n\n// Models visible to agents (the active generation ones)\nconst AGENT_VISIBLE = new Set([\n \"nano-banana-pro\",\n \"nano-banana-2\",\n \"nano-banana\",\n \"flux-2-dev\",\n \"flux-kontext-pro\",\n \"flux-kontext-max\",\n \"flux-1.1-pro-ultra\",\n \"seedream-4\",\n \"recraft-v3\",\n \"image-01\",\n \"gpt-image-1\",\n \"ideogram-v3-turbo\",\n])\n\nconst ASPECT_RATIOS_DEFAULT: ImageModelAspectRatio = {\n supported: [\"1:1\", \"9:16\", \"16:9\", \"2:3\", \"3:2\", \"3:4\", \"4:3\"],\n default: \"1:1\",\n}\n\nconst ASPECT_RATIOS_WIDE: ImageModelAspectRatio = {\n supported: [\"1:1\", \"9:16\", \"16:9\", \"2:3\", \"3:2\", \"3:4\", \"4:3\", \"4:5\", \"5:4\"],\n default: \"1:1\",\n}\n\nconst ASPECT_RATIOS_ULTRA: ImageModelAspectRatio = {\n supported: [\"1:1\", \"9:16\", \"16:9\", \"21:9\", \"9:21\", \"3:4\", \"4:3\"],\n default: \"1:1\",\n}\n\nconst ASPECT_RATIOS_NBPRO: ImageModelAspectRatio = {\n supported: [\n \"1:1\", \"9:16\", \"16:9\", \"2:3\", \"3:2\", \"3:4\", \"4:3\",\n \"4:5\", \"5:4\", \"21:9\",\n ],\n default: \"match_input_image\",\n}\n\nconst ASPECT_RATIOS_NB2: ImageModelAspectRatio = {\n supported: [\n \"1:1\", \"9:16\", \"16:9\", \"2:3\", \"3:2\", \"3:4\", \"4:3\",\n \"4:5\", \"5:4\",\n ],\n default: \"match_input_image\",\n}\n\nconst ASPECT_RATIOS_SQUARE: ImageModelAspectRatio = {\n supported: [\"1:1\"],\n default: \"1:1\",\n}\n\ninterface ModelSpec {\n id: string\n name: string\n capabilities: ImageModelCapabilities\n referenceImages: ImageModelReferenceImages\n aspectRatio: ImageModelAspectRatio\n output: \"string\" | \"array\"\n triggerWord?: string\n}\n\nconst MODEL_SPECS: Record<string, ModelSpec> = {\n \"nano-banana-pro\": {\n id: \"nano-banana-pro\",\n name: \"Nano Banana Pro\",\n capabilities: { generate: true, edit: true },\n referenceImages: { supported: true, fieldName: \"image_input\", maxCount: 14, singular: false },\n aspectRatio: ASPECT_RATIOS_NBPRO,\n output: \"string\",\n },\n \"nano-banana-2\": {\n id: \"nano-banana-2\",\n name: \"Nano Banana 2\",\n capabilities: { generate: true, edit: true },\n referenceImages: { supported: true, fieldName: \"image_input\", maxCount: 4, singular: false },\n aspectRatio: ASPECT_RATIOS_NB2,\n output: \"string\",\n },\n \"nano-banana\": {\n id: \"nano-banana\",\n name: \"Nano Banana\",\n capabilities: { generate: true, edit: true },\n referenceImages: { supported: true, fieldName: \"image_input\", maxCount: 4, singular: false },\n aspectRatio: ASPECT_RATIOS_DEFAULT,\n output: \"string\",\n },\n \"flux-2-dev\": {\n id: \"flux-2-dev\",\n name: \"Flux 2 Dev\",\n capabilities: { generate: true, edit: true },\n referenceImages: { supported: true, fieldName: \"input_images\", maxCount: 5, singular: false },\n aspectRatio: ASPECT_RATIOS_WIDE,\n output: \"string\",\n },\n \"flux-kontext-pro\": {\n id: \"flux-kontext-pro\",\n name: \"Flux Kontext Pro\",\n capabilities: { generate: true, edit: true },\n referenceImages: { supported: true, fieldName: \"input_image\", maxCount: 1, singular: true },\n aspectRatio: ASPECT_RATIOS_DEFAULT,\n output: \"string\",\n },\n \"flux-kontext-max\": {\n id: \"flux-kontext-max\",\n name: \"Flux Kontext Max\",\n capabilities: { generate: true, edit: true },\n referenceImages: { supported: true, fieldName: \"input_image\", maxCount: 1, singular: true },\n aspectRatio: ASPECT_RATIOS_DEFAULT,\n output: \"string\",\n },\n \"flux-1.1-pro-ultra\": {\n id: \"flux-1.1-pro-ultra\",\n name: \"Flux 1.1 Pro Ultra\",\n capabilities: { generate: true, edit: false },\n referenceImages: { supported: false, fieldName: \"none\", maxCount: 0, singular: false },\n aspectRatio: ASPECT_RATIOS_ULTRA,\n output: \"string\",\n },\n \"seedream-4\": {\n id: \"seedream-4\",\n name: \"SeedReam 4\",\n capabilities: { generate: true, edit: true },\n referenceImages: { supported: true, fieldName: \"image_input\", maxCount: 10, singular: false },\n aspectRatio: ASPECT_RATIOS_DEFAULT,\n output: \"string\",\n },\n \"recraft-v3\": {\n id: \"recraft\",\n name: \"Recraft V3\",\n capabilities: { generate: true, edit: false },\n referenceImages: { supported: false, fieldName: \"none\", maxCount: 0, singular: false },\n aspectRatio: ASPECT_RATIOS_SQUARE,\n output: \"string\",\n },\n \"image-01\": {\n id: \"minimax\",\n name: \"MiniMax Image\",\n capabilities: { generate: true, edit: false },\n referenceImages: { supported: false, fieldName: \"none\", maxCount: 0, singular: false },\n aspectRatio: { supported: [\"1:1\", \"9:16\", \"16:9\", \"3:4\", \"4:3\"], default: \"1:1\" },\n output: \"array\",\n },\n \"gpt-image-1\": {\n id: \"gpt-image-1\",\n name: \"OpenAI GPT Image 1\",\n capabilities: { generate: true, edit: true },\n referenceImages: { supported: true, fieldName: \"input_image\", maxCount: 1, singular: true },\n aspectRatio: { supported: [\"1:1\", \"2:3\", \"3:2\"], default: \"1:1\" },\n output: \"string\",\n },\n \"ideogram-v3-turbo\": {\n id: \"ideogram-v3\",\n name: \"Ideogram v3\",\n capabilities: { generate: true, edit: false },\n referenceImages: { supported: false, fieldName: \"none\", maxCount: 0, singular: false },\n aspectRatio: { supported: [\"1:1\", \"9:16\", \"16:9\", \"2:3\", \"3:2\"], default: \"1:1\" },\n output: \"string\",\n },\n \"flux-1.1-pro\": {\n id: \"flux\",\n name: \"Flux 1.1 Pro\",\n capabilities: { generate: true, edit: false },\n referenceImages: { supported: false, fieldName: \"none\", maxCount: 0, singular: false },\n aspectRatio: { supported: [\"1:1\", \"9:16\", \"16:9\"], default: \"1:1\" },\n output: \"string\",\n },\n}\n\nfunction mapModel(raw: ReplicateModel): ImageModelEntry {\n const providerId = `${raw.owner}/${raw.name}`\n const spec = MODEL_SPECS[raw.name] ?? {\n id: raw.name,\n name: raw.name,\n capabilities: { generate: true, edit: false },\n referenceImages: { supported: false, fieldName: \"none\" as const, maxCount: 0, singular: false },\n aspectRatio: ASPECT_RATIOS_DEFAULT,\n output: \"string\" as const,\n }\n\n const pricing = PRICING[raw.name] ?? {\n costPerImage: 0.03,\n costTier: \"low\" as const,\n baseCost: 0.03,\n creditCost: 3,\n }\n\n return {\n id: spec.id,\n name: spec.name,\n providerId,\n provider: raw.owner === \"openai\" ? \"openai\" : raw.owner === \"minimax\" ? \"minimax\" : \"replicate\",\n capabilities: spec.capabilities,\n referenceImages: spec.referenceImages,\n aspectRatio: spec.aspectRatio,\n output: spec.output,\n pricing: {\n costPerImage: pricing.costPerImage,\n costTier: pricing.costTier,\n billingUnit: \"per_image\" as const,\n baseCost: pricing.baseCost,\n ...(pricing.creditCost !== undefined ? { creditCost: pricing.creditCost } : {}),\n ...(pricing.overrideCreditCost !== undefined ? { overrideCreditCost: pricing.overrideCreditCost } : {}),\n },\n description: raw.description,\n agentVisible: AGENT_VISIBLE.has(raw.name),\n ...(spec.triggerWord ? { triggerWord: spec.triggerWord } : {}),\n }\n}\n\n// ── Generator ────────────────────────────────────────────────────────────\n\n// `id` MUST match the snapshot filename stem — the framework's\n// `ctx.fetchSource` resolves `snapshots/<id>.json` (single dist-safe reader;\n// generators never touch the filesystem themselves).\nexport const REPLICATE_SOURCE: CatalogSource = {\n id: \"image-replicate\",\n url: \"https://api.replicate.com/v1/models?query=image+generation\",\n}\n\nexport const imageReplicate: CatalogGenerator = defineGenerator({\n name: \"image:replicate\",\n modality: \"image\",\n sources: [REPLICATE_SOURCE],\n\n async generate(ctx: GeneratorContext): Promise<GeneratedFiles> {\n // Snapshot-first (refresh re-fetches) — both handled by the framework.\n const data = (await ctx.fetchSource(REPLICATE_SOURCE)) as ReplicateSnapshot\n\n const entries = data.models.map(mapModel)\n\n const lines: string[] = [\n \"// Generated by @agentproto/catalog-sync generator image:replicate\",\n \"// DO NOT EDIT MANUALLY — regenerate with catalog-sync\",\n \"\",\n \"import type { ImageModelDefinition } from \\\"@agentproto/model-catalog/image\\\"\",\n \"\",\n \"export const REPLICATE_IMAGE_MODELS: Record<string, ImageModelDefinition> = {\",\n ]\n\n for (const e of entries) {\n const trigger = e.triggerWord ? `,\\n triggerWord: ${JSON.stringify(e.triggerWord)}` : \"\"\n const creditCost = e.pricing.creditCost !== undefined\n ? `,\\n creditCost: ${e.pricing.creditCost}`\n : \"\"\n const override = e.pricing.overrideCreditCost !== undefined\n ? `,\\n overrideCreditCost: ${e.pricing.overrideCreditCost}`\n : \"\"\n\n lines.push(` ${JSON.stringify(e.id)}: {`)\n lines.push(` id: ${JSON.stringify(e.id)},`)\n lines.push(` name: ${JSON.stringify(e.name)},`)\n lines.push(` providerId: ${JSON.stringify(e.providerId)},`)\n lines.push(` provider: ${JSON.stringify(e.provider)},`)\n lines.push(` capabilities: { generate: ${e.capabilities.generate}, edit: ${e.capabilities.edit}${e.capabilities.upscale ? `, upscale: ${e.capabilities.upscale}` : \"\"} },`)\n lines.push(` referenceImages: {`)\n lines.push(` supported: ${e.referenceImages.supported},`)\n lines.push(` fieldName: ${JSON.stringify(e.referenceImages.fieldName)},`)\n lines.push(` maxCount: ${e.referenceImages.maxCount},`)\n lines.push(` singular: ${e.referenceImages.singular},`)\n lines.push(` },`)\n lines.push(` aspectRatio: {`)\n lines.push(` supported: [${e.aspectRatio.supported.map(a => JSON.stringify(a)).join(\", \")}],`)\n lines.push(` default: ${JSON.stringify(e.aspectRatio.default)},`)\n lines.push(` },`)\n lines.push(` output: ${JSON.stringify(e.output)},`)\n lines.push(` pricing: {`)\n lines.push(` costPerImage: ${e.pricing.costPerImage},`)\n lines.push(` costTier: ${JSON.stringify(e.pricing.costTier)},`)\n lines.push(` billingUnit: ${JSON.stringify(e.pricing.billingUnit)},`)\n lines.push(` baseCost: ${e.pricing.baseCost},${creditCost}${override}`)\n lines.push(` },`)\n lines.push(` description: ${JSON.stringify(e.description)},`)\n lines.push(` agentVisible: ${e.agentVisible},${trigger}`)\n lines.push(` },`)\n }\n\n lines.push(\"}\")\n lines.push(\"\")\n\n const outputPath = \"packages/catalog-sync/generated/image-replicate.generated.ts\"\n return { [outputPath]: lines.join(\"\\n\") }\n },\n})\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\"\nimport { dirname, join, resolve } from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\n\nimport type {\n CatalogGenerator,\n CatalogSource,\n GeneratedFiles,\n GeneratorContext,\n} from \"./types.js\"\n\nconst __dirname = dirname(fileURLToPath(import.meta.url))\n\n/**\n * The catalog-sync package directory. Resolves the same way whether the\n * module is loaded from `src/` (vitest, type-checking) or `dist/` (built) —\n * both sit one level below the package root, so walking up one directory\n * from this file lands on `packages/catalog-sync/`.\n */\nfunction catalogSyncDir(): string {\n return resolve(__dirname, \"..\")\n}\n\n/** Absolute path to a committed/pinned source snapshot. */\nfunction snapshotPath(id: string): string {\n return join(catalogSyncDir(), \"snapshots\", `${id}.json`)\n}\n\n/**\n * The monorepo root. Resolved by walking up from the catalog-sync package\n * until `pnpm-workspace.yaml` is found. Generated-file paths in\n * {@link GeneratedFiles} are repo-relative and are resolved against this.\n */\nfunction repoRoot(): string {\n let dir = catalogSyncDir()\n for (let i = 0; i < 12; i++) {\n if (existsSync(join(dir, \"pnpm-workspace.yaml\"))) return dir\n const parent = dirname(dir)\n if (parent === dir) break\n dir = parent\n }\n // Fallback: catalog-sync lives at <root>/packages/catalog-sync.\n return dirname(dirname(catalogSyncDir()))\n}\n\n/** Reads an existing file as UTF-8, or returns undefined when absent. */\nfunction readIfExists(absPath: string): string | undefined {\n if (!existsSync(absPath)) return undefined\n return readFileSync(absPath, \"utf8\")\n}\n\n/**\n * Resolve `env:VAR_NAME` tokens inside header values from `process.env`.\n * Returns the materialized headers plus the names of any referenced env vars\n * that are unset — the caller uses `missing` to decide whether the source can\n * be refreshed (we never fetch an authed endpoint without its key).\n */\nfunction resolveHeaders(headers?: Record<string, string>): {\n headers: Record<string, string>\n missing: string[]\n} {\n const out: Record<string, string> = {}\n const missing: string[] = []\n if (!headers) return { headers: out, missing }\n for (const [key, value] of Object.entries(headers)) {\n out[key] = value.replace(/env:([A-Z0-9_]+)/g, (_match, name: string) => {\n const v = process.env[name]\n if (v === undefined || v === \"\") {\n missing.push(name)\n return \"\"\n }\n return v\n })\n }\n return { headers: out, missing }\n}\n\nexport interface RunGeneratorsOptions {\n /** When true, missing snapshots are fetched from their pinned `url`. */\n refresh: boolean\n /** When true, generated files are written to disk at their repo-relative path. */\n write: boolean\n}\n\nexport interface RunGeneratorsResult {\n files: GeneratedFiles\n /** Repo-relative paths whose generated content differs from what is on disk. */\n changed: string[]\n}\n\n/**\n * Runs each generator, gathering its emitted files, then (optionally) writes\n * them. `changed` is ALWAYS computed — it is the diff of generated content\n * vs disk — so `--check` (write=false) can surface drift without mutating\n * anything. Writes only happen when `write=true` AND a path differs.\n */\nexport async function runGenerators(\n gens: CatalogGenerator[],\n opts: RunGeneratorsOptions\n): Promise<RunGeneratorsResult> {\n const files: GeneratedFiles = {}\n\n for (const gen of gens) {\n const ctx: GeneratorContext = {\n refresh: opts.refresh,\n async fetchSource(src: CatalogSource): Promise<unknown> {\n const path = snapshotPath(src.id)\n const existing = readIfExists(path)\n\n // Offline path (default): reuse the committed snapshot; error if none.\n if (!opts.refresh) {\n if (existing !== undefined) return JSON.parse(existing)\n throw new Error(\n `catalog-sync: no committed snapshot for source \"${src.id}\" ` +\n `(${path}), and --refresh is not set. Run ` +\n `\\`catalog-sync generate --refresh\\` to fetch ${src.url}.`\n )\n }\n\n // --refresh: force a live re-fetch (do NOT short-circuit on an existing\n // snapshot — refreshing is the whole point). Auth headers may embed\n // `env:VAR` tokens; if a referenced var is unset we can't authenticate,\n // so reuse the committed snapshot rather than fetch unauthenticated.\n const { headers, missing } = resolveHeaders(src.headers)\n if (missing.length > 0) {\n if (existing !== undefined) {\n process.stderr.write(\n `catalog-sync: skipping refresh of \"${src.id}\" — missing env ` +\n `${missing.join(\", \")}; reusing committed snapshot.\\n`\n )\n return JSON.parse(existing)\n }\n throw new Error(\n `catalog-sync: cannot refresh \"${src.id}\" — missing env ` +\n `${missing.join(\", \")} and no committed snapshot.`\n )\n }\n const res = await fetch(src.url, {\n method: src.method ?? \"GET\",\n headers,\n ...(src.body !== undefined\n ? { body: JSON.stringify(src.body) }\n : {}),\n })\n if (!res.ok) {\n throw new Error(\n `catalog-sync: fetch ${src.url} failed: ${res.status} ${res.statusText}`\n )\n }\n const text = await res.text()\n const parsed: unknown = JSON.parse(text)\n mkdirSync(dirname(path), { recursive: true })\n writeFileSync(path, `${JSON.stringify(parsed, null, 2)}\\n`, \"utf8\")\n return parsed\n },\n }\n\n const out = await gen.generate(ctx)\n for (const [path, content] of Object.entries(out)) {\n files[path] = content\n }\n }\n\n const root = repoRoot()\n const changed: string[] = []\n for (const [relPath, content] of Object.entries(files)) {\n const abs = join(root, relPath)\n const existing = readIfExists(abs)\n if (existing !== content) {\n changed.push(relPath)\n if (opts.write) {\n mkdirSync(dirname(abs), { recursive: true })\n writeFileSync(abs, content, \"utf8\")\n }\n }\n }\n\n return { files, changed }\n}\n","#!/usr/bin/env node\n\n/**\n * catalog-sync CLI.\n *\n * catalog-sync generate [--refresh] [--check]\n *\n * - `generate` (default) — generate from pinned snapshots, write changed files.\n * - `--refresh` — re-fetch each source's pinned URL into snapshots/.\n * - `--check` — generate in memory, diff vs committed files; exit 1\n * on drift. This is what CI runs. Never writes.\n */\n\nimport { llmOpenRouterGenerator } from \"./generators/llm-openrouter.js\"\nimport { llmRequestyGenerator } from \"./generators/llm-requesty.js\"\nimport { llmHuggingfaceGenerator } from \"./generators/llm-huggingface.js\"\nimport { llmContextWindowsGenerator } from \"./generators/llm-context-windows.js\"\nimport { voiceElevenlabs } from \"./generators/voice-elevenlabs.js\"\nimport { voiceMinimax } from \"./generators/voice-minimax.js\"\nimport { imageReplicate } from \"./generators/image-replicate.js\"\nimport { runGenerators } from \"./runner.js\"\n\nconst args = process.argv.slice(2)\nconst command = args[0] ?? \"\"\nconst flags = new Set(args.slice(1))\n\nconst KNOWN_FLAGS = new Set([\"--refresh\", \"--check\"])\nconst unknownFlags = [...flags].filter((f) => !KNOWN_FLAGS.has(f))\n\nif (command !== \"generate\" || unknownFlags.length > 0) {\n if (command !== \"generate\") {\n process.stderr.write(\n `catalog-sync: unknown command \"${command}\". Usage: catalog-sync generate [--refresh] [--check]\\n`\n )\n }\n if (unknownFlags.length > 0) {\n process.stderr.write(`catalog-sync: unknown flag(s) ${unknownFlags.join(\", \")}\\n`)\n }\n process.exit(2)\n}\n\nconst refresh = flags.has(\"--refresh\")\nconst check = flags.has(\"--check\")\nconst generators = [\n llmOpenRouterGenerator,\n llmRequestyGenerator,\n llmHuggingfaceGenerator,\n llmContextWindowsGenerator,\n voiceElevenlabs,\n voiceMinimax,\n imageReplicate,\n]\n\nconst { changed, files } = await runGenerators(generators, {\n refresh,\n write: !check,\n})\n\nif (check) {\n if (changed.length > 0) {\n process.stderr.write(\n `catalog-sync: drift detected — ${changed.length} file(s) differ from committed:\\n`\n )\n for (const p of changed) process.stderr.write(` ${p}\\n`)\n process.stderr.write(`Re-run \\`catalog-sync generate\\` to update.\\n`)\n process.exit(1)\n }\n process.stdout.write(\n `catalog-sync: no drift (${generators.length} generator(s), ${Object.keys(files).length} file(s) up to date).\\n`\n )\n process.exit(0)\n}\n\nif (changed.length > 0) {\n process.stdout.write(`catalog-sync: wrote ${changed.length} file(s):\\n`)\n for (const p of changed) process.stdout.write(` ${p}\\n`)\n} else {\n process.stdout.write(`catalog-sync: no changes.\\n`)\n}\nprocess.exit(0)\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/types.ts","../src/generators/llm-openrouter.ts","../src/generators/llm-requesty.ts","../src/generators/llm-huggingface.ts","../src/generators/llm-context-windows.ts","../src/generators/serialize-voices.ts","../src/generators/voice-elevenlabs.ts","../src/generators/voice-minimax.ts","../src/generators/image-replicate.ts","../src/runner.ts","../src/bin.ts"],"names":["OUTPUT_PATH","ModelSchema","z","SnapshotSchema","round6","per1m","fmt","vendorOf","serializeEntry","serializeFile","generate","sources","__dirname","files","changed"],"mappings":";;;;;;;;;;;;;;;AAsDO,SAAS,gBAAgB,CAAA,EAAuC;AACrE,EAAA,OAAO,CAAA;AACT;;;AC9CA,IAAM,qBAAA,GAAwB,qCAAA;AAG9B,IAAM,WAAA,GAAc,+DAAA;AAYpB,IAAM,aAAA,GAAgB,EACnB,MAAA,CAAO;AAAA,EACN,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,UAAA,EAAY,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,gBAAA,EAAkB,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACtC,iBAAA,EAAmB,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAChC,CAAC,EACA,WAAA,EAAY;AAEf,IAAM,WAAA,GAAc,EACjB,MAAA,CAAO;AAAA,EACN,EAAA,EAAI,EAAE,MAAA,EAAO;AAAA,EACb,OAAA,EAAS,cAAc,QAAA;AACzB,CAAC,EACA,WAAA,EAAY;AAEf,IAAM,cAAA,GAAiB,EAAE,MAAA,CAAO;AAAA,EAC9B,IAAA,EAAM,CAAA,CAAE,KAAA,CAAM,WAAW;AAC3B,CAAC,CAAA;AAuBD,SAAS,OAAO,CAAA,EAAmB;AACjC,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,GAAS,CAAA,GAAI,GAAA;AACrC;AAGA,SAAS,MAAM,UAAA,EAAoD;AACjE,EAAA,IAAI,UAAA,KAAe,QAAW,OAAO,MAAA;AACrC,EAAA,MAAM,CAAA,GAAI,OAAO,UAAU,CAAA;AAC3B,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,CAAC,GAAG,OAAO,MAAA;AAChC,EAAA,OAAO,MAAA,CAAO,IAAI,GAAS,CAAA;AAC7B;AAGA,SAAS,IAAI,CAAA,EAAmB;AAC9B,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,CAAC,GAAG,OAAO,GAAA;AAChC,EAAA,OAAO,CAAA,EAAG,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA;AACrB;AAGA,SAAS,SAAS,EAAA,EAAoB;AACpC,EAAA,IAAI,CAAC,EAAA,CAAG,QAAA,CAAS,GAAG,GAAG,OAAO,EAAA;AAC9B,EAAA,OAAO,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,IAAK,EAAA;AAC7B;AAIA,SAAS,eAAe,CAAA,EAA4B;AAClD,EAAA,MAAM,MAAA,GAAmB;AAAA,IACvB,CAAA,YAAA,EAAe,GAAA,CAAI,CAAA,CAAE,UAAU,CAAC,CAAA,CAAA;AAAA,IAChC,CAAA,aAAA,EAAgB,GAAA,CAAI,CAAA,CAAE,WAAW,CAAC,CAAA;AAAA,GACpC;AACA,EAAA,IAAI,CAAA,CAAE,wBAAwB,MAAA,EAAW;AACvC,IAAA,MAAA,CAAO,KAAK,CAAA,qBAAA,EAAwB,GAAA,CAAI,CAAA,CAAE,mBAAmB,CAAC,CAAA,CAAE,CAAA;AAAA,EAClE;AACA,EAAA,IAAI,CAAA,CAAE,yBAAyB,MAAA,EAAW;AACxC,IAAA,MAAA,CAAO,KAAK,CAAA,sBAAA,EAAyB,GAAA,CAAI,CAAA,CAAE,oBAAoB,CAAC,CAAA,CAAE,CAAA;AAAA,EACpE;AACA,EAAA,MAAA,CAAO,KAAK,CAAA,QAAA,EAAW,IAAA,CAAK,UAAU,CAAA,CAAE,MAAM,CAAC,CAAA,CAAE,CAAA;AACjD,EAAA,MAAA,CAAO,KAAK,CAAA,UAAA,EAAa,IAAA,CAAK,UAAU,CAAA,CAAE,QAAQ,CAAC,CAAA,CAAE,CAAA;AACrD,EAAA,OAAO,CAAA;AAAA,IAAA,EAAU,MAAA,CAAO,IAAA,CAAK,SAAS,CAAC,CAAA;AAAA,GAAA,CAAA;AACzC;AAEA,SAAS,cAAc,OAAA,EAAkD;AACvE,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,IAAA,CAAK,OAAO,EAAE,IAAA,EAAK;AACtC,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,IAAA,CAAK,IAAI,GAAA,CAAI,GAAA,CAAI,GAAA,CAAI,QAAQ,CAAC,CAAC,CAAA,CAAE,IAAA,EAAK;AAE9D,EAAA,MAAM,KAAA,GAAkB;AAAA,IACtB,iEAAA;AAAA,IACA,yFAAA;AAAA,IACA,cAAc,qBAAqB,CAAA,CAAA;AAAA,IACnC,uEAAA;AAAA,IACA,8EAAA;AAAA,IACA,iFAAA;AAAA,IACA,EAAA;AAAA,IACA,gDAAA;AAAA,IACA,EAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,IAAA,CAAK,SAAA,CAAU,EAAE,CAAC,CAAA,EAAA,EAAK,cAAA,CAAe,OAAA,CAAQ,EAAE,CAAE,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,EACxE;AACA,EAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AACd,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,KAAK,mEAAmE,CAAA;AAC9E,EAAA,KAAA,CAAM,KAAK,0DAA0D,CAAA;AACrE,EAAA,KAAA,MAAW,KAAK,SAAA,EAAW;AACzB,IAAA,KAAA,CAAM,KAAK,CAAA,EAAA,EAAK,IAAA,CAAK,SAAA,CAAU,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,EACtC;AACA,EAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AACd,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAIA,eAAe,SAAS,GAAA,EAAgD;AACtE,EAAA,MAAM,GAAA,GAAM,QAAQ,CAAC,CAAA;AACrB,EAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAChE,EAAA,MAAM,SAAS,cAAA,CAAe,KAAA,CAAM,MAAM,GAAA,CAAI,WAAA,CAAY,GAAG,CAAC,CAAA;AAE9D,EAAA,MAAM,UAA2C,EAAC;AAClD,EAAA,KAAA,MAAW,KAAA,IAAS,OAAO,IAAA,EAAM;AAC/B,IAAA,MAAM,UAAU,KAAA,CAAM,OAAA;AACtB,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,MAAM,UAAA,GAAa,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA;AACvC,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA;AAC5C,IAAA,IAAI,UAAA,KAAe,MAAA,IAAa,WAAA,KAAgB,MAAA,EAAW;AAE3D,IAAA,IAAI,UAAA,KAAe,CAAA,IAAK,WAAA,KAAgB,CAAA,EAAG;AAE3C,IAAA,MAAM,KAAA,GAAyB;AAAA,MAC7B,UAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAA,EAAQ,QAAA,CAAS,KAAA,CAAM,EAAE,CAAA;AAAA,MACzB,QAAA,EAAU;AAAA,KACZ;AAEA,IAAA,MAAM,cAAA,GAAiB,KAAA,CAAM,OAAA,CAAQ,gBAAgB,CAAA;AACrD,IAAA,MAAM,eAAA,GAAkB,KAAA,CAAM,OAAA,CAAQ,iBAAiB,CAAA;AACvD,IAAA,IAAI,cAAA,KAAmB,MAAA,IAAa,cAAA,GAAiB,CAAA,IAAK,aAAa,CAAA,EAAG;AACxE,MAAA,KAAA,CAAM,mBAAA,GAAsB,MAAA,CAAO,cAAA,GAAiB,UAAU,CAAA;AAAA,IAChE;AACA,IAAA,IAAI,eAAA,KAAoB,MAAA,IAAa,eAAA,GAAkB,CAAA,IAAK,aAAa,CAAA,EAAG;AAC1E,MAAA,KAAA,CAAM,oBAAA,GAAuB,MAAA,CAAO,eAAA,GAAkB,UAAU,CAAA;AAAA,IAClE;AAEA,IAAA,OAAA,CAAQ,KAAA,CAAM,EAAE,CAAA,GAAI,KAAA;AAAA,EACtB;AAEA,EAAA,OAAO,EAAE,CAAC,WAAW,GAAG,aAAA,CAAc,OAAO,CAAA,EAAE;AACjD;AAEA,IAAM,UAAU,CAAC,EAAE,IAAI,gBAAA,EAAkB,GAAA,EAAK,uBAAuB,CAAA;AAE9D,IAAM,yBAAyB,eAAA,CAAgB;AAAA,EACpD,IAAA,EAAM,gBAAA;AAAA,EACN,QAAA,EAAU,KAAA;AAAA,EACV,OAAA;AAAA,EACA;AACF,CAAC,CAAA;AC5KD,IAAM,mBAAA,GAAsB,sCAAA;AAG5B,IAAMA,YAAAA,GAAc,6DAAA;AAcpB,IAAMC,YAAAA,GAAcC,EACjB,MAAA,CAAO;AAAA,EACN,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,YAAA,EAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAClC,YAAA,EAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAClC,gBAAA,EAAkBA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AAChC,CAAC,EACA,WAAA,EAAY;AAEf,IAAMC,eAAAA,GAAiBD,EAAE,MAAA,CAAO;AAAA,EAC9B,IAAA,EAAMA,CAAAA,CAAE,KAAA,CAAMD,YAAW;AAC3B,CAAC,CAAA;AAoBD,SAASG,QAAO,CAAA,EAAmB;AACjC,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,GAAS,CAAA,GAAI,GAAA;AACrC;AAQA,SAASC,OAAM,UAAA,EAAoD;AACjE,EAAA,IAAI,UAAA,KAAe,QAAW,OAAO,MAAA;AACrC,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,UAAU,GAAG,OAAO,MAAA;AACzC,EAAA,OAAOD,OAAAA,CAAO,aAAa,GAAS,CAAA;AACtC;AAGA,SAASE,KAAI,CAAA,EAAmB;AAC9B,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,CAAC,GAAG,OAAO,GAAA;AAChC,EAAA,OAAO,CAAA,EAAGF,OAAAA,CAAO,CAAC,CAAC,CAAA,CAAA;AACrB;AAGA,SAASG,UAAS,EAAA,EAAoB;AACpC,EAAA,IAAI,CAAC,EAAA,CAAG,QAAA,CAAS,GAAG,GAAG,OAAO,EAAA;AAC9B,EAAA,OAAO,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,IAAK,EAAA;AAC7B;AAIA,SAASC,gBAAe,CAAA,EAA4B;AAClD,EAAA,MAAM,MAAA,GAAmB;AAAA,IACvB,CAAA,YAAA,EAAeF,IAAAA,CAAI,CAAA,CAAE,UAAU,CAAC,CAAA,CAAA;AAAA,IAChC,CAAA,aAAA,EAAgBA,IAAAA,CAAI,CAAA,CAAE,WAAW,CAAC,CAAA;AAAA,GACpC;AACA,EAAA,IAAI,CAAA,CAAE,wBAAwB,MAAA,EAAW;AACvC,IAAA,MAAA,CAAO,KAAK,CAAA,qBAAA,EAAwBA,IAAAA,CAAI,CAAA,CAAE,mBAAmB,CAAC,CAAA,CAAE,CAAA;AAAA,EAClE;AACA,EAAA,MAAA,CAAO,KAAK,CAAA,QAAA,EAAW,IAAA,CAAK,UAAU,CAAA,CAAE,MAAM,CAAC,CAAA,CAAE,CAAA;AACjD,EAAA,MAAA,CAAO,KAAK,CAAA,UAAA,EAAa,IAAA,CAAK,UAAU,CAAA,CAAE,QAAQ,CAAC,CAAA,CAAE,CAAA;AACrD,EAAA,OAAO,CAAA;AAAA,IAAA,EAAU,MAAA,CAAO,IAAA,CAAK,SAAS,CAAC,CAAA;AAAA,GAAA,CAAA;AACzC;AAEA,SAASG,eAAc,OAAA,EAAkD;AACvE,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,IAAA,CAAK,OAAO,EAAE,IAAA,EAAK;AACtC,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,IAAA,CAAK,IAAI,GAAA,CAAI,GAAA,CAAI,GAAA,CAAIF,SAAQ,CAAC,CAAC,CAAA,CAAE,IAAA,EAAK;AAE9D,EAAA,MAAM,KAAA,GAAkB;AAAA,IACtB,+DAAA;AAAA,IACA,yFAAA;AAAA,IACA,cAAc,mBAAmB,CAAA,CAAA;AAAA,IACjC,yEAAA;AAAA,IACA,4EAAA;AAAA,IACA,qEAAA;AAAA,IACA,iEAAA;AAAA,IACA,EAAA;AAAA,IACA,gDAAA;AAAA,IACA,EAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,IAAA,CAAK,SAAA,CAAU,EAAE,CAAC,CAAA,EAAA,EAAKC,eAAAA,CAAe,OAAA,CAAQ,EAAE,CAAE,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,EACxE;AACA,EAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AACd,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,KAAK,iEAAiE,CAAA;AAC5E,EAAA,KAAA,CAAM,KAAK,wDAAwD,CAAA;AACnE,EAAA,KAAA,MAAW,KAAK,SAAA,EAAW;AACzB,IAAA,KAAA,CAAM,KAAK,CAAA,EAAA,EAAK,IAAA,CAAK,SAAA,CAAU,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,EACtC;AACA,EAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AACd,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAIA,eAAeE,UAAS,GAAA,EAAgD;AACtE,EAAA,MAAM,GAAA,GAAMC,SAAQ,CAAC,CAAA;AACrB,EAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAC9D,EAAA,MAAM,SAASR,eAAAA,CAAe,KAAA,CAAM,MAAM,GAAA,CAAI,WAAA,CAAY,GAAG,CAAC,CAAA;AAE9D,EAAA,MAAM,UAA2C,EAAC;AAClD,EAAA,KAAA,MAAW,KAAA,IAAS,OAAO,IAAA,EAAM;AAC/B,IAAA,MAAM,UAAA,GAAaE,MAAAA,CAAM,KAAA,CAAM,WAAW,CAAA;AAC1C,IAAA,MAAM,WAAA,GAAcA,MAAAA,CAAM,KAAA,CAAM,YAAY,CAAA;AAC5C,IAAA,IAAI,UAAA,KAAe,MAAA,IAAa,WAAA,KAAgB,MAAA,EAAW;AAE3D,IAAA,IAAI,UAAA,KAAe,CAAA,IAAK,WAAA,KAAgB,CAAA,EAAG;AAE3C,IAAA,MAAM,KAAA,GAAyB;AAAA,MAC7B,UAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAA,EAAQE,SAAAA,CAAS,KAAA,CAAM,EAAE,CAAA;AAAA,MACzB,QAAA,EAAU;AAAA,KACZ;AAEA,IAAA,IAAI,KAAA,CAAM,gBAAA,KAAqB,IAAA,IAAQ,UAAA,GAAa,CAAA,EAAG;AACrD,MAAA,MAAM,UAAA,GAAaF,MAAAA,CAAM,KAAA,CAAM,YAAY,CAAA;AAC3C,MAAA,IAAI,eAAe,MAAA,EAAW;AAC5B,QAAA,KAAA,CAAM,mBAAA,GAAsBD,OAAAA,CAAO,UAAA,GAAa,UAAU,CAAA;AAAA,MAC5D;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,KAAA,CAAM,EAAE,CAAA,GAAI,KAAA;AAAA,EACtB;AAEA,EAAA,OAAO,EAAE,CAACJ,YAAW,GAAGS,cAAAA,CAAc,OAAO,CAAA,EAAE;AACjD;AAEA,IAAME,QAAAA,GAAU;AAAA,EACd;AAAA,IACE,EAAA,EAAI,cAAA;AAAA,IACJ,GAAA,EAAK,mBAAA;AAAA;AAAA;AAAA,IAGL,OAAA,EAAS,EAAE,aAAA,EAAe,6BAAA;AAA8B;AAE5D,CAAA;AAEO,IAAM,uBAAuB,eAAA,CAAgB;AAAA,EAClD,IAAA,EAAM,cAAA;AAAA,EACN,QAAA,EAAU,KAAA;AAAA,EACV,OAAA,EAAAA,QAAAA;AAAA,EACA,QAAA,EAAAD;AACF,CAAC,CAAA;AC9KD,IAAM,sBAAA,GAAyB,yCAAA;AAG/B,IAAMV,YAAAA,GAAc,gEAAA;AAWpB,IAAM,gBAAA,GAAmBE,EACtB,MAAA,CAAO;AAAA,EACN,QAAA,EAAUA,EAAE,MAAA,EAAO;AAAA,EACnB,MAAA,EAAQA,EAAE,MAAA,EAAO;AAAA,EACjB,cAAA,EAAgBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACpC,OAAA,EAASA,EACN,MAAA,CAAO;AAAA,IACN,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,IAC3B,MAAA,EAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,GAC7B,EACA,QAAA,EAAS;AAAA,EACZ,cAAA,EAAgBA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACrC,0BAAA,EAA4BA,CAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AAC1C,CAAC,EACA,WAAA,EAAY;AAEf,IAAM,aAAA,GAAgBA,EACnB,MAAA,CAAO;AAAA,EACN,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,SAAA,EAAWA,CAAAA,CAAE,KAAA,CAAM,gBAAgB,EAAE,QAAA;AACvC,CAAC,EACA,WAAA,EAAY;AAEf,IAAMC,eAAAA,GAAiBD,EAAE,MAAA,CAAO;AAAA,EAC9B,IAAA,EAAMA,CAAAA,CAAE,KAAA,CAAM,aAAa;AAC7B,CAAC,CAAA;AAsBD,SAAS,OAAO,CAAA,EAAmB;AACjC,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,GAAM,CAAA,GAAI,GAAA;AAClC;AAIA,SAAS,kBAAkB,CAAA,EAA0C;AACnE,EAAA,MAAM,MAAA,GAAmB;AAAA,IACvB,CAAA,UAAA,EAAa,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,QAAQ,CAAC,CAAA,CAAA;AAAA,IACvC,CAAA,QAAA,EAAW,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,MAAM,CAAC,CAAA;AAAA,GACrC;AACA,EAAA,IAAI,CAAA,CAAE,kBAAkB,MAAA,EAAW,MAAA,CAAO,KAAK,CAAA,eAAA,EAAkB,CAAA,CAAE,aAAa,CAAA,CAAE,CAAA;AAClF,EAAA,IAAI,CAAA,CAAE,eAAe,MAAA,EAAW,MAAA,CAAO,KAAK,CAAA,YAAA,EAAe,CAAA,CAAE,UAAU,CAAA,CAAE,CAAA;AACzE,EAAA,IAAI,CAAA,CAAE,gBAAgB,MAAA,EAAW,MAAA,CAAO,KAAK,CAAA,aAAA,EAAgB,CAAA,CAAE,WAAW,CAAA,CAAE,CAAA;AAC5E,EAAA,IAAI,CAAA,CAAE,kBAAkB,MAAA,EAAW,MAAA,CAAO,KAAK,CAAA,eAAA,EAAkB,CAAA,CAAE,aAAa,CAAA,CAAE,CAAA;AAClF,EAAA,IAAI,CAAA,CAAE,6BAA6B,MAAA,EAAW;AAC5C,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,0BAAA,EAA6B,CAAA,CAAE,wBAAwB,CAAA,CAAE,CAAA;AAAA,EACvE;AACA,EAAA,OAAO,CAAA;AAAA,QAAA,EAAoB,MAAA,CAAO,IAAA,CAAK,aAAa,CAAC,CAAA;AAAA,OAAA,CAAA;AACvD;AAEA,SAASM,eAAAA,CAAe,IAAY,CAAA,EAAkC;AACpE,EAAA,MAAM,gBAAgB,CAAA,CAAE,SAAA,CAAU,IAAI,iBAAiB,CAAA,CAAE,KAAK,KAAK,CAAA;AACnE,EAAA,OAAO;AAAA,IACL,CAAA,EAAA,EAAK,IAAA,CAAK,SAAA,CAAU,EAAE,CAAC,CAAA,GAAA,CAAA;AAAA,IACvB,CAAA,YAAA,EAAe,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,MAAM,CAAC,CAAA,CAAA,CAAA;AAAA,IACvC,CAAA,gBAAA,CAAA;AAAA,IACA,aAAA;AAAA,IACA,CAAA,MAAA,CAAA;AAAA,IACA,CAAA,IAAA;AAAA,GACF,CAAE,KAAK,IAAI,CAAA;AACb;AAEA,SAASC,eAAc,OAAA,EAAwD;AAC7E,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,IAAA,CAAK,OAAO,EAAE,IAAA,EAAK;AAEtC,EAAA,MAAM,KAAA,GAAkB;AAAA,IACtB,kEAAA;AAAA,IACA,yFAAA;AAAA,IACA,cAAc,sBAAsB,CAAA,CAAA;AAAA,IACpC,4EAAA;AAAA,IACA,wEAAA;AAAA,IACA,6EAAA;AAAA,IACA,0EAAA;AAAA,IACA,qEAAA;AAAA,IACA,wEAAA;AAAA,IACA,wEAAA;AAAA,IACA,qCAAA;AAAA,IACA,EAAA;AAAA,IACA,6CAAA;AAAA,IACA,oBAAA;AAAA,IACA,kBAAA;AAAA,IACA,0BAAA;AAAA,IACA,uBAAA;AAAA,IACA,wBAAA;AAAA,IACA,2BAAA;AAAA,IACA,sCAAA;AAAA,IACA,GAAA;AAAA,IACA,EAAA;AAAA,IACA,qCAAA;AAAA,IACA,kBAAA;AAAA,IACA,yCAAA;AAAA,IACA,GAAA;AAAA,IACA,EAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,IAAA,KAAA,CAAM,KAAKD,eAAAA,CAAe,EAAA,EAAI,OAAA,CAAQ,EAAE,CAAE,CAAC,CAAA;AAAA,EAC7C;AACA,EAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AACd,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAIA,eAAeE,UAAS,GAAA,EAAgD;AACtE,EAAA,MAAM,GAAA,GAAMC,SAAQ,CAAC,CAAA;AACrB,EAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,MAAM,uCAAuC,CAAA;AACjE,EAAA,MAAM,SAASR,eAAAA,CAAe,KAAA,CAAM,MAAM,GAAA,CAAI,WAAA,CAAY,GAAG,CAAC,CAAA;AAE9D,EAAA,MAAM,UAAiD,EAAC;AACxD,EAAA,KAAA,MAAW,KAAA,IAAS,OAAO,IAAA,EAAM;AAC/B,IAAA,MAAM,aAAA,GAAA,CAAiB,KAAA,CAAM,SAAA,IAAa,EAAC,EAAG,OAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,KAAW,MAAM,CAAA;AAC/E,IAAA,IAAI,aAAA,CAAc,WAAW,CAAA,EAAG;AAEhC,IAAA,MAAM,SAAA,GAA6C,aAAA,CAChD,GAAA,CAAI,CAAC,CAAA,KAAM;AACV,MAAA,MAAM,KAAA,GAAuC;AAAA,QAC3C,UAAU,CAAA,CAAE,QAAA;AAAA,QACZ,QAAQ,CAAA,CAAE;AAAA,OACZ;AACA,MAAA,IAAI,CAAA,CAAE,cAAA,KAAmB,MAAA,EAAW,KAAA,CAAM,gBAAgB,CAAA,CAAE,cAAA;AAC5D,MAAA,IAAI,CAAA,CAAE,SAAS,KAAA,KAAU,MAAA,QAAiB,UAAA,GAAa,MAAA,CAAO,CAAA,CAAE,OAAA,CAAQ,KAAK,CAAA;AAC7E,MAAA,IAAI,CAAA,CAAE,SAAS,MAAA,KAAW,MAAA,QAAiB,WAAA,GAAc,MAAA,CAAO,CAAA,CAAE,OAAA,CAAQ,MAAM,CAAA;AAChF,MAAA,IAAI,CAAA,CAAE,cAAA,KAAmB,MAAA,EAAW,KAAA,CAAM,gBAAgB,CAAA,CAAE,cAAA;AAC5D,MAAA,IAAI,CAAA,CAAE,+BAA+B,MAAA,EAAW;AAC9C,QAAA,KAAA,CAAM,2BAA2B,CAAA,CAAE,0BAAA;AAAA,MACrC;AACA,MAAA,OAAO,KAAA;AAAA,IACT,CAAC,CAAA,CACA,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,aAAA,CAAc,CAAA,CAAE,QAAQ,CAAC,CAAA;AAEtD,IAAA,OAAA,CAAQ,MAAM,EAAE,CAAA,GAAI,EAAE,MAAA,EAAQ,KAAA,CAAM,IAAI,SAAA,EAAU;AAAA,EACpD;AAEA,EAAA,OAAO,EAAE,CAACH,YAAW,GAAGS,cAAAA,CAAc,OAAO,CAAA,EAAE;AACjD;AAEA,IAAME,QAAAA,GAAU;AAAA,EACd;AAAA,IACE,EAAA,EAAI,iBAAA;AAAA,IACJ,GAAA,EAAK;AAAA;AAET,CAAA;AAEO,IAAM,0BAA0B,eAAA,CAAgB;AAAA,EACrD,IAAA,EAAM,iBAAA;AAAA,EACN,QAAA,EAAU,KAAA;AAAA,EACV,OAAA,EAAAA,QAAAA;AAAA,EACA,QAAA,EAAAD;AACF,CAAC,CAAA;AChLD,IAAMV,YAAAA,GAAc,6DAAA;AAepB,IAAM,oBAAA,GAAuBE,EAC1B,MAAA,CAAO;AAAA,EACN,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,YAAA,EAAcA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAClC,gBAAA,EAAkBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACtC,UAAA,EAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACzB,CAAC,EACA,WAAA,EAAY;AACf,IAAM,uBAAA,GAA0BA,EAAE,MAAA,CAAO,EAAE,MAAMA,CAAAA,CAAE,KAAA,CAAM,oBAAoB,CAAA,EAAG,CAAA;AAEhF,IAAM,eAAA,GAAkBA,EACrB,MAAA,CAAO;AAAA,EACN,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,cAAA,EAAgBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACpC,qBAAA,EAAuBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACpC,CAAC,EACA,WAAA,EAAY;AACf,IAAM,kBAAA,GAAqBA,EAAE,MAAA,CAAO,EAAE,MAAMA,CAAAA,CAAE,KAAA,CAAM,eAAe,CAAA,EAAG,CAAA;AAGtE,IAAM,cAAA,GAAiBA,EACpB,MAAA,CAAO;AAAA,EACN,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,gBAAgBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AACxC,CAAC,EACA,WAAA,EAAY;AACf,IAAM,iBAAA,GAAoBA,EAAE,MAAA,CAAO,EAAE,MAAMA,CAAAA,CAAE,KAAA,CAAM,cAAc,CAAA,EAAG,CAAA;AAEpE,IAAM,mBAAA,GAAsBA,EACzB,MAAA,CAAO;AAAA,EACN,EAAA,EAAIA,EAAE,MAAA,EAAO;AAAA,EACb,cAAA,EAAgBA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAC7B,CAAC,EACA,WAAA,EAAY;AACf,IAAM,sBAAA,GAAyBA,EAAE,MAAA,CAAO,EAAE,MAAMA,CAAAA,CAAE,KAAA,CAAM,mBAAmB,CAAA,EAAG,CAAA;AAI9E,SAASM,gBAAe,CAAA,EAA+B;AACrD,EAAA,MAAM,MAAA,GAAmB,CAAC,CAAA,eAAA,EAAkB,CAAA,CAAE,aAAa,CAAA,CAAE,CAAA;AAC7D,EAAA,IAAI,CAAA,CAAE,cAAc,MAAA,EAAW,MAAA,CAAO,KAAK,CAAA,WAAA,EAAc,CAAA,CAAE,SAAS,CAAA,CAAE,CAAA;AACtE,EAAA,IAAI,CAAA,CAAE,WAAA,KAAgB,MAAA,EAAW,MAAA,CAAO,IAAA,CAAK,CAAA,aAAA,EAAgB,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,WAAW,CAAC,CAAA,CAAE,CAAA;AAC5F,EAAA,MAAA,CAAO,KAAK,CAAA,UAAA,EAAa,IAAA,CAAK,UAAU,CAAA,CAAE,QAAQ,CAAC,CAAA,CAAE,CAAA;AACrD,EAAA,OAAO,CAAA,EAAA,EAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CAAA;AAC/B;AAEA,SAASC,eAAc,OAAA,EAAqD;AAC1E,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,IAAA,CAAK,OAAO,EAAE,IAAA,EAAK;AACtC,EAAA,MAAM,KAAA,GAAkB;AAAA,IACtB,sEAAA;AAAA,IACA,mGAAA;AAAA,IACA,yEAAA;AAAA,IACA,0DAAA;AAAA,IACA,6EAAA;AAAA,IACA,kFAAA;AAAA,IACA,EAAA;AAAA,IACA,uCAAA;AAAA,IACA,yBAAA;AAAA,IACA,sBAAA;AAAA,IACA,wBAAA;AAAA,IACA,uDAAA;AAAA,IACA,GAAA;AAAA,IACA,EAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,IAAA,CAAK,SAAA,CAAU,EAAE,CAAC,CAAA,EAAA,EAAKD,eAAAA,CAAe,OAAA,CAAQ,EAAE,CAAE,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,EACxE;AACA,EAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AACd,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAIA,eAAeE,UAAS,GAAA,EAAgD;AACtE,EAAA,MAAM,UAA8C,EAAC;AAErD,EAAA,MAAM,eAAeC,QAAAA,CAAQ,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,OAAO,eAAe,CAAA;AAC/D,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,MAAM,SAAS,uBAAA,CAAwB,KAAA,CAAM,MAAM,GAAA,CAAI,WAAA,CAAY,YAAY,CAAC,CAAA;AAChF,IAAA,KAAA,MAAW,CAAA,IAAK,OAAO,IAAA,EAAM;AAC3B,MAAA,IAAI,CAAC,CAAA,CAAE,gBAAA,IAAoB,CAAC,EAAE,UAAA,EAAY;AAC1C,MAAA,OAAA,CAAQ,CAAA,CAAE,EAAE,CAAA,GAAI;AAAA,QACd,eAAe,CAAA,CAAE,gBAAA;AAAA,QACjB,WAAW,CAAA,CAAE,UAAA;AAAA,QACb,GAAI,EAAE,YAAA,GAAe,EAAE,aAAa,CAAA,CAAE,YAAA,KAAiB,EAAC;AAAA,QACxD,QAAA,EAAU;AAAA,OACZ;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,UAAUA,QAAAA,CAAQ,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,OAAO,UAAU,CAAA;AACrD,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,MAAM,SAAS,kBAAA,CAAmB,KAAA,CAAM,MAAM,GAAA,CAAI,WAAA,CAAY,OAAO,CAAC,CAAA;AACtE,IAAA,KAAA,MAAW,CAAA,IAAK,OAAO,IAAA,EAAM;AAC3B,MAAA,IAAI,CAAC,EAAE,cAAA,EAAgB;AACvB,MAAA,OAAA,CAAQ,CAAA,CAAE,EAAE,CAAA,GAAI;AAAA,QACd,eAAe,CAAA,CAAE,cAAA;AAAA,QACjB,GAAI,EAAE,qBAAA,GAAwB,EAAE,WAAW,CAAA,CAAE,qBAAA,KAA0B,EAAC;AAAA,QACxE,QAAA,EAAU;AAAA,OACZ;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,SAASA,QAAAA,CAAQ,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,OAAO,SAAS,CAAA;AACnD,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,MAAM,SAAS,iBAAA,CAAkB,KAAA,CAAM,MAAM,GAAA,CAAI,WAAA,CAAY,MAAM,CAAC,CAAA;AACpE,IAAA,KAAA,MAAW,CAAA,IAAK,OAAO,IAAA,EAAM;AAC3B,MAAA,IAAI,CAAC,EAAE,cAAA,EAAgB;AACvB,MAAA,OAAA,CAAQ,CAAA,CAAE,EAAE,CAAA,GAAI,EAAE,eAAe,CAAA,CAAE,cAAA,EAAgB,UAAU,KAAA,EAAM;AAAA,IACrE;AAAA,EACF;AAEA,EAAA,MAAM,cAAcA,QAAAA,CAAQ,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,OAAO,cAAc,CAAA;AAC7D,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,MAAM,SAAS,sBAAA,CAAuB,KAAA,CAAM,MAAM,GAAA,CAAI,WAAA,CAAY,WAAW,CAAC,CAAA;AAC9E,IAAA,KAAA,MAAW,CAAA,IAAK,OAAO,IAAA,EAAM;AAC3B,MAAA,IAAI,CAAC,EAAE,cAAA,EAAgB;AACvB,MAAA,OAAA,CAAQ,CAAA,CAAE,EAAE,CAAA,GAAI,EAAE,eAAe,CAAA,CAAE,cAAA,EAAgB,UAAU,UAAA,EAAW;AAAA,IAC1E;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,CAACX,YAAW,GAAGS,cAAAA,CAAc,OAAO,CAAA,EAAE;AACjD;AAEA,IAAME,QAAAA,GAA2B;AAAA,EAC/B;AAAA,IACE,EAAA,EAAI,eAAA;AAAA,IACJ,GAAA,EAAK,gDAAA;AAAA,IACL,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,uBAAA;AAAA,MACb,mBAAA,EAAqB;AAAA;AACvB,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAI,UAAA;AAAA,IACJ,GAAA,EAAK,uCAAA;AAAA,IACL,OAAA,EAAS,EAAE,aAAA,EAAe,yBAAA;AAA0B,GACtD;AAAA,EACA;AAAA,IACE,EAAA,EAAI,SAAA;AAAA,IACJ,GAAA,EAAK,4BAAA;AAAA,IACL,OAAA,EAAS,EAAE,aAAA,EAAe,wBAAA;AAAyB,GACrD;AAAA,EACA;AAAA,IACE,EAAA,EAAI,cAAA;AAAA,IACJ,GAAA,EAAK,mCAAA;AAAA,IACL,OAAA,EAAS,EAAE,aAAA,EAAe,6BAAA;AAA8B;AAE5D,CAAA;AAEO,IAAM,6BAA6B,eAAA,CAAgB;AAAA,EACxD,IAAA,EAAM,qBAAA;AAAA,EACN,QAAA,EAAU,KAAA;AAAA,EACV,OAAA,EAAAA,QAAAA;AAAA,EACA,QAAA,EAAAD;AACF,CAAC,CAAA;;;ACnLD,SAAS,eAAe,CAAA,EAAyB;AAC/C,EAAA,MAAM,KAAA,GAAkB,CAAC,KAAK,CAAA;AAC9B,EAAA,KAAA,CAAM,KAAK,CAAA,eAAA,EAAkB,IAAA,CAAK,UAAU,CAAA,CAAE,SAAS,CAAC,CAAA,CAAA,CAAG,CAAA;AAC3D,EAAA,KAAA,CAAM,KAAK,CAAA,qBAAA,EAAwB,IAAA,CAAK,UAAU,CAAA,CAAE,eAAe,CAAC,CAAA,CAAA,CAAG,CAAA;AACvE,EAAA,KAAA,CAAM,KAAK,CAAA,cAAA,EAAiB,IAAA,CAAK,UAAU,CAAA,CAAE,QAAQ,CAAC,CAAA,CAAA,CAAG,CAAA;AACzD,EAAA,KAAA,CAAM,KAAK,CAAA,WAAA,EAAc,IAAA,CAAK,UAAU,CAAA,CAAE,KAAK,CAAC,CAAA,CAAA,CAAG,CAAA;AACnD,EAAA,KAAA,CAAM,KAAK,CAAA,iBAAA,EAAoB,IAAA,CAAK,UAAU,CAAA,CAAE,WAAW,CAAC,CAAA,CAAA,CAAG,CAAA;AAC/D,EAAA,KAAA,CAAM,KAAK,CAAA,YAAA,EAAe,IAAA,CAAK,UAAU,CAAA,CAAE,MAAM,CAAC,CAAA,CAAA,CAAG,CAAA;AACrD,EAAA,KAAA,CAAM,KAAK,CAAA,qBAAA,EAAwB,IAAA,CAAK,UAAU,CAAA,CAAE,eAAe,CAAC,CAAA,CAAA,CAAG,CAAA;AACvE,EAAA,KAAA,CAAM,IAAA;AAAA,IACJ,CAAA,yBAAA,EAA4B,CAAA,CAAE,kBAAA,CAAmB,GAAA,CAAI,CAAA,CAAA,KAAK,IAAA,CAAK,SAAA,CAAU,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA;AAAA,GACzF;AACA,EAAA,IAAI,CAAA,CAAE,OAAA,KAAY,MAAA,EAAW,KAAA,CAAM,IAAA,CAAK,CAAA,aAAA,EAAgB,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,OAAO,CAAC,CAAA,CAAA,CAAG,CAAA;AACpF,EAAA,IAAI,CAAA,CAAE,aAAa,MAAA,EAAW,KAAA,CAAM,KAAK,CAAA,cAAA,EAAiB,CAAA,CAAE,QAAQ,CAAA,CAAA,CAAG,CAAA;AACvE,EAAA,IAAI,CAAA,CAAE,UAAA,KAAe,MAAA,EAAW,KAAA,CAAM,IAAA,CAAK,CAAA,gBAAA,EAAmB,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,UAAU,CAAC,CAAA,CAAA,CAAG,CAAA;AAC7F,EAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,MAAA,EAAW,KAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAY,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,GAAG,CAAC,CAAA,CAAA,CAAG,CAAA;AACxE,EAAA,KAAA,CAAM,KAAK,MAAM,CAAA;AACjB,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AASO,SAAS,oBAAA,CACd,aAAA,EACA,UAAA,EACA,MAAA,EACQ;AACR,EAAA,MAAM,KAAA,GAAkB;AAAA,IACtB,sDAAsD,aAAa,CAAA,CAAA;AAAA,IACnE,6DAAA;AAAA,IACA,EAAA;AAAA,IACA,4EAAA;AAAA,IACA,EAAA;AAAA,IACA,gBAAgB,UAAU,CAAA,6BAAA;AAAA,GAC5B;AACA,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,cAAA,CAAe,CAAC,CAAC,CAAA;AACpD,EAAA,KAAA,CAAM,KAAK,YAAY,CAAA;AACvB,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;;;AC7BO,IAAM,iBAAA,GAAmC;AAAA,EAC9C,EAAA,EAAI,kBAAA;AAAA,EACJ,GAAA,EAAK,qCAAA;AAAA;AAAA,EAEL,OAAA,EAAS,EAAE,YAAA,EAAc,wBAAA;AAC3B,CAAA;AAEA,IAAMV,YAAAA,GAAc,+DAAA;AAEb,IAAM,kBAAoC,eAAA,CAAgB;AAAA,EAC/D,IAAA,EAAM,kBAAA;AAAA,EACN,QAAA,EAAU,OAAA;AAAA,EACV,OAAA,EAAS,CAAC,iBAAiB,CAAA;AAAA,EAE3B,MAAM,SAAS,GAAA,EAAgD;AAE7D,IAAA,MAAM,WAAW,8BAAA,CAA+B,KAAA;AAAA,MAC9C,MAAM,GAAA,CAAI,WAAA,CAAY,iBAAiB;AAAA,KACzC;AACA,IAAA,MAAM,MAAA,GAAS,oBAAoB,QAAQ,CAAA;AAC3C,IAAA,OAAO;AAAA,MACL,CAACA,YAAW,GAAG,oBAAA;AAAA,QACb,kBAAA;AAAA,QACA,mBAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,EACF;AACF,CAAC,CAAA;AC5BM,IAAM,cAAA,GAAgC;AAAA,EAC3C,EAAA,EAAI,eAAA;AAAA,EACJ,GAAA,EAAK,qCAAA;AAAA;AAAA;AAAA,EAGL,MAAA,EAAQ,MAAA;AAAA,EACR,OAAA,EAAS;AAAA,IACP,aAAA,EAAe,4BAAA;AAAA,IACf,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA,IAAA,EAAM,EAAE,UAAA,EAAY,QAAA;AACtB,CAAA;AAEA,IAAMA,YAAAA,GAAc,4DAAA;AAEb,IAAM,eAAiC,eAAA,CAAgB;AAAA,EAC5D,IAAA,EAAM,eAAA;AAAA,EACN,QAAA,EAAU,OAAA;AAAA,EACV,OAAA,EAAS,CAAC,cAAc,CAAA;AAAA,EAExB,MAAM,SAAS,GAAA,EAAgD;AAE7D,IAAA,MAAM,WAAW,2BAAA,CAA4B,KAAA;AAAA,MAC3C,MAAM,GAAA,CAAI,WAAA,CAAY,cAAc;AAAA,KACtC;AACA,IAAA,MAAM,MAAA,GAAS,iBAAiB,QAAQ,CAAA;AACxC,IAAA,OAAO;AAAA,MACL,CAACA,YAAW,GAAG,oBAAA;AAAA,QACb,eAAA;AAAA,QACA,gBAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,EACF;AACF,CAAC,CAAA;;;ACqCD,IAAM,OAAA,GAAyC;AAAA,EAC7C,iBAAA,EAAmB,EAAE,YAAA,EAAc,IAAA,EAAM,UAAU,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,UAAA,EAAY,EAAA,EAAG;AAAA,EAC1F,eAAA,EAAiB,EAAE,YAAA,EAAc,IAAA,EAAM,UAAU,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,UAAA,EAAY,CAAA,EAAE;AAAA,EACzF,aAAA,EAAe,EAAE,YAAA,EAAc,IAAA,EAAM,UAAU,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,UAAA,EAAY,CAAA,EAAE;AAAA,EACpF,YAAA,EAAc,EAAE,YAAA,EAAc,IAAA,EAAM,UAAU,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,UAAA,EAAY,CAAA,EAAE;AAAA,EACnF,kBAAA,EAAoB,EAAE,YAAA,EAAc,IAAA,EAAM,UAAU,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,UAAA,EAAY,CAAA,EAAE;AAAA,EACzF,kBAAA,EAAoB,EAAE,YAAA,EAAc,IAAA,EAAM,UAAU,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,UAAA,EAAY,CAAA,EAAE;AAAA,EAC5F,oBAAA,EAAsB,EAAE,YAAA,EAAc,IAAA,EAAM,UAAU,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,UAAA,EAAY,CAAA,EAAE;AAAA,EAC9F,YAAA,EAAc,EAAE,YAAA,EAAc,IAAA,EAAM,UAAU,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,UAAA,EAAY,CAAA,EAAE;AAAA,EACnF,YAAA,EAAc,EAAE,YAAA,EAAc,IAAA,EAAM,UAAU,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,UAAA,EAAY,CAAA,EAAE;AAAA,EACnF,UAAA,EAAY,EAAE,YAAA,EAAc,IAAA,EAAM,UAAU,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,UAAA,EAAY,CAAA,EAAE;AAAA,EACjF,aAAA,EAAe,EAAE,YAAA,EAAc,IAAA,EAAM,UAAU,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,UAAA,EAAY,CAAA,EAAE;AAAA,EACpF,mBAAA,EAAqB,EAAE,YAAA,EAAc,IAAA,EAAM,UAAU,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,UAAA,EAAY,CAAA,EAAE;AAAA,EAC1F,cAAA,EAAgB,EAAE,YAAA,EAAc,IAAA,EAAM,UAAU,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,UAAA,EAAY,CAAA;AACrF,CAAA;AAGA,IAAM,aAAA,uBAAoB,GAAA,CAAI;AAAA,EAC5B,iBAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA,oBAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,IAAM,qBAAA,GAA+C;AAAA,EACnD,SAAA,EAAW,CAAC,KAAA,EAAO,MAAA,EAAQ,QAAQ,KAAA,EAAO,KAAA,EAAO,OAAO,KAAK,CAAA;AAAA,EAC7D,OAAA,EAAS;AACX,CAAA;AAEA,IAAM,kBAAA,GAA4C;AAAA,EAChD,SAAA,EAAW,CAAC,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,OAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAK,CAAA;AAAA,EAC3E,OAAA,EAAS;AACX,CAAA;AAEA,IAAM,mBAAA,GAA6C;AAAA,EACjD,SAAA,EAAW,CAAC,KAAA,EAAO,MAAA,EAAQ,QAAQ,MAAA,EAAQ,MAAA,EAAQ,OAAO,KAAK,CAAA;AAAA,EAC/D,OAAA,EAAS;AACX,CAAA;AAEA,IAAM,mBAAA,GAA6C;AAAA,EACjD,SAAA,EAAW;AAAA,IACT,KAAA;AAAA,IAAO,MAAA;AAAA,IAAQ,MAAA;AAAA,IAAQ,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC5C,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO;AAAA,GAChB;AAAA,EACA,OAAA,EAAS;AACX,CAAA;AAEA,IAAM,iBAAA,GAA2C;AAAA,EAC/C,SAAA,EAAW;AAAA,IACT,KAAA;AAAA,IAAO,MAAA;AAAA,IAAQ,MAAA;AAAA,IAAQ,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC5C,KAAA;AAAA,IAAO;AAAA,GACT;AAAA,EACA,OAAA,EAAS;AACX,CAAA;AAEA,IAAM,oBAAA,GAA8C;AAAA,EAClD,SAAA,EAAW,CAAC,KAAK,CAAA;AAAA,EACjB,OAAA,EAAS;AACX,CAAA;AAYA,IAAM,WAAA,GAAyC;AAAA,EAC7C,iBAAA,EAAmB;AAAA,IACjB,EAAA,EAAI,iBAAA;AAAA,IACJ,IAAA,EAAM,iBAAA;AAAA,IACN,YAAA,EAAc,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,IAAA,EAAK;AAAA,IAC3C,eAAA,EAAiB,EAAE,SAAA,EAAW,IAAA,EAAM,WAAW,aAAA,EAAe,QAAA,EAAU,EAAA,EAAI,QAAA,EAAU,KAAA,EAAM;AAAA,IAC5F,WAAA,EAAa,mBAAA;AAAA,IACb,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,EAAA,EAAI,eAAA;AAAA,IACJ,IAAA,EAAM,eAAA;AAAA,IACN,YAAA,EAAc,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,IAAA,EAAK;AAAA,IAC3C,eAAA,EAAiB,EAAE,SAAA,EAAW,IAAA,EAAM,WAAW,aAAA,EAAe,QAAA,EAAU,CAAA,EAAG,QAAA,EAAU,KAAA,EAAM;AAAA,IAC3F,WAAA,EAAa,iBAAA;AAAA,IACb,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,aAAA,EAAe;AAAA,IACb,EAAA,EAAI,aAAA;AAAA,IACJ,IAAA,EAAM,aAAA;AAAA,IACN,YAAA,EAAc,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,IAAA,EAAK;AAAA,IAC3C,eAAA,EAAiB,EAAE,SAAA,EAAW,IAAA,EAAM,WAAW,aAAA,EAAe,QAAA,EAAU,CAAA,EAAG,QAAA,EAAU,KAAA,EAAM;AAAA,IAC3F,WAAA,EAAa,qBAAA;AAAA,IACb,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,EAAA,EAAI,YAAA;AAAA,IACJ,IAAA,EAAM,YAAA;AAAA,IACN,YAAA,EAAc,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,IAAA,EAAK;AAAA,IAC3C,eAAA,EAAiB,EAAE,SAAA,EAAW,IAAA,EAAM,WAAW,cAAA,EAAgB,QAAA,EAAU,CAAA,EAAG,QAAA,EAAU,KAAA,EAAM;AAAA,IAC5F,WAAA,EAAa,kBAAA;AAAA,IACb,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,EAAA,EAAI,kBAAA;AAAA,IACJ,IAAA,EAAM,kBAAA;AAAA,IACN,YAAA,EAAc,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,IAAA,EAAK;AAAA,IAC3C,eAAA,EAAiB,EAAE,SAAA,EAAW,IAAA,EAAM,WAAW,aAAA,EAAe,QAAA,EAAU,CAAA,EAAG,QAAA,EAAU,IAAA,EAAK;AAAA,IAC1F,WAAA,EAAa,qBAAA;AAAA,IACb,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,EAAA,EAAI,kBAAA;AAAA,IACJ,IAAA,EAAM,kBAAA;AAAA,IACN,YAAA,EAAc,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,IAAA,EAAK;AAAA,IAC3C,eAAA,EAAiB,EAAE,SAAA,EAAW,IAAA,EAAM,WAAW,aAAA,EAAe,QAAA,EAAU,CAAA,EAAG,QAAA,EAAU,IAAA,EAAK;AAAA,IAC1F,WAAA,EAAa,qBAAA;AAAA,IACb,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,oBAAA,EAAsB;AAAA,IACpB,EAAA,EAAI,oBAAA;AAAA,IACJ,IAAA,EAAM,oBAAA;AAAA,IACN,YAAA,EAAc,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,KAAA,EAAM;AAAA,IAC5C,eAAA,EAAiB,EAAE,SAAA,EAAW,KAAA,EAAO,WAAW,MAAA,EAAQ,QAAA,EAAU,CAAA,EAAG,QAAA,EAAU,KAAA,EAAM;AAAA,IACrF,WAAA,EAAa,mBAAA;AAAA,IACb,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,EAAA,EAAI,YAAA;AAAA,IACJ,IAAA,EAAM,YAAA;AAAA,IACN,YAAA,EAAc,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,IAAA,EAAK;AAAA,IAC3C,eAAA,EAAiB,EAAE,SAAA,EAAW,IAAA,EAAM,WAAW,aAAA,EAAe,QAAA,EAAU,EAAA,EAAI,QAAA,EAAU,KAAA,EAAM;AAAA,IAC5F,WAAA,EAAa,qBAAA;AAAA,IACb,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,EAAA,EAAI,SAAA;AAAA,IACJ,IAAA,EAAM,YAAA;AAAA,IACN,YAAA,EAAc,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,KAAA,EAAM;AAAA,IAC5C,eAAA,EAAiB,EAAE,SAAA,EAAW,KAAA,EAAO,WAAW,MAAA,EAAQ,QAAA,EAAU,CAAA,EAAG,QAAA,EAAU,KAAA,EAAM;AAAA,IACrF,WAAA,EAAa,oBAAA;AAAA,IACb,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,UAAA,EAAY;AAAA,IACV,EAAA,EAAI,SAAA;AAAA,IACJ,IAAA,EAAM,eAAA;AAAA,IACN,YAAA,EAAc,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,KAAA,EAAM;AAAA,IAC5C,eAAA,EAAiB,EAAE,SAAA,EAAW,KAAA,EAAO,WAAW,MAAA,EAAQ,QAAA,EAAU,CAAA,EAAG,QAAA,EAAU,KAAA,EAAM;AAAA,IACrF,WAAA,EAAa,EAAE,SAAA,EAAW,CAAC,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,KAAK,CAAA,EAAG,OAAA,EAAS,KAAA,EAAM;AAAA,IAChF,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,aAAA,EAAe;AAAA,IACb,EAAA,EAAI,aAAA;AAAA,IACJ,IAAA,EAAM,oBAAA;AAAA,IACN,YAAA,EAAc,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,IAAA,EAAK;AAAA,IAC3C,eAAA,EAAiB,EAAE,SAAA,EAAW,IAAA,EAAM,WAAW,aAAA,EAAe,QAAA,EAAU,CAAA,EAAG,QAAA,EAAU,IAAA,EAAK;AAAA,IAC1F,WAAA,EAAa,EAAE,SAAA,EAAW,CAAC,OAAO,KAAA,EAAO,KAAK,CAAA,EAAG,OAAA,EAAS,KAAA,EAAM;AAAA,IAChE,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,mBAAA,EAAqB;AAAA,IACnB,EAAA,EAAI,aAAA;AAAA,IACJ,IAAA,EAAM,aAAA;AAAA,IACN,YAAA,EAAc,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,KAAA,EAAM;AAAA,IAC5C,eAAA,EAAiB,EAAE,SAAA,EAAW,KAAA,EAAO,WAAW,MAAA,EAAQ,QAAA,EAAU,CAAA,EAAG,QAAA,EAAU,KAAA,EAAM;AAAA,IACrF,WAAA,EAAa,EAAE,SAAA,EAAW,CAAC,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,KAAK,CAAA,EAAG,OAAA,EAAS,KAAA,EAAM;AAAA,IAChF,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,EAAA,EAAI,MAAA;AAAA,IACJ,IAAA,EAAM,cAAA;AAAA,IACN,YAAA,EAAc,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,KAAA,EAAM;AAAA,IAC5C,eAAA,EAAiB,EAAE,SAAA,EAAW,KAAA,EAAO,WAAW,MAAA,EAAQ,QAAA,EAAU,CAAA,EAAG,QAAA,EAAU,KAAA,EAAM;AAAA,IACrF,WAAA,EAAa,EAAE,SAAA,EAAW,CAAC,OAAO,MAAA,EAAQ,MAAM,CAAA,EAAG,OAAA,EAAS,KAAA,EAAM;AAAA,IAClE,MAAA,EAAQ;AAAA;AAEZ,CAAA;AAEA,SAAS,SAAS,GAAA,EAAsC;AACtD,EAAA,MAAM,aAAa,CAAA,EAAG,GAAA,CAAI,KAAK,CAAA,CAAA,EAAI,IAAI,IAAI,CAAA,CAAA;AAC3C,EAAA,MAAM,IAAA,GAAO,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA,IAAK;AAAA,IACpC,IAAI,GAAA,CAAI,IAAA;AAAA,IACR,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,YAAA,EAAc,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,KAAA,EAAM;AAAA,IAC5C,eAAA,EAAiB,EAAE,SAAA,EAAW,KAAA,EAAO,WAAW,MAAA,EAAiB,QAAA,EAAU,CAAA,EAAG,QAAA,EAAU,KAAA,EAAM;AAAA,IAC9F,WAAA,EAAa,qBAAA;AAAA,IACb,MAAA,EAAQ;AAAA,GACV;AAEA,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,IAAK;AAAA,IACnC,YAAA,EAAc,IAAA;AAAA,IACd,QAAA,EAAU,KAAA;AAAA,IACV,QAAA,EAAU,IAAA;AAAA,IACV,UAAA,EAAY;AAAA,GACd;AAEA,EAAA,OAAO;AAAA,IACL,IAAI,IAAA,CAAK,EAAA;AAAA,IACT,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,UAAA;AAAA,IACA,QAAA,EAAU,IAAI,KAAA,KAAU,QAAA,GAAW,WAAW,GAAA,CAAI,KAAA,KAAU,YAAY,SAAA,GAAY,WAAA;AAAA,IACpF,cAAc,IAAA,CAAK,YAAA;AAAA,IACnB,iBAAiB,IAAA,CAAK,eAAA;AAAA,IACtB,aAAa,IAAA,CAAK,WAAA;AAAA,IAClB,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,OAAA,EAAS;AAAA,MACP,cAAc,OAAA,CAAQ,YAAA;AAAA,MACtB,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,WAAA,EAAa,WAAA;AAAA,MACb,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,GAAI,QAAQ,UAAA,KAAe,MAAA,GAAY,EAAE,UAAA,EAAY,OAAA,CAAQ,UAAA,EAAW,GAAI,EAAC;AAAA,MAC7E,GAAI,QAAQ,kBAAA,KAAuB,MAAA,GAAY,EAAE,kBAAA,EAAoB,OAAA,CAAQ,kBAAA,EAAmB,GAAI;AAAC,KACvG;AAAA,IACA,aAAa,GAAA,CAAI,WAAA;AAAA,IACjB,YAAA,EAAc,aAAA,CAAc,GAAA,CAAI,GAAA,CAAI,IAAI,CAAA;AAAA,IACxC,GAAI,KAAK,WAAA,GAAc,EAAE,aAAa,IAAA,CAAK,WAAA,KAAgB;AAAC,GAC9D;AACF;AAcO,IAAM,gBAAA,GAAkC;AAAA,EAC7C,EAAA,EAAI,iBAAA;AAAA,EACJ,GAAA,EAAK,4DAAA;AAAA,EACL,OAAA,EAAS,EAAE,aAAA,EAAe,gCAAA;AAC5B,CAAA;AAEO,IAAM,iBAAmC,eAAA,CAAgB;AAAA,EAC9D,IAAA,EAAM,iBAAA;AAAA,EACN,QAAA,EAAU,OAAA;AAAA,EACV,OAAA,EAAS,CAAC,gBAAgB,CAAA;AAAA,EAE1B,MAAM,SAAS,GAAA,EAAgD;AAE7D,IAAA,MAAM,IAAA,GAAQ,MAAM,GAAA,CAAI,WAAA,CAAY,gBAAgB,CAAA;AAEpD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,QAAQ,CAAA;AAExC,IAAA,MAAM,KAAA,GAAkB;AAAA,MACtB,oEAAA;AAAA,MACA,6DAAA;AAAA,MACA,EAAA;AAAA,MACA,6EAAA;AAAA,MACA,EAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,MAAA,MAAM,OAAA,GAAU,EAAE,WAAA,GAAc,CAAA;AAAA,iBAAA,EAAuB,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,WAAW,CAAC,CAAA,CAAA,GAAK,EAAA;AACzF,MAAA,MAAM,UAAA,GAAa,CAAA,CAAE,OAAA,CAAQ,UAAA,KAAe,MAAA,GACxC,CAAA;AAAA,kBAAA,EAAwB,CAAA,CAAE,OAAA,CAAQ,UAAU,CAAA,CAAA,GAC5C,EAAA;AACJ,MAAA,MAAM,QAAA,GAAW,CAAA,CAAE,OAAA,CAAQ,kBAAA,KAAuB,MAAA,GAC9C,CAAA;AAAA,0BAAA,EAAgC,CAAA,CAAE,OAAA,CAAQ,kBAAkB,CAAA,CAAA,GAC5D,EAAA;AAEJ,MAAA,KAAA,CAAM,KAAK,CAAA,EAAA,EAAK,IAAA,CAAK,UAAU,CAAA,CAAE,EAAE,CAAC,CAAA,GAAA,CAAK,CAAA;AACzC,MAAA,KAAA,CAAM,KAAK,CAAA,QAAA,EAAW,IAAA,CAAK,UAAU,CAAA,CAAE,EAAE,CAAC,CAAA,CAAA,CAAG,CAAA;AAC7C,MAAA,KAAA,CAAM,KAAK,CAAA,UAAA,EAAa,IAAA,CAAK,UAAU,CAAA,CAAE,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AACjD,MAAA,KAAA,CAAM,KAAK,CAAA,gBAAA,EAAmB,IAAA,CAAK,UAAU,CAAA,CAAE,UAAU,CAAC,CAAA,CAAA,CAAG,CAAA;AAC7D,MAAA,KAAA,CAAM,KAAK,CAAA,cAAA,EAAiB,IAAA,CAAK,UAAU,CAAA,CAAE,QAAQ,CAAC,CAAA,CAAA,CAAG,CAAA;AACzD,MAAA,KAAA,CAAM,KAAK,CAAA,8BAAA,EAAiC,CAAA,CAAE,aAAa,QAAQ,CAAA,QAAA,EAAW,EAAE,YAAA,CAAa,IAAI,GAAG,CAAA,CAAE,YAAA,CAAa,UAAU,CAAA,WAAA,EAAc,CAAA,CAAE,aAAa,OAAO,CAAA,CAAA,GAAK,EAAE,CAAA,GAAA,CAAK,CAAA;AAC7K,MAAA,KAAA,CAAM,KAAK,CAAA,sBAAA,CAAwB,CAAA;AACnC,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,iBAAA,EAAoB,CAAA,CAAE,eAAA,CAAgB,SAAS,CAAA,CAAA,CAAG,CAAA;AAC7D,MAAA,KAAA,CAAM,IAAA,CAAK,oBAAoB,IAAA,CAAK,SAAA,CAAU,EAAE,eAAA,CAAgB,SAAS,CAAC,CAAA,CAAA,CAAG,CAAA;AAC7E,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,gBAAA,EAAmB,CAAA,CAAE,eAAA,CAAgB,QAAQ,CAAA,CAAA,CAAG,CAAA;AAC3D,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,gBAAA,EAAmB,CAAA,CAAE,eAAA,CAAgB,QAAQ,CAAA,CAAA,CAAG,CAAA;AAC3D,MAAA,KAAA,CAAM,KAAK,CAAA,MAAA,CAAQ,CAAA;AACnB,MAAA,KAAA,CAAM,KAAK,CAAA,kBAAA,CAAoB,CAAA;AAC/B,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,kBAAA,EAAqB,CAAA,CAAE,WAAA,CAAY,UAAU,GAAA,CAAI,CAAA,CAAA,KAAK,IAAA,CAAK,SAAA,CAAU,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CAAI,CAAA;AAClG,MAAA,KAAA,CAAM,IAAA,CAAK,kBAAkB,IAAA,CAAK,SAAA,CAAU,EAAE,WAAA,CAAY,OAAO,CAAC,CAAA,CAAA,CAAG,CAAA;AACrE,MAAA,KAAA,CAAM,KAAK,CAAA,MAAA,CAAQ,CAAA;AACnB,MAAA,KAAA,CAAM,KAAK,CAAA,YAAA,EAAe,IAAA,CAAK,UAAU,CAAA,CAAE,MAAM,CAAC,CAAA,CAAA,CAAG,CAAA;AACrD,MAAA,KAAA,CAAM,KAAK,CAAA,cAAA,CAAgB,CAAA;AAC3B,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,oBAAA,EAAuB,CAAA,CAAE,OAAA,CAAQ,YAAY,CAAA,CAAA,CAAG,CAAA;AAC3D,MAAA,KAAA,CAAM,IAAA,CAAK,mBAAmB,IAAA,CAAK,SAAA,CAAU,EAAE,OAAA,CAAQ,QAAQ,CAAC,CAAA,CAAA,CAAG,CAAA;AACnE,MAAA,KAAA,CAAM,IAAA,CAAK,sBAAsB,IAAA,CAAK,SAAA,CAAU,EAAE,OAAA,CAAQ,WAAW,CAAC,CAAA,CAAA,CAAG,CAAA;AACzE,MAAA,KAAA,CAAM,IAAA,CAAK,mBAAmB,CAAA,CAAE,OAAA,CAAQ,QAAQ,CAAA,CAAA,EAAI,UAAU,CAAA,EAAG,QAAQ,CAAA,CAAE,CAAA;AAC3E,MAAA,KAAA,CAAM,KAAK,CAAA,MAAA,CAAQ,CAAA;AACnB,MAAA,KAAA,CAAM,KAAK,CAAA,iBAAA,EAAoB,IAAA,CAAK,UAAU,CAAA,CAAE,WAAW,CAAC,CAAA,CAAA,CAAG,CAAA;AAC/D,MAAA,KAAA,CAAM,KAAK,CAAA,kBAAA,EAAqB,CAAA,CAAE,YAAY,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CAAA;AAC3D,MAAA,KAAA,CAAM,KAAK,CAAA,IAAA,CAAM,CAAA;AAAA,IACnB;AAEA,IAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AACd,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAEb,IAAA,MAAM,UAAA,GAAa,8DAAA;AACnB,IAAA,OAAO,EAAE,CAAC,UAAU,GAAG,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,EAAE;AAAA,EAC1C;AACF,CAAC,CAAA;AC1YD,IAAMY,WAAA,GAAY,OAAA,CAAQ,aAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAC,CAAA;AAQxD,SAAS,cAAA,GAAyB;AAChC,EAAA,OAAO,OAAA,CAAQA,aAAW,IAAI,CAAA;AAChC;AAGA,SAAS,aAAa,EAAA,EAAoB;AACxC,EAAA,OAAO,KAAK,cAAA,EAAe,EAAG,WAAA,EAAa,CAAA,EAAG,EAAE,CAAA,KAAA,CAAO,CAAA;AACzD;AAOA,SAAS,QAAA,GAAmB;AAC1B,EAAA,IAAI,MAAM,cAAA,EAAe;AACzB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,EAAA,EAAI,CAAA,EAAA,EAAK;AAC3B,IAAA,IAAI,WAAW,IAAA,CAAK,GAAA,EAAK,qBAAqB,CAAC,GAAG,OAAO,GAAA;AACzD,IAAA,MAAM,MAAA,GAAS,QAAQ,GAAG,CAAA;AAC1B,IAAA,IAAI,WAAW,GAAA,EAAK;AACpB,IAAA,GAAA,GAAM,MAAA;AAAA,EACR;AAEA,EAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,cAAA,EAAgB,CAAC,CAAA;AAC1C;AAGA,SAAS,aAAa,OAAA,EAAqC;AACzD,EAAA,IAAI,CAAC,UAAA,CAAW,OAAO,CAAA,EAAG,OAAO,MAAA;AACjC,EAAA,OAAO,YAAA,CAAa,SAAS,MAAM,CAAA;AACrC;AAQA,SAAS,eAAe,OAAA,EAGtB;AACA,EAAA,MAAM,MAA8B,EAAC;AACrC,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,IAAI,CAAC,OAAA,EAAS,OAAO,EAAE,OAAA,EAAS,KAAK,OAAA,EAAQ;AAC7C,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AAClD,IAAA,GAAA,CAAI,GAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,mBAAA,EAAqB,CAAC,QAAQ,IAAA,KAAiB;AACtE,MAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AAC1B,MAAA,IAAI,CAAA,KAAM,MAAA,IAAa,CAAA,KAAM,EAAA,EAAI;AAC/B,QAAA,OAAA,CAAQ,KAAK,IAAI,CAAA;AACjB,QAAA,OAAO,EAAA;AAAA,MACT;AACA,MAAA,OAAO,CAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH;AACA,EAAA,OAAO,EAAE,OAAA,EAAS,GAAA,EAAK,OAAA,EAAQ;AACjC;AAqBA,eAAsB,aAAA,CACpB,MACA,IAAA,EAC8B;AAC9B,EAAA,MAAMC,SAAwB,EAAC;AAE/B,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,GAAA,GAAwB;AAAA,MAC5B,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,MAAM,YAAY,GAAA,EAAsC;AACtD,QAAA,MAAM,IAAA,GAAO,YAAA,CAAa,GAAA,CAAI,EAAE,CAAA;AAChC,QAAA,MAAM,QAAA,GAAW,aAAa,IAAI,CAAA;AAGlC,QAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACjB,UAAA,IAAI,QAAA,KAAa,MAAA,EAAW,OAAO,IAAA,CAAK,MAAM,QAAQ,CAAA;AACtD,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,mDAAmD,GAAA,CAAI,EAAE,MACnD,IAAI,CAAA,8EAAA,EACwC,IAAI,GAAG,CAAA,CAAA;AAAA,WAC3D;AAAA,QACF;AAMA,QAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAQ,GAAI,cAAA,CAAe,IAAI,OAAO,CAAA;AACvD,QAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,UAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,YAAA,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,cACb,sCAAsC,GAAA,CAAI,EAAE,wBACvC,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA;AAAA,aACzB;AACA,YAAA,OAAO,IAAA,CAAK,MAAM,QAAQ,CAAA;AAAA,UAC5B;AACA,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,iCAAiC,GAAA,CAAI,EAAE,wBAClC,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,2BAAA;AAAA,WACzB;AAAA,QACF;AACA,QAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,GAAA,CAAI,GAAA,EAAK;AAAA,UAC/B,MAAA,EAAQ,IAAI,MAAA,IAAU,KAAA;AAAA,UACtB,OAAA;AAAA,UACA,GAAI,GAAA,CAAI,IAAA,KAAS,MAAA,GACb,EAAE,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA,EAAE,GACjC;AAAC,SACN,CAAA;AACD,QAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,CAAA,oBAAA,EAAuB,IAAI,GAAG,CAAA,SAAA,EAAY,IAAI,MAAM,CAAA,CAAA,EAAI,IAAI,UAAU,CAAA;AAAA,WACxE;AAAA,QACF;AACA,QAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,QAAA,MAAM,MAAA,GAAkB,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AACvC,QAAA,SAAA,CAAU,QAAQ,IAAI,CAAA,EAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAC5C,QAAA,aAAA,CAAc,MAAM,CAAA,EAAG,IAAA,CAAK,UAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC;AAAA,CAAA,EAAM,MAAM,CAAA;AAClE,QAAA,OAAO,MAAA;AAAA,MACT;AAAA,KACF;AAEA,IAAA,MAAM,GAAA,GAAM,MAAM,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA;AAClC,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,OAAO,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AACjD,MAAAA,MAAAA,CAAM,IAAI,CAAA,GAAI,OAAA;AAAA,IAChB;AAAA,EACF;AAEA,EAAA,MAAM,OAAO,QAAA,EAAS;AACtB,EAAA,MAAMC,WAAoB,EAAC;AAC3B,EAAA,KAAA,MAAW,CAAC,OAAA,EAAS,OAAO,KAAK,MAAA,CAAO,OAAA,CAAQD,MAAK,CAAA,EAAG;AACtD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,EAAM,OAAO,CAAA;AAC9B,IAAA,MAAM,QAAA,GAAW,aAAa,GAAG,CAAA;AACjC,IAAA,IAAI,aAAa,OAAA,EAAS;AACxB,MAAAC,QAAAA,CAAQ,KAAK,OAAO,CAAA;AACpB,MAAA,IAAI,KAAK,KAAA,EAAO;AACd,QAAA,SAAA,CAAU,QAAQ,GAAG,CAAA,EAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAC3C,QAAA,aAAA,CAAc,GAAA,EAAK,SAAS,MAAM,CAAA;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,KAAA,EAAAD,MAAAA,EAAO,OAAA,EAAAC,QAAAA,EAAQ;AAC1B;;;AC5JA,IAAM,IAAA,GAAO,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AACjC,IAAM,OAAA,GAAU,IAAA,CAAK,CAAC,CAAA,IAAK,EAAA;AAC3B,IAAM,QAAQ,IAAI,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA;AAEnC,IAAM,8BAAc,IAAI,GAAA,CAAI,CAAC,WAAA,EAAa,SAAS,CAAC,CAAA;AACpD,IAAM,YAAA,GAAe,CAAC,GAAG,KAAK,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,WAAA,CAAY,GAAA,CAAI,CAAC,CAAC,CAAA;AAEjE,IAAI,OAAA,KAAY,UAAA,IAAc,YAAA,CAAa,MAAA,GAAS,CAAA,EAAG;AACrD,EAAA,IAAI,YAAY,UAAA,EAAY;AAC1B,IAAA,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,MACb,kCAAkC,OAAO,CAAA;AAAA;AAAA,KAC3C;AAAA,EACF;AACA,EAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,IAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA,8BAAA,EAAiC,YAAA,CAAa,IAAA,CAAK,IAAI,CAAC;AAAA,CAAI,CAAA;AAAA,EACnF;AACA,EAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAChB;AAEA,IAAM,OAAA,GAAU,KAAA,CAAM,GAAA,CAAI,WAAW,CAAA;AACrC,IAAM,KAAA,GAAQ,KAAA,CAAM,GAAA,CAAI,SAAS,CAAA;AACjC,IAAM,UAAA,GAAa;AAAA,EACjB,sBAAA;AAAA,EACA,oBAAA;AAAA,EACA,uBAAA;AAAA,EACA,0BAAA;AAAA,EACA,eAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,MAAM,cAAc,UAAA,EAAY;AAAA,EACzD,OAAA;AAAA,EACA,OAAO,CAAC;AACV,CAAC,CAAA;AAED,IAAI,KAAA,EAAO;AACT,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,MACb,CAAA,oCAAA,EAAkC,QAAQ,MAAM,CAAA;AAAA;AAAA,KAClD;AACA,IAAA,KAAA,MAAW,KAAK,OAAA,EAAS,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,KAAK,CAAC;AAAA,CAAI,CAAA;AACxD,IAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA;AAAA,CAA+C,CAAA;AACpE,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACA,EAAA,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,IACb,CAAA,wBAAA,EAA2B,WAAW,MAAM,CAAA,eAAA,EAAkB,OAAO,IAAA,CAAK,KAAK,EAAE,MAAM,CAAA;AAAA;AAAA,GACzF;AACA,EAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAChB;AAEA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,EAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,oBAAA,EAAuB,OAAA,CAAQ,MAAM,CAAA;AAAA,CAAa,CAAA;AACvE,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,KAAK,CAAC;AAAA,CAAI,CAAA;AAC1D,CAAA,MAAO;AACL,EAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA;AAAA,CAA6B,CAAA;AACpD;AACA,OAAA,CAAQ,KAAK,CAAC,CAAA","file":"bin.mjs","sourcesContent":["/**\n * catalog-sync generator contract.\n *\n * FROZEN — a sibling agent builds provider generators against this surface.\n * Do not change field names, shapes, or the `defineGenerator` signature\n * without coordinating. Adding new generators is the expected extension\n * path; editing this file is not.\n */\n\nexport interface CatalogSource {\n id: string\n url: string\n /** HTTP method for the live (`--refresh`) fetch. Default `\"GET\"`. */\n method?: \"GET\" | \"POST\"\n /**\n * Request headers for the live fetch. A value may embed `env:VAR_NAME`\n * tokens, resolved from `process.env` at fetch time (e.g.\n * `{ \"xi-api-key\": \"env:ELEVENLABS_API_KEY\" }` or\n * `{ Authorization: \"Bearer env:MINIMAX_API_KEY\" }`). If any referenced env\n * var is unset, the source is treated as un-refreshable — the committed\n * snapshot is reused rather than fetched without auth. Offline reads\n * (default, no `--refresh`) ignore headers entirely.\n */\n headers?: Record<string, string>\n /** JSON request body for POST sources (e.g. MiniMax `get_voice`). */\n body?: unknown\n}\n\nexport interface GeneratorContext {\n /**\n * Reads the pinned snapshot at `snapshots/<src.id>.json`; if missing and\n * `refresh=true`, fetches `src.url` and writes the snapshot. Returns\n * parsed JSON.\n *\n * Offline by default: when no snapshot exists and `refresh` is false this\n * throws — generators MUST be runnable without network access so CI and\n * tests are deterministic. The only network path is behind `--refresh`.\n */\n fetchSource(src: CatalogSource): Promise<unknown>\n refresh: boolean\n}\n\n/** Repo-relative path → TS source text. */\nexport type GeneratedFiles = Record<string, string>\n\nexport interface CatalogGenerator {\n /** e.g. \"llm:openrouter\" */\n name: string\n modality: \"llm\" | \"image\" | \"video\" | \"audio\" | \"voice\"\n sources: CatalogSource[]\n generate(ctx: GeneratorContext): Promise<GeneratedFiles>\n}\n\n/** Identity helper — lets a generator module declare itself with type inference. */\nexport function defineGenerator(g: CatalogGenerator): CatalogGenerator {\n return g\n}\n","import { z } from \"zod\"\n\nimport { defineGenerator, type GeneratedFiles, type GeneratorContext } from \"../types.js\"\n\n/**\n * PINNED source. The OpenRouter `/api/v1/models` payload lists every route\n * the router exposes with per-token USD pricing. We never fetch it at build\n * or test time — only behind `--refresh`, which writes\n * `snapshots/llm-openrouter.json` so the next offline run is deterministic.\n */\nconst OPENROUTER_MODELS_URL = \"https://openrouter.ai/api/v1/models\"\n\n/** Repo-relative drop-in target for {@link @agentproto/model-catalog}. */\nconst OUTPUT_PATH = \"packages/model-catalog/src/llm/openrouter-routes.generated.ts\"\n\n// ── Source schema ────────────────────────────────────────────────────────\n// OpenRouter prices are STRINGS of USD-per-token (e.g. \"0.000003\" = $3/1M).\n// `input_cache_read` / `input_cache_write` are optional and only present for\n// models that support prompt caching (Anthropic, etc.). These are the REAL\n// OpenRouter field names (verified against the live /v1/models payload) — an\n// earlier draft used `cache_read`/`cache_write`, which never matched, so cache\n// multipliers were silently always absent. passthrough() keeps the other live\n// keys (web_search, image, audio, internal_reasoning, input_cache_write_1h)\n// forward-compatible without a regenerate — we only read what we model.\n\nconst PricingSchema = z\n .object({\n prompt: z.string().optional(),\n completion: z.string().optional(),\n input_cache_read: z.string().optional(),\n input_cache_write: z.string().optional(),\n })\n .passthrough()\n\nconst ModelSchema = z\n .object({\n id: z.string(),\n pricing: PricingSchema.optional(),\n })\n .passthrough()\n\nconst SnapshotSchema = z.object({\n data: z.array(ModelSchema),\n})\n\n// ── Output shape (mirrors model-catalog's LLMPricing) ────────────────────\n// Drop-in for `packages/model-catalog/src/llm/openrouter-routes.generated.ts`.\n// Structurally identical to LLMPricing — inputPer1M / outputPer1M in USD per\n// 1M tokens, plus cacheReadMultiplier / cacheWriteMultiplier WHEN the source\n// carries cache_read / cache_write. The existing committed file omits cache\n// fields; this generator emits them when present (per the P3 spec: \"plus\n// cache fields if the source has them\"). Fields are optional on LLMPricing,\n// so the output remains drop-in compatible.\n\ninterface LLMPricingEntry {\n inputPer1M: number\n outputPer1M: number\n cacheReadMultiplier?: number\n cacheWriteMultiplier?: number\n vendor: string\n provider: \"openrouter\"\n}\n\n// ── Number helpers ──────────────────────────────────────────────────────\n\n/** Round to 6 decimal places, killing binary-float noise from the per-token × 1e6 product. */\nfunction round6(n: number): number {\n return Math.round(n * 1_000_000) / 1_000_000\n}\n\n/** Convert a per-token USD string to USD-per-1M-tokens, or undefined if unpriced. */\nfunction per1m(tokenPrice: string | undefined): number | undefined {\n if (tokenPrice === undefined) return undefined\n const n = Number(tokenPrice)\n if (!Number.isFinite(n)) return undefined\n return round6(n * 1_000_000)\n}\n\n/** Shortest faithful decimal string (matches existing file: 1, 0.5, 0.7448, 1.25). */\nfunction fmt(n: number): string {\n if (!Number.isFinite(n)) return \"0\"\n return `${round6(n)}`\n}\n\n/** Vendor slug = first segment of the OpenRouter route id (`vendor/model`). */\nfunction vendorOf(id: string): string {\n if (!id.includes(\"/\")) return id\n return id.split(\"/\")[0] ?? id\n}\n\n// ── Serialization ────────────────────────────────────────────────────────\n\nfunction serializeEntry(e: LLMPricingEntry): string {\n const fields: string[] = [\n `inputPer1M: ${fmt(e.inputPer1M)}`,\n `outputPer1M: ${fmt(e.outputPer1M)}`,\n ]\n if (e.cacheReadMultiplier !== undefined) {\n fields.push(`cacheReadMultiplier: ${fmt(e.cacheReadMultiplier)}`)\n }\n if (e.cacheWriteMultiplier !== undefined) {\n fields.push(`cacheWriteMultiplier: ${fmt(e.cacheWriteMultiplier)}`)\n }\n fields.push(`vendor: ${JSON.stringify(e.vendor)}`)\n fields.push(`provider: ${JSON.stringify(e.provider)}`)\n return `{\\n ${fields.join(\",\\n \")},\\n }`\n}\n\nfunction serializeFile(entries: Record<string, LLMPricingEntry>): string {\n const ids = Object.keys(entries).sort()\n const providers = Array.from(new Set(ids.map(vendorOf))).sort()\n\n const lines: string[] = [\n \"// AUTO-GENERATED by @agentproto/catalog-sync (llm:openrouter).\",\n \"// Do not edit by hand — re-run `pnpm --filter @agentproto/catalog-sync generate`.\",\n `// Source: ${OPENROUTER_MODELS_URL}`,\n \"// Pricing carries provider USD (inputPer1M / outputPer1M) plus cache\",\n \"// multipliers (cacheReadMultiplier / cacheWriteMultiplier) derived from the\",\n \"// source's input_cache_read / input_cache_write per-token fields when present.\",\n \"\",\n 'import type { LLMPricing } from \"./catalog.js\"',\n \"\",\n \"export const OPENROUTER_ROUTES: Record<string, LLMPricing> = {\",\n ]\n for (const id of ids) {\n lines.push(` ${JSON.stringify(id)}: ${serializeEntry(entries[id]!)},`)\n }\n lines.push(\"}\")\n lines.push(\"\")\n lines.push(\"/** Provider slugs treated as OpenRouter routes by the picker. */\")\n lines.push(\"export const OPENROUTER_PROVIDERS: readonly string[] = [\")\n for (const p of providers) {\n lines.push(` ${JSON.stringify(p)},`)\n }\n lines.push(\"]\")\n lines.push(\"\")\n return lines.join(\"\\n\")\n}\n\n// ── Generator ───────────────────────────────────────────────────────────\n\nasync function generate(ctx: GeneratorContext): Promise<GeneratedFiles> {\n const src = sources[0]\n if (!src) throw new Error(\"llm:openrouter: no source configured\")\n const parsed = SnapshotSchema.parse(await ctx.fetchSource(src))\n\n const entries: Record<string, LLMPricingEntry> = {}\n for (const model of parsed.data) {\n const pricing = model.pricing\n if (!pricing) continue\n const inputPer1M = per1m(pricing.prompt)\n const outputPer1M = per1m(pricing.completion)\n if (inputPer1M === undefined || outputPer1M === undefined) continue\n // Skip unpriced routes (e.g. openrouter/auto, which carries \"0\" pricing).\n if (inputPer1M === 0 && outputPer1M === 0) continue\n\n const entry: LLMPricingEntry = {\n inputPer1M,\n outputPer1M,\n vendor: vendorOf(model.id),\n provider: \"openrouter\",\n }\n\n const cacheReadPer1M = per1m(pricing.input_cache_read)\n const cacheWritePer1M = per1m(pricing.input_cache_write)\n if (cacheReadPer1M !== undefined && cacheReadPer1M > 0 && inputPer1M > 0) {\n entry.cacheReadMultiplier = round6(cacheReadPer1M / inputPer1M)\n }\n if (cacheWritePer1M !== undefined && cacheWritePer1M > 0 && inputPer1M > 0) {\n entry.cacheWriteMultiplier = round6(cacheWritePer1M / inputPer1M)\n }\n\n entries[model.id] = entry\n }\n\n return { [OUTPUT_PATH]: serializeFile(entries) }\n}\n\nconst sources = [{ id: \"llm-openrouter\", url: OPENROUTER_MODELS_URL }]\n\nexport const llmOpenRouterGenerator = defineGenerator({\n name: \"llm:openrouter\",\n modality: \"llm\",\n sources,\n generate,\n})\n","import { z } from \"zod\"\n\nimport { defineGenerator, type GeneratedFiles, type GeneratorContext } from \"../types.js\"\n\n/**\n * PINNED source. The Requesty `/v1/models` payload lists every route the\n * router exposes with per-token USD pricing. We never fetch it at build or\n * test time — only behind `--refresh`, which writes\n * `snapshots/llm-requesty.json` so the next offline run is deterministic.\n * Live fetch requires `Authorization: Bearer $REQUESTY_API_KEY` (see\n * `sources` below) — without the key set, the framework reuses the\n * committed snapshot rather than fetching unauthenticated.\n */\nconst REQUESTY_MODELS_URL = \"https://router.requesty.ai/v1/models\"\n\n/** Repo-relative drop-in target for {@link @agentproto/model-catalog}. */\nconst OUTPUT_PATH = \"packages/model-catalog/src/llm/requesty-routes.generated.ts\"\n\n// ── Source schema ────────────────────────────────────────────────────────\n// UNLIKE OpenRouter, Requesty prices are JSON **numbers** in USD-PER-TOKEN\n// (e.g. `4e-7` = $0.40/1M), not strings, and live flat on the model entry\n// rather than nested under a `pricing` object. `cached_price` is a cache\n// READ price (no cache-write price exists in this source — we never emit\n// `cacheWriteMultiplier`). `supports_caching` gates whether `cached_price`\n// is actually meaningful: some entries carry a non-zero `cached_price` with\n// `supports_caching: false` (cache pricing published but not offered), so\n// the multiplier must only be derived when the flag is true. passthrough()\n// keeps the other live keys (context_window, supports_vision, description,\n// …) forward-compatible without a regenerate — we only read what we model.\n\nconst ModelSchema = z\n .object({\n id: z.string(),\n input_price: z.number().optional(),\n output_price: z.number().optional(),\n cached_price: z.number().optional(),\n supports_caching: z.boolean().optional(),\n })\n .passthrough()\n\nconst SnapshotSchema = z.object({\n data: z.array(ModelSchema),\n})\n\n// ── Output shape (mirrors model-catalog's LLMPricing) ────────────────────\n// Drop-in for `packages/model-catalog/src/llm/requesty-routes.generated.ts`.\n// Structurally identical to LLMPricing — inputPer1M / outputPer1M in USD per\n// 1M tokens, plus cacheReadMultiplier when the source carries a meaningful\n// `cached_price`. No `cacheWriteMultiplier` — Requesty has no cache-write\n// price to derive one from.\n\ninterface LLMPricingEntry {\n inputPer1M: number\n outputPer1M: number\n cacheReadMultiplier?: number\n vendor: string\n provider: \"requesty\"\n}\n\n// ── Number helpers ──────────────────────────────────────────────────────\n\n/** Round to 6 decimal places, killing binary-float noise from the per-token × 1e6 product. */\nfunction round6(n: number): number {\n return Math.round(n * 1_000_000) / 1_000_000\n}\n\n/**\n * Convert a per-token USD number to USD-per-1M-tokens, or undefined if\n * unpriced. UNLIKE OpenRouter (per-token USD strings), Requesty already\n * gives per-token USD as a JSON number, so there's no `Number(...)` parse\n * step — just the same ×1e6 + round6 normalization.\n */\nfunction per1m(tokenPrice: number | undefined): number | undefined {\n if (tokenPrice === undefined) return undefined\n if (!Number.isFinite(tokenPrice)) return undefined\n return round6(tokenPrice * 1_000_000)\n}\n\n/** Shortest faithful decimal string (matches existing file: 1, 0.5, 0.7448, 1.25). */\nfunction fmt(n: number): string {\n if (!Number.isFinite(n)) return \"0\"\n return `${round6(n)}`\n}\n\n/** Vendor slug = first segment of the Requesty route id (`vendor/model`). */\nfunction vendorOf(id: string): string {\n if (!id.includes(\"/\")) return id\n return id.split(\"/\")[0] ?? id\n}\n\n// ── Serialization ────────────────────────────────────────────────────────\n\nfunction serializeEntry(e: LLMPricingEntry): string {\n const fields: string[] = [\n `inputPer1M: ${fmt(e.inputPer1M)}`,\n `outputPer1M: ${fmt(e.outputPer1M)}`,\n ]\n if (e.cacheReadMultiplier !== undefined) {\n fields.push(`cacheReadMultiplier: ${fmt(e.cacheReadMultiplier)}`)\n }\n fields.push(`vendor: ${JSON.stringify(e.vendor)}`)\n fields.push(`provider: ${JSON.stringify(e.provider)}`)\n return `{\\n ${fields.join(\",\\n \")},\\n }`\n}\n\nfunction serializeFile(entries: Record<string, LLMPricingEntry>): string {\n const ids = Object.keys(entries).sort()\n const providers = Array.from(new Set(ids.map(vendorOf))).sort()\n\n const lines: string[] = [\n \"// AUTO-GENERATED by @agentproto/catalog-sync (llm:requesty).\",\n \"// Do not edit by hand — re-run `pnpm --filter @agentproto/catalog-sync generate`.\",\n `// Source: ${REQUESTY_MODELS_URL}`,\n \"// Pricing carries provider USD (inputPer1M / outputPer1M) plus a cache\",\n \"// multiplier (cacheReadMultiplier) derived from the source's cached_price\",\n \"// per-token field when `supports_caching` is true. Requesty has no\",\n \"// cache-write price, so cacheWriteMultiplier is never emitted.\",\n \"\",\n 'import type { LLMPricing } from \"./catalog.js\"',\n \"\",\n \"export const REQUESTY_ROUTES: Record<string, LLMPricing> = {\",\n ]\n for (const id of ids) {\n lines.push(` ${JSON.stringify(id)}: ${serializeEntry(entries[id]!)},`)\n }\n lines.push(\"}\")\n lines.push(\"\")\n lines.push(\"/** Provider slugs treated as Requesty routes by the picker. */\")\n lines.push(\"export const REQUESTY_PROVIDERS: readonly string[] = [\")\n for (const p of providers) {\n lines.push(` ${JSON.stringify(p)},`)\n }\n lines.push(\"]\")\n lines.push(\"\")\n return lines.join(\"\\n\")\n}\n\n// ── Generator ───────────────────────────────────────────────────────────\n\nasync function generate(ctx: GeneratorContext): Promise<GeneratedFiles> {\n const src = sources[0]\n if (!src) throw new Error(\"llm:requesty: no source configured\")\n const parsed = SnapshotSchema.parse(await ctx.fetchSource(src))\n\n const entries: Record<string, LLMPricingEntry> = {}\n for (const model of parsed.data) {\n const inputPer1M = per1m(model.input_price)\n const outputPer1M = per1m(model.output_price)\n if (inputPer1M === undefined || outputPer1M === undefined) continue\n // Skip unpriced routes.\n if (inputPer1M === 0 && outputPer1M === 0) continue\n\n const entry: LLMPricingEntry = {\n inputPer1M,\n outputPer1M,\n vendor: vendorOf(model.id),\n provider: \"requesty\",\n }\n\n if (model.supports_caching === true && inputPer1M > 0) {\n const cachePer1M = per1m(model.cached_price)\n if (cachePer1M !== undefined) {\n entry.cacheReadMultiplier = round6(cachePer1M / inputPer1M)\n }\n }\n\n entries[model.id] = entry\n }\n\n return { [OUTPUT_PATH]: serializeFile(entries) }\n}\n\nconst sources = [\n {\n id: \"llm-requesty\",\n url: REQUESTY_MODELS_URL,\n // Live refresh needs the account key (Bearer). Without REQUESTY_API_KEY\n // set, the framework reuses the committed snapshot.\n headers: { Authorization: \"Bearer env:REQUESTY_API_KEY\" },\n },\n]\n\nexport const llmRequestyGenerator = defineGenerator({\n name: \"llm:requesty\",\n modality: \"llm\",\n sources,\n generate,\n})\n","import { z } from \"zod\"\n\nimport { defineGenerator, type GeneratedFiles, type GeneratorContext } from \"../types.js\"\n\n/**\n * PINNED source. The HuggingFace router `/v1/models` payload lists every\n * model the router knows about, each carrying a per-model `providers[]`\n * array — one entry per inference provider currently serving it. We never\n * fetch it at build or test time — only behind `--refresh`, which writes\n * `snapshots/llm-huggingface.json` so the next offline run is deterministic.\n * No auth required — the listing endpoint returns HTTP 200 unauthenticated\n * (verified 2026-07-18).\n */\nconst HUGGINGFACE_MODELS_URL = \"https://router.huggingface.co/v1/models\"\n\n/** Repo-relative drop-in target for {@link @agentproto/model-catalog}. */\nconst OUTPUT_PATH = \"packages/model-catalog/src/llm/huggingface-routes.generated.ts\"\n\n// ── Source schema ────────────────────────────────────────────────────────\n// Every per-provider field except `provider`/`status` is optional — some\n// entries are sparse (provider+status only). `pricing.input`/`pricing.output`\n// are USD-PER-1M-TOKENS NUMBERS (unlike OpenRouter's per-token strings),\n// already at the scale LLMPricing expects — no ×1e6 conversion needed.\n// passthrough() keeps unread live fields (owned_by, architecture, is_free,\n// throughput, …) forward-compatible without a regenerate — we only read\n// what we model.\n\nconst HFProviderSchema = z\n .object({\n provider: z.string(),\n status: z.string(),\n context_length: z.number().optional(),\n pricing: z\n .object({\n input: z.number().optional(),\n output: z.number().optional(),\n })\n .optional(),\n supports_tools: z.boolean().optional(),\n supports_structured_output: z.boolean().optional(),\n })\n .passthrough()\n\nconst HFModelSchema = z\n .object({\n id: z.string(),\n providers: z.array(HFProviderSchema).optional(),\n })\n .passthrough()\n\nconst SnapshotSchema = z.object({\n data: z.array(HFModelSchema),\n})\n\n// ── Output shape (drop-in for model-catalog's route-identity resolver) ────\n\ninterface HuggingFaceRouteProviderEntry {\n provider: string\n status: string\n contextLength?: number\n inputPer1M?: number\n outputPer1M?: number\n supportsTools?: boolean\n supportsStructuredOutput?: boolean\n}\n\ninterface HuggingFaceRouteEntry {\n wireId: string\n providers: HuggingFaceRouteProviderEntry[]\n}\n\n// ── Number helpers ──────────────────────────────────────────────────────\n\n/** Round to 4 decimal places, killing binary-float noise from the source payload. */\nfunction round4(n: number): number {\n return Math.round(n * 10_000) / 10_000\n}\n\n// ── Serialization ────────────────────────────────────────────────────────\n\nfunction serializeProvider(p: HuggingFaceRouteProviderEntry): string {\n const fields: string[] = [\n `provider: ${JSON.stringify(p.provider)}`,\n `status: ${JSON.stringify(p.status)}`,\n ]\n if (p.contextLength !== undefined) fields.push(`contextLength: ${p.contextLength}`)\n if (p.inputPer1M !== undefined) fields.push(`inputPer1M: ${p.inputPer1M}`)\n if (p.outputPer1M !== undefined) fields.push(`outputPer1M: ${p.outputPer1M}`)\n if (p.supportsTools !== undefined) fields.push(`supportsTools: ${p.supportsTools}`)\n if (p.supportsStructuredOutput !== undefined) {\n fields.push(`supportsStructuredOutput: ${p.supportsStructuredOutput}`)\n }\n return ` {\\n ${fields.join(\",\\n \")},\\n }`\n}\n\nfunction serializeEntry(id: string, e: HuggingFaceRouteEntry): string {\n const providerLines = e.providers.map(serializeProvider).join(\",\\n\")\n return [\n ` ${JSON.stringify(id)}: {`,\n ` wireId: ${JSON.stringify(e.wireId)},`,\n ` providers: [`,\n providerLines,\n ` ],`,\n ` },`,\n ].join(\"\\n\")\n}\n\nfunction serializeFile(entries: Record<string, HuggingFaceRouteEntry>): string {\n const ids = Object.keys(entries).sort()\n\n const lines: string[] = [\n \"// AUTO-GENERATED by @agentproto/catalog-sync (llm:huggingface).\",\n \"// Do not edit by hand — re-run `pnpm --filter @agentproto/catalog-sync generate`.\",\n `// Source: ${HUGGINGFACE_MODELS_URL}`,\n \"// Per-model LIVE inference providers from the HuggingFace router. HF wire\",\n \"// ids are case-sensitive and preserved verbatim. Provider entries are\",\n \"// SPARSE on some models — every field below except provider/status is\",\n \"// optional and emitted only when the upstream response carries it. Only\",\n '// providers with status === \"live\" are kept; models with zero live',\n \"// providers are skipped. inputPer1M/outputPer1M are USD per 1M tokens\",\n \"// (HuggingFace router convention — already at that scale, unlike\",\n \"// OpenRouter's per-token strings).\",\n \"\",\n \"export interface HuggingFaceRouteProvider {\",\n \" provider: string\",\n \" status: string\",\n \" contextLength?: number\",\n \" inputPer1M?: number\",\n \" outputPer1M?: number\",\n \" supportsTools?: boolean\",\n \" supportsStructuredOutput?: boolean\",\n \"}\",\n \"\",\n \"export interface HuggingFaceRoute {\",\n \" wireId: string\",\n \" providers: HuggingFaceRouteProvider[]\",\n \"}\",\n \"\",\n \"export const HUGGINGFACE_ROUTES: Record<string, HuggingFaceRoute> = {\",\n ]\n for (const id of ids) {\n lines.push(serializeEntry(id, entries[id]!))\n }\n lines.push(\"}\")\n lines.push(\"\")\n return lines.join(\"\\n\")\n}\n\n// ── Generator ───────────────────────────────────────────────────────────\n\nasync function generate(ctx: GeneratorContext): Promise<GeneratedFiles> {\n const src = sources[0]\n if (!src) throw new Error(\"llm:huggingface: no source configured\")\n const parsed = SnapshotSchema.parse(await ctx.fetchSource(src))\n\n const entries: Record<string, HuggingFaceRouteEntry> = {}\n for (const model of parsed.data) {\n const liveProviders = (model.providers ?? []).filter((p) => p.status === \"live\")\n if (liveProviders.length === 0) continue\n\n const providers: HuggingFaceRouteProviderEntry[] = liveProviders\n .map((p) => {\n const entry: HuggingFaceRouteProviderEntry = {\n provider: p.provider,\n status: p.status,\n }\n if (p.context_length !== undefined) entry.contextLength = p.context_length\n if (p.pricing?.input !== undefined) entry.inputPer1M = round4(p.pricing.input)\n if (p.pricing?.output !== undefined) entry.outputPer1M = round4(p.pricing.output)\n if (p.supports_tools !== undefined) entry.supportsTools = p.supports_tools\n if (p.supports_structured_output !== undefined) {\n entry.supportsStructuredOutput = p.supports_structured_output\n }\n return entry\n })\n .sort((a, b) => a.provider.localeCompare(b.provider))\n\n entries[model.id] = { wireId: model.id, providers }\n }\n\n return { [OUTPUT_PATH]: serializeFile(entries) }\n}\n\nconst sources = [\n {\n id: \"llm-huggingface\",\n url: HUGGINGFACE_MODELS_URL,\n },\n]\n\nexport const llmHuggingfaceGenerator = defineGenerator({\n name: \"llm:huggingface\",\n modality: \"llm\",\n sources,\n generate,\n})\n","import { z } from \"zod\"\n\nimport { defineGenerator, type CatalogSource, type GeneratedFiles, type GeneratorContext } from \"../types.js\"\n\n/**\n * Context window (max input tokens) + max output tokens, live per model id,\n * for the four providers that publish a machine-readable models-list with\n * this data: Anthropic, Groq, xAI, Moonshot. This is NOT pricing — Anthropic's\n * `/v1/models` carries no price at all, and Groq/xAI pricing units need\n * separate verification before they're trusted for billing; see\n * `LLM_PRICING_CATALOG` / `OPENROUTER_ROUTES` in `catalog.ts` for that.\n *\n * ZAI/Zhipu and OpenAI are deliberately excluded: ZAI's `/v4/models` list\n * returns bare `{id, owned_by, created}` with no context field, and OpenAI\n * has no stable models-list endpoint at all (see `sources/openai.ts`) — both\n * stay hand-maintained until (if ever) they publish one.\n */\n\n/** Repo-relative drop-in target for {@link @agentproto/model-catalog}. */\nconst OUTPUT_PATH = \"packages/model-catalog/src/llm/context-windows.generated.ts\"\n\n// ── Output shape (mirrors ContextWindowEntry in model-catalog's catalog.ts) ──\n\ninterface ContextWindowEntry {\n contextWindow: number\n maxOutput?: number\n displayName?: string\n provider: \"anthropic\" | \"groq\" | \"xai\" | \"moonshot\"\n}\n\n// ── Source schemas ───────────────────────────────────────────────────────\n// Each provider's models-list shape, verified against the live payload\n// (2026-07-16). `passthrough()` keeps unrelated fields forward-compatible.\n\nconst AnthropicModelSchema = z\n .object({\n id: z.string(),\n display_name: z.string().optional(),\n max_input_tokens: z.number().optional(),\n max_tokens: z.number().optional(),\n })\n .passthrough()\nconst AnthropicSnapshotSchema = z.object({ data: z.array(AnthropicModelSchema) })\n\nconst GroqModelSchema = z\n .object({\n id: z.string(),\n context_window: z.number().optional(),\n max_completion_tokens: z.number().optional(),\n })\n .passthrough()\nconst GroqSnapshotSchema = z.object({ data: z.array(GroqModelSchema) })\n\n// xAI's `context_length` is `null` for non-text models (e.g. grok-imagine-video).\nconst XaiModelSchema = z\n .object({\n id: z.string(),\n context_length: z.number().nullable().optional(),\n })\n .passthrough()\nconst XaiSnapshotSchema = z.object({ data: z.array(XaiModelSchema) })\n\nconst MoonshotModelSchema = z\n .object({\n id: z.string(),\n context_length: z.number().optional(),\n })\n .passthrough()\nconst MoonshotSnapshotSchema = z.object({ data: z.array(MoonshotModelSchema) })\n\n// ── Serialization ────────────────────────────────────────────────────────\n\nfunction serializeEntry(e: ContextWindowEntry): string {\n const fields: string[] = [`contextWindow: ${e.contextWindow}`]\n if (e.maxOutput !== undefined) fields.push(`maxOutput: ${e.maxOutput}`)\n if (e.displayName !== undefined) fields.push(`displayName: ${JSON.stringify(e.displayName)}`)\n fields.push(`provider: ${JSON.stringify(e.provider)}`)\n return `{ ${fields.join(\", \")} }`\n}\n\nfunction serializeFile(entries: Record<string, ContextWindowEntry>): string {\n const ids = Object.keys(entries).sort()\n const lines: string[] = [\n \"// AUTO-GENERATED by @agentproto/catalog-sync (llm:context-windows).\",\n \"// Do not edit by hand — re-run `pnpm --filter @agentproto/catalog-sync generate --refresh`.\",\n \"// Sources: api.anthropic.com/v1/models, api.groq.com/openai/v1/models,\",\n \"// api.x.ai/v1/models, api.moonshot.ai/v1/models\",\n \"// Context window (max input tokens) + max output tokens per live model id.\",\n \"// NOT pricing — see LLM_PRICING_CATALOG / OPENROUTER_ROUTES in catalog.ts.\",\n \"\",\n \"export interface ContextWindowEntry {\",\n \" contextWindow: number\",\n \" maxOutput?: number\",\n \" displayName?: string\",\n ' provider: \"anthropic\" | \"groq\" | \"xai\" | \"moonshot\"',\n \"}\",\n \"\",\n \"export const CONTEXT_WINDOWS: Record<string, ContextWindowEntry> = {\",\n ]\n for (const id of ids) {\n lines.push(` ${JSON.stringify(id)}: ${serializeEntry(entries[id]!)},`)\n }\n lines.push(\"}\")\n lines.push(\"\")\n return lines.join(\"\\n\")\n}\n\n// ── Generator ───────────────────────────────────────────────────────────\n\nasync function generate(ctx: GeneratorContext): Promise<GeneratedFiles> {\n const entries: Record<string, ContextWindowEntry> = {}\n\n const anthropicSrc = sources.find(s => s.id === \"llm-anthropic\")\n if (anthropicSrc) {\n const parsed = AnthropicSnapshotSchema.parse(await ctx.fetchSource(anthropicSrc))\n for (const m of parsed.data) {\n if (!m.max_input_tokens || !m.max_tokens) continue\n entries[m.id] = {\n contextWindow: m.max_input_tokens,\n maxOutput: m.max_tokens,\n ...(m.display_name ? { displayName: m.display_name } : {}),\n provider: \"anthropic\",\n }\n }\n }\n\n const groqSrc = sources.find(s => s.id === \"llm-groq\")\n if (groqSrc) {\n const parsed = GroqSnapshotSchema.parse(await ctx.fetchSource(groqSrc))\n for (const m of parsed.data) {\n if (!m.context_window) continue\n entries[m.id] = {\n contextWindow: m.context_window,\n ...(m.max_completion_tokens ? { maxOutput: m.max_completion_tokens } : {}),\n provider: \"groq\",\n }\n }\n }\n\n const xaiSrc = sources.find(s => s.id === \"llm-xai\")\n if (xaiSrc) {\n const parsed = XaiSnapshotSchema.parse(await ctx.fetchSource(xaiSrc))\n for (const m of parsed.data) {\n if (!m.context_length) continue\n entries[m.id] = { contextWindow: m.context_length, provider: \"xai\" }\n }\n }\n\n const moonshotSrc = sources.find(s => s.id === \"llm-moonshot\")\n if (moonshotSrc) {\n const parsed = MoonshotSnapshotSchema.parse(await ctx.fetchSource(moonshotSrc))\n for (const m of parsed.data) {\n if (!m.context_length) continue\n entries[m.id] = { contextWindow: m.context_length, provider: \"moonshot\" }\n }\n }\n\n return { [OUTPUT_PATH]: serializeFile(entries) }\n}\n\nconst sources: CatalogSource[] = [\n {\n id: \"llm-anthropic\",\n url: \"https://api.anthropic.com/v1/models?limit=1000\",\n headers: {\n \"x-api-key\": \"env:ANTHROPIC_API_KEY\",\n \"anthropic-version\": \"2023-06-01\",\n },\n },\n {\n id: \"llm-groq\",\n url: \"https://api.groq.com/openai/v1/models\",\n headers: { Authorization: \"Bearer env:GROQ_API_KEY\" },\n },\n {\n id: \"llm-xai\",\n url: \"https://api.x.ai/v1/models\",\n headers: { Authorization: \"Bearer env:XAI_API_KEY\" },\n },\n {\n id: \"llm-moonshot\",\n url: \"https://api.moonshot.ai/v1/models\",\n headers: { Authorization: \"Bearer env:MOONSHOT_API_KEY\" },\n },\n]\n\nexport const llmContextWindowsGenerator = defineGenerator({\n name: \"llm:context-windows\",\n modality: \"llm\",\n sources,\n generate,\n})\n","/**\n * Shared CatalogVoice[] → TS-source serializer for the voice generators.\n *\n * The mapping (raw provider JSON → CatalogVoice) lives in\n * `@agentproto/model-catalog/providers` so build time and runtime share it;\n * this module only turns the mapped voices into a committed `*.generated.ts`.\n * Field emit order is fixed (matches the historical generator output) so the\n * generated file stays diff-stable across runs.\n */\n\nimport type { CatalogVoice } from \"@agentproto/model-catalog/schema/voice\"\n\nfunction serializeVoice(v: CatalogVoice): string {\n const lines: string[] = [\" {\"]\n lines.push(` catalogId: ${JSON.stringify(v.catalogId)},`)\n lines.push(` providerVoiceId: ${JSON.stringify(v.providerVoiceId)},`)\n lines.push(` provider: ${JSON.stringify(v.provider)},`)\n lines.push(` label: ${JSON.stringify(v.label)},`)\n lines.push(` description: ${JSON.stringify(v.description)},`)\n lines.push(` gender: ${JSON.stringify(v.gender)},`)\n lines.push(` primaryLanguage: ${JSON.stringify(v.primaryLanguage)},`)\n lines.push(\n ` supportedLanguages: [${v.supportedLanguages.map(l => JSON.stringify(l)).join(\", \")}],`,\n )\n if (v.quality !== undefined) lines.push(` quality: ${JSON.stringify(v.quality)},`)\n if (v.featured !== undefined) lines.push(` featured: ${v.featured},`)\n if (v.samplePath !== undefined) lines.push(` samplePath: ${JSON.stringify(v.samplePath)},`)\n if (v.age !== undefined) lines.push(` age: ${JSON.stringify(v.age)},`)\n lines.push(\" },\")\n return lines.join(\"\\n\")\n}\n\n/**\n * Render a full generated voice module.\n *\n * @param generatorName e.g. `voice:elevenlabs` (goes in the header comment)\n * @param exportName e.g. `ELEVENLABS_VOICES`\n * @param voices mapped voices, in emit order\n */\nexport function serializeVoiceModule(\n generatorName: string,\n exportName: string,\n voices: readonly CatalogVoice[],\n): string {\n const lines: string[] = [\n `// Generated by @agentproto/catalog-sync generator ${generatorName}`,\n \"// DO NOT EDIT MANUALLY — regenerate with catalog-sync\",\n \"\",\n 'import type { CatalogVoice } from \"@agentproto/model-catalog/schema/voice\"',\n \"\",\n `export const ${exportName}: readonly CatalogVoice[] = [`,\n ]\n for (const v of voices) lines.push(serializeVoice(v))\n lines.push(\"] as const\")\n lines.push(\"\")\n return lines.join(\"\\n\")\n}\n","/**\n * voice-elevenlabs generator — reads the ElevenLabs /v1/voices snapshot and\n * emits a CatalogVoice[]-shaped generated TS file.\n *\n * The raw → CatalogVoice mapping lives in\n * `@agentproto/model-catalog/providers` (shared with the runtime\n * live-on-setup path); this generator only fetches, validates, and\n * serializes. Provider-native ids only; no product-specific aliases.\n */\n\nimport {\n ElevenLabsVoicesSnapshotSchema,\n mapElevenLabsVoices,\n} from \"@agentproto/model-catalog/providers\"\n\nimport type {\n CatalogGenerator,\n CatalogSource,\n GeneratedFiles,\n GeneratorContext,\n} from \"../types.js\"\nimport { defineGenerator } from \"../types.js\"\nimport { serializeVoiceModule } from \"./serialize-voices.js\"\n\n// `id` MUST match the snapshot filename stem — the framework's\n// `ctx.fetchSource` resolves `snapshots/<id>.json` (and is the single,\n// dist-safe reader; generators never touch the filesystem themselves).\nexport const ELEVENLABS_SOURCE: CatalogSource = {\n id: \"voice-elevenlabs\",\n url: \"https://api.elevenlabs.io/v1/voices\",\n // Live refresh needs the account key; offline reads ignore this.\n headers: { \"xi-api-key\": \"env:ELEVENLABS_API_KEY\" },\n}\n\nconst OUTPUT_PATH = \"packages/catalog-sync/generated/voice-elevenlabs.generated.ts\"\n\nexport const voiceElevenlabs: CatalogGenerator = defineGenerator({\n name: \"voice:elevenlabs\",\n modality: \"voice\",\n sources: [ELEVENLABS_SOURCE],\n\n async generate(ctx: GeneratorContext): Promise<GeneratedFiles> {\n // Snapshot-first (refresh re-fetches) — both handled by the framework.\n const snapshot = ElevenLabsVoicesSnapshotSchema.parse(\n await ctx.fetchSource(ELEVENLABS_SOURCE),\n )\n const voices = mapElevenLabsVoices(snapshot)\n return {\n [OUTPUT_PATH]: serializeVoiceModule(\n \"voice:elevenlabs\",\n \"ELEVENLABS_VOICES\",\n voices,\n ),\n }\n },\n})\n","/**\n * voice-minimax generator — reads the MiniMax /v1/get_voice snapshot and\n * emits a CatalogVoice[]-shaped generated TS file.\n *\n * The raw → CatalogVoice mapping lives in\n * `@agentproto/model-catalog/providers` (shared with the runtime\n * live-on-setup path); this generator only fetches, validates, and\n * serializes. Provider-native ids only; no product-specific aliases.\n */\n\nimport {\n mapMinimaxVoices,\n MinimaxVoicesSnapshotSchema,\n} from \"@agentproto/model-catalog/providers\"\n\nimport type {\n CatalogGenerator,\n CatalogSource,\n GeneratedFiles,\n GeneratorContext,\n} from \"../types.js\"\nimport { defineGenerator } from \"../types.js\"\nimport { serializeVoiceModule } from \"./serialize-voices.js\"\n\n// `id` MUST match the snapshot filename stem — the framework's\n// `ctx.fetchSource` resolves `snapshots/<id>.json` (single dist-safe reader;\n// generators never touch the filesystem themselves).\nexport const MINIMAX_SOURCE: CatalogSource = {\n id: \"voice-minimax\",\n url: \"https://api.minimax.io/v1/get_voice\",\n // get_voice is a POST; live refresh needs the account key (Bearer). Without\n // MINIMAX_API_KEY set, the framework reuses the committed snapshot.\n method: \"POST\",\n headers: {\n Authorization: \"Bearer env:MINIMAX_API_KEY\",\n \"Content-Type\": \"application/json\",\n },\n body: { voice_type: \"system\" },\n}\n\nconst OUTPUT_PATH = \"packages/catalog-sync/generated/voice-minimax.generated.ts\"\n\nexport const voiceMinimax: CatalogGenerator = defineGenerator({\n name: \"voice:minimax\",\n modality: \"voice\",\n sources: [MINIMAX_SOURCE],\n\n async generate(ctx: GeneratorContext): Promise<GeneratedFiles> {\n // Snapshot-first (refresh re-fetches) — both handled by the framework.\n const snapshot = MinimaxVoicesSnapshotSchema.parse(\n await ctx.fetchSource(MINIMAX_SOURCE),\n )\n const voices = mapMinimaxVoices(snapshot)\n return {\n [OUTPUT_PATH]: serializeVoiceModule(\n \"voice:minimax\",\n \"MINIMAX_VOICES\",\n voices,\n ),\n }\n },\n})\n","/**\n * image-replicate generator — reads a curated Replicate image-models\n * snapshot and emits ImageModelDefinition[]-shaped generated TS entries.\n *\n * Mirrors the shape from packages/model-catalog/src/image/catalog.ts exactly.\n * Provider-native ids only; no product-specific aliases.\n */\n\nimport type {\n CatalogGenerator,\n CatalogSource,\n GeneratedFiles,\n GeneratorContext,\n} from \"../types.js\"\nimport { defineGenerator } from \"../types.js\"\n\n// ── Replicate snapshot shapes ───────────────────────────────────────────\n\ninterface ReplicateOpenApiSchema {\n input: { type: string; properties: Record<string, { type: string; items?: { type: string }; format?: string }> }\n output: { type: string; items?: { type: string; format?: string }; format?: string }\n}\n\ninterface ReplicateLatestVersion {\n id: string\n created_at: string\n openapi_schema: ReplicateOpenApiSchema\n}\n\ninterface ReplicateModel {\n owner: string\n name: string\n description: string\n visibility: string\n run_count: number\n cover_image_url: string | null\n latest_version: ReplicateLatestVersion\n}\n\ninterface ReplicateSnapshot {\n _meta: Record<string, unknown>\n models: ReplicateModel[]\n}\n\n// ── ImageModelDefinition mirror (from packages/model-catalog/src/image/catalog.ts) ──\n\ninterface ImageModelPricing {\n costPerImage: number\n costTier: \"low\" | \"medium\" | \"high\"\n billingUnit: \"per_image\"\n baseCost: number\n creditCost?: number\n overrideCreditCost?: number\n}\n\ninterface ImageModelCapabilities {\n generate: boolean\n edit: boolean\n upscale?: boolean\n}\n\ninterface ImageModelReferenceImages {\n supported: boolean\n fieldName: \"image_input\" | \"input_images\" | \"input_image\" | \"none\"\n maxCount: number\n singular: boolean\n}\n\ninterface ImageModelAspectRatio {\n supported: string[]\n default: string\n}\n\ninterface ImageModelEntry {\n id: string\n name: string\n providerId: string\n provider: string\n capabilities: ImageModelCapabilities\n referenceImages: ImageModelReferenceImages\n aspectRatio: ImageModelAspectRatio\n output: \"string\" | \"array\"\n pricing: ImageModelPricing\n description: string\n agentVisible: boolean\n triggerWord?: string\n}\n\n// ── Pricing (hand-authored, mirrors model-catalog) ──────────────────────\n\ninterface PricingRecord {\n costPerImage: number\n costTier: \"low\" | \"medium\" | \"high\"\n baseCost: number\n creditCost?: number\n overrideCreditCost?: number\n}\n\nconst PRICING: Record<string, PricingRecord> = {\n \"nano-banana-pro\": { costPerImage: 0.15, costTier: \"high\", baseCost: 0.15, creditCost: 10 },\n \"nano-banana-2\": { costPerImage: 0.06, costTier: \"medium\", baseCost: 0.06, creditCost: 5 },\n \"nano-banana\": { costPerImage: 0.04, costTier: \"low\", baseCost: 0.04, creditCost: 5 },\n \"flux-2-dev\": { costPerImage: 0.03, costTier: \"low\", baseCost: 0.03, creditCost: 3 },\n \"flux-kontext-pro\": { costPerImage: 0.04, costTier: \"low\", baseCost: 0.04, creditCost: 5 },\n \"flux-kontext-max\": { costPerImage: 0.08, costTier: \"medium\", baseCost: 0.08, creditCost: 8 },\n \"flux-1.1-pro-ultra\": { costPerImage: 0.06, costTier: \"medium\", baseCost: 0.06, creditCost: 8 },\n \"seedream-4\": { costPerImage: 0.03, costTier: \"low\", baseCost: 0.03, creditCost: 3 },\n \"recraft-v3\": { costPerImage: 0.04, costTier: \"low\", baseCost: 0.04, creditCost: 5 },\n \"image-01\": { costPerImage: 0.02, costTier: \"low\", baseCost: 0.02, creditCost: 2 },\n \"gpt-image-1\": { costPerImage: 0.04, costTier: \"low\", baseCost: 0.04, creditCost: 5 },\n \"ideogram-v3-turbo\": { costPerImage: 0.03, costTier: \"low\", baseCost: 0.03, creditCost: 4 },\n \"flux-1.1-pro\": { costPerImage: 0.04, costTier: \"low\", baseCost: 0.04, creditCost: 5 },\n}\n\n// Models visible to agents (the active generation ones)\nconst AGENT_VISIBLE = new Set([\n \"nano-banana-pro\",\n \"nano-banana-2\",\n \"nano-banana\",\n \"flux-2-dev\",\n \"flux-kontext-pro\",\n \"flux-kontext-max\",\n \"flux-1.1-pro-ultra\",\n \"seedream-4\",\n \"recraft-v3\",\n \"image-01\",\n \"gpt-image-1\",\n \"ideogram-v3-turbo\",\n])\n\nconst ASPECT_RATIOS_DEFAULT: ImageModelAspectRatio = {\n supported: [\"1:1\", \"9:16\", \"16:9\", \"2:3\", \"3:2\", \"3:4\", \"4:3\"],\n default: \"1:1\",\n}\n\nconst ASPECT_RATIOS_WIDE: ImageModelAspectRatio = {\n supported: [\"1:1\", \"9:16\", \"16:9\", \"2:3\", \"3:2\", \"3:4\", \"4:3\", \"4:5\", \"5:4\"],\n default: \"1:1\",\n}\n\nconst ASPECT_RATIOS_ULTRA: ImageModelAspectRatio = {\n supported: [\"1:1\", \"9:16\", \"16:9\", \"21:9\", \"9:21\", \"3:4\", \"4:3\"],\n default: \"1:1\",\n}\n\nconst ASPECT_RATIOS_NBPRO: ImageModelAspectRatio = {\n supported: [\n \"1:1\", \"9:16\", \"16:9\", \"2:3\", \"3:2\", \"3:4\", \"4:3\",\n \"4:5\", \"5:4\", \"21:9\",\n ],\n default: \"match_input_image\",\n}\n\nconst ASPECT_RATIOS_NB2: ImageModelAspectRatio = {\n supported: [\n \"1:1\", \"9:16\", \"16:9\", \"2:3\", \"3:2\", \"3:4\", \"4:3\",\n \"4:5\", \"5:4\",\n ],\n default: \"match_input_image\",\n}\n\nconst ASPECT_RATIOS_SQUARE: ImageModelAspectRatio = {\n supported: [\"1:1\"],\n default: \"1:1\",\n}\n\ninterface ModelSpec {\n id: string\n name: string\n capabilities: ImageModelCapabilities\n referenceImages: ImageModelReferenceImages\n aspectRatio: ImageModelAspectRatio\n output: \"string\" | \"array\"\n triggerWord?: string\n}\n\nconst MODEL_SPECS: Record<string, ModelSpec> = {\n \"nano-banana-pro\": {\n id: \"nano-banana-pro\",\n name: \"Nano Banana Pro\",\n capabilities: { generate: true, edit: true },\n referenceImages: { supported: true, fieldName: \"image_input\", maxCount: 14, singular: false },\n aspectRatio: ASPECT_RATIOS_NBPRO,\n output: \"string\",\n },\n \"nano-banana-2\": {\n id: \"nano-banana-2\",\n name: \"Nano Banana 2\",\n capabilities: { generate: true, edit: true },\n referenceImages: { supported: true, fieldName: \"image_input\", maxCount: 4, singular: false },\n aspectRatio: ASPECT_RATIOS_NB2,\n output: \"string\",\n },\n \"nano-banana\": {\n id: \"nano-banana\",\n name: \"Nano Banana\",\n capabilities: { generate: true, edit: true },\n referenceImages: { supported: true, fieldName: \"image_input\", maxCount: 4, singular: false },\n aspectRatio: ASPECT_RATIOS_DEFAULT,\n output: \"string\",\n },\n \"flux-2-dev\": {\n id: \"flux-2-dev\",\n name: \"Flux 2 Dev\",\n capabilities: { generate: true, edit: true },\n referenceImages: { supported: true, fieldName: \"input_images\", maxCount: 5, singular: false },\n aspectRatio: ASPECT_RATIOS_WIDE,\n output: \"string\",\n },\n \"flux-kontext-pro\": {\n id: \"flux-kontext-pro\",\n name: \"Flux Kontext Pro\",\n capabilities: { generate: true, edit: true },\n referenceImages: { supported: true, fieldName: \"input_image\", maxCount: 1, singular: true },\n aspectRatio: ASPECT_RATIOS_DEFAULT,\n output: \"string\",\n },\n \"flux-kontext-max\": {\n id: \"flux-kontext-max\",\n name: \"Flux Kontext Max\",\n capabilities: { generate: true, edit: true },\n referenceImages: { supported: true, fieldName: \"input_image\", maxCount: 1, singular: true },\n aspectRatio: ASPECT_RATIOS_DEFAULT,\n output: \"string\",\n },\n \"flux-1.1-pro-ultra\": {\n id: \"flux-1.1-pro-ultra\",\n name: \"Flux 1.1 Pro Ultra\",\n capabilities: { generate: true, edit: false },\n referenceImages: { supported: false, fieldName: \"none\", maxCount: 0, singular: false },\n aspectRatio: ASPECT_RATIOS_ULTRA,\n output: \"string\",\n },\n \"seedream-4\": {\n id: \"seedream-4\",\n name: \"SeedReam 4\",\n capabilities: { generate: true, edit: true },\n referenceImages: { supported: true, fieldName: \"image_input\", maxCount: 10, singular: false },\n aspectRatio: ASPECT_RATIOS_DEFAULT,\n output: \"string\",\n },\n \"recraft-v3\": {\n id: \"recraft\",\n name: \"Recraft V3\",\n capabilities: { generate: true, edit: false },\n referenceImages: { supported: false, fieldName: \"none\", maxCount: 0, singular: false },\n aspectRatio: ASPECT_RATIOS_SQUARE,\n output: \"string\",\n },\n \"image-01\": {\n id: \"minimax\",\n name: \"MiniMax Image\",\n capabilities: { generate: true, edit: false },\n referenceImages: { supported: false, fieldName: \"none\", maxCount: 0, singular: false },\n aspectRatio: { supported: [\"1:1\", \"9:16\", \"16:9\", \"3:4\", \"4:3\"], default: \"1:1\" },\n output: \"array\",\n },\n \"gpt-image-1\": {\n id: \"gpt-image-1\",\n name: \"OpenAI GPT Image 1\",\n capabilities: { generate: true, edit: true },\n referenceImages: { supported: true, fieldName: \"input_image\", maxCount: 1, singular: true },\n aspectRatio: { supported: [\"1:1\", \"2:3\", \"3:2\"], default: \"1:1\" },\n output: \"string\",\n },\n \"ideogram-v3-turbo\": {\n id: \"ideogram-v3\",\n name: \"Ideogram v3\",\n capabilities: { generate: true, edit: false },\n referenceImages: { supported: false, fieldName: \"none\", maxCount: 0, singular: false },\n aspectRatio: { supported: [\"1:1\", \"9:16\", \"16:9\", \"2:3\", \"3:2\"], default: \"1:1\" },\n output: \"string\",\n },\n \"flux-1.1-pro\": {\n id: \"flux\",\n name: \"Flux 1.1 Pro\",\n capabilities: { generate: true, edit: false },\n referenceImages: { supported: false, fieldName: \"none\", maxCount: 0, singular: false },\n aspectRatio: { supported: [\"1:1\", \"9:16\", \"16:9\"], default: \"1:1\" },\n output: \"string\",\n },\n}\n\nfunction mapModel(raw: ReplicateModel): ImageModelEntry {\n const providerId = `${raw.owner}/${raw.name}`\n const spec = MODEL_SPECS[raw.name] ?? {\n id: raw.name,\n name: raw.name,\n capabilities: { generate: true, edit: false },\n referenceImages: { supported: false, fieldName: \"none\" as const, maxCount: 0, singular: false },\n aspectRatio: ASPECT_RATIOS_DEFAULT,\n output: \"string\" as const,\n }\n\n const pricing = PRICING[raw.name] ?? {\n costPerImage: 0.03,\n costTier: \"low\" as const,\n baseCost: 0.03,\n creditCost: 3,\n }\n\n return {\n id: spec.id,\n name: spec.name,\n providerId,\n provider: raw.owner === \"openai\" ? \"openai\" : raw.owner === \"minimax\" ? \"minimax\" : \"replicate\",\n capabilities: spec.capabilities,\n referenceImages: spec.referenceImages,\n aspectRatio: spec.aspectRatio,\n output: spec.output,\n pricing: {\n costPerImage: pricing.costPerImage,\n costTier: pricing.costTier,\n billingUnit: \"per_image\" as const,\n baseCost: pricing.baseCost,\n ...(pricing.creditCost !== undefined ? { creditCost: pricing.creditCost } : {}),\n ...(pricing.overrideCreditCost !== undefined ? { overrideCreditCost: pricing.overrideCreditCost } : {}),\n },\n description: raw.description,\n agentVisible: AGENT_VISIBLE.has(raw.name),\n ...(spec.triggerWord ? { triggerWord: spec.triggerWord } : {}),\n }\n}\n\n// ── Generator ────────────────────────────────────────────────────────────\n\n// `id` MUST match the snapshot filename stem — the framework's\n// `ctx.fetchSource` resolves `snapshots/<id>.json` (single dist-safe reader;\n// generators never touch the filesystem themselves).\n// The Replicate models endpoint is authed. Declare the token as an `env:` header\n// token so the runner's missing-env gate (runner.ts `resolveHeaders`) SKIPS the\n// refresh and reuses the committed snapshot when `REPLICATE_API_TOKEN` is absent\n// — exactly like the authed LLM sources (Anthropic/Groq/xAI/Moonshot). Without\n// this a token-less `catalog-sync generate --refresh` fetched unauthenticated,\n// 401'd, and threw — crashing the whole run for anyone (or the weekly Action)\n// without the secret. `--check` never fetches, so it is unaffected.\nexport const REPLICATE_SOURCE: CatalogSource = {\n id: \"image-replicate\",\n url: \"https://api.replicate.com/v1/models?query=image+generation\",\n headers: { Authorization: \"Bearer env:REPLICATE_API_TOKEN\" },\n}\n\nexport const imageReplicate: CatalogGenerator = defineGenerator({\n name: \"image:replicate\",\n modality: \"image\",\n sources: [REPLICATE_SOURCE],\n\n async generate(ctx: GeneratorContext): Promise<GeneratedFiles> {\n // Snapshot-first (refresh re-fetches) — both handled by the framework.\n const data = (await ctx.fetchSource(REPLICATE_SOURCE)) as ReplicateSnapshot\n\n const entries = data.models.map(mapModel)\n\n const lines: string[] = [\n \"// Generated by @agentproto/catalog-sync generator image:replicate\",\n \"// DO NOT EDIT MANUALLY — regenerate with catalog-sync\",\n \"\",\n \"import type { ImageModelDefinition } from \\\"@agentproto/model-catalog/image\\\"\",\n \"\",\n \"export const REPLICATE_IMAGE_MODELS: Record<string, ImageModelDefinition> = {\",\n ]\n\n for (const e of entries) {\n const trigger = e.triggerWord ? `,\\n triggerWord: ${JSON.stringify(e.triggerWord)}` : \"\"\n const creditCost = e.pricing.creditCost !== undefined\n ? `,\\n creditCost: ${e.pricing.creditCost}`\n : \"\"\n const override = e.pricing.overrideCreditCost !== undefined\n ? `,\\n overrideCreditCost: ${e.pricing.overrideCreditCost}`\n : \"\"\n\n lines.push(` ${JSON.stringify(e.id)}: {`)\n lines.push(` id: ${JSON.stringify(e.id)},`)\n lines.push(` name: ${JSON.stringify(e.name)},`)\n lines.push(` providerId: ${JSON.stringify(e.providerId)},`)\n lines.push(` provider: ${JSON.stringify(e.provider)},`)\n lines.push(` capabilities: { generate: ${e.capabilities.generate}, edit: ${e.capabilities.edit}${e.capabilities.upscale ? `, upscale: ${e.capabilities.upscale}` : \"\"} },`)\n lines.push(` referenceImages: {`)\n lines.push(` supported: ${e.referenceImages.supported},`)\n lines.push(` fieldName: ${JSON.stringify(e.referenceImages.fieldName)},`)\n lines.push(` maxCount: ${e.referenceImages.maxCount},`)\n lines.push(` singular: ${e.referenceImages.singular},`)\n lines.push(` },`)\n lines.push(` aspectRatio: {`)\n lines.push(` supported: [${e.aspectRatio.supported.map(a => JSON.stringify(a)).join(\", \")}],`)\n lines.push(` default: ${JSON.stringify(e.aspectRatio.default)},`)\n lines.push(` },`)\n lines.push(` output: ${JSON.stringify(e.output)},`)\n lines.push(` pricing: {`)\n lines.push(` costPerImage: ${e.pricing.costPerImage},`)\n lines.push(` costTier: ${JSON.stringify(e.pricing.costTier)},`)\n lines.push(` billingUnit: ${JSON.stringify(e.pricing.billingUnit)},`)\n lines.push(` baseCost: ${e.pricing.baseCost},${creditCost}${override}`)\n lines.push(` },`)\n lines.push(` description: ${JSON.stringify(e.description)},`)\n lines.push(` agentVisible: ${e.agentVisible},${trigger}`)\n lines.push(` },`)\n }\n\n lines.push(\"}\")\n lines.push(\"\")\n\n const outputPath = \"packages/catalog-sync/generated/image-replicate.generated.ts\"\n return { [outputPath]: lines.join(\"\\n\") }\n },\n})\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\"\nimport { dirname, join, resolve } from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\n\nimport type {\n CatalogGenerator,\n CatalogSource,\n GeneratedFiles,\n GeneratorContext,\n} from \"./types.js\"\n\nconst __dirname = dirname(fileURLToPath(import.meta.url))\n\n/**\n * The catalog-sync package directory. Resolves the same way whether the\n * module is loaded from `src/` (vitest, type-checking) or `dist/` (built) —\n * both sit one level below the package root, so walking up one directory\n * from this file lands on `packages/catalog-sync/`.\n */\nfunction catalogSyncDir(): string {\n return resolve(__dirname, \"..\")\n}\n\n/** Absolute path to a committed/pinned source snapshot. */\nfunction snapshotPath(id: string): string {\n return join(catalogSyncDir(), \"snapshots\", `${id}.json`)\n}\n\n/**\n * The monorepo root. Resolved by walking up from the catalog-sync package\n * until `pnpm-workspace.yaml` is found. Generated-file paths in\n * {@link GeneratedFiles} are repo-relative and are resolved against this.\n */\nfunction repoRoot(): string {\n let dir = catalogSyncDir()\n for (let i = 0; i < 12; i++) {\n if (existsSync(join(dir, \"pnpm-workspace.yaml\"))) return dir\n const parent = dirname(dir)\n if (parent === dir) break\n dir = parent\n }\n // Fallback: catalog-sync lives at <root>/packages/catalog-sync.\n return dirname(dirname(catalogSyncDir()))\n}\n\n/** Reads an existing file as UTF-8, or returns undefined when absent. */\nfunction readIfExists(absPath: string): string | undefined {\n if (!existsSync(absPath)) return undefined\n return readFileSync(absPath, \"utf8\")\n}\n\n/**\n * Resolve `env:VAR_NAME` tokens inside header values from `process.env`.\n * Returns the materialized headers plus the names of any referenced env vars\n * that are unset — the caller uses `missing` to decide whether the source can\n * be refreshed (we never fetch an authed endpoint without its key).\n */\nfunction resolveHeaders(headers?: Record<string, string>): {\n headers: Record<string, string>\n missing: string[]\n} {\n const out: Record<string, string> = {}\n const missing: string[] = []\n if (!headers) return { headers: out, missing }\n for (const [key, value] of Object.entries(headers)) {\n out[key] = value.replace(/env:([A-Z0-9_]+)/g, (_match, name: string) => {\n const v = process.env[name]\n if (v === undefined || v === \"\") {\n missing.push(name)\n return \"\"\n }\n return v\n })\n }\n return { headers: out, missing }\n}\n\nexport interface RunGeneratorsOptions {\n /** When true, missing snapshots are fetched from their pinned `url`. */\n refresh: boolean\n /** When true, generated files are written to disk at their repo-relative path. */\n write: boolean\n}\n\nexport interface RunGeneratorsResult {\n files: GeneratedFiles\n /** Repo-relative paths whose generated content differs from what is on disk. */\n changed: string[]\n}\n\n/**\n * Runs each generator, gathering its emitted files, then (optionally) writes\n * them. `changed` is ALWAYS computed — it is the diff of generated content\n * vs disk — so `--check` (write=false) can surface drift without mutating\n * anything. Writes only happen when `write=true` AND a path differs.\n */\nexport async function runGenerators(\n gens: CatalogGenerator[],\n opts: RunGeneratorsOptions\n): Promise<RunGeneratorsResult> {\n const files: GeneratedFiles = {}\n\n for (const gen of gens) {\n const ctx: GeneratorContext = {\n refresh: opts.refresh,\n async fetchSource(src: CatalogSource): Promise<unknown> {\n const path = snapshotPath(src.id)\n const existing = readIfExists(path)\n\n // Offline path (default): reuse the committed snapshot; error if none.\n if (!opts.refresh) {\n if (existing !== undefined) return JSON.parse(existing)\n throw new Error(\n `catalog-sync: no committed snapshot for source \"${src.id}\" ` +\n `(${path}), and --refresh is not set. Run ` +\n `\\`catalog-sync generate --refresh\\` to fetch ${src.url}.`\n )\n }\n\n // --refresh: force a live re-fetch (do NOT short-circuit on an existing\n // snapshot — refreshing is the whole point). Auth headers may embed\n // `env:VAR` tokens; if a referenced var is unset we can't authenticate,\n // so reuse the committed snapshot rather than fetch unauthenticated.\n const { headers, missing } = resolveHeaders(src.headers)\n if (missing.length > 0) {\n if (existing !== undefined) {\n process.stderr.write(\n `catalog-sync: skipping refresh of \"${src.id}\" — missing env ` +\n `${missing.join(\", \")}; reusing committed snapshot.\\n`\n )\n return JSON.parse(existing)\n }\n throw new Error(\n `catalog-sync: cannot refresh \"${src.id}\" — missing env ` +\n `${missing.join(\", \")} and no committed snapshot.`\n )\n }\n const res = await fetch(src.url, {\n method: src.method ?? \"GET\",\n headers,\n ...(src.body !== undefined\n ? { body: JSON.stringify(src.body) }\n : {}),\n })\n if (!res.ok) {\n throw new Error(\n `catalog-sync: fetch ${src.url} failed: ${res.status} ${res.statusText}`\n )\n }\n const text = await res.text()\n const parsed: unknown = JSON.parse(text)\n mkdirSync(dirname(path), { recursive: true })\n writeFileSync(path, `${JSON.stringify(parsed, null, 2)}\\n`, \"utf8\")\n return parsed\n },\n }\n\n const out = await gen.generate(ctx)\n for (const [path, content] of Object.entries(out)) {\n files[path] = content\n }\n }\n\n const root = repoRoot()\n const changed: string[] = []\n for (const [relPath, content] of Object.entries(files)) {\n const abs = join(root, relPath)\n const existing = readIfExists(abs)\n if (existing !== content) {\n changed.push(relPath)\n if (opts.write) {\n mkdirSync(dirname(abs), { recursive: true })\n writeFileSync(abs, content, \"utf8\")\n }\n }\n }\n\n return { files, changed }\n}\n","#!/usr/bin/env node\n\n/**\n * catalog-sync CLI.\n *\n * catalog-sync generate [--refresh] [--check]\n *\n * - `generate` (default) — generate from pinned snapshots, write changed files.\n * - `--refresh` — re-fetch each source's pinned URL into snapshots/.\n * - `--check` — generate in memory, diff vs committed files; exit 1\n * on drift. This is what CI runs. Never writes.\n */\n\nimport { llmOpenRouterGenerator } from \"./generators/llm-openrouter.js\"\nimport { llmRequestyGenerator } from \"./generators/llm-requesty.js\"\nimport { llmHuggingfaceGenerator } from \"./generators/llm-huggingface.js\"\nimport { llmContextWindowsGenerator } from \"./generators/llm-context-windows.js\"\nimport { voiceElevenlabs } from \"./generators/voice-elevenlabs.js\"\nimport { voiceMinimax } from \"./generators/voice-minimax.js\"\nimport { imageReplicate } from \"./generators/image-replicate.js\"\nimport { runGenerators } from \"./runner.js\"\n\nconst args = process.argv.slice(2)\nconst command = args[0] ?? \"\"\nconst flags = new Set(args.slice(1))\n\nconst KNOWN_FLAGS = new Set([\"--refresh\", \"--check\"])\nconst unknownFlags = [...flags].filter((f) => !KNOWN_FLAGS.has(f))\n\nif (command !== \"generate\" || unknownFlags.length > 0) {\n if (command !== \"generate\") {\n process.stderr.write(\n `catalog-sync: unknown command \"${command}\". Usage: catalog-sync generate [--refresh] [--check]\\n`\n )\n }\n if (unknownFlags.length > 0) {\n process.stderr.write(`catalog-sync: unknown flag(s) ${unknownFlags.join(\", \")}\\n`)\n }\n process.exit(2)\n}\n\nconst refresh = flags.has(\"--refresh\")\nconst check = flags.has(\"--check\")\nconst generators = [\n llmOpenRouterGenerator,\n llmRequestyGenerator,\n llmHuggingfaceGenerator,\n llmContextWindowsGenerator,\n voiceElevenlabs,\n voiceMinimax,\n imageReplicate,\n]\n\nconst { changed, files } = await runGenerators(generators, {\n refresh,\n write: !check,\n})\n\nif (check) {\n if (changed.length > 0) {\n process.stderr.write(\n `catalog-sync: drift detected — ${changed.length} file(s) differ from committed:\\n`\n )\n for (const p of changed) process.stderr.write(` ${p}\\n`)\n process.stderr.write(`Re-run \\`catalog-sync generate\\` to update.\\n`)\n process.exit(1)\n }\n process.stdout.write(\n `catalog-sync: no drift (${generators.length} generator(s), ${Object.keys(files).length} file(s) up to date).\\n`\n )\n process.exit(0)\n}\n\nif (changed.length > 0) {\n process.stdout.write(`catalog-sync: wrote ${changed.length} file(s):\\n`)\n for (const p of changed) process.stdout.write(` ${p}\\n`)\n} else {\n process.stdout.write(`catalog-sync: no changes.\\n`)\n}\nprocess.exit(0)\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -786,7 +786,8 @@ function mapModel(raw) {
|
|
|
786
786
|
}
|
|
787
787
|
var REPLICATE_SOURCE = {
|
|
788
788
|
id: "image-replicate",
|
|
789
|
-
url: "https://api.replicate.com/v1/models?query=image+generation"
|
|
789
|
+
url: "https://api.replicate.com/v1/models?query=image+generation",
|
|
790
|
+
headers: { Authorization: "Bearer env:REPLICATE_API_TOKEN" }
|
|
790
791
|
};
|
|
791
792
|
var imageReplicate = defineGenerator({
|
|
792
793
|
name: "image:replicate",
|