tako-cli 0.3.21 → 0.3.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,564 +0,0 @@
1
- #!/usr/bin/env bun
2
- // @bun
3
- var{defineProperty:$0,getOwnPropertyNames:ic,getOwnPropertyDescriptor:oc}=Object,nc=Object.prototype.hasOwnProperty;function dc(i){return this[i]}var uc=(i)=>{var o=(Pu??=new WeakMap).get(i),n;if(o)return o;if(o=$0({},"__esModule",{value:!0}),i&&typeof i==="object"||typeof i==="function"){for(var d of ic(i))if(!nc.call(o,d))$0(o,d,{get:dc.bind(i,d),enumerable:!(n=oc(i,d))||n.enumerable})}return Pu.set(i,o),o},Pu;var ec=(i)=>i;function rc(i,o){this[i]=ec.bind(null,o)}var mi=(i,o)=>{for(var n in o)$0(i,n,{get:o[n],enumerable:!0,configurable:!0,set:rc.bind(o,n)})};var N=(i,o)=>()=>(i&&(o=i(i=0)),o);var $=import.meta.require;var sn={};mi(sn,{updateConfig:()=>Di,saveConfig:()=>K,loadConfig:()=>s,hasApiKey:()=>pc,getApiKey:()=>ac,getApiId:()=>ji,ensureTakoDir:()=>Zo,TOOLS_DIR:()=>zn,TAKO_SERVER:()=>Qu,TAKO_DIR:()=>q,TAKO_CLI_DIR:()=>xi,TAKO_BUN_DIR:()=>Wi,TAKO_BUN_CACHE_DIR:()=>G0,TAKO_BUN_BIN:()=>A,PROXY_BASE_URL:()=>Y,IS_DEV:()=>Ho,CONFIG_PATH:()=>M0});import{homedir as tc}from"os";import{join as Ui,resolve as cc}from"path";async function Zo(){let i=await import("fs/promises");try{await i.mkdir(q,{recursive:!0}),await i.mkdir(zn,{recursive:!0})}catch{}}async function s(){await Zo();try{let i=Bun.file(M0);if(await i.exists()){let o=await i.json();return{...Cu,...o}}}catch{}return{...Cu}}async function K(i){await Zo(),await Bun.write(M0,JSON.stringify(i,null,2))}async function Di(i){let n={...await s(),...i};return await K(n),n}async function pc(){return!!(await s()).apiKey}async function ac(){return(await s()).apiKey}async function ji(){return(await s()).apiId}var q,M0,zn,xi,Wi,A,G0,Qu,Y,Ho,Cu;var C=N(()=>{q=cc(process.env.TAKO_HOME||Ui(tc(),".tako")),M0=Ui(q,"config.json"),zn=Ui(q,"tools"),xi=Ui(q,"cli"),Wi=Ui(q,"bun"),A=Ui(Wi,"bin",process.platform==="win32"?"bun.exe":"bun"),G0=Ui(Wi,"install-cache"),Qu=process.env.TAKO_SERVER||"https://tako.shiroha.tech",Y=process.env.PROXY_BASE_URL||"https://tako.shiroha.tech",Ho=process.env.TAKO_DEV==="true"||process.env.TAKO_DEV==="1"||Qu.includes("localhost"),Cu={apiKey:"",apiId:"",installedClients:{}}});import{join as kn}from"path";function S0(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(zn,i);return S0(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 e=(await d.json()).bin;if(!e)return null;let r=null;if(typeof e==="string")r=e;else if(typeof e==="object"&&e[i.command])r=e[i.command];if(!r)return null;let t=kn(o,"node_modules",i.package,r);return S0(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 S0(n,"\u5BA2\u6237\u7AEF\u53EF\u6267\u884C\u6587\u4EF6"),n}function gn(i,o){let n=i.launchOptions;return typeof n==="function"?n(o):n??[]}function yo(i){P0.set(i.id,i)}function qu(){return Array.from(P0.values())}function ii(i){return P0.get(i)}var P0;var _=N(()=>{C();P0=new Map});var lc,Ai;var C0=N(()=>{/*!
4
- * Copyright (c) Squirrel Chat et al., All rights reserved.
5
- * SPDX-License-Identifier: BSD-3-Clause
6
- *
7
- * Redistribution and use in source and binary forms, with or without
8
- * modification, are permitted provided that the following conditions are met:
9
- *
10
- * 1. Redistributions of source code must retain the above copyright notice, this
11
- * list of conditions and the following disclaimer.
12
- * 2. Redistributions in binary form must reproduce the above copyright notice,
13
- * this list of conditions and the following disclaimer in the
14
- * documentation and/or other materials provided with the distribution.
15
- * 3. Neither the name of the copyright holder nor the names of its contributors
16
- * may be used to endorse or promote products derived from this software without
17
- * specific prior written permission.
18
- *
19
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
- */lc=/^(\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 u=i.match(lc);if(u){if(!u[1])o=!1,i=`0000-01-01T${i}`;if(n=!!u[2],n&&i[10]===" "&&(i=i.replace(" ","T")),u[2]&&+u[2]>23)i="";else if(d=u[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 mc(i,o){let n=i.slice(0,o).split(/\r\n|\n|\r/g);return[n.length,n.pop().length+1]}function xc(i,o,n){let d=i.split(/\r\n|\n|\r/g),u="",e=(Math.log10(o+1)|0)+1;for(let r=o-1;r<=o+1;r++){let t=d[r-1];if(!t)continue;if(u+=r.toString().padEnd(e," "),u+=": ",u+=t,u+=`
30
- `,r===o)u+=" ".repeat(e+n+2),u+=`^
31
- `}return u}var G;var io=N(()=>{/*!
32
- * Copyright (c) Squirrel Chat et al., All rights reserved.
33
- * SPDX-License-Identifier: BSD-3-Clause
34
- *
35
- * Redistribution and use in source and binary forms, with or without
36
- * modification, are permitted provided that the following conditions are met:
37
- *
38
- * 1. Redistributions of source code must retain the above copyright notice, this
39
- * list of conditions and the following disclaimer.
40
- * 2. Redistributions in binary form must reproduce the above copyright notice,
41
- * this list of conditions and the following disclaimer in the
42
- * documentation and/or other materials provided with the distribution.
43
- * 3. Neither the name of the copyright holder nor the names of its contributors
44
- * may be used to endorse or promote products derived from this software without
45
- * specific prior written permission.
46
- *
47
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
48
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
49
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
50
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
51
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
52
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
53
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
54
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
55
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
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]=mc(o.toml,o.ptr),u=xc(o.toml,n,d);super(`Invalid TOML document: ${i}
58
-
59
- ${u}`,o);this.line=n,this.column=d,this.codeblock=u}}});function $n(i,o){let n=i[o++],d=n,u=n==="'",e=n===i[o]&&n===i[o+1];if(e){if(i[o+=2]===`
60
- `)o++;else if(i[o]==="\r"&&i[o+1]===`
61
- `)o+=2}let r="",t=o,c=0;for(let p=o;p<i.length;p++)if(n=i[p],e&&(n===`
62
- `||n==="\r"&&i[p+1]===`
63
- `))c=c&&3;else if(n<" "&&n!=="\t"||n==="\x7F")throw new G("control characters are not allowed in strings",{toml:i,ptr:p});else if((!c||c===3)&&n===d&&(!e||i[p+1]===d&&i[p+2]===d)){if(e){if(i[p+3]===d)p++;if(i[p+3]===d)p++}return[c?r:r+i.slice(t,p),p+(e?3:1)]}else if(!c){if(!u&&n==="\\")r+=i.slice(t,t=p),c=1}else if(c===1)if(n==="x"||n==="u"||n==="U"){let a=0,l=n==="x"?2:n==="u"?4:8;for(let x=0;x<l;x++,p++){let w=i.charCodeAt(p+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:p+1});a=a<<4|y}if(a<0||a>1114111||a>=55296&&a<=57343)throw new G("invalid unicode escape",{toml:i,ptr:p});r+=String.fromCodePoint(a),t=p+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:p});t=p+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=!u&&n==="\\"?1:0,t=p}throw new G("unfinished string",{toml:i,ptr:o})}function Iu(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 u=wc.test(i);if(u||yc.test(i)){if(vc.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(u){if((u=!Number.isSafeInteger(r))&&!d)throw new G("integer value cannot be represented losslessly",{toml:o,ptr:n});if(u||d===!0)r=BigInt(i)}return r}let e=new Ai(i);if(!e.isValid())throw new G("invalid value",{toml:o,ptr:n});return e}var wc,yc,vc;var Q0=N(()=>{C0();io();/*!
65
- * Copyright (c) Squirrel Chat et al., All rights reserved.
66
- * SPDX-License-Identifier: BSD-3-Clause
67
- *
68
- * Redistribution and use in source and binary forms, with or without
69
- * modification, are permitted provided that the following conditions are met:
70
- *
71
- * 1. Redistributions of source code must retain the above copyright notice, this
72
- * list of conditions and the following disclaimer.
73
- * 2. Redistributions in binary form must reproduce the above copyright notice,
74
- * this list of conditions and the following disclaimer in the
75
- * documentation and/or other materials provided with the distribution.
76
- * 3. Neither the name of the copyright holder nor the names of its contributors
77
- * may be used to endorse or promote products derived from this software without
78
- * specific prior written permission.
79
- *
80
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
81
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
82
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
83
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
84
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
85
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
86
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
87
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
88
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
89
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
90
- */wc=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,yc=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,vc=/^[+-]?0[0-9_]/});function Mn(i,o=0,n=i.length){let d=i.indexOf(`
91
- `,o);if(i[d-1]==="\r")d--;return d<=n?d:-1}function vo(i,o){for(let n=o;n<i.length;n++){let d=i[n];if(d===`
92
- `)return n;if(d==="\r"&&i[n+1]===`
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 Ni(i,o,n,d){let u;while(!0){while((u=i[o])===" "||u==="\t"||!n&&(u===`
94
- `||u==="\r"&&i[o+1]===`
95
- `))o++;if(d||u!=="#")break;o=vo(i,o)}return o}function Ou(i,o,n,d,u=!1){if(!d)return o=Mn(i,o),o<0?i.length:o;for(let e=o;e<i.length;e++){let r=i[e];if(r==="#")e=Mn(i,e);else if(r===n)return e+1;else if(r===d||u&&(r===`
96
- `||r==="\r"&&i[e+1]===`
97
- `))return e}throw new G("cannot find end of structure",{toml:i,ptr:o})}var Gn=N(()=>{io();/*!
98
- * Copyright (c) Squirrel Chat et al., All rights reserved.
99
- * SPDX-License-Identifier: BSD-3-Clause
100
- *
101
- * Redistribution and use in source and binary forms, with or without
102
- * modification, are permitted provided that the following conditions are met:
103
- *
104
- * 1. Redistributions of source code must retain the above copyright notice, this
105
- * list of conditions and the following disclaimer.
106
- * 2. Redistributions in binary form must reproduce the above copyright notice,
107
- * this list of conditions and the following disclaimer in the
108
- * documentation and/or other materials provided with the distribution.
109
- * 3. Neither the name of the copyright holder nor the names of its contributors
110
- * may be used to endorse or promote products derived from this software without
111
- * specific prior written permission.
112
- *
113
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
114
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
115
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
116
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
117
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
118
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
119
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
120
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
121
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
122
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
123
- */});function fc(i,o,n){let d=i.slice(o,n),u=d.indexOf("#");if(u>-1)vo(i,u),d=d.slice(0,u);return[d.trimEnd(),u]}function Ko(i,o,n,d,u){if(d===0)throw new G("document contains excessively nested structures. aborting.",{toml:i,ptr:o});let e=i[o];if(e==="["||e==="{"){let[c,p]=e==="["?Ru(i,o,d,u):Ju(i,o,d,u);if(n){if(p=Ni(i,p),i[p]===",")p++;else if(i[p]!==n)throw new G("expected comma or end of structure",{toml:i,ptr:p})}return[c,p]}if(e==='"'||e==="'"){let[c,p]=$n(i,o);if(n){if(p=Ni(i,p),i[p]&&i[p]!==","&&i[p]!==n&&i[p]!==`
124
- `&&i[p]!=="\r")throw new G("unexpected character encountered",{toml:i,ptr:p});if(i[p]===",")p++}return[c,p]}let r=Ou(i,o,",",n),t=fc(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=Ni(i,o+t[1]),i[r]===",")r++}return[Iu(t[0],i,o,u),r]}var q0=N(()=>{Q0();I0();Gn();io();/*!
125
- * Copyright (c) Squirrel Chat et al., All rights reserved.
126
- * SPDX-License-Identifier: BSD-3-Clause
127
- *
128
- * Redistribution and use in source and binary forms, with or without
129
- * modification, are permitted provided that the following conditions are met:
130
- *
131
- * 1. Redistributions of source code must retain the above copyright notice, this
132
- * list of conditions and the following disclaimer.
133
- * 2. Redistributions in binary form must reproduce the above copyright notice,
134
- * this list of conditions and the following disclaimer in the
135
- * documentation and/or other materials provided with the distribution.
136
- * 3. Neither the name of the copyright holder nor the names of its contributors
137
- * may be used to endorse or promote products derived from this software without
138
- * specific prior written permission.
139
- *
140
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
141
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
142
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
143
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
144
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
145
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
146
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
147
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
148
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
149
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
150
- */});function Sn(i,o,n="="){let d=o-1,u=[],e=i.indexOf(n,o);if(e<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]=$n(i,o);d=i.indexOf(".",c);let p=i.slice(c,d<0||d>e?e:d),a=Mn(p);if(a>-1)throw new G("newlines are not allowed in keys",{toml:i,ptr:o+d+a});if(p.trimStart())throw new G("found extra tokens after the string part",{toml:i,ptr:c});if(e<c){if(e=i.indexOf(n,c),e<0)throw new G("incomplete key-value: cannot find end of key",{toml:i,ptr:o})}u.push(t)}else{d=i.indexOf(".",o);let t=i.slice(o,d<0||d>e?e:d);if(!hc.test(t))throw new G("only letter, numbers, dashes and underscores are allowed in keys",{toml:i,ptr:o});u.push(t.trimEnd())}}while(d+1&&d<e);return[u,Ni(i,e+1,!0,!0)]}function Ju(i,o,n,d){let u={},e=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=vo(i,o);else if(r!==" "&&r!=="\t"&&r!==`
151
- `&&r!=="\r"){let t,c=u,p=!1,[a,l]=Sn(i,o-1);for(let y=0;y<a.length;y++){if(y)c=p?c[t]:c[t]={};if(t=a[y],(p=Object.hasOwn(c,t))&&(typeof c[t]!=="object"||e.has(c[t])))throw new G("trying to redefine an already defined value",{toml:i,ptr:o});if(!p&&t==="__proto__")Object.defineProperty(c,t,{enumerable:!0,configurable:!0,writable:!0})}if(p)throw new G("trying to redefine an already defined value",{toml:i,ptr:o});let[x,w]=Ko(i,l,"}",n-1,d);e.add(x),c[t]=x,o=w}if(!r)throw new G("unfinished table encountered",{toml:i,ptr:o});return[u,o]}function Ru(i,o,n,d){let u=[],e;o++;while((e=i[o++])!=="]"&&e)if(e===",")throw new G("expected value, found comma",{toml:i,ptr:o-1});else if(e==="#")o=vo(i,o);else if(e!==" "&&e!=="\t"&&e!==`
152
- `&&e!=="\r"){let r=Ko(i,o-1,"]",n-1,d);u.push(r[0]),o=r[1]}if(!e)throw new G("unfinished array encountered",{toml:i,ptr:o});return[u,o]}var hc;var I0=N(()=>{Q0();q0();Gn();io();/*!
153
- * Copyright (c) Squirrel Chat et al., All rights reserved.
154
- * SPDX-License-Identifier: BSD-3-Clause
155
- *
156
- * Redistribution and use in source and binary forms, with or without
157
- * modification, are permitted provided that the following conditions are met:
158
- *
159
- * 1. Redistributions of source code must retain the above copyright notice, this
160
- * list of conditions and the following disclaimer.
161
- * 2. Redistributions in binary form must reproduce the above copyright notice,
162
- * this list of conditions and the following disclaimer in the
163
- * documentation and/or other materials provided with the distribution.
164
- * 3. Neither the name of the copyright holder nor the names of its contributors
165
- * may be used to endorse or promote products derived from this software without
166
- * specific prior written permission.
167
- *
168
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
169
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
170
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
171
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
172
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
173
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
174
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
175
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
176
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
177
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
178
- */hc=/^[a-zA-Z0-9-_]+[ \t]*$/});function Bu(i,o,n,d){let u=o,e=n,r,t=!1,c;for(let p=0;p<i.length;p++){if(p){if(u=t?u[r]:u[r]={},e=(c=e[r]).c,d===0&&(c.t===1||c.t===2))return null;if(c.t===2){let a=u.length-1;u=u[a],e=e[a].c}}if(r=i[p],(t=Object.hasOwn(u,r))&&e[r]?.t===0&&e[r]?.d)return null;if(!t){if(r==="__proto__")Object.defineProperty(u,r,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(e,r,{enumerable:!0,configurable:!0,writable:!0});e[r]={t:p<i.length-1&&d===2?3:d,d:!1,i:0,c:{}}}}if(c=e[r],c.t!==d&&!(d===1&&c.t===3))return null;if(d===2){if(!c.d)c.d=!0,u[r]=[];u[r].push(u={}),c.c[c.i++]=c={t:1,d:!1,i:0,c:{}}}if(c.d)return null;if(c.d=!0,d===1)u=t?u[r]:u[r]={};else if(d===0&&t)return null;return[r,u,c.c]}function O0(i,{maxDepth:o=1000,integersAsBigInt:n}={}){let d={},u={},e=d,r=u;for(let t=Ni(i,0);t<i.length;){if(i[t]==="["){let c=i[++t]==="[",p=Sn(i,t+=+c,"]");if(c){if(i[p[1]-1]!=="]")throw new G("expected end of table declaration",{toml:i,ptr:p[1]-1});p[1]++}let a=Bu(p[0],d,u,c?2:1);if(!a)throw new G("trying to redefine an already defined table or value",{toml:i,ptr:t});r=a[2],e=a[1],t=p[1]}else{let c=Sn(i,t),p=Bu(c[0],e,r,0);if(!p)throw new G("trying to redefine an already defined table or value",{toml:i,ptr:t});let a=Ko(i,c[1],void 0,o,n);p[1][p[0]]=a[0],t=a[1]}if(t=Ni(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=Ni(i,t)}return d}var Yu=N(()=>{I0();q0();Gn();io();/*!
180
- * Copyright (c) Squirrel Chat et al., All rights reserved.
181
- * SPDX-License-Identifier: BSD-3-Clause
182
- *
183
- * Redistribution and use in source and binary forms, with or without
184
- * modification, are permitted provided that the following conditions are met:
185
- *
186
- * 1. Redistributions of source code must retain the above copyright notice, this
187
- * list of conditions and the following disclaimer.
188
- * 2. Redistributions in binary form must reproduce the above copyright notice,
189
- * this list of conditions and the following disclaimer in the
190
- * documentation and/or other materials provided with the distribution.
191
- * 3. Neither the name of the copyright holder nor the names of its contributors
192
- * may be used to endorse or promote products derived from this software without
193
- * specific prior written permission.
194
- *
195
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
196
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
197
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
198
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
199
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
200
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
201
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
202
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
203
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
204
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
205
- */});function Vo(i){let o=typeof i;if(o==="object"){if(Array.isArray(i))return"array";if(i instanceof Date)return"date"}return o}function bc(i){for(let o=0;o<i.length;o++)if(Vo(i[o])!=="object")return!1;return i.length!=0}function J0(i){return JSON.stringify(i).replace(/\x7f/g,"\\u007f")}function R0(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 J0(i);if(o==="date"){if(isNaN(i.getTime()))throw TypeError("cannot serialize invalid date");return i.toISOString()}if(o==="object")return Lc(i,n,d);if(o==="array")return Wc(i,n,d)}function Lc(i,o,n){let d=Object.keys(i);if(d.length===0)return"{}";let u="{ ";for(let e=0;e<d.length;e++){let r=d[e];if(e)u+=", ";u+=Au.test(r)?r:J0(r),u+=" = ",u+=R0(i[r],Vo(i[r]),o-1,n)}return u+" }"}function Wc(i,o,n){if(i.length===0)return"[]";let d="[ ";for(let u=0;u<i.length;u++){if(u)d+=", ";if(i[u]===null||i[u]===void 0)throw TypeError("arrays cannot contain null or undefined values");d+=R0(i[u],Vo(i[u]),o-1,n)}return d+" ]"}function Nc(i,o,n,d){if(n===0)throw Error("Could not stringify the object: maximum object depth exceeded");let u="";for(let e=0;e<i.length;e++)u+=`${u&&`
206
- `}[[${o}]]
207
- `,u+=B0(0,i[e],o,n,d);return u}function B0(i,o,n,d,u){if(d===0)throw Error("Could not stringify the object: maximum object depth exceeded");let e="",r="",t=Object.keys(o);for(let c=0;c<t.length;c++){let p=t[c];if(o[p]!==null&&o[p]!==void 0){let a=Vo(o[p]);if(a==="symbol"||a==="function")throw TypeError(`cannot serialize values of type '${a}'`);let l=Au.test(p)?p:J0(p);if(a==="array"&&bc(o[p]))r+=(r&&`
208
- `)+Nc(o[p],n?`${n}.${l}`:l,d-1,u);else if(a==="object"){let x=n?`${n}.${l}`:l;r+=(r&&`
209
- `)+B0(x,o[p],x,d-1,u)}else e+=l,e+=" = ",e+=R0(o[p],a,d,u),e+=`
210
- `}}if(i&&(e||!r))e=e?`[${i}]
211
- ${e}`:`[${i}]`;return e&&r?`${e}
212
- ${r}`:e||r}function Y0(i,{maxDepth:o=1000,numbersAsFloat:n=!1}={}){if(Vo(i)!=="object")throw TypeError("stringify can only be called with an object");let d=B0(0,i,"",o,n);if(d[d.length-1]!==`
213
- `)return d+`
214
- `;return d}var Au;var Xu=N(()=>{/*!
215
- * Copyright (c) Squirrel Chat et al., All rights reserved.
216
- * SPDX-License-Identifier: BSD-3-Clause
217
- *
218
- * Redistribution and use in source and binary forms, with or without
219
- * modification, are permitted provided that the following conditions are met:
220
- *
221
- * 1. Redistributions of source code must retain the above copyright notice, this
222
- * list of conditions and the following disclaimer.
223
- * 2. Redistributions in binary form must reproduce the above copyright notice,
224
- * this list of conditions and the following disclaimer in the
225
- * documentation and/or other materials provided with the distribution.
226
- * 3. Neither the name of the copyright holder nor the names of its contributors
227
- * may be used to endorse or promote products derived from this software without
228
- * specific prior written permission.
229
- *
230
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
231
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
232
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
233
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
234
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
235
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
236
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
237
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
238
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
239
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
240
- */Au=/^[a-z0-9-_]+$/i});var Hu=N(()=>{Yu();Xu();C0();io();/*!
241
- * Copyright (c) Squirrel Chat et al., All rights reserved.
242
- * SPDX-License-Identifier: BSD-3-Clause
243
- *
244
- * Redistribution and use in source and binary forms, with or without
245
- * modification, are permitted provided that the following conditions are met:
246
- *
247
- * 1. Redistributions of source code must retain the above copyright notice, this
248
- * list of conditions and the following disclaimer.
249
- * 2. Redistributions in binary form must reproduce the above copyright notice,
250
- * this list of conditions and the following disclaimer in the
251
- * documentation and/or other materials provided with the distribution.
252
- * 3. Neither the name of the copyright holder nor the names of its contributors
253
- * may be used to endorse or promote products derived from this software without
254
- * specific prior written permission.
255
- *
256
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
257
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
258
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
259
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
260
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
261
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
262
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
263
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
264
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
265
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
266
- */});function zc(i){let o=[];for(let[n,d]of Object.entries(i)){if(!d?.models)continue;for(let[u,e]of Object.entries(d.models)){let r=e?.limit?.context;if(typeof r!=="number"||r<=0)continue;o.push({id:u,displayName:e.name||u,provider:n,contextWindow:r,outputLimit:typeof e.limit?.output==="number"?e.limit.output:void 0})}}return o}async function Zu(){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 zc(o)}var ri;var Pn=N(()=>{ri=[{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 kc}from"path";import{homedir as gc}from"os";function Ku(){return Mc??kc(gc(),".tako","models-cache.json")}function A0(i){Cn.clear();for(let o of i)if(!Cn.has(o.id))Cn.set(o.id,o)}function Gc(){try{let o=$("fs").readFileSync(Ku(),"utf-8"),n=JSON.parse(o);if(typeof n?.fetchedAt!=="number"||!Array.isArray(n?.entries))return null;return n}catch{return null}}async function Sc(i){try{let o=await import("fs/promises"),n=Ku(),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 zi(){if(Qn)return;Qn=!0;let i=Gc();if(i&&Date.now()-i.fetchedAt<$c){A0(i.entries);return}A0(ri)}async function X0(){try{let i=await Zu();if(!i.length)return;A0(i),await Sc({fetchedAt:Date.now(),entries:i}),Qn=!0}catch{}}function Vu(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 H0(i){if(!Qn)zi();let{lookupId:o,is1m:n}=Vu(i),d=Cn.get(o);if(!d)return;if(n)return{...d,contextWindow:1e6};return d}var $c=86400000,Mc=null,Cn,Qn=!1;var Fu=N(()=>{Pn();Cn=new Map});import{join as Pc}from"path";function _u(){return qc??Pc(q,"tako-models-cache.json")}function K0(i,o){return`${i.replace(/\/+$/,"")}#${o}`}function V0(){if(Tu)return;Tu=!0;try{let i=$("fs"),o=JSON.parse(i.readFileSync(_u(),"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))Fo.set(n,d)}catch{}}async function Ic(){try{let i=await import("fs/promises"),o=_u(),n=o.slice(0,o.lastIndexOf("/"));if(n)await i.mkdir(n,{recursive:!0}).catch(()=>{});let d={version:1,buckets:Object.fromEntries(Fo)};await i.writeFile(o,JSON.stringify(d),"utf-8")}catch{}}function Oc(i){let o=i?.models;if(!Array.isArray(o))return[];let n=[];for(let d of o){let u=d?.slug;if(typeof u!=="string"||!u)continue;n.push({id:u,displayName:d.display_name||u,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,u)=>d.sortOrder-u.sortOrder||d.id.localeCompare(u.id)),n}function To(i){return i.filter((o)=>!o.category||o.category==="chat")}function Xi(i,o){return V0(),Fo.get(K0(i,o))?.entries??null}async function qn(i,o,n){V0();let d=K0(i,n),u=Z0.get(d);if(u)return u;let e=(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(),p=Oc(c);if(p.length===0)return;Fo.set(d,{fetchedAt:Date.now(),entries:p}),await Ic()}catch{}finally{Z0.delete(d)}})();return Z0.set(d,e),e}function F0(i){V0();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 u of["openai","claude"]){let e=Fo.get(K0(d.baseUrl,u));if(e&&o-e.fetchedAt<Cc)continue;let r=qn(d.baseUrl,d.apiKey,u);if(!e)n.push(r)}}return Promise.all(n).then(()=>{return})}var Cc=3600000,Qc=8000,qc=null,Fo,Tu=!1,Z0;var T0=N(()=>{C();Fo=new Map,Z0=new Map});var fo=N(()=>{Fu();T0()});import{homedir as Jc}from"os";import{join as E0}from"path";function ju(i,o){let n={...i};for(let[d,u]of Object.entries(o))if(u&&typeof u==="object"&&!Array.isArray(u)&&n[d]&&typeof n[d]==="object"&&!Array.isArray(n[d]))n[d]=ju(n[d],u);else n[d]=u;return n}function Rc(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 Du(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 Bc(i,o){let n=await import("fs/promises");try{await n.mkdir(U0,{recursive:!0})}catch{}let d={};try{d=O0(await n.readFile(Eu,"utf-8"))}catch{}if(d=Rc(d),i.type==="codex-subscription")if(delete d.model_provider,d.check_for_update_on_startup=!1,d.remote_compaction_v2=!1,Du(d),i.authData)await Bun.write(Uu,JSON.stringify(i.authData,null,2)+`
267
- `);else await Bun.write(Uu,JSON.stringify({OPENAI_API_KEY:null,auth_mode:"chatgpt"},null,2)+`
268
- `);else{let u;if(i.type==="tako")u=`${Y}/v1`;else if(i.type==="deepseek")u="https://api.deepseek.com/v1";else u=`${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=ri.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 p={name:"tako",base_url:u,requires_openai_auth:!0};if(i.apiKey)p.experimental_bearer_token=i.apiKey;Du(d);let a={model_provider:"tako",model:r,check_for_update_on_startup:!1,remote_compaction_v2:!1,model_providers:{tako:p}};if(c)a.model_context_window=c;d=ju(d,a)}await Bun.write(Eu,Y0(d))}function _0(i){if(i>=1e6)return"1M";if(i>0)return`${Math.round(i/1000)}k`;return"?"}function Zc(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} (${_0(d.contextWindow)} ctx)`,zh:`\u4F7F\u7528 ${d.displayName}\uFF08\u4E0A\u4E0B\u6587 ${_0(d.contextWindow)}\uFF09`},flag:`--model ${d.id}`,args:["--model",d.id],group:"model"}))}function Kc(i){if(zi(),i&&(i.type==="tako"||i.type==="custom")){let d=Zc(i);if(d)return d}let o=i?.type==="deepseek"?Hc:Xc,n=[];for(let d of o){let u=ri.find((t)=>t.id===d),e=_0(u?.contextWindow??0),r=u?.displayName??d;n.push({id:`model-${d}`,label:{en:r,zh:r},shortLabel:r,description:{en:`Use ${r} (${e} ctx)`,zh:`\u4F7F\u7528 ${r}\uFF08\u4E0A\u4E0B\u6587 ${e}\uFF09`},flag:`--model ${d}`,args:["--model",d],group:"model"})}return n}function Vc(i){return[...Ac,...Kc(i)]}var U0,Eu,Uu,Yc,Ac,Xc,Hc;var ie=N(()=>{_();C();Hu();fo();Pn();U0=E0(Jc(),".codex"),Eu=E0(U0,"config.toml"),Uu=E0(U0,"auth.json");Yc={id:"codex",name:"Codex",package:"@openai/codex",command:"codex",runtime:"bun",continueArg:"--continue",brandColor:"blue",getEnvVars(i){return{}},setupConfigFiles:Bc,launchOptions:(i)=>Vc(i)},Ac=[{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"]}],Xc=["gpt-5.5","gpt-5.4","gpt-5.3-codex","gpt-5.3"],Hc=["deepseek-v4-flash","deepseek-v4-pro"];yo(Yc)});function ni(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 _o(i){switch(i){case"deepseek":return"deepseek-v4-flash";case"xiaomi":return"mimo-v2.5-pro";case"tako":return;default:return}}function D0(i){switch(i){case"deepseek":return"https://api.deepseek.com";case"xiaomi":return id;default:return}}function od(i){return i?.startsWith("tp-")?oe:id}function Eo(i){switch(i){case"deepseek":return["deepseek-v4-flash","deepseek-v4-pro"];case"xiaomi":return Tc;case"tako":case"anthropic":return Fc;default:return}}function Hi(i,o){let n=i.supportedClients;if(!n||n.length===0)return!0;return n.includes(o)}var oo,j0="https://api.deepseek.com/anthropic",id="https://api.xiaomimimo.com/anthropic",oe="https://token-plan-cn.xiaomimimo.com/anthropic",Fc,Tc;var Si=N(()=>{oo={"claude-subscription":{en:"Claude Subscription",zh:"Claude \u8BA2\u9605\u76F4\u8FDE"},"codex-subscription":{en:"Codex Subscription",zh:"Codex \u8BA2\u9605\u76F4\u8FDE"},tako:{en:"Tako Proxy",zh:"Tako \u4EE3\u7406"},anthropic:{en:"Anthropic Direct",zh:"Anthropic \u76F4\u8FDE"},deepseek:{en:"DeepSeek",zh:"DeepSeek"},xiaomi:{en:"Xiaomi MiMo",zh:"\u5C0F\u7C73 MiMo"},custom:{en:"Custom Proxy",zh:"\u81EA\u5B9A\u4E49\u4EE3\u7406"}};Fc=["claude-sonnet-4-6","claude-opus-4-6","claude-opus-4-7"],Tc=["mimo-v2.5-pro"]});function _c(i){let o=!!process.stderr.isTTY,n=(u)=>process.stderr.write(u),d=i;if(o)n(`\u23F3 ${i}`);else n(`\u23F3 ${i}
269
- `);return{update(u){if(u===d)return;if(d=u,o)n(`\r\x1B[2K\u23F3 ${u}`);else n(`\u23F3 ${u}
270
- `)},stop(u){if(o)n("\r\x1B[2K");if(u)n(`\u2713 ${u}
271
- `)}}}function Zi(){let i=null;return{start(o){i=ho.spin(o)},stop(o){i?.stop(o),i=null},update(o){i?.update(o)}}}var Ec,ho,W;var Pi=N(()=>{Ec={info:(i)=>console.log(`\u2139 ${i}`),warn:(i)=>console.log(`\u26A0 ${i}`),error:(i)=>console.error(`\u2717 ${i}`),success:(i)=>console.log(`\u2713 ${i}`),spin:_c},ho=Ec,W={info:(i)=>ho.info(i),warn:(i)=>ho.warn(i),error:(i)=>ho.error(i),success:(i)=>ho.success(i),message:(i)=>ho.info(i),debug:(i)=>{if(process.env.TAKO_DEV)process.stderr.write(`[debug] ${i}
272
- `)}}});var ne={};mi(ne,{t:()=>k,setLocale:()=>nd,getLocale:()=>Ci,detectLocale:()=>no,clearLocaleOverride:()=>Uc});function no(){if(In)return In;let i=process.env.LANG||process.env.LANGUAGE||process.env.LC_ALL||"";if(i.toLowerCase().includes("zh")||i.toLowerCase().includes("chinese"))return"zh";try{if(Intl.DateTimeFormat().resolvedOptions().locale.toLowerCase().startsWith("zh"))return"zh"}catch{}return"zh"}function nd(i){In=i}function Uc(){In=null}function k(i,o){let n=no(),d=i.split("."),u=Dc;for(let r of d)if(u=u?.[r],!u)return i;let e=u[n]||u.en||i;if(o)for(let[r,t]of Object.entries(o))e=e.replace(`{${r}}`,String(t));return e}function Ci(){return no()}var In=null,Dc;var X=N(()=>{Dc={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
- {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 On={};mi(On,{writeClaudeAuth:()=>tp,readClaudeAuth:()=>rp});import{homedir as de,platform as jc,userInfo as ip}from"os";import{join as ud}from"path";function ee(){return[process.env.USER||(()=>{try{return ip().username}catch{return""}})(),"root"].filter(Boolean)}async function op(i){let o=Bun.spawn(["security","find-generic-password","-s",ue,"-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 np(){for(let i of ee()){let o=await op(i);if(o)return o}return null}async function dp(i){let o=JSON.stringify(i),n=ee()[0],d=Bun.spawn(["security","add-generic-password","-U","-s",ue,"-a",n,"-w",o],{stdout:"pipe",stderr:"pipe"}),u=await d.exited;if(u!==0){let e=await new Response(d.stderr).text();throw Error(`security add-generic-password failed (${u}): ${e.trim()}`)}}async function up(){try{let i=await import("fs/promises");return JSON.parse(await i.readFile(te,"utf-8"))}catch{return null}}async function ep(i){let o=await import("fs/promises");await o.mkdir(re,{recursive:!0}),await o.writeFile(te,JSON.stringify(i,null,2)+`
275
- `,{mode:384})}async function rp(){let i=ce?await np():await up(),o;try{let n=await import("fs/promises"),d=JSON.parse(await n.readFile(dd,"utf-8"));if(d.oauthAccount&&typeof d.oauthAccount==="object")o=d.oauthAccount}catch{}return{credentials:i??void 0,oauthAccount:o}}async function tp(i){if(i.credentials)if(ce)await dp(i.credentials);else await ep(i.credentials);if(i.oauthAccount){let o=await import("fs/promises"),n={};try{n=JSON.parse(await o.readFile(dd,"utf-8"))}catch{}n.oauthAccount=i.oauthAccount,await o.writeFile(dd,JSON.stringify(n,null,2)+`
276
- `)}}var ue="Claude Code-credentials",re,te,dd,ce;var Jn=N(()=>{re=ud(de(),".claude"),te=ud(re,".credentials.json"),dd=ud(de(),".claude.json"),ce=jc()==="darwin"});var pe={};mi(pe,{updateProvider:()=>Ki,setDefaultProvider:()=>rd,setClientProvider:()=>td,resolveXiaomiBaseUrl:()=>od,resolveProviderContext:()=>E,migrateIfNeeded:()=>cd,mergeDetectedProviders:()=>Do,isProviderCompatible:()=>Hi,getProvidersForClient:()=>Qi,getProviders:()=>V,getProvider:()=>cp,getModelChoices:()=>Eo,getDefaultSupportedClients:()=>ni,getDefaultProvider:()=>di,getDefaultModel:()=>_o,getDefaultBaseUrl:()=>D0,getClientProvider:()=>qi,fixupProviders:()=>pd,detectProviders:()=>Uo,deleteProvider:()=>ed,addProvider:()=>uo,XIAOMI_TOKEN_PLAN_URL:()=>oe,XIAOMI_ANTHROPIC_URL:()=>id,PROVIDER_TYPE_NAMES:()=>oo,DEEPSEEK_ANTHROPIC_URL:()=>j0});async function V(){return(await s()).providers??[]}async function cp(i){return(await V()).find((n)=>n.id===i)}async function di(){let i=await s(),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,u)=>{let e=d.lastUsedAt?new Date(d.lastUsedAt).getTime():0,r=u.lastUsedAt?new Date(u.lastUsedAt).getTime():0;if(e!==r)return r-e;return new Date(u.createdAt).getTime()-new Date(d.createdAt).getTime()})}async function uo(i){let o=await s(),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 Ki(i,o){let n=await s(),d=n.providers??[],u=d.findIndex((e)=>e.id===i);if(u===-1)return;d[u]={...d[u],...o},n.providers=d,await K(n)}async function ed(i){let o=await s();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,u]of Object.entries(o.clientProviderMap))if(u===i)delete o.clientProviderMap[d]}await K(o)}async function rd(i){let o=await s();if(!(o.providers??[]).some((d)=>d.id===i))return;o.defaultProviderId=i,await K(o)}async function qi(i){let o=await s(),n=o.clientProviderMap?.[i];if(n){let d=(o.providers??[]).find((u)=>u.id===n);if(d&&Hi(d,i))return d}return}async function td(i,o){let n=await s();n.clientProviderMap={...n.clientProviderMap,[i]:o};let d=n.providers??[],u=d.findIndex((e)=>e.id===o);if(u!==-1)d[u]={...d[u],lastUsedAt:new Date().toISOString()},n.providers=d;await K(n)}function E(i){return{type:i.type,apiKey:i.apiKey,baseUrl:i.baseUrl,authData:i.authData,model:i.model,modelContextWindow:i.modelContextWindow}}async function pp(){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 u=d.subscriptionType||"pro",e=d.email||"",r=`Claude ${u.charAt(0).toUpperCase()+u.slice(1)}${e?` (${e})`:""}`,{readClaudeAuth:t}=await Promise.resolve().then(() => (Jn(),On)),c=await t(),p=c.credentials||c.oauthAccount?{credentials:c.credentials,oauthAccount:c.oauthAccount}:void 0;return{id:crypto.randomUUID(),name:r,type:"claude-subscription",supportedClients:ni("claude-subscription"),createdAt:new Date().toISOString(),email:e,subscriptionType:u,authData:p}}catch{return null}}async function ap(){try{let{homedir:i}=await import("os"),{join:o}=await import("path"),n=await import("fs/promises"),d=o(i(),".codex","auth.json"),u=JSON.parse(await n.readFile(d,"utf-8"));if(u.auth_mode!=="chatgpt"||!u.tokens?.access_token)return null;let e="";try{e=JSON.parse(atob(u.tokens.id_token.split(".")[1])).email||""}catch{}return{auth:u,email:e}}catch{return null}}async function lp(){let i=await ap();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:ni("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:ni("codex-subscription"),createdAt:new Date().toISOString()}}catch{return null}}async function Uo(){let i=[],[o,n]=await Promise.all([pp(),lp()]);if(o)i.push(o);if(n)i.push(n);return i}async function Do(i){let o=await s(),n=o.providers??[],d=new Set(n.map((e)=>`${e.type}:${e.email||""}`)),u=0;for(let e of i){let r=`${e.type}:${e.email||""}`;if(!d.has(r))n.push(e),d.add(r),u++;else if(e.authData){let t=n.find((c)=>c.type===e.type&&c.email===e.email);if(t)t.authData=e.authData}}if(u>0){if(o.providers=n,!o.defaultProviderId&&n.length>0)o.defaultProviderId=n[0].id;await K(o)}return u}async function cd(){let i=await s();if(!i.apiKey||i.providers&&i.providers.length>0)return!1;let o={id:crypto.randomUUID(),name:"Tako \u5B98\u65B9",type:"tako",apiKey:i.apiKey,baseUrl:Y,apiId:i.apiId,supportedClients:ni("tako"),createdAt:new Date().toISOString(),builtin:!0};return i.providers=[o],i.defaultProviderId=o.id,await K(i),!0}async function pd(){let i=await s(),o=i.providers??[],n=!1;for(let d of o)if(d.type==="tako"&&!d.builtin)d.builtin=!0,n=!0;if(i.apiKey&&!o.some((d)=>d.type==="tako")){if(o.push({id:crypto.randomUUID(),name:"Tako \u5B98\u65B9",type:"tako",apiKey:i.apiKey,baseUrl:Y,apiId:i.apiId,supportedClients:ni("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 ti=N(()=>{C();Si();Si()});import{homedir as mp}from"os";import{dirname as xp,join as le}from"path";function fp(i){if(i.startsWith("ANTHROPIC_"))return!0;return vp.includes(i)}function hp(i){let o={...i},n=[],d=i.env;if(d&&typeof d==="object"&&!Array.isArray(d)){let u={...d};for(let e of Object.keys(u))if(fp(e))n.push(e),delete u[e];if(n.length>0)if(Object.keys(u).length===0)delete o.env;else o.env=u}return{settings:o,cleanedFields:n}}async function bp(i={}){let o=await import("fs/promises"),n=i.sourcePath??wp,d=i.targetPath??yp,u;try{u=await o.readFile(n,"utf-8")}catch{return null}let e;try{e=JSON.parse(u)}catch{return null}let{settings:r,cleanedFields:t}=hp(e);if(t.length===0)return null;if(i.logConflicts!==!1)W.warn(k("claudeCode.settingsDetected",{fields:t.join(", ")})),W.info(k("claudeCode.usingIsolatedSettings",{path:d}));return await o.mkdir(xp(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 Lp(i){let{readClaudeAuth:o,writeClaudeAuth:n}=await Promise.resolve().then(() => (Jn(),On)),{getProviders:d,updateProvider:u}=await Promise.resolve().then(() => (ti(),pe)),e=i.authData?.credentials,r=i.authData?.oauthAccount;if(!e){W.warn(k("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 u(l.id,{authData:x})}else if(c!==r?.emailAddress)W.warn(k("claudeCode.unknownCurrentAccount",{email:c}))}await n({credentials:e,oauthAccount:r});let p=r?.emailAddress||"?";W.info(k("claudeCode.subscriptionSwitched",{email:p}))}function gp(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 ri.find((d)=>d.id===i)?.displayName??i}function bo(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=ri.find((n)=>n.id===i);if(!o||o.contextWindow<1e6)return i;return`${i}[1m]`}function ae(i){if(i>=1e6)return"1M";if(i>0)return`${Math.round(i/1000)}k`;return"?"}function $p(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 u=bo(d.id);return{id:`model-${d.id}`,label:{en:d.displayName,zh:d.displayName},shortLabel:d.displayName,description:{en:`Use ${d.displayName} (${ae(d.contextWindow)} ctx)`,zh:`\u4F7F\u7528 ${d.displayName}\uFF08\u4E0A\u4E0B\u6587 ${ae(d.contextWindow)}\uFF09`},flag:`--model ${u}`,args:[],envVars:{ANTHROPIC_MODEL:u},group:"model"}})}function Mp(i){if(zi(),i&&(i.type==="tako"||i.type==="custom")){let d=$p(i);if(d)return d}let o=i?.type==="deepseek"?sp:i?.type==="xiaomi"?kp:zp,n=[];for(let d of o){let e=ri.find((p)=>p.id===d)?.contextWindow??0,r=e>=1e6?"1M":e>0?`${Math.round(e/1000)}k`:"?",t=gp(d),c=bo(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 Gp(i){return[...Np,...Mp(i)]}var wp,yp,vp,Wp,Np,zp,sp,kp;var ad=N(()=>{_();Si();Pi();X();fo();Pn();C();wp=le(mp(),".claude","settings.json"),yp=le(q,"claude-code","settings.json"),vp=["CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC","API_TIMEOUT_MS"];Wp={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?bo(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:j0,ANTHROPIC_AUTH_TOKEN:i.apiKey,...n?{ANTHROPIC_MODEL:n}:{}};case"xiaomi":return{...o,ANTHROPIC_BASE_URL:od(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 u=await bp();if(u)d=u.args}if(i.type==="claude-subscription")await Lp(i);return d.length>0?{args:d}:void 0},launchOptions:(i)=>Gp(i)},Np=[{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"]}],zp=["claude-sonnet-4-6","claude-opus-4-6","claude-opus-4-7"],sp=["deepseek-v4-flash","deepseek-v4-pro"],kp=["mimo-v2.5-pro"];yo(Wp)});import{homedir as Sp}from"os";import{join as xe}from"path";async function Pp(){let i=await import("fs/promises");try{await i.mkdir(we,{recursive:!0})}catch{}let o={};try{o=JSON.parse(await i.readFile(me,"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(me,JSON.stringify(o,null,2)+`
278
- `)}var we,me,Cp;var ye=N(()=>{_();we=xe(Sp(),".gemini"),me=xe(we,"settings.json");Cp={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:Pp};yo(Cp)});var ld=N(()=>{ie();ad();ye();_()});import{readFileSync as Qp,writeFileSync as qp,mkdirSync as Ip}from"fs";import{join as fe}from"path";import{homedir as he}from"os";function Jp(){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 Rp(){try{let i=Qp(be,"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>Op)return null;return o.region}catch{return null}}function ve(i){try{Ip(fe(he(),".tako"),{recursive:!0}),qp(be,JSON.stringify({region:i,detectedAt:Date.now()}),"utf-8")}catch{}}function Bp(){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 Yp(){if(Rn)return Rn;return Rn=(async()=>{let o=[Ap,Xp,Hp,Zp].map((n)=>n().then((d)=>d?d:Promise.reject(Error("null"))));try{return await Promise.race([Promise.any(o),new Promise((d,u)=>setTimeout(()=>u(Error("net-timeout")),1200))])}catch{return"cn"}})(),Rn}async function Ii(){if(Lo)return Lo;let i=Jp();if(i)return Lo=i,i;let o=Rp();if(o)return Lo=o,o;let n=Bp();if(n)return Lo=n,ve(n),n;let d=await Yp();return Lo=d,ve(d),d}async function Ap(){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 Xp(){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 Hp(){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 Zp(){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 u=n?.data?.country_code;return u==="CN"?"cn":u?"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 Kp(){let i=await Ii();return Bn[i]}async function ci(){return(await Kp()).npm}function Le(){return"curl -fsSL https://bun.sh/install | bash"}async function Vp(){let i=Bn.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((u)=>u.name.replace(/\/$/,"")).filter((u)=>/^bun-v\d+\.\d+\.\d+$/.test(u)).sort((u,e)=>{let r=u.replace("bun-v","").split(".").map(Number),t=e.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 We(){let i=Bn.cn.bunBinary,o=await Vp(),d={darwin:"darwin",win32:"windows",linux:"linux"}[process.platform]||"linux",u=process.arch==="arm64"?"aarch64":"x64",e=`bun-${d}-${u}`;return`${i}/${o}/${e}.zip`}async function Ne(){let i=await Ii(),o=Bn[i];if(i==="cn")W.info(`${k("region.usingChinaMirror")} npm: ${o.npm}`);else W.info(k("region.usingGlobalMirror"))}var Lo=null,Rn=null,be,Op=2592000000,Bn;var jo=N(()=>{X();Pi();be=fe(he(),".tako","region.json"),Bn={cn:{npm:"https://registry.npmmirror.com",bunBinary:"https://registry.npmmirror.com/-/binary/bun"},global:{npm:"https://registry.npmjs.org",bunBinary:null}}});var Fp=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 u=await fetch(i,{method:"POST",headers:await this.resolveHeaders(),body:o?JSON.stringify(o??{}):void 0,keepalive:!0,...n});if(u.status===401)return null;if(u.status!==200&&u.status!==202)throw Error(`HTTP error! status: ${u.status}`);let e=await u.text();return e?JSON.parse(e):null}catch(u){if(d<this.maxRetries){let e=this.initialRetryDelay*2**d;return await new Promise((r)=>setTimeout(r,e)),this.post(i,o,n,d+1)}return console.error("Max retries reached:",u),null}}async fetch(i,o,n={}){let d=`${this.baseUrl}${i}`;return this.post(d,o,n,0)}},ze=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 Fp({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,...u}=o??{},e=[...new Set([...this.groups,...n??[]])];return this.send({type:"track",payload:{name:i,profileId:d??this.profileId,groups:e.length>0?e:void 0,properties:{...this.global??{},...u}}})}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 se=()=>{};function ke(){if(!Wo)Wo=new ze({clientId:Tp,clientSecret:_p,apiUrl:Ep});return Wo}function ge(i,o,n){let d=ke().track(i,{profileId:o,...n}).catch(()=>{});Yn.push(d)}function $e(i,o){let{email:n,...d}=o,u=ke().identify({profileId:i,...typeof n==="string"?{email:n}:{},firstName:String(d.platform||""),properties:d}).catch(()=>{});Yn.push(u)}async function Me(){if(await Promise.allSettled(Yn),Yn.length=0,Wo){try{Wo.flush()}catch{}Wo=null}}var Tp="d65a6d4b-f702-4af6-98e7-bdb999e01d5f",_p="sec_1e0ea34016bc3a5f8ef5",Ep="https://op.shiroha.tech/api",Wo=null,Yn;var Ge=N(()=>{se();Yn=[]});function Se(){return{cli_version:Up,platform:process.platform,arch:process.arch,locale:no(),node_version:process.version}}function Pe(i){return Bun.hash(i).toString(16).slice(0,8)}var Up="0.3.21";var md=N(()=>{X()});async function Ce(){if(No!==null)return No;try{return No=(await s()).telemetryEnabled!==!1,No}catch{return No=!1,!1}}async function Qe(){try{let i=await s();if(i.apiId)return i.apiId;let o=i.providers??[],n=i.defaultProviderId,d=n?o.find((u)=>u.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(xd)return;try{if(!await Ce())return;let i=await s(),o=await Qe();if(o==="anonymous")return;let d=(i.providers??[]).find((e)=>e.email)?.email,u=await Ii();$e(o,{...d?{email:d}:{},region:u,locale:no(),first_seen_version:Dp,platform:process.platform,arch:process.arch}),xd=!0}catch{}}function R(i,o){jp(i,o).catch(()=>{})}async function jp(i,o){try{if(!await Ce())return;let n=await Qe();ge(i,n,{...Se(),...o})}catch{}}async function on(){await Me()}function U(){No=null,xd=!1}var Dp="0.3.21",xd=!1,No=null;var wi=N(()=>{Ge();C();jo();X();md();md()});function da(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 Vi(i,o,n){let d=Date.now(),u={phase:"\u6B63\u5728\u51C6\u5907",pkgCount:0,elapsedSec:0},e=[],r=()=>{u.elapsedSec=Math.floor((Date.now()-d)/1000),n(da(o,u))};r();let t=setInterval(r,1000),c=(a)=>{if(!a)return;if(e.push(a),ia.test(a))u.phase="\u89E3\u6790\u4F9D\u8D56";else if(qe.test(a)){u.phase="\u4E0B\u8F7D\u5E76\u89E3\u538B";let l=a.match(qe);if(l)u.pkgCount=parseInt(l[1],10)}else if(oa.test(a))u.phase="\u5199\u5165 lockfile";else if(na.test(a))u.phase="\u5B8C\u6210";r()},p=async(a)=>{if(!a)return;let l=a.getReader(),x=new TextDecoder,w="";try{while(!0){let{done:y,value:v}=await l.read();if(y)break;w+=x.decode(v,{stream:!0}).replace(/\r/g,"");let h=w.split(`
279
- `);w=h.pop()??"";for(let f of h)c(f)}if(w)c(w)}finally{l.releaseLock()}};try{await Promise.all([p(i.stderr),p(i.stdout)])}finally{clearInterval(t)}return e.join(`
280
- `)}var ia,qe,oa,na;var An=N(()=>{ia=/^Resolving dependencies/,qe=/^Resolved, downloaded and extracted \[(\d+)\]/,oa=/^Saved lockfile/,na=/^(\d+) packages? installed/});function ua(i){return i.replace(/\r/g,`
281
- `).replace(/\n{3,}/g,`
282
-
283
- `).trim()}function Je(i,o){for(let n of i.split(/\r?\n/)){let d=n.trim();if(!d)continue;if(o.some((u)=>u.test(d)))return d}return null}function zo(i,o="\u672A\u77E5\u9519\u8BEF"){let n=ua(i??"");if(!n)return o;let d=Je(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 u=Je(n,[/\b(error|failed|timeout|timed out|network|ECONN|ETIMEDOUT|ENOTFOUND|EAI_AGAIN)\b/i]);if(u)return u.slice(0,800);return n.length>800?`${n.slice(0,800)}...`:n}function wa(i){try{if(process.stdin.isTTY)process.stdin.setRawMode(i);process.stdin.pause()}catch{}}async function ya(i=process.stdin,o=30){let n=()=>{try{if(i.ref?.(),i.removeAllListeners?.(),i.isTTY&&typeof i.setRawMode==="function")i.setRawMode(!1);i.pause?.()}catch{}};n(),await new Promise((d)=>setTimeout(d,o)),n()}async function Be(i,o){if(!process.stdin.isTTY||!process.stdout.isTTY)return o;let n=Boolean(process.stdin.isRaw);return await ya(),new Promise((d)=>{let u=()=>{process.stdin.off("data",e),wa(n)},e=(r)=>{let t=r.toString("utf8");if(t==="\x03"){u(),process.kill(process.pid,"SIGINT"),d(o);return}let c=i(t);if(c!==void 0)u(),d(c)};if(process.stdin.on("data",e),process.stdin.resume(),process.stdin.isTTY)process.stdin.setRawMode(!0)})}async function Ye(i){let o=i.defaultValue??!0,n=o?"[Y/n]":"[y/N]";process.stdout.write(`
284
- ? ${i.message} ${n} `);let d=await Be((u)=>{if(u==="\r"||u===`
285
- `)return o;if(u==="\x1B")return!1;if(u==="y"||u==="Y")return!0;if(u==="n"||u==="N")return!1;return},o);return process.stdout.write(d?`Yes
286
- `:`No
287
- `),d}async function Ae(i){let o=i.content.split(/\r?\n/).map((n)=>n.trimEnd());process.stdout.write(`
288
- === Announcement: ${i.title} ===
289
- `);for(let n of o)process.stdout.write(`${n}
290
- `);process.stdout.write(i.popup_once?`
291
- Press Enter, Esc, or q to close. This announcement is shown once.
292
- `:`
293
- Press Enter, Esc, or q to close.
294
- `),await Be((n)=>{if(n==="\r"||n===`
295
- `)return!0;if(n==="\x1B"||n==="q"||n==="Q")return!0;return},!0),process.stdout.write(`
296
- `)}import{join as J}from"path";function va(i){return i.startsWith(Wi)}function Xn(i){return{...process.env,BUN_CONFIG_REGISTRY:i,BUN_INSTALL_CACHE_DIR:G0}}async function fa(){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 Xe(){return await fa()!==null}async function ha(){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{}W.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 ba(i){let o=await import("fs/promises"),{join:n}=await import("path"),d=process.platform==="win32",u=d?"bun.exe":"bun",e=await We();W.info(`\u4ECE npmmirror \u4E0B\u8F7D: ${e}`);let r=await fetch(e);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 a=`Expand-Archive -Path "${t}" -DestinationPath "${i}" -Force`,l=Bun.spawn(["powershell","-Command",a],{stdout:"pipe",stderr:"pipe"});if(await l.exited,l.exitCode!==0)throw Error("\u89E3\u538B\u5931\u8D25")}else{let a=Bun.spawn(["unzip","-oq",t,"-d",i],{stdout:"pipe",stderr:"pipe"});if(await a.exited,a.exitCode!==0)throw Error("\u89E3\u538B\u5931\u8D25")}let p=await o.readdir(i);for(let a of p){let l=n(i,a);if((await o.stat(l)).isDirectory()&&a.startsWith("bun-")){let w=n(l,u);try{if(await o.access(w),await o.rename(w,n(c,u)),!d)await o.chmod(n(c,u),493);await o.rm(l,{recursive:!0,force:!0});break}catch{}}}return await o.rm(t,{force:!0}),!0}async function La(){let i=Zi();if(!await ha())return W.error("\u8BF7\u5148\u624B\u52A8\u5B89\u88C5 unzip: apt install unzip / yum install unzip"),!1;await Ne(),i.start("\u6B63\u5728\u5B89\u88C5 Tako \u4E13\u5C5E Bun \u8FD0\u884C\u65F6...");try{if(await(await import("fs/promises")).mkdir(Wi,{recursive:!0}),await Ii()==="cn")await ba(Wi);else if(process.platform==="win32"){let d=`$env:BUN_INSTALL="${Wi}"; 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="${Wi}" ${Le()}`;if(await Bun.spawn(["bash","-c",d],{stdout:"inherit",stderr:"inherit"}).exited!==0)return i.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}return eo=A,i.stop("Tako \u4E13\u5C5E Bun \u5B89\u88C5\u5B8C\u6210"),W.info(`\u5B89\u88C5\u4F4D\u7F6E: ${Wi}`),!0}catch(o){return i.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}}async function bd(){if(await Xe())return eo=A,!0;return W.warn("\u672A\u68C0\u6D4B\u5230 Tako \u4E13\u5C5E Bun\uFF0C\u6B63\u5728\u81EA\u52A8\u5B89\u88C5..."),W.info("\uFF08\u4E0D\u4F1A\u5F71\u54CD\u60A8\u7CFB\u7EDF\u4E2D\u5DF2\u5B89\u88C5\u7684 Node.js \u6216 Bun\uFF09"),await La()}async function pi(){if(eo){if(!va(eo))eo=A;return eo}if(await Xe())return eo=A,A;return A}async function Ld(i){try{let o=await ci(),n=await fetch(`${o}/${i}/latest`);if(!n.ok)return null;return(await n.json()).version}catch{return null}}async function Wa(i){return(await s()).installedClients[i.id]?.version||null}async function Na(i,o){let n=J(i,"node_modules",o,"package.json");try{return await Bun.file(n).exists()}catch{return!1}}async function He(i){let o=Gi(i.id);return Na(o,i.package)}async function Ze(i){let o=await Wa(i);if(!o)return!0;let n=await Ld(i.package);if(!n)return!1;return o!==n}function Ke(i){let{platform:o,arch:n}=process,d=`${o}-${n}`;for(let[u,e]of Object.entries(i))if(u.endsWith(d))return{pkg:u,version:e};return null}async function Ve(i,o,n,d){let u=J(o,"node_modules",i.package,"package.json");try{let e=Bun.file(u);if(!await e.exists())return;let t=(await e.json()).optionalDependencies;if(!t||typeof t!=="object")return;let c=Ke(t);if(!c)return;let a=process.platform==="win32"?`${i.command}.exe`:i.command,l=J(o,"node_modules",c.pkg,"package.json"),x=!1;try{let v=Bun.file(l);if(await v.exists())x=(await v.json()).version===c.version}catch{x=!1}let w=J(o,"node_modules",c.pkg,a),y=Bun.file(w);if(x&&await y.exists()&&y.size>1024)return;W.info(`\u6B63\u5728\u5B89\u88C5\u5E73\u53F0\u5305 ${c.pkg}...`);for(let v of[c.version,"latest"]){let h=Bun.spawn([n,"add",`${c.pkg}@${v}`],{cwd:o,stdout:"pipe",stderr:"pipe",env:Xn(d)}),f=await Vi(h,`\u6B63\u5728\u5B89\u88C5\u5E73\u53F0\u5305 ${c.pkg}`,()=>{});if(await h.exited===0)break;if(v==="latest")W.warn(`\u5E73\u53F0\u5305\u5B89\u88C5\u5931\u8D25: ${f.slice(0,200)}`)}}catch(e){W.warn(`\u5E73\u53F0\u5305\u68C0\u67E5\u5F02\u5E38: ${e instanceof Error?e.message:"\u672A\u77E5\u9519\u8BEF"}`)}}async function vd(i,o){let n=await import("fs/promises"),d=J(o,"node_modules",i.package,"package.json");try{let u=Bun.file(d);if(!await u.exists())return!1;let e=await u.json(),r=e.optionalDependencies;if(!r)return!0;let t=Ke(r);if(!t)return W.warn(`\u672A\u627E\u5230\u5339\u914D\u7684\u5E73\u53F0\u5305 (${process.platform}-${process.arch})`),!1;let c=e.bin,p=typeof c==="string"?c:c?.[i.command];if(!p)return!1;let a=J(o,"node_modules",i.package,p),l=process.platform==="win32",x=l?`${i.command}.exe`:i.command,w=J(o,"node_modules",t.pkg,x),y=Bun.file(w);if(await y.exists()&&y.size>1024){if(await Bun.write(a,y),!l)await n.chmod(a,493);return!0}let v=J(o,"node_modules",i.package,"install.cjs");if(await Bun.file(v).exists()){W.info("\u6B63\u5728\u901A\u8FC7 postinstall \u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236...");let f=await pi(),L=Bun.spawn([f,v],{cwd:J(o,"node_modules",i.package),stdout:"pipe",stderr:"pipe"}),M=await Vi(L,"\u6B63\u5728\u901A\u8FC7 postinstall \u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236",()=>{});if(await L.exited!==0)W.warn(`postinstall \u5931\u8D25: ${M.slice(0,200)}`);let O=Bun.file(a);if(await O.exists()&&O.size>1024){if(!l)await n.chmod(a,493);return!0}}W.info("\u6B63\u5728\u4ECE registry \u4E0B\u8F7D\u539F\u751F\u4E8C\u8FDB\u5236...");let h=await ci();for(let f of[t.version,"latest"])try{let L=await fetch(`${h}/${t.pkg}/${f}`);if(!L.ok)continue;let g=(await L.json()).dist?.tarball;if(!g)continue;let O=J(q,".tmp-extract-"+Date.now());await n.mkdir(O,{recursive:!0});let li=J(O,"pkg.tgz"),mo=Bun.spawn(["curl","-fsSL","-o",li,g],{stdout:"pipe",stderr:"pipe"});if(await mo.exited,mo.exitCode!==0){let jt=await new Response(mo.stderr).text();W.warn(`curl \u4E0B\u8F7D\u5931\u8D25: ${jt.slice(0,200)}`),await n.rm(O,{recursive:!0,force:!0}).catch(()=>{});continue}let Xo=Bun.file(li).size;if(Xo<1024){W.warn(`\u4E0B\u8F7D\u6587\u4EF6\u5F02\u5E38 (${Xo} bytes, url: ${g.slice(0,100)})`),await n.rm(O,{recursive:!0,force:!0}).catch(()=>{});continue}let k0=Bun.spawn(["tar","xzf",li,"-C",O,`package/${x}`],{stdout:"pipe",stderr:"pipe"});await k0.exited;let Ut=J(O,"package",x),g0=Bun.file(Ut);if(await g0.exists()&&g0.size>1024){if(await Bun.write(a,g0),!l)await n.chmod(a,493);return await n.rm(O,{recursive:!0,force:!0}).catch(()=>{}),!0}let Dt=await new Response(k0.stderr).text();W.warn(`tar \u63D0\u53D6\u5931\u8D25 (tgz=${Xo} bytes, exit=${k0.exitCode}): ${Dt.slice(0,200)}`),await n.rm(O,{recursive:!0,force:!0}).catch(()=>{})}catch(L){W.warn(`\u4E0B\u8F7D\u5931\u8D25: ${L instanceof Error?L.message:"\u672A\u77E5\u9519\u8BEF"}`)}if(h!=="https://registry.npmjs.org")try{let f=`https://registry.npmjs.org/${t.pkg}/-/${t.pkg.split("/").pop()}-${t.version}.tgz`;W.info("\u6B63\u5728\u4ECE npmjs.org \u76F4\u8FDE\u4E0B\u8F7D...");let L=J(q,".tmp-extract-"+Date.now());await n.mkdir(L,{recursive:!0});let M=J(L,"pkg.tgz"),g=Bun.spawn(["curl","-fsSL","-o",M,f],{stdout:"pipe",stderr:"pipe"});if(await g.exited,g.exitCode===0&&Bun.file(M).size>1024){await Bun.spawn(["tar","xzf",M,"-C",L,`package/${x}`],{stdout:"pipe",stderr:"pipe"}).exited;let li=Bun.file(J(L,"package",x));if(await li.exists()&&li.size>1024){if(await Bun.write(a,li),!l)await n.chmod(a,493);return await n.rm(L,{recursive:!0,force:!0}).catch(()=>{}),!0}}await n.rm(L,{recursive:!0,force:!0}).catch(()=>{})}catch{}return!1}catch(u){return W.warn(`\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236\u5931\u8D25: ${u instanceof Error?u.message:"\u672A\u77E5\u9519\u8BEF"}`),!1}}async function fd(i,o=!1){let n=Zi(),d=Gi(i.id);try{if(!await bd())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 u=await He(i),e=o||await Ze(i);if(u&&!e)return{success:!0};let r=u?"\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 p=J(d,"package.json");if(!await Bun.file(p).exists())await Bun.write(p,JSON.stringify({name:`tako-${i.id}`,private:!0,dependencies:{}},null,2));let l=await pi(),x=await ci(),w=await Ii();if(W.info(`\u7F51\u7EDC\u73AF\u5883: ${w==="cn"?"\u56FD\u5185\uFF08npmmirror\uFF09":"\u6D77\u5916"} | registry: ${x}`),u){let M=J(d,"bun.lock");await c.rm(M,{force:!0}).catch(()=>{})}let y=Bun.spawn([l,"add",`${i.package}@latest`],{cwd:d,stdout:"pipe",stderr:"pipe",env:Xn(x)}),v=await Vi(y,t,(M)=>n.update(M));if(await y.exited!==0){if(n.stop(),!u)await c.rm(p,{force:!0}).catch(()=>{});return{success:!1,error:zo(v)}}await Ve(i,d,l,x),await vd(i,d);let f=await Ld(i.package),L=(await s()).installedClients[i.id]?.version;if(f){let M=await s();if(M.installedClients[i.id]={version:f,installedAt:new Date().toISOString()},await Di(M),u&&L)R("client_updated",{client_id:i.id,from_version:L,to_version:f});else R("client_installed",{client_id:i.id,client_version:f})}return n.stop(`${i.name} ${r}\u5B8C\u6210`),{success:!0}}catch(u){return n.stop(),{success:!1,error:zo(u instanceof Error?u.message:void 0)}}}async function yd(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 un(i,o={}){if(i.runtime!=="native")return;let n=o.reinstallOnFailure??!0,d=o.forcePlace??!1,u=Gi(i.id),e=J(u,"node_modules",i.package,"package.json");try{let r=Bun.file(e);if(!await r.exists())return;let c=(await r.json()).bin;if(!c)return;let p=typeof c==="string"?c:c[i.command];if(!p)return;let a=J(u,"node_modules",i.package,p);if(!d&&!await yd(a))return;W.info("\u6B63\u5728\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236...");let l=await pi(),x=await ci();if(await Ve(i,u,l,x),!await vd(i,u)||await yd(a)){if(!n){W.warn("\u539F\u751F\u4E8C\u8FDB\u5236\u4FEE\u590D\u5931\u8D25");return}if(W.warn("\u539F\u751F\u4E8C\u8FDB\u5236\u4FEE\u590D\u5931\u8D25\uFF0C\u6B63\u5728\u91CD\u65B0\u5B89\u88C5..."),await(await import("fs/promises")).rm(u,{recursive:!0,force:!0}),(await fd(i)).success)if(await vd(i,u),await yd(a))W.warn("\u91CD\u65B0\u5B89\u88C5\u540E\u4ECD\u65E0\u6CD5\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236");else W.success("\u91CD\u65B0\u5B89\u88C5\u5B8C\u6210")}else W.success("\u539F\u751F\u4E8C\u8FDB\u5236\u5B89\u88C5\u5B8C\u6210")}catch{}}async function Fe(i){if(!await He(i)){let d=await fd(i);if(d.success)await un(i);return d}if(await un(i),await Ze(i)){let d=await Ld(i.package),u=(await s()).installedClients[i.id]?.version||"\u672A\u77E5",e=d?`${u} \u2192 ${d}`:"\u6709\u65B0\u7248\u672C\u53EF\u7528";if(W.info(`${i.name} \u53D1\u73B0\u66F4\u65B0: ${e}`),await za(i.id))return W.info("\u4ECA\u65E5\u5DF2\u8DF3\u8FC7\u66F4\u65B0\uFF0C\u4F7F\u7528\u5F53\u524D\u7248\u672C"),{success:!0};if(!await Ye({message:`\u662F\u5426\u66F4\u65B0 ${i.name}\uFF1F`,defaultValue:!1}))return await sa(i.id),W.info("\u8DF3\u8FC7\u66F4\u65B0\uFF0C\u4F7F\u7528\u5F53\u524D\u7248\u672C"),{success:!0};let t=await fd(i,!0);if(t.success)return await un(i),t;return W.warn(`\u66F4\u65B0 ${i.name} \u5931\u8D25\uFF1A${t.error??"\u672A\u77E5\u9519\u8BEF"}`),W.info("\u7EE7\u7EED\u4F7F\u7528\u5F53\u524D\u5DF2\u5B89\u88C5\u7248\u672C"),{success:!0,skippedUpdate:!0,error:t.error}}return{success:!0}}async function za(i){try{let o=Bun.file(hd);if(!await o.exists())return!1;let d=(await o.json())[i];if(!d)return!1;let u=new Date().toISOString().slice(0,10);return d===u}catch{return!1}}async function sa(i){try{let o={},n=Bun.file(hd);if(await n.exists())try{o=await n.json()}catch{}o[i]=new Date().toISOString().slice(0,10),await Bun.write(hd,JSON.stringify(o))}catch{}}var eo=null,hd;var so=N(()=>{Pi();_();C();jo();wi();An();hd=J(q,".update-dismissed.json")});import{homedir as ka}from"os";async function Nd(i){try{return(await(await import("fs/promises")).stat(i)).isDirectory()}catch{return!1}}async function Te(i,o,n){let d=await s(),u=d.recentProjects||[],e=new Date().toISOString(),r=u.findIndex((c)=>c.path===i);if(r>=0){let c=u[r],p=c.clientUsage||{},a=p[o]||{count:0,lastAt:e};u[r]={...c,launchCount:c.launchCount+1,lastLaunchedAt:e,lastClientId:o,clientUsage:{...p,[o]:{count:a.count+1,lastAt:e,lastSelectedOptionIds:n??a.lastSelectedOptionIds}}}}else u.push({path:i,launchCount:1,lastLaunchedAt:e,lastClientId:o,clientUsage:{[o]:{count:1,lastAt:e,lastSelectedOptionIds:n}}});let t=u.sort((c,p)=>new Date(p.lastLaunchedAt).getTime()-new Date(c.lastLaunchedAt).getTime()).slice(0,ga);d.recentProjects=t,await K(d)}async function Hn(i){let n=(await s()).recentProjects||[],d=process.cwd(),e=n.find((t)=>t.path===d)?.clientUsage?.[i]?.lastSelectedOptionIds;if(e)return e;return n.filter((t)=>t.path!==d&&t.clientUsage?.[i]?.lastSelectedOptionIds).sort((t,c)=>{let p=new Date(t.clientUsage[i].lastAt).getTime();return new Date(c.clientUsage[i].lastAt).getTime()-p})[0]?.clientUsage?.[i]?.lastSelectedOptionIds??[]}function $a(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 _e(i,o=Wd,n=!0){let u=(await s()).recentProjects||[],e=process.cwd(),t=u.filter((p)=>{if(n&&p.path===e)return!1;return p.clientUsage?.[i]||p.lastClientId===i}).map((p)=>({...p,lastUsedTime:$a(p,i)})).sort((p,a)=>a.lastUsedTime-p.lastUsedTime),c=[];for(let{lastUsedTime:p,...a}of t){if(c.length>=o)break;if(await Nd(a.path))c.push(a)}return c}async function Ee(){let o=(await s()).recentProjects||[],n=process.cwd();return o.find((u)=>u.path===n)?.lastClientId||null}function zd(i,o=25){let n=ka(),d=i.startsWith(n)?"~"+i.slice(n.length):i;if(d.length>o){let e=d.split("/").pop()||"";if(e.length>o-4)d="..."+e.slice(-o+3);else d=`.../${e}`}return d}function Ue(i){let{t:o}=(X(),uc(ne)),n=Date.now(),d=new Date(i).getTime(),u=n-d,e=Math.floor(u/60000),r=Math.floor(u/3600000),t=Math.floor(u/86400000),c=Math.floor(t/7),p=Math.floor(t/30);if(e<1)return o("time.justNow");if(e<60)return o("time.minutesAgo",{n:e});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:p})}var ga=50,Wd=3;var Zn=N(()=>{C()});import{dirname as Ca,join as Qa}from"path";import{mkdir as qa}from"fs/promises";function dr(){return $d??Qa(q,"model-usage.json")}function gd(){return{counts:{},updatedAt:new Date(0).toISOString()}}async function ur(){try{let i=Bun.file(dr());if(!await i.exists())return gd();let o=await i.json(),n=o?.counts;if(!n||typeof n!=="object")return gd();let d={};for(let[u,e]of Object.entries(n))if(typeof e==="number"&&Number.isFinite(e))d[u]=e;return{counts:d,updatedAt:typeof o?.updatedAt==="string"?o.updatedAt:new Date(0).toISOString()}}catch{return gd()}}async function Ja(i){if($d)await qa(Ca($d),{recursive:!0});else await Zo();await Bun.write(dr(),JSON.stringify(i,null,2))}async function er(){return{...(await ur()).counts}}async function rr(i){let o=await ur(),n={};for(let[d,u]of Object.entries(o.counts)){let e=u*Ia;if(e>=Oa)n[d]=e}for(let d of i){if(!d.startsWith("model-"))continue;n[d]=(n[d]??0)+1}await Ja({counts:n,updatedAt:new Date().toISOString()})}var Ia=0.95,Oa=0.05,$d=null;var Md=N(()=>{C()});function Gd(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 Ha(i,o){if(!Number.isFinite(i)||i<0)return;return{usedPct:0,costUsed:i,...o?{windowMinutes:o}:{}}}async function Za(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:Gd(n.usage.windowCost??0,n.plan.window_cost_limit??0,n.plan.window_minutes),daily:Gd(n.usage.dailyCost??0,n.plan.daily_cost_limit??0),secondary:Gd(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 Za(i);if(d)return d;try{let u=await fetch(`${Y}/apiStats/api/user-stats`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:i}),signal:AbortSignal.timeout(5000)});if(!u.ok)return{...n,hint:"Tako \u7528\u91CF\u63A5\u53E3\u4E0D\u53EF\u7528",error:`http_${u.status}`};let e=await u.json(),r=e?.data;if(!e?.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:Ha(t),fetchedAt:o}}catch(u){return{...n,hint:"Tako \u7528\u91CF\u63A5\u53E3\u8BF7\u6C42\u5931\u8D25",error:String(u.message??u)}}}async function tr(i){let o=await ji();return ro(o)}var Sd=N(()=>{C()});function Pd(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 Ka(i){return i.authData?.credentials?.claudeAiOauth?.accessToken}async function cr(i){let o=Date.now(),n={provider:"claude-subscription",status:"error",fetchedAt:o},d=Ka(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 u=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(u.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(!u.ok)return{...n,hint:"Anthropic \u7528\u91CF\u63A5\u53E3\u4E0D\u53EF\u7528",error:`http_${u.status}`};let e=await u.json(),r=Pd(e.seven_day_opus),t=Pd(e.five_hour);if(t)t.windowMinutes=300;let c=Pd(e.seven_day);if(c)c.windowMinutes=10080;return{provider:"claude-subscription",status:"ok",primary:t,secondary:c,...r?{modelLimits:{opus:r}}:{},fetchedAt:o}}catch(u){return{...n,hint:"Anthropic \u7528\u91CF\u63A5\u53E3\u8BF7\u6C42\u5931\u8D25",error:String(u.message??u)}}}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 Va(i){let o=i.authData?.tokens;return{accessToken:o?.access_token,accountId:o?.account_id}}async function Fa(i,o){if(await Bun.spawn(["which","codex"],{stdout:"pipe",stderr:"pipe"}).exited!==0)return null;let d=await import("fs/promises"),{mkdtemp:u}=d,{tmpdir:e}=await import("os"),{join:r}=await import("path"),t=await u(r(e(),"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 p=[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
- `)+`
298
- `,a=Bun.spawn(["codex","app-server"],{stdin:"pipe",stdout:"pipe",stderr:"pipe",env:{...process.env,CODEX_HOME:t}});a.stdin.write(p);let l=new Promise((w)=>setTimeout(w,8000));await Promise.race([a.exited,l]),a.kill();let x=await new Response(a.stdout).text();for(let w of x.split(`
299
- `)){let y=w.trim();if(!y)continue;try{let v=JSON.parse(y);if(v.id!==1)continue;if(v.error)return null;return{status:200,body:JSON.stringify(v.result?.rateLimits??v.result??{})}}catch{continue}}return null}finally{d.rm(t,{recursive:!0,force:!0}).catch(()=>{})}}async function Ta(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"}),u=await new Response(d.stdout).text();await d.exited;let e=u.match(/^([\s\S]*?)\n__HTTP__(\d+)$/);return{body:e?e[1]:u,status:e?parseInt(e[2],10):0}}async function ar(i){let o=Date.now(),n={provider:"codex-subscription",status:"error",fetchedAt:o},{accessToken:d,accountId:u}=Va(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:e,body:r}=await Ea(d,u);if(e===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(e!==200)return{...n,hint:e===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_${e}`};let t=JSON.parse(r),c=t.rate_limit??t.rateLimits??t,p=c.primary_window??c.primary,a=c.secondary_window??c.secondary;return{provider:"codex-subscription",status:"ok",primary:pr(p),secondary:pr(a),planType:t.plan_type??t.planType,fetchedAt:o}}catch(e){return{...n,hint:"ChatGPT \u7528\u91CF\u63A5\u53E3\u8BF7\u6C42\u5931\u8D25",error:String(e.message??e)}}}var _a=async(i,o)=>{let n=await Fa(i,o).catch(()=>null);if(n)return n;return Ta(i,o)},Ea;var lr=N(()=>{Ea=_a});var Qd={};mi(Qd,{invalidateQuotaCache:()=>dl,getOfficialQuota:()=>Cd,fetchTakoQuotaByApiId:()=>ro,_setQuotaDiskCachePathForTest:()=>il,_clearQuotaCache:()=>nl});import{homedir as Ua}from"os";import{join as Da}from"path";function ja(i){return`${i.type}:${i.id}`}function wr(){return xr??Da(Ua(),".tako","quota-cache.json")}function il(i){xr=i}function yr(){try{let o=$("fs").readFileSync(wr(),"utf-8"),n=JSON.parse(o);return typeof n==="object"&&n!==null?n:{}}catch{return{}}}function vr(i){try{let o=$("fs"),n=wr(),d=n.slice(0,n.lastIndexOf("/"));if(d)o.mkdirSync(d,{recursive:!0});let u=`${n}.tmp.${process.pid}`;o.writeFileSync(u,JSON.stringify(i)),o.renameSync(u,n)}catch{}}function ol(i){return{provider:i.type,status:"unsupported",fetchedAt:Date.now()}}async function Cd(i){let o=ja(i),n=Date.now(),d=ko.get(o);if(d&&n-d.fetchedAt<mr)return d;let u=yr(),e=u[o];if(e&&n-e.fetchedAt<mr)return ko.set(o,e),e;let r;switch(i.type){case"tako":r=await tr(i);break;case"claude-subscription":r=await cr(i);break;case"codex-subscription":r=await ar(i);break;default:r=ol(i);break}return ko.set(o,r),u[o]=r,vr(u),r}function nl(){ko.clear()}function dl(i,o){for(let n of[...ko.keys()])if(n.endsWith(`:${i}`))ko.delete(n);try{let n=yr(),d=!1;for(let u of Object.keys(n))if(u.endsWith(`:${i}`))delete n[u],d=!0;if(d)vr(n)}catch{}}var mr=60000,ko,xr=null;var En=N(()=>{Sd();lr();ko=new Map});var Ad={};mi(Ad,{listAvailableVersions:()=>Rd,installAtVersion:()=>Bd,getInstalledVersion:()=>Yd});import{join as Jd}from"path";async function Rd(i){let n=`${await ci()}/${encodeURIComponent(i).replace("%40","@")}`,d=await fetch(n,{signal:AbortSignal.timeout(1e4)});if(!d.ok)throw Error(`registry http ${d.status}`);let u=await d.json(),e=Object.keys(u.versions??{});if(!e.length)throw Error("no versions found");let r=u.time??{},t=e.map((c)=>({version:c,publishedAt:r[c],isCurrent:!1}));return t.sort((c,p)=>{let a=c.publishedAt?Date.parse(c.publishedAt):0;return(p.publishedAt?Date.parse(p.publishedAt):0)-a}),t}async function Bd(i,o){let n=await import("fs/promises"),d=Gi(i.id);if(!await bd())throw 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");await n.mkdir(d,{recursive:!0});let u=Jd(d,"bun.lock");await n.rm(u,{force:!0}).catch(()=>{});let e=Jd(d,"package.json");await Bun.write(e,JSON.stringify({name:`tako-${i.id}-host`,version:"0.0.0",private:!0},null,2));let r=await ci(),t=await Ii();W.info(`\u7F51\u7EDC\u73AF\u5883: ${t==="cn"?"\u56FD\u5185":"\u6D77\u5916"} | registry: ${r}`);let c=await pi(),p=Bun.spawn([c,"add",`${i.package}@${o}`],{cwd:d,stdout:"pipe",stderr:"pipe",env:Xn(r)}),a=Zi(),l=`\u6B63\u5728\u5207\u6362 ${i.name} \u5230 ${o}`;a.start(l);let x=await Vi(p,l,(v)=>a.update(v));if(await p.exited!==0)throw a.stop(),Error(`bun add ${i.package}@${o} failed: ${x.slice(0,500).trim()}`);await un(i,{reinstallOnFailure:!1,forcePlace:!0}),a.stop(`${i.name} \u5DF2\u5207\u6362\u5230 ${o}`);let y=await s();await Di({installedClients:{...y.installedClients,[i.id]:{version:o,installedAt:new Date().toISOString()}}})}async function Yd(i){let o=Gi(i.id),n=Jd(o,"node_modules",i.package,"package.json");try{let u=Bun.file(n);if(await u.exists()){let e=await u.json();if(e.version)return e.version}}catch{}return(await s()).installedClients[i.id]?.version??null}var i0=N(()=>{_();C();so();jo();An();Pi()});var Nr={};mi(Nr,{runQuotaCommand:()=>sl,buildQuotaPayload:()=>Wr});async function Wl(i){try{let n=await(await fetch(`${Y}/apiStats/api/get-key-id`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:i}),signal:AbortSignal.timeout(5000)})).json();if(n.success&&n.data?.id)return{valid:!0,apiId:n.data.id};return{valid:!1,error:n.error||"Tako key validation failed"}}catch(o){return{valid:!1,error:String(o.message??o)}}}function Nl(i){let o=(i.providers??[]).find((u)=>u.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 Xd(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 tn(i,o,n){return{exitCode:1,payload:{provider:"tako",status:"error",error:i,message:o,...n?{hint:n}:{}}}}function Lr(i){return{exitCode:0,payload:{provider:"tako",status:"ok",fiveHour:Xd(i.primary),daily:Xd(i.daily),weekly:Xd(i.secondary),fetchedAt:new Date(i.fetchedAt).toISOString()}}}function zl(i){return tn(i.error||"quota_unavailable",i.hint||"Tako quota is unavailable",i.hint)}async function Wr(i,o={}){let n=o.fetchQuotaByApiId??ro,d=o.resolveApiIdFromKey??Wl,u=Nl(i);if(!u)return tn("missing_tako_provider","Tako provider is not configured");let e=null;if(u.apiId){if(e=await n(u.apiId),e.status==="ok")return Lr(e)}if(u.apiKey){let r=await d(u.apiKey);if(r.valid&&r.apiId&&r.apiId!==u.apiId){if(e=await n(r.apiId),e.status==="ok")return Lr(e)}else if(!u.apiId)return tn("api_id_refresh_failed",r.error||"Unable to resolve Tako API ID from API key")}if(e)return zl(e);return tn("missing_api_id","Tako API ID is not configured")}async function sl(i=[],o={}){if(i.length>0){let u=tn("invalid_args","Usage: tako quota");return process.stdout.write(`${JSON.stringify(u.payload)}
301
- `),u.exitCode}let n=o.loadConfig??s,d=await Wr(await n(),o);return process.stdout.write(`${JSON.stringify(d.payload)}
302
- `),d.exitCode}var zr=N(()=>{C();Sd()});import{join as Fi}from"path";import{homedir as kl}from"os";import{mkdir as gl,readFile as o0,writeFile as Vd,rename as Fd,readdir as sr,rm as $l,appendFile as kr}from"fs/promises";function vi(i){return Fi(Hd,i)}function gr(i){return Fi(vi(i),"meta.json")}function D(i){return Fi(vi(i),"log.ndjson")}function cn(i){return Fi(vi(i),"approvals")}function Zd(i,o){return Fi(cn(i),`${o}.req.json`)}function Kd(i,o){return Fi(cn(i),`${o}.resp.json`)}async function pn(i){await gl(i,{recursive:!0})}async function $r(i){await pn(vi(i.sid)),await j(i),await kr(D(i.sid),"")}async function go(i){try{let o=await o0(gr(i),"utf-8");return JSON.parse(o)}catch{return null}}async function j(i){let o=vi(i.sid);await pn(o);let n=Fi(o,"meta.json.tmp"),d={};for(let[u,e]of Object.entries(i)){if(u.startsWith("_"))continue;d[u]=e}await Vd(n,JSON.stringify(d,null,2),"utf-8"),await Fd(n,gr(i.sid))}async function fi(i,o){await kr(D(i),JSON.stringify(o)+`
303
- `,"utf-8")}async function n0(){await pn(Hd);let i=await sr(Hd,{withFileTypes:!0}),o=[];for(let n of i){if(!n.isDirectory())continue;let d=await go(n.name);if(d)o.push(d)}return o.sort((n,d)=>d.lastActiveAt-n.lastActiveAt),o}async function d0(i,o){let n;try{n=await o0(D(i),"utf-8")}catch{return[]}let u=n.split(`
304
- `).filter(Boolean).slice(-o),e=[];for(let r of u)try{e.push(JSON.parse(r))}catch{}return e}async function Td(i){try{await $l(vi(i),{recursive:!0,force:!0})}catch{}}async function Mr(i,o){await pn(cn(i));let n=Zd(i,o.approvalId)+".tmp";await Vd(n,JSON.stringify(o,null,2),"utf-8"),await Fd(n,Zd(i,o.approvalId))}async function Ml(i,o){try{return JSON.parse(await o0(Zd(i,o),"utf-8"))}catch{return null}}async function u0(i,o,n){await pn(cn(i));let d=Kd(i,o)+".tmp";await Vd(d,JSON.stringify(n,null,2),"utf-8"),await Fd(d,Kd(i,o))}async function an(i,o){try{return JSON.parse(await o0(Kd(i,o),"utf-8"))}catch{return null}}async function ln(i){try{let o=await sr(cn(i)),n=[];for(let d of o){if(!d.endsWith(".req.json"))continue;let u=d.slice(0,-9),e=await Ml(i,u);if(!e)continue;if(!await an(i,u))n.push(e)}return n.sort((d,u)=>d.requestedAt-u.requestedAt),n}catch{return[]}}var Hd;var Ti=N(()=>{Hd=Fi(kl(),".tako","agent-sessions")});import{spawn as Gl}from"child_process";async function e0(i,o,n){await fi(i,o),n?.onFrame?.(o)}function Sl(i,o){let n=[],d=gi();if(i?.type==="assistant"&&i?.message?.content){for(let u of i.message.content)if(u?.type==="text"&&typeof u.text==="string")n.push({ts:d,kind:"text_delta",text:u.text,itemId:i.message.id});else if(u?.type==="tool_use")n.push({ts:d,kind:"tool_use",name:u.name??"?",input:u.input,itemId:u.id});else if(u?.type==="thinking"&&typeof u.thinking==="string")n.push({ts:d,kind:"reasoning_delta",text:u.thinking})}else if(i?.type==="user"&&i?.message?.content){for(let u of i.message.content)if(u?.type==="tool_result")n.push({ts:d,kind:"tool_result",itemId:u.tool_use_id,output:u.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 Sr(i,o){return i.__env=o,i}var gi=()=>Date.now(),mn,Gr;var Pr=N(()=>{Ti();_();so();mn=new Map,Gr={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 fi(o.sid,{ts:gi(),kind:"session_started",sid:o.sid,backend:"claude",model:o.model}),o},async send(i,o,n){let d=ii("claude-code");if(!d)throw Error("claude-code client \u672A\u6CE8\u518C");let u=await xo(d);if(!u)u=wo(d);let e=i.turnCount===0,r=["--print","--input-format","stream-json","--output-format","stream-json","--verbose"];if(e)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"?u:await pi(),p=d.runtime==="native"?r:[u,...r],a=Gl(c,p,{env:t,cwd:i.workdir,stdio:["pipe","pipe","pipe"]});mn.set(i.sid,{pid:a.pid,kill:(h)=>a.kill(h??"SIGINT")});let l={type:"user",message:{role:"user",content:[{type:"text",text:o}]}};a.stdin.write(JSON.stringify(l)+`
305
- `),a.stdin.end(),i.status="running",i.lastActiveAt=gi(),await j(i);let x="";a.stderr.on("data",(h)=>{x+=h.toString()});let w=`t${i.turnCount+1}`;await e0(i.sid,{ts:gi(),kind:"turn_started",turnId:w},n);let y="";a.stdout.on("data",async(h)=>{y+=h.toString();let f;while((f=y.indexOf(`
306
- `))>=0){let L=y.slice(0,f).trim();if(y=y.slice(f+1),!L)continue;try{let M=JSON.parse(L);for(let g of Sl(M,w))await e0(i.sid,g,n)}catch{}}});let v=await new Promise((h)=>{a.on("close",(f)=>h(f??0))});if(mn.delete(i.sid),v===0)i.turnCount++;if(i.lastActiveAt=gi(),i.status="idle",v!==0)await e0(i.sid,{ts:gi(),kind:"error",message:`claude exited ${v}${x?`: ${x.slice(0,500)}`:""}`},n);return await j(i),i},async cancel(i){let o=mn.get(i.sid);if(o)o.kill("SIGINT")},async close(i){let o=mn.get(i.sid);if(o)o.kill("SIGTERM");mn.delete(i.sid),await e0(i.sid,{ts:gi(),kind:"session_closed"}),i.status="closed",i.lastActiveAt=gi(),await j(i)},async isAlive(){return!0}}});import{join as qr,isAbsolute as Pl,resolve as _d}from"path";import{readFile as Cl,writeFile as Ql}from"fs/promises";import{homedir as ql}from"os";function Il(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 Cr(i,o){if(!i)return!1;let n=Pl(i)?_d(i):_d(o,i),d=_d(o);return n===d||n.startsWith(d+"/")}function Ir(i,o,n,d){if(o==="item/commandExecution/requestApproval"||o==="execCommandApproval"){let u=String(n?.command??""),e=Il(u);for(let r of i.exec_deny??[])try{if(new RegExp(r).test(e))return{kind:"auto_deny",reason:`policy deny: /${r}/`}}catch{}for(let r of i.exec_allow??[])try{if(new RegExp(r).test(e))return{kind:"auto_allow",reason:`policy allow: /${r}/`}}catch{}return{kind:"ask"}}if(o==="item/fileChange/requestApproval"||o==="applyPatchApproval"){let u=Ol(n);for(let r of u)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 u)if(!Cr(r,d))return{kind:"auto_deny",reason:`file outside workdir: ${r}`}}let e=u.length>0;for(let r of u){let t=!1;for(let c of i.file_allow??[])try{if(new RegExp(c).test(r)){t=!0;break}}catch{}if(!t){e=!1;break}}if(e)return{kind:"auto_allow",reason:"all paths matched file_allow"};if(!i.strict_workdir&&u.length>0&&u.every((r)=>Cr(r,d)))return{kind:"auto_allow",reason:"all paths inside workdir (non-strict)"};return{kind:"ask"}}return{kind:"ask"}}function Ol(i){let o=[],n=(d)=>{if(typeof d==="string"&&d.length>0&&d.length<1024)o.push(d)};if(n(i?.path),Array.isArray(i?.changes))for(let d of i.changes)n(d?.path),n(d?.target);if(Array.isArray(i?.files))for(let d of i.files)n(d?.path??d);if(typeof i?.patch==="string")for(let d of i.patch.split(`
307
- `)){let u=d.match(/^\+\+\+\s+b\/(.*)$/);if(u)o.push(u[1])}return Array.from(new Set(o))}function Dd(i){return qr(vi(i),"policy.json")}async function Ed(i){try{return JSON.parse(await Cl(i,"utf-8"))}catch{return null}}async function r0(i){let o=await Ed(Jl),n=await Ed(Dd(i));return Qr(Qr(Ud,o),n)}function Qr(i,o){if(!o)return i;return{exec_allow:[...i.exec_allow??[],...o.exec_allow??[]],exec_deny:[...i.exec_deny??[],...o.exec_deny??[]],file_allow:[...i.file_allow??[],...o.file_allow??[]],file_deny:[...i.file_deny??[],...o.file_deny??[]],strict_workdir:o.strict_workdir??i.strict_workdir}}async function t0(i){return await Ed(Dd(i))??{}}async function c0(i,o){await Ql(Dd(i),JSON.stringify(o,null,2),"utf-8")}async function Or(i,o){let n=await t0(i),d=n.exec_allow??[];if(!d.includes(o))d.push(o);n.exec_allow=d,await c0(i,n)}var Ud,Jl;var jd=N(()=>{Ti();Ud={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};Jl=qr(ql(),".tako","agent-policy.json")});import{spawn as Rl}from"child_process";import{writeFile as Bl,unlink as Yl}from"fs/promises";import{join as Jr}from"path";class Ar{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
- `))>=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,u)=>{this.pending.set(n,{resolve:d,reject:u}),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 Rr(i,o){let n=ii("codex");if(!n)throw Error("codex client \u672A\u6CE8\u518C");let d=await xo(n)??wo(n),u={...process.env,...o},e=n.runtime==="native"?d:await pi(),r=n.runtime==="native"?["app-server"]:[d,"app-server"],t=Rl(e,r,{env:u,cwd:i,stdio:["pipe","pipe","pipe"]});return t.stderr?.on("data",()=>{}),new Ar(t)}async function Br(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 iu(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 Al(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 Xl(i,o,n=300000,d=200){let u=Date.now();while(Date.now()-u<n){let e=await an(i,o);if(e)return{allow:e.decision==="allow",reason:e.reason,by:e.by};await new Promise((r)=>setTimeout(r,d))}return{allow:!1,reason:`timeout after ${Math.round(n/1000)}s`,by:"tako-timeout"}}function p0(i,o){return i.__env=o,i}function Hl(i,o){let n=[],d=ui();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 u=o?.item;if(!u)break;if(u.type==="commandExecution")n.push({ts:d,kind:"tool_use",name:"shell",input:{command:u.command},itemId:u.id});else if(u.type==="fileChange")n.push({ts:d,kind:"tool_use",name:"fileChange",input:u,itemId:u.id});else if(u.type==="mcpToolCall")n.push({ts:d,kind:"tool_use",name:u.serverName?`${u.serverName}.${u.toolName}`:u.toolName??"mcp",input:u.args,itemId:u.id});break}case"item/completed":{let u=o?.item;if(!u)break;if(u.type==="commandExecution"||u.type==="fileChange"||u.type==="mcpToolCall")n.push({ts:d,kind:"tool_result",itemId:u.id,output:u});break}case"error":case"warning":n.push({ts:d,kind:"error",message:o?.message??i,raw:o});break}return n}var ui=()=>Date.now(),Xr;var Hr=N(()=>{Ti();jd();_();so();Xr={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:ui(),lastActiveAt:ui(),providerId:i.providerId};return await fi(o.sid,{ts:ui(),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??{},u=i.__providerHint,e=await Rr(i.workdir,d),r=Jr(vi(i.sid),"turn.pid");if(e.pid())await Bl(r,String(e.pid()));let t=i.approvalMode??"yolo";e.onServerRequest((l,x,w)=>{if(t==="yolo"){e.replyError(x,-32603,`tako-agent yolo mode: ${l} declined`);return}let y=String(x),v=Al(l);(async()=>{let h=await r0(i.sid),f=Ir(h,l,w,i.workdir);if(f.kind==="auto_allow"){await fi(i.sid,{ts:ui(),kind:"tool_result",itemId:y,output:{approval:"auto_allowed",reason:f.reason}}),e.reply(x,iu(l,!0));return}if(f.kind==="auto_deny"){await fi(i.sid,{ts:ui(),kind:"error",message:`auto_deny: ${f.reason}`,raw:{method:l,params:w}}),e.reply(x,iu(l,!1));return}let L={approvalId:y,method:l,params:w,approvalType:v,requestedAt:ui()};await Mr(i.sid,L),await fi(i.sid,{ts:ui(),kind:"approval_required",approvalId:y,approvalType:v,params:w}),i.status="awaiting_approval",await j(i);let M=await Xl(i.sid,y);i.status="running",await j(i),e.reply(x,iu(l,M.allow))})().catch((h)=>{e.replyError(x,-32603,`approval bridge error: ${h?.message??h}`)})});let c=Promise.resolve();e.onNotification((l,x)=>{let w=Hl(l,x);if(!w.length)return;c=c.then(async()=>{for(let y of w)await fi(i.sid,y),n?.onFrame?.(y)})}),i.status="running",i.lastActiveAt=ui(),await j(i);let p=new Promise((l)=>{e.onNotification((x)=>{if(x==="turn/completed"||x==="turn/failed")l()})}),a=!1;try{if(await Br(e),!i.codexThreadId){let l=await e.request("thread/start",Yr({workdir:i.workdir,model:i.model,providerHint:u,approvalMode:t}));if(i.codexThreadId=l?.threadId??l?.id??l?.thread?.id,!i.codexThreadId)throw Error("thread/start \u65E0 threadId")}else await e.request("thread/resume",Yr({workdir:i.workdir,model:i.model,providerHint:u,approvalMode:t},{threadId:i.codexThreadId}));await e.request("turn/start",{threadId:i.codexThreadId,input:[{type:"text",text:o,text_elements:[]}]}),await Promise.race([p,new Promise((l,x)=>setTimeout(()=>x(Error("turn timeout 10min")),600000))]),await c,a=!0}catch(l){await fi(i.sid,{ts:ui(),kind:"error",message:l instanceof Error?l.message:String(l)})}if(e.close(),await Yl(r).catch(()=>{}),a)i.turnCount++;return i.lastActiveAt=ui(),i.status="idle",await j(i),i},async cancel(i){let o=Jr(vi(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 Rr(i.workdir,o);await Br(n).catch(()=>{}),await n.request("thread/archive",{threadId:i.codexThreadId}).catch(()=>{}),n.close()}catch{}await fi(i.sid,{ts:ui(),kind:"session_closed"}),i.status="closed",i.lastActiveAt=ui(),await j(i)},async isAlive(i){return i.status!=="closed"}}});import{randomUUID as Zl}from"crypto";async function xn(i){let o=$o[i.backend],n=ou[i.backend],d=ii(n);if(!d)throw Error(`client ${n} \u672A\u6CE8\u518C`);let u=await Zr(i.backend,i.providerId,i.model);if(!u)throw Error(`\u6CA1\u627E\u5230 ${i.backend} \u53EF\u7528\u7684 provider${i.model?`\uFF08\u542B\u6A21\u578B ${i.model}\uFF09`:""}`);let e=E(u);if(i.model)e.model=i.model;let r=d.getEnvVars(e),t=Zl(),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:u.id};await $r(c);let p=await o.start({sid:t,name:c.name,model:i.model,workdir:c.workdir,approvalMode:i.approvalMode??"yolo",env:r,providerId:u.id,providerHint:{type:u.type,apiKey:u.apiKey,baseUrl:u.baseUrl}});return await j(p),p}async function wn(i,o,n){let d=await go(i);if(!d)throw Error(`session ${i} \u4E0D\u5B58\u5728`);if(d.status==="closed")throw Error(`session ${i} \u5DF2\u5173\u95ED`);let u=$o[d.backend],e=await nu(d);if(d.backend==="claude")Sr(d,e);else if(d.backend==="codex")p0(d,e);return u.send(d,o,n)}async function yn(i){let o=await go(i);if(!o)return;if(o.backend==="codex")p0(o,await nu(o));await $o[o.backend].cancel(o)}async function Mo(i,o=!1){let n=await go(i);if(!n)return;if(n.backend==="codex")p0(n,await nu(n));if(await $o[n.backend].close(n),o)await Td(i)}async function a0(){return n0()}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 l0(i={}){return Kl(await n0(),i)}async function m0(i,o=50){let n=await go(i);if(!n)return null;let d=await d0(i,o),u=await $o[n.backend].isAlive(n);return{meta:n,log:d,alive:u}}async function x0(){let i=await n0(),o=0;for(let n of i){if(n.status==="closed"){await Td(n.sid),o++;continue}if(n.backend==="codex"){if(!await $o.codex.isAlive(n))n.status="dead",await j(n)}}return o}async function Zr(i,o,n){let d=await s(),u=await V(),e=ou[i];if(o){let a=u.find((l)=>l.id===o);if(a)return a}let t=d.agentDefaults?.[i];if(t){let a=u.find((l)=>l.id===t);if(a)return a}let c=await Qi(e);if(n){let a=ii(e);if(a){for(let l of c)if(gn(a,l).some((w)=>w.id===`model-${n}`))return l}}let p=d.clientProviderMap?.[e];if(p){let a=u.find((l)=>l.id===p);if(a)return a}return c[0]}async function nu(i){let o=ou[i.backend],n=ii(o);if(!n)return{};let d=await V(),u=i.providerId?d.find((r)=>r.id===i.providerId):void 0;if(!u)u=await Zr(i.backend,void 0,i.model);if(!u)return{};let e=E(u);if(i.model)e.model=i.model;return i.__providerHint={type:u.type,apiKey:u.apiKey,baseUrl:u.baseUrl},n.getEnvVars(e)}async function Kr(i,o){let{saveConfig:n}=await Promise.resolve().then(() => (C(),sn)),d=await s(),u=d.agentDefaults??{};u[i]=o,d.agentDefaults=u,await n(d)}async function w0(){return(await s()).agentDefaults??{}}var $o,ou;var y0=N(()=>{Pr();Hr();Ti();C();ti();_();$o={claude:Gr,codex:Xr},ou={claude:"claude-code",codex:"codex"}});function Go(i,o="human",n={}){if(o==="json"){process.stdout.write(JSON.stringify(du(i))+`
310
- `);return}if(o==="verbose"){Fl(i,new Date(i.ts).toISOString().slice(11,23),{expandError:!0,...n});return}Vl(i,n)}function Vr(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
- `).map((n)=>` \u2502 ${n}`).join(`
312
- `)}function Vl(i,o){switch(i.kind){case"text_delta":process.stdout.write(i.text);break;case"tool_use":{let n=Fr(i.input)??Ji(JSON.stringify(i.input),240);console.log(`
313
- $ ${n}`);break}case"tool_result":{let n=Tr(i.output);if(So(i.output)){console.log(` \u2717 FAILED${n?` ${n}`:""}`);let u=Tl(i.output);if(u)console.log(u.split(`
314
- `).map((e)=>` \u2502 ${e}`).join(`
315
- `))}else if(n)console.log(` ${n}`);break}case"approval_required":console.log(`
316
- \u26A0 APPROVAL [${i.approvalType}] id=${i.approvalId}`),console.log(` ${vn(i.approvalType,i.params)}`);break;case"turn_completed":console.log(`
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(Vr(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 Fl(i,o,n){switch(i.kind){case"session_started":console.log(`[${o}] \u25B6 session_started ${i.backend}${i.model?` model=${i.model}`:""}`);break;case"turn_started":console.log(`[${o}] \u25B6 turn_started ${i.turnId}`);break;case"text_delta":process.stdout.write(i.text);break;case"reasoning_delta":console.log(`
319
- [${o}] \uD83D\uDCAD ${Ji(i.text,240)}`);break;case"tool_use":console.log(`
320
- [${o}] \uD83D\uDD27 ${i.name} ${Ji(JSON.stringify(i.input),240)}`);break;case"tool_result":{let d=So(i.output);console.log(`[${o}] ${d?"\u2717":"\u2713"} ${Ji(JSON.stringify(i.output),240)}`);break}case"approval_required":console.log(`[${o}] \u26A0 approval_required (${i.approvalType}) id=${i.approvalId}`);break;case"turn_completed":console.log(`
321
- [${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(Vr(i.raw));break}case"session_closed":console.log(`[${o}] \u23F9 session_closed`);break}}function du(i){let o={kind:i.kind,ts:i.ts};switch(i.kind){case"session_started":if(o.backend=i.backend,i.model)o.model=i.model;return o.sid=i.sid,o;case"turn_started":return o;case"text_delta":return o.text=i.text,o;case"reasoning_delta":return o.text=i.text,o;case"tool_use":{o.tool=i.name;let n=Fr(i.input);return o.input=n?{command:n}:i.input,o}case"tool_result":return o.summary=Tr(i.output)??"",o;case"approval_required":return o.approvalId=i.approvalId,o.approvalType=i.approvalType,o.detail=vn(i.approvalType,i.params),o;case"turn_completed":if(i.stopReason&&i.stopReason!=="end_turn")o.stopReason=i.stopReason;return o;case"error":return o.message=i.message,o;case"session_closed":return o}}function Fr(i){if(!i||typeof i!=="object")return null;let o=i.command??i.cmd;if(typeof o!=="string")return null;let n=o.match(/^(?:\S*sh|\S*bash|\S*zsh)(?:\s+-\w+)*\s+["'](.*)["']\s*$/s);return n?n[1]:o}function Tr(i){if(!i)return null;if(typeof i==="string")return Ji(i,160);if(typeof i!=="object")return String(i);if(i.approval){let d=i.approval,u=i.reason?`: ${i.reason}`:"";return`[${d}]${u}`}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())??"":"",u=d.length<=120?d:d.slice(0,120)+"\u2026",e=typeof n==="number"?` (exit ${n})`:"";return`${u}${e}`}return Ji(JSON.stringify(i),160)}function So(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 Tl(i){if(!i||typeof i!=="object")return null;let o=i.stderr??i.error_output;if(typeof o==="string"&&o.trim())return o.trimEnd();let n=i.error;if(typeof n==="string"&&n.trim())return n.trimEnd();return null}function _r(i){return i.some((o)=>o.kind==="error"||o.kind==="tool_result"&&So(o.output))}function vn(i,o){if(i==="exec"){let n=String(o?.command??""),d=n.match(/^(?:\S*sh|\S*bash|\S*zsh)(?:\s+-\w+)*\s+["'](.*)["']\s*$/s);return`command=${Ji(d?d[1]:n,200)}`}if(i==="patch"){let n=[];if(Array.isArray(o?.changes)){for(let d of o.changes)if(d?.path)n.push(d.path)}if(o?.path)n.push(o.path);return n.length?`paths=${n.slice(0,5).join(", ")}`:Ji(JSON.stringify(o),200)}return Ji(JSON.stringify(o),200)}function Ji(i,o){if(i.length<=o)return i;return i.slice(0,o)+`\u2026(+${i.length-o})`}var jr={};mi(jr,{runAgentCommand:()=>El});import{existsSync as uu}from"fs";import{stat as v0}from"fs/promises";import{createReadStream as _l}from"fs";function hi(i){let o=[],n={};for(let d=0;d<i.length;d++){let u=i[d];if(u.startsWith("--")){let e=u.indexOf("=");if(e>0)n[u.slice(2,e)]=u.slice(e+1);else{let r=i[d+1];if(r!==void 0&&!r.startsWith("--"))n[u.slice(2)]=r,d++;else n[u.slice(2)]=!0}}else o.push(u)}return{positional:o,flags:n}}function Er(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 eu(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 El(i){let o=i[0],n=i.slice(1);if(!o||o==="help"||o==="-h"||o==="--help"){Ur();return}switch(o){case"start":return Ul(n);case"run":return Dl(n);case"list":case"ls":return jl(n);case"send":return im(n);case"cancel":return om(n);case"close":return nm(n);case"show":return dm(n);case"logs":case"log":return um(n);case"attach":return em(n);case"purge":return rm();case"default":return lm(n);case"defaults":return mm();case"approve":return tm(n);case"pending":return cm(n);case"policy":return pm(n);case"wait":return am(n);default:console.error(`\u672A\u77E5\u5B50\u547D\u4EE4: ${o}`),Ur(),process.exit(1)}}function Ur(){console.log(`
324
- tako agent <\u5B50\u547D\u4EE4> [...]
325
-
326
- start <claude|codex> [--model X] [--name N] [--cwd .] [--provider id] [--approval yolo|external] [--json]
327
- run <claude|codex> --prompt "..." [--model X] [--name N] [--cwd .] [--provider id] [--json] [--purge] [--approval]
328
- \u4E00\u6B21\u6027\u4EFB\u52A1\uFF1Astart+send+(\u53EF\u9009)\u56DE\u6536\uFF1B\u9ED8\u8BA4\u4FDD\u7559 session\uFF0C--purge \u624D\u5220
329
- list [\u7B5B\u9009] [--json] \u5217\u51FA session\uFF08\u9ED8\u8BA4\u9690\u85CF closed\uFF09
330
- send [--json|--verbose] <sid> <prompt>
331
- cancel <sid> | cancel [\u7B5B\u9009] \u4E2D\u6B62 turn\uFF08\u5E26\u7B5B\u9009\u5219\u6279\u91CF\uFF09
332
- close <sid> [--purge] | close [\u7B5B\u9009] [--purge] [--yes] \u5173\u95ED session\uFF08\u5E26\u7B5B\u9009\u5219\u6279\u91CF\uFF09
333
- show <sid> [--lines N] [--json] [--errors-only] \u67E5\u770B\u8BE6\u60C5+\u65E5\u5FD7\uFF08--errors-only \u53EA\u770B\u9519\u8BEF\u5E76\u5C55\u5F00\u8BE6\u60C5\uFF09
334
- logs <sid> [--errors] [--json] dump \u5B8C\u6574\u65E5\u5FD7\uFF08\u4E0D\u622A\u65AD\uFF09\uFF0C--errors \u53EA\u770B\u9519\u8BEF\u5E27
335
- attach <sid> [--json|--verbose] \u5B9E\u65F6\u8DDF\u968F\u65E5\u5FD7\u6D41
336
- purge \u6E05\u7406 closed/dead session
337
-
338
- \u7B5B\u9009 flag\uFF08\u7528\u4E8E list / \u6279\u91CF close|cancel\uFF09\uFF1A
339
- --status idle,running --name-prefix fg- --backend claude --model X
340
- --turns 0 --all\uFF08\u542B closed\uFF09 --yes\uFF08\u6279\u91CF\u514D\u786E\u8BA4\uFF09
341
-
342
- pending <sid> [--json] \u5217\u5F85\u5BA1\u6279\u8BF7\u6C42
343
- wait <sid> [--json] [--timeout N] \u963B\u585E\u5230\u4E0B\u4E00\u51B3\u7B56\u70B9
344
- approve <sid> <id> <allow|deny> \u56DE\u590D\u5BA1\u6279
345
-
346
- policy <sid> show \u663E\u793A\u751F\u6548\u7B56\u7565
347
- policy <sid> allow-exec <regex> \u52A0\u767D\u540D\u5355
348
- policy <sid> deny-exec <regex> \u52A0\u9ED1\u540D\u5355
349
- policy <sid> reset \u6E05\u7A7A session \u7B56\u7565
350
-
351
- default <backend> <providerId> \u8BBE\u9ED8\u8BA4 provider
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 a0()).filter((d)=>d.sid.startsWith(i));if(n.length===0)return i;if(n.length>1)console.error(`sid \u524D\u7F00 "${i}" \u5339\u914D\u591A\u4E2A`),process.exit(1);return n[0].sid}async function Ul(i){let{positional:o,flags:n}=hi(i),d=o[0];if(d!=="claude"&&d!=="codex")console.error("\u7528\u6CD5: tako agent start <claude|codex>"),process.exit(1);let u;if(typeof n.approval==="string"){if(n.approval!=="yolo"&&n.approval!=="external")console.error("--approval \u4EC5\u652F\u6301 yolo|external"),process.exit(1);u=n.approval}let e=await xn({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:u});if(n.json){process.stdout.write(JSON.stringify({sid:e.sid,name:e.name,backend:e.backend,model:e.model??null,workdir:e.workdir,approvalMode:e.approvalMode??"yolo"})+`
354
- `);return}if(console.log(`\u2713 ${e.backend} session \u5DF2\u521B\u5EFA`),console.log(` sid: ${e.sid}`),console.log(` name: ${e.name}`),e.model)console.log(` model: ${e.model}`);console.log(` workdir: ${e.workdir}`),console.log(` approval: ${e.approvalMode??"yolo"}`),console.log(`
355
- \u540E\u7EED\uFF1Atako agent send ${e.sid} "\u4F60\u7684 prompt"`)}async function Dl(i){let{positional:o,flags:n}=hi(i),d=o[0];if(d!=="claude"&&d!=="codex")console.error('\u7528\u6CD5: tako agent run <claude|codex> --prompt "..."'),process.exit(1);let u=typeof n.prompt==="string"?n.prompt:o.slice(1).join(" ");if(!u)console.error("\u7F3A\u5C11 --prompt"),process.exit(1);let e=!!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="",p,a=[];try{let x=await xn({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,!e)console.log(`\u2192 run ${c.slice(0,8)} (${x.backend}${x.model?` ${x.model}`:""})`);await wn(c,u,{onFrame:(w)=>{if(w.kind==="text_delta")a.push(w.text);else if(w.kind==="error")p=w.message;if(!e)Go(w,"human")}})}catch(x){p=x instanceof Error?x.message:String(x)}let l=p?"error":"ok";if(r&&c)try{await Mo(c,!0)}catch{}if(e)process.stdout.write(JSON.stringify({sid:c,status:l,text:a.join(""),error:p??null,purged:r})+`
356
- `);else{if(p)console.error(`\u2717 run \u5931\u8D25: ${p}`);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(p)process.exit(1)}async function jl(i){let{flags:o}=hi(i),{filter:n}=eu(o),d=await l0(n);if(o.json){process.stdout.write(JSON.stringify(d)+`
358
- `);return}let u=d.filter((l)=>l.status==="running").length;if(d.length===0){console.log("(\u65E0\u5339\u914D session)");return}let e=await Promise.all(d.map(async(l)=>_r(await d0(l.sid,60)))),r=0,t=d.map((l,x)=>{let w=e[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:Er(Date.now()-l.createdAt),last:Er(Date.now()-l.lastActiveAt)}}),c=["sid","backend","name","model","status","turns","age","last"],p=c.map((l,x)=>Math.max(l.length,...t.map((w)=>w[l].length))),a=(l)=>l.map((x,w)=>x.padEnd(p[w])).join(" ");console.log(a(c)),console.log(a(p.map((l)=>"\u2500".repeat(l))));for(let l of t)console.log(a(c.map((x)=>l[x])));console.log(`
359
- \u5171 ${d.length} \u4E2A\u5339\u914D${u>0?`\uFF0C${u} \u4E2A running`:""}${r>0?`\uFF0C${r} \u4E2A\u6709\u9519\u8BEF(\u26A0\uFF0Clogs <sid> --errors \u67E5\u770B)`:""}\uFF08\u9ED8\u8BA4\u9690\u85CF closed\uFF0C--all \u663E\u793A\u5168\u90E8\uFF09`)}async function im(i){let o=new Set,n=[...i];while(n[0]&&n[0].startsWith("--"))o.add(n.shift());let d=n[0],u=n.slice(1).join(" ");if(!d||!u)console.error("\u7528\u6CD5: tako agent send [--json|--verbose] <sid> <prompt...>"),process.exit(1);let e=o.has("--json")?"json":o.has("--verbose")?"verbose":"human",r=await $i(d);if(e!=="json")console.log(`\u2192 ${r.slice(0,8)}`);await wn(r,u,{onFrame:(t)=>Go(t,e)})}async function om(i){let{positional:o,flags:n}=hi(i),{filter:d,hasFilter:u}=eu(n);if(u&&!o[0]){let r=await l0(d);if(!await Dr("cancel",r,!!n.yes,!!n.json))return;for(let t of r)try{await yn(t.sid)}catch{}if(!n.json)console.log(`\u2713 \u5DF2\u4E2D\u6B62 ${r.length} \u4E2A`);return}let e=await $i(o[0]);await yn(e),console.log(`\u2713 \u5DF2\u4E2D\u6B62 ${e.slice(0,8)}`)}async function nm(i){let{positional:o,flags:n}=hi(i),{filter:d,hasFilter:u}=eu(n);if(u&&!o[0]){let r=await l0(d);if(!await Dr(n.purge?"close+purge":"close",r,!!n.yes,!!n.json))return;for(let t of r)try{await Mo(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 e=await $i(o[0]);await Mo(e,!!n.purge),console.log(`\u2713 \u5DF2\u5173\u95ED ${e.slice(0,8)}${n.purge?"\uFF08\u5DF2\u5220\u9664\u76EE\u5F55\uFF09":""}`)}async function Dr(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 e=(await import("readline/promises")).createInterface({input:process.stdin,output:process.stdout});try{let r=await e.question("");return/^y(es)?$/i.test(r.trim())}finally{e.close()}}async function dm(i){let{positional:o,flags:n}=hi(i),d=await $i(o[0]),u=!!n["errors-only"]||!!n.errors,e=typeof n.lines==="string"?parseInt(n.lines,10):u?1e4:30,r=n.json?"json":"human",t=await m0(d,e);if(!t)console.error(`session ${d} \u4E0D\u5B58\u5728`),process.exit(1);let c=t.log;if(u)c=c.filter((a)=>a.kind==="error"||a.kind==="tool_result"&&So(a.output));if(r==="json"){process.stdout.write(JSON.stringify({meta:t.meta,alive:t.alive,log:c.map(du)},null,2)+`
360
- `);return}let p=t.meta;if(console.log(`# ${p.sid.slice(0,8)} ${p.backend}${p.model?` ${p.model}`:""}`),console.log(`name=${p.name} status=${p.status} turns=${p.turnCount} approval=${p.approvalMode??"yolo"} alive=${t.alive}`),console.log(`workdir=${p.workdir}`),console.log(`
361
- --- ${u?"errors":"log"} (${c.length}) ---`),u&&c.length===0){console.log("(\u65E0\u9519\u8BEF\u5E27)");return}for(let a of c)Go(a,r,{expandError:u})}async function um(i){let{positional:o,flags:n}=hi(i),d=await $i(o[0]);if(!uu(D(d)))console.error(`session ${d} \u4E0D\u5B58\u5728`),process.exit(1);let u=!!n.errors,e=(await import("fs/promises")).readFile,t=(await e(D(d),"utf-8")).split(`
362
- `).filter(Boolean),c=!1;for(let p of t){let a;try{a=JSON.parse(p)}catch{continue}let l=a.kind==="error"||a.kind==="tool_result"&&So(a.output);if(l)c=!0;if(u&&!l)continue;if(n.json)process.stdout.write(p+`
363
- `);else Go(a,"verbose",{expandError:!0})}if(u&&!c&&!n.json)console.log("(\u65E0\u9519\u8BEF\u5E27)")}async function em(i){let{positional:o,flags:n}=hi(i),d=await $i(o[0]),u=n.json?"json":n.verbose?"verbose":"human";if(!uu(D(d)))console.error(`session ${d} \u4E0D\u5B58\u5728`),process.exit(1);let e=(await v0(D(d))).size;if(u!=="json")console.log(`(attached to ${d.slice(0,8)}; Ctrl-C \u9000\u51FA)`);let r=setInterval(async()=>{try{let t=(await v0(D(d))).size;if(t<=e)return;let c=_l(D(d),{start:e,end:t-1});e=t;let p="";c.on("data",(a)=>{p+=typeof a==="string"?a:a.toString("utf-8");let l;while((l=p.indexOf(`
364
- `))>=0){let x=p.slice(0,l);if(p=p.slice(l+1),!x.trim())continue;try{Go(JSON.parse(x),u)}catch{}}})}catch{}},200);await new Promise((t)=>{process.on("SIGINT",()=>{clearInterval(r),t()})})}async function rm(){let i=await x0();console.log(`\u2713 \u6E05\u7406\u4E86 ${i} \u4E2A closed/dead session`)}async function tm(i){let{positional:o,flags:n}=hi(i),d=await $i(o[0]),u=o[1],e=o[2];if(!u||e!=="allow"&&e!=="deny")console.error("\u7528\u6CD5: tako agent approve <sid> <approvalId> <allow|deny>"),process.exit(1);let r=await an(d,u);if(r)console.error(`approval ${u} \u5DF2\u6279\u4E3A ${r.decision}`),process.exit(1);if(await u0(d,u,{decision:e,reason:typeof n.reason==="string"?n.reason:void 0,by:typeof n.by==="string"?n.by:"cli",decidedAt:Date.now()}),console.log(`\u2713 approval ${u} = ${e}`),typeof n.rule==="string"&&e==="allow")await Or(d,n.rule),console.log(`\u2713 policy: exec_allow += /${n.rule}/`)}async function cm(i){let{positional:o,flags:n}=hi(i),d=await $i(o[0]),u=await ln(d);if(n.json){process.stdout.write(JSON.stringify(u.map((e)=>({approvalId:e.approvalId,type:e.approvalType,detail:vn(e.approvalType,e.params)})),null,2)+`
365
- `);return}if(u.length===0){console.log("(\u65E0 pending)");return}for(let e of u)console.log(`[${e.approvalType}] id=${e.approvalId} ${vn(e.approvalType,e.params)}`)}async function pm(i){if(i[0]==="default-show"){console.log(JSON.stringify(Ud,null,2));return}let o=await $i(i[0]),n=i[1];if(!n||n==="show"){let u=await r0(o),e=await t0(o);console.log("=== effective policy ==="),console.log(JSON.stringify(u,null,2)),console.log(`
366
- === session override ===`),console.log(Object.keys(e).length===0?"(\u7A7A)":JSON.stringify(e,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 u=await t0(o),e=n==="allow-exec"?"exec_allow":"exec_deny",r=u[e]??[];if(!r.includes(d))r.push(d);u[e]=r,await c0(o,u),console.log(`\u2713 ${e} += /${d}/`);return}if(n==="reset"){await c0(o,{}),console.log("\u2713 \u7B56\u7565\u5DF2\u6E05\u7A7A");return}console.error(`\u672A\u77E5 policy \u5B50\u547D\u4EE4: ${n}`),process.exit(1)}async function am(i){let{positional:o,flags:n}=hi(i),d=await $i(o[0]),u=!!n.json,e=typeof n.timeout==="string"?Number(n.timeout)*1000:600000,r=typeof n.since==="string"?Number(n.since):0;if(!uu(D(d))){if(u)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 v0(D(d))).size,c=Date.now(),p=[];while(Date.now()-c<e){try{let a=(await v0(D(d))).size;if(a>t){let x=await(await import("fs/promises")).open(D(d),"r"),w=Buffer.alloc(a-t);await x.read(w,0,w.length,t),await x.close(),t=a;for(let y of w.toString("utf-8").split(`
368
- `)){if(!y.trim())continue;let v;try{v=JSON.parse(y)}catch{continue}if(r>0&&v.ts<r)continue;if(v.kind==="text_delta"){p.push(v.text);continue}if(v.kind==="approval_required"){let h=await ln(d);if(u)process.stdout.write(JSON.stringify({event:"approval_required",pending:h.map((f)=>({approvalId:f.approvalId,type:f.approvalType}))})+`
369
- `);else console.log(`event=approval_required pending=${h.length}`);process.exit(0)}if(v.kind==="turn_completed"){if(u)process.stdout.write(JSON.stringify({event:"turn_completed",text:p.join("")})+`
370
- `);else if(console.log("event=turn_completed"),p.join("").trim())console.log(p.join("").trim());process.exit(2)}if(v.kind==="error"){if(u)process.stdout.write(JSON.stringify({event:"error",message:v.message})+`
371
- `);else console.error(`event=error ${v.message}`);process.exit(1)}if(v.kind==="session_closed"){if(u)process.stdout.write(JSON.stringify({event:"session_closed"})+`
372
- `);else console.log("event=session_closed");process.exit(3)}}}}catch{}await new Promise((a)=>setTimeout(a,200))}if(u)process.stdout.write(JSON.stringify({event:"timeout"})+`
373
- `);else console.error("event=timeout");process.exit(1)}async function lm(i){let o=i[0],n=i[1];if(o!=="claude"&&o!=="codex"||!n)console.error("\u7528\u6CD5: tako agent default <claude|codex> <providerId>"),process.exit(1);await Kr(o,n),console.log(`\u2713 ${o} \u9ED8\u8BA4 provider = ${n}`)}async function mm(){let i=await w0();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 it=N(()=>{Ti();y0();jd()});var ru;var tu=N(()=>{ru={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
- name: model-benchmark
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
- allowed-tools: Read, Bash(bun:*)
377
- ---
378
-
379
- # Tako Model Benchmark \u7ED3\u679C (2026-06-10)
380
-
381
- \u901A\u8FC7 Tako Provider API \u8BC4\u6D4B 16 \u4E2A\u6A21\u578B\u5728 7 \u4E2A\u7F16\u7801\u4EFB\u52A1\u4E0A\u7684\u8868\u73B0\u3002
382
-
383
- ## \u8BC4\u6D4B\u7ED3\u679C
384
-
385
- | Model | Fib | Bug Fix | Explain | Refactor | Types | Observer | Constraints | Score |
386
- |-------|-----|---------|---------|----------|-------|----------|-------------|-------|
387
- | mimo-v2.5-pro | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | **7/7** |
388
- | claude-sonnet-4-6 | \u2713 | \u2713 | \u25D0 | \u2713 | \u2713 | \u2713 | \u2713 | **6.5/7** |
389
- | minimax-m2.5 | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | \u25D0 | \u2713 | **6.5/7** |
390
- | deepseek-v4-flash | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | \u2717 | \u2713 | 6/7 |
391
- | gpt-5.4 | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | \u2717 | \u2713 | 6/7 |
392
- | gpt-5.5 | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | \u2717 | \u2713 | 6/7 |
393
- | claude-opus-4-6 | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | \u2717 | \u2713 | 6/7 |
394
- | claude-opus-4-8 | \u2713 | \u2713 | \u25D0 | \u2713 | \u2713 | \u2717 | \u2713 | 5.5/7 |
395
- | deepseek-v4-pro | \u2713 | \u2713 | \u2713 | \u2713 | \u25D0 | \u2717 | \u2713 | 5.5/7 |
396
- | mimo-v2.5 | \u2713 | \u2713 | \u2713 | \u2713 | \u25D0 | \u2717 | \u2713 | 5.5/7 |
397
- | glm-5 | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | \u2717 | \u26A0 | 5/7 |
398
- | claude-opus-4-7 | \u25D0 | \u2713 | \u25D0 | \u2713 | \u2713 | \u2717 | \u2713 | 5/7 |
399
- | minimax-m3 | \u2713 | \u2713 | \u2713 | \u26A0 | \u26A0 | \u2717 | \u2713 | 4/7* |
400
- | deepseek-3.2 | \u26A0 | \u2713 | \u26A0 | \u2713 | \u26A0 | \u2717 | \u2713 | 3/7* |
401
- | glm-5.1 | \u2713 | \u2713 | \u26A0 | \u26A0 | \u26A0 | \u26A0 | \u2713 | 3/7* |
402
- | qwen3.7-max | \u26A0 | \u26A0 | \u26A0 | \u26A0 | \u26A0 | \u26A0 | \u26A0 | 0/7* |
403
-
404
- *\u26A0 = API \u4E0D\u53EF\u7528\uFF08502/504\uFF09\uFF0C\u975E\u6A21\u578B\u80FD\u529B\u95EE\u9898
405
-
406
- ## \u63A8\u8350
407
-
408
- | \u573A\u666F | \u6A21\u578B | \u7406\u7531 |
409
- |------|------|------|
410
- | \u6700\u5F3A\u7F16\u7801\u80FD\u529B | mimo-v2.5-pro | \u552F\u4E00 7/7 \u5168\u901A\u8FC7 |
411
- | \u6027\u4EF7\u6BD4\u4E4B\u9009 | minimax-m2.5 | \u54CD\u5E94\u5FEB\uFF083-10s\uFF09+ \u9AD8\u901A\u8FC7\u7387 |
412
- | \u901A\u7528\u6700\u4F73 | claude-sonnet-4-6 | 6.5/7 + \u590D\u6742\u4EFB\u52A1\u8868\u73B0\u597D |
413
- | \u5FEB\u901F\u7B80\u5355\u4EFB\u52A1 | deepseek-v4-flash | \u54CD\u5E94\u6700\u5FEB\uFF082-8s\uFF09\u3001\u7B80\u5355\u4EFB\u52A1\u5168\u5BF9 |
414
-
415
- ## \u6D4B\u8BD5\u4EFB\u52A1\u8BF4\u660E
416
-
417
- | ID | \u96BE\u5EA6 | \u4EFB\u52A1 |
418
- |----|------|------|
419
- | TP-AGENT-01 | Easy | \u5199 fibonacci \u51FD\u6570 (Python) |
420
- | TP-AGENT-02 | Easy | \u4FEE\u590D off-by-one bug |
421
- | TP-AGENT-03 | Easy | \u89E3\u91CA debounce \u4EE3\u7801 |
422
- | TP-AGENT-04 | Medium | \u51FD\u6570\u62C6\u5206\u91CD\u6784 |
423
- | TP-AGENT-05 | Medium | TypeScript \u6CDB\u578B\u7C7B\u578B\u8865\u5145 |
424
- | TP-AGENT-06 | Hard | \u5B9E\u73B0 EventEmitter (\u89C2\u5BDF\u8005\u6A21\u5F0F + \u6CDB\u578B) |
425
- | TP-AGENT-07 | Hard | \u591A\u7EA6\u675F\u4EE3\u7801\u751F\u6210 |
426
-
427
- ## \u91CD\u8DD1 Benchmark
428
-
429
- ${"```"}bash
430
- cd packages/cli && bun run scripts/benchmark-models.ts
431
- ${"```"}
432
- `}});var cu;var pu=N(()=>{cu={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
- name: tako-agent
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
- allowed-tools: Bash(tako:*)
436
- ---
437
-
438
- # tako-agent \u2014 \u957F\u65F6 agent session \u7BA1\u7406
439
-
440
- ${"```"}bash
441
- tako agent <subcmd> [...]
442
- ${"```"}
443
-
444
- ## \u5FEB\u901F\u901F\u67E5
445
-
446
- ${"```"}bash
447
- tako agent start <claude|codex> [--model X] [--name N] [--cwd .] [--approval yolo|external]
448
- tako agent list # \u5217\u51FA\u6240\u6709 session
449
- tako agent send <sid> "prompt..." # \u963B\u585E\u53D1\u9001\u4E00\u8F6E
450
- tako agent show <sid> [--lines N] # \u67E5\u770B meta + \u6700\u8FD1\u65E5\u5FD7
451
- tako agent attach <sid> # \u5B9E\u65F6 tail \u65E5\u5FD7\u6D41
452
- tako agent cancel <sid> # \u4E2D\u6B62\u5F53\u524D turn
453
- tako agent close <sid> [--purge] # \u5173\u95ED session
454
- tako agent purge # \u6E05\u7406 closed/dead
455
-
456
- # \u5916\u7F6E\u5BA1\u6279\uFF08codex\uFF09
457
- tako agent pending <sid> # \u5217\u5F85\u5BA1\u6279
458
- tako agent approve <sid> <id> <allow|deny> [--reason "..."] [--rule "<regex>"]
459
- tako agent wait <sid> [--json] # \u963B\u585E\u5230\u4E0B\u4E00\u51B3\u7B56\u70B9\uFF08LLM \u53CB\u597D\uFF09
460
-
461
- # \u7B56\u7565
462
- tako agent policy <sid> show
463
- tako agent policy <sid> allow-exec <regex>
464
- tako agent policy <sid> deny-exec <regex>
465
-
466
- tako agent default <claude|codex> <providerId>
467
- ${"```"}
468
-
469
- ## \u5178\u578B\u5DE5\u4F5C\u6D41
470
-
471
- ### \u6D3E agent \u53BB\u505A\u4EFB\u52A1
472
-
473
- ${"```"}bash
474
- SID=$(tako agent start codex --model gpt-5.5 --name research | grep sid: | awk '{print $2}')
475
- tako agent send "$SID" "\u626B\u63CF src/ \u6240\u6709 TODO\uFF0C\u6309\u6587\u4EF6\u5206\u7EC4\u5217\u51FA"
476
- tako agent show "$SID"
477
- ${"```"}
478
-
479
- ### \u591A turn \u7EED\u63A5
480
-
481
- ${"```"}bash
482
- SID=$(tako agent start claude --model claude-opus-4-7 --name review | grep sid: | awk '{print $2}')
483
- tako agent send "$SID" "review src/agent/manager.ts \u7684\u5E76\u53D1\u5B89\u5168"
484
- tako agent send "$SID" "\u7ED9\u4E00\u4E2A\u6700\u5C0F\u8865\u4E01" # \u5386\u53F2\u81EA\u52A8\u4FDD\u7559
485
- ${"```"}
486
-
487
- ### \u5E76\u53D1\u591A session
488
-
489
- ${"```"}bash
490
- A=$(tako agent start codex --name alpha | grep sid: | awk '{print $2}')
491
- B=$(tako agent start claude --name beta | grep sid: | awk '{print $2}')
492
- tako agent send "$A" "..." &
493
- tako agent send "$B" "..." &
494
- wait
495
- tako agent list
496
- ${"```"}
497
-
498
- ### \u5916\u90E8 LLM \u5F53\u95E8\u536B\uFF08wait \u6A21\u5F0F\uFF09
499
-
500
- ${"```"}bash
501
- SID=$(tako agent start codex --approval external --model gpt-5.5)
502
- tako agent send --bg "$SID" "\u628A README \u7FFB\u6210\u4E2D\u6587"
503
- # \u5FAA\u73AF wait \u2192 approve \u2192 wait
504
- EVENT=$(tako agent wait --json "$SID")
505
- # exit 0=approval_required, 2=turn_completed, 3=closed, 1=error
506
- ${"```"}
507
-
508
- ## \u6CE8\u610F\u4E8B\u9879
509
-
510
- - \`<sid>\` \u652F\u6301\u524D\u7F00\u5339\u914D
511
- - send \u662F\u963B\u585E\u7684\uFF0C\u7528 \`&\` \u6216\u53E6\u5F00 shell \u914D\u5408 attach
512
- - claude \u7528 \`--resume\` \u6301\u4E45\u5316\u5386\u53F2\uFF0Ccodex \u7528 \`thread/resume\`
513
- - \`--approval yolo\`\uFF08\u9ED8\u8BA4\uFF09\u4E0D\u5BA1\u6279\uFF1B\`--approval external\` \u542F\u7528\u5916\u7F6E\u5BA1\u6279
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 f0;var ot=N(()=>{tu();pu();tu();pu();f0=[ru,cu]});var nt={};mi(nt,{runSkillCommand:()=>ym});import{join as au}from"path";import{existsSync as xm,mkdirSync as wm}from"fs";async function ym(i){let o=i[0];if(!o||o==="list"){console.log(`
516
- Available skills:
517
- `);for(let n of f0)console.log(` ${n.name.padEnd(20)} ${n.description}`);console.log(`
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"?f0:f0.filter((e)=>e.name===n);if(d.length===0)console.error(`Skill "${n}" not found. Run "tako skill list" to see available skills.`),process.exit(1);let u=au(process.cwd(),".claude","skills");for(let e of d){let r=au(u,e.name),t=au(r,e.filename);if(xm(t)){console.log(` skip ${e.name} (already exists)`);continue}wm(r,{recursive:!0}),await Bun.write(t,e.content),console.log(` \u2713 installed ${e.name} \u2192 .claude/skills/${e.name}/${e.filename}`)}return}console.error(`Unknown subcommand: ${o}. Try "tako skill list" or "tako skill install <name>".`),process.exit(1)}var dt=N(()=>{ot()});var et={};mi(et,{runModelsCommand:()=>$m});function vm(i){let o={json:!1,refresh:!1},n=[...i];if(n[0]==="list")n.shift();for(let d of n)if(d==="--json")o.json=!0;else if(d==="--refresh")o.refresh=!0;else return o.invalid=d,o;return o}function fm(i){return(i.providers??[]).filter((n)=>n.type==="tako"&&!!n.baseUrl).sort((n,d)=>n.id.localeCompare(d.id))}function hm(i){return[...i].sort((o,n)=>o.id.localeCompare(n.id)||o.displayName.localeCompare(n.displayName))}function bm(i,o){let n=[],d=!1;for(let u of ut){let e=o(i.baseUrl,u);if(e===null){n.push({apiType:u,models:[]});continue}d=!0,n.push({apiType:u,models:hm(e)})}return{id:i.id,name:i.name,baseUrl:i.baseUrl,buckets:n,hasAnyCache:d}}async function Lm(i,o){let n=[];for(let d of i){if(!d.apiKey||!d.baseUrl)continue;for(let u of ut)n.push(o(d.baseUrl,d.apiKey,u).catch(()=>{}))}await Promise.allSettled(n)}function Nm(i){let o=new Set,n=[];for(let d of i)for(let u of d.models){if(o.has(u.id))continue;o.add(u.id),n.push(u.id)}return n.sort((d,u)=>d.localeCompare(u))}function zm(i){let o=[],n=[],d="";for(let u of i){let e=u.slice(0,3);if(e!==d){if(n.length)o.push(n);n=[u],d=e}else n.push(u)}if(n.length)o.push(n);return o}function sm(i,o){if(i.length===0)return[];let n=4,u=Math.max(...i.map((p)=>p.length))+2,e=Math.max(u,o-n),r=Math.max(1,Math.floor(e/u)),t=Math.min(r,Wm),c=[];for(let p=0;p<i.length;p+=t){let a=i.slice(p,p+t),l=a.map((x,w)=>w===a.length-1?x:x.padEnd(u)).join("");c.push(" ".repeat(n)+l)}return c}function km(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 u=Nm(d.buckets);n.push(` ${u.length} models`);for(let e of zm(u))n.push(...sm(e,o));n.push("")}return n.join(`
521
- `)}function gm(i,o,n){let d=i.map((e)=>({id:e.id,name:e.name,baseUrl:e.baseUrl,hasCache:e.hasAnyCache,models:e.buckets.flatMap((r)=>r.models.map((t)=>({apiType:r.apiType,id:t.id,displayName:t.displayName,description:t.description,contextWindow:t.contextWindow,sortOrder:t.sortOrder})))}));return`${JSON.stringify({command:"list",refreshed:o,fetchedAt:n,providers:d})}
522
- `}async function $m(i=[],o={}){let n=vm(i);if(n.invalid)return process.stderr.write(`Unknown argument: ${n.invalid}
523
- Usage: tako models [list] [--refresh] [--json]
524
- `),1;let d=o.loadConfig??s,u=o.refresh??qn,e=o.read??Xi,r=o.now??(()=>Date.now()),t=o.columns??(()=>process.stdout.columns??80),c=await d(),p=fm(c);if(n.refresh&&p.length>0)await Lm(p,u);let a=p.map((x)=>bm(x,e)),l=new Date(r()).toISOString();if(n.json)process.stdout.write(gm(a,n.refresh,l));else process.stdout.write(km(a,t()));return 0}var ut,Wm=5;var rt=N(()=>{C();T0();ut=["openai","claude"]});var mu="0.3.21",fn=22,m,Po,Co,pt,at,Qo,_i;var qo=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"},Po={"claude-code":{icon:"*",color:m.orange},codex:{icon:"C",color:m.blue},gemini:{icon:"G",color:m.green}},Co={icon:"-",color:m.text},pt=["\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588"," \u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588"," \u2588 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588"," \u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588"," \u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588"].join(`
525
- `),at=["\u2580\u2588\u2580 \u2584\u2580\u2588 \u2588\u2584\u2580 \u2588\u2580\u2588"," \u2588 \u2588\u2580\u2588 \u2588 \u2588 \u2588\u2584\u2588"].join(`
526
- `),Qo=["tako","claude-subscription","codex-subscription","anthropic","deepseek","xiaomi","custom"],_i=[{value:"en",label:"English"},{value:"zh",label:"\u4E2D\u6587"}]});async function lt(i=45){let o=qu(),n=await Ee(),d=await di(),u=Ci()==="zh",e=[...o].sort((c,p)=>{if(c.id===n)return-1;if(p.id===n)return 1;return 0}),r=[];for(let c of e){let p=await _e(c.id,Wd,!0),a=process.cwd(),l=[{label:u?"\u5728\u5F53\u524D\u76EE\u5F55\u542F\u52A8":"Launch in current directory",hint:zd(a,i),path:a},...p.map((g)=>({label:zd(g.path,i),hint:Ue(g.lastLaunchedAt),path:g.path}))],x=await Qi(c.id),y=await qi(c.id)||x.find((g)=>g.id===d?.id)||x[0],v=y?x.findIndex((g)=>g.id===y.id):0,h=gn(c,y),f=new Set(h.map((g)=>g.id)),M=(await Hn(c.id)).filter((g)=>f.has(g));r.push({client:c,projects:l,providers:x,activeProvider:y,activeProvIdx:Math.max(v,0),launchOptions:h,lastSelectedOptionIds:M})}let t={};try{t=await er()}catch{t={}}return{clients:r,defaultIdx:0,hasProviders:r.some((c)=>c.providers.length>0),pickCounts:t,zh:u}}var mt=N(()=>{ld();_();X();Md();Zn();ti()});function co(i,o){let n=[],d=new Set;for(let u of i){if(!u.group){n.push({kind:"flag",opt:u});continue}if(!d.has(u.group))d.add(u.group),n.push({kind:"group",group:u.group,title:u.group==="model"?o?"\u6A21\u578B":"Model":u.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 xu(i){let o=[],n={},d=[];for(let u of i.launchOptions){if(!i.enabled.has(u.id))continue;if(o.push(...u.args),u.envVars)Object.assign(n,u.envVars);d.push(u.id)}return{args:o,envVars:n,selectedOptionIds:d}}function xt(i,o,n){let d=new Set(o.map((p)=>p.id)),u=new Set(o.filter((p)=>p.group==="model").map((p)=>p.id)),e=n?`model-${n}`:void 0,r=new Set,t=!1,c=!1;for(let p of i)if(d.has(p)){if(r.add(p),u.has(p))c=!0}else t=!0;if(!c&&e&&u.has(e))r.add(e),t=!0;return t?r:i}async function wt(){let i=await yt(),o=Ci();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,_i.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 yt(){let i=await lt(48);return{clients:i.clients.map((n)=>({...n,enabled:xt(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 bi(i){let o=i.clients[i.clientIdx]?.client.id,n=await yt();i.clients=n.clients,i.zh=n.zh,i.pickCounts=n.pickCounts;let d=o?i.clients.findIndex((u)=>u.client.id===o):-1;i.clientIdx=d>=0?d:0,wu(i)}function wu(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 hn(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 po(i,o){if(i.screen="provider-input",i.providerInputMode=o,i.providerRowIdx=0,i.addKey="",o==="add-key")i.addUrl="",i.addModel=_o(i.addType)||"",i.addCtx=""}var L0=N(()=>{Si();X();mt();qo()});async function Lt(){try{let i=await ji();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(),u=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 e=(u.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:e}}}catch(i){return{success:!1,error:i instanceof Error?i.message:"\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25"}}}function Wt(i){return i.toLocaleString("en-US")}var hu=N(()=>{C()});var Ct={};mi(Ct,{syncSubscriptionProviderFromLocalAuth:()=>Mu,shouldShowKeyGuide:()=>w1,runSubscriptionAuthCommand:()=>$u,refreshQuota:()=>ku,refreshProviders:()=>Ri,refreshAgentDetail:()=>Bi,openStats:()=>Wn,openProviders:()=>ao,openClientVersions:()=>Gu,openAgents:()=>Li,openAgentDetail:()=>gu,loadClientVersions:()=>lo,installClientVersion:()=>Su,finishProviderAdd:()=>Nn,dismissKeyGuide:()=>s0,backToLauncher:()=>Yi});async function ku(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(() => (En(),Qd)),u=await d(o);if(i.quotaKey===n)i.quota=u}async function Ri(i){i.providers=await V(),i.defaultProviderId=(await di())?.id;let o={};for(let n of i.clients)o[n.client.id]=(await qi(n.client.id))?.id;i.clientBindings=o}async function ao(i){i.screen="providers",i.message="",i.providerTabIdx=i.clientIdx,i.providerRowIdx=0,await Ri(i)}async function Wn(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 Li(i){i.screen="agents",i.message="",i.agentError=void 0;let[o,n]=await Promise.all([a0(),w0()]);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([m0(o,200),ln(o)]);if(!n){i.agentError=i.zh?"Session \u4E0D\u5B58\u5728":"Session not found",i.screen="agents",await Li(i);return}i.agentDetailMeta=n.meta,i.agentDetailFrames=n.log,i.agentDetailAlive=n.alive,i.agentPendingApprovals=d}async function gu(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 Pt(i){try{if(process.stdin.isTTY)process.stdin.setRawMode(i)}catch{}}function x1(i){return i==="claude"?["claude","auth","login","--claudeai"]:["codex","login"]}async function $u(i){let o=x1(i);Pt(!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{Pt(!1)}}async function Mu(i,o){let{invalidateQuotaCache:n}=await Promise.resolve().then(() => (En(),Qd)),d=await V();if(i==="claude")try{let u=Bun.spawn(["claude","auth","status"],{stdout:"pipe",stderr:"pipe"}),e=await new Response(u.stdout).text();await u.exited;let r=JSON.parse(e.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",p=`Claude ${c.charAt(0).toUpperCase()+c.slice(1)}${t?` (${t})`:""}`,{readClaudeAuth:a}=await Promise.resolve().then(() => (Jn(),On)),l=await a(),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 Ki(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 uo({name:p,type:"claude-subscription",email:t,subscriptionType:c,supportedClients:ni("claude-subscription"),authData:x}),U(),H(),{ok:!0,message:o?"Claude \u8BA2\u9605\u5DF2\u6DFB\u52A0":"Claude subscription added"}}catch(u){return{ok:!1,message:u instanceof Error?u.message:String(u)}}else try{let u=await import("fs/promises"),{homedir:e}=await import("os"),{join:r}=await import("path"),t=JSON.parse(await u.readFile(r(e(),".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 p=d.find((a)=>a.type==="codex-subscription"&&(a.email||"")===c);if(p)return await Ki(p.id,{authData:t}),n(p.id,"codex-subscription"),U(),H(),{ok:!0,message:o?"Codex tokens \u5DF2\u66F4\u65B0":"Codex tokens updated"};else return await uo({name:c?`Codex Plus (${c})`:"Codex Subscription",type:"codex-subscription",email:c||void 0,supportedClients:ni("codex-subscription"),authData:t}),U(),H(),{ok:!0,message:o?"Codex \u8BA2\u9605\u5DF2\u6DFB\u52A0":"Codex subscription added"}}catch(u){return{ok:!1,message:u instanceof Error?u.message:String(u)}}}async function Nn(i){let o=oo[i.addType]?.[i.zh?"zh":"en"]||i.addType,n=i.addCtx?Number.parseInt(i.addCtx,10):NaN;await uo({name:o,type:i.addType,apiKey:i.addKey,baseUrl:i.addUrl||D0(i.addType),model:i.addModel||_o(i.addType),modelContextWindow:Number.isFinite(n)&&n>0?n:void 0,supportedClients:ni(i.addType)}),R("provider_added",{provider_type:i.addType,method:"manual"}),U(),H(),await Ri(i),await bi(i),i.screen="providers",i.providerRowIdx=0,i.message=i.zh?"\u5DF2\u6DFB\u52A0\u670D\u52A1\u5546":"Provider added"}async function Gu(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(() => (i0(),Ad)),[u,e]=await Promise.all([n(o.client.package),d(o.client)]);i.clientVersions=u.map((r)=>({...r,isCurrent:r.version===e}))}catch(n){i.clientVersionsError=n instanceof Error?n.message:String(n)}finally{i.clientVersionsLoading=!1}}async function Su(i,o){let n=i.clients[i.clientVersionsClientIdx];if(!n)return;let{installAtVersion:d}=await Promise.resolve().then(() => (i0(),Ad));await d(n.client,o),i.message=i.zh?`\u5DF2\u5207\u6362\u5230 ${o}`:`Switched to ${o}`,await lo(i)}async function s0(i){let{TAKO_DIR:o}=await Promise.resolve().then(() => (C(),sn)),{join:n}=await import("path"),d=n(o,".key-prompt.json"),u=i==="never"?{never:!0}:{dismissed:new Date().toISOString().slice(0,10)};await Bun.write(d,JSON.stringify(u))}async function w1(){let{TAKO_DIR:i,hasApiKey:o}=await Promise.resolve().then(() => (C(),sn));if(await o())return!1;let{join:n}=await import("path"),d=n(i,".key-prompt.json"),u={};try{u=await Bun.file(d).json()}catch{u={}}if(u.never)return!1;let e=new Date().toISOString().slice(0,10);if(u.dismissed===e)return!1;return!0}var Ao=N(()=>{ti();Si();wi();hu();y0();Ti();L0()});ld();Pi();jo();C();X();wi();An();import{join as yi}from"path";function Ie(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 Oe(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 wd="tako-cli",nn="0.3.21";function ea(){return[A,"update",wd,"--latest"]}function ra(){return[A,"add",`${wd}@latest`]}function ta(i,o){let n=i.split(".").map(Number),d=o.split(".").map(Number);for(let u=0;u<3;u++){let e=n[u]||0,r=d[u]||0;if(e>r)return 1;if(e<r)return-1}return 0}async function ca(){try{let i=await ci(),o=await fetch(`${i}/${wd}/latest`,{signal:AbortSignal.timeout(5000)});if(!o.ok)return null;return(await o.json()).version||null}catch{return null}}async function pa(){let i=await ca();if(!i)return{hasUpdate:!1,currentVersion:nn};return{hasUpdate:ta(i,nn)>0,latestVersion:i,currentVersion:nn}}async function Re(){let i=await import("fs/promises"),o=yi(q,"bin"),n=yi(o,"tako"),d=yi(xi,"node_modules/tako-cli/dist/index.js");if(await i.mkdir(o,{recursive:!0}),process.platform==="win32")await i.writeFile(yi(o,"tako.cmd"),Ie(A,d)),await i.writeFile(yi(o,"tako.ps1"),Oe(A,d));else{let e=`#!/bin/bash
529
- exec "${A}" "${d}" "$@"
530
- `;await i.writeFile(n,e,{mode:493})}}async function aa(i){let o=Zi(),n=`\u6B63\u5728\u66F4\u65B0\u5230 v${i}`;o.start(n);try{let d=await ci(),u=await import("fs/promises");await u.mkdir(xi,{recursive:!0});let e=yi(xi,"package.json");try{await u.access(e)}catch{await u.writeFile(e,JSON.stringify({name:"tako-local",private:!0},null,2))}let r=Bun.spawn(ea(),{cwd:xi,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:d}}),t=await Vi(r,n,(c)=>o.update(c));if(await r.exited,r.exitCode===0)return await Re(),R("cli_updated",{from_version:nn,to_version:i}),o.stop(`\u66F4\u65B0\u6210\u529F\uFF01\u5DF2\u66F4\u65B0\u5230 v${i}`),!0;else return o.stop(),W.warn(`\u66F4\u65B0\u5931\u8D25: ${zo(t)}`),!1}catch(d){return o.stop(),W.warn(`\u66F4\u65B0\u5931\u8D25: ${zo(d instanceof Error?d.message:void 0)}`),!1}}async function la(){let i=await import("fs/promises"),o=yi(xi,"bun.lock");try{await i.unlink(o)}catch{}}async function ma(){let i=await import("fs/promises");try{let o=await ci();await i.mkdir(xi,{recursive:!0});let n=yi(xi,"package.json");try{await i.access(n)}catch{await i.writeFile(n,JSON.stringify({name:"tako-local",private:!0},null,2))}await la();let d=Bun.spawn(ra(),{cwd:xi,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:o}});return await d.exited,d.exitCode===0}catch{return!1}}async function xa(){let i=await import("fs/promises"),o=yi(q,"bin"),n=yi(o,"tako"),d=yi(xi,"node_modules/tako-cli/dist/index.js");try{let u=await i.readFile(n,"utf-8");if(u.includes("bun run tako-cli")||u.includes("run tako-cli")){W.info(k("updater.migrating"));let e=!1;try{await i.access(d),e=!0}catch{e=!1}if(!e){let r=Zi();if(r.start(k("updater.installingLocally")),!await ma())return r.stop(k("updater.migrationFailed")),!1;r.stop(k("updater.installComplete"))}return await Re(),!0}}catch{}return!1}async function dn(){try{if(await xa())W.info(k("updater.migrationComplete")),process.exit(0);let o=await pa();if(o.hasUpdate&&o.latestVersion){if(W.warn(k("updater.newVersionAvailable",{version:o.latestVersion,current:nn})),await aa(o.latestVersion))W.info(k("updater.pleaseRestart")),process.exit(0)}}catch{}}_();so();ti();C();Zn();Pi();X();wi();_();C();so();var Ma="\x1B[?1000l\x1B[?1002l\x1B[?1003l\x1B[?1005l\x1B[?1006l\x1B[?1015l\x1B[?1049l\x1B[?2004l\x1B[0m\x1B[?25h";function De(i=process.stdin){try{if(i.removeAllListeners?.(),i.isTTY&&typeof i.setRawMode==="function")i.setRawMode(!1);i.pause?.()}catch{}}function je(i=process.stdout){if(!i.isTTY||typeof i.write!=="function")return;try{i.write(Ma)}catch{}}async function en(i={}){let o=i.stdin??process.stdin,n=i.stdout??process.stdout,d=i.delayMs??30;De(o),je(n),await new Promise((u)=>setTimeout(u,d)),De(o),je(n)}import{writeFile as Ga}from"fs/promises";var kd="TAKO_WINDOWS_HANDOFF_FILE",sd=new Uint8Array([239,187,191]);function rn(i){return`'${i.replace(/'/g,"''")}'`}function ir(i){if(i.length===0)return"@()";return`@(${i.map(rn).join(", ")})`}function Sa(i){let o=new TextEncoder().encode(i),n=new Uint8Array(sd.length+o.length);return n.set(sd,0),n.set(o,sd.length),n}async function Kn(i,o){await Ga(i,Sa(Pa(o)))}function Pa(i){let[o,...n]=i.command;if(!o)throw Error("handoff command is empty");let d=["$ErrorActionPreference = 'Stop'","$scriptPath = $PSCommandPath"];for(let[e,r]of Object.entries(i.env??{})){if(r===void 0)continue;if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(e))continue;d.push(`$env:${e} = ${rn(String(r))}`)}d.push("try { [Console]::InputEncoding = [System.Text.Encoding]::UTF8 } catch {}","try { [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 } catch {}",`Set-Location -LiteralPath ${rn(i.cwd)}`,"$esc = [char]27",'try { [Console]::Write("$esc[2J$esc[3J$esc[H") } catch {}',`$argv = ${ir(n)}`,"$code = 0","try {",` & ${rn(o)} @argv`," $code = if ($null -ne $LASTEXITCODE) { $LASTEXITCODE } else { 0 }","} finally {"," Remove-Item -LiteralPath $scriptPath -Force -ErrorAction SilentlyContinue");let u=i.relaunchCommand??[];if(u.length>0){let[e,...r]=u;d.push(` $relaunchArgv = ${ir(r)}`,` & ${rn(e)} @relaunchArgv`," $code = if ($null -ne $LASTEXITCODE) { $LASTEXITCODE } else { $code }")}return d.push("}","exit $code",""),d.join(`\r
531
- `)}import{join as or}from"path";async function nr(i,o){try{let n=o?.projectPath||process.cwd(),d=o?.providerContext,u=process.platform==="win32";if(!d)return{success:!1,error:"\u672A\u9009\u62E9\u670D\u52A1\u5546"};let e=await xo(i);if(!e)e=wo(i);if(!await Bun.file(e).exists()){let{execSync:l}=await import("child_process"),x=u?`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((v)=>v.trim().replace(/\r$/,"")).filter(Boolean),y=u?w.find((v)=>v.toLowerCase().endsWith(".exe"))??w.find((v)=>v.toLowerCase().endsWith(".cmd"))??w[0]:w[0];if(y)e=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??{}},p={...process.env,...c},a;if(i.runtime==="native")if(u&&e.toLowerCase().endsWith(".js"))a=[await pi(),e];else a=[e];else a=[await pi(),e];if(o?.args&&o.args.length>0)a=[...a,...o.args];if(u&&o?.handoffOnWindows){let l=process.env[kd];if(l)return await en(),await Kn(l,{command:a,cwd:n,env:c}),{success:!0}}if(u&&o?.relaunchTakoOnWindows){let l=process.env[kd];if(l){let x=[process.env.TAKO_WINDOWS_RELAUNCH_COMMAND||or(q,"bin","tako.cmd")];return await en(),await Kn(l,{command:a,cwd:n,env:c,relaunchCommand:x}),{success:!0}}}if(u){let l=await import("fs/promises"),{tmpdir:x}=await import("os"),w=or(x(),`tako-handoff-${process.pid}-${Date.now()}.ps1`);await Kn(w,{command:a,cwd:n}),await en();try{let v=await Bun.spawn(["powershell.exe","-NoProfile","-ExecutionPolicy","Bypass","-File",w],{env:p,stdio:["inherit","inherit","inherit"],cwd:n}).exited;return{success:v===0,exitCode:v}}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(a,{env:p,stdio:["inherit","inherit","inherit"],cwd:n})}catch{await Bun.spawn(a,{env:p,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"}}}Md();async function Ra(i,o){if(o?.providerContext)return o.providerContext;let n=await di();if(n){let d=await Qi(i.id);if(d.some((e)=>e.id===n.id))return E(n);if(d.length>0)return E(d[0])}return null}async function Vn(i,o){try{let n=o?.projectPath||process.cwd();if(o?.projectPath){if(!await Nd(o.projectPath))return{success:!1,error:k("launcher.directoryNotFound",{path:o.projectPath})}}let d=await Fe(i);if(!d.success)return d;let u=await Ra(i,o);if(!u)return{success:!1,error:k("launcher.apiKeyNotConfigured")};let e=[],r={};if(i.setupConfigFiles){let p=await i.setupConfigFiles(u,o?.selectedOptionIds,{forLaunch:!0});if(p&&typeof p==="object")e=p.args??[],r=p.envVars??{}}await Te(n,i.id,o?.selectedOptionIds);try{let p=(o?.selectedOptionIds??[]).filter((a)=>a.startsWith("model-"));await rr(p)}catch{}let c=(await s()).installedClients[i.id]?.version;return R("client_launched",{client_id:i.id,client_version:c,project_hash:Pe(n),is_recent_project:!!o?.projectPath}),W.info(k("launcher.starting",{client:i.name})),await nr(i,{...o,args:[...e,...o?.args??[]],envVars:{...r,...o?.envVars??{}},providerContext:u})}catch(n){return{success:!1,error:n instanceof Error?n.message:"Launch failed"}}}X();wi();import{homedir as Ya}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 Q={bold:"\x1B[1m",dim:"\x1B[2m",italic:"\x1B[3m",underline:"\x1B[4m",reset:"\x1B[0m"};var I={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 Ba(){return!1}function si(i){let o=Oi[i];if(typeof o==="string")return o;return Ba()?o.nerd:o.plain}class Fn{id="directory";render(i){let o=this.formatPath(i.workspace.current_dir),n=si("directory");return`${I.directory.icon}${n}${Q.reset} ${I.directory.text}${o}${Q.reset}`}formatPath(i){let o=Ya();if(i===o)return"~";if(i.startsWith(o+"/"))return"~"+i.slice(o.length);return i}}class Tn{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:u,statusColor:e}=await this.getStatus(o),{ahead:r,behind:t}=await this.getAheadBehind(o),c=si("git"),p=`${I.git.icon}${c}${Q.reset} ${I.git.text}${d}${Q.reset}`;if(p+=` ${e}${u}${Q.reset}`,r>0)p+=` ${I.git.clean}${Oi.gitAhead}${r}${Q.reset}`;if(t>0)p+=` ${I.git.dirty}${Oi.gitBehind}${t}${Q.reset}`;return p}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 u=Bun.spawn(["git","rev-parse","--short","HEAD"],{cwd:i,stdout:"pipe",stderr:"pipe"}),e=await new Response(u.stdout).text();if(await u.exited===0&&e.trim())return`detached:${e.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:I.git.clean};let u=n.trim();if(!u)return{status:Oi.gitClean,statusColor:I.git.clean};if(u.includes("UU")||u.includes("AA")||u.includes("DD"))return{status:Oi.gitConflict,statusColor:I.git.conflict};return{status:Oi.gitDirty,statusColor:I.git.dirty}}catch{return{status:Oi.gitClean,statusColor:I.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(),u=await o.exited===0?parseInt(n.trim(),10)||0:0,e=Bun.spawn(["git","rev-list","--count","HEAD..@{u}"],{cwd:i,stdout:"pipe",stderr:"pipe"}),r=await new Response(e.stdout).text(),c=await e.exited===0?parseInt(r.trim(),10)||0:0;return{ahead:u,behind:c}}catch{return{ahead:0,behind:0}}}}var Aa={"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 _n{id="model";render(i){let o=i.model.id,n=Aa[o]||this.simplifyModelName(i.model.display_name),d=si("model");return`${I.model.icon}${d}${Q.reset} ${I.model.text}${n}${Q.reset}`}simplifyModelName(i){let o=i.replace(/^Claude\s+/i,"");return o=o.replace(/-\d{8}$/,""),o}}fo();var Xa=200000;class ki{id="context";static cache=null;static CACHE_TTL=5000;async render(i){let o=await this.getTokensWithCache(i.transcript_path),d=H0(i.model.id)?.contextWindow??Xa,u=Math.round((o??0)/d*100),e=Math.max(0,100-u),r=si("context"),t=e<=20?S.brightRed:e<=50?S.brightYellow:S.brightGreen;return`${I.context.icon}${r}${Q.reset} ${t}${e}%${Q.reset}`}async getTokensWithCache(i){let o=Date.now();if(ki.cache&&ki.cache.path===i&&o-ki.cache.timestamp<ki.CACHE_TTL)return ki.cache.tokens;let n=await this.parseTranscriptTokens(i);return ki.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((u)=>u.trim());for(let u=d.length-1;u>=0;u--)try{let e=JSON.parse(d[u]);if(e.type==="assistant"&&e.message?.usage){let r=e.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}}}En();C();ti();class Un{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 di();if(!i){let n=await ji().catch(()=>"");if(!n)return null;let d=await ro(n);return this.renderTako(d)}let o=await Cd(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)}${Q.reset}`}renderSub(i){let o=(d,u,e)=>{if(d&&d>=1440)return`${Math.round(d/1440)}d`;if(d)return`${Math.round(d/60)}h`;return e?`${e}d`:`${u}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(`${Q.dim} \xB7 ${Q.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}%${Q.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}%${Q.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)}${Q.reset}`}icon(){return`${I.todayUsage.icon}${si("todayUsage")}${Q.reset}`}fmtCost(i){if(i>=100)return`$${Math.round(i)}`;if(i>=10)return`$${i.toFixed(1)}`;return`$${i.toFixed(2)}`}}class qd{separator=`${I.separator} \u2502 ${Q.reset}`;render(i){let o=["directory","git","model","context","quota"],n=[];for(let d of o){let u=i.get(d);if(u)n.push(u)}return n.join(this.separator)}}import{join as to,dirname as ul}from"path";import{homedir as Id}from"os";import{mkdir as el}from"fs/promises";var fr=to(Id(),".tako"),rl=to(fr,"cli"),tl=to(fr,"bin",process.platform==="win32"?"tako.cmd":"tako");function cl(){if(process.platform==="win32")return to(process.env.APPDATA||to(Id(),"AppData","Roaming"),"claude","settings.json");return to(Id(),".claude","settings.json")}var pl=process.platform==="win32",al="0.1.48";function ll(i,o){let n=i.split(".").map(Number),d=o.split(".").map(Number),u=Math.max(n.length,d.length);for(let e=0;e<u;e++){let r=n[e]||0,t=d[e]||0;if(r!==t)return r-t}return 0}async function ml(){let i=to(rl,"node_modules","tako-cli","package.json");try{let o=Bun.file(i);if(!await o.exists())return null;return(await o.json()).version||null}catch{return null}}async function xl(){let i=await ml();if(!i)return!1;return ll(i,al)>=0}function wl(){return tl}function yl(){return`"${vl(wl())}" statusline`}function vl(i){if(pl)return i.replace(/\\/g,"/");return i}async function Od(){if(!await xl())return;let o=cl(),n={};try{let e=Bun.file(o);if(await e.exists())n=await e.json()}catch{}let d={type:"command",command:yl(),padding:0},u=typeof n.statusLine==="object"&&n.statusLine!==null?n.statusLine.command:null;if(typeof u==="string"&&u.includes("tako statusline"))return;n.statusLine=d,await el(ul(o),{recursive:!0}),await Bun.write(o,JSON.stringify(n,null,2))}var fl=[new Fn,new Tn,new _n,new ki,new Un];async function hl(i){let o=await Promise.all(fl.map(async(u)=>{try{let e=await u.render(i);return{id:u.id,content:e}}catch{return{id:u.id,content:null}}})),n=new Map;for(let{id:u,content:e}of o)n.set(u,e);return new qd().render(n)}async function hr(){try{let i=await Bun.stdin.json(),o=await hl(i);console.log(o)}catch{process.exit(0)}}ti();wi();async function Dn(i){let o=await Qi(i);if(o.length===0)return null;let n=await qi(i);if(n)return E(n);if(o.length===1)return E(o[0]);let d=await di();if(d&&o.some((u)=>u.id===d.id))return E(d);return E(o[0])}async function br(){let i=await Uo();if(await Do(i)>0){for(let n of i)R("provider_added",{provider_type:n.type,method:"auto_detect"});U(),H()}}ad();Zn();var bl={"claude-code":{optionId:"skip-permissions",flag:"--dangerously-skip-permissions"},codex:{optionId:"bypass-sandbox",flag:"--dangerously-bypass-approvals-and-sandbox"}};async function jn(i,o,n,d){let u=o.filter((t)=>t!==n),e=await Ll(i,u,d);if(i!=="claude-code")return e?[e,...u]:u;let r=[];if(e)r.push(e);for(let t=0;t<u.length;t++){let c=u[t];if(c==="--model"&&t+1<u.length){r.push(c,bo(u[t+1])),t++;continue}if(c.startsWith("--model=")){let p=c.slice(8);r.push(`--model=${bo(p)}`);continue}r.push(c)}return r}async function Ll(i,o,n){let d=bl[i];if(!d)return null;if(o.includes(d.flag))return null;return(await(n?.getLastSelectedOptionIds??Hn)(i)).includes(d.optionId)?d.flag:null}fo();i0();C();var b0="0.3.21",Mm=!1;function h0(i){return Mm&&!i}function Gm(){console.log(`
534
- ${k("cli.version",{version:b0})}
535
-
536
- ${k("cli.usage")}
537
-
538
- ${k("cli.options")}
539
- ${k("cli.optionVersion")}
540
- ${k("cli.optionHelp")}
541
-
542
- ${k("cli.shortcuts")}
543
- ${k("cli.shortcutClaude")}
544
- ${k("cli.shortcutCodex")}
545
- ${k("cli.shortcutGemini")}
546
-
547
- Commands:
548
- tako install <client> Install AI coding tool
549
- tako quota Print Tako quota as JSON
550
- tako agent [--model X] Start agent mode
551
- tako skill list List available skills
552
- tako skill install <name> Install skill to current project
553
- tako models [--refresh] List models exposed by Tako providers
554
-
555
- ${k("cli.examples")}
556
- ${k("cli.exampleInteractive")}
557
- ${k("cli.exampleClaude")}
558
- ${k("cli.exampleClaudeModel")}
559
- ${k("cli.exampleCodex")}
560
- ${k("cli.exampleGemini")}
561
- `)}async function Sm(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=ii(o);if(!d)console.error(`\u672A\u77E5 client: ${o}`),process.exit(1);if(!n){try{let u=await Rd(d.package),e=await Yd(d),r=u.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===e?" \u2190 \u5F53\u524D":"",p=t.publishedAt?` ${t.publishedAt.slice(0,10)}`:"";console.log(` ${t.version}${p}${c}`)}console.log(`
562
- \u5B89\u88C5\uFF1Atako install ${o} <version>`)}catch(u){console.error("\u83B7\u53D6\u7248\u672C\u5217\u8868\u5931\u8D25:",u.message),process.exit(1)}return}console.log(`\u6B63\u5728\u5B89\u88C5 ${d.package}@${n} \u5230 ${d.id}...`);try{await Bd(d,n),console.log(`\u2713 ${d.name} \u5DF2\u5207\u6362\u5230 ${n}`)}catch(u){console.error("\u5B89\u88C5\u5931\u8D25:",u.message),process.exit(1)}}async function lu(i,o,n){let d=ii(i);if(!d)console.error(k("cli.clientNotFound",{client:o})),process.exit(1);let u=await Dn(i);if(!u)console.error("\u672A\u914D\u7F6E\u53EF\u7528\u7684\u670D\u52A1\u5546"),process.exit(1);let e=await Vn(d,{providerContext:u,args:n,handoffOnWindows:!0});if(!e.success)console.error(e.error),process.exit(1);process.exit(e.exitCode??0)}async function Pm(i){let o=process.argv.slice(2);if(o[0]==="statusline"){zi(),await hr();return}if(o[0]==="install"){await Sm(o.slice(1));return}if(o[0]==="quota"){let{runQuotaCommand:d}=await Promise.resolve().then(() => (zr(),Nr)),u=await d(o.slice(1));if(u!==0)process.exit(u);return}if(o[0]==="agent"){zi();let{runAgentCommand:d}=await Promise.resolve().then(() => (it(),jr));await d(o.slice(1));return}if(o[0]==="skill"){let{runSkillCommand:d}=await Promise.resolve().then(() => (dt(),nt));await d(o.slice(1));return}if(o[0]==="models"){let{runModelsCommand:d}=await Promise.resolve().then(() => (rt(),et)),u=await d(o.slice(1));if(u!==0)process.exit(u);return}if(o.includes("-v")||o.includes("--version")){console.log(`Tako CLI v${b0}`);return}if(o.includes("-h")||o.includes("--help")){Gm();return}let n=b0==="dev"||Ho;if(H(),R("cli_started"),o.includes("--claude")){if(h0(n))await dn();await lu("claude-code","Claude Code",await jn("claude-code",o,"--claude"));return}if(o.includes("--codex")){if(h0(n))await dn();await lu("codex","Codex",await jn("codex",o,"--codex"));return}if(o.includes("--gemini")){if(h0(n))await dn();await lu("gemini","Gemini CLI",await jn("gemini",o,"--gemini"));return}if(h0(n))await dn();if(Od().catch(()=>{}),zi(),X0().catch(()=>{}),!process.stdin.isTTY){console.log("Tako CLI v"+b0),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 tt(i){process.on("beforeExit",async()=>{await on()}),process.on("SIGINT",async()=>{await on(),process.exit(0)}),process.on("SIGTERM",async()=>{await on(),process.exit(0)});try{await Pm(i)}catch(o){console.error(k("cli.cliError"),o),await on(),process.exit(1)}}X();Pi();X();import{CliRenderEvents as f1,createCliRenderer as h1}from"@opentui/core";C();X();wi();ti();Si();function Cm(i){return i.startsWith("cr_")&&i.length>10}async function Qm(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||k("auth.validationFailed")}}catch(o){return{valid:!1,error:o instanceof Error?o.message:k("auth.networkError")}}}async function ct(i){if(!Cm(i))return R("api_key_validated",{success:!1,error_type:"invalid_format"}),{success:!1,error:k("auth.invalidFormat")};let o=await Qm(i);if(!o.valid)return R("api_key_validated",{success:!1,error_type:"api_validation_failed"}),{success:!1,error:o.error};return await Di({apiKey:i,apiId:o.apiId}),await qm(i,o.apiId),R("api_key_validated",{success:!0}),U(),H(),{success:!0}}async function qm(i,o){let d=(await V()).find((u)=>u.type==="tako");if(d)await Ki(d.id,{apiKey:i,apiId:o});else await uo({name:"Tako \u5B98\u65B9",type:"tako",apiKey:i,baseUrl:Y,apiId:o,supportedClients:ni("tako"),builtin:!0})}wi();qo();L0();qo();function vt(){try{if(process.stdin.removeAllListeners(),process.stdin.isTTY)process.stdin.setRawMode(!1);process.stdin.pause()}catch{}}function W0(){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 ft(){vt(),W0(),await new Promise((i)=>setTimeout(i,30)),vt(),W0()}function Io(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 F(i){return!i.ctrl&&!i.meta&&!i.option}function yu(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 bn(i){return i.providers.find((o)=>o.id===i.providerSelectedId)}function N0(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 vu(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 fu(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 Oo(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 Jo(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();hu();import{BoxRenderable as Am,ScrollBoxRenderable as Xm,TextAttributes as B,TextRenderable as Hm}from"@opentui/core";function Im(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 Om(i){return i.replace(/\x1b\[[0-9;]*m/g,"")}function Ln(i){let o=Om(i),n=0;for(let d of o)n+=Im(d)?2:1;return n}function Nt(i,o,n="left"){let d=Ln(i),u=Math.max(0,o-d);if(u===0)return i;switch(n){case"left":return i+" ".repeat(u);case"right":return" ".repeat(u)+i;case"center":{let e=Math.floor(u/2),r=u-e;return" ".repeat(e)+i+" ".repeat(r)}}}var kt=6,gt=4,Lu=16,Jm=12;function Ro(i,o,n){if(!i.some((c)=>(n[c.id]??0)>0))return{list:i,hiddenCount:0};let u=new Map(i.map((c,p)=>[c.id,p])),e=i.filter((c)=>(n[c.id]??0)>0).sort((c,p)=>{let a=(n[p.id]??0)-(n[c.id]??0);if(a!==0)return a;return(u.get(c.id)??0)-(u.get(p.id)??0)}).slice(0,kt).map((c)=>c.id),r=new Set(e);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 Wu(i,o){return!i.some((d)=>(o[d.id]??0)>0)&&i.length>kt?"grid":"collapsed"}function Rm(i,o){if(i.length===0)return 1;let n=Math.max(...i.map((e)=>Ln(e))),d=Math.max(Lu,n+4),u=Math.max(d,o-Jm);return Math.max(1,Math.min(gt,i.length,Math.floor(u/d)))}function Bo(i,o,n){let d=i.map((u)=>u.label[n?"zh":"en"]||u.label.en||u.id);return Rm(d,o)}function Bm(i,o){let n=Math.max(1,Math.min(gt,Math.floor(o)||1)),d=[];for(let u=0;u<i.length;u+=n)d.push(i.slice(u,u+n));return{rows:d,flat:d.flat()}}function z0(i){return i.startsWith("model-")?i.slice(6):i}function bu(i){let o=z0(i).toLowerCase();return o.replace(/^(?:full[-_]|\u6EE1\u8840[-_])+/u,"").slice(0,3)||o.slice(0,3)||o}function zt(i){let o=["gpt","ful","cla","dee","glm","kim","qwe","min","mim","spa"],n=o.indexOf(i);return n===-1?o.length:n}function st(i){let o=z0(i).toLowerCase(),n=[];for(let d of o.match(/\d+(?:\.\d+)?|[a-z]+/g)??[o]){let u=Number(d);n.push(Number.isFinite(u)&&/^\d/.test(d)?u:d)}return n}function Ym(i,o){let n=bu(i),d=bu(o),u=zt(n)-zt(d)||n.localeCompare(d);if(u!==0)return u;let e=st(i),r=st(o),t=Math.max(e.length,r.length);for(let c=0;c<t;c++){let p=e[c],a=r[c];if(p===void 0)return 1;if(a===void 0)return-1;if(typeof p==="number"&&typeof a==="number"){if(p!==a)return a-p;continue}let l=String(p),x=String(a);if(l!==x)return l.localeCompare(x)}return z0(i).localeCompare(z0(o))}function Yo(i,o){let n=[...i].sort(Ym),d=[];for(let e of n){let r=bu(e),t=d[d.length-1];if(t?.family===r)t.ids.push(e);else d.push({family:r,ids:[e]})}let u=d.map((e)=>({family:e.family,rows:Bm(e.ids,o).rows}));return{groups:u,flat:u.flatMap((e)=>e.rows.flat())}}function Nu(i,o,n){return Yo(i,n).flat.indexOf(o)}function $t(i,o){return Yo(i,o).groups.flatMap((n)=>n.rows)}qo();function Zm(i){for(let o of[...i.root.getChildren()])i.root.remove(o)}function P(i,o){return new Am(i,o)}function zu(i){return i.terminalHeight<fn}function su(i){return zu(i)?{minHeight:fn}:{height:"100%"}}function Z(i,o,n){if(!zu(i)){i.root.add(n);return}let d=new Xm(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 Km(i,o,n={}){return new Hm(i,{content:o,fg:m.text,selectable:!1,...n})}function b(i,o,n,d={}){let u=Km(o,n,d);return i.add(u),u}function T(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(([u,e])=>{let r=P(i,{flexDirection:"row",gap:1});b(r,i,u,{fg:m.orange,attributes:B.BOLD}),b(r,i,e,{fg:m.muted}),d.add(r)}),o.add(d)}function Vm(i,o,n,d=m.orange){let u=i.terminalHeight;if(u<30)return;let e=P(i,{flexDirection:"column",alignItems:"center",marginBottom:1}),r=u>=36?pt:at;if(b(e,i,r,{fg:d,attributes:B.BOLD,selectable:!1}),n&&u>=34)b(e,i,n,{fg:m.muted});o.add(e)}function ai(i,o,n){let d=P(i,{flexDirection:"column",gap:0});for(let u of n){let e=P(i,{flexDirection:"row",justifyContent:"space-between",backgroundColor:u.focused?m.panelMuted:m.panel,paddingX:1,height:1}),r=P(i,{flexDirection:"row",gap:1,flexGrow:1});if(b(r,i,u.focused?">":" ",{fg:u.focused?u.color||m.orange:m.muted,attributes:u.focused?B.BOLD:B.NONE}),u.marker)b(r,i,u.marker,{fg:u.color||m.orange});if(b(r,i,u.primary,{fg:u.focused?u.color||m.orange:m.text,attributes:u.focused?B.BOLD:B.NONE,truncate:!0}),e.add(r),u.secondary)b(e,i,u.secondary,{fg:m.muted,truncate:!0});d.add(e)}o.add(d)}function ei(i,o,n,d=m.orange,u={text:`tako ${mu}`,color:m.muted},e=!1){let r=P(i,{flexDirection:"column",width:"100%",...su(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:e?1:0}),c=P(i,{flexDirection:"row",justifyContent:"space-between"});if(b(c,i,n,{fg:d,attributes:B.BOLD}),b(c,i,u.text,{fg:u.color||m.muted,truncate:!0}),t.add(c),o.message)b(t,i,o.message,{fg:o.message.startsWith("!")?m.red:m.green});return r.add(t),{root:r,panel:t}}function z(i,o){if(Zm(i),o.scrollScreen!==o.screen)o.scrollScreen=o.screen,o.scrollOffset=0;else if(!zu(i)&&o.scrollOffset!==0)o.scrollOffset=0;switch(o.screen){case"launcher":St(i,o);break;case"providers":jm(i,o);break;case"provider-detail":i1(i,o);break;case"provider-add-type":o1(i,o);break;case"provider-input":n1(i,o);break;case"stats":d1(i,o);break;case"config":u1(i,o);break;case"language":e1(i,o);break;case"option-picker":Um(i,o);break;case"agents":r1(i,o);break;case"agent-detail":c1(i,o);break;case"agent-new":p1(i,o);break;case"key-guide":l1(i,o);break;case"client-versions":m1(i,o);break}i.requestRender()}var Mt={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 Fm(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 Tm(i,o,n){let d=n.clients[n.clientIdx]?.activeProvider;if(!d){b(o,i,`\u26A0 ${n.zh?"\u672A\u7ED1\u5B9A":"no provider"}`,{fg:m.yellow});return}let u=Mt[d.type]??Mt.custom;b(o,i,`${u.icon} ${n.zh?u.zh:u.en}`,{fg:u.color});let e=Fm(d.email??"");if(e)b(o,i,`\xB7 ${e}`,{fg:m.muted,truncate:!0})}function _m(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))),u=[];if(i.primary)u.push(`${n(i.primary.windowMinutes,5)} ${o?"\u5269":"left"} ${d(i.primary.usedPct)}%`);if(i.secondary)u.push(`${n(i.secondary.windowMinutes,24,7)} ${o?"\u5269":"left"} ${d(i.secondary.usedPct)}%`);if(i.modelLimits?.opus)u.push(`opus ${o?"\u5269":"left"} ${d(i.modelLimits.opus.usedPct)}%`);if(!u.length)return null;let e=Math.min(...[i.primary,i.secondary,i.modelLimits?.opus].filter(Boolean).map((r)=>d(r.usedPct)));return{text:`\uD83D\uDCB0 ${u.join(" \xB7 ")}`,color:_m(e)}}function St(i,o){let n=o.clients[o.clientIdx];if(!n)return;let d=Po[n.client.id]||Co,u=co(n.launchOptions,o.zh),e=n.activeProvider?.name||(o.zh?"\u672A\u914D\u7F6E":"Not set"),r=i.terminalHeight<26,c=`${`${o.zh?"\u670D\u52A1\u5546":"Provider"}: ${e}`} \xB7 tako ${mu}`,{root:p,panel:a}=ei(i,o,"Tako Launcher",d.color,r?{text:c,color:n.activeProvider?m.orange:m.yellow}:void 0,r);if(Vm(i,a,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"}),L=P(i,{flexDirection:"row",gap:1});Tm(i,L,o),f.add(L);let M=Em(o.quota,o.zh);if(M)b(f,i,M.text,{fg:M.color,truncate:!0});a.add(f)}let l=P(i,{flexDirection:"row",flexWrap:"wrap",gap:1,justifyContent:"center"}),x=o.focus==="tabs";o.clients.forEach((f,L)=>{let M=Po[f.client.id]||Co,g=L===o.clientIdx,O=P(i,{border:!0,borderStyle:g&&x?"heavy":"single",borderColor:g?M.color:m.border,paddingX:1,height:3,backgroundColor:g&&x?m.panelMuted:m.panel});b(O,i,`${g&&x?"> ":""}${L+1} ${M.icon} ${f.client.name}`,{fg:g?M.color:m.muted,attributes:g?B.BOLD:B.NONE}),l.add(O)}),a.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%"});ai(i,y,n.projects.map((f,L)=>({primary:f.label,secondary:f.hint,focused:o.focus==="projects"&&L===o.projectIdx,color:d.color})));let v=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});ai(i,v,u.map((f,L)=>{let M=o.focus==="options"&&L===o.optionIdx;if(f.kind==="flag"){let g=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:g?"[x]":"[ ]",color:g?d.color:m.muted}}if(f.kind==="group"){let g=Ei(n.launchOptions,n.enabled,f.group);return{primary:`${f.title}: ${g?.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}: ${e}`,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(v),a.add(w);let h=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"];T(i,p,[["Enter",o.zh?"\u542F\u52A8":"launch"],h,["\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,p)}function Um(i,o){let n=o.clients[o.clientIdx],d=o.optionPickerGroup;if(!n||!d){St(i,o);return}let u=n.launchOptions.filter((L)=>L.group===d),e=(Po[n.client.id]||Co).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"){Dm(i,o,n,u,e,r);return}let p=c?Ro(u,n.enabled,o.pickCounts):{list:u,hiddenCount:0},a=[{id:"",primary:o.zh?"\u9ED8\u8BA4":"Default",secondary:t?"":o.zh?"\u5F53\u524D":"current"},...p.list.map((L)=>({id:L.id,primary:L.shortLabel||L.label[o.zh?"zh":"en"]||L.label.en,secondary:n.enabled.has(L.id)?o.zh?"\u5F53\u524D":"current":L.flag})),...p.hiddenCount>0?[{id:"__show_all__",primary:o.zh?`\u663E\u793A\u5168\u90E8 (${p.hiddenCount})`:`Show all (${p.hiddenCount})`,secondary:">"}]:[]],l=a.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=a.slice(w,w+x),v=P(i,{flexDirection:"column",width:"100%",...su(i),backgroundColor:m.bg,justifyContent:"center",alignItems:"center",paddingX:2}),h=P(i,{flexDirection:"column",border:!0,borderStyle:"rounded",borderColor:e,backgroundColor:m.panel,paddingX:2,paddingY:1,gap:1,width:"70%"}),f=P(i,{flexDirection:"row",justifyContent:"space-between"});b(f,i,r,{fg:e,attributes:B.BOLD}),b(f,i,`${o.optionPickerIdx+1}/${l}`,{fg:m.muted}),h.add(f),ai(i,h,y.map((L,M)=>{let g=w+M;return{primary:L.primary,secondary:L.secondary,focused:g===o.optionPickerIdx,marker:L.id&&n.enabled.has(L.id)?"[x]":" ",color:e}})),b(h,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}),v.add(h),T(i,v,[["Enter",o.zh?"\u786E\u8BA4":"confirm"],["\u2191\u2193",o.zh?"\u9009\u62E9":"select"],["Esc/q",o.zh?"\u8FD4\u56DE":"back"]]),Z(i,o,v)}function Dm(i,o,n,d,u,e){let r=d.map((h)=>h.id),t=new Map(d.map((h)=>[h.id,h])),c=(h)=>{let f=t.get(h);return f?.shortLabel||f?.label[o.zh?"zh":"en"]||f?.label.en||h},p=Bo(d,i.terminalWidth||80,o.zh),a=Yo(r,p),l=Math.max(1,a.flat.length);o.optionPickerIdx=Math.max(0,Math.min(o.optionPickerIdx,l-1));let x=Math.max(Lu,...r.length>0?r.map((h)=>Ln(c(h))+3):[0]),w=P(i,{flexDirection:"column",width:"100%",...su(i),backgroundColor:m.bg,justifyContent:"center",alignItems:"center",paddingX:2}),y=P(i,{flexDirection:"column",border:!0,borderStyle:"rounded",borderColor:u,backgroundColor:m.panel,paddingX:2,paddingY:1,gap:0,width:"78%"}),v=P(i,{flexDirection:"row",justifyContent:"space-between",marginBottom:1});b(v,i,e,{fg:u,attributes:B.BOLD}),b(v,i,`${o.optionPickerIdx+1}/${a.flat.length}`,{fg:m.muted}),y.add(v),a.groups.forEach((h,f)=>{if(f>0)b(y,i,"-".repeat(Math.max(8,x*p)),{fg:m.border});h.rows.forEach((L)=>{let M=P(i,{flexDirection:"row",gap:1,height:1});L.forEach((g)=>{let li=a.flat.indexOf(g)===o.optionPickerIdx,mo=n.enabled.has(g),Xo=`${li?">":" "}${Nt(c(g),x)}${mo?"*":" "}`;b(M,i,Xo,{fg:li?u:mo?m.green:m.text,attributes:li?B.BOLD:B.NONE})}),y.add(M)})}),w.add(y),T(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 jm(i,o){let d=o.clients[o.providerTabIdx]?.client,u=d?o.providers.filter((w)=>Hi(w,d.id)):[],e=d?o.clientBindings[d.id]||o.defaultProviderId:o.defaultProviderId,r=u.length+4;o.providerRowIdx=Math.max(0,Math.min(o.providerRowIdx,Math.max(0,r-1)));let t=d?(Po[d.id]||Co).color:m.orange,{root:c,panel:p}=ei(i,o,o.zh?"\u670D\u52A1\u5546\u7BA1\u7406":"Providers",t),a=P(i,{flexDirection:"row",gap:1,justifyContent:"center"});o.clients.forEach((w,y)=>{let v=Po[w.client.id]||Co,h=y===o.providerTabIdx,f=P(i,{border:!0,borderStyle:h?"heavy":"single",borderColor:h?v.color:m.border,paddingX:1,height:3});b(f,i,`${y+1} ${w.client.name}`,{fg:h?v.color:m.muted,attributes:h?B.BOLD:B.NONE}),a.add(f)}),p.add(a);let l=[...u.map((w)=>({primary:w.name,secondary:[oo[w.type]?.[o.zh?"zh":"en"]||w.type,w.id===e?o.zh?"\u5F53\u524D":"bound":"",w.id===o.defaultProviderId?o.zh?"\u9ED8\u8BA4":"default":""].filter(Boolean).join(" "),marker:w.id===e?"*":" "})),{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});ai(i,x,l.map((w,y)=>({...w,focused:y===o.providerRowIdx,color:t}))),p.add(x),T(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 i1(i,o){let n=bn(o),{root:d,panel:u}=ei(i,o,o.zh?"\u670D\u52A1\u5546\u8BE6\u60C5":"Provider Detail",m.orange);if(!n)b(u,i,o.zh?"\u670D\u52A1\u5546\u4E0D\u5B58\u5728":"Provider not found",{fg:m.red});else{let e=[["Name",n.name],["Type",oo[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 e)b(u,i,`${t}: ${c}`,{fg:m.text,truncate:!0});let r=N0(n,o);ai(i,u,r.map((t,c)=>({primary:ht(t,o.zh),focused:c===o.providerDetailIdx,marker:c===o.providerDetailIdx?">":" ",color:m.orange})))}T(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 o1(i,o){let{root:n,panel:d}=ei(i,o,o.zh?"\u6DFB\u52A0\u670D\u52A1\u5546":"Add Provider",m.orange);ai(i,d,Qo.map((u,e)=>({primary:oo[u]?.[o.zh?"zh":"en"]||u,secondary:u==="claude-subscription"||u==="codex-subscription"?o.zh?"\u767B\u5F55\u6388\u6743":"login auth":u==="custom"?o.zh?"\u81EA\u5B9A\u4E49 URL":"custom URL":"",focused:e===o.providerRowIdx,marker:"+",color:m.orange}))),T(i,n,[["Enter",o.zh?"\u9009\u62E9":"select"],["q/Esc",o.zh?"\u8FD4\u56DE":"back"]]),Z(i,o,n)}function n1(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:u}=ei(i,o,n[o.providerInputMode],m.orange),e=o.providerInputMode==="add-model"?Eo(o.addType):void 0;if(e)ai(i,u,e.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"?yu(o.addKey):o.providerInputMode==="add-url"?o.addUrl:o.providerInputMode==="add-model"?o.addModel:o.addCtx;b(u,i,`> ${r}_`,{fg:m.text,truncate:!0})}T(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 d1(i,o){let{root:n,panel:d}=ei(i,o,o.zh?"\u7528\u91CF\u7EDF\u8BA1":"Usage Stats",m.green);if(o.statsLoading)b(d,i,o.zh?"\u6B63\u5728\u83B7\u53D6...":"Loading...",{fg:m.yellow});else if(o.statsError)b(d,i,`${o.zh?"\u83B7\u53D6\u5931\u8D25":"Failed"}: ${o.statsError}`,{fg:m.red});else if(o.statsData){if(b(d,i,`${o.zh?"\u603B\u8C03\u7528\u6B21\u6570":"Total requests"}: ${Wt(o.statsData.totalRequests)}`),b(d,i,`${o.zh?"\u603B\u6D88\u8D39":"Total cost"}: ${o.statsData.totalCost}`),b(d,i,`${o.zh?"\u4ECA\u65E5\u6D88\u8D39":"Today"}: ${o.statsData.todayCost}`),o.statsData.modelStats.length>0){b(d,i,o.zh?"\u6A21\u578B\u5206\u5E03:":"Models:",{fg:m.muted});for(let u of o.statsData.modelStats.slice(0,12))b(d,i,`${u.model.padEnd(28)} ${String(u.requests).padStart(6)} ${u.cost}`,{fg:m.muted,truncate:!0})}}else b(d,i,o.zh?"\u6682\u65E0\u6570\u636E":"No data",{fg:m.muted});T(i,n,[["r",o.zh?"\u5237\u65B0":"refresh"],["q/Esc",o.zh?"\u8FD4\u56DE":"back"]]),Z(i,o,n)}function u1(i,o){let{root:n,panel:d}=ei(i,o,o.zh?"\u914D\u7F6E API Key":"Configure API key",m.orange);if(b(d,i,`> ${yu(o.apiKeyValue)}_`,{truncate:!0}),o.apiKeyStatus==="validating")b(d,i,o.zh?"\u6B63\u5728\u9A8C\u8BC1...":"Validating...",{fg:m.yellow});if(o.apiKeyStatus==="success")b(d,i,o.zh?"\u914D\u7F6E\u6210\u529F":"Configured",{fg:m.green});if(o.apiKeyStatus==="error")b(d,i,o.apiKeyError||"Error",{fg:m.red});T(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 e1(i,o){let{root:n,panel:d}=ei(i,o,o.zh?"\u5207\u6362\u8BED\u8A00":"Language",m.magenta);ai(i,d,_i.map((u,e)=>({primary:u.label,secondary:u.value===Ci()?o.zh?"\u5F53\u524D":"current":"",focused:e===o.languageIdx,marker:e===o.languageIdx?">":" ",color:m.magenta}))),T(i,n,[["Enter",o.zh?"\u9009\u62E9":"select"],["q/Esc",o.zh?"\u8FD4\u56DE":"back"]]),Z(i,o,n)}function r1(i,o){let{root:n,panel:d}=ei(i,o,o.zh?"Agent \u4F1A\u8BDD":"Agent Sessions",m.blue);if(b(d,i,`${o.zh?"\u9ED8\u8BA4 Provider":"Defaults"}: ${Object.keys(o.agentDefaults).length===0?"-":Object.entries(o.agentDefaults).map(([u,e])=>`${u}=${e.slice(0,8)}`).join(" ")}`,{fg:m.muted,truncate:!0}),!o.agentSessions)b(d,i,o.zh?"\u52A0\u8F7D\u4E2D...":"Loading...",{fg:m.yellow});else if(o.agentSessions.length===0)b(d,i,o.zh?"\u6682\u65E0 session\uFF0C\u6309 n \u65B0\u5EFA":"No sessions, press n to create",{fg:m.muted});else ai(i,d,o.agentSessions.map((u,e)=>({primary:`${u.sid.slice(0,8)} ${u.backend.padEnd(6)} ${(u.name||"").slice(0,18).padEnd(18)} ${u.status}`,secondary:`${u.turnCount} turns ${vu(Date.now()-u.lastActiveAt)}`,focused:e===o.agentIdx,marker:bt(u.status),color:fu(u.status)})));if(o.agentError)b(d,i,`! ${o.agentError}`,{fg:m.red,truncate:!0});T(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 t1(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 c1(i,o){let n=o.agentDetailMeta,{root:d,panel:u}=ei(i,o,o.zh?"Agent \u8BE6\u60C5":"Agent Detail",m.blue);if(!n){b(u,i,o.zh?"\u52A0\u8F7D\u4E2D...":"Loading...",{fg:m.yellow}),Z(i,o,d);return}if(b(u,i,`${n.sid.slice(0,8)} ${n.backend} ${n.name} ${n.status}${o.agentDetailAlive===!1?" dead":""}`,{fg:fu(n.status),attributes:B.BOLD,truncate:!0}),b(u,i,`${o.zh?"\u5DE5\u4F5C\u76EE\u5F55":"cwd"}: ${n.workdir}`,{fg:m.muted,truncate:!0}),b(u,i,`${o.zh?"\u6A21\u578B":"model"}: ${n.model||"-"} turns=${n.turnCount} ${o.zh?"\u6700\u8FD1":"last"}=${vu(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});b(c,i,`${o.agentPendingApprovals.length} ${o.zh?"\u4E2A\u5F85\u5BA1\u6279":"pending approvals"}`,{fg:m.magenta,attributes:B.BOLD});for(let p of o.agentPendingApprovals.slice(0,3))b(c,i,`${p.approvalType} ${p.approvalId.slice(0,12)} ${JSON.stringify(p.params)}`,{fg:m.muted,truncate:!0});u.add(c)}let e=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)b(e,i,o.zh?"\u6682\u65E0\u65E5\u5FD7":"No log yet",{fg:m.muted});else for(let c of r){let p=t1(c);b(e,i,p.text.replace(/\s+/g," ").slice(0,240),{fg:p.color||(p.dim?m.muted:m.text),truncate:!0})}if(u.add(e),o.agentError)b(u,i,`! ${o.agentError}`,{fg:m.red,truncate:!0});let t=o.agentDetailStatus==="sending"?"... ":o.agentDetailStatus==="cancelling"?"x ":"> ";b(u,i,`${t}${o.agentDetailInput}_`,{fg:o.agentDetailStatus==="idle"?m.text:m.yellow,truncate:!0}),T(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 p1(i,o){let{root:n,panel:d}=ei(i,o,o.zh?"\u65B0\u5EFA Agent Session":"New Agent Session",m.blue),u=[{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(ai(i,d,u.map((e)=>({primary:e.label+(o.agentField===e.id&&e.id!=="backend"?"_":""),focused:o.agentField===e.id,marker:o.agentField===e.id?">":" ",color:m.blue}))),o.agentError)b(d,i,`! ${o.agentError}`,{fg:m.red,truncate:!0});T(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 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 l1(i,o){let{root:n,panel:d}=ei(i,o,`\uD83D\uDD11 ${o.zh?"\u914D\u7F6E Tako API Key":"Configure Tako API Key"}`,m.cyan);b(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}),b(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}),ai(i,d,a1.map((u,e)=>({primary:o.zh?u.label.zh:u.label.en,secondary:e===o.keyGuideIdx?o.zh?u.hint.zh:u.hint.en:void 0,focused:e===o.keyGuideIdx,marker:e===o.keyGuideIdx?">":" ",color:u.color}))),T(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 Gt={"claude-code":{icon:"\u2726",color:m.yellow},codex:{icon:"\u25C8",color:m.blue},gemini:{icon:"\u25C6",color:m.cyan}};function m1(i,o){let n=o.clients[o.clientVersionsClientIdx],d=Gt[n?.client.id||""]?.color||m.gray,{root:u,panel:e}=ei(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 p=Gt[t.client.id]||{icon:"\u25AA",color:m.gray},a=c===o.clientVersionsClientIdx,l=P(i,{border:!0,borderStyle:a?"heavy":"single",borderColor:a?p.color:m.border,paddingX:2});b(l,i,`${p.icon} ${t.client.name}`,{fg:a?p.color:m.muted,attributes:a?B.BOLD:B.NONE}),r.add(l)}),e.add(r),o.clientVersionsLoading)b(e,i,o.zh?"\u52A0\u8F7D\u4E2D...":"Loading...",{fg:m.yellow});else if(o.clientVersionsError)b(e,i,`${o.zh?"\u52A0\u8F7D\u5931\u8D25\uFF1A":"Failed: "}${o.clientVersionsError}`,{fg:m.red,truncate:!0});else if(o.clientVersions.length===0)b(e,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");b(e,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,p=Math.max(0,Math.min(o.clientVersionsIdx-c+1,o.clientVersions.length-c)),a=o.clientVersions.slice(Math.max(0,p),Math.max(0,p)+c);ai(i,e,a.map((l,x)=>{let w=Math.max(0,p)+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}}))}T(i,u,[["\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,u)}Ao();ti();Si();qo();L0();Ao();y0();Ti();wi();function y1(i,o,n){let d=i.clients[i.clientIdx];if(!d)return;let u=d.launchOptions.filter((c)=>c.group===o);if(u.length===0)return;let e=Ei(d.launchOptions,d.enabled,o),r=o==="model"?Wu(u,i.pickCounts):"collapsed",t=0;if(e)if(o==="model"&&r==="grid"){let c=u.map((a)=>a.id),p=Bo(u,n,i.zh);t=Nu(c,e.id,p)}else t=(o==="model"?Ro(u,d.enabled,i.pickCounts).list:u).findIndex((p)=>p.id===e.id)+1;i.optionPickerGroup=o,i.optionPickerIdx=Math.max(0,t),i.modelPickerMode=r,i.screen="option-picker"}function Qt(i,o,n,d,u){let e=o.clients[o.clientIdx];if(!e)return;let r=co(e.launchOptions,o.zh),t=i.name,c=F(i);if(t==="q"||t==="escape"){d({type:"exit"});return}if(c&&t==="a"){u(()=>Li(o));return}if(c&&t==="p"){u(()=>ao(o));return}if(c&&t==="s"){u(()=>Wn(o));return}if(c&&t==="c"){o.screen="config",o.apiKeyValue="",o.apiKeyStatus="idle",o.apiKeyError=void 0,z(n,o);return}if(c&&t==="l"){o.screen="language",z(n,o);return}let p=Number.parseInt(t,10);if(c&&p>=1&&p<=o.clients.length){o.clientIdx=p-1,hn(o),z(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;hn(o),z(n,o);return}if(t==="left"){if(o.focus==="tabs")o.clientIdx=o.clientIdx>0?o.clientIdx-1:o.clients.length-1,hn(o);else if(o.focus==="options")o.focus="projects",o.projectIdx=Math.min(o.projectIdx,e.projects.length-1);z(n,o);return}if(t==="right"){if(o.focus==="tabs")o.clientIdx=o.clientIdx<o.clients.length-1?o.clientIdx+1:0,hn(o);else if(o.focus==="projects"&&r.length>0)o.focus="options",o.optionIdx=Math.min(o.optionIdx,r.length-1);z(n,o);return}if(t==="down"){if(o.focus==="tabs")o.focus="projects";else if(o.focus==="projects"){if(o.projectIdx<e.projects.length-1)o.projectIdx+=1}else if(o.optionIdx<r.length-1)o.optionIdx+=1;z(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";z(n,o);return}if((t==="space"||t==="return")&&o.focus==="options"){let a=r[o.optionIdx];if(a?.kind==="provider"){u(()=>ao(o));return}if(a?.kind==="flag"){if(e.enabled.has(a.opt.id))e.enabled.delete(a.opt.id);else e.enabled.add(a.opt.id);z(n,o);return}if(a?.kind==="group"){y1(o,a.group,n.terminalWidth||80),z(n,o);return}}if(t==="return"){let a=e.projects[o.projectIdx],l=xu(e);d({type:"launch",clientId:e.client.id,projectPath:a?.path,...l})}}function qt(i,o,n){let d=o.clients[o.clientIdx],u=o.optionPickerGroup;if(!d||!u){o.screen="launcher",z(n,o);return}let e=d.launchOptions.filter((a)=>a.group===u),r=u==="model",t=i.name;if(r&&o.modelPickerMode==="grid"){let a=e.map((v)=>v.id),l=Bo(e,n.terminalWidth||80,o.zh),x=Yo(a,l),w=$t(a,l),y=x.flat.length;if(t==="escape"){if(Wu(e,o.pickCounts)==="grid")o.screen="launcher",o.modelPickerMode="collapsed";else{o.modelPickerMode="collapsed";let v=Ei(d.launchOptions,d.enabled,u),h=Ro(e,d.enabled,o.pickCounts).list;o.optionPickerIdx=v?Math.max(0,h.findIndex((f)=>f.id===v.id)+1):0}z(n,o);return}if(F(i)&&t==="q"){o.screen="launcher",o.modelPickerMode="collapsed",z(n,o);return}if(y===0)return;if(t==="left"){o.optionPickerIdx=o.optionPickerIdx>0?o.optionPickerIdx-1:y-1,z(n,o);return}if(t==="right"){o.optionPickerIdx=o.optionPickerIdx<y-1?o.optionPickerIdx+1:0,z(n,o);return}if(t==="up"||t==="down"){let v=0,h=0,f=0;for(let g=0;g<w.length;g++){let O=w[g].length;if(o.optionPickerIdx<f+O){v=g,h=o.optionPickerIdx-f;break}f+=O}let L=t==="up"?v>0?v-1:w.length-1:v<w.length-1?v+1:0,M=Math.min(h,w[L].length-1);o.optionPickerIdx=w.slice(0,L).reduce((g,O)=>g+O.length,0)+M,z(n,o);return}if(t==="return"||t==="space"){let v=x.flat[o.optionPickerIdx];for(let h of e)d.enabled.delete(h.id);if(v)d.enabled.add(v);o.screen="launcher",o.modelPickerMode="collapsed",z(n,o)}return}let c=r?Ro(e,d.enabled,o.pickCounts):{list:e,hiddenCount:0},p=c.list.length+1+(c.hiddenCount>0?1:0);if(t==="escape"||F(i)&&t==="q"){o.screen="launcher",o.modelPickerMode="collapsed",z(n,o);return}if(t==="up"){o.optionPickerIdx=o.optionPickerIdx>0?o.optionPickerIdx-1:p-1,z(n,o);return}if(t==="down"){o.optionPickerIdx=o.optionPickerIdx<p-1?o.optionPickerIdx+1:0,z(n,o);return}if(t==="return"||t==="space"){if(o.optionPickerIdx===0)for(let a of e)d.enabled.delete(a.id);else if(r&&c.hiddenCount>0&&o.optionPickerIdx===c.list.length+1){let a=Ei(d.launchOptions,d.enabled,u),l=e.map((w)=>w.id),x=Bo(e,n.terminalWidth||80,o.zh);o.optionPickerIdx=a?Math.max(0,Nu(l,a.id,x)):0,o.modelPickerMode="grid",z(n,o);return}else{for(let l of e)d.enabled.delete(l.id);let a=c.list[o.optionPickerIdx-1];if(a)d.enabled.add(a.id)}o.screen="launcher",o.modelPickerMode="collapsed",z(n,o)}}function It(i,o,n,d){let u=o.clients[o.providerTabIdx]?.client,e=u?o.providers.filter((p)=>Hi(p,u.id)):[],r=e.length+4,t=i.name,c=F(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<e.length)o.providerSelectedId=e[o.providerRowIdx].id,o.providerDetailIdx=0,o.screen="provider-detail";else if(t==="return"){if(o.providerRowIdx<e.length&&u){let p=e[o.providerRowIdx];d(async()=>{await td(u.id,p.id);let a;if(u.setupConfigFiles)try{await u.setupConfigFiles(E(p))}catch(l){a=l instanceof Error?l.message:String(l)}if(await Ri(o),await bi(o),o.clientIdx=o.clients.findIndex((l)=>l.client.id===u.id),o.clientIdx<0)o.clientIdx=0;Yi(o),o.message=a?o.zh?`\u670D\u52A1\u5546\u5DF2\u7ED1\u5B9A\uFF0C\u914D\u7F6E\u540C\u6B65\u5931\u8D25\uFF1A${a}`:`Provider bound, config sync failed: ${a}`:o.zh?"\u670D\u52A1\u5546\u5DF2\u7ED1\u5B9A":"Provider bound"});return}if(o.providerRowIdx===e.length)o.screen="provider-add-type",o.providerRowIdx=0;else if(o.providerRowIdx===e.length+1){d(async()=>{let p=await Uo(),a=await Do(p);if(a>0)U(),H();await Ri(o),await bi(o),o.message=o.zh?`\u626B\u63CF\u5B8C\u6210\uFF0C\u65B0\u589E ${a} \u4E2A`:`Scan complete, ${a} added`});return}else if(o.providerRowIdx===e.length+2){d(()=>Gu(o));return}else Yi(o)}z(n,o)}function Ot(i,o,n,d,u){let e=bn(o);if(!e){o.screen="providers",z(n,o);return}let r=N0(e,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"){u(async()=>{await rd(e.id),await Ri(o),await bi(o),o.screen="providers",o.message=o.zh?"\u5DF2\u8BBE\u4E3A\u9ED8\u8BA4":"Set as default"});return}if(t==="delete"){u(async()=>{await ed(e.id),await Ri(o),await bi(o),o.screen="providers",o.message=o.zh?"\u5DF2\u5220\u9664":"Deleted"});return}if(t==="rekey")o.addType=e.type,po(o,"rekey");if(t==="relogin"){d({type:"provider-login",tool:e.type==="codex-subscription"?"codex":"claude"});return}}z(n,o)}function Jt(i,o,n,d){if(i.name==="up")o.providerRowIdx=o.providerRowIdx>0?o.providerRowIdx-1:Qo.length-1;else if(i.name==="down")o.providerRowIdx=o.providerRowIdx<Qo.length-1?o.providerRowIdx+1:0;else if(i.name==="return"){if(o.addType=Qo[o.providerRowIdx],o.addType==="claude-subscription"||o.addType==="codex-subscription"){d({type:"provider-login",tool:o.addType==="codex-subscription"?"codex":"claude"});return}po(o,"add-key")}z(n,o)}function Rt(i,o,n,d){let u=i.name,e=o.providerInputMode==="add-model"?Eo(o.addType):void 0;if(e){if(u==="up")o.providerRowIdx=o.providerRowIdx>0?o.providerRowIdx-1:e.length-1;else if(u==="down")o.providerRowIdx=o.providerRowIdx<e.length-1?o.providerRowIdx+1:0;else if(u==="return"){o.addModel=e[o.providerRowIdx],d(()=>Nn(o));return}z(n,o);return}if(u==="backspace"||u==="delete")Oo(o);else if(u==="return"){if(o.providerInputMode==="rekey"){let r=bn(o);if(!r)return;d(async()=>{await Ki(r.id,{apiKey:o.addKey}),await Ri(o),await bi(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")po(o,"add-url");else po(o,"add-model");else if(o.providerInputMode==="add-url")po(o,"add-model");else if(o.providerInputMode==="add-model"){if(o.addModel.trim())po(o,"add-ctx");else d(()=>Nn(o));return}else if(o.providerInputMode==="add-ctx"){d(()=>Nn(o));return}}else Jo(o,Io(i));z(n,o)}function Bt(i,o,n,d){let u=i.name,e=o.agentSessions||[];if(u==="up")o.agentIdx=o.agentIdx>0?o.agentIdx-1:Math.max(0,e.length-1);else if(u==="down")o.agentIdx=o.agentIdx<e.length-1?o.agentIdx+1:0;else if(F(i)&&u==="r"){d(()=>Li(o));return}else if(F(i)&&u==="n")o.screen="agent-new",o.agentBackend="claude",o.agentModel="",o.agentName="",o.agentField="backend",o.agentError=void 0;else if((u==="return"||F(i)&&u==="o")&&e[o.agentIdx]){d(()=>gu(o,e[o.agentIdx].sid));return}else if(F(i)&&u==="p"){d(async()=>{let r=await x0();await Li(o),o.message=o.zh?`\u5DF2\u6E05\u7406 ${r} \u4E2A session`:`Purged ${r} sessions`});return}else if(F(i)&&(u==="d"||u==="x")&&e[o.agentIdx]){let r=e[o.agentIdx];d(async()=>{await Mo(r.sid,u==="x"),await Li(o),o.message=u==="x"?o.zh?"\u5DF2\u5220\u9664":"Purged":o.zh?"\u5DF2\u5173\u95ED":"Closed"});return}z(n,o)}function Yt(i,o,n,d){let u=i.name,e=o.agentDetailSid;if(!e){d(()=>Li(o));return}if(i.ctrl&&u==="c"){if(o.agentDetailStatus==="sending"){o.agentDetailStatus="cancelling",z(n,o),yn(e).catch((r)=>{o.agentError=r instanceof Error?r.message:String(r)}).finally(()=>{o.agentDetailStatus="idle",Bi(o).finally(()=>z(n,o))});return}d(()=>Li(o));return}if(i.ctrl&&(u==="y"||u==="n")){let r=o.agentPendingApprovals[0];if(!r)return;d(async()=>{await u0(e,r.approvalId,{decision:u==="y"?"allow":"deny",by:"tui",decidedAt:Date.now()}),await Bi(o),o.message=u==="y"?o.zh?"\u5DF2\u6279\u51C6":"Approved":o.zh?"\u5DF2\u62D2\u7EDD":"Denied"});return}if(u==="escape"||F(i)&&u==="q"&&!o.agentDetailInput){d(()=>Li(o));return}if(F(i)&&u==="r"){d(()=>Bi(o));return}if(u==="backspace"||u==="delete"){Oo(o),z(n,o);return}if(u==="return"){let r=o.agentDetailInput.trim();if(!r||o.agentDetailStatus!=="idle")return;o.agentDetailInput="",o.agentDetailStatus="sending",o.agentError=void 0,z(n,o),wn(e,r).catch((t)=>{o.agentError=t instanceof Error?t.message:String(t)}).finally(()=>{o.agentDetailStatus="idle",Bi(o).finally(()=>z(n,o))});return}Jo(o,Io(i)),z(n,o)}function At(i,o,n,d){let u=i.name;if(u==="tab"||u==="down")o.agentField=o.agentField==="backend"?"model":o.agentField==="model"?"name":"backend";else if(u==="up")o.agentField=o.agentField==="backend"?"name":o.agentField==="model"?"backend":"model";else if((u==="space"||u==="left"||u==="right")&&o.agentField==="backend")o.agentBackend=o.agentBackend==="claude"?"codex":"claude";else if(u==="backspace"||u==="delete")Oo(o);else if(u==="return"){d(async()=>{try{let e=await xn({backend:o.agentBackend,model:o.agentModel.trim()||void 0,name:o.agentName.trim()||void 0});await Li(o);let r=o.agentSessions?.findIndex((t)=>t.sid===e.sid)??-1;if(r>=0)o.agentIdx=r;o.message=o.zh?"Session \u5DF2\u521B\u5EFA":"Session created"}catch(e){o.agentError=e instanceof Error?e.message:String(e)}});return}else Jo(o,Io(i));z(n,o)}function Xt(i,o,n,d){let u=i.name,e=F(i);if(u==="left"){o.clientVersionsClientIdx=o.clientVersionsClientIdx>0?o.clientVersionsClientIdx-1:o.clients.length-1,d(()=>lo(o));return}if(u==="right"){o.clientVersionsClientIdx=o.clientVersionsClientIdx<o.clients.length-1?o.clientVersionsClientIdx+1:0,d(()=>lo(o));return}if(e&&u==="r"){d(()=>lo(o));return}let r=o.clientVersions.length-1;if(u==="up")o.clientVersionsIdx=o.clientVersionsIdx>0?o.clientVersionsIdx-1:Math.max(0,r);else if(u==="down")o.clientVersionsIdx=o.clientVersionsIdx<r?o.clientVersionsIdx+1:0;else if(u==="return"){let t=o.clientVersions[o.clientVersionsIdx];if(t&&!t.isCurrent){d(()=>Su(o,t.version));return}}z(n,o)}var v1=["configure","skip","never"];function Ht(i,o,n,d){let u=i.name;if(u==="up")o.keyGuideIdx=o.keyGuideIdx>0?o.keyGuideIdx-1:2;else if(u==="down")o.keyGuideIdx=o.keyGuideIdx<2?o.keyGuideIdx+1:0;else if(u==="escape"){d(async()=>{await s0("skip"),Yi(o)});return}else if(u==="return"){let e=v1[o.keyGuideIdx];if(e==="configure"){o.screen="config",o.apiKeyValue="",o.apiKeyStatus="idle",o.apiKeyError=void 0,z(n,o);return}d(async()=>{await s0(e),Yi(o)});return}z(n,o)}Ao();async function Zt(i={}){let o=await wt();if(i.screen==="providers")await ao(o);if(i.message)o.message=i.message;if(o.screen==="launcher")try{let{shouldShowKeyGuide:d}=await Promise.resolve().then(() => (Ao(),Ct));if(await d())o.screen="key-guide"}catch{}W0();let n=await h1({exitOnCtrlC:!1,clearOnShutdown:!0,useMouse:!0,enableMouseMovement:!1,backgroundColor:m.bg});return new Promise((d)=>{let u=!1,e=!1,r,t=async()=>{await new Promise((y)=>{let v=setTimeout(y,100);v.unref?.(),n.once(f1.DESTROY,()=>{clearTimeout(v),y()}),n.stop(),n.destroy()})},c=(y)=>{if(u)return;if(u=!0,r)clearInterval(r);n.keyInput.off("keypress",l),(async()=>{await t(),await ft(),d(y)})()},p=(y)=>{if(o.busy)return;o.busy=!0,z(n,o),y().catch((v)=>{o.message=`! ${v instanceof Error?v.message:String(v)}`}).finally(()=>{o.busy=!1,z(n,o)})},a=(y)=>{if(n.terminalHeight>=fn)return!1;let v=Math.max(1,n.terminalHeight-2);return o.scrollOffset=Math.max(0,o.scrollOffset+y*v),z(n,o),!0},l=(y)=>{if(y.eventType==="release"||o.busy)return;let v=y.name,h=Io(y),f=F(y);if(v==="pagedown"&&a(1))return;if(v==="pageup"&&a(-1))return;if(o.screen==="agent-detail"){Yt(y,o,n,p);return}if(y.ctrl&&v==="c"){c({type:"exit"});return}if(o.screen==="client-versions"){if(v==="escape"||f&&v==="q"){p(()=>ao(o));return}Xt(y,o,n,p);return}if(o.screen==="key-guide"){Ht(y,o,n,p);return}if(o.screen==="launcher"){Qt(y,o,n,c,p);return}if(o.screen==="option-picker"){qt(y,o,n);return}if(v==="escape"||f&&v==="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);z(n,o);return}if(o.screen==="providers"){It(y,o,n,p);return}if(o.screen==="provider-detail"){Ot(y,o,n,c,p);return}if(o.screen==="provider-add-type"){Jt(y,o,n,c);return}if(o.screen==="provider-input"){Rt(y,o,n,p);return}if(o.screen==="stats"){if(f&&v==="r")p(()=>Wn(o));return}if(o.screen==="config"){if(v==="backspace"||v==="delete")Oo(o);else if(v==="return")p(async()=>{if(!o.apiKeyValue)return;o.apiKeyStatus="validating",z(n,o);let L=await ct(o.apiKeyValue);if(L.success)U(),H(),o.apiKeyStatus="success",await bi(o);else o.apiKeyStatus="error",o.apiKeyError=L.error||"Validation failed"});else Jo(o,h);z(n,o);return}if(o.screen==="language"){if(v==="up")o.languageIdx=o.languageIdx>0?o.languageIdx-1:_i.length-1;if(v==="down")o.languageIdx=o.languageIdx<_i.length-1?o.languageIdx+1:0;if(v==="return"){let L=_i[o.languageIdx];nd(L.value),o.zh=L.value==="zh",o.message=o.zh?"\u8BED\u8A00\u5DF2\u5207\u6362":"Language changed",p(()=>bi(o).then(()=>Yi(o)));return}z(n,o);return}if(o.screen==="agents"){Bt(y,o,n,p);return}if(o.screen==="agent-new")At(y,o,n,p)};n.keyInput.on("keypress",l),n.on("resize",()=>z(n,o));let x=!1,w=()=>{if(u||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,ku(o).catch(()=>{}).finally(()=>{if(x=!1,!u&&o.screen==="launcher")z(n,o)})};r=setInterval(()=>{if(w(),u||e||o.busy||o.screen!=="agent-detail"||!o.agentDetailSid)return;e=!0,Bi(o).catch((y)=>{o.agentError=y instanceof Error?y.message:String(y)}).finally(()=>{if(e=!1,!u&&o.screen==="agent-detail")z(n,o)})},1000),r.unref?.(),wu(o),z(n,o),n.start()})}Ao();_();X();wi();Pi();ti();C();ti();var b1=2000,Kt=100;function Mi(i){if(Ho||process.env.TAKO_DEBUG==="1")process.stderr.write(`[announcements] ${i}
564
- `)}function Vt(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 L1(i,o){let n=`${i}/v1/announcements/popup`;try{let d=await fetch(n,{headers:{Authorization:`Bearer ${o}`},signal:AbortSignal.timeout(b1)});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 e=(await d.json())?.announcement;if(!e)return Mi("\u8FD4\u56DE announcement=null\uFF08par \u540E\u53F0\u6CA1\u6709 published+popup=true \u7684\u516C\u544A\uFF09"),null;if(typeof e.id!=="string"||typeof e.title!=="string")return Mi(`payload \u7F3A id/title\uFF0C\u4E22\u5F03\uFF1A${JSON.stringify(e)}`),null;return Mi(`\u62C9\u5230\u516C\u544A id=${e.id} title=${e.title} popup_once=${!!e.popup_once}`),{id:e.id,title:e.title,content:e.content??"",type:e.type,popup_once:!!e.popup_once}}catch(d){return Mi(`fetch \u5931\u8D25\uFF1A${d instanceof Error?d.message:String(d)}`),null}}async function W1(i){return((await s()).seenAnnouncementIds??[]).includes(i)}async function N1(i){let o=await s(),n=o.seenAnnouncementIds??[];if(n.includes(i))return;let d=[...n,i];if(d.length>Kt)d.splice(0,d.length-Kt);o.seenAnnouncementIds=d,await K(o)}async function z1(){let i=Vt(await di());if(i)return i;for(let o of await V()){let n=Vt(o);if(n)return n}return null}async function Ft(){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 L1(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 Ae(o),o.popup_once)await N1(o.id),Mi(`\u6807\u8BB0\u5DF2\u770B\u8FC7\uFF1A${o.id}`)}fo();async function Tt(){await cd(),await pd(),await br(),await Promise.race([F0(await V()),new Promise((i)=>setTimeout(i,3000))]),await Ft()}async function _t(i){let o=ii(i.clientId);if(!o)return!1;R("menu_action",{action:"launch",client_id:i.clientId});let n=await Dn(i.clientId);if(!n)return W.warn(k("cli.noProvider")||"\u672A\u914D\u7F6E\u53EF\u7528\u7684\u670D\u52A1\u5546"),!1;let u=process.platform==="win32"&&!!process.env.TAKO_WINDOWS_HANDOFF_FILE,e=await Vn(o,{projectPath:i.projectPath,args:i.args,envVars:i.envVars,selectedOptionIds:i.selectedOptionIds,providerContext:n,relaunchTakoOnWindows:u});if(!e.success)return W.error(e.error||k("cli.launchFailed")),!1;if(u)return!0;return!1}async function Et(){await Tt();let i;while(!0){let o=await Zt(i);if(i=void 0,!o)break;if(o.type==="exit")break;if(o.type==="provider-login"){let d=Ci()==="zh",u=o.tool==="claude"?"Claude":"Codex";W.info(d?`\u6B63\u5728\u6253\u5F00 ${u} \u5B98\u65B9\u767B\u5F55\uFF0C\u8BF7\u5728\u6D4F\u89C8\u5668\u4E2D\u5B8C\u6210\u6388\u6743...`:`Opening ${u} login; complete authorization in the browser...`);let e=await $u(o.tool),r=await Mu(o.tool,d),t=r.message;if(!r.ok&&e.error)t=e.error;else if(!r.ok&&!e.ok&&e.exitCode!=null)t=d?`${u} \u767B\u5F55\u672A\u5B8C\u6210\uFF08\u9000\u51FA\u7801 ${e.exitCode}\uFF09`:`${u} login did not complete (exit ${e.exitCode})`;if(r.ok)W.success(r.message);else W.warn(t);i={screen:"providers",message:r.ok?r.message:`! ${t}`};continue}if(o.type!=="launch")continue;if(await _t(o))process.exit(0)}}await tt(Et);