@ottocode/openclaw-setu 0.1.8 → 0.1.10

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.
@@ -0,0 +1,3 @@
1
+ import{readFileSync as L,writeFileSync as T,existsSync as Y,readdirSync as O,mkdirSync as k,renameSync as U}from"node:fs";import{join as F}from"node:path";import{homedir as R}from"node:os";var E=F(R(),".openclaw"),b=F(E,"openclaw.json"),A="setu",_=8403;var P=/[:\/]8403/,w="setu-proxy-handles-auth",x=[{id:"claude-sonnet-4-6",alias:"sonnet-4.6"},{id:"claude-sonnet-4-5",alias:"sonnet-4.5"},{id:"claude-opus-4-6",alias:"opus"},{id:"claude-3-5-haiku-20241022",alias:"haiku"},{id:"gpt-5.1-codex",alias:"codex"},{id:"gpt-5",alias:"gpt5"},{id:"gpt-5-mini",alias:"gpt5-mini"},{id:"codex-mini-latest",alias:"codex-mini"},{id:"gemini-3-pro-preview",alias:"gemini-pro"},{id:"gemini-3-flash-preview",alias:"gemini-flash"},{id:"kimi-k2.5",alias:"kimi"},{id:"glm-5",alias:"glm"},{id:"MiniMax-M2.5",alias:"minimax"}];function K(){if(!Y(b))return{};try{let z=L(b,"utf-8").trim();if(!z)return{};return JSON.parse(z)}catch{return{}}}function D(z){if(!Y(E))k(E,{recursive:!0});let q=`${b}.tmp.${process.pid}`;T(q,JSON.stringify(z,null,2)+`
2
+ `),U(q,b)}function C(){return[{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6 (anthropic, via Setu)",api:"anthropic-messages",reasoning:!1,input:["text","image"],contextWindow:200000,maxTokens:64000},{id:"claude-sonnet-4-5",name:"Claude Sonnet 4.5 (anthropic, via Setu)",api:"anthropic-messages",reasoning:!1,input:["text","image"],contextWindow:200000,maxTokens:64000},{id:"claude-opus-4-6",name:"Claude Opus 4.6 (anthropic, via Setu)",api:"anthropic-messages",reasoning:!1,input:["text","image"],contextWindow:200000,maxTokens:128000},{id:"claude-3-5-haiku-20241022",name:"Claude 3.5 Haiku (anthropic, via Setu)",api:"anthropic-messages",reasoning:!1,input:["text","image"],contextWindow:200000,maxTokens:8192},{id:"gpt-5.1-codex",name:"GPT-5.1 Codex (openai, via Setu)",api:"openai-responses",reasoning:!1,input:["text","image"],contextWindow:400000,maxTokens:128000},{id:"gpt-5",name:"GPT-5 (openai, via Setu)",api:"openai-responses",reasoning:!1,input:["text","image"],contextWindow:400000,maxTokens:128000},{id:"gpt-5-mini",name:"GPT-5 Mini (openai, via Setu)",api:"openai-responses",reasoning:!1,input:["text","image"],contextWindow:400000,maxTokens:128000},{id:"codex-mini-latest",name:"Codex Mini (openai, via Setu)",api:"openai-responses",reasoning:!1,input:["text"],contextWindow:200000,maxTokens:1e5},{id:"gemini-3-pro-preview",name:"Gemini 3 Pro (google, via Setu)",api:"openai-completions",reasoning:!1,input:["text","image"],contextWindow:1e6,maxTokens:64000},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash (google, via Setu)",api:"openai-completions",reasoning:!1,input:["text","image"],contextWindow:1048576,maxTokens:65536},{id:"kimi-k2.5",name:"Kimi K2.5 (moonshot, via Setu)",api:"openai-completions",reasoning:!1,input:["text"],contextWindow:262144,maxTokens:262144},{id:"glm-5",name:"GLM-5 (zai, via Setu)",api:"openai-completions",reasoning:!1,input:["text"],contextWindow:204800,maxTokens:131072},{id:"MiniMax-M2.5",name:"MiniMax M2.5 (minimax, via Setu)",api:"anthropic-messages",reasoning:!1,input:["text"],contextWindow:204800,maxTokens:131072}]}function W(z=_){return{baseUrl:`http://localhost:${z}/v1`,apiKey:"setu-proxy-handles-auth",api:"openai-completions",authHeader:!1,models:C()}}function v(z,q){let j=[];for(let H of Object.keys(z)){if(H===A)continue;if(!H.startsWith("custom-"))continue;let J=z[H];if(!J?.baseUrl)continue;let Q=String(J.baseUrl);if(Q.includes(`:${q}`)||P.test(Q))delete z[H],j.push(H)}return j}function u(z,q){if(q.length===0)return;let J=z.agents?.defaults?.model;if(!J?.primary)return;let Q=String(J.primary);for(let Z of q)if(Q.startsWith(`${Z}/`)){let G=Q.slice(Z.length+1);J.primary=`setu/${G}`;break}}function p(z=_){let q=K(),j=!1;if(!q.models)q.models={},j=!0;let H=q.models;if(!H.providers)H.providers={},j=!0;let J=H.providers,Q=v(J,z);if(Q.length>0)u(q,Q),j=!0;let Z=`http://localhost:${z}/v1`,G=J[A];if(!G)J[A]=W(z),j=!0;else{if(!G.baseUrl||G.baseUrl!==Z)G.baseUrl=Z,j=!0;if(!G.apiKey)G.apiKey=w,j=!0;if(!G.api)G.api="openai-completions",j=!0;let V=G.models,N=C(),B=new Set(Array.isArray(V)?V.map((X)=>X?.id).filter(Boolean):[]),h=N.map((X)=>X.id);if(!V||!Array.isArray(V)||V.length!==N.length||h.some((X)=>!B.has(X)))G.models=C(),j=!0}if(!q.agents)q.agents={},j=!0;let I=q.agents;if(!I.defaults)I.defaults={},j=!0;let $=I.defaults;if(!$.model)$.model={},j=!0;let M=$.model;if(!M.primary)M.primary="setu/claude-sonnet-4-6",j=!0;if(!$.models)$.models={},j=!0;let S=$.models;for(let V of x){let N=`setu/${V.id}`,B=S[N];if(!B)S[N]={alias:V.alias},j=!0;else if(B.alias!==V.alias)B.alias=V.alias,j=!0}if(j)D(q)}function g(){let z=F(E,"agents");if(!Y(z))try{k(z,{recursive:!0})}catch{return}let q;try{q=O(z,{withFileTypes:!0}).filter((j)=>j.isDirectory()).map((j)=>j.name)}catch{q=[]}if(!q.includes("main"))q=["main",...q];for(let j of q){let H=F(z,j,"agent"),J=F(H,"auth-profiles.json");if(!Y(H))try{k(H,{recursive:!0})}catch{continue}let Q={version:1,profiles:{}};if(Y(J))try{let G=JSON.parse(L(J,"utf-8"));if(G.version&&G.profiles)Q=G}catch{}let Z="setu:default";if(Q.profiles[Z])continue;Q.profiles[Z]={type:"api_key",provider:"setu",key:w};try{T(J,JSON.stringify(Q,null,2))}catch{}}}function a(){let z=K(),q=z.models;if(!q?.providers)return;let j=q.providers;delete j[A],D(z)}function m(){let q=K().models;if(!q?.providers)return!1;let j=q.providers;return A in j}function l(){return b}
3
+ export{W as b,p as c,g as d,a as e,m as f,l as g};
package/dist/cli.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env bun
2
- import{a as S}from"./chunk-r76z42nm.mjs";import{c as u,e as b,f as v,g as a}from"./chunk-86peddhn.mjs";import{l as s,m as i,n as p,o as c,p as r,q as y,r as m}from"./chunk-vw7de3g2.mjs";import"./chunk-k1btvkaq.mjs";import"./chunk-2pmp70f4.mjs";import"./chunk-w1g9nypz.mjs";import"./chunk-gr14hnnm.mjs";import"./chunk-enz73nmb.mjs";import*as x from"node:readline";function n(o){let e=x.createInterface({input:process.stdin,output:process.stdout});return new Promise((t)=>{e.question(o,(l)=>{e.close(),t(l.trim())})})}function g(){console.log(`
2
+ import{a as S}from"./chunk-r76z42nm.mjs";import{c as u,e as b,f as v,g as a}from"./chunk-xzd9n9wh.mjs";import{l as s,m as i,n as p,o as c,p as r,q as y,r as m}from"./chunk-vw7de3g2.mjs";import"./chunk-k1btvkaq.mjs";import"./chunk-2pmp70f4.mjs";import"./chunk-w1g9nypz.mjs";import"./chunk-gr14hnnm.mjs";import"./chunk-enz73nmb.mjs";import*as x from"node:readline";function n(o){let e=x.createInterface({input:process.stdin,output:process.stdout});return new Promise((t)=>{e.question(o,(l)=>{e.close(),t(l.trim())})})}function g(){console.log(`
3
3
  openclaw-setu — Pay for AI with Solana USDC
4
4
 
5
5
  Usage:
package/dist/index.mjs CHANGED
@@ -1,3 +1,3 @@
1
- import{b as s,c as g,d as C,f as P}from"./chunk-86peddhn.mjs";import{l as f,m as y,n as l,p as h,r as S}from"./chunk-vw7de3g2.mjs";import"./chunk-k1btvkaq.mjs";import"./chunk-2pmp70f4.mjs";import"./chunk-w1g9nypz.mjs";import"./chunk-gr14hnnm.mjs";import{qd as m}from"./chunk-enz73nmb.mjs";var x=8403;function $(e){return e.pluginConfig?.port??x}var K={id:"openclaw-setu",name:"Setu",description:"Pay for AI with Solana USDC — no API keys, just a wallet.",version:"0.1.0",register(e){let n=$(e);try{g(n)}catch{}try{C()}catch{}if(!e.config.models)e.config.models={providers:{}};if(!e.config.models.providers)e.config.models.providers={};let r=s(n);if(e.config.models.providers.setu={baseUrl:r.baseUrl,api:r.api,apiKey:r.apiKey,models:r.models},!e.config.agents)e.config.agents={};let u=e.config.agents;if(!u.defaults)u.defaults={};let d=u.defaults;if(!d.model)d.model={};let w=d.model;if(!w.primary)w.primary="setu/claude-sonnet-4-6";e.registerProvider({id:"setu",label:"Setu (Solana USDC)",aliases:["setu-solana"],envVars:["SETU_PRIVATE_KEY"],models:s(n),auth:[{id:"setu-wallet",label:"Solana Wallet",hint:"Generate or import a Solana wallet — pay per token with USDC",kind:"custom",async run(o){let t=l();if(t)return o.prompter.note(`Existing Setu wallet found: ${t.publicKey}`),{profiles:[{profileId:"setu-wallet",credential:{apiKey:"setu-proxy-handles-auth",type:"wallet",walletAddress:t.publicKey}}],configPatch:{models:{providers:{setu:s(n)}}},defaultModel:"setu/claude-sonnet-4-6",notes:[`Wallet: ${t.publicKey}`,"Fund with USDC on Solana to start using.","Run `openclaw-setu start` to start the proxy."]};let a=await o.prompter.text({message:"Enter Solana private key (base58) or press Enter to generate a new one:",validate:(i)=>{if(i&&!f(i))return"Invalid Solana private key";return}}),c=typeof a==="string"?a.trim():"";if(c&&f(c)){let{saveWallet:i}=await import("./chunk-nj01dc2r.mjs");i(c)}else h();let p=l();return await g(n),{profiles:[{profileId:"setu-wallet",credential:{apiKey:"setu-proxy-handles-auth",type:"wallet",walletAddress:p.publicKey}}],configPatch:{models:{providers:{setu:s(n)}}},defaultModel:"setu/claude-sonnet-4-6",notes:[`Wallet generated: ${p.publicKey}`,`Key stored at: ${y()}`,`Fund with USDC on Solana: ${p.publicKey}`,"Run `openclaw-setu start` to start the proxy."]}}}]});let b={name:"wallet",description:"Show your Setu wallet address and balances",requireAuth:!0,async handler(){let o=l();if(!o)return{text:"No Setu wallet found. Run `openclaw-setu setup`."};let t=await S(o.privateKey),a=[`Wallet: ${o.publicKey}`];if(t.setu)a.push(`Setu Balance: $${t.setu.balance.toFixed(4)}`),a.push(`Total Spent: $${t.setu.totalSpent.toFixed(4)}`),a.push(`Requests: ${t.setu.requestCount}`);if(t.wallet)a.push(`On-chain USDC: $${t.wallet.usdcBalance.toFixed(4)} (${t.wallet.network})`);return{text:a.join(`
1
+ import{b as s,c as g,d as C,f as P}from"./chunk-xzd9n9wh.mjs";import{l as f,m as y,n as l,p as h,r as S}from"./chunk-vw7de3g2.mjs";import"./chunk-k1btvkaq.mjs";import"./chunk-2pmp70f4.mjs";import"./chunk-w1g9nypz.mjs";import"./chunk-gr14hnnm.mjs";import{qd as m}from"./chunk-enz73nmb.mjs";var x=8403;function $(e){return e.pluginConfig?.port??x}var K={id:"openclaw-setu",name:"Setu",description:"Pay for AI with Solana USDC — no API keys, just a wallet.",version:"0.1.0",register(e){let n=$(e);try{g(n)}catch{}try{C()}catch{}if(!e.config.models)e.config.models={providers:{}};if(!e.config.models.providers)e.config.models.providers={};let r=s(n);if(e.config.models.providers.setu={baseUrl:r.baseUrl,api:r.api,apiKey:r.apiKey,models:r.models},!e.config.agents)e.config.agents={};let u=e.config.agents;if(!u.defaults)u.defaults={};let d=u.defaults;if(!d.model)d.model={};let w=d.model;if(!w.primary)w.primary="setu/claude-sonnet-4-6";e.registerProvider({id:"setu",label:"Setu (Solana USDC)",aliases:["setu-solana"],envVars:["SETU_PRIVATE_KEY"],models:s(n),auth:[{id:"setu-wallet",label:"Solana Wallet",hint:"Generate or import a Solana wallet — pay per token with USDC",kind:"custom",async run(o){let t=l();if(t)return o.prompter.note(`Existing Setu wallet found: ${t.publicKey}`),{profiles:[{profileId:"setu-wallet",credential:{apiKey:"setu-proxy-handles-auth",type:"wallet",walletAddress:t.publicKey}}],configPatch:{models:{providers:{setu:s(n)}}},defaultModel:"setu/claude-sonnet-4-6",notes:[`Wallet: ${t.publicKey}`,"Fund with USDC on Solana to start using.","Run `openclaw-setu start` to start the proxy."]};let a=await o.prompter.text({message:"Enter Solana private key (base58) or press Enter to generate a new one:",validate:(i)=>{if(i&&!f(i))return"Invalid Solana private key";return}}),c=typeof a==="string"?a.trim():"";if(c&&f(c)){let{saveWallet:i}=await import("./chunk-nj01dc2r.mjs");i(c)}else h();let p=l();return await g(n),{profiles:[{profileId:"setu-wallet",credential:{apiKey:"setu-proxy-handles-auth",type:"wallet",walletAddress:p.publicKey}}],configPatch:{models:{providers:{setu:s(n)}}},defaultModel:"setu/claude-sonnet-4-6",notes:[`Wallet generated: ${p.publicKey}`,`Key stored at: ${y()}`,`Fund with USDC on Solana: ${p.publicKey}`,"Run `openclaw-setu start` to start the proxy."]}}}]});let b={name:"wallet",description:"Show your Setu wallet address and balances",requireAuth:!0,async handler(){let o=l();if(!o)return{text:"No Setu wallet found. Run `openclaw-setu setup`."};let t=await S(o.privateKey),a=[`Wallet: ${o.publicKey}`];if(t.setu)a.push(`Setu Balance: $${t.setu.balance.toFixed(4)}`),a.push(`Total Spent: $${t.setu.totalSpent.toFixed(4)}`),a.push(`Requests: ${t.setu.requestCount}`);if(t.wallet)a.push(`On-chain USDC: $${t.wallet.usdcBalance.toFixed(4)} (${t.wallet.network})`);return{text:a.join(`
2
2
  `)}}};e.registerCommand(b);let v={name:"setu-status",description:"Check Setu plugin configuration status",async handler(){let o=l(),t=P();return{text:[`Wallet: ${o?o.publicKey:"not set up"}`,`OpenClaw config: ${t?"injected":"not configured"}`,`Proxy port: ${n}`].join(`
3
3
  `)}}};e.registerCommand(v),e.registerService({id:"setu-proxy",async start(){if(typeof globalThis.Bun>"u"){e.logger.info("Setu: Run `openclaw-setu start` to start the proxy (requires Bun).");return}if(!l()){e.logger.warn("Setu: No wallet found. Run `openclaw-setu setup` first.");return}try{let{createProxy:t}=await import("./chunk-kvpwet74.mjs");t({port:n,verbose:!1}),e.logger.info(`Setu proxy running on http://localhost:${n}`)}catch(t){e.logger.error(`Setu proxy failed: ${t.message}`)}}})}},O=K;export{O as default};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ottocode/openclaw-setu",
3
- "version": "0.1.8",
3
+ "version": "0.1.10",
4
4
  "description": "Setu provider for OpenClaw — pay for AI with Solana USDC. No API keys, just a wallet.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.mjs",
@@ -1,3 +0,0 @@
1
- import{readFileSync as L,writeFileSync as T,existsSync as Y,readdirSync as O,mkdirSync as k,renameSync as U}from"node:fs";import{join as F}from"node:path";import{homedir as R}from"node:os";var E=F(R(),".openclaw"),b=F(E,"openclaw.json"),A="setu",_=8403;var P=/[:\/]8403/,w="setu-proxy-handles-auth",x=[{id:"claude-sonnet-4-6",alias:"sonnet-4.6"},{id:"claude-sonnet-4-5",alias:"sonnet-4.5"},{id:"claude-opus-4-6",alias:"opus"},{id:"claude-3-5-haiku-20241022",alias:"haiku"},{id:"gpt-5.1-codex",alias:"codex"},{id:"gpt-5",alias:"gpt5"},{id:"gpt-5-mini",alias:"gpt5-mini"},{id:"codex-mini-latest",alias:"codex-mini"},{id:"gemini-3-pro-preview",alias:"gemini-pro"},{id:"gemini-3-flash-preview",alias:"gemini-flash"},{id:"kimi-k2.5",alias:"kimi"},{id:"glm-5",alias:"glm"},{id:"MiniMax-M2.5",alias:"minimax"}];function K(){if(!Y(b))return{};try{let z=L(b,"utf-8").trim();if(!z)return{};return JSON.parse(z)}catch{return{}}}function D(z){if(!Y(E))k(E,{recursive:!0});let q=`${b}.tmp.${process.pid}`;T(q,JSON.stringify(z,null,2)+`
2
- `),U(q,b)}function C(){return[{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6 (anthropic, via Setu)",api:"anthropic-messages",reasoning:!0,input:["text","image"],contextWindow:200000,maxTokens:64000},{id:"claude-sonnet-4-5",name:"Claude Sonnet 4.5 (anthropic, via Setu)",api:"anthropic-messages",reasoning:!0,input:["text","image"],contextWindow:200000,maxTokens:64000},{id:"claude-opus-4-6",name:"Claude Opus 4.6 (anthropic, via Setu)",api:"anthropic-messages",reasoning:!0,input:["text","image"],contextWindow:200000,maxTokens:128000},{id:"claude-3-5-haiku-20241022",name:"Claude 3.5 Haiku (anthropic, via Setu)",api:"anthropic-messages",reasoning:!1,input:["text","image"],contextWindow:200000,maxTokens:8192},{id:"gpt-5.1-codex",name:"GPT-5.1 Codex (openai, via Setu)",api:"openai-completions",reasoning:!0,input:["text","image"],contextWindow:400000,maxTokens:128000},{id:"gpt-5",name:"GPT-5 (openai, via Setu)",api:"openai-completions",reasoning:!0,input:["text","image"],contextWindow:400000,maxTokens:128000},{id:"gpt-5-mini",name:"GPT-5 Mini (openai, via Setu)",api:"openai-completions",reasoning:!0,input:["text","image"],contextWindow:400000,maxTokens:128000},{id:"codex-mini-latest",name:"Codex Mini (openai, via Setu)",api:"openai-completions",reasoning:!0,input:["text"],contextWindow:200000,maxTokens:1e5},{id:"gemini-3-pro-preview",name:"Gemini 3 Pro (google, via Setu)",api:"openai-completions",reasoning:!0,input:["text","image"],contextWindow:1e6,maxTokens:64000},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash (google, via Setu)",api:"openai-completions",reasoning:!0,input:["text","image"],contextWindow:1048576,maxTokens:65536},{id:"kimi-k2.5",name:"Kimi K2.5 (moonshot, via Setu)",api:"openai-completions",reasoning:!0,input:["text"],contextWindow:262144,maxTokens:262144},{id:"glm-5",name:"GLM-5 (zai, via Setu)",api:"openai-completions",reasoning:!0,input:["text"],contextWindow:204800,maxTokens:131072},{id:"MiniMax-M2.5",name:"MiniMax M2.5 (minimax, via Setu)",api:"openai-completions",reasoning:!0,input:["text"],contextWindow:204800,maxTokens:131072}]}function W(z=_){return{baseUrl:`http://localhost:${z}/v1`,apiKey:"setu-proxy-handles-auth",api:"openai-completions",authHeader:!1,models:C()}}function v(z,q){let j=[];for(let H of Object.keys(z)){if(H===A)continue;if(!H.startsWith("custom-"))continue;let J=z[H];if(!J?.baseUrl)continue;let Q=String(J.baseUrl);if(Q.includes(`:${q}`)||P.test(Q))delete z[H],j.push(H)}return j}function u(z,q){if(q.length===0)return;let J=z.agents?.defaults?.model;if(!J?.primary)return;let Q=String(J.primary);for(let Z of q)if(Q.startsWith(`${Z}/`)){let G=Q.slice(Z.length+1);J.primary=`setu/${G}`;break}}function p(z=_){let q=K(),j=!1;if(!q.models)q.models={},j=!0;let H=q.models;if(!H.providers)H.providers={},j=!0;let J=H.providers,Q=v(J,z);if(Q.length>0)u(q,Q),j=!0;let Z=`http://localhost:${z}/v1`,G=J[A];if(!G)J[A]=W(z),j=!0;else{if(!G.baseUrl||G.baseUrl!==Z)G.baseUrl=Z,j=!0;if(!G.apiKey)G.apiKey=w,j=!0;if(!G.api)G.api="openai-completions",j=!0;let V=G.models,N=C(),B=new Set(Array.isArray(V)?V.map((X)=>X?.id).filter(Boolean):[]),h=N.map((X)=>X.id);if(!V||!Array.isArray(V)||V.length!==N.length||h.some((X)=>!B.has(X)))G.models=C(),j=!0}if(!q.agents)q.agents={},j=!0;let I=q.agents;if(!I.defaults)I.defaults={},j=!0;let $=I.defaults;if(!$.model)$.model={},j=!0;let M=$.model;if(!M.primary)M.primary="setu/claude-sonnet-4-6",j=!0;if(!$.models)$.models={},j=!0;let S=$.models;for(let V of x){let N=`setu/${V.id}`,B=S[N];if(!B)S[N]={alias:V.alias},j=!0;else if(B.alias!==V.alias)B.alias=V.alias,j=!0}if(j)D(q)}function g(){let z=F(E,"agents");if(!Y(z))try{k(z,{recursive:!0})}catch{return}let q;try{q=O(z,{withFileTypes:!0}).filter((j)=>j.isDirectory()).map((j)=>j.name)}catch{q=[]}if(!q.includes("main"))q=["main",...q];for(let j of q){let H=F(z,j,"agent"),J=F(H,"auth-profiles.json");if(!Y(H))try{k(H,{recursive:!0})}catch{continue}let Q={version:1,profiles:{}};if(Y(J))try{let G=JSON.parse(L(J,"utf-8"));if(G.version&&G.profiles)Q=G}catch{}let Z="setu:default";if(Q.profiles[Z])continue;Q.profiles[Z]={type:"api_key",provider:"setu",key:w};try{T(J,JSON.stringify(Q,null,2))}catch{}}}function a(){let z=K(),q=z.models;if(!q?.providers)return;let j=q.providers;delete j[A],D(z)}function l(){let q=K().models;if(!q?.providers)return!1;let j=q.providers;return A in j}function m(){return b}
3
- export{W as b,p as c,g as d,a as e,l as f,m as g};