tako-cli 0.3.16 → 0.3.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index-ink.js +831 -0
- package/dist/index-opentui.js +564 -0
- package/dist/index.js +16 -816
- package/package.json +4 -1
|
@@ -0,0 +1,564 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
// @bun
|
|
3
|
+
var{defineProperty:Wd,getOwnPropertyNames:oc,getOwnPropertyDescriptor:nc}=Object,dc=Object.prototype.hasOwnProperty;function ec(i){return this[i]}var uc=(i)=>{var o=(Se??=new WeakMap).get(i),n;if(o)return o;if(o=Wd({},"__esModule",{value:!0}),i&&typeof i==="object"||typeof i==="function"){for(var d of oc(i))if(!dc.call(o,d))Wd(o,d,{get:ec.bind(i,d),enumerable:!(n=nc(i,d))||n.enumerable})}return Se.set(i,o),o},Se;var rc=(i)=>i;function tc(i,o){this[i]=rc.bind(null,o)}var ii=(i,o)=>{for(var n in o)Wd(i,n,{get:o[n],enumerable:!0,configurable:!0,set:tc.bind(o,n)})};var N=(i,o)=>()=>(i&&(o=i(i=0)),o);var $=import.meta.require;var Nn={};ii(Nn,{updateConfig:()=>Ui,saveConfig:()=>K,loadConfig:()=>z,hasApiKey:()=>pc,getApiKey:()=>lc,getApiId:()=>Di,ensureTakoDir:()=>To,TOOLS_DIR:()=>Ln,TAKO_SERVER:()=>Ce,TAKO_DIR:()=>Q,TAKO_CLI_DIR:()=>mi,TAKO_BUN_DIR:()=>bi,TAKO_BUN_CACHE_DIR:()=>zd,TAKO_BUN_BIN:()=>A,PROXY_BASE_URL:()=>Y,IS_DEV:()=>Ho,CONFIG_PATH:()=>kd});import{homedir as cc}from"os";import{join as _i,resolve as ac}from"path";async function To(){let i=await import("fs/promises");try{await i.mkdir(Q,{recursive:!0}),await i.mkdir(Ln,{recursive:!0})}catch{}}async function z(){await To();try{let i=Bun.file(kd);if(await i.exists()){let o=await i.json();return{...Pe,...o}}}catch{}return{...Pe}}async function K(i){await To(),await Bun.write(kd,JSON.stringify(i,null,2))}async function Ui(i){let n={...await z(),...i};return await K(n),n}async function pc(){return!!(await z()).apiKey}async function lc(){return(await z()).apiKey}async function Di(){return(await z()).apiId}var Q,kd,Ln,mi,bi,A,zd,Ce,Y,Ho,Pe;var C=N(()=>{Q=ac(process.env.TAKO_HOME||_i(cc(),".tako")),kd=_i(Q,"config.json"),Ln=_i(Q,"tools"),mi=_i(Q,"cli"),bi=_i(Q,"bun"),A=_i(bi,"bin",process.platform==="win32"?"bun.exe":"bun"),zd=_i(bi,"install-cache"),Ce=process.env.TAKO_SERVER||"https://tako.shiroha.tech",Y=process.env.PROXY_BASE_URL||"https://tako.shiroha.tech",Ho=process.env.TAKO_DEV==="true"||process.env.TAKO_DEV==="1"||Ce.includes("localhost"),Pe={apiKey:"",apiId:"",installedClients:{}}});import{join as Wn}from"path";function gd(i,o){if(!i.startsWith(Q))throw Error(`\u5B89\u5168\u68C0\u67E5\u5931\u8D25: ${o} \u8DEF\u5F84 "${i}" \u4E0D\u5728 Tako \u76EE\u5F55\u4E0B`)}function Gi(i){let o=Wn(Ln,i);return gd(o,"\u5BA2\u6237\u7AEF\u5B89\u88C5\u76EE\u5F55"),o}async function xo(i){let o=Gi(i.id),n=Wn(o,"node_modules",i.package,"package.json");try{let d=Bun.file(n);if(!await d.exists())return null;let u=(await d.json()).bin;if(!u)return null;let r=null;if(typeof u==="string")r=u;else if(typeof u==="object"&&u[i.command])r=u[i.command];if(!r)return null;let t=Wn(o,"node_modules",i.package,r);return gd(t,"\u5BA2\u6237\u7AEF\u5165\u53E3\u6587\u4EF6"),t}catch{return null}}function wo(i){let o=Gi(i.id),n=Wn(o,"node_modules",".bin",i.command);return gd(n,"\u5BA2\u6237\u7AEF\u53EF\u6267\u884C\u6587\u4EF6"),n}function kn(i,o){let n=i.launchOptions;return typeof n==="function"?n(o):n??[]}function yo(i){$d.set(i.id,i)}function Ie(){return Array.from($d.values())}function oi(i){return $d.get(i)}var $d;var E=N(()=>{C();$d=new Map});var mc,Yi;var Md=N(()=>{/*!
|
|
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
|
+
*/mc=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i;Yi=class Yi extends Date{#o=!1;#n=!1;#i=null;constructor(i){let o=!0,n=!0,d="Z";if(typeof i==="string"){let e=i.match(mc);if(e){if(!e[1])o=!1,i=`0000-01-01T${i}`;if(n=!!e[2],n&&i[10]===" "&&(i=i.replace(" ","T")),e[2]&&+e[2]>23)i="";else if(d=e[3]||null,i=i.toUpperCase(),!d&&n)i+="Z"}else i=""}super(i);if(!isNaN(this.getTime()))this.#o=o,this.#n=n,this.#i=d}isDateTime(){return this.#o&&this.#n}isLocal(){return!this.#o||!this.#n||!this.#i}isDate(){return this.#o&&!this.#n}isTime(){return this.#n&&!this.#o}isValid(){return this.#o||this.#n}toISOString(){let i=super.toISOString();if(this.isDate())return i.slice(0,10);if(this.isTime())return i.slice(11,23);if(this.#i===null)return i.slice(0,-1);if(this.#i==="Z")return i;let o=+this.#i.slice(1,3)*60+ +this.#i.slice(4,6);return o=this.#i[0]==="-"?o:-o,new Date(this.getTime()-o*60000).toISOString().slice(0,-1)+this.#i}static wrapAsOffsetDateTime(i,o="Z"){let n=new Yi(i);return n.#i=o,n}static wrapAsLocalDateTime(i){let o=new Yi(i);return o.#i=null,o}static wrapAsLocalDate(i){let o=new Yi(i);return o.#n=!1,o.#i=null,o}static wrapAsLocalTime(i){let o=new Yi(i);return o.#o=!1,o.#i=null,o}}});function xc(i,o){let n=i.slice(0,o).split(/\r\n|\n|\r/g);return[n.length,n.pop().length+1]}function wc(i,o,n){let d=i.split(/\r\n|\n|\r/g),e="",u=(Math.log10(o+1)|0)+1;for(let r=o-1;r<=o+1;r++){let t=d[r-1];if(!t)continue;if(e+=r.toString().padEnd(u," "),e+=": ",e+=t,e+=`
|
|
30
|
+
`,r===o)e+=" ".repeat(u+n+2),e+=`^
|
|
31
|
+
`}return e}var G;var ji=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]=xc(o.toml,o.ptr),e=wc(o.toml,n,d);super(`Invalid TOML document: ${i}
|
|
58
|
+
|
|
59
|
+
${e}`,o);this.line=n,this.column=d,this.codeblock=e}}});function zn(i,o){let n=i[o++],d=n,e=n==="'",u=n===i[o]&&n===i[o+1];if(u){if(i[o+=2]===`
|
|
60
|
+
`)o++;else if(i[o]==="\r"&&i[o+1]===`
|
|
61
|
+
`)o+=2}let r="",t=o,c=0;for(let a=o;a<i.length;a++)if(n=i[a],u&&(n===`
|
|
62
|
+
`||n==="\r"&&i[a+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:a});else if((!c||c===3)&&n===d&&(!u||i[a+1]===d&&i[a+2]===d)){if(u){if(i[a+3]===d)a++;if(i[a+3]===d)a++}return[c?r:r+i.slice(t,a),a+(u?3:1)]}else if(!c){if(!e&&n==="\\")r+=i.slice(t,t=a),c=1}else if(c===1)if(n==="x"||n==="u"||n==="U"){let p=0,l=n==="x"?2:n==="u"?4:8;for(let x=0;x<l;x++,a++){let w=i.charCodeAt(a+1),y=w>=48&&w<=57?w-48:w>=65&&w<=70?w-65+10:w>=97&&w<=102?w-97+10:-1;if(y<0)throw new G("invalid non-hex character in unicode escape",{toml:i,ptr:a+1});p=p<<4|y}if(p<0||p>1114111||p>=55296&&p<=57343)throw new G("invalid unicode escape",{toml:i,ptr:a});r+=String.fromCodePoint(p),t=a+1,c=0}else if(n===" "||n==="\t")c=2;else{if(n==="b")r+="\b";else if(n==="t")r+="\t";else if(n==="n")r+=`
|
|
64
|
+
`;else if(n==="f")r+="\f";else if(n==="r")r+="\r";else if(n==="e")r+="\x1B";else if(n==='"')r+='"';else if(n==="\\")r+="\\";else throw new G("unrecognized escape sequence",{toml:i,ptr:a});t=a+1,c=0}else if(n!==" "&&n!=="\t"){if(c===2)throw new G("invalid escape: only line-ending whitespace may be escaped",{toml:i,ptr:t});c=!e&&n==="\\"?1:0,t=a}throw new G("unfinished string",{toml:i,ptr:o})}function Qe(i,o,n,d){if(i==="true")return!0;if(i==="false")return!1;if(i==="-inf")return-1/0;if(i==="inf"||i==="+inf")return 1/0;if(i==="nan"||i==="+nan"||i==="-nan")return NaN;if(i==="-0")return d?0n:0;let e=yc.test(i);if(e||sc.test(i)){if(fc.test(i))throw new G("leading zeroes are not allowed",{toml:o,ptr:n});i=i.replace(/_/g,"");let r=+i;if(isNaN(r))throw new G("invalid number",{toml:o,ptr:n});if(e){if((e=!Number.isSafeInteger(r))&&!d)throw new G("integer value cannot be represented losslessly",{toml:o,ptr:n});if(e||d===!0)r=BigInt(i)}return r}let u=new Yi(i);if(!u.isValid())throw new G("invalid value",{toml:o,ptr:n});return u}var yc,sc,fc;var Gd=N(()=>{Md();ji();/*!
|
|
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
|
+
*/yc=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,sc=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,fc=/^[+-]?0[0-9_]/});function gn(i,o=0,n=i.length){let d=i.indexOf(`
|
|
91
|
+
`,o);if(i[d-1]==="\r")d--;return d<=n?d:-1}function so(i,o){for(let n=o;n<i.length;n++){let d=i[n];if(d===`
|
|
92
|
+
`)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 Li(i,o,n,d){let e;while(!0){while((e=i[o])===" "||e==="\t"||!n&&(e===`
|
|
94
|
+
`||e==="\r"&&i[o+1]===`
|
|
95
|
+
`))o++;if(d||e!=="#")break;o=so(i,o)}return o}function qe(i,o,n,d,e=!1){if(!d)return o=gn(i,o),o<0?i.length:o;for(let u=o;u<i.length;u++){let r=i[u];if(r==="#")u=gn(i,u);else if(r===n)return u+1;else if(r===d||e&&(r===`
|
|
96
|
+
`||r==="\r"&&i[u+1]===`
|
|
97
|
+
`))return u}throw new G("cannot find end of structure",{toml:i,ptr:o})}var $n=N(()=>{ji();/*!
|
|
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 vc(i,o,n){let d=i.slice(o,n),e=d.indexOf("#");if(e>-1)so(i,e),d=d.slice(0,e);return[d.trimEnd(),e]}function Xo(i,o,n,d,e){if(d===0)throw new G("document contains excessively nested structures. aborting.",{toml:i,ptr:o});let u=i[o];if(u==="["||u==="{"){let[c,a]=u==="["?Re(i,o,d,e):Oe(i,o,d,e);if(n){if(a=Li(i,a),i[a]===",")a++;else if(i[a]!==n)throw new G("expected comma or end of structure",{toml:i,ptr:a})}return[c,a]}if(u==='"'||u==="'"){let[c,a]=zn(i,o);if(n){if(a=Li(i,a),i[a]&&i[a]!==","&&i[a]!==n&&i[a]!==`
|
|
124
|
+
`&&i[a]!=="\r")throw new G("unexpected character encountered",{toml:i,ptr:a});if(i[a]===",")a++}return[c,a]}let r=qe(i,o,",",n),t=vc(i,o,r-(i[r-1]===","?1:0));if(!t[0])throw new G("incomplete key-value declaration: no value specified",{toml:i,ptr:o});if(n&&t[1]>-1){if(r=Li(i,o+t[1]),i[r]===",")r++}return[Qe(t[0],i,o,e),r]}var Sd=N(()=>{Gd();Pd();$n();ji();/*!
|
|
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 Mn(i,o,n="="){let d=o-1,e=[],u=i.indexOf(n,o);if(u<0)throw new G("incomplete key-value: cannot find end of key",{toml:i,ptr:o});do{let r=i[o=++d];if(r!==" "&&r!=="\t")if(r==='"'||r==="'"){if(r===i[o+1]&&r===i[o+2])throw new G("multiline strings are not allowed in keys",{toml:i,ptr:o});let[t,c]=zn(i,o);d=i.indexOf(".",c);let a=i.slice(c,d<0||d>u?u:d),p=gn(a);if(p>-1)throw new G("newlines are not allowed in keys",{toml:i,ptr:o+d+p});if(a.trimStart())throw new G("found extra tokens after the string part",{toml:i,ptr:c});if(u<c){if(u=i.indexOf(n,c),u<0)throw new G("incomplete key-value: cannot find end of key",{toml:i,ptr:o})}e.push(t)}else{d=i.indexOf(".",o);let t=i.slice(o,d<0||d>u?u:d);if(!hc.test(t))throw new G("only letter, numbers, dashes and underscores are allowed in keys",{toml:i,ptr:o});e.push(t.trimEnd())}}while(d+1&&d<u);return[e,Li(i,u+1,!0,!0)]}function Oe(i,o,n,d){let e={},u=new Set,r;o++;while((r=i[o++])!=="}"&&r)if(r===",")throw new G("expected value, found comma",{toml:i,ptr:o-1});else if(r==="#")o=so(i,o);else if(r!==" "&&r!=="\t"&&r!==`
|
|
151
|
+
`&&r!=="\r"){let t,c=e,a=!1,[p,l]=Mn(i,o-1);for(let y=0;y<p.length;y++){if(y)c=a?c[t]:c[t]={};if(t=p[y],(a=Object.hasOwn(c,t))&&(typeof c[t]!=="object"||u.has(c[t])))throw new G("trying to redefine an already defined value",{toml:i,ptr:o});if(!a&&t==="__proto__")Object.defineProperty(c,t,{enumerable:!0,configurable:!0,writable:!0})}if(a)throw new G("trying to redefine an already defined value",{toml:i,ptr:o});let[x,w]=Xo(i,l,"}",n-1,d);u.add(x),c[t]=x,o=w}if(!r)throw new G("unfinished table encountered",{toml:i,ptr:o});return[e,o]}function Re(i,o,n,d){let e=[],u;o++;while((u=i[o++])!=="]"&&u)if(u===",")throw new G("expected value, found comma",{toml:i,ptr:o-1});else if(u==="#")o=so(i,o);else if(u!==" "&&u!=="\t"&&u!==`
|
|
152
|
+
`&&u!=="\r"){let r=Xo(i,o-1,"]",n-1,d);e.push(r[0]),o=r[1]}if(!u)throw new G("unfinished array encountered",{toml:i,ptr:o});return[e,o]}var hc;var Pd=N(()=>{Gd();Sd();$n();ji();/*!
|
|
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 Je(i,o,n,d){let e=o,u=n,r,t=!1,c;for(let a=0;a<i.length;a++){if(a){if(e=t?e[r]:e[r]={},u=(c=u[r]).c,d===0&&(c.t===1||c.t===2))return null;if(c.t===2){let p=e.length-1;e=e[p],u=u[p].c}}if(r=i[a],(t=Object.hasOwn(e,r))&&u[r]?.t===0&&u[r]?.d)return null;if(!t){if(r==="__proto__")Object.defineProperty(e,r,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(u,r,{enumerable:!0,configurable:!0,writable:!0});u[r]={t:a<i.length-1&&d===2?3:d,d:!1,i:0,c:{}}}}if(c=u[r],c.t!==d&&!(d===1&&c.t===3))return null;if(d===2){if(!c.d)c.d=!0,e[r]=[];e[r].push(e={}),c.c[c.i++]=c={t:1,d:!1,i:0,c:{}}}if(c.d)return null;if(c.d=!0,d===1)e=t?e[r]:e[r]={};else if(d===0&&t)return null;return[r,e,c.c]}function Cd(i,{maxDepth:o=1000,integersAsBigInt:n}={}){let d={},e={},u=d,r=e;for(let t=Li(i,0);t<i.length;){if(i[t]==="["){let c=i[++t]==="[",a=Mn(i,t+=+c,"]");if(c){if(i[a[1]-1]!=="]")throw new G("expected end of table declaration",{toml:i,ptr:a[1]-1});a[1]++}let p=Je(a[0],d,e,c?2:1);if(!p)throw new G("trying to redefine an already defined table or value",{toml:i,ptr:t});r=p[2],u=p[1],t=a[1]}else{let c=Mn(i,t),a=Je(c[0],u,r,0);if(!a)throw new G("trying to redefine an already defined table or value",{toml:i,ptr:t});let p=Xo(i,c[1],void 0,o,n);a[1][a[0]]=p[0],t=p[1]}if(t=Li(i,t,!0),i[t]&&i[t]!==`
|
|
179
|
+
`&&i[t]!=="\r")throw new G("each key-value declaration must be followed by an end-of-line",{toml:i,ptr:t});t=Li(i,t)}return d}var Be=N(()=>{Pd();Sd();$n();ji();/*!
|
|
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 Ko(i){let o=typeof i;if(o==="object"){if(Array.isArray(i))return"array";if(i instanceof Date)return"date"}return o}function bc(i){for(let o=0;o<i.length;o++)if(Ko(i[o])!=="object")return!1;return i.length!=0}function Id(i){return JSON.stringify(i).replace(/\x7f/g,"\\u007f")}function Qd(i,o,n,d){if(n===0)throw Error("Could not stringify the object: maximum object depth exceeded");if(o==="number"){if(isNaN(i))return"nan";if(i===1/0)return"inf";if(i===-1/0)return"-inf";if(Number.isInteger(i)&&(d||!Number.isSafeInteger(i)))return i.toFixed(1);return i.toString()}if(o==="bigint"||o==="boolean")return i.toString();if(o==="string")return Id(i);if(o==="date"){if(isNaN(i.getTime()))throw TypeError("cannot serialize invalid date");return i.toISOString()}if(o==="object")return Lc(i,n,d);if(o==="array")return Nc(i,n,d)}function Lc(i,o,n){let d=Object.keys(i);if(d.length===0)return"{}";let e="{ ";for(let u=0;u<d.length;u++){let r=d[u];if(u)e+=", ";e+=Ae.test(r)?r:Id(r),e+=" = ",e+=Qd(i[r],Ko(i[r]),o-1,n)}return e+" }"}function Nc(i,o,n){if(i.length===0)return"[]";let d="[ ";for(let e=0;e<i.length;e++){if(e)d+=", ";if(i[e]===null||i[e]===void 0)throw TypeError("arrays cannot contain null or undefined values");d+=Qd(i[e],Ko(i[e]),o-1,n)}return d+" ]"}function Wc(i,o,n,d){if(n===0)throw Error("Could not stringify the object: maximum object depth exceeded");let e="";for(let u=0;u<i.length;u++)e+=`${e&&`
|
|
206
|
+
`}[[${o}]]
|
|
207
|
+
`,e+=qd(0,i[u],o,n,d);return e}function qd(i,o,n,d,e){if(d===0)throw Error("Could not stringify the object: maximum object depth exceeded");let u="",r="",t=Object.keys(o);for(let c=0;c<t.length;c++){let a=t[c];if(o[a]!==null&&o[a]!==void 0){let p=Ko(o[a]);if(p==="symbol"||p==="function")throw TypeError(`cannot serialize values of type '${p}'`);let l=Ae.test(a)?a:Id(a);if(p==="array"&&bc(o[a]))r+=(r&&`
|
|
208
|
+
`)+Wc(o[a],n?`${n}.${l}`:l,d-1,e);else if(p==="object"){let x=n?`${n}.${l}`:l;r+=(r&&`
|
|
209
|
+
`)+qd(x,o[a],x,d-1,e)}else u+=l,u+=" = ",u+=Qd(o[a],p,d,e),u+=`
|
|
210
|
+
`}}if(i&&(u||!r))u=u?`[${i}]
|
|
211
|
+
${u}`:`[${i}]`;return u&&r?`${u}
|
|
212
|
+
${r}`:u||r}function Od(i,{maxDepth:o=1000,numbersAsFloat:n=!1}={}){if(Ko(i)!=="object")throw TypeError("stringify can only be called with an object");let d=qd(0,i,"",o,n);if(d[d.length-1]!==`
|
|
213
|
+
`)return d+`
|
|
214
|
+
`;return d}var Ae;var Ye=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
|
+
*/Ae=/^[a-z0-9-_]+$/i});var He=N(()=>{Be();Ye();Md();ji();/*!
|
|
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 kc(i){let o=[];for(let[n,d]of Object.entries(i)){if(!d?.models)continue;for(let[e,u]of Object.entries(d.models)){let r=u?.limit?.context;if(typeof r!=="number"||r<=0)continue;o.push({id:e,displayName:u.name||e,provider:n,contextWindow:r,outputLimit:typeof u.limit?.output==="number"?u.limit.output:void 0})}}return o}async function Te(){let i=await fetch("https://models.dev/api.json",{signal:AbortSignal.timeout(1e4)});if(!i.ok)throw Error(`models.dev http ${i.status}`);let o=await i.json();return kc(o)}var ci;var Gn=N(()=>{ci=[{id:"claude-3-sonnet-20240229",displayName:"Claude Sonnet 3",provider:"anthropic",contextWindow:200000,outputLimit:4096},{id:"claude-haiku-4-5",displayName:"Claude Haiku 4.5 (latest)",provider:"anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-opus-4-5-20251101",displayName:"Claude Opus 4.5",provider:"anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-3-opus-20240229",displayName:"Claude Opus 3",provider:"anthropic",contextWindow:200000,outputLimit:4096},{id:"claude-3-5-haiku-20241022",displayName:"Claude Haiku 3.5",provider:"anthropic",contextWindow:200000,outputLimit:8192},{id:"claude-3-5-sonnet-20241022",displayName:"Claude Sonnet 3.5 v2",provider:"anthropic",contextWindow:200000,outputLimit:8192},{id:"claude-sonnet-4-6",displayName:"Claude Sonnet 4.6",provider:"anthropic",contextWindow:1e6,outputLimit:64000},{id:"claude-opus-4-0",displayName:"Claude Opus 4 (latest)",provider:"anthropic",contextWindow:200000,outputLimit:32000},{id:"claude-opus-4-7",displayName:"Claude Opus 4.7",provider:"anthropic",contextWindow:1e6,outputLimit:128000},{id:"claude-3-haiku-20240307",displayName:"Claude Haiku 3",provider:"anthropic",contextWindow:200000,outputLimit:4096},{id:"claude-sonnet-4-5-20250929",displayName:"Claude Sonnet 4.5",provider:"anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-3-5-haiku-latest",displayName:"Claude Haiku 3.5 (latest)",provider:"anthropic",contextWindow:200000,outputLimit:8192},{id:"claude-opus-4-1",displayName:"Claude Opus 4.1 (latest)",provider:"anthropic",contextWindow:200000,outputLimit:32000},{id:"claude-sonnet-4-0",displayName:"Claude Sonnet 4 (latest)",provider:"anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-3-5-sonnet-20240620",displayName:"Claude Sonnet 3.5",provider:"anthropic",contextWindow:200000,outputLimit:8192},{id:"claude-opus-4-5",displayName:"Claude Opus 4.5 (latest)",provider:"anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-opus-4-1-20250805",displayName:"Claude Opus 4.1",provider:"anthropic",contextWindow:200000,outputLimit:32000},{id:"claude-haiku-4-5-20251001",displayName:"Claude Haiku 4.5",provider:"anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-sonnet-4-20250514",displayName:"Claude Sonnet 4",provider:"anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-opus-4-6",displayName:"Claude Opus 4.6",provider:"anthropic",contextWindow:1e6,outputLimit:128000},{id:"claude-3-7-sonnet-20250219",displayName:"Claude Sonnet 3.7",provider:"anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-sonnet-4-5",displayName:"Claude Sonnet 4.5 (latest)",provider:"anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-opus-4-20250514",displayName:"Claude Opus 4",provider:"anthropic",contextWindow:200000,outputLimit:32000},{id:"gpt-5.1-codex-max",displayName:"GPT-5.1 Codex Max",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-4o-2024-05-13",displayName:"GPT-4o (2024-05-13)",provider:"openai",contextWindow:128000,outputLimit:4096},{id:"o1-mini",displayName:"o1-mini",provider:"openai",contextWindow:128000,outputLimit:65536},{id:"gpt-5.2-pro",displayName:"GPT-5.2 Pro",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"text-embedding-3-large",displayName:"text-embedding-3-large",provider:"openai",contextWindow:8191,outputLimit:3072},{id:"gpt-5.3-chat-latest",displayName:"GPT-5.3 Chat (latest)",provider:"openai",contextWindow:128000,outputLimit:16384},{id:"gpt-5.5",displayName:"GPT-5.5",provider:"openai",contextWindow:1050000,outputLimit:130000},{id:"gpt-5-mini",displayName:"GPT-5 Mini",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-5-nano",displayName:"GPT-5 Nano",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-5.3-codex",displayName:"GPT-5.3 Codex",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-4-turbo",displayName:"GPT-4 Turbo",provider:"openai",contextWindow:128000,outputLimit:4096},{id:"text-embedding-ada-002",displayName:"text-embedding-ada-002",provider:"openai",contextWindow:8192,outputLimit:1536},{id:"gpt-5.2",displayName:"GPT-5.2",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"o3-pro",displayName:"o3-pro",provider:"openai",contextWindow:200000,outputLimit:1e5},{id:"gpt-4o-mini",displayName:"GPT-4o mini",provider:"openai",contextWindow:128000,outputLimit:16384},{id:"o4-mini-deep-research",displayName:"o4-mini-deep-research",provider:"openai",contextWindow:200000,outputLimit:1e5},{id:"gpt-5.4-mini",displayName:"GPT-5.4 mini",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"o4-mini",displayName:"o4-mini",provider:"openai",contextWindow:200000,outputLimit:1e5},{id:"gpt-5.4-nano",displayName:"GPT-5.4 nano",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-5.2-codex",displayName:"GPT-5.2 Codex",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-5.2-chat-latest",displayName:"GPT-5.2 Chat",provider:"openai",contextWindow:128000,outputLimit:16384},{id:"gpt-5.1-codex-mini",displayName:"GPT-5.1 Codex mini",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"o1-preview",displayName:"o1-preview",provider:"openai",contextWindow:128000,outputLimit:32768},{id:"gpt-4o-2024-08-06",displayName:"GPT-4o (2024-08-06)",provider:"openai",contextWindow:128000,outputLimit:16384},{id:"gpt-5.1",displayName:"GPT-5.1",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"o1",displayName:"o1",provider:"openai",contextWindow:200000,outputLimit:1e5},{id:"gpt-5.4-pro",displayName:"GPT-5.4 Pro",provider:"openai",contextWindow:1050000,outputLimit:128000},{id:"gpt-3.5-turbo",displayName:"GPT-3.5-turbo",provider:"openai",contextWindow:16385,outputLimit:4096},{id:"o3-deep-research",displayName:"o3-deep-research",provider:"openai",contextWindow:200000,outputLimit:1e5},{id:"o3-mini",displayName:"o3-mini",provider:"openai",contextWindow:200000,outputLimit:1e5},{id:"text-embedding-3-small",displayName:"text-embedding-3-small",provider:"openai",contextWindow:8191,outputLimit:1536},{id:"o1-pro",displayName:"o1-pro",provider:"openai",contextWindow:200000,outputLimit:1e5},{id:"gpt-4",displayName:"GPT-4",provider:"openai",contextWindow:8192,outputLimit:8192},{id:"gpt-5-codex",displayName:"GPT-5-Codex",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-5.4",displayName:"GPT-5.4",provider:"openai",contextWindow:1050000,outputLimit:128000},{id:"gpt-5.1-chat-latest",displayName:"GPT-5.1 Chat",provider:"openai",contextWindow:128000,outputLimit:16384},{id:"gpt-5.3-codex-spark",displayName:"GPT-5.3 Codex Spark",provider:"openai",contextWindow:128000,outputLimit:32000},{id:"gpt-4.1-nano",displayName:"GPT-4.1 nano",provider:"openai",contextWindow:1047576,outputLimit:32768},{id:"o3",displayName:"o3",provider:"openai",contextWindow:200000,outputLimit:1e5},{id:"gpt-5-pro",displayName:"GPT-5 Pro",provider:"openai",contextWindow:400000,outputLimit:272000},{id:"gpt-4o",displayName:"GPT-4o",provider:"openai",contextWindow:128000,outputLimit:16384},{id:"gpt-5",displayName:"GPT-5",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-5-chat-latest",displayName:"GPT-5 Chat (latest)",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-4.1",displayName:"GPT-4.1",provider:"openai",contextWindow:1047576,outputLimit:32768},{id:"gpt-4.1-mini",displayName:"GPT-4.1 mini",provider:"openai",contextWindow:1047576,outputLimit:32768},{id:"gpt-5.1-codex",displayName:"GPT-5.1 Codex",provider:"openai",contextWindow:400000,outputLimit:128000},{id:"gpt-4o-2024-11-20",displayName:"GPT-4o (2024-11-20)",provider:"openai",contextWindow:128000,outputLimit:16384},{id:"gemini-flash-lite-latest",displayName:"Gemini Flash-Lite Latest",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-2.5-pro-preview-05-06",displayName:"Gemini 2.5 Pro Preview 05-06",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-live-2.5-flash-preview-native-audio",displayName:"Gemini Live 2.5 Flash Preview Native Audio",provider:"google",contextWindow:131072,outputLimit:65536},{id:"gemini-3.1-pro-preview-customtools",displayName:"Gemini 3.1 Pro Preview Custom Tools",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-2.5-flash-lite-preview-09-2025",displayName:"Gemini 2.5 Flash Lite Preview 09-25",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-1.5-flash",displayName:"Gemini 1.5 Flash",provider:"google",contextWindow:1e6,outputLimit:8192},{id:"gemini-1.5-pro",displayName:"Gemini 1.5 Pro",provider:"google",contextWindow:1e6,outputLimit:8192},{id:"gemma-3n-e4b-it",displayName:"Gemma 3n 4B",provider:"google",contextWindow:8192,outputLimit:2000},{id:"gemini-3.1-flash-lite-preview",displayName:"Gemini 3.1 Flash Lite Preview",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-3.1-pro-preview",displayName:"Gemini 3.1 Pro Preview",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-2.0-flash",displayName:"Gemini 2.0 Flash",provider:"google",contextWindow:1048576,outputLimit:8192},{id:"gemini-3-flash-preview",displayName:"Gemini 3 Flash Preview",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-2.5-flash-preview-tts",displayName:"Gemini 2.5 Flash Preview TTS",provider:"google",contextWindow:8000,outputLimit:16000},{id:"gemini-3-pro-preview",displayName:"Gemini 3 Pro Preview",provider:"google",contextWindow:1e6,outputLimit:64000},{id:"gemini-2.5-flash-preview-05-20",displayName:"Gemini 2.5 Flash Preview 05-20",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-embedding-001",displayName:"Gemini Embedding 001",provider:"google",contextWindow:2048,outputLimit:3072},{id:"gemini-2.5-pro",displayName:"Gemini 2.5 Pro",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-flash-latest",displayName:"Gemini Flash Latest",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemma-4-31b-it",displayName:"Gemma 4 31B",provider:"google",contextWindow:256000,outputLimit:8192},{id:"gemini-2.5-pro-preview-06-05",displayName:"Gemini 2.5 Pro Preview 06-05",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-2.5-flash-image",displayName:"Gemini 2.5 Flash Image",provider:"google",contextWindow:32768,outputLimit:32768},{id:"gemini-2.5-flash-lite-preview-06-17",displayName:"Gemini 2.5 Flash Lite Preview 06-17",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemma-3-12b-it",displayName:"Gemma 3 12B",provider:"google",contextWindow:32768,outputLimit:8192},{id:"gemini-2.5-flash",displayName:"Gemini 2.5 Flash",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemma-3n-e2b-it",displayName:"Gemma 3n 2B",provider:"google",contextWindow:8192,outputLimit:2000},{id:"gemini-3.1-flash-image-preview",displayName:"Gemini 3.1 Flash Image (Preview)",provider:"google",contextWindow:131072,outputLimit:32768},{id:"gemma-3-4b-it",displayName:"Gemma 3 4B",provider:"google",contextWindow:32768,outputLimit:8192},{id:"gemini-2.5-flash-preview-04-17",displayName:"Gemini 2.5 Flash Preview 04-17",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-2.5-pro-preview-tts",displayName:"Gemini 2.5 Pro Preview TTS",provider:"google",contextWindow:8000,outputLimit:16000},{id:"gemini-2.5-flash-preview-09-2025",displayName:"Gemini 2.5 Flash Preview 09-25",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemma-3-27b-it",displayName:"Gemma 3 27B",provider:"google",contextWindow:131072,outputLimit:8192},{id:"gemma-4-26b-a4b-it",displayName:"Gemma 4 26B",provider:"google",contextWindow:256000,outputLimit:8192},{id:"gemini-2.5-flash-lite",displayName:"Gemini 2.5 Flash Lite",provider:"google",contextWindow:1048576,outputLimit:65536},{id:"gemini-2.5-flash-image-preview",displayName:"Gemini 2.5 Flash Image (Preview)",provider:"google",contextWindow:32768,outputLimit:32768},{id:"gemini-1.5-flash-8b",displayName:"Gemini 1.5 Flash-8B",provider:"google",contextWindow:1e6,outputLimit:8192},{id:"gemini-live-2.5-flash",displayName:"Gemini Live 2.5 Flash",provider:"google",contextWindow:128000,outputLimit:8000},{id:"gemini-2.0-flash-lite",displayName:"Gemini 2.0 Flash Lite",provider:"google",contextWindow:1048576,outputLimit:8192},{id:"claude-sonnet-4-6@default",displayName:"Claude Sonnet 4.6",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-haiku-4-5@20251001",displayName:"Claude Haiku 4.5",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-3-5-haiku@20241022",displayName:"Claude Haiku 3.5",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:8192},{id:"claude-3-5-sonnet@20241022",displayName:"Claude Sonnet 3.5 v2",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:8192},{id:"claude-opus-4-1@20250805",displayName:"Claude Opus 4.1",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:32000},{id:"claude-sonnet-4@20250514",displayName:"Claude Sonnet 4",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-3-7-sonnet@20250219",displayName:"Claude Sonnet 3.7",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-opus-4@20250514",displayName:"Claude Opus 4",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:32000},{id:"claude-opus-4-5@20251101",displayName:"Claude Opus 4.5",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-sonnet-4-5@20250929",displayName:"Claude Sonnet 4.5",provider:"google-vertex-anthropic",contextWindow:200000,outputLimit:64000},{id:"claude-opus-4-6@default",displayName:"Claude Opus 4.6",provider:"google-vertex-anthropic",contextWindow:1e6,outputLimit:128000},{id:"claude-opus-4-7@default",displayName:"Claude Opus 4.7",provider:"google-vertex-anthropic",contextWindow:1e6,outputLimit:128000},{id:"grok-2-1212",displayName:"Grok 2 (1212)",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-vision-beta",displayName:"Grok Vision Beta",provider:"xai",contextWindow:8192,outputLimit:4096},{id:"grok-3-mini-fast",displayName:"Grok 3 Mini Fast",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-3-mini-latest",displayName:"Grok 3 Mini Latest",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-3-fast",displayName:"Grok 3 Fast",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-2-vision-latest",displayName:"Grok 2 Vision Latest",provider:"xai",contextWindow:8192,outputLimit:4096},{id:"grok-4.20-0309-reasoning",displayName:"Grok 4.20 (Reasoning)",provider:"xai",contextWindow:2000000,outputLimit:30000},{id:"grok-4-1-fast-non-reasoning",displayName:"Grok 4.1 Fast (Non-Reasoning)",provider:"xai",contextWindow:2000000,outputLimit:30000},{id:"grok-3-mini-fast-latest",displayName:"Grok 3 Mini Fast Latest",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-4-fast",displayName:"Grok 4 Fast",provider:"xai",contextWindow:2000000,outputLimit:30000},{id:"grok-3-latest",displayName:"Grok 3 Latest",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-2",displayName:"Grok 2",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-code-fast-1",displayName:"Grok Code Fast 1",provider:"xai",contextWindow:256000,outputLimit:1e4},{id:"grok-4.20-0309-non-reasoning",displayName:"Grok 4.20 (Non-Reasoning)",provider:"xai",contextWindow:2000000,outputLimit:30000},{id:"grok-3-fast-latest",displayName:"Grok 3 Fast Latest",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-4.20-multi-agent-0309",displayName:"Grok 4.20 Multi-Agent",provider:"xai",contextWindow:2000000,outputLimit:30000},{id:"grok-4",displayName:"Grok 4",provider:"xai",contextWindow:256000,outputLimit:64000},{id:"grok-2-latest",displayName:"Grok 2 Latest",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-beta",displayName:"Grok Beta",provider:"xai",contextWindow:131072,outputLimit:4096},{id:"grok-2-vision",displayName:"Grok 2 Vision",provider:"xai",contextWindow:8192,outputLimit:4096},{id:"grok-4-1-fast",displayName:"Grok 4.1 Fast",provider:"xai",contextWindow:2000000,outputLimit:30000},{id:"grok-3-mini",displayName:"Grok 3 Mini",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-2-vision-1212",displayName:"Grok 2 Vision (1212)",provider:"xai",contextWindow:8192,outputLimit:4096},{id:"grok-3",displayName:"Grok 3",provider:"xai",contextWindow:131072,outputLimit:8192},{id:"grok-4-fast-non-reasoning",displayName:"Grok 4 Fast (Non-Reasoning)",provider:"xai",contextWindow:2000000,outputLimit:30000},{id:"deepseek-chat",displayName:"DeepSeek Chat",provider:"deepseek",contextWindow:1e6,outputLimit:384000},{id:"deepseek-reasoner",displayName:"DeepSeek Reasoner",provider:"deepseek",contextWindow:1e6,outputLimit:384000},{id:"deepseek-v4-flash",displayName:"DeepSeek V4 Flash",provider:"deepseek",contextWindow:1e6,outputLimit:384000},{id:"deepseek-v4-pro",displayName:"DeepSeek V4 Pro",provider:"deepseek",contextWindow:1e6,outputLimit:384000},{id:"mimo-v2.5-pro",displayName:"MiMo v2.5 Pro",provider:"xiaomi",contextWindow:1e6,outputLimit:64000},{id:"kimi-k2-0905-preview",displayName:"Kimi K2 0905",provider:"moonshotai",contextWindow:262144,outputLimit:262144},{id:"kimi-k2.5",displayName:"Kimi K2.5",provider:"moonshotai",contextWindow:262144,outputLimit:262144},{id:"kimi-k2-thinking-turbo",displayName:"Kimi K2 Thinking Turbo",provider:"moonshotai",contextWindow:262144,outputLimit:262144},{id:"kimi-k2.6",displayName:"Kimi K2.6",provider:"moonshotai",contextWindow:262144,outputLimit:262144},{id:"kimi-k2-turbo-preview",displayName:"Kimi K2 Turbo",provider:"moonshotai",contextWindow:262144,outputLimit:262144},{id:"kimi-k2-0711-preview",displayName:"Kimi K2 0711",provider:"moonshotai",contextWindow:131072,outputLimit:16384},{id:"kimi-k2-thinking",displayName:"Kimi K2 Thinking",provider:"moonshotai",contextWindow:262144,outputLimit:262144},{id:"mistral-small-latest",displayName:"Mistral Small (latest)",provider:"mistral",contextWindow:256000,outputLimit:256000},{id:"mistral-nemo",displayName:"Mistral Nemo",provider:"mistral",contextWindow:128000,outputLimit:128000},{id:"mistral-large-2512",displayName:"Mistral Large 3",provider:"mistral",contextWindow:262144,outputLimit:262144},{id:"labs-devstral-small-2512",displayName:"Devstral Small 2",provider:"mistral",contextWindow:256000,outputLimit:256000},{id:"devstral-2512",displayName:"Devstral 2",provider:"mistral",contextWindow:262144,outputLimit:262144},{id:"magistral-medium-latest",displayName:"Magistral Medium (latest)",provider:"mistral",contextWindow:128000,outputLimit:16384},{id:"open-mixtral-8x7b",displayName:"Mixtral 8x7B",provider:"mistral",contextWindow:32000,outputLimit:32000},{id:"pixtral-large-latest",displayName:"Pixtral Large (latest)",provider:"mistral",contextWindow:128000,outputLimit:128000},{id:"mistral-large-2411",displayName:"Mistral Large 2.1",provider:"mistral",contextWindow:131072,outputLimit:16384},{id:"codestral-latest",displayName:"Codestral (latest)",provider:"mistral",contextWindow:256000,outputLimit:4096},{id:"mistral-large-latest",displayName:"Mistral Large (latest)",provider:"mistral",contextWindow:262144,outputLimit:262144},{id:"mistral-small-2506",displayName:"Mistral Small 3.2",provider:"mistral",contextWindow:128000,outputLimit:16384},{id:"pixtral-12b",displayName:"Pixtral 12B",provider:"mistral",contextWindow:128000,outputLimit:128000},{id:"ministral-8b-latest",displayName:"Ministral 8B (latest)",provider:"mistral",contextWindow:128000,outputLimit:128000},{id:"mistral-embed",displayName:"Mistral Embed",provider:"mistral",contextWindow:8000,outputLimit:3072},{id:"magistral-small",displayName:"Magistral Small",provider:"mistral",contextWindow:128000,outputLimit:128000},{id:"mistral-small-2603",displayName:"Mistral Small 4",provider:"mistral",contextWindow:256000,outputLimit:256000},{id:"ministral-3b-latest",displayName:"Ministral 3B (latest)",provider:"mistral",contextWindow:128000,outputLimit:128000},{id:"open-mixtral-8x22b",displayName:"Mixtral 8x22B",provider:"mistral",contextWindow:64000,outputLimit:64000},{id:"devstral-small-2505",displayName:"Devstral Small 2505",provider:"mistral",contextWindow:128000,outputLimit:128000},{id:"devstral-medium-2507",displayName:"Devstral Medium",provider:"mistral",contextWindow:128000,outputLimit:128000},{id:"mistral-medium-latest",displayName:"Mistral Medium (latest)",provider:"mistral",contextWindow:128000,outputLimit:16384},{id:"open-mistral-7b",displayName:"Mistral 7B",provider:"mistral",contextWindow:8000,outputLimit:8000},{id:"devstral-medium-latest",displayName:"Devstral 2 (latest)",provider:"mistral",contextWindow:262144,outputLimit:262144},{id:"mistral-medium-2505",displayName:"Mistral Medium 3",provider:"mistral",contextWindow:131072,outputLimit:131072},{id:"devstral-small-2507",displayName:"Devstral Small",provider:"mistral",contextWindow:128000,outputLimit:128000},{id:"mistral-medium-2508",displayName:"Mistral Medium 3.1",provider:"mistral",contextWindow:262144,outputLimit:262144},{id:"qwen3-235b-a22b",displayName:"Qwen3 235B-A22B",provider:"alibaba",contextWindow:131072,outputLimit:16384},{id:"qwen3-coder-plus",displayName:"Qwen3 Coder Plus",provider:"alibaba",contextWindow:1048576,outputLimit:65536},{id:"qwen-vl-ocr",displayName:"Qwen-VL OCR",provider:"alibaba",contextWindow:34096,outputLimit:4096},{id:"qwen-omni-turbo-realtime",displayName:"Qwen-Omni Turbo Realtime",provider:"alibaba",contextWindow:32768,outputLimit:2048},{id:"qwen3-8b",displayName:"Qwen3 8B",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen3.5-397b-a17b",displayName:"Qwen3.5 397B-A17B",provider:"alibaba",contextWindow:262144,outputLimit:65536},{id:"qwq-plus",displayName:"QwQ Plus",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen-vl-plus",displayName:"Qwen-VL Plus",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen3-livetranslate-flash-realtime",displayName:"Qwen3-LiveTranslate Flash Realtime",provider:"alibaba",contextWindow:53248,outputLimit:4096},{id:"qwen3-32b",displayName:"Qwen3 32B",provider:"alibaba",contextWindow:131072,outputLimit:16384},{id:"qwen-max",displayName:"Qwen Max",provider:"alibaba",contextWindow:32768,outputLimit:8192},{id:"qwen-plus",displayName:"Qwen Plus",provider:"alibaba",contextWindow:1e6,outputLimit:32768},{id:"qwen-omni-turbo",displayName:"Qwen-Omni Turbo",provider:"alibaba",contextWindow:32768,outputLimit:2048},{id:"qwen-flash",displayName:"Qwen Flash",provider:"alibaba",contextWindow:1e6,outputLimit:32768},{id:"qwen2-5-vl-7b-instruct",displayName:"Qwen2.5-VL 7B Instruct",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen3.6-plus",displayName:"Qwen3.6 Plus",provider:"alibaba",contextWindow:1e6,outputLimit:65536},{id:"qwen3-max",displayName:"Qwen3 Max",provider:"alibaba",contextWindow:262144,outputLimit:65536},{id:"qwen3-omni-flash",displayName:"Qwen3-Omni Flash",provider:"alibaba",contextWindow:65536,outputLimit:16384},{id:"qwen2-5-72b-instruct",displayName:"Qwen2.5 72B Instruct",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen3-vl-235b-a22b",displayName:"Qwen3-VL 235B-A22B",provider:"alibaba",contextWindow:131072,outputLimit:32768},{id:"qwen3-asr-flash",displayName:"Qwen3-ASR Flash",provider:"alibaba",contextWindow:53248,outputLimit:4096},{id:"qwen3-next-80b-a3b-thinking",displayName:"Qwen3-Next 80B-A3B (Thinking)",provider:"alibaba",contextWindow:131072,outputLimit:32768},{id:"qwen-mt-plus",displayName:"Qwen-MT Plus",provider:"alibaba",contextWindow:16384,outputLimit:8192},{id:"qwen-vl-max",displayName:"Qwen-VL Max",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen3-coder-flash",displayName:"Qwen3 Coder Flash",provider:"alibaba",contextWindow:1e6,outputLimit:65536},{id:"qwen2-5-7b-instruct",displayName:"Qwen2.5 7B Instruct",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen2-5-14b-instruct",displayName:"Qwen2.5 14B Instruct",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen2-5-32b-instruct",displayName:"Qwen2.5 32B Instruct",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen3-next-80b-a3b-instruct",displayName:"Qwen3-Next 80B-A3B Instruct",provider:"alibaba",contextWindow:131072,outputLimit:32768},{id:"qwen-plus-character-ja",displayName:"Qwen Plus Character (Japanese)",provider:"alibaba",contextWindow:8192,outputLimit:512},{id:"qwen3-omni-flash-realtime",displayName:"Qwen3-Omni Flash Realtime",provider:"alibaba",contextWindow:65536,outputLimit:16384},{id:"qwen3-vl-30b-a3b",displayName:"Qwen3-VL 30B-A3B",provider:"alibaba",contextWindow:131072,outputLimit:32768},{id:"qwen3-vl-plus",displayName:"Qwen3-VL Plus",provider:"alibaba",contextWindow:262144,outputLimit:32768},{id:"qwen3-coder-480b-a35b-instruct",displayName:"Qwen3-Coder 480B-A35B Instruct",provider:"alibaba",contextWindow:262144,outputLimit:65536},{id:"qwen3-coder-30b-a3b-instruct",displayName:"Qwen3-Coder 30B-A3B Instruct",provider:"alibaba",contextWindow:262144,outputLimit:65536},{id:"qwen-turbo",displayName:"Qwen Turbo",provider:"alibaba",contextWindow:1e6,outputLimit:16384},{id:"qwen-mt-turbo",displayName:"Qwen-MT Turbo",provider:"alibaba",contextWindow:16384,outputLimit:8192},{id:"qwen2-5-omni-7b",displayName:"Qwen2.5-Omni 7B",provider:"alibaba",contextWindow:32768,outputLimit:2048},{id:"qwen3.5-plus",displayName:"Qwen3.5 Plus",provider:"alibaba",contextWindow:1e6,outputLimit:65536},{id:"qwen2-5-vl-72b-instruct",displayName:"Qwen2.5-VL 72B Instruct",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qvq-max",displayName:"QVQ Max",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"qwen3-14b",displayName:"Qwen3 14B",provider:"alibaba",contextWindow:131072,outputLimit:8192},{id:"command-a-reasoning-08-2025",displayName:"Command A Reasoning",provider:"cohere",contextWindow:256000,outputLimit:32000},{id:"command-r7b-12-2024",displayName:"Command R7B",provider:"cohere",contextWindow:128000,outputLimit:4000},{id:"c4ai-aya-vision-8b",displayName:"Aya Vision 8B",provider:"cohere",contextWindow:16000,outputLimit:4000},{id:"command-r-plus-08-2024",displayName:"Command R+",provider:"cohere",contextWindow:128000,outputLimit:4000},{id:"c4ai-aya-expanse-8b",displayName:"Aya Expanse 8B",provider:"cohere",contextWindow:8000,outputLimit:4000},{id:"command-r7b-arabic-02-2025",displayName:"Command R7B Arabic",provider:"cohere",contextWindow:128000,outputLimit:4000},{id:"command-a-vision-07-2025",displayName:"Command A Vision",provider:"cohere",contextWindow:128000,outputLimit:8000},{id:"c4ai-aya-vision-32b",displayName:"Aya Vision 32B",provider:"cohere",contextWindow:16000,outputLimit:4000},{id:"command-a-translate-08-2025",displayName:"Command A Translate",provider:"cohere",contextWindow:8000,outputLimit:8000},{id:"command-r-08-2024",displayName:"Command R",provider:"cohere",contextWindow:128000,outputLimit:4000},{id:"c4ai-aya-expanse-32b",displayName:"Aya Expanse 32B",provider:"cohere",contextWindow:128000,outputLimit:4000},{id:"command-a-03-2025",displayName:"Command A",provider:"cohere",contextWindow:256000,outputLimit:8000},{id:"anthropic.claude-3-5-sonnet-20241022-v2:0",displayName:"Claude Sonnet 3.5 v2",provider:"amazon-bedrock",contextWindow:200000,outputLimit:8192},{id:"openai.gpt-oss-safeguard-120b",displayName:"GPT OSS Safeguard 120B",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"nvidia.nemotron-nano-3-30b",displayName:"NVIDIA Nemotron Nano 3 30B",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"meta.llama3-2-90b-instruct-v1:0",displayName:"Llama 3.2 90B Instruct",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"nvidia.nemotron-super-3-120b",displayName:"NVIDIA Nemotron 3 Super 120B A12B",provider:"amazon-bedrock",contextWindow:262144,outputLimit:131072},{id:"writer.palmyra-x5-v1:0",displayName:"Palmyra X5",provider:"amazon-bedrock",contextWindow:1040000,outputLimit:8192},{id:"mistral.ministral-3-8b-instruct",displayName:"Ministral 3 8B",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"au.anthropic.claude-opus-4-6-v1",displayName:"AU Anthropic Claude Opus 4.6",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"mistral.ministral-3-3b-instruct",displayName:"Ministral 3 3B",provider:"amazon-bedrock",contextWindow:256000,outputLimit:8192},{id:"amazon.nova-premier-v1:0",displayName:"Nova Premier",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:16384},{id:"anthropic.claude-sonnet-4-5-20250929-v1:0",displayName:"Claude Sonnet 4.5",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"mistral.devstral-2-123b",displayName:"Devstral 2 123B",provider:"amazon-bedrock",contextWindow:256000,outputLimit:8192},{id:"global.anthropic.claude-opus-4-5-20251101-v1:0",displayName:"Claude Opus 4.5 (Global)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"mistral.voxtral-small-24b-2507",displayName:"Voxtral Small 24B 2507",provider:"amazon-bedrock",contextWindow:32000,outputLimit:8192},{id:"google.gemma-3-12b-it",displayName:"Google Gemma 3 12B",provider:"amazon-bedrock",contextWindow:131072,outputLimit:8192},{id:"amazon.nova-pro-v1:0",displayName:"Nova Pro",provider:"amazon-bedrock",contextWindow:300000,outputLimit:8192},{id:"anthropic.claude-haiku-4-5-20251001-v1:0",displayName:"Claude Haiku 4.5",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"minimax.minimax-m2",displayName:"MiniMax M2",provider:"amazon-bedrock",contextWindow:204608,outputLimit:128000},{id:"global.anthropic.claude-opus-4-7",displayName:"Claude Opus 4.7 (Global)",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"mistral.pixtral-large-2502-v1:0",displayName:"Pixtral Large (25.02)",provider:"amazon-bedrock",contextWindow:128000,outputLimit:8192},{id:"meta.llama4-maverick-17b-instruct-v1:0",displayName:"Llama 4 Maverick 17B Instruct",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:16384},{id:"us.anthropic.claude-sonnet-4-5-20250929-v1:0",displayName:"Claude Sonnet 4.5 (US)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"us.anthropic.claude-haiku-4-5-20251001-v1:0",displayName:"Claude Haiku 4.5 (US)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"amazon.nova-micro-v1:0",displayName:"Nova Micro",provider:"amazon-bedrock",contextWindow:128000,outputLimit:8192},{id:"global.anthropic.claude-sonnet-4-5-20250929-v1:0",displayName:"Claude Sonnet 4.5 (Global)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"openai.gpt-oss-20b-1:0",displayName:"gpt-oss-20b",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"zai.glm-5",displayName:"GLM-5",provider:"amazon-bedrock",contextWindow:202752,outputLimit:101376},{id:"qwen.qwen3-32b-v1:0",displayName:"Qwen3 32B (dense)",provider:"amazon-bedrock",contextWindow:16384,outputLimit:16384},{id:"deepseek.v3.2",displayName:"DeepSeek-V3.2",provider:"amazon-bedrock",contextWindow:163840,outputLimit:81920},{id:"eu.anthropic.claude-haiku-4-5-20251001-v1:0",displayName:"Claude Haiku 4.5 (EU)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"zai.glm-4.7-flash",displayName:"GLM-4.7-Flash",provider:"amazon-bedrock",contextWindow:200000,outputLimit:131072},{id:"us.anthropic.claude-opus-4-7",displayName:"Claude Opus 4.7 (US)",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"amazon.nova-2-lite-v1:0",displayName:"Nova 2 Lite",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"anthropic.claude-opus-4-5-20251101-v1:0",displayName:"Claude Opus 4.5",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"qwen.qwen3-coder-480b-a35b-v1:0",displayName:"Qwen3 Coder 480B A35B Instruct",provider:"amazon-bedrock",contextWindow:131072,outputLimit:65536},{id:"meta.llama3-2-1b-instruct-v1:0",displayName:"Llama 3.2 1B Instruct",provider:"amazon-bedrock",contextWindow:131000,outputLimit:4096},{id:"amazon.nova-lite-v1:0",displayName:"Nova Lite",provider:"amazon-bedrock",contextWindow:300000,outputLimit:8192},{id:"meta.llama3-1-8b-instruct-v1:0",displayName:"Llama 3.1 8B Instruct",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"anthropic.claude-opus-4-7",displayName:"Claude Opus 4.7",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"google.gemma-3-27b-it",displayName:"Google Gemma 3 27B Instruct",provider:"amazon-bedrock",contextWindow:202752,outputLimit:8192},{id:"global.anthropic.claude-haiku-4-5-20251001-v1:0",displayName:"Claude Haiku 4.5 (Global)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"google.gemma-3-4b-it",displayName:"Gemma 3 4B IT",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"meta.llama4-scout-17b-instruct-v1:0",displayName:"Llama 4 Scout 17B Instruct",provider:"amazon-bedrock",contextWindow:3500000,outputLimit:16384},{id:"deepseek.v3-v1:0",displayName:"DeepSeek-V3.1",provider:"amazon-bedrock",contextWindow:163840,outputLimit:81920},{id:"mistral.magistral-small-2509",displayName:"Magistral Small 1.2",provider:"amazon-bedrock",contextWindow:128000,outputLimit:40000},{id:"qwen.qwen3-next-80b-a3b",displayName:"Qwen/Qwen3-Next-80B-A3B-Instruct",provider:"amazon-bedrock",contextWindow:262000,outputLimit:262000},{id:"zai.glm-4.7",displayName:"GLM-4.7",provider:"amazon-bedrock",contextWindow:204800,outputLimit:131072},{id:"moonshot.kimi-k2-thinking",displayName:"Kimi K2 Thinking",provider:"amazon-bedrock",contextWindow:256000,outputLimit:256000},{id:"us.anthropic.claude-opus-4-5-20251101-v1:0",displayName:"Claude Opus 4.5 (US)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"mistral.ministral-3-14b-instruct",displayName:"Ministral 14B 3.0",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"anthropic.claude-3-haiku-20240307-v1:0",displayName:"Claude Haiku 3",provider:"amazon-bedrock",contextWindow:200000,outputLimit:4096},{id:"deepseek.r1-v1:0",displayName:"DeepSeek-R1",provider:"amazon-bedrock",contextWindow:128000,outputLimit:32768},{id:"meta.llama3-1-405b-instruct-v1:0",displayName:"Llama 3.1 405B Instruct",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"mistral.voxtral-mini-3b-2507",displayName:"Voxtral Mini 3B 2507",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"openai.gpt-oss-120b-1:0",displayName:"gpt-oss-120b",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"nvidia.nemotron-nano-12b-v2",displayName:"NVIDIA Nemotron Nano 12B v2 VL BF16",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"eu.anthropic.claude-opus-4-7",displayName:"Claude Opus 4.7 (EU)",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"minimax.minimax-m2.5",displayName:"MiniMax M2.5",provider:"amazon-bedrock",contextWindow:196608,outputLimit:98304},{id:"meta.llama3-3-70b-instruct-v1:0",displayName:"Llama 3.3 70B Instruct",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"meta.llama3-1-70b-instruct-v1:0",displayName:"Llama 3.1 70B Instruct",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"meta.llama3-2-3b-instruct-v1:0",displayName:"Llama 3.2 3B Instruct",provider:"amazon-bedrock",contextWindow:131000,outputLimit:4096},{id:"eu.anthropic.claude-sonnet-4-5-20250929-v1:0",displayName:"Claude Sonnet 4.5 (EU)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"eu.anthropic.claude-opus-4-5-20251101-v1:0",displayName:"Claude Opus 4.5 (EU)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"meta.llama3-2-11b-instruct-v1:0",displayName:"Llama 3.2 11B Instruct",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"moonshotai.kimi-k2.5",displayName:"Kimi K2.5",provider:"amazon-bedrock",contextWindow:256000,outputLimit:256000},{id:"au.anthropic.claude-sonnet-4-6",displayName:"AU Anthropic Claude Sonnet 4.6",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"openai.gpt-oss-safeguard-20b",displayName:"GPT OSS Safeguard 20B",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"qwen.qwen3-coder-30b-a3b-v1:0",displayName:"Qwen3 Coder 30B A3B Instruct",provider:"amazon-bedrock",contextWindow:262144,outputLimit:131072},{id:"minimax.minimax-m2.1",displayName:"MiniMax M2.1",provider:"amazon-bedrock",contextWindow:204800,outputLimit:131072},{id:"qwen.qwen3-vl-235b-a22b",displayName:"Qwen/Qwen3-VL-235B-A22B-Instruct",provider:"amazon-bedrock",contextWindow:262000,outputLimit:262000},{id:"qwen.qwen3-coder-next",displayName:"Qwen3 Coder Next",provider:"amazon-bedrock",contextWindow:131072,outputLimit:65536},{id:"nvidia.nemotron-nano-9b-v2",displayName:"NVIDIA Nemotron Nano 9B v2",provider:"amazon-bedrock",contextWindow:128000,outputLimit:4096},{id:"mistral.mistral-large-3-675b-instruct",displayName:"Mistral Large 3",provider:"amazon-bedrock",contextWindow:256000,outputLimit:8192},{id:"qwen.qwen3-235b-a22b-2507-v1:0",displayName:"Qwen3 235B A22B 2507",provider:"amazon-bedrock",contextWindow:262144,outputLimit:131072},{id:"anthropic.claude-3-7-sonnet-20250219-v1:0",displayName:"Claude Sonnet 3.7",provider:"amazon-bedrock",contextWindow:200000,outputLimit:8192},{id:"writer.palmyra-x4-v1:0",displayName:"Palmyra X4",provider:"amazon-bedrock",contextWindow:122880,outputLimit:8192},{id:"anthropic.claude-opus-4-1-20250805-v1:0",displayName:"Claude Opus 4.1",provider:"amazon-bedrock",contextWindow:200000,outputLimit:32000},{id:"anthropic.claude-3-5-sonnet-20240620-v1:0",displayName:"Claude Sonnet 3.5",provider:"amazon-bedrock",contextWindow:200000,outputLimit:8192},{id:"eu.anthropic.claude-opus-4-6-v1",displayName:"Claude Opus 4.6 (EU)",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"eu.anthropic.claude-sonnet-4-20250514-v1:0",displayName:"Claude Sonnet 4 (EU)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"us.anthropic.claude-opus-4-20250514-v1:0",displayName:"Claude Opus 4 (US)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:32000},{id:"anthropic.claude-sonnet-4-6",displayName:"Claude Sonnet 4.6",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:64000},{id:"us.anthropic.claude-sonnet-4-20250514-v1:0",displayName:"Claude Sonnet 4 (US)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"global.anthropic.claude-sonnet-4-6",displayName:"Claude Sonnet 4.6 (Global)",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:64000},{id:"us.anthropic.claude-sonnet-4-6",displayName:"Claude Sonnet 4.6 (US)",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:64000},{id:"global.anthropic.claude-opus-4-6-v1",displayName:"Claude Opus 4.6 (Global)",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"us.anthropic.claude-opus-4-6-v1",displayName:"Claude Opus 4.6 (US)",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"us.anthropic.claude-opus-4-1-20250805-v1:0",displayName:"Claude Opus 4.1 (US)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:32000},{id:"global.anthropic.claude-sonnet-4-20250514-v1:0",displayName:"Claude Sonnet 4 (Global)",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"eu.anthropic.claude-sonnet-4-6",displayName:"Claude Sonnet 4.6 (EU)",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:64000},{id:"anthropic.claude-opus-4-20250514-v1:0",displayName:"Claude Opus 4",provider:"amazon-bedrock",contextWindow:200000,outputLimit:32000},{id:"anthropic.claude-sonnet-4-20250514-v1:0",displayName:"Claude Sonnet 4",provider:"amazon-bedrock",contextWindow:200000,outputLimit:64000},{id:"anthropic.claude-opus-4-6-v1",displayName:"Claude Opus 4.6",provider:"amazon-bedrock",contextWindow:1e6,outputLimit:128000},{id:"anthropic.claude-3-5-haiku-20241022-v1:0",displayName:"Claude Haiku 3.5",provider:"amazon-bedrock",contextWindow:200000,outputLimit:8192},{id:"gpt-5.2-chat",displayName:"GPT-5.2 Chat",provider:"azure",contextWindow:128000,outputLimit:16384},{id:"codex-mini",displayName:"Codex Mini",provider:"azure",contextWindow:200000,outputLimit:1e5},{id:"phi-4-multimodal",displayName:"Phi-4-multimodal",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"phi-3.5-mini-instruct",displayName:"Phi-3.5-mini-instruct",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"llama-4-scout-17b-16e-instruct",displayName:"Llama 4 Scout 17B 16E Instruct",provider:"azure",contextWindow:128000,outputLimit:8192},{id:"grok-4-1-fast-reasoning",displayName:"Grok 4.1 Fast (Reasoning)",provider:"azure",contextWindow:128000,outputLimit:8192},{id:"phi-3-medium-4k-instruct",displayName:"Phi-3-medium-instruct (4k)",provider:"azure",contextWindow:4096,outputLimit:1024},{id:"ministral-3b",displayName:"Ministral 3B",provider:"azure",contextWindow:128000,outputLimit:8192},{id:"meta-llama-3.1-8b-instruct",displayName:"Meta-Llama-3.1-8B-Instruct",provider:"azure",contextWindow:128000,outputLimit:32768},{id:"llama-3.3-70b-instruct",displayName:"Llama-3.3-70B-Instruct",provider:"azure",contextWindow:128000,outputLimit:32768},{id:"deepseek-v3-0324",displayName:"DeepSeek-V3-0324",provider:"azure",contextWindow:131072,outputLimit:131072},{id:"gpt-5-chat",displayName:"GPT-5 Chat",provider:"azure",contextWindow:128000,outputLimit:16384},{id:"phi-3.5-moe-instruct",displayName:"Phi-3.5-MoE-instruct",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"gpt-5.3-chat",displayName:"GPT-5.3 Chat",provider:"azure",contextWindow:128000,outputLimit:16384},{id:"phi-3-mini-128k-instruct",displayName:"Phi-3-mini-instruct (128k)",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"phi-4-reasoning",displayName:"Phi-4-reasoning",provider:"azure",contextWindow:32000,outputLimit:4096},{id:"meta-llama-3-70b-instruct",displayName:"Meta-Llama-3-70B-Instruct",provider:"azure",contextWindow:8192,outputLimit:2048},{id:"phi-3-small-8k-instruct",displayName:"Phi-3-small-instruct (8k)",provider:"azure",contextWindow:8192,outputLimit:2048},{id:"llama-3.2-90b-vision-instruct",displayName:"Llama-3.2-90B-Vision-Instruct",provider:"azure",contextWindow:128000,outputLimit:8192},{id:"deepseek-r1",displayName:"DeepSeek-R1",provider:"azure",contextWindow:163840,outputLimit:163840},{id:"deepseek-v3.2-speciale",displayName:"DeepSeek-V3.2-Speciale",provider:"azure",contextWindow:128000,outputLimit:128000},{id:"cohere-command-a",displayName:"Command A",provider:"azure",contextWindow:256000,outputLimit:8000},{id:"llama-3.2-11b-vision-instruct",displayName:"Llama-3.2-11B-Vision-Instruct",provider:"azure",contextWindow:128000,outputLimit:8192},{id:"meta-llama-3.1-405b-instruct",displayName:"Meta-Llama-3.1-405B-Instruct",provider:"azure",contextWindow:128000,outputLimit:32768},{id:"gpt-5.1-chat",displayName:"GPT-5.1 Chat",provider:"azure",contextWindow:128000,outputLimit:16384},{id:"gpt-4-turbo-vision",displayName:"GPT-4 Turbo Vision",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"cohere-embed-v-4-0",displayName:"Embed v4",provider:"azure",contextWindow:128000,outputLimit:1536},{id:"gpt-3.5-turbo-0125",displayName:"GPT-3.5 Turbo 0125",provider:"azure",contextWindow:16384,outputLimit:16384},{id:"cohere-embed-v3-multilingual",displayName:"Embed v3 Multilingual",provider:"azure",contextWindow:512,outputLimit:1024},{id:"grok-4-20-non-reasoning",displayName:"Grok 4.20 (Non-Reasoning)",provider:"azure",contextWindow:262000,outputLimit:8192},{id:"grok-4-fast-reasoning",displayName:"Grok 4 Fast (Reasoning)",provider:"azure",contextWindow:2000000,outputLimit:30000},{id:"mistral-small-2503",displayName:"Mistral Small 3.1",provider:"azure",contextWindow:128000,outputLimit:32768},{id:"model-router",displayName:"Model Router",provider:"azure",contextWindow:128000,outputLimit:16384},{id:"gpt-3.5-turbo-1106",displayName:"GPT-3.5 Turbo 1106",provider:"azure",contextWindow:16384,outputLimit:16384},{id:"deepseek-v3.1",displayName:"DeepSeek-V3.1",provider:"azure",contextWindow:131072,outputLimit:131072},{id:"phi-3-mini-4k-instruct",displayName:"Phi-3-mini-instruct (4k)",provider:"azure",contextWindow:4096,outputLimit:1024},{id:"meta-llama-3.1-70b-instruct",displayName:"Meta-Llama-3.1-70B-Instruct",provider:"azure",contextWindow:128000,outputLimit:32768},{id:"phi-4-mini-reasoning",displayName:"Phi-4-mini-reasoning",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"meta-llama-3-8b-instruct",displayName:"Meta-Llama-3-8B-Instruct",provider:"azure",contextWindow:8192,outputLimit:2048},{id:"phi-4-mini",displayName:"Phi-4-mini",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"grok-4-20-reasoning",displayName:"Grok 4.20 (Reasoning)",provider:"azure",contextWindow:262000,outputLimit:8192},{id:"gpt-3.5-turbo-0301",displayName:"GPT-3.5 Turbo 0301",provider:"azure",contextWindow:4096,outputLimit:4096},{id:"phi-3-small-128k-instruct",displayName:"Phi-3-small-instruct (128k)",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"deepseek-v3.2",displayName:"DeepSeek-V3.2",provider:"azure",contextWindow:128000,outputLimit:128000},{id:"phi-3-medium-128k-instruct",displayName:"Phi-3-medium-instruct (128k)",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"gpt-3.5-turbo-0613",displayName:"GPT-3.5 Turbo 0613",provider:"azure",contextWindow:16384,outputLimit:16384},{id:"phi-4",displayName:"Phi-4",provider:"azure",contextWindow:128000,outputLimit:4096},{id:"gpt-4-32k",displayName:"GPT-4 32K",provider:"azure",contextWindow:32768,outputLimit:32768},{id:"cohere-embed-v3-english",displayName:"Embed v3 English",provider:"azure",contextWindow:512,outputLimit:1024},{id:"phi-4-reasoning-plus",displayName:"Phi-4-reasoning-plus",provider:"azure",contextWindow:32000,outputLimit:4096},{id:"gpt-3.5-turbo-instruct",displayName:"GPT-3.5 Turbo Instruct",provider:"azure",contextWindow:4096,outputLimit:4096},{id:"deepseek-r1-0528",displayName:"DeepSeek-R1-0528",provider:"azure",contextWindow:163840,outputLimit:163840},{id:"codestral-2501",displayName:"Codestral 25.01",provider:"azure",contextWindow:256000,outputLimit:256000},{id:"llama-4-maverick-17b-128e-instruct-fp8",displayName:"Llama 4 Maverick 17B 128E Instruct FP8",provider:"azure",contextWindow:128000,outputLimit:8192},{id:"mai-ds-r1",displayName:"MAI-DS-R1",provider:"azure",contextWindow:128000,outputLimit:8192},{id:"cohere-command-r-08-2024",displayName:"Command R",provider:"azure",contextWindow:128000,outputLimit:4000},{id:"cohere-command-r-plus-08-2024",displayName:"Command R+",provider:"azure",contextWindow:128000,outputLimit:4000}]});import{join as gc}from"path";import{homedir as $c}from"os";function Xe(){return Gc??gc($c(),".tako","models-cache.json")}function Rd(i){Sn.clear();for(let o of i)if(!Sn.has(o.id))Sn.set(o.id,o)}function Sc(){try{let o=$("fs").readFileSync(Xe(),"utf-8"),n=JSON.parse(o);if(typeof n?.fetchedAt!=="number"||!Array.isArray(n?.entries))return null;return n}catch{return null}}async function Pc(i){try{let o=await import("fs/promises"),n=Xe(),d=n.slice(0,n.lastIndexOf("/"));if(d)await o.mkdir(d,{recursive:!0}).catch(()=>{});await o.writeFile(n,JSON.stringify(i),"utf-8")}catch{}}function Ni(){if(Pn)return;Pn=!0;let i=Sc();if(i&&Date.now()-i.fetchedAt<Mc){Rd(i.entries);return}Rd(ci)}async function Jd(){try{let i=await Te();if(!i.length)return;Rd(i),await Pc({fetchedAt:Date.now(),entries:i}),Pn=!0}catch{}}function Ke(i){let o=i.match(/^(.+?)(?:\[1m\]|:1m)$/i),n=o?o[1]:i,d=n.match(/^[^\/]+\/(.+)$/);return{lookupId:d?d[1]:n,is1m:!!o}}function Bd(i){if(!Pn)Ni();let{lookupId:o,is1m:n}=Ke(i),d=Sn.get(o);if(!d)return;if(n)return{...d,contextWindow:1e6};return d}var Mc=86400000,Gc=null,Sn,Pn=!1;var Ve=N(()=>{Gn();Sn=new Map});import{join as Cc}from"path";function Fe(){return qc??Cc(Q,"tako-models-cache.json")}function Yd(i,o){return`${i.replace(/\/+$/,"")}#${o}`}function Hd(){if(Ze)return;Ze=!0;try{let i=$("fs"),o=JSON.parse(i.readFileSync(Fe(),"utf-8"));if(o?.version!==1||typeof o.buckets!=="object")return;for(let[n,d]of Object.entries(o.buckets))if(typeof d?.fetchedAt==="number"&&Array.isArray(d.entries))Vo.set(n,d)}catch{}}async function Oc(){try{let i=await import("fs/promises"),o=Fe(),n=o.slice(0,o.lastIndexOf("/"));if(n)await i.mkdir(n,{recursive:!0}).catch(()=>{});let d={version:1,buckets:Object.fromEntries(Vo)};await i.writeFile(o,JSON.stringify(d),"utf-8")}catch{}}function Rc(i){let o=i?.models;if(!Array.isArray(o))return[];let n=[];for(let d of o){let e=d?.slug;if(typeof e!=="string"||!e)continue;n.push({id:e,displayName:d.display_name||e,description:d.description||"",contextWindow:typeof d.context_window==="number"?d.context_window:0,sortOrder:typeof d.priority==="number"?d.priority:0,category:typeof d.model_category==="string"&&d.model_category?d.model_category:"chat"})}return n.sort((d,e)=>d.sortOrder-e.sortOrder||d.id.localeCompare(e.id)),n}function Zo(i){return i.filter((o)=>!o.category||o.category==="chat")}function Hi(i,o){return Hd(),Vo.get(Yd(i,o))?.entries??null}async function Cn(i,o,n){Hd();let d=Yd(i,n),e=Ad.get(d);if(e)return e;let u=(async()=>{try{let r=i.replace(/\/+$/,"")+`/v1/models?client_version=tako-cli&api_type=${n}`,t=await fetch(r,{headers:{Authorization:`Bearer ${o}`},signal:AbortSignal.timeout(Qc)});if(!t.ok)return;let c=await t.json(),a=Rc(c);if(a.length===0)return;Vo.set(d,{fetchedAt:Date.now(),entries:a}),await Oc()}catch{}finally{Ad.delete(d)}})();return Ad.set(d,u),u}function Td(i){Hd();let o=Date.now(),n=[];for(let d of i){if(d.type!=="tako"&&d.type!=="custom")continue;if(!d.apiKey||!d.baseUrl)continue;for(let e of["openai","claude"]){let u=Vo.get(Yd(d.baseUrl,e));if(u&&o-u.fetchedAt<Ic)continue;let r=Cn(d.baseUrl,d.apiKey,e);if(!u)n.push(r)}}return Promise.all(n).then(()=>{return})}var Ic=3600000,Qc=8000,qc=null,Vo,Ze=!1,Ad;var Xd=N(()=>{C();Vo=new Map,Ad=new Map});var fo=N(()=>{Ve();Xd()});import{homedir as Jc}from"os";import{join as Vd}from"path";function De(i,o){let n={...i};for(let[d,e]of Object.entries(o))if(e&&typeof e==="object"&&!Array.isArray(e)&&n[d]&&typeof n[d]==="object"&&!Array.isArray(n[d]))n[d]=De(n[d],e);else n[d]=e;return n}function Bc(i){if(i.model_providers?.crs)delete i.model_providers.crs;if(i.model_provider==="crs")delete i.model_provider;if(i.openai_base_url)delete i.openai_base_url;let o=i.model_providers?.tako;if(o)delete o.wire_api,delete o.request_max_retries,delete o.stream_max_retries,delete o.api_key,delete o.env_key;return i}function Ue(i){if(i.model_providers?.tako)delete i.model_providers.tako.supports_websockets;if(i.features){if(delete i.features.multi_agent,delete i.features.responses_websockets_v2,Object.keys(i.features).length===0)delete i.features}}async function Ac(i,o){let n=await import("fs/promises");try{await n.mkdir(Zd,{recursive:!0})}catch{}let d={};try{d=Cd(await n.readFile(Ee,"utf-8"))}catch{}if(d=Bc(d),i.type==="codex-subscription")if(delete d.model_provider,d.check_for_update_on_startup=!1,d.remote_compaction_v2=!1,Ue(d),i.authData)await Bun.write(_e,JSON.stringify(i.authData,null,2)+`
|
|
267
|
+
`);else await Bun.write(_e,JSON.stringify({OPENAI_API_KEY:null,auth_mode:"chatgpt"},null,2)+`
|
|
268
|
+
`);else{let e;if(i.type==="tako")e=`${Y}/v1`;else if(i.type==="deepseek")e="https://api.deepseek.com/v1";else e=`${i.baseUrl}/v1`;let r=o?.find((l)=>l.startsWith("model-"))?.slice(6)||i.model||"gpt-5.5",t=/^gpt[-.]/i.test(r),c;if(!t){if(c=ci.find((x)=>x.id===r)?.contextWindow,!c&&(i.type==="tako"||i.type==="custom")&&i.baseUrl){let x=Hi(i.baseUrl,"openai")?.find((w)=>w.id===r);if(x&&x.contextWindow>0)c=x.contextWindow}if(!c)c=i.modelContextWindow}else delete d.model_context_window;let a={name:"tako",base_url:e,requires_openai_auth:!0};if(i.apiKey)a.experimental_bearer_token=i.apiKey;Ue(d);let p={model_provider:"tako",model:r,check_for_update_on_startup:!1,remote_compaction_v2:!1,model_providers:{tako:a}};if(c)p.model_context_window=c;d=De(d,p)}await Bun.write(Ee,Od(d))}function Kd(i){if(i>=1e6)return"1M";if(i>0)return`${Math.round(i/1000)}k`;return"?"}function Kc(i){if(!i.baseUrl)return null;let o=Hi(i.baseUrl,"openai");if(!o||o.length===0)return null;let n=Zo(o);if(n.length===0)return null;return n.map((d)=>({id:`model-${d.id}`,label:{en:d.displayName,zh:d.displayName},shortLabel:d.displayName,description:{en:`Use ${d.displayName} (${Kd(d.contextWindow)} ctx)`,zh:`\u4F7F\u7528 ${d.displayName}\uFF08\u4E0A\u4E0B\u6587 ${Kd(d.contextWindow)}\uFF09`},flag:`--model ${d.id}`,args:["--model",d.id],group:"model"}))}function Vc(i){if(Ni(),i&&(i.type==="tako"||i.type==="custom")){let d=Kc(i);if(d)return d}let o=i?.type==="deepseek"?Xc:Tc,n=[];for(let d of o){let e=ci.find((t)=>t.id===d),u=Kd(e?.contextWindow??0),r=e?.displayName??d;n.push({id:`model-${d}`,label:{en:r,zh:r},shortLabel:r,description:{en:`Use ${r} (${u} ctx)`,zh:`\u4F7F\u7528 ${r}\uFF08\u4E0A\u4E0B\u6587 ${u}\uFF09`},flag:`--model ${d}`,args:["--model",d],group:"model"})}return n}function Zc(i){return[...Hc,...Vc(i)]}var Zd,Ee,_e,Yc,Hc,Tc,Xc;var je=N(()=>{E();C();He();fo();Gn();Zd=Vd(Jc(),".codex"),Ee=Vd(Zd,"config.toml"),_e=Vd(Zd,"auth.json");Yc={id:"codex",name:"Codex",package:"@openai/codex",command:"codex",runtime:"bun",continueArg:"--continue",brandColor:"blue",getEnvVars(i){return{}},setupConfigFiles:Ac,launchOptions:(i)=>Zc(i)},Hc=[{id:"search",label:{en:"Web Search",zh:"\u7F51\u7EDC\u641C\u7D22"},shortLabel:"Search",description:{en:"Enable real-time web search",zh:"\u542F\u7528\u5B9E\u65F6\u7F51\u9875\u641C\u7D22"},flag:"--search",args:["--search"]},{id:"bypass-sandbox",label:{en:"Bypass Sandbox",zh:"\u7ED5\u8FC7\u5BA1\u6279\u4E0E\u6C99\u7BB1"},shortLabel:"Bypass",description:{en:"DANGEROUS: skip all approvals & sandbox (use only in disposable envs)",zh:"\u5371\u9669\uFF1A\u8DF3\u8FC7\u6240\u6709\u5BA1\u6279\u4E0E\u6C99\u7BB1\u9650\u5236\uFF08\u4EC5\u9650\u9694\u79BB/\u4E34\u65F6\u73AF\u5883\u4F7F\u7528\uFF09"},flag:"--dangerously-bypass-approvals-and-sandbox",args:["--dangerously-bypass-approvals-and-sandbox"]}],Tc=["gpt-5.5","gpt-5.4","gpt-5.3-codex","gpt-5.3"],Xc=["deepseek-v4-flash","deepseek-v4-pro"];yo(Yc)});function di(i){switch(i){case"claude-subscription":return["claude-code"];case"codex-subscription":return["codex"];case"anthropic":return["claude-code"];case"deepseek":return["claude-code","codex"];case"xiaomi":return["claude-code"];case"custom":return["claude-code","codex"];case"tako":default:return}}function Fo(i){switch(i){case"deepseek":return"deepseek-v4-flash";case"xiaomi":return"mimo-v2.5-pro";case"tako":return;default:return}}function Fd(i){switch(i){case"deepseek":return"https://api.deepseek.com";case"xiaomi":return _d;default:return}}function Ud(i){return i?.startsWith("tp-")?iu:_d}function Eo(i){switch(i){case"deepseek":return["deepseek-v4-flash","deepseek-v4-pro"];case"xiaomi":return Ec;case"tako":case"anthropic":return Fc;default:return}}function Ti(i,o){let n=i.supportedClients;if(!n||n.length===0)return!0;return n.includes(o)}var io,Ed="https://api.deepseek.com/anthropic",_d="https://api.xiaomimimo.com/anthropic",iu="https://token-plan-cn.xiaomimimo.com/anthropic",Fc,Ec;var Si=N(()=>{io={"claude-subscription":{en:"Claude Subscription",zh:"Claude \u8BA2\u9605\u76F4\u8FDE"},"codex-subscription":{en:"Codex Subscription",zh:"Codex \u8BA2\u9605\u76F4\u8FDE"},tako:{en:"Tako Proxy",zh:"Tako \u4EE3\u7406"},anthropic:{en:"Anthropic Direct",zh:"Anthropic \u76F4\u8FDE"},deepseek:{en:"DeepSeek",zh:"DeepSeek"},xiaomi:{en:"Xiaomi MiMo",zh:"\u5C0F\u7C73 MiMo"},custom:{en:"Custom Proxy",zh:"\u81EA\u5B9A\u4E49\u4EE3\u7406"}};Fc=["claude-sonnet-4-6","claude-opus-4-6","claude-opus-4-7"],Ec=["mimo-v2.5-pro"]});var nu={};ii(nu,{spinner:()=>jc,setLogHandler:()=>Uc,resetLogHandler:()=>Dc,log:()=>L,createSpinner:()=>oo});function _c(i){let o=!!process.stderr.isTTY,n=(e)=>process.stderr.write(e),d=i;if(o)n(`\u23F3 ${i}`);else n(`\u23F3 ${i}
|
|
269
|
+
`);return{update(e){if(e===d)return;if(d=e,o)n(`\r\x1B[2K\u23F3 ${e}`);else n(`\u23F3 ${e}
|
|
270
|
+
`)},stop(e){if(o)n("\r\x1B[2K");if(e)n(`\u2713 ${e}
|
|
271
|
+
`)}}}function Uc(i){Pi=i}function Dc(){Pi=ou}function jc(){return{start(i){return Pi.spin(i)}}}function oo(){let i=null;return{start(o){i=Pi.spin(o)},stop(o){i?.stop(o),i=null},update(o){i?.update(o)}}}var ou,Pi,L;var Ci=N(()=>{ou={info:(i)=>console.log(`\u2139 ${i}`),warn:(i)=>console.log(`\u26A0 ${i}`),error:(i)=>console.error(`\u2717 ${i}`),success:(i)=>console.log(`\u2713 ${i}`),spin:_c},Pi=ou;L={info:(i)=>Pi.info(i),warn:(i)=>Pi.warn(i),error:(i)=>Pi.error(i),success:(i)=>Pi.success(i),message:(i)=>Pi.info(i),debug:(i)=>{if(process.env.TAKO_DEV)process.stderr.write(`[debug] ${i}
|
|
272
|
+
`)}}});var du={};ii(du,{t:()=>g,setLocale:()=>Dd,getLocale:()=>Ii,detectLocale:()=>no,clearLocaleOverride:()=>ia});function no(){if(In)return In;let i=process.env.LANG||process.env.LANGUAGE||process.env.LC_ALL||"";if(i.toLowerCase().includes("zh")||i.toLowerCase().includes("chinese"))return"zh";try{if(Intl.DateTimeFormat().resolvedOptions().locale.toLowerCase().startsWith("zh"))return"zh"}catch{}return"zh"}function Dd(i){In=i}function ia(){In=null}function g(i,o){let n=no(),d=i.split("."),e=oa;for(let r of d)if(e=e?.[r],!e)return i;let u=e[n]||e.en||i;if(o)for(let[r,t]of Object.entries(o))u=u.replace(`{${r}}`,String(t));return u}function Ii(){return no()}var In=null,oa;var H=N(()=>{oa={launcher:{starting:{en:"Starting {client}...",zh:"\u6B63\u5728\u542F\u52A8 {client}..."},directoryNotFound:{en:"Directory not found: {path}",zh:"\u76EE\u5F55\u4E0D\u5B58\u5728\uFF1A{path}"},apiKeyNotConfigured:{en:"API Key not configured",zh:"API Key \u672A\u914D\u7F6E"},error:{en:"Error: {message}",zh:"\u9519\u8BEF\uFF1A{message}"}},menu:{selectAction:{en:"Select an action:",zh:"\u8BF7\u9009\u62E9\u64CD\u4F5C\uFF1A"},launchClient:{en:"Launch {client}",zh:"\u542F\u52A8 {client}"},advanced:{en:"Advanced",zh:"\u9AD8\u7EA7"},advancedHint:{en:"Usage stats, configuration, etc.",zh:"\u7528\u91CF\u7EDF\u8BA1\u3001\u914D\u7F6E\u7B49"},exit:{en:"Exit",zh:"\u9000\u51FA"},advancedOptions:{en:"Advanced Options:",zh:"\u9AD8\u7EA7\u9009\u9879\uFF1A"},viewStats:{en:"View Usage Statistics",zh:"\u67E5\u770B\u7528\u91CF\u7EDF\u8BA1"},configApiKey:{en:"Configure API Key",zh:"\u914D\u7F6E API Key"},back:{en:"Back",zh:"\u8FD4\u56DE"},changeLanguage:{en:"Change Language",zh:"\u5207\u6362\u8BED\u8A00"},currentLanguage:{en:"Current Language: {lang}",zh:"\u5F53\u524D\u8BED\u8A00\uFF1A{lang}"},languageChanged:{en:"Language changed to {lang}",zh:"\u8BED\u8A00\u5DF2\u5207\u6362\u4E3A {lang}"},selectOptions:{en:"Select launch options (Space to toggle, Enter to confirm):",zh:"\u9009\u62E9\u542F\u52A8\u9009\u9879\uFF08\u7A7A\u683C\u5207\u6362\uFF0C\u56DE\u8F66\u786E\u8BA4\uFF09\uFF1A"},resetOptions:{en:"Reset Launch Options",zh:"\u91CD\u7F6E\u542F\u52A8\u9009\u9879"},optionsReset:{en:"Launch options have been reset. You will be prompted again next time.",zh:"\u542F\u52A8\u9009\u9879\u5DF2\u91CD\u7F6E\uFF0C\u4E0B\u6B21\u542F\u52A8\u65F6\u5C06\u91CD\u65B0\u9009\u62E9\u3002"}},language:{en:{en:"English",zh:"\u82F1\u8BED"},zh:{en:"Chinese",zh:"\u4E2D\u6587"}},banner:{welcome:{en:"Welcome!",zh:"\u6B22\u8FCE\u4F7F\u7528\uFF01"}},stats:{title:{en:"\uD83D\uDCCA Usage Statistics",zh:"\uD83D\uDCCA \u7528\u91CF\u7EDF\u8BA1"},totalRequests:{en:"Total Requests: {count} times",zh:"\u603B\u8C03\u7528\u6B21\u6570\uFF1A{count} \u6B21"},totalCost:{en:"Total Cost: {cost}",zh:"\u603B\u6D88\u8D39\uFF1A{cost}"},todayCost:{en:"Today's Cost: {cost}",zh:"\u4ECA\u65E5\u6D88\u8D39\uFF1A{cost}"},modelDistribution:{en:"Model Usage Distribution (Today):",zh:"\u6A21\u578B\u4F7F\u7528\u5206\u5E03\uFF08\u4ECA\u65E5\uFF09\uFF1A"},times:{en:"times",zh:"\u6B21"},refreshHint:{en:"{countdown}s until refresh | Press any key to return",zh:"{countdown}s \u540E\u5237\u65B0 | \u6309\u4EFB\u610F\u952E\u8FD4\u56DE"},fetching:{en:"Fetching usage statistics...",zh:"\u83B7\u53D6\u7528\u91CF\u7EDF\u8BA1..."},fetchFailed:{en:"Failed to fetch: {error}",zh:"\u83B7\u53D6\u5931\u8D25\uFF1A{error}"}},prompts:{enterApiKey:{en:"Please enter your API Key:",zh:"\u8BF7\u8F93\u5165\u60A8\u7684 API Key\uFF1A"},apiKeyPlaceholder:{en:"cr_xxxxxxxx",zh:"cr_xxxxxxxx"},validating:{en:"Validating API Key...",zh:"\u6B63\u5728\u9A8C\u8BC1 API Key..."},keyInvalidFormat:{en:"Invalid format, must start with cr_",zh:"\u683C\u5F0F\u4E0D\u6B63\u786E\uFF0C\u5FC5\u987B\u4EE5 cr_ \u5F00\u5934"},keyValidationFailed:{en:"Validation failed: {error}",zh:"\u9A8C\u8BC1\u5931\u8D25\uFF1A{error}"},keyConfigured:{en:"API Key configured successfully!",zh:"API Key \u914D\u7F6E\u6210\u529F\uFF01"}},cli:{version:{en:"Tako CLI v{version}",zh:"Tako CLI v{version}"},usage:{en:"Usage: tako [options] [command]",zh:"\u7528\u6CD5\uFF1Atako [\u9009\u9879] [\u547D\u4EE4]"},options:{en:"Options:",zh:"\u9009\u9879\uFF1A"},optionVersion:{en:" -v, --version Display version number",zh:" -v, --version \u663E\u793A\u7248\u672C\u53F7"},optionHelp:{en:" -h, --help Display help information",zh:" -h, --help \u663E\u793A\u5E2E\u52A9\u4FE1\u606F"},shortcuts:{en:"Shortcuts:",zh:"\u5FEB\u6377\u547D\u4EE4\uFF1A"},shortcutClaude:{en:" --claude [args...] Launch Claude Code (passes extra args through, e.g. --model)",zh:" --claude [\u53C2\u6570...] \u542F\u52A8 Claude Code\uFF08\u989D\u5916\u53C2\u6570\u900F\u4F20\u7ED9 claude\uFF0C\u5982 --model\uFF09"},shortcutCodex:{en:" --codex [args...] Launch Codex (passes extra args through)",zh:" --codex [\u53C2\u6570...] \u542F\u52A8 Codex\uFF08\u989D\u5916\u53C2\u6570\u900F\u4F20\u7ED9 codex\uFF09"},shortcutGemini:{en:" --gemini [args...] Launch Gemini CLI (passes extra args through)",zh:" --gemini [\u53C2\u6570...] \u542F\u52A8 Gemini CLI\uFF08\u989D\u5916\u53C2\u6570\u900F\u4F20\u7ED9 gemini\uFF09"},examples:{en:"Examples:",zh:"\u793A\u4F8B\uFF1A"},exampleInteractive:{en:" tako Interactive tool selection",zh:" tako \u4EA4\u4E92\u5F0F\u9009\u62E9\u5DE5\u5177"},exampleClaude:{en:" tako --claude Launch Claude Code directly",zh:" tako --claude \u76F4\u63A5\u542F\u52A8 Claude Code"},exampleClaudeModel:{en:" tako --claude --model claude-opus-4-7 Launch Claude Code with a specific model",zh:" tako --claude --model claude-opus-4-7 \u6307\u5B9A\u6A21\u578B\u542F\u52A8 Claude Code"},exampleCodex:{en:" tako --codex Launch Codex directly",zh:" tako --codex \u76F4\u63A5\u542F\u52A8 Codex"},exampleGemini:{en:" tako --gemini Launch Gemini CLI directly",zh:" tako --gemini \u76F4\u63A5\u542F\u52A8 Gemini CLI"},clientNotFound:{en:"{client} client not found",zh:"{client} \u5BA2\u6237\u7AEF\u672A\u627E\u5230"},cliError:{en:"Tako CLI encountered an error:",zh:"Tako CLI \u53D1\u751F\u9519\u8BEF\uFF1A"},launchFailed:{en:"Launch failed",zh:"\u542F\u52A8\u5931\u8D25"}},auth:{invalidFormat:{en:"Invalid format, must start with cr_",zh:"\u683C\u5F0F\u4E0D\u6B63\u786E\uFF0C\u5FC5\u987B\u4EE5 cr_ \u5F00\u5934"},validationFailed:{en:"Validation failed",zh:"\u9A8C\u8BC1\u5931\u8D25"},networkError:{en:"Network request failed",zh:"\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25"}},updater:{migrating:{en:"Detected old installation, migrating...",zh:"\u68C0\u6D4B\u5230\u65E7\u7248\u5B89\u88C5\u65B9\u5F0F\uFF0C\u6B63\u5728\u8FC1\u79FB..."},installingLocally:{en:"Installing to local directory...",zh:"\u6B63\u5728\u5B89\u88C5\u5230\u672C\u5730\u76EE\u5F55..."},migrationFailed:{en:"Local installation failed, skipping migration",zh:"\u672C\u5730\u5B89\u88C5\u5931\u8D25\uFF0C\u8DF3\u8FC7\u8FC1\u79FB"},installComplete:{en:"Local installation complete",zh:"\u672C\u5730\u5B89\u88C5\u5B8C\u6210"},migrationComplete:{en:"Detected old installation, migration complete. Please restart Tako CLI",zh:"\u68C0\u6D4B\u5230\u65E7\u7248\u5B89\u88C5\uFF0C\u5DF2\u5B8C\u6210\u8FC1\u79FB\uFF0C\u8BF7\u91CD\u65B0\u542F\u52A8 Tako CLI"},newVersionAvailable:{en:"New version v{version} available (current v{current})",zh:"\u53D1\u73B0\u65B0\u7248\u672C v{version}\uFF08\u5F53\u524D v{current}\uFF09"},pleaseRestart:{en:"Please restart Tako CLI to use the new version",zh:"\u8BF7\u91CD\u65B0\u542F\u52A8 Tako CLI \u4EE5\u4F7F\u7528\u65B0\u7248\u672C"}},region:{usingChinaMirror:{en:"Detected China mainland network, using domestic mirror",zh:"\u68C0\u6D4B\u5230\u4E2D\u56FD\u5927\u9646\u7F51\u7EDC\uFF0C\u4F7F\u7528\u56FD\u5185\u955C\u50CF\u6E90"},usingGlobalMirror:{en:"Using global mirror",zh:"\u4F7F\u7528\u56FD\u9645\u6E90"}},telemetry:{toggle:{en:"Toggle Telemetry",zh:"\u5207\u6362\u9065\u6D4B"},enabled:{en:"Telemetry is enabled",zh:"\u9065\u6D4B\u5DF2\u5F00\u542F"},disabled:{en:"Telemetry is disabled",zh:"\u9065\u6D4B\u5DF2\u5173\u95ED"},description:{en:"Anonymous usage data helps us improve Tako CLI",zh:"\u533F\u540D\u4F7F\u7528\u6570\u636E\u5E2E\u52A9\u6211\u4EEC\u6539\u8FDB Tako CLI"}},time:{justNow:{en:"just now",zh:"\u521A\u521A"},minutesAgo:{en:"{n}m ago",zh:"{n}\u5206\u949F\u524D"},hoursAgo:{en:"{n}h ago",zh:"{n}\u5C0F\u65F6\u524D"},yesterday:{en:"yesterday",zh:"\u6628\u5929"},daysAgo:{en:"{n}d ago",zh:"{n}\u5929\u524D"},weeksAgo:{en:"{n}w ago",zh:"{n}\u5468\u524D"},monthsAgo:{en:"{n}mo ago",zh:"{n}\u6708\u524D"}},claudeCode:{settingsDetected:{en:`Detected hardcoded config in Claude Code settings that conflicts with Tako:
|
|
273
|
+
{fields}`,zh:`\u68C0\u6D4B\u5230 Claude Code settings \u4E2D\u5B58\u5728\u4E0E Tako \u51B2\u7A81\u7684\u914D\u7F6E\uFF1A
|
|
274
|
+
{fields}`},confirmClean:{en:"Clean these settings? Tako will manage them automatically at launch",zh:"\u662F\u5426\u6E05\u7406\u8FD9\u4E9B\u914D\u7F6E\uFF1FTako \u542F\u52A8\u65F6\u4F1A\u81EA\u52A8\u6CE8\u5165\u6B63\u786E\u7684\u503C"},settingsCleaned:{en:"Settings cleaned, Tako will manage these configs automatically",zh:"\u5DF2\u6E05\u7406\u5B8C\u6210\uFF0CTako \u4F1A\u81EA\u52A8\u7BA1\u7406\u8FD9\u4E9B\u914D\u7F6E"},cleanSkipped:{en:"Skipped. Note: hardcoded settings may cause issues with Tako",zh:"\u5DF2\u8DF3\u8FC7\u3002\u6CE8\u610F\uFF1A\u5199\u6B7B\u7684\u914D\u7F6E\u53EF\u80FD\u5BFC\u81F4 Tako \u542F\u52A8\u5F02\u5E38"},usingIsolatedSettings:{en:"Using Tako-managed Claude Code settings for this launch: {path}",zh:"\u672C\u6B21\u542F\u52A8\u5C06\u4F7F\u7528 Tako \u6258\u7BA1\u7684 Claude Code settings\uFF1A{path}"},subscriptionMissingAuth:{en:"Selected Claude account has no captured credentials. Run `claude /login` for that account, then re-detect in Tako.",zh:"\u76EE\u6807 Claude \u8D26\u53F7\u7F3A\u5C11\u51ED\u636E\u3002\u8BF7\u7528 `claude /login` \u767B\u5F55\u8BE5\u8D26\u53F7\u540E\uFF0C\u8BA9 Tako \u91CD\u65B0\u68C0\u6D4B\u4E00\u6B21\u3002"},subscriptionSwitched:{en:"Switched Claude Code login to {email}",zh:"\u5DF2\u5207\u6362 Claude Code \u767B\u5F55\u8D26\u53F7\u4E3A {email}"},unknownCurrentAccount:{en:"Current Claude login ({email}) is not tracked by Tako; its tokens will be overwritten.",zh:"\u5F53\u524D Claude \u767B\u5F55\u8D26\u53F7 ({email}) \u672A\u88AB Tako \u8BB0\u5F55\uFF0C\u5207\u6362\u540E\u8BE5\u8D26\u53F7 token \u5C06\u88AB\u8986\u76D6\u3002"}},recentProjects:{title:{en:"Recent Projects",zh:"\u6700\u8FD1\u9879\u76EE"},launchInCurrent:{en:"Launch in current directory",zh:"\u5728\u5F53\u524D\u76EE\u5F55\u542F\u52A8"}},providers:{management:{en:"Manage Providers",zh:"\u7BA1\u7406\u670D\u52A1\u5546"},selectProvider:{en:"Select provider:",zh:"\u9009\u62E9\u670D\u52A1\u5546\uFF1A"},selectType:{en:"Provider type:",zh:"\u670D\u52A1\u5546\u7C7B\u578B\uFF1A"},enterName:{en:"Provider name:",zh:"\u670D\u52A1\u5546\u540D\u79F0\uFF1A"},enterApiKey:{en:"API Key:",zh:"API Key\uFF1A"},enterBaseUrl:{en:"Base URL:",zh:"\u57FA\u7840 URL\uFF1A"},add:{en:"Add Provider",zh:"\u6DFB\u52A0\u670D\u52A1\u5546"},edit:{en:"Edit Provider",zh:"\u7F16\u8F91\u670D\u52A1\u5546"},delete:{en:"Delete Provider",zh:"\u5220\u9664\u670D\u52A1\u5546"},setDefault:{en:"Set as Default",zh:"\u8BBE\u4E3A\u9ED8\u8BA4"},rescan:{en:"Re-scan Subscriptions",zh:"\u91CD\u65B0\u626B\u63CF\u8BA2\u9605"},back:{en:"Back",zh:"\u8FD4\u56DE"},added:{en:"Provider added",zh:"\u670D\u52A1\u5546\u5DF2\u6DFB\u52A0"},deleted:{en:"Provider deleted",zh:"\u670D\u52A1\u5546\u5DF2\u5220\u9664"},updated:{en:"Provider updated",zh:"\u670D\u52A1\u5546\u5DF2\u66F4\u65B0"},defaultSet:{en:"Default provider set",zh:"\u9ED8\u8BA4\u670D\u52A1\u5546\u5DF2\u8BBE\u7F6E"},noProviders:{en:"No providers configured",zh:"\u672A\u914D\u7F6E\u670D\u52A1\u5546"},noCompatible:{en:"No provider supports {client}",zh:"\u6CA1\u6709\u652F\u6301 {client} \u7684\u670D\u52A1\u5546"},defaultLabel:{en:"(default)",zh:"\uFF08\u9ED8\u8BA4\uFF09"},detected:{en:"Detected: {name}",zh:"\u68C0\u6D4B\u5230\uFF1A{name}"},confirmDelete:{en:"Delete {name}?",zh:"\u786E\u8BA4\u5220\u9664 {name}\uFF1F"},scanComplete:{en:"Scan complete, found {count} new provider(s)",zh:"\u626B\u63CF\u5B8C\u6210\uFF0C\u53D1\u73B0 {count} \u4E2A\u65B0\u670D\u52A1\u5546"}}}});var Qn={};ii(Qn,{writeClaudeAuth:()=>pa,readClaudeAuth:()=>aa});import{homedir as eu,platform as na,userInfo as da}from"os";import{join as i0}from"path";function ru(){return[process.env.USER||(()=>{try{return da().username}catch{return""}})(),"root"].filter(Boolean)}async function ea(i){let o=Bun.spawn(["security","find-generic-password","-s",uu,"-a",i,"-w"],{stdout:"pipe",stderr:"pipe"}),n=await new Response(o.stdout).text();if(await o.exited!==0)return null;try{return JSON.parse(n.trim())}catch{return null}}async function ua(){for(let i of ru()){let o=await ea(i);if(o)return o}return null}async function ra(i){let o=JSON.stringify(i),n=ru()[0],d=Bun.spawn(["security","add-generic-password","-U","-s",uu,"-a",n,"-w",o],{stdout:"pipe",stderr:"pipe"}),e=await d.exited;if(e!==0){let u=await new Response(d.stderr).text();throw Error(`security add-generic-password failed (${e}): ${u.trim()}`)}}async function ta(){try{let i=await import("fs/promises");return JSON.parse(await i.readFile(cu,"utf-8"))}catch{return null}}async function ca(i){let o=await import("fs/promises");await o.mkdir(tu,{recursive:!0}),await o.writeFile(cu,JSON.stringify(i,null,2)+`
|
|
275
|
+
`,{mode:384})}async function aa(){let i=au?await ua():await ta(),o;try{let n=await import("fs/promises"),d=JSON.parse(await n.readFile(jd,"utf-8"));if(d.oauthAccount&&typeof d.oauthAccount==="object")o=d.oauthAccount}catch{}return{credentials:i??void 0,oauthAccount:o}}async function pa(i){if(i.credentials)if(au)await ra(i.credentials);else await ca(i.credentials);if(i.oauthAccount){let o=await import("fs/promises"),n={};try{n=JSON.parse(await o.readFile(jd,"utf-8"))}catch{}n.oauthAccount=i.oauthAccount,await o.writeFile(jd,JSON.stringify(n,null,2)+`
|
|
276
|
+
`)}}var uu="Claude Code-credentials",tu,cu,jd,au;var qn=N(()=>{tu=i0(eu(),".claude"),cu=i0(tu,".credentials.json"),jd=i0(eu(),".claude.json"),au=na()==="darwin"});var pu={};ii(pu,{updateProvider:()=>Xi,setDefaultProvider:()=>n0,setClientProvider:()=>d0,resolveXiaomiBaseUrl:()=>Ud,resolveProviderContext:()=>_,migrateIfNeeded:()=>e0,mergeDetectedProviders:()=>Uo,isProviderCompatible:()=>Ti,getProvidersForClient:()=>Qi,getProviders:()=>V,getProvider:()=>la,getModelChoices:()=>Eo,getDefaultSupportedClients:()=>di,getDefaultProvider:()=>ei,getDefaultModel:()=>Fo,getDefaultBaseUrl:()=>Fd,getClientProvider:()=>qi,fixupProviders:()=>u0,detectProviders:()=>_o,deleteProvider:()=>o0,addProvider:()=>eo,XIAOMI_TOKEN_PLAN_URL:()=>iu,XIAOMI_ANTHROPIC_URL:()=>_d,PROVIDER_TYPE_NAMES:()=>io,DEEPSEEK_ANTHROPIC_URL:()=>Ed});async function V(){return(await z()).providers??[]}async function la(i){return(await V()).find((n)=>n.id===i)}async function ei(){let i=await z(),o=i.providers??[];if(o.length===0)return;if(i.defaultProviderId){let n=o.find((d)=>d.id===i.defaultProviderId);if(n)return n}return o[0]}async function Qi(i){return(await V()).filter((d)=>Ti(d,i)).sort((d,e)=>{let u=d.lastUsedAt?new Date(d.lastUsedAt).getTime():0,r=e.lastUsedAt?new Date(e.lastUsedAt).getTime():0;if(u!==r)return r-u;return new Date(e.createdAt).getTime()-new Date(d.createdAt).getTime()})}async function eo(i){let o=await z(),n={...i,id:crypto.randomUUID(),createdAt:new Date().toISOString()};if(o.providers=[...o.providers??[],n],!o.defaultProviderId)o.defaultProviderId=n.id;return await K(o),n}async function Xi(i,o){let n=await z(),d=n.providers??[],e=d.findIndex((u)=>u.id===i);if(e===-1)return;d[e]={...d[e],...o},n.providers=d,await K(n)}async function o0(i){let o=await z();if((o.providers??[]).find((d)=>d.id===i)?.builtin)return;if(o.providers=(o.providers??[]).filter((d)=>d.id!==i),o.defaultProviderId===i)o.defaultProviderId=o.providers[0]?.id;if(o.clientProviderMap){for(let[d,e]of Object.entries(o.clientProviderMap))if(e===i)delete o.clientProviderMap[d]}await K(o)}async function n0(i){let o=await z();if(!(o.providers??[]).some((d)=>d.id===i))return;o.defaultProviderId=i,await K(o)}async function qi(i){let o=await z(),n=o.clientProviderMap?.[i];if(n){let d=(o.providers??[]).find((e)=>e.id===n);if(d&&Ti(d,i))return d}return}async function d0(i,o){let n=await z();n.clientProviderMap={...n.clientProviderMap,[i]:o};let d=n.providers??[],e=d.findIndex((u)=>u.id===o);if(e!==-1)d[e]={...d[e],lastUsedAt:new Date().toISOString()},n.providers=d;await K(n)}function _(i){return{type:i.type,apiKey:i.apiKey,baseUrl:i.baseUrl,authData:i.authData,model:i.model,modelContextWindow:i.modelContextWindow}}async function ma(){try{let i=Bun.spawn(["claude","auth","status"],{stdout:"pipe",stderr:"pipe"}),o=await new Response(i.stdout).text();if(await i.exited!==0)return null;let d=JSON.parse(o.trim());if(!d.loggedIn||d.authMethod!=="claude.ai")return null;let e=d.subscriptionType||"pro",u=d.email||"",r=`Claude ${e.charAt(0).toUpperCase()+e.slice(1)}${u?` (${u})`:""}`,{readClaudeAuth:t}=await Promise.resolve().then(() => (qn(),Qn)),c=await t(),a=c.credentials||c.oauthAccount?{credentials:c.credentials,oauthAccount:c.oauthAccount}:void 0;return{id:crypto.randomUUID(),name:r,type:"claude-subscription",supportedClients:di("claude-subscription"),createdAt:new Date().toISOString(),email:u,subscriptionType:e,authData:a}}catch{return null}}async function xa(){try{let{homedir:i}=await import("os"),{join:o}=await import("path"),n=await import("fs/promises"),d=o(i(),".codex","auth.json"),e=JSON.parse(await n.readFile(d,"utf-8"));if(e.auth_mode!=="chatgpt"||!e.tokens?.access_token)return null;let u="";try{u=JSON.parse(atob(e.tokens.id_token.split(".")[1])).email||""}catch{}return{auth:e,email:u}}catch{return null}}async function wa(){let i=await xa();if(i){let{auth:o,email:n}=i;return{id:crypto.randomUUID(),name:n?`Codex Plus (${n})`:"Codex Subscription",type:"codex-subscription",email:n||void 0,supportedClients:di("codex-subscription"),authData:o,createdAt:new Date().toISOString()}}try{let o=Bun.spawn(["codex","login","status"],{stdout:"pipe",stderr:"pipe"}),n=await new Response(o.stdout).text();if(await o.exited!==0||!n.includes("Logged in")||n.includes("cr_"))return null;return{id:crypto.randomUUID(),name:"Codex Subscription",type:"codex-subscription",supportedClients:di("codex-subscription"),createdAt:new Date().toISOString()}}catch{return null}}async function _o(){let i=[],[o,n]=await Promise.all([ma(),wa()]);if(o)i.push(o);if(n)i.push(n);return i}async function Uo(i){let o=await z(),n=o.providers??[],d=new Set(n.map((u)=>`${u.type}:${u.email||""}`)),e=0;for(let u of i){let r=`${u.type}:${u.email||""}`;if(!d.has(r))n.push(u),d.add(r),e++;else if(u.authData){let t=n.find((c)=>c.type===u.type&&c.email===u.email);if(t)t.authData=u.authData}}if(e>0){if(o.providers=n,!o.defaultProviderId&&n.length>0)o.defaultProviderId=n[0].id;await K(o)}return e}async function e0(){let i=await z();if(!i.apiKey||i.providers&&i.providers.length>0)return!1;let o={id:crypto.randomUUID(),name:"Tako \u5B98\u65B9",type:"tako",apiKey:i.apiKey,baseUrl:Y,apiId:i.apiId,supportedClients:di("tako"),createdAt:new Date().toISOString(),builtin:!0};return i.providers=[o],i.defaultProviderId=o.id,await K(i),!0}async function u0(){let i=await z(),o=i.providers??[],n=!1;for(let d of o)if(d.type==="tako"&&!d.builtin)d.builtin=!0,n=!0;if(i.apiKey&&!o.some((d)=>d.type==="tako")){if(o.push({id:crypto.randomUUID(),name:"Tako \u5B98\u65B9",type:"tako",apiKey:i.apiKey,baseUrl:Y,apiId:i.apiId,supportedClients:di("tako"),createdAt:new Date().toISOString(),builtin:!0}),!i.defaultProviderId)i.defaultProviderId=o[o.length-1].id;n=!0}if(n)i.providers=o,await K(i)}var ai=N(()=>{C();Si();Si()});import{homedir as ya}from"os";import{dirname as sa,join as mu}from"path";function ba(i){if(i.startsWith("ANTHROPIC_"))return!0;return ha.includes(i)}function La(i){let o={...i},n=[],d=i.env;if(d&&typeof d==="object"&&!Array.isArray(d)){let e={...d};for(let u of Object.keys(e))if(ba(u))n.push(u),delete e[u];if(n.length>0)if(Object.keys(e).length===0)delete o.env;else o.env=e}return{settings:o,cleanedFields:n}}async function Na(i={}){let o=await import("fs/promises"),n=i.sourcePath??fa,d=i.targetPath??va,e;try{e=await o.readFile(n,"utf-8")}catch{return null}let u;try{u=JSON.parse(e)}catch{return null}let{settings:r,cleanedFields:t}=La(u);if(t.length===0)return null;if(i.logConflicts!==!1)L.warn(g("claudeCode.settingsDetected",{fields:t.join(", ")})),L.info(g("claudeCode.usingIsolatedSettings",{path:d}));return await o.mkdir(sa(d),{recursive:!0}),await o.writeFile(d,JSON.stringify(r,null,2)+`
|
|
277
|
+
`),{args:["--setting-sources","project,local","--settings",d],cleanedFields:t,settingsPath:d}}async function Wa(i){let{readClaudeAuth:o,writeClaudeAuth:n}=await Promise.resolve().then(() => (qn(),Qn)),{getProviders:d,updateProvider:e}=await Promise.resolve().then(() => (ai(),pu)),u=i.authData?.credentials,r=i.authData?.oauthAccount;if(!u){L.warn(g("claudeCode.subscriptionMissingAuth"));return}let t=await o(),c=t.oauthAccount?.emailAddress;if(c&&t.credentials){let l=(await d()).find((x)=>x.type==="claude-subscription"&&x.email===c);if(l){let x={credentials:t.credentials,oauthAccount:t.oauthAccount};if(JSON.stringify(l.authData)!==JSON.stringify(x))await e(l.id,{authData:x})}else if(c!==r?.emailAddress)L.warn(g("claudeCode.unknownCurrentAccount",{email:c}))}await n({credentials:u,oauthAccount:r});let a=r?.emailAddress||"?";L.info(g("claudeCode.subscriptionSwitched",{email:a}))}function Ga(i){let o=i.match(/^claude-(haiku|sonnet|opus)-(\d{1,2})-(\d{1,2})$/);if(o)return`${o[1].charAt(0).toUpperCase()+o[1].slice(1)} ${o[2]}.${o[3]}`;return ci.find((d)=>d.id===i)?.displayName??i}function vo(i){if(!i)return i;if(i.endsWith("[1m]")||/:1m$/i.test(i))return i;if(!/^(claude|deepseek|kimi|mimo)[-_]/i.test(i))return i;let o=ci.find((n)=>n.id===i);if(!o||o.contextWindow<1e6)return i;return`${i}[1m]`}function lu(i){if(i>=1e6)return"1M";if(i>0)return`${Math.round(i/1000)}k`;return"?"}function Sa(i){if(!i.baseUrl)return null;let o=Hi(i.baseUrl,"claude");if(!o||o.length===0)return null;let n=Zo(o);if(n.length===0)return null;return n.map((d)=>{let e=vo(d.id);return{id:`model-${d.id}`,label:{en:d.displayName,zh:d.displayName},shortLabel:d.displayName,description:{en:`Use ${d.displayName} (${lu(d.contextWindow)} ctx)`,zh:`\u4F7F\u7528 ${d.displayName}\uFF08\u4E0A\u4E0B\u6587 ${lu(d.contextWindow)}\uFF09`},flag:`--model ${e}`,args:[],envVars:{ANTHROPIC_MODEL:e},group:"model"}})}function Pa(i){if(Ni(),i&&(i.type==="tako"||i.type==="custom")){let d=Sa(i);if(d)return d}let o=i?.type==="deepseek"?$a:i?.type==="xiaomi"?Ma:ga,n=[];for(let d of o){let u=ci.find((a)=>a.id===d)?.contextWindow??0,r=u>=1e6?"1M":u>0?`${Math.round(u/1000)}k`:"?",t=Ga(d),c=vo(d);n.push({id:`model-${d}`,label:{en:t,zh:t},shortLabel:t,description:{en:`Use ${t} (${r} ctx)`,zh:`\u4F7F\u7528 ${t}\uFF08\u4E0A\u4E0B\u6587 ${r}\uFF09`},flag:`--model ${c}`,args:[],envVars:{ANTHROPIC_MODEL:c},group:"model"})}return n}function Ca(i){return[...za,...Pa(i)]}var fa,va,ha,ka,za,ga,$a,Ma;var r0=N(()=>{E();Si();Ci();H();fo();Gn();C();fa=mu(ya(),".claude","settings.json"),va=mu(Q,"claude-code","settings.json"),ha=["CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC","API_TIMEOUT_MS"];ka={id:"claude-code",name:"Claude Code",package:"@anthropic-ai/claude-code",command:"claude",runtime:"native",continueArg:"--continue",brandColor:"yellow",getEnvVars(i){let o={CLAUDE_CODE_DISABLE_UPDATE_CHECK:"1",DISABLE_AUTOUPDATER:"1"},n=i.model?vo(i.model):void 0;switch(i.type){case"claude-subscription":return o;case"tako":return{...o,ANTHROPIC_BASE_URL:`${i.baseUrl}/api`,ANTHROPIC_AUTH_TOKEN:i.apiKey,...n?{ANTHROPIC_MODEL:n}:{}};case"anthropic":return{...o,ANTHROPIC_API_KEY:i.apiKey,...n?{ANTHROPIC_MODEL:n}:{}};case"deepseek":return{...o,ANTHROPIC_BASE_URL:Ed,ANTHROPIC_AUTH_TOKEN:i.apiKey,...n?{ANTHROPIC_MODEL:n}:{}};case"xiaomi":return{...o,ANTHROPIC_BASE_URL:Ud(i.apiKey),ANTHROPIC_AUTH_TOKEN:i.apiKey,...n?{ANTHROPIC_MODEL:n}:{}};case"custom":return{...o,ANTHROPIC_BASE_URL:i.baseUrl,ANTHROPIC_AUTH_TOKEN:i.apiKey,...n?{ANTHROPIC_MODEL:n}:{}};default:return o}},async setupConfigFiles(i,o,n){let d=[];if(n?.forLaunch){let e=await Na();if(e)d=e.args}if(i.type==="claude-subscription")await Wa(i);return d.length>0?{args:d}:void 0},launchOptions:(i)=>Ca(i)},za=[{id:"skip-permissions",label:{en:"Skip Permissions",zh:"\u8DF3\u8FC7\u6743\u9650\u786E\u8BA4"},shortLabel:"Skip Perms",description:{en:"Auto-execute all operations without confirmation",zh:"\u5141\u8BB8\u81EA\u52A8\u6267\u884C\u6240\u6709\u64CD\u4F5C\uFF0C\u65E0\u9700\u786E\u8BA4"},flag:"--dangerously-skip-permissions",args:["--dangerously-skip-permissions"]},{id:"worktree",label:{en:"Git Worktree",zh:"Git Worktree"},shortLabel:"Worktree",description:{en:"Run in an isolated worktree",zh:"\u5728\u9694\u79BB\u7684 worktree \u4E2D\u8FD0\u884C"},flag:"--worktree",args:["--worktree"]}],ga=["claude-sonnet-4-6","claude-opus-4-6","claude-opus-4-7"],$a=["deepseek-v4-flash","deepseek-v4-pro"],Ma=["mimo-v2.5-pro"];yo(ka)});import{homedir as Ia}from"os";import{join as wu}from"path";async function Qa(){let i=await import("fs/promises");try{await i.mkdir(yu,{recursive:!0})}catch{}let o={};try{o=JSON.parse(await i.readFile(xu,"utf-8"))}catch{}let n=o.security?.auth||{};if(n.selectedType==="gemini-api-key")return;o.selectedAuthType="gemini-api-key",o.security={...o.security,auth:{...n,selectedType:"gemini-api-key"}},await Bun.write(xu,JSON.stringify(o,null,2)+`
|
|
278
|
+
`)}var yu,xu,qa;var su=N(()=>{E();yu=wu(Ia(),".gemini"),xu=wu(yu,"settings.json");qa={id:"gemini",name:"Gemini CLI",package:"@google/gemini-cli",command:"gemini",runtime:"bun",brandColor:"cyan",getEnvVars(i){return{GEMINI_API_KEY:i.apiKey,GOOGLE_GEMINI_BASE_URL:i.baseUrl||"https://tako.shiroha.tech"}},setupConfigFiles:Qa};yo(qa)});var t0=N(()=>{je();r0();su();E()});var Wu={};ii(Wu,{showRegionInfo:()=>p0,getNpmRegistry:()=>ui,getMirrors:()=>Lu,getLatestBunVersion:()=>Nu,getBunMirrorDownloadUrl:()=>a0,getBunInstallCommand:()=>c0,detectRegion:()=>Ki,MIRRORS:()=>Do});import{readFileSync as Oa,writeFileSync as Ra,mkdirSync as Ja}from"fs";import{join as vu}from"path";import{homedir as hu}from"os";function Aa(){let i=process.env.TAKO_REGION?.trim().toLowerCase();if(i==="cn"||i==="china")return"cn";if(i==="global"||i==="intl"||i==="international")return"global";return null}function Ya(){try{let i=Oa(bu,"utf-8"),o=JSON.parse(i);if(o.region!=="cn"&&o.region!=="global")return null;if(typeof o.detectedAt!=="number")return null;if(Date.now()-o.detectedAt>Ba)return null;return o.region}catch{return null}}function fu(i){try{Ja(vu(hu(),".tako"),{recursive:!0}),Ra(bu,JSON.stringify({region:i,detectedAt:Date.now()}),"utf-8")}catch{}}function Ha(){try{let o=Intl.DateTimeFormat().resolvedOptions().timeZone||"";if(/^Asia\/(Shanghai|Urumqi|Chongqing|Harbin|Kashgar|Hong_Kong|Macau)$/i.test(o)){if(/^Asia\/(Shanghai|Urumqi|Chongqing|Harbin|Kashgar)$/i.test(o))return"cn"}}catch{}let i=(process.env.LANG||process.env.LC_ALL||process.env.LC_MESSAGES||"").toLowerCase();if(i.startsWith("zh_cn")||i.startsWith("zh-cn"))return"cn";return null}async function Ta(){if(On)return On;return On=(async()=>{let o=[Xa,Ka,Va,Za].map((n)=>n().then((d)=>d?d:Promise.reject(Error("null"))));try{return await Promise.race([Promise.any(o),new Promise((d,e)=>setTimeout(()=>e(Error("net-timeout")),1200))])}catch{return"cn"}})(),On}async function Ki(){if(ho)return ho;let i=Aa();if(i)return ho=i,i;let o=Ya();if(o)return ho=o,o;let n=Ha();if(n)return ho=n,fu(n),n;let d=await Ta();return ho=d,fu(d),d}async function Xa(){try{let i=await fetch("https://ip-api.com/json/?fields=countryCode",{signal:AbortSignal.timeout(1000)});if(!i.ok)return null;return(await i.json()).countryCode==="CN"?"cn":"global"}catch{return null}}async function Ka(){try{let i=await fetch("https://ipinfo.io/json",{signal:AbortSignal.timeout(1000)});if(!i.ok)return null;return(await i.json()).country==="CN"?"cn":"global"}catch{return null}}async function Va(){try{let i=await fetch("https://api.ip.sb/geoip",{signal:AbortSignal.timeout(1000)});if(!i.ok)return null;return(await i.json()).country_code==="CN"?"cn":"global"}catch{return null}}async function Za(){let i=[async()=>{let o=await fetch("https://myip.ipip.net/json",{signal:AbortSignal.timeout(800)});if(!o.ok)return null;let n=await o.json(),d=n?.data?.location;if(Array.isArray(d)&&d[0]==="\u4E2D\u56FD")return"cn";let e=n?.data?.country_code;return e==="CN"?"cn":e?"global":null},async()=>{let o=await fetch("https://whois.pconline.com.cn/ipJson.jsp?json=true",{signal:AbortSignal.timeout(800)});if(!o.ok)return null;let n=await o.text();try{let d=JSON.parse(n.trim());if(d.proCode&&/^\d{6}$/.test(d.proCode))return"cn"}catch{}return null},async()=>{let o=await fetch("http://ip.3322.net/api/",{signal:AbortSignal.timeout(600)});if(!o.ok)return null;let n=(await o.text()).trim();if(/^\d+\.\d+\.\d+\.\d+$/.test(n))return"cn";return null}];try{return await Promise.any(i.map((o)=>o().then((n)=>n??Promise.reject())))}catch{return null}}async function Lu(){let i=await Ki();return Do[i]}async function ui(){return(await Lu()).npm}function c0(){return"curl -fsSL https://bun.sh/install | bash"}async function Nu(){let i=Do.cn.bunBinary,o=await fetch(`${i}/`,{signal:AbortSignal.timeout(1e4)});if(!o.ok)throw Error(`Failed to fetch bun versions: ${o.status}`);let d=(await o.json()).map((e)=>e.name.replace(/\/$/,"")).filter((e)=>/^bun-v\d+\.\d+\.\d+$/.test(e)).sort((e,u)=>{let r=e.replace("bun-v","").split(".").map(Number),t=u.replace("bun-v","").split(".").map(Number);for(let c=0;c<3;c++)if(r[c]!==t[c])return t[c]-r[c];return 0});if(d.length===0)throw Error("No bun versions found on mirror");return d[0]}async function a0(){let i=Do.cn.bunBinary,o=await Nu(),d={darwin:"darwin",win32:"windows",linux:"linux"}[process.platform]||"linux",e=process.arch==="arm64"?"aarch64":"x64",u=`bun-${d}-${e}`;return`${i}/${o}/${u}.zip`}async function p0(){let i=await Ki(),o=Do[i];if(i==="cn")L.info(`${g("region.usingChinaMirror")} npm: ${o.npm}`);else L.info(g("region.usingGlobalMirror"))}var ho=null,On=null,bu,Ba=2592000000,Do;var bo=N(()=>{H();Ci();bu=vu(hu(),".tako","region.json"),Do={cn:{npm:"https://registry.npmmirror.com",bunBinary:"https://registry.npmmirror.com/-/binary/bun"},global:{npm:"https://registry.npmjs.org",bunBinary:null}}});var Fa=class{constructor(i){this.baseUrl=i.baseUrl,this.headers={"Content-Type":"application/json",...i.defaultHeaders},this.maxRetries=i.maxRetries??3,this.initialRetryDelay=i.initialRetryDelay??500}async resolveHeaders(){let i={};for(let[o,n]of Object.entries(this.headers)){let d=await n;d!==null&&(i[o]=d)}return i}addHeader(i,o){this.headers[i]=o}async post(i,o,n,d){try{let e=await fetch(i,{method:"POST",headers:await this.resolveHeaders(),body:o?JSON.stringify(o??{}):void 0,keepalive:!0,...n});if(e.status===401)return null;if(e.status!==200&&e.status!==202)throw Error(`HTTP error! status: ${e.status}`);let u=await e.text();return u?JSON.parse(u):null}catch(e){if(d<this.maxRetries){let u=this.initialRetryDelay*2**d;return await new Promise((r)=>setTimeout(r,u)),this.post(i,o,n,d+1)}return console.error("Max retries reached:",e),null}}async fetch(i,o,n={}){let d=`${this.baseUrl}${i}`;return this.post(d,o,n,0)}},ku=class{constructor(i){this.groups=[],this.queue=[],this.options=i;let o={"openpanel-client-id":i.clientId};i.clientSecret&&(o["openpanel-client-secret"]=i.clientSecret),o["openpanel-sdk-name"]=i.sdk||"node",o["openpanel-sdk-version"]=i.sdkVersion||"1.3.1",this.api=new Fa({baseUrl:i.apiUrl||"https://api.openpanel.dev",defaultHeaders:o})}init(){}ready(){this.options.disabled=!1,this.options.waitForProfile=!1,this.flush()}shouldQueue(i){return!!(this.options.disabled||this.options.waitForProfile&&!this.profileId||i.type==="replay"&&!this.sessionId)}addQueue(i){i.type==="track"&&(i.payload.properties={...i.payload.properties??{},__timestamp:new Date().toISOString()}),this.queue.push(i)}async send(i){if(this.options.filter&&!this.options.filter(i))return Promise.resolve();if(this.shouldQueue(i))return this.addQueue(i),Promise.resolve();let o=await this.api.fetch("/track",i,{keepalive:i.type!=="replay"});this.deviceId=o?.deviceId;let n=!!this.sessionId;return this.sessionId=o?.sessionId,!n&&this.sessionId&&this.flush(),o}setGlobalProperties(i){this.global={...this.global,...i}}track(i,o){this.log("track event",i,o);let{groups:n,profileId:d,...e}=o??{},u=[...new Set([...this.groups,...n??[]])];return this.send({type:"track",payload:{name:i,profileId:d??this.profileId,groups:u.length>0?u:void 0,properties:{...this.global??{},...e}}})}identify(i){if(this.log("identify user",i),i.profileId&&(this.profileId=i.profileId,this.flush()),i.profileId&&Object.keys(i).length>1)return this.send({type:"identify",payload:{...i,properties:{...this.global,...i.properties}}})}upsertGroup(i){return this.log("upsert group",i),this.send({type:"group",payload:i})}setGroup(i){return this.log("set group",i),this.groups.includes(i)||(this.groups=[...this.groups,i]),this.send({type:"assign_group",payload:{groupIds:[i],profileId:this.profileId}})}setGroups(i){return this.log("set groups",i),this.groups=[...new Set([...this.groups,...i])],this.send({type:"assign_group",payload:{groupIds:i,profileId:this.profileId}})}alias(i){}increment(i){return this.send({type:"increment",payload:i})}decrement(i){return this.send({type:"decrement",payload:i})}revenue(i,o){let n=o?.deviceId;return delete o?.deviceId,this.track("revenue",{...o??{},...n?{__deviceId:n}:{},__revenue:i})}getDeviceId(){return this.deviceId??""}getSessionId(){return this.sessionId??""}fetchDeviceId(){return Promise.resolve(this.deviceId??"")}clear(){this.profileId=void 0,this.groups=[],this.deviceId=void 0,this.sessionId=void 0}buildFlushPayload(i){if(i.type==="replay")return i.payload;if(i.type==="track"){let o="groups"in i.payload?i.payload.groups??[]:[],n=[...new Set([...this.groups,...o])];return{...i.payload,profileId:i.payload.profileId??this.profileId,groups:n.length>0?n:void 0}}return i.type==="identify"||i.type==="increment"||i.type==="decrement"?{...i.payload,profileId:i.payload.profileId??this.profileId}:i.type==="assign_group"?{...i.payload,profileId:i.payload.profileId??this.profileId}:i.payload}flush(){let i=[];for(let o of this.queue){if(this.shouldQueue(o)){i.push(o);continue}let n=this.buildFlushPayload(o);this.send({...o,payload:n})}this.queue=i}log(...i){this.options.debug&&console.log("[OpenPanel.dev]",...i)}};var zu=()=>{};function gu(){if(!Lo)Lo=new ku({clientId:Ea,clientSecret:_a,apiUrl:Ua});return Lo}function $u(i,o,n){let d=gu().track(i,{profileId:o,...n}).catch(()=>{});Rn.push(d)}function Mu(i,o){let{email:n,...d}=o,e=gu().identify({profileId:i,...typeof n==="string"?{email:n}:{},firstName:String(d.platform||""),properties:d}).catch(()=>{});Rn.push(e)}async function Gu(){if(await Promise.allSettled(Rn),Rn.length=0,Lo){try{Lo.flush()}catch{}Lo=null}}var Ea="d65a6d4b-f702-4af6-98e7-bdb999e01d5f",_a="sec_1e0ea34016bc3a5f8ef5",Ua="https://op.shiroha.tech/api",Lo=null,Rn;var Su=N(()=>{zu();Rn=[]});function Pu(){return{cli_version:Da,platform:process.platform,arch:process.arch,locale:no(),node_version:process.version}}function Cu(i){return Bun.hash(i).toString(16).slice(0,8)}var Da="0.3.18";var l0=N(()=>{H()});async function Iu(){if(No!==null)return No;try{return No=(await z()).telemetryEnabled!==!1,No}catch{return No=!1,!1}}async function Qu(){try{let i=await z();if(i.apiId)return i.apiId;let o=i.providers??[],n=i.defaultProviderId,d=n?o.find((e)=>e.id===n):o[0];if(d){if(d.apiId)return d.apiId;if(d.email)return d.email;return d.id}return"anonymous"}catch{return"anonymous"}}async function T(){if(m0)return;try{if(!await Iu())return;let i=await z(),o=await Qu();if(o==="anonymous")return;let d=(i.providers??[]).find((u)=>u.email)?.email,e=await Ki();Mu(o,{...d?{email:d}:{},region:e,locale:no(),first_seen_version:ja,platform:process.platform,arch:process.arch}),m0=!0}catch{}}function O(i,o){ip(i,o).catch(()=>{})}async function ip(i,o){try{if(!await Iu())return;let n=await Qu();$u(i,n,{...Pu(),...o})}catch{}}async function jo(){await Gu()}function U(){No=null,m0=!1}var ja="0.3.18",m0=!1,No=null;var xi=N(()=>{Su();C();bo();H();l0();l0()});function ep(i,o){let n=[];if(o.phase)n.push(o.phase);if(o.pkgCount>0)n.push(`\u5DF2\u5904\u7406 ${o.pkgCount} \u4E2A\u5305`);return n.push(`${o.elapsedSec}s`),`${i} \xB7 ${n.join(" \xB7 ")}`}async function Jn(i,o,n){let d=Date.now(),e={phase:"\u6B63\u5728\u51C6\u5907",pkgCount:0,elapsedSec:0},u=[],r=()=>{e.elapsedSec=Math.floor((Date.now()-d)/1000),n(ep(o,e))};r();let t=setInterval(r,1000),c=(p)=>{if(!p)return;if(u.push(p),op.test(p))e.phase="\u89E3\u6790\u4F9D\u8D56";else if(qu.test(p)){e.phase="\u4E0B\u8F7D\u5E76\u89E3\u538B";let l=p.match(qu);if(l)e.pkgCount=parseInt(l[1],10)}else if(np.test(p))e.phase="\u5199\u5165 lockfile";else if(dp.test(p))e.phase="\u5B8C\u6210";r()},a=async(p)=>{if(!p)return;let l=p.getReader(),x=new TextDecoder,w="";try{while(!0){let{done:y,value:s}=await l.read();if(y)break;w+=x.decode(s,{stream:!0}).replace(/\r/g,"");let b=w.split(`
|
|
279
|
+
`);w=b.pop()??"";for(let f of b)c(f)}if(w)c(w)}finally{l.releaseLock()}};try{await Promise.all([a(i.stderr),a(i.stdout)])}finally{clearInterval(t)}return u.join(`
|
|
280
|
+
`)}var op,qu,np,dp;var x0=N(()=>{op=/^Resolving dependencies/,qu=/^Resolved, downloaded and extracted \[(\d+)\]/,np=/^Saved lockfile/,dp=/^(\d+) packages? installed/});function up(i){return i.replace(/\r/g,`
|
|
281
|
+
`).replace(/\n{3,}/g,`
|
|
282
|
+
|
|
283
|
+
`).trim()}function Ju(i,o){for(let n of i.split(/\r?\n/)){let d=n.trim();if(!d)continue;if(o.some((e)=>e.test(d)))return d}return null}function Wo(i,o="\u672A\u77E5\u9519\u8BEF"){let n=up(i??"");if(!n)return o;let d=Ju(n,[/HTTP error!?\s*status:\s*\d+/i,/registry http\s+\d+/i,/models\.dev http\s+\d+/i]);if(d){if(d.match(/\b(?:status:|http)\s*(\d{3})\b/i)?.[1]==="524")return"\u7F51\u7EDC\u8BF7\u6C42\u8D85\u65F6\uFF08HTTP 524\uFF09\uFF0Cregistry \u6216\u4EE3\u7406\u4E0A\u6E38\u672A\u53CA\u65F6\u54CD\u5E94\u3002\u8BF7\u7A0D\u540E\u91CD\u8BD5\uFF0C\u6216\u5207\u6362 TAKO_REGION/global \u540E\u91CD\u8BD5\u3002";return`\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25\uFF1A${d}`}let e=Ju(n,[/\b(error|failed|timeout|timed out|network|ECONN|ETIMEDOUT|ENOTFOUND|EAI_AGAIN)\b/i]);if(e)return e.slice(0,800);return n.length>800?`${n.slice(0,800)}...`:n}function yp(i){try{if(process.stdin.isTTY)process.stdin.setRawMode(i);process.stdin.pause()}catch{}}async function Au(i,o){if(!process.stdin.isTTY||!process.stdout.isTTY)return o;return new Promise((n)=>{let d=Boolean(process.stdin.isRaw),e=()=>{process.stdin.off("data",u),yp(d)},u=(r)=>{let t=r.toString("utf8");if(t==="\x03"){e(),process.kill(process.pid,"SIGINT"),n(o);return}let c=i(t);if(c!==void 0)e(),n(c)};if(process.stdin.on("data",u),process.stdin.resume(),process.stdin.isTTY)process.stdin.setRawMode(!0)})}async function Yu(i){let o=i.defaultValue??!0,n=o?"[Y/n]":"[y/N]";process.stdout.write(`
|
|
284
|
+
? ${i.message} ${n} `);let d=await Au((e)=>{if(e==="\r"||e===`
|
|
285
|
+
`)return o;if(e==="\x1B")return!1;if(e==="y"||e==="Y")return!0;if(e==="n"||e==="N")return!1;return},o);return process.stdout.write(d?`Yes
|
|
286
|
+
`:`No
|
|
287
|
+
`),d}async function Hu(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 Au((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 R}from"path";function sp(i){return i.startsWith(bi)}function Tu(i){return{...process.env,BUN_CONFIG_REGISTRY:i,BUN_INSTALL_CACHE_DIR:zd}}async function fp(){try{if(!await Bun.file(A).exists())return null;let o=Bun.spawn([A,"--version"],{stdout:"pipe",stderr:"pipe"});if(await o.exited,o.exitCode!==0)return null;return(await new Response(o.stdout).text()).trim()}catch{return null}}async function Xu(){return await fp()!==null}async function vp(){if(process.platform==="win32")return!0;try{let o=Bun.spawn(["which","unzip"],{stdout:"pipe",stderr:"pipe"});if(await o.exited,o.exitCode===0)return!0}catch{}L.warn("\u6B63\u5728\u5B89\u88C5\u7CFB\u7EDF\u4F9D\u8D56 (unzip)...");let i=["apt-get update -qq && apt-get install -y -qq unzip","yum install -y -q unzip","dnf install -y -q unzip","pacman -S --noconfirm unzip","apk add --quiet unzip"];for(let o of i)try{let n=Bun.spawn(["bash","-c",`sudo ${o} 2>/dev/null || ${o}`],{stdout:"pipe",stderr:"pipe"});if(await n.exited,n.exitCode===0)return!0}catch{}return!1}async function hp(i){let o=await import("fs/promises"),{join:n}=await import("path"),d=process.platform==="win32",e=d?"bun.exe":"bun",u=await a0();L.info(`\u4ECE npmmirror \u4E0B\u8F7D: ${u}`);let r=await fetch(u);if(!r.ok)throw Error(`\u4E0B\u8F7D\u5931\u8D25: ${r.status}`);let t=n(i,"bun-download.zip");await Bun.write(t,r);let c=n(i,"bin");if(await o.mkdir(c,{recursive:!0}),d){let p=`Expand-Archive -Path "${t}" -DestinationPath "${i}" -Force`,l=Bun.spawn(["powershell","-Command",p],{stdout:"pipe",stderr:"pipe"});if(await l.exited,l.exitCode!==0)throw Error("\u89E3\u538B\u5931\u8D25")}else{let p=Bun.spawn(["unzip","-oq",t,"-d",i],{stdout:"pipe",stderr:"pipe"});if(await p.exited,p.exitCode!==0)throw Error("\u89E3\u538B\u5931\u8D25")}let a=await o.readdir(i);for(let p of a){let l=n(i,p);if((await o.stat(l)).isDirectory()&&p.startsWith("bun-")){let w=n(l,e);try{if(await o.access(w),await o.rename(w,n(c,e)),!d)await o.chmod(n(c,e),493);await o.rm(l,{recursive:!0,force:!0});break}catch{}}}return await o.rm(t,{force:!0}),!0}async function bp(){let i=oo();if(!await vp())return L.error("\u8BF7\u5148\u624B\u52A8\u5B89\u88C5 unzip: apt install unzip / yum install unzip"),!1;await p0(),i.start("\u6B63\u5728\u5B89\u88C5 Tako \u4E13\u5C5E Bun \u8FD0\u884C\u65F6...");try{if(await(await import("fs/promises")).mkdir(bi,{recursive:!0}),await Ki()==="cn")await hp(bi);else if(process.platform==="win32"){let d=`$env:BUN_INSTALL="${bi}"; irm bun.sh/install.ps1 | iex`;if(await Bun.spawn(["powershell","-Command",d],{stdout:"inherit",stderr:"inherit"}).exited!==0)return i.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}else{let d=`BUN_INSTALL="${bi}" ${c0()}`;if(await Bun.spawn(["bash","-c",d],{stdout:"inherit",stderr:"inherit"}).exited!==0)return i.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}return uo=A,i.stop("Tako \u4E13\u5C5E Bun \u5B89\u88C5\u5B8C\u6210"),L.info(`\u5B89\u88C5\u4F4D\u7F6E: ${bi}`),!0}catch(o){return i.stop("Bun \u5B89\u88C5\u5931\u8D25"),!1}}async function Lp(){if(await Xu())return uo=A,!0;return L.warn("\u672A\u68C0\u6D4B\u5230 Tako \u4E13\u5C5E Bun\uFF0C\u6B63\u5728\u81EA\u52A8\u5B89\u88C5..."),L.info("\uFF08\u4E0D\u4F1A\u5F71\u54CD\u60A8\u7CFB\u7EDF\u4E2D\u5DF2\u5B89\u88C5\u7684 Node.js \u6216 Bun\uFF09"),await bp()}async function Wi(){if(uo){if(!sp(uo))uo=A;return uo}if(await Xu())return uo=A,A;return A}async function b0(i){try{let o=await ui(),n=await fetch(`${o}/${i}/latest`);if(!n.ok)return null;return(await n.json()).version}catch{return null}}async function Np(i){return(await z()).installedClients[i.id]?.version||null}async function Wp(i,o){let n=R(i,"node_modules",o,"package.json");try{return await Bun.file(n).exists()}catch{return!1}}async function Ku(i){let o=Gi(i.id);return Wp(o,i.package)}async function Vu(i){let o=await Np(i);if(!o)return!0;let n=await b0(i.package);if(!n)return!1;return o!==n}function Zu(i){let{platform:o,arch:n}=process,d=`${o}-${n}`;for(let[e,u]of Object.entries(i))if(e.endsWith(d))return{pkg:e,version:u};return null}async function Fu(i,o,n,d){let e=R(o,"node_modules",i.package,"package.json");try{let u=Bun.file(e);if(!await u.exists())return;let t=(await u.json()).optionalDependencies;if(!t||typeof t!=="object")return;let c=Zu(t);if(!c)return;let p=process.platform==="win32"?`${i.command}.exe`:i.command,l=R(o,"node_modules",c.pkg,p),x=Bun.file(l);if(await x.exists()&&x.size>1024)return;L.info(`\u6B63\u5728\u5B89\u88C5\u5E73\u53F0\u5305 ${c.pkg}...`);for(let w of[c.version,"latest"]){let y=Bun.spawn([n,"add",`${c.pkg}@${w}`],{cwd:o,stdout:"pipe",stderr:"pipe",env:Tu(d)});if(await y.exited,y.exitCode===0)break;if(w==="latest"){let s=await new Response(y.stderr).text();L.warn(`\u5E73\u53F0\u5305\u5B89\u88C5\u5931\u8D25: ${s.slice(0,200)}`)}}}catch(u){L.warn(`\u5E73\u53F0\u5305\u68C0\u67E5\u5F02\u5E38: ${u instanceof Error?u.message:"\u672A\u77E5\u9519\u8BEF"}`)}}async function f0(i,o){let n=await import("fs/promises"),d=R(o,"node_modules",i.package,"package.json");try{let e=Bun.file(d);if(!await e.exists())return!1;let u=await e.json(),r=u.optionalDependencies;if(!r)return!0;let t=Zu(r);if(!t)return L.warn(`\u672A\u627E\u5230\u5339\u914D\u7684\u5E73\u53F0\u5305 (${process.platform}-${process.arch})`),!1;let c=u.bin,a=typeof c==="string"?c:c?.[i.command];if(!a)return!1;let p=R(o,"node_modules",i.package,a),l=process.platform==="win32",x=l?`${i.command}.exe`:i.command,w=R(o,"node_modules",t.pkg,x),y=Bun.file(w);if(await y.exists()&&y.size>1024){if(await Bun.write(p,y),!l)await n.chmod(p,493);return!0}let s=R(o,"node_modules",i.package,"install.cjs");if(await Bun.file(s).exists()){L.info("\u6B63\u5728\u901A\u8FC7 postinstall \u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236...");let f=await Wi(),h=Bun.spawn([f,s],{cwd:R(o,"node_modules",i.package),stdout:"pipe",stderr:"pipe"});if(await h.exited,h.exitCode!==0){let k=await new Response(h.stderr).text();L.warn(`postinstall \u5931\u8D25: ${k.slice(0,200)}`)}let M=Bun.file(p);if(await M.exists()&&M.size>1024){if(!l)await n.chmod(p,493);return!0}}L.info("\u6B63\u5728\u4ECE registry \u4E0B\u8F7D\u539F\u751F\u4E8C\u8FDB\u5236...");let b=await ui();for(let f of[t.version,"latest"])try{let h=await fetch(`${b}/${t.pkg}/${f}`);if(!h.ok)continue;let k=(await h.json()).dist?.tarball;if(!k)continue;let B=R(Q,".tmp-extract-"+Date.now());await n.mkdir(B,{recursive:!0});let li=R(B,"pkg.tgz"),mo=Bun.spawn(["curl","-fsSL","-o",li,k],{stdout:"pipe",stderr:"pipe"});if(await mo.exited,mo.exitCode!==0){let ic=await new Response(mo.stderr).text();L.warn(`curl \u4E0B\u8F7D\u5931\u8D25: ${ic.slice(0,200)}`),await n.rm(B,{recursive:!0,force:!0}).catch(()=>{});continue}let Yo=Bun.file(li).size;if(Yo<1024){L.warn(`\u4E0B\u8F7D\u6587\u4EF6\u5F02\u5E38 (${Yo} bytes, url: ${k.slice(0,100)})`),await n.rm(B,{recursive:!0,force:!0}).catch(()=>{});continue}let Ld=Bun.spawn(["tar","xzf",li,"-C",B,`package/${x}`],{stdout:"pipe",stderr:"pipe"});await Ld.exited;let Dt=R(B,"package",x),Nd=Bun.file(Dt);if(await Nd.exists()&&Nd.size>1024){if(await Bun.write(p,Nd),!l)await n.chmod(p,493);return await n.rm(B,{recursive:!0,force:!0}).catch(()=>{}),!0}let jt=await new Response(Ld.stderr).text();L.warn(`tar \u63D0\u53D6\u5931\u8D25 (tgz=${Yo} bytes, exit=${Ld.exitCode}): ${jt.slice(0,200)}`),await n.rm(B,{recursive:!0,force:!0}).catch(()=>{})}catch(h){L.warn(`\u4E0B\u8F7D\u5931\u8D25: ${h instanceof Error?h.message:"\u672A\u77E5\u9519\u8BEF"}`)}if(b!=="https://registry.npmjs.org")try{let f=`https://registry.npmjs.org/${t.pkg}/-/${t.pkg.split("/").pop()}-${t.version}.tgz`;L.info("\u6B63\u5728\u4ECE npmjs.org \u76F4\u8FDE\u4E0B\u8F7D...");let h=R(Q,".tmp-extract-"+Date.now());await n.mkdir(h,{recursive:!0});let M=R(h,"pkg.tgz"),k=Bun.spawn(["curl","-fsSL","-o",M,f],{stdout:"pipe",stderr:"pipe"});if(await k.exited,k.exitCode===0&&Bun.file(M).size>1024){await Bun.spawn(["tar","xzf",M,"-C",h,`package/${x}`],{stdout:"pipe",stderr:"pipe"}).exited;let li=Bun.file(R(h,"package",x));if(await li.exists()&&li.size>1024){if(await Bun.write(p,li),!l)await n.chmod(p,493);return await n.rm(h,{recursive:!0,force:!0}).catch(()=>{}),!0}}await n.rm(h,{recursive:!0,force:!0}).catch(()=>{})}catch{}return!1}catch(e){return L.warn(`\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236\u5931\u8D25: ${e instanceof Error?e.message:"\u672A\u77E5\u9519\u8BEF"}`),!1}}async function v0(i,o=!1){let n=oo(),d=Gi(i.id);try{if(!await Lp())return{success:!1,error:"Tako \u4E13\u5C5E Bun \u5B89\u88C5\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u6216\u624B\u52A8\u5220\u9664 ~/.tako/bun \u76EE\u5F55\u540E\u91CD\u8BD5"};let e=await Ku(i),u=o||await Vu(i);if(e&&!u)return{success:!0};let r=e?"\u66F4\u65B0":"\u5B89\u88C5",t=`\u6B63\u5728${r} ${i.name}`;n.start(t);let c=await import("fs/promises");await c.mkdir(d,{recursive:!0});let a=R(d,"package.json");if(!await Bun.file(a).exists())await Bun.write(a,JSON.stringify({name:`tako-${i.id}`,private:!0,dependencies:{}},null,2));let l=await Wi(),x=await ui(),w=await Ki();if(L.info(`\u7F51\u7EDC\u73AF\u5883: ${w==="cn"?"\u56FD\u5185\uFF08npmmirror\uFF09":"\u6D77\u5916"} | registry: ${x}`),e){let M=R(d,"bun.lock");await c.rm(M,{force:!0}).catch(()=>{})}let y=Bun.spawn([l,"add",`${i.package}@latest`],{cwd:d,stdout:"pipe",stderr:"pipe",env:Tu(x)}),s=await Jn(y,t,(M)=>n.update(M));if(await y.exited!==0){if(n.stop(),!e)await c.rm(a,{force:!0}).catch(()=>{});return{success:!1,error:Wo(s)}}await Fu(i,d,l,x),await f0(i,d);let f=await b0(i.package),h=(await z()).installedClients[i.id]?.version;if(f){let M=await z();if(M.installedClients[i.id]={version:f,installedAt:new Date().toISOString()},await Ui(M),e&&h)O("client_updated",{client_id:i.id,from_version:h,to_version:f});else O("client_installed",{client_id:i.id,client_version:f})}return n.stop(`${i.name} ${r}\u5B8C\u6210`),{success:!0}}catch(e){return n.stop(),{success:!1,error:Wo(e instanceof Error?e.message:void 0)}}}async function y0(i){try{let o=Bun.file(i);if(!await o.exists())return!0;if(o.size<100)return!0;let d=new Uint8Array(await o.slice(0,4).arrayBuffer());if(d[0]===127&&d[1]===69&&d[2]===76&&d[3]===70)return!1;if(d[0]===254||d[0]===207||d[0]===206||d[0]===202)return!1;if(d[0]===77&&d[1]===90)return!1;return!0}catch{return!0}}async function s0(i){if(i.runtime!=="native")return;let o=Gi(i.id),n=R(o,"node_modules",i.package,"package.json");try{let d=Bun.file(n);if(!await d.exists())return;let u=(await d.json()).bin;if(!u)return;let r=typeof u==="string"?u:u[i.command];if(!r)return;let t=R(o,"node_modules",i.package,r);if(!await y0(t))return;L.info("\u6B63\u5728\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236...");let c=await Wi(),a=await ui();if(await Fu(i,o,c,a),!await f0(i,o)||await y0(t)){if(L.warn("\u539F\u751F\u4E8C\u8FDB\u5236\u4FEE\u590D\u5931\u8D25\uFF0C\u6B63\u5728\u91CD\u65B0\u5B89\u88C5..."),await(await import("fs/promises")).rm(o,{recursive:!0,force:!0}),(await v0(i)).success)if(await f0(i,o),await y0(t))L.warn("\u91CD\u65B0\u5B89\u88C5\u540E\u4ECD\u65E0\u6CD5\u5B89\u88C5\u539F\u751F\u4E8C\u8FDB\u5236");else L.success("\u91CD\u65B0\u5B89\u88C5\u5B8C\u6210")}else L.success("\u539F\u751F\u4E8C\u8FDB\u5236\u5B89\u88C5\u5B8C\u6210")}catch{}}async function Eu(i){if(!await Ku(i)){let d=await v0(i);if(d.success)await s0(i);return d}if(await s0(i),await Vu(i)){let d=await b0(i.package),e=(await z()).installedClients[i.id]?.version||"\u672A\u77E5",u=d?`${e} \u2192 ${d}`:"\u6709\u65B0\u7248\u672C\u53EF\u7528";if(L.info(`${i.name} \u53D1\u73B0\u66F4\u65B0: ${u}`),await kp(i.id))return L.info("\u4ECA\u65E5\u5DF2\u8DF3\u8FC7\u66F4\u65B0\uFF0C\u4F7F\u7528\u5F53\u524D\u7248\u672C"),{success:!0};if(!await Yu({message:`\u662F\u5426\u66F4\u65B0 ${i.name}\uFF1F`,defaultValue:!1}))return await zp(i.id),L.info("\u8DF3\u8FC7\u66F4\u65B0\uFF0C\u4F7F\u7528\u5F53\u524D\u7248\u672C"),{success:!0};let t=await v0(i,!0);if(t.success)return await s0(i),t;return L.warn(`\u66F4\u65B0 ${i.name} \u5931\u8D25\uFF1A${t.error??"\u672A\u77E5\u9519\u8BEF"}`),L.info("\u7EE7\u7EED\u4F7F\u7528\u5F53\u524D\u5DF2\u5B89\u88C5\u7248\u672C"),{success:!0,skippedUpdate:!0,error:t.error}}return{success:!0}}async function kp(i){try{let o=Bun.file(h0);if(!await o.exists())return!1;let d=(await o.json())[i];if(!d)return!1;let e=new Date().toISOString().slice(0,10);return d===e}catch{return!1}}async function zp(i){try{let o={},n=Bun.file(h0);if(await n.exists())try{o=await n.json()}catch{}o[i]=new Date().toISOString().slice(0,10),await Bun.write(h0,JSON.stringify(o))}catch{}}var uo=null,h0;var dn=N(()=>{Ci();E();C();bo();xi();x0();h0=R(Q,".update-dismissed.json")});import{homedir as gp}from"os";async function N0(i){try{return(await(await import("fs/promises")).stat(i)).isDirectory()}catch{return!1}}async function _u(i,o,n){let d=await z(),e=d.recentProjects||[],u=new Date().toISOString(),r=e.findIndex((c)=>c.path===i);if(r>=0){let c=e[r],a=c.clientUsage||{},p=a[o]||{count:0,lastAt:u};e[r]={...c,launchCount:c.launchCount+1,lastLaunchedAt:u,lastClientId:o,clientUsage:{...a,[o]:{count:p.count+1,lastAt:u,lastSelectedOptionIds:n??p.lastSelectedOptionIds}}}}else e.push({path:i,launchCount:1,lastLaunchedAt:u,lastClientId:o,clientUsage:{[o]:{count:1,lastAt:u,lastSelectedOptionIds:n}}});let t=e.sort((c,a)=>new Date(a.lastLaunchedAt).getTime()-new Date(c.lastLaunchedAt).getTime()).slice(0,$p);d.recentProjects=t,await K(d)}async function Bn(i){let n=(await z()).recentProjects||[],d=process.cwd(),u=n.find((t)=>t.path===d)?.clientUsage?.[i]?.lastSelectedOptionIds;if(u)return u;return n.filter((t)=>t.path!==d&&t.clientUsage?.[i]?.lastSelectedOptionIds).sort((t,c)=>{let a=new Date(t.clientUsage[i].lastAt).getTime();return new Date(c.clientUsage[i].lastAt).getTime()-a})[0]?.clientUsage?.[i]?.lastSelectedOptionIds??[]}function Mp(i,o){let n=i.clientUsage?.[o];if(n)return new Date(n.lastAt).getTime();if(i.lastClientId===o)return new Date(i.lastLaunchedAt).getTime();return 0}async function Uu(i,o=L0,n=!0){let e=(await z()).recentProjects||[],u=process.cwd(),t=e.filter((a)=>{if(n&&a.path===u)return!1;return a.clientUsage?.[i]||a.lastClientId===i}).map((a)=>({...a,lastUsedTime:Mp(a,i)})).sort((a,p)=>p.lastUsedTime-a.lastUsedTime),c=[];for(let{lastUsedTime:a,...p}of t){if(c.length>=o)break;if(await N0(p.path))c.push(p)}return c}async function Du(){let o=(await z()).recentProjects||[],n=process.cwd();return o.find((e)=>e.path===n)?.lastClientId||null}function W0(i,o=25){let n=gp(),d=i.startsWith(n)?"~"+i.slice(n.length):i;if(d.length>o){let u=d.split("/").pop()||"";if(u.length>o-4)d="..."+u.slice(-o+3);else d=`.../${u}`}return d}function ju(i){let{t:o}=(H(),uc(du)),n=Date.now(),d=new Date(i).getTime(),e=n-d,u=Math.floor(e/60000),r=Math.floor(e/3600000),t=Math.floor(e/86400000),c=Math.floor(t/7),a=Math.floor(t/30);if(u<1)return o("time.justNow");if(u<60)return o("time.minutesAgo",{n:u});if(r<24)return o("time.hoursAgo",{n:r});if(t===1)return o("time.yesterday");if(t<7)return o("time.daysAgo",{n:t});if(t<30)return o("time.weeksAgo",{n:c});return o("time.monthsAgo",{n:a})}var $p=50,L0=3;var An=N(()=>{C()});import{dirname as Cp,join as Ip}from"path";import{mkdir as Qp}from"fs/promises";function er(){return $0??Ip(Q,"model-usage.json")}function g0(){return{counts:{},updatedAt:new Date(0).toISOString()}}async function ur(){try{let i=Bun.file(er());if(!await i.exists())return g0();let o=await i.json(),n=o?.counts;if(!n||typeof n!=="object")return g0();let d={};for(let[e,u]of Object.entries(n))if(typeof u==="number"&&Number.isFinite(u))d[e]=u;return{counts:d,updatedAt:typeof o?.updatedAt==="string"?o.updatedAt:new Date(0).toISOString()}}catch{return g0()}}async function Rp(i){if($0)await Qp(Cp($0),{recursive:!0});else await To();await Bun.write(er(),JSON.stringify(i,null,2))}async function rr(){return{...(await ur()).counts}}async function tr(i){let o=await ur(),n={};for(let[d,e]of Object.entries(o.counts)){let u=e*qp;if(u>=Op)n[d]=u}for(let d of i){if(!d.startsWith("model-"))continue;n[d]=(n[d]??0)+1}await Rp({counts:n,updatedAt:new Date().toISOString()})}var qp=0.95,Op=0.05,$0=null;var M0=N(()=>{C()});function G0(i,o,n){if(o<=0)return;return{usedPct:Math.min(100,Math.max(0,Math.round(i/o*100))),costUsed:i,costLimit:o,...n?{windowMinutes:n}:{}}}function Tp(i,o){if(!Number.isFinite(i)||i<0)return;return{usedPct:0,costUsed:i,...o?{windowMinutes:o}:{}}}async function Xp(i){try{let o=await fetch(`${Y}/apiStats/api/user-quota`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:i}),signal:AbortSignal.timeout(5000)});if(!o.ok)return null;let n=await o.json();if(!n.plan||!n.usage)return null;return{provider:"tako",status:"ok",primary:G0(n.usage.windowCost??0,n.plan.window_cost_limit??0,n.plan.window_minutes),daily:G0(n.usage.dailyCost??0,n.plan.daily_cost_limit??0),secondary:G0(n.usage.weeklyCost??0,n.plan.weekly_cost_limit??0),fetchedAt:Date.now()}}catch{return null}}async function ro(i){let o=Date.now(),n={provider:"tako",status:"error",fetchedAt:o};if(!i)return{...n,hint:"\u7F3A\u5C11 apiId\uFF0C\u8BF7\u91CD\u65B0\u914D\u7F6E Tako Key",error:"missing_api_id"};let d=await Xp(i);if(d)return d;try{let e=await fetch(`${Y}/apiStats/api/user-stats`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:i}),signal:AbortSignal.timeout(5000)});if(!e.ok)return{...n,hint:"Tako \u7528\u91CF\u63A5\u53E3\u4E0D\u53EF\u7528",error:`http_${e.status}`};let u=await e.json(),r=u?.data;if(!u?.success||!r)return{...n,hint:"Tako \u7528\u91CF\u6570\u636E\u683C\u5F0F\u5F02\u5E38",error:"bad_payload"};let t=r.limits?.currentDailyCost??r.usage?.total?.cost??0;return{provider:"tako",status:"ok",daily:Tp(t),fetchedAt:o}}catch(e){return{...n,hint:"Tako \u7528\u91CF\u63A5\u53E3\u8BF7\u6C42\u5931\u8D25",error:String(e.message??e)}}}async function cr(i){let o=await Di();return ro(o)}var S0=N(()=>{C()});function P0(i){if(!i||typeof i.utilization!=="number")return;return{usedPct:Math.min(100,Math.max(0,Math.round(i.utilization))),resetsAt:i.resets_at??void 0}}function Kp(i){return i.authData?.credentials?.claudeAiOauth?.accessToken}async function ar(i){let o=Date.now(),n={provider:"claude-subscription",status:"error",fetchedAt:o},d=Kp(i);if(!d)return{...n,hint:"Claude OAuth \u672A\u4FDD\u5B58\uFF1A\u6309 p \u2192 \u9009\u4E2D\u8D26\u53F7 \u2192 d \u2192 \u91CD\u65B0\u767B\u5F55",error:"missing_access_token"};try{let e=await fetch("https://api.anthropic.com/api/oauth/usage",{method:"GET",headers:{Authorization:`Bearer ${d}`,"anthropic-beta":"oauth-2025-04-20"},signal:AbortSignal.timeout(5000)});if(e.status===401)return{...n,hint:"Claude OAuth \u5DF2\u8FC7\u671F\uFF1A\u6309 p \u2192 \u9009\u4E2D\u8D26\u53F7 \u2192 d \u2192 \u91CD\u65B0\u767B\u5F55",error:"unauthorized"};if(!e.ok)return{...n,hint:"Anthropic \u7528\u91CF\u63A5\u53E3\u4E0D\u53EF\u7528",error:`http_${e.status}`};let u=await e.json(),r=P0(u.seven_day_opus),t=P0(u.five_hour);if(t)t.windowMinutes=300;let c=P0(u.seven_day);if(c)c.windowMinutes=10080;return{provider:"claude-subscription",status:"ok",primary:t,secondary:c,...r?{modelLimits:{opus:r}}:{},fetchedAt:o}}catch(e){return{...n,hint:"Anthropic \u7528\u91CF\u63A5\u53E3\u8BF7\u6C42\u5931\u8D25",error:String(e.message??e)}}}function pr(i){if(!i||typeof i.used_percent!=="number")return;let o={usedPct:Math.min(100,Math.max(0,Math.round(i.used_percent)))};if(typeof i.reset_at==="number")o.resetsAt=new Date(i.reset_at*1000).toISOString();if(typeof i.limit_window_seconds==="number")o.windowMinutes=Math.round(i.limit_window_seconds/60);return o}function Vp(i){let o=i.authData?.tokens;return{accessToken:o?.access_token,accountId:o?.account_id}}async function Zp(i,o){if(await Bun.spawn(["which","codex"],{stdout:"pipe",stderr:"pipe"}).exited!==0)return null;let d=await import("fs/promises"),{mkdtemp:e}=d,{tmpdir:u}=await import("os"),{join:r}=await import("path"),t=await e(r(u(),"tako-codex-"));try{let c={auth_mode:"chatgpt",tokens:{access_token:i,...o?{account_id:o}:{}}};await d.writeFile(r(t,"auth.json"),JSON.stringify(c));let a=[JSON.stringify({jsonrpc:"2.0",method:"initialize",id:0,params:{clientInfo:{name:"tako",version:"1.0"}}}),JSON.stringify({jsonrpc:"2.0",method:"account/rateLimits/read",id:1,params:{}})].join(`
|
|
297
|
+
`)+`
|
|
298
|
+
`,p=Bun.spawn(["codex","app-server"],{stdin:"pipe",stdout:"pipe",stderr:"pipe",env:{...process.env,CODEX_HOME:t}});p.stdin.write(a);let l=new Promise((w)=>setTimeout(w,8000));await Promise.race([p.exited,l]),p.kill();let x=await new Response(p.stdout).text();for(let w of x.split(`
|
|
299
|
+
`)){let y=w.trim();if(!y)continue;try{let s=JSON.parse(y);if(s.id!==1)continue;if(s.error)return null;return{status:200,body:JSON.stringify(s.result?.rateLimits??s.result??{})}}catch{continue}}return null}finally{d.rm(t,{recursive:!0,force:!0}).catch(()=>{})}}async function Fp(i,o){let n=["-s","-S","--max-time","10","-w",`
|
|
300
|
+
__HTTP__%{http_code}`,"https://chatgpt.com/backend-api/wham/usage","-H",`Authorization: Bearer ${i}`,"-H","User-Agent: codex_cli_rs/0.50.0","-H","Accept: application/json"];if(o)n.push("-H",`ChatGPT-Account-Id: ${o}`);let d=Bun.spawn(["curl",...n],{stdout:"pipe",stderr:"pipe"}),e=await new Response(d.stdout).text();await d.exited;let u=e.match(/^([\s\S]*?)\n__HTTP__(\d+)$/);return{body:u?u[1]:e,status:u?parseInt(u[2],10):0}}async function lr(i){let o=Date.now(),n={provider:"codex-subscription",status:"error",fetchedAt:o},{accessToken:d,accountId:e}=Vp(i);if(!d)return{...n,hint:"Codex OAuth \u672A\u4FDD\u5B58\uFF1A\u6309 p \u2192 \u9009\u4E2D\u8D26\u53F7 \u2192 d \u2192 \u91CD\u65B0\u767B\u5F55",error:"missing_access_token"};try{let{status:u,body:r}=await _p(d,e);if(u===401)return{...n,hint:"Codex OAuth \u5DF2\u8FC7\u671F\uFF1A\u6309 p \u2192 \u9009\u4E2D\u8D26\u53F7 \u2192 d \u2192 \u91CD\u65B0\u767B\u5F55",error:"unauthorized"};if(u!==200)return{...n,hint:u===0?"ChatGPT \u7528\u91CF\u83B7\u53D6\u5931\u8D25\uFF1A\u672C\u673A\u7F51\u7EDC\u65E0\u6CD5\u8BBF\u95EE chatgpt.com\uFF08\u53EF\u80FD IP \u88AB Cloudflare \u62E6\u622A\uFF0C\u53EF\u8BD5 HTTPS_PROXY\uFF09":"ChatGPT \u7528\u91CF\u63A5\u53E3\u4E0D\u53EF\u7528",error:`http_${u}`};let t=JSON.parse(r),c=t.rate_limit??t.rateLimits??t,a=c.primary_window??c.primary,p=c.secondary_window??c.secondary;return{provider:"codex-subscription",status:"ok",primary:pr(a),secondary:pr(p),planType:t.plan_type??t.planType,fetchedAt:o}}catch(u){return{...n,hint:"ChatGPT \u7528\u91CF\u63A5\u53E3\u8BF7\u6C42\u5931\u8D25",error:String(u.message??u)}}}var Ep=async(i,o)=>{let n=await Zp(i,o).catch(()=>null);if(n)return n;return Fp(i,o)},_p;var mr=N(()=>{_p=Ep});var I0={};ii(I0,{invalidateQuotaCache:()=>dl,getOfficialQuota:()=>C0,fetchTakoQuotaByApiId:()=>ro,_setQuotaDiskCachePathForTest:()=>il,_clearQuotaCache:()=>nl});import{homedir as Up}from"os";import{join as Dp}from"path";function jp(i){return`${i.type}:${i.id}`}function yr(){return wr??Dp(Up(),".tako","quota-cache.json")}function il(i){wr=i}function sr(){try{let o=$("fs").readFileSync(yr(),"utf-8"),n=JSON.parse(o);return typeof n==="object"&&n!==null?n:{}}catch{return{}}}function fr(i){try{let o=$("fs"),n=yr(),d=n.slice(0,n.lastIndexOf("/"));if(d)o.mkdirSync(d,{recursive:!0});let e=`${n}.tmp.${process.pid}`;o.writeFileSync(e,JSON.stringify(i)),o.renameSync(e,n)}catch{}}function ol(i){return{provider:i.type,status:"unsupported",fetchedAt:Date.now()}}async function C0(i){let o=jp(i),n=Date.now(),d=ko.get(o);if(d&&n-d.fetchedAt<xr)return d;let e=sr(),u=e[o];if(u&&n-u.fetchedAt<xr)return ko.set(o,u),u;let r;switch(i.type){case"tako":r=await cr(i);break;case"claude-subscription":r=await ar(i);break;case"codex-subscription":r=await lr(i);break;default:r=ol(i);break}return ko.set(o,r),e[o]=r,fr(e),r}function nl(){ko.clear()}function dl(i,o){for(let n of[...ko.keys()])if(n.endsWith(`:${i}`))ko.delete(n);try{let n=sr(),d=!1;for(let e of Object.keys(n))if(e.endsWith(`:${i}`))delete n[e],d=!0;if(d)fr(n)}catch{}}var xr=60000,ko,wr=null;var Vn=N(()=>{S0();mr();ko=new Map});var A0={};ii(A0,{listAvailableVersions:()=>R0,installAtVersion:()=>J0,getInstalledVersion:()=>B0});import{join as _n}from"path";async function R0(i){let n=`${await ui()}/${encodeURIComponent(i).replace("%40","@")}`,d=await fetch(n,{signal:AbortSignal.timeout(1e4)});if(!d.ok)throw Error(`registry http ${d.status}`);let e=await d.json(),u=Object.keys(e.versions??{});if(!u.length)throw Error("no versions found");let r=e.time??{},t=u.map((c)=>({version:c,publishedAt:r[c],isCurrent:!1}));return t.sort((c,a)=>{let p=c.publishedAt?Date.parse(c.publishedAt):0;return(a.publishedAt?Date.parse(a.publishedAt):0)-p}),t}async function J0(i,o){let n=await import("fs/promises"),d=Gi(i.id);await n.mkdir(d,{recursive:!0});let e=_n(d,"bun.lock"),u=_n(d,"node_modules");await n.rm(e,{force:!0}).catch(()=>{}),await n.rm(u,{recursive:!0,force:!0}).catch(()=>{});let r=_n(d,"package.json");await Bun.write(r,JSON.stringify({name:`tako-${i.id}-host`,version:"0.0.0",private:!0},null,2));let t=await ui(),{detectRegion:c}=await Promise.resolve().then(() => (bo(),Wu)),a=await c(),{log:p}=await Promise.resolve().then(() => (Ci(),nu));p.info(`\u7F51\u7EDC\u73AF\u5883: ${a==="cn"?"\u56FD\u5185":"\u6D77\u5916"} | registry: ${t}`);let l=Bun.spawn([A,"add",`${i.package}@${o}`],{cwd:d,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:t}});if(await l.exited,l.exitCode!==0){let w=await new Response(l.stderr).text();throw Error(`bun add ${i.package}@${o} failed: ${w.slice(0,500).trim()}`)}let x=await z();await Ui({installedClients:{...x.installedClients,[i.id]:{version:o,installedAt:new Date().toISOString()}}})}async function B0(i){let o=Gi(i.id),n=_n(o,"node_modules",i.package,"package.json");try{let e=Bun.file(n);if(await e.exists()){let u=await e.json();if(u.version)return u.version}}catch{}return(await z()).installedClients[i.id]?.version??null}var Un=N(()=>{E();C();bo()});var Wr={};ii(Wr,{runQuotaCommand:()=>kl,buildQuotaPayload:()=>Nr});async function Ll(i){try{let n=await(await fetch(`${Y}/apiStats/api/get-key-id`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:i}),signal:AbortSignal.timeout(5000)})).json();if(n.success&&n.data?.id)return{valid:!0,apiId:n.data.id};return{valid:!1,error:n.error||"Tako key validation failed"}}catch(o){return{valid:!1,error:String(o.message??o)}}}function Nl(i){let o=(i.providers??[]).find((e)=>e.type==="tako"),n=o?o.apiId||"":i.apiId||"",d=o?o.apiKey||"":i.apiKey||"";if(!n&&!d)return null;return{apiId:n,apiKey:d}}function Y0(i){if(!i)return;let o={usedPct:i.usedPct,...i.windowMinutes?{windowMinutes:i.windowMinutes}:{},...i.resetsAt?{resetsAt:i.resetsAt}:{}};if(typeof i.costUsed==="number")o.used=i.costUsed;if(typeof i.costLimit==="number"){o.limit=i.costLimit;let n=i.costUsed??0;o.remaining=Math.max(0,i.costLimit-n),o.remainingPct=Math.max(0,Math.min(100,100-Math.round(i.usedPct)))}return o}function un(i,o,n){return{exitCode:1,payload:{provider:"tako",status:"error",error:i,message:o,...n?{hint:n}:{}}}}function Lr(i){return{exitCode:0,payload:{provider:"tako",status:"ok",fiveHour:Y0(i.primary),daily:Y0(i.daily),weekly:Y0(i.secondary),fetchedAt:new Date(i.fetchedAt).toISOString()}}}function Wl(i){return un(i.error||"quota_unavailable",i.hint||"Tako quota is unavailable",i.hint)}async function Nr(i,o={}){let n=o.fetchQuotaByApiId??ro,d=o.resolveApiIdFromKey??Ll,e=Nl(i);if(!e)return un("missing_tako_provider","Tako provider is not configured");let u=null;if(e.apiId){if(u=await n(e.apiId),u.status==="ok")return Lr(u)}if(e.apiKey){let r=await d(e.apiKey);if(r.valid&&r.apiId&&r.apiId!==e.apiId){if(u=await n(r.apiId),u.status==="ok")return Lr(u)}else if(!e.apiId)return un("api_id_refresh_failed",r.error||"Unable to resolve Tako API ID from API key")}if(u)return Wl(u);return un("missing_api_id","Tako API ID is not configured")}async function kl(i=[],o={}){if(i.length>0){let e=un("invalid_args","Usage: tako quota");return process.stdout.write(`${JSON.stringify(e.payload)}
|
|
301
|
+
`),e.exitCode}let n=o.loadConfig??z,d=await Nr(await n(),o);return process.stdout.write(`${JSON.stringify(d.payload)}
|
|
302
|
+
`),d.exitCode}var kr=N(()=>{C();S0()});import{join as Vi}from"path";import{homedir as zl}from"os";import{mkdir as gl,readFile as Dn,writeFile as K0,rename as V0,readdir as zr,rm as $l,appendFile as gr}from"fs/promises";function yi(i){return Vi(H0,i)}function $r(i){return Vi(yi(i),"meta.json")}function D(i){return Vi(yi(i),"log.ndjson")}function rn(i){return Vi(yi(i),"approvals")}function T0(i,o){return Vi(rn(i),`${o}.req.json`)}function X0(i,o){return Vi(rn(i),`${o}.resp.json`)}async function tn(i){await gl(i,{recursive:!0})}async function Mr(i){await tn(yi(i.sid)),await j(i),await gr(D(i.sid),"")}async function zo(i){try{let o=await Dn($r(i),"utf-8");return JSON.parse(o)}catch{return null}}async function j(i){let o=yi(i.sid);await tn(o);let n=Vi(o,"meta.json.tmp"),d={};for(let[e,u]of Object.entries(i)){if(e.startsWith("_"))continue;d[e]=u}await K0(n,JSON.stringify(d,null,2),"utf-8"),await V0(n,$r(i.sid))}async function si(i,o){await gr(D(i),JSON.stringify(o)+`
|
|
303
|
+
`,"utf-8")}async function jn(){await tn(H0);let i=await zr(H0,{withFileTypes:!0}),o=[];for(let n of i){if(!n.isDirectory())continue;let d=await zo(n.name);if(d)o.push(d)}return o.sort((n,d)=>d.lastActiveAt-n.lastActiveAt),o}async function id(i,o){let n;try{n=await Dn(D(i),"utf-8")}catch{return[]}let e=n.split(`
|
|
304
|
+
`).filter(Boolean).slice(-o),u=[];for(let r of e)try{u.push(JSON.parse(r))}catch{}return u}async function Z0(i){try{await $l(yi(i),{recursive:!0,force:!0})}catch{}}async function Gr(i,o){await tn(rn(i));let n=T0(i,o.approvalId)+".tmp";await K0(n,JSON.stringify(o,null,2),"utf-8"),await V0(n,T0(i,o.approvalId))}async function Ml(i,o){try{return JSON.parse(await Dn(T0(i,o),"utf-8"))}catch{return null}}async function od(i,o,n){await tn(rn(i));let d=X0(i,o)+".tmp";await K0(d,JSON.stringify(n,null,2),"utf-8"),await V0(d,X0(i,o))}async function cn(i,o){try{return JSON.parse(await Dn(X0(i,o),"utf-8"))}catch{return null}}async function an(i){try{let o=await zr(rn(i)),n=[];for(let d of o){if(!d.endsWith(".req.json"))continue;let e=d.slice(0,-9),u=await Ml(i,e);if(!u)continue;if(!await cn(i,e))n.push(u)}return n.sort((d,e)=>d.requestedAt-e.requestedAt),n}catch{return[]}}var H0;var Zi=N(()=>{H0=Vi(zl(),".tako","agent-sessions")});import{spawn as Gl}from"child_process";async function nd(i,o,n){await si(i,o),n?.onFrame?.(o)}function Sl(i,o){let n=[],d=gi();if(i?.type==="assistant"&&i?.message?.content){for(let e of i.message.content)if(e?.type==="text"&&typeof e.text==="string")n.push({ts:d,kind:"text_delta",text:e.text,itemId:i.message.id});else if(e?.type==="tool_use")n.push({ts:d,kind:"tool_use",name:e.name??"?",input:e.input,itemId:e.id});else if(e?.type==="thinking"&&typeof e.thinking==="string")n.push({ts:d,kind:"reasoning_delta",text:e.thinking})}else if(i?.type==="user"&&i?.message?.content){for(let e of i.message.content)if(e?.type==="tool_result")n.push({ts:d,kind:"tool_result",itemId:e.tool_use_id,output:e.content})}else if(i?.type==="result"){if(i.is_error)n.push({ts:d,kind:"error",message:typeof i.result==="string"?i.result:"claude reported error",raw:i});n.push({ts:d,kind:"turn_completed",turnId:o,stopReason:i.stop_reason,usage:i.usage})}else if(i?.type==="stream_event"&&i?.event?.delta?.thinking)n.push({ts:d,kind:"reasoning_delta",text:String(i.event.delta.thinking)});return n}function Pr(i,o){return i.__env=o,i}var gi=()=>Date.now(),pn,Sr;var Cr=N(()=>{Zi();E();dn();pn=new Map,Sr={backend:"claude",async start(i){let o={sid:i.sid,backend:"claude",name:i.name,model:i.model,workdir:i.workdir,status:"idle",turnCount:0,createdAt:gi(),lastActiveAt:gi(),providerId:i.providerId};return await si(o.sid,{ts:gi(),kind:"session_started",sid:o.sid,backend:"claude",model:o.model}),o},async send(i,o,n){let d=oi("claude-code");if(!d)throw Error("claude-code client \u672A\u6CE8\u518C");let e=await xo(d);if(!e)e=wo(d);let u=i.turnCount===0,r=["--print","--input-format","stream-json","--output-format","stream-json","--verbose"];if(u)r.push("--session-id",i.sid);else r.push("--resume",i.sid);if(i.model)r.push("--model",i.model);r.push("--permission-mode","bypassPermissions");let t={...process.env,...i.__env};delete i.__env;let c=d.runtime==="native"?e:await Wi(),a=d.runtime==="native"?r:[e,...r],p=Gl(c,a,{env:t,cwd:i.workdir,stdio:["pipe","pipe","pipe"]});pn.set(i.sid,{pid:p.pid,kill:(b)=>p.kill(b??"SIGINT")});let l={type:"user",message:{role:"user",content:[{type:"text",text:o}]}};p.stdin.write(JSON.stringify(l)+`
|
|
305
|
+
`),p.stdin.end(),i.status="running",i.lastActiveAt=gi(),await j(i);let x="";p.stderr.on("data",(b)=>{x+=b.toString()});let w=`t${i.turnCount+1}`;await nd(i.sid,{ts:gi(),kind:"turn_started",turnId:w},n);let y="";p.stdout.on("data",async(b)=>{y+=b.toString();let f;while((f=y.indexOf(`
|
|
306
|
+
`))>=0){let h=y.slice(0,f).trim();if(y=y.slice(f+1),!h)continue;try{let M=JSON.parse(h);for(let k of Sl(M,w))await nd(i.sid,k,n)}catch{}}});let s=await new Promise((b)=>{p.on("close",(f)=>b(f??0))});if(pn.delete(i.sid),s===0)i.turnCount++;if(i.lastActiveAt=gi(),i.status="idle",s!==0)await nd(i.sid,{ts:gi(),kind:"error",message:`claude exited ${s}${x?`: ${x.slice(0,500)}`:""}`},n);return await j(i),i},async cancel(i){let o=pn.get(i.sid);if(o)o.kill("SIGINT")},async close(i){let o=pn.get(i.sid);if(o)o.kill("SIGTERM");pn.delete(i.sid),await nd(i.sid,{ts:gi(),kind:"session_closed"}),i.status="closed",i.lastActiveAt=gi(),await j(i)},async isAlive(){return!0}}});import{join as qr,isAbsolute as Pl,resolve as F0}from"path";import{readFile as Cl,writeFile as Il}from"fs/promises";import{homedir as Ql}from"os";function ql(i){if(!i)return"";let o=i.match(/^(?:\S*sh|\S*bash|\S*zsh)(?:\s+-\w+)*\s+["'](.*)["']\s*$/s);return o?o[1]:i}function Ir(i,o){if(!i)return!1;let n=Pl(i)?F0(i):F0(o,i),d=F0(o);return n===d||n.startsWith(d+"/")}function Or(i,o,n,d){if(o==="item/commandExecution/requestApproval"||o==="execCommandApproval"){let e=String(n?.command??""),u=ql(e);for(let r of i.exec_deny??[])try{if(new RegExp(r).test(u))return{kind:"auto_deny",reason:`policy deny: /${r}/`}}catch{}for(let r of i.exec_allow??[])try{if(new RegExp(r).test(u))return{kind:"auto_allow",reason:`policy allow: /${r}/`}}catch{}return{kind:"ask"}}if(o==="item/fileChange/requestApproval"||o==="applyPatchApproval"){let e=Ol(n);for(let r of e)for(let t of i.file_deny??[])try{if(new RegExp(t).test(r))return{kind:"auto_deny",reason:`file deny: ${r} matches /${t}/`}}catch{}if(i.strict_workdir){for(let r of e)if(!Ir(r,d))return{kind:"auto_deny",reason:`file outside workdir: ${r}`}}let u=e.length>0;for(let r of e){let t=!1;for(let c of i.file_allow??[])try{if(new RegExp(c).test(r)){t=!0;break}}catch{}if(!t){u=!1;break}}if(u)return{kind:"auto_allow",reason:"all paths matched file_allow"};if(!i.strict_workdir&&e.length>0&&e.every((r)=>Ir(r,d)))return{kind:"auto_allow",reason:"all paths inside workdir (non-strict)"};return{kind:"ask"}}return{kind:"ask"}}function Ol(i){let o=[],n=(d)=>{if(typeof d==="string"&&d.length>0&&d.length<1024)o.push(d)};if(n(i?.path),Array.isArray(i?.changes))for(let d of i.changes)n(d?.path),n(d?.target);if(Array.isArray(i?.files))for(let d of i.files)n(d?.path??d);if(typeof i?.patch==="string")for(let d of i.patch.split(`
|
|
307
|
+
`)){let e=d.match(/^\+\+\+\s+b\/(.*)$/);if(e)o.push(e[1])}return Array.from(new Set(o))}function U0(i){return qr(yi(i),"policy.json")}async function E0(i){try{return JSON.parse(await Cl(i,"utf-8"))}catch{return null}}async function dd(i){let o=await E0(Rl),n=await E0(U0(i));return Qr(Qr(_0,o),n)}function Qr(i,o){if(!o)return i;return{exec_allow:[...i.exec_allow??[],...o.exec_allow??[]],exec_deny:[...i.exec_deny??[],...o.exec_deny??[]],file_allow:[...i.file_allow??[],...o.file_allow??[]],file_deny:[...i.file_deny??[],...o.file_deny??[]],strict_workdir:o.strict_workdir??i.strict_workdir}}async function ed(i){return await E0(U0(i))??{}}async function ud(i,o){await Il(U0(i),JSON.stringify(o,null,2),"utf-8")}async function Rr(i,o){let n=await ed(i),d=n.exec_allow??[];if(!d.includes(o))d.push(o);n.exec_allow=d,await ud(i,n)}var _0,Rl;var D0=N(()=>{Zi();_0={exec_allow:["^\\s*(ls|pwd|whoami|hostname|date|uname|env|echo|printenv)(\\s|$)","^\\s*(cat|head|tail|less|more|file|stat)\\s+","^\\s*(grep|rg|ag|egrep|fgrep)\\s+","^\\s*find\\s+\\S+\\s+(-name|-type|-maxdepth|-path)","^\\s*(wc|awk|sed -n)\\s+","^\\s*(which|type|whereis|command -v)\\s+","^\\s*(ps|df|du|free|top -b|iostat|vmstat)(\\s|$)","^\\s*tree(\\s|$)","^\\s*git\\s+(status|log|diff|show|branch|remote|config --(get|list)|rev-parse|describe|ls-files|ls-tree|cat-file|tag\\s+--list|stash list|reflog|fetch)(\\s|$)","^\\s*(npm|yarn|pnpm|bun)\\s+(list|outdated|info|view|search|--version)(\\s|$)","^\\s*(node|bun|python|python3|deno|go|cargo|rustc|java|javac)\\s+(--version|-V|version)(\\s|$)","^\\s*pip\\s+(list|show|--version)(\\s|$)","^\\s*cargo\\s+(check|tree|metadata)(\\s|$)","^\\s*(tsc|tsc --noEmit)(\\s|$)","^\\s*(eslint|prettier|stylelint|tslint)\\s+","^\\s*(jest|vitest|mocha|pytest|bun test|cargo test)(\\s|$)","^\\s*npm run (lint|test|build|typecheck|check)"],exec_deny:["\\bsudo\\b","\\bsu\\s+-","\\bdoas\\b","\\brm\\s+-[rRf]+\\s+(/$|/\\s|/[^./])","\\brm\\s+-[rRf]+\\s+\\$HOME(/?)?\\s","\\brm\\s+-[rRf]+\\s+~(/?)?\\s","\\bdd\\s+if=.*\\s+of=/dev/","\\bmkfs\\.","\\bshred\\b","\\bdiskutil\\s+(erase|format)","\\bcurl\\s+[^|]*\\|\\s*(sh|bash|zsh|fish)","\\bwget\\s+[^|]*\\|\\s*(sh|bash|zsh|fish)","\\bcurl\\s+.*-o\\s+/(usr|etc|bin|sbin|lib)/",":\\(\\)\\s*\\{","\\bchmod\\s+-R\\s+[0-7]+\\s+/","\\bssh-keygen\\s+-t","\\bsshpass\\b","\\b(passwd|chpasswd)\\b","\\bgit\\s+push\\s+.*--force"],file_allow:[],file_deny:["/\\.ssh/","/\\.aws/","/\\.gnupg/","\\.env(\\.|$)","/etc/(passwd|shadow|sudoers)","/(usr|etc|bin|sbin)/"],strict_workdir:!1};Rl=qr(Ql(),".tako","agent-policy.json")});import{spawn as Jl}from"child_process";import{writeFile as Bl,unlink as Al}from"fs/promises";import{join as Jr}from"path";class Hr{proc;buf="";nextId=1;pending=new Map;notifyHandlers=[];serverReqHandler=null;closed=!1;constructor(i){this.proc=i,i.stdout?.on("data",(o)=>this.onData(o)),i.on("close",()=>this.onClose()),i.on("error",()=>this.onClose())}onData(i){this.buf+=i.toString("utf-8");let o;while((o=this.buf.indexOf(`
|
|
308
|
+
`))>=0){let n=this.buf.slice(0,o).trim();if(this.buf=this.buf.slice(o+1),!n)continue;try{this.dispatch(JSON.parse(n))}catch{}}}dispatch(i){if(i&&typeof i==="object"){if(i.id!==void 0&&(("result"in i)||("error"in i))){let o=this.pending.get(i.id);if(o)if(this.pending.delete(i.id),i.error)o.reject(Error(JSON.stringify(i.error)));else o.resolve(i.result);return}if(i.method&&i.id!==void 0){this.serverReqHandler?.(i.method,i.id,i.params);return}if(i.method)for(let o of this.notifyHandlers)o(i.method,i.params)}}onClose(){this.closed=!0;for(let[,i]of this.pending)i.reject(Error("rpc closed"));this.pending.clear()}write(i){if(this.closed)return;this.proc.stdin?.write(JSON.stringify(i)+`
|
|
309
|
+
`)}request(i,o){if(this.closed)return Promise.reject(Error("rpc closed"));let n=this.nextId++;return new Promise((d,e)=>{this.pending.set(n,{resolve:d,reject:e}),this.write({jsonrpc:"2.0",method:i,params:o,id:n})})}notify(i,o){this.write({jsonrpc:"2.0",method:i,params:o})}reply(i,o){this.write({jsonrpc:"2.0",id:i,result:o})}replyError(i,o,n){this.write({jsonrpc:"2.0",id:i,error:{code:o,message:n}})}onNotification(i){this.notifyHandlers.push(i)}onServerRequest(i){this.serverReqHandler=i}pid(){return this.proc.pid}kill(i="SIGTERM"){try{this.proc.kill(i)}catch{}}close(){try{this.proc.stdin?.end()}catch{}this.kill("SIGTERM")}}async function Br(i,o){let n=oi("codex");if(!n)throw Error("codex client \u672A\u6CE8\u518C");let d=await xo(n)??wo(n),e={...process.env,...o},u=n.runtime==="native"?d:await Wi(),r=n.runtime==="native"?["app-server"]:[d,"app-server"],t=Jl(u,r,{env:e,cwd:i,stdio:["pipe","pipe","pipe"]});return t.stderr?.on("data",()=>{}),new Hr(t)}async function Ar(i){await i.request("initialize",{clientInfo:{name:"tako-agent",title:"Tako Agent",version:"0.1"},capabilities:null})}function Yr(i,o={}){let n=i.approvalMode==="external",d={cwd:i.workdir,approvalPolicy:n?"untrusted":"never",sandbox:n?"workspace-write":"danger-full-access",...o};if(i.model)d.model=i.model;if(i.providerHint?.type==="tako"||i.providerHint?.type==="custom")d.modelProvider="tako";return d}function j0(i,o){if(i==="applyPatchApproval"||i==="execCommandApproval")return{decision:o?"approved":"denied"};if(i==="item/commandExecution/requestApproval"||i==="item/fileChange/requestApproval")return{decision:o?"accept":"decline"};if(i==="item/permissions/requestApproval")return o?{permissions:{allowedTools:["*"]},scope:"turn"}:{permissions:{},scope:"turn"};if(i==="mcpServer/elicitation/request")return{action:o?"accept":"decline"};return{decision:o?"approved":"denied"}}function Yl(i){if(i.includes("commandExecution")||i==="execCommandApproval")return"exec";if(i.includes("fileChange")||i==="applyPatchApproval")return"patch";if(i.includes("permissions"))return"permission";if(i.includes("tool/"))return"tool";return"other"}async function Hl(i,o,n=300000,d=200){let e=Date.now();while(Date.now()-e<n){let u=await cn(i,o);if(u)return{allow:u.decision==="allow",reason:u.reason,by:u.by};await new Promise((r)=>setTimeout(r,d))}return{allow:!1,reason:`timeout after ${Math.round(n/1000)}s`,by:"tako-timeout"}}function rd(i,o){return i.__env=o,i}function Tl(i,o){let n=[],d=ri();switch(i){case"turn/started":n.push({ts:d,kind:"turn_started",turnId:o?.turn?.id??"?"});break;case"turn/completed":n.push({ts:d,kind:"turn_completed",turnId:o?.turn?.id,usage:o?.turn?.usage});break;case"item/agentMessage/delta":if(typeof o?.delta==="string")n.push({ts:d,kind:"text_delta",text:o.delta,itemId:o.itemId});break;case"item/reasoning/textDelta":case"item/reasoning/summaryTextDelta":if(typeof o?.delta==="string")n.push({ts:d,kind:"reasoning_delta",text:o.delta});break;case"item/started":{let e=o?.item;if(!e)break;if(e.type==="commandExecution")n.push({ts:d,kind:"tool_use",name:"shell",input:{command:e.command},itemId:e.id});else if(e.type==="fileChange")n.push({ts:d,kind:"tool_use",name:"fileChange",input:e,itemId:e.id});else if(e.type==="mcpToolCall")n.push({ts:d,kind:"tool_use",name:e.serverName?`${e.serverName}.${e.toolName}`:e.toolName??"mcp",input:e.args,itemId:e.id});break}case"item/completed":{let e=o?.item;if(!e)break;if(e.type==="commandExecution"||e.type==="fileChange"||e.type==="mcpToolCall")n.push({ts:d,kind:"tool_result",itemId:e.id,output:e});break}case"error":case"warning":n.push({ts:d,kind:"error",message:o?.message??i,raw:o});break}return n}var ri=()=>Date.now(),Tr;var Xr=N(()=>{Zi();D0();E();dn();Tr={backend:"codex",async start(i){let o={sid:i.sid,backend:"codex",name:i.name,model:i.model,workdir:i.workdir,status:"idle",approvalMode:i.approvalMode??"yolo",turnCount:0,createdAt:ri(),lastActiveAt:ri(),providerId:i.providerId};return await si(o.sid,{ts:ri(),kind:"session_started",sid:o.sid,backend:"codex",model:o.model}),o.__providerHint=i.providerHint,o},async send(i,o,n){let d=i.__env??{},e=i.__providerHint,u=await Br(i.workdir,d),r=Jr(yi(i.sid),"turn.pid");if(u.pid())await Bl(r,String(u.pid()));let t=i.approvalMode??"yolo";u.onServerRequest((l,x,w)=>{if(t==="yolo"){u.replyError(x,-32603,`tako-agent yolo mode: ${l} declined`);return}let y=String(x),s=Yl(l);(async()=>{let b=await dd(i.sid),f=Or(b,l,w,i.workdir);if(f.kind==="auto_allow"){await si(i.sid,{ts:ri(),kind:"tool_result",itemId:y,output:{approval:"auto_allowed",reason:f.reason}}),u.reply(x,j0(l,!0));return}if(f.kind==="auto_deny"){await si(i.sid,{ts:ri(),kind:"error",message:`auto_deny: ${f.reason}`,raw:{method:l,params:w}}),u.reply(x,j0(l,!1));return}let h={approvalId:y,method:l,params:w,approvalType:s,requestedAt:ri()};await Gr(i.sid,h),await si(i.sid,{ts:ri(),kind:"approval_required",approvalId:y,approvalType:s,params:w}),i.status="awaiting_approval",await j(i);let M=await Hl(i.sid,y);i.status="running",await j(i),u.reply(x,j0(l,M.allow))})().catch((b)=>{u.replyError(x,-32603,`approval bridge error: ${b?.message??b}`)})});let c=Promise.resolve();u.onNotification((l,x)=>{let w=Tl(l,x);if(!w.length)return;c=c.then(async()=>{for(let y of w)await si(i.sid,y),n?.onFrame?.(y)})}),i.status="running",i.lastActiveAt=ri(),await j(i);let a=new Promise((l)=>{u.onNotification((x)=>{if(x==="turn/completed"||x==="turn/failed")l()})}),p=!1;try{if(await Ar(u),!i.codexThreadId){let l=await u.request("thread/start",Yr({workdir:i.workdir,model:i.model,providerHint:e,approvalMode:t}));if(i.codexThreadId=l?.threadId??l?.id??l?.thread?.id,!i.codexThreadId)throw Error("thread/start \u65E0 threadId")}else await u.request("thread/resume",Yr({workdir:i.workdir,model:i.model,providerHint:e,approvalMode:t},{threadId:i.codexThreadId}));await u.request("turn/start",{threadId:i.codexThreadId,input:[{type:"text",text:o,text_elements:[]}]}),await Promise.race([a,new Promise((l,x)=>setTimeout(()=>x(Error("turn timeout 10min")),600000))]),await c,p=!0}catch(l){await si(i.sid,{ts:ri(),kind:"error",message:l instanceof Error?l.message:String(l)})}if(u.close(),await Al(r).catch(()=>{}),p)i.turnCount++;return i.lastActiveAt=ri(),i.status="idle",await j(i),i},async cancel(i){let o=Jr(yi(i.sid),"turn.pid");try{let n=await import("fs/promises"),d=parseInt(await n.readFile(o,"utf-8"),10);if(d>0)process.kill(d,"SIGTERM")}catch{}},async close(i){if(i.codexThreadId)try{let o=i.__env??{},n=await Br(i.workdir,o);await Ar(n).catch(()=>{}),await n.request("thread/archive",{threadId:i.codexThreadId}).catch(()=>{}),n.close()}catch{}await si(i.sid,{ts:ri(),kind:"session_closed"}),i.status="closed",i.lastActiveAt=ri(),await j(i)},async isAlive(i){return i.status!=="closed"}}});import{randomUUID as Xl}from"crypto";async function ln(i){let o=go[i.backend],n=ie[i.backend],d=oi(n);if(!d)throw Error(`client ${n} \u672A\u6CE8\u518C`);let e=await Kr(i.backend,i.providerId,i.model);if(!e)throw Error(`\u6CA1\u627E\u5230 ${i.backend} \u53EF\u7528\u7684 provider${i.model?`\uFF08\u542B\u6A21\u578B ${i.model}\uFF09`:""}`);let u=_(e);if(i.model)u.model=i.model;let r=d.getEnvVars(u),t=Xl(),c={sid:t,backend:i.backend,name:i.name??`${i.backend}-${t.slice(0,8)}`,model:i.model,workdir:i.workdir??process.cwd(),status:"idle",approvalMode:i.approvalMode??"yolo",turnCount:0,createdAt:Date.now(),lastActiveAt:Date.now(),providerId:e.id};await Mr(c);let a=await o.start({sid:t,name:c.name,model:i.model,workdir:c.workdir,approvalMode:i.approvalMode??"yolo",env:r,providerId:e.id,providerHint:{type:e.type,apiKey:e.apiKey,baseUrl:e.baseUrl}});return await j(a),a}async function mn(i,o,n){let d=await zo(i);if(!d)throw Error(`session ${i} \u4E0D\u5B58\u5728`);if(d.status==="closed")throw Error(`session ${i} \u5DF2\u5173\u95ED`);let e=go[d.backend],u=await oe(d);if(d.backend==="claude")Pr(d,u);else if(d.backend==="codex")rd(d,u);return e.send(d,o,n)}async function xn(i){let o=await zo(i);if(!o)return;if(o.backend==="codex")rd(o,await oe(o));await go[o.backend].cancel(o)}async function $o(i,o=!1){let n=await zo(i);if(!n)return;if(n.backend==="codex")rd(n,await oe(n));if(await go[n.backend].close(n),o)await Z0(i)}async function td(){return jn()}function Kl(i,o={}){return i.filter((n)=>{if(o.status&&o.status.length>0){if(!o.status.includes(n.status))return!1}else if(!o.includeClosed&&n.status==="closed")return!1;if(o.namePrefix&&!n.name.startsWith(o.namePrefix))return!1;if(o.backend&&n.backend!==o.backend)return!1;if(o.model&&n.model!==o.model)return!1;if(o.turns!==void 0&&n.turnCount!==o.turns)return!1;return!0})}async function cd(i={}){return Kl(await jn(),i)}async function ad(i,o=50){let n=await zo(i);if(!n)return null;let d=await id(i,o),e=await go[n.backend].isAlive(n);return{meta:n,log:d,alive:e}}async function pd(){let i=await jn(),o=0;for(let n of i){if(n.status==="closed"){await Z0(n.sid),o++;continue}if(n.backend==="codex"){if(!await go.codex.isAlive(n))n.status="dead",await j(n)}}return o}async function Kr(i,o,n){let d=await z(),e=await V(),u=ie[i];if(o){let p=e.find((l)=>l.id===o);if(p)return p}let t=d.agentDefaults?.[i];if(t){let p=e.find((l)=>l.id===t);if(p)return p}let c=await Qi(u);if(n){let p=oi(u);if(p){for(let l of c)if(kn(p,l).some((w)=>w.id===`model-${n}`))return l}}let a=d.clientProviderMap?.[u];if(a){let p=e.find((l)=>l.id===a);if(p)return p}return c[0]}async function oe(i){let o=ie[i.backend],n=oi(o);if(!n)return{};let d=await V(),e=i.providerId?d.find((r)=>r.id===i.providerId):void 0;if(!e)e=await Kr(i.backend,void 0,i.model);if(!e)return{};let u=_(e);if(i.model)u.model=i.model;return i.__providerHint={type:e.type,apiKey:e.apiKey,baseUrl:e.baseUrl},n.getEnvVars(u)}async function Vr(i,o){let{saveConfig:n}=await Promise.resolve().then(() => (C(),Nn)),d=await z(),e=d.agentDefaults??{};e[i]=o,d.agentDefaults=e,await n(d)}async function ld(){return(await z()).agentDefaults??{}}var go,ie;var md=N(()=>{Cr();Xr();Zi();C();ai();E();go={claude:Sr,codex:Tr},ie={claude:"claude-code",codex:"codex"}});function Mo(i,o="human",n={}){if(o==="json"){process.stdout.write(JSON.stringify(ne(i))+`
|
|
310
|
+
`);return}if(o==="verbose"){Zl(i,new Date(i.ts).toISOString().slice(11,23),{expandError:!0,...n});return}Vl(i,n)}function Zr(i){if(i===void 0||i===null)return"";let o;try{o=typeof i==="string"?i:JSON.stringify(i,null,2)}catch{o=String(i)}return o.split(`
|
|
311
|
+
`).map((n)=>` \u2502 ${n}`).join(`
|
|
312
|
+
`)}function Vl(i,o){switch(i.kind){case"text_delta":process.stdout.write(i.text);break;case"tool_use":{let n=Fr(i.input)??Ri(JSON.stringify(i.input),240);console.log(`
|
|
313
|
+
$ ${n}`);break}case"tool_result":{let n=Er(i.output);if(Go(i.output)){console.log(` \u2717 FAILED${n?` ${n}`:""}`);let e=Fl(i.output);if(e)console.log(e.split(`
|
|
314
|
+
`).map((u)=>` \u2502 ${u}`).join(`
|
|
315
|
+
`))}else if(n)console.log(` ${n}`);break}case"approval_required":console.log(`
|
|
316
|
+
\u26A0 APPROVAL [${i.approvalType}] id=${i.approvalId}`),console.log(` ${wn(i.approvalType,i.params)}`);break;case"turn_completed":console.log(`
|
|
317
|
+
\u25C0 turn done${i.stopReason&&i.stopReason!=="end_turn"?` (${i.stopReason})`:""}`);break;case"error":{if(console.log(`
|
|
318
|
+
\u2717 ${i.message}`),o.expandError&&i.raw!==void 0)console.log(Zr(i.raw));else if(i.raw!==void 0)console.log(" (\u8BE6\u7EC6\u9519\u8BEF\u5DF2\u6298\u53E0\uFF0C--errors-only \u6216 logs --errors \u5C55\u5F00)");break}default:break}}function Zl(i,o,n){switch(i.kind){case"session_started":console.log(`[${o}] \u25B6 session_started ${i.backend}${i.model?` model=${i.model}`:""}`);break;case"turn_started":console.log(`[${o}] \u25B6 turn_started ${i.turnId}`);break;case"text_delta":process.stdout.write(i.text);break;case"reasoning_delta":console.log(`
|
|
319
|
+
[${o}] \uD83D\uDCAD ${Ri(i.text,240)}`);break;case"tool_use":console.log(`
|
|
320
|
+
[${o}] \uD83D\uDD27 ${i.name} ${Ri(JSON.stringify(i.input),240)}`);break;case"tool_result":{let d=Go(i.output);console.log(`[${o}] ${d?"\u2717":"\u2713"} ${Ri(JSON.stringify(i.output),240)}`);break}case"approval_required":console.log(`[${o}] \u26A0 approval_required (${i.approvalType}) id=${i.approvalId}`);break;case"turn_completed":console.log(`
|
|
321
|
+
[${o}] \u25C0 turn_completed${i.stopReason?` (${i.stopReason})`:""}`);break;case"error":{if(console.log(`
|
|
322
|
+
[${o}] \u2717 ${i.message}`),n.expandError!==!1&&i.raw!==void 0)console.log(Zr(i.raw));break}case"session_closed":console.log(`[${o}] \u23F9 session_closed`);break}}function ne(i){let o={kind:i.kind,ts:i.ts};switch(i.kind){case"session_started":if(o.backend=i.backend,i.model)o.model=i.model;return o.sid=i.sid,o;case"turn_started":return o;case"text_delta":return o.text=i.text,o;case"reasoning_delta":return o.text=i.text,o;case"tool_use":{o.tool=i.name;let n=Fr(i.input);return o.input=n?{command:n}:i.input,o}case"tool_result":return o.summary=Er(i.output)??"",o;case"approval_required":return o.approvalId=i.approvalId,o.approvalType=i.approvalType,o.detail=wn(i.approvalType,i.params),o;case"turn_completed":if(i.stopReason&&i.stopReason!=="end_turn")o.stopReason=i.stopReason;return o;case"error":return o.message=i.message,o;case"session_closed":return o}}function Fr(i){if(!i||typeof i!=="object")return null;let o=i.command??i.cmd;if(typeof o!=="string")return null;let n=o.match(/^(?:\S*sh|\S*bash|\S*zsh)(?:\s+-\w+)*\s+["'](.*)["']\s*$/s);return n?n[1]:o}function Er(i){if(!i)return null;if(typeof i==="string")return Ri(i,160);if(typeof i!=="object")return String(i);if(i.approval){let d=i.approval,e=i.reason?`: ${i.reason}`:"";return`[${d}]${e}`}let o=i.stdout??i.output,n=i.exit_code??i.exitCode;if(typeof o==="string"||typeof n==="number"){let d=typeof o==="string"?o.split(`
|
|
323
|
+
`).find((r)=>r.trim())??"":"",e=d.length<=120?d:d.slice(0,120)+"\u2026",u=typeof n==="number"?` (exit ${n})`:"";return`${e}${u}`}return Ri(JSON.stringify(i),160)}function Go(i){if(!i||typeof i!=="object")return!1;let o=i.exit_code??i.exitCode;if(typeof o==="number"&&o!==0)return!0;if(i.is_error===!0||i.error)return!0;if(i.approval==="deny"||i.approval==="denied")return!0;return!1}function Fl(i){if(!i||typeof i!=="object")return null;let o=i.stderr??i.error_output;if(typeof o==="string"&&o.trim())return o.trimEnd();let n=i.error;if(typeof n==="string"&&n.trim())return n.trimEnd();return null}function _r(i){return i.some((o)=>o.kind==="error"||o.kind==="tool_result"&&Go(o.output))}function wn(i,o){if(i==="exec"){let n=String(o?.command??""),d=n.match(/^(?:\S*sh|\S*bash|\S*zsh)(?:\s+-\w+)*\s+["'](.*)["']\s*$/s);return`command=${Ri(d?d[1]:n,200)}`}if(i==="patch"){let n=[];if(Array.isArray(o?.changes)){for(let d of o.changes)if(d?.path)n.push(d.path)}if(o?.path)n.push(o.path);return n.length?`paths=${n.slice(0,5).join(", ")}`:Ri(JSON.stringify(o),200)}return Ri(JSON.stringify(o),200)}function Ri(i,o){if(i.length<=o)return i;return i.slice(0,o)+`\u2026(+${i.length-o})`}var it={};ii(it,{runAgentCommand:()=>_l});import{existsSync as de}from"fs";import{stat as xd}from"fs/promises";import{createReadStream as El}from"fs";function fi(i){let o=[],n={};for(let d=0;d<i.length;d++){let e=i[d];if(e.startsWith("--")){let u=e.indexOf("=");if(u>0)n[e.slice(2,u)]=e.slice(u+1);else{let r=i[d+1];if(r!==void 0&&!r.startsWith("--"))n[e.slice(2)]=r,d++;else n[e.slice(2)]=!0}}else o.push(e)}return{positional:o,flags:n}}function Ur(i){let o=Math.floor(i/1000);if(o<60)return`${o}s`;if(o<3600)return`${Math.floor(o/60)}m`;if(o<86400)return`${Math.floor(o/3600)}h`;return`${Math.floor(o/86400)}d`}function ee(i){let o={},n=!1;if(typeof i.status==="string")o.status=i.status.split(",").map((d)=>d.trim()).filter(Boolean),n=!0;if(typeof i["name-prefix"]==="string")o.namePrefix=i["name-prefix"],n=!0;if(typeof i.backend==="string")o.backend=i.backend,n=!0;if(typeof i.model==="string")o.model=i.model,n=!0;if(typeof i.turns==="string")o.turns=parseInt(i.turns,10),n=!0;if(i.all===!0||i.closed===!0)o.includeClosed=!0;return{filter:o,hasFilter:n}}async function _l(i){let o=i[0],n=i.slice(1);if(!o||o==="help"||o==="-h"||o==="--help"){Dr();return}switch(o){case"start":return Ul(n);case"run":return Dl(n);case"list":case"ls":return jl(n);case"send":return im(n);case"cancel":return om(n);case"close":return nm(n);case"show":return dm(n);case"logs":case"log":return em(n);case"attach":return um(n);case"purge":return rm();case"default":return lm(n);case"defaults":return mm();case"approve":return tm(n);case"pending":return cm(n);case"policy":return am(n);case"wait":return pm(n);default:console.error(`\u672A\u77E5\u5B50\u547D\u4EE4: ${o}`),Dr(),process.exit(1)}}function Dr(){console.log(`
|
|
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 td()).filter((d)=>d.sid.startsWith(i));if(n.length===0)return i;if(n.length>1)console.error(`sid \u524D\u7F00 "${i}" \u5339\u914D\u591A\u4E2A`),process.exit(1);return n[0].sid}async function Ul(i){let{positional:o,flags:n}=fi(i),d=o[0];if(d!=="claude"&&d!=="codex")console.error("\u7528\u6CD5: tako agent start <claude|codex>"),process.exit(1);let e;if(typeof n.approval==="string"){if(n.approval!=="yolo"&&n.approval!=="external")console.error("--approval \u4EC5\u652F\u6301 yolo|external"),process.exit(1);e=n.approval}let u=await ln({backend:d,model:typeof n.model==="string"?n.model:void 0,name:typeof n.name==="string"?n.name:void 0,workdir:typeof n.cwd==="string"?n.cwd:void 0,providerId:typeof n.provider==="string"?n.provider:void 0,approvalMode:e});if(n.json){process.stdout.write(JSON.stringify({sid:u.sid,name:u.name,backend:u.backend,model:u.model??null,workdir:u.workdir,approvalMode:u.approvalMode??"yolo"})+`
|
|
354
|
+
`);return}if(console.log(`\u2713 ${u.backend} session \u5DF2\u521B\u5EFA`),console.log(` sid: ${u.sid}`),console.log(` name: ${u.name}`),u.model)console.log(` model: ${u.model}`);console.log(` workdir: ${u.workdir}`),console.log(` approval: ${u.approvalMode??"yolo"}`),console.log(`
|
|
355
|
+
\u540E\u7EED\uFF1Atako agent send ${u.sid} "\u4F60\u7684 prompt"`)}async function Dl(i){let{positional:o,flags:n}=fi(i),d=o[0];if(d!=="claude"&&d!=="codex")console.error('\u7528\u6CD5: tako agent run <claude|codex> --prompt "..."'),process.exit(1);let e=typeof n.prompt==="string"?n.prompt:o.slice(1).join(" ");if(!e)console.error("\u7F3A\u5C11 --prompt"),process.exit(1);let u=!!n.json,r=!!n.purge,t;if(typeof n.approval==="string"){if(n.approval!=="yolo"&&n.approval!=="external")console.error("--approval \u4EC5\u652F\u6301 yolo|external"),process.exit(1);t=n.approval}let c="",a,p=[];try{let x=await ln({backend:d,model:typeof n.model==="string"?n.model:void 0,name:typeof n.name==="string"?n.name:void 0,workdir:typeof n.cwd==="string"?n.cwd:void 0,providerId:typeof n.provider==="string"?n.provider:void 0,approvalMode:t});if(c=x.sid,!u)console.log(`\u2192 run ${c.slice(0,8)} (${x.backend}${x.model?` ${x.model}`:""})`);await mn(c,e,{onFrame:(w)=>{if(w.kind==="text_delta")p.push(w.text);else if(w.kind==="error")a=w.message;if(!u)Mo(w,"human")}})}catch(x){a=x instanceof Error?x.message:String(x)}let l=a?"error":"ok";if(r&&c)try{await $o(c,!0)}catch{}if(u)process.stdout.write(JSON.stringify({sid:c,status:l,text:p.join(""),error:a??null,purged:r})+`
|
|
356
|
+
`);else{if(a)console.error(`\u2717 run \u5931\u8D25: ${a}`);if(c&&!r)console.log(`
|
|
357
|
+
session \u4FDD\u7559: ${c.slice(0,8)}\uFF08tako agent show ${c.slice(0,8)} \u67E5\u770B\uFF1B--purge \u53EF\u81EA\u52A8\u56DE\u6536\uFF09`)}if(a)process.exit(1)}async function jl(i){let{flags:o}=fi(i),{filter:n}=ee(o),d=await cd(n);if(o.json){process.stdout.write(JSON.stringify(d)+`
|
|
358
|
+
`);return}let e=d.filter((l)=>l.status==="running").length;if(d.length===0){console.log("(\u65E0\u5339\u914D session)");return}let u=await Promise.all(d.map(async(l)=>_r(await id(l.sid,60)))),r=0,t=d.map((l,x)=>{let w=u[x];if(w)r++;return{sid:l.sid.slice(0,8),backend:l.backend,name:l.name.slice(0,20),model:(l.model??"-").slice(0,24),status:l.status+(w?" \u26A0":""),turns:String(l.turnCount),age:Ur(Date.now()-l.createdAt),last:Ur(Date.now()-l.lastActiveAt)}}),c=["sid","backend","name","model","status","turns","age","last"],a=c.map((l,x)=>Math.max(l.length,...t.map((w)=>w[l].length))),p=(l)=>l.map((x,w)=>x.padEnd(a[w])).join(" ");console.log(p(c)),console.log(p(a.map((l)=>"\u2500".repeat(l))));for(let l of t)console.log(p(c.map((x)=>l[x])));console.log(`
|
|
359
|
+
\u5171 ${d.length} \u4E2A\u5339\u914D${e>0?`\uFF0C${e} \u4E2A running`:""}${r>0?`\uFF0C${r} \u4E2A\u6709\u9519\u8BEF(\u26A0\uFF0Clogs <sid> --errors \u67E5\u770B)`:""}\uFF08\u9ED8\u8BA4\u9690\u85CF closed\uFF0C--all \u663E\u793A\u5168\u90E8\uFF09`)}async function im(i){let o=new Set,n=[...i];while(n[0]&&n[0].startsWith("--"))o.add(n.shift());let d=n[0],e=n.slice(1).join(" ");if(!d||!e)console.error("\u7528\u6CD5: tako agent send [--json|--verbose] <sid> <prompt...>"),process.exit(1);let u=o.has("--json")?"json":o.has("--verbose")?"verbose":"human",r=await $i(d);if(u!=="json")console.log(`\u2192 ${r.slice(0,8)}`);await mn(r,e,{onFrame:(t)=>Mo(t,u)})}async function om(i){let{positional:o,flags:n}=fi(i),{filter:d,hasFilter:e}=ee(n);if(e&&!o[0]){let r=await cd(d);if(!await jr("cancel",r,!!n.yes,!!n.json))return;for(let t of r)try{await xn(t.sid)}catch{}if(!n.json)console.log(`\u2713 \u5DF2\u4E2D\u6B62 ${r.length} \u4E2A`);return}let u=await $i(o[0]);await xn(u),console.log(`\u2713 \u5DF2\u4E2D\u6B62 ${u.slice(0,8)}`)}async function nm(i){let{positional:o,flags:n}=fi(i),{filter:d,hasFilter:e}=ee(n);if(e&&!o[0]){let r=await cd(d);if(!await jr(n.purge?"close+purge":"close",r,!!n.yes,!!n.json))return;for(let t of r)try{await $o(t.sid,!!n.purge)}catch{}if(!n.json)console.log(`\u2713 \u5DF2\u5173\u95ED ${r.length} \u4E2A${n.purge?"\uFF08\u5DF2\u5220\u9664\u76EE\u5F55\uFF09":""}`);return}let u=await $i(o[0]);await $o(u,!!n.purge),console.log(`\u2713 \u5DF2\u5173\u95ED ${u.slice(0,8)}${n.purge?"\uFF08\u5DF2\u5220\u9664\u76EE\u5F55\uFF09":""}`)}async function jr(i,o,n,d){if(o.length===0){if(!d)console.log("(\u65E0\u5339\u914D session)");return!1}if(d||n)return!0;console.log(`\u5C06\u5BF9\u4EE5\u4E0B ${o.length} \u4E2A session \u6267\u884C ${i}\uFF1A`);for(let r of o)console.log(` ${r.sid.slice(0,8)} ${r.name} [${r.status}]`);process.stdout.write("\u786E\u8BA4\uFF1F(y/N) ");let u=(await import("readline/promises")).createInterface({input:process.stdin,output:process.stdout});try{let r=await u.question("");return/^y(es)?$/i.test(r.trim())}finally{u.close()}}async function dm(i){let{positional:o,flags:n}=fi(i),d=await $i(o[0]),e=!!n["errors-only"]||!!n.errors,u=typeof n.lines==="string"?parseInt(n.lines,10):e?1e4:30,r=n.json?"json":"human",t=await ad(d,u);if(!t)console.error(`session ${d} \u4E0D\u5B58\u5728`),process.exit(1);let c=t.log;if(e)c=c.filter((p)=>p.kind==="error"||p.kind==="tool_result"&&Go(p.output));if(r==="json"){process.stdout.write(JSON.stringify({meta:t.meta,alive:t.alive,log:c.map(ne)},null,2)+`
|
|
360
|
+
`);return}let a=t.meta;if(console.log(`# ${a.sid.slice(0,8)} ${a.backend}${a.model?` ${a.model}`:""}`),console.log(`name=${a.name} status=${a.status} turns=${a.turnCount} approval=${a.approvalMode??"yolo"} alive=${t.alive}`),console.log(`workdir=${a.workdir}`),console.log(`
|
|
361
|
+
--- ${e?"errors":"log"} (${c.length}) ---`),e&&c.length===0){console.log("(\u65E0\u9519\u8BEF\u5E27)");return}for(let p of c)Mo(p,r,{expandError:e})}async function em(i){let{positional:o,flags:n}=fi(i),d=await $i(o[0]);if(!de(D(d)))console.error(`session ${d} \u4E0D\u5B58\u5728`),process.exit(1);let e=!!n.errors,u=(await import("fs/promises")).readFile,t=(await u(D(d),"utf-8")).split(`
|
|
362
|
+
`).filter(Boolean),c=!1;for(let a of t){let p;try{p=JSON.parse(a)}catch{continue}let l=p.kind==="error"||p.kind==="tool_result"&&Go(p.output);if(l)c=!0;if(e&&!l)continue;if(n.json)process.stdout.write(a+`
|
|
363
|
+
`);else Mo(p,"verbose",{expandError:!0})}if(e&&!c&&!n.json)console.log("(\u65E0\u9519\u8BEF\u5E27)")}async function um(i){let{positional:o,flags:n}=fi(i),d=await $i(o[0]),e=n.json?"json":n.verbose?"verbose":"human";if(!de(D(d)))console.error(`session ${d} \u4E0D\u5B58\u5728`),process.exit(1);let u=(await xd(D(d))).size;if(e!=="json")console.log(`(attached to ${d.slice(0,8)}; Ctrl-C \u9000\u51FA)`);let r=setInterval(async()=>{try{let t=(await xd(D(d))).size;if(t<=u)return;let c=El(D(d),{start:u,end:t-1});u=t;let a="";c.on("data",(p)=>{a+=typeof p==="string"?p:p.toString("utf-8");let l;while((l=a.indexOf(`
|
|
364
|
+
`))>=0){let x=a.slice(0,l);if(a=a.slice(l+1),!x.trim())continue;try{Mo(JSON.parse(x),e)}catch{}}})}catch{}},200);await new Promise((t)=>{process.on("SIGINT",()=>{clearInterval(r),t()})})}async function rm(){let i=await pd();console.log(`\u2713 \u6E05\u7406\u4E86 ${i} \u4E2A closed/dead session`)}async function tm(i){let{positional:o,flags:n}=fi(i),d=await $i(o[0]),e=o[1],u=o[2];if(!e||u!=="allow"&&u!=="deny")console.error("\u7528\u6CD5: tako agent approve <sid> <approvalId> <allow|deny>"),process.exit(1);let r=await cn(d,e);if(r)console.error(`approval ${e} \u5DF2\u6279\u4E3A ${r.decision}`),process.exit(1);if(await od(d,e,{decision:u,reason:typeof n.reason==="string"?n.reason:void 0,by:typeof n.by==="string"?n.by:"cli",decidedAt:Date.now()}),console.log(`\u2713 approval ${e} = ${u}`),typeof n.rule==="string"&&u==="allow")await Rr(d,n.rule),console.log(`\u2713 policy: exec_allow += /${n.rule}/`)}async function cm(i){let{positional:o,flags:n}=fi(i),d=await $i(o[0]),e=await an(d);if(n.json){process.stdout.write(JSON.stringify(e.map((u)=>({approvalId:u.approvalId,type:u.approvalType,detail:wn(u.approvalType,u.params)})),null,2)+`
|
|
365
|
+
`);return}if(e.length===0){console.log("(\u65E0 pending)");return}for(let u of e)console.log(`[${u.approvalType}] id=${u.approvalId} ${wn(u.approvalType,u.params)}`)}async function am(i){if(i[0]==="default-show"){console.log(JSON.stringify(_0,null,2));return}let o=await $i(i[0]),n=i[1];if(!n||n==="show"){let e=await dd(o),u=await ed(o);console.log("=== effective policy ==="),console.log(JSON.stringify(e,null,2)),console.log(`
|
|
366
|
+
=== session override ===`),console.log(Object.keys(u).length===0?"(\u7A7A)":JSON.stringify(u,null,2));return}let d=i.slice(2).join(" ").trim();if(n==="allow-exec"||n==="deny-exec"){if(!d)console.error(`\u7528\u6CD5: tako agent policy <sid> ${n} <regex>`),process.exit(1);let e=await ed(o),u=n==="allow-exec"?"exec_allow":"exec_deny",r=e[u]??[];if(!r.includes(d))r.push(d);e[u]=r,await ud(o,e),console.log(`\u2713 ${u} += /${d}/`);return}if(n==="reset"){await ud(o,{}),console.log("\u2713 \u7B56\u7565\u5DF2\u6E05\u7A7A");return}console.error(`\u672A\u77E5 policy \u5B50\u547D\u4EE4: ${n}`),process.exit(1)}async function pm(i){let{positional:o,flags:n}=fi(i),d=await $i(o[0]),e=!!n.json,u=typeof n.timeout==="string"?Number(n.timeout)*1000:600000,r=typeof n.since==="string"?Number(n.since):0;if(!de(D(d))){if(e)process.stdout.write(JSON.stringify({event:"not_found",sid:d})+`
|
|
367
|
+
`);else console.error(`session ${d} \u4E0D\u5B58\u5728`);process.exit(1)}let t=r>0?0:(await xd(D(d))).size,c=Date.now(),a=[];while(Date.now()-c<u){try{let p=(await xd(D(d))).size;if(p>t){let x=await(await import("fs/promises")).open(D(d),"r"),w=Buffer.alloc(p-t);await x.read(w,0,w.length,t),await x.close(),t=p;for(let y of w.toString("utf-8").split(`
|
|
368
|
+
`)){if(!y.trim())continue;let s;try{s=JSON.parse(y)}catch{continue}if(r>0&&s.ts<r)continue;if(s.kind==="text_delta"){a.push(s.text);continue}if(s.kind==="approval_required"){let b=await an(d);if(e)process.stdout.write(JSON.stringify({event:"approval_required",pending:b.map((f)=>({approvalId:f.approvalId,type:f.approvalType}))})+`
|
|
369
|
+
`);else console.log(`event=approval_required pending=${b.length}`);process.exit(0)}if(s.kind==="turn_completed"){if(e)process.stdout.write(JSON.stringify({event:"turn_completed",text:a.join("")})+`
|
|
370
|
+
`);else if(console.log("event=turn_completed"),a.join("").trim())console.log(a.join("").trim());process.exit(2)}if(s.kind==="error"){if(e)process.stdout.write(JSON.stringify({event:"error",message:s.message})+`
|
|
371
|
+
`);else console.error(`event=error ${s.message}`);process.exit(1)}if(s.kind==="session_closed"){if(e)process.stdout.write(JSON.stringify({event:"session_closed"})+`
|
|
372
|
+
`);else console.log("event=session_closed");process.exit(3)}}}}catch{}await new Promise((p)=>setTimeout(p,200))}if(e)process.stdout.write(JSON.stringify({event:"timeout"})+`
|
|
373
|
+
`);else console.error("event=timeout");process.exit(1)}async function lm(i){let o=i[0],n=i[1];if(o!=="claude"&&o!=="codex"||!n)console.error("\u7528\u6CD5: tako agent default <claude|codex> <providerId>"),process.exit(1);await Vr(o,n),console.log(`\u2713 ${o} \u9ED8\u8BA4 provider = ${n}`)}async function mm(){let i=await ld();if(Object.keys(i).length===0)console.log("(\u672A\u8BBE\u7F6E)");else for(let[o,n]of Object.entries(i))console.log(`${o.padEnd(8)} \u2192 ${n}`)}var ot=N(()=>{Zi();md();D0()});var ue;var re=N(()=>{ue={name:"model-benchmark",description:"Tako \u6A21\u578B\u8BC4\u6D4B\u7ED3\u679C\u4E0E\u63A8\u8350 \u2014 \u67E5\u8BE2\u5404\u6A21\u578B\u7F16\u7801\u80FD\u529B\u8BC4\u5206",filename:"SKILL.md",content:`---
|
|
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 te;var ce=N(()=>{te={name:"tako-agent",description:"\u957F\u65F6 agent session \u7BA1\u7406 \u2014 \u542F\u52A8/\u7EED\u63A5/\u76D1\u63A7/\u5173\u95ED Claude/Codex agent",filename:"SKILL.md",content:`---
|
|
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 wd;var nt=N(()=>{re();ce();re();ce();wd=[ue,te]});var dt={};ii(dt,{runSkillCommand:()=>ym});import{join as ae}from"path";import{existsSync as xm,mkdirSync as wm}from"fs";async function ym(i){let o=i[0];if(!o||o==="list"){console.log(`
|
|
516
|
+
Available skills:
|
|
517
|
+
`);for(let n of wd)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"?wd:wd.filter((u)=>u.name===n);if(d.length===0)console.error(`Skill "${n}" not found. Run "tako skill list" to see available skills.`),process.exit(1);let e=ae(process.cwd(),".claude","skills");for(let u of d){let r=ae(e,u.name),t=ae(r,u.filename);if(xm(t)){console.log(` skip ${u.name} (already exists)`);continue}wm(r,{recursive:!0}),await Bun.write(t,u.content),console.log(` \u2713 installed ${u.name} \u2192 .claude/skills/${u.name}/${u.filename}`)}return}console.error(`Unknown subcommand: ${o}. Try "tako skill list" or "tako skill install <name>".`),process.exit(1)}var et=N(()=>{nt()});var rt={};ii(rt,{runModelsCommand:()=>$m});function sm(i){let o={json:!1,refresh:!1},n=[...i];if(n[0]==="list")n.shift();for(let d of n)if(d==="--json")o.json=!0;else if(d==="--refresh")o.refresh=!0;else return o.invalid=d,o;return o}function fm(i){return(i.providers??[]).filter((n)=>n.type==="tako"&&!!n.baseUrl).sort((n,d)=>n.id.localeCompare(d.id))}function vm(i){return[...i].sort((o,n)=>o.id.localeCompare(n.id)||o.displayName.localeCompare(n.displayName))}function hm(i,o){let n=[],d=!1;for(let e of ut){let u=o(i.baseUrl,e);if(u===null){n.push({apiType:e,models:[]});continue}d=!0,n.push({apiType:e,models:vm(u)})}return{id:i.id,name:i.name,baseUrl:i.baseUrl,buckets:n,hasAnyCache:d}}async function bm(i,o){let n=[];for(let d of i){if(!d.apiKey||!d.baseUrl)continue;for(let e of ut)n.push(o(d.baseUrl,d.apiKey,e).catch(()=>{}))}await Promise.allSettled(n)}function Nm(i){let o=new Set,n=[];for(let d of i)for(let e of d.models){if(o.has(e.id))continue;o.add(e.id),n.push(e.id)}return n.sort((d,e)=>d.localeCompare(e))}function Wm(i){let o=[],n=[],d="";for(let e of i){let u=e.slice(0,3);if(u!==d){if(n.length)o.push(n);n=[e],d=u}else n.push(e)}if(n.length)o.push(n);return o}function km(i,o){if(i.length===0)return[];let n=4,e=Math.max(...i.map((a)=>a.length))+2,u=Math.max(e,o-n),r=Math.max(1,Math.floor(u/e)),t=Math.min(r,Lm),c=[];for(let a=0;a<i.length;a+=t){let p=i.slice(a,a+t),l=p.map((x,w)=>w===p.length-1?x:x.padEnd(e)).join("");c.push(" ".repeat(n)+l)}return c}function zm(i,o){if(i.length===0)return`\u672A\u914D\u7F6E Tako \u6E20\u9053
|
|
520
|
+
`;let n=[];for(let d of i){if(n.push(`Provider: ${d.id} (${d.baseUrl})`),!d.hasAnyCache){n.push(" \u7F13\u5B58\u4E3A\u7A7A\uFF0C\u8BF7\u5148\u8FD0\u884C `tako models list --refresh`"),n.push("");continue}let e=Nm(d.buckets);n.push(` ${e.length} models`);for(let u of Wm(e))n.push(...km(u,o));n.push("")}return n.join(`
|
|
521
|
+
`)}function gm(i,o,n){let d=i.map((u)=>({id:u.id,name:u.name,baseUrl:u.baseUrl,hasCache:u.hasAnyCache,models:u.buckets.flatMap((r)=>r.models.map((t)=>({apiType:r.apiType,id:t.id,displayName:t.displayName,description:t.description,contextWindow:t.contextWindow,sortOrder:t.sortOrder})))}));return`${JSON.stringify({command:"list",refreshed:o,fetchedAt:n,providers:d})}
|
|
522
|
+
`}async function $m(i=[],o={}){let n=sm(i);if(n.invalid)return process.stderr.write(`Unknown argument: ${n.invalid}
|
|
523
|
+
Usage: tako models [list] [--refresh] [--json]
|
|
524
|
+
`),1;let d=o.loadConfig??z,e=o.refresh??Cn,u=o.read??Hi,r=o.now??(()=>Date.now()),t=o.columns??(()=>process.stdout.columns??80),c=await d(),a=fm(c);if(n.refresh&&a.length>0)await bm(a,e);let p=a.map((x)=>hm(x,u)),l=new Date(r()).toISOString();if(n.json)process.stdout.write(gm(p,n.refresh,l));else process.stdout.write(zm(p,t()));return 0}var ut,Lm=5;var tt=N(()=>{C();Xd();ut=["openai","claude"]});var le="0.3.18",yn=22,m,So,Po,pt,lt,Co,Fi;var Io=N(()=>{m={bg:"#17130f",panel:"#211b16",panelMuted:"#2b231c",text:"#ece3d8",muted:"#94897c",border:"#3a3129",orange:"#fb8147",orangeDim:"#c96a3a",cyan:"#8fb8a8",green:"#8fbf7a",yellow:"#e6b45c",red:"#e58f7b",magenta:"#c99bd6",blue:"#88a8d8",gray:"#94897c"},So={"claude-code":{icon:"*",color:m.orange},codex:{icon:"C",color:m.blue},gemini:{icon:"G",color:m.green}},Po={icon:"-",color:m.text},pt=["\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588"," \u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588"," \u2588 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588"," \u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588"," \u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588"].join(`
|
|
525
|
+
`),lt=["\u2580\u2588\u2580 \u2584\u2580\u2588 \u2588\u2584\u2580 \u2588\u2580\u2588"," \u2588 \u2588\u2580\u2588 \u2588 \u2588 \u2588\u2584\u2588"].join(`
|
|
526
|
+
`),Co=["tako","claude-subscription","codex-subscription","anthropic","deepseek","xiaomi","custom"],Fi=[{value:"en",label:"English"},{value:"zh",label:"\u4E2D\u6587"}]});async function mt(i=45){let o=Ie(),n=await Du(),d=await ei(),e=Ii()==="zh",u=[...o].sort((c,a)=>{if(c.id===n)return-1;if(a.id===n)return 1;return 0}),r=[];for(let c of u){let a=await Uu(c.id,L0,!0),p=process.cwd(),l=[{label:e?"\u5728\u5F53\u524D\u76EE\u5F55\u542F\u52A8":"Launch in current directory",hint:W0(p,i),path:p},...a.map((k)=>({label:W0(k.path,i),hint:ju(k.lastLaunchedAt),path:k.path}))],x=await Qi(c.id),y=await qi(c.id)||x.find((k)=>k.id===d?.id)||x[0],s=y?x.findIndex((k)=>k.id===y.id):0,b=kn(c,y),f=new Set(b.map((k)=>k.id)),M=(await Bn(c.id)).filter((k)=>f.has(k));r.push({client:c,projects:l,providers:x,activeProvider:y,activeProvIdx:Math.max(s,0),launchOptions:b,lastSelectedOptionIds:M})}let t={};try{t=await rr()}catch{t={}}return{clients:r,defaultIdx:0,hasProviders:r.some((c)=>c.providers.length>0),pickCounts:t,zh:e}}var xt=N(()=>{t0();E();H();M0();An();ai()});function co(i,o){let n=[],d=new Set;for(let e of i){if(!e.group){n.push({kind:"flag",opt:e});continue}if(!d.has(e.group))d.add(e.group),n.push({kind:"group",group:e.group,title:e.group==="model"?o?"\u6A21\u578B":"Model":e.group})}return n.push({kind:"provider",title:o?"\u670D\u52A1\u5546":"Provider"}),n}function Ei(i,o,n){return i.find((d)=>d.group===n&&o.has(d.id))}function me(i){let o=[],n={},d=[];for(let e of i.launchOptions){if(!i.enabled.has(e.id))continue;if(o.push(...e.args),e.envVars)Object.assign(n,e.envVars);d.push(e.id)}return{args:o,envVars:n,selectedOptionIds:d}}function wt(i,o,n){let d=new Set(o.map((a)=>a.id)),e=new Set(o.filter((a)=>a.group==="model").map((a)=>a.id)),u=n?`model-${n}`:void 0,r=new Set,t=!1,c=!1;for(let a of i)if(d.has(a)){if(r.add(a),e.has(a))c=!0}else t=!0;if(!c&&u&&e.has(u))r.add(u),t=!0;return t?r:i}async function yt(){let i=await st(),o=Ii();return{...i,screen:"launcher",busy:!1,message:"",providers:[],defaultProviderId:void 0,clientBindings:{},providerTabIdx:i.clientIdx,providerRowIdx:0,providerDetailIdx:0,optionPickerGroup:void 0,optionPickerIdx:0,modelPickerMode:"collapsed",scrollOffset:0,scrollScreen:"launcher",providerSelectedId:void 0,providerInputMode:"add-key",addType:"tako",addKey:"",addUrl:"",addModel:"",addCtx:"",statsLoading:!1,apiKeyValue:"",apiKeyStatus:"idle",languageIdx:Math.max(0,Fi.findIndex((n)=>n.value===o)),agentDefaults:{},agentIdx:0,agentDetailFrames:[],agentDetailInput:"",agentDetailStatus:"idle",agentPendingApprovals:[],agentBackend:"claude",agentModel:"",agentName:"",agentField:"backend",keyGuideIdx:0,clientVersions:[],clientVersionsClientIdx:0,clientVersionsIdx:0,clientVersionsLoading:!1}}async function st(){let i=await mt(48);return{clients:i.clients.map((n)=>({...n,enabled:wt(new Set(n.lastSelectedOptionIds),n.launchOptions,n.activeProvider?.model)})),clientIdx:i.defaultIdx,focus:"tabs",projectIdx:0,optionIdx:0,zh:i.zh,pickCounts:i.pickCounts}}async function vi(i){let o=i.clients[i.clientIdx]?.client.id,n=await st();i.clients=n.clients,i.zh=n.zh,i.pickCounts=n.pickCounts;let d=o?i.clients.findIndex((e)=>e.client.id===o):-1;i.clientIdx=d>=0?d:0,xe(i)}function xe(i){let o=i.clients[i.clientIdx];if(!o)return;let n=co(o.launchOptions,i.zh);i.projectIdx=Math.max(0,Math.min(i.projectIdx,o.projects.length-1)),i.optionIdx=Math.max(0,Math.min(i.optionIdx,n.length-1))}function sn(i){if(i.focus==="options")i.focus="tabs";i.projectIdx=0,i.optionIdx=0,i.optionPickerGroup=void 0,i.optionPickerIdx=0,i.modelPickerMode="collapsed"}function ao(i,o){if(i.screen="provider-input",i.providerInputMode=o,i.providerRowIdx=0,i.addKey="",o==="add-key")i.addUrl="",i.addModel=Fo(i.addType)||"",i.addCtx=""}var sd=N(()=>{Si();H();xt();Io()});async function Lt(){try{let i=await Di();if(!i)return{success:!1,error:"\u672A\u627E\u5230 API ID\uFF0C\u8BF7\u91CD\u65B0\u914D\u7F6E Key"};let n=await(await fetch(`${Y}/apiStats/api/user-stats`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:i})})).json(),e=await(await fetch(`${Y}/apiStats/api/user-model-stats`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiId:i,period:"daily"})})).json();if(!n.success)return{success:!1,error:n.error||n.message||"\u83B7\u53D6\u7EDF\u8BA1\u5931\u8D25"};let u=(e.data||[]).map((r)=>({model:r.model,requests:r.requests,cost:r.formatted?.total||"$0.00"}));return{success:!0,data:{totalRequests:n.data?.usage?.total?.requests||0,totalCost:n.data?.usage?.total?.formattedCost||"$0.00",todayCost:`$${(n.data?.limits?.currentDailyCost||0).toFixed(2)}`,modelStats:u}}}catch(i){return{success:!1,error:i instanceof Error?i.message:"\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25"}}}function Nt(i){return i.toLocaleString("en-US")}var fe=N(()=>{C()});var It={};ii(It,{syncSubscriptionProviderFromLocalAuth:()=>$e,shouldShowKeyGuide:()=>x1,runSubscriptionAuthCommand:()=>ge,refreshQuota:()=>ke,refreshProviders:()=>Ji,refreshAgentDetail:()=>Bi,openStats:()=>hn,openProviders:()=>po,openClientVersions:()=>Me,openAgents:()=>hi,openAgentDetail:()=>ze,loadClientVersions:()=>lo,installClientVersion:()=>Ge,finishProviderAdd:()=>bn,dismissKeyGuide:()=>bd,backToLauncher:()=>Ai});async function ke(i){let o=i.clients[i.clientIdx]?.activeProvider;if(!o){i.quota=void 0,i.quotaKey=void 0;return}let n=`${o.id}:${o.type}`;if(i.quotaKey===n&&i.quota)return;i.quotaKey=n;let{getOfficialQuota:d}=await Promise.resolve().then(() => (Vn(),I0)),e=await d(o);if(i.quotaKey===n)i.quota=e}async function Ji(i){i.providers=await V(),i.defaultProviderId=(await ei())?.id;let o={};for(let n of i.clients)o[n.client.id]=(await qi(n.client.id))?.id;i.clientBindings=o}async function po(i){i.screen="providers",i.message="",i.providerTabIdx=i.clientIdx,i.providerRowIdx=0,await Ji(i)}async function hn(i){i.screen="stats",i.message="",i.statsLoading=!0,i.statsError=void 0;let o=await Lt();if(o.success&&o.data)i.statsData=o.data;else i.statsError=o.error||(i.zh?"\u672A\u77E5\u9519\u8BEF":"Unknown error");i.statsLoading=!1}async function hi(i){i.screen="agents",i.message="",i.agentError=void 0;let[o,n]=await Promise.all([td(),ld()]);i.agentSessions=o,i.agentDefaults=n,i.agentIdx=Math.max(0,Math.min(i.agentIdx,o.length-1))}async function Bi(i){let o=i.agentDetailSid;if(!o)return;let[n,d]=await Promise.all([ad(o,200),an(o)]);if(!n){i.agentError=i.zh?"Session \u4E0D\u5B58\u5728":"Session not found",i.screen="agents",await hi(i);return}i.agentDetailMeta=n.meta,i.agentDetailFrames=n.log,i.agentDetailAlive=n.alive,i.agentPendingApprovals=d}async function ze(i,o){i.screen="agent-detail",i.agentDetailSid=o,i.agentDetailInput="",i.agentDetailStatus="idle",i.agentError=void 0,await Bi(i)}function Ai(i){i.screen="launcher",i.message="",i.apiKeyStatus="idle",i.apiKeyError=void 0}function Ct(i){try{if(process.stdin.isTTY)process.stdin.setRawMode(i)}catch{}}function m1(i){return i==="claude"?["claude","auth","login","--claudeai"]:["codex","login"]}async function ge(i){let o=m1(i);Ct(!1);try{let n=Bun.spawn(o,{stdin:"inherit",stdout:"inherit",stderr:"inherit"});return await n.exited,{ok:n.exitCode===0,exitCode:n.exitCode}}catch(n){return{ok:!1,error:n instanceof Error?n.message:String(n)}}finally{Ct(!1)}}async function $e(i,o){let{invalidateQuotaCache:n}=await Promise.resolve().then(() => (Vn(),I0)),d=await V();if(i==="claude")try{let e=Bun.spawn(["claude","auth","status"],{stdout:"pipe",stderr:"pipe"}),u=await new Response(e.stdout).text();await e.exited;let r=JSON.parse(u.trim());if(!r.loggedIn||r.authMethod!=="claude.ai")return{ok:!1,message:o?"Claude \u767B\u5F55\u672A\u5B8C\u6210":"Claude login not completed"};let t=r.email||"",c=r.subscriptionType||"pro",a=`Claude ${c.charAt(0).toUpperCase()+c.slice(1)}${t?` (${t})`:""}`,{readClaudeAuth:p}=await Promise.resolve().then(() => (qn(),Qn)),l=await p(),x=l.credentials||l.oauthAccount?{credentials:l.credentials,oauthAccount:l.oauthAccount}:void 0,w=d.find((y)=>y.type==="claude-subscription"&&(y.email||"")===t);if(w)return await Xi(w.id,{authData:x}),n(w.id,"claude-subscription"),U(),T(),{ok:!0,message:o?"Claude tokens \u5DF2\u66F4\u65B0":"Claude tokens updated"};else return await eo({name:a,type:"claude-subscription",email:t,subscriptionType:c,supportedClients:di("claude-subscription"),authData:x}),U(),T(),{ok:!0,message:o?"Claude \u8BA2\u9605\u5DF2\u6DFB\u52A0":"Claude subscription added"}}catch(e){return{ok:!1,message:e instanceof Error?e.message:String(e)}}else try{let e=await import("fs/promises"),{homedir:u}=await import("os"),{join:r}=await import("path"),t=JSON.parse(await e.readFile(r(u(),".codex","auth.json"),"utf-8"));if(t.auth_mode!=="chatgpt"||!t.tokens?.access_token)return{ok:!1,message:o?"Codex \u767B\u5F55\u672A\u5B8C\u6210":"Codex login not completed"};let c="";try{c=JSON.parse(atob(t.tokens.id_token.split(".")[1])).email||""}catch{}let a=d.find((p)=>p.type==="codex-subscription"&&(p.email||"")===c);if(a)return await Xi(a.id,{authData:t}),n(a.id,"codex-subscription"),U(),T(),{ok:!0,message:o?"Codex tokens \u5DF2\u66F4\u65B0":"Codex tokens updated"};else return await eo({name:c?`Codex Plus (${c})`:"Codex Subscription",type:"codex-subscription",email:c||void 0,supportedClients:di("codex-subscription"),authData:t}),U(),T(),{ok:!0,message:o?"Codex \u8BA2\u9605\u5DF2\u6DFB\u52A0":"Codex subscription added"}}catch(e){return{ok:!1,message:e instanceof Error?e.message:String(e)}}}async function bn(i){let o=io[i.addType]?.[i.zh?"zh":"en"]||i.addType,n=i.addCtx?Number.parseInt(i.addCtx,10):NaN;await eo({name:o,type:i.addType,apiKey:i.addKey,baseUrl:i.addUrl||Fd(i.addType),model:i.addModel||Fo(i.addType),modelContextWindow:Number.isFinite(n)&&n>0?n:void 0,supportedClients:di(i.addType)}),O("provider_added",{provider_type:i.addType,method:"manual"}),U(),T(),await Ji(i),await vi(i),i.screen="providers",i.providerRowIdx=0,i.message=i.zh?"\u5DF2\u6DFB\u52A0\u670D\u52A1\u5546":"Provider added"}async function Me(i){i.screen="client-versions",i.message="",i.clientVersionsClientIdx=Math.max(0,Math.min(i.clientVersionsClientIdx,i.clients.length-1)),await lo(i)}async function lo(i){let o=i.clients[i.clientVersionsClientIdx];if(!o)return;i.clientVersionsLoading=!0,i.clientVersionsError=void 0,i.clientVersions=[],i.clientVersionsIdx=0;try{let{listAvailableVersions:n,getInstalledVersion:d}=await Promise.resolve().then(() => (Un(),A0)),[e,u]=await Promise.all([n(o.client.package),d(o.client)]);i.clientVersions=e.map((r)=>({...r,isCurrent:r.version===u}))}catch(n){i.clientVersionsError=n instanceof Error?n.message:String(n)}finally{i.clientVersionsLoading=!1}}async function Ge(i,o){let n=i.clients[i.clientVersionsClientIdx];if(!n)return;let{installAtVersion:d}=await Promise.resolve().then(() => (Un(),A0));await d(n.client,o),i.message=i.zh?`\u5DF2\u5207\u6362\u5230 ${o}`:`Switched to ${o}`,await lo(i)}async function bd(i){let{TAKO_DIR:o}=await Promise.resolve().then(() => (C(),Nn)),{join:n}=await import("path"),d=n(o,".key-prompt.json"),e=i==="never"?{never:!0}:{dismissed:new Date().toISOString().slice(0,10)};await Bun.write(d,JSON.stringify(e))}async function x1(){let{TAKO_DIR:i,hasApiKey:o}=await Promise.resolve().then(() => (C(),Nn));if(await o())return!1;let{join:n}=await import("path"),d=n(i,".key-prompt.json"),e={};try{e=await Bun.file(d).json()}catch{e={}}if(e.never)return!1;let u=new Date().toISOString().slice(0,10);if(e.dismissed===u)return!1;return!0}var Ao=N(()=>{ai();Si();xi();fe();md();Zi();sd()});t0();Ci();bo();C();H();xi();x0();import{join as wi}from"path";function Ou(i,o){return["@echo off",'set "TAKO_WINDOWS_HANDOFF_FILE=%TEMP%\\tako-handoff-%RANDOM%-%RANDOM%.ps1"','if exist "%TAKO_WINDOWS_HANDOFF_FILE%" del "%TAKO_WINDOWS_HANDOFF_FILE%" >nul 2>nul',`"${i}" "${o}" %*`,'set "TAKO_EXIT_CODE=%ERRORLEVEL%"','if not exist "%TAKO_WINDOWS_HANDOFF_FILE%" exit /b %TAKO_EXIT_CODE%','powershell.exe -NoProfile -ExecutionPolicy Bypass -File "%TAKO_WINDOWS_HANDOFF_FILE%"',"exit /b %ERRORLEVEL%",""].join(`\r
|
|
527
|
+
`)}function Ru(i,o){return['$env:TAKO_WINDOWS_HANDOFF_FILE = Join-Path ([System.IO.Path]::GetTempPath()) ("tako-handoff-{0}-{1}.ps1" -f $PID, [System.Guid]::NewGuid().ToString("N"))',"Remove-Item -LiteralPath $env:TAKO_WINDOWS_HANDOFF_FILE -Force -ErrorAction SilentlyContinue",`& "${i}" "${o}" @args`,"$code = $LASTEXITCODE","if (Test-Path -LiteralPath $env:TAKO_WINDOWS_HANDOFF_FILE) {"," powershell.exe -NoProfile -ExecutionPolicy Bypass -File $env:TAKO_WINDOWS_HANDOFF_FILE"," exit $LASTEXITCODE","}","exit $code",""].join(`\r
|
|
528
|
+
`)}var w0="tako-cli",on="0.3.18";function rp(){return[A,"update",w0,"--latest"]}function tp(){return[A,"add",`${w0}@latest`]}function cp(i,o){let n=i.split(".").map(Number),d=o.split(".").map(Number);for(let e=0;e<3;e++){let u=n[e]||0,r=d[e]||0;if(u>r)return 1;if(u<r)return-1}return 0}async function ap(){try{let i=await ui(),o=await fetch(`${i}/${w0}/latest`,{signal:AbortSignal.timeout(5000)});if(!o.ok)return null;return(await o.json()).version||null}catch{return null}}async function pp(){let i=await ap();if(!i)return{hasUpdate:!1,currentVersion:on};return{hasUpdate:cp(i,on)>0,latestVersion:i,currentVersion:on}}async function Bu(){let i=await import("fs/promises"),o=wi(Q,"bin"),n=wi(o,"tako"),d=wi(mi,"node_modules/tako-cli/dist/index.js");if(await i.mkdir(o,{recursive:!0}),process.platform==="win32")await i.writeFile(wi(o,"tako.cmd"),Ou(A,d)),await i.writeFile(wi(o,"tako.ps1"),Ru(A,d));else{let u=`#!/bin/bash
|
|
529
|
+
exec "${A}" "${d}" "$@"
|
|
530
|
+
`;await i.writeFile(n,u,{mode:493})}}async function lp(i){let o=oo(),n=`\u6B63\u5728\u66F4\u65B0\u5230 v${i}`;o.start(n);try{let d=await ui(),e=await import("fs/promises");await e.mkdir(mi,{recursive:!0});let u=wi(mi,"package.json");try{await e.access(u)}catch{await e.writeFile(u,JSON.stringify({name:"tako-local",private:!0},null,2))}let r=Bun.spawn(rp(),{cwd:mi,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:d}}),t=await Jn(r,n,(c)=>o.update(c));if(await r.exited,r.exitCode===0)return await Bu(),O("cli_updated",{from_version:on,to_version:i}),o.stop(`\u66F4\u65B0\u6210\u529F\uFF01\u5DF2\u66F4\u65B0\u5230 v${i}`),!0;else return o.stop(),L.warn(`\u66F4\u65B0\u5931\u8D25: ${Wo(t)}`),!1}catch(d){return o.stop(),L.warn(`\u66F4\u65B0\u5931\u8D25: ${Wo(d instanceof Error?d.message:void 0)}`),!1}}async function mp(){let i=await import("fs/promises"),o=wi(mi,"bun.lock");try{await i.unlink(o)}catch{}}async function xp(){let i=await import("fs/promises");try{let o=await ui();await i.mkdir(mi,{recursive:!0});let n=wi(mi,"package.json");try{await i.access(n)}catch{await i.writeFile(n,JSON.stringify({name:"tako-local",private:!0},null,2))}await mp();let d=Bun.spawn(tp(),{cwd:mi,stdout:"pipe",stderr:"pipe",env:{...process.env,BUN_CONFIG_REGISTRY:o}});return await d.exited,d.exitCode===0}catch{return!1}}async function wp(){let i=await import("fs/promises"),o=wi(Q,"bin"),n=wi(o,"tako"),d=wi(mi,"node_modules/tako-cli/dist/index.js");try{let e=await i.readFile(n,"utf-8");if(e.includes("bun run tako-cli")||e.includes("run tako-cli")){L.info(g("updater.migrating"));let u=!1;try{await i.access(d),u=!0}catch{u=!1}if(!u){let r=oo();if(r.start(g("updater.installingLocally")),!await xp())return r.stop(g("updater.migrationFailed")),!1;r.stop(g("updater.installComplete"))}return await Bu(),!0}}catch{}return!1}async function nn(){try{if(await wp())L.info(g("updater.migrationComplete")),process.exit(0);let o=await pp();if(o.hasUpdate&&o.latestVersion){if(L.warn(g("updater.newVersionAvailable",{version:o.latestVersion,current:on})),await lp(o.latestVersion))L.info(g("updater.pleaseRestart")),process.exit(0)}}catch{}}E();dn();ai();C();An();Ci();H();xi();E();C();dn();import{writeFile as Gp}from"fs/promises";var z0="TAKO_WINDOWS_HANDOFF_FILE",k0=new Uint8Array([239,187,191]);function en(i){return`'${i.replace(/'/g,"''")}'`}function ir(i){if(i.length===0)return"@()";return`@(${i.map(en).join(", ")})`}function Sp(i){let o=new TextEncoder().encode(i),n=new Uint8Array(k0.length+o.length);return n.set(k0,0),n.set(o,k0.length),n}async function Yn(i,o){await Gp(i,Sp(Pp(o)))}function Pp(i){let[o,...n]=i.command;if(!o)throw Error("handoff command is empty");let d=["$ErrorActionPreference = 'Stop'","$scriptPath = $PSCommandPath"];for(let[u,r]of Object.entries(i.env??{})){if(r===void 0)continue;if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(u))continue;d.push(`$env:${u} = ${en(String(r))}`)}d.push(`Set-Location -LiteralPath ${en(i.cwd)}`,"$esc = [char]27",'try { [Console]::Write("$esc[2J$esc[3J$esc[H") } catch {}',`$argv = ${ir(n)}`,"$code = 0","try {",` & ${en(o)} @argv`," $code = if ($null -ne $LASTEXITCODE) { $LASTEXITCODE } else { 0 }","} finally {"," Remove-Item -LiteralPath $scriptPath -Force -ErrorAction SilentlyContinue");let e=i.relaunchCommand??[];if(e.length>0){let[u,...r]=e;d.push(` $relaunchArgv = ${ir(r)}`,` & ${en(u)} @relaunchArgv`," $code = if ($null -ne $LASTEXITCODE) { $LASTEXITCODE } else { $code }")}return d.push("}","exit $code",""),d.join(`\r
|
|
531
|
+
`)}import{join as or}from"path";async function nr(i){try{if(process.stdin.removeAllListeners(),!i&&process.stdin.isTTY)process.stdin.setRawMode(!1);process.stdin.pause()}catch{}if(!i&&process.stdout.isTTY)try{process.stdout.write("\x1B[?1000l\x1B[?1002l\x1B[?1003l\x1B[?1005l\x1B[?1006l\x1B[?1015l\x1B[?1049l\x1B[?2004l\x1B[0m\x1B[?25h")}catch{}await new Promise((o)=>setTimeout(o,30));try{if(process.stdin.removeAllListeners(),!i&&process.stdin.isTTY)process.stdin.setRawMode(!1);process.stdin.pause()}catch{}}async function dr(i,o){try{let n=o?.projectPath||process.cwd(),d=o?.providerContext,e=process.platform==="win32";if(!d)return{success:!1,error:"\u672A\u9009\u62E9\u670D\u52A1\u5546"};let u=await xo(i);if(!u)u=wo(i);if(!await Bun.file(u).exists()){let{execSync:l}=await import("child_process"),x=e?`where ${i.command}.exe 2>nul || where ${i.command}.cmd 2>nul || where ${i.command}`:`which ${i.command}`;try{let w=l(x,{encoding:"utf8"}).split(`
|
|
532
|
+
`).map((s)=>s.trim().replace(/\r$/,"")).filter(Boolean),y=e?w.find((s)=>s.toLowerCase().endsWith(".exe"))??w.find((s)=>s.toLowerCase().endsWith(".cmd"))??w[0]:w[0];if(y)u=y;else return{success:!1,error:`\u627E\u4E0D\u5230 ${i.command}\uFF0C\u8BF7\u8FD0\u884C tako install ${i.id}`}}catch{return{success:!1,error:`\u627E\u4E0D\u5230 ${i.command}\uFF0C\u8BF7\u8FD0\u884C tako install ${i.id}`}}}let c={...i.getEnvVars(d),...o?.envVars??{}},a={...process.env,...c},p;if(i.runtime==="native")if(e&&u.toLowerCase().endsWith(".js"))p=[await Wi(),u];else p=[u];else p=[await Wi(),u];if(o?.args&&o.args.length>0)p=[...p,...o.args];if(e&&o?.handoffOnWindows){let l=process.env[z0];if(l)return await Yn(l,{command:p,cwd:n,env:c}),{success:!0}}if(e&&o?.relaunchTakoOnWindows){let l=process.env[z0];if(l){let x=[or(Q,"bin","tako.cmd")];return await Yn(l,{command:p,cwd:n,env:c,relaunchCommand:x}),{success:!0}}}if(e){let l=await import("fs/promises"),{tmpdir:x}=await import("os"),w=or(x(),`tako-handoff-${process.pid}-${Date.now()}.ps1`);await Yn(w,{command:p,cwd:n}),await nr(e);try{let s=await Bun.spawn(["powershell.exe","-NoProfile","-ExecutionPolicy","Bypass","-File",w],{env:a,stdio:["inherit","inherit","inherit"],cwd:n}).exited;return{success:s===0,exitCode:s}}catch(y){return await l.rm(w,{force:!0}).catch(()=>{}),{success:!1,error:y instanceof Error?y.message:"PowerShell handoff \u542F\u52A8\u5931\u8D25"}}}if(await nr(e),process.stdout.isTTY)try{process.stdout.write("\x1B[2J\x1B[3J\x1B[H")}catch{}try{Bun.spawnSync(p,{env:a,stdio:["inherit","inherit","inherit"],cwd:n})}catch{await Bun.spawn(p,{env:a,stdio:["inherit","inherit","inherit"],cwd:n}).exited}return{success:!0}}catch(n){return{success:!1,error:n instanceof Error?n.message:"\u542F\u52A8\u5931\u8D25"}}}M0();async function Jp(i,o){if(o?.providerContext)return o.providerContext;let n=await ei();if(n){let d=await Qi(i.id);if(d.some((u)=>u.id===n.id))return _(n);if(d.length>0)return _(d[0])}return null}async function Hn(i,o){try{let n=o?.projectPath||process.cwd();if(o?.projectPath){if(!await N0(o.projectPath))return{success:!1,error:g("launcher.directoryNotFound",{path:o.projectPath})}}let d=await Eu(i);if(!d.success)return d;let e=await Jp(i,o);if(!e)return{success:!1,error:g("launcher.apiKeyNotConfigured")};let u=[],r={};if(i.setupConfigFiles){let a=await i.setupConfigFiles(e,o?.selectedOptionIds,{forLaunch:!0});if(a&&typeof a==="object")u=a.args??[],r=a.envVars??{}}await _u(n,i.id,o?.selectedOptionIds);try{let a=(o?.selectedOptionIds??[]).filter((p)=>p.startsWith("model-"));await tr(a)}catch{}let c=(await z()).installedClients[i.id]?.version;return O("client_launched",{client_id:i.id,client_version:c,project_hash:Cu(n),is_recent_project:!!o?.projectPath}),L.info(g("launcher.starting",{client:i.name})),await dr(i,{...o,args:[...u,...o?.args??[]],envVars:{...r,...o?.envVars??{}},providerContext:e})}catch(n){return{success:!1,error:n instanceof Error?n.message:"Launch failed"}}}H();xi();import{homedir as Ap}from"os";var S={black:"\x1B[30m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",cyan:"\x1B[36m",white:"\x1B[37m",brightBlack:"\x1B[90m",brightRed:"\x1B[91m",brightGreen:"\x1B[92m",brightYellow:"\x1B[93m",brightBlue:"\x1B[94m",brightMagenta:"\x1B[95m",brightCyan:"\x1B[96m",brightWhite:"\x1B[97m"};var I={bold:"\x1B[1m",dim:"\x1B[2m",italic:"\x1B[3m",underline:"\x1B[4m",reset:"\x1B[0m"};var q={directory:{icon:S.brightYellow,text:S.brightGreen},git:{icon:S.brightBlue,text:S.brightBlue,clean:S.brightGreen,dirty:S.brightYellow,conflict:S.brightRed},model:{icon:S.brightCyan,text:S.brightCyan},version:{icon:S.brightWhite,text:S.brightBlack},outputStyle:{icon:S.brightMagenta,text:S.brightMagenta},context:{icon:S.brightMagenta,low:S.brightGreen,medium:S.brightYellow,high:S.brightRed},todayUsage:{icon:S.brightGreen,text:S.brightGreen},separator:S.brightBlack},Oi={directory:{nerd:"\uF07B",plain:"\uD83D\uDCC1"},git:{nerd:"\uE725",plain:"\uD83C\uDF3F"},model:{nerd:"\uF11B",plain:"\uD83E\uDD16"},version:{nerd:"\uF412",plain:"\uD83D\uDCBE"},outputStyle:{nerd:"\uF12F5",plain:"\uD83C\uDFAF"},context:{nerd:"\uF0E7",plain:"\u26A1"},todayUsage:{nerd:"\uF155",plain:"\uD83D\uDCB0"},gitClean:"\u2713",gitDirty:"\u25CF",gitConflict:"\u26A0",gitAhead:"\u2191",gitBehind:"\u2193"};function Bp(){return!1}function ki(i){let o=Oi[i];if(typeof o==="string")return o;return Bp()?o.nerd:o.plain}class Tn{id="directory";render(i){let o=this.formatPath(i.workspace.current_dir),n=ki("directory");return`${q.directory.icon}${n}${I.reset} ${q.directory.text}${o}${I.reset}`}formatPath(i){let o=Ap();if(i===o)return"~";if(i.startsWith(o+"/"))return"~"+i.slice(o.length);return i}}class Xn{id="git";async render(i){let o=i.workspace.current_dir;if(!await this.isGitRepository(o))return null;let d=await this.getBranch(o);if(!d)return null;let{status:e,statusColor:u}=await this.getStatus(o),{ahead:r,behind:t}=await this.getAheadBehind(o),c=ki("git"),a=`${q.git.icon}${c}${I.reset} ${q.git.text}${d}${I.reset}`;if(a+=` ${u}${e}${I.reset}`,r>0)a+=` ${q.git.clean}${Oi.gitAhead}${r}${I.reset}`;if(t>0)a+=` ${q.git.dirty}${Oi.gitBehind}${t}${I.reset}`;return a}async isGitRepository(i){try{return await Bun.spawn(["git","rev-parse","--git-dir"],{cwd:i,stdout:"pipe",stderr:"pipe"}).exited===0}catch{return!1}}async getBranch(i){try{let o=Bun.spawn(["git","branch","--show-current"],{cwd:i,stdout:"pipe",stderr:"pipe"}),n=await new Response(o.stdout).text();if(await o.exited===0&&n.trim())return n.trim();let e=Bun.spawn(["git","rev-parse","--short","HEAD"],{cwd:i,stdout:"pipe",stderr:"pipe"}),u=await new Response(e.stdout).text();if(await e.exited===0&&u.trim())return`detached:${u.trim()}`;return null}catch{return null}}async getStatus(i){try{let o=Bun.spawn(["git","status","--porcelain"],{cwd:i,stdout:"pipe",stderr:"pipe"}),n=await new Response(o.stdout).text();if(await o.exited!==0)return{status:Oi.gitClean,statusColor:q.git.clean};let e=n.trim();if(!e)return{status:Oi.gitClean,statusColor:q.git.clean};if(e.includes("UU")||e.includes("AA")||e.includes("DD"))return{status:Oi.gitConflict,statusColor:q.git.conflict};return{status:Oi.gitDirty,statusColor:q.git.dirty}}catch{return{status:Oi.gitClean,statusColor:q.git.clean}}}async getAheadBehind(i){try{let o=Bun.spawn(["git","rev-list","--count","@{u}..HEAD"],{cwd:i,stdout:"pipe",stderr:"pipe"}),n=await new Response(o.stdout).text(),e=await o.exited===0?parseInt(n.trim(),10)||0:0,u=Bun.spawn(["git","rev-list","--count","HEAD..@{u}"],{cwd:i,stdout:"pipe",stderr:"pipe"}),r=await new Response(u.stdout).text(),c=await u.exited===0?parseInt(r.trim(),10)||0:0;return{ahead:e,behind:c}}catch{return{ahead:0,behind:0}}}}var Yp={"claude-opus-4-5-20251101":"Opus 4.5","claude-opus-4-5":"Opus 4.5","claude-sonnet-4-5-20250514":"Sonnet 4.5","claude-sonnet-4-5":"Sonnet 4.5","claude-sonnet-4-20250514":"Sonnet 4","claude-sonnet-4":"Sonnet 4","claude-sonnet-3-5-20241022":"Sonnet 3.5","claude-3-5-sonnet-20241022":"Sonnet 3.5","claude-3-5-sonnet":"Sonnet 3.5","claude-haiku-3-5-20241022":"Haiku 3.5","claude-3-5-haiku-20241022":"Haiku 3.5","claude-3-5-haiku":"Haiku 3.5"};class Kn{id="model";render(i){let o=i.model.id,n=Yp[o]||this.simplifyModelName(i.model.display_name),d=ki("model");return`${q.model.icon}${d}${I.reset} ${q.model.text}${n}${I.reset}`}simplifyModelName(i){let o=i.replace(/^Claude\s+/i,"");return o=o.replace(/-\d{8}$/,""),o}}fo();var Hp=200000;class zi{id="context";static cache=null;static CACHE_TTL=5000;async render(i){let o=await this.getTokensWithCache(i.transcript_path),d=Bd(i.model.id)?.contextWindow??Hp,e=Math.round((o??0)/d*100),u=Math.max(0,100-e),r=ki("context"),t=u<=20?S.brightRed:u<=50?S.brightYellow:S.brightGreen;return`${q.context.icon}${r}${I.reset} ${t}${u}%${I.reset}`}async getTokensWithCache(i){let o=Date.now();if(zi.cache&&zi.cache.path===i&&o-zi.cache.timestamp<zi.CACHE_TTL)return zi.cache.tokens;let n=await this.parseTranscriptTokens(i);return zi.cache={path:i,tokens:n,timestamp:o},n}async parseTranscriptTokens(i){try{let o=Bun.file(i);if(!await o.exists())return null;let n=await o.text();if(!n.trim())return null;let d=n.split(`
|
|
533
|
+
`).filter((e)=>e.trim());for(let e=d.length-1;e>=0;e--)try{let u=JSON.parse(d[e]);if(u.type==="assistant"&&u.message?.usage){let r=u.message.usage;return(r.input_tokens||0)+(r.output_tokens||0)+(r.cache_creation_input_tokens||0)+(r.cache_read_input_tokens||0)}}catch{continue}return null}catch{return null}}}Vn();C();ai();class Zn{id="quota";async render(i){let o=await this.tryRenderOfficial();if(o)return o;return this.renderSessionCost(i)}async tryRenderOfficial(){try{let i=await qi("claude-code")??await ei();if(!i){let n=await Di().catch(()=>"");if(!n)return null;let d=await ro(n);return this.renderTako(d)}let o=await C0(i);if(o.status!=="ok")return null;switch(o.provider){case"tako":return this.renderTako(o);case"claude-subscription":return this.renderClaudeSub(o);case"codex-subscription":return this.renderCodexSub(o);default:return null}}catch{return null}}renderTako(i){if(i.status!=="ok")return null;if(!!(i.primary?.costLimit||i.secondary?.costLimit||i.daily?.costLimit))return this.renderSub(i);let n=i.daily??i.primary??i.secondary;if(!n)return null;let d=n.costUsed??0;return`${this.icon()} ${S.brightGreen}Day:${this.fmtCost(d)}${I.reset}`}renderSub(i){let o=(d,e,u)=>{if(d&&d>=1440)return`${Math.round(d/1440)}d`;if(d)return`${Math.round(d/60)}h`;return u?`${u}d`:`${e}h`},n=[];if(i.primary)n.push(this.remainChunk(o(i.primary.windowMinutes,5),i.primary.usedPct));if(i.secondary)n.push(this.remainChunk(o(i.secondary.windowMinutes,24,7),i.secondary.usedPct));if(i.modelLimits?.opus)n.push(this.remainChunk("opus",i.modelLimits.opus.usedPct));if(!n.length)return null;return`${this.icon()} ${n.join(`${I.dim} \xB7 ${I.reset}`)}`}renderClaudeSub=this.renderSub;renderCodexSub=this.renderSub;pctChunk(i,o){let n=o>=90?S.brightRed:o>=70?S.brightYellow:S.brightGreen;return`${i}:${n}${o}%${I.reset}`}remainChunk(i,o){let n=Math.max(0,Math.min(100,100-Math.round(o))),d=n<=10?S.brightRed:n<=30?S.brightYellow:S.brightGreen;return`${i} \u5269 ${d}${n}%${I.reset}`}renderSessionCost(i){let o=i.cost?.total_cost_usd;if(o==null||o<=0)return null;return`${this.icon()} ${S.brightGreen}Session:${this.fmtCost(o)}${I.reset}`}icon(){return`${q.todayUsage.icon}${ki("todayUsage")}${I.reset}`}fmtCost(i){if(i>=100)return`$${Math.round(i)}`;if(i>=10)return`$${i.toFixed(1)}`;return`$${i.toFixed(2)}`}}class Q0{separator=`${q.separator} \u2502 ${I.reset}`;render(i){let o=["directory","git","model","context","quota"],n=[];for(let d of o){let e=i.get(d);if(e)n.push(e)}return n.join(this.separator)}}import{join as to,dirname as el}from"path";import{homedir as q0}from"os";import{mkdir as ul}from"fs/promises";var vr=to(q0(),".tako"),rl=to(vr,"cli"),tl=to(vr,"bin",process.platform==="win32"?"tako.cmd":"tako");function cl(){if(process.platform==="win32")return to(process.env.APPDATA||to(q0(),"AppData","Roaming"),"claude","settings.json");return to(q0(),".claude","settings.json")}var al=process.platform==="win32",pl="0.1.48";function ll(i,o){let n=i.split(".").map(Number),d=o.split(".").map(Number),e=Math.max(n.length,d.length);for(let u=0;u<e;u++){let r=n[u]||0,t=d[u]||0;if(r!==t)return r-t}return 0}async function ml(){let i=to(rl,"node_modules","tako-cli","package.json");try{let o=Bun.file(i);if(!await o.exists())return null;return(await o.json()).version||null}catch{return null}}async function xl(){let i=await ml();if(!i)return!1;return ll(i,pl)>=0}function wl(){return tl}function yl(){return`"${sl(wl())}" statusline`}function sl(i){if(al)return i.replace(/\\/g,"/");return i}async function O0(){if(!await xl())return;let o=cl(),n={};try{let u=Bun.file(o);if(await u.exists())n=await u.json()}catch{}let d={type:"command",command:yl(),padding:0},e=typeof n.statusLine==="object"&&n.statusLine!==null?n.statusLine.command:null;if(typeof e==="string"&&e.includes("tako statusline"))return;n.statusLine=d,await ul(el(o),{recursive:!0}),await Bun.write(o,JSON.stringify(n,null,2))}var fl=[new Tn,new Xn,new Kn,new zi,new Zn];async function vl(i){let o=await Promise.all(fl.map(async(e)=>{try{let u=await e.render(i);return{id:e.id,content:u}}catch{return{id:e.id,content:null}}})),n=new Map;for(let{id:e,content:u}of o)n.set(e,u);return new Q0().render(n)}async function hr(){try{let i=await Bun.stdin.json(),o=await vl(i);console.log(o)}catch{process.exit(0)}}ai();xi();async function Fn(i){let o=await Qi(i);if(o.length===0)return null;let n=await qi(i);if(n)return _(n);if(o.length===1)return _(o[0]);let d=await ei();if(d&&o.some((e)=>e.id===d.id))return _(d);return _(o[0])}async function br(){let i=await _o();if(await Uo(i)>0){for(let n of i)O("provider_added",{provider_type:n.type,method:"auto_detect"});U(),T()}}r0();An();var hl={"claude-code":{optionId:"skip-permissions",flag:"--dangerously-skip-permissions"},codex:{optionId:"bypass-sandbox",flag:"--dangerously-bypass-approvals-and-sandbox"}};async function En(i,o,n,d){let e=o.filter((t)=>t!==n),u=await bl(i,e,d);if(i!=="claude-code")return u?[u,...e]:e;let r=[];if(u)r.push(u);for(let t=0;t<e.length;t++){let c=e[t];if(c==="--model"&&t+1<e.length){r.push(c,vo(e[t+1])),t++;continue}if(c.startsWith("--model=")){let a=c.slice(8);r.push(`--model=${vo(a)}`);continue}r.push(c)}return r}async function bl(i,o,n){let d=hl[i];if(!d)return null;if(o.includes(d.flag))return null;return(await(n?.getLastSelectedOptionIds??Bn)(i)).includes(d.optionId)?d.flag:null}fo();Un();C();var yd="0.3.18";function Mm(){console.log(`
|
|
534
|
+
${g("cli.version",{version:yd})}
|
|
535
|
+
|
|
536
|
+
${g("cli.usage")}
|
|
537
|
+
|
|
538
|
+
${g("cli.options")}
|
|
539
|
+
${g("cli.optionVersion")}
|
|
540
|
+
${g("cli.optionHelp")}
|
|
541
|
+
|
|
542
|
+
${g("cli.shortcuts")}
|
|
543
|
+
${g("cli.shortcutClaude")}
|
|
544
|
+
${g("cli.shortcutCodex")}
|
|
545
|
+
${g("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
|
+
${g("cli.examples")}
|
|
556
|
+
${g("cli.exampleInteractive")}
|
|
557
|
+
${g("cli.exampleClaude")}
|
|
558
|
+
${g("cli.exampleClaudeModel")}
|
|
559
|
+
${g("cli.exampleCodex")}
|
|
560
|
+
${g("cli.exampleGemini")}
|
|
561
|
+
`)}async function Gm(i){let[o,n]=i;if(!o)console.error("\u7528\u6CD5: tako install <client> [version]"),console.error(" tako install claude-code # \u5217\u51FA\u6240\u6709\u53EF\u7528\u7248\u672C"),console.error(" tako install claude-code 1.0.5 # \u5B89\u88C5\u6307\u5B9A\u7248\u672C"),process.exit(1);let d=oi(o);if(!d)console.error(`\u672A\u77E5 client: ${o}`),process.exit(1);if(!n){try{let e=await R0(d.package),u=await B0(d),r=e.slice(0,30);console.log(`${d.name} (${d.package}) \u6700\u8FD1 ${r.length} \u4E2A\u7248\u672C\uFF1A`);for(let t of r){let c=t.version===u?" \u2190 \u5F53\u524D":"",a=t.publishedAt?` ${t.publishedAt.slice(0,10)}`:"";console.log(` ${t.version}${a}${c}`)}console.log(`
|
|
562
|
+
\u5B89\u88C5\uFF1Atako install ${o} <version>`)}catch(e){console.error("\u83B7\u53D6\u7248\u672C\u5217\u8868\u5931\u8D25:",e.message),process.exit(1)}return}console.log(`\u6B63\u5728\u5B89\u88C5 ${d.package}@${n} \u5230 ${d.id}...`);try{await J0(d,n),console.log(`\u2713 ${d.name} \u5DF2\u5207\u6362\u5230 ${n}`)}catch(e){console.error("\u5B89\u88C5\u5931\u8D25:",e.message),process.exit(1)}}async function pe(i,o,n){let d=oi(i);if(!d)console.error(g("cli.clientNotFound",{client:o})),process.exit(1);let e=await Fn(i);if(!e)console.error("\u672A\u914D\u7F6E\u53EF\u7528\u7684\u670D\u52A1\u5546"),process.exit(1);let u=await Hn(d,{providerContext:e,args:n,handoffOnWindows:!0});if(!u.success)console.error(u.error),process.exit(1);process.exit(u.exitCode??0)}async function Sm(i){let o=process.argv.slice(2);if(o[0]==="statusline"){Ni(),await hr();return}if(o[0]==="install"){await Gm(o.slice(1));return}if(o[0]==="quota"){let{runQuotaCommand:d}=await Promise.resolve().then(() => (kr(),Wr)),e=await d(o.slice(1));if(e!==0)process.exit(e);return}if(o[0]==="agent"){Ni();let{runAgentCommand:d}=await Promise.resolve().then(() => (ot(),it));await d(o.slice(1));return}if(o[0]==="skill"){let{runSkillCommand:d}=await Promise.resolve().then(() => (et(),dt));await d(o.slice(1));return}if(o[0]==="models"){let{runModelsCommand:d}=await Promise.resolve().then(() => (tt(),rt)),e=await d(o.slice(1));if(e!==0)process.exit(e);return}if(o.includes("-v")||o.includes("--version")){console.log(`Tako CLI v${yd}`);return}if(o.includes("-h")||o.includes("--help")){Mm();return}let n=yd==="dev"||Ho;if(T(),O("cli_started"),o.includes("--claude")){if(!n)await nn();await pe("claude-code","Claude Code",await En("claude-code",o,"--claude"));return}if(o.includes("--codex")){if(!n)await nn();await pe("codex","Codex",await En("codex",o,"--codex"));return}if(o.includes("--gemini")){if(!n)await nn();await pe("gemini","Gemini CLI",await En("gemini",o,"--gemini"));return}if(!n)await nn();if(O0().catch(()=>{}),Ni(),Jd().catch(()=>{}),!process.stdin.isTTY){console.log("Tako CLI v"+yd),console.log(`
|
|
563
|
+
\u5B89\u88C5\u6210\u529F\uFF01\u8BF7\u5728\u7EC8\u7AEF\u4E2D\u76F4\u63A5\u8FD0\u884C tako \u542F\u52A8\u4EA4\u4E92\u754C\u9762\u3002`),console.log(" tako \u2014 \u4EA4\u4E92\u5F0F\u542F\u52A8\u5668"),console.log(" tako --help \u2014 \u67E5\u770B\u6240\u6709\u547D\u4EE4");return}await i()}async function ct(i){process.on("beforeExit",async()=>{await jo()}),process.on("SIGINT",async()=>{await jo(),process.exit(0)}),process.on("SIGTERM",async()=>{await jo(),process.exit(0)});try{await Sm(i)}catch(o){console.error(g("cli.cliError"),o),await jo(),process.exit(1)}}H();Ci();H();import{CliRenderEvents as s1,createCliRenderer as f1}from"@opentui/core";C();H();xi();ai();Si();function Pm(i){return i.startsWith("cr_")&&i.length>10}async function Cm(i){try{let n=await(await fetch(`${Y}/apiStats/api/get-key-id`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:i})})).json();if(n.success&&n.data?.id)return{valid:!0,apiId:n.data.id};return{valid:!1,error:n.error||g("auth.validationFailed")}}catch(o){return{valid:!1,error:o instanceof Error?o.message:g("auth.networkError")}}}async function at(i){if(!Pm(i))return O("api_key_validated",{success:!1,error_type:"invalid_format"}),{success:!1,error:g("auth.invalidFormat")};let o=await Cm(i);if(!o.valid)return O("api_key_validated",{success:!1,error_type:"api_validation_failed"}),{success:!1,error:o.error};return await Ui({apiKey:i,apiId:o.apiId}),await Im(i,o.apiId),O("api_key_validated",{success:!0}),U(),T(),{success:!0}}async function Im(i,o){let d=(await V()).find((e)=>e.type==="tako");if(d)await Xi(d.id,{apiKey:i,apiId:o});else await eo({name:"Tako \u5B98\u65B9",type:"tako",apiKey:i,baseUrl:Y,apiId:o,supportedClients:di("tako"),builtin:!0})}xi();Io();sd();Io();function ft(){try{if(process.stdin.removeAllListeners(),process.stdin.isTTY)process.stdin.setRawMode(!1);process.stdin.pause()}catch{}}function fd(){if(!process.stdout.isTTY)return;try{process.stdout.write("\x1B[?1000l\x1B[?1002l\x1B[?1003l\x1B[?1005l\x1B[?1006l\x1B[?1015l\x1B[?1049l\x1B[?2004l\x1B[0m\x1B[?25h")}catch{}}async function vt(){ft(),fd(),await new Promise((i)=>setTimeout(i,30)),ft(),fd()}function Qo(i){if(i.ctrl||i.meta||i.option)return"";if(i.sequence&&i.sequence.length===1&&i.sequence>=" ")return i.sequence;if(i.name&&i.name.length===1)return i.name;return""}function Z(i){return!i.ctrl&&!i.meta&&!i.option}function we(i){if(!i)return"";if(i.length<=8)return"*".repeat(i.length);return`${i.slice(0,4)}${"*".repeat(Math.min(i.length-8,20))}${i.slice(-4)}`}function fn(i){return i.providers.find((o)=>o.id===i.providerSelectedId)}function vd(i,o){let n=i.type==="claude-subscription"||i.type==="codex-subscription";return[...i.id!==o.defaultProviderId?["default"]:[],...n?["relogin"]:["rekey"],...i.builtin?[]:["delete"],"back"]}function ht(i,o){return{default:o?"\u8BBE\u4E3A\u9ED8\u8BA4":"Set default",rekey:o?"\u66F4\u65B0 Key":"Update key",relogin:o?"\u91CD\u65B0\u767B\u5F55":"Re-login",delete:o?"\u5220\u9664":"Delete",back:o?"\u8FD4\u56DE":"Back"}[i]}function ye(i){let o=Math.floor(i/1000);if(o<60)return`${o}s`;if(o<3600)return`${Math.floor(o/60)}m`;if(o<86400)return`${Math.floor(o/3600)}h`;return`${Math.floor(o/86400)}d`}function se(i){switch(i){case"running":return m.yellow;case"awaiting_approval":return m.magenta;case"idle":return m.green;case"closed":return m.gray;case"dead":return m.red;default:return m.text}}function bt(i){switch(i){case"running":return"~";case"awaiting_approval":return"?";case"idle":return"*";case"dead":return"!";default:return"-"}}function qo(i){if(i.screen==="config"){i.apiKeyValue=i.apiKeyValue.slice(0,-1),i.apiKeyStatus="idle";return}if(i.screen==="agent-new"){if(i.agentField==="model")i.agentModel=i.agentModel.slice(0,-1);if(i.agentField==="name")i.agentName=i.agentName.slice(0,-1);return}if(i.screen==="agent-detail"){i.agentDetailInput=i.agentDetailInput.slice(0,-1);return}switch(i.providerInputMode){case"add-key":case"rekey":i.addKey=i.addKey.slice(0,-1);break;case"add-url":i.addUrl=i.addUrl.slice(0,-1);break;case"add-model":i.addModel=i.addModel.slice(0,-1);break;case"add-ctx":i.addCtx=i.addCtx.slice(0,-1);break}}function Oo(i,o){if(!o)return;if(i.screen==="config"){i.apiKeyValue+=o,i.apiKeyStatus="idle";return}if(i.screen==="agent-new"){if(i.agentField==="model")i.agentModel+=o;if(i.agentField==="name")i.agentName+=o;return}if(i.screen==="agent-detail"){i.agentDetailInput+=o;return}switch(i.providerInputMode){case"add-key":case"rekey":i.addKey+=o;break;case"add-url":i.addUrl+=o;break;case"add-model":i.addModel+=o;break;case"add-ctx":if(/^[0-9]$/.test(o))i.addCtx+=o;break}}Si();H();fe();import{BoxRenderable as Am,ScrollBoxRenderable as Ym,TextAttributes as J,TextRenderable as Hm}from"@opentui/core";function Qm(i){let o=i.codePointAt(0);if(!o)return!1;return o>=19968&&o<=40959||o>=13312&&o<=19903||o>=131072&&o<=191471||o>=63744&&o<=64255||o>=194560&&o<=195103||o>=44032&&o<=55215||o>=12352&&o<=12447||o>=12448&&o<=12543||o>=65280&&o<=65519||o>=126976&&o<=131071||o>=9728&&o<=10175||o===11088}function qm(i){return i.replace(/\x1b\[[0-9;]*m/g,"")}function vn(i){let o=qm(i),n=0;for(let d of o)n+=Qm(d)?2:1;return n}function Wt(i,o,n="left"){let d=vn(i),e=Math.max(0,o-d);if(e===0)return i;switch(n){case"left":return i+" ".repeat(e);case"right":return" ".repeat(e)+i;case"center":{let u=Math.floor(e/2),r=e-u;return" ".repeat(u)+i+" ".repeat(r)}}}var gt=6,$t=4,he=16,Om=12;function Ro(i,o,n){if(!i.some((c)=>(n[c.id]??0)>0))return{list:i,hiddenCount:0};let e=new Map(i.map((c,a)=>[c.id,a])),u=i.filter((c)=>(n[c.id]??0)>0).sort((c,a)=>{let p=(n[a.id]??0)-(n[c.id]??0);if(p!==0)return p;return(e.get(c.id)??0)-(e.get(a.id)??0)}).slice(0,gt).map((c)=>c.id),r=new Set(u);for(let c of i)if(o.has(c.id))r.add(c.id);let t=i.filter((c)=>r.has(c.id));return{list:t,hiddenCount:i.length-t.length}}function be(i,o){return!i.some((d)=>(o[d.id]??0)>0)&&i.length>gt?"grid":"collapsed"}function Rm(i,o){if(i.length===0)return 1;let n=Math.max(...i.map((u)=>vn(u))),d=Math.max(he,n+4),e=Math.max(d,o-Om);return Math.max(1,Math.min($t,i.length,Math.floor(e/d)))}function Jo(i,o,n){let d=i.map((e)=>e.label[n?"zh":"en"]||e.label.en||e.id);return Rm(d,o)}function Jm(i,o){let n=Math.max(1,Math.min($t,Math.floor(o)||1)),d=[];for(let e=0;e<i.length;e+=n)d.push(i.slice(e,e+n));return{rows:d,flat:d.flat()}}function hd(i){return i.startsWith("model-")?i.slice(6):i}function ve(i){let o=hd(i).toLowerCase();return o.replace(/^(?:full[-_]|\u6EE1\u8840[-_])+/u,"").slice(0,3)||o.slice(0,3)||o}function kt(i){let o=["gpt","ful","cla","dee","glm","kim","qwe","min","mim","spa"],n=o.indexOf(i);return n===-1?o.length:n}function zt(i){let o=hd(i).toLowerCase(),n=[];for(let d of o.match(/\d+(?:\.\d+)?|[a-z]+/g)??[o]){let e=Number(d);n.push(Number.isFinite(e)&&/^\d/.test(d)?e:d)}return n}function Bm(i,o){let n=ve(i),d=ve(o),e=kt(n)-kt(d)||n.localeCompare(d);if(e!==0)return e;let u=zt(i),r=zt(o),t=Math.max(u.length,r.length);for(let c=0;c<t;c++){let a=u[c],p=r[c];if(a===void 0)return 1;if(p===void 0)return-1;if(typeof a==="number"&&typeof p==="number"){if(a!==p)return p-a;continue}let l=String(a),x=String(p);if(l!==x)return l.localeCompare(x)}return hd(i).localeCompare(hd(o))}function Bo(i,o){let n=[...i].sort(Bm),d=[];for(let u of n){let r=ve(u),t=d[d.length-1];if(t?.family===r)t.ids.push(u);else d.push({family:r,ids:[u]})}let e=d.map((u)=>({family:u.family,rows:Jm(u.ids,o).rows}));return{groups:e,flat:e.flatMap((u)=>u.rows.flat())}}function Le(i,o,n){return Bo(i,n).flat.indexOf(o)}function Mt(i,o){return Bo(i,o).groups.flatMap((n)=>n.rows)}Io();function Tm(i){for(let o of[...i.root.getChildren()])i.root.remove(o)}function P(i,o){return new Am(i,o)}function Ne(i){return i.terminalHeight<yn}function We(i){return Ne(i)?{minHeight:yn}:{height:"100%"}}function X(i,o,n){if(!Ne(i)){i.root.add(n);return}let d=new Ym(i,{width:"100%",height:"100%",scrollY:!0,scrollX:!1,viewportCulling:!1});if(d.add(n),i.root.add(d),o.scrollOffset>0)d.scrollTop=o.scrollOffset,process.nextTick(()=>{d.scrollTop=o.scrollOffset,i.requestRender()})}function Xm(i,o,n={}){return new Hm(i,{content:o,fg:m.text,selectable:!1,...n})}function v(i,o,n,d={}){let e=Xm(o,n,d);return i.add(e),e}function F(i,o,n){let d=P(i,{flexDirection:"row",flexWrap:"wrap",gap:2,paddingX:2,paddingY:0,marginTop:1,height:1,justifyContent:"center"});n.forEach(([e,u])=>{let r=P(i,{flexDirection:"row",gap:1});v(r,i,e,{fg:m.orange,attributes:J.BOLD}),v(r,i,u,{fg:m.muted}),d.add(r)}),o.add(d)}function Km(i,o,n,d=m.orange){let e=i.terminalHeight;if(e<30)return;let u=P(i,{flexDirection:"column",alignItems:"center",marginBottom:1}),r=e>=36?pt:lt;if(v(u,i,r,{fg:d,attributes:J.BOLD,selectable:!1}),n&&e>=34)v(u,i,n,{fg:m.muted});o.add(u)}function pi(i,o,n){let d=P(i,{flexDirection:"column",gap:0});for(let e of n){let u=P(i,{flexDirection:"row",justifyContent:"space-between",backgroundColor:e.focused?m.panelMuted:m.panel,paddingX:1,height:1}),r=P(i,{flexDirection:"row",gap:1,flexGrow:1});if(v(r,i,e.focused?">":" ",{fg:e.focused?e.color||m.orange:m.muted,attributes:e.focused?J.BOLD:J.NONE}),e.marker)v(r,i,e.marker,{fg:e.color||m.orange});if(v(r,i,e.primary,{fg:e.focused?e.color||m.orange:m.text,attributes:e.focused?J.BOLD:J.NONE,truncate:!0}),u.add(r),e.secondary)v(u,i,e.secondary,{fg:m.muted,truncate:!0});d.add(u)}o.add(d)}function ti(i,o,n,d=m.orange,e={text:`tako ${le}`,color:m.muted},u=!1){let r=P(i,{flexDirection:"column",width:"100%",...We(i),backgroundColor:m.bg,paddingX:1,paddingY:1}),t=P(i,{flexDirection:"column",border:!0,borderStyle:"rounded",borderColor:d,backgroundColor:m.panel,paddingX:2,paddingY:1,gap:1,flexGrow:u?1:0}),c=P(i,{flexDirection:"row",justifyContent:"space-between"});if(v(c,i,n,{fg:d,attributes:J.BOLD}),v(c,i,e.text,{fg:e.color||m.muted,truncate:!0}),t.add(c),o.message)v(t,i,o.message,{fg:o.message.startsWith("!")?m.red:m.green});return r.add(t),{root:r,panel:t}}function W(i,o){if(Tm(i),o.scrollScreen!==o.screen)o.scrollScreen=o.screen,o.scrollOffset=0;else if(!Ne(i)&&o.scrollOffset!==0)o.scrollOffset=0;switch(o.screen){case"launcher":Pt(i,o);break;case"providers":Dm(i,o);break;case"provider-detail":jm(i,o);break;case"provider-add-type":i1(i,o);break;case"provider-input":o1(i,o);break;case"stats":n1(i,o);break;case"config":d1(i,o);break;case"language":e1(i,o);break;case"option-picker":_m(i,o);break;case"agents":u1(i,o);break;case"agent-detail":t1(i,o);break;case"agent-new":c1(i,o);break;case"key-guide":p1(i,o);break;case"client-versions":l1(i,o);break}i.requestRender()}var Gt={tako:{zh:"Tako \u4EE3\u7406",en:"Tako Proxy",color:m.cyan,icon:"\uD83D\uDC19"},"claude-subscription":{zh:"Claude \u5B98\u65B9",en:"Claude Official",color:m.yellow,icon:"\u2726"},"codex-subscription":{zh:"Codex \u5B98\u65B9",en:"Codex Official",color:m.blue,icon:"\u25C8"},anthropic:{zh:"Anthropic \u76F4\u8FDE",en:"Anthropic Direct",color:m.yellow,icon:"\u2726"},deepseek:{zh:"DeepSeek",en:"DeepSeek",color:m.magenta,icon:"\u25C7"},xiaomi:{zh:"\u5C0F\u7C73 MiMo",en:"Xiaomi MiMo",color:m.orange,icon:"\u25C6"},custom:{zh:"\u81EA\u5B9A\u4E49",en:"Custom",color:m.gray,icon:"\u25AA"}};function Vm(i){if(!i)return"";let[o,n]=i.split("@");if(o&&n&&o.length>14)return`${o.slice(0,12)}\u2026@${n}`;return i}function Zm(i,o,n){let d=n.clients[n.clientIdx]?.activeProvider;if(!d){v(o,i,`\u26A0 ${n.zh?"\u672A\u7ED1\u5B9A":"no provider"}`,{fg:m.yellow});return}let e=Gt[d.type]??Gt.custom;v(o,i,`${e.icon} ${n.zh?e.zh:e.en}`,{fg:e.color});let u=Vm(d.email??"");if(u)v(o,i,`\xB7 ${u}`,{fg:m.muted,truncate:!0})}function Fm(i){return i>30?m.green:i>10?m.yellow:m.red}function Em(i,o){if(!i||i.status==="unsupported")return null;if(i.status==="error")return{text:`\uD83D\uDCB0 ${i.hint||(o?"\u7528\u91CF\u83B7\u53D6\u5931\u8D25":"quota unavailable")}`,color:m.muted};if(i.provider==="tako"){if(!(i.primary?.costLimit||i.secondary?.costLimit||i.daily?.costLimit)){let t=i.daily??i.primary??i.secondary;if(!t)return null;return{text:`\uD83D\uDCB0 ${o?"\u4ECA\u65E5":"Today"}: $${(t.costUsed??0).toFixed(2)}`,color:m.green}}}let n=(r,t,c)=>{if(r&&r>=1440)return`${Math.round(r/1440)}d`;if(r)return`${Math.round(r/60)}h`;return c?`${c}d`:`${t}h`},d=(r)=>Math.max(0,Math.min(100,100-Math.round(r))),e=[];if(i.primary)e.push(`${n(i.primary.windowMinutes,5)} ${o?"\u5269":"left"} ${d(i.primary.usedPct)}%`);if(i.secondary)e.push(`${n(i.secondary.windowMinutes,24,7)} ${o?"\u5269":"left"} ${d(i.secondary.usedPct)}%`);if(i.modelLimits?.opus)e.push(`opus ${o?"\u5269":"left"} ${d(i.modelLimits.opus.usedPct)}%`);if(!e.length)return null;let u=Math.min(...[i.primary,i.secondary,i.modelLimits?.opus].filter(Boolean).map((r)=>d(r.usedPct)));return{text:`\uD83D\uDCB0 ${e.join(" \xB7 ")}`,color:Fm(u)}}function Pt(i,o){let n=o.clients[o.clientIdx];if(!n)return;let d=So[n.client.id]||Po,e=co(n.launchOptions,o.zh),u=n.activeProvider?.name||(o.zh?"\u672A\u914D\u7F6E":"Not set"),r=i.terminalHeight<26,c=`${`${o.zh?"\u670D\u52A1\u5546":"Provider"}: ${u}`} \xB7 tako ${le}`,{root:a,panel:p}=ti(i,o,"Tako Launcher",d.color,r?{text:c,color:n.activeProvider?m.orange:m.yellow}:void 0,r);if(Km(i,p,o.zh?"\u591A\u5BA2\u6237\u7AEF AI \u542F\u52A8\u5668":"Multi-client AI launcher",d.color),!r){let f=P(i,{flexDirection:"row",gap:1,justifyContent:"space-between"}),h=P(i,{flexDirection:"row",gap:1});Zm(i,h,o),f.add(h);let M=Em(o.quota,o.zh);if(M)v(f,i,M.text,{fg:M.color,truncate:!0});p.add(f)}let l=P(i,{flexDirection:"row",flexWrap:"wrap",gap:1,justifyContent:"center"}),x=o.focus==="tabs";o.clients.forEach((f,h)=>{let M=So[f.client.id]||Po,k=h===o.clientIdx,B=P(i,{border:!0,borderStyle:k&&x?"heavy":"single",borderColor:k?M.color:m.border,paddingX:1,height:3,backgroundColor:k&&x?m.panelMuted:m.panel});v(B,i,`${k&&x?"> ":""}${h+1} ${M.icon} ${f.client.name}`,{fg:k?M.color:m.muted,attributes:k?J.BOLD:J.NONE}),l.add(B)}),p.add(l);let w=P(i,{flexDirection:"row",gap:2,flexGrow:r?1:0}),y=P(i,{flexDirection:"column",border:!0,borderStyle:"rounded",borderColor:o.focus==="projects"?d.color:m.border,title:o.zh?"\u9879\u76EE":"Projects",titleColor:o.focus==="projects"?d.color:m.muted,paddingX:1,paddingY:1,width:"58%"});pi(i,y,n.projects.map((f,h)=>({primary:f.label,secondary:f.hint,focused:o.focus==="projects"&&h===o.projectIdx,color:d.color})));let s=P(i,{flexDirection:"column",border:!0,borderStyle:"rounded",borderColor:o.focus==="options"?d.color:m.border,title:o.zh?"\u542F\u52A8\u9009\u9879":"Options",titleColor:o.focus==="options"?d.color:m.muted,paddingX:1,paddingY:1,flexGrow:1});pi(i,s,e.map((f,h)=>{let M=o.focus==="options"&&h===o.optionIdx;if(f.kind==="flag"){let k=n.enabled.has(f.opt.id);return{primary:f.opt.label[o.zh?"zh":"en"]||f.opt.label.en,secondary:M?f.opt.flag:void 0,focused:M,marker:k?"[x]":"[ ]",color:k?d.color:m.muted}}if(f.kind==="group"){let k=Ei(n.launchOptions,n.enabled,f.group);return{primary:`${f.title}: ${k?.shortLabel||(o.zh?"\u9ED8\u8BA4":"Default")}`,secondary:M?o.zh?"Enter \u9009\u62E9":"Enter to pick":void 0,focused:M,marker:">",color:d.color}}return{primary:`${f.title}: ${u}`,secondary:M?o.zh?"Enter \u7BA1\u7406":"Enter to manage":void 0,focused:M,marker:"*",color:n.activeProvider?d.color:m.yellow}})),w.add(y),w.add(s),p.add(w);let b=o.focus==="tabs"?["\u2190\u2192",o.zh?"\u5207\u5BA2\u6237\u7AEF":"switch client"]:o.focus==="projects"?["\u2192",o.zh?"\u53BB\u9009\u9879":"to options"]:["\u2190",o.zh?"\u53BB\u9879\u76EE":"to projects"];F(i,a,[["Enter",o.zh?"\u542F\u52A8":"launch"],b,["\u2191\u2193",o.zh?"\u9009\u62E9":"move"],["Space",o.zh?"\u5207\u6362\u9009\u9879":"toggle"],["p",o.zh?"\u670D\u52A1\u5546":"providers"],["c","config"],["s","stats"],["a","agents"],["q",o.zh?"\u9000\u51FA":"quit"]]),X(i,o,a)}function _m(i,o){let n=o.clients[o.clientIdx],d=o.optionPickerGroup;if(!n||!d){Pt(i,o);return}let e=n.launchOptions.filter((h)=>h.group===d),u=(So[n.client.id]||Po).color,r=d==="model"?o.zh?"\u9009\u62E9\u6A21\u578B":"Pick Model":o.zh?"\u9009\u62E9\u9009\u9879":"Pick Option",t=Ei(n.launchOptions,n.enabled,d),c=d==="model";if(c&&o.modelPickerMode==="grid"){Um(i,o,n,e,u,r);return}let a=c?Ro(e,n.enabled,o.pickCounts):{list:e,hiddenCount:0},p=[{id:"",primary:o.zh?"\u9ED8\u8BA4":"Default",secondary:t?"":o.zh?"\u5F53\u524D":"current"},...a.list.map((h)=>({id:h.id,primary:h.shortLabel||h.label[o.zh?"zh":"en"]||h.label.en,secondary:n.enabled.has(h.id)?o.zh?"\u5F53\u524D":"current":h.flag})),...a.hiddenCount>0?[{id:"__show_all__",primary:o.zh?`\u663E\u793A\u5168\u90E8 (${a.hiddenCount})`:`Show all (${a.hiddenCount})`,secondary:">"}]:[]],l=p.length;o.optionPickerIdx=Math.max(0,Math.min(o.optionPickerIdx,l-1));let x=Math.max(5,Math.min(14,i.terminalHeight-10)),w=Math.max(0,Math.min(o.optionPickerIdx-Math.floor(x/2),Math.max(0,l-x))),y=p.slice(w,w+x),s=P(i,{flexDirection:"column",width:"100%",...We(i),backgroundColor:m.bg,justifyContent:"center",alignItems:"center",paddingX:2}),b=P(i,{flexDirection:"column",border:!0,borderStyle:"rounded",borderColor:u,backgroundColor:m.panel,paddingX:2,paddingY:1,gap:1,width:"70%"}),f=P(i,{flexDirection:"row",justifyContent:"space-between"});v(f,i,r,{fg:u,attributes:J.BOLD}),v(f,i,`${o.optionPickerIdx+1}/${l}`,{fg:m.muted}),b.add(f),pi(i,b,y.map((h,M)=>{let k=w+M;return{primary:h.primary,secondary:h.secondary,focused:k===o.optionPickerIdx,marker:h.id&&n.enabled.has(h.id)?"[x]":" ",color:u}})),v(b,i,o.zh?"Esc \u8FD4\u56DE\uFF0C\u4E0D\u4FEE\u6539\u5F53\u524D\u9009\u62E9":"Esc returns without changing the current selection",{fg:m.muted,truncate:!0}),s.add(b),F(i,s,[["Enter",o.zh?"\u786E\u8BA4":"confirm"],["\u2191\u2193",o.zh?"\u9009\u62E9":"select"],["Esc/q",o.zh?"\u8FD4\u56DE":"back"]]),X(i,o,s)}function Um(i,o,n,d,e,u){let r=d.map((b)=>b.id),t=new Map(d.map((b)=>[b.id,b])),c=(b)=>{let f=t.get(b);return f?.shortLabel||f?.label[o.zh?"zh":"en"]||f?.label.en||b},a=Jo(d,i.terminalWidth||80,o.zh),p=Bo(r,a),l=Math.max(1,p.flat.length);o.optionPickerIdx=Math.max(0,Math.min(o.optionPickerIdx,l-1));let x=Math.max(he,...r.length>0?r.map((b)=>vn(c(b))+3):[0]),w=P(i,{flexDirection:"column",width:"100%",...We(i),backgroundColor:m.bg,justifyContent:"center",alignItems:"center",paddingX:2}),y=P(i,{flexDirection:"column",border:!0,borderStyle:"rounded",borderColor:e,backgroundColor:m.panel,paddingX:2,paddingY:1,gap:0,width:"78%"}),s=P(i,{flexDirection:"row",justifyContent:"space-between",marginBottom:1});v(s,i,u,{fg:e,attributes:J.BOLD}),v(s,i,`${o.optionPickerIdx+1}/${p.flat.length}`,{fg:m.muted}),y.add(s),p.groups.forEach((b,f)=>{if(f>0)v(y,i,"-".repeat(Math.max(8,x*a)),{fg:m.border});b.rows.forEach((h)=>{let M=P(i,{flexDirection:"row",gap:1,height:1});h.forEach((k)=>{let li=p.flat.indexOf(k)===o.optionPickerIdx,mo=n.enabled.has(k),Yo=`${li?">":" "}${Wt(c(k),x)}${mo?"*":" "}`;v(M,i,Yo,{fg:li?e:mo?m.green:m.text,attributes:li?J.BOLD:J.NONE})}),y.add(M)})}),w.add(y),F(i,w,[["Enter",o.zh?"\u786E\u8BA4":"confirm"],["arrows",o.zh?"\u9009\u62E9":"select"],["Esc/q",o.zh?"\u8FD4\u56DE":"back"]]),X(i,o,w)}function Dm(i,o){let d=o.clients[o.providerTabIdx]?.client,e=d?o.providers.filter((w)=>Ti(w,d.id)):[],u=d?o.clientBindings[d.id]||o.defaultProviderId:o.defaultProviderId,r=e.length+4;o.providerRowIdx=Math.max(0,Math.min(o.providerRowIdx,Math.max(0,r-1)));let t=d?(So[d.id]||Po).color:m.orange,{root:c,panel:a}=ti(i,o,o.zh?"\u670D\u52A1\u5546\u7BA1\u7406":"Providers",t),p=P(i,{flexDirection:"row",gap:1,justifyContent:"center"});o.clients.forEach((w,y)=>{let s=So[w.client.id]||Po,b=y===o.providerTabIdx,f=P(i,{border:!0,borderStyle:b?"heavy":"single",borderColor:b?s.color:m.border,paddingX:1,height:3});v(f,i,`${y+1} ${w.client.name}`,{fg:b?s.color:m.muted,attributes:b?J.BOLD:J.NONE}),p.add(f)}),a.add(p);let l=[...e.map((w)=>({primary:w.name,secondary:[io[w.type]?.[o.zh?"zh":"en"]||w.type,w.id===u?o.zh?"\u5F53\u524D":"bound":"",w.id===o.defaultProviderId?o.zh?"\u9ED8\u8BA4":"default":""].filter(Boolean).join(" "),marker:w.id===u?"*":" "})),{primary:o.zh?"\u6DFB\u52A0\u670D\u52A1\u5546":"Add provider",secondary:"",marker:"+"},{primary:o.zh?"\u626B\u63CF\u672C\u5730\u8BA2\u9605":"Scan local subscriptions",secondary:"",marker:"?"},{primary:o.zh?"\u5BA2\u6237\u7AEF\u7248\u672C\u7BA1\u7406":"Client versions",secondary:"",marker:"V"},{primary:o.zh?"\u8FD4\u56DE":"Back",secondary:"",marker:"<"}],x=P(i,{flexDirection:"column",border:!0,borderStyle:"rounded",borderColor:t,paddingX:1,paddingY:1});pi(i,x,l.map((w,y)=>({...w,focused:y===o.providerRowIdx,color:t}))),a.add(x),F(i,c,[["Enter",o.zh?"\u7ED1\u5B9A/\u6253\u5F00":"bind/open"],["d/e",o.zh?"\u8BE6\u60C5":"detail"],["arrows",o.zh?"\u9009\u62E9":"select"],["q/Esc",o.zh?"\u8FD4\u56DE":"back"]]),X(i,o,c)}function jm(i,o){let n=fn(o),{root:d,panel:e}=ti(i,o,o.zh?"\u670D\u52A1\u5546\u8BE6\u60C5":"Provider Detail",m.orange);if(!n)v(e,i,o.zh?"\u670D\u52A1\u5546\u4E0D\u5B58\u5728":"Provider not found",{fg:m.red});else{let u=[["Name",n.name],["Type",io[n.type]?.[o.zh?"zh":"en"]||n.type],["Base URL",n.baseUrl||"-"],["Model",n.model||"-"],["Email",n.email||"-"],["Builtin",n.builtin?"yes":"no"]];for(let[t,c]of u)v(e,i,`${t}: ${c}`,{fg:m.text,truncate:!0});let r=vd(n,o);pi(i,e,r.map((t,c)=>({primary:ht(t,o.zh),focused:c===o.providerDetailIdx,marker:c===o.providerDetailIdx?">":" ",color:m.orange})))}F(i,d,[["Enter",o.zh?"\u6267\u884C":"run"],["arrows",o.zh?"\u9009\u62E9":"select"],["q/Esc",o.zh?"\u8FD4\u56DE":"back"]]),X(i,o,d)}function i1(i,o){let{root:n,panel:d}=ti(i,o,o.zh?"\u6DFB\u52A0\u670D\u52A1\u5546":"Add Provider",m.orange);pi(i,d,Co.map((e,u)=>({primary:io[e]?.[o.zh?"zh":"en"]||e,secondary:e==="claude-subscription"||e==="codex-subscription"?o.zh?"\u767B\u5F55\u6388\u6743":"login auth":e==="custom"?o.zh?"\u81EA\u5B9A\u4E49 URL":"custom URL":"",focused:u===o.providerRowIdx,marker:"+",color:m.orange}))),F(i,n,[["Enter",o.zh?"\u9009\u62E9":"select"],["q/Esc",o.zh?"\u8FD4\u56DE":"back"]]),X(i,o,n)}function o1(i,o){let n={"add-key":o.zh?"\u8F93\u5165 API Key":"Enter API key","add-url":o.zh?"\u8F93\u5165 Base URL":"Enter base URL","add-model":o.zh?"\u9009\u62E9/\u8F93\u5165\u6A21\u578B":"Select/enter model","add-ctx":o.zh?"\u8F93\u5165\u4E0A\u4E0B\u6587\u7A97\u53E3 token \u6570":"Enter context window tokens",rekey:o.zh?"\u66F4\u65B0 API Key":"Update API key"},{root:d,panel:e}=ti(i,o,n[o.providerInputMode],m.orange),u=o.providerInputMode==="add-model"?Eo(o.addType):void 0;if(u)pi(i,e,u.map((r,t)=>({primary:r,focused:t===o.providerRowIdx,marker:t===o.providerRowIdx?">":" ",color:m.orange})));else{let r=o.providerInputMode==="add-key"||o.providerInputMode==="rekey"?we(o.addKey):o.providerInputMode==="add-url"?o.addUrl:o.providerInputMode==="add-model"?o.addModel:o.addCtx;v(e,i,`> ${r}_`,{fg:m.text,truncate:!0})}F(i,d,[["Enter",o.zh?"\u7EE7\u7EED":"continue"],["Backspace",o.zh?"\u5220\u9664":"delete"],["q/Esc",o.zh?"\u53D6\u6D88":"cancel"]]),X(i,o,d)}function n1(i,o){let{root:n,panel:d}=ti(i,o,o.zh?"\u7528\u91CF\u7EDF\u8BA1":"Usage Stats",m.green);if(o.statsLoading)v(d,i,o.zh?"\u6B63\u5728\u83B7\u53D6...":"Loading...",{fg:m.yellow});else if(o.statsError)v(d,i,`${o.zh?"\u83B7\u53D6\u5931\u8D25":"Failed"}: ${o.statsError}`,{fg:m.red});else if(o.statsData){if(v(d,i,`${o.zh?"\u603B\u8C03\u7528\u6B21\u6570":"Total requests"}: ${Nt(o.statsData.totalRequests)}`),v(d,i,`${o.zh?"\u603B\u6D88\u8D39":"Total cost"}: ${o.statsData.totalCost}`),v(d,i,`${o.zh?"\u4ECA\u65E5\u6D88\u8D39":"Today"}: ${o.statsData.todayCost}`),o.statsData.modelStats.length>0){v(d,i,o.zh?"\u6A21\u578B\u5206\u5E03:":"Models:",{fg:m.muted});for(let e of o.statsData.modelStats.slice(0,12))v(d,i,`${e.model.padEnd(28)} ${String(e.requests).padStart(6)} ${e.cost}`,{fg:m.muted,truncate:!0})}}else v(d,i,o.zh?"\u6682\u65E0\u6570\u636E":"No data",{fg:m.muted});F(i,n,[["r",o.zh?"\u5237\u65B0":"refresh"],["q/Esc",o.zh?"\u8FD4\u56DE":"back"]]),X(i,o,n)}function d1(i,o){let{root:n,panel:d}=ti(i,o,o.zh?"\u914D\u7F6E API Key":"Configure API key",m.orange);if(v(d,i,`> ${we(o.apiKeyValue)}_`,{truncate:!0}),o.apiKeyStatus==="validating")v(d,i,o.zh?"\u6B63\u5728\u9A8C\u8BC1...":"Validating...",{fg:m.yellow});if(o.apiKeyStatus==="success")v(d,i,o.zh?"\u914D\u7F6E\u6210\u529F":"Configured",{fg:m.green});if(o.apiKeyStatus==="error")v(d,i,o.apiKeyError||"Error",{fg:m.red});F(i,n,[["Enter",o.zh?"\u4FDD\u5B58":"save"],["Backspace",o.zh?"\u5220\u9664":"delete"],["q/Esc",o.zh?"\u8FD4\u56DE":"back"]]),X(i,o,n)}function e1(i,o){let{root:n,panel:d}=ti(i,o,o.zh?"\u5207\u6362\u8BED\u8A00":"Language",m.magenta);pi(i,d,Fi.map((e,u)=>({primary:e.label,secondary:e.value===Ii()?o.zh?"\u5F53\u524D":"current":"",focused:u===o.languageIdx,marker:u===o.languageIdx?">":" ",color:m.magenta}))),F(i,n,[["Enter",o.zh?"\u9009\u62E9":"select"],["q/Esc",o.zh?"\u8FD4\u56DE":"back"]]),X(i,o,n)}function u1(i,o){let{root:n,panel:d}=ti(i,o,o.zh?"Agent \u4F1A\u8BDD":"Agent Sessions",m.blue);if(v(d,i,`${o.zh?"\u9ED8\u8BA4 Provider":"Defaults"}: ${Object.keys(o.agentDefaults).length===0?"-":Object.entries(o.agentDefaults).map(([e,u])=>`${e}=${u.slice(0,8)}`).join(" ")}`,{fg:m.muted,truncate:!0}),!o.agentSessions)v(d,i,o.zh?"\u52A0\u8F7D\u4E2D...":"Loading...",{fg:m.yellow});else if(o.agentSessions.length===0)v(d,i,o.zh?"\u6682\u65E0 session\uFF0C\u6309 n \u65B0\u5EFA":"No sessions, press n to create",{fg:m.muted});else pi(i,d,o.agentSessions.map((e,u)=>({primary:`${e.sid.slice(0,8)} ${e.backend.padEnd(6)} ${(e.name||"").slice(0,18).padEnd(18)} ${e.status}`,secondary:`${e.turnCount} turns ${ye(Date.now()-e.lastActiveAt)}`,focused:u===o.agentIdx,marker:bt(e.status),color:se(e.status)})));if(o.agentError)v(d,i,`! ${o.agentError}`,{fg:m.red,truncate:!0});F(i,n,[["Enter/o",o.zh?"\u8BE6\u60C5":"open"],["n",o.zh?"\u65B0\u5EFA":"new"],["d",o.zh?"\u5173\u95ED":"close"],["x",o.zh?"\u5220\u9664":"purge"],["r",o.zh?"\u5237\u65B0":"refresh"],["q/Esc",o.zh?"\u8FD4\u56DE":"back"]]),X(i,o,n)}function r1(i){let o=new Date(i.ts).toISOString().slice(11,19);switch(i.kind){case"session_started":return{text:`[${o}] session_started ${i.backend}${i.model?` ${i.model}`:""}`,dim:!0};case"turn_started":return{text:`[${o}] turn_started`,color:m.cyan};case"text_delta":return{text:i.text};case"reasoning_delta":return{text:`[${o}] reasoning ${i.text}`,dim:!0};case"tool_use":return{text:`[${o}] tool ${i.name} ${JSON.stringify(i.input)}`,color:m.yellow};case"tool_result":return{text:`[${o}] result ${JSON.stringify(i.output)}`,color:m.green};case"approval_required":return{text:`[${o}] approval ${i.approvalType} ${String(i.approvalId)}`,color:m.magenta};case"turn_completed":return{text:`[${o}] turn_completed${i.stopReason?` ${i.stopReason}`:""}`,color:m.cyan};case"error":return{text:`[${o}] error ${i.message}`,color:m.red};case"session_closed":return{text:`[${o}] session_closed`,dim:!0}}}function t1(i,o){let n=o.agentDetailMeta,{root:d,panel:e}=ti(i,o,o.zh?"Agent \u8BE6\u60C5":"Agent Detail",m.blue);if(!n){v(e,i,o.zh?"\u52A0\u8F7D\u4E2D...":"Loading...",{fg:m.yellow}),X(i,o,d);return}if(v(e,i,`${n.sid.slice(0,8)} ${n.backend} ${n.name} ${n.status}${o.agentDetailAlive===!1?" dead":""}`,{fg:se(n.status),attributes:J.BOLD,truncate:!0}),v(e,i,`${o.zh?"\u5DE5\u4F5C\u76EE\u5F55":"cwd"}: ${n.workdir}`,{fg:m.muted,truncate:!0}),v(e,i,`${o.zh?"\u6A21\u578B":"model"}: ${n.model||"-"} turns=${n.turnCount} ${o.zh?"\u6700\u8FD1":"last"}=${ye(Date.now()-n.lastActiveAt)}`,{fg:m.muted,truncate:!0}),o.agentPendingApprovals.length>0){let c=P(i,{flexDirection:"column",border:!0,borderStyle:"rounded",borderColor:m.magenta,paddingX:1});v(c,i,`${o.agentPendingApprovals.length} ${o.zh?"\u4E2A\u5F85\u5BA1\u6279":"pending approvals"}`,{fg:m.magenta,attributes:J.BOLD});for(let a of o.agentPendingApprovals.slice(0,3))v(c,i,`${a.approvalType} ${a.approvalId.slice(0,12)} ${JSON.stringify(a.params)}`,{fg:m.muted,truncate:!0});e.add(c)}let u=P(i,{flexDirection:"column",border:!0,borderStyle:"rounded",borderColor:m.border,paddingX:1,title:o.zh?"\u65E5\u5FD7":"Log",titleColor:m.muted}),r=o.agentDetailFrames.slice(-Math.max(6,Math.min(18,i.terminalHeight-14)));if(r.length===0)v(u,i,o.zh?"\u6682\u65E0\u65E5\u5FD7":"No log yet",{fg:m.muted});else for(let c of r){let a=r1(c);v(u,i,a.text.replace(/\s+/g," ").slice(0,240),{fg:a.color||(a.dim?m.muted:m.text),truncate:!0})}if(e.add(u),o.agentError)v(e,i,`! ${o.agentError}`,{fg:m.red,truncate:!0});let t=o.agentDetailStatus==="sending"?"... ":o.agentDetailStatus==="cancelling"?"x ":"> ";v(e,i,`${t}${o.agentDetailInput}_`,{fg:o.agentDetailStatus==="idle"?m.text:m.yellow,truncate:!0}),F(i,d,[["Enter",o.zh?"\u53D1\u9001":"send"],["Ctrl-Y/N",o.zh?"\u6279/\u62D2":"approve/deny"],["r",o.zh?"\u5237\u65B0":"refresh"],["Ctrl-C",o.zh?"\u53D6\u6D88":"cancel"],["Esc/q",o.zh?"\u8FD4\u56DE":"back"]]),X(i,o,d)}function c1(i,o){let{root:n,panel:d}=ti(i,o,o.zh?"\u65B0\u5EFA Agent Session":"New Agent Session",m.blue),e=[{id:"backend",label:`${o.zh?"\u540E\u7AEF":"Backend"}: ${o.agentBackend==="claude"?"[claude] codex":"claude [codex]"}`},{id:"model",label:`${o.zh?"\u6A21\u578B":"Model"}: ${o.agentModel||(o.zh?"\u9ED8\u8BA4":"default")}`},{id:"name",label:`${o.zh?"\u540D\u79F0":"Name"}: ${o.agentName||(o.zh?"\u81EA\u52A8":"auto")}`}];if(pi(i,d,e.map((u)=>({primary:u.label+(o.agentField===u.id&&u.id!=="backend"?"_":""),focused:o.agentField===u.id,marker:o.agentField===u.id?">":" ",color:m.blue}))),o.agentError)v(d,i,`! ${o.agentError}`,{fg:m.red,truncate:!0});F(i,n,[["Tab/arrows",o.zh?"\u5207\u5B57\u6BB5":"field"],["Space",o.zh?"\u5207\u540E\u7AEF":"backend"],["Enter",o.zh?"\u521B\u5EFA":"create"],["q/Esc",o.zh?"\u53D6\u6D88":"cancel"]]),X(i,o,n)}var a1=[{id:"configure",label:{zh:"\u73B0\u5728\u914D\u7F6E",en:"Configure now"},hint:{zh:"\u8F93\u5165\u4F60\u7684 Tako API Key",en:"Enter your Tako API Key"},color:m.cyan},{id:"skip",label:{zh:"\u7A0D\u540E\u518D\u8BF4",en:"Not now"},hint:{zh:"\u660E\u5929\u518D\u63D0\u9192\u6211",en:"Remind me tomorrow"},color:m.text},{id:"never",label:{zh:"\u4E0D\u518D\u63D0\u793A",en:"Don't ask again"},hint:{zh:"\u4E4B\u540E\u53EF\u4EE5\u6309 c \u968F\u65F6\u914D\u7F6E",en:"You can configure later via c"},color:m.text}];function p1(i,o){let{root:n,panel:d}=ti(i,o,`\uD83D\uDD11 ${o.zh?"\u914D\u7F6E Tako API Key":"Configure Tako API Key"}`,m.cyan);v(d,i,o.zh?"\u914D\u7F6E API Key \u540E\u5373\u53EF\u4F7F\u7528 Tako \u4EE3\u7406\u670D\u52A1\uFF0C\u83B7\u5F97\u7EDF\u4E00\u7684\u914D\u989D\u7BA1\u7406\u548C\u66F4\u5FEB\u7684\u8BBF\u95EE\u901F\u5EA6\u3002":"Configure your API Key to use Tako proxy service with unified quota and faster access.",{fg:m.muted}),v(d,i,o.zh?"\u4F60\u4E5F\u53EF\u4EE5\u8DF3\u8FC7\u6B64\u6B65\u9AA4\uFF0C\u76F4\u63A5\u4F7F\u7528\u5176\u4ED6\u670D\u52A1\u5546\u3002":"You can skip this and use other providers instead.",{fg:m.muted}),pi(i,d,a1.map((e,u)=>({primary:o.zh?e.label.zh:e.label.en,secondary:u===o.keyGuideIdx?o.zh?e.hint.zh:e.hint.en:void 0,focused:u===o.keyGuideIdx,marker:u===o.keyGuideIdx?">":" ",color:e.color}))),F(i,n,[["\u2191\u2193",o.zh?"\u9009\u62E9":"select"],["Enter",o.zh?"\u786E\u8BA4":"confirm"],["Esc",o.zh?"\u8DF3\u8FC7":"skip"]]),X(i,o,n)}var St={"claude-code":{icon:"\u2726",color:m.yellow},codex:{icon:"\u25C8",color:m.blue},gemini:{icon:"\u25C6",color:m.cyan}};function l1(i,o){let n=o.clients[o.clientVersionsClientIdx],d=St[n?.client.id||""]?.color||m.gray,{root:e,panel:u}=ti(i,o,`\uD83D\uDCE6 ${o.zh?"\u5BA2\u6237\u7AEF\u7248\u672C\u7BA1\u7406":"Client Versions"}`,d,void 0,!0),r=P(i,{flexDirection:"row",flexWrap:"wrap",gap:1,justifyContent:"center"});if(o.clients.forEach((t,c)=>{let a=St[t.client.id]||{icon:"\u25AA",color:m.gray},p=c===o.clientVersionsClientIdx,l=P(i,{border:!0,borderStyle:p?"heavy":"single",borderColor:p?a.color:m.border,paddingX:2});v(l,i,`${a.icon} ${t.client.name}`,{fg:p?a.color:m.muted,attributes:p?J.BOLD:J.NONE}),r.add(l)}),u.add(r),o.clientVersionsLoading)v(u,i,o.zh?"\u52A0\u8F7D\u4E2D...":"Loading...",{fg:m.yellow});else if(o.clientVersionsError)v(u,i,`${o.zh?"\u52A0\u8F7D\u5931\u8D25\uFF1A":"Failed: "}${o.clientVersionsError}`,{fg:m.red,truncate:!0});else if(o.clientVersions.length===0)v(u,i,o.zh?"\u6682\u65E0\u7248\u672C":"No versions",{fg:m.muted});else{let t=o.clientVersions.find((l)=>l.isCurrent)?.version??(o.zh?"\u672A\u5B89\u88C5":"not installed");v(u,i,`${o.zh?"\u5171":""} ${o.clientVersions.length} ${o.zh?"\u4E2A\u7248\u672C\uFF0C\u5F53\u524D\uFF1A":"versions, current: "}${t}`,{fg:m.muted,truncate:!0});let c=12,a=Math.max(0,Math.min(o.clientVersionsIdx-c+1,o.clientVersions.length-c)),p=o.clientVersions.slice(Math.max(0,a),Math.max(0,a)+c);pi(i,u,p.map((l,x)=>{let w=Math.max(0,a)+x,y=l.publishedAt?l.publishedAt.slice(0,10):"";return{primary:`${l.version.padEnd(16)}${y}${l.isCurrent?o.zh?" \u2605 \u5F53\u524D":" \u2605 current":""}`,focused:w===o.clientVersionsIdx,marker:w===o.clientVersionsIdx?">":" ",color:l.isCurrent?m.green:d}}))}F(i,e,[["\u2190\u2192",o.zh?"\u5207\u6362\u5DE5\u5177":"switch"],["\u2191\u2193",o.zh?"\u9009\u62E9":"select"],["Enter",o.zh?"\u5B89\u88C5":"install"],["r",o.zh?"\u5237\u65B0":"refresh"],["q/Esc",o.zh?"\u8FD4\u56DE":"back"]]),X(i,o,e)}Ao();ai();Si();Io();sd();Ao();md();Zi();xi();function w1(i,o,n){let d=i.clients[i.clientIdx];if(!d)return;let e=d.launchOptions.filter((c)=>c.group===o);if(e.length===0)return;let u=Ei(d.launchOptions,d.enabled,o),r=o==="model"?be(e,i.pickCounts):"collapsed",t=0;if(u)if(o==="model"&&r==="grid"){let c=e.map((p)=>p.id),a=Jo(e,n,i.zh);t=Le(c,u.id,a)}else t=(o==="model"?Ro(e,d.enabled,i.pickCounts).list:e).findIndex((a)=>a.id===u.id)+1;i.optionPickerGroup=o,i.optionPickerIdx=Math.max(0,t),i.modelPickerMode=r,i.screen="option-picker"}function Qt(i,o,n,d,e){let u=o.clients[o.clientIdx];if(!u)return;let r=co(u.launchOptions,o.zh),t=i.name,c=Z(i);if(t==="q"||t==="escape"){d({type:"exit"});return}if(c&&t==="a"){e(()=>hi(o));return}if(c&&t==="p"){e(()=>po(o));return}if(c&&t==="s"){e(()=>hn(o));return}if(c&&t==="c"){o.screen="config",o.apiKeyValue="",o.apiKeyStatus="idle",o.apiKeyError=void 0,W(n,o);return}if(c&&t==="l"){o.screen="language",W(n,o);return}let a=Number.parseInt(t,10);if(c&&a>=1&&a<=o.clients.length){o.clientIdx=a-1,sn(o),W(n,o);return}if(t==="tab"){if(i.shift)o.clientIdx=o.clientIdx>0?o.clientIdx-1:o.clients.length-1;else o.clientIdx=o.clientIdx<o.clients.length-1?o.clientIdx+1:0;sn(o),W(n,o);return}if(t==="left"){if(o.focus==="tabs")o.clientIdx=o.clientIdx>0?o.clientIdx-1:o.clients.length-1,sn(o);else if(o.focus==="options")o.focus="projects",o.projectIdx=Math.min(o.projectIdx,u.projects.length-1);W(n,o);return}if(t==="right"){if(o.focus==="tabs")o.clientIdx=o.clientIdx<o.clients.length-1?o.clientIdx+1:0,sn(o);else if(o.focus==="projects"&&r.length>0)o.focus="options",o.optionIdx=Math.min(o.optionIdx,r.length-1);W(n,o);return}if(t==="down"){if(o.focus==="tabs")o.focus="projects";else if(o.focus==="projects"){if(o.projectIdx<u.projects.length-1)o.projectIdx+=1}else if(o.optionIdx<r.length-1)o.optionIdx+=1;W(n,o);return}if(t==="up"){if(o.focus==="options")if(o.optionIdx>0)o.optionIdx-=1;else o.focus="tabs";else if(o.focus==="projects")if(o.projectIdx>0)o.projectIdx-=1;else o.focus="tabs";W(n,o);return}if((t==="space"||t==="return")&&o.focus==="options"){let p=r[o.optionIdx];if(p?.kind==="provider"){e(()=>po(o));return}if(p?.kind==="flag"){if(u.enabled.has(p.opt.id))u.enabled.delete(p.opt.id);else u.enabled.add(p.opt.id);W(n,o);return}if(p?.kind==="group"){w1(o,p.group,n.terminalWidth||80),W(n,o);return}}if(t==="return"){let p=u.projects[o.projectIdx],l=me(u);d({type:"launch",clientId:u.client.id,projectPath:p?.path,...l})}}function qt(i,o,n){let d=o.clients[o.clientIdx],e=o.optionPickerGroup;if(!d||!e){o.screen="launcher",W(n,o);return}let u=d.launchOptions.filter((p)=>p.group===e),r=e==="model",t=i.name;if(r&&o.modelPickerMode==="grid"){let p=u.map((s)=>s.id),l=Jo(u,n.terminalWidth||80,o.zh),x=Bo(p,l),w=Mt(p,l),y=x.flat.length;if(t==="escape"){if(be(u,o.pickCounts)==="grid")o.screen="launcher",o.modelPickerMode="collapsed";else{o.modelPickerMode="collapsed";let s=Ei(d.launchOptions,d.enabled,e),b=Ro(u,d.enabled,o.pickCounts).list;o.optionPickerIdx=s?Math.max(0,b.findIndex((f)=>f.id===s.id)+1):0}W(n,o);return}if(Z(i)&&t==="q"){o.screen="launcher",o.modelPickerMode="collapsed",W(n,o);return}if(y===0)return;if(t==="left"){o.optionPickerIdx=o.optionPickerIdx>0?o.optionPickerIdx-1:y-1,W(n,o);return}if(t==="right"){o.optionPickerIdx=o.optionPickerIdx<y-1?o.optionPickerIdx+1:0,W(n,o);return}if(t==="up"||t==="down"){let s=0,b=0,f=0;for(let k=0;k<w.length;k++){let B=w[k].length;if(o.optionPickerIdx<f+B){s=k,b=o.optionPickerIdx-f;break}f+=B}let h=t==="up"?s>0?s-1:w.length-1:s<w.length-1?s+1:0,M=Math.min(b,w[h].length-1);o.optionPickerIdx=w.slice(0,h).reduce((k,B)=>k+B.length,0)+M,W(n,o);return}if(t==="return"||t==="space"){let s=x.flat[o.optionPickerIdx];for(let b of u)d.enabled.delete(b.id);if(s)d.enabled.add(s);o.screen="launcher",o.modelPickerMode="collapsed",W(n,o)}return}let c=r?Ro(u,d.enabled,o.pickCounts):{list:u,hiddenCount:0},a=c.list.length+1+(c.hiddenCount>0?1:0);if(t==="escape"||Z(i)&&t==="q"){o.screen="launcher",o.modelPickerMode="collapsed",W(n,o);return}if(t==="up"){o.optionPickerIdx=o.optionPickerIdx>0?o.optionPickerIdx-1:a-1,W(n,o);return}if(t==="down"){o.optionPickerIdx=o.optionPickerIdx<a-1?o.optionPickerIdx+1:0,W(n,o);return}if(t==="return"||t==="space"){if(o.optionPickerIdx===0)for(let p of u)d.enabled.delete(p.id);else if(r&&c.hiddenCount>0&&o.optionPickerIdx===c.list.length+1){let p=Ei(d.launchOptions,d.enabled,e),l=u.map((w)=>w.id),x=Jo(u,n.terminalWidth||80,o.zh);o.optionPickerIdx=p?Math.max(0,Le(l,p.id,x)):0,o.modelPickerMode="grid",W(n,o);return}else{for(let l of u)d.enabled.delete(l.id);let p=c.list[o.optionPickerIdx-1];if(p)d.enabled.add(p.id)}o.screen="launcher",o.modelPickerMode="collapsed",W(n,o)}}function Ot(i,o,n,d){let e=o.clients[o.providerTabIdx]?.client,u=e?o.providers.filter((a)=>Ti(a,e.id)):[],r=u.length+4,t=i.name,c=Z(i);if(t==="left")o.providerTabIdx=o.providerTabIdx>0?o.providerTabIdx-1:o.clients.length-1;else if(t==="right")o.providerTabIdx=o.providerTabIdx<o.clients.length-1?o.providerTabIdx+1:0;else if(t==="up")o.providerRowIdx=o.providerRowIdx>0?o.providerRowIdx-1:r-1;else if(t==="down")o.providerRowIdx=o.providerRowIdx<r-1?o.providerRowIdx+1:0;else if(c&&(t==="d"||t==="e")&&o.providerRowIdx<u.length)o.providerSelectedId=u[o.providerRowIdx].id,o.providerDetailIdx=0,o.screen="provider-detail";else if(t==="return"){if(o.providerRowIdx<u.length&&e){let a=u[o.providerRowIdx];d(async()=>{await d0(e.id,a.id);let p;if(e.setupConfigFiles)try{await e.setupConfigFiles(_(a))}catch(l){p=l instanceof Error?l.message:String(l)}if(await Ji(o),await vi(o),o.clientIdx=o.clients.findIndex((l)=>l.client.id===e.id),o.clientIdx<0)o.clientIdx=0;Ai(o),o.message=p?o.zh?`\u670D\u52A1\u5546\u5DF2\u7ED1\u5B9A\uFF0C\u914D\u7F6E\u540C\u6B65\u5931\u8D25\uFF1A${p}`:`Provider bound, config sync failed: ${p}`:o.zh?"\u670D\u52A1\u5546\u5DF2\u7ED1\u5B9A":"Provider bound"});return}if(o.providerRowIdx===u.length)o.screen="provider-add-type",o.providerRowIdx=0;else if(o.providerRowIdx===u.length+1){d(async()=>{let a=await _o(),p=await Uo(a);if(p>0)U(),T();await Ji(o),await vi(o),o.message=o.zh?`\u626B\u63CF\u5B8C\u6210\uFF0C\u65B0\u589E ${p} \u4E2A`:`Scan complete, ${p} added`});return}else if(o.providerRowIdx===u.length+2){d(()=>Me(o));return}else Ai(o)}W(n,o)}function Rt(i,o,n,d,e){let u=fn(o);if(!u){o.screen="providers",W(n,o);return}let r=vd(u,o);if(i.name==="up"||i.name==="left")o.providerDetailIdx=o.providerDetailIdx>0?o.providerDetailIdx-1:r.length-1;else if(i.name==="down"||i.name==="right")o.providerDetailIdx=o.providerDetailIdx<r.length-1?o.providerDetailIdx+1:0;else if(i.name==="return"){let t=r[o.providerDetailIdx];if(t==="back")o.screen="providers";if(t==="default"){e(async()=>{await n0(u.id),await Ji(o),await vi(o),o.screen="providers",o.message=o.zh?"\u5DF2\u8BBE\u4E3A\u9ED8\u8BA4":"Set as default"});return}if(t==="delete"){e(async()=>{await o0(u.id),await Ji(o),await vi(o),o.screen="providers",o.message=o.zh?"\u5DF2\u5220\u9664":"Deleted"});return}if(t==="rekey")o.addType=u.type,ao(o,"rekey");if(t==="relogin"){d({type:"provider-login",tool:u.type==="codex-subscription"?"codex":"claude"});return}}W(n,o)}function Jt(i,o,n,d){if(i.name==="up")o.providerRowIdx=o.providerRowIdx>0?o.providerRowIdx-1:Co.length-1;else if(i.name==="down")o.providerRowIdx=o.providerRowIdx<Co.length-1?o.providerRowIdx+1:0;else if(i.name==="return"){if(o.addType=Co[o.providerRowIdx],o.addType==="claude-subscription"||o.addType==="codex-subscription"){d({type:"provider-login",tool:o.addType==="codex-subscription"?"codex":"claude"});return}ao(o,"add-key")}W(n,o)}function Bt(i,o,n,d){let e=i.name,u=o.providerInputMode==="add-model"?Eo(o.addType):void 0;if(u){if(e==="up")o.providerRowIdx=o.providerRowIdx>0?o.providerRowIdx-1:u.length-1;else if(e==="down")o.providerRowIdx=o.providerRowIdx<u.length-1?o.providerRowIdx+1:0;else if(e==="return"){o.addModel=u[o.providerRowIdx],d(()=>bn(o));return}W(n,o);return}if(e==="backspace"||e==="delete")qo(o);else if(e==="return"){if(o.providerInputMode==="rekey"){let r=fn(o);if(!r)return;d(async()=>{await Xi(r.id,{apiKey:o.addKey}),await Ji(o),await vi(o),o.screen="providers",o.message=o.zh?"Key \u5DF2\u66F4\u65B0":"Key updated"});return}if(o.providerInputMode==="add-key"&&o.addKey)if(o.addType==="custom")ao(o,"add-url");else ao(o,"add-model");else if(o.providerInputMode==="add-url")ao(o,"add-model");else if(o.providerInputMode==="add-model"){if(o.addModel.trim())ao(o,"add-ctx");else d(()=>bn(o));return}else if(o.providerInputMode==="add-ctx"){d(()=>bn(o));return}}else Oo(o,Qo(i));W(n,o)}function At(i,o,n,d){let e=i.name,u=o.agentSessions||[];if(e==="up")o.agentIdx=o.agentIdx>0?o.agentIdx-1:Math.max(0,u.length-1);else if(e==="down")o.agentIdx=o.agentIdx<u.length-1?o.agentIdx+1:0;else if(Z(i)&&e==="r"){d(()=>hi(o));return}else if(Z(i)&&e==="n")o.screen="agent-new",o.agentBackend="claude",o.agentModel="",o.agentName="",o.agentField="backend",o.agentError=void 0;else if((e==="return"||Z(i)&&e==="o")&&u[o.agentIdx]){d(()=>ze(o,u[o.agentIdx].sid));return}else if(Z(i)&&e==="p"){d(async()=>{let r=await pd();await hi(o),o.message=o.zh?`\u5DF2\u6E05\u7406 ${r} \u4E2A session`:`Purged ${r} sessions`});return}else if(Z(i)&&(e==="d"||e==="x")&&u[o.agentIdx]){let r=u[o.agentIdx];d(async()=>{await $o(r.sid,e==="x"),await hi(o),o.message=e==="x"?o.zh?"\u5DF2\u5220\u9664":"Purged":o.zh?"\u5DF2\u5173\u95ED":"Closed"});return}W(n,o)}function Yt(i,o,n,d){let e=i.name,u=o.agentDetailSid;if(!u){d(()=>hi(o));return}if(i.ctrl&&e==="c"){if(o.agentDetailStatus==="sending"){o.agentDetailStatus="cancelling",W(n,o),xn(u).catch((r)=>{o.agentError=r instanceof Error?r.message:String(r)}).finally(()=>{o.agentDetailStatus="idle",Bi(o).finally(()=>W(n,o))});return}d(()=>hi(o));return}if(i.ctrl&&(e==="y"||e==="n")){let r=o.agentPendingApprovals[0];if(!r)return;d(async()=>{await od(u,r.approvalId,{decision:e==="y"?"allow":"deny",by:"tui",decidedAt:Date.now()}),await Bi(o),o.message=e==="y"?o.zh?"\u5DF2\u6279\u51C6":"Approved":o.zh?"\u5DF2\u62D2\u7EDD":"Denied"});return}if(e==="escape"||Z(i)&&e==="q"&&!o.agentDetailInput){d(()=>hi(o));return}if(Z(i)&&e==="r"){d(()=>Bi(o));return}if(e==="backspace"||e==="delete"){qo(o),W(n,o);return}if(e==="return"){let r=o.agentDetailInput.trim();if(!r||o.agentDetailStatus!=="idle")return;o.agentDetailInput="",o.agentDetailStatus="sending",o.agentError=void 0,W(n,o),mn(u,r).catch((t)=>{o.agentError=t instanceof Error?t.message:String(t)}).finally(()=>{o.agentDetailStatus="idle",Bi(o).finally(()=>W(n,o))});return}Oo(o,Qo(i)),W(n,o)}function Ht(i,o,n,d){let e=i.name;if(e==="tab"||e==="down")o.agentField=o.agentField==="backend"?"model":o.agentField==="model"?"name":"backend";else if(e==="up")o.agentField=o.agentField==="backend"?"name":o.agentField==="model"?"backend":"model";else if((e==="space"||e==="left"||e==="right")&&o.agentField==="backend")o.agentBackend=o.agentBackend==="claude"?"codex":"claude";else if(e==="backspace"||e==="delete")qo(o);else if(e==="return"){d(async()=>{try{let u=await ln({backend:o.agentBackend,model:o.agentModel.trim()||void 0,name:o.agentName.trim()||void 0});await hi(o);let r=o.agentSessions?.findIndex((t)=>t.sid===u.sid)??-1;if(r>=0)o.agentIdx=r;o.message=o.zh?"Session \u5DF2\u521B\u5EFA":"Session created"}catch(u){o.agentError=u instanceof Error?u.message:String(u)}});return}else Oo(o,Qo(i));W(n,o)}function Tt(i,o,n,d){let e=i.name,u=Z(i);if(e==="left"){o.clientVersionsClientIdx=o.clientVersionsClientIdx>0?o.clientVersionsClientIdx-1:o.clients.length-1,d(()=>lo(o));return}if(e==="right"){o.clientVersionsClientIdx=o.clientVersionsClientIdx<o.clients.length-1?o.clientVersionsClientIdx+1:0,d(()=>lo(o));return}if(u&&e==="r"){d(()=>lo(o));return}let r=o.clientVersions.length-1;if(e==="up")o.clientVersionsIdx=o.clientVersionsIdx>0?o.clientVersionsIdx-1:Math.max(0,r);else if(e==="down")o.clientVersionsIdx=o.clientVersionsIdx<r?o.clientVersionsIdx+1:0;else if(e==="return"){let t=o.clientVersions[o.clientVersionsIdx];if(t&&!t.isCurrent){d(()=>Ge(o,t.version));return}}W(n,o)}var y1=["configure","skip","never"];function Xt(i,o,n,d){let e=i.name;if(e==="up")o.keyGuideIdx=o.keyGuideIdx>0?o.keyGuideIdx-1:2;else if(e==="down")o.keyGuideIdx=o.keyGuideIdx<2?o.keyGuideIdx+1:0;else if(e==="escape"){d(async()=>{await bd("skip"),Ai(o)});return}else if(e==="return"){let u=y1[o.keyGuideIdx];if(u==="configure"){o.screen="config",o.apiKeyValue="",o.apiKeyStatus="idle",o.apiKeyError=void 0,W(n,o);return}d(async()=>{await bd(u),Ai(o)});return}W(n,o)}Ao();async function Kt(i={}){let o=await yt();if(i.screen==="providers")await po(o);if(i.message)o.message=i.message;if(o.screen==="launcher")try{let{shouldShowKeyGuide:d}=await Promise.resolve().then(() => (Ao(),It));if(await d())o.screen="key-guide"}catch{}fd();let n=await f1({exitOnCtrlC:!1,clearOnShutdown:!0,useMouse:!0,enableMouseMovement:!1,backgroundColor:m.bg});return new Promise((d)=>{let e=!1,u=!1,r,t=async()=>{await new Promise((y)=>{let s=setTimeout(y,100);s.unref?.(),n.once(s1.DESTROY,()=>{clearTimeout(s),y()}),n.stop(),n.destroy()})},c=(y)=>{if(e)return;if(e=!0,r)clearInterval(r);n.keyInput.off("keypress",l),(async()=>{await t(),await vt(),d(y)})()},a=(y)=>{if(o.busy)return;o.busy=!0,W(n,o),y().catch((s)=>{o.message=`! ${s instanceof Error?s.message:String(s)}`}).finally(()=>{o.busy=!1,W(n,o)})},p=(y)=>{if(n.terminalHeight>=yn)return!1;let s=Math.max(1,n.terminalHeight-2);return o.scrollOffset=Math.max(0,o.scrollOffset+y*s),W(n,o),!0},l=(y)=>{if(y.eventType==="release"||o.busy)return;let s=y.name,b=Qo(y),f=Z(y);if(s==="pagedown"&&p(1))return;if(s==="pageup"&&p(-1))return;if(o.screen==="agent-detail"){Yt(y,o,n,a);return}if(y.ctrl&&s==="c"){c({type:"exit"});return}if(o.screen==="client-versions"){if(s==="escape"||f&&s==="q"){a(()=>po(o));return}Tt(y,o,n,a);return}if(o.screen==="key-guide"){Xt(y,o,n,a);return}if(o.screen==="launcher"){Qt(y,o,n,c,a);return}if(o.screen==="option-picker"){qt(y,o,n);return}if(s==="escape"||f&&s==="q"){if(o.screen==="provider-detail"||o.screen==="provider-add-type"||o.screen==="provider-input")o.screen="providers";else if(o.screen==="agent-new")o.screen="agents";else Ai(o);W(n,o);return}if(o.screen==="providers"){Ot(y,o,n,a);return}if(o.screen==="provider-detail"){Rt(y,o,n,c,a);return}if(o.screen==="provider-add-type"){Jt(y,o,n,c);return}if(o.screen==="provider-input"){Bt(y,o,n,a);return}if(o.screen==="stats"){if(f&&s==="r")a(()=>hn(o));return}if(o.screen==="config"){if(s==="backspace"||s==="delete")qo(o);else if(s==="return")a(async()=>{if(!o.apiKeyValue)return;o.apiKeyStatus="validating",W(n,o);let h=await at(o.apiKeyValue);if(h.success)U(),T(),o.apiKeyStatus="success",await vi(o);else o.apiKeyStatus="error",o.apiKeyError=h.error||"Validation failed"});else Oo(o,b);W(n,o);return}if(o.screen==="language"){if(s==="up")o.languageIdx=o.languageIdx>0?o.languageIdx-1:Fi.length-1;if(s==="down")o.languageIdx=o.languageIdx<Fi.length-1?o.languageIdx+1:0;if(s==="return"){let h=Fi[o.languageIdx];Dd(h.value),o.zh=h.value==="zh",o.message=o.zh?"\u8BED\u8A00\u5DF2\u5207\u6362":"Language changed",a(()=>vi(o).then(()=>Ai(o)));return}W(n,o);return}if(o.screen==="agents"){At(y,o,n,a);return}if(o.screen==="agent-new")Ht(y,o,n,a)};n.keyInput.on("keypress",l),n.on("resize",()=>W(n,o));let x=!1,w=()=>{if(e||x||o.screen!=="launcher")return;let y=o.clients[o.clientIdx]?.activeProvider;if((y?`${y.id}:${y.type}`:void 0)===o.quotaKey)return;x=!0,ke(o).catch(()=>{}).finally(()=>{if(x=!1,!e&&o.screen==="launcher")W(n,o)})};r=setInterval(()=>{if(w(),e||u||o.busy||o.screen!=="agent-detail"||!o.agentDetailSid)return;u=!0,Bi(o).catch((y)=>{o.agentError=y instanceof Error?y.message:String(y)}).finally(()=>{if(u=!1,!e&&o.screen==="agent-detail")W(n,o)})},1000),r.unref?.(),xe(o),W(n,o),n.start()})}Ao();E();H();xi();Ci();ai();C();ai();var v1=2000,Vt=100;function Mi(i){if(Ho||process.env.TAKO_DEBUG==="1")process.stderr.write(`[announcements] ${i}
|
|
564
|
+
`)}function Zt(i){if(!i)return null;if(i.type!=="tako"&&i.type!=="custom")return null;if(!i.baseUrl||!i.apiKey)return null;return{baseUrl:i.baseUrl.replace(/\/+$/,""),apiKey:i.apiKey}}async function h1(i,o){let n=`${i}/v1/announcements/popup`;try{let d=await fetch(n,{headers:{Authorization:`Bearer ${o}`},signal:AbortSignal.timeout(v1)});if(!d.ok)return Mi(`HTTP ${d.status} from ${n}\uFF08par \u53EF\u80FD\u672A\u90E8\u7F72\u65B0\u8DEF\u7531 /v1/announcements/popup\uFF09`),null;let u=(await d.json())?.announcement;if(!u)return Mi("\u8FD4\u56DE announcement=null\uFF08par \u540E\u53F0\u6CA1\u6709 published+popup=true \u7684\u516C\u544A\uFF09"),null;if(typeof u.id!=="string"||typeof u.title!=="string")return Mi(`payload \u7F3A id/title\uFF0C\u4E22\u5F03\uFF1A${JSON.stringify(u)}`),null;return Mi(`\u62C9\u5230\u516C\u544A id=${u.id} title=${u.title} popup_once=${!!u.popup_once}`),{id:u.id,title:u.title,content:u.content??"",type:u.type,popup_once:!!u.popup_once}}catch(d){return Mi(`fetch \u5931\u8D25\uFF1A${d instanceof Error?d.message:String(d)}`),null}}async function b1(i){return((await z()).seenAnnouncementIds??[]).includes(i)}async function L1(i){let o=await z(),n=o.seenAnnouncementIds??[];if(n.includes(i))return;let d=[...n,i];if(d.length>Vt)d.splice(0,d.length-Vt);o.seenAnnouncementIds=d,await K(o)}async function N1(){let i=Zt(await ei());if(i)return i;for(let o of await V()){let n=Zt(o);if(n)return n}return null}async function Ft(){let i=await N1();if(!i){Mi("\u8DF3\u8FC7\uFF1A\u6CA1\u6709\u53EF\u7528\u7684 tako/custom provider\uFF08apiKey + baseUrl\uFF09");return}Mi(`\u67E5\u8BE2\u516C\u544A\uFF1A${i.baseUrl}/v1/announcements/popup`);let o=await h1(i.baseUrl,i.apiKey);if(!o)return;if(o.popup_once&&await b1(o.id)){Mi(`\u5DF2\u5728 seenAnnouncementIds\uFF0C\u8DF3\u8FC7\uFF1A${o.id}`);return}if(Mi(`\u5F39\u7A97\uFF1A${o.id}`),await Hu(o),o.popup_once)await L1(o.id),Mi(`\u6807\u8BB0\u5DF2\u770B\u8FC7\uFF1A${o.id}`)}fo();async function Et(){await e0(),await u0(),await br(),await Promise.race([Td(await V()),new Promise((i)=>setTimeout(i,3000))]),await Ft()}async function _t(i){let o=oi(i.clientId);if(!o)return!1;O("menu_action",{action:"launch",client_id:i.clientId});let n=await Fn(i.clientId);if(!n)return L.warn(g("cli.noProvider")||"\u672A\u914D\u7F6E\u53EF\u7528\u7684\u670D\u52A1\u5546"),!1;let e=process.platform==="win32"&&!!process.env.TAKO_WINDOWS_HANDOFF_FILE,u=await Hn(o,{projectPath:i.projectPath,args:i.args,envVars:i.envVars,selectedOptionIds:i.selectedOptionIds,providerContext:n,relaunchTakoOnWindows:e});if(!u.success)return L.error(u.error||g("cli.launchFailed")),!1;if(e)return!0;return!1}async function Ut(){await Et();let i;while(!0){let o=await Kt(i);if(i=void 0,!o)break;if(o.type==="exit")break;if(o.type==="provider-login"){let d=Ii()==="zh",e=o.tool==="claude"?"Claude":"Codex";L.info(d?`\u6B63\u5728\u6253\u5F00 ${e} \u5B98\u65B9\u767B\u5F55\uFF0C\u8BF7\u5728\u6D4F\u89C8\u5668\u4E2D\u5B8C\u6210\u6388\u6743...`:`Opening ${e} login; complete authorization in the browser...`);let u=await ge(o.tool),r=await $e(o.tool,d),t=r.message;if(!r.ok&&u.error)t=u.error;else if(!r.ok&&!u.ok&&u.exitCode!=null)t=d?`${e} \u767B\u5F55\u672A\u5B8C\u6210\uFF08\u9000\u51FA\u7801 ${u.exitCode}\uFF09`:`${e} login did not complete (exit ${u.exitCode})`;if(r.ok)L.success(r.message);else L.warn(t);i={screen:"providers",message:r.ok?r.message:`! ${t}`};continue}if(o.type!=="launch")continue;if(await _t(o))process.exit(0)}}await ct(Ut);
|