tako-cli 0.3.17 → 0.3.19
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.
- package/dist/index-ink.js +182 -182
- package/dist/index-opentui.js +88 -88
- package/dist/index.js +9 -4
- package/package.json +1 -1
package/dist/index-opentui.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
// @bun
|
|
3
|
-
var{defineProperty:
|
|
3
|
+
var{defineProperty:kd,getOwnPropertyNames:dc,getOwnPropertyDescriptor:ec}=Object,uc=Object.prototype.hasOwnProperty;function rc(i){return this[i]}var tc=(i)=>{var o=(Pe??=new WeakMap).get(i),n;if(o)return o;if(o=kd({},"__esModule",{value:!0}),i&&typeof i==="object"||typeof i==="function"){for(var d of dc(i))if(!uc.call(o,d))kd(o,d,{get:rc.bind(i,d),enumerable:!(n=ec(i,d))||n.enumerable})}return Pe.set(i,o),o},Pe;var cc=(i)=>i;function ac(i,o){this[i]=cc.bind(null,o)}var ii=(i,o)=>{for(var n in o)kd(i,n,{get:o[n],enumerable:!0,configurable:!0,set:ac.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:()=>mc,getApiKey:()=>xc,getApiId:()=>Di,ensureTakoDir:()=>Ho,TOOLS_DIR:()=>Nn,TAKO_SERVER:()=>Ie,TAKO_DIR:()=>Q,TAKO_CLI_DIR:()=>mi,TAKO_BUN_DIR:()=>bi,TAKO_BUN_CACHE_DIR:()=>gd,TAKO_BUN_BIN:()=>Y,PROXY_BASE_URL:()=>A,IS_DEV:()=>Xo,CONFIG_PATH:()=>zd});import{homedir as pc}from"os";import{join as _i,resolve as lc}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(zd);if(await i.exists()){let o=await i.json();return{...Ce,...o}}}catch{}return{...Ce}}async function K(i){await Ho(),await Bun.write(zd,JSON.stringify(i,null,2))}async function Ui(i){let n={...await z(),...i};return await K(n),n}async function mc(){return!!(await z()).apiKey}async function xc(){return(await z()).apiKey}async function Di(){return(await z()).apiId}var Q,zd,Nn,mi,bi,Y,gd,Ie,A,Xo,Ce;var C=N(()=>{Q=lc(process.env.TAKO_HOME||_i(pc(),".tako")),zd=_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"),gd=_i(bi,"install-cache"),Ie=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"||Ie.includes("localhost"),Ce={apiKey:"",apiId:"",installedClients:{}}});import{join as kn}from"path";function $d(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 $d(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 $d(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 $d(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){Md.set(i.id,i)}function Qe(){return Array.from(Md.values())}function oi(i){return Md.get(i)}var Md;var E=N(()=>{C();Md=new Map});var wc,Ai;var Gd=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
|
-
*/
|
|
29
|
+
*/wc=/^(\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(wc);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 yc(i,o){let n=i.slice(0,o).split(/\r\n|\n|\r/g);return[n.length,n.pop().length+1]}function sc(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]=
|
|
57
|
+
*/G=class G extends Error{line;column;codeblock;constructor(i,o){let[n,d]=yc(o.toml,o.ptr),e=sc(o.toml,n,d);super(`Invalid TOML document: ${i}
|
|
58
58
|
|
|
59
|
-
${e}`,o);this.line=n,this.column=d,this.codeblock=e}}});function
|
|
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
|
|
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=vc.test(i);if(e||fc.test(i)){if(hc.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 vc,fc,hc;var Sd=N(()=>{Gd();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
|
-
*/
|
|
90
|
+
*/vc=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,fc=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,hc=/^[+-]?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
|
|
95
|
+
`))o++;if(d||e!=="#")break;o=so(i,o)}return o}function Oe(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
|
|
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
|
|
124
|
-
`&&i[a]!=="\r")throw new G("unexpected character encountered",{toml:i,ptr:a});if(i[a]===",")a++}return[c,a]}let r=
|
|
123
|
+
*/});function bc(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==="["?Je(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=Oe(i,o,",",n),t=bc(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 Pd=N(()=>{Sd();Cd();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
|
|
151
|
-
`&&r!=="\r"){let t,c=e,a=!1,[p,l]=
|
|
152
|
-
`&&u!=="\r"){let r=
|
|
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(!Lc.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 Je(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 Lc;var Cd=N(()=>{Sd();Pd();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
|
-
*/
|
|
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
|
|
178
|
+
*/Lc=/^[a-zA-Z0-9-_]+[ \t]*$/});function Be(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 Id(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=Be(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=Be(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 Ye=N(()=>{Cd();Pd();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
|
|
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 Nc(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 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 Qd(i);if(o==="date"){if(isNaN(i.getTime()))throw TypeError("cannot serialize invalid date");return i.toISOString()}if(o==="object")return Wc(i,n,d);if(o==="array")return kc(i,n,d)}function Wc(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:Qd(r),e+=" = ",e+=qd(i[r],Ko(i[r]),o-1,n)}return e+" }"}function kc(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 zc(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+=
|
|
208
|
-
`)+
|
|
209
|
-
`)+
|
|
207
|
+
`,e+=Od(0,i[u],o,n,d);return e}function Od(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:Qd(a);if(p==="array"&&Nc(o[a]))r+=(r&&`
|
|
208
|
+
`)+zc(o[a],n?`${n}.${l}`:l,d-1,e);else if(p==="object"){let x=n?`${n}.${l}`:l;r+=(r&&`
|
|
209
|
+
`)+Od(x,o[a],x,d-1,e)}else u+=l,u+=" = ",u+=qd(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
|
|
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=Od(0,i,"",o,n);if(d[d.length-1]!==`
|
|
213
213
|
`)return d+`
|
|
214
|
-
`;return d}var Ae;var
|
|
214
|
+
`;return d}var Ae;var Xe=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(()=>{
|
|
240
|
+
*/Ae=/^[a-z0-9-_]+$/i});var He=N(()=>{Ye();Xe();Gd();ji();/*!
|
|
241
241
|
* Copyright (c) Squirrel Chat et al., All rights reserved.
|
|
242
242
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
243
243
|
*
|
|
@@ -263,24 +263,24 @@ ${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(
|
|
268
|
-
`);else{let e;if(i.type==="tako")e=`${
|
|
266
|
+
*/});function gc(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 Ze(){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 gc(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 Mc}from"path";import{homedir as Gc}from"os";function Ke(){return Pc??Mc(Gc(),".tako","models-cache.json")}function Jd(i){Pn.clear();for(let o of i)if(!Pn.has(o.id))Pn.set(o.id,o)}function Cc(){try{let o=$("fs").readFileSync(Ke(),"utf-8"),n=JSON.parse(o);if(typeof n?.fetchedAt!=="number"||!Array.isArray(n?.entries))return null;return n}catch{return null}}async function Ic(i){try{let o=await import("fs/promises"),n=Ke(),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=Cc();if(i&&Date.now()-i.fetchedAt<Sc){Jd(i.entries);return}Jd(ci)}async function Bd(){try{let i=await Ze();if(!i.length)return;Jd(i),await Ic({fetchedAt:Date.now(),entries:i}),Cn=!0}catch{}}function Ve(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 Yd(i){if(!Cn)Ni();let{lookupId:o,is1m:n}=Ve(i),d=Pn.get(o);if(!d)return;if(n)return{...d,contextWindow:1e6};return d}var Sc=86400000,Pc=null,Pn,Cn=!1;var Te=N(()=>{Sn();Pn=new Map});import{join as Qc}from"path";function Ee(){return Rc??Qc(Q,"tako-models-cache.json")}function Xd(i,o){return`${i.replace(/\/+$/,"")}#${o}`}function Hd(){if(Fe)return;Fe=!0;try{let i=$("fs"),o=JSON.parse(i.readFileSync(Ee(),"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 Jc(){try{let i=await import("fs/promises"),o=Ee(),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 Bc(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 Hd(),Vo.get(Xd(i,o))?.entries??null}async function In(i,o,n){Hd();let d=Xd(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(Oc)});if(!t.ok)return;let c=await t.json(),a=Bc(c);if(a.length===0)return;Vo.set(d,{fetchedAt:Date.now(),entries:a}),await Jc()}catch{}finally{Ad.delete(d)}})();return Ad.set(d,u),u}function Zd(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(Xd(d.baseUrl,e));if(u&&o-u.fetchedAt<qc)continue;let r=In(d.baseUrl,d.apiKey,e);if(!u)n.push(r)}}return Promise.all(n).then(()=>{return})}var qc=3600000,Oc=8000,Rc=null,Vo,Fe=!1,Ad;var Kd=N(()=>{C();Vo=new Map,Ad=new Map});var vo=N(()=>{Te();Kd()});import{homedir as Yc}from"os";import{join as Td}from"path";function je(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]=je(n[d],e);else n[d]=e;return n}function Ac(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 De(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 Xc(i,o){let n=await import("fs/promises");try{await n.mkdir(Fd,{recursive:!0})}catch{}let d={};try{d=Id(await n.readFile(_e,"utf-8"))}catch{}if(d=Ac(d),i.type==="codex-subscription")if(delete d.model_provider,d.check_for_update_on_startup=!1,d.remote_compaction_v2=!1,De(d),i.authData)await Bun.write(Ue,JSON.stringify(i.authData,null,2)+`
|
|
267
|
+
`);else await Bun.write(Ue,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;De(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=je(d,p)}await Bun.write(_e,Rd(d))}function Vd(i){if(i>=1e6)return"1M";if(i>0)return`${Math.round(i/1000)}k`;return"?"}function Tc(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} (${Vd(d.contextWindow)} ctx)`,zh:`\u4F7F\u7528 ${d.displayName}\uFF08\u4E0A\u4E0B\u6587 ${Vd(d.contextWindow)}\uFF09`},flag:`--model ${d.id}`,args:["--model",d.id],group:"model"}))}function Fc(i){if(Ni(),i&&(i.type==="tako"||i.type==="custom")){let d=Tc(i);if(d)return d}let o=i?.type==="deepseek"?Vc:Kc,n=[];for(let d of o){let e=ci.find((t)=>t.id===d),u=Vd(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 Ec(i){return[...Zc,...Fc(i)]}var Fd,_e,Ue,Hc,Zc,Kc,Vc;var iu=N(()=>{E();C();He();vo();Sn();Fd=Td(Yc(),".codex"),_e=Td(Fd,"config.toml"),Ue=Td(Fd,"auth.json");Hc={id:"codex",name:"Codex",package:"@openai/codex",command:"codex",runtime:"bun",continueArg:"--continue",brandColor:"blue",getEnvVars(i){return{}},setupConfigFiles:Xc,launchOptions:(i)=>Ec(i)},Zc=[{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"]}],Kc=["gpt-5.5","gpt-5.4","gpt-5.3-codex","gpt-5.3"],Vc=["deepseek-v4-flash","deepseek-v4-pro"];yo(Hc)});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 Ed(i){switch(i){case"deepseek":return"https://api.deepseek.com";case"xiaomi":return Ud;default:return}}function Dd(i){return i?.startsWith("tp-")?ou:Ud}function Eo(i){switch(i){case"deepseek":return["deepseek-v4-flash","deepseek-v4-pro"];case"xiaomi":return Uc;case"tako":case"anthropic":return _c;default:return}}function Hi(i,o){let n=i.supportedClients;if(!n||n.length===0)return!0;return n.includes(o)}var io,_d="https://api.deepseek.com/anthropic",Ud="https://api.xiaomimimo.com/anthropic",ou="https://token-plan-cn.xiaomimimo.com/anthropic",_c,Uc;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"}};_c=["claude-sonnet-4-6","claude-opus-4-6","claude-opus-4-7"],Uc=["mimo-v2.5-pro"]});var du={};ii(du,{spinner:()=>oa,setLogHandler:()=>jc,resetLogHandler:()=>ia,log:()=>L,createSpinner:()=>oo});function Dc(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
|
|
272
|
-
`)}}});var
|
|
271
|
+
`)}}}function jc(i){Pi=i}function ia(){Pi=nu}function oa(){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 nu,Pi,L;var Ci=N(()=>{nu={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:Dc},Pi=nu;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 eu={};ii(eu,{t:()=>g,setLocale:()=>jd,getLocale:()=>Ii,detectLocale:()=>no,clearLocaleOverride:()=>na});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 jd(i){Qn=i}function na(){Qn=null}function g(i,o){let n=no(),d=i.split("."),e=da;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,da;var X=N(()=>{da={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
|
|
275
|
-
`,{mode:384})}async function
|
|
276
|
-
`)}}var
|
|
277
|
-
`),{args:["--setting-sources","project,local","--settings",d],cleanedFields:t,settingsPath:d}}async function
|
|
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.17";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.17",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
|
|
280
|
-
`)}var
|
|
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:()=>ma,readClaudeAuth:()=>la});import{homedir as uu,platform as ea,userInfo as ua}from"os";import{join as o0}from"path";function tu(){return[process.env.USER||(()=>{try{return ua().username}catch{return""}})(),"root"].filter(Boolean)}async function ra(i){let o=Bun.spawn(["security","find-generic-password","-s",ru,"-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 ta(){for(let i of tu()){let o=await ra(i);if(o)return o}return null}async function ca(i){let o=JSON.stringify(i),n=tu()[0],d=Bun.spawn(["security","add-generic-password","-U","-s",ru,"-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 aa(){try{let i=await import("fs/promises");return JSON.parse(await i.readFile(au,"utf-8"))}catch{return null}}async function pa(i){let o=await import("fs/promises");await o.mkdir(cu,{recursive:!0}),await o.writeFile(au,JSON.stringify(i,null,2)+`
|
|
275
|
+
`,{mode:384})}async function la(){let i=pu?await ta():await aa(),o;try{let n=await import("fs/promises"),d=JSON.parse(await n.readFile(i0,"utf-8"));if(d.oauthAccount&&typeof d.oauthAccount==="object")o=d.oauthAccount}catch{}return{credentials:i??void 0,oauthAccount:o}}async function ma(i){if(i.credentials)if(pu)await ca(i.credentials);else await pa(i.credentials);if(i.oauthAccount){let o=await import("fs/promises"),n={};try{n=JSON.parse(await o.readFile(i0,"utf-8"))}catch{}n.oauthAccount=i.oauthAccount,await o.writeFile(i0,JSON.stringify(n,null,2)+`
|
|
276
|
+
`)}}var ru="Claude Code-credentials",cu,au,i0,pu;var On=N(()=>{cu=o0(uu(),".claude"),au=o0(cu,".credentials.json"),i0=o0(uu(),".claude.json"),pu=ea()==="darwin"});var lu={};ii(lu,{updateProvider:()=>Zi,setDefaultProvider:()=>d0,setClientProvider:()=>e0,resolveXiaomiBaseUrl:()=>Dd,resolveProviderContext:()=>_,migrateIfNeeded:()=>u0,mergeDetectedProviders:()=>Uo,isProviderCompatible:()=>Hi,getProvidersForClient:()=>Qi,getProviders:()=>V,getProvider:()=>xa,getModelChoices:()=>Eo,getDefaultSupportedClients:()=>di,getDefaultProvider:()=>ei,getDefaultModel:()=>Fo,getDefaultBaseUrl:()=>Ed,getClientProvider:()=>qi,fixupProviders:()=>r0,detectProviders:()=>_o,deleteProvider:()=>n0,addProvider:()=>eo,XIAOMI_TOKEN_PLAN_URL:()=>ou,XIAOMI_ANTHROPIC_URL:()=>Ud,PROVIDER_TYPE_NAMES:()=>io,DEEPSEEK_ANTHROPIC_URL:()=>_d});async function V(){return(await z()).providers??[]}async function xa(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 n0(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 d0(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 e0(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 wa(){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 ya(){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 sa(){let i=await ya();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([wa(),sa()]);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 u0(){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 r0(){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 va}from"os";import{dirname as fa,join as xu}from"path";function Na(i){if(i.startsWith("ANTHROPIC_"))return!0;return La.includes(i)}function Wa(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(Na(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 ka(i={}){let o=await import("fs/promises"),n=i.sourcePath??ha,d=i.targetPath??ba,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}=Wa(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(fa(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 za(i){let{readClaudeAuth:o,writeClaudeAuth:n}=await Promise.resolve().then(() => (On(),qn)),{getProviders:d,updateProvider:e}=await Promise.resolve().then(() => (ai(),lu)),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 Pa(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 mu(i){if(i>=1e6)return"1M";if(i>0)return`${Math.round(i/1000)}k`;return"?"}function Ca(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} (${mu(d.contextWindow)} ctx)`,zh:`\u4F7F\u7528 ${d.displayName}\uFF08\u4E0A\u4E0B\u6587 ${mu(d.contextWindow)}\uFF09`},flag:`--model ${e}`,args:[],envVars:{ANTHROPIC_MODEL:e},group:"model"}})}function Ia(i){if(Ni(),i&&(i.type==="tako"||i.type==="custom")){let d=Ca(i);if(d)return d}let o=i?.type==="deepseek"?Ga:i?.type==="xiaomi"?Sa:Ma,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=Pa(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[...$a,...Ia(i)]}var ha,ba,La,ga,$a,Ma,Ga,Sa;var t0=N(()=>{E();Si();Ci();X();vo();Sn();C();ha=xu(va(),".claude","settings.json"),ba=xu(Q,"claude-code","settings.json"),La=["CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC","API_TIMEOUT_MS"];ga={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:_d,ANTHROPIC_AUTH_TOKEN:i.apiKey,...n?{ANTHROPIC_MODEL:n}:{}};case"xiaomi":return{...o,ANTHROPIC_BASE_URL:Dd(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 ka();if(e)d=e.args}if(i.type==="claude-subscription")await za(i);return d.length>0?{args:d}:void 0},launchOptions:(i)=>Qa(i)},$a=[{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"]}],Ma=["claude-sonnet-4-6","claude-opus-4-6","claude-opus-4-7"],Ga=["deepseek-v4-flash","deepseek-v4-pro"],Sa=["mimo-v2.5-pro"];yo(ga)});import{homedir as qa}from"os";import{join as yu}from"path";async function Oa(){let i=await import("fs/promises");try{await i.mkdir(su,{recursive:!0})}catch{}let o={};try{o=JSON.parse(await i.readFile(wu,"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(wu,JSON.stringify(o,null,2)+`
|
|
278
|
+
`)}var su,wu,Ra;var vu=N(()=>{E();su=yu(qa(),".gemini"),wu=yu(su,"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:Oa};yo(Ra)});var c0=N(()=>{iu();t0();vu();E()});var ku={};ii(ku,{showRegionInfo:()=>l0,getNpmRegistry:()=>ui,getMirrors:()=>Nu,getLatestBunVersion:()=>Wu,getBunMirrorDownloadUrl:()=>p0,getBunInstallCommand:()=>a0,detectRegion:()=>Ki,MIRRORS:()=>Do});import{readFileSync as Ja,writeFileSync as Ba,mkdirSync as Ya}from"fs";import{join as hu}from"path";import{homedir as bu}from"os";function Xa(){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 Ha(){try{let i=Ja(Lu,"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>Aa)return null;return o.region}catch{return null}}function fu(i){try{Ya(hu(bu(),".tako"),{recursive:!0}),Ba(Lu,JSON.stringify({region:i,detectedAt:Date.now()}),"utf-8")}catch{}}function Za(){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 Ka(){if(Rn)return Rn;return Rn=(async()=>{let o=[Va,Ta,Fa,Ea].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"}})(),Rn}async function Ki(){if(ho)return ho;let i=Xa();if(i)return ho=i,i;let o=Ha();if(o)return ho=o,o;let n=Za();if(n)return ho=n,fu(n),n;let d=await Ka();return ho=d,fu(d),d}async function Va(){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 Ta(){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 Fa(){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 Ea(){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 Nu(){let i=await Ki();return Do[i]}async function ui(){return(await Nu()).npm}function a0(){return"curl -fsSL https://bun.sh/install | bash"}async function Wu(){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 p0(){let i=Do.cn.bunBinary,o=await Wu(),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 l0(){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,Rn=null,Lu,Aa=2592000000,Do;var bo=N(()=>{X();Ci();Lu=hu(bu(),".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 _a=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)}},zu=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 _a({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 gu=()=>{};function $u(){if(!Lo)Lo=new zu({clientId:Ua,clientSecret:Da,apiUrl:ja});return Lo}function Mu(i,o,n){let d=$u().track(i,{profileId:o,...n}).catch(()=>{});Jn.push(d)}function Gu(i,o){let{email:n,...d}=o,e=$u().identify({profileId:i,...typeof n==="string"?{email:n}:{},firstName:String(d.platform||""),properties:d}).catch(()=>{});Jn.push(e)}async function Su(){if(await Promise.allSettled(Jn),Jn.length=0,Lo){try{Lo.flush()}catch{}Lo=null}}var Ua="d65a6d4b-f702-4af6-98e7-bdb999e01d5f",Da="sec_1e0ea34016bc3a5f8ef5",ja="https://op.shiroha.tech/api",Lo=null,Jn;var Pu=N(()=>{gu();Jn=[]});function Cu(){return{cli_version:ip,platform:process.platform,arch:process.arch,locale:no(),node_version:process.version}}function Iu(i){return Bun.hash(i).toString(16).slice(0,8)}var ip="0.3.19";var m0=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 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 H(){if(x0)return;try{if(!await Qu())return;let i=await z(),o=await qu();if(o==="anonymous")return;let d=(i.providers??[]).find((u)=>u.email)?.email,e=await Ki();Gu(o,{...d?{email:d}:{},region:e,locale:no(),first_seen_version:op,platform:process.platform,arch:process.arch}),x0=!0}catch{}}function O(i,o){np(i,o).catch(()=>{})}async function np(i,o){try{if(!await Qu())return;let n=await qu();Mu(i,n,{...Cu(),...o})}catch{}}async function jo(){await Su()}function U(){No=null,x0=!1}var op="0.3.19",x0=!1,No=null;var xi=N(()=>{Pu();C();bo();X();m0();m0()});function rp(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(rp(o,e))};r();let t=setInterval(r,1000),c=(p)=>{if(!p)return;if(u.push(p),dp.test(p))e.phase="\u89E3\u6790\u4F9D\u8D56";else if(Ou.test(p)){e.phase="\u4E0B\u8F7D\u5E76\u89E3\u538B";let l=p.match(Ou);if(l)e.pkgCount=parseInt(l[1],10)}else if(ep.test(p))e.phase="\u5199\u5165 lockfile";else if(up.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 dp,Ou,ep,up;var w0=N(()=>{dp=/^Resolving dependencies/,Ou=/^Resolved, downloaded and extracted \[(\d+)\]/,ep=/^Saved lockfile/,up=/^(\d+) packages? installed/});function tp(i){return i.replace(/\r/g,`
|
|
281
281
|
`).replace(/\n{3,}/g,`
|
|
282
282
|
|
|
283
|
-
`).trim()}function
|
|
283
|
+
`).trim()}function Bu(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=tp(i??"");if(!n)return o;let d=Bu(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=Bu(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 vp(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),vp(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 Xu(i){let o=i.defaultValue??!0,n=o?"[Y/n]":"[y/N]";process.stdout.write(`
|
|
284
284
|
? ${i.message} ${n} `);let d=await Au((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
|
|
@@ -293,34 +293,34 @@ Press Enter, Esc, or q to close. This announcement is shown once.
|
|
|
293
293
|
Press Enter, Esc, or q to close.
|
|
294
294
|
`),await Au((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 R}from"path";function fp(i){return i.startsWith(bi)}function Zu(i){return{...process.env,BUN_CONFIG_REGISTRY:i,BUN_INSTALL_CACHE_DIR:gd}}async function hp(){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 Ku(){return await hp()!==null}async function bp(){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 Lp(i){let o=await import("fs/promises"),{join:n}=await import("path"),d=process.platform==="win32",e=d?"bun.exe":"bun",u=await p0();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 Np(){let i=oo();if(!await bp())return L.error("\u8BF7\u5148\u624B\u52A8\u5B89\u88C5 unzip: apt install unzip / yum install unzip"),!1;await l0(),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 Lp(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}" ${a0()}`;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 Wp(){if(await Ku())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 Np()}async function Wi(){if(uo){if(!fp(uo))uo=Y;return uo}if(await Ku())return uo=Y,Y;return Y}async function L0(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 kp(i){return(await z()).installedClients[i.id]?.version||null}async function zp(i,o){let n=R(i,"node_modules",o,"package.json");try{return await Bun.file(n).exists()}catch{return!1}}async function Vu(i){let o=Gi(i.id);return zp(o,i.package)}async function Tu(i){let o=await kp(i);if(!o)return!0;let n=await L0(i.package);if(!n)return!1;return o!==n}function Fu(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 Eu(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=Fu(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:Zu(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=Fu(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 v=await Wi(),h=Bun.spawn([v,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 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=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 nc=await new Response(mo.stderr).text();L.warn(`curl \u4E0B\u8F7D\u5931\u8D25: ${nc.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 Nd=Bun.spawn(["tar","xzf",li,"-C",B,`package/${x}`],{stdout:"pipe",stderr:"pipe"});await Nd.exited;let ic=R(B,"package",x),Wd=Bun.file(ic);if(await Wd.exists()&&Wd.size>1024){if(await Bun.write(p,Wd),!l)await n.chmod(p,493);return await n.rm(B,{recursive:!0,force:!0}).catch(()=>{}),!0}let oc=await new Response(Nd.stderr).text();L.warn(`tar \u63D0\u53D6\u5931\u8D25 (tgz=${Ao} bytes, exit=${Nd.exitCode}): ${oc.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=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,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(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 h0(i,o=!1){let n=oo(),d=Gi(i.id);try{if(!await Wp())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 Vu(i),u=o||await Tu(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:Zu(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 Eu(i,d,l,x),await f0(i,d);let v=await L0(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 s0(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 v0(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 s0(t))return;L.info("\u6B63\u5728\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236...");let c=await Wi(),a=await ui();if(await Eu(i,o,c,a),!await f0(i,o)||await s0(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 h0(i)).success)if(await f0(i,o),await s0(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 _u(i){if(!await Vu(i)){let d=await h0(i);if(d.success)await v0(i);return d}if(await v0(i),await Tu(i)){let d=await L0(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 gp(i.id))return L.info("\u4ECA\u65E5\u5DF2\u8DF3\u8FC7\u66F4\u65B0\uFF0C\u4F7F\u7528\u5F53\u524D\u7248\u672C"),{success:!0};if(!await Xu({message:`\u662F\u5426\u66F4\u65B0 ${i.name}\uFF1F`,defaultValue:!1}))return await $p(i.id),L.info("\u8DF3\u8FC7\u66F4\u65B0\uFF0C\u4F7F\u7528\u5F53\u524D\u7248\u672C"),{success:!0};let t=await h0(i,!0);if(t.success)return await v0(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 gp(i){try{let o=Bun.file(b0);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 $p(i){try{let o={},n=Bun.file(b0);if(await n.exists())try{o=await n.json()}catch{}o[i]=new Date().toISOString().slice(0,10),await Bun.write(b0,JSON.stringify(o))}catch{}}var uo=null,b0;var dn=N(()=>{Ci();E();C();bo();xi();w0();b0=R(Q,".update-dismissed.json")});import{homedir as Mp}from"os";async function W0(i){try{return(await(await import("fs/promises")).stat(i)).isDirectory()}catch{return!1}}async function Uu(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,Gp);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 Sp(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 Du(i,o=N0,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:Sp(a,i)})).sort((a,p)=>p.lastUsedTime-a.lastUsedTime),c=[];for(let{lastUsedTime:a,...p}of t){if(c.length>=o)break;if(await W0(p.path))c.push(p)}return c}async function ju(){let o=(await z()).recentProjects||[],n=process.cwd();return o.find((e)=>e.path===n)?.lastClientId||null}function k0(i,o=25){let n=Mp(),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 ir(i){let{t:o}=(X(),tc(eu)),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 Gp=50,N0=3;var An=N(()=>{C()});import{dirname as qp,join as Op}from"path";import{mkdir as Rp}from"fs/promises";function rr(){return M0??Op(Q,"model-usage.json")}function $0(){return{counts:{},updatedAt:new Date(0).toISOString()}}async function tr(){try{let i=Bun.file(rr());if(!await i.exists())return $0();let o=await i.json(),n=o?.counts;if(!n||typeof n!=="object")return $0();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 $0()}}async function Yp(i){if(M0)await Rp(qp(M0),{recursive:!0});else await Ho();await Bun.write(rr(),JSON.stringify(i,null,2))}async function cr(){return{...(await tr()).counts}}async function ar(i){let o=await tr(),n={};for(let[d,e]of Object.entries(o.counts)){let u=e*Jp;if(u>=Bp)n[d]=u}for(let d of i){if(!d.startsWith("model-"))continue;n[d]=(n[d]??0)+1}await Yp({counts:n,updatedAt:new Date().toISOString()})}var Jp=0.95,Bp=0.05,M0=null;var G0=N(()=>{C()});function S0(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 Vp(i,o){if(!Number.isFinite(i)||i<0)return;return{usedPct:0,costUsed:i,...o?{windowMinutes:o}:{}}}async function Tp(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:S0(n.usage.windowCost??0,n.plan.window_cost_limit??0,n.plan.window_minutes),daily:S0(n.usage.dailyCost??0,n.plan.daily_cost_limit??0),secondary:S0(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 Tp(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:Vp(t),fetchedAt:o}}catch(e){return{...n,hint:"Tako \u7528\u91CF\u63A5\u53E3\u8BF7\u6C42\u5931\u8D25",error:String(e.message??e)}}}async function pr(i){let o=await Di();return ro(o)}var P0=N(()=>{C()});function C0(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 Fp(i){return i.authData?.credentials?.claudeAiOauth?.accessToken}async function lr(i){let o=Date.now(),n={provider:"claude-subscription",status:"error",fetchedAt:o},d=Fp(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=C0(u.seven_day_opus),t=C0(u.five_hour);if(t)t.windowMinutes=300;let c=C0(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 mr(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 Ep(i){let o=i.authData?.tokens;return{accessToken:o?.access_token,accountId:o?.account_id}}async function _p(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
|
|
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
|
|
301
|
-
`),e.exitCode}let n=o.loadConfig??z,d=await
|
|
302
|
-
`),d.exitCode}var
|
|
303
|
-
`,"utf-8")}async function
|
|
304
|
-
`).filter(Boolean).slice(-o),u=[];for(let r of e)try{u.push(JSON.parse(r))}catch{}return u}async function
|
|
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
|
|
306
|
-
`))>=0){let h=y.slice(0,
|
|
307
|
-
`)){let e=d.match(/^\+\+\+\s+b\/(.*)$/);if(e)o.push(e[1])}return Array.from(new Set(o))}function
|
|
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 Up(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 xr(i){let o=Date.now(),n={provider:"codex-subscription",status:"error",fetchedAt:o},{accessToken:d,accountId:e}=Ep(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 jp(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:mr(a),secondary:mr(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 Dp=async(i,o)=>{let n=await _p(i,o).catch(()=>null);if(n)return n;return Up(i,o)},jp;var wr=N(()=>{jp=Dp});var Q0={};ii(Q0,{invalidateQuotaCache:()=>rl,getOfficialQuota:()=>I0,fetchTakoQuotaByApiId:()=>ro,_setQuotaDiskCachePathForTest:()=>dl,_clearQuotaCache:()=>ul});import{homedir as il}from"os";import{join as ol}from"path";function nl(i){return`${i.type}:${i.id}`}function vr(){return sr??ol(il(),".tako","quota-cache.json")}function dl(i){sr=i}function fr(){try{let o=$("fs").readFileSync(vr(),"utf-8"),n=JSON.parse(o);return typeof n==="object"&&n!==null?n:{}}catch{return{}}}function hr(i){try{let o=$("fs"),n=vr(),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 el(i){return{provider:i.type,status:"unsupported",fetchedAt:Date.now()}}async function I0(i){let o=nl(i),n=Date.now(),d=ko.get(o);if(d&&n-d.fetchedAt<yr)return d;let e=fr(),u=e[o];if(u&&n-u.fetchedAt<yr)return ko.set(o,u),u;let r;switch(i.type){case"tako":r=await pr(i);break;case"claude-subscription":r=await lr(i);break;case"codex-subscription":r=await xr(i);break;default:r=el(i);break}return ko.set(o,r),e[o]=r,hr(e),r}function ul(){ko.clear()}function rl(i,o){for(let n of[...ko.keys()])if(n.endsWith(`:${i}`))ko.delete(n);try{let n=fr(),d=!1;for(let e of Object.keys(n))if(e.endsWith(`:${i}`))delete n[e],d=!0;if(d)hr(n)}catch{}}var yr=60000,ko,sr=null;var Tn=N(()=>{P0();wr();ko=new Map});var A0={};ii(A0,{listAvailableVersions:()=>J0,installAtVersion:()=>B0,getInstalledVersion:()=>Y0});import{join as Un}from"path";async function J0(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 B0(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(),ku)),a=await c(),{log:p}=await Promise.resolve().then(() => (Ci(),du));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 Y0(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 zr={};ii(zr,{runQuotaCommand:()=>$l,buildQuotaPayload:()=>kr});async function kl(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 zl(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 X0(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 Wr(i){return{exitCode:0,payload:{provider:"tako",status:"ok",fiveHour:X0(i.primary),daily:X0(i.daily),weekly:X0(i.secondary),fetchedAt:new Date(i.fetchedAt).toISOString()}}}function gl(i){return rn(i.error||"quota_unavailable",i.hint||"Tako quota is unavailable",i.hint)}async function kr(i,o={}){let n=o.fetchQuotaByApiId??ro,d=o.resolveApiIdFromKey??kl,e=zl(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 Wr(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 Wr(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 gl(u);return rn("missing_api_id","Tako API ID is not configured")}async function $l(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 kr(await n(),o);return process.stdout.write(`${JSON.stringify(d.payload)}
|
|
302
|
+
`),d.exitCode}var gr=N(()=>{C();P0()});import{join as Vi}from"path";import{homedir as Ml}from"os";import{mkdir as Gl,readFile as jn,writeFile as V0,rename as T0,readdir as $r,rm as Sl,appendFile as Mr}from"fs/promises";function yi(i){return Vi(H0,i)}function Gr(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 Z0(i,o){return Vi(tn(i),`${o}.req.json`)}function K0(i,o){return Vi(tn(i),`${o}.resp.json`)}async function cn(i){await Gl(i,{recursive:!0})}async function Sr(i){await cn(yi(i.sid)),await j(i),await Mr(D(i.sid),"")}async function zo(i){try{let o=await jn(Gr(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 V0(n,JSON.stringify(d,null,2),"utf-8"),await T0(n,Gr(i.sid))}async function si(i,o){await Mr(D(i),JSON.stringify(o)+`
|
|
303
|
+
`,"utf-8")}async function id(){await cn(H0);let i=await $r(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 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 F0(i){try{await Sl(yi(i),{recursive:!0,force:!0})}catch{}}async function Pr(i,o){await cn(tn(i));let n=Z0(i,o.approvalId)+".tmp";await V0(n,JSON.stringify(o,null,2),"utf-8"),await T0(n,Z0(i,o.approvalId))}async function Pl(i,o){try{return JSON.parse(await jn(Z0(i,o),"utf-8"))}catch{return null}}async function nd(i,o,n){await cn(tn(i));let d=K0(i,o)+".tmp";await V0(d,JSON.stringify(n,null,2),"utf-8"),await T0(d,K0(i,o))}async function an(i,o){try{return JSON.parse(await jn(K0(i,o),"utf-8"))}catch{return null}}async function pn(i){try{let o=await $r(tn(i)),n=[];for(let d of o){if(!d.endsWith(".req.json"))continue;let e=d.slice(0,-9),u=await Pl(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 H0;var Ti=N(()=>{H0=Vi(Ml(),".tako","agent-sessions")});import{spawn as Cl}from"child_process";async function dd(i,o,n){await si(i,o),n?.onFrame?.(o)}function Il(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 Ir(i,o){return i.__env=o,i}var gi=()=>Date.now(),ln,Cr;var Qr=N(()=>{Ti();E();dn();ln=new Map,Cr={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=Cl(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 Il(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 E0}from"path";import{readFile as ql,writeFile as Ol}from"fs/promises";import{homedir as Rl}from"os";function Jl(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 qr(i,o){if(!i)return!1;let n=Ql(i)?E0(i):E0(o,i),d=E0(o);return n===d||n.startsWith(d+"/")}function Jr(i,o,n,d){if(o==="item/commandExecution/requestApproval"||o==="execCommandApproval"){let e=String(n?.command??""),u=Jl(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=Bl(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(!qr(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)=>qr(r,d)))return{kind:"auto_allow",reason:"all paths inside workdir (non-strict)"};return{kind:"ask"}}return{kind:"ask"}}function Bl(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 D0(i){return Rr(yi(i),"policy.json")}async function _0(i){try{return JSON.parse(await ql(i,"utf-8"))}catch{return null}}async function ed(i){let o=await _0(Yl),n=await _0(D0(i));return Or(Or(U0,o),n)}function Or(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 _0(D0(i))??{}}async function rd(i,o){await Ol(D0(i),JSON.stringify(o,null,2),"utf-8")}async function Br(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 U0,Yl;var j0=N(()=>{Ti();U0={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};Yl=Rr(Rl(),".tako","agent-policy.json")});import{spawn as Al}from"child_process";import{writeFile as Xl,unlink as Hl}from"fs/promises";import{join as Yr}from"path";class Zr{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"){
|
|
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 Ar(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=Al(u,r,{env:e,cwd:i,stdio:["pipe","pipe","pipe"]});return t.stderr?.on("data",()=>{}),new Zr(t)}async function Xr(i){await i.request("initialize",{clientInfo:{name:"tako-agent",title:"Tako Agent",version:"0.1"},capabilities:null})}function Hr(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 ie(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 Zl(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 Kl(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 Vl(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(),Kr;var Vr=N(()=>{Ti();j0();E();dn();Kr={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 Ar(i.workdir,d),r=Yr(yi(i.sid),"turn.pid");if(u.pid())await Xl(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=Zl(l);(async()=>{let b=await ed(i.sid),v=Jr(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,ie(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,ie(l,!1));return}let h={approvalId:y,method:l,params:w,approvalType:s,requestedAt:ri()};await Pr(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 Kl(i.sid,y);i.status="running",await j(i),u.reply(x,ie(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=Vl(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 Xr(u),!i.codexThreadId){let l=await u.request("thread/start",Hr({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",Hr({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 Hl(r).catch(()=>{}),p)i.turnCount++;return i.lastActiveAt=ri(),i.status="idle",await j(i),i},async cancel(i){let o=Yr(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 Ar(i.workdir,o);await Xr(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 Tl}from"crypto";async function mn(i){let o=go[i.backend],n=oe[i.backend],d=oi(n);if(!d)throw Error(`client ${n} \u672A\u6CE8\u518C`);let e=await Tr(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=Tl(),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 Sr(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 ne(d);if(d.backend==="claude")Ir(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 ne(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 ne(n));if(await go[n.backend].close(n),o)await F0(i)}async function cd(){return id()}function Fl(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 Fl(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 F0(n.sid),o++;continue}if(n.backend==="codex"){if(!await go.codex.isAlive(n))n.status="dead",await j(n)}}return o}async function Tr(i,o,n){let d=await z(),e=await V(),u=oe[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 ne(i){let o=oe[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 Tr(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 Fr(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,oe;var xd=N(()=>{Qr();Vr();Ti();C();ai();E();go={claude:Cr,codex:Kr},oe={claude:"claude-code",codex:"codex"}});function Mo(i,o="human",n={}){if(o==="json"){process.stdout.write(JSON.stringify(de(i))+`
|
|
310
|
+
`);return}if(o==="verbose"){_l(i,new Date(i.ts).toISOString().slice(11,23),{expandError:!0,...n});return}El(i,n)}function Er(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
|
|
313
|
-
$ ${n}`);break}case"tool_result":{let n=
|
|
312
|
+
`)}function El(i,o){switch(i.kind){case"text_delta":process.stdout.write(i.text);break;case"tool_use":{let n=_r(i.input)??Ri(JSON.stringify(i.input),240);console.log(`
|
|
313
|
+
$ ${n}`);break}case"tool_result":{let n=Ur(i.output);if(Go(i.output)){console.log(` \u2717 FAILED${n?` ${n}`:""}`);let e=Ul(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(` ${
|
|
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(
|
|
318
|
+
\u2717 ${i.message}`),o.expandError&&i.raw!==void 0)console.log(Er(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 _l(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
319
|
[${o}] \uD83D\uDCAD ${Ri(i.text,240)}`);break;case"tool_use":console.log(`
|
|
320
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(`
|
|
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(
|
|
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
|
|
322
|
+
[${o}] \u2717 ${i.message}`),n.expandError!==!1&&i.raw!==void 0)console.log(Er(i.raw));break}case"session_closed":console.log(`[${o}] \u23F9 session_closed`);break}}function de(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=_r(i.input);return o.input=n?{command:n}:i.input,o}case"tool_result":return o.summary=Ur(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 _r(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 Ur(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 Ul(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 Dr(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=${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 nt={};ii(nt,{runAgentCommand:()=>jl});import{existsSync as ee}from"fs";import{stat as wd}from"fs/promises";import{createReadStream as Dl}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 jr(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 ue(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 jl(i){let o=i[0],n=i.slice(1);if(!o||o==="help"||o==="-h"||o==="--help"){it();return}switch(o){case"start":return im(n);case"run":return om(n);case"list":case"ls":return nm(n);case"send":return dm(n);case"cancel":return em(n);case"close":return um(n);case"show":return rm(n);case"logs":case"log":return tm(n);case"attach":return cm(n);case"purge":return am();case"default":return wm(n);case"defaults":return ym();case"approve":return pm(n);case"pending":return lm(n);case"policy":return mm(n);case"wait":return xm(n);default:console.error(`\u672A\u77E5\u5B50\u547D\u4EE4: ${o}`),it(),process.exit(1)}}function it(){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
|
|
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 im(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
|
|
355
|
+
\u540E\u7EED\uFF1Atako agent send ${u.sid} "\u4F60\u7684 prompt"`)}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 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
|
|
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)=>
|
|
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
|
|
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 nm(i){let{flags:o}=vi(i),{filter:n}=ue(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)=>Dr(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:jr(Date.now()-l.createdAt),last:jr(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 dm(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 em(i){let{positional:o,flags:n}=vi(i),{filter:d,hasFilter:e}=ue(n);if(e&&!o[0]){let r=await ad(d);if(!await ot("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 um(i){let{positional:o,flags:n}=vi(i),{filter:d,hasFilter:e}=ue(n);if(e&&!o[0]){let r=await ad(d);if(!await ot(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 ot(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 rm(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(de)},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
|
|
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 tm(i){let{positional:o,flags:n}=vi(i),d=await $i(o[0]);if(!ee(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
|
|
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
|
|
365
|
-
`);return}if(e.length===0){console.log("(\u65E0 pending)");return}for(let u of e)console.log(`[${u.approvalType}] id=${u.approvalId} ${
|
|
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
|
|
367
|
-
`);else console.error(`session ${d} \u4E0D\u5B58\u5728`);process.exit(1)}let t=r>0?0:(await
|
|
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
|
|
363
|
+
`);else Mo(p,"verbose",{expandError:!0})}if(e&&!c&&!n.json)console.log("(\u65E0\u9519\u8BEF\u5E27)")}async function cm(i){let{positional:o,flags:n}=vi(i),d=await $i(o[0]),e=n.json?"json":n.verbose?"verbose":"human";if(!ee(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=Dl(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 am(){let i=await ld();console.log(`\u2713 \u6E05\u7406\u4E86 ${i} \u4E2A closed/dead session`)}async function pm(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 Br(d,n.rule),console.log(`\u2713 policy: exec_allow += /${n.rule}/`)}async function lm(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 mm(i){if(i[0]==="default-show"){console.log(JSON.stringify(U0,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 xm(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(!ee(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
|
|
373
|
+
`);else console.error("event=timeout");process.exit(1)}async function wm(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 Fr(o,n),console.log(`\u2713 ${o} \u9ED8\u8BA4 provider = ${n}`)}async function ym(){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 dt=N(()=>{Ti();xd();j0()});var re;var te=N(()=>{re={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
|
|
432
|
+
`}});var ce;var ae=N(()=>{ce={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
|
|
515
|
+
`}});var yd;var et=N(()=>{te();ae();te();ae();yd=[re,ce]});var ut={};ii(ut,{runSkillCommand:()=>fm});import{join as pe}from"path";import{existsSync as sm,mkdirSync as vm}from"fs";async function fm(i){let o=i[0];if(!o||o==="list"){console.log(`
|
|
516
516
|
Available skills:
|
|
517
|
-
`);for(let n of
|
|
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"?
|
|
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=
|
|
521
|
-
`)}function
|
|
522
|
-
`}async function
|
|
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=pe(process.cwd(),".claude","skills");for(let u of d){let r=pe(e,u.name),t=pe(r,u.filename);if(sm(t)){console.log(` skip ${u.name} (already exists)`);continue}vm(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 rt=N(()=>{et()});var ct={};ii(ct,{runModelsCommand:()=>Sm});function hm(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 bm(i){return(i.providers??[]).filter((n)=>n.type==="tako"&&!!n.baseUrl).sort((n,d)=>n.id.localeCompare(d.id))}function Lm(i){return[...i].sort((o,n)=>o.id.localeCompare(n.id)||o.displayName.localeCompare(n.displayName))}function Nm(i,o){let n=[],d=!1;for(let e of tt){let u=o(i.baseUrl,e);if(u===null){n.push({apiType:e,models:[]});continue}d=!0,n.push({apiType:e,models:Lm(u)})}return{id:i.id,name:i.name,baseUrl:i.baseUrl,buckets:n,hasAnyCache:d}}async function Wm(i,o){let n=[];for(let d of i){if(!d.apiKey||!d.baseUrl)continue;for(let e of tt)n.push(o(d.baseUrl,d.apiKey,e).catch(()=>{}))}await Promise.allSettled(n)}function zm(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 gm(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 $m(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,km),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 Mm(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=zm(d.buckets);n.push(` ${e.length} models`);for(let u of gm(e))n.push(...$m(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 Sm(i=[],o={}){let n=hm(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??
|
|
525
|
-
`),
|
|
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
|
|
528
|
-
`)}var
|
|
529
|
-
exec "${
|
|
530
|
-
`;await i.writeFile(n,u,{mode:493})}}async function
|
|
531
|
-
`)}import{join as
|
|
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[
|
|
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}}}
|
|
534
|
-
${g("cli.version",{version:
|
|
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=bm(c);if(n.refresh&&a.length>0)await Wm(a,e);let p=a.map((x)=>Nm(x,u)),l=new Date(r()).toISOString();if(n.json)process.stdout.write(Gm(p,n.refresh,l));else process.stdout.write(Mm(p,t()));return 0}var tt,km=5;var at=N(()=>{C();Kd();tt=["openai","claude"]});var me="0.3.19",sn=22,m,So,Po,mt,xt,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},mt=["\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
|
+
`),xt=["\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 wt(i=45){let o=Qe(),n=await ju(),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 Du(c.id,N0,!0),p=process.cwd(),l=[{label:e?"\u5728\u5F53\u524D\u76EE\u5F55\u542F\u52A8":"Launch in current directory",hint:k0(p,i),path:p},...a.map((k)=>({label:k0(k.path,i),hint:ir(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 cr()}catch{t={}}return{clients:r,defaultIdx:0,hasProviders:r.some((c)=>c.providers.length>0),pickCounts:t,zh:e}}var yt=N(()=>{c0();E();X();G0();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 xe(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 st(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 vt(){let i=await ft(),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 ft(){let i=await wt(48);return{clients:i.clients.map((n)=>({...n,enabled:st(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 ft();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,we(i)}function we(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 vd=N(()=>{Si();X();yt();Io()});async function Wt(){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 kt(i){return i.toLocaleString("en-US")}var fe=N(()=>{C()});var qt={};ii(qt,{syncSubscriptionProviderFromLocalAuth:()=>Me,shouldShowKeyGuide:()=>s1,runSubscriptionAuthCommand:()=>$e,refreshQuota:()=>ze,refreshProviders:()=>Ji,refreshAgentDetail:()=>Bi,openStats:()=>bn,openProviders:()=>po,openClientVersions:()=>Ge,openAgents:()=>hi,openAgentDetail:()=>ge,loadClientVersions:()=>lo,installClientVersion:()=>Se,finishProviderAdd:()=>Ln,dismissKeyGuide:()=>Ld,backToLauncher:()=>Yi});async function ze(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 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 bn(i){i.screen="stats",i.message="",i.statsLoading=!0,i.statsError=void 0;let o=await Wt();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 ge(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 y1(i){return i==="claude"?["claude","auth","login","--claudeai"]:["codex","login"]}async function $e(i){let o=y1(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 Me(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||Ed(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 Ji(i),await fi(i),i.screen="providers",i.providerRowIdx=0,i.message=i.zh?"\u5DF2\u6DFB\u52A0\u670D\u52A1\u5546":"Provider added"}async function Ge(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(),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 Se(i,o){let n=i.clients[i.clientVersionsClientIdx];if(!n)return;let{installAtVersion:d}=await Promise.resolve().then(() => (Dn(),A0));await d(n.client,o),i.message=i.zh?`\u5DF2\u5207\u6362\u5230 ${o}`:`Switched to ${o}`,await lo(i)}async function Ld(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 s1(){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();fe();xd();Ti();vd()});c0();Ci();bo();C();X();xi();w0();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 Ju(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 y0="tako-cli",on="0.3.19";function cp(){return[Y,"update",y0,"--latest"]}function ap(){return[Y,"add",`${y0}@latest`]}function pp(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 lp(){try{let i=await ui(),o=await fetch(`${i}/${y0}/latest`,{signal:AbortSignal.timeout(5000)});if(!o.ok)return null;return(await o.json()).version||null}catch{return null}}async function mp(){let i=await lp();if(!i)return{hasUpdate:!1,currentVersion:on};return{hasUpdate:pp(i,on)>0,latestVersion:i,currentVersion:on}}async function Yu(){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"),Ju(Y,d));else{let u=`#!/bin/bash
|
|
529
|
+
exec "${Y}" "${d}" "$@"
|
|
530
|
+
`;await i.writeFile(n,u,{mode:493})}}async function xp(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(cp(),{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 Yu(),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 wp(){let i=await import("fs/promises"),o=wi(mi,"bun.lock");try{await i.unlink(o)}catch{}}async function yp(){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 wp();let d=Bun.spawn(ap(),{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 sp(){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 yp())return r.stop(g("updater.migrationFailed")),!1;r.stop(g("updater.installComplete"))}return await Yu(),!0}}catch{}return!1}async function nn(){try{if(await sp())L.info(g("updater.migrationComplete")),process.exit(0);let o=await mp();if(o.hasUpdate&&o.latestVersion){if(L.warn(g("updater.newVersionAvailable",{version:o.latestVersion,current:on})),await xp(o.latestVersion))L.info(g("updater.pleaseRestart")),process.exit(0)}}catch{}}E();dn();ai();C();An();Ci();X();xi();E();C();dn();var Pp="\x1B[?1000l\x1B[?1002l\x1B[?1003l\x1B[?1005l\x1B[?1006l\x1B[?1015l\x1B[?1049l\x1B[?2004l\x1B[0m\x1B[?25h";function or(i=process.stdin){try{if(i.removeAllListeners?.(),i.isTTY&&typeof i.setRawMode==="function")i.setRawMode(!1);i.pause?.()}catch{}}function nr(i=process.stdout){if(!i.isTTY||typeof i.write!=="function")return;try{i.write(Pp)}catch{}}async function en(i={}){let o=i.stdin??process.stdin,n=i.stdout??process.stdout,d=i.delayMs??30;or(o),nr(n),await new Promise((e)=>setTimeout(e,d)),or(o),nr(n)}import{writeFile as Cp}from"fs/promises";var g0="TAKO_WINDOWS_HANDOFF_FILE",z0=new Uint8Array([239,187,191]);function un(i){return`'${i.replace(/'/g,"''")}'`}function dr(i){if(i.length===0)return"@()";return`@(${i.map(un).join(", ")})`}function Ip(i){let o=new TextEncoder().encode(i),n=new Uint8Array(z0.length+o.length);return n.set(z0,0),n.set(o,z0.length),n}async function Xn(i,o){await Cp(i,Ip(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 = ${dr(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 = ${dr(r)}`,` & ${un(u)} @relaunchArgv`," $code = if ($null -ne $LASTEXITCODE) { $LASTEXITCODE } else { $code }")}return d.push("}","exit $code",""),d.join(`\r
|
|
531
|
+
`)}import{join as er}from"path";async function ur(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[g0];if(l)return await en(),await Xn(l,{command:p,cwd:n,env:c}),{success:!0}}if(e&&o?.relaunchTakoOnWindows){let l=process.env[g0];if(l){let x=[process.env.TAKO_WINDOWS_RELAUNCH_COMMAND||er(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=er(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"}}}G0();async function Ap(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 W0(o.projectPath))return{success:!1,error:g("launcher.directoryNotFound",{path:o.projectPath})}}let d=await _u(i);if(!d.success)return d;let e=await Ap(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 Uu(n,i.id,o?.selectedOptionIds);try{let a=(o?.selectedOptionIds??[]).filter((p)=>p.startsWith("model-"));await ar(a)}catch{}let c=(await z()).installedClients[i.id]?.version;return O("client_launched",{client_id:i.id,client_version:c,project_hash:Iu(n),is_recent_project:!!o?.projectPath}),L.info(g("launcher.starting",{client:i.name})),await ur(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 Hp}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 Xp(){return!1}function ki(i){let o=Oi[i];if(typeof o==="string")return o;return Xp()?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=Hp();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 Zp={"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=Zp[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 Kp=200000;class zi{id="context";static cache=null;static CACHE_TTL=5000;async render(i){let o=await this.getTokensWithCache(i.transcript_path),d=Yd(i.model.id)?.contextWindow??Kp,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 I0(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 tl}from"path";import{homedir as O0}from"os";import{mkdir as cl}from"fs/promises";var br=to(O0(),".tako"),al=to(br,"cli"),pl=to(br,"bin",process.platform==="win32"?"tako.cmd":"tako");function ll(){if(process.platform==="win32")return to(process.env.APPDATA||to(O0(),"AppData","Roaming"),"claude","settings.json");return to(O0(),".claude","settings.json")}var ml=process.platform==="win32",xl="0.1.48";function wl(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 yl(){let i=to(al,"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 sl(){let i=await yl();if(!i)return!1;return wl(i,xl)>=0}function vl(){return pl}function fl(){return`"${hl(vl())}" statusline`}function hl(i){if(ml)return i.replace(/\\/g,"/");return i}async function R0(){if(!await sl())return;let o=ll(),n={};try{let u=Bun.file(o);if(await u.exists())n=await u.json()}catch{}let d={type:"command",command:fl(),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 cl(tl(o),{recursive:!0}),await Bun.write(o,JSON.stringify(n,null,2))}var bl=[new Zn,new Kn,new Vn,new zi,new Fn];async function Ll(i){let o=await Promise.all(bl.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 Lr(){try{let i=await Bun.stdin.json(),o=await Ll(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 Nr(){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()}}t0();An();var Nl={"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 Wl(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 Wl(i,o,n){let d=Nl[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 sd="0.3.19";function Pm(){console.log(`
|
|
534
|
+
${g("cli.version",{version:sd})}
|
|
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
|
|
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
|
|
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
|
|
561
|
+
`)}async function Cm(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 J0(d.package),u=await Y0(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 B0(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 le(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 Im(i){let o=process.argv.slice(2);if(o[0]==="statusline"){Ni(),await Lr();return}if(o[0]==="install"){await Cm(o.slice(1));return}if(o[0]==="quota"){let{runQuotaCommand:d}=await Promise.resolve().then(() => (gr(),zr)),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(() => (dt(),nt));await d(o.slice(1));return}if(o[0]==="skill"){let{runSkillCommand:d}=await Promise.resolve().then(() => (rt(),ut));await d(o.slice(1));return}if(o[0]==="models"){let{runModelsCommand:d}=await Promise.resolve().then(() => (at(),ct)),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${sd}`);return}if(o.includes("-h")||o.includes("--help")){Pm();return}let n=sd==="dev"||Xo;if(H(),O("cli_started"),o.includes("--claude")){if(!n)await nn();await le("claude-code","Claude Code",await _n("claude-code",o,"--claude"));return}if(o.includes("--codex")){if(!n)await nn();await le("codex","Codex",await _n("codex",o,"--codex"));return}if(o.includes("--gemini")){if(!n)await nn();await le("gemini","Gemini CLI",await _n("gemini",o,"--gemini"));return}if(!n)await nn();if(R0().catch(()=>{}),Ni(),Bd().catch(()=>{}),!process.stdin.isTTY){console.log("Tako CLI v"+sd),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 pt(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 Im(i)}catch(o){console.error(g("cli.cliError"),o),await jo(),process.exit(1)}}X();Ci();X();import{CliRenderEvents as h1,createCliRenderer as b1}from"@opentui/core";C();X();xi();ai();Si();function Qm(i){return i.startsWith("cr_")&&i.length>10}async function qm(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 lt(i){if(!Qm(i))return O("api_key_validated",{success:!1,error_type:"invalid_format"}),{success:!1,error:g("auth.invalidFormat")};let o=await qm(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 Om(i,o.apiId),O("api_key_validated",{success:!0}),U(),H(),{success:!0}}async function Om(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();vd();Io();function ht(){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 bt(){ht(),fd(),await new Promise((i)=>setTimeout(i,30)),ht(),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 T(i){return!i.ctrl&&!i.meta&&!i.option}function ye(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 hd(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 Lt(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 se(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 ve(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 Nt(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();fe();import{BoxRenderable as Hm,ScrollBoxRenderable as Zm,TextAttributes as J,TextRenderable as Km}from"@opentui/core";function Rm(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 Jm(i){return i.replace(/\x1b\[[0-9;]*m/g,"")}function hn(i){let o=Jm(i),n=0;for(let d of o)n+=Rm(d)?2:1;return n}function zt(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 Mt=6,Gt=4,be=16,Bm=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,Mt).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 Le(i,o){return!i.some((d)=>(o[d.id]??0)>0)&&i.length>Mt?"grid":"collapsed"}function Ym(i,o){if(i.length===0)return 1;let n=Math.max(...i.map((u)=>hn(u))),d=Math.max(be,n+4),e=Math.max(d,o-Bm);return Math.max(1,Math.min(Gt,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 Ym(d,o)}function Am(i,o){let n=Math.max(1,Math.min(Gt,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 bd(i){return i.startsWith("model-")?i.slice(6):i}function he(i){let o=bd(i).toLowerCase();return o.replace(/^(?:full[-_]|\u6EE1\u8840[-_])+/u,"").slice(0,3)||o.slice(0,3)||o}function gt(i){let o=["gpt","ful","cla","dee","glm","kim","qwe","min","mim","spa"],n=o.indexOf(i);return n===-1?o.length:n}function $t(i){let o=bd(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 Xm(i,o){let n=he(i),d=he(o),e=gt(n)-gt(d)||n.localeCompare(d);if(e!==0)return e;let u=$t(i),r=$t(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 bd(i).localeCompare(bd(o))}function Bo(i,o){let n=[...i].sort(Xm),d=[];for(let u of n){let r=he(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:Am(u.ids,o).rows}));return{groups:e,flat:e.flatMap((u)=>u.rows.flat())}}function Ne(i,o,n){return Bo(i,n).flat.indexOf(o)}function St(i,o){return Bo(i,o).groups.flatMap((n)=>n.rows)}Io();function Vm(i){for(let o of[...i.root.getChildren()])i.root.remove(o)}function P(i,o){return new Hm(i,o)}function We(i){return i.terminalHeight<sn}function ke(i){return We(i)?{minHeight:sn}:{height:"100%"}}function Z(i,o,n){if(!We(i)){i.root.add(n);return}let d=new Zm(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 Tm(i,o,n={}){return new Km(i,{content:o,fg:m.text,selectable:!1,...n})}function f(i,o,n,d={}){let e=Tm(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:J.BOLD}),f(r,i,u,{fg:m.muted}),d.add(r)}),o.add(d)}function Fm(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?mt:xt;if(f(u,i,r,{fg:d,attributes:J.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?J.BOLD:J.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?J.BOLD:J.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 ${me}`,color:m.muted},u=!1){let r=P(i,{flexDirection:"column",width:"100%",...ke(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:J.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(Vm(i),o.scrollScreen!==o.screen)o.scrollScreen=o.screen,o.scrollOffset=0;else if(!We(i)&&o.scrollOffset!==0)o.scrollOffset=0;switch(o.screen){case"launcher":It(i,o);break;case"providers":o1(i,o);break;case"provider-detail":n1(i,o);break;case"provider-add-type":d1(i,o);break;case"provider-input":e1(i,o);break;case"stats":u1(i,o);break;case"config":r1(i,o);break;case"language":t1(i,o);break;case"option-picker":jm(i,o);break;case"agents":c1(i,o);break;case"agent-detail":p1(i,o);break;case"agent-new":l1(i,o);break;case"key-guide":x1(i,o);break;case"client-versions":w1(i,o);break}i.requestRender()}var Pt={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 Em(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 _m(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=Pt[d.type]??Pt.custom;f(o,i,`${e.icon} ${n.zh?e.zh:e.en}`,{fg:e.color});let u=Em(d.email??"");if(u)f(o,i,`\xB7 ${u}`,{fg:m.muted,truncate:!0})}function Um(i){return i>30?m.green:i>10?m.yellow:m.red}function Dm(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:Um(u)}}function It(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 ${me}`,{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(Fm(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});_m(i,h,o),v.add(h);let M=Dm(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?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((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 jm(i,o){let n=o.clients[o.clientIdx],d=o.optionPickerGroup;if(!n||!d){It(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"){i1(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%",...ke(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:J.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 i1(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=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(be,...r.length>0?r.map((b)=>hn(c(b))+3):[0]),w=P(i,{flexDirection:"column",width:"100%",...ke(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:J.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?">":" "}${zt(c(k),x)}${mo?"*":" "}`;f(M,i,Ao,{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"]]),Z(i,o,w)}function o1(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?J.BOLD:J.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 n1(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=hd(n,o);pi(i,e,r.map((t,c)=>({primary:Lt(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 d1(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 e1(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"?ye(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 u1(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"}: ${kt(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 r1(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,`> ${ye(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 t1(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 c1(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 ${se(Date.now()-e.lastActiveAt)}`,focused:u===o.agentIdx,marker:Nt(e.status),color:ve(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 a1(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 p1(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:ve(n.status),attributes:J.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"}=${se(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:J.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=a1(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 l1(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 m1=[{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 x1(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,m1.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 Ct={"claude-code":{icon:"\u2726",color:m.yellow},codex:{icon:"\u25C8",color:m.blue},gemini:{icon:"\u25C6",color:m.cyan}};function w1(i,o){let n=o.clients[o.clientVersionsClientIdx],d=Ct[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=Ct[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?J.BOLD:J.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();vd();Yo();xd();Ti();xi();function v1(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"?Le(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=Ne(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 Ot(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"){v1(o,p.group,n.terminalWidth||80),W(n,o);return}}if(t==="return"){let p=u.projects[o.projectIdx],l=xe(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=Jo(u,n.terminalWidth||80,o.zh),x=Bo(p,l),w=St(p,l),y=x.flat.length;if(t==="escape"){if(Le(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((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?Ro(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=Jo(u,n.terminalWidth||80,o.zh);o.optionPickerIdx=p?Math.max(0,Ne(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 Jt(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 e0(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 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 Ji(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(()=>Ge(o));return}else Yi(o)}W(n,o)}function Bt(i,o,n,d,e){let u=fn(o);if(!u){o.screen="providers",W(n,o);return}let r=hd(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 d0(u.id),await Ji(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 n0(u.id),await Ji(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 Yt(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 At(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 Ji(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 Xt(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(()=>ge(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 Ht(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 Zt(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 Kt(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(()=>Se(o,t.version));return}}W(n,o)}var f1=["configure","skip","never"];function Vt(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 Ld("skip"),Yi(o)});return}else if(e==="return"){let u=f1[o.keyGuideIdx];if(u==="configure"){o.screen="config",o.apiKeyValue="",o.apiKeyStatus="idle",o.apiKeyError=void 0,W(n,o);return}d(async()=>{await Ld(u),Yi(o)});return}W(n,o)}Yo();async function Tt(i={}){let o=await vt();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(),qt));if(await d())o.screen="key-guide"}catch{}fd();let n=await b1({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(h1.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 bt(),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"){Ht(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}Kt(y,o,n,a);return}if(o.screen==="key-guide"){Vt(y,o,n,a);return}if(o.screen==="launcher"){Ot(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"){Jt(y,o,n,a);return}if(o.screen==="provider-detail"){Bt(y,o,n,c,a);return}if(o.screen==="provider-add-type"){Yt(y,o,n,c);return}if(o.screen==="provider-input"){At(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 lt(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];jd(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"){Xt(y,o,n,a);return}if(o.screen==="agent-new")Zt(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,ze(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?.(),we(o),W(n,o),n.start()})}Yo();E();X();xi();Ci();ai();C();ai();var L1=2000,Ft=100;function Mi(i){if(Xo||process.env.TAKO_DEBUG==="1")process.stderr.write(`[announcements] ${i}
|
|
564
|
+
`)}function Et(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 N1(i,o){let n=`${i}/v1/announcements/popup`;try{let d=await fetch(n,{headers:{Authorization:`Bearer ${o}`},signal:AbortSignal.timeout(L1)});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 W1(i){return((await z()).seenAnnouncementIds??[]).includes(i)}async function k1(i){let o=await z(),n=o.seenAnnouncementIds??[];if(n.includes(i))return;let d=[...n,i];if(d.length>Ft)d.splice(0,d.length-Ft);o.seenAnnouncementIds=d,await K(o)}async function z1(){let i=Et(await ei());if(i)return i;for(let o of await V()){let n=Et(o);if(n)return n}return null}async function _t(){let i=await z1();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 N1(i.baseUrl,i.apiKey);if(!o)return;if(o.popup_once&&await W1(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 k1(o.id),Mi(`\u6807\u8BB0\u5DF2\u770B\u8FC7\uFF1A${o.id}`)}vo();async function Ut(){await u0(),await r0(),await Nr(),await Promise.race([Zd(await V()),new Promise((i)=>setTimeout(i,3000))]),await _t()}async function Dt(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 jt(){await Ut();let i;while(!0){let o=await Tt(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 $e(o.tool),r=await Me(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 Dt(o))process.exit(0)}}await pt(jt);
|