tako-cli 0.3.18 → 0.3.20

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.
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- var{defineProperty:Wd,getOwnPropertyNames:oc,getOwnPropertyDescriptor:nc}=Object,dc=Object.prototype.hasOwnProperty;function ec(i){return this[i]}var uc=(i)=>{var o=(Se??=new WeakMap).get(i),n;if(o)return o;if(o=Wd({},"__esModule",{value:!0}),i&&typeof i==="object"||typeof i==="function"){for(var d of oc(i))if(!dc.call(o,d))Wd(o,d,{get:ec.bind(i,d),enumerable:!(n=nc(i,d))||n.enumerable})}return Se.set(i,o),o},Se;var rc=(i)=>i;function tc(i,o){this[i]=rc.bind(null,o)}var ii=(i,o)=>{for(var n in o)Wd(i,n,{get:o[n],enumerable:!0,configurable:!0,set:tc.bind(o,n)})};var N=(i,o)=>()=>(i&&(o=i(i=0)),o);var $=import.meta.require;var Nn={};ii(Nn,{updateConfig:()=>Ui,saveConfig:()=>K,loadConfig:()=>z,hasApiKey:()=>pc,getApiKey:()=>lc,getApiId:()=>Di,ensureTakoDir:()=>To,TOOLS_DIR:()=>Ln,TAKO_SERVER:()=>Ce,TAKO_DIR:()=>Q,TAKO_CLI_DIR:()=>mi,TAKO_BUN_DIR:()=>bi,TAKO_BUN_CACHE_DIR:()=>zd,TAKO_BUN_BIN:()=>A,PROXY_BASE_URL:()=>Y,IS_DEV:()=>Ho,CONFIG_PATH:()=>kd});import{homedir as cc}from"os";import{join as _i,resolve as ac}from"path";async function To(){let i=await import("fs/promises");try{await i.mkdir(Q,{recursive:!0}),await i.mkdir(Ln,{recursive:!0})}catch{}}async function z(){await To();try{let i=Bun.file(kd);if(await i.exists()){let o=await i.json();return{...Pe,...o}}}catch{}return{...Pe}}async function K(i){await To(),await Bun.write(kd,JSON.stringify(i,null,2))}async function Ui(i){let n={...await z(),...i};return await K(n),n}async function pc(){return!!(await z()).apiKey}async function lc(){return(await z()).apiKey}async function Di(){return(await z()).apiId}var Q,kd,Ln,mi,bi,A,zd,Ce,Y,Ho,Pe;var C=N(()=>{Q=ac(process.env.TAKO_HOME||_i(cc(),".tako")),kd=_i(Q,"config.json"),Ln=_i(Q,"tools"),mi=_i(Q,"cli"),bi=_i(Q,"bun"),A=_i(bi,"bin",process.platform==="win32"?"bun.exe":"bun"),zd=_i(bi,"install-cache"),Ce=process.env.TAKO_SERVER||"https://tako.shiroha.tech",Y=process.env.PROXY_BASE_URL||"https://tako.shiroha.tech",Ho=process.env.TAKO_DEV==="true"||process.env.TAKO_DEV==="1"||Ce.includes("localhost"),Pe={apiKey:"",apiId:"",installedClients:{}}});import{join as Wn}from"path";function gd(i,o){if(!i.startsWith(Q))throw Error(`\u5B89\u5168\u68C0\u67E5\u5931\u8D25: ${o} \u8DEF\u5F84 "${i}" \u4E0D\u5728 Tako \u76EE\u5F55\u4E0B`)}function Gi(i){let o=Wn(Ln,i);return gd(o,"\u5BA2\u6237\u7AEF\u5B89\u88C5\u76EE\u5F55"),o}async function xo(i){let o=Gi(i.id),n=Wn(o,"node_modules",i.package,"package.json");try{let d=Bun.file(n);if(!await d.exists())return null;let u=(await d.json()).bin;if(!u)return null;let r=null;if(typeof u==="string")r=u;else if(typeof u==="object"&&u[i.command])r=u[i.command];if(!r)return null;let t=Wn(o,"node_modules",i.package,r);return gd(t,"\u5BA2\u6237\u7AEF\u5165\u53E3\u6587\u4EF6"),t}catch{return null}}function wo(i){let o=Gi(i.id),n=Wn(o,"node_modules",".bin",i.command);return gd(n,"\u5BA2\u6237\u7AEF\u53EF\u6267\u884C\u6587\u4EF6"),n}function kn(i,o){let n=i.launchOptions;return typeof n==="function"?n(o):n??[]}function yo(i){$d.set(i.id,i)}function Ie(){return Array.from($d.values())}function oi(i){return $d.get(i)}var $d;var E=N(()=>{C();$d=new Map});var mc,Yi;var Md=N(()=>{/*!
3
+ var{defineProperty:zd,getOwnPropertyNames:ec,getOwnPropertyDescriptor:uc}=Object,rc=Object.prototype.hasOwnProperty;function tc(i){return this[i]}var cc=(i)=>{var o=(Ce??=new WeakMap).get(i),n;if(o)return o;if(o=zd({},"__esModule",{value:!0}),i&&typeof i==="object"||typeof i==="function"){for(var d of ec(i))if(!rc.call(o,d))zd(o,d,{get:tc.bind(i,d),enumerable:!(n=uc(i,d))||n.enumerable})}return Ce.set(i,o),o},Ce;var ac=(i)=>i;function pc(i,o){this[i]=ac.bind(null,o)}var ii=(i,o)=>{for(var n in o)zd(i,n,{get:o[n],enumerable:!0,configurable:!0,set:pc.bind(o,n)})};var N=(i,o)=>()=>(i&&(o=i(i=0)),o);var $=import.meta.require;var Wn={};ii(Wn,{updateConfig:()=>Ui,saveConfig:()=>K,loadConfig:()=>z,hasApiKey:()=>xc,getApiKey:()=>wc,getApiId:()=>Di,ensureTakoDir:()=>Ho,TOOLS_DIR:()=>Nn,TAKO_SERVER:()=>Qe,TAKO_DIR:()=>Q,TAKO_CLI_DIR:()=>mi,TAKO_BUN_DIR:()=>bi,TAKO_BUN_CACHE_DIR:()=>$d,TAKO_BUN_BIN:()=>Y,PROXY_BASE_URL:()=>A,IS_DEV:()=>Xo,CONFIG_PATH:()=>gd});import{homedir as lc}from"os";import{join as _i,resolve as mc}from"path";async function Ho(){let i=await import("fs/promises");try{await i.mkdir(Q,{recursive:!0}),await i.mkdir(Nn,{recursive:!0})}catch{}}async function z(){await Ho();try{let i=Bun.file(gd);if(await i.exists()){let o=await i.json();return{...Ie,...o}}}catch{}return{...Ie}}async function K(i){await Ho(),await Bun.write(gd,JSON.stringify(i,null,2))}async function Ui(i){let n={...await z(),...i};return await K(n),n}async function xc(){return!!(await z()).apiKey}async function wc(){return(await z()).apiKey}async function Di(){return(await z()).apiId}var Q,gd,Nn,mi,bi,Y,$d,Qe,A,Xo,Ie;var C=N(()=>{Q=mc(process.env.TAKO_HOME||_i(lc(),".tako")),gd=_i(Q,"config.json"),Nn=_i(Q,"tools"),mi=_i(Q,"cli"),bi=_i(Q,"bun"),Y=_i(bi,"bin",process.platform==="win32"?"bun.exe":"bun"),$d=_i(bi,"install-cache"),Qe=process.env.TAKO_SERVER||"https://tako.shiroha.tech",A=process.env.PROXY_BASE_URL||"https://tako.shiroha.tech",Xo=process.env.TAKO_DEV==="true"||process.env.TAKO_DEV==="1"||Qe.includes("localhost"),Ie={apiKey:"",apiId:"",installedClients:{}}});import{join as kn}from"path";function Md(i,o){if(!i.startsWith(Q))throw Error(`\u5B89\u5168\u68C0\u67E5\u5931\u8D25: ${o} \u8DEF\u5F84 "${i}" \u4E0D\u5728 Tako \u76EE\u5F55\u4E0B`)}function Gi(i){let o=kn(Nn,i);return Md(o,"\u5BA2\u6237\u7AEF\u5B89\u88C5\u76EE\u5F55"),o}async function xo(i){let o=Gi(i.id),n=kn(o,"node_modules",i.package,"package.json");try{let d=Bun.file(n);if(!await d.exists())return null;let u=(await d.json()).bin;if(!u)return null;let r=null;if(typeof u==="string")r=u;else if(typeof u==="object"&&u[i.command])r=u[i.command];if(!r)return null;let t=kn(o,"node_modules",i.package,r);return Md(t,"\u5BA2\u6237\u7AEF\u5165\u53E3\u6587\u4EF6"),t}catch{return null}}function wo(i){let o=Gi(i.id),n=kn(o,"node_modules",".bin",i.command);return Md(n,"\u5BA2\u6237\u7AEF\u53EF\u6267\u884C\u6587\u4EF6"),n}function zn(i,o){let n=i.launchOptions;return typeof n==="function"?n(o):n??[]}function yo(i){Gd.set(i.id,i)}function qe(){return Array.from(Gd.values())}function oi(i){return Gd.get(i)}var Gd;var E=N(()=>{C();Gd=new Map});var yc,Ai;var Sd=N(()=>{/*!
4
4
  * Copyright (c) Squirrel Chat et al., All rights reserved.
5
5
  * SPDX-License-Identifier: BSD-3-Clause
6
6
  *
@@ -26,7 +26,7 @@ var{defineProperty:Wd,getOwnPropertyNames:oc,getOwnPropertyDescriptor:nc}=Object
26
26
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27
27
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
28
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
- */mc=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i;Yi=class Yi extends Date{#o=!1;#n=!1;#i=null;constructor(i){let o=!0,n=!0,d="Z";if(typeof i==="string"){let e=i.match(mc);if(e){if(!e[1])o=!1,i=`0000-01-01T${i}`;if(n=!!e[2],n&&i[10]===" "&&(i=i.replace(" ","T")),e[2]&&+e[2]>23)i="";else if(d=e[3]||null,i=i.toUpperCase(),!d&&n)i+="Z"}else i=""}super(i);if(!isNaN(this.getTime()))this.#o=o,this.#n=n,this.#i=d}isDateTime(){return this.#o&&this.#n}isLocal(){return!this.#o||!this.#n||!this.#i}isDate(){return this.#o&&!this.#n}isTime(){return this.#n&&!this.#o}isValid(){return this.#o||this.#n}toISOString(){let i=super.toISOString();if(this.isDate())return i.slice(0,10);if(this.isTime())return i.slice(11,23);if(this.#i===null)return i.slice(0,-1);if(this.#i==="Z")return i;let o=+this.#i.slice(1,3)*60+ +this.#i.slice(4,6);return o=this.#i[0]==="-"?o:-o,new Date(this.getTime()-o*60000).toISOString().slice(0,-1)+this.#i}static wrapAsOffsetDateTime(i,o="Z"){let n=new Yi(i);return n.#i=o,n}static wrapAsLocalDateTime(i){let o=new Yi(i);return o.#i=null,o}static wrapAsLocalDate(i){let o=new Yi(i);return o.#n=!1,o.#i=null,o}static wrapAsLocalTime(i){let o=new Yi(i);return o.#o=!1,o.#i=null,o}}});function xc(i,o){let n=i.slice(0,o).split(/\r\n|\n|\r/g);return[n.length,n.pop().length+1]}function wc(i,o,n){let d=i.split(/\r\n|\n|\r/g),e="",u=(Math.log10(o+1)|0)+1;for(let r=o-1;r<=o+1;r++){let t=d[r-1];if(!t)continue;if(e+=r.toString().padEnd(u," "),e+=": ",e+=t,e+=`
29
+ */yc=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i;Ai=class Ai extends Date{#o=!1;#n=!1;#i=null;constructor(i){let o=!0,n=!0,d="Z";if(typeof i==="string"){let e=i.match(yc);if(e){if(!e[1])o=!1,i=`0000-01-01T${i}`;if(n=!!e[2],n&&i[10]===" "&&(i=i.replace(" ","T")),e[2]&&+e[2]>23)i="";else if(d=e[3]||null,i=i.toUpperCase(),!d&&n)i+="Z"}else i=""}super(i);if(!isNaN(this.getTime()))this.#o=o,this.#n=n,this.#i=d}isDateTime(){return this.#o&&this.#n}isLocal(){return!this.#o||!this.#n||!this.#i}isDate(){return this.#o&&!this.#n}isTime(){return this.#n&&!this.#o}isValid(){return this.#o||this.#n}toISOString(){let i=super.toISOString();if(this.isDate())return i.slice(0,10);if(this.isTime())return i.slice(11,23);if(this.#i===null)return i.slice(0,-1);if(this.#i==="Z")return i;let o=+this.#i.slice(1,3)*60+ +this.#i.slice(4,6);return o=this.#i[0]==="-"?o:-o,new Date(this.getTime()-o*60000).toISOString().slice(0,-1)+this.#i}static wrapAsOffsetDateTime(i,o="Z"){let n=new Ai(i);return n.#i=o,n}static wrapAsLocalDateTime(i){let o=new Ai(i);return o.#i=null,o}static wrapAsLocalDate(i){let o=new Ai(i);return o.#n=!1,o.#i=null,o}static wrapAsLocalTime(i){let o=new Ai(i);return o.#o=!1,o.#i=null,o}}});function sc(i,o){let n=i.slice(0,o).split(/\r\n|\n|\r/g);return[n.length,n.pop().length+1]}function vc(i,o,n){let d=i.split(/\r\n|\n|\r/g),e="",u=(Math.log10(o+1)|0)+1;for(let r=o-1;r<=o+1;r++){let t=d[r-1];if(!t)continue;if(e+=r.toString().padEnd(u," "),e+=": ",e+=t,e+=`
30
30
  `,r===o)e+=" ".repeat(u+n+2),e+=`^
31
31
  `}return e}var G;var ji=N(()=>{/*!
32
32
  * Copyright (c) Squirrel Chat et al., All rights reserved.
@@ -54,14 +54,14 @@ var{defineProperty:Wd,getOwnPropertyNames:oc,getOwnPropertyDescriptor:nc}=Object
54
54
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
55
55
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
56
56
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
57
- */G=class G extends Error{line;column;codeblock;constructor(i,o){let[n,d]=xc(o.toml,o.ptr),e=wc(o.toml,n,d);super(`Invalid TOML document: ${i}
57
+ */G=class G extends Error{line;column;codeblock;constructor(i,o){let[n,d]=sc(o.toml,o.ptr),e=vc(o.toml,n,d);super(`Invalid TOML document: ${i}
58
58
 
59
- ${e}`,o);this.line=n,this.column=d,this.codeblock=e}}});function zn(i,o){let n=i[o++],d=n,e=n==="'",u=n===i[o]&&n===i[o+1];if(u){if(i[o+=2]===`
59
+ ${e}`,o);this.line=n,this.column=d,this.codeblock=e}}});function gn(i,o){let n=i[o++],d=n,e=n==="'",u=n===i[o]&&n===i[o+1];if(u){if(i[o+=2]===`
60
60
  `)o++;else if(i[o]==="\r"&&i[o+1]===`
61
61
  `)o+=2}let r="",t=o,c=0;for(let a=o;a<i.length;a++)if(n=i[a],u&&(n===`
62
62
  `||n==="\r"&&i[a+1]===`
63
63
  `))c=c&&3;else if(n<" "&&n!=="\t"||n==="\x7F")throw new G("control characters are not allowed in strings",{toml:i,ptr:a});else if((!c||c===3)&&n===d&&(!u||i[a+1]===d&&i[a+2]===d)){if(u){if(i[a+3]===d)a++;if(i[a+3]===d)a++}return[c?r:r+i.slice(t,a),a+(u?3:1)]}else if(!c){if(!e&&n==="\\")r+=i.slice(t,t=a),c=1}else if(c===1)if(n==="x"||n==="u"||n==="U"){let p=0,l=n==="x"?2:n==="u"?4:8;for(let x=0;x<l;x++,a++){let w=i.charCodeAt(a+1),y=w>=48&&w<=57?w-48:w>=65&&w<=70?w-65+10:w>=97&&w<=102?w-97+10:-1;if(y<0)throw new G("invalid non-hex character in unicode escape",{toml:i,ptr:a+1});p=p<<4|y}if(p<0||p>1114111||p>=55296&&p<=57343)throw new G("invalid unicode escape",{toml:i,ptr:a});r+=String.fromCodePoint(p),t=a+1,c=0}else if(n===" "||n==="\t")c=2;else{if(n==="b")r+="\b";else if(n==="t")r+="\t";else if(n==="n")r+=`
64
- `;else if(n==="f")r+="\f";else if(n==="r")r+="\r";else if(n==="e")r+="\x1B";else if(n==='"')r+='"';else if(n==="\\")r+="\\";else throw new G("unrecognized escape sequence",{toml:i,ptr:a});t=a+1,c=0}else if(n!==" "&&n!=="\t"){if(c===2)throw new G("invalid escape: only line-ending whitespace may be escaped",{toml:i,ptr:t});c=!e&&n==="\\"?1:0,t=a}throw new G("unfinished string",{toml:i,ptr:o})}function Qe(i,o,n,d){if(i==="true")return!0;if(i==="false")return!1;if(i==="-inf")return-1/0;if(i==="inf"||i==="+inf")return 1/0;if(i==="nan"||i==="+nan"||i==="-nan")return NaN;if(i==="-0")return d?0n:0;let e=yc.test(i);if(e||sc.test(i)){if(fc.test(i))throw new G("leading zeroes are not allowed",{toml:o,ptr:n});i=i.replace(/_/g,"");let r=+i;if(isNaN(r))throw new G("invalid number",{toml:o,ptr:n});if(e){if((e=!Number.isSafeInteger(r))&&!d)throw new G("integer value cannot be represented losslessly",{toml:o,ptr:n});if(e||d===!0)r=BigInt(i)}return r}let u=new Yi(i);if(!u.isValid())throw new G("invalid value",{toml:o,ptr:n});return u}var yc,sc,fc;var Gd=N(()=>{Md();ji();/*!
64
+ `;else if(n==="f")r+="\f";else if(n==="r")r+="\r";else if(n==="e")r+="\x1B";else if(n==='"')r+='"';else if(n==="\\")r+="\\";else throw new G("unrecognized escape sequence",{toml:i,ptr:a});t=a+1,c=0}else if(n!==" "&&n!=="\t"){if(c===2)throw new G("invalid escape: only line-ending whitespace may be escaped",{toml:i,ptr:t});c=!e&&n==="\\"?1:0,t=a}throw new G("unfinished string",{toml:i,ptr:o})}function Oe(i,o,n,d){if(i==="true")return!0;if(i==="false")return!1;if(i==="-inf")return-1/0;if(i==="inf"||i==="+inf")return 1/0;if(i==="nan"||i==="+nan"||i==="-nan")return NaN;if(i==="-0")return d?0n:0;let e=fc.test(i);if(e||hc.test(i)){if(bc.test(i))throw new G("leading zeroes are not allowed",{toml:o,ptr:n});i=i.replace(/_/g,"");let r=+i;if(isNaN(r))throw new G("invalid number",{toml:o,ptr:n});if(e){if((e=!Number.isSafeInteger(r))&&!d)throw new G("integer value cannot be represented losslessly",{toml:o,ptr:n});if(e||d===!0)r=BigInt(i)}return r}let u=new Ai(i);if(!u.isValid())throw new G("invalid value",{toml:o,ptr:n});return u}var fc,hc,bc;var Pd=N(()=>{Sd();ji();/*!
65
65
  * Copyright (c) Squirrel Chat et al., All rights reserved.
66
66
  * SPDX-License-Identifier: BSD-3-Clause
67
67
  *
@@ -87,14 +87,14 @@ ${e}`,o);this.line=n,this.column=d,this.codeblock=e}}});function zn(i,o){let n=i
87
87
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
88
88
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
89
89
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
90
- */yc=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,sc=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,fc=/^[+-]?0[0-9_]/});function gn(i,o=0,n=i.length){let d=i.indexOf(`
90
+ */fc=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,hc=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,bc=/^[+-]?0[0-9_]/});function $n(i,o=0,n=i.length){let d=i.indexOf(`
91
91
  `,o);if(i[d-1]==="\r")d--;return d<=n?d:-1}function so(i,o){for(let n=o;n<i.length;n++){let d=i[n];if(d===`
92
92
  `)return n;if(d==="\r"&&i[n+1]===`
93
93
  `)return n+1;if(d<" "&&d!=="\t"||d==="\x7F")throw new G("control characters are not allowed in comments",{toml:i,ptr:o})}return i.length}function Li(i,o,n,d){let e;while(!0){while((e=i[o])===" "||e==="\t"||!n&&(e===`
94
94
  `||e==="\r"&&i[o+1]===`
95
- `))o++;if(d||e!=="#")break;o=so(i,o)}return o}function qe(i,o,n,d,e=!1){if(!d)return o=gn(i,o),o<0?i.length:o;for(let u=o;u<i.length;u++){let r=i[u];if(r==="#")u=gn(i,u);else if(r===n)return u+1;else if(r===d||e&&(r===`
95
+ `))o++;if(d||e!=="#")break;o=so(i,o)}return o}function Je(i,o,n,d,e=!1){if(!d)return o=$n(i,o),o<0?i.length:o;for(let u=o;u<i.length;u++){let r=i[u];if(r==="#")u=$n(i,u);else if(r===n)return u+1;else if(r===d||e&&(r===`
96
96
  `||r==="\r"&&i[u+1]===`
97
- `))return u}throw new G("cannot find end of structure",{toml:i,ptr:o})}var $n=N(()=>{ji();/*!
97
+ `))return u}throw new G("cannot find end of structure",{toml:i,ptr:o})}var Mn=N(()=>{ji();/*!
98
98
  * Copyright (c) Squirrel Chat et al., All rights reserved.
99
99
  * SPDX-License-Identifier: BSD-3-Clause
100
100
  *
@@ -120,8 +120,8 @@ ${e}`,o);this.line=n,this.column=d,this.codeblock=e}}});function zn(i,o){let n=i
120
120
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
121
121
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
122
122
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
123
- */});function vc(i,o,n){let d=i.slice(o,n),e=d.indexOf("#");if(e>-1)so(i,e),d=d.slice(0,e);return[d.trimEnd(),e]}function Xo(i,o,n,d,e){if(d===0)throw new G("document contains excessively nested structures. aborting.",{toml:i,ptr:o});let u=i[o];if(u==="["||u==="{"){let[c,a]=u==="["?Re(i,o,d,e):Oe(i,o,d,e);if(n){if(a=Li(i,a),i[a]===",")a++;else if(i[a]!==n)throw new G("expected comma or end of structure",{toml:i,ptr:a})}return[c,a]}if(u==='"'||u==="'"){let[c,a]=zn(i,o);if(n){if(a=Li(i,a),i[a]&&i[a]!==","&&i[a]!==n&&i[a]!==`
124
- `&&i[a]!=="\r")throw new G("unexpected character encountered",{toml:i,ptr:a});if(i[a]===",")a++}return[c,a]}let r=qe(i,o,",",n),t=vc(i,o,r-(i[r-1]===","?1:0));if(!t[0])throw new G("incomplete key-value declaration: no value specified",{toml:i,ptr:o});if(n&&t[1]>-1){if(r=Li(i,o+t[1]),i[r]===",")r++}return[Qe(t[0],i,o,e),r]}var Sd=N(()=>{Gd();Pd();$n();ji();/*!
123
+ */});function Lc(i,o,n){let d=i.slice(o,n),e=d.indexOf("#");if(e>-1)so(i,e),d=d.slice(0,e);return[d.trimEnd(),e]}function Zo(i,o,n,d,e){if(d===0)throw new G("document contains excessively nested structures. aborting.",{toml:i,ptr:o});let u=i[o];if(u==="["||u==="{"){let[c,a]=u==="["?Be(i,o,d,e):Re(i,o,d,e);if(n){if(a=Li(i,a),i[a]===",")a++;else if(i[a]!==n)throw new G("expected comma or end of structure",{toml:i,ptr:a})}return[c,a]}if(u==='"'||u==="'"){let[c,a]=gn(i,o);if(n){if(a=Li(i,a),i[a]&&i[a]!==","&&i[a]!==n&&i[a]!==`
124
+ `&&i[a]!=="\r")throw new G("unexpected character encountered",{toml:i,ptr:a});if(i[a]===",")a++}return[c,a]}let r=Je(i,o,",",n),t=Lc(i,o,r-(i[r-1]===","?1:0));if(!t[0])throw new G("incomplete key-value declaration: no value specified",{toml:i,ptr:o});if(n&&t[1]>-1){if(r=Li(i,o+t[1]),i[r]===",")r++}return[Oe(t[0],i,o,e),r]}var Cd=N(()=>{Pd();Id();Mn();ji();/*!
125
125
  * Copyright (c) Squirrel Chat et al., All rights reserved.
126
126
  * SPDX-License-Identifier: BSD-3-Clause
127
127
  *
@@ -147,9 +147,9 @@ ${e}`,o);this.line=n,this.column=d,this.codeblock=e}}});function zn(i,o){let n=i
147
147
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
148
148
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
149
149
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
150
- */});function Mn(i,o,n="="){let d=o-1,e=[],u=i.indexOf(n,o);if(u<0)throw new G("incomplete key-value: cannot find end of key",{toml:i,ptr:o});do{let r=i[o=++d];if(r!==" "&&r!=="\t")if(r==='"'||r==="'"){if(r===i[o+1]&&r===i[o+2])throw new G("multiline strings are not allowed in keys",{toml:i,ptr:o});let[t,c]=zn(i,o);d=i.indexOf(".",c);let a=i.slice(c,d<0||d>u?u:d),p=gn(a);if(p>-1)throw new G("newlines are not allowed in keys",{toml:i,ptr:o+d+p});if(a.trimStart())throw new G("found extra tokens after the string part",{toml:i,ptr:c});if(u<c){if(u=i.indexOf(n,c),u<0)throw new G("incomplete key-value: cannot find end of key",{toml:i,ptr:o})}e.push(t)}else{d=i.indexOf(".",o);let t=i.slice(o,d<0||d>u?u:d);if(!hc.test(t))throw new G("only letter, numbers, dashes and underscores are allowed in keys",{toml:i,ptr:o});e.push(t.trimEnd())}}while(d+1&&d<u);return[e,Li(i,u+1,!0,!0)]}function Oe(i,o,n,d){let e={},u=new Set,r;o++;while((r=i[o++])!=="}"&&r)if(r===",")throw new G("expected value, found comma",{toml:i,ptr:o-1});else if(r==="#")o=so(i,o);else if(r!==" "&&r!=="\t"&&r!==`
151
- `&&r!=="\r"){let t,c=e,a=!1,[p,l]=Mn(i,o-1);for(let y=0;y<p.length;y++){if(y)c=a?c[t]:c[t]={};if(t=p[y],(a=Object.hasOwn(c,t))&&(typeof c[t]!=="object"||u.has(c[t])))throw new G("trying to redefine an already defined value",{toml:i,ptr:o});if(!a&&t==="__proto__")Object.defineProperty(c,t,{enumerable:!0,configurable:!0,writable:!0})}if(a)throw new G("trying to redefine an already defined value",{toml:i,ptr:o});let[x,w]=Xo(i,l,"}",n-1,d);u.add(x),c[t]=x,o=w}if(!r)throw new G("unfinished table encountered",{toml:i,ptr:o});return[e,o]}function Re(i,o,n,d){let e=[],u;o++;while((u=i[o++])!=="]"&&u)if(u===",")throw new G("expected value, found comma",{toml:i,ptr:o-1});else if(u==="#")o=so(i,o);else if(u!==" "&&u!=="\t"&&u!==`
152
- `&&u!=="\r"){let r=Xo(i,o-1,"]",n-1,d);e.push(r[0]),o=r[1]}if(!u)throw new G("unfinished array encountered",{toml:i,ptr:o});return[e,o]}var hc;var Pd=N(()=>{Gd();Sd();$n();ji();/*!
150
+ */});function Gn(i,o,n="="){let d=o-1,e=[],u=i.indexOf(n,o);if(u<0)throw new G("incomplete key-value: cannot find end of key",{toml:i,ptr:o});do{let r=i[o=++d];if(r!==" "&&r!=="\t")if(r==='"'||r==="'"){if(r===i[o+1]&&r===i[o+2])throw new G("multiline strings are not allowed in keys",{toml:i,ptr:o});let[t,c]=gn(i,o);d=i.indexOf(".",c);let a=i.slice(c,d<0||d>u?u:d),p=$n(a);if(p>-1)throw new G("newlines are not allowed in keys",{toml:i,ptr:o+d+p});if(a.trimStart())throw new G("found extra tokens after the string part",{toml:i,ptr:c});if(u<c){if(u=i.indexOf(n,c),u<0)throw new G("incomplete key-value: cannot find end of key",{toml:i,ptr:o})}e.push(t)}else{d=i.indexOf(".",o);let t=i.slice(o,d<0||d>u?u:d);if(!Nc.test(t))throw new G("only letter, numbers, dashes and underscores are allowed in keys",{toml:i,ptr:o});e.push(t.trimEnd())}}while(d+1&&d<u);return[e,Li(i,u+1,!0,!0)]}function Re(i,o,n,d){let e={},u=new Set,r;o++;while((r=i[o++])!=="}"&&r)if(r===",")throw new G("expected value, found comma",{toml:i,ptr:o-1});else if(r==="#")o=so(i,o);else if(r!==" "&&r!=="\t"&&r!==`
151
+ `&&r!=="\r"){let t,c=e,a=!1,[p,l]=Gn(i,o-1);for(let y=0;y<p.length;y++){if(y)c=a?c[t]:c[t]={};if(t=p[y],(a=Object.hasOwn(c,t))&&(typeof c[t]!=="object"||u.has(c[t])))throw new G("trying to redefine an already defined value",{toml:i,ptr:o});if(!a&&t==="__proto__")Object.defineProperty(c,t,{enumerable:!0,configurable:!0,writable:!0})}if(a)throw new G("trying to redefine an already defined value",{toml:i,ptr:o});let[x,w]=Zo(i,l,"}",n-1,d);u.add(x),c[t]=x,o=w}if(!r)throw new G("unfinished table encountered",{toml:i,ptr:o});return[e,o]}function Be(i,o,n,d){let e=[],u;o++;while((u=i[o++])!=="]"&&u)if(u===",")throw new G("expected value, found comma",{toml:i,ptr:o-1});else if(u==="#")o=so(i,o);else if(u!==" "&&u!=="\t"&&u!==`
152
+ `&&u!=="\r"){let r=Zo(i,o-1,"]",n-1,d);e.push(r[0]),o=r[1]}if(!u)throw new G("unfinished array encountered",{toml:i,ptr:o});return[e,o]}var Nc;var Id=N(()=>{Pd();Cd();Mn();ji();/*!
153
153
  * Copyright (c) Squirrel Chat et al., All rights reserved.
154
154
  * SPDX-License-Identifier: BSD-3-Clause
155
155
  *
@@ -175,8 +175,8 @@ ${e}`,o);this.line=n,this.column=d,this.codeblock=e}}});function zn(i,o){let n=i
175
175
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
176
176
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
177
177
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
178
- */hc=/^[a-zA-Z0-9-_]+[ \t]*$/});function Je(i,o,n,d){let e=o,u=n,r,t=!1,c;for(let a=0;a<i.length;a++){if(a){if(e=t?e[r]:e[r]={},u=(c=u[r]).c,d===0&&(c.t===1||c.t===2))return null;if(c.t===2){let p=e.length-1;e=e[p],u=u[p].c}}if(r=i[a],(t=Object.hasOwn(e,r))&&u[r]?.t===0&&u[r]?.d)return null;if(!t){if(r==="__proto__")Object.defineProperty(e,r,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(u,r,{enumerable:!0,configurable:!0,writable:!0});u[r]={t:a<i.length-1&&d===2?3:d,d:!1,i:0,c:{}}}}if(c=u[r],c.t!==d&&!(d===1&&c.t===3))return null;if(d===2){if(!c.d)c.d=!0,e[r]=[];e[r].push(e={}),c.c[c.i++]=c={t:1,d:!1,i:0,c:{}}}if(c.d)return null;if(c.d=!0,d===1)e=t?e[r]:e[r]={};else if(d===0&&t)return null;return[r,e,c.c]}function Cd(i,{maxDepth:o=1000,integersAsBigInt:n}={}){let d={},e={},u=d,r=e;for(let t=Li(i,0);t<i.length;){if(i[t]==="["){let c=i[++t]==="[",a=Mn(i,t+=+c,"]");if(c){if(i[a[1]-1]!=="]")throw new G("expected end of table declaration",{toml:i,ptr:a[1]-1});a[1]++}let p=Je(a[0],d,e,c?2:1);if(!p)throw new G("trying to redefine an already defined table or value",{toml:i,ptr:t});r=p[2],u=p[1],t=a[1]}else{let c=Mn(i,t),a=Je(c[0],u,r,0);if(!a)throw new G("trying to redefine an already defined table or value",{toml:i,ptr:t});let p=Xo(i,c[1],void 0,o,n);a[1][a[0]]=p[0],t=p[1]}if(t=Li(i,t,!0),i[t]&&i[t]!==`
179
- `&&i[t]!=="\r")throw new G("each key-value declaration must be followed by an end-of-line",{toml:i,ptr:t});t=Li(i,t)}return d}var Be=N(()=>{Pd();Sd();$n();ji();/*!
178
+ */Nc=/^[a-zA-Z0-9-_]+[ \t]*$/});function Ye(i,o,n,d){let e=o,u=n,r,t=!1,c;for(let a=0;a<i.length;a++){if(a){if(e=t?e[r]:e[r]={},u=(c=u[r]).c,d===0&&(c.t===1||c.t===2))return null;if(c.t===2){let p=e.length-1;e=e[p],u=u[p].c}}if(r=i[a],(t=Object.hasOwn(e,r))&&u[r]?.t===0&&u[r]?.d)return null;if(!t){if(r==="__proto__")Object.defineProperty(e,r,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(u,r,{enumerable:!0,configurable:!0,writable:!0});u[r]={t:a<i.length-1&&d===2?3:d,d:!1,i:0,c:{}}}}if(c=u[r],c.t!==d&&!(d===1&&c.t===3))return null;if(d===2){if(!c.d)c.d=!0,e[r]=[];e[r].push(e={}),c.c[c.i++]=c={t:1,d:!1,i:0,c:{}}}if(c.d)return null;if(c.d=!0,d===1)e=t?e[r]:e[r]={};else if(d===0&&t)return null;return[r,e,c.c]}function Qd(i,{maxDepth:o=1000,integersAsBigInt:n}={}){let d={},e={},u=d,r=e;for(let t=Li(i,0);t<i.length;){if(i[t]==="["){let c=i[++t]==="[",a=Gn(i,t+=+c,"]");if(c){if(i[a[1]-1]!=="]")throw new G("expected end of table declaration",{toml:i,ptr:a[1]-1});a[1]++}let p=Ye(a[0],d,e,c?2:1);if(!p)throw new G("trying to redefine an already defined table or value",{toml:i,ptr:t});r=p[2],u=p[1],t=a[1]}else{let c=Gn(i,t),a=Ye(c[0],u,r,0);if(!a)throw new G("trying to redefine an already defined table or value",{toml:i,ptr:t});let p=Zo(i,c[1],void 0,o,n);a[1][a[0]]=p[0],t=p[1]}if(t=Li(i,t,!0),i[t]&&i[t]!==`
179
+ `&&i[t]!=="\r")throw new G("each key-value declaration must be followed by an end-of-line",{toml:i,ptr:t});t=Li(i,t)}return d}var Ae=N(()=>{Id();Cd();Mn();ji();/*!
180
180
  * Copyright (c) Squirrel Chat et al., All rights reserved.
181
181
  * SPDX-License-Identifier: BSD-3-Clause
182
182
  *
@@ -202,16 +202,16 @@ ${e}`,o);this.line=n,this.column=d,this.codeblock=e}}});function zn(i,o){let n=i
202
202
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
203
203
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
204
204
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
205
- */});function Ko(i){let o=typeof i;if(o==="object"){if(Array.isArray(i))return"array";if(i instanceof Date)return"date"}return o}function bc(i){for(let o=0;o<i.length;o++)if(Ko(i[o])!=="object")return!1;return i.length!=0}function Id(i){return JSON.stringify(i).replace(/\x7f/g,"\\u007f")}function Qd(i,o,n,d){if(n===0)throw Error("Could not stringify the object: maximum object depth exceeded");if(o==="number"){if(isNaN(i))return"nan";if(i===1/0)return"inf";if(i===-1/0)return"-inf";if(Number.isInteger(i)&&(d||!Number.isSafeInteger(i)))return i.toFixed(1);return i.toString()}if(o==="bigint"||o==="boolean")return i.toString();if(o==="string")return Id(i);if(o==="date"){if(isNaN(i.getTime()))throw TypeError("cannot serialize invalid date");return i.toISOString()}if(o==="object")return Lc(i,n,d);if(o==="array")return Nc(i,n,d)}function Lc(i,o,n){let d=Object.keys(i);if(d.length===0)return"{}";let e="{ ";for(let u=0;u<d.length;u++){let r=d[u];if(u)e+=", ";e+=Ae.test(r)?r:Id(r),e+=" = ",e+=Qd(i[r],Ko(i[r]),o-1,n)}return e+" }"}function Nc(i,o,n){if(i.length===0)return"[]";let d="[ ";for(let e=0;e<i.length;e++){if(e)d+=", ";if(i[e]===null||i[e]===void 0)throw TypeError("arrays cannot contain null or undefined values");d+=Qd(i[e],Ko(i[e]),o-1,n)}return d+" ]"}function Wc(i,o,n,d){if(n===0)throw Error("Could not stringify the object: maximum object depth exceeded");let e="";for(let u=0;u<i.length;u++)e+=`${e&&`
205
+ */});function Ko(i){let o=typeof i;if(o==="object"){if(Array.isArray(i))return"array";if(i instanceof Date)return"date"}return o}function Wc(i){for(let o=0;o<i.length;o++)if(Ko(i[o])!=="object")return!1;return i.length!=0}function qd(i){return JSON.stringify(i).replace(/\x7f/g,"\\u007f")}function Od(i,o,n,d){if(n===0)throw Error("Could not stringify the object: maximum object depth exceeded");if(o==="number"){if(isNaN(i))return"nan";if(i===1/0)return"inf";if(i===-1/0)return"-inf";if(Number.isInteger(i)&&(d||!Number.isSafeInteger(i)))return i.toFixed(1);return i.toString()}if(o==="bigint"||o==="boolean")return i.toString();if(o==="string")return qd(i);if(o==="date"){if(isNaN(i.getTime()))throw TypeError("cannot serialize invalid date");return i.toISOString()}if(o==="object")return kc(i,n,d);if(o==="array")return zc(i,n,d)}function kc(i,o,n){let d=Object.keys(i);if(d.length===0)return"{}";let e="{ ";for(let u=0;u<d.length;u++){let r=d[u];if(u)e+=", ";e+=Xe.test(r)?r:qd(r),e+=" = ",e+=Od(i[r],Ko(i[r]),o-1,n)}return e+" }"}function zc(i,o,n){if(i.length===0)return"[]";let d="[ ";for(let e=0;e<i.length;e++){if(e)d+=", ";if(i[e]===null||i[e]===void 0)throw TypeError("arrays cannot contain null or undefined values");d+=Od(i[e],Ko(i[e]),o-1,n)}return d+" ]"}function gc(i,o,n,d){if(n===0)throw Error("Could not stringify the object: maximum object depth exceeded");let e="";for(let u=0;u<i.length;u++)e+=`${e&&`
206
206
  `}[[${o}]]
207
- `,e+=qd(0,i[u],o,n,d);return e}function qd(i,o,n,d,e){if(d===0)throw Error("Could not stringify the object: maximum object depth exceeded");let u="",r="",t=Object.keys(o);for(let c=0;c<t.length;c++){let a=t[c];if(o[a]!==null&&o[a]!==void 0){let p=Ko(o[a]);if(p==="symbol"||p==="function")throw TypeError(`cannot serialize values of type '${p}'`);let l=Ae.test(a)?a:Id(a);if(p==="array"&&bc(o[a]))r+=(r&&`
208
- `)+Wc(o[a],n?`${n}.${l}`:l,d-1,e);else if(p==="object"){let x=n?`${n}.${l}`:l;r+=(r&&`
209
- `)+qd(x,o[a],x,d-1,e)}else u+=l,u+=" = ",u+=Qd(o[a],p,d,e),u+=`
207
+ `,e+=Jd(0,i[u],o,n,d);return e}function Jd(i,o,n,d,e){if(d===0)throw Error("Could not stringify the object: maximum object depth exceeded");let u="",r="",t=Object.keys(o);for(let c=0;c<t.length;c++){let a=t[c];if(o[a]!==null&&o[a]!==void 0){let p=Ko(o[a]);if(p==="symbol"||p==="function")throw TypeError(`cannot serialize values of type '${p}'`);let l=Xe.test(a)?a:qd(a);if(p==="array"&&Wc(o[a]))r+=(r&&`
208
+ `)+gc(o[a],n?`${n}.${l}`:l,d-1,e);else if(p==="object"){let x=n?`${n}.${l}`:l;r+=(r&&`
209
+ `)+Jd(x,o[a],x,d-1,e)}else u+=l,u+=" = ",u+=Od(o[a],p,d,e),u+=`
210
210
  `}}if(i&&(u||!r))u=u?`[${i}]
211
211
  ${u}`:`[${i}]`;return u&&r?`${u}
212
- ${r}`:u||r}function Od(i,{maxDepth:o=1000,numbersAsFloat:n=!1}={}){if(Ko(i)!=="object")throw TypeError("stringify can only be called with an object");let d=qd(0,i,"",o,n);if(d[d.length-1]!==`
212
+ ${r}`:u||r}function Rd(i,{maxDepth:o=1000,numbersAsFloat:n=!1}={}){if(Ko(i)!=="object")throw TypeError("stringify can only be called with an object");let d=Jd(0,i,"",o,n);if(d[d.length-1]!==`
213
213
  `)return d+`
214
- `;return d}var Ae;var Ye=N(()=>{/*!
214
+ `;return d}var Xe;var He=N(()=>{/*!
215
215
  * Copyright (c) Squirrel Chat et al., All rights reserved.
216
216
  * SPDX-License-Identifier: BSD-3-Clause
217
217
  *
@@ -237,7 +237,7 @@ ${r}`:u||r}function Od(i,{maxDepth:o=1000,numbersAsFloat:n=!1}={}){if(Ko(i)!=="o
237
237
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
238
238
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
239
239
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
240
- */Ae=/^[a-z0-9-_]+$/i});var He=N(()=>{Be();Ye();Md();ji();/*!
240
+ */Xe=/^[a-z0-9-_]+$/i});var Ze=N(()=>{Ae();He();Sd();ji();/*!
241
241
  * Copyright (c) Squirrel Chat et al., All rights reserved.
242
242
  * SPDX-License-Identifier: BSD-3-Clause
243
243
  *
@@ -263,64 +263,64 @@ ${r}`:u||r}function Od(i,{maxDepth:o=1000,numbersAsFloat:n=!1}={}){if(Ko(i)!=="o
263
263
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
264
264
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
265
265
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
266
- */});function kc(i){let o=[];for(let[n,d]of Object.entries(i)){if(!d?.models)continue;for(let[e,u]of Object.entries(d.models)){let r=u?.limit?.context;if(typeof r!=="number"||r<=0)continue;o.push({id:e,displayName:u.name||e,provider:n,contextWindow:r,outputLimit:typeof u.limit?.output==="number"?u.limit.output:void 0})}}return o}async function Te(){let i=await fetch("https://models.dev/api.json",{signal:AbortSignal.timeout(1e4)});if(!i.ok)throw Error(`models.dev http ${i.status}`);let o=await i.json();return kc(o)}var ci;var Gn=N(()=>{ci=[{id:"claude-3-sonnet-20240229",displayName:"Claude Sonnet 3",provider:"anthropic",contextWindow:200000,outputLimit:4096},{id:"claude-haiku-4-5",displayName:"Claude Haiku 4.5 (latest)",provider:"anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-opus-4-5-20251101",displayName:"Claude Opus 4.5",provider:"anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-3-opus-20240229",displayName:"Claude Opus 3",provider:"anthropic",contextWindow:200000,outputLimit:4096},{id:"claude-3-5-haiku-20241022",displayName:"Claude Haiku 3.5",provider:"anthropic",contextWindow:200000,outputLimit:8192},{id:"claude-3-5-sonnet-20241022",displayName:"Claude Sonnet 3.5 v2",provider:"anthropic",contextWindow:200000,outputLimit:8192},{id:"claude-sonnet-4-6",displayName:"Claude Sonnet 4.6",provider:"anthropic",contextWindow:1e6,outputLimit:64000},{id:"claude-opus-4-0",displayName:"Claude Opus 4 (latest)",provider:"anthropic",contextWindow:200000,outputLimit:32000},{id:"claude-opus-4-7",displayName:"Claude Opus 4.7",provider:"anthropic",contextWindow:1e6,outputLimit:128000},{id:"claude-3-haiku-20240307",displayName:"Claude Haiku 3",provider:"anthropic",contextWindow:200000,outputLimit:4096},{id:"claude-sonnet-4-5-20250929",displayName:"Claude Sonnet 4.5",provider:"anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-3-5-haiku-latest",displayName:"Claude Haiku 3.5 (latest)",provider:"anthropic",contextWindow:200000,outputLimit:8192},{id:"claude-opus-4-1",displayName:"Claude Opus 4.1 (latest)",provider:"anthropic",contextWindow:200000,outputLimit:32000},{id:"claude-sonnet-4-0",displayName:"Claude Sonnet 4 (latest)",provider:"anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-3-5-sonnet-20240620",displayName:"Claude Sonnet 3.5",provider:"anthropic",contextWindow:200000,outputLimit:8192},{id:"claude-opus-4-5",displayName:"Claude Opus 4.5 (latest)",provider:"anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-opus-4-1-20250805",displayName:"Claude Opus 4.1",provider:"anthropic",contextWindow:200000,outputLimit:32000},{id:"claude-haiku-4-5-20251001",displayName:"Claude Haiku 4.5",provider:"anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-sonnet-4-20250514",displayName:"Claude Sonnet 4",provider:"anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-opus-4-6",displayName:"Claude Opus 4.6",provider:"anthropic",contextWindow:1e6,outputLimit:128000},{id:"claude-3-7-sonnet-20250219",displayName:"Claude Sonnet 3.7",provider:"anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-sonnet-4-5",displayName:"Claude Sonnet 4.5 (latest)",provider:"anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-opus-4-20250514",displayName:"Claude Opus 4",provider:"anthropic",contextWindow:200000,outputLimit:32000},{id:"gpt-5.1-codex-max",displayName:"GPT-5.1 Codex Max",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-4o-2024-05-13",displayName:"GPT-4o (2024-05-13)",provider:"openai",contextWindow:128000,outputLimit:4096},{id:"o1-mini",displayName:"o1-mini",provider:"openai",contextWindow:128000,outputLimit:65536},{id:"gpt-5.2-pro",displayName:"GPT-5.2 Pro",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"text-embedding-3-large",displayName:"text-embedding-3-large",provider:"openai",contextWindow:8191,outputLimit:3072},{id:"gpt-5.3-chat-latest",displayName:"GPT-5.3 Chat (latest)",provider:"openai",contextWindow:128000,outputLimit:16384},{id:"gpt-5.5",displayName:"GPT-5.5",provider:"openai",contextWindow:1050000,outputLimit:130000},{id:"gpt-5-mini",displayName:"GPT-5 Mini",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-5-nano",displayName:"GPT-5 Nano",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-5.3-codex",displayName:"GPT-5.3 Codex",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-4-turbo",displayName:"GPT-4 Turbo",provider:"openai",contextWindow:128000,outputLimit:4096},{id:"text-embedding-ada-002",displayName:"text-embedding-ada-002",provider:"openai",contextWindow:8192,outputLimit:1536},{id:"gpt-5.2",displayName:"GPT-5.2",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"o3-pro",displayName:"o3-pro",provider:"openai",contextWindow:200000,outputLimit:1e5},{id:"gpt-4o-mini",displayName:"GPT-4o mini",provider:"openai",contextWindow:128000,outputLimit:16384},{id:"o4-mini-deep-research",displayName:"o4-mini-deep-research",provider:"openai",contextWindow:200000,outputLimit:1e5},{id:"gpt-5.4-mini",displayName:"GPT-5.4 mini",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"o4-mini",displayName:"o4-mini",provider:"openai",contextWindow:200000,outputLimit:1e5},{id:"gpt-5.4-nano",displayName:"GPT-5.4 nano",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-5.2-codex",displayName:"GPT-5.2 Codex",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-5.2-chat-latest",displayName:"GPT-5.2 Chat",provider:"openai",contextWindow:128000,outputLimit:16384},{id:"gpt-5.1-codex-mini",displayName:"GPT-5.1 Codex mini",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"o1-preview",displayName:"o1-preview",provider:"openai",contextWindow:128000,outputLimit:32768},{id:"gpt-4o-2024-08-06",displayName:"GPT-4o (2024-08-06)",provider:"openai",contextWindow:128000,outputLimit:16384},{id:"gpt-5.1",displayName:"GPT-5.1",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"o1",displayName:"o1",provider:"openai",contextWindow:200000,outputLimit:1e5},{id:"gpt-5.4-pro",displayName:"GPT-5.4 Pro",provider:"openai",contextWindow:1050000,outputLimit:128000},{id:"gpt-3.5-turbo",displayName:"GPT-3.5-turbo",provider:"openai",contextWindow:16385,outputLimit:4096},{id:"o3-deep-research",displayName:"o3-deep-research",provider:"openai",contextWindow:200000,outputLimit:1e5},{id:"o3-mini",displayName:"o3-mini",provider:"openai",contextWindow:200000,outputLimit:1e5},{id:"text-embedding-3-small",displayName:"text-embedding-3-small",provider:"openai",contextWindow:8191,outputLimit:1536},{id:"o1-pro",displayName:"o1-pro",provider:"openai",contextWindow:200000,outputLimit:1e5},{id:"gpt-4",displayName:"GPT-4",provider:"openai",contextWindow:8192,outputLimit:8192},{id:"gpt-5-codex",displayName:"GPT-5-Codex",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-5.4",displayName:"GPT-5.4",provider:"openai",contextWindow:1050000,outputLimit:128000},{id:"gpt-5.1-chat-latest",displayName:"GPT-5.1 Chat",provider:"openai",contextWindow:128000,outputLimit:16384},{id:"gpt-5.3-codex-spark",displayName:"GPT-5.3 Codex Spark",provider:"openai",contextWindow:128000,outputLimit:32000},{id:"gpt-4.1-nano",displayName:"GPT-4.1 nano",provider:"openai",contextWindow:1047576,outputLimit:32768},{id:"o3",displayName:"o3",provider:"openai",contextWindow:200000,outputLimit:1e5},{id:"gpt-5-pro",displayName:"GPT-5 Pro",provider:"openai",contextWindow:400000,outputLimit:272000},{id:"gpt-4o",displayName:"GPT-4o",provider:"openai",contextWindow:128000,outputLimit:16384},{id:"gpt-5",displayName:"GPT-5",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-5-chat-latest",displayName:"GPT-5 Chat (latest)",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-4.1",displayName:"GPT-4.1",provider:"openai",contextWindow:1047576,outputLimit:32768},{id:"gpt-4.1-mini",displayName:"GPT-4.1 mini",provider:"openai",contextWindow:1047576,outputLimit:32768},{id:"gpt-5.1-codex",displayName:"GPT-5.1 Codex",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-4o-2024-11-20",displayName:"GPT-4o (2024-11-20)",provider:"openai",contextWindow:128000,outputLimit:16384},{id:"gemini-flash-lite-latest",displayName:"Gemini Flash-Lite Latest",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-2.5-pro-preview-05-06",displayName:"Gemini 2.5 Pro Preview 05-06",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-live-2.5-flash-preview-native-audio",displayName:"Gemini Live 2.5 Flash Preview Native Audio",provider:"google",contextWindow:131072,outputLimit:65536},{id:"gemini-3.1-pro-preview-customtools",displayName:"Gemini 3.1 Pro Preview Custom Tools",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-2.5-flash-lite-preview-09-2025",displayName:"Gemini 2.5 Flash Lite Preview 09-25",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-1.5-flash",displayName:"Gemini 1.5 Flash",provider:"google",contextWindow:1e6,outputLimit:8192},{id:"gemini-1.5-pro",displayName:"Gemini 1.5 Pro",provider:"google",contextWindow:1e6,outputLimit:8192},{id:"gemma-3n-e4b-it",displayName:"Gemma 3n 4B",provider:"google",contextWindow:8192,outputLimit:2000},{id:"gemini-3.1-flash-lite-preview",displayName:"Gemini 3.1 Flash Lite Preview",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-3.1-pro-preview",displayName:"Gemini 3.1 Pro Preview",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-2.0-flash",displayName:"Gemini 2.0 Flash",provider:"google",contextWindow:1048576,outputLimit:8192},{id:"gemini-3-flash-preview",displayName:"Gemini 3 Flash Preview",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-2.5-flash-preview-tts",displayName:"Gemini 2.5 Flash Preview TTS",provider:"google",contextWindow:8000,outputLimit:16000},{id:"gemini-3-pro-preview",displayName:"Gemini 3 Pro Preview",provider:"google",contextWindow:1e6,outputLimit:64000},{id:"gemini-2.5-flash-preview-05-20",displayName:"Gemini 2.5 Flash Preview 05-20",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-embedding-001",displayName:"Gemini Embedding 001",provider:"google",contextWindow:2048,outputLimit:3072},{id:"gemini-2.5-pro",displayName:"Gemini 2.5 Pro",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-flash-latest",displayName:"Gemini Flash Latest",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemma-4-31b-it",displayName:"Gemma 4 31B",provider:"google",contextWindow:256000,outputLimit:8192},{id:"gemini-2.5-pro-preview-06-05",displayName:"Gemini 2.5 Pro Preview 06-05",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-2.5-flash-image",displayName:"Gemini 2.5 Flash Image",provider:"google",contextWindow:32768,outputLimit:32768},{id:"gemini-2.5-flash-lite-preview-06-17",displayName:"Gemini 2.5 Flash Lite Preview 06-17",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemma-3-12b-it",displayName:"Gemma 3 12B",provider:"google",contextWindow:32768,outputLimit:8192},{id:"gemini-2.5-flash",displayName:"Gemini 2.5 Flash",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemma-3n-e2b-it",displayName:"Gemma 3n 2B",provider:"google",contextWindow:8192,outputLimit:2000},{id:"gemini-3.1-flash-image-preview",displayName:"Gemini 3.1 Flash Image (Preview)",provider:"google",contextWindow:131072,outputLimit:32768},{id:"gemma-3-4b-it",displayName:"Gemma 3 4B",provider:"google",contextWindow:32768,outputLimit:8192},{id:"gemini-2.5-flash-preview-04-17",displayName:"Gemini 2.5 Flash Preview 04-17",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-2.5-pro-preview-tts",displayName:"Gemini 2.5 Pro Preview TTS",provider:"google",contextWindow:8000,outputLimit:16000},{id:"gemini-2.5-flash-preview-09-2025",displayName:"Gemini 2.5 Flash Preview 09-25",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemma-3-27b-it",displayName:"Gemma 3 27B",provider:"google",contextWindow:131072,outputLimit:8192},{id:"gemma-4-26b-a4b-it",displayName:"Gemma 4 26B",provider:"google",contextWindow:256000,outputLimit:8192},{id:"gemini-2.5-flash-lite",displayName:"Gemini 2.5 Flash Lite",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-2.5-flash-image-preview",displayName:"Gemini 2.5 Flash Image (Preview)",provider:"google",contextWindow:32768,outputLimit:32768},{id:"gemini-1.5-flash-8b",displayName:"Gemini 1.5 Flash-8B",provider:"google",contextWindow:1e6,outputLimit:8192},{id:"gemini-live-2.5-flash",displayName:"Gemini Live 2.5 Flash",provider:"google",contextWindow:128000,outputLimit:8000},{id:"gemini-2.0-flash-lite",displayName:"Gemini 2.0 Flash Lite",provider:"google",contextWindow:1048576,outputLimit:8192},{id:"claude-sonnet-4-6@default",displayName:"Claude Sonnet 4.6",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-haiku-4-5@20251001",displayName:"Claude Haiku 4.5",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-3-5-haiku@20241022",displayName:"Claude Haiku 3.5",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:8192},{id:"claude-3-5-sonnet@20241022",displayName:"Claude Sonnet 3.5 v2",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:8192},{id:"claude-opus-4-1@20250805",displayName:"Claude Opus 4.1",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:32000},{id:"claude-sonnet-4@20250514",displayName:"Claude Sonnet 4",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-3-7-sonnet@20250219",displayName:"Claude Sonnet 3.7",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-opus-4@20250514",displayName:"Claude Opus 4",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:32000},{id:"claude-opus-4-5@20251101",displayName:"Claude Opus 4.5",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-sonnet-4-5@20250929",displayName:"Claude Sonnet 4.5",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-opus-4-6@default",displayName:"Claude Opus 4.6",provider:"google-vertex-anthropic",contextWindow:1e6,outputLimit:128000},{id:"claude-opus-4-7@default",displayName:"Claude Opus 4.7",provider:"google-vertex-anthropic",contextWindow:1e6,outputLimit:128000},{id:"grok-2-1212",displayName:"Grok 2 (1212)",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-vision-beta",displayName:"Grok Vision Beta",provider:"xai",contextWindow:8192,outputLimit:4096},{id:"grok-3-mini-fast",displayName:"Grok 3 Mini Fast",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-3-mini-latest",displayName:"Grok 3 Mini Latest",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-3-fast",displayName:"Grok 3 Fast",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-2-vision-latest",displayName:"Grok 2 Vision Latest",provider:"xai",contextWindow:8192,outputLimit:4096},{id:"grok-4.20-0309-reasoning",displayName:"Grok 4.20 (Reasoning)",provider:"xai",contextWindow:2000000,outputLimit:30000},{id:"grok-4-1-fast-non-reasoning",displayName:"Grok 4.1 Fast (Non-Reasoning)",provider:"xai",contextWindow:2000000,outputLimit:30000},{id:"grok-3-mini-fast-latest",displayName:"Grok 3 Mini Fast Latest",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-4-fast",displayName:"Grok 4 Fast",provider:"xai",contextWindow:2000000,outputLimit:30000},{id:"grok-3-latest",displayName:"Grok 3 Latest",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-2",displayName:"Grok 2",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-code-fast-1",displayName:"Grok Code Fast 1",provider:"xai",contextWindow:256000,outputLimit:1e4},{id:"grok-4.20-0309-non-reasoning",displayName:"Grok 4.20 (Non-Reasoning)",provider:"xai",contextWindow:2000000,outputLimit:30000},{id:"grok-3-fast-latest",displayName:"Grok 3 Fast Latest",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-4.20-multi-agent-0309",displayName:"Grok 4.20 Multi-Agent",provider:"xai",contextWindow:2000000,outputLimit:30000},{id:"grok-4",displayName:"Grok 4",provider:"xai",contextWindow:256000,outputLimit:64000},{id:"grok-2-latest",displayName:"Grok 2 Latest",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-beta",displayName:"Grok Beta",provider:"xai",contextWindow:131072,outputLimit:4096},{id:"grok-2-vision",displayName:"Grok 2 Vision",provider:"xai",contextWindow:8192,outputLimit:4096},{id:"grok-4-1-fast",displayName:"Grok 4.1 Fast",provider:"xai",contextWindow:2000000,outputLimit:30000},{id:"grok-3-mini",displayName:"Grok 3 Mini",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-2-vision-1212",displayName:"Grok 2 Vision (1212)",provider:"xai",contextWindow:8192,outputLimit:4096},{id:"grok-3",displayName:"Grok 3",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-4-fast-non-reasoning",displayName:"Grok 4 Fast (Non-Reasoning)",provider:"xai",contextWindow:2000000,outputLimit:30000},{id:"deepseek-chat",displayName:"DeepSeek Chat",provider:"deepseek",contextWindow:1e6,outputLimit:384000},{id:"deepseek-reasoner",displayName:"DeepSeek Reasoner",provider:"deepseek",contextWindow:1e6,outputLimit:384000},{id:"deepseek-v4-flash",displayName:"DeepSeek V4 Flash",provider:"deepseek",contextWindow:1e6,outputLimit:384000},{id:"deepseek-v4-pro",displayName:"DeepSeek V4 Pro",provider:"deepseek",contextWindow:1e6,outputLimit:384000},{id:"mimo-v2.5-pro",displayName:"MiMo v2.5 Pro",provider:"xiaomi",contextWindow:1e6,outputLimit:64000},{id:"kimi-k2-0905-preview",displayName:"Kimi K2 0905",provider:"moonshotai",contextWindow:262144,outputLimit:262144},{id:"kimi-k2.5",displayName:"Kimi K2.5",provider:"moonshotai",contextWindow:262144,outputLimit:262144},{id:"kimi-k2-thinking-turbo",displayName:"Kimi K2 Thinking Turbo",provider:"moonshotai",contextWindow:262144,outputLimit:262144},{id:"kimi-k2.6",displayName:"Kimi K2.6",provider:"moonshotai",contextWindow:262144,outputLimit:262144},{id:"kimi-k2-turbo-preview",displayName:"Kimi K2 Turbo",provider:"moonshotai",contextWindow:262144,outputLimit:262144},{id:"kimi-k2-0711-preview",displayName:"Kimi K2 0711",provider:"moonshotai",contextWindow:131072,outputLimit:16384},{id:"kimi-k2-thinking",displayName:"Kimi K2 Thinking",provider:"moonshotai",contextWindow:262144,outputLimit:262144},{id:"mistral-small-latest",displayName:"Mistral Small (latest)",provider:"mistral",contextWindow:256000,outputLimit:256000},{id:"mistral-nemo",displayName:"Mistral Nemo",provider:"mistral",contextWindow:128000,outputLimit:128000},{id:"mistral-large-2512",displayName:"Mistral Large 3",provider:"mistral",contextWindow:262144,outputLimit:262144},{id:"labs-devstral-small-2512",displayName:"Devstral Small 2",provider:"mistral",contextWindow:256000,outputLimit:256000},{id:"devstral-2512",displayName:"Devstral 2",provider:"mistral",contextWindow:262144,outputLimit:262144},{id:"magistral-medium-latest",displayName:"Magistral Medium (latest)",provider:"mistral",contextWindow:128000,outputLimit:16384},{id:"open-mixtral-8x7b",displayName:"Mixtral 8x7B",provider:"mistral",contextWindow:32000,outputLimit:32000},{id:"pixtral-large-latest",displayName:"Pixtral Large (latest)",provider:"mistral",contextWindow:128000,outputLimit:128000},{id:"mistral-large-2411",displayName:"Mistral Large 2.1",provider:"mistral",contextWindow:131072,outputLimit:16384},{id:"codestral-latest",displayName:"Codestral (latest)",provider:"mistral",contextWindow:256000,outputLimit:4096},{id:"mistral-large-latest",displayName:"Mistral Large (latest)",provider:"mistral",contextWindow:262144,outputLimit:262144},{id:"mistral-small-2506",displayName:"Mistral Small 3.2",provider:"mistral",contextWindow:128000,outputLimit:16384},{id:"pixtral-12b",displayName:"Pixtral 12B",provider:"mistral",contextWindow:128000,outputLimit:128000},{id:"ministral-8b-latest",displayName:"Ministral 8B (latest)",provider:"mistral",contextWindow:128000,outputLimit:128000},{id:"mistral-embed",displayName:"Mistral Embed",provider:"mistral",contextWindow:8000,outputLimit:3072},{id:"magistral-small",displayName:"Magistral Small",provider:"mistral",contextWindow:128000,outputLimit:128000},{id:"mistral-small-2603",displayName:"Mistral Small 4",provider:"mistral",contextWindow:256000,outputLimit:256000},{id:"ministral-3b-latest",displayName:"Ministral 3B (latest)",provider:"mistral",contextWindow:128000,outputLimit:128000},{id:"open-mixtral-8x22b",displayName:"Mixtral 8x22B",provider:"mistral",contextWindow:64000,outputLimit:64000},{id:"devstral-small-2505",displayName:"Devstral Small 2505",provider:"mistral",contextWindow:128000,outputLimit:128000},{id:"devstral-medium-2507",displayName:"Devstral Medium",provider:"mistral",contextWindow:128000,outputLimit:128000},{id:"mistral-medium-latest",displayName:"Mistral Medium (latest)",provider:"mistral",contextWindow:128000,outputLimit:16384},{id:"open-mistral-7b",displayName:"Mistral 7B",provider:"mistral",contextWindow:8000,outputLimit:8000},{id:"devstral-medium-latest",displayName:"Devstral 2 (latest)",provider:"mistral",contextWindow:262144,outputLimit:262144},{id:"mistral-medium-2505",displayName:"Mistral Medium 3",provider:"mistral",contextWindow:131072,outputLimit:131072},{id:"devstral-small-2507",displayName:"Devstral Small",provider:"mistral",contextWindow:128000,outputLimit:128000},{id:"mistral-medium-2508",displayName:"Mistral Medium 3.1",provider:"mistral",contextWindow:262144,outputLimit:262144},{id:"qwen3-235b-a22b",displayName:"Qwen3 235B-A22B",provider:"alibaba",contextWindow:131072,outputLimit:16384},{id:"qwen3-coder-plus",displayName:"Qwen3 Coder Plus",provider:"alibaba",contextWindow:1048576,outputLimit:65536},{id:"qwen-vl-ocr",displayName:"Qwen-VL OCR",provider:"alibaba",contextWindow:34096,outputLimit:4096},{id:"qwen-omni-turbo-realtime",displayName:"Qwen-Omni Turbo Realtime",provider:"alibaba",contextWindow:32768,outputLimit:2048},{id:"qwen3-8b",displayName:"Qwen3 8B",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen3.5-397b-a17b",displayName:"Qwen3.5 397B-A17B",provider:"alibaba",contextWindow:262144,outputLimit:65536},{id:"qwq-plus",displayName:"QwQ Plus",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen-vl-plus",displayName:"Qwen-VL Plus",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen3-livetranslate-flash-realtime",displayName:"Qwen3-LiveTranslate Flash Realtime",provider:"alibaba",contextWindow:53248,outputLimit:4096},{id:"qwen3-32b",displayName:"Qwen3 32B",provider:"alibaba",contextWindow:131072,outputLimit:16384},{id:"qwen-max",displayName:"Qwen Max",provider:"alibaba",contextWindow:32768,outputLimit:8192},{id:"qwen-plus",displayName:"Qwen Plus",provider:"alibaba",contextWindow:1e6,outputLimit:32768},{id:"qwen-omni-turbo",displayName:"Qwen-Omni Turbo",provider:"alibaba",contextWindow:32768,outputLimit:2048},{id:"qwen-flash",displayName:"Qwen Flash",provider:"alibaba",contextWindow:1e6,outputLimit:32768},{id:"qwen2-5-vl-7b-instruct",displayName:"Qwen2.5-VL 7B Instruct",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen3.6-plus",displayName:"Qwen3.6 Plus",provider:"alibaba",contextWindow:1e6,outputLimit:65536},{id:"qwen3-max",displayName:"Qwen3 Max",provider:"alibaba",contextWindow:262144,outputLimit:65536},{id:"qwen3-omni-flash",displayName:"Qwen3-Omni Flash",provider:"alibaba",contextWindow:65536,outputLimit:16384},{id:"qwen2-5-72b-instruct",displayName:"Qwen2.5 72B Instruct",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen3-vl-235b-a22b",displayName:"Qwen3-VL 235B-A22B",provider:"alibaba",contextWindow:131072,outputLimit:32768},{id:"qwen3-asr-flash",displayName:"Qwen3-ASR Flash",provider:"alibaba",contextWindow:53248,outputLimit:4096},{id:"qwen3-next-80b-a3b-thinking",displayName:"Qwen3-Next 80B-A3B (Thinking)",provider:"alibaba",contextWindow:131072,outputLimit:32768},{id:"qwen-mt-plus",displayName:"Qwen-MT Plus",provider:"alibaba",contextWindow:16384,outputLimit:8192},{id:"qwen-vl-max",displayName:"Qwen-VL Max",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen3-coder-flash",displayName:"Qwen3 Coder Flash",provider:"alibaba",contextWindow:1e6,outputLimit:65536},{id:"qwen2-5-7b-instruct",displayName:"Qwen2.5 7B Instruct",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen2-5-14b-instruct",displayName:"Qwen2.5 14B Instruct",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen2-5-32b-instruct",displayName:"Qwen2.5 32B Instruct",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen3-next-80b-a3b-instruct",displayName:"Qwen3-Next 80B-A3B Instruct",provider:"alibaba",contextWindow:131072,outputLimit:32768},{id:"qwen-plus-character-ja",displayName:"Qwen Plus Character (Japanese)",provider:"alibaba",contextWindow:8192,outputLimit:512},{id:"qwen3-omni-flash-realtime",displayName:"Qwen3-Omni Flash Realtime",provider:"alibaba",contextWindow:65536,outputLimit:16384},{id:"qwen3-vl-30b-a3b",displayName:"Qwen3-VL 30B-A3B",provider:"alibaba",contextWindow:131072,outputLimit:32768},{id:"qwen3-vl-plus",displayName:"Qwen3-VL Plus",provider:"alibaba",contextWindow:262144,outputLimit:32768},{id:"qwen3-coder-480b-a35b-instruct",displayName:"Qwen3-Coder 480B-A35B Instruct",provider:"alibaba",contextWindow:262144,outputLimit:65536},{id:"qwen3-coder-30b-a3b-instruct",displayName:"Qwen3-Coder 30B-A3B Instruct",provider:"alibaba",contextWindow:262144,outputLimit:65536},{id:"qwen-turbo",displayName:"Qwen Turbo",provider:"alibaba",contextWindow:1e6,outputLimit:16384},{id:"qwen-mt-turbo",displayName:"Qwen-MT Turbo",provider:"alibaba",contextWindow:16384,outputLimit:8192},{id:"qwen2-5-omni-7b",displayName:"Qwen2.5-Omni 7B",provider:"alibaba",contextWindow:32768,outputLimit:2048},{id:"qwen3.5-plus",displayName:"Qwen3.5 Plus",provider:"alibaba",contextWindow:1e6,outputLimit:65536},{id:"qwen2-5-vl-72b-instruct",displayName:"Qwen2.5-VL 72B Instruct",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qvq-max",displayName:"QVQ Max",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen3-14b",displayName:"Qwen3 14B",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"command-a-reasoning-08-2025",displayName:"Command A Reasoning",provider:"cohere",contextWindow:256000,outputLimit:32000},{id:"command-r7b-12-2024",displayName:"Command R7B",provider:"cohere",contextWindow:128000,outputLimit:4000},{id:"c4ai-aya-vision-8b",displayName:"Aya Vision 8B",provider:"cohere",contextWindow:16000,outputLimit:4000},{id:"command-r-plus-08-2024",displayName:"Command R+",provider:"cohere",contextWindow:128000,outputLimit:4000},{id:"c4ai-aya-expanse-8b",displayName:"Aya Expanse 8B",provider:"cohere",contextWindow:8000,outputLimit:4000},{id:"command-r7b-arabic-02-2025",displayName:"Command R7B Arabic",provider:"cohere",contextWindow:128000,outputLimit:4000},{id:"command-a-vision-07-2025",displayName:"Command A Vision",provider:"cohere",contextWindow:128000,outputLimit:8000},{id:"c4ai-aya-vision-32b",displayName:"Aya Vision 32B",provider:"cohere",contextWindow:16000,outputLimit:4000},{id:"command-a-translate-08-2025",displayName:"Command A Translate",provider:"cohere",contextWindow:8000,outputLimit:8000},{id:"command-r-08-2024",displayName:"Command R",provider:"cohere",contextWindow:128000,outputLimit:4000},{id:"c4ai-aya-expanse-32b",displayName:"Aya Expanse 32B",provider:"cohere",contextWindow:128000,outputLimit:4000},{id:"command-a-03-2025",displayName:"Command A",provider:"cohere",contextWindow:256000,outputLimit:8000},{id:"anthropic.claude-3-5-sonnet-20241022-v2:0",displayName:"Claude Sonnet 3.5 v2",provider:"amazon-bedrock",contextWindow:200000,outputLimit:8192},{id:"openai.gpt-oss-safeguard-120b",displayName:"GPT OSS Safeguard 120B",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"nvidia.nemotron-nano-3-30b",displayName:"NVIDIA Nemotron Nano 3 30B",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"meta.llama3-2-90b-instruct-v1:0",displayName:"Llama 3.2 90B Instruct",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"nvidia.nemotron-super-3-120b",displayName:"NVIDIA Nemotron 3 Super 120B A12B",provider:"amazon-bedrock",contextWindow:262144,outputLimit:131072},{id:"writer.palmyra-x5-v1:0",displayName:"Palmyra X5",provider:"amazon-bedrock",contextWindow:1040000,outputLimit:8192},{id:"mistral.ministral-3-8b-instruct",displayName:"Ministral 3 8B",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"au.anthropic.claude-opus-4-6-v1",displayName:"AU Anthropic Claude Opus 4.6",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"mistral.ministral-3-3b-instruct",displayName:"Ministral 3 3B",provider:"amazon-bedrock",contextWindow:256000,outputLimit:8192},{id:"amazon.nova-premier-v1:0",displayName:"Nova Premier",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:16384},{id:"anthropic.claude-sonnet-4-5-20250929-v1:0",displayName:"Claude Sonnet 4.5",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"mistral.devstral-2-123b",displayName:"Devstral 2 123B",provider:"amazon-bedrock",contextWindow:256000,outputLimit:8192},{id:"global.anthropic.claude-opus-4-5-20251101-v1:0",displayName:"Claude Opus 4.5 (Global)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"mistral.voxtral-small-24b-2507",displayName:"Voxtral Small 24B 2507",provider:"amazon-bedrock",contextWindow:32000,outputLimit:8192},{id:"google.gemma-3-12b-it",displayName:"Google Gemma 3 12B",provider:"amazon-bedrock",contextWindow:131072,outputLimit:8192},{id:"amazon.nova-pro-v1:0",displayName:"Nova Pro",provider:"amazon-bedrock",contextWindow:300000,outputLimit:8192},{id:"anthropic.claude-haiku-4-5-20251001-v1:0",displayName:"Claude Haiku 4.5",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"minimax.minimax-m2",displayName:"MiniMax M2",provider:"amazon-bedrock",contextWindow:204608,outputLimit:128000},{id:"global.anthropic.claude-opus-4-7",displayName:"Claude Opus 4.7 (Global)",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"mistral.pixtral-large-2502-v1:0",displayName:"Pixtral Large (25.02)",provider:"amazon-bedrock",contextWindow:128000,outputLimit:8192},{id:"meta.llama4-maverick-17b-instruct-v1:0",displayName:"Llama 4 Maverick 17B Instruct",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:16384},{id:"us.anthropic.claude-sonnet-4-5-20250929-v1:0",displayName:"Claude Sonnet 4.5 (US)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"us.anthropic.claude-haiku-4-5-20251001-v1:0",displayName:"Claude Haiku 4.5 (US)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"amazon.nova-micro-v1:0",displayName:"Nova Micro",provider:"amazon-bedrock",contextWindow:128000,outputLimit:8192},{id:"global.anthropic.claude-sonnet-4-5-20250929-v1:0",displayName:"Claude Sonnet 4.5 (Global)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"openai.gpt-oss-20b-1:0",displayName:"gpt-oss-20b",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"zai.glm-5",displayName:"GLM-5",provider:"amazon-bedrock",contextWindow:202752,outputLimit:101376},{id:"qwen.qwen3-32b-v1:0",displayName:"Qwen3 32B (dense)",provider:"amazon-bedrock",contextWindow:16384,outputLimit:16384},{id:"deepseek.v3.2",displayName:"DeepSeek-V3.2",provider:"amazon-bedrock",contextWindow:163840,outputLimit:81920},{id:"eu.anthropic.claude-haiku-4-5-20251001-v1:0",displayName:"Claude Haiku 4.5 (EU)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"zai.glm-4.7-flash",displayName:"GLM-4.7-Flash",provider:"amazon-bedrock",contextWindow:200000,outputLimit:131072},{id:"us.anthropic.claude-opus-4-7",displayName:"Claude Opus 4.7 (US)",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"amazon.nova-2-lite-v1:0",displayName:"Nova 2 Lite",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"anthropic.claude-opus-4-5-20251101-v1:0",displayName:"Claude Opus 4.5",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"qwen.qwen3-coder-480b-a35b-v1:0",displayName:"Qwen3 Coder 480B A35B Instruct",provider:"amazon-bedrock",contextWindow:131072,outputLimit:65536},{id:"meta.llama3-2-1b-instruct-v1:0",displayName:"Llama 3.2 1B Instruct",provider:"amazon-bedrock",contextWindow:131000,outputLimit:4096},{id:"amazon.nova-lite-v1:0",displayName:"Nova Lite",provider:"amazon-bedrock",contextWindow:300000,outputLimit:8192},{id:"meta.llama3-1-8b-instruct-v1:0",displayName:"Llama 3.1 8B Instruct",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"anthropic.claude-opus-4-7",displayName:"Claude Opus 4.7",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"google.gemma-3-27b-it",displayName:"Google Gemma 3 27B Instruct",provider:"amazon-bedrock",contextWindow:202752,outputLimit:8192},{id:"global.anthropic.claude-haiku-4-5-20251001-v1:0",displayName:"Claude Haiku 4.5 (Global)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"google.gemma-3-4b-it",displayName:"Gemma 3 4B IT",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"meta.llama4-scout-17b-instruct-v1:0",displayName:"Llama 4 Scout 17B Instruct",provider:"amazon-bedrock",contextWindow:3500000,outputLimit:16384},{id:"deepseek.v3-v1:0",displayName:"DeepSeek-V3.1",provider:"amazon-bedrock",contextWindow:163840,outputLimit:81920},{id:"mistral.magistral-small-2509",displayName:"Magistral Small 1.2",provider:"amazon-bedrock",contextWindow:128000,outputLimit:40000},{id:"qwen.qwen3-next-80b-a3b",displayName:"Qwen/Qwen3-Next-80B-A3B-Instruct",provider:"amazon-bedrock",contextWindow:262000,outputLimit:262000},{id:"zai.glm-4.7",displayName:"GLM-4.7",provider:"amazon-bedrock",contextWindow:204800,outputLimit:131072},{id:"moonshot.kimi-k2-thinking",displayName:"Kimi K2 Thinking",provider:"amazon-bedrock",contextWindow:256000,outputLimit:256000},{id:"us.anthropic.claude-opus-4-5-20251101-v1:0",displayName:"Claude Opus 4.5 (US)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"mistral.ministral-3-14b-instruct",displayName:"Ministral 14B 3.0",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"anthropic.claude-3-haiku-20240307-v1:0",displayName:"Claude Haiku 3",provider:"amazon-bedrock",contextWindow:200000,outputLimit:4096},{id:"deepseek.r1-v1:0",displayName:"DeepSeek-R1",provider:"amazon-bedrock",contextWindow:128000,outputLimit:32768},{id:"meta.llama3-1-405b-instruct-v1:0",displayName:"Llama 3.1 405B Instruct",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"mistral.voxtral-mini-3b-2507",displayName:"Voxtral Mini 3B 2507",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"openai.gpt-oss-120b-1:0",displayName:"gpt-oss-120b",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"nvidia.nemotron-nano-12b-v2",displayName:"NVIDIA Nemotron Nano 12B v2 VL BF16",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"eu.anthropic.claude-opus-4-7",displayName:"Claude Opus 4.7 (EU)",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"minimax.minimax-m2.5",displayName:"MiniMax M2.5",provider:"amazon-bedrock",contextWindow:196608,outputLimit:98304},{id:"meta.llama3-3-70b-instruct-v1:0",displayName:"Llama 3.3 70B Instruct",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"meta.llama3-1-70b-instruct-v1:0",displayName:"Llama 3.1 70B Instruct",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"meta.llama3-2-3b-instruct-v1:0",displayName:"Llama 3.2 3B Instruct",provider:"amazon-bedrock",contextWindow:131000,outputLimit:4096},{id:"eu.anthropic.claude-sonnet-4-5-20250929-v1:0",displayName:"Claude Sonnet 4.5 (EU)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"eu.anthropic.claude-opus-4-5-20251101-v1:0",displayName:"Claude Opus 4.5 (EU)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"meta.llama3-2-11b-instruct-v1:0",displayName:"Llama 3.2 11B Instruct",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"moonshotai.kimi-k2.5",displayName:"Kimi K2.5",provider:"amazon-bedrock",contextWindow:256000,outputLimit:256000},{id:"au.anthropic.claude-sonnet-4-6",displayName:"AU Anthropic Claude Sonnet 4.6",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"openai.gpt-oss-safeguard-20b",displayName:"GPT OSS Safeguard 20B",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"qwen.qwen3-coder-30b-a3b-v1:0",displayName:"Qwen3 Coder 30B A3B Instruct",provider:"amazon-bedrock",contextWindow:262144,outputLimit:131072},{id:"minimax.minimax-m2.1",displayName:"MiniMax M2.1",provider:"amazon-bedrock",contextWindow:204800,outputLimit:131072},{id:"qwen.qwen3-vl-235b-a22b",displayName:"Qwen/Qwen3-VL-235B-A22B-Instruct",provider:"amazon-bedrock",contextWindow:262000,outputLimit:262000},{id:"qwen.qwen3-coder-next",displayName:"Qwen3 Coder Next",provider:"amazon-bedrock",contextWindow:131072,outputLimit:65536},{id:"nvidia.nemotron-nano-9b-v2",displayName:"NVIDIA Nemotron Nano 9B v2",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"mistral.mistral-large-3-675b-instruct",displayName:"Mistral Large 3",provider:"amazon-bedrock",contextWindow:256000,outputLimit:8192},{id:"qwen.qwen3-235b-a22b-2507-v1:0",displayName:"Qwen3 235B A22B 2507",provider:"amazon-bedrock",contextWindow:262144,outputLimit:131072},{id:"anthropic.claude-3-7-sonnet-20250219-v1:0",displayName:"Claude Sonnet 3.7",provider:"amazon-bedrock",contextWindow:200000,outputLimit:8192},{id:"writer.palmyra-x4-v1:0",displayName:"Palmyra X4",provider:"amazon-bedrock",contextWindow:122880,outputLimit:8192},{id:"anthropic.claude-opus-4-1-20250805-v1:0",displayName:"Claude Opus 4.1",provider:"amazon-bedrock",contextWindow:200000,outputLimit:32000},{id:"anthropic.claude-3-5-sonnet-20240620-v1:0",displayName:"Claude Sonnet 3.5",provider:"amazon-bedrock",contextWindow:200000,outputLimit:8192},{id:"eu.anthropic.claude-opus-4-6-v1",displayName:"Claude Opus 4.6 (EU)",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"eu.anthropic.claude-sonnet-4-20250514-v1:0",displayName:"Claude Sonnet 4 (EU)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"us.anthropic.claude-opus-4-20250514-v1:0",displayName:"Claude Opus 4 (US)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:32000},{id:"anthropic.claude-sonnet-4-6",displayName:"Claude Sonnet 4.6",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:64000},{id:"us.anthropic.claude-sonnet-4-20250514-v1:0",displayName:"Claude Sonnet 4 (US)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"global.anthropic.claude-sonnet-4-6",displayName:"Claude Sonnet 4.6 (Global)",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:64000},{id:"us.anthropic.claude-sonnet-4-6",displayName:"Claude Sonnet 4.6 (US)",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:64000},{id:"global.anthropic.claude-opus-4-6-v1",displayName:"Claude Opus 4.6 (Global)",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"us.anthropic.claude-opus-4-6-v1",displayName:"Claude Opus 4.6 (US)",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"us.anthropic.claude-opus-4-1-20250805-v1:0",displayName:"Claude Opus 4.1 (US)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:32000},{id:"global.anthropic.claude-sonnet-4-20250514-v1:0",displayName:"Claude Sonnet 4 (Global)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"eu.anthropic.claude-sonnet-4-6",displayName:"Claude Sonnet 4.6 (EU)",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:64000},{id:"anthropic.claude-opus-4-20250514-v1:0",displayName:"Claude Opus 4",provider:"amazon-bedrock",contextWindow:200000,outputLimit:32000},{id:"anthropic.claude-sonnet-4-20250514-v1:0",displayName:"Claude Sonnet 4",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"anthropic.claude-opus-4-6-v1",displayName:"Claude Opus 4.6",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"anthropic.claude-3-5-haiku-20241022-v1:0",displayName:"Claude Haiku 3.5",provider:"amazon-bedrock",contextWindow:200000,outputLimit:8192},{id:"gpt-5.2-chat",displayName:"GPT-5.2 Chat",provider:"azure",contextWindow:128000,outputLimit:16384},{id:"codex-mini",displayName:"Codex Mini",provider:"azure",contextWindow:200000,outputLimit:1e5},{id:"phi-4-multimodal",displayName:"Phi-4-multimodal",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"phi-3.5-mini-instruct",displayName:"Phi-3.5-mini-instruct",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"llama-4-scout-17b-16e-instruct",displayName:"Llama 4 Scout 17B 16E Instruct",provider:"azure",contextWindow:128000,outputLimit:8192},{id:"grok-4-1-fast-reasoning",displayName:"Grok 4.1 Fast (Reasoning)",provider:"azure",contextWindow:128000,outputLimit:8192},{id:"phi-3-medium-4k-instruct",displayName:"Phi-3-medium-instruct (4k)",provider:"azure",contextWindow:4096,outputLimit:1024},{id:"ministral-3b",displayName:"Ministral 3B",provider:"azure",contextWindow:128000,outputLimit:8192},{id:"meta-llama-3.1-8b-instruct",displayName:"Meta-Llama-3.1-8B-Instruct",provider:"azure",contextWindow:128000,outputLimit:32768},{id:"llama-3.3-70b-instruct",displayName:"Llama-3.3-70B-Instruct",provider:"azure",contextWindow:128000,outputLimit:32768},{id:"deepseek-v3-0324",displayName:"DeepSeek-V3-0324",provider:"azure",contextWindow:131072,outputLimit:131072},{id:"gpt-5-chat",displayName:"GPT-5 Chat",provider:"azure",contextWindow:128000,outputLimit:16384},{id:"phi-3.5-moe-instruct",displayName:"Phi-3.5-MoE-instruct",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"gpt-5.3-chat",displayName:"GPT-5.3 Chat",provider:"azure",contextWindow:128000,outputLimit:16384},{id:"phi-3-mini-128k-instruct",displayName:"Phi-3-mini-instruct (128k)",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"phi-4-reasoning",displayName:"Phi-4-reasoning",provider:"azure",contextWindow:32000,outputLimit:4096},{id:"meta-llama-3-70b-instruct",displayName:"Meta-Llama-3-70B-Instruct",provider:"azure",contextWindow:8192,outputLimit:2048},{id:"phi-3-small-8k-instruct",displayName:"Phi-3-small-instruct (8k)",provider:"azure",contextWindow:8192,outputLimit:2048},{id:"llama-3.2-90b-vision-instruct",displayName:"Llama-3.2-90B-Vision-Instruct",provider:"azure",contextWindow:128000,outputLimit:8192},{id:"deepseek-r1",displayName:"DeepSeek-R1",provider:"azure",contextWindow:163840,outputLimit:163840},{id:"deepseek-v3.2-speciale",displayName:"DeepSeek-V3.2-Speciale",provider:"azure",contextWindow:128000,outputLimit:128000},{id:"cohere-command-a",displayName:"Command A",provider:"azure",contextWindow:256000,outputLimit:8000},{id:"llama-3.2-11b-vision-instruct",displayName:"Llama-3.2-11B-Vision-Instruct",provider:"azure",contextWindow:128000,outputLimit:8192},{id:"meta-llama-3.1-405b-instruct",displayName:"Meta-Llama-3.1-405B-Instruct",provider:"azure",contextWindow:128000,outputLimit:32768},{id:"gpt-5.1-chat",displayName:"GPT-5.1 Chat",provider:"azure",contextWindow:128000,outputLimit:16384},{id:"gpt-4-turbo-vision",displayName:"GPT-4 Turbo Vision",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"cohere-embed-v-4-0",displayName:"Embed v4",provider:"azure",contextWindow:128000,outputLimit:1536},{id:"gpt-3.5-turbo-0125",displayName:"GPT-3.5 Turbo 0125",provider:"azure",contextWindow:16384,outputLimit:16384},{id:"cohere-embed-v3-multilingual",displayName:"Embed v3 Multilingual",provider:"azure",contextWindow:512,outputLimit:1024},{id:"grok-4-20-non-reasoning",displayName:"Grok 4.20 (Non-Reasoning)",provider:"azure",contextWindow:262000,outputLimit:8192},{id:"grok-4-fast-reasoning",displayName:"Grok 4 Fast (Reasoning)",provider:"azure",contextWindow:2000000,outputLimit:30000},{id:"mistral-small-2503",displayName:"Mistral Small 3.1",provider:"azure",contextWindow:128000,outputLimit:32768},{id:"model-router",displayName:"Model Router",provider:"azure",contextWindow:128000,outputLimit:16384},{id:"gpt-3.5-turbo-1106",displayName:"GPT-3.5 Turbo 1106",provider:"azure",contextWindow:16384,outputLimit:16384},{id:"deepseek-v3.1",displayName:"DeepSeek-V3.1",provider:"azure",contextWindow:131072,outputLimit:131072},{id:"phi-3-mini-4k-instruct",displayName:"Phi-3-mini-instruct (4k)",provider:"azure",contextWindow:4096,outputLimit:1024},{id:"meta-llama-3.1-70b-instruct",displayName:"Meta-Llama-3.1-70B-Instruct",provider:"azure",contextWindow:128000,outputLimit:32768},{id:"phi-4-mini-reasoning",displayName:"Phi-4-mini-reasoning",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"meta-llama-3-8b-instruct",displayName:"Meta-Llama-3-8B-Instruct",provider:"azure",contextWindow:8192,outputLimit:2048},{id:"phi-4-mini",displayName:"Phi-4-mini",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"grok-4-20-reasoning",displayName:"Grok 4.20 (Reasoning)",provider:"azure",contextWindow:262000,outputLimit:8192},{id:"gpt-3.5-turbo-0301",displayName:"GPT-3.5 Turbo 0301",provider:"azure",contextWindow:4096,outputLimit:4096},{id:"phi-3-small-128k-instruct",displayName:"Phi-3-small-instruct (128k)",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"deepseek-v3.2",displayName:"DeepSeek-V3.2",provider:"azure",contextWindow:128000,outputLimit:128000},{id:"phi-3-medium-128k-instruct",displayName:"Phi-3-medium-instruct (128k)",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"gpt-3.5-turbo-0613",displayName:"GPT-3.5 Turbo 0613",provider:"azure",contextWindow:16384,outputLimit:16384},{id:"phi-4",displayName:"Phi-4",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"gpt-4-32k",displayName:"GPT-4 32K",provider:"azure",contextWindow:32768,outputLimit:32768},{id:"cohere-embed-v3-english",displayName:"Embed v3 English",provider:"azure",contextWindow:512,outputLimit:1024},{id:"phi-4-reasoning-plus",displayName:"Phi-4-reasoning-plus",provider:"azure",contextWindow:32000,outputLimit:4096},{id:"gpt-3.5-turbo-instruct",displayName:"GPT-3.5 Turbo Instruct",provider:"azure",contextWindow:4096,outputLimit:4096},{id:"deepseek-r1-0528",displayName:"DeepSeek-R1-0528",provider:"azure",contextWindow:163840,outputLimit:163840},{id:"codestral-2501",displayName:"Codestral 25.01",provider:"azure",contextWindow:256000,outputLimit:256000},{id:"llama-4-maverick-17b-128e-instruct-fp8",displayName:"Llama 4 Maverick 17B 128E Instruct FP8",provider:"azure",contextWindow:128000,outputLimit:8192},{id:"mai-ds-r1",displayName:"MAI-DS-R1",provider:"azure",contextWindow:128000,outputLimit:8192},{id:"cohere-command-r-08-2024",displayName:"Command R",provider:"azure",contextWindow:128000,outputLimit:4000},{id:"cohere-command-r-plus-08-2024",displayName:"Command R+",provider:"azure",contextWindow:128000,outputLimit:4000}]});import{join as gc}from"path";import{homedir as $c}from"os";function Xe(){return Gc??gc($c(),".tako","models-cache.json")}function Rd(i){Sn.clear();for(let o of i)if(!Sn.has(o.id))Sn.set(o.id,o)}function Sc(){try{let o=$("fs").readFileSync(Xe(),"utf-8"),n=JSON.parse(o);if(typeof n?.fetchedAt!=="number"||!Array.isArray(n?.entries))return null;return n}catch{return null}}async function Pc(i){try{let o=await import("fs/promises"),n=Xe(),d=n.slice(0,n.lastIndexOf("/"));if(d)await o.mkdir(d,{recursive:!0}).catch(()=>{});await o.writeFile(n,JSON.stringify(i),"utf-8")}catch{}}function Ni(){if(Pn)return;Pn=!0;let i=Sc();if(i&&Date.now()-i.fetchedAt<Mc){Rd(i.entries);return}Rd(ci)}async function Jd(){try{let i=await Te();if(!i.length)return;Rd(i),await Pc({fetchedAt:Date.now(),entries:i}),Pn=!0}catch{}}function Ke(i){let o=i.match(/^(.+?)(?:\[1m\]|:1m)$/i),n=o?o[1]:i,d=n.match(/^[^\/]+\/(.+)$/);return{lookupId:d?d[1]:n,is1m:!!o}}function Bd(i){if(!Pn)Ni();let{lookupId:o,is1m:n}=Ke(i),d=Sn.get(o);if(!d)return;if(n)return{...d,contextWindow:1e6};return d}var Mc=86400000,Gc=null,Sn,Pn=!1;var Ve=N(()=>{Gn();Sn=new Map});import{join as Cc}from"path";function Fe(){return qc??Cc(Q,"tako-models-cache.json")}function Yd(i,o){return`${i.replace(/\/+$/,"")}#${o}`}function Hd(){if(Ze)return;Ze=!0;try{let i=$("fs"),o=JSON.parse(i.readFileSync(Fe(),"utf-8"));if(o?.version!==1||typeof o.buckets!=="object")return;for(let[n,d]of Object.entries(o.buckets))if(typeof d?.fetchedAt==="number"&&Array.isArray(d.entries))Vo.set(n,d)}catch{}}async function Oc(){try{let i=await import("fs/promises"),o=Fe(),n=o.slice(0,o.lastIndexOf("/"));if(n)await i.mkdir(n,{recursive:!0}).catch(()=>{});let d={version:1,buckets:Object.fromEntries(Vo)};await i.writeFile(o,JSON.stringify(d),"utf-8")}catch{}}function Rc(i){let o=i?.models;if(!Array.isArray(o))return[];let n=[];for(let d of o){let e=d?.slug;if(typeof e!=="string"||!e)continue;n.push({id:e,displayName:d.display_name||e,description:d.description||"",contextWindow:typeof d.context_window==="number"?d.context_window:0,sortOrder:typeof d.priority==="number"?d.priority:0,category:typeof d.model_category==="string"&&d.model_category?d.model_category:"chat"})}return n.sort((d,e)=>d.sortOrder-e.sortOrder||d.id.localeCompare(e.id)),n}function Zo(i){return i.filter((o)=>!o.category||o.category==="chat")}function Hi(i,o){return Hd(),Vo.get(Yd(i,o))?.entries??null}async function Cn(i,o,n){Hd();let d=Yd(i,n),e=Ad.get(d);if(e)return e;let u=(async()=>{try{let r=i.replace(/\/+$/,"")+`/v1/models?client_version=tako-cli&api_type=${n}`,t=await fetch(r,{headers:{Authorization:`Bearer ${o}`},signal:AbortSignal.timeout(Qc)});if(!t.ok)return;let c=await t.json(),a=Rc(c);if(a.length===0)return;Vo.set(d,{fetchedAt:Date.now(),entries:a}),await Oc()}catch{}finally{Ad.delete(d)}})();return Ad.set(d,u),u}function Td(i){Hd();let o=Date.now(),n=[];for(let d of i){if(d.type!=="tako"&&d.type!=="custom")continue;if(!d.apiKey||!d.baseUrl)continue;for(let e of["openai","claude"]){let u=Vo.get(Yd(d.baseUrl,e));if(u&&o-u.fetchedAt<Ic)continue;let r=Cn(d.baseUrl,d.apiKey,e);if(!u)n.push(r)}}return Promise.all(n).then(()=>{return})}var Ic=3600000,Qc=8000,qc=null,Vo,Ze=!1,Ad;var Xd=N(()=>{C();Vo=new Map,Ad=new Map});var fo=N(()=>{Ve();Xd()});import{homedir as Jc}from"os";import{join as Vd}from"path";function De(i,o){let n={...i};for(let[d,e]of Object.entries(o))if(e&&typeof e==="object"&&!Array.isArray(e)&&n[d]&&typeof n[d]==="object"&&!Array.isArray(n[d]))n[d]=De(n[d],e);else n[d]=e;return n}function Bc(i){if(i.model_providers?.crs)delete i.model_providers.crs;if(i.model_provider==="crs")delete i.model_provider;if(i.openai_base_url)delete i.openai_base_url;let o=i.model_providers?.tako;if(o)delete o.wire_api,delete o.request_max_retries,delete o.stream_max_retries,delete o.api_key,delete o.env_key;return i}function Ue(i){if(i.model_providers?.tako)delete i.model_providers.tako.supports_websockets;if(i.features){if(delete i.features.multi_agent,delete i.features.responses_websockets_v2,Object.keys(i.features).length===0)delete i.features}}async function Ac(i,o){let n=await import("fs/promises");try{await n.mkdir(Zd,{recursive:!0})}catch{}let d={};try{d=Cd(await n.readFile(Ee,"utf-8"))}catch{}if(d=Bc(d),i.type==="codex-subscription")if(delete d.model_provider,d.check_for_update_on_startup=!1,d.remote_compaction_v2=!1,Ue(d),i.authData)await Bun.write(_e,JSON.stringify(i.authData,null,2)+`
267
- `);else await Bun.write(_e,JSON.stringify({OPENAI_API_KEY:null,auth_mode:"chatgpt"},null,2)+`
268
- `);else{let e;if(i.type==="tako")e=`${Y}/v1`;else if(i.type==="deepseek")e="https://api.deepseek.com/v1";else e=`${i.baseUrl}/v1`;let r=o?.find((l)=>l.startsWith("model-"))?.slice(6)||i.model||"gpt-5.5",t=/^gpt[-.]/i.test(r),c;if(!t){if(c=ci.find((x)=>x.id===r)?.contextWindow,!c&&(i.type==="tako"||i.type==="custom")&&i.baseUrl){let x=Hi(i.baseUrl,"openai")?.find((w)=>w.id===r);if(x&&x.contextWindow>0)c=x.contextWindow}if(!c)c=i.modelContextWindow}else delete d.model_context_window;let a={name:"tako",base_url:e,requires_openai_auth:!0};if(i.apiKey)a.experimental_bearer_token=i.apiKey;Ue(d);let p={model_provider:"tako",model:r,check_for_update_on_startup:!1,remote_compaction_v2:!1,model_providers:{tako:a}};if(c)p.model_context_window=c;d=De(d,p)}await Bun.write(Ee,Od(d))}function Kd(i){if(i>=1e6)return"1M";if(i>0)return`${Math.round(i/1000)}k`;return"?"}function Kc(i){if(!i.baseUrl)return null;let o=Hi(i.baseUrl,"openai");if(!o||o.length===0)return null;let n=Zo(o);if(n.length===0)return null;return n.map((d)=>({id:`model-${d.id}`,label:{en:d.displayName,zh:d.displayName},shortLabel:d.displayName,description:{en:`Use ${d.displayName} (${Kd(d.contextWindow)} ctx)`,zh:`\u4F7F\u7528 ${d.displayName}\uFF08\u4E0A\u4E0B\u6587 ${Kd(d.contextWindow)}\uFF09`},flag:`--model ${d.id}`,args:["--model",d.id],group:"model"}))}function Vc(i){if(Ni(),i&&(i.type==="tako"||i.type==="custom")){let d=Kc(i);if(d)return d}let o=i?.type==="deepseek"?Xc:Tc,n=[];for(let d of o){let e=ci.find((t)=>t.id===d),u=Kd(e?.contextWindow??0),r=e?.displayName??d;n.push({id:`model-${d}`,label:{en:r,zh:r},shortLabel:r,description:{en:`Use ${r} (${u} ctx)`,zh:`\u4F7F\u7528 ${r}\uFF08\u4E0A\u4E0B\u6587 ${u}\uFF09`},flag:`--model ${d}`,args:["--model",d],group:"model"})}return n}function Zc(i){return[...Hc,...Vc(i)]}var Zd,Ee,_e,Yc,Hc,Tc,Xc;var je=N(()=>{E();C();He();fo();Gn();Zd=Vd(Jc(),".codex"),Ee=Vd(Zd,"config.toml"),_e=Vd(Zd,"auth.json");Yc={id:"codex",name:"Codex",package:"@openai/codex",command:"codex",runtime:"bun",continueArg:"--continue",brandColor:"blue",getEnvVars(i){return{}},setupConfigFiles:Ac,launchOptions:(i)=>Zc(i)},Hc=[{id:"search",label:{en:"Web Search",zh:"\u7F51\u7EDC\u641C\u7D22"},shortLabel:"Search",description:{en:"Enable real-time web search",zh:"\u542F\u7528\u5B9E\u65F6\u7F51\u9875\u641C\u7D22"},flag:"--search",args:["--search"]},{id:"bypass-sandbox",label:{en:"Bypass Sandbox",zh:"\u7ED5\u8FC7\u5BA1\u6279\u4E0E\u6C99\u7BB1"},shortLabel:"Bypass",description:{en:"DANGEROUS: skip all approvals & sandbox (use only in disposable envs)",zh:"\u5371\u9669\uFF1A\u8DF3\u8FC7\u6240\u6709\u5BA1\u6279\u4E0E\u6C99\u7BB1\u9650\u5236\uFF08\u4EC5\u9650\u9694\u79BB/\u4E34\u65F6\u73AF\u5883\u4F7F\u7528\uFF09"},flag:"--dangerously-bypass-approvals-and-sandbox",args:["--dangerously-bypass-approvals-and-sandbox"]}],Tc=["gpt-5.5","gpt-5.4","gpt-5.3-codex","gpt-5.3"],Xc=["deepseek-v4-flash","deepseek-v4-pro"];yo(Yc)});function di(i){switch(i){case"claude-subscription":return["claude-code"];case"codex-subscription":return["codex"];case"anthropic":return["claude-code"];case"deepseek":return["claude-code","codex"];case"xiaomi":return["claude-code"];case"custom":return["claude-code","codex"];case"tako":default:return}}function Fo(i){switch(i){case"deepseek":return"deepseek-v4-flash";case"xiaomi":return"mimo-v2.5-pro";case"tako":return;default:return}}function Fd(i){switch(i){case"deepseek":return"https://api.deepseek.com";case"xiaomi":return _d;default:return}}function Ud(i){return i?.startsWith("tp-")?iu:_d}function Eo(i){switch(i){case"deepseek":return["deepseek-v4-flash","deepseek-v4-pro"];case"xiaomi":return Ec;case"tako":case"anthropic":return Fc;default:return}}function Ti(i,o){let n=i.supportedClients;if(!n||n.length===0)return!0;return n.includes(o)}var io,Ed="https://api.deepseek.com/anthropic",_d="https://api.xiaomimimo.com/anthropic",iu="https://token-plan-cn.xiaomimimo.com/anthropic",Fc,Ec;var Si=N(()=>{io={"claude-subscription":{en:"Claude Subscription",zh:"Claude \u8BA2\u9605\u76F4\u8FDE"},"codex-subscription":{en:"Codex Subscription",zh:"Codex \u8BA2\u9605\u76F4\u8FDE"},tako:{en:"Tako Proxy",zh:"Tako \u4EE3\u7406"},anthropic:{en:"Anthropic Direct",zh:"Anthropic \u76F4\u8FDE"},deepseek:{en:"DeepSeek",zh:"DeepSeek"},xiaomi:{en:"Xiaomi MiMo",zh:"\u5C0F\u7C73 MiMo"},custom:{en:"Custom Proxy",zh:"\u81EA\u5B9A\u4E49\u4EE3\u7406"}};Fc=["claude-sonnet-4-6","claude-opus-4-6","claude-opus-4-7"],Ec=["mimo-v2.5-pro"]});var nu={};ii(nu,{spinner:()=>jc,setLogHandler:()=>Uc,resetLogHandler:()=>Dc,log:()=>L,createSpinner:()=>oo});function _c(i){let o=!!process.stderr.isTTY,n=(e)=>process.stderr.write(e),d=i;if(o)n(`\u23F3 ${i}`);else n(`\u23F3 ${i}
266
+ */});function $c(i){let o=[];for(let[n,d]of Object.entries(i)){if(!d?.models)continue;for(let[e,u]of Object.entries(d.models)){let r=u?.limit?.context;if(typeof r!=="number"||r<=0)continue;o.push({id:e,displayName:u.name||e,provider:n,contextWindow:r,outputLimit:typeof u.limit?.output==="number"?u.limit.output:void 0})}}return o}async function Ke(){let i=await fetch("https://models.dev/api.json",{signal:AbortSignal.timeout(1e4)});if(!i.ok)throw Error(`models.dev http ${i.status}`);let o=await i.json();return $c(o)}var ci;var Sn=N(()=>{ci=[{id:"claude-3-sonnet-20240229",displayName:"Claude Sonnet 3",provider:"anthropic",contextWindow:200000,outputLimit:4096},{id:"claude-haiku-4-5",displayName:"Claude Haiku 4.5 (latest)",provider:"anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-opus-4-5-20251101",displayName:"Claude Opus 4.5",provider:"anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-3-opus-20240229",displayName:"Claude Opus 3",provider:"anthropic",contextWindow:200000,outputLimit:4096},{id:"claude-3-5-haiku-20241022",displayName:"Claude Haiku 3.5",provider:"anthropic",contextWindow:200000,outputLimit:8192},{id:"claude-3-5-sonnet-20241022",displayName:"Claude Sonnet 3.5 v2",provider:"anthropic",contextWindow:200000,outputLimit:8192},{id:"claude-sonnet-4-6",displayName:"Claude Sonnet 4.6",provider:"anthropic",contextWindow:1e6,outputLimit:64000},{id:"claude-opus-4-0",displayName:"Claude Opus 4 (latest)",provider:"anthropic",contextWindow:200000,outputLimit:32000},{id:"claude-opus-4-7",displayName:"Claude Opus 4.7",provider:"anthropic",contextWindow:1e6,outputLimit:128000},{id:"claude-3-haiku-20240307",displayName:"Claude Haiku 3",provider:"anthropic",contextWindow:200000,outputLimit:4096},{id:"claude-sonnet-4-5-20250929",displayName:"Claude Sonnet 4.5",provider:"anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-3-5-haiku-latest",displayName:"Claude Haiku 3.5 (latest)",provider:"anthropic",contextWindow:200000,outputLimit:8192},{id:"claude-opus-4-1",displayName:"Claude Opus 4.1 (latest)",provider:"anthropic",contextWindow:200000,outputLimit:32000},{id:"claude-sonnet-4-0",displayName:"Claude Sonnet 4 (latest)",provider:"anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-3-5-sonnet-20240620",displayName:"Claude Sonnet 3.5",provider:"anthropic",contextWindow:200000,outputLimit:8192},{id:"claude-opus-4-5",displayName:"Claude Opus 4.5 (latest)",provider:"anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-opus-4-1-20250805",displayName:"Claude Opus 4.1",provider:"anthropic",contextWindow:200000,outputLimit:32000},{id:"claude-haiku-4-5-20251001",displayName:"Claude Haiku 4.5",provider:"anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-sonnet-4-20250514",displayName:"Claude Sonnet 4",provider:"anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-opus-4-6",displayName:"Claude Opus 4.6",provider:"anthropic",contextWindow:1e6,outputLimit:128000},{id:"claude-3-7-sonnet-20250219",displayName:"Claude Sonnet 3.7",provider:"anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-sonnet-4-5",displayName:"Claude Sonnet 4.5 (latest)",provider:"anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-opus-4-20250514",displayName:"Claude Opus 4",provider:"anthropic",contextWindow:200000,outputLimit:32000},{id:"gpt-5.1-codex-max",displayName:"GPT-5.1 Codex Max",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-4o-2024-05-13",displayName:"GPT-4o (2024-05-13)",provider:"openai",contextWindow:128000,outputLimit:4096},{id:"o1-mini",displayName:"o1-mini",provider:"openai",contextWindow:128000,outputLimit:65536},{id:"gpt-5.2-pro",displayName:"GPT-5.2 Pro",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"text-embedding-3-large",displayName:"text-embedding-3-large",provider:"openai",contextWindow:8191,outputLimit:3072},{id:"gpt-5.3-chat-latest",displayName:"GPT-5.3 Chat (latest)",provider:"openai",contextWindow:128000,outputLimit:16384},{id:"gpt-5.5",displayName:"GPT-5.5",provider:"openai",contextWindow:1050000,outputLimit:130000},{id:"gpt-5-mini",displayName:"GPT-5 Mini",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-5-nano",displayName:"GPT-5 Nano",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-5.3-codex",displayName:"GPT-5.3 Codex",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-4-turbo",displayName:"GPT-4 Turbo",provider:"openai",contextWindow:128000,outputLimit:4096},{id:"text-embedding-ada-002",displayName:"text-embedding-ada-002",provider:"openai",contextWindow:8192,outputLimit:1536},{id:"gpt-5.2",displayName:"GPT-5.2",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"o3-pro",displayName:"o3-pro",provider:"openai",contextWindow:200000,outputLimit:1e5},{id:"gpt-4o-mini",displayName:"GPT-4o mini",provider:"openai",contextWindow:128000,outputLimit:16384},{id:"o4-mini-deep-research",displayName:"o4-mini-deep-research",provider:"openai",contextWindow:200000,outputLimit:1e5},{id:"gpt-5.4-mini",displayName:"GPT-5.4 mini",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"o4-mini",displayName:"o4-mini",provider:"openai",contextWindow:200000,outputLimit:1e5},{id:"gpt-5.4-nano",displayName:"GPT-5.4 nano",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-5.2-codex",displayName:"GPT-5.2 Codex",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-5.2-chat-latest",displayName:"GPT-5.2 Chat",provider:"openai",contextWindow:128000,outputLimit:16384},{id:"gpt-5.1-codex-mini",displayName:"GPT-5.1 Codex mini",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"o1-preview",displayName:"o1-preview",provider:"openai",contextWindow:128000,outputLimit:32768},{id:"gpt-4o-2024-08-06",displayName:"GPT-4o (2024-08-06)",provider:"openai",contextWindow:128000,outputLimit:16384},{id:"gpt-5.1",displayName:"GPT-5.1",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"o1",displayName:"o1",provider:"openai",contextWindow:200000,outputLimit:1e5},{id:"gpt-5.4-pro",displayName:"GPT-5.4 Pro",provider:"openai",contextWindow:1050000,outputLimit:128000},{id:"gpt-3.5-turbo",displayName:"GPT-3.5-turbo",provider:"openai",contextWindow:16385,outputLimit:4096},{id:"o3-deep-research",displayName:"o3-deep-research",provider:"openai",contextWindow:200000,outputLimit:1e5},{id:"o3-mini",displayName:"o3-mini",provider:"openai",contextWindow:200000,outputLimit:1e5},{id:"text-embedding-3-small",displayName:"text-embedding-3-small",provider:"openai",contextWindow:8191,outputLimit:1536},{id:"o1-pro",displayName:"o1-pro",provider:"openai",contextWindow:200000,outputLimit:1e5},{id:"gpt-4",displayName:"GPT-4",provider:"openai",contextWindow:8192,outputLimit:8192},{id:"gpt-5-codex",displayName:"GPT-5-Codex",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-5.4",displayName:"GPT-5.4",provider:"openai",contextWindow:1050000,outputLimit:128000},{id:"gpt-5.1-chat-latest",displayName:"GPT-5.1 Chat",provider:"openai",contextWindow:128000,outputLimit:16384},{id:"gpt-5.3-codex-spark",displayName:"GPT-5.3 Codex Spark",provider:"openai",contextWindow:128000,outputLimit:32000},{id:"gpt-4.1-nano",displayName:"GPT-4.1 nano",provider:"openai",contextWindow:1047576,outputLimit:32768},{id:"o3",displayName:"o3",provider:"openai",contextWindow:200000,outputLimit:1e5},{id:"gpt-5-pro",displayName:"GPT-5 Pro",provider:"openai",contextWindow:400000,outputLimit:272000},{id:"gpt-4o",displayName:"GPT-4o",provider:"openai",contextWindow:128000,outputLimit:16384},{id:"gpt-5",displayName:"GPT-5",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-5-chat-latest",displayName:"GPT-5 Chat (latest)",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-4.1",displayName:"GPT-4.1",provider:"openai",contextWindow:1047576,outputLimit:32768},{id:"gpt-4.1-mini",displayName:"GPT-4.1 mini",provider:"openai",contextWindow:1047576,outputLimit:32768},{id:"gpt-5.1-codex",displayName:"GPT-5.1 Codex",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-4o-2024-11-20",displayName:"GPT-4o (2024-11-20)",provider:"openai",contextWindow:128000,outputLimit:16384},{id:"gemini-flash-lite-latest",displayName:"Gemini Flash-Lite Latest",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-2.5-pro-preview-05-06",displayName:"Gemini 2.5 Pro Preview 05-06",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-live-2.5-flash-preview-native-audio",displayName:"Gemini Live 2.5 Flash Preview Native Audio",provider:"google",contextWindow:131072,outputLimit:65536},{id:"gemini-3.1-pro-preview-customtools",displayName:"Gemini 3.1 Pro Preview Custom Tools",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-2.5-flash-lite-preview-09-2025",displayName:"Gemini 2.5 Flash Lite Preview 09-25",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-1.5-flash",displayName:"Gemini 1.5 Flash",provider:"google",contextWindow:1e6,outputLimit:8192},{id:"gemini-1.5-pro",displayName:"Gemini 1.5 Pro",provider:"google",contextWindow:1e6,outputLimit:8192},{id:"gemma-3n-e4b-it",displayName:"Gemma 3n 4B",provider:"google",contextWindow:8192,outputLimit:2000},{id:"gemini-3.1-flash-lite-preview",displayName:"Gemini 3.1 Flash Lite Preview",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-3.1-pro-preview",displayName:"Gemini 3.1 Pro Preview",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-2.0-flash",displayName:"Gemini 2.0 Flash",provider:"google",contextWindow:1048576,outputLimit:8192},{id:"gemini-3-flash-preview",displayName:"Gemini 3 Flash Preview",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-2.5-flash-preview-tts",displayName:"Gemini 2.5 Flash Preview TTS",provider:"google",contextWindow:8000,outputLimit:16000},{id:"gemini-3-pro-preview",displayName:"Gemini 3 Pro Preview",provider:"google",contextWindow:1e6,outputLimit:64000},{id:"gemini-2.5-flash-preview-05-20",displayName:"Gemini 2.5 Flash Preview 05-20",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-embedding-001",displayName:"Gemini Embedding 001",provider:"google",contextWindow:2048,outputLimit:3072},{id:"gemini-2.5-pro",displayName:"Gemini 2.5 Pro",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-flash-latest",displayName:"Gemini Flash Latest",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemma-4-31b-it",displayName:"Gemma 4 31B",provider:"google",contextWindow:256000,outputLimit:8192},{id:"gemini-2.5-pro-preview-06-05",displayName:"Gemini 2.5 Pro Preview 06-05",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-2.5-flash-image",displayName:"Gemini 2.5 Flash Image",provider:"google",contextWindow:32768,outputLimit:32768},{id:"gemini-2.5-flash-lite-preview-06-17",displayName:"Gemini 2.5 Flash Lite Preview 06-17",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemma-3-12b-it",displayName:"Gemma 3 12B",provider:"google",contextWindow:32768,outputLimit:8192},{id:"gemini-2.5-flash",displayName:"Gemini 2.5 Flash",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemma-3n-e2b-it",displayName:"Gemma 3n 2B",provider:"google",contextWindow:8192,outputLimit:2000},{id:"gemini-3.1-flash-image-preview",displayName:"Gemini 3.1 Flash Image (Preview)",provider:"google",contextWindow:131072,outputLimit:32768},{id:"gemma-3-4b-it",displayName:"Gemma 3 4B",provider:"google",contextWindow:32768,outputLimit:8192},{id:"gemini-2.5-flash-preview-04-17",displayName:"Gemini 2.5 Flash Preview 04-17",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-2.5-pro-preview-tts",displayName:"Gemini 2.5 Pro Preview TTS",provider:"google",contextWindow:8000,outputLimit:16000},{id:"gemini-2.5-flash-preview-09-2025",displayName:"Gemini 2.5 Flash Preview 09-25",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemma-3-27b-it",displayName:"Gemma 3 27B",provider:"google",contextWindow:131072,outputLimit:8192},{id:"gemma-4-26b-a4b-it",displayName:"Gemma 4 26B",provider:"google",contextWindow:256000,outputLimit:8192},{id:"gemini-2.5-flash-lite",displayName:"Gemini 2.5 Flash Lite",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-2.5-flash-image-preview",displayName:"Gemini 2.5 Flash Image (Preview)",provider:"google",contextWindow:32768,outputLimit:32768},{id:"gemini-1.5-flash-8b",displayName:"Gemini 1.5 Flash-8B",provider:"google",contextWindow:1e6,outputLimit:8192},{id:"gemini-live-2.5-flash",displayName:"Gemini Live 2.5 Flash",provider:"google",contextWindow:128000,outputLimit:8000},{id:"gemini-2.0-flash-lite",displayName:"Gemini 2.0 Flash Lite",provider:"google",contextWindow:1048576,outputLimit:8192},{id:"claude-sonnet-4-6@default",displayName:"Claude Sonnet 4.6",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-haiku-4-5@20251001",displayName:"Claude Haiku 4.5",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-3-5-haiku@20241022",displayName:"Claude Haiku 3.5",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:8192},{id:"claude-3-5-sonnet@20241022",displayName:"Claude Sonnet 3.5 v2",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:8192},{id:"claude-opus-4-1@20250805",displayName:"Claude Opus 4.1",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:32000},{id:"claude-sonnet-4@20250514",displayName:"Claude Sonnet 4",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-3-7-sonnet@20250219",displayName:"Claude Sonnet 3.7",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-opus-4@20250514",displayName:"Claude Opus 4",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:32000},{id:"claude-opus-4-5@20251101",displayName:"Claude Opus 4.5",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-sonnet-4-5@20250929",displayName:"Claude Sonnet 4.5",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-opus-4-6@default",displayName:"Claude Opus 4.6",provider:"google-vertex-anthropic",contextWindow:1e6,outputLimit:128000},{id:"claude-opus-4-7@default",displayName:"Claude Opus 4.7",provider:"google-vertex-anthropic",contextWindow:1e6,outputLimit:128000},{id:"grok-2-1212",displayName:"Grok 2 (1212)",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-vision-beta",displayName:"Grok Vision Beta",provider:"xai",contextWindow:8192,outputLimit:4096},{id:"grok-3-mini-fast",displayName:"Grok 3 Mini Fast",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-3-mini-latest",displayName:"Grok 3 Mini Latest",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-3-fast",displayName:"Grok 3 Fast",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-2-vision-latest",displayName:"Grok 2 Vision Latest",provider:"xai",contextWindow:8192,outputLimit:4096},{id:"grok-4.20-0309-reasoning",displayName:"Grok 4.20 (Reasoning)",provider:"xai",contextWindow:2000000,outputLimit:30000},{id:"grok-4-1-fast-non-reasoning",displayName:"Grok 4.1 Fast (Non-Reasoning)",provider:"xai",contextWindow:2000000,outputLimit:30000},{id:"grok-3-mini-fast-latest",displayName:"Grok 3 Mini Fast Latest",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-4-fast",displayName:"Grok 4 Fast",provider:"xai",contextWindow:2000000,outputLimit:30000},{id:"grok-3-latest",displayName:"Grok 3 Latest",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-2",displayName:"Grok 2",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-code-fast-1",displayName:"Grok Code Fast 1",provider:"xai",contextWindow:256000,outputLimit:1e4},{id:"grok-4.20-0309-non-reasoning",displayName:"Grok 4.20 (Non-Reasoning)",provider:"xai",contextWindow:2000000,outputLimit:30000},{id:"grok-3-fast-latest",displayName:"Grok 3 Fast Latest",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-4.20-multi-agent-0309",displayName:"Grok 4.20 Multi-Agent",provider:"xai",contextWindow:2000000,outputLimit:30000},{id:"grok-4",displayName:"Grok 4",provider:"xai",contextWindow:256000,outputLimit:64000},{id:"grok-2-latest",displayName:"Grok 2 Latest",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-beta",displayName:"Grok Beta",provider:"xai",contextWindow:131072,outputLimit:4096},{id:"grok-2-vision",displayName:"Grok 2 Vision",provider:"xai",contextWindow:8192,outputLimit:4096},{id:"grok-4-1-fast",displayName:"Grok 4.1 Fast",provider:"xai",contextWindow:2000000,outputLimit:30000},{id:"grok-3-mini",displayName:"Grok 3 Mini",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-2-vision-1212",displayName:"Grok 2 Vision (1212)",provider:"xai",contextWindow:8192,outputLimit:4096},{id:"grok-3",displayName:"Grok 3",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-4-fast-non-reasoning",displayName:"Grok 4 Fast (Non-Reasoning)",provider:"xai",contextWindow:2000000,outputLimit:30000},{id:"deepseek-chat",displayName:"DeepSeek Chat",provider:"deepseek",contextWindow:1e6,outputLimit:384000},{id:"deepseek-reasoner",displayName:"DeepSeek Reasoner",provider:"deepseek",contextWindow:1e6,outputLimit:384000},{id:"deepseek-v4-flash",displayName:"DeepSeek V4 Flash",provider:"deepseek",contextWindow:1e6,outputLimit:384000},{id:"deepseek-v4-pro",displayName:"DeepSeek V4 Pro",provider:"deepseek",contextWindow:1e6,outputLimit:384000},{id:"mimo-v2.5-pro",displayName:"MiMo v2.5 Pro",provider:"xiaomi",contextWindow:1e6,outputLimit:64000},{id:"kimi-k2-0905-preview",displayName:"Kimi K2 0905",provider:"moonshotai",contextWindow:262144,outputLimit:262144},{id:"kimi-k2.5",displayName:"Kimi K2.5",provider:"moonshotai",contextWindow:262144,outputLimit:262144},{id:"kimi-k2-thinking-turbo",displayName:"Kimi K2 Thinking Turbo",provider:"moonshotai",contextWindow:262144,outputLimit:262144},{id:"kimi-k2.6",displayName:"Kimi K2.6",provider:"moonshotai",contextWindow:262144,outputLimit:262144},{id:"kimi-k2-turbo-preview",displayName:"Kimi K2 Turbo",provider:"moonshotai",contextWindow:262144,outputLimit:262144},{id:"kimi-k2-0711-preview",displayName:"Kimi K2 0711",provider:"moonshotai",contextWindow:131072,outputLimit:16384},{id:"kimi-k2-thinking",displayName:"Kimi K2 Thinking",provider:"moonshotai",contextWindow:262144,outputLimit:262144},{id:"mistral-small-latest",displayName:"Mistral Small (latest)",provider:"mistral",contextWindow:256000,outputLimit:256000},{id:"mistral-nemo",displayName:"Mistral Nemo",provider:"mistral",contextWindow:128000,outputLimit:128000},{id:"mistral-large-2512",displayName:"Mistral Large 3",provider:"mistral",contextWindow:262144,outputLimit:262144},{id:"labs-devstral-small-2512",displayName:"Devstral Small 2",provider:"mistral",contextWindow:256000,outputLimit:256000},{id:"devstral-2512",displayName:"Devstral 2",provider:"mistral",contextWindow:262144,outputLimit:262144},{id:"magistral-medium-latest",displayName:"Magistral Medium (latest)",provider:"mistral",contextWindow:128000,outputLimit:16384},{id:"open-mixtral-8x7b",displayName:"Mixtral 8x7B",provider:"mistral",contextWindow:32000,outputLimit:32000},{id:"pixtral-large-latest",displayName:"Pixtral Large (latest)",provider:"mistral",contextWindow:128000,outputLimit:128000},{id:"mistral-large-2411",displayName:"Mistral Large 2.1",provider:"mistral",contextWindow:131072,outputLimit:16384},{id:"codestral-latest",displayName:"Codestral (latest)",provider:"mistral",contextWindow:256000,outputLimit:4096},{id:"mistral-large-latest",displayName:"Mistral Large (latest)",provider:"mistral",contextWindow:262144,outputLimit:262144},{id:"mistral-small-2506",displayName:"Mistral Small 3.2",provider:"mistral",contextWindow:128000,outputLimit:16384},{id:"pixtral-12b",displayName:"Pixtral 12B",provider:"mistral",contextWindow:128000,outputLimit:128000},{id:"ministral-8b-latest",displayName:"Ministral 8B (latest)",provider:"mistral",contextWindow:128000,outputLimit:128000},{id:"mistral-embed",displayName:"Mistral Embed",provider:"mistral",contextWindow:8000,outputLimit:3072},{id:"magistral-small",displayName:"Magistral Small",provider:"mistral",contextWindow:128000,outputLimit:128000},{id:"mistral-small-2603",displayName:"Mistral Small 4",provider:"mistral",contextWindow:256000,outputLimit:256000},{id:"ministral-3b-latest",displayName:"Ministral 3B (latest)",provider:"mistral",contextWindow:128000,outputLimit:128000},{id:"open-mixtral-8x22b",displayName:"Mixtral 8x22B",provider:"mistral",contextWindow:64000,outputLimit:64000},{id:"devstral-small-2505",displayName:"Devstral Small 2505",provider:"mistral",contextWindow:128000,outputLimit:128000},{id:"devstral-medium-2507",displayName:"Devstral Medium",provider:"mistral",contextWindow:128000,outputLimit:128000},{id:"mistral-medium-latest",displayName:"Mistral Medium (latest)",provider:"mistral",contextWindow:128000,outputLimit:16384},{id:"open-mistral-7b",displayName:"Mistral 7B",provider:"mistral",contextWindow:8000,outputLimit:8000},{id:"devstral-medium-latest",displayName:"Devstral 2 (latest)",provider:"mistral",contextWindow:262144,outputLimit:262144},{id:"mistral-medium-2505",displayName:"Mistral Medium 3",provider:"mistral",contextWindow:131072,outputLimit:131072},{id:"devstral-small-2507",displayName:"Devstral Small",provider:"mistral",contextWindow:128000,outputLimit:128000},{id:"mistral-medium-2508",displayName:"Mistral Medium 3.1",provider:"mistral",contextWindow:262144,outputLimit:262144},{id:"qwen3-235b-a22b",displayName:"Qwen3 235B-A22B",provider:"alibaba",contextWindow:131072,outputLimit:16384},{id:"qwen3-coder-plus",displayName:"Qwen3 Coder Plus",provider:"alibaba",contextWindow:1048576,outputLimit:65536},{id:"qwen-vl-ocr",displayName:"Qwen-VL OCR",provider:"alibaba",contextWindow:34096,outputLimit:4096},{id:"qwen-omni-turbo-realtime",displayName:"Qwen-Omni Turbo Realtime",provider:"alibaba",contextWindow:32768,outputLimit:2048},{id:"qwen3-8b",displayName:"Qwen3 8B",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen3.5-397b-a17b",displayName:"Qwen3.5 397B-A17B",provider:"alibaba",contextWindow:262144,outputLimit:65536},{id:"qwq-plus",displayName:"QwQ Plus",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen-vl-plus",displayName:"Qwen-VL Plus",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen3-livetranslate-flash-realtime",displayName:"Qwen3-LiveTranslate Flash Realtime",provider:"alibaba",contextWindow:53248,outputLimit:4096},{id:"qwen3-32b",displayName:"Qwen3 32B",provider:"alibaba",contextWindow:131072,outputLimit:16384},{id:"qwen-max",displayName:"Qwen Max",provider:"alibaba",contextWindow:32768,outputLimit:8192},{id:"qwen-plus",displayName:"Qwen Plus",provider:"alibaba",contextWindow:1e6,outputLimit:32768},{id:"qwen-omni-turbo",displayName:"Qwen-Omni Turbo",provider:"alibaba",contextWindow:32768,outputLimit:2048},{id:"qwen-flash",displayName:"Qwen Flash",provider:"alibaba",contextWindow:1e6,outputLimit:32768},{id:"qwen2-5-vl-7b-instruct",displayName:"Qwen2.5-VL 7B Instruct",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen3.6-plus",displayName:"Qwen3.6 Plus",provider:"alibaba",contextWindow:1e6,outputLimit:65536},{id:"qwen3-max",displayName:"Qwen3 Max",provider:"alibaba",contextWindow:262144,outputLimit:65536},{id:"qwen3-omni-flash",displayName:"Qwen3-Omni Flash",provider:"alibaba",contextWindow:65536,outputLimit:16384},{id:"qwen2-5-72b-instruct",displayName:"Qwen2.5 72B Instruct",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen3-vl-235b-a22b",displayName:"Qwen3-VL 235B-A22B",provider:"alibaba",contextWindow:131072,outputLimit:32768},{id:"qwen3-asr-flash",displayName:"Qwen3-ASR Flash",provider:"alibaba",contextWindow:53248,outputLimit:4096},{id:"qwen3-next-80b-a3b-thinking",displayName:"Qwen3-Next 80B-A3B (Thinking)",provider:"alibaba",contextWindow:131072,outputLimit:32768},{id:"qwen-mt-plus",displayName:"Qwen-MT Plus",provider:"alibaba",contextWindow:16384,outputLimit:8192},{id:"qwen-vl-max",displayName:"Qwen-VL Max",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen3-coder-flash",displayName:"Qwen3 Coder Flash",provider:"alibaba",contextWindow:1e6,outputLimit:65536},{id:"qwen2-5-7b-instruct",displayName:"Qwen2.5 7B Instruct",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen2-5-14b-instruct",displayName:"Qwen2.5 14B Instruct",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen2-5-32b-instruct",displayName:"Qwen2.5 32B Instruct",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen3-next-80b-a3b-instruct",displayName:"Qwen3-Next 80B-A3B Instruct",provider:"alibaba",contextWindow:131072,outputLimit:32768},{id:"qwen-plus-character-ja",displayName:"Qwen Plus Character (Japanese)",provider:"alibaba",contextWindow:8192,outputLimit:512},{id:"qwen3-omni-flash-realtime",displayName:"Qwen3-Omni Flash Realtime",provider:"alibaba",contextWindow:65536,outputLimit:16384},{id:"qwen3-vl-30b-a3b",displayName:"Qwen3-VL 30B-A3B",provider:"alibaba",contextWindow:131072,outputLimit:32768},{id:"qwen3-vl-plus",displayName:"Qwen3-VL Plus",provider:"alibaba",contextWindow:262144,outputLimit:32768},{id:"qwen3-coder-480b-a35b-instruct",displayName:"Qwen3-Coder 480B-A35B Instruct",provider:"alibaba",contextWindow:262144,outputLimit:65536},{id:"qwen3-coder-30b-a3b-instruct",displayName:"Qwen3-Coder 30B-A3B Instruct",provider:"alibaba",contextWindow:262144,outputLimit:65536},{id:"qwen-turbo",displayName:"Qwen Turbo",provider:"alibaba",contextWindow:1e6,outputLimit:16384},{id:"qwen-mt-turbo",displayName:"Qwen-MT Turbo",provider:"alibaba",contextWindow:16384,outputLimit:8192},{id:"qwen2-5-omni-7b",displayName:"Qwen2.5-Omni 7B",provider:"alibaba",contextWindow:32768,outputLimit:2048},{id:"qwen3.5-plus",displayName:"Qwen3.5 Plus",provider:"alibaba",contextWindow:1e6,outputLimit:65536},{id:"qwen2-5-vl-72b-instruct",displayName:"Qwen2.5-VL 72B Instruct",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qvq-max",displayName:"QVQ Max",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen3-14b",displayName:"Qwen3 14B",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"command-a-reasoning-08-2025",displayName:"Command A Reasoning",provider:"cohere",contextWindow:256000,outputLimit:32000},{id:"command-r7b-12-2024",displayName:"Command R7B",provider:"cohere",contextWindow:128000,outputLimit:4000},{id:"c4ai-aya-vision-8b",displayName:"Aya Vision 8B",provider:"cohere",contextWindow:16000,outputLimit:4000},{id:"command-r-plus-08-2024",displayName:"Command R+",provider:"cohere",contextWindow:128000,outputLimit:4000},{id:"c4ai-aya-expanse-8b",displayName:"Aya Expanse 8B",provider:"cohere",contextWindow:8000,outputLimit:4000},{id:"command-r7b-arabic-02-2025",displayName:"Command R7B Arabic",provider:"cohere",contextWindow:128000,outputLimit:4000},{id:"command-a-vision-07-2025",displayName:"Command A Vision",provider:"cohere",contextWindow:128000,outputLimit:8000},{id:"c4ai-aya-vision-32b",displayName:"Aya Vision 32B",provider:"cohere",contextWindow:16000,outputLimit:4000},{id:"command-a-translate-08-2025",displayName:"Command A Translate",provider:"cohere",contextWindow:8000,outputLimit:8000},{id:"command-r-08-2024",displayName:"Command R",provider:"cohere",contextWindow:128000,outputLimit:4000},{id:"c4ai-aya-expanse-32b",displayName:"Aya Expanse 32B",provider:"cohere",contextWindow:128000,outputLimit:4000},{id:"command-a-03-2025",displayName:"Command A",provider:"cohere",contextWindow:256000,outputLimit:8000},{id:"anthropic.claude-3-5-sonnet-20241022-v2:0",displayName:"Claude Sonnet 3.5 v2",provider:"amazon-bedrock",contextWindow:200000,outputLimit:8192},{id:"openai.gpt-oss-safeguard-120b",displayName:"GPT OSS Safeguard 120B",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"nvidia.nemotron-nano-3-30b",displayName:"NVIDIA Nemotron Nano 3 30B",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"meta.llama3-2-90b-instruct-v1:0",displayName:"Llama 3.2 90B Instruct",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"nvidia.nemotron-super-3-120b",displayName:"NVIDIA Nemotron 3 Super 120B A12B",provider:"amazon-bedrock",contextWindow:262144,outputLimit:131072},{id:"writer.palmyra-x5-v1:0",displayName:"Palmyra X5",provider:"amazon-bedrock",contextWindow:1040000,outputLimit:8192},{id:"mistral.ministral-3-8b-instruct",displayName:"Ministral 3 8B",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"au.anthropic.claude-opus-4-6-v1",displayName:"AU Anthropic Claude Opus 4.6",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"mistral.ministral-3-3b-instruct",displayName:"Ministral 3 3B",provider:"amazon-bedrock",contextWindow:256000,outputLimit:8192},{id:"amazon.nova-premier-v1:0",displayName:"Nova Premier",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:16384},{id:"anthropic.claude-sonnet-4-5-20250929-v1:0",displayName:"Claude Sonnet 4.5",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"mistral.devstral-2-123b",displayName:"Devstral 2 123B",provider:"amazon-bedrock",contextWindow:256000,outputLimit:8192},{id:"global.anthropic.claude-opus-4-5-20251101-v1:0",displayName:"Claude Opus 4.5 (Global)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"mistral.voxtral-small-24b-2507",displayName:"Voxtral Small 24B 2507",provider:"amazon-bedrock",contextWindow:32000,outputLimit:8192},{id:"google.gemma-3-12b-it",displayName:"Google Gemma 3 12B",provider:"amazon-bedrock",contextWindow:131072,outputLimit:8192},{id:"amazon.nova-pro-v1:0",displayName:"Nova Pro",provider:"amazon-bedrock",contextWindow:300000,outputLimit:8192},{id:"anthropic.claude-haiku-4-5-20251001-v1:0",displayName:"Claude Haiku 4.5",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"minimax.minimax-m2",displayName:"MiniMax M2",provider:"amazon-bedrock",contextWindow:204608,outputLimit:128000},{id:"global.anthropic.claude-opus-4-7",displayName:"Claude Opus 4.7 (Global)",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"mistral.pixtral-large-2502-v1:0",displayName:"Pixtral Large (25.02)",provider:"amazon-bedrock",contextWindow:128000,outputLimit:8192},{id:"meta.llama4-maverick-17b-instruct-v1:0",displayName:"Llama 4 Maverick 17B Instruct",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:16384},{id:"us.anthropic.claude-sonnet-4-5-20250929-v1:0",displayName:"Claude Sonnet 4.5 (US)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"us.anthropic.claude-haiku-4-5-20251001-v1:0",displayName:"Claude Haiku 4.5 (US)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"amazon.nova-micro-v1:0",displayName:"Nova Micro",provider:"amazon-bedrock",contextWindow:128000,outputLimit:8192},{id:"global.anthropic.claude-sonnet-4-5-20250929-v1:0",displayName:"Claude Sonnet 4.5 (Global)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"openai.gpt-oss-20b-1:0",displayName:"gpt-oss-20b",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"zai.glm-5",displayName:"GLM-5",provider:"amazon-bedrock",contextWindow:202752,outputLimit:101376},{id:"qwen.qwen3-32b-v1:0",displayName:"Qwen3 32B (dense)",provider:"amazon-bedrock",contextWindow:16384,outputLimit:16384},{id:"deepseek.v3.2",displayName:"DeepSeek-V3.2",provider:"amazon-bedrock",contextWindow:163840,outputLimit:81920},{id:"eu.anthropic.claude-haiku-4-5-20251001-v1:0",displayName:"Claude Haiku 4.5 (EU)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"zai.glm-4.7-flash",displayName:"GLM-4.7-Flash",provider:"amazon-bedrock",contextWindow:200000,outputLimit:131072},{id:"us.anthropic.claude-opus-4-7",displayName:"Claude Opus 4.7 (US)",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"amazon.nova-2-lite-v1:0",displayName:"Nova 2 Lite",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"anthropic.claude-opus-4-5-20251101-v1:0",displayName:"Claude Opus 4.5",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"qwen.qwen3-coder-480b-a35b-v1:0",displayName:"Qwen3 Coder 480B A35B Instruct",provider:"amazon-bedrock",contextWindow:131072,outputLimit:65536},{id:"meta.llama3-2-1b-instruct-v1:0",displayName:"Llama 3.2 1B Instruct",provider:"amazon-bedrock",contextWindow:131000,outputLimit:4096},{id:"amazon.nova-lite-v1:0",displayName:"Nova Lite",provider:"amazon-bedrock",contextWindow:300000,outputLimit:8192},{id:"meta.llama3-1-8b-instruct-v1:0",displayName:"Llama 3.1 8B Instruct",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"anthropic.claude-opus-4-7",displayName:"Claude Opus 4.7",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"google.gemma-3-27b-it",displayName:"Google Gemma 3 27B Instruct",provider:"amazon-bedrock",contextWindow:202752,outputLimit:8192},{id:"global.anthropic.claude-haiku-4-5-20251001-v1:0",displayName:"Claude Haiku 4.5 (Global)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"google.gemma-3-4b-it",displayName:"Gemma 3 4B IT",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"meta.llama4-scout-17b-instruct-v1:0",displayName:"Llama 4 Scout 17B Instruct",provider:"amazon-bedrock",contextWindow:3500000,outputLimit:16384},{id:"deepseek.v3-v1:0",displayName:"DeepSeek-V3.1",provider:"amazon-bedrock",contextWindow:163840,outputLimit:81920},{id:"mistral.magistral-small-2509",displayName:"Magistral Small 1.2",provider:"amazon-bedrock",contextWindow:128000,outputLimit:40000},{id:"qwen.qwen3-next-80b-a3b",displayName:"Qwen/Qwen3-Next-80B-A3B-Instruct",provider:"amazon-bedrock",contextWindow:262000,outputLimit:262000},{id:"zai.glm-4.7",displayName:"GLM-4.7",provider:"amazon-bedrock",contextWindow:204800,outputLimit:131072},{id:"moonshot.kimi-k2-thinking",displayName:"Kimi K2 Thinking",provider:"amazon-bedrock",contextWindow:256000,outputLimit:256000},{id:"us.anthropic.claude-opus-4-5-20251101-v1:0",displayName:"Claude Opus 4.5 (US)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"mistral.ministral-3-14b-instruct",displayName:"Ministral 14B 3.0",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"anthropic.claude-3-haiku-20240307-v1:0",displayName:"Claude Haiku 3",provider:"amazon-bedrock",contextWindow:200000,outputLimit:4096},{id:"deepseek.r1-v1:0",displayName:"DeepSeek-R1",provider:"amazon-bedrock",contextWindow:128000,outputLimit:32768},{id:"meta.llama3-1-405b-instruct-v1:0",displayName:"Llama 3.1 405B Instruct",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"mistral.voxtral-mini-3b-2507",displayName:"Voxtral Mini 3B 2507",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"openai.gpt-oss-120b-1:0",displayName:"gpt-oss-120b",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"nvidia.nemotron-nano-12b-v2",displayName:"NVIDIA Nemotron Nano 12B v2 VL BF16",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"eu.anthropic.claude-opus-4-7",displayName:"Claude Opus 4.7 (EU)",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"minimax.minimax-m2.5",displayName:"MiniMax M2.5",provider:"amazon-bedrock",contextWindow:196608,outputLimit:98304},{id:"meta.llama3-3-70b-instruct-v1:0",displayName:"Llama 3.3 70B Instruct",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"meta.llama3-1-70b-instruct-v1:0",displayName:"Llama 3.1 70B Instruct",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"meta.llama3-2-3b-instruct-v1:0",displayName:"Llama 3.2 3B Instruct",provider:"amazon-bedrock",contextWindow:131000,outputLimit:4096},{id:"eu.anthropic.claude-sonnet-4-5-20250929-v1:0",displayName:"Claude Sonnet 4.5 (EU)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"eu.anthropic.claude-opus-4-5-20251101-v1:0",displayName:"Claude Opus 4.5 (EU)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"meta.llama3-2-11b-instruct-v1:0",displayName:"Llama 3.2 11B Instruct",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"moonshotai.kimi-k2.5",displayName:"Kimi K2.5",provider:"amazon-bedrock",contextWindow:256000,outputLimit:256000},{id:"au.anthropic.claude-sonnet-4-6",displayName:"AU Anthropic Claude Sonnet 4.6",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"openai.gpt-oss-safeguard-20b",displayName:"GPT OSS Safeguard 20B",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"qwen.qwen3-coder-30b-a3b-v1:0",displayName:"Qwen3 Coder 30B A3B Instruct",provider:"amazon-bedrock",contextWindow:262144,outputLimit:131072},{id:"minimax.minimax-m2.1",displayName:"MiniMax M2.1",provider:"amazon-bedrock",contextWindow:204800,outputLimit:131072},{id:"qwen.qwen3-vl-235b-a22b",displayName:"Qwen/Qwen3-VL-235B-A22B-Instruct",provider:"amazon-bedrock",contextWindow:262000,outputLimit:262000},{id:"qwen.qwen3-coder-next",displayName:"Qwen3 Coder Next",provider:"amazon-bedrock",contextWindow:131072,outputLimit:65536},{id:"nvidia.nemotron-nano-9b-v2",displayName:"NVIDIA Nemotron Nano 9B v2",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"mistral.mistral-large-3-675b-instruct",displayName:"Mistral Large 3",provider:"amazon-bedrock",contextWindow:256000,outputLimit:8192},{id:"qwen.qwen3-235b-a22b-2507-v1:0",displayName:"Qwen3 235B A22B 2507",provider:"amazon-bedrock",contextWindow:262144,outputLimit:131072},{id:"anthropic.claude-3-7-sonnet-20250219-v1:0",displayName:"Claude Sonnet 3.7",provider:"amazon-bedrock",contextWindow:200000,outputLimit:8192},{id:"writer.palmyra-x4-v1:0",displayName:"Palmyra X4",provider:"amazon-bedrock",contextWindow:122880,outputLimit:8192},{id:"anthropic.claude-opus-4-1-20250805-v1:0",displayName:"Claude Opus 4.1",provider:"amazon-bedrock",contextWindow:200000,outputLimit:32000},{id:"anthropic.claude-3-5-sonnet-20240620-v1:0",displayName:"Claude Sonnet 3.5",provider:"amazon-bedrock",contextWindow:200000,outputLimit:8192},{id:"eu.anthropic.claude-opus-4-6-v1",displayName:"Claude Opus 4.6 (EU)",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"eu.anthropic.claude-sonnet-4-20250514-v1:0",displayName:"Claude Sonnet 4 (EU)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"us.anthropic.claude-opus-4-20250514-v1:0",displayName:"Claude Opus 4 (US)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:32000},{id:"anthropic.claude-sonnet-4-6",displayName:"Claude Sonnet 4.6",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:64000},{id:"us.anthropic.claude-sonnet-4-20250514-v1:0",displayName:"Claude Sonnet 4 (US)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"global.anthropic.claude-sonnet-4-6",displayName:"Claude Sonnet 4.6 (Global)",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:64000},{id:"us.anthropic.claude-sonnet-4-6",displayName:"Claude Sonnet 4.6 (US)",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:64000},{id:"global.anthropic.claude-opus-4-6-v1",displayName:"Claude Opus 4.6 (Global)",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"us.anthropic.claude-opus-4-6-v1",displayName:"Claude Opus 4.6 (US)",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"us.anthropic.claude-opus-4-1-20250805-v1:0",displayName:"Claude Opus 4.1 (US)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:32000},{id:"global.anthropic.claude-sonnet-4-20250514-v1:0",displayName:"Claude Sonnet 4 (Global)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"eu.anthropic.claude-sonnet-4-6",displayName:"Claude Sonnet 4.6 (EU)",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:64000},{id:"anthropic.claude-opus-4-20250514-v1:0",displayName:"Claude Opus 4",provider:"amazon-bedrock",contextWindow:200000,outputLimit:32000},{id:"anthropic.claude-sonnet-4-20250514-v1:0",displayName:"Claude Sonnet 4",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"anthropic.claude-opus-4-6-v1",displayName:"Claude Opus 4.6",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"anthropic.claude-3-5-haiku-20241022-v1:0",displayName:"Claude Haiku 3.5",provider:"amazon-bedrock",contextWindow:200000,outputLimit:8192},{id:"gpt-5.2-chat",displayName:"GPT-5.2 Chat",provider:"azure",contextWindow:128000,outputLimit:16384},{id:"codex-mini",displayName:"Codex Mini",provider:"azure",contextWindow:200000,outputLimit:1e5},{id:"phi-4-multimodal",displayName:"Phi-4-multimodal",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"phi-3.5-mini-instruct",displayName:"Phi-3.5-mini-instruct",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"llama-4-scout-17b-16e-instruct",displayName:"Llama 4 Scout 17B 16E Instruct",provider:"azure",contextWindow:128000,outputLimit:8192},{id:"grok-4-1-fast-reasoning",displayName:"Grok 4.1 Fast (Reasoning)",provider:"azure",contextWindow:128000,outputLimit:8192},{id:"phi-3-medium-4k-instruct",displayName:"Phi-3-medium-instruct (4k)",provider:"azure",contextWindow:4096,outputLimit:1024},{id:"ministral-3b",displayName:"Ministral 3B",provider:"azure",contextWindow:128000,outputLimit:8192},{id:"meta-llama-3.1-8b-instruct",displayName:"Meta-Llama-3.1-8B-Instruct",provider:"azure",contextWindow:128000,outputLimit:32768},{id:"llama-3.3-70b-instruct",displayName:"Llama-3.3-70B-Instruct",provider:"azure",contextWindow:128000,outputLimit:32768},{id:"deepseek-v3-0324",displayName:"DeepSeek-V3-0324",provider:"azure",contextWindow:131072,outputLimit:131072},{id:"gpt-5-chat",displayName:"GPT-5 Chat",provider:"azure",contextWindow:128000,outputLimit:16384},{id:"phi-3.5-moe-instruct",displayName:"Phi-3.5-MoE-instruct",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"gpt-5.3-chat",displayName:"GPT-5.3 Chat",provider:"azure",contextWindow:128000,outputLimit:16384},{id:"phi-3-mini-128k-instruct",displayName:"Phi-3-mini-instruct (128k)",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"phi-4-reasoning",displayName:"Phi-4-reasoning",provider:"azure",contextWindow:32000,outputLimit:4096},{id:"meta-llama-3-70b-instruct",displayName:"Meta-Llama-3-70B-Instruct",provider:"azure",contextWindow:8192,outputLimit:2048},{id:"phi-3-small-8k-instruct",displayName:"Phi-3-small-instruct (8k)",provider:"azure",contextWindow:8192,outputLimit:2048},{id:"llama-3.2-90b-vision-instruct",displayName:"Llama-3.2-90B-Vision-Instruct",provider:"azure",contextWindow:128000,outputLimit:8192},{id:"deepseek-r1",displayName:"DeepSeek-R1",provider:"azure",contextWindow:163840,outputLimit:163840},{id:"deepseek-v3.2-speciale",displayName:"DeepSeek-V3.2-Speciale",provider:"azure",contextWindow:128000,outputLimit:128000},{id:"cohere-command-a",displayName:"Command A",provider:"azure",contextWindow:256000,outputLimit:8000},{id:"llama-3.2-11b-vision-instruct",displayName:"Llama-3.2-11B-Vision-Instruct",provider:"azure",contextWindow:128000,outputLimit:8192},{id:"meta-llama-3.1-405b-instruct",displayName:"Meta-Llama-3.1-405B-Instruct",provider:"azure",contextWindow:128000,outputLimit:32768},{id:"gpt-5.1-chat",displayName:"GPT-5.1 Chat",provider:"azure",contextWindow:128000,outputLimit:16384},{id:"gpt-4-turbo-vision",displayName:"GPT-4 Turbo Vision",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"cohere-embed-v-4-0",displayName:"Embed v4",provider:"azure",contextWindow:128000,outputLimit:1536},{id:"gpt-3.5-turbo-0125",displayName:"GPT-3.5 Turbo 0125",provider:"azure",contextWindow:16384,outputLimit:16384},{id:"cohere-embed-v3-multilingual",displayName:"Embed v3 Multilingual",provider:"azure",contextWindow:512,outputLimit:1024},{id:"grok-4-20-non-reasoning",displayName:"Grok 4.20 (Non-Reasoning)",provider:"azure",contextWindow:262000,outputLimit:8192},{id:"grok-4-fast-reasoning",displayName:"Grok 4 Fast (Reasoning)",provider:"azure",contextWindow:2000000,outputLimit:30000},{id:"mistral-small-2503",displayName:"Mistral Small 3.1",provider:"azure",contextWindow:128000,outputLimit:32768},{id:"model-router",displayName:"Model Router",provider:"azure",contextWindow:128000,outputLimit:16384},{id:"gpt-3.5-turbo-1106",displayName:"GPT-3.5 Turbo 1106",provider:"azure",contextWindow:16384,outputLimit:16384},{id:"deepseek-v3.1",displayName:"DeepSeek-V3.1",provider:"azure",contextWindow:131072,outputLimit:131072},{id:"phi-3-mini-4k-instruct",displayName:"Phi-3-mini-instruct (4k)",provider:"azure",contextWindow:4096,outputLimit:1024},{id:"meta-llama-3.1-70b-instruct",displayName:"Meta-Llama-3.1-70B-Instruct",provider:"azure",contextWindow:128000,outputLimit:32768},{id:"phi-4-mini-reasoning",displayName:"Phi-4-mini-reasoning",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"meta-llama-3-8b-instruct",displayName:"Meta-Llama-3-8B-Instruct",provider:"azure",contextWindow:8192,outputLimit:2048},{id:"phi-4-mini",displayName:"Phi-4-mini",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"grok-4-20-reasoning",displayName:"Grok 4.20 (Reasoning)",provider:"azure",contextWindow:262000,outputLimit:8192},{id:"gpt-3.5-turbo-0301",displayName:"GPT-3.5 Turbo 0301",provider:"azure",contextWindow:4096,outputLimit:4096},{id:"phi-3-small-128k-instruct",displayName:"Phi-3-small-instruct (128k)",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"deepseek-v3.2",displayName:"DeepSeek-V3.2",provider:"azure",contextWindow:128000,outputLimit:128000},{id:"phi-3-medium-128k-instruct",displayName:"Phi-3-medium-instruct (128k)",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"gpt-3.5-turbo-0613",displayName:"GPT-3.5 Turbo 0613",provider:"azure",contextWindow:16384,outputLimit:16384},{id:"phi-4",displayName:"Phi-4",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"gpt-4-32k",displayName:"GPT-4 32K",provider:"azure",contextWindow:32768,outputLimit:32768},{id:"cohere-embed-v3-english",displayName:"Embed v3 English",provider:"azure",contextWindow:512,outputLimit:1024},{id:"phi-4-reasoning-plus",displayName:"Phi-4-reasoning-plus",provider:"azure",contextWindow:32000,outputLimit:4096},{id:"gpt-3.5-turbo-instruct",displayName:"GPT-3.5 Turbo Instruct",provider:"azure",contextWindow:4096,outputLimit:4096},{id:"deepseek-r1-0528",displayName:"DeepSeek-R1-0528",provider:"azure",contextWindow:163840,outputLimit:163840},{id:"codestral-2501",displayName:"Codestral 25.01",provider:"azure",contextWindow:256000,outputLimit:256000},{id:"llama-4-maverick-17b-128e-instruct-fp8",displayName:"Llama 4 Maverick 17B 128E Instruct FP8",provider:"azure",contextWindow:128000,outputLimit:8192},{id:"mai-ds-r1",displayName:"MAI-DS-R1",provider:"azure",contextWindow:128000,outputLimit:8192},{id:"cohere-command-r-08-2024",displayName:"Command R",provider:"azure",contextWindow:128000,outputLimit:4000},{id:"cohere-command-r-plus-08-2024",displayName:"Command R+",provider:"azure",contextWindow:128000,outputLimit:4000}]});import{join as Gc}from"path";import{homedir as Sc}from"os";function Ve(){return Cc??Gc(Sc(),".tako","models-cache.json")}function Bd(i){Pn.clear();for(let o of i)if(!Pn.has(o.id))Pn.set(o.id,o)}function Ic(){try{let o=$("fs").readFileSync(Ve(),"utf-8"),n=JSON.parse(o);if(typeof n?.fetchedAt!=="number"||!Array.isArray(n?.entries))return null;return n}catch{return null}}async function Qc(i){try{let o=await import("fs/promises"),n=Ve(),d=n.slice(0,n.lastIndexOf("/"));if(d)await o.mkdir(d,{recursive:!0}).catch(()=>{});await o.writeFile(n,JSON.stringify(i),"utf-8")}catch{}}function Ni(){if(Cn)return;Cn=!0;let i=Ic();if(i&&Date.now()-i.fetchedAt<Pc){Bd(i.entries);return}Bd(ci)}async function Yd(){try{let i=await Ke();if(!i.length)return;Bd(i),await Qc({fetchedAt:Date.now(),entries:i}),Cn=!0}catch{}}function Te(i){let o=i.match(/^(.+?)(?:\[1m\]|:1m)$/i),n=o?o[1]:i,d=n.match(/^[^\/]+\/(.+)$/);return{lookupId:d?d[1]:n,is1m:!!o}}function Ad(i){if(!Cn)Ni();let{lookupId:o,is1m:n}=Te(i),d=Pn.get(o);if(!d)return;if(n)return{...d,contextWindow:1e6};return d}var Pc=86400000,Cc=null,Pn,Cn=!1;var Fe=N(()=>{Sn();Pn=new Map});import{join as qc}from"path";function _e(){return Rc??qc(Q,"tako-models-cache.json")}function Hd(i,o){return`${i.replace(/\/+$/,"")}#${o}`}function Zd(){if(Ee)return;Ee=!0;try{let i=$("fs"),o=JSON.parse(i.readFileSync(_e(),"utf-8"));if(o?.version!==1||typeof o.buckets!=="object")return;for(let[n,d]of Object.entries(o.buckets))if(typeof d?.fetchedAt==="number"&&Array.isArray(d.entries))Vo.set(n,d)}catch{}}async function Bc(){try{let i=await import("fs/promises"),o=_e(),n=o.slice(0,o.lastIndexOf("/"));if(n)await i.mkdir(n,{recursive:!0}).catch(()=>{});let d={version:1,buckets:Object.fromEntries(Vo)};await i.writeFile(o,JSON.stringify(d),"utf-8")}catch{}}function Yc(i){let o=i?.models;if(!Array.isArray(o))return[];let n=[];for(let d of o){let e=d?.slug;if(typeof e!=="string"||!e)continue;n.push({id:e,displayName:d.display_name||e,description:d.description||"",contextWindow:typeof d.context_window==="number"?d.context_window:0,sortOrder:typeof d.priority==="number"?d.priority:0,category:typeof d.model_category==="string"&&d.model_category?d.model_category:"chat"})}return n.sort((d,e)=>d.sortOrder-e.sortOrder||d.id.localeCompare(e.id)),n}function To(i){return i.filter((o)=>!o.category||o.category==="chat")}function Xi(i,o){return Zd(),Vo.get(Hd(i,o))?.entries??null}async function In(i,o,n){Zd();let d=Hd(i,n),e=Xd.get(d);if(e)return e;let u=(async()=>{try{let r=i.replace(/\/+$/,"")+`/v1/models?client_version=tako-cli&api_type=${n}`,t=await fetch(r,{headers:{Authorization:`Bearer ${o}`},signal:AbortSignal.timeout(Jc)});if(!t.ok)return;let c=await t.json(),a=Yc(c);if(a.length===0)return;Vo.set(d,{fetchedAt:Date.now(),entries:a}),await Bc()}catch{}finally{Xd.delete(d)}})();return Xd.set(d,u),u}function Kd(i){Zd();let o=Date.now(),n=[];for(let d of i){if(d.type!=="tako"&&d.type!=="custom")continue;if(!d.apiKey||!d.baseUrl)continue;for(let e of["openai","claude"]){let u=Vo.get(Hd(d.baseUrl,e));if(u&&o-u.fetchedAt<Oc)continue;let r=In(d.baseUrl,d.apiKey,e);if(!u)n.push(r)}}return Promise.all(n).then(()=>{return})}var Oc=3600000,Jc=8000,Rc=null,Vo,Ee=!1,Xd;var Vd=N(()=>{C();Vo=new Map,Xd=new Map});var vo=N(()=>{Fe();Vd()});import{homedir as Ac}from"os";import{join as Fd}from"path";function iu(i,o){let n={...i};for(let[d,e]of Object.entries(o))if(e&&typeof e==="object"&&!Array.isArray(e)&&n[d]&&typeof n[d]==="object"&&!Array.isArray(n[d]))n[d]=iu(n[d],e);else n[d]=e;return n}function Xc(i){if(i.model_providers?.crs)delete i.model_providers.crs;if(i.model_provider==="crs")delete i.model_provider;if(i.openai_base_url)delete i.openai_base_url;let o=i.model_providers?.tako;if(o)delete o.wire_api,delete o.request_max_retries,delete o.stream_max_retries,delete o.api_key,delete o.env_key;return i}function je(i){if(i.model_providers?.tako)delete i.model_providers.tako.supports_websockets;if(i.features){if(delete i.features.multi_agent,delete i.features.responses_websockets_v2,Object.keys(i.features).length===0)delete i.features}}async function Hc(i,o){let n=await import("fs/promises");try{await n.mkdir(Ed,{recursive:!0})}catch{}let d={};try{d=Qd(await n.readFile(Ue,"utf-8"))}catch{}if(d=Xc(d),i.type==="codex-subscription")if(delete d.model_provider,d.check_for_update_on_startup=!1,d.remote_compaction_v2=!1,je(d),i.authData)await Bun.write(De,JSON.stringify(i.authData,null,2)+`
267
+ `);else await Bun.write(De,JSON.stringify({OPENAI_API_KEY:null,auth_mode:"chatgpt"},null,2)+`
268
+ `);else{let e;if(i.type==="tako")e=`${A}/v1`;else if(i.type==="deepseek")e="https://api.deepseek.com/v1";else e=`${i.baseUrl}/v1`;let r=o?.find((l)=>l.startsWith("model-"))?.slice(6)||i.model||"gpt-5.5",t=/^gpt[-.]/i.test(r),c;if(!t){if(c=ci.find((x)=>x.id===r)?.contextWindow,!c&&(i.type==="tako"||i.type==="custom")&&i.baseUrl){let x=Xi(i.baseUrl,"openai")?.find((w)=>w.id===r);if(x&&x.contextWindow>0)c=x.contextWindow}if(!c)c=i.modelContextWindow}else delete d.model_context_window;let a={name:"tako",base_url:e,requires_openai_auth:!0};if(i.apiKey)a.experimental_bearer_token=i.apiKey;je(d);let p={model_provider:"tako",model:r,check_for_update_on_startup:!1,remote_compaction_v2:!1,model_providers:{tako:a}};if(c)p.model_context_window=c;d=iu(d,p)}await Bun.write(Ue,Rd(d))}function Td(i){if(i>=1e6)return"1M";if(i>0)return`${Math.round(i/1000)}k`;return"?"}function Fc(i){if(!i.baseUrl)return null;let o=Xi(i.baseUrl,"openai");if(!o||o.length===0)return null;let n=To(o);if(n.length===0)return null;return n.map((d)=>({id:`model-${d.id}`,label:{en:d.displayName,zh:d.displayName},shortLabel:d.displayName,description:{en:`Use ${d.displayName} (${Td(d.contextWindow)} ctx)`,zh:`\u4F7F\u7528 ${d.displayName}\uFF08\u4E0A\u4E0B\u6587 ${Td(d.contextWindow)}\uFF09`},flag:`--model ${d.id}`,args:["--model",d.id],group:"model"}))}function Ec(i){if(Ni(),i&&(i.type==="tako"||i.type==="custom")){let d=Fc(i);if(d)return d}let o=i?.type==="deepseek"?Tc:Vc,n=[];for(let d of o){let e=ci.find((t)=>t.id===d),u=Td(e?.contextWindow??0),r=e?.displayName??d;n.push({id:`model-${d}`,label:{en:r,zh:r},shortLabel:r,description:{en:`Use ${r} (${u} ctx)`,zh:`\u4F7F\u7528 ${r}\uFF08\u4E0A\u4E0B\u6587 ${u}\uFF09`},flag:`--model ${d}`,args:["--model",d],group:"model"})}return n}function _c(i){return[...Kc,...Ec(i)]}var Ed,Ue,De,Zc,Kc,Vc,Tc;var ou=N(()=>{E();C();Ze();vo();Sn();Ed=Fd(Ac(),".codex"),Ue=Fd(Ed,"config.toml"),De=Fd(Ed,"auth.json");Zc={id:"codex",name:"Codex",package:"@openai/codex",command:"codex",runtime:"bun",continueArg:"--continue",brandColor:"blue",getEnvVars(i){return{}},setupConfigFiles:Hc,launchOptions:(i)=>_c(i)},Kc=[{id:"search",label:{en:"Web Search",zh:"\u7F51\u7EDC\u641C\u7D22"},shortLabel:"Search",description:{en:"Enable real-time web search",zh:"\u542F\u7528\u5B9E\u65F6\u7F51\u9875\u641C\u7D22"},flag:"--search",args:["--search"]},{id:"bypass-sandbox",label:{en:"Bypass Sandbox",zh:"\u7ED5\u8FC7\u5BA1\u6279\u4E0E\u6C99\u7BB1"},shortLabel:"Bypass",description:{en:"DANGEROUS: skip all approvals & sandbox (use only in disposable envs)",zh:"\u5371\u9669\uFF1A\u8DF3\u8FC7\u6240\u6709\u5BA1\u6279\u4E0E\u6C99\u7BB1\u9650\u5236\uFF08\u4EC5\u9650\u9694\u79BB/\u4E34\u65F6\u73AF\u5883\u4F7F\u7528\uFF09"},flag:"--dangerously-bypass-approvals-and-sandbox",args:["--dangerously-bypass-approvals-and-sandbox"]}],Vc=["gpt-5.5","gpt-5.4","gpt-5.3-codex","gpt-5.3"],Tc=["deepseek-v4-flash","deepseek-v4-pro"];yo(Zc)});function di(i){switch(i){case"claude-subscription":return["claude-code"];case"codex-subscription":return["codex"];case"anthropic":return["claude-code"];case"deepseek":return["claude-code","codex"];case"xiaomi":return["claude-code"];case"custom":return["claude-code","codex"];case"tako":default:return}}function Fo(i){switch(i){case"deepseek":return"deepseek-v4-flash";case"xiaomi":return"mimo-v2.5-pro";case"tako":return;default:return}}function _d(i){switch(i){case"deepseek":return"https://api.deepseek.com";case"xiaomi":return Dd;default:return}}function jd(i){return i?.startsWith("tp-")?nu:Dd}function Eo(i){switch(i){case"deepseek":return["deepseek-v4-flash","deepseek-v4-pro"];case"xiaomi":return Dc;case"tako":case"anthropic":return Uc;default:return}}function Hi(i,o){let n=i.supportedClients;if(!n||n.length===0)return!0;return n.includes(o)}var io,Ud="https://api.deepseek.com/anthropic",Dd="https://api.xiaomimimo.com/anthropic",nu="https://token-plan-cn.xiaomimimo.com/anthropic",Uc,Dc;var Si=N(()=>{io={"claude-subscription":{en:"Claude Subscription",zh:"Claude \u8BA2\u9605\u76F4\u8FDE"},"codex-subscription":{en:"Codex Subscription",zh:"Codex \u8BA2\u9605\u76F4\u8FDE"},tako:{en:"Tako Proxy",zh:"Tako \u4EE3\u7406"},anthropic:{en:"Anthropic Direct",zh:"Anthropic \u76F4\u8FDE"},deepseek:{en:"DeepSeek",zh:"DeepSeek"},xiaomi:{en:"Xiaomi MiMo",zh:"\u5C0F\u7C73 MiMo"},custom:{en:"Custom Proxy",zh:"\u81EA\u5B9A\u4E49\u4EE3\u7406"}};Uc=["claude-sonnet-4-6","claude-opus-4-6","claude-opus-4-7"],Dc=["mimo-v2.5-pro"]});var eu={};ii(eu,{spinner:()=>na,setLogHandler:()=>ia,resetLogHandler:()=>oa,log:()=>L,createSpinner:()=>oo});function jc(i){let o=!!process.stderr.isTTY,n=(e)=>process.stderr.write(e),d=i;if(o)n(`\u23F3 ${i}`);else n(`\u23F3 ${i}
269
269
  `);return{update(e){if(e===d)return;if(d=e,o)n(`\r\x1B[2K\u23F3 ${e}`);else n(`\u23F3 ${e}
270
270
  `)},stop(e){if(o)n("\r\x1B[2K");if(e)n(`\u2713 ${e}
271
- `)}}}function Uc(i){Pi=i}function Dc(){Pi=ou}function jc(){return{start(i){return Pi.spin(i)}}}function oo(){let i=null;return{start(o){i=Pi.spin(o)},stop(o){i?.stop(o),i=null},update(o){i?.update(o)}}}var ou,Pi,L;var Ci=N(()=>{ou={info:(i)=>console.log(`\u2139 ${i}`),warn:(i)=>console.log(`\u26A0 ${i}`),error:(i)=>console.error(`\u2717 ${i}`),success:(i)=>console.log(`\u2713 ${i}`),spin:_c},Pi=ou;L={info:(i)=>Pi.info(i),warn:(i)=>Pi.warn(i),error:(i)=>Pi.error(i),success:(i)=>Pi.success(i),message:(i)=>Pi.info(i),debug:(i)=>{if(process.env.TAKO_DEV)process.stderr.write(`[debug] ${i}
272
- `)}}});var du={};ii(du,{t:()=>g,setLocale:()=>Dd,getLocale:()=>Ii,detectLocale:()=>no,clearLocaleOverride:()=>ia});function no(){if(In)return In;let i=process.env.LANG||process.env.LANGUAGE||process.env.LC_ALL||"";if(i.toLowerCase().includes("zh")||i.toLowerCase().includes("chinese"))return"zh";try{if(Intl.DateTimeFormat().resolvedOptions().locale.toLowerCase().startsWith("zh"))return"zh"}catch{}return"zh"}function Dd(i){In=i}function ia(){In=null}function g(i,o){let n=no(),d=i.split("."),e=oa;for(let r of d)if(e=e?.[r],!e)return i;let u=e[n]||e.en||i;if(o)for(let[r,t]of Object.entries(o))u=u.replace(`{${r}}`,String(t));return u}function Ii(){return no()}var In=null,oa;var H=N(()=>{oa={launcher:{starting:{en:"Starting {client}...",zh:"\u6B63\u5728\u542F\u52A8 {client}..."},directoryNotFound:{en:"Directory not found: {path}",zh:"\u76EE\u5F55\u4E0D\u5B58\u5728\uFF1A{path}"},apiKeyNotConfigured:{en:"API Key not configured",zh:"API Key \u672A\u914D\u7F6E"},error:{en:"Error: {message}",zh:"\u9519\u8BEF\uFF1A{message}"}},menu:{selectAction:{en:"Select an action:",zh:"\u8BF7\u9009\u62E9\u64CD\u4F5C\uFF1A"},launchClient:{en:"Launch {client}",zh:"\u542F\u52A8 {client}"},advanced:{en:"Advanced",zh:"\u9AD8\u7EA7"},advancedHint:{en:"Usage stats, configuration, etc.",zh:"\u7528\u91CF\u7EDF\u8BA1\u3001\u914D\u7F6E\u7B49"},exit:{en:"Exit",zh:"\u9000\u51FA"},advancedOptions:{en:"Advanced Options:",zh:"\u9AD8\u7EA7\u9009\u9879\uFF1A"},viewStats:{en:"View Usage Statistics",zh:"\u67E5\u770B\u7528\u91CF\u7EDF\u8BA1"},configApiKey:{en:"Configure API Key",zh:"\u914D\u7F6E API Key"},back:{en:"Back",zh:"\u8FD4\u56DE"},changeLanguage:{en:"Change Language",zh:"\u5207\u6362\u8BED\u8A00"},currentLanguage:{en:"Current Language: {lang}",zh:"\u5F53\u524D\u8BED\u8A00\uFF1A{lang}"},languageChanged:{en:"Language changed to {lang}",zh:"\u8BED\u8A00\u5DF2\u5207\u6362\u4E3A {lang}"},selectOptions:{en:"Select launch options (Space to toggle, Enter to confirm):",zh:"\u9009\u62E9\u542F\u52A8\u9009\u9879\uFF08\u7A7A\u683C\u5207\u6362\uFF0C\u56DE\u8F66\u786E\u8BA4\uFF09\uFF1A"},resetOptions:{en:"Reset Launch Options",zh:"\u91CD\u7F6E\u542F\u52A8\u9009\u9879"},optionsReset:{en:"Launch options have been reset. You will be prompted again next time.",zh:"\u542F\u52A8\u9009\u9879\u5DF2\u91CD\u7F6E\uFF0C\u4E0B\u6B21\u542F\u52A8\u65F6\u5C06\u91CD\u65B0\u9009\u62E9\u3002"}},language:{en:{en:"English",zh:"\u82F1\u8BED"},zh:{en:"Chinese",zh:"\u4E2D\u6587"}},banner:{welcome:{en:"Welcome!",zh:"\u6B22\u8FCE\u4F7F\u7528\uFF01"}},stats:{title:{en:"\uD83D\uDCCA Usage Statistics",zh:"\uD83D\uDCCA \u7528\u91CF\u7EDF\u8BA1"},totalRequests:{en:"Total Requests: {count} times",zh:"\u603B\u8C03\u7528\u6B21\u6570\uFF1A{count} \u6B21"},totalCost:{en:"Total Cost: {cost}",zh:"\u603B\u6D88\u8D39\uFF1A{cost}"},todayCost:{en:"Today's Cost: {cost}",zh:"\u4ECA\u65E5\u6D88\u8D39\uFF1A{cost}"},modelDistribution:{en:"Model Usage Distribution (Today):",zh:"\u6A21\u578B\u4F7F\u7528\u5206\u5E03\uFF08\u4ECA\u65E5\uFF09\uFF1A"},times:{en:"times",zh:"\u6B21"},refreshHint:{en:"{countdown}s until refresh | Press any key to return",zh:"{countdown}s \u540E\u5237\u65B0 | \u6309\u4EFB\u610F\u952E\u8FD4\u56DE"},fetching:{en:"Fetching usage statistics...",zh:"\u83B7\u53D6\u7528\u91CF\u7EDF\u8BA1..."},fetchFailed:{en:"Failed to fetch: {error}",zh:"\u83B7\u53D6\u5931\u8D25\uFF1A{error}"}},prompts:{enterApiKey:{en:"Please enter your API Key:",zh:"\u8BF7\u8F93\u5165\u60A8\u7684 API Key\uFF1A"},apiKeyPlaceholder:{en:"cr_xxxxxxxx",zh:"cr_xxxxxxxx"},validating:{en:"Validating API Key...",zh:"\u6B63\u5728\u9A8C\u8BC1 API Key..."},keyInvalidFormat:{en:"Invalid format, must start with cr_",zh:"\u683C\u5F0F\u4E0D\u6B63\u786E\uFF0C\u5FC5\u987B\u4EE5 cr_ \u5F00\u5934"},keyValidationFailed:{en:"Validation failed: {error}",zh:"\u9A8C\u8BC1\u5931\u8D25\uFF1A{error}"},keyConfigured:{en:"API Key configured successfully!",zh:"API Key \u914D\u7F6E\u6210\u529F\uFF01"}},cli:{version:{en:"Tako CLI v{version}",zh:"Tako CLI v{version}"},usage:{en:"Usage: tako [options] [command]",zh:"\u7528\u6CD5\uFF1Atako [\u9009\u9879] [\u547D\u4EE4]"},options:{en:"Options:",zh:"\u9009\u9879\uFF1A"},optionVersion:{en:" -v, --version Display version number",zh:" -v, --version \u663E\u793A\u7248\u672C\u53F7"},optionHelp:{en:" -h, --help Display help information",zh:" -h, --help \u663E\u793A\u5E2E\u52A9\u4FE1\u606F"},shortcuts:{en:"Shortcuts:",zh:"\u5FEB\u6377\u547D\u4EE4\uFF1A"},shortcutClaude:{en:" --claude [args...] Launch Claude Code (passes extra args through, e.g. --model)",zh:" --claude [\u53C2\u6570...] \u542F\u52A8 Claude Code\uFF08\u989D\u5916\u53C2\u6570\u900F\u4F20\u7ED9 claude\uFF0C\u5982 --model\uFF09"},shortcutCodex:{en:" --codex [args...] Launch Codex (passes extra args through)",zh:" --codex [\u53C2\u6570...] \u542F\u52A8 Codex\uFF08\u989D\u5916\u53C2\u6570\u900F\u4F20\u7ED9 codex\uFF09"},shortcutGemini:{en:" --gemini [args...] Launch Gemini CLI (passes extra args through)",zh:" --gemini [\u53C2\u6570...] \u542F\u52A8 Gemini CLI\uFF08\u989D\u5916\u53C2\u6570\u900F\u4F20\u7ED9 gemini\uFF09"},examples:{en:"Examples:",zh:"\u793A\u4F8B\uFF1A"},exampleInteractive:{en:" tako Interactive tool selection",zh:" tako \u4EA4\u4E92\u5F0F\u9009\u62E9\u5DE5\u5177"},exampleClaude:{en:" tako --claude Launch Claude Code directly",zh:" tako --claude \u76F4\u63A5\u542F\u52A8 Claude Code"},exampleClaudeModel:{en:" tako --claude --model claude-opus-4-7 Launch Claude Code with a specific model",zh:" tako --claude --model claude-opus-4-7 \u6307\u5B9A\u6A21\u578B\u542F\u52A8 Claude Code"},exampleCodex:{en:" tako --codex Launch Codex directly",zh:" tako --codex \u76F4\u63A5\u542F\u52A8 Codex"},exampleGemini:{en:" tako --gemini Launch Gemini CLI directly",zh:" tako --gemini \u76F4\u63A5\u542F\u52A8 Gemini CLI"},clientNotFound:{en:"{client} client not found",zh:"{client} \u5BA2\u6237\u7AEF\u672A\u627E\u5230"},cliError:{en:"Tako CLI encountered an error:",zh:"Tako CLI \u53D1\u751F\u9519\u8BEF\uFF1A"},launchFailed:{en:"Launch failed",zh:"\u542F\u52A8\u5931\u8D25"}},auth:{invalidFormat:{en:"Invalid format, must start with cr_",zh:"\u683C\u5F0F\u4E0D\u6B63\u786E\uFF0C\u5FC5\u987B\u4EE5 cr_ \u5F00\u5934"},validationFailed:{en:"Validation failed",zh:"\u9A8C\u8BC1\u5931\u8D25"},networkError:{en:"Network request failed",zh:"\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25"}},updater:{migrating:{en:"Detected old installation, migrating...",zh:"\u68C0\u6D4B\u5230\u65E7\u7248\u5B89\u88C5\u65B9\u5F0F\uFF0C\u6B63\u5728\u8FC1\u79FB..."},installingLocally:{en:"Installing to local directory...",zh:"\u6B63\u5728\u5B89\u88C5\u5230\u672C\u5730\u76EE\u5F55..."},migrationFailed:{en:"Local installation failed, skipping migration",zh:"\u672C\u5730\u5B89\u88C5\u5931\u8D25\uFF0C\u8DF3\u8FC7\u8FC1\u79FB"},installComplete:{en:"Local installation complete",zh:"\u672C\u5730\u5B89\u88C5\u5B8C\u6210"},migrationComplete:{en:"Detected old installation, migration complete. Please restart Tako CLI",zh:"\u68C0\u6D4B\u5230\u65E7\u7248\u5B89\u88C5\uFF0C\u5DF2\u5B8C\u6210\u8FC1\u79FB\uFF0C\u8BF7\u91CD\u65B0\u542F\u52A8 Tako CLI"},newVersionAvailable:{en:"New version v{version} available (current v{current})",zh:"\u53D1\u73B0\u65B0\u7248\u672C v{version}\uFF08\u5F53\u524D v{current}\uFF09"},pleaseRestart:{en:"Please restart Tako CLI to use the new version",zh:"\u8BF7\u91CD\u65B0\u542F\u52A8 Tako CLI \u4EE5\u4F7F\u7528\u65B0\u7248\u672C"}},region:{usingChinaMirror:{en:"Detected China mainland network, using domestic mirror",zh:"\u68C0\u6D4B\u5230\u4E2D\u56FD\u5927\u9646\u7F51\u7EDC\uFF0C\u4F7F\u7528\u56FD\u5185\u955C\u50CF\u6E90"},usingGlobalMirror:{en:"Using global mirror",zh:"\u4F7F\u7528\u56FD\u9645\u6E90"}},telemetry:{toggle:{en:"Toggle Telemetry",zh:"\u5207\u6362\u9065\u6D4B"},enabled:{en:"Telemetry is enabled",zh:"\u9065\u6D4B\u5DF2\u5F00\u542F"},disabled:{en:"Telemetry is disabled",zh:"\u9065\u6D4B\u5DF2\u5173\u95ED"},description:{en:"Anonymous usage data helps us improve Tako CLI",zh:"\u533F\u540D\u4F7F\u7528\u6570\u636E\u5E2E\u52A9\u6211\u4EEC\u6539\u8FDB Tako CLI"}},time:{justNow:{en:"just now",zh:"\u521A\u521A"},minutesAgo:{en:"{n}m ago",zh:"{n}\u5206\u949F\u524D"},hoursAgo:{en:"{n}h ago",zh:"{n}\u5C0F\u65F6\u524D"},yesterday:{en:"yesterday",zh:"\u6628\u5929"},daysAgo:{en:"{n}d ago",zh:"{n}\u5929\u524D"},weeksAgo:{en:"{n}w ago",zh:"{n}\u5468\u524D"},monthsAgo:{en:"{n}mo ago",zh:"{n}\u6708\u524D"}},claudeCode:{settingsDetected:{en:`Detected hardcoded config in Claude Code settings that conflicts with Tako:
271
+ `)}}}function ia(i){Pi=i}function oa(){Pi=du}function na(){return{start(i){return Pi.spin(i)}}}function oo(){let i=null;return{start(o){i=Pi.spin(o)},stop(o){i?.stop(o),i=null},update(o){i?.update(o)}}}var du,Pi,L;var Ci=N(()=>{du={info:(i)=>console.log(`\u2139 ${i}`),warn:(i)=>console.log(`\u26A0 ${i}`),error:(i)=>console.error(`\u2717 ${i}`),success:(i)=>console.log(`\u2713 ${i}`),spin:jc},Pi=du;L={info:(i)=>Pi.info(i),warn:(i)=>Pi.warn(i),error:(i)=>Pi.error(i),success:(i)=>Pi.success(i),message:(i)=>Pi.info(i),debug:(i)=>{if(process.env.TAKO_DEV)process.stderr.write(`[debug] ${i}
272
+ `)}}});var uu={};ii(uu,{t:()=>g,setLocale:()=>i0,getLocale:()=>Ii,detectLocale:()=>no,clearLocaleOverride:()=>da});function no(){if(Qn)return Qn;let i=process.env.LANG||process.env.LANGUAGE||process.env.LC_ALL||"";if(i.toLowerCase().includes("zh")||i.toLowerCase().includes("chinese"))return"zh";try{if(Intl.DateTimeFormat().resolvedOptions().locale.toLowerCase().startsWith("zh"))return"zh"}catch{}return"zh"}function i0(i){Qn=i}function da(){Qn=null}function g(i,o){let n=no(),d=i.split("."),e=ea;for(let r of d)if(e=e?.[r],!e)return i;let u=e[n]||e.en||i;if(o)for(let[r,t]of Object.entries(o))u=u.replace(`{${r}}`,String(t));return u}function Ii(){return no()}var Qn=null,ea;var X=N(()=>{ea={launcher:{starting:{en:"Starting {client}...",zh:"\u6B63\u5728\u542F\u52A8 {client}..."},directoryNotFound:{en:"Directory not found: {path}",zh:"\u76EE\u5F55\u4E0D\u5B58\u5728\uFF1A{path}"},apiKeyNotConfigured:{en:"API Key not configured",zh:"API Key \u672A\u914D\u7F6E"},error:{en:"Error: {message}",zh:"\u9519\u8BEF\uFF1A{message}"}},menu:{selectAction:{en:"Select an action:",zh:"\u8BF7\u9009\u62E9\u64CD\u4F5C\uFF1A"},launchClient:{en:"Launch {client}",zh:"\u542F\u52A8 {client}"},advanced:{en:"Advanced",zh:"\u9AD8\u7EA7"},advancedHint:{en:"Usage stats, configuration, etc.",zh:"\u7528\u91CF\u7EDF\u8BA1\u3001\u914D\u7F6E\u7B49"},exit:{en:"Exit",zh:"\u9000\u51FA"},advancedOptions:{en:"Advanced Options:",zh:"\u9AD8\u7EA7\u9009\u9879\uFF1A"},viewStats:{en:"View Usage Statistics",zh:"\u67E5\u770B\u7528\u91CF\u7EDF\u8BA1"},configApiKey:{en:"Configure API Key",zh:"\u914D\u7F6E API Key"},back:{en:"Back",zh:"\u8FD4\u56DE"},changeLanguage:{en:"Change Language",zh:"\u5207\u6362\u8BED\u8A00"},currentLanguage:{en:"Current Language: {lang}",zh:"\u5F53\u524D\u8BED\u8A00\uFF1A{lang}"},languageChanged:{en:"Language changed to {lang}",zh:"\u8BED\u8A00\u5DF2\u5207\u6362\u4E3A {lang}"},selectOptions:{en:"Select launch options (Space to toggle, Enter to confirm):",zh:"\u9009\u62E9\u542F\u52A8\u9009\u9879\uFF08\u7A7A\u683C\u5207\u6362\uFF0C\u56DE\u8F66\u786E\u8BA4\uFF09\uFF1A"},resetOptions:{en:"Reset Launch Options",zh:"\u91CD\u7F6E\u542F\u52A8\u9009\u9879"},optionsReset:{en:"Launch options have been reset. You will be prompted again next time.",zh:"\u542F\u52A8\u9009\u9879\u5DF2\u91CD\u7F6E\uFF0C\u4E0B\u6B21\u542F\u52A8\u65F6\u5C06\u91CD\u65B0\u9009\u62E9\u3002"}},language:{en:{en:"English",zh:"\u82F1\u8BED"},zh:{en:"Chinese",zh:"\u4E2D\u6587"}},banner:{welcome:{en:"Welcome!",zh:"\u6B22\u8FCE\u4F7F\u7528\uFF01"}},stats:{title:{en:"\uD83D\uDCCA Usage Statistics",zh:"\uD83D\uDCCA \u7528\u91CF\u7EDF\u8BA1"},totalRequests:{en:"Total Requests: {count} times",zh:"\u603B\u8C03\u7528\u6B21\u6570\uFF1A{count} \u6B21"},totalCost:{en:"Total Cost: {cost}",zh:"\u603B\u6D88\u8D39\uFF1A{cost}"},todayCost:{en:"Today's Cost: {cost}",zh:"\u4ECA\u65E5\u6D88\u8D39\uFF1A{cost}"},modelDistribution:{en:"Model Usage Distribution (Today):",zh:"\u6A21\u578B\u4F7F\u7528\u5206\u5E03\uFF08\u4ECA\u65E5\uFF09\uFF1A"},times:{en:"times",zh:"\u6B21"},refreshHint:{en:"{countdown}s until refresh | Press any key to return",zh:"{countdown}s \u540E\u5237\u65B0 | \u6309\u4EFB\u610F\u952E\u8FD4\u56DE"},fetching:{en:"Fetching usage statistics...",zh:"\u83B7\u53D6\u7528\u91CF\u7EDF\u8BA1..."},fetchFailed:{en:"Failed to fetch: {error}",zh:"\u83B7\u53D6\u5931\u8D25\uFF1A{error}"}},prompts:{enterApiKey:{en:"Please enter your API Key:",zh:"\u8BF7\u8F93\u5165\u60A8\u7684 API Key\uFF1A"},apiKeyPlaceholder:{en:"cr_xxxxxxxx",zh:"cr_xxxxxxxx"},validating:{en:"Validating API Key...",zh:"\u6B63\u5728\u9A8C\u8BC1 API Key..."},keyInvalidFormat:{en:"Invalid format, must start with cr_",zh:"\u683C\u5F0F\u4E0D\u6B63\u786E\uFF0C\u5FC5\u987B\u4EE5 cr_ \u5F00\u5934"},keyValidationFailed:{en:"Validation failed: {error}",zh:"\u9A8C\u8BC1\u5931\u8D25\uFF1A{error}"},keyConfigured:{en:"API Key configured successfully!",zh:"API Key \u914D\u7F6E\u6210\u529F\uFF01"}},cli:{version:{en:"Tako CLI v{version}",zh:"Tako CLI v{version}"},usage:{en:"Usage: tako [options] [command]",zh:"\u7528\u6CD5\uFF1Atako [\u9009\u9879] [\u547D\u4EE4]"},options:{en:"Options:",zh:"\u9009\u9879\uFF1A"},optionVersion:{en:" -v, --version Display version number",zh:" -v, --version \u663E\u793A\u7248\u672C\u53F7"},optionHelp:{en:" -h, --help Display help information",zh:" -h, --help \u663E\u793A\u5E2E\u52A9\u4FE1\u606F"},shortcuts:{en:"Shortcuts:",zh:"\u5FEB\u6377\u547D\u4EE4\uFF1A"},shortcutClaude:{en:" --claude [args...] Launch Claude Code (passes extra args through, e.g. --model)",zh:" --claude [\u53C2\u6570...] \u542F\u52A8 Claude Code\uFF08\u989D\u5916\u53C2\u6570\u900F\u4F20\u7ED9 claude\uFF0C\u5982 --model\uFF09"},shortcutCodex:{en:" --codex [args...] Launch Codex (passes extra args through)",zh:" --codex [\u53C2\u6570...] \u542F\u52A8 Codex\uFF08\u989D\u5916\u53C2\u6570\u900F\u4F20\u7ED9 codex\uFF09"},shortcutGemini:{en:" --gemini [args...] Launch Gemini CLI (passes extra args through)",zh:" --gemini [\u53C2\u6570...] \u542F\u52A8 Gemini CLI\uFF08\u989D\u5916\u53C2\u6570\u900F\u4F20\u7ED9 gemini\uFF09"},examples:{en:"Examples:",zh:"\u793A\u4F8B\uFF1A"},exampleInteractive:{en:" tako Interactive tool selection",zh:" tako \u4EA4\u4E92\u5F0F\u9009\u62E9\u5DE5\u5177"},exampleClaude:{en:" tako --claude Launch Claude Code directly",zh:" tako --claude \u76F4\u63A5\u542F\u52A8 Claude Code"},exampleClaudeModel:{en:" tako --claude --model claude-opus-4-7 Launch Claude Code with a specific model",zh:" tako --claude --model claude-opus-4-7 \u6307\u5B9A\u6A21\u578B\u542F\u52A8 Claude Code"},exampleCodex:{en:" tako --codex Launch Codex directly",zh:" tako --codex \u76F4\u63A5\u542F\u52A8 Codex"},exampleGemini:{en:" tako --gemini Launch Gemini CLI directly",zh:" tako --gemini \u76F4\u63A5\u542F\u52A8 Gemini CLI"},clientNotFound:{en:"{client} client not found",zh:"{client} \u5BA2\u6237\u7AEF\u672A\u627E\u5230"},cliError:{en:"Tako CLI encountered an error:",zh:"Tako CLI \u53D1\u751F\u9519\u8BEF\uFF1A"},launchFailed:{en:"Launch failed",zh:"\u542F\u52A8\u5931\u8D25"}},auth:{invalidFormat:{en:"Invalid format, must start with cr_",zh:"\u683C\u5F0F\u4E0D\u6B63\u786E\uFF0C\u5FC5\u987B\u4EE5 cr_ \u5F00\u5934"},validationFailed:{en:"Validation failed",zh:"\u9A8C\u8BC1\u5931\u8D25"},networkError:{en:"Network request failed",zh:"\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25"}},updater:{migrating:{en:"Detected old installation, migrating...",zh:"\u68C0\u6D4B\u5230\u65E7\u7248\u5B89\u88C5\u65B9\u5F0F\uFF0C\u6B63\u5728\u8FC1\u79FB..."},installingLocally:{en:"Installing to local directory...",zh:"\u6B63\u5728\u5B89\u88C5\u5230\u672C\u5730\u76EE\u5F55..."},migrationFailed:{en:"Local installation failed, skipping migration",zh:"\u672C\u5730\u5B89\u88C5\u5931\u8D25\uFF0C\u8DF3\u8FC7\u8FC1\u79FB"},installComplete:{en:"Local installation complete",zh:"\u672C\u5730\u5B89\u88C5\u5B8C\u6210"},migrationComplete:{en:"Detected old installation, migration complete. Please restart Tako CLI",zh:"\u68C0\u6D4B\u5230\u65E7\u7248\u5B89\u88C5\uFF0C\u5DF2\u5B8C\u6210\u8FC1\u79FB\uFF0C\u8BF7\u91CD\u65B0\u542F\u52A8 Tako CLI"},newVersionAvailable:{en:"New version v{version} available (current v{current})",zh:"\u53D1\u73B0\u65B0\u7248\u672C v{version}\uFF08\u5F53\u524D v{current}\uFF09"},pleaseRestart:{en:"Please restart Tako CLI to use the new version",zh:"\u8BF7\u91CD\u65B0\u542F\u52A8 Tako CLI \u4EE5\u4F7F\u7528\u65B0\u7248\u672C"}},region:{usingChinaMirror:{en:"Detected China mainland network, using domestic mirror",zh:"\u68C0\u6D4B\u5230\u4E2D\u56FD\u5927\u9646\u7F51\u7EDC\uFF0C\u4F7F\u7528\u56FD\u5185\u955C\u50CF\u6E90"},usingGlobalMirror:{en:"Using global mirror",zh:"\u4F7F\u7528\u56FD\u9645\u6E90"}},telemetry:{toggle:{en:"Toggle Telemetry",zh:"\u5207\u6362\u9065\u6D4B"},enabled:{en:"Telemetry is enabled",zh:"\u9065\u6D4B\u5DF2\u5F00\u542F"},disabled:{en:"Telemetry is disabled",zh:"\u9065\u6D4B\u5DF2\u5173\u95ED"},description:{en:"Anonymous usage data helps us improve Tako CLI",zh:"\u533F\u540D\u4F7F\u7528\u6570\u636E\u5E2E\u52A9\u6211\u4EEC\u6539\u8FDB Tako CLI"}},time:{justNow:{en:"just now",zh:"\u521A\u521A"},minutesAgo:{en:"{n}m ago",zh:"{n}\u5206\u949F\u524D"},hoursAgo:{en:"{n}h ago",zh:"{n}\u5C0F\u65F6\u524D"},yesterday:{en:"yesterday",zh:"\u6628\u5929"},daysAgo:{en:"{n}d ago",zh:"{n}\u5929\u524D"},weeksAgo:{en:"{n}w ago",zh:"{n}\u5468\u524D"},monthsAgo:{en:"{n}mo ago",zh:"{n}\u6708\u524D"}},claudeCode:{settingsDetected:{en:`Detected hardcoded config in Claude Code settings that conflicts with Tako:
273
273
  {fields}`,zh:`\u68C0\u6D4B\u5230 Claude Code settings \u4E2D\u5B58\u5728\u4E0E Tako \u51B2\u7A81\u7684\u914D\u7F6E\uFF1A
274
- {fields}`},confirmClean:{en:"Clean these settings? Tako will manage them automatically at launch",zh:"\u662F\u5426\u6E05\u7406\u8FD9\u4E9B\u914D\u7F6E\uFF1FTako \u542F\u52A8\u65F6\u4F1A\u81EA\u52A8\u6CE8\u5165\u6B63\u786E\u7684\u503C"},settingsCleaned:{en:"Settings cleaned, Tako will manage these configs automatically",zh:"\u5DF2\u6E05\u7406\u5B8C\u6210\uFF0CTako \u4F1A\u81EA\u52A8\u7BA1\u7406\u8FD9\u4E9B\u914D\u7F6E"},cleanSkipped:{en:"Skipped. Note: hardcoded settings may cause issues with Tako",zh:"\u5DF2\u8DF3\u8FC7\u3002\u6CE8\u610F\uFF1A\u5199\u6B7B\u7684\u914D\u7F6E\u53EF\u80FD\u5BFC\u81F4 Tako \u542F\u52A8\u5F02\u5E38"},usingIsolatedSettings:{en:"Using Tako-managed Claude Code settings for this launch: {path}",zh:"\u672C\u6B21\u542F\u52A8\u5C06\u4F7F\u7528 Tako \u6258\u7BA1\u7684 Claude Code settings\uFF1A{path}"},subscriptionMissingAuth:{en:"Selected Claude account has no captured credentials. Run `claude /login` for that account, then re-detect in Tako.",zh:"\u76EE\u6807 Claude \u8D26\u53F7\u7F3A\u5C11\u51ED\u636E\u3002\u8BF7\u7528 `claude /login` \u767B\u5F55\u8BE5\u8D26\u53F7\u540E\uFF0C\u8BA9 Tako \u91CD\u65B0\u68C0\u6D4B\u4E00\u6B21\u3002"},subscriptionSwitched:{en:"Switched Claude Code login to {email}",zh:"\u5DF2\u5207\u6362 Claude Code \u767B\u5F55\u8D26\u53F7\u4E3A {email}"},unknownCurrentAccount:{en:"Current Claude login ({email}) is not tracked by Tako; its tokens will be overwritten.",zh:"\u5F53\u524D Claude \u767B\u5F55\u8D26\u53F7 ({email}) \u672A\u88AB Tako \u8BB0\u5F55\uFF0C\u5207\u6362\u540E\u8BE5\u8D26\u53F7 token \u5C06\u88AB\u8986\u76D6\u3002"}},recentProjects:{title:{en:"Recent Projects",zh:"\u6700\u8FD1\u9879\u76EE"},launchInCurrent:{en:"Launch in current directory",zh:"\u5728\u5F53\u524D\u76EE\u5F55\u542F\u52A8"}},providers:{management:{en:"Manage Providers",zh:"\u7BA1\u7406\u670D\u52A1\u5546"},selectProvider:{en:"Select provider:",zh:"\u9009\u62E9\u670D\u52A1\u5546\uFF1A"},selectType:{en:"Provider type:",zh:"\u670D\u52A1\u5546\u7C7B\u578B\uFF1A"},enterName:{en:"Provider name:",zh:"\u670D\u52A1\u5546\u540D\u79F0\uFF1A"},enterApiKey:{en:"API Key:",zh:"API Key\uFF1A"},enterBaseUrl:{en:"Base URL:",zh:"\u57FA\u7840 URL\uFF1A"},add:{en:"Add Provider",zh:"\u6DFB\u52A0\u670D\u52A1\u5546"},edit:{en:"Edit Provider",zh:"\u7F16\u8F91\u670D\u52A1\u5546"},delete:{en:"Delete Provider",zh:"\u5220\u9664\u670D\u52A1\u5546"},setDefault:{en:"Set as Default",zh:"\u8BBE\u4E3A\u9ED8\u8BA4"},rescan:{en:"Re-scan Subscriptions",zh:"\u91CD\u65B0\u626B\u63CF\u8BA2\u9605"},back:{en:"Back",zh:"\u8FD4\u56DE"},added:{en:"Provider added",zh:"\u670D\u52A1\u5546\u5DF2\u6DFB\u52A0"},deleted:{en:"Provider deleted",zh:"\u670D\u52A1\u5546\u5DF2\u5220\u9664"},updated:{en:"Provider updated",zh:"\u670D\u52A1\u5546\u5DF2\u66F4\u65B0"},defaultSet:{en:"Default provider set",zh:"\u9ED8\u8BA4\u670D\u52A1\u5546\u5DF2\u8BBE\u7F6E"},noProviders:{en:"No providers configured",zh:"\u672A\u914D\u7F6E\u670D\u52A1\u5546"},noCompatible:{en:"No provider supports {client}",zh:"\u6CA1\u6709\u652F\u6301 {client} \u7684\u670D\u52A1\u5546"},defaultLabel:{en:"(default)",zh:"\uFF08\u9ED8\u8BA4\uFF09"},detected:{en:"Detected: {name}",zh:"\u68C0\u6D4B\u5230\uFF1A{name}"},confirmDelete:{en:"Delete {name}?",zh:"\u786E\u8BA4\u5220\u9664 {name}\uFF1F"},scanComplete:{en:"Scan complete, found {count} new provider(s)",zh:"\u626B\u63CF\u5B8C\u6210\uFF0C\u53D1\u73B0 {count} \u4E2A\u65B0\u670D\u52A1\u5546"}}}});var Qn={};ii(Qn,{writeClaudeAuth:()=>pa,readClaudeAuth:()=>aa});import{homedir as eu,platform as na,userInfo as da}from"os";import{join as i0}from"path";function ru(){return[process.env.USER||(()=>{try{return da().username}catch{return""}})(),"root"].filter(Boolean)}async function ea(i){let o=Bun.spawn(["security","find-generic-password","-s",uu,"-a",i,"-w"],{stdout:"pipe",stderr:"pipe"}),n=await new Response(o.stdout).text();if(await o.exited!==0)return null;try{return JSON.parse(n.trim())}catch{return null}}async function ua(){for(let i of ru()){let o=await ea(i);if(o)return o}return null}async function ra(i){let o=JSON.stringify(i),n=ru()[0],d=Bun.spawn(["security","add-generic-password","-U","-s",uu,"-a",n,"-w",o],{stdout:"pipe",stderr:"pipe"}),e=await d.exited;if(e!==0){let u=await new Response(d.stderr).text();throw Error(`security add-generic-password failed (${e}): ${u.trim()}`)}}async function ta(){try{let i=await import("fs/promises");return JSON.parse(await i.readFile(cu,"utf-8"))}catch{return null}}async function ca(i){let o=await import("fs/promises");await o.mkdir(tu,{recursive:!0}),await o.writeFile(cu,JSON.stringify(i,null,2)+`
275
- `,{mode:384})}async function aa(){let i=au?await ua():await ta(),o;try{let n=await import("fs/promises"),d=JSON.parse(await n.readFile(jd,"utf-8"));if(d.oauthAccount&&typeof d.oauthAccount==="object")o=d.oauthAccount}catch{}return{credentials:i??void 0,oauthAccount:o}}async function pa(i){if(i.credentials)if(au)await ra(i.credentials);else await ca(i.credentials);if(i.oauthAccount){let o=await import("fs/promises"),n={};try{n=JSON.parse(await o.readFile(jd,"utf-8"))}catch{}n.oauthAccount=i.oauthAccount,await o.writeFile(jd,JSON.stringify(n,null,2)+`
276
- `)}}var uu="Claude Code-credentials",tu,cu,jd,au;var qn=N(()=>{tu=i0(eu(),".claude"),cu=i0(tu,".credentials.json"),jd=i0(eu(),".claude.json"),au=na()==="darwin"});var pu={};ii(pu,{updateProvider:()=>Xi,setDefaultProvider:()=>n0,setClientProvider:()=>d0,resolveXiaomiBaseUrl:()=>Ud,resolveProviderContext:()=>_,migrateIfNeeded:()=>e0,mergeDetectedProviders:()=>Uo,isProviderCompatible:()=>Ti,getProvidersForClient:()=>Qi,getProviders:()=>V,getProvider:()=>la,getModelChoices:()=>Eo,getDefaultSupportedClients:()=>di,getDefaultProvider:()=>ei,getDefaultModel:()=>Fo,getDefaultBaseUrl:()=>Fd,getClientProvider:()=>qi,fixupProviders:()=>u0,detectProviders:()=>_o,deleteProvider:()=>o0,addProvider:()=>eo,XIAOMI_TOKEN_PLAN_URL:()=>iu,XIAOMI_ANTHROPIC_URL:()=>_d,PROVIDER_TYPE_NAMES:()=>io,DEEPSEEK_ANTHROPIC_URL:()=>Ed});async function V(){return(await z()).providers??[]}async function la(i){return(await V()).find((n)=>n.id===i)}async function ei(){let i=await z(),o=i.providers??[];if(o.length===0)return;if(i.defaultProviderId){let n=o.find((d)=>d.id===i.defaultProviderId);if(n)return n}return o[0]}async function Qi(i){return(await V()).filter((d)=>Ti(d,i)).sort((d,e)=>{let u=d.lastUsedAt?new Date(d.lastUsedAt).getTime():0,r=e.lastUsedAt?new Date(e.lastUsedAt).getTime():0;if(u!==r)return r-u;return new Date(e.createdAt).getTime()-new Date(d.createdAt).getTime()})}async function eo(i){let o=await z(),n={...i,id:crypto.randomUUID(),createdAt:new Date().toISOString()};if(o.providers=[...o.providers??[],n],!o.defaultProviderId)o.defaultProviderId=n.id;return await K(o),n}async function Xi(i,o){let n=await z(),d=n.providers??[],e=d.findIndex((u)=>u.id===i);if(e===-1)return;d[e]={...d[e],...o},n.providers=d,await K(n)}async function o0(i){let o=await z();if((o.providers??[]).find((d)=>d.id===i)?.builtin)return;if(o.providers=(o.providers??[]).filter((d)=>d.id!==i),o.defaultProviderId===i)o.defaultProviderId=o.providers[0]?.id;if(o.clientProviderMap){for(let[d,e]of Object.entries(o.clientProviderMap))if(e===i)delete o.clientProviderMap[d]}await K(o)}async function n0(i){let o=await z();if(!(o.providers??[]).some((d)=>d.id===i))return;o.defaultProviderId=i,await K(o)}async function qi(i){let o=await z(),n=o.clientProviderMap?.[i];if(n){let d=(o.providers??[]).find((e)=>e.id===n);if(d&&Ti(d,i))return d}return}async function d0(i,o){let n=await z();n.clientProviderMap={...n.clientProviderMap,[i]:o};let d=n.providers??[],e=d.findIndex((u)=>u.id===o);if(e!==-1)d[e]={...d[e],lastUsedAt:new Date().toISOString()},n.providers=d;await K(n)}function _(i){return{type:i.type,apiKey:i.apiKey,baseUrl:i.baseUrl,authData:i.authData,model:i.model,modelContextWindow:i.modelContextWindow}}async function ma(){try{let i=Bun.spawn(["claude","auth","status"],{stdout:"pipe",stderr:"pipe"}),o=await new Response(i.stdout).text();if(await i.exited!==0)return null;let d=JSON.parse(o.trim());if(!d.loggedIn||d.authMethod!=="claude.ai")return null;let e=d.subscriptionType||"pro",u=d.email||"",r=`Claude ${e.charAt(0).toUpperCase()+e.slice(1)}${u?` (${u})`:""}`,{readClaudeAuth:t}=await Promise.resolve().then(() => (qn(),Qn)),c=await t(),a=c.credentials||c.oauthAccount?{credentials:c.credentials,oauthAccount:c.oauthAccount}:void 0;return{id:crypto.randomUUID(),name:r,type:"claude-subscription",supportedClients:di("claude-subscription"),createdAt:new Date().toISOString(),email:u,subscriptionType:e,authData:a}}catch{return null}}async function xa(){try{let{homedir:i}=await import("os"),{join:o}=await import("path"),n=await import("fs/promises"),d=o(i(),".codex","auth.json"),e=JSON.parse(await n.readFile(d,"utf-8"));if(e.auth_mode!=="chatgpt"||!e.tokens?.access_token)return null;let u="";try{u=JSON.parse(atob(e.tokens.id_token.split(".")[1])).email||""}catch{}return{auth:e,email:u}}catch{return null}}async function wa(){let i=await xa();if(i){let{auth:o,email:n}=i;return{id:crypto.randomUUID(),name:n?`Codex Plus (${n})`:"Codex Subscription",type:"codex-subscription",email:n||void 0,supportedClients:di("codex-subscription"),authData:o,createdAt:new Date().toISOString()}}try{let o=Bun.spawn(["codex","login","status"],{stdout:"pipe",stderr:"pipe"}),n=await new Response(o.stdout).text();if(await o.exited!==0||!n.includes("Logged in")||n.includes("cr_"))return null;return{id:crypto.randomUUID(),name:"Codex Subscription",type:"codex-subscription",supportedClients:di("codex-subscription"),createdAt:new Date().toISOString()}}catch{return null}}async function _o(){let i=[],[o,n]=await Promise.all([ma(),wa()]);if(o)i.push(o);if(n)i.push(n);return i}async function Uo(i){let o=await z(),n=o.providers??[],d=new Set(n.map((u)=>`${u.type}:${u.email||""}`)),e=0;for(let u of i){let r=`${u.type}:${u.email||""}`;if(!d.has(r))n.push(u),d.add(r),e++;else if(u.authData){let t=n.find((c)=>c.type===u.type&&c.email===u.email);if(t)t.authData=u.authData}}if(e>0){if(o.providers=n,!o.defaultProviderId&&n.length>0)o.defaultProviderId=n[0].id;await K(o)}return e}async function e0(){let i=await z();if(!i.apiKey||i.providers&&i.providers.length>0)return!1;let o={id:crypto.randomUUID(),name:"Tako \u5B98\u65B9",type:"tako",apiKey:i.apiKey,baseUrl:Y,apiId:i.apiId,supportedClients:di("tako"),createdAt:new Date().toISOString(),builtin:!0};return i.providers=[o],i.defaultProviderId=o.id,await K(i),!0}async function u0(){let i=await z(),o=i.providers??[],n=!1;for(let d of o)if(d.type==="tako"&&!d.builtin)d.builtin=!0,n=!0;if(i.apiKey&&!o.some((d)=>d.type==="tako")){if(o.push({id:crypto.randomUUID(),name:"Tako \u5B98\u65B9",type:"tako",apiKey:i.apiKey,baseUrl:Y,apiId:i.apiId,supportedClients:di("tako"),createdAt:new Date().toISOString(),builtin:!0}),!i.defaultProviderId)i.defaultProviderId=o[o.length-1].id;n=!0}if(n)i.providers=o,await K(i)}var ai=N(()=>{C();Si();Si()});import{homedir as ya}from"os";import{dirname as sa,join as mu}from"path";function ba(i){if(i.startsWith("ANTHROPIC_"))return!0;return ha.includes(i)}function La(i){let o={...i},n=[],d=i.env;if(d&&typeof d==="object"&&!Array.isArray(d)){let e={...d};for(let u of Object.keys(e))if(ba(u))n.push(u),delete e[u];if(n.length>0)if(Object.keys(e).length===0)delete o.env;else o.env=e}return{settings:o,cleanedFields:n}}async function Na(i={}){let o=await import("fs/promises"),n=i.sourcePath??fa,d=i.targetPath??va,e;try{e=await o.readFile(n,"utf-8")}catch{return null}let u;try{u=JSON.parse(e)}catch{return null}let{settings:r,cleanedFields:t}=La(u);if(t.length===0)return null;if(i.logConflicts!==!1)L.warn(g("claudeCode.settingsDetected",{fields:t.join(", ")})),L.info(g("claudeCode.usingIsolatedSettings",{path:d}));return await o.mkdir(sa(d),{recursive:!0}),await o.writeFile(d,JSON.stringify(r,null,2)+`
277
- `),{args:["--setting-sources","project,local","--settings",d],cleanedFields:t,settingsPath:d}}async function Wa(i){let{readClaudeAuth:o,writeClaudeAuth:n}=await Promise.resolve().then(() => (qn(),Qn)),{getProviders:d,updateProvider:e}=await Promise.resolve().then(() => (ai(),pu)),u=i.authData?.credentials,r=i.authData?.oauthAccount;if(!u){L.warn(g("claudeCode.subscriptionMissingAuth"));return}let t=await o(),c=t.oauthAccount?.emailAddress;if(c&&t.credentials){let l=(await d()).find((x)=>x.type==="claude-subscription"&&x.email===c);if(l){let x={credentials:t.credentials,oauthAccount:t.oauthAccount};if(JSON.stringify(l.authData)!==JSON.stringify(x))await e(l.id,{authData:x})}else if(c!==r?.emailAddress)L.warn(g("claudeCode.unknownCurrentAccount",{email:c}))}await n({credentials:u,oauthAccount:r});let a=r?.emailAddress||"?";L.info(g("claudeCode.subscriptionSwitched",{email:a}))}function Ga(i){let o=i.match(/^claude-(haiku|sonnet|opus)-(\d{1,2})-(\d{1,2})$/);if(o)return`${o[1].charAt(0).toUpperCase()+o[1].slice(1)} ${o[2]}.${o[3]}`;return ci.find((d)=>d.id===i)?.displayName??i}function vo(i){if(!i)return i;if(i.endsWith("[1m]")||/:1m$/i.test(i))return i;if(!/^(claude|deepseek|kimi|mimo)[-_]/i.test(i))return i;let o=ci.find((n)=>n.id===i);if(!o||o.contextWindow<1e6)return i;return`${i}[1m]`}function lu(i){if(i>=1e6)return"1M";if(i>0)return`${Math.round(i/1000)}k`;return"?"}function Sa(i){if(!i.baseUrl)return null;let o=Hi(i.baseUrl,"claude");if(!o||o.length===0)return null;let n=Zo(o);if(n.length===0)return null;return n.map((d)=>{let e=vo(d.id);return{id:`model-${d.id}`,label:{en:d.displayName,zh:d.displayName},shortLabel:d.displayName,description:{en:`Use ${d.displayName} (${lu(d.contextWindow)} ctx)`,zh:`\u4F7F\u7528 ${d.displayName}\uFF08\u4E0A\u4E0B\u6587 ${lu(d.contextWindow)}\uFF09`},flag:`--model ${e}`,args:[],envVars:{ANTHROPIC_MODEL:e},group:"model"}})}function Pa(i){if(Ni(),i&&(i.type==="tako"||i.type==="custom")){let d=Sa(i);if(d)return d}let o=i?.type==="deepseek"?$a:i?.type==="xiaomi"?Ma:ga,n=[];for(let d of o){let u=ci.find((a)=>a.id===d)?.contextWindow??0,r=u>=1e6?"1M":u>0?`${Math.round(u/1000)}k`:"?",t=Ga(d),c=vo(d);n.push({id:`model-${d}`,label:{en:t,zh:t},shortLabel:t,description:{en:`Use ${t} (${r} ctx)`,zh:`\u4F7F\u7528 ${t}\uFF08\u4E0A\u4E0B\u6587 ${r}\uFF09`},flag:`--model ${c}`,args:[],envVars:{ANTHROPIC_MODEL:c},group:"model"})}return n}function Ca(i){return[...za,...Pa(i)]}var fa,va,ha,ka,za,ga,$a,Ma;var r0=N(()=>{E();Si();Ci();H();fo();Gn();C();fa=mu(ya(),".claude","settings.json"),va=mu(Q,"claude-code","settings.json"),ha=["CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC","API_TIMEOUT_MS"];ka={id:"claude-code",name:"Claude Code",package:"@anthropic-ai/claude-code",command:"claude",runtime:"native",continueArg:"--continue",brandColor:"yellow",getEnvVars(i){let o={CLAUDE_CODE_DISABLE_UPDATE_CHECK:"1",DISABLE_AUTOUPDATER:"1"},n=i.model?vo(i.model):void 0;switch(i.type){case"claude-subscription":return o;case"tako":return{...o,ANTHROPIC_BASE_URL:`${i.baseUrl}/api`,ANTHROPIC_AUTH_TOKEN:i.apiKey,...n?{ANTHROPIC_MODEL:n}:{}};case"anthropic":return{...o,ANTHROPIC_API_KEY:i.apiKey,...n?{ANTHROPIC_MODEL:n}:{}};case"deepseek":return{...o,ANTHROPIC_BASE_URL:Ed,ANTHROPIC_AUTH_TOKEN:i.apiKey,...n?{ANTHROPIC_MODEL:n}:{}};case"xiaomi":return{...o,ANTHROPIC_BASE_URL:Ud(i.apiKey),ANTHROPIC_AUTH_TOKEN:i.apiKey,...n?{ANTHROPIC_MODEL:n}:{}};case"custom":return{...o,ANTHROPIC_BASE_URL:i.baseUrl,ANTHROPIC_AUTH_TOKEN:i.apiKey,...n?{ANTHROPIC_MODEL:n}:{}};default:return o}},async setupConfigFiles(i,o,n){let d=[];if(n?.forLaunch){let e=await Na();if(e)d=e.args}if(i.type==="claude-subscription")await Wa(i);return d.length>0?{args:d}:void 0},launchOptions:(i)=>Ca(i)},za=[{id:"skip-permissions",label:{en:"Skip Permissions",zh:"\u8DF3\u8FC7\u6743\u9650\u786E\u8BA4"},shortLabel:"Skip Perms",description:{en:"Auto-execute all operations without confirmation",zh:"\u5141\u8BB8\u81EA\u52A8\u6267\u884C\u6240\u6709\u64CD\u4F5C\uFF0C\u65E0\u9700\u786E\u8BA4"},flag:"--dangerously-skip-permissions",args:["--dangerously-skip-permissions"]},{id:"worktree",label:{en:"Git Worktree",zh:"Git Worktree"},shortLabel:"Worktree",description:{en:"Run in an isolated worktree",zh:"\u5728\u9694\u79BB\u7684 worktree \u4E2D\u8FD0\u884C"},flag:"--worktree",args:["--worktree"]}],ga=["claude-sonnet-4-6","claude-opus-4-6","claude-opus-4-7"],$a=["deepseek-v4-flash","deepseek-v4-pro"],Ma=["mimo-v2.5-pro"];yo(ka)});import{homedir as Ia}from"os";import{join as wu}from"path";async function Qa(){let i=await import("fs/promises");try{await i.mkdir(yu,{recursive:!0})}catch{}let o={};try{o=JSON.parse(await i.readFile(xu,"utf-8"))}catch{}let n=o.security?.auth||{};if(n.selectedType==="gemini-api-key")return;o.selectedAuthType="gemini-api-key",o.security={...o.security,auth:{...n,selectedType:"gemini-api-key"}},await Bun.write(xu,JSON.stringify(o,null,2)+`
278
- `)}var yu,xu,qa;var su=N(()=>{E();yu=wu(Ia(),".gemini"),xu=wu(yu,"settings.json");qa={id:"gemini",name:"Gemini CLI",package:"@google/gemini-cli",command:"gemini",runtime:"bun",brandColor:"cyan",getEnvVars(i){return{GEMINI_API_KEY:i.apiKey,GOOGLE_GEMINI_BASE_URL:i.baseUrl||"https://tako.shiroha.tech"}},setupConfigFiles:Qa};yo(qa)});var t0=N(()=>{je();r0();su();E()});var Wu={};ii(Wu,{showRegionInfo:()=>p0,getNpmRegistry:()=>ui,getMirrors:()=>Lu,getLatestBunVersion:()=>Nu,getBunMirrorDownloadUrl:()=>a0,getBunInstallCommand:()=>c0,detectRegion:()=>Ki,MIRRORS:()=>Do});import{readFileSync as Oa,writeFileSync as Ra,mkdirSync as Ja}from"fs";import{join as vu}from"path";import{homedir as hu}from"os";function Aa(){let i=process.env.TAKO_REGION?.trim().toLowerCase();if(i==="cn"||i==="china")return"cn";if(i==="global"||i==="intl"||i==="international")return"global";return null}function Ya(){try{let i=Oa(bu,"utf-8"),o=JSON.parse(i);if(o.region!=="cn"&&o.region!=="global")return null;if(typeof o.detectedAt!=="number")return null;if(Date.now()-o.detectedAt>Ba)return null;return o.region}catch{return null}}function fu(i){try{Ja(vu(hu(),".tako"),{recursive:!0}),Ra(bu,JSON.stringify({region:i,detectedAt:Date.now()}),"utf-8")}catch{}}function Ha(){try{let o=Intl.DateTimeFormat().resolvedOptions().timeZone||"";if(/^Asia\/(Shanghai|Urumqi|Chongqing|Harbin|Kashgar|Hong_Kong|Macau)$/i.test(o)){if(/^Asia\/(Shanghai|Urumqi|Chongqing|Harbin|Kashgar)$/i.test(o))return"cn"}}catch{}let i=(process.env.LANG||process.env.LC_ALL||process.env.LC_MESSAGES||"").toLowerCase();if(i.startsWith("zh_cn")||i.startsWith("zh-cn"))return"cn";return null}async function Ta(){if(On)return On;return On=(async()=>{let o=[Xa,Ka,Va,Za].map((n)=>n().then((d)=>d?d:Promise.reject(Error("null"))));try{return await Promise.race([Promise.any(o),new Promise((d,e)=>setTimeout(()=>e(Error("net-timeout")),1200))])}catch{return"cn"}})(),On}async function Ki(){if(ho)return ho;let i=Aa();if(i)return ho=i,i;let o=Ya();if(o)return ho=o,o;let n=Ha();if(n)return ho=n,fu(n),n;let d=await Ta();return ho=d,fu(d),d}async function Xa(){try{let i=await fetch("https://ip-api.com/json/?fields=countryCode",{signal:AbortSignal.timeout(1000)});if(!i.ok)return null;return(await i.json()).countryCode==="CN"?"cn":"global"}catch{return null}}async function Ka(){try{let i=await fetch("https://ipinfo.io/json",{signal:AbortSignal.timeout(1000)});if(!i.ok)return null;return(await i.json()).country==="CN"?"cn":"global"}catch{return null}}async function Va(){try{let i=await fetch("https://api.ip.sb/geoip",{signal:AbortSignal.timeout(1000)});if(!i.ok)return null;return(await i.json()).country_code==="CN"?"cn":"global"}catch{return null}}async function Za(){let i=[async()=>{let o=await fetch("https://myip.ipip.net/json",{signal:AbortSignal.timeout(800)});if(!o.ok)return null;let n=await o.json(),d=n?.data?.location;if(Array.isArray(d)&&d[0]==="\u4E2D\u56FD")return"cn";let e=n?.data?.country_code;return e==="CN"?"cn":e?"global":null},async()=>{let o=await fetch("https://whois.pconline.com.cn/ipJson.jsp?json=true",{signal:AbortSignal.timeout(800)});if(!o.ok)return null;let n=await o.text();try{let d=JSON.parse(n.trim());if(d.proCode&&/^\d{6}$/.test(d.proCode))return"cn"}catch{}return null},async()=>{let o=await fetch("http://ip.3322.net/api/",{signal:AbortSignal.timeout(600)});if(!o.ok)return null;let n=(await o.text()).trim();if(/^\d+\.\d+\.\d+\.\d+$/.test(n))return"cn";return null}];try{return await Promise.any(i.map((o)=>o().then((n)=>n??Promise.reject())))}catch{return null}}async function Lu(){let i=await Ki();return Do[i]}async function ui(){return(await Lu()).npm}function c0(){return"curl -fsSL https://bun.sh/install | bash"}async function Nu(){let i=Do.cn.bunBinary,o=await fetch(`${i}/`,{signal:AbortSignal.timeout(1e4)});if(!o.ok)throw Error(`Failed to fetch bun versions: ${o.status}`);let d=(await o.json()).map((e)=>e.name.replace(/\/$/,"")).filter((e)=>/^bun-v\d+\.\d+\.\d+$/.test(e)).sort((e,u)=>{let r=e.replace("bun-v","").split(".").map(Number),t=u.replace("bun-v","").split(".").map(Number);for(let c=0;c<3;c++)if(r[c]!==t[c])return t[c]-r[c];return 0});if(d.length===0)throw Error("No bun versions found on mirror");return d[0]}async function a0(){let i=Do.cn.bunBinary,o=await Nu(),d={darwin:"darwin",win32:"windows",linux:"linux"}[process.platform]||"linux",e=process.arch==="arm64"?"aarch64":"x64",u=`bun-${d}-${e}`;return`${i}/${o}/${u}.zip`}async function p0(){let i=await Ki(),o=Do[i];if(i==="cn")L.info(`${g("region.usingChinaMirror")} npm: ${o.npm}`);else L.info(g("region.usingGlobalMirror"))}var ho=null,On=null,bu,Ba=2592000000,Do;var bo=N(()=>{H();Ci();bu=vu(hu(),".tako","region.json"),Do={cn:{npm:"https://registry.npmmirror.com",bunBinary:"https://registry.npmmirror.com/-/binary/bun"},global:{npm:"https://registry.npmjs.org",bunBinary:null}}});var Fa=class{constructor(i){this.baseUrl=i.baseUrl,this.headers={"Content-Type":"application/json",...i.defaultHeaders},this.maxRetries=i.maxRetries??3,this.initialRetryDelay=i.initialRetryDelay??500}async resolveHeaders(){let i={};for(let[o,n]of Object.entries(this.headers)){let d=await n;d!==null&&(i[o]=d)}return i}addHeader(i,o){this.headers[i]=o}async post(i,o,n,d){try{let e=await fetch(i,{method:"POST",headers:await this.resolveHeaders(),body:o?JSON.stringify(o??{}):void 0,keepalive:!0,...n});if(e.status===401)return null;if(e.status!==200&&e.status!==202)throw Error(`HTTP error! status: ${e.status}`);let u=await e.text();return u?JSON.parse(u):null}catch(e){if(d<this.maxRetries){let u=this.initialRetryDelay*2**d;return await new Promise((r)=>setTimeout(r,u)),this.post(i,o,n,d+1)}return console.error("Max retries reached:",e),null}}async fetch(i,o,n={}){let d=`${this.baseUrl}${i}`;return this.post(d,o,n,0)}},ku=class{constructor(i){this.groups=[],this.queue=[],this.options=i;let o={"openpanel-client-id":i.clientId};i.clientSecret&&(o["openpanel-client-secret"]=i.clientSecret),o["openpanel-sdk-name"]=i.sdk||"node",o["openpanel-sdk-version"]=i.sdkVersion||"1.3.1",this.api=new Fa({baseUrl:i.apiUrl||"https://api.openpanel.dev",defaultHeaders:o})}init(){}ready(){this.options.disabled=!1,this.options.waitForProfile=!1,this.flush()}shouldQueue(i){return!!(this.options.disabled||this.options.waitForProfile&&!this.profileId||i.type==="replay"&&!this.sessionId)}addQueue(i){i.type==="track"&&(i.payload.properties={...i.payload.properties??{},__timestamp:new Date().toISOString()}),this.queue.push(i)}async send(i){if(this.options.filter&&!this.options.filter(i))return Promise.resolve();if(this.shouldQueue(i))return this.addQueue(i),Promise.resolve();let o=await this.api.fetch("/track",i,{keepalive:i.type!=="replay"});this.deviceId=o?.deviceId;let n=!!this.sessionId;return this.sessionId=o?.sessionId,!n&&this.sessionId&&this.flush(),o}setGlobalProperties(i){this.global={...this.global,...i}}track(i,o){this.log("track event",i,o);let{groups:n,profileId:d,...e}=o??{},u=[...new Set([...this.groups,...n??[]])];return this.send({type:"track",payload:{name:i,profileId:d??this.profileId,groups:u.length>0?u:void 0,properties:{...this.global??{},...e}}})}identify(i){if(this.log("identify user",i),i.profileId&&(this.profileId=i.profileId,this.flush()),i.profileId&&Object.keys(i).length>1)return this.send({type:"identify",payload:{...i,properties:{...this.global,...i.properties}}})}upsertGroup(i){return this.log("upsert group",i),this.send({type:"group",payload:i})}setGroup(i){return this.log("set group",i),this.groups.includes(i)||(this.groups=[...this.groups,i]),this.send({type:"assign_group",payload:{groupIds:[i],profileId:this.profileId}})}setGroups(i){return this.log("set groups",i),this.groups=[...new Set([...this.groups,...i])],this.send({type:"assign_group",payload:{groupIds:i,profileId:this.profileId}})}alias(i){}increment(i){return this.send({type:"increment",payload:i})}decrement(i){return this.send({type:"decrement",payload:i})}revenue(i,o){let n=o?.deviceId;return delete o?.deviceId,this.track("revenue",{...o??{},...n?{__deviceId:n}:{},__revenue:i})}getDeviceId(){return this.deviceId??""}getSessionId(){return this.sessionId??""}fetchDeviceId(){return Promise.resolve(this.deviceId??"")}clear(){this.profileId=void 0,this.groups=[],this.deviceId=void 0,this.sessionId=void 0}buildFlushPayload(i){if(i.type==="replay")return i.payload;if(i.type==="track"){let o="groups"in i.payload?i.payload.groups??[]:[],n=[...new Set([...this.groups,...o])];return{...i.payload,profileId:i.payload.profileId??this.profileId,groups:n.length>0?n:void 0}}return i.type==="identify"||i.type==="increment"||i.type==="decrement"?{...i.payload,profileId:i.payload.profileId??this.profileId}:i.type==="assign_group"?{...i.payload,profileId:i.payload.profileId??this.profileId}:i.payload}flush(){let i=[];for(let o of this.queue){if(this.shouldQueue(o)){i.push(o);continue}let n=this.buildFlushPayload(o);this.send({...o,payload:n})}this.queue=i}log(...i){this.options.debug&&console.log("[OpenPanel.dev]",...i)}};var zu=()=>{};function gu(){if(!Lo)Lo=new ku({clientId:Ea,clientSecret:_a,apiUrl:Ua});return Lo}function $u(i,o,n){let d=gu().track(i,{profileId:o,...n}).catch(()=>{});Rn.push(d)}function Mu(i,o){let{email:n,...d}=o,e=gu().identify({profileId:i,...typeof n==="string"?{email:n}:{},firstName:String(d.platform||""),properties:d}).catch(()=>{});Rn.push(e)}async function Gu(){if(await Promise.allSettled(Rn),Rn.length=0,Lo){try{Lo.flush()}catch{}Lo=null}}var Ea="d65a6d4b-f702-4af6-98e7-bdb999e01d5f",_a="sec_1e0ea34016bc3a5f8ef5",Ua="https://op.shiroha.tech/api",Lo=null,Rn;var Su=N(()=>{zu();Rn=[]});function Pu(){return{cli_version:Da,platform:process.platform,arch:process.arch,locale:no(),node_version:process.version}}function Cu(i){return Bun.hash(i).toString(16).slice(0,8)}var Da="0.3.18";var l0=N(()=>{H()});async function Iu(){if(No!==null)return No;try{return No=(await z()).telemetryEnabled!==!1,No}catch{return No=!1,!1}}async function Qu(){try{let i=await z();if(i.apiId)return i.apiId;let o=i.providers??[],n=i.defaultProviderId,d=n?o.find((e)=>e.id===n):o[0];if(d){if(d.apiId)return d.apiId;if(d.email)return d.email;return d.id}return"anonymous"}catch{return"anonymous"}}async function T(){if(m0)return;try{if(!await Iu())return;let i=await z(),o=await Qu();if(o==="anonymous")return;let d=(i.providers??[]).find((u)=>u.email)?.email,e=await Ki();Mu(o,{...d?{email:d}:{},region:e,locale:no(),first_seen_version:ja,platform:process.platform,arch:process.arch}),m0=!0}catch{}}function O(i,o){ip(i,o).catch(()=>{})}async function ip(i,o){try{if(!await Iu())return;let n=await Qu();$u(i,n,{...Pu(),...o})}catch{}}async function jo(){await Gu()}function U(){No=null,m0=!1}var ja="0.3.18",m0=!1,No=null;var xi=N(()=>{Su();C();bo();H();l0();l0()});function ep(i,o){let n=[];if(o.phase)n.push(o.phase);if(o.pkgCount>0)n.push(`\u5DF2\u5904\u7406 ${o.pkgCount} \u4E2A\u5305`);return n.push(`${o.elapsedSec}s`),`${i} \xB7 ${n.join(" \xB7 ")}`}async function Jn(i,o,n){let d=Date.now(),e={phase:"\u6B63\u5728\u51C6\u5907",pkgCount:0,elapsedSec:0},u=[],r=()=>{e.elapsedSec=Math.floor((Date.now()-d)/1000),n(ep(o,e))};r();let t=setInterval(r,1000),c=(p)=>{if(!p)return;if(u.push(p),op.test(p))e.phase="\u89E3\u6790\u4F9D\u8D56";else if(qu.test(p)){e.phase="\u4E0B\u8F7D\u5E76\u89E3\u538B";let l=p.match(qu);if(l)e.pkgCount=parseInt(l[1],10)}else if(np.test(p))e.phase="\u5199\u5165 lockfile";else if(dp.test(p))e.phase="\u5B8C\u6210";r()},a=async(p)=>{if(!p)return;let l=p.getReader(),x=new TextDecoder,w="";try{while(!0){let{done:y,value:s}=await l.read();if(y)break;w+=x.decode(s,{stream:!0}).replace(/\r/g,"");let b=w.split(`
279
- `);w=b.pop()??"";for(let f of b)c(f)}if(w)c(w)}finally{l.releaseLock()}};try{await Promise.all([a(i.stderr),a(i.stdout)])}finally{clearInterval(t)}return u.join(`
280
- `)}var op,qu,np,dp;var x0=N(()=>{op=/^Resolving dependencies/,qu=/^Resolved, downloaded and extracted \[(\d+)\]/,np=/^Saved lockfile/,dp=/^(\d+) packages? installed/});function up(i){return i.replace(/\r/g,`
274
+ {fields}`},confirmClean:{en:"Clean these settings? Tako will manage them automatically at launch",zh:"\u662F\u5426\u6E05\u7406\u8FD9\u4E9B\u914D\u7F6E\uFF1FTako \u542F\u52A8\u65F6\u4F1A\u81EA\u52A8\u6CE8\u5165\u6B63\u786E\u7684\u503C"},settingsCleaned:{en:"Settings cleaned, Tako will manage these configs automatically",zh:"\u5DF2\u6E05\u7406\u5B8C\u6210\uFF0CTako \u4F1A\u81EA\u52A8\u7BA1\u7406\u8FD9\u4E9B\u914D\u7F6E"},cleanSkipped:{en:"Skipped. Note: hardcoded settings may cause issues with Tako",zh:"\u5DF2\u8DF3\u8FC7\u3002\u6CE8\u610F\uFF1A\u5199\u6B7B\u7684\u914D\u7F6E\u53EF\u80FD\u5BFC\u81F4 Tako \u542F\u52A8\u5F02\u5E38"},usingIsolatedSettings:{en:"Using Tako-managed Claude Code settings for this launch: {path}",zh:"\u672C\u6B21\u542F\u52A8\u5C06\u4F7F\u7528 Tako \u6258\u7BA1\u7684 Claude Code settings\uFF1A{path}"},subscriptionMissingAuth:{en:"Selected Claude account has no captured credentials. Run `claude /login` for that account, then re-detect in Tako.",zh:"\u76EE\u6807 Claude \u8D26\u53F7\u7F3A\u5C11\u51ED\u636E\u3002\u8BF7\u7528 `claude /login` \u767B\u5F55\u8BE5\u8D26\u53F7\u540E\uFF0C\u8BA9 Tako \u91CD\u65B0\u68C0\u6D4B\u4E00\u6B21\u3002"},subscriptionSwitched:{en:"Switched Claude Code login to {email}",zh:"\u5DF2\u5207\u6362 Claude Code \u767B\u5F55\u8D26\u53F7\u4E3A {email}"},unknownCurrentAccount:{en:"Current Claude login ({email}) is not tracked by Tako; its tokens will be overwritten.",zh:"\u5F53\u524D Claude \u767B\u5F55\u8D26\u53F7 ({email}) \u672A\u88AB Tako \u8BB0\u5F55\uFF0C\u5207\u6362\u540E\u8BE5\u8D26\u53F7 token \u5C06\u88AB\u8986\u76D6\u3002"}},recentProjects:{title:{en:"Recent Projects",zh:"\u6700\u8FD1\u9879\u76EE"},launchInCurrent:{en:"Launch in current directory",zh:"\u5728\u5F53\u524D\u76EE\u5F55\u542F\u52A8"}},providers:{management:{en:"Manage Providers",zh:"\u7BA1\u7406\u670D\u52A1\u5546"},selectProvider:{en:"Select provider:",zh:"\u9009\u62E9\u670D\u52A1\u5546\uFF1A"},selectType:{en:"Provider type:",zh:"\u670D\u52A1\u5546\u7C7B\u578B\uFF1A"},enterName:{en:"Provider name:",zh:"\u670D\u52A1\u5546\u540D\u79F0\uFF1A"},enterApiKey:{en:"API Key:",zh:"API Key\uFF1A"},enterBaseUrl:{en:"Base URL:",zh:"\u57FA\u7840 URL\uFF1A"},add:{en:"Add Provider",zh:"\u6DFB\u52A0\u670D\u52A1\u5546"},edit:{en:"Edit Provider",zh:"\u7F16\u8F91\u670D\u52A1\u5546"},delete:{en:"Delete Provider",zh:"\u5220\u9664\u670D\u52A1\u5546"},setDefault:{en:"Set as Default",zh:"\u8BBE\u4E3A\u9ED8\u8BA4"},rescan:{en:"Re-scan Subscriptions",zh:"\u91CD\u65B0\u626B\u63CF\u8BA2\u9605"},back:{en:"Back",zh:"\u8FD4\u56DE"},added:{en:"Provider added",zh:"\u670D\u52A1\u5546\u5DF2\u6DFB\u52A0"},deleted:{en:"Provider deleted",zh:"\u670D\u52A1\u5546\u5DF2\u5220\u9664"},updated:{en:"Provider updated",zh:"\u670D\u52A1\u5546\u5DF2\u66F4\u65B0"},defaultSet:{en:"Default provider set",zh:"\u9ED8\u8BA4\u670D\u52A1\u5546\u5DF2\u8BBE\u7F6E"},noProviders:{en:"No providers configured",zh:"\u672A\u914D\u7F6E\u670D\u52A1\u5546"},noCompatible:{en:"No provider supports {client}",zh:"\u6CA1\u6709\u652F\u6301 {client} \u7684\u670D\u52A1\u5546"},defaultLabel:{en:"(default)",zh:"\uFF08\u9ED8\u8BA4\uFF09"},detected:{en:"Detected: {name}",zh:"\u68C0\u6D4B\u5230\uFF1A{name}"},confirmDelete:{en:"Delete {name}?",zh:"\u786E\u8BA4\u5220\u9664 {name}\uFF1F"},scanComplete:{en:"Scan complete, found {count} new provider(s)",zh:"\u626B\u63CF\u5B8C\u6210\uFF0C\u53D1\u73B0 {count} \u4E2A\u65B0\u670D\u52A1\u5546"}}}});var qn={};ii(qn,{writeClaudeAuth:()=>xa,readClaudeAuth:()=>ma});import{homedir as ru,platform as ua,userInfo as ra}from"os";import{join as n0}from"path";function cu(){return[process.env.USER||(()=>{try{return ra().username}catch{return""}})(),"root"].filter(Boolean)}async function ta(i){let o=Bun.spawn(["security","find-generic-password","-s",tu,"-a",i,"-w"],{stdout:"pipe",stderr:"pipe"}),n=await new Response(o.stdout).text();if(await o.exited!==0)return null;try{return JSON.parse(n.trim())}catch{return null}}async function ca(){for(let i of cu()){let o=await ta(i);if(o)return o}return null}async function aa(i){let o=JSON.stringify(i),n=cu()[0],d=Bun.spawn(["security","add-generic-password","-U","-s",tu,"-a",n,"-w",o],{stdout:"pipe",stderr:"pipe"}),e=await d.exited;if(e!==0){let u=await new Response(d.stderr).text();throw Error(`security add-generic-password failed (${e}): ${u.trim()}`)}}async function pa(){try{let i=await import("fs/promises");return JSON.parse(await i.readFile(pu,"utf-8"))}catch{return null}}async function la(i){let o=await import("fs/promises");await o.mkdir(au,{recursive:!0}),await o.writeFile(pu,JSON.stringify(i,null,2)+`
275
+ `,{mode:384})}async function ma(){let i=lu?await ca():await pa(),o;try{let n=await import("fs/promises"),d=JSON.parse(await n.readFile(o0,"utf-8"));if(d.oauthAccount&&typeof d.oauthAccount==="object")o=d.oauthAccount}catch{}return{credentials:i??void 0,oauthAccount:o}}async function xa(i){if(i.credentials)if(lu)await aa(i.credentials);else await la(i.credentials);if(i.oauthAccount){let o=await import("fs/promises"),n={};try{n=JSON.parse(await o.readFile(o0,"utf-8"))}catch{}n.oauthAccount=i.oauthAccount,await o.writeFile(o0,JSON.stringify(n,null,2)+`
276
+ `)}}var tu="Claude Code-credentials",au,pu,o0,lu;var On=N(()=>{au=n0(ru(),".claude"),pu=n0(au,".credentials.json"),o0=n0(ru(),".claude.json"),lu=ua()==="darwin"});var mu={};ii(mu,{updateProvider:()=>Zi,setDefaultProvider:()=>e0,setClientProvider:()=>u0,resolveXiaomiBaseUrl:()=>jd,resolveProviderContext:()=>_,migrateIfNeeded:()=>r0,mergeDetectedProviders:()=>Uo,isProviderCompatible:()=>Hi,getProvidersForClient:()=>Qi,getProviders:()=>V,getProvider:()=>wa,getModelChoices:()=>Eo,getDefaultSupportedClients:()=>di,getDefaultProvider:()=>ei,getDefaultModel:()=>Fo,getDefaultBaseUrl:()=>_d,getClientProvider:()=>qi,fixupProviders:()=>t0,detectProviders:()=>_o,deleteProvider:()=>d0,addProvider:()=>eo,XIAOMI_TOKEN_PLAN_URL:()=>nu,XIAOMI_ANTHROPIC_URL:()=>Dd,PROVIDER_TYPE_NAMES:()=>io,DEEPSEEK_ANTHROPIC_URL:()=>Ud});async function V(){return(await z()).providers??[]}async function wa(i){return(await V()).find((n)=>n.id===i)}async function ei(){let i=await z(),o=i.providers??[];if(o.length===0)return;if(i.defaultProviderId){let n=o.find((d)=>d.id===i.defaultProviderId);if(n)return n}return o[0]}async function Qi(i){return(await V()).filter((d)=>Hi(d,i)).sort((d,e)=>{let u=d.lastUsedAt?new Date(d.lastUsedAt).getTime():0,r=e.lastUsedAt?new Date(e.lastUsedAt).getTime():0;if(u!==r)return r-u;return new Date(e.createdAt).getTime()-new Date(d.createdAt).getTime()})}async function eo(i){let o=await z(),n={...i,id:crypto.randomUUID(),createdAt:new Date().toISOString()};if(o.providers=[...o.providers??[],n],!o.defaultProviderId)o.defaultProviderId=n.id;return await K(o),n}async function Zi(i,o){let n=await z(),d=n.providers??[],e=d.findIndex((u)=>u.id===i);if(e===-1)return;d[e]={...d[e],...o},n.providers=d,await K(n)}async function d0(i){let o=await z();if((o.providers??[]).find((d)=>d.id===i)?.builtin)return;if(o.providers=(o.providers??[]).filter((d)=>d.id!==i),o.defaultProviderId===i)o.defaultProviderId=o.providers[0]?.id;if(o.clientProviderMap){for(let[d,e]of Object.entries(o.clientProviderMap))if(e===i)delete o.clientProviderMap[d]}await K(o)}async function e0(i){let o=await z();if(!(o.providers??[]).some((d)=>d.id===i))return;o.defaultProviderId=i,await K(o)}async function qi(i){let o=await z(),n=o.clientProviderMap?.[i];if(n){let d=(o.providers??[]).find((e)=>e.id===n);if(d&&Hi(d,i))return d}return}async function u0(i,o){let n=await z();n.clientProviderMap={...n.clientProviderMap,[i]:o};let d=n.providers??[],e=d.findIndex((u)=>u.id===o);if(e!==-1)d[e]={...d[e],lastUsedAt:new Date().toISOString()},n.providers=d;await K(n)}function _(i){return{type:i.type,apiKey:i.apiKey,baseUrl:i.baseUrl,authData:i.authData,model:i.model,modelContextWindow:i.modelContextWindow}}async function ya(){try{let i=Bun.spawn(["claude","auth","status"],{stdout:"pipe",stderr:"pipe"}),o=await new Response(i.stdout).text();if(await i.exited!==0)return null;let d=JSON.parse(o.trim());if(!d.loggedIn||d.authMethod!=="claude.ai")return null;let e=d.subscriptionType||"pro",u=d.email||"",r=`Claude ${e.charAt(0).toUpperCase()+e.slice(1)}${u?` (${u})`:""}`,{readClaudeAuth:t}=await Promise.resolve().then(() => (On(),qn)),c=await t(),a=c.credentials||c.oauthAccount?{credentials:c.credentials,oauthAccount:c.oauthAccount}:void 0;return{id:crypto.randomUUID(),name:r,type:"claude-subscription",supportedClients:di("claude-subscription"),createdAt:new Date().toISOString(),email:u,subscriptionType:e,authData:a}}catch{return null}}async function sa(){try{let{homedir:i}=await import("os"),{join:o}=await import("path"),n=await import("fs/promises"),d=o(i(),".codex","auth.json"),e=JSON.parse(await n.readFile(d,"utf-8"));if(e.auth_mode!=="chatgpt"||!e.tokens?.access_token)return null;let u="";try{u=JSON.parse(atob(e.tokens.id_token.split(".")[1])).email||""}catch{}return{auth:e,email:u}}catch{return null}}async function va(){let i=await sa();if(i){let{auth:o,email:n}=i;return{id:crypto.randomUUID(),name:n?`Codex Plus (${n})`:"Codex Subscription",type:"codex-subscription",email:n||void 0,supportedClients:di("codex-subscription"),authData:o,createdAt:new Date().toISOString()}}try{let o=Bun.spawn(["codex","login","status"],{stdout:"pipe",stderr:"pipe"}),n=await new Response(o.stdout).text();if(await o.exited!==0||!n.includes("Logged in")||n.includes("cr_"))return null;return{id:crypto.randomUUID(),name:"Codex Subscription",type:"codex-subscription",supportedClients:di("codex-subscription"),createdAt:new Date().toISOString()}}catch{return null}}async function _o(){let i=[],[o,n]=await Promise.all([ya(),va()]);if(o)i.push(o);if(n)i.push(n);return i}async function Uo(i){let o=await z(),n=o.providers??[],d=new Set(n.map((u)=>`${u.type}:${u.email||""}`)),e=0;for(let u of i){let r=`${u.type}:${u.email||""}`;if(!d.has(r))n.push(u),d.add(r),e++;else if(u.authData){let t=n.find((c)=>c.type===u.type&&c.email===u.email);if(t)t.authData=u.authData}}if(e>0){if(o.providers=n,!o.defaultProviderId&&n.length>0)o.defaultProviderId=n[0].id;await K(o)}return e}async function r0(){let i=await z();if(!i.apiKey||i.providers&&i.providers.length>0)return!1;let o={id:crypto.randomUUID(),name:"Tako \u5B98\u65B9",type:"tako",apiKey:i.apiKey,baseUrl:A,apiId:i.apiId,supportedClients:di("tako"),createdAt:new Date().toISOString(),builtin:!0};return i.providers=[o],i.defaultProviderId=o.id,await K(i),!0}async function t0(){let i=await z(),o=i.providers??[],n=!1;for(let d of o)if(d.type==="tako"&&!d.builtin)d.builtin=!0,n=!0;if(i.apiKey&&!o.some((d)=>d.type==="tako")){if(o.push({id:crypto.randomUUID(),name:"Tako \u5B98\u65B9",type:"tako",apiKey:i.apiKey,baseUrl:A,apiId:i.apiId,supportedClients:di("tako"),createdAt:new Date().toISOString(),builtin:!0}),!i.defaultProviderId)i.defaultProviderId=o[o.length-1].id;n=!0}if(n)i.providers=o,await K(i)}var ai=N(()=>{C();Si();Si()});import{homedir as fa}from"os";import{dirname as ha,join as wu}from"path";function Wa(i){if(i.startsWith("ANTHROPIC_"))return!0;return Na.includes(i)}function ka(i){let o={...i},n=[],d=i.env;if(d&&typeof d==="object"&&!Array.isArray(d)){let e={...d};for(let u of Object.keys(e))if(Wa(u))n.push(u),delete e[u];if(n.length>0)if(Object.keys(e).length===0)delete o.env;else o.env=e}return{settings:o,cleanedFields:n}}async function za(i={}){let o=await import("fs/promises"),n=i.sourcePath??ba,d=i.targetPath??La,e;try{e=await o.readFile(n,"utf-8")}catch{return null}let u;try{u=JSON.parse(e)}catch{return null}let{settings:r,cleanedFields:t}=ka(u);if(t.length===0)return null;if(i.logConflicts!==!1)L.warn(g("claudeCode.settingsDetected",{fields:t.join(", ")})),L.info(g("claudeCode.usingIsolatedSettings",{path:d}));return await o.mkdir(ha(d),{recursive:!0}),await o.writeFile(d,JSON.stringify(r,null,2)+`
277
+ `),{args:["--setting-sources","project,local","--settings",d],cleanedFields:t,settingsPath:d}}async function ga(i){let{readClaudeAuth:o,writeClaudeAuth:n}=await Promise.resolve().then(() => (On(),qn)),{getProviders:d,updateProvider:e}=await Promise.resolve().then(() => (ai(),mu)),u=i.authData?.credentials,r=i.authData?.oauthAccount;if(!u){L.warn(g("claudeCode.subscriptionMissingAuth"));return}let t=await o(),c=t.oauthAccount?.emailAddress;if(c&&t.credentials){let l=(await d()).find((x)=>x.type==="claude-subscription"&&x.email===c);if(l){let x={credentials:t.credentials,oauthAccount:t.oauthAccount};if(JSON.stringify(l.authData)!==JSON.stringify(x))await e(l.id,{authData:x})}else if(c!==r?.emailAddress)L.warn(g("claudeCode.unknownCurrentAccount",{email:c}))}await n({credentials:u,oauthAccount:r});let a=r?.emailAddress||"?";L.info(g("claudeCode.subscriptionSwitched",{email:a}))}function Ca(i){let o=i.match(/^claude-(haiku|sonnet|opus)-(\d{1,2})-(\d{1,2})$/);if(o)return`${o[1].charAt(0).toUpperCase()+o[1].slice(1)} ${o[2]}.${o[3]}`;return ci.find((d)=>d.id===i)?.displayName??i}function fo(i){if(!i)return i;if(i.endsWith("[1m]")||/:1m$/i.test(i))return i;if(!/^(claude|deepseek|kimi|mimo)[-_]/i.test(i))return i;let o=ci.find((n)=>n.id===i);if(!o||o.contextWindow<1e6)return i;return`${i}[1m]`}function xu(i){if(i>=1e6)return"1M";if(i>0)return`${Math.round(i/1000)}k`;return"?"}function Ia(i){if(!i.baseUrl)return null;let o=Xi(i.baseUrl,"claude");if(!o||o.length===0)return null;let n=To(o);if(n.length===0)return null;return n.map((d)=>{let e=fo(d.id);return{id:`model-${d.id}`,label:{en:d.displayName,zh:d.displayName},shortLabel:d.displayName,description:{en:`Use ${d.displayName} (${xu(d.contextWindow)} ctx)`,zh:`\u4F7F\u7528 ${d.displayName}\uFF08\u4E0A\u4E0B\u6587 ${xu(d.contextWindow)}\uFF09`},flag:`--model ${e}`,args:[],envVars:{ANTHROPIC_MODEL:e},group:"model"}})}function Qa(i){if(Ni(),i&&(i.type==="tako"||i.type==="custom")){let d=Ia(i);if(d)return d}let o=i?.type==="deepseek"?Sa:i?.type==="xiaomi"?Pa:Ga,n=[];for(let d of o){let u=ci.find((a)=>a.id===d)?.contextWindow??0,r=u>=1e6?"1M":u>0?`${Math.round(u/1000)}k`:"?",t=Ca(d),c=fo(d);n.push({id:`model-${d}`,label:{en:t,zh:t},shortLabel:t,description:{en:`Use ${t} (${r} ctx)`,zh:`\u4F7F\u7528 ${t}\uFF08\u4E0A\u4E0B\u6587 ${r}\uFF09`},flag:`--model ${c}`,args:[],envVars:{ANTHROPIC_MODEL:c},group:"model"})}return n}function qa(i){return[...Ma,...Qa(i)]}var ba,La,Na,$a,Ma,Ga,Sa,Pa;var c0=N(()=>{E();Si();Ci();X();vo();Sn();C();ba=wu(fa(),".claude","settings.json"),La=wu(Q,"claude-code","settings.json"),Na=["CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC","API_TIMEOUT_MS"];$a={id:"claude-code",name:"Claude Code",package:"@anthropic-ai/claude-code",command:"claude",runtime:"native",continueArg:"--continue",brandColor:"yellow",getEnvVars(i){let o={CLAUDE_CODE_DISABLE_UPDATE_CHECK:"1",DISABLE_AUTOUPDATER:"1"},n=i.model?fo(i.model):void 0;switch(i.type){case"claude-subscription":return o;case"tako":return{...o,ANTHROPIC_BASE_URL:`${i.baseUrl}/api`,ANTHROPIC_AUTH_TOKEN:i.apiKey,...n?{ANTHROPIC_MODEL:n}:{}};case"anthropic":return{...o,ANTHROPIC_API_KEY:i.apiKey,...n?{ANTHROPIC_MODEL:n}:{}};case"deepseek":return{...o,ANTHROPIC_BASE_URL:Ud,ANTHROPIC_AUTH_TOKEN:i.apiKey,...n?{ANTHROPIC_MODEL:n}:{}};case"xiaomi":return{...o,ANTHROPIC_BASE_URL:jd(i.apiKey),ANTHROPIC_AUTH_TOKEN:i.apiKey,...n?{ANTHROPIC_MODEL:n}:{}};case"custom":return{...o,ANTHROPIC_BASE_URL:i.baseUrl,ANTHROPIC_AUTH_TOKEN:i.apiKey,...n?{ANTHROPIC_MODEL:n}:{}};default:return o}},async setupConfigFiles(i,o,n){let d=[];if(n?.forLaunch){let e=await za();if(e)d=e.args}if(i.type==="claude-subscription")await ga(i);return d.length>0?{args:d}:void 0},launchOptions:(i)=>qa(i)},Ma=[{id:"skip-permissions",label:{en:"Skip Permissions",zh:"\u8DF3\u8FC7\u6743\u9650\u786E\u8BA4"},shortLabel:"Skip Perms",description:{en:"Auto-execute all operations without confirmation",zh:"\u5141\u8BB8\u81EA\u52A8\u6267\u884C\u6240\u6709\u64CD\u4F5C\uFF0C\u65E0\u9700\u786E\u8BA4"},flag:"--dangerously-skip-permissions",args:["--dangerously-skip-permissions"]},{id:"worktree",label:{en:"Git Worktree",zh:"Git Worktree"},shortLabel:"Worktree",description:{en:"Run in an isolated worktree",zh:"\u5728\u9694\u79BB\u7684 worktree \u4E2D\u8FD0\u884C"},flag:"--worktree",args:["--worktree"]}],Ga=["claude-sonnet-4-6","claude-opus-4-6","claude-opus-4-7"],Sa=["deepseek-v4-flash","deepseek-v4-pro"],Pa=["mimo-v2.5-pro"];yo($a)});import{homedir as Oa}from"os";import{join as su}from"path";async function Ja(){let i=await import("fs/promises");try{await i.mkdir(vu,{recursive:!0})}catch{}let o={};try{o=JSON.parse(await i.readFile(yu,"utf-8"))}catch{}let n=o.security?.auth||{};if(n.selectedType==="gemini-api-key")return;o.selectedAuthType="gemini-api-key",o.security={...o.security,auth:{...n,selectedType:"gemini-api-key"}},await Bun.write(yu,JSON.stringify(o,null,2)+`
278
+ `)}var vu,yu,Ra;var fu=N(()=>{E();vu=su(Oa(),".gemini"),yu=su(vu,"settings.json");Ra={id:"gemini",name:"Gemini CLI",package:"@google/gemini-cli",command:"gemini",runtime:"bun",brandColor:"cyan",getEnvVars(i){return{GEMINI_API_KEY:i.apiKey,GOOGLE_GEMINI_BASE_URL:i.baseUrl||"https://tako.shiroha.tech"}},setupConfigFiles:Ja};yo(Ra)});var a0=N(()=>{ou();c0();fu();E()});var zu={};ii(zu,{showRegionInfo:()=>m0,getNpmRegistry:()=>ui,getMirrors:()=>Wu,getLatestBunVersion:()=>ku,getBunMirrorDownloadUrl:()=>l0,getBunInstallCommand:()=>p0,detectRegion:()=>Ki,MIRRORS:()=>Do});import{readFileSync as Ba,writeFileSync as Ya,mkdirSync as Aa}from"fs";import{join as bu}from"path";import{homedir as Lu}from"os";function Ha(){let i=process.env.TAKO_REGION?.trim().toLowerCase();if(i==="cn"||i==="china")return"cn";if(i==="global"||i==="intl"||i==="international")return"global";return null}function Za(){try{let i=Ba(Nu,"utf-8"),o=JSON.parse(i);if(o.region!=="cn"&&o.region!=="global")return null;if(typeof o.detectedAt!=="number")return null;if(Date.now()-o.detectedAt>Xa)return null;return o.region}catch{return null}}function hu(i){try{Aa(bu(Lu(),".tako"),{recursive:!0}),Ya(Nu,JSON.stringify({region:i,detectedAt:Date.now()}),"utf-8")}catch{}}function Ka(){try{let o=Intl.DateTimeFormat().resolvedOptions().timeZone||"";if(/^Asia\/(Shanghai|Urumqi|Chongqing|Harbin|Kashgar|Hong_Kong|Macau)$/i.test(o)){if(/^Asia\/(Shanghai|Urumqi|Chongqing|Harbin|Kashgar)$/i.test(o))return"cn"}}catch{}let i=(process.env.LANG||process.env.LC_ALL||process.env.LC_MESSAGES||"").toLowerCase();if(i.startsWith("zh_cn")||i.startsWith("zh-cn"))return"cn";return null}async function Va(){if(Jn)return Jn;return Jn=(async()=>{let o=[Ta,Fa,Ea,_a].map((n)=>n().then((d)=>d?d:Promise.reject(Error("null"))));try{return await Promise.race([Promise.any(o),new Promise((d,e)=>setTimeout(()=>e(Error("net-timeout")),1200))])}catch{return"cn"}})(),Jn}async function Ki(){if(ho)return ho;let i=Ha();if(i)return ho=i,i;let o=Za();if(o)return ho=o,o;let n=Ka();if(n)return ho=n,hu(n),n;let d=await Va();return ho=d,hu(d),d}async function Ta(){try{let i=await fetch("https://ip-api.com/json/?fields=countryCode",{signal:AbortSignal.timeout(1000)});if(!i.ok)return null;return(await i.json()).countryCode==="CN"?"cn":"global"}catch{return null}}async function Fa(){try{let i=await fetch("https://ipinfo.io/json",{signal:AbortSignal.timeout(1000)});if(!i.ok)return null;return(await i.json()).country==="CN"?"cn":"global"}catch{return null}}async function Ea(){try{let i=await fetch("https://api.ip.sb/geoip",{signal:AbortSignal.timeout(1000)});if(!i.ok)return null;return(await i.json()).country_code==="CN"?"cn":"global"}catch{return null}}async function _a(){let i=[async()=>{let o=await fetch("https://myip.ipip.net/json",{signal:AbortSignal.timeout(800)});if(!o.ok)return null;let n=await o.json(),d=n?.data?.location;if(Array.isArray(d)&&d[0]==="\u4E2D\u56FD")return"cn";let e=n?.data?.country_code;return e==="CN"?"cn":e?"global":null},async()=>{let o=await fetch("https://whois.pconline.com.cn/ipJson.jsp?json=true",{signal:AbortSignal.timeout(800)});if(!o.ok)return null;let n=await o.text();try{let d=JSON.parse(n.trim());if(d.proCode&&/^\d{6}$/.test(d.proCode))return"cn"}catch{}return null},async()=>{let o=await fetch("http://ip.3322.net/api/",{signal:AbortSignal.timeout(600)});if(!o.ok)return null;let n=(await o.text()).trim();if(/^\d+\.\d+\.\d+\.\d+$/.test(n))return"cn";return null}];try{return await Promise.any(i.map((o)=>o().then((n)=>n??Promise.reject())))}catch{return null}}async function Wu(){let i=await Ki();return Do[i]}async function ui(){return(await Wu()).npm}function p0(){return"curl -fsSL https://bun.sh/install | bash"}async function ku(){let i=Do.cn.bunBinary,o=await fetch(`${i}/`,{signal:AbortSignal.timeout(1e4)});if(!o.ok)throw Error(`Failed to fetch bun versions: ${o.status}`);let d=(await o.json()).map((e)=>e.name.replace(/\/$/,"")).filter((e)=>/^bun-v\d+\.\d+\.\d+$/.test(e)).sort((e,u)=>{let r=e.replace("bun-v","").split(".").map(Number),t=u.replace("bun-v","").split(".").map(Number);for(let c=0;c<3;c++)if(r[c]!==t[c])return t[c]-r[c];return 0});if(d.length===0)throw Error("No bun versions found on mirror");return d[0]}async function l0(){let i=Do.cn.bunBinary,o=await ku(),d={darwin:"darwin",win32:"windows",linux:"linux"}[process.platform]||"linux",e=process.arch==="arm64"?"aarch64":"x64",u=`bun-${d}-${e}`;return`${i}/${o}/${u}.zip`}async function m0(){let i=await Ki(),o=Do[i];if(i==="cn")L.info(`${g("region.usingChinaMirror")} npm: ${o.npm}`);else L.info(g("region.usingGlobalMirror"))}var ho=null,Jn=null,Nu,Xa=2592000000,Do;var bo=N(()=>{X();Ci();Nu=bu(Lu(),".tako","region.json"),Do={cn:{npm:"https://registry.npmmirror.com",bunBinary:"https://registry.npmmirror.com/-/binary/bun"},global:{npm:"https://registry.npmjs.org",bunBinary:null}}});var Ua=class{constructor(i){this.baseUrl=i.baseUrl,this.headers={"Content-Type":"application/json",...i.defaultHeaders},this.maxRetries=i.maxRetries??3,this.initialRetryDelay=i.initialRetryDelay??500}async resolveHeaders(){let i={};for(let[o,n]of Object.entries(this.headers)){let d=await n;d!==null&&(i[o]=d)}return i}addHeader(i,o){this.headers[i]=o}async post(i,o,n,d){try{let e=await fetch(i,{method:"POST",headers:await this.resolveHeaders(),body:o?JSON.stringify(o??{}):void 0,keepalive:!0,...n});if(e.status===401)return null;if(e.status!==200&&e.status!==202)throw Error(`HTTP error! status: ${e.status}`);let u=await e.text();return u?JSON.parse(u):null}catch(e){if(d<this.maxRetries){let u=this.initialRetryDelay*2**d;return await new Promise((r)=>setTimeout(r,u)),this.post(i,o,n,d+1)}return console.error("Max retries reached:",e),null}}async fetch(i,o,n={}){let d=`${this.baseUrl}${i}`;return this.post(d,o,n,0)}},gu=class{constructor(i){this.groups=[],this.queue=[],this.options=i;let o={"openpanel-client-id":i.clientId};i.clientSecret&&(o["openpanel-client-secret"]=i.clientSecret),o["openpanel-sdk-name"]=i.sdk||"node",o["openpanel-sdk-version"]=i.sdkVersion||"1.3.1",this.api=new Ua({baseUrl:i.apiUrl||"https://api.openpanel.dev",defaultHeaders:o})}init(){}ready(){this.options.disabled=!1,this.options.waitForProfile=!1,this.flush()}shouldQueue(i){return!!(this.options.disabled||this.options.waitForProfile&&!this.profileId||i.type==="replay"&&!this.sessionId)}addQueue(i){i.type==="track"&&(i.payload.properties={...i.payload.properties??{},__timestamp:new Date().toISOString()}),this.queue.push(i)}async send(i){if(this.options.filter&&!this.options.filter(i))return Promise.resolve();if(this.shouldQueue(i))return this.addQueue(i),Promise.resolve();let o=await this.api.fetch("/track",i,{keepalive:i.type!=="replay"});this.deviceId=o?.deviceId;let n=!!this.sessionId;return this.sessionId=o?.sessionId,!n&&this.sessionId&&this.flush(),o}setGlobalProperties(i){this.global={...this.global,...i}}track(i,o){this.log("track event",i,o);let{groups:n,profileId:d,...e}=o??{},u=[...new Set([...this.groups,...n??[]])];return this.send({type:"track",payload:{name:i,profileId:d??this.profileId,groups:u.length>0?u:void 0,properties:{...this.global??{},...e}}})}identify(i){if(this.log("identify user",i),i.profileId&&(this.profileId=i.profileId,this.flush()),i.profileId&&Object.keys(i).length>1)return this.send({type:"identify",payload:{...i,properties:{...this.global,...i.properties}}})}upsertGroup(i){return this.log("upsert group",i),this.send({type:"group",payload:i})}setGroup(i){return this.log("set group",i),this.groups.includes(i)||(this.groups=[...this.groups,i]),this.send({type:"assign_group",payload:{groupIds:[i],profileId:this.profileId}})}setGroups(i){return this.log("set groups",i),this.groups=[...new Set([...this.groups,...i])],this.send({type:"assign_group",payload:{groupIds:i,profileId:this.profileId}})}alias(i){}increment(i){return this.send({type:"increment",payload:i})}decrement(i){return this.send({type:"decrement",payload:i})}revenue(i,o){let n=o?.deviceId;return delete o?.deviceId,this.track("revenue",{...o??{},...n?{__deviceId:n}:{},__revenue:i})}getDeviceId(){return this.deviceId??""}getSessionId(){return this.sessionId??""}fetchDeviceId(){return Promise.resolve(this.deviceId??"")}clear(){this.profileId=void 0,this.groups=[],this.deviceId=void 0,this.sessionId=void 0}buildFlushPayload(i){if(i.type==="replay")return i.payload;if(i.type==="track"){let o="groups"in i.payload?i.payload.groups??[]:[],n=[...new Set([...this.groups,...o])];return{...i.payload,profileId:i.payload.profileId??this.profileId,groups:n.length>0?n:void 0}}return i.type==="identify"||i.type==="increment"||i.type==="decrement"?{...i.payload,profileId:i.payload.profileId??this.profileId}:i.type==="assign_group"?{...i.payload,profileId:i.payload.profileId??this.profileId}:i.payload}flush(){let i=[];for(let o of this.queue){if(this.shouldQueue(o)){i.push(o);continue}let n=this.buildFlushPayload(o);this.send({...o,payload:n})}this.queue=i}log(...i){this.options.debug&&console.log("[OpenPanel.dev]",...i)}};var $u=()=>{};function Mu(){if(!Lo)Lo=new gu({clientId:Da,clientSecret:ja,apiUrl:ip});return Lo}function Gu(i,o,n){let d=Mu().track(i,{profileId:o,...n}).catch(()=>{});Rn.push(d)}function Su(i,o){let{email:n,...d}=o,e=Mu().identify({profileId:i,...typeof n==="string"?{email:n}:{},firstName:String(d.platform||""),properties:d}).catch(()=>{});Rn.push(e)}async function Pu(){if(await Promise.allSettled(Rn),Rn.length=0,Lo){try{Lo.flush()}catch{}Lo=null}}var Da="d65a6d4b-f702-4af6-98e7-bdb999e01d5f",ja="sec_1e0ea34016bc3a5f8ef5",ip="https://op.shiroha.tech/api",Lo=null,Rn;var Cu=N(()=>{$u();Rn=[]});function Iu(){return{cli_version:op,platform:process.platform,arch:process.arch,locale:no(),node_version:process.version}}function Qu(i){return Bun.hash(i).toString(16).slice(0,8)}var op="0.3.20";var x0=N(()=>{X()});async function qu(){if(No!==null)return No;try{return No=(await z()).telemetryEnabled!==!1,No}catch{return No=!1,!1}}async function Ou(){try{let i=await z();if(i.apiId)return i.apiId;let o=i.providers??[],n=i.defaultProviderId,d=n?o.find((e)=>e.id===n):o[0];if(d){if(d.apiId)return d.apiId;if(d.email)return d.email;return d.id}return"anonymous"}catch{return"anonymous"}}async function H(){if(w0)return;try{if(!await qu())return;let i=await z(),o=await Ou();if(o==="anonymous")return;let d=(i.providers??[]).find((u)=>u.email)?.email,e=await Ki();Su(o,{...d?{email:d}:{},region:e,locale:no(),first_seen_version:np,platform:process.platform,arch:process.arch}),w0=!0}catch{}}function O(i,o){dp(i,o).catch(()=>{})}async function dp(i,o){try{if(!await qu())return;let n=await Ou();Gu(i,n,{...Iu(),...o})}catch{}}async function jo(){await Pu()}function U(){No=null,w0=!1}var np="0.3.20",w0=!1,No=null;var xi=N(()=>{Cu();C();bo();X();x0();x0()});function tp(i,o){let n=[];if(o.phase)n.push(o.phase);if(o.pkgCount>0)n.push(`\u5DF2\u5904\u7406 ${o.pkgCount} \u4E2A\u5305`);return n.push(`${o.elapsedSec}s`),`${i} \xB7 ${n.join(" \xB7 ")}`}async function Bn(i,o,n){let d=Date.now(),e={phase:"\u6B63\u5728\u51C6\u5907",pkgCount:0,elapsedSec:0},u=[],r=()=>{e.elapsedSec=Math.floor((Date.now()-d)/1000),n(tp(o,e))};r();let t=setInterval(r,1000),c=(p)=>{if(!p)return;if(u.push(p),ep.test(p))e.phase="\u89E3\u6790\u4F9D\u8D56";else if(Ju.test(p)){e.phase="\u4E0B\u8F7D\u5E76\u89E3\u538B";let l=p.match(Ju);if(l)e.pkgCount=parseInt(l[1],10)}else if(up.test(p))e.phase="\u5199\u5165 lockfile";else if(rp.test(p))e.phase="\u5B8C\u6210";r()},a=async(p)=>{if(!p)return;let l=p.getReader(),x=new TextDecoder,w="";try{while(!0){let{done:y,value:s}=await l.read();if(y)break;w+=x.decode(s,{stream:!0}).replace(/\r/g,"");let b=w.split(`
279
+ `);w=b.pop()??"";for(let v of b)c(v)}if(w)c(w)}finally{l.releaseLock()}};try{await Promise.all([a(i.stderr),a(i.stdout)])}finally{clearInterval(t)}return u.join(`
280
+ `)}var ep,Ju,up,rp;var y0=N(()=>{ep=/^Resolving dependencies/,Ju=/^Resolved, downloaded and extracted \[(\d+)\]/,up=/^Saved lockfile/,rp=/^(\d+) packages? installed/});function cp(i){return i.replace(/\r/g,`
281
281
  `).replace(/\n{3,}/g,`
282
282
 
283
- `).trim()}function Ju(i,o){for(let n of i.split(/\r?\n/)){let d=n.trim();if(!d)continue;if(o.some((e)=>e.test(d)))return d}return null}function Wo(i,o="\u672A\u77E5\u9519\u8BEF"){let n=up(i??"");if(!n)return o;let d=Ju(n,[/HTTP error!?\s*status:\s*\d+/i,/registry http\s+\d+/i,/models\.dev http\s+\d+/i]);if(d){if(d.match(/\b(?:status:|http)\s*(\d{3})\b/i)?.[1]==="524")return"\u7F51\u7EDC\u8BF7\u6C42\u8D85\u65F6\uFF08HTTP 524\uFF09\uFF0Cregistry \u6216\u4EE3\u7406\u4E0A\u6E38\u672A\u53CA\u65F6\u54CD\u5E94\u3002\u8BF7\u7A0D\u540E\u91CD\u8BD5\uFF0C\u6216\u5207\u6362 TAKO_REGION/global \u540E\u91CD\u8BD5\u3002";return`\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25\uFF1A${d}`}let e=Ju(n,[/\b(error|failed|timeout|timed out|network|ECONN|ETIMEDOUT|ENOTFOUND|EAI_AGAIN)\b/i]);if(e)return e.slice(0,800);return n.length>800?`${n.slice(0,800)}...`:n}function yp(i){try{if(process.stdin.isTTY)process.stdin.setRawMode(i);process.stdin.pause()}catch{}}async function Au(i,o){if(!process.stdin.isTTY||!process.stdout.isTTY)return o;return new Promise((n)=>{let d=Boolean(process.stdin.isRaw),e=()=>{process.stdin.off("data",u),yp(d)},u=(r)=>{let t=r.toString("utf8");if(t==="\x03"){e(),process.kill(process.pid,"SIGINT"),n(o);return}let c=i(t);if(c!==void 0)e(),n(c)};if(process.stdin.on("data",u),process.stdin.resume(),process.stdin.isTTY)process.stdin.setRawMode(!0)})}async function Yu(i){let o=i.defaultValue??!0,n=o?"[Y/n]":"[y/N]";process.stdout.write(`
284
- ? ${i.message} ${n} `);let d=await Au((e)=>{if(e==="\r"||e===`
283
+ `).trim()}function Yu(i,o){for(let n of i.split(/\r?\n/)){let d=n.trim();if(!d)continue;if(o.some((e)=>e.test(d)))return d}return null}function Wo(i,o="\u672A\u77E5\u9519\u8BEF"){let n=cp(i??"");if(!n)return o;let d=Yu(n,[/HTTP error!?\s*status:\s*\d+/i,/registry http\s+\d+/i,/models\.dev http\s+\d+/i]);if(d){if(d.match(/\b(?:status:|http)\s*(\d{3})\b/i)?.[1]==="524")return"\u7F51\u7EDC\u8BF7\u6C42\u8D85\u65F6\uFF08HTTP 524\uFF09\uFF0Cregistry \u6216\u4EE3\u7406\u4E0A\u6E38\u672A\u53CA\u65F6\u54CD\u5E94\u3002\u8BF7\u7A0D\u540E\u91CD\u8BD5\uFF0C\u6216\u5207\u6362 TAKO_REGION/global \u540E\u91CD\u8BD5\u3002";return`\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25\uFF1A${d}`}let e=Yu(n,[/\b(error|failed|timeout|timed out|network|ECONN|ETIMEDOUT|ENOTFOUND|EAI_AGAIN)\b/i]);if(e)return e.slice(0,800);return n.length>800?`${n.slice(0,800)}...`:n}function fp(i){try{if(process.stdin.isTTY)process.stdin.setRawMode(i);process.stdin.pause()}catch{}}async function Xu(i,o){if(!process.stdin.isTTY||!process.stdout.isTTY)return o;return new Promise((n)=>{let d=Boolean(process.stdin.isRaw),e=()=>{process.stdin.off("data",u),fp(d)},u=(r)=>{let t=r.toString("utf8");if(t==="\x03"){e(),process.kill(process.pid,"SIGINT"),n(o);return}let c=i(t);if(c!==void 0)e(),n(c)};if(process.stdin.on("data",u),process.stdin.resume(),process.stdin.isTTY)process.stdin.setRawMode(!0)})}async function Hu(i){let o=i.defaultValue??!0,n=o?"[Y/n]":"[y/N]";process.stdout.write(`
284
+ ? ${i.message} ${n} `);let d=await Xu((e)=>{if(e==="\r"||e===`
285
285
  `)return o;if(e==="\x1B")return!1;if(e==="y"||e==="Y")return!0;if(e==="n"||e==="N")return!1;return},o);return process.stdout.write(d?`Yes
286
286
  `:`No
287
- `),d}async function Hu(i){let o=i.content.split(/\r?\n/).map((n)=>n.trimEnd());process.stdout.write(`
287
+ `),d}async function Zu(i){let o=i.content.split(/\r?\n/).map((n)=>n.trimEnd());process.stdout.write(`
288
288
  === Announcement: ${i.title} ===
289
289
  `);for(let n of o)process.stdout.write(`${n}
290
290
  `);process.stdout.write(i.popup_once?`
291
291
  Press Enter, Esc, or q to close. This announcement is shown once.
292
292
  `:`
293
293
  Press Enter, Esc, or q to close.
294
- `),await Au((n)=>{if(n==="\r"||n===`
294
+ `),await Xu((n)=>{if(n==="\r"||n===`
295
295
  `)return!0;if(n==="\x1B"||n==="q"||n==="Q")return!0;return},!0),process.stdout.write(`
296
- `)}import{join as R}from"path";function sp(i){return i.startsWith(bi)}function Tu(i){return{...process.env,BUN_CONFIG_REGISTRY:i,BUN_INSTALL_CACHE_DIR:zd}}async function fp(){try{if(!await Bun.file(A).exists())return null;let o=Bun.spawn([A,"--version"],{stdout:"pipe",stderr:"pipe"});if(await o.exited,o.exitCode!==0)return null;return(await new Response(o.stdout).text()).trim()}catch{return null}}async function Xu(){return await fp()!==null}async function vp(){if(process.platform==="win32")return!0;try{let o=Bun.spawn(["which","unzip"],{stdout:"pipe",stderr:"pipe"});if(await o.exited,o.exitCode===0)return!0}catch{}L.warn("\u6B63\u5728\u5B89\u88C5\u7CFB\u7EDF\u4F9D\u8D56 (unzip)...");let i=["apt-get update -qq && apt-get install -y -qq unzip","yum install -y -q unzip","dnf install -y -q unzip","pacman -S --noconfirm unzip","apk add --quiet unzip"];for(let o of i)try{let n=Bun.spawn(["bash","-c",`sudo ${o} 2>/dev/null || ${o}`],{stdout:"pipe",stderr:"pipe"});if(await n.exited,n.exitCode===0)return!0}catch{}return!1}async function hp(i){let o=await import("fs/promises"),{join:n}=await import("path"),d=process.platform==="win32",e=d?"bun.exe":"bun",u=await a0();L.info(`\u4ECE npmmirror \u4E0B\u8F7D: ${u}`);let r=await fetch(u);if(!r.ok)throw Error(`\u4E0B\u8F7D\u5931\u8D25: ${r.status}`);let t=n(i,"bun-download.zip");await Bun.write(t,r);let c=n(i,"bin");if(await o.mkdir(c,{recursive:!0}),d){let p=`Expand-Archive -Path "${t}" -DestinationPath "${i}" -Force`,l=Bun.spawn(["powershell","-Command",p],{stdout:"pipe",stderr:"pipe"});if(await l.exited,l.exitCode!==0)throw Error("\u89E3\u538B\u5931\u8D25")}else{let p=Bun.spawn(["unzip","-oq",t,"-d",i],{stdout:"pipe",stderr:"pipe"});if(await p.exited,p.exitCode!==0)throw Error("\u89E3\u538B\u5931\u8D25")}let a=await o.readdir(i);for(let p of a){let l=n(i,p);if((await o.stat(l)).isDirectory()&&p.startsWith("bun-")){let w=n(l,e);try{if(await o.access(w),await o.rename(w,n(c,e)),!d)await o.chmod(n(c,e),493);await o.rm(l,{recursive:!0,force:!0});break}catch{}}}return await o.rm(t,{force:!0}),!0}async function bp(){let i=oo();if(!await vp())return L.error("\u8BF7\u5148\u624B\u52A8\u5B89\u88C5 unzip: apt install unzip / yum install unzip"),!1;await p0(),i.start("\u6B63\u5728\u5B89\u88C5 Tako \u4E13\u5C5E Bun \u8FD0\u884C\u65F6...");try{if(await(await import("fs/promises")).mkdir(bi,{recursive:!0}),await Ki()==="cn")await hp(bi);else if(process.platform==="win32"){let d=`$env:BUN_INSTALL="${bi}"; irm bun.sh/install.ps1 | iex`;if(await Bun.spawn(["powershell","-Command",d],{stdout:"inherit",stderr:"inherit"}).exited!==0)return i.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}else{let d=`BUN_INSTALL="${bi}" ${c0()}`;if(await Bun.spawn(["bash","-c",d],{stdout:"inherit",stderr:"inherit"}).exited!==0)return i.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}return uo=A,i.stop("Tako \u4E13\u5C5E Bun \u5B89\u88C5\u5B8C\u6210"),L.info(`\u5B89\u88C5\u4F4D\u7F6E: ${bi}`),!0}catch(o){return i.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}}async function Lp(){if(await Xu())return uo=A,!0;return L.warn("\u672A\u68C0\u6D4B\u5230 Tako \u4E13\u5C5E Bun\uFF0C\u6B63\u5728\u81EA\u52A8\u5B89\u88C5..."),L.info("\uFF08\u4E0D\u4F1A\u5F71\u54CD\u60A8\u7CFB\u7EDF\u4E2D\u5DF2\u5B89\u88C5\u7684 Node.js \u6216 Bun\uFF09"),await bp()}async function Wi(){if(uo){if(!sp(uo))uo=A;return uo}if(await Xu())return uo=A,A;return A}async function b0(i){try{let o=await ui(),n=await fetch(`${o}/${i}/latest`);if(!n.ok)return null;return(await n.json()).version}catch{return null}}async function Np(i){return(await z()).installedClients[i.id]?.version||null}async function Wp(i,o){let n=R(i,"node_modules",o,"package.json");try{return await Bun.file(n).exists()}catch{return!1}}async function Ku(i){let o=Gi(i.id);return Wp(o,i.package)}async function Vu(i){let o=await Np(i);if(!o)return!0;let n=await b0(i.package);if(!n)return!1;return o!==n}function Zu(i){let{platform:o,arch:n}=process,d=`${o}-${n}`;for(let[e,u]of Object.entries(i))if(e.endsWith(d))return{pkg:e,version:u};return null}async function Fu(i,o,n,d){let e=R(o,"node_modules",i.package,"package.json");try{let u=Bun.file(e);if(!await u.exists())return;let t=(await u.json()).optionalDependencies;if(!t||typeof t!=="object")return;let c=Zu(t);if(!c)return;let p=process.platform==="win32"?`${i.command}.exe`:i.command,l=R(o,"node_modules",c.pkg,p),x=Bun.file(l);if(await x.exists()&&x.size>1024)return;L.info(`\u6B63\u5728\u5B89\u88C5\u5E73\u53F0\u5305 ${c.pkg}...`);for(let w of[c.version,"latest"]){let y=Bun.spawn([n,"add",`${c.pkg}@${w}`],{cwd:o,stdout:"pipe",stderr:"pipe",env:Tu(d)});if(await y.exited,y.exitCode===0)break;if(w==="latest"){let s=await new Response(y.stderr).text();L.warn(`\u5E73\u53F0\u5305\u5B89\u88C5\u5931\u8D25: ${s.slice(0,200)}`)}}}catch(u){L.warn(`\u5E73\u53F0\u5305\u68C0\u67E5\u5F02\u5E38: ${u instanceof Error?u.message:"\u672A\u77E5\u9519\u8BEF"}`)}}async function f0(i,o){let n=await import("fs/promises"),d=R(o,"node_modules",i.package,"package.json");try{let e=Bun.file(d);if(!await e.exists())return!1;let u=await e.json(),r=u.optionalDependencies;if(!r)return!0;let t=Zu(r);if(!t)return L.warn(`\u672A\u627E\u5230\u5339\u914D\u7684\u5E73\u53F0\u5305 (${process.platform}-${process.arch})`),!1;let c=u.bin,a=typeof c==="string"?c:c?.[i.command];if(!a)return!1;let p=R(o,"node_modules",i.package,a),l=process.platform==="win32",x=l?`${i.command}.exe`:i.command,w=R(o,"node_modules",t.pkg,x),y=Bun.file(w);if(await y.exists()&&y.size>1024){if(await Bun.write(p,y),!l)await n.chmod(p,493);return!0}let s=R(o,"node_modules",i.package,"install.cjs");if(await Bun.file(s).exists()){L.info("\u6B63\u5728\u901A\u8FC7 postinstall \u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236...");let f=await Wi(),h=Bun.spawn([f,s],{cwd:R(o,"node_modules",i.package),stdout:"pipe",stderr:"pipe"});if(await h.exited,h.exitCode!==0){let k=await new Response(h.stderr).text();L.warn(`postinstall \u5931\u8D25: ${k.slice(0,200)}`)}let M=Bun.file(p);if(await M.exists()&&M.size>1024){if(!l)await n.chmod(p,493);return!0}}L.info("\u6B63\u5728\u4ECE registry \u4E0B\u8F7D\u539F\u751F\u4E8C\u8FDB\u5236...");let b=await ui();for(let f of[t.version,"latest"])try{let h=await fetch(`${b}/${t.pkg}/${f}`);if(!h.ok)continue;let k=(await h.json()).dist?.tarball;if(!k)continue;let B=R(Q,".tmp-extract-"+Date.now());await n.mkdir(B,{recursive:!0});let li=R(B,"pkg.tgz"),mo=Bun.spawn(["curl","-fsSL","-o",li,k],{stdout:"pipe",stderr:"pipe"});if(await mo.exited,mo.exitCode!==0){let ic=await new Response(mo.stderr).text();L.warn(`curl \u4E0B\u8F7D\u5931\u8D25: ${ic.slice(0,200)}`),await n.rm(B,{recursive:!0,force:!0}).catch(()=>{});continue}let Yo=Bun.file(li).size;if(Yo<1024){L.warn(`\u4E0B\u8F7D\u6587\u4EF6\u5F02\u5E38 (${Yo} bytes, url: ${k.slice(0,100)})`),await n.rm(B,{recursive:!0,force:!0}).catch(()=>{});continue}let Ld=Bun.spawn(["tar","xzf",li,"-C",B,`package/${x}`],{stdout:"pipe",stderr:"pipe"});await Ld.exited;let Dt=R(B,"package",x),Nd=Bun.file(Dt);if(await Nd.exists()&&Nd.size>1024){if(await Bun.write(p,Nd),!l)await n.chmod(p,493);return await n.rm(B,{recursive:!0,force:!0}).catch(()=>{}),!0}let jt=await new Response(Ld.stderr).text();L.warn(`tar \u63D0\u53D6\u5931\u8D25 (tgz=${Yo} bytes, exit=${Ld.exitCode}): ${jt.slice(0,200)}`),await n.rm(B,{recursive:!0,force:!0}).catch(()=>{})}catch(h){L.warn(`\u4E0B\u8F7D\u5931\u8D25: ${h instanceof Error?h.message:"\u672A\u77E5\u9519\u8BEF"}`)}if(b!=="https://registry.npmjs.org")try{let f=`https://registry.npmjs.org/${t.pkg}/-/${t.pkg.split("/").pop()}-${t.version}.tgz`;L.info("\u6B63\u5728\u4ECE npmjs.org \u76F4\u8FDE\u4E0B\u8F7D...");let h=R(Q,".tmp-extract-"+Date.now());await n.mkdir(h,{recursive:!0});let M=R(h,"pkg.tgz"),k=Bun.spawn(["curl","-fsSL","-o",M,f],{stdout:"pipe",stderr:"pipe"});if(await k.exited,k.exitCode===0&&Bun.file(M).size>1024){await Bun.spawn(["tar","xzf",M,"-C",h,`package/${x}`],{stdout:"pipe",stderr:"pipe"}).exited;let li=Bun.file(R(h,"package",x));if(await li.exists()&&li.size>1024){if(await Bun.write(p,li),!l)await n.chmod(p,493);return await n.rm(h,{recursive:!0,force:!0}).catch(()=>{}),!0}}await n.rm(h,{recursive:!0,force:!0}).catch(()=>{})}catch{}return!1}catch(e){return L.warn(`\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236\u5931\u8D25: ${e instanceof Error?e.message:"\u672A\u77E5\u9519\u8BEF"}`),!1}}async function v0(i,o=!1){let n=oo(),d=Gi(i.id);try{if(!await Lp())return{success:!1,error:"Tako \u4E13\u5C5E Bun \u5B89\u88C5\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u6216\u624B\u52A8\u5220\u9664 ~/.tako/bun \u76EE\u5F55\u540E\u91CD\u8BD5"};let e=await Ku(i),u=o||await Vu(i);if(e&&!u)return{success:!0};let r=e?"\u66F4\u65B0":"\u5B89\u88C5",t=`\u6B63\u5728${r} ${i.name}`;n.start(t);let c=await import("fs/promises");await c.mkdir(d,{recursive:!0});let a=R(d,"package.json");if(!await Bun.file(a).exists())await Bun.write(a,JSON.stringify({name:`tako-${i.id}`,private:!0,dependencies:{}},null,2));let l=await Wi(),x=await ui(),w=await Ki();if(L.info(`\u7F51\u7EDC\u73AF\u5883: ${w==="cn"?"\u56FD\u5185\uFF08npmmirror\uFF09":"\u6D77\u5916"} | registry: ${x}`),e){let M=R(d,"bun.lock");await c.rm(M,{force:!0}).catch(()=>{})}let y=Bun.spawn([l,"add",`${i.package}@latest`],{cwd:d,stdout:"pipe",stderr:"pipe",env:Tu(x)}),s=await Jn(y,t,(M)=>n.update(M));if(await y.exited!==0){if(n.stop(),!e)await c.rm(a,{force:!0}).catch(()=>{});return{success:!1,error:Wo(s)}}await Fu(i,d,l,x),await f0(i,d);let f=await b0(i.package),h=(await z()).installedClients[i.id]?.version;if(f){let M=await z();if(M.installedClients[i.id]={version:f,installedAt:new Date().toISOString()},await Ui(M),e&&h)O("client_updated",{client_id:i.id,from_version:h,to_version:f});else O("client_installed",{client_id:i.id,client_version:f})}return n.stop(`${i.name} ${r}\u5B8C\u6210`),{success:!0}}catch(e){return n.stop(),{success:!1,error:Wo(e instanceof Error?e.message:void 0)}}}async function y0(i){try{let o=Bun.file(i);if(!await o.exists())return!0;if(o.size<100)return!0;let d=new Uint8Array(await o.slice(0,4).arrayBuffer());if(d[0]===127&&d[1]===69&&d[2]===76&&d[3]===70)return!1;if(d[0]===254||d[0]===207||d[0]===206||d[0]===202)return!1;if(d[0]===77&&d[1]===90)return!1;return!0}catch{return!0}}async function s0(i){if(i.runtime!=="native")return;let o=Gi(i.id),n=R(o,"node_modules",i.package,"package.json");try{let d=Bun.file(n);if(!await d.exists())return;let u=(await d.json()).bin;if(!u)return;let r=typeof u==="string"?u:u[i.command];if(!r)return;let t=R(o,"node_modules",i.package,r);if(!await y0(t))return;L.info("\u6B63\u5728\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236...");let c=await Wi(),a=await ui();if(await Fu(i,o,c,a),!await f0(i,o)||await y0(t)){if(L.warn("\u539F\u751F\u4E8C\u8FDB\u5236\u4FEE\u590D\u5931\u8D25\uFF0C\u6B63\u5728\u91CD\u65B0\u5B89\u88C5..."),await(await import("fs/promises")).rm(o,{recursive:!0,force:!0}),(await v0(i)).success)if(await f0(i,o),await y0(t))L.warn("\u91CD\u65B0\u5B89\u88C5\u540E\u4ECD\u65E0\u6CD5\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236");else L.success("\u91CD\u65B0\u5B89\u88C5\u5B8C\u6210")}else L.success("\u539F\u751F\u4E8C\u8FDB\u5236\u5B89\u88C5\u5B8C\u6210")}catch{}}async function Eu(i){if(!await Ku(i)){let d=await v0(i);if(d.success)await s0(i);return d}if(await s0(i),await Vu(i)){let d=await b0(i.package),e=(await z()).installedClients[i.id]?.version||"\u672A\u77E5",u=d?`${e} \u2192 ${d}`:"\u6709\u65B0\u7248\u672C\u53EF\u7528";if(L.info(`${i.name} \u53D1\u73B0\u66F4\u65B0: ${u}`),await kp(i.id))return L.info("\u4ECA\u65E5\u5DF2\u8DF3\u8FC7\u66F4\u65B0\uFF0C\u4F7F\u7528\u5F53\u524D\u7248\u672C"),{success:!0};if(!await Yu({message:`\u662F\u5426\u66F4\u65B0 ${i.name}\uFF1F`,defaultValue:!1}))return await zp(i.id),L.info("\u8DF3\u8FC7\u66F4\u65B0\uFF0C\u4F7F\u7528\u5F53\u524D\u7248\u672C"),{success:!0};let t=await v0(i,!0);if(t.success)return await s0(i),t;return L.warn(`\u66F4\u65B0 ${i.name} \u5931\u8D25\uFF1A${t.error??"\u672A\u77E5\u9519\u8BEF"}`),L.info("\u7EE7\u7EED\u4F7F\u7528\u5F53\u524D\u5DF2\u5B89\u88C5\u7248\u672C"),{success:!0,skippedUpdate:!0,error:t.error}}return{success:!0}}async function kp(i){try{let o=Bun.file(h0);if(!await o.exists())return!1;let d=(await o.json())[i];if(!d)return!1;let e=new Date().toISOString().slice(0,10);return d===e}catch{return!1}}async function zp(i){try{let o={},n=Bun.file(h0);if(await n.exists())try{o=await n.json()}catch{}o[i]=new Date().toISOString().slice(0,10),await Bun.write(h0,JSON.stringify(o))}catch{}}var uo=null,h0;var dn=N(()=>{Ci();E();C();bo();xi();x0();h0=R(Q,".update-dismissed.json")});import{homedir as gp}from"os";async function N0(i){try{return(await(await import("fs/promises")).stat(i)).isDirectory()}catch{return!1}}async function _u(i,o,n){let d=await z(),e=d.recentProjects||[],u=new Date().toISOString(),r=e.findIndex((c)=>c.path===i);if(r>=0){let c=e[r],a=c.clientUsage||{},p=a[o]||{count:0,lastAt:u};e[r]={...c,launchCount:c.launchCount+1,lastLaunchedAt:u,lastClientId:o,clientUsage:{...a,[o]:{count:p.count+1,lastAt:u,lastSelectedOptionIds:n??p.lastSelectedOptionIds}}}}else e.push({path:i,launchCount:1,lastLaunchedAt:u,lastClientId:o,clientUsage:{[o]:{count:1,lastAt:u,lastSelectedOptionIds:n}}});let t=e.sort((c,a)=>new Date(a.lastLaunchedAt).getTime()-new Date(c.lastLaunchedAt).getTime()).slice(0,$p);d.recentProjects=t,await K(d)}async function Bn(i){let n=(await z()).recentProjects||[],d=process.cwd(),u=n.find((t)=>t.path===d)?.clientUsage?.[i]?.lastSelectedOptionIds;if(u)return u;return n.filter((t)=>t.path!==d&&t.clientUsage?.[i]?.lastSelectedOptionIds).sort((t,c)=>{let a=new Date(t.clientUsage[i].lastAt).getTime();return new Date(c.clientUsage[i].lastAt).getTime()-a})[0]?.clientUsage?.[i]?.lastSelectedOptionIds??[]}function Mp(i,o){let n=i.clientUsage?.[o];if(n)return new Date(n.lastAt).getTime();if(i.lastClientId===o)return new Date(i.lastLaunchedAt).getTime();return 0}async function Uu(i,o=L0,n=!0){let e=(await z()).recentProjects||[],u=process.cwd(),t=e.filter((a)=>{if(n&&a.path===u)return!1;return a.clientUsage?.[i]||a.lastClientId===i}).map((a)=>({...a,lastUsedTime:Mp(a,i)})).sort((a,p)=>p.lastUsedTime-a.lastUsedTime),c=[];for(let{lastUsedTime:a,...p}of t){if(c.length>=o)break;if(await N0(p.path))c.push(p)}return c}async function Du(){let o=(await z()).recentProjects||[],n=process.cwd();return o.find((e)=>e.path===n)?.lastClientId||null}function W0(i,o=25){let n=gp(),d=i.startsWith(n)?"~"+i.slice(n.length):i;if(d.length>o){let u=d.split("/").pop()||"";if(u.length>o-4)d="..."+u.slice(-o+3);else d=`.../${u}`}return d}function ju(i){let{t:o}=(H(),uc(du)),n=Date.now(),d=new Date(i).getTime(),e=n-d,u=Math.floor(e/60000),r=Math.floor(e/3600000),t=Math.floor(e/86400000),c=Math.floor(t/7),a=Math.floor(t/30);if(u<1)return o("time.justNow");if(u<60)return o("time.minutesAgo",{n:u});if(r<24)return o("time.hoursAgo",{n:r});if(t===1)return o("time.yesterday");if(t<7)return o("time.daysAgo",{n:t});if(t<30)return o("time.weeksAgo",{n:c});return o("time.monthsAgo",{n:a})}var $p=50,L0=3;var An=N(()=>{C()});import{dirname as Cp,join as Ip}from"path";import{mkdir as Qp}from"fs/promises";function er(){return $0??Ip(Q,"model-usage.json")}function g0(){return{counts:{},updatedAt:new Date(0).toISOString()}}async function ur(){try{let i=Bun.file(er());if(!await i.exists())return g0();let o=await i.json(),n=o?.counts;if(!n||typeof n!=="object")return g0();let d={};for(let[e,u]of Object.entries(n))if(typeof u==="number"&&Number.isFinite(u))d[e]=u;return{counts:d,updatedAt:typeof o?.updatedAt==="string"?o.updatedAt:new Date(0).toISOString()}}catch{return g0()}}async function Rp(i){if($0)await Qp(Cp($0),{recursive:!0});else await To();await Bun.write(er(),JSON.stringify(i,null,2))}async function rr(){return{...(await ur()).counts}}async function tr(i){let o=await ur(),n={};for(let[d,e]of Object.entries(o.counts)){let u=e*qp;if(u>=Op)n[d]=u}for(let d of i){if(!d.startsWith("model-"))continue;n[d]=(n[d]??0)+1}await Rp({counts:n,updatedAt:new Date().toISOString()})}var qp=0.95,Op=0.05,$0=null;var M0=N(()=>{C()});function G0(i,o,n){if(o<=0)return;return{usedPct:Math.min(100,Math.max(0,Math.round(i/o*100))),costUsed:i,costLimit:o,...n?{windowMinutes:n}:{}}}function Tp(i,o){if(!Number.isFinite(i)||i<0)return;return{usedPct:0,costUsed:i,...o?{windowMinutes:o}:{}}}async function Xp(i){try{let o=await fetch(`${Y}/apiStats/api/user-quota`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:i}),signal:AbortSignal.timeout(5000)});if(!o.ok)return null;let n=await o.json();if(!n.plan||!n.usage)return null;return{provider:"tako",status:"ok",primary:G0(n.usage.windowCost??0,n.plan.window_cost_limit??0,n.plan.window_minutes),daily:G0(n.usage.dailyCost??0,n.plan.daily_cost_limit??0),secondary:G0(n.usage.weeklyCost??0,n.plan.weekly_cost_limit??0),fetchedAt:Date.now()}}catch{return null}}async function ro(i){let o=Date.now(),n={provider:"tako",status:"error",fetchedAt:o};if(!i)return{...n,hint:"\u7F3A\u5C11 apiId\uFF0C\u8BF7\u91CD\u65B0\u914D\u7F6E Tako Key",error:"missing_api_id"};let d=await Xp(i);if(d)return d;try{let e=await fetch(`${Y}/apiStats/api/user-stats`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:i}),signal:AbortSignal.timeout(5000)});if(!e.ok)return{...n,hint:"Tako \u7528\u91CF\u63A5\u53E3\u4E0D\u53EF\u7528",error:`http_${e.status}`};let u=await e.json(),r=u?.data;if(!u?.success||!r)return{...n,hint:"Tako \u7528\u91CF\u6570\u636E\u683C\u5F0F\u5F02\u5E38",error:"bad_payload"};let t=r.limits?.currentDailyCost??r.usage?.total?.cost??0;return{provider:"tako",status:"ok",daily:Tp(t),fetchedAt:o}}catch(e){return{...n,hint:"Tako \u7528\u91CF\u63A5\u53E3\u8BF7\u6C42\u5931\u8D25",error:String(e.message??e)}}}async function cr(i){let o=await Di();return ro(o)}var S0=N(()=>{C()});function P0(i){if(!i||typeof i.utilization!=="number")return;return{usedPct:Math.min(100,Math.max(0,Math.round(i.utilization))),resetsAt:i.resets_at??void 0}}function Kp(i){return i.authData?.credentials?.claudeAiOauth?.accessToken}async function ar(i){let o=Date.now(),n={provider:"claude-subscription",status:"error",fetchedAt:o},d=Kp(i);if(!d)return{...n,hint:"Claude OAuth \u672A\u4FDD\u5B58\uFF1A\u6309 p \u2192 \u9009\u4E2D\u8D26\u53F7 \u2192 d \u2192 \u91CD\u65B0\u767B\u5F55",error:"missing_access_token"};try{let e=await fetch("https://api.anthropic.com/api/oauth/usage",{method:"GET",headers:{Authorization:`Bearer ${d}`,"anthropic-beta":"oauth-2025-04-20"},signal:AbortSignal.timeout(5000)});if(e.status===401)return{...n,hint:"Claude OAuth \u5DF2\u8FC7\u671F\uFF1A\u6309 p \u2192 \u9009\u4E2D\u8D26\u53F7 \u2192 d \u2192 \u91CD\u65B0\u767B\u5F55",error:"unauthorized"};if(!e.ok)return{...n,hint:"Anthropic \u7528\u91CF\u63A5\u53E3\u4E0D\u53EF\u7528",error:`http_${e.status}`};let u=await e.json(),r=P0(u.seven_day_opus),t=P0(u.five_hour);if(t)t.windowMinutes=300;let c=P0(u.seven_day);if(c)c.windowMinutes=10080;return{provider:"claude-subscription",status:"ok",primary:t,secondary:c,...r?{modelLimits:{opus:r}}:{},fetchedAt:o}}catch(e){return{...n,hint:"Anthropic \u7528\u91CF\u63A5\u53E3\u8BF7\u6C42\u5931\u8D25",error:String(e.message??e)}}}function pr(i){if(!i||typeof i.used_percent!=="number")return;let o={usedPct:Math.min(100,Math.max(0,Math.round(i.used_percent)))};if(typeof i.reset_at==="number")o.resetsAt=new Date(i.reset_at*1000).toISOString();if(typeof i.limit_window_seconds==="number")o.windowMinutes=Math.round(i.limit_window_seconds/60);return o}function Vp(i){let o=i.authData?.tokens;return{accessToken:o?.access_token,accountId:o?.account_id}}async function Zp(i,o){if(await Bun.spawn(["which","codex"],{stdout:"pipe",stderr:"pipe"}).exited!==0)return null;let d=await import("fs/promises"),{mkdtemp:e}=d,{tmpdir:u}=await import("os"),{join:r}=await import("path"),t=await e(r(u(),"tako-codex-"));try{let c={auth_mode:"chatgpt",tokens:{access_token:i,...o?{account_id:o}:{}}};await d.writeFile(r(t,"auth.json"),JSON.stringify(c));let a=[JSON.stringify({jsonrpc:"2.0",method:"initialize",id:0,params:{clientInfo:{name:"tako",version:"1.0"}}}),JSON.stringify({jsonrpc:"2.0",method:"account/rateLimits/read",id:1,params:{}})].join(`
296
+ `)}import{join as J}from"path";function hp(i){return i.startsWith(bi)}function Ku(i){return{...process.env,BUN_CONFIG_REGISTRY:i,BUN_INSTALL_CACHE_DIR:$d}}async function bp(){try{if(!await Bun.file(Y).exists())return null;let o=Bun.spawn([Y,"--version"],{stdout:"pipe",stderr:"pipe"});if(await o.exited,o.exitCode!==0)return null;return(await new Response(o.stdout).text()).trim()}catch{return null}}async function Vu(){return await bp()!==null}async function Lp(){if(process.platform==="win32")return!0;try{let o=Bun.spawn(["which","unzip"],{stdout:"pipe",stderr:"pipe"});if(await o.exited,o.exitCode===0)return!0}catch{}L.warn("\u6B63\u5728\u5B89\u88C5\u7CFB\u7EDF\u4F9D\u8D56 (unzip)...");let i=["apt-get update -qq && apt-get install -y -qq unzip","yum install -y -q unzip","dnf install -y -q unzip","pacman -S --noconfirm unzip","apk add --quiet unzip"];for(let o of i)try{let n=Bun.spawn(["bash","-c",`sudo ${o} 2>/dev/null || ${o}`],{stdout:"pipe",stderr:"pipe"});if(await n.exited,n.exitCode===0)return!0}catch{}return!1}async function Np(i){let o=await import("fs/promises"),{join:n}=await import("path"),d=process.platform==="win32",e=d?"bun.exe":"bun",u=await l0();L.info(`\u4ECE npmmirror \u4E0B\u8F7D: ${u}`);let r=await fetch(u);if(!r.ok)throw Error(`\u4E0B\u8F7D\u5931\u8D25: ${r.status}`);let t=n(i,"bun-download.zip");await Bun.write(t,r);let c=n(i,"bin");if(await o.mkdir(c,{recursive:!0}),d){let p=`Expand-Archive -Path "${t}" -DestinationPath "${i}" -Force`,l=Bun.spawn(["powershell","-Command",p],{stdout:"pipe",stderr:"pipe"});if(await l.exited,l.exitCode!==0)throw Error("\u89E3\u538B\u5931\u8D25")}else{let p=Bun.spawn(["unzip","-oq",t,"-d",i],{stdout:"pipe",stderr:"pipe"});if(await p.exited,p.exitCode!==0)throw Error("\u89E3\u538B\u5931\u8D25")}let a=await o.readdir(i);for(let p of a){let l=n(i,p);if((await o.stat(l)).isDirectory()&&p.startsWith("bun-")){let w=n(l,e);try{if(await o.access(w),await o.rename(w,n(c,e)),!d)await o.chmod(n(c,e),493);await o.rm(l,{recursive:!0,force:!0});break}catch{}}}return await o.rm(t,{force:!0}),!0}async function Wp(){let i=oo();if(!await Lp())return L.error("\u8BF7\u5148\u624B\u52A8\u5B89\u88C5 unzip: apt install unzip / yum install unzip"),!1;await m0(),i.start("\u6B63\u5728\u5B89\u88C5 Tako \u4E13\u5C5E Bun \u8FD0\u884C\u65F6...");try{if(await(await import("fs/promises")).mkdir(bi,{recursive:!0}),await Ki()==="cn")await Np(bi);else if(process.platform==="win32"){let d=`$env:BUN_INSTALL="${bi}"; irm bun.sh/install.ps1 | iex`;if(await Bun.spawn(["powershell","-Command",d],{stdout:"inherit",stderr:"inherit"}).exited!==0)return i.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}else{let d=`BUN_INSTALL="${bi}" ${p0()}`;if(await Bun.spawn(["bash","-c",d],{stdout:"inherit",stderr:"inherit"}).exited!==0)return i.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}return uo=Y,i.stop("Tako \u4E13\u5C5E Bun \u5B89\u88C5\u5B8C\u6210"),L.info(`\u5B89\u88C5\u4F4D\u7F6E: ${bi}`),!0}catch(o){return i.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}}async function kp(){if(await Vu())return uo=Y,!0;return L.warn("\u672A\u68C0\u6D4B\u5230 Tako \u4E13\u5C5E Bun\uFF0C\u6B63\u5728\u81EA\u52A8\u5B89\u88C5..."),L.info("\uFF08\u4E0D\u4F1A\u5F71\u54CD\u60A8\u7CFB\u7EDF\u4E2D\u5DF2\u5B89\u88C5\u7684 Node.js \u6216 Bun\uFF09"),await Wp()}async function Wi(){if(uo){if(!hp(uo))uo=Y;return uo}if(await Vu())return uo=Y,Y;return Y}async function N0(i){try{let o=await ui(),n=await fetch(`${o}/${i}/latest`);if(!n.ok)return null;return(await n.json()).version}catch{return null}}async function zp(i){return(await z()).installedClients[i.id]?.version||null}async function gp(i,o){let n=J(i,"node_modules",o,"package.json");try{return await Bun.file(n).exists()}catch{return!1}}async function Tu(i){let o=Gi(i.id);return gp(o,i.package)}async function Fu(i){let o=await zp(i);if(!o)return!0;let n=await N0(i.package);if(!n)return!1;return o!==n}function Eu(i){let{platform:o,arch:n}=process,d=`${o}-${n}`;for(let[e,u]of Object.entries(i))if(e.endsWith(d))return{pkg:e,version:u};return null}async function _u(i,o,n,d){let e=J(o,"node_modules",i.package,"package.json");try{let u=Bun.file(e);if(!await u.exists())return;let t=(await u.json()).optionalDependencies;if(!t||typeof t!=="object")return;let c=Eu(t);if(!c)return;let p=process.platform==="win32"?`${i.command}.exe`:i.command,l=J(o,"node_modules",c.pkg,p),x=Bun.file(l);if(await x.exists()&&x.size>1024)return;L.info(`\u6B63\u5728\u5B89\u88C5\u5E73\u53F0\u5305 ${c.pkg}...`);for(let w of[c.version,"latest"]){let y=Bun.spawn([n,"add",`${c.pkg}@${w}`],{cwd:o,stdout:"pipe",stderr:"pipe",env:Ku(d)});if(await y.exited,y.exitCode===0)break;if(w==="latest"){let s=await new Response(y.stderr).text();L.warn(`\u5E73\u53F0\u5305\u5B89\u88C5\u5931\u8D25: ${s.slice(0,200)}`)}}}catch(u){L.warn(`\u5E73\u53F0\u5305\u68C0\u67E5\u5F02\u5E38: ${u instanceof Error?u.message:"\u672A\u77E5\u9519\u8BEF"}`)}}async function h0(i,o){let n=await import("fs/promises"),d=J(o,"node_modules",i.package,"package.json");try{let e=Bun.file(d);if(!await e.exists())return!1;let u=await e.json(),r=u.optionalDependencies;if(!r)return!0;let t=Eu(r);if(!t)return L.warn(`\u672A\u627E\u5230\u5339\u914D\u7684\u5E73\u53F0\u5305 (${process.platform}-${process.arch})`),!1;let c=u.bin,a=typeof c==="string"?c:c?.[i.command];if(!a)return!1;let p=J(o,"node_modules",i.package,a),l=process.platform==="win32",x=l?`${i.command}.exe`:i.command,w=J(o,"node_modules",t.pkg,x),y=Bun.file(w);if(await y.exists()&&y.size>1024){if(await Bun.write(p,y),!l)await n.chmod(p,493);return!0}let s=J(o,"node_modules",i.package,"install.cjs");if(await Bun.file(s).exists()){L.info("\u6B63\u5728\u901A\u8FC7 postinstall \u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236...");let v=await Wi(),h=Bun.spawn([v,s],{cwd:J(o,"node_modules",i.package),stdout:"pipe",stderr:"pipe"});if(await h.exited,h.exitCode!==0){let k=await new Response(h.stderr).text();L.warn(`postinstall \u5931\u8D25: ${k.slice(0,200)}`)}let M=Bun.file(p);if(await M.exists()&&M.size>1024){if(!l)await n.chmod(p,493);return!0}}L.info("\u6B63\u5728\u4ECE registry \u4E0B\u8F7D\u539F\u751F\u4E8C\u8FDB\u5236...");let b=await ui();for(let v of[t.version,"latest"])try{let h=await fetch(`${b}/${t.pkg}/${v}`);if(!h.ok)continue;let k=(await h.json()).dist?.tarball;if(!k)continue;let B=J(Q,".tmp-extract-"+Date.now());await n.mkdir(B,{recursive:!0});let li=J(B,"pkg.tgz"),mo=Bun.spawn(["curl","-fsSL","-o",li,k],{stdout:"pipe",stderr:"pipe"});if(await mo.exited,mo.exitCode!==0){let dc=await new Response(mo.stderr).text();L.warn(`curl \u4E0B\u8F7D\u5931\u8D25: ${dc.slice(0,200)}`),await n.rm(B,{recursive:!0,force:!0}).catch(()=>{});continue}let Ao=Bun.file(li).size;if(Ao<1024){L.warn(`\u4E0B\u8F7D\u6587\u4EF6\u5F02\u5E38 (${Ao} bytes, url: ${k.slice(0,100)})`),await n.rm(B,{recursive:!0,force:!0}).catch(()=>{});continue}let Wd=Bun.spawn(["tar","xzf",li,"-C",B,`package/${x}`],{stdout:"pipe",stderr:"pipe"});await Wd.exited;let oc=J(B,"package",x),kd=Bun.file(oc);if(await kd.exists()&&kd.size>1024){if(await Bun.write(p,kd),!l)await n.chmod(p,493);return await n.rm(B,{recursive:!0,force:!0}).catch(()=>{}),!0}let nc=await new Response(Wd.stderr).text();L.warn(`tar \u63D0\u53D6\u5931\u8D25 (tgz=${Ao} bytes, exit=${Wd.exitCode}): ${nc.slice(0,200)}`),await n.rm(B,{recursive:!0,force:!0}).catch(()=>{})}catch(h){L.warn(`\u4E0B\u8F7D\u5931\u8D25: ${h instanceof Error?h.message:"\u672A\u77E5\u9519\u8BEF"}`)}if(b!=="https://registry.npmjs.org")try{let v=`https://registry.npmjs.org/${t.pkg}/-/${t.pkg.split("/").pop()}-${t.version}.tgz`;L.info("\u6B63\u5728\u4ECE npmjs.org \u76F4\u8FDE\u4E0B\u8F7D...");let h=J(Q,".tmp-extract-"+Date.now());await n.mkdir(h,{recursive:!0});let M=J(h,"pkg.tgz"),k=Bun.spawn(["curl","-fsSL","-o",M,v],{stdout:"pipe",stderr:"pipe"});if(await k.exited,k.exitCode===0&&Bun.file(M).size>1024){await Bun.spawn(["tar","xzf",M,"-C",h,`package/${x}`],{stdout:"pipe",stderr:"pipe"}).exited;let li=Bun.file(J(h,"package",x));if(await li.exists()&&li.size>1024){if(await Bun.write(p,li),!l)await n.chmod(p,493);return await n.rm(h,{recursive:!0,force:!0}).catch(()=>{}),!0}}await n.rm(h,{recursive:!0,force:!0}).catch(()=>{})}catch{}return!1}catch(e){return L.warn(`\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236\u5931\u8D25: ${e instanceof Error?e.message:"\u672A\u77E5\u9519\u8BEF"}`),!1}}async function b0(i,o=!1){let n=oo(),d=Gi(i.id);try{if(!await kp())return{success:!1,error:"Tako \u4E13\u5C5E Bun \u5B89\u88C5\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u6216\u624B\u52A8\u5220\u9664 ~/.tako/bun \u76EE\u5F55\u540E\u91CD\u8BD5"};let e=await Tu(i),u=o||await Fu(i);if(e&&!u)return{success:!0};let r=e?"\u66F4\u65B0":"\u5B89\u88C5",t=`\u6B63\u5728${r} ${i.name}`;n.start(t);let c=await import("fs/promises");await c.mkdir(d,{recursive:!0});let a=J(d,"package.json");if(!await Bun.file(a).exists())await Bun.write(a,JSON.stringify({name:`tako-${i.id}`,private:!0,dependencies:{}},null,2));let l=await Wi(),x=await ui(),w=await Ki();if(L.info(`\u7F51\u7EDC\u73AF\u5883: ${w==="cn"?"\u56FD\u5185\uFF08npmmirror\uFF09":"\u6D77\u5916"} | registry: ${x}`),e){let M=J(d,"bun.lock");await c.rm(M,{force:!0}).catch(()=>{})}let y=Bun.spawn([l,"add",`${i.package}@latest`],{cwd:d,stdout:"pipe",stderr:"pipe",env:Ku(x)}),s=await Bn(y,t,(M)=>n.update(M));if(await y.exited!==0){if(n.stop(),!e)await c.rm(a,{force:!0}).catch(()=>{});return{success:!1,error:Wo(s)}}await _u(i,d,l,x),await h0(i,d);let v=await N0(i.package),h=(await z()).installedClients[i.id]?.version;if(v){let M=await z();if(M.installedClients[i.id]={version:v,installedAt:new Date().toISOString()},await Ui(M),e&&h)O("client_updated",{client_id:i.id,from_version:h,to_version:v});else O("client_installed",{client_id:i.id,client_version:v})}return n.stop(`${i.name} ${r}\u5B8C\u6210`),{success:!0}}catch(e){return n.stop(),{success:!1,error:Wo(e instanceof Error?e.message:void 0)}}}async function v0(i){try{let o=Bun.file(i);if(!await o.exists())return!0;if(o.size<100)return!0;let d=new Uint8Array(await o.slice(0,4).arrayBuffer());if(d[0]===127&&d[1]===69&&d[2]===76&&d[3]===70)return!1;if(d[0]===254||d[0]===207||d[0]===206||d[0]===202)return!1;if(d[0]===77&&d[1]===90)return!1;return!0}catch{return!0}}async function f0(i){if(i.runtime!=="native")return;let o=Gi(i.id),n=J(o,"node_modules",i.package,"package.json");try{let d=Bun.file(n);if(!await d.exists())return;let u=(await d.json()).bin;if(!u)return;let r=typeof u==="string"?u:u[i.command];if(!r)return;let t=J(o,"node_modules",i.package,r);if(!await v0(t))return;L.info("\u6B63\u5728\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236...");let c=await Wi(),a=await ui();if(await _u(i,o,c,a),!await h0(i,o)||await v0(t)){if(L.warn("\u539F\u751F\u4E8C\u8FDB\u5236\u4FEE\u590D\u5931\u8D25\uFF0C\u6B63\u5728\u91CD\u65B0\u5B89\u88C5..."),await(await import("fs/promises")).rm(o,{recursive:!0,force:!0}),(await b0(i)).success)if(await h0(i,o),await v0(t))L.warn("\u91CD\u65B0\u5B89\u88C5\u540E\u4ECD\u65E0\u6CD5\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236");else L.success("\u91CD\u65B0\u5B89\u88C5\u5B8C\u6210")}else L.success("\u539F\u751F\u4E8C\u8FDB\u5236\u5B89\u88C5\u5B8C\u6210")}catch{}}async function Uu(i){if(!await Tu(i)){let d=await b0(i);if(d.success)await f0(i);return d}if(await f0(i),await Fu(i)){let d=await N0(i.package),e=(await z()).installedClients[i.id]?.version||"\u672A\u77E5",u=d?`${e} \u2192 ${d}`:"\u6709\u65B0\u7248\u672C\u53EF\u7528";if(L.info(`${i.name} \u53D1\u73B0\u66F4\u65B0: ${u}`),await $p(i.id))return L.info("\u4ECA\u65E5\u5DF2\u8DF3\u8FC7\u66F4\u65B0\uFF0C\u4F7F\u7528\u5F53\u524D\u7248\u672C"),{success:!0};if(!await Hu({message:`\u662F\u5426\u66F4\u65B0 ${i.name}\uFF1F`,defaultValue:!1}))return await Mp(i.id),L.info("\u8DF3\u8FC7\u66F4\u65B0\uFF0C\u4F7F\u7528\u5F53\u524D\u7248\u672C"),{success:!0};let t=await b0(i,!0);if(t.success)return await f0(i),t;return L.warn(`\u66F4\u65B0 ${i.name} \u5931\u8D25\uFF1A${t.error??"\u672A\u77E5\u9519\u8BEF"}`),L.info("\u7EE7\u7EED\u4F7F\u7528\u5F53\u524D\u5DF2\u5B89\u88C5\u7248\u672C"),{success:!0,skippedUpdate:!0,error:t.error}}return{success:!0}}async function $p(i){try{let o=Bun.file(L0);if(!await o.exists())return!1;let d=(await o.json())[i];if(!d)return!1;let e=new Date().toISOString().slice(0,10);return d===e}catch{return!1}}async function Mp(i){try{let o={},n=Bun.file(L0);if(await n.exists())try{o=await n.json()}catch{}o[i]=new Date().toISOString().slice(0,10),await Bun.write(L0,JSON.stringify(o))}catch{}}var uo=null,L0;var dn=N(()=>{Ci();E();C();bo();xi();y0();L0=J(Q,".update-dismissed.json")});import{homedir as Gp}from"os";async function k0(i){try{return(await(await import("fs/promises")).stat(i)).isDirectory()}catch{return!1}}async function Du(i,o,n){let d=await z(),e=d.recentProjects||[],u=new Date().toISOString(),r=e.findIndex((c)=>c.path===i);if(r>=0){let c=e[r],a=c.clientUsage||{},p=a[o]||{count:0,lastAt:u};e[r]={...c,launchCount:c.launchCount+1,lastLaunchedAt:u,lastClientId:o,clientUsage:{...a,[o]:{count:p.count+1,lastAt:u,lastSelectedOptionIds:n??p.lastSelectedOptionIds}}}}else e.push({path:i,launchCount:1,lastLaunchedAt:u,lastClientId:o,clientUsage:{[o]:{count:1,lastAt:u,lastSelectedOptionIds:n}}});let t=e.sort((c,a)=>new Date(a.lastLaunchedAt).getTime()-new Date(c.lastLaunchedAt).getTime()).slice(0,Sp);d.recentProjects=t,await K(d)}async function Yn(i){let n=(await z()).recentProjects||[],d=process.cwd(),u=n.find((t)=>t.path===d)?.clientUsage?.[i]?.lastSelectedOptionIds;if(u)return u;return n.filter((t)=>t.path!==d&&t.clientUsage?.[i]?.lastSelectedOptionIds).sort((t,c)=>{let a=new Date(t.clientUsage[i].lastAt).getTime();return new Date(c.clientUsage[i].lastAt).getTime()-a})[0]?.clientUsage?.[i]?.lastSelectedOptionIds??[]}function Pp(i,o){let n=i.clientUsage?.[o];if(n)return new Date(n.lastAt).getTime();if(i.lastClientId===o)return new Date(i.lastLaunchedAt).getTime();return 0}async function ju(i,o=W0,n=!0){let e=(await z()).recentProjects||[],u=process.cwd(),t=e.filter((a)=>{if(n&&a.path===u)return!1;return a.clientUsage?.[i]||a.lastClientId===i}).map((a)=>({...a,lastUsedTime:Pp(a,i)})).sort((a,p)=>p.lastUsedTime-a.lastUsedTime),c=[];for(let{lastUsedTime:a,...p}of t){if(c.length>=o)break;if(await k0(p.path))c.push(p)}return c}async function ir(){let o=(await z()).recentProjects||[],n=process.cwd();return o.find((e)=>e.path===n)?.lastClientId||null}function z0(i,o=25){let n=Gp(),d=i.startsWith(n)?"~"+i.slice(n.length):i;if(d.length>o){let u=d.split("/").pop()||"";if(u.length>o-4)d="..."+u.slice(-o+3);else d=`.../${u}`}return d}function or(i){let{t:o}=(X(),cc(uu)),n=Date.now(),d=new Date(i).getTime(),e=n-d,u=Math.floor(e/60000),r=Math.floor(e/3600000),t=Math.floor(e/86400000),c=Math.floor(t/7),a=Math.floor(t/30);if(u<1)return o("time.justNow");if(u<60)return o("time.minutesAgo",{n:u});if(r<24)return o("time.hoursAgo",{n:r});if(t===1)return o("time.yesterday");if(t<7)return o("time.daysAgo",{n:t});if(t<30)return o("time.weeksAgo",{n:c});return o("time.monthsAgo",{n:a})}var Sp=50,W0=3;var An=N(()=>{C()});import{dirname as Op,join as Jp}from"path";import{mkdir as Rp}from"fs/promises";function tr(){return G0??Jp(Q,"model-usage.json")}function M0(){return{counts:{},updatedAt:new Date(0).toISOString()}}async function cr(){try{let i=Bun.file(tr());if(!await i.exists())return M0();let o=await i.json(),n=o?.counts;if(!n||typeof n!=="object")return M0();let d={};for(let[e,u]of Object.entries(n))if(typeof u==="number"&&Number.isFinite(u))d[e]=u;return{counts:d,updatedAt:typeof o?.updatedAt==="string"?o.updatedAt:new Date(0).toISOString()}}catch{return M0()}}async function Ap(i){if(G0)await Rp(Op(G0),{recursive:!0});else await Ho();await Bun.write(tr(),JSON.stringify(i,null,2))}async function ar(){return{...(await cr()).counts}}async function pr(i){let o=await cr(),n={};for(let[d,e]of Object.entries(o.counts)){let u=e*Bp;if(u>=Yp)n[d]=u}for(let d of i){if(!d.startsWith("model-"))continue;n[d]=(n[d]??0)+1}await Ap({counts:n,updatedAt:new Date().toISOString()})}var Bp=0.95,Yp=0.05,G0=null;var S0=N(()=>{C()});function P0(i,o,n){if(o<=0)return;return{usedPct:Math.min(100,Math.max(0,Math.round(i/o*100))),costUsed:i,costLimit:o,...n?{windowMinutes:n}:{}}}function Tp(i,o){if(!Number.isFinite(i)||i<0)return;return{usedPct:0,costUsed:i,...o?{windowMinutes:o}:{}}}async function Fp(i){try{let o=await fetch(`${A}/apiStats/api/user-quota`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:i}),signal:AbortSignal.timeout(5000)});if(!o.ok)return null;let n=await o.json();if(!n.plan||!n.usage)return null;return{provider:"tako",status:"ok",primary:P0(n.usage.windowCost??0,n.plan.window_cost_limit??0,n.plan.window_minutes),daily:P0(n.usage.dailyCost??0,n.plan.daily_cost_limit??0),secondary:P0(n.usage.weeklyCost??0,n.plan.weekly_cost_limit??0),fetchedAt:Date.now()}}catch{return null}}async function ro(i){let o=Date.now(),n={provider:"tako",status:"error",fetchedAt:o};if(!i)return{...n,hint:"\u7F3A\u5C11 apiId\uFF0C\u8BF7\u91CD\u65B0\u914D\u7F6E Tako Key",error:"missing_api_id"};let d=await Fp(i);if(d)return d;try{let e=await fetch(`${A}/apiStats/api/user-stats`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:i}),signal:AbortSignal.timeout(5000)});if(!e.ok)return{...n,hint:"Tako \u7528\u91CF\u63A5\u53E3\u4E0D\u53EF\u7528",error:`http_${e.status}`};let u=await e.json(),r=u?.data;if(!u?.success||!r)return{...n,hint:"Tako \u7528\u91CF\u6570\u636E\u683C\u5F0F\u5F02\u5E38",error:"bad_payload"};let t=r.limits?.currentDailyCost??r.usage?.total?.cost??0;return{provider:"tako",status:"ok",daily:Tp(t),fetchedAt:o}}catch(e){return{...n,hint:"Tako \u7528\u91CF\u63A5\u53E3\u8BF7\u6C42\u5931\u8D25",error:String(e.message??e)}}}async function lr(i){let o=await Di();return ro(o)}var C0=N(()=>{C()});function I0(i){if(!i||typeof i.utilization!=="number")return;return{usedPct:Math.min(100,Math.max(0,Math.round(i.utilization))),resetsAt:i.resets_at??void 0}}function Ep(i){return i.authData?.credentials?.claudeAiOauth?.accessToken}async function mr(i){let o=Date.now(),n={provider:"claude-subscription",status:"error",fetchedAt:o},d=Ep(i);if(!d)return{...n,hint:"Claude OAuth \u672A\u4FDD\u5B58\uFF1A\u6309 p \u2192 \u9009\u4E2D\u8D26\u53F7 \u2192 d \u2192 \u91CD\u65B0\u767B\u5F55",error:"missing_access_token"};try{let e=await fetch("https://api.anthropic.com/api/oauth/usage",{method:"GET",headers:{Authorization:`Bearer ${d}`,"anthropic-beta":"oauth-2025-04-20"},signal:AbortSignal.timeout(5000)});if(e.status===401)return{...n,hint:"Claude OAuth \u5DF2\u8FC7\u671F\uFF1A\u6309 p \u2192 \u9009\u4E2D\u8D26\u53F7 \u2192 d \u2192 \u91CD\u65B0\u767B\u5F55",error:"unauthorized"};if(!e.ok)return{...n,hint:"Anthropic \u7528\u91CF\u63A5\u53E3\u4E0D\u53EF\u7528",error:`http_${e.status}`};let u=await e.json(),r=I0(u.seven_day_opus),t=I0(u.five_hour);if(t)t.windowMinutes=300;let c=I0(u.seven_day);if(c)c.windowMinutes=10080;return{provider:"claude-subscription",status:"ok",primary:t,secondary:c,...r?{modelLimits:{opus:r}}:{},fetchedAt:o}}catch(e){return{...n,hint:"Anthropic \u7528\u91CF\u63A5\u53E3\u8BF7\u6C42\u5931\u8D25",error:String(e.message??e)}}}function xr(i){if(!i||typeof i.used_percent!=="number")return;let o={usedPct:Math.min(100,Math.max(0,Math.round(i.used_percent)))};if(typeof i.reset_at==="number")o.resetsAt=new Date(i.reset_at*1000).toISOString();if(typeof i.limit_window_seconds==="number")o.windowMinutes=Math.round(i.limit_window_seconds/60);return o}function _p(i){let o=i.authData?.tokens;return{accessToken:o?.access_token,accountId:o?.account_id}}async function Up(i,o){if(await Bun.spawn(["which","codex"],{stdout:"pipe",stderr:"pipe"}).exited!==0)return null;let d=await import("fs/promises"),{mkdtemp:e}=d,{tmpdir:u}=await import("os"),{join:r}=await import("path"),t=await e(r(u(),"tako-codex-"));try{let c={auth_mode:"chatgpt",tokens:{access_token:i,...o?{account_id:o}:{}}};await d.writeFile(r(t,"auth.json"),JSON.stringify(c));let a=[JSON.stringify({jsonrpc:"2.0",method:"initialize",id:0,params:{clientInfo:{name:"tako",version:"1.0"}}}),JSON.stringify({jsonrpc:"2.0",method:"account/rateLimits/read",id:1,params:{}})].join(`
297
297
  `)+`
298
298
  `,p=Bun.spawn(["codex","app-server"],{stdin:"pipe",stdout:"pipe",stderr:"pipe",env:{...process.env,CODEX_HOME:t}});p.stdin.write(a);let l=new Promise((w)=>setTimeout(w,8000));await Promise.race([p.exited,l]),p.kill();let x=await new Response(p.stdout).text();for(let w of x.split(`
299
- `)){let y=w.trim();if(!y)continue;try{let s=JSON.parse(y);if(s.id!==1)continue;if(s.error)return null;return{status:200,body:JSON.stringify(s.result?.rateLimits??s.result??{})}}catch{continue}}return null}finally{d.rm(t,{recursive:!0,force:!0}).catch(()=>{})}}async function Fp(i,o){let n=["-s","-S","--max-time","10","-w",`
300
- __HTTP__%{http_code}`,"https://chatgpt.com/backend-api/wham/usage","-H",`Authorization: Bearer ${i}`,"-H","User-Agent: codex_cli_rs/0.50.0","-H","Accept: application/json"];if(o)n.push("-H",`ChatGPT-Account-Id: ${o}`);let d=Bun.spawn(["curl",...n],{stdout:"pipe",stderr:"pipe"}),e=await new Response(d.stdout).text();await d.exited;let u=e.match(/^([\s\S]*?)\n__HTTP__(\d+)$/);return{body:u?u[1]:e,status:u?parseInt(u[2],10):0}}async function lr(i){let o=Date.now(),n={provider:"codex-subscription",status:"error",fetchedAt:o},{accessToken:d,accountId:e}=Vp(i);if(!d)return{...n,hint:"Codex OAuth \u672A\u4FDD\u5B58\uFF1A\u6309 p \u2192 \u9009\u4E2D\u8D26\u53F7 \u2192 d \u2192 \u91CD\u65B0\u767B\u5F55",error:"missing_access_token"};try{let{status:u,body:r}=await _p(d,e);if(u===401)return{...n,hint:"Codex OAuth \u5DF2\u8FC7\u671F\uFF1A\u6309 p \u2192 \u9009\u4E2D\u8D26\u53F7 \u2192 d \u2192 \u91CD\u65B0\u767B\u5F55",error:"unauthorized"};if(u!==200)return{...n,hint:u===0?"ChatGPT \u7528\u91CF\u83B7\u53D6\u5931\u8D25\uFF1A\u672C\u673A\u7F51\u7EDC\u65E0\u6CD5\u8BBF\u95EE chatgpt.com\uFF08\u53EF\u80FD IP \u88AB Cloudflare \u62E6\u622A\uFF0C\u53EF\u8BD5 HTTPS_PROXY\uFF09":"ChatGPT \u7528\u91CF\u63A5\u53E3\u4E0D\u53EF\u7528",error:`http_${u}`};let t=JSON.parse(r),c=t.rate_limit??t.rateLimits??t,a=c.primary_window??c.primary,p=c.secondary_window??c.secondary;return{provider:"codex-subscription",status:"ok",primary:pr(a),secondary:pr(p),planType:t.plan_type??t.planType,fetchedAt:o}}catch(u){return{...n,hint:"ChatGPT \u7528\u91CF\u63A5\u53E3\u8BF7\u6C42\u5931\u8D25",error:String(u.message??u)}}}var Ep=async(i,o)=>{let n=await Zp(i,o).catch(()=>null);if(n)return n;return Fp(i,o)},_p;var mr=N(()=>{_p=Ep});var I0={};ii(I0,{invalidateQuotaCache:()=>dl,getOfficialQuota:()=>C0,fetchTakoQuotaByApiId:()=>ro,_setQuotaDiskCachePathForTest:()=>il,_clearQuotaCache:()=>nl});import{homedir as Up}from"os";import{join as Dp}from"path";function jp(i){return`${i.type}:${i.id}`}function yr(){return wr??Dp(Up(),".tako","quota-cache.json")}function il(i){wr=i}function sr(){try{let o=$("fs").readFileSync(yr(),"utf-8"),n=JSON.parse(o);return typeof n==="object"&&n!==null?n:{}}catch{return{}}}function fr(i){try{let o=$("fs"),n=yr(),d=n.slice(0,n.lastIndexOf("/"));if(d)o.mkdirSync(d,{recursive:!0});let e=`${n}.tmp.${process.pid}`;o.writeFileSync(e,JSON.stringify(i)),o.renameSync(e,n)}catch{}}function ol(i){return{provider:i.type,status:"unsupported",fetchedAt:Date.now()}}async function C0(i){let o=jp(i),n=Date.now(),d=ko.get(o);if(d&&n-d.fetchedAt<xr)return d;let e=sr(),u=e[o];if(u&&n-u.fetchedAt<xr)return ko.set(o,u),u;let r;switch(i.type){case"tako":r=await cr(i);break;case"claude-subscription":r=await ar(i);break;case"codex-subscription":r=await lr(i);break;default:r=ol(i);break}return ko.set(o,r),e[o]=r,fr(e),r}function nl(){ko.clear()}function dl(i,o){for(let n of[...ko.keys()])if(n.endsWith(`:${i}`))ko.delete(n);try{let n=sr(),d=!1;for(let e of Object.keys(n))if(e.endsWith(`:${i}`))delete n[e],d=!0;if(d)fr(n)}catch{}}var xr=60000,ko,wr=null;var Vn=N(()=>{S0();mr();ko=new Map});var A0={};ii(A0,{listAvailableVersions:()=>R0,installAtVersion:()=>J0,getInstalledVersion:()=>B0});import{join as _n}from"path";async function R0(i){let n=`${await ui()}/${encodeURIComponent(i).replace("%40","@")}`,d=await fetch(n,{signal:AbortSignal.timeout(1e4)});if(!d.ok)throw Error(`registry http ${d.status}`);let e=await d.json(),u=Object.keys(e.versions??{});if(!u.length)throw Error("no versions found");let r=e.time??{},t=u.map((c)=>({version:c,publishedAt:r[c],isCurrent:!1}));return t.sort((c,a)=>{let p=c.publishedAt?Date.parse(c.publishedAt):0;return(a.publishedAt?Date.parse(a.publishedAt):0)-p}),t}async function J0(i,o){let n=await import("fs/promises"),d=Gi(i.id);await n.mkdir(d,{recursive:!0});let e=_n(d,"bun.lock"),u=_n(d,"node_modules");await n.rm(e,{force:!0}).catch(()=>{}),await n.rm(u,{recursive:!0,force:!0}).catch(()=>{});let r=_n(d,"package.json");await Bun.write(r,JSON.stringify({name:`tako-${i.id}-host`,version:"0.0.0",private:!0},null,2));let t=await ui(),{detectRegion:c}=await Promise.resolve().then(() => (bo(),Wu)),a=await c(),{log:p}=await Promise.resolve().then(() => (Ci(),nu));p.info(`\u7F51\u7EDC\u73AF\u5883: ${a==="cn"?"\u56FD\u5185":"\u6D77\u5916"} | registry: ${t}`);let l=Bun.spawn([A,"add",`${i.package}@${o}`],{cwd:d,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:t}});if(await l.exited,l.exitCode!==0){let w=await new Response(l.stderr).text();throw Error(`bun add ${i.package}@${o} failed: ${w.slice(0,500).trim()}`)}let x=await z();await Ui({installedClients:{...x.installedClients,[i.id]:{version:o,installedAt:new Date().toISOString()}}})}async function B0(i){let o=Gi(i.id),n=_n(o,"node_modules",i.package,"package.json");try{let e=Bun.file(n);if(await e.exists()){let u=await e.json();if(u.version)return u.version}}catch{}return(await z()).installedClients[i.id]?.version??null}var Un=N(()=>{E();C();bo()});var Wr={};ii(Wr,{runQuotaCommand:()=>kl,buildQuotaPayload:()=>Nr});async function Ll(i){try{let n=await(await fetch(`${Y}/apiStats/api/get-key-id`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:i}),signal:AbortSignal.timeout(5000)})).json();if(n.success&&n.data?.id)return{valid:!0,apiId:n.data.id};return{valid:!1,error:n.error||"Tako key validation failed"}}catch(o){return{valid:!1,error:String(o.message??o)}}}function Nl(i){let o=(i.providers??[]).find((e)=>e.type==="tako"),n=o?o.apiId||"":i.apiId||"",d=o?o.apiKey||"":i.apiKey||"";if(!n&&!d)return null;return{apiId:n,apiKey:d}}function Y0(i){if(!i)return;let o={usedPct:i.usedPct,...i.windowMinutes?{windowMinutes:i.windowMinutes}:{},...i.resetsAt?{resetsAt:i.resetsAt}:{}};if(typeof i.costUsed==="number")o.used=i.costUsed;if(typeof i.costLimit==="number"){o.limit=i.costLimit;let n=i.costUsed??0;o.remaining=Math.max(0,i.costLimit-n),o.remainingPct=Math.max(0,Math.min(100,100-Math.round(i.usedPct)))}return o}function un(i,o,n){return{exitCode:1,payload:{provider:"tako",status:"error",error:i,message:o,...n?{hint:n}:{}}}}function Lr(i){return{exitCode:0,payload:{provider:"tako",status:"ok",fiveHour:Y0(i.primary),daily:Y0(i.daily),weekly:Y0(i.secondary),fetchedAt:new Date(i.fetchedAt).toISOString()}}}function Wl(i){return un(i.error||"quota_unavailable",i.hint||"Tako quota is unavailable",i.hint)}async function Nr(i,o={}){let n=o.fetchQuotaByApiId??ro,d=o.resolveApiIdFromKey??Ll,e=Nl(i);if(!e)return un("missing_tako_provider","Tako provider is not configured");let u=null;if(e.apiId){if(u=await n(e.apiId),u.status==="ok")return Lr(u)}if(e.apiKey){let r=await d(e.apiKey);if(r.valid&&r.apiId&&r.apiId!==e.apiId){if(u=await n(r.apiId),u.status==="ok")return Lr(u)}else if(!e.apiId)return un("api_id_refresh_failed",r.error||"Unable to resolve Tako API ID from API key")}if(u)return Wl(u);return un("missing_api_id","Tako API ID is not configured")}async function kl(i=[],o={}){if(i.length>0){let e=un("invalid_args","Usage: tako quota");return process.stdout.write(`${JSON.stringify(e.payload)}
301
- `),e.exitCode}let n=o.loadConfig??z,d=await Nr(await n(),o);return process.stdout.write(`${JSON.stringify(d.payload)}
302
- `),d.exitCode}var kr=N(()=>{C();S0()});import{join as Vi}from"path";import{homedir as zl}from"os";import{mkdir as gl,readFile as Dn,writeFile as K0,rename as V0,readdir as zr,rm as $l,appendFile as gr}from"fs/promises";function yi(i){return Vi(H0,i)}function $r(i){return Vi(yi(i),"meta.json")}function D(i){return Vi(yi(i),"log.ndjson")}function rn(i){return Vi(yi(i),"approvals")}function T0(i,o){return Vi(rn(i),`${o}.req.json`)}function X0(i,o){return Vi(rn(i),`${o}.resp.json`)}async function tn(i){await gl(i,{recursive:!0})}async function Mr(i){await tn(yi(i.sid)),await j(i),await gr(D(i.sid),"")}async function zo(i){try{let o=await Dn($r(i),"utf-8");return JSON.parse(o)}catch{return null}}async function j(i){let o=yi(i.sid);await tn(o);let n=Vi(o,"meta.json.tmp"),d={};for(let[e,u]of Object.entries(i)){if(e.startsWith("_"))continue;d[e]=u}await K0(n,JSON.stringify(d,null,2),"utf-8"),await V0(n,$r(i.sid))}async function si(i,o){await gr(D(i),JSON.stringify(o)+`
303
- `,"utf-8")}async function jn(){await tn(H0);let i=await zr(H0,{withFileTypes:!0}),o=[];for(let n of i){if(!n.isDirectory())continue;let d=await zo(n.name);if(d)o.push(d)}return o.sort((n,d)=>d.lastActiveAt-n.lastActiveAt),o}async function id(i,o){let n;try{n=await Dn(D(i),"utf-8")}catch{return[]}let e=n.split(`
304
- `).filter(Boolean).slice(-o),u=[];for(let r of e)try{u.push(JSON.parse(r))}catch{}return u}async function Z0(i){try{await $l(yi(i),{recursive:!0,force:!0})}catch{}}async function Gr(i,o){await tn(rn(i));let n=T0(i,o.approvalId)+".tmp";await K0(n,JSON.stringify(o,null,2),"utf-8"),await V0(n,T0(i,o.approvalId))}async function Ml(i,o){try{return JSON.parse(await Dn(T0(i,o),"utf-8"))}catch{return null}}async function od(i,o,n){await tn(rn(i));let d=X0(i,o)+".tmp";await K0(d,JSON.stringify(n,null,2),"utf-8"),await V0(d,X0(i,o))}async function cn(i,o){try{return JSON.parse(await Dn(X0(i,o),"utf-8"))}catch{return null}}async function an(i){try{let o=await zr(rn(i)),n=[];for(let d of o){if(!d.endsWith(".req.json"))continue;let e=d.slice(0,-9),u=await Ml(i,e);if(!u)continue;if(!await cn(i,e))n.push(u)}return n.sort((d,e)=>d.requestedAt-e.requestedAt),n}catch{return[]}}var H0;var Zi=N(()=>{H0=Vi(zl(),".tako","agent-sessions")});import{spawn as Gl}from"child_process";async function nd(i,o,n){await si(i,o),n?.onFrame?.(o)}function Sl(i,o){let n=[],d=gi();if(i?.type==="assistant"&&i?.message?.content){for(let e of i.message.content)if(e?.type==="text"&&typeof e.text==="string")n.push({ts:d,kind:"text_delta",text:e.text,itemId:i.message.id});else if(e?.type==="tool_use")n.push({ts:d,kind:"tool_use",name:e.name??"?",input:e.input,itemId:e.id});else if(e?.type==="thinking"&&typeof e.thinking==="string")n.push({ts:d,kind:"reasoning_delta",text:e.thinking})}else if(i?.type==="user"&&i?.message?.content){for(let e of i.message.content)if(e?.type==="tool_result")n.push({ts:d,kind:"tool_result",itemId:e.tool_use_id,output:e.content})}else if(i?.type==="result"){if(i.is_error)n.push({ts:d,kind:"error",message:typeof i.result==="string"?i.result:"claude reported error",raw:i});n.push({ts:d,kind:"turn_completed",turnId:o,stopReason:i.stop_reason,usage:i.usage})}else if(i?.type==="stream_event"&&i?.event?.delta?.thinking)n.push({ts:d,kind:"reasoning_delta",text:String(i.event.delta.thinking)});return n}function Pr(i,o){return i.__env=o,i}var gi=()=>Date.now(),pn,Sr;var Cr=N(()=>{Zi();E();dn();pn=new Map,Sr={backend:"claude",async start(i){let o={sid:i.sid,backend:"claude",name:i.name,model:i.model,workdir:i.workdir,status:"idle",turnCount:0,createdAt:gi(),lastActiveAt:gi(),providerId:i.providerId};return await si(o.sid,{ts:gi(),kind:"session_started",sid:o.sid,backend:"claude",model:o.model}),o},async send(i,o,n){let d=oi("claude-code");if(!d)throw Error("claude-code client \u672A\u6CE8\u518C");let e=await xo(d);if(!e)e=wo(d);let u=i.turnCount===0,r=["--print","--input-format","stream-json","--output-format","stream-json","--verbose"];if(u)r.push("--session-id",i.sid);else r.push("--resume",i.sid);if(i.model)r.push("--model",i.model);r.push("--permission-mode","bypassPermissions");let t={...process.env,...i.__env};delete i.__env;let c=d.runtime==="native"?e:await Wi(),a=d.runtime==="native"?r:[e,...r],p=Gl(c,a,{env:t,cwd:i.workdir,stdio:["pipe","pipe","pipe"]});pn.set(i.sid,{pid:p.pid,kill:(b)=>p.kill(b??"SIGINT")});let l={type:"user",message:{role:"user",content:[{type:"text",text:o}]}};p.stdin.write(JSON.stringify(l)+`
305
- `),p.stdin.end(),i.status="running",i.lastActiveAt=gi(),await j(i);let x="";p.stderr.on("data",(b)=>{x+=b.toString()});let w=`t${i.turnCount+1}`;await nd(i.sid,{ts:gi(),kind:"turn_started",turnId:w},n);let y="";p.stdout.on("data",async(b)=>{y+=b.toString();let f;while((f=y.indexOf(`
306
- `))>=0){let h=y.slice(0,f).trim();if(y=y.slice(f+1),!h)continue;try{let M=JSON.parse(h);for(let k of Sl(M,w))await nd(i.sid,k,n)}catch{}}});let s=await new Promise((b)=>{p.on("close",(f)=>b(f??0))});if(pn.delete(i.sid),s===0)i.turnCount++;if(i.lastActiveAt=gi(),i.status="idle",s!==0)await nd(i.sid,{ts:gi(),kind:"error",message:`claude exited ${s}${x?`: ${x.slice(0,500)}`:""}`},n);return await j(i),i},async cancel(i){let o=pn.get(i.sid);if(o)o.kill("SIGINT")},async close(i){let o=pn.get(i.sid);if(o)o.kill("SIGTERM");pn.delete(i.sid),await nd(i.sid,{ts:gi(),kind:"session_closed"}),i.status="closed",i.lastActiveAt=gi(),await j(i)},async isAlive(){return!0}}});import{join as qr,isAbsolute as Pl,resolve as F0}from"path";import{readFile as Cl,writeFile as Il}from"fs/promises";import{homedir as Ql}from"os";function ql(i){if(!i)return"";let o=i.match(/^(?:\S*sh|\S*bash|\S*zsh)(?:\s+-\w+)*\s+["'](.*)["']\s*$/s);return o?o[1]:i}function Ir(i,o){if(!i)return!1;let n=Pl(i)?F0(i):F0(o,i),d=F0(o);return n===d||n.startsWith(d+"/")}function Or(i,o,n,d){if(o==="item/commandExecution/requestApproval"||o==="execCommandApproval"){let e=String(n?.command??""),u=ql(e);for(let r of i.exec_deny??[])try{if(new RegExp(r).test(u))return{kind:"auto_deny",reason:`policy deny: /${r}/`}}catch{}for(let r of i.exec_allow??[])try{if(new RegExp(r).test(u))return{kind:"auto_allow",reason:`policy allow: /${r}/`}}catch{}return{kind:"ask"}}if(o==="item/fileChange/requestApproval"||o==="applyPatchApproval"){let e=Ol(n);for(let r of e)for(let t of i.file_deny??[])try{if(new RegExp(t).test(r))return{kind:"auto_deny",reason:`file deny: ${r} matches /${t}/`}}catch{}if(i.strict_workdir){for(let r of e)if(!Ir(r,d))return{kind:"auto_deny",reason:`file outside workdir: ${r}`}}let u=e.length>0;for(let r of e){let t=!1;for(let c of i.file_allow??[])try{if(new RegExp(c).test(r)){t=!0;break}}catch{}if(!t){u=!1;break}}if(u)return{kind:"auto_allow",reason:"all paths matched file_allow"};if(!i.strict_workdir&&e.length>0&&e.every((r)=>Ir(r,d)))return{kind:"auto_allow",reason:"all paths inside workdir (non-strict)"};return{kind:"ask"}}return{kind:"ask"}}function Ol(i){let o=[],n=(d)=>{if(typeof d==="string"&&d.length>0&&d.length<1024)o.push(d)};if(n(i?.path),Array.isArray(i?.changes))for(let d of i.changes)n(d?.path),n(d?.target);if(Array.isArray(i?.files))for(let d of i.files)n(d?.path??d);if(typeof i?.patch==="string")for(let d of i.patch.split(`
307
- `)){let e=d.match(/^\+\+\+\s+b\/(.*)$/);if(e)o.push(e[1])}return Array.from(new Set(o))}function U0(i){return qr(yi(i),"policy.json")}async function E0(i){try{return JSON.parse(await Cl(i,"utf-8"))}catch{return null}}async function dd(i){let o=await E0(Rl),n=await E0(U0(i));return Qr(Qr(_0,o),n)}function Qr(i,o){if(!o)return i;return{exec_allow:[...i.exec_allow??[],...o.exec_allow??[]],exec_deny:[...i.exec_deny??[],...o.exec_deny??[]],file_allow:[...i.file_allow??[],...o.file_allow??[]],file_deny:[...i.file_deny??[],...o.file_deny??[]],strict_workdir:o.strict_workdir??i.strict_workdir}}async function ed(i){return await E0(U0(i))??{}}async function ud(i,o){await Il(U0(i),JSON.stringify(o,null,2),"utf-8")}async function Rr(i,o){let n=await ed(i),d=n.exec_allow??[];if(!d.includes(o))d.push(o);n.exec_allow=d,await ud(i,n)}var _0,Rl;var D0=N(()=>{Zi();_0={exec_allow:["^\\s*(ls|pwd|whoami|hostname|date|uname|env|echo|printenv)(\\s|$)","^\\s*(cat|head|tail|less|more|file|stat)\\s+","^\\s*(grep|rg|ag|egrep|fgrep)\\s+","^\\s*find\\s+\\S+\\s+(-name|-type|-maxdepth|-path)","^\\s*(wc|awk|sed -n)\\s+","^\\s*(which|type|whereis|command -v)\\s+","^\\s*(ps|df|du|free|top -b|iostat|vmstat)(\\s|$)","^\\s*tree(\\s|$)","^\\s*git\\s+(status|log|diff|show|branch|remote|config --(get|list)|rev-parse|describe|ls-files|ls-tree|cat-file|tag\\s+--list|stash list|reflog|fetch)(\\s|$)","^\\s*(npm|yarn|pnpm|bun)\\s+(list|outdated|info|view|search|--version)(\\s|$)","^\\s*(node|bun|python|python3|deno|go|cargo|rustc|java|javac)\\s+(--version|-V|version)(\\s|$)","^\\s*pip\\s+(list|show|--version)(\\s|$)","^\\s*cargo\\s+(check|tree|metadata)(\\s|$)","^\\s*(tsc|tsc --noEmit)(\\s|$)","^\\s*(eslint|prettier|stylelint|tslint)\\s+","^\\s*(jest|vitest|mocha|pytest|bun test|cargo test)(\\s|$)","^\\s*npm run (lint|test|build|typecheck|check)"],exec_deny:["\\bsudo\\b","\\bsu\\s+-","\\bdoas\\b","\\brm\\s+-[rRf]+\\s+(/$|/\\s|/[^./])","\\brm\\s+-[rRf]+\\s+\\$HOME(/?)?\\s","\\brm\\s+-[rRf]+\\s+~(/?)?\\s","\\bdd\\s+if=.*\\s+of=/dev/","\\bmkfs\\.","\\bshred\\b","\\bdiskutil\\s+(erase|format)","\\bcurl\\s+[^|]*\\|\\s*(sh|bash|zsh|fish)","\\bwget\\s+[^|]*\\|\\s*(sh|bash|zsh|fish)","\\bcurl\\s+.*-o\\s+/(usr|etc|bin|sbin|lib)/",":\\(\\)\\s*\\{","\\bchmod\\s+-R\\s+[0-7]+\\s+/","\\bssh-keygen\\s+-t","\\bsshpass\\b","\\b(passwd|chpasswd)\\b","\\bgit\\s+push\\s+.*--force"],file_allow:[],file_deny:["/\\.ssh/","/\\.aws/","/\\.gnupg/","\\.env(\\.|$)","/etc/(passwd|shadow|sudoers)","/(usr|etc|bin|sbin)/"],strict_workdir:!1};Rl=qr(Ql(),".tako","agent-policy.json")});import{spawn as Jl}from"child_process";import{writeFile as Bl,unlink as Al}from"fs/promises";import{join as Jr}from"path";class Hr{proc;buf="";nextId=1;pending=new Map;notifyHandlers=[];serverReqHandler=null;closed=!1;constructor(i){this.proc=i,i.stdout?.on("data",(o)=>this.onData(o)),i.on("close",()=>this.onClose()),i.on("error",()=>this.onClose())}onData(i){this.buf+=i.toString("utf-8");let o;while((o=this.buf.indexOf(`
299
+ `)){let y=w.trim();if(!y)continue;try{let s=JSON.parse(y);if(s.id!==1)continue;if(s.error)return null;return{status:200,body:JSON.stringify(s.result?.rateLimits??s.result??{})}}catch{continue}}return null}finally{d.rm(t,{recursive:!0,force:!0}).catch(()=>{})}}async function Dp(i,o){let n=["-s","-S","--max-time","10","-w",`
300
+ __HTTP__%{http_code}`,"https://chatgpt.com/backend-api/wham/usage","-H",`Authorization: Bearer ${i}`,"-H","User-Agent: codex_cli_rs/0.50.0","-H","Accept: application/json"];if(o)n.push("-H",`ChatGPT-Account-Id: ${o}`);let d=Bun.spawn(["curl",...n],{stdout:"pipe",stderr:"pipe"}),e=await new Response(d.stdout).text();await d.exited;let u=e.match(/^([\s\S]*?)\n__HTTP__(\d+)$/);return{body:u?u[1]:e,status:u?parseInt(u[2],10):0}}async function wr(i){let o=Date.now(),n={provider:"codex-subscription",status:"error",fetchedAt:o},{accessToken:d,accountId:e}=_p(i);if(!d)return{...n,hint:"Codex OAuth \u672A\u4FDD\u5B58\uFF1A\u6309 p \u2192 \u9009\u4E2D\u8D26\u53F7 \u2192 d \u2192 \u91CD\u65B0\u767B\u5F55",error:"missing_access_token"};try{let{status:u,body:r}=await il(d,e);if(u===401)return{...n,hint:"Codex OAuth \u5DF2\u8FC7\u671F\uFF1A\u6309 p \u2192 \u9009\u4E2D\u8D26\u53F7 \u2192 d \u2192 \u91CD\u65B0\u767B\u5F55",error:"unauthorized"};if(u!==200)return{...n,hint:u===0?"ChatGPT \u7528\u91CF\u83B7\u53D6\u5931\u8D25\uFF1A\u672C\u673A\u7F51\u7EDC\u65E0\u6CD5\u8BBF\u95EE chatgpt.com\uFF08\u53EF\u80FD IP \u88AB Cloudflare \u62E6\u622A\uFF0C\u53EF\u8BD5 HTTPS_PROXY\uFF09":"ChatGPT \u7528\u91CF\u63A5\u53E3\u4E0D\u53EF\u7528",error:`http_${u}`};let t=JSON.parse(r),c=t.rate_limit??t.rateLimits??t,a=c.primary_window??c.primary,p=c.secondary_window??c.secondary;return{provider:"codex-subscription",status:"ok",primary:xr(a),secondary:xr(p),planType:t.plan_type??t.planType,fetchedAt:o}}catch(u){return{...n,hint:"ChatGPT \u7528\u91CF\u63A5\u53E3\u8BF7\u6C42\u5931\u8D25",error:String(u.message??u)}}}var jp=async(i,o)=>{let n=await Up(i,o).catch(()=>null);if(n)return n;return Dp(i,o)},il;var yr=N(()=>{il=jp});var q0={};ii(q0,{invalidateQuotaCache:()=>tl,getOfficialQuota:()=>Q0,fetchTakoQuotaByApiId:()=>ro,_setQuotaDiskCachePathForTest:()=>el,_clearQuotaCache:()=>rl});import{homedir as ol}from"os";import{join as nl}from"path";function dl(i){return`${i.type}:${i.id}`}function fr(){return vr??nl(ol(),".tako","quota-cache.json")}function el(i){vr=i}function hr(){try{let o=$("fs").readFileSync(fr(),"utf-8"),n=JSON.parse(o);return typeof n==="object"&&n!==null?n:{}}catch{return{}}}function br(i){try{let o=$("fs"),n=fr(),d=n.slice(0,n.lastIndexOf("/"));if(d)o.mkdirSync(d,{recursive:!0});let e=`${n}.tmp.${process.pid}`;o.writeFileSync(e,JSON.stringify(i)),o.renameSync(e,n)}catch{}}function ul(i){return{provider:i.type,status:"unsupported",fetchedAt:Date.now()}}async function Q0(i){let o=dl(i),n=Date.now(),d=ko.get(o);if(d&&n-d.fetchedAt<sr)return d;let e=hr(),u=e[o];if(u&&n-u.fetchedAt<sr)return ko.set(o,u),u;let r;switch(i.type){case"tako":r=await lr(i);break;case"claude-subscription":r=await mr(i);break;case"codex-subscription":r=await wr(i);break;default:r=ul(i);break}return ko.set(o,r),e[o]=r,br(e),r}function rl(){ko.clear()}function tl(i,o){for(let n of[...ko.keys()])if(n.endsWith(`:${i}`))ko.delete(n);try{let n=hr(),d=!1;for(let e of Object.keys(n))if(e.endsWith(`:${i}`))delete n[e],d=!0;if(d)br(n)}catch{}}var sr=60000,ko,vr=null;var Tn=N(()=>{C0();yr();ko=new Map});var X0={};ii(X0,{listAvailableVersions:()=>B0,installAtVersion:()=>Y0,getInstalledVersion:()=>A0});import{join as Un}from"path";async function B0(i){let n=`${await ui()}/${encodeURIComponent(i).replace("%40","@")}`,d=await fetch(n,{signal:AbortSignal.timeout(1e4)});if(!d.ok)throw Error(`registry http ${d.status}`);let e=await d.json(),u=Object.keys(e.versions??{});if(!u.length)throw Error("no versions found");let r=e.time??{},t=u.map((c)=>({version:c,publishedAt:r[c],isCurrent:!1}));return t.sort((c,a)=>{let p=c.publishedAt?Date.parse(c.publishedAt):0;return(a.publishedAt?Date.parse(a.publishedAt):0)-p}),t}async function Y0(i,o){let n=await import("fs/promises"),d=Gi(i.id);await n.mkdir(d,{recursive:!0});let e=Un(d,"bun.lock"),u=Un(d,"node_modules");await n.rm(e,{force:!0}).catch(()=>{}),await n.rm(u,{recursive:!0,force:!0}).catch(()=>{});let r=Un(d,"package.json");await Bun.write(r,JSON.stringify({name:`tako-${i.id}-host`,version:"0.0.0",private:!0},null,2));let t=await ui(),{detectRegion:c}=await Promise.resolve().then(() => (bo(),zu)),a=await c(),{log:p}=await Promise.resolve().then(() => (Ci(),eu));p.info(`\u7F51\u7EDC\u73AF\u5883: ${a==="cn"?"\u56FD\u5185":"\u6D77\u5916"} | registry: ${t}`);let l=Bun.spawn([Y,"add",`${i.package}@${o}`],{cwd:d,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:t}});if(await l.exited,l.exitCode!==0){let w=await new Response(l.stderr).text();throw Error(`bun add ${i.package}@${o} failed: ${w.slice(0,500).trim()}`)}let x=await z();await Ui({installedClients:{...x.installedClients,[i.id]:{version:o,installedAt:new Date().toISOString()}}})}async function A0(i){let o=Gi(i.id),n=Un(o,"node_modules",i.package,"package.json");try{let e=Bun.file(n);if(await e.exists()){let u=await e.json();if(u.version)return u.version}}catch{}return(await z()).installedClients[i.id]?.version??null}var Dn=N(()=>{E();C();bo()});var gr={};ii(gr,{runQuotaCommand:()=>Ml,buildQuotaPayload:()=>zr});async function zl(i){try{let n=await(await fetch(`${A}/apiStats/api/get-key-id`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:i}),signal:AbortSignal.timeout(5000)})).json();if(n.success&&n.data?.id)return{valid:!0,apiId:n.data.id};return{valid:!1,error:n.error||"Tako key validation failed"}}catch(o){return{valid:!1,error:String(o.message??o)}}}function gl(i){let o=(i.providers??[]).find((e)=>e.type==="tako"),n=o?o.apiId||"":i.apiId||"",d=o?o.apiKey||"":i.apiKey||"";if(!n&&!d)return null;return{apiId:n,apiKey:d}}function H0(i){if(!i)return;let o={usedPct:i.usedPct,...i.windowMinutes?{windowMinutes:i.windowMinutes}:{},...i.resetsAt?{resetsAt:i.resetsAt}:{}};if(typeof i.costUsed==="number")o.used=i.costUsed;if(typeof i.costLimit==="number"){o.limit=i.costLimit;let n=i.costUsed??0;o.remaining=Math.max(0,i.costLimit-n),o.remainingPct=Math.max(0,Math.min(100,100-Math.round(i.usedPct)))}return o}function rn(i,o,n){return{exitCode:1,payload:{provider:"tako",status:"error",error:i,message:o,...n?{hint:n}:{}}}}function kr(i){return{exitCode:0,payload:{provider:"tako",status:"ok",fiveHour:H0(i.primary),daily:H0(i.daily),weekly:H0(i.secondary),fetchedAt:new Date(i.fetchedAt).toISOString()}}}function $l(i){return rn(i.error||"quota_unavailable",i.hint||"Tako quota is unavailable",i.hint)}async function zr(i,o={}){let n=o.fetchQuotaByApiId??ro,d=o.resolveApiIdFromKey??zl,e=gl(i);if(!e)return rn("missing_tako_provider","Tako provider is not configured");let u=null;if(e.apiId){if(u=await n(e.apiId),u.status==="ok")return kr(u)}if(e.apiKey){let r=await d(e.apiKey);if(r.valid&&r.apiId&&r.apiId!==e.apiId){if(u=await n(r.apiId),u.status==="ok")return kr(u)}else if(!e.apiId)return rn("api_id_refresh_failed",r.error||"Unable to resolve Tako API ID from API key")}if(u)return $l(u);return rn("missing_api_id","Tako API ID is not configured")}async function Ml(i=[],o={}){if(i.length>0){let e=rn("invalid_args","Usage: tako quota");return process.stdout.write(`${JSON.stringify(e.payload)}
301
+ `),e.exitCode}let n=o.loadConfig??z,d=await zr(await n(),o);return process.stdout.write(`${JSON.stringify(d.payload)}
302
+ `),d.exitCode}var $r=N(()=>{C();C0()});import{join as Vi}from"path";import{homedir as Gl}from"os";import{mkdir as Sl,readFile as jn,writeFile as T0,rename as F0,readdir as Mr,rm as Pl,appendFile as Gr}from"fs/promises";function yi(i){return Vi(Z0,i)}function Sr(i){return Vi(yi(i),"meta.json")}function D(i){return Vi(yi(i),"log.ndjson")}function tn(i){return Vi(yi(i),"approvals")}function K0(i,o){return Vi(tn(i),`${o}.req.json`)}function V0(i,o){return Vi(tn(i),`${o}.resp.json`)}async function cn(i){await Sl(i,{recursive:!0})}async function Pr(i){await cn(yi(i.sid)),await j(i),await Gr(D(i.sid),"")}async function zo(i){try{let o=await jn(Sr(i),"utf-8");return JSON.parse(o)}catch{return null}}async function j(i){let o=yi(i.sid);await cn(o);let n=Vi(o,"meta.json.tmp"),d={};for(let[e,u]of Object.entries(i)){if(e.startsWith("_"))continue;d[e]=u}await T0(n,JSON.stringify(d,null,2),"utf-8"),await F0(n,Sr(i.sid))}async function si(i,o){await Gr(D(i),JSON.stringify(o)+`
303
+ `,"utf-8")}async function id(){await cn(Z0);let i=await Mr(Z0,{withFileTypes:!0}),o=[];for(let n of i){if(!n.isDirectory())continue;let d=await zo(n.name);if(d)o.push(d)}return o.sort((n,d)=>d.lastActiveAt-n.lastActiveAt),o}async function od(i,o){let n;try{n=await jn(D(i),"utf-8")}catch{return[]}let e=n.split(`
304
+ `).filter(Boolean).slice(-o),u=[];for(let r of e)try{u.push(JSON.parse(r))}catch{}return u}async function E0(i){try{await Pl(yi(i),{recursive:!0,force:!0})}catch{}}async function Cr(i,o){await cn(tn(i));let n=K0(i,o.approvalId)+".tmp";await T0(n,JSON.stringify(o,null,2),"utf-8"),await F0(n,K0(i,o.approvalId))}async function Cl(i,o){try{return JSON.parse(await jn(K0(i,o),"utf-8"))}catch{return null}}async function nd(i,o,n){await cn(tn(i));let d=V0(i,o)+".tmp";await T0(d,JSON.stringify(n,null,2),"utf-8"),await F0(d,V0(i,o))}async function an(i,o){try{return JSON.parse(await jn(V0(i,o),"utf-8"))}catch{return null}}async function pn(i){try{let o=await Mr(tn(i)),n=[];for(let d of o){if(!d.endsWith(".req.json"))continue;let e=d.slice(0,-9),u=await Cl(i,e);if(!u)continue;if(!await an(i,e))n.push(u)}return n.sort((d,e)=>d.requestedAt-e.requestedAt),n}catch{return[]}}var Z0;var Ti=N(()=>{Z0=Vi(Gl(),".tako","agent-sessions")});import{spawn as Il}from"child_process";async function dd(i,o,n){await si(i,o),n?.onFrame?.(o)}function Ql(i,o){let n=[],d=gi();if(i?.type==="assistant"&&i?.message?.content){for(let e of i.message.content)if(e?.type==="text"&&typeof e.text==="string")n.push({ts:d,kind:"text_delta",text:e.text,itemId:i.message.id});else if(e?.type==="tool_use")n.push({ts:d,kind:"tool_use",name:e.name??"?",input:e.input,itemId:e.id});else if(e?.type==="thinking"&&typeof e.thinking==="string")n.push({ts:d,kind:"reasoning_delta",text:e.thinking})}else if(i?.type==="user"&&i?.message?.content){for(let e of i.message.content)if(e?.type==="tool_result")n.push({ts:d,kind:"tool_result",itemId:e.tool_use_id,output:e.content})}else if(i?.type==="result"){if(i.is_error)n.push({ts:d,kind:"error",message:typeof i.result==="string"?i.result:"claude reported error",raw:i});n.push({ts:d,kind:"turn_completed",turnId:o,stopReason:i.stop_reason,usage:i.usage})}else if(i?.type==="stream_event"&&i?.event?.delta?.thinking)n.push({ts:d,kind:"reasoning_delta",text:String(i.event.delta.thinking)});return n}function Qr(i,o){return i.__env=o,i}var gi=()=>Date.now(),ln,Ir;var qr=N(()=>{Ti();E();dn();ln=new Map,Ir={backend:"claude",async start(i){let o={sid:i.sid,backend:"claude",name:i.name,model:i.model,workdir:i.workdir,status:"idle",turnCount:0,createdAt:gi(),lastActiveAt:gi(),providerId:i.providerId};return await si(o.sid,{ts:gi(),kind:"session_started",sid:o.sid,backend:"claude",model:o.model}),o},async send(i,o,n){let d=oi("claude-code");if(!d)throw Error("claude-code client \u672A\u6CE8\u518C");let e=await xo(d);if(!e)e=wo(d);let u=i.turnCount===0,r=["--print","--input-format","stream-json","--output-format","stream-json","--verbose"];if(u)r.push("--session-id",i.sid);else r.push("--resume",i.sid);if(i.model)r.push("--model",i.model);r.push("--permission-mode","bypassPermissions");let t={...process.env,...i.__env};delete i.__env;let c=d.runtime==="native"?e:await Wi(),a=d.runtime==="native"?r:[e,...r],p=Il(c,a,{env:t,cwd:i.workdir,stdio:["pipe","pipe","pipe"]});ln.set(i.sid,{pid:p.pid,kill:(b)=>p.kill(b??"SIGINT")});let l={type:"user",message:{role:"user",content:[{type:"text",text:o}]}};p.stdin.write(JSON.stringify(l)+`
305
+ `),p.stdin.end(),i.status="running",i.lastActiveAt=gi(),await j(i);let x="";p.stderr.on("data",(b)=>{x+=b.toString()});let w=`t${i.turnCount+1}`;await dd(i.sid,{ts:gi(),kind:"turn_started",turnId:w},n);let y="";p.stdout.on("data",async(b)=>{y+=b.toString();let v;while((v=y.indexOf(`
306
+ `))>=0){let h=y.slice(0,v).trim();if(y=y.slice(v+1),!h)continue;try{let M=JSON.parse(h);for(let k of Ql(M,w))await dd(i.sid,k,n)}catch{}}});let s=await new Promise((b)=>{p.on("close",(v)=>b(v??0))});if(ln.delete(i.sid),s===0)i.turnCount++;if(i.lastActiveAt=gi(),i.status="idle",s!==0)await dd(i.sid,{ts:gi(),kind:"error",message:`claude exited ${s}${x?`: ${x.slice(0,500)}`:""}`},n);return await j(i),i},async cancel(i){let o=ln.get(i.sid);if(o)o.kill("SIGINT")},async close(i){let o=ln.get(i.sid);if(o)o.kill("SIGTERM");ln.delete(i.sid),await dd(i.sid,{ts:gi(),kind:"session_closed"}),i.status="closed",i.lastActiveAt=gi(),await j(i)},async isAlive(){return!0}}});import{join as Rr,isAbsolute as ql,resolve as _0}from"path";import{readFile as Ol,writeFile as Jl}from"fs/promises";import{homedir as Rl}from"os";function Bl(i){if(!i)return"";let o=i.match(/^(?:\S*sh|\S*bash|\S*zsh)(?:\s+-\w+)*\s+["'](.*)["']\s*$/s);return o?o[1]:i}function Or(i,o){if(!i)return!1;let n=ql(i)?_0(i):_0(o,i),d=_0(o);return n===d||n.startsWith(d+"/")}function Br(i,o,n,d){if(o==="item/commandExecution/requestApproval"||o==="execCommandApproval"){let e=String(n?.command??""),u=Bl(e);for(let r of i.exec_deny??[])try{if(new RegExp(r).test(u))return{kind:"auto_deny",reason:`policy deny: /${r}/`}}catch{}for(let r of i.exec_allow??[])try{if(new RegExp(r).test(u))return{kind:"auto_allow",reason:`policy allow: /${r}/`}}catch{}return{kind:"ask"}}if(o==="item/fileChange/requestApproval"||o==="applyPatchApproval"){let e=Yl(n);for(let r of e)for(let t of i.file_deny??[])try{if(new RegExp(t).test(r))return{kind:"auto_deny",reason:`file deny: ${r} matches /${t}/`}}catch{}if(i.strict_workdir){for(let r of e)if(!Or(r,d))return{kind:"auto_deny",reason:`file outside workdir: ${r}`}}let u=e.length>0;for(let r of e){let t=!1;for(let c of i.file_allow??[])try{if(new RegExp(c).test(r)){t=!0;break}}catch{}if(!t){u=!1;break}}if(u)return{kind:"auto_allow",reason:"all paths matched file_allow"};if(!i.strict_workdir&&e.length>0&&e.every((r)=>Or(r,d)))return{kind:"auto_allow",reason:"all paths inside workdir (non-strict)"};return{kind:"ask"}}return{kind:"ask"}}function Yl(i){let o=[],n=(d)=>{if(typeof d==="string"&&d.length>0&&d.length<1024)o.push(d)};if(n(i?.path),Array.isArray(i?.changes))for(let d of i.changes)n(d?.path),n(d?.target);if(Array.isArray(i?.files))for(let d of i.files)n(d?.path??d);if(typeof i?.patch==="string")for(let d of i.patch.split(`
307
+ `)){let e=d.match(/^\+\+\+\s+b\/(.*)$/);if(e)o.push(e[1])}return Array.from(new Set(o))}function j0(i){return Rr(yi(i),"policy.json")}async function U0(i){try{return JSON.parse(await Ol(i,"utf-8"))}catch{return null}}async function ed(i){let o=await U0(Al),n=await U0(j0(i));return Jr(Jr(D0,o),n)}function Jr(i,o){if(!o)return i;return{exec_allow:[...i.exec_allow??[],...o.exec_allow??[]],exec_deny:[...i.exec_deny??[],...o.exec_deny??[]],file_allow:[...i.file_allow??[],...o.file_allow??[]],file_deny:[...i.file_deny??[],...o.file_deny??[]],strict_workdir:o.strict_workdir??i.strict_workdir}}async function ud(i){return await U0(j0(i))??{}}async function rd(i,o){await Jl(j0(i),JSON.stringify(o,null,2),"utf-8")}async function Yr(i,o){let n=await ud(i),d=n.exec_allow??[];if(!d.includes(o))d.push(o);n.exec_allow=d,await rd(i,n)}var D0,Al;var ie=N(()=>{Ti();D0={exec_allow:["^\\s*(ls|pwd|whoami|hostname|date|uname|env|echo|printenv)(\\s|$)","^\\s*(cat|head|tail|less|more|file|stat)\\s+","^\\s*(grep|rg|ag|egrep|fgrep)\\s+","^\\s*find\\s+\\S+\\s+(-name|-type|-maxdepth|-path)","^\\s*(wc|awk|sed -n)\\s+","^\\s*(which|type|whereis|command -v)\\s+","^\\s*(ps|df|du|free|top -b|iostat|vmstat)(\\s|$)","^\\s*tree(\\s|$)","^\\s*git\\s+(status|log|diff|show|branch|remote|config --(get|list)|rev-parse|describe|ls-files|ls-tree|cat-file|tag\\s+--list|stash list|reflog|fetch)(\\s|$)","^\\s*(npm|yarn|pnpm|bun)\\s+(list|outdated|info|view|search|--version)(\\s|$)","^\\s*(node|bun|python|python3|deno|go|cargo|rustc|java|javac)\\s+(--version|-V|version)(\\s|$)","^\\s*pip\\s+(list|show|--version)(\\s|$)","^\\s*cargo\\s+(check|tree|metadata)(\\s|$)","^\\s*(tsc|tsc --noEmit)(\\s|$)","^\\s*(eslint|prettier|stylelint|tslint)\\s+","^\\s*(jest|vitest|mocha|pytest|bun test|cargo test)(\\s|$)","^\\s*npm run (lint|test|build|typecheck|check)"],exec_deny:["\\bsudo\\b","\\bsu\\s+-","\\bdoas\\b","\\brm\\s+-[rRf]+\\s+(/$|/\\s|/[^./])","\\brm\\s+-[rRf]+\\s+\\$HOME(/?)?\\s","\\brm\\s+-[rRf]+\\s+~(/?)?\\s","\\bdd\\s+if=.*\\s+of=/dev/","\\bmkfs\\.","\\bshred\\b","\\bdiskutil\\s+(erase|format)","\\bcurl\\s+[^|]*\\|\\s*(sh|bash|zsh|fish)","\\bwget\\s+[^|]*\\|\\s*(sh|bash|zsh|fish)","\\bcurl\\s+.*-o\\s+/(usr|etc|bin|sbin|lib)/",":\\(\\)\\s*\\{","\\bchmod\\s+-R\\s+[0-7]+\\s+/","\\bssh-keygen\\s+-t","\\bsshpass\\b","\\b(passwd|chpasswd)\\b","\\bgit\\s+push\\s+.*--force"],file_allow:[],file_deny:["/\\.ssh/","/\\.aws/","/\\.gnupg/","\\.env(\\.|$)","/etc/(passwd|shadow|sudoers)","/(usr|etc|bin|sbin)/"],strict_workdir:!1};Al=Rr(Rl(),".tako","agent-policy.json")});import{spawn as Xl}from"child_process";import{writeFile as Hl,unlink as Zl}from"fs/promises";import{join as Ar}from"path";class Kr{proc;buf="";nextId=1;pending=new Map;notifyHandlers=[];serverReqHandler=null;closed=!1;constructor(i){this.proc=i,i.stdout?.on("data",(o)=>this.onData(o)),i.on("close",()=>this.onClose()),i.on("error",()=>this.onClose())}onData(i){this.buf+=i.toString("utf-8");let o;while((o=this.buf.indexOf(`
308
308
  `))>=0){let n=this.buf.slice(0,o).trim();if(this.buf=this.buf.slice(o+1),!n)continue;try{this.dispatch(JSON.parse(n))}catch{}}}dispatch(i){if(i&&typeof i==="object"){if(i.id!==void 0&&(("result"in i)||("error"in i))){let o=this.pending.get(i.id);if(o)if(this.pending.delete(i.id),i.error)o.reject(Error(JSON.stringify(i.error)));else o.resolve(i.result);return}if(i.method&&i.id!==void 0){this.serverReqHandler?.(i.method,i.id,i.params);return}if(i.method)for(let o of this.notifyHandlers)o(i.method,i.params)}}onClose(){this.closed=!0;for(let[,i]of this.pending)i.reject(Error("rpc closed"));this.pending.clear()}write(i){if(this.closed)return;this.proc.stdin?.write(JSON.stringify(i)+`
309
- `)}request(i,o){if(this.closed)return Promise.reject(Error("rpc closed"));let n=this.nextId++;return new Promise((d,e)=>{this.pending.set(n,{resolve:d,reject:e}),this.write({jsonrpc:"2.0",method:i,params:o,id:n})})}notify(i,o){this.write({jsonrpc:"2.0",method:i,params:o})}reply(i,o){this.write({jsonrpc:"2.0",id:i,result:o})}replyError(i,o,n){this.write({jsonrpc:"2.0",id:i,error:{code:o,message:n}})}onNotification(i){this.notifyHandlers.push(i)}onServerRequest(i){this.serverReqHandler=i}pid(){return this.proc.pid}kill(i="SIGTERM"){try{this.proc.kill(i)}catch{}}close(){try{this.proc.stdin?.end()}catch{}this.kill("SIGTERM")}}async function Br(i,o){let n=oi("codex");if(!n)throw Error("codex client \u672A\u6CE8\u518C");let d=await xo(n)??wo(n),e={...process.env,...o},u=n.runtime==="native"?d:await Wi(),r=n.runtime==="native"?["app-server"]:[d,"app-server"],t=Jl(u,r,{env:e,cwd:i,stdio:["pipe","pipe","pipe"]});return t.stderr?.on("data",()=>{}),new Hr(t)}async function Ar(i){await i.request("initialize",{clientInfo:{name:"tako-agent",title:"Tako Agent",version:"0.1"},capabilities:null})}function Yr(i,o={}){let n=i.approvalMode==="external",d={cwd:i.workdir,approvalPolicy:n?"untrusted":"never",sandbox:n?"workspace-write":"danger-full-access",...o};if(i.model)d.model=i.model;if(i.providerHint?.type==="tako"||i.providerHint?.type==="custom")d.modelProvider="tako";return d}function j0(i,o){if(i==="applyPatchApproval"||i==="execCommandApproval")return{decision:o?"approved":"denied"};if(i==="item/commandExecution/requestApproval"||i==="item/fileChange/requestApproval")return{decision:o?"accept":"decline"};if(i==="item/permissions/requestApproval")return o?{permissions:{allowedTools:["*"]},scope:"turn"}:{permissions:{},scope:"turn"};if(i==="mcpServer/elicitation/request")return{action:o?"accept":"decline"};return{decision:o?"approved":"denied"}}function Yl(i){if(i.includes("commandExecution")||i==="execCommandApproval")return"exec";if(i.includes("fileChange")||i==="applyPatchApproval")return"patch";if(i.includes("permissions"))return"permission";if(i.includes("tool/"))return"tool";return"other"}async function Hl(i,o,n=300000,d=200){let e=Date.now();while(Date.now()-e<n){let u=await cn(i,o);if(u)return{allow:u.decision==="allow",reason:u.reason,by:u.by};await new Promise((r)=>setTimeout(r,d))}return{allow:!1,reason:`timeout after ${Math.round(n/1000)}s`,by:"tako-timeout"}}function rd(i,o){return i.__env=o,i}function Tl(i,o){let n=[],d=ri();switch(i){case"turn/started":n.push({ts:d,kind:"turn_started",turnId:o?.turn?.id??"?"});break;case"turn/completed":n.push({ts:d,kind:"turn_completed",turnId:o?.turn?.id,usage:o?.turn?.usage});break;case"item/agentMessage/delta":if(typeof o?.delta==="string")n.push({ts:d,kind:"text_delta",text:o.delta,itemId:o.itemId});break;case"item/reasoning/textDelta":case"item/reasoning/summaryTextDelta":if(typeof o?.delta==="string")n.push({ts:d,kind:"reasoning_delta",text:o.delta});break;case"item/started":{let e=o?.item;if(!e)break;if(e.type==="commandExecution")n.push({ts:d,kind:"tool_use",name:"shell",input:{command:e.command},itemId:e.id});else if(e.type==="fileChange")n.push({ts:d,kind:"tool_use",name:"fileChange",input:e,itemId:e.id});else if(e.type==="mcpToolCall")n.push({ts:d,kind:"tool_use",name:e.serverName?`${e.serverName}.${e.toolName}`:e.toolName??"mcp",input:e.args,itemId:e.id});break}case"item/completed":{let e=o?.item;if(!e)break;if(e.type==="commandExecution"||e.type==="fileChange"||e.type==="mcpToolCall")n.push({ts:d,kind:"tool_result",itemId:e.id,output:e});break}case"error":case"warning":n.push({ts:d,kind:"error",message:o?.message??i,raw:o});break}return n}var ri=()=>Date.now(),Tr;var Xr=N(()=>{Zi();D0();E();dn();Tr={backend:"codex",async start(i){let o={sid:i.sid,backend:"codex",name:i.name,model:i.model,workdir:i.workdir,status:"idle",approvalMode:i.approvalMode??"yolo",turnCount:0,createdAt:ri(),lastActiveAt:ri(),providerId:i.providerId};return await si(o.sid,{ts:ri(),kind:"session_started",sid:o.sid,backend:"codex",model:o.model}),o.__providerHint=i.providerHint,o},async send(i,o,n){let d=i.__env??{},e=i.__providerHint,u=await Br(i.workdir,d),r=Jr(yi(i.sid),"turn.pid");if(u.pid())await Bl(r,String(u.pid()));let t=i.approvalMode??"yolo";u.onServerRequest((l,x,w)=>{if(t==="yolo"){u.replyError(x,-32603,`tako-agent yolo mode: ${l} declined`);return}let y=String(x),s=Yl(l);(async()=>{let b=await dd(i.sid),f=Or(b,l,w,i.workdir);if(f.kind==="auto_allow"){await si(i.sid,{ts:ri(),kind:"tool_result",itemId:y,output:{approval:"auto_allowed",reason:f.reason}}),u.reply(x,j0(l,!0));return}if(f.kind==="auto_deny"){await si(i.sid,{ts:ri(),kind:"error",message:`auto_deny: ${f.reason}`,raw:{method:l,params:w}}),u.reply(x,j0(l,!1));return}let h={approvalId:y,method:l,params:w,approvalType:s,requestedAt:ri()};await Gr(i.sid,h),await si(i.sid,{ts:ri(),kind:"approval_required",approvalId:y,approvalType:s,params:w}),i.status="awaiting_approval",await j(i);let M=await Hl(i.sid,y);i.status="running",await j(i),u.reply(x,j0(l,M.allow))})().catch((b)=>{u.replyError(x,-32603,`approval bridge error: ${b?.message??b}`)})});let c=Promise.resolve();u.onNotification((l,x)=>{let w=Tl(l,x);if(!w.length)return;c=c.then(async()=>{for(let y of w)await si(i.sid,y),n?.onFrame?.(y)})}),i.status="running",i.lastActiveAt=ri(),await j(i);let a=new Promise((l)=>{u.onNotification((x)=>{if(x==="turn/completed"||x==="turn/failed")l()})}),p=!1;try{if(await Ar(u),!i.codexThreadId){let l=await u.request("thread/start",Yr({workdir:i.workdir,model:i.model,providerHint:e,approvalMode:t}));if(i.codexThreadId=l?.threadId??l?.id??l?.thread?.id,!i.codexThreadId)throw Error("thread/start \u65E0 threadId")}else await u.request("thread/resume",Yr({workdir:i.workdir,model:i.model,providerHint:e,approvalMode:t},{threadId:i.codexThreadId}));await u.request("turn/start",{threadId:i.codexThreadId,input:[{type:"text",text:o,text_elements:[]}]}),await Promise.race([a,new Promise((l,x)=>setTimeout(()=>x(Error("turn timeout 10min")),600000))]),await c,p=!0}catch(l){await si(i.sid,{ts:ri(),kind:"error",message:l instanceof Error?l.message:String(l)})}if(u.close(),await Al(r).catch(()=>{}),p)i.turnCount++;return i.lastActiveAt=ri(),i.status="idle",await j(i),i},async cancel(i){let o=Jr(yi(i.sid),"turn.pid");try{let n=await import("fs/promises"),d=parseInt(await n.readFile(o,"utf-8"),10);if(d>0)process.kill(d,"SIGTERM")}catch{}},async close(i){if(i.codexThreadId)try{let o=i.__env??{},n=await Br(i.workdir,o);await Ar(n).catch(()=>{}),await n.request("thread/archive",{threadId:i.codexThreadId}).catch(()=>{}),n.close()}catch{}await si(i.sid,{ts:ri(),kind:"session_closed"}),i.status="closed",i.lastActiveAt=ri(),await j(i)},async isAlive(i){return i.status!=="closed"}}});import{randomUUID as Xl}from"crypto";async function ln(i){let o=go[i.backend],n=ie[i.backend],d=oi(n);if(!d)throw Error(`client ${n} \u672A\u6CE8\u518C`);let e=await Kr(i.backend,i.providerId,i.model);if(!e)throw Error(`\u6CA1\u627E\u5230 ${i.backend} \u53EF\u7528\u7684 provider${i.model?`\uFF08\u542B\u6A21\u578B ${i.model}\uFF09`:""}`);let u=_(e);if(i.model)u.model=i.model;let r=d.getEnvVars(u),t=Xl(),c={sid:t,backend:i.backend,name:i.name??`${i.backend}-${t.slice(0,8)}`,model:i.model,workdir:i.workdir??process.cwd(),status:"idle",approvalMode:i.approvalMode??"yolo",turnCount:0,createdAt:Date.now(),lastActiveAt:Date.now(),providerId:e.id};await Mr(c);let a=await o.start({sid:t,name:c.name,model:i.model,workdir:c.workdir,approvalMode:i.approvalMode??"yolo",env:r,providerId:e.id,providerHint:{type:e.type,apiKey:e.apiKey,baseUrl:e.baseUrl}});return await j(a),a}async function mn(i,o,n){let d=await zo(i);if(!d)throw Error(`session ${i} \u4E0D\u5B58\u5728`);if(d.status==="closed")throw Error(`session ${i} \u5DF2\u5173\u95ED`);let e=go[d.backend],u=await oe(d);if(d.backend==="claude")Pr(d,u);else if(d.backend==="codex")rd(d,u);return e.send(d,o,n)}async function xn(i){let o=await zo(i);if(!o)return;if(o.backend==="codex")rd(o,await oe(o));await go[o.backend].cancel(o)}async function $o(i,o=!1){let n=await zo(i);if(!n)return;if(n.backend==="codex")rd(n,await oe(n));if(await go[n.backend].close(n),o)await Z0(i)}async function td(){return jn()}function Kl(i,o={}){return i.filter((n)=>{if(o.status&&o.status.length>0){if(!o.status.includes(n.status))return!1}else if(!o.includeClosed&&n.status==="closed")return!1;if(o.namePrefix&&!n.name.startsWith(o.namePrefix))return!1;if(o.backend&&n.backend!==o.backend)return!1;if(o.model&&n.model!==o.model)return!1;if(o.turns!==void 0&&n.turnCount!==o.turns)return!1;return!0})}async function cd(i={}){return Kl(await jn(),i)}async function ad(i,o=50){let n=await zo(i);if(!n)return null;let d=await id(i,o),e=await go[n.backend].isAlive(n);return{meta:n,log:d,alive:e}}async function pd(){let i=await jn(),o=0;for(let n of i){if(n.status==="closed"){await Z0(n.sid),o++;continue}if(n.backend==="codex"){if(!await go.codex.isAlive(n))n.status="dead",await j(n)}}return o}async function Kr(i,o,n){let d=await z(),e=await V(),u=ie[i];if(o){let p=e.find((l)=>l.id===o);if(p)return p}let t=d.agentDefaults?.[i];if(t){let p=e.find((l)=>l.id===t);if(p)return p}let c=await Qi(u);if(n){let p=oi(u);if(p){for(let l of c)if(kn(p,l).some((w)=>w.id===`model-${n}`))return l}}let a=d.clientProviderMap?.[u];if(a){let p=e.find((l)=>l.id===a);if(p)return p}return c[0]}async function oe(i){let o=ie[i.backend],n=oi(o);if(!n)return{};let d=await V(),e=i.providerId?d.find((r)=>r.id===i.providerId):void 0;if(!e)e=await Kr(i.backend,void 0,i.model);if(!e)return{};let u=_(e);if(i.model)u.model=i.model;return i.__providerHint={type:e.type,apiKey:e.apiKey,baseUrl:e.baseUrl},n.getEnvVars(u)}async function Vr(i,o){let{saveConfig:n}=await Promise.resolve().then(() => (C(),Nn)),d=await z(),e=d.agentDefaults??{};e[i]=o,d.agentDefaults=e,await n(d)}async function ld(){return(await z()).agentDefaults??{}}var go,ie;var md=N(()=>{Cr();Xr();Zi();C();ai();E();go={claude:Sr,codex:Tr},ie={claude:"claude-code",codex:"codex"}});function Mo(i,o="human",n={}){if(o==="json"){process.stdout.write(JSON.stringify(ne(i))+`
310
- `);return}if(o==="verbose"){Zl(i,new Date(i.ts).toISOString().slice(11,23),{expandError:!0,...n});return}Vl(i,n)}function Zr(i){if(i===void 0||i===null)return"";let o;try{o=typeof i==="string"?i:JSON.stringify(i,null,2)}catch{o=String(i)}return o.split(`
309
+ `)}request(i,o){if(this.closed)return Promise.reject(Error("rpc closed"));let n=this.nextId++;return new Promise((d,e)=>{this.pending.set(n,{resolve:d,reject:e}),this.write({jsonrpc:"2.0",method:i,params:o,id:n})})}notify(i,o){this.write({jsonrpc:"2.0",method:i,params:o})}reply(i,o){this.write({jsonrpc:"2.0",id:i,result:o})}replyError(i,o,n){this.write({jsonrpc:"2.0",id:i,error:{code:o,message:n}})}onNotification(i){this.notifyHandlers.push(i)}onServerRequest(i){this.serverReqHandler=i}pid(){return this.proc.pid}kill(i="SIGTERM"){try{this.proc.kill(i)}catch{}}close(){try{this.proc.stdin?.end()}catch{}this.kill("SIGTERM")}}async function Xr(i,o){let n=oi("codex");if(!n)throw Error("codex client \u672A\u6CE8\u518C");let d=await xo(n)??wo(n),e={...process.env,...o},u=n.runtime==="native"?d:await Wi(),r=n.runtime==="native"?["app-server"]:[d,"app-server"],t=Xl(u,r,{env:e,cwd:i,stdio:["pipe","pipe","pipe"]});return t.stderr?.on("data",()=>{}),new Kr(t)}async function Hr(i){await i.request("initialize",{clientInfo:{name:"tako-agent",title:"Tako Agent",version:"0.1"},capabilities:null})}function Zr(i,o={}){let n=i.approvalMode==="external",d={cwd:i.workdir,approvalPolicy:n?"untrusted":"never",sandbox:n?"workspace-write":"danger-full-access",...o};if(i.model)d.model=i.model;if(i.providerHint?.type==="tako"||i.providerHint?.type==="custom")d.modelProvider="tako";return d}function oe(i,o){if(i==="applyPatchApproval"||i==="execCommandApproval")return{decision:o?"approved":"denied"};if(i==="item/commandExecution/requestApproval"||i==="item/fileChange/requestApproval")return{decision:o?"accept":"decline"};if(i==="item/permissions/requestApproval")return o?{permissions:{allowedTools:["*"]},scope:"turn"}:{permissions:{},scope:"turn"};if(i==="mcpServer/elicitation/request")return{action:o?"accept":"decline"};return{decision:o?"approved":"denied"}}function Kl(i){if(i.includes("commandExecution")||i==="execCommandApproval")return"exec";if(i.includes("fileChange")||i==="applyPatchApproval")return"patch";if(i.includes("permissions"))return"permission";if(i.includes("tool/"))return"tool";return"other"}async function Vl(i,o,n=300000,d=200){let e=Date.now();while(Date.now()-e<n){let u=await an(i,o);if(u)return{allow:u.decision==="allow",reason:u.reason,by:u.by};await new Promise((r)=>setTimeout(r,d))}return{allow:!1,reason:`timeout after ${Math.round(n/1000)}s`,by:"tako-timeout"}}function td(i,o){return i.__env=o,i}function Tl(i,o){let n=[],d=ri();switch(i){case"turn/started":n.push({ts:d,kind:"turn_started",turnId:o?.turn?.id??"?"});break;case"turn/completed":n.push({ts:d,kind:"turn_completed",turnId:o?.turn?.id,usage:o?.turn?.usage});break;case"item/agentMessage/delta":if(typeof o?.delta==="string")n.push({ts:d,kind:"text_delta",text:o.delta,itemId:o.itemId});break;case"item/reasoning/textDelta":case"item/reasoning/summaryTextDelta":if(typeof o?.delta==="string")n.push({ts:d,kind:"reasoning_delta",text:o.delta});break;case"item/started":{let e=o?.item;if(!e)break;if(e.type==="commandExecution")n.push({ts:d,kind:"tool_use",name:"shell",input:{command:e.command},itemId:e.id});else if(e.type==="fileChange")n.push({ts:d,kind:"tool_use",name:"fileChange",input:e,itemId:e.id});else if(e.type==="mcpToolCall")n.push({ts:d,kind:"tool_use",name:e.serverName?`${e.serverName}.${e.toolName}`:e.toolName??"mcp",input:e.args,itemId:e.id});break}case"item/completed":{let e=o?.item;if(!e)break;if(e.type==="commandExecution"||e.type==="fileChange"||e.type==="mcpToolCall")n.push({ts:d,kind:"tool_result",itemId:e.id,output:e});break}case"error":case"warning":n.push({ts:d,kind:"error",message:o?.message??i,raw:o});break}return n}var ri=()=>Date.now(),Vr;var Tr=N(()=>{Ti();ie();E();dn();Vr={backend:"codex",async start(i){let o={sid:i.sid,backend:"codex",name:i.name,model:i.model,workdir:i.workdir,status:"idle",approvalMode:i.approvalMode??"yolo",turnCount:0,createdAt:ri(),lastActiveAt:ri(),providerId:i.providerId};return await si(o.sid,{ts:ri(),kind:"session_started",sid:o.sid,backend:"codex",model:o.model}),o.__providerHint=i.providerHint,o},async send(i,o,n){let d=i.__env??{},e=i.__providerHint,u=await Xr(i.workdir,d),r=Ar(yi(i.sid),"turn.pid");if(u.pid())await Hl(r,String(u.pid()));let t=i.approvalMode??"yolo";u.onServerRequest((l,x,w)=>{if(t==="yolo"){u.replyError(x,-32603,`tako-agent yolo mode: ${l} declined`);return}let y=String(x),s=Kl(l);(async()=>{let b=await ed(i.sid),v=Br(b,l,w,i.workdir);if(v.kind==="auto_allow"){await si(i.sid,{ts:ri(),kind:"tool_result",itemId:y,output:{approval:"auto_allowed",reason:v.reason}}),u.reply(x,oe(l,!0));return}if(v.kind==="auto_deny"){await si(i.sid,{ts:ri(),kind:"error",message:`auto_deny: ${v.reason}`,raw:{method:l,params:w}}),u.reply(x,oe(l,!1));return}let h={approvalId:y,method:l,params:w,approvalType:s,requestedAt:ri()};await Cr(i.sid,h),await si(i.sid,{ts:ri(),kind:"approval_required",approvalId:y,approvalType:s,params:w}),i.status="awaiting_approval",await j(i);let M=await Vl(i.sid,y);i.status="running",await j(i),u.reply(x,oe(l,M.allow))})().catch((b)=>{u.replyError(x,-32603,`approval bridge error: ${b?.message??b}`)})});let c=Promise.resolve();u.onNotification((l,x)=>{let w=Tl(l,x);if(!w.length)return;c=c.then(async()=>{for(let y of w)await si(i.sid,y),n?.onFrame?.(y)})}),i.status="running",i.lastActiveAt=ri(),await j(i);let a=new Promise((l)=>{u.onNotification((x)=>{if(x==="turn/completed"||x==="turn/failed")l()})}),p=!1;try{if(await Hr(u),!i.codexThreadId){let l=await u.request("thread/start",Zr({workdir:i.workdir,model:i.model,providerHint:e,approvalMode:t}));if(i.codexThreadId=l?.threadId??l?.id??l?.thread?.id,!i.codexThreadId)throw Error("thread/start \u65E0 threadId")}else await u.request("thread/resume",Zr({workdir:i.workdir,model:i.model,providerHint:e,approvalMode:t},{threadId:i.codexThreadId}));await u.request("turn/start",{threadId:i.codexThreadId,input:[{type:"text",text:o,text_elements:[]}]}),await Promise.race([a,new Promise((l,x)=>setTimeout(()=>x(Error("turn timeout 10min")),600000))]),await c,p=!0}catch(l){await si(i.sid,{ts:ri(),kind:"error",message:l instanceof Error?l.message:String(l)})}if(u.close(),await Zl(r).catch(()=>{}),p)i.turnCount++;return i.lastActiveAt=ri(),i.status="idle",await j(i),i},async cancel(i){let o=Ar(yi(i.sid),"turn.pid");try{let n=await import("fs/promises"),d=parseInt(await n.readFile(o,"utf-8"),10);if(d>0)process.kill(d,"SIGTERM")}catch{}},async close(i){if(i.codexThreadId)try{let o=i.__env??{},n=await Xr(i.workdir,o);await Hr(n).catch(()=>{}),await n.request("thread/archive",{threadId:i.codexThreadId}).catch(()=>{}),n.close()}catch{}await si(i.sid,{ts:ri(),kind:"session_closed"}),i.status="closed",i.lastActiveAt=ri(),await j(i)},async isAlive(i){return i.status!=="closed"}}});import{randomUUID as Fl}from"crypto";async function mn(i){let o=go[i.backend],n=ne[i.backend],d=oi(n);if(!d)throw Error(`client ${n} \u672A\u6CE8\u518C`);let e=await Fr(i.backend,i.providerId,i.model);if(!e)throw Error(`\u6CA1\u627E\u5230 ${i.backend} \u53EF\u7528\u7684 provider${i.model?`\uFF08\u542B\u6A21\u578B ${i.model}\uFF09`:""}`);let u=_(e);if(i.model)u.model=i.model;let r=d.getEnvVars(u),t=Fl(),c={sid:t,backend:i.backend,name:i.name??`${i.backend}-${t.slice(0,8)}`,model:i.model,workdir:i.workdir??process.cwd(),status:"idle",approvalMode:i.approvalMode??"yolo",turnCount:0,createdAt:Date.now(),lastActiveAt:Date.now(),providerId:e.id};await Pr(c);let a=await o.start({sid:t,name:c.name,model:i.model,workdir:c.workdir,approvalMode:i.approvalMode??"yolo",env:r,providerId:e.id,providerHint:{type:e.type,apiKey:e.apiKey,baseUrl:e.baseUrl}});return await j(a),a}async function xn(i,o,n){let d=await zo(i);if(!d)throw Error(`session ${i} \u4E0D\u5B58\u5728`);if(d.status==="closed")throw Error(`session ${i} \u5DF2\u5173\u95ED`);let e=go[d.backend],u=await de(d);if(d.backend==="claude")Qr(d,u);else if(d.backend==="codex")td(d,u);return e.send(d,o,n)}async function wn(i){let o=await zo(i);if(!o)return;if(o.backend==="codex")td(o,await de(o));await go[o.backend].cancel(o)}async function $o(i,o=!1){let n=await zo(i);if(!n)return;if(n.backend==="codex")td(n,await de(n));if(await go[n.backend].close(n),o)await E0(i)}async function cd(){return id()}function El(i,o={}){return i.filter((n)=>{if(o.status&&o.status.length>0){if(!o.status.includes(n.status))return!1}else if(!o.includeClosed&&n.status==="closed")return!1;if(o.namePrefix&&!n.name.startsWith(o.namePrefix))return!1;if(o.backend&&n.backend!==o.backend)return!1;if(o.model&&n.model!==o.model)return!1;if(o.turns!==void 0&&n.turnCount!==o.turns)return!1;return!0})}async function ad(i={}){return El(await id(),i)}async function pd(i,o=50){let n=await zo(i);if(!n)return null;let d=await od(i,o),e=await go[n.backend].isAlive(n);return{meta:n,log:d,alive:e}}async function ld(){let i=await id(),o=0;for(let n of i){if(n.status==="closed"){await E0(n.sid),o++;continue}if(n.backend==="codex"){if(!await go.codex.isAlive(n))n.status="dead",await j(n)}}return o}async function Fr(i,o,n){let d=await z(),e=await V(),u=ne[i];if(o){let p=e.find((l)=>l.id===o);if(p)return p}let t=d.agentDefaults?.[i];if(t){let p=e.find((l)=>l.id===t);if(p)return p}let c=await Qi(u);if(n){let p=oi(u);if(p){for(let l of c)if(zn(p,l).some((w)=>w.id===`model-${n}`))return l}}let a=d.clientProviderMap?.[u];if(a){let p=e.find((l)=>l.id===a);if(p)return p}return c[0]}async function de(i){let o=ne[i.backend],n=oi(o);if(!n)return{};let d=await V(),e=i.providerId?d.find((r)=>r.id===i.providerId):void 0;if(!e)e=await Fr(i.backend,void 0,i.model);if(!e)return{};let u=_(e);if(i.model)u.model=i.model;return i.__providerHint={type:e.type,apiKey:e.apiKey,baseUrl:e.baseUrl},n.getEnvVars(u)}async function Er(i,o){let{saveConfig:n}=await Promise.resolve().then(() => (C(),Wn)),d=await z(),e=d.agentDefaults??{};e[i]=o,d.agentDefaults=e,await n(d)}async function md(){return(await z()).agentDefaults??{}}var go,ne;var xd=N(()=>{qr();Tr();Ti();C();ai();E();go={claude:Ir,codex:Vr},ne={claude:"claude-code",codex:"codex"}});function Mo(i,o="human",n={}){if(o==="json"){process.stdout.write(JSON.stringify(ee(i))+`
310
+ `);return}if(o==="verbose"){Ul(i,new Date(i.ts).toISOString().slice(11,23),{expandError:!0,...n});return}_l(i,n)}function _r(i){if(i===void 0||i===null)return"";let o;try{o=typeof i==="string"?i:JSON.stringify(i,null,2)}catch{o=String(i)}return o.split(`
311
311
  `).map((n)=>` \u2502 ${n}`).join(`
312
- `)}function Vl(i,o){switch(i.kind){case"text_delta":process.stdout.write(i.text);break;case"tool_use":{let n=Fr(i.input)??Ri(JSON.stringify(i.input),240);console.log(`
313
- $ ${n}`);break}case"tool_result":{let n=Er(i.output);if(Go(i.output)){console.log(` \u2717 FAILED${n?` ${n}`:""}`);let e=Fl(i.output);if(e)console.log(e.split(`
312
+ `)}function _l(i,o){switch(i.kind){case"text_delta":process.stdout.write(i.text);break;case"tool_use":{let n=Ur(i.input)??Ji(JSON.stringify(i.input),240);console.log(`
313
+ $ ${n}`);break}case"tool_result":{let n=Dr(i.output);if(Go(i.output)){console.log(` \u2717 FAILED${n?` ${n}`:""}`);let e=Dl(i.output);if(e)console.log(e.split(`
314
314
  `).map((u)=>` \u2502 ${u}`).join(`
315
315
  `))}else if(n)console.log(` ${n}`);break}case"approval_required":console.log(`
316
- \u26A0 APPROVAL [${i.approvalType}] id=${i.approvalId}`),console.log(` ${wn(i.approvalType,i.params)}`);break;case"turn_completed":console.log(`
316
+ \u26A0 APPROVAL [${i.approvalType}] id=${i.approvalId}`),console.log(` ${yn(i.approvalType,i.params)}`);break;case"turn_completed":console.log(`
317
317
  \u25C0 turn done${i.stopReason&&i.stopReason!=="end_turn"?` (${i.stopReason})`:""}`);break;case"error":{if(console.log(`
318
- \u2717 ${i.message}`),o.expandError&&i.raw!==void 0)console.log(Zr(i.raw));else if(i.raw!==void 0)console.log(" (\u8BE6\u7EC6\u9519\u8BEF\u5DF2\u6298\u53E0\uFF0C--errors-only \u6216 logs --errors \u5C55\u5F00)");break}default:break}}function Zl(i,o,n){switch(i.kind){case"session_started":console.log(`[${o}] \u25B6 session_started ${i.backend}${i.model?` model=${i.model}`:""}`);break;case"turn_started":console.log(`[${o}] \u25B6 turn_started ${i.turnId}`);break;case"text_delta":process.stdout.write(i.text);break;case"reasoning_delta":console.log(`
319
- [${o}] \uD83D\uDCAD ${Ri(i.text,240)}`);break;case"tool_use":console.log(`
320
- [${o}] \uD83D\uDD27 ${i.name} ${Ri(JSON.stringify(i.input),240)}`);break;case"tool_result":{let d=Go(i.output);console.log(`[${o}] ${d?"\u2717":"\u2713"} ${Ri(JSON.stringify(i.output),240)}`);break}case"approval_required":console.log(`[${o}] \u26A0 approval_required (${i.approvalType}) id=${i.approvalId}`);break;case"turn_completed":console.log(`
318
+ \u2717 ${i.message}`),o.expandError&&i.raw!==void 0)console.log(_r(i.raw));else if(i.raw!==void 0)console.log(" (\u8BE6\u7EC6\u9519\u8BEF\u5DF2\u6298\u53E0\uFF0C--errors-only \u6216 logs --errors \u5C55\u5F00)");break}default:break}}function Ul(i,o,n){switch(i.kind){case"session_started":console.log(`[${o}] \u25B6 session_started ${i.backend}${i.model?` model=${i.model}`:""}`);break;case"turn_started":console.log(`[${o}] \u25B6 turn_started ${i.turnId}`);break;case"text_delta":process.stdout.write(i.text);break;case"reasoning_delta":console.log(`
319
+ [${o}] \uD83D\uDCAD ${Ji(i.text,240)}`);break;case"tool_use":console.log(`
320
+ [${o}] \uD83D\uDD27 ${i.name} ${Ji(JSON.stringify(i.input),240)}`);break;case"tool_result":{let d=Go(i.output);console.log(`[${o}] ${d?"\u2717":"\u2713"} ${Ji(JSON.stringify(i.output),240)}`);break}case"approval_required":console.log(`[${o}] \u26A0 approval_required (${i.approvalType}) id=${i.approvalId}`);break;case"turn_completed":console.log(`
321
321
  [${o}] \u25C0 turn_completed${i.stopReason?` (${i.stopReason})`:""}`);break;case"error":{if(console.log(`
322
- [${o}] \u2717 ${i.message}`),n.expandError!==!1&&i.raw!==void 0)console.log(Zr(i.raw));break}case"session_closed":console.log(`[${o}] \u23F9 session_closed`);break}}function ne(i){let o={kind:i.kind,ts:i.ts};switch(i.kind){case"session_started":if(o.backend=i.backend,i.model)o.model=i.model;return o.sid=i.sid,o;case"turn_started":return o;case"text_delta":return o.text=i.text,o;case"reasoning_delta":return o.text=i.text,o;case"tool_use":{o.tool=i.name;let n=Fr(i.input);return o.input=n?{command:n}:i.input,o}case"tool_result":return o.summary=Er(i.output)??"",o;case"approval_required":return o.approvalId=i.approvalId,o.approvalType=i.approvalType,o.detail=wn(i.approvalType,i.params),o;case"turn_completed":if(i.stopReason&&i.stopReason!=="end_turn")o.stopReason=i.stopReason;return o;case"error":return o.message=i.message,o;case"session_closed":return o}}function Fr(i){if(!i||typeof i!=="object")return null;let o=i.command??i.cmd;if(typeof o!=="string")return null;let n=o.match(/^(?:\S*sh|\S*bash|\S*zsh)(?:\s+-\w+)*\s+["'](.*)["']\s*$/s);return n?n[1]:o}function Er(i){if(!i)return null;if(typeof i==="string")return Ri(i,160);if(typeof i!=="object")return String(i);if(i.approval){let d=i.approval,e=i.reason?`: ${i.reason}`:"";return`[${d}]${e}`}let o=i.stdout??i.output,n=i.exit_code??i.exitCode;if(typeof o==="string"||typeof n==="number"){let d=typeof o==="string"?o.split(`
323
- `).find((r)=>r.trim())??"":"",e=d.length<=120?d:d.slice(0,120)+"\u2026",u=typeof n==="number"?` (exit ${n})`:"";return`${e}${u}`}return Ri(JSON.stringify(i),160)}function Go(i){if(!i||typeof i!=="object")return!1;let o=i.exit_code??i.exitCode;if(typeof o==="number"&&o!==0)return!0;if(i.is_error===!0||i.error)return!0;if(i.approval==="deny"||i.approval==="denied")return!0;return!1}function Fl(i){if(!i||typeof i!=="object")return null;let o=i.stderr??i.error_output;if(typeof o==="string"&&o.trim())return o.trimEnd();let n=i.error;if(typeof n==="string"&&n.trim())return n.trimEnd();return null}function _r(i){return i.some((o)=>o.kind==="error"||o.kind==="tool_result"&&Go(o.output))}function wn(i,o){if(i==="exec"){let n=String(o?.command??""),d=n.match(/^(?:\S*sh|\S*bash|\S*zsh)(?:\s+-\w+)*\s+["'](.*)["']\s*$/s);return`command=${Ri(d?d[1]:n,200)}`}if(i==="patch"){let n=[];if(Array.isArray(o?.changes)){for(let d of o.changes)if(d?.path)n.push(d.path)}if(o?.path)n.push(o.path);return n.length?`paths=${n.slice(0,5).join(", ")}`:Ri(JSON.stringify(o),200)}return Ri(JSON.stringify(o),200)}function Ri(i,o){if(i.length<=o)return i;return i.slice(0,o)+`\u2026(+${i.length-o})`}var it={};ii(it,{runAgentCommand:()=>_l});import{existsSync as de}from"fs";import{stat as xd}from"fs/promises";import{createReadStream as El}from"fs";function fi(i){let o=[],n={};for(let d=0;d<i.length;d++){let e=i[d];if(e.startsWith("--")){let u=e.indexOf("=");if(u>0)n[e.slice(2,u)]=e.slice(u+1);else{let r=i[d+1];if(r!==void 0&&!r.startsWith("--"))n[e.slice(2)]=r,d++;else n[e.slice(2)]=!0}}else o.push(e)}return{positional:o,flags:n}}function Ur(i){let o=Math.floor(i/1000);if(o<60)return`${o}s`;if(o<3600)return`${Math.floor(o/60)}m`;if(o<86400)return`${Math.floor(o/3600)}h`;return`${Math.floor(o/86400)}d`}function ee(i){let o={},n=!1;if(typeof i.status==="string")o.status=i.status.split(",").map((d)=>d.trim()).filter(Boolean),n=!0;if(typeof i["name-prefix"]==="string")o.namePrefix=i["name-prefix"],n=!0;if(typeof i.backend==="string")o.backend=i.backend,n=!0;if(typeof i.model==="string")o.model=i.model,n=!0;if(typeof i.turns==="string")o.turns=parseInt(i.turns,10),n=!0;if(i.all===!0||i.closed===!0)o.includeClosed=!0;return{filter:o,hasFilter:n}}async function _l(i){let o=i[0],n=i.slice(1);if(!o||o==="help"||o==="-h"||o==="--help"){Dr();return}switch(o){case"start":return Ul(n);case"run":return Dl(n);case"list":case"ls":return jl(n);case"send":return im(n);case"cancel":return om(n);case"close":return nm(n);case"show":return dm(n);case"logs":case"log":return em(n);case"attach":return um(n);case"purge":return rm();case"default":return lm(n);case"defaults":return mm();case"approve":return tm(n);case"pending":return cm(n);case"policy":return am(n);case"wait":return pm(n);default:console.error(`\u672A\u77E5\u5B50\u547D\u4EE4: ${o}`),Dr(),process.exit(1)}}function Dr(){console.log(`
322
+ [${o}] \u2717 ${i.message}`),n.expandError!==!1&&i.raw!==void 0)console.log(_r(i.raw));break}case"session_closed":console.log(`[${o}] \u23F9 session_closed`);break}}function ee(i){let o={kind:i.kind,ts:i.ts};switch(i.kind){case"session_started":if(o.backend=i.backend,i.model)o.model=i.model;return o.sid=i.sid,o;case"turn_started":return o;case"text_delta":return o.text=i.text,o;case"reasoning_delta":return o.text=i.text,o;case"tool_use":{o.tool=i.name;let n=Ur(i.input);return o.input=n?{command:n}:i.input,o}case"tool_result":return o.summary=Dr(i.output)??"",o;case"approval_required":return o.approvalId=i.approvalId,o.approvalType=i.approvalType,o.detail=yn(i.approvalType,i.params),o;case"turn_completed":if(i.stopReason&&i.stopReason!=="end_turn")o.stopReason=i.stopReason;return o;case"error":return o.message=i.message,o;case"session_closed":return o}}function Ur(i){if(!i||typeof i!=="object")return null;let o=i.command??i.cmd;if(typeof o!=="string")return null;let n=o.match(/^(?:\S*sh|\S*bash|\S*zsh)(?:\s+-\w+)*\s+["'](.*)["']\s*$/s);return n?n[1]:o}function Dr(i){if(!i)return null;if(typeof i==="string")return Ji(i,160);if(typeof i!=="object")return String(i);if(i.approval){let d=i.approval,e=i.reason?`: ${i.reason}`:"";return`[${d}]${e}`}let o=i.stdout??i.output,n=i.exit_code??i.exitCode;if(typeof o==="string"||typeof n==="number"){let d=typeof o==="string"?o.split(`
323
+ `).find((r)=>r.trim())??"":"",e=d.length<=120?d:d.slice(0,120)+"\u2026",u=typeof n==="number"?` (exit ${n})`:"";return`${e}${u}`}return Ji(JSON.stringify(i),160)}function Go(i){if(!i||typeof i!=="object")return!1;let o=i.exit_code??i.exitCode;if(typeof o==="number"&&o!==0)return!0;if(i.is_error===!0||i.error)return!0;if(i.approval==="deny"||i.approval==="denied")return!0;return!1}function Dl(i){if(!i||typeof i!=="object")return null;let o=i.stderr??i.error_output;if(typeof o==="string"&&o.trim())return o.trimEnd();let n=i.error;if(typeof n==="string"&&n.trim())return n.trimEnd();return null}function jr(i){return i.some((o)=>o.kind==="error"||o.kind==="tool_result"&&Go(o.output))}function yn(i,o){if(i==="exec"){let n=String(o?.command??""),d=n.match(/^(?:\S*sh|\S*bash|\S*zsh)(?:\s+-\w+)*\s+["'](.*)["']\s*$/s);return`command=${Ji(d?d[1]:n,200)}`}if(i==="patch"){let n=[];if(Array.isArray(o?.changes)){for(let d of o.changes)if(d?.path)n.push(d.path)}if(o?.path)n.push(o.path);return n.length?`paths=${n.slice(0,5).join(", ")}`:Ji(JSON.stringify(o),200)}return Ji(JSON.stringify(o),200)}function Ji(i,o){if(i.length<=o)return i;return i.slice(0,o)+`\u2026(+${i.length-o})`}var dt={};ii(dt,{runAgentCommand:()=>im});import{existsSync as ue}from"fs";import{stat as wd}from"fs/promises";import{createReadStream as jl}from"fs";function vi(i){let o=[],n={};for(let d=0;d<i.length;d++){let e=i[d];if(e.startsWith("--")){let u=e.indexOf("=");if(u>0)n[e.slice(2,u)]=e.slice(u+1);else{let r=i[d+1];if(r!==void 0&&!r.startsWith("--"))n[e.slice(2)]=r,d++;else n[e.slice(2)]=!0}}else o.push(e)}return{positional:o,flags:n}}function it(i){let o=Math.floor(i/1000);if(o<60)return`${o}s`;if(o<3600)return`${Math.floor(o/60)}m`;if(o<86400)return`${Math.floor(o/3600)}h`;return`${Math.floor(o/86400)}d`}function re(i){let o={},n=!1;if(typeof i.status==="string")o.status=i.status.split(",").map((d)=>d.trim()).filter(Boolean),n=!0;if(typeof i["name-prefix"]==="string")o.namePrefix=i["name-prefix"],n=!0;if(typeof i.backend==="string")o.backend=i.backend,n=!0;if(typeof i.model==="string")o.model=i.model,n=!0;if(typeof i.turns==="string")o.turns=parseInt(i.turns,10),n=!0;if(i.all===!0||i.closed===!0)o.includeClosed=!0;return{filter:o,hasFilter:n}}async function im(i){let o=i[0],n=i.slice(1);if(!o||o==="help"||o==="-h"||o==="--help"){ot();return}switch(o){case"start":return om(n);case"run":return nm(n);case"list":case"ls":return dm(n);case"send":return em(n);case"cancel":return um(n);case"close":return rm(n);case"show":return tm(n);case"logs":case"log":return cm(n);case"attach":return am(n);case"purge":return pm();case"default":return ym(n);case"defaults":return sm();case"approve":return lm(n);case"pending":return mm(n);case"policy":return xm(n);case"wait":return wm(n);default:console.error(`\u672A\u77E5\u5B50\u547D\u4EE4: ${o}`),ot(),process.exit(1)}}function ot(){console.log(`
324
324
  tako agent <\u5B50\u547D\u4EE4> [...]
325
325
 
326
326
  start <claude|codex> [--model X] [--name N] [--cwd .] [--provider id] [--approval yolo|external] [--json]
@@ -350,27 +350,27 @@ tako agent <\u5B50\u547D\u4EE4> [...]
350
350
 
351
351
  default <backend> <providerId> \u8BBE\u9ED8\u8BA4 provider
352
352
  defaults \u67E5\u770B\u9ED8\u8BA4
353
- `)}async function $i(i){if(!i)console.error("\u7F3A\u5C11 sid \u53C2\u6570"),process.exit(1);let n=(await td()).filter((d)=>d.sid.startsWith(i));if(n.length===0)return i;if(n.length>1)console.error(`sid \u524D\u7F00 "${i}" \u5339\u914D\u591A\u4E2A`),process.exit(1);return n[0].sid}async function Ul(i){let{positional:o,flags:n}=fi(i),d=o[0];if(d!=="claude"&&d!=="codex")console.error("\u7528\u6CD5: tako agent start <claude|codex>"),process.exit(1);let e;if(typeof n.approval==="string"){if(n.approval!=="yolo"&&n.approval!=="external")console.error("--approval \u4EC5\u652F\u6301 yolo|external"),process.exit(1);e=n.approval}let u=await ln({backend:d,model:typeof n.model==="string"?n.model:void 0,name:typeof n.name==="string"?n.name:void 0,workdir:typeof n.cwd==="string"?n.cwd:void 0,providerId:typeof n.provider==="string"?n.provider:void 0,approvalMode:e});if(n.json){process.stdout.write(JSON.stringify({sid:u.sid,name:u.name,backend:u.backend,model:u.model??null,workdir:u.workdir,approvalMode:u.approvalMode??"yolo"})+`
353
+ `)}async function $i(i){if(!i)console.error("\u7F3A\u5C11 sid \u53C2\u6570"),process.exit(1);let n=(await cd()).filter((d)=>d.sid.startsWith(i));if(n.length===0)return i;if(n.length>1)console.error(`sid \u524D\u7F00 "${i}" \u5339\u914D\u591A\u4E2A`),process.exit(1);return n[0].sid}async function om(i){let{positional:o,flags:n}=vi(i),d=o[0];if(d!=="claude"&&d!=="codex")console.error("\u7528\u6CD5: tako agent start <claude|codex>"),process.exit(1);let e;if(typeof n.approval==="string"){if(n.approval!=="yolo"&&n.approval!=="external")console.error("--approval \u4EC5\u652F\u6301 yolo|external"),process.exit(1);e=n.approval}let u=await mn({backend:d,model:typeof n.model==="string"?n.model:void 0,name:typeof n.name==="string"?n.name:void 0,workdir:typeof n.cwd==="string"?n.cwd:void 0,providerId:typeof n.provider==="string"?n.provider:void 0,approvalMode:e});if(n.json){process.stdout.write(JSON.stringify({sid:u.sid,name:u.name,backend:u.backend,model:u.model??null,workdir:u.workdir,approvalMode:u.approvalMode??"yolo"})+`
354
354
  `);return}if(console.log(`\u2713 ${u.backend} session \u5DF2\u521B\u5EFA`),console.log(` sid: ${u.sid}`),console.log(` name: ${u.name}`),u.model)console.log(` model: ${u.model}`);console.log(` workdir: ${u.workdir}`),console.log(` approval: ${u.approvalMode??"yolo"}`),console.log(`
355
- \u540E\u7EED\uFF1Atako agent send ${u.sid} "\u4F60\u7684 prompt"`)}async function Dl(i){let{positional:o,flags:n}=fi(i),d=o[0];if(d!=="claude"&&d!=="codex")console.error('\u7528\u6CD5: tako agent run <claude|codex> --prompt "..."'),process.exit(1);let e=typeof n.prompt==="string"?n.prompt:o.slice(1).join(" ");if(!e)console.error("\u7F3A\u5C11 --prompt"),process.exit(1);let u=!!n.json,r=!!n.purge,t;if(typeof n.approval==="string"){if(n.approval!=="yolo"&&n.approval!=="external")console.error("--approval \u4EC5\u652F\u6301 yolo|external"),process.exit(1);t=n.approval}let c="",a,p=[];try{let x=await ln({backend:d,model:typeof n.model==="string"?n.model:void 0,name:typeof n.name==="string"?n.name:void 0,workdir:typeof n.cwd==="string"?n.cwd:void 0,providerId:typeof n.provider==="string"?n.provider:void 0,approvalMode:t});if(c=x.sid,!u)console.log(`\u2192 run ${c.slice(0,8)} (${x.backend}${x.model?` ${x.model}`:""})`);await mn(c,e,{onFrame:(w)=>{if(w.kind==="text_delta")p.push(w.text);else if(w.kind==="error")a=w.message;if(!u)Mo(w,"human")}})}catch(x){a=x instanceof Error?x.message:String(x)}let l=a?"error":"ok";if(r&&c)try{await $o(c,!0)}catch{}if(u)process.stdout.write(JSON.stringify({sid:c,status:l,text:p.join(""),error:a??null,purged:r})+`
355
+ \u540E\u7EED\uFF1Atako agent send ${u.sid} "\u4F60\u7684 prompt"`)}async function nm(i){let{positional:o,flags:n}=vi(i),d=o[0];if(d!=="claude"&&d!=="codex")console.error('\u7528\u6CD5: tako agent run <claude|codex> --prompt "..."'),process.exit(1);let e=typeof n.prompt==="string"?n.prompt:o.slice(1).join(" ");if(!e)console.error("\u7F3A\u5C11 --prompt"),process.exit(1);let u=!!n.json,r=!!n.purge,t;if(typeof n.approval==="string"){if(n.approval!=="yolo"&&n.approval!=="external")console.error("--approval \u4EC5\u652F\u6301 yolo|external"),process.exit(1);t=n.approval}let c="",a,p=[];try{let x=await mn({backend:d,model:typeof n.model==="string"?n.model:void 0,name:typeof n.name==="string"?n.name:void 0,workdir:typeof n.cwd==="string"?n.cwd:void 0,providerId:typeof n.provider==="string"?n.provider:void 0,approvalMode:t});if(c=x.sid,!u)console.log(`\u2192 run ${c.slice(0,8)} (${x.backend}${x.model?` ${x.model}`:""})`);await xn(c,e,{onFrame:(w)=>{if(w.kind==="text_delta")p.push(w.text);else if(w.kind==="error")a=w.message;if(!u)Mo(w,"human")}})}catch(x){a=x instanceof Error?x.message:String(x)}let l=a?"error":"ok";if(r&&c)try{await $o(c,!0)}catch{}if(u)process.stdout.write(JSON.stringify({sid:c,status:l,text:p.join(""),error:a??null,purged:r})+`
356
356
  `);else{if(a)console.error(`\u2717 run \u5931\u8D25: ${a}`);if(c&&!r)console.log(`
357
- session \u4FDD\u7559: ${c.slice(0,8)}\uFF08tako agent show ${c.slice(0,8)} \u67E5\u770B\uFF1B--purge \u53EF\u81EA\u52A8\u56DE\u6536\uFF09`)}if(a)process.exit(1)}async function jl(i){let{flags:o}=fi(i),{filter:n}=ee(o),d=await cd(n);if(o.json){process.stdout.write(JSON.stringify(d)+`
358
- `);return}let e=d.filter((l)=>l.status==="running").length;if(d.length===0){console.log("(\u65E0\u5339\u914D session)");return}let u=await Promise.all(d.map(async(l)=>_r(await id(l.sid,60)))),r=0,t=d.map((l,x)=>{let w=u[x];if(w)r++;return{sid:l.sid.slice(0,8),backend:l.backend,name:l.name.slice(0,20),model:(l.model??"-").slice(0,24),status:l.status+(w?" \u26A0":""),turns:String(l.turnCount),age:Ur(Date.now()-l.createdAt),last:Ur(Date.now()-l.lastActiveAt)}}),c=["sid","backend","name","model","status","turns","age","last"],a=c.map((l,x)=>Math.max(l.length,...t.map((w)=>w[l].length))),p=(l)=>l.map((x,w)=>x.padEnd(a[w])).join(" ");console.log(p(c)),console.log(p(a.map((l)=>"\u2500".repeat(l))));for(let l of t)console.log(p(c.map((x)=>l[x])));console.log(`
359
- \u5171 ${d.length} \u4E2A\u5339\u914D${e>0?`\uFF0C${e} \u4E2A running`:""}${r>0?`\uFF0C${r} \u4E2A\u6709\u9519\u8BEF(\u26A0\uFF0Clogs <sid> --errors \u67E5\u770B)`:""}\uFF08\u9ED8\u8BA4\u9690\u85CF closed\uFF0C--all \u663E\u793A\u5168\u90E8\uFF09`)}async function im(i){let o=new Set,n=[...i];while(n[0]&&n[0].startsWith("--"))o.add(n.shift());let d=n[0],e=n.slice(1).join(" ");if(!d||!e)console.error("\u7528\u6CD5: tako agent send [--json|--verbose] <sid> <prompt...>"),process.exit(1);let u=o.has("--json")?"json":o.has("--verbose")?"verbose":"human",r=await $i(d);if(u!=="json")console.log(`\u2192 ${r.slice(0,8)}`);await mn(r,e,{onFrame:(t)=>Mo(t,u)})}async function om(i){let{positional:o,flags:n}=fi(i),{filter:d,hasFilter:e}=ee(n);if(e&&!o[0]){let r=await cd(d);if(!await jr("cancel",r,!!n.yes,!!n.json))return;for(let t of r)try{await xn(t.sid)}catch{}if(!n.json)console.log(`\u2713 \u5DF2\u4E2D\u6B62 ${r.length} \u4E2A`);return}let u=await $i(o[0]);await xn(u),console.log(`\u2713 \u5DF2\u4E2D\u6B62 ${u.slice(0,8)}`)}async function nm(i){let{positional:o,flags:n}=fi(i),{filter:d,hasFilter:e}=ee(n);if(e&&!o[0]){let r=await cd(d);if(!await jr(n.purge?"close+purge":"close",r,!!n.yes,!!n.json))return;for(let t of r)try{await $o(t.sid,!!n.purge)}catch{}if(!n.json)console.log(`\u2713 \u5DF2\u5173\u95ED ${r.length} \u4E2A${n.purge?"\uFF08\u5DF2\u5220\u9664\u76EE\u5F55\uFF09":""}`);return}let u=await $i(o[0]);await $o(u,!!n.purge),console.log(`\u2713 \u5DF2\u5173\u95ED ${u.slice(0,8)}${n.purge?"\uFF08\u5DF2\u5220\u9664\u76EE\u5F55\uFF09":""}`)}async function jr(i,o,n,d){if(o.length===0){if(!d)console.log("(\u65E0\u5339\u914D session)");return!1}if(d||n)return!0;console.log(`\u5C06\u5BF9\u4EE5\u4E0B ${o.length} \u4E2A session \u6267\u884C ${i}\uFF1A`);for(let r of o)console.log(` ${r.sid.slice(0,8)} ${r.name} [${r.status}]`);process.stdout.write("\u786E\u8BA4\uFF1F(y/N) ");let u=(await import("readline/promises")).createInterface({input:process.stdin,output:process.stdout});try{let r=await u.question("");return/^y(es)?$/i.test(r.trim())}finally{u.close()}}async function dm(i){let{positional:o,flags:n}=fi(i),d=await $i(o[0]),e=!!n["errors-only"]||!!n.errors,u=typeof n.lines==="string"?parseInt(n.lines,10):e?1e4:30,r=n.json?"json":"human",t=await ad(d,u);if(!t)console.error(`session ${d} \u4E0D\u5B58\u5728`),process.exit(1);let c=t.log;if(e)c=c.filter((p)=>p.kind==="error"||p.kind==="tool_result"&&Go(p.output));if(r==="json"){process.stdout.write(JSON.stringify({meta:t.meta,alive:t.alive,log:c.map(ne)},null,2)+`
357
+ session \u4FDD\u7559: ${c.slice(0,8)}\uFF08tako agent show ${c.slice(0,8)} \u67E5\u770B\uFF1B--purge \u53EF\u81EA\u52A8\u56DE\u6536\uFF09`)}if(a)process.exit(1)}async function dm(i){let{flags:o}=vi(i),{filter:n}=re(o),d=await ad(n);if(o.json){process.stdout.write(JSON.stringify(d)+`
358
+ `);return}let e=d.filter((l)=>l.status==="running").length;if(d.length===0){console.log("(\u65E0\u5339\u914D session)");return}let u=await Promise.all(d.map(async(l)=>jr(await od(l.sid,60)))),r=0,t=d.map((l,x)=>{let w=u[x];if(w)r++;return{sid:l.sid.slice(0,8),backend:l.backend,name:l.name.slice(0,20),model:(l.model??"-").slice(0,24),status:l.status+(w?" \u26A0":""),turns:String(l.turnCount),age:it(Date.now()-l.createdAt),last:it(Date.now()-l.lastActiveAt)}}),c=["sid","backend","name","model","status","turns","age","last"],a=c.map((l,x)=>Math.max(l.length,...t.map((w)=>w[l].length))),p=(l)=>l.map((x,w)=>x.padEnd(a[w])).join(" ");console.log(p(c)),console.log(p(a.map((l)=>"\u2500".repeat(l))));for(let l of t)console.log(p(c.map((x)=>l[x])));console.log(`
359
+ \u5171 ${d.length} \u4E2A\u5339\u914D${e>0?`\uFF0C${e} \u4E2A running`:""}${r>0?`\uFF0C${r} \u4E2A\u6709\u9519\u8BEF(\u26A0\uFF0Clogs <sid> --errors \u67E5\u770B)`:""}\uFF08\u9ED8\u8BA4\u9690\u85CF closed\uFF0C--all \u663E\u793A\u5168\u90E8\uFF09`)}async function em(i){let o=new Set,n=[...i];while(n[0]&&n[0].startsWith("--"))o.add(n.shift());let d=n[0],e=n.slice(1).join(" ");if(!d||!e)console.error("\u7528\u6CD5: tako agent send [--json|--verbose] <sid> <prompt...>"),process.exit(1);let u=o.has("--json")?"json":o.has("--verbose")?"verbose":"human",r=await $i(d);if(u!=="json")console.log(`\u2192 ${r.slice(0,8)}`);await xn(r,e,{onFrame:(t)=>Mo(t,u)})}async function um(i){let{positional:o,flags:n}=vi(i),{filter:d,hasFilter:e}=re(n);if(e&&!o[0]){let r=await ad(d);if(!await nt("cancel",r,!!n.yes,!!n.json))return;for(let t of r)try{await wn(t.sid)}catch{}if(!n.json)console.log(`\u2713 \u5DF2\u4E2D\u6B62 ${r.length} \u4E2A`);return}let u=await $i(o[0]);await wn(u),console.log(`\u2713 \u5DF2\u4E2D\u6B62 ${u.slice(0,8)}`)}async function rm(i){let{positional:o,flags:n}=vi(i),{filter:d,hasFilter:e}=re(n);if(e&&!o[0]){let r=await ad(d);if(!await nt(n.purge?"close+purge":"close",r,!!n.yes,!!n.json))return;for(let t of r)try{await $o(t.sid,!!n.purge)}catch{}if(!n.json)console.log(`\u2713 \u5DF2\u5173\u95ED ${r.length} \u4E2A${n.purge?"\uFF08\u5DF2\u5220\u9664\u76EE\u5F55\uFF09":""}`);return}let u=await $i(o[0]);await $o(u,!!n.purge),console.log(`\u2713 \u5DF2\u5173\u95ED ${u.slice(0,8)}${n.purge?"\uFF08\u5DF2\u5220\u9664\u76EE\u5F55\uFF09":""}`)}async function nt(i,o,n,d){if(o.length===0){if(!d)console.log("(\u65E0\u5339\u914D session)");return!1}if(d||n)return!0;console.log(`\u5C06\u5BF9\u4EE5\u4E0B ${o.length} \u4E2A session \u6267\u884C ${i}\uFF1A`);for(let r of o)console.log(` ${r.sid.slice(0,8)} ${r.name} [${r.status}]`);process.stdout.write("\u786E\u8BA4\uFF1F(y/N) ");let u=(await import("readline/promises")).createInterface({input:process.stdin,output:process.stdout});try{let r=await u.question("");return/^y(es)?$/i.test(r.trim())}finally{u.close()}}async function tm(i){let{positional:o,flags:n}=vi(i),d=await $i(o[0]),e=!!n["errors-only"]||!!n.errors,u=typeof n.lines==="string"?parseInt(n.lines,10):e?1e4:30,r=n.json?"json":"human",t=await pd(d,u);if(!t)console.error(`session ${d} \u4E0D\u5B58\u5728`),process.exit(1);let c=t.log;if(e)c=c.filter((p)=>p.kind==="error"||p.kind==="tool_result"&&Go(p.output));if(r==="json"){process.stdout.write(JSON.stringify({meta:t.meta,alive:t.alive,log:c.map(ee)},null,2)+`
360
360
  `);return}let a=t.meta;if(console.log(`# ${a.sid.slice(0,8)} ${a.backend}${a.model?` ${a.model}`:""}`),console.log(`name=${a.name} status=${a.status} turns=${a.turnCount} approval=${a.approvalMode??"yolo"} alive=${t.alive}`),console.log(`workdir=${a.workdir}`),console.log(`
361
- --- ${e?"errors":"log"} (${c.length}) ---`),e&&c.length===0){console.log("(\u65E0\u9519\u8BEF\u5E27)");return}for(let p of c)Mo(p,r,{expandError:e})}async function em(i){let{positional:o,flags:n}=fi(i),d=await $i(o[0]);if(!de(D(d)))console.error(`session ${d} \u4E0D\u5B58\u5728`),process.exit(1);let e=!!n.errors,u=(await import("fs/promises")).readFile,t=(await u(D(d),"utf-8")).split(`
361
+ --- ${e?"errors":"log"} (${c.length}) ---`),e&&c.length===0){console.log("(\u65E0\u9519\u8BEF\u5E27)");return}for(let p of c)Mo(p,r,{expandError:e})}async function cm(i){let{positional:o,flags:n}=vi(i),d=await $i(o[0]);if(!ue(D(d)))console.error(`session ${d} \u4E0D\u5B58\u5728`),process.exit(1);let e=!!n.errors,u=(await import("fs/promises")).readFile,t=(await u(D(d),"utf-8")).split(`
362
362
  `).filter(Boolean),c=!1;for(let a of t){let p;try{p=JSON.parse(a)}catch{continue}let l=p.kind==="error"||p.kind==="tool_result"&&Go(p.output);if(l)c=!0;if(e&&!l)continue;if(n.json)process.stdout.write(a+`
363
- `);else Mo(p,"verbose",{expandError:!0})}if(e&&!c&&!n.json)console.log("(\u65E0\u9519\u8BEF\u5E27)")}async function um(i){let{positional:o,flags:n}=fi(i),d=await $i(o[0]),e=n.json?"json":n.verbose?"verbose":"human";if(!de(D(d)))console.error(`session ${d} \u4E0D\u5B58\u5728`),process.exit(1);let u=(await xd(D(d))).size;if(e!=="json")console.log(`(attached to ${d.slice(0,8)}; Ctrl-C \u9000\u51FA)`);let r=setInterval(async()=>{try{let t=(await xd(D(d))).size;if(t<=u)return;let c=El(D(d),{start:u,end:t-1});u=t;let a="";c.on("data",(p)=>{a+=typeof p==="string"?p:p.toString("utf-8");let l;while((l=a.indexOf(`
364
- `))>=0){let x=a.slice(0,l);if(a=a.slice(l+1),!x.trim())continue;try{Mo(JSON.parse(x),e)}catch{}}})}catch{}},200);await new Promise((t)=>{process.on("SIGINT",()=>{clearInterval(r),t()})})}async function rm(){let i=await pd();console.log(`\u2713 \u6E05\u7406\u4E86 ${i} \u4E2A closed/dead session`)}async function tm(i){let{positional:o,flags:n}=fi(i),d=await $i(o[0]),e=o[1],u=o[2];if(!e||u!=="allow"&&u!=="deny")console.error("\u7528\u6CD5: tako agent approve <sid> <approvalId> <allow|deny>"),process.exit(1);let r=await cn(d,e);if(r)console.error(`approval ${e} \u5DF2\u6279\u4E3A ${r.decision}`),process.exit(1);if(await od(d,e,{decision:u,reason:typeof n.reason==="string"?n.reason:void 0,by:typeof n.by==="string"?n.by:"cli",decidedAt:Date.now()}),console.log(`\u2713 approval ${e} = ${u}`),typeof n.rule==="string"&&u==="allow")await Rr(d,n.rule),console.log(`\u2713 policy: exec_allow += /${n.rule}/`)}async function cm(i){let{positional:o,flags:n}=fi(i),d=await $i(o[0]),e=await an(d);if(n.json){process.stdout.write(JSON.stringify(e.map((u)=>({approvalId:u.approvalId,type:u.approvalType,detail:wn(u.approvalType,u.params)})),null,2)+`
365
- `);return}if(e.length===0){console.log("(\u65E0 pending)");return}for(let u of e)console.log(`[${u.approvalType}] id=${u.approvalId} ${wn(u.approvalType,u.params)}`)}async function am(i){if(i[0]==="default-show"){console.log(JSON.stringify(_0,null,2));return}let o=await $i(i[0]),n=i[1];if(!n||n==="show"){let e=await dd(o),u=await ed(o);console.log("=== effective policy ==="),console.log(JSON.stringify(e,null,2)),console.log(`
366
- === session override ===`),console.log(Object.keys(u).length===0?"(\u7A7A)":JSON.stringify(u,null,2));return}let d=i.slice(2).join(" ").trim();if(n==="allow-exec"||n==="deny-exec"){if(!d)console.error(`\u7528\u6CD5: tako agent policy <sid> ${n} <regex>`),process.exit(1);let e=await ed(o),u=n==="allow-exec"?"exec_allow":"exec_deny",r=e[u]??[];if(!r.includes(d))r.push(d);e[u]=r,await ud(o,e),console.log(`\u2713 ${u} += /${d}/`);return}if(n==="reset"){await ud(o,{}),console.log("\u2713 \u7B56\u7565\u5DF2\u6E05\u7A7A");return}console.error(`\u672A\u77E5 policy \u5B50\u547D\u4EE4: ${n}`),process.exit(1)}async function pm(i){let{positional:o,flags:n}=fi(i),d=await $i(o[0]),e=!!n.json,u=typeof n.timeout==="string"?Number(n.timeout)*1000:600000,r=typeof n.since==="string"?Number(n.since):0;if(!de(D(d))){if(e)process.stdout.write(JSON.stringify({event:"not_found",sid:d})+`
367
- `);else console.error(`session ${d} \u4E0D\u5B58\u5728`);process.exit(1)}let t=r>0?0:(await xd(D(d))).size,c=Date.now(),a=[];while(Date.now()-c<u){try{let p=(await xd(D(d))).size;if(p>t){let x=await(await import("fs/promises")).open(D(d),"r"),w=Buffer.alloc(p-t);await x.read(w,0,w.length,t),await x.close(),t=p;for(let y of w.toString("utf-8").split(`
368
- `)){if(!y.trim())continue;let s;try{s=JSON.parse(y)}catch{continue}if(r>0&&s.ts<r)continue;if(s.kind==="text_delta"){a.push(s.text);continue}if(s.kind==="approval_required"){let b=await an(d);if(e)process.stdout.write(JSON.stringify({event:"approval_required",pending:b.map((f)=>({approvalId:f.approvalId,type:f.approvalType}))})+`
363
+ `);else Mo(p,"verbose",{expandError:!0})}if(e&&!c&&!n.json)console.log("(\u65E0\u9519\u8BEF\u5E27)")}async function am(i){let{positional:o,flags:n}=vi(i),d=await $i(o[0]),e=n.json?"json":n.verbose?"verbose":"human";if(!ue(D(d)))console.error(`session ${d} \u4E0D\u5B58\u5728`),process.exit(1);let u=(await wd(D(d))).size;if(e!=="json")console.log(`(attached to ${d.slice(0,8)}; Ctrl-C \u9000\u51FA)`);let r=setInterval(async()=>{try{let t=(await wd(D(d))).size;if(t<=u)return;let c=jl(D(d),{start:u,end:t-1});u=t;let a="";c.on("data",(p)=>{a+=typeof p==="string"?p:p.toString("utf-8");let l;while((l=a.indexOf(`
364
+ `))>=0){let x=a.slice(0,l);if(a=a.slice(l+1),!x.trim())continue;try{Mo(JSON.parse(x),e)}catch{}}})}catch{}},200);await new Promise((t)=>{process.on("SIGINT",()=>{clearInterval(r),t()})})}async function pm(){let i=await ld();console.log(`\u2713 \u6E05\u7406\u4E86 ${i} \u4E2A closed/dead session`)}async function lm(i){let{positional:o,flags:n}=vi(i),d=await $i(o[0]),e=o[1],u=o[2];if(!e||u!=="allow"&&u!=="deny")console.error("\u7528\u6CD5: tako agent approve <sid> <approvalId> <allow|deny>"),process.exit(1);let r=await an(d,e);if(r)console.error(`approval ${e} \u5DF2\u6279\u4E3A ${r.decision}`),process.exit(1);if(await nd(d,e,{decision:u,reason:typeof n.reason==="string"?n.reason:void 0,by:typeof n.by==="string"?n.by:"cli",decidedAt:Date.now()}),console.log(`\u2713 approval ${e} = ${u}`),typeof n.rule==="string"&&u==="allow")await Yr(d,n.rule),console.log(`\u2713 policy: exec_allow += /${n.rule}/`)}async function mm(i){let{positional:o,flags:n}=vi(i),d=await $i(o[0]),e=await pn(d);if(n.json){process.stdout.write(JSON.stringify(e.map((u)=>({approvalId:u.approvalId,type:u.approvalType,detail:yn(u.approvalType,u.params)})),null,2)+`
365
+ `);return}if(e.length===0){console.log("(\u65E0 pending)");return}for(let u of e)console.log(`[${u.approvalType}] id=${u.approvalId} ${yn(u.approvalType,u.params)}`)}async function xm(i){if(i[0]==="default-show"){console.log(JSON.stringify(D0,null,2));return}let o=await $i(i[0]),n=i[1];if(!n||n==="show"){let e=await ed(o),u=await ud(o);console.log("=== effective policy ==="),console.log(JSON.stringify(e,null,2)),console.log(`
366
+ === session override ===`),console.log(Object.keys(u).length===0?"(\u7A7A)":JSON.stringify(u,null,2));return}let d=i.slice(2).join(" ").trim();if(n==="allow-exec"||n==="deny-exec"){if(!d)console.error(`\u7528\u6CD5: tako agent policy <sid> ${n} <regex>`),process.exit(1);let e=await ud(o),u=n==="allow-exec"?"exec_allow":"exec_deny",r=e[u]??[];if(!r.includes(d))r.push(d);e[u]=r,await rd(o,e),console.log(`\u2713 ${u} += /${d}/`);return}if(n==="reset"){await rd(o,{}),console.log("\u2713 \u7B56\u7565\u5DF2\u6E05\u7A7A");return}console.error(`\u672A\u77E5 policy \u5B50\u547D\u4EE4: ${n}`),process.exit(1)}async function wm(i){let{positional:o,flags:n}=vi(i),d=await $i(o[0]),e=!!n.json,u=typeof n.timeout==="string"?Number(n.timeout)*1000:600000,r=typeof n.since==="string"?Number(n.since):0;if(!ue(D(d))){if(e)process.stdout.write(JSON.stringify({event:"not_found",sid:d})+`
367
+ `);else console.error(`session ${d} \u4E0D\u5B58\u5728`);process.exit(1)}let t=r>0?0:(await wd(D(d))).size,c=Date.now(),a=[];while(Date.now()-c<u){try{let p=(await wd(D(d))).size;if(p>t){let x=await(await import("fs/promises")).open(D(d),"r"),w=Buffer.alloc(p-t);await x.read(w,0,w.length,t),await x.close(),t=p;for(let y of w.toString("utf-8").split(`
368
+ `)){if(!y.trim())continue;let s;try{s=JSON.parse(y)}catch{continue}if(r>0&&s.ts<r)continue;if(s.kind==="text_delta"){a.push(s.text);continue}if(s.kind==="approval_required"){let b=await pn(d);if(e)process.stdout.write(JSON.stringify({event:"approval_required",pending:b.map((v)=>({approvalId:v.approvalId,type:v.approvalType}))})+`
369
369
  `);else console.log(`event=approval_required pending=${b.length}`);process.exit(0)}if(s.kind==="turn_completed"){if(e)process.stdout.write(JSON.stringify({event:"turn_completed",text:a.join("")})+`
370
370
  `);else if(console.log("event=turn_completed"),a.join("").trim())console.log(a.join("").trim());process.exit(2)}if(s.kind==="error"){if(e)process.stdout.write(JSON.stringify({event:"error",message:s.message})+`
371
371
  `);else console.error(`event=error ${s.message}`);process.exit(1)}if(s.kind==="session_closed"){if(e)process.stdout.write(JSON.stringify({event:"session_closed"})+`
372
372
  `);else console.log("event=session_closed");process.exit(3)}}}}catch{}await new Promise((p)=>setTimeout(p,200))}if(e)process.stdout.write(JSON.stringify({event:"timeout"})+`
373
- `);else console.error("event=timeout");process.exit(1)}async function lm(i){let o=i[0],n=i[1];if(o!=="claude"&&o!=="codex"||!n)console.error("\u7528\u6CD5: tako agent default <claude|codex> <providerId>"),process.exit(1);await Vr(o,n),console.log(`\u2713 ${o} \u9ED8\u8BA4 provider = ${n}`)}async function mm(){let i=await ld();if(Object.keys(i).length===0)console.log("(\u672A\u8BBE\u7F6E)");else for(let[o,n]of Object.entries(i))console.log(`${o.padEnd(8)} \u2192 ${n}`)}var ot=N(()=>{Zi();md();D0()});var ue;var re=N(()=>{ue={name:"model-benchmark",description:"Tako \u6A21\u578B\u8BC4\u6D4B\u7ED3\u679C\u4E0E\u63A8\u8350 \u2014 \u67E5\u8BE2\u5404\u6A21\u578B\u7F16\u7801\u80FD\u529B\u8BC4\u5206",filename:"SKILL.md",content:`---
373
+ `);else console.error("event=timeout");process.exit(1)}async function ym(i){let o=i[0],n=i[1];if(o!=="claude"&&o!=="codex"||!n)console.error("\u7528\u6CD5: tako agent default <claude|codex> <providerId>"),process.exit(1);await Er(o,n),console.log(`\u2713 ${o} \u9ED8\u8BA4 provider = ${n}`)}async function sm(){let i=await md();if(Object.keys(i).length===0)console.log("(\u672A\u8BBE\u7F6E)");else for(let[o,n]of Object.entries(i))console.log(`${o.padEnd(8)} \u2192 ${n}`)}var et=N(()=>{Ti();xd();ie()});var te;var ce=N(()=>{te={name:"model-benchmark",description:"Tako \u6A21\u578B\u8BC4\u6D4B\u7ED3\u679C\u4E0E\u63A8\u8350 \u2014 \u67E5\u8BE2\u5404\u6A21\u578B\u7F16\u7801\u80FD\u529B\u8BC4\u5206",filename:"SKILL.md",content:`---
374
374
  name: model-benchmark
375
375
  description: "Tako \u6A21\u578B\u8BC4\u6D4B\u7ED3\u679C\u4E0E\u63A8\u8350\uFF1A\u67E5\u8BE2\u5404\u6A21\u578B\u7F16\u7801\u80FD\u529B\u8BC4\u5206\u3001\u9009\u6A21\u578B\u5EFA\u8BAE\u3001\u6027\u4EF7\u6BD4\u5BF9\u6BD4\u3002\u89E6\u53D1\u8BCD: \u6A21\u578B\u63A8\u8350, benchmark, \u54EA\u4E2A\u6A21\u578B\u597D, \u9009\u6A21\u578B, model comparison, \u6A21\u578B\u5BF9\u6BD4, \u56FD\u4EA7\u6A21\u578B, \u8BC4\u6D4B\u7ED3\u679C"
376
376
  allowed-tools: Read, Bash(bun:*)
@@ -429,7 +429,7 @@ allowed-tools: Read, Bash(bun:*)
429
429
  ${"```"}bash
430
430
  cd packages/cli && bun run scripts/benchmark-models.ts
431
431
  ${"```"}
432
- `}});var te;var ce=N(()=>{te={name:"tako-agent",description:"\u957F\u65F6 agent session \u7BA1\u7406 \u2014 \u542F\u52A8/\u7EED\u63A5/\u76D1\u63A7/\u5173\u95ED Claude/Codex agent",filename:"SKILL.md",content:`---
432
+ `}});var ae;var pe=N(()=>{ae={name:"tako-agent",description:"\u957F\u65F6 agent session \u7BA1\u7406 \u2014 \u542F\u52A8/\u7EED\u63A5/\u76D1\u63A7/\u5173\u95ED Claude/Codex agent",filename:"SKILL.md",content:`---
433
433
  name: tako-agent
434
434
  description: "\u901A\u8FC7 tako CLI \u542F\u52A8\u3001\u7EED\u63A5\u3001\u76D1\u63A7\u3001\u5173\u95ED Claude Code \u4E0E Codex \u7684\u957F\u65F6 agent session\u3002\u89E6\u53D1\u8BCD: agent session, \u6D3E\u4E00\u4E2A agent, \u5F00\u4E00\u4E2A\u5B50\u4F1A\u8BDD, \u7BA1\u7406 agent, \u770B agent \u8DD1\u5230\u54EA\u4E86, \u53D6\u6D88\u90A3\u4E2A agent, \u5E76\u884C\u8DD1 agent"
435
435
  allowed-tools: Bash(tako:*)
@@ -512,26 +512,26 @@ ${"```"}
512
512
  - claude \u7528 \`--resume\` \u6301\u4E45\u5316\u5386\u53F2\uFF0Ccodex \u7528 \`thread/resume\`
513
513
  - \`--approval yolo\`\uFF08\u9ED8\u8BA4\uFF09\u4E0D\u5BA1\u6279\uFF1B\`--approval external\` \u542F\u7528\u5916\u7F6E\u5BA1\u6279
514
514
  - \u9ED8\u8BA4\u7B56\u7565\u5DF2\u8986\u76D6\u5E38\u89C1\u5B89\u5168\u573A\u666F\uFF08auto_allow \u53EA\u8BFB\u547D\u4EE4\uFF0Cauto_deny \u5371\u9669\u64CD\u4F5C\uFF09
515
- `}});var wd;var nt=N(()=>{re();ce();re();ce();wd=[ue,te]});var dt={};ii(dt,{runSkillCommand:()=>ym});import{join as ae}from"path";import{existsSync as xm,mkdirSync as wm}from"fs";async function ym(i){let o=i[0];if(!o||o==="list"){console.log(`
515
+ `}});var yd;var ut=N(()=>{ce();pe();ce();pe();yd=[te,ae]});var rt={};ii(rt,{runSkillCommand:()=>hm});import{join as le}from"path";import{existsSync as vm,mkdirSync as fm}from"fs";async function hm(i){let o=i[0];if(!o||o==="list"){console.log(`
516
516
  Available skills:
517
- `);for(let n of wd)console.log(` ${n.name.padEnd(20)} ${n.description}`);console.log(`
517
+ `);for(let n of yd)console.log(` ${n.name.padEnd(20)} ${n.description}`);console.log(`
518
518
  Install: tako skill install <name>`),console.log(`Install all: tako skill install --all
519
- `);return}if(o==="install"){let n=i[1];if(!n)console.error("Usage: tako skill install <name|--all>"),process.exit(1);let d=n==="--all"?wd:wd.filter((u)=>u.name===n);if(d.length===0)console.error(`Skill "${n}" not found. Run "tako skill list" to see available skills.`),process.exit(1);let e=ae(process.cwd(),".claude","skills");for(let u of d){let r=ae(e,u.name),t=ae(r,u.filename);if(xm(t)){console.log(` skip ${u.name} (already exists)`);continue}wm(r,{recursive:!0}),await Bun.write(t,u.content),console.log(` \u2713 installed ${u.name} \u2192 .claude/skills/${u.name}/${u.filename}`)}return}console.error(`Unknown subcommand: ${o}. Try "tako skill list" or "tako skill install <name>".`),process.exit(1)}var et=N(()=>{nt()});var rt={};ii(rt,{runModelsCommand:()=>$m});function sm(i){let o={json:!1,refresh:!1},n=[...i];if(n[0]==="list")n.shift();for(let d of n)if(d==="--json")o.json=!0;else if(d==="--refresh")o.refresh=!0;else return o.invalid=d,o;return o}function fm(i){return(i.providers??[]).filter((n)=>n.type==="tako"&&!!n.baseUrl).sort((n,d)=>n.id.localeCompare(d.id))}function vm(i){return[...i].sort((o,n)=>o.id.localeCompare(n.id)||o.displayName.localeCompare(n.displayName))}function hm(i,o){let n=[],d=!1;for(let e of ut){let u=o(i.baseUrl,e);if(u===null){n.push({apiType:e,models:[]});continue}d=!0,n.push({apiType:e,models:vm(u)})}return{id:i.id,name:i.name,baseUrl:i.baseUrl,buckets:n,hasAnyCache:d}}async function bm(i,o){let n=[];for(let d of i){if(!d.apiKey||!d.baseUrl)continue;for(let e of ut)n.push(o(d.baseUrl,d.apiKey,e).catch(()=>{}))}await Promise.allSettled(n)}function Nm(i){let o=new Set,n=[];for(let d of i)for(let e of d.models){if(o.has(e.id))continue;o.add(e.id),n.push(e.id)}return n.sort((d,e)=>d.localeCompare(e))}function Wm(i){let o=[],n=[],d="";for(let e of i){let u=e.slice(0,3);if(u!==d){if(n.length)o.push(n);n=[e],d=u}else n.push(e)}if(n.length)o.push(n);return o}function km(i,o){if(i.length===0)return[];let n=4,e=Math.max(...i.map((a)=>a.length))+2,u=Math.max(e,o-n),r=Math.max(1,Math.floor(u/e)),t=Math.min(r,Lm),c=[];for(let a=0;a<i.length;a+=t){let p=i.slice(a,a+t),l=p.map((x,w)=>w===p.length-1?x:x.padEnd(e)).join("");c.push(" ".repeat(n)+l)}return c}function zm(i,o){if(i.length===0)return`\u672A\u914D\u7F6E Tako \u6E20\u9053
520
- `;let n=[];for(let d of i){if(n.push(`Provider: ${d.id} (${d.baseUrl})`),!d.hasAnyCache){n.push(" \u7F13\u5B58\u4E3A\u7A7A\uFF0C\u8BF7\u5148\u8FD0\u884C `tako models list --refresh`"),n.push("");continue}let e=Nm(d.buckets);n.push(` ${e.length} models`);for(let u of Wm(e))n.push(...km(u,o));n.push("")}return n.join(`
521
- `)}function gm(i,o,n){let d=i.map((u)=>({id:u.id,name:u.name,baseUrl:u.baseUrl,hasCache:u.hasAnyCache,models:u.buckets.flatMap((r)=>r.models.map((t)=>({apiType:r.apiType,id:t.id,displayName:t.displayName,description:t.description,contextWindow:t.contextWindow,sortOrder:t.sortOrder})))}));return`${JSON.stringify({command:"list",refreshed:o,fetchedAt:n,providers:d})}
522
- `}async function $m(i=[],o={}){let n=sm(i);if(n.invalid)return process.stderr.write(`Unknown argument: ${n.invalid}
519
+ `);return}if(o==="install"){let n=i[1];if(!n)console.error("Usage: tako skill install <name|--all>"),process.exit(1);let d=n==="--all"?yd:yd.filter((u)=>u.name===n);if(d.length===0)console.error(`Skill "${n}" not found. Run "tako skill list" to see available skills.`),process.exit(1);let e=le(process.cwd(),".claude","skills");for(let u of d){let r=le(e,u.name),t=le(r,u.filename);if(vm(t)){console.log(` skip ${u.name} (already exists)`);continue}fm(r,{recursive:!0}),await Bun.write(t,u.content),console.log(` \u2713 installed ${u.name} \u2192 .claude/skills/${u.name}/${u.filename}`)}return}console.error(`Unknown subcommand: ${o}. Try "tako skill list" or "tako skill install <name>".`),process.exit(1)}var tt=N(()=>{ut()});var at={};ii(at,{runModelsCommand:()=>Pm});function bm(i){let o={json:!1,refresh:!1},n=[...i];if(n[0]==="list")n.shift();for(let d of n)if(d==="--json")o.json=!0;else if(d==="--refresh")o.refresh=!0;else return o.invalid=d,o;return o}function Lm(i){return(i.providers??[]).filter((n)=>n.type==="tako"&&!!n.baseUrl).sort((n,d)=>n.id.localeCompare(d.id))}function Nm(i){return[...i].sort((o,n)=>o.id.localeCompare(n.id)||o.displayName.localeCompare(n.displayName))}function Wm(i,o){let n=[],d=!1;for(let e of ct){let u=o(i.baseUrl,e);if(u===null){n.push({apiType:e,models:[]});continue}d=!0,n.push({apiType:e,models:Nm(u)})}return{id:i.id,name:i.name,baseUrl:i.baseUrl,buckets:n,hasAnyCache:d}}async function km(i,o){let n=[];for(let d of i){if(!d.apiKey||!d.baseUrl)continue;for(let e of ct)n.push(o(d.baseUrl,d.apiKey,e).catch(()=>{}))}await Promise.allSettled(n)}function gm(i){let o=new Set,n=[];for(let d of i)for(let e of d.models){if(o.has(e.id))continue;o.add(e.id),n.push(e.id)}return n.sort((d,e)=>d.localeCompare(e))}function $m(i){let o=[],n=[],d="";for(let e of i){let u=e.slice(0,3);if(u!==d){if(n.length)o.push(n);n=[e],d=u}else n.push(e)}if(n.length)o.push(n);return o}function Mm(i,o){if(i.length===0)return[];let n=4,e=Math.max(...i.map((a)=>a.length))+2,u=Math.max(e,o-n),r=Math.max(1,Math.floor(u/e)),t=Math.min(r,zm),c=[];for(let a=0;a<i.length;a+=t){let p=i.slice(a,a+t),l=p.map((x,w)=>w===p.length-1?x:x.padEnd(e)).join("");c.push(" ".repeat(n)+l)}return c}function Gm(i,o){if(i.length===0)return`\u672A\u914D\u7F6E Tako \u6E20\u9053
520
+ `;let n=[];for(let d of i){if(n.push(`Provider: ${d.id} (${d.baseUrl})`),!d.hasAnyCache){n.push(" \u7F13\u5B58\u4E3A\u7A7A\uFF0C\u8BF7\u5148\u8FD0\u884C `tako models list --refresh`"),n.push("");continue}let e=gm(d.buckets);n.push(` ${e.length} models`);for(let u of $m(e))n.push(...Mm(u,o));n.push("")}return n.join(`
521
+ `)}function Sm(i,o,n){let d=i.map((u)=>({id:u.id,name:u.name,baseUrl:u.baseUrl,hasCache:u.hasAnyCache,models:u.buckets.flatMap((r)=>r.models.map((t)=>({apiType:r.apiType,id:t.id,displayName:t.displayName,description:t.description,contextWindow:t.contextWindow,sortOrder:t.sortOrder})))}));return`${JSON.stringify({command:"list",refreshed:o,fetchedAt:n,providers:d})}
522
+ `}async function Pm(i=[],o={}){let n=bm(i);if(n.invalid)return process.stderr.write(`Unknown argument: ${n.invalid}
523
523
  Usage: tako models [list] [--refresh] [--json]
524
- `),1;let d=o.loadConfig??z,e=o.refresh??Cn,u=o.read??Hi,r=o.now??(()=>Date.now()),t=o.columns??(()=>process.stdout.columns??80),c=await d(),a=fm(c);if(n.refresh&&a.length>0)await bm(a,e);let p=a.map((x)=>hm(x,u)),l=new Date(r()).toISOString();if(n.json)process.stdout.write(gm(p,n.refresh,l));else process.stdout.write(zm(p,t()));return 0}var ut,Lm=5;var tt=N(()=>{C();Xd();ut=["openai","claude"]});var le="0.3.18",yn=22,m,So,Po,pt,lt,Co,Fi;var Io=N(()=>{m={bg:"#17130f",panel:"#211b16",panelMuted:"#2b231c",text:"#ece3d8",muted:"#94897c",border:"#3a3129",orange:"#fb8147",orangeDim:"#c96a3a",cyan:"#8fb8a8",green:"#8fbf7a",yellow:"#e6b45c",red:"#e58f7b",magenta:"#c99bd6",blue:"#88a8d8",gray:"#94897c"},So={"claude-code":{icon:"*",color:m.orange},codex:{icon:"C",color:m.blue},gemini:{icon:"G",color:m.green}},Po={icon:"-",color:m.text},pt=["\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588"," \u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588"," \u2588 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588"," \u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588"," \u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588"].join(`
525
- `),lt=["\u2580\u2588\u2580 \u2584\u2580\u2588 \u2588\u2584\u2580 \u2588\u2580\u2588"," \u2588 \u2588\u2580\u2588 \u2588 \u2588 \u2588\u2584\u2588"].join(`
526
- `),Co=["tako","claude-subscription","codex-subscription","anthropic","deepseek","xiaomi","custom"],Fi=[{value:"en",label:"English"},{value:"zh",label:"\u4E2D\u6587"}]});async function mt(i=45){let o=Ie(),n=await Du(),d=await ei(),e=Ii()==="zh",u=[...o].sort((c,a)=>{if(c.id===n)return-1;if(a.id===n)return 1;return 0}),r=[];for(let c of u){let a=await Uu(c.id,L0,!0),p=process.cwd(),l=[{label:e?"\u5728\u5F53\u524D\u76EE\u5F55\u542F\u52A8":"Launch in current directory",hint:W0(p,i),path:p},...a.map((k)=>({label:W0(k.path,i),hint:ju(k.lastLaunchedAt),path:k.path}))],x=await Qi(c.id),y=await qi(c.id)||x.find((k)=>k.id===d?.id)||x[0],s=y?x.findIndex((k)=>k.id===y.id):0,b=kn(c,y),f=new Set(b.map((k)=>k.id)),M=(await Bn(c.id)).filter((k)=>f.has(k));r.push({client:c,projects:l,providers:x,activeProvider:y,activeProvIdx:Math.max(s,0),launchOptions:b,lastSelectedOptionIds:M})}let t={};try{t=await rr()}catch{t={}}return{clients:r,defaultIdx:0,hasProviders:r.some((c)=>c.providers.length>0),pickCounts:t,zh:e}}var xt=N(()=>{t0();E();H();M0();An();ai()});function co(i,o){let n=[],d=new Set;for(let e of i){if(!e.group){n.push({kind:"flag",opt:e});continue}if(!d.has(e.group))d.add(e.group),n.push({kind:"group",group:e.group,title:e.group==="model"?o?"\u6A21\u578B":"Model":e.group})}return n.push({kind:"provider",title:o?"\u670D\u52A1\u5546":"Provider"}),n}function Ei(i,o,n){return i.find((d)=>d.group===n&&o.has(d.id))}function me(i){let o=[],n={},d=[];for(let e of i.launchOptions){if(!i.enabled.has(e.id))continue;if(o.push(...e.args),e.envVars)Object.assign(n,e.envVars);d.push(e.id)}return{args:o,envVars:n,selectedOptionIds:d}}function wt(i,o,n){let d=new Set(o.map((a)=>a.id)),e=new Set(o.filter((a)=>a.group==="model").map((a)=>a.id)),u=n?`model-${n}`:void 0,r=new Set,t=!1,c=!1;for(let a of i)if(d.has(a)){if(r.add(a),e.has(a))c=!0}else t=!0;if(!c&&u&&e.has(u))r.add(u),t=!0;return t?r:i}async function yt(){let i=await st(),o=Ii();return{...i,screen:"launcher",busy:!1,message:"",providers:[],defaultProviderId:void 0,clientBindings:{},providerTabIdx:i.clientIdx,providerRowIdx:0,providerDetailIdx:0,optionPickerGroup:void 0,optionPickerIdx:0,modelPickerMode:"collapsed",scrollOffset:0,scrollScreen:"launcher",providerSelectedId:void 0,providerInputMode:"add-key",addType:"tako",addKey:"",addUrl:"",addModel:"",addCtx:"",statsLoading:!1,apiKeyValue:"",apiKeyStatus:"idle",languageIdx:Math.max(0,Fi.findIndex((n)=>n.value===o)),agentDefaults:{},agentIdx:0,agentDetailFrames:[],agentDetailInput:"",agentDetailStatus:"idle",agentPendingApprovals:[],agentBackend:"claude",agentModel:"",agentName:"",agentField:"backend",keyGuideIdx:0,clientVersions:[],clientVersionsClientIdx:0,clientVersionsIdx:0,clientVersionsLoading:!1}}async function st(){let i=await mt(48);return{clients:i.clients.map((n)=>({...n,enabled:wt(new Set(n.lastSelectedOptionIds),n.launchOptions,n.activeProvider?.model)})),clientIdx:i.defaultIdx,focus:"tabs",projectIdx:0,optionIdx:0,zh:i.zh,pickCounts:i.pickCounts}}async function vi(i){let o=i.clients[i.clientIdx]?.client.id,n=await st();i.clients=n.clients,i.zh=n.zh,i.pickCounts=n.pickCounts;let d=o?i.clients.findIndex((e)=>e.client.id===o):-1;i.clientIdx=d>=0?d:0,xe(i)}function xe(i){let o=i.clients[i.clientIdx];if(!o)return;let n=co(o.launchOptions,i.zh);i.projectIdx=Math.max(0,Math.min(i.projectIdx,o.projects.length-1)),i.optionIdx=Math.max(0,Math.min(i.optionIdx,n.length-1))}function sn(i){if(i.focus==="options")i.focus="tabs";i.projectIdx=0,i.optionIdx=0,i.optionPickerGroup=void 0,i.optionPickerIdx=0,i.modelPickerMode="collapsed"}function ao(i,o){if(i.screen="provider-input",i.providerInputMode=o,i.providerRowIdx=0,i.addKey="",o==="add-key")i.addUrl="",i.addModel=Fo(i.addType)||"",i.addCtx=""}var sd=N(()=>{Si();H();xt();Io()});async function Lt(){try{let i=await Di();if(!i)return{success:!1,error:"\u672A\u627E\u5230 API ID\uFF0C\u8BF7\u91CD\u65B0\u914D\u7F6E Key"};let n=await(await fetch(`${Y}/apiStats/api/user-stats`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:i})})).json(),e=await(await fetch(`${Y}/apiStats/api/user-model-stats`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:i,period:"daily"})})).json();if(!n.success)return{success:!1,error:n.error||n.message||"\u83B7\u53D6\u7EDF\u8BA1\u5931\u8D25"};let u=(e.data||[]).map((r)=>({model:r.model,requests:r.requests,cost:r.formatted?.total||"$0.00"}));return{success:!0,data:{totalRequests:n.data?.usage?.total?.requests||0,totalCost:n.data?.usage?.total?.formattedCost||"$0.00",todayCost:`$${(n.data?.limits?.currentDailyCost||0).toFixed(2)}`,modelStats:u}}}catch(i){return{success:!1,error:i instanceof Error?i.message:"\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25"}}}function Nt(i){return i.toLocaleString("en-US")}var fe=N(()=>{C()});var It={};ii(It,{syncSubscriptionProviderFromLocalAuth:()=>$e,shouldShowKeyGuide:()=>x1,runSubscriptionAuthCommand:()=>ge,refreshQuota:()=>ke,refreshProviders:()=>Ji,refreshAgentDetail:()=>Bi,openStats:()=>hn,openProviders:()=>po,openClientVersions:()=>Me,openAgents:()=>hi,openAgentDetail:()=>ze,loadClientVersions:()=>lo,installClientVersion:()=>Ge,finishProviderAdd:()=>bn,dismissKeyGuide:()=>bd,backToLauncher:()=>Ai});async function ke(i){let o=i.clients[i.clientIdx]?.activeProvider;if(!o){i.quota=void 0,i.quotaKey=void 0;return}let n=`${o.id}:${o.type}`;if(i.quotaKey===n&&i.quota)return;i.quotaKey=n;let{getOfficialQuota:d}=await Promise.resolve().then(() => (Vn(),I0)),e=await d(o);if(i.quotaKey===n)i.quota=e}async function Ji(i){i.providers=await V(),i.defaultProviderId=(await ei())?.id;let o={};for(let n of i.clients)o[n.client.id]=(await qi(n.client.id))?.id;i.clientBindings=o}async function po(i){i.screen="providers",i.message="",i.providerTabIdx=i.clientIdx,i.providerRowIdx=0,await Ji(i)}async function hn(i){i.screen="stats",i.message="",i.statsLoading=!0,i.statsError=void 0;let o=await Lt();if(o.success&&o.data)i.statsData=o.data;else i.statsError=o.error||(i.zh?"\u672A\u77E5\u9519\u8BEF":"Unknown error");i.statsLoading=!1}async function hi(i){i.screen="agents",i.message="",i.agentError=void 0;let[o,n]=await Promise.all([td(),ld()]);i.agentSessions=o,i.agentDefaults=n,i.agentIdx=Math.max(0,Math.min(i.agentIdx,o.length-1))}async function Bi(i){let o=i.agentDetailSid;if(!o)return;let[n,d]=await Promise.all([ad(o,200),an(o)]);if(!n){i.agentError=i.zh?"Session \u4E0D\u5B58\u5728":"Session not found",i.screen="agents",await hi(i);return}i.agentDetailMeta=n.meta,i.agentDetailFrames=n.log,i.agentDetailAlive=n.alive,i.agentPendingApprovals=d}async function ze(i,o){i.screen="agent-detail",i.agentDetailSid=o,i.agentDetailInput="",i.agentDetailStatus="idle",i.agentError=void 0,await Bi(i)}function Ai(i){i.screen="launcher",i.message="",i.apiKeyStatus="idle",i.apiKeyError=void 0}function Ct(i){try{if(process.stdin.isTTY)process.stdin.setRawMode(i)}catch{}}function m1(i){return i==="claude"?["claude","auth","login","--claudeai"]:["codex","login"]}async function ge(i){let o=m1(i);Ct(!1);try{let n=Bun.spawn(o,{stdin:"inherit",stdout:"inherit",stderr:"inherit"});return await n.exited,{ok:n.exitCode===0,exitCode:n.exitCode}}catch(n){return{ok:!1,error:n instanceof Error?n.message:String(n)}}finally{Ct(!1)}}async function $e(i,o){let{invalidateQuotaCache:n}=await Promise.resolve().then(() => (Vn(),I0)),d=await V();if(i==="claude")try{let e=Bun.spawn(["claude","auth","status"],{stdout:"pipe",stderr:"pipe"}),u=await new Response(e.stdout).text();await e.exited;let r=JSON.parse(u.trim());if(!r.loggedIn||r.authMethod!=="claude.ai")return{ok:!1,message:o?"Claude \u767B\u5F55\u672A\u5B8C\u6210":"Claude login not completed"};let t=r.email||"",c=r.subscriptionType||"pro",a=`Claude ${c.charAt(0).toUpperCase()+c.slice(1)}${t?` (${t})`:""}`,{readClaudeAuth:p}=await Promise.resolve().then(() => (qn(),Qn)),l=await p(),x=l.credentials||l.oauthAccount?{credentials:l.credentials,oauthAccount:l.oauthAccount}:void 0,w=d.find((y)=>y.type==="claude-subscription"&&(y.email||"")===t);if(w)return await Xi(w.id,{authData:x}),n(w.id,"claude-subscription"),U(),T(),{ok:!0,message:o?"Claude tokens \u5DF2\u66F4\u65B0":"Claude tokens updated"};else return await eo({name:a,type:"claude-subscription",email:t,subscriptionType:c,supportedClients:di("claude-subscription"),authData:x}),U(),T(),{ok:!0,message:o?"Claude \u8BA2\u9605\u5DF2\u6DFB\u52A0":"Claude subscription added"}}catch(e){return{ok:!1,message:e instanceof Error?e.message:String(e)}}else try{let e=await import("fs/promises"),{homedir:u}=await import("os"),{join:r}=await import("path"),t=JSON.parse(await e.readFile(r(u(),".codex","auth.json"),"utf-8"));if(t.auth_mode!=="chatgpt"||!t.tokens?.access_token)return{ok:!1,message:o?"Codex \u767B\u5F55\u672A\u5B8C\u6210":"Codex login not completed"};let c="";try{c=JSON.parse(atob(t.tokens.id_token.split(".")[1])).email||""}catch{}let a=d.find((p)=>p.type==="codex-subscription"&&(p.email||"")===c);if(a)return await Xi(a.id,{authData:t}),n(a.id,"codex-subscription"),U(),T(),{ok:!0,message:o?"Codex tokens \u5DF2\u66F4\u65B0":"Codex tokens updated"};else return await eo({name:c?`Codex Plus (${c})`:"Codex Subscription",type:"codex-subscription",email:c||void 0,supportedClients:di("codex-subscription"),authData:t}),U(),T(),{ok:!0,message:o?"Codex \u8BA2\u9605\u5DF2\u6DFB\u52A0":"Codex subscription added"}}catch(e){return{ok:!1,message:e instanceof Error?e.message:String(e)}}}async function bn(i){let o=io[i.addType]?.[i.zh?"zh":"en"]||i.addType,n=i.addCtx?Number.parseInt(i.addCtx,10):NaN;await eo({name:o,type:i.addType,apiKey:i.addKey,baseUrl:i.addUrl||Fd(i.addType),model:i.addModel||Fo(i.addType),modelContextWindow:Number.isFinite(n)&&n>0?n:void 0,supportedClients:di(i.addType)}),O("provider_added",{provider_type:i.addType,method:"manual"}),U(),T(),await Ji(i),await vi(i),i.screen="providers",i.providerRowIdx=0,i.message=i.zh?"\u5DF2\u6DFB\u52A0\u670D\u52A1\u5546":"Provider added"}async function Me(i){i.screen="client-versions",i.message="",i.clientVersionsClientIdx=Math.max(0,Math.min(i.clientVersionsClientIdx,i.clients.length-1)),await lo(i)}async function lo(i){let o=i.clients[i.clientVersionsClientIdx];if(!o)return;i.clientVersionsLoading=!0,i.clientVersionsError=void 0,i.clientVersions=[],i.clientVersionsIdx=0;try{let{listAvailableVersions:n,getInstalledVersion:d}=await Promise.resolve().then(() => (Un(),A0)),[e,u]=await Promise.all([n(o.client.package),d(o.client)]);i.clientVersions=e.map((r)=>({...r,isCurrent:r.version===u}))}catch(n){i.clientVersionsError=n instanceof Error?n.message:String(n)}finally{i.clientVersionsLoading=!1}}async function Ge(i,o){let n=i.clients[i.clientVersionsClientIdx];if(!n)return;let{installAtVersion:d}=await Promise.resolve().then(() => (Un(),A0));await d(n.client,o),i.message=i.zh?`\u5DF2\u5207\u6362\u5230 ${o}`:`Switched to ${o}`,await lo(i)}async function bd(i){let{TAKO_DIR:o}=await Promise.resolve().then(() => (C(),Nn)),{join:n}=await import("path"),d=n(o,".key-prompt.json"),e=i==="never"?{never:!0}:{dismissed:new Date().toISOString().slice(0,10)};await Bun.write(d,JSON.stringify(e))}async function x1(){let{TAKO_DIR:i,hasApiKey:o}=await Promise.resolve().then(() => (C(),Nn));if(await o())return!1;let{join:n}=await import("path"),d=n(i,".key-prompt.json"),e={};try{e=await Bun.file(d).json()}catch{e={}}if(e.never)return!1;let u=new Date().toISOString().slice(0,10);if(e.dismissed===u)return!1;return!0}var Ao=N(()=>{ai();Si();xi();fe();md();Zi();sd()});t0();Ci();bo();C();H();xi();x0();import{join as wi}from"path";function Ou(i,o){return["@echo off",'set "TAKO_WINDOWS_HANDOFF_FILE=%TEMP%\\tako-handoff-%RANDOM%-%RANDOM%.ps1"','if exist "%TAKO_WINDOWS_HANDOFF_FILE%" del "%TAKO_WINDOWS_HANDOFF_FILE%" >nul 2>nul',`"${i}" "${o}" %*`,'set "TAKO_EXIT_CODE=%ERRORLEVEL%"','if not exist "%TAKO_WINDOWS_HANDOFF_FILE%" exit /b %TAKO_EXIT_CODE%','powershell.exe -NoProfile -ExecutionPolicy Bypass -File "%TAKO_WINDOWS_HANDOFF_FILE%"',"exit /b %ERRORLEVEL%",""].join(`\r
527
- `)}function Ru(i,o){return['$env:TAKO_WINDOWS_HANDOFF_FILE = Join-Path ([System.IO.Path]::GetTempPath()) ("tako-handoff-{0}-{1}.ps1" -f $PID, [System.Guid]::NewGuid().ToString("N"))',"Remove-Item -LiteralPath $env:TAKO_WINDOWS_HANDOFF_FILE -Force -ErrorAction SilentlyContinue",`& "${i}" "${o}" @args`,"$code = $LASTEXITCODE","if (Test-Path -LiteralPath $env:TAKO_WINDOWS_HANDOFF_FILE) {"," powershell.exe -NoProfile -ExecutionPolicy Bypass -File $env:TAKO_WINDOWS_HANDOFF_FILE"," exit $LASTEXITCODE","}","exit $code",""].join(`\r
528
- `)}var w0="tako-cli",on="0.3.18";function rp(){return[A,"update",w0,"--latest"]}function tp(){return[A,"add",`${w0}@latest`]}function cp(i,o){let n=i.split(".").map(Number),d=o.split(".").map(Number);for(let e=0;e<3;e++){let u=n[e]||0,r=d[e]||0;if(u>r)return 1;if(u<r)return-1}return 0}async function ap(){try{let i=await ui(),o=await fetch(`${i}/${w0}/latest`,{signal:AbortSignal.timeout(5000)});if(!o.ok)return null;return(await o.json()).version||null}catch{return null}}async function pp(){let i=await ap();if(!i)return{hasUpdate:!1,currentVersion:on};return{hasUpdate:cp(i,on)>0,latestVersion:i,currentVersion:on}}async function Bu(){let i=await import("fs/promises"),o=wi(Q,"bin"),n=wi(o,"tako"),d=wi(mi,"node_modules/tako-cli/dist/index.js");if(await i.mkdir(o,{recursive:!0}),process.platform==="win32")await i.writeFile(wi(o,"tako.cmd"),Ou(A,d)),await i.writeFile(wi(o,"tako.ps1"),Ru(A,d));else{let u=`#!/bin/bash
529
- exec "${A}" "${d}" "$@"
530
- `;await i.writeFile(n,u,{mode:493})}}async function lp(i){let o=oo(),n=`\u6B63\u5728\u66F4\u65B0\u5230 v${i}`;o.start(n);try{let d=await ui(),e=await import("fs/promises");await e.mkdir(mi,{recursive:!0});let u=wi(mi,"package.json");try{await e.access(u)}catch{await e.writeFile(u,JSON.stringify({name:"tako-local",private:!0},null,2))}let r=Bun.spawn(rp(),{cwd:mi,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:d}}),t=await Jn(r,n,(c)=>o.update(c));if(await r.exited,r.exitCode===0)return await Bu(),O("cli_updated",{from_version:on,to_version:i}),o.stop(`\u66F4\u65B0\u6210\u529F\uFF01\u5DF2\u66F4\u65B0\u5230 v${i}`),!0;else return o.stop(),L.warn(`\u66F4\u65B0\u5931\u8D25: ${Wo(t)}`),!1}catch(d){return o.stop(),L.warn(`\u66F4\u65B0\u5931\u8D25: ${Wo(d instanceof Error?d.message:void 0)}`),!1}}async function mp(){let i=await import("fs/promises"),o=wi(mi,"bun.lock");try{await i.unlink(o)}catch{}}async function xp(){let i=await import("fs/promises");try{let o=await ui();await i.mkdir(mi,{recursive:!0});let n=wi(mi,"package.json");try{await i.access(n)}catch{await i.writeFile(n,JSON.stringify({name:"tako-local",private:!0},null,2))}await mp();let d=Bun.spawn(tp(),{cwd:mi,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:o}});return await d.exited,d.exitCode===0}catch{return!1}}async function wp(){let i=await import("fs/promises"),o=wi(Q,"bin"),n=wi(o,"tako"),d=wi(mi,"node_modules/tako-cli/dist/index.js");try{let e=await i.readFile(n,"utf-8");if(e.includes("bun run tako-cli")||e.includes("run tako-cli")){L.info(g("updater.migrating"));let u=!1;try{await i.access(d),u=!0}catch{u=!1}if(!u){let r=oo();if(r.start(g("updater.installingLocally")),!await xp())return r.stop(g("updater.migrationFailed")),!1;r.stop(g("updater.installComplete"))}return await Bu(),!0}}catch{}return!1}async function nn(){try{if(await wp())L.info(g("updater.migrationComplete")),process.exit(0);let o=await pp();if(o.hasUpdate&&o.latestVersion){if(L.warn(g("updater.newVersionAvailable",{version:o.latestVersion,current:on})),await lp(o.latestVersion))L.info(g("updater.pleaseRestart")),process.exit(0)}}catch{}}E();dn();ai();C();An();Ci();H();xi();E();C();dn();import{writeFile as Gp}from"fs/promises";var z0="TAKO_WINDOWS_HANDOFF_FILE",k0=new Uint8Array([239,187,191]);function en(i){return`'${i.replace(/'/g,"''")}'`}function ir(i){if(i.length===0)return"@()";return`@(${i.map(en).join(", ")})`}function Sp(i){let o=new TextEncoder().encode(i),n=new Uint8Array(k0.length+o.length);return n.set(k0,0),n.set(o,k0.length),n}async function Yn(i,o){await Gp(i,Sp(Pp(o)))}function Pp(i){let[o,...n]=i.command;if(!o)throw Error("handoff command is empty");let d=["$ErrorActionPreference = 'Stop'","$scriptPath = $PSCommandPath"];for(let[u,r]of Object.entries(i.env??{})){if(r===void 0)continue;if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(u))continue;d.push(`$env:${u} = ${en(String(r))}`)}d.push(`Set-Location -LiteralPath ${en(i.cwd)}`,"$esc = [char]27",'try { [Console]::Write("$esc[2J$esc[3J$esc[H") } catch {}',`$argv = ${ir(n)}`,"$code = 0","try {",` & ${en(o)} @argv`," $code = if ($null -ne $LASTEXITCODE) { $LASTEXITCODE } else { 0 }","} finally {"," Remove-Item -LiteralPath $scriptPath -Force -ErrorAction SilentlyContinue");let e=i.relaunchCommand??[];if(e.length>0){let[u,...r]=e;d.push(` $relaunchArgv = ${ir(r)}`,` & ${en(u)} @relaunchArgv`," $code = if ($null -ne $LASTEXITCODE) { $LASTEXITCODE } else { $code }")}return d.push("}","exit $code",""),d.join(`\r
531
- `)}import{join as or}from"path";async function nr(i){try{if(process.stdin.removeAllListeners(),!i&&process.stdin.isTTY)process.stdin.setRawMode(!1);process.stdin.pause()}catch{}if(!i&&process.stdout.isTTY)try{process.stdout.write("\x1B[?1000l\x1B[?1002l\x1B[?1003l\x1B[?1005l\x1B[?1006l\x1B[?1015l\x1B[?1049l\x1B[?2004l\x1B[0m\x1B[?25h")}catch{}await new Promise((o)=>setTimeout(o,30));try{if(process.stdin.removeAllListeners(),!i&&process.stdin.isTTY)process.stdin.setRawMode(!1);process.stdin.pause()}catch{}}async function dr(i,o){try{let n=o?.projectPath||process.cwd(),d=o?.providerContext,e=process.platform==="win32";if(!d)return{success:!1,error:"\u672A\u9009\u62E9\u670D\u52A1\u5546"};let u=await xo(i);if(!u)u=wo(i);if(!await Bun.file(u).exists()){let{execSync:l}=await import("child_process"),x=e?`where ${i.command}.exe 2>nul || where ${i.command}.cmd 2>nul || where ${i.command}`:`which ${i.command}`;try{let w=l(x,{encoding:"utf8"}).split(`
532
- `).map((s)=>s.trim().replace(/\r$/,"")).filter(Boolean),y=e?w.find((s)=>s.toLowerCase().endsWith(".exe"))??w.find((s)=>s.toLowerCase().endsWith(".cmd"))??w[0]:w[0];if(y)u=y;else return{success:!1,error:`\u627E\u4E0D\u5230 ${i.command}\uFF0C\u8BF7\u8FD0\u884C tako install ${i.id}`}}catch{return{success:!1,error:`\u627E\u4E0D\u5230 ${i.command}\uFF0C\u8BF7\u8FD0\u884C tako install ${i.id}`}}}let c={...i.getEnvVars(d),...o?.envVars??{}},a={...process.env,...c},p;if(i.runtime==="native")if(e&&u.toLowerCase().endsWith(".js"))p=[await Wi(),u];else p=[u];else p=[await Wi(),u];if(o?.args&&o.args.length>0)p=[...p,...o.args];if(e&&o?.handoffOnWindows){let l=process.env[z0];if(l)return await Yn(l,{command:p,cwd:n,env:c}),{success:!0}}if(e&&o?.relaunchTakoOnWindows){let l=process.env[z0];if(l){let x=[or(Q,"bin","tako.cmd")];return await Yn(l,{command:p,cwd:n,env:c,relaunchCommand:x}),{success:!0}}}if(e){let l=await import("fs/promises"),{tmpdir:x}=await import("os"),w=or(x(),`tako-handoff-${process.pid}-${Date.now()}.ps1`);await Yn(w,{command:p,cwd:n}),await nr(e);try{let s=await Bun.spawn(["powershell.exe","-NoProfile","-ExecutionPolicy","Bypass","-File",w],{env:a,stdio:["inherit","inherit","inherit"],cwd:n}).exited;return{success:s===0,exitCode:s}}catch(y){return await l.rm(w,{force:!0}).catch(()=>{}),{success:!1,error:y instanceof Error?y.message:"PowerShell handoff \u542F\u52A8\u5931\u8D25"}}}if(await nr(e),process.stdout.isTTY)try{process.stdout.write("\x1B[2J\x1B[3J\x1B[H")}catch{}try{Bun.spawnSync(p,{env:a,stdio:["inherit","inherit","inherit"],cwd:n})}catch{await Bun.spawn(p,{env:a,stdio:["inherit","inherit","inherit"],cwd:n}).exited}return{success:!0}}catch(n){return{success:!1,error:n instanceof Error?n.message:"\u542F\u52A8\u5931\u8D25"}}}M0();async function Jp(i,o){if(o?.providerContext)return o.providerContext;let n=await ei();if(n){let d=await Qi(i.id);if(d.some((u)=>u.id===n.id))return _(n);if(d.length>0)return _(d[0])}return null}async function Hn(i,o){try{let n=o?.projectPath||process.cwd();if(o?.projectPath){if(!await N0(o.projectPath))return{success:!1,error:g("launcher.directoryNotFound",{path:o.projectPath})}}let d=await Eu(i);if(!d.success)return d;let e=await Jp(i,o);if(!e)return{success:!1,error:g("launcher.apiKeyNotConfigured")};let u=[],r={};if(i.setupConfigFiles){let a=await i.setupConfigFiles(e,o?.selectedOptionIds,{forLaunch:!0});if(a&&typeof a==="object")u=a.args??[],r=a.envVars??{}}await _u(n,i.id,o?.selectedOptionIds);try{let a=(o?.selectedOptionIds??[]).filter((p)=>p.startsWith("model-"));await tr(a)}catch{}let c=(await z()).installedClients[i.id]?.version;return O("client_launched",{client_id:i.id,client_version:c,project_hash:Cu(n),is_recent_project:!!o?.projectPath}),L.info(g("launcher.starting",{client:i.name})),await dr(i,{...o,args:[...u,...o?.args??[]],envVars:{...r,...o?.envVars??{}},providerContext:e})}catch(n){return{success:!1,error:n instanceof Error?n.message:"Launch failed"}}}H();xi();import{homedir as Ap}from"os";var S={black:"\x1B[30m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",cyan:"\x1B[36m",white:"\x1B[37m",brightBlack:"\x1B[90m",brightRed:"\x1B[91m",brightGreen:"\x1B[92m",brightYellow:"\x1B[93m",brightBlue:"\x1B[94m",brightMagenta:"\x1B[95m",brightCyan:"\x1B[96m",brightWhite:"\x1B[97m"};var I={bold:"\x1B[1m",dim:"\x1B[2m",italic:"\x1B[3m",underline:"\x1B[4m",reset:"\x1B[0m"};var q={directory:{icon:S.brightYellow,text:S.brightGreen},git:{icon:S.brightBlue,text:S.brightBlue,clean:S.brightGreen,dirty:S.brightYellow,conflict:S.brightRed},model:{icon:S.brightCyan,text:S.brightCyan},version:{icon:S.brightWhite,text:S.brightBlack},outputStyle:{icon:S.brightMagenta,text:S.brightMagenta},context:{icon:S.brightMagenta,low:S.brightGreen,medium:S.brightYellow,high:S.brightRed},todayUsage:{icon:S.brightGreen,text:S.brightGreen},separator:S.brightBlack},Oi={directory:{nerd:"\uF07B",plain:"\uD83D\uDCC1"},git:{nerd:"\uE725",plain:"\uD83C\uDF3F"},model:{nerd:"\uF11B",plain:"\uD83E\uDD16"},version:{nerd:"\uF412",plain:"\uD83D\uDCBE"},outputStyle:{nerd:"\uF12F5",plain:"\uD83C\uDFAF"},context:{nerd:"\uF0E7",plain:"\u26A1"},todayUsage:{nerd:"\uF155",plain:"\uD83D\uDCB0"},gitClean:"\u2713",gitDirty:"\u25CF",gitConflict:"\u26A0",gitAhead:"\u2191",gitBehind:"\u2193"};function Bp(){return!1}function ki(i){let o=Oi[i];if(typeof o==="string")return o;return Bp()?o.nerd:o.plain}class Tn{id="directory";render(i){let o=this.formatPath(i.workspace.current_dir),n=ki("directory");return`${q.directory.icon}${n}${I.reset} ${q.directory.text}${o}${I.reset}`}formatPath(i){let o=Ap();if(i===o)return"~";if(i.startsWith(o+"/"))return"~"+i.slice(o.length);return i}}class Xn{id="git";async render(i){let o=i.workspace.current_dir;if(!await this.isGitRepository(o))return null;let d=await this.getBranch(o);if(!d)return null;let{status:e,statusColor:u}=await this.getStatus(o),{ahead:r,behind:t}=await this.getAheadBehind(o),c=ki("git"),a=`${q.git.icon}${c}${I.reset} ${q.git.text}${d}${I.reset}`;if(a+=` ${u}${e}${I.reset}`,r>0)a+=` ${q.git.clean}${Oi.gitAhead}${r}${I.reset}`;if(t>0)a+=` ${q.git.dirty}${Oi.gitBehind}${t}${I.reset}`;return a}async isGitRepository(i){try{return await Bun.spawn(["git","rev-parse","--git-dir"],{cwd:i,stdout:"pipe",stderr:"pipe"}).exited===0}catch{return!1}}async getBranch(i){try{let o=Bun.spawn(["git","branch","--show-current"],{cwd:i,stdout:"pipe",stderr:"pipe"}),n=await new Response(o.stdout).text();if(await o.exited===0&&n.trim())return n.trim();let e=Bun.spawn(["git","rev-parse","--short","HEAD"],{cwd:i,stdout:"pipe",stderr:"pipe"}),u=await new Response(e.stdout).text();if(await e.exited===0&&u.trim())return`detached:${u.trim()}`;return null}catch{return null}}async getStatus(i){try{let o=Bun.spawn(["git","status","--porcelain"],{cwd:i,stdout:"pipe",stderr:"pipe"}),n=await new Response(o.stdout).text();if(await o.exited!==0)return{status:Oi.gitClean,statusColor:q.git.clean};let e=n.trim();if(!e)return{status:Oi.gitClean,statusColor:q.git.clean};if(e.includes("UU")||e.includes("AA")||e.includes("DD"))return{status:Oi.gitConflict,statusColor:q.git.conflict};return{status:Oi.gitDirty,statusColor:q.git.dirty}}catch{return{status:Oi.gitClean,statusColor:q.git.clean}}}async getAheadBehind(i){try{let o=Bun.spawn(["git","rev-list","--count","@{u}..HEAD"],{cwd:i,stdout:"pipe",stderr:"pipe"}),n=await new Response(o.stdout).text(),e=await o.exited===0?parseInt(n.trim(),10)||0:0,u=Bun.spawn(["git","rev-list","--count","HEAD..@{u}"],{cwd:i,stdout:"pipe",stderr:"pipe"}),r=await new Response(u.stdout).text(),c=await u.exited===0?parseInt(r.trim(),10)||0:0;return{ahead:e,behind:c}}catch{return{ahead:0,behind:0}}}}var Yp={"claude-opus-4-5-20251101":"Opus 4.5","claude-opus-4-5":"Opus 4.5","claude-sonnet-4-5-20250514":"Sonnet 4.5","claude-sonnet-4-5":"Sonnet 4.5","claude-sonnet-4-20250514":"Sonnet 4","claude-sonnet-4":"Sonnet 4","claude-sonnet-3-5-20241022":"Sonnet 3.5","claude-3-5-sonnet-20241022":"Sonnet 3.5","claude-3-5-sonnet":"Sonnet 3.5","claude-haiku-3-5-20241022":"Haiku 3.5","claude-3-5-haiku-20241022":"Haiku 3.5","claude-3-5-haiku":"Haiku 3.5"};class Kn{id="model";render(i){let o=i.model.id,n=Yp[o]||this.simplifyModelName(i.model.display_name),d=ki("model");return`${q.model.icon}${d}${I.reset} ${q.model.text}${n}${I.reset}`}simplifyModelName(i){let o=i.replace(/^Claude\s+/i,"");return o=o.replace(/-\d{8}$/,""),o}}fo();var Hp=200000;class zi{id="context";static cache=null;static CACHE_TTL=5000;async render(i){let o=await this.getTokensWithCache(i.transcript_path),d=Bd(i.model.id)?.contextWindow??Hp,e=Math.round((o??0)/d*100),u=Math.max(0,100-e),r=ki("context"),t=u<=20?S.brightRed:u<=50?S.brightYellow:S.brightGreen;return`${q.context.icon}${r}${I.reset} ${t}${u}%${I.reset}`}async getTokensWithCache(i){let o=Date.now();if(zi.cache&&zi.cache.path===i&&o-zi.cache.timestamp<zi.CACHE_TTL)return zi.cache.tokens;let n=await this.parseTranscriptTokens(i);return zi.cache={path:i,tokens:n,timestamp:o},n}async parseTranscriptTokens(i){try{let o=Bun.file(i);if(!await o.exists())return null;let n=await o.text();if(!n.trim())return null;let d=n.split(`
533
- `).filter((e)=>e.trim());for(let e=d.length-1;e>=0;e--)try{let u=JSON.parse(d[e]);if(u.type==="assistant"&&u.message?.usage){let r=u.message.usage;return(r.input_tokens||0)+(r.output_tokens||0)+(r.cache_creation_input_tokens||0)+(r.cache_read_input_tokens||0)}}catch{continue}return null}catch{return null}}}Vn();C();ai();class Zn{id="quota";async render(i){let o=await this.tryRenderOfficial();if(o)return o;return this.renderSessionCost(i)}async tryRenderOfficial(){try{let i=await qi("claude-code")??await ei();if(!i){let n=await Di().catch(()=>"");if(!n)return null;let d=await ro(n);return this.renderTako(d)}let o=await C0(i);if(o.status!=="ok")return null;switch(o.provider){case"tako":return this.renderTako(o);case"claude-subscription":return this.renderClaudeSub(o);case"codex-subscription":return this.renderCodexSub(o);default:return null}}catch{return null}}renderTako(i){if(i.status!=="ok")return null;if(!!(i.primary?.costLimit||i.secondary?.costLimit||i.daily?.costLimit))return this.renderSub(i);let n=i.daily??i.primary??i.secondary;if(!n)return null;let d=n.costUsed??0;return`${this.icon()} ${S.brightGreen}Day:${this.fmtCost(d)}${I.reset}`}renderSub(i){let o=(d,e,u)=>{if(d&&d>=1440)return`${Math.round(d/1440)}d`;if(d)return`${Math.round(d/60)}h`;return u?`${u}d`:`${e}h`},n=[];if(i.primary)n.push(this.remainChunk(o(i.primary.windowMinutes,5),i.primary.usedPct));if(i.secondary)n.push(this.remainChunk(o(i.secondary.windowMinutes,24,7),i.secondary.usedPct));if(i.modelLimits?.opus)n.push(this.remainChunk("opus",i.modelLimits.opus.usedPct));if(!n.length)return null;return`${this.icon()} ${n.join(`${I.dim} \xB7 ${I.reset}`)}`}renderClaudeSub=this.renderSub;renderCodexSub=this.renderSub;pctChunk(i,o){let n=o>=90?S.brightRed:o>=70?S.brightYellow:S.brightGreen;return`${i}:${n}${o}%${I.reset}`}remainChunk(i,o){let n=Math.max(0,Math.min(100,100-Math.round(o))),d=n<=10?S.brightRed:n<=30?S.brightYellow:S.brightGreen;return`${i} \u5269 ${d}${n}%${I.reset}`}renderSessionCost(i){let o=i.cost?.total_cost_usd;if(o==null||o<=0)return null;return`${this.icon()} ${S.brightGreen}Session:${this.fmtCost(o)}${I.reset}`}icon(){return`${q.todayUsage.icon}${ki("todayUsage")}${I.reset}`}fmtCost(i){if(i>=100)return`$${Math.round(i)}`;if(i>=10)return`$${i.toFixed(1)}`;return`$${i.toFixed(2)}`}}class Q0{separator=`${q.separator} \u2502 ${I.reset}`;render(i){let o=["directory","git","model","context","quota"],n=[];for(let d of o){let e=i.get(d);if(e)n.push(e)}return n.join(this.separator)}}import{join as to,dirname as el}from"path";import{homedir as q0}from"os";import{mkdir as ul}from"fs/promises";var vr=to(q0(),".tako"),rl=to(vr,"cli"),tl=to(vr,"bin",process.platform==="win32"?"tako.cmd":"tako");function cl(){if(process.platform==="win32")return to(process.env.APPDATA||to(q0(),"AppData","Roaming"),"claude","settings.json");return to(q0(),".claude","settings.json")}var al=process.platform==="win32",pl="0.1.48";function ll(i,o){let n=i.split(".").map(Number),d=o.split(".").map(Number),e=Math.max(n.length,d.length);for(let u=0;u<e;u++){let r=n[u]||0,t=d[u]||0;if(r!==t)return r-t}return 0}async function ml(){let i=to(rl,"node_modules","tako-cli","package.json");try{let o=Bun.file(i);if(!await o.exists())return null;return(await o.json()).version||null}catch{return null}}async function xl(){let i=await ml();if(!i)return!1;return ll(i,pl)>=0}function wl(){return tl}function yl(){return`"${sl(wl())}" statusline`}function sl(i){if(al)return i.replace(/\\/g,"/");return i}async function O0(){if(!await xl())return;let o=cl(),n={};try{let u=Bun.file(o);if(await u.exists())n=await u.json()}catch{}let d={type:"command",command:yl(),padding:0},e=typeof n.statusLine==="object"&&n.statusLine!==null?n.statusLine.command:null;if(typeof e==="string"&&e.includes("tako statusline"))return;n.statusLine=d,await ul(el(o),{recursive:!0}),await Bun.write(o,JSON.stringify(n,null,2))}var fl=[new Tn,new Xn,new Kn,new zi,new Zn];async function vl(i){let o=await Promise.all(fl.map(async(e)=>{try{let u=await e.render(i);return{id:e.id,content:u}}catch{return{id:e.id,content:null}}})),n=new Map;for(let{id:e,content:u}of o)n.set(e,u);return new Q0().render(n)}async function hr(){try{let i=await Bun.stdin.json(),o=await vl(i);console.log(o)}catch{process.exit(0)}}ai();xi();async function Fn(i){let o=await Qi(i);if(o.length===0)return null;let n=await qi(i);if(n)return _(n);if(o.length===1)return _(o[0]);let d=await ei();if(d&&o.some((e)=>e.id===d.id))return _(d);return _(o[0])}async function br(){let i=await _o();if(await Uo(i)>0){for(let n of i)O("provider_added",{provider_type:n.type,method:"auto_detect"});U(),T()}}r0();An();var hl={"claude-code":{optionId:"skip-permissions",flag:"--dangerously-skip-permissions"},codex:{optionId:"bypass-sandbox",flag:"--dangerously-bypass-approvals-and-sandbox"}};async function En(i,o,n,d){let e=o.filter((t)=>t!==n),u=await bl(i,e,d);if(i!=="claude-code")return u?[u,...e]:e;let r=[];if(u)r.push(u);for(let t=0;t<e.length;t++){let c=e[t];if(c==="--model"&&t+1<e.length){r.push(c,vo(e[t+1])),t++;continue}if(c.startsWith("--model=")){let a=c.slice(8);r.push(`--model=${vo(a)}`);continue}r.push(c)}return r}async function bl(i,o,n){let d=hl[i];if(!d)return null;if(o.includes(d.flag))return null;return(await(n?.getLastSelectedOptionIds??Bn)(i)).includes(d.optionId)?d.flag:null}fo();Un();C();var yd="0.3.18";function Mm(){console.log(`
534
- ${g("cli.version",{version:yd})}
524
+ `),1;let d=o.loadConfig??z,e=o.refresh??In,u=o.read??Xi,r=o.now??(()=>Date.now()),t=o.columns??(()=>process.stdout.columns??80),c=await d(),a=Lm(c);if(n.refresh&&a.length>0)await km(a,e);let p=a.map((x)=>Wm(x,u)),l=new Date(r()).toISOString();if(n.json)process.stdout.write(Sm(p,n.refresh,l));else process.stdout.write(Gm(p,t()));return 0}var ct,zm=5;var pt=N(()=>{C();Vd();ct=["openai","claude"]});var xe="0.3.20",sn=22,m,So,Po,xt,wt,Co,Fi;var Io=N(()=>{m={bg:"#17130f",panel:"#211b16",panelMuted:"#2b231c",text:"#ece3d8",muted:"#94897c",border:"#3a3129",orange:"#fb8147",orangeDim:"#c96a3a",cyan:"#8fb8a8",green:"#8fbf7a",yellow:"#e6b45c",red:"#e58f7b",magenta:"#c99bd6",blue:"#88a8d8",gray:"#94897c"},So={"claude-code":{icon:"*",color:m.orange},codex:{icon:"C",color:m.blue},gemini:{icon:"G",color:m.green}},Po={icon:"-",color:m.text},xt=["\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588"," \u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588"," \u2588 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588"," \u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588"," \u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588"].join(`
525
+ `),wt=["\u2580\u2588\u2580 \u2584\u2580\u2588 \u2588\u2584\u2580 \u2588\u2580\u2588"," \u2588 \u2588\u2580\u2588 \u2588 \u2588 \u2588\u2584\u2588"].join(`
526
+ `),Co=["tako","claude-subscription","codex-subscription","anthropic","deepseek","xiaomi","custom"],Fi=[{value:"en",label:"English"},{value:"zh",label:"\u4E2D\u6587"}]});async function yt(i=45){let o=qe(),n=await ir(),d=await ei(),e=Ii()==="zh",u=[...o].sort((c,a)=>{if(c.id===n)return-1;if(a.id===n)return 1;return 0}),r=[];for(let c of u){let a=await ju(c.id,W0,!0),p=process.cwd(),l=[{label:e?"\u5728\u5F53\u524D\u76EE\u5F55\u542F\u52A8":"Launch in current directory",hint:z0(p,i),path:p},...a.map((k)=>({label:z0(k.path,i),hint:or(k.lastLaunchedAt),path:k.path}))],x=await Qi(c.id),y=await qi(c.id)||x.find((k)=>k.id===d?.id)||x[0],s=y?x.findIndex((k)=>k.id===y.id):0,b=zn(c,y),v=new Set(b.map((k)=>k.id)),M=(await Yn(c.id)).filter((k)=>v.has(k));r.push({client:c,projects:l,providers:x,activeProvider:y,activeProvIdx:Math.max(s,0),launchOptions:b,lastSelectedOptionIds:M})}let t={};try{t=await ar()}catch{t={}}return{clients:r,defaultIdx:0,hasProviders:r.some((c)=>c.providers.length>0),pickCounts:t,zh:e}}var st=N(()=>{a0();E();X();S0();An();ai()});function co(i,o){let n=[],d=new Set;for(let e of i){if(!e.group){n.push({kind:"flag",opt:e});continue}if(!d.has(e.group))d.add(e.group),n.push({kind:"group",group:e.group,title:e.group==="model"?o?"\u6A21\u578B":"Model":e.group})}return n.push({kind:"provider",title:o?"\u670D\u52A1\u5546":"Provider"}),n}function Ei(i,o,n){return i.find((d)=>d.group===n&&o.has(d.id))}function we(i){let o=[],n={},d=[];for(let e of i.launchOptions){if(!i.enabled.has(e.id))continue;if(o.push(...e.args),e.envVars)Object.assign(n,e.envVars);d.push(e.id)}return{args:o,envVars:n,selectedOptionIds:d}}function vt(i,o,n){let d=new Set(o.map((a)=>a.id)),e=new Set(o.filter((a)=>a.group==="model").map((a)=>a.id)),u=n?`model-${n}`:void 0,r=new Set,t=!1,c=!1;for(let a of i)if(d.has(a)){if(r.add(a),e.has(a))c=!0}else t=!0;if(!c&&u&&e.has(u))r.add(u),t=!0;return t?r:i}async function ft(){let i=await ht(),o=Ii();return{...i,screen:"launcher",busy:!1,message:"",providers:[],defaultProviderId:void 0,clientBindings:{},providerTabIdx:i.clientIdx,providerRowIdx:0,providerDetailIdx:0,optionPickerGroup:void 0,optionPickerIdx:0,modelPickerMode:"collapsed",scrollOffset:0,scrollScreen:"launcher",providerSelectedId:void 0,providerInputMode:"add-key",addType:"tako",addKey:"",addUrl:"",addModel:"",addCtx:"",statsLoading:!1,apiKeyValue:"",apiKeyStatus:"idle",languageIdx:Math.max(0,Fi.findIndex((n)=>n.value===o)),agentDefaults:{},agentIdx:0,agentDetailFrames:[],agentDetailInput:"",agentDetailStatus:"idle",agentPendingApprovals:[],agentBackend:"claude",agentModel:"",agentName:"",agentField:"backend",keyGuideIdx:0,clientVersions:[],clientVersionsClientIdx:0,clientVersionsIdx:0,clientVersionsLoading:!1}}async function ht(){let i=await yt(48);return{clients:i.clients.map((n)=>({...n,enabled:vt(new Set(n.lastSelectedOptionIds),n.launchOptions,n.activeProvider?.model)})),clientIdx:i.defaultIdx,focus:"tabs",projectIdx:0,optionIdx:0,zh:i.zh,pickCounts:i.pickCounts}}async function fi(i){let o=i.clients[i.clientIdx]?.client.id,n=await ht();i.clients=n.clients,i.zh=n.zh,i.pickCounts=n.pickCounts;let d=o?i.clients.findIndex((e)=>e.client.id===o):-1;i.clientIdx=d>=0?d:0,ye(i)}function ye(i){let o=i.clients[i.clientIdx];if(!o)return;let n=co(o.launchOptions,i.zh);i.projectIdx=Math.max(0,Math.min(i.projectIdx,o.projects.length-1)),i.optionIdx=Math.max(0,Math.min(i.optionIdx,n.length-1))}function vn(i){if(i.focus==="options")i.focus="tabs";i.projectIdx=0,i.optionIdx=0,i.optionPickerGroup=void 0,i.optionPickerIdx=0,i.modelPickerMode="collapsed"}function ao(i,o){if(i.screen="provider-input",i.providerInputMode=o,i.providerRowIdx=0,i.addKey="",o==="add-key")i.addUrl="",i.addModel=Fo(i.addType)||"",i.addCtx=""}var fd=N(()=>{Si();X();st();Io()});async function kt(){try{let i=await Di();if(!i)return{success:!1,error:"\u672A\u627E\u5230 API ID\uFF0C\u8BF7\u91CD\u65B0\u914D\u7F6E Key"};let n=await(await fetch(`${A}/apiStats/api/user-stats`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:i})})).json(),e=await(await fetch(`${A}/apiStats/api/user-model-stats`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:i,period:"daily"})})).json();if(!n.success)return{success:!1,error:n.error||n.message||"\u83B7\u53D6\u7EDF\u8BA1\u5931\u8D25"};let u=(e.data||[]).map((r)=>({model:r.model,requests:r.requests,cost:r.formatted?.total||"$0.00"}));return{success:!0,data:{totalRequests:n.data?.usage?.total?.requests||0,totalCost:n.data?.usage?.total?.formattedCost||"$0.00",todayCost:`$${(n.data?.limits?.currentDailyCost||0).toFixed(2)}`,modelStats:u}}}catch(i){return{success:!1,error:i instanceof Error?i.message:"\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25"}}}function zt(i){return i.toLocaleString("en-US")}var he=N(()=>{C()});var Ot={};ii(Ot,{syncSubscriptionProviderFromLocalAuth:()=>Ge,shouldShowKeyGuide:()=>f1,runSubscriptionAuthCommand:()=>Me,refreshQuota:()=>ge,refreshProviders:()=>Ri,refreshAgentDetail:()=>Bi,openStats:()=>bn,openProviders:()=>po,openClientVersions:()=>Se,openAgents:()=>hi,openAgentDetail:()=>$e,loadClientVersions:()=>lo,installClientVersion:()=>Pe,finishProviderAdd:()=>Ln,dismissKeyGuide:()=>Nd,backToLauncher:()=>Yi});async function ge(i){let o=i.clients[i.clientIdx]?.activeProvider;if(!o){i.quota=void 0,i.quotaKey=void 0;return}let n=`${o.id}:${o.type}`;if(i.quotaKey===n&&i.quota)return;i.quotaKey=n;let{getOfficialQuota:d}=await Promise.resolve().then(() => (Tn(),q0)),e=await d(o);if(i.quotaKey===n)i.quota=e}async function Ri(i){i.providers=await V(),i.defaultProviderId=(await ei())?.id;let o={};for(let n of i.clients)o[n.client.id]=(await qi(n.client.id))?.id;i.clientBindings=o}async function po(i){i.screen="providers",i.message="",i.providerTabIdx=i.clientIdx,i.providerRowIdx=0,await Ri(i)}async function bn(i){i.screen="stats",i.message="",i.statsLoading=!0,i.statsError=void 0;let o=await kt();if(o.success&&o.data)i.statsData=o.data;else i.statsError=o.error||(i.zh?"\u672A\u77E5\u9519\u8BEF":"Unknown error");i.statsLoading=!1}async function hi(i){i.screen="agents",i.message="",i.agentError=void 0;let[o,n]=await Promise.all([cd(),md()]);i.agentSessions=o,i.agentDefaults=n,i.agentIdx=Math.max(0,Math.min(i.agentIdx,o.length-1))}async function Bi(i){let o=i.agentDetailSid;if(!o)return;let[n,d]=await Promise.all([pd(o,200),pn(o)]);if(!n){i.agentError=i.zh?"Session \u4E0D\u5B58\u5728":"Session not found",i.screen="agents",await hi(i);return}i.agentDetailMeta=n.meta,i.agentDetailFrames=n.log,i.agentDetailAlive=n.alive,i.agentPendingApprovals=d}async function $e(i,o){i.screen="agent-detail",i.agentDetailSid=o,i.agentDetailInput="",i.agentDetailStatus="idle",i.agentError=void 0,await Bi(i)}function Yi(i){i.screen="launcher",i.message="",i.apiKeyStatus="idle",i.apiKeyError=void 0}function qt(i){try{if(process.stdin.isTTY)process.stdin.setRawMode(i)}catch{}}function v1(i){return i==="claude"?["claude","auth","login","--claudeai"]:["codex","login"]}async function Me(i){let o=v1(i);qt(!1);try{let n=Bun.spawn(o,{stdin:"inherit",stdout:"inherit",stderr:"inherit"});return await n.exited,{ok:n.exitCode===0,exitCode:n.exitCode}}catch(n){return{ok:!1,error:n instanceof Error?n.message:String(n)}}finally{qt(!1)}}async function Ge(i,o){let{invalidateQuotaCache:n}=await Promise.resolve().then(() => (Tn(),q0)),d=await V();if(i==="claude")try{let e=Bun.spawn(["claude","auth","status"],{stdout:"pipe",stderr:"pipe"}),u=await new Response(e.stdout).text();await e.exited;let r=JSON.parse(u.trim());if(!r.loggedIn||r.authMethod!=="claude.ai")return{ok:!1,message:o?"Claude \u767B\u5F55\u672A\u5B8C\u6210":"Claude login not completed"};let t=r.email||"",c=r.subscriptionType||"pro",a=`Claude ${c.charAt(0).toUpperCase()+c.slice(1)}${t?` (${t})`:""}`,{readClaudeAuth:p}=await Promise.resolve().then(() => (On(),qn)),l=await p(),x=l.credentials||l.oauthAccount?{credentials:l.credentials,oauthAccount:l.oauthAccount}:void 0,w=d.find((y)=>y.type==="claude-subscription"&&(y.email||"")===t);if(w)return await Zi(w.id,{authData:x}),n(w.id,"claude-subscription"),U(),H(),{ok:!0,message:o?"Claude tokens \u5DF2\u66F4\u65B0":"Claude tokens updated"};else return await eo({name:a,type:"claude-subscription",email:t,subscriptionType:c,supportedClients:di("claude-subscription"),authData:x}),U(),H(),{ok:!0,message:o?"Claude \u8BA2\u9605\u5DF2\u6DFB\u52A0":"Claude subscription added"}}catch(e){return{ok:!1,message:e instanceof Error?e.message:String(e)}}else try{let e=await import("fs/promises"),{homedir:u}=await import("os"),{join:r}=await import("path"),t=JSON.parse(await e.readFile(r(u(),".codex","auth.json"),"utf-8"));if(t.auth_mode!=="chatgpt"||!t.tokens?.access_token)return{ok:!1,message:o?"Codex \u767B\u5F55\u672A\u5B8C\u6210":"Codex login not completed"};let c="";try{c=JSON.parse(atob(t.tokens.id_token.split(".")[1])).email||""}catch{}let a=d.find((p)=>p.type==="codex-subscription"&&(p.email||"")===c);if(a)return await Zi(a.id,{authData:t}),n(a.id,"codex-subscription"),U(),H(),{ok:!0,message:o?"Codex tokens \u5DF2\u66F4\u65B0":"Codex tokens updated"};else return await eo({name:c?`Codex Plus (${c})`:"Codex Subscription",type:"codex-subscription",email:c||void 0,supportedClients:di("codex-subscription"),authData:t}),U(),H(),{ok:!0,message:o?"Codex \u8BA2\u9605\u5DF2\u6DFB\u52A0":"Codex subscription added"}}catch(e){return{ok:!1,message:e instanceof Error?e.message:String(e)}}}async function Ln(i){let o=io[i.addType]?.[i.zh?"zh":"en"]||i.addType,n=i.addCtx?Number.parseInt(i.addCtx,10):NaN;await eo({name:o,type:i.addType,apiKey:i.addKey,baseUrl:i.addUrl||_d(i.addType),model:i.addModel||Fo(i.addType),modelContextWindow:Number.isFinite(n)&&n>0?n:void 0,supportedClients:di(i.addType)}),O("provider_added",{provider_type:i.addType,method:"manual"}),U(),H(),await Ri(i),await fi(i),i.screen="providers",i.providerRowIdx=0,i.message=i.zh?"\u5DF2\u6DFB\u52A0\u670D\u52A1\u5546":"Provider added"}async function Se(i){i.screen="client-versions",i.message="",i.clientVersionsClientIdx=Math.max(0,Math.min(i.clientVersionsClientIdx,i.clients.length-1)),await lo(i)}async function lo(i){let o=i.clients[i.clientVersionsClientIdx];if(!o)return;i.clientVersionsLoading=!0,i.clientVersionsError=void 0,i.clientVersions=[],i.clientVersionsIdx=0;try{let{listAvailableVersions:n,getInstalledVersion:d}=await Promise.resolve().then(() => (Dn(),X0)),[e,u]=await Promise.all([n(o.client.package),d(o.client)]);i.clientVersions=e.map((r)=>({...r,isCurrent:r.version===u}))}catch(n){i.clientVersionsError=n instanceof Error?n.message:String(n)}finally{i.clientVersionsLoading=!1}}async function Pe(i,o){let n=i.clients[i.clientVersionsClientIdx];if(!n)return;let{installAtVersion:d}=await Promise.resolve().then(() => (Dn(),X0));await d(n.client,o),i.message=i.zh?`\u5DF2\u5207\u6362\u5230 ${o}`:`Switched to ${o}`,await lo(i)}async function Nd(i){let{TAKO_DIR:o}=await Promise.resolve().then(() => (C(),Wn)),{join:n}=await import("path"),d=n(o,".key-prompt.json"),e=i==="never"?{never:!0}:{dismissed:new Date().toISOString().slice(0,10)};await Bun.write(d,JSON.stringify(e))}async function f1(){let{TAKO_DIR:i,hasApiKey:o}=await Promise.resolve().then(() => (C(),Wn));if(await o())return!1;let{join:n}=await import("path"),d=n(i,".key-prompt.json"),e={};try{e=await Bun.file(d).json()}catch{e={}}if(e.never)return!1;let u=new Date().toISOString().slice(0,10);if(e.dismissed===u)return!1;return!0}var Yo=N(()=>{ai();Si();xi();he();xd();Ti();fd()});a0();Ci();bo();C();X();xi();y0();import{join as wi}from"path";function Ru(i,o){return["@echo off",'set "TAKO_WINDOWS_HANDOFF_FILE=%TEMP%\\tako-handoff-%RANDOM%-%RANDOM%.ps1"','if exist "%TAKO_WINDOWS_HANDOFF_FILE%" del "%TAKO_WINDOWS_HANDOFF_FILE%" >nul 2>nul',`"${i}" "${o}" %*`,'set "TAKO_EXIT_CODE=%ERRORLEVEL%"','if not exist "%TAKO_WINDOWS_HANDOFF_FILE%" exit /b %TAKO_EXIT_CODE%','powershell.exe -NoProfile -ExecutionPolicy Bypass -File "%TAKO_WINDOWS_HANDOFF_FILE%"',"exit /b %ERRORLEVEL%",""].join(`\r
527
+ `)}function Bu(i,o){return['$env:TAKO_WINDOWS_HANDOFF_FILE = Join-Path ([System.IO.Path]::GetTempPath()) ("tako-handoff-{0}-{1}.ps1" -f $PID, [System.Guid]::NewGuid().ToString("N"))',"Remove-Item -LiteralPath $env:TAKO_WINDOWS_HANDOFF_FILE -Force -ErrorAction SilentlyContinue",`& "${i}" "${o}" @args`,"$code = $LASTEXITCODE","if (Test-Path -LiteralPath $env:TAKO_WINDOWS_HANDOFF_FILE) {"," powershell.exe -NoProfile -ExecutionPolicy Bypass -File $env:TAKO_WINDOWS_HANDOFF_FILE"," exit $LASTEXITCODE","}","exit $code",""].join(`\r
528
+ `)}var s0="tako-cli",on="0.3.20";function ap(){return[Y,"update",s0,"--latest"]}function pp(){return[Y,"add",`${s0}@latest`]}function lp(i,o){let n=i.split(".").map(Number),d=o.split(".").map(Number);for(let e=0;e<3;e++){let u=n[e]||0,r=d[e]||0;if(u>r)return 1;if(u<r)return-1}return 0}async function mp(){try{let i=await ui(),o=await fetch(`${i}/${s0}/latest`,{signal:AbortSignal.timeout(5000)});if(!o.ok)return null;return(await o.json()).version||null}catch{return null}}async function xp(){let i=await mp();if(!i)return{hasUpdate:!1,currentVersion:on};return{hasUpdate:lp(i,on)>0,latestVersion:i,currentVersion:on}}async function Au(){let i=await import("fs/promises"),o=wi(Q,"bin"),n=wi(o,"tako"),d=wi(mi,"node_modules/tako-cli/dist/index.js");if(await i.mkdir(o,{recursive:!0}),process.platform==="win32")await i.writeFile(wi(o,"tako.cmd"),Ru(Y,d)),await i.writeFile(wi(o,"tako.ps1"),Bu(Y,d));else{let u=`#!/bin/bash
529
+ exec "${Y}" "${d}" "$@"
530
+ `;await i.writeFile(n,u,{mode:493})}}async function wp(i){let o=oo(),n=`\u6B63\u5728\u66F4\u65B0\u5230 v${i}`;o.start(n);try{let d=await ui(),e=await import("fs/promises");await e.mkdir(mi,{recursive:!0});let u=wi(mi,"package.json");try{await e.access(u)}catch{await e.writeFile(u,JSON.stringify({name:"tako-local",private:!0},null,2))}let r=Bun.spawn(ap(),{cwd:mi,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:d}}),t=await Bn(r,n,(c)=>o.update(c));if(await r.exited,r.exitCode===0)return await Au(),O("cli_updated",{from_version:on,to_version:i}),o.stop(`\u66F4\u65B0\u6210\u529F\uFF01\u5DF2\u66F4\u65B0\u5230 v${i}`),!0;else return o.stop(),L.warn(`\u66F4\u65B0\u5931\u8D25: ${Wo(t)}`),!1}catch(d){return o.stop(),L.warn(`\u66F4\u65B0\u5931\u8D25: ${Wo(d instanceof Error?d.message:void 0)}`),!1}}async function yp(){let i=await import("fs/promises"),o=wi(mi,"bun.lock");try{await i.unlink(o)}catch{}}async function sp(){let i=await import("fs/promises");try{let o=await ui();await i.mkdir(mi,{recursive:!0});let n=wi(mi,"package.json");try{await i.access(n)}catch{await i.writeFile(n,JSON.stringify({name:"tako-local",private:!0},null,2))}await yp();let d=Bun.spawn(pp(),{cwd:mi,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:o}});return await d.exited,d.exitCode===0}catch{return!1}}async function vp(){let i=await import("fs/promises"),o=wi(Q,"bin"),n=wi(o,"tako"),d=wi(mi,"node_modules/tako-cli/dist/index.js");try{let e=await i.readFile(n,"utf-8");if(e.includes("bun run tako-cli")||e.includes("run tako-cli")){L.info(g("updater.migrating"));let u=!1;try{await i.access(d),u=!0}catch{u=!1}if(!u){let r=oo();if(r.start(g("updater.installingLocally")),!await sp())return r.stop(g("updater.migrationFailed")),!1;r.stop(g("updater.installComplete"))}return await Au(),!0}}catch{}return!1}async function nn(){try{if(await vp())L.info(g("updater.migrationComplete")),process.exit(0);let o=await xp();if(o.hasUpdate&&o.latestVersion){if(L.warn(g("updater.newVersionAvailable",{version:o.latestVersion,current:on})),await wp(o.latestVersion))L.info(g("updater.pleaseRestart")),process.exit(0)}}catch{}}E();dn();ai();C();An();Ci();X();xi();E();C();dn();var Cp="\x1B[?1000l\x1B[?1002l\x1B[?1003l\x1B[?1005l\x1B[?1006l\x1B[?1015l\x1B[?1049l\x1B[?2004l\x1B[0m\x1B[?25h";function nr(i=process.stdin){try{if(i.removeAllListeners?.(),i.isTTY&&typeof i.setRawMode==="function")i.setRawMode(!1);i.pause?.()}catch{}}function dr(i=process.stdout){if(!i.isTTY||typeof i.write!=="function")return;try{i.write(Cp)}catch{}}async function en(i={}){let o=i.stdin??process.stdin,n=i.stdout??process.stdout,d=i.delayMs??30;nr(o),dr(n),await new Promise((e)=>setTimeout(e,d)),nr(o),dr(n)}import{writeFile as Ip}from"fs/promises";var $0="TAKO_WINDOWS_HANDOFF_FILE",g0=new Uint8Array([239,187,191]);function un(i){return`'${i.replace(/'/g,"''")}'`}function er(i){if(i.length===0)return"@()";return`@(${i.map(un).join(", ")})`}function Qp(i){let o=new TextEncoder().encode(i),n=new Uint8Array(g0.length+o.length);return n.set(g0,0),n.set(o,g0.length),n}async function Xn(i,o){await Ip(i,Qp(qp(o)))}function qp(i){let[o,...n]=i.command;if(!o)throw Error("handoff command is empty");let d=["$ErrorActionPreference = 'Stop'","$scriptPath = $PSCommandPath"];for(let[u,r]of Object.entries(i.env??{})){if(r===void 0)continue;if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(u))continue;d.push(`$env:${u} = ${un(String(r))}`)}d.push(`Set-Location -LiteralPath ${un(i.cwd)}`,"$esc = [char]27",'try { [Console]::Write("$esc[2J$esc[3J$esc[H") } catch {}',`$argv = ${er(n)}`,"$code = 0","try {",` & ${un(o)} @argv`," $code = if ($null -ne $LASTEXITCODE) { $LASTEXITCODE } else { 0 }","} finally {"," Remove-Item -LiteralPath $scriptPath -Force -ErrorAction SilentlyContinue");let e=i.relaunchCommand??[];if(e.length>0){let[u,...r]=e;d.push(` $relaunchArgv = ${er(r)}`,` & ${un(u)} @relaunchArgv`," $code = if ($null -ne $LASTEXITCODE) { $LASTEXITCODE } else { $code }")}return d.push("}","exit $code",""),d.join(`\r
531
+ `)}import{join as ur}from"path";async function rr(i,o){try{let n=o?.projectPath||process.cwd(),d=o?.providerContext,e=process.platform==="win32";if(!d)return{success:!1,error:"\u672A\u9009\u62E9\u670D\u52A1\u5546"};let u=await xo(i);if(!u)u=wo(i);if(!await Bun.file(u).exists()){let{execSync:l}=await import("child_process"),x=e?`where ${i.command}.exe 2>nul || where ${i.command}.cmd 2>nul || where ${i.command}`:`which ${i.command}`;try{let w=l(x,{encoding:"utf8"}).split(`
532
+ `).map((s)=>s.trim().replace(/\r$/,"")).filter(Boolean),y=e?w.find((s)=>s.toLowerCase().endsWith(".exe"))??w.find((s)=>s.toLowerCase().endsWith(".cmd"))??w[0]:w[0];if(y)u=y;else return{success:!1,error:`\u627E\u4E0D\u5230 ${i.command}\uFF0C\u8BF7\u8FD0\u884C tako install ${i.id}`}}catch{return{success:!1,error:`\u627E\u4E0D\u5230 ${i.command}\uFF0C\u8BF7\u8FD0\u884C tako install ${i.id}`}}}let c={...i.getEnvVars(d),...o?.envVars??{}},a={...process.env,...c},p;if(i.runtime==="native")if(e&&u.toLowerCase().endsWith(".js"))p=[await Wi(),u];else p=[u];else p=[await Wi(),u];if(o?.args&&o.args.length>0)p=[...p,...o.args];if(e&&o?.handoffOnWindows){let l=process.env[$0];if(l)return await en(),await Xn(l,{command:p,cwd:n,env:c}),{success:!0}}if(e&&o?.relaunchTakoOnWindows){let l=process.env[$0];if(l){let x=[process.env.TAKO_WINDOWS_RELAUNCH_COMMAND||ur(Q,"bin","tako.cmd")];return await en(),await Xn(l,{command:p,cwd:n,env:c,relaunchCommand:x}),{success:!0}}}if(e){let l=await import("fs/promises"),{tmpdir:x}=await import("os"),w=ur(x(),`tako-handoff-${process.pid}-${Date.now()}.ps1`);await Xn(w,{command:p,cwd:n}),await en();try{let s=await Bun.spawn(["powershell.exe","-NoProfile","-ExecutionPolicy","Bypass","-File",w],{env:a,stdio:["inherit","inherit","inherit"],cwd:n}).exited;return{success:s===0,exitCode:s}}catch(y){return await l.rm(w,{force:!0}).catch(()=>{}),{success:!1,error:y instanceof Error?y.message:"PowerShell handoff \u542F\u52A8\u5931\u8D25"}}}if(await en(),process.stdout.isTTY)try{process.stdout.write("\x1B[2J\x1B[3J\x1B[H")}catch{}try{Bun.spawnSync(p,{env:a,stdio:["inherit","inherit","inherit"],cwd:n})}catch{await Bun.spawn(p,{env:a,stdio:["inherit","inherit","inherit"],cwd:n}).exited}return{success:!0}}catch(n){return{success:!1,error:n instanceof Error?n.message:"\u542F\u52A8\u5931\u8D25"}}}S0();async function Xp(i,o){if(o?.providerContext)return o.providerContext;let n=await ei();if(n){let d=await Qi(i.id);if(d.some((u)=>u.id===n.id))return _(n);if(d.length>0)return _(d[0])}return null}async function Hn(i,o){try{let n=o?.projectPath||process.cwd();if(o?.projectPath){if(!await k0(o.projectPath))return{success:!1,error:g("launcher.directoryNotFound",{path:o.projectPath})}}let d=await Uu(i);if(!d.success)return d;let e=await Xp(i,o);if(!e)return{success:!1,error:g("launcher.apiKeyNotConfigured")};let u=[],r={};if(i.setupConfigFiles){let a=await i.setupConfigFiles(e,o?.selectedOptionIds,{forLaunch:!0});if(a&&typeof a==="object")u=a.args??[],r=a.envVars??{}}await Du(n,i.id,o?.selectedOptionIds);try{let a=(o?.selectedOptionIds??[]).filter((p)=>p.startsWith("model-"));await pr(a)}catch{}let c=(await z()).installedClients[i.id]?.version;return O("client_launched",{client_id:i.id,client_version:c,project_hash:Qu(n),is_recent_project:!!o?.projectPath}),L.info(g("launcher.starting",{client:i.name})),await rr(i,{...o,args:[...u,...o?.args??[]],envVars:{...r,...o?.envVars??{}},providerContext:e})}catch(n){return{success:!1,error:n instanceof Error?n.message:"Launch failed"}}}X();xi();import{homedir as Zp}from"os";var S={black:"\x1B[30m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",cyan:"\x1B[36m",white:"\x1B[37m",brightBlack:"\x1B[90m",brightRed:"\x1B[91m",brightGreen:"\x1B[92m",brightYellow:"\x1B[93m",brightBlue:"\x1B[94m",brightMagenta:"\x1B[95m",brightCyan:"\x1B[96m",brightWhite:"\x1B[97m"};var I={bold:"\x1B[1m",dim:"\x1B[2m",italic:"\x1B[3m",underline:"\x1B[4m",reset:"\x1B[0m"};var q={directory:{icon:S.brightYellow,text:S.brightGreen},git:{icon:S.brightBlue,text:S.brightBlue,clean:S.brightGreen,dirty:S.brightYellow,conflict:S.brightRed},model:{icon:S.brightCyan,text:S.brightCyan},version:{icon:S.brightWhite,text:S.brightBlack},outputStyle:{icon:S.brightMagenta,text:S.brightMagenta},context:{icon:S.brightMagenta,low:S.brightGreen,medium:S.brightYellow,high:S.brightRed},todayUsage:{icon:S.brightGreen,text:S.brightGreen},separator:S.brightBlack},Oi={directory:{nerd:"\uF07B",plain:"\uD83D\uDCC1"},git:{nerd:"\uE725",plain:"\uD83C\uDF3F"},model:{nerd:"\uF11B",plain:"\uD83E\uDD16"},version:{nerd:"\uF412",plain:"\uD83D\uDCBE"},outputStyle:{nerd:"\uF12F5",plain:"\uD83C\uDFAF"},context:{nerd:"\uF0E7",plain:"\u26A1"},todayUsage:{nerd:"\uF155",plain:"\uD83D\uDCB0"},gitClean:"\u2713",gitDirty:"\u25CF",gitConflict:"\u26A0",gitAhead:"\u2191",gitBehind:"\u2193"};function Hp(){return!1}function ki(i){let o=Oi[i];if(typeof o==="string")return o;return Hp()?o.nerd:o.plain}class Zn{id="directory";render(i){let o=this.formatPath(i.workspace.current_dir),n=ki("directory");return`${q.directory.icon}${n}${I.reset} ${q.directory.text}${o}${I.reset}`}formatPath(i){let o=Zp();if(i===o)return"~";if(i.startsWith(o+"/"))return"~"+i.slice(o.length);return i}}class Kn{id="git";async render(i){let o=i.workspace.current_dir;if(!await this.isGitRepository(o))return null;let d=await this.getBranch(o);if(!d)return null;let{status:e,statusColor:u}=await this.getStatus(o),{ahead:r,behind:t}=await this.getAheadBehind(o),c=ki("git"),a=`${q.git.icon}${c}${I.reset} ${q.git.text}${d}${I.reset}`;if(a+=` ${u}${e}${I.reset}`,r>0)a+=` ${q.git.clean}${Oi.gitAhead}${r}${I.reset}`;if(t>0)a+=` ${q.git.dirty}${Oi.gitBehind}${t}${I.reset}`;return a}async isGitRepository(i){try{return await Bun.spawn(["git","rev-parse","--git-dir"],{cwd:i,stdout:"pipe",stderr:"pipe"}).exited===0}catch{return!1}}async getBranch(i){try{let o=Bun.spawn(["git","branch","--show-current"],{cwd:i,stdout:"pipe",stderr:"pipe"}),n=await new Response(o.stdout).text();if(await o.exited===0&&n.trim())return n.trim();let e=Bun.spawn(["git","rev-parse","--short","HEAD"],{cwd:i,stdout:"pipe",stderr:"pipe"}),u=await new Response(e.stdout).text();if(await e.exited===0&&u.trim())return`detached:${u.trim()}`;return null}catch{return null}}async getStatus(i){try{let o=Bun.spawn(["git","status","--porcelain"],{cwd:i,stdout:"pipe",stderr:"pipe"}),n=await new Response(o.stdout).text();if(await o.exited!==0)return{status:Oi.gitClean,statusColor:q.git.clean};let e=n.trim();if(!e)return{status:Oi.gitClean,statusColor:q.git.clean};if(e.includes("UU")||e.includes("AA")||e.includes("DD"))return{status:Oi.gitConflict,statusColor:q.git.conflict};return{status:Oi.gitDirty,statusColor:q.git.dirty}}catch{return{status:Oi.gitClean,statusColor:q.git.clean}}}async getAheadBehind(i){try{let o=Bun.spawn(["git","rev-list","--count","@{u}..HEAD"],{cwd:i,stdout:"pipe",stderr:"pipe"}),n=await new Response(o.stdout).text(),e=await o.exited===0?parseInt(n.trim(),10)||0:0,u=Bun.spawn(["git","rev-list","--count","HEAD..@{u}"],{cwd:i,stdout:"pipe",stderr:"pipe"}),r=await new Response(u.stdout).text(),c=await u.exited===0?parseInt(r.trim(),10)||0:0;return{ahead:e,behind:c}}catch{return{ahead:0,behind:0}}}}var Kp={"claude-opus-4-5-20251101":"Opus 4.5","claude-opus-4-5":"Opus 4.5","claude-sonnet-4-5-20250514":"Sonnet 4.5","claude-sonnet-4-5":"Sonnet 4.5","claude-sonnet-4-20250514":"Sonnet 4","claude-sonnet-4":"Sonnet 4","claude-sonnet-3-5-20241022":"Sonnet 3.5","claude-3-5-sonnet-20241022":"Sonnet 3.5","claude-3-5-sonnet":"Sonnet 3.5","claude-haiku-3-5-20241022":"Haiku 3.5","claude-3-5-haiku-20241022":"Haiku 3.5","claude-3-5-haiku":"Haiku 3.5"};class Vn{id="model";render(i){let o=i.model.id,n=Kp[o]||this.simplifyModelName(i.model.display_name),d=ki("model");return`${q.model.icon}${d}${I.reset} ${q.model.text}${n}${I.reset}`}simplifyModelName(i){let o=i.replace(/^Claude\s+/i,"");return o=o.replace(/-\d{8}$/,""),o}}vo();var Vp=200000;class zi{id="context";static cache=null;static CACHE_TTL=5000;async render(i){let o=await this.getTokensWithCache(i.transcript_path),d=Ad(i.model.id)?.contextWindow??Vp,e=Math.round((o??0)/d*100),u=Math.max(0,100-e),r=ki("context"),t=u<=20?S.brightRed:u<=50?S.brightYellow:S.brightGreen;return`${q.context.icon}${r}${I.reset} ${t}${u}%${I.reset}`}async getTokensWithCache(i){let o=Date.now();if(zi.cache&&zi.cache.path===i&&o-zi.cache.timestamp<zi.CACHE_TTL)return zi.cache.tokens;let n=await this.parseTranscriptTokens(i);return zi.cache={path:i,tokens:n,timestamp:o},n}async parseTranscriptTokens(i){try{let o=Bun.file(i);if(!await o.exists())return null;let n=await o.text();if(!n.trim())return null;let d=n.split(`
533
+ `).filter((e)=>e.trim());for(let e=d.length-1;e>=0;e--)try{let u=JSON.parse(d[e]);if(u.type==="assistant"&&u.message?.usage){let r=u.message.usage;return(r.input_tokens||0)+(r.output_tokens||0)+(r.cache_creation_input_tokens||0)+(r.cache_read_input_tokens||0)}}catch{continue}return null}catch{return null}}}Tn();C();ai();class Fn{id="quota";async render(i){let o=await this.tryRenderOfficial();if(o)return o;return this.renderSessionCost(i)}async tryRenderOfficial(){try{let i=await qi("claude-code")??await ei();if(!i){let n=await Di().catch(()=>"");if(!n)return null;let d=await ro(n);return this.renderTako(d)}let o=await Q0(i);if(o.status!=="ok")return null;switch(o.provider){case"tako":return this.renderTako(o);case"claude-subscription":return this.renderClaudeSub(o);case"codex-subscription":return this.renderCodexSub(o);default:return null}}catch{return null}}renderTako(i){if(i.status!=="ok")return null;if(!!(i.primary?.costLimit||i.secondary?.costLimit||i.daily?.costLimit))return this.renderSub(i);let n=i.daily??i.primary??i.secondary;if(!n)return null;let d=n.costUsed??0;return`${this.icon()} ${S.brightGreen}Day:${this.fmtCost(d)}${I.reset}`}renderSub(i){let o=(d,e,u)=>{if(d&&d>=1440)return`${Math.round(d/1440)}d`;if(d)return`${Math.round(d/60)}h`;return u?`${u}d`:`${e}h`},n=[];if(i.primary)n.push(this.remainChunk(o(i.primary.windowMinutes,5),i.primary.usedPct));if(i.secondary)n.push(this.remainChunk(o(i.secondary.windowMinutes,24,7),i.secondary.usedPct));if(i.modelLimits?.opus)n.push(this.remainChunk("opus",i.modelLimits.opus.usedPct));if(!n.length)return null;return`${this.icon()} ${n.join(`${I.dim} \xB7 ${I.reset}`)}`}renderClaudeSub=this.renderSub;renderCodexSub=this.renderSub;pctChunk(i,o){let n=o>=90?S.brightRed:o>=70?S.brightYellow:S.brightGreen;return`${i}:${n}${o}%${I.reset}`}remainChunk(i,o){let n=Math.max(0,Math.min(100,100-Math.round(o))),d=n<=10?S.brightRed:n<=30?S.brightYellow:S.brightGreen;return`${i} \u5269 ${d}${n}%${I.reset}`}renderSessionCost(i){let o=i.cost?.total_cost_usd;if(o==null||o<=0)return null;return`${this.icon()} ${S.brightGreen}Session:${this.fmtCost(o)}${I.reset}`}icon(){return`${q.todayUsage.icon}${ki("todayUsage")}${I.reset}`}fmtCost(i){if(i>=100)return`$${Math.round(i)}`;if(i>=10)return`$${i.toFixed(1)}`;return`$${i.toFixed(2)}`}}class O0{separator=`${q.separator} \u2502 ${I.reset}`;render(i){let o=["directory","git","model","context","quota"],n=[];for(let d of o){let e=i.get(d);if(e)n.push(e)}return n.join(this.separator)}}import{join as to,dirname as cl}from"path";import{homedir as J0}from"os";import{mkdir as al}from"fs/promises";var Lr=to(J0(),".tako"),pl=to(Lr,"cli"),ll=to(Lr,"bin",process.platform==="win32"?"tako.cmd":"tako");function ml(){if(process.platform==="win32")return to(process.env.APPDATA||to(J0(),"AppData","Roaming"),"claude","settings.json");return to(J0(),".claude","settings.json")}var xl=process.platform==="win32",wl="0.1.48";function yl(i,o){let n=i.split(".").map(Number),d=o.split(".").map(Number),e=Math.max(n.length,d.length);for(let u=0;u<e;u++){let r=n[u]||0,t=d[u]||0;if(r!==t)return r-t}return 0}async function sl(){let i=to(pl,"node_modules","tako-cli","package.json");try{let o=Bun.file(i);if(!await o.exists())return null;return(await o.json()).version||null}catch{return null}}async function vl(){let i=await sl();if(!i)return!1;return yl(i,wl)>=0}function fl(){return ll}function hl(){return`"${bl(fl())}" statusline`}function bl(i){if(xl)return i.replace(/\\/g,"/");return i}async function R0(){if(!await vl())return;let o=ml(),n={};try{let u=Bun.file(o);if(await u.exists())n=await u.json()}catch{}let d={type:"command",command:hl(),padding:0},e=typeof n.statusLine==="object"&&n.statusLine!==null?n.statusLine.command:null;if(typeof e==="string"&&e.includes("tako statusline"))return;n.statusLine=d,await al(cl(o),{recursive:!0}),await Bun.write(o,JSON.stringify(n,null,2))}var Ll=[new Zn,new Kn,new Vn,new zi,new Fn];async function Nl(i){let o=await Promise.all(Ll.map(async(e)=>{try{let u=await e.render(i);return{id:e.id,content:u}}catch{return{id:e.id,content:null}}})),n=new Map;for(let{id:e,content:u}of o)n.set(e,u);return new O0().render(n)}async function Nr(){try{let i=await Bun.stdin.json(),o=await Nl(i);console.log(o)}catch{process.exit(0)}}ai();xi();async function En(i){let o=await Qi(i);if(o.length===0)return null;let n=await qi(i);if(n)return _(n);if(o.length===1)return _(o[0]);let d=await ei();if(d&&o.some((e)=>e.id===d.id))return _(d);return _(o[0])}async function Wr(){let i=await _o();if(await Uo(i)>0){for(let n of i)O("provider_added",{provider_type:n.type,method:"auto_detect"});U(),H()}}c0();An();var Wl={"claude-code":{optionId:"skip-permissions",flag:"--dangerously-skip-permissions"},codex:{optionId:"bypass-sandbox",flag:"--dangerously-bypass-approvals-and-sandbox"}};async function _n(i,o,n,d){let e=o.filter((t)=>t!==n),u=await kl(i,e,d);if(i!=="claude-code")return u?[u,...e]:e;let r=[];if(u)r.push(u);for(let t=0;t<e.length;t++){let c=e[t];if(c==="--model"&&t+1<e.length){r.push(c,fo(e[t+1])),t++;continue}if(c.startsWith("--model=")){let a=c.slice(8);r.push(`--model=${fo(a)}`);continue}r.push(c)}return r}async function kl(i,o,n){let d=Wl[i];if(!d)return null;if(o.includes(d.flag))return null;return(await(n?.getLastSelectedOptionIds??Yn)(i)).includes(d.optionId)?d.flag:null}vo();Dn();C();var vd="0.3.20",Cm=!1;function sd(i){return Cm&&!i}function Im(){console.log(`
534
+ ${g("cli.version",{version:vd})}
535
535
 
536
536
  ${g("cli.usage")}
537
537
 
@@ -558,7 +558,7 @@ ${g("cli.exampleClaude")}
558
558
  ${g("cli.exampleClaudeModel")}
559
559
  ${g("cli.exampleCodex")}
560
560
  ${g("cli.exampleGemini")}
561
- `)}async function Gm(i){let[o,n]=i;if(!o)console.error("\u7528\u6CD5: tako install <client> [version]"),console.error(" tako install claude-code # \u5217\u51FA\u6240\u6709\u53EF\u7528\u7248\u672C"),console.error(" tako install claude-code 1.0.5 # \u5B89\u88C5\u6307\u5B9A\u7248\u672C"),process.exit(1);let d=oi(o);if(!d)console.error(`\u672A\u77E5 client: ${o}`),process.exit(1);if(!n){try{let e=await R0(d.package),u=await B0(d),r=e.slice(0,30);console.log(`${d.name} (${d.package}) \u6700\u8FD1 ${r.length} \u4E2A\u7248\u672C\uFF1A`);for(let t of r){let c=t.version===u?" \u2190 \u5F53\u524D":"",a=t.publishedAt?` ${t.publishedAt.slice(0,10)}`:"";console.log(` ${t.version}${a}${c}`)}console.log(`
562
- \u5B89\u88C5\uFF1Atako install ${o} <version>`)}catch(e){console.error("\u83B7\u53D6\u7248\u672C\u5217\u8868\u5931\u8D25:",e.message),process.exit(1)}return}console.log(`\u6B63\u5728\u5B89\u88C5 ${d.package}@${n} \u5230 ${d.id}...`);try{await J0(d,n),console.log(`\u2713 ${d.name} \u5DF2\u5207\u6362\u5230 ${n}`)}catch(e){console.error("\u5B89\u88C5\u5931\u8D25:",e.message),process.exit(1)}}async function pe(i,o,n){let d=oi(i);if(!d)console.error(g("cli.clientNotFound",{client:o})),process.exit(1);let e=await Fn(i);if(!e)console.error("\u672A\u914D\u7F6E\u53EF\u7528\u7684\u670D\u52A1\u5546"),process.exit(1);let u=await Hn(d,{providerContext:e,args:n,handoffOnWindows:!0});if(!u.success)console.error(u.error),process.exit(1);process.exit(u.exitCode??0)}async function Sm(i){let o=process.argv.slice(2);if(o[0]==="statusline"){Ni(),await hr();return}if(o[0]==="install"){await Gm(o.slice(1));return}if(o[0]==="quota"){let{runQuotaCommand:d}=await Promise.resolve().then(() => (kr(),Wr)),e=await d(o.slice(1));if(e!==0)process.exit(e);return}if(o[0]==="agent"){Ni();let{runAgentCommand:d}=await Promise.resolve().then(() => (ot(),it));await d(o.slice(1));return}if(o[0]==="skill"){let{runSkillCommand:d}=await Promise.resolve().then(() => (et(),dt));await d(o.slice(1));return}if(o[0]==="models"){let{runModelsCommand:d}=await Promise.resolve().then(() => (tt(),rt)),e=await d(o.slice(1));if(e!==0)process.exit(e);return}if(o.includes("-v")||o.includes("--version")){console.log(`Tako CLI v${yd}`);return}if(o.includes("-h")||o.includes("--help")){Mm();return}let n=yd==="dev"||Ho;if(T(),O("cli_started"),o.includes("--claude")){if(!n)await nn();await pe("claude-code","Claude Code",await En("claude-code",o,"--claude"));return}if(o.includes("--codex")){if(!n)await nn();await pe("codex","Codex",await En("codex",o,"--codex"));return}if(o.includes("--gemini")){if(!n)await nn();await pe("gemini","Gemini CLI",await En("gemini",o,"--gemini"));return}if(!n)await nn();if(O0().catch(()=>{}),Ni(),Jd().catch(()=>{}),!process.stdin.isTTY){console.log("Tako CLI v"+yd),console.log(`
563
- \u5B89\u88C5\u6210\u529F\uFF01\u8BF7\u5728\u7EC8\u7AEF\u4E2D\u76F4\u63A5\u8FD0\u884C tako \u542F\u52A8\u4EA4\u4E92\u754C\u9762\u3002`),console.log(" tako \u2014 \u4EA4\u4E92\u5F0F\u542F\u52A8\u5668"),console.log(" tako --help \u2014 \u67E5\u770B\u6240\u6709\u547D\u4EE4");return}await i()}async function ct(i){process.on("beforeExit",async()=>{await jo()}),process.on("SIGINT",async()=>{await jo(),process.exit(0)}),process.on("SIGTERM",async()=>{await jo(),process.exit(0)});try{await Sm(i)}catch(o){console.error(g("cli.cliError"),o),await jo(),process.exit(1)}}H();Ci();H();import{CliRenderEvents as s1,createCliRenderer as f1}from"@opentui/core";C();H();xi();ai();Si();function Pm(i){return i.startsWith("cr_")&&i.length>10}async function Cm(i){try{let n=await(await fetch(`${Y}/apiStats/api/get-key-id`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:i})})).json();if(n.success&&n.data?.id)return{valid:!0,apiId:n.data.id};return{valid:!1,error:n.error||g("auth.validationFailed")}}catch(o){return{valid:!1,error:o instanceof Error?o.message:g("auth.networkError")}}}async function at(i){if(!Pm(i))return O("api_key_validated",{success:!1,error_type:"invalid_format"}),{success:!1,error:g("auth.invalidFormat")};let o=await Cm(i);if(!o.valid)return O("api_key_validated",{success:!1,error_type:"api_validation_failed"}),{success:!1,error:o.error};return await Ui({apiKey:i,apiId:o.apiId}),await Im(i,o.apiId),O("api_key_validated",{success:!0}),U(),T(),{success:!0}}async function Im(i,o){let d=(await V()).find((e)=>e.type==="tako");if(d)await Xi(d.id,{apiKey:i,apiId:o});else await eo({name:"Tako \u5B98\u65B9",type:"tako",apiKey:i,baseUrl:Y,apiId:o,supportedClients:di("tako"),builtin:!0})}xi();Io();sd();Io();function ft(){try{if(process.stdin.removeAllListeners(),process.stdin.isTTY)process.stdin.setRawMode(!1);process.stdin.pause()}catch{}}function fd(){if(!process.stdout.isTTY)return;try{process.stdout.write("\x1B[?1000l\x1B[?1002l\x1B[?1003l\x1B[?1005l\x1B[?1006l\x1B[?1015l\x1B[?1049l\x1B[?2004l\x1B[0m\x1B[?25h")}catch{}}async function vt(){ft(),fd(),await new Promise((i)=>setTimeout(i,30)),ft(),fd()}function Qo(i){if(i.ctrl||i.meta||i.option)return"";if(i.sequence&&i.sequence.length===1&&i.sequence>=" ")return i.sequence;if(i.name&&i.name.length===1)return i.name;return""}function Z(i){return!i.ctrl&&!i.meta&&!i.option}function we(i){if(!i)return"";if(i.length<=8)return"*".repeat(i.length);return`${i.slice(0,4)}${"*".repeat(Math.min(i.length-8,20))}${i.slice(-4)}`}function fn(i){return i.providers.find((o)=>o.id===i.providerSelectedId)}function vd(i,o){let n=i.type==="claude-subscription"||i.type==="codex-subscription";return[...i.id!==o.defaultProviderId?["default"]:[],...n?["relogin"]:["rekey"],...i.builtin?[]:["delete"],"back"]}function ht(i,o){return{default:o?"\u8BBE\u4E3A\u9ED8\u8BA4":"Set default",rekey:o?"\u66F4\u65B0 Key":"Update key",relogin:o?"\u91CD\u65B0\u767B\u5F55":"Re-login",delete:o?"\u5220\u9664":"Delete",back:o?"\u8FD4\u56DE":"Back"}[i]}function ye(i){let o=Math.floor(i/1000);if(o<60)return`${o}s`;if(o<3600)return`${Math.floor(o/60)}m`;if(o<86400)return`${Math.floor(o/3600)}h`;return`${Math.floor(o/86400)}d`}function se(i){switch(i){case"running":return m.yellow;case"awaiting_approval":return m.magenta;case"idle":return m.green;case"closed":return m.gray;case"dead":return m.red;default:return m.text}}function bt(i){switch(i){case"running":return"~";case"awaiting_approval":return"?";case"idle":return"*";case"dead":return"!";default:return"-"}}function qo(i){if(i.screen==="config"){i.apiKeyValue=i.apiKeyValue.slice(0,-1),i.apiKeyStatus="idle";return}if(i.screen==="agent-new"){if(i.agentField==="model")i.agentModel=i.agentModel.slice(0,-1);if(i.agentField==="name")i.agentName=i.agentName.slice(0,-1);return}if(i.screen==="agent-detail"){i.agentDetailInput=i.agentDetailInput.slice(0,-1);return}switch(i.providerInputMode){case"add-key":case"rekey":i.addKey=i.addKey.slice(0,-1);break;case"add-url":i.addUrl=i.addUrl.slice(0,-1);break;case"add-model":i.addModel=i.addModel.slice(0,-1);break;case"add-ctx":i.addCtx=i.addCtx.slice(0,-1);break}}function Oo(i,o){if(!o)return;if(i.screen==="config"){i.apiKeyValue+=o,i.apiKeyStatus="idle";return}if(i.screen==="agent-new"){if(i.agentField==="model")i.agentModel+=o;if(i.agentField==="name")i.agentName+=o;return}if(i.screen==="agent-detail"){i.agentDetailInput+=o;return}switch(i.providerInputMode){case"add-key":case"rekey":i.addKey+=o;break;case"add-url":i.addUrl+=o;break;case"add-model":i.addModel+=o;break;case"add-ctx":if(/^[0-9]$/.test(o))i.addCtx+=o;break}}Si();H();fe();import{BoxRenderable as Am,ScrollBoxRenderable as Ym,TextAttributes as J,TextRenderable as Hm}from"@opentui/core";function Qm(i){let o=i.codePointAt(0);if(!o)return!1;return o>=19968&&o<=40959||o>=13312&&o<=19903||o>=131072&&o<=191471||o>=63744&&o<=64255||o>=194560&&o<=195103||o>=44032&&o<=55215||o>=12352&&o<=12447||o>=12448&&o<=12543||o>=65280&&o<=65519||o>=126976&&o<=131071||o>=9728&&o<=10175||o===11088}function qm(i){return i.replace(/\x1b\[[0-9;]*m/g,"")}function vn(i){let o=qm(i),n=0;for(let d of o)n+=Qm(d)?2:1;return n}function Wt(i,o,n="left"){let d=vn(i),e=Math.max(0,o-d);if(e===0)return i;switch(n){case"left":return i+" ".repeat(e);case"right":return" ".repeat(e)+i;case"center":{let u=Math.floor(e/2),r=e-u;return" ".repeat(u)+i+" ".repeat(r)}}}var gt=6,$t=4,he=16,Om=12;function Ro(i,o,n){if(!i.some((c)=>(n[c.id]??0)>0))return{list:i,hiddenCount:0};let e=new Map(i.map((c,a)=>[c.id,a])),u=i.filter((c)=>(n[c.id]??0)>0).sort((c,a)=>{let p=(n[a.id]??0)-(n[c.id]??0);if(p!==0)return p;return(e.get(c.id)??0)-(e.get(a.id)??0)}).slice(0,gt).map((c)=>c.id),r=new Set(u);for(let c of i)if(o.has(c.id))r.add(c.id);let t=i.filter((c)=>r.has(c.id));return{list:t,hiddenCount:i.length-t.length}}function be(i,o){return!i.some((d)=>(o[d.id]??0)>0)&&i.length>gt?"grid":"collapsed"}function Rm(i,o){if(i.length===0)return 1;let n=Math.max(...i.map((u)=>vn(u))),d=Math.max(he,n+4),e=Math.max(d,o-Om);return Math.max(1,Math.min($t,i.length,Math.floor(e/d)))}function Jo(i,o,n){let d=i.map((e)=>e.label[n?"zh":"en"]||e.label.en||e.id);return Rm(d,o)}function Jm(i,o){let n=Math.max(1,Math.min($t,Math.floor(o)||1)),d=[];for(let e=0;e<i.length;e+=n)d.push(i.slice(e,e+n));return{rows:d,flat:d.flat()}}function hd(i){return i.startsWith("model-")?i.slice(6):i}function ve(i){let o=hd(i).toLowerCase();return o.replace(/^(?:full[-_]|\u6EE1\u8840[-_])+/u,"").slice(0,3)||o.slice(0,3)||o}function kt(i){let o=["gpt","ful","cla","dee","glm","kim","qwe","min","mim","spa"],n=o.indexOf(i);return n===-1?o.length:n}function zt(i){let o=hd(i).toLowerCase(),n=[];for(let d of o.match(/\d+(?:\.\d+)?|[a-z]+/g)??[o]){let e=Number(d);n.push(Number.isFinite(e)&&/^\d/.test(d)?e:d)}return n}function Bm(i,o){let n=ve(i),d=ve(o),e=kt(n)-kt(d)||n.localeCompare(d);if(e!==0)return e;let u=zt(i),r=zt(o),t=Math.max(u.length,r.length);for(let c=0;c<t;c++){let a=u[c],p=r[c];if(a===void 0)return 1;if(p===void 0)return-1;if(typeof a==="number"&&typeof p==="number"){if(a!==p)return p-a;continue}let l=String(a),x=String(p);if(l!==x)return l.localeCompare(x)}return hd(i).localeCompare(hd(o))}function Bo(i,o){let n=[...i].sort(Bm),d=[];for(let u of n){let r=ve(u),t=d[d.length-1];if(t?.family===r)t.ids.push(u);else d.push({family:r,ids:[u]})}let e=d.map((u)=>({family:u.family,rows:Jm(u.ids,o).rows}));return{groups:e,flat:e.flatMap((u)=>u.rows.flat())}}function Le(i,o,n){return Bo(i,n).flat.indexOf(o)}function Mt(i,o){return Bo(i,o).groups.flatMap((n)=>n.rows)}Io();function Tm(i){for(let o of[...i.root.getChildren()])i.root.remove(o)}function P(i,o){return new Am(i,o)}function Ne(i){return i.terminalHeight<yn}function We(i){return Ne(i)?{minHeight:yn}:{height:"100%"}}function X(i,o,n){if(!Ne(i)){i.root.add(n);return}let d=new Ym(i,{width:"100%",height:"100%",scrollY:!0,scrollX:!1,viewportCulling:!1});if(d.add(n),i.root.add(d),o.scrollOffset>0)d.scrollTop=o.scrollOffset,process.nextTick(()=>{d.scrollTop=o.scrollOffset,i.requestRender()})}function Xm(i,o,n={}){return new Hm(i,{content:o,fg:m.text,selectable:!1,...n})}function v(i,o,n,d={}){let e=Xm(o,n,d);return i.add(e),e}function F(i,o,n){let d=P(i,{flexDirection:"row",flexWrap:"wrap",gap:2,paddingX:2,paddingY:0,marginTop:1,height:1,justifyContent:"center"});n.forEach(([e,u])=>{let r=P(i,{flexDirection:"row",gap:1});v(r,i,e,{fg:m.orange,attributes:J.BOLD}),v(r,i,u,{fg:m.muted}),d.add(r)}),o.add(d)}function Km(i,o,n,d=m.orange){let e=i.terminalHeight;if(e<30)return;let u=P(i,{flexDirection:"column",alignItems:"center",marginBottom:1}),r=e>=36?pt:lt;if(v(u,i,r,{fg:d,attributes:J.BOLD,selectable:!1}),n&&e>=34)v(u,i,n,{fg:m.muted});o.add(u)}function pi(i,o,n){let d=P(i,{flexDirection:"column",gap:0});for(let e of n){let u=P(i,{flexDirection:"row",justifyContent:"space-between",backgroundColor:e.focused?m.panelMuted:m.panel,paddingX:1,height:1}),r=P(i,{flexDirection:"row",gap:1,flexGrow:1});if(v(r,i,e.focused?">":" ",{fg:e.focused?e.color||m.orange:m.muted,attributes:e.focused?J.BOLD:J.NONE}),e.marker)v(r,i,e.marker,{fg:e.color||m.orange});if(v(r,i,e.primary,{fg:e.focused?e.color||m.orange:m.text,attributes:e.focused?J.BOLD:J.NONE,truncate:!0}),u.add(r),e.secondary)v(u,i,e.secondary,{fg:m.muted,truncate:!0});d.add(u)}o.add(d)}function ti(i,o,n,d=m.orange,e={text:`tako ${le}`,color:m.muted},u=!1){let r=P(i,{flexDirection:"column",width:"100%",...We(i),backgroundColor:m.bg,paddingX:1,paddingY:1}),t=P(i,{flexDirection:"column",border:!0,borderStyle:"rounded",borderColor:d,backgroundColor:m.panel,paddingX:2,paddingY:1,gap:1,flexGrow:u?1:0}),c=P(i,{flexDirection:"row",justifyContent:"space-between"});if(v(c,i,n,{fg:d,attributes:J.BOLD}),v(c,i,e.text,{fg:e.color||m.muted,truncate:!0}),t.add(c),o.message)v(t,i,o.message,{fg:o.message.startsWith("!")?m.red:m.green});return r.add(t),{root:r,panel:t}}function W(i,o){if(Tm(i),o.scrollScreen!==o.screen)o.scrollScreen=o.screen,o.scrollOffset=0;else if(!Ne(i)&&o.scrollOffset!==0)o.scrollOffset=0;switch(o.screen){case"launcher":Pt(i,o);break;case"providers":Dm(i,o);break;case"provider-detail":jm(i,o);break;case"provider-add-type":i1(i,o);break;case"provider-input":o1(i,o);break;case"stats":n1(i,o);break;case"config":d1(i,o);break;case"language":e1(i,o);break;case"option-picker":_m(i,o);break;case"agents":u1(i,o);break;case"agent-detail":t1(i,o);break;case"agent-new":c1(i,o);break;case"key-guide":p1(i,o);break;case"client-versions":l1(i,o);break}i.requestRender()}var Gt={tako:{zh:"Tako \u4EE3\u7406",en:"Tako Proxy",color:m.cyan,icon:"\uD83D\uDC19"},"claude-subscription":{zh:"Claude \u5B98\u65B9",en:"Claude Official",color:m.yellow,icon:"\u2726"},"codex-subscription":{zh:"Codex \u5B98\u65B9",en:"Codex Official",color:m.blue,icon:"\u25C8"},anthropic:{zh:"Anthropic \u76F4\u8FDE",en:"Anthropic Direct",color:m.yellow,icon:"\u2726"},deepseek:{zh:"DeepSeek",en:"DeepSeek",color:m.magenta,icon:"\u25C7"},xiaomi:{zh:"\u5C0F\u7C73 MiMo",en:"Xiaomi MiMo",color:m.orange,icon:"\u25C6"},custom:{zh:"\u81EA\u5B9A\u4E49",en:"Custom",color:m.gray,icon:"\u25AA"}};function Vm(i){if(!i)return"";let[o,n]=i.split("@");if(o&&n&&o.length>14)return`${o.slice(0,12)}\u2026@${n}`;return i}function Zm(i,o,n){let d=n.clients[n.clientIdx]?.activeProvider;if(!d){v(o,i,`\u26A0 ${n.zh?"\u672A\u7ED1\u5B9A":"no provider"}`,{fg:m.yellow});return}let e=Gt[d.type]??Gt.custom;v(o,i,`${e.icon} ${n.zh?e.zh:e.en}`,{fg:e.color});let u=Vm(d.email??"");if(u)v(o,i,`\xB7 ${u}`,{fg:m.muted,truncate:!0})}function Fm(i){return i>30?m.green:i>10?m.yellow:m.red}function Em(i,o){if(!i||i.status==="unsupported")return null;if(i.status==="error")return{text:`\uD83D\uDCB0 ${i.hint||(o?"\u7528\u91CF\u83B7\u53D6\u5931\u8D25":"quota unavailable")}`,color:m.muted};if(i.provider==="tako"){if(!(i.primary?.costLimit||i.secondary?.costLimit||i.daily?.costLimit)){let t=i.daily??i.primary??i.secondary;if(!t)return null;return{text:`\uD83D\uDCB0 ${o?"\u4ECA\u65E5":"Today"}: $${(t.costUsed??0).toFixed(2)}`,color:m.green}}}let n=(r,t,c)=>{if(r&&r>=1440)return`${Math.round(r/1440)}d`;if(r)return`${Math.round(r/60)}h`;return c?`${c}d`:`${t}h`},d=(r)=>Math.max(0,Math.min(100,100-Math.round(r))),e=[];if(i.primary)e.push(`${n(i.primary.windowMinutes,5)} ${o?"\u5269":"left"} ${d(i.primary.usedPct)}%`);if(i.secondary)e.push(`${n(i.secondary.windowMinutes,24,7)} ${o?"\u5269":"left"} ${d(i.secondary.usedPct)}%`);if(i.modelLimits?.opus)e.push(`opus ${o?"\u5269":"left"} ${d(i.modelLimits.opus.usedPct)}%`);if(!e.length)return null;let u=Math.min(...[i.primary,i.secondary,i.modelLimits?.opus].filter(Boolean).map((r)=>d(r.usedPct)));return{text:`\uD83D\uDCB0 ${e.join(" \xB7 ")}`,color:Fm(u)}}function Pt(i,o){let n=o.clients[o.clientIdx];if(!n)return;let d=So[n.client.id]||Po,e=co(n.launchOptions,o.zh),u=n.activeProvider?.name||(o.zh?"\u672A\u914D\u7F6E":"Not set"),r=i.terminalHeight<26,c=`${`${o.zh?"\u670D\u52A1\u5546":"Provider"}: ${u}`} \xB7 tako ${le}`,{root:a,panel:p}=ti(i,o,"Tako Launcher",d.color,r?{text:c,color:n.activeProvider?m.orange:m.yellow}:void 0,r);if(Km(i,p,o.zh?"\u591A\u5BA2\u6237\u7AEF AI \u542F\u52A8\u5668":"Multi-client AI launcher",d.color),!r){let f=P(i,{flexDirection:"row",gap:1,justifyContent:"space-between"}),h=P(i,{flexDirection:"row",gap:1});Zm(i,h,o),f.add(h);let M=Em(o.quota,o.zh);if(M)v(f,i,M.text,{fg:M.color,truncate:!0});p.add(f)}let l=P(i,{flexDirection:"row",flexWrap:"wrap",gap:1,justifyContent:"center"}),x=o.focus==="tabs";o.clients.forEach((f,h)=>{let M=So[f.client.id]||Po,k=h===o.clientIdx,B=P(i,{border:!0,borderStyle:k&&x?"heavy":"single",borderColor:k?M.color:m.border,paddingX:1,height:3,backgroundColor:k&&x?m.panelMuted:m.panel});v(B,i,`${k&&x?"> ":""}${h+1} ${M.icon} ${f.client.name}`,{fg:k?M.color:m.muted,attributes:k?J.BOLD:J.NONE}),l.add(B)}),p.add(l);let w=P(i,{flexDirection:"row",gap:2,flexGrow:r?1:0}),y=P(i,{flexDirection:"column",border:!0,borderStyle:"rounded",borderColor:o.focus==="projects"?d.color:m.border,title:o.zh?"\u9879\u76EE":"Projects",titleColor:o.focus==="projects"?d.color:m.muted,paddingX:1,paddingY:1,width:"58%"});pi(i,y,n.projects.map((f,h)=>({primary:f.label,secondary:f.hint,focused:o.focus==="projects"&&h===o.projectIdx,color:d.color})));let s=P(i,{flexDirection:"column",border:!0,borderStyle:"rounded",borderColor:o.focus==="options"?d.color:m.border,title:o.zh?"\u542F\u52A8\u9009\u9879":"Options",titleColor:o.focus==="options"?d.color:m.muted,paddingX:1,paddingY:1,flexGrow:1});pi(i,s,e.map((f,h)=>{let M=o.focus==="options"&&h===o.optionIdx;if(f.kind==="flag"){let k=n.enabled.has(f.opt.id);return{primary:f.opt.label[o.zh?"zh":"en"]||f.opt.label.en,secondary:M?f.opt.flag:void 0,focused:M,marker:k?"[x]":"[ ]",color:k?d.color:m.muted}}if(f.kind==="group"){let k=Ei(n.launchOptions,n.enabled,f.group);return{primary:`${f.title}: ${k?.shortLabel||(o.zh?"\u9ED8\u8BA4":"Default")}`,secondary:M?o.zh?"Enter \u9009\u62E9":"Enter to pick":void 0,focused:M,marker:">",color:d.color}}return{primary:`${f.title}: ${u}`,secondary:M?o.zh?"Enter \u7BA1\u7406":"Enter to manage":void 0,focused:M,marker:"*",color:n.activeProvider?d.color:m.yellow}})),w.add(y),w.add(s),p.add(w);let b=o.focus==="tabs"?["\u2190\u2192",o.zh?"\u5207\u5BA2\u6237\u7AEF":"switch client"]:o.focus==="projects"?["\u2192",o.zh?"\u53BB\u9009\u9879":"to options"]:["\u2190",o.zh?"\u53BB\u9879\u76EE":"to projects"];F(i,a,[["Enter",o.zh?"\u542F\u52A8":"launch"],b,["\u2191\u2193",o.zh?"\u9009\u62E9":"move"],["Space",o.zh?"\u5207\u6362\u9009\u9879":"toggle"],["p",o.zh?"\u670D\u52A1\u5546":"providers"],["c","config"],["s","stats"],["a","agents"],["q",o.zh?"\u9000\u51FA":"quit"]]),X(i,o,a)}function _m(i,o){let n=o.clients[o.clientIdx],d=o.optionPickerGroup;if(!n||!d){Pt(i,o);return}let e=n.launchOptions.filter((h)=>h.group===d),u=(So[n.client.id]||Po).color,r=d==="model"?o.zh?"\u9009\u62E9\u6A21\u578B":"Pick Model":o.zh?"\u9009\u62E9\u9009\u9879":"Pick Option",t=Ei(n.launchOptions,n.enabled,d),c=d==="model";if(c&&o.modelPickerMode==="grid"){Um(i,o,n,e,u,r);return}let a=c?Ro(e,n.enabled,o.pickCounts):{list:e,hiddenCount:0},p=[{id:"",primary:o.zh?"\u9ED8\u8BA4":"Default",secondary:t?"":o.zh?"\u5F53\u524D":"current"},...a.list.map((h)=>({id:h.id,primary:h.shortLabel||h.label[o.zh?"zh":"en"]||h.label.en,secondary:n.enabled.has(h.id)?o.zh?"\u5F53\u524D":"current":h.flag})),...a.hiddenCount>0?[{id:"__show_all__",primary:o.zh?`\u663E\u793A\u5168\u90E8 (${a.hiddenCount})`:`Show all (${a.hiddenCount})`,secondary:">"}]:[]],l=p.length;o.optionPickerIdx=Math.max(0,Math.min(o.optionPickerIdx,l-1));let x=Math.max(5,Math.min(14,i.terminalHeight-10)),w=Math.max(0,Math.min(o.optionPickerIdx-Math.floor(x/2),Math.max(0,l-x))),y=p.slice(w,w+x),s=P(i,{flexDirection:"column",width:"100%",...We(i),backgroundColor:m.bg,justifyContent:"center",alignItems:"center",paddingX:2}),b=P(i,{flexDirection:"column",border:!0,borderStyle:"rounded",borderColor:u,backgroundColor:m.panel,paddingX:2,paddingY:1,gap:1,width:"70%"}),f=P(i,{flexDirection:"row",justifyContent:"space-between"});v(f,i,r,{fg:u,attributes:J.BOLD}),v(f,i,`${o.optionPickerIdx+1}/${l}`,{fg:m.muted}),b.add(f),pi(i,b,y.map((h,M)=>{let k=w+M;return{primary:h.primary,secondary:h.secondary,focused:k===o.optionPickerIdx,marker:h.id&&n.enabled.has(h.id)?"[x]":" ",color:u}})),v(b,i,o.zh?"Esc \u8FD4\u56DE\uFF0C\u4E0D\u4FEE\u6539\u5F53\u524D\u9009\u62E9":"Esc returns without changing the current selection",{fg:m.muted,truncate:!0}),s.add(b),F(i,s,[["Enter",o.zh?"\u786E\u8BA4":"confirm"],["\u2191\u2193",o.zh?"\u9009\u62E9":"select"],["Esc/q",o.zh?"\u8FD4\u56DE":"back"]]),X(i,o,s)}function Um(i,o,n,d,e,u){let r=d.map((b)=>b.id),t=new Map(d.map((b)=>[b.id,b])),c=(b)=>{let f=t.get(b);return f?.shortLabel||f?.label[o.zh?"zh":"en"]||f?.label.en||b},a=Jo(d,i.terminalWidth||80,o.zh),p=Bo(r,a),l=Math.max(1,p.flat.length);o.optionPickerIdx=Math.max(0,Math.min(o.optionPickerIdx,l-1));let x=Math.max(he,...r.length>0?r.map((b)=>vn(c(b))+3):[0]),w=P(i,{flexDirection:"column",width:"100%",...We(i),backgroundColor:m.bg,justifyContent:"center",alignItems:"center",paddingX:2}),y=P(i,{flexDirection:"column",border:!0,borderStyle:"rounded",borderColor:e,backgroundColor:m.panel,paddingX:2,paddingY:1,gap:0,width:"78%"}),s=P(i,{flexDirection:"row",justifyContent:"space-between",marginBottom:1});v(s,i,u,{fg:e,attributes:J.BOLD}),v(s,i,`${o.optionPickerIdx+1}/${p.flat.length}`,{fg:m.muted}),y.add(s),p.groups.forEach((b,f)=>{if(f>0)v(y,i,"-".repeat(Math.max(8,x*a)),{fg:m.border});b.rows.forEach((h)=>{let M=P(i,{flexDirection:"row",gap:1,height:1});h.forEach((k)=>{let li=p.flat.indexOf(k)===o.optionPickerIdx,mo=n.enabled.has(k),Yo=`${li?">":" "}${Wt(c(k),x)}${mo?"*":" "}`;v(M,i,Yo,{fg:li?e:mo?m.green:m.text,attributes:li?J.BOLD:J.NONE})}),y.add(M)})}),w.add(y),F(i,w,[["Enter",o.zh?"\u786E\u8BA4":"confirm"],["arrows",o.zh?"\u9009\u62E9":"select"],["Esc/q",o.zh?"\u8FD4\u56DE":"back"]]),X(i,o,w)}function Dm(i,o){let d=o.clients[o.providerTabIdx]?.client,e=d?o.providers.filter((w)=>Ti(w,d.id)):[],u=d?o.clientBindings[d.id]||o.defaultProviderId:o.defaultProviderId,r=e.length+4;o.providerRowIdx=Math.max(0,Math.min(o.providerRowIdx,Math.max(0,r-1)));let t=d?(So[d.id]||Po).color:m.orange,{root:c,panel:a}=ti(i,o,o.zh?"\u670D\u52A1\u5546\u7BA1\u7406":"Providers",t),p=P(i,{flexDirection:"row",gap:1,justifyContent:"center"});o.clients.forEach((w,y)=>{let s=So[w.client.id]||Po,b=y===o.providerTabIdx,f=P(i,{border:!0,borderStyle:b?"heavy":"single",borderColor:b?s.color:m.border,paddingX:1,height:3});v(f,i,`${y+1} ${w.client.name}`,{fg:b?s.color:m.muted,attributes:b?J.BOLD:J.NONE}),p.add(f)}),a.add(p);let l=[...e.map((w)=>({primary:w.name,secondary:[io[w.type]?.[o.zh?"zh":"en"]||w.type,w.id===u?o.zh?"\u5F53\u524D":"bound":"",w.id===o.defaultProviderId?o.zh?"\u9ED8\u8BA4":"default":""].filter(Boolean).join(" "),marker:w.id===u?"*":" "})),{primary:o.zh?"\u6DFB\u52A0\u670D\u52A1\u5546":"Add provider",secondary:"",marker:"+"},{primary:o.zh?"\u626B\u63CF\u672C\u5730\u8BA2\u9605":"Scan local subscriptions",secondary:"",marker:"?"},{primary:o.zh?"\u5BA2\u6237\u7AEF\u7248\u672C\u7BA1\u7406":"Client versions",secondary:"",marker:"V"},{primary:o.zh?"\u8FD4\u56DE":"Back",secondary:"",marker:"<"}],x=P(i,{flexDirection:"column",border:!0,borderStyle:"rounded",borderColor:t,paddingX:1,paddingY:1});pi(i,x,l.map((w,y)=>({...w,focused:y===o.providerRowIdx,color:t}))),a.add(x),F(i,c,[["Enter",o.zh?"\u7ED1\u5B9A/\u6253\u5F00":"bind/open"],["d/e",o.zh?"\u8BE6\u60C5":"detail"],["arrows",o.zh?"\u9009\u62E9":"select"],["q/Esc",o.zh?"\u8FD4\u56DE":"back"]]),X(i,o,c)}function jm(i,o){let n=fn(o),{root:d,panel:e}=ti(i,o,o.zh?"\u670D\u52A1\u5546\u8BE6\u60C5":"Provider Detail",m.orange);if(!n)v(e,i,o.zh?"\u670D\u52A1\u5546\u4E0D\u5B58\u5728":"Provider not found",{fg:m.red});else{let u=[["Name",n.name],["Type",io[n.type]?.[o.zh?"zh":"en"]||n.type],["Base URL",n.baseUrl||"-"],["Model",n.model||"-"],["Email",n.email||"-"],["Builtin",n.builtin?"yes":"no"]];for(let[t,c]of u)v(e,i,`${t}: ${c}`,{fg:m.text,truncate:!0});let r=vd(n,o);pi(i,e,r.map((t,c)=>({primary:ht(t,o.zh),focused:c===o.providerDetailIdx,marker:c===o.providerDetailIdx?">":" ",color:m.orange})))}F(i,d,[["Enter",o.zh?"\u6267\u884C":"run"],["arrows",o.zh?"\u9009\u62E9":"select"],["q/Esc",o.zh?"\u8FD4\u56DE":"back"]]),X(i,o,d)}function i1(i,o){let{root:n,panel:d}=ti(i,o,o.zh?"\u6DFB\u52A0\u670D\u52A1\u5546":"Add Provider",m.orange);pi(i,d,Co.map((e,u)=>({primary:io[e]?.[o.zh?"zh":"en"]||e,secondary:e==="claude-subscription"||e==="codex-subscription"?o.zh?"\u767B\u5F55\u6388\u6743":"login auth":e==="custom"?o.zh?"\u81EA\u5B9A\u4E49 URL":"custom URL":"",focused:u===o.providerRowIdx,marker:"+",color:m.orange}))),F(i,n,[["Enter",o.zh?"\u9009\u62E9":"select"],["q/Esc",o.zh?"\u8FD4\u56DE":"back"]]),X(i,o,n)}function o1(i,o){let n={"add-key":o.zh?"\u8F93\u5165 API Key":"Enter API key","add-url":o.zh?"\u8F93\u5165 Base URL":"Enter base URL","add-model":o.zh?"\u9009\u62E9/\u8F93\u5165\u6A21\u578B":"Select/enter model","add-ctx":o.zh?"\u8F93\u5165\u4E0A\u4E0B\u6587\u7A97\u53E3 token \u6570":"Enter context window tokens",rekey:o.zh?"\u66F4\u65B0 API Key":"Update API key"},{root:d,panel:e}=ti(i,o,n[o.providerInputMode],m.orange),u=o.providerInputMode==="add-model"?Eo(o.addType):void 0;if(u)pi(i,e,u.map((r,t)=>({primary:r,focused:t===o.providerRowIdx,marker:t===o.providerRowIdx?">":" ",color:m.orange})));else{let r=o.providerInputMode==="add-key"||o.providerInputMode==="rekey"?we(o.addKey):o.providerInputMode==="add-url"?o.addUrl:o.providerInputMode==="add-model"?o.addModel:o.addCtx;v(e,i,`> ${r}_`,{fg:m.text,truncate:!0})}F(i,d,[["Enter",o.zh?"\u7EE7\u7EED":"continue"],["Backspace",o.zh?"\u5220\u9664":"delete"],["q/Esc",o.zh?"\u53D6\u6D88":"cancel"]]),X(i,o,d)}function n1(i,o){let{root:n,panel:d}=ti(i,o,o.zh?"\u7528\u91CF\u7EDF\u8BA1":"Usage Stats",m.green);if(o.statsLoading)v(d,i,o.zh?"\u6B63\u5728\u83B7\u53D6...":"Loading...",{fg:m.yellow});else if(o.statsError)v(d,i,`${o.zh?"\u83B7\u53D6\u5931\u8D25":"Failed"}: ${o.statsError}`,{fg:m.red});else if(o.statsData){if(v(d,i,`${o.zh?"\u603B\u8C03\u7528\u6B21\u6570":"Total requests"}: ${Nt(o.statsData.totalRequests)}`),v(d,i,`${o.zh?"\u603B\u6D88\u8D39":"Total cost"}: ${o.statsData.totalCost}`),v(d,i,`${o.zh?"\u4ECA\u65E5\u6D88\u8D39":"Today"}: ${o.statsData.todayCost}`),o.statsData.modelStats.length>0){v(d,i,o.zh?"\u6A21\u578B\u5206\u5E03:":"Models:",{fg:m.muted});for(let e of o.statsData.modelStats.slice(0,12))v(d,i,`${e.model.padEnd(28)} ${String(e.requests).padStart(6)} ${e.cost}`,{fg:m.muted,truncate:!0})}}else v(d,i,o.zh?"\u6682\u65E0\u6570\u636E":"No data",{fg:m.muted});F(i,n,[["r",o.zh?"\u5237\u65B0":"refresh"],["q/Esc",o.zh?"\u8FD4\u56DE":"back"]]),X(i,o,n)}function d1(i,o){let{root:n,panel:d}=ti(i,o,o.zh?"\u914D\u7F6E API Key":"Configure API key",m.orange);if(v(d,i,`> ${we(o.apiKeyValue)}_`,{truncate:!0}),o.apiKeyStatus==="validating")v(d,i,o.zh?"\u6B63\u5728\u9A8C\u8BC1...":"Validating...",{fg:m.yellow});if(o.apiKeyStatus==="success")v(d,i,o.zh?"\u914D\u7F6E\u6210\u529F":"Configured",{fg:m.green});if(o.apiKeyStatus==="error")v(d,i,o.apiKeyError||"Error",{fg:m.red});F(i,n,[["Enter",o.zh?"\u4FDD\u5B58":"save"],["Backspace",o.zh?"\u5220\u9664":"delete"],["q/Esc",o.zh?"\u8FD4\u56DE":"back"]]),X(i,o,n)}function e1(i,o){let{root:n,panel:d}=ti(i,o,o.zh?"\u5207\u6362\u8BED\u8A00":"Language",m.magenta);pi(i,d,Fi.map((e,u)=>({primary:e.label,secondary:e.value===Ii()?o.zh?"\u5F53\u524D":"current":"",focused:u===o.languageIdx,marker:u===o.languageIdx?">":" ",color:m.magenta}))),F(i,n,[["Enter",o.zh?"\u9009\u62E9":"select"],["q/Esc",o.zh?"\u8FD4\u56DE":"back"]]),X(i,o,n)}function u1(i,o){let{root:n,panel:d}=ti(i,o,o.zh?"Agent \u4F1A\u8BDD":"Agent Sessions",m.blue);if(v(d,i,`${o.zh?"\u9ED8\u8BA4 Provider":"Defaults"}: ${Object.keys(o.agentDefaults).length===0?"-":Object.entries(o.agentDefaults).map(([e,u])=>`${e}=${u.slice(0,8)}`).join(" ")}`,{fg:m.muted,truncate:!0}),!o.agentSessions)v(d,i,o.zh?"\u52A0\u8F7D\u4E2D...":"Loading...",{fg:m.yellow});else if(o.agentSessions.length===0)v(d,i,o.zh?"\u6682\u65E0 session\uFF0C\u6309 n \u65B0\u5EFA":"No sessions, press n to create",{fg:m.muted});else pi(i,d,o.agentSessions.map((e,u)=>({primary:`${e.sid.slice(0,8)} ${e.backend.padEnd(6)} ${(e.name||"").slice(0,18).padEnd(18)} ${e.status}`,secondary:`${e.turnCount} turns ${ye(Date.now()-e.lastActiveAt)}`,focused:u===o.agentIdx,marker:bt(e.status),color:se(e.status)})));if(o.agentError)v(d,i,`! ${o.agentError}`,{fg:m.red,truncate:!0});F(i,n,[["Enter/o",o.zh?"\u8BE6\u60C5":"open"],["n",o.zh?"\u65B0\u5EFA":"new"],["d",o.zh?"\u5173\u95ED":"close"],["x",o.zh?"\u5220\u9664":"purge"],["r",o.zh?"\u5237\u65B0":"refresh"],["q/Esc",o.zh?"\u8FD4\u56DE":"back"]]),X(i,o,n)}function r1(i){let o=new Date(i.ts).toISOString().slice(11,19);switch(i.kind){case"session_started":return{text:`[${o}] session_started ${i.backend}${i.model?` ${i.model}`:""}`,dim:!0};case"turn_started":return{text:`[${o}] turn_started`,color:m.cyan};case"text_delta":return{text:i.text};case"reasoning_delta":return{text:`[${o}] reasoning ${i.text}`,dim:!0};case"tool_use":return{text:`[${o}] tool ${i.name} ${JSON.stringify(i.input)}`,color:m.yellow};case"tool_result":return{text:`[${o}] result ${JSON.stringify(i.output)}`,color:m.green};case"approval_required":return{text:`[${o}] approval ${i.approvalType} ${String(i.approvalId)}`,color:m.magenta};case"turn_completed":return{text:`[${o}] turn_completed${i.stopReason?` ${i.stopReason}`:""}`,color:m.cyan};case"error":return{text:`[${o}] error ${i.message}`,color:m.red};case"session_closed":return{text:`[${o}] session_closed`,dim:!0}}}function t1(i,o){let n=o.agentDetailMeta,{root:d,panel:e}=ti(i,o,o.zh?"Agent \u8BE6\u60C5":"Agent Detail",m.blue);if(!n){v(e,i,o.zh?"\u52A0\u8F7D\u4E2D...":"Loading...",{fg:m.yellow}),X(i,o,d);return}if(v(e,i,`${n.sid.slice(0,8)} ${n.backend} ${n.name} ${n.status}${o.agentDetailAlive===!1?" dead":""}`,{fg:se(n.status),attributes:J.BOLD,truncate:!0}),v(e,i,`${o.zh?"\u5DE5\u4F5C\u76EE\u5F55":"cwd"}: ${n.workdir}`,{fg:m.muted,truncate:!0}),v(e,i,`${o.zh?"\u6A21\u578B":"model"}: ${n.model||"-"} turns=${n.turnCount} ${o.zh?"\u6700\u8FD1":"last"}=${ye(Date.now()-n.lastActiveAt)}`,{fg:m.muted,truncate:!0}),o.agentPendingApprovals.length>0){let c=P(i,{flexDirection:"column",border:!0,borderStyle:"rounded",borderColor:m.magenta,paddingX:1});v(c,i,`${o.agentPendingApprovals.length} ${o.zh?"\u4E2A\u5F85\u5BA1\u6279":"pending approvals"}`,{fg:m.magenta,attributes:J.BOLD});for(let a of o.agentPendingApprovals.slice(0,3))v(c,i,`${a.approvalType} ${a.approvalId.slice(0,12)} ${JSON.stringify(a.params)}`,{fg:m.muted,truncate:!0});e.add(c)}let u=P(i,{flexDirection:"column",border:!0,borderStyle:"rounded",borderColor:m.border,paddingX:1,title:o.zh?"\u65E5\u5FD7":"Log",titleColor:m.muted}),r=o.agentDetailFrames.slice(-Math.max(6,Math.min(18,i.terminalHeight-14)));if(r.length===0)v(u,i,o.zh?"\u6682\u65E0\u65E5\u5FD7":"No log yet",{fg:m.muted});else for(let c of r){let a=r1(c);v(u,i,a.text.replace(/\s+/g," ").slice(0,240),{fg:a.color||(a.dim?m.muted:m.text),truncate:!0})}if(e.add(u),o.agentError)v(e,i,`! ${o.agentError}`,{fg:m.red,truncate:!0});let t=o.agentDetailStatus==="sending"?"... ":o.agentDetailStatus==="cancelling"?"x ":"> ";v(e,i,`${t}${o.agentDetailInput}_`,{fg:o.agentDetailStatus==="idle"?m.text:m.yellow,truncate:!0}),F(i,d,[["Enter",o.zh?"\u53D1\u9001":"send"],["Ctrl-Y/N",o.zh?"\u6279/\u62D2":"approve/deny"],["r",o.zh?"\u5237\u65B0":"refresh"],["Ctrl-C",o.zh?"\u53D6\u6D88":"cancel"],["Esc/q",o.zh?"\u8FD4\u56DE":"back"]]),X(i,o,d)}function c1(i,o){let{root:n,panel:d}=ti(i,o,o.zh?"\u65B0\u5EFA Agent Session":"New Agent Session",m.blue),e=[{id:"backend",label:`${o.zh?"\u540E\u7AEF":"Backend"}: ${o.agentBackend==="claude"?"[claude] codex":"claude [codex]"}`},{id:"model",label:`${o.zh?"\u6A21\u578B":"Model"}: ${o.agentModel||(o.zh?"\u9ED8\u8BA4":"default")}`},{id:"name",label:`${o.zh?"\u540D\u79F0":"Name"}: ${o.agentName||(o.zh?"\u81EA\u52A8":"auto")}`}];if(pi(i,d,e.map((u)=>({primary:u.label+(o.agentField===u.id&&u.id!=="backend"?"_":""),focused:o.agentField===u.id,marker:o.agentField===u.id?">":" ",color:m.blue}))),o.agentError)v(d,i,`! ${o.agentError}`,{fg:m.red,truncate:!0});F(i,n,[["Tab/arrows",o.zh?"\u5207\u5B57\u6BB5":"field"],["Space",o.zh?"\u5207\u540E\u7AEF":"backend"],["Enter",o.zh?"\u521B\u5EFA":"create"],["q/Esc",o.zh?"\u53D6\u6D88":"cancel"]]),X(i,o,n)}var a1=[{id:"configure",label:{zh:"\u73B0\u5728\u914D\u7F6E",en:"Configure now"},hint:{zh:"\u8F93\u5165\u4F60\u7684 Tako API Key",en:"Enter your Tako API Key"},color:m.cyan},{id:"skip",label:{zh:"\u7A0D\u540E\u518D\u8BF4",en:"Not now"},hint:{zh:"\u660E\u5929\u518D\u63D0\u9192\u6211",en:"Remind me tomorrow"},color:m.text},{id:"never",label:{zh:"\u4E0D\u518D\u63D0\u793A",en:"Don't ask again"},hint:{zh:"\u4E4B\u540E\u53EF\u4EE5\u6309 c \u968F\u65F6\u914D\u7F6E",en:"You can configure later via c"},color:m.text}];function p1(i,o){let{root:n,panel:d}=ti(i,o,`\uD83D\uDD11 ${o.zh?"\u914D\u7F6E Tako API Key":"Configure Tako API Key"}`,m.cyan);v(d,i,o.zh?"\u914D\u7F6E API Key \u540E\u5373\u53EF\u4F7F\u7528 Tako \u4EE3\u7406\u670D\u52A1\uFF0C\u83B7\u5F97\u7EDF\u4E00\u7684\u914D\u989D\u7BA1\u7406\u548C\u66F4\u5FEB\u7684\u8BBF\u95EE\u901F\u5EA6\u3002":"Configure your API Key to use Tako proxy service with unified quota and faster access.",{fg:m.muted}),v(d,i,o.zh?"\u4F60\u4E5F\u53EF\u4EE5\u8DF3\u8FC7\u6B64\u6B65\u9AA4\uFF0C\u76F4\u63A5\u4F7F\u7528\u5176\u4ED6\u670D\u52A1\u5546\u3002":"You can skip this and use other providers instead.",{fg:m.muted}),pi(i,d,a1.map((e,u)=>({primary:o.zh?e.label.zh:e.label.en,secondary:u===o.keyGuideIdx?o.zh?e.hint.zh:e.hint.en:void 0,focused:u===o.keyGuideIdx,marker:u===o.keyGuideIdx?">":" ",color:e.color}))),F(i,n,[["\u2191\u2193",o.zh?"\u9009\u62E9":"select"],["Enter",o.zh?"\u786E\u8BA4":"confirm"],["Esc",o.zh?"\u8DF3\u8FC7":"skip"]]),X(i,o,n)}var St={"claude-code":{icon:"\u2726",color:m.yellow},codex:{icon:"\u25C8",color:m.blue},gemini:{icon:"\u25C6",color:m.cyan}};function l1(i,o){let n=o.clients[o.clientVersionsClientIdx],d=St[n?.client.id||""]?.color||m.gray,{root:e,panel:u}=ti(i,o,`\uD83D\uDCE6 ${o.zh?"\u5BA2\u6237\u7AEF\u7248\u672C\u7BA1\u7406":"Client Versions"}`,d,void 0,!0),r=P(i,{flexDirection:"row",flexWrap:"wrap",gap:1,justifyContent:"center"});if(o.clients.forEach((t,c)=>{let a=St[t.client.id]||{icon:"\u25AA",color:m.gray},p=c===o.clientVersionsClientIdx,l=P(i,{border:!0,borderStyle:p?"heavy":"single",borderColor:p?a.color:m.border,paddingX:2});v(l,i,`${a.icon} ${t.client.name}`,{fg:p?a.color:m.muted,attributes:p?J.BOLD:J.NONE}),r.add(l)}),u.add(r),o.clientVersionsLoading)v(u,i,o.zh?"\u52A0\u8F7D\u4E2D...":"Loading...",{fg:m.yellow});else if(o.clientVersionsError)v(u,i,`${o.zh?"\u52A0\u8F7D\u5931\u8D25\uFF1A":"Failed: "}${o.clientVersionsError}`,{fg:m.red,truncate:!0});else if(o.clientVersions.length===0)v(u,i,o.zh?"\u6682\u65E0\u7248\u672C":"No versions",{fg:m.muted});else{let t=o.clientVersions.find((l)=>l.isCurrent)?.version??(o.zh?"\u672A\u5B89\u88C5":"not installed");v(u,i,`${o.zh?"\u5171":""} ${o.clientVersions.length} ${o.zh?"\u4E2A\u7248\u672C\uFF0C\u5F53\u524D\uFF1A":"versions, current: "}${t}`,{fg:m.muted,truncate:!0});let c=12,a=Math.max(0,Math.min(o.clientVersionsIdx-c+1,o.clientVersions.length-c)),p=o.clientVersions.slice(Math.max(0,a),Math.max(0,a)+c);pi(i,u,p.map((l,x)=>{let w=Math.max(0,a)+x,y=l.publishedAt?l.publishedAt.slice(0,10):"";return{primary:`${l.version.padEnd(16)}${y}${l.isCurrent?o.zh?" \u2605 \u5F53\u524D":" \u2605 current":""}`,focused:w===o.clientVersionsIdx,marker:w===o.clientVersionsIdx?">":" ",color:l.isCurrent?m.green:d}}))}F(i,e,[["\u2190\u2192",o.zh?"\u5207\u6362\u5DE5\u5177":"switch"],["\u2191\u2193",o.zh?"\u9009\u62E9":"select"],["Enter",o.zh?"\u5B89\u88C5":"install"],["r",o.zh?"\u5237\u65B0":"refresh"],["q/Esc",o.zh?"\u8FD4\u56DE":"back"]]),X(i,o,e)}Ao();ai();Si();Io();sd();Ao();md();Zi();xi();function w1(i,o,n){let d=i.clients[i.clientIdx];if(!d)return;let e=d.launchOptions.filter((c)=>c.group===o);if(e.length===0)return;let u=Ei(d.launchOptions,d.enabled,o),r=o==="model"?be(e,i.pickCounts):"collapsed",t=0;if(u)if(o==="model"&&r==="grid"){let c=e.map((p)=>p.id),a=Jo(e,n,i.zh);t=Le(c,u.id,a)}else t=(o==="model"?Ro(e,d.enabled,i.pickCounts).list:e).findIndex((a)=>a.id===u.id)+1;i.optionPickerGroup=o,i.optionPickerIdx=Math.max(0,t),i.modelPickerMode=r,i.screen="option-picker"}function Qt(i,o,n,d,e){let u=o.clients[o.clientIdx];if(!u)return;let r=co(u.launchOptions,o.zh),t=i.name,c=Z(i);if(t==="q"||t==="escape"){d({type:"exit"});return}if(c&&t==="a"){e(()=>hi(o));return}if(c&&t==="p"){e(()=>po(o));return}if(c&&t==="s"){e(()=>hn(o));return}if(c&&t==="c"){o.screen="config",o.apiKeyValue="",o.apiKeyStatus="idle",o.apiKeyError=void 0,W(n,o);return}if(c&&t==="l"){o.screen="language",W(n,o);return}let a=Number.parseInt(t,10);if(c&&a>=1&&a<=o.clients.length){o.clientIdx=a-1,sn(o),W(n,o);return}if(t==="tab"){if(i.shift)o.clientIdx=o.clientIdx>0?o.clientIdx-1:o.clients.length-1;else o.clientIdx=o.clientIdx<o.clients.length-1?o.clientIdx+1:0;sn(o),W(n,o);return}if(t==="left"){if(o.focus==="tabs")o.clientIdx=o.clientIdx>0?o.clientIdx-1:o.clients.length-1,sn(o);else if(o.focus==="options")o.focus="projects",o.projectIdx=Math.min(o.projectIdx,u.projects.length-1);W(n,o);return}if(t==="right"){if(o.focus==="tabs")o.clientIdx=o.clientIdx<o.clients.length-1?o.clientIdx+1:0,sn(o);else if(o.focus==="projects"&&r.length>0)o.focus="options",o.optionIdx=Math.min(o.optionIdx,r.length-1);W(n,o);return}if(t==="down"){if(o.focus==="tabs")o.focus="projects";else if(o.focus==="projects"){if(o.projectIdx<u.projects.length-1)o.projectIdx+=1}else if(o.optionIdx<r.length-1)o.optionIdx+=1;W(n,o);return}if(t==="up"){if(o.focus==="options")if(o.optionIdx>0)o.optionIdx-=1;else o.focus="tabs";else if(o.focus==="projects")if(o.projectIdx>0)o.projectIdx-=1;else o.focus="tabs";W(n,o);return}if((t==="space"||t==="return")&&o.focus==="options"){let p=r[o.optionIdx];if(p?.kind==="provider"){e(()=>po(o));return}if(p?.kind==="flag"){if(u.enabled.has(p.opt.id))u.enabled.delete(p.opt.id);else u.enabled.add(p.opt.id);W(n,o);return}if(p?.kind==="group"){w1(o,p.group,n.terminalWidth||80),W(n,o);return}}if(t==="return"){let p=u.projects[o.projectIdx],l=me(u);d({type:"launch",clientId:u.client.id,projectPath:p?.path,...l})}}function qt(i,o,n){let d=o.clients[o.clientIdx],e=o.optionPickerGroup;if(!d||!e){o.screen="launcher",W(n,o);return}let u=d.launchOptions.filter((p)=>p.group===e),r=e==="model",t=i.name;if(r&&o.modelPickerMode==="grid"){let p=u.map((s)=>s.id),l=Jo(u,n.terminalWidth||80,o.zh),x=Bo(p,l),w=Mt(p,l),y=x.flat.length;if(t==="escape"){if(be(u,o.pickCounts)==="grid")o.screen="launcher",o.modelPickerMode="collapsed";else{o.modelPickerMode="collapsed";let s=Ei(d.launchOptions,d.enabled,e),b=Ro(u,d.enabled,o.pickCounts).list;o.optionPickerIdx=s?Math.max(0,b.findIndex((f)=>f.id===s.id)+1):0}W(n,o);return}if(Z(i)&&t==="q"){o.screen="launcher",o.modelPickerMode="collapsed",W(n,o);return}if(y===0)return;if(t==="left"){o.optionPickerIdx=o.optionPickerIdx>0?o.optionPickerIdx-1:y-1,W(n,o);return}if(t==="right"){o.optionPickerIdx=o.optionPickerIdx<y-1?o.optionPickerIdx+1:0,W(n,o);return}if(t==="up"||t==="down"){let s=0,b=0,f=0;for(let k=0;k<w.length;k++){let B=w[k].length;if(o.optionPickerIdx<f+B){s=k,b=o.optionPickerIdx-f;break}f+=B}let h=t==="up"?s>0?s-1:w.length-1:s<w.length-1?s+1:0,M=Math.min(b,w[h].length-1);o.optionPickerIdx=w.slice(0,h).reduce((k,B)=>k+B.length,0)+M,W(n,o);return}if(t==="return"||t==="space"){let s=x.flat[o.optionPickerIdx];for(let b of u)d.enabled.delete(b.id);if(s)d.enabled.add(s);o.screen="launcher",o.modelPickerMode="collapsed",W(n,o)}return}let c=r?Ro(u,d.enabled,o.pickCounts):{list:u,hiddenCount:0},a=c.list.length+1+(c.hiddenCount>0?1:0);if(t==="escape"||Z(i)&&t==="q"){o.screen="launcher",o.modelPickerMode="collapsed",W(n,o);return}if(t==="up"){o.optionPickerIdx=o.optionPickerIdx>0?o.optionPickerIdx-1:a-1,W(n,o);return}if(t==="down"){o.optionPickerIdx=o.optionPickerIdx<a-1?o.optionPickerIdx+1:0,W(n,o);return}if(t==="return"||t==="space"){if(o.optionPickerIdx===0)for(let p of u)d.enabled.delete(p.id);else if(r&&c.hiddenCount>0&&o.optionPickerIdx===c.list.length+1){let p=Ei(d.launchOptions,d.enabled,e),l=u.map((w)=>w.id),x=Jo(u,n.terminalWidth||80,o.zh);o.optionPickerIdx=p?Math.max(0,Le(l,p.id,x)):0,o.modelPickerMode="grid",W(n,o);return}else{for(let l of u)d.enabled.delete(l.id);let p=c.list[o.optionPickerIdx-1];if(p)d.enabled.add(p.id)}o.screen="launcher",o.modelPickerMode="collapsed",W(n,o)}}function Ot(i,o,n,d){let e=o.clients[o.providerTabIdx]?.client,u=e?o.providers.filter((a)=>Ti(a,e.id)):[],r=u.length+4,t=i.name,c=Z(i);if(t==="left")o.providerTabIdx=o.providerTabIdx>0?o.providerTabIdx-1:o.clients.length-1;else if(t==="right")o.providerTabIdx=o.providerTabIdx<o.clients.length-1?o.providerTabIdx+1:0;else if(t==="up")o.providerRowIdx=o.providerRowIdx>0?o.providerRowIdx-1:r-1;else if(t==="down")o.providerRowIdx=o.providerRowIdx<r-1?o.providerRowIdx+1:0;else if(c&&(t==="d"||t==="e")&&o.providerRowIdx<u.length)o.providerSelectedId=u[o.providerRowIdx].id,o.providerDetailIdx=0,o.screen="provider-detail";else if(t==="return"){if(o.providerRowIdx<u.length&&e){let a=u[o.providerRowIdx];d(async()=>{await d0(e.id,a.id);let p;if(e.setupConfigFiles)try{await e.setupConfigFiles(_(a))}catch(l){p=l instanceof Error?l.message:String(l)}if(await Ji(o),await vi(o),o.clientIdx=o.clients.findIndex((l)=>l.client.id===e.id),o.clientIdx<0)o.clientIdx=0;Ai(o),o.message=p?o.zh?`\u670D\u52A1\u5546\u5DF2\u7ED1\u5B9A\uFF0C\u914D\u7F6E\u540C\u6B65\u5931\u8D25\uFF1A${p}`:`Provider bound, config sync failed: ${p}`:o.zh?"\u670D\u52A1\u5546\u5DF2\u7ED1\u5B9A":"Provider bound"});return}if(o.providerRowIdx===u.length)o.screen="provider-add-type",o.providerRowIdx=0;else if(o.providerRowIdx===u.length+1){d(async()=>{let a=await _o(),p=await Uo(a);if(p>0)U(),T();await Ji(o),await vi(o),o.message=o.zh?`\u626B\u63CF\u5B8C\u6210\uFF0C\u65B0\u589E ${p} \u4E2A`:`Scan complete, ${p} added`});return}else if(o.providerRowIdx===u.length+2){d(()=>Me(o));return}else Ai(o)}W(n,o)}function Rt(i,o,n,d,e){let u=fn(o);if(!u){o.screen="providers",W(n,o);return}let r=vd(u,o);if(i.name==="up"||i.name==="left")o.providerDetailIdx=o.providerDetailIdx>0?o.providerDetailIdx-1:r.length-1;else if(i.name==="down"||i.name==="right")o.providerDetailIdx=o.providerDetailIdx<r.length-1?o.providerDetailIdx+1:0;else if(i.name==="return"){let t=r[o.providerDetailIdx];if(t==="back")o.screen="providers";if(t==="default"){e(async()=>{await n0(u.id),await Ji(o),await vi(o),o.screen="providers",o.message=o.zh?"\u5DF2\u8BBE\u4E3A\u9ED8\u8BA4":"Set as default"});return}if(t==="delete"){e(async()=>{await o0(u.id),await Ji(o),await vi(o),o.screen="providers",o.message=o.zh?"\u5DF2\u5220\u9664":"Deleted"});return}if(t==="rekey")o.addType=u.type,ao(o,"rekey");if(t==="relogin"){d({type:"provider-login",tool:u.type==="codex-subscription"?"codex":"claude"});return}}W(n,o)}function Jt(i,o,n,d){if(i.name==="up")o.providerRowIdx=o.providerRowIdx>0?o.providerRowIdx-1:Co.length-1;else if(i.name==="down")o.providerRowIdx=o.providerRowIdx<Co.length-1?o.providerRowIdx+1:0;else if(i.name==="return"){if(o.addType=Co[o.providerRowIdx],o.addType==="claude-subscription"||o.addType==="codex-subscription"){d({type:"provider-login",tool:o.addType==="codex-subscription"?"codex":"claude"});return}ao(o,"add-key")}W(n,o)}function Bt(i,o,n,d){let e=i.name,u=o.providerInputMode==="add-model"?Eo(o.addType):void 0;if(u){if(e==="up")o.providerRowIdx=o.providerRowIdx>0?o.providerRowIdx-1:u.length-1;else if(e==="down")o.providerRowIdx=o.providerRowIdx<u.length-1?o.providerRowIdx+1:0;else if(e==="return"){o.addModel=u[o.providerRowIdx],d(()=>bn(o));return}W(n,o);return}if(e==="backspace"||e==="delete")qo(o);else if(e==="return"){if(o.providerInputMode==="rekey"){let r=fn(o);if(!r)return;d(async()=>{await Xi(r.id,{apiKey:o.addKey}),await Ji(o),await vi(o),o.screen="providers",o.message=o.zh?"Key \u5DF2\u66F4\u65B0":"Key updated"});return}if(o.providerInputMode==="add-key"&&o.addKey)if(o.addType==="custom")ao(o,"add-url");else ao(o,"add-model");else if(o.providerInputMode==="add-url")ao(o,"add-model");else if(o.providerInputMode==="add-model"){if(o.addModel.trim())ao(o,"add-ctx");else d(()=>bn(o));return}else if(o.providerInputMode==="add-ctx"){d(()=>bn(o));return}}else Oo(o,Qo(i));W(n,o)}function At(i,o,n,d){let e=i.name,u=o.agentSessions||[];if(e==="up")o.agentIdx=o.agentIdx>0?o.agentIdx-1:Math.max(0,u.length-1);else if(e==="down")o.agentIdx=o.agentIdx<u.length-1?o.agentIdx+1:0;else if(Z(i)&&e==="r"){d(()=>hi(o));return}else if(Z(i)&&e==="n")o.screen="agent-new",o.agentBackend="claude",o.agentModel="",o.agentName="",o.agentField="backend",o.agentError=void 0;else if((e==="return"||Z(i)&&e==="o")&&u[o.agentIdx]){d(()=>ze(o,u[o.agentIdx].sid));return}else if(Z(i)&&e==="p"){d(async()=>{let r=await pd();await hi(o),o.message=o.zh?`\u5DF2\u6E05\u7406 ${r} \u4E2A session`:`Purged ${r} sessions`});return}else if(Z(i)&&(e==="d"||e==="x")&&u[o.agentIdx]){let r=u[o.agentIdx];d(async()=>{await $o(r.sid,e==="x"),await hi(o),o.message=e==="x"?o.zh?"\u5DF2\u5220\u9664":"Purged":o.zh?"\u5DF2\u5173\u95ED":"Closed"});return}W(n,o)}function Yt(i,o,n,d){let e=i.name,u=o.agentDetailSid;if(!u){d(()=>hi(o));return}if(i.ctrl&&e==="c"){if(o.agentDetailStatus==="sending"){o.agentDetailStatus="cancelling",W(n,o),xn(u).catch((r)=>{o.agentError=r instanceof Error?r.message:String(r)}).finally(()=>{o.agentDetailStatus="idle",Bi(o).finally(()=>W(n,o))});return}d(()=>hi(o));return}if(i.ctrl&&(e==="y"||e==="n")){let r=o.agentPendingApprovals[0];if(!r)return;d(async()=>{await od(u,r.approvalId,{decision:e==="y"?"allow":"deny",by:"tui",decidedAt:Date.now()}),await Bi(o),o.message=e==="y"?o.zh?"\u5DF2\u6279\u51C6":"Approved":o.zh?"\u5DF2\u62D2\u7EDD":"Denied"});return}if(e==="escape"||Z(i)&&e==="q"&&!o.agentDetailInput){d(()=>hi(o));return}if(Z(i)&&e==="r"){d(()=>Bi(o));return}if(e==="backspace"||e==="delete"){qo(o),W(n,o);return}if(e==="return"){let r=o.agentDetailInput.trim();if(!r||o.agentDetailStatus!=="idle")return;o.agentDetailInput="",o.agentDetailStatus="sending",o.agentError=void 0,W(n,o),mn(u,r).catch((t)=>{o.agentError=t instanceof Error?t.message:String(t)}).finally(()=>{o.agentDetailStatus="idle",Bi(o).finally(()=>W(n,o))});return}Oo(o,Qo(i)),W(n,o)}function Ht(i,o,n,d){let e=i.name;if(e==="tab"||e==="down")o.agentField=o.agentField==="backend"?"model":o.agentField==="model"?"name":"backend";else if(e==="up")o.agentField=o.agentField==="backend"?"name":o.agentField==="model"?"backend":"model";else if((e==="space"||e==="left"||e==="right")&&o.agentField==="backend")o.agentBackend=o.agentBackend==="claude"?"codex":"claude";else if(e==="backspace"||e==="delete")qo(o);else if(e==="return"){d(async()=>{try{let u=await ln({backend:o.agentBackend,model:o.agentModel.trim()||void 0,name:o.agentName.trim()||void 0});await hi(o);let r=o.agentSessions?.findIndex((t)=>t.sid===u.sid)??-1;if(r>=0)o.agentIdx=r;o.message=o.zh?"Session \u5DF2\u521B\u5EFA":"Session created"}catch(u){o.agentError=u instanceof Error?u.message:String(u)}});return}else Oo(o,Qo(i));W(n,o)}function Tt(i,o,n,d){let e=i.name,u=Z(i);if(e==="left"){o.clientVersionsClientIdx=o.clientVersionsClientIdx>0?o.clientVersionsClientIdx-1:o.clients.length-1,d(()=>lo(o));return}if(e==="right"){o.clientVersionsClientIdx=o.clientVersionsClientIdx<o.clients.length-1?o.clientVersionsClientIdx+1:0,d(()=>lo(o));return}if(u&&e==="r"){d(()=>lo(o));return}let r=o.clientVersions.length-1;if(e==="up")o.clientVersionsIdx=o.clientVersionsIdx>0?o.clientVersionsIdx-1:Math.max(0,r);else if(e==="down")o.clientVersionsIdx=o.clientVersionsIdx<r?o.clientVersionsIdx+1:0;else if(e==="return"){let t=o.clientVersions[o.clientVersionsIdx];if(t&&!t.isCurrent){d(()=>Ge(o,t.version));return}}W(n,o)}var y1=["configure","skip","never"];function Xt(i,o,n,d){let e=i.name;if(e==="up")o.keyGuideIdx=o.keyGuideIdx>0?o.keyGuideIdx-1:2;else if(e==="down")o.keyGuideIdx=o.keyGuideIdx<2?o.keyGuideIdx+1:0;else if(e==="escape"){d(async()=>{await bd("skip"),Ai(o)});return}else if(e==="return"){let u=y1[o.keyGuideIdx];if(u==="configure"){o.screen="config",o.apiKeyValue="",o.apiKeyStatus="idle",o.apiKeyError=void 0,W(n,o);return}d(async()=>{await bd(u),Ai(o)});return}W(n,o)}Ao();async function Kt(i={}){let o=await yt();if(i.screen==="providers")await po(o);if(i.message)o.message=i.message;if(o.screen==="launcher")try{let{shouldShowKeyGuide:d}=await Promise.resolve().then(() => (Ao(),It));if(await d())o.screen="key-guide"}catch{}fd();let n=await f1({exitOnCtrlC:!1,clearOnShutdown:!0,useMouse:!0,enableMouseMovement:!1,backgroundColor:m.bg});return new Promise((d)=>{let e=!1,u=!1,r,t=async()=>{await new Promise((y)=>{let s=setTimeout(y,100);s.unref?.(),n.once(s1.DESTROY,()=>{clearTimeout(s),y()}),n.stop(),n.destroy()})},c=(y)=>{if(e)return;if(e=!0,r)clearInterval(r);n.keyInput.off("keypress",l),(async()=>{await t(),await vt(),d(y)})()},a=(y)=>{if(o.busy)return;o.busy=!0,W(n,o),y().catch((s)=>{o.message=`! ${s instanceof Error?s.message:String(s)}`}).finally(()=>{o.busy=!1,W(n,o)})},p=(y)=>{if(n.terminalHeight>=yn)return!1;let s=Math.max(1,n.terminalHeight-2);return o.scrollOffset=Math.max(0,o.scrollOffset+y*s),W(n,o),!0},l=(y)=>{if(y.eventType==="release"||o.busy)return;let s=y.name,b=Qo(y),f=Z(y);if(s==="pagedown"&&p(1))return;if(s==="pageup"&&p(-1))return;if(o.screen==="agent-detail"){Yt(y,o,n,a);return}if(y.ctrl&&s==="c"){c({type:"exit"});return}if(o.screen==="client-versions"){if(s==="escape"||f&&s==="q"){a(()=>po(o));return}Tt(y,o,n,a);return}if(o.screen==="key-guide"){Xt(y,o,n,a);return}if(o.screen==="launcher"){Qt(y,o,n,c,a);return}if(o.screen==="option-picker"){qt(y,o,n);return}if(s==="escape"||f&&s==="q"){if(o.screen==="provider-detail"||o.screen==="provider-add-type"||o.screen==="provider-input")o.screen="providers";else if(o.screen==="agent-new")o.screen="agents";else Ai(o);W(n,o);return}if(o.screen==="providers"){Ot(y,o,n,a);return}if(o.screen==="provider-detail"){Rt(y,o,n,c,a);return}if(o.screen==="provider-add-type"){Jt(y,o,n,c);return}if(o.screen==="provider-input"){Bt(y,o,n,a);return}if(o.screen==="stats"){if(f&&s==="r")a(()=>hn(o));return}if(o.screen==="config"){if(s==="backspace"||s==="delete")qo(o);else if(s==="return")a(async()=>{if(!o.apiKeyValue)return;o.apiKeyStatus="validating",W(n,o);let h=await at(o.apiKeyValue);if(h.success)U(),T(),o.apiKeyStatus="success",await vi(o);else o.apiKeyStatus="error",o.apiKeyError=h.error||"Validation failed"});else Oo(o,b);W(n,o);return}if(o.screen==="language"){if(s==="up")o.languageIdx=o.languageIdx>0?o.languageIdx-1:Fi.length-1;if(s==="down")o.languageIdx=o.languageIdx<Fi.length-1?o.languageIdx+1:0;if(s==="return"){let h=Fi[o.languageIdx];Dd(h.value),o.zh=h.value==="zh",o.message=o.zh?"\u8BED\u8A00\u5DF2\u5207\u6362":"Language changed",a(()=>vi(o).then(()=>Ai(o)));return}W(n,o);return}if(o.screen==="agents"){At(y,o,n,a);return}if(o.screen==="agent-new")Ht(y,o,n,a)};n.keyInput.on("keypress",l),n.on("resize",()=>W(n,o));let x=!1,w=()=>{if(e||x||o.screen!=="launcher")return;let y=o.clients[o.clientIdx]?.activeProvider;if((y?`${y.id}:${y.type}`:void 0)===o.quotaKey)return;x=!0,ke(o).catch(()=>{}).finally(()=>{if(x=!1,!e&&o.screen==="launcher")W(n,o)})};r=setInterval(()=>{if(w(),e||u||o.busy||o.screen!=="agent-detail"||!o.agentDetailSid)return;u=!0,Bi(o).catch((y)=>{o.agentError=y instanceof Error?y.message:String(y)}).finally(()=>{if(u=!1,!e&&o.screen==="agent-detail")W(n,o)})},1000),r.unref?.(),xe(o),W(n,o),n.start()})}Ao();E();H();xi();Ci();ai();C();ai();var v1=2000,Vt=100;function Mi(i){if(Ho||process.env.TAKO_DEBUG==="1")process.stderr.write(`[announcements] ${i}
564
- `)}function Zt(i){if(!i)return null;if(i.type!=="tako"&&i.type!=="custom")return null;if(!i.baseUrl||!i.apiKey)return null;return{baseUrl:i.baseUrl.replace(/\/+$/,""),apiKey:i.apiKey}}async function h1(i,o){let n=`${i}/v1/announcements/popup`;try{let d=await fetch(n,{headers:{Authorization:`Bearer ${o}`},signal:AbortSignal.timeout(v1)});if(!d.ok)return Mi(`HTTP ${d.status} from ${n}\uFF08par \u53EF\u80FD\u672A\u90E8\u7F72\u65B0\u8DEF\u7531 /v1/announcements/popup\uFF09`),null;let u=(await d.json())?.announcement;if(!u)return Mi("\u8FD4\u56DE announcement=null\uFF08par \u540E\u53F0\u6CA1\u6709 published+popup=true \u7684\u516C\u544A\uFF09"),null;if(typeof u.id!=="string"||typeof u.title!=="string")return Mi(`payload \u7F3A id/title\uFF0C\u4E22\u5F03\uFF1A${JSON.stringify(u)}`),null;return Mi(`\u62C9\u5230\u516C\u544A id=${u.id} title=${u.title} popup_once=${!!u.popup_once}`),{id:u.id,title:u.title,content:u.content??"",type:u.type,popup_once:!!u.popup_once}}catch(d){return Mi(`fetch \u5931\u8D25\uFF1A${d instanceof Error?d.message:String(d)}`),null}}async function b1(i){return((await z()).seenAnnouncementIds??[]).includes(i)}async function L1(i){let o=await z(),n=o.seenAnnouncementIds??[];if(n.includes(i))return;let d=[...n,i];if(d.length>Vt)d.splice(0,d.length-Vt);o.seenAnnouncementIds=d,await K(o)}async function N1(){let i=Zt(await ei());if(i)return i;for(let o of await V()){let n=Zt(o);if(n)return n}return null}async function Ft(){let i=await N1();if(!i){Mi("\u8DF3\u8FC7\uFF1A\u6CA1\u6709\u53EF\u7528\u7684 tako/custom provider\uFF08apiKey + baseUrl\uFF09");return}Mi(`\u67E5\u8BE2\u516C\u544A\uFF1A${i.baseUrl}/v1/announcements/popup`);let o=await h1(i.baseUrl,i.apiKey);if(!o)return;if(o.popup_once&&await b1(o.id)){Mi(`\u5DF2\u5728 seenAnnouncementIds\uFF0C\u8DF3\u8FC7\uFF1A${o.id}`);return}if(Mi(`\u5F39\u7A97\uFF1A${o.id}`),await Hu(o),o.popup_once)await L1(o.id),Mi(`\u6807\u8BB0\u5DF2\u770B\u8FC7\uFF1A${o.id}`)}fo();async function Et(){await e0(),await u0(),await br(),await Promise.race([Td(await V()),new Promise((i)=>setTimeout(i,3000))]),await Ft()}async function _t(i){let o=oi(i.clientId);if(!o)return!1;O("menu_action",{action:"launch",client_id:i.clientId});let n=await Fn(i.clientId);if(!n)return L.warn(g("cli.noProvider")||"\u672A\u914D\u7F6E\u53EF\u7528\u7684\u670D\u52A1\u5546"),!1;let e=process.platform==="win32"&&!!process.env.TAKO_WINDOWS_HANDOFF_FILE,u=await Hn(o,{projectPath:i.projectPath,args:i.args,envVars:i.envVars,selectedOptionIds:i.selectedOptionIds,providerContext:n,relaunchTakoOnWindows:e});if(!u.success)return L.error(u.error||g("cli.launchFailed")),!1;if(e)return!0;return!1}async function Ut(){await Et();let i;while(!0){let o=await Kt(i);if(i=void 0,!o)break;if(o.type==="exit")break;if(o.type==="provider-login"){let d=Ii()==="zh",e=o.tool==="claude"?"Claude":"Codex";L.info(d?`\u6B63\u5728\u6253\u5F00 ${e} \u5B98\u65B9\u767B\u5F55\uFF0C\u8BF7\u5728\u6D4F\u89C8\u5668\u4E2D\u5B8C\u6210\u6388\u6743...`:`Opening ${e} login; complete authorization in the browser...`);let u=await ge(o.tool),r=await $e(o.tool,d),t=r.message;if(!r.ok&&u.error)t=u.error;else if(!r.ok&&!u.ok&&u.exitCode!=null)t=d?`${e} \u767B\u5F55\u672A\u5B8C\u6210\uFF08\u9000\u51FA\u7801 ${u.exitCode}\uFF09`:`${e} login did not complete (exit ${u.exitCode})`;if(r.ok)L.success(r.message);else L.warn(t);i={screen:"providers",message:r.ok?r.message:`! ${t}`};continue}if(o.type!=="launch")continue;if(await _t(o))process.exit(0)}}await ct(Ut);
561
+ `)}async function Qm(i){let[o,n]=i;if(!o)console.error("\u7528\u6CD5: tako install <client> [version]"),console.error(" tako install claude-code # \u5217\u51FA\u6240\u6709\u53EF\u7528\u7248\u672C"),console.error(" tako install claude-code 1.0.5 # \u5B89\u88C5\u6307\u5B9A\u7248\u672C"),process.exit(1);let d=oi(o);if(!d)console.error(`\u672A\u77E5 client: ${o}`),process.exit(1);if(!n){try{let e=await B0(d.package),u=await A0(d),r=e.slice(0,30);console.log(`${d.name} (${d.package}) \u6700\u8FD1 ${r.length} \u4E2A\u7248\u672C\uFF1A`);for(let t of r){let c=t.version===u?" \u2190 \u5F53\u524D":"",a=t.publishedAt?` ${t.publishedAt.slice(0,10)}`:"";console.log(` ${t.version}${a}${c}`)}console.log(`
562
+ \u5B89\u88C5\uFF1Atako install ${o} <version>`)}catch(e){console.error("\u83B7\u53D6\u7248\u672C\u5217\u8868\u5931\u8D25:",e.message),process.exit(1)}return}console.log(`\u6B63\u5728\u5B89\u88C5 ${d.package}@${n} \u5230 ${d.id}...`);try{await Y0(d,n),console.log(`\u2713 ${d.name} \u5DF2\u5207\u6362\u5230 ${n}`)}catch(e){console.error("\u5B89\u88C5\u5931\u8D25:",e.message),process.exit(1)}}async function me(i,o,n){let d=oi(i);if(!d)console.error(g("cli.clientNotFound",{client:o})),process.exit(1);let e=await En(i);if(!e)console.error("\u672A\u914D\u7F6E\u53EF\u7528\u7684\u670D\u52A1\u5546"),process.exit(1);let u=await Hn(d,{providerContext:e,args:n,handoffOnWindows:!0});if(!u.success)console.error(u.error),process.exit(1);process.exit(u.exitCode??0)}async function qm(i){let o=process.argv.slice(2);if(o[0]==="statusline"){Ni(),await Nr();return}if(o[0]==="install"){await Qm(o.slice(1));return}if(o[0]==="quota"){let{runQuotaCommand:d}=await Promise.resolve().then(() => ($r(),gr)),e=await d(o.slice(1));if(e!==0)process.exit(e);return}if(o[0]==="agent"){Ni();let{runAgentCommand:d}=await Promise.resolve().then(() => (et(),dt));await d(o.slice(1));return}if(o[0]==="skill"){let{runSkillCommand:d}=await Promise.resolve().then(() => (tt(),rt));await d(o.slice(1));return}if(o[0]==="models"){let{runModelsCommand:d}=await Promise.resolve().then(() => (pt(),at)),e=await d(o.slice(1));if(e!==0)process.exit(e);return}if(o.includes("-v")||o.includes("--version")){console.log(`Tako CLI v${vd}`);return}if(o.includes("-h")||o.includes("--help")){Im();return}let n=vd==="dev"||Xo;if(H(),O("cli_started"),o.includes("--claude")){if(sd(n))await nn();await me("claude-code","Claude Code",await _n("claude-code",o,"--claude"));return}if(o.includes("--codex")){if(sd(n))await nn();await me("codex","Codex",await _n("codex",o,"--codex"));return}if(o.includes("--gemini")){if(sd(n))await nn();await me("gemini","Gemini CLI",await _n("gemini",o,"--gemini"));return}if(sd(n))await nn();if(R0().catch(()=>{}),Ni(),Yd().catch(()=>{}),!process.stdin.isTTY){console.log("Tako CLI v"+vd),console.log(`
563
+ \u5B89\u88C5\u6210\u529F\uFF01\u8BF7\u5728\u7EC8\u7AEF\u4E2D\u76F4\u63A5\u8FD0\u884C tako \u542F\u52A8\u4EA4\u4E92\u754C\u9762\u3002`),console.log(" tako \u2014 \u4EA4\u4E92\u5F0F\u542F\u52A8\u5668"),console.log(" tako --help \u2014 \u67E5\u770B\u6240\u6709\u547D\u4EE4");return}await i()}async function lt(i){process.on("beforeExit",async()=>{await jo()}),process.on("SIGINT",async()=>{await jo(),process.exit(0)}),process.on("SIGTERM",async()=>{await jo(),process.exit(0)});try{await qm(i)}catch(o){console.error(g("cli.cliError"),o),await jo(),process.exit(1)}}X();Ci();X();import{CliRenderEvents as L1,createCliRenderer as N1}from"@opentui/core";C();X();xi();ai();Si();function Om(i){return i.startsWith("cr_")&&i.length>10}async function Jm(i){try{let n=await(await fetch(`${A}/apiStats/api/get-key-id`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:i})})).json();if(n.success&&n.data?.id)return{valid:!0,apiId:n.data.id};return{valid:!1,error:n.error||g("auth.validationFailed")}}catch(o){return{valid:!1,error:o instanceof Error?o.message:g("auth.networkError")}}}async function mt(i){if(!Om(i))return O("api_key_validated",{success:!1,error_type:"invalid_format"}),{success:!1,error:g("auth.invalidFormat")};let o=await Jm(i);if(!o.valid)return O("api_key_validated",{success:!1,error_type:"api_validation_failed"}),{success:!1,error:o.error};return await Ui({apiKey:i,apiId:o.apiId}),await Rm(i,o.apiId),O("api_key_validated",{success:!0}),U(),H(),{success:!0}}async function Rm(i,o){let d=(await V()).find((e)=>e.type==="tako");if(d)await Zi(d.id,{apiKey:i,apiId:o});else await eo({name:"Tako \u5B98\u65B9",type:"tako",apiKey:i,baseUrl:A,apiId:o,supportedClients:di("tako"),builtin:!0})}xi();Io();fd();Io();function bt(){try{if(process.stdin.removeAllListeners(),process.stdin.isTTY)process.stdin.setRawMode(!1);process.stdin.pause()}catch{}}function hd(){if(!process.stdout.isTTY)return;try{process.stdout.write("\x1B[?1000l\x1B[?1002l\x1B[?1003l\x1B[?1005l\x1B[?1006l\x1B[?1015l\x1B[?1049l\x1B[?2004l\x1B[0m\x1B[?25h")}catch{}}async function Lt(){bt(),hd(),await new Promise((i)=>setTimeout(i,30)),bt(),hd()}function Qo(i){if(i.ctrl||i.meta||i.option)return"";if(i.sequence&&i.sequence.length===1&&i.sequence>=" ")return i.sequence;if(i.name&&i.name.length===1)return i.name;return""}function T(i){return!i.ctrl&&!i.meta&&!i.option}function se(i){if(!i)return"";if(i.length<=8)return"*".repeat(i.length);return`${i.slice(0,4)}${"*".repeat(Math.min(i.length-8,20))}${i.slice(-4)}`}function fn(i){return i.providers.find((o)=>o.id===i.providerSelectedId)}function bd(i,o){let n=i.type==="claude-subscription"||i.type==="codex-subscription";return[...i.id!==o.defaultProviderId?["default"]:[],...n?["relogin"]:["rekey"],...i.builtin?[]:["delete"],"back"]}function Nt(i,o){return{default:o?"\u8BBE\u4E3A\u9ED8\u8BA4":"Set default",rekey:o?"\u66F4\u65B0 Key":"Update key",relogin:o?"\u91CD\u65B0\u767B\u5F55":"Re-login",delete:o?"\u5220\u9664":"Delete",back:o?"\u8FD4\u56DE":"Back"}[i]}function ve(i){let o=Math.floor(i/1000);if(o<60)return`${o}s`;if(o<3600)return`${Math.floor(o/60)}m`;if(o<86400)return`${Math.floor(o/3600)}h`;return`${Math.floor(o/86400)}d`}function fe(i){switch(i){case"running":return m.yellow;case"awaiting_approval":return m.magenta;case"idle":return m.green;case"closed":return m.gray;case"dead":return m.red;default:return m.text}}function Wt(i){switch(i){case"running":return"~";case"awaiting_approval":return"?";case"idle":return"*";case"dead":return"!";default:return"-"}}function qo(i){if(i.screen==="config"){i.apiKeyValue=i.apiKeyValue.slice(0,-1),i.apiKeyStatus="idle";return}if(i.screen==="agent-new"){if(i.agentField==="model")i.agentModel=i.agentModel.slice(0,-1);if(i.agentField==="name")i.agentName=i.agentName.slice(0,-1);return}if(i.screen==="agent-detail"){i.agentDetailInput=i.agentDetailInput.slice(0,-1);return}switch(i.providerInputMode){case"add-key":case"rekey":i.addKey=i.addKey.slice(0,-1);break;case"add-url":i.addUrl=i.addUrl.slice(0,-1);break;case"add-model":i.addModel=i.addModel.slice(0,-1);break;case"add-ctx":i.addCtx=i.addCtx.slice(0,-1);break}}function Oo(i,o){if(!o)return;if(i.screen==="config"){i.apiKeyValue+=o,i.apiKeyStatus="idle";return}if(i.screen==="agent-new"){if(i.agentField==="model")i.agentModel+=o;if(i.agentField==="name")i.agentName+=o;return}if(i.screen==="agent-detail"){i.agentDetailInput+=o;return}switch(i.providerInputMode){case"add-key":case"rekey":i.addKey+=o;break;case"add-url":i.addUrl+=o;break;case"add-model":i.addModel+=o;break;case"add-ctx":if(/^[0-9]$/.test(o))i.addCtx+=o;break}}Si();X();he();import{BoxRenderable as Km,ScrollBoxRenderable as Vm,TextAttributes as R,TextRenderable as Tm}from"@opentui/core";function Bm(i){let o=i.codePointAt(0);if(!o)return!1;return o>=19968&&o<=40959||o>=13312&&o<=19903||o>=131072&&o<=191471||o>=63744&&o<=64255||o>=194560&&o<=195103||o>=44032&&o<=55215||o>=12352&&o<=12447||o>=12448&&o<=12543||o>=65280&&o<=65519||o>=126976&&o<=131071||o>=9728&&o<=10175||o===11088}function Ym(i){return i.replace(/\x1b\[[0-9;]*m/g,"")}function hn(i){let o=Ym(i),n=0;for(let d of o)n+=Bm(d)?2:1;return n}function gt(i,o,n="left"){let d=hn(i),e=Math.max(0,o-d);if(e===0)return i;switch(n){case"left":return i+" ".repeat(e);case"right":return" ".repeat(e)+i;case"center":{let u=Math.floor(e/2),r=e-u;return" ".repeat(u)+i+" ".repeat(r)}}}var Gt=6,St=4,Le=16,Am=12;function Jo(i,o,n){if(!i.some((c)=>(n[c.id]??0)>0))return{list:i,hiddenCount:0};let e=new Map(i.map((c,a)=>[c.id,a])),u=i.filter((c)=>(n[c.id]??0)>0).sort((c,a)=>{let p=(n[a.id]??0)-(n[c.id]??0);if(p!==0)return p;return(e.get(c.id)??0)-(e.get(a.id)??0)}).slice(0,Gt).map((c)=>c.id),r=new Set(u);for(let c of i)if(o.has(c.id))r.add(c.id);let t=i.filter((c)=>r.has(c.id));return{list:t,hiddenCount:i.length-t.length}}function Ne(i,o){return!i.some((d)=>(o[d.id]??0)>0)&&i.length>Gt?"grid":"collapsed"}function Xm(i,o){if(i.length===0)return 1;let n=Math.max(...i.map((u)=>hn(u))),d=Math.max(Le,n+4),e=Math.max(d,o-Am);return Math.max(1,Math.min(St,i.length,Math.floor(e/d)))}function Ro(i,o,n){let d=i.map((e)=>e.label[n?"zh":"en"]||e.label.en||e.id);return Xm(d,o)}function Hm(i,o){let n=Math.max(1,Math.min(St,Math.floor(o)||1)),d=[];for(let e=0;e<i.length;e+=n)d.push(i.slice(e,e+n));return{rows:d,flat:d.flat()}}function Ld(i){return i.startsWith("model-")?i.slice(6):i}function be(i){let o=Ld(i).toLowerCase();return o.replace(/^(?:full[-_]|\u6EE1\u8840[-_])+/u,"").slice(0,3)||o.slice(0,3)||o}function $t(i){let o=["gpt","ful","cla","dee","glm","kim","qwe","min","mim","spa"],n=o.indexOf(i);return n===-1?o.length:n}function Mt(i){let o=Ld(i).toLowerCase(),n=[];for(let d of o.match(/\d+(?:\.\d+)?|[a-z]+/g)??[o]){let e=Number(d);n.push(Number.isFinite(e)&&/^\d/.test(d)?e:d)}return n}function Zm(i,o){let n=be(i),d=be(o),e=$t(n)-$t(d)||n.localeCompare(d);if(e!==0)return e;let u=Mt(i),r=Mt(o),t=Math.max(u.length,r.length);for(let c=0;c<t;c++){let a=u[c],p=r[c];if(a===void 0)return 1;if(p===void 0)return-1;if(typeof a==="number"&&typeof p==="number"){if(a!==p)return p-a;continue}let l=String(a),x=String(p);if(l!==x)return l.localeCompare(x)}return Ld(i).localeCompare(Ld(o))}function Bo(i,o){let n=[...i].sort(Zm),d=[];for(let u of n){let r=be(u),t=d[d.length-1];if(t?.family===r)t.ids.push(u);else d.push({family:r,ids:[u]})}let e=d.map((u)=>({family:u.family,rows:Hm(u.ids,o).rows}));return{groups:e,flat:e.flatMap((u)=>u.rows.flat())}}function We(i,o,n){return Bo(i,n).flat.indexOf(o)}function Pt(i,o){return Bo(i,o).groups.flatMap((n)=>n.rows)}Io();function Fm(i){for(let o of[...i.root.getChildren()])i.root.remove(o)}function P(i,o){return new Km(i,o)}function ke(i){return i.terminalHeight<sn}function ze(i){return ke(i)?{minHeight:sn}:{height:"100%"}}function Z(i,o,n){if(!ke(i)){i.root.add(n);return}let d=new Vm(i,{width:"100%",height:"100%",scrollY:!0,scrollX:!1,viewportCulling:!1});if(d.add(n),i.root.add(d),o.scrollOffset>0)d.scrollTop=o.scrollOffset,process.nextTick(()=>{d.scrollTop=o.scrollOffset,i.requestRender()})}function Em(i,o,n={}){return new Tm(i,{content:o,fg:m.text,selectable:!1,...n})}function f(i,o,n,d={}){let e=Em(o,n,d);return i.add(e),e}function F(i,o,n){let d=P(i,{flexDirection:"row",flexWrap:"wrap",gap:2,paddingX:2,paddingY:0,marginTop:1,height:1,justifyContent:"center"});n.forEach(([e,u])=>{let r=P(i,{flexDirection:"row",gap:1});f(r,i,e,{fg:m.orange,attributes:R.BOLD}),f(r,i,u,{fg:m.muted}),d.add(r)}),o.add(d)}function _m(i,o,n,d=m.orange){let e=i.terminalHeight;if(e<30)return;let u=P(i,{flexDirection:"column",alignItems:"center",marginBottom:1}),r=e>=36?xt:wt;if(f(u,i,r,{fg:d,attributes:R.BOLD,selectable:!1}),n&&e>=34)f(u,i,n,{fg:m.muted});o.add(u)}function pi(i,o,n){let d=P(i,{flexDirection:"column",gap:0});for(let e of n){let u=P(i,{flexDirection:"row",justifyContent:"space-between",backgroundColor:e.focused?m.panelMuted:m.panel,paddingX:1,height:1}),r=P(i,{flexDirection:"row",gap:1,flexGrow:1});if(f(r,i,e.focused?">":" ",{fg:e.focused?e.color||m.orange:m.muted,attributes:e.focused?R.BOLD:R.NONE}),e.marker)f(r,i,e.marker,{fg:e.color||m.orange});if(f(r,i,e.primary,{fg:e.focused?e.color||m.orange:m.text,attributes:e.focused?R.BOLD:R.NONE,truncate:!0}),u.add(r),e.secondary)f(u,i,e.secondary,{fg:m.muted,truncate:!0});d.add(u)}o.add(d)}function ti(i,o,n,d=m.orange,e={text:`tako ${xe}`,color:m.muted},u=!1){let r=P(i,{flexDirection:"column",width:"100%",...ze(i),backgroundColor:m.bg,paddingX:1,paddingY:1}),t=P(i,{flexDirection:"column",border:!0,borderStyle:"rounded",borderColor:d,backgroundColor:m.panel,paddingX:2,paddingY:1,gap:1,flexGrow:u?1:0}),c=P(i,{flexDirection:"row",justifyContent:"space-between"});if(f(c,i,n,{fg:d,attributes:R.BOLD}),f(c,i,e.text,{fg:e.color||m.muted,truncate:!0}),t.add(c),o.message)f(t,i,o.message,{fg:o.message.startsWith("!")?m.red:m.green});return r.add(t),{root:r,panel:t}}function W(i,o){if(Fm(i),o.scrollScreen!==o.screen)o.scrollScreen=o.screen,o.scrollOffset=0;else if(!ke(i)&&o.scrollOffset!==0)o.scrollOffset=0;switch(o.screen){case"launcher":Qt(i,o);break;case"providers":d1(i,o);break;case"provider-detail":e1(i,o);break;case"provider-add-type":u1(i,o);break;case"provider-input":r1(i,o);break;case"stats":t1(i,o);break;case"config":c1(i,o);break;case"language":a1(i,o);break;case"option-picker":o1(i,o);break;case"agents":p1(i,o);break;case"agent-detail":m1(i,o);break;case"agent-new":x1(i,o);break;case"key-guide":y1(i,o);break;case"client-versions":s1(i,o);break}i.requestRender()}var Ct={tako:{zh:"Tako \u4EE3\u7406",en:"Tako Proxy",color:m.cyan,icon:"\uD83D\uDC19"},"claude-subscription":{zh:"Claude \u5B98\u65B9",en:"Claude Official",color:m.yellow,icon:"\u2726"},"codex-subscription":{zh:"Codex \u5B98\u65B9",en:"Codex Official",color:m.blue,icon:"\u25C8"},anthropic:{zh:"Anthropic \u76F4\u8FDE",en:"Anthropic Direct",color:m.yellow,icon:"\u2726"},deepseek:{zh:"DeepSeek",en:"DeepSeek",color:m.magenta,icon:"\u25C7"},xiaomi:{zh:"\u5C0F\u7C73 MiMo",en:"Xiaomi MiMo",color:m.orange,icon:"\u25C6"},custom:{zh:"\u81EA\u5B9A\u4E49",en:"Custom",color:m.gray,icon:"\u25AA"}};function Um(i){if(!i)return"";let[o,n]=i.split("@");if(o&&n&&o.length>14)return`${o.slice(0,12)}\u2026@${n}`;return i}function Dm(i,o,n){let d=n.clients[n.clientIdx]?.activeProvider;if(!d){f(o,i,`\u26A0 ${n.zh?"\u672A\u7ED1\u5B9A":"no provider"}`,{fg:m.yellow});return}let e=Ct[d.type]??Ct.custom;f(o,i,`${e.icon} ${n.zh?e.zh:e.en}`,{fg:e.color});let u=Um(d.email??"");if(u)f(o,i,`\xB7 ${u}`,{fg:m.muted,truncate:!0})}function jm(i){return i>30?m.green:i>10?m.yellow:m.red}function i1(i,o){if(!i||i.status==="unsupported")return null;if(i.status==="error")return{text:`\uD83D\uDCB0 ${i.hint||(o?"\u7528\u91CF\u83B7\u53D6\u5931\u8D25":"quota unavailable")}`,color:m.muted};if(i.provider==="tako"){if(!(i.primary?.costLimit||i.secondary?.costLimit||i.daily?.costLimit)){let t=i.daily??i.primary??i.secondary;if(!t)return null;return{text:`\uD83D\uDCB0 ${o?"\u4ECA\u65E5":"Today"}: $${(t.costUsed??0).toFixed(2)}`,color:m.green}}}let n=(r,t,c)=>{if(r&&r>=1440)return`${Math.round(r/1440)}d`;if(r)return`${Math.round(r/60)}h`;return c?`${c}d`:`${t}h`},d=(r)=>Math.max(0,Math.min(100,100-Math.round(r))),e=[];if(i.primary)e.push(`${n(i.primary.windowMinutes,5)} ${o?"\u5269":"left"} ${d(i.primary.usedPct)}%`);if(i.secondary)e.push(`${n(i.secondary.windowMinutes,24,7)} ${o?"\u5269":"left"} ${d(i.secondary.usedPct)}%`);if(i.modelLimits?.opus)e.push(`opus ${o?"\u5269":"left"} ${d(i.modelLimits.opus.usedPct)}%`);if(!e.length)return null;let u=Math.min(...[i.primary,i.secondary,i.modelLimits?.opus].filter(Boolean).map((r)=>d(r.usedPct)));return{text:`\uD83D\uDCB0 ${e.join(" \xB7 ")}`,color:jm(u)}}function Qt(i,o){let n=o.clients[o.clientIdx];if(!n)return;let d=So[n.client.id]||Po,e=co(n.launchOptions,o.zh),u=n.activeProvider?.name||(o.zh?"\u672A\u914D\u7F6E":"Not set"),r=i.terminalHeight<26,c=`${`${o.zh?"\u670D\u52A1\u5546":"Provider"}: ${u}`} \xB7 tako ${xe}`,{root:a,panel:p}=ti(i,o,"Tako Launcher",d.color,r?{text:c,color:n.activeProvider?m.orange:m.yellow}:void 0,r);if(_m(i,p,o.zh?"\u591A\u5BA2\u6237\u7AEF AI \u542F\u52A8\u5668":"Multi-client AI launcher",d.color),!r){let v=P(i,{flexDirection:"row",gap:1,justifyContent:"space-between"}),h=P(i,{flexDirection:"row",gap:1});Dm(i,h,o),v.add(h);let M=i1(o.quota,o.zh);if(M)f(v,i,M.text,{fg:M.color,truncate:!0});p.add(v)}let l=P(i,{flexDirection:"row",flexWrap:"wrap",gap:1,justifyContent:"center"}),x=o.focus==="tabs";o.clients.forEach((v,h)=>{let M=So[v.client.id]||Po,k=h===o.clientIdx,B=P(i,{border:!0,borderStyle:k&&x?"heavy":"single",borderColor:k?M.color:m.border,paddingX:1,height:3,backgroundColor:k&&x?m.panelMuted:m.panel});f(B,i,`${k&&x?"> ":""}${h+1} ${M.icon} ${v.client.name}`,{fg:k?M.color:m.muted,attributes:k?R.BOLD:R.NONE}),l.add(B)}),p.add(l);let w=P(i,{flexDirection:"row",gap:2,flexGrow:r?1:0}),y=P(i,{flexDirection:"column",border:!0,borderStyle:"rounded",borderColor:o.focus==="projects"?d.color:m.border,title:o.zh?"\u9879\u76EE":"Projects",titleColor:o.focus==="projects"?d.color:m.muted,paddingX:1,paddingY:1,width:"58%"});pi(i,y,n.projects.map((v,h)=>({primary:v.label,secondary:v.hint,focused:o.focus==="projects"&&h===o.projectIdx,color:d.color})));let s=P(i,{flexDirection:"column",border:!0,borderStyle:"rounded",borderColor:o.focus==="options"?d.color:m.border,title:o.zh?"\u542F\u52A8\u9009\u9879":"Options",titleColor:o.focus==="options"?d.color:m.muted,paddingX:1,paddingY:1,flexGrow:1});pi(i,s,e.map((v,h)=>{let M=o.focus==="options"&&h===o.optionIdx;if(v.kind==="flag"){let k=n.enabled.has(v.opt.id);return{primary:v.opt.label[o.zh?"zh":"en"]||v.opt.label.en,secondary:M?v.opt.flag:void 0,focused:M,marker:k?"[x]":"[ ]",color:k?d.color:m.muted}}if(v.kind==="group"){let k=Ei(n.launchOptions,n.enabled,v.group);return{primary:`${v.title}: ${k?.shortLabel||(o.zh?"\u9ED8\u8BA4":"Default")}`,secondary:M?o.zh?"Enter \u9009\u62E9":"Enter to pick":void 0,focused:M,marker:">",color:d.color}}return{primary:`${v.title}: ${u}`,secondary:M?o.zh?"Enter \u7BA1\u7406":"Enter to manage":void 0,focused:M,marker:"*",color:n.activeProvider?d.color:m.yellow}})),w.add(y),w.add(s),p.add(w);let b=o.focus==="tabs"?["\u2190\u2192",o.zh?"\u5207\u5BA2\u6237\u7AEF":"switch client"]:o.focus==="projects"?["\u2192",o.zh?"\u53BB\u9009\u9879":"to options"]:["\u2190",o.zh?"\u53BB\u9879\u76EE":"to projects"];F(i,a,[["Enter",o.zh?"\u542F\u52A8":"launch"],b,["\u2191\u2193",o.zh?"\u9009\u62E9":"move"],["Space",o.zh?"\u5207\u6362\u9009\u9879":"toggle"],["p",o.zh?"\u670D\u52A1\u5546":"providers"],["c","config"],["s","stats"],["a","agents"],["q",o.zh?"\u9000\u51FA":"quit"]]),Z(i,o,a)}function o1(i,o){let n=o.clients[o.clientIdx],d=o.optionPickerGroup;if(!n||!d){Qt(i,o);return}let e=n.launchOptions.filter((h)=>h.group===d),u=(So[n.client.id]||Po).color,r=d==="model"?o.zh?"\u9009\u62E9\u6A21\u578B":"Pick Model":o.zh?"\u9009\u62E9\u9009\u9879":"Pick Option",t=Ei(n.launchOptions,n.enabled,d),c=d==="model";if(c&&o.modelPickerMode==="grid"){n1(i,o,n,e,u,r);return}let a=c?Jo(e,n.enabled,o.pickCounts):{list:e,hiddenCount:0},p=[{id:"",primary:o.zh?"\u9ED8\u8BA4":"Default",secondary:t?"":o.zh?"\u5F53\u524D":"current"},...a.list.map((h)=>({id:h.id,primary:h.shortLabel||h.label[o.zh?"zh":"en"]||h.label.en,secondary:n.enabled.has(h.id)?o.zh?"\u5F53\u524D":"current":h.flag})),...a.hiddenCount>0?[{id:"__show_all__",primary:o.zh?`\u663E\u793A\u5168\u90E8 (${a.hiddenCount})`:`Show all (${a.hiddenCount})`,secondary:">"}]:[]],l=p.length;o.optionPickerIdx=Math.max(0,Math.min(o.optionPickerIdx,l-1));let x=Math.max(5,Math.min(14,i.terminalHeight-10)),w=Math.max(0,Math.min(o.optionPickerIdx-Math.floor(x/2),Math.max(0,l-x))),y=p.slice(w,w+x),s=P(i,{flexDirection:"column",width:"100%",...ze(i),backgroundColor:m.bg,justifyContent:"center",alignItems:"center",paddingX:2}),b=P(i,{flexDirection:"column",border:!0,borderStyle:"rounded",borderColor:u,backgroundColor:m.panel,paddingX:2,paddingY:1,gap:1,width:"70%"}),v=P(i,{flexDirection:"row",justifyContent:"space-between"});f(v,i,r,{fg:u,attributes:R.BOLD}),f(v,i,`${o.optionPickerIdx+1}/${l}`,{fg:m.muted}),b.add(v),pi(i,b,y.map((h,M)=>{let k=w+M;return{primary:h.primary,secondary:h.secondary,focused:k===o.optionPickerIdx,marker:h.id&&n.enabled.has(h.id)?"[x]":" ",color:u}})),f(b,i,o.zh?"Esc \u8FD4\u56DE\uFF0C\u4E0D\u4FEE\u6539\u5F53\u524D\u9009\u62E9":"Esc returns without changing the current selection",{fg:m.muted,truncate:!0}),s.add(b),F(i,s,[["Enter",o.zh?"\u786E\u8BA4":"confirm"],["\u2191\u2193",o.zh?"\u9009\u62E9":"select"],["Esc/q",o.zh?"\u8FD4\u56DE":"back"]]),Z(i,o,s)}function n1(i,o,n,d,e,u){let r=d.map((b)=>b.id),t=new Map(d.map((b)=>[b.id,b])),c=(b)=>{let v=t.get(b);return v?.shortLabel||v?.label[o.zh?"zh":"en"]||v?.label.en||b},a=Ro(d,i.terminalWidth||80,o.zh),p=Bo(r,a),l=Math.max(1,p.flat.length);o.optionPickerIdx=Math.max(0,Math.min(o.optionPickerIdx,l-1));let x=Math.max(Le,...r.length>0?r.map((b)=>hn(c(b))+3):[0]),w=P(i,{flexDirection:"column",width:"100%",...ze(i),backgroundColor:m.bg,justifyContent:"center",alignItems:"center",paddingX:2}),y=P(i,{flexDirection:"column",border:!0,borderStyle:"rounded",borderColor:e,backgroundColor:m.panel,paddingX:2,paddingY:1,gap:0,width:"78%"}),s=P(i,{flexDirection:"row",justifyContent:"space-between",marginBottom:1});f(s,i,u,{fg:e,attributes:R.BOLD}),f(s,i,`${o.optionPickerIdx+1}/${p.flat.length}`,{fg:m.muted}),y.add(s),p.groups.forEach((b,v)=>{if(v>0)f(y,i,"-".repeat(Math.max(8,x*a)),{fg:m.border});b.rows.forEach((h)=>{let M=P(i,{flexDirection:"row",gap:1,height:1});h.forEach((k)=>{let li=p.flat.indexOf(k)===o.optionPickerIdx,mo=n.enabled.has(k),Ao=`${li?">":" "}${gt(c(k),x)}${mo?"*":" "}`;f(M,i,Ao,{fg:li?e:mo?m.green:m.text,attributes:li?R.BOLD:R.NONE})}),y.add(M)})}),w.add(y),F(i,w,[["Enter",o.zh?"\u786E\u8BA4":"confirm"],["arrows",o.zh?"\u9009\u62E9":"select"],["Esc/q",o.zh?"\u8FD4\u56DE":"back"]]),Z(i,o,w)}function d1(i,o){let d=o.clients[o.providerTabIdx]?.client,e=d?o.providers.filter((w)=>Hi(w,d.id)):[],u=d?o.clientBindings[d.id]||o.defaultProviderId:o.defaultProviderId,r=e.length+4;o.providerRowIdx=Math.max(0,Math.min(o.providerRowIdx,Math.max(0,r-1)));let t=d?(So[d.id]||Po).color:m.orange,{root:c,panel:a}=ti(i,o,o.zh?"\u670D\u52A1\u5546\u7BA1\u7406":"Providers",t),p=P(i,{flexDirection:"row",gap:1,justifyContent:"center"});o.clients.forEach((w,y)=>{let s=So[w.client.id]||Po,b=y===o.providerTabIdx,v=P(i,{border:!0,borderStyle:b?"heavy":"single",borderColor:b?s.color:m.border,paddingX:1,height:3});f(v,i,`${y+1} ${w.client.name}`,{fg:b?s.color:m.muted,attributes:b?R.BOLD:R.NONE}),p.add(v)}),a.add(p);let l=[...e.map((w)=>({primary:w.name,secondary:[io[w.type]?.[o.zh?"zh":"en"]||w.type,w.id===u?o.zh?"\u5F53\u524D":"bound":"",w.id===o.defaultProviderId?o.zh?"\u9ED8\u8BA4":"default":""].filter(Boolean).join(" "),marker:w.id===u?"*":" "})),{primary:o.zh?"\u6DFB\u52A0\u670D\u52A1\u5546":"Add provider",secondary:"",marker:"+"},{primary:o.zh?"\u626B\u63CF\u672C\u5730\u8BA2\u9605":"Scan local subscriptions",secondary:"",marker:"?"},{primary:o.zh?"\u5BA2\u6237\u7AEF\u7248\u672C\u7BA1\u7406":"Client versions",secondary:"",marker:"V"},{primary:o.zh?"\u8FD4\u56DE":"Back",secondary:"",marker:"<"}],x=P(i,{flexDirection:"column",border:!0,borderStyle:"rounded",borderColor:t,paddingX:1,paddingY:1});pi(i,x,l.map((w,y)=>({...w,focused:y===o.providerRowIdx,color:t}))),a.add(x),F(i,c,[["Enter",o.zh?"\u7ED1\u5B9A/\u6253\u5F00":"bind/open"],["d/e",o.zh?"\u8BE6\u60C5":"detail"],["arrows",o.zh?"\u9009\u62E9":"select"],["q/Esc",o.zh?"\u8FD4\u56DE":"back"]]),Z(i,o,c)}function e1(i,o){let n=fn(o),{root:d,panel:e}=ti(i,o,o.zh?"\u670D\u52A1\u5546\u8BE6\u60C5":"Provider Detail",m.orange);if(!n)f(e,i,o.zh?"\u670D\u52A1\u5546\u4E0D\u5B58\u5728":"Provider not found",{fg:m.red});else{let u=[["Name",n.name],["Type",io[n.type]?.[o.zh?"zh":"en"]||n.type],["Base URL",n.baseUrl||"-"],["Model",n.model||"-"],["Email",n.email||"-"],["Builtin",n.builtin?"yes":"no"]];for(let[t,c]of u)f(e,i,`${t}: ${c}`,{fg:m.text,truncate:!0});let r=bd(n,o);pi(i,e,r.map((t,c)=>({primary:Nt(t,o.zh),focused:c===o.providerDetailIdx,marker:c===o.providerDetailIdx?">":" ",color:m.orange})))}F(i,d,[["Enter",o.zh?"\u6267\u884C":"run"],["arrows",o.zh?"\u9009\u62E9":"select"],["q/Esc",o.zh?"\u8FD4\u56DE":"back"]]),Z(i,o,d)}function u1(i,o){let{root:n,panel:d}=ti(i,o,o.zh?"\u6DFB\u52A0\u670D\u52A1\u5546":"Add Provider",m.orange);pi(i,d,Co.map((e,u)=>({primary:io[e]?.[o.zh?"zh":"en"]||e,secondary:e==="claude-subscription"||e==="codex-subscription"?o.zh?"\u767B\u5F55\u6388\u6743":"login auth":e==="custom"?o.zh?"\u81EA\u5B9A\u4E49 URL":"custom URL":"",focused:u===o.providerRowIdx,marker:"+",color:m.orange}))),F(i,n,[["Enter",o.zh?"\u9009\u62E9":"select"],["q/Esc",o.zh?"\u8FD4\u56DE":"back"]]),Z(i,o,n)}function r1(i,o){let n={"add-key":o.zh?"\u8F93\u5165 API Key":"Enter API key","add-url":o.zh?"\u8F93\u5165 Base URL":"Enter base URL","add-model":o.zh?"\u9009\u62E9/\u8F93\u5165\u6A21\u578B":"Select/enter model","add-ctx":o.zh?"\u8F93\u5165\u4E0A\u4E0B\u6587\u7A97\u53E3 token \u6570":"Enter context window tokens",rekey:o.zh?"\u66F4\u65B0 API Key":"Update API key"},{root:d,panel:e}=ti(i,o,n[o.providerInputMode],m.orange),u=o.providerInputMode==="add-model"?Eo(o.addType):void 0;if(u)pi(i,e,u.map((r,t)=>({primary:r,focused:t===o.providerRowIdx,marker:t===o.providerRowIdx?">":" ",color:m.orange})));else{let r=o.providerInputMode==="add-key"||o.providerInputMode==="rekey"?se(o.addKey):o.providerInputMode==="add-url"?o.addUrl:o.providerInputMode==="add-model"?o.addModel:o.addCtx;f(e,i,`> ${r}_`,{fg:m.text,truncate:!0})}F(i,d,[["Enter",o.zh?"\u7EE7\u7EED":"continue"],["Backspace",o.zh?"\u5220\u9664":"delete"],["q/Esc",o.zh?"\u53D6\u6D88":"cancel"]]),Z(i,o,d)}function t1(i,o){let{root:n,panel:d}=ti(i,o,o.zh?"\u7528\u91CF\u7EDF\u8BA1":"Usage Stats",m.green);if(o.statsLoading)f(d,i,o.zh?"\u6B63\u5728\u83B7\u53D6...":"Loading...",{fg:m.yellow});else if(o.statsError)f(d,i,`${o.zh?"\u83B7\u53D6\u5931\u8D25":"Failed"}: ${o.statsError}`,{fg:m.red});else if(o.statsData){if(f(d,i,`${o.zh?"\u603B\u8C03\u7528\u6B21\u6570":"Total requests"}: ${zt(o.statsData.totalRequests)}`),f(d,i,`${o.zh?"\u603B\u6D88\u8D39":"Total cost"}: ${o.statsData.totalCost}`),f(d,i,`${o.zh?"\u4ECA\u65E5\u6D88\u8D39":"Today"}: ${o.statsData.todayCost}`),o.statsData.modelStats.length>0){f(d,i,o.zh?"\u6A21\u578B\u5206\u5E03:":"Models:",{fg:m.muted});for(let e of o.statsData.modelStats.slice(0,12))f(d,i,`${e.model.padEnd(28)} ${String(e.requests).padStart(6)} ${e.cost}`,{fg:m.muted,truncate:!0})}}else f(d,i,o.zh?"\u6682\u65E0\u6570\u636E":"No data",{fg:m.muted});F(i,n,[["r",o.zh?"\u5237\u65B0":"refresh"],["q/Esc",o.zh?"\u8FD4\u56DE":"back"]]),Z(i,o,n)}function c1(i,o){let{root:n,panel:d}=ti(i,o,o.zh?"\u914D\u7F6E API Key":"Configure API key",m.orange);if(f(d,i,`> ${se(o.apiKeyValue)}_`,{truncate:!0}),o.apiKeyStatus==="validating")f(d,i,o.zh?"\u6B63\u5728\u9A8C\u8BC1...":"Validating...",{fg:m.yellow});if(o.apiKeyStatus==="success")f(d,i,o.zh?"\u914D\u7F6E\u6210\u529F":"Configured",{fg:m.green});if(o.apiKeyStatus==="error")f(d,i,o.apiKeyError||"Error",{fg:m.red});F(i,n,[["Enter",o.zh?"\u4FDD\u5B58":"save"],["Backspace",o.zh?"\u5220\u9664":"delete"],["q/Esc",o.zh?"\u8FD4\u56DE":"back"]]),Z(i,o,n)}function a1(i,o){let{root:n,panel:d}=ti(i,o,o.zh?"\u5207\u6362\u8BED\u8A00":"Language",m.magenta);pi(i,d,Fi.map((e,u)=>({primary:e.label,secondary:e.value===Ii()?o.zh?"\u5F53\u524D":"current":"",focused:u===o.languageIdx,marker:u===o.languageIdx?">":" ",color:m.magenta}))),F(i,n,[["Enter",o.zh?"\u9009\u62E9":"select"],["q/Esc",o.zh?"\u8FD4\u56DE":"back"]]),Z(i,o,n)}function p1(i,o){let{root:n,panel:d}=ti(i,o,o.zh?"Agent \u4F1A\u8BDD":"Agent Sessions",m.blue);if(f(d,i,`${o.zh?"\u9ED8\u8BA4 Provider":"Defaults"}: ${Object.keys(o.agentDefaults).length===0?"-":Object.entries(o.agentDefaults).map(([e,u])=>`${e}=${u.slice(0,8)}`).join(" ")}`,{fg:m.muted,truncate:!0}),!o.agentSessions)f(d,i,o.zh?"\u52A0\u8F7D\u4E2D...":"Loading...",{fg:m.yellow});else if(o.agentSessions.length===0)f(d,i,o.zh?"\u6682\u65E0 session\uFF0C\u6309 n \u65B0\u5EFA":"No sessions, press n to create",{fg:m.muted});else pi(i,d,o.agentSessions.map((e,u)=>({primary:`${e.sid.slice(0,8)} ${e.backend.padEnd(6)} ${(e.name||"").slice(0,18).padEnd(18)} ${e.status}`,secondary:`${e.turnCount} turns ${ve(Date.now()-e.lastActiveAt)}`,focused:u===o.agentIdx,marker:Wt(e.status),color:fe(e.status)})));if(o.agentError)f(d,i,`! ${o.agentError}`,{fg:m.red,truncate:!0});F(i,n,[["Enter/o",o.zh?"\u8BE6\u60C5":"open"],["n",o.zh?"\u65B0\u5EFA":"new"],["d",o.zh?"\u5173\u95ED":"close"],["x",o.zh?"\u5220\u9664":"purge"],["r",o.zh?"\u5237\u65B0":"refresh"],["q/Esc",o.zh?"\u8FD4\u56DE":"back"]]),Z(i,o,n)}function l1(i){let o=new Date(i.ts).toISOString().slice(11,19);switch(i.kind){case"session_started":return{text:`[${o}] session_started ${i.backend}${i.model?` ${i.model}`:""}`,dim:!0};case"turn_started":return{text:`[${o}] turn_started`,color:m.cyan};case"text_delta":return{text:i.text};case"reasoning_delta":return{text:`[${o}] reasoning ${i.text}`,dim:!0};case"tool_use":return{text:`[${o}] tool ${i.name} ${JSON.stringify(i.input)}`,color:m.yellow};case"tool_result":return{text:`[${o}] result ${JSON.stringify(i.output)}`,color:m.green};case"approval_required":return{text:`[${o}] approval ${i.approvalType} ${String(i.approvalId)}`,color:m.magenta};case"turn_completed":return{text:`[${o}] turn_completed${i.stopReason?` ${i.stopReason}`:""}`,color:m.cyan};case"error":return{text:`[${o}] error ${i.message}`,color:m.red};case"session_closed":return{text:`[${o}] session_closed`,dim:!0}}}function m1(i,o){let n=o.agentDetailMeta,{root:d,panel:e}=ti(i,o,o.zh?"Agent \u8BE6\u60C5":"Agent Detail",m.blue);if(!n){f(e,i,o.zh?"\u52A0\u8F7D\u4E2D...":"Loading...",{fg:m.yellow}),Z(i,o,d);return}if(f(e,i,`${n.sid.slice(0,8)} ${n.backend} ${n.name} ${n.status}${o.agentDetailAlive===!1?" dead":""}`,{fg:fe(n.status),attributes:R.BOLD,truncate:!0}),f(e,i,`${o.zh?"\u5DE5\u4F5C\u76EE\u5F55":"cwd"}: ${n.workdir}`,{fg:m.muted,truncate:!0}),f(e,i,`${o.zh?"\u6A21\u578B":"model"}: ${n.model||"-"} turns=${n.turnCount} ${o.zh?"\u6700\u8FD1":"last"}=${ve(Date.now()-n.lastActiveAt)}`,{fg:m.muted,truncate:!0}),o.agentPendingApprovals.length>0){let c=P(i,{flexDirection:"column",border:!0,borderStyle:"rounded",borderColor:m.magenta,paddingX:1});f(c,i,`${o.agentPendingApprovals.length} ${o.zh?"\u4E2A\u5F85\u5BA1\u6279":"pending approvals"}`,{fg:m.magenta,attributes:R.BOLD});for(let a of o.agentPendingApprovals.slice(0,3))f(c,i,`${a.approvalType} ${a.approvalId.slice(0,12)} ${JSON.stringify(a.params)}`,{fg:m.muted,truncate:!0});e.add(c)}let u=P(i,{flexDirection:"column",border:!0,borderStyle:"rounded",borderColor:m.border,paddingX:1,title:o.zh?"\u65E5\u5FD7":"Log",titleColor:m.muted}),r=o.agentDetailFrames.slice(-Math.max(6,Math.min(18,i.terminalHeight-14)));if(r.length===0)f(u,i,o.zh?"\u6682\u65E0\u65E5\u5FD7":"No log yet",{fg:m.muted});else for(let c of r){let a=l1(c);f(u,i,a.text.replace(/\s+/g," ").slice(0,240),{fg:a.color||(a.dim?m.muted:m.text),truncate:!0})}if(e.add(u),o.agentError)f(e,i,`! ${o.agentError}`,{fg:m.red,truncate:!0});let t=o.agentDetailStatus==="sending"?"... ":o.agentDetailStatus==="cancelling"?"x ":"> ";f(e,i,`${t}${o.agentDetailInput}_`,{fg:o.agentDetailStatus==="idle"?m.text:m.yellow,truncate:!0}),F(i,d,[["Enter",o.zh?"\u53D1\u9001":"send"],["Ctrl-Y/N",o.zh?"\u6279/\u62D2":"approve/deny"],["r",o.zh?"\u5237\u65B0":"refresh"],["Ctrl-C",o.zh?"\u53D6\u6D88":"cancel"],["Esc/q",o.zh?"\u8FD4\u56DE":"back"]]),Z(i,o,d)}function x1(i,o){let{root:n,panel:d}=ti(i,o,o.zh?"\u65B0\u5EFA Agent Session":"New Agent Session",m.blue),e=[{id:"backend",label:`${o.zh?"\u540E\u7AEF":"Backend"}: ${o.agentBackend==="claude"?"[claude] codex":"claude [codex]"}`},{id:"model",label:`${o.zh?"\u6A21\u578B":"Model"}: ${o.agentModel||(o.zh?"\u9ED8\u8BA4":"default")}`},{id:"name",label:`${o.zh?"\u540D\u79F0":"Name"}: ${o.agentName||(o.zh?"\u81EA\u52A8":"auto")}`}];if(pi(i,d,e.map((u)=>({primary:u.label+(o.agentField===u.id&&u.id!=="backend"?"_":""),focused:o.agentField===u.id,marker:o.agentField===u.id?">":" ",color:m.blue}))),o.agentError)f(d,i,`! ${o.agentError}`,{fg:m.red,truncate:!0});F(i,n,[["Tab/arrows",o.zh?"\u5207\u5B57\u6BB5":"field"],["Space",o.zh?"\u5207\u540E\u7AEF":"backend"],["Enter",o.zh?"\u521B\u5EFA":"create"],["q/Esc",o.zh?"\u53D6\u6D88":"cancel"]]),Z(i,o,n)}var w1=[{id:"configure",label:{zh:"\u73B0\u5728\u914D\u7F6E",en:"Configure now"},hint:{zh:"\u8F93\u5165\u4F60\u7684 Tako API Key",en:"Enter your Tako API Key"},color:m.cyan},{id:"skip",label:{zh:"\u7A0D\u540E\u518D\u8BF4",en:"Not now"},hint:{zh:"\u660E\u5929\u518D\u63D0\u9192\u6211",en:"Remind me tomorrow"},color:m.text},{id:"never",label:{zh:"\u4E0D\u518D\u63D0\u793A",en:"Don't ask again"},hint:{zh:"\u4E4B\u540E\u53EF\u4EE5\u6309 c \u968F\u65F6\u914D\u7F6E",en:"You can configure later via c"},color:m.text}];function y1(i,o){let{root:n,panel:d}=ti(i,o,`\uD83D\uDD11 ${o.zh?"\u914D\u7F6E Tako API Key":"Configure Tako API Key"}`,m.cyan);f(d,i,o.zh?"\u914D\u7F6E API Key \u540E\u5373\u53EF\u4F7F\u7528 Tako \u4EE3\u7406\u670D\u52A1\uFF0C\u83B7\u5F97\u7EDF\u4E00\u7684\u914D\u989D\u7BA1\u7406\u548C\u66F4\u5FEB\u7684\u8BBF\u95EE\u901F\u5EA6\u3002":"Configure your API Key to use Tako proxy service with unified quota and faster access.",{fg:m.muted}),f(d,i,o.zh?"\u4F60\u4E5F\u53EF\u4EE5\u8DF3\u8FC7\u6B64\u6B65\u9AA4\uFF0C\u76F4\u63A5\u4F7F\u7528\u5176\u4ED6\u670D\u52A1\u5546\u3002":"You can skip this and use other providers instead.",{fg:m.muted}),pi(i,d,w1.map((e,u)=>({primary:o.zh?e.label.zh:e.label.en,secondary:u===o.keyGuideIdx?o.zh?e.hint.zh:e.hint.en:void 0,focused:u===o.keyGuideIdx,marker:u===o.keyGuideIdx?">":" ",color:e.color}))),F(i,n,[["\u2191\u2193",o.zh?"\u9009\u62E9":"select"],["Enter",o.zh?"\u786E\u8BA4":"confirm"],["Esc",o.zh?"\u8DF3\u8FC7":"skip"]]),Z(i,o,n)}var It={"claude-code":{icon:"\u2726",color:m.yellow},codex:{icon:"\u25C8",color:m.blue},gemini:{icon:"\u25C6",color:m.cyan}};function s1(i,o){let n=o.clients[o.clientVersionsClientIdx],d=It[n?.client.id||""]?.color||m.gray,{root:e,panel:u}=ti(i,o,`\uD83D\uDCE6 ${o.zh?"\u5BA2\u6237\u7AEF\u7248\u672C\u7BA1\u7406":"Client Versions"}`,d,void 0,!0),r=P(i,{flexDirection:"row",flexWrap:"wrap",gap:1,justifyContent:"center"});if(o.clients.forEach((t,c)=>{let a=It[t.client.id]||{icon:"\u25AA",color:m.gray},p=c===o.clientVersionsClientIdx,l=P(i,{border:!0,borderStyle:p?"heavy":"single",borderColor:p?a.color:m.border,paddingX:2});f(l,i,`${a.icon} ${t.client.name}`,{fg:p?a.color:m.muted,attributes:p?R.BOLD:R.NONE}),r.add(l)}),u.add(r),o.clientVersionsLoading)f(u,i,o.zh?"\u52A0\u8F7D\u4E2D...":"Loading...",{fg:m.yellow});else if(o.clientVersionsError)f(u,i,`${o.zh?"\u52A0\u8F7D\u5931\u8D25\uFF1A":"Failed: "}${o.clientVersionsError}`,{fg:m.red,truncate:!0});else if(o.clientVersions.length===0)f(u,i,o.zh?"\u6682\u65E0\u7248\u672C":"No versions",{fg:m.muted});else{let t=o.clientVersions.find((l)=>l.isCurrent)?.version??(o.zh?"\u672A\u5B89\u88C5":"not installed");f(u,i,`${o.zh?"\u5171":""} ${o.clientVersions.length} ${o.zh?"\u4E2A\u7248\u672C\uFF0C\u5F53\u524D\uFF1A":"versions, current: "}${t}`,{fg:m.muted,truncate:!0});let c=12,a=Math.max(0,Math.min(o.clientVersionsIdx-c+1,o.clientVersions.length-c)),p=o.clientVersions.slice(Math.max(0,a),Math.max(0,a)+c);pi(i,u,p.map((l,x)=>{let w=Math.max(0,a)+x,y=l.publishedAt?l.publishedAt.slice(0,10):"";return{primary:`${l.version.padEnd(16)}${y}${l.isCurrent?o.zh?" \u2605 \u5F53\u524D":" \u2605 current":""}`,focused:w===o.clientVersionsIdx,marker:w===o.clientVersionsIdx?">":" ",color:l.isCurrent?m.green:d}}))}F(i,e,[["\u2190\u2192",o.zh?"\u5207\u6362\u5DE5\u5177":"switch"],["\u2191\u2193",o.zh?"\u9009\u62E9":"select"],["Enter",o.zh?"\u5B89\u88C5":"install"],["r",o.zh?"\u5237\u65B0":"refresh"],["q/Esc",o.zh?"\u8FD4\u56DE":"back"]]),Z(i,o,e)}Yo();ai();Si();Io();fd();Yo();xd();Ti();xi();function h1(i,o,n){let d=i.clients[i.clientIdx];if(!d)return;let e=d.launchOptions.filter((c)=>c.group===o);if(e.length===0)return;let u=Ei(d.launchOptions,d.enabled,o),r=o==="model"?Ne(e,i.pickCounts):"collapsed",t=0;if(u)if(o==="model"&&r==="grid"){let c=e.map((p)=>p.id),a=Ro(e,n,i.zh);t=We(c,u.id,a)}else t=(o==="model"?Jo(e,d.enabled,i.pickCounts).list:e).findIndex((a)=>a.id===u.id)+1;i.optionPickerGroup=o,i.optionPickerIdx=Math.max(0,t),i.modelPickerMode=r,i.screen="option-picker"}function Jt(i,o,n,d,e){let u=o.clients[o.clientIdx];if(!u)return;let r=co(u.launchOptions,o.zh),t=i.name,c=T(i);if(t==="q"||t==="escape"){d({type:"exit"});return}if(c&&t==="a"){e(()=>hi(o));return}if(c&&t==="p"){e(()=>po(o));return}if(c&&t==="s"){e(()=>bn(o));return}if(c&&t==="c"){o.screen="config",o.apiKeyValue="",o.apiKeyStatus="idle",o.apiKeyError=void 0,W(n,o);return}if(c&&t==="l"){o.screen="language",W(n,o);return}let a=Number.parseInt(t,10);if(c&&a>=1&&a<=o.clients.length){o.clientIdx=a-1,vn(o),W(n,o);return}if(t==="tab"){if(i.shift)o.clientIdx=o.clientIdx>0?o.clientIdx-1:o.clients.length-1;else o.clientIdx=o.clientIdx<o.clients.length-1?o.clientIdx+1:0;vn(o),W(n,o);return}if(t==="left"){if(o.focus==="tabs")o.clientIdx=o.clientIdx>0?o.clientIdx-1:o.clients.length-1,vn(o);else if(o.focus==="options")o.focus="projects",o.projectIdx=Math.min(o.projectIdx,u.projects.length-1);W(n,o);return}if(t==="right"){if(o.focus==="tabs")o.clientIdx=o.clientIdx<o.clients.length-1?o.clientIdx+1:0,vn(o);else if(o.focus==="projects"&&r.length>0)o.focus="options",o.optionIdx=Math.min(o.optionIdx,r.length-1);W(n,o);return}if(t==="down"){if(o.focus==="tabs")o.focus="projects";else if(o.focus==="projects"){if(o.projectIdx<u.projects.length-1)o.projectIdx+=1}else if(o.optionIdx<r.length-1)o.optionIdx+=1;W(n,o);return}if(t==="up"){if(o.focus==="options")if(o.optionIdx>0)o.optionIdx-=1;else o.focus="tabs";else if(o.focus==="projects")if(o.projectIdx>0)o.projectIdx-=1;else o.focus="tabs";W(n,o);return}if((t==="space"||t==="return")&&o.focus==="options"){let p=r[o.optionIdx];if(p?.kind==="provider"){e(()=>po(o));return}if(p?.kind==="flag"){if(u.enabled.has(p.opt.id))u.enabled.delete(p.opt.id);else u.enabled.add(p.opt.id);W(n,o);return}if(p?.kind==="group"){h1(o,p.group,n.terminalWidth||80),W(n,o);return}}if(t==="return"){let p=u.projects[o.projectIdx],l=we(u);d({type:"launch",clientId:u.client.id,projectPath:p?.path,...l})}}function Rt(i,o,n){let d=o.clients[o.clientIdx],e=o.optionPickerGroup;if(!d||!e){o.screen="launcher",W(n,o);return}let u=d.launchOptions.filter((p)=>p.group===e),r=e==="model",t=i.name;if(r&&o.modelPickerMode==="grid"){let p=u.map((s)=>s.id),l=Ro(u,n.terminalWidth||80,o.zh),x=Bo(p,l),w=Pt(p,l),y=x.flat.length;if(t==="escape"){if(Ne(u,o.pickCounts)==="grid")o.screen="launcher",o.modelPickerMode="collapsed";else{o.modelPickerMode="collapsed";let s=Ei(d.launchOptions,d.enabled,e),b=Jo(u,d.enabled,o.pickCounts).list;o.optionPickerIdx=s?Math.max(0,b.findIndex((v)=>v.id===s.id)+1):0}W(n,o);return}if(T(i)&&t==="q"){o.screen="launcher",o.modelPickerMode="collapsed",W(n,o);return}if(y===0)return;if(t==="left"){o.optionPickerIdx=o.optionPickerIdx>0?o.optionPickerIdx-1:y-1,W(n,o);return}if(t==="right"){o.optionPickerIdx=o.optionPickerIdx<y-1?o.optionPickerIdx+1:0,W(n,o);return}if(t==="up"||t==="down"){let s=0,b=0,v=0;for(let k=0;k<w.length;k++){let B=w[k].length;if(o.optionPickerIdx<v+B){s=k,b=o.optionPickerIdx-v;break}v+=B}let h=t==="up"?s>0?s-1:w.length-1:s<w.length-1?s+1:0,M=Math.min(b,w[h].length-1);o.optionPickerIdx=w.slice(0,h).reduce((k,B)=>k+B.length,0)+M,W(n,o);return}if(t==="return"||t==="space"){let s=x.flat[o.optionPickerIdx];for(let b of u)d.enabled.delete(b.id);if(s)d.enabled.add(s);o.screen="launcher",o.modelPickerMode="collapsed",W(n,o)}return}let c=r?Jo(u,d.enabled,o.pickCounts):{list:u,hiddenCount:0},a=c.list.length+1+(c.hiddenCount>0?1:0);if(t==="escape"||T(i)&&t==="q"){o.screen="launcher",o.modelPickerMode="collapsed",W(n,o);return}if(t==="up"){o.optionPickerIdx=o.optionPickerIdx>0?o.optionPickerIdx-1:a-1,W(n,o);return}if(t==="down"){o.optionPickerIdx=o.optionPickerIdx<a-1?o.optionPickerIdx+1:0,W(n,o);return}if(t==="return"||t==="space"){if(o.optionPickerIdx===0)for(let p of u)d.enabled.delete(p.id);else if(r&&c.hiddenCount>0&&o.optionPickerIdx===c.list.length+1){let p=Ei(d.launchOptions,d.enabled,e),l=u.map((w)=>w.id),x=Ro(u,n.terminalWidth||80,o.zh);o.optionPickerIdx=p?Math.max(0,We(l,p.id,x)):0,o.modelPickerMode="grid",W(n,o);return}else{for(let l of u)d.enabled.delete(l.id);let p=c.list[o.optionPickerIdx-1];if(p)d.enabled.add(p.id)}o.screen="launcher",o.modelPickerMode="collapsed",W(n,o)}}function Bt(i,o,n,d){let e=o.clients[o.providerTabIdx]?.client,u=e?o.providers.filter((a)=>Hi(a,e.id)):[],r=u.length+4,t=i.name,c=T(i);if(t==="left")o.providerTabIdx=o.providerTabIdx>0?o.providerTabIdx-1:o.clients.length-1;else if(t==="right")o.providerTabIdx=o.providerTabIdx<o.clients.length-1?o.providerTabIdx+1:0;else if(t==="up")o.providerRowIdx=o.providerRowIdx>0?o.providerRowIdx-1:r-1;else if(t==="down")o.providerRowIdx=o.providerRowIdx<r-1?o.providerRowIdx+1:0;else if(c&&(t==="d"||t==="e")&&o.providerRowIdx<u.length)o.providerSelectedId=u[o.providerRowIdx].id,o.providerDetailIdx=0,o.screen="provider-detail";else if(t==="return"){if(o.providerRowIdx<u.length&&e){let a=u[o.providerRowIdx];d(async()=>{await u0(e.id,a.id);let p;if(e.setupConfigFiles)try{await e.setupConfigFiles(_(a))}catch(l){p=l instanceof Error?l.message:String(l)}if(await Ri(o),await fi(o),o.clientIdx=o.clients.findIndex((l)=>l.client.id===e.id),o.clientIdx<0)o.clientIdx=0;Yi(o),o.message=p?o.zh?`\u670D\u52A1\u5546\u5DF2\u7ED1\u5B9A\uFF0C\u914D\u7F6E\u540C\u6B65\u5931\u8D25\uFF1A${p}`:`Provider bound, config sync failed: ${p}`:o.zh?"\u670D\u52A1\u5546\u5DF2\u7ED1\u5B9A":"Provider bound"});return}if(o.providerRowIdx===u.length)o.screen="provider-add-type",o.providerRowIdx=0;else if(o.providerRowIdx===u.length+1){d(async()=>{let a=await _o(),p=await Uo(a);if(p>0)U(),H();await Ri(o),await fi(o),o.message=o.zh?`\u626B\u63CF\u5B8C\u6210\uFF0C\u65B0\u589E ${p} \u4E2A`:`Scan complete, ${p} added`});return}else if(o.providerRowIdx===u.length+2){d(()=>Se(o));return}else Yi(o)}W(n,o)}function Yt(i,o,n,d,e){let u=fn(o);if(!u){o.screen="providers",W(n,o);return}let r=bd(u,o);if(i.name==="up"||i.name==="left")o.providerDetailIdx=o.providerDetailIdx>0?o.providerDetailIdx-1:r.length-1;else if(i.name==="down"||i.name==="right")o.providerDetailIdx=o.providerDetailIdx<r.length-1?o.providerDetailIdx+1:0;else if(i.name==="return"){let t=r[o.providerDetailIdx];if(t==="back")o.screen="providers";if(t==="default"){e(async()=>{await e0(u.id),await Ri(o),await fi(o),o.screen="providers",o.message=o.zh?"\u5DF2\u8BBE\u4E3A\u9ED8\u8BA4":"Set as default"});return}if(t==="delete"){e(async()=>{await d0(u.id),await Ri(o),await fi(o),o.screen="providers",o.message=o.zh?"\u5DF2\u5220\u9664":"Deleted"});return}if(t==="rekey")o.addType=u.type,ao(o,"rekey");if(t==="relogin"){d({type:"provider-login",tool:u.type==="codex-subscription"?"codex":"claude"});return}}W(n,o)}function At(i,o,n,d){if(i.name==="up")o.providerRowIdx=o.providerRowIdx>0?o.providerRowIdx-1:Co.length-1;else if(i.name==="down")o.providerRowIdx=o.providerRowIdx<Co.length-1?o.providerRowIdx+1:0;else if(i.name==="return"){if(o.addType=Co[o.providerRowIdx],o.addType==="claude-subscription"||o.addType==="codex-subscription"){d({type:"provider-login",tool:o.addType==="codex-subscription"?"codex":"claude"});return}ao(o,"add-key")}W(n,o)}function Xt(i,o,n,d){let e=i.name,u=o.providerInputMode==="add-model"?Eo(o.addType):void 0;if(u){if(e==="up")o.providerRowIdx=o.providerRowIdx>0?o.providerRowIdx-1:u.length-1;else if(e==="down")o.providerRowIdx=o.providerRowIdx<u.length-1?o.providerRowIdx+1:0;else if(e==="return"){o.addModel=u[o.providerRowIdx],d(()=>Ln(o));return}W(n,o);return}if(e==="backspace"||e==="delete")qo(o);else if(e==="return"){if(o.providerInputMode==="rekey"){let r=fn(o);if(!r)return;d(async()=>{await Zi(r.id,{apiKey:o.addKey}),await Ri(o),await fi(o),o.screen="providers",o.message=o.zh?"Key \u5DF2\u66F4\u65B0":"Key updated"});return}if(o.providerInputMode==="add-key"&&o.addKey)if(o.addType==="custom")ao(o,"add-url");else ao(o,"add-model");else if(o.providerInputMode==="add-url")ao(o,"add-model");else if(o.providerInputMode==="add-model"){if(o.addModel.trim())ao(o,"add-ctx");else d(()=>Ln(o));return}else if(o.providerInputMode==="add-ctx"){d(()=>Ln(o));return}}else Oo(o,Qo(i));W(n,o)}function Ht(i,o,n,d){let e=i.name,u=o.agentSessions||[];if(e==="up")o.agentIdx=o.agentIdx>0?o.agentIdx-1:Math.max(0,u.length-1);else if(e==="down")o.agentIdx=o.agentIdx<u.length-1?o.agentIdx+1:0;else if(T(i)&&e==="r"){d(()=>hi(o));return}else if(T(i)&&e==="n")o.screen="agent-new",o.agentBackend="claude",o.agentModel="",o.agentName="",o.agentField="backend",o.agentError=void 0;else if((e==="return"||T(i)&&e==="o")&&u[o.agentIdx]){d(()=>$e(o,u[o.agentIdx].sid));return}else if(T(i)&&e==="p"){d(async()=>{let r=await ld();await hi(o),o.message=o.zh?`\u5DF2\u6E05\u7406 ${r} \u4E2A session`:`Purged ${r} sessions`});return}else if(T(i)&&(e==="d"||e==="x")&&u[o.agentIdx]){let r=u[o.agentIdx];d(async()=>{await $o(r.sid,e==="x"),await hi(o),o.message=e==="x"?o.zh?"\u5DF2\u5220\u9664":"Purged":o.zh?"\u5DF2\u5173\u95ED":"Closed"});return}W(n,o)}function Zt(i,o,n,d){let e=i.name,u=o.agentDetailSid;if(!u){d(()=>hi(o));return}if(i.ctrl&&e==="c"){if(o.agentDetailStatus==="sending"){o.agentDetailStatus="cancelling",W(n,o),wn(u).catch((r)=>{o.agentError=r instanceof Error?r.message:String(r)}).finally(()=>{o.agentDetailStatus="idle",Bi(o).finally(()=>W(n,o))});return}d(()=>hi(o));return}if(i.ctrl&&(e==="y"||e==="n")){let r=o.agentPendingApprovals[0];if(!r)return;d(async()=>{await nd(u,r.approvalId,{decision:e==="y"?"allow":"deny",by:"tui",decidedAt:Date.now()}),await Bi(o),o.message=e==="y"?o.zh?"\u5DF2\u6279\u51C6":"Approved":o.zh?"\u5DF2\u62D2\u7EDD":"Denied"});return}if(e==="escape"||T(i)&&e==="q"&&!o.agentDetailInput){d(()=>hi(o));return}if(T(i)&&e==="r"){d(()=>Bi(o));return}if(e==="backspace"||e==="delete"){qo(o),W(n,o);return}if(e==="return"){let r=o.agentDetailInput.trim();if(!r||o.agentDetailStatus!=="idle")return;o.agentDetailInput="",o.agentDetailStatus="sending",o.agentError=void 0,W(n,o),xn(u,r).catch((t)=>{o.agentError=t instanceof Error?t.message:String(t)}).finally(()=>{o.agentDetailStatus="idle",Bi(o).finally(()=>W(n,o))});return}Oo(o,Qo(i)),W(n,o)}function Kt(i,o,n,d){let e=i.name;if(e==="tab"||e==="down")o.agentField=o.agentField==="backend"?"model":o.agentField==="model"?"name":"backend";else if(e==="up")o.agentField=o.agentField==="backend"?"name":o.agentField==="model"?"backend":"model";else if((e==="space"||e==="left"||e==="right")&&o.agentField==="backend")o.agentBackend=o.agentBackend==="claude"?"codex":"claude";else if(e==="backspace"||e==="delete")qo(o);else if(e==="return"){d(async()=>{try{let u=await mn({backend:o.agentBackend,model:o.agentModel.trim()||void 0,name:o.agentName.trim()||void 0});await hi(o);let r=o.agentSessions?.findIndex((t)=>t.sid===u.sid)??-1;if(r>=0)o.agentIdx=r;o.message=o.zh?"Session \u5DF2\u521B\u5EFA":"Session created"}catch(u){o.agentError=u instanceof Error?u.message:String(u)}});return}else Oo(o,Qo(i));W(n,o)}function Vt(i,o,n,d){let e=i.name,u=T(i);if(e==="left"){o.clientVersionsClientIdx=o.clientVersionsClientIdx>0?o.clientVersionsClientIdx-1:o.clients.length-1,d(()=>lo(o));return}if(e==="right"){o.clientVersionsClientIdx=o.clientVersionsClientIdx<o.clients.length-1?o.clientVersionsClientIdx+1:0,d(()=>lo(o));return}if(u&&e==="r"){d(()=>lo(o));return}let r=o.clientVersions.length-1;if(e==="up")o.clientVersionsIdx=o.clientVersionsIdx>0?o.clientVersionsIdx-1:Math.max(0,r);else if(e==="down")o.clientVersionsIdx=o.clientVersionsIdx<r?o.clientVersionsIdx+1:0;else if(e==="return"){let t=o.clientVersions[o.clientVersionsIdx];if(t&&!t.isCurrent){d(()=>Pe(o,t.version));return}}W(n,o)}var b1=["configure","skip","never"];function Tt(i,o,n,d){let e=i.name;if(e==="up")o.keyGuideIdx=o.keyGuideIdx>0?o.keyGuideIdx-1:2;else if(e==="down")o.keyGuideIdx=o.keyGuideIdx<2?o.keyGuideIdx+1:0;else if(e==="escape"){d(async()=>{await Nd("skip"),Yi(o)});return}else if(e==="return"){let u=b1[o.keyGuideIdx];if(u==="configure"){o.screen="config",o.apiKeyValue="",o.apiKeyStatus="idle",o.apiKeyError=void 0,W(n,o);return}d(async()=>{await Nd(u),Yi(o)});return}W(n,o)}Yo();async function Ft(i={}){let o=await ft();if(i.screen==="providers")await po(o);if(i.message)o.message=i.message;if(o.screen==="launcher")try{let{shouldShowKeyGuide:d}=await Promise.resolve().then(() => (Yo(),Ot));if(await d())o.screen="key-guide"}catch{}hd();let n=await N1({exitOnCtrlC:!1,clearOnShutdown:!0,useMouse:!0,enableMouseMovement:!1,backgroundColor:m.bg});return new Promise((d)=>{let e=!1,u=!1,r,t=async()=>{await new Promise((y)=>{let s=setTimeout(y,100);s.unref?.(),n.once(L1.DESTROY,()=>{clearTimeout(s),y()}),n.stop(),n.destroy()})},c=(y)=>{if(e)return;if(e=!0,r)clearInterval(r);n.keyInput.off("keypress",l),(async()=>{await t(),await Lt(),d(y)})()},a=(y)=>{if(o.busy)return;o.busy=!0,W(n,o),y().catch((s)=>{o.message=`! ${s instanceof Error?s.message:String(s)}`}).finally(()=>{o.busy=!1,W(n,o)})},p=(y)=>{if(n.terminalHeight>=sn)return!1;let s=Math.max(1,n.terminalHeight-2);return o.scrollOffset=Math.max(0,o.scrollOffset+y*s),W(n,o),!0},l=(y)=>{if(y.eventType==="release"||o.busy)return;let s=y.name,b=Qo(y),v=T(y);if(s==="pagedown"&&p(1))return;if(s==="pageup"&&p(-1))return;if(o.screen==="agent-detail"){Zt(y,o,n,a);return}if(y.ctrl&&s==="c"){c({type:"exit"});return}if(o.screen==="client-versions"){if(s==="escape"||v&&s==="q"){a(()=>po(o));return}Vt(y,o,n,a);return}if(o.screen==="key-guide"){Tt(y,o,n,a);return}if(o.screen==="launcher"){Jt(y,o,n,c,a);return}if(o.screen==="option-picker"){Rt(y,o,n);return}if(s==="escape"||v&&s==="q"){if(o.screen==="provider-detail"||o.screen==="provider-add-type"||o.screen==="provider-input")o.screen="providers";else if(o.screen==="agent-new")o.screen="agents";else Yi(o);W(n,o);return}if(o.screen==="providers"){Bt(y,o,n,a);return}if(o.screen==="provider-detail"){Yt(y,o,n,c,a);return}if(o.screen==="provider-add-type"){At(y,o,n,c);return}if(o.screen==="provider-input"){Xt(y,o,n,a);return}if(o.screen==="stats"){if(v&&s==="r")a(()=>bn(o));return}if(o.screen==="config"){if(s==="backspace"||s==="delete")qo(o);else if(s==="return")a(async()=>{if(!o.apiKeyValue)return;o.apiKeyStatus="validating",W(n,o);let h=await mt(o.apiKeyValue);if(h.success)U(),H(),o.apiKeyStatus="success",await fi(o);else o.apiKeyStatus="error",o.apiKeyError=h.error||"Validation failed"});else Oo(o,b);W(n,o);return}if(o.screen==="language"){if(s==="up")o.languageIdx=o.languageIdx>0?o.languageIdx-1:Fi.length-1;if(s==="down")o.languageIdx=o.languageIdx<Fi.length-1?o.languageIdx+1:0;if(s==="return"){let h=Fi[o.languageIdx];i0(h.value),o.zh=h.value==="zh",o.message=o.zh?"\u8BED\u8A00\u5DF2\u5207\u6362":"Language changed",a(()=>fi(o).then(()=>Yi(o)));return}W(n,o);return}if(o.screen==="agents"){Ht(y,o,n,a);return}if(o.screen==="agent-new")Kt(y,o,n,a)};n.keyInput.on("keypress",l),n.on("resize",()=>W(n,o));let x=!1,w=()=>{if(e||x||o.screen!=="launcher")return;let y=o.clients[o.clientIdx]?.activeProvider;if((y?`${y.id}:${y.type}`:void 0)===o.quotaKey)return;x=!0,ge(o).catch(()=>{}).finally(()=>{if(x=!1,!e&&o.screen==="launcher")W(n,o)})};r=setInterval(()=>{if(w(),e||u||o.busy||o.screen!=="agent-detail"||!o.agentDetailSid)return;u=!0,Bi(o).catch((y)=>{o.agentError=y instanceof Error?y.message:String(y)}).finally(()=>{if(u=!1,!e&&o.screen==="agent-detail")W(n,o)})},1000),r.unref?.(),ye(o),W(n,o),n.start()})}Yo();E();X();xi();Ci();ai();C();ai();var W1=2000,Et=100;function Mi(i){if(Xo||process.env.TAKO_DEBUG==="1")process.stderr.write(`[announcements] ${i}
564
+ `)}function _t(i){if(!i)return null;if(i.type!=="tako"&&i.type!=="custom")return null;if(!i.baseUrl||!i.apiKey)return null;return{baseUrl:i.baseUrl.replace(/\/+$/,""),apiKey:i.apiKey}}async function k1(i,o){let n=`${i}/v1/announcements/popup`;try{let d=await fetch(n,{headers:{Authorization:`Bearer ${o}`},signal:AbortSignal.timeout(W1)});if(!d.ok)return Mi(`HTTP ${d.status} from ${n}\uFF08par \u53EF\u80FD\u672A\u90E8\u7F72\u65B0\u8DEF\u7531 /v1/announcements/popup\uFF09`),null;let u=(await d.json())?.announcement;if(!u)return Mi("\u8FD4\u56DE announcement=null\uFF08par \u540E\u53F0\u6CA1\u6709 published+popup=true \u7684\u516C\u544A\uFF09"),null;if(typeof u.id!=="string"||typeof u.title!=="string")return Mi(`payload \u7F3A id/title\uFF0C\u4E22\u5F03\uFF1A${JSON.stringify(u)}`),null;return Mi(`\u62C9\u5230\u516C\u544A id=${u.id} title=${u.title} popup_once=${!!u.popup_once}`),{id:u.id,title:u.title,content:u.content??"",type:u.type,popup_once:!!u.popup_once}}catch(d){return Mi(`fetch \u5931\u8D25\uFF1A${d instanceof Error?d.message:String(d)}`),null}}async function z1(i){return((await z()).seenAnnouncementIds??[]).includes(i)}async function g1(i){let o=await z(),n=o.seenAnnouncementIds??[];if(n.includes(i))return;let d=[...n,i];if(d.length>Et)d.splice(0,d.length-Et);o.seenAnnouncementIds=d,await K(o)}async function $1(){let i=_t(await ei());if(i)return i;for(let o of await V()){let n=_t(o);if(n)return n}return null}async function Ut(){let i=await $1();if(!i){Mi("\u8DF3\u8FC7\uFF1A\u6CA1\u6709\u53EF\u7528\u7684 tako/custom provider\uFF08apiKey + baseUrl\uFF09");return}Mi(`\u67E5\u8BE2\u516C\u544A\uFF1A${i.baseUrl}/v1/announcements/popup`);let o=await k1(i.baseUrl,i.apiKey);if(!o)return;if(o.popup_once&&await z1(o.id)){Mi(`\u5DF2\u5728 seenAnnouncementIds\uFF0C\u8DF3\u8FC7\uFF1A${o.id}`);return}if(Mi(`\u5F39\u7A97\uFF1A${o.id}`),await Zu(o),o.popup_once)await g1(o.id),Mi(`\u6807\u8BB0\u5DF2\u770B\u8FC7\uFF1A${o.id}`)}vo();async function Dt(){await r0(),await t0(),await Wr(),await Promise.race([Kd(await V()),new Promise((i)=>setTimeout(i,3000))]),await Ut()}async function jt(i){let o=oi(i.clientId);if(!o)return!1;O("menu_action",{action:"launch",client_id:i.clientId});let n=await En(i.clientId);if(!n)return L.warn(g("cli.noProvider")||"\u672A\u914D\u7F6E\u53EF\u7528\u7684\u670D\u52A1\u5546"),!1;let e=process.platform==="win32"&&!!process.env.TAKO_WINDOWS_HANDOFF_FILE,u=await Hn(o,{projectPath:i.projectPath,args:i.args,envVars:i.envVars,selectedOptionIds:i.selectedOptionIds,providerContext:n,relaunchTakoOnWindows:e});if(!u.success)return L.error(u.error||g("cli.launchFailed")),!1;if(e)return!0;return!1}async function ic(){await Dt();let i;while(!0){let o=await Ft(i);if(i=void 0,!o)break;if(o.type==="exit")break;if(o.type==="provider-login"){let d=Ii()==="zh",e=o.tool==="claude"?"Claude":"Codex";L.info(d?`\u6B63\u5728\u6253\u5F00 ${e} \u5B98\u65B9\u767B\u5F55\uFF0C\u8BF7\u5728\u6D4F\u89C8\u5668\u4E2D\u5B8C\u6210\u6388\u6743...`:`Opening ${e} login; complete authorization in the browser...`);let u=await Me(o.tool),r=await Ge(o.tool,d),t=r.message;if(!r.ok&&u.error)t=u.error;else if(!r.ok&&!u.ok&&u.exitCode!=null)t=d?`${e} \u767B\u5F55\u672A\u5B8C\u6210\uFF08\u9000\u51FA\u7801 ${u.exitCode}\uFF09`:`${e} login did not complete (exit ${u.exitCode})`;if(r.ok)L.success(r.message);else L.warn(t);i={screen:"providers",message:r.ok?r.message:`! ${t}`};continue}if(o.type!=="launch")continue;if(await jt(o))process.exit(0)}}await lt(ic);