{"version":3,"file":"merger.d.ts","sourceRoot":"","sources":["../../src/registry/merger.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AA0C7E;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAyB7G;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CASjE","sourcesContent":["/**\n * WS15: Registry merger — convert RegistryProvider entries into the\n * @zhachory1/mewrite-ai Model<Api> shape so they can be injected into ModelRegistry.\n *\n * Compatibility constraint: existing model-registry.ts consumers keep\n * working. The merger produces models in the same shape as getModels()\n * outputs — existing code paths are unchanged.\n */\n\nimport type { Api, Model } from \"../types.js\";\nimport type { Registry, RegistryModel, RegistryProvider } from \"./schema.js\";\n\n// ---------------------------------------------------------------------------\n// Kind → Api mapping\n// ---------------------------------------------------------------------------\n\n/** Map registry provider kinds to the @zhachory1/mewrite-ai Api string */\nfunction kindToApi(kind: RegistryProvider[\"kind\"]): Api | undefined {\n\tswitch (kind) {\n\t\tcase \"anthropic\":\n\t\t\treturn \"anthropic\";\n\t\tcase \"openai\":\n\t\t\treturn \"openai-responses\";\n\t\tcase \"google\":\n\t\t\treturn \"google\";\n\t\tcase \"openrouter\":\n\t\t\treturn \"openai-completions\";\n\t\tcase \"mistral\":\n\t\t\treturn \"openai-completions\";\n\t\tcase \"bedrock\":\n\t\t\treturn \"bedrock-converse-stream\";\n\t\tcase \"gemini-cli\":\n\t\t\treturn \"google\";\n\t\tcase \"vertex\":\n\t\t\treturn \"google-vertex\";\n\t\tcase \"xai\":\n\t\t\treturn \"openai-completions\";\n\t\tcase \"groq\":\n\t\t\treturn \"openai-completions\";\n\t\tcase \"cerebras\":\n\t\t\treturn \"openai-completions\";\n\t\tcase \"other\":\n\t\t\treturn \"openai-completions\";\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\n\n// ---------------------------------------------------------------------------\n// Converter\n// ---------------------------------------------------------------------------\n\n/**\n * Convert a single RegistryModel + its parent RegistryProvider into\n * the Model<Api> shape used by @zhachory1/mewrite-ai's internal registry.\n */\nexport function registryModelToModel(provider: RegistryProvider, model: RegistryModel): Model<Api> | undefined {\n\tconst api = kindToApi(provider.kind);\n\tif (!api) return undefined;\n\n\tconst caps = model.capabilities ?? [];\n\n\treturn {\n\t\tid: model.id,\n\t\tname: model.displayName,\n\t\tapi,\n\t\tprovider: provider.id,\n\t\tbaseUrl: provider.baseUrl ?? \"\",\n\t\treasoning: caps.includes(\"reasoning\"),\n\t\tinput: caps.includes(\"vision\") ? [\"text\", \"image\"] : [\"text\"],\n\t\tcost: {\n\t\t\tinput: model.inputCostPerMtok ?? 0,\n\t\t\toutput: model.outputCostPerMtok ?? 0,\n\t\t\tcacheRead: 0,\n\t\t\tcacheWrite: 0,\n\t\t},\n\t\tcontextWindow: model.contextWindow,\n\t\tmaxTokens: model.maxOutputTokens ?? 16384,\n\t\theaders: undefined,\n\t\tcompat: undefined,\n\t} as Model<Api>;\n}\n\n/**\n * Convert all models from a Registry into Model<Api>[] entries.\n * Unknown provider kinds are silently skipped.\n */\nexport function registryToModels(registry: Registry): Model<Api>[] {\n\tconst result: Model<Api>[] = [];\n\tfor (const provider of registry.providers) {\n\t\tfor (const model of provider.models) {\n\t\t\tconst m = registryModelToModel(provider, model);\n\t\t\tif (m) result.push(m);\n\t\t}\n\t}\n\treturn result;\n}\n"]}