{"version":3,"sources":["/Users/ami/Documents/prometheus/x12i/ai-tools/dist/chunk-NBZ46UFS.cjs","../src/invoke/preferOpenRouter.ts","../src/invoke/applyOpenRouterInvokeRouting.ts","../src/invoke/buildDiagnostics.ts","../src/invoke/buildResolverOptions.ts","../src/invoke/enrichModelResolutionError.ts","../src/invoke/mapResolutionToRouterConfig.ts","../src/invoke/resolveInvokeModel.ts","../src/invoke/index.ts","../src/invoke/client.ts"],"names":["router","resolution"],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACA;ACvBA;AACE;AACA;AACA;AAAA,+CACK;AASA,SAAS,iCAAA,CACd,OAAA,EACS;AACT,EAAA,GAAA,CAAI,OAAO,QAAA,IAAY,SAAA,EAAW;AAChC,IAAA,OAAO,iDAAA,OAA+B,CAAA;AAAA,EACxC;AACA,EAAA,OAAO,4DAAA,OAA0C,CAAA;AACnD;AAEA,SAAS,gBAAA,CAAiB,KAAA,EAAwB;AAChD,EAAA,OAAO,SAAA,CAAU,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA;AACpC;AAKO,SAAS,uBAAA,CACd,QAAA,EACA,IAAA,EAA0C,OAAA,CAAQ,GAAA,EAC9B;AACpB,EAAA,MAAM,QAAA,kBAAU,QAAA,2BAAU,IAAA,mBAAK,GAAA;AAC/B,EAAA,GAAA,CAAI,QAAA,GAAW,CAAC,gBAAA,CAAiB,OAAO,CAAA,EAAG,OAAO,OAAA;AAClD,EAAA,MAAM,QAAA,kBAAU,GAAA,qBAAI,kBAAA,6BAAoB,IAAA,mBAAK,GAAA;AAC7C,EAAA,OAAO,QAAA,GAAW,KAAA,CAAA;AACpB;ADOA;AACA;AE1BO,SAAS,4BAAA,CACd,WAAA,EACA,QAAA,EAA+C,CAAC,CAAA,EACvB;AACzB,EAAA,MAAM,OAAA,EAAS,uBAAA,CAAwB,OAAA,CAAQ,gBAAgB,CAAA;AAC/D,EAAA,GAAA,CAAI,CAAC,MAAA,EAAQ,OAAO,WAAA;AAEpB,EAAA,MAAM,WAAA,mBAAa,OAAA,CAAQ,UAAA,UAAc,wDAAA,GAAyB;AAClE,EAAA,MAAM,WAAA,EAAa,OAAA,CAAQ,UAAA;AAE3B,EAAA,MAAM,iBAAA,EAAmB,iCAAA,CAAkC,OAAA,CAAQ,gBAAgB,CAAA;AAEnF,EAAA,MAAM,cAAA,kBACJ,UAAA,6BAAY,sBAAA,IAAwB,KAAA,mBACnC,UAAA,6BAAY,sBAAA,IAAwB,MAAA,GACnC,8DAAA,UAA+B,EAAY;AAAA,IACzC,QAAA,EAAU,WAAA,CAAY,QAAA;AAAA,IACtB,OAAA,EAAS,WAAA,CAAY,KAAA;AAAA,IACrB,kBAAA,EAAoB;AAAA,EACtB,CAAC,CAAA;AAEL,EAAA,GAAA,CAAI,aAAA,EAAe;AACjB,IAAA,WAAA,CAAY,qBAAA,EAAuB,IAAA;AACnC,IAAA,GAAA,CAAI,WAAA,CAAY,SAAA,GAAY,WAAA,CAAY,SAAA,IAAa,YAAA,EAAc;AACjE,MAAA,WAAA,CAAY,cAAA,EAAgB,YAAA;AAAA,IAC9B;AAAA,EACF,EAAA,KAAO;AACL,IAAA,WAAA,CAAY,qBAAA,EAAuB,KAAA;AAAA,EACrC;AAEA,EAAA,OAAO,WAAA;AACT;AFiBA;AACA;AG7DO,SAAS,2BAAA,CACd,KAAA,EACA,UAAA,EACA,MAAA,EACkC;AAClC,EAAA,MAAM,WAAA,EAAa,UAAA,CAAW,WAAA,CAAY,QAAA,CAAS,qBAAqB,CAAA;AACxE,EAAA,MAAM,WAAA,EACJ,KAAA,CAAM,MAAA,IAAU,MAAA,CAAO,MAAA,GAAS,WAAA,EAAa,KAAA,CAAM,MAAA,EAAQ,KAAA,CAAA;AAE7D,EAAA,OAAO;AAAA,IACL,gBAAA,EAAkB,KAAA,CAAM,QAAA;AAAA,IACxB,aAAA,EAAe,KAAA,CAAM,KAAA;AAAA,IACrB,OAAA,EAAS,UAAA,CAAW,OAAA;AAAA,IACpB,mBAAA,EAAqB,UAAA,CAAW,mBAAA;AAAA,IAChC,UAAA,EAAY,UAAA,CAAW,UAAA;AAAA,IACvB,WAAA,EAAa,UAAA,CAAW,WAAA;AAAA,IACxB,OAAA,EAAS,UAAA,CAAW,OAAA;AAAA,IACpB,MAAA,EAAQ,UAAA,CAAW,MAAA;AAAA,IACnB,UAAA;AAAA,IACA,cAAA,mBAAgB,UAAA,CAAW,OAAA,UAAW,MAAA,CAAO;AAAA,EAC/C,CAAA;AACF;AHyDA;AACA;AIhFO,SAAS,+BAAA,CACd,QAAA,EAGI,CAAC,CAAA,EACiB;AACtB,EAAA,MAAM,WAAA,mBAAa,OAAA,CAAQ,UAAA,UAAc,wDAAA,GAAyB;AAClE,EAAA,MAAM,iBAAA,EAAmB,iCAAA,CAAkC,OAAA,CAAQ,gBAAgB,CAAA;AACnF,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,WAAA,mBAAa,OAAA,CAAQ,WAAA,UAAe,qCAAA;AAAA,IACpC,kBAAA,EAAoB;AAAA,EACtB,CAAA;AACF;AJ6EA;AACA;AK5FO,IAAM,yBAAA,EAA2B,0BAAA;AAEjC,IAAM,4BAAA,YAAN,MAAA,QAA0C,MAAM;AAAA,EAGrD,WAAA,CACW,UAAA,EACA,QAAA,EACT,KAAA,EACA;AACA,IAAA,KAAA;AAAA,MACE,CAAA,gBAAA,EAAmB,UAAU,CAAA,yCAAA,EAAA,EAAA,CAC1B,SAAA,EAAW,CAAA,iBAAA,EAAoB,QAAQ,CAAA,CAAA,EAAA,EAAM,EAAA;AAAA,IAClD,qCAAA;AAPS,IAAA,IAAA,CAAA,WAAA,EAAA,UAAA;AACA,IAAA,IAAA,CAAA,SAAA,EAAA,QAAA;AAOT,IAAA,IAAA,CAAK,KAAA,EAAO,6BAAA;AACZ,IAAA,GAAA,CAAI,MAAA,IAAU,KAAA,CAAA,EAAW;AACvB,MAAA,IAAA,CAAK,MAAA,EAAQ,KAAA;AAAA,IACf;AAAA,EACF;AAAA,EAZW;AAAA,EACA;AAAA,iBAJF,KAAA,EAAO,yBAAA;AAgBlB,UAAA;AAEO,SAAS,0BAAA,CACd,KAAA,EACA,UAAA,EACoD;AACpD,EAAA,MAAM,KAAA,EAAO,IAAI,2CAAA,CAAqB,KAAA,EAAO,UAAU,CAAA;AACvD,EAAA,GAAA,CAAI,mDAAA,KAAoB,CAAM,KAAK,CAAA,EAAG;AACpC,IAAA,OAAO,IAAI,2BAAA,CAA4B,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,QAAA,EAAU,IAAI,CAAA;AAAA,EAC1E;AACA,EAAA,OAAO,IAAA;AACT;ALuFA;AACA;AMpHO,SAAS,2BAAA,CACd,UAAA,EACA,KAAA,EACA,eAAA,EACyB;AACzB,EAAA,MAAM,IAAA,EAAM,gEAAA,UAAiC,EAAY,KAAA,CAAM,KAAA,EAAO;AAAA,IACpE,YAAA,EAAc,UAAA,CAAW;AAAA,EAC3B,CAAC,CAAA;AACD,EAAA,GAAA,CAAI,GAAA,EAAK;AACP,IAAA,OAAO,EAAE,QAAA,EAAU,GAAA,CAAI,QAAA,EAAU,KAAA,EAAO,GAAA,CAAI,MAAM,CAAA;AAAA,EACpD;AAEA,EAAA,GAAA,CAAI,UAAA,CAAW,oBAAA,IAAwB,IAAA,EAAM;AAC3C,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,YAAA;AAAA,MACV,KAAA,EAAO,UAAA,CAAW;AAAA,IACpB,CAAA;AAAA,EACF;AAEA,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI,KAAA;AAEJ,EAAA,MAAM,MAAA,EAAQ,UAAA,CAAW,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AAC5C,EAAA,GAAA,CAAI,MAAA,EAAQ,CAAA,EAAG;AACb,IAAA,SAAA,mCACE,UAAA,qBAAW,MAAA,6BAAQ,YAAA,UAAc,UAAA,CAAW,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,KAAK,GAAA;AACpE,IAAA,MAAA,EAAQ,UAAA,CAAW,OAAA,CAAQ,KAAA,CAAM,MAAA,EAAQ,CAAC,CAAA;AAAA,EAC5C,EAAA,KAAO;AACL,IAAA,MAAA,EAAQ,UAAA,CAAW,OAAA;AACnB,IAAA,GAAA,iBAAI,UAAA,uBAAW,MAAA,+BAAQ,YAAA,EAAY;AACjC,MAAA,SAAA,EAAW,UAAA,CAAW,MAAA,CAAO,UAAA;AAAA,IAC/B;AAAA,EACF;AAEA,EAAA,GAAA,CAAI,CAAC,SAAA,GAAY,eAAA,EAAiB;AAChC,IAAA,SAAA,EAAW,eAAA;AAAA,EACb;AAEA,EAAA,OAAO,EAAE,QAAA,mBAAU,QAAA,UAAY,IAAA,EAAI,MAAM,CAAA;AAC3C;AN4GA;AACA;AO1IA,SAAS,qBAAA,CAAsB,KAAA,EAAuC;AACpE,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,IAAA;AAAA,IACP,OAAA,EAAS,KAAA;AAAA,IACT,MAAA,EAAQ,IAAA;AAAA,IACR,mBAAA,EAAqB,KAAA;AAAA,IACrB,UAAA,EAAY,CAAA;AAAA,IACZ,WAAA,EAAa,CAAC,CAAA;AAAA,IACd,cAAA,EAAgB,sCAAA;AAAA,IAChB,eAAA,EAAiB;AAAA,EACnB,CAAA;AACF;AAEA,SAAS,cAAA,CAAe,OAAA,EAA8D;AACpF,EAAA,OAAO,IAAI,4CAAA,CAAsB;AAAA,IAC/B,WAAA,EAAa,OAAA,CAAQ,WAAA;AAAA,IACrB,eAAA,EAAiB;AAAA,MACf,UAAA,mBAAY,OAAA,CAAQ,UAAA,UAAc,wDAAA;AAAyB,IAC7D;AAAA,EACF,CAAC,CAAA;AACH;AAKA,MAAA,SAAsB,kBAAA,CACpB,KAAA,EACA,QAAA,EAAwC,CAAC,CAAA,EACH;AACtC,EAAA,MAAM,MAAA,kBAAQ,KAAA,uBAAM,KAAA,+BAAO,IAAA,qBAAK,GAAA;AAChC,EAAA,GAAA,CAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,mCAAA,CAAa,sBAAA,EAAwB,4DAA4D,CAAA;AAAA,EAC7G;AAEA,EAAA,MAAM,aAAA,EAA2C,EAAE,GAAG,KAAA,EAAO,MAAM,CAAA;AAEnE,EAAA,GAAA,CAAI,OAAA,CAAQ,WAAA,GAAc,mDAAA,KAAyB,CAAA,EAAG;AACpD,IAAA,MAAM,IAAI,qDAAA,CAA+B,KAAK,CAAA;AAAA,EAChD;AAEA,EAAA,MAAM,WAAA,mBAAa,OAAA,CAAQ,UAAA,UAAc,wDAAA,GAAyB;AAClE,EAAA,MAAM,iBAAA,EAAmB,uBAAA,CAAwB,OAAA,CAAQ,gBAAgB,CAAA;AACzE,EAAA,MAAM,cAAA,EAAgB,OAAA,CAAQ,cAAA,IAAkB,KAAA;AAEhD,EAAA,GAAA,CAAI,CAAC,aAAA,EAAe;AAClB,IAAA,MAAMA,QAAAA,EAAS,4BAAA;AAAA,MACb;AAAA,QACE,QAAA,oCAAU,KAAA,CAAM,QAAA,UAAY,OAAA,CAAQ,iBAAA,UAAmB,IAAA;AAAA,QACvD;AAAA,MACF,CAAA;AAAA,MACA;AAAA,QACE,UAAA;AAAA,QACA,gBAAA,EAAkB,OAAA,CAAQ,gBAAA;AAAA,QAC1B;AAAA,MACF;AAAA,IACF,CAAA;AACA,IAAA,MAAMC,YAAAA,EAAa,qBAAA,CAAsB,KAAK,CAAA;AAC9C,IAAA,OAAO;AAAA,MACL,MAAA,EAAAD,OAAAA;AAAA,MACA,UAAA,EAAAC,WAAAA;AAAA,MACA,WAAA,EAAa,2BAAA,CAA4B,YAAA,EAAcA,WAAAA,EAAYD,OAAM;AAAA,IAC3E,CAAA;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,mBAAU,OAAA,CAAQ,OAAA,UAAW,cAAA,CAAe,OAAO,GAAA;AACzD,EAAA,MAAM,gBAAA,EAAkB,+BAAA,CAAgC;AAAA,IACtD,UAAA;AAAA,IACA,gBAAA,EAAkB,OAAA,CAAQ,gBAAA;AAAA,IAC1B,WAAA,EAAa,OAAA,CAAQ;AAAA,EACvB,CAAC,CAAA;AAED,EAAA,MAAM,WAAA,EAAa,MAAM,OAAA,CAAQ,YAAA;AAAA,IAC/B,EAAE,QAAA,EAAU,KAAA,CAAM,QAAA,EAAU,MAAM,CAAA;AAAA,IAClC;AAAA,EACF,CAAA;AAEA,EAAA,GAAA,CAAI,CAAC,UAAA,CAAW,KAAA,EAAO;AACrB,IAAA,MAAM,0BAAA,CAA2B,YAAA,EAAc,UAAU,CAAA;AAAA,EAC3D;AAEA,EAAA,MAAM,OAAA,EAAS,4BAAA;AAAA,IACb,2BAAA,CAA4B,UAAA,EAAY,YAAA,EAAc,OAAA,CAAQ,eAAe,CAAA;AAAA,IAC7E;AAAA,MACE,UAAA;AAAA,MACA,gBAAA,EAAkB,OAAA,CAAQ,gBAAA;AAAA,MAC1B,gBAAA;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA,EAAa,2BAAA,CAA4B,YAAA,EAAc,UAAA,EAAY,MAAM;AAAA,EAC3E,CAAA;AACF;AP2HA;AACA;AQ5NA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AR+NF;AACA;AStOA,SAAS,eAAA,CAAgB,QAAA,EAA4C,CAAC,CAAA,EAAW;AAC/E,EAAA,OAAO,IAAA,CAAK,SAAA,CAAU;AAAA,IACpB,UAAA,mBAAY,OAAA,CAAQ,UAAA,UAAc,MAAA;AAAA,IAClC,WAAA,mBAAa,OAAA,CAAQ,WAAA,UAAe,OAAA;AAAA,IACpC,oBAAA,mBAAsB,OAAA,CAAQ,oBAAA,UAAwB,OAAA;AAAA,IACtD,QAAA,mBAAU,OAAA,CAAQ,QAAA,UAAY;AAAA,EAChC,CAAC,CAAA;AACH;AAEO,SAAS,yBAAA,CACd,QAAA,EAA4C,CAAC,CAAA,EACxB;AACrB,EAAA,MAAM,SAAA,mBAAW,OAAA,CAAQ,QAAA,UAAY,WAAA;AACrC,EAAA,MAAM,QAAA,EAAU,IAAI,4CAAA,CAAsB;AAAA,IACxC,QAAA;AAAA,IACA,UAAA,EAAY,OAAA,CAAQ,UAAA;AAAA,IACpB,WAAA,EAAa,OAAA,CAAQ,WAAA;AAAA,IACrB,eAAA,EAAiB;AAAA,MACf,UAAA,EAAY,wDAAA;AAAyB,IACvC;AAAA,EACF,CAAC,CAAA;AACD,EAAA,MAAM,WAAA,EAAa,IAAI,qCAAA,CAAe,OAAA,EAAS;AAAA,IAC7C,gBAAA,EAAkB,OAAA,CAAQ;AAAA,EAC5B,CAAC,CAAA;AACD,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA,EAAY,wDAAA;AAAyB,EACvC,CAAA;AACF;AAEA,IAAI,UAAA,EAAwC,IAAA;AAC5C,IAAI,aAAA,EAA8B,IAAA;AAG3B,SAAS,gCAAA,CAAA,EAAyC;AACvD,EAAA,UAAA,EAAY,IAAA;AACZ,EAAA,aAAA,EAAe,IAAA;AACjB;AAMA,MAAA,SAAsB,sBAAA,CACpB,QAAA,EAA4C,CAAC,CAAA,EAC7C,MAAA,EACqC;AACrC,EAAA,MAAM,IAAA,EAAM,eAAA,CAAgB,OAAO,CAAA;AACnC,EAAA,GAAA,CAAI,UAAA,GAAa,aAAA,IAAiB,GAAA,EAAK,OAAO,SAAA;AAE9C,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,EAAS,yBAAA,CAA0B,OAAO,CAAA;AAChD,IAAA,MAAM,MAAA,CAAO,OAAA,CAAQ,YAAA,CAAa,CAAA;AAClC,IAAA,UAAA,EAAY,MAAA;AACZ,IAAA,aAAA,EAAe,GAAA;AACf,IAAA,OAAO,MAAA;AAAA,EACT,EAAA,MAAA,CAAS,GAAA,EAAK;AACZ,oBAAA,MAAA,+BAAQ,IAAA,4BAAA,CAAO,4CAAA,EAA8C,GAAG,GAAA;AAChE,IAAA,OAAO,IAAA;AAAA,EACT;AACF;ATyNA;AACA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,29CAAC","file":"/Users/ami/Documents/prometheus/x12i/ai-tools/dist/chunk-NBZ46UFS.cjs","sourcesContent":[null,"import {\n  resolvePreferOpenRouter,\n  resolvePreferOpenRouterFromOptions,\n  readPreferOpenRouterFromEnv,\n} from \"@x12i/ai-profiles\";\nimport type { PreferOpenRouterOptions } from \"./types.js\";\n\nexport { readPreferOpenRouterFromEnv, resolvePreferOpenRouter };\n\n/**\n * Resolve OpenRouter preference for invoke-time routing.\n * Delegates to `@x12i/ai-profiles` {@link resolvePreferOpenRouter}.\n */\nexport function resolvePreferOpenRouterPreference(\n  options?: boolean | PreferOpenRouterOptions,\n): boolean {\n  if (typeof options === \"boolean\") {\n    return resolvePreferOpenRouter(options);\n  }\n  return resolvePreferOpenRouterFromOptions(options);\n}\n\nfunction isEnvPlaceholder(value: string): boolean {\n  return /^ENV\\./i.test(value.trim());\n}\n\n/**\n * Resolve OpenRouter API key from explicit option or OPENROUTER_API_KEY env.\n */\nexport function resolveOpenRouterApiKey(\n  explicit?: string,\n  env: Record<string, string | undefined> = process.env,\n): string | undefined {\n  const trimmed = explicit?.trim();\n  if (trimmed && !isEnvPlaceholder(trimmed)) return trimmed;\n  const fromEnv = env.OPENROUTER_API_KEY?.trim();\n  return fromEnv || undefined;\n}\n","import {\n  isEffectiveOpenRouterTransport,\n  loadOpenRouterRoutingEnv,\n} from \"../sync/openRouterRoutingEnv.js\";\nimport type { ModelResolutionSuccess } from \"../sync/modelNameResolver/types.js\";\nimport { resolveOpenRouterApiKey, resolvePreferOpenRouterPreference } from \"./preferOpenRouter.js\";\nimport type { InvokeRouterConfigSlice, PreferOpenRouterOptions } from \"./types.js\";\nimport type { OpenRouterRoutingConfig } from \"../sync/openRouterRoutingEnv.js\";\n\nexport type ApplyOpenRouterInvokeRoutingOptions = {\n  routingEnv?: OpenRouterRoutingConfig;\n  preferOpenRouter?: boolean | PreferOpenRouterOptions;\n  openRouterApiKey?: string;\n  resolution?: Pick<ModelResolutionSuccess, \"routedViaOpenRouter\">;\n};\n\n/**\n * Set router proxy flags when OpenRouter transport is effective and API key is present.\n */\nexport function applyOpenRouterInvokeRouting(\n  routerSlice: InvokeRouterConfigSlice,\n  options: ApplyOpenRouterInvokeRoutingOptions = {},\n): InvokeRouterConfigSlice {\n  const apiKey = resolveOpenRouterApiKey(options.openRouterApiKey);\n  if (!apiKey) return routerSlice;\n\n  const routingEnv = options.routingEnv ?? loadOpenRouterRoutingEnv();\n  const resolution = options.resolution;\n\n  const preferOpenRouter = resolvePreferOpenRouterPreference(options.preferOpenRouter);\n\n  const viaOpenRouter =\n    resolution?.routedViaOpenRouter === true ||\n    (resolution?.routedViaOpenRouter !== false &&\n      isEffectiveOpenRouterTransport(routingEnv, {\n        provider: routerSlice.provider,\n        modelId: routerSlice.model,\n        routeViaOpenRouter: preferOpenRouter,\n      }));\n\n  if (viaOpenRouter) {\n    routerSlice.allowOpenRouterProxy = true;\n    if (routerSlice.provider && routerSlice.provider !== \"openrouter\") {\n      routerSlice.providerProxy = \"openrouter\";\n    }\n  } else {\n    routerSlice.allowOpenRouterProxy = false;\n  }\n\n  return routerSlice;\n}\n","import type { ModelResolutionSuccess } from \"../sync/modelNameResolver/types.js\";\nimport type {\n  InvokeModelResolutionDiagnostics,\n  InvokeModelResolutionInput,\n  InvokeRouterConfigSlice,\n} from \"./types.js\";\n\nexport function buildInvokeModelDiagnostics(\n  input: InvokeModelResolutionInput,\n  resolution: ModelResolutionSuccess,\n  router: InvokeRouterConfigSlice,\n): InvokeModelResolutionDiagnostics {\n  const viaProfile = resolution.resolvedVia.includes(\"ai-profiles-profile\");\n  const profileKey =\n    input.model !== router.model || viaProfile ? input.model : undefined;\n\n  return {\n    originalProvider: input.provider,\n    originalModel: input.model,\n    modelId: resolution.modelId,\n    routedViaOpenRouter: resolution.routedViaOpenRouter,\n    confidence: resolution.confidence,\n    resolvedVia: resolution.resolvedVia,\n    profile: resolution.profile,\n    choice: resolution.choice,\n    profileKey,\n    invokedModelId: resolution.modelId ?? router.model,\n  };\n}\n","import { TEXT_CATALOG_LANE } from \"../profiles/catalogLane.js\";\nimport { loadOpenRouterRoutingEnv } from \"../sync/openRouterRoutingEnv.js\";\nimport type { ModelResolverOptions } from \"../sync/modelNameResolver/types.js\";\nimport { resolvePreferOpenRouterPreference } from \"./preferOpenRouter.js\";\nimport type { InvokeModelResolutionOptions } from \"./types.js\";\n\nexport function buildInvokeModelResolverOptions(\n  options: Pick<\n    InvokeModelResolutionOptions,\n    \"routingEnv\" | \"preferOpenRouter\" | \"catalogLane\"\n  > = {},\n): ModelResolverOptions {\n  const routingEnv = options.routingEnv ?? loadOpenRouterRoutingEnv();\n  const preferOpenRouter = resolvePreferOpenRouterPreference(options.preferOpenRouter);\n  return {\n    routingEnv,\n    catalogLane: options.catalogLane ?? TEXT_CATALOG_LANE,\n    routeViaOpenRouter: preferOpenRouter,\n  };\n}\n","import { isKnownProfileInput } from \"../profiles/index.js\";\nimport { ModelResolutionError } from \"../errors.js\";\nimport type { ModelResolutionNotFound } from \"../sync/modelNameResolver/types.js\";\nimport type { InvokeModelResolutionInput } from \"./types.js\";\n\nexport const MODEL_PROFILE_UNROUTABLE = \"MODEL_PROFILE_UNROUTABLE\";\n\nexport class ModelProfileUnroutableError extends Error {\n  readonly code = MODEL_PROFILE_UNROUTABLE;\n\n  constructor(\n    readonly profileKey: string,\n    readonly provider: string | undefined,\n    cause?: unknown,\n  ) {\n    super(\n      `Profile choice \"${profileKey}\" could not be routed to a concrete model` +\n        (provider ? ` (provider hint: ${provider})` : \"\"),\n    );\n    this.name = \"ModelProfileUnroutableError\";\n    if (cause !== undefined) {\n      this.cause = cause;\n    }\n  }\n}\n\nexport function enrichModelResolutionError(\n  input: InvokeModelResolutionInput,\n  resolution: ModelResolutionNotFound,\n): ModelResolutionError | ModelProfileUnroutableError {\n  const base = new ModelResolutionError(input, resolution);\n  if (isKnownProfileInput(input.model)) {\n    return new ModelProfileUnroutableError(input.model, input.provider, base);\n  }\n  return base;\n}\n","import { resolveModelVendorFromResolution } from \"../cost/resolveModelVendor.js\";\nimport type { ModelResolutionSuccess } from \"../sync/modelNameResolver/types.js\";\nimport type { InvokeModelResolutionInput, InvokeRouterConfigSlice } from \"./types.js\";\n\n/**\n * Map catalog resolution to router `{ provider, model }`.\n */\nexport function mapResolutionToRouterConfig(\n  resolution: ModelResolutionSuccess,\n  input: InvokeModelResolutionInput,\n  defaultProvider?: string,\n): InvokeRouterConfigSlice {\n  const ref = resolveModelVendorFromResolution(resolution, input.model, {\n    asOpenRouter: resolution.routedViaOpenRouter,\n  });\n  if (ref) {\n    return { provider: ref.provider, model: ref.model };\n  }\n\n  if (resolution.routedViaOpenRouter === true) {\n    return {\n      provider: \"openrouter\",\n      model: resolution.modelId,\n    };\n  }\n\n  let provider: string | undefined;\n  let model: string;\n\n  const slash = resolution.modelId.indexOf(\"/\");\n  if (slash > 0) {\n    provider =\n      resolution.record?.providerId ?? resolution.modelId.slice(0, slash);\n    model = resolution.modelId.slice(slash + 1);\n  } else {\n    model = resolution.modelId;\n    if (resolution.record?.providerId) {\n      provider = resolution.record.providerId;\n    }\n  }\n\n  if (!provider && defaultProvider) {\n    provider = defaultProvider;\n  }\n\n  return { provider: provider ?? \"\", model };\n}\n","import { AiModelsCatalogClient } from \"../catalog/AiModelsCatalogClient.js\";\nimport { AiToolsError, ModelProfileInputRejectedError } from \"../errors.js\";\nimport { isKnownProfileInput } from \"../profiles/index.js\";\nimport { loadOpenRouterRoutingEnv } from \"../sync/openRouterRoutingEnv.js\";\nimport type { ModelResolutionSuccess } from \"../sync/modelNameResolver/types.js\";\nimport { applyOpenRouterInvokeRouting } from \"./applyOpenRouterInvokeRouting.js\";\nimport { buildInvokeModelDiagnostics } from \"./buildDiagnostics.js\";\nimport { buildInvokeModelResolverOptions } from \"./buildResolverOptions.js\";\nimport { enrichModelResolutionError } from \"./enrichModelResolutionError.js\";\nimport { mapResolutionToRouterConfig } from \"./mapResolutionToRouterConfig.js\";\nimport { resolveOpenRouterApiKey } from \"./preferOpenRouter.js\";\nimport type {\n  InvokeModelResolutionInput,\n  InvokeModelResolutionOptions,\n  InvokeModelResolutionResult,\n} from \"./types.js\";\n\nfunction passthroughResolution(model: string): ModelResolutionSuccess {\n  return {\n    found: true,\n    modelId: model,\n    record: null,\n    routedViaOpenRouter: false,\n    confidence: 1,\n    resolvedVia: [],\n    resolvedReason: \"resolveModels disabled (passthrough)\",\n    normalisedInput: model,\n  };\n}\n\nfunction defaultCatalog(options: InvokeModelResolutionOptions): AiModelsCatalogClient {\n  return new AiModelsCatalogClient({\n    bundledOnly: options.bundledOnly,\n    resolverOptions: {\n      routingEnv: options.routingEnv ?? loadOpenRouterRoutingEnv(),\n    },\n  });\n}\n\n/**\n * End-to-end invoke model resolution: catalog + profiles + vendor mapping + OR routing.\n */\nexport async function resolveInvokeModel(\n  input: InvokeModelResolutionInput,\n  options: InvokeModelResolutionOptions = {},\n): Promise<InvokeModelResolutionResult> {\n  const model = input.model?.trim();\n  if (!model) {\n    throw new AiToolsError(\"INVALID_INVOKE_INPUT\", \"Invoke model resolution requires a non-empty model string.\");\n  }\n\n  const trimmedInput: InvokeModelResolutionInput = { ...input, model };\n\n  if (options.modelsOnly && isKnownProfileInput(model)) {\n    throw new ModelProfileInputRejectedError(model);\n  }\n\n  const routingEnv = options.routingEnv ?? loadOpenRouterRoutingEnv();\n  const openRouterApiKey = resolveOpenRouterApiKey(options.openRouterApiKey);\n  const resolveModels = options.resolveModels !== false;\n\n  if (!resolveModels) {\n    const router = applyOpenRouterInvokeRouting(\n      {\n        provider: input.provider ?? options.defaultProvider ?? \"\",\n        model,\n      },\n      {\n        routingEnv,\n        preferOpenRouter: options.preferOpenRouter,\n        openRouterApiKey,\n      },\n    );\n    const resolution = passthroughResolution(model);\n    return {\n      router,\n      resolution,\n      diagnostics: buildInvokeModelDiagnostics(trimmedInput, resolution, router),\n    };\n  }\n\n  const catalog = options.catalog ?? defaultCatalog(options);\n  const resolverOptions = buildInvokeModelResolverOptions({\n    routingEnv,\n    preferOpenRouter: options.preferOpenRouter,\n    catalogLane: options.catalogLane,\n  });\n\n  const resolution = await catalog.resolveModel(\n    { provider: input.provider, model },\n    resolverOptions,\n  );\n\n  if (!resolution.found) {\n    throw enrichModelResolutionError(trimmedInput, resolution);\n  }\n\n  const router = applyOpenRouterInvokeRouting(\n    mapResolutionToRouterConfig(resolution, trimmedInput, options.defaultProvider),\n    {\n      routingEnv,\n      preferOpenRouter: options.preferOpenRouter,\n      openRouterApiKey,\n      resolution,\n    },\n  );\n\n  return {\n    router,\n    resolution,\n    diagnostics: buildInvokeModelDiagnostics(trimmedInput, resolution, router),\n  };\n}\n","export { resolveInvokeModel } from \"./resolveInvokeModel.js\";\nexport { buildInvokeModelResolverOptions } from \"./buildResolverOptions.js\";\nexport { mapResolutionToRouterConfig } from \"./mapResolutionToRouterConfig.js\";\nexport { applyOpenRouterInvokeRouting } from \"./applyOpenRouterInvokeRouting.js\";\nexport type { ApplyOpenRouterInvokeRoutingOptions } from \"./applyOpenRouterInvokeRouting.js\";\nexport {\n  enrichModelResolutionError,\n  ModelProfileUnroutableError,\n  MODEL_PROFILE_UNROUTABLE,\n} from \"./enrichModelResolutionError.js\";\nexport {\n  resolvePreferOpenRouterPreference,\n  resolvePreferOpenRouter,\n  readPreferOpenRouterFromEnv,\n  resolveOpenRouterApiKey,\n} from \"./preferOpenRouter.js\";\nexport {\n  parsePreferOpenRouter,\n  normalizeInvokeModel,\n  resolveAndNormalizeInvokeModel,\n  resolveAndNormalizeBundledInvokeModel,\n  normalizeGatewayWireId,\n  isGatewayWireId,\n  formatGatewayWireId,\n  GATEWAY_PROVIDERS,\n} from \"@x12i/ai-profiles\";\nexport type {\n  NormalizeInvokeModelInput,\n  NormalizedInvokeModel,\n  NormalizeInvokeModelOptions,\n  ResolveAndNormalizeInvokeModelOptions,\n  InvokeModelRouting,\n  NormalizedGatewayWireId,\n  GatewayProvider,\n} from \"@x12i/ai-profiles\";\nexport {\n  createAiToolsInvokeClient,\n  getAiToolsInvokeClient,\n  resetAiToolsInvokeClientForTests,\n} from \"./client.js\";\nexport type {\n  AiToolsInvokeClient,\n  CreateAiToolsInvokeClientOptions,\n} from \"./client.js\";\nexport type {\n  InvokeModelResolutionInput,\n  InvokeModelResolutionOptions,\n  InvokeModelResolutionResult,\n  InvokeRouterConfigSlice,\n  InvokeModelResolutionDiagnostics,\n  PreferOpenRouterOptions,\n} from \"./types.js\";\n","import { AiModelsCatalogClient } from \"../catalog/AiModelsCatalogClient.js\";\nimport { CostCalculator } from \"../cost/CostCalculator.js\";\nimport { loadOpenRouterRoutingEnv } from \"../sync/openRouterRoutingEnv.js\";\nimport type { OpenRouterRoutingConfig } from \"../sync/openRouterRoutingEnv.js\";\n\nexport type AiToolsInvokeClient = {\n  catalog: AiModelsCatalogClient;\n  calculator: CostCalculator;\n  routingEnv: OpenRouterRoutingConfig;\n};\n\nexport type CreateAiToolsInvokeClientOptions = {\n  cacheTtlMs?: number;\n  bundledOnly?: boolean;\n  costIncludeBreakdown?: boolean;\n  cacheKey?: string;\n};\n\nfunction clientConfigKey(options: CreateAiToolsInvokeClientOptions = {}): string {\n  return JSON.stringify({\n    cacheTtlMs: options.cacheTtlMs ?? null,\n    bundledOnly: options.bundledOnly ?? false,\n    costIncludeBreakdown: options.costIncludeBreakdown ?? false,\n    cacheKey: options.cacheKey ?? \"default\",\n  });\n}\n\nexport function createAiToolsInvokeClient(\n  options: CreateAiToolsInvokeClientOptions = {},\n): AiToolsInvokeClient {\n  const cacheKey = options.cacheKey ?? \"default\";\n  const catalog = new AiModelsCatalogClient({\n    cacheKey,\n    cacheTtlMs: options.cacheTtlMs,\n    bundledOnly: options.bundledOnly,\n    resolverOptions: {\n      routingEnv: loadOpenRouterRoutingEnv(),\n    },\n  });\n  const calculator = new CostCalculator(catalog, {\n    includeBreakdown: options.costIncludeBreakdown,\n  });\n  return {\n    catalog,\n    calculator,\n    routingEnv: loadOpenRouterRoutingEnv(),\n  };\n}\n\nlet singleton: AiToolsInvokeClient | null = null;\nlet singletonKey: string | null = null;\n\n/** Reset process singleton (tests). */\nexport function resetAiToolsInvokeClientForTests(): void {\n  singleton = null;\n  singletonKey = null;\n}\n\n/**\n * Process singleton with config-key invalidation.\n * Returns null when catalog bootstrap fails.\n */\nexport async function getAiToolsInvokeClient(\n  options: CreateAiToolsInvokeClientOptions = {},\n  logger?: { warn?: (msg: string, err?: unknown) => void },\n): Promise<AiToolsInvokeClient | null> {\n  const key = clientConfigKey(options);\n  if (singleton && singletonKey === key) return singleton;\n\n  try {\n    const client = createAiToolsInvokeClient(options);\n    await client.catalog.getAllModels();\n    singleton = client;\n    singletonKey = key;\n    return client;\n  } catch (err) {\n    logger?.warn?.(\"Failed to bootstrap ai-tools invoke client\", err);\n    return null;\n  }\n}\n"]}