UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

333 lines 45.8 kB
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{Ii as t,R as n,Vn as r,wr as i,z as a}from"./control-ui-foundation-Cydpkyqa.js";import{As as o,Bn as s,Bo as c,Do as l,E as u,Eo as d,Oo as f,Sc as p,Uo as m,bc as h,cs as ee,g as te,k as ne,m as re,os as g,zn as ie}from"./control-ui-core-Rwzhj6nO.js";import{$ as ae,K as _,X as v,at as y,q as b,st as oe}from"./lit-runtime-CV_MH99K.js";import{_ as se,_n as ce,g as le,jn as ue}from"./control-ui-core-YphAl4aM.js";import{Gt as x,Wt as S,Yt as C,en as w}from"./control-ui-core-vvcQQV2m.js";import{B as de,L as fe,R as T,V as pe,d as me,f as he,z as ge}from"./control-ui-boot-shared-BYq7Cchl.js";import{a as _e,r as ve}from"./gateway-runtime-Bqqcp9-I.js";import{Ca as E,H as ye,Sa as be,Ta as xe,U as Se}from"./control-ui-boot-shared-DfZ39Yj9.js";import{H as D,J as O,K as k,L as A,Q as j,V as M,W as Ce,X as N,Z as P,q as we,tt as Te,z as Ee}from"./control-ui-boot-chat-_QSl8fbH.js";import{Cs as De,Is as Oe,Ls as ke,Ss as Ae,bs as je,xs as Me}from"./control-ui-boot-shared-CXVvK2AW.js";import{n as Ne,t as Pe}from"./en-settings-D_ebb5Hk.js";import{a as Fe,i as Ie}from"./control-ui-boot-shared-Deak_Sjt.js";import{n as Le,t as Re}from"./settings-workspace-Bseic8Tf.js";import{n as F,t as ze}from"./model-picker-CB45-l8O.js";import{n as Be,t as Ve}from"./agent-scope-control-6x2VZZ2e.js";import{a as He,i as Ue,n as I,r as We,t as Ge}from"./load-Bbhf1Rrb.js";import{a as Ke,i as qe,n as Je,r as Ye}from"./usage-BoX28Uwf.js";function L(e){return d(e,w(`modelProviders.requestFailed`))}async function Xe(e,t){let{agentEpoch:n,runtimeConfig:r}=e;e.setBusy(!0),e.setMessage(null);try{if(await r.ensureLoaded(),!e.isCurrentClient())return{ok:!1};let i=await r.patch({raw:t.raw,note:t.note,...t.replacePaths?{replacePaths:t.replacePaths}:{}});if(!e.isCurrentClient())return{ok:!1};if(!i)return e.isCurrentAgent()&&e.setMessage({kind:`error`,text:r.state.lastError??w(`modelProviders.configUnavailable`)}),{ok:!1};let a=null;try{await r.refresh(),a=r.state.lastError,!a&&e.isCurrentClient()&&await e.refreshProviders()}catch(e){a=L(e)}return e.isCurrentClient()?(e.isCurrentAgent()&&e.setMessage({kind:`success`,text:t.success,...a?{warning:a}:{}}),{ok:!0,agentEpoch:n,warning:a}):{ok:!1}}catch(t){return e.isCurrentClient()&&e.isCurrentAgent()&&e.setMessage({kind:`error`,text:L(t)}),{ok:!1}}finally{e.isCurrentClient()&&e.isCurrentAgent()&&e.setBusy(!1)}}function R(){return(R=e((()=>{C(),f()})))()}function z(e){return je(e)}function Ze(e){switch(e.status){case`ok`:case`expiring`:case`expired`:case`missing`:return e.status;default:return`api-key`}}function B(e,t){return e.find(e=>t.some(t=>e.ids.has(t)))}function V(e,t,n){let r=B(e,[t]);if(r)return r;let i={ids:new Set([t]),card:{id:t,displayName:n,profiles:[],credentialProviderIds:[],logoutTargets:[],hasConfigApiKey:!1,modelCount:0,availableModelCount:0},hasModelAuth:!1};return e.push(i),i}function Qe(e,t){let n=T(t);n&&!e.some(e=>T(e)===n)&&e.push(t)}function $e(e,t,n){if(n.length===0)return;let r=T(t),i=e.find(e=>T(e.provider)===r);if(!i){e.push({provider:t,profileIds:[...new Set(n)]});return}i.profileIds=[...new Set([...i.profileIds,...n])]}function et(e){let t=[],n=new Map;for(let t of e.authStatus?.providerCapabilities??[]){let e=z(t.provider);e&&n.set(e,n.get(e)===!0||t.apiKeySupported)}for(let n of e.configProviderIds??[]){let e=z(n);e&&(V(t,e,E(e)).card.configKey??=n)}for(let n of e.configApiKeyProviderIds??[]){let e=z(n);if(e){let r=V(t,e,E(e)).card;r.configKey=n,r.hasConfigApiKey=!0,Qe(r.credentialProviderIds,n)}}for(let[n,r]of Object.entries(e.configProviderAuthModes??{})){let e=z(n);e&&(V(t,e,E(e)).card.configAuthMode=r)}for(let n of e.providerOutcomes??[]){let e=z(n.provider);if(!e)continue;let r=V(t,e,E(e)),i=r.catalogOutcome,a=n.profileId===void 0,o=it[a?`provider`:`profile`];(!i||(a===(i.profileId===void 0)?o.indexOf(n.status)<o.indexOf(i.status):a))&&(r.catalogOutcome=n)}for(let n of e.models??[]){let e=z(n.provider);if(!e)continue;let r=V(t,e,E(e));r.card.modelCount+=1,n.available===!0&&(r.card.availableModelCount+=1)}for(let r of e.authStatus?.providers??[]){let e=z(r.provider);if(!e)continue;let i=r.usage?z(r.usage.providerId):e,a=[...new Set([e,i])],o=B(t,a)??V(t,i,E(i));for(let e of a)o.ids.add(e);o.card.displayName=r.displayName||o.card.displayName,o.card.profiles.push(...r.profiles),(r.apiKey||r.profiles.length>0)&&Qe(o.card.credentialProviderIds,r.provider),$e(o.card.logoutTargets,r.provider,r.profiles.filter(e=>e.logoutSupported===!0).map(e=>e.profileId)),o.card.apiKey??=r.apiKey,o.hasModelAuth||=Ae(r)||n.has(e);let s=r.usage;s&&!o.card.usage&&(o.card.usage={provider:s.providerId,displayName:r.displayName,windows:s.windows,...s.summary?{summary:s.summary}:{},...s.plan?{plan:s.plan}:{},...s.billing?.length?{billing:s.billing}:{}})}for(let n of De(e.authStatus?.providers??[])){let e=B(t,[z(n.provider)]);e&&(e.card.auth={kind:Ze(n),profileCount:n.profiles.length,...n.expiry?.label?{expiryLabel:n.expiry.label}:{}})}for(let n of e.providerUsage?.providers??[]){let e=z(n.provider);if(!e)continue;let r=B(t,[e])??V(t,e,n.displayName||E(e));r.ids.add(e),r.card.usage=n}for(let n of e.costByProvider??[]){let e=z(n.provider??``);if(!e)continue;let r=B(t,[e])??V(t,e,E(e)),i={totalCost:n.totals.totalCost,totalTokens:n.totals.totalTokens,sessionCount:n.count},a=r.card.localCost;r.card.localCost=a?{totalCost:a.totalCost+i.totalCost,totalTokens:a.totalTokens+i.totalTokens,sessionCount:a.sessionCount+i.sessionCount}:i}return t.filter(t=>t.hasModelAuth||(e.configProviderIds??[]).some(e=>z(e)===t.card.id)||!!t.card.usage||t.card.modelCount>0||!!t.catalogOutcome||(t.card.localCost?.totalTokens??0)>0).map(e=>{let t=n.get(e.card.id);return Object.assign({},e.card,e.catalogOutcome?{catalogStatus:e.catalogOutcome.status}:{},t===void 0?{}:{apiKeySupported:t})}).toSorted((e,t)=>e.displayName.localeCompare(t.displayName))}function H(e){return e.selectionRef===void 0?e.id.startsWith(`${e.provider}/`)?e.id:`${e.provider}/${e.id}`:e.selectionRef}function tt(e,t){let n=new Set([t.primary,...t.fallbacks,t.utilityModel].filter(e=>typeof e==`string`&&e.length>0)),r=(e??[]).filter(e=>e.available!==!1||n.has(H(e))),i=new Set(r.map(H)),a=e===null?{}:{available:!1};for(let t of n){if(i.has(t))continue;let n=t.indexOf(`/`);if(n<=0||n===t.length-1){let n=t.trim().toLowerCase(),i=(e??[]).find(e=>e.alias?.trim().toLowerCase()===n||e.id.trim()===t.trim());r.push({...i??{provider:``,id:t,name:t,...a},selectionRef:t});continue}r.push({provider:t.slice(0,n),id:t.slice(n+1),name:t,...a})}return r}function nt(e){let t=r(e?.models),n=r(t?.providers),i=r(e?.agents),a=r(i?.defaults),o=a?.model,s=r(o),c=typeof o==`string`?o:typeof s?.primary==`string`?s.primary:``,l=Array.isArray(s?.fallbacks)?s.fallbacks.filter(e=>typeof e==`string`):[];return{providerIds:Object.keys(n??{}),apiKeyProviderIds:Object.entries(n??{}).filter(([,e])=>{let t=r(e);return t?Object.hasOwn(t,`apiKey`)&&t.apiKey!=null:!1}).map(([e])=>e),providerAuthModes:Object.fromEntries(Object.entries(n??{}).flatMap(([e,t])=>{let n=r(t)?.auth;return typeof n==`string`?[[e,n]]:[]})),defaults:{primary:c,fallbacks:l,utilityModel:typeof a?.utilityModel==`string`?a.utilityModel:null}}}function rt(e,t){let n=new Set(Array.from(t,z)),r=new Map;for(let t of e??[]){let e=z(t.provider);t.quickApiKeySetup&&e&&!n.has(e)&&!r.has(e)&&r.set(e,{id:e,displayName:E(e)})}return[...r.values()].toSorted((e,t)=>e.displayName.localeCompare(t.displayName))}var it;function U(){return(U=e((()=>{fe(),be(),Me(),it={provider:[`auth-rejected`,`unavailable`,`ready`],profile:[`ready`,`auth-rejected`,`unavailable`]}})))()}function at(e){let t=e?.thinkingDefault,n=e?.fastModeDefault;return{thinkingLevel:typeof t==`string`?t:void 0,thinkingOverridden:e!==null&&Object.hasOwn(e,`thinkingDefault`),fastMode:n===`auto`||typeof n==`boolean`?n:void 0,fastModeOverridden:e!==null&&Object.hasOwn(e,`fastModeDefault`)}}function W(e,t){return{models:{providers:{[e]:{apiKey:t}}}}}function ot(e){return{agents:{defaults:{...e.primary?{model:e.fallbacks.length>0?{primary:e.primary,fallbacks:[...e.fallbacks]}:e.primary}:{},utilityModel:e.utilityModel,thinkingDefault:e.thinkingOverridden&&e.thinkingLevel?e.thinkingLevel:null,fastModeDefault:e.fastModeOverridden&&e.fastMode!==void 0?e.fastMode:null}}}}var st;function ct(){return(ct=e((()=>{st=[`agents.defaults.model.fallbacks`]})))()}function lt(e){return/method (?:not found|not supported)|unknown method/iu.test(L(e))}function ut(e,t){if(t.length===1)return t[0];let n=t.some(e=>e.status===`ok`)?`ok`:dt.find(e=>t.some(t=>t.status===e))??`unknown`,r=t.find(e=>e.status===n)?.error;return{provider:e,status:n,...r?{error:r}:{},results:t.flatMap(e=>e.results.map(t=>({...t,label:`${e.provider}: ${t.label}`})))}}var dt;function ft(){return(ft=e((()=>{R(),dt=[`auth`,`billing`,`rate_limit`,`timeout`,`format`,`no_model`,`unknown`]})))()}var pt;function mt(){return(mt=e((()=>{ge(),I(),pt=class{constructor(e,t){this.options=t,this.pending=new Set,this.usageTask=this.createTask(e,`usage`,Ue,e=>({providerUsage:e}),(e,t)=>this.options.refreshPolicy.markProviderUsage(e,Date.now(),t)),this.costTask=this.createTask(e,`cost`,We,e=>({costByProvider:e}))}get loading(){return this.pending.size>0}get usageLoading(){return this.pending.has(`usage`)}adoptCoreData(e,t){let n=e===this.options.getDataClient()?this.options.getData():null;this.options.setData({...t,providerUsage:n?.providerUsage??t.providerUsage,costByProvider:n?.costByProvider??t.costByProvider}),this.options.setDataClient(e),t.providerUsage!==null&&this.options.refreshPolicy.markProviderUsage(t.providerUsage,t.updatedAt,this.options.getGateway().epoch),e&&!this.options.isCoreLoading()&&!this.loading&&t.providerUsage===null&&t.costByProvider===null&&this.load(e)}invalidate(){this.options.refreshPolicy.interrupt(),this.cancelGeneration()}beginCoreRefresh(e){this.cancelGeneration(),e&&this.options.refreshPolicy.resetPayload()}cancelGeneration(){this.pending.clear();let e=this.options.getGateway().epoch;this.usageTask.run([null,e]),this.costTask.run([null,e])}load(e){return this.loadRequests(e,!0)}loadUsage(){return this.loadRequests(void 0,!1)}async loadRequests(e,t){let n=this.options.getGateway(),r=e??n.client;if(!n.connected||!r){this.options.refreshPolicy.markLoadDeferred();return}this.options.refreshPolicy.beginLoad(),this.pending.add(`usage`);let i=this.usageTask.run([r,n.epoch]);if(!t){await i;return}this.pending.add(`cost`),await Promise.all([i,this.costTask.run([r,n.epoch])])}createTask(e,t,n,r,i){return new de(e,{autoRun:!1,task:([e,t],{signal:r})=>e?n(e,r).then(n=>({client:e,data:n,epoch:t})):pe,onComplete:({client:e,data:n,epoch:a})=>{this.pending.delete(t);let o=this.options.getData();o&&e===this.options.getDataClient()&&this.options.getGateway().isCurrent({client:e,epoch:a})&&(this.options.setData({...o,...r(n)}),i?.(n,a)),this.options.refreshPolicy.flushPending()},onError:()=>{this.pending.delete(t),this.options.refreshPolicy.flushPending()}})}}})))()}function G(e){let t=new Set,n=[];for(let r of e){let e=H(r);t.has(e)||(t.add(e),n.push({value:e,label:r.name||e,...r.provider?{provider:r.provider}:{}}))}return n.toSorted((e,t)=>e.label.localeCompare(t.label))}function K(e){return v` <span class="model-providers__label-with-help"> <span>${e.title}</span> <span class="settings-section__docs"> <openclaw-tooltip open-on-click> <button id=${e.triggerId} type="button" class="settings-section__help-button model-providers__help-button" aria-label=${e.label} @keydown=${e=>{e.key===`Escape`&&e.stopPropagation()}} > ${S.info} </button> <div slot="content" class="settings-section__help-panel">${e.body}</div> </openclaw-tooltip> </span> </span> `}function ht(e){return v` <span class="model-providers__segment-label"> <span>${e.label}</span> <openclaw-tooltip open-on-click .content=${e.help}> <button type="button" class="model-providers__segment-info" aria-label=${e.help} @click=${e=>e.stopPropagation()} @keydown=${e=>{e.key===`Escape`&&e.stopPropagation()}} > ${S.info} </button> </openclaw-tooltip> </span> `}function gt(e){return e===`auto`?`auto`:e===`on`}function _t(e){let t=!e.canMutate||e.models.length===0,n=!e.canMutate,r=!!e.busy.defaults,i=e.mutationBlockedReason??``,a=e.thinkingLevel&&!Y.has(e.thinkingLevel)?[...J,e.thinkingLevel]:J,o=e.fastMode===void 0?``:Ie(e.fastMode),s=e.selection.fallbacks[0]??``,c=v` <div class="model-providers__defaults"> ${!e.loading&&e.models.length===0?v`<div class="callout warning">${w(`modelProviders.defaults.noModels`)}</div>`:b} ${O({title:w(`modelProviders.defaults.primary`),stackedOnNarrow:!0,control:F({label:w(`modelProviders.defaults.primary`),value:e.selection.primary,options:[{value:``,label:w(`modelProviders.defaults.selectModel`),disabled:!!e.selection.primary},...G(e.models)],disabled:t||r,title:i,onChange:e.onPrimaryChange})})} ${O({title:K({title:w(`modelProviders.defaults.utility`),label:w(`modelProviders.defaults.utilityHelpLabel`),triggerId:yt,body:v` <p>${w(`modelProviders.defaults.utilityHelpPurpose`)}</p> <p>${w(`modelProviders.defaults.utilityHelpAutomatic`)}</p> `}),stackedOnNarrow:!0,control:F({id:vt,label:w(`modelProviders.defaults.utility`),value:e.selection.utilityModel??q,options:[{value:q,label:w(`quickSettings.model.fastModes.auto`)},{value:``,label:w(`modelProviders.defaults.disabled`)},...G(e.models)],disabled:t||r,title:i,onChange:t=>e.onUtilityChange(t===q?null:t)})})} ${O({title:w(`modelProviders.defaults.fallback`),stackedOnNarrow:!0,control:F({label:w(`modelProviders.defaults.fallback`),value:s,options:[{value:``,label:w(`modelProviders.defaults.noFallback`)},...G(e.models.filter(t=>H(t)!==e.selection.primary))],disabled:t||r||!e.selection.primary,title:i,onChange:t=>e.onFallbackChange(t||null)})})} ${O({title:K({title:w(`quickSettings.model.thinking`),label:w(`modelProviders.defaults.thinkingHelpLabel`),triggerId:bt,body:v`<p>${w(`modelProviders.defaults.thinkingHelp`)}</p>`}),stackedOnNarrow:!0,control:v` ${P({value:e.thinkingLevel??``,options:[{value:``,label:ht({label:w(`quickSettings.model.default`),help:w(`modelProviders.defaults.thinkingDefaultHelp`)})},...a.map(e=>({value:e,label:Y.has(e)?w(`quickSettings.model.thinkingLevels.${e}`):ye(e)}))],disabled:r||n,onChange:(t,n)=>t===``?e.onThinkingReset():e.onThinkingChange(t,n),onReselect:t=>{t===``&&e.thinkingOverridden&&e.onThinkingReset()}})} `})} ${O({title:K({title:w(`quickSettings.model.fastMode`),label:w(`modelProviders.defaults.fastModeHelpLabel`),triggerId:xt,body:v`<p>${w(`modelProviders.defaults.fastModeHelp`)}</p>`}),stackedOnNarrow:!0,control:v` ${P({value:o,options:[{value:``,label:ht({label:w(`quickSettings.model.default`),help:w(`modelProviders.defaults.fastModeDefaultHelp`)})},{value:`auto`,label:w(`quickSettings.model.fastModes.auto`)},{value:`on`,label:w(`quickSettings.model.fastModes.on`)},{value:`off`,label:w(`quickSettings.model.fastModes.off`)}],disabled:r||n,onChange:t=>{t===``?e.onFastModeReset():t!==o&&e.onFastModeChange(gt(t))},onReselect:t=>{t===``&&e.fastModeOverridden&&e.onFastModeReset()}})} `})} ${e.canMutate&&e.message?v`<div class="callout ${e.message.kind}" role=${e.message.kind===`error`?`alert`:`status`} > ${e.message.text} </div>`:b} ${e.canMutate&&e.message?.warning?v`<div class="callout warning" role="status">${e.message.warning}</div>`:b} </div> `;return N({title:w(`modelProviders.defaults.title`),description:w(`modelProviders.defaults.subtitle`)},c)}var q,vt,yt,bt,xt,J,Y;function X(){return(X=e((()=>{_(),he(),Fe(),x(),ze(),A(),C(),Se(),U(),q=`__openclaw_automatic_utility__`,vt=`model-providers-utility-model`,yt=`model-providers-utility-help`,bt=`model-providers-thinking-help`,xt=`model-providers-fast-mode-help`,J=me.filter(e=>e!==`minimal`),Y=new Set(J)})))()}function St(e){let t=e.auth;if(!t)return b;let n=w(Tt[t.kind]),r=t.expiryLabel?w(`modelProviders.expiresIn`,{time:t.expiryLabel}):void 0;return v` <span title=${r??n}> ${j({kind:Et[t.kind],label:n})} </span> `}function Ct(e){return e.hasConfigApiKey||!!e.apiKey||e.profiles.length>0}function Z(e){return e.catalogStatus===`ready`&&e.auth?.kind!==`expired`&&e.auth?.kind!==`missing`&&e.auth?.kind!==`expiring`}function wt(e){return e.auth?.kind===`expired`||e.auth?.kind===`missing`||e.auth?.kind===`expiring`?St(e):e.catalogStatus===`auth-rejected`?j({kind:`danger`,label:w(`modelProviders.status.denied`)}):e.catalogStatus===`unavailable`?j({kind:`warn`,label:w(`common.failed`)}):Ct(e)?Z(e)&&e.availableModelCount>0?j({kind:`ok`,label:w(`modelProviders.status.ready`)}):Z(e)?j({kind:`muted`,label:w(`modelProviders.status.ok`)}):j({kind:`muted`,label:w(`modelProviders.status.configured`)}):St(e)}var Tt,Et;function Dt(){return(Dt=e((()=>{_(),A(),C(),Tt={ok:`modelProviders.status.ok`,expiring:`modelProviders.status.expiring`,expired:`modelProviders.status.expired`,missing:`modelProviders.status.missing`,"api-key":`modelProviders.status.apiKey`},Et={ok:`ok`,expiring:`warn`,expired:`danger`,missing:`danger`,"api-key":`muted`}})))()}function Q(e){return!e.canMutate||e.configBusy}function Ot(e){return e?v` <div class="callout ${e.kind}" role=${e.kind===`error`?`alert`:`status`}> ${e.text} </div> ${e.warning?v`<div class="callout warning" role="status">${e.warning}</div>`:b} `:b}function kt(e){return e.modelCount===0?null:e.availableModelCount<e.modelCount?w(`modelProviders.modelsAvailable`,{available:String(e.availableModelCount),count:String(e.modelCount)}):e.modelCount===1?w(`modelProviders.modelOne`):w(`modelProviders.models`,{count:String(e.modelCount)})}function At(e,t){let n=e.localCost;return!n||n.totalTokens===0&&n.totalCost===0?b:v` <div class="model-providers__local-cost"> <div class="provider-usage-billing-row"> <span>${w(`modelProviders.localCost`,{days:String(t)})}</span> <strong>${te(n.totalCost)}</strong> </div> <div class="model-providers__local-cost-detail"> ${w(`modelProviders.localCostDetail`,{tokens:re(n.totalTokens),sessions:String(n.sessionCount)})} </div> </div> `}function jt(e,t){let n=e.profiles.filter(e=>e.type===`oauth`).length,r=e.profiles.filter(e=>e.type===`token`).length,i=e.profiles.filter(e=>e.type===`api_key`).length,a=[];return n>0&&a.push(w(`modelProviders.credentials.oauth`,{count:String(n)})),r>0&&a.push(w(`modelProviders.credentials.tokenProfiles`,{count:String(r)})),e.apiKey?.source===`config`?a.push(w(`modelProviders.credentials.configKey`)):e.apiKey?.source===`env`?a.push(e.apiKey.envVar?w(`modelProviders.credentials.envKeyNamed`,{name:e.apiKey.envVar}):w(`modelProviders.credentials.envKey`)):i>0&&a.push(w(`modelProviders.credentials.profileKey`,{count:String(i)})),v` <div class="model-providers__credentials"> <span>${w(`modelProviders.credentials.label`,{agent:t})}</span> <strong >${a.length>0?a.join(` · `):w(`modelProviders.credentials.none`)}</strong > </div> `}function Mt(e){if(!e)return b;let t=e.status===`ok`&&e.results.some(e=>e.status!==`ok`),n=t?`warning`:e.status===`ok`?`success`:`error`;return v` <div class="model-providers__probe model-providers__probe--${n}" role="status"> <div class="model-providers__probe-summary"> <strong >${w(t?`modelProviders.probe.status.partial`:`modelProviders.probe.status.${e.status}`)}</strong > ${e.latencyMs===void 0?b:v`<span >${w(`modelProviders.probe.latency`,{ms:String(e.latencyMs)})}</span >`} </div> ${e.error?v`<div>${l(e.error)}</div>`:b} ${e.results.map(e=>v` <div class="model-providers__probe-target"> <span>${e.label}</span> <span> ${w(`modelProviders.probe.status.${e.status}`)}${e.latencyMs===void 0?``:` · ${w(`modelProviders.probe.latency`,{ms:String(e.latencyMs)})}`} </span> ${e.error?v`<small>${l(e.error)}</small>`:b} </div> `)} </div> `}function Nt(e,t){if(t.keyEditorProvider!==e.id)return b;let n=!!t.busy[`key:${e.id}`],r=e.apiKeySupported===!1||!!(e.configAuthMode&&e.configAuthMode!==`api-key`),i=Q(t);return v` <div class="model-providers__inline-form"> <label class="field"> <span>${w(`modelProviders.apiKey.label`)}</span> <input type="password" autocomplete="off" placeholder=${e.apiKey?.source===`config`?w(`modelProviders.apiKey.replacePlaceholder`):w(`modelProviders.apiKey.placeholder`)} .value=${t.keyDraft} ?disabled=${n||i||r} @input=${e=>t.onKeyDraftChange(e.target.value)} /> </label> <div class="model-providers__form-actions"> <button class="btn primary btn--sm" ?disabled=${n||i||r||!t.keyDraft.trim()} @click=${()=>t.onSaveKey(e.id,e.configKey??e.id)} > ${w(n?`modelProviders.saving`:`common.save`)} </button> <button class="btn btn--sm" ?disabled=${n} @click=${()=>t.onCloseKeyEditor()}> ${w(`common.cancel`)} </button> </div> </div> `}function Pt(e,t){let n=e.credentialProviderIds.length?e.credentialProviderIds:[e.id],r=e.hasConfigApiKey||!!e.apiKey||e.profiles.length>0,i=e.logoutTargets.length>0,a=!!t.busy[`probe:${e.id}`],o=!!t.busy[`key:${e.id}`],s=!!t.busy[`logout:${e.id}`],c=t.mutationBlockedReason??``,l=!!(e.configAuthMode&&e.configAuthMode!==`api-key`),u=e.apiKeySupported===!1,d=Q(t),f=l?w(`modelProviders.apiKey.authModeBlocked`,{mode:e.configAuthMode??``}):c;return v` <div class="model-providers__card-actions"> ${r?v` <button class="btn btn--sm" ?disabled=${a||!t.canMutate||!t.probeAvailable} title=${t.probeAvailable?c:w(`modelProviders.probe.unavailable`)} @click=${()=>t.onProbe(e.id,n)} > ${w(a?`modelProviders.probe.testing`:`modelProviders.probe.test`)} </button> `:b} ${u?b:v` <button class="btn btn--sm" ?disabled=${o||d||l} title=${f} @click=${()=>t.onOpenKeyEditor(e.id)} > ${e.hasConfigApiKey?w(`modelProviders.apiKey.replace`):w(`modelProviders.apiKey.set`)} </button> `} ${e.hasConfigApiKey?v` <button class="btn btn--sm danger" ?disabled=${o||d||l} title=${f} @click=${()=>t.onRemoveKey(e.id,e.configKey??e.id)} > ${w(`modelProviders.apiKey.remove`)} </button> `:b} ${i?v` <button class="btn btn--sm" ?disabled=${s||d} title=${c} @click=${()=>t.onRequestLogout(e.id)} > ${w(`modelProviders.logout.action`)} </button> `:b} </div> ${t.pendingLogoutProvider===e.id?v` <div class="model-providers__confirm" role="alert"> <span>${w(`modelProviders.logout.confirm`,{provider:e.displayName})}</span> <div class="model-providers__form-actions"> <button class="btn danger btn--sm" ?disabled=${s||d} @click=${()=>t.onLogout(e.id,e.logoutTargets)} > ${w(s?`modelProviders.logout.loggingOut`:`modelProviders.logout.action`)} </button> <button class="btn btn--sm" ?disabled=${s} @click=${t.onCancelLogout}> ${w(`common.cancel`)} </button> </div> </div> `:b} `}function Ft(e,t){let n=kt(e),r=t.messages[`key:${e.id}`]??t.messages[e.id];return v` <div class="settings-row settings-row--stacked model-providers__row" data-provider-id=${e.id} > <div class="model-providers__head"> <div class="model-providers__identity"> ${xe(e.id,{className:`model-providers__icon`})} <div class="settings-row__text"> <span class="settings-row__title">${e.displayName}</span> <span class="settings-row__desc" >${e.id}${n?v` · ${n}`:b}</span > </div> </div> <div class="settings-row__control"> ${e.usage?.plan?Te(e.usage.plan):b} ${wt(e)} </div> </div> ${jt(e,t.credentialAgentLabel)} <div class="model-providers__global-metrics" aria-busy=${t.supplementalLoading?`true`:`false`} > <div class="model-providers__global-metrics-title">${w(`modelProviders.globalUsage`)}</div> ${e.usage?Ye(e.usage):v`<div class="model-providers__no-stats"> ${w(t.supplementalLoading?`common.loading`:`modelProviders.noStats`)} </div>`} ${At(e,t.costDays)} </div> ${Pt(e,t)} ${Nt(e,t)} ${Mt(t.probeResults[e.id])} ${Ot(r)} </div> `}function It(e){let t=!!e.busy.add,n=Q(e)||t,r=v` ${e.unconfiguredProviders.length===0?M(w(`modelProviders.add.none`)):b} ${e.addProviderOpen?v` <div class="settings-row settings-row--stacked"> <div class="model-providers__add-form"> <label class="field"> <span>${w(`modelProviders.add.provider`)}</span> <select class="settings-select" .value=${e.addProviderId} ?disabled=${n} @change=${t=>e.onAddProviderIdChange(t.target.value)} > <option value="">${w(`modelProviders.add.selectProvider`)}</option> ${e.unconfiguredProviders.map(e=>v`<option value=${e.id}>${e.displayName}</option>`)} </select> </label> <label class="field"> <span>${w(`modelProviders.apiKey.label`)}</span> <input type="password" autocomplete="off" placeholder=${w(`modelProviders.apiKey.placeholder`)} .value=${e.addProviderKey} ?disabled=${n} @input=${t=>e.onAddProviderKeyChange(t.target.value)} /> </label> <button class="btn primary" ?disabled=${n||!e.addProviderId||!e.addProviderKey.trim()} @click=${e.onAddProvider} > ${e.busy.add?w(`modelProviders.saving`):w(`modelProviders.add.save`)} </button> </div> ${Ot(e.messages.add)} </div> `:b} `;return N({title:w(`modelProviders.add.title`),description:w(`modelProviders.add.subtitle`),actions:v` <button class="btn btn--sm" ?disabled=${t||!e.addProviderOpen&&(Q(e)||e.unconfiguredProviders.length===0)} title=${e.mutationBlockedReason??``} @click=${e.onAddProviderToggle} > ${e.addProviderOpen?w(`common.cancel`):w(`modelProviders.add.action`)} </button> `},r)}function Lt(e){let t=e.cards.some(Z);return v` <div class="model-providers__setup" data-model-readiness="model-required"> ${N({title:w(`modelProviders.readiness.title`)},O({title:w(`modelProviders.readiness.heading`),description:w(t?`modelProviders.readiness.signedInNoModels`:`modelProviders.readiness.notConfigured`),control:v` ${j({kind:`warn`,label:w(t?`modelProviders.readiness.noModels`:`modelProviders.readiness.modelRequired`)})} <button class="btn primary" @click=${e.onOpenModelSetup}> ${w(t?`modelProviders.readiness.chooseProvider`:`modelSetup.heading`)} </button> `}))} </div> `}function Rt(e){return v` <div class="settings-row"> <div class="settings-row__text"> <span class="settings-row__desc provider-usage-error">${e}</span> </div> </div> `}function zt(e){if(!e.connected)return k(D(M(w(`modelProviders.disconnected`))));if(e.loading)return k(v` <div id=${c.behavior}> ${_t({models:e.configuredModels,selection:e.defaultModels,thinkingLevel:e.thinkingLevel,thinkingOverridden:e.thinkingOverridden,fastMode:e.fastMode,fastModeOverridden:e.fastModeOverridden,loading:!0,canMutate:!Q(e),mutationBlockedReason:e.mutationBlockedReason,busy:e.busy,message:e.messages.defaults,onPrimaryChange:e.onPrimaryChange,onFallbackChange:e.onFallbackChange,onUtilityChange:e.onUtilityChange,onThinkingChange:e.onThinkingChange,onThinkingReset:e.onThinkingReset,onFastModeChange:e.onFastModeChange,onFastModeReset:e.onFastModeReset})} </div> ${D(Ce())} `);let t=v` <div class="model-providers__provider-list"> ${e.error?D(Rt(e.error)):b} ${e.providerUsageFailed?D(Rt(w(`usage.providerUsage.unavailable`))):b} ${e.cards.length===0?D(M(v`<strong>${w(`modelProviders.emptyTitle`)}</strong><br />${w(`modelProviders.emptySubtitle`)}`)):e.cards.map(t=>D(Ft(t,e)))} </div> `,n=!e.configuredModels.some(e=>e.available!==!1);return k(v` ${n?Lt(e):b} <div id=${c.behavior}> ${_t({models:e.configuredModels,selection:e.defaultModels,thinkingLevel:e.thinkingLevel,thinkingOverridden:e.thinkingOverridden,fastMode:e.fastMode,fastModeOverridden:e.fastModeOverridden,canMutate:!Q(e),mutationBlockedReason:e.mutationBlockedReason,busy:e.busy,message:e.messages.defaults,onPrimaryChange:e.onPrimaryChange,onFallbackChange:e.onFallbackChange,onUtilityChange:e.onUtilityChange,onThinkingChange:e.onThinkingChange,onThinkingReset:e.onThinkingReset,onFastModeChange:e.onFastModeChange,onFastModeReset:e.onFastModeReset})} </div> ${N({title:w(`modelProviders.title`),count:e.cards.length,actions:v` ${e.updatedAt?v`<span class="model-providers__updated" >${w(`modelProviders.updated`,{time:u(e.updatedAt,{hour:`numeric`,minute:`2-digit`})})}</span >`:b} <openclaw-tooltip .content=${e.refreshing?w(`modelProviders.refreshing`):w(`common.refresh`)} > <button type="button" class="btn btn--icon btn--ghost btn--xs model-providers__refresh-button" aria-label=${e.refreshing?w(`modelProviders.refreshing`):w(`common.refresh`)} ?disabled=${e.refreshing} @click=${()=>e.onRefresh()} > ${S.refresh} </button> </openclaw-tooltip> `},t)} ${e.quickAddSupported?It(e):b} ${e.providerUsageStalled?v`<div class="callout warning" role="status">${w(`usage.providerUsage.stalled`)}</div>`:b} `)}function Bt(){return(Bt=e((()=>{_(),x(),be(),Je(),A(),C(),Pe(),f(),ne(),m(),X(),Dt(),Ne()})))()}var Vt,$;function Ht(){return(Ht=e((()=>{a(),ge(),_(),ae(),ce(),se(),Ve(),x(),A(),Re(),C(),g(),ve(),o(),ke(),p(),s(),Ke(),R(),U(),I(),ct(),ft(),mt(),Bt(),Vt=`https://docs.openclaw.ai/concepts/model-providers`,$=class extends h{constructor(...e){super(...e),this.loaderPending=!1,this.data=null,this.busy={},this.messages={},this.probeResults={},this.probeUnsupported=!1,this.keyEditorProvider=null,this.keyDraft=``,this.pendingLogoutProvider=null,this.addProviderOpen=!1,this.addProviderId=``,this.addProviderKey=``,this.defaultsDraft=null,this.selectedAgentId=``,this.dataClient=null,this.loadClient=null,this.routeDataObserved=!1,this.agentEpoch=0,this.probeEpochs=new Map,this.refreshTask=new de(this,{autoRun:!1,task:([e,t,n],{signal:r})=>!e||!t?pe:He(e,{agentId:t,...n?{refresh:!0}:{},signal:r}).then(t=>({client:e,data:t})),onComplete:({client:e,data:t})=>{this.loadClient=null,this.supplemental.adoptCoreData(e,t)},onError:()=>{this.loadClient=null}}),this.refreshPolicy=new qe({isLoading:()=>this.loaderPending||!this.routeDataObserved||this.loadClient!==null||this.supplemental.usageLoading,reload:()=>this.supplemental.loadUsage(),onIncompleteUsageExhausted:()=>this.requestUpdate()}),this.supplemental=new pt(this,{isCoreLoading:()=>this.loaderPending,getGateway:()=>this.gateway,getData:()=>this.data,getDataClient:()=>this.dataClient,setData:e=>this.data=e,setDataClient:e=>this.dataClient=e,refreshPolicy:this.refreshPolicy}),this.gateway=new Oe(this,{getGateway:()=>this.context?.gateway,onIdentityChange:()=>this.resetConnectionState(),invalidateRequests:()=>this.invalidateRequests(),ensureInitialData:()=>this.ensureInitialData(),onSnapshot:e=>{e.initial?this.resetConnectionState():e.connectionChanged&&!e.identityChanged&&this.resetConnectionState({preserveVisibleData:!0}),e.becameConnected&&!e.initial&&this.routeDataObserved&&!this.loaderPending&&this.refresh({force:!1})},onPageActivation:()=>this.refreshPolicy.request(`focus`)}),this.subscriptions=new ie(this).watch(()=>this.context?.runtimeConfig,(e,t)=>e.subscribe(t),e=>{!e.state.configSnapshot&&!e.state.configLoading&&e.ensureLoaded().catch(()=>void 0)}).watch(()=>this.context?.overlays,(e,t)=>e.subscribe(t)).watch(()=>this.context?.agents,(e,t)=>e.subscribe(t),()=>this.syncSelectedAgent()).effect(()=>this.context?.agentSelection,e=>e.subscribe(()=>this.syncSelectedAgent()))}disconnectedCallback(){this.subscriptions.clear(),this.refreshPolicy.dispose(),super.disconnectedCallback()}willUpdate(e){if((e.has(`routeData`)||e.has(`loaderPending`))&&this.routeData!==void 0){this.routeDataObserved=!0;let e=this.resolveSelectedAgentId();this.setSelectedAgent(e),(this.routeData.agentId??``)===e&&this.gateway.isRouteDataCurrent(this.routeData)?this.supplemental.adoptCoreData(this.routeData.client,this.routeData.data):(this.data=null,this.dataClient=null,this.refreshPolicy.resetPayload()),this.ensureInitialData()}}ensureInitialData(){!this.context.agents.state.agentsList&&!this.context.agents.state.agentsLoading&&!this.context.agents.state.agentsError&&this.context.agents.ensureList();let e=this.gateway.client;!this.routeDataObserved||this.loaderPending||!this.gateway.connected||!e||!this.selectedAgentId||this.loadClient!==null||this.data!==null&&this.data.updatedAt!==null&&e===this.dataClient||this.refresh({force:!1})}invalidateRequests(){this.loadClient=null,this.refreshTask.run([null,this.selectedAgentId,!1]),this.supplemental.invalidate()}resetConnectionState(e={}){e.preserveVisibleData||(this.data=null,this.dataClient=null),this.refreshPolicy.resetPayload(),this.resetAgentScopeState(),this.probeEpochs=new Map,this.probeUnsupported=!1,this.defaultsDraft=null}resetAgentScopeState(){this.busy={},this.messages={},this.probeResults={},this.closeKeyEditor(),this.pendingLogoutProvider=null,this.addProviderOpen=!1,this.addProviderId=``,this.addProviderKey=``}isCurrentClient(e,t){return this.gateway.isCurrent({client:e,epoch:t})}resolveSelectedAgentId(){let e=this.context.agentSelection.state.selectedId;return e?t(e):``}setSelectedAgent(e){return e!==this.selectedAgentId&&(this.selectedAgentId=e,this.agentEpoch+=1,this.resetAgentScopeState(),!0)}syncSelectedAgent(){let e=this.resolveSelectedAgentId();this.setSelectedAgent(e)&&(this.invalidateRequests(),this.data=null,this.dataClient=null,this.refreshPolicy.resetPayload(),this.requestUpdate(),this.ensureInitialData())}refresh(e){if(!this.selectedAgentId)return Promise.resolve();let t=this.gateway.client;return!this.gateway.connected||!t?(this.refreshPolicy.markLoadDeferred(),Promise.resolve()):(this.supplemental.beginCoreRefresh(e.force),this.loadClient=t,this.refreshTask.run([t,this.selectedAgentId,e.force]))}mutationBlockedReason(){let e=this.context.gateway.snapshot;return e.phase===`connected`?this.context.runtimeConfig.canPatch===!0?!e.client||!this.selectedAgentId||!this.data?.config?w(`modelProviders.configUnavailable`):null:w(`modelProviders.readOnly.adminRequired`):w(`modelProviders.readOnly.disconnected`)}canMutate(){return this.mutationBlockedReason()===null&&!this.configBusy()}configBusy(){let e=this.context.runtimeConfig.state,t=this.context.overlays.snapshot;return e.configLoading||e.configSaving||e.configApplying||t.updateRunning||t.updateReconciliationPending}setBusy(e,t){let n={...this.busy};t?n[e]=!0:delete n[e],this.busy=n}setMessage(e,t){let n={...this.messages};t?n[e]=t:delete n[e],this.messages=n}clearProbe(e){this.probeEpochs.set(e,(this.probeEpochs.get(e)??0)+1),this.setBusy(`probe:${e}`,!1);let t={...this.probeResults};delete t[e],this.probeResults=t}async patchConfig(e){if(!this.canMutate()||this.busy[e.key])return{ok:!1};let t=this.context.gateway.snapshot.client;if(!t)return{ok:!1};let n=this.gateway.epoch,r=this.agentEpoch;return Xe({runtimeConfig:this.context.runtimeConfig,agentEpoch:r,isCurrentClient:()=>this.isCurrentClient(t,n),isCurrentAgent:()=>this.agentEpoch===r,refreshProviders:()=>this.refresh({force:!0}),setBusy:t=>this.setBusy(e.key,t),setMessage:t=>this.setMessage(e.key,t)},e)}openKeyEditor(e){this.keyEditorProvider=e,this.keyDraft=``,this.setMessage(e,null)}closeKeyEditor(){this.keyEditorProvider=null,this.keyDraft=``}async saveKey(e,t){let n=this.keyDraft.trim();if(!n)return;this.clearProbe(e),this.setMessage(e,null),this.setMessage(`key:${e}`,null);let r=await this.patchConfig({key:`key:${e}`,raw:W(t,n),note:w(`modelProviders.notes.saveKey`,{provider:e}),success:w(`modelProviders.apiKey.saved`)});r.ok&&this.agentEpoch===r.agentEpoch&&(this.setMessage(`key:${e}`,null),this.keyEditorProvider===e&&this.keyDraft.trim()===n&&this.closeKeyEditor(),this.setMessage(e,{kind:`success`,text:w(`modelProviders.apiKey.saved`),...r.warning?{warning:r.warning}:{}}))}async removeKey(e,t){this.clearProbe(e),this.setMessage(e,null),this.setMessage(`key:${e}`,null);let n=await this.patchConfig({key:`key:${e}`,raw:W(t,null),note:w(`modelProviders.notes.removeKey`,{provider:e}),success:w(`modelProviders.apiKey.removed`)});n.ok&&this.agentEpoch===n.agentEpoch&&(this.setMessage(`key:${e}`,null),this.keyEditorProvider===e&&this.closeKeyEditor(),this.setMessage(e,{kind:`success`,text:w(`modelProviders.apiKey.removed`),...n.warning?{warning:n.warning}:{}}))}async probe(e,t){let n=this.context.gateway.snapshot.client,r=`probe:${e}`;if(!n||!this.canMutate()||this.busy[r]||this.probeUnsupported)return;let i=this.gateway.epoch,a=this.selectedAgentId,o=this.agentEpoch,s=(this.probeEpochs.get(e)??0)+1;this.probeEpochs.set(e,s);let c=()=>this.isCurrentClient(n,i)&&this.agentEpoch===o&&this.selectedAgentId===a&&this.probeEpochs.get(e)===s;this.setBusy(r,!0),this.setMessage(e,null);try{let r=[];for(let e of t){if(!c())return;r.push(await n.request(`models.probe`,{provider:e,agentId:a}))}c()&&(this.probeResults={...this.probeResults,[e]:ut(e,r)})}catch(t){if(!c())return;lt(t)?(this.probeUnsupported=!0,this.setMessage(e,{kind:`error`,text:w(`modelProviders.probe.unavailable`)})):this.setMessage(e,{kind:`error`,text:L(t)})}finally{c()&&this.setBusy(r,!1)}}async logout(e,t){let n=this.context.gateway.snapshot.client,r=`logout:${e}`;if(!n||!this.canMutate()||this.busy[r])return;let i=this.gateway.epoch,a=this.selectedAgentId,o=this.agentEpoch;this.clearProbe(e),this.setBusy(r,!0),this.setMessage(e,null);try{let r;for(let e of t){if(!this.isCurrentClient(n,i)||this.agentEpoch!==o)return;try{await n.request(`models.authLogout`,{...e,agentId:a})}catch(e){r??=e}}if(!this.isCurrentClient(n,i)||this.agentEpoch!==o||(await this.refresh({force:!0}),!this.isCurrentClient(n,i)||this.agentEpoch!==o))return;if(r){this.setMessage(e,{kind:`error`,text:L(r)});return}this.pendingLogoutProvider=null,this.setMessage(e,{kind:`success`,text:w(`modelProviders.logout.done`)})}catch(t){this.isCurrentClient(n,i)&&this.agentEpoch===o&&this.setMessage(e,{kind:`error`,text:L(t)})}finally{this.isCurrentClient(n,i)&&this.agentEpoch===o&&this.setBusy(r,!1)}}async addProvider(){let e=this.addProviderId,t=this.addProviderKey.trim();if(!e||!t)return;let n=await this.patchConfig({key:`add`,raw:W(e,t),note:w(`modelProviders.notes.addProvider`,{provider:e}),success:w(`modelProviders.add.saved`,{provider:e})});n.ok&&this.agentEpoch===n.agentEpoch&&(this.addProviderId===e&&this.addProviderKey.trim()===t&&(this.addProviderOpen=!!n.warning,n.warning||(this.addProviderId=``),this.addProviderKey=``),this.setMessage(e,{kind:`success`,text:w(`modelProviders.add.saved`,{provider:e}),...n.warning?{warning:n.warning}:{}}))}async saveDefaults(e=this.defaultsDraft){if(!e)return;let t=this.agentEpoch,n=await this.patchConfig({key:`defaults`,raw:ot(e),note:w(`modelProviders.notes.defaultModel`),success:w(`modelProviders.defaults.saved`),replacePaths:st});this.agentEpoch===t&&this.defaultsDraft===e&&(!n.ok||!n.warning)&&(this.defaultsDraft=null)}render(){let e=this.context.gateway.snapshot,n=this.context.agents.state,i=n.agentsList?.agents??[],a=n.agentsList?null:n.agentsError,o=i.find(e=>t(e.id)===this.selectedAgentId),s=o?ee(o):this.selectedAgentId,c=this.data??Ge,l=nt(c.config),u=this.context.runtimeConfig.state,d=r(u.configForm??u.configSnapshot?.config)??r(c.config)??{},f=r(r(d.agents)?.defaults),p={...l.defaults,...at(f)},m=this.defaultsDraft??p,h=e=>{this.defaultsDraft={...this.defaultsDraft??p,...e},this.setMessage(`defaults`,null),this.saveDefaults(this.defaultsDraft)},te=et({...c,providerUsage:c.providerUsage?.ok?c.providerUsage.value:null,configProviderIds:l.providerIds,configApiKeyProviderIds:l.apiKeyProviderIds,configProviderAuthModes:l.providerAuthModes}),ne=new Set([...l.providerIds,...c.authStatus?.providers.filter(e=>!!e.apiKey||e.profiles.length>0).map(e=>e.provider)??[]]),re=_e(e,`models.probe`),g=zt({connected:e.phase===`connected`,loading:e.phase===`connected`&&this.data===null&&!a,refreshing:this.loadClient!==null,error:a??c.error??c.catalogError,providerUsageFailed:c.providerUsage?.ok===!1,supplementalLoading:this.loaderPending||this.supplemental.loading,updatedAt:c.updatedAt,costDays:30,credentialAgentLabel:s,cards:te,configuredModels:tt(c.models,m),defaultModels:m,thinkingLevel:m.thinkingLevel,thinkingOverridden:m.thinkingOverridden,fastMode:m.fastMode,fastModeOverridden:m.fastModeOverridden,configBusy:this.configBusy(),quickAddSupported:c.authStatus?.providerCapabilities!==void 0,unconfiguredProviders:rt(c.authStatus?.providerCapabilities,ne),canMutate:this.canMutate(),mutationBlockedReason:this.mutationBlockedReason(),providerUsageStalled:this.refreshPolicy.incompleteUsageExhausted,probeAvailable:!this.probeUnsupported&&re!==!1,busy:this.busy,messages:this.messages,probeResults:this.probeResults,keyEditorProvider:this.keyEditorProvider,keyDraft:this.keyDraft,pendingLogoutProvider:this.pendingLogoutProvider,addProviderOpen:this.addProviderOpen,addProviderId:this.addProviderId,addProviderKey:this.addProviderKey,onRefresh:()=>void(a?this.context.agents.refreshList():this.refresh({force:!0})),onOpenKeyEditor:e=>this.openKeyEditor(e),onCloseKeyEditor:()=>this.closeKeyEditor(),onKeyDraftChange:e=>this.keyDraft=e,onSaveKey:(e,t)=>void this.saveKey(e,t),onRemoveKey:(e,t)=>void this.removeKey(e,t),onProbe:(e,t)=>void this.probe(e,t),onRequestLogout:e=>this.pendingLogoutProvider=e,onCancelLogout:()=>this.pendingLogoutProvider=null,onLogout:(e,t)=>void this.logout(e,t),onAddProviderToggle:()=>{this.addProviderOpen=!this.addProviderOpen,this.addProviderKey=``,this.setMessage(`add`,null)},onAddProviderIdChange:e=>this.addProviderId=e,onAddProviderKeyChange:e=>this.addProviderKey=e,onAddProvider:()=>void this.addProvider(),onPrimaryChange:e=>{let t=this.defaultsDraft??p;h({primary:e,fallbacks:t.fallbacks.filter(t=>t!==e)})},onFallbackChange:e=>{let t=this.defaultsDraft??p;h({fallbacks:e?[e,...t.fallbacks.slice(1).filter(t=>t!==e)]:[]})},onUtilityChange:e=>h({utilityModel:e}),onThinkingChange:e=>h({thinkingLevel:e,thinkingOverridden:!0}),onThinkingReset:()=>h({thinkingLevel:void 0,thinkingOverridden:!1}),onFastModeChange:e=>h({fastMode:e,fastModeOverridden:!0}),onFastModeReset:()=>h({fastMode:void 0,fastModeOverridden:!1}),onOpenModelSetup:()=>this.context.navigate(`model-setup`)});return v` ${we({title:ue(`model-providers`),subtitle:v`${w(`modelProviders.subtitle`)} ${Ee(Vt)}`,actions:v` ${Be({agents:i,selection:this.context.agentSelection,allowAll:!1,selectedId:this.selectedAgentId})} <button class="btn" @click=${()=>this.context.navigate(`model-setup`)}> ${S.settings}<span>${w(`modelProviders.configureModels`)}</span> </button> `})} ${Le(g)} `}},i([n({context:le,subscribe:!0})],$.prototype,`context`,void 0),i([oe({attribute:!1})],$.prototype,`routeData`,void 0),i([oe({attribute:!1})],$.prototype,`loaderPending`,void 0),i([y()],$.prototype,`data`,void 0),i([y()],$.prototype,`busy`,void 0),i([y()],$.prototype,`messages`,void 0),i([y()],$.prototype,`probeResults`,void 0),i([y()],$.prototype,`probeUnsupported`,void 0),i([y()],$.prototype,`keyEditorProvider`,void 0),i([y()],$.prototype,`keyDraft`,void 0),i([y()],$.prototype,`pendingLogoutProvider`,void 0),i([y()],$.prototype,`addProviderOpen`,void 0),i([y()],$.prototype,`addProviderId`,void 0),i([y()],$.prototype,`addProviderKey`,void 0),i([y()],$.prototype,`defaultsDraft`,void 0),i([y()],$.prototype,`selectedAgentId`,void 0),customElements.get(`openclaw-model-providers-page`)||customElements.define(`openclaw-model-providers-page`,$)})))()}Ht(); //# sourceMappingURL=model-providers-page-CvuVsNlr.js.map