hankweave 0.1.42
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/README.md +12 -0
- package/dist/index.js +461 -0
- package/dist/index.js.map +167 -0
- package/dist/shims/gemini/index.js +29 -0
- package/package.json +85 -0
- package/shims/gemini/index.js +29 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,461 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// @bun
|
|
3
|
+
import{createRequire as p8}from"node:module";var i8=Object.create;var{getPrototypeOf:o8,defineProperty:Hu,getOwnPropertyNames:Rd,getOwnPropertyDescriptor:d8}=Object,Sd=Object.prototype.hasOwnProperty;var _e=(t,e,u)=>{u=t!=null?i8(o8(t)):{};let a=e||!t||!t.__esModule?Hu(u,"default",{value:t,enumerable:!0}):u;for(let l of Rd(t))if(!Sd.call(a,l))Hu(a,l,{get:()=>t[l],enumerable:!0});return a},Ed=new WeakMap,Od=(t)=>{var e=Ed.get(t),u;if(e)return e;if(e=Hu({},"__esModule",{value:!0}),t&&typeof t==="object"||typeof t==="function")Rd(t).map((a)=>!Sd.call(e,a)&&Hu(e,a,{get:()=>t[a],enumerable:!(u=d8(t,a))||u.enumerable}));return Ed.set(t,e),e},H=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var zu=(t,e)=>{for(var u in e)Hu(t,u,{get:e[u],enumerable:!0,configurable:!0,set:(a)=>e[u]=()=>a})};var tt=(t,e)=>()=>(t&&(e=t(t=0)),e);var it=p8(import.meta.url);function Pd(t){return t.type==="assistant"&&t.message.model==="<synthetic>"&&t.message.content==="API Error: Request timed out."}function Cd(t){if(t.type==="assistant"){let e=t;if(e.message.model==="<synthetic>"&&Array.isArray(e.message.content)&&e.message.content.length===1&&e.message.content[0].type==="text"){let u=e.message.content[0].text;return u==="API Error: terminated"||u.includes("exceeded the")&&u.includes("output token maximum")}}if(t.type==="result"){let e=t;return e.is_error===!0&&typeof e.result==="string"&&e.result.includes("exceeded the")&&e.result.includes("output token maximum")}return!1}var z2=()=>{};var e1=H((yd)=>{Object.defineProperty(yd,"__esModule",{value:!0});yd.splitWhen=yd.flatten=void 0;function m8(t){return t.reduce((e,u)=>[].concat(e,u),[])}yd.flatten=m8;function n8(t,e){let u=[[]],a=0;for(let l of t)if(e(l))a++,u[a]=[];else u[a].push(l);return u}yd.splitWhen=n8});var l1=H((u1)=>{Object.defineProperty(u1,"__esModule",{value:!0});u1.isEnoentCodeError=void 0;function r8(t){return t.code==="ENOENT"}u1.isEnoentCodeError=r8});var p1=H((o1)=>{Object.defineProperty(o1,"__esModule",{value:!0});o1.createDirentFromStats=void 0;class i1{constructor(t,e){this.name=t,this.isBlockDevice=e.isBlockDevice.bind(e),this.isCharacterDevice=e.isCharacterDevice.bind(e),this.isDirectory=e.isDirectory.bind(e),this.isFIFO=e.isFIFO.bind(e),this.isFile=e.isFile.bind(e),this.isSocket=e.isSocket.bind(e),this.isSymbolicLink=e.isSymbolicLink.bind(e)}}function c8(t,e){return new i1(t,e)}o1.createDirentFromStats=c8});var x1=H((r1)=>{Object.defineProperty(r1,"__esModule",{value:!0});r1.convertPosixPathToPattern=r1.convertWindowsPathToPattern=r1.convertPathToPattern=r1.escapePosixPath=r1.escapeWindowsPath=r1.escape=r1.removeLeadingDotSegment=r1.makeAbsolute=r1.unixify=void 0;var x8=it("os"),I8=it("path"),m1=x8.platform()==="win32",w8=2,s8=/(\\?)([()*?[\]{|}]|^!|[!+@](?=\()|\\(?![!()*+?@[\]{|}]))/g,k8=/(\\?)([()[\]{}]|^!|[!+@](?=\())/g,f8=/^\\\\([.?])/,h8=/\\(?![!()+@[\]{}])/g;function g8(t){return t.replace(/\\/g,"/")}r1.unixify=g8;function B8(t,e){return I8.resolve(t,e)}r1.makeAbsolute=B8;function Q8(t){if(t.charAt(0)==="."){let e=t.charAt(1);if(e==="/"||e==="\\")return t.slice(w8)}return t}r1.removeLeadingDotSegment=Q8;r1.escape=m1?Vl:Yl;function Vl(t){return t.replace(k8,"\\$2")}r1.escapeWindowsPath=Vl;function Yl(t){return t.replace(s8,"\\$2")}r1.escapePosixPath=Yl;r1.convertPathToPattern=m1?n1:_1;function n1(t){return Vl(t).replace(f8,"//$1").replace(h8,"/")}r1.convertWindowsPathToPattern=n1;function _1(t){return Yl(t)}r1.convertPosixPathToPattern=_1});var w1=H((FJ,I1)=>{/*!
|
|
4
|
+
* is-extglob <https://github.com/jonschlinkert/is-extglob>
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) 2014-2016, Jon Schlinkert.
|
|
7
|
+
* Licensed under the MIT License.
|
|
8
|
+
*/I1.exports=function(e){if(typeof e!=="string"||e==="")return!1;var u;while(u=/(\\).|([@?!+*]\(.*\))/g.exec(e)){if(u[2])return!0;e=e.slice(u.index+u[0].length)}return!1}});var f1=H((AJ,k1)=>{/*!
|
|
9
|
+
* is-glob <https://github.com/jonschlinkert/is-glob>
|
|
10
|
+
*
|
|
11
|
+
* Copyright (c) 2014-2017, Jon Schlinkert.
|
|
12
|
+
* Released under the MIT License.
|
|
13
|
+
*/var V8=w1(),s1={"{":"}","(":")","[":"]"},Y8=function(t){if(t[0]==="!")return!0;var e=0,u=-2,a=-2,l=-2,i=-2,o=-2;while(e<t.length){if(t[e]==="*")return!0;if(t[e+1]==="?"&&/[\].+)]/.test(t[e]))return!0;if(a!==-1&&t[e]==="["&&t[e+1]!=="]"){if(a<e)a=t.indexOf("]",e);if(a>e){if(o===-1||o>a)return!0;if(o=t.indexOf("\\",e),o===-1||o>a)return!0}}if(l!==-1&&t[e]==="{"&&t[e+1]!=="}"){if(l=t.indexOf("}",e),l>e){if(o=t.indexOf("\\",e),o===-1||o>l)return!0}}if(i!==-1&&t[e]==="("&&t[e+1]==="?"&&/[:!=]/.test(t[e+2])&&t[e+3]!==")"){if(i=t.indexOf(")",e),i>e){if(o=t.indexOf("\\",e),o===-1||o>i)return!0}}if(u!==-1&&t[e]==="("&&t[e+1]!=="|"){if(u<e)u=t.indexOf("|",e);if(u!==-1&&t[u+1]!==")"){if(i=t.indexOf(")",u),i>u){if(o=t.indexOf("\\",u),o===-1||o>i)return!0}}}if(t[e]==="\\"){var d=t[e+1];e+=2;var m=s1[d];if(m){var _=t.indexOf(m,e);if(_!==-1)e=_+1}if(t[e]==="!")return!0}else e++}return!1},H8=function(t){if(t[0]==="!")return!0;var e=0;while(e<t.length){if(/[*?{}()[\]]/.test(t[e]))return!0;if(t[e]==="\\"){var u=t[e+1];e+=2;var a=s1[u];if(a){var l=t.indexOf(a,e);if(l!==-1)e=l+1}if(t[e]==="!")return!0}else e++}return!1};k1.exports=function(e,u){if(typeof e!=="string"||e==="")return!1;if(V8(e))return!0;var a=Y8;if(u&&u.strict===!1)a=H8;return a(e)}});var g1=H((jJ,h1)=>{var z8=f1(),b8=it("path").posix.dirname,M8=it("os").platform()==="win32",Hl="/",U8=/\\/g,F8=/[\{\[].*[\}\]]$/,A8=/(^|[^\\])([\{\[]|\([^\)]+$)/,j8=/\\([\!\*\?\|\[\]\(\)\{\}])/g;h1.exports=function(e,u){var a=Object.assign({flipBackslashes:!0},u);if(a.flipBackslashes&&M8&&e.indexOf(Hl)<0)e=e.replace(U8,Hl);if(F8.test(e))e+=Hl;e+="a";do e=b8(e);while(z8(e)||A8.test(e));return e.replace(j8,"$1")}});var b2=H((D8)=>{D8.isInteger=(t)=>{if(typeof t==="number")return Number.isInteger(t);if(typeof t==="string"&&t.trim()!=="")return Number.isInteger(Number(t));return!1};D8.find=(t,e)=>t.nodes.find((u)=>u.type===e);D8.exceedsLimit=(t,e,u=1,a)=>{if(a===!1)return!1;if(!D8.isInteger(t)||!D8.isInteger(e))return!1;return(Number(e)-Number(t))/Number(u)>=a};D8.escapeNode=(t,e=0,u)=>{let a=t.nodes[e];if(!a)return;if(u&&a.type===u||a.type==="open"||a.type==="close"){if(a.escaped!==!0)a.value="\\"+a.value,a.escaped=!0}};D8.encloseBrace=(t)=>{if(t.type!=="brace")return!1;if(t.commas>>0+t.ranges>>0===0)return t.invalid=!0,!0;return!1};D8.isInvalidBrace=(t)=>{if(t.type!=="brace")return!1;if(t.invalid===!0||t.dollar)return!0;if(t.commas>>0+t.ranges>>0===0)return t.invalid=!0,!0;if(t.open!==!0||t.close!==!0)return t.invalid=!0,!0;return!1};D8.isOpenOrClose=(t)=>{if(t.type==="open"||t.type==="close")return!0;return t.open===!0||t.close===!0};D8.reduce=(t)=>t.reduce((e,u)=>{if(u.type==="text")e.push(u.value);if(u.type==="range")u.type="text";return e},[]);D8.flatten=(...t)=>{let e=[],u=(a)=>{for(let l=0;l<a.length;l++){let i=a[l];if(Array.isArray(i)){u(i);continue}if(i!==void 0)e.push(i)}return e};return u(t),e}});var M2=H((NJ,Q1)=>{var B1=b2();Q1.exports=(t,e={})=>{let u=(a,l={})=>{let i=e.escapeInvalid&&B1.isInvalidBrace(l),o=a.invalid===!0&&e.escapeInvalid===!0,d="";if(a.value){if((i||o)&&B1.isOpenOrClose(a))return"\\"+a.value;return a.value}if(a.value)return a.value;if(a.nodes)for(let m of a.nodes)d+=u(m);return d};return u(t)}});var q1=H((LJ,v1)=>{/*!
|
|
14
|
+
* is-number <https://github.com/jonschlinkert/is-number>
|
|
15
|
+
*
|
|
16
|
+
* Copyright (c) 2014-present, Jon Schlinkert.
|
|
17
|
+
* Released under the MIT License.
|
|
18
|
+
*/v1.exports=function(t){if(typeof t==="number")return t-t===0;if(typeof t==="string"&&t.trim()!=="")return Number.isFinite?Number.isFinite(+t):isFinite(+t);return!1}});var H1=H((ZJ,Y1)=>{/*!
|
|
19
|
+
* to-regex-range <https://github.com/micromatch/to-regex-range>
|
|
20
|
+
*
|
|
21
|
+
* Copyright (c) 2015-present, Jon Schlinkert.
|
|
22
|
+
* Released under the MIT License.
|
|
23
|
+
*/var G1=q1(),I0=(t,e,u)=>{if(G1(t)===!1)throw TypeError("toRegexRange: expected the first argument to be a number");if(e===void 0||t===e)return String(t);if(G1(e)===!1)throw TypeError("toRegexRange: expected the second argument to be a number.");let a={relaxZeros:!0,...u};if(typeof a.strictZeros==="boolean")a.relaxZeros=a.strictZeros===!1;let l=String(a.relaxZeros),i=String(a.shorthand),o=String(a.capture),d=String(a.wrap),m=t+":"+e+"="+l+i+o+d;if(I0.cache.hasOwnProperty(m))return I0.cache[m].result;let _=Math.min(t,e),n=Math.max(t,e);if(Math.abs(_-n)===1){let s=t+"|"+e;if(a.capture)return`(${s})`;if(a.wrap===!1)return s;return`(?:${s})`}let r=V1(t)||V1(e),c={min:t,max:e,a:_,b:n},x=[],I=[];if(r)c.isPadded=r,c.maxLen=String(c.max).length;if(_<0){let s=n<0?Math.abs(n):1;I=$1(s,Math.abs(_),c,a),_=c.a=0}if(n>=0)x=$1(_,n,c,a);if(c.negatives=I,c.positives=x,c.result=P8(I,x,a),a.capture===!0)c.result=`(${c.result})`;else if(a.wrap!==!1&&x.length+I.length>1)c.result=`(?:${c.result})`;return I0.cache[m]=c,c.result};function P8(t,e,u){let a=bl(t,e,"-",!1,u)||[],l=bl(e,t,"",!1,u)||[],i=bl(t,e,"-?",!0,u)||[];return a.concat(i).concat(l).join("|")}function C8(t,e){let u=1,a=1,l=J1(t,u),i=new Set([e]);while(t<=l&&l<=e)i.add(l),u+=1,l=J1(t,u);l=K1(e+1,a)-1;while(t<l&&l<=e)i.add(l),a+=1,l=K1(e+1,a)-1;return i=[...i],i.sort(e6),i}function y8(t,e,u){if(t===e)return{pattern:t,count:[],digits:0};let a=t6(t,e),l=a.length,i="",o=0;for(let d=0;d<l;d++){let[m,_]=a[d];if(m===_)i+=m;else if(m!=="0"||_!=="9")i+=u6(m,_,u);else o++}if(o)i+=u.shorthand===!0?"\\d":"[0-9]";return{pattern:i,count:[o],digits:l}}function $1(t,e,u,a){let l=C8(t,e),i=[],o=t,d;for(let m=0;m<l.length;m++){let _=l[m],n=y8(String(o),String(_),a),r="";if(!u.isPadded&&d&&d.pattern===n.pattern){if(d.count.length>1)d.count.pop();d.count.push(n.count[0]),d.string=d.pattern+W1(d.count),o=_+1;continue}if(u.isPadded)r=a6(_,u,a);n.string=r+n.pattern+W1(n.count),i.push(n),o=_+1,d=n}return i}function bl(t,e,u,a,l){let i=[];for(let o of t){let{string:d}=o;if(!a&&!X1(e,"string",d))i.push(u+d);if(a&&X1(e,"string",d))i.push(u+d)}return i}function t6(t,e){let u=[];for(let a=0;a<t.length;a++)u.push([t[a],e[a]]);return u}function e6(t,e){return t>e?1:e>t?-1:0}function X1(t,e,u){return t.some((a)=>a[e]===u)}function J1(t,e){return Number(String(t).slice(0,-e)+"9".repeat(e))}function K1(t,e){return t-t%Math.pow(10,e)}function W1(t){let[e=0,u=""]=t;if(u||e>1)return`{${e+(u?","+u:"")}}`;return""}function u6(t,e,u){return`[${t}${e-t===1?"":"-"}${e}]`}function V1(t){return/^-?(0+)\d/.test(t)}function a6(t,e,u){if(!e.isPadded)return t;let a=Math.abs(e.maxLen-String(t).length),l=u.relaxZeros!==!1;switch(a){case 0:return"";case 1:return l?"0?":"0";case 2:return l?"0{0,2}":"00";default:return l?`0{0,${a}}`:`0{${a}}`}}I0.cache={};I0.clearCache=()=>I0.cache={};Y1.exports=I0});var Fl=H((TJ,j1)=>{/*!
|
|
24
|
+
* fill-range <https://github.com/jonschlinkert/fill-range>
|
|
25
|
+
*
|
|
26
|
+
* Copyright (c) 2014-present, Jon Schlinkert.
|
|
27
|
+
* Licensed under the MIT License.
|
|
28
|
+
*/var l6=it("util"),b1=H1(),z1=(t)=>t!==null&&typeof t==="object"&&!Array.isArray(t),i6=(t)=>{return(e)=>t===!0?Number(e):String(e)},Ml=(t)=>{return typeof t==="number"||typeof t==="string"&&t!==""},bu=(t)=>Number.isInteger(+t),Ul=(t)=>{let e=`${t}`,u=-1;if(e[0]==="-")e=e.slice(1);if(e==="0")return!1;while(e[++u]==="0");return u>0},o6=(t,e,u)=>{if(typeof t==="string"||typeof e==="string")return!0;return u.stringify===!0},d6=(t,e,u)=>{if(e>0){let a=t[0]==="-"?"-":"";if(a)t=t.slice(1);t=a+t.padStart(a?e-1:e,"0")}if(u===!1)return String(t);return t},F2=(t,e)=>{let u=t[0]==="-"?"-":"";if(u)t=t.slice(1),e--;while(t.length<e)t="0"+t;return u?"-"+t:t},p6=(t,e,u)=>{t.negatives.sort((d,m)=>d<m?-1:d>m?1:0),t.positives.sort((d,m)=>d<m?-1:d>m?1:0);let a=e.capture?"":"?:",l="",i="",o;if(t.positives.length)l=t.positives.map((d)=>F2(String(d),u)).join("|");if(t.negatives.length)i=`-(${a}${t.negatives.map((d)=>F2(String(d),u)).join("|")})`;if(l&&i)o=`${l}|${i}`;else o=l||i;if(e.wrap)return`(${a}${o})`;return o},M1=(t,e,u,a)=>{if(u)return b1(t,e,{wrap:!1,...a});let l=String.fromCharCode(t);if(t===e)return l;let i=String.fromCharCode(e);return`[${l}-${i}]`},U1=(t,e,u)=>{if(Array.isArray(t)){let a=u.wrap===!0,l=u.capture?"":"?:";return a?`(${l}${t.join("|")})`:t.join("|")}return b1(t,e,u)},F1=(...t)=>{return RangeError("Invalid range arguments: "+l6.inspect(...t))},A1=(t,e,u)=>{if(u.strictRanges===!0)throw F1([t,e]);return[]},m6=(t,e)=>{if(e.strictRanges===!0)throw TypeError(`Expected step "${t}" to be a number`);return[]},n6=(t,e,u=1,a={})=>{let l=Number(t),i=Number(e);if(!Number.isInteger(l)||!Number.isInteger(i)){if(a.strictRanges===!0)throw F1([t,e]);return[]}if(l===0)l=0;if(i===0)i=0;let o=l>i,d=String(t),m=String(e),_=String(u);u=Math.max(Math.abs(u),1);let n=Ul(d)||Ul(m)||Ul(_),r=n?Math.max(d.length,m.length,_.length):0,c=n===!1&&o6(t,e,a)===!1,x=a.transform||i6(c);if(a.toRegex&&u===1)return M1(F2(t,r),F2(e,r),!0,a);let I={negatives:[],positives:[]},s=(f)=>I[f<0?"negatives":"positives"].push(Math.abs(f)),k=[],g=0;while(o?l>=i:l<=i){if(a.toRegex===!0&&u>1)s(l);else k.push(d6(x(l,g),r,c));l=o?l-u:l+u,g++}if(a.toRegex===!0)return u>1?p6(I,a,r):U1(k,null,{wrap:!1,...a});return k},_6=(t,e,u=1,a={})=>{if(!bu(t)&&t.length>1||!bu(e)&&e.length>1)return A1(t,e,a);let l=a.transform||((c)=>String.fromCharCode(c)),i=`${t}`.charCodeAt(0),o=`${e}`.charCodeAt(0),d=i>o,m=Math.min(i,o),_=Math.max(i,o);if(a.toRegex&&u===1)return M1(m,_,!1,a);let n=[],r=0;while(d?i>=o:i<=o)n.push(l(i,r)),i=d?i-u:i+u,r++;if(a.toRegex===!0)return U1(n,null,{wrap:!1,options:a});return n},U2=(t,e,u,a={})=>{if(e==null&&Ml(t))return[t];if(!Ml(t)||!Ml(e))return A1(t,e,a);if(typeof u==="function")return U2(t,e,1,{transform:u});if(z1(u))return U2(t,e,0,u);let l={...a};if(l.capture===!0)l.wrap=!0;if(u=u||l.step||1,!bu(u)){if(u!=null&&!z1(u))return m6(u,l);return U2(t,e,1,u)}if(bu(t)&&bu(e))return n6(t,e,u,l);return _6(t,e,Math.max(Math.abs(u),1),l)};j1.exports=U2});var L1=H((EJ,N1)=>{var r6=Fl(),D1=b2(),c6=(t,e={})=>{let u=(a,l={})=>{let i=D1.isInvalidBrace(l),o=a.invalid===!0&&e.escapeInvalid===!0,d=i===!0||o===!0,m=e.escapeInvalid===!0?"\\":"",_="";if(a.isOpen===!0)return m+a.value;if(a.isClose===!0)return console.log("node.isClose",m,a.value),m+a.value;if(a.type==="open")return d?m+a.value:"(";if(a.type==="close")return d?m+a.value:")";if(a.type==="comma")return a.prev.type==="comma"?"":d?a.value:"|";if(a.value)return a.value;if(a.nodes&&a.ranges>0){let n=D1.reduce(a.nodes),r=r6(...n,{...e,wrap:!1,toRegex:!0,strictZeros:!0});if(r.length!==0)return n.length>1&&r.length>1?`(${r})`:r}if(a.nodes)for(let n of a.nodes)_+=u(n,a);return _};return u(t)};N1.exports=c6});var E1=H((RJ,T1)=>{var x6=Fl(),Z1=M2(),L0=b2(),w0=(t="",e="",u=!1)=>{let a=[];if(t=[].concat(t),e=[].concat(e),!e.length)return t;if(!t.length)return u?L0.flatten(e).map((l)=>`{${l}}`):e;for(let l of t)if(Array.isArray(l))for(let i of l)a.push(w0(i,e,u));else for(let i of e){if(u===!0&&typeof i==="string")i=`{${i}}`;a.push(Array.isArray(i)?w0(l,i,u):l+i)}return L0.flatten(a)},I6=(t,e={})=>{let u=e.rangeLimit===void 0?1000:e.rangeLimit,a=(l,i={})=>{l.queue=[];let o=i,d=i.queue;while(o.type!=="brace"&&o.type!=="root"&&o.parent)o=o.parent,d=o.queue;if(l.invalid||l.dollar){d.push(w0(d.pop(),Z1(l,e)));return}if(l.type==="brace"&&l.invalid!==!0&&l.nodes.length===2){d.push(w0(d.pop(),["{}"]));return}if(l.nodes&&l.ranges>0){let r=L0.reduce(l.nodes);if(L0.exceedsLimit(...r,e.step,u))throw RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.");let c=x6(...r,e);if(c.length===0)c=Z1(l,e);d.push(w0(d.pop(),c)),l.nodes=[];return}let m=L0.encloseBrace(l),_=l.queue,n=l;while(n.type!=="brace"&&n.type!=="root"&&n.parent)n=n.parent,_=n.queue;for(let r=0;r<l.nodes.length;r++){let c=l.nodes[r];if(c.type==="comma"&&l.type==="brace"){if(r===1)_.push("");_.push("");continue}if(c.type==="close"){d.push(w0(d.pop(),_,m));continue}if(c.value&&c.type!=="open"){_.push(w0(_.pop(),c.value));continue}if(c.nodes)a(c,l)}return _};return L0.flatten(a(t))};T1.exports=I6});var S1=H((SJ,R1)=>{R1.exports={MAX_LENGTH:1e4,CHAR_0:"0",CHAR_9:"9",CHAR_UPPERCASE_A:"A",CHAR_LOWERCASE_A:"a",CHAR_UPPERCASE_Z:"Z",CHAR_LOWERCASE_Z:"z",CHAR_LEFT_PARENTHESES:"(",CHAR_RIGHT_PARENTHESES:")",CHAR_ASTERISK:"*",CHAR_AMPERSAND:"&",CHAR_AT:"@",CHAR_BACKSLASH:"\\",CHAR_BACKTICK:"`",CHAR_CARRIAGE_RETURN:"\r",CHAR_CIRCUMFLEX_ACCENT:"^",CHAR_COLON:":",CHAR_COMMA:",",CHAR_DOLLAR:"$",CHAR_DOT:".",CHAR_DOUBLE_QUOTE:'"',CHAR_EQUAL:"=",CHAR_EXCLAMATION_MARK:"!",CHAR_FORM_FEED:"\f",CHAR_FORWARD_SLASH:"/",CHAR_HASH:"#",CHAR_HYPHEN_MINUS:"-",CHAR_LEFT_ANGLE_BRACKET:"<",CHAR_LEFT_CURLY_BRACE:"{",CHAR_LEFT_SQUARE_BRACKET:"[",CHAR_LINE_FEED:`
|
|
29
|
+
`,CHAR_NO_BREAK_SPACE:" ",CHAR_PERCENT:"%",CHAR_PLUS:"+",CHAR_QUESTION_MARK:"?",CHAR_RIGHT_ANGLE_BRACKET:">",CHAR_RIGHT_CURLY_BRACE:"}",CHAR_RIGHT_SQUARE_BRACKET:"]",CHAR_SEMICOLON:";",CHAR_SINGLE_QUOTE:"'",CHAR_SPACE:" ",CHAR_TAB:"\t",CHAR_UNDERSCORE:"_",CHAR_VERTICAL_LINE:"|",CHAR_ZERO_WIDTH_NOBREAK_SPACE:"\uFEFF"}});var tp=H((OJ,y1)=>{var w6=M2(),{MAX_LENGTH:O1,CHAR_BACKSLASH:Al,CHAR_BACKTICK:s6,CHAR_COMMA:k6,CHAR_DOT:f6,CHAR_LEFT_PARENTHESES:h6,CHAR_RIGHT_PARENTHESES:g6,CHAR_LEFT_CURLY_BRACE:B6,CHAR_RIGHT_CURLY_BRACE:Q6,CHAR_LEFT_SQUARE_BRACKET:P1,CHAR_RIGHT_SQUARE_BRACKET:C1,CHAR_DOUBLE_QUOTE:v6,CHAR_SINGLE_QUOTE:q6,CHAR_NO_BREAK_SPACE:G6,CHAR_ZERO_WIDTH_NOBREAK_SPACE:$6}=S1(),X6=(t,e={})=>{if(typeof t!=="string")throw TypeError("Expected a string");let u=e||{},a=typeof u.maxLength==="number"?Math.min(O1,u.maxLength):O1;if(t.length>a)throw SyntaxError(`Input length (${t.length}), exceeds max characters (${a})`);let l={type:"root",input:t,nodes:[]},i=[l],o=l,d=l,m=0,_=t.length,n=0,r=0,c,x=()=>t[n++],I=(s)=>{if(s.type==="text"&&d.type==="dot")d.type="text";if(d&&d.type==="text"&&s.type==="text"){d.value+=s.value;return}return o.nodes.push(s),s.parent=o,s.prev=d,d=s,s};I({type:"bos"});while(n<_){if(o=i[i.length-1],c=x(),c===$6||c===G6)continue;if(c===Al){I({type:"text",value:(e.keepEscaping?c:"")+x()});continue}if(c===C1){I({type:"text",value:"\\"+c});continue}if(c===P1){m++;let s;while(n<_&&(s=x())){if(c+=s,s===P1){m++;continue}if(s===Al){c+=x();continue}if(s===C1){if(m--,m===0)break}}I({type:"text",value:c});continue}if(c===h6){o=I({type:"paren",nodes:[]}),i.push(o),I({type:"text",value:c});continue}if(c===g6){if(o.type!=="paren"){I({type:"text",value:c});continue}o=i.pop(),I({type:"text",value:c}),o=i[i.length-1];continue}if(c===v6||c===q6||c===s6){let s=c,k;if(e.keepQuotes!==!0)c="";while(n<_&&(k=x())){if(k===Al){c+=k+x();continue}if(k===s){if(e.keepQuotes===!0)c+=k;break}c+=k}I({type:"text",value:c});continue}if(c===B6){r++;let k={type:"brace",open:!0,close:!1,dollar:d.value&&d.value.slice(-1)==="$"||o.dollar===!0,depth:r,commas:0,ranges:0,nodes:[]};o=I(k),i.push(o),I({type:"open",value:c});continue}if(c===Q6){if(o.type!=="brace"){I({type:"text",value:c});continue}let s="close";o=i.pop(),o.close=!0,I({type:s,value:c}),r--,o=i[i.length-1];continue}if(c===k6&&r>0){if(o.ranges>0){o.ranges=0;let s=o.nodes.shift();o.nodes=[s,{type:"text",value:w6(o)}]}I({type:"comma",value:c}),o.commas++;continue}if(c===f6&&r>0&&o.commas===0){let s=o.nodes;if(r===0||s.length===0){I({type:"text",value:c});continue}if(d.type==="dot"){if(o.range=[],d.value+=c,d.type="range",o.nodes.length!==3&&o.nodes.length!==5){o.invalid=!0,o.ranges=0,d.type="text";continue}o.ranges++,o.args=[];continue}if(d.type==="range"){s.pop();let k=s[s.length-1];k.value+=d.value+c,d=k,o.ranges--;continue}I({type:"dot",value:c});continue}I({type:"text",value:c})}do if(o=i.pop(),o.type!=="root"){o.nodes.forEach((g)=>{if(!g.nodes){if(g.type==="open")g.isOpen=!0;if(g.type==="close")g.isClose=!0;if(!g.nodes)g.type="text";g.invalid=!0}});let s=i[i.length-1],k=s.nodes.indexOf(o);s.nodes.splice(k,1,...o.nodes)}while(i.length>0);return I({type:"eos"}),l};y1.exports=X6});var ap=H((PJ,up)=>{var ep=M2(),J6=L1(),K6=E1(),W6=tp(),Rt=(t,e={})=>{let u=[];if(Array.isArray(t))for(let a of t){let l=Rt.create(a,e);if(Array.isArray(l))u.push(...l);else u.push(l)}else u=[].concat(Rt.create(t,e));if(e&&e.expand===!0&&e.nodupes===!0)u=[...new Set(u)];return u};Rt.parse=(t,e={})=>W6(t,e);Rt.stringify=(t,e={})=>{if(typeof t==="string")return ep(Rt.parse(t,e),e);return ep(t,e)};Rt.compile=(t,e={})=>{if(typeof t==="string")t=Rt.parse(t,e);return J6(t,e)};Rt.expand=(t,e={})=>{if(typeof t==="string")t=Rt.parse(t,e);let u=K6(t,e);if(e.noempty===!0)u=u.filter(Boolean);if(e.nodupes===!0)u=[...new Set(u)];return u};Rt.create=(t,e={})=>{if(t===""||t.length<3)return[t];return e.expand!==!0?Rt.compile(t,e):Rt.expand(t,e)};up.exports=Rt});var Mu=H((CJ,ip)=>{var V6=it("path"),lp={DOT_LITERAL:"\\.",PLUS_LITERAL:"\\+",QMARK_LITERAL:"\\?",SLASH_LITERAL:"\\/",ONE_CHAR:"(?=.)",QMARK:"[^/]",END_ANCHOR:"(?:\\/|$)",DOTS_SLASH:"\\.{1,2}(?:\\/|$)",NO_DOT:"(?!\\.)",NO_DOTS:"(?!(?:^|\\/)\\.{1,2}(?:\\/|$))",NO_DOT_SLASH:"(?!\\.{0,1}(?:\\/|$))",NO_DOTS_SLASH:"(?!\\.{1,2}(?:\\/|$))",QMARK_NO_DOT:"[^.\\/]",STAR:"[^/]*?",START_ANCHOR:"(?:^|\\/)"},Y6={...lp,SLASH_LITERAL:"[\\\\/]",QMARK:"[^\\\\/]",STAR:"[^\\\\/]*?",DOTS_SLASH:"\\.{1,2}(?:[\\\\/]|$)",NO_DOT:"(?!\\.)",NO_DOTS:"(?!(?:^|[\\\\/])\\.{1,2}(?:[\\\\/]|$))",NO_DOT_SLASH:"(?!\\.{0,1}(?:[\\\\/]|$))",NO_DOTS_SLASH:"(?!\\.{1,2}(?:[\\\\/]|$))",QMARK_NO_DOT:"[^.\\\\/]",START_ANCHOR:"(?:^|[\\\\/])",END_ANCHOR:"(?:[\\\\/]|$)"},H6={alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"\\x21-\\x7E",lower:"a-z",print:"\\x20-\\x7E ",punct:"\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",space:" \\t\\r\\n\\v\\f",upper:"A-Z",word:"A-Za-z0-9_",xdigit:"A-Fa-f0-9"};ip.exports={MAX_LENGTH:65536,POSIX_REGEX_SOURCE:H6,REGEX_BACKSLASH:/\\(?![*+?^${}(|)[\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\].,$*+?^{}()|\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\?)((\W)(\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\[.*?[^\\]\]|\\(?=.))/g,REPLACEMENTS:{"***":"*","**/**":"**","**/**/**":"**"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:V6.sep,extglobChars(t){return{"!":{type:"negate",open:"(?:(?!(?:",close:`))${t.STAR})`},"?":{type:"qmark",open:"(?:",close:")?"},"+":{type:"plus",open:"(?:",close:")+"},"*":{type:"star",open:"(?:",close:")*"},"@":{type:"at",open:"(?:",close:")"}}},globChars(t){return t===!0?Y6:lp}}});var Uu=H((j6)=>{var z6=it("path"),b6=process.platform==="win32",{REGEX_BACKSLASH:M6,REGEX_REMOVE_BACKSLASH:U6,REGEX_SPECIAL_CHARS:F6,REGEX_SPECIAL_CHARS_GLOBAL:A6}=Mu();j6.isObject=(t)=>t!==null&&typeof t==="object"&&!Array.isArray(t);j6.hasRegexChars=(t)=>F6.test(t);j6.isRegexChar=(t)=>t.length===1&&j6.hasRegexChars(t);j6.escapeRegex=(t)=>t.replace(A6,"\\$1");j6.toPosixSlashes=(t)=>t.replace(M6,"/");j6.removeBackslashes=(t)=>{return t.replace(U6,(e)=>{return e==="\\"?"":e})};j6.supportsLookbehinds=()=>{let t=process.version.slice(1).split(".").map(Number);if(t.length===3&&t[0]>=9||t[0]===8&&t[1]>=10)return!0;return!1};j6.isWindows=(t)=>{if(t&&typeof t.windows==="boolean")return t.windows;return b6===!0||z6.sep==="\\"};j6.escapeLast=(t,e,u)=>{let a=t.lastIndexOf(e,u);if(a===-1)return t;if(t[a-1]==="\\")return j6.escapeLast(t,e,a-1);return`${t.slice(0,a)}\\${t.slice(a)}`};j6.removePrefix=(t,e={})=>{let u=t;if(u.startsWith("./"))u=u.slice(2),e.prefix="./";return u};j6.wrapOutput=(t,e={},u={})=>{let a=u.contains?"":"^",l=u.contains?"":"$",i=`${a}(?:${t})${l}`;if(e.negated===!0)i=`(?:^(?!${i}).*$)`;return i}});var Ip=H((tK,xp)=>{var pp=Uu(),{CHAR_ASTERISK:jl,CHAR_AT:P6,CHAR_BACKWARD_SLASH:Fu,CHAR_COMMA:C6,CHAR_DOT:Dl,CHAR_EXCLAMATION_MARK:Nl,CHAR_FORWARD_SLASH:cp,CHAR_LEFT_CURLY_BRACE:Ll,CHAR_LEFT_PARENTHESES:Zl,CHAR_LEFT_SQUARE_BRACKET:y6,CHAR_PLUS:t7,CHAR_QUESTION_MARK:mp,CHAR_RIGHT_CURLY_BRACE:e7,CHAR_RIGHT_PARENTHESES:np,CHAR_RIGHT_SQUARE_BRACKET:u7}=Mu(),_p=(t)=>{return t===cp||t===Fu},rp=(t)=>{if(t.isPrefix!==!0)t.depth=t.isGlobstar?1/0:1},a7=(t,e)=>{let u=e||{},a=t.length-1,l=u.parts===!0||u.scanToEnd===!0,i=[],o=[],d=[],m=t,_=-1,n=0,r=0,c=!1,x=!1,I=!1,s=!1,k=!1,g=!1,f=!1,h=!1,B=!1,Q=!1,V=0,A,F,L={value:"",depth:0,isGlob:!1},y=()=>_>=a,G=()=>m.charCodeAt(_+1),pt=()=>{return A=F,m.charCodeAt(++_)};while(_<a){F=pt();let Wt;if(F===Fu){if(f=L.backslashes=!0,F=pt(),F===Ll)g=!0;continue}if(g===!0||F===Ll){V++;while(y()!==!0&&(F=pt())){if(F===Fu){f=L.backslashes=!0,pt();continue}if(F===Ll){V++;continue}if(g!==!0&&F===Dl&&(F=pt())===Dl){if(c=L.isBrace=!0,I=L.isGlob=!0,Q=!0,l===!0)continue;break}if(g!==!0&&F===C6){if(c=L.isBrace=!0,I=L.isGlob=!0,Q=!0,l===!0)continue;break}if(F===e7){if(V--,V===0){g=!1,c=L.isBrace=!0,Q=!0;break}}}if(l===!0)continue;break}if(F===cp){if(i.push(_),o.push(L),L={value:"",depth:0,isGlob:!1},Q===!0)continue;if(A===Dl&&_===n+1){n+=2;continue}r=_+1;continue}if(u.noext!==!0){if((F===t7||F===P6||F===jl||F===mp||F===Nl)===!0&&G()===Zl){if(I=L.isGlob=!0,s=L.isExtglob=!0,Q=!0,F===Nl&&_===n)B=!0;if(l===!0){while(y()!==!0&&(F=pt())){if(F===Fu){f=L.backslashes=!0,F=pt();continue}if(F===np){I=L.isGlob=!0,Q=!0;break}}continue}break}}if(F===jl){if(A===jl)k=L.isGlobstar=!0;if(I=L.isGlob=!0,Q=!0,l===!0)continue;break}if(F===mp){if(I=L.isGlob=!0,Q=!0,l===!0)continue;break}if(F===y6){while(y()!==!0&&(Wt=pt())){if(Wt===Fu){f=L.backslashes=!0,pt();continue}if(Wt===u7){x=L.isBracket=!0,I=L.isGlob=!0,Q=!0;break}}if(l===!0)continue;break}if(u.nonegate!==!0&&F===Nl&&_===n){h=L.negated=!0,n++;continue}if(u.noparen!==!0&&F===Zl){if(I=L.isGlob=!0,l===!0){while(y()!==!0&&(F=pt())){if(F===Zl){f=L.backslashes=!0,F=pt();continue}if(F===np){Q=!0;break}}continue}break}if(I===!0){if(Q=!0,l===!0)continue;break}}if(u.noext===!0)s=!1,I=!1;let mt=m,Qe="",v="";if(n>0)Qe=m.slice(0,n),m=m.slice(n),r-=n;if(mt&&I===!0&&r>0)mt=m.slice(0,r),v=m.slice(r);else if(I===!0)mt="",v=m;else mt=m;if(mt&&mt!==""&&mt!=="/"&&mt!==m){if(_p(mt.charCodeAt(mt.length-1)))mt=mt.slice(0,-1)}if(u.unescape===!0){if(v)v=pp.removeBackslashes(v);if(mt&&f===!0)mt=pp.removeBackslashes(mt)}let q={prefix:Qe,input:t,start:n,base:mt,glob:v,isBrace:c,isBracket:x,isGlob:I,isExtglob:s,isGlobstar:k,negated:h,negatedExtglob:B};if(u.tokens===!0){if(q.maxDepth=0,!_p(F))o.push(L);q.tokens=o}if(u.parts===!0||u.tokens===!0){let Wt;for(let ut=0;ut<i.length;ut++){let ee=Wt?Wt+1:n,ue=i[ut],At=t.slice(ee,ue);if(u.tokens){if(ut===0&&n!==0)o[ut].isPrefix=!0,o[ut].value=Qe;else o[ut].value=At;rp(o[ut]),q.maxDepth+=o[ut].depth}if(ut!==0||At!=="")d.push(At);Wt=ue}if(Wt&&Wt+1<t.length){let ut=t.slice(Wt+1);if(d.push(ut),u.tokens)o[o.length-1].value=ut,rp(o[o.length-1]),q.maxDepth+=o[o.length-1].depth}q.slashes=i,q.parts=d}return q};xp.exports=a7});var kp=H((eK,sp)=>{var A2=Mu(),St=Uu(),{MAX_LENGTH:j2,POSIX_REGEX_SOURCE:l7,REGEX_NON_SPECIAL_CHARS:i7,REGEX_SPECIAL_CHARS_BACKREF:o7,REPLACEMENTS:wp}=A2,d7=(t,e)=>{if(typeof e.expandRange==="function")return e.expandRange(...t,e);t.sort();let u=`[${t.join("-")}]`;try{new RegExp(u)}catch(a){return t.map((l)=>St.escapeRegex(l)).join("..")}return u},Z0=(t,e)=>{return`Missing ${t}: "${e}" - use "\\\\${e}" to match literal characters`},Tl=(t,e)=>{if(typeof t!=="string")throw TypeError("Expected a string");t=wp[t]||t;let u={...e},a=typeof u.maxLength==="number"?Math.min(j2,u.maxLength):j2,l=t.length;if(l>a)throw SyntaxError(`Input length: ${l}, exceeds maximum allowed length: ${a}`);let i={type:"bos",value:"",output:u.prepend||""},o=[i],d=u.capture?"":"?:",m=St.isWindows(e),_=A2.globChars(m),n=A2.extglobChars(_),{DOT_LITERAL:r,PLUS_LITERAL:c,SLASH_LITERAL:x,ONE_CHAR:I,DOTS_SLASH:s,NO_DOT:k,NO_DOT_SLASH:g,NO_DOTS_SLASH:f,QMARK:h,QMARK_NO_DOT:B,STAR:Q,START_ANCHOR:V}=_,A=(j)=>{return`(${d}(?:(?!${V}${j.dot?s:r}).)*?)`},F=u.dot?"":k,L=u.dot?h:B,y=u.bash===!0?A(u):Q;if(u.capture)y=`(${y})`;if(typeof u.noext==="boolean")u.noextglob=u.noext;let G={input:t,index:-1,start:0,dot:u.dot===!0,consumed:"",output:"",prefix:"",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:o};t=St.removePrefix(t,G),l=t.length;let pt=[],mt=[],Qe=[],v=i,q,Wt=()=>G.index===l-1,ut=G.peek=(j=1)=>t[G.index+j],ee=G.advance=()=>t[++G.index]||"",ue=()=>t.slice(G.index+1),At=(j="",nt=0)=>{G.consumed+=j,G.index+=nt},j0=(j)=>{G.output+=j.output!=null?j.output:j.value,At(j.value)},Jl=()=>{let j=1;while(ut()==="!"&&(ut(2)!=="("||ut(3)==="?"))ee(),G.start++,j++;if(j%2===0)return!1;return G.negated=!0,G.start++,!0},D0=(j)=>{G[j]++,Qe.push(j)},He=(j)=>{G[j]--,Qe.pop()},P=(j)=>{if(v.type==="globstar"){let nt=G.braces>0&&(j.type==="comma"||j.type==="brace"),K=j.extglob===!0||pt.length&&(j.type==="pipe"||j.type==="paren");if(j.type!=="slash"&&j.type!=="paren"&&!nt&&!K)G.output=G.output.slice(0,-v.output.length),v.type="star",v.value="*",v.output=y,G.output+=v.output}if(pt.length&&j.type!=="paren")pt[pt.length-1].inner+=j.value;if(j.value||j.output)j0(j);if(v&&v.type==="text"&&j.type==="text"){v.value+=j.value,v.output=(v.output||"")+j.value;return}j.prev=v,o.push(j),v=j},N0=(j,nt)=>{let K={...n[nt],conditions:1,inner:""};K.prev=v,K.parens=G.parens,K.output=G.output;let W=(u.capture?"(":"")+K.open;D0("parens"),P({type:j,value:nt,output:G.output?"":I}),P({type:"paren",extglob:!0,value:ee(),output:W}),pt.push(K)},Kl=(j)=>{let nt=j.close+(u.capture?")":""),K;if(j.type==="negate"){let W=y;if(j.inner&&j.inner.length>1&&j.inner.includes("/"))W=A(u);if(W!==y||Wt()||/^\)+$/.test(ue()))nt=j.close=`)$))${W}`;if(j.inner.includes("*")&&(K=ue())&&/^\.[^\\/.]+$/.test(K)){let ct=Tl(K,{...e,fastpaths:!1}).output;nt=j.close=`)${ct})${W})`}if(j.prev.type==="bos")G.negatedExtglob=!0}P({type:"paren",extglob:!0,value:q,output:nt}),He("parens")};if(u.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(t)){let j=!1,nt=t.replace(o7,(K,W,ct,$,M,lt)=>{if($==="\\")return j=!0,K;if($==="?"){if(W)return W+$+(M?h.repeat(M.length):"");if(lt===0)return L+(M?h.repeat(M.length):"");return h.repeat(ct.length)}if($===".")return r.repeat(ct.length);if($==="*"){if(W)return W+$+(M?y:"");return y}return W?K:`\\${K}`});if(j===!0)if(u.unescape===!0)nt=nt.replace(/\\/g,"");else nt=nt.replace(/\\+/g,(K)=>{return K.length%2===0?"\\\\":K?"\\":""});if(nt===t&&u.contains===!0)return G.output=t,G;return G.output=St.wrapOutput(nt,G,e),G}while(!Wt()){if(q=ee(),q==="\x00")continue;if(q==="\\"){let K=ut();if(K==="/"&&u.bash!==!0)continue;if(K==="."||K===";")continue;if(!K){q+="\\",P({type:"text",value:q});continue}let W=/^\\+/.exec(ue()),ct=0;if(W&&W[0].length>2){if(ct=W[0].length,G.index+=ct,ct%2!==0)q+="\\"}if(u.unescape===!0)q=ee();else q+=ee();if(G.brackets===0){P({type:"text",value:q});continue}}if(G.brackets>0&&(q!=="]"||v.value==="["||v.value==="[^")){if(u.posix!==!1&&q===":"){let K=v.value.slice(1);if(K.includes("[")){if(v.posix=!0,K.includes(":")){let W=v.value.lastIndexOf("["),ct=v.value.slice(0,W),$=v.value.slice(W+2),M=l7[$];if(M){if(v.value=ct+M,G.backtrack=!0,ee(),!i.output&&o.indexOf(v)===1)i.output=I;continue}}}}if(q==="["&&ut()!==":"||q==="-"&&ut()==="]")q=`\\${q}`;if(q==="]"&&(v.value==="["||v.value==="[^"))q=`\\${q}`;if(u.posix===!0&&q==="!"&&v.value==="[")q="^";v.value+=q,j0({value:q});continue}if(G.quotes===1&&q!=='"'){q=St.escapeRegex(q),v.value+=q,j0({value:q});continue}if(q==='"'){if(G.quotes=G.quotes===1?0:1,u.keepQuotes===!0)P({type:"text",value:q});continue}if(q==="("){D0("parens"),P({type:"paren",value:q});continue}if(q===")"){if(G.parens===0&&u.strictBrackets===!0)throw SyntaxError(Z0("opening","("));let K=pt[pt.length-1];if(K&&G.parens===K.parens+1){Kl(pt.pop());continue}P({type:"paren",value:q,output:G.parens?")":"\\)"}),He("parens");continue}if(q==="["){if(u.nobracket===!0||!ue().includes("]")){if(u.nobracket!==!0&&u.strictBrackets===!0)throw SyntaxError(Z0("closing","]"));q=`\\${q}`}else D0("brackets");P({type:"bracket",value:q});continue}if(q==="]"){if(u.nobracket===!0||v&&v.type==="bracket"&&v.value.length===1){P({type:"text",value:q,output:`\\${q}`});continue}if(G.brackets===0){if(u.strictBrackets===!0)throw SyntaxError(Z0("opening","["));P({type:"text",value:q,output:`\\${q}`});continue}He("brackets");let K=v.value.slice(1);if(v.posix!==!0&&K[0]==="^"&&!K.includes("/"))q=`/${q}`;if(v.value+=q,j0({value:q}),u.literalBrackets===!1||St.hasRegexChars(K))continue;let W=St.escapeRegex(v.value);if(G.output=G.output.slice(0,-v.value.length),u.literalBrackets===!0){G.output+=W,v.value=W;continue}v.value=`(${d}${W}|${v.value})`,G.output+=v.value;continue}if(q==="{"&&u.nobrace!==!0){D0("braces");let K={type:"brace",value:q,output:"(",outputIndex:G.output.length,tokensIndex:G.tokens.length};mt.push(K),P(K);continue}if(q==="}"){let K=mt[mt.length-1];if(u.nobrace===!0||!K){P({type:"text",value:q,output:q});continue}let W=")";if(K.dots===!0){let ct=o.slice(),$=[];for(let M=ct.length-1;M>=0;M--){if(o.pop(),ct[M].type==="brace")break;if(ct[M].type!=="dots")$.unshift(ct[M].value)}W=d7($,u),G.backtrack=!0}if(K.comma!==!0&&K.dots!==!0){let ct=G.output.slice(0,K.outputIndex),$=G.tokens.slice(K.tokensIndex);K.value=K.output="\\{",q=W="\\}",G.output=ct;for(let M of $)G.output+=M.output||M.value}P({type:"brace",value:q,output:W}),He("braces"),mt.pop();continue}if(q==="|"){if(pt.length>0)pt[pt.length-1].conditions++;P({type:"text",value:q});continue}if(q===","){let K=q,W=mt[mt.length-1];if(W&&Qe[Qe.length-1]==="braces")W.comma=!0,K="|";P({type:"comma",value:q,output:K});continue}if(q==="/"){if(v.type==="dot"&&G.index===G.start+1){G.start=G.index+1,G.consumed="",G.output="",o.pop(),v=i;continue}P({type:"slash",value:q,output:x});continue}if(q==="."){if(G.braces>0&&v.type==="dot"){if(v.value===".")v.output=r;let K=mt[mt.length-1];v.type="dots",v.output+=q,v.value+=q,K.dots=!0;continue}if(G.braces+G.parens===0&&v.type!=="bos"&&v.type!=="slash"){P({type:"text",value:q,output:r});continue}P({type:"dot",value:q,output:r});continue}if(q==="?"){if(!(v&&v.value==="(")&&u.noextglob!==!0&&ut()==="("&&ut(2)!=="?"){N0("qmark",q);continue}if(v&&v.type==="paren"){let W=ut(),ct=q;if(W==="<"&&!St.supportsLookbehinds())throw Error("Node.js v10 or higher is required for regex lookbehinds");if(v.value==="("&&!/[!=<:]/.test(W)||W==="<"&&!/<([!=]|\w+>)/.test(ue()))ct=`\\${q}`;P({type:"text",value:q,output:ct});continue}if(u.dot!==!0&&(v.type==="slash"||v.type==="bos")){P({type:"qmark",value:q,output:B});continue}P({type:"qmark",value:q,output:h});continue}if(q==="!"){if(u.noextglob!==!0&&ut()==="("){if(ut(2)!=="?"||!/[!=<:]/.test(ut(3))){N0("negate",q);continue}}if(u.nonegate!==!0&&G.index===0){Jl();continue}}if(q==="+"){if(u.noextglob!==!0&&ut()==="("&&ut(2)!=="?"){N0("plus",q);continue}if(v&&v.value==="("||u.regex===!1){P({type:"plus",value:q,output:c});continue}if(v&&(v.type==="bracket"||v.type==="paren"||v.type==="brace")||G.parens>0){P({type:"plus",value:q});continue}P({type:"plus",value:c});continue}if(q==="@"){if(u.noextglob!==!0&&ut()==="("&&ut(2)!=="?"){P({type:"at",extglob:!0,value:q,output:""});continue}P({type:"text",value:q});continue}if(q!=="*"){if(q==="$"||q==="^")q=`\\${q}`;let K=i7.exec(ue());if(K)q+=K[0],G.index+=K[0].length;P({type:"text",value:q});continue}if(v&&(v.type==="globstar"||v.star===!0)){v.type="star",v.star=!0,v.value+=q,v.output=y,G.backtrack=!0,G.globstar=!0,At(q);continue}let j=ue();if(u.noextglob!==!0&&/^\([^?]/.test(j)){N0("star",q);continue}if(v.type==="star"){if(u.noglobstar===!0){At(q);continue}let K=v.prev,W=K.prev,ct=K.type==="slash"||K.type==="bos",$=W&&(W.type==="star"||W.type==="globstar");if(u.bash===!0&&(!ct||j[0]&&j[0]!=="/")){P({type:"star",value:q,output:""});continue}let M=G.braces>0&&(K.type==="comma"||K.type==="brace"),lt=pt.length&&(K.type==="pipe"||K.type==="paren");if(!ct&&K.type!=="paren"&&!M&&!lt){P({type:"star",value:q,output:""});continue}while(j.slice(0,3)==="/**"){let vt=t[G.index+4];if(vt&&vt!=="/")break;j=j.slice(3),At("/**",3)}if(K.type==="bos"&&Wt()){v.type="globstar",v.value+=q,v.output=A(u),G.output=v.output,G.globstar=!0,At(q);continue}if(K.type==="slash"&&K.prev.type!=="bos"&&!$&&Wt()){G.output=G.output.slice(0,-(K.output+v.output).length),K.output=`(?:${K.output}`,v.type="globstar",v.output=A(u)+(u.strictSlashes?")":"|$)"),v.value+=q,G.globstar=!0,G.output+=K.output+v.output,At(q);continue}if(K.type==="slash"&&K.prev.type!=="bos"&&j[0]==="/"){let vt=j[1]!==void 0?"|$":"";G.output=G.output.slice(0,-(K.output+v.output).length),K.output=`(?:${K.output}`,v.type="globstar",v.output=`${A(u)}${x}|${x}${vt})`,v.value+=q,G.output+=K.output+v.output,G.globstar=!0,At(q+ee()),P({type:"slash",value:"/",output:""});continue}if(K.type==="bos"&&j[0]==="/"){v.type="globstar",v.value+=q,v.output=`(?:^|${x}|${A(u)}${x})`,G.output=v.output,G.globstar=!0,At(q+ee()),P({type:"slash",value:"/",output:""});continue}G.output=G.output.slice(0,-v.output.length),v.type="globstar",v.output=A(u),v.value+=q,G.output+=v.output,G.globstar=!0,At(q);continue}let nt={type:"star",value:q,output:y};if(u.bash===!0){if(nt.output=".*?",v.type==="bos"||v.type==="slash")nt.output=F+nt.output;P(nt);continue}if(v&&(v.type==="bracket"||v.type==="paren")&&u.regex===!0){nt.output=q,P(nt);continue}if(G.index===G.start||v.type==="slash"||v.type==="dot"){if(v.type==="dot")G.output+=g,v.output+=g;else if(u.dot===!0)G.output+=f,v.output+=f;else G.output+=F,v.output+=F;if(ut()!=="*")G.output+=I,v.output+=I}P(nt)}while(G.brackets>0){if(u.strictBrackets===!0)throw SyntaxError(Z0("closing","]"));G.output=St.escapeLast(G.output,"["),He("brackets")}while(G.parens>0){if(u.strictBrackets===!0)throw SyntaxError(Z0("closing",")"));G.output=St.escapeLast(G.output,"("),He("parens")}while(G.braces>0){if(u.strictBrackets===!0)throw SyntaxError(Z0("closing","}"));G.output=St.escapeLast(G.output,"{"),He("braces")}if(u.strictSlashes!==!0&&(v.type==="star"||v.type==="bracket"))P({type:"maybe_slash",value:"",output:`${x}?`});if(G.backtrack===!0){G.output="";for(let j of G.tokens)if(G.output+=j.output!=null?j.output:j.value,j.suffix)G.output+=j.suffix}return G};Tl.fastpaths=(t,e)=>{let u={...e},a=typeof u.maxLength==="number"?Math.min(j2,u.maxLength):j2,l=t.length;if(l>a)throw SyntaxError(`Input length: ${l}, exceeds maximum allowed length: ${a}`);t=wp[t]||t;let i=St.isWindows(e),{DOT_LITERAL:o,SLASH_LITERAL:d,ONE_CHAR:m,DOTS_SLASH:_,NO_DOT:n,NO_DOTS:r,NO_DOTS_SLASH:c,STAR:x,START_ANCHOR:I}=A2.globChars(i),s=u.dot?r:n,k=u.dot?c:n,g=u.capture?"":"?:",f={negated:!1,prefix:""},h=u.bash===!0?".*?":x;if(u.capture)h=`(${h})`;let B=(F)=>{if(F.noglobstar===!0)return h;return`(${g}(?:(?!${I}${F.dot?_:o}).)*?)`},Q=(F)=>{switch(F){case"*":return`${s}${m}${h}`;case".*":return`${o}${m}${h}`;case"*.*":return`${s}${h}${o}${m}${h}`;case"*/*":return`${s}${h}${d}${m}${k}${h}`;case"**":return s+B(u);case"**/*":return`(?:${s}${B(u)}${d})?${k}${m}${h}`;case"**/*.*":return`(?:${s}${B(u)}${d})?${k}${h}${o}${m}${h}`;case"**/.*":return`(?:${s}${B(u)}${d})?${o}${m}${h}`;default:{let L=/^(.*?)\.(\w+)$/.exec(F);if(!L)return;let y=Q(L[1]);if(!y)return;return y+o+L[2]}}},V=St.removePrefix(t,f),A=Q(V);if(A&&u.strictSlashes!==!0)A+=`${d}?`;return A};sp.exports=Tl});var hp=H((uK,fp)=>{var p7=it("path"),m7=Ip(),El=kp(),Rl=Uu(),n7=Mu(),_7=(t)=>t&&typeof t==="object"&&!Array.isArray(t),gt=(t,e,u=!1)=>{if(Array.isArray(t)){let n=t.map((c)=>gt(c,e,u));return(c)=>{for(let x of n){let I=x(c);if(I)return I}return!1}}let a=_7(t)&&t.tokens&&t.input;if(t===""||typeof t!=="string"&&!a)throw TypeError("Expected pattern to be a non-empty string");let l=e||{},i=Rl.isWindows(e),o=a?gt.compileRe(t,e):gt.makeRe(t,e,!1,!0),d=o.state;delete o.state;let m=()=>!1;if(l.ignore){let n={...e,ignore:null,onMatch:null,onResult:null};m=gt(l.ignore,n,u)}let _=(n,r=!1)=>{let{isMatch:c,match:x,output:I}=gt.test(n,o,e,{glob:t,posix:i}),s={glob:t,state:d,regex:o,posix:i,input:n,output:I,match:x,isMatch:c};if(typeof l.onResult==="function")l.onResult(s);if(c===!1)return s.isMatch=!1,r?s:!1;if(m(n)){if(typeof l.onIgnore==="function")l.onIgnore(s);return s.isMatch=!1,r?s:!1}if(typeof l.onMatch==="function")l.onMatch(s);return r?s:!0};if(u)_.state=d;return _};gt.test=(t,e,u,{glob:a,posix:l}={})=>{if(typeof t!=="string")throw TypeError("Expected input to be a string");if(t==="")return{isMatch:!1,output:""};let i=u||{},o=i.format||(l?Rl.toPosixSlashes:null),d=t===a,m=d&&o?o(t):t;if(d===!1)m=o?o(t):t,d=m===a;if(d===!1||i.capture===!0)if(i.matchBase===!0||i.basename===!0)d=gt.matchBase(t,e,u,l);else d=e.exec(m);return{isMatch:Boolean(d),match:d,output:m}};gt.matchBase=(t,e,u,a=Rl.isWindows(u))=>{return(e instanceof RegExp?e:gt.makeRe(e,u)).test(p7.basename(t))};gt.isMatch=(t,e,u)=>gt(e,u)(t);gt.parse=(t,e)=>{if(Array.isArray(t))return t.map((u)=>gt.parse(u,e));return El(t,{...e,fastpaths:!1})};gt.scan=(t,e)=>m7(t,e);gt.compileRe=(t,e,u=!1,a=!1)=>{if(u===!0)return t.output;let l=e||{},i=l.contains?"":"^",o=l.contains?"":"$",d=`${i}(?:${t.output})${o}`;if(t&&t.negated===!0)d=`^(?!${d}).*$`;let m=gt.toRegex(d,e);if(a===!0)m.state=t;return m};gt.makeRe=(t,e={},u=!1,a=!1)=>{if(!t||typeof t!=="string")throw TypeError("Expected a non-empty string");let l={negated:!1,fastpaths:!0};if(e.fastpaths!==!1&&(t[0]==="."||t[0]==="*"))l.output=El.fastpaths(t,e);if(!l.output)l=El(t,e);return gt.compileRe(l,e,u,a)};gt.toRegex=(t,e)=>{try{let u=e||{};return new RegExp(t,u.flags||(u.nocase?"i":""))}catch(u){if(e&&e.debug===!0)throw u;return/$^/}};gt.constants=n7;fp.exports=gt});var Gp=H((aK,qp)=>{var Bp=it("util"),Qp=ap(),ve=hp(),Sl=Uu(),gp=(t)=>t===""||t==="./",vp=(t)=>{let e=t.indexOf("{");return e>-1&&t.indexOf("}",e)>-1},It=(t,e,u)=>{e=[].concat(e),t=[].concat(t);let a=new Set,l=new Set,i=new Set,o=0,d=(n)=>{if(i.add(n.output),u&&u.onResult)u.onResult(n)};for(let n=0;n<e.length;n++){let r=ve(String(e[n]),{...u,onResult:d},!0),c=r.state.negated||r.state.negatedExtglob;if(c)o++;for(let x of t){let I=r(x,!0);if(!(c?!I.isMatch:I.isMatch))continue;if(c)a.add(I.output);else a.delete(I.output),l.add(I.output)}}let _=(o===e.length?[...i]:[...l]).filter((n)=>!a.has(n));if(u&&_.length===0){if(u.failglob===!0)throw Error(`No matches found for "${e.join(", ")}"`);if(u.nonull===!0||u.nullglob===!0)return u.unescape?e.map((n)=>n.replace(/\\/g,"")):e}return _};It.match=It;It.matcher=(t,e)=>ve(t,e);It.isMatch=(t,e,u)=>ve(e,u)(t);It.any=It.isMatch;It.not=(t,e,u={})=>{e=[].concat(e).map(String);let a=new Set,l=[],o=new Set(It(t,e,{...u,onResult:(d)=>{if(u.onResult)u.onResult(d);l.push(d.output)}}));for(let d of l)if(!o.has(d))a.add(d);return[...a]};It.contains=(t,e,u)=>{if(typeof t!=="string")throw TypeError(`Expected a string: "${Bp.inspect(t)}"`);if(Array.isArray(e))return e.some((a)=>It.contains(t,a,u));if(typeof e==="string"){if(gp(t)||gp(e))return!1;if(t.includes(e)||t.startsWith("./")&&t.slice(2).includes(e))return!0}return It.isMatch(t,e,{...u,contains:!0})};It.matchKeys=(t,e,u)=>{if(!Sl.isObject(t))throw TypeError("Expected the first argument to be an object");let a=It(Object.keys(t),e,u),l={};for(let i of a)l[i]=t[i];return l};It.some=(t,e,u)=>{let a=[].concat(t);for(let l of[].concat(e)){let i=ve(String(l),u);if(a.some((o)=>i(o)))return!0}return!1};It.every=(t,e,u)=>{let a=[].concat(t);for(let l of[].concat(e)){let i=ve(String(l),u);if(!a.every((o)=>i(o)))return!1}return!0};It.all=(t,e,u)=>{if(typeof t!=="string")throw TypeError(`Expected a string: "${Bp.inspect(t)}"`);return[].concat(e).every((a)=>ve(a,u)(t))};It.capture=(t,e,u)=>{let a=Sl.isWindows(u),i=ve.makeRe(String(t),{...u,capture:!0}).exec(a?Sl.toPosixSlashes(e):e);if(i)return i.slice(1).map((o)=>o===void 0?"":o)};It.makeRe=(...t)=>ve.makeRe(...t);It.scan=(...t)=>ve.scan(...t);It.parse=(t,e)=>{let u=[];for(let a of[].concat(t||[]))for(let l of Qp(String(a),e))u.push(ve.parse(l,e));return u};It.braces=(t,e)=>{if(typeof t!=="string")throw TypeError("Expected a string");if(e&&e.nobrace===!0||!vp(t))return[t];return Qp(t,e)};It.braceExpand=(t,e)=>{if(typeof t!=="string")throw TypeError("Expected a string");return It.braces(t,{...e,expand:!0})};It.hasBraces=vp;qp.exports=It});var Up=H((bp)=>{Object.defineProperty(bp,"__esModule",{value:!0});bp.isAbsolute=bp.partitionAbsoluteAndRelative=bp.removeDuplicateSlashes=bp.matchAny=bp.convertPatternsToRe=bp.makeRe=bp.getPatternParts=bp.expandBraceExpansion=bp.expandPatternsWithBraceExpansion=bp.isAffectDepthOfReadingPattern=bp.endsWithSlashGlobStar=bp.hasGlobStar=bp.getBaseDirectory=bp.isPatternRelatedToParentDirectory=bp.getPatternsOutsideCurrentDirectory=bp.getPatternsInsideCurrentDirectory=bp.getPositivePatterns=bp.getNegativePatterns=bp.isPositivePattern=bp.isNegativePattern=bp.convertToNegativePattern=bp.convertToPositivePattern=bp.isDynamicPattern=bp.isStaticPattern=void 0;var $p=it("path"),r7=g1(),Ol=Gp(),Xp="**",c7="\\",x7=/[*?]|^!/,I7=/\[[^[]*]/,w7=/(?:^|[^!*+?@])\([^(]*\|[^|]*\)/,s7=/[!*+?@]\([^(]*\)/,k7=/,|\.\./,f7=/(?!^)\/{2,}/g;function Jp(t,e={}){return!Kp(t,e)}bp.isStaticPattern=Jp;function Kp(t,e={}){if(t==="")return!1;if(e.caseSensitiveMatch===!1||t.includes(c7))return!0;if(x7.test(t)||I7.test(t)||w7.test(t))return!0;if(e.extglob!==!1&&s7.test(t))return!0;if(e.braceExpansion!==!1&&h7(t))return!0;return!1}bp.isDynamicPattern=Kp;function h7(t){let e=t.indexOf("{");if(e===-1)return!1;let u=t.indexOf("}",e+1);if(u===-1)return!1;let a=t.slice(e,u);return k7.test(a)}function g7(t){return D2(t)?t.slice(1):t}bp.convertToPositivePattern=g7;function B7(t){return"!"+t}bp.convertToNegativePattern=B7;function D2(t){return t.startsWith("!")&&t[1]!=="("}bp.isNegativePattern=D2;function Wp(t){return!D2(t)}bp.isPositivePattern=Wp;function Q7(t){return t.filter(D2)}bp.getNegativePatterns=Q7;function v7(t){return t.filter(Wp)}bp.getPositivePatterns=v7;function q7(t){return t.filter((e)=>!Pl(e))}bp.getPatternsInsideCurrentDirectory=q7;function G7(t){return t.filter(Pl)}bp.getPatternsOutsideCurrentDirectory=G7;function Pl(t){return t.startsWith("..")||t.startsWith("./..")}bp.isPatternRelatedToParentDirectory=Pl;function $7(t){return r7(t,{flipBackslashes:!1})}bp.getBaseDirectory=$7;function X7(t){return t.includes(Xp)}bp.hasGlobStar=X7;function Vp(t){return t.endsWith("/"+Xp)}bp.endsWithSlashGlobStar=Vp;function J7(t){let e=$p.basename(t);return Vp(t)||Jp(e)}bp.isAffectDepthOfReadingPattern=J7;function K7(t){return t.reduce((e,u)=>{return e.concat(Yp(u))},[])}bp.expandPatternsWithBraceExpansion=K7;function Yp(t){let e=Ol.braces(t,{expand:!0,nodupes:!0,keepEscaping:!0});return e.sort((u,a)=>u.length-a.length),e.filter((u)=>u!=="")}bp.expandBraceExpansion=Yp;function W7(t,e){let{parts:u}=Ol.scan(t,Object.assign(Object.assign({},e),{parts:!0}));if(u.length===0)u=[t];if(u[0].startsWith("/"))u[0]=u[0].slice(1),u.unshift("");return u}bp.getPatternParts=W7;function Hp(t,e){return Ol.makeRe(t,e)}bp.makeRe=Hp;function V7(t,e){return t.map((u)=>Hp(u,e))}bp.convertPatternsToRe=V7;function Y7(t,e){return e.some((u)=>u.test(t))}bp.matchAny=Y7;function H7(t){return t.replace(f7,"/")}bp.removeDuplicateSlashes=H7;function z7(t){let e=[],u=[];for(let a of t)if(zp(a))e.push(a);else u.push(a);return[e,u]}bp.partitionAbsoluteAndRelative=z7;function zp(t){return $p.isAbsolute(t)}bp.isAbsolute=zp});var Dp=H((iK,jp)=>{var i9=it("stream"),Fp=i9.PassThrough,o9=Array.prototype.slice;jp.exports=d9;function d9(){let t=[],e=o9.call(arguments),u=!1,a=e[e.length-1];if(a&&!Array.isArray(a)&&a.pipe==null)e.pop();else a={};let l=a.end!==!1,i=a.pipeError===!0;if(a.objectMode==null)a.objectMode=!0;if(a.highWaterMark==null)a.highWaterMark=65536;let o=Fp(a);function d(){for(let n=0,r=arguments.length;n<r;n++)t.push(Ap(arguments[n],a));return m(),this}function m(){if(u)return;u=!0;let n=t.shift();if(!n){process.nextTick(_);return}if(!Array.isArray(n))n=[n];let r=n.length+1;function c(){if(--r>0)return;u=!1,m()}function x(I){function s(){if(I.removeListener("merge2UnpipeEnd",s),I.removeListener("end",s),i)I.removeListener("error",k);c()}function k(g){o.emit("error",g)}if(I._readableState.endEmitted)return c();if(I.on("merge2UnpipeEnd",s),I.on("end",s),i)I.on("error",k);I.pipe(o,{end:!1}),I.resume()}for(let I=0;I<n.length;I++)x(n[I]);c()}function _(){if(u=!1,o.emit("queueDrain"),l)o.end()}if(o.setMaxListeners(0),o.add=d,o.on("unpipe",function(n){n.emit("merge2UnpipeEnd")}),e.length)d.apply(null,e);return o}function Ap(t,e){if(!Array.isArray(t)){if(!t._readableState&&t.pipe)t=t.pipe(Fp(e));if(!t._readableState||!t.pause||!t.pipe)throw Error("Only readable stream can be merged.");t.pause()}else for(let u=0,a=t.length;u<a;u++)t[u]=Ap(t[u],e);return t}});var Tp=H((Lp)=>{Object.defineProperty(Lp,"__esModule",{value:!0});Lp.merge=void 0;var p9=Dp();function m9(t){let e=p9(t);return t.forEach((u)=>{u.once("error",(a)=>e.emit("error",a))}),e.once("close",()=>Np(t)),e.once("end",()=>Np(t)),e}Lp.merge=m9;function Np(t){t.forEach((e)=>e.emit("close"))}});var Sp=H((Ep)=>{Object.defineProperty(Ep,"__esModule",{value:!0});Ep.isEmpty=Ep.isString=void 0;function n9(t){return typeof t==="string"}Ep.isString=n9;function _9(t){return t===""}Ep.isEmpty=_9});var ze=H((Op)=>{Object.defineProperty(Op,"__esModule",{value:!0});Op.string=Op.stream=Op.pattern=Op.path=Op.fs=Op.errno=Op.array=void 0;var c9=e1();Op.array=c9;var x9=l1();Op.errno=x9;var I9=p1();Op.fs=I9;var w9=x1();Op.path=w9;var s9=Up();Op.pattern=s9;var k9=Tp();Op.stream=k9;var f9=Sp();Op.string=f9});var am=H((em)=>{Object.defineProperty(em,"__esModule",{value:!0});em.convertPatternGroupToTask=em.convertPatternGroupsToTasks=em.groupPatternsByBaseDirectory=em.getNegativePatternsAsPositive=em.getPositivePatterns=em.convertPatternsToTasks=em.generate=void 0;var re=ze();function G9(t,e){let u=Cp(t,e),a=Cp(e.ignore,e),l=yp(u),i=tm(u,a),o=l.filter((n)=>re.pattern.isStaticPattern(n,e)),d=l.filter((n)=>re.pattern.isDynamicPattern(n,e)),m=Cl(o,i,!1),_=Cl(d,i,!0);return m.concat(_)}em.generate=G9;function Cp(t,e){let u=t;if(e.braceExpansion)u=re.pattern.expandPatternsWithBraceExpansion(u);if(e.baseNameMatch)u=u.map((a)=>a.includes("/")?a:`**/${a}`);return u.map((a)=>re.pattern.removeDuplicateSlashes(a))}function Cl(t,e,u){let a=[],l=re.pattern.getPatternsOutsideCurrentDirectory(t),i=re.pattern.getPatternsInsideCurrentDirectory(t),o=yl(l),d=yl(i);if(a.push(...ti(o,e,u)),"."in d)a.push(ei(".",i,e,u));else a.push(...ti(d,e,u));return a}em.convertPatternsToTasks=Cl;function yp(t){return re.pattern.getPositivePatterns(t)}em.getPositivePatterns=yp;function tm(t,e){return re.pattern.getNegativePatterns(t).concat(e).map(re.pattern.convertToPositivePattern)}em.getNegativePatternsAsPositive=tm;function yl(t){let e={};return t.reduce((u,a)=>{let l=re.pattern.getBaseDirectory(a);if(l in u)u[l].push(a);else u[l]=[a];return u},e)}em.groupPatternsByBaseDirectory=yl;function ti(t,e,u){return Object.keys(t).map((a)=>{return ei(a,t[a],e,u)})}em.convertPatternGroupsToTasks=ti;function ei(t,e,u,a){return{dynamic:a,positive:e,negative:u,base:t,patterns:[].concat(e,u.map(re.pattern.convertToNegativePattern))}}em.convertPatternGroupToTask=ei});var dm=H((im)=>{Object.defineProperty(im,"__esModule",{value:!0});im.read=void 0;function Y9(t,e,u){e.fs.lstat(t,(a,l)=>{if(a!==null){lm(u,a);return}if(!l.isSymbolicLink()||!e.followSymbolicLink){ui(u,l);return}e.fs.stat(t,(i,o)=>{if(i!==null){if(e.throwErrorOnBrokenSymbolicLink){lm(u,i);return}ui(u,l);return}if(e.markSymbolicLink)o.isSymbolicLink=()=>!0;ui(u,o)})})}im.read=Y9;function lm(t,e){t(e)}function ui(t,e){t(null,e)}});var nm=H((pm)=>{Object.defineProperty(pm,"__esModule",{value:!0});pm.read=void 0;function H9(t,e){let u=e.fs.lstatSync(t);if(!u.isSymbolicLink()||!e.followSymbolicLink)return u;try{let a=e.fs.statSync(t);if(e.markSymbolicLink)a.isSymbolicLink=()=>!0;return a}catch(a){if(!e.throwErrorOnBrokenSymbolicLink)return u;throw a}}pm.read=H9});var cm=H((_m)=>{Object.defineProperty(_m,"__esModule",{value:!0});_m.createFileSystemAdapter=_m.FILE_SYSTEM_ADAPTER=void 0;var N2=it("fs");_m.FILE_SYSTEM_ADAPTER={lstat:N2.lstat,stat:N2.stat,lstatSync:N2.lstatSync,statSync:N2.statSync};function z9(t){if(t===void 0)return _m.FILE_SYSTEM_ADAPTER;return Object.assign(Object.assign({},_m.FILE_SYSTEM_ADAPTER),t)}_m.createFileSystemAdapter=z9});var wm=H((Im)=>{Object.defineProperty(Im,"__esModule",{value:!0});var b9=cm();class xm{constructor(t={}){this._options=t,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=b9.createFileSystemAdapter(this._options.fs),this.markSymbolicLink=this._getValue(this._options.markSymbolicLink,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0)}_getValue(t,e){return t!==null&&t!==void 0?t:e}}Im.default=xm});var s0=H((km)=>{Object.defineProperty(km,"__esModule",{value:!0});km.statSync=km.stat=km.Settings=void 0;var sm=dm(),U9=nm(),li=wm();km.Settings=li.default;function F9(t,e,u){if(typeof e==="function"){sm.read(t,ii(),e);return}sm.read(t,ii(e),u)}km.stat=F9;function A9(t,e){let u=ii(e);return U9.read(t,u)}km.statSync=A9;function ii(t={}){if(t instanceof li.default)return t;return new li.default(t)}});var Bm=H((IK,gm)=>{/*! queue-microtask. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */var hm;gm.exports=typeof queueMicrotask==="function"?queueMicrotask.bind(typeof window<"u"?window:global):(t)=>(hm||(hm=Promise.resolve())).then(t).catch((e)=>setTimeout(()=>{throw e},0))});var vm=H((wK,Qm)=>{/*! run-parallel. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */Qm.exports=L9;var N9=Bm();function L9(t,e){let u,a,l,i=!0;if(Array.isArray(t))u=[],a=t.length;else l=Object.keys(t),u={},a=l.length;function o(m){function _(){if(e)e(m,u);e=null}if(i)N9(_);else _()}function d(m,_,n){if(u[m]=n,--a===0||_)o(_)}if(!a)o(null);else if(l)l.forEach(function(m){t[m](function(_,n){d(m,_,n)})});else t.forEach(function(m,_){m(function(n,r){d(_,n,r)})});i=!1}});var oi=H(($m)=>{Object.defineProperty($m,"__esModule",{value:!0});$m.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var L2=process.versions.node.split(".");if(L2[0]===void 0||L2[1]===void 0)throw Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var qm=Number.parseInt(L2[0],10),Z9=Number.parseInt(L2[1],10),Gm=10,T9=10,E9=qm>Gm,R9=qm===Gm&&Z9>=T9;$m.IS_SUPPORT_READDIR_WITH_FILE_TYPES=E9||R9});var Vm=H((Km)=>{Object.defineProperty(Km,"__esModule",{value:!0});Km.createDirentFromStats=void 0;class Jm{constructor(t,e){this.name=t,this.isBlockDevice=e.isBlockDevice.bind(e),this.isCharacterDevice=e.isCharacterDevice.bind(e),this.isDirectory=e.isDirectory.bind(e),this.isFIFO=e.isFIFO.bind(e),this.isFile=e.isFile.bind(e),this.isSocket=e.isSocket.bind(e),this.isSymbolicLink=e.isSymbolicLink.bind(e)}}function S9(t,e){return new Jm(t,e)}Km.createDirentFromStats=S9});var di=H((Ym)=>{Object.defineProperty(Ym,"__esModule",{value:!0});Ym.fs=void 0;var O9=Vm();Ym.fs=O9});var pi=H((zm)=>{Object.defineProperty(zm,"__esModule",{value:!0});zm.joinPathSegments=void 0;function P9(t,e,u){if(t.endsWith(u))return t+e;return t+u+e}zm.joinPathSegments=P9});var Lm=H((Dm)=>{Object.defineProperty(Dm,"__esModule",{value:!0});Dm.readdir=Dm.readdirWithFileTypes=Dm.read=void 0;var C9=s0(),Mm=vm(),y9=oi(),Um=di(),Fm=pi();function tI(t,e,u){if(!e.stats&&y9.IS_SUPPORT_READDIR_WITH_FILE_TYPES){Am(t,e,u);return}jm(t,e,u)}Dm.read=tI;function Am(t,e,u){e.fs.readdir(t,{withFileTypes:!0},(a,l)=>{if(a!==null){Z2(u,a);return}let i=l.map((d)=>({dirent:d,name:d.name,path:Fm.joinPathSegments(t,d.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){mi(u,i);return}let o=i.map((d)=>eI(d,e));Mm(o,(d,m)=>{if(d!==null){Z2(u,d);return}mi(u,m)})})}Dm.readdirWithFileTypes=Am;function eI(t,e){return(u)=>{if(!t.dirent.isSymbolicLink()){u(null,t);return}e.fs.stat(t.path,(a,l)=>{if(a!==null){if(e.throwErrorOnBrokenSymbolicLink){u(a);return}u(null,t);return}t.dirent=Um.fs.createDirentFromStats(t.name,l),u(null,t)})}}function jm(t,e,u){e.fs.readdir(t,(a,l)=>{if(a!==null){Z2(u,a);return}let i=l.map((o)=>{let d=Fm.joinPathSegments(t,o,e.pathSegmentSeparator);return(m)=>{C9.stat(d,e.fsStatSettings,(_,n)=>{if(_!==null){m(_);return}let r={name:o,path:d,dirent:Um.fs.createDirentFromStats(o,n)};if(e.stats)r.stats=n;m(null,r)})}});Mm(i,(o,d)=>{if(o!==null){Z2(u,o);return}mi(u,d)})})}Dm.readdir=jm;function Z2(t,e){t(e)}function mi(t,e){t(null,e)}});var Pm=H((Sm)=>{Object.defineProperty(Sm,"__esModule",{value:!0});Sm.readdir=Sm.readdirWithFileTypes=Sm.read=void 0;var lI=s0(),iI=oi(),Zm=di(),Tm=pi();function oI(t,e){if(!e.stats&&iI.IS_SUPPORT_READDIR_WITH_FILE_TYPES)return Em(t,e);return Rm(t,e)}Sm.read=oI;function Em(t,e){return e.fs.readdirSync(t,{withFileTypes:!0}).map((a)=>{let l={dirent:a,name:a.name,path:Tm.joinPathSegments(t,a.name,e.pathSegmentSeparator)};if(l.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let i=e.fs.statSync(l.path);l.dirent=Zm.fs.createDirentFromStats(l.name,i)}catch(i){if(e.throwErrorOnBrokenSymbolicLink)throw i}return l})}Sm.readdirWithFileTypes=Em;function Rm(t,e){return e.fs.readdirSync(t).map((a)=>{let l=Tm.joinPathSegments(t,a,e.pathSegmentSeparator),i=lI.statSync(l,e.fsStatSettings),o={name:a,path:l,dirent:Zm.fs.createDirentFromStats(a,i)};if(e.stats)o.stats=i;return o})}Sm.readdir=Rm});var t5=H((Cm)=>{Object.defineProperty(Cm,"__esModule",{value:!0});Cm.createFileSystemAdapter=Cm.FILE_SYSTEM_ADAPTER=void 0;var T0=it("fs");Cm.FILE_SYSTEM_ADAPTER={lstat:T0.lstat,stat:T0.stat,lstatSync:T0.lstatSync,statSync:T0.statSync,readdir:T0.readdir,readdirSync:T0.readdirSync};function mI(t){if(t===void 0)return Cm.FILE_SYSTEM_ADAPTER;return Object.assign(Object.assign({},Cm.FILE_SYSTEM_ADAPTER),t)}Cm.createFileSystemAdapter=mI});var a5=H((u5)=>{Object.defineProperty(u5,"__esModule",{value:!0});var nI=it("path"),_I=s0(),rI=t5();class e5{constructor(t={}){this._options=t,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=rI.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,nI.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new _I.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(t,e){return t!==null&&t!==void 0?t:e}}u5.default=e5});var T2=H((i5)=>{Object.defineProperty(i5,"__esModule",{value:!0});i5.Settings=i5.scandirSync=i5.scandir=void 0;var l5=Lm(),xI=Pm(),_i=a5();i5.Settings=_i.default;function II(t,e,u){if(typeof e==="function"){l5.read(t,ri(),e);return}l5.read(t,ri(e),u)}i5.scandir=II;function wI(t,e){let u=ri(e);return xI.read(t,u)}i5.scandirSync=wI;function ri(t={}){if(t instanceof _i.default)return t;return new _i.default(t)}});var p5=H((GK,d5)=>{function fI(t){var e=new t,u=e;function a(){var i=e;if(i.next)e=i.next;else e=new t,u=e;return i.next=null,i}function l(i){u.next=i,u=i}return{get:a,release:l}}d5.exports=fI});var n5=H(($K,ci)=>{var hI=p5();function m5(t,e,u){if(typeof t==="function")u=e,e=t,t=null;if(!(u>=1))throw Error("fastqueue concurrency must be equal to or greater than 1");var a=hI(gI),l=null,i=null,o=0,d=null,m={push:s,drain:ae,saturated:ae,pause:n,paused:!1,get concurrency(){return u},set concurrency(Q){if(!(Q>=1))throw Error("fastqueue concurrency must be equal to or greater than 1");if(u=Q,m.paused)return;for(;l&&o<u;)o++,g()},running:_,resume:x,idle:I,length:r,getQueue:c,unshift:k,empty:ae,kill:f,killAndDrain:h,error:B};return m;function _(){return o}function n(){m.paused=!0}function r(){var Q=l,V=0;while(Q)Q=Q.next,V++;return V}function c(){var Q=l,V=[];while(Q)V.push(Q.value),Q=Q.next;return V}function x(){if(!m.paused)return;if(m.paused=!1,l===null){o++,g();return}for(;l&&o<u;)o++,g()}function I(){return o===0&&m.length()===0}function s(Q,V){var A=a.get();if(A.context=t,A.release=g,A.value=Q,A.callback=V||ae,A.errorHandler=d,o>=u||m.paused)if(i)i.next=A,i=A;else l=A,i=A,m.saturated();else o++,e.call(t,A.value,A.worked)}function k(Q,V){var A=a.get();if(A.context=t,A.release=g,A.value=Q,A.callback=V||ae,A.errorHandler=d,o>=u||m.paused)if(l)A.next=l,l=A;else l=A,i=A,m.saturated();else o++,e.call(t,A.value,A.worked)}function g(Q){if(Q)a.release(Q);var V=l;if(V&&o<=u)if(!m.paused){if(i===l)i=null;if(l=V.next,V.next=null,e.call(t,V.value,V.worked),i===null)m.empty()}else o--;else if(--o===0)m.drain()}function f(){l=null,i=null,m.drain=ae}function h(){l=null,i=null,m.drain(),m.drain=ae}function B(Q){d=Q}}function ae(){}function gI(){this.value=null,this.callback=ae,this.next=null,this.release=ae,this.context=null,this.errorHandler=null;var t=this;this.worked=function(u,a){var{callback:l,errorHandler:i,value:o}=t;if(t.value=null,t.callback=ae,t.errorHandler)i(u,o);l.call(t.context,u,a),t.release(t)}}function BI(t,e,u){if(typeof t==="function")u=e,e=t,t=null;function a(n,r){e.call(this,n).then(function(c){r(null,c)},r)}var l=m5(t,a,u),i=l.push,o=l.unshift;return l.push=d,l.unshift=m,l.drained=_,l;function d(n){var r=new Promise(function(c,x){i(n,function(I,s){if(I){x(I);return}c(s)})});return r.catch(ae),r}function m(n){var r=new Promise(function(c,x){o(n,function(I,s){if(I){x(I);return}c(s)})});return r.catch(ae),r}function _(){var n=new Promise(function(r){process.nextTick(function(){if(l.idle())r();else{var c=l.drain;l.drain=function(){if(typeof c==="function")c();r(),l.drain=c}}})});return n}}ci.exports=m5;ci.exports.promise=BI});var E2=H((_5)=>{Object.defineProperty(_5,"__esModule",{value:!0});_5.joinPathSegments=_5.replacePathSegmentSeparator=_5.isAppliedFilter=_5.isFatalError=void 0;function QI(t,e){if(t.errorFilter===null)return!0;return!t.errorFilter(e)}_5.isFatalError=QI;function vI(t,e){return t===null||t(e)}_5.isAppliedFilter=vI;function qI(t,e){return t.split(/[/\\]/).join(e)}_5.replacePathSegmentSeparator=qI;function GI(t,e,u){if(t==="")return e;if(t.endsWith(u))return t+e;return t+u+e}_5.joinPathSegments=GI});var xi=H((x5)=>{Object.defineProperty(x5,"__esModule",{value:!0});var KI=E2();class c5{constructor(t,e){this._root=t,this._settings=e,this._root=KI.replacePathSegmentSeparator(t,e.pathSegmentSeparator)}}x5.default=c5});var Ii=H((w5)=>{Object.defineProperty(w5,"__esModule",{value:!0});var VI=it("events"),YI=T2(),HI=n5(),R2=E2(),zI=xi();class I5 extends zI.default{constructor(t,e){super(t,e);this._settings=e,this._scandir=YI.scandir,this._emitter=new VI.EventEmitter,this._queue=HI(this._worker.bind(this),this._settings.concurrency),this._isFatalError=!1,this._isDestroyed=!1,this._queue.drain=()=>{if(!this._isFatalError)this._emitter.emit("end")}}read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()=>{this._pushToQueue(this._root,this._settings.basePath)}),this._emitter}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)throw Error("The reader is already destroyed");this._isDestroyed=!0,this._queue.killAndDrain()}onEntry(t){this._emitter.on("entry",t)}onError(t){this._emitter.once("error",t)}onEnd(t){this._emitter.once("end",t)}_pushToQueue(t,e){let u={directory:t,base:e};this._queue.push(u,(a)=>{if(a!==null)this._handleError(a)})}_worker(t,e){this._scandir(t.directory,this._settings.fsScandirSettings,(u,a)=>{if(u!==null){e(u,void 0);return}for(let l of a)this._handleEntry(l,t.base);e(null,void 0)})}_handleError(t){if(this._isDestroyed||!R2.isFatalError(this._settings,t))return;this._isFatalError=!0,this._isDestroyed=!0,this._emitter.emit("error",t)}_handleEntry(t,e){if(this._isDestroyed||this._isFatalError)return;let u=t.path;if(e!==void 0)t.path=R2.joinPathSegments(e,t.name,this._settings.pathSegmentSeparator);if(R2.isAppliedFilter(this._settings.entryFilter,t))this._emitEntry(t);if(t.dirent.isDirectory()&&R2.isAppliedFilter(this._settings.deepFilter,t))this._pushToQueue(u,e===void 0?void 0:t.path)}_emitEntry(t){this._emitter.emit("entry",t)}}w5.default=I5});var f5=H((k5)=>{Object.defineProperty(k5,"__esModule",{value:!0});var MI=Ii();class s5{constructor(t,e){this._root=t,this._settings=e,this._reader=new MI.default(this._root,this._settings),this._storage=[]}read(t){this._reader.onError((e)=>{UI(t,e)}),this._reader.onEntry((e)=>{this._storage.push(e)}),this._reader.onEnd(()=>{FI(t,this._storage)}),this._reader.read()}}k5.default=s5;function UI(t,e){t(e)}function FI(t,e){t(null,e)}});var B5=H((g5)=>{Object.defineProperty(g5,"__esModule",{value:!0});var jI=it("stream"),DI=Ii();class h5{constructor(t,e){this._root=t,this._settings=e,this._reader=new DI.default(this._root,this._settings),this._stream=new jI.Readable({objectMode:!0,read:()=>{},destroy:()=>{if(!this._reader.isDestroyed)this._reader.destroy()}})}read(){return this._reader.onError((t)=>{this._stream.emit("error",t)}),this._reader.onEntry((t)=>{this._stream.push(t)}),this._reader.onEnd(()=>{this._stream.push(null)}),this._reader.read(),this._stream}}g5.default=h5});var q5=H((v5)=>{Object.defineProperty(v5,"__esModule",{value:!0});var LI=T2(),S2=E2(),ZI=xi();class Q5 extends ZI.default{constructor(){super(...arguments);this._scandir=LI.scandirSync,this._storage=[],this._queue=new Set}read(){return this._pushToQueue(this._root,this._settings.basePath),this._handleQueue(),this._storage}_pushToQueue(t,e){this._queue.add({directory:t,base:e})}_handleQueue(){for(let t of this._queue.values())this._handleDirectory(t.directory,t.base)}_handleDirectory(t,e){try{let u=this._scandir(t,this._settings.fsScandirSettings);for(let a of u)this._handleEntry(a,e)}catch(u){this._handleError(u)}}_handleError(t){if(!S2.isFatalError(this._settings,t))return;throw t}_handleEntry(t,e){let u=t.path;if(e!==void 0)t.path=S2.joinPathSegments(e,t.name,this._settings.pathSegmentSeparator);if(S2.isAppliedFilter(this._settings.entryFilter,t))this._pushToStorage(t);if(t.dirent.isDirectory()&&S2.isAppliedFilter(this._settings.deepFilter,t))this._pushToQueue(u,e===void 0?void 0:t.path)}_pushToStorage(t){this._storage.push(t)}}v5.default=Q5});var X5=H(($5)=>{Object.defineProperty($5,"__esModule",{value:!0});var EI=q5();class G5{constructor(t,e){this._root=t,this._settings=e,this._reader=new EI.default(this._root,this._settings)}read(){return this._reader.read()}}$5.default=G5});var W5=H((K5)=>{Object.defineProperty(K5,"__esModule",{value:!0});var SI=it("path"),OI=T2();class J5{constructor(t={}){this._options=t,this.basePath=this._getValue(this._options.basePath,void 0),this.concurrency=this._getValue(this._options.concurrency,Number.POSITIVE_INFINITY),this.deepFilter=this._getValue(this._options.deepFilter,null),this.entryFilter=this._getValue(this._options.entryFilter,null),this.errorFilter=this._getValue(this._options.errorFilter,null),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,SI.sep),this.fsScandirSettings=new OI.Settings({followSymbolicLinks:this._options.followSymbolicLinks,fs:this._options.fs,pathSegmentSeparator:this._options.pathSegmentSeparator,stats:this._options.stats,throwErrorOnBrokenSymbolicLink:this._options.throwErrorOnBrokenSymbolicLink})}_getValue(t,e){return t!==null&&t!==void 0?t:e}}K5.default=J5});var P2=H((Y5)=>{Object.defineProperty(Y5,"__esModule",{value:!0});Y5.Settings=Y5.walkStream=Y5.walkSync=Y5.walk=void 0;var V5=f5(),CI=B5(),yI=X5(),wi=W5();Y5.Settings=wi.default;function tw(t,e,u){if(typeof e==="function"){new V5.default(t,O2()).read(e);return}new V5.default(t,O2(e)).read(u)}Y5.walk=tw;function ew(t,e){let u=O2(e);return new yI.default(t,u).read()}Y5.walkSync=ew;function uw(t,e){let u=O2(e);return new CI.default(t,u).read()}Y5.walkStream=uw;function O2(t={}){if(t instanceof wi.default)return t;return new wi.default(t)}});var C2=H((M5)=>{Object.defineProperty(M5,"__esModule",{value:!0});var ow=it("path"),dw=s0(),z5=ze();class b5{constructor(t){this._settings=t,this._fsStatSettings=new dw.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(t){return ow.resolve(this._settings.cwd,t)}_makeEntry(t,e){let u={name:e,path:e,dirent:z5.fs.createDirentFromStats(e,t)};if(this._settings.stats)u.stats=t;return u}_isFatalError(t){return!z5.errno.isEnoentCodeError(t)&&!this._settings.suppressErrors}}M5.default=b5});var si=H((F5)=>{Object.defineProperty(F5,"__esModule",{value:!0});var mw=it("stream"),nw=s0(),_w=P2(),rw=C2();class U5 extends rw.default{constructor(){super(...arguments);this._walkStream=_w.walkStream,this._stat=nw.stat}dynamic(t,e){return this._walkStream(t,e)}static(t,e){let u=t.map(this._getFullEntryPath,this),a=new mw.PassThrough({objectMode:!0});a._write=(l,i,o)=>{return this._getEntry(u[l],t[l],e).then((d)=>{if(d!==null&&e.entryFilter(d))a.push(d);if(l===u.length-1)a.end();o()}).catch(o)};for(let l=0;l<u.length;l++)a.write(l);return a}_getEntry(t,e,u){return this._getStat(t).then((a)=>this._makeEntry(a,e)).catch((a)=>{if(u.errorFilter(a))return null;throw a})}_getStat(t){return new Promise((e,u)=>{this._stat(t,this._fsStatSettings,(a,l)=>{return a===null?e(l):u(a)})})}}F5.default=U5});var D5=H((j5)=>{Object.defineProperty(j5,"__esModule",{value:!0});var xw=P2(),Iw=C2(),ww=si();class A5 extends Iw.default{constructor(){super(...arguments);this._walkAsync=xw.walk,this._readerStream=new ww.default(this._settings)}dynamic(t,e){return new Promise((u,a)=>{this._walkAsync(t,e,(l,i)=>{if(l===null)u(i);else a(l)})})}async static(t,e){let u=[],a=this._readerStream.static(t,e);return new Promise((l,i)=>{a.once("error",i),a.on("data",(o)=>u.push(o)),a.once("end",()=>l(u))})}}j5.default=A5});var Z5=H((L5)=>{Object.defineProperty(L5,"__esModule",{value:!0});var Au=ze();class N5{constructor(t,e,u){this._patterns=t,this._settings=e,this._micromatchOptions=u,this._storage=[],this._fillStorage()}_fillStorage(){for(let t of this._patterns){let e=this._getPatternSegments(t),u=this._splitSegmentsIntoSections(e);this._storage.push({complete:u.length<=1,pattern:t,segments:e,sections:u})}}_getPatternSegments(t){return Au.pattern.getPatternParts(t,this._micromatchOptions).map((u)=>{if(!Au.pattern.isDynamicPattern(u,this._settings))return{dynamic:!1,pattern:u};return{dynamic:!0,pattern:u,patternRe:Au.pattern.makeRe(u,this._micromatchOptions)}})}_splitSegmentsIntoSections(t){return Au.array.splitWhen(t,(e)=>e.dynamic&&Au.pattern.hasGlobStar(e.pattern))}}L5.default=N5});var R5=H((E5)=>{Object.defineProperty(E5,"__esModule",{value:!0});var fw=Z5();class T5 extends fw.default{match(t){let e=t.split("/"),u=e.length,a=this._storage.filter((l)=>!l.complete||l.segments.length>u);for(let l of a){let i=l.sections[0];if(!l.complete&&u>i.length)return!0;if(e.every((d,m)=>{let _=l.segments[m];if(_.dynamic&&_.patternRe.test(d))return!0;if(!_.dynamic&&_.pattern===d)return!0;return!1}))return!0}return!1}}E5.default=T5});var P5=H((O5)=>{Object.defineProperty(O5,"__esModule",{value:!0});var y2=ze(),gw=R5();class S5{constructor(t,e){this._settings=t,this._micromatchOptions=e}getFilter(t,e,u){let a=this._getMatcher(e),l=this._getNegativePatternsRe(u);return(i)=>this._filter(t,i,a,l)}_getMatcher(t){return new gw.default(t,this._settings,this._micromatchOptions)}_getNegativePatternsRe(t){let e=t.filter(y2.pattern.isAffectDepthOfReadingPattern);return y2.pattern.convertPatternsToRe(e,this._micromatchOptions)}_filter(t,e,u,a){if(this._isSkippedByDeep(t,e.path))return!1;if(this._isSkippedSymbolicLink(e))return!1;let l=y2.path.removeLeadingDotSegment(e.path);if(this._isSkippedByPositivePatterns(l,u))return!1;return this._isSkippedByNegativePatterns(l,a)}_isSkippedByDeep(t,e){if(this._settings.deep===1/0)return!1;return this._getEntryLevel(t,e)>=this._settings.deep}_getEntryLevel(t,e){let u=e.split("/").length;if(t==="")return u;let a=t.split("/").length;return u-a}_isSkippedSymbolicLink(t){return!this._settings.followSymbolicLinks&&t.dirent.isSymbolicLink()}_isSkippedByPositivePatterns(t,e){return!this._settings.baseNameMatch&&!e.match(t)}_isSkippedByNegativePatterns(t,e){return!y2.pattern.matchAny(t,e)}}O5.default=S5});var tn=H((y5)=>{Object.defineProperty(y5,"__esModule",{value:!0});var Te=ze();class C5{constructor(t,e){this._settings=t,this._micromatchOptions=e,this.index=new Map}getFilter(t,e){let[u,a]=Te.pattern.partitionAbsoluteAndRelative(e),l={positive:{all:Te.pattern.convertPatternsToRe(t,this._micromatchOptions)},negative:{absolute:Te.pattern.convertPatternsToRe(u,Object.assign(Object.assign({},this._micromatchOptions),{dot:!0})),relative:Te.pattern.convertPatternsToRe(a,Object.assign(Object.assign({},this._micromatchOptions),{dot:!0}))}};return(i)=>this._filter(i,l)}_filter(t,e){let u=Te.path.removeLeadingDotSegment(t.path);if(this._settings.unique&&this._isDuplicateEntry(u))return!1;if(this._onlyFileFilter(t)||this._onlyDirectoryFilter(t))return!1;let a=this._isMatchToPatternsSet(u,e,t.dirent.isDirectory());if(this._settings.unique&&a)this._createIndexRecord(u);return a}_isDuplicateEntry(t){return this.index.has(t)}_createIndexRecord(t){this.index.set(t,void 0)}_onlyFileFilter(t){return this._settings.onlyFiles&&!t.dirent.isFile()}_onlyDirectoryFilter(t){return this._settings.onlyDirectories&&!t.dirent.isDirectory()}_isMatchToPatternsSet(t,e,u){if(!this._isMatchToPatterns(t,e.positive.all,u))return!1;if(this._isMatchToPatterns(t,e.negative.relative,u))return!1;if(this._isMatchToAbsoluteNegative(t,e.negative.absolute,u))return!1;return!0}_isMatchToAbsoluteNegative(t,e,u){if(e.length===0)return!1;let a=Te.path.makeAbsolute(this._settings.cwd,t);return this._isMatchToPatterns(a,e,u)}_isMatchToPatterns(t,e,u){if(e.length===0)return!1;let a=Te.pattern.matchAny(t,e);if(!a&&u)return Te.pattern.matchAny(t+"/",e);return a}}y5.default=C5});var an=H((un)=>{Object.defineProperty(un,"__esModule",{value:!0});var vw=ze();class en{constructor(t){this._settings=t}getFilter(){return(t)=>this._isNonFatalError(t)}_isNonFatalError(t){return vw.errno.isEnoentCodeError(t)||this._settings.suppressErrors}}un.default=en});var pn=H((dn)=>{Object.defineProperty(dn,"__esModule",{value:!0});var ln=ze();class on{constructor(t){this._settings=t}getTransformer(){return(t)=>this._transform(t)}_transform(t){let e=t.path;if(this._settings.absolute)e=ln.path.makeAbsolute(this._settings.cwd,e),e=ln.path.unixify(e);if(this._settings.markDirectories&&t.dirent.isDirectory())e+="/";if(!this._settings.objectMode)return e;return Object.assign(Object.assign({},t),{path:e})}}dn.default=on});var ta=H((nn)=>{Object.defineProperty(nn,"__esModule",{value:!0});var $w=it("path"),Xw=P5(),Jw=tn(),Kw=an(),Ww=pn();class mn{constructor(t){this._settings=t,this.errorFilter=new Kw.default(this._settings),this.entryFilter=new Jw.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new Xw.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new Ww.default(this._settings)}_getRootDirectory(t){return $w.resolve(this._settings.cwd,t.base)}_getReaderOptions(t){let e=t.base==="."?"":t.base;return{basePath:e,pathSegmentSeparator:"/",concurrency:this._settings.concurrency,deepFilter:this.deepFilter.getFilter(e,t.positive,t.negative),entryFilter:this.entryFilter.getFilter(t.positive,t.negative),errorFilter:this.errorFilter.getFilter(),followSymbolicLinks:this._settings.followSymbolicLinks,fs:this._settings.fs,stats:this._settings.stats,throwErrorOnBrokenSymbolicLink:this._settings.throwErrorOnBrokenSymbolicLink,transform:this.entryTransformer.getTransformer()}}_getMicromatchOptions(){return{dot:this._settings.dot,matchBase:this._settings.baseNameMatch,nobrace:!this._settings.braceExpansion,nocase:!this._settings.caseSensitiveMatch,noext:!this._settings.extglob,noglobstar:!this._settings.globstar,posix:!0,strictSlashes:!1}}}nn.default=mn});var cn=H((rn)=>{Object.defineProperty(rn,"__esModule",{value:!0});var Yw=D5(),Hw=ta();class _n extends Hw.default{constructor(){super(...arguments);this._reader=new Yw.default(this._settings)}async read(t){let e=this._getRootDirectory(t),u=this._getReaderOptions(t);return(await this.api(e,t,u)).map((l)=>u.transform(l))}api(t,e,u){if(e.dynamic)return this._reader.dynamic(t,u);return this._reader.static(e.patterns,u)}}rn.default=_n});var wn=H((In)=>{Object.defineProperty(In,"__esModule",{value:!0});var bw=it("stream"),Mw=si(),Uw=ta();class xn extends Uw.default{constructor(){super(...arguments);this._reader=new Mw.default(this._settings)}read(t){let e=this._getRootDirectory(t),u=this._getReaderOptions(t),a=this.api(e,t,u),l=new bw.Readable({objectMode:!0,read:()=>{}});return a.once("error",(i)=>l.emit("error",i)).on("data",(i)=>l.emit("data",u.transform(i))).once("end",()=>l.emit("end")),l.once("close",()=>a.destroy()),l}api(t,e,u){if(e.dynamic)return this._reader.dynamic(t,u);return this._reader.static(e.patterns,u)}}In.default=xn});var fn=H((kn)=>{Object.defineProperty(kn,"__esModule",{value:!0});var Aw=s0(),jw=P2(),Dw=C2();class sn extends Dw.default{constructor(){super(...arguments);this._walkSync=jw.walkSync,this._statSync=Aw.statSync}dynamic(t,e){return this._walkSync(t,e)}static(t,e){let u=[];for(let a of t){let l=this._getFullEntryPath(a),i=this._getEntry(l,a,e);if(i===null||!e.entryFilter(i))continue;u.push(i)}return u}_getEntry(t,e,u){try{let a=this._getStat(t);return this._makeEntry(a,e)}catch(a){if(u.errorFilter(a))return null;throw a}}_getStat(t){return this._statSync(t,this._fsStatSettings)}}kn.default=sn});var Bn=H((gn)=>{Object.defineProperty(gn,"__esModule",{value:!0});var Lw=fn(),Zw=ta();class hn extends Zw.default{constructor(){super(...arguments);this._reader=new Lw.default(this._settings)}read(t){let e=this._getRootDirectory(t),u=this._getReaderOptions(t);return this.api(e,t,u).map(u.transform)}api(t,e,u){if(e.dynamic)return this._reader.dynamic(t,u);return this._reader.static(e.patterns,u)}}gn.default=hn});var qn=H((vn)=>{Object.defineProperty(vn,"__esModule",{value:!0});vn.DEFAULT_FILE_SYSTEM_ADAPTER=void 0;var E0=it("fs"),Ew=it("os"),Rw=Math.max(Ew.cpus().length,1);vn.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:E0.lstat,lstatSync:E0.lstatSync,stat:E0.stat,statSync:E0.statSync,readdir:E0.readdir,readdirSync:E0.readdirSync};class Qn{constructor(t={}){if(this._options=t,this.absolute=this._getValue(this._options.absolute,!1),this.baseNameMatch=this._getValue(this._options.baseNameMatch,!1),this.braceExpansion=this._getValue(this._options.braceExpansion,!0),this.caseSensitiveMatch=this._getValue(this._options.caseSensitiveMatch,!0),this.concurrency=this._getValue(this._options.concurrency,Rw),this.cwd=this._getValue(this._options.cwd,process.cwd()),this.deep=this._getValue(this._options.deep,1/0),this.dot=this._getValue(this._options.dot,!1),this.extglob=this._getValue(this._options.extglob,!0),this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!0),this.fs=this._getFileSystemMethods(this._options.fs),this.globstar=this._getValue(this._options.globstar,!0),this.ignore=this._getValue(this._options.ignore,[]),this.markDirectories=this._getValue(this._options.markDirectories,!1),this.objectMode=this._getValue(this._options.objectMode,!1),this.onlyDirectories=this._getValue(this._options.onlyDirectories,!1),this.onlyFiles=this._getValue(this._options.onlyFiles,!0),this.stats=this._getValue(this._options.stats,!1),this.suppressErrors=this._getValue(this._options.suppressErrors,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!1),this.unique=this._getValue(this._options.unique,!0),this.onlyDirectories)this.onlyFiles=!1;if(this.stats)this.objectMode=!0;this.ignore=[].concat(this.ignore)}_getValue(t,e){return t===void 0?e:t}_getFileSystemMethods(t={}){return Object.assign(Object.assign({},vn.DEFAULT_FILE_SYSTEM_ADAPTER),t)}}vn.default=Qn});var ea=H((CK,$n)=>{var Gn=am(),Ow=cn(),Pw=wn(),Cw=Bn(),fi=qn(),le=ze();async function hi(t,e){ce(t);let u=gi(t,Ow.default,e),a=await Promise.all(u);return le.array.flatten(a)}(function(t){t.glob=t,t.globSync=e,t.globStream=u,t.async=t;function e(_,n){ce(_);let r=gi(_,Cw.default,n);return le.array.flatten(r)}t.sync=e;function u(_,n){ce(_);let r=gi(_,Pw.default,n);return le.stream.merge(r)}t.stream=u;function a(_,n){ce(_);let r=[].concat(_),c=new fi.default(n);return Gn.generate(r,c)}t.generateTasks=a;function l(_,n){ce(_);let r=new fi.default(n);return le.pattern.isDynamicPattern(_,r)}t.isDynamicPattern=l;function i(_){return ce(_),le.path.escape(_)}t.escapePath=i;function o(_){return ce(_),le.path.convertPathToPattern(_)}t.convertPathToPattern=o;let d;(function(_){function n(c){return ce(c),le.path.escapePosixPath(c)}_.escapePath=n;function r(c){return ce(c),le.path.convertPosixPathToPattern(c)}_.convertPathToPattern=r})(d=t.posix||(t.posix={}));let m;(function(_){function n(c){return ce(c),le.path.escapeWindowsPath(c)}_.escapePath=n;function r(c){return ce(c),le.path.convertWindowsPathToPattern(c)}_.convertPathToPattern=r})(m=t.win32||(t.win32={}))})(hi||(hi={}));function gi(t,e,u){let a=[].concat(t),l=new fi.default(u),i=Gn.generate(a,l),o=new e(l);return i.map(o.read,o)}function ce(t){if(![].concat(t).every((a)=>le.string.isString(a)&&!le.string.isEmpty(a)))throw TypeError("Patterns must be a string (non empty) or an array of strings")}$n.exports=hi});var Vi=H((ua,R0)=>{var yw=200,Mn="__lodash_hash_undefined__",ts=800,es=16,Un=9007199254740991,Fn="[object Arguments]",us="[object Array]",as="[object AsyncFunction]",ls="[object Boolean]",is="[object Date]",os="[object Error]",An="[object Function]",ds="[object GeneratorFunction]",ps="[object Map]",ms="[object Number]",ns="[object Null]",jn="[object Object]",_s="[object Proxy]",rs="[object RegExp]",cs="[object Set]",xs="[object String]",Is="[object Undefined]",ws="[object WeakMap]",ss="[object ArrayBuffer]",ks="[object DataView]",fs="[object Float32Array]",hs="[object Float64Array]",gs="[object Int8Array]",Bs="[object Int16Array]",Qs="[object Int32Array]",vs="[object Uint8Array]",qs="[object Uint8ClampedArray]",Gs="[object Uint16Array]",$s="[object Uint32Array]",Xs=/[\\^$.*+?()[\]{}|]/g,Js=/^\[object .+?Constructor\]$/,Ks=/^(?:0|[1-9]\d*)$/,wt={};wt[fs]=wt[hs]=wt[gs]=wt[Bs]=wt[Qs]=wt[vs]=wt[qs]=wt[Gs]=wt[$s]=!0;wt[Fn]=wt[us]=wt[ss]=wt[ls]=wt[ks]=wt[is]=wt[os]=wt[An]=wt[ps]=wt[ms]=wt[jn]=wt[rs]=wt[cs]=wt[xs]=wt[ws]=!1;var Dn=typeof global=="object"&&global&&global.Object===Object&&global,Ws=typeof self=="object"&&self&&self.Object===Object&&self,Nu=Dn||Ws||Function("return this")(),Nn=typeof ua=="object"&&ua&&!ua.nodeType&&ua,ju=Nn&&typeof R0=="object"&&R0&&!R0.nodeType&&R0,Ln=ju&&ju.exports===Nn,Bi=Ln&&Dn.process,Xn=function(){try{var t=ju&&ju.require&&ju.require("util").types;if(t)return t;return Bi&&Bi.binding&&Bi.binding("util")}catch(e){}}(),Jn=Xn&&Xn.isTypedArray;function Vs(t,e,u){switch(u.length){case 0:return t.call(e);case 1:return t.call(e,u[0]);case 2:return t.call(e,u[0],u[1]);case 3:return t.call(e,u[0],u[1],u[2])}return t.apply(e,u)}function Ys(t,e){var u=-1,a=Array(t);while(++u<t)a[u]=e(u);return a}function Hs(t){return function(e){return t(e)}}function zs(t,e){return t==null?void 0:t[e]}function bs(t,e){return function(u){return t(e(u))}}var Ms=Array.prototype,Us=Function.prototype,ia=Object.prototype,Qi=Nu["__core-js_shared__"],oa=Us.toString,be=ia.hasOwnProperty,Kn=function(){var t=/[^.]+$/.exec(Qi&&Qi.keys&&Qi.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),Zn=ia.toString,Fs=oa.call(Object),As=RegExp("^"+oa.call(be).replace(Xs,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),aa=Ln?Nu.Buffer:void 0,Wn=Nu.Symbol,Vn=Nu.Uint8Array,Yn=aa?aa.allocUnsafe:void 0,Tn=bs(Object.getPrototypeOf,Object),Hn=Object.create,js=ia.propertyIsEnumerable,Ds=Ms.splice,k0=Wn?Wn.toStringTag:void 0,la=function(){try{var t=Ji(Object,"defineProperty");return t({},"",{}),t}catch(e){}}(),Ns=aa?aa.isBuffer:void 0,zn=Math.max,Ls=Date.now,En=Ji(Nu,"Map"),Du=Ji(Object,"create"),Zs=function(){function t(){}return function(e){if(!h0(e))return{};if(Hn)return Hn(e);t.prototype=e;var u=new t;return t.prototype=void 0,u}}();function f0(t){var e=-1,u=t==null?0:t.length;this.clear();while(++e<u){var a=t[e];this.set(a[0],a[1])}}function Ts(){this.__data__=Du?Du(null):{},this.size=0}function Es(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}function Rs(t){var e=this.__data__;if(Du){var u=e[t];return u===Mn?void 0:u}return be.call(e,t)?e[t]:void 0}function Ss(t){var e=this.__data__;return Du?e[t]!==void 0:be.call(e,t)}function Os(t,e){var u=this.__data__;return this.size+=this.has(t)?0:1,u[t]=Du&&e===void 0?Mn:e,this}f0.prototype.clear=Ts;f0.prototype.delete=Es;f0.prototype.get=Rs;f0.prototype.has=Ss;f0.prototype.set=Os;function Me(t){var e=-1,u=t==null?0:t.length;this.clear();while(++e<u){var a=t[e];this.set(a[0],a[1])}}function Ps(){this.__data__=[],this.size=0}function Cs(t){var e=this.__data__,u=da(e,t);if(u<0)return!1;var a=e.length-1;if(u==a)e.pop();else Ds.call(e,u,1);return--this.size,!0}function ys(t){var e=this.__data__,u=da(e,t);return u<0?void 0:e[u][1]}function tk(t){return da(this.__data__,t)>-1}function ek(t,e){var u=this.__data__,a=da(u,t);if(a<0)++this.size,u.push([t,e]);else u[a][1]=e;return this}Me.prototype.clear=Ps;Me.prototype.delete=Cs;Me.prototype.get=ys;Me.prototype.has=tk;Me.prototype.set=ek;function S0(t){var e=-1,u=t==null?0:t.length;this.clear();while(++e<u){var a=t[e];this.set(a[0],a[1])}}function uk(){this.size=0,this.__data__={hash:new f0,map:new(En||Me),string:new f0}}function ak(t){var e=ma(this,t).delete(t);return this.size-=e?1:0,e}function lk(t){return ma(this,t).get(t)}function ik(t){return ma(this,t).has(t)}function ok(t,e){var u=ma(this,t),a=u.size;return u.set(t,e),this.size+=u.size==a?0:1,this}S0.prototype.clear=uk;S0.prototype.delete=ak;S0.prototype.get=lk;S0.prototype.has=ik;S0.prototype.set=ok;function O0(t){var e=this.__data__=new Me(t);this.size=e.size}function dk(){this.__data__=new Me,this.size=0}function pk(t){var e=this.__data__,u=e.delete(t);return this.size=e.size,u}function mk(t){return this.__data__.get(t)}function nk(t){return this.__data__.has(t)}function _k(t,e){var u=this.__data__;if(u instanceof Me){var a=u.__data__;if(!En||a.length<yw-1)return a.push([t,e]),this.size=++u.size,this;u=this.__data__=new S0(a)}return u.set(t,e),this.size=u.size,this}O0.prototype.clear=dk;O0.prototype.delete=pk;O0.prototype.get=mk;O0.prototype.has=nk;O0.prototype.set=_k;function rk(t,e){var u=$i(t),a=!u&&Gi(t),l=!u&&!a&&Pn(t),i=!u&&!a&&!l&&yn(t),o=u||a||l||i,d=o?Ys(t.length,String):[],m=d.length;for(var _ in t)if((e||be.call(t,_))&&!(o&&(_=="length"||l&&(_=="offset"||_=="parent")||i&&(_=="buffer"||_=="byteLength"||_=="byteOffset")||Sn(_,m))))d.push(_);return d}function vi(t,e,u){if(u!==void 0&&!na(t[e],u)||u===void 0&&!(e in t))Xi(t,e,u)}function ck(t,e,u){var a=t[e];if(!(be.call(t,e)&&na(a,u))||u===void 0&&!(e in t))Xi(t,e,u)}function da(t,e){var u=t.length;while(u--)if(na(t[u][0],e))return u;return-1}function Xi(t,e,u){if(e=="__proto__"&&la)la(t,e,{configurable:!0,enumerable:!0,value:u,writable:!0});else t[e]=u}var xk=$k();function pa(t){if(t==null)return t===void 0?Is:ns;return k0&&k0 in Object(t)?Xk(t):Hk(t)}function bn(t){return Lu(t)&&pa(t)==Fn}function Ik(t){if(!h0(t)||Vk(t))return!1;var e=Wi(t)?As:Js;return e.test(Uk(t))}function wk(t){return Lu(t)&&Cn(t.length)&&!!wt[pa(t)]}function sk(t){if(!h0(t))return Yk(t);var e=On(t),u=[];for(var a in t)if(!(a=="constructor"&&(e||!be.call(t,a))))u.push(a);return u}function Rn(t,e,u,a,l){if(t===e)return;xk(e,function(i,o){if(l||(l=new O0),h0(i))kk(t,e,o,u,Rn,a,l);else{var d=a?a(qi(t,o),i,o+"",t,e,l):void 0;if(d===void 0)d=i;vi(t,o,d)}},t_)}function kk(t,e,u,a,l,i,o){var d=qi(t,u),m=qi(e,u),_=o.get(m);if(_){vi(t,u,_);return}var n=i?i(d,m,u+"",t,e,o):void 0,r=n===void 0;if(r){var c=$i(m),x=!c&&Pn(m),I=!c&&!x&&yn(m);if(n=m,c||x||I)if($i(d))n=d;else if(Fk(d))n=vk(d);else if(x)r=!1,n=gk(m,!0);else if(I)r=!1,n=Qk(m,!0);else n=[];else if(Ak(m)||Gi(m)){if(n=d,Gi(d))n=jk(d);else if(!h0(d)||Wi(d))n=Jk(m)}else r=!1}if(r)o.set(m,n),l(n,m,a,i,o),o.delete(m);vi(t,u,n)}function fk(t,e){return bk(zk(t,e,e_),t+"")}var hk=!la?e_:function(t,e){return la(t,"toString",{configurable:!0,enumerable:!1,value:Nk(e),writable:!0})};function gk(t,e){if(e)return t.slice();var u=t.length,a=Yn?Yn(u):new t.constructor(u);return t.copy(a),a}function Bk(t){var e=new t.constructor(t.byteLength);return new Vn(e).set(new Vn(t)),e}function Qk(t,e){var u=e?Bk(t.buffer):t.buffer;return new t.constructor(u,t.byteOffset,t.length)}function vk(t,e){var u=-1,a=t.length;e||(e=Array(a));while(++u<a)e[u]=t[u];return e}function qk(t,e,u,a){var l=!u;u||(u={});var i=-1,o=e.length;while(++i<o){var d=e[i],m=a?a(u[d],t[d],d,u,t):void 0;if(m===void 0)m=t[d];if(l)Xi(u,d,m);else ck(u,d,m)}return u}function Gk(t){return fk(function(e,u){var a=-1,l=u.length,i=l>1?u[l-1]:void 0,o=l>2?u[2]:void 0;if(i=t.length>3&&typeof i=="function"?(l--,i):void 0,o&&Kk(u[0],u[1],o))i=l<3?void 0:i,l=1;e=Object(e);while(++a<l){var d=u[a];if(d)t(e,d,a,i)}return e})}function $k(t){return function(e,u,a){var l=-1,i=Object(e),o=a(e),d=o.length;while(d--){var m=o[t?d:++l];if(u(i[m],m,i)===!1)break}return e}}function ma(t,e){var u=t.__data__;return Wk(e)?u[typeof e=="string"?"string":"hash"]:u.map}function Ji(t,e){var u=zs(t,e);return Ik(u)?u:void 0}function Xk(t){var e=be.call(t,k0),u=t[k0];try{t[k0]=void 0;var a=!0}catch(i){}var l=Zn.call(t);if(a)if(e)t[k0]=u;else delete t[k0];return l}function Jk(t){return typeof t.constructor=="function"&&!On(t)?Zs(Tn(t)):{}}function Sn(t,e){var u=typeof t;return e=e==null?Un:e,!!e&&(u=="number"||u!="symbol"&&Ks.test(t))&&(t>-1&&t%1==0&&t<e)}function Kk(t,e,u){if(!h0(u))return!1;var a=typeof e;if(a=="number"?Ki(u)&&Sn(e,u.length):a=="string"&&(e in u))return na(u[e],t);return!1}function Wk(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}function Vk(t){return!!Kn&&Kn in t}function On(t){var e=t&&t.constructor,u=typeof e=="function"&&e.prototype||ia;return t===u}function Yk(t){var e=[];if(t!=null)for(var u in Object(t))e.push(u);return e}function Hk(t){return Zn.call(t)}function zk(t,e,u){return e=zn(e===void 0?t.length-1:e,0),function(){var a=arguments,l=-1,i=zn(a.length-e,0),o=Array(i);while(++l<i)o[l]=a[e+l];l=-1;var d=Array(e+1);while(++l<e)d[l]=a[l];return d[e]=u(o),Vs(t,this,d)}}function qi(t,e){if(e==="constructor"&&typeof t[e]==="function")return;if(e=="__proto__")return;return t[e]}var bk=Mk(hk);function Mk(t){var e=0,u=0;return function(){var a=Ls(),l=es-(a-u);if(u=a,l>0){if(++e>=ts)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}function Uk(t){if(t!=null){try{return oa.call(t)}catch(e){}try{return t+""}catch(e){}}return""}function na(t,e){return t===e||t!==t&&e!==e}var Gi=bn(function(){return arguments}())?bn:function(t){return Lu(t)&&be.call(t,"callee")&&!js.call(t,"callee")},$i=Array.isArray;function Ki(t){return t!=null&&Cn(t.length)&&!Wi(t)}function Fk(t){return Lu(t)&&Ki(t)}var Pn=Ns||Lk;function Wi(t){if(!h0(t))return!1;var e=pa(t);return e==An||e==ds||e==as||e==_s}function Cn(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=Un}function h0(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}function Lu(t){return t!=null&&typeof t=="object"}function Ak(t){if(!Lu(t)||pa(t)!=jn)return!1;var e=Tn(t);if(e===null)return!0;var u=be.call(e,"constructor")&&e.constructor;return typeof u=="function"&&u instanceof u&&oa.call(u)==Fs}var yn=Jn?Hs(Jn):wk;function jk(t){return qk(t,t_(t))}function t_(t){return Ki(t)?rk(t,!0):sk(t)}var Dk=Gk(function(t,e,u){Rn(t,e,u)});function Nk(t){return function(){return t}}function e_(t){return t}function Lk(){return!1}R0.exports=Dk});var C,Yi,Y,qe=(t)=>{switch(typeof t){case"undefined":return Y.undefined;case"string":return Y.string;case"number":return Number.isNaN(t)?Y.nan:Y.number;case"boolean":return Y.boolean;case"function":return Y.function;case"bigint":return Y.bigint;case"symbol":return Y.symbol;case"object":if(Array.isArray(t))return Y.array;if(t===null)return Y.null;if(t.then&&typeof t.then==="function"&&t.catch&&typeof t.catch==="function")return Y.promise;if(typeof Map<"u"&&t instanceof Map)return Y.map;if(typeof Set<"u"&&t instanceof Set)return Y.set;if(typeof Date<"u"&&t instanceof Date)return Y.date;return Y.object;default:return Y.unknown}};var Zu=tt(()=>{(function(t){t.assertEqual=(l)=>{};function e(l){}t.assertIs=e;function u(l){throw Error()}t.assertNever=u,t.arrayToEnum=(l)=>{let i={};for(let o of l)i[o]=o;return i},t.getValidEnumValues=(l)=>{let i=t.objectKeys(l).filter((d)=>typeof l[l[d]]!=="number"),o={};for(let d of i)o[d]=l[d];return t.objectValues(o)},t.objectValues=(l)=>{return t.objectKeys(l).map(function(i){return l[i]})},t.objectKeys=typeof Object.keys==="function"?(l)=>Object.keys(l):(l)=>{let i=[];for(let o in l)if(Object.prototype.hasOwnProperty.call(l,o))i.push(o);return i},t.find=(l,i)=>{for(let o of l)if(i(o))return o;return},t.isInteger=typeof Number.isInteger==="function"?(l)=>Number.isInteger(l):(l)=>typeof l==="number"&&Number.isFinite(l)&&Math.floor(l)===l;function a(l,i=" | "){return l.map((o)=>typeof o==="string"?`'${o}'`:o).join(i)}t.joinValues=a,t.jsonStringifyReplacer=(l,i)=>{if(typeof i==="bigint")return i.toString();return i}})(C||(C={}));(function(t){t.mergeShapes=(e,u)=>{return{...e,...u}}})(Yi||(Yi={}));Y=C.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"])});var X,Zk=(t)=>{return JSON.stringify(t,null,2).replace(/"([^"]+)":/g,"$1:")},Dt;var _a=tt(()=>{Zu();X=C.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]);Dt=class Dt extends Error{get errors(){return this.issues}constructor(t){super();this.issues=[],this.addIssue=(u)=>{this.issues=[...this.issues,u]},this.addIssues=(u=[])=>{this.issues=[...this.issues,...u]};let e=new.target.prototype;if(Object.setPrototypeOf)Object.setPrototypeOf(this,e);else this.__proto__=e;this.name="ZodError",this.issues=t}format(t){let e=t||function(l){return l.message},u={_errors:[]},a=(l)=>{for(let i of l.issues)if(i.code==="invalid_union")i.unionErrors.map(a);else if(i.code==="invalid_return_type")a(i.returnTypeError);else if(i.code==="invalid_arguments")a(i.argumentsError);else if(i.path.length===0)u._errors.push(e(i));else{let o=u,d=0;while(d<i.path.length){let m=i.path[d];if(d!==i.path.length-1)o[m]=o[m]||{_errors:[]};else o[m]=o[m]||{_errors:[]},o[m]._errors.push(e(i));o=o[m],d++}}};return a(this),u}static assert(t){if(!(t instanceof Dt))throw Error(`Not a ZodError: ${t}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,C.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(t=(e)=>e.message){let e={},u=[];for(let a of this.issues)if(a.path.length>0){let l=a.path[0];e[l]=e[l]||[],e[l].push(t(a))}else u.push(t(a));return{formErrors:u,fieldErrors:e}}get formErrors(){return this.flatten()}};Dt.create=(t)=>{return new Dt(t)}});var Tk=(t,e)=>{let u;switch(t.code){case X.invalid_type:if(t.received===Y.undefined)u="Required";else u=`Expected ${t.expected}, received ${t.received}`;break;case X.invalid_literal:u=`Invalid literal value, expected ${JSON.stringify(t.expected,C.jsonStringifyReplacer)}`;break;case X.unrecognized_keys:u=`Unrecognized key(s) in object: ${C.joinValues(t.keys,", ")}`;break;case X.invalid_union:u="Invalid input";break;case X.invalid_union_discriminator:u=`Invalid discriminator value. Expected ${C.joinValues(t.options)}`;break;case X.invalid_enum_value:u=`Invalid enum value. Expected ${C.joinValues(t.options)}, received '${t.received}'`;break;case X.invalid_arguments:u="Invalid function arguments";break;case X.invalid_return_type:u="Invalid function return type";break;case X.invalid_date:u="Invalid date";break;case X.invalid_string:if(typeof t.validation==="object")if("includes"in t.validation){if(u=`Invalid input: must include "${t.validation.includes}"`,typeof t.validation.position==="number")u=`${u} at one or more positions greater than or equal to ${t.validation.position}`}else if("startsWith"in t.validation)u=`Invalid input: must start with "${t.validation.startsWith}"`;else if("endsWith"in t.validation)u=`Invalid input: must end with "${t.validation.endsWith}"`;else C.assertNever(t.validation);else if(t.validation!=="regex")u=`Invalid ${t.validation}`;else u="Invalid";break;case X.too_small:if(t.type==="array")u=`Array must contain ${t.exact?"exactly":t.inclusive?"at least":"more than"} ${t.minimum} element(s)`;else if(t.type==="string")u=`String must contain ${t.exact?"exactly":t.inclusive?"at least":"over"} ${t.minimum} character(s)`;else if(t.type==="number")u=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`;else if(t.type==="bigint")u=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`;else if(t.type==="date")u=`Date must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(t.minimum))}`;else u="Invalid input";break;case X.too_big:if(t.type==="array")u=`Array must contain ${t.exact?"exactly":t.inclusive?"at most":"less than"} ${t.maximum} element(s)`;else if(t.type==="string")u=`String must contain ${t.exact?"exactly":t.inclusive?"at most":"under"} ${t.maximum} character(s)`;else if(t.type==="number")u=`Number must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`;else if(t.type==="bigint")u=`BigInt must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`;else if(t.type==="date")u=`Date must be ${t.exact?"exactly":t.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(t.maximum))}`;else u="Invalid input";break;case X.custom:u="Invalid input";break;case X.invalid_intersection_types:u="Intersection results could not be merged";break;case X.not_multiple_of:u=`Number must be a multiple of ${t.multipleOf}`;break;case X.not_finite:u="Number must be finite";break;default:u=e.defaultError,C.assertNever(t)}return{message:u}},Ue;var Hi=tt(()=>{_a();Zu();Ue=Tk});function Ek(t){u_=t}function P0(){return u_}var u_;var ra=tt(()=>{Hi();u_=Ue});function U(t,e){let u=P0(),a=Tu({issueData:e,data:t.data,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,u,u===Ue?void 0:Ue].filter((l)=>!!l)});t.common.issues.push(a)}class Vt{constructor(){this.value="valid"}dirty(){if(this.value==="valid")this.value="dirty"}abort(){if(this.value!=="aborted")this.value="aborted"}static mergeArray(t,e){let u=[];for(let a of e){if(a.status==="aborted")return Z;if(a.status==="dirty")t.dirty();u.push(a.value)}return{status:t.value,value:u}}static async mergeObjectAsync(t,e){let u=[];for(let a of e){let l=await a.key,i=await a.value;u.push({key:l,value:i})}return Vt.mergeObjectSync(t,u)}static mergeObjectSync(t,e){let u={};for(let a of e){let{key:l,value:i}=a;if(l.status==="aborted")return Z;if(i.status==="aborted")return Z;if(l.status==="dirty")t.dirty();if(i.status==="dirty")t.dirty();if(l.value!=="__proto__"&&(typeof i.value<"u"||a.alwaysSet))u[l.value]=i.value}return{status:t.value,value:u}}}var Tu=(t)=>{let{data:e,path:u,errorMaps:a,issueData:l}=t,i=[...u,...l.path||[]],o={...l,path:i};if(l.message!==void 0)return{...l,path:i,message:l.message};let d="",m=a.filter((_)=>!!_).slice().reverse();for(let _ of m)d=_(o,{data:e,defaultError:d}).message;return{...l,path:i,message:d}},Rk,Z,g0=(t)=>({status:"dirty",value:t}),bt=(t)=>({status:"valid",value:t}),ca=(t)=>t.status==="aborted",xa=(t)=>t.status==="dirty",Ee=(t)=>t.status==="valid",C0=(t)=>typeof Promise<"u"&&t instanceof Promise;var zi=tt(()=>{ra();Hi();Rk=[];Z=Object.freeze({status:"aborted"})});var a_=()=>{};var D;var l_=tt(()=>{(function(t){t.errToObj=(e)=>typeof e==="string"?{message:e}:e||{},t.toString=(e)=>typeof e==="string"?e:e?.message})(D||(D={}))});class se{constructor(t,e,u,a){this._cachedPath=[],this.parent=t,this.data=e,this._path=u,this._key=a}get path(){if(!this._cachedPath.length)if(Array.isArray(this._key))this._cachedPath.push(...this._path,...this._key);else this._cachedPath.push(...this._path,this._key);return this._cachedPath}}function S(t){if(!t)return{};let{errorMap:e,invalid_type_error:u,required_error:a,description:l}=t;if(e&&(u||a))throw Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);if(e)return{errorMap:e,description:l};return{errorMap:(o,d)=>{let{message:m}=t;if(o.code==="invalid_enum_value")return{message:m??d.defaultError};if(typeof d.data>"u")return{message:m??a??d.defaultError};if(o.code!=="invalid_type")return{message:d.defaultError};return{message:m??u??d.defaultError}},description:l}}class O{get description(){return this._def.description}_getType(t){return qe(t.data)}_getOrReturnCtx(t,e){return e||{common:t.parent.common,data:t.data,parsedType:qe(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}_processInputParams(t){return{status:new Vt,ctx:{common:t.parent.common,data:t.data,parsedType:qe(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}}_parseSync(t){let e=this._parse(t);if(C0(e))throw Error("Synchronous parse encountered promise.");return e}_parseAsync(t){let e=this._parse(t);return Promise.resolve(e)}parse(t,e){let u=this.safeParse(t,e);if(u.success)return u.data;throw u.error}safeParse(t,e){let u={common:{issues:[],async:e?.async??!1,contextualErrorMap:e?.errorMap},path:e?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:qe(t)},a=this._parseSync({data:t,path:u.path,parent:u});return i_(u,a)}"~validate"(t){let e={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:qe(t)};if(!this["~standard"].async)try{let u=this._parseSync({data:t,path:[],parent:e});return Ee(u)?{value:u.value}:{issues:e.common.issues}}catch(u){if(u?.message?.toLowerCase()?.includes("encountered"))this["~standard"].async=!0;e.common={issues:[],async:!0}}return this._parseAsync({data:t,path:[],parent:e}).then((u)=>Ee(u)?{value:u.value}:{issues:e.common.issues})}async parseAsync(t,e){let u=await this.safeParseAsync(t,e);if(u.success)return u.data;throw u.error}async safeParseAsync(t,e){let u={common:{issues:[],contextualErrorMap:e?.errorMap,async:!0},path:e?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:qe(t)},a=this._parse({data:t,path:u.path,parent:u}),l=await(C0(a)?a:Promise.resolve(a));return i_(u,l)}refine(t,e){let u=(a)=>{if(typeof e==="string"||typeof e>"u")return{message:e};else if(typeof e==="function")return e(a);else return e};return this._refinement((a,l)=>{let i=t(a),o=()=>l.addIssue({code:X.custom,...u(a)});if(typeof Promise<"u"&&i instanceof Promise)return i.then((d)=>{if(!d)return o(),!1;else return!0});if(!i)return o(),!1;else return!0})}refinement(t,e){return this._refinement((u,a)=>{if(!t(u))return a.addIssue(typeof e==="function"?e(u,a):e),!1;else return!0})}_refinement(t){return new ke({schema:this,typeName:T.ZodEffects,effect:{type:"refinement",refinement:t}})}superRefine(t){return this._refinement(t)}constructor(t){this.spa=this.safeParseAsync,this._def=t,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:(e)=>this["~validate"](e)}}optional(){return we.create(this,this._def)}nullable(){return Ae.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return Ie.create(this)}promise(){return q0.create(this,this._def)}or(t){return lu.create([this,t],this._def)}and(t){return iu.create(this,t,this._def)}transform(t){return new ke({...S(this._def),schema:this,typeName:T.ZodEffects,effect:{type:"transform",transform:t}})}default(t){let e=typeof t==="function"?t:()=>t;return new mu({...S(this._def),innerType:this,defaultValue:e,typeName:T.ZodDefault})}brand(){return new wa({typeName:T.ZodBranded,type:this,...S(this._def)})}catch(t){let e=typeof t==="function"?t:()=>t;return new nu({...S(this._def),innerType:this,catchValue:e,typeName:T.ZodCatch})}describe(t){return new this.constructor({...this._def,description:t})}pipe(t){return Cu.create(this,t)}readonly(){return _u.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}function p_(t){let e="[0-5]\\d";if(t.precision)e=`${e}\\.\\d{${t.precision}}`;else if(t.precision==null)e=`${e}(\\.\\d+)?`;let u=t.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${u}`}function rf(t){return new RegExp(`^${p_(t)}$`)}function m_(t){let e=`${d_}T${p_(t)}`,u=[];if(u.push(t.local?"Z?":"Z"),t.offset)u.push("([+-]\\d{2}:?\\d{2})");return e=`${e}(${u.join("|")})`,new RegExp(`^${e}$`)}function cf(t,e){if((e==="v4"||!e)&&lf.test(t))return!0;if((e==="v6"||!e)&&df.test(t))return!0;return!1}function xf(t,e){if(!tf.test(t))return!1;try{let[u]=t.split(".");if(!u)return!1;let a=u.replace(/-/g,"+").replace(/_/g,"/").padEnd(u.length+(4-u.length%4)%4,"="),l=JSON.parse(atob(a));if(typeof l!=="object"||l===null)return!1;if("typ"in l&&l?.typ!=="JWT")return!1;if(!l.alg)return!1;if(e&&l.alg!==e)return!1;return!0}catch{return!1}}function If(t,e){if((e==="v4"||!e)&&of.test(t))return!0;if((e==="v6"||!e)&&pf.test(t))return!0;return!1}function wf(t,e){let u=(t.toString().split(".")[1]||"").length,a=(e.toString().split(".")[1]||"").length,l=u>a?u:a,i=Number.parseInt(t.toFixed(l).replace(".","")),o=Number.parseInt(e.toFixed(l).replace(".",""));return i%o/10**l}function y0(t){if(t instanceof st){let e={};for(let u in t.shape){let a=t.shape[u];e[u]=we.create(y0(a))}return new st({...t._def,shape:()=>e})}else if(t instanceof Ie)return new Ie({...t._def,type:y0(t.element)});else if(t instanceof we)return we.create(y0(t.unwrap()));else if(t instanceof Ae)return Ae.create(y0(t.unwrap()));else if(t instanceof $e)return $e.create(t.items.map((e)=>y0(e)));else return t}function Mi(t,e){let u=qe(t),a=qe(e);if(t===e)return{valid:!0,data:t};else if(u===Y.object&&a===Y.object){let l=C.objectKeys(e),i=C.objectKeys(t).filter((d)=>l.indexOf(d)!==-1),o={...t,...e};for(let d of i){let m=Mi(t[d],e[d]);if(!m.valid)return{valid:!1};o[d]=m.data}return{valid:!0,data:o}}else if(u===Y.array&&a===Y.array){if(t.length!==e.length)return{valid:!1};let l=[];for(let i=0;i<t.length;i++){let o=t[i],d=e[i],m=Mi(o,d);if(!m.valid)return{valid:!1};l.push(m.data)}return{valid:!0,data:l}}else if(u===Y.date&&a===Y.date&&+t===+e)return{valid:!0,data:t};else return{valid:!1}}function n_(t,e){return new Pe({values:t,typeName:T.ZodEnum,...S(e)})}function o_(t,e){let u=typeof t==="function"?t(e):typeof t==="string"?{message:t}:t;return typeof u==="string"?{message:u}:u}function __(t,e={},u){if(t)return Q0.create().superRefine((a,l)=>{let i=t(a);if(i instanceof Promise)return i.then((o)=>{if(!o){let d=o_(e,a),m=d.fatal??u??!0;l.addIssue({code:"custom",...d,fatal:m})}});if(!i){let o=o_(e,a),d=o.fatal??u??!0;l.addIssue({code:"custom",...o,fatal:d})}return});return Q0.create()}var i_=(t,e)=>{if(Ee(e))return{success:!0,data:e.value};else{if(!t.common.issues.length)throw Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let u=new Dt(t.common.issues);return this._error=u,this._error}}}},Sk,Ok,Pk,Ck,yk,tf,ef,uf,af="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",bi,lf,of,df,pf,mf,nf,d_="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",_f,xe,Se,Oe,eu,B0,Eu,uu,au,Q0,Re,Ge,Ru,Ie,st,lu,Fe=(t)=>{if(t instanceof ou)return Fe(t.schema);else if(t instanceof ke)return Fe(t.innerType());else if(t instanceof du)return[t.value];else if(t instanceof Pe)return t.options;else if(t instanceof pu)return C.objectValues(t.enum);else if(t instanceof mu)return Fe(t._def.innerType);else if(t instanceof uu)return[void 0];else if(t instanceof au)return[null];else if(t instanceof we)return[void 0,...Fe(t.unwrap())];else if(t instanceof Ae)return[null,...Fe(t.unwrap())];else if(t instanceof wa)return Fe(t.unwrap());else if(t instanceof _u)return Fe(t.unwrap());else if(t instanceof nu)return Fe(t._def.innerType);else return[]},Ia,iu,$e,Su,Ou,v0,tu,ou,du,Pe,pu,q0,ke,we,Ae,mu,nu,Pu,sf,wa,Cu,_u,kf,T,ff=(t,e={message:`Input not instance of ${t.name}`})=>__((u)=>u instanceof t,e),r_,c_,hf,gf,x_,Bf,Qf,vf,qf,Gf,$f,Xf,Jf,Kf,Wf,Vf,Yf,Hf,zf,bf,Mf,Uf,Ff,Af,jf,Df,Nf,Lf,Zf,Tf,Ef,Rf,Sf,Of,Pf=()=>r_().optional(),Cf=()=>c_().optional(),yf=()=>x_().optional(),th,eh;var I_=tt(()=>{_a();ra();l_();zi();Zu();Sk=/^c[^\s-]{8,}$/i,Ok=/^[0-9a-z]+$/,Pk=/^[0-9A-HJKMNP-TV-Z]{26}$/i,Ck=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,yk=/^[a-z0-9_-]{21}$/i,tf=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,ef=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,uf=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,lf=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,of=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,df=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,pf=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,mf=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,nf=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,_f=new RegExp(`^${d_}$`);xe=class xe extends O{_parse(t){if(this._def.coerce)t.data=String(t.data);if(this._getType(t)!==Y.string){let l=this._getOrReturnCtx(t);return U(l,{code:X.invalid_type,expected:Y.string,received:l.parsedType}),Z}let u=new Vt,a=void 0;for(let l of this._def.checks)if(l.kind==="min"){if(t.data.length<l.value)a=this._getOrReturnCtx(t,a),U(a,{code:X.too_small,minimum:l.value,type:"string",inclusive:!0,exact:!1,message:l.message}),u.dirty()}else if(l.kind==="max"){if(t.data.length>l.value)a=this._getOrReturnCtx(t,a),U(a,{code:X.too_big,maximum:l.value,type:"string",inclusive:!0,exact:!1,message:l.message}),u.dirty()}else if(l.kind==="length"){let i=t.data.length>l.value,o=t.data.length<l.value;if(i||o){if(a=this._getOrReturnCtx(t,a),i)U(a,{code:X.too_big,maximum:l.value,type:"string",inclusive:!0,exact:!0,message:l.message});else if(o)U(a,{code:X.too_small,minimum:l.value,type:"string",inclusive:!0,exact:!0,message:l.message});u.dirty()}}else if(l.kind==="email"){if(!uf.test(t.data))a=this._getOrReturnCtx(t,a),U(a,{validation:"email",code:X.invalid_string,message:l.message}),u.dirty()}else if(l.kind==="emoji"){if(!bi)bi=new RegExp(af,"u");if(!bi.test(t.data))a=this._getOrReturnCtx(t,a),U(a,{validation:"emoji",code:X.invalid_string,message:l.message}),u.dirty()}else if(l.kind==="uuid"){if(!Ck.test(t.data))a=this._getOrReturnCtx(t,a),U(a,{validation:"uuid",code:X.invalid_string,message:l.message}),u.dirty()}else if(l.kind==="nanoid"){if(!yk.test(t.data))a=this._getOrReturnCtx(t,a),U(a,{validation:"nanoid",code:X.invalid_string,message:l.message}),u.dirty()}else if(l.kind==="cuid"){if(!Sk.test(t.data))a=this._getOrReturnCtx(t,a),U(a,{validation:"cuid",code:X.invalid_string,message:l.message}),u.dirty()}else if(l.kind==="cuid2"){if(!Ok.test(t.data))a=this._getOrReturnCtx(t,a),U(a,{validation:"cuid2",code:X.invalid_string,message:l.message}),u.dirty()}else if(l.kind==="ulid"){if(!Pk.test(t.data))a=this._getOrReturnCtx(t,a),U(a,{validation:"ulid",code:X.invalid_string,message:l.message}),u.dirty()}else if(l.kind==="url")try{new URL(t.data)}catch{a=this._getOrReturnCtx(t,a),U(a,{validation:"url",code:X.invalid_string,message:l.message}),u.dirty()}else if(l.kind==="regex"){if(l.regex.lastIndex=0,!l.regex.test(t.data))a=this._getOrReturnCtx(t,a),U(a,{validation:"regex",code:X.invalid_string,message:l.message}),u.dirty()}else if(l.kind==="trim")t.data=t.data.trim();else if(l.kind==="includes"){if(!t.data.includes(l.value,l.position))a=this._getOrReturnCtx(t,a),U(a,{code:X.invalid_string,validation:{includes:l.value,position:l.position},message:l.message}),u.dirty()}else if(l.kind==="toLowerCase")t.data=t.data.toLowerCase();else if(l.kind==="toUpperCase")t.data=t.data.toUpperCase();else if(l.kind==="startsWith"){if(!t.data.startsWith(l.value))a=this._getOrReturnCtx(t,a),U(a,{code:X.invalid_string,validation:{startsWith:l.value},message:l.message}),u.dirty()}else if(l.kind==="endsWith"){if(!t.data.endsWith(l.value))a=this._getOrReturnCtx(t,a),U(a,{code:X.invalid_string,validation:{endsWith:l.value},message:l.message}),u.dirty()}else if(l.kind==="datetime"){if(!m_(l).test(t.data))a=this._getOrReturnCtx(t,a),U(a,{code:X.invalid_string,validation:"datetime",message:l.message}),u.dirty()}else if(l.kind==="date"){if(!_f.test(t.data))a=this._getOrReturnCtx(t,a),U(a,{code:X.invalid_string,validation:"date",message:l.message}),u.dirty()}else if(l.kind==="time"){if(!rf(l).test(t.data))a=this._getOrReturnCtx(t,a),U(a,{code:X.invalid_string,validation:"time",message:l.message}),u.dirty()}else if(l.kind==="duration"){if(!ef.test(t.data))a=this._getOrReturnCtx(t,a),U(a,{validation:"duration",code:X.invalid_string,message:l.message}),u.dirty()}else if(l.kind==="ip"){if(!cf(t.data,l.version))a=this._getOrReturnCtx(t,a),U(a,{validation:"ip",code:X.invalid_string,message:l.message}),u.dirty()}else if(l.kind==="jwt"){if(!xf(t.data,l.alg))a=this._getOrReturnCtx(t,a),U(a,{validation:"jwt",code:X.invalid_string,message:l.message}),u.dirty()}else if(l.kind==="cidr"){if(!If(t.data,l.version))a=this._getOrReturnCtx(t,a),U(a,{validation:"cidr",code:X.invalid_string,message:l.message}),u.dirty()}else if(l.kind==="base64"){if(!mf.test(t.data))a=this._getOrReturnCtx(t,a),U(a,{validation:"base64",code:X.invalid_string,message:l.message}),u.dirty()}else if(l.kind==="base64url"){if(!nf.test(t.data))a=this._getOrReturnCtx(t,a),U(a,{validation:"base64url",code:X.invalid_string,message:l.message}),u.dirty()}else C.assertNever(l);return{status:u.value,value:t.data}}_regex(t,e,u){return this.refinement((a)=>t.test(a),{validation:e,code:X.invalid_string,...D.errToObj(u)})}_addCheck(t){return new xe({...this._def,checks:[...this._def.checks,t]})}email(t){return this._addCheck({kind:"email",...D.errToObj(t)})}url(t){return this._addCheck({kind:"url",...D.errToObj(t)})}emoji(t){return this._addCheck({kind:"emoji",...D.errToObj(t)})}uuid(t){return this._addCheck({kind:"uuid",...D.errToObj(t)})}nanoid(t){return this._addCheck({kind:"nanoid",...D.errToObj(t)})}cuid(t){return this._addCheck({kind:"cuid",...D.errToObj(t)})}cuid2(t){return this._addCheck({kind:"cuid2",...D.errToObj(t)})}ulid(t){return this._addCheck({kind:"ulid",...D.errToObj(t)})}base64(t){return this._addCheck({kind:"base64",...D.errToObj(t)})}base64url(t){return this._addCheck({kind:"base64url",...D.errToObj(t)})}jwt(t){return this._addCheck({kind:"jwt",...D.errToObj(t)})}ip(t){return this._addCheck({kind:"ip",...D.errToObj(t)})}cidr(t){return this._addCheck({kind:"cidr",...D.errToObj(t)})}datetime(t){if(typeof t==="string")return this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:t});return this._addCheck({kind:"datetime",precision:typeof t?.precision>"u"?null:t?.precision,offset:t?.offset??!1,local:t?.local??!1,...D.errToObj(t?.message)})}date(t){return this._addCheck({kind:"date",message:t})}time(t){if(typeof t==="string")return this._addCheck({kind:"time",precision:null,message:t});return this._addCheck({kind:"time",precision:typeof t?.precision>"u"?null:t?.precision,...D.errToObj(t?.message)})}duration(t){return this._addCheck({kind:"duration",...D.errToObj(t)})}regex(t,e){return this._addCheck({kind:"regex",regex:t,...D.errToObj(e)})}includes(t,e){return this._addCheck({kind:"includes",value:t,position:e?.position,...D.errToObj(e?.message)})}startsWith(t,e){return this._addCheck({kind:"startsWith",value:t,...D.errToObj(e)})}endsWith(t,e){return this._addCheck({kind:"endsWith",value:t,...D.errToObj(e)})}min(t,e){return this._addCheck({kind:"min",value:t,...D.errToObj(e)})}max(t,e){return this._addCheck({kind:"max",value:t,...D.errToObj(e)})}length(t,e){return this._addCheck({kind:"length",value:t,...D.errToObj(e)})}nonempty(t){return this.min(1,D.errToObj(t))}trim(){return new xe({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new xe({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new xe({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find((t)=>t.kind==="datetime")}get isDate(){return!!this._def.checks.find((t)=>t.kind==="date")}get isTime(){return!!this._def.checks.find((t)=>t.kind==="time")}get isDuration(){return!!this._def.checks.find((t)=>t.kind==="duration")}get isEmail(){return!!this._def.checks.find((t)=>t.kind==="email")}get isURL(){return!!this._def.checks.find((t)=>t.kind==="url")}get isEmoji(){return!!this._def.checks.find((t)=>t.kind==="emoji")}get isUUID(){return!!this._def.checks.find((t)=>t.kind==="uuid")}get isNANOID(){return!!this._def.checks.find((t)=>t.kind==="nanoid")}get isCUID(){return!!this._def.checks.find((t)=>t.kind==="cuid")}get isCUID2(){return!!this._def.checks.find((t)=>t.kind==="cuid2")}get isULID(){return!!this._def.checks.find((t)=>t.kind==="ulid")}get isIP(){return!!this._def.checks.find((t)=>t.kind==="ip")}get isCIDR(){return!!this._def.checks.find((t)=>t.kind==="cidr")}get isBase64(){return!!this._def.checks.find((t)=>t.kind==="base64")}get isBase64url(){return!!this._def.checks.find((t)=>t.kind==="base64url")}get minLength(){let t=null;for(let e of this._def.checks)if(e.kind==="min"){if(t===null||e.value>t)t=e.value}return t}get maxLength(){let t=null;for(let e of this._def.checks)if(e.kind==="max"){if(t===null||e.value<t)t=e.value}return t}};xe.create=(t)=>{return new xe({checks:[],typeName:T.ZodString,coerce:t?.coerce??!1,...S(t)})};Se=class Se extends O{constructor(){super(...arguments);this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(t){if(this._def.coerce)t.data=Number(t.data);if(this._getType(t)!==Y.number){let l=this._getOrReturnCtx(t);return U(l,{code:X.invalid_type,expected:Y.number,received:l.parsedType}),Z}let u=void 0,a=new Vt;for(let l of this._def.checks)if(l.kind==="int"){if(!C.isInteger(t.data))u=this._getOrReturnCtx(t,u),U(u,{code:X.invalid_type,expected:"integer",received:"float",message:l.message}),a.dirty()}else if(l.kind==="min"){if(l.inclusive?t.data<l.value:t.data<=l.value)u=this._getOrReturnCtx(t,u),U(u,{code:X.too_small,minimum:l.value,type:"number",inclusive:l.inclusive,exact:!1,message:l.message}),a.dirty()}else if(l.kind==="max"){if(l.inclusive?t.data>l.value:t.data>=l.value)u=this._getOrReturnCtx(t,u),U(u,{code:X.too_big,maximum:l.value,type:"number",inclusive:l.inclusive,exact:!1,message:l.message}),a.dirty()}else if(l.kind==="multipleOf"){if(wf(t.data,l.value)!==0)u=this._getOrReturnCtx(t,u),U(u,{code:X.not_multiple_of,multipleOf:l.value,message:l.message}),a.dirty()}else if(l.kind==="finite"){if(!Number.isFinite(t.data))u=this._getOrReturnCtx(t,u),U(u,{code:X.not_finite,message:l.message}),a.dirty()}else C.assertNever(l);return{status:a.value,value:t.data}}gte(t,e){return this.setLimit("min",t,!0,D.toString(e))}gt(t,e){return this.setLimit("min",t,!1,D.toString(e))}lte(t,e){return this.setLimit("max",t,!0,D.toString(e))}lt(t,e){return this.setLimit("max",t,!1,D.toString(e))}setLimit(t,e,u,a){return new Se({...this._def,checks:[...this._def.checks,{kind:t,value:e,inclusive:u,message:D.toString(a)}]})}_addCheck(t){return new Se({...this._def,checks:[...this._def.checks,t]})}int(t){return this._addCheck({kind:"int",message:D.toString(t)})}positive(t){return this._addCheck({kind:"min",value:0,inclusive:!1,message:D.toString(t)})}negative(t){return this._addCheck({kind:"max",value:0,inclusive:!1,message:D.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:0,inclusive:!0,message:D.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:0,inclusive:!0,message:D.toString(t)})}multipleOf(t,e){return this._addCheck({kind:"multipleOf",value:t,message:D.toString(e)})}finite(t){return this._addCheck({kind:"finite",message:D.toString(t)})}safe(t){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:D.toString(t)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:D.toString(t)})}get minValue(){let t=null;for(let e of this._def.checks)if(e.kind==="min"){if(t===null||e.value>t)t=e.value}return t}get maxValue(){let t=null;for(let e of this._def.checks)if(e.kind==="max"){if(t===null||e.value<t)t=e.value}return t}get isInt(){return!!this._def.checks.find((t)=>t.kind==="int"||t.kind==="multipleOf"&&C.isInteger(t.value))}get isFinite(){let t=null,e=null;for(let u of this._def.checks)if(u.kind==="finite"||u.kind==="int"||u.kind==="multipleOf")return!0;else if(u.kind==="min"){if(e===null||u.value>e)e=u.value}else if(u.kind==="max"){if(t===null||u.value<t)t=u.value}return Number.isFinite(e)&&Number.isFinite(t)}};Se.create=(t)=>{return new Se({checks:[],typeName:T.ZodNumber,coerce:t?.coerce||!1,...S(t)})};Oe=class Oe extends O{constructor(){super(...arguments);this.min=this.gte,this.max=this.lte}_parse(t){if(this._def.coerce)try{t.data=BigInt(t.data)}catch{return this._getInvalidInput(t)}if(this._getType(t)!==Y.bigint)return this._getInvalidInput(t);let u=void 0,a=new Vt;for(let l of this._def.checks)if(l.kind==="min"){if(l.inclusive?t.data<l.value:t.data<=l.value)u=this._getOrReturnCtx(t,u),U(u,{code:X.too_small,type:"bigint",minimum:l.value,inclusive:l.inclusive,message:l.message}),a.dirty()}else if(l.kind==="max"){if(l.inclusive?t.data>l.value:t.data>=l.value)u=this._getOrReturnCtx(t,u),U(u,{code:X.too_big,type:"bigint",maximum:l.value,inclusive:l.inclusive,message:l.message}),a.dirty()}else if(l.kind==="multipleOf"){if(t.data%l.value!==BigInt(0))u=this._getOrReturnCtx(t,u),U(u,{code:X.not_multiple_of,multipleOf:l.value,message:l.message}),a.dirty()}else C.assertNever(l);return{status:a.value,value:t.data}}_getInvalidInput(t){let e=this._getOrReturnCtx(t);return U(e,{code:X.invalid_type,expected:Y.bigint,received:e.parsedType}),Z}gte(t,e){return this.setLimit("min",t,!0,D.toString(e))}gt(t,e){return this.setLimit("min",t,!1,D.toString(e))}lte(t,e){return this.setLimit("max",t,!0,D.toString(e))}lt(t,e){return this.setLimit("max",t,!1,D.toString(e))}setLimit(t,e,u,a){return new Oe({...this._def,checks:[...this._def.checks,{kind:t,value:e,inclusive:u,message:D.toString(a)}]})}_addCheck(t){return new Oe({...this._def,checks:[...this._def.checks,t]})}positive(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:D.toString(t)})}negative(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:D.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:D.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:D.toString(t)})}multipleOf(t,e){return this._addCheck({kind:"multipleOf",value:t,message:D.toString(e)})}get minValue(){let t=null;for(let e of this._def.checks)if(e.kind==="min"){if(t===null||e.value>t)t=e.value}return t}get maxValue(){let t=null;for(let e of this._def.checks)if(e.kind==="max"){if(t===null||e.value<t)t=e.value}return t}};Oe.create=(t)=>{return new Oe({checks:[],typeName:T.ZodBigInt,coerce:t?.coerce??!1,...S(t)})};eu=class eu extends O{_parse(t){if(this._def.coerce)t.data=Boolean(t.data);if(this._getType(t)!==Y.boolean){let u=this._getOrReturnCtx(t);return U(u,{code:X.invalid_type,expected:Y.boolean,received:u.parsedType}),Z}return bt(t.data)}};eu.create=(t)=>{return new eu({typeName:T.ZodBoolean,coerce:t?.coerce||!1,...S(t)})};B0=class B0 extends O{_parse(t){if(this._def.coerce)t.data=new Date(t.data);if(this._getType(t)!==Y.date){let l=this._getOrReturnCtx(t);return U(l,{code:X.invalid_type,expected:Y.date,received:l.parsedType}),Z}if(Number.isNaN(t.data.getTime())){let l=this._getOrReturnCtx(t);return U(l,{code:X.invalid_date}),Z}let u=new Vt,a=void 0;for(let l of this._def.checks)if(l.kind==="min"){if(t.data.getTime()<l.value)a=this._getOrReturnCtx(t,a),U(a,{code:X.too_small,message:l.message,inclusive:!0,exact:!1,minimum:l.value,type:"date"}),u.dirty()}else if(l.kind==="max"){if(t.data.getTime()>l.value)a=this._getOrReturnCtx(t,a),U(a,{code:X.too_big,message:l.message,inclusive:!0,exact:!1,maximum:l.value,type:"date"}),u.dirty()}else C.assertNever(l);return{status:u.value,value:new Date(t.data.getTime())}}_addCheck(t){return new B0({...this._def,checks:[...this._def.checks,t]})}min(t,e){return this._addCheck({kind:"min",value:t.getTime(),message:D.toString(e)})}max(t,e){return this._addCheck({kind:"max",value:t.getTime(),message:D.toString(e)})}get minDate(){let t=null;for(let e of this._def.checks)if(e.kind==="min"){if(t===null||e.value>t)t=e.value}return t!=null?new Date(t):null}get maxDate(){let t=null;for(let e of this._def.checks)if(e.kind==="max"){if(t===null||e.value<t)t=e.value}return t!=null?new Date(t):null}};B0.create=(t)=>{return new B0({checks:[],coerce:t?.coerce||!1,typeName:T.ZodDate,...S(t)})};Eu=class Eu extends O{_parse(t){if(this._getType(t)!==Y.symbol){let u=this._getOrReturnCtx(t);return U(u,{code:X.invalid_type,expected:Y.symbol,received:u.parsedType}),Z}return bt(t.data)}};Eu.create=(t)=>{return new Eu({typeName:T.ZodSymbol,...S(t)})};uu=class uu extends O{_parse(t){if(this._getType(t)!==Y.undefined){let u=this._getOrReturnCtx(t);return U(u,{code:X.invalid_type,expected:Y.undefined,received:u.parsedType}),Z}return bt(t.data)}};uu.create=(t)=>{return new uu({typeName:T.ZodUndefined,...S(t)})};au=class au extends O{_parse(t){if(this._getType(t)!==Y.null){let u=this._getOrReturnCtx(t);return U(u,{code:X.invalid_type,expected:Y.null,received:u.parsedType}),Z}return bt(t.data)}};au.create=(t)=>{return new au({typeName:T.ZodNull,...S(t)})};Q0=class Q0 extends O{constructor(){super(...arguments);this._any=!0}_parse(t){return bt(t.data)}};Q0.create=(t)=>{return new Q0({typeName:T.ZodAny,...S(t)})};Re=class Re extends O{constructor(){super(...arguments);this._unknown=!0}_parse(t){return bt(t.data)}};Re.create=(t)=>{return new Re({typeName:T.ZodUnknown,...S(t)})};Ge=class Ge extends O{_parse(t){let e=this._getOrReturnCtx(t);return U(e,{code:X.invalid_type,expected:Y.never,received:e.parsedType}),Z}};Ge.create=(t)=>{return new Ge({typeName:T.ZodNever,...S(t)})};Ru=class Ru extends O{_parse(t){if(this._getType(t)!==Y.undefined){let u=this._getOrReturnCtx(t);return U(u,{code:X.invalid_type,expected:Y.void,received:u.parsedType}),Z}return bt(t.data)}};Ru.create=(t)=>{return new Ru({typeName:T.ZodVoid,...S(t)})};Ie=class Ie extends O{_parse(t){let{ctx:e,status:u}=this._processInputParams(t),a=this._def;if(e.parsedType!==Y.array)return U(e,{code:X.invalid_type,expected:Y.array,received:e.parsedType}),Z;if(a.exactLength!==null){let i=e.data.length>a.exactLength.value,o=e.data.length<a.exactLength.value;if(i||o)U(e,{code:i?X.too_big:X.too_small,minimum:o?a.exactLength.value:void 0,maximum:i?a.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:a.exactLength.message}),u.dirty()}if(a.minLength!==null){if(e.data.length<a.minLength.value)U(e,{code:X.too_small,minimum:a.minLength.value,type:"array",inclusive:!0,exact:!1,message:a.minLength.message}),u.dirty()}if(a.maxLength!==null){if(e.data.length>a.maxLength.value)U(e,{code:X.too_big,maximum:a.maxLength.value,type:"array",inclusive:!0,exact:!1,message:a.maxLength.message}),u.dirty()}if(e.common.async)return Promise.all([...e.data].map((i,o)=>{return a.type._parseAsync(new se(e,i,e.path,o))})).then((i)=>{return Vt.mergeArray(u,i)});let l=[...e.data].map((i,o)=>{return a.type._parseSync(new se(e,i,e.path,o))});return Vt.mergeArray(u,l)}get element(){return this._def.type}min(t,e){return new Ie({...this._def,minLength:{value:t,message:D.toString(e)}})}max(t,e){return new Ie({...this._def,maxLength:{value:t,message:D.toString(e)}})}length(t,e){return new Ie({...this._def,exactLength:{value:t,message:D.toString(e)}})}nonempty(t){return this.min(1,t)}};Ie.create=(t,e)=>{return new Ie({type:t,minLength:null,maxLength:null,exactLength:null,typeName:T.ZodArray,...S(e)})};st=class st extends O{constructor(){super(...arguments);this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let t=this._def.shape(),e=C.objectKeys(t);return this._cached={shape:t,keys:e},this._cached}_parse(t){if(this._getType(t)!==Y.object){let m=this._getOrReturnCtx(t);return U(m,{code:X.invalid_type,expected:Y.object,received:m.parsedType}),Z}let{status:u,ctx:a}=this._processInputParams(t),{shape:l,keys:i}=this._getCached(),o=[];if(!(this._def.catchall instanceof Ge&&this._def.unknownKeys==="strip")){for(let m in a.data)if(!i.includes(m))o.push(m)}let d=[];for(let m of i){let _=l[m],n=a.data[m];d.push({key:{status:"valid",value:m},value:_._parse(new se(a,n,a.path,m)),alwaysSet:m in a.data})}if(this._def.catchall instanceof Ge){let m=this._def.unknownKeys;if(m==="passthrough")for(let _ of o)d.push({key:{status:"valid",value:_},value:{status:"valid",value:a.data[_]}});else if(m==="strict"){if(o.length>0)U(a,{code:X.unrecognized_keys,keys:o}),u.dirty()}else if(m==="strip");else throw Error("Internal ZodObject error: invalid unknownKeys value.")}else{let m=this._def.catchall;for(let _ of o){let n=a.data[_];d.push({key:{status:"valid",value:_},value:m._parse(new se(a,n,a.path,_)),alwaysSet:_ in a.data})}}if(a.common.async)return Promise.resolve().then(async()=>{let m=[];for(let _ of d){let n=await _.key,r=await _.value;m.push({key:n,value:r,alwaysSet:_.alwaysSet})}return m}).then((m)=>{return Vt.mergeObjectSync(u,m)});else return Vt.mergeObjectSync(u,d)}get shape(){return this._def.shape()}strict(t){return D.errToObj,new st({...this._def,unknownKeys:"strict",...t!==void 0?{errorMap:(e,u)=>{let a=this._def.errorMap?.(e,u).message??u.defaultError;if(e.code==="unrecognized_keys")return{message:D.errToObj(t).message??a};return{message:a}}}:{}})}strip(){return new st({...this._def,unknownKeys:"strip"})}passthrough(){return new st({...this._def,unknownKeys:"passthrough"})}extend(t){return new st({...this._def,shape:()=>({...this._def.shape(),...t})})}merge(t){return new st({unknownKeys:t._def.unknownKeys,catchall:t._def.catchall,shape:()=>({...this._def.shape(),...t._def.shape()}),typeName:T.ZodObject})}setKey(t,e){return this.augment({[t]:e})}catchall(t){return new st({...this._def,catchall:t})}pick(t){let e={};for(let u of C.objectKeys(t))if(t[u]&&this.shape[u])e[u]=this.shape[u];return new st({...this._def,shape:()=>e})}omit(t){let e={};for(let u of C.objectKeys(this.shape))if(!t[u])e[u]=this.shape[u];return new st({...this._def,shape:()=>e})}deepPartial(){return y0(this)}partial(t){let e={};for(let u of C.objectKeys(this.shape)){let a=this.shape[u];if(t&&!t[u])e[u]=a;else e[u]=a.optional()}return new st({...this._def,shape:()=>e})}required(t){let e={};for(let u of C.objectKeys(this.shape))if(t&&!t[u])e[u]=this.shape[u];else{let l=this.shape[u];while(l instanceof we)l=l._def.innerType;e[u]=l}return new st({...this._def,shape:()=>e})}keyof(){return n_(C.objectKeys(this.shape))}};st.create=(t,e)=>{return new st({shape:()=>t,unknownKeys:"strip",catchall:Ge.create(),typeName:T.ZodObject,...S(e)})};st.strictCreate=(t,e)=>{return new st({shape:()=>t,unknownKeys:"strict",catchall:Ge.create(),typeName:T.ZodObject,...S(e)})};st.lazycreate=(t,e)=>{return new st({shape:t,unknownKeys:"strip",catchall:Ge.create(),typeName:T.ZodObject,...S(e)})};lu=class lu extends O{_parse(t){let{ctx:e}=this._processInputParams(t),u=this._def.options;function a(l){for(let o of l)if(o.result.status==="valid")return o.result;for(let o of l)if(o.result.status==="dirty")return e.common.issues.push(...o.ctx.common.issues),o.result;let i=l.map((o)=>new Dt(o.ctx.common.issues));return U(e,{code:X.invalid_union,unionErrors:i}),Z}if(e.common.async)return Promise.all(u.map(async(l)=>{let i={...e,common:{...e.common,issues:[]},parent:null};return{result:await l._parseAsync({data:e.data,path:e.path,parent:i}),ctx:i}})).then(a);else{let l=void 0,i=[];for(let d of u){let m={...e,common:{...e.common,issues:[]},parent:null},_=d._parseSync({data:e.data,path:e.path,parent:m});if(_.status==="valid")return _;else if(_.status==="dirty"&&!l)l={result:_,ctx:m};if(m.common.issues.length)i.push(m.common.issues)}if(l)return e.common.issues.push(...l.ctx.common.issues),l.result;let o=i.map((d)=>new Dt(d));return U(e,{code:X.invalid_union,unionErrors:o}),Z}}get options(){return this._def.options}};lu.create=(t,e)=>{return new lu({options:t,typeName:T.ZodUnion,...S(e)})};Ia=class Ia extends O{_parse(t){let{ctx:e}=this._processInputParams(t);if(e.parsedType!==Y.object)return U(e,{code:X.invalid_type,expected:Y.object,received:e.parsedType}),Z;let u=this.discriminator,a=e.data[u],l=this.optionsMap.get(a);if(!l)return U(e,{code:X.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[u]}),Z;if(e.common.async)return l._parseAsync({data:e.data,path:e.path,parent:e});else return l._parseSync({data:e.data,path:e.path,parent:e})}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(t,e,u){let a=new Map;for(let l of e){let i=Fe(l.shape[t]);if(!i.length)throw Error(`A discriminator value for key \`${t}\` could not be extracted from all schema options`);for(let o of i){if(a.has(o))throw Error(`Discriminator property ${String(t)} has duplicate value ${String(o)}`);a.set(o,l)}}return new Ia({typeName:T.ZodDiscriminatedUnion,discriminator:t,options:e,optionsMap:a,...S(u)})}};iu=class iu extends O{_parse(t){let{status:e,ctx:u}=this._processInputParams(t),a=(l,i)=>{if(ca(l)||ca(i))return Z;let o=Mi(l.value,i.value);if(!o.valid)return U(u,{code:X.invalid_intersection_types}),Z;if(xa(l)||xa(i))e.dirty();return{status:e.value,value:o.data}};if(u.common.async)return Promise.all([this._def.left._parseAsync({data:u.data,path:u.path,parent:u}),this._def.right._parseAsync({data:u.data,path:u.path,parent:u})]).then(([l,i])=>a(l,i));else return a(this._def.left._parseSync({data:u.data,path:u.path,parent:u}),this._def.right._parseSync({data:u.data,path:u.path,parent:u}))}};iu.create=(t,e,u)=>{return new iu({left:t,right:e,typeName:T.ZodIntersection,...S(u)})};$e=class $e extends O{_parse(t){let{status:e,ctx:u}=this._processInputParams(t);if(u.parsedType!==Y.array)return U(u,{code:X.invalid_type,expected:Y.array,received:u.parsedType}),Z;if(u.data.length<this._def.items.length)return U(u,{code:X.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),Z;if(!this._def.rest&&u.data.length>this._def.items.length)U(u,{code:X.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),e.dirty();let l=[...u.data].map((i,o)=>{let d=this._def.items[o]||this._def.rest;if(!d)return null;return d._parse(new se(u,i,u.path,o))}).filter((i)=>!!i);if(u.common.async)return Promise.all(l).then((i)=>{return Vt.mergeArray(e,i)});else return Vt.mergeArray(e,l)}get items(){return this._def.items}rest(t){return new $e({...this._def,rest:t})}};$e.create=(t,e)=>{if(!Array.isArray(t))throw Error("You must pass an array of schemas to z.tuple([ ... ])");return new $e({items:t,typeName:T.ZodTuple,rest:null,...S(e)})};Su=class Su extends O{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){let{status:e,ctx:u}=this._processInputParams(t);if(u.parsedType!==Y.object)return U(u,{code:X.invalid_type,expected:Y.object,received:u.parsedType}),Z;let a=[],l=this._def.keyType,i=this._def.valueType;for(let o in u.data)a.push({key:l._parse(new se(u,o,u.path,o)),value:i._parse(new se(u,u.data[o],u.path,o)),alwaysSet:o in u.data});if(u.common.async)return Vt.mergeObjectAsync(e,a);else return Vt.mergeObjectSync(e,a)}get element(){return this._def.valueType}static create(t,e,u){if(e instanceof O)return new Su({keyType:t,valueType:e,typeName:T.ZodRecord,...S(u)});return new Su({keyType:xe.create(),valueType:t,typeName:T.ZodRecord,...S(e)})}};Ou=class Ou extends O{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){let{status:e,ctx:u}=this._processInputParams(t);if(u.parsedType!==Y.map)return U(u,{code:X.invalid_type,expected:Y.map,received:u.parsedType}),Z;let a=this._def.keyType,l=this._def.valueType,i=[...u.data.entries()].map(([o,d],m)=>{return{key:a._parse(new se(u,o,u.path,[m,"key"])),value:l._parse(new se(u,d,u.path,[m,"value"]))}});if(u.common.async){let o=new Map;return Promise.resolve().then(async()=>{for(let d of i){let m=await d.key,_=await d.value;if(m.status==="aborted"||_.status==="aborted")return Z;if(m.status==="dirty"||_.status==="dirty")e.dirty();o.set(m.value,_.value)}return{status:e.value,value:o}})}else{let o=new Map;for(let d of i){let{key:m,value:_}=d;if(m.status==="aborted"||_.status==="aborted")return Z;if(m.status==="dirty"||_.status==="dirty")e.dirty();o.set(m.value,_.value)}return{status:e.value,value:o}}}};Ou.create=(t,e,u)=>{return new Ou({valueType:e,keyType:t,typeName:T.ZodMap,...S(u)})};v0=class v0 extends O{_parse(t){let{status:e,ctx:u}=this._processInputParams(t);if(u.parsedType!==Y.set)return U(u,{code:X.invalid_type,expected:Y.set,received:u.parsedType}),Z;let a=this._def;if(a.minSize!==null){if(u.data.size<a.minSize.value)U(u,{code:X.too_small,minimum:a.minSize.value,type:"set",inclusive:!0,exact:!1,message:a.minSize.message}),e.dirty()}if(a.maxSize!==null){if(u.data.size>a.maxSize.value)U(u,{code:X.too_big,maximum:a.maxSize.value,type:"set",inclusive:!0,exact:!1,message:a.maxSize.message}),e.dirty()}let l=this._def.valueType;function i(d){let m=new Set;for(let _ of d){if(_.status==="aborted")return Z;if(_.status==="dirty")e.dirty();m.add(_.value)}return{status:e.value,value:m}}let o=[...u.data.values()].map((d,m)=>l._parse(new se(u,d,u.path,m)));if(u.common.async)return Promise.all(o).then((d)=>i(d));else return i(o)}min(t,e){return new v0({...this._def,minSize:{value:t,message:D.toString(e)}})}max(t,e){return new v0({...this._def,maxSize:{value:t,message:D.toString(e)}})}size(t,e){return this.min(t,e).max(t,e)}nonempty(t){return this.min(1,t)}};v0.create=(t,e)=>{return new v0({valueType:t,minSize:null,maxSize:null,typeName:T.ZodSet,...S(e)})};tu=class tu extends O{constructor(){super(...arguments);this.validate=this.implement}_parse(t){let{ctx:e}=this._processInputParams(t);if(e.parsedType!==Y.function)return U(e,{code:X.invalid_type,expected:Y.function,received:e.parsedType}),Z;function u(o,d){return Tu({data:o,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,P0(),Ue].filter((m)=>!!m),issueData:{code:X.invalid_arguments,argumentsError:d}})}function a(o,d){return Tu({data:o,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,P0(),Ue].filter((m)=>!!m),issueData:{code:X.invalid_return_type,returnTypeError:d}})}let l={errorMap:e.common.contextualErrorMap},i=e.data;if(this._def.returns instanceof q0){let o=this;return bt(async function(...d){let m=new Dt([]),_=await o._def.args.parseAsync(d,l).catch((c)=>{throw m.addIssue(u(d,c)),m}),n=await Reflect.apply(i,this,_);return await o._def.returns._def.type.parseAsync(n,l).catch((c)=>{throw m.addIssue(a(n,c)),m})})}else{let o=this;return bt(function(...d){let m=o._def.args.safeParse(d,l);if(!m.success)throw new Dt([u(d,m.error)]);let _=Reflect.apply(i,this,m.data),n=o._def.returns.safeParse(_,l);if(!n.success)throw new Dt([a(_,n.error)]);return n.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...t){return new tu({...this._def,args:$e.create(t).rest(Re.create())})}returns(t){return new tu({...this._def,returns:t})}implement(t){return this.parse(t)}strictImplement(t){return this.parse(t)}static create(t,e,u){return new tu({args:t?t:$e.create([]).rest(Re.create()),returns:e||Re.create(),typeName:T.ZodFunction,...S(u)})}};ou=class ou extends O{get schema(){return this._def.getter()}_parse(t){let{ctx:e}=this._processInputParams(t);return this._def.getter()._parse({data:e.data,path:e.path,parent:e})}};ou.create=(t,e)=>{return new ou({getter:t,typeName:T.ZodLazy,...S(e)})};du=class du extends O{_parse(t){if(t.data!==this._def.value){let e=this._getOrReturnCtx(t);return U(e,{received:e.data,code:X.invalid_literal,expected:this._def.value}),Z}return{status:"valid",value:t.data}}get value(){return this._def.value}};du.create=(t,e)=>{return new du({value:t,typeName:T.ZodLiteral,...S(e)})};Pe=class Pe extends O{_parse(t){if(typeof t.data!=="string"){let e=this._getOrReturnCtx(t),u=this._def.values;return U(e,{expected:C.joinValues(u),received:e.parsedType,code:X.invalid_type}),Z}if(!this._cache)this._cache=new Set(this._def.values);if(!this._cache.has(t.data)){let e=this._getOrReturnCtx(t),u=this._def.values;return U(e,{received:e.data,code:X.invalid_enum_value,options:u}),Z}return bt(t.data)}get options(){return this._def.values}get enum(){let t={};for(let e of this._def.values)t[e]=e;return t}get Values(){let t={};for(let e of this._def.values)t[e]=e;return t}get Enum(){let t={};for(let e of this._def.values)t[e]=e;return t}extract(t,e=this._def){return Pe.create(t,{...this._def,...e})}exclude(t,e=this._def){return Pe.create(this.options.filter((u)=>!t.includes(u)),{...this._def,...e})}};Pe.create=n_;pu=class pu extends O{_parse(t){let e=C.getValidEnumValues(this._def.values),u=this._getOrReturnCtx(t);if(u.parsedType!==Y.string&&u.parsedType!==Y.number){let a=C.objectValues(e);return U(u,{expected:C.joinValues(a),received:u.parsedType,code:X.invalid_type}),Z}if(!this._cache)this._cache=new Set(C.getValidEnumValues(this._def.values));if(!this._cache.has(t.data)){let a=C.objectValues(e);return U(u,{received:u.data,code:X.invalid_enum_value,options:a}),Z}return bt(t.data)}get enum(){return this._def.values}};pu.create=(t,e)=>{return new pu({values:t,typeName:T.ZodNativeEnum,...S(e)})};q0=class q0 extends O{unwrap(){return this._def.type}_parse(t){let{ctx:e}=this._processInputParams(t);if(e.parsedType!==Y.promise&&e.common.async===!1)return U(e,{code:X.invalid_type,expected:Y.promise,received:e.parsedType}),Z;let u=e.parsedType===Y.promise?e.data:Promise.resolve(e.data);return bt(u.then((a)=>{return this._def.type.parseAsync(a,{path:e.path,errorMap:e.common.contextualErrorMap})}))}};q0.create=(t,e)=>{return new q0({type:t,typeName:T.ZodPromise,...S(e)})};ke=class ke extends O{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===T.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(t){let{status:e,ctx:u}=this._processInputParams(t),a=this._def.effect||null,l={addIssue:(i)=>{if(U(u,i),i.fatal)e.abort();else e.dirty()},get path(){return u.path}};if(l.addIssue=l.addIssue.bind(l),a.type==="preprocess"){let i=a.transform(u.data,l);if(u.common.async)return Promise.resolve(i).then(async(o)=>{if(e.value==="aborted")return Z;let d=await this._def.schema._parseAsync({data:o,path:u.path,parent:u});if(d.status==="aborted")return Z;if(d.status==="dirty")return g0(d.value);if(e.value==="dirty")return g0(d.value);return d});else{if(e.value==="aborted")return Z;let o=this._def.schema._parseSync({data:i,path:u.path,parent:u});if(o.status==="aborted")return Z;if(o.status==="dirty")return g0(o.value);if(e.value==="dirty")return g0(o.value);return o}}if(a.type==="refinement"){let i=(o)=>{let d=a.refinement(o,l);if(u.common.async)return Promise.resolve(d);if(d instanceof Promise)throw Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return o};if(u.common.async===!1){let o=this._def.schema._parseSync({data:u.data,path:u.path,parent:u});if(o.status==="aborted")return Z;if(o.status==="dirty")e.dirty();return i(o.value),{status:e.value,value:o.value}}else return this._def.schema._parseAsync({data:u.data,path:u.path,parent:u}).then((o)=>{if(o.status==="aborted")return Z;if(o.status==="dirty")e.dirty();return i(o.value).then(()=>{return{status:e.value,value:o.value}})})}if(a.type==="transform")if(u.common.async===!1){let i=this._def.schema._parseSync({data:u.data,path:u.path,parent:u});if(!Ee(i))return Z;let o=a.transform(i.value,l);if(o instanceof Promise)throw Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:e.value,value:o}}else return this._def.schema._parseAsync({data:u.data,path:u.path,parent:u}).then((i)=>{if(!Ee(i))return Z;return Promise.resolve(a.transform(i.value,l)).then((o)=>({status:e.value,value:o}))});C.assertNever(a)}};ke.create=(t,e,u)=>{return new ke({schema:t,typeName:T.ZodEffects,effect:e,...S(u)})};ke.createWithPreprocess=(t,e,u)=>{return new ke({schema:e,effect:{type:"preprocess",transform:t},typeName:T.ZodEffects,...S(u)})};we=class we extends O{_parse(t){if(this._getType(t)===Y.undefined)return bt(void 0);return this._def.innerType._parse(t)}unwrap(){return this._def.innerType}};we.create=(t,e)=>{return new we({innerType:t,typeName:T.ZodOptional,...S(e)})};Ae=class Ae extends O{_parse(t){if(this._getType(t)===Y.null)return bt(null);return this._def.innerType._parse(t)}unwrap(){return this._def.innerType}};Ae.create=(t,e)=>{return new Ae({innerType:t,typeName:T.ZodNullable,...S(e)})};mu=class mu extends O{_parse(t){let{ctx:e}=this._processInputParams(t),u=e.data;if(e.parsedType===Y.undefined)u=this._def.defaultValue();return this._def.innerType._parse({data:u,path:e.path,parent:e})}removeDefault(){return this._def.innerType}};mu.create=(t,e)=>{return new mu({innerType:t,typeName:T.ZodDefault,defaultValue:typeof e.default==="function"?e.default:()=>e.default,...S(e)})};nu=class nu extends O{_parse(t){let{ctx:e}=this._processInputParams(t),u={...e,common:{...e.common,issues:[]}},a=this._def.innerType._parse({data:u.data,path:u.path,parent:{...u}});if(C0(a))return a.then((l)=>{return{status:"valid",value:l.status==="valid"?l.value:this._def.catchValue({get error(){return new Dt(u.common.issues)},input:u.data})}});else return{status:"valid",value:a.status==="valid"?a.value:this._def.catchValue({get error(){return new Dt(u.common.issues)},input:u.data})}}removeCatch(){return this._def.innerType}};nu.create=(t,e)=>{return new nu({innerType:t,typeName:T.ZodCatch,catchValue:typeof e.catch==="function"?e.catch:()=>e.catch,...S(e)})};Pu=class Pu extends O{_parse(t){if(this._getType(t)!==Y.nan){let u=this._getOrReturnCtx(t);return U(u,{code:X.invalid_type,expected:Y.nan,received:u.parsedType}),Z}return{status:"valid",value:t.data}}};Pu.create=(t)=>{return new Pu({typeName:T.ZodNaN,...S(t)})};sf=Symbol("zod_brand");wa=class wa extends O{_parse(t){let{ctx:e}=this._processInputParams(t),u=e.data;return this._def.type._parse({data:u,path:e.path,parent:e})}unwrap(){return this._def.type}};Cu=class Cu extends O{_parse(t){let{status:e,ctx:u}=this._processInputParams(t);if(u.common.async)return(async()=>{let l=await this._def.in._parseAsync({data:u.data,path:u.path,parent:u});if(l.status==="aborted")return Z;if(l.status==="dirty")return e.dirty(),g0(l.value);else return this._def.out._parseAsync({data:l.value,path:u.path,parent:u})})();else{let a=this._def.in._parseSync({data:u.data,path:u.path,parent:u});if(a.status==="aborted")return Z;if(a.status==="dirty")return e.dirty(),{status:"dirty",value:a.value};else return this._def.out._parseSync({data:a.value,path:u.path,parent:u})}}static create(t,e){return new Cu({in:t,out:e,typeName:T.ZodPipeline})}};_u=class _u extends O{_parse(t){let e=this._def.innerType._parse(t),u=(a)=>{if(Ee(a))a.value=Object.freeze(a.value);return a};return C0(e)?e.then((a)=>u(a)):u(e)}unwrap(){return this._def.innerType}};_u.create=(t,e)=>{return new _u({innerType:t,typeName:T.ZodReadonly,...S(e)})};kf={object:st.lazycreate};(function(t){t.ZodString="ZodString",t.ZodNumber="ZodNumber",t.ZodNaN="ZodNaN",t.ZodBigInt="ZodBigInt",t.ZodBoolean="ZodBoolean",t.ZodDate="ZodDate",t.ZodSymbol="ZodSymbol",t.ZodUndefined="ZodUndefined",t.ZodNull="ZodNull",t.ZodAny="ZodAny",t.ZodUnknown="ZodUnknown",t.ZodNever="ZodNever",t.ZodVoid="ZodVoid",t.ZodArray="ZodArray",t.ZodObject="ZodObject",t.ZodUnion="ZodUnion",t.ZodDiscriminatedUnion="ZodDiscriminatedUnion",t.ZodIntersection="ZodIntersection",t.ZodTuple="ZodTuple",t.ZodRecord="ZodRecord",t.ZodMap="ZodMap",t.ZodSet="ZodSet",t.ZodFunction="ZodFunction",t.ZodLazy="ZodLazy",t.ZodLiteral="ZodLiteral",t.ZodEnum="ZodEnum",t.ZodEffects="ZodEffects",t.ZodNativeEnum="ZodNativeEnum",t.ZodOptional="ZodOptional",t.ZodNullable="ZodNullable",t.ZodDefault="ZodDefault",t.ZodCatch="ZodCatch",t.ZodPromise="ZodPromise",t.ZodBranded="ZodBranded",t.ZodPipeline="ZodPipeline",t.ZodReadonly="ZodReadonly"})(T||(T={}));r_=xe.create,c_=Se.create,hf=Pu.create,gf=Oe.create,x_=eu.create,Bf=B0.create,Qf=Eu.create,vf=uu.create,qf=au.create,Gf=Q0.create,$f=Re.create,Xf=Ge.create,Jf=Ru.create,Kf=Ie.create,Wf=st.create,Vf=st.strictCreate,Yf=lu.create,Hf=Ia.create,zf=iu.create,bf=$e.create,Mf=Su.create,Uf=Ou.create,Ff=v0.create,Af=tu.create,jf=ou.create,Df=du.create,Nf=Pe.create,Lf=pu.create,Zf=q0.create,Tf=ke.create,Ef=we.create,Rf=Ae.create,Sf=ke.createWithPreprocess,Of=Cu.create,th={string:(t)=>xe.create({...t,coerce:!0}),number:(t)=>Se.create({...t,coerce:!0}),boolean:(t)=>eu.create({...t,coerce:!0}),bigint:(t)=>Oe.create({...t,coerce:!0}),date:(t)=>B0.create({...t,coerce:!0})},eh=Z});var p={};zu(p,{void:()=>Jf,util:()=>C,unknown:()=>$f,union:()=>Yf,undefined:()=>vf,tuple:()=>bf,transformer:()=>Tf,symbol:()=>Qf,string:()=>r_,strictObject:()=>Vf,setErrorMap:()=>Ek,set:()=>Ff,record:()=>Mf,quotelessJson:()=>Zk,promise:()=>Zf,preprocess:()=>Sf,pipeline:()=>Of,ostring:()=>Pf,optional:()=>Ef,onumber:()=>Cf,oboolean:()=>yf,objectUtil:()=>Yi,object:()=>Wf,number:()=>c_,nullable:()=>Rf,null:()=>qf,never:()=>Xf,nativeEnum:()=>Lf,nan:()=>hf,map:()=>Uf,makeIssue:()=>Tu,literal:()=>Df,lazy:()=>jf,late:()=>kf,isValid:()=>Ee,isDirty:()=>xa,isAsync:()=>C0,isAborted:()=>ca,intersection:()=>zf,instanceof:()=>ff,getParsedType:()=>qe,getErrorMap:()=>P0,function:()=>Af,enum:()=>Nf,effect:()=>Tf,discriminatedUnion:()=>Hf,defaultErrorMap:()=>Ue,datetimeRegex:()=>m_,date:()=>Bf,custom:()=>__,coerce:()=>th,boolean:()=>x_,bigint:()=>gf,array:()=>Kf,any:()=>Gf,addIssueToContext:()=>U,ZodVoid:()=>Ru,ZodUnknown:()=>Re,ZodUnion:()=>lu,ZodUndefined:()=>uu,ZodType:()=>O,ZodTuple:()=>$e,ZodTransformer:()=>ke,ZodSymbol:()=>Eu,ZodString:()=>xe,ZodSet:()=>v0,ZodSchema:()=>O,ZodRecord:()=>Su,ZodReadonly:()=>_u,ZodPromise:()=>q0,ZodPipeline:()=>Cu,ZodParsedType:()=>Y,ZodOptional:()=>we,ZodObject:()=>st,ZodNumber:()=>Se,ZodNullable:()=>Ae,ZodNull:()=>au,ZodNever:()=>Ge,ZodNativeEnum:()=>pu,ZodNaN:()=>Pu,ZodMap:()=>Ou,ZodLiteral:()=>du,ZodLazy:()=>ou,ZodIssueCode:()=>X,ZodIntersection:()=>iu,ZodFunction:()=>tu,ZodFirstPartyTypeKind:()=>T,ZodError:()=>Dt,ZodEnum:()=>Pe,ZodEffects:()=>ke,ZodDiscriminatedUnion:()=>Ia,ZodDefault:()=>mu,ZodDate:()=>B0,ZodCatch:()=>nu,ZodBranded:()=>wa,ZodBoolean:()=>eu,ZodBigInt:()=>Oe,ZodArray:()=>Ie,ZodAny:()=>Q0,Schema:()=>O,ParseStatus:()=>Vt,OK:()=>bt,NEVER:()=>eh,INVALID:()=>Z,EMPTY_PATH:()=>Rk,DIRTY:()=>g0,BRAND:()=>sf});var Ui=tt(()=>{ra();zi();a_();Zu();I_();_a()});var Nt=tt(()=>{Ui();Ui()});var $_=H((GW,fa)=>{function k_(t){return Array.isArray(t)?t:[t]}var uh=void 0,Ai="",w_=" ",Fi="\\",ah=/^\s+$/,lh=/(?:[^\\]|^)\\$/,ih=/^\\!/,oh=/^\\#/,dh=/\r?\n/g,ph=/^\.{0,2}\/|^\.{1,2}$/,mh=/\/$/,ru="/",f_="node-ignore";if(typeof Symbol<"u")f_=Symbol.for("node-ignore");var h_=f_,cu=(t,e,u)=>{return Object.defineProperty(t,e,{value:u}),u},nh=/([0-z])-([0-z])/g,g_=()=>!1,_h=(t)=>t.replace(nh,(e,u,a)=>u.charCodeAt(0)<=a.charCodeAt(0)?e:Ai),rh=(t)=>{let{length:e}=t;return t.slice(0,e-e%2)},ch=[[/^\uFEFF/,()=>Ai],[/((?:\\\\)*?)(\\?\s+)$/,(t,e,u)=>e+(u.indexOf("\\")===0?w_:Ai)],[/(\\+?)\s/g,(t,e)=>{let{length:u}=e;return e.slice(0,u-u%2)+w_}],[/[\\$.|*+(){^]/g,(t)=>`\\${t}`],[/(?!\\)\?/g,()=>"[^/]"],[/^\//,()=>"^"],[/\//g,()=>"\\/"],[/^\^*\\\*\\\*\\\//,()=>"^(?:.*\\/)?"],[/^(?=[^^])/,function(){return!/\/(?!$)/.test(this)?"(?:^|\\/)":"^"}],[/\\\/\\\*\\\*(?=\\\/|$)/g,(t,e,u)=>e+6<u.length?"(?:\\/[^\\/]+)*":"\\/.+"],[/(^|[^\\]+)(\\\*)+(?=.+)/g,(t,e,u)=>{let a=u.replace(/\\\*/g,"[^\\/]*");return e+a}],[/\\\\\\(?=[$.|*+(){^])/g,()=>Fi],[/\\\\/g,()=>Fi],[/(\\)?\[([^\]/]*?)(\\*)($|\])/g,(t,e,u,a,l)=>e===Fi?`\\[${u}${rh(a)}${l}`:l==="]"?a.length%2===0?`[${_h(u)}${a}]`:"[]":"[]"],[/(?:[^*])$/,(t)=>/\/$/.test(t)?`${t}$`:`${t}(?=$|\\/$)`]],xh=/(^|\\\/)?\\\*$/,yu="regex",sa="checkRegex",s_="_",Ih={[yu](t,e){return`${e?`${e}[^/]+`:"[^/]*"}(?=$|\\/$)`},[sa](t,e){return`${e?`${e}[^/]*`:"[^/]*"}(?=$|\\/$)`}},wh=(t)=>ch.reduce((e,[u,a])=>e.replace(u,a.bind(t)),t),ka=(t)=>typeof t==="string",sh=(t)=>t&&ka(t)&&!ah.test(t)&&!lh.test(t)&&t.indexOf("#")!==0,kh=(t)=>t.split(dh).filter(Boolean);class B_{constructor(t,e,u,a,l,i){this.pattern=t,this.mark=e,this.negative=l,cu(this,"body",u),cu(this,"ignoreCase",a),cu(this,"regexPrefix",i)}get regex(){let t=s_+yu;if(this[t])return this[t];return this._make(yu,t)}get checkRegex(){let t=s_+sa;if(this[t])return this[t];return this._make(sa,t)}_make(t,e){let u=this.regexPrefix.replace(xh,Ih[t]),a=this.ignoreCase?new RegExp(u,"i"):new RegExp(u);return cu(this,e,a)}}var fh=({pattern:t,mark:e},u)=>{let a=!1,l=t;if(l.indexOf("!")===0)a=!0,l=l.substr(1);l=l.replace(ih,"!").replace(oh,"#");let i=wh(l);return new B_(t,e,l,u,a,i)};class Q_{constructor(t){this._ignoreCase=t,this._rules=[]}_add(t){if(t&&t[h_]){this._rules=this._rules.concat(t._rules._rules),this._added=!0;return}if(ka(t))t={pattern:t};if(sh(t.pattern)){let e=fh(t,this._ignoreCase);this._added=!0,this._rules.push(e)}}add(t){return this._added=!1,k_(ka(t)?kh(t):t).forEach(this._add,this),this._added}test(t,e,u){let a=!1,l=!1,i;this._rules.forEach((d)=>{let{negative:m}=d;if(l===m&&a!==l||m&&!a&&!l&&!e)return;if(!d[u].test(t))return;a=!m,l=m,i=m?uh:d});let o={ignored:a,unignored:l};if(i)o.rule=i;return o}}var hh=(t,e)=>{throw new e(t)},je=(t,e,u)=>{if(!ka(t))return u(`path must be a string, but got \`${e}\``,TypeError);if(!t)return u("path must not be empty",TypeError);if(je.isNotRelative(t))return u(`path should be a \`path.relative()\`d string, but got "${e}"`,RangeError);return!0},v_=(t)=>ph.test(t);je.isNotRelative=v_;je.convert=(t)=>t;class q_{constructor({ignorecase:t=!0,ignoreCase:e=t,allowRelativePaths:u=!1}={}){cu(this,h_,!0),this._rules=new Q_(e),this._strictPathCheck=!u,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}add(t){if(this._rules.add(t))this._initCache();return this}addPattern(t){return this.add(t)}_test(t,e,u,a){let l=t&&je.convert(t);return je(l,t,this._strictPathCheck?hh:g_),this._t(l,e,u,a)}checkIgnore(t){if(!mh.test(t))return this.test(t);let e=t.split(ru).filter(Boolean);if(e.pop(),e.length){let u=this._t(e.join(ru)+ru,this._testCache,!0,e);if(u.ignored)return u}return this._rules.test(t,!1,sa)}_t(t,e,u,a){if(t in e)return e[t];if(!a)a=t.split(ru).filter(Boolean);if(a.pop(),!a.length)return e[t]=this._rules.test(t,u,yu);let l=this._t(a.join(ru)+ru,e,u,a);return e[t]=l.ignored?l:this._rules.test(t,u,yu)}ignores(t){return this._test(t,this._ignoreCache,!1).ignored}createFilter(){return(t)=>!this.ignores(t)}filter(t){return k_(t).filter(this.createFilter())}test(t){return this._test(t,this._testCache,!0)}}var ji=(t)=>new q_(t),gh=(t)=>je(t&&je.convert(t),t,g_),G_=()=>{let t=(u)=>/^\\\\\?\\/.test(u)||/["<>|\u0000-\u001F]+/u.test(u)?u:u.replace(/\\/g,"/");je.convert=t;let e=/^[a-z]:\//i;je.isNotRelative=(u)=>e.test(u)||v_(u)};if(typeof process<"u"&&process.platform==="win32")G_();fa.exports=ji;ji.default=ji;fa.exports.isPathValid=gh;cu(fa.exports,Symbol.for("setupWindows"),G_)});import X_ from"node:fs";import Di from"node:path";class K_{ignoreCache=new Map;async resolveFiles(t,e){if(e.length===0)return[];let u=await this.getIgnoreRules(t);return(await Ni.default(e,{cwd:t,absolute:!1,dot:!0,onlyFiles:!0,followSymbolicLinks:!1,ignore:[".git/**"]})).filter((l)=>{let i=l.startsWith("./")?l.slice(2):l;return!u.ignores(i)})}async getIgnoreRules(t){let e=this.ignoreCache.get(t);if(e)return e;let u=J_.default();u.add(".git"),u.add("/read_only_data_source/"),u.add("/read_only_data_source/**");let a=await this.findGitignoreFiles(t);for(let l of a){let i=await this.parseGitignoreFile(t,l);if(i.length>0){let o=Di.dirname(l),d=Di.relative(t,o);if(d==="")u.add(i);else for(let m of i)if(m.startsWith("!")){let _=m.substring(1),n=`!${d}/${_}`.replace(/\\/g,"/");u.add(n)}else if(m.includes("*")&&!m.includes("/")){let _=`${d}/**/${m}`.replace(/\\/g,"/");u.add(_)}else{let _=`${d}/${m}`.replace(/\\/g,"/");u.add(_)}}}return this.ignoreCache.set(t,u),u}async findGitignoreFiles(t){try{let e=await Ni.default("**/.gitignore",{cwd:t,absolute:!0,dot:!0,ignore:[".git/**"]}),u=Di.join(t,".gitignore");if(X_.existsSync(u)&&!e.includes(u))e.unshift(u);return e}catch(e){return console.warn(`Failed to find .gitignore files: ${e}`),[]}}async parseGitignoreFile(t,e){try{return(await X_.promises.readFile(e,"utf-8")).split(`
|
|
30
|
+
`).map((i)=>i.trim()).filter((i)=>i.length>0&&!i.startsWith("#")).map((i)=>{if(i.endsWith("/")&&!i.startsWith("!"))return i.slice(0,-1);return i})}catch(u){return console.warn(`Failed to parse .gitignore at ${e}: ${u}`),[]}}clearCache(t){if(t)this.ignoreCache.delete(t);else this.ignoreCache.clear()}}var Ni,J_,G0;var t2=tt(()=>{Ni=_e(ea(),1),J_=_e($_(),1);G0=new K_});import Jt from"node:fs";import fe from"node:path";import{fileURLToPath as Bh}from"node:url";import{serve as Qh}from"crossws/server";import W_ from"crossws/websocket";function J(){return`${Date.now()}-${Math.random().toString(36).substring(2,11)}`}class e2{logFile;constructor(t){this.logFile=t}log(t,e="info"){let a=`[${new Date().toISOString()}] [${e.toUpperCase()}] ${t}
|
|
31
|
+
`;try{let l=fe.dirname(this.logFile);if(!Jt.existsSync(l))Jt.mkdirSync(l,{recursive:!0});Jt.appendFileSync(this.logFile,a)}catch(l){console.error(`Failed to write to log file: ${l}`)}if(e==="error")console.error(a.trim())}logWebSocketMessage(t,e,u){try{let a={loggedAt:new Date().toISOString(),direction:e,message:u,metadata:{size:JSON.stringify(u).length}},l=`${JSON.stringify(a)}
|
|
32
|
+
`,i=fe.dirname(t);if(!Jt.existsSync(i))Jt.mkdirSync(i,{recursive:!0});Jt.appendFileSync(t,l)}catch(a){console.error(`Failed to log WebSocket message: ${a}`)}}logSocketTraffic(t,e,u){this.logWebSocketMessage(t,e,u)}}async function H_(t,e){let u=[];try{let a=await G0.resolveFiles(t,[e]),l=await Promise.all(a.map(async(o)=>{let d=fe.join(t,o),m=await Jt.promises.stat(d),_=await Jt.promises.readFile(d,"utf-8");return{path:o,content:_,lastModified:m.mtime.toISOString()}})),i=new Map;l.sort((o,d)=>o.path.localeCompare(d.path));for(let o of l){let m=(o.path.startsWith("./")?o.path.slice(2):o.path).split(fe.sep),_="",n=null;for(let r=0;r<m.length;r++){let c=m[r];if(_=_?fe.join(_,c):c,r===m.length-1){let x={name:c,path:_,isDirectory:!1,lastModified:o.lastModified,children:[]};if(n){if(!n.children)n.children=[];n.children.push(x)}else u.push(x)}else{if(!i.has(_)){let x={name:c,path:_,isDirectory:!0,children:[]};if(i.set(_,x),n){if(!n.children)n.children=[];n.children.push(x)}else u.push(x)}n=i.get(_)||null}}}}catch(a){console.error("Error building file tree:",a)}return u}function u2(t){return`'${t.replace(/'/g,"'\\''")}'`}function vh(){if("Bun"in globalThis)return"bun";if("Deno"in globalThis)return"deno";return"node"}function ye(){if(process.env.HANKWEAVE_TEST_IS_COMPILED!==void 0)return process.env.HANKWEAVE_TEST_IS_COMPILED==="true";if(!(typeof Bun<"u"))return!1;let e=import.meta.path;return e.startsWith("/$bunfs/")||/^[A-Z]:[/\\]~BUN[/\\]/i.test(e)}class Ce{data;constructor(t){this.data=t}static create(t){let e=qh.parse(t);return new Ce(e)}static deserialize(t){let e=JSON.parse(t);return Ce.create(e)}serialize(){return JSON.stringify(this.data,null,2)}get version(){return this.data.version}get buildDate(){return this.data.buildDate}get buildTarget(){return this.data.buildTarget}toObject(){return{...this.data}}}function xu(){if(Xe)return Xe;try{if(ye())try{let u={version:BUILD_VERSION,buildDate:BUILD_DATE,buildTarget:BUILD_TARGET};return Xe=Ce.create(u),Xe}catch{return Xe=Ce.create({version:ha}),Xe}let t=fe.dirname(Bh(import.meta.url)),e=fe.resolve(t,"../package.json");if(Jt.existsSync(e)){let u=Jt.readFileSync(e,"utf-8"),a=JSON.parse(u);Xe=Ce.create({version:a.version||ha})}else Xe=Ce.create({version:ha})}catch{Xe=Ce.create({version:ha})}return Xe}function Li(t){if(ye()){try{let u=process.platform==="win32"?"where":"which";if(Bun.spawnSync([u,"bun"],{stdout:"ignore",stderr:"ignore"}).exitCode===0)return["bun",t]}catch{}return["node",t]}switch(vh()){case"bun":return["bun",t];case"deno":return["deno","run","--allow-all",t];case"node":return["node",t]}}function Gh(t){return t instanceof Error}function qt(t){if(Gh(t))return t;if(typeof t==="string")return Error(t);return Error(String(t))}function z_(t){throw Error(`Unexpected value: ${JSON.stringify(t)}`)}async function b_(t,e=30000){let u=0,a=Date.now();async function l(i){if(Date.now()-a>e)throw Error(`Directory size calculation timed out after ${e}ms`);let o=await Jt.promises.readdir(i,{withFileTypes:!0});for(let d of o){let m=fe.join(i,d.name);if(d.isDirectory())await l(m);else try{let _=await Jt.promises.stat(m);u+=_.size}catch{}}}return await l(t),u}function M_(t){if(t===0)return"0 B";let e=["B","KB","MB","GB"],u=1024,a=Math.floor(Math.log(t)/Math.log(u));return`${(t/u**a).toFixed(1)} ${e[a]}`}async function U_(t,e,u,a){a.log(`Copying files from ${t} to ${u} using globs ${e.join(", ")}`,"debug"),await Jt.promises.mkdir(u,{recursive:!0});let l=await V_.default(e,{cwd:t,dot:!0,onlyFiles:!1});if(l.length===0){a.log("No files matched the copy globs.","debug");return}a.log(`Resolved files: ${l.join(", ")}`,"debug");for(let i of l){let o=fe.join(t,i),d=fe.join(u,i);if(a.log(`Copying ${o} to ${d}`,"debug"),!Jt.existsSync(o)){a.log(`Source file ${o} does not exist`,"info");continue}await Jt.promises.mkdir(fe.dirname(d),{recursive:!0}),await Jt.promises.cp(o,d,{recursive:!0})}}function Iu(...t){return Y_.default({},...t)}async function ga(t,e,u={}){let{maxRetries:a=5,initialDelay:l=10,logger:i}=u,o=null;for(let d=0;d<a;d++)try{await Jt.promises.rename(t,e);return}catch(m){let _=m;if(o=_,_.code==="EPERM"||_.code==="EBUSY"||_.code==="EACCES"){if(d<a-1){let n=l*2**d;i?.log(`File locked, retrying rename in ${n}ms (attempt ${d+1}/${a})`,"debug"),await new Promise((r)=>setTimeout(r,n));continue}}throw m}throw o||Error("Rename failed after retries")}function F_(t,e,u={}){let{maxRetries:a=5,initialDelay:l=10,logger:i}=u,o=null;for(let d=0;d<a;d++)try{Jt.renameSync(t,e);return}catch(m){let _=m;if(o=_,_.code==="EPERM"||_.code==="EBUSY"||_.code==="EACCES"){if(d<a-1){let n=l*2**d;i?.log(`File locked, retrying rename in ${n}ms (attempt ${d+1}/${a})`,"debug");let r=Date.now();while(Date.now()-r<n);continue}}throw m}throw o||Error("Rename failed after retries")}class A_{peer;constructor(t){this.peer=t;if(!this.peer.context)this.peer.context={}}get data(){return this.peer.context}set data(t){let e=this.peer.context;for(let u in e)delete e[u];Object.assign(e,t)}send(t){this.peer.send(t)}close(t,e){this.peer.close(t,e)}}function Ba(t){let e={port:t.port,fetch:t.fetch};if(t.websocket){let{upgrade:a,open:l,message:i,close:o}=t.websocket,d=new WeakMap,m=(_)=>{let n=d.get(_);if(!n)n=new A_(_),d.set(_,n);return n};e.websocket={upgrade:a?async(_)=>{return{context:await a(_)}}:void 0,open:l?(_)=>{l(m(_))}:void 0,message:i?(_,n)=>{let r=n.rawData,c=typeof r==="string"||Buffer.isBuffer(r)?r:n.text();i(m(_),c)}:void 0,close:o?(_)=>{o(m(_))}:void 0}}let u=Qh(e);return{stop:()=>{if(u&&typeof u.close==="function")u.close()}}}var V_,Y_,qh,Xe=null,ha="1.0.0";var Yt=tt(()=>{Nt();t2();V_=_e(ea(),1),Y_=_e(Vi(),1);qh=p.object({version:p.string().min(1,"Version cannot be empty"),buildDate:p.string().optional(),buildTarget:p.string().optional()})});import{createHash as Xh}from"node:crypto";import t0 from"node:fs";import Ri from"node:os";import he from"node:path";function Jh(){let t=Ri.arch(),e=Ri.platform();if(e==="darwin")return t==="arm64"?"arm64-darwin":"x64-darwin";if(e==="linux")return t==="arm64"?"arm64-linux":"x64-linux";if(e==="win32")return"x64-win32";throw Error(`Unsupported platform: ${e}-${t}`)}function Oi(){let t=process.env.HANKWEAVE_CACHE_DIR||he.join(Ri.homedir(),".hankweave");return he.join(t,"claude-sdk",Si)}function wu(){return he.join(Oi(),"cli.js")}function Qa(){let t=Oi(),e=wu(),u=he.join(t,".extraction-complete");if(!t0.existsSync(u))return!0;if(!t0.existsSync(e))return!0;try{if(t0.readFileSync(u,"utf-8").trim()!==Si)return!0}catch{return!0}return!1}function Kh(t){return Xh("md5").update(t).digest("hex").slice(0,12)}async function Ei(t){let e=t.replace(/\\/g,"/"),u=he.basename(e),a=`${u}.`,l=globalThis.Bun?.embeddedFiles;if(l)for(let i of l){let o=he.basename(i.name);if(i.name===e||i.name===t||i.name===u||i.name===a||o===u||o===a){let d=await i.arrayBuffer();if(d.byteLength>0)return d}}throw Error(`Embedded file not found: ${t}`)}async function va(){let t=Oi(),e=wu(),u=he.join(t,".extraction-complete");console.log(`\uD83D\uDCE6 Extracting Claude SDK files to: ${t}`);let a=globalThis.Bun?.embeddedFiles;if(a){console.log("\uD83D\uDCCB Embedded files available:");for(let d of a)console.log(` - ${d.name} (${d.size} bytes)`)}try{t0.mkdirSync(t,{recursive:!0})}catch(d){throw console.error(`❌ Failed to create extraction directory: ${d.message}`),d}let l=[{embeddedName:"cli.bundle",outputName:"cli.js",required:!0},{embeddedName:"resvg.wasm",outputName:"resvg.wasm",required:!1},{embeddedName:"tree-sitter.wasm",outputName:"tree-sitter.wasm",required:!1},{embeddedName:"tree-sitter-bash.wasm",outputName:"tree-sitter-bash.wasm",required:!1}];for(let d of l){let m=`${Ti}/${d.embeddedName}`,_=he.join(t,d.outputName);try{let n=await Ei(m);await Bun.write(_,n),console.log(` ✓ Extracted ${d.outputName} (${Kh(Buffer.from(n))})`)}catch(n){if(d.required)throw Error(`Failed to extract ${d.outputName}: ${n.message}`);console.warn(` ⚠ Could not extract ${d.outputName}: ${n.message}`)}}let i=Jh(),o=he.join(t,"vendor/ripgrep",i);try{t0.mkdirSync(o,{recursive:!0});let d=i==="x64-win32"?"rg.exe":"rg",m="ripgrep.node",_=`${Ti}/vendor/ripgrep/${i}/${d}`,n=he.join(o,d);try{let x=await Ei(_);if(await Bun.write(n,x),i!=="x64-win32")t0.chmodSync(n,493);console.log(` ✓ Extracted vendor/ripgrep/${i}/${d}`)}catch(x){console.warn(` ⚠ Could not extract ${d}: ${x.message}`)}let r=`${Ti}/vendor/ripgrep/${i}/${m}`,c=he.join(o,m);try{let x=await Ei(r);await Bun.write(c,x),console.log(` ✓ Extracted vendor/ripgrep/${i}/${m}`)}catch(x){console.warn(` ⚠ Could not extract ${m}: ${x.message}`)}}catch(d){console.warn(` ⚠ Could not setup ripgrep directory: ${d.message}`),console.warn(" (ripgrep functionality may be unavailable)")}return t0.writeFileSync(u,Si),console.log("✅ Claude SDK extraction complete"),e}var Si="0.1.70",Ti="node_modules/@anthropic-ai/claude-agent-sdk";var Pi=()=>{};import{EventEmitter as Wh}from"node:events";class Ot{emitter=new Wh;on(t,e){return this.emitter.on(t,e),this}off(t,e){return this.emitter.off(t,e),this}emit(t,...e){return this.emitter.emit(t,...e)}once(t,e){return this.emitter.once(t,e),this}removeAllListeners(t){if(t)this.emitter.removeAllListeners(t);else this.emitter.removeAllListeners();return this}addListener(t,e){return this.on(t,e)}removeListener(t,e){return this.off(t,e)}setMaxListeners(t){return this.emitter.setMaxListeners(t),this}getMaxListeners(){return this.emitter.getMaxListeners()}listeners(t){return this.emitter.listeners(t)}rawListeners(t){return this.emitter.rawListeners(t)}eventNames(){return this.emitter.eventNames()}listenerCount(t){return this.emitter.listenerCount(t)}prependListener(t,e){return this.emitter.prependListener(t,e),this}prependOnceListener(t,e){return this.emitter.prependOnceListener(t,e),this}}var $0=()=>{};var qa={};zu(qa,{promptFrontmatterSchema:()=>j_,parsePromptFrontmatter:()=>Yh,formatFrontmatterForDisplay:()=>Hh});function Vh(t){let e=t.trim();if(e.startsWith("[")&&e.endsWith("]")){let u=e.slice(1,-1);if(!u.trim())return[];return u.split(",").map((a)=>{let l=a.trim();if(l.startsWith('"')&&l.endsWith('"')||l.startsWith("'")&&l.endsWith("'"))return l.slice(1,-1);return l})}if(e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'"))return e.slice(1,-1);return e||void 0}function Yh(t){if(!t.startsWith("---"))return{content:t,hasFrontmatter:!1};let e=t.indexOf("---",3);if(e===-1)return{content:t,hasFrontmatter:!1};let u=t.slice(3,e).trim(),a=t.slice(e+3).trim(),l={},i=u.split(`
|
|
33
|
+
`);for(let d of i){let m=d.trim();if(!m||m.startsWith("#"))continue;let _=m.indexOf(":");if(_===-1)continue;let n=m.slice(0,_).trim(),r=m.slice(_+1),c=Vh(r);if(c!==void 0)l[n]=c}let o=j_.safeParse(l);if(!o.success){let d=o.error.issues.map((m)=>{if(m.code==="unrecognized_keys")return`Unknown frontmatter field(s): ${m.keys?.join(", ")}. Allowed fields: name, description, tags, version, author`;return`${m.path.join(".")}: ${m.message}`});throw Error(`Invalid prompt frontmatter:
|
|
34
|
+
${d.join(`
|
|
35
|
+
`)}`)}return{content:a,frontmatter:o.data,hasFrontmatter:!0}}function Hh(t){let e=[];if(t.name)e.push(`\uD83D\uDCDD ${t.name}`);if(t.description)e.push(` ${t.description}`);if(t.author)e.push(` Author: ${t.author}`);if(t.version)e.push(` Version: ${t.version}`);if(t.tags&&t.tags.length>0)e.push(` Tags: ${t.tags.join(", ")}`);return e.join(`
|
|
36
|
+
`)}var j_;var Ga=tt(()=>{Nt();j_=p.object({name:p.string().optional().describe("Display name for the prompt"),description:p.string().optional().describe("What this prompt does"),tags:p.array(p.string()).optional().describe("For categorization"),version:p.string().optional().describe("Prompt version"),author:p.string().optional().describe("Who wrote the prompt")}).strict()});import{execSync as Dh}from"node:child_process";import Be from"node:fs";import R_ from"node:os";import a0 from"node:path";import{query as Nh}from"@anthropic-ai/claude-agent-sdk";function Lh(){let t=[a0.join(R_.homedir(),".cline/cli/bin/claude"),a0.join(R_.homedir(),".claude/local/claude"),"/opt/homebrew/bin/claude","/usr/local/bin/claude"];for(let e of t)if(Be.existsSync(e))return e;try{let e=Dh("which claude",{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim();if(e&&Be.existsSync(e))return e}catch{}return null}var i2;var S_=tt(()=>{Pi();$0();Yt();i2=class i2 extends Ot{executionPath;logger;logParser;anthropicBaseUrl;model;abortController;logStream;killed=!1;sessionId;syntheticPid;promptFrontmatter;constructor(t,e,u,a,l){super();this.executionPath=t;this.logger=e;this.logParser=u;this.anthropicBaseUrl=a;this.model=l}static async ensureSdkAvailable(){try{if(!ye())return console.log("\uD83D\uDCE6 Running from source, using node_modules SDK"),null;let e;if(!Qa())e=wu(),console.log(`\uD83D\uDCE6 Using cached Claude SDK: ${e}`);else e=await va();if(!Be.existsSync(e))throw Error(`Extracted Claude CLI not found at: ${e}
|
|
37
|
+
This indicates a problem with the compilation or extraction process.`);return process.env.CLAUDE_PATH_TO_CLAUDE_EXECUTABLE=e,e}catch(t){if(console.error(`❌ Claude SDK extraction failed: ${t.message}`),t.stack)console.error(` Stack: ${t.stack}`);throw t}}async spawn(t,e,u){if(this.abortController)throw Error("Session already running");let a=u||a0.join(this.executionPath,`.hankweave/logs/log-${t.id}-sdk.jsonl`),l=a0.dirname(a);if(!Be.existsSync(l))Be.mkdirSync(l,{recursive:!0});this.logStream=Be.createWriteStream(a);let i=this.buildSDKOptions(t,e),{content:o,frontmatter:d}=this.buildPrompt(t);if(d)this.promptFrontmatter=d,this.logger.log(`Prompt frontmatter: ${JSON.stringify(d)}`);this.logger.log(`Starting Claude Agent SDK for codon ${t.id}`),this.logger.log(`Working directory: ${this.executionPath}`),this.logger.log(`Prompt content (${o.length} chars):
|
|
38
|
+
${o}`),this.abortController=new AbortController,this.killed=!1,this.syntheticPid=900000+Math.floor(Math.random()*99999),this.logger.log(`Generated synthetic PID: ${this.syntheticPid} for SDK session`),this.logger.log("[SPAWN-DEBUG] About to call runQuery","debug");let m=this.runQuery(o,i,t.id);return this.logger.log("[SPAWN-DEBUG] runQuery called, promise returned","debug"),m.catch((_)=>{this.logger.log(`Query error: ${_.message}`,"error"),this.cleanup(),this.emit("error",_)}),this.logger.log(`[SPAWN-DEBUG] Returning from spawn(), actualLogPath: ${a}`,"debug"),a}buildSDKOptions(t,e){let u=this.model||t.model,a={model:u.modelId,cwd:this.executionPath,permissionMode:"bypassPermissions",abortController:this.abortController,settingSources:["user"]};if(process.env.CLAUDE_PATH_TO_CLAUDE_EXECUTABLE)a.pathToClaudeCodeExecutable=process.env.CLAUDE_PATH_TO_CLAUDE_EXECUTABLE,this.logger.log(`Using custom Claude Code executable: ${process.env.CLAUDE_PATH_TO_CLAUDE_EXECUTABLE}`);if(t.continuationMode==="continue-previous"&&e)a.continue=!0,a.resume=e;let l=this.buildSystemPrompt(t);if(l)a.systemPrompt={type:"preset",preset:"claude_code",append:l},this.logger.log(`Added system prompt to Claude (${l.length} chars)`),this.logger.log(`System prompt content:
|
|
39
|
+
${l}`);if(!a.env)a.env={};let i=["PATH","HOME","USER","SHELL","TMPDIR","LANG","LC_ALL"];for(let o of i)if(process.env[o])a.env[o]=process.env[o];for(let o in process.env)if(o.startsWith("CLAUDE_CODE_"))a.env[o]=process.env[o],this.logger.log(`Passing through Claude Code env var: ${o}`);else if(o.startsWith("ANTHROPIC_")&&o!=="ANTHROPIC_API_KEY")a.env[o]=process.env[o],this.logger.log(`Passing through Anthropic env var: ${o}`);else if(o.startsWith("HANKWEAVE_")&&!o.startsWith("HANKWEAVE_RUNTIME_")&&!o.startsWith("HANKWEAVE_SENTINEL_")){let d=o.substring(10);a.env[d]=process.env[o],this.logger.log(`Passing through env var: ${d}`)}if(this.anthropicBaseUrl)a.env.ANTHROPIC_BASE_URL=this.anthropicBaseUrl,this.logger.log(`Using custom Anthropic base URL: ${this.anthropicBaseUrl}`);if(t.env)this.logger.log("Applying codon-specific environment variables..."),Object.assign(a.env,t.env);if(this.model)this.logger.log(`Using model override: ${u.modelId} (codon config specified: ${t.model.modelId})`);return a}buildSystemPrompt(t){let e=null;if(t.appendSystemPromptFile){let u=Array.isArray(t.appendSystemPromptFile)?t.appendSystemPromptFile:[t.appendSystemPromptFile],a=[];for(let l of u)a.push(Be.readFileSync(l,"utf-8"));e=a.join(`
|
|
40
|
+
|
|
41
|
+
`)}else if(t.appendSystemPromptText)e=t.appendSystemPromptText;if(e)return e.replace(/<%PROJECT_DIR%>/g,this.executionPath).replace(/<%EXECUTION_DIR%>/g,this.executionPath).replace(/<%DATA_DIR%>/g,a0.join(this.executionPath,"read_only_data_source"));return null}buildPrompt(t){let{parsePromptFrontmatter:e}=(Ga(),Od(qa)),u,a;if(t.promptFile){let i=Array.isArray(t.promptFile)?t.promptFile:[t.promptFile],o=[];for(let d=0;d<i.length;d++){let m=Be.readFileSync(i[d],"utf-8"),_=e(m);if(o.push(_.content),d===0&&_.hasFrontmatter)a=_.frontmatter}u=o.join(`
|
|
42
|
+
|
|
43
|
+
`)}else if(t.promptText)u=t.promptText;else throw Error("No prompt file or text provided");return{content:u.replace(/<%PROJECT_DIR%>/g,this.executionPath).replace(/<%EXECUTION_DIR%>/g,this.executionPath).replace(/<%DATA_DIR%>/g,a0.join(this.executionPath,"read_only_data_source")),frontmatter:a}}async runQuery(t,e,u){this.logger.log(`[SDK-runQuery] ======= ENTERED runQuery function for codon ${u} =======`,"info"),this.logger.log(`[SDK-runQuery] Starting query for codon ${u}`,"debug"),this.logger.log(`[SDK-runQuery] Options: model=${e.model}, cwd=${e.cwd}, continue=${e.continue||!1}, resume=${e.resume||"none"}`,"debug"),this.logger.log(`[SDK-runQuery] Prompt length: ${t.length} chars`,"debug");try{this.logger.log("[SDK-runQuery] Creating query generator","debug"),this.logger.log("[SDK-runQuery] About to call query() from SDK...","info");let a=Nh({prompt:t,options:e});this.logger.log("[SDK-runQuery] query() returned, generator created","info"),this.logger.log("[SDK-runQuery] Query generator created, entering message loop","debug");let l=0;for await(let d of a){if(l++,this.logger.log(`[SDK-runQuery] Received message ${l}: type=${d.type}`,"debug"),this.killed){this.logger.log("[SDK-runQuery] Killed flag set, breaking loop","debug");break}if(!this.sessionId)this.sessionId=d.session_id,this.logger.log(`[SDK-runQuery] Session ID: ${this.sessionId}`,"debug");let m=this.convertSDKMessageToJSONL(d);if(m)this.writeToLog(m);if(d.type==="assistant")this.emit("stdout",JSON.stringify(m))}this.logger.log(`[SDK-runQuery] Message loop completed, received ${l} message(s)`,"info"),this.logger.log("[SDK-runQuery] Parsing final log entries","debug"),this.logParser.parseNow();let i=this.logParser.getAllMessages();this.logger.log(`[SDK-runQuery] Got ${i.length} messages from log parser`,"debug");let o=i.some((d)=>{if(d.type==="result"&&d.subtype==="error")return d.result?.includes("context")||!1;return!1});this.logger.log(`[SDK-runQuery] Query complete, contextExceeded=${o}, calling cleanup and emitting exit`,"info"),this.cleanup(),this.logger.log("[SDK-runQuery] About to emit exit event","info"),this.emit("exit",0,o),this.logger.log("[SDK-runQuery] Exit event emitted","info")}catch(a){this.logger.log(`[SDK-runQuery] CAUGHT ERROR: ${qt(a).message}`,"error"),this.logger.log(`[SDK-runQuery] Error stack: ${qt(a).stack}`,"error");let l=this.extractErrorDetails(a,u);throw this.logger.log(l,"error"),this.cleanup(),a}}extractErrorDetails(t,e){let u=[];if(u.push(`Query execution failed for codon ${e}`),u.push(`Session ID: ${this.sessionId||"N/A"}`),u.push(`Working directory: ${this.executionPath}`),u.push(`Error type: ${t.name}`),u.push(`Error message: ${t.message}`),t.stack)u.push(`Stack trace:
|
|
44
|
+
${t.stack}`);try{this.logParser.parseNow();let a=this.logParser.getAllMessages(),l=a.filter((o)=>o.type==="result"&&o.subtype==="error");if(l.length>0){u.push(`
|
|
45
|
+
Log file analysis:`);for(let o of l)if(o.type==="result"){if(u.push(`- Result error: ${o.result||"No details available"}`),o.usage)u.push(` Usage: ${JSON.stringify(o.usage)}`)}}let i=a.filter((o)=>o.type==="assistant");if(i.length>0){let o=i[i.length-1];if(o.type==="assistant"){u.push(`
|
|
46
|
+
Last assistant message:`);let d=o.message.content;if(Array.isArray(d)){for(let m of d.slice(-3))if(m.type==="text"){let _=m.text.length>500?`${m.text.slice(0,500)}...`:m.text;u.push(` ${_}`)}else if(m.type==="tool_use")u.push(` [Tool use: ${m.name}]`)}}}}catch(a){u.push(`
|
|
47
|
+
Failed to parse log file: ${a.message}`)}return u.join(`
|
|
48
|
+
`)}convertSDKMessageToJSONL(t){if(t.type==="stream_event"||t.type==="tool_progress"||t.type==="auth_status")return null;if(t.type==="user"&&"isReplay"in t&&t.isReplay)return null;if(t.type==="system"&&!["init","hook_response","compact_boundary","status"].includes(t.subtype))return null;if(t.type==="result"&&t.subtype!=="success")return{...t,result:""};return t}writeToLog(t){if(this.logStream&&!this.logStream.destroyed)this.logStream.write(`${JSON.stringify(t)}
|
|
49
|
+
`)}async kill(t="SIGTERM"){if(!this.abortController||this.killed)return;this.killed=!0,this.logger.log(`Killing Claude Agent SDK session with ${t}`),this.logParser.parseNow(),this.abortController.abort(),await new Promise((e)=>setTimeout(e,100))}cleanup(){if(this.logger.log("[CLEANUP-DEBUG] cleanup() called","info"),this.logger.log(`[CLEANUP-DEBUG] Stack trace:
|
|
50
|
+
${Error().stack}`,"debug"),this.logStream&&!this.logStream.destroyed)this.logStream.end(),this.logStream=void 0;if(this.abortController)this.abortController=void 0;this.syntheticPid=void 0}isRunning(){return this.abortController!==void 0&&!this.killed}getSessionId(){return this.sessionId}getPid(){return this.syntheticPid}async closeLogStream(){if(this.logStream&&!this.logStream.destroyed)await new Promise((t)=>{this.logStream?.end(()=>t())}),this.logStream=void 0}async runSelfTest(){this.logger.log("Running Claude Agent SDK self-test...");let t=[],e=!1,u="unknown";try{e=!0;try{let n=a0.join(a0.dirname(it.resolve("@anthropic-ai/claude-agent-sdk")),"../package.json");u=JSON.parse(Be.readFileSync(n,"utf-8")).version||"unknown"}catch{u="installed"}t.push({name:"sdk_installed",passed:!0,message:`Claude Agent SDK found (version ${u})`})}catch(n){t.push({name:"sdk_installed",passed:!1,message:"Claude Agent SDK not found or failed to load: "+(n instanceof Error?n.message:"Unknown error")})}let a=process.env.CLAUDE_PATH_TO_CLAUDE_EXECUTABLE;if(a){let n=Be.existsSync(a);t.push({name:"claude_cli_executable",passed:n,message:n?`Claude CLI found at: ${a}`:`Claude CLI not found at specified path: ${a}`})}else{let n=Lh();if(n)t.push({name:"claude_cli_executable",passed:!0,message:`Claude CLI detected at: ${n}`});else t.push({name:"claude_cli_executable",passed:!0,message:"Claude CLI not detected, SDK will use internal CLI resolution"})}let l=!!process.env.ANTHROPIC_API_KEY,i=!!process.env.CLAUDE_CODE_OAUTH_TOKEN,o=l||i,d=i?"CLAUDE_CODE_OAUTH_TOKEN":l?"ANTHROPIC_API_KEY":"none";if(t.push({name:"authentication",passed:o,message:o?`Authentication configured via ${d}`:"No authentication found (set ANTHROPIC_API_KEY or CLAUDE_CODE_OAUTH_TOKEN)"}),this.anthropicBaseUrl)t.push({name:"custom_base_url",passed:!0,message:`Using custom Anthropic base URL: ${this.anthropicBaseUrl}`});let m=t.every((n)=>n.passed),_={shim:{name:"claude-agent-sdk-manager",version:u},agent:{name:"claude-agent-sdk",version:u,found:e},checks:t,overall:{passed:m,message:m?"All checks passed":"Some checks failed"}};return this.logger.log(`Self-test completed: ${_.overall.passed?"PASSED":"FAILED"}`,_.overall.passed?"info":"error"),_}}});var Zh,Th,o2,Xa,Eh,Rh,Sh,Oh,Ph,Ch,yh,O_,tg,eg,ug,to,$V,XV,$a,ag,lg,ig,og,dg,P_;var eo=tt(()=>{Nt();Zh=p.string(),Th=p.string().regex(/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,"Must be a valid UUID v4"),o2=p.string(),Xa=p.string().min(1,"Model identifier cannot be empty"),Eh=p.enum(["bypassPermissions","requestPermissions"]),Rh=p.enum(["ANTHROPIC_API_KEY","GEMINI_API_KEY","GOOGLE_API_KEY","OPENAI_API_KEY","env","none"]),Sh=p.object({type:p.literal("system"),subtype:p.literal("init"),cwd:p.string().min(1,"Working directory cannot be empty"),session_id:Zh,tools:p.array(o2).min(1,"Must have at least one tool"),mcp_servers:p.array(p.unknown()).default([]),model:Xa,permissionMode:Eh,apiKeySource:Rh}).passthrough(),Oh=p.object({type:p.literal("tool_use"),id:p.string().regex(/^(toolu_[a-zA-Z0-9]+|call_[a-fA-F0-9]+)$/,"Invalid tool use ID format"),name:o2,input:p.record(p.unknown()).optional()}),Ph=p.object({type:p.literal("text"),text:p.string()}),Ch=p.object({type:p.literal("thinking"),thinking:p.string()}),yh=p.object({type:p.literal("tool_result"),tool_use_id:p.string().regex(/^(toolu_[a-zA-Z0-9]+|call_[a-fA-F0-9]+)$/,"Invalid tool use ID format"),content:p.union([p.string(),p.record(p.unknown()),p.array(p.object({type:p.literal("text"),text:p.string()}))])}),O_=p.union([Oh,Ph,Ch,yh]),tg=p.object({type:p.literal("assistant"),message:p.object({id:p.string().regex(/^(msg_[a-zA-Z0-9]+|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$/i,"Invalid message ID format"),type:p.literal("message"),role:p.literal("assistant"),model:Xa,content:p.union([p.array(O_),p.string()]),usage:p.object({input_tokens:p.number().int().nonnegative(),output_tokens:p.number().int().nonnegative(),cache_creation_input_tokens:p.number().int().nonnegative().optional(),cache_read_input_tokens:p.number().int().nonnegative().optional()}).passthrough().optional(),stop_reason:p.enum(["end_turn","max_tokens","stop_sequence","tool_use"]).nullable().optional(),stop_sequence:p.string().nullable().optional()})}),eg=p.object({type:p.literal("user"),message:p.object({role:p.literal("user"),content:p.union([p.array(O_),p.string()])})}),ug=p.object({type:p.literal("result"),subtype:p.enum(["success","error"]),is_error:p.boolean(),duration_ms:p.number().int().nonnegative(),duration_api_ms:p.number().int().nonnegative(),num_turns:p.number().int().nonnegative(),result:p.string(),session_id:p.string().optional(),total_cost_usd:p.number().optional(),usage:p.object({input_tokens:p.number().int().nonnegative().optional(),output_tokens:p.number().int().nonnegative().optional(),cache_creation_input_tokens:p.number().int().nonnegative().optional(),cache_read_input_tokens:p.number().int().nonnegative().optional(),server_tool_use:p.object({web_search_requests:p.number().int().nonnegative().optional()}).passthrough().optional()}).passthrough().optional()}).passthrough(),to=p.union([Sh,tg,eg,ug]),$V=p.array(to).min(1,"Session must contain at least one message"),XV=p.object({filename:p.string(),session_id:Th,total_messages:p.number().int().nonnegative(),message_type_counts:p.record(p.number().int().nonnegative()),tools_used:p.array(o2),tool_use_count:p.number().int().nonnegative(),duration_ms:p.number().int().nonnegative().optional(),duration_api_ms:p.number().int().nonnegative().optional(),num_turns:p.number().int().nonnegative().optional(),success:p.boolean().optional(),cwd:p.string(),model:Xa}),$a=p.object({type:p.literal("ephemeral")}),ag=p.union([p.object({type:p.literal("text"),text:p.string(),cache_control:$a.optional()}),p.object({type:p.literal("tool_use"),id:p.string(),name:o2,input:p.record(p.unknown()).optional(),cache_control:$a.optional()}),p.object({type:p.literal("tool_result"),tool_use_id:p.string(),content:p.union([p.string(),p.record(p.unknown())]),cache_control:$a.optional()})]),lg=p.object({role:p.enum(["user","assistant","system"]),content:p.union([p.string(),p.array(ag)])}),ig=p.object({type:p.literal("text"),text:p.string(),cache_control:$a.optional()}),og=p.object({name:o2,description:p.string(),input_schema:p.record(p.unknown())}),dg=p.object({user_id:p.string()}).passthrough(),P_=p.object({model:Xa,messages:p.array(lg),temperature:p.number().min(0).max(2).optional(),system:p.array(ig).optional(),tools:p.array(og).optional(),metadata:dg.optional(),max_tokens:p.number().int().positive().optional(),stream:p.boolean().optional()})});import C_ from"node:fs";class Ja{options;buffer="";lastPosition=0;logTimer;isFirstParse=!0;constructor(t){this.options=t}start(){let{parsingInterval:t}=this.options;this.options.logger?.log(`[LOG-PARSER] Starting log parser for ${this.options.logPath} (interval: ${t}ms)`,"debug"),this.logTimer=setInterval(()=>this.parseLogFile(),t),this.parseLogFile()}stop(){if(this.logTimer)this.options.logger?.log(`[LOG-PARSER] Stopping log parser for ${this.options.logPath}`,"debug"),clearInterval(this.logTimer),this.logTimer=void 0;this.buffer="",this.lastPosition=0}getAllMessages(){return this.parseLogFile({noEmit:!0,fullParse:!0})}parseNow(){this.parseLogFile()}parseLogFile(t){let{logPath:e}=this.options,{noEmit:u=!1,fullParse:a=!1}=t||{},l=[];if(!C_.existsSync(e)){if(this.isFirstParse)this.options.logger?.log(`[LOG-PARSER] Log file does not exist yet: ${e}`,"debug");return l}try{let i=C_.readFileSync(e,"utf-8");if(a){let o=i.split(`
|
|
51
|
+
`);for(let d of o)if(d.trim()){let m=this.parseLogLine(d,u);if(m)l.push(m)}}else{let o=this.isFirstParse?i:i.slice(this.lastPosition);if(!o)return l;this.buffer+=o;let d=this.buffer.split(`
|
|
52
|
+
`);this.buffer=d.pop()||"";for(let m of d)if(m.trim()){let _=this.parseLogLine(m,u);if(_)l.push(_)}this.lastPosition=i.length-this.buffer.length,this.isFirstParse=!1}if(l.length>0){let o=l.map((d)=>{let m="subtype"in d?d.subtype:"n/a";return`${d.type}:${m}`}).join(", ");this.options.logger?.log(`[LOG-PARSER] Parsed ${l.length} message(s): [${o}]`,"debug")}}catch(i){this.options.logger?.log(`[LOG-PARSER] Error parsing log: ${i}`,"error"),console.error(`Error parsing log: ${i}`)}return l}parseLogLine(t,e=!1){try{let u=JSON.parse(t),a=to.safeParse(u);if(!a.success){if(u.type==="system"&&u.subtype==="init")console.error(`[ClaudeLogParser] Failed to parse system init message for codon ${this.options.codonId}:`,a.error.format()),console.error("[ClaudeLogParser] Message that failed validation:",JSON.stringify(u,null,2));return}let l=a.data;if(l.type==="system"&&l.subtype==="init")this.options.logger?.log(`[LOG-PARSER] Found system init message for codon ${this.options.codonId}, session: ${l.session_id}`,"info");if(!e)switch(l.type){case"system":if(this.options.onSystemMessage)this.options.onSystemMessage(l);break;case"assistant":if(this.options.onAssistantMessage)this.options.onAssistantMessage(l);break;case"user":if(this.options.onUserMessage)this.options.onUserMessage(l);break;case"result":if(this.options.onResultMessage)this.options.onResultMessage(l);break}return l}catch{return}}}var y_=tt(()=>{eo()});function d2(t){return tB.has(t.type)}function p2(t){return eB.has(t.type)}function Wa(t){return uB.has(t.type)}function Kr(t){return aB.has(t.type)}var er,ur,pg,Ka,tr,mg,ar,lr,ir,or,dr,pr,mr,nr,_r,rr,cr,xr,Ir,wr,sr,kr,fr,hr,gr,Br,Qr,vr,qr,Gr,$r,Xr,Jr,_t,ng,_g,rg,cg,xg,Ig,wg,sg,kg,fg,hg,gg,Bg,Qg,vg,qg,Gg,$g,Xg,Jg,Kg,Wg,Vg,Yg,Hg,zg,bg,Mg,Ug,Fg,Ag,jg,Dg,Ng,Lg,Zg,Tg,Eg,Rg,Sg,HV,zV,Og,Pg,Cg,yg,tB,eB,uB,aB,Va,Wr;var Ya=tt(()=>{Nt();er=p.discriminatedUnion("type",[p.object({type:p.literal("success")}),p.object({type:p.literal("error"),code:p.number()}),p.object({type:p.literal("killed"),signal:p.string()})]),ur=p.object({type:p.enum(["timeout","rate-limit","api-error","sentinel-load-failure","unknown"]),retriable:p.boolean(),message:p.string().optional(),sentinelRefs:p.array(p.string()).optional()}),pg=p.object({inputTokens:p.number(),outputTokens:p.number(),cacheCreationTokens:p.number(),cacheReadTokens:p.number()}),Ka=p.lazy(()=>p.discriminatedUnion("isDirectory",[p.object({name:p.string(),path:p.string(),isDirectory:p.literal(!0),children:p.array(Ka)}),p.object({name:p.string(),path:p.string(),isDirectory:p.literal(!1),lastModified:p.string(),children:p.array(Ka)})])),tr=p.object({codonId:p.string(),codonName:p.string().optional(),status:p.enum(["preparing","starting","initializing","running","completing-sentinels","completed","failed","skipped"]),startTime:p.string(),endTime:p.string().optional(),sessionId:p.string().optional(),previousSessionId:p.string().optional(),claudeSessionId:p.string().optional(),tokenUsage:pg.optional(),cost:p.number().optional(),duration:p.number().optional(),exitStatus:er.optional(),failureReason:ur.optional(),description:p.string().optional(),finalCost:p.number().optional(),partialCost:p.number().optional(),currentCost:p.number().optional(),completionCheckpoint:p.string().optional(),rigSetupCheckpoint:p.string().optional(),errorCheckpoint:p.string().optional(),skipCheckpoint:p.string().optional()}),mg=p.object({codonId:p.string(),codonName:p.string(),checkpointType:p.enum(["rig-setup","completed","error","skipped"]),sha:p.string(),status:p.enum(["preparing","starting","initializing","running","completing-sentinels","completed","failed","skipped"]),timestamp:p.string()}),ar=p.object({serverVersion:p.string(),executionPath:p.string(),dataPath:p.string()}),lr=p.object({currentCodon:tr.optional(),completedCodons:p.array(tr),fileTree:p.array(Ka),totalCost:p.number(),totalTime:p.number(),recentFileAccess:p.object({path:p.string(),content:p.string(),timestamp:p.date()}).optional(),isRollingBack:p.boolean()}),ir=p.object({codonId:p.string(),codonName:p.string(),codonDescription:p.string().optional(),sessionId:p.string(),previousSessionId:p.string().optional(),startTime:p.string().datetime(),promptMetadata:p.object({name:p.string().optional(),description:p.string().optional(),tags:p.array(p.string()).optional(),version:p.string().optional(),author:p.string().optional()}).optional()}),or=p.object({codonId:p.string(),success:p.boolean(),cost:p.number(),duration:p.number(),exitStatus:er,failureReason:ur.optional()}),dr=p.object({codonId:p.string(),action:p.enum(["thinking","message","tool_use"]),content:p.string(),toolName:p.string().optional(),toolInput:p.record(p.unknown()).optional()}),pr=p.object({codonId:p.string(),inputTokens:p.number(),outputTokens:p.number(),cacheCreationTokens:p.number(),cacheReadTokens:p.number(),totalCost:p.number(),modelId:p.string().optional(),modelUsage:p.record(p.string(),p.object({inputTokens:p.number(),outputTokens:p.number(),cacheReadInputTokens:p.number().optional(),cacheCreationInputTokens:p.number().optional(),costUSD:p.number()})).optional()}),mr=p.object({codonId:p.string(),toolUseId:p.string(),toolName:p.string(),result:p.string(),truncated:p.boolean(),originalLength:p.number(),executionTimeMs:p.number(),isError:p.boolean()}),nr=p.object({path:p.string(),filename:p.string(),content:p.string(),action:p.enum(["created","modified","deleted"])}),_r=p.object({tree:p.array(Ka)}),rr=p.object({message:p.string(),codon:p.string().optional(),fatal:p.boolean(),severity:p.enum(["fatal","codon","operation","warning"]).optional(),context:p.string().optional(),code:p.string().optional()}),cr=p.object({codonId:p.string(),codonName:p.string(),message:p.string()}),xr=p.object({message:p.string()}),Ir=p.object({reason:p.enum(["startup","codon-completed","all-codons-completed"]),message:p.string()}),wr=p.object({runId:p.string(),checkpoints:p.array(mg),currentBranch:p.string()}),sr=p.object({fromRun:p.string(),fromCodon:p.string(),toCodon:p.string(),toCheckpoint:p.string(),checkpointType:p.string(),codonsToProcess:p.array(p.string())}),kr=p.object({codonId:p.string(),codonName:p.string(),checkpoint:p.string(),checkpointType:p.string(),message:p.string()}),fr=p.object({codonId:p.string(),codonName:p.string(),directories:p.array(p.string()),status:p.enum(["started","completed","failed","partial"]),successfulCleanups:p.array(p.string()).optional(),failedCleanups:p.array(p.object({directory:p.string(),error:p.string()})).optional(),error:p.string().optional()}),hr=p.object({currentStep:p.number(),totalSteps:p.number(),message:p.string()}),gr=p.object({fromRun:p.string(),toRun:p.string(),checkpoint:p.string(),codonId:p.string(),codonName:p.string(),checkpointType:p.string(),autoRestart:p.boolean()}),Br=p.object({message:p.string(),timestamp:p.string(),clientId:p.string().optional()}),Qr=p.object({events:p.array(p.any()),hasMore:p.boolean()}),vr=p.object({transitionType:p.enum(["RunStarted","RunCompleted","RunFailed","RunCrashed","CodonStarted","CodonTransitioned","CostsUpdated","CostsIncremented","AssistantMessageCountUpdated","CheckpointCreated","InitialCheckpointSet","CodonFinalCostSet","SentinelStatesUpdated"]),runId:p.string().optional(),codonId:p.string().optional(),transition:p.object({type:p.string(),data:p.record(p.unknown())}),resultingState:p.object({currentRunId:p.string().nullable(),runCount:p.number(),totalCost:p.number(),currentRunCost:p.number()})}),qr=p.object({sentinelId:p.string(),codonId:p.string(),model:p.string(),triggerType:p.enum(["event","sequence"]),executionStrategy:p.enum(["immediate","debounce","count","timeWindow"]),conversational:p.boolean(),source:p.enum(["file","inline"]),sourcePath:p.string().optional()}),Gr=p.object({sentinelId:p.string(),codonId:p.string(),reason:p.enum(["codon-complete","fatal-error","consecutive-failures","shutdown"]),errorType:p.enum(["template","configuration","corruption","resource"]).optional(),finalCost:p.number(),llmCallCount:p.number()}),$r=p.object({sentinelId:p.string(),codonId:p.string(),errorType:p.enum(["llm-call-failed","template-render-failed","file-write-failed"]),message:p.string(),retriable:p.boolean(),consecutiveFailureCount:p.number()}),Xr=p.object({sentinelId:p.string(),codonId:p.string(),triggerNumber:p.number(),outputType:p.enum(["text","structured"]),content:p.union([p.string(),p.record(p.unknown())]),cost:p.number(),tokens:p.object({input:p.number(),output:p.number()}),eventCount:p.number()}),Jr=p.object({sentinelId:p.string(),codonId:p.string(),triggerNumber:p.number(),strategy:p.enum(["immediate","debounce","count","timeWindow"]),eventCount:p.number(),queueSize:p.number()}),_t=p.object({id:p.string(),timestamp:p.string()}),ng=_t.extend({type:p.literal("server.ready"),data:ar}),_g=_t.extend({type:p.literal("state.snapshot"),data:lr}),rg=_t.extend({type:p.literal("codon.started"),data:ir}),cg=_t.extend({type:p.literal("codon.completed"),data:or}),xg=_t.extend({type:p.literal("assistant.action"),data:dr}),Ig=_t.extend({type:p.literal("token.usage"),data:pr}),wg=_t.extend({type:p.literal("tool.result"),data:mr}),sg=_t.extend({type:p.literal("file.updated"),data:nr}),kg=_t.extend({type:p.literal("filetree.updated"),data:_r}),fg=_t.extend({type:p.literal("error"),data:rr}),hg=_t.extend({type:p.literal("incomplete.codon"),data:cr}),gg=_t.extend({type:p.literal("info"),data:xr}),Bg=_t.extend({type:p.literal("server.idle"),data:Ir}),Qg=_t.extend({type:p.literal("checkpoint.list"),data:wr}),vg=_t.extend({type:p.literal("rollback.started"),data:sr}),qg=_t.extend({type:p.literal("rollback.codonCheckpoint"),data:kr}),Gg=_t.extend({type:p.literal("rollback.rigCleanup"),data:fr}),$g=_t.extend({type:p.literal("rollback.progress"),data:hr}),Xg=_t.extend({type:p.literal("rollback.completed"),data:gr}),Jg=_t.extend({type:p.literal("pong"),data:Br}),Kg=_t.extend({type:p.literal("history.batch"),data:Qr}),Wg=_t.extend({type:p.literal("state.transition"),data:vr}),Vg=_t.extend({type:p.literal("sentinel.loaded"),data:qr}),Yg=_t.extend({type:p.literal("sentinel.unloaded"),data:Gr}),Hg=_t.extend({type:p.literal("sentinel.error"),data:$r}),zg=_t.extend({type:p.literal("sentinel.output"),data:Xr}),bg=_t.extend({type:p.literal("sentinel.triggered"),data:Jr}),Mg=p.object({id:p.string(),type:p.literal("codon.start"),data:p.object({codonId:p.string(),skipPreCommands:p.boolean().optional()})}),Ug=p.object({id:p.string(),type:p.literal("codon.next")}),Fg=p.object({id:p.string(),type:p.literal("codon.skip")}),Ag=p.object({id:p.string(),type:p.literal("codon.redo")}),jg=p.object({id:p.string(),type:p.literal("server.shutdown")}),Dg=p.object({id:p.string(),type:p.literal("codon.forceStop"),data:p.object({reason:p.string().optional()}).optional()}),Ng=p.object({id:p.string(),type:p.literal("checkpoint.list"),data:p.object({runId:p.string().optional()}).optional()}),Lg=p.object({id:p.string(),type:p.literal("rollback.toCheckpoint"),data:p.object({checkpointSha:p.string(),autoRestart:p.boolean().optional()})}),Zg=p.object({id:p.string(),type:p.literal("rollback.toCodon"),data:p.object({codonId:p.string(),checkpointType:p.enum(["start","end","rig-setup","completed","error","skipped"]),autoRestart:p.boolean().optional()})}),Tg=p.object({id:p.string(),type:p.literal("rollback.toLastSuccess"),data:p.object({autoRestart:p.boolean().optional()}).optional()}),Eg=p.object({id:p.string(),type:p.literal("ping")}),Rg=p.object({id:p.string(),type:p.literal("ping.broadcast")}),Sg=p.object({id:p.string(),type:p.literal("history.sync")}),HV=p.discriminatedUnion("type",[Mg,Ug,Fg,Ag,jg,Dg,Ng,Lg,Zg,Tg,Eg,Rg,Sg]),zV=p.discriminatedUnion("type",[ng,_g,rg,cg,xg,Ig,wg,sg,kg,fg,hg,gg,Bg,Qg,vg,qg,Gg,$g,Xg,Jg,Kg,Wg,Vg,Yg,Hg,zg,bg]),Og=["codon.started","codon.completed","state.snapshot","server.idle","token.usage","info","error","checkpoint.list","rollback.started","rollback.progress","rollback.codonCheckpoint","rollback.completed","rollback.rigCleanup","state.transition"],Pg=["assistant.action","tool.result","file.updated","filetree.updated"],Cg=["sentinel.loaded","sentinel.unloaded","sentinel.error","sentinel.output","sentinel.triggered"],yg=["server.ready","pong","history.batch","incomplete.codon"],tB=new Set(Og),eB=new Set(Pg),uB=new Set(Cg),aB=new Set(yg);Va={"server.ready":ar,"state.snapshot":lr,"codon.started":ir,"codon.completed":or,"assistant.action":dr,"token.usage":pr,"tool.result":mr,"file.updated":nr,"filetree.updated":_r,error:rr,"incomplete.codon":cr,info:xr,"server.idle":Ir,"checkpoint.list":wr,"rollback.started":sr,"rollback.codonCheckpoint":kr,"rollback.rigCleanup":fr,"rollback.progress":hr,"rollback.completed":gr,pong:Br,"history.batch":Qr,"state.transition":vr,"sentinel.loaded":qr,"sentinel.unloaded":Gr,"sentinel.error":$r,"sentinel.output":Xr,"sentinel.triggered":Jr},Wr=Object.keys(Va)});var Vr,m2,Yr,lB,Hr,iB,oB,dB,pB,mB,nB,_B,rB,cB,n2,_2=()=>{};var uo=tt(()=>{Nt();Vr=p.union([p.string().describe("Base64-encoded string"),p.instanceof(Uint8Array),p.instanceof(ArrayBuffer),p.instanceof(Buffer)]),m2=p.lazy(()=>p.union([p.null(),p.string(),p.number(),p.boolean(),p.array(m2),p.record(m2)])),Yr=p.array(p.discriminatedUnion("type",[p.object({type:p.literal("text"),text:p.string()}).strict(),p.object({type:p.literal("media"),data:p.string(),mediaType:p.string()}).strict()])),lB=p.discriminatedUnion("type",[p.object({type:p.literal("text"),value:p.string()}).strict(),p.object({type:p.literal("json"),value:m2}).strict(),p.object({type:p.literal("error-text"),value:p.string()}).strict(),p.object({type:p.literal("error-json"),value:m2}).strict(),p.object({type:p.literal("content"),value:Yr}).strict()]),Hr=p.object({type:p.literal("text"),text:p.string()}).strict(),iB=p.object({type:p.literal("image"),image:p.union([Vr,p.instanceof(URL)]),mediaType:p.string().optional()}).strict(),oB=p.object({type:p.literal("file"),data:p.union([Vr,p.instanceof(URL)]),mediaType:p.string(),filename:p.string().optional()}).strict(),dB=p.object({type:p.literal("tool-call"),toolCallId:p.string(),toolName:p.string(),input:p.record(m2).describe("Arguments for the tool call")}).strict(),pB=Yr,mB=p.object({type:p.literal("tool-result"),toolCallId:p.string(),toolName:p.string(),output:lB,experimental_content:pB.optional(),isError:p.boolean().optional()}).strict(),nB=p.object({role:p.literal("system"),content:p.string()}).strict(),_B=p.object({role:p.literal("user"),content:p.union([p.string(),p.array(p.union([Hr,iB,oB]))])}).strict(),rB=p.object({role:p.literal("assistant"),content:p.union([p.string(),p.array(p.union([Hr,dB]))])}).strict(),cB=p.object({role:p.literal("tool"),content:p.array(mB)}).strict(),n2=p.discriminatedUnion("role",[nB,_B,rB,cB]);_2();_2();_2();_2();_2()});var Ha,jV,DV,NV,LV,ZV;var zr=tt(()=>{Nt();uo();Ha=p.object({temperature:p.number().min(0).max(2).optional().describe("Temperature for response generation (0=deterministic, 2=creative)"),maxOutputTokens:p.number().int().positive().max(1e5).optional().describe("Maximum tokens in the response"),maxRetries:p.number().int().min(0).max(5).optional().describe("Number of retry attempts for failed LLM calls")}),jV=Ha.extend({model:p.custom().optional(),system:p.string().optional(),messages:p.array(n2)}),DV=p.object({text:p.string(),finishReason:p.enum(["stop","length","content-filter","tool-calls","error","other"]),usage:p.object({inputTokens:p.number(),outputTokens:p.number()})}),NV=p.object({textStream:p.custom()}),LV=Ha.extend({model:p.custom().optional(),schema:p.custom().optional(),messages:p.array(n2),system:p.string().optional(),mode:p.enum(["auto","json","tool"]).optional(),output:p.enum(["object","array","enum","no-schema"]).optional(),enum:p.array(p.string()).optional(),schemaName:p.string().optional(),schemaDescription:p.string().optional()}),ZV=p.object({object:p.any(),finishReason:p.enum(["stop","length","content-filter","error","other"]),usage:p.object({inputTokens:p.number(),outputTokens:p.number()})})});function br(t,e){let u=e.split("."),a=t;for(let l of u){if(a===null||a===void 0)return;a=a[l]}return a}var ao=(t)=>{return t==="*"||Wr.includes(t)},xB,IB,wB,sB,kB,Mr,fB,hB,gB,BB,QB,vB,qB,GB,Ur,r2,OV,$B,za;var c2=tt(()=>{Nt();Ya();zr();xB=p.object({operator:p.enum(["equals","notEquals"]),path:p.string().min(1),value:p.union([p.string(),p.number(),p.boolean(),p.null()])}),IB=p.object({operator:p.enum(["in","notIn"]),path:p.string().min(1),value:p.array(p.union([p.string(),p.number()])).min(1)}),wB=p.object({operator:p.literal("contains"),path:p.string().min(1),value:p.string()}),sB=p.object({operator:p.literal("matches"),path:p.string().min(1),value:p.string()}),kB=p.object({operator:p.enum(["greaterThan","lessThan"]),path:p.string().min(1),value:p.number()}),Mr=p.discriminatedUnion("operator",[xB,IB,wB,sB,kB]),fB=p.object({type:p.string().refine(ao,{message:"Invalid event type"}),conditions:p.array(Mr).optional()}).superRefine((t,e)=>{if(t.type==="*")return;if(t.conditions){let u=Va[t.type];if(u&&u instanceof p.ZodObject){let a=u.shape;for(let l of t.conditions){let i=l.path.split("."),o=a,d=!0;for(let m=0;m<i.length;m++){let _=i[m];if(!o||!o[_]){d=!1;break}let n=o[_];if(n instanceof p.ZodObject)o=n.shape;else if(n instanceof p.ZodOptional&&n._def.innerType instanceof p.ZodObject)o=n._def.innerType.shape;else if(n instanceof p.ZodUnion||n instanceof p.ZodDiscriminatedUnion){let r;if(n instanceof p.ZodDiscriminatedUnion)r=Array.from(n._def.optionsMap.values());else r=n._def.options;let c=null;for(let x of r)if(x instanceof p.ZodObject){let I=x.shape;if(m<i.length-1&&I[i[m+1]]){c=I;break}}o=c}else o=null}if(!d)e.addIssue({code:p.ZodIssueCode.custom,message:`Invalid path "${l.path}" for event type "${t.type}"`,path:["conditions"]})}}}}),hB=p.object({type:p.literal("event"),on:p.array(p.string().refine(ao,{message:"Invalid event type"})).min(1),conditions:p.array(Mr).optional()}),gB=p.object({type:p.literal("sequence"),interestFilter:p.object({on:p.array(p.string().refine(ao,{message:"Invalid event type"})).min(1)}),pattern:p.array(fB).min(1),options:p.object({consecutive:p.boolean().optional()}).optional()}),BB=p.discriminatedUnion("type",[hB,gB]).superRefine((t,e)=>{if(t.type==="event"&&t.conditions){if(t.on.includes("*"))return;for(let u of t.conditions){let a=!1;for(let l of t.on){if(l==="*")continue;let i=Va[l];if(i&&i instanceof p.ZodObject){let o=i.shape,d=u.path.split("."),m=o,_=!0;for(let n=0;n<d.length;n++){let r=d[n];if(!m||!m[r]){_=!1;break}let c=m[r];if(c instanceof p.ZodObject)m=c.shape;else if(c instanceof p.ZodOptional&&c._def.innerType instanceof p.ZodObject)m=c._def.innerType.shape;else if(c instanceof p.ZodUnion||c instanceof p.ZodDiscriminatedUnion){let x;if(c instanceof p.ZodDiscriminatedUnion)x=Array.from(c._def.optionsMap.values());else x=c._def.options;let I=null;for(let s of x)if(s instanceof p.ZodObject){let k=s.shape;if(n<d.length-1&&k[d[n+1]]){I=k;break}}m=I}else m=null}if(_){a=!0;break}}}if(!a)e.addIssue({code:p.ZodIssueCode.custom,message:`Path "${u.path}" is not valid for any of the specified event types`,path:["conditions"]})}}}),QB=p.discriminatedUnion("strategy",[p.object({strategy:p.literal("immediate")}),p.object({strategy:p.literal("debounce"),milliseconds:p.number().int().positive().max(300000)}),p.object({strategy:p.literal("count"),threshold:p.number().int().positive().max(1000)}),p.object({strategy:p.literal("timeWindow"),milliseconds:p.number().int().positive().max(3600000)})]),vB=p.discriminatedUnion("type",[p.object({type:p.literal("maxTurns"),maxTurns:p.number().int().positive().max(100)}),p.object({type:p.literal("maxTokens"),maxTokens:p.number().int().positive().max(1e5)})]),qB=p.object({maxConsecutiveFailures:p.number().int().min(1).optional().describe("Maximum consecutive failures before unloading sentinel. Default: 3"),unloadOnFatalError:p.boolean().optional().describe("Whether to unload on fatal errors. Default: true")}).optional(),GB=p.object({output:p.enum(["object","array","enum"]),schemaStr:p.string().optional(),schemaFile:p.string().optional(),enumValues:p.array(p.string()).min(1).optional(),schemaName:p.string().optional(),schemaDescription:p.string().optional()}).refine((t)=>{if(t.output==="enum")return t.enumValues&&t.enumValues.length>0&&!t.schemaStr&&!t.schemaFile;let e=!!t.schemaStr,u=!!t.schemaFile;return(e||u)&&!(e&&u)&&!t.enumValues},{message:"Must provide exactly one of: schemaStr, schemaFile (for object/array), or enumValues (for enum)"}),Ur=p.object({lifecycle:p.boolean().optional(),errors:p.boolean().optional(),outputs:p.boolean().optional(),triggers:p.boolean().optional()}).optional(),r2=p.object({id:p.string().min(1).regex(/^[a-z0-9-]+$/,{message:"ID must contain only lowercase letters, numbers, and hyphens"}),name:p.string().min(1),description:p.string().optional(),trigger:BB,execution:QB,systemPromptFile:p.union([p.string(),p.array(p.string())]).optional(),systemPromptText:p.string().optional(),userPromptFile:p.union([p.string(),p.array(p.string())]).optional(),userPromptText:p.string().optional(),conversational:p.object({trimmingStrategy:vB,continueOnError:p.boolean().optional()}).optional(),errorHandling:qB,llmParams:Ha.optional(),model:p.string().describe('The full model ID to use (e.g., "anthropic/claude-3-5-sonnet-20241022", "openai/gpt-4-turbo").'),structuredOutput:GB.optional(),joinString:p.string().optional().describe("String to join entries in text-based log file. Only valid for text output. Supports escape sequences: \\n (newline), \\t (tab), \\r (carriage return), \\\\ (backslash). Defaults to '\\n---\\n' for visual separation."),reportToWebsocket:Ur,output:p.object({format:p.enum(["text","json","jsonl"]).optional(),file:p.string().optional()}).optional()}).strict().refine((t)=>t.userPromptFile||t.userPromptText,{message:"Each sentinel must have at least one of `userPromptFile` or `userPromptText` defined.",path:[]}).refine((t)=>{if(t.conversational)return t.systemPromptFile||t.systemPromptText;return!0},{message:"Conversational sentinels require a system prompt (systemPromptFile or systemPromptText).",path:["conversational"]}).refine((t)=>{if(t.joinString&&t.structuredOutput)return!1;return!0},{message:"joinString is only valid for text output, not structured output",path:["joinString"]}),OV=p.array(r2),$B=p.object({failCodonIfNotLoaded:p.boolean().optional(),outputPaths:p.object({logFile:p.string().optional(),lastValueFile:p.string().optional()}).optional(),reportToWebsocket:Ur}).optional(),za=p.object({sentinelConfig:p.union([p.string(),r2]),settings:$B})});var ba;var lo=tt(()=>{ba={version:"1.0.0",lastUpdated:"2025-01-22T00:00:00.000Z",providers:[]}});var Ma;var io=tt(()=>{Ma={version:"1.0.0",lastUpdated:"2025-12-22T22:11:56.271Z",providers:[{id:"moonshotai-cn",name:"Moonshot AI (China)",models:[{providerId:"moonshotai-cn",modelId:"kimi-k2-thinking-turbo",name:"Kimi K2 Thinking Turbo",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.15,output:8,cache_read:0.15},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2024-08",release_date:"2025-11-06",last_updated:"2025-11-06"},{providerId:"moonshotai-cn",modelId:"kimi-k2-thinking",name:"Kimi K2 Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.5,cache_read:0.15},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2024-08",release_date:"2025-11-06",last_updated:"2025-11-06"},{providerId:"moonshotai-cn",modelId:"kimi-k2-0905-preview",name:"Kimi K2 0905",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.5,cache_read:0.15},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-09-05",last_updated:"2025-09-05"},{providerId:"moonshotai-cn",modelId:"kimi-k2-0711-preview",name:"Kimi K2 0711",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.5,cache_read:0.15},limit:{context:131072,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-07-14",last_updated:"2025-07-14"},{providerId:"moonshotai-cn",modelId:"kimi-k2-turbo-preview",name:"Kimi K2 Turbo",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2.4,output:10,cache_read:0.6},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-09-05",last_updated:"2025-09-05"}]},{id:"lucidquery",name:"LucidQuery AI",models:[{providerId:"lucidquery",modelId:"lucidquery-nexus-coder",name:"LucidQuery Nexus Coder",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:2,output:5},limit:{context:250000,output:60000},modalities:{input:["text"],output:["text"]},knowledge:"2025-08-01",release_date:"2025-09-01",last_updated:"2025-09-01"},{providerId:"lucidquery",modelId:"lucidnova-rf1-100b",name:"LucidNova RF1 100B",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:2,output:5},limit:{context:120000,output:8000},modalities:{input:["text"],output:["text"]},knowledge:"2025-09-16",release_date:"2024-12-28",last_updated:"2025-09-10"}]},{id:"moonshotai",name:"Moonshot AI",models:[{providerId:"moonshotai",modelId:"kimi-k2-thinking-turbo",name:"Kimi K2 Thinking Turbo",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.15,output:8,cache_read:0.15},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2024-08",release_date:"2025-11-06",last_updated:"2025-11-06"},{providerId:"moonshotai",modelId:"kimi-k2-turbo-preview",name:"Kimi K2 Turbo",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2.4,output:10,cache_read:0.6},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-09-05",last_updated:"2025-09-05"},{providerId:"moonshotai",modelId:"kimi-k2-0711-preview",name:"Kimi K2 0711",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.5,cache_read:0.15},limit:{context:131072,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-07-14",last_updated:"2025-07-14"},{providerId:"moonshotai",modelId:"kimi-k2-thinking",name:"Kimi K2 Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.5,cache_read:0.15},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2024-08",release_date:"2025-11-06",last_updated:"2025-11-06"},{providerId:"moonshotai",modelId:"kimi-k2-0905-preview",name:"Kimi K2 0905",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.5,cache_read:0.15},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-09-05",last_updated:"2025-09-05"}]},{id:"zai-coding-plan",name:"Z.AI Coding Plan",models:[{providerId:"zai-coding-plan",modelId:"glm-4.7",name:"GLM-4.7",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.2,cache_read:0.11,cache_write:0},limit:{context:204800,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-12-22",last_updated:"2025-12-22"},{providerId:"zai-coding-plan",modelId:"glm-4.5-flash",name:"GLM-4.5-Flash",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0,cache_read:0,cache_write:0},limit:{context:131072,output:98304},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-28",last_updated:"2025-07-28"},{providerId:"zai-coding-plan",modelId:"glm-4.5",name:"GLM-4.5",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0,cache_read:0,cache_write:0},limit:{context:131072,output:98304},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-28",last_updated:"2025-07-28"},{providerId:"zai-coding-plan",modelId:"glm-4.5-air",name:"GLM-4.5-Air",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0,cache_read:0,cache_write:0},limit:{context:131072,output:98304},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-28",last_updated:"2025-07-28"},{providerId:"zai-coding-plan",modelId:"glm-4.5v",name:"GLM-4.5V",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:64000,output:16384},modalities:{input:["text","image","video"],output:["text"]},knowledge:"2025-04",release_date:"2025-08-11",last_updated:"2025-08-11"},{providerId:"zai-coding-plan",modelId:"glm-4.6",name:"GLM-4.6",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0,cache_read:0,cache_write:0},limit:{context:204800,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-09-30",last_updated:"2025-09-30"},{providerId:"zai-coding-plan",modelId:"glm-4.6v",name:"GLM-4.6V",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:32768},modalities:{input:["text","image","video"],output:["text"]},knowledge:"2025-04",release_date:"2025-12-08",last_updated:"2025-12-08"}]},{id:"ollama-cloud",name:"Ollama Cloud",models:[{providerId:"ollama-cloud",modelId:"kimi-k2-thinking:cloud",name:"Kimi K2 Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,limit:{context:256000,output:8192},modalities:{input:["text"],output:["text"]},release_date:"2025-11-06",last_updated:"2025-11-06"},{providerId:"ollama-cloud",modelId:"qwen3-vl-235b-cloud",name:"Qwen3-VL 235B Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,limit:{context:200000,output:8192},modalities:{input:["text","image"],output:["text"]},release_date:"2025-09-22",last_updated:"2025-09-22"},{providerId:"ollama-cloud",modelId:"qwen3-coder:480b-cloud",name:"Qwen3 Coder 480B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,limit:{context:200000,output:8192},modalities:{input:["text"],output:["text"]},release_date:"2025-07-22",last_updated:"2025-07-22"},{providerId:"ollama-cloud",modelId:"gpt-oss:120b-cloud",name:"GPT-OSS 120B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,limit:{context:200000,output:8192},modalities:{input:["text"],output:["text"]},release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"ollama-cloud",modelId:"deepseek-v3.1:671b-cloud",name:"DeepSeek-V3.1 671B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,limit:{context:160000,output:8192},modalities:{input:["text"],output:["text"]},release_date:"2025-08-21",last_updated:"2025-08-21"},{providerId:"ollama-cloud",modelId:"glm-4.6:cloud",name:"GLM-4.6",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,limit:{context:200000,output:8192},modalities:{input:["text"],output:["text"]},release_date:"2025-09-29",last_updated:"2025-09-29"},{providerId:"ollama-cloud",modelId:"cogito-2.1:671b-cloud",name:"Cogito 2.1 671B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,limit:{context:160000,output:8192},modalities:{input:["text"],output:["text"]},release_date:"2025-11-19",last_updated:"2025-11-19"},{providerId:"ollama-cloud",modelId:"gpt-oss:20b-cloud",name:"GPT-OSS 20B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,limit:{context:200000,output:8192},modalities:{input:["text"],output:["text"]},release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"ollama-cloud",modelId:"qwen3-vl-235b-instruct-cloud",name:"Qwen3-VL 235B Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,limit:{context:200000,output:8192},modalities:{input:["text","image"],output:["text"]},release_date:"2025-09-22",last_updated:"2025-09-22"},{providerId:"ollama-cloud",modelId:"kimi-k2:1t-cloud",name:"Kimi K2",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,limit:{context:256000,output:8192},modalities:{input:["text"],output:["text"]},release_date:"2025-09-05",last_updated:"2025-09-05"},{providerId:"ollama-cloud",modelId:"minimax-m2:cloud",name:"MiniMax M2",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,limit:{context:200000,output:8192},modalities:{input:["text"],output:["text"]},release_date:"2025-10-27",last_updated:"2025-10-27"},{providerId:"ollama-cloud",modelId:"gemini-3-pro-preview:latest",name:"Gemini 3 Pro Preview",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,limit:{context:1e6,output:64000},modalities:{input:["text","image","audio","video"],output:["text"]},release_date:"2025-11-18",last_updated:"2025-11-18"}]},{id:"xiaomi",name:"Xiaomi",models:[{providerId:"xiaomi",modelId:"mimo-v2-flash",name:"MiMo-V2-Flash",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.07,output:0.21},limit:{context:256000,output:32000},modalities:{input:["text"],output:["text"]},knowledge:"2024-12-01",release_date:"2025-12-17",last_updated:"2025-12-17"}]},{id:"alibaba",name:"Alibaba",models:[{providerId:"alibaba",modelId:"qwen3-livetranslate-flash-realtime",name:"Qwen3-LiveTranslate Flash Realtime",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:10,output:10},limit:{context:53248,output:4096},modalities:{input:["text","image","audio","video"],output:["text","audio"]},knowledge:"2024-04",release_date:"2025-09-22",last_updated:"2025-09-22"},{providerId:"alibaba",modelId:"qwen3-asr-flash",name:"Qwen3-ASR Flash",attachment:!1,reasoning:!1,tool_call:!1,temperature:!1,cost:{input:0.035,output:0.035},limit:{context:53248,output:4096},modalities:{input:["audio"],output:["text"]},knowledge:"2024-04",release_date:"2025-09-08",last_updated:"2025-09-08"},{providerId:"alibaba",modelId:"qwen-omni-turbo",name:"Qwen-Omni Turbo",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.07,output:0.27},limit:{context:32768,output:2048},modalities:{input:["text","image","audio","video"],output:["text","audio"]},knowledge:"2024-04",release_date:"2025-01-19",last_updated:"2025-03-26"},{providerId:"alibaba",modelId:"qwen-vl-max",name:"Qwen-VL Max",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.8,output:3.2},limit:{context:131072,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2024-04-08",last_updated:"2025-08-13"},{providerId:"alibaba",modelId:"qwen3-next-80b-a3b-instruct",name:"Qwen3-Next 80B-A3B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.5,output:2},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-09",last_updated:"2025-09"},{providerId:"alibaba",modelId:"qwen-turbo",name:"Qwen Turbo",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.05,output:0.2},limit:{context:1e6,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-11-01",last_updated:"2025-04-28"},{providerId:"alibaba",modelId:"qwen3-vl-235b-a22b",name:"Qwen3-VL 235B-A22B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.7,output:2.8},limit:{context:131072,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-04",release_date:"2025-04",last_updated:"2025-04"},{providerId:"alibaba",modelId:"qwen3-coder-flash",name:"Qwen3 Coder Flash",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.3,output:1.5},limit:{context:1e6,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-28",last_updated:"2025-07-28"},{providerId:"alibaba",modelId:"qwen3-vl-30b-a3b",name:"Qwen3-VL 30B-A3B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.8},limit:{context:131072,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-04",release_date:"2025-04",last_updated:"2025-04"},{providerId:"alibaba",modelId:"qwen3-14b",name:"Qwen3 14B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.35,output:1.4},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04",last_updated:"2025-04"},{providerId:"alibaba",modelId:"qvq-max",name:"QVQ Max",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.2,output:4.8},limit:{context:131072,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2025-03-25",last_updated:"2025-03-25"},{providerId:"alibaba",modelId:"qwen-plus-character-ja",name:"Qwen Plus Character (Japanese)",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.5,output:1.4},limit:{context:8192,output:512},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-01",last_updated:"2024-01"},{providerId:"alibaba",modelId:"qwen2-5-14b-instruct",name:"Qwen2.5 14B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.35,output:1.4},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-09",last_updated:"2024-09"},{providerId:"alibaba",modelId:"qwq-plus",name:"QwQ Plus",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.8,output:2.4},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2025-03-05",last_updated:"2025-03-05"},{providerId:"alibaba",modelId:"qwen3-coder-30b-a3b-instruct",name:"Qwen3-Coder 30B-A3B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.45,output:2.25},limit:{context:262144,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04",last_updated:"2025-04"},{providerId:"alibaba",modelId:"qwen-vl-ocr",name:"Qwen-VL OCR",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.72,output:0.72},limit:{context:34096,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2024-10-28",last_updated:"2025-04-13"},{providerId:"alibaba",modelId:"qwen2-5-72b-instruct",name:"Qwen2.5 72B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:1.4,output:5.6},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-09",last_updated:"2024-09"},{providerId:"alibaba",modelId:"qwen3-omni-flash",name:"Qwen3-Omni Flash",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.43,output:1.66},limit:{context:65536,output:16384},modalities:{input:["text","image","audio","video"],output:["text","audio"]},knowledge:"2024-04",release_date:"2025-09-15",last_updated:"2025-09-15"},{providerId:"alibaba",modelId:"qwen-flash",name:"Qwen Flash",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.05,output:0.4},limit:{context:1e6,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2025-07-28",last_updated:"2025-07-28"},{providerId:"alibaba",modelId:"qwen3-8b",name:"Qwen3 8B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.18,output:0.7},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04",last_updated:"2025-04"},{providerId:"alibaba",modelId:"qwen3-omni-flash-realtime",name:"Qwen3-Omni Flash Realtime",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.52,output:1.99},limit:{context:65536,output:16384},modalities:{input:["text","image","audio","video"],output:["text","audio"]},knowledge:"2024-04",release_date:"2025-09-15",last_updated:"2025-09-15"},{providerId:"alibaba",modelId:"qwen2-5-vl-72b-instruct",name:"Qwen2.5-VL 72B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2.8,output:8.4},limit:{context:131072,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2024-09",last_updated:"2024-09"},{providerId:"alibaba",modelId:"qwen3-vl-plus",name:"Qwen3-VL Plus",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:1.6},limit:{context:262144,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-04",release_date:"2025-09-23",last_updated:"2025-09-23"},{providerId:"alibaba",modelId:"qwen-plus",name:"Qwen Plus",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.4,output:1.2},limit:{context:1e6,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-01-25",last_updated:"2025-09-11"},{providerId:"alibaba",modelId:"qwen2-5-32b-instruct",name:"Qwen2.5 32B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.7,output:2.8},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-09",last_updated:"2024-09"},{providerId:"alibaba",modelId:"qwen2-5-omni-7b",name:"Qwen2.5-Omni 7B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.4},limit:{context:32768,output:2048},modalities:{input:["text","image","audio","video"],output:["text","audio"]},knowledge:"2024-04",release_date:"2024-12",last_updated:"2024-12"},{providerId:"alibaba",modelId:"qwen-max",name:"Qwen Max",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:1.6,output:6.4},limit:{context:32768,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-04-03",last_updated:"2025-01-25"},{providerId:"alibaba",modelId:"qwen2-5-7b-instruct",name:"Qwen2.5 7B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.175,output:0.7},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-09",last_updated:"2024-09"},{providerId:"alibaba",modelId:"qwen2-5-vl-7b-instruct",name:"Qwen2.5-VL 7B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.35,output:1.05},limit:{context:131072,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2024-09",last_updated:"2024-09"},{providerId:"alibaba",modelId:"qwen3-235b-a22b",name:"Qwen3 235B-A22B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.7,output:2.8},limit:{context:131072,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04",last_updated:"2025-04"},{providerId:"alibaba",modelId:"qwen-omni-turbo-realtime",name:"Qwen-Omni Turbo Realtime",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.27,output:1.07},limit:{context:32768,output:2048},modalities:{input:["text","image","audio"],output:["text","audio"]},knowledge:"2024-04",release_date:"2025-05-08",last_updated:"2025-05-08"},{providerId:"alibaba",modelId:"qwen-mt-turbo",name:"Qwen-MT Turbo",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.16,output:0.49},limit:{context:16384,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2025-01",last_updated:"2025-01"},{providerId:"alibaba",modelId:"qwen3-coder-480b-a35b-instruct",name:"Qwen3-Coder 480B-A35B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:1.5,output:7.5},limit:{context:262144,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04",last_updated:"2025-04"},{providerId:"alibaba",modelId:"qwen-mt-plus",name:"Qwen-MT Plus",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:2.46,output:7.37},limit:{context:16384,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2025-01",last_updated:"2025-01"},{providerId:"alibaba",modelId:"qwen3-max",name:"Qwen3 Max",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:1.2,output:6},limit:{context:262144,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-09-23",last_updated:"2025-09-23"},{providerId:"alibaba",modelId:"qwen3-coder-plus",name:"Qwen3 Coder Plus",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:1,output:5},limit:{context:1048576,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-23",last_updated:"2025-07-23"},{providerId:"alibaba",modelId:"qwen3-next-80b-a3b-thinking",name:"Qwen3-Next 80B-A3B (Thinking)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.5,output:6},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-09",last_updated:"2025-09"},{providerId:"alibaba",modelId:"qwen3-32b",name:"Qwen3 32B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.7,output:2.8},limit:{context:131072,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04",last_updated:"2025-04"},{providerId:"alibaba",modelId:"qwen-vl-plus",name:"Qwen-VL Plus",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.21,output:0.63},limit:{context:131072,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2024-01-25",last_updated:"2025-08-15"}]},{id:"xai",name:"xAI",models:[{providerId:"xai",modelId:"grok-4-fast-non-reasoning",name:"Grok 4 Fast (Non-Reasoning)",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.5,cache_read:0.05},limit:{context:2000000,output:30000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-07",release_date:"2025-09-19",last_updated:"2025-09-19"},{providerId:"xai",modelId:"grok-3-fast",name:"Grok 3 Fast",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:5,output:25,cache_read:1.25},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-11",release_date:"2025-02-17",last_updated:"2025-02-17"},{providerId:"xai",modelId:"grok-4",name:"Grok 4",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.75},limit:{context:256000,output:64000},modalities:{input:["text"],output:["text"]},knowledge:"2025-07",release_date:"2025-07-09",last_updated:"2025-07-09"},{providerId:"xai",modelId:"grok-2-vision",name:"Grok 2 Vision",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:10,cache_read:2},limit:{context:8192,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-08",release_date:"2024-08-20",last_updated:"2024-08-20"},{providerId:"xai",modelId:"grok-code-fast-1",name:"Grok Code Fast 1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:1.5,cache_read:0.02},limit:{context:256000,output:1e4},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2025-08-28",last_updated:"2025-08-28"},{providerId:"xai",modelId:"grok-2",name:"Grok 2",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:10,cache_read:2},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-08",release_date:"2024-08-20",last_updated:"2024-08-20"},{providerId:"xai",modelId:"grok-3-mini-fast-latest",name:"Grok 3 Mini Fast Latest",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:4,cache_read:0.15},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-11",release_date:"2025-02-17",last_updated:"2025-02-17"},{providerId:"xai",modelId:"grok-2-vision-1212",name:"Grok 2 Vision (1212)",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:10,cache_read:2},limit:{context:8192,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-08",release_date:"2024-08-20",last_updated:"2024-12-12"},{providerId:"xai",modelId:"grok-3",name:"Grok 3",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.75},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-11",release_date:"2025-02-17",last_updated:"2025-02-17"},{providerId:"xai",modelId:"grok-4-fast",name:"Grok 4 Fast",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.5,cache_read:0.05},limit:{context:2000000,output:30000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-07",release_date:"2025-09-19",last_updated:"2025-09-19"},{providerId:"xai",modelId:"grok-2-latest",name:"Grok 2 Latest",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:10,cache_read:2},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-08",release_date:"2024-08-20",last_updated:"2024-12-12"},{providerId:"xai",modelId:"grok-4-1-fast",name:"Grok 4.1 Fast",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.5,cache_read:0.05},limit:{context:2000000,output:30000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-07",release_date:"2025-11-19",last_updated:"2025-11-19"},{providerId:"xai",modelId:"grok-2-1212",name:"Grok 2 (1212)",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:10,cache_read:2},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-08",release_date:"2024-12-12",last_updated:"2024-12-12"},{providerId:"xai",modelId:"grok-3-fast-latest",name:"Grok 3 Fast Latest",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:5,output:25,cache_read:1.25},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-11",release_date:"2025-02-17",last_updated:"2025-02-17"},{providerId:"xai",modelId:"grok-3-latest",name:"Grok 3 Latest",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.75},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-11",release_date:"2025-02-17",last_updated:"2025-02-17"},{providerId:"xai",modelId:"grok-2-vision-latest",name:"Grok 2 Vision Latest",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:10,cache_read:2},limit:{context:8192,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-08",release_date:"2024-08-20",last_updated:"2024-12-12"},{providerId:"xai",modelId:"grok-vision-beta",name:"Grok Vision Beta",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:5,output:15,cache_read:5},limit:{context:8192,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-08",release_date:"2024-11-01",last_updated:"2024-11-01"},{providerId:"xai",modelId:"grok-3-mini",name:"Grok 3 Mini",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:0.5,cache_read:0.075},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-11",release_date:"2025-02-17",last_updated:"2025-02-17"},{providerId:"xai",modelId:"grok-beta",name:"Grok Beta",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:5,output:15,cache_read:5},limit:{context:131072,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-08",release_date:"2024-11-01",last_updated:"2024-11-01"},{providerId:"xai",modelId:"grok-3-mini-latest",name:"Grok 3 Mini Latest",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:0.5,cache_read:0.075},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-11",release_date:"2025-02-17",last_updated:"2025-02-17"},{providerId:"xai",modelId:"grok-4-1-fast-non-reasoning",name:"Grok 4.1 Fast (Non-Reasoning)",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.5,cache_read:0.05},limit:{context:2000000,output:30000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-07",release_date:"2025-11-19",last_updated:"2025-11-19"},{providerId:"xai",modelId:"grok-3-mini-fast",name:"Grok 3 Mini Fast",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:4,cache_read:0.15},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-11",release_date:"2025-02-17",last_updated:"2025-02-17"}]},{id:"vultr",name:"Vultr",models:[{providerId:"vultr",modelId:"deepseek-r1-distill-qwen-32b",name:"DeepSeek R1 Distill Qwen 32B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.2},limit:{context:121808,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-01-20",last_updated:"2025-01-20"},{providerId:"vultr",modelId:"qwen2.5-coder-32b-instruct",name:"Qwen2.5 Coder 32B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.2},limit:{context:12952,output:2048},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2024-11-06",last_updated:"2024-11-06"},{providerId:"vultr",modelId:"kimi-k2-instruct",name:"Kimi K2 Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.2},limit:{context:58904,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2024-07-18",last_updated:"2024-07-18"},{providerId:"vultr",modelId:"deepseek-r1-distill-llama-70b",name:"DeepSeek R1 Distill Llama 70B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.2},limit:{context:121808,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-01-20",last_updated:"2025-01-20"},{providerId:"vultr",modelId:"gpt-oss-120b",name:"GPT OSS 120B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.2},limit:{context:121808,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-06-23",last_updated:"2025-06-23"}]},{id:"nvidia",name:"Nvidia",models:[{providerId:"nvidia",modelId:"moonshotai/kimi-k2-instruct-0905",name:"Kimi K2 0905",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-09-05",last_updated:"2025-09-05"},{providerId:"nvidia",modelId:"moonshotai/kimi-k2-thinking",name:"Kimi K2 Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0,cache_read:0,cache_write:0},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2025-07",release_date:"2025-11",last_updated:"2025-12"},{providerId:"nvidia",modelId:"moonshotai/kimi-k2-instruct",name:"Kimi K2 Instruct",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-01",release_date:"2025-01-01",last_updated:"2025-09-05"},{providerId:"nvidia",modelId:"nvidia/nvidia-nemotron-nano-9b-v2",name:"nvidia-nemotron-nano-9b-v2",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2024-09",release_date:"2025-08-18",last_updated:"2025-08-18"},{providerId:"nvidia",modelId:"nvidia/cosmos-nemotron-34b",name:"Cosmos Nemotron 34B",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:131072,output:8192},modalities:{input:["text","image","video"],output:["text"]},knowledge:"2024-01",release_date:"2024-01-01",last_updated:"2025-09-05"},{providerId:"nvidia",modelId:"nvidia/llama-embed-nemotron-8b",name:"Llama Embed Nemotron 8B",attachment:!1,reasoning:!1,tool_call:!1,temperature:!1,cost:{input:0,output:0},limit:{context:32768,output:2048},modalities:{input:["text"],output:["text"]},knowledge:"2025-03",release_date:"2025-03-18",last_updated:"2025-03-18"},{providerId:"nvidia",modelId:"nvidia/nemotron-3-nano-30b-a3b",name:"nemotron-3-nano-30b-a3b",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2024-09",release_date:"2024-12",last_updated:"2024-12"},{providerId:"nvidia",modelId:"nvidia/llama-3.1-nemotron-ultra-253b-v1",name:"Llama-3.1-Nemotron-Ultra-253B-v1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2024-07-01",last_updated:"2025-09-05"},{providerId:"nvidia",modelId:"minimaxai/minimax-m2",name:"MiniMax-M2",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2025-10-27",last_updated:"2025-10-31"},{providerId:"nvidia",modelId:"google/gemma-3-27b-it",name:"Gemma-3-27B-IT",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:131072,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-12",release_date:"2024-12-01",last_updated:"2025-09-05"},{providerId:"nvidia",modelId:"microsoft/phi-4-mini-instruct",name:"Phi-4-Mini",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:131072,output:8192},modalities:{input:["text","image","audio"],output:["text"]},knowledge:"2024-12",release_date:"2024-12-01",last_updated:"2025-09-05"},{providerId:"nvidia",modelId:"openai/gpt-oss-120b",name:"GPT-OSS-120B",attachment:!0,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2025-08",release_date:"2025-08-04",last_updated:"2025-08-14"},{providerId:"nvidia",modelId:"qwen/qwen3-next-80b-a3b-instruct",name:"Qwen3-Next-80B-A3B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:262144,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2024-12",release_date:"2024-12-01",last_updated:"2025-09-05"},{providerId:"nvidia",modelId:"qwen/qwen3-235b-a22b",name:"Qwen3-235B-A22B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-12",release_date:"2024-12-01",last_updated:"2025-09-05"},{providerId:"nvidia",modelId:"qwen/qwen3-coder-480b-a35b-instruct",name:"Qwen3 Coder 480B A35B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:262144,output:66536},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-23",last_updated:"2025-07-23"},{providerId:"nvidia",modelId:"qwen/qwen3-next-80b-a3b-thinking",name:"Qwen3-Next-80B-A3B-Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:262144,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2024-12",release_date:"2024-12-01",last_updated:"2025-09-05"},{providerId:"nvidia",modelId:"mistralai/devstral-2-123b-instruct-2512",name:"Devstral-2-123B-Instruct-2512",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2025-12",release_date:"2025-12-08",last_updated:"2025-12-09"},{providerId:"nvidia",modelId:"mistralai/mistral-large-3-675b-instruct-2512",name:"Mistral Large 3 675B Instruct 2512",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:262144,output:262144},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-01",release_date:"2025-12-02",last_updated:"2025-12-02"},{providerId:"nvidia",modelId:"mistralai/ministral-14b-instruct-2512",name:"Ministral 3 14B Instruct 2512",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:262144,output:262144},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-12",release_date:"2025-12-01",last_updated:"2025-12-08"},{providerId:"nvidia",modelId:"deepseek-ai/deepseek-v3.1-terminus",name:"DeepSeek V3.1 Terminus",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2025-01",release_date:"2025-09-22",last_updated:"2025-09-22"},{providerId:"nvidia",modelId:"deepseek-ai/deepseek-v3.1",name:"DeepSeek V3.1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2025-08-20",last_updated:"2025-08-26"}]},{id:"cohere",name:"Cohere",models:[{providerId:"cohere",modelId:"command-a-translate-08-2025",name:"Command A Translate",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2.5,output:10},limit:{context:8000,output:8000},modalities:{input:["text"],output:["text"]},knowledge:"2024-06-01",release_date:"2025-08-28",last_updated:"2025-08-28"},{providerId:"cohere",modelId:"command-a-03-2025",name:"Command A",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:2.5,output:10},limit:{context:256000,output:8000},modalities:{input:["text"],output:["text"]},knowledge:"2024-06-01",release_date:"2025-03-13",last_updated:"2025-03-13"},{providerId:"cohere",modelId:"command-r-08-2024",name:"Command R",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.6},limit:{context:128000,output:4000},modalities:{input:["text"],output:["text"]},knowledge:"2024-06-01",release_date:"2024-08-30",last_updated:"2024-08-30"},{providerId:"cohere",modelId:"command-r-plus-08-2024",name:"Command R+",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:2.5,output:10},limit:{context:128000,output:4000},modalities:{input:["text"],output:["text"]},knowledge:"2024-06-01",release_date:"2024-08-30",last_updated:"2024-08-30"},{providerId:"cohere",modelId:"command-r7b-12-2024",name:"Command R7B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.0375,output:0.15},limit:{context:128000,output:4000},modalities:{input:["text"],output:["text"]},knowledge:"2024-06-01",release_date:"2024-02-27",last_updated:"2024-02-27"},{providerId:"cohere",modelId:"command-a-reasoning-08-2025",name:"Command A Reasoning",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:2.5,output:10},limit:{context:256000,output:32000},modalities:{input:["text"],output:["text"]},knowledge:"2024-06-01",release_date:"2025-08-21",last_updated:"2025-08-21"},{providerId:"cohere",modelId:"command-a-vision-07-2025",name:"Command A Vision",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:2.5,output:10},limit:{context:128000,output:8000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-06-01",release_date:"2025-07-31",last_updated:"2025-07-31"}]},{id:"upstage",name:"Upstage",models:[{providerId:"upstage",modelId:"solar-mini",name:"solar-mini",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.15},limit:{context:32768,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-09",release_date:"2024-06-12",last_updated:"2025-04-22"},{providerId:"upstage",modelId:"solar-pro2",name:"solar-pro2",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.25,output:0.25},limit:{context:65536,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2025-03",release_date:"2025-05-20",last_updated:"2025-05-20"}]},{id:"groq",name:"Groq",models:[{providerId:"groq",modelId:"llama-3.1-8b-instant",name:"Llama 3.1 8B Instant",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.05,output:0.08},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-07-23",last_updated:"2024-07-23"},{providerId:"groq",modelId:"mistral-saba-24b",name:"Mistral Saba 24B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.79,output:0.79},limit:{context:32768,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2024-08",release_date:"2025-02-06",last_updated:"2025-02-06"},{providerId:"groq",modelId:"llama3-8b-8192",name:"Llama 3 8B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.05,output:0.08},limit:{context:8192,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2023-03",release_date:"2024-04-18",last_updated:"2024-04-18"},{providerId:"groq",modelId:"qwen-qwq-32b",name:"Qwen QwQ 32B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.29,output:0.39},limit:{context:131072,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2024-09",release_date:"2024-11-27",last_updated:"2024-11-27"},{providerId:"groq",modelId:"llama3-70b-8192",name:"Llama 3 70B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.59,output:0.79},limit:{context:8192,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2023-03",release_date:"2024-04-18",last_updated:"2024-04-18"},{providerId:"groq",modelId:"deepseek-r1-distill-llama-70b",name:"DeepSeek R1 Distill Llama 70B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.75,output:0.99},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2025-01-20",last_updated:"2025-01-20"},{providerId:"groq",modelId:"llama-guard-3-8b",name:"Llama Guard 3 8B",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.2,output:0.2},limit:{context:8192,output:8192},modalities:{input:["text"],output:["text"]},release_date:"2024-07-23",last_updated:"2024-07-23"},{providerId:"groq",modelId:"gemma2-9b-it",name:"Gemma 2 9B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.2},limit:{context:8192,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-06",release_date:"2024-06-27",last_updated:"2024-06-27"},{providerId:"groq",modelId:"llama-3.3-70b-versatile",name:"Llama 3.3 70B Versatile",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.59,output:0.79},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-12-06",last_updated:"2024-12-06"},{providerId:"groq",modelId:"moonshotai/kimi-k2-instruct-0905",name:"Kimi K2 Instruct 0905",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:1,output:3},limit:{context:262144,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-09-05",last_updated:"2025-09-05"},{providerId:"groq",modelId:"moonshotai/kimi-k2-instruct",name:"Kimi K2 Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:1,output:3},limit:{context:131072,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-07-14",last_updated:"2025-07-14"},{providerId:"groq",modelId:"openai/gpt-oss-20b",name:"GPT OSS 20B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.5},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"groq",modelId:"openai/gpt-oss-120b",name:"GPT OSS 120B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.75},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"groq",modelId:"qwen/qwen3-32b",name:"Qwen3 32B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.29,output:0.59},limit:{context:131072,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2024-11-08",release_date:"2024-12-23",last_updated:"2024-12-23"},{providerId:"groq",modelId:"meta-llama/llama-4-scout-17b-16e-instruct",name:"Llama 4 Scout 17B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.11,output:0.34},limit:{context:131072,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-08",release_date:"2025-04-05",last_updated:"2025-04-05"},{providerId:"groq",modelId:"meta-llama/llama-4-maverick-17b-128e-instruct",name:"Llama 4 Maverick 17B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.6},limit:{context:131072,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-08",release_date:"2025-04-05",last_updated:"2025-04-05"},{providerId:"groq",modelId:"meta-llama/llama-guard-4-12b",name:"Llama Guard 4 12B",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.2,output:0.2},limit:{context:131072,output:128},modalities:{input:["text","image"],output:["text"]},release_date:"2025-04-05",last_updated:"2025-04-05"}]},{id:"bailing",name:"Bailing",models:[{providerId:"bailing",modelId:"Ling-1T",name:"Ling-1T",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.57,output:2.29},limit:{context:128000,output:32000},modalities:{input:["text"],output:["text"]},knowledge:"2024-06",release_date:"2025-10",last_updated:"2025-10"},{providerId:"bailing",modelId:"Ring-1T",name:"Ring-1T",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:0.57,output:2.29},limit:{context:128000,output:32000},modalities:{input:["text"],output:["text"]},knowledge:"2024-06",release_date:"2025-10",last_updated:"2025-10"}]},{id:"github-copilot",name:"GitHub Copilot",models:[{providerId:"github-copilot",modelId:"gemini-2.0-flash-001",name:"Gemini 2.0 Flash",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:1e6,output:8192},modalities:{input:["text","image","audio","video"],output:["text"]},knowledge:"2024-06",release_date:"2024-12-11",last_updated:"2024-12-11"},{providerId:"github-copilot",modelId:"claude-opus-4",name:"Claude Opus 4",attachment:!0,reasoning:!0,tool_call:!1,temperature:!1,cost:{input:0,output:0},limit:{context:80000,output:16000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-05-22",last_updated:"2025-05-22"},{providerId:"github-copilot",modelId:"gemini-3-flash-preview",name:"Gemini 3 Flash",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:64000},modalities:{input:["text","image","audio","video"],output:["text"]},knowledge:"2025-01",release_date:"2025-12-17",last_updated:"2025-12-17"},{providerId:"github-copilot",modelId:"grok-code-fast-1",name:"Grok Code Fast 1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:64000},modalities:{input:["text"],output:["text"]},knowledge:"2025-08",release_date:"2025-08-27",last_updated:"2025-08-27"},{providerId:"github-copilot",modelId:"gpt-5.1-codex",name:"GPT-5.1-Codex",attachment:!1,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0,output:0},limit:{context:128000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-11-13",last_updated:"2025-11-13"},{providerId:"github-copilot",modelId:"claude-haiku-4.5",name:"Claude Haiku 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-02-28",release_date:"2025-10-15",last_updated:"2025-10-15"},{providerId:"github-copilot",modelId:"gemini-3-pro-preview",name:"Gemini 3 Pro Preview",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:64000},modalities:{input:["text","image","audio","video"],output:["text"]},knowledge:"2025-01",release_date:"2025-11-18",last_updated:"2025-11-18"},{providerId:"github-copilot",modelId:"oswe-vscode-prime",name:"Raptor Mini (Preview)",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:200000,output:64000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-10",release_date:"2025-11-10",last_updated:"2025-11-10"},{providerId:"github-copilot",modelId:"claude-3.5-sonnet",name:"Claude Sonnet 3.5",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:90000,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2024-10-22",last_updated:"2024-10-22"},{providerId:"github-copilot",modelId:"gpt-5.1-codex-mini",name:"GPT-5.1-Codex-mini",attachment:!1,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0,output:0},limit:{context:128000,output:1e5},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-11-13",last_updated:"2025-11-13"},{providerId:"github-copilot",modelId:"o3-mini",name:"o3-mini",attachment:!1,reasoning:!0,tool_call:!1,temperature:!1,cost:{input:0,output:0},limit:{context:128000,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2024-12-20",last_updated:"2025-01-29"},{providerId:"github-copilot",modelId:"gpt-5.1",name:"GPT-5.1",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0,output:0},limit:{context:128000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-11-13",last_updated:"2025-11-13"},{providerId:"github-copilot",modelId:"gpt-5-codex",name:"GPT-5-Codex",attachment:!1,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0,output:0},limit:{context:128000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-09-15",last_updated:"2025-09-15"},{providerId:"github-copilot",modelId:"gpt-4o",name:"GPT-4o",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:64000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-09",release_date:"2024-05-13",last_updated:"2024-05-13"},{providerId:"github-copilot",modelId:"gpt-4.1",name:"GPT-4.1",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2025-04-14",last_updated:"2025-04-14"},{providerId:"github-copilot",modelId:"o4-mini",name:"o4-mini (Preview)",attachment:!1,reasoning:!0,tool_call:!1,temperature:!1,cost:{input:0,output:0},limit:{context:128000,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-04-16",last_updated:"2025-04-16"},{providerId:"github-copilot",modelId:"claude-opus-41",name:"Claude Opus 4.1",attachment:!0,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:80000,output:16000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"github-copilot",modelId:"gpt-5-mini",name:"GPT-5-mini",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:64000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-06",release_date:"2025-08-13",last_updated:"2025-08-13"},{providerId:"github-copilot",modelId:"claude-3.7-sonnet",name:"Claude Sonnet 3.7",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:200000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2025-02-19",last_updated:"2025-02-19"},{providerId:"github-copilot",modelId:"gemini-2.5-pro",name:"Gemini 2.5 Pro",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:64000},modalities:{input:["text","image","audio","video"],output:["text"]},knowledge:"2025-01",release_date:"2025-03-20",last_updated:"2025-06-05"},{providerId:"github-copilot",modelId:"gpt-5.1-codex-max",name:"GPT-5.1-Codex-max",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0,output:0},limit:{context:128000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-12-04",last_updated:"2025-12-04"},{providerId:"github-copilot",modelId:"o3",name:"o3 (Preview)",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05",release_date:"2025-04-16",last_updated:"2025-04-16"},{providerId:"github-copilot",modelId:"claude-sonnet-4",name:"Claude Sonnet 4",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-05-22",last_updated:"2025-05-22"},{providerId:"github-copilot",modelId:"gpt-5",name:"GPT-5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-10",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"github-copilot",modelId:"claude-3.7-sonnet-thought",name:"Claude Sonnet 3.7 Thinking",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:200000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2025-02-19",last_updated:"2025-02-19"},{providerId:"github-copilot",modelId:"claude-opus-4.5",name:"Claude Opus 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-11-24",last_updated:"2025-08-01"},{providerId:"github-copilot",modelId:"gpt-5.2",name:"GPT-5.2",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0,output:0},limit:{context:128000,output:64000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-08-31",release_date:"2025-12-11",last_updated:"2025-12-11"},{providerId:"github-copilot",modelId:"claude-sonnet-4.5",name:"Claude Sonnet 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-09-29",last_updated:"2025-09-29"}]},{id:"mistral",name:"Mistral",models:[{providerId:"mistral",modelId:"devstral-medium-2507",name:"Devstral Medium",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.4,output:2},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2025-05",release_date:"2025-07-10",last_updated:"2025-07-10"},{providerId:"mistral",modelId:"mistral-large-2512",name:"Mistral Large 3",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.5,output:1.5},limit:{context:262144,output:262144},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-11",release_date:"2024-11-01",last_updated:"2025-12-02"},{providerId:"mistral",modelId:"open-mixtral-8x22b",name:"Mixtral 8x22B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:6},limit:{context:64000,output:64000},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-04-17",last_updated:"2024-04-17"},{providerId:"mistral",modelId:"ministral-8b-latest",name:"Ministral 8B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.1},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2024-10-01",last_updated:"2024-10-04"},{providerId:"mistral",modelId:"pixtral-large-latest",name:"Pixtral Large",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:6},limit:{context:128000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-11",release_date:"2024-11-01",last_updated:"2024-11-04"},{providerId:"mistral",modelId:"mistral-small-2506",name:"Mistral Small 3.2",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.3},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-03",release_date:"2025-06-20",last_updated:"2025-06-20"},{providerId:"mistral",modelId:"devstral-2512",name:"Devstral 2",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2025-12",release_date:"2025-12-09",last_updated:"2025-12-09"},{providerId:"mistral",modelId:"ministral-3b-latest",name:"Ministral 3B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.04,output:0.04},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2024-10-01",last_updated:"2024-10-04"},{providerId:"mistral",modelId:"pixtral-12b",name:"Pixtral 12B",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.15},limit:{context:128000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09",release_date:"2024-09-01",last_updated:"2024-09-01"},{providerId:"mistral",modelId:"mistral-medium-2505",name:"Mistral Medium 3",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.4,output:2},limit:{context:131072,output:131072},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-05",release_date:"2025-05-07",last_updated:"2025-05-07"},{providerId:"mistral",modelId:"labs-devstral-small-2512",name:"Devstral Small 2",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:256000,output:256000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-12",release_date:"2025-12-09",last_updated:"2025-12-09"},{providerId:"mistral",modelId:"devstral-medium-latest",name:"Devstral 2",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.4,output:2},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2025-12",release_date:"2025-12-02",last_updated:"2025-12-02"},{providerId:"mistral",modelId:"devstral-small-2505",name:"Devstral Small 2505",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.3},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2025-05",release_date:"2025-05-07",last_updated:"2025-05-07"},{providerId:"mistral",modelId:"mistral-medium-2508",name:"Mistral Medium 3.1",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.4,output:2},limit:{context:262144,output:262144},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-05",release_date:"2025-08-12",last_updated:"2025-08-12"},{providerId:"mistral",modelId:"mistral-embed",name:"Mistral Embed",attachment:!1,reasoning:!1,tool_call:!1,temperature:!1,cost:{input:0.1,output:0},limit:{context:8000,output:3072},modalities:{input:["text"],output:["text"]},release_date:"2023-12-11",last_updated:"2023-12-11"},{providerId:"mistral",modelId:"mistral-small-latest",name:"Mistral Small",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.3},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-03",release_date:"2024-09-01",last_updated:"2024-09-04"},{providerId:"mistral",modelId:"magistral-small",name:"Magistral Small",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.5,output:1.5},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2025-06",release_date:"2025-03-17",last_updated:"2025-03-17"},{providerId:"mistral",modelId:"devstral-small-2507",name:"Devstral Small",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.3},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2025-05",release_date:"2025-07-10",last_updated:"2025-07-10"},{providerId:"mistral",modelId:"codestral-latest",name:"Codestral",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.3,output:0.9},limit:{context:256000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2024-05-29",last_updated:"2025-01-04"},{providerId:"mistral",modelId:"open-mixtral-8x7b",name:"Mixtral 8x7B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.7,output:0.7},limit:{context:32000,output:32000},modalities:{input:["text"],output:["text"]},knowledge:"2024-01",release_date:"2023-12-11",last_updated:"2023-12-11"},{providerId:"mistral",modelId:"mistral-nemo",name:"Mistral Nemo",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.15},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2024-07-01",last_updated:"2024-07-01"},{providerId:"mistral",modelId:"open-mistral-7b",name:"Mistral 7B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.25,output:0.25},limit:{context:8000,output:8000},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2023-09-27",last_updated:"2023-09-27"},{providerId:"mistral",modelId:"mistral-large-latest",name:"Mistral Large",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.5,output:1.5},limit:{context:262144,output:262144},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-11",release_date:"2024-11-01",last_updated:"2025-12-02"},{providerId:"mistral",modelId:"mistral-medium-latest",name:"Mistral Medium",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.4,output:2},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-05",release_date:"2025-05-07",last_updated:"2025-05-10"},{providerId:"mistral",modelId:"mistral-large-2411",name:"Mistral Large 2.1",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:6},limit:{context:131072,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2024-11",release_date:"2024-11-01",last_updated:"2024-11-04"},{providerId:"mistral",modelId:"magistral-medium-latest",name:"Magistral Medium",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:2,output:5},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2025-06",release_date:"2025-03-17",last_updated:"2025-03-20"}]},{id:"vercel",name:"Vercel AI Gateway",models:[{providerId:"vercel",modelId:"moonshotai/kimi-k2",name:"Kimi K2 Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:1,output:3},limit:{context:131072,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-07-14",last_updated:"2025-07-14"},{providerId:"vercel",modelId:"alibaba/qwen3-next-80b-a3b-instruct",name:"Qwen3 Next 80B A3B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.5,output:2},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-09-12",last_updated:"2025-09-12"},{providerId:"vercel",modelId:"alibaba/qwen3-vl-instruct",name:"Qwen3 VL Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.7,output:2.8},limit:{context:131072,output:129024},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-04",release_date:"2025-09-24",last_updated:"2025-09-24"},{providerId:"vercel",modelId:"alibaba/qwen3-vl-thinking",name:"Qwen3 VL Thinking",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.7,output:8.4},limit:{context:131072,output:129024},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-09",release_date:"2025-09-24",last_updated:"2025-09-24"},{providerId:"vercel",modelId:"alibaba/qwen3-max",name:"Qwen3 Max",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:1.2,output:6},limit:{context:262144,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-09-23",last_updated:"2025-09-23"},{providerId:"vercel",modelId:"alibaba/qwen3-coder-plus",name:"Qwen3 Coder Plus",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:1,output:5},limit:{context:1e6,output:1e6},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-23",last_updated:"2025-07-23"},{providerId:"vercel",modelId:"alibaba/qwen3-next-80b-a3b-thinking",name:"Qwen3 Next 80B A3B Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.5,output:6},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2025-09",release_date:"2025-09-12",last_updated:"2025-09-12"},{providerId:"vercel",modelId:"xai/grok-3-mini-fast",name:"Grok 3 Mini Fast",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:4,cache_read:0.15},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-11",release_date:"2025-02-17",last_updated:"2025-02-17"},{providerId:"vercel",modelId:"xai/grok-3-mini",name:"Grok 3 Mini",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:0.5,cache_read:0.075},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-11",release_date:"2025-02-17",last_updated:"2025-02-17"},{providerId:"vercel",modelId:"xai/grok-4-fast",name:"Grok 4 Fast",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.5,cache_read:0.05},limit:{context:2000000,output:30000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-07",release_date:"2025-09-19",last_updated:"2025-09-19"},{providerId:"vercel",modelId:"xai/grok-3",name:"Grok 3",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.75},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-11",release_date:"2025-02-17",last_updated:"2025-02-17"},{providerId:"vercel",modelId:"xai/grok-2",name:"Grok 2",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:10,cache_read:2},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-08",release_date:"2024-08-20",last_updated:"2024-08-20"},{providerId:"vercel",modelId:"xai/grok-code-fast-1",name:"Grok Code Fast 1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:1.5,cache_read:0.02},limit:{context:256000,output:1e4},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2025-08-28",last_updated:"2025-08-28"},{providerId:"vercel",modelId:"xai/grok-2-vision",name:"Grok 2 Vision",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:10,cache_read:2},limit:{context:8192,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-08",release_date:"2024-08-20",last_updated:"2024-08-20"},{providerId:"vercel",modelId:"xai/grok-4",name:"Grok 4",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.75},limit:{context:256000,output:64000},modalities:{input:["text"],output:["text"]},knowledge:"2025-07",release_date:"2025-07-09",last_updated:"2025-07-09"},{providerId:"vercel",modelId:"xai/grok-3-fast",name:"Grok 3 Fast",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:5,output:25,cache_read:1.25},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-11",release_date:"2025-02-17",last_updated:"2025-02-17"},{providerId:"vercel",modelId:"xai/grok-4-fast-non-reasoning",name:"Grok 4 Fast (Non-Reasoning)",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.5,cache_read:0.05},limit:{context:2000000,output:30000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-07",release_date:"2025-09-19",last_updated:"2025-09-19"},{providerId:"vercel",modelId:"mistral/codestral",name:"Codestral",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.3,output:0.9},limit:{context:256000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2024-05-29",last_updated:"2025-01-04"},{providerId:"vercel",modelId:"mistral/magistral-medium",name:"Magistral Medium",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:2,output:5},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2025-06",release_date:"2025-03-17",last_updated:"2025-03-20"},{providerId:"vercel",modelId:"mistral/mistral-large",name:"Mistral Large",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.5,output:1.5},limit:{context:262144,output:262144},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-11",release_date:"2024-11-01",last_updated:"2025-12-02"},{providerId:"vercel",modelId:"mistral/pixtral-large",name:"Pixtral Large",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:6},limit:{context:128000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-11",release_date:"2024-11-01",last_updated:"2024-11-04"},{providerId:"vercel",modelId:"mistral/ministral-8b",name:"Ministral 8B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.1},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2024-10-01",last_updated:"2024-10-04"},{providerId:"vercel",modelId:"mistral/ministral-3b",name:"Ministral 3B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.04,output:0.04},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2024-10-01",last_updated:"2024-10-04"},{providerId:"vercel",modelId:"mistral/magistral-small",name:"Magistral Small",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.5,output:1.5},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2025-06",release_date:"2025-03-17",last_updated:"2025-03-17"},{providerId:"vercel",modelId:"mistral/mistral-small",name:"Mistral Small",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.3},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-03",release_date:"2024-09-01",last_updated:"2024-09-04"},{providerId:"vercel",modelId:"mistral/pixtral-12b",name:"Pixtral 12B",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.15},limit:{context:128000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09",release_date:"2024-09-01",last_updated:"2024-09-01"},{providerId:"vercel",modelId:"mistral/mixtral-8x22b-instruct",name:"Mixtral 8x22B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:6},limit:{context:64000,output:64000},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-04-17",last_updated:"2024-04-17"},{providerId:"vercel",modelId:"vercel/v0-1.0-md",name:"v0-1.0-md",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15},limit:{context:128000,output:32000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-05-22",last_updated:"2025-05-22"},{providerId:"vercel",modelId:"vercel/v0-1.5-md",name:"v0-1.5-md",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15},limit:{context:128000,output:32000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-06-09",last_updated:"2025-06-09"},{providerId:"vercel",modelId:"deepseek/deepseek-v3.2-exp-thinking",name:"DeepSeek V3.2 Exp Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.28,output:0.42},limit:{context:163840,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2025-09",release_date:"2025-09-29",last_updated:"2025-09-29"},{providerId:"vercel",modelId:"deepseek/deepseek-v3.1-terminus",name:"DeepSeek V3.1 Terminus",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.27,output:1},limit:{context:128000,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2025-07",release_date:"2025-09-22",last_updated:"2025-09-22"},{providerId:"vercel",modelId:"deepseek/deepseek-v3.2-exp",name:"DeepSeek V3.2 Exp",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.28,output:0.42},limit:{context:163840,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2025-09",release_date:"2025-09-29",last_updated:"2025-09-29"},{providerId:"vercel",modelId:"deepseek/deepseek-r1-distill-llama-70b",name:"DeepSeek R1 Distill Llama 70B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.75,output:0.99},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2025-01-20",last_updated:"2025-01-20"},{providerId:"vercel",modelId:"deepseek/deepseek-r1",name:"DeepSeek-R1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.35,output:5.4},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2025-01-20",last_updated:"2025-05-29"},{providerId:"vercel",modelId:"minimax/minimax-m2",name:"MiniMax M2",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:1.2,cache_read:0.03,cache_write:0.38},limit:{context:205000,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-10-27",last_updated:"2025-10-27"},{providerId:"vercel",modelId:"google/gemini-3-pro-preview",name:"Gemini 3 Pro Preview",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:2,output:12,cache_read:0.2},limit:{context:1e6,output:64000},modalities:{input:["text","image","video","audio","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-11-18",last_updated:"2025-11-18"},{providerId:"vercel",modelId:"google/gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.4,cache_read:0.025},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-06-17",last_updated:"2025-06-17"},{providerId:"vercel",modelId:"google/gemini-2.5-flash-preview-09-2025",name:"Gemini 2.5 Flash Preview 09-25",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:2.5,cache_read:0.075,cache_write:0.383},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-09-25",last_updated:"2025-09-25"},{providerId:"vercel",modelId:"google/gemini-2.5-flash-lite-preview-09-2025",name:"Gemini 2.5 Flash Lite Preview 09-25",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.4,cache_read:0.025},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-09-25",last_updated:"2025-09-25"},{providerId:"vercel",modelId:"google/gemini-2.5-pro",name:"Gemini 2.5 Pro",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.25,output:10,cache_read:0.31},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-03-20",last_updated:"2025-06-05"},{providerId:"vercel",modelId:"google/gemini-2.0-flash",name:"Gemini 2.0 Flash",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.4,cache_read:0.025},limit:{context:1048576,output:8192},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2024-06",release_date:"2024-12-11",last_updated:"2024-12-11"},{providerId:"vercel",modelId:"google/gemini-2.0-flash-lite",name:"Gemini 2.0 Flash Lite",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.075,output:0.3},limit:{context:1048576,output:8192},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2024-06",release_date:"2024-12-11",last_updated:"2024-12-11"},{providerId:"vercel",modelId:"google/gemini-2.5-flash",name:"Gemini 2.5 Flash",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:2.5,cache_read:0.075},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-03-20",last_updated:"2025-06-05"},{providerId:"vercel",modelId:"openai/gpt-oss-20b",name:"GPT OSS 20B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.07,output:0.3},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"vercel",modelId:"openai/gpt-oss-120b",name:"GPT OSS 120B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.5},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"vercel",modelId:"openai/gpt-5",name:"GPT-5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.25,output:10,cache_read:0.13},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"vercel",modelId:"openai/gpt-4o-mini",name:"GPT-4o mini",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.6,cache_read:0.08},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-09",release_date:"2024-07-18",last_updated:"2024-07-18"},{providerId:"vercel",modelId:"openai/o3",name:"o3",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:2,output:8,cache_read:0.5},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05",release_date:"2025-04-16",last_updated:"2025-04-16"},{providerId:"vercel",modelId:"openai/gpt-5-mini",name:"GPT-5 Mini",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0.25,output:2,cache_read:0.03},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05-30",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"vercel",modelId:"openai/o1",name:"o1",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:15,output:60,cache_read:7.5},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-09",release_date:"2024-12-05",last_updated:"2024-12-05"},{providerId:"vercel",modelId:"openai/o4-mini",name:"o4-mini",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.1,output:4.4,cache_read:0.28},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05",release_date:"2025-04-16",last_updated:"2025-04-16"},{providerId:"vercel",modelId:"openai/gpt-4.1",name:"GPT-4.1",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:8,cache_read:0.5},limit:{context:1047576,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2025-04-14",last_updated:"2025-04-14"},{providerId:"vercel",modelId:"openai/gpt-4o",name:"GPT-4o",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2.5,output:10,cache_read:1.25},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-09",release_date:"2024-05-13",last_updated:"2024-08-06"},{providerId:"vercel",modelId:"openai/gpt-5-codex",name:"GPT-5-Codex",attachment:!1,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.25,output:10,cache_read:0.125},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-09-15",last_updated:"2025-09-15"},{providerId:"vercel",modelId:"openai/gpt-5-nano",name:"GPT-5 Nano",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0.05,output:0.4,cache_read:0.01},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05-30",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"vercel",modelId:"openai/o3-mini",name:"o3-mini",attachment:!1,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.1,output:4.4,cache_read:0.55},limit:{context:200000,output:1e5},modalities:{input:["text"],output:["text"]},knowledge:"2024-05",release_date:"2024-12-20",last_updated:"2025-01-29"},{providerId:"vercel",modelId:"openai/gpt-4-turbo",name:"GPT-4 Turbo",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:10,output:30},limit:{context:128000,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-12",release_date:"2023-11-06",last_updated:"2024-04-09"},{providerId:"vercel",modelId:"openai/gpt-4.1-mini",name:"GPT-4.1 mini",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.4,output:1.6,cache_read:0.1},limit:{context:1047576,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2025-04-14",last_updated:"2025-04-14"},{providerId:"vercel",modelId:"openai/gpt-4.1-nano",name:"GPT-4.1 nano",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.4,cache_read:0.03},limit:{context:1047576,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2025-04-14",last_updated:"2025-04-14"},{providerId:"vercel",modelId:"perplexity/sonar-reasoning",name:"Sonar Reasoning",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:1,output:5},limit:{context:127000,output:8000},modalities:{input:["text"],output:["text"]},knowledge:"2025-09",release_date:"2025-02-19",last_updated:"2025-02-19"},{providerId:"vercel",modelId:"perplexity/sonar",name:"Sonar",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:1,output:1},limit:{context:127000,output:8000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-02",release_date:"2025-02-19",last_updated:"2025-02-19"},{providerId:"vercel",modelId:"perplexity/sonar-pro",name:"Sonar Pro",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:3,output:15},limit:{context:200000,output:8000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-09",release_date:"2025-02-19",last_updated:"2025-02-19"},{providerId:"vercel",modelId:"perplexity/sonar-reasoning-pro",name:"Sonar Reasoning Pro",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:2,output:8},limit:{context:127000,output:8000},modalities:{input:["text"],output:["text"]},knowledge:"2025-09",release_date:"2025-02-19",last_updated:"2025-02-19"},{providerId:"vercel",modelId:"zai/glm-4.5",name:"GLM 4.5",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.2},limit:{context:128000,output:96000},modalities:{input:["text"],output:["text"]},knowledge:"2025-07",release_date:"2025-07-28",last_updated:"2025-07-28"},{providerId:"vercel",modelId:"zai/glm-4.5-air",name:"GLM 4.5 Air",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:1.1},limit:{context:128000,output:96000},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-28",last_updated:"2025-07-28"},{providerId:"vercel",modelId:"zai/glm-4.5v",name:"GLM 4.5V",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:1.8},limit:{context:66000,output:16000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-08",release_date:"2025-08-11",last_updated:"2025-08-11"},{providerId:"vercel",modelId:"zai/glm-4.6",name:"GLM 4.6",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.2},limit:{context:200000,output:96000},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-09-30",last_updated:"2025-09-30"},{providerId:"vercel",modelId:"amazon/nova-micro",name:"Nova Micro",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.035,output:0.14,cache_read:0.00875},limit:{context:128000,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2024-12-03",last_updated:"2024-12-03"},{providerId:"vercel",modelId:"amazon/nova-pro",name:"Nova Pro",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.8,output:3.2,cache_read:0.2},limit:{context:300000,output:8192},modalities:{input:["text","image","video"],output:["text"]},knowledge:"2024-10",release_date:"2024-12-03",last_updated:"2024-12-03"},{providerId:"vercel",modelId:"amazon/nova-lite",name:"Nova Lite",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.06,output:0.24,cache_read:0.015},limit:{context:300000,output:8192},modalities:{input:["text","image","video"],output:["text"]},knowledge:"2024-10",release_date:"2024-12-03",last_updated:"2024-12-03"},{providerId:"vercel",modelId:"morph/morph-v3-fast",name:"Morph v3 Fast",attachment:!1,reasoning:!1,tool_call:!1,temperature:!1,cost:{input:0.8,output:1.2},limit:{context:16000,output:16000},modalities:{input:["text"],output:["text"]},release_date:"2024-08-15",last_updated:"2024-08-15"},{providerId:"vercel",modelId:"morph/morph-v3-large",name:"Morph v3 Large",attachment:!1,reasoning:!1,tool_call:!1,temperature:!1,cost:{input:0.9,output:1.9},limit:{context:32000,output:32000},modalities:{input:["text"],output:["text"]},release_date:"2024-08-15",last_updated:"2024-08-15"},{providerId:"vercel",modelId:"meta/llama-4-scout",name:"Llama-4-Scout-17B-16E-Instruct-FP8",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-08",release_date:"2025-04-05",last_updated:"2025-04-05"},{providerId:"vercel",modelId:"meta/llama-3.3-70b",name:"Llama-3.3-70B-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-12-06",last_updated:"2024-12-06"},{providerId:"vercel",modelId:"meta/llama-4-maverick",name:"Llama-4-Maverick-17B-128E-Instruct-FP8",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-08",release_date:"2025-04-05",last_updated:"2025-04-05"},{providerId:"vercel",modelId:"anthropic/claude-haiku-4.5",name:"Claude Haiku 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1,output:1.25,cache_read:0.1,cache_write:1.25},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-02-28",release_date:"2025-10-15",last_updated:"2025-10-15"},{providerId:"vercel",modelId:"anthropic/claude-opus-4.5",name:"Claude Opus 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:5,output:25,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-11-24",last_updated:"2025-11-24"},{providerId:"vercel",modelId:"anthropic/claude-3.5-haiku",name:"Claude Haiku 3.5",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.8,output:4,cache_read:0.08,cache_write:1},limit:{context:200000,output:8192},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2024-07-31",release_date:"2024-10-22",last_updated:"2024-10-22"},{providerId:"vercel",modelId:"anthropic/claude-3.7-sonnet",name:"Claude Sonnet 3.7",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2024-10-31",release_date:"2025-02-19",last_updated:"2025-02-19"},{providerId:"vercel",modelId:"anthropic/claude-4.5-sonnet",name:"Claude Sonnet 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-07-31",release_date:"2025-09-29",last_updated:"2025-09-29"},{providerId:"vercel",modelId:"anthropic/claude-3.5-sonnet",name:"Claude Sonnet 3.5 v2",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:8192},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2024-04-30",release_date:"2024-10-22",last_updated:"2024-10-22"},{providerId:"vercel",modelId:"anthropic/claude-4-1-opus",name:"Claude Opus 4",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:15,output:75,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:32000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-05-22",last_updated:"2025-05-22"},{providerId:"vercel",modelId:"anthropic/claude-4-sonnet",name:"Claude Sonnet 4",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-05-22",last_updated:"2025-05-22"},{providerId:"vercel",modelId:"anthropic/claude-3-opus",name:"Claude Opus 3",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:15,output:75,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:4096},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2023-08-31",release_date:"2024-02-29",last_updated:"2024-02-29"},{providerId:"vercel",modelId:"anthropic/claude-3-haiku",name:"Claude Haiku 3",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.25,output:1.25,cache_read:0.03,cache_write:0.3},limit:{context:200000,output:4096},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2023-08-31",release_date:"2024-03-13",last_updated:"2024-03-13"},{providerId:"vercel",modelId:"anthropic/claude-4-opus",name:"Claude Opus 4",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:15,output:75,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:32000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-05-22",last_updated:"2025-05-22"}]},{id:"nebius",name:"Nebius Token Factory",models:[{providerId:"nebius",modelId:"NousResearch/hermes-4-70b",name:"Hermes 4 70B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.13,output:0.4},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2024-08-01",last_updated:"2025-10-04"},{providerId:"nebius",modelId:"NousResearch/hermes-4-405b",name:"Hermes-4 405B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1,output:3},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2024-08-01",last_updated:"2025-10-04"},{providerId:"nebius",modelId:"moonshotai/kimi-k2-instruct",name:"Kimi K2 Instruct",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.5,output:2.4},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-01",release_date:"2025-01-01",last_updated:"2025-10-04"},{providerId:"nebius",modelId:"nvidia/llama-3_1-nemotron-ultra-253b-v1",name:"Llama 3.1 Nemotron Ultra 253B v1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:1.8},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2024-07-01",last_updated:"2025-10-04"},{providerId:"nebius",modelId:"openai/gpt-oss-20b",name:"GPT OSS 20B",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.05,output:0.2},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-01",release_date:"2024-01-01",last_updated:"2025-10-04"},{providerId:"nebius",modelId:"openai/gpt-oss-120b",name:"GPT OSS 120B",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.6},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-01",release_date:"2024-01-01",last_updated:"2025-10-04"},{providerId:"nebius",modelId:"qwen/qwen3-235b-a22b-instruct-2507",name:"Qwen3 235B A22B Instruct 2507",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.6},limit:{context:262144,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2025-07",release_date:"2025-07-25",last_updated:"2025-10-04"},{providerId:"nebius",modelId:"qwen/qwen3-235b-a22b-thinking-2507",name:"Qwen3 235B A22B Thinking 2507",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.8},limit:{context:262144,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2025-07",release_date:"2025-07-25",last_updated:"2025-10-04"},{providerId:"nebius",modelId:"qwen/qwen3-coder-480b-a35b-instruct",name:"Qwen3 Coder 480B A35B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.4,output:1.8},limit:{context:262144,output:66536},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-23",last_updated:"2025-10-04"},{providerId:"nebius",modelId:"meta-llama/llama-3_1-405b-instruct",name:"Llama 3.1 405B Instruct",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1,output:3},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-03",release_date:"2024-07-23",last_updated:"2025-10-04"},{providerId:"nebius",modelId:"meta-llama/llama-3.3-70b-instruct-fast",name:"Llama-3.3-70B-Instruct (Fast)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.25,output:0.75},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-08",release_date:"2024-08-22",last_updated:"2025-10-04"},{providerId:"nebius",modelId:"meta-llama/llama-3.3-70b-instruct-base",name:"Llama-3.3-70B-Instruct (Base)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.13,output:0.4},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-08",release_date:"2024-08-22",last_updated:"2025-10-04"},{providerId:"nebius",modelId:"zai-org/glm-4.5",name:"GLM 4.5",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.2},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-05",release_date:"2024-06-01",last_updated:"2025-10-04"},{providerId:"nebius",modelId:"zai-org/glm-4.5-air",name:"GLM 4.5 Air",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:1.2},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-05",release_date:"2024-06-01",last_updated:"2025-10-04"},{providerId:"nebius",modelId:"deepseek-ai/deepseek-v3",name:"DeepSeek V3",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.5,output:1.5},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-05-07",last_updated:"2025-10-04"}]},{id:"deepseek",name:"DeepSeek",models:[{providerId:"deepseek",modelId:"deepseek-chat",name:"DeepSeek Chat",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.28,output:0.42,cache_read:0.028},limit:{context:128000,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2024-12-26",last_updated:"2025-09-29"},{providerId:"deepseek",modelId:"deepseek-reasoner",name:"DeepSeek Reasoner",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.28,output:0.42,cache_read:0.028},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2025-01-20",last_updated:"2025-09-29"}]},{id:"alibaba-cn",name:"Alibaba (China)",models:[{providerId:"alibaba-cn",modelId:"deepseek-r1-distill-qwen-7b",name:"DeepSeek R1 Distill Qwen 7B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.072,output:0.144},limit:{context:32768,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"alibaba-cn",modelId:"qwen3-asr-flash",name:"Qwen3-ASR Flash",attachment:!1,reasoning:!1,tool_call:!1,temperature:!1,cost:{input:0.032,output:0.032},limit:{context:53248,output:4096},modalities:{input:["audio"],output:["text"]},knowledge:"2024-04",release_date:"2025-09-08",last_updated:"2025-09-08"},{providerId:"alibaba-cn",modelId:"deepseek-r1-0528",name:"DeepSeek R1 0528",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.574,output:2.294},limit:{context:131072,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-05-28",last_updated:"2025-05-28"},{providerId:"alibaba-cn",modelId:"deepseek-v3",name:"DeepSeek V3",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.287,output:1.147},limit:{context:65536,output:8192},modalities:{input:["text"],output:["text"]},release_date:"2024-12-01",last_updated:"2024-12-01"},{providerId:"alibaba-cn",modelId:"qwen-omni-turbo",name:"Qwen-Omni Turbo",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.058,output:0.23},limit:{context:32768,output:2048},modalities:{input:["text","image","audio","video"],output:["text","audio"]},knowledge:"2024-04",release_date:"2025-01-19",last_updated:"2025-03-26"},{providerId:"alibaba-cn",modelId:"qwen-vl-max",name:"Qwen-VL Max",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.23,output:0.574},limit:{context:131072,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2024-04-08",last_updated:"2025-08-13"},{providerId:"alibaba-cn",modelId:"deepseek-v3-2-exp",name:"DeepSeek V3.2 Exp",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.287,output:0.431},limit:{context:131072,output:65536},modalities:{input:["text"],output:["text"]},release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"alibaba-cn",modelId:"qwen3-next-80b-a3b-instruct",name:"Qwen3-Next 80B-A3B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.144,output:0.574},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-09",last_updated:"2025-09"},{providerId:"alibaba-cn",modelId:"deepseek-r1",name:"DeepSeek R1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.574,output:2.294},limit:{context:131072,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"alibaba-cn",modelId:"qwen-turbo",name:"Qwen Turbo",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.044,output:0.087},limit:{context:1e6,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-11-01",last_updated:"2025-07-15"},{providerId:"alibaba-cn",modelId:"qwen3-vl-235b-a22b",name:"Qwen3-VL 235B-A22B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.286705,output:1.14682},limit:{context:131072,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-04",release_date:"2025-04",last_updated:"2025-04"},{providerId:"alibaba-cn",modelId:"qwen3-coder-flash",name:"Qwen3 Coder Flash",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.144,output:0.574},limit:{context:1e6,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-28",last_updated:"2025-07-28"},{providerId:"alibaba-cn",modelId:"qwen3-vl-30b-a3b",name:"Qwen3-VL 30B-A3B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.108,output:0.431},limit:{context:131072,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-04",release_date:"2025-04",last_updated:"2025-04"},{providerId:"alibaba-cn",modelId:"qwen3-14b",name:"Qwen3 14B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.144,output:0.574},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04",last_updated:"2025-04"},{providerId:"alibaba-cn",modelId:"qvq-max",name:"QVQ Max",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.147,output:4.588},limit:{context:131072,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2025-03-25",last_updated:"2025-03-25"},{providerId:"alibaba-cn",modelId:"deepseek-r1-distill-qwen-32b",name:"DeepSeek R1 Distill Qwen 32B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.287,output:0.861},limit:{context:32768,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"alibaba-cn",modelId:"qwen-plus-character",name:"Qwen Plus Character",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.115,output:0.287},limit:{context:32768,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-01",last_updated:"2024-01"},{providerId:"alibaba-cn",modelId:"qwen2-5-14b-instruct",name:"Qwen2.5 14B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.144,output:0.431},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-09",last_updated:"2024-09"},{providerId:"alibaba-cn",modelId:"qwq-plus",name:"QwQ Plus",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.23,output:0.574},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2025-03-05",last_updated:"2025-03-05"},{providerId:"alibaba-cn",modelId:"qwen2-5-coder-32b-instruct",name:"Qwen2.5-Coder 32B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.287,output:0.861},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-11",last_updated:"2024-11"},{providerId:"alibaba-cn",modelId:"qwen3-coder-30b-a3b-instruct",name:"Qwen3-Coder 30B-A3B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.216,output:0.861},limit:{context:262144,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04",last_updated:"2025-04"},{providerId:"alibaba-cn",modelId:"qwen-math-plus",name:"Qwen Math Plus",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.574,output:1.721},limit:{context:4096,output:3072},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-08-16",last_updated:"2024-09-19"},{providerId:"alibaba-cn",modelId:"qwen-vl-ocr",name:"Qwen-VL OCR",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.717,output:0.717},limit:{context:34096,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2024-10-28",last_updated:"2025-04-13"},{providerId:"alibaba-cn",modelId:"qwen-doc-turbo",name:"Qwen Doc Turbo",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.087,output:0.144},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-01",last_updated:"2024-01"},{providerId:"alibaba-cn",modelId:"qwen-deep-research",name:"Qwen Deep Research",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:7.742,output:23.367},limit:{context:1e6,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-01",last_updated:"2024-01"},{providerId:"alibaba-cn",modelId:"qwen2-5-72b-instruct",name:"Qwen2.5 72B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.574,output:1.721},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-09",last_updated:"2024-09"},{providerId:"alibaba-cn",modelId:"qwen3-omni-flash",name:"Qwen3-Omni Flash",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.058,output:0.23},limit:{context:65536,output:16384},modalities:{input:["text","image","audio","video"],output:["text","audio"]},knowledge:"2024-04",release_date:"2025-09-15",last_updated:"2025-09-15"},{providerId:"alibaba-cn",modelId:"qwen-flash",name:"Qwen Flash",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.022,output:0.216},limit:{context:1e6,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2025-07-28",last_updated:"2025-07-28"},{providerId:"alibaba-cn",modelId:"qwen3-8b",name:"Qwen3 8B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.072,output:0.287},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04",last_updated:"2025-04"},{providerId:"alibaba-cn",modelId:"qwen3-omni-flash-realtime",name:"Qwen3-Omni Flash Realtime",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.23,output:0.918},limit:{context:65536,output:16384},modalities:{input:["text","image","audio"],output:["text","audio"]},knowledge:"2024-04",release_date:"2025-09-15",last_updated:"2025-09-15"},{providerId:"alibaba-cn",modelId:"qwen2-5-vl-72b-instruct",name:"Qwen2.5-VL 72B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2.294,output:6.881},limit:{context:131072,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2024-09",last_updated:"2024-09"},{providerId:"alibaba-cn",modelId:"qwen3-vl-plus",name:"Qwen3-VL Plus",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.143353,output:1.433525},limit:{context:262144,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-04",release_date:"2025-09-23",last_updated:"2025-09-23"},{providerId:"alibaba-cn",modelId:"qwen-plus",name:"Qwen Plus",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.115,output:0.287},limit:{context:1e6,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-01-25",last_updated:"2025-09-11"},{providerId:"alibaba-cn",modelId:"qwen2-5-32b-instruct",name:"Qwen2.5 32B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.287,output:0.861},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-09",last_updated:"2024-09"},{providerId:"alibaba-cn",modelId:"qwen2-5-omni-7b",name:"Qwen2.5-Omni 7B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.087,output:0.345},limit:{context:32768,output:2048},modalities:{input:["text","image","audio","video"],output:["text","audio"]},knowledge:"2024-04",release_date:"2024-12",last_updated:"2024-12"},{providerId:"alibaba-cn",modelId:"qwen-max",name:"Qwen Max",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.345,output:1.377},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-04-03",last_updated:"2025-01-25"},{providerId:"alibaba-cn",modelId:"qwen-long",name:"Qwen Long",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.072,output:0.287},limit:{context:1e7,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2025-01-25",last_updated:"2025-01-25"},{providerId:"alibaba-cn",modelId:"qwen2-5-math-72b-instruct",name:"Qwen2.5-Math 72B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.574,output:1.721},limit:{context:4096,output:3072},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-09",last_updated:"2024-09"},{providerId:"alibaba-cn",modelId:"moonshot-kimi-k2-instruct",name:"Moonshot Kimi K2 Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.574,output:2.294},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"alibaba-cn",modelId:"tongyi-intent-detect-v3",name:"Tongyi Intent Detect V3",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.058,output:0.144},limit:{context:8192,output:1024},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-01",last_updated:"2024-01"},{providerId:"alibaba-cn",modelId:"qwen2-5-7b-instruct",name:"Qwen2.5 7B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.072,output:0.144},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-09",last_updated:"2024-09"},{providerId:"alibaba-cn",modelId:"qwen2-5-vl-7b-instruct",name:"Qwen2.5-VL 7B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.287,output:0.717},limit:{context:131072,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2024-09",last_updated:"2024-09"},{providerId:"alibaba-cn",modelId:"deepseek-v3-1",name:"DeepSeek V3.1",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.574,output:1.721},limit:{context:131072,output:65536},modalities:{input:["text"],output:["text"]},release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"alibaba-cn",modelId:"deepseek-r1-distill-llama-70b",name:"DeepSeek R1 Distill Llama 70B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.287,output:0.861},limit:{context:32768,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"alibaba-cn",modelId:"qwen3-235b-a22b",name:"Qwen3 235B-A22B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.287,output:1.147},limit:{context:131072,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04",last_updated:"2025-04"},{providerId:"alibaba-cn",modelId:"qwen2-5-coder-7b-instruct",name:"Qwen2.5-Coder 7B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.144,output:0.287},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-11",last_updated:"2024-11"},{providerId:"alibaba-cn",modelId:"deepseek-r1-distill-qwen-14b",name:"DeepSeek R1 Distill Qwen 14B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.144,output:0.431},limit:{context:32768,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"alibaba-cn",modelId:"qwen-omni-turbo-realtime",name:"Qwen-Omni Turbo Realtime",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.23,output:0.918},limit:{context:32768,output:2048},modalities:{input:["text","image","audio"],output:["text","audio"]},knowledge:"2024-04",release_date:"2025-05-08",last_updated:"2025-05-08"},{providerId:"alibaba-cn",modelId:"qwen-math-turbo",name:"Qwen Math Turbo",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.287,output:0.861},limit:{context:4096,output:3072},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-09-19",last_updated:"2024-09-19"},{providerId:"alibaba-cn",modelId:"qwen-mt-turbo",name:"Qwen-MT Turbo",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.101,output:0.28},limit:{context:16384,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2025-01",last_updated:"2025-01"},{providerId:"alibaba-cn",modelId:"deepseek-r1-distill-llama-8b",name:"DeepSeek R1 Distill Llama 8B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:32768,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"alibaba-cn",modelId:"qwen3-coder-480b-a35b-instruct",name:"Qwen3-Coder 480B-A35B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.861,output:3.441},limit:{context:262144,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04",last_updated:"2025-04"},{providerId:"alibaba-cn",modelId:"qwen-mt-plus",name:"Qwen-MT Plus",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.259,output:0.775},limit:{context:16384,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2025-01",last_updated:"2025-01"},{providerId:"alibaba-cn",modelId:"qwen3-max",name:"Qwen3 Max",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.861,output:3.441},limit:{context:262144,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-09-23",last_updated:"2025-09-23"},{providerId:"alibaba-cn",modelId:"qwq-32b",name:"QwQ 32B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.287,output:0.861},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-12",last_updated:"2024-12"},{providerId:"alibaba-cn",modelId:"qwen2-5-math-7b-instruct",name:"Qwen2.5-Math 7B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.144,output:0.287},limit:{context:4096,output:3072},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-09",last_updated:"2024-09"},{providerId:"alibaba-cn",modelId:"qwen3-next-80b-a3b-thinking",name:"Qwen3-Next 80B-A3B (Thinking)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.144,output:1.434},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-09",last_updated:"2025-09"},{providerId:"alibaba-cn",modelId:"deepseek-r1-distill-qwen-1-5b",name:"DeepSeek R1 Distill Qwen 1.5B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:32768,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"alibaba-cn",modelId:"qwen3-32b",name:"Qwen3 32B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.287,output:1.147},limit:{context:131072,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04",last_updated:"2025-04"},{providerId:"alibaba-cn",modelId:"qwen-vl-plus",name:"Qwen-VL Plus",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.115,output:0.287},limit:{context:131072,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2024-01-25",last_updated:"2025-08-15"},{providerId:"alibaba-cn",modelId:"qwen3-coder-plus",name:"Qwen3 Coder Plus",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:1,output:5},limit:{context:1048576,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-23",last_updated:"2025-07-23"}]},{id:"google-vertex-anthropic",name:"Vertex (Anthropic)",models:[{providerId:"google-vertex-anthropic",modelId:"claude-opus-4-5@20251101",name:"Claude Opus 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:5,output:25,cache_read:0.5,cache_write:6.25},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-11-24",last_updated:"2025-11-24"},{providerId:"google-vertex-anthropic",modelId:"claude-3-5-sonnet@20241022",name:"Claude Sonnet 3.5 v2",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:8192},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2024-04-30",release_date:"2024-10-22",last_updated:"2024-10-22"},{providerId:"google-vertex-anthropic",modelId:"claude-3-5-haiku@20241022",name:"Claude Haiku 3.5",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.8,output:4,cache_read:0.08,cache_write:1},limit:{context:200000,output:8192},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2024-07-31",release_date:"2024-10-22",last_updated:"2024-10-22"},{providerId:"google-vertex-anthropic",modelId:"claude-sonnet-4@20250514",name:"Claude Sonnet 4",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-05-22",last_updated:"2025-05-22"},{providerId:"google-vertex-anthropic",modelId:"claude-sonnet-4-5@20250929",name:"Claude Sonnet 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-07-31",release_date:"2025-09-29",last_updated:"2025-09-29"},{providerId:"google-vertex-anthropic",modelId:"claude-opus-4-1@20250805",name:"Claude Opus 4.1",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:15,output:75,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:32000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"google-vertex-anthropic",modelId:"claude-haiku-4-5@20251001",name:"Claude Haiku 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1,output:5,cache_read:0.1,cache_write:1.25},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-02-28",release_date:"2025-10-15",last_updated:"2025-10-15"},{providerId:"google-vertex-anthropic",modelId:"claude-3-7-sonnet@20250219",name:"Claude Sonnet 3.7",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2024-10-31",release_date:"2025-02-19",last_updated:"2025-02-19"},{providerId:"google-vertex-anthropic",modelId:"claude-opus-4@20250514",name:"Claude Opus 4",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:15,output:75,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:32000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-05-22",last_updated:"2025-05-22"}]},{id:"venice",name:"Venice AI",models:[{providerId:"venice",modelId:"grok-41-fast",name:"Grok 4.1 Fast",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.5,output:1.25},limit:{context:262144,output:65536},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-07",release_date:"2025-04-29",last_updated:"2025-12-18"},{providerId:"venice",modelId:"qwen3-235b-a22b-instruct-2507",name:"Qwen 3 235B A22B Instruct 2507",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.75},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2025-07",release_date:"2025-04-29",last_updated:"2025-12-18"},{providerId:"venice",modelId:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.7,output:3.75},limit:{context:262144,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-12-18",last_updated:"2025-12-18"},{providerId:"venice",modelId:"claude-opus-45",name:"Claude Opus 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:6,output:30},limit:{context:202752,output:50688},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03",release_date:"2025-12-18",last_updated:"2025-12-18"},{providerId:"venice",modelId:"mistral-31-24b",name:"Venice Medium",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.5,output:2},limit:{context:131072,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-10",release_date:"2025-03-18",last_updated:"2025-12-18"},{providerId:"venice",modelId:"venice-uncensored",name:"Venice Uncensored 1.1",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.2,output:0.9},limit:{context:32768,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2025-03-18",last_updated:"2025-12-18"},{providerId:"venice",modelId:"gemini-3-pro-preview",name:"Gemini 3 Pro Preview",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:2.5,output:15},limit:{context:202752,output:50688},modalities:{input:["text","image","audio","video"],output:["text"]},knowledge:"2024-04",release_date:"2024-06-07",last_updated:"2025-12-18"},{providerId:"venice",modelId:"openai-gpt-52",name:"GPT-5.2",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:2.19,output:17.5},limit:{context:262144,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2025-08-31",release_date:"2025-12-18",last_updated:"2025-12-18"},{providerId:"venice",modelId:"qwen3-4b",name:"Venice Small",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.05,output:0.15},limit:{context:32768,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2025-04-29",last_updated:"2025-12-18"},{providerId:"venice",modelId:"llama-3.3-70b",name:"Llama 3.3 70B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.7,output:2.8},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-12-09",last_updated:"2025-12-18"},{providerId:"venice",modelId:"openai-gpt-oss-120b",name:"OpenAI GPT OSS 120B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.07,output:0.3},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2025-07",release_date:"2024-04-01",last_updated:"2025-12-18"},{providerId:"venice",modelId:"kimi-k2-thinking",name:"Kimi K2 Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.75,output:3.2},limit:{context:262144,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-06-07",last_updated:"2025-12-18"},{providerId:"venice",modelId:"qwen3-235b-a22b-thinking-2507",name:"Qwen 3 235B A22B Thinking 2507",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.45,output:3.5},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2025-07",release_date:"2025-04-29",last_updated:"2025-12-18"},{providerId:"venice",modelId:"llama-3.2-3b",name:"Llama 3.2 3B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.6},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-10-03",last_updated:"2025-12-18"},{providerId:"venice",modelId:"google-gemma-3-27b-it",name:"Google Gemma 3 27B Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.12,output:0.2},limit:{context:202752,output:50688},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-07",release_date:"2024-04-01",last_updated:"2025-12-18"},{providerId:"venice",modelId:"hermes-3-llama-3.1-405b",name:"Hermes 3 Llama 3.1 405b",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:1.1,output:3},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-04-01",last_updated:"2025-12-18"},{providerId:"venice",modelId:"zai-org-glm-4.6v",name:"GLM 4.6V",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.39,output:1.13},limit:{context:131072,output:32768},modalities:{input:["text","image"],output:["text"]},release_date:"2024-12-10",last_updated:"2025-12-18"},{providerId:"venice",modelId:"qwen3-next-80b",name:"Qwen 3 Next 80b",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.35,output:1.9},limit:{context:262144,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2025-07",release_date:"2025-04-29",last_updated:"2025-12-18"},{providerId:"venice",modelId:"zai-org-glm-4.6",name:"GLM 4.6",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.85,output:2.75},limit:{context:202752,output:50688},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-04-01",last_updated:"2025-12-18"},{providerId:"venice",modelId:"qwen3-coder-480b-a35b-instruct",name:"Qwen 3 Coder 480b",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.75,output:3},limit:{context:262144,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2025-07",release_date:"2025-04-29",last_updated:"2025-12-18"},{providerId:"venice",modelId:"deepseek-v3.2",name:"DeepSeek V3.2",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:0.4,output:1},limit:{context:163840,output:40960},modalities:{input:["text"],output:["text"]},knowledge:"2025-10",release_date:"2025-12-07",last_updated:"2025-12-18"}]},{id:"siliconflow-cn",name:"SiliconFlow (China)",models:[{providerId:"siliconflow-cn",modelId:"qwen-qwen2.5-14b-instruct",name:"Qwen/Qwen2.5-14B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.1},limit:{context:33000,output:4000},modalities:{input:["text"],output:["text"]},release_date:"2024-09-18",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"moonshotai-kimi-k2-thinking",name:"moonshotai/Kimi-K2-Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.55,output:2.5},limit:{context:262000,output:262000},modalities:{input:["text"],output:["text"]},release_date:"2025-11-07",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen3-vl-30b-a3b-instruct",name:"Qwen/Qwen3-VL-30B-A3B-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.29,output:1},limit:{context:262000,output:262000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-10-05",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen3-next-80b-a3b-instruct",name:"Qwen/Qwen3-Next-80B-A3B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.14,output:1.4},limit:{context:262000,output:262000},modalities:{input:["text"],output:["text"]},release_date:"2025-09-18",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"deepseek-ai-deepseek-r1-distill-qwen-32b",name:"deepseek-ai/DeepSeek-R1-Distill-Qwen-32B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.18,output:0.18},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-01-20",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"thudm-glm-4-32b-0414",name:"THUDM/GLM-4-32B-0414",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.27,output:0.27},limit:{context:33000,output:33000},modalities:{input:["text"],output:["text"]},release_date:"2025-04-18",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"tencent-hunyuan-a13b-instruct",name:"tencent/Hunyuan-A13B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.14,output:0.57},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-06-30",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen3-32b",name:"Qwen/Qwen3-32B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.14,output:0.57},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-04-30",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"zai-org-glm-4.6",name:"zai-org/GLM-4.6",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.5,output:1.9},limit:{context:205000,output:205000},modalities:{input:["text"],output:["text"]},release_date:"2025-10-04",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen3-omni-30b-a3b-thinking",name:"Qwen/Qwen3-Omni-30B-A3B-Thinking",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.4},limit:{context:66000,output:66000},modalities:{input:["text","image","audio"],output:["text"]},release_date:"2025-10-04",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"baidu-ernie-4.5-300b-a47b",name:"baidu/ERNIE-4.5-300B-A47B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.28,output:1.1},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-07-02",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen3-235b-a22b-instruct-2507",name:"Qwen/Qwen3-235B-A22B-Instruct-2507",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.09,output:0.6},limit:{context:262000,output:262000},modalities:{input:["text"],output:["text"]},release_date:"2025-07-23",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"meta-llama-meta-llama-3.1-8b-instruct",name:"meta-llama/Meta-Llama-3.1-8B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.06,output:0.06},limit:{context:33000,output:4000},modalities:{input:["text"],output:["text"]},release_date:"2025-04-23",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen3-235b-a22b",name:"Qwen/Qwen3-235B-A22B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.35,output:1.42},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-04-30",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen2.5-72b-instruct",name:"Qwen/Qwen2.5-72B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.59,output:0.59},limit:{context:33000,output:4000},modalities:{input:["text"],output:["text"]},release_date:"2024-09-18",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen3-8b",name:"Qwen/Qwen3-8B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.06,output:0.06},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-04-30",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"nex-agi-deepseek-v3.1-nex-n1",name:"nex-agi/DeepSeek-V3.1-Nex-N1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.5,output:2},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-01-01",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen3-vl-8b-instruct",name:"Qwen/Qwen3-VL-8B-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.18,output:0.68},limit:{context:262000,output:262000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-10-15",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen3-vl-8b-thinking",name:"Qwen/Qwen3-VL-8B-Thinking",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.18,output:2},limit:{context:262000,output:262000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-10-15",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen2.5-vl-7b-instruct",name:"Qwen/Qwen2.5-VL-7B-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.05,output:0.05},limit:{context:33000,output:4000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-01-28",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"bytedance-seed-seed-oss-36b-instruct",name:"ByteDance-Seed/Seed-OSS-36B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.21,output:0.57},limit:{context:262000,output:262000},modalities:{input:["text"],output:["text"]},release_date:"2025-09-04",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"minimaxai-minimax-m2",name:"MiniMaxAI/MiniMax-M2",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.3,output:1.2},limit:{context:197000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-10-28",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen2.5-32b-instruct",name:"Qwen/Qwen2.5-32B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.18,output:0.18},limit:{context:33000,output:4000},modalities:{input:["text"],output:["text"]},release_date:"2024-09-19",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen2.5-7b-instruct",name:"Qwen/Qwen2.5-7B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.05,output:0.05},limit:{context:33000,output:4000},modalities:{input:["text"],output:["text"]},release_date:"2024-09-18",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"openai-gpt-oss-20b",name:"openai/gpt-oss-20b",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.04,output:0.18},limit:{context:131000,output:8000},modalities:{input:["text"],output:["text"]},release_date:"2025-08-13",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"deepseek-ai-deepseek-v3",name:"deepseek-ai/DeepSeek-V3",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.25,output:1},limit:{context:164000,output:164000},modalities:{input:["text"],output:["text"]},release_date:"2024-12-26",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"deepseek-ai-deepseek-r1-distill-qwen-14b",name:"deepseek-ai/DeepSeek-R1-Distill-Qwen-14B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.1},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-01-20",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"zai-org-glm-4.5",name:"zai-org/GLM-4.5",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.4,output:2},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-07-28",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen3-vl-235b-a22b-instruct",name:"Qwen/Qwen3-VL-235B-A22B-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.3,output:1.5},limit:{context:262000,output:262000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-10-04",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen3-next-80b-a3b-thinking",name:"Qwen/Qwen3-Next-80B-A3B-Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.14,output:0.57},limit:{context:262000,output:262000},modalities:{input:["text"],output:["text"]},release_date:"2025-09-25",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"thudm-glm-4.1v-9b-thinking",name:"THUDM/GLM-4.1V-9B-Thinking",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.035,output:0.14},limit:{context:66000,output:66000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-07-04",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"stepfun-ai-step3",name:"stepfun-ai/step3",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.57,output:1.42},limit:{context:66000,output:66000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-08-06",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwq-32b",name:"Qwen/QwQ-32B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.58},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-03-06",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen3-coder-30b-a3b-instruct",name:"Qwen/Qwen3-Coder-30B-A3B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.07,output:0.28},limit:{context:262000,output:262000},modalities:{input:["text"],output:["text"]},release_date:"2025-08-01",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"thudm-glm-4-9b-0414",name:"THUDM/GLM-4-9B-0414",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.086,output:0.086},limit:{context:33000,output:33000},modalities:{input:["text"],output:["text"]},release_date:"2025-04-18",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"zai-org-glm-4.5-air",name:"zai-org/GLM-4.5-Air",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.14,output:0.86},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-07-28",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"deepseek-ai-deepseek-v3.1-terminus",name:"deepseek-ai/DeepSeek-V3.1-Terminus",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.27,output:1},limit:{context:164000,output:164000},modalities:{input:["text"],output:["text"]},release_date:"2025-09-29",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"minimaxai-minimax-m1-80k",name:"MiniMaxAI/MiniMax-M1-80k",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.55,output:2.2},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-06-17",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"openai-gpt-oss-120b",name:"openai/gpt-oss-120b",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.05,output:0.45},limit:{context:131000,output:8000},modalities:{input:["text"],output:["text"]},release_date:"2025-08-13",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen3-30b-a3b",name:"Qwen/Qwen3-30B-A3B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.09,output:0.45},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-04-30",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"tencent-hunyuan-mt-7b",name:"tencent/Hunyuan-MT-7B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:33000,output:33000},modalities:{input:["text"],output:["text"]},release_date:"2025-09-18",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen3-vl-32b-thinking",name:"Qwen/Qwen3-VL-32B-Thinking",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:1.5},limit:{context:262000,output:262000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-10-21",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen2.5-vl-72b-instruct",name:"Qwen/Qwen2.5-VL-72B-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.59,output:0.59},limit:{context:131000,output:4000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-01-28",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"thudm-glm-z1-32b-0414",name:"THUDM/GLM-Z1-32B-0414",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.14,output:0.57},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-04-18",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"inclusionai-ring-flash-2.0",name:"inclusionAI/Ring-flash-2.0",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.14,output:0.57},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-09-29",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"zai-org-glm-4.5v",name:"zai-org/GLM-4.5V",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.14,output:0.86},limit:{context:66000,output:66000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-08-13",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen3-30b-a3b-instruct-2507",name:"Qwen/Qwen3-30B-A3B-Instruct-2507",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.09,output:0.3},limit:{context:262000,output:262000},modalities:{input:["text"],output:["text"]},release_date:"2025-07-30",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"z-ai-glm-4.5",name:"z-ai/GLM-4.5",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.4,output:2},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-07-28",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"deepseek-ai-deepseek-v3.1",name:"deepseek-ai/DeepSeek-V3.1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.27,output:1},limit:{context:164000,output:164000},modalities:{input:["text"],output:["text"]},release_date:"2025-08-25",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"deepseek-ai-deepseek-r1",name:"deepseek-ai/DeepSeek-R1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.5,output:2.18},limit:{context:164000,output:164000},modalities:{input:["text"],output:["text"]},release_date:"2025-05-28",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen3-14b",name:"Qwen/Qwen3-14B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.07,output:0.28},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-04-30",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen3-30b-a3b-thinking-2507",name:"Qwen/Qwen3-30B-A3B-Thinking-2507",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.09,output:0.3},limit:{context:262000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-07-31",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"moonshotai-kimi-k2-instruct-0905",name:"moonshotai/Kimi-K2-Instruct-0905",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.4,output:2},limit:{context:262000,output:262000},modalities:{input:["text"],output:["text"]},release_date:"2025-09-08",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen3-omni-30b-a3b-instruct",name:"Qwen/Qwen3-Omni-30B-A3B-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.4},limit:{context:66000,output:66000},modalities:{input:["text","image","audio"],output:["text"]},release_date:"2025-10-04",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen3-coder-480b-a35b-instruct",name:"Qwen/Qwen3-Coder-480B-A35B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.25,output:1},limit:{context:262000,output:262000},modalities:{input:["text"],output:["text"]},release_date:"2025-07-31",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"inclusionai-ling-mini-2.0",name:"inclusionAI/Ling-mini-2.0",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.07,output:0.28},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-09-10",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"moonshotai-kimi-k2-instruct",name:"moonshotai/Kimi-K2-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.58,output:2.29},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-07-13",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"inclusionai-ling-flash-2.0",name:"inclusionAI/Ling-flash-2.0",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.14,output:0.57},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-09-18",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen3-vl-32b-instruct",name:"Qwen/Qwen3-VL-32B-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.6},limit:{context:262000,output:262000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-10-21",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen3-235b-a22b-thinking-2507",name:"Qwen/Qwen3-235B-A22B-Thinking-2507",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.13,output:0.6},limit:{context:262000,output:262000},modalities:{input:["text"],output:["text"]},release_date:"2025-07-28",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen2.5-vl-32b-instruct",name:"Qwen/Qwen2.5-VL-32B-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.27,output:0.27},limit:{context:131000,output:131000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-03-24",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"deepseek-ai-deepseek-v3.2-exp",name:"deepseek-ai/DeepSeek-V3.2-Exp",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.27,output:0.41},limit:{context:164000,output:164000},modalities:{input:["text"],output:["text"]},release_date:"2025-10-10",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen3-vl-30b-a3b-thinking",name:"Qwen/Qwen3-VL-30B-A3B-Thinking",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.29,output:1},limit:{context:262000,output:262000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-10-11",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"thudm-glm-z1-9b-0414",name:"THUDM/GLM-Z1-9B-0414",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.086,output:0.086},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-04-18",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen3-vl-235b-a22b-thinking",name:"Qwen/Qwen3-VL-235B-A22B-Thinking",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.45,output:3.5},limit:{context:262000,output:262000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-10-04",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen3-omni-30b-a3b-captioner",name:"Qwen/Qwen3-Omni-30B-A3B-Captioner",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.4},limit:{context:66000,output:66000},modalities:{input:["audio"],output:["text"]},release_date:"2025-10-04",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen2.5-coder-32b-instruct",name:"Qwen/Qwen2.5-Coder-32B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.18,output:0.18},limit:{context:33000,output:4000},modalities:{input:["text"],output:["text"]},release_date:"2024-11-11",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"moonshotai-kimi-dev-72b",name:"moonshotai/Kimi-Dev-72B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.29,output:1.15},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-06-19",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"deepseek-ai-deepseek-vl2",name:"deepseek-ai/deepseek-vl2",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.15},limit:{context:4000,output:4000},modalities:{input:["text","image"],output:["text"]},release_date:"2024-12-13",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"qwen-qwen2.5-72b-instruct-128k",name:"Qwen/Qwen2.5-72B-Instruct-128K",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.59,output:0.59},limit:{context:131000,output:4000},modalities:{input:["text"],output:["text"]},release_date:"2024-09-18",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"z-ai-glm-4.5-air",name:"z-ai/GLM-4.5-Air",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.14,output:0.86},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-07-28",last_updated:"2025-11-25"},{providerId:"siliconflow-cn",modelId:"deepseek-ai-deepseek-r1-distill-qwen-7b",name:"deepseek-ai/DeepSeek-R1-Distill-Qwen-7B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.05,output:0.05},limit:{context:33000,output:16000},modalities:{input:["text"],output:["text"]},release_date:"2025-01-20",last_updated:"2025-11-25"}]},{id:"chutes",name:"Chutes",models:[{providerId:"chutes",modelId:"NousResearch/Hermes-4.3-36B",name:"Hermes 4.3 36B",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.15,output:0.6},limit:{context:32768,output:8192},modalities:{input:["text"],output:["text"]},release_date:"2025-12-11",last_updated:"2025-12-11"},{providerId:"chutes",modelId:"NousResearch/Hermes-4-70B",name:"Hermes 4 70B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.11,output:0.38},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},release_date:"2025-11-08",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"NousResearch/Hermes-4-14B",name:"Hermes 4 14B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.01,output:0.05},limit:{context:40960,output:40960},modalities:{input:["text"],output:["text"]},release_date:"2025-11-08",last_updated:"2025-12-03"},{providerId:"chutes",modelId:"NousResearch/Hermes-4-405B-FP8",name:"Hermes 4 405B FP8",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:1.2},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},release_date:"2025-11-08",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"NousResearch/DeepHermes-3-Mistral-24B-Preview",name:"DeepHermes 3 Mistral 24B Preview",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.05,output:0.2},limit:{context:32768,output:32768},modalities:{input:["text"],output:["text"]},release_date:"2025-11-08",last_updated:"2025-12-03"},{providerId:"chutes",modelId:"rednote-hilab/dots.ocr",name:"Dots.Ocr",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.01,output:0.01},limit:{context:131072,output:131072},modalities:{input:["text","image"],output:["text"]},release_date:"2025-11-08",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"moonshotai/Kimi-K2-Instruct-0905",name:"Kimi K2 Instruct 0905",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.39,output:1.9},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},release_date:"2024-09-05",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"moonshotai/Kimi-K2-Thinking",name:"Kimi K2 Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.45,output:2.35},limit:{context:262144,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-11-08",last_updated:"2025-12-03"},{providerId:"chutes",modelId:"MiniMaxAI/MiniMax-M2",name:"MiniMax M2",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.26,output:1.02},limit:{context:196608,output:196608},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-10-27",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"ArliAI/QwQ-32B-ArliAI-RpR-v1",name:"QwQ 32B ArliAI RpR V1",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:0.03,output:0.11},limit:{context:32768,output:32768},modalities:{input:["text"],output:["text"]},release_date:"2025-11-08",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"tngtech/DeepSeek-R1T-Chimera",name:"DeepSeek R1T Chimera",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:0.3,output:1.2},limit:{context:163840,output:163840},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04-26",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"tngtech/DeepSeek-TNG-R1T2-Chimera",name:"DeepSeek TNG R1T2 Chimera",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:1.2},limit:{context:163840,output:163840},modalities:{input:["text"],output:["text"]},knowledge:"2025-07",release_date:"2025-07-08",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"tngtech/TNG-R1T-Chimera-TEE",name:"TNG R1T Chimera TEE",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:1.2},limit:{context:163840,output:163840},modalities:{input:["text"],output:["text"]},release_date:"2025-12-11",last_updated:"2025-12-11"},{providerId:"chutes",modelId:"OpenGVLab/InternVL3-78B",name:"InternVL3 78B",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.1,output:0.39},limit:{context:32768,output:32768},modalities:{input:["text","image"],output:["text"]},release_date:"2025-11-08",last_updated:"2025-12-11"},{providerId:"chutes",modelId:"openai/gpt-oss-20b",name:"Gpt Oss 20b",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},release_date:"2025-11-08",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"openai/gpt-oss-120b",name:"GPT OSS 120B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.04,output:0.4},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},release_date:"2025-08-05",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"chutesai/Mistral-Small-3.1-24B-Instruct-2503",name:"Mistral Small 3.1 24B Instruct 2503",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.03,output:0.11},limit:{context:131072,output:131072},modalities:{input:["text","image"],output:["text"]},release_date:"2025-11-08",last_updated:"2025-12-03"},{providerId:"chutes",modelId:"chutesai/Mistral-Small-3.2-24B-Instruct-2506",name:"Mistral Small 3.2 24B Instruct (2506)",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.06,output:0.18},limit:{context:131072,output:131072},modalities:{input:["text","image"],output:["text"]},release_date:"2025-06-20",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"Alibaba-NLP/Tongyi-DeepResearch-30B-A3B",name:"Tongyi DeepResearch 30B A3B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},release_date:"2025-11-08",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"mistralai/Devstral-2-123B-Instruct-2512",name:"Devstral 2 123B Instruct 2512",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.6},limit:{context:262144,output:65536},modalities:{input:["text"],output:["text"]},release_date:"2025-12-11",last_updated:"2025-12-11"},{providerId:"chutes",modelId:"unsloth/Mistral-Nemo-Instruct-2407",name:"Mistral Nemo Instruct 2407",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.02,output:0.04},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},release_date:"2025-11-08",last_updated:"2025-12-03"},{providerId:"chutes",modelId:"unsloth/gemma-3-4b-it",name:"Gemma 3 4b It",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:96000,output:96000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-11-08",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"unsloth/Mistral-Small-24B-Instruct-2501",name:"Mistral Small 24B Instruct 2501",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.03,output:0.11},limit:{context:32768,output:32768},modalities:{input:["text","image"],output:["text"]},release_date:"2025-11-08",last_updated:"2025-12-11"},{providerId:"chutes",modelId:"unsloth/gemma-3-12b-it",name:"Gemma 3 12b It",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.03,output:0.1},limit:{context:131072,output:131072},modalities:{input:["text","image"],output:["text"]},release_date:"2025-11-08",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"unsloth/gemma-3-27b-it",name:"Gemma 3 27b It",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.04,output:0.15},limit:{context:96000,output:96000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-11-08",last_updated:"2025-12-11"},{providerId:"chutes",modelId:"Qwen/Qwen3-30B-A3B",name:"Qwen3 30B A3B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.06,output:0.22},limit:{context:40960,output:40960},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04-28",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"Qwen/Qwen3-14B",name:"Qwen3 14B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.05,output:0.22},limit:{context:40960,output:40960},modalities:{input:["text"],output:["text"]},release_date:"2025-11-08",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"Qwen/Qwen2.5-VL-32B-Instruct",name:"Qwen2.5 VL 32B Instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.05,output:0.22},limit:{context:16384,output:16384},modalities:{input:["text","image"],output:["text"]},release_date:"2025-11-08",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"Qwen/Qwen3-235B-A22B-Instruct-2507",name:"Qwen3 235B A22B Instruct 2507",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.08,output:0.55},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04-28",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"Qwen/Qwen2.5-Coder-32B-Instruct",name:"Qwen2.5 Coder 32B Instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.03,output:0.11},limit:{context:32768,output:32768},modalities:{input:["text"],output:["text"]},release_date:"2025-11-08",last_updated:"2025-12-03"},{providerId:"chutes",modelId:"Qwen/Qwen2.5-72B-Instruct",name:"Qwen2.5 72B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.07,output:0.26},limit:{context:32768,output:32768},modalities:{input:["text"],output:["text"]},release_date:"2025-11-08",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"Qwen/Qwen3-Coder-30B-A3B-Instruct",name:"Qwen3 Coder 30B A3B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.06,output:0.25},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-25",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"Qwen/Qwen3-235B-A22B",name:"Qwen3 235B A22B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:1.2},limit:{context:40960,output:40960},modalities:{input:["text"],output:["text"]},release_date:"2025-11-08",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"Qwen/Qwen2.5-VL-72B-Instruct",name:"Qwen2.5 VL 72B Instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.03,output:0.13},limit:{context:32768,output:32768},modalities:{input:["text","image"],output:["text"]},release_date:"2025-11-08",last_updated:"2025-12-03"},{providerId:"chutes",modelId:"Qwen/Qwen3-32B",name:"Qwen3 32B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.08,output:0.24},limit:{context:40960,output:40960},modalities:{input:["text"],output:["text"]},release_date:"2025-11-08",last_updated:"2025-12-03"},{providerId:"chutes",modelId:"Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8",name:"Qwen3 Coder 480B A35B Instruct (FP8)",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.22,output:0.95},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},release_date:"2025-08-01",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"Qwen/Qwen3-VL-235B-A22B-Instruct",name:"Qwen3 VL 235B A22B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.3,output:1.2},limit:{context:262144,output:262144},modalities:{input:["text","image"],output:["text"]},release_date:"2025-11-08",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"Qwen/Qwen3-VL-235B-A22B-Thinking",name:"Qwen3 VL 235B A22B Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:1.2},limit:{context:262144,output:262144},modalities:{input:["text","image"],output:["text"]},release_date:"2025-11-08",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"Qwen/Qwen3-30B-A3B-Instruct-2507",name:"Qwen3 30B A3B Instruct 2507",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.08,output:0.33},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-25",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"Qwen/Qwen3-235B-A22B-Thinking-2507",name:"Qwen3-235B-A22B-Thinking-2507",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.11,output:0.6},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-25",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"Qwen/Qwen3-Next-80B-A3B-Instruct",name:"Qwen3 Next 80B A3B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.8},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-09-11",last_updated:"2025-09-11"},{providerId:"chutes",modelId:"zai-org/GLM-4.6-TEE",name:"GLM 4.6 TEE",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.3,output:1.2},limit:{context:32768,output:8192},modalities:{input:["text"],output:["text"]},release_date:"2025-12-11",last_updated:"2025-12-11"},{providerId:"chutes",modelId:"zai-org/GLM-4.6V",name:"GLM 4.6V",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:0.9},limit:{context:131072,output:65536},modalities:{input:["text","image"],output:["text"]},release_date:"2025-12-11",last_updated:"2025-12-11"},{providerId:"chutes",modelId:"zai-org/GLM-4.5",name:"GLM 4.5",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.35,output:1.55},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-10-30",last_updated:"2025-10-30"},{providerId:"chutes",modelId:"zai-org/GLM-4.6",name:"GLM 4.6",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.4,output:1.75},limit:{context:202752,output:202752},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-10-30",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"zai-org/GLM-4.5-Air",name:"GLM 4.5 Air",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-28",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:0.3,output:1.2},limit:{context:163840,output:163840},modalities:{input:["text"],output:["text"]},release_date:"2025-11-08",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"deepseek-ai/DeepSeek-R1-0528-Qwen3-8B",name:"DeepSeek R1 0528 Qwen3 8B",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:0.02,output:0.1},limit:{context:32768,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2025-05",release_date:"2025-05-29",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"deepseek-ai/DeepSeek-R1-0528",name:"DeepSeek R1 (0528)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.4,output:1.75},limit:{context:163840,output:163840},modalities:{input:["text"],output:["text"]},release_date:"2025-08-01",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"deepseek-ai/DeepSeek-V3.1-Terminus",name:"DeepSeek V3.1 Terminus",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.23,output:0.9},limit:{context:163840,output:163840},modalities:{input:["text"],output:["text"]},knowledge:"2025-07",release_date:"2025-09-22",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"deepseek-ai/DeepSeek-V3.2",name:"DeepSeek V3.2",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.27,output:0.41},limit:{context:163840,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2025-12",release_date:"2025-12-01",last_updated:"2025-12-11"},{providerId:"chutes",modelId:"deepseek-ai/DeepSeek-V3.2-Speciale-TEE",name:"DeepSeek V3.2 Speciale TEE",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:0.27,output:0.41},limit:{context:163840,output:65536},modalities:{input:["text"],output:["text"]},release_date:"2025-12-11",last_updated:"2025-12-11"},{providerId:"chutes",modelId:"deepseek-ai/DeepSeek-V3",name:"DeepSeek V3",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.3,output:1.2},limit:{context:163840,output:163840},modalities:{input:["text"],output:["text"]},release_date:"2025-11-08",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"deepseek-ai/DeepSeek-R1-Distill-Llama-70B",name:"DeepSeek R1 Distill Llama 70B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.03,output:0.13},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-01-23",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"deepseek-ai/DeepSeek-V3.1",name:"DeepSeek V3.1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.8},limit:{context:163840,output:163840},modalities:{input:["text"],output:["text"]},release_date:"2025-08-21",last_updated:"2025-11-08"},{providerId:"chutes",modelId:"deepseek-ai/DeepSeek-V3-0324",name:"DeepSeek V3 (0324)",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.24,output:0.84},limit:{context:163840,output:163840},modalities:{input:["text"],output:["text"]},release_date:"2025-08-01",last_updated:"2025-11-08"}]},{id:"kimi-for-coding",name:"Kimi For Coding",models:[{providerId:"kimi-for-coding",modelId:"kimi-k2-thinking",name:"Kimi K2 Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0,cache_read:0,cache_write:0},limit:{context:262144,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2025-07",release_date:"2025-11",last_updated:"2025-12"}]},{id:"cortecs",name:"Cortecs",models:[{providerId:"cortecs",modelId:"nova-pro-v1",name:"Nova Pro 1.0",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:1.016,output:4.061},limit:{context:300000,output:5000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2024-12-03",last_updated:"2024-12-03"},{providerId:"cortecs",modelId:"devstral-2512",name:"Devstral 2 2512",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:262000,output:262000},modalities:{input:["text"],output:["text"]},knowledge:"2025-12",release_date:"2025-12-09",last_updated:"2025-12-09"},{providerId:"cortecs",modelId:"intellect-3",name:"INTELLECT 3",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.219,output:1.202},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2025-11",release_date:"2025-11-26",last_updated:"2025-11-26"},{providerId:"cortecs",modelId:"claude-4-5-sonnet",name:"Claude 4.5 Sonnet",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3.259,output:16.296},limit:{context:200000,output:200000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-07-31",release_date:"2025-09-29",last_updated:"2025-09-29"},{providerId:"cortecs",modelId:"deepseek-v3-0324",name:"DeepSeek V3 0324",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.551,output:1.654},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2025-03-24",last_updated:"2025-03-24"},{providerId:"cortecs",modelId:"kimi-k2-thinking",name:"Kimi K2 Thinking",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.656,output:2.731},limit:{context:262000,output:262000},modalities:{input:["text"],output:["text"]},knowledge:"2025-12",release_date:"2025-12-08",last_updated:"2025-12-08"},{providerId:"cortecs",modelId:"kimi-k2-instruct",name:"Kimi K2 Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.551,output:2.646},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2025-07-11",last_updated:"2025-09-05"},{providerId:"cortecs",modelId:"gpt-4.1",name:"GPT 4.1",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2.354,output:9.417},limit:{context:1047576,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-06",release_date:"2025-04-14",last_updated:"2025-04-14"},{providerId:"cortecs",modelId:"gemini-2.5-pro",name:"Gemini 2.5 Pro",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:1.654,output:11.024},limit:{context:1048576,output:65535},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-01",release_date:"2025-03-20",last_updated:"2025-06-17"},{providerId:"cortecs",modelId:"gpt-oss-120b",name:"GPT Oss 120b",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2024-01",release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"cortecs",modelId:"devstral-small-2512",name:"Devstral Small 2 2512",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:262000,output:262000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-12",release_date:"2025-12-09",last_updated:"2025-12-09"},{providerId:"cortecs",modelId:"qwen3-coder-480b-a35b-instruct",name:"Qwen3 Coder 480B A35B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.441,output:1.984},limit:{context:262000,output:262000},modalities:{input:["text"],output:["text"]},knowledge:"2025-01",release_date:"2025-07-25",last_updated:"2025-07-25"},{providerId:"cortecs",modelId:"claude-sonnet-4",name:"Claude Sonnet 4",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:3.307,output:16.536},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03",release_date:"2025-05-22",last_updated:"2025-05-22"},{providerId:"cortecs",modelId:"llama-3.1-405b-instruct",name:"Llama 3.1 405B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-07-23",last_updated:"2024-07-23"},{providerId:"cortecs",modelId:"qwen3-next-80b-a3b-thinking",name:"Qwen3 Next 80B A3B Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.164,output:1.311},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-09-11",last_updated:"2025-09-11"},{providerId:"cortecs",modelId:"qwen3-32b",name:"Qwen3 32B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.099,output:0.33},limit:{context:16384,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2024-12",release_date:"2025-04-29",last_updated:"2025-04-29"}]},{id:"github-models",name:"GitHub Models",models:[{providerId:"github-models",modelId:"core42/jais-30b-chat",name:"JAIS 30b Chat",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:8192,output:2048},modalities:{input:["text"],output:["text"]},knowledge:"2023-03",release_date:"2023-08-30",last_updated:"2023-08-30"},{providerId:"github-models",modelId:"xai/grok-3",name:"Grok 3",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2024-12-09",last_updated:"2024-12-09"},{providerId:"github-models",modelId:"xai/grok-3-mini",name:"Grok 3 Mini",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2024-12-09",last_updated:"2024-12-09"},{providerId:"github-models",modelId:"cohere/cohere-command-r-08-2024",name:"Cohere Command R 08-2024",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-03",release_date:"2024-08-01",last_updated:"2024-08-01"},{providerId:"github-models",modelId:"cohere/cohere-command-a",name:"Cohere Command A",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-03",release_date:"2024-11-01",last_updated:"2024-11-01"},{providerId:"github-models",modelId:"cohere/cohere-command-r-plus-08-2024",name:"Cohere Command R+ 08-2024",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-03",release_date:"2024-08-01",last_updated:"2024-08-01"},{providerId:"github-models",modelId:"cohere/cohere-command-r",name:"Cohere Command R",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-03",release_date:"2024-03-11",last_updated:"2024-08-01"},{providerId:"github-models",modelId:"cohere/cohere-command-r-plus",name:"Cohere Command R+",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-03",release_date:"2024-04-04",last_updated:"2024-08-01"},{providerId:"github-models",modelId:"deepseek/deepseek-r1-0528",name:"DeepSeek-R1-0528",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:65536,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-06",release_date:"2025-05-28",last_updated:"2025-05-28"},{providerId:"github-models",modelId:"deepseek/deepseek-r1",name:"DeepSeek-R1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:65536,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-06",release_date:"2025-01-20",last_updated:"2025-01-20"},{providerId:"github-models",modelId:"deepseek/deepseek-v3-0324",name:"DeepSeek-V3-0324",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-06",release_date:"2025-03-24",last_updated:"2025-03-24"},{providerId:"github-models",modelId:"mistral-ai/mistral-medium-2505",name:"Mistral Medium 3 (25.05)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09",release_date:"2025-05-01",last_updated:"2025-05-01"},{providerId:"github-models",modelId:"mistral-ai/ministral-3b",name:"Ministral 3B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-03",release_date:"2024-10-22",last_updated:"2024-10-22"},{providerId:"github-models",modelId:"mistral-ai/mistral-nemo",name:"Mistral Nemo",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-03",release_date:"2024-07-18",last_updated:"2024-07-18"},{providerId:"github-models",modelId:"mistral-ai/mistral-large-2411",name:"Mistral Large 24.11",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2024-09",release_date:"2024-11-01",last_updated:"2024-11-01"},{providerId:"github-models",modelId:"mistral-ai/codestral-2501",name:"Codestral 25.01",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:32000,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-03",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"github-models",modelId:"mistral-ai/mistral-small-2503",name:"Mistral Small 3.1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09",release_date:"2025-03-01",last_updated:"2025-03-01"},{providerId:"github-models",modelId:"microsoft/phi-3-medium-128k-instruct",name:"Phi-3-medium instruct (128k)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-04-23",last_updated:"2024-04-23"},{providerId:"github-models",modelId:"microsoft/phi-3-mini-4k-instruct",name:"Phi-3-mini instruct (4k)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:4096,output:1024},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-04-23",last_updated:"2024-04-23"},{providerId:"github-models",modelId:"microsoft/phi-3-small-128k-instruct",name:"Phi-3-small instruct (128k)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-04-23",last_updated:"2024-04-23"},{providerId:"github-models",modelId:"microsoft/phi-3.5-vision-instruct",name:"Phi-3.5-vision instruct (128k)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-10",release_date:"2024-08-20",last_updated:"2024-08-20"},{providerId:"github-models",modelId:"microsoft/phi-4",name:"Phi-4",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:16000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-12-11",last_updated:"2024-12-11"},{providerId:"github-models",modelId:"microsoft/phi-4-mini-reasoning",name:"Phi-4-mini-reasoning",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-12-11",last_updated:"2024-12-11"},{providerId:"github-models",modelId:"microsoft/phi-3-small-8k-instruct",name:"Phi-3-small instruct (8k)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:8192,output:2048},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-04-23",last_updated:"2024-04-23"},{providerId:"github-models",modelId:"microsoft/phi-3.5-mini-instruct",name:"Phi-3.5-mini instruct (128k)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-08-20",last_updated:"2024-08-20"},{providerId:"github-models",modelId:"microsoft/phi-4-multimodal-instruct",name:"Phi-4-multimodal-instruct",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:4096},modalities:{input:["text","image","audio"],output:["text"]},knowledge:"2023-10",release_date:"2024-12-11",last_updated:"2024-12-11"},{providerId:"github-models",modelId:"microsoft/phi-3-mini-128k-instruct",name:"Phi-3-mini instruct (128k)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-04-23",last_updated:"2024-04-23"},{providerId:"github-models",modelId:"microsoft/phi-3.5-moe-instruct",name:"Phi-3.5-MoE instruct (128k)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-08-20",last_updated:"2024-08-20"},{providerId:"github-models",modelId:"microsoft/phi-4-mini-instruct",name:"Phi-4-mini-instruct",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-12-11",last_updated:"2024-12-11"},{providerId:"github-models",modelId:"microsoft/phi-3-medium-4k-instruct",name:"Phi-3-medium instruct (4k)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:4096,output:1024},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-04-23",last_updated:"2024-04-23"},{providerId:"github-models",modelId:"microsoft/phi-4-reasoning",name:"Phi-4-Reasoning",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-12-11",last_updated:"2024-12-11"},{providerId:"github-models",modelId:"microsoft/mai-ds-r1",name:"MAI-DS-R1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:65536,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-06",release_date:"2025-01-20",last_updated:"2025-01-20"},{providerId:"github-models",modelId:"openai/gpt-4.1-nano",name:"GPT-4.1-nano",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2025-04-14",last_updated:"2025-04-14"},{providerId:"github-models",modelId:"openai/gpt-4.1-mini",name:"GPT-4.1-mini",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2025-04-14",last_updated:"2025-04-14"},{providerId:"github-models",modelId:"openai/o1-preview",name:"OpenAI o1-preview",attachment:!1,reasoning:!0,tool_call:!1,temperature:!1,cost:{input:0,output:0},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-09-12",last_updated:"2024-09-12"},{providerId:"github-models",modelId:"openai/o3-mini",name:"OpenAI o3-mini",attachment:!1,reasoning:!0,tool_call:!1,temperature:!1,cost:{input:0,output:0},limit:{context:200000,output:1e5},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2025-01-31",last_updated:"2025-01-31"},{providerId:"github-models",modelId:"openai/gpt-4o",name:"GPT-4o",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text","image","audio"],output:["text"]},knowledge:"2023-10",release_date:"2024-05-13",last_updated:"2024-05-13"},{providerId:"github-models",modelId:"openai/gpt-4.1",name:"GPT-4.1",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2025-04-14",last_updated:"2025-04-14"},{providerId:"github-models",modelId:"openai/o4-mini",name:"OpenAI o4-mini",attachment:!1,reasoning:!0,tool_call:!1,temperature:!1,cost:{input:0,output:0},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2025-01-31",last_updated:"2025-01-31"},{providerId:"github-models",modelId:"openai/o1",name:"OpenAI o1",attachment:!1,reasoning:!0,tool_call:!1,temperature:!1,cost:{input:0,output:0},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-10",release_date:"2024-09-12",last_updated:"2024-12-17"},{providerId:"github-models",modelId:"openai/o1-mini",name:"OpenAI o1-mini",attachment:!1,reasoning:!0,tool_call:!1,temperature:!1,cost:{input:0,output:0},limit:{context:128000,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-09-12",last_updated:"2024-12-17"},{providerId:"github-models",modelId:"openai/o3",name:"OpenAI o3",attachment:!1,reasoning:!0,tool_call:!1,temperature:!1,cost:{input:0,output:0},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2025-01-31",last_updated:"2025-01-31"},{providerId:"github-models",modelId:"openai/gpt-4o-mini",name:"GPT-4o mini",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text","image","audio"],output:["text"]},knowledge:"2023-10",release_date:"2024-07-18",last_updated:"2024-07-18"},{providerId:"github-models",modelId:"meta/llama-3.2-11b-vision-instruct",name:"Llama-3.2-11B-Vision-Instruct",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:8192},modalities:{input:["text","image","audio"],output:["text"]},knowledge:"2023-12",release_date:"2024-09-25",last_updated:"2024-09-25"},{providerId:"github-models",modelId:"meta/meta-llama-3.1-405b-instruct",name:"Meta-Llama-3.1-405B-Instruct",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-07-23",last_updated:"2024-07-23"},{providerId:"github-models",modelId:"meta/llama-4-maverick-17b-128e-instruct-fp8",name:"Llama 4 Maverick 17B 128E Instruct FP8",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-12",release_date:"2025-01-31",last_updated:"2025-01-31"},{providerId:"github-models",modelId:"meta/meta-llama-3-70b-instruct",name:"Meta-Llama-3-70B-Instruct",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:8192,output:2048},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-04-18",last_updated:"2024-04-18"},{providerId:"github-models",modelId:"meta/meta-llama-3.1-70b-instruct",name:"Meta-Llama-3.1-70B-Instruct",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-07-23",last_updated:"2024-07-23"},{providerId:"github-models",modelId:"meta/llama-3.3-70b-instruct",name:"Llama-3.3-70B-Instruct",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-12-06",last_updated:"2024-12-06"},{providerId:"github-models",modelId:"meta/llama-3.2-90b-vision-instruct",name:"Llama-3.2-90B-Vision-Instruct",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:8192},modalities:{input:["text","image","audio"],output:["text"]},knowledge:"2023-12",release_date:"2024-09-25",last_updated:"2024-09-25"},{providerId:"github-models",modelId:"meta/meta-llama-3-8b-instruct",name:"Meta-Llama-3-8B-Instruct",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:8192,output:2048},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-04-18",last_updated:"2024-04-18"},{providerId:"github-models",modelId:"meta/llama-4-scout-17b-16e-instruct",name:"Llama 4 Scout 17B 16E Instruct",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-12",release_date:"2025-01-31",last_updated:"2025-01-31"},{providerId:"github-models",modelId:"meta/meta-llama-3.1-8b-instruct",name:"Meta-Llama-3.1-8B-Instruct",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-07-23",last_updated:"2024-07-23"},{providerId:"github-models",modelId:"ai21-labs/ai21-jamba-1.5-large",name:"AI21 Jamba 1.5 Large",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:256000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-03",release_date:"2024-08-29",last_updated:"2024-08-29"},{providerId:"github-models",modelId:"ai21-labs/ai21-jamba-1.5-mini",name:"AI21 Jamba 1.5 Mini",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:256000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-03",release_date:"2024-08-29",last_updated:"2024-08-29"}]},{id:"togetherai",name:"Together AI",models:[{providerId:"togetherai",modelId:"moonshotai/Kimi-K2-Instruct",name:"Kimi K2 Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:1,output:3},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-07-14",last_updated:"2025-07-14"},{providerId:"togetherai",modelId:"moonshotai/Kimi-K2-Thinking",name:"Kimi K2 Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.2,output:4},limit:{context:262144,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2025-07",release_date:"2025-11-06",last_updated:"2025-11-06"},{providerId:"togetherai",modelId:"essentialai/Rnj-1-Instruct",name:"Rnj-1 Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.15},limit:{context:32768,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-12-05",last_updated:"2025-12-05"},{providerId:"togetherai",modelId:"openai/gpt-oss-120b",name:"GPT OSS 120B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.6},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2025-08",release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"togetherai",modelId:"meta-llama/Llama-3.3-70B-Instruct-Turbo",name:"Llama 3.3 70B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.88,output:0.88},limit:{context:131072,output:66536},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-12-06",last_updated:"2024-12-06"},{providerId:"togetherai",modelId:"Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8",name:"Qwen3 Coder 480B A35B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:2},limit:{context:262144,output:66536},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-23",last_updated:"2025-07-23"},{providerId:"togetherai",modelId:"zai-org/GLM-4.6",name:"GLM 4.6",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.2},limit:{context:200000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2025-09",release_date:"2025-09-30",last_updated:"2025-09-30"},{providerId:"togetherai",modelId:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:3,output:7},limit:{context:163839,output:12288},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2024-12-26",last_updated:"2025-03-24"},{providerId:"togetherai",modelId:"deepseek-ai/DeepSeek-V3",name:"DeepSeek V3",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.25,output:1.25},limit:{context:131072,output:12288},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2025-01-20",last_updated:"2025-05-29"},{providerId:"togetherai",modelId:"deepseek-ai/DeepSeek-V3-1",name:"DeepSeek V3.1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:1.7},limit:{context:131072,output:12288},modalities:{input:["text"],output:["text"]},knowledge:"2025-08",release_date:"2025-08-21",last_updated:"2025-08-21"}]},{id:"azure",name:"Azure",models:[{providerId:"azure",modelId:"gpt-4.1-nano",name:"GPT-4.1 nano",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.4,cache_read:0.03},limit:{context:1047576,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05",release_date:"2025-04-14",last_updated:"2025-04-14"},{providerId:"azure",modelId:"text-embedding-3-small",name:"text-embedding-3-small",attachment:!1,reasoning:!1,tool_call:!1,cost:{input:0.02,output:0},limit:{context:8191,output:1536},modalities:{input:["text"],output:["text"]},release_date:"2024-01-25",last_updated:"2024-01-25"},{providerId:"azure",modelId:"grok-4-fast-non-reasoning",name:"Grok 4 Fast (Non-Reasoning)",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.5,cache_read:0.05},limit:{context:2000000,output:30000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-07",release_date:"2025-09-19",last_updated:"2025-09-19"},{providerId:"azure",modelId:"deepseek-r1-0528",name:"DeepSeek-R1-0528",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.35,output:5.4},limit:{context:163840,output:163840},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2025-05-28",last_updated:"2025-05-28"},{providerId:"azure",modelId:"grok-4-fast-reasoning",name:"Grok 4 Fast (Reasoning)",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.5,cache_read:0.05},limit:{context:2000000,output:30000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-07",release_date:"2025-09-19",last_updated:"2025-09-19"},{providerId:"azure",modelId:"phi-3-medium-128k-instruct",name:"Phi-3-medium-instruct (128k)",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.17,output:0.68},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-04-23",last_updated:"2024-04-23"},{providerId:"azure",modelId:"gpt-4",name:"GPT-4",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:60,output:120},limit:{context:8192,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2023-11",release_date:"2023-03-14",last_updated:"2023-03-14"},{providerId:"azure",modelId:"claude-opus-4-1",name:"Claude Opus 4.1",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:15,output:75,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:32000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-11-18",last_updated:"2025-11-18"},{providerId:"azure",modelId:"gpt-5.2-chat",name:"GPT-5.2 Chat",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.75,output:14,cache_read:0.175},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-08-31",release_date:"2025-12-11",last_updated:"2025-12-11"},{providerId:"azure",modelId:"llama-3.2-11b-vision-instruct",name:"Llama-3.2-11B-Vision-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.37,output:0.37},limit:{context:128000,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-12",release_date:"2024-09-25",last_updated:"2024-09-25"},{providerId:"azure",modelId:"cohere-embed-v-4-0",name:"Embed v4",attachment:!0,reasoning:!1,tool_call:!1,temperature:!1,cost:{input:0.12,output:0},limit:{context:128000,output:1536},modalities:{input:["text","image"],output:["text"]},release_date:"2025-04-15",last_updated:"2025-04-15"},{providerId:"azure",modelId:"cohere-command-r-08-2024",name:"Command R",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.6},limit:{context:128000,output:4000},modalities:{input:["text"],output:["text"]},knowledge:"2024-06-01",release_date:"2024-08-30",last_updated:"2024-08-30"},{providerId:"azure",modelId:"grok-4",name:"Grok 4",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.75},limit:{context:256000,output:64000},modalities:{input:["text"],output:["text"]},knowledge:"2025-07",release_date:"2025-07-09",last_updated:"2025-07-09"},{providerId:"azure",modelId:"cohere-embed-v3-multilingual",name:"Embed v3 Multilingual",attachment:!1,reasoning:!1,tool_call:!1,temperature:!1,cost:{input:0.1,output:0},limit:{context:512,output:1024},modalities:{input:["text"],output:["text"]},release_date:"2023-11-07",last_updated:"2023-11-07"},{providerId:"azure",modelId:"phi-4-mini",name:"Phi-4-mini",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.075,output:0.3},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-12-11",last_updated:"2024-12-11"},{providerId:"azure",modelId:"gpt-4-32k",name:"GPT-4 32K",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:60,output:120},limit:{context:32768,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2023-11",release_date:"2023-03-14",last_updated:"2023-03-14"},{providerId:"azure",modelId:"meta-llama-3.1-405b-instruct",name:"Meta-Llama-3.1-405B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:5.33,output:16},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-07-23",last_updated:"2024-07-23"},{providerId:"azure",modelId:"deepseek-r1",name:"DeepSeek-R1",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:1.35,output:5.4},limit:{context:163840,output:163840},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2025-01-20",last_updated:"2025-01-20"},{providerId:"azure",modelId:"grok-code-fast-1",name:"Grok Code Fast 1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:1.5,cache_read:0.02},limit:{context:256000,output:1e4},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2025-08-28",last_updated:"2025-08-28"},{providerId:"azure",modelId:"gpt-5.1-codex",name:"GPT-5.1 Codex",attachment:!1,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.25,output:10,cache_read:0.125},limit:{context:400000,output:128000},modalities:{input:["text","image","audio"],output:["text","image","audio"]},knowledge:"2024-09-30",release_date:"2025-11-14",last_updated:"2025-11-14"},{providerId:"azure",modelId:"phi-3-mini-4k-instruct",name:"Phi-3-mini-instruct (4k)",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.13,output:0.52},limit:{context:4096,output:1024},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-04-23",last_updated:"2024-04-23"},{providerId:"azure",modelId:"claude-haiku-4-5",name:"Claude Haiku 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1,output:5,cache_read:0.1,cache_write:1.25},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-02-31",release_date:"2025-11-18",last_updated:"2025-11-18"},{providerId:"azure",modelId:"deepseek-v3.2-speciale",name:"DeepSeek-V3.2-Speciale",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:0.28,output:0.42},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2025-12-01",last_updated:"2025-12-01"},{providerId:"azure",modelId:"mistral-medium-2505",name:"Mistral Medium 3",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.4,output:2},limit:{context:128000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-05",release_date:"2025-05-07",last_updated:"2025-05-07"},{providerId:"azure",modelId:"claude-opus-4-5",name:"Claude Opus 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:5,output:25,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-11-24",last_updated:"2025-08-01"},{providerId:"azure",modelId:"phi-3-small-128k-instruct",name:"Phi-3-small-instruct (128k)",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.15,output:0.6},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-04-23",last_updated:"2024-04-23"},{providerId:"azure",modelId:"cohere-command-a",name:"Command A",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:2.5,output:10},limit:{context:256000,output:8000},modalities:{input:["text"],output:["text"]},knowledge:"2024-06-01",release_date:"2025-03-13",last_updated:"2025-03-13"},{providerId:"azure",modelId:"cohere-command-r-plus-08-2024",name:"Command R+",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:2.5,output:10},limit:{context:128000,output:4000},modalities:{input:["text"],output:["text"]},knowledge:"2024-06-01",release_date:"2024-08-30",last_updated:"2024-08-30"},{providerId:"azure",modelId:"llama-4-maverick-17b-128e-instruct-fp8",name:"Llama 4 Maverick 17B 128E Instruct FP8",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.25,output:1},limit:{context:128000,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-08",release_date:"2025-04-05",last_updated:"2025-04-05"},{providerId:"azure",modelId:"gpt-4.1-mini",name:"GPT-4.1 mini",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.4,output:1.6,cache_read:0.1},limit:{context:1047576,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05",release_date:"2025-04-14",last_updated:"2025-04-14"},{providerId:"azure",modelId:"gpt-5-chat",name:"GPT-5 Chat",attachment:!0,reasoning:!0,tool_call:!1,temperature:!1,cost:{input:1.25,output:10,cache_read:0.13},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-10-24",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"azure",modelId:"deepseek-v3.1",name:"DeepSeek-V3.1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.56,output:1.68},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2025-08-21",last_updated:"2025-08-21"},{providerId:"azure",modelId:"phi-4",name:"Phi-4",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.125,output:0.5},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-12-11",last_updated:"2024-12-11"},{providerId:"azure",modelId:"phi-4-mini-reasoning",name:"Phi-4-mini-reasoning",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.075,output:0.3},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-12-11",last_updated:"2024-12-11"},{providerId:"azure",modelId:"claude-sonnet-4-5",name:"Claude Sonnet 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-07-31",release_date:"2025-11-18",last_updated:"2025-11-18"},{providerId:"azure",modelId:"gpt-3.5-turbo-0125",name:"GPT-3.5 Turbo 0125",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.5,output:1.5},limit:{context:16384,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2021-08",release_date:"2024-01-25",last_updated:"2024-01-25"},{providerId:"azure",modelId:"grok-3",name:"Grok 3",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.75},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-11",release_date:"2025-02-17",last_updated:"2025-02-17"},{providerId:"azure",modelId:"text-embedding-3-large",name:"text-embedding-3-large",attachment:!1,reasoning:!1,tool_call:!1,cost:{input:0.13,output:0},limit:{context:8191,output:3072},modalities:{input:["text"],output:["text"]},release_date:"2024-01-25",last_updated:"2024-01-25"},{providerId:"azure",modelId:"meta-llama-3-70b-instruct",name:"Meta-Llama-3-70B-Instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:2.68,output:3.54},limit:{context:8192,output:2048},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-04-18",last_updated:"2024-04-18"},{providerId:"azure",modelId:"deepseek-v3-0324",name:"DeepSeek-V3-0324",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:1.14,output:4.56},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2025-03-24",last_updated:"2025-03-24"},{providerId:"azure",modelId:"phi-3-small-8k-instruct",name:"Phi-3-small-instruct (8k)",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.15,output:0.6},limit:{context:8192,output:2048},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-04-23",last_updated:"2024-04-23"},{providerId:"azure",modelId:"meta-llama-3.1-70b-instruct",name:"Meta-Llama-3.1-70B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2.68,output:3.54},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-07-23",last_updated:"2024-07-23"},{providerId:"azure",modelId:"gpt-4-turbo",name:"GPT-4 Turbo",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:10,output:30},limit:{context:128000,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-11",release_date:"2023-11-06",last_updated:"2024-04-09"},{providerId:"azure",modelId:"gpt-3.5-turbo-0613",name:"GPT-3.5 Turbo 0613",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:3,output:4},limit:{context:16384,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2021-08",release_date:"2023-06-13",last_updated:"2023-06-13"},{providerId:"azure",modelId:"phi-3.5-mini-instruct",name:"Phi-3.5-mini-instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.13,output:0.52},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-08-20",last_updated:"2024-08-20"},{providerId:"azure",modelId:"o1-preview",name:"o1-preview",attachment:!1,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:16.5,output:66,cache_read:8.25},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2023-09",release_date:"2024-09-12",last_updated:"2024-09-12"},{providerId:"azure",modelId:"llama-3.3-70b-instruct",name:"Llama-3.3-70B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.71,output:0.71},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-12-06",last_updated:"2024-12-06"},{providerId:"azure",modelId:"gpt-5.1-codex-mini",name:"GPT-5.1 Codex Mini",attachment:!1,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0.25,output:2,cache_read:0.025},limit:{context:400000,output:128000},modalities:{input:["text","image","audio"],output:["text","image","audio"]},knowledge:"2024-09-30",release_date:"2025-11-14",last_updated:"2025-11-14"},{providerId:"azure",modelId:"kimi-k2-thinking",name:"Kimi K2 Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.5,cache_read:0.15},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2024-08",release_date:"2025-11-06",last_updated:"2025-12-02"},{providerId:"azure",modelId:"model-router",name:"Model Router",attachment:!0,reasoning:!1,tool_call:!0,cost:{input:0.14,output:0},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},release_date:"2025-05-19",last_updated:"2025-11-18"},{providerId:"azure",modelId:"o3-mini",name:"o3-mini",attachment:!1,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.1,output:4.4,cache_read:0.55},limit:{context:200000,output:1e5},modalities:{input:["text"],output:["text"]},knowledge:"2024-05",release_date:"2024-12-20",last_updated:"2025-01-29"},{providerId:"azure",modelId:"gpt-5.1",name:"GPT-5.1",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.25,output:10,cache_read:0.125},limit:{context:272000,output:128000},modalities:{input:["text","image","audio"],output:["text","image","audio"]},knowledge:"2024-09-30",release_date:"2025-11-14",last_updated:"2025-11-14"},{providerId:"azure",modelId:"gpt-5-nano",name:"GPT-5 Nano",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0.05,output:0.4,cache_read:0.01},limit:{context:272000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05-30",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"azure",modelId:"gpt-5-codex",name:"GPT-5-Codex",attachment:!1,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.25,output:10,cache_read:0.13},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-09-15",last_updated:"2025-09-15"},{providerId:"azure",modelId:"llama-3.2-90b-vision-instruct",name:"Llama-3.2-90B-Vision-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2.04,output:2.04},limit:{context:128000,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-12",release_date:"2024-09-25",last_updated:"2024-09-25"},{providerId:"azure",modelId:"phi-3-mini-128k-instruct",name:"Phi-3-mini-instruct (128k)",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.13,output:0.52},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-04-23",last_updated:"2024-04-23"},{providerId:"azure",modelId:"gpt-4o",name:"GPT-4o",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2.5,output:10,cache_read:1.25},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-09",release_date:"2024-05-13",last_updated:"2024-05-13"},{providerId:"azure",modelId:"gpt-3.5-turbo-0301",name:"GPT-3.5 Turbo 0301",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:1.5,output:2},limit:{context:4096,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2021-08",release_date:"2023-03-01",last_updated:"2023-03-01"},{providerId:"azure",modelId:"ministral-3b",name:"Ministral 3B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.04,output:0.04},limit:{context:128000,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-03",release_date:"2024-10-22",last_updated:"2024-10-22"},{providerId:"azure",modelId:"gpt-4.1",name:"GPT-4.1",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:8,cache_read:0.5},limit:{context:1047576,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05",release_date:"2025-04-14",last_updated:"2025-04-14"},{providerId:"azure",modelId:"o4-mini",name:"o4-mini",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.1,output:4.4,cache_read:0.28},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05",release_date:"2025-04-16",last_updated:"2025-04-16"},{providerId:"azure",modelId:"phi-4-multimodal",name:"Phi-4-multimodal",attachment:!0,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.08,output:0.32},limit:{context:128000,output:4096},modalities:{input:["text","image","audio"],output:["text"]},knowledge:"2023-10",release_date:"2024-12-11",last_updated:"2024-12-11"},{providerId:"azure",modelId:"meta-llama-3-8b-instruct",name:"Meta-Llama-3-8B-Instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.3,output:0.61},limit:{context:8192,output:2048},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-04-18",last_updated:"2024-04-18"},{providerId:"azure",modelId:"o1",name:"o1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:15,output:60,cache_read:7.5},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-09",release_date:"2024-12-05",last_updated:"2024-12-05"},{providerId:"azure",modelId:"grok-3-mini",name:"Grok 3 Mini",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:0.5,cache_read:0.075},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-11",release_date:"2025-02-17",last_updated:"2025-02-17"},{providerId:"azure",modelId:"gpt-5.1-chat",name:"GPT-5.1 Chat",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.25,output:10,cache_read:0.125},limit:{context:128000,output:16384},modalities:{input:["text","image","audio"],output:["text","image","audio"]},knowledge:"2024-09-30",release_date:"2025-11-14",last_updated:"2025-11-14"},{providerId:"azure",modelId:"phi-3.5-moe-instruct",name:"Phi-3.5-MoE-instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.16,output:0.64},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-08-20",last_updated:"2024-08-20"},{providerId:"azure",modelId:"gpt-5-mini",name:"GPT-5 Mini",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0.25,output:2,cache_read:0.03},limit:{context:272000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05-30",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"azure",modelId:"o1-mini",name:"o1-mini",attachment:!1,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.1,output:4.4,cache_read:0.55},limit:{context:128000,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2023-09",release_date:"2024-09-12",last_updated:"2024-09-12"},{providerId:"azure",modelId:"llama-4-scout-17b-16e-instruct",name:"Llama 4 Scout 17B 16E Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.78},limit:{context:128000,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-08",release_date:"2025-04-05",last_updated:"2025-04-05"},{providerId:"azure",modelId:"cohere-embed-v3-english",name:"Embed v3 English",attachment:!1,reasoning:!1,tool_call:!1,temperature:!1,cost:{input:0.1,output:0},limit:{context:512,output:1024},modalities:{input:["text"],output:["text"]},release_date:"2023-11-07",last_updated:"2023-11-07"},{providerId:"azure",modelId:"text-embedding-ada-002",name:"text-embedding-ada-002",attachment:!1,reasoning:!1,tool_call:!1,cost:{input:0.1,output:0},limit:{context:8192,output:1536},modalities:{input:["text"],output:["text"]},release_date:"2022-12-15",last_updated:"2022-12-15"},{providerId:"azure",modelId:"meta-llama-3.1-8b-instruct",name:"Meta-Llama-3.1-8B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.3,output:0.61},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-07-23",last_updated:"2024-07-23"},{providerId:"azure",modelId:"gpt-5.1-codex-max",name:"GPT-5.1 Codex Max",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.25,output:10,cache_read:0.125},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-11-13",last_updated:"2025-11-13"},{providerId:"azure",modelId:"gpt-3.5-turbo-instruct",name:"GPT-3.5 Turbo Instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:1.5,output:2},limit:{context:4096,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2021-08",release_date:"2023-09-21",last_updated:"2023-09-21"},{providerId:"azure",modelId:"mistral-nemo",name:"Mistral Nemo",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.15},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2024-07-18",last_updated:"2024-07-18"},{providerId:"azure",modelId:"o3",name:"o3",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:2,output:8,cache_read:0.5},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05",release_date:"2025-04-16",last_updated:"2025-04-16"},{providerId:"azure",modelId:"codex-mini",name:"Codex Mini",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.5,output:6,cache_read:0.375},limit:{context:200000,output:1e5},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2025-05-16",last_updated:"2025-05-16"},{providerId:"azure",modelId:"phi-3-medium-4k-instruct",name:"Phi-3-medium-instruct (4k)",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.17,output:0.68},limit:{context:4096,output:1024},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-04-23",last_updated:"2024-04-23"},{providerId:"azure",modelId:"phi-4-reasoning",name:"Phi-4-reasoning",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:0.125,output:0.5},limit:{context:32000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-12-11",last_updated:"2024-12-11"},{providerId:"azure",modelId:"gpt-4-turbo-vision",name:"GPT-4 Turbo Vision",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:10,output:30},limit:{context:128000,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-11",release_date:"2023-11-06",last_updated:"2024-04-09"},{providerId:"azure",modelId:"phi-4-reasoning-plus",name:"Phi-4-reasoning-plus",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:0.125,output:0.5},limit:{context:32000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-12-11",last_updated:"2024-12-11"},{providerId:"azure",modelId:"gpt-4o-mini",name:"GPT-4o mini",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.6,cache_read:0.08},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-09",release_date:"2024-07-18",last_updated:"2024-07-18"},{providerId:"azure",modelId:"gpt-5",name:"GPT-5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.25,output:10,cache_read:0.13},limit:{context:272000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"azure",modelId:"mai-ds-r1",name:"MAI-DS-R1",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:1.35,output:5.4},limit:{context:128000,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-06",release_date:"2025-01-20",last_updated:"2025-01-20"},{providerId:"azure",modelId:"deepseek-v3.2",name:"DeepSeek-V3.2",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.28,output:0.42,cache_read:0.028},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2025-12-01",last_updated:"2025-12-01"},{providerId:"azure",modelId:"gpt-5-pro",name:"GPT-5 Pro",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:15,output:120},limit:{context:400000,output:272000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-10-06",last_updated:"2025-10-06"},{providerId:"azure",modelId:"mistral-large-2411",name:"Mistral Large 24.11",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:6},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2024-09",release_date:"2024-11-01",last_updated:"2024-11-01"},{providerId:"azure",modelId:"gpt-5.2",name:"GPT-5.2",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.75,output:14,cache_read:0.125},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-08-31",release_date:"2025-12-11",last_updated:"2025-12-11"},{providerId:"azure",modelId:"codestral-2501",name:"Codestral 25.01",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.3,output:0.9},limit:{context:256000,output:256000},modalities:{input:["text"],output:["text"]},knowledge:"2024-03",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"azure",modelId:"mistral-small-2503",name:"Mistral Small 3.1",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.3},limit:{context:128000,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09",release_date:"2025-03-01",last_updated:"2025-03-01"},{providerId:"azure",modelId:"gpt-3.5-turbo-1106",name:"GPT-3.5 Turbo 1106",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:1,output:2},limit:{context:16384,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2021-08",release_date:"2023-11-06",last_updated:"2023-11-06"}]},{id:"baseten",name:"Baseten",models:[{providerId:"baseten",modelId:"moonshotai/Kimi-K2-Instruct-0905",name:"Kimi K2 Instruct 0905",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.5},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2025-08",release_date:"2025-09-05",last_updated:"2025-09-05"},{providerId:"baseten",modelId:"moonshotai/Kimi-K2-Thinking",name:"Kimi K2 Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.5},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2024-08",release_date:"2025-11-06",last_updated:"2025-11-06"},{providerId:"baseten",modelId:"Qwen/Qwen3-Coder-480B-A35B-Instruct",name:"Qwen3 Coder 480B A35B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.38,output:1.53},limit:{context:262144,output:66536},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-23",last_updated:"2025-07-23"},{providerId:"baseten",modelId:"zai-org/GLM-4.6",name:"GLM 4.6",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.2},limit:{context:200000,output:200000},modalities:{input:["text"],output:["text"]},knowledge:"2025-08-31",release_date:"2025-09-16",last_updated:"2025-09-16"},{providerId:"baseten",modelId:"deepseek-ai/DeepSeek-V3.2",name:"DeepSeek V3.2",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.3,output:0.45},limit:{context:163800,output:131100},modalities:{input:["text"],output:["text"]},knowledge:"2025-10",release_date:"2025-12-01",last_updated:"2025-12-01"}]},{id:"siliconflow",name:"SiliconFlow",models:[{providerId:"siliconflow",modelId:"deepseek-ai-deepseek-r1-distill-qwen-7b",name:"deepseek-ai/DeepSeek-R1-Distill-Qwen-7B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.05,output:0.05},limit:{context:33000,output:16000},modalities:{input:["text"],output:["text"]},release_date:"2025-01-20",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"z-ai-glm-4.5-air",name:"z-ai/GLM-4.5-Air",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.14,output:0.86},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-07-28",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen2.5-72b-instruct-128k",name:"Qwen/Qwen2.5-72B-Instruct-128K",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.59,output:0.59},limit:{context:131000,output:4000},modalities:{input:["text"],output:["text"]},release_date:"2024-09-18",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"deepseek-ai-deepseek-vl2",name:"deepseek-ai/deepseek-vl2",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.15},limit:{context:4000,output:4000},modalities:{input:["text","image"],output:["text"]},release_date:"2024-12-13",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"moonshotai-kimi-dev-72b",name:"moonshotai/Kimi-Dev-72B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.29,output:1.15},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-06-19",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen2.5-coder-32b-instruct",name:"Qwen/Qwen2.5-Coder-32B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.18,output:0.18},limit:{context:33000,output:4000},modalities:{input:["text"],output:["text"]},release_date:"2024-11-11",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen3-omni-30b-a3b-captioner",name:"Qwen/Qwen3-Omni-30B-A3B-Captioner",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.4},limit:{context:66000,output:66000},modalities:{input:["audio"],output:["text"]},release_date:"2025-10-04",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen3-vl-235b-a22b-thinking",name:"Qwen/Qwen3-VL-235B-A22B-Thinking",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.45,output:3.5},limit:{context:262000,output:262000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-10-04",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"thudm-glm-z1-9b-0414",name:"THUDM/GLM-Z1-9B-0414",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.086,output:0.086},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-04-18",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen3-vl-30b-a3b-thinking",name:"Qwen/Qwen3-VL-30B-A3B-Thinking",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.29,output:1},limit:{context:262000,output:262000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-10-11",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"deepseek-ai-deepseek-v3.2-exp",name:"deepseek-ai/DeepSeek-V3.2-Exp",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.27,output:0.41},limit:{context:164000,output:164000},modalities:{input:["text"],output:["text"]},release_date:"2025-10-10",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen2.5-vl-32b-instruct",name:"Qwen/Qwen2.5-VL-32B-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.27,output:0.27},limit:{context:131000,output:131000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-03-24",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen3-235b-a22b-thinking-2507",name:"Qwen/Qwen3-235B-A22B-Thinking-2507",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.13,output:0.6},limit:{context:262000,output:262000},modalities:{input:["text"],output:["text"]},release_date:"2025-07-28",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen3-vl-32b-instruct",name:"Qwen/Qwen3-VL-32B-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.6},limit:{context:262000,output:262000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-10-21",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"inclusionai-ling-flash-2.0",name:"inclusionAI/Ling-flash-2.0",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.14,output:0.57},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-09-18",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"moonshotai-kimi-k2-instruct",name:"moonshotai/Kimi-K2-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.58,output:2.29},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-07-13",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"inclusionai-ling-mini-2.0",name:"inclusionAI/Ling-mini-2.0",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.07,output:0.28},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-09-10",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen3-coder-480b-a35b-instruct",name:"Qwen/Qwen3-Coder-480B-A35B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.25,output:1},limit:{context:262000,output:262000},modalities:{input:["text"],output:["text"]},release_date:"2025-07-31",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen3-omni-30b-a3b-instruct",name:"Qwen/Qwen3-Omni-30B-A3B-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.4},limit:{context:66000,output:66000},modalities:{input:["text","image","audio"],output:["text"]},release_date:"2025-10-04",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"moonshotai-kimi-k2-instruct-0905",name:"moonshotai/Kimi-K2-Instruct-0905",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.4,output:2},limit:{context:262000,output:262000},modalities:{input:["text"],output:["text"]},release_date:"2025-09-08",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen3-30b-a3b-thinking-2507",name:"Qwen/Qwen3-30B-A3B-Thinking-2507",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.09,output:0.3},limit:{context:262000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-07-31",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen3-14b",name:"Qwen/Qwen3-14B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.07,output:0.28},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-04-30",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"deepseek-ai-deepseek-r1",name:"deepseek-ai/DeepSeek-R1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.5,output:2.18},limit:{context:164000,output:164000},modalities:{input:["text"],output:["text"]},release_date:"2025-05-28",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"deepseek-ai-deepseek-v3.1",name:"deepseek-ai/DeepSeek-V3.1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.27,output:1},limit:{context:164000,output:164000},modalities:{input:["text"],output:["text"]},release_date:"2025-08-25",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"z-ai-glm-4.5",name:"z-ai/GLM-4.5",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.4,output:2},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-07-28",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen3-30b-a3b-instruct-2507",name:"Qwen/Qwen3-30B-A3B-Instruct-2507",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.09,output:0.3},limit:{context:262000,output:262000},modalities:{input:["text"],output:["text"]},release_date:"2025-07-30",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"zai-org-glm-4.5v",name:"zai-org/GLM-4.5V",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.14,output:0.86},limit:{context:66000,output:66000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-08-13",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"inclusionai-ring-flash-2.0",name:"inclusionAI/Ring-flash-2.0",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.14,output:0.57},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-09-29",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"thudm-glm-z1-32b-0414",name:"THUDM/GLM-Z1-32B-0414",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.14,output:0.57},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-04-18",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen2.5-vl-72b-instruct",name:"Qwen/Qwen2.5-VL-72B-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.59,output:0.59},limit:{context:131000,output:4000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-01-28",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen3-vl-32b-thinking",name:"Qwen/Qwen3-VL-32B-Thinking",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:1.5},limit:{context:262000,output:262000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-10-21",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"tencent-hunyuan-mt-7b",name:"tencent/Hunyuan-MT-7B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:33000,output:33000},modalities:{input:["text"],output:["text"]},release_date:"2025-09-18",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen3-30b-a3b",name:"Qwen/Qwen3-30B-A3B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.09,output:0.45},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-04-30",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"openai-gpt-oss-120b",name:"openai/gpt-oss-120b",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.05,output:0.45},limit:{context:131000,output:8000},modalities:{input:["text"],output:["text"]},release_date:"2025-08-13",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"minimaxai-minimax-m1-80k",name:"MiniMaxAI/MiniMax-M1-80k",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.55,output:2.2},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-06-17",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"deepseek-ai-deepseek-v3.1-terminus",name:"deepseek-ai/DeepSeek-V3.1-Terminus",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.27,output:1},limit:{context:164000,output:164000},modalities:{input:["text"],output:["text"]},release_date:"2025-09-29",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"zai-org-glm-4.5-air",name:"zai-org/GLM-4.5-Air",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.14,output:0.86},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-07-28",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"thudm-glm-4-9b-0414",name:"THUDM/GLM-4-9B-0414",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.086,output:0.086},limit:{context:33000,output:33000},modalities:{input:["text"],output:["text"]},release_date:"2025-04-18",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen3-coder-30b-a3b-instruct",name:"Qwen/Qwen3-Coder-30B-A3B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.07,output:0.28},limit:{context:262000,output:262000},modalities:{input:["text"],output:["text"]},release_date:"2025-08-01",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwq-32b",name:"Qwen/QwQ-32B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.58},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-03-06",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"stepfun-ai-step3",name:"stepfun-ai/step3",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.57,output:1.42},limit:{context:66000,output:66000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-08-06",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"thudm-glm-4.1v-9b-thinking",name:"THUDM/GLM-4.1V-9B-Thinking",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.035,output:0.14},limit:{context:66000,output:66000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-07-04",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen3-next-80b-a3b-thinking",name:"Qwen/Qwen3-Next-80B-A3B-Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.14,output:0.57},limit:{context:262000,output:262000},modalities:{input:["text"],output:["text"]},release_date:"2025-09-25",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen3-vl-235b-a22b-instruct",name:"Qwen/Qwen3-VL-235B-A22B-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.3,output:1.5},limit:{context:262000,output:262000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-10-04",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"zai-org-glm-4.5",name:"zai-org/GLM-4.5",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.4,output:2},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-07-28",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"deepseek-ai-deepseek-r1-distill-qwen-14b",name:"deepseek-ai/DeepSeek-R1-Distill-Qwen-14B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.1},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-01-20",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"deepseek-ai-deepseek-v3",name:"deepseek-ai/DeepSeek-V3",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.25,output:1},limit:{context:164000,output:164000},modalities:{input:["text"],output:["text"]},release_date:"2024-12-26",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"openai-gpt-oss-20b",name:"openai/gpt-oss-20b",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.04,output:0.18},limit:{context:131000,output:8000},modalities:{input:["text"],output:["text"]},release_date:"2025-08-13",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen2.5-7b-instruct",name:"Qwen/Qwen2.5-7B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.05,output:0.05},limit:{context:33000,output:4000},modalities:{input:["text"],output:["text"]},release_date:"2024-09-18",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen2.5-32b-instruct",name:"Qwen/Qwen2.5-32B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.18,output:0.18},limit:{context:33000,output:4000},modalities:{input:["text"],output:["text"]},release_date:"2024-09-19",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"minimaxai-minimax-m2",name:"MiniMaxAI/MiniMax-M2",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.3,output:1.2},limit:{context:197000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-10-28",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"bytedance-seed-seed-oss-36b-instruct",name:"ByteDance-Seed/Seed-OSS-36B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.21,output:0.57},limit:{context:262000,output:262000},modalities:{input:["text"],output:["text"]},release_date:"2025-09-04",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen2.5-vl-7b-instruct",name:"Qwen/Qwen2.5-VL-7B-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.05,output:0.05},limit:{context:33000,output:4000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-01-28",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen3-vl-8b-thinking",name:"Qwen/Qwen3-VL-8B-Thinking",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.18,output:2},limit:{context:262000,output:262000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-10-15",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen3-vl-8b-instruct",name:"Qwen/Qwen3-VL-8B-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.18,output:0.68},limit:{context:262000,output:262000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-10-15",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"nex-agi-deepseek-v3.1-nex-n1",name:"nex-agi/DeepSeek-V3.1-Nex-N1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.5,output:2},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-01-01",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen3-8b",name:"Qwen/Qwen3-8B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.06,output:0.06},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-04-30",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen2.5-72b-instruct",name:"Qwen/Qwen2.5-72B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.59,output:0.59},limit:{context:33000,output:4000},modalities:{input:["text"],output:["text"]},release_date:"2024-09-18",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen3-235b-a22b",name:"Qwen/Qwen3-235B-A22B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.35,output:1.42},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-04-30",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"meta-llama-meta-llama-3.1-8b-instruct",name:"meta-llama/Meta-Llama-3.1-8B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.06,output:0.06},limit:{context:33000,output:4000},modalities:{input:["text"],output:["text"]},release_date:"2025-04-23",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen3-235b-a22b-instruct-2507",name:"Qwen/Qwen3-235B-A22B-Instruct-2507",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.09,output:0.6},limit:{context:262000,output:262000},modalities:{input:["text"],output:["text"]},release_date:"2025-07-23",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"baidu-ernie-4.5-300b-a47b",name:"baidu/ERNIE-4.5-300B-A47B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.28,output:1.1},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-07-02",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen3-omni-30b-a3b-thinking",name:"Qwen/Qwen3-Omni-30B-A3B-Thinking",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.4},limit:{context:66000,output:66000},modalities:{input:["text","image","audio"],output:["text"]},release_date:"2025-10-04",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"zai-org-glm-4.6",name:"zai-org/GLM-4.6",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.5,output:1.9},limit:{context:205000,output:205000},modalities:{input:["text"],output:["text"]},release_date:"2025-10-04",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen3-32b",name:"Qwen/Qwen3-32B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.14,output:0.57},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-04-30",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"tencent-hunyuan-a13b-instruct",name:"tencent/Hunyuan-A13B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.14,output:0.57},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-06-30",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"thudm-glm-4-32b-0414",name:"THUDM/GLM-4-32B-0414",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.27,output:0.27},limit:{context:33000,output:33000},modalities:{input:["text"],output:["text"]},release_date:"2025-04-18",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"deepseek-ai-deepseek-r1-distill-qwen-32b",name:"deepseek-ai/DeepSeek-R1-Distill-Qwen-32B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.18,output:0.18},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-01-20",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen3-next-80b-a3b-instruct",name:"Qwen/Qwen3-Next-80B-A3B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.14,output:1.4},limit:{context:262000,output:262000},modalities:{input:["text"],output:["text"]},release_date:"2025-09-18",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen3-vl-30b-a3b-instruct",name:"Qwen/Qwen3-VL-30B-A3B-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.29,output:1},limit:{context:262000,output:262000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-10-05",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"moonshotai-kimi-k2-thinking",name:"moonshotai/Kimi-K2-Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.55,output:2.5},limit:{context:262000,output:262000},modalities:{input:["text"],output:["text"]},release_date:"2025-11-07",last_updated:"2025-11-25"},{providerId:"siliconflow",modelId:"qwen-qwen2.5-14b-instruct",name:"Qwen/Qwen2.5-14B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.1},limit:{context:33000,output:4000},modalities:{input:["text"],output:["text"]},release_date:"2024-09-18",last_updated:"2025-11-25"}]},{id:"helicone",name:"Helicone",models:[{providerId:"helicone",modelId:"gpt-4.1-nano",name:"OpenAI GPT-4.1 Nano",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.09999999999999999,output:0.39999999999999997,cache_read:0.024999999999999998},limit:{context:1047576,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-04",release_date:"2025-04-14",last_updated:"2025-04-14"},{providerId:"helicone",modelId:"grok-4-fast-non-reasoning",name:"xAI Grok 4 Fast Non-Reasoning",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.19999999999999998,output:0.5,cache_read:0.049999999999999996},limit:{context:2000000,output:2000000},modalities:{input:["text","image","audio"],output:["text"]},knowledge:"2025-09",release_date:"2025-09-19",last_updated:"2025-09-19"},{providerId:"helicone",modelId:"qwen3-coder",name:"Qwen3 Coder 480B A35B Instruct Turbo",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.22,output:0.95},limit:{context:262144,output:16384},modalities:{input:["text","image","audio","video"],output:["text"]},knowledge:"2025-07",release_date:"2025-07-23",last_updated:"2025-07-23"},{providerId:"helicone",modelId:"deepseek-v3",name:"DeepSeek V3",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.56,output:1.68,cache_read:0.07},limit:{context:128000,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-12",release_date:"2024-12-26",last_updated:"2024-12-26"},{providerId:"helicone",modelId:"claude-opus-4",name:"Anthropic: Claude Opus 4",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:15,output:75,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:32000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-05",release_date:"2025-05-14",last_updated:"2025-05-14"},{providerId:"helicone",modelId:"grok-4-fast-reasoning",name:"xAI: Grok 4 Fast Reasoning",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.19999999999999998,output:0.5,cache_read:0.049999999999999996},limit:{context:2000000,output:2000000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-09",release_date:"2025-09-01",last_updated:"2025-09-01"},{providerId:"helicone",modelId:"llama-3.1-8b-instant",name:"Meta Llama 3.1 8B Instant",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.049999999999999996,output:0.08},limit:{context:131072,output:32678},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2024-07-01",last_updated:"2024-07-01"},{providerId:"helicone",modelId:"claude-opus-4-1",name:"Anthropic: Claude Opus 4.1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:15,output:75,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:32000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-08",release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"helicone",modelId:"grok-4",name:"xAI Grok 4",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.75},limit:{context:256000,output:256000},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2024-07-09",last_updated:"2024-07-09"},{providerId:"helicone",modelId:"qwen3-next-80b-a3b-instruct",name:"Qwen3 Next 80B A3B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.14,output:1.4},limit:{context:262000,output:16384},modalities:{input:["text","image","video"],output:["text"]},knowledge:"2025-01",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"helicone",modelId:"llama-4-maverick",name:"Meta Llama 4 Maverick 17B 128E",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.6},limit:{context:131072,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-01",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"helicone",modelId:"llama-prompt-guard-2-86m",name:"Meta Llama Prompt Guard 2 86M",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.01,output:0.01},limit:{context:512,output:2},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2024-10-01",last_updated:"2024-10-01"},{providerId:"helicone",modelId:"grok-4-1-fast-reasoning",name:"xAI Grok 4.1 Fast Reasoning",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.19999999999999998,output:0.5,cache_read:0.049999999999999996},limit:{context:2000000,output:2000000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-11",release_date:"2025-11-17",last_updated:"2025-11-17"},{providerId:"helicone",modelId:"grok-code-fast-1",name:"xAI Grok Code Fast 1",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.19999999999999998,output:1.5,cache_read:0.02},limit:{context:256000,output:1e4},modalities:{input:["text"],output:["text"]},knowledge:"2024-08",release_date:"2024-08-25",last_updated:"2024-08-25"},{providerId:"helicone",modelId:"claude-4.5-haiku",name:"Anthropic: Claude 4.5 Haiku",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:1,output:5,cache_read:0.09999999999999999,cache_write:1.25},limit:{context:200000,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-10",release_date:"2025-10-01",last_updated:"2025-10-01"},{providerId:"helicone",modelId:"llama-3.1-8b-instruct-turbo",name:"Meta Llama 3.1 8B Instruct Turbo",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.02,output:0.03},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2024-07-23",last_updated:"2024-07-23"},{providerId:"helicone",modelId:"gpt-5.1-codex",name:"OpenAI: GPT-5.1 Codex",attachment:!1,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:1.25,output:10,cache_read:0.12500000000000003},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text","image"]},knowledge:"2025-01",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"helicone",modelId:"gpt-4.1-mini-2025-04-14",name:"OpenAI GPT-4.1 Mini",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.39999999999999997,output:1.5999999999999999,cache_read:0.09999999999999999},limit:{context:1047576,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-04",release_date:"2025-04-14",last_updated:"2025-04-14"},{providerId:"helicone",modelId:"llama-guard-4",name:"Meta Llama Guard 4 12B",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.21,output:0.21},limit:{context:131072,output:1024},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-01",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"helicone",modelId:"llama-3.1-8b-instruct",name:"Meta Llama 3.1 8B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.02,output:0.049999999999999996},limit:{context:16384,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2024-07-23",last_updated:"2024-07-23"},{providerId:"helicone",modelId:"gemini-3-pro-preview",name:"Google Gemini 3 Pro Preview",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:2,output:12,cache_read:0.19999999999999998},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video"],output:["text"]},knowledge:"2025-11",release_date:"2025-11-18",last_updated:"2025-11-18"},{providerId:"helicone",modelId:"gemini-2.5-flash",name:"Google Gemini 2.5 Flash",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:2.5,cache_read:0.075,cache_write:0.3},limit:{context:1048576,output:65535},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-06",release_date:"2025-06-17",last_updated:"2025-06-17"},{providerId:"helicone",modelId:"gpt-4.1-mini",name:"OpenAI GPT-4.1 Mini",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.39999999999999997,output:1.5999999999999999,cache_read:0.09999999999999999},limit:{context:1047576,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-04",release_date:"2025-04-14",last_updated:"2025-04-14"},{providerId:"helicone",modelId:"deepseek-v3.1-terminus",name:"DeepSeek V3.1 Terminus",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.27,output:1,cache_read:0.21600000000000003},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2025-09",release_date:"2025-09-22",last_updated:"2025-09-22"},{providerId:"helicone",modelId:"llama-prompt-guard-2-22m",name:"Meta Llama Prompt Guard 2 22M",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.01,output:0.01},limit:{context:512,output:2},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2024-10-01",last_updated:"2024-10-01"},{providerId:"helicone",modelId:"claude-3.5-sonnet-v2",name:"Anthropic: Claude 3.5 Sonnet v2",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.30000000000000004,cache_write:3.75},limit:{context:200000,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-10",release_date:"2024-10-22",last_updated:"2024-10-22"},{providerId:"helicone",modelId:"sonar-deep-research",name:"Perplexity Sonar Deep Research",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:2,output:8},limit:{context:127000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2025-01",release_date:"2025-01-27",last_updated:"2025-01-27"},{providerId:"helicone",modelId:"gemini-2.5-flash-lite",name:"Google Gemini 2.5 Flash Lite",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.09999999999999999,output:0.39999999999999997,cache_read:0.024999999999999998,cache_write:0.09999999999999999},limit:{context:1048576,output:65535},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-07",release_date:"2025-07-22",last_updated:"2025-07-22"},{providerId:"helicone",modelId:"claude-sonnet-4-5-20250929",name:"Anthropic: Claude Sonnet 4.5 (20250929)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.30000000000000004,cache_write:3.75},limit:{context:200000,output:64000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-09",release_date:"2025-09-29",last_updated:"2025-09-29"},{providerId:"helicone",modelId:"grok-3",name:"xAI Grok 3",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.75},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2024-06",release_date:"2024-06-01",last_updated:"2024-06-01"},{providerId:"helicone",modelId:"mistral-small",name:"Mistral Small",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:75,output:200},limit:{context:128000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-02",release_date:"2024-02-26",last_updated:"2024-02-26"},{providerId:"helicone",modelId:"kimi-k2-0711",name:"Kimi K2 (07/11)",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.5700000000000001,output:2.3},limit:{context:131072,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2025-01",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"helicone",modelId:"chatgpt-4o-latest",name:"OpenAI ChatGPT-4o",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:5,output:20,cache_read:2.5},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-08",release_date:"2024-08-14",last_updated:"2024-08-14"},{providerId:"helicone",modelId:"qwen3-coder-30b-a3b-instruct",name:"Qwen3 Coder 30B A3B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.09999999999999999,output:0.3},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2025-07",release_date:"2025-07-31",last_updated:"2025-07-31"},{providerId:"helicone",modelId:"kimi-k2-0905",name:"Kimi K2 (09/05)",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.5,output:2,cache_read:0.39999999999999997},limit:{context:262144,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2025-09",release_date:"2025-09-05",last_updated:"2025-09-05"},{providerId:"helicone",modelId:"sonar-reasoning",name:"Perplexity Sonar Reasoning",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:1,output:5},limit:{context:127000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2025-01",release_date:"2025-01-27",last_updated:"2025-01-27"},{providerId:"helicone",modelId:"llama-3.3-70b-instruct",name:"Meta Llama 3.3 70B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.13,output:0.39},limit:{context:128000,output:16400},modalities:{input:["text"],output:["text"]},knowledge:"2024-12",release_date:"2024-12-06",last_updated:"2024-12-06"},{providerId:"helicone",modelId:"gpt-5.1-codex-mini",name:"OpenAI: GPT-5.1 Codex Mini",attachment:!1,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:0.25,output:2,cache_read:0.024999999999999998},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text","image"]},knowledge:"2025-01",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"helicone",modelId:"kimi-k2-thinking",name:"Kimi K2 Thinking",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.48,output:2},limit:{context:256000,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2025-11",release_date:"2025-11-06",last_updated:"2025-11-06"},{providerId:"helicone",modelId:"o3-mini",name:"OpenAI o3 Mini",attachment:!1,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:1.1,output:4.4,cache_read:0.55},limit:{context:200000,output:1e5},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2023-10-01",last_updated:"2023-10-01"},{providerId:"helicone",modelId:"claude-4.5-sonnet",name:"Anthropic: Claude Sonnet 4.5",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.30000000000000004,cache_write:3.75},limit:{context:200000,output:64000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-09",release_date:"2025-09-29",last_updated:"2025-09-29"},{providerId:"helicone",modelId:"gpt-5.1",name:"OpenAI GPT-5.1",attachment:!1,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:1.25,output:10,cache_read:0.12500000000000003},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text","image"]},knowledge:"2025-01",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"helicone",modelId:"codex-mini-latest",name:"OpenAI Codex Mini Latest",attachment:!1,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:1.5,output:6,cache_read:0.375},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-01",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"helicone",modelId:"gpt-5-nano",name:"OpenAI GPT-5 Nano",attachment:!1,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:0.049999999999999996,output:0.39999999999999997,cache_read:0.005},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-01",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"helicone",modelId:"gpt-5-codex",name:"OpenAI: GPT-5 Codex",attachment:!1,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:1.25,output:10,cache_read:0.12500000000000003},limit:{context:400000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2025-01",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"helicone",modelId:"gpt-4o",name:"OpenAI GPT-4o",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2.5,output:10,cache_read:1.25},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05",release_date:"2024-05-13",last_updated:"2024-05-13"},{providerId:"helicone",modelId:"deepseek-tng-r1t2-chimera",name:"DeepSeek TNG R1T2 Chimera",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.3,output:1.2},limit:{context:130000,output:163840},modalities:{input:["text"],output:["text"]},knowledge:"2025-07",release_date:"2025-07-02",last_updated:"2025-07-02"},{providerId:"helicone",modelId:"claude-4.5-opus",name:"Anthropic: Claude Opus 4.5",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:5,output:25,cache_read:0.5000000000000001,cache_write:6.25},limit:{context:200000,output:64000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-11",release_date:"2025-11-24",last_updated:"2025-11-24"},{providerId:"helicone",modelId:"gpt-4.1",name:"OpenAI GPT-4.1",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:8,cache_read:0.5},limit:{context:1047576,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-04",release_date:"2025-04-14",last_updated:"2025-04-14"},{providerId:"helicone",modelId:"sonar",name:"Perplexity Sonar",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:1,output:1},limit:{context:127000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2025-01",release_date:"2025-01-27",last_updated:"2025-01-27"},{providerId:"helicone",modelId:"glm-4.6",name:"Zai GLM-4.6",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.44999999999999996,output:1.5},limit:{context:204800,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2024-07-18",last_updated:"2024-07-18"},{providerId:"helicone",modelId:"o4-mini",name:"OpenAI o4 Mini",attachment:!1,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:1.1,output:4.4,cache_read:0.275},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-06",release_date:"2024-06-01",last_updated:"2024-06-01"},{providerId:"helicone",modelId:"qwen3-235b-a22b-thinking",name:"Qwen3 235B A22B Thinking",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:0.3,output:2.9000000000000004},limit:{context:262144,output:81920},modalities:{input:["text","image","video"],output:["text"]},knowledge:"2025-07",release_date:"2025-07-25",last_updated:"2025-07-25"},{providerId:"helicone",modelId:"hermes-2-pro-llama-3-8b",name:"Hermes 2 Pro Llama 3 8B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.14,output:0.14},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2024-05",release_date:"2024-05-27",last_updated:"2024-05-27"},{providerId:"helicone",modelId:"o1",name:"OpenAI: o1",attachment:!1,reasoning:!1,tool_call:!1,temperature:!1,cost:{input:15,output:60,cache_read:7.5},limit:{context:200000,output:1e5},modalities:{input:["text"],output:["text"]},knowledge:"2025-01",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"helicone",modelId:"grok-3-mini",name:"xAI Grok 3 Mini",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.3,output:0.5,cache_read:0.075},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2024-06",release_date:"2024-06-01",last_updated:"2024-06-01"},{providerId:"helicone",modelId:"sonar-pro",name:"Perplexity Sonar Pro",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:3,output:15},limit:{context:200000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2025-01",release_date:"2025-01-27",last_updated:"2025-01-27"},{providerId:"helicone",modelId:"gpt-5-mini",name:"OpenAI GPT-5 Mini",attachment:!1,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:0.25,output:2,cache_read:0.024999999999999998},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-01",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"helicone",modelId:"deepseek-r1-distill-llama-70b",name:"DeepSeek R1 Distill Llama 70B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.03,output:0.13},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2025-01",release_date:"2025-01-20",last_updated:"2025-01-20"},{providerId:"helicone",modelId:"o1-mini",name:"OpenAI: o1-mini",attachment:!1,reasoning:!1,tool_call:!1,temperature:!1,cost:{input:1.1,output:4.4,cache_read:0.55},limit:{context:128000,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2025-01",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"helicone",modelId:"claude-3.7-sonnet",name:"Anthropic: Claude 3.7 Sonnet",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.30000000000000004,cache_write:3.75},limit:{context:200000,output:64000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-02",release_date:"2025-02-19",last_updated:"2025-02-19"},{providerId:"helicone",modelId:"claude-3-haiku-20240307",name:"Anthropic: Claude 3 Haiku",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.25,output:1.25,cache_read:0.03,cache_write:0.3},limit:{context:200000,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-03",release_date:"2024-03-07",last_updated:"2024-03-07"},{providerId:"helicone",modelId:"o3-pro",name:"OpenAI o3 Pro",attachment:!1,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:20,output:80},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-06",release_date:"2024-06-01",last_updated:"2024-06-01"},{providerId:"helicone",modelId:"qwen2.5-coder-7b-fast",name:"Qwen2.5 Coder 7B fast",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.03,output:0.09},limit:{context:32000,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-09",release_date:"2024-09-15",last_updated:"2024-09-15"},{providerId:"helicone",modelId:"deepseek-reasoner",name:"DeepSeek Reasoner",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.56,output:1.68,cache_read:0.07},limit:{context:128000,output:64000},modalities:{input:["text"],output:["text"]},knowledge:"2025-01",release_date:"2025-01-20",last_updated:"2025-01-20"},{providerId:"helicone",modelId:"gemini-2.5-pro",name:"Google Gemini 2.5 Pro",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.25,output:10,cache_read:0.3125,cache_write:1.25},limit:{context:1048576,output:65536},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-06",release_date:"2025-06-17",last_updated:"2025-06-17"},{providerId:"helicone",modelId:"gemma-3-12b-it",name:"Google Gemma 3 12B",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.049999999999999996,output:0.09999999999999999},limit:{context:131072,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-12",release_date:"2024-12-01",last_updated:"2024-12-01"},{providerId:"helicone",modelId:"mistral-nemo",name:"Mistral Nemo",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:20,output:40},limit:{context:128000,output:16400},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-07",release_date:"2024-07-18",last_updated:"2024-07-18"},{providerId:"helicone",modelId:"o3",name:"OpenAI o3",attachment:!1,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:2,output:8,cache_read:0.5},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-06",release_date:"2024-06-01",last_updated:"2024-06-01"},{providerId:"helicone",modelId:"gpt-oss-20b",name:"OpenAI GPT-OSS 20b",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.049999999999999996,output:0.19999999999999998},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2024-06",release_date:"2024-06-01",last_updated:"2024-06-01"},{providerId:"helicone",modelId:"gpt-oss-120b",name:"OpenAI GPT-OSS 120b",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.04,output:0.16},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2024-06",release_date:"2024-06-01",last_updated:"2024-06-01"},{providerId:"helicone",modelId:"claude-3.5-haiku",name:"Anthropic: Claude 3.5 Haiku",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.7999999999999999,output:4,cache_read:0.08,cache_write:1},limit:{context:200000,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-10",release_date:"2024-10-22",last_updated:"2024-10-22"},{providerId:"helicone",modelId:"gpt-5-chat-latest",name:"OpenAI GPT-5 Chat Latest",attachment:!1,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:1.25,output:10,cache_read:0.12500000000000003},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09",release_date:"2024-09-30",last_updated:"2024-09-30"},{providerId:"helicone",modelId:"gpt-4o-mini",name:"OpenAI GPT-4o-mini",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.6,cache_read:0.075},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-07",release_date:"2024-07-18",last_updated:"2024-07-18"},{providerId:"helicone",modelId:"gemma2-9b-it",name:"Google Gemma 2",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.01,output:0.03},limit:{context:8192,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-06",release_date:"2024-06-25",last_updated:"2024-06-25"},{providerId:"helicone",modelId:"claude-sonnet-4",name:"Anthropic: Claude Sonnet 4",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.30000000000000004,cache_write:3.75},limit:{context:200000,output:64000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-05",release_date:"2025-05-14",last_updated:"2025-05-14"},{providerId:"helicone",modelId:"sonar-reasoning-pro",name:"Perplexity Sonar Reasoning Pro",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:2,output:8},limit:{context:127000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2025-01",release_date:"2025-01-27",last_updated:"2025-01-27"},{providerId:"helicone",modelId:"gpt-5",name:"OpenAI GPT-5",attachment:!1,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:1.25,output:10,cache_read:0.12500000000000003},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-01",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"helicone",modelId:"qwen3-vl-235b-a22b-instruct",name:"Qwen3 VL 235B A22B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.3,output:1.5},limit:{context:256000,output:16384},modalities:{input:["text","image","video"],output:["text"]},knowledge:"2025-09",release_date:"2025-09-23",last_updated:"2025-09-23"},{providerId:"helicone",modelId:"qwen3-30b-a3b",name:"Qwen3 30B A3B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.08,output:0.29},limit:{context:41000,output:41000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-06",release_date:"2025-06-01",last_updated:"2025-06-01"},{providerId:"helicone",modelId:"deepseek-v3.2",name:"DeepSeek V3.2",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.27,output:0.41},limit:{context:163840,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2025-09",release_date:"2025-09-22",last_updated:"2025-09-22"},{providerId:"helicone",modelId:"grok-4-1-fast-non-reasoning",name:"xAI Grok 4.1 Fast Non-Reasoning",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.19999999999999998,output:0.5,cache_read:0.049999999999999996},limit:{context:2000000,output:30000},modalities:{input:["text","image"],output:["text","image"]},knowledge:"2025-11",release_date:"2025-11-17",last_updated:"2025-11-17"},{providerId:"helicone",modelId:"gpt-5-pro",name:"OpenAI: GPT-5 Pro",attachment:!1,reasoning:!1,tool_call:!1,temperature:!1,cost:{input:15,output:120},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2025-01",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"helicone",modelId:"llama-3.3-70b-versatile",name:"Meta Llama 3.3 70B Versatile",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.59,output:0.7899999999999999},limit:{context:131072,output:32678},modalities:{input:["text"],output:["text"]},knowledge:"2024-12",release_date:"2024-12-06",last_updated:"2024-12-06"},{providerId:"helicone",modelId:"mistral-large-2411",name:"Mistral-Large",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:6},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2024-07-24",last_updated:"2024-07-24"},{providerId:"helicone",modelId:"claude-opus-4-1-20250805",name:"Anthropic: Claude Opus 4.1 (20250805)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:15,output:75,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:32000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-08",release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"helicone",modelId:"ernie-4.5-21b-a3b-thinking",name:"Baidu Ernie 4.5 21B A3B Thinking",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:0.07,output:0.28},limit:{context:128000,output:8000},modalities:{input:["text"],output:["text"]},knowledge:"2025-03",release_date:"2025-03-16",last_updated:"2025-03-16"},{providerId:"helicone",modelId:"gpt-5.1-chat-latest",name:"OpenAI GPT-5.1 Chat",attachment:!1,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:1.25,output:10,cache_read:0.12500000000000003},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text","image"]},knowledge:"2025-01",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"helicone",modelId:"qwen3-32b",name:"Qwen3 32B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.29,output:0.59},limit:{context:131072,output:40960},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04-28",last_updated:"2025-04-28"},{providerId:"helicone",modelId:"claude-haiku-4-5-20251001",name:"Anthropic: Claude 4.5 Haiku (20251001)",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:1,output:5,cache_read:0.09999999999999999,cache_write:1.25},limit:{context:200000,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-10",release_date:"2025-10-01",last_updated:"2025-10-01"},{providerId:"helicone",modelId:"llama-4-scout",name:"Meta Llama 4 Scout 17B 16E",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.08,output:0.3},limit:{context:131072,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-01",release_date:"2025-01-01",last_updated:"2025-01-01"}]},{id:"huggingface",name:"Hugging Face",models:[{providerId:"huggingface",modelId:"moonshotai/Kimi-K2-Instruct",name:"Kimi-K2-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:1,output:3},limit:{context:131072,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-07-14",last_updated:"2025-07-14"},{providerId:"huggingface",modelId:"moonshotai/Kimi-K2-Instruct-0905",name:"Kimi-K2-Instruct-0905",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:1,output:3},limit:{context:262144,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-09-04",last_updated:"2025-09-04"},{providerId:"huggingface",modelId:"MiniMaxAI/MiniMax-M2",name:"MiniMax-M2",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:1.2},limit:{context:204800,output:204800},modalities:{input:["text"],output:["text"]},knowledge:"2025-10",release_date:"2025-10-27",last_updated:"2025-10-27"},{providerId:"huggingface",modelId:"Qwen/Qwen3-Embedding-8B",name:"Qwen 3 Embedding 4B",attachment:!1,reasoning:!1,tool_call:!1,temperature:!1,cost:{input:0.01,output:0},limit:{context:32000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-12",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"huggingface",modelId:"Qwen/Qwen3-Embedding-4B",name:"Qwen 3 Embedding 4B",attachment:!1,reasoning:!1,tool_call:!1,temperature:!1,cost:{input:0.01,output:0},limit:{context:32000,output:2048},modalities:{input:["text"],output:["text"]},knowledge:"2024-12",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"huggingface",modelId:"Qwen/Qwen3-Coder-480B-A35B-Instruct",name:"Qwen3-Coder-480B-A35B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:2},limit:{context:262144,output:66536},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-23",last_updated:"2025-07-23"},{providerId:"huggingface",modelId:"Qwen/Qwen3-235B-A22B-Thinking-2507",name:"Qwen3-235B-A22B-Thinking-2507",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:3},limit:{context:262144,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-25",last_updated:"2025-07-25"},{providerId:"huggingface",modelId:"Qwen/Qwen3-Next-80B-A3B-Instruct",name:"Qwen3-Next-80B-A3B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.25,output:1},limit:{context:262144,output:66536},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-09-11",last_updated:"2025-09-11"},{providerId:"huggingface",modelId:"Qwen/Qwen3-Next-80B-A3B-Thinking",name:"Qwen3-Next-80B-A3B-Thinking",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.3,output:2},limit:{context:262144,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-09-11",last_updated:"2025-09-11"},{providerId:"huggingface",modelId:"zai-org/GLM-4.5",name:"GLM-4.5",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.2},limit:{context:131072,output:98304},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-28",last_updated:"2025-07-28"},{providerId:"huggingface",modelId:"zai-org/GLM-4.6",name:"GLM-4.6",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.2,cache_read:0.11},limit:{context:200000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-09-30",last_updated:"2025-09-30"},{providerId:"huggingface",modelId:"zai-org/GLM-4.5-Air",name:"GLM-4.5-Air",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:1.1},limit:{context:128000,output:96000},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-28",last_updated:"2025-07-28"},{providerId:"huggingface",modelId:"deepseek-ai/Deepseek-V3-0324",name:"DeepSeek-V3-0324",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:1.25,output:1.25},limit:{context:16384,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-03-24",last_updated:"2025-03-24"},{providerId:"huggingface",modelId:"deepseek-ai/DeepSeek-R1-0528",name:"DeepSeek-R1-0528",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:5},limit:{context:163840,output:163840},modalities:{input:["text"],output:["text"]},knowledge:"2025-05",release_date:"2025-05-28",last_updated:"2025-05-28"}]},{id:"opencode",name:"OpenCode Zen",models:[{providerId:"opencode",modelId:"qwen3-coder",name:"Qwen3 Coder",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.45,output:1.8},limit:{context:262144,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-23",last_updated:"2025-07-23"},{providerId:"opencode",modelId:"claude-opus-4-1",name:"Claude Opus 4.1",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:15,output:75,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:32000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"opencode",modelId:"kimi-k2",name:"Kimi K2",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.4,output:2.5,cache_read:0.4},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-09-05",last_updated:"2025-09-05"},{providerId:"opencode",modelId:"gpt-5.1-codex",name:"GPT-5.1 Codex",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.07,output:8.5,cache_read:0.107},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-11-12",last_updated:"2025-11-12"},{providerId:"opencode",modelId:"claude-haiku-4-5",name:"Claude Haiku 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1,output:5,cache_read:0.1,cache_write:1.25},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-02-28",release_date:"2025-10-15",last_updated:"2025-10-15"},{providerId:"opencode",modelId:"claude-opus-4-5",name:"Claude Opus 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:5,output:25,cache_read:0.5,cache_write:6.25},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-11-01",last_updated:"2025-11-01"},{providerId:"opencode",modelId:"gemini-3-pro",name:"Gemini 3 Pro",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:2,output:12,cache_read:0.2},limit:{context:1048576,output:65536},modalities:{input:["text","image","video","audio","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-11-18",last_updated:"2025-11-18"},{providerId:"opencode",modelId:"alpha-glm-4.7",name:"GLM-4.7 (alpha)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0,cache_read:0},limit:{context:204800,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-12-22",last_updated:"2025-12-22"},{providerId:"opencode",modelId:"claude-sonnet-4-5",name:"Claude Sonnet 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:1e6,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-07-31",release_date:"2025-09-29",last_updated:"2025-09-29"},{providerId:"opencode",modelId:"alpha-gd4",name:"Alpha GD4",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.5,output:2,cache_read:0.15},limit:{context:262144,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2025-01",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"opencode",modelId:"kimi-k2-thinking",name:"Kimi K2 Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.4,output:2.5,cache_read:0.4},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-09-05",last_updated:"2025-09-05"},{providerId:"opencode",modelId:"gpt-5.1",name:"GPT-5.1",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.07,output:8.5,cache_read:0.107},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-11-12",last_updated:"2025-11-12"},{providerId:"opencode",modelId:"gpt-5-nano",name:"GPT-5 Nano",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0,output:0,cache_read:0},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05-30",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"opencode",modelId:"gpt-5-codex",name:"GPT-5 Codex",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.07,output:8.5,cache_read:0.107},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"opencode",modelId:"big-pickle",name:"Big Pickle",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0,cache_read:0,cache_write:0},limit:{context:200000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2025-01",release_date:"2025-10-17",last_updated:"2025-10-17"},{providerId:"opencode",modelId:"claude-3-5-haiku",name:"Claude Haiku 3.5",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.8,output:4,cache_read:0.08,cache_write:1},limit:{context:200000,output:8192},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2024-07-31",release_date:"2024-10-22",last_updated:"2024-10-22"},{providerId:"opencode",modelId:"glm-4.6",name:"GLM-4.6",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.2,cache_read:0.1},limit:{context:204800,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-09-30",last_updated:"2025-09-30"},{providerId:"opencode",modelId:"grok-code",name:"Grok Code Fast 1",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0,cache_read:0,cache_write:0},limit:{context:256000,output:256000},modalities:{input:["text"],output:["text"]},release_date:"2025-08-20",last_updated:"2025-08-20"},{providerId:"opencode",modelId:"gemini-3-flash",name:"Gemini 3 Flash",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.5,output:3,cache_read:0.05},limit:{context:1048576,output:65536},modalities:{input:["text","image","video","audio","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-12-17",last_updated:"2025-12-17"},{providerId:"opencode",modelId:"gpt-5.1-codex-max",name:"GPT-5.1 Codex Max",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.25,output:10,cache_read:0.125},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-11-12",last_updated:"2025-11-12"},{providerId:"opencode",modelId:"alpha-doubao-seed-code",name:"Doubao Seed Code (alpha)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0,cache_read:0},limit:{context:256000,output:32000},modalities:{input:["text","image","video"],output:["text"]},knowledge:"2024-10",release_date:"2025-11-11",last_updated:"2025-11-11"},{providerId:"opencode",modelId:"claude-sonnet-4",name:"Claude Sonnet 4",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:1e6,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-05-22",last_updated:"2025-05-22"},{providerId:"opencode",modelId:"gpt-5",name:"GPT-5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.07,output:8.5,cache_read:0.107},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"opencode",modelId:"minimax-m2.1",name:"MiniMax M2.1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0,cache_read:0,cache_write:0},limit:{context:204800,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2025-01",release_date:"2025-12-20",last_updated:"2025-12-20"},{providerId:"opencode",modelId:"gpt-5.2",name:"GPT-5.2",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.75,output:14,cache_read:0.175},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-08-31",release_date:"2025-11-12",last_updated:"2025-11-12"}]},{id:"fastrouter",name:"FastRouter",models:[{providerId:"fastrouter",modelId:"moonshotai/kimi-k2",name:"Kimi K2",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.55,output:2.2},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-07-11",last_updated:"2025-07-11"},{providerId:"fastrouter",modelId:"x-ai/grok-4",name:"Grok 4",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.75,cache_write:15},limit:{context:256000,output:64000},modalities:{input:["text"],output:["text"]},knowledge:"2025-07",release_date:"2025-07-09",last_updated:"2025-07-09"},{providerId:"fastrouter",modelId:"google/gemini-2.5-flash",name:"Gemini 2.5 Flash",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:2.5,cache_read:0.0375},limit:{context:1048576,output:65536},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-06-17",last_updated:"2025-06-17"},{providerId:"fastrouter",modelId:"google/gemini-2.5-pro",name:"Gemini 2.5 Pro",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.25,output:10,cache_read:0.31},limit:{context:1048576,output:65536},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-06-17",last_updated:"2025-06-17"},{providerId:"fastrouter",modelId:"openai/gpt-5-nano",name:"GPT-5 Nano",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.05,output:0.4,cache_read:0.005},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-10-01",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"fastrouter",modelId:"openai/gpt-4.1",name:"GPT-4.1",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:8,cache_read:0.5},limit:{context:1047576,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2025-04-14",last_updated:"2025-04-14"},{providerId:"fastrouter",modelId:"openai/gpt-5-mini",name:"GPT-5 Mini",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.25,output:2,cache_read:0.025},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-10-01",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"fastrouter",modelId:"openai/gpt-oss-20b",name:"GPT OSS 20B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.05,output:0.2},limit:{context:131072,output:65536},modalities:{input:["text"],output:["text"]},release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"fastrouter",modelId:"openai/gpt-oss-120b",name:"GPT OSS 120B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.6},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"fastrouter",modelId:"openai/gpt-5",name:"GPT-5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.25,output:10,cache_read:0.125},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-10-01",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"fastrouter",modelId:"qwen/qwen3-coder",name:"Qwen3 Coder",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.3,output:1.2},limit:{context:262144,output:66536},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-23",last_updated:"2025-07-23"},{providerId:"fastrouter",modelId:"anthropic/claude-opus-4.1",name:"Claude Opus 4.1",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:15,output:75,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:32000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"fastrouter",modelId:"anthropic/claude-sonnet-4",name:"Claude Sonnet 4",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-05-22",last_updated:"2025-05-22"},{providerId:"fastrouter",modelId:"deepseek-ai/deepseek-r1-distill-llama-70b",name:"DeepSeek R1 Distill Llama 70B",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:0.03,output:0.14},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-01-23",last_updated:"2025-01-23"}]},{id:"minimax",name:"MiniMax",models:[{providerId:"minimax",modelId:"MiniMax-M2",name:"MiniMax-M2",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:1.2},limit:{context:196608,output:128000},modalities:{input:["text"],output:["text"]},release_date:"2025-10-27",last_updated:"2025-10-27"}]},{id:"google",name:"Google",models:[{providerId:"google",modelId:"gemini-embedding-001",name:"Gemini Embedding 001",attachment:!1,reasoning:!1,tool_call:!1,temperature:!1,cost:{input:0.15,output:0},limit:{context:2048,output:3072},modalities:{input:["text"],output:["text"]},knowledge:"2025-05",release_date:"2025-05-20",last_updated:"2025-05-20"},{providerId:"google",modelId:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.5,output:3,cache_read:0.05},limit:{context:1048576,output:65536},modalities:{input:["text","image","video","audio","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-12-17",last_updated:"2025-12-17"},{providerId:"google",modelId:"gemini-2.5-flash-image",name:"Gemini 2.5 Flash Image",attachment:!0,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:0.3,output:30,cache_read:0.075},limit:{context:32768,output:32768},modalities:{input:["text","image"],output:["text","image"]},knowledge:"2025-06",release_date:"2025-08-26",last_updated:"2025-08-26"},{providerId:"google",modelId:"gemini-2.5-flash-preview-05-20",name:"Gemini 2.5 Flash Preview 05-20",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.6,cache_read:0.0375},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-05-20",last_updated:"2025-05-20"},{providerId:"google",modelId:"gemini-flash-lite-latest",name:"Gemini Flash-Lite Latest",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.4,cache_read:0.025},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-09-25",last_updated:"2025-09-25"},{providerId:"google",modelId:"gemini-3-pro-preview",name:"Gemini 3 Pro Preview",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:2,output:12,cache_read:0.2},limit:{context:1e6,output:64000},modalities:{input:["text","image","video","audio","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-11-18",last_updated:"2025-11-18"},{providerId:"google",modelId:"gemini-2.5-flash",name:"Gemini 2.5 Flash",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:2.5,cache_read:0.075},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-03-20",last_updated:"2025-06-05"},{providerId:"google",modelId:"gemini-flash-latest",name:"Gemini Flash Latest",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:2.5,cache_read:0.075},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-09-25",last_updated:"2025-09-25"},{providerId:"google",modelId:"gemini-2.5-pro-preview-05-06",name:"Gemini 2.5 Pro Preview 05-06",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.25,output:10,cache_read:0.31},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-05-06",last_updated:"2025-05-06"},{providerId:"google",modelId:"gemini-2.5-flash-preview-tts",name:"Gemini 2.5 Flash Preview TTS",attachment:!1,reasoning:!1,tool_call:!1,temperature:!1,cost:{input:0.5,output:10},limit:{context:8000,output:16000},modalities:{input:["text"],output:["audio"]},knowledge:"2025-01",release_date:"2025-05-01",last_updated:"2025-05-01"},{providerId:"google",modelId:"gemini-2.0-flash-lite",name:"Gemini 2.0 Flash Lite",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.075,output:0.3},limit:{context:1048576,output:8192},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2024-06",release_date:"2024-12-11",last_updated:"2024-12-11"},{providerId:"google",modelId:"gemini-live-2.5-flash-preview-native-audio",name:"Gemini Live 2.5 Flash Preview Native Audio",attachment:!1,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0.5,output:2},limit:{context:131072,output:65536},modalities:{input:["text","audio","video"],output:["text","audio"]},knowledge:"2025-01",release_date:"2025-06-17",last_updated:"2025-09-18"},{providerId:"google",modelId:"gemini-2.0-flash",name:"Gemini 2.0 Flash",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.4,cache_read:0.025},limit:{context:1048576,output:8192},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2024-06",release_date:"2024-12-11",last_updated:"2024-12-11"},{providerId:"google",modelId:"gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.4,cache_read:0.025},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-06-17",last_updated:"2025-06-17"},{providerId:"google",modelId:"gemini-2.5-pro-preview-06-05",name:"Gemini 2.5 Pro Preview 06-05",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.25,output:10,cache_read:0.31},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-06-05",last_updated:"2025-06-05"},{providerId:"google",modelId:"gemini-live-2.5-flash",name:"Gemini Live 2.5 Flash",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.5,output:2},limit:{context:128000,output:8000},modalities:{input:["text","image","audio","video"],output:["text","audio"]},knowledge:"2025-01",release_date:"2025-09-01",last_updated:"2025-09-01"},{providerId:"google",modelId:"gemini-2.5-flash-lite-preview-06-17",name:"Gemini 2.5 Flash Lite Preview 06-17",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.4,cache_read:0.025},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-06-17",last_updated:"2025-06-17"},{providerId:"google",modelId:"gemini-2.5-flash-image-preview",name:"Gemini 2.5 Flash Image (Preview)",attachment:!0,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:0.3,output:30,cache_read:0.075},limit:{context:32768,output:32768},modalities:{input:["text","image"],output:["text","image"]},knowledge:"2025-06",release_date:"2025-08-26",last_updated:"2025-08-26"},{providerId:"google",modelId:"gemini-2.5-flash-preview-09-2025",name:"Gemini 2.5 Flash Preview 09-25",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:2.5,cache_read:0.075},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-09-25",last_updated:"2025-09-25"},{providerId:"google",modelId:"gemini-2.5-flash-preview-04-17",name:"Gemini 2.5 Flash Preview 04-17",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.6,cache_read:0.0375},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-04-17",last_updated:"2025-04-17"},{providerId:"google",modelId:"gemini-2.5-pro-preview-tts",name:"Gemini 2.5 Pro Preview TTS",attachment:!1,reasoning:!1,tool_call:!1,temperature:!1,cost:{input:1,output:20},limit:{context:8000,output:16000},modalities:{input:["text"],output:["audio"]},knowledge:"2025-01",release_date:"2025-05-01",last_updated:"2025-05-01"},{providerId:"google",modelId:"gemini-2.5-pro",name:"Gemini 2.5 Pro",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.25,output:10,cache_read:0.31},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-03-20",last_updated:"2025-06-05"},{providerId:"google",modelId:"gemini-1.5-flash",name:"Gemini 1.5 Flash",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.075,output:0.3,cache_read:0.01875},limit:{context:1e6,output:8192},modalities:{input:["text","image","audio","video"],output:["text"]},knowledge:"2024-04",release_date:"2024-05-14",last_updated:"2024-05-14"},{providerId:"google",modelId:"gemini-1.5-flash-8b",name:"Gemini 1.5 Flash-8B",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.0375,output:0.15,cache_read:0.01},limit:{context:1e6,output:8192},modalities:{input:["text","image","audio","video"],output:["text"]},knowledge:"2024-04",release_date:"2024-10-03",last_updated:"2024-10-03"},{providerId:"google",modelId:"gemini-2.5-flash-lite-preview-09-2025",name:"Gemini 2.5 Flash Lite Preview 09-25",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.4,cache_read:0.025},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-09-25",last_updated:"2025-09-25"},{providerId:"google",modelId:"gemini-1.5-pro",name:"Gemini 1.5 Pro",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:1.25,output:5,cache_read:0.3125},limit:{context:1e6,output:8192},modalities:{input:["text","image","audio","video"],output:["text"]},knowledge:"2024-04",release_date:"2024-02-15",last_updated:"2024-02-15"}]},{id:"google-vertex",name:"Vertex",models:[{providerId:"google-vertex",modelId:"gemini-embedding-001",name:"Gemini Embedding 001",attachment:!1,reasoning:!1,tool_call:!1,temperature:!1,cost:{input:0.15,output:0},limit:{context:2048,output:3072},modalities:{input:["text"],output:["text"]},knowledge:"2025-05",release_date:"2025-05-20",last_updated:"2025-05-20"},{providerId:"google-vertex",modelId:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.5,output:3,cache_read:0.05},limit:{context:1048576,output:65536},modalities:{input:["text","image","video","audio","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-12-17",last_updated:"2025-12-17"},{providerId:"google-vertex",modelId:"gemini-2.5-flash-preview-05-20",name:"Gemini 2.5 Flash Preview 05-20",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.6,cache_read:0.0375},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-05-20",last_updated:"2025-05-20"},{providerId:"google-vertex",modelId:"gemini-flash-lite-latest",name:"Gemini Flash-Lite Latest",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.4,cache_read:0.025},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-09-25",last_updated:"2025-09-25"},{providerId:"google-vertex",modelId:"gemini-3-pro-preview",name:"Gemini 3 Pro Preview",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:2,output:12,cache_read:0.2},limit:{context:1048576,output:65536},modalities:{input:["text","image","video","audio","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-11-18",last_updated:"2025-11-18"},{providerId:"google-vertex",modelId:"gemini-2.5-flash",name:"Gemini 2.5 Flash",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:2.5,cache_read:0.075,cache_write:0.383},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-06-17",last_updated:"2025-06-17"},{providerId:"google-vertex",modelId:"gemini-flash-latest",name:"Gemini Flash Latest",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:2.5,cache_read:0.075,cache_write:0.383},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-09-25",last_updated:"2025-09-25"},{providerId:"google-vertex",modelId:"gemini-2.5-pro-preview-05-06",name:"Gemini 2.5 Pro Preview 05-06",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.25,output:10,cache_read:0.31},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-05-06",last_updated:"2025-05-06"},{providerId:"google-vertex",modelId:"gemini-2.0-flash-lite",name:"Gemini 2.0 Flash Lite",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.075,output:0.3},limit:{context:1048576,output:8192},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2024-06",release_date:"2024-12-11",last_updated:"2024-12-11"},{providerId:"google-vertex",modelId:"gemini-2.0-flash",name:"Gemini 2.0 Flash",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.4,cache_read:0.025},limit:{context:1048576,output:8192},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2024-06",release_date:"2024-12-11",last_updated:"2024-12-11"},{providerId:"google-vertex",modelId:"gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.4,cache_read:0.025},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-06-17",last_updated:"2025-06-17"},{providerId:"google-vertex",modelId:"gemini-2.5-pro-preview-06-05",name:"Gemini 2.5 Pro Preview 06-05",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.25,output:10,cache_read:0.31},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-06-05",last_updated:"2025-06-05"},{providerId:"google-vertex",modelId:"gemini-2.5-flash-lite-preview-06-17",name:"Gemini 2.5 Flash Lite Preview 06-17",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.4,cache_read:0.025},limit:{context:65536,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-06-17",last_updated:"2025-06-17"},{providerId:"google-vertex",modelId:"gemini-2.5-flash-preview-09-2025",name:"Gemini 2.5 Flash Preview 09-25",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:2.5,cache_read:0.075,cache_write:0.383},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-09-25",last_updated:"2025-09-25"},{providerId:"google-vertex",modelId:"gemini-2.5-flash-preview-04-17",name:"Gemini 2.5 Flash Preview 04-17",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.6,cache_read:0.0375},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-04-17",last_updated:"2025-04-17"},{providerId:"google-vertex",modelId:"gemini-2.5-pro",name:"Gemini 2.5 Pro",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.25,output:10,cache_read:0.31},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-03-20",last_updated:"2025-06-05"},{providerId:"google-vertex",modelId:"gemini-2.5-flash-lite-preview-09-2025",name:"Gemini 2.5 Flash Lite Preview 09-25",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.4,cache_read:0.025},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-09-25",last_updated:"2025-09-25"},{providerId:"google-vertex",modelId:"openai/gpt-oss-120b-maas",name:"GPT OSS 120B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.09,output:0.36},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"google-vertex",modelId:"openai/gpt-oss-20b-maas",name:"GPT OSS 20B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.07,output:0.25},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},release_date:"2025-08-05",last_updated:"2025-08-05"}]},{id:"cloudflare-workers-ai",name:"Cloudflare Workers AI",models:[{providerId:"cloudflare-workers-ai",modelId:"mistral-7b-instruct-v0.1-awq",name:"@hf/thebloke/mistral-7b-instruct-v0.1-awq",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:4096,output:4096},modalities:{input:["text"],output:["text"]},release_date:"2023-09-27",last_updated:"2023-11-09"},{providerId:"cloudflare-workers-ai",modelId:"mistral-7b-instruct-v0.2",name:"@hf/mistral/mistral-7b-instruct-v0.2",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:3072,output:4096},modalities:{input:["text"],output:["text"]},release_date:"2023-12-11",last_updated:"2025-07-24"},{providerId:"cloudflare-workers-ai",modelId:"tinyllama-1.1b-chat-v1.0",name:"@cf/tinyllama/tinyllama-1.1b-chat-v1.0",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:2048,output:2048},modalities:{input:["text"],output:["text"]},release_date:"2023-12-30",last_updated:"2024-03-17"},{providerId:"cloudflare-workers-ai",modelId:"qwen1.5-0.5b-chat",name:"@cf/qwen/qwen1.5-0.5b-chat",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:32000,output:32000},modalities:{input:["text"],output:["text"]},release_date:"2024-01-31",last_updated:"2024-04-30"},{providerId:"cloudflare-workers-ai",modelId:"llama-3.2-11b-vision-instruct",name:"@cf/meta/llama-3.2-11b-vision-instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.049,output:0.68},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},release_date:"2024-09-18",last_updated:"2024-12-04"},{providerId:"cloudflare-workers-ai",modelId:"llama-2-13b-chat-awq",name:"@hf/thebloke/llama-2-13b-chat-awq",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:4096,output:4096},modalities:{input:["text"],output:["text"]},release_date:"2023-09-19",last_updated:"2023-11-09"},{providerId:"cloudflare-workers-ai",modelId:"llama-3.1-8b-instruct-fp8",name:"@cf/meta/llama-3.1-8b-instruct-fp8",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.29},limit:{context:32000,output:32000},modalities:{input:["text"],output:["text"]},release_date:"2024-07-25",last_updated:"2024-07-25"},{providerId:"cloudflare-workers-ai",modelId:"llama-2-7b-chat-fp16",name:"@cf/meta/llama-2-7b-chat-fp16",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.56,output:6.67},limit:{context:4096,output:4096},modalities:{input:["text"],output:["text"]},release_date:"2023-07-26",last_updated:"2023-07-26"},{providerId:"cloudflare-workers-ai",modelId:"sqlcoder-7b-2",name:"@cf/defog/sqlcoder-7b-2",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:1e4,output:1e4},modalities:{input:["text"],output:["text"]},release_date:"2024-02-05",last_updated:"2024-02-12"},{providerId:"cloudflare-workers-ai",modelId:"llama-3-8b-instruct",name:"@cf/meta/llama-3-8b-instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.28,output:0.83},limit:{context:7968,output:7968},modalities:{input:["text"],output:["text"]},release_date:"2024-04-17",last_updated:"2025-06-19"},{providerId:"cloudflare-workers-ai",modelId:"llama-2-7b-chat-hf-lora",name:"@cf/meta-llama/llama-2-7b-chat-hf-lora",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:8192,output:8192},modalities:{input:["text"],output:["text"]},release_date:"2023-07-13",last_updated:"2024-04-17"},{providerId:"cloudflare-workers-ai",modelId:"llama-3.1-8b-instruct",name:"@cf/meta/llama-3.1-8b-instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.28,output:0.83},limit:{context:7968,output:7968},modalities:{input:["text"],output:["text"]},release_date:"2024-07-18",last_updated:"2024-09-25"},{providerId:"cloudflare-workers-ai",modelId:"openchat-3.5-0106",name:"@cf/openchat/openchat-3.5-0106",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:8192,output:8192},modalities:{input:["text"],output:["text"]},release_date:"2024-01-07",last_updated:"2024-05-18"},{providerId:"cloudflare-workers-ai",modelId:"openhermes-2.5-mistral-7b-awq",name:"@hf/thebloke/openhermes-2.5-mistral-7b-awq",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:4096,output:4096},modalities:{input:["text"],output:["text"]},release_date:"2023-11-02",last_updated:"2023-11-09"},{providerId:"cloudflare-workers-ai",modelId:"deepseek-r1-distill-qwen-32b",name:"@cf/deepseek-ai/deepseek-r1-distill-qwen-32b",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.5,output:4.88},limit:{context:80000,output:80000},modalities:{input:["text"],output:["text"]},release_date:"2025-01-20",last_updated:"2025-02-24"},{providerId:"cloudflare-workers-ai",modelId:"gemma-2b-it-lora",name:"@cf/google/gemma-2b-it-lora",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:8192,output:8192},modalities:{input:["text"],output:["text"]},release_date:"2024-04-02",last_updated:"2024-04-02"},{providerId:"cloudflare-workers-ai",modelId:"una-cybertron-7b-v2-bf16",name:"@cf/fblgit/una-cybertron-7b-v2-bf16",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:15000,output:15000},modalities:{input:["text"],output:["text"]},release_date:"2023-12-02",last_updated:"2024-03-08"},{providerId:"cloudflare-workers-ai",modelId:"llama-3.2-3b-instruct",name:"@cf/meta/llama-3.2-3b-instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.051,output:0.34},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},release_date:"2024-09-18",last_updated:"2024-10-24"},{providerId:"cloudflare-workers-ai",modelId:"qwen2.5-coder-32b-instruct",name:"@cf/qwen/qwen2.5-coder-32b-instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.66,output:1},limit:{context:32768,output:32768},modalities:{input:["text"],output:["text"]},release_date:"2024-11-06",last_updated:"2025-01-12"},{providerId:"cloudflare-workers-ai",modelId:"gemma-7b-it-lora",name:"@cf/google/gemma-7b-it-lora",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:3500,output:3500},modalities:{input:["text"],output:["text"]},release_date:"2024-04-02",last_updated:"2024-04-02"},{providerId:"cloudflare-workers-ai",modelId:"qwen1.5-14b-chat-awq",name:"@cf/qwen/qwen1.5-14b-chat-awq",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:7500,output:7500},modalities:{input:["text"],output:["text"]},release_date:"2024-02-03",last_updated:"2024-04-30"},{providerId:"cloudflare-workers-ai",modelId:"qwen1.5-1.8b-chat",name:"@cf/qwen/qwen1.5-1.8b-chat",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:32000,output:32000},modalities:{input:["text"],output:["text"]},release_date:"2024-01-30",last_updated:"2024-04-30"},{providerId:"cloudflare-workers-ai",modelId:"mistral-small-3.1-24b-instruct",name:"@cf/mistralai/mistral-small-3.1-24b-instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.35,output:0.56},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},release_date:"2025-03-11",last_updated:"2025-07-28"},{providerId:"cloudflare-workers-ai",modelId:"gemma-7b-it",name:"@hf/google/gemma-7b-it",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:8192,output:8192},modalities:{input:["text"],output:["text"]},release_date:"2024-02-13",last_updated:"2024-08-14"},{providerId:"cloudflare-workers-ai",modelId:"llamaguard-7b-awq",name:"@hf/thebloke/llamaguard-7b-awq",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:4096,output:4096},modalities:{input:["text"],output:["text"]},release_date:"2023-12-11",last_updated:"2023-12-11"},{providerId:"cloudflare-workers-ai",modelId:"hermes-2-pro-mistral-7b",name:"@hf/nousresearch/hermes-2-pro-mistral-7b",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:24000,output:24000},modalities:{input:["text"],output:["text"]},release_date:"2024-03-11",last_updated:"2024-09-08"},{providerId:"cloudflare-workers-ai",modelId:"falcon-7b-instruct",name:"@cf/tiiuae/falcon-7b-instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:4096,output:4096},modalities:{input:["text"],output:["text"]},release_date:"2023-04-25",last_updated:"2024-10-12"},{providerId:"cloudflare-workers-ai",modelId:"llama-3.3-70b-instruct-fp8-fast",name:"@cf/meta/llama-3.3-70b-instruct-fp8-fast",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.29,output:2.25},limit:{context:24000,output:24000},modalities:{input:["text"],output:["text"]},release_date:"2024-12-06",last_updated:"2024-12-06"},{providerId:"cloudflare-workers-ai",modelId:"llama-3-8b-instruct-awq",name:"@cf/meta/llama-3-8b-instruct-awq",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.12,output:0.27},limit:{context:8192,output:8192},modalities:{input:["text"],output:["text"]},release_date:"2024-05-09",last_updated:"2024-05-09"},{providerId:"cloudflare-workers-ai",modelId:"phi-2",name:"@cf/microsoft/phi-2",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:2048,output:2048},modalities:{input:["text"],output:["text"]},release_date:"2023-12-13",last_updated:"2024-04-29"},{providerId:"cloudflare-workers-ai",modelId:"discolm-german-7b-v1-awq",name:"@cf/thebloke/discolm-german-7b-v1-awq",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:4096,output:4096},modalities:{input:["text"],output:["text"]},release_date:"2024-01-18",last_updated:"2024-01-24"},{providerId:"cloudflare-workers-ai",modelId:"llama-2-7b-chat-int8",name:"@cf/meta/llama-2-7b-chat-int8",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.556,output:6.667},limit:{context:8192,output:8192},modalities:{input:["text"],output:["text"]},release_date:"2023-09-25",last_updated:"2023-09-25"},{providerId:"cloudflare-workers-ai",modelId:"llama-3.2-1b-instruct",name:"@cf/meta/llama-3.2-1b-instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.027,output:0.2},limit:{context:60000,output:60000},modalities:{input:["text"],output:["text"]},release_date:"2024-09-18",last_updated:"2024-10-24"},{providerId:"cloudflare-workers-ai",modelId:"llama-4-scout-17b-16e-instruct",name:"@cf/meta/llama-4-scout-17b-16e-instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.27,output:0.85},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-04-02",last_updated:"2025-05-23"},{providerId:"cloudflare-workers-ai",modelId:"starling-lm-7b-beta",name:"@hf/nexusflow/starling-lm-7b-beta",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:4096,output:4096},modalities:{input:["text"],output:["text"]},release_date:"2024-03-19",last_updated:"2024-04-03"},{providerId:"cloudflare-workers-ai",modelId:"deepseek-coder-6.7b-base-awq",name:"@hf/thebloke/deepseek-coder-6.7b-base-awq",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:4096,output:4096},modalities:{input:["text"],output:["text"]},release_date:"2023-11-05",last_updated:"2023-11-09"},{providerId:"cloudflare-workers-ai",modelId:"gemma-3-12b-it",name:"@cf/google/gemma-3-12b-it",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.35,output:0.56},limit:{context:80000,output:80000},modalities:{input:["text"],output:["text"]},release_date:"2025-03-01",last_updated:"2025-03-21"},{providerId:"cloudflare-workers-ai",modelId:"neural-chat-7b-v3-1-awq",name:"@hf/thebloke/neural-chat-7b-v3-1-awq",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:4096,output:4096},modalities:{input:["text"],output:["text"]},release_date:"2023-11-15",last_updated:"2023-11-17"},{providerId:"cloudflare-workers-ai",modelId:"mistral-7b-instruct-v0.1",name:"@cf/mistral/mistral-7b-instruct-v0.1",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.11,output:0.19},limit:{context:2824,output:2824},modalities:{input:["text"],output:["text"]},release_date:"2023-09-27",last_updated:"2025-07-24"},{providerId:"cloudflare-workers-ai",modelId:"gpt-oss-20b",name:"@cf/openai/gpt-oss-20b",attachment:!1,reasoning:!0,tool_call:!1,temperature:!1,cost:{input:0.2,output:0.3},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},release_date:"2025-08-04",last_updated:"2025-08-14"},{providerId:"cloudflare-workers-ai",modelId:"deepseek-math-7b-instruct",name:"@cf/deepseek-ai/deepseek-math-7b-instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:4096,output:4096},modalities:{input:["text"],output:["text"]},release_date:"2024-02-05",last_updated:"2024-02-06"},{providerId:"cloudflare-workers-ai",modelId:"gpt-oss-120b",name:"@cf/openai/gpt-oss-120b",attachment:!1,reasoning:!0,tool_call:!1,temperature:!1,cost:{input:0.35,output:0.75},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},release_date:"2025-08-04",last_updated:"2025-08-14"},{providerId:"cloudflare-workers-ai",modelId:"qwen1.5-7b-chat-awq",name:"@cf/qwen/qwen1.5-7b-chat-awq",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:20000,output:20000},modalities:{input:["text"],output:["text"]},release_date:"2024-02-03",last_updated:"2024-04-30"},{providerId:"cloudflare-workers-ai",modelId:"llama-3.1-8b-instruct-fast",name:"@cf/meta/llama-3.1-8b-instruct-fast",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.045,output:0.384},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},release_date:"2024-07-18",last_updated:"2024-09-25"},{providerId:"cloudflare-workers-ai",modelId:"llama-3.1-70b-instruct",name:"@cf/meta/llama-3.1-70b-instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.293,output:2.253},limit:{context:24000,output:24000},modalities:{input:["text"],output:["text"]},release_date:"2024-07-16",last_updated:"2024-12-15"},{providerId:"cloudflare-workers-ai",modelId:"qwq-32b",name:"@cf/qwen/qwq-32b",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.66,output:1},limit:{context:24000,output:24000},modalities:{input:["text"],output:["text"]},release_date:"2025-03-05",last_updated:"2025-03-11"},{providerId:"cloudflare-workers-ai",modelId:"zephyr-7b-beta-awq",name:"@hf/thebloke/zephyr-7b-beta-awq",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:4096,output:4096},modalities:{input:["text"],output:["text"]},release_date:"2023-10-27",last_updated:"2023-11-09"},{providerId:"cloudflare-workers-ai",modelId:"deepseek-coder-6.7b-instruct-awq",name:"@hf/thebloke/deepseek-coder-6.7b-instruct-awq",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:4096,output:4096},modalities:{input:["text"],output:["text"]},release_date:"2023-11-05",last_updated:"2023-11-13"},{providerId:"cloudflare-workers-ai",modelId:"llama-3.1-8b-instruct-awq",name:"@cf/meta/llama-3.1-8b-instruct-awq",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.12,output:0.27},limit:{context:8192,output:8192},modalities:{input:["text"],output:["text"]},release_date:"2024-07-25",last_updated:"2024-07-25"},{providerId:"cloudflare-workers-ai",modelId:"mistral-7b-instruct-v0.2-lora",name:"@cf/mistral/mistral-7b-instruct-v0.2-lora",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:15000,output:15000},modalities:{input:["text"],output:["text"]},release_date:"2024-04-01",last_updated:"2024-04-01"}]},{id:"inception",name:"Inception",models:[{providerId:"inception",modelId:"mercury-coder",name:"Mercury Coder",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.25,output:1,cache_read:0.25,cache_write:1},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2025-02-26",last_updated:"2025-07-31"},{providerId:"inception",modelId:"mercury",name:"Mercury",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.25,output:1,cache_read:0.25,cache_write:1},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2025-06-26",last_updated:"2025-07-31"}]},{id:"wandb",name:"Weights & Biases",models:[{providerId:"wandb",modelId:"moonshotai/Kimi-K2-Instruct",name:"Kimi-K2-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:1.35,output:4},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-07-14",last_updated:"2025-07-14"},{providerId:"wandb",modelId:"microsoft/Phi-4-mini-instruct",name:"Phi-4-mini-instruct",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.08,output:0.35},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-12-11",last_updated:"2024-12-11"},{providerId:"wandb",modelId:"meta-llama/Llama-3.1-8B-Instruct",name:"Meta-Llama-3.1-8B-Instruct",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.22,output:0.22},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-07-23",last_updated:"2024-07-23"},{providerId:"wandb",modelId:"meta-llama/Llama-3.3-70B-Instruct",name:"Llama-3.3-70B-Instruct",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.71,output:0.71},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-12-06",last_updated:"2024-12-06"},{providerId:"wandb",modelId:"meta-llama/Llama-4-Scout-17B-16E-Instruct",name:"Llama 4 Scout 17B 16E Instruct",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.17,output:0.66},limit:{context:64000,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-12",release_date:"2025-01-31",last_updated:"2025-01-31"},{providerId:"wandb",modelId:"Qwen/Qwen3-235B-A22B-Instruct-2507",name:"Qwen3 235B A22B Instruct 2507",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.1},limit:{context:262144,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04-28",last_updated:"2025-07-21"},{providerId:"wandb",modelId:"Qwen/Qwen3-Coder-480B-A35B-Instruct",name:"Qwen3-Coder-480B-A35B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:1,output:1.5},limit:{context:262144,output:66536},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-23",last_updated:"2025-07-23"},{providerId:"wandb",modelId:"Qwen/Qwen3-235B-A22B-Thinking-2507",name:"Qwen3-235B-A22B-Thinking-2507",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.1},limit:{context:262144,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-25",last_updated:"2025-07-25"},{providerId:"wandb",modelId:"deepseek-ai/DeepSeek-R1-0528",name:"DeepSeek-R1-0528",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.35,output:5.4},limit:{context:161000,output:163840},modalities:{input:["text"],output:["text"]},knowledge:"2025-05",release_date:"2025-05-28",last_updated:"2025-05-28"},{providerId:"wandb",modelId:"deepseek-ai/DeepSeek-V3-0324",name:"DeepSeek-V3-0324",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:1.14,output:2.75},limit:{context:161000,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-03-24",last_updated:"2025-03-24"}]},{id:"cloudflare-ai-gateway",name:"Cloudflare AI Gateway",models:[{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/aura-1",name:"Aura 1",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-11-14",last_updated:"2025-11-14"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/llama-3.2-11b-vision-instruct",name:"Llama 3.2 11B Vision Instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:49000,output:680000},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-08-23",last_updated:"2025-08-23"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/bge-m3",name:"BGE M3",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:12000,output:0},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-08-23",last_updated:"2025-08-23"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/llama-3.1-8b-instruct-fp8",name:"Llama 3.1 8B Instruct FP8",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:150000,output:290000},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-08-23",last_updated:"2025-08-23"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/whisper",name:"Whisper",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-11-14",last_updated:"2025-11-14"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/smart-turn-v2",name:"Smart Turn V2",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-11-14",last_updated:"2025-11-14"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/llama-2-7b-chat-fp16",name:"Llama 2 7B Chat FP16",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:560000,output:6670000},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-08-23",last_updated:"2025-08-23"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/indictrans2-en-indic-1B",name:"IndicTrans2 EN-Indic 1B",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-09-25",last_updated:"2025-09-25"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/llama-3-8b-instruct",name:"Llama 3 8B Instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:280000,output:830000},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-08-23",last_updated:"2025-08-23"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/llama-3.1-8b-instruct",name:"Llama 3.1 8B Instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:280000,output:830000},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-08-23",last_updated:"2025-08-23"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/bge-base-en-v1.5",name:"BGE Base EN V1.5",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:67000,output:0},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-08-23",last_updated:"2025-08-23"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/bart-large-cnn",name:"BART Large CNN",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-04-09",last_updated:"2025-04-09"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/deepseek-r1-distill-qwen-32b",name:"DeepSeek R1 Distill Qwen 32B",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:500000,output:4880000},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-08-23",last_updated:"2025-08-23"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/plamo-embedding-1b",name:"PLaMo Embedding 1B",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-09-25",last_updated:"2025-09-25"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/bge-large-en-v1.5",name:"BGE Large EN V1.5",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:200000,output:0},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-08-23",last_updated:"2025-08-23"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/gemma-sea-lion-v4-27b-it",name:"Gemma SEA-LION V4 27B IT",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-09-25",last_updated:"2025-09-25"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/m2m100-1.2b",name:"M2M100 1.2B",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:340000,output:340000},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-08-23",last_updated:"2025-08-23"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/llama-3.2-3b-instruct",name:"Llama 3.2 3B Instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:51000,output:340000},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-08-23",last_updated:"2025-08-23"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/qwen2.5-coder-32b-instruct",name:"Qwen 2.5 Coder 32B Instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:1},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-04-11",last_updated:"2025-04-11"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/bge-reranker-base",name:"BGE Reranker Base",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-04-09",last_updated:"2025-04-09"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/mistral-small-3.1-24b-instruct",name:"Mistral Small 3.1 24B Instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-04-11",last_updated:"2025-04-11"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/aura-2-es",name:"Aura 2 ES",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-11-14",last_updated:"2025-11-14"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/qwen3-30b-a3b-fp8",name:"Qwen3 30B A3B FP8",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-11-14",last_updated:"2025-11-14"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/aura-2-en",name:"Aura 2 EN",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-11-14",last_updated:"2025-11-14"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/granite-4.0-h-micro",name:"Granite 4.0 H Micro",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-10-15",last_updated:"2025-10-15"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/llama-3.3-70b-instruct-fp8-fast",name:"Llama 3.3 70B Instruct FP8 Fast",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:290000,output:2250000},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-08-23",last_updated:"2025-08-23"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/llama-3-8b-instruct-awq",name:"Llama 3 8B Instruct AWQ",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:120000,output:270000},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-08-23",last_updated:"2025-08-23"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/qwen3-embedding-0.6b",name:"Qwen3 Embedding 0.6B",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-11-14",last_updated:"2025-11-14"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/llama-3.2-1b-instruct",name:"Llama 3.2 1B Instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:27000,output:200000},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-08-23",last_updated:"2025-08-23"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/whisper-large-v3-turbo",name:"Whisper Large V3 Turbo",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-11-14",last_updated:"2025-11-14"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/llama-4-scout-17b-16e-instruct",name:"Llama 4 Scout 17B 16E Instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-04-16",last_updated:"2025-04-16"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/gemma-3-12b-it",name:"Gemma 3 12B IT",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-04-11",last_updated:"2025-04-11"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/llama-guard-3-8b",name:"Llama Guard 3 8B",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:480000,output:30000},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-08-23",last_updated:"2025-08-23"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/mistral-7b-instruct-v0.1",name:"Mistral 7B Instruct V0.1",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:110000,output:190000},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-08-23",last_updated:"2025-08-23"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/gpt-oss-20b",name:"GPT-OSS 20B",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/gpt-oss-120b",name:"GPT-OSS 120B",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/bge-small-en-v1.5",name:"BGE Small EN V1.5",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:20000,output:0},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-08-23",last_updated:"2025-08-23"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/melotts",name:"MeloTTS",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-11-14",last_updated:"2025-11-14"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/nova-3",name:"Nova 3",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-11-14",last_updated:"2025-11-14"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/qwq-32b",name:"QwQ 32B",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:1},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-04-11",last_updated:"2025-04-11"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/distilbert-sst-2-int8",name:"DistilBERT SST-2 INT8",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:26000,output:0},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-08-23",last_updated:"2025-08-23"},{providerId:"cloudflare-ai-gateway",modelId:"workers-ai/llama-3.1-8b-instruct-awq",name:"Llama 3.1 8B Instruct AWQ",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:120000,output:270000},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-08-23",last_updated:"2025-08-23"},{providerId:"cloudflare-ai-gateway",modelId:"openai/gpt-4",name:"GPT-4",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:30,output:60},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2024-07-23",last_updated:"2024-07-23"},{providerId:"cloudflare-ai-gateway",modelId:"openai/gpt-5.1-codex",name:"GPT-5.1 Codex",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:1.25,output:10},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-11-14",last_updated:"2025-11-14"},{providerId:"cloudflare-ai-gateway",modelId:"openai/gpt-3.5-turbo",name:"GPT-3.5 Turbo",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:1.5},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-02-10",last_updated:"2025-02-10"},{providerId:"cloudflare-ai-gateway",modelId:"openai/gpt-4-turbo",name:"GPT-4 Turbo",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:10,output:30},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2024-07-23",last_updated:"2024-07-23"},{providerId:"cloudflare-ai-gateway",modelId:"openai/o1-preview",name:"o1 Preview",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:15,output:60},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2024-09-12",last_updated:"2024-09-12"},{providerId:"cloudflare-ai-gateway",modelId:"openai/o3-mini",name:"o3 mini",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:1.1,output:4.4},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-02-05",last_updated:"2025-02-05"},{providerId:"cloudflare-ai-gateway",modelId:"openai/gpt-5.1",name:"GPT-5.1",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:1.25,output:10},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-11-14",last_updated:"2025-11-14"},{providerId:"cloudflare-ai-gateway",modelId:"openai/gpt-4o",name:"GPT-4o",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:2.5,output:10},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-02-10",last_updated:"2025-02-10"},{providerId:"cloudflare-ai-gateway",modelId:"openai/o4-mini",name:"o4 mini",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:1.1,output:4.4},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-04-16",last_updated:"2025-04-16"},{providerId:"cloudflare-ai-gateway",modelId:"openai/o1",name:"o1",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:15,output:60},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-01-07",last_updated:"2025-01-07"},{providerId:"cloudflare-ai-gateway",modelId:"openai/o1-mini",name:"o1 mini",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:1.1,output:4.4},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-02-10",last_updated:"2025-02-10"},{providerId:"cloudflare-ai-gateway",modelId:"openai/o3-pro",name:"O3 Pro",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:20,output:80},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-06-11",last_updated:"2025-06-11"},{providerId:"cloudflare-ai-gateway",modelId:"openai/o3",name:"O3",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:2,output:8},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-06-10",last_updated:"2025-06-10"},{providerId:"cloudflare-ai-gateway",modelId:"openai/gpt-4o-mini",name:"GPT-4o mini",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2024-07-23",last_updated:"2024-07-23"},{providerId:"cloudflare-ai-gateway",modelId:"replicate/meta/meta-llama-3.1-405b-instruct",name:"Llama 3.1 405B Instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:9.5,output:9.5},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2024-09-25",last_updated:"2024-09-25"},{providerId:"cloudflare-ai-gateway",modelId:"replicate/meta/meta-llama-3-70b-instruct",name:"Llama 3 70B Instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:2.75},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2024-10-08",last_updated:"2024-10-08"},{providerId:"cloudflare-ai-gateway",modelId:"replicate/meta/meta-llama-3-8b-instruct",name:"Llama 3 8B Instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-02-05",last_updated:"2025-02-05"},{providerId:"cloudflare-ai-gateway",modelId:"replicate/deepseek-ai/deepseek-r1",name:"DeepSeek R1",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:10,output:10},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-03-11",last_updated:"2025-03-11"},{providerId:"cloudflare-ai-gateway",modelId:"anthropic/claude-opus-4",name:"Claude Opus 4",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:15,output:75},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-05-22",last_updated:"2025-05-22"},{providerId:"cloudflare-ai-gateway",modelId:"anthropic/claude-haiku-4.5",name:"Claude Haiku 4.5",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:1,output:5},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-11-14",last_updated:"2025-11-14"},{providerId:"cloudflare-ai-gateway",modelId:"anthropic/claude-3-haiku",name:"Claude 3 Haiku",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:1.25},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2024-07-31",last_updated:"2024-07-31"},{providerId:"cloudflare-ai-gateway",modelId:"anthropic/claude-3-opus",name:"Claude 3 Opus",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:15,output:75},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2024-07-31",last_updated:"2024-07-31"},{providerId:"cloudflare-ai-gateway",modelId:"anthropic/claude-3.5-sonnet",name:"Claude 3.5 Sonnet",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:6,output:30},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2024-07-31",last_updated:"2024-07-31"},{providerId:"cloudflare-ai-gateway",modelId:"anthropic/claude-3-sonnet",name:"Claude 3 Sonnet",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:3,output:15},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2024-07-31",last_updated:"2024-07-31"},{providerId:"cloudflare-ai-gateway",modelId:"anthropic/claude-opus-4.1",name:"Claude Opus 4.1",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:15,output:75},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"cloudflare-ai-gateway",modelId:"anthropic/claude-3.5-haiku",name:"Claude 3.5 Haiku",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:4},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-01-07",last_updated:"2025-01-07"},{providerId:"cloudflare-ai-gateway",modelId:"anthropic/claude-sonnet-4",name:"Claude Sonnet 4",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:3,output:15},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-05-22",last_updated:"2025-05-22"},{providerId:"cloudflare-ai-gateway",modelId:"anthropic/claude-opus-4.5",name:"Claude Opus 4.5",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:5,output:25},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-11-24",last_updated:"2025-11-24"},{providerId:"cloudflare-ai-gateway",modelId:"anthropic/claude-sonnet-4.5",name:"Claude Sonnet 4.5",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:3,output:15},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-10-08",last_updated:"2025-10-08"}]},{id:"openai",name:"OpenAI",models:[{providerId:"openai",modelId:"gpt-4.1-nano",name:"GPT-4.1 nano",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.4,cache_read:0.03},limit:{context:1047576,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2025-04-14",last_updated:"2025-04-14"},{providerId:"openai",modelId:"text-embedding-3-small",name:"text-embedding-3-small",attachment:!1,reasoning:!1,tool_call:!1,temperature:!1,cost:{input:0.02,output:0},limit:{context:8191,output:1536},modalities:{input:["text"],output:["text"]},knowledge:"2024-01",release_date:"2024-01-25",last_updated:"2024-01-25"},{providerId:"openai",modelId:"gpt-4",name:"GPT-4",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:30,output:60},limit:{context:8192,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2023-11",release_date:"2023-11-06",last_updated:"2024-04-09"},{providerId:"openai",modelId:"o1-pro",name:"o1-pro",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:150,output:600},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-09",release_date:"2025-03-19",last_updated:"2025-03-19"},{providerId:"openai",modelId:"gpt-4o-2024-05-13",name:"GPT-4o (2024-05-13)",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:5,output:15},limit:{context:128000,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-09",release_date:"2024-05-13",last_updated:"2024-05-13"},{providerId:"openai",modelId:"gpt-5.1-codex",name:"GPT-5.1 Codex",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.25,output:10,cache_read:0.125},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-11-13",last_updated:"2025-11-13"},{providerId:"openai",modelId:"gpt-4o-2024-08-06",name:"GPT-4o (2024-08-06)",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2.5,output:10,cache_read:1.25},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-09",release_date:"2024-08-06",last_updated:"2024-08-06"},{providerId:"openai",modelId:"gpt-4.1-mini",name:"GPT-4.1 mini",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.4,output:1.6,cache_read:0.1},limit:{context:1047576,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2025-04-14",last_updated:"2025-04-14"},{providerId:"openai",modelId:"o3-deep-research",name:"o3-deep-research",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:10,output:40,cache_read:2.5},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05",release_date:"2024-06-26",last_updated:"2024-06-26"},{providerId:"openai",modelId:"gpt-3.5-turbo",name:"GPT-3.5-turbo",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.5,output:1.5,cache_read:1.25},limit:{context:16385,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2021-09-01",release_date:"2023-03-01",last_updated:"2023-11-06"},{providerId:"openai",modelId:"gpt-5.2-pro",name:"GPT-5.2 Pro",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:21,output:168},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-08-31",release_date:"2025-12-11",last_updated:"2025-12-11"},{providerId:"openai",modelId:"text-embedding-3-large",name:"text-embedding-3-large",attachment:!1,reasoning:!1,tool_call:!1,temperature:!1,cost:{input:0.13,output:0},limit:{context:8191,output:3072},modalities:{input:["text"],output:["text"]},knowledge:"2024-01",release_date:"2024-01-25",last_updated:"2024-01-25"},{providerId:"openai",modelId:"gpt-4-turbo",name:"GPT-4 Turbo",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:10,output:30},limit:{context:128000,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-12",release_date:"2023-11-06",last_updated:"2024-04-09"},{providerId:"openai",modelId:"o1-preview",name:"o1-preview",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:15,output:60,cache_read:7.5},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2023-09",release_date:"2024-09-12",last_updated:"2024-09-12"},{providerId:"openai",modelId:"gpt-5.1-codex-mini",name:"GPT-5.1 Codex mini",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0.25,output:2,cache_read:0.025},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text","image"]},knowledge:"2024-09-30",release_date:"2025-11-13",last_updated:"2025-11-13"},{providerId:"openai",modelId:"o3-mini",name:"o3-mini",attachment:!1,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.1,output:4.4,cache_read:0.55},limit:{context:200000,output:1e5},modalities:{input:["text"],output:["text"]},knowledge:"2024-05",release_date:"2024-12-20",last_updated:"2025-01-29"},{providerId:"openai",modelId:"gpt-5.2-chat-latest",name:"GPT-5.2 Chat",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.75,output:14,cache_read:0.175},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-08-31",release_date:"2025-12-11",last_updated:"2025-12-11"},{providerId:"openai",modelId:"gpt-5.1",name:"GPT-5.1",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.25,output:10,cache_read:0.13},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-11-13",last_updated:"2025-11-13"},{providerId:"openai",modelId:"codex-mini-latest",name:"Codex Mini",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.5,output:6,cache_read:0.375},limit:{context:200000,output:1e5},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2025-05-16",last_updated:"2025-05-16"},{providerId:"openai",modelId:"gpt-5-nano",name:"GPT-5 Nano",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0.05,output:0.4,cache_read:0.01},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05-30",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"openai",modelId:"gpt-5-codex",name:"GPT-5-Codex",attachment:!1,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.25,output:10,cache_read:0.125},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-09-15",last_updated:"2025-09-15"},{providerId:"openai",modelId:"gpt-4o",name:"GPT-4o",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2.5,output:10,cache_read:1.25},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-09",release_date:"2024-05-13",last_updated:"2024-08-06"},{providerId:"openai",modelId:"gpt-4.1",name:"GPT-4.1",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:8,cache_read:0.5},limit:{context:1047576,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2025-04-14",last_updated:"2025-04-14"},{providerId:"openai",modelId:"o4-mini",name:"o4-mini",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.1,output:4.4,cache_read:0.28},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05",release_date:"2025-04-16",last_updated:"2025-04-16"},{providerId:"openai",modelId:"o1",name:"o1",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:15,output:60,cache_read:7.5},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-09",release_date:"2024-12-05",last_updated:"2024-12-05"},{providerId:"openai",modelId:"gpt-5-mini",name:"GPT-5 Mini",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0.25,output:2,cache_read:0.03},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05-30",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"openai",modelId:"o1-mini",name:"o1-mini",attachment:!1,reasoning:!0,tool_call:!1,temperature:!1,cost:{input:1.1,output:4.4,cache_read:0.55},limit:{context:128000,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2023-09",release_date:"2024-09-12",last_updated:"2024-09-12"},{providerId:"openai",modelId:"text-embedding-ada-002",name:"text-embedding-ada-002",attachment:!1,reasoning:!1,tool_call:!1,temperature:!1,cost:{input:0.1,output:0},limit:{context:8192,output:1536},modalities:{input:["text"],output:["text"]},knowledge:"2022-12",release_date:"2022-12-15",last_updated:"2022-12-15"},{providerId:"openai",modelId:"o3-pro",name:"o3-pro",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:20,output:80},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05",release_date:"2025-06-10",last_updated:"2025-06-10"},{providerId:"openai",modelId:"gpt-4o-2024-11-20",name:"GPT-4o (2024-11-20)",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2.5,output:10,cache_read:1.25},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-09",release_date:"2024-11-20",last_updated:"2024-11-20"},{providerId:"openai",modelId:"gpt-5.1-codex-max",name:"GPT-5.1 Codex Max",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.25,output:10,cache_read:0.125},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-11-13",last_updated:"2025-11-13"},{providerId:"openai",modelId:"o3",name:"o3",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:2,output:8,cache_read:0.5},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05",release_date:"2025-04-16",last_updated:"2025-04-16"},{providerId:"openai",modelId:"o4-mini-deep-research",name:"o4-mini-deep-research",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:2,output:8,cache_read:0.5},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05",release_date:"2024-06-26",last_updated:"2024-06-26"},{providerId:"openai",modelId:"gpt-5-chat-latest",name:"GPT-5 Chat (latest)",attachment:!0,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:1.25,output:10},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"openai",modelId:"gpt-4o-mini",name:"GPT-4o mini",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.6,cache_read:0.08},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-09",release_date:"2024-07-18",last_updated:"2024-07-18"},{providerId:"openai",modelId:"gpt-5",name:"GPT-5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.25,output:10,cache_read:0.13},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"openai",modelId:"gpt-5-pro",name:"GPT-5 Pro",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:15,output:120},limit:{context:400000,output:272000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-10-06",last_updated:"2025-10-06"},{providerId:"openai",modelId:"gpt-5.2",name:"GPT-5.2",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.75,output:14,cache_read:0.175},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-08-31",release_date:"2025-12-11",last_updated:"2025-12-11"},{providerId:"openai",modelId:"gpt-5.1-chat-latest",name:"GPT-5.1 Chat",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.25,output:10,cache_read:0.125},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-11-13",last_updated:"2025-11-13"}]},{id:"zhipuai-coding-plan",name:"Zhipu AI Coding Plan",models:[{providerId:"zhipuai-coding-plan",modelId:"glm-4.6v-flash",name:"GLM-4.6V-Flash",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:32768},modalities:{input:["text","image","video"],output:["text"]},knowledge:"2025-04",release_date:"2025-12-08",last_updated:"2025-12-08"},{providerId:"zhipuai-coding-plan",modelId:"glm-4.6v",name:"GLM-4.6V",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:32768},modalities:{input:["text","image","video"],output:["text"]},knowledge:"2025-04",release_date:"2025-12-08",last_updated:"2025-12-08"},{providerId:"zhipuai-coding-plan",modelId:"glm-4.6",name:"GLM-4.6",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0,cache_read:0,cache_write:0},limit:{context:204800,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-09-30",last_updated:"2025-09-30"},{providerId:"zhipuai-coding-plan",modelId:"glm-4.5v",name:"GLM-4.5V",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:64000,output:16384},modalities:{input:["text","image","video"],output:["text"]},knowledge:"2025-04",release_date:"2025-08-11",last_updated:"2025-08-11"},{providerId:"zhipuai-coding-plan",modelId:"glm-4.5-air",name:"GLM-4.5-Air",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0,cache_read:0,cache_write:0},limit:{context:131072,output:98304},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-28",last_updated:"2025-07-28"},{providerId:"zhipuai-coding-plan",modelId:"glm-4.5",name:"GLM-4.5",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0,cache_read:0,cache_write:0},limit:{context:131072,output:98304},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-28",last_updated:"2025-07-28"},{providerId:"zhipuai-coding-plan",modelId:"glm-4.5-flash",name:"GLM-4.5-Flash",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0,cache_read:0,cache_write:0},limit:{context:131072,output:98304},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-28",last_updated:"2025-07-28"},{providerId:"zhipuai-coding-plan",modelId:"glm-4.7",name:"GLM-4.7",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.2,cache_read:0.11,cache_write:0},limit:{context:204800,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-12-22",last_updated:"2025-12-22"}]},{id:"minimax-cn",name:"MiniMax (China)",models:[{providerId:"minimax-cn",modelId:"MiniMax-M2",name:"MiniMax-M2",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:1.2},limit:{context:196608,output:128000},modalities:{input:["text"],output:["text"]},release_date:"2025-10-27",last_updated:"2025-10-27"}]},{id:"perplexity",name:"Perplexity",models:[{providerId:"perplexity",modelId:"sonar-reasoning",name:"Sonar Reasoning",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:1,output:5},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2025-09-01",release_date:"2024-01-01",last_updated:"2025-09-01"},{providerId:"perplexity",modelId:"sonar",name:"Sonar",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:1,output:1},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2025-09-01",release_date:"2024-01-01",last_updated:"2025-09-01"},{providerId:"perplexity",modelId:"sonar-pro",name:"Sonar Pro",attachment:!0,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:3,output:15},limit:{context:200000,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-09-01",release_date:"2024-01-01",last_updated:"2025-09-01"},{providerId:"perplexity",modelId:"sonar-reasoning-pro",name:"Sonar Reasoning Pro",attachment:!0,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:2,output:8},limit:{context:128000,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-09-01",release_date:"2024-01-01",last_updated:"2025-09-01"}]},{id:"openrouter",name:"OpenRouter",models:[{providerId:"openrouter",modelId:"moonshotai/kimi-k2",name:"Kimi K2",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.55,output:2.2},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-07-11",last_updated:"2025-07-11"},{providerId:"openrouter",modelId:"moonshotai/kimi-k2-0905",name:"Kimi K2 Instruct 0905",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.5},limit:{context:262144,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-09-05",last_updated:"2025-09-05"},{providerId:"openrouter",modelId:"moonshotai/kimi-dev-72b:free",name:"Kimi Dev 72b (free)",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2025-06",release_date:"2025-06-16",last_updated:"2025-06-16"},{providerId:"openrouter",modelId:"moonshotai/kimi-k2-thinking",name:"Kimi K2 Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.5,cache_read:0.15},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2024-08",release_date:"2025-11-06",last_updated:"2025-11-06"},{providerId:"openrouter",modelId:"moonshotai/kimi-k2-0905:exacto",name:"Kimi K2 Instruct 0905 (exacto)",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.5},limit:{context:262144,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-09-05",last_updated:"2025-09-05"},{providerId:"openrouter",modelId:"moonshotai/kimi-k2:free",name:"Kimi K2 (free)",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:32800,output:32800},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-11",last_updated:"2025-07-11"},{providerId:"openrouter",modelId:"thudm/glm-z1-32b:free",name:"GLM Z1 32B (free)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:32768,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04-17",last_updated:"2025-04-17"},{providerId:"openrouter",modelId:"nousresearch/hermes-4-70b",name:"Hermes 4 70B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.13,output:0.4},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2025-08-25",last_updated:"2025-08-25"},{providerId:"openrouter",modelId:"nousresearch/hermes-4-405b",name:"Hermes 4 405B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1,output:3},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2025-08-25",last_updated:"2025-08-25"},{providerId:"openrouter",modelId:"nousresearch/deephermes-3-llama-3-8b-preview",name:"DeepHermes 3 Llama 3 8B Preview",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2025-02-28",last_updated:"2025-02-28"},{providerId:"openrouter",modelId:"nvidia/nemotron-nano-9b-v2",name:"nvidia-nemotron-nano-9b-v2",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.04,output:0.16},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2024-09",release_date:"2025-08-18",last_updated:"2025-08-18"},{providerId:"openrouter",modelId:"x-ai/grok-4",name:"Grok 4",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.75,cache_write:15},limit:{context:256000,output:64000},modalities:{input:["text"],output:["text"]},knowledge:"2025-07",release_date:"2025-07-09",last_updated:"2025-07-09"},{providerId:"openrouter",modelId:"x-ai/grok-code-fast-1",name:"Grok Code Fast 1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:1.5,cache_read:0.02},limit:{context:256000,output:1e4},modalities:{input:["text"],output:["text"]},knowledge:"2025-08",release_date:"2025-08-26",last_updated:"2025-08-26"},{providerId:"openrouter",modelId:"x-ai/grok-3",name:"Grok 3",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.75,cache_write:15},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-11",release_date:"2025-02-17",last_updated:"2025-02-17"},{providerId:"openrouter",modelId:"x-ai/grok-4-fast",name:"Grok 4 Fast",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.5,cache_read:0.05,cache_write:0.05},limit:{context:2000000,output:30000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-11",release_date:"2025-08-19",last_updated:"2025-08-19"},{providerId:"openrouter",modelId:"x-ai/grok-3-beta",name:"Grok 3 Beta",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.75,cache_write:15},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-11",release_date:"2025-02-17",last_updated:"2025-02-17"},{providerId:"openrouter",modelId:"x-ai/grok-3-mini-beta",name:"Grok 3 Mini Beta",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:0.5,cache_read:0.075,cache_write:0.5},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-11",release_date:"2025-02-17",last_updated:"2025-02-17"},{providerId:"openrouter",modelId:"x-ai/grok-3-mini",name:"Grok 3 Mini",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:0.5,cache_read:0.075,cache_write:0.5},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-11",release_date:"2025-02-17",last_updated:"2025-02-17"},{providerId:"openrouter",modelId:"x-ai/grok-4.1-fast",name:"Grok 4.1 Fast",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.5,cache_read:0.05,cache_write:0.05},limit:{context:2000000,output:30000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-11",release_date:"2025-11-19",last_updated:"2025-11-19"},{providerId:"openrouter",modelId:"kwaipilot/kat-coder-pro:free",name:"Kat Coder Pro (free)",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:256000,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2025-11",release_date:"2025-11-10",last_updated:"2025-11-10"},{providerId:"openrouter",modelId:"cognitivecomputations/dolphin3.0-mistral-24b",name:"Dolphin3.0 Mistral 24B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:32768,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-02-13",last_updated:"2025-02-13"},{providerId:"openrouter",modelId:"cognitivecomputations/dolphin3.0-r1-mistral-24b",name:"Dolphin3.0 R1 Mistral 24B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:32768,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-02-13",last_updated:"2025-02-13"},{providerId:"openrouter",modelId:"deepseek/deepseek-chat-v3.1",name:"DeepSeek-V3.1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.8},limit:{context:163840,output:163840},modalities:{input:["text"],output:["text"]},knowledge:"2025-07",release_date:"2025-08-21",last_updated:"2025-08-21"},{providerId:"openrouter",modelId:"deepseek/deepseek-r1:free",name:"R1 (free)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:163840,output:163840},modalities:{input:["text"],output:["text"]},knowledge:"2025-01",release_date:"2025-01-20",last_updated:"2025-01-20"},{providerId:"openrouter",modelId:"deepseek/deepseek-v3.2-speciale",name:"DeepSeek V3.2 Speciale",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.27,output:0.41},limit:{context:163840,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2025-12-01",last_updated:"2025-12-01"},{providerId:"openrouter",modelId:"deepseek/deepseek-v3-base:free",name:"DeepSeek V3 Base (free)",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:163840,output:163840},modalities:{input:["text"],output:["text"]},knowledge:"2025-03",release_date:"2025-03-29",last_updated:"2025-03-29"},{providerId:"openrouter",modelId:"deepseek/deepseek-v3.1-terminus",name:"DeepSeek V3.1 Terminus",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.27,output:1},limit:{context:131072,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2025-07",release_date:"2025-09-22",last_updated:"2025-09-22"},{providerId:"openrouter",modelId:"deepseek/deepseek-r1-0528-qwen3-8b:free",name:"Deepseek R1 0528 Qwen3 8B (free)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2025-05",release_date:"2025-05-29",last_updated:"2025-05-29"},{providerId:"openrouter",modelId:"deepseek/deepseek-chat-v3-0324",name:"DeepSeek V3 0324",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:16384,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-03-24",last_updated:"2025-03-24"},{providerId:"openrouter",modelId:"deepseek/deepseek-r1-0528:free",name:"R1 0528 (free)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:163840,output:163840},modalities:{input:["text"],output:["text"]},knowledge:"2025-05",release_date:"2025-05-28",last_updated:"2025-05-28"},{providerId:"openrouter",modelId:"deepseek/deepseek-r1-distill-llama-70b",name:"DeepSeek R1 Distill Llama 70B",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:8192,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-01-23",last_updated:"2025-01-23"},{providerId:"openrouter",modelId:"deepseek/deepseek-r1-distill-qwen-14b",name:"DeepSeek R1 Distill Qwen 14B",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:64000,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-01-29",last_updated:"2025-01-29"},{providerId:"openrouter",modelId:"deepseek/deepseek-v3.1-terminus:exacto",name:"DeepSeek V3.1 Terminus (exacto)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.27,output:1},limit:{context:131072,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2025-07",release_date:"2025-09-22",last_updated:"2025-09-22"},{providerId:"openrouter",modelId:"deepseek/deepseek-v3.2",name:"DeepSeek V3.2",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.28,output:0.4},limit:{context:163840,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2025-12-01",last_updated:"2025-12-01"},{providerId:"openrouter",modelId:"featherless/qwerky-72b",name:"Qwerky 72B",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:32768,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-03-20",last_updated:"2025-03-20"},{providerId:"openrouter",modelId:"tngtech/deepseek-r1t2-chimera:free",name:"DeepSeek R1T2 Chimera (free)",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:163840,output:163840},modalities:{input:["text"],output:["text"]},knowledge:"2025-07",release_date:"2025-07-08",last_updated:"2025-07-08"},{providerId:"openrouter",modelId:"minimax/minimax-m1",name:"MiniMax M1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.4,output:2.2},limit:{context:1e6,output:40000},modalities:{input:["text"],output:["text"]},release_date:"2025-06-17",last_updated:"2025-06-17"},{providerId:"openrouter",modelId:"minimax/minimax-m2",name:"MiniMax M2",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.28,output:1.15,cache_read:0.28,cache_write:1.15},limit:{context:196600,output:118000},modalities:{input:["text"],output:["text"]},release_date:"2025-10-23",last_updated:"2025-10-23"},{providerId:"openrouter",modelId:"minimax/minimax-01",name:"MiniMax-01",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:1.1},limit:{context:1e6,output:1e6},modalities:{input:["text","image"],output:["text"]},release_date:"2025-01-15",last_updated:"2025-01-15"},{providerId:"openrouter",modelId:"google/gemini-2.0-flash-001",name:"Gemini 2.0 Flash",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.4,cache_read:0.025},limit:{context:1048576,output:8192},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2024-06",release_date:"2024-12-11",last_updated:"2024-12-11"},{providerId:"openrouter",modelId:"google/gemma-2-9b-it:free",name:"Gemma 2 9B (free)",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:8192,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-06",release_date:"2024-06-28",last_updated:"2024-06-28"},{providerId:"openrouter",modelId:"google/gemini-3-flash-preview",name:"Gemini 3 Flash Preview",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.5,output:3,cache_read:0.05},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-12-17",last_updated:"2025-12-17"},{providerId:"openrouter",modelId:"google/gemini-3-pro-preview",name:"Gemini 3 Pro Preview",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:2,output:12},limit:{context:1050000,output:66000},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-11-18",last_updated:"2025-11"},{providerId:"openrouter",modelId:"google/gemini-2.5-flash",name:"Gemini 2.5 Flash",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:2.5,cache_read:0.0375},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-07-17",last_updated:"2025-07-17"},{providerId:"openrouter",modelId:"google/gemini-2.5-pro-preview-05-06",name:"Gemini 2.5 Pro Preview 05-06",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.25,output:10,cache_read:0.31},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-05-06",last_updated:"2025-05-06"},{providerId:"openrouter",modelId:"google/gemma-3n-e4b-it",name:"Gemma 3n E4B IT",attachment:!0,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:8192,output:8192},modalities:{input:["text","image","audio"],output:["text"]},knowledge:"2024-10",release_date:"2025-05-20",last_updated:"2025-05-20"},{providerId:"openrouter",modelId:"google/gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.4,cache_read:0.025},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-06-17",last_updated:"2025-06-17"},{providerId:"openrouter",modelId:"google/gemini-2.5-pro-preview-06-05",name:"Gemini 2.5 Pro Preview 06-05",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.25,output:10,cache_read:0.31},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-06-05",last_updated:"2025-06-05"},{providerId:"openrouter",modelId:"google/gemini-2.5-flash-preview-09-2025",name:"Gemini 2.5 Flash Preview 09-25",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:2.5,cache_read:0.031},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-09-25",last_updated:"2025-09-25"},{providerId:"openrouter",modelId:"google/gemini-2.5-pro",name:"Gemini 2.5 Pro",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.25,output:10,cache_read:0.31},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-03-20",last_updated:"2025-06-05"},{providerId:"openrouter",modelId:"google/gemma-3-12b-it",name:"Gemma 3 12B IT",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:96000,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-10",release_date:"2025-03-13",last_updated:"2025-03-13"},{providerId:"openrouter",modelId:"google/gemma-3n-e4b-it:free",name:"Gemma 3n 4B (free)",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:8192,output:8192},modalities:{input:["text","image","audio"],output:["text"]},knowledge:"2025-05",release_date:"2025-05-20",last_updated:"2025-05-20"},{providerId:"openrouter",modelId:"google/gemini-2.5-flash-lite-preview-09-2025",name:"Gemini 2.5 Flash Lite Preview 09-25",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.4,cache_read:0.025},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-09-25",last_updated:"2025-09-25"},{providerId:"openrouter",modelId:"google/gemini-2.0-flash-exp:free",name:"Gemini 2.0 Flash Experimental (free)",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:1048576,output:1048576},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-12",release_date:"2024-12-11",last_updated:"2024-12-11"},{providerId:"openrouter",modelId:"google/gemma-3-27b-it",name:"Gemma 3 27B IT",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:96000,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-10",release_date:"2025-03-12",last_updated:"2025-03-12"},{providerId:"openrouter",modelId:"microsoft/mai-ds-r1:free",name:"MAI DS R1 (free)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:163840,output:163840},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04-21",last_updated:"2025-04-21"},{providerId:"openrouter",modelId:"openai/gpt-oss-safeguard-20b",name:"GPT OSS Safeguard 20B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.075,output:0.3},limit:{context:131072,output:65536},modalities:{input:["text"],output:["text"]},release_date:"2025-10-29",last_updated:"2025-10-29"},{providerId:"openrouter",modelId:"openai/gpt-5.1-codex",name:"GPT-5.1-Codex",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.25,output:10,cache_read:0.125},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-11-13",last_updated:"2025-11-13"},{providerId:"openrouter",modelId:"openai/gpt-4.1-mini",name:"GPT-4.1 Mini",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.4,output:1.6,cache_read:0.1},limit:{context:1047576,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2025-04-14",last_updated:"2025-04-14"},{providerId:"openrouter",modelId:"openai/gpt-5-chat",name:"GPT-5 Chat (latest)",attachment:!0,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:1.25,output:10},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"openrouter",modelId:"openai/gpt-5.2-pro",name:"GPT-5.2 Pro",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:21,output:168},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-08-31",release_date:"2025-12-11",last_updated:"2025-12-11"},{providerId:"openrouter",modelId:"openai/gpt-5.1-codex-mini",name:"GPT-5.1-Codex-Mini",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.25,output:2,cache_read:0.025},limit:{context:400000,output:1e5},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-11-13",last_updated:"2025-11-13"},{providerId:"openrouter",modelId:"openai/gpt-5.2-chat-latest",name:"GPT-5.2 Chat",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.75,output:14,cache_read:0.175},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-08-31",release_date:"2025-12-11",last_updated:"2025-12-11"},{providerId:"openrouter",modelId:"openai/gpt-5.1",name:"GPT-5.1",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.25,output:10,cache_read:0.125},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-11-13",last_updated:"2025-11-13"},{providerId:"openrouter",modelId:"openai/gpt-5-nano",name:"GPT-5 Nano",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.05,output:0.4},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-10-01",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"openrouter",modelId:"openai/gpt-5-codex",name:"GPT-5 Codex",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.25,output:10,cache_read:0.125},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-10-01",release_date:"2025-09-15",last_updated:"2025-09-15"},{providerId:"openrouter",modelId:"openai/gpt-4.1",name:"GPT-4.1",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:8,cache_read:0.5},limit:{context:1047576,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2025-04-14",last_updated:"2025-04-14"},{providerId:"openrouter",modelId:"openai/gpt-oss-120b:exacto",name:"GPT OSS 120B (exacto)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.05,output:0.24},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"openrouter",modelId:"openai/o4-mini",name:"o4 Mini",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.1,output:4.4,cache_read:0.28},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-06",release_date:"2025-04-16",last_updated:"2025-04-16"},{providerId:"openrouter",modelId:"openai/gpt-5.1-chat",name:"GPT-5.1 Chat",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.25,output:10,cache_read:0.125},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-11-13",last_updated:"2025-11-13"},{providerId:"openrouter",modelId:"openai/gpt-5-mini",name:"GPT-5 Mini",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.25,output:2},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-10-01",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"openrouter",modelId:"openai/gpt-5-image",name:"GPT-5 Image",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:5,output:10,cache_read:1.25},limit:{context:400000,output:128000},modalities:{input:["text","image","pdf"],output:["text","image"]},knowledge:"2024-10-01",release_date:"2025-10-14",last_updated:"2025-10-14"},{providerId:"openrouter",modelId:"openai/gpt-oss-20b",name:"GPT OSS 20B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.05,output:0.2},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"openrouter",modelId:"openai/gpt-oss-120b",name:"GPT OSS 120B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.072,output:0.28},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"openrouter",modelId:"openai/gpt-4o-mini",name:"GPT-4o-mini",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.6,cache_read:0.08},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-10",release_date:"2024-07-18",last_updated:"2024-07-18"},{providerId:"openrouter",modelId:"openai/gpt-5",name:"GPT-5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.25,output:10},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-10-01",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"openrouter",modelId:"openai/gpt-5-pro",name:"GPT-5 Pro",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:15,output:120},limit:{context:400000,output:272000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-10-06",last_updated:"2025-10-06"},{providerId:"openrouter",modelId:"openai/gpt-5.2",name:"GPT-5.2",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.75,output:14,cache_read:0.175},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-08-31",release_date:"2025-12-11",last_updated:"2025-12-11"},{providerId:"openrouter",modelId:"z-ai/glm-4.5",name:"GLM 4.5",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.2},limit:{context:128000,output:96000},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-28",last_updated:"2025-07-28"},{providerId:"openrouter",modelId:"z-ai/glm-4.5-air",name:"GLM 4.5 Air",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:1.1},limit:{context:128000,output:96000},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-28",last_updated:"2025-07-28"},{providerId:"openrouter",modelId:"z-ai/glm-4.5v",name:"GLM 4.5V",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:1.8},limit:{context:64000,output:16384},modalities:{input:["text","image","video"],output:["text"]},knowledge:"2025-04",release_date:"2025-08-11",last_updated:"2025-08-11"},{providerId:"openrouter",modelId:"z-ai/glm-4.6",name:"GLM 4.6",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.2,cache_read:0.11},limit:{context:200000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2025-09",release_date:"2025-09-30",last_updated:"2025-09-30"},{providerId:"openrouter",modelId:"z-ai/glm-4.6:exacto",name:"GLM 4.6 (exacto)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:1.9,cache_read:0.11},limit:{context:200000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2025-09",release_date:"2025-09-30",last_updated:"2025-09-30"},{providerId:"openrouter",modelId:"z-ai/glm-4.5-air:free",name:"GLM 4.5 Air (free)",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:96000},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-28",last_updated:"2025-07-28"},{providerId:"openrouter",modelId:"qwen/qwen3-coder",name:"Qwen3 Coder",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.3,output:1.2},limit:{context:262144,output:66536},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-23",last_updated:"2025-07-23"},{providerId:"openrouter",modelId:"qwen/qwen3-32b:free",name:"Qwen3 32B (free)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:40960,output:40960},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04-28",last_updated:"2025-04-28"},{providerId:"openrouter",modelId:"qwen/qwen3-next-80b-a3b-instruct",name:"Qwen3 Next 80B A3B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.14,output:1.4},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-09-11",last_updated:"2025-09-11"},{providerId:"openrouter",modelId:"qwen/qwen-2.5-coder-32b-instruct",name:"Qwen2.5 Coder 32B Instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:32768,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2024-11-11",last_updated:"2024-11-11"},{providerId:"openrouter",modelId:"qwen/qwen3-235b-a22b:free",name:"Qwen3 235B A22B (free)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04-28",last_updated:"2025-04-28"},{providerId:"openrouter",modelId:"qwen/qwen3-coder-flash",name:"Qwen3 Coder Flash",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.3,output:1.5},limit:{context:128000,output:66536},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-23",last_updated:"2025-07-23"},{providerId:"openrouter",modelId:"qwen/qwq-32b:free",name:"QwQ 32B (free)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:32768,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2025-03",release_date:"2025-03-05",last_updated:"2025-03-05"},{providerId:"openrouter",modelId:"qwen/qwen3-30b-a3b-thinking-2507",name:"Qwen3 30B A3B Thinking 2507",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.8},limit:{context:262000,output:262000},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-29",last_updated:"2025-07-29"},{providerId:"openrouter",modelId:"qwen/qwen3-30b-a3b:free",name:"Qwen3 30B A3B (free)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:40960,output:40960},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04-28",last_updated:"2025-04-28"},{providerId:"openrouter",modelId:"qwen/qwen2.5-vl-72b-instruct",name:"Qwen2.5 VL 72B Instruct",attachment:!0,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:32768,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-10",release_date:"2025-02-01",last_updated:"2025-02-01"},{providerId:"openrouter",modelId:"qwen/qwen3-14b:free",name:"Qwen3 14B (free)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:40960,output:40960},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04-28",last_updated:"2025-04-28"},{providerId:"openrouter",modelId:"qwen/qwen3-30b-a3b-instruct-2507",name:"Qwen3 30B A3B Instruct 2507",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.8},limit:{context:262000,output:262000},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-29",last_updated:"2025-07-29"},{providerId:"openrouter",modelId:"qwen/qwen3-235b-a22b-thinking-2507",name:"Qwen3 235B A22B Thinking 2507",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.078,output:0.312},limit:{context:262144,output:81920},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-25",last_updated:"2025-07-25"},{providerId:"openrouter",modelId:"qwen/qwen2.5-vl-32b-instruct:free",name:"Qwen2.5 VL 32B Instruct (free)",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:8192,output:8192},modalities:{input:["text","image","video"],output:["text"]},knowledge:"2025-03",release_date:"2025-03-24",last_updated:"2025-03-24"},{providerId:"openrouter",modelId:"qwen/qwen2.5-vl-72b-instruct:free",name:"Qwen2.5 VL 72B Instruct (free)",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:32768,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-02",release_date:"2025-02-01",last_updated:"2025-02-01"},{providerId:"openrouter",modelId:"qwen/qwen3-235b-a22b-07-25:free",name:"Qwen3 235B A22B Instruct 2507 (free)",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:262144,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04-28",last_updated:"2025-07-21"},{providerId:"openrouter",modelId:"qwen/qwen3-coder:free",name:"Qwen3 Coder 480B A35B Instruct (free)",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:262144,output:66536},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-23",last_updated:"2025-07-23"},{providerId:"openrouter",modelId:"qwen/qwen3-235b-a22b-07-25",name:"Qwen3 235B A22B Instruct 2507",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.85},limit:{context:262144,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04-28",last_updated:"2025-07-21"},{providerId:"openrouter",modelId:"qwen/qwen3-8b:free",name:"Qwen3 8B (free)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:40960,output:40960},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04-28",last_updated:"2025-04-28"},{providerId:"openrouter",modelId:"qwen/qwen3-max",name:"Qwen3 Max",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.2,output:6},limit:{context:262144,output:32768},modalities:{input:["text"],output:["text"]},release_date:"2025-09-05",last_updated:"2025-09-05"},{providerId:"openrouter",modelId:"qwen/qwen3-next-80b-a3b-thinking",name:"Qwen3 Next 80B A3B Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.14,output:1.4},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-09-11",last_updated:"2025-09-11"},{providerId:"openrouter",modelId:"qwen/qwen3-coder:exacto",name:"Qwen3 Coder (exacto)",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.38,output:1.53},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-23",last_updated:"2025-07-23"},{providerId:"openrouter",modelId:"mistralai/devstral-medium-2507",name:"Devstral Medium",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.4,output:2},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2025-05",release_date:"2025-07-10",last_updated:"2025-07-10"},{providerId:"openrouter",modelId:"mistralai/devstral-2512:free",name:"Devstral 2 2512 (free)",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2025-12",release_date:"2025-09-12",last_updated:"2025-09-12"},{providerId:"openrouter",modelId:"mistralai/devstral-2512",name:"Devstral 2 2512",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.6},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2025-12",release_date:"2025-09-12",last_updated:"2025-09-12"},{providerId:"openrouter",modelId:"mistralai/codestral-2508",name:"Codestral 2508",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.3,output:0.9},limit:{context:256000,output:256000},modalities:{input:["text"],output:["text"]},knowledge:"2025-05",release_date:"2025-08-01",last_updated:"2025-08-01"},{providerId:"openrouter",modelId:"mistralai/mistral-7b-instruct:free",name:"Mistral 7B Instruct (free)",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:32768,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2024-05",release_date:"2024-05-27",last_updated:"2024-05-27"},{providerId:"openrouter",modelId:"mistralai/devstral-small-2505",name:"Devstral Small",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.06,output:0.12},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2025-05",release_date:"2025-05-07",last_updated:"2025-05-07"},{providerId:"openrouter",modelId:"mistralai/mistral-small-3.2-24b-instruct",name:"Mistral Small 3.2 24B Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:96000,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-10",release_date:"2025-06-20",last_updated:"2025-06-20"},{providerId:"openrouter",modelId:"mistralai/devstral-small-2505:free",name:"Devstral Small 2505 (free)",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:32768,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2025-05",release_date:"2025-05-21",last_updated:"2025-05-21"},{providerId:"openrouter",modelId:"mistralai/mistral-small-3.2-24b-instruct:free",name:"Mistral Small 3.2 24B (free)",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:96000,output:96000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-06",release_date:"2025-06-20",last_updated:"2025-06-20"},{providerId:"openrouter",modelId:"mistralai/mistral-medium-3",name:"Mistral Medium 3",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.4,output:2},limit:{context:131072,output:131072},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-05",release_date:"2025-05-07",last_updated:"2025-05-07"},{providerId:"openrouter",modelId:"mistralai/mistral-small-3.1-24b-instruct",name:"Mistral Small 3.1 24B Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-10",release_date:"2025-03-17",last_updated:"2025-03-17"},{providerId:"openrouter",modelId:"mistralai/devstral-small-2507",name:"Devstral Small 1.1",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.3},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2025-05",release_date:"2025-07-10",last_updated:"2025-07-10"},{providerId:"openrouter",modelId:"mistralai/mistral-medium-3.1",name:"Mistral Medium 3.1",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.4,output:2},limit:{context:262144,output:262144},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-05",release_date:"2025-08-12",last_updated:"2025-08-12"},{providerId:"openrouter",modelId:"mistralai/mistral-nemo:free",name:"Mistral Nemo (free)",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2024-07-19",last_updated:"2024-07-19"},{providerId:"openrouter",modelId:"rekaai/reka-flash-3",name:"Reka Flash 3",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:32768,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-03-12",last_updated:"2025-03-12"},{providerId:"openrouter",modelId:"meta-llama/llama-3.2-11b-vision-instruct",name:"Llama 3.2 11B Vision Instruct",attachment:!0,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0,output:0},limit:{context:131072,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-12",release_date:"2024-09-25",last_updated:"2024-09-25"},{providerId:"openrouter",modelId:"meta-llama/llama-3.3-70b-instruct:free",name:"Llama 3.3 70B Instruct (free)",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:65536,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2024-12",release_date:"2024-12-06",last_updated:"2024-12-06"},{providerId:"openrouter",modelId:"meta-llama/llama-4-scout:free",name:"Llama 4 Scout (free)",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:64000,output:64000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-08",release_date:"2025-04-05",last_updated:"2025-04-05"},{providerId:"openrouter",modelId:"anthropic/claude-opus-4",name:"Claude Opus 4",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:15,output:75,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:32000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-05-22",last_updated:"2025-05-22"},{providerId:"openrouter",modelId:"anthropic/claude-haiku-4.5",name:"Claude Haiku 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1,output:5,cache_read:0.1,cache_write:1.25},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-02-28",release_date:"2025-10-15",last_updated:"2025-10-15"},{providerId:"openrouter",modelId:"anthropic/claude-opus-4.1",name:"Claude Opus 4.1",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:15,output:75,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:32000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"openrouter",modelId:"anthropic/claude-3.7-sonnet",name:"Claude Sonnet 3.7",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:15,output:75,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:128000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2024-01",release_date:"2025-02-19",last_updated:"2025-02-19"},{providerId:"openrouter",modelId:"anthropic/claude-3.5-haiku",name:"Claude Haiku 3.5",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.8,output:4,cache_read:0.08,cache_write:1},limit:{context:200000,output:8192},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2024-07-31",release_date:"2024-10-22",last_updated:"2024-10-22"},{providerId:"openrouter",modelId:"anthropic/claude-sonnet-4",name:"Claude Sonnet 4",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-05-22",last_updated:"2025-05-22"},{providerId:"openrouter",modelId:"anthropic/claude-opus-4.5",name:"Claude Opus 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:5,output:25,cache_read:0.5,cache_write:6.25},limit:{context:200000,output:32000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-05-30",release_date:"2025-11-24",last_updated:"2025-11-24"},{providerId:"openrouter",modelId:"anthropic/claude-sonnet-4.5",name:"Claude Sonnet 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:1e6,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-07-31",release_date:"2025-09-29",last_updated:"2025-09-29"},{providerId:"openrouter",modelId:"sarvamai/sarvam-m:free",name:"Sarvam-M (free)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:32768,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2025-05",release_date:"2025-05-25",last_updated:"2025-05-25"}]},{id:"zenmux",name:"ZenMux",models:[{providerId:"zenmux",modelId:"moonshotai/kimi-k2-thinking-turbo",name:"Kimi K2 Thinking Turbo",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.15,output:8},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2025-11",release_date:"2025-11-06",last_updated:"2025-11-06"},{providerId:"zenmux",modelId:"moonshotai/kimi-k2-0905",name:"Kimi K2 0905",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.5,cache_read:0.15},limit:{context:262144,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-09-04",last_updated:"2025-09-04"},{providerId:"zenmux",modelId:"moonshotai/kimi-k2-thinking",name:"Kimi K2 Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.5},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2025-11",release_date:"2025-11-06",last_updated:"2025-11-06"},{providerId:"zenmux",modelId:"xiaomi/mimo-v2-flash",name:"MiMo-V2-Flash",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.07,output:0.21},limit:{context:256000,output:32000},modalities:{input:["text"],output:["text"]},knowledge:"2024-12-01",release_date:"2025-12-17",last_updated:"2025-12-17"},{providerId:"zenmux",modelId:"x-ai/grok-4-fast-non-reasoning",name:"Grok 4 Fast None Reasoning",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.5,cache_read:0.05},limit:{context:2000000,output:30000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-01-01",release_date:"2025-09-19",last_updated:"2025-09-19"},{providerId:"zenmux",modelId:"x-ai/grok-4",name:"Grok 4",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.75},limit:{context:256000,output:256000},modalities:{input:["image","text"],output:["text"]},knowledge:"2025-01-01",release_date:"2025-07-09",last_updated:"2025-07-09"},{providerId:"zenmux",modelId:"x-ai/grok-code-fast-1",name:"Grok Code Fast 1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:1.5,cache_read:0.02},limit:{context:256000,output:1e4},modalities:{input:["text"],output:["text"]},knowledge:"2025-01-01",release_date:"2025-08-26",last_updated:"2025-08-26"},{providerId:"zenmux",modelId:"x-ai/grok-4-fast",name:"Grok 4 Fast",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.5,cache_read:0.05},limit:{context:2000000,output:30000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-01-01",release_date:"2025-09-19",last_updated:"2025-09-19"},{providerId:"zenmux",modelId:"deepseek/deepseek-chat",name:"DeepSeek-V3.2-Exp (Non-thinking Mode)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.56,output:1.68,cache_read:0.07},limit:{context:128000,output:8000},modalities:{input:["text"],output:["text"]},knowledge:"2025-07",release_date:"2025-09-29",last_updated:"2025-09-29"},{providerId:"zenmux",modelId:"minimax/minimax-m2",name:"MiniMax M2",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:1.2},limit:{context:204800,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2025-10",release_date:"2025-10-27",last_updated:"2025-10-27"},{providerId:"zenmux",modelId:"google/gemini-2.5-pro",name:"Gemini 2.5 Pro",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.25,output:10,cache_read:0.31,cache_write:4.5},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-03-20",last_updated:"2025-06-05"},{providerId:"zenmux",modelId:"openai/gpt-5-codex",name:"GPT-5 Codex",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.25,output:10,cache_read:0.125},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-10-01",release_date:"2025-09-23",last_updated:"2025-09-23"},{providerId:"zenmux",modelId:"openai/gpt-5",name:"GPT-5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.25,output:10,cache_read:0.125},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-10-01",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"zenmux",modelId:"inclusionai/ring-1t",name:"Ring-1T",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.56,output:2.24,cache_read:0.112},limit:{context:128000,output:32000},modalities:{input:["text"],output:["text"]},knowledge:"2025-10",release_date:"2025-10-12",last_updated:"2025-10-12"},{providerId:"zenmux",modelId:"inclusionai/lint-1t",name:"Ling-1T",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.56,output:2.24,cache_read:0.112},limit:{context:128000,output:32000},modalities:{input:["text"],output:["text"]},knowledge:"2025-10",release_date:"2025-10-09",last_updated:"2025-10-09"},{providerId:"zenmux",modelId:"z-ai/glm-4.5-air",name:"GLM 4.5 Air",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.11,output:0.56,cache_read:0.022},limit:{context:128000,output:96000},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-25",last_updated:"2025-07-25"},{providerId:"zenmux",modelId:"z-ai/glm-4.6",name:"GLM 4.6",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.35,output:1.54,cache_read:0.07},limit:{context:200000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2025-09",release_date:"2025-09-30",last_updated:"2025-09-30"},{providerId:"zenmux",modelId:"qwen/qwen3-coder-plus",name:"Qwen3 Coder Plus",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:1,output:5,cache_read:0.1,cache_write:1.25},limit:{context:1e6,output:66540},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-23",last_updated:"2025-07-23"},{providerId:"zenmux",modelId:"kuaishou/kat-coder-pro-v1",name:"KAT-Coder-Pro-V1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.4,cache_read:0.12},limit:{context:256000,output:32000},modalities:{input:["text"],output:["text"]},knowledge:"2025-01-01",release_date:"2025-10-23",last_updated:"2025-10-23"},{providerId:"zenmux",modelId:"anthropic/claude-haiku-4.5",name:"Claude Haiku 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1,output:5,cache_read:0.1,cache_write:1.25},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-02-28",release_date:"2025-10-15",last_updated:"2025-10-15"},{providerId:"zenmux",modelId:"anthropic/claude-opus-4.1",name:"Claude Opus 4.1",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:15,output:75,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:32000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"zenmux",modelId:"anthropic/claude-sonnet-4.5",name:"Claude Sonnet 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:1e6,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-07-31",release_date:"2025-09-29",last_updated:"2025-09-29"}]},{id:"ovhcloud",name:"OVHcloud AI Endpoints",models:[{providerId:"ovhcloud",modelId:"mixtral-8x7b-instruct-v0.1",name:"Mixtral-8x7B-Instruct-v0.1",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.7,output:0.7},limit:{context:32000,output:32000},modalities:{input:["text"],output:["text"]},release_date:"2025-04-01",last_updated:"2025-04-01"},{providerId:"ovhcloud",modelId:"mistral-7b-instruct-v0.3",name:"Mistral-7B-Instruct-v0.3",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.11,output:0.11},limit:{context:127000,output:127000},modalities:{input:["text"],output:["text"]},release_date:"2025-04-01",last_updated:"2025-04-01"},{providerId:"ovhcloud",modelId:"llama-3.1-8b-instruct",name:"Llama-3.1-8B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.11,output:0.11},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-06-11",last_updated:"2025-06-11"},{providerId:"ovhcloud",modelId:"qwen2.5-vl-72b-instruct",name:"Qwen2.5-VL-72B-Instruct",attachment:!0,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:1.01,output:1.01},limit:{context:32000,output:32000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-03-31",last_updated:"2025-03-31"},{providerId:"ovhcloud",modelId:"mistral-nemo-instruct-2407",name:"Mistral-Nemo-Instruct-2407",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.14,output:0.14},limit:{context:118000,output:118000},modalities:{input:["text"],output:["text"]},release_date:"2024-11-20",last_updated:"2024-11-20"},{providerId:"ovhcloud",modelId:"mistral-small-3.2-24b-instruct-2506",name:"Mistral-Small-3.2-24B-Instruct-2506",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.31},limit:{context:128000,output:128000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-07-16",last_updated:"2025-07-16"},{providerId:"ovhcloud",modelId:"qwen2.5-coder-32b-instruct",name:"Qwen2.5-Coder-32B-Instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.96,output:0.96},limit:{context:32000,output:32000},modalities:{input:["text"],output:["text"]},release_date:"2025-03-24",last_updated:"2025-03-24"},{providerId:"ovhcloud",modelId:"qwen3-coder-30b-a3b-instruct",name:"Qwen3-Coder-30B-A3B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.07,output:0.26},limit:{context:256000,output:256000},modalities:{input:["text"],output:["text"]},release_date:"2025-10-28",last_updated:"2025-10-28"},{providerId:"ovhcloud",modelId:"llava-next-mistral-7b",name:"llava-next-mistral-7b",attachment:!0,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.32,output:0.32},limit:{context:32000,output:32000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-01-08",last_updated:"2025-01-08"},{providerId:"ovhcloud",modelId:"deepseek-r1-distill-llama-70b",name:"DeepSeek-R1-Distill-Llama-70B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.74,output:0.74},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-01-30",last_updated:"2025-01-30"},{providerId:"ovhcloud",modelId:"meta-llama-3_1-70b-instruct",name:"Meta-Llama-3_1-70B-Instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.74,output:0.74},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-04-01",last_updated:"2025-04-01"},{providerId:"ovhcloud",modelId:"gpt-oss-20b",name:"gpt-oss-20b",attachment:!1,reasoning:!0,tool_call:!0,cost:{input:0.05,output:0.18},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-08-28",last_updated:"2025-08-28"},{providerId:"ovhcloud",modelId:"gpt-oss-120b",name:"gpt-oss-120b",attachment:!1,reasoning:!0,tool_call:!0,cost:{input:0.09,output:0.47},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-08-28",last_updated:"2025-08-28"},{providerId:"ovhcloud",modelId:"meta-llama-3_3-70b-instruct",name:"Meta-Llama-3_3-70B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.74,output:0.74},limit:{context:131000,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-04-01",last_updated:"2025-04-01"},{providerId:"ovhcloud",modelId:"qwen3-32b",name:"Qwen3-32B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.09,output:0.25},limit:{context:32000,output:32000},modalities:{input:["text"],output:["text"]},release_date:"2025-07-16",last_updated:"2025-07-16"}]},{id:"v0",name:"v0",models:[{providerId:"v0",modelId:"v0-1.5-lg",name:"v0-1.5-lg",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:15,output:75},limit:{context:512000,output:32000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-06-09",last_updated:"2025-06-09"},{providerId:"v0",modelId:"v0-1.5-md",name:"v0-1.5-md",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15},limit:{context:128000,output:32000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-06-09",last_updated:"2025-06-09"},{providerId:"v0",modelId:"v0-1.0-md",name:"v0-1.0-md",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15},limit:{context:128000,output:32000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-05-22",last_updated:"2025-05-22"}]},{id:"iflowcn",name:"iFlow",models:[{providerId:"iflowcn",modelId:"qwen3-coder",name:"Qwen3-Coder-480B-A35B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:256000,output:64000},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-01",last_updated:"2025-07-01"},{providerId:"iflowcn",modelId:"deepseek-v3",name:"DeepSeek-V3",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:32000},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2024-12-26",last_updated:"2024-12-26"},{providerId:"iflowcn",modelId:"kimi-k2",name:"Kimi-K2",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:64000},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2024-12-01",last_updated:"2024-12-01"},{providerId:"iflowcn",modelId:"deepseek-r1",name:"DeepSeek-R1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:32000},modalities:{input:["text"],output:["text"]},knowledge:"2024-12",release_date:"2025-01-20",last_updated:"2025-01-20"},{providerId:"iflowcn",modelId:"deepseek-v3.1",name:"DeepSeek-V3.1-Terminus",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:64000},modalities:{input:["text"],output:["text"]},knowledge:"2024-12",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"iflowcn",modelId:"minimax-m2",name:"MiniMax-M2",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0,cache_read:0,cache_write:0},limit:{context:204800,output:131100},modalities:{input:["text"],output:["text"]},release_date:"2025-11-13",last_updated:"2025-11-13"},{providerId:"iflowcn",modelId:"qwen3-235b",name:"Qwen3-235B-A22B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:32000},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2024-12-01",last_updated:"2024-12-01"},{providerId:"iflowcn",modelId:"deepseek-v3.2-chat",name:"DeepSeek-V3.2",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:64000},modalities:{input:["text"],output:["text"]},knowledge:"2025-11",release_date:"2025-12-01",last_updated:"2025-12-01"},{providerId:"iflowcn",modelId:"kimi-k2-0905",name:"Kimi-K2-0905",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:256000,output:64000},modalities:{input:["text"],output:["text"]},knowledge:"2024-12",release_date:"2025-09-05",last_updated:"2025-09-05"},{providerId:"iflowcn",modelId:"kimi-k2-thinking",name:"Kimi-K2-Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:64000},modalities:{input:["text"],output:["text"]},knowledge:"2025-11",release_date:"2025-11-06",last_updated:"2025-11-06"},{providerId:"iflowcn",modelId:"qwen3-235b-a22b-thinking-2507",name:"Qwen3-235B-A22B-Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:256000,output:64000},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-01",last_updated:"2025-07-01"},{providerId:"iflowcn",modelId:"qwen3-vl-plus",name:"Qwen3-VL-Plus",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:256000,output:32000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-12",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"iflowcn",modelId:"glm-4.6",name:"GLM-4.6",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:200000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2024-12-01",last_updated:"2025-11-13"},{providerId:"iflowcn",modelId:"tstars2.0",name:"TStars-2.0",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:64000},modalities:{input:["text"],output:["text"]},knowledge:"2024-01",release_date:"2024-01-01",last_updated:"2025-01-01"},{providerId:"iflowcn",modelId:"qwen3-235b-a22b-instruct",name:"Qwen3-235B-A22B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:256000,output:64000},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-01",last_updated:"2025-07-01"},{providerId:"iflowcn",modelId:"qwen3-max",name:"Qwen3-Max",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:256000,output:32000},modalities:{input:["text"],output:["text"]},knowledge:"2024-12",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"iflowcn",modelId:"deepseek-v3.2",name:"DeepSeek-V3.2-Exp",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:64000},modalities:{input:["text"],output:["text"]},knowledge:"2024-12",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"iflowcn",modelId:"qwen3-max-preview",name:"Qwen3-Max-Preview",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:256000,output:32000},modalities:{input:["text"],output:["text"]},knowledge:"2024-12",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"iflowcn",modelId:"qwen3-coder-plus",name:"Qwen3-Coder-Plus",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:256000,output:64000},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-01",last_updated:"2025-07-01"},{providerId:"iflowcn",modelId:"qwen3-32b",name:"Qwen3-32B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:32000},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2024-12-01",last_updated:"2024-12-01"}]},{id:"synthetic",name:"Synthetic",models:[{providerId:"synthetic",modelId:"hf:Qwen/Qwen3-235B-A22B-Instruct-2507",name:"Qwen 3 235B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.6},limit:{context:256000,output:32000},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04-28",last_updated:"2025-07-21"},{providerId:"synthetic",modelId:"hf:Qwen/Qwen2.5-Coder-32B-Instruct",name:"Qwen2.5-Coder-32B-Instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.8,output:0.8},limit:{context:32768,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2024-11-11",last_updated:"2024-11-11"},{providerId:"synthetic",modelId:"hf:Qwen/Qwen3-Coder-480B-A35B-Instruct",name:"Qwen 3 Coder 480B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:2},limit:{context:256000,output:32000},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-23",last_updated:"2025-07-23"},{providerId:"synthetic",modelId:"hf:Qwen/Qwen3-235B-A22B-Thinking-2507",name:"Qwen3 235B A22B Thinking 2507",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.65,output:3},limit:{context:256000,output:32000},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-25",last_updated:"2025-07-25"},{providerId:"synthetic",modelId:"hf:MiniMaxAI/MiniMax-M2",name:"MiniMax-M2",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.55,output:2.19},limit:{context:196608,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-10-27",last_updated:"2025-10-27"},{providerId:"synthetic",modelId:"hf:meta-llama/Llama-3.1-70B-Instruct",name:"Llama-3.1-70B-Instruct",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.9,output:0.9},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-07-23",last_updated:"2024-07-23"},{providerId:"synthetic",modelId:"hf:meta-llama/Llama-3.1-8B-Instruct",name:"Llama-3.1-8B-Instruct",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.2},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-07-23",last_updated:"2024-07-23"},{providerId:"synthetic",modelId:"hf:meta-llama/Llama-3.3-70B-Instruct",name:"Llama-3.3-70B-Instruct",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.9,output:0.9},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-12-06",last_updated:"2024-12-06"},{providerId:"synthetic",modelId:"hf:meta-llama/Llama-4-Scout-17B-16E-Instruct",name:"Llama-4-Scout-17B-16E-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.6},limit:{context:328000,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-08",release_date:"2025-04-05",last_updated:"2025-04-05"},{providerId:"synthetic",modelId:"hf:meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8",name:"Llama-4-Maverick-17B-128E-Instruct-FP8",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.22,output:0.88},limit:{context:524000,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-08",release_date:"2025-04-05",last_updated:"2025-04-05"},{providerId:"synthetic",modelId:"hf:meta-llama/Llama-3.1-405B-Instruct",name:"Llama-3.1-405B-Instruct",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:3},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-07-23",last_updated:"2024-07-23"},{providerId:"synthetic",modelId:"hf:moonshotai/Kimi-K2-Instruct",name:"Kimi K2",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.5},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-07-11",last_updated:"2025-07-11"},{providerId:"synthetic",modelId:"hf:moonshotai/Kimi-K2-Instruct-0905",name:"Kimi K2 0905",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:1.2,output:1.2},limit:{context:262144,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-09-05",last_updated:"2025-09-05"},{providerId:"synthetic",modelId:"hf:moonshotai/Kimi-K2-Thinking",name:"Kimi K2 Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.55,output:2.19},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2025-11",release_date:"2025-11-07",last_updated:"2025-11-07"},{providerId:"synthetic",modelId:"hf:zai-org/GLM-4.5",name:"GLM 4.5",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.55,output:2.19},limit:{context:128000,output:96000},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-28",last_updated:"2025-07-28"},{providerId:"synthetic",modelId:"hf:zai-org/GLM-4.6",name:"GLM 4.6",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.55,output:2.19},limit:{context:200000,output:64000},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-09-30",last_updated:"2025-09-30"},{providerId:"synthetic",modelId:"hf:deepseek-ai/DeepSeek-R1",name:"DeepSeek R1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.55,output:2.19},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2025-01",release_date:"2025-01-20",last_updated:"2025-01-20"},{providerId:"synthetic",modelId:"hf:deepseek-ai/DeepSeek-R1-0528",name:"DeepSeek R1 (0528)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:8},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},release_date:"2025-08-01",last_updated:"2025-08-01"},{providerId:"synthetic",modelId:"hf:deepseek-ai/DeepSeek-V3.1-Terminus",name:"DeepSeek V3.1 Terminus",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.2,output:1.2},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},release_date:"2025-09-22",last_updated:"2025-09-25"},{providerId:"synthetic",modelId:"hf:deepseek-ai/DeepSeek-V3.2",name:"DeepSeek V3.2",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.27,output:0.4,cache_read:0.27,cache_write:0},limit:{context:162816,output:8000},modalities:{input:["text"],output:["text"]},release_date:"2025-12-01",last_updated:"2025-12-01"},{providerId:"synthetic",modelId:"hf:deepseek-ai/DeepSeek-V3",name:"DeepSeek V3",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.25,output:1.25},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2025-01-20",last_updated:"2025-05-29"},{providerId:"synthetic",modelId:"hf:deepseek-ai/DeepSeek-V3.1",name:"DeepSeek V3.1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.56,output:1.68},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},release_date:"2025-08-21",last_updated:"2025-08-21"},{providerId:"synthetic",modelId:"hf:deepseek-ai/DeepSeek-V3-0324",name:"DeepSeek V3 (0324)",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:1.2,output:1.2},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},release_date:"2025-08-01",last_updated:"2025-08-01"},{providerId:"synthetic",modelId:"hf:openai/gpt-oss-120b",name:"GPT OSS 120B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.1},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},release_date:"2025-08-05",last_updated:"2025-08-05"}]},{id:"deepinfra",name:"Deep Infra",models:[{providerId:"deepinfra",modelId:"moonshotai/Kimi-K2-Instruct",name:"Kimi K2",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.5,output:2},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-07-11",last_updated:"2025-07-11"},{providerId:"deepinfra",modelId:"moonshotai/Kimi-K2-Thinking",name:"Kimi K2 Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.47,output:2},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-11-06",last_updated:"2025-11-07"},{providerId:"deepinfra",modelId:"MiniMaxAI/MiniMax-M2",name:"MiniMax M2",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.254,output:1.02},limit:{context:262144,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-11-13",last_updated:"2025-11-13"},{providerId:"deepinfra",modelId:"openai/gpt-oss-20b",name:"GPT OSS 20B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.03,output:0.14},limit:{context:131072,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"deepinfra",modelId:"openai/gpt-oss-120b",name:"GPT OSS 120B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.05,output:0.24},limit:{context:131072,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"deepinfra",modelId:"Qwen/Qwen3-Coder-480B-A35B-Instruct",name:"Qwen3 Coder 480B A35B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.4,output:1.6},limit:{context:262144,output:66536},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-23",last_updated:"2025-07-23"},{providerId:"deepinfra",modelId:"Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo",name:"Qwen3 Coder 480B A35B Instruct Turbo",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.3,output:1.2},limit:{context:262144,output:66536},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-23",last_updated:"2025-07-23"},{providerId:"deepinfra",modelId:"zai-org/GLM-4.5",name:"GLM-4.5",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.2},limit:{context:131072,output:98304},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-28",last_updated:"2025-07-28"}]},{id:"zhipuai",name:"Zhipu AI",models:[{providerId:"zhipuai",modelId:"glm-4.6v-flash",name:"GLM-4.6V-Flash",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:32768},modalities:{input:["text","image","video"],output:["text"]},knowledge:"2025-04",release_date:"2025-12-08",last_updated:"2025-12-08"},{providerId:"zhipuai",modelId:"glm-4.6v",name:"GLM-4.6V",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:0.9},limit:{context:128000,output:32768},modalities:{input:["text","image","video"],output:["text"]},knowledge:"2025-04",release_date:"2025-12-08",last_updated:"2025-12-08"},{providerId:"zhipuai",modelId:"glm-4.6",name:"GLM-4.6",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.2,cache_read:0.11,cache_write:0},limit:{context:204800,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-09-30",last_updated:"2025-09-30"},{providerId:"zhipuai",modelId:"glm-4.5v",name:"GLM-4.5V",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:1.8},limit:{context:64000,output:16384},modalities:{input:["text","image","video"],output:["text"]},knowledge:"2025-04",release_date:"2025-08-11",last_updated:"2025-08-11"},{providerId:"zhipuai",modelId:"glm-4.5-air",name:"GLM-4.5-Air",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:1.1,cache_read:0.03,cache_write:0},limit:{context:131072,output:98304},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-28",last_updated:"2025-07-28"},{providerId:"zhipuai",modelId:"glm-4.5",name:"GLM-4.5",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.2,cache_read:0.11,cache_write:0},limit:{context:131072,output:98304},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-28",last_updated:"2025-07-28"},{providerId:"zhipuai",modelId:"glm-4.5-flash",name:"GLM-4.5-Flash",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0,cache_read:0,cache_write:0},limit:{context:131072,output:98304},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-28",last_updated:"2025-07-28"},{providerId:"zhipuai",modelId:"glm-4.7",name:"GLM-4.7",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.2,cache_read:0.11,cache_write:0},limit:{context:204800,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-12-22",last_updated:"2025-12-22"}]},{id:"submodel",name:"submodel",models:[{providerId:"submodel",modelId:"openai/gpt-oss-120b",name:"GPT OSS 120B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.5},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},release_date:"2025-08-23",last_updated:"2025-08-23"},{providerId:"submodel",modelId:"Qwen/Qwen3-235B-A22B-Instruct-2507",name:"Qwen3 235B A22B Instruct 2507",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.3},limit:{context:262144,output:131072},modalities:{input:["text"],output:["text"]},release_date:"2025-08-23",last_updated:"2025-08-23"},{providerId:"submodel",modelId:"Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8",name:"Qwen3 Coder 480B A35B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.8},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},release_date:"2025-08-23",last_updated:"2025-08-23"},{providerId:"submodel",modelId:"Qwen/Qwen3-235B-A22B-Thinking-2507",name:"Qwen3 235B A22B Thinking 2507",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.6},limit:{context:262144,output:131072},modalities:{input:["text"],output:["text"]},release_date:"2025-08-23",last_updated:"2025-08-23"},{providerId:"submodel",modelId:"zai-org/GLM-4.5-FP8",name:"GLM 4.5 FP8",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.8},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},release_date:"2025-07-28",last_updated:"2025-07-28"},{providerId:"submodel",modelId:"zai-org/GLM-4.5-Air",name:"GLM 4.5 Air",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.5},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},release_date:"2025-07-28",last_updated:"2025-07-28"},{providerId:"submodel",modelId:"deepseek-ai/DeepSeek-R1-0528",name:"DeepSeek R1 0528",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.5,output:2.15},limit:{context:75000,output:163840},modalities:{input:["text"],output:["text"]},release_date:"2025-08-23",last_updated:"2025-08-23"},{providerId:"submodel",modelId:"deepseek-ai/DeepSeek-V3.1",name:"DeepSeek V3.1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.8},limit:{context:75000,output:163840},modalities:{input:["text"],output:["text"]},release_date:"2025-08-23",last_updated:"2025-08-23"},{providerId:"submodel",modelId:"deepseek-ai/DeepSeek-V3-0324",name:"DeepSeek V3 0324",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.8},limit:{context:75000,output:163840},modalities:{input:["text"],output:["text"]},release_date:"2025-08-23",last_updated:"2025-08-23"}]},{id:"zai",name:"Z.AI",models:[{providerId:"zai",modelId:"glm-4.7",name:"GLM-4.7",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.2,cache_read:0.11,cache_write:0},limit:{context:204800,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-12-22",last_updated:"2025-12-22"},{providerId:"zai",modelId:"glm-4.5-flash",name:"GLM-4.5-Flash",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0,cache_read:0,cache_write:0},limit:{context:131072,output:98304},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-28",last_updated:"2025-07-28"},{providerId:"zai",modelId:"glm-4.5",name:"GLM-4.5",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.2,cache_read:0.11,cache_write:0},limit:{context:131072,output:98304},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-28",last_updated:"2025-07-28"},{providerId:"zai",modelId:"glm-4.5-air",name:"GLM-4.5-Air",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:1.1,cache_read:0.03,cache_write:0},limit:{context:131072,output:98304},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-28",last_updated:"2025-07-28"},{providerId:"zai",modelId:"glm-4.5v",name:"GLM-4.5V",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:1.8},limit:{context:64000,output:16384},modalities:{input:["text","image","video"],output:["text"]},knowledge:"2025-04",release_date:"2025-08-11",last_updated:"2025-08-11"},{providerId:"zai",modelId:"glm-4.6",name:"GLM-4.6",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.2,cache_read:0.11,cache_write:0},limit:{context:204800,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-09-30",last_updated:"2025-09-30"},{providerId:"zai",modelId:"glm-4.6v",name:"GLM-4.6V",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:0.9},limit:{context:128000,output:32768},modalities:{input:["text","image","video"],output:["text"]},knowledge:"2025-04",release_date:"2025-12-08",last_updated:"2025-12-08"}]},{id:"inference",name:"Inference",models:[{providerId:"inference",modelId:"mistral/mistral-nemo-12b-instruct",name:"Mistral Nemo 12B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.038,output:0.1},limit:{context:16000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-12",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"inference",modelId:"google/gemma-3",name:"Google Gemma 3",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.3},limit:{context:125000,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-12",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"inference",modelId:"osmosis/osmosis-structure-0.6b",name:"Osmosis Structure 0.6B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.5},limit:{context:4000,output:2048},modalities:{input:["text"],output:["text"]},knowledge:"2024-12",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"inference",modelId:"qwen/qwen3-embedding-4b",name:"Qwen 3 Embedding 4B",attachment:!1,reasoning:!1,tool_call:!1,temperature:!1,cost:{input:0.01,output:0},limit:{context:32000,output:2048},modalities:{input:["text"],output:["text"]},knowledge:"2024-12",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"inference",modelId:"qwen/qwen-2.5-7b-vision-instruct",name:"Qwen 2.5 7B Vision Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.2},limit:{context:125000,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-12",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"inference",modelId:"meta/llama-3.2-11b-vision-instruct",name:"Llama 3.2 11B Vision Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.055,output:0.055},limit:{context:16000,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-12",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"inference",modelId:"meta/llama-3.1-8b-instruct",name:"Llama 3.1 8B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.025,output:0.025},limit:{context:16000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"inference",modelId:"meta/llama-3.2-3b-instruct",name:"Llama 3.2 3B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.02,output:0.02},limit:{context:16000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"inference",modelId:"meta/llama-3.2-1b-instruct",name:"Llama 3.2 1B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.01,output:0.01},limit:{context:16000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2025-01-01",last_updated:"2025-01-01"}]},{id:"requesty",name:"Requesty",models:[{providerId:"requesty",modelId:"xai/grok-4",name:"Grok 4",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.75,cache_write:3},limit:{context:256000,output:64000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-01",release_date:"2025-09-09",last_updated:"2025-09-09"},{providerId:"requesty",modelId:"xai/grok-4-fast",name:"Grok 4 Fast",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.5,cache_read:0.05,cache_write:0.2},limit:{context:2000000,output:64000},modalities:{input:["text"],output:["text"]},knowledge:"2025-01",release_date:"2025-09-19",last_updated:"2025-09-19"},{providerId:"requesty",modelId:"google/gemini-3-flash-preview",name:"Gemini 3 Flash",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.5,output:3,cache_read:0.05,cache_write:1},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-12-17",last_updated:"2025-12-17"},{providerId:"requesty",modelId:"google/gemini-3-pro-preview",name:"Gemini 3 Pro",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:2,output:12,cache_read:0.2,cache_write:4.5},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-11-18",last_updated:"2025-11-18"},{providerId:"requesty",modelId:"google/gemini-2.5-flash",name:"Gemini 2.5 Flash",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:2.5,cache_read:0.075,cache_write:0.55},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-06-17",last_updated:"2025-06-17"},{providerId:"requesty",modelId:"google/gemini-2.5-pro",name:"Gemini 2.5 Pro",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.25,output:10,cache_read:0.31,cache_write:2.375},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-06-17",last_updated:"2025-06-17"},{providerId:"requesty",modelId:"openai/gpt-4.1-mini",name:"GPT-4.1 Mini",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.4,output:1.6,cache_read:0.1},limit:{context:1047576,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2025-04-14",last_updated:"2025-04-14"},{providerId:"requesty",modelId:"openai/gpt-5-nano",name:"GPT-5 Nano",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0.05,output:0.4,cache_read:0.01},limit:{context:16000,output:4000},modalities:{input:["text"],output:["text"]},knowledge:"2024-05-30",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"requesty",modelId:"openai/gpt-4.1",name:"GPT-4.1",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:8,cache_read:0.5},limit:{context:1047576,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2025-04-14",last_updated:"2025-04-14"},{providerId:"requesty",modelId:"openai/o4-mini",name:"o4 Mini",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.1,output:4.4,cache_read:0.28},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-06",release_date:"2025-04-16",last_updated:"2025-04-16"},{providerId:"requesty",modelId:"openai/gpt-5-mini",name:"GPT-5 Mini",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0.25,output:2,cache_read:0.03},limit:{context:128000,output:32000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05-30",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"requesty",modelId:"openai/gpt-4o-mini",name:"GPT-4o Mini",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.6,cache_read:0.08},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-10",release_date:"2024-07-18",last_updated:"2024-07-18"},{providerId:"requesty",modelId:"openai/gpt-5",name:"GPT-5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.25,output:10,cache_read:0.13},limit:{context:400000,output:128000},modalities:{input:["text","audio","image","video"],output:["text","audio","image"]},knowledge:"2024-09-30",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"requesty",modelId:"anthropic/claude-opus-4",name:"Claude Opus 4",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:15,output:75,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:32000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-05-22",last_updated:"2025-05-22"},{providerId:"requesty",modelId:"anthropic/claude-opus-4-1",name:"Claude Opus 4.1",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:15,output:75,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:32000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"requesty",modelId:"anthropic/claude-haiku-4-5",name:"Claude Haiku 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1,output:5,cache_read:0.1,cache_write:1.25},limit:{context:200000,output:62000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-02-01",release_date:"2025-10-15",last_updated:"2025-10-15"},{providerId:"requesty",modelId:"anthropic/claude-opus-4-5",name:"Claude Opus 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:5,output:25,cache_read:0.5,cache_write:6.25},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-11-24",last_updated:"2025-11-24"},{providerId:"requesty",modelId:"anthropic/claude-sonnet-4-5",name:"Claude Sonnet 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:1e6,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-07-31",release_date:"2025-09-29",last_updated:"2025-09-29"},{providerId:"requesty",modelId:"anthropic/claude-3-7-sonnet",name:"Claude Sonnet 3.7",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2024-01",release_date:"2025-02-19",last_updated:"2025-02-19"},{providerId:"requesty",modelId:"anthropic/claude-sonnet-4",name:"Claude Sonnet 4",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-05-22",last_updated:"2025-05-22"}]},{id:"morph",name:"Morph",models:[{providerId:"morph",modelId:"morph-v3-large",name:"Morph v3 Large",attachment:!1,reasoning:!1,tool_call:!1,temperature:!1,cost:{input:0.9,output:1.9},limit:{context:32000,output:32000},modalities:{input:["text"],output:["text"]},release_date:"2024-08-15",last_updated:"2024-08-15"},{providerId:"morph",modelId:"auto",name:"Auto",attachment:!1,reasoning:!1,tool_call:!1,temperature:!1,cost:{input:0.85,output:1.55},limit:{context:32000,output:32000},modalities:{input:["text"],output:["text"]},release_date:"2024-06-01",last_updated:"2024-06-01"},{providerId:"morph",modelId:"morph-v3-fast",name:"Morph v3 Fast",attachment:!1,reasoning:!1,tool_call:!1,temperature:!1,cost:{input:0.8,output:1.2},limit:{context:16000,output:16000},modalities:{input:["text"],output:["text"]},release_date:"2024-08-15",last_updated:"2024-08-15"}]},{id:"lmstudio",name:"LMStudio",models:[{providerId:"lmstudio",modelId:"openai/gpt-oss-20b",name:"GPT OSS 20B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"lmstudio",modelId:"qwen/qwen3-30b-a3b-2507",name:"Qwen3 30B A3B 2507",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:262144,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-30",last_updated:"2025-07-30"},{providerId:"lmstudio",modelId:"qwen/qwen3-coder-30b",name:"Qwen3 Coder 30B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:262144,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-23",last_updated:"2025-07-23"}]},{id:"sap-ai-core",name:"SAP AI Core",models:[{providerId:"sap-ai-core",modelId:"anthropic--claude-3.5-sonnet",name:"anthropic--claude-3.5-sonnet",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:8192},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2024-04-30",release_date:"2024-10-22",last_updated:"2024-10-22"},{providerId:"sap-ai-core",modelId:"anthropic--claude-4-opus",name:"anthropic--claude-4-opus",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:15,output:75,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:32000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-01-31",release_date:"2025-05-22",last_updated:"2025-05-22"},{providerId:"sap-ai-core",modelId:"gemini-2.5-flash",name:"gemini-2.5-flash",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:2.5,cache_read:0.075},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-03-25",last_updated:"2025-06-05"},{providerId:"sap-ai-core",modelId:"anthropic--claude-3-haiku",name:"anthropic--claude-3-haiku",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.25,output:1.25,cache_read:0.03,cache_write:0.3},limit:{context:200000,output:4096},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2023-08-31",release_date:"2024-03-13",last_updated:"2024-03-13"},{providerId:"sap-ai-core",modelId:"anthropic--claude-3-sonnet",name:"anthropic--claude-3-sonnet",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:3,output:15},limit:{context:200000,output:4096},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2023-08-31",release_date:"2024-03-04",last_updated:"2024-03-04"},{providerId:"sap-ai-core",modelId:"gpt-5-nano",name:"gpt-5-nano",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0.05,output:0.4,cache_read:0.01},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05-30",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"sap-ai-core",modelId:"anthropic--claude-3.7-sonnet",name:"anthropic--claude-3.7-sonnet",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2024-10-31",release_date:"2025-02-24",last_updated:"2025-02-24"},{providerId:"sap-ai-core",modelId:"gpt-5-mini",name:"gpt-5-mini",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0.25,output:2,cache_read:0.03},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05-30",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"sap-ai-core",modelId:"anthropic--claude-4.5-sonnet",name:"anthropic--claude-4.5-sonnet",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-01-31",release_date:"2025-09-29",last_updated:"2025-09-29"},{providerId:"sap-ai-core",modelId:"gemini-2.5-pro",name:"gemini-2.5-pro",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.25,output:10,cache_read:0.31},limit:{context:1048576,output:65536},modalities:{input:["text","image","audio","video","pdf"],output:["text"]},knowledge:"2025-01",release_date:"2025-03-25",last_updated:"2025-06-05"},{providerId:"sap-ai-core",modelId:"anthropic--claude-3-opus",name:"anthropic--claude-3-opus",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:15,output:75},limit:{context:200000,output:4096},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2023-08-31",release_date:"2024-02-29",last_updated:"2024-02-29"},{providerId:"sap-ai-core",modelId:"anthropic--claude-4-sonnet",name:"anthropic--claude-4-sonnet",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-01-31",release_date:"2025-05-22",last_updated:"2025-05-22"},{providerId:"sap-ai-core",modelId:"gpt-5",name:"gpt-5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.25,output:10,cache_read:0.13},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-08-07",last_updated:"2025-08-07"}]},{id:"anthropic",name:"Anthropic",models:[{providerId:"anthropic",modelId:"claude-opus-4-0",name:"Claude Opus 4 (latest)",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:15,output:75,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:32000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-05-22",last_updated:"2025-05-22"},{providerId:"anthropic",modelId:"claude-3-5-sonnet-20241022",name:"Claude Sonnet 3.5 v2",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:8192},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2024-04-30",release_date:"2024-10-22",last_updated:"2024-10-22"},{providerId:"anthropic",modelId:"claude-opus-4-1",name:"Claude Opus 4.1 (latest)",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:15,output:75,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:32000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"anthropic",modelId:"claude-haiku-4-5",name:"Claude Haiku 4.5 (latest)",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1,output:5,cache_read:0.1,cache_write:1.25},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-02-28",release_date:"2025-10-15",last_updated:"2025-10-15"},{providerId:"anthropic",modelId:"claude-3-5-sonnet-20240620",name:"Claude Sonnet 3.5",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:8192},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2024-04-30",release_date:"2024-06-20",last_updated:"2024-06-20"},{providerId:"anthropic",modelId:"claude-3-5-haiku-latest",name:"Claude Haiku 3.5 (latest)",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.8,output:4,cache_read:0.08,cache_write:1},limit:{context:200000,output:8192},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2024-07-31",release_date:"2024-10-22",last_updated:"2024-10-22"},{providerId:"anthropic",modelId:"claude-opus-4-5",name:"Claude Opus 4.5 (latest)",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:5,output:25,cache_read:0.5,cache_write:6.25},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-11-24",last_updated:"2025-11-24"},{providerId:"anthropic",modelId:"claude-3-opus-20240229",name:"Claude Opus 3",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:15,output:75,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:4096},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2023-08-31",release_date:"2024-02-29",last_updated:"2024-02-29"},{providerId:"anthropic",modelId:"claude-opus-4-5-20251101",name:"Claude Opus 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:5,output:25,cache_read:0.5,cache_write:6.25},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-11-01",last_updated:"2025-11-01"},{providerId:"anthropic",modelId:"claude-sonnet-4-5",name:"Claude Sonnet 4.5 (latest)",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-07-31",release_date:"2025-09-29",last_updated:"2025-09-29"},{providerId:"anthropic",modelId:"claude-sonnet-4-5-20250929",name:"Claude Sonnet 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-07-31",release_date:"2025-09-29",last_updated:"2025-09-29"},{providerId:"anthropic",modelId:"claude-sonnet-4-20250514",name:"Claude Sonnet 4",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-05-22",last_updated:"2025-05-22"},{providerId:"anthropic",modelId:"claude-opus-4-20250514",name:"Claude Opus 4",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:15,output:75,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:32000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-05-22",last_updated:"2025-05-22"},{providerId:"anthropic",modelId:"claude-3-5-haiku-20241022",name:"Claude Haiku 3.5",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.8,output:4,cache_read:0.08,cache_write:1},limit:{context:200000,output:8192},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2024-07-31",release_date:"2024-10-22",last_updated:"2024-10-22"},{providerId:"anthropic",modelId:"claude-3-haiku-20240307",name:"Claude Haiku 3",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.25,output:1.25,cache_read:0.03,cache_write:0.3},limit:{context:200000,output:4096},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2023-08-31",release_date:"2024-03-13",last_updated:"2024-03-13"},{providerId:"anthropic",modelId:"claude-3-7-sonnet-20250219",name:"Claude Sonnet 3.7",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2024-10-31",release_date:"2025-02-19",last_updated:"2025-02-19"},{providerId:"anthropic",modelId:"claude-3-7-sonnet-latest",name:"Claude Sonnet 3.7 (latest)",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2024-10-31",release_date:"2025-02-19",last_updated:"2025-02-19"},{providerId:"anthropic",modelId:"claude-sonnet-4-0",name:"Claude Sonnet 4 (latest)",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-05-22",last_updated:"2025-05-22"},{providerId:"anthropic",modelId:"claude-opus-4-1-20250805",name:"Claude Opus 4.1",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:15,output:75,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:32000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"anthropic",modelId:"claude-3-sonnet-20240229",name:"Claude Sonnet 3",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:0.3},limit:{context:200000,output:4096},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2023-08-31",release_date:"2024-03-04",last_updated:"2024-03-04"},{providerId:"anthropic",modelId:"claude-haiku-4-5-20251001",name:"Claude Haiku 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1,output:5,cache_read:0.1,cache_write:1.25},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-02-28",release_date:"2025-10-15",last_updated:"2025-10-15"}]},{id:"aihubmix",name:"AIHubMix",models:[{providerId:"aihubmix",modelId:"gpt-4.1-nano",name:"GPT-4.1 nano",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.4,cache_read:0.03},limit:{context:1047576,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2025-04-14",last_updated:"2025-04-14"},{providerId:"aihubmix",modelId:"qwen3-235b-a22b-instruct-2507",name:"Qwen3 235B A22B Instruct 2507",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.28,output:1.12},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-30",last_updated:"2025-07-30"},{providerId:"aihubmix",modelId:"claude-opus-4-1",name:"Claude Opus 4.1",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:16.5,output:82.5,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:32000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"aihubmix",modelId:"gpt-5.1-codex",name:"GPT-5.1 Codex",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.25,output:10,cache_read:0.13},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-11",release_date:"2025-11-15",last_updated:"2025-11-15"},{providerId:"aihubmix",modelId:"claude-haiku-4-5",name:"Claude Haiku 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.1,output:5.5,cache_read:0.11,cache_write:1.25},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-07-31",release_date:"2025-09-29",last_updated:"2025-09-29"},{providerId:"aihubmix",modelId:"gemini-3-pro-preview",name:"Gemini 3 Pro Preview",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:2,output:12,cache_read:0.5},limit:{context:1e6,output:65000},modalities:{input:["text","image","audio","video"],output:["text"]},knowledge:"2025-11",release_date:"2025-11-19",last_updated:"2025-11-19"},{providerId:"aihubmix",modelId:"gemini-2.5-flash",name:"Gemini 2.5 Flash",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.075,output:0.3,cache_read:0.02},limit:{context:1e6,output:65000},modalities:{input:["text","image","audio","video"],output:["text"]},knowledge:"2025-04",release_date:"2025-09-15",last_updated:"2025-09-15"},{providerId:"aihubmix",modelId:"gpt-4.1-mini",name:"GPT-4.1 mini",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.4,output:1.6,cache_read:0.1},limit:{context:1047576,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2025-04-14",last_updated:"2025-04-14"},{providerId:"aihubmix",modelId:"claude-sonnet-4-5",name:"Claude Sonnet 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3.3,output:16.5,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-07-31",release_date:"2025-09-29",last_updated:"2025-09-29"},{providerId:"aihubmix",modelId:"DeepSeek-V3.2-Exp",name:"DeepSeek-V3.2-Exp",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.27,output:0.41},limit:{context:163000,output:163000},modalities:{input:["text"],output:["text"]},release_date:"2025-09-29",last_updated:"2025-09-29"},{providerId:"aihubmix",modelId:"gpt-5.1-codex-mini",name:"GPT-5.1 Codex Mini",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.25,output:2,cache_read:0.03},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-11",release_date:"2025-11-15",last_updated:"2025-11-15"},{providerId:"aihubmix",modelId:"qwen3-235b-a22b-thinking-2507",name:"Qwen3 235B A22B Thinking 2507",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.28,output:2.8},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-30",last_updated:"2025-07-30"},{providerId:"aihubmix",modelId:"gpt-5.1",name:"GPT-5.1",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.25,output:10,cache_read:0.125},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-11",release_date:"2025-11-15",last_updated:"2025-11-15"},{providerId:"aihubmix",modelId:"gpt-5-nano",name:"GPT-5-Nano",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.5,output:2,cache_read:0.25},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-09-15",last_updated:"2025-09-15"},{providerId:"aihubmix",modelId:"gpt-5-codex",name:"GPT-5-Codex",attachment:!1,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.25,output:10,cache_read:0.13},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-09-15",last_updated:"2025-09-15"},{providerId:"aihubmix",modelId:"gpt-4o",name:"GPT-4o",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2.5,output:10,cache_read:1.25},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-09",release_date:"2024-05-13",last_updated:"2024-08-06"},{providerId:"aihubmix",modelId:"gpt-4.1",name:"GPT-4.1",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:8,cache_read:0.5},limit:{context:1047576,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-04",release_date:"2025-04-14",last_updated:"2025-04-14"},{providerId:"aihubmix",modelId:"glm-4.6",name:"GLM-4.6",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.27,output:1.1,cache_read:0.11,cache_write:0},limit:{context:204800,output:204800},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-09-30",last_updated:"2025-09-30"},{providerId:"aihubmix",modelId:"o4-mini",name:"o4-mini",attachment:!1,reasoning:!0,tool_call:!1,temperature:!1,cost:{input:1.5,output:6,cache_read:0.75},limit:{context:200000,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2024-09",release_date:"2025-09-15",last_updated:"2025-09-15"},{providerId:"aihubmix",modelId:"gpt-5-mini",name:"GPT-5-Mini",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.5,output:6,cache_read:0.75},limit:{context:200000,output:64000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-09-15",last_updated:"2025-09-15"},{providerId:"aihubmix",modelId:"gemini-2.5-pro",name:"Gemini 2.5 Pro",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.25,output:5,cache_read:0.31},limit:{context:2000000,output:65000},modalities:{input:["text","image","audio","video"],output:["text"]},knowledge:"2025-04",release_date:"2025-09-15",last_updated:"2025-09-15"},{providerId:"aihubmix",modelId:"DeepSeek-V3.2-Exp-Think",name:"DeepSeek-V3.2-Exp-Think",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.27,output:0.41},limit:{context:131000,output:64000},modalities:{input:["text"],output:["text"]},knowledge:"2025-09",release_date:"2025-09-29",last_updated:"2025-09-29"},{providerId:"aihubmix",modelId:"gpt-4o-2024-11-20",name:"GPT-4o (2024-11-20)",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2.5,output:10,cache_read:1.25},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-09",release_date:"2024-11-20",last_updated:"2024-11-20"},{providerId:"aihubmix",modelId:"qwen3-coder-480b-a35b-instruct",name:"Qwen3 Coder 480B A35B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.82,output:3.29},limit:{context:262144,output:131000},modalities:{input:["text"],output:["text"]},release_date:"2025-08-01",last_updated:"2025-08-01"},{providerId:"aihubmix",modelId:"gpt-5",name:"GPT-5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:5,output:20,cache_read:2.5},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-09-15",last_updated:"2025-09-15"},{providerId:"aihubmix",modelId:"Kimi-K2-0905",name:"Kimi K2 0905",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.55,output:2.19},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-09-05",last_updated:"2025-09-05"},{providerId:"aihubmix",modelId:"gpt-5-pro",name:"GPT-5-Pro",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:7,output:28,cache_read:3.5},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-09-15",last_updated:"2025-09-15"}]},{id:"fireworks-ai",name:"Fireworks AI",models:[{providerId:"fireworks-ai",modelId:"accounts/fireworks/models/deepseek-r1-0528",name:"Deepseek R1 05/28",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:8},limit:{context:160000,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2025-05",release_date:"2025-05-28",last_updated:"2025-05-28"},{providerId:"fireworks-ai",modelId:"accounts/fireworks/models/deepseek-v3p1",name:"DeepSeek V3.1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.56,output:1.68},limit:{context:163840,output:163840},modalities:{input:["text"],output:["text"]},knowledge:"2025-07",release_date:"2025-08-21",last_updated:"2025-08-21"},{providerId:"fireworks-ai",modelId:"accounts/fireworks/models/minimax-m2",name:"MiniMax-M2",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:1.2},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2024-11",release_date:"2025-10-27",last_updated:"2025-10-27"},{providerId:"fireworks-ai",modelId:"accounts/fireworks/models/deepseek-v3-0324",name:"Deepseek V3 03-24",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.9,output:0.9},limit:{context:160000,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-03-24",last_updated:"2025-03-24"},{providerId:"fireworks-ai",modelId:"accounts/fireworks/models/kimi-k2-thinking",name:"Kimi K2 Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.5},limit:{context:256000,output:16384},modalities:{input:["text"],output:["text"]},release_date:"2025-11-06",last_updated:"2025-11-06"},{providerId:"fireworks-ai",modelId:"accounts/fireworks/models/kimi-k2-instruct",name:"Kimi K2 Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:1,output:3},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2025-07-11",last_updated:"2025-07-11"},{providerId:"fireworks-ai",modelId:"accounts/fireworks/models/qwen3-235b-a22b",name:"Qwen3 235B-A22B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.22,output:0.88},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04-29",last_updated:"2025-04-29"},{providerId:"fireworks-ai",modelId:"accounts/fireworks/models/gpt-oss-20b",name:"GPT OSS 20B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.05,output:0.2},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"fireworks-ai",modelId:"accounts/fireworks/models/gpt-oss-120b",name:"GPT OSS 120B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.6},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"fireworks-ai",modelId:"accounts/fireworks/models/glm-4p5-air",name:"GLM 4.5 Air",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.22,output:0.88},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-08-01",last_updated:"2025-08-01"},{providerId:"fireworks-ai",modelId:"accounts/fireworks/models/qwen3-coder-480b-a35b-instruct",name:"Qwen3 Coder 480B A35B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.45,output:1.8},limit:{context:256000,output:32768},modalities:{input:["text"],output:["text"]},release_date:"2025-07-22",last_updated:"2025-07-22"},{providerId:"fireworks-ai",modelId:"accounts/fireworks/models/glm-4p5",name:"GLM 4.5",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.55,output:2.19},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-29",last_updated:"2025-07-29"}]},{id:"io-net",name:"IO.NET",models:[{providerId:"io-net",modelId:"moonshotai/Kimi-K2-Instruct-0905",name:"Kimi K2 Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.39,output:1.9,cache_read:0.195,cache_write:0.78},limit:{context:32768,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-08",release_date:"2024-09-05",last_updated:"2024-09-05"},{providerId:"io-net",modelId:"moonshotai/Kimi-K2-Thinking",name:"Kimi K2 Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.55,output:2.25,cache_read:0.275,cache_write:1.1},limit:{context:32768,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-08",release_date:"2024-11-01",last_updated:"2024-11-01"},{providerId:"io-net",modelId:"openai/gpt-oss-20b",name:"GPT-OSS 20B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.03,output:0.14,cache_read:0.015,cache_write:0.06},limit:{context:64000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2024-12-01",last_updated:"2024-12-01"},{providerId:"io-net",modelId:"openai/gpt-oss-120b",name:"GPT-OSS 120B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.04,output:0.4,cache_read:0.02,cache_write:0.08},limit:{context:131072,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2024-12-01",last_updated:"2024-12-01"},{providerId:"io-net",modelId:"mistralai/Devstral-Small-2505",name:"Devstral Small 2505",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.05,output:0.22,cache_read:0.025,cache_write:0.1},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-12",release_date:"2025-05-01",last_updated:"2025-05-01"},{providerId:"io-net",modelId:"mistralai/Mistral-Nemo-Instruct-2407",name:"Mistral Nemo Instruct 2407",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.02,output:0.04,cache_read:0.01,cache_write:0.04},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-05",release_date:"2024-07-01",last_updated:"2024-07-01"},{providerId:"io-net",modelId:"mistralai/Magistral-Small-2506",name:"Magistral Small 2506",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.5,output:1.5,cache_read:0.25,cache_write:1},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2025-01",release_date:"2025-06-01",last_updated:"2025-06-01"},{providerId:"io-net",modelId:"mistralai/Mistral-Large-Instruct-2411",name:"Mistral Large Instruct 2411",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:6,cache_read:1,cache_write:4},limit:{context:128000,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-10",release_date:"2024-11-01",last_updated:"2024-11-01"},{providerId:"io-net",modelId:"meta-llama/Llama-3.3-70B-Instruct",name:"Llama 3.3 70B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.13,output:0.38,cache_read:0.065,cache_write:0.26},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-12-06",last_updated:"2024-12-06"},{providerId:"io-net",modelId:"meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8",name:"Llama 4 Maverick 17B 128E Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.6,cache_read:0.075,cache_write:0.3},limit:{context:430000,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-12",release_date:"2025-01-15",last_updated:"2025-01-15"},{providerId:"io-net",modelId:"meta-llama/Llama-3.2-90B-Vision-Instruct",name:"Llama 3.2 90B Vision Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.35,output:0.4,cache_read:0.175,cache_write:0.7},limit:{context:16000,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-12",release_date:"2024-09-25",last_updated:"2024-09-25"},{providerId:"io-net",modelId:"Intel/Qwen3-Coder-480B-A35B-Instruct-int4-mixed-ar",name:"Qwen 3 Coder 480B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.22,output:0.95,cache_read:0.11,cache_write:0.44},limit:{context:106000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-12",release_date:"2025-01-15",last_updated:"2025-01-15"},{providerId:"io-net",modelId:"Qwen/Qwen2.5-VL-32B-Instruct",name:"Qwen 2.5 VL 32B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.05,output:0.22,cache_read:0.025,cache_write:0.1},limit:{context:32000,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09",release_date:"2024-11-01",last_updated:"2024-11-01"},{providerId:"io-net",modelId:"Qwen/Qwen3-235B-A22B-Thinking-2507",name:"Qwen 3 235B Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.11,output:0.6,cache_read:0.055,cache_write:0.22},limit:{context:262144,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-12",release_date:"2025-07-01",last_updated:"2025-07-01"},{providerId:"io-net",modelId:"Qwen/Qwen3-Next-80B-A3B-Instruct",name:"Qwen 3 Next 80B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.8,cache_read:0.05,cache_write:0.2},limit:{context:262144,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-12",release_date:"2025-01-10",last_updated:"2025-01-10"},{providerId:"io-net",modelId:"zai-org/GLM-4.6",name:"GLM 4.6",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.4,output:1.75,cache_read:0.2,cache_write:0.8},limit:{context:200000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2024-11-15",last_updated:"2024-11-15"},{providerId:"io-net",modelId:"deepseek-ai/DeepSeek-R1-0528",name:"DeepSeek R1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:2,output:8.75,cache_read:1,cache_write:4},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2025-01-20",last_updated:"2025-05-28"}]},{id:"modelscope",name:"ModelScope",models:[{providerId:"modelscope",modelId:"ZhipuAI/GLM-4.5",name:"GLM-4.5",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:131072,output:98304},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-28",last_updated:"2025-07-28"},{providerId:"modelscope",modelId:"ZhipuAI/GLM-4.6",name:"GLM-4.6",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:202752,output:98304},modalities:{input:["text"],output:["text"]},knowledge:"2025-07",release_date:"2025-09-30",last_updated:"2025-09-30"},{providerId:"modelscope",modelId:"Qwen/Qwen3-30B-A3B-Thinking-2507",name:"Qwen3 30B A3B Thinking 2507",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:262144,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-30",last_updated:"2025-07-30"},{providerId:"modelscope",modelId:"Qwen/Qwen3-235B-A22B-Instruct-2507",name:"Qwen3 235B A22B Instruct 2507",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:262144,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04-28",last_updated:"2025-07-21"},{providerId:"modelscope",modelId:"Qwen/Qwen3-Coder-30B-A3B-Instruct",name:"Qwen3 Coder 30B A3B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:262144,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-31",last_updated:"2025-07-31"},{providerId:"modelscope",modelId:"Qwen/Qwen3-30B-A3B-Instruct-2507",name:"Qwen3 30B A3B Instruct 2507",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:262144,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-30",last_updated:"2025-07-30"},{providerId:"modelscope",modelId:"Qwen/Qwen3-235B-A22B-Thinking-2507",name:"Qwen3-235B-A22B-Thinking-2507",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:262144,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-25",last_updated:"2025-07-25"}]},{id:"azure-cognitive-services",name:"Azure Cognitive Services",models:[{providerId:"azure-cognitive-services",modelId:"gpt-3.5-turbo-1106",name:"GPT-3.5 Turbo 1106",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:1,output:2},limit:{context:16384,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2021-08",release_date:"2023-11-06",last_updated:"2023-11-06"},{providerId:"azure-cognitive-services",modelId:"mistral-small-2503",name:"Mistral Small 3.1",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.3},limit:{context:128000,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09",release_date:"2025-03-01",last_updated:"2025-03-01"},{providerId:"azure-cognitive-services",modelId:"codestral-2501",name:"Codestral 25.01",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.3,output:0.9},limit:{context:256000,output:256000},modalities:{input:["text"],output:["text"]},knowledge:"2024-03",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"azure-cognitive-services",modelId:"mistral-large-2411",name:"Mistral Large 24.11",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:6},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2024-09",release_date:"2024-11-01",last_updated:"2024-11-01"},{providerId:"azure-cognitive-services",modelId:"gpt-5-pro",name:"GPT-5 Pro",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:15,output:120},limit:{context:400000,output:272000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-10-06",last_updated:"2025-10-06"},{providerId:"azure-cognitive-services",modelId:"deepseek-v3.2",name:"DeepSeek-V3.2",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.28,output:0.42,cache_read:0.028},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2025-12-01",last_updated:"2025-12-01"},{providerId:"azure-cognitive-services",modelId:"mai-ds-r1",name:"MAI-DS-R1",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:1.35,output:5.4},limit:{context:128000,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-06",release_date:"2025-01-20",last_updated:"2025-01-20"},{providerId:"azure-cognitive-services",modelId:"gpt-5",name:"GPT-5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.25,output:10,cache_read:0.13},limit:{context:272000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"azure-cognitive-services",modelId:"gpt-4o-mini",name:"GPT-4o mini",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.6,cache_read:0.08},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-09",release_date:"2024-07-18",last_updated:"2024-07-18"},{providerId:"azure-cognitive-services",modelId:"phi-4-reasoning-plus",name:"Phi-4-reasoning-plus",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:0.125,output:0.5},limit:{context:32000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-12-11",last_updated:"2024-12-11"},{providerId:"azure-cognitive-services",modelId:"gpt-4-turbo-vision",name:"GPT-4 Turbo Vision",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:10,output:30},limit:{context:128000,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-11",release_date:"2023-11-06",last_updated:"2024-04-09"},{providerId:"azure-cognitive-services",modelId:"phi-4-reasoning",name:"Phi-4-reasoning",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:0.125,output:0.5},limit:{context:32000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-12-11",last_updated:"2024-12-11"},{providerId:"azure-cognitive-services",modelId:"phi-3-medium-4k-instruct",name:"Phi-3-medium-instruct (4k)",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.17,output:0.68},limit:{context:4096,output:1024},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-04-23",last_updated:"2024-04-23"},{providerId:"azure-cognitive-services",modelId:"codex-mini",name:"Codex Mini",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.5,output:6,cache_read:0.375},limit:{context:200000,output:1e5},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2025-05-16",last_updated:"2025-05-16"},{providerId:"azure-cognitive-services",modelId:"o3",name:"o3",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:2,output:8,cache_read:0.5},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05",release_date:"2025-04-16",last_updated:"2025-04-16"},{providerId:"azure-cognitive-services",modelId:"mistral-nemo",name:"Mistral Nemo",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.15},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2024-07-18",last_updated:"2024-07-18"},{providerId:"azure-cognitive-services",modelId:"gpt-3.5-turbo-instruct",name:"GPT-3.5 Turbo Instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:1.5,output:2},limit:{context:4096,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2021-08",release_date:"2023-09-21",last_updated:"2023-09-21"},{providerId:"azure-cognitive-services",modelId:"meta-llama-3.1-8b-instruct",name:"Meta-Llama-3.1-8B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.3,output:0.61},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-07-23",last_updated:"2024-07-23"},{providerId:"azure-cognitive-services",modelId:"text-embedding-ada-002",name:"text-embedding-ada-002",attachment:!1,reasoning:!1,tool_call:!1,cost:{input:0.1,output:0},limit:{context:8192,output:1536},modalities:{input:["text"],output:["text"]},release_date:"2022-12-15",last_updated:"2022-12-15"},{providerId:"azure-cognitive-services",modelId:"cohere-embed-v3-english",name:"Embed v3 English",attachment:!1,reasoning:!1,tool_call:!1,temperature:!1,cost:{input:0.1,output:0},limit:{context:512,output:1024},modalities:{input:["text"],output:["text"]},release_date:"2023-11-07",last_updated:"2023-11-07"},{providerId:"azure-cognitive-services",modelId:"llama-4-scout-17b-16e-instruct",name:"Llama 4 Scout 17B 16E Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.78},limit:{context:128000,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-08",release_date:"2025-04-05",last_updated:"2025-04-05"},{providerId:"azure-cognitive-services",modelId:"o1-mini",name:"o1-mini",attachment:!1,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.1,output:4.4,cache_read:0.55},limit:{context:128000,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2023-09",release_date:"2024-09-12",last_updated:"2024-09-12"},{providerId:"azure-cognitive-services",modelId:"gpt-5-mini",name:"GPT-5 Mini",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0.25,output:2,cache_read:0.03},limit:{context:272000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05-30",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"azure-cognitive-services",modelId:"phi-3.5-moe-instruct",name:"Phi-3.5-MoE-instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.16,output:0.64},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-08-20",last_updated:"2024-08-20"},{providerId:"azure-cognitive-services",modelId:"gpt-5.1-chat",name:"GPT-5.1 Chat",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.25,output:10,cache_read:0.125},limit:{context:128000,output:16384},modalities:{input:["text","image","audio"],output:["text","image","audio"]},knowledge:"2024-09-30",release_date:"2025-11-14",last_updated:"2025-11-14"},{providerId:"azure-cognitive-services",modelId:"grok-3-mini",name:"Grok 3 Mini",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:0.5,cache_read:0.075},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-11",release_date:"2025-02-17",last_updated:"2025-02-17"},{providerId:"azure-cognitive-services",modelId:"o1",name:"o1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:15,output:60,cache_read:7.5},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-09",release_date:"2024-12-05",last_updated:"2024-12-05"},{providerId:"azure-cognitive-services",modelId:"meta-llama-3-8b-instruct",name:"Meta-Llama-3-8B-Instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.3,output:0.61},limit:{context:8192,output:2048},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-04-18",last_updated:"2024-04-18"},{providerId:"azure-cognitive-services",modelId:"phi-4-multimodal",name:"Phi-4-multimodal",attachment:!0,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.08,output:0.32},limit:{context:128000,output:4096},modalities:{input:["text","image","audio"],output:["text"]},knowledge:"2023-10",release_date:"2024-12-11",last_updated:"2024-12-11"},{providerId:"azure-cognitive-services",modelId:"o4-mini",name:"o4-mini",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.1,output:4.4,cache_read:0.28},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05",release_date:"2025-04-16",last_updated:"2025-04-16"},{providerId:"azure-cognitive-services",modelId:"gpt-4.1",name:"GPT-4.1",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:8,cache_read:0.5},limit:{context:1047576,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05",release_date:"2025-04-14",last_updated:"2025-04-14"},{providerId:"azure-cognitive-services",modelId:"ministral-3b",name:"Ministral 3B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.04,output:0.04},limit:{context:128000,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-03",release_date:"2024-10-22",last_updated:"2024-10-22"},{providerId:"azure-cognitive-services",modelId:"gpt-3.5-turbo-0301",name:"GPT-3.5 Turbo 0301",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:1.5,output:2},limit:{context:4096,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2021-08",release_date:"2023-03-01",last_updated:"2023-03-01"},{providerId:"azure-cognitive-services",modelId:"gpt-4o",name:"GPT-4o",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2.5,output:10,cache_read:1.25},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-09",release_date:"2024-05-13",last_updated:"2024-05-13"},{providerId:"azure-cognitive-services",modelId:"phi-3-mini-128k-instruct",name:"Phi-3-mini-instruct (128k)",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.13,output:0.52},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-04-23",last_updated:"2024-04-23"},{providerId:"azure-cognitive-services",modelId:"llama-3.2-90b-vision-instruct",name:"Llama-3.2-90B-Vision-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2.04,output:2.04},limit:{context:128000,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-12",release_date:"2024-09-25",last_updated:"2024-09-25"},{providerId:"azure-cognitive-services",modelId:"gpt-5-codex",name:"GPT-5-Codex",attachment:!1,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.25,output:10,cache_read:0.13},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-09-30",release_date:"2025-09-15",last_updated:"2025-09-15"},{providerId:"azure-cognitive-services",modelId:"gpt-5-nano",name:"GPT-5 Nano",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0.05,output:0.4,cache_read:0.01},limit:{context:272000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05-30",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"azure-cognitive-services",modelId:"gpt-5.1",name:"GPT-5.1",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.25,output:10,cache_read:0.125},limit:{context:272000,output:128000},modalities:{input:["text","image","audio"],output:["text","image","audio"]},knowledge:"2024-09-30",release_date:"2025-11-14",last_updated:"2025-11-14"},{providerId:"azure-cognitive-services",modelId:"o3-mini",name:"o3-mini",attachment:!1,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.1,output:4.4,cache_read:0.55},limit:{context:200000,output:1e5},modalities:{input:["text"],output:["text"]},knowledge:"2024-05",release_date:"2024-12-20",last_updated:"2025-01-29"},{providerId:"azure-cognitive-services",modelId:"model-router",name:"Model Router",attachment:!0,reasoning:!1,tool_call:!0,cost:{input:0.14,output:0},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},release_date:"2025-05-19",last_updated:"2025-11-18"},{providerId:"azure-cognitive-services",modelId:"kimi-k2-thinking",name:"Kimi K2 Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.5,cache_read:0.15},limit:{context:262144,output:262144},modalities:{input:["text"],output:["text"]},knowledge:"2024-08",release_date:"2025-11-06",last_updated:"2025-12-02"},{providerId:"azure-cognitive-services",modelId:"gpt-5.1-codex-mini",name:"GPT-5.1 Codex Mini",attachment:!1,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0.25,output:2,cache_read:0.025},limit:{context:400000,output:128000},modalities:{input:["text","image","audio"],output:["text","image","audio"]},knowledge:"2024-09-30",release_date:"2025-11-14",last_updated:"2025-11-14"},{providerId:"azure-cognitive-services",modelId:"llama-3.3-70b-instruct",name:"Llama-3.3-70B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.71,output:0.71},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-12-06",last_updated:"2024-12-06"},{providerId:"azure-cognitive-services",modelId:"o1-preview",name:"o1-preview",attachment:!1,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:16.5,output:66,cache_read:8.25},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2023-09",release_date:"2024-09-12",last_updated:"2024-09-12"},{providerId:"azure-cognitive-services",modelId:"phi-3.5-mini-instruct",name:"Phi-3.5-mini-instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.13,output:0.52},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-08-20",last_updated:"2024-08-20"},{providerId:"azure-cognitive-services",modelId:"gpt-3.5-turbo-0613",name:"GPT-3.5 Turbo 0613",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:3,output:4},limit:{context:16384,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2021-08",release_date:"2023-06-13",last_updated:"2023-06-13"},{providerId:"azure-cognitive-services",modelId:"gpt-4-turbo",name:"GPT-4 Turbo",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:10,output:30},limit:{context:128000,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-11",release_date:"2023-11-06",last_updated:"2024-04-09"},{providerId:"azure-cognitive-services",modelId:"meta-llama-3.1-70b-instruct",name:"Meta-Llama-3.1-70B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2.68,output:3.54},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-07-23",last_updated:"2024-07-23"},{providerId:"azure-cognitive-services",modelId:"phi-3-small-8k-instruct",name:"Phi-3-small-instruct (8k)",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.15,output:0.6},limit:{context:8192,output:2048},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-04-23",last_updated:"2024-04-23"},{providerId:"azure-cognitive-services",modelId:"deepseek-v3-0324",name:"DeepSeek-V3-0324",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:1.14,output:4.56},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2025-03-24",last_updated:"2025-03-24"},{providerId:"azure-cognitive-services",modelId:"meta-llama-3-70b-instruct",name:"Meta-Llama-3-70B-Instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:2.68,output:3.54},limit:{context:8192,output:2048},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-04-18",last_updated:"2024-04-18"},{providerId:"azure-cognitive-services",modelId:"text-embedding-3-large",name:"text-embedding-3-large",attachment:!1,reasoning:!1,tool_call:!1,cost:{input:0.13,output:0},limit:{context:8191,output:3072},modalities:{input:["text"],output:["text"]},release_date:"2024-01-25",last_updated:"2024-01-25"},{providerId:"azure-cognitive-services",modelId:"grok-3",name:"Grok 3",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.75},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-11",release_date:"2025-02-17",last_updated:"2025-02-17"},{providerId:"azure-cognitive-services",modelId:"gpt-3.5-turbo-0125",name:"GPT-3.5 Turbo 0125",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.5,output:1.5},limit:{context:16384,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2021-08",release_date:"2024-01-25",last_updated:"2024-01-25"},{providerId:"azure-cognitive-services",modelId:"claude-sonnet-4-5",name:"Claude Sonnet 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-07-31",release_date:"2025-11-18",last_updated:"2025-11-18"},{providerId:"azure-cognitive-services",modelId:"phi-4-mini-reasoning",name:"Phi-4-mini-reasoning",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.075,output:0.3},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-12-11",last_updated:"2024-12-11"},{providerId:"azure-cognitive-services",modelId:"phi-4",name:"Phi-4",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.125,output:0.5},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-12-11",last_updated:"2024-12-11"},{providerId:"azure-cognitive-services",modelId:"deepseek-v3.1",name:"DeepSeek-V3.1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.56,output:1.68},limit:{context:131072,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2025-08-21",last_updated:"2025-08-21"},{providerId:"azure-cognitive-services",modelId:"gpt-5-chat",name:"GPT-5 Chat",attachment:!0,reasoning:!0,tool_call:!1,temperature:!1,cost:{input:1.25,output:10,cache_read:0.13},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-10-24",release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"azure-cognitive-services",modelId:"gpt-4.1-mini",name:"GPT-4.1 mini",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.4,output:1.6,cache_read:0.1},limit:{context:1047576,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05",release_date:"2025-04-14",last_updated:"2025-04-14"},{providerId:"azure-cognitive-services",modelId:"llama-4-maverick-17b-128e-instruct-fp8",name:"Llama 4 Maverick 17B 128E Instruct FP8",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.25,output:1},limit:{context:128000,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-08",release_date:"2025-04-05",last_updated:"2025-04-05"},{providerId:"azure-cognitive-services",modelId:"cohere-command-r-plus-08-2024",name:"Command R+",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:2.5,output:10},limit:{context:128000,output:4000},modalities:{input:["text"],output:["text"]},knowledge:"2024-06-01",release_date:"2024-08-30",last_updated:"2024-08-30"},{providerId:"azure-cognitive-services",modelId:"cohere-command-a",name:"Command A",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:2.5,output:10},limit:{context:256000,output:8000},modalities:{input:["text"],output:["text"]},knowledge:"2024-06-01",release_date:"2025-03-13",last_updated:"2025-03-13"},{providerId:"azure-cognitive-services",modelId:"phi-3-small-128k-instruct",name:"Phi-3-small-instruct (128k)",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.15,output:0.6},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-04-23",last_updated:"2024-04-23"},{providerId:"azure-cognitive-services",modelId:"claude-opus-4-5",name:"Claude Opus 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:5,output:25,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-11-24",last_updated:"2025-08-01"},{providerId:"azure-cognitive-services",modelId:"mistral-medium-2505",name:"Mistral Medium 3",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.4,output:2},limit:{context:128000,output:128000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-05",release_date:"2025-05-07",last_updated:"2025-05-07"},{providerId:"azure-cognitive-services",modelId:"deepseek-v3.2-speciale",name:"DeepSeek-V3.2-Speciale",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:0.28,output:0.42},limit:{context:128000,output:128000},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2025-12-01",last_updated:"2025-12-01"},{providerId:"azure-cognitive-services",modelId:"claude-haiku-4-5",name:"Claude Haiku 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1,output:5,cache_read:0.1,cache_write:1.25},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-02-31",release_date:"2025-11-18",last_updated:"2025-11-18"},{providerId:"azure-cognitive-services",modelId:"phi-3-mini-4k-instruct",name:"Phi-3-mini-instruct (4k)",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.13,output:0.52},limit:{context:4096,output:1024},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-04-23",last_updated:"2024-04-23"},{providerId:"azure-cognitive-services",modelId:"gpt-5.1-codex",name:"GPT-5.1 Codex",attachment:!1,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.25,output:10,cache_read:0.125},limit:{context:400000,output:128000},modalities:{input:["text","image","audio"],output:["text","image","audio"]},knowledge:"2024-09-30",release_date:"2025-11-14",last_updated:"2025-11-14"},{providerId:"azure-cognitive-services",modelId:"grok-code-fast-1",name:"Grok Code Fast 1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:1.5,cache_read:0.02},limit:{context:256000,output:1e4},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2025-08-28",last_updated:"2025-08-28"},{providerId:"azure-cognitive-services",modelId:"deepseek-r1",name:"DeepSeek-R1",attachment:!1,reasoning:!0,tool_call:!1,temperature:!0,cost:{input:1.35,output:5.4},limit:{context:163840,output:163840},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2025-01-20",last_updated:"2025-01-20"},{providerId:"azure-cognitive-services",modelId:"meta-llama-3.1-405b-instruct",name:"Meta-Llama-3.1-405B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:5.33,output:16},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-07-23",last_updated:"2024-07-23"},{providerId:"azure-cognitive-services",modelId:"gpt-4-32k",name:"GPT-4 32K",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:60,output:120},limit:{context:32768,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2023-11",release_date:"2023-03-14",last_updated:"2023-03-14"},{providerId:"azure-cognitive-services",modelId:"phi-4-mini",name:"Phi-4-mini",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.075,output:0.3},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-12-11",last_updated:"2024-12-11"},{providerId:"azure-cognitive-services",modelId:"cohere-embed-v3-multilingual",name:"Embed v3 Multilingual",attachment:!1,reasoning:!1,tool_call:!1,temperature:!1,cost:{input:0.1,output:0},limit:{context:512,output:1024},modalities:{input:["text"],output:["text"]},release_date:"2023-11-07",last_updated:"2023-11-07"},{providerId:"azure-cognitive-services",modelId:"grok-4",name:"Grok 4",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.75},limit:{context:256000,output:64000},modalities:{input:["text"],output:["text"]},knowledge:"2025-07",release_date:"2025-07-09",last_updated:"2025-07-09"},{providerId:"azure-cognitive-services",modelId:"cohere-command-r-08-2024",name:"Command R",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.6},limit:{context:128000,output:4000},modalities:{input:["text"],output:["text"]},knowledge:"2024-06-01",release_date:"2024-08-30",last_updated:"2024-08-30"},{providerId:"azure-cognitive-services",modelId:"cohere-embed-v-4-0",name:"Embed v4",attachment:!0,reasoning:!1,tool_call:!1,temperature:!1,cost:{input:0.12,output:0},limit:{context:128000,output:1536},modalities:{input:["text","image"],output:["text"]},release_date:"2025-04-15",last_updated:"2025-04-15"},{providerId:"azure-cognitive-services",modelId:"llama-3.2-11b-vision-instruct",name:"Llama-3.2-11B-Vision-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.37,output:0.37},limit:{context:128000,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-12",release_date:"2024-09-25",last_updated:"2024-09-25"},{providerId:"azure-cognitive-services",modelId:"gpt-5.2-chat",name:"GPT-5.2 Chat",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.75,output:14,cache_read:0.175},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-08-31",release_date:"2025-12-11",last_updated:"2025-12-11"},{providerId:"azure-cognitive-services",modelId:"claude-opus-4-1",name:"Claude Opus 4.1",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:15,output:75,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:32000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-11-18",last_updated:"2025-11-18"},{providerId:"azure-cognitive-services",modelId:"gpt-4",name:"GPT-4",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:60,output:120},limit:{context:8192,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2023-11",release_date:"2023-03-14",last_updated:"2023-03-14"},{providerId:"azure-cognitive-services",modelId:"phi-3-medium-128k-instruct",name:"Phi-3-medium-instruct (128k)",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.17,output:0.68},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-10",release_date:"2024-04-23",last_updated:"2024-04-23"},{providerId:"azure-cognitive-services",modelId:"grok-4-fast-reasoning",name:"Grok 4 Fast (Reasoning)",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.5,cache_read:0.05},limit:{context:2000000,output:30000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-07",release_date:"2025-09-19",last_updated:"2025-09-19"},{providerId:"azure-cognitive-services",modelId:"deepseek-r1-0528",name:"DeepSeek-R1-0528",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.35,output:5.4},limit:{context:163840,output:163840},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2025-05-28",last_updated:"2025-05-28"},{providerId:"azure-cognitive-services",modelId:"grok-4-fast-non-reasoning",name:"Grok 4 Fast (Non-Reasoning)",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.5,cache_read:0.05},limit:{context:2000000,output:30000},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-07",release_date:"2025-09-19",last_updated:"2025-09-19"},{providerId:"azure-cognitive-services",modelId:"text-embedding-3-small",name:"text-embedding-3-small",attachment:!1,reasoning:!1,tool_call:!1,cost:{input:0.02,output:0},limit:{context:8191,output:1536},modalities:{input:["text"],output:["text"]},release_date:"2024-01-25",last_updated:"2024-01-25"},{providerId:"azure-cognitive-services",modelId:"gpt-4.1-nano",name:"GPT-4.1 nano",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.4,cache_read:0.03},limit:{context:1047576,output:32768},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-05",release_date:"2025-04-14",last_updated:"2025-04-14"}]},{id:"llama",name:"Llama",models:[{providerId:"llama",modelId:"llama-3.3-8b-instruct",name:"Llama-3.3-8B-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-12-06",last_updated:"2024-12-06"},{providerId:"llama",modelId:"llama-4-maverick-17b-128e-instruct-fp8",name:"Llama-4-Maverick-17B-128E-Instruct-FP8",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-08",release_date:"2025-04-05",last_updated:"2025-04-05"},{providerId:"llama",modelId:"llama-3.3-70b-instruct",name:"Llama-3.3-70B-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-12-06",last_updated:"2024-12-06"},{providerId:"llama",modelId:"llama-4-scout-17b-16e-instruct-fp8",name:"Llama-4-Scout-17B-16E-Instruct-FP8",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-08",release_date:"2025-04-05",last_updated:"2025-04-05"},{providerId:"llama",modelId:"groq-llama-4-maverick-17b-128e-instruct",name:"Groq-Llama-4-Maverick-17B-128E-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2025-01",release_date:"2025-04-05",last_updated:"2025-04-05"},{providerId:"llama",modelId:"cerebras-llama-4-scout-17b-16e-instruct",name:"Cerebras-Llama-4-Scout-17B-16E-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2025-01",release_date:"2025-04-05",last_updated:"2025-04-05"},{providerId:"llama",modelId:"cerebras-llama-4-maverick-17b-128e-instruct",name:"Cerebras-Llama-4-Maverick-17B-128E-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2025-01",release_date:"2025-04-05",last_updated:"2025-04-05"}]},{id:"scaleway",name:"Scaleway",models:[{providerId:"scaleway",modelId:"qwen3-235b-a22b-instruct-2507",name:"Qwen3 235B A22B Instruct 2507",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.75,output:2.25},limit:{context:260000,output:8192},modalities:{input:["text"],output:["text"]},release_date:"2025-07-01",last_updated:"2025-07-01"},{providerId:"scaleway",modelId:"pixtral-12b-2409",name:"Pixtral 12B 2409",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.2},limit:{context:128000,output:4096},modalities:{input:["text","image"],output:["text"]},release_date:"2024-09-25",last_updated:"2024-09-25"},{providerId:"scaleway",modelId:"llama-3.1-8b-instruct",name:"Llama 3.1 8B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.2},limit:{context:128000,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2025-01-01",last_updated:"2025-01-01"},{providerId:"scaleway",modelId:"mistral-nemo-instruct-2407",name:"Mistral Nemo Instruct 2407",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.2},limit:{context:128000,output:8192},modalities:{input:["text"],output:["text"]},release_date:"2024-07-25",last_updated:"2024-07-25"},{providerId:"scaleway",modelId:"mistral-small-3.2-24b-instruct-2506",name:"Mistral Small 3.2 24B Instruct (2506)",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.35},limit:{context:128000,output:8192},modalities:{input:["text","image"],output:["text"]},release_date:"2025-06-20",last_updated:"2025-06-20"},{providerId:"scaleway",modelId:"qwen3-coder-30b-a3b-instruct",name:"Qwen3-Coder 30B-A3B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.8},limit:{context:128000,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-04",last_updated:"2025-04"},{providerId:"scaleway",modelId:"llama-3.3-70b-instruct",name:"Llama-3.3-70B-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.9,output:0.9},limit:{context:1e5,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-12-06",last_updated:"2024-12-06"},{providerId:"scaleway",modelId:"deepseek-r1-distill-llama-70b",name:"DeepSeek R1 Distill Llama 70B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.9,output:0.9},limit:{context:32000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2025-01-20",last_updated:"2025-01-20"},{providerId:"scaleway",modelId:"voxtral-small-24b-2507",name:"Voxtral Small 24B 2507",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.35},limit:{context:32000,output:8192},modalities:{input:["text","audio"],output:["text"]},release_date:"2025-07-01",last_updated:"2025-07-01"},{providerId:"scaleway",modelId:"gpt-oss-120b",name:"GPT-OSS 120B",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.6},limit:{context:128000,output:8192},modalities:{input:["text"],output:["text"]},release_date:"2024-01-01",last_updated:"2024-01-01"},{providerId:"scaleway",modelId:"bge-multilingual-gemma2",name:"BGE Multilingual Gemma2",attachment:!1,reasoning:!1,tool_call:!1,temperature:!1,cost:{input:0.13,output:0},limit:{context:8191,output:3072},modalities:{input:["text"],output:["text"]},release_date:"2024-07-26",last_updated:"2025-06-15"},{providerId:"scaleway",modelId:"gemma-3-27b-it",name:"Gemma-3-27B-IT",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.25,output:0.5},limit:{context:40000,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-12",release_date:"2024-12-01",last_updated:"2025-09-05"}]},{id:"amazon-bedrock",name:"Amazon Bedrock",models:[{providerId:"amazon-bedrock",modelId:"cohere.command-r-plus-v1:0",name:"Command R+",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:3,output:15},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-04-04",last_updated:"2024-04-04"},{providerId:"amazon-bedrock",modelId:"anthropic.claude-v2",name:"Claude 2",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:8,output:24},limit:{context:1e5,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-08",release_date:"2023-07-11",last_updated:"2023-07-11"},{providerId:"amazon-bedrock",modelId:"anthropic.claude-3-7-sonnet-20250219-v1:0",name:"Claude Sonnet 3.7",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:8192},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2024-04",release_date:"2025-02-19",last_updated:"2025-02-19"},{providerId:"amazon-bedrock",modelId:"anthropic.claude-sonnet-4-20250514-v1:0",name:"Claude Sonnet 4",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2024-04",release_date:"2025-05-22",last_updated:"2025-05-22"},{providerId:"amazon-bedrock",modelId:"qwen.qwen3-coder-30b-a3b-v1:0",name:"Qwen3 Coder 30B A3B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.6},limit:{context:262144,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2025-09-18",last_updated:"2025-09-18"},{providerId:"amazon-bedrock",modelId:"google.gemma-3-4b-it",name:"Gemma 3 4B IT",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.04,output:0.08},limit:{context:128000,output:4096},modalities:{input:["text","image"],output:["text"]},release_date:"2024-12-01",last_updated:"2024-12-01"},{providerId:"amazon-bedrock",modelId:"minimax.minimax-m2",name:"MiniMax M2",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.3,output:1.2},limit:{context:204608,output:128000},modalities:{input:["text"],output:["text"]},release_date:"2025-10-27",last_updated:"2025-10-27"},{providerId:"amazon-bedrock",modelId:"meta.llama3-2-11b-instruct-v1:0",name:"Llama 3.2 11B Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.16,output:0.16},limit:{context:128000,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-12",release_date:"2024-09-25",last_updated:"2024-09-25"},{providerId:"amazon-bedrock",modelId:"qwen.qwen3-next-80b-a3b",name:"Qwen/Qwen3-Next-80B-A3B-Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.14,output:1.4},limit:{context:262000,output:262000},modalities:{input:["text"],output:["text"]},release_date:"2025-09-18",last_updated:"2025-11-25"},{providerId:"amazon-bedrock",modelId:"anthropic.claude-3-haiku-20240307-v1:0",name:"Claude Haiku 3",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.25,output:1.25},limit:{context:200000,output:4096},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2024-02",release_date:"2024-03-13",last_updated:"2024-03-13"},{providerId:"amazon-bedrock",modelId:"meta.llama3-2-90b-instruct-v1:0",name:"Llama 3.2 90B Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.72,output:0.72},limit:{context:128000,output:4096},modalities:{input:["text","image"],output:["text"]},knowledge:"2023-12",release_date:"2024-09-25",last_updated:"2024-09-25"},{providerId:"amazon-bedrock",modelId:"qwen.qwen3-vl-235b-a22b",name:"Qwen/Qwen3-VL-235B-A22B-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.3,output:1.5},limit:{context:262000,output:262000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-10-04",last_updated:"2025-11-25"},{providerId:"amazon-bedrock",modelId:"meta.llama3-2-1b-instruct-v1:0",name:"Llama 3.2 1B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.1,output:0.1},limit:{context:131000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-09-25",last_updated:"2024-09-25"},{providerId:"amazon-bedrock",modelId:"anthropic.claude-v2:1",name:"Claude 2.1",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:8,output:24},limit:{context:200000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-08",release_date:"2023-11-21",last_updated:"2023-11-21"},{providerId:"amazon-bedrock",modelId:"deepseek.v3-v1:0",name:"DeepSeek-V3.1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.58,output:1.68},limit:{context:163840,output:81920},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2025-09-18",last_updated:"2025-09-18"},{providerId:"amazon-bedrock",modelId:"anthropic.claude-opus-4-5-20251101-v1:0",name:"Claude Opus 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:5,output:25,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-11-24",last_updated:"2025-08-01"},{providerId:"amazon-bedrock",modelId:"cohere.command-light-text-v14",name:"Command Light",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.3,output:0.6},limit:{context:4096,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-08",release_date:"2023-11-01",last_updated:"2023-11-01"},{providerId:"amazon-bedrock",modelId:"mistral.mistral-large-2402-v1:0",name:"Mistral Large (24.02)",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.5,output:1.5},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},release_date:"2024-12-01",last_updated:"2024-12-01"},{providerId:"amazon-bedrock",modelId:"google.gemma-3-27b-it",name:"Google Gemma 3 27B Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.12,output:0.2},limit:{context:202752,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2025-07",release_date:"2025-07-27",last_updated:"2025-07-27"},{providerId:"amazon-bedrock",modelId:"nvidia.nemotron-nano-12b-v2",name:"NVIDIA Nemotron Nano 12B v2 VL BF16",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.6},limit:{context:128000,output:4096},modalities:{input:["text","image"],output:["text"]},release_date:"2024-12-01",last_updated:"2024-12-01"},{providerId:"amazon-bedrock",modelId:"google.gemma-3-12b-it",name:"Google Gemma 3 12B",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.049999999999999996,output:0.09999999999999999},limit:{context:131072,output:8192},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-12",release_date:"2024-12-01",last_updated:"2024-12-01"},{providerId:"amazon-bedrock",modelId:"ai21.jamba-1-5-large-v1:0",name:"Jamba 1.5 Large",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:2,output:8},limit:{context:256000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-08",release_date:"2024-08-15",last_updated:"2024-08-15"},{providerId:"amazon-bedrock",modelId:"meta.llama3-3-70b-instruct-v1:0",name:"Llama 3.3 70B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.72,output:0.72},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-12-06",last_updated:"2024-12-06"},{providerId:"amazon-bedrock",modelId:"anthropic.claude-3-opus-20240229-v1:0",name:"Claude Opus 3",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:15,output:75},limit:{context:200000,output:4096},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2023-08",release_date:"2024-02-29",last_updated:"2024-02-29"},{providerId:"amazon-bedrock",modelId:"amazon.nova-pro-v1:0",name:"Nova Pro",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.8,output:3.2,cache_read:0.2},limit:{context:300000,output:8192},modalities:{input:["text","image","video"],output:["text"]},knowledge:"2024-10",release_date:"2024-12-03",last_updated:"2024-12-03"},{providerId:"amazon-bedrock",modelId:"meta.llama3-1-8b-instruct-v1:0",name:"Llama 3.1 8B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.22,output:0.22},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-07-23",last_updated:"2024-07-23"},{providerId:"amazon-bedrock",modelId:"openai.gpt-oss-120b-1:0",name:"gpt-oss-120b",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.6},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},release_date:"2024-12-01",last_updated:"2024-12-01"},{providerId:"amazon-bedrock",modelId:"qwen.qwen3-32b-v1:0",name:"Qwen3 32B (dense)",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.6},limit:{context:16384,output:16384},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2025-09-18",last_updated:"2025-09-18"},{providerId:"amazon-bedrock",modelId:"anthropic.claude-3-5-sonnet-20240620-v1:0",name:"Claude Sonnet 3.5",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:8192},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2024-04",release_date:"2024-06-20",last_updated:"2024-06-20"},{providerId:"amazon-bedrock",modelId:"anthropic.claude-haiku-4-5-20251001-v1:0",name:"Claude Haiku 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1,output:5,cache_read:0.1,cache_write:1.25},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-02-28",release_date:"2025-10-15",last_updated:"2025-10-15"},{providerId:"amazon-bedrock",modelId:"cohere.command-r-v1:0",name:"Command R",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.5,output:1.5},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2024-03-11",last_updated:"2024-03-11"},{providerId:"amazon-bedrock",modelId:"mistral.voxtral-small-24b-2507",name:"Voxtral Small 24B 2507",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.35},limit:{context:32000,output:8192},modalities:{input:["text","audio"],output:["text"]},release_date:"2025-07-01",last_updated:"2025-07-01"},{providerId:"amazon-bedrock",modelId:"amazon.nova-micro-v1:0",name:"Nova Micro",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.035,output:0.14,cache_read:0.00875},limit:{context:128000,output:8192},modalities:{input:["text"],output:["text"]},knowledge:"2024-10",release_date:"2024-12-03",last_updated:"2024-12-03"},{providerId:"amazon-bedrock",modelId:"meta.llama3-1-70b-instruct-v1:0",name:"Llama 3.1 70B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.72,output:0.72},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-07-23",last_updated:"2024-07-23"},{providerId:"amazon-bedrock",modelId:"meta.llama3-70b-instruct-v1:0",name:"Llama 3 70B Instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:2.65,output:3.5},limit:{context:8192,output:2048},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-07-23",last_updated:"2024-07-23"},{providerId:"amazon-bedrock",modelId:"deepseek.r1-v1:0",name:"DeepSeek-R1",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:1.35,output:5.4},limit:{context:128000,output:32768},modalities:{input:["text"],output:["text"]},knowledge:"2024-07",release_date:"2025-01-20",last_updated:"2025-05-29"},{providerId:"amazon-bedrock",modelId:"anthropic.claude-3-5-sonnet-20241022-v2:0",name:"Claude Sonnet 3.5 v2",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:8192},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2024-04",release_date:"2024-10-22",last_updated:"2024-10-22"},{providerId:"amazon-bedrock",modelId:"mistral.ministral-3-8b-instruct",name:"Ministral 3 8B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.15},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},release_date:"2024-12-01",last_updated:"2024-12-01"},{providerId:"amazon-bedrock",modelId:"cohere.command-text-v14",name:"Command",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:1.5,output:2},limit:{context:4096,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-08",release_date:"2023-11-01",last_updated:"2023-11-01"},{providerId:"amazon-bedrock",modelId:"anthropic.claude-opus-4-20250514-v1:0",name:"Claude Opus 4",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:15,output:75,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:32000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2024-04",release_date:"2025-05-22",last_updated:"2025-05-22"},{providerId:"amazon-bedrock",modelId:"mistral.voxtral-mini-3b-2507",name:"Voxtral Mini 3B 2507",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.04,output:0.04},limit:{context:128000,output:4096},modalities:{input:["audio","text"],output:["text"]},release_date:"2024-12-01",last_updated:"2024-12-01"},{providerId:"amazon-bedrock",modelId:"global.anthropic.claude-opus-4-5-20251101-v1:0",name:"Claude Opus 4.5 (Global)",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:5,output:25,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-11-24",last_updated:"2025-08-01"},{providerId:"amazon-bedrock",modelId:"amazon.nova-2-lite-v1:0",name:"Nova 2 Lite",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.33,output:2.75},limit:{context:128000,output:4096},modalities:{input:["text","image","video"],output:["text"]},release_date:"2024-12-01",last_updated:"2024-12-01"},{providerId:"amazon-bedrock",modelId:"qwen.qwen3-coder-480b-a35b-v1:0",name:"Qwen3 Coder 480B A35B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.22,output:1.8},limit:{context:131072,output:65536},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2025-09-18",last_updated:"2025-09-18"},{providerId:"amazon-bedrock",modelId:"anthropic.claude-sonnet-4-5-20250929-v1:0",name:"Claude Sonnet 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:3,output:15,cache_read:0.3,cache_write:3.75},limit:{context:200000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-07-31",release_date:"2025-09-29",last_updated:"2025-09-29"},{providerId:"amazon-bedrock",modelId:"openai.gpt-oss-safeguard-20b",name:"GPT OSS Safeguard 20B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.07,output:0.2},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},release_date:"2024-12-01",last_updated:"2024-12-01"},{providerId:"amazon-bedrock",modelId:"openai.gpt-oss-20b-1:0",name:"gpt-oss-20b",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.07,output:0.3},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},release_date:"2024-12-01",last_updated:"2024-12-01"},{providerId:"amazon-bedrock",modelId:"meta.llama3-2-3b-instruct-v1:0",name:"Llama 3.2 3B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.15},limit:{context:131000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-12",release_date:"2024-09-25",last_updated:"2024-09-25"},{providerId:"amazon-bedrock",modelId:"anthropic.claude-instant-v1",name:"Claude Instant",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.8,output:2.4},limit:{context:1e5,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2023-08",release_date:"2023-03-01",last_updated:"2023-03-01"},{providerId:"amazon-bedrock",modelId:"amazon.nova-premier-v1:0",name:"Nova Premier",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:2.5,output:12.5},limit:{context:1e6,output:16384},modalities:{input:["text","image","video"],output:["text"]},knowledge:"2024-10",release_date:"2024-12-03",last_updated:"2024-12-03"},{providerId:"amazon-bedrock",modelId:"mistral.mistral-7b-instruct-v0:2",name:"Mistral-7B-Instruct-v0.3",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.11,output:0.11},limit:{context:127000,output:127000},modalities:{input:["text"],output:["text"]},release_date:"2025-04-01",last_updated:"2025-04-01"},{providerId:"amazon-bedrock",modelId:"mistral.mixtral-8x7b-instruct-v0:1",name:"Mixtral-8x7B-Instruct-v0.1",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.7,output:0.7},limit:{context:32000,output:32000},modalities:{input:["text"],output:["text"]},release_date:"2025-04-01",last_updated:"2025-04-01"},{providerId:"amazon-bedrock",modelId:"anthropic.claude-opus-4-1-20250805-v1:0",name:"Claude Opus 4.1",attachment:!0,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:15,output:75,cache_read:1.5,cache_write:18.75},limit:{context:200000,output:32000},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2025-03-31",release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"amazon-bedrock",modelId:"meta.llama4-scout-17b-instruct-v1:0",name:"Llama 4 Scout 17B Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.17,output:0.66},limit:{context:3500000,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-08",release_date:"2025-04-05",last_updated:"2025-04-05"},{providerId:"amazon-bedrock",modelId:"ai21.jamba-1-5-mini-v1:0",name:"Jamba 1.5 Mini",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.4},limit:{context:256000,output:4096},modalities:{input:["text"],output:["text"]},knowledge:"2024-08",release_date:"2024-08-15",last_updated:"2024-08-15"},{providerId:"amazon-bedrock",modelId:"meta.llama3-8b-instruct-v1:0",name:"Llama 3 8B Instruct",attachment:!1,reasoning:!1,tool_call:!1,temperature:!0,cost:{input:0.3,output:0.6},limit:{context:8192,output:2048},modalities:{input:["text"],output:["text"]},knowledge:"2023-03",release_date:"2024-07-23",last_updated:"2024-07-23"},{providerId:"amazon-bedrock",modelId:"amazon.titan-text-express-v1:0:8k",name:"Titan Text G1 - Express",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.6},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},release_date:"2024-12-01",last_updated:"2024-12-01"},{providerId:"amazon-bedrock",modelId:"anthropic.claude-3-sonnet-20240229-v1:0",name:"Claude Sonnet 3",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:3,output:15},limit:{context:200000,output:4096},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2023-08",release_date:"2024-03-04",last_updated:"2024-03-04"},{providerId:"amazon-bedrock",modelId:"nvidia.nemotron-nano-9b-v2",name:"NVIDIA Nemotron Nano 9B v2",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.06,output:0.23},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},release_date:"2024-12-01",last_updated:"2024-12-01"},{providerId:"amazon-bedrock",modelId:"amazon.titan-text-express-v1",name:"Titan Text G1 - Express",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.6},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},release_date:"2024-12-01",last_updated:"2024-12-01"},{providerId:"amazon-bedrock",modelId:"meta.llama4-maverick-17b-instruct-v1:0",name:"Llama 4 Maverick 17B Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.24,output:0.97},limit:{context:1e6,output:16384},modalities:{input:["text","image"],output:["text"]},knowledge:"2024-08",release_date:"2025-04-05",last_updated:"2025-04-05"},{providerId:"amazon-bedrock",modelId:"mistral.ministral-3-14b-instruct",name:"Ministral 14B 3.0",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.2,output:0.2},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},release_date:"2024-12-01",last_updated:"2024-12-01"},{providerId:"amazon-bedrock",modelId:"openai.gpt-oss-safeguard-120b",name:"GPT OSS Safeguard 120B",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.15,output:0.6},limit:{context:128000,output:4096},modalities:{input:["text"],output:["text"]},release_date:"2024-12-01",last_updated:"2024-12-01"},{providerId:"amazon-bedrock",modelId:"qwen.qwen3-235b-a22b-2507-v1:0",name:"Qwen3 235B A22B 2507",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.22,output:0.88},limit:{context:262144,output:131072},modalities:{input:["text"],output:["text"]},knowledge:"2024-04",release_date:"2025-09-18",last_updated:"2025-09-18"},{providerId:"amazon-bedrock",modelId:"amazon.nova-lite-v1:0",name:"Nova Lite",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.06,output:0.24,cache_read:0.015},limit:{context:300000,output:8192},modalities:{input:["text","image","video"],output:["text"]},knowledge:"2024-10",release_date:"2024-12-03",last_updated:"2024-12-03"},{providerId:"amazon-bedrock",modelId:"anthropic.claude-3-5-haiku-20241022-v1:0",name:"Claude Haiku 3.5",attachment:!0,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.8,output:4,cache_read:0.08,cache_write:1},limit:{context:200000,output:8192},modalities:{input:["text","image","pdf"],output:["text"]},knowledge:"2024-07",release_date:"2024-10-22",last_updated:"2024-10-22"},{providerId:"amazon-bedrock",modelId:"moonshot.kimi-k2-thinking",name:"Kimi K2 Thinking",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.6,output:2.5},limit:{context:256000,output:256000},modalities:{input:["text"],output:["text"]},release_date:"2025-12-02",last_updated:"2025-12-02"}]},{id:"poe",name:"Poe",models:[{providerId:"poe",modelId:"xai/grok-4-fast-non-reasoning",name:"Grok-4-Fast-Non-Reasoning",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:0.2,output:0.5,cache_read:0.05},limit:{context:2000000,output:128000},modalities:{input:["text"],output:["text"]},release_date:"2025-09-16",last_updated:"2025-09-16"},{providerId:"poe",modelId:"xai/grok-4-fast-reasoning",name:"Grok 4 Fast Reasoning",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0.2,output:0.5,cache_read:0.05},limit:{context:2000000,output:128000},modalities:{input:["text"],output:["text"]},release_date:"2025-09-16",last_updated:"2025-09-16"},{providerId:"poe",modelId:"xai/grok-4.1-fast-reasoning",name:"Grok-4.1-Fast-Reasoning",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,limit:{context:2000000,output:30000},modalities:{input:["text"],output:["text"]},release_date:"2025-11-19",last_updated:"2025-11-19"},{providerId:"poe",modelId:"xai/grok-4",name:"Grok 4",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:3,output:15,cache_read:0.75},limit:{context:256000,output:128000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-07-10",last_updated:"2025-07-10"},{providerId:"poe",modelId:"xai/grok-code-fast-1",name:"Grok Code Fast 1",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0.2,output:1.5,cache_read:0.02},limit:{context:256000,output:128000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-08-22",last_updated:"2025-08-22"},{providerId:"poe",modelId:"xai/grok-2",name:"Grok-2",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:2,output:10},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},release_date:"2025-01-14",last_updated:"2025-01-14"},{providerId:"poe",modelId:"xai/grok-4.1-fast-non-reasoning",name:"Grok-4.1-Fast-Non-Reasoning",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,limit:{context:2000000,output:30000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-11-19",last_updated:"2025-11-19"},{providerId:"poe",modelId:"xai/grok-3",name:"Grok 3",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:3,output:15,cache_read:0.75},limit:{context:131072,output:8192},modalities:{input:["text","image"],output:["text"]},release_date:"2025-04-11",last_updated:"2025-04-11"},{providerId:"poe",modelId:"xai/grok-3-mini",name:"Grok 3 Mini",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0.3,output:0.5,cache_read:0.075},limit:{context:131072,output:8192},modalities:{input:["text"],output:["text"]},release_date:"2025-04-11",last_updated:"2025-04-11"},{providerId:"poe",modelId:"google/gemini-2.5-flash",name:"Gemini 2.5 Flash",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0.21,output:1.8,cache_read:0.052},limit:{context:1065535,output:65535},modalities:{input:["text","image","video","audio"],output:["text"]},release_date:"2025-04-26",last_updated:"2025-04-26"},{providerId:"poe",modelId:"google/gemini-2.0-flash-lite",name:"Gemini-2.0-Flash-Lite",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:0.052,output:0.21},limit:{context:990000,output:8192},modalities:{input:["text","image","video","audio"],output:["text"]},release_date:"2025-02-05",last_updated:"2025-02-05"},{providerId:"poe",modelId:"google/gemini-3-pro",name:"Gemini-3-Pro",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.6,output:9.6,cache_read:0.16},limit:{context:1048576,output:64000},modalities:{input:["text","image","video","audio"],output:["text"]},release_date:"2025-10-22",last_updated:"2025-10-22"},{providerId:"poe",modelId:"google/gemini-2.0-flash",name:"Gemini-2.0-Flash",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:0.1,output:0.42},limit:{context:990000,output:8192},modalities:{input:["text","image","video","audio"],output:["text"]},release_date:"2024-12-11",last_updated:"2024-12-11"},{providerId:"poe",modelId:"google/gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0.07,output:0.28},limit:{context:1024000,output:64000},modalities:{input:["text","image","video","audio"],output:["text"]},release_date:"2025-06-19",last_updated:"2025-06-19"},{providerId:"poe",modelId:"google/gemini-2.5-pro",name:"Gemini 2.5 Pro",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0.87,output:7,cache_read:0.22},limit:{context:1065535,output:65535},modalities:{input:["text","image","video","audio"],output:["text"]},release_date:"2025-02-05",last_updated:"2025-02-05"},{providerId:"poe",modelId:"openai/gpt-4.1-nano",name:"GPT-4.1-nano",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:0.09,output:0.36,cache_read:0.022},limit:{context:1047576,output:32768},modalities:{input:["text","image"],output:["text"]},release_date:"2025-04-15",last_updated:"2025-04-15"},{providerId:"poe",modelId:"openai/gpt-5.2-instant",name:"gpt-5.2-instant",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:1.6,output:13,cache_read:0.16},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},release_date:"2025-12-11",last_updated:"2025-12-11"},{providerId:"poe",modelId:"openai/o1-pro",name:"o1-pro",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:140,output:540},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},release_date:"2025-03-19",last_updated:"2025-03-19"},{providerId:"poe",modelId:"openai/gpt-5.1-codex",name:"GPT-5.1-Codex",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.1,output:9,cache_read:0.11},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-11-12",last_updated:"2025-11-12"},{providerId:"poe",modelId:"openai/gpt-3.5-turbo-raw",name:"GPT-3.5-Turbo-Raw",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:0.45,output:1.4},limit:{context:4524,output:2048},modalities:{input:["text","image"],output:["text"]},release_date:"2023-09-27",last_updated:"2023-09-27"},{providerId:"poe",modelId:"openai/gpt-4-classic",name:"GPT-4-Classic",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:27,output:54},limit:{context:8192,output:4096},modalities:{input:["text","image"],output:["text"]},release_date:"2024-03-25",last_updated:"2024-03-25"},{providerId:"poe",modelId:"openai/gpt-4.1-mini",name:"GPT-4.1-mini",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:0.36,output:1.4,cache_read:0.09},limit:{context:1047576,output:32768},modalities:{input:["text","image"],output:["text"]},release_date:"2025-04-15",last_updated:"2025-04-15"},{providerId:"poe",modelId:"openai/gpt-5-chat",name:"GPT-5-Chat",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:1.1,output:9,cache_read:0.11},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},release_date:"2025-08-07",last_updated:"2025-08-07"},{providerId:"poe",modelId:"openai/o3-deep-research",name:"o3-deep-research",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:9,output:36,cache_read:2.2},limit:{context:200000,output:1e5},modalities:{input:["text"],output:["text"]},release_date:"2025-06-27",last_updated:"2025-06-27"},{providerId:"poe",modelId:"openai/gpt-4o-search",name:"GPT-4o-Search",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:2.2,output:9},limit:{context:128000,output:8192},modalities:{input:["text"],output:["text"]},release_date:"2025-03-11",last_updated:"2025-03-11"},{providerId:"poe",modelId:"openai/gpt-3.5-turbo",name:"GPT-3.5-Turbo",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:0.45,output:1.4},limit:{context:16384,output:2048},modalities:{input:["text","image"],output:["text"]},release_date:"2023-09-13",last_updated:"2023-09-13"},{providerId:"poe",modelId:"openai/gpt-5.2-pro",name:"gpt-5.2-pro",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:19,output:150},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-12-11",last_updated:"2025-12-11"},{providerId:"poe",modelId:"openai/o3-mini-high",name:"o3-mini-high",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0.99,output:4},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},release_date:"2025-01-31",last_updated:"2025-01-31"},{providerId:"poe",modelId:"openai/chatgpt-4o-latest",name:"ChatGPT-4o-Latest",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:4.5,output:14},limit:{context:128000,output:8192},modalities:{input:["text","image"],output:["text"]},release_date:"2024-08-14",last_updated:"2024-08-14"},{providerId:"poe",modelId:"openai/gpt-4-turbo",name:"GPT-4-Turbo",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:9,output:27},limit:{context:128000,output:4096},modalities:{input:["text","image"],output:["text"]},release_date:"2023-09-13",last_updated:"2023-09-13"},{providerId:"poe",modelId:"openai/gpt-5.1-codex-mini",name:"GPT-5.1-Codex-Mini",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0.22,output:1.8,cache_read:0.022},limit:{context:400000,output:128000},modalities:{input:["text"],output:["text"]},release_date:"2025-11-12",last_updated:"2025-11-12"},{providerId:"poe",modelId:"openai/gpt-5.1-instant",name:"GPT-5.1-Instant",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:1.1,output:9,cache_read:0.11},limit:{context:128000,output:16384},modalities:{input:["text","image"],output:["text"]},release_date:"2025-11-12",last_updated:"2025-11-12"},{providerId:"poe",modelId:"openai/o3-mini",name:"o3-mini",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0.99,output:4},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},release_date:"2025-01-31",last_updated:"2025-01-31"},{providerId:"poe",modelId:"openai/gpt-5.1",name:"GPT-5.1",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.1,output:9,cache_read:0.11},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-11-12",last_updated:"2025-11-12"},{providerId:"poe",modelId:"openai/gpt-5-nano",name:"GPT-5-nano",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0.045,output:0.36,cache_read:0.0045},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"poe",modelId:"openai/gpt-5-codex",name:"GPT-5-Codex",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.1,output:9},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-09-23",last_updated:"2025-09-23"},{providerId:"poe",modelId:"openai/gpt-4o",name:"GPT-4o",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,limit:{context:128000,output:8192},modalities:{input:["text","image"],output:["text"]},release_date:"2024-05-13",last_updated:"2024-05-13"},{providerId:"poe",modelId:"openai/gpt-4.1",name:"GPT-4.1",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:1.8,output:7.2,cache_read:0.45},limit:{context:1047576,output:32768},modalities:{input:["text","image"],output:["text"]},release_date:"2025-04-14",last_updated:"2025-04-14"},{providerId:"poe",modelId:"openai/o4-mini",name:"o4-mini",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0.99,output:4,cache_read:0.25},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},release_date:"2025-04-16",last_updated:"2025-04-16"},{providerId:"poe",modelId:"openai/o1",name:"o1",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:14,output:54},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},release_date:"2024-12-18",last_updated:"2024-12-18"},{providerId:"poe",modelId:"openai/gpt-5-mini",name:"GPT-5-mini",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0.22,output:1.8,cache_read:0.022},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-06-25",last_updated:"2025-06-25"},{providerId:"poe",modelId:"openai/gpt-4o-aug",name:"GPT-4o-Aug",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:2.2,output:9,cache_read:1.1},limit:{context:128000,output:8192},modalities:{input:["text","image"],output:["text"]},release_date:"2024-11-21",last_updated:"2024-11-21"},{providerId:"poe",modelId:"openai/o3-pro",name:"o3-pro",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:18,output:72},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},release_date:"2025-06-10",last_updated:"2025-06-10"},{providerId:"poe",modelId:"openai/gpt-5.1-codex-max",name:"gpt-5.1-codex-max",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.1,output:9,cache_read:0.11},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-12-08",last_updated:"2025-12-08"},{providerId:"poe",modelId:"openai/gpt-3.5-turbo-instruct",name:"GPT-3.5-Turbo-Instruct",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:1.4,output:1.8},limit:{context:3500,output:1024},modalities:{input:["text","image"],output:["text"]},release_date:"2023-09-20",last_updated:"2023-09-20"},{providerId:"poe",modelId:"openai/o3",name:"o3",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.8,output:7.2,cache_read:0.45},limit:{context:200000,output:1e5},modalities:{input:["text","image"],output:["text"]},release_date:"2025-04-16",last_updated:"2025-04-16"},{providerId:"poe",modelId:"openai/o4-mini-deep-research",name:"o4-mini-deep-research",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.8,output:7.2,cache_read:0.45},limit:{context:200000,output:1e5},modalities:{input:["text"],output:["text"]},release_date:"2025-06-27",last_updated:"2025-06-27"},{providerId:"poe",modelId:"openai/gpt-4-classic-0314",name:"GPT-4-Classic-0314",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:27,output:54},limit:{context:8192,output:4096},modalities:{input:["text","image"],output:["text"]},release_date:"2024-08-26",last_updated:"2024-08-26"},{providerId:"poe",modelId:"openai/gpt-4o-mini",name:"GPT-4o-mini",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:0.14,output:0.54,cache_read:0.068},limit:{context:128000,output:4096},modalities:{input:["text","image"],output:["text"]},release_date:"2024-07-18",last_updated:"2024-07-18"},{providerId:"poe",modelId:"openai/gpt-5",name:"GPT-5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.1,output:9,cache_read:0.11},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"poe",modelId:"openai/gpt-5-pro",name:"GPT-5-Pro",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:14,output:110},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-10-06",last_updated:"2025-10-06"},{providerId:"poe",modelId:"openai/gpt-5.2",name:"gpt-5.2",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:1.6,output:13,cache_read:0.16},limit:{context:400000,output:128000},modalities:{input:["text","image"],output:["text"]},release_date:"2025-12-08",last_updated:"2025-12-08"},{providerId:"poe",modelId:"openai/gpt-4o-mini-search",name:"GPT-4o-mini-Search",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:0.14,output:0.54},limit:{context:128000,output:8192},modalities:{input:["text"],output:["text"]},release_date:"2025-03-11",last_updated:"2025-03-11"},{providerId:"poe",modelId:"anthropic/claude-opus-3",name:"Claude-Opus-3",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:13,output:64,cache_read:1.3,cache_write:16},limit:{context:189096,output:8192},modalities:{input:["text","image","pdf"],output:["text"]},release_date:"2024-03-04",last_updated:"2024-03-04"},{providerId:"poe",modelId:"anthropic/claude-opus-4",name:"Claude Opus 4",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:13,output:64,cache_read:1.3,cache_write:16},limit:{context:192512,output:32768},modalities:{input:["text","image","pdf"],output:["text"]},release_date:"2025-05-21",last_updated:"2025-05-21"},{providerId:"poe",modelId:"anthropic/claude-sonnet-3.7-reasoning",name:"Claude Sonnet 3.7 Reasoning",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:2.6,output:13,cache_read:0.26,cache_write:3.2},limit:{context:196608,output:128000},modalities:{input:["text","image","pdf"],output:["text"]},release_date:"2025-02-19",last_updated:"2025-02-19"},{providerId:"poe",modelId:"anthropic/claude-opus-4-search",name:"Claude Opus 4 Search",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:13,output:64,cache_read:1.3,cache_write:16},limit:{context:196608,output:128000},modalities:{input:["text","image","pdf"],output:["text"]},release_date:"2025-06-20",last_updated:"2025-06-20"},{providerId:"poe",modelId:"anthropic/claude-sonnet-3.7",name:"Claude Sonnet 3.7",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:2.6,output:13,cache_read:0.26,cache_write:3.2},limit:{context:196608,output:32768},modalities:{input:["text","image","pdf"],output:["text"]},release_date:"2025-02-19",last_updated:"2025-02-19"},{providerId:"poe",modelId:"anthropic/claude-haiku-3.5-search",name:"Claude-Haiku-3.5-Search",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:0.68,output:3.4,cache_read:0.068,cache_write:0.85},limit:{context:189096,output:8192},modalities:{input:["text","image","pdf"],output:["text"]},release_date:"2025-05-15",last_updated:"2025-05-15"},{providerId:"poe",modelId:"anthropic/claude-haiku-4.5",name:"Claude Haiku 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:0.85,output:4.3,cache_read:0.085,cache_write:1.1},limit:{context:192000,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},release_date:"2025-10-15",last_updated:"2025-10-15"},{providerId:"poe",modelId:"anthropic/claude-sonnet-4-reasoning",name:"Claude Sonnet 4 Reasoning",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:2.6,output:13,cache_read:0.26,cache_write:3.2},limit:{context:983040,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},release_date:"2025-05-21",last_updated:"2025-05-21"},{providerId:"poe",modelId:"anthropic/claude-haiku-3",name:"Claude-Haiku-3",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:0.21,output:1.1,cache_read:0.021,cache_write:0.26},limit:{context:189096,output:8192},modalities:{input:["text","image","pdf"],output:["text"]},release_date:"2024-03-09",last_updated:"2024-03-09"},{providerId:"poe",modelId:"anthropic/claude-opus-4.1",name:"Claude Opus 4.1",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:13,output:64,cache_read:1.3,cache_write:16},limit:{context:196608,output:32000},modalities:{input:["text","image","pdf"],output:["text"]},release_date:"2025-08-05",last_updated:"2025-08-05"},{providerId:"poe",modelId:"anthropic/claude-sonnet-3.7-search",name:"Claude Sonnet 3.7 Search",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:2.6,output:13,cache_read:0.26,cache_write:3.2},limit:{context:196608,output:128000},modalities:{input:["text","image","pdf"],output:["text"]},release_date:"2025-05-15",last_updated:"2025-05-15"},{providerId:"poe",modelId:"anthropic/claude-opus-4-reasoning",name:"Claude Opus 4 Reasoning",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:13,output:64,cache_read:1.3,cache_write:16},limit:{context:196608,output:32768},modalities:{input:["text","image","pdf"],output:["text"]},release_date:"2025-05-21",last_updated:"2025-05-21"},{providerId:"poe",modelId:"anthropic/claude-sonnet-3.5",name:"Claude-Sonnet-3.5",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:2.6,output:13,cache_read:0.26,cache_write:3.2},limit:{context:189096,output:8192},modalities:{input:["text","image","pdf"],output:["text"]},release_date:"2024-06-05",last_updated:"2024-06-05"},{providerId:"poe",modelId:"anthropic/claude-sonnet-4",name:"Claude Sonnet 4",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:2.6,output:13,cache_read:0.26,cache_write:3.2},limit:{context:983040,output:32768},modalities:{input:["text","image","pdf"],output:["text"]},release_date:"2025-05-21",last_updated:"2025-05-21"},{providerId:"poe",modelId:"anthropic/claude-opus-4.5",name:"claude-opus-4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:4.3,output:21,cache_read:0.43,cache_write:5.3},limit:{context:196608,output:64000},modalities:{input:["text","image","pdf"],output:["text"]},release_date:"2025-11-21",last_updated:"2025-11-21"},{providerId:"poe",modelId:"anthropic/claude-haiku-3.5",name:"Claude-Haiku-3.5",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:0.68,output:3.4,cache_read:0.068,cache_write:0.85},limit:{context:189096,output:8192},modalities:{input:["text","image","pdf"],output:["text"]},release_date:"2024-10-01",last_updated:"2024-10-01"},{providerId:"poe",modelId:"anthropic/claude-sonnet-3.5-june",name:"Claude-Sonnet-3.5-June",attachment:!0,reasoning:!1,tool_call:!0,temperature:!1,cost:{input:2.6,output:13,cache_read:0.26,cache_write:3.2},limit:{context:189096,output:8192},modalities:{input:["text","image","pdf"],output:["text"]},release_date:"2024-11-18",last_updated:"2024-11-18"},{providerId:"poe",modelId:"anthropic/claude-sonnet-4.5",name:"Claude Sonnet 4.5",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:2.6,output:13,cache_read:0.26,cache_write:3.2},limit:{context:983040,output:32768},modalities:{input:["text","image","pdf"],output:["text"]},release_date:"2025-09-26",last_updated:"2025-09-26"},{providerId:"poe",modelId:"anthropic/claude-sonnet-4-search",name:"Claude Sonnet 4 Search",attachment:!0,reasoning:!0,tool_call:!0,temperature:!1,cost:{input:2.6,output:13,cache_read:0.26,cache_write:3.2},limit:{context:983040,output:128000},modalities:{input:["text","image","pdf"],output:["text"]},release_date:"2025-06-20",last_updated:"2025-06-20"}]},{id:"cerebras",name:"Cerebras",models:[{providerId:"cerebras",modelId:"qwen-3-235b-a22b-instruct-2507",name:"Qwen 3 235B Instruct",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0.6,output:1.2},limit:{context:131000,output:32000},modalities:{input:["text"],output:["text"]},knowledge:"2025-04",release_date:"2025-07-22",last_updated:"2025-07-22"},{providerId:"cerebras",modelId:"zai-glm-4.6",name:"Z.AI GLM-4.6",attachment:!1,reasoning:!1,tool_call:!0,temperature:!0,cost:{input:0,output:0,cache_read:0,cache_write:0},limit:{context:131072,output:40960},modalities:{input:["text"],output:["text"]},release_date:"2025-11-05",last_updated:"2025-11-05"},{providerId:"cerebras",modelId:"gpt-oss-120b",name:"GPT OSS 120B",attachment:!1,reasoning:!0,tool_call:!0,temperature:!0,cost:{input:0.25,output:0.69},limit:{context:131072,output:32768},modalities:{input:["text"],output:["text"]},release_date:"2025-08-05",last_updated:"2025-08-05"}]}]}});var KB,WB,VB,YB,HB,eY,ku;var oo=tt(()=>{Nt();KB=p.object({input:p.number().nonnegative().optional(),output:p.number().nonnegative().optional(),cache_read:p.number().nonnegative().optional(),cache_write:p.number().nonnegative().optional()}).optional(),WB=p.object({context:p.number().positive().int(),output:p.number().positive().int()}),VB=p.object({input:p.array(p.string()).min(1),output:p.array(p.string()).min(1)}),YB=p.object({providerId:p.string().min(1),modelId:p.string().min(1),name:p.string().min(1),attachment:p.boolean(),reasoning:p.boolean(),tool_call:p.boolean(),temperature:p.boolean().optional(),cost:KB,limit:WB,modalities:VB,knowledge:p.string().optional(),release_date:p.string().regex(/^\d{4}-\d{2}(-\d{2})?$/),last_updated:p.string().regex(/^\d{4}-\d{2}(-\d{2})?$/)}),HB=p.object({id:p.string().min(1),name:p.string().min(1),models:p.array(YB).min(1)}),eY=p.record(p.string(),p.object({name:p.string(),models:p.record(p.string(),p.object({name:p.string(),attachment:p.boolean(),reasoning:p.boolean(),tool_call:p.boolean(),temperature:p.boolean().optional(),knowledge:p.string().optional(),release_date:p.string(),last_updated:p.string(),cost:p.object({input:p.number().optional(),output:p.number().optional(),cache_read:p.number().optional(),cache_write:p.number().optional()}).optional(),limit:p.object({context:p.number(),output:p.number()}),modalities:p.object({input:p.array(p.string()),output:p.array(p.string())})}))})),ku=p.object({version:p.string().regex(/^\d+\.\d+\.\d+$/),lastUpdated:p.string().datetime(),providers:p.array(HB)})});import{createAnthropic as zB}from"@ai-sdk/anthropic";import{createGoogleGenerativeAI as bB}from"@ai-sdk/google";import{createGroq as MB}from"@ai-sdk/groq";import{createOpenAI as UB}from"@ai-sdk/openai";var fu;var po=tt(()=>{fu=[{id:"anthropic",apiKeyEnvVar:"ANTHROPIC_API_KEY",createProvider:(t)=>zB({apiKey:t})},{id:"openai",apiKeyEnvVar:"OPENAI_API_KEY",createProvider:(t)=>UB({apiKey:t})},{id:"groq",apiKeyEnvVar:"GROQ_API_KEY",createProvider:(t)=>MB({apiKey:t})},{id:"google",apiKeyEnvVar:"GOOGLE_API_KEY",createProvider:(t)=>bB({apiKey:t})}]});import{generateText as FB}from"ai";var kt;var hu=tt(()=>{lo();io();oo();po();kt=class kt{static instance=null;static MODEL_SHORTCUTS={opus:"claude-opus",sonnet:"claude-sonnet",haiku:"claude-haiku"};providers=new Map;models=new Map;uniqueModels=new Set;providerStatus=new Map;logger;healthCheckTimeout;blockList;constructor(t={}){if(this.logger=t.logger,this.healthCheckTimeout=t.healthCheckTimeout||5000,this.blockList=t.blockList||{},this.loadModelsData(),this.initializeProviders(),t.performHealthCheckOnInit)this.performHealthChecks().catch((e)=>{this.logger?.log(`Background health checks failed: ${e}`,"error")})}static getInstance(t){if(!kt.instance)kt.instance=new kt(t);return kt.instance}static resetInstance(){kt.instance=null}loadModelsData(){try{let t=ku.parse(Ma),e=ku.parse(ba);if(e.providers.length>0)this.logger?.log(`Loaded ${e.providers.length} custom providers from extension file`,"info");let u=[...t.providers,...e.providers];for(let a of u)for(let l of a.models){let i=`${l.providerId}/${l.modelId}`;if(this.uniqueModels.add(i.toLowerCase()),this.models.set(i.toLowerCase(),l),!l.modelId.includes("/"))this.models.set(l.modelId.toLowerCase(),l)}this.logger?.log(`Loaded ${this.uniqueModels.size} unique models from data files`,"info")}catch(t){this.logger?.log(`Failed to load models data: ${t}`,"error")}}findCheapestModel(t){let e,u=Number.POSITIVE_INFINITY,a=new Date;a.setFullYear(a.getFullYear()-1);let l=a.toISOString().substring(0,7);for(let i of this.models.values()){if(i.providerId.toLowerCase()!==t.toLowerCase())continue;if(!i.modalities.output.includes("text")||!i.modalities.input.includes("text")||i.modalities.output.length===1&&i.modalities.output[0]==="embedding"){this.logger?.log(`Skipping ${i.modelId} for health check (embedding or non-chat model)`,"debug");continue}if(i.last_updated<l){this.logger?.log(`Skipping ${i.modelId} for health check (last updated: ${i.last_updated})`,"debug");continue}let d=i.cost?.input;if(d!==void 0&&d>0&&d<u)u=d,e=i}if(e)this.logger?.log(`Selected ${e.modelId} as cheapest for ${t} (input cost: $${e.cost?.input}/M tokens, updated: ${e.last_updated})`,"debug");return e?.modelId}initializeProviders(){for(let t of fu){let e=`HANKWEAVE_SENTINEL_${t.apiKeyEnvVar}`,u=process.env[e]||process.env[t.apiKeyEnvVar];if(!u){let l={status:"not-configured",id:t.id,error:`No API key found (checked: ${e}, ${t.apiKeyEnvVar})`};this.providerStatus.set(t.id.toLowerCase(),l),this.logger?.log(`Provider ${t.id}: ${l.error}`,"debug");continue}let a=process.env[e]?e:t.apiKeyEnvVar;try{let l=t.createProvider(u);this.providers.set(t.id.toLowerCase(),l);let i={status:"available",id:t.id,healthy:!1};this.providerStatus.set(t.id.toLowerCase(),i),this.logger?.log(`Provider ${t.id}: Initialized (using ${a})`,"info")}catch(l){let i={status:"failed",id:t.id,error:`Failed to initialize: ${l}`,lastChecked:new Date};this.providerStatus.set(t.id.toLowerCase(),i),this.logger?.log(`Provider ${t.id}: ${i.error}`,"error")}}}isModelBlocked(t){let e=this.blockList.models?.some((a)=>a.toLowerCase()===t.modelId.toLowerCase()),u=this.blockList.providers?.some((a)=>a.toLowerCase()===t.providerId.toLowerCase());return e||u||!1}calculateStringSimilarity(t,e){let u=t.toLowerCase(),a=e.toLowerCase();if(u===a)return 1;if(u.length===0||a.length===0)return 0;let l=[];for(let d=0;d<=a.length;d++)l[d]=[d];for(let d=0;d<=u.length;d++)l[0][d]=d;for(let d=1;d<=a.length;d++)for(let m=1;m<=u.length;m++)if(a.charAt(d-1)===u.charAt(m-1))l[d][m]=l[d-1][m-1];else l[d][m]=Math.min(l[d-1][m-1]+1,l[d][m-1]+1,l[d-1][m]+1);let i=l[a.length][u.length],o=Math.max(u.length,a.length);return 1-i/o}getPreferredProvider(t){let e=t.toLowerCase();if(e.includes("claude"))return"anthropic";if(e.includes("gemini"))return"google";if(e.startsWith("gpt-")||e.startsWith("o1-")||e.startsWith("o3-"))return"openai";let u=[{term:"claude",provider:"anthropic"},{term:"gemini",provider:"google"},{term:"gpt",provider:"openai"}];for(let{term:a,provider:l}of u){if(this.calculateStringSimilarity(e,a)>=0.75)return l;let o=e.split(/[-_\s]/);for(let d of o)if(d.length>=3){if(this.calculateStringSimilarity(d,a)>=0.75)return l}}return null}fuzzyMatchModels(t,e,u,a){let l=[],i=a||this.getPreferredProvider(t);for(let o of this.uniqueModels){let d=this.models.get(o);if(!d)continue;if(a&&d.providerId.toLowerCase()!==a.toLowerCase())continue;if(!u){if(this.blockList.models?.some((s)=>s.toLowerCase()===d.modelId.toLowerCase()))continue;if(this.blockList.providers?.some((s)=>s.toLowerCase()===d.providerId.toLowerCase()))continue}let m=this.calculateStringSimilarity(t,d.modelId),_=this.calculateStringSimilarity(t,d.name),n=t.toLowerCase(),r=d.modelId.toLowerCase(),c=d.name.toLowerCase();if(r.includes(n)||r.startsWith(n))m=Math.min(1,m+0.2);if(c.includes(n)||c.startsWith(n))_=Math.min(1,_+0.2);let x=n.split(/[-_\s]+/).filter((s)=>s.length>=3);if(x.length>=2){let s=r.split(/[-_\s]+/),k=c.split(/[-_\s]+/),g=x.every((h)=>s.some((B)=>{return B===h||B.includes(h)||h.includes(B)||this.calculateStringSimilarity(h,B)>=0.75})),f=x.every((h)=>k.some((B)=>{return B===h||B.includes(h)||h.includes(B)||this.calculateStringSimilarity(h,B)>=0.75}));if(g)m=Math.min(1,m+0.15);if(f)_=Math.min(1,_+0.15)}let I=Math.max(m,_);if(i&&d.providerId.toLowerCase()===i.toLowerCase())I=Math.min(1,I+0.1);if(I>=e)l.push({model:d,score:I})}if(l.length===0)return null;return l.sort((o,d)=>{if(Math.abs(o.score-d.score)>0.2)return d.score-o.score;if(i&&!a){let r=o.model.providerId.toLowerCase()===i.toLowerCase(),c=d.model.providerId.toLowerCase()===i.toLowerCase();if(r!==c)return r?-1:1}let m=new Date(o.model.last_updated.length===7?`${o.model.last_updated}-01`:o.model.last_updated),n=new Date(d.model.last_updated.length===7?`${d.model.last_updated}-01`:d.model.last_updated).getTime()-m.getTime();if(n===0)return d.score-o.score;return n}),l[0].model}async performHealthChecks(){this.logger?.log("Starting provider health checks","debug");let t=Array.from(this.providers.entries()).map(async([e,u])=>{let a=this.providerStatus.get(e);if(!a||a.status!=="available"){this.logger?.log(`Skipping health check for ${e} (not available)`,"debug");return}let l=this.findCheapestModel(e);if(!l){this.logger?.log(`No models found for provider ${e}, marking as unhealthy`,"error");let i={...a,healthy:!1,error:"No models available",lastChecked:new Date};this.providerStatus.set(e,i);return}this.logger?.log(`Using ${l} for ${e} health check (cheapest model)`,"debug");try{let i=new Promise((_,n)=>{setTimeout(()=>n(Error("Health check timeout")),this.healthCheckTimeout)}),o=u.languageModel(l),d=await Promise.race([FB({model:o,messages:[{role:"user",content:"Hi"}],maxOutputTokens:16,temperature:0}),i]);this.logger?.log(`Provider ${e} health check response: "${d.text.substring(0,50)}${d.text.length>50?"...":""}"`,"debug");let m={...a,healthy:!0,error:void 0,lastChecked:new Date};this.providerStatus.set(e,m),this.logger?.log(`Provider ${e}: Health check passed`,"debug")}catch(i){let o={...a,healthy:!1,error:`Health check failed: ${i}`,lastChecked:new Date};this.providerStatus.set(e,o),this.logger?.log(`Provider ${e}: ${o.error}`,"error")}});return await Promise.allSettled(t),this.logger?.log("Health checks complete","debug"),new Map(this.providerStatus)}getProviderForModel(t,e){let u=t.toLowerCase(),a=this.models.get(u);if(!a)return this.logger?.log(`Model not found: ${t}`,"debug"),{success:!1,reason:"model-not-found"};if(this.isModelBlocked(a))return this.logger?.log(`Model blocked: ${t}`,"error"),{success:!1,reason:"model-blocked"};let l=a.providerId.toLowerCase(),i=this.providers.get(l);if(!i)return this.logger?.log(`Provider not available: ${a.providerId}`,"debug"),{success:!1,reason:"provider-unavailable"};let o=this.providerStatus.get(l);if(o?.status==="available"&&o.healthy===!1)return this.logger?.log(`Provider unhealthy: ${a.providerId}`,"debug"),{success:!1,reason:"provider-unhealthy"};if(e){if(e.temperature!==void 0&&!a.temperature)this.logger?.log(`Model ${t} doesn't support temperature control, parameter will be ignored`,"info");if(e.maxOutputTokens!==void 0&&e.maxOutputTokens>a.limit.output)this.logger?.log(`Trimming maxOutputTokens from ${e.maxOutputTokens} to model limit ${a.limit.output}`,"info"),e.maxOutputTokens=a.limit.output}return{success:!0,model:i.languageModel(a.modelId)}}getModelInfo(t){let e=t.toLowerCase(),u=this.models.get(e);if(!u)return{success:!1,reason:"model-not-found"};if(this.isModelBlocked(u))return{success:!1,reason:"model-blocked"};return{success:!0,info:u}}resolveModel(t){let{providerId:e,model:u,ignoreBlockList:a=!0}=t,l=0.6,i=u.toLowerCase();if(kt.MODEL_SHORTCUTS[i])u=kt.MODEL_SHORTCUTS[i];let o=(m)=>{if(a)return!1;return this.blockList.models?.some((_)=>_.toLowerCase()===m.modelId.toLowerCase())||this.blockList.providers?.some((_)=>_.toLowerCase()===m.providerId.toLowerCase())||!1};if(e){if(!a&&this.blockList.providers?.some((n)=>n.toLowerCase()===e.toLowerCase()))return{success:!1,reason:"model-blocked"};let m=`${e}/${u}`,_=this.models.get(m.toLowerCase());if(!_){if(_=this.models.get(u.toLowerCase()),_&&_.providerId.toLowerCase()!==e.toLowerCase())_=void 0}if(_){if(o(_))return{success:!1,reason:"model-blocked"};return{success:!0,modelInfo:_,matchType:"exact"}}}if(!e){let m=this.getPreferredProvider(u);if(m){let n=`${m}/${u}`,r=this.models.get(n.toLowerCase());if(r){if(o(r))return{success:!1,reason:"model-blocked"};return{success:!0,modelInfo:r,matchType:"exact-with-inferred-provider"}}}let _=this.models.get(u.toLowerCase());if(_){if(o(_))return{success:!1,reason:"model-blocked"};return{success:!0,modelInfo:_,matchType:"exact-with-inferred-provider"}}}let d=this.fuzzyMatchModels(u,0.6,a,e);return d?{success:!0,modelInfo:d,matchType:"fuzzy"}:{success:!1,reason:"model-not-found"}}isModelAvailable(t){return this.getProviderForModel(t).success}getAvailableModels(){let t=new Set;for(let e of this.uniqueModels)if(this.isModelAvailable(e))t.add(e);return Array.from(t)}getProviderStatus(){return new Map(this.providerStatus)}calculateCost(t,e){let u=this.getModelInfo(t);if(!u.success)return this.logger?.log(`Cannot calculate cost: model not found: ${t}`,"debug"),null;let a=u.info.cost;if(!a)return this.logger?.log(`Cannot calculate cost: no pricing data for ${t}`,"debug"),null;let l=e.inputTokens/1e6*(a.input||0),i=e.outputTokens/1e6*(a.output||0),o=(e.cacheReadTokens||0)/1e6*(a.cache_read||0),d=(e.cacheCreationTokens||0)/1e6*(a.cache_write||0);return l+i+o+d}formatCost(t){if(t===0)return"$0.0000";if(t<0.01)return`$${(t*100).toFixed(4)}¢`;return`$${t.toFixed(4)}`}getModelsForProvider(t){let e=[],u=t.toLowerCase();for(let a of this.uniqueModels){let l=this.models.get(a);if(l&&l.providerId.toLowerCase()===u)e.push(a)}return e}getStats(){let t=this.uniqueModels.size,e=fu.length,u=Array.from(this.providerStatus.values()).filter((l)=>l.status==="available").length,a=Array.from(this.providerStatus.values()).filter((l)=>l.status==="available"&&l.healthy===!0).length;return{totalModels:t,totalProviders:e,availableProviders:u,healthyProviders:a}}}});var at=(t)=>t,gu=(t)=>t,Ne=(t)=>t,z=(t)=>t;import Lt from"node:fs";import Fr from"node:os";import Xt from"node:path";function DB(t,e){let u=[];for(let a of t.issues){let l=a.path,i="";if(l[0]===void 0&&a.code==="too_small")i=` - ${a.message}`;else if(typeof l[0]==="number"){let o=l[0],d=Array.isArray(e)?e[o]:null,m=d?.id||`index ${o}`,_=d?.name||"unnamed";if(l.length===1)i=` - Codon "${_}" (${m}): ${a.message}`;else{let n=l.slice(1).join(".");i=` - Codon "${_}" (${m}) - ${n}: ${a.message}`}}else if(a.code==="unrecognized_keys"){let o=a.keys?.join(", "),d=typeof l[0]==="number"?l[0]:void 0,m=d!==void 0&&Array.isArray(e)?e[d]:null,_=m?.id||(d!==void 0?`index ${d}`:""),n=m?.name||"unnamed";if(d!==void 0){let r=m?.type==="loop"?"Loop":"Codon",c=m?.type==="loop"?"type, id, name, description, terminateOn, codons":"type, id, name, promptFile, promptText, appendSystemPromptFile, appendSystemPromptText, model, continuationMode, rigSetup, description, checkpointedFiles, env, outputFiles, sentinels";i=` - ${r} "${n}" (${_}) has unrecognized field(s): ${o}. Fix: Remove these fields or check for typos. Valid fields are: ${c}.`}else i=` - Unrecognized field(s): ${o}. Fix: Remove these fields or check for typos.`}else i=` - ${l.join(".")||"Configuration"}: ${a.message}`;u.push(i)}return u.join(`
|
|
53
|
+
`)}function jr(t){if(!t)return!0;let e=kt.getInstance();return l0(t,e).valid}function Dr(t){let e=kt.getInstance();if(!t)throw Error("Unreachable");let u=l0(t,e);return{message:`Invalid model '${t}': ${u.reason}`,path:["model"]}}function no(t){try{let e=Lt.readFileSync(t,"utf-8"),u=JSON.parse(e),a=eQ.safeParse(u);if(!a.success){let l=DB(a.error,u);throw Error(`Invalid hank file:
|
|
54
|
+
${l}`)}return a.data}catch(e){if(e.code==="ENOENT")throw Error(`Hank file not found: ${t}`);throw e}}function uQ(t){try{let l=function(_){if(_.type==="loop")return{..._,codons:_.codons.map((r)=>l(r))};let n={..._};if(n.promptFile){if(Array.isArray(n.promptFile))n.promptFile=n.promptFile.map((r)=>Xt.isAbsolute(r)?r:Xt.resolve(a,r));else if(!Xt.isAbsolute(n.promptFile))n.promptFile=Xt.resolve(a,n.promptFile)}if(n.appendSystemPromptFile){if(Array.isArray(n.appendSystemPromptFile))n.appendSystemPromptFile=n.appendSystemPromptFile.map((r)=>Xt.isAbsolute(r)?r:Xt.resolve(a,r));else if(!Xt.isAbsolute(n.appendSystemPromptFile))n.appendSystemPromptFile=Xt.resolve(a,n.appendSystemPromptFile)}if(n.rigSetup)n.rigSetup=n.rigSetup.map((r)=>{if(r.type==="copy"&&r.copy)return{...r,copy:{from:Xt.isAbsolute(r.copy.from)?r.copy.from:Xt.resolve(a,r.copy.from),to:r.copy.to}};return r});return n},d=function(_,n,r,c=!1){if(_.type==="loop"){for(let[x,I]of _.codons.entries()){let s=`Loop '${_.id}' > Codon ${x+1} (${I.id})`;d(I,s,x,!0)}return}if(_.promptFile){let x=Array.isArray(_.promptFile)?_.promptFile:[_.promptFile];for(let I of x)if(!Lt.existsSync(I))o.push(`${n}: promptFile "${I}" does not exist`);else try{Lt.readFileSync(I,"utf-8")}catch(s){o.push(`${n}: promptFile "${I}" is not readable: ${s instanceof Error?s.message:String(s)}`)}}if(_.appendSystemPromptFile){let x=Array.isArray(_.appendSystemPromptFile)?_.appendSystemPromptFile:[_.appendSystemPromptFile];for(let I of x)if(!Lt.existsSync(I))o.push(`${n}: appendSystemPromptFile "${I}" does not exist`);else try{Lt.readFileSync(I,"utf-8")}catch(s){o.push(`${n}: appendSystemPromptFile "${I}" is not readable: ${s instanceof Error?s.message:String(s)}`)}}if(_.rigSetup){for(let[x,I]of _.rigSetup.entries())if(I.type==="copy"&&I.copy){if(!Lt.existsSync(I.copy.from))o.push(`${n}, rig setup item ${x+1}: source path "${I.copy.from}" does not exist`)}}if(_.sentinels&&_.sentinels.length>0){let x=new Set,I=Xt.dirname(t);for(let[s,k]of _.sentinels.entries()){let g=`Codon ${r+1} (${_.id}), sentinel ${s+1}`,f;if(typeof k.sentinelConfig==="string"){let h=Xt.isAbsolute(k.sentinelConfig)?k.sentinelConfig:Xt.resolve(I,k.sentinelConfig);if(!Lt.existsSync(h)){let B=k.settings?.failCodonIfNotLoaded?"ERROR":"WARNING";o.push(`${g}: Sentinel config file not found: ${k.sentinelConfig} [${B}]`);continue}try{let B=Lt.readFileSync(h,"utf-8");f=JSON.parse(B)}catch(B){let Q=k.settings?.failCodonIfNotLoaded?"ERROR":"WARNING",V=B instanceof Error?B.message:String(B);o.push(`${g}: Failed to parse sentinel config file ${k.sentinelConfig}: ${V} [${Q}]`);continue}}else f=k.sentinelConfig;if(f&&typeof f==="object"&&"id"in f){let h=f.id;if(x.has(h))o.push(`${g}: Duplicate sentinel ID '${h}' in codon ${_.id}`);x.add(h)}}}},m=function(_){if(_.type==="loop")return{..._,id:at(_.id),codons:_.codons.map((n)=>m(n))};return{..._,id:at(_.id)}},u=no(t).hank,a=Xt.dirname(t),i=u.map((_)=>l(_)),o=[];for(let[_,n]of i.entries()){let r=n.type==="loop"?`Loop ${_+1} (${n.id})`:`Codon ${_+1} (${n.id})`;d(n,r,_)}if(o.length>0)throw Error(`Codon configuration validation failed:
|
|
55
|
+
${o.join(`
|
|
56
|
+
`)}`);return i.map((_)=>m(_))}catch(e){if(e instanceof Error)throw Error(`Failed to load codon config from ${t}: ${e.message}`);throw e}}async function Zr(t,e,u){let a=uQ(t),l={codons:a,codonCount:0,promptFileCount:0,systemPromptFileCount:0,rigSetupCount:0,trackingCodonCount:0,checkpointCodonCount:0,warnings:[],environmentVariables:{fromSystem:{},fromCodons:[]}};for(let n in process.env)if(n.startsWith("HANKWEAVE_")&&!n.startsWith("HANKWEAVE_RUNTIME_")&&!n.startsWith("HANKWEAVE_SENTINEL_")){let r=n.substring(10);l.environmentVariables.fromSystem[r]=process.env[n]||""}async function i(n,r,c,x,I,s){if(n.type==="loop"){let f=r||`Loop ${c+1} (${n.id})`;if(I.has(n.id))throw Error(`${f}: Duplicate loop ID "${n.id}"`);I.add(n.id);let h=new Set;for(let B of n.codons){if(h.has(B.id))throw Error(`${f}: Duplicate codon ID "${B.id}" within loop`);h.add(B.id)}if(n.terminateOn.type==="contextExceeded"){for(let B of n.codons)if(B.continuationMode==="fresh")throw Error(`${f}: Loop with contextExceeded termination cannot contain codons with continuationMode "fresh". Codon "${B.name}" (${B.id}) has continuationMode "fresh", which would prevent context from building up and cause an infinite loop. Change to "continue-previous" to allow context to accumulate.`)}for(let[B,Q]of n.codons.entries())if(Q.continuationMode==="continue-previous"&&B>0){let V=n.codons[B-1];if(Q.model.modelId!==V.model.modelId)throw Error(`${f} > Codon ${B+1} (${Q.id}): Cannot use continuationMode "continue-previous" when model differs from previous codon in loop. Different models cannot share the same session ID. Change to "fresh" to start a new conversation with a different model.`)}for(let[B,Q]of n.codons.entries()){let V=`Loop '${n.id}' > Codon ${B+1} (${Q.id})`;await i(Q,V,B,!1,I,s)}return}let k=n,g=r||`Codon ${c+1} (${k.id})`;if(I.has(k.id))throw Error(`${g}: Duplicate codon ID "${k.id}"`);if(I.add(k.id),s.has(k.name))l.warnings.push(`${g}: Duplicate codon name "${k.name}"`);if(s.add(k.name),!x&&k.rigSetup&&k.rigSetup.length>0){if(k.rigSetup.some((h)=>!h.allowFailure))l.warnings.push(`${g}: rigSetup in loop codon should use 'allowFailure: true' to prevent loop termination on setup failures. This is especially important if subsequent iterations might fail (e.g., trying to copy files to where they already exist).`)}if(l.codonCount++,k.env&&Object.keys(k.env).length>0)l.environmentVariables.fromCodons.push({codonId:k.id,codonName:k.name,variables:k.env});if(k.promptFile){let f=Array.isArray(k.promptFile)?k.promptFile:[k.promptFile];l.promptFileCount+=f.length;for(let h of f)try{let B=await Lt.promises.stat(h);if(B.size===0)l.warnings.push(`${g}: Prompt file "${h}" is empty`);if(B.size>1048576)l.warnings.push(`${g}: Prompt file "${h}" is large (${(B.size/1024/1024).toFixed(2)}MB)`)}catch(B){throw Error(`${g}: Cannot stat prompt file "${h}": ${B}`)}}if(k.appendSystemPromptFile){let f=Array.isArray(k.appendSystemPromptFile)?k.appendSystemPromptFile:[k.appendSystemPromptFile];l.systemPromptFileCount+=f.length}if(k.rigSetup){l.rigSetupCount+=k.rigSetup.length;for(let[f,h]of k.rigSetup.entries())if(h.type==="copy"&&h.copy){let B=Xt.join(e,h.copy.to),Q=Xt.dirname(B);try{if(Xt.relative(e,Q).startsWith(".."))throw Error(`${g}, rig setup item ${f+1}: Target path "${h.copy.to}" would write outside execution directory`)}catch(V){throw Error(`${g}, rig setup item ${f+1}: Invalid target path "${h.copy.to}"`)}if(Lt.existsSync(B))l.warnings.push(`${g}: Copy target "${h.copy.to}" already exists and will be overwritten`)}else if(h.type==="command"&&h.command){let B=h.command.run.trim();if(!B)throw Error(`${g}, rig setup item ${f+1}: Empty command`);let Q=[/rm\s+-rf\s+\//,/rm\s+-rf\s+~/,/>\s*\/dev\/sda/,/format\s+/i,/del\s+\/s\s+\/q\s+c:/i];for(let V of Q)if(V.test(B)){l.warnings.push(`${g}: Potentially dangerous command detected: "${B}"`);break}}}if(k.checkpointedFiles&&k.checkpointedFiles.length>0)l.trackingCodonCount++,l.checkpointCodonCount++;if(x){if(k.continuationMode==="continue-previous"&&c===0)l.warnings.push(`${g}: First codon has continuationMode "continue-previous" but there's no previous codon`);if(k.continuationMode==="continue-previous"&&c>0){let f=a[c-1];if(f.type==="loop"&&f.terminateOn.type==="contextExceeded")throw Error(`${g}: Cannot use continuationMode "continue-previous" after a loop with contextExceeded termination. Loop "${f.name}" (${f.id}) terminates only when context is exhausted, meaning there's no meaningful conversation to continue. Change to "fresh" to start a new conversation.`);let h,B;if(f.type==="loop")h=f.codons[f.codons.length-1],B=`Continues from previous loop "${f.id}" whose last codon "${h.id}"`;else h=f,B=`Continues from previous codon "${h.id}"`;if(k.model.modelId!==h.model.modelId)throw Error(`${g}: Cannot use continuationMode "continue-previous" when model differs from previous codon. Different models cannot share the same session ID. Change to "fresh" to start a new conversation with a different model.`);if(!h.checkpointedFiles||h.checkpointedFiles.length===0)l.warnings.push(`${g}: ${B} doesn't checkpoint any files`)}}}let o=new Set,d=new Set;for(let[n,r]of a.entries())await i(r,"",n,!0,o,d);if(l.codonCount===0)throw Error("Configuration must contain at least one codon");let m=new Map;function _(n){if("codons"in n)for(let r of n.codons)_(r);else m.set(n.model.modelId,n.model)}for(let n of a)_(n);if(m.size>0){l.shimSelfTests=[];for(let[n,r]of m){u.log(`Running self-test for model: ${r.name} (${r.providerId}/${n})`);let c=Xt.join(Fr.tmpdir(),`hankweave-self-test-exec-${Date.now()}`);if(!Lt.existsSync(c))Lt.mkdirSync(c,{recursive:!0});try{let{CodonRunner:x}=await Promise.resolve().then(() => (x2(),_o)),I=await x.runSelfTestForModel(r,c,u,void 0);if(l.shimSelfTests.push({modelId:n,modelName:r.name,provider:r.providerId,passed:I.overall.passed,result:I}),!I.overall.passed)l.warnings.push(`Self-test failed for ${r.name} (${r.providerId}/${n}): ${I.overall.message}`);u.log(`Self-test ${I.overall.passed?"PASSED":"FAILED"} for ${r.name}`)}catch(x){let I=x instanceof Error?x.message:String(x);u.log(`Self-test error for ${r.name}: ${I}`,"error"),l.shimSelfTests.push({modelId:n,modelName:r.name,provider:r.providerId,passed:!1,result:{shim:{name:"unknown",version:"unknown"},agent:{name:"unknown",version:"unknown",found:!1},checks:[],overall:{passed:!1,message:I}}}),l.warnings.push(`Self-test error for ${r.name} (${r.providerId}/${n}): ${I}`)}finally{if(Lt.existsSync(c))Lt.rmSync(c,{recursive:!0,force:!0})}}}if(l.shimSelfTests&&l.shimSelfTests.length>0){let n=l.shimSelfTests.filter((r)=>!r.passed);if(n.length>0){let r=n.map((c)=>` - ${c.modelName} (${c.provider}/${c.modelId}): ${c.result.overall.message}`);throw Error(`Self-test failed for ${n.length} model(s):
|
|
57
|
+
${r.join(`
|
|
58
|
+
`)}
|
|
59
|
+
|
|
60
|
+
Please ensure all required API keys and dependencies are configured correctly.`)}}return l}var jB,J0,Ar,NB,mo,LB,ZB,TB,EB,RB,SB,Nr,OB,PB,CB,yB,Lr,tQ,eQ,vY,Bu;var K0=tt(()=>{Nt();ro();c2();hu();Yt();jB=xu().version,J0={RESULT_MESSAGE_MS:30000,PROCESS_KILL_GRACE_MS:5000,LOG_PARSER_DELAY_MS:100,CODON_CLEANUP_DELAY_MS:100};Ar=["project"],NB=[...Ar,"lastCopied"],mo=p.object({type:p.literal("command").describe("Type of setup operation"),command:p.object({run:p.string().min(1,"Command cannot be empty").describe("Shell command to execute"),workingDirectory:p.enum(Ar).optional().default("project").describe("Working directory for command execution (default: 'project')")})}),LB=mo.extend({command:mo.shape.command.extend({workingDirectory:p.enum(NB).optional().default("project").describe("Working directory for command execution (default: 'project')")})}),ZB=p.discriminatedUnion("type",[p.object({type:p.literal("copy").describe("Type of setup operation"),copy:p.object({from:p.string().min(1,"Source path cannot be empty").describe("Source path (relative to config file or absolute)"),to:p.string().min(1,"Target path cannot be empty").describe("Target path relative to projectPath (parent directory must exist). Always specifies the full target path including name. Examples: from: '../templates/foo', to: 'src/foo' → copies directory foo to src/foo; from: '../templates/foo', to: 'src/bar' → copies directory foo as src/bar; from: '../config.json', to: 'src/config.json' → copies file; from: '../config.json', to: 'src/settings.json' → copies file with rename")}),allowFailure:p.boolean().optional().default(!1).describe("If true, failure of this operation won't fail the codon (default: false). Recommended for rig setup in loop codons where operations might fail in some iterations (e.g., copying files that don't exist yet).")}),LB.extend({allowFailure:p.boolean().optional().default(!1).describe("If true, failure of this operation won't fail the codon (default: false). Recommended for rig setup in loop codons where operations might fail in some iterations (e.g., running commands that might not succeed initially).")})]),TB=p.object({copy:p.array(p.string()).min(1,"The 'copy' array cannot be empty.").describe("Glob patterns to copy from execution directory to output directory"),beforeCopy:p.array(mo).optional().describe("Optional commands to run before copying (run in executionPath)")}).strict(),EB=p.array(TB).optional(),RB=p.discriminatedUnion("type",[p.object({type:p.literal("iterationLimit"),limit:p.number().int().min(1,"Iteration limit must be at least 1")}),p.object({type:p.literal("contextExceeded")})]);SB=p.object({type:p.literal("codon").optional().default("codon").describe("Type discriminator - optional, defaults to 'codon'"),id:p.string().min(1,"Codon ID cannot be empty. This uniquely identifies your codon (e.g., 'codon-1', 'analysis'). Fix: Add a unique id field.").describe("Unique identifier for this codon (e.g., 'codon-1', 'data-analysis')"),name:p.string().min(1,"Codon name cannot be empty. This is the human-readable name shown in the UI. Fix: Add a descriptive name field.").describe("Human-readable name displayed in UI and logs"),promptFile:p.union([p.string(),p.array(p.string())]).optional().describe("Path to a file containing the prompt (mutually exclusive with promptText)"),promptText:p.string().optional().describe("Inline prompt text (mutually exclusive with promptFile)"),appendSystemPromptFile:p.union([p.string(),p.array(p.string())]).optional().describe("Path to a file containing system prompt to append (mutually exclusive with appendSystemPromptText)"),appendSystemPromptText:p.string().optional().describe("Inline system prompt text to append (mutually exclusive with appendSystemPromptFile)"),model:p.string().min(1,"Model cannot be empty").describe("Model to use for this codon. Can be a Claude model ('sonnet', 'opus'), Gemini model ('gemini-2.0-flash-exp', 'flash'), or any other model supported by the configured shim."),continuationMode:p.enum(["fresh","continue-previous"],{errorMap:()=>({message:"continuationMode must be either 'fresh' or 'continue-previous'. This controls whether to start a new conversation or continue from the previous codon. Fix: Add continuationMode field with either 'fresh' (new conversation) or 'continue-previous' (maintain context)."})}).describe("How this codon should handle continuation from previous codons. 'fresh': Start a new session (default for most cases). 'continue-previous': Continue from the previous codon's session, maintaining context and conversation history. The previous codon must have completed successfully."),rigSetup:p.array(ZB).optional().describe("Rig setup operations to run before codon starts. Each operation must complete successfully for codon to start."),description:p.string().optional().describe("Optional description shown to users about what this codon does"),checkpointedFiles:p.array(p.string()).optional().describe("Glob patterns for files to checkpoint during codon execution. These files will be: watched for changes and streamed to the client, tracked in the git-based checkpoint system, and resolved using gitignore rules for consistency."),env:p.record(p.string()).optional().describe("Optional environment variables to set for the Claude process"),outputFiles:EB.describe("Optional output copy steps to run after codon completion: files to copy out from a completed codon, with optional pre-copy commands."),sentinels:p.array(za).optional().describe("Sentinels to run during this codon. Sentinels are parallel observation agents that process the event stream. Each entry is a wrapper object with sentinelConfig (portable sentinel configuration, file or inline) and settings (codon-specific settings like output paths and load requirements). This wrapper pattern keeps sentinel configs reusable across codons.")}),Nr=SB.strict().refine((t)=>t.promptFile||t.promptText,{message:"Either promptFile or promptText must be provided. The prompt tells Claude what to do in this codon. Fix: Add either promptFile (path to .md file) or promptText (inline prompt string)."}).refine((t)=>!(t.appendSystemPromptFile&&t.appendSystemPromptText),{message:"Cannot specify both appendSystemPromptFile and appendSystemPromptText. Use one or the other to add system-level instructions. Fix: Remove one of these fields."}).transform((t,e)=>{let u=kt.getInstance(),a=l0(t.model,u);if(!a.valid)return e.addIssue({code:p.ZodIssueCode.custom,message:`Invalid model '${t.model}': ${a.reason}`,path:["model"]}),p.NEVER;return{...t,model:a.modelInfo}}),OB=p.object({type:p.literal("loop").describe("Type discriminator - required for loops"),id:p.string().min(1,"Loop ID cannot be empty. This uniquely identifies your loop (e.g., 'iterative-development'). Fix: Add a unique id field.").describe("Unique identifier for this loop (e.g., 'iterative-development')"),name:p.string().min(1,"Loop name cannot be empty. This is the human-readable name shown in the UI. Fix: Add a descriptive name field.").describe("Human-readable name displayed in UI and logs"),description:p.string().optional().describe("Optional description shown to users about what this loop does"),terminateOn:RB.describe("Termination condition for the loop"),codons:p.array(Nr).min(1,"Loop must contain at least one codon. Fix: Add codons to the loop.").describe("Array of codons to execute in each iteration. Only Codon objects allowed (no nested loops).")}),PB=p.union([Nr,OB.strict()]),CB=p.array(PB).min(1,"At least one codon required"),yB=p.object({name:p.string().min(1,"Hank name cannot be empty").describe("Human-readable name for the hank"),version:p.string().min(1,"Hank version cannot be empty").describe("Version number (e.g., '1.0.0')"),description:p.string().optional().describe("Optional description of what this hank does"),author:p.string().optional().describe("Optional author information")}),Lr=p.object({enablePersistence:p.boolean().optional().describe("Enable filesystem persistence for sentinel outputs"),healthCheckGracePeriodMs:p.number().int().positive().optional().describe("Grace period for sentinel health checks (milliseconds)"),waitForAllHealthChecks:p.boolean().optional().describe("Wait for all health checks before loading sentinels")}).strict(),tQ=p.object({model:p.string().optional().describe("Recommended model for this hank (e.g., 'sonnet' for Claude, 'flash' for Gemini, 'This task needs high reasoning')"),dataHashTimeLimit:p.number().int().positive().optional().describe("Recommended time limit for data hashing in milliseconds"),sentinel:Lr.optional().describe("Recommended sentinel system settings")}).strict().refine((t)=>jr(t.model),(t)=>Dr(t.model)),eQ=p.object({meta:yB.optional().describe("Metadata for sharing/indexing (optional)"),recommendations:tQ.optional().describe("Architect's recommendations for optimal execution (optional)"),hank:CB.describe("The immutable logic sequence (required)")}),vY=p.object({port:p.number().int().positive().optional().describe("WebSocket server port"),autostart:p.boolean().optional().describe("If true, run immediately on client connect"),withoutProxy:p.boolean().optional().describe("Bypass internal LLM proxy"),model:p.string().min(1).optional().describe("User's preferred default model. Can be a short name like 'sonnet' or 'opus', a Gemini model like 'gemini-2.0-flash', or any model supported by the configured providers. Validation happens at runtime via LLMRegistry."),anthropicBaseUrl:p.string().url().optional().describe("Custom Anthropic API base URL (for corporate proxies)"),outputDirectory:p.string().optional().describe("Where to put results (relative to CWD)"),executionBaseDir:p.string().optional().describe("Where to create temp execution environments"),logParsingInterval:p.number().int().positive().optional().describe("Interval for parsing Claude log files (milliseconds)"),dataHashTimeLimit:p.number().int().positive().optional().describe("Time limit for hashing directories (milliseconds)"),idleTimeout:p.number().int().min(0,"Idle timeout must be at least 0").max(255,"Idle timeout must be at most 255").optional().describe("Idle timeout for WebSocket and proxy servers in seconds (0-255). This is the maximum amount of time a connection is allowed to be idle before the server closes it. A connection is idling if there is no data sent or received."),sentinel:Lr.optional().describe("Sentinel system configuration")}).strict().refine((t)=>jr(t.model),(t)=>Dr(t.model)),Bu={port:7777,version:jB,outputDirectory:"hankweave-results",executionBaseDir:Xt.join(Fr.homedir(),".hankweave-executions"),lockFile:".hankweave/runtime.lock",socketLogFile:".hankweave/logs/websocket.log",serverLogFile:".hankweave/logs/server.log",logParsingInterval:1000,autostart:!0,dataHashTimeLimit:5000,toolResultTruncateLength:2500,withoutProxy:!0,handshakeHistoryLimit:50,idleTimeout:0,sentinel:{enablePersistence:!0,healthCheckGracePeriodMs:2000,waitForAllHealthChecks:!1}}});import{spawn as Tr}from"node:child_process";import i0 from"node:fs";import Qu from"node:path";var Ua;var Er=tt(()=>{K0();$0();z2();Yt();Ua=class Ua extends Ot{executionPath;logger;logParser;anthropicBaseUrl;model;process;logStream;killed=!1;promptFrontmatter;constructor(t,e,u,a,l){super();this.executionPath=t;this.logger=e;this.logParser=u;this.anthropicBaseUrl=a;this.model=l}async spawn(t,e,u,a){if(this.process)throw Error("Process already running");let l=a||Qu.join(this.executionPath,`.hankweave/logs/log-${e.id}.jsonl`),i=Qu.dirname(l);if(!i0.existsSync(i))i0.mkdirSync(i,{recursive:!0});this.logStream=i0.createWriteStream(l);let o=this.buildShimArgs(e,u),d={...process.env};for(let c in process.env)if(c.startsWith("HANKWEAVE_")&&!c.startsWith("HANKWEAVE_RUNTIME_")&&!c.startsWith("HANKWEAVE_SENTINEL_")){let x=c.substring(10);d[x]=process.env[c],this.logger.log(`Passing through env var: ${x}`)}if(this.anthropicBaseUrl)d.ANTHROPIC_BASE_URL=this.anthropicBaseUrl,this.logger.log(`Using custom Anthropic base URL: ${this.anthropicBaseUrl}`);if(e.env)this.logger.log("Applying codon-specific environment variables..."),Object.assign(d,e.env);let[m,..._]=t,n=[..._,...o],r=`${m} ${n.join(" ")}`;if(this.logger.log(`Executing Agent: ${r}`),this.logger.log(`Working directory: ${this.executionPath}`),this.logger.log(`Current process.cwd(): ${process.cwd()}`),this.logger.log(`Absolute executionPath: ${Qu.resolve(this.executionPath)}`),this.logger.log(`Execution path exists: ${i0.existsSync(this.executionPath)}`),this.logger.log(`Execution path is directory: ${i0.existsSync(this.executionPath)&&i0.statSync(this.executionPath).isDirectory()}`),this.process=Tr(m,n,{cwd:this.executionPath,stdio:["pipe","pipe","pipe"],env:d}),this.killed=!1,this.process.stdout)this.process.stdout.pipe(this.logStream),this.process.stdout.on("error",(c)=>{this.logger.log(`Stdout pipe error: ${c.message}`,"error")}),this.logStream.on("error",(c)=>{this.logger.log(`Log stream error: ${c.message}`,"error")});return this.setupProcessHandlers(),await this.feedPrompt(e),this.logger.log(`Shim process started for codon ${e.id} (PID: ${this.process.pid})`),l}buildShimArgs(t,e){let u=this.model||t.model,l=["--model",u.modelId,"-p"];if(this.model)this.logger.log(`Using model override: ${u.modelId} (codon config specified: ${t.model.modelId})`);if(t.continuationMode==="continue-previous"&&e)l.push("--resume",e);let i=this.buildSystemPrompt(t);if(i)l.push("--append-system-prompt",u2(i)),this.logger.log(`Added system prompt to shim (${i.length} chars)`),this.logger.log(`System prompt content:
|
|
61
|
+
${i}`);let o=Qu.join(this.executionPath,".hankweave/logs/shim-debug",t.id.replace(/#/g,"-"));return l.push("--debug-dir",o),this.logger.log(`Using shim debug directory: ${o}`),l}buildSystemPrompt(t){let e=null;if(t.appendSystemPromptFile){let u=Array.isArray(t.appendSystemPromptFile)?t.appendSystemPromptFile:[t.appendSystemPromptFile],a=[];for(let l of u)a.push(i0.readFileSync(l,"utf-8"));e=a.join(`
|
|
62
|
+
|
|
63
|
+
`)}else if(t.appendSystemPromptText)e=t.appendSystemPromptText;if(e)return e.replace(/<%PROJECT_DIR%>/g,this.executionPath).replace(/<%EXECUTION_DIR%>/g,this.executionPath).replace(/<%DATA_DIR%>/g,Qu.join(this.executionPath,"read_only_data_source"));return null}async feedPrompt(t){if(!this.process?.stdin)throw Error("Process stdin not available");let{parsePromptFrontmatter:e}=await Promise.resolve().then(() => (Ga(),qa)),u,a;if(t.promptFile){let i=Array.isArray(t.promptFile)?t.promptFile:[t.promptFile],o=[];for(let d=0;d<i.length;d++){let m=i0.readFileSync(i[d],"utf-8"),_=e(m);if(o.push(_.content),d===0&&_.hasFrontmatter)a=_.frontmatter}u=o.join(`
|
|
64
|
+
|
|
65
|
+
`)}else if(t.promptText)u=t.promptText;else throw Error("No prompt file or text provided");if(a)this.promptFrontmatter=a,this.logger.log(`Prompt frontmatter: ${JSON.stringify(a)}`);let l=u.replace(/<%PROJECT_DIR%>/g,this.executionPath).replace(/<%EXECUTION_DIR%>/g,this.executionPath).replace(/<%DATA_DIR%>/g,Qu.join(this.executionPath,"read_only_data_source"));this.process.stdin.write(l),this.process.stdin.end(),this.logger.log(`Fed prompt to shim (${l.length} chars)`),this.logger.log(`Prompt content:
|
|
66
|
+
${l}`)}setupProcessHandlers(){if(!this.process)return;this.process.on("exit",(t,e)=>{this.logger.log(`Shim process exited with code: ${t}, signal: ${e}`),this.logParser.parseNow();let a=this.logParser.getAllMessages().some((l)=>Cd(l));if(a)this.logger.log("Context exceeded detected in log messages");this.cleanup(),this.emit("exit",t||0,a)}),this.process.on("error",(t)=>{this.logger.log(`Shim process error: ${t.message}`,"error"),this.cleanup(),this.emit("error",t)}),this.process.stdout?.on("data",(t)=>{this.emit("stdout",t.toString())}),this.process.stderr?.on("data",(t)=>{let e=t.toString().trim();if(this.logger.log(`Shim stderr: ${e}`,"error"),this.logStream&&!this.logStream.destroyed)this.logStream.write(`{"type":"stderr","timestamp":"${new Date().toISOString()}","message":${JSON.stringify(e)}}
|
|
67
|
+
`);this.emit("stderr",e)})}async kill(t="SIGTERM"){if(!this.process||this.killed)return;this.killed=!0,this.logger.log(`Killing shim process with ${t}`),this.logParser.parseNow(),await new Promise((e)=>setTimeout(e,100)),this.process.kill(t),await new Promise((e)=>{let u=setInterval(()=>{if(!this.process||this.process.killed)clearInterval(u),e()},J0.LOG_PARSER_DELAY_MS);setTimeout(()=>{if(clearInterval(u),this.process&&!this.process.killed)this.logger.log("Force killing shim process with SIGKILL"),this.process.kill("SIGKILL");e()},J0.PROCESS_KILL_GRACE_MS)})}cleanup(){if(this.logStream&&!this.logStream.destroyed)this.logStream.end(),this.logStream=void 0;if(this.process)this.process.removeAllListeners(),this.process=void 0}isRunning(){return this.process!==void 0&&!this.process.killed}getPid(){return this.process?.pid}async closeLogStream(){if(this.logStream&&!this.logStream.destroyed)await new Promise((t)=>{this.logStream?.end(()=>t())}),this.logStream=void 0}async runSelfTest(t){this.logger.log("Running shim self-test...");let[e,...u]=t,a=[...u,"--self-test"],l=`${e} ${a.join(" ")}`;return this.logger.log(`Executing self-test: ${l}`),new Promise((i,o)=>{let d=Tr(e,a,{cwd:this.executionPath,stdio:["ignore","pipe","pipe"],env:{...process.env}}),m="",_="";d.stdout?.on("data",(r)=>{m+=r.toString()}),d.stderr?.on("data",(r)=>{_+=r.toString(),this.logger.log(`Self-test stderr: ${r.toString()}`,"debug")});let n=setTimeout(()=>{d.kill("SIGTERM"),o(Error("Self-test timed out after 30 seconds"))},30000);d.on("close",(r)=>{if(clearTimeout(n),r!==0){if(this.logger.log(`Self-test failed with exit code ${r}`,"error"),_)this.logger.log(`Stderr: ${_}`,"error")}try{let c=JSON.parse(m);this.logger.log(`Self-test completed: ${c.overall.passed?"PASSED":"FAILED"}`,c.overall.passed?"info":"error"),i(c)}catch(c){let x=c instanceof Error?c.message:"Unknown error parsing JSON";o(Error(`Failed to parse self-test output: ${x}
|
|
68
|
+
Output: ${m}`))}}),d.on("error",(r)=>{clearTimeout(n),o(r)})})}}});import Le from"node:fs";import aQ from"node:os";import o0 from"node:path";function lQ(){let e=(process.argv[1]||"").match(/^([A-Z]):\/~BUN\/root/i);if(e)return`${e[1]}:/~BUN/root`;return"/$bunfs/root"}async function iQ(t){let e=t.replace(/\\/g,"/"),u=o0.basename(e),a=`${u}.`,l=globalThis.Bun?.embeddedFiles;if(l)for(let m of l){let _=o0.basename(m.name);if(m.name===e||m.name===t||m.name===u||m.name===a||_===u||_===a){let n=await m.arrayBuffer();if(n.byteLength>0)return n}}let o=[`${lQ()}/${e}`,e,`/$bunfs/root/${e}`,t],d=[];for(let m of o)try{let _=Bun.file(m);if(await _.exists()){let r=await _.arrayBuffer();if(r.byteLength>0)return r;d.push(`${m}: file exists but is empty`)}else d.push(`${m}: does not exist`)}catch(_){d.push(`${m}: ${_.message}`)}throw Error(`Embedded file not found: ${t}
|
|
69
|
+
Tried paths:
|
|
70
|
+
${d.join(`
|
|
71
|
+
`)}`)}function xo(){let t=process.env.HANKWEAVE_CACHE_DIR||o0.join(aQ.homedir(),".hankweave");return o0.join(t,"shims",co)}function I2(t){return o0.join(xo(),t,"index.js")}function Rr(t){let e=I2(t);if(!Le.existsSync(e))return!0;let u=o0.join(xo(),".version");if(!Le.existsSync(u))return!0;return Le.readFileSync(u,"utf-8").trim()!==co}async function Sr(){let t=xo();console.log(`\uD83D\uDCE6 Extracting embedded shims to: ${t}`),Le.mkdirSync(t,{recursive:!0});for(let u of dQ){let a=`${oQ}/${u}/index.js`,l=I2(u);console.log(` Extracting ${u} shim...`);try{let i=await iQ(a),o=o0.dirname(l);if(Le.mkdirSync(o,{recursive:!0}),Le.writeFileSync(l,Buffer.from(i)),!Le.existsSync(l))throw Error(`Failed to extract shim to: ${l}`);console.log(` ✓ Extracted ${u} shim (${(i.byteLength/1024).toFixed(2)} KB)`)}catch(i){throw console.error(` ✗ Failed to extract ${u} shim:`,i),i}}let e=o0.join(t,".version");return Le.writeFileSync(e,co),console.log("✓ Shim extraction complete"),I2("gemini")}var co,oQ="shims",dQ;var Or=tt(()=>{Yt();co=xu().version,dQ=["gemini"]});var _o={};zu(_o,{CodonRunner:()=>W0});import pQ from"node:os";import Fa from"node:path";import{fileURLToPath as Pr}from"node:url";async function Cr(t){if(ye()){if(Rr("gemini"))await Sr();return I2("gemini")}let e=Fa.dirname(t);if(e.includes("/dist")||e.includes("\\dist"))return Fa.resolve(e,"shims/gemini/index.js");return Fa.resolve(e,"../shims/gemini/index.js")}var W0;var x2=tt(()=>{S_();y_();K0();Er();Or();$0();Yt();W0=class W0 extends Ot{config;logParser;processManager;logPath;isCleanedUp=!1;constructor(t){super();this.config=t,this.logPath=t.logPath,this.logParser=this.createLogParser(),this.processManager=this.createProcessManager(),this.config.logger.log(`CodonRunner initialized for codon ${this.config.codonId}`,"info")}static canRun(t){return["anthropic","google"].includes(t.providerId.toLowerCase())}static async runSelfTestForModel(t,e,u,a){let l=t.providerId.toLowerCase()==="anthropic",i=Fa.join(pQ.tmpdir(),`self-test-parser-${Date.now()}.jsonl`),o=new Ja({logPath:i,codonId:"self-test",parsingInterval:100,logger:u});try{let d;if(l)u.log(`Testing Claude Agent SDK for model: ${t.name} (${t.providerId}/${t.modelId})`,"info"),d=await new i2(e,u,o,a).runSelfTest();else{u.log(`Testing shim for model: ${t.name} (${t.providerId}/${t.modelId})`,"info");let m=Pr(import.meta.url),_=await Cr(m);d=await new Ua(e,u,o,a).runSelfTest(Li(_))}u.log(`Self-test ${d.overall.passed?"PASSED":"FAILED"}: ${d.overall.message}`,d.overall.passed?"info":"error");for(let m of d.checks)u.log(` - ${m.name}: ${m.passed?"✓":"✗"} ${m.message}`,m.passed?"info":"error");return d}finally{o.stop();let d=await import("node:fs");if(d.existsSync(i))d.unlinkSync(i)}}createLogParser(){return new Ja({logPath:this.logPath,codonId:this.config.codonId,parsingInterval:this.config.logParsingInterval??100,logger:this.config.logger,onSystemMessage:(t)=>this.emit("systemMessage",t),onAssistantMessage:(t)=>this.emit("assistantMessage",t),onUserMessage:(t)=>this.emit("userMessage",t),onResultMessage:(t)=>this.emit("resultMessage",t)})}createProcessManager(){let t=this.config.codon.model,e=t.providerId.toLowerCase()==="anthropic",u;if(e)this.config.logger.log(`Using Claude Agent SDK for Anthropic model: ${t.name} (${t.providerId}/${t.modelId})`,"info"),u=new i2(this.config.executionPath,this.config.logger,this.logParser,this.config.anthropicBaseUrl,void 0);else this.config.logger.log(`Using shim for model: ${t.name} (${t.providerId}/${t.modelId})`,"info"),u=new Ua(this.config.executionPath,this.config.logger,this.logParser,this.config.anthropicBaseUrl,void 0);return u.on("exit",(a,l)=>{this.emit("exit",a,l)}),u.on("error",(a)=>{this.emit("error",a)}),u.on("stdout",(a)=>{this.emit("stdout",a)}),u.on("stderr",(a)=>{this.emit("stderr",a)}),u}async run(t){if(this.config.logger.log(`CodonRunner: Starting execution of codon ${this.config.codonId}`,"info"),this.processManager instanceof i2)await this.processManager.spawn(this.config.codon,t||null,this.logPath);else{let u=Pr(import.meta.url),a=await Cr(u);await this.processManager.spawn(Li(a),this.config.codon,t||null,this.logPath)}let e=this.processManager.getPid();this.config.logger.log(`CodonRunner: Process spawned for codon ${this.config.codonId} (PID: ${e})`,"info"),setTimeout(()=>{this.logParser.start()},J0.LOG_PARSER_DELAY_MS)}async kill(t="SIGTERM"){if(!this.isCleanedUp&&this.processManager)this.config.logger.log(`CodonRunner: Killing process for codon ${this.config.codonId} with ${t}`,"info"),await this.processManager.kill(t)}isRunning(){return this.processManager?.isRunning()??!1}getPid(){return this.processManager?.getPid()}getPromptFrontmatter(){return this.processManager?.promptFrontmatter}async cleanup(){if(this.isCleanedUp){this.config.logger.log(`CodonRunner: Already cleaned up for codon ${this.config.codonId}`,"debug");return}this.config.logger.log(`[CodonRunner.cleanup] ======= ENTERED cleanup for codon ${this.config.codonId} =======`,"info"),this.config.logger.log(`[CodonRunner.cleanup] hasProcessManager=${!!this.processManager}, hasLogParser=${!!this.logParser}`,"info"),this.config.logger.log(`CodonRunner: Cleaning up resources for codon ${this.config.codonId}`,"info");let t=Error().stack;if(this.config.logger.log(`[CLEANUP-STACK] Cleanup called from:
|
|
72
|
+
${t?.split(`
|
|
73
|
+
`).slice(1,6).join(`
|
|
74
|
+
`)}`,"debug"),this.logParser)this.logParser.stop();if(this.processManager)this.processManager.removeAllListeners(),await this.processManager.closeLogStream();this.removeAllListeners(),this.isCleanedUp=!0,this.config.logger.log(`CodonRunner: Cleanup complete for codon ${this.config.codonId}`,"info")}}});function l0(t,e,u){let a=e.resolveModel({model:t,providerId:u,ignoreBlockList:!0});if(!a.success){let i;if(a.reason==="model-not-found")i=`Model '${t}' not found in registry. Please check the model name or ensure the provider is configured.`;else i=`Model '${t}' is blocked`;return{valid:!1,reason:i}}if(!W0.canRun(a.modelInfo)){let i=["anthropic","google"],o=a.modelInfo.providerId;return{valid:!1,modelInfo:a.modelInfo,reason:`Model '${t}' uses provider '${o}' which is not currently supported. Supported providers: ${i.join(", ")}. Please use a model from a supported provider or configure the appropriate shim.`,matchType:a.matchType}}return{valid:!0,modelInfo:a.modelInfo,matchType:a.matchType}}var ro=tt(()=>{x2()});var W4=H((HH,K4)=>{var vu=1000,qu=vu*60,Gu=qu*60,V0=Gu*24,Kv=V0*7,Wv=V0*365.25;K4.exports=function(t,e){e=e||{};var u=typeof t;if(u==="string"&&t.length>0)return Vv(t);else if(u==="number"&&isFinite(t))return e.long?Hv(t):Yv(t);throw Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))};function Vv(t){if(t=String(t),t.length>100)return;var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(!e)return;var u=parseFloat(e[1]),a=(e[2]||"ms").toLowerCase();switch(a){case"years":case"year":case"yrs":case"yr":case"y":return u*Wv;case"weeks":case"week":case"w":return u*Kv;case"days":case"day":case"d":return u*V0;case"hours":case"hour":case"hrs":case"hr":case"h":return u*Gu;case"minutes":case"minute":case"mins":case"min":case"m":return u*qu;case"seconds":case"second":case"secs":case"sec":case"s":return u*vu;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return u;default:return}}function Yv(t){var e=Math.abs(t);if(e>=V0)return Math.round(t/V0)+"d";if(e>=Gu)return Math.round(t/Gu)+"h";if(e>=qu)return Math.round(t/qu)+"m";if(e>=vu)return Math.round(t/vu)+"s";return t+"ms"}function Hv(t){var e=Math.abs(t);if(e>=V0)return ja(t,e,V0,"day");if(e>=Gu)return ja(t,e,Gu,"hour");if(e>=qu)return ja(t,e,qu,"minute");if(e>=vu)return ja(t,e,vu,"second");return t+" ms"}function ja(t,e,u,a){var l=e>=u*1.5;return Math.round(t/u)+" "+a+(l?"s":"")}});var Qo=H((zH,V4)=>{function zv(t){u.debug=u,u.default=u,u.coerce=m,u.disable=o,u.enable=l,u.enabled=d,u.humanize=W4(),u.destroy=_,Object.keys(t).forEach((n)=>{u[n]=t[n]}),u.names=[],u.skips=[],u.formatters={};function e(n){let r=0;for(let c=0;c<n.length;c++)r=(r<<5)-r+n.charCodeAt(c),r|=0;return u.colors[Math.abs(r)%u.colors.length]}u.selectColor=e;function u(n){let r,c=null,x,I;function s(...k){if(!s.enabled)return;let g=s,f=Number(new Date),h=f-(r||f);if(g.diff=h,g.prev=r,g.curr=f,r=f,k[0]=u.coerce(k[0]),typeof k[0]!=="string")k.unshift("%O");let B=0;k[0]=k[0].replace(/%([a-zA-Z%])/g,(V,A)=>{if(V==="%%")return"%";B++;let F=u.formatters[A];if(typeof F==="function"){let L=k[B];V=F.call(g,L),k.splice(B,1),B--}return V}),u.formatArgs.call(g,k),(g.log||u.log).apply(g,k)}if(s.namespace=n,s.useColors=u.useColors(),s.color=u.selectColor(n),s.extend=a,s.destroy=u.destroy,Object.defineProperty(s,"enabled",{enumerable:!0,configurable:!1,get:()=>{if(c!==null)return c;if(x!==u.namespaces)x=u.namespaces,I=u.enabled(n);return I},set:(k)=>{c=k}}),typeof u.init==="function")u.init(s);return s}function a(n,r){let c=u(this.namespace+(typeof r>"u"?":":r)+n);return c.log=this.log,c}function l(n){u.save(n),u.namespaces=n,u.names=[],u.skips=[];let r=(typeof n==="string"?n:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let c of r)if(c[0]==="-")u.skips.push(c.slice(1));else u.names.push(c)}function i(n,r){let c=0,x=0,I=-1,s=0;while(c<n.length)if(x<r.length&&(r[x]===n[c]||r[x]==="*"))if(r[x]==="*")I=x,s=c,x++;else c++,x++;else if(I!==-1)x=I+1,s++,c=s;else return!1;while(x<r.length&&r[x]==="*")x++;return x===r.length}function o(){let n=[...u.names,...u.skips.map((r)=>"-"+r)].join(",");return u.enable(""),n}function d(n){for(let r of u.skips)if(i(n,r))return!1;for(let r of u.names)if(i(n,r))return!0;return!1}function m(n){if(n instanceof Error)return n.stack||n.message;return n}function _(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return u.enable(u.load()),u}V4.exports=zv});var H4=H((Y4,Da)=>{Y4.formatArgs=Mv;Y4.save=Uv;Y4.load=Fv;Y4.useColors=bv;Y4.storage=Av();Y4.destroy=(()=>{let t=!1;return()=>{if(!t)t=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}})();Y4.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function bv(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let t;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(t=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(t[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function Mv(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+Da.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;t.splice(1,0,e,"color: inherit");let u=0,a=0;t[0].replace(/%[a-zA-Z%]/g,(l)=>{if(l==="%%")return;if(u++,l==="%c")a=u}),t.splice(a,0,e)}Y4.log=console.debug||console.log||(()=>{});function Uv(t){try{if(t)Y4.storage.setItem("debug",t);else Y4.storage.removeItem("debug")}catch(e){}}function Fv(){let t;try{t=Y4.storage.getItem("debug")||Y4.storage.getItem("DEBUG")}catch(e){}if(!t&&typeof process<"u"&&"env"in process)t=process.env.DEBUG;return t}function Av(){try{return localStorage}catch(t){}}Da.exports=Qo()(Y4);var{formatters:jv}=Da.exports;jv.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var U4=H((b4,La)=>{var Sv=it("tty"),Na=it("util");b4.init=uq;b4.log=yv;b4.formatArgs=Pv;b4.save=tq;b4.load=eq;b4.useColors=Ov;b4.destroy=Na.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");b4.colors=[6,2,3,4,5,1];try{let t=(()=>{throw new Error("Cannot require module "+"supports-color");})();if(t&&(t.stderr||t).level>=2)b4.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221]}catch(t){}b4.inspectOpts=Object.keys(process.env).filter((t)=>{return/^debug_/i.test(t)}).reduce((t,e)=>{let u=e.substring(6).toLowerCase().replace(/_([a-z])/g,(l,i)=>{return i.toUpperCase()}),a=process.env[e];if(/^(yes|on|true|enabled)$/i.test(a))a=!0;else if(/^(no|off|false|disabled)$/i.test(a))a=!1;else if(a==="null")a=null;else a=Number(a);return t[u]=a,t},{});function Ov(){return"colors"in b4.inspectOpts?Boolean(b4.inspectOpts.colors):Sv.isatty(process.stderr.fd)}function Pv(t){let{namespace:e,useColors:u}=this;if(u){let a=this.color,l="\x1B[3"+(a<8?a:"8;5;"+a),i=` ${l};1m${e} \x1B[0m`;t[0]=i+t[0].split(`
|
|
75
|
+
`).join(`
|
|
76
|
+
`+i),t.push(l+"m+"+La.exports.humanize(this.diff)+"\x1B[0m")}else t[0]=Cv()+e+" "+t[0]}function Cv(){if(b4.inspectOpts.hideDate)return"";return new Date().toISOString()+" "}function yv(...t){return process.stderr.write(Na.formatWithOptions(b4.inspectOpts,...t)+`
|
|
77
|
+
`)}function tq(t){if(t)process.env.DEBUG=t;else delete process.env.DEBUG}function eq(){return process.env.DEBUG}function uq(t){t.inspectOpts={};let e=Object.keys(b4.inspectOpts);for(let u=0;u<e.length;u++)t.inspectOpts[e[u]]=b4.inspectOpts[e[u]]}La.exports=Qo()(b4);var{formatters:z4}=La.exports;z4.o=function(t){return this.inspectOpts.colors=this.useColors,Na.inspect(t,this.inspectOpts).split(`
|
|
78
|
+
`).map((e)=>e.trim()).join(" ")};z4.O=function(t){return this.inspectOpts.colors=this.useColors,Na.inspect(t,this.inspectOpts)}});var qo=H((UH,vo)=>{if(typeof process>"u"||process.type==="renderer"||!1||process.__nwjs)vo.exports=H4();else vo.exports=U4()});var F4=H((Pt)=>{var nq=Pt&&Pt.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Pt,"__esModule",{value:!0});var _q=it("fs"),rq=nq(qo()),$u=rq.default("@kwsites/file-exists");function cq(t,e,u){$u("checking %s",t);try{let a=_q.statSync(t);if(a.isFile()&&e)return $u("[OK] path represents a file"),!0;if(a.isDirectory()&&u)return $u("[OK] path represents a directory"),!0;return $u("[FAIL] path represents something other than a file or directory"),!1}catch(a){if(a.code==="ENOENT")return $u("[FAIL] path is not accessible: %o",a),!1;throw $u("[FATAL] %o",a),a}}function xq(t,e=Pt.READABLE){return cq(t,(e&Pt.FILE)>0,(e&Pt.FOLDER)>0)}Pt.exists=xq;Pt.FILE=1;Pt.FOLDER=2;Pt.READABLE=Pt.FILE+Pt.FOLDER});var A4=H((Go)=>{function Iq(t){for(var e in t)if(!Go.hasOwnProperty(e))Go[e]=t[e]}Object.defineProperty(Go,"__esModule",{value:!0});Iq(F4())});var Xo=H((j4)=>{Object.defineProperty(j4,"__esModule",{value:!0});j4.createDeferred=j4.deferred=void 0;function $o(){let t,e,u="pending";return{promise:new Promise((l,i)=>{t=l,e=i}),done(l){if(u==="pending")u="resolved",t(l)},fail(l){if(u==="pending")u="rejected",e(l)},get fulfilled(){return u!=="pending"},get status(){return u}}}j4.deferred=$o;j4.createDeferred=$o;j4.default=$o});var Bx={};zu(Bx,{simpleGit:()=>WX,pathspec:()=>g3,grepQueryBuilder:()=>uc,gitP:()=>JX,default:()=>cl,TaskConfigurationError:()=>Eo,ResetMode:()=>Q2,GitResponseError:()=>b0,GitPluginError:()=>Je,GitError:()=>Ke,GitConstructError:()=>gx,GitConfigScope:()=>ya,DiffNameStatus:()=>Ta,CleanOptions:()=>B2,CheckRepoActions:()=>Ca});import{Buffer as Bq}from"node:buffer";import{spawn as aG}from"child_process";import{normalize as f$}from"node:path";import{EventEmitter as hX}from"node:events";function g3(...t){let e=new String(t);return ul.set(e,t),e}function Sa(t){return t instanceof String&&ul.has(t)}function N4(t){return ul.get(t)||[]}function Q3(t){if(typeof t!=="function")return M0;return t}function v3(t){return typeof t==="function"&&t!==M0}function q3(t,e){let u=t.indexOf(e);if(u<=0)return[t,""];return[t.substr(0,u),t.substr(u+1)]}function G3(t,e=0){return $3(t)&&t.length>e?t[e]:void 0}function z0(t,e=0){if($3(t)&&t.length>e)return t[t.length-1-e]}function $3(t){return dl(t)}function $2(t="",e=!0,u=`
|
|
79
|
+
`){return t.split(u).reduce((a,l)=>{let i=e?l.trim():l;if(i)a.push(i);return a},[])}function Ro(t,e){return $2(t,!0).map((u)=>e(u))}function So(t){return al.exists(t,al.FOLDER)}function ot(t,e){if(Array.isArray(t)){if(!t.includes(e))t.push(e)}else t.add(e);return e}function X3(t,e){if(Array.isArray(t)&&!t.includes(e))t.push(e);return t}function ll(t,e){if(Array.isArray(t)){let u=t.indexOf(e);if(u>=0)t.splice(u,1)}else t.delete(e);return e}function We(t){return Array.isArray(t)?t:[t]}function J3(t){return t.replace(/[\s-]+(.)/g,(e,u)=>{return u.toUpperCase()})}function Wu(t){return We(t).map((e)=>{return e instanceof String?e:String(e)})}function xt(t,e=0){if(t==null)return e;let u=parseInt(t,10);return Number.isNaN(u)?e:u}function v2(t,e){let u=[];for(let a=0,l=t.length;a<l;a++)u.push(e,t[a]);return u}function q2(t){return(Array.isArray(t)?Bq.concat(t):t).toString("utf-8")}function K3(t,e){let u={};return e.forEach((a)=>{if(t[a]!==void 0)u[a]=t[a]}),u}function Ho(t=0){return new Promise((e)=>setTimeout(e,t))}function zo(t){if(t===!1)return;return t}function yt(t,e,u){if(e(t))return t;return arguments.length>2?u:void 0}function bo(t,e){let u=Sa(t)?"string":typeof t;return/number|string|boolean/.test(u)&&(!e||!e.includes(u))}function ol(t){return!!t&&X2(t)==="[object Object]"}function W3(t){return typeof t==="function"}function qq(){throw Error("LineParser:useMatches not implemented")}function Y3(...t){let e=process.cwd(),u=Object.assign({baseDir:e,...H3},...t.filter((a)=>typeof a==="object"&&a));return u.baseDir=u.baseDir||e,u.trimmed=u.trimmed===!0,u}function Po(t,e=[]){if(!ol(t))return e;return Object.keys(t).reduce((u,a)=>{let l=t[a];if(Sa(l))u.push(l);else if(bo(l,["boolean"]))u.push(a+"="+l);else if(Array.isArray(l)){for(let i of l)if(!bo(i,["string","number"]))u.push(a+"="+i)}else u.push(a);return u},e)}function Zt(t,e=0,u=!1){let a=[];for(let l=0,i=e<0?t.length:e;l<i;l++)if("string|number".includes(typeof t[l]))a.push(String(t[l]));if(Po(Co(t),a),!u)a.push(...Xq(t));return a}function Xq(t){let e=typeof z0(t)==="function";return Wu(yt(z0(t,e?1:0),J2,[]))}function Co(t){let e=W3(z0(t));return yt(z0(t,e?1:0),ol)}function ht(t,e=!0){let u=Q3(z0(t));return e||v3(u)?u:void 0}function Uo(t,e){return t(e.stdOut,e.stdErr)}function Et(t,e,u,a=!0){return We(u).forEach((l)=>{for(let i=$2(l,a),o=0,d=i.length;o<d;o++){let m=(_=0)=>{if(o+_>=d)return;return i[o+_]};e.some(({parse:_})=>_(m,t))}}),t}function Wq(t){switch(t){case"bare":return U3();case"root":return M3()}return{commands:["rev-parse","--is-inside-work-tree"],format:"utf-8",onError:pl,parser:yo}}function M3(){return{commands:["rev-parse","--git-dir"],format:"utf-8",onError:pl,parser(e){return/^\.(git)?$/.test(e.trim())}}}function U3(){return{commands:["rev-parse","--is-bare-repository"],format:"utf-8",onError:pl,parser:yo}}function Vq(t){return/(Not a git repository|Kein Git-Repository)/i.test(String(t))}function Yq(t,e){let u=new A3(t),a=t?D3:j3;return $2(e).forEach((l)=>{let i=l.replace(a,"");u.paths.push(i),(N3.test(i)?u.folders:u.files).push(i)}),u}function L3(t){return{commands:ml,format:"empty",parser:t}}function Tt(t){return{commands:ml,format:"empty",parser(){throw typeof t==="string"?new Eo(t):t}}}function jt(t,e=!1){return{commands:t,format:"utf-8",parser(u){return e?String(u).trim():u}}}function Z3(t){return{commands:t,format:"buffer",parser(e){return e}}}function T3(t){return t.format==="buffer"}function E3(t){return t.format==="empty"||!t.commands.length}function zq(t,e){let{cleanMode:u,options:a,valid:l}=Mq(t);if(!u)return Tt(ed);if(!l.options)return Tt(ud+JSON.stringify(t));if(a.push(...e),a.some(Aq))return Tt(td);return S3(u,a)}function S3(t,e){return{commands:["clean",`-${t}`,...e],format:"utf-8",parser(a){return Yq(t==="n",a)}}}function bq(t){return Array.isArray(t)&&t.every((e)=>ad.has(e))}function Mq(t){let e,u=[],a={cleanMode:!1,options:!0};return t.replace(/[^a-z]i/g,"").split("").forEach((l)=>{if(Uq(l))e=l,a.cleanMode=!0;else a.options=a.options&&Fq(u[u.length]=`-${l}`)}),{cleanMode:e,options:u,valid:a}}function Uq(t){return t==="f"||t==="n"}function Fq(t){return/^-[a-z]$/i.test(t)&&ad.has(t.charAt(1))}function Aq(t){if(/^-[^\-]/.test(t))return t.indexOf("i")>0;return t==="--interactive"}function jq(t){let e=new C3;for(let u of P3(t))e.addValue(u.file,String(u.key),u.value);return e}function Dq(t,e){let u=null,a=[],l=new Map;for(let i of P3(t,e)){if(i.key!==e)continue;if(a.push(u=i.value),!l.has(i.file))l.set(i.file,[]);l.get(i.file).push(u)}return{key:e,paths:Array.from(l.keys()),scopes:l,value:u,values:a}}function Nq(t){return t.replace(/^(file):/,"")}function*P3(t,e=null){let u=t.split("\x00");for(let a=0,l=u.length-1;a<l;){let i=Nq(u[a++]),o=u[a++],d=e;if(o.includes(`
|
|
80
|
+
`)){let m=q3(o,`
|
|
81
|
+
`);d=m[0],o=m[1]}yield{file:i,key:d,value:o}}}function Jo(t,e){if(typeof t==="string"&&Object.hasOwn(ya,t))return t;return e}function Zq(t,e,u,a){let l=["config",`--${a}`];if(u)l.push("--add");return l.push(t,e),{commands:l,format:"utf-8",parser(i){return i}}}function Tq(t,e){let u=["config","--null","--show-origin","--get-all",t];if(e)u.splice(1,0,`--${e}`);return{commands:u,format:"utf-8",parser(a){return Dq(a,t)}}}function Eq(t){let e=["config","--list","--show-origin","--null"];if(t)e.push(`--${t}`);return{commands:e,format:"utf-8",parser(u){return jq(u)}}}function Rq(){return{addConfig(t,e,...u){return this._runTask(Zq(t,e,u[0]===!0,Jo(u[1],"local")),ht(arguments))},getConfig(t,e){return this._runTask(Tq(t,Jo(e,void 0)),ht(arguments))},listConfig(...t){return this._runTask(Eq(Jo(t[0],void 0)),ht(arguments))}}}function Sq(t){return tc.has(t)}function uc(...t){return new lc().param(...t)}function Oq(t){let e=new Set,u={};return Ro(t,(a)=>{let[l,i,o]=a.split(Ju);e.add(l),(u[l]=u[l]||[]).push({line:xt(i),path:l,preview:o})}),{paths:e,results:u}}function Pq(){return{grep(t){let e=ht(arguments),u=Zt(arguments);for(let l of ac)if(u.includes(l))return this._runTask(Tt(`git.grep: use of "${l}" is not supported.`),e);if(typeof t==="string")t=uc().param(t);let a=["grep","--null","-n","--full-name",...u,...t];return this._runTask({commands:a,format:"utf-8",parser(l){return Oq(l)}},e)}}}function Cq(t,e){let u=["reset"];if(dc(t))u.push(`--${t}`);return u.push(...e),jt(u)}function yq(t){if(dc(t))return t;switch(typeof t){case"string":case"undefined":return"soft"}return}function dc(t){return typeof t==="string"&&pc.includes(t)}function tG(){return tl.default("simple-git")}function Z4(t,e,u){if(!e||!String(e).replace(/\s*/,""))return!u?t:(a,...l)=>{t(a,...l),u(a,...l)};return(a,...l)=>{if(t(`%s ${a}`,e,...l),u)u(a,...l)}}function eG(t,e,{namespace:u}){if(typeof t==="string")return t;let a=e&&e.namespace||"";if(a.startsWith(u))return a.substr(u.length+1);return a||u}function ld(t,e,u,a=tG()){let l=t&&`[${t}]`||"",i=[],o=typeof e==="string"?a.extend(e):e,d=eG(yt(e,Kt),o,a);return _(u);function m(n,r){return ot(i,ld(t,d.replace(/^[^:]+/,n),r,a))}function _(n){let r=n&&`[${n}]`||"",c=o&&Z4(o,r)||M0,x=Z4(a,`${l} ${r}`,c);return Object.assign(o?c:x,{label:t,sibling:m,info:x,step:_})}}function H0(t,e){return{method:G3(t.commands)||"",commands:e}}function lG(t,e){return(u)=>{e("[ERROR] child process exception %o",u),t.push(Buffer.from(String(u.stack),"ascii"))}}function T4(t,e,u,a){return(l)=>{u("%s received %L bytes",e,l),a("%B",l),t.push(l)}}function dG(t,e,u=M0){let a=(i)=>{u(null,i)},l=(i)=>{if(i?.task===t)u(i instanceof b0?pG(i):i,void 0)};e.then(a,l)}function pG(t){let e=(a)=>{console.warn(`simple-git deprecation notice: accessing GitResponseError.${a} should be GitResponseError.git.${a}, this will no longer be available in version 3`),e=M0};return Object.create(t,Object.getOwnPropertyNames(t.git).reduce(u,{}));function u(a,l){if(l in t)return a;return a[l]={enumerable:!1,configurable:!1,get(){return e(l),t.git[l]}},a}}function E4(t,e){return L3((u)=>{if(!So(t))throw Error(`Git.cwd: cannot change to non-directory "${t}"`);return(e||u).cwd=t})}function Ko(t){let e=["checkout",...t];if(e[1]==="-b"&&e.includes("-B"))e[1]=ll(e,"-B");return jt(e)}function _G(){return{checkout(){return this._runTask(Ko(Zt(arguments,1)),ht(arguments))},checkoutBranch(t,e){return this._runTask(Ko(["-b",t,e,...Zt(arguments)]),ht(arguments))},checkoutLocalBranch(t){return this._runTask(Ko(["-b",t,...Zt(arguments)]),ht(arguments))}}}function cG(){return{count:0,garbage:0,inPack:0,packs:0,prunePackable:0,size:0,sizeGarbage:0,sizePack:0}}function xG(){return{countObjects(){return this._runTask({commands:["count-objects","--verbose"],format:"utf-8",parser(t){return Et(cG(),[xc],t)}})}}}function wG(t){return Et({author:null,branch:"",commit:"",root:!1,summary:{changes:0,insertions:0,deletions:0}},Ic,t)}function kG(t,e,u){return{commands:["-c","core.abbrev=40","commit",...v2(t,"-m"),...e,...u],format:"utf-8",parser:wG}}function fG(){return{commit(e,...u){let a=ht(arguments),l=t(e)||kG(We(e),We(yt(u[0],Oa,[])),[...Wu(yt(u[1],J2,[])),...Zt(arguments,0,!0)]);return this._runTask(l,a)}};function t(e){return!Oa(e)&&Tt("git.commit: requires the commit message to be supplied as a string/string[]")}}function gG(){return{firstCommit(){return this._runTask(jt(["rev-list","--max-parents=0","HEAD"],!0),ht(arguments))}}}function QG(t,e){let u=["hash-object",t];if(e)u.push("-w");return jt(u,!0)}function qG(t,e,u){let a=String(u).trim(),l;if(l=wc.exec(a))return new Ea(t,e,!1,l[1]);if(l=sc.exec(a))return new Ea(t,e,!0,l[1]);let i="",o=a.split(" ");while(o.length)if(o.shift()==="in"){i=o.join(" ");break}return new Ea(t,e,/^re/i.test(a),i)}function $G(t){return t.includes(id)}function XG(t=!1,e,u){let a=["init",...u];if(t&&!$G(a))a.splice(1,0,id);return{commands:a,format:"utf-8",parser(l){return qG(a.includes("--bare"),e,l)}}}function od(t){for(let e=0;e<t.length;e++){let u=dd.exec(t[e]);if(u)return`--${u[1]}`}return""}function KG(t){return dd.test(t)}function fc(t=""){let e=hc[t];return(u)=>Et(new kc,e,u,!1)}function VG(t,e){return e.reduce((u,a,l)=>{return u[a]=t[l]||"",u},Object.create({diff:null}))}function Bc(t=nd,e=Qc,u=""){let a=fc(u);return function(l){let i=$2(l.trim(),!1,pd).map(function(o){let d=o.split(md),m=VG(d[0].split(t),e);if(d.length>1&&!!d[1].trim())m.diff=a(d[1]);return m});return{all:i,latest:i.length&&i[0]||null,total:i.length}}}function YG(t){let e=od(t),u=["diff"];if(e==="")e="--stat",u.push("--stat=4096");return u.push(...t),nl(u)||{commands:u,format:"utf-8",parser:fc(e)}}function nl(t){let e=t.filter(KG);if(e.length>1)return Tt(`Summary flags are mutually exclusive - pick one of ${e.join(",")}`);if(e.length&&t.includes("-z"))return Tt(`Summary flag ${e} parsing is not compatible with null termination option '-z'`)}function HG(t,e){let u=[],a=[];return Object.keys(t).forEach((l)=>{u.push(l),a.push(String(t[l]))}),[u,a.join(e)]}function zG(t){return Object.keys(t).reduce((e,u)=>{if(!(u in jo))e[u]=t[u];return e},{})}function Gc(t={},e=[]){let u=yt(t.splitter,Kt,nd),a=ol(t.format)?t.format:{hash:"%H",date:t.strictDate===!1?"%ai":"%aI",message:"%s",refs:"%D",body:t.multiLine?"%B":"%b",author_name:t.mailMap!==!1?"%aN":"%an",author_email:t.mailMap!==!1?"%aE":"%ae"},[l,i]=HG(a,u),o=[],d=[`--pretty=format:${pd}${i}${md}`,...e],m=t.n||t["max-count"]||t.maxCount;if(m)d.push(`--max-count=${m}`);if(t.from||t.to){let _=t.symmetric!==!1?"...":"..";o.push(`${t.from||""}${_}${t.to||""}`)}if(Kt(t.file))d.push("--follow",g3(t.file));return Po(zG(t),d),{fields:l,splitter:u,commands:[...d,...o]}}function bG(t,e,u){let a=Bc(t,e,od(u));return{commands:["log",...u],format:"utf-8",parser:a}}function MG(){return{log(...u){let a=ht(arguments),l=Gc(Co(arguments),Wu(yt(arguments[0],J2,[]))),i=e(...u)||nl(l.commands)||t(l);return this._runTask(i,a)}};function t(u){return bG(u.splitter,u.fields,u.commands)}function e(u,a){return Kt(u)&&Kt(a)&&Tt("git.log(string, string) should be replaced with git.log({ from: string, to: string })")}}function Vo(t){return t.objects=t.objects||{compressing:0,counting:0,enumerating:0,packReused:0,reused:{count:0,delta:0},total:{count:0,delta:0}}}function P4(t){let e=/^\s*(\d+)/.exec(t),u=/delta (\d+)/i.exec(t);return{count:xt(e&&e[1]||"0"),delta:xt(u&&u[1]||"0")}}function Wc(t,e){return Et({remoteMessages:new Yc},Vc,e)}function jG(t,e){let u=Et(new Jc,zc,[t,e]);return u.message&&u}function i3(t){if(!t.length)return Tt("Git.merge requires at least one option");return{commands:["merge",...t],format:"utf-8",parser(e,u){let a=Mc(e,u);if(a.failed)throw new b0(a);return a}}}function LG(t,e,u){let a=u.includes("deleted"),l=u.includes("tag")||/^refs\/tags/.test(t),i=!u.includes("new");return{deleted:a,tag:l,branch:!l,new:!i,alreadyUpdated:i,local:t,remote:e}}function TG(t={},e){return ot(e,"--tags"),cd(t,e)}function cd(t={},e){let u=["push",...e];if(t.branch)u.splice(1,0,t.branch);if(t.remote)u.splice(1,0,t.remote);return ll(u,"-v"),ot(u,"--verbose"),ot(u,"--porcelain"),{commands:u,format:"utf-8",parser:Uc}}function EG(){return{showBuffer(){let t=["show",...Zt(arguments,1)];if(!t.includes("--binary"))t.splice(1,0,"--binary");return this._runTask(Z3(t),ht(arguments))},show(){let t=["show",...Zt(arguments,1)];return this._runTask(jt(t),ht(arguments))}}}function m3(t){let[e,u]=t.split(Ju);return{from:u||e,to:e}}function Ct(t,e,u){return[`${t}${e}`,u]}function Yo(t,...e){return e.map((u)=>Ct(t,u,(a,l)=>ot(a.conflicted,l)))}function OG(t,e){let u=e.trim();switch(" "){case u.charAt(2):return a(u.charAt(0),u.charAt(1),u.substr(3));case u.charAt(1):return a(" ",u.charAt(0),u.substr(2));default:return}function a(l,i,o){let d=`${l}${i}`,m=Dc.get(d);if(m)m(t,o);if(d!=="##"&&d!=="!!")t.files.push(new jc(o,l,i))}}function CG(t){return{format:"utf-8",commands:["status","--porcelain","-b","-u","--null",...t.filter((u)=>!Lc.includes(u))],parser(u){return Nc(u)}}}function el(t=0,e=0,u=0,a="",l=!0){return Object.defineProperty({major:t,minor:e,patch:u,agent:a,installed:l},"toString",{value(){return`${this.major}.${this.minor}.${this.patch}`},configurable:!1,enumerable:!1})}function t$(){return el(0,0,0,"",!1)}function e$(){return{version(){return this._runTask({commands:["--version"],format:"utf-8",parser:u$,onError(t,e,u,a){if(t.exitCode===-2)return u(Buffer.from(xd));a(e)}})}}}function u$(t){if(t===xd)return t$();return Et(el(0,0,0,t),Zc,t)}function o$(t,e){return jt(["apply",...e,...t])}function p$(t,e){return{branch:t,hash:e,success:!0}}function m$(t){return{branch:t,hash:null,success:!1}}function Cc(t,e){return e===1&&Lo.test(t)}function x3(t){return t?t.charAt(0):""}function tx(t,e=!1){return Et(new yc,e?[ux]:ex,t)}function lx(t){let e=["-d","-D","--delete"];return t.some((u)=>e.includes(u))}function x$(t){let e=lx(t),u=t.includes("--show-current"),a=["branch",...t];if(a.length===1)a.push("-a");if(!a.includes("-v"))a.splice(1,0,"-v");return{format:"utf-8",commands:a,parser(l,i){if(e)return _l(l,i).all[0];return tx(l,u)}}}function I$(){return{format:"utf-8",commands:["branch","-v"],parser(t){return tx(t)}}}function w$(t,e=!1){return{format:"utf-8",commands:["branch","-v",e?"-D":"-d",...t],parser(u,a){return _l(u,a)},onError({exitCode:u,stdOut:a},l,i,o){if(!Cc(String(l),u))return o(l);i(a)}}}function s$(t,e=!1){let u={format:"utf-8",commands:["branch","-v",e?"-D":"-d",t],parser(a,l){return _l(a,l).branches[t]},onError({exitCode:a,stdErr:l,stdOut:i},o,d,m){if(!Cc(String(o),a))return m(o);throw new b0(u.parser(q2(i),q2(l)),String(o))}};return u}function h$(t){let e=t.trim().replace(/^["']|["']$/g,"");return e&&f$(e)}function B$(t){return{commands:["check-ignore",...t],format:"utf-8",parser:ix}}function v$(t){return/^--upload-pack(=|$)/.test(t)}function px(t,e,u){let a=["clone",...u];if(Kt(t)&&a.push(t),Kt(e)&&a.push(e),a.find(v$))return Tt("git.fetch: potential exploit argument blocked.");return jt(a)}function q$(t,e,u){return ot(u,"--mirror"),px(t,e,u)}function $$(t,e){return Et({raw:t,remote:null,branches:[],tags:[],updated:[],deleted:[]},mx,[t,e])}function J$(t){return/^--upload-pack(=|$)/.test(t)}function K$(t,e,u){let a=["fetch",...u];if(t&&e)a.push(t,e);if(a.find(J$))return Tt("git.fetch: potential exploit argument blocked.");return{commands:a,format:"utf-8",parser:$$}}function V$(t){return Et({moves:[]},_x,t)}function H$(t,e){return{commands:["mv","-v",...We(t),e],format:"utf-8",parser:V$}}function b$(t,e,u){let a=["pull",...u];if(t&&e)a.splice(1,0,t,e);return{commands:a,format:"utf-8",parser(l,i){return rd(l,i)},onError(l,i,o,d){let m=jG(q2(l.stdOut),q2(l.stdErr));if(m)return d(new b0(m));d(i)}}}function U$(t){let e={};return xx(t,([u])=>e[u]={name:u}),Object.values(e)}function F$(t){let e={};return xx(t,([u,a,l])=>{if(!Object.hasOwn(e,u))e[u]={name:u,refs:{fetch:"",push:""}};if(l&&a)e[u].refs[l.replace(/[^a-z]/g,"")]=a}),Object.values(e)}function xx(t,e){Ro(t,(u)=>e(u.split(/\s+/)))}function j$(t,e,u){return jt(["remote","add",...u,t,e])}function D$(t){let e=["remote"];if(t)e.push("-v");return{commands:e,format:"utf-8",parser:t?F$:U$}}function N$(t){let e=[...t];if(e[0]!=="ls-remote")e.unshift("ls-remote");return jt(e)}function L$(t){let e=[...t];if(e[0]!=="remote")e.unshift("remote");return jt(e)}function Z$(t){return jt(["remote","remove",t])}function E$(t={},e){let u=Gc(t),a=["stash","list",...u.commands,...e],l=Bc(u.splitter,u.fields,od(a));return nl(a)||{commands:a,format:"utf-8",parser:l}}function S$(t,e){return rl(["add",t,e])}function O$(t){return rl(["init",...t])}function rl(t){let e=[...t];if(e[0]!=="submodule")e.unshift("submodule");return jt(e)}function P$(t){return rl(["update",...t])}function y$(t,e){let u=Number.isNaN(t),a=Number.isNaN(e);if(u!==a)return u?1:-1;return u?kx(t,e):0}function kx(t,e){return t===e?0:t>e?1:-1}function tX(t){return t.trim()}function Za(t){if(typeof t==="string")return parseInt(t.replace(/^\D+/g,""),10)||0;return 0}function uX(t=[]){let e=t.some((u)=>/^--sort=/.test(u));return{format:"utf-8",commands:["tag","-l",...t],parser(u){return fx(u,e)}}}function aX(t){return{format:"utf-8",commands:["tag",t],parser(){return{name:t}}}}function lX(t,e){return{format:"utf-8",commands:["tag","-a","-m",e,t],parser(){return{name:t}}}}function dX(t){if(!t)return;return[{type:"spawn.before",action(a,l){if(t.aborted)l.kill(new Je(void 0,"abort","Abort already signaled"))}},{type:"spawn.after",action(a,l){function i(){l.kill(new Je(void 0,"abort","Abort signal received"))}t.addEventListener("abort",i),l.spawned.on("close",()=>t.removeEventListener("abort",i))}}]}function pX(t){return typeof t==="string"&&t.trim().toLowerCase()==="-c"}function mX(t,e){if(!pX(t))return;if(!/^\s*protocol(.[a-z]+)?.allow/.test(e))return;throw new Je(void 0,"unsafe","Configuring protocol.allow is not permitted without enabling allowUnsafeExtProtocol")}function nX(t,e){if(/^\s*--(upload|receive)-pack/.test(t))throw new Je(void 0,"unsafe","Use of --upload-pack or --receive-pack is not permitted without enabling allowUnsafePack");if(e==="clone"&&/^\s*-u\b/.test(t))throw new Je(void 0,"unsafe","Use of clone with option -u is not permitted without enabling allowUnsafePack");if(e==="push"&&/^\s*--exec\b/.test(t))throw new Je(void 0,"unsafe","Use of push with option --exec is not permitted without enabling allowUnsafePack")}function _X({allowUnsafeProtocolOverride:t=!1,allowUnsafePack:e=!1}={}){return{type:"spawn.args",action(u,a){return u.forEach((l,i)=>{let o=i<u.length?u[i+1]:"";t||mX(l,o),e||nX(l,a.method)}),u}}}function rX(t){let e=v2(t,"-c");return{type:"spawn.args",action(u){return[...e,...u]}}}function cX({onClose:t=!0,onExit:e=50}={}){function u(){let l=-1,i={close:Xu.deferred(),closeTimeout:Xu.deferred(),exit:Xu.deferred(),exitTimeout:Xu.deferred()},o=Promise.race([t===!1?w3:i.closeTimeout.promise,e===!1?w3:i.exitTimeout.promise]);return a(t,i.close,i.closeTimeout),a(e,i.exit,i.exitTimeout),{close(d){l=d,i.close.done()},exit(d){l=d,i.exit.done()},get exitCode(){return l},result:o}}function a(l,i,o){if(l===!1)return;(l===!0?i.promise:i.promise.then(()=>Ho(l))).then(o.done)}return{type:"spawn.after",async action(l,{spawned:i,close:o}){let d=u(),m=!0,_=()=>void(m=!1);i.stdout?.on("data",_),i.stderr?.on("data",_),i.on("error",_),i.on("close",(n)=>d.close(n)),i.on("exit",(n)=>d.exit(n));try{if(await d.result,m)await Ho(50);o(d.exitCode)}catch(n){o(d.exitCode,n)}}}}function IX(t){return!t||!/^([a-z]:)?([a-z0-9/.\\_-]+)$/i.test(t)}function k3(t,e){if(t.length<1||t.length>2)throw new Je(void 0,"binary",xX);if(t.some(IX))if(e)console.warn(s3);else throw new Je(void 0,"binary",s3);let[a,l]=t;return{binary:a,prefix:l}}function wX(t,e=["git"],u=!1){let a=k3(We(e),u);t.on("binary",(l)=>{a=k3(We(l),u)}),t.append("spawn.binary",()=>{return a.binary}),t.append("spawn.args",(l)=>{return a.prefix?[a.prefix,...l]:l})}function sX(t){return!!(t.exitCode&&t.stdErr.length)}function kX(t){return Buffer.concat([...t.stdOut,...t.stdErr])}function fX(t=!1,e=sX,u=kX){return(a,l)=>{if(!t&&a||!e(l))return a;return u(l)}}function f3(t){return{type:"task.error",action(e,u){let a=t(e.error,{stdErr:u.stdErr,stdOut:u.stdOut,exitCode:u.exitCode});if(Buffer.isBuffer(a))return{error:new Ke(void 0,a.toString("utf-8"))};return{error:a}}}}function BX(t){let u=["checkout","clone","fetch","pull","push"];return[{type:"spawn.args",action(i,o){if(!u.includes(o.method))return i;return X3(i,"--progress")}},{type:"spawn.after",action(i,o){if(!o.commands.includes("--progress"))return;o.spawned.stderr?.on("data",(d)=>{let m=/^([\s\S]+?):\s*(\d+)% \((\d+)\/(\d+)\)/.exec(d.toString("utf8"));if(!m)return;t({method:o.method,stage:QX(m[1]),progress:xt(m[2]),processed:xt(m[3]),total:xt(m[4])})})}}]}function QX(t){return String(t.toLowerCase().split(" ",1))||"unknown"}function vX(t){let e=K3(t,["uid","gid"]);return{type:"spawn.options",action(u){return{...e,...u}}}}function qX({block:t,stdErr:e=!0,stdOut:u=!0}){if(t>0)return{type:"spawn.after",action(a,l){let i;function o(){i&&clearTimeout(i),i=setTimeout(m,t)}function d(){l.spawned.stdout?.off("data",o),l.spawned.stderr?.off("data",o),l.spawned.off("exit",d),l.spawned.off("close",d),i&&clearTimeout(i)}function m(){d(),l.kill(new Je(void 0,"timeout","block timeout reached"))}u&&l.spawned.stdout?.on("data",o),e&&l.spawned.stderr?.on("data",o),l.spawned.on("exit",d),l.spawned.on("close",d),o()}}}function GX(){return{type:"spawn.args",action(t){let e=[],u;function a(l){(u=u||[]).push(...l)}for(let l=0;l<t.length;l++){let i=t[l];if(Sa(i)){a(N4(i));continue}if(i==="--"){a(t.slice(l+1).flatMap((o)=>Sa(o)&&N4(o)||o));break}e.push(i)}return!u?e:[...e,"--",...u.map(String)]}}}function Id(t,e){let u=new gX,a=Y3(t&&(typeof t==="string"?{baseDir:t}:t)||{},e);if(!So(a.baseDir))throw new gx(a,"Cannot use simple-git on a directory that does not exist");if(Array.isArray(a.config))u.add(rX(a.config));return u.add(_X(a.unsafe)),u.add(GX()),u.add(cX(a.completion)),a.abort&&u.add(dX(a.abort)),a.progress&&u.add(BX(a.progress)),a.timeout&&u.add(qX(a.timeout)),a.spawnOptions&&u.add(vX(a.spawnOptions)),u.add(f3(fX(!0))),a.errors&&u.add(f3(a.errors)),wX(u,a.binary,a.unsafe?.allowUnsafeCustomBinary),new $X(a,u)}function JX(...t){let e,u=Promise.resolve();try{e=Id(...t)}catch(m){u=Promise.reject(m)}function a(){return i}function l(){return u}let i=[...XX,...h3].reduce((m,_)=>{let n=h3.includes(_),r=n?o(_,e):d(_,e,m);return Object.defineProperty(m,_,{enumerable:!1,configurable:!1,value:e?r:n?l:a}),m},{});return i;function o(m,_){return function(...n){if(typeof n[n.length]==="function")throw TypeError("Promise interface requires that handlers are not supplied inline, trailing function not allowed in call to "+m);return u.then(function(){return new Promise(function(r,c){let x=(I,s)=>{if(I)return c(KX(I));r(s)};n.push(x),_[m].apply(_,n)})})}}function d(m,_,n){return(...r)=>{return _[m](...r),n}}}function KX(t){if(t instanceof Error)return t;if(typeof t==="string")return Error(t);return new b0(t)}var al,tl,Rc,Xu,Zo,kq,To,fq,b=(t,e)=>function(){return t&&(e=(0,t[To(t)[0]])(t=0)),e},hq=(t,e)=>function(){return e||(0,t[To(t)[0]])((e={exports:{}}).exports,e),e.exports},Qt=(t,e)=>{for(var u in e)Zo(t,u,{get:e[u],enumerable:!0})},gq=(t,e,u,a)=>{if(e&&typeof e==="object"||typeof e==="function"){for(let l of To(e))if(!fq.call(t,l)&&l!==u)Zo(t,l,{get:()=>e[l],enumerable:!(a=kq(e,l))||a.enumerable})}return t},ft=(t)=>gq(Zo({},"__esModule",{value:!0}),t),ul,G2,Ke,m0,b0,Ku,Eo,B3,Ju,M0,X2,il,J2,V3,Kt,Oa,dl,Oo,Mo,Qq,Pa,vq,R,p0,Gq,H3,$q,Jq,Kq,z3,E,b3,Ca,pl,yo,F3,A3,j3,D3,N3,Hq,Fo,ml,Bt,R3,td,ed,ud,B2,ad,O3,C3,Lq,ya,y3,Ta,tc,ec,ac,g2,L4,lc,ic,oc,Q2,pc,mc,nc,_c,uG,Ao,iG,rc,cc,oG,mG,nG,rG,xc,IG,Ic,sG,hG,BG,vG,Ea,wc,sc,GG,id,JG,dd,K2,kc,WG,Wo,R4,S4,O4,hc,gc,pd,md,nd,Qc,vc,qc,_d,jo,$c,Ra,Xc,UG,Do,Jc,FG,Kc,AG,Vc,Yc,Hc,C4,y4,t3,e3,zc,u3,rd,bc,a3,Mc,l3,DG,NG,o3,Uc,d3,ZG,Fc,Ac,RG,p3,jc,SG,n3,Dc,Nc,PG,Lc,yG,xd,Zc,a$,Tc,No,l$,Ec,_3,Sc,i$,Oc,d$,Pc,n$,r3,Lo,c3,_l,_$,yc,r$,ex,ux,c$,ax,k$,ix,g$,ox,Q$,dx,G$,mx,X$,nx,W$,_x,Y$,rx,z$,cx,M$,A$,Ix,T$,wx,R$,sx,C$,I3,fx,eX,hx,iX,oX,gx,Je,w3,xX="Invalid value supplied for custom binary, requires a single string or an array containing either one or two strings",s3="Invalid value supplied for custom binary, restricted characters must be removed or supply the unsafe.allowUnsafeCustomBinary option",gX=class{constructor(){this.plugins=new Set,this.events=new hX}on(t,e){this.events.on(t,e)}reconfigure(t,e){this.events.emit(t,e)}append(t,e){let u=ot(this.plugins,{type:t,action:e});return()=>this.plugins.delete(u)}add(t){let e=[];return We(t).forEach((u)=>u&&this.plugins.add(ot(e,u))),()=>{e.forEach((u)=>this.plugins.delete(u))}}exec(t,e,u){let a=e,l=Object.freeze(Object.create(u));for(let i of this.plugins)if(i.type===t)a=i.action(a,l);return a}},$X,XX,h3,WX,cl;var wd=tt(()=>{al=_e(A4(),1),tl=_e(qo(),1),Rc=_e(Xo(),1),Xu=_e(Xo(),1),Zo=Object.defineProperty,kq=Object.getOwnPropertyDescriptor,To=Object.getOwnPropertyNames,fq=Object.prototype.hasOwnProperty;G2=b({"src/lib/args/pathspec.ts"(){ul=new WeakMap}}),m0=b({"src/lib/errors/git-error.ts"(){Ke=class extends Error{constructor(t,e){super(e);this.task=t,Object.setPrototypeOf(this,new.target.prototype)}}}}),Ku=b({"src/lib/errors/git-response-error.ts"(){m0(),b0=class extends Ke{constructor(t,e){super(void 0,e||String(t));this.git=t}}}}),B3=b({"src/lib/errors/task-configuration-error.ts"(){m0(),Eo=class extends Ke{constructor(t){super(void 0,t)}}}});il=b({"src/lib/utils/util.ts"(){Oo(),Ju="\x00",M0=()=>{},X2=Object.prototype.toString.call.bind(Object.prototype.toString)}});Oo=b({"src/lib/utils/argument-filters.ts"(){G2(),il(),J2=(t)=>{return Array.isArray(t)},V3=(t)=>{return typeof t==="number"},Kt=(t)=>{return typeof t==="string"},Oa=(t)=>{return Kt(t)||Array.isArray(t)&&t.every(Kt)},dl=(t)=>{if(t==null||"number|boolean|function".includes(typeof t))return!1;return typeof t.length==="number"}}}),Qq=b({"src/lib/utils/exit-codes.ts"(){Mo=((t)=>{return t[t.SUCCESS=0]="SUCCESS",t[t.ERROR=1]="ERROR",t[t.NOT_FOUND=-2]="NOT_FOUND",t[t.UNCLEAN=128]="UNCLEAN",t})(Mo||{})}}),vq=b({"src/lib/utils/git-output-streams.ts"(){Pa=class t{constructor(e,u){this.stdOut=e,this.stdErr=u}asStrings(){return new t(this.stdOut.toString("utf8"),this.stdErr.toString("utf8"))}}}});Gq=b({"src/lib/utils/line-parser.ts"(){R=class{constructor(t,e){if(this.matches=[],this.useMatches=qq,this.parse=(u,a)=>{if(this.resetMatches(),!this._regExp.every((l,i)=>this.addMatch(l,i,u(i))))return!1;return this.useMatches(a,this.prepareMatches())!==!1},this._regExp=Array.isArray(t)?t:[t],e)this.useMatches=e}resetMatches(){this.matches.length=0}prepareMatches(){return this.matches}addMatch(t,e,u){let a=u&&t.exec(u);if(a)this.pushMatch(e,a);return!!a}pushMatch(t,e){this.matches.push(...e.slice(1))}},p0=class extends R{addMatch(t,e,u){return/^remote:\s/.test(String(u))&&super.addMatch(t,e,u)}pushMatch(t,e){if(t>0||e.length>1)super.pushMatch(t,e)}}}});$q=b({"src/lib/utils/simple-git-options.ts"(){H3={binary:"git",maxConcurrentProcesses:5,config:[],trimmed:!1}}});Jq=b({"src/lib/utils/task-options.ts"(){Oo(),il(),G2()}});Kq=b({"src/lib/utils/task-parser.ts"(){il()}}),z3={};Qt(z3,{ExitCodes:()=>Mo,GitOutputStreams:()=>Pa,LineParser:()=>R,NOOP:()=>M0,NULL:()=>Ju,RemoteLineParser:()=>p0,append:()=>ot,appendTaskOptions:()=>Po,asArray:()=>We,asCamelCase:()=>J3,asFunction:()=>Q3,asNumber:()=>xt,asStringArray:()=>Wu,bufferToString:()=>q2,callTaskParser:()=>Uo,createInstanceConfig:()=>Y3,delay:()=>Ho,filterArray:()=>J2,filterFunction:()=>W3,filterHasLength:()=>dl,filterNumber:()=>V3,filterPlainObject:()=>ol,filterPrimitives:()=>bo,filterString:()=>Kt,filterStringOrStringArray:()=>Oa,filterType:()=>yt,first:()=>G3,folderExists:()=>So,forEachLineWithContent:()=>Ro,getTrailingOptions:()=>Zt,including:()=>X3,isUserFunction:()=>v3,last:()=>z0,objectToString:()=>X2,orVoid:()=>zo,parseStringResponse:()=>Et,pick:()=>K3,prefixedArray:()=>v2,remove:()=>ll,splitOn:()=>q3,toLinesWithContent:()=>$2,trailingFunctionArgument:()=>ht,trailingOptionsArgument:()=>Co});E=b({"src/lib/utils/index.ts"(){Oo(),Qq(),vq(),Gq(),$q(),Jq(),Kq(),il()}}),b3={};Qt(b3,{CheckRepoActions:()=>Ca,checkIsBareRepoTask:()=>U3,checkIsRepoRootTask:()=>M3,checkIsRepoTask:()=>Wq});F3=b({"src/lib/tasks/check-is-repo.ts"(){E(),Ca=((t)=>{return t.BARE="bare",t.IN_TREE="tree",t.IS_REPO_ROOT="root",t})(Ca||{}),pl=({exitCode:t},e,u,a)=>{if(t===128&&Vq(e))return u(Buffer.from("false"));a(e)},yo=(t)=>{return t.trim()==="true"}}});Hq=b({"src/lib/responses/CleanSummary.ts"(){E(),A3=class{constructor(t){this.dryRun=t,this.paths=[],this.files=[],this.folders=[]}},j3=/^[a-z]+\s*/i,D3=/^[a-z]+\s+[a-z]+\s*/i,N3=/\/$/}}),Fo={};Qt(Fo,{EMPTY_COMMANDS:()=>ml,adhocExecTask:()=>L3,configurationErrorTask:()=>Tt,isBufferTask:()=>T3,isEmptyTask:()=>E3,straightThroughBufferTask:()=>Z3,straightThroughStringTask:()=>jt});Bt=b({"src/lib/tasks/task.ts"(){B3(),ml=[]}}),R3={};Qt(R3,{CONFIG_ERROR_INTERACTIVE_MODE:()=>td,CONFIG_ERROR_MODE_REQUIRED:()=>ed,CONFIG_ERROR_UNKNOWN_OPTION:()=>ud,CleanOptions:()=>B2,cleanTask:()=>S3,cleanWithOptionsTask:()=>zq,isCleanOptionsArray:()=>bq});O3=b({"src/lib/tasks/clean.ts"(){Hq(),E(),Bt(),td="Git clean interactive mode is not supported",ed='Git clean mode parameter ("n" or "f") is required',ud="Git clean unknown option found in: ",B2=((t)=>{return t.DRY_RUN="n",t.FORCE="f",t.IGNORED_INCLUDED="x",t.IGNORED_ONLY="X",t.EXCLUDING="e",t.QUIET="q",t.RECURSIVE="d",t})(B2||{}),ad=new Set(["i",...Wu(Object.values(B2))])}});Lq=b({"src/lib/responses/ConfigList.ts"(){E(),C3=class{constructor(){this.files=[],this.values=Object.create(null)}get all(){if(!this._all)this._all=this.files.reduce((t,e)=>{return Object.assign(t,this.values[e])},{});return this._all}addFile(t){if(!(t in this.values)){let e=z0(this.files);this.values[t]=e?Object.create(this.values[e]):{},this.files.push(t)}return this.values[t]}addValue(t,e,u){let a=this.addFile(t);if(!Object.hasOwn(a,e))a[e]=u;else if(Array.isArray(a[e]))a[e].push(u);else a[e]=[a[e],u];this._all=void 0}}}});y3=b({"src/lib/tasks/config.ts"(){Lq(),E(),ya=((t)=>{return t.system="system",t.global="global",t.local="local",t.worktree="worktree",t})(ya||{})}});ec=b({"src/lib/tasks/diff-name-status.ts"(){Ta=((t)=>{return t.ADDED="A",t.COPIED="C",t.DELETED="D",t.MODIFIED="M",t.RENAMED="R",t.CHANGED="T",t.UNMERGED="U",t.UNKNOWN="X",t.BROKEN="B",t})(Ta||{}),tc=new Set(Object.values(Ta))}});ic=b({"src/lib/tasks/grep.ts"(){E(),Bt(),ac=["-h"],g2=Symbol("grepQuery"),lc=class{constructor(){this[L4]=[]}*[(L4=g2,Symbol.iterator)](){for(let t of this[g2])yield t}and(...t){return t.length&&this[g2].push("--and","(",...v2(t,"-e"),")"),this}param(...t){return this[g2].push(...v2(t,"-e")),this}}}}),oc={};Qt(oc,{ResetMode:()=>Q2,getResetMode:()=>yq,resetTask:()=>Cq});mc=b({"src/lib/tasks/reset.ts"(){E(),Bt(),Q2=((t)=>{return t.MIXED="mixed",t.SOFT="soft",t.HARD="hard",t.MERGE="merge",t.KEEP="keep",t})(Q2||{}),pc=Wu(Object.values(Q2))}});nc=b({"src/lib/git-logger.ts"(){E(),tl.default.formatters.L=(t)=>String(dl(t)?t.length:"-"),tl.default.formatters.B=(t)=>{if(Buffer.isBuffer(t))return t.toString("utf8");return X2(t)}}}),uG=b({"src/lib/runners/tasks-pending-queue.ts"(){m0(),nc(),_c=class t{constructor(e="GitExecutor"){this.logLabel=e,this._queue=new Map}withProgress(e){return this._queue.get(e)}createProgress(e){let u=t.getName(e.commands[0]),a=ld(this.logLabel,u);return{task:e,logger:a,name:u}}push(e){let u=this.createProgress(e);return u.logger("Adding task to the queue, commands = %o",e.commands),this._queue.set(e,u),u}fatal(e){for(let[u,{logger:a}]of Array.from(this._queue.entries())){if(u===e.task)a.info("Failed %o",e),a("Fatal exception, any as-yet un-started tasks run through this executor will not be attempted");else a.info("A fatal exception occurred in a previous task, the queue has been purged: %o",e.message);this.complete(u)}if(this._queue.size!==0)throw Error(`Queue size should be zero after fatal: ${this._queue.size}`)}complete(e){if(this.withProgress(e))this._queue.delete(e)}attempt(e){let u=this.withProgress(e);if(!u)throw new Ke(void 0,"TasksPendingQueue: attempt called for an unknown task");return u.logger("Starting task"),u}static getName(e="empty"){return`task:${e}:${++t.counter}`}static{this.counter=0}}}});iG=b({"src/lib/runners/git-executor-chain.ts"(){m0(),Bt(),E(),uG(),Ao=class{constructor(t,e,u){this._executor=t,this._scheduler=e,this._plugins=u,this._chain=Promise.resolve(),this._queue=new _c}get cwd(){return this._cwd||this._executor.cwd}set cwd(t){this._cwd=t}get env(){return this._executor.env}get outputHandler(){return this._executor.outputHandler}chain(){return this}push(t){return this._queue.push(t),this._chain=this._chain.then(()=>this.attemptTask(t))}async attemptTask(t){let e=await this._scheduler.next(),u=()=>this._queue.complete(t);try{let{logger:a}=this._queue.attempt(t);return await(E3(t)?this.attemptEmptyTask(t,a):this.attemptRemoteTask(t,a))}catch(a){throw this.onFatalException(t,a)}finally{u(),e()}}onFatalException(t,e){let u=e instanceof Ke?Object.assign(e,{task:t}):new Ke(t,e&&String(e));return this._chain=Promise.resolve(),this._queue.fatal(u),u}async attemptRemoteTask(t,e){let u=this._plugins.exec("spawn.binary","",H0(t,t.commands)),a=this._plugins.exec("spawn.args",[...t.commands],H0(t,t.commands)),l=await this.gitResponse(t,u,a,this.outputHandler,e.step("SPAWN")),i=await this.handleTaskData(t,a,l,e.step("HANDLE"));if(e("passing response to task's parser as a %s",t.format),T3(t))return Uo(t.parser,i);return Uo(t.parser,i.asStrings())}async attemptEmptyTask(t,e){return e("empty task bypassing child process to call to task's parser"),t.parser(this)}handleTaskData(t,e,u,a){let{exitCode:l,rejection:i,stdOut:o,stdErr:d}=u;return new Promise((m,_)=>{a("Preparing to handle process response exitCode=%d stdOut=",l);let{error:n}=this._plugins.exec("task.error",{error:i},{...H0(t,e),...u});if(n&&t.onError)return a.info("exitCode=%s handling with custom error handler"),t.onError(u,n,(r)=>{a.info("custom error handler treated as success"),a("custom error returned a %s",X2(r)),m(new Pa(Array.isArray(r)?Buffer.concat(r):r,Buffer.concat(d)))},_);if(n)return a.info("handling as error: exitCode=%s stdErr=%s rejection=%o",l,d.length,i),_(n);a.info("retrieving task output complete"),m(new Pa(Buffer.concat(o),Buffer.concat(d)))})}async gitResponse(t,e,u,a,l){let i=l.sibling("output"),o=this._plugins.exec("spawn.options",{cwd:this.cwd,env:this.env,windowsHide:!0},H0(t,t.commands));return new Promise((d)=>{let m=[],_=[];l.info("%s %o",e,u),l("%O",o);let n=this._beforeSpawn(t,u);if(n)return d({stdOut:m,stdErr:_,exitCode:9901,rejection:n});this._plugins.exec("spawn.before",void 0,{...H0(t,u),kill(c){n=c||n}});let r=aG(e,u,o);if(r.stdout.on("data",T4(m,"stdOut",l,i.step("stdOut"))),r.stderr.on("data",T4(_,"stdErr",l,i.step("stdErr"))),r.on("error",lG(_,l)),a)l("Passing child process stdOut/stdErr to custom outputHandler"),a(e,r.stdout,r.stderr,[...u]);this._plugins.exec("spawn.after",void 0,{...H0(t,u),spawned:r,close(c,x){d({stdOut:m,stdErr:_,exitCode:c,rejection:n||x})},kill(c){if(r.killed)return;n=c,r.kill("SIGINT")}})})}_beforeSpawn(t,e){let u;return this._plugins.exec("spawn.before",void 0,{...H0(t,e),kill(a){u=a||u}}),u}}}}),rc={};Qt(rc,{GitExecutor:()=>cc});oG=b({"src/lib/runners/git-executor.ts"(){iG(),cc=class{constructor(t,e,u){this.cwd=t,this._scheduler=e,this._plugins=u,this._chain=new Ao(this,this._scheduler,this._plugins)}chain(){return new Ao(this,this._scheduler,this._plugins)}push(t){return this._chain.push(t)}}}});mG=b({"src/lib/task-callback.ts"(){Ku(),E()}});nG=b({"src/lib/tasks/change-working-directory.ts"(){E(),Bt()}});rG=b({"src/lib/tasks/checkout.ts"(){E(),Bt()}});IG=b({"src/lib/tasks/count-objects.ts"(){E(),xc=new R(/([a-z-]+): (\d+)$/,(t,[e,u])=>{let a=J3(e);if(Object.hasOwn(t,a))t[a]=xt(u)})}});sG=b({"src/lib/parsers/parse-commit.ts"(){E(),Ic=[new R(/^\[([^\s]+)( \([^)]+\))? ([^\]]+)/,(t,[e,u,a])=>{t.branch=e,t.commit=a,t.root=!!u}),new R(/\s*Author:\s(.+)/i,(t,[e])=>{let u=e.split("<"),a=u.pop();if(!a||!a.includes("@"))return;t.author={email:a.substr(0,a.length-1),name:u.join("<").trim()}}),new R(/(\d+)[^,]*(?:,\s*(\d+)[^,]*)(?:,\s*(\d+))/g,(t,[e,u,a])=>{t.summary.changes=parseInt(e,10)||0,t.summary.insertions=parseInt(u,10)||0,t.summary.deletions=parseInt(a,10)||0}),new R(/^(\d+)[^,]*(?:,\s*(\d+)[^(]+\(([+-]))?/,(t,[e,u,a])=>{t.summary.changes=parseInt(e,10)||0;let l=parseInt(u,10)||0;if(a==="-")t.summary.deletions=l;else if(a==="+")t.summary.insertions=l})]}});hG=b({"src/lib/tasks/commit.ts"(){sG(),E(),Bt()}});BG=b({"src/lib/tasks/first-commit.ts"(){E(),Bt()}});vG=b({"src/lib/tasks/hash-object.ts"(){Bt()}});GG=b({"src/lib/responses/InitSummary.ts"(){Ea=class{constructor(t,e,u,a){this.bare=t,this.path=e,this.existing=u,this.gitDir=a}},wc=/^Init.+ repository in (.+)$/,sc=/^Rein.+ in (.+)$/}});JG=b({"src/lib/tasks/init.ts"(){GG(),id="--bare"}});K2=b({"src/lib/args/log-format.ts"(){dd=/^--(stat|numstat|name-only|name-status)(=|$)/}}),WG=b({"src/lib/responses/DiffSummary.ts"(){kc=class{constructor(){this.changed=0,this.deletions=0,this.insertions=0,this.files=[]}}}});gc=b({"src/lib/parsers/parse-diff-summary.ts"(){K2(),WG(),ec(),E(),Wo=[new R(/^(.+)\s+\|\s+(\d+)(\s+[+\-]+)?$/,(t,[e,u,a=""])=>{t.files.push({file:e.trim(),changes:xt(u),insertions:a.replace(/[^+]/g,"").length,deletions:a.replace(/[^-]/g,"").length,binary:!1})}),new R(/^(.+) \|\s+Bin ([0-9.]+) -> ([0-9.]+) ([a-z]+)/,(t,[e,u,a])=>{t.files.push({file:e.trim(),before:xt(u),after:xt(a),binary:!0})}),new R(/(\d+) files? changed\s*((?:, \d+ [^,]+){0,2})/,(t,[e,u])=>{let a=/(\d+) i/.exec(u),l=/(\d+) d/.exec(u);t.changed=xt(e),t.insertions=xt(a?.[1]),t.deletions=xt(l?.[1])})],R4=[new R(/(\d+)\t(\d+)\t(.+)$/,(t,[e,u,a])=>{let l=xt(e),i=xt(u);t.changed++,t.insertions+=l,t.deletions+=i,t.files.push({file:a,changes:l+i,insertions:l,deletions:i,binary:!1})}),new R(/-\t-\t(.+)$/,(t,[e])=>{t.changed++,t.files.push({file:e,after:0,before:0,binary:!0})})],S4=[new R(/(.+)$/,(t,[e])=>{t.changed++,t.files.push({file:e,changes:0,insertions:0,deletions:0,binary:!1})})],O4=[new R(/([ACDMRTUXB])([0-9]{0,3})\t(.[^\t]*)(\t(.[^\t]*))?$/,(t,[e,u,a,l,i])=>{t.changed++,t.files.push({file:i??a,changes:0,insertions:0,deletions:0,binary:!1,status:zo(Sq(e)&&e),from:zo(!!i&&a!==i&&a),similarity:xt(u)})})],hc={[""]:Wo,["--stat"]:Wo,["--numstat"]:R4,["--name-status"]:O4,["--name-only"]:S4}}});vc=b({"src/lib/parsers/parse-list-log-summary.ts"(){E(),gc(),K2(),pd="òòòòòò ",md=" òò",nd=" ò ",Qc=["hash","date","message","refs","author_name","author_email"]}}),qc={};Qt(qc,{diffSummaryTask:()=>YG,validateLogFormatConfig:()=>nl});_d=b({"src/lib/tasks/diff.ts"(){K2(),gc(),Bt()}});$c=b({"src/lib/tasks/log.ts"(){K2(),G2(),vc(),E(),Bt(),_d(),jo=((t)=>{return t[t["--pretty"]=0]="--pretty",t[t["max-count"]=1]="max-count",t[t.maxCount=2]="maxCount",t[t.n=3]="n",t[t.file=4]="file",t[t.format=5]="format",t[t.from=6]="from",t[t.to=7]="to",t[t.splitter=8]="splitter",t[t.symmetric=9]="symmetric",t[t.mailMap=10]="mailMap",t[t.multiLine=11]="multiLine",t[t.strictDate=12]="strictDate",t})(jo||{})}}),UG=b({"src/lib/responses/MergeSummary.ts"(){Ra=class{constructor(t,e=null,u){this.reason=t,this.file=e,this.meta=u}toString(){return`${this.file}:${this.reason}`}},Xc=class{constructor(){this.conflicts=[],this.merges=[],this.result="success"}get failed(){return this.conflicts.length>0}get reason(){return this.result}toString(){if(this.conflicts.length)return`CONFLICTS: ${this.conflicts.join(", ")}`;return"OK"}}}}),FG=b({"src/lib/responses/PullSummary.ts"(){Do=class{constructor(){this.remoteMessages={all:[]},this.created=[],this.deleted=[],this.files=[],this.deletions={},this.insertions={},this.summary={changes:0,deletions:0,insertions:0}}},Jc=class{constructor(){this.remote="",this.hash={local:"",remote:""},this.branch={local:"",remote:""},this.message=""}toString(){return this.message}}}});AG=b({"src/lib/parsers/parse-remote-objects.ts"(){E(),Kc=[new p0(/^remote:\s*(enumerating|counting|compressing) objects: (\d+),/i,(t,[e,u])=>{let a=e.toLowerCase(),l=Vo(t.remoteMessages);Object.assign(l,{[a]:xt(u)})}),new p0(/^remote:\s*(enumerating|counting|compressing) objects: \d+% \(\d+\/(\d+)\),/i,(t,[e,u])=>{let a=e.toLowerCase(),l=Vo(t.remoteMessages);Object.assign(l,{[a]:xt(u)})}),new p0(/total ([^,]+), reused ([^,]+), pack-reused (\d+)/i,(t,[e,u,a])=>{let l=Vo(t.remoteMessages);l.total=P4(e),l.reused=P4(u),l.packReused=xt(a)})]}});Hc=b({"src/lib/parsers/parse-remote-messages.ts"(){E(),AG(),Vc=[new p0(/^remote:\s*(.+)$/,(t,[e])=>{return t.remoteMessages.all.push(e.trim()),!1}),...Kc,new p0([/create a (?:pull|merge) request/i,/\s(https?:\/\/\S+)$/],(t,[e])=>{t.remoteMessages.pullRequestUrl=e}),new p0([/found (\d+) vulnerabilities.+\(([^)]+)\)/i,/\s(https?:\/\/\S+)$/],(t,[e,u,a])=>{t.remoteMessages.vulnerabilities={count:xt(e),summary:u,url:a}})],Yc=class{constructor(){this.all=[]}}}});bc=b({"src/lib/parsers/parse-pull.ts"(){FG(),E(),Hc(),C4=/^\s*(.+?)\s+\|\s+\d+\s*(\+*)(-*)/,y4=/(\d+)\D+((\d+)\D+\(\+\))?(\D+(\d+)\D+\(-\))?/,t3=/^(create|delete) mode \d+ (.+)/,e3=[new R(C4,(t,[e,u,a])=>{if(t.files.push(e),u)t.insertions[e]=u.length;if(a)t.deletions[e]=a.length}),new R(y4,(t,[e,,u,,a])=>{if(u!==void 0||a!==void 0)return t.summary.changes=+e||0,t.summary.insertions=+u||0,t.summary.deletions=+a||0,!0;return!1}),new R(t3,(t,[e,u])=>{ot(t.files,u),ot(e==="create"?t.created:t.deleted,u)})],zc=[new R(/^from\s(.+)$/i,(t,[e])=>void(t.remote=e)),new R(/^fatal:\s(.+)$/,(t,[e])=>void(t.message=e)),new R(/([a-z0-9]+)\.\.([a-z0-9]+)\s+(\S+)\s+->\s+(\S+)$/,(t,[e,u,a,l])=>{t.branch.local=a,t.hash.local=e,t.branch.remote=l,t.hash.remote=u})],u3=(t,e)=>{return Et(new Do,e3,[t,e])},rd=(t,e)=>{return Object.assign(new Do,u3(t,e),Wc(t,e))}}}),DG=b({"src/lib/parsers/parse-merge.ts"(){UG(),E(),bc(),a3=[new R(/^Auto-merging\s+(.+)$/,(t,[e])=>{t.merges.push(e)}),new R(/^CONFLICT\s+\((.+)\): Merge conflict in (.+)$/,(t,[e,u])=>{t.conflicts.push(new Ra(e,u))}),new R(/^CONFLICT\s+\((.+\/delete)\): (.+) deleted in (.+) and/,(t,[e,u,a])=>{t.conflicts.push(new Ra(e,u,{deleteRef:a}))}),new R(/^CONFLICT\s+\((.+)\):/,(t,[e])=>{t.conflicts.push(new Ra(e,null))}),new R(/^Automatic merge failed;\s+(.+)$/,(t,[e])=>{t.result=e})],Mc=(t,e)=>{return Object.assign(l3(t,e),rd(t,e))},l3=(t)=>{return Et(new Xc,a3,t)}}});NG=b({"src/lib/tasks/merge.ts"(){Ku(),DG(),Bt()}});ZG=b({"src/lib/parsers/parse-push.ts"(){E(),Hc(),o3=[new R(/^Pushing to (.+)$/,(t,[e])=>{t.repo=e}),new R(/^updating local tracking ref '(.+)'/,(t,[e])=>{t.ref={...t.ref||{},local:e}}),new R(/^[=*-]\s+([^:]+):(\S+)\s+\[(.+)]$/,(t,[e,u,a])=>{t.pushed.push(LG(e,u,a))}),new R(/^Branch '([^']+)' set up to track remote branch '([^']+)' from '([^']+)'/,(t,[e,u,a])=>{t.branch={...t.branch||{},local:e,remote:u,remoteName:a}}),new R(/^([^:]+):(\S+)\s+([a-z0-9]+)\.\.([a-z0-9]+)$/,(t,[e,u,a,l])=>{t.update={head:{local:e,remote:u},hash:{from:a,to:l}}})],Uc=(t,e)=>{let u=d3(t,e),a=Wc(t,e);return{...u,...a}},d3=(t,e)=>{return Et({pushed:[]},o3,[t,e])}}}),Fc={};Qt(Fc,{pushTagsTask:()=>TG,pushTask:()=>cd});Ac=b({"src/lib/tasks/push.ts"(){ZG(),E()}});RG=b({"src/lib/tasks/show.ts"(){E(),Bt()}}),SG=b({"src/lib/responses/FileStatusSummary.ts"(){p3=/^(.+)\0(.+)$/,jc=class{constructor(t,e,u){if(this.path=t,this.index=e,this.working_dir=u,e==="R"||u==="R"){let a=p3.exec(t)||[null,t,t];this.from=a[2]||"",this.path=a[1]||""}}}}});PG=b({"src/lib/responses/StatusSummary.ts"(){E(),SG(),n3=class{constructor(){this.not_added=[],this.conflicted=[],this.created=[],this.deleted=[],this.ignored=void 0,this.modified=[],this.renamed=[],this.files=[],this.staged=[],this.ahead=0,this.behind=0,this.current=null,this.tracking=null,this.detached=!1,this.isClean=()=>{return!this.files.length}}},Dc=new Map([Ct(" ","A",(t,e)=>ot(t.created,e)),Ct(" ","D",(t,e)=>ot(t.deleted,e)),Ct(" ","M",(t,e)=>ot(t.modified,e)),Ct("A"," ",(t,e)=>ot(t.created,e)&&ot(t.staged,e)),Ct("A","M",(t,e)=>ot(t.created,e)&&ot(t.staged,e)&&ot(t.modified,e)),Ct("D"," ",(t,e)=>ot(t.deleted,e)&&ot(t.staged,e)),Ct("M"," ",(t,e)=>ot(t.modified,e)&&ot(t.staged,e)),Ct("M","M",(t,e)=>ot(t.modified,e)&&ot(t.staged,e)),Ct("R"," ",(t,e)=>{ot(t.renamed,m3(e))}),Ct("R","M",(t,e)=>{let u=m3(e);ot(t.renamed,u),ot(t.modified,u.to)}),Ct("!","!",(t,e)=>{ot(t.ignored=t.ignored||[],e)}),Ct("?","?",(t,e)=>ot(t.not_added,e)),...Yo("A","A","U"),...Yo("D","D","U"),...Yo("U","A","D","U"),["##",(t,e)=>{let u=/ahead (\d+)/,a=/behind (\d+)/,l=/^(.+?(?=(?:\.{3}|\s|$)))/,i=/\.{3}(\S*)/,o=/\son\s(\S+?)(?=\.{3}|$)/,d=u.exec(e);if(t.ahead=d&&+d[1]||0,d=a.exec(e),t.behind=d&&+d[1]||0,d=l.exec(e),t.current=yt(d?.[1],Kt,null),d=i.exec(e),t.tracking=yt(d?.[1],Kt,null),d=o.exec(e),d)t.current=yt(d?.[1],Kt,t.current);t.detached=/\(no branch\)/.test(e)}]]),Nc=function(t){let e=t.split(Ju),u=new n3;for(let a=0,l=e.length;a<l;){let i=e[a++].trim();if(!i)continue;if(i.charAt(0)==="R")i+=Ju+(e[a++]||"");OG(u,i)}return u}}});yG=b({"src/lib/tasks/status.ts"(){PG(),Lc=["--null","-z"]}});a$=b({"src/lib/tasks/version.ts"(){E(),xd="installed=false",Zc=[new R(/version (\d+)\.(\d+)\.(\d+)(?:\s*\((.+)\))?/,(t,[e,u,a,l=""])=>{Object.assign(t,el(xt(e),xt(u),xt(a),l))}),new R(/version (\d+)\.(\d+)\.(\D+)(.+)?$/,(t,[e,u,a,l=""])=>{Object.assign(t,el(xt(e),xt(u),a,l))})]}}),Tc={};Qt(Tc,{SimpleGitApi:()=>No});l$=b({"src/lib/simple-git-api.ts"(){mG(),nG(),rG(),IG(),hG(),y3(),BG(),ic(),vG(),JG(),$c(),NG(),Ac(),RG(),yG(),Bt(),a$(),E(),No=class{constructor(t){this._executor=t}_runTask(t,e){let u=this._executor.chain(),a=u.push(t);if(e)dG(t,a,e);return Object.create(this,{then:{value:a.then.bind(a)},catch:{value:a.catch.bind(a)},_executor:{value:u}})}add(t){return this._runTask(jt(["add",...We(t)]),ht(arguments))}cwd(t){let e=ht(arguments);if(typeof t==="string")return this._runTask(E4(t,this._executor),e);if(typeof t?.path==="string")return this._runTask(E4(t.path,t.root&&this._executor||void 0),e);return this._runTask(Tt("Git.cwd: workingDirectory must be supplied as a string"),e)}hashObject(t,e){return this._runTask(QG(t,e===!0),ht(arguments))}init(t){return this._runTask(XG(t===!0,this._executor.cwd,Zt(arguments)),ht(arguments))}merge(){return this._runTask(i3(Zt(arguments)),ht(arguments))}mergeFromTo(t,e){if(!(Kt(t)&&Kt(e)))return this._runTask(Tt("Git.mergeFromTo requires that the 'remote' and 'branch' arguments are supplied as strings"));return this._runTask(i3([t,e,...Zt(arguments)]),ht(arguments,!1))}outputHandler(t){return this._executor.outputHandler=t,this}push(){let t=cd({remote:yt(arguments[0],Kt),branch:yt(arguments[1],Kt)},Zt(arguments));return this._runTask(t,ht(arguments))}stash(){return this._runTask(jt(["stash",...Zt(arguments)]),ht(arguments))}status(){return this._runTask(CG(Zt(arguments)),ht(arguments))}},Object.assign(No.prototype,_G(),fG(),Rq(),xG(),gG(),Pq(),MG(),EG(),e$())}}),Ec={};Qt(Ec,{Scheduler:()=>Sc});i$=b({"src/lib/runners/scheduler.ts"(){E(),nc(),_3=(()=>{let t=0;return()=>{t++;let{promise:e,done:u}=Rc.createDeferred();return{promise:e,done:u,id:t}}})(),Sc=class{constructor(t=2){this.concurrency=t,this.logger=ld("","scheduler"),this.pending=[],this.running=[],this.logger("Constructed, concurrency=%s",t)}schedule(){if(!this.pending.length||this.running.length>=this.concurrency){this.logger("Schedule attempt ignored, pending=%s running=%s concurrency=%s",this.pending.length,this.running.length,this.concurrency);return}let t=ot(this.running,this.pending.shift());this.logger("Attempting id=%s",t.id),t.done(()=>{this.logger("Completing id=",t.id),ll(this.running,t),this.schedule()})}next(){let{promise:t,id:e}=ot(this.pending,_3());return this.logger("Scheduling id=%s",e),this.schedule(),t}}}}),Oc={};Qt(Oc,{applyPatchTask:()=>o$});d$=b({"src/lib/tasks/apply-patch.ts"(){Bt()}});n$=b({"src/lib/responses/BranchDeleteSummary.ts"(){Pc=class{constructor(){this.all=[],this.branches={},this.errors=[]}get success(){return!this.errors.length}}}});_$=b({"src/lib/parsers/parse-branch-delete.ts"(){n$(),E(),r3=/(\S+)\s+\(\S+\s([^)]+)\)/,Lo=/^error[^']+'([^']+)'/m,c3=[new R(r3,(t,[e,u])=>{let a=p$(e,u);t.all.push(a),t.branches[e]=a}),new R(Lo,(t,[e])=>{let u=m$(e);t.errors.push(u),t.all.push(u),t.branches[e]=u})],_l=(t,e)=>{return Et(new Pc,c3,[t,e])}}}),r$=b({"src/lib/responses/BranchSummary.ts"(){yc=class{constructor(){this.all=[],this.branches={},this.current="",this.detached=!1}push(t,e,u,a,l){if(t==="*")this.detached=e,this.current=u;this.all.push(u),this.branches[u]={current:t==="*",linkedWorkTree:t==="+",name:u,commit:a,label:l}}}}});c$=b({"src/lib/parsers/parse-branch.ts"(){r$(),E(),ex=[new R(/^([*+]\s)?\((?:HEAD )?detached (?:from|at) (\S+)\)\s+([a-z0-9]+)\s(.*)$/,(t,[e,u,a,l])=>{t.push(x3(e),!0,u,a,l)}),new R(/^([*+]\s)?(\S+)\s+([a-z0-9]+)\s?(.*)$/s,(t,[e,u,a,l])=>{t.push(x3(e),!1,u,a,l)})],ux=new R(/^(\S+)$/s,(t,[e])=>{t.push("*",!1,e,"","")})}}),ax={};Qt(ax,{branchLocalTask:()=>I$,branchTask:()=>x$,containsDeleteBranchCommand:()=>lx,deleteBranchTask:()=>s$,deleteBranchesTask:()=>w$});k$=b({"src/lib/tasks/branch.ts"(){Ku(),_$(),c$(),E()}});g$=b({"src/lib/responses/CheckIgnore.ts"(){ix=(t)=>{return t.split(/\n/g).map(h$).filter(Boolean)}}}),ox={};Qt(ox,{checkIgnoreTask:()=>B$});Q$=b({"src/lib/tasks/check-ignore.ts"(){g$()}}),dx={};Qt(dx,{cloneMirrorTask:()=>q$,cloneTask:()=>px});G$=b({"src/lib/tasks/clone.ts"(){Bt(),E()}});X$=b({"src/lib/parsers/parse-fetch.ts"(){E(),mx=[new R(/From (.+)$/,(t,[e])=>{t.remote=e}),new R(/\* \[new branch]\s+(\S+)\s*-> (.+)$/,(t,[e,u])=>{t.branches.push({name:e,tracking:u})}),new R(/\* \[new tag]\s+(\S+)\s*-> (.+)$/,(t,[e,u])=>{t.tags.push({name:e,tracking:u})}),new R(/- \[deleted]\s+\S+\s*-> (.+)$/,(t,[e])=>{t.deleted.push({tracking:e})}),new R(/\s*([^.]+)\.\.(\S+)\s+(\S+)\s*-> (.+)$/,(t,[e,u,a,l])=>{t.updated.push({name:a,tracking:l,to:u,from:e})})]}}),nx={};Qt(nx,{fetchTask:()=>K$});W$=b({"src/lib/tasks/fetch.ts"(){X$(),Bt()}});Y$=b({"src/lib/parsers/parse-move.ts"(){E(),_x=[new R(/^Renaming (.+) to (.+)$/,(t,[e,u])=>{t.moves.push({from:e,to:u})})]}}),rx={};Qt(rx,{moveTask:()=>H$});z$=b({"src/lib/tasks/move.ts"(){Y$(),E()}}),cx={};Qt(cx,{pullTask:()=>b$});M$=b({"src/lib/tasks/pull.ts"(){Ku(),bc(),E()}});A$=b({"src/lib/responses/GetRemoteSummary.ts"(){E()}}),Ix={};Qt(Ix,{addRemoteTask:()=>j$,getRemotesTask:()=>D$,listRemotesTask:()=>N$,remoteTask:()=>L$,removeRemoteTask:()=>Z$});T$=b({"src/lib/tasks/remote.ts"(){A$(),Bt()}}),wx={};Qt(wx,{stashListTask:()=>E$});R$=b({"src/lib/tasks/stash-list.ts"(){K2(),vc(),_d(),$c()}}),sx={};Qt(sx,{addSubModuleTask:()=>S$,initSubModuleTask:()=>O$,subModuleTask:()=>rl,updateSubModuleTask:()=>P$});C$=b({"src/lib/tasks/sub-module.ts"(){Bt()}});eX=b({"src/lib/responses/TagList.ts"(){I3=class{constructor(t,e){this.all=t,this.latest=e}},fx=function(t,e=!1){let u=t.split(`
|
|
82
|
+
`).map(tX).filter(Boolean);if(!e)u.sort(function(l,i){let o=l.split("."),d=i.split(".");if(o.length===1||d.length===1)return y$(Za(o[0]),Za(d[0]));for(let m=0,_=Math.max(o.length,d.length);m<_;m++){let n=kx(Za(o[m]),Za(d[m]));if(n)return n}return 0});let a=e?u[0]:[...u].reverse().find((l)=>l.indexOf(".")>=0);return new I3(u,a)}}}),hx={};Qt(hx,{addAnnotatedTagTask:()=>lX,addTagTask:()=>aX,tagListTask:()=>uX});iX=b({"src/lib/tasks/tag.ts"(){eX()}}),oX=hq({"src/git.js"(t,e){var{GitExecutor:u}=(oG(),ft(rc)),{SimpleGitApi:a}=(l$(),ft(Tc)),{Scheduler:l}=(i$(),ft(Ec)),{configurationErrorTask:i}=(Bt(),ft(Fo)),{asArray:o,filterArray:d,filterPrimitives:m,filterString:_,filterStringOrStringArray:n,filterType:r,getTrailingOptions:c,trailingFunctionArgument:x,trailingOptionsArgument:I}=(E(),ft(z3)),{applyPatchTask:s}=(d$(),ft(Oc)),{branchTask:k,branchLocalTask:g,deleteBranchesTask:f,deleteBranchTask:h}=(k$(),ft(ax)),{checkIgnoreTask:B}=(Q$(),ft(ox)),{checkIsRepoTask:Q}=(F3(),ft(b3)),{cloneTask:V,cloneMirrorTask:A}=(G$(),ft(dx)),{cleanWithOptionsTask:F,isCleanOptionsArray:L}=(O3(),ft(R3)),{diffSummaryTask:y}=(_d(),ft(qc)),{fetchTask:G}=(W$(),ft(nx)),{moveTask:pt}=(z$(),ft(rx)),{pullTask:mt}=(M$(),ft(cx)),{pushTagsTask:Qe}=(Ac(),ft(Fc)),{addRemoteTask:v,getRemotesTask:q,listRemotesTask:Wt,remoteTask:ut,removeRemoteTask:ee}=(T$(),ft(Ix)),{getResetMode:ue,resetTask:At}=(mc(),ft(oc)),{stashListTask:j0}=(R$(),ft(wx)),{addSubModuleTask:Jl,initSubModuleTask:D0,subModuleTask:He,updateSubModuleTask:P}=(C$(),ft(sx)),{addAnnotatedTagTask:N0,addTagTask:Kl,tagListTask:j}=(iX(),ft(hx)),{straightThroughBufferTask:nt,straightThroughStringTask:K}=(Bt(),ft(Fo));function W($,M){this._plugins=M,this._executor=new u($.baseDir,new l($.maxConcurrentProcesses),M),this._trimmed=$.trimmed}(W.prototype=Object.create(a.prototype)).constructor=W,W.prototype.customBinary=function($){return this._plugins.reconfigure("binary",$),this},W.prototype.env=function($,M){if(arguments.length===1&&typeof $==="object")this._executor.env=$;else(this._executor.env=this._executor.env||{})[$]=M;return this},W.prototype.stashList=function($){return this._runTask(j0(I(arguments)||{},d($)&&$||[]),x(arguments))};function ct($,M,lt,vt){if(typeof lt!=="string")return i(`git.${$}() requires a string 'repoPath'`);return M(lt,r(vt,_),c(arguments))}W.prototype.clone=function(){return this._runTask(ct("clone",V,...arguments),x(arguments))},W.prototype.mirror=function(){return this._runTask(ct("mirror",A,...arguments),x(arguments))},W.prototype.mv=function($,M){return this._runTask(pt($,M),x(arguments))},W.prototype.checkoutLatestTag=function($){var M=this;return this.pull(function(){M.tags(function(lt,vt){M.checkout(vt.latest,$)})})},W.prototype.pull=function($,M,lt,vt){return this._runTask(mt(r($,_),r(M,_),c(arguments)),x(arguments))},W.prototype.fetch=function($,M){return this._runTask(G(r($,_),r(M,_),c(arguments)),x(arguments))},W.prototype.silent=function($){return console.warn("simple-git deprecation notice: git.silent: logging should be configured using the `debug` library / `DEBUG` environment variable, this will be an error in version 3"),this},W.prototype.tags=function($,M){return this._runTask(j(c(arguments)),x(arguments))},W.prototype.rebase=function(){return this._runTask(K(["rebase",...c(arguments)]),x(arguments))},W.prototype.reset=function($){return this._runTask(At(ue($),c(arguments)),x(arguments))},W.prototype.revert=function($){let M=x(arguments);if(typeof $!=="string")return this._runTask(i("Commit must be a string"),M);return this._runTask(K(["revert",...c(arguments,0,!0),$]),M)},W.prototype.addTag=function($){let M=typeof $==="string"?Kl($):i("Git.addTag requires a tag name");return this._runTask(M,x(arguments))},W.prototype.addAnnotatedTag=function($,M){return this._runTask(N0($,M),x(arguments))},W.prototype.deleteLocalBranch=function($,M,lt){return this._runTask(h($,typeof M==="boolean"?M:!1),x(arguments))},W.prototype.deleteLocalBranches=function($,M,lt){return this._runTask(f($,typeof M==="boolean"?M:!1),x(arguments))},W.prototype.branch=function($,M){return this._runTask(k(c(arguments)),x(arguments))},W.prototype.branchLocal=function($){return this._runTask(g(),x(arguments))},W.prototype.raw=function($){let M=!Array.isArray($),lt=[].slice.call(M?arguments:$,0);for(let ne=0;ne<lt.length&&M;ne++)if(!m(lt[ne])){lt.splice(ne,lt.length-ne);break}lt.push(...c(arguments,0,!0));var vt=x(arguments);if(!lt.length)return this._runTask(i("Raw: must supply one or more command to execute"),vt);return this._runTask(K(lt,this._trimmed),vt)},W.prototype.submoduleAdd=function($,M,lt){return this._runTask(Jl($,M),x(arguments))},W.prototype.submoduleUpdate=function($,M){return this._runTask(P(c(arguments,!0)),x(arguments))},W.prototype.submoduleInit=function($,M){return this._runTask(D0(c(arguments,!0)),x(arguments))},W.prototype.subModule=function($,M){return this._runTask(He(c(arguments)),x(arguments))},W.prototype.listRemote=function(){return this._runTask(Wt(c(arguments)),x(arguments))},W.prototype.addRemote=function($,M,lt){return this._runTask(v($,M,c(arguments)),x(arguments))},W.prototype.removeRemote=function($,M){return this._runTask(ee($),x(arguments))},W.prototype.getRemotes=function($,M){return this._runTask(q($===!0),x(arguments))},W.prototype.remote=function($,M){return this._runTask(ut(c(arguments)),x(arguments))},W.prototype.tag=function($,M){let lt=c(arguments);if(lt[0]!=="tag")lt.unshift("tag");return this._runTask(K(lt),x(arguments))},W.prototype.updateServerInfo=function($){return this._runTask(K(["update-server-info"]),x(arguments))},W.prototype.pushTags=function($,M){let lt=Qe({remote:r($,_)},c(arguments));return this._runTask(lt,x(arguments))},W.prototype.rm=function($){return this._runTask(K(["rm","-f",...o($)]),x(arguments))},W.prototype.rmKeepLocal=function($){return this._runTask(K(["rm","--cached",...o($)]),x(arguments))},W.prototype.catFile=function($,M){return this._catFile("utf-8",arguments)},W.prototype.binaryCatFile=function(){return this._catFile("buffer",arguments)},W.prototype._catFile=function($,M){var lt=x(M),vt=["cat-file"],ne=M[0];if(typeof ne==="string")return this._runTask(i("Git.catFile: options must be supplied as an array of strings"),lt);if(Array.isArray(ne))vt.push.apply(vt,ne);let Wl=$==="buffer"?nt(vt):K(vt);return this._runTask(Wl,lt)},W.prototype.diff=function($,M){let lt=_($)?i("git.diff: supplying options as a single string is no longer supported, switch to an array of strings"):K(["diff",...c(arguments)]);return this._runTask(lt,x(arguments))},W.prototype.diffSummary=function(){return this._runTask(y(c(arguments,1)),x(arguments))},W.prototype.applyPatch=function($){let M=!n($)?i("git.applyPatch requires one or more string patches as the first argument"):s(o($),c([].slice.call(arguments,1)));return this._runTask(M,x(arguments))},W.prototype.revparse=function(){let $=["rev-parse",...c(arguments,!0)];return this._runTask(K($,!0),x(arguments))},W.prototype.clean=function($,M,lt){let vt=L($),ne=vt&&$.join("")||r($,_)||"",Wl=c([].slice.call(arguments,vt?1:0));return this._runTask(F(ne,Wl),x(arguments))},W.prototype.exec=function($){let M={commands:[],format:"utf-8",parser(){if(typeof $==="function")$()}};return this._runTask(M)},W.prototype.clearQueue=function(){return this},W.prototype.checkIgnore=function($,M){return this._runTask(B(o(r($,n,[]))),x(arguments))},W.prototype.checkIsRepo=function($,M){return this._runTask(Q(r($,_)),x(arguments))},e.exports=W}});G2();m0();gx=class extends Ke{constructor(t,e){super(void 0,e);this.config=t}};m0();m0();Je=class extends Ke{constructor(t,e,u){super(t,u);this.task=t,this.plugin=e,Object.setPrototypeOf(this,new.target.prototype)}};Ku();B3();F3();O3();y3();ec();ic();mc();E();E();w3=Xu.deferred().promise;E();m0();E();E();E();G2();E();$X=oX();Ku();XX=["customBinary","env","outputHandler","silent"],h3=["add","addAnnotatedTag","addConfig","addRemote","addTag","applyPatch","binaryCatFile","branch","branchLocal","catFile","checkIgnore","checkIsRepo","checkout","checkoutBranch","checkoutLatestTag","checkoutLocalBranch","clean","clone","commit","cwd","deleteLocalBranch","deleteLocalBranches","diff","diffSummary","exec","fetch","getRemotes","init","listConfig","listRemote","log","merge","mergeFromTo","mirror","mv","pull","push","pushTags","raw","rebase","remote","removeRemote","reset","revert","revparse","rm","rmKeepLocal","show","stash","stashList","status","subModule","submoduleAdd","submoduleInit","submoduleUpdate","tag","tags","updateServerInfo"];WX=Id,cl=Id});var e8={};zu(e8,{resolveRemoteHank:()=>Ad,parseRemoteHankUrl:()=>t8,isRemoteHankUrl:()=>Ud,getHankSummary:()=>jd,displayHankSummary:()=>Dd});import xJ from"node:crypto";import r0 from"node:fs";import IJ from"node:os";import Yu from"node:path";function Ud(t){if(t.startsWith("https://")||t.startsWith("http://"))return["github.com","gitlab.com","bitbucket.org"].some((u)=>t.includes(u));if(t.startsWith("git@"))return!0;return!1}function t8(t){let e,u="main",a=!0,l="hank.json";if(t.startsWith("git@")){let i=t.indexOf("#");if(i!==-1){e=t.substring(0,i);let o=t.substring(i+1);if(o.includes("/")){let d=o.split("/");u=d[0],l=d.slice(1).join("/")||"hank.json"}else u=o;a=!Md(u)}else e=t;if(!e.endsWith(".git"))e+=".git"}else if(t.startsWith("https://")||t.startsWith("http://")){let i=new URL(t),o=i.pathname.split("/").filter((_)=>_);if(o.length<2)throw Error(`Invalid repository URL: ${t}`);let d=o[0],m=o[1].replace(/\.git$/,"");if(e=`https://${i.host}/${d}/${m}.git`,o.length>3&&(o[2]==="tree"||o[2]==="blob")){if(u=o[3],a=!Md(u),o.length>4){if(l=o.slice(4).join("/"),!l.endsWith(".json"))l=Yu.join(l,"hank.json")}}if(i.hash){let _=i.hash.substring(1);if(_.includes("/")){let n=_.split("/");u=n[0],l=n.slice(1).join("/")||l}else u=_;a=!Md(u)}}else throw Error(`Unsupported URL format: ${t}`);return{originalUrl:t,cloneUrl:e,ref:u,isBranch:a,hankPath:l}}function Md(t){if(/^[a-f0-9]{40}$/i.test(t))return!0;if(/^[a-f0-9]{7,}$/i.test(t)&&t.length<=12)return!0;if(/^v?\d+\.\d+(\.\d+)?/.test(t))return!0;return!1}function sJ(t){let e=xJ.createHash("sha256").update(t).digest("hex").substring(0,16);return Yu.join(IJ.tmpdir(),"hankweave-hanks",e)}function Fd(t){return Yu.join(t,".hankweave-cache-meta.json")}function kJ(t,e){let u=Fd(t);if(!r0.existsSync(u))return!1;try{let a=JSON.parse(r0.readFileSync(u,"utf-8"));if(!e)return!0;let l=new Date(a.cachedAt);return Date.now()-l.getTime()<wJ}catch{return!1}}function fJ(t,e,u){let a=Fd(t);r0.writeFileSync(a,JSON.stringify({cachedAt:new Date().toISOString(),ref:e,isBranch:u},null,2))}async function Ad(t){let e=t8(t),u=sJ(e.cloneUrl);if(kJ(u,e.isBranch)){let l=Yu.join(u,e.hankPath);if(r0.existsSync(l)){let i=JSON.parse(r0.readFileSync(Fd(u),"utf-8"));return{repoPath:u,hankPath:l,wasFresh:!0,cachedAt:new Date(i.cachedAt)}}}await hJ(e,u);let a=Yu.join(u,e.hankPath);if(!r0.existsSync(a))throw Error(`Hank file not found in repository: ${e.hankPath}
|
|
83
|
+
Repository: ${e.cloneUrl}`);return{repoPath:u,hankPath:a,wasFresh:!1,cachedAt:new Date}}async function hJ(t,e){let u;try{u=await Promise.resolve().then(() => (wd(),Bx))}catch{throw Error("Remote hanks require the 'simple-git' package. Install it with: npm install simple-git")}let a=u.simpleGit();if(r0.mkdirSync(e,{recursive:!0}),r0.existsSync(Yu.join(e,".git"))){let i=u.simpleGit(e);if(await i.fetch(["--all","--prune"]),await i.checkout(t.ref,["--force"]),t.isBranch)await i.pull("origin",t.ref,["--force"])}else await a.clone(t.cloneUrl,e,["--branch",t.ref,"--single-branch","--depth","1"]);fJ(e,t.ref,t.isBranch)}function jd(t,e,u){let a=no(t),l=[];function i(o){for(let d of o)if(d.type==="loop")i(d.codons);else l.push(d.name)}return i(a.hank),{name:a.meta?.name,description:a.meta?.description,codonCount:l.length,codonNames:l,sourceUrl:e,ref:u}}function Dd(t){if(console.log(`
|
|
84
|
+
\uD83D\uDCE6 Remote Hank`),console.log("────────────────────────────────────────────"),t.name)console.log(` Name: ${t.name}`);if(t.description)console.log(` Description: ${t.description}`);if(console.log(` Source: ${t.sourceUrl}`),console.log(` Ref: ${t.ref}`),console.log(` Codons: ${t.codonCount}`),t.codonNames.length>0){let e=t.codonNames.length<=5?t.codonNames.join(", "):`${t.codonNames.slice(0,5).join(", ")}... (+${t.codonNames.length-5} more)`;console.log(` Sequence: ${e}`)}console.log(`────────────────────────────────────────────
|
|
85
|
+
`)}var wJ=3600000;var Nd=tt(()=>{K0()});import a8 from"fs";import JJ from"os";import A0 from"path";z2();Yt();var w={reset:"\x1B[0m",bold:"\x1B[1m",dim:"\x1B[2m",italic:"\x1B[3m",underline:"\x1B[4m",black:"\x1B[30m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",cyan:"\x1B[36m",white:"\x1B[37m",gray:"\x1B[90m",bgRed:"\x1B[41m",bgGreen:"\x1B[42m",bgYellow:"\x1B[43m",bgBlue:"\x1B[44m"},N={check:"✓",cross:"✗",arrow:"→",dot:"•",box:"▪",dash:"─",pipe:"│",corner:"└",branch:"├"};class Zi{server;ws=null;isConnected=!1;handshakeComplete=!1;checkpoints=[];waitingForCheckpoints=!1;constructor(t){this.server=t;let e=this.server.config?.version||"unknown";console.log(`${w.bold}${w.cyan}Hankweave v${e}${w.reset}
|
|
86
|
+
`),this.connectToServer(),this.setupKeyboardInput()}connectToServer(){let e=`ws://localhost:${this.server.config?.port||7777}`;console.log(`${w.dim}${N.pipe} Connecting to ${e}...${w.reset}`),this.ws=new W_(e),this.ws.onopen=()=>{this.isConnected=!0,console.log(`${w.green}${N.check} Connected to server${w.reset}`),this.performHandshake()},this.ws.onmessage=(u)=>{try{let a=JSON.parse(u.data);if(a.type==="handshake.response"){this.handleHandshakeResponse(a);return}let l=a;this.handleServerEvent(l).catch((i)=>{if(console.error(`${w.red}[TUI ERROR] Error handling server event ${l.type}: ${i}${w.reset}`),i instanceof Error&&i.stack)console.error(`${w.red}${i.stack}${w.reset}`)})}catch(a){console.error(`${w.red}${N.cross} Failed to parse server message:${w.reset}`,a)}},this.ws.onerror=(u)=>{console.error(`${w.red}${N.cross} WebSocket error:${w.reset}`,u)},this.ws.onclose=()=>{this.isConnected=!1,this.handshakeComplete=!1,console.log(`${w.dim}${N.pipe} Disconnected from server${w.reset}`)}}performHandshake(){if(!this.ws)return;let t={type:"handshake",data:{mode:"readandwrite",sendPreviousEvents:!0}};console.log(`${w.dim}${N.pipe} Sending handshake...${w.reset}`),this.ws.send(JSON.stringify(t))}handleHandshakeResponse(t){this.handshakeComplete=!0,console.log(`${w.green}${N.check} Handshake complete - Mode: ${t.data.mode}, Client ID: ${t.data.clientId}${w.reset}`)}formatTimestamp(t){return`${w.dim}[${new Date(t).toLocaleTimeString()}]${w.reset}`}drawBox(t,e,u=w.white){let l=Math.max(t.length,...e.map((o)=>this.stripAnsi(o).length))+4;console.log(`${u}┌${"─".repeat(l-2)}┐${w.reset}`);let i=Math.floor((l-2-t.length)/2);console.log(`${u}│${" ".repeat(i)}${w.bold}${t}${w.reset}${u}${" ".repeat(l-2-i-t.length)}│${w.reset}`),console.log(`${u}├${"─".repeat(l-2)}┤${w.reset}`);for(let o of e){let d=this.stripAnsi(o).length,m=l-2-d;console.log(`${u}│ ${o}${" ".repeat(m-1)}${u}│${w.reset}`)}console.log(`${u}└${"─".repeat(l-2)}┘${w.reset}`)}stripAnsi(t){return t.replace(/\u001b\[[0-9;]*m/g,"")}async handleServerEvent(t){let e=this.formatTimestamp(t.timestamp);switch(t.type){case"server.ready":console.log(`
|
|
87
|
+
${e} ${w.green}${w.bold}Server Ready${w.reset}`),console.log(`${w.dim} ${N.arrow} Version: ${t.data.serverVersion}${w.reset}`),console.log(`${w.dim} ${N.arrow} Execution: ${t.data.executionPath}${w.reset}`);break;case"state.snapshot":{if(console.log(`
|
|
88
|
+
${e} ${w.blue}State Snapshot${w.reset}`),t.data.recentFileAccess)console.log(`${w.dim} ${N.arrow} Recent file: ${t.data.recentFileAccess.path}${w.reset}`);console.log(` ${N.arrow} Total cost: ${w.yellow}$${t.data.totalCost.toFixed(4)}${w.reset}`);break}case"codon.started":{console.log(`
|
|
89
|
+
${e} ${w.cyan}${w.bold}Codon Started${w.reset}`);let u=[`Session: ${w.dim}${t.data.sessionId}${w.reset}`];if(t.data.previousSessionId)u.push(`Continuing from: ${w.dim}${t.data.previousSessionId}${w.reset}`);if(t.data.promptMetadata){let a=t.data.promptMetadata;if(a.name)u.push(`\uD83D\uDCDD Prompt: ${a.name}`);if(a.description)u.push(` ${w.dim}${a.description}${w.reset}`);if(a.author)u.push(` Author: ${w.dim}${a.author}${w.reset}`);if(a.version)u.push(` Version: ${w.dim}${a.version}${w.reset}`);if(a.tags&&a.tags.length>0)u.push(` Tags: ${w.dim}${a.tags.join(", ")}${w.reset}`)}if(t.data.codonDescription)u.push(t.data.codonDescription);this.drawBox(t.data.codonName,u,w.cyan);break}case"codon.completed":{let u=t.data.success?w.green:w.red,a=t.data.success?N.check:N.cross;console.log(`
|
|
90
|
+
${e} ${u}${w.bold}Codon Completed${w.reset} ${u}${a}${w.reset}`);let l=[`Cost: ${w.yellow}$${t.data.cost.toFixed(4)}${w.reset}`,`Duration: ${w.dim}${(t.data.duration/1000).toFixed(1)}s${w.reset}`];if(!t.data.success&&t.data.failureReason){if(l.push(`Failure: ${w.red}${t.data.failureReason.type}${w.reset} (retriable: ${t.data.failureReason.retriable?`${w.green}yes`:`${w.red}no`}${w.reset})`),t.data.failureReason.message)l.push(`Message: ${w.dim}${t.data.failureReason.message}${w.reset}`)}this.drawBox(`Codon ${t.data.codonId}`,l,u);break}case"assistant.action":{if(t.data.action==="message"){console.log(`
|
|
91
|
+
${e} ${w.bold}Assistant${w.reset}`);let u=t.data.content.split(`
|
|
92
|
+
`);for(let a of u)console.log(` ${N.pipe} ${a}`)}else if(t.data.action==="thinking"){console.log(`
|
|
93
|
+
${e} ${w.gray}${w.italic}Thinking${w.reset}`);let u=t.data.content.split(`
|
|
94
|
+
`);for(let a of u)console.log(`${w.gray}${w.italic} ${N.pipe} ${a}${w.reset}`)}else if(t.data.action==="tool_use"){let u=this.getToolColor(t.data.toolName||"unknown");if(console.log(`
|
|
95
|
+
${e} ${u}Tool Use: ${t.data.toolName}${w.reset}`),t.data.toolInput)console.log(`${w.dim} ${N.arrow} Input: ${JSON.stringify(t.data.toolInput,null,2).replace(/\n/g,`
|
|
96
|
+
`)}${w.reset}`)}break}case"tool.result":{let u=this.getToolColor(t.data.toolName),a=t.data.isError?w.red:w.green;if(console.log(`
|
|
97
|
+
${e} ${u}Tool Result: ${t.data.toolName}${w.reset} ${a}[${t.data.executionTimeMs}ms]${w.reset}`),["Write","Create"].includes(t.data.toolName)&&t.data.result.length>500)console.log(`${w.dim} ${N.arrow} Result: ${t.data.result.substring(0,200)}...${w.reset}`),console.log(`${w.dim} ${N.arrow} (Truncated ${t.data.originalLength} bytes to 200 chars)${w.reset}`);else{let i=t.data.result.split(`
|
|
98
|
+
`);if(i.length===1)console.log(`${w.dim} ${N.arrow} Result: ${t.data.result}${w.reset}`);else{console.log(`${w.dim} ${N.arrow} Result:${w.reset}`);for(let o of i)console.log(`${w.dim} ${N.pipe} ${o}${w.reset}`)}}if(t.data.isError)console.log(`${w.red} ${N.cross} Tool execution failed${w.reset}`);break}case"token.usage":{console.log(`
|
|
99
|
+
${e} ${w.yellow}Token Usage${w.reset}`),console.log(` ${N.arrow} Input: ${t.data.inputTokens}, Output: ${t.data.outputTokens}`),console.log(` ${N.arrow} Cost: ${w.yellow}$${t.data.totalCost.toFixed(4)}${w.reset}`);break}case"file.updated":{let u=t.data.action==="created"?w.green:t.data.action==="deleted"?w.red:w.yellow;console.log(`
|
|
100
|
+
${e} ${u}File ${t.data.action}${w.reset}: ${w.bold}${t.data.path}${w.reset}`);break}case"filetree.updated":{console.log(`
|
|
101
|
+
${e} ${w.magenta}File Tree Updated${w.reset} (${t.data.tree.length} root items)`);break}case"error":{console.log(`
|
|
102
|
+
${e} ${w.red}${w.bold}Error${w.reset}`),this.drawBox("Error Details",[`${t.data.message}`,...t.data.context?[`Context: ${w.dim}${t.data.context}${w.reset}`]:[],...t.data.codon?[`Codon: ${t.data.codon}`]:[],...t.data.code?[`Code: ${t.data.code}`]:[],`Fatal: ${t.data.fatal?`${w.red}yes`:`${w.green}no`}${w.reset}`],w.red);break}case"incomplete.codon":{console.log(`
|
|
103
|
+
${e} ${w.yellow}${w.bold}Incomplete Codon Detected${w.reset}`),console.log(` ${N.arrow} Codon: ${t.data.codonName}`),console.log(` ${N.arrow} ${t.data.message}`);break}case"info":{console.log(`
|
|
104
|
+
${e} ${w.blue}Info${w.reset}: ${t.data.message}`);break}case"server.idle":{console.log(`
|
|
105
|
+
${e} ${w.dim}Server Idle${w.reset}`),console.log(` ${N.arrow} Reason: ${t.data.reason}`),console.log(` ${N.arrow} ${t.data.message}`);break}case"checkpoint.list":{if(this.checkpoints=t.data.checkpoints,this.waitingForCheckpoints)this.waitingForCheckpoints=!1,await this.showCheckpointSelection(t.data);else if(console.log(`
|
|
106
|
+
${e} ${w.magenta}Checkpoints${w.reset} in run ${t.data.runId}:`),t.data.checkpoints.length===0)console.log(` ${N.dot} No checkpoints found`);else this.drawBox("Available Checkpoints",t.data.checkpoints.map((u,a)=>`[${w.bold}${a+1}${w.reset}] ${u.codonName} ${w.dim}(${u.checkpointType})${w.reset} ${w.gray}${u.sha.substring(0,7)}${w.reset}`),w.magenta);break}case"rollback.started":{console.log(`
|
|
107
|
+
${e} ${w.yellow}${w.bold}Rollback Started${w.reset}`),console.log(` ${N.arrow} From: ${t.data.fromCodon} (run ${t.data.fromRun})`),console.log(` ${N.arrow} To: ${t.data.toCodon} (${t.data.checkpointType})`),console.log(` ${N.arrow} Processing ${t.data.codonsToProcess.length} codons`);break}case"rollback.progress":{let u=Math.floor(t.data.currentStep/t.data.totalSteps*20),a=`[${"█".repeat(u)}${" ".repeat(20-u)}]`;console.log(`\r${w.yellow}Rollback Progress${w.reset} ${a} ${t.data.currentStep}/${t.data.totalSteps} - ${t.data.message}`);break}case"rollback.codonCheckpoint":{console.log(`
|
|
108
|
+
${e} ${w.cyan}Checkpoint Applied${w.reset}`),console.log(` ${N.arrow} ${t.data.message}`);break}case"rollback.rigCleanup":{let u=t.data.status==="completed"?w.green:t.data.status==="failed"?w.red:t.data.status==="partial"?w.yellow:w.blue;if(console.log(`
|
|
109
|
+
${e} ${u}Rig Cleanup: ${t.data.status}${w.reset}`),console.log(` ${N.arrow} Codon: ${t.data.codonName}`),t.data.successfulCleanups&&t.data.successfulCleanups.length>0)console.log(` ${N.check} Cleaned: ${t.data.successfulCleanups.join(", ")}`);if(t.data.failedCleanups&&t.data.failedCleanups.length>0)for(let a of t.data.failedCleanups)console.log(` ${w.red}${N.cross} Failed: ${a.directory} - ${a.error}${w.reset}`);break}case"rollback.completed":{console.log(`
|
|
110
|
+
${e} ${w.green}${w.bold}Rollback Completed${w.reset}`),this.drawBox("Rollback Summary",[`From run: ${t.data.fromRun}`,`To run: ${t.data.toRun}`,`Codon: ${t.data.codonName} (${t.data.checkpointType})`,`Checkpoint: ${w.gray}${t.data.checkpoint.substring(0,7)}${w.reset}`],w.green);break}case"sentinel.loaded":{console.log(`
|
|
111
|
+
${e} ${w.magenta}${w.bold}Sentinel Loaded${w.reset}`),this.drawBox(`Sentinel: ${t.data.sentinelId}`,[`Codon: ${w.dim}${t.data.codonId}${w.reset}`,`Model: ${w.dim}${t.data.model}${w.reset}`,`Trigger: ${w.cyan}${t.data.triggerType}${w.reset}`,`Strategy: ${w.cyan}${t.data.executionStrategy}${w.reset}`,`Source: ${w.dim}${t.data.source}${t.data.sourcePath?` (${t.data.sourcePath.split("/").pop()})`:""}${w.reset}`],w.magenta);break}case"sentinel.unloaded":{let u=t.data.reason==="fatal-error"||t.data.reason==="consecutive-failures"?w.red:w.dim;console.log(`
|
|
112
|
+
${e} ${u}Sentinel Unloaded${w.reset}: ${w.bold}${t.data.sentinelId}${w.reset}`),console.log(` ${N.arrow} Reason: ${t.data.reason}`),console.log(` ${N.arrow} Final Cost: ${w.yellow}$${t.data.finalCost.toFixed(6)}${w.reset}`),console.log(` ${N.arrow} LLM Calls: ${t.data.llmCallCount}`);break}case"sentinel.triggered":{console.log(`
|
|
113
|
+
${e} ${w.dim}${w.italic}Sentinel Triggered: ${t.data.sentinelId} (#${t.data.triggerNumber}, ${t.data.eventCount} events)${w.reset}`);break}case"sentinel.output":{let u=t.data.outputType==="structured"?JSON.stringify(t.data.content,null,2).split(`
|
|
114
|
+
`):[t.data.content];this.drawBox(`Sentinel Output: ${t.data.sentinelId}`,[...u,`${w.dim}${"─".repeat(20)}${w.reset}`,`Cost: ${w.yellow}$${t.data.cost.toFixed(6)}${w.reset}`,`Tokens: ${w.dim}(in: ${t.data.tokens.input}, out: ${t.data.tokens.output})${w.reset}`],w.green);break}case"sentinel.error":{console.log(`
|
|
115
|
+
${e} ${w.red}${w.bold}Sentinel Error${w.reset}`),this.drawBox(`Sentinel Error: ${t.data.sentinelId}`,[`Type: ${w.yellow}${t.data.errorType}${w.reset}`,`Message: ${t.data.message}`,`Retriable: ${t.data.retriable?"yes":"no"}`,`Consecutive Failures: ${t.data.consecutiveFailureCount}`],w.red);break}case"state.transition":break;case"history.batch":break;case"pong":break;default:{let u=t;console.log(`
|
|
116
|
+
${e} ${w.gray}Unknown Event: ${u.type}${w.reset}`),console.log(`${w.dim}${JSON.stringify(u.data??{},null,2)}${w.reset}`)}}}getToolColor(t){switch(t){case"Read":case"MultiRead":return w.blue;case"Write":case"Edit":case"MultiEdit":return w.yellow;case"Create":case"Delete":return w.red;case"List":case"Find":return w.cyan;case"Execute":case"Run":return w.magenta;default:return w.white}}sendCommand(t){if(!this.isConnected||!this.ws){console.error(`${w.red}${N.cross} Not connected to server${w.reset}`);return}if(!this.handshakeComplete){console.error(`${w.red}${N.cross} Handshake not complete${w.reset}`);return}this.ws.send(JSON.stringify(t))}setupKeyboardInput(){console.log(`
|
|
117
|
+
${w.bold}Commands:${w.reset}`),console.log(` ${w.cyan}[n]${w.reset} next codon`),console.log(` ${w.cyan}[s]${w.reset} skip current`),console.log(` ${w.cyan}[f]${w.reset} force stop`),console.log(` ${w.cyan}[l]${w.reset} list checkpoints`),console.log(` ${w.cyan}[r]${w.reset} rollback menu`),console.log(` ${w.cyan}[q]${w.reset} quit
|
|
118
|
+
`);let t=process.stdin;if(!t.isTTY||typeof t.setRawMode!=="function"){console.warn(`${w.yellow}! Keyboard input disabled: interactive mode requires a TTY${w.reset}`);return}t.setRawMode(!0),t.resume(),t.setEncoding("utf8"),t.on("data",async(e)=>{try{switch(e){case"n":console.log(`
|
|
119
|
+
${w.cyan}${N.arrow} Advancing to next codon...${w.reset}`),this.sendCommand({id:J(),type:"codon.next"});break;case"s":console.log(`
|
|
120
|
+
${w.yellow}${N.arrow} Skipping current codon...${w.reset}`),this.sendCommand({id:J(),type:"codon.skip"});break;case"f":console.log(`
|
|
121
|
+
${w.red}${N.arrow} Force stopping current codon...${w.reset}`),this.sendCommand({id:J(),type:"codon.forceStop",data:{reason:"User requested from TUI"}});break;case"l":console.log(`
|
|
122
|
+
${w.magenta}${N.arrow} Requesting checkpoint list...${w.reset}`),this.sendCommand({id:J(),type:"checkpoint.list"});break;case"r":await this.showRollbackMenu();break;case"q":case"\x03":if(console.log(`
|
|
123
|
+
${w.dim}${N.arrow} Shutting down...${w.reset}`),this.ws)this.ws.close();this.server.shutdown("user request");break}}catch(u){if(console.error(`${w.red}[TUI ERROR] Keyboard handler error: ${u}${w.reset}`),u instanceof Error&&u.stack)console.error(`${w.red}${u.stack}${w.reset}`)}})}async showRollbackMenu(){switch(console.log(`
|
|
124
|
+
${w.yellow}${w.bold}Rollback Options${w.reset}`),console.log(` ${w.cyan}[1]${w.reset} Rollback to last successful codon`),console.log(` ${w.cyan}[2]${w.reset} List checkpoints and select`),console.log(` ${w.cyan}[c]${w.reset} Cancel`),await this.waitForKey()){case"1":await this.confirmAndRollback("last successful codon",async()=>{this.sendCommand({id:J(),type:"rollback.toLastSuccess",data:{autoRestart:!1}})});break;case"2":this.waitingForCheckpoints=!0,this.sendCommand({id:J(),type:"checkpoint.list"}),console.log(`
|
|
125
|
+
${w.dim}${N.arrow} Fetching checkpoints...${w.reset}`);break;case"c":console.log(`
|
|
126
|
+
${w.red}${N.cross} Rollback cancelled${w.reset}`);break}}async confirmAndRollback(t,e){try{console.log(`
|
|
127
|
+
${w.yellow}${w.bold}Rollback Confirmation${w.reset}`),this.drawBox(`Rollback to: ${t}`,[`${w.yellow}This will:${w.reset}`,` ${N.dot} End the current run`,` ${N.dot} Reset project files to checkpoint state`,` ${N.dot} Start a new continuation run`,` ${N.dot} Preserve all history in state.json`,"",`Continue? ${w.cyan}(y/N)${w.reset}:`],w.yellow);let u=await this.waitForKey(),a=typeof u==="string"?u:String(u);if(a==="y"||a==="Y")console.log(`
|
|
128
|
+
${w.dim}${N.arrow} Initiating rollback...${w.reset}`),await e();else console.log(`
|
|
129
|
+
${w.red}${N.cross} Rollback cancelled${w.reset}`)}catch(u){if(console.error(`${w.red}[TUI ERROR] Rollback confirmation error: ${u}${w.reset}`),u instanceof Error&&u.stack)console.error(`${w.red}${u.stack}${w.reset}`)}}async showCheckpointSelection(t){try{if(!t||!t.checkpoints||t.checkpoints.length===0){console.log(`
|
|
130
|
+
${w.red}${N.cross} No checkpoints found${w.reset}`);return}console.log(`
|
|
131
|
+
${w.magenta}${w.bold}Select Checkpoint to Rollback To${w.reset}`),console.log(`${w.dim}(${t.checkpoints.length} checkpoints, most recent first → oldest last)${w.reset}`),console.log(`${w.yellow}${w.bold}NOTE:${w.reset} ${w.yellow}Lower numbers = more recent, Higher numbers = older${w.reset}
|
|
132
|
+
`);let e=t.checkpoints.flatMap((o,d)=>{let m=o?.codonName||"Unknown",_=o?.checkpointType||"unknown",n=o?.sha||"????????",r=o?.timestamp?new Date(o.timestamp).toLocaleTimeString():"unknown",c=d===0?`${w.green}(most recent)${w.reset}`:d===t.checkpoints.length-1?`${w.yellow}(oldest)${w.reset}`:"";return[`${w.cyan}[${d+1}]${w.reset} ${w.bold}${m}${w.reset} - ${_} (${r}) ${c}`,` SHA: ${w.gray}${n.substring(0,7)}...${w.reset}`]});e.push(`${w.cyan}[c]${w.reset} Cancel`),this.drawBox("Available Checkpoints",e,w.magenta),console.log(`
|
|
133
|
+
${w.bold}Enter checkpoint number to rollback to:${w.reset} `);let u=await this.waitForLine();if(u==="c"||u==="C"){console.log(`
|
|
134
|
+
${w.red}${N.cross} Rollback cancelled${w.reset}`);return}let a=parseInt(u,10);if(Number.isNaN(a)||a<1||a>t.checkpoints.length){console.log(`
|
|
135
|
+
${w.red}${N.cross} Invalid selection: "${u}"${w.reset}`);return}let l=t.checkpoints[a-1];if(!l){console.log(`
|
|
136
|
+
${w.red}${N.cross} Error: Could not find checkpoint at index ${a-1}${w.reset}`);return}if(!l.sha){console.log(`
|
|
137
|
+
${w.red}${N.cross} Error: Selected checkpoint has no SHA${w.reset}`);return}let i=`${l.codonName||"Unknown"} (${l.checkpointType||"unknown"})`;await this.confirmAndRollback(i,async()=>{this.sendCommand({id:J(),type:"rollback.toCheckpoint",data:{checkpointSha:l.sha,autoRestart:!1}})})}catch(e){if(console.error(`${w.red}[TUI ERROR] Checkpoint selection error: ${e}${w.reset}`),e instanceof Error&&e.stack)console.error(`${w.red}${e.stack}${w.reset}`)}}waitForKey(){return new Promise((t)=>{let e=(u)=>{process.stdin.removeListener("data",e),t(u)};process.stdin.once("data",e)})}waitForLine(){return new Promise((t)=>{let e="",u=(a)=>{if(a==="\r"||a===`
|
|
138
|
+
`){process.stdin.removeListener("data",u),console.log(),t(e.trim());return}if(a===""||a==="\b"){if(e.length>0)e=e.slice(0,-1),process.stdout.write("\b \b");return}if(a==="\x03"){process.stdin.removeListener("data",u),console.log(),t("c");return}if(a==="\x1B"){process.stdin.removeListener("data",u),console.log(),t("c");return}if(a.charCodeAt(0)<32)return;e+=a,process.stdout.write(a)};process.stdin.on("data",u)})}}Pi();$0();Yt();import{execSync as zh}from"node:child_process";import ge from"node:fs";import D_ from"node:os";import e0 from"node:path";import{query as bh}from"@anthropic-ai/claude-agent-sdk";function Mh(){let t=[e0.join(D_.homedir(),".cline/cli/bin/claude"),e0.join(D_.homedir(),".claude/local/claude"),"/opt/homebrew/bin/claude","/usr/local/bin/claude"];for(let e of t)if(ge.existsSync(e))return e;try{let e=zh("which claude",{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim();if(e&&ge.existsSync(e))return e}catch{}return null}class Ci extends Ot{executionPath;logger;logParser;anthropicBaseUrl;model;abortController;logStream;killed=!1;sessionId;syntheticPid;promptFrontmatter;constructor(t,e,u,a,l){super();this.executionPath=t;this.logger=e;this.logParser=u;this.anthropicBaseUrl=a;this.model=l}static async ensureSdkAvailable(){try{if(!ye())return console.log("\uD83D\uDCE6 Running from source, using node_modules SDK"),null;let e;if(!Qa())e=wu(),console.log(`\uD83D\uDCE6 Using cached Claude SDK: ${e}`);else e=await va();if(!ge.existsSync(e))throw Error(`Extracted Claude CLI not found at: ${e}
|
|
139
|
+
This indicates a problem with the compilation or extraction process.`);return process.env.CLAUDE_PATH_TO_CLAUDE_EXECUTABLE=e,e}catch(t){if(console.error(`❌ Claude SDK extraction failed: ${t.message}`),t.stack)console.error(` Stack: ${t.stack}`);throw t}}async spawn(t,e,u){if(this.abortController)throw Error("Session already running");let a=u||e0.join(this.executionPath,`.hankweave/logs/log-${t.id}-sdk.jsonl`),l=e0.dirname(a);if(!ge.existsSync(l))ge.mkdirSync(l,{recursive:!0});this.logStream=ge.createWriteStream(a);let i=this.buildSDKOptions(t,e),{content:o,frontmatter:d}=this.buildPrompt(t);if(d)this.promptFrontmatter=d,this.logger.log(`Prompt frontmatter: ${JSON.stringify(d)}`);this.logger.log(`Starting Claude Agent SDK for codon ${t.id}`),this.logger.log(`Working directory: ${this.executionPath}`),this.logger.log(`Prompt content (${o.length} chars):
|
|
140
|
+
${o}`),this.abortController=new AbortController,this.killed=!1,this.syntheticPid=900000+Math.floor(Math.random()*99999),this.logger.log(`Generated synthetic PID: ${this.syntheticPid} for SDK session`),this.logger.log("[SPAWN-DEBUG] About to call runQuery","debug");let m=this.runQuery(o,i,t.id);return this.logger.log("[SPAWN-DEBUG] runQuery called, promise returned","debug"),m.catch((_)=>{this.logger.log(`Query error: ${_.message}`,"error"),this.cleanup(),this.emit("error",_)}),this.logger.log(`[SPAWN-DEBUG] Returning from spawn(), actualLogPath: ${a}`,"debug"),a}buildSDKOptions(t,e){let u=this.model||t.model,a={model:u.modelId,cwd:this.executionPath,permissionMode:"bypassPermissions",abortController:this.abortController,settingSources:["user"]};if(process.env.CLAUDE_PATH_TO_CLAUDE_EXECUTABLE)a.pathToClaudeCodeExecutable=process.env.CLAUDE_PATH_TO_CLAUDE_EXECUTABLE,this.logger.log(`Using custom Claude Code executable: ${process.env.CLAUDE_PATH_TO_CLAUDE_EXECUTABLE}`);if(t.continuationMode==="continue-previous"&&e)a.continue=!0,a.resume=e;let l=this.buildSystemPrompt(t);if(l)a.systemPrompt={type:"preset",preset:"claude_code",append:l},this.logger.log(`Added system prompt to Claude (${l.length} chars)`),this.logger.log(`System prompt content:
|
|
141
|
+
${l}`);if(!a.env)a.env={};let i=["PATH","HOME","USER","SHELL","TMPDIR","LANG","LC_ALL"];for(let o of i)if(process.env[o])a.env[o]=process.env[o];for(let o in process.env)if(o.startsWith("CLAUDE_CODE_"))a.env[o]=process.env[o],this.logger.log(`Passing through Claude Code env var: ${o}`);else if(o.startsWith("ANTHROPIC_")&&o!=="ANTHROPIC_API_KEY")a.env[o]=process.env[o],this.logger.log(`Passing through Anthropic env var: ${o}`);else if(o.startsWith("HANKWEAVE_")&&!o.startsWith("HANKWEAVE_RUNTIME_")&&!o.startsWith("HANKWEAVE_SENTINEL_")){let d=o.substring(10);a.env[d]=process.env[o],this.logger.log(`Passing through env var: ${d}`)}if(this.anthropicBaseUrl)a.env.ANTHROPIC_BASE_URL=this.anthropicBaseUrl,this.logger.log(`Using custom Anthropic base URL: ${this.anthropicBaseUrl}`);if(t.env)this.logger.log("Applying codon-specific environment variables..."),Object.assign(a.env,t.env);if(this.model)this.logger.log(`Using model override: ${u.modelId} (codon config specified: ${t.model.modelId})`);return a}buildSystemPrompt(t){let e=null;if(t.appendSystemPromptFile){let u=Array.isArray(t.appendSystemPromptFile)?t.appendSystemPromptFile:[t.appendSystemPromptFile],a=[];for(let l of u)a.push(ge.readFileSync(l,"utf-8"));e=a.join(`
|
|
142
|
+
|
|
143
|
+
`)}else if(t.appendSystemPromptText)e=t.appendSystemPromptText;if(e)return e.replace(/<%PROJECT_DIR%>/g,this.executionPath).replace(/<%EXECUTION_DIR%>/g,this.executionPath).replace(/<%DATA_DIR%>/g,e0.join(this.executionPath,"read_only_data_source"));return null}buildPrompt(t){let{parsePromptFrontmatter:e}=(Ga(),Od(qa)),u,a;if(t.promptFile){let i=Array.isArray(t.promptFile)?t.promptFile:[t.promptFile],o=[];for(let d=0;d<i.length;d++){let m=ge.readFileSync(i[d],"utf-8"),_=e(m);if(o.push(_.content),d===0&&_.hasFrontmatter)a=_.frontmatter}u=o.join(`
|
|
144
|
+
|
|
145
|
+
`)}else if(t.promptText)u=t.promptText;else throw Error("No prompt file or text provided");return{content:u.replace(/<%PROJECT_DIR%>/g,this.executionPath).replace(/<%EXECUTION_DIR%>/g,this.executionPath).replace(/<%DATA_DIR%>/g,e0.join(this.executionPath,"read_only_data_source")),frontmatter:a}}async runQuery(t,e,u){this.logger.log(`[SDK-runQuery] ======= ENTERED runQuery function for codon ${u} =======`,"info"),this.logger.log(`[SDK-runQuery] Starting query for codon ${u}`,"debug"),this.logger.log(`[SDK-runQuery] Options: model=${e.model}, cwd=${e.cwd}, continue=${e.continue||!1}, resume=${e.resume||"none"}`,"debug"),this.logger.log(`[SDK-runQuery] Prompt length: ${t.length} chars`,"debug");try{this.logger.log("[SDK-runQuery] Creating query generator","debug"),this.logger.log("[SDK-runQuery] About to call query() from SDK...","info");let a=bh({prompt:t,options:e});this.logger.log("[SDK-runQuery] query() returned, generator created","info"),this.logger.log("[SDK-runQuery] Query generator created, entering message loop","debug");let l=0;for await(let d of a){if(l++,this.logger.log(`[SDK-runQuery] Received message ${l}: type=${d.type}`,"debug"),this.killed){this.logger.log("[SDK-runQuery] Killed flag set, breaking loop","debug");break}if(!this.sessionId)this.sessionId=d.session_id,this.logger.log(`[SDK-runQuery] Session ID: ${this.sessionId}`,"debug");let m=this.convertSDKMessageToJSONL(d);if(m)this.writeToLog(m);if(d.type==="assistant")this.emit("stdout",JSON.stringify(m))}this.logger.log(`[SDK-runQuery] Message loop completed, received ${l} message(s)`,"info"),this.logger.log("[SDK-runQuery] Parsing final log entries","debug"),this.logParser.parseNow();let i=this.logParser.getAllMessages();this.logger.log(`[SDK-runQuery] Got ${i.length} messages from log parser`,"debug");let o=i.some((d)=>{if(d.type==="result"&&d.subtype==="error")return d.result?.includes("context")||!1;return!1});this.logger.log(`[SDK-runQuery] Query complete, contextExceeded=${o}, calling cleanup and emitting exit`,"info"),this.cleanup(),this.logger.log("[SDK-runQuery] About to emit exit event","info"),this.emit("exit",0,o),this.logger.log("[SDK-runQuery] Exit event emitted","info")}catch(a){this.logger.log(`[SDK-runQuery] CAUGHT ERROR: ${qt(a).message}`,"error"),this.logger.log(`[SDK-runQuery] Error stack: ${qt(a).stack}`,"error");let l=this.extractErrorDetails(a,u);throw this.logger.log(l,"error"),this.cleanup(),a}}extractErrorDetails(t,e){let u=[];if(u.push(`Query execution failed for codon ${e}`),u.push(`Session ID: ${this.sessionId||"N/A"}`),u.push(`Working directory: ${this.executionPath}`),u.push(`Error type: ${t.name}`),u.push(`Error message: ${t.message}`),t.stack)u.push(`Stack trace:
|
|
146
|
+
${t.stack}`);try{this.logParser.parseNow();let a=this.logParser.getAllMessages(),l=a.filter((o)=>o.type==="result"&&o.subtype==="error");if(l.length>0){u.push(`
|
|
147
|
+
Log file analysis:`);for(let o of l)if(o.type==="result"){if(u.push(`- Result error: ${o.result||"No details available"}`),o.usage)u.push(` Usage: ${JSON.stringify(o.usage)}`)}}let i=a.filter((o)=>o.type==="assistant");if(i.length>0){let o=i[i.length-1];if(o.type==="assistant"){u.push(`
|
|
148
|
+
Last assistant message:`);let d=o.message.content;if(Array.isArray(d)){for(let m of d.slice(-3))if(m.type==="text"){let _=m.text.length>500?`${m.text.slice(0,500)}...`:m.text;u.push(` ${_}`)}else if(m.type==="tool_use")u.push(` [Tool use: ${m.name}]`)}}}}catch(a){u.push(`
|
|
149
|
+
Failed to parse log file: ${a.message}`)}return u.join(`
|
|
150
|
+
`)}convertSDKMessageToJSONL(t){if(t.type==="stream_event"||t.type==="tool_progress"||t.type==="auth_status")return null;if(t.type==="user"&&"isReplay"in t&&t.isReplay)return null;if(t.type==="system"&&!["init","hook_response","compact_boundary","status"].includes(t.subtype))return null;if(t.type==="result"&&t.subtype!=="success")return{...t,result:""};return t}writeToLog(t){if(this.logStream&&!this.logStream.destroyed)this.logStream.write(`${JSON.stringify(t)}
|
|
151
|
+
`)}async kill(t="SIGTERM"){if(!this.abortController||this.killed)return;this.killed=!0,this.logger.log(`Killing Claude Agent SDK session with ${t}`),this.logParser.parseNow(),this.abortController.abort(),await new Promise((e)=>setTimeout(e,100))}cleanup(){if(this.logger.log("[CLEANUP-DEBUG] cleanup() called","info"),this.logger.log(`[CLEANUP-DEBUG] Stack trace:
|
|
152
|
+
${Error().stack}`,"debug"),this.logStream&&!this.logStream.destroyed)this.logStream.end(),this.logStream=void 0;if(this.abortController)this.abortController=void 0;this.syntheticPid=void 0}isRunning(){return this.abortController!==void 0&&!this.killed}getSessionId(){return this.sessionId}getPid(){return this.syntheticPid}async closeLogStream(){if(this.logStream&&!this.logStream.destroyed)await new Promise((t)=>{this.logStream?.end(()=>t())}),this.logStream=void 0}async runSelfTest(){this.logger.log("Running Claude Agent SDK self-test...");let t=[],e=!1,u="unknown";try{e=!0;try{let n=e0.join(e0.dirname(it.resolve("@anthropic-ai/claude-agent-sdk")),"../package.json");u=JSON.parse(ge.readFileSync(n,"utf-8")).version||"unknown"}catch{u="installed"}t.push({name:"sdk_installed",passed:!0,message:`Claude Agent SDK found (version ${u})`})}catch(n){t.push({name:"sdk_installed",passed:!1,message:"Claude Agent SDK not found or failed to load: "+(n instanceof Error?n.message:"Unknown error")})}let a=process.env.CLAUDE_PATH_TO_CLAUDE_EXECUTABLE;if(a){let n=ge.existsSync(a);t.push({name:"claude_cli_executable",passed:n,message:n?`Claude CLI found at: ${a}`:`Claude CLI not found at specified path: ${a}`})}else{let n=Mh();if(n)t.push({name:"claude_cli_executable",passed:!0,message:`Claude CLI detected at: ${n}`});else t.push({name:"claude_cli_executable",passed:!0,message:"Claude CLI not detected, SDK will use internal CLI resolution"})}let l=!!process.env.ANTHROPIC_API_KEY,i=!!process.env.CLAUDE_CODE_OAUTH_TOKEN,o=l||i,d=i?"CLAUDE_CODE_OAUTH_TOKEN":l?"ANTHROPIC_API_KEY":"none";if(t.push({name:"authentication",passed:o,message:o?`Authentication configured via ${d}`:"No authentication found (set ANTHROPIC_API_KEY or CLAUDE_CODE_OAUTH_TOKEN)"}),this.anthropicBaseUrl)t.push({name:"custom_base_url",passed:!0,message:`Using custom Anthropic base URL: ${this.anthropicBaseUrl}`});let m=t.every((n)=>n.passed),_={shim:{name:"claude-agent-sdk-manager",version:u},agent:{name:"claude-agent-sdk",version:u,found:e},checks:t,overall:{passed:m,message:m?"All checks passed":"Some checks failed"}};return this.logger.log(`Self-test completed: ${_.overall.passed?"PASSED":"FAILED"}`,_.overall.passed?"info":"error"),_}}import l2 from"node:fs";import L_ from"node:path";import N_ from"node:crypto";import De from"node:fs";import Uh from"node:os";import su from"node:path";async function Fh(t){let e=await De.promises.stat(t),u=await De.promises.readFile(t),a=N_.createHash("sha256");return a.update(`file:${su.basename(t)}:${e.size}:${e.mtimeMs}`),a.update(u),a.digest("hex").substring(0,12)}async function X0(t,e=5000){let u=await De.promises.stat(t);if(u.isFile())return await Fh(t);else if(u.isDirectory())return await Ah(t,e);else throw Error(`Data source is neither a file nor a directory: ${t}`)}async function Ah(t,e=5000){let a=Date.now(),l=[];async function i(d,m){if(Date.now()-a>e){l.push("TIMEOUT:scan_truncated");return}if(m>3)return;try{let _=await De.promises.readdir(d,{withFileTypes:!0});_.sort((r,c)=>r.name.localeCompare(c.name));let n=_.slice(0,100);if(_.length>100)l.push(`TRUNCATED:${d}:${_.length-100}_more_items`);for(let r of n){if(r.name.startsWith(".")||r.name==="node_modules"||r.name==="__pycache__"||r.name==="dist"||r.name==="build")continue;let c=su.join(d,r.name),x=su.relative(t,c);try{let I=await De.promises.stat(c),s=Math.floor(I.mtimeMs/1000),k=r.isDirectory()?`d:${x}:${s}`:`f:${x}:${I.size}:${s}`;if(l.push(k),r.isDirectory()&&m<3)await i(c,m+1)}catch(I){let s=I instanceof Error?I.message:"unknown";l.push(`e:${x}:${s}`)}}}catch(_){let n=_ instanceof Error?_.message:"unknown";l.push(`e:${d}:read_error:${n}`)}}if(await i(t,0),l.length<5)l.push(`path:${t}`);let o=N_.createHash("sha256");return o.update(l.join(`
|
|
153
|
+
`)),o.digest("hex").substring(0,12)}async function a2(t){let e=su.join(Uh.homedir(),".hankweave-executions");if(!De.existsSync(e))return[];let u=[],a=await De.promises.readdir(e,{withFileTypes:!0});for(let l of a){if(!l.isDirectory())continue;let i=su.join(e,l.name,".hankweave","execution-meta.json");try{if(JSON.parse(await De.promises.readFile(i,"utf-8")).dataHash===t)u.push(su.join(e,l.name))}catch{}}return u.sort((l,i)=>i.localeCompare(l))}Yt();class yi{options;constructor(t){this.options=t}async execute(){let t={success:!1,directoriesRemoved:[],warnings:[],errors:[]};try{let e=[];if(this.options.executionPath)e=[this.options.executionPath];else if(this.options.dataSourcePath){if(!l2.existsSync(this.options.dataSourcePath))return t.errors.push(`Data source not found: ${this.options.dataSourcePath}`),t;console.log("Calculating data signature for cleanup...");let u=await X0(this.options.dataSourcePath);console.log(`Data signature: ${u}`);let a=await a2(u);if(a.length===0)return console.log("No execution directories found for this data source."),t.success=!0,t;if(e=[a[0]],a.length>1)console.log(`Found ${a.length} execution directories.`),console.log(`Only the latest will be cleaned up.
|
|
154
|
+
`)}else throw Error("Either dataSourcePath or executionPath must be provided");console.log(`\uD83E\uDDF9 Hankweave Cleanup Tool
|
|
155
|
+
`),console.log(`The following execution directory will be removed:
|
|
156
|
+
`);for(let u of e){let a=L_.join(u,".hankweave","execution-meta.json");try{let l=JSON.parse(await l2.promises.readFile(a,"utf-8"));console.log(`\uD83D\uDCC1 ${u}`),console.log(` Created: ${l.createdAt}`),console.log(` Last used: ${l.lastUsed}`),console.log(` Link type: ${l.linkType}`),console.log(` Original data: ${l.readOnlySourceDataPath}`);let i=await b_(u);console.log(` Size: ${M_(i)}`)}catch{console.log(`\uD83D\uDCC1 ${u} (metadata unavailable)`)}console.log()}if(this.options.dataSourcePath){let a=(await a2(await X0(this.options.dataSourcePath))).filter((l)=>!e.includes(l));if(a.length>0){console.log("Other execution directories (will NOT be removed):");for(let l of a)console.log(` - ${l}`);console.log()}}if(!this.options.skipConfirmation){if(!await this.getConfirmation())return console.log(`
|
|
157
|
+
❌ Cleanup cancelled by user`),t}console.log(`
|
|
158
|
+
\uD83D\uDDD1️ Removing execution directory...
|
|
159
|
+
`);for(let u of e)try{if(!l2.existsSync(u)){console.log(`⚠️ Directory does not exist: ${u}`);continue}let a=L_.join(u,".hankweave","runtime.lock");if(l2.existsSync(a)){t.errors.push(`Cannot remove ${u}: Server is running`),console.log(`❌ Skipped (server running): ${u}`);continue}await l2.promises.rm(u,{recursive:!0,force:!0}),t.directoriesRemoved.push(u),console.log(`✅ Removed: ${u}`)}catch(a){t.errors.push(`Failed to remove ${u}: ${a.message}`),console.log(`❌ Failed: ${u} - ${a.message}`)}if(t.success=t.errors.length===0,console.log(`
|
|
160
|
+
${"=".repeat(50)}
|
|
161
|
+
`),t.success)console.log("✅ Cleanup completed successfully!"),console.log(` Removed ${t.directoriesRemoved.length} execution directory`);else console.log("⚠️ Cleanup completed with errors"),console.log(` Removed: ${t.directoriesRemoved.length} directories`),console.log(` Failed: ${t.errors.length} directories`)}catch(e){t.errors.push(e.message),console.error(`
|
|
162
|
+
❌ Cleanup failed: ${e.message}`)}return t}async getConfirmation(){return console.log("❓ Proceed with cleanup? This cannot be undone! (y/N): "),new Promise((t)=>{process.stdin.once("data",(e)=>{let u=e.toString().trim().toLowerCase();t(u==="y"||u==="yes")})})}}var Z_=new Set(["--config","--data","--execution","--anthropic-base-url","--port","--model","--idle-timeout","--input"]),T_=new Set(["--headless","--validate","-v","--cleanup","-y","--no-autostart","--start-new","--copy","--proxy","--without-proxy","--init","--help","-h","--version","--force"]),jh=new Set([...Z_,...T_]);function u0(t,e){let u=t.findIndex((l)=>l.startsWith(`${e}=`));if(u!==-1)return console.warn(`⚠️ Deprecation warning: '${t[u]}' uses deprecated syntax. Use '${e} <value>' instead.`),t[u].split("=")[1];let a=t.indexOf(e);if(a!==-1&&a+1<t.length){let l=t[a+1];if(!l.startsWith("-"))return l}return}function E_(t){let e={},u=[],a=0;while(a<t.length){let m=t[a];if(m==="-")u.push(m),a++;else if(m.startsWith("-")){let _=m.indexOf("="),n=_>0?m.substring(0,_):m;if(!jh.has(n))throw Error(`Unknown argument '${m}'. Run with --help for available options.`);if(T_.has(n)){if(_>0)throw Error(`Flag '${n}' does not take a value.`);a++}else if(Z_.has(n))if(_>0)a++;else{if(a+1>=t.length||t[a+1].startsWith("-"))throw Error(`Flag '${n}' requires a value.`);a+=2}}else u.push(m),a++}if(u.length>2)throw Error(`Too many positional arguments. Expected at most 2 (hank-path, data-path), got ${u.length}.`);if(u.length===1)if(u[0].endsWith(".json"))e.hankPath=u[0];else e.dataPath=u[0];else if(u.length===2)e.hankPath=u[0],e.dataPath=u[1];let l=u0(t,"--port");if(l)e.port=parseInt(l,10);let i=u0(t,"--model");if(i)e.model=i;let o=u0(t,"--anthropic-base-url");if(o)e.anthropicBaseUrl=o;if(t.includes("--no-autostart"))e.autostart=!1;if(t.includes("--proxy"))e.withoutProxy=!1;if(t.includes("--without-proxy"))e.withoutProxy=!0;let d=u0(t,"--idle-timeout");if(d)e.idleTimeout=parseInt(d,10);return e.configPath=u0(t,"--config"),e.dataFlag=u0(t,"--data"),e.executionPath=u0(t,"--execution"),e.inputText=u0(t,"--input"),e.headless=t.includes("--headless"),e.validate=t.includes("--validate")||t.includes("-v"),e.cleanup=t.includes("--cleanup"),e.skipConfirmation=t.includes("-y"),e.startNew=t.includes("--start-new"),e.force=t.includes("--force"),e.init=t.includes("--init"),e.help=t.includes("--help")||t.includes("-h"),e.showVersion=t.includes("--version"),e.copy=t.includes("--copy"),e}Nt();ro();c2();hu();Yt();import Mt from"node:fs";import yr from"node:os";import Gt from"node:path";var mQ=xu().version;function wo(t,e){let u=[];for(let a of t.issues){let l=a.path,i="";if(l[0]===void 0&&a.code==="too_small")i=` - ${a.message}`;else if(typeof l[0]==="number"){let o=l[0],d=Array.isArray(e)?e[o]:null,m=d?.id||`index ${o}`,_=d?.name||"unnamed";if(l.length===1)i=` - Codon "${_}" (${m}): ${a.message}`;else{let n=l.slice(1).join(".");i=` - Codon "${_}" (${m}) - ${n}: ${a.message}`}}else if(a.code==="unrecognized_keys"){let o=a.keys?.join(", "),d=typeof l[0]==="number"?l[0]:void 0,m=d!==void 0&&Array.isArray(e)?e[d]:null,_=m?.id||(d!==void 0?`index ${d}`:""),n=m?.name||"unnamed";if(d!==void 0){let r=m?.type==="loop"?"Loop":"Codon",c=m?.type==="loop"?"type, id, name, description, terminateOn, codons":"type, id, name, promptFile, promptText, appendSystemPromptFile, appendSystemPromptText, model, continuationMode, rigSetup, description, checkpointedFiles, env, outputFiles, sentinels";i=` - ${r} "${n}" (${_}) has unrecognized field(s): ${o}. Fix: Remove these fields or check for typos. Valid fields are: ${c}.`}else i=` - Unrecognized field(s): ${o}. Fix: Remove these fields or check for typos.`}else i=` - ${l.join(".")||"Configuration"}: ${a.message}`;u.push(i)}return u.join(`
|
|
163
|
+
`)}var t4=["project"],nQ=[...t4,"lastCopied"],Io=p.object({type:p.literal("command").describe("Type of setup operation"),command:p.object({run:p.string().min(1,"Command cannot be empty").describe("Shell command to execute"),workingDirectory:p.enum(t4).optional().default("project").describe("Working directory for command execution (default: 'project')")})}),_Q=Io.extend({command:Io.shape.command.extend({workingDirectory:p.enum(nQ).optional().default("project").describe("Working directory for command execution (default: 'project')")})}),rQ=p.discriminatedUnion("type",[p.object({type:p.literal("copy").describe("Type of setup operation"),copy:p.object({from:p.string().min(1,"Source path cannot be empty").describe("Source path (relative to config file or absolute)"),to:p.string().min(1,"Target path cannot be empty").describe("Target path relative to projectPath (parent directory must exist). Always specifies the full target path including name. Examples: from: '../templates/foo', to: 'src/foo' → copies directory foo to src/foo; from: '../templates/foo', to: 'src/bar' → copies directory foo as src/bar; from: '../config.json', to: 'src/config.json' → copies file; from: '../config.json', to: 'src/settings.json' → copies file with rename")}),allowFailure:p.boolean().optional().default(!1).describe("If true, failure of this operation won't fail the codon (default: false). Recommended for rig setup in loop codons where operations might fail in some iterations (e.g., copying files that don't exist yet).")}),_Q.extend({allowFailure:p.boolean().optional().default(!1).describe("If true, failure of this operation won't fail the codon (default: false). Recommended for rig setup in loop codons where operations might fail in some iterations (e.g., running commands that might not succeed initially).")})]),cQ=p.object({copy:p.array(p.string()).min(1,"The 'copy' array cannot be empty.").describe("Glob patterns to copy from execution directory to output directory"),beforeCopy:p.array(Io).optional().describe("Optional commands to run before copying (run in executionPath)")}).strict(),xQ=p.array(cQ).optional(),IQ=p.discriminatedUnion("type",[p.object({type:p.literal("iterationLimit"),limit:p.number().int().min(1,"Iteration limit must be at least 1")}),p.object({type:p.literal("contextExceeded")})]);function e4(t){if(!t)return!0;let e=kt.getInstance();return l0(t,e).valid}function u4(t){let e=kt.getInstance();if(!t)throw Error("Unreachable");let u=l0(t,e);return{message:`Invalid model '${t}': ${u.reason}`,path:["model"]}}var wQ=p.object({type:p.literal("codon").optional().default("codon").describe("Type discriminator - optional, defaults to 'codon'"),id:p.string().min(1,"Codon ID cannot be empty. This uniquely identifies your codon (e.g., 'codon-1', 'analysis'). Fix: Add a unique id field.").describe("Unique identifier for this codon (e.g., 'codon-1', 'data-analysis')"),name:p.string().min(1,"Codon name cannot be empty. This is the human-readable name shown in the UI. Fix: Add a descriptive name field.").describe("Human-readable name displayed in UI and logs"),promptFile:p.union([p.string(),p.array(p.string())]).optional().describe("Path to a file containing the prompt (mutually exclusive with promptText)"),promptText:p.string().optional().describe("Inline prompt text (mutually exclusive with promptFile)"),appendSystemPromptFile:p.union([p.string(),p.array(p.string())]).optional().describe("Path to a file containing system prompt to append (mutually exclusive with appendSystemPromptText)"),appendSystemPromptText:p.string().optional().describe("Inline system prompt text to append (mutually exclusive with appendSystemPromptFile)"),model:p.string().min(1,"Model cannot be empty").describe("Model to use for this codon. Can be a Claude model ('sonnet', 'opus'), Gemini model ('gemini-2.0-flash-exp', 'flash'), or any other model supported by the configured shim."),continuationMode:p.enum(["fresh","continue-previous"],{errorMap:()=>({message:"continuationMode must be either 'fresh' or 'continue-previous'. This controls whether to start a new conversation or continue from the previous codon. Fix: Add continuationMode field with either 'fresh' (new conversation) or 'continue-previous' (maintain context)."})}).describe("How this codon should handle continuation from previous codons. 'fresh': Start a new session (default for most cases). 'continue-previous': Continue from the previous codon's session, maintaining context and conversation history. The previous codon must have completed successfully."),rigSetup:p.array(rQ).optional().describe("Rig setup operations to run before codon starts. Each operation must complete successfully for codon to start."),description:p.string().optional().describe("Optional description shown to users about what this codon does"),checkpointedFiles:p.array(p.string()).optional().describe("Glob patterns for files to checkpoint during codon execution. These files will be: watched for changes and streamed to the client, tracked in the git-based checkpoint system, and resolved using gitignore rules for consistency."),env:p.record(p.string()).optional().describe("Optional environment variables to set for the Claude process"),outputFiles:xQ.describe("Optional output copy steps to run after codon completion: files to copy out from a completed codon, with optional pre-copy commands."),sentinels:p.array(za).optional().describe("Sentinels to run during this codon. Sentinels are parallel observation agents that process the event stream. Each entry is a wrapper object with sentinelConfig (portable sentinel configuration, file or inline) and settings (codon-specific settings like output paths and load requirements). This wrapper pattern keeps sentinel configs reusable across codons.")}),a4=wQ.strict().refine((t)=>t.promptFile||t.promptText,{message:"Either promptFile or promptText must be provided. The prompt tells Claude what to do in this codon. Fix: Add either promptFile (path to .md file) or promptText (inline prompt string)."}).refine((t)=>!(t.appendSystemPromptFile&&t.appendSystemPromptText),{message:"Cannot specify both appendSystemPromptFile and appendSystemPromptText. Use one or the other to add system-level instructions. Fix: Remove one of these fields."}).transform((t,e)=>{let u=kt.getInstance(),a=l0(t.model,u);if(!a.valid)return e.addIssue({code:p.ZodIssueCode.custom,message:`Invalid model '${t.model}': ${a.reason}`,path:["model"]}),p.NEVER;return{...t,model:a.modelInfo}}),sQ=p.object({type:p.literal("loop").describe("Type discriminator - required for loops"),id:p.string().min(1,"Loop ID cannot be empty. This uniquely identifies your loop (e.g., 'iterative-development'). Fix: Add a unique id field.").describe("Unique identifier for this loop (e.g., 'iterative-development')"),name:p.string().min(1,"Loop name cannot be empty. This is the human-readable name shown in the UI. Fix: Add a descriptive name field.").describe("Human-readable name displayed in UI and logs"),description:p.string().optional().describe("Optional description shown to users about what this loop does"),terminateOn:IQ.describe("Termination condition for the loop"),codons:p.array(a4).min(1,"Loop must contain at least one codon. Fix: Add codons to the loop.").describe("Array of codons to execute in each iteration. Only Codon objects allowed (no nested loops).")}),kQ=p.union([a4,sQ.strict()]),fQ=p.array(kQ).min(1,"At least one codon required"),hQ=p.object({name:p.string().min(1,"Hank name cannot be empty").describe("Human-readable name for the hank"),version:p.string().min(1,"Hank version cannot be empty").describe("Version number (e.g., '1.0.0')"),description:p.string().optional().describe("Optional description of what this hank does"),author:p.string().optional().describe("Optional author information")}),l4=p.object({enablePersistence:p.boolean().optional().describe("Enable filesystem persistence for sentinel outputs"),healthCheckGracePeriodMs:p.number().int().positive().optional().describe("Grace period for sentinel health checks (milliseconds)"),waitForAllHealthChecks:p.boolean().optional().describe("Wait for all health checks before loading sentinels")}).strict(),gQ=p.object({model:p.string().optional().describe("Recommended model for this hank (e.g., 'sonnet' for Claude, 'flash' for Gemini, 'This task needs high reasoning')"),dataHashTimeLimit:p.number().int().positive().optional().describe("Recommended time limit for data hashing in milliseconds"),sentinel:l4.optional().describe("Recommended sentinel system settings")}).strict().refine((t)=>e4(t.model),(t)=>u4(t.model)),BQ=p.object({meta:hQ.optional().describe("Metadata for sharing/indexing (optional)"),recommendations:gQ.optional().describe("Architect's recommendations for optimal execution (optional)"),hank:fQ.describe("The immutable logic sequence (required)")}),i4=p.object({port:p.number().int().positive().optional().describe("WebSocket server port"),autostart:p.boolean().optional().describe("If true, run immediately on client connect"),withoutProxy:p.boolean().optional().describe("Bypass internal LLM proxy"),model:p.string().min(1).optional().describe("User's preferred default model. Can be a short name like 'sonnet' or 'opus', a Gemini model like 'gemini-2.0-flash', or any model supported by the configured providers. Validation happens at runtime via LLMRegistry."),anthropicBaseUrl:p.string().url().optional().describe("Custom Anthropic API base URL (for corporate proxies)"),outputDirectory:p.string().optional().describe("Where to put results (relative to CWD)"),executionBaseDir:p.string().optional().describe("Where to create temp execution environments"),logParsingInterval:p.number().int().positive().optional().describe("Interval for parsing Claude log files (milliseconds)"),dataHashTimeLimit:p.number().int().positive().optional().describe("Time limit for hashing directories (milliseconds)"),idleTimeout:p.number().int().min(0,"Idle timeout must be at least 0").max(255,"Idle timeout must be at most 255").optional().describe("Idle timeout for WebSocket and proxy servers in seconds (0-255). This is the maximum amount of time a connection is allowed to be idle before the server closes it. A connection is idling if there is no data sent or received."),sentinel:l4.optional().describe("Sentinel system configuration")}).strict().refine((t)=>e4(t.model),(t)=>u4(t.model)),QQ={port:7777,version:mQ,outputDirectory:"hankweave-results",executionBaseDir:Gt.join(yr.homedir(),".hankweave-executions"),lockFile:".hankweave/runtime.lock",socketLogFile:".hankweave/logs/websocket.log",serverLogFile:".hankweave/logs/server.log",logParsingInterval:1000,autostart:!0,dataHashTimeLimit:5000,toolResultTruncateLength:2500,withoutProxy:!0,handshakeHistoryLimit:50,idleTimeout:0,sentinel:{enablePersistence:!0,healthCheckGracePeriodMs:2000,waitForAllHealthChecks:!1}};function o4(t){try{let e=Mt.readFileSync(t,"utf-8"),u=JSON.parse(e),a=BQ.safeParse(u);if(!a.success){let l=wo(a.error,u);throw Error(`Invalid hank file:
|
|
164
|
+
${l}`)}return a.data}catch(e){if(e.code==="ENOENT")throw Error(`Hank file not found: ${t}`);throw e}}function vQ(t){let e=t||Gt.join(process.cwd(),"hankweave.json");if(!Mt.existsSync(e))return{};try{let u=Mt.readFileSync(e,"utf-8"),a=JSON.parse(u),l=i4.safeParse(a);if(!l.success){let i=wo(l.error,a);throw Error(`Invalid runtime config file:
|
|
165
|
+
${i}`)}return l.data}catch(u){if(u instanceof Error&&u.message.startsWith("Invalid runtime config"))throw u;throw Error(`Failed to load runtime config from ${e}: ${u.message}`)}}function qQ(){let t={},e=(l)=>{return l.toLowerCase().replace(/_([a-z])/g,(i,o)=>o.toUpperCase())},u=(l,i)=>{if(l==="autostart"||l==="withoutProxy"||l==="enablePersistence"||l==="waitForAllHealthChecks")return i==="true"||i==="1";if(l==="port"||l==="logParsingInterval"||l==="dataHashTimeLimit"||l==="healthCheckGracePeriodMs"||l==="idleTimeout"){let o=Number(i);if(Number.isNaN(o))throw Error(`Invalid number value for ${l}: "${i}"`);return o}return i};for(let[l,i]of Object.entries(process.env)){if(!l.startsWith("HANKWEAVE_RUNTIME_")||!i)continue;let o=l.substring(18);if(o.startsWith("SENTINEL_")){let d=o.substring(9),m=e(d);if(!t.sentinel)t.sentinel={};t.sentinel[m]=u(m,i)}else{let d=e(o);t[d]=u(d,i)}}let a=i4.safeParse(t);if(!a.success){let l=wo(a.error,t);throw Error(`Invalid environment variable configuration:
|
|
166
|
+
${l}`)}return a.data}function d4(t){let{cliArgs:e={},hankPath:u,runtimeConfigPath:a}=t||{},l={...QQ};try{let o=vQ(a);l=Iu(l,o)}catch(o){}if(u)try{let o=o4(u);if(o.recommendations)l=Iu(l,o.recommendations)}catch(o){}let i=qQ();return l=Iu(l,i),l=Iu(l,e),l}function GQ(t){try{let l=function(_){if(_.type==="loop")return{..._,codons:_.codons.map((r)=>l(r))};let n={..._};if(n.promptFile){if(Array.isArray(n.promptFile))n.promptFile=n.promptFile.map((r)=>Gt.isAbsolute(r)?r:Gt.resolve(a,r));else if(!Gt.isAbsolute(n.promptFile))n.promptFile=Gt.resolve(a,n.promptFile)}if(n.appendSystemPromptFile){if(Array.isArray(n.appendSystemPromptFile))n.appendSystemPromptFile=n.appendSystemPromptFile.map((r)=>Gt.isAbsolute(r)?r:Gt.resolve(a,r));else if(!Gt.isAbsolute(n.appendSystemPromptFile))n.appendSystemPromptFile=Gt.resolve(a,n.appendSystemPromptFile)}if(n.rigSetup)n.rigSetup=n.rigSetup.map((r)=>{if(r.type==="copy"&&r.copy)return{...r,copy:{from:Gt.isAbsolute(r.copy.from)?r.copy.from:Gt.resolve(a,r.copy.from),to:r.copy.to}};return r});return n},d=function(_,n,r,c=!1){if(_.type==="loop"){for(let[x,I]of _.codons.entries()){let s=`Loop '${_.id}' > Codon ${x+1} (${I.id})`;d(I,s,x,!0)}return}if(_.promptFile){let x=Array.isArray(_.promptFile)?_.promptFile:[_.promptFile];for(let I of x)if(!Mt.existsSync(I))o.push(`${n}: promptFile "${I}" does not exist`);else try{Mt.readFileSync(I,"utf-8")}catch(s){o.push(`${n}: promptFile "${I}" is not readable: ${s instanceof Error?s.message:String(s)}`)}}if(_.appendSystemPromptFile){let x=Array.isArray(_.appendSystemPromptFile)?_.appendSystemPromptFile:[_.appendSystemPromptFile];for(let I of x)if(!Mt.existsSync(I))o.push(`${n}: appendSystemPromptFile "${I}" does not exist`);else try{Mt.readFileSync(I,"utf-8")}catch(s){o.push(`${n}: appendSystemPromptFile "${I}" is not readable: ${s instanceof Error?s.message:String(s)}`)}}if(_.rigSetup){for(let[x,I]of _.rigSetup.entries())if(I.type==="copy"&&I.copy){if(!Mt.existsSync(I.copy.from))o.push(`${n}, rig setup item ${x+1}: source path "${I.copy.from}" does not exist`)}}if(_.sentinels&&_.sentinels.length>0){let x=new Set,I=Gt.dirname(t);for(let[s,k]of _.sentinels.entries()){let g=`Codon ${r+1} (${_.id}), sentinel ${s+1}`,f;if(typeof k.sentinelConfig==="string"){let h=Gt.isAbsolute(k.sentinelConfig)?k.sentinelConfig:Gt.resolve(I,k.sentinelConfig);if(!Mt.existsSync(h)){let B=k.settings?.failCodonIfNotLoaded?"ERROR":"WARNING";o.push(`${g}: Sentinel config file not found: ${k.sentinelConfig} [${B}]`);continue}try{let B=Mt.readFileSync(h,"utf-8");f=JSON.parse(B)}catch(B){let Q=k.settings?.failCodonIfNotLoaded?"ERROR":"WARNING",V=B instanceof Error?B.message:String(B);o.push(`${g}: Failed to parse sentinel config file ${k.sentinelConfig}: ${V} [${Q}]`);continue}}else f=k.sentinelConfig;if(f&&typeof f==="object"&&"id"in f){let h=f.id;if(x.has(h))o.push(`${g}: Duplicate sentinel ID '${h}' in codon ${_.id}`);x.add(h)}}}},m=function(_){if(_.type==="loop")return{..._,id:at(_.id),codons:_.codons.map((n)=>m(n))};return{..._,id:at(_.id)}},u=o4(t).hank,a=Gt.dirname(t),i=u.map((_)=>l(_)),o=[];for(let[_,n]of i.entries()){let r=n.type==="loop"?`Loop ${_+1} (${n.id})`:`Codon ${_+1} (${n.id})`;d(n,r,_)}if(o.length>0)throw Error(`Codon configuration validation failed:
|
|
167
|
+
${o.join(`
|
|
168
|
+
`)}`);return i.map((_)=>m(_))}catch(e){if(e instanceof Error)throw Error(`Failed to load codon config from ${t}: ${e.message}`);throw e}}async function p4(t,e,u){let a=GQ(t),l={codons:a,codonCount:0,promptFileCount:0,systemPromptFileCount:0,rigSetupCount:0,trackingCodonCount:0,checkpointCodonCount:0,warnings:[],environmentVariables:{fromSystem:{},fromCodons:[]}};for(let n in process.env)if(n.startsWith("HANKWEAVE_")&&!n.startsWith("HANKWEAVE_RUNTIME_")&&!n.startsWith("HANKWEAVE_SENTINEL_")){let r=n.substring(10);l.environmentVariables.fromSystem[r]=process.env[n]||""}async function i(n,r,c,x,I,s){if(n.type==="loop"){let f=r||`Loop ${c+1} (${n.id})`;if(I.has(n.id))throw Error(`${f}: Duplicate loop ID "${n.id}"`);I.add(n.id);let h=new Set;for(let B of n.codons){if(h.has(B.id))throw Error(`${f}: Duplicate codon ID "${B.id}" within loop`);h.add(B.id)}if(n.terminateOn.type==="contextExceeded"){for(let B of n.codons)if(B.continuationMode==="fresh")throw Error(`${f}: Loop with contextExceeded termination cannot contain codons with continuationMode "fresh". Codon "${B.name}" (${B.id}) has continuationMode "fresh", which would prevent context from building up and cause an infinite loop. Change to "continue-previous" to allow context to accumulate.`)}for(let[B,Q]of n.codons.entries())if(Q.continuationMode==="continue-previous"&&B>0){let V=n.codons[B-1];if(Q.model.modelId!==V.model.modelId)throw Error(`${f} > Codon ${B+1} (${Q.id}): Cannot use continuationMode "continue-previous" when model differs from previous codon in loop. Different models cannot share the same session ID. Change to "fresh" to start a new conversation with a different model.`)}for(let[B,Q]of n.codons.entries()){let V=`Loop '${n.id}' > Codon ${B+1} (${Q.id})`;await i(Q,V,B,!1,I,s)}return}let k=n,g=r||`Codon ${c+1} (${k.id})`;if(I.has(k.id))throw Error(`${g}: Duplicate codon ID "${k.id}"`);if(I.add(k.id),s.has(k.name))l.warnings.push(`${g}: Duplicate codon name "${k.name}"`);if(s.add(k.name),!x&&k.rigSetup&&k.rigSetup.length>0){if(k.rigSetup.some((h)=>!h.allowFailure))l.warnings.push(`${g}: rigSetup in loop codon should use 'allowFailure: true' to prevent loop termination on setup failures. This is especially important if subsequent iterations might fail (e.g., trying to copy files to where they already exist).`)}if(l.codonCount++,k.env&&Object.keys(k.env).length>0)l.environmentVariables.fromCodons.push({codonId:k.id,codonName:k.name,variables:k.env});if(k.promptFile){let f=Array.isArray(k.promptFile)?k.promptFile:[k.promptFile];l.promptFileCount+=f.length;for(let h of f)try{let B=await Mt.promises.stat(h);if(B.size===0)l.warnings.push(`${g}: Prompt file "${h}" is empty`);if(B.size>1048576)l.warnings.push(`${g}: Prompt file "${h}" is large (${(B.size/1024/1024).toFixed(2)}MB)`)}catch(B){throw Error(`${g}: Cannot stat prompt file "${h}": ${B}`)}}if(k.appendSystemPromptFile){let f=Array.isArray(k.appendSystemPromptFile)?k.appendSystemPromptFile:[k.appendSystemPromptFile];l.systemPromptFileCount+=f.length}if(k.rigSetup){l.rigSetupCount+=k.rigSetup.length;for(let[f,h]of k.rigSetup.entries())if(h.type==="copy"&&h.copy){let B=Gt.join(e,h.copy.to),Q=Gt.dirname(B);try{if(Gt.relative(e,Q).startsWith(".."))throw Error(`${g}, rig setup item ${f+1}: Target path "${h.copy.to}" would write outside execution directory`)}catch(V){throw Error(`${g}, rig setup item ${f+1}: Invalid target path "${h.copy.to}"`)}if(Mt.existsSync(B))l.warnings.push(`${g}: Copy target "${h.copy.to}" already exists and will be overwritten`)}else if(h.type==="command"&&h.command){let B=h.command.run.trim();if(!B)throw Error(`${g}, rig setup item ${f+1}: Empty command`);let Q=[/rm\s+-rf\s+\//,/rm\s+-rf\s+~/,/>\s*\/dev\/sda/,/format\s+/i,/del\s+\/s\s+\/q\s+c:/i];for(let V of Q)if(V.test(B)){l.warnings.push(`${g}: Potentially dangerous command detected: "${B}"`);break}}}if(k.checkpointedFiles&&k.checkpointedFiles.length>0)l.trackingCodonCount++,l.checkpointCodonCount++;if(x){if(k.continuationMode==="continue-previous"&&c===0)l.warnings.push(`${g}: First codon has continuationMode "continue-previous" but there's no previous codon`);if(k.continuationMode==="continue-previous"&&c>0){let f=a[c-1];if(f.type==="loop"&&f.terminateOn.type==="contextExceeded")throw Error(`${g}: Cannot use continuationMode "continue-previous" after a loop with contextExceeded termination. Loop "${f.name}" (${f.id}) terminates only when context is exhausted, meaning there's no meaningful conversation to continue. Change to "fresh" to start a new conversation.`);let h,B;if(f.type==="loop")h=f.codons[f.codons.length-1],B=`Continues from previous loop "${f.id}" whose last codon "${h.id}"`;else h=f,B=`Continues from previous codon "${h.id}"`;if(k.model.modelId!==h.model.modelId)throw Error(`${g}: Cannot use continuationMode "continue-previous" when model differs from previous codon. Different models cannot share the same session ID. Change to "fresh" to start a new conversation with a different model.`);if(!h.checkpointedFiles||h.checkpointedFiles.length===0)l.warnings.push(`${g}: ${B} doesn't checkpoint any files`)}}}let o=new Set,d=new Set;for(let[n,r]of a.entries())await i(r,"",n,!0,o,d);if(l.codonCount===0)throw Error("Configuration must contain at least one codon");let m=new Map;function _(n){if("codons"in n)for(let r of n.codons)_(r);else m.set(n.model.modelId,n.model)}for(let n of a)_(n);if(m.size>0){l.shimSelfTests=[];for(let[n,r]of m){u.log(`Running self-test for model: ${r.name} (${r.providerId}/${n})`);let c=Gt.join(yr.tmpdir(),`hankweave-self-test-exec-${Date.now()}`);if(!Mt.existsSync(c))Mt.mkdirSync(c,{recursive:!0});try{let{CodonRunner:x}=await Promise.resolve().then(() => (x2(),_o)),I=await x.runSelfTestForModel(r,c,u,void 0);if(l.shimSelfTests.push({modelId:n,modelName:r.name,provider:r.providerId,passed:I.overall.passed,result:I}),!I.overall.passed)l.warnings.push(`Self-test failed for ${r.name} (${r.providerId}/${n}): ${I.overall.message}`);u.log(`Self-test ${I.overall.passed?"PASSED":"FAILED"} for ${r.name}`)}catch(x){let I=x instanceof Error?x.message:String(x);u.log(`Self-test error for ${r.name}: ${I}`,"error"),l.shimSelfTests.push({modelId:n,modelName:r.name,provider:r.providerId,passed:!1,result:{shim:{name:"unknown",version:"unknown"},agent:{name:"unknown",version:"unknown",found:!1},checks:[],overall:{passed:!1,message:I}}}),l.warnings.push(`Self-test error for ${r.name} (${r.providerId}/${n}): ${I}`)}finally{if(Mt.existsSync(c))Mt.rmSync(c,{recursive:!0,force:!0})}}}if(l.shimSelfTests&&l.shimSelfTests.length>0){let n=l.shimSelfTests.filter((r)=>!r.passed);if(n.length>0){let r=n.map((c)=>` - ${c.modelName} (${c.provider}/${c.modelId}): ${c.result.overall.message}`);throw Error(`Self-test failed for ${n.length} model(s):
|
|
169
|
+
${r.join(`
|
|
170
|
+
`)}
|
|
171
|
+
|
|
172
|
+
Please ensure all required API keys and dependencies are configured correctly.`)}}return l}K0();import $Q from"node:crypto";import et from"node:fs";import m4 from"node:os";import Ut from"node:path";import XQ from"node:readline";function JQ(){if(process.env.CI||process.env.GITHUB_ACTIONS||process.env.GITLAB_CI||process.env.JENKINS||process.env.CIRCLECI||process.env.TRAVIS)return!0;if(!process.stdin.isTTY||!process.stdout.isTTY)return!0;return!1}async function n4(t){if(JQ())return console.warn("⚠️ Non-interactive mode, skipping confirmation prompt."),!1;let e=XQ.createInterface({input:process.stdin,output:process.stdout});return new Promise((u)=>{let a=setTimeout(()=>{e.close(),console.warn(`
|
|
173
|
+
⚠️ Prompt timed out, defaulting to no.`),u(!1)},30000);e.question(`${t} [y/N] `,(l)=>{clearTimeout(a),e.close(),u(l.toLowerCase()==="y"||l.toLowerCase()==="yes")})})}async function KQ(t){let e=await et.promises.readdir(t,{withFileTypes:!0}),u=0,a=0;for(let l of e)if(l.isDirectory())a++;else u++;return{files:u,directories:a}}async function _4(t){let{readOnlySourceDataPath:e,executionPath:u,useSymlink:a=!0,dataHashTimeLimit:l=Bu.dataHashTimeLimit,startNew:i=!1,forceMode:o=!1,skipConfirmation:d=!1,hankPath:m}=t;if(!et.existsSync(e))throw Error(`Data source not found: ${e}`);let _=await et.promises.stat(e);if(!_.isDirectory()&&!_.isFile())throw Error(`Data source is not a file or directory: ${e}`);console.log("Calculating data signature...");let n=await X0(e,l);console.log(`Data signature: ${n}`);let r,c=!1,x=!1,I=!1,s;if(m&&et.existsSync(m)){let V=await et.promises.readFile(m,"utf-8");s=$Q.createHash("sha256").update(V).digest("hex")}if(u){let V=Ut.join(m4.homedir(),".hankweave-executions");if(u.startsWith(V))throw Error(`Cannot use ${V}/ as explicit execution directory.
|
|
174
|
+
This location is reserved for auto-managed executions.
|
|
175
|
+
Use a different path for --execution.`);if(i){if(et.existsSync(u)){let A=await et.promises.readdir(u);if(A.length>0)if(A.includes(".hankweave"))if(o){let L=new Date().toISOString().replace(/[:.]/g,"-").slice(0,19),y=Ut.join(u,`.hankweave.backup-${L}`);await et.promises.rename(Ut.join(u,".hankweave"),y),console.log(`\uD83D\uDCE6 Backed up existing execution to: ${y}`)}else throw Error(`Directory already contains Hankweave execution: ${u}
|
|
176
|
+
Options:
|
|
177
|
+
1. Remove .hankweave/ directory and try again
|
|
178
|
+
2. Use --force to backup existing state and start fresh
|
|
179
|
+
3. Use a different directory`);else{let{files:L,directories:y}=await KQ(u);if(!d&&!o){if(console.log(`
|
|
180
|
+
⚠️ WARNING: Running in existing non-empty directory: ${u}`),console.log(`
|
|
181
|
+
This directory contains ${L} files and ${y} directories.`),console.log(" Hankweave agents will have access to READ and MODIFY files in this directory."),console.log(`
|
|
182
|
+
Hankweave will create:`),console.log(" ./.hankweave/ (execution metadata)"),console.log(" ./read_only_data_source/ (symlink to data)"),console.log(`
|
|
183
|
+
IMPORTANT: Always use version control. Test hanks on non-critical directories first.
|
|
184
|
+
`),!await n4("Continue?"))throw Error("Operation cancelled by user.")}else if(d)console.warn(`⚠️ Running in non-empty directory with -y flag: ${u} (${L} files, ${y} directories)`)}console.log(`Using directory for new execution: ${u}`)}else await et.promises.mkdir(u,{recursive:!0}),console.log(`Created directory for new execution: ${u}`);c=!0,x=!1,r=u}else{if(!et.existsSync(u))throw Error(`Execution directory not found: ${u}`);if(!(await et.promises.stat(u)).isDirectory())throw Error(`Execution path is not a directory: ${u}`);if(u.includes("/.hankweave-executions/")&&u.includes("/data"))throw Error("Cannot create execution inside another execution directory");if(Ut.resolve(u)===Ut.resolve(e))throw Error("Execution directory cannot be the same as data source");let F=Ut.join(u,".hankweave","execution-meta.json");if(et.existsSync(F)){let L=JSON.parse(await et.promises.readFile(F,"utf-8"));if(L.dataHash!==n)throw Error(`Data source mismatch. Execution directory was created for different data.
|
|
185
|
+
Expected hash: ${L.dataHash}
|
|
186
|
+
Current hash: ${n}`);if(!i&&s&&L.hankHash&&L.hankHash!==s){if(I=!0,console.log(`
|
|
187
|
+
⚠️ WARNING: hank.json has changed since last execution.`),console.log(` Previous hash: ${L.hankHash.substring(0,12)}...`),console.log(` Current hash: ${s.substring(0,12)}...`),console.log(` Changes may affect execution behavior.
|
|
188
|
+
`),!d&&!o){if(!await n4("Continue with modified config?"))throw Error("Operation cancelled by user.")}}x=!0}else c=!0,console.log(`Using existing directory as execution directory: ${u}`);r=u}}else{let V=Ut.join(m4.homedir(),".hankweave-executions");if(await et.promises.mkdir(V,{recursive:!0}),i){let A=Date.now(),F=Math.random().toString(36).substring(2,6),L=`${A}-${F}-${n.substring(0,6)}`;r=Ut.join(V,L),await et.promises.mkdir(r,{recursive:!0}),c=!0,x=!1,console.log(`Created new execution directory: ${r}`)}else{let A=await a2(n);if(A.length>0)r=A[0],x=!0,console.log(`Resuming execution in: ${r}`);else{let F=Date.now(),L=Math.random().toString(36).substring(2,6),y=`${F}-${L}-${n.substring(0,6)}`;r=Ut.join(V,y),await et.promises.mkdir(r,{recursive:!0}),c=!0,console.log(`Created execution directory: ${r}`)}}}let k=Ut.join(r,"read_only_data_source"),g=a?"symlink":"copy";if(c||!et.existsSync(k)){if(et.existsSync(k))console.log(`\uD83D\uDDD1️ Removing existing data link: ${k}`),await et.promises.rm(k,{recursive:!0,force:!0,maxRetries:3,retryDelay:100});if(_.isDirectory())if(a)try{await et.promises.symlink(e,k,"dir")}catch(V){console.warn(`Failed to create symlink for directory: ${V}. Falling back to copy.`),await so(e,k),g="copy"}else await so(e,k);else if(_.isFile()){await et.promises.mkdir(k,{recursive:!0});let V=Ut.join(k,Ut.basename(e));if(a)try{await et.promises.symlink(e,V)}catch(A){console.warn(`Failed to create symlink for file: ${A}. Falling back to copy.`),await et.promises.copyFile(e,V),g="copy"}else await et.promises.copyFile(e,V)}}let f=Ut.join(r,".hankweave");await et.promises.mkdir(f,{recursive:!0});let h=Ut.join(f,"execution-meta.json"),B=et.existsSync(h)?JSON.parse(await et.promises.readFile(h,"utf-8")):null,Q={version:"1.0.0",readOnlySourceDataPath:e,readOnlySourceResolvedDataPath:await et.promises.realpath(e),dataHash:n,hankHash:s,hankPath:m,linkType:g,createdAt:c?new Date().toISOString():B?.createdAt??new Date().toISOString(),lastUsed:new Date().toISOString()};return await et.promises.writeFile(h,JSON.stringify(Q,null,2)),{readOnlySourceDataPath:e,executionPath:r,dataPathInExecutionDir:k,dataHash:n,hankHash:s,isNewExecution:c,isResuming:x,linkType:g,configChanged:I,meta:Q}}async function so(t,e){await et.promises.mkdir(e,{recursive:!0});let u=await et.promises.readdir(t,{withFileTypes:!0});for(let a of u){let l=Ut.join(t,a.name),i=Ut.join(e,a.name);if(a.isDirectory())await so(l,i);else if(a.isSymbolicLink()){let o=await et.promises.readlink(l);await et.promises.symlink(o,i)}else if(a.isFile())await et.promises.copyFile(l,i)}}import{spawn as Cx}from"node:child_process";import dt from"node:fs";import $t from"node:path";var ko=(t,e,u)=>{let a=t instanceof RegExp?r4(t,u):t,l=e instanceof RegExp?r4(e,u):e,i=a!==null&&l!=null&&WQ(a,l,u);return i&&{start:i[0],end:i[1],pre:u.slice(0,i[0]),body:u.slice(i[0]+a.length,i[1]),post:u.slice(i[1]+l.length)}},r4=(t,e)=>{let u=e.match(t);return u?u[0]:null},WQ=(t,e,u)=>{let a,l,i,o=void 0,d,m=u.indexOf(t),_=u.indexOf(e,m+1),n=m;if(m>=0&&_>0){if(t===e)return[m,_];a=[],i=u.length;while(n>=0&&!d){if(n===m)a.push(n),m=u.indexOf(t,n+1);else if(a.length===1){let r=a.pop();if(r!==void 0)d=[r,_]}else{if(l=a.pop(),l!==void 0&&l<i)i=l,o=_;_=u.indexOf(e,n+1)}n=m<_&&m>=0?m:_}if(a.length&&o!==void 0)d=[i,o]}return d};var c4="\x00SLASH"+Math.random()+"\x00",x4="\x00OPEN"+Math.random()+"\x00",ho="\x00CLOSE"+Math.random()+"\x00",I4="\x00COMMA"+Math.random()+"\x00",w4="\x00PERIOD"+Math.random()+"\x00",VQ=new RegExp(c4,"g"),YQ=new RegExp(x4,"g"),HQ=new RegExp(ho,"g"),zQ=new RegExp(I4,"g"),bQ=new RegExp(w4,"g"),MQ=/\\\\/g,UQ=/\\{/g,FQ=/\\}/g,AQ=/\\,/g,jQ=/\\./g;function fo(t){return!isNaN(t)?parseInt(t,10):t.charCodeAt(0)}function DQ(t){return t.replace(MQ,c4).replace(UQ,x4).replace(FQ,ho).replace(AQ,I4).replace(jQ,w4)}function NQ(t){return t.replace(VQ,"\\").replace(YQ,"{").replace(HQ,"}").replace(zQ,",").replace(bQ,".")}function s4(t){if(!t)return[""];let e=[],u=ko("{","}",t);if(!u)return t.split(",");let{pre:a,body:l,post:i}=u,o=a.split(",");o[o.length-1]+="{"+l+"}";let d=s4(i);if(i.length)o[o.length-1]+=d.shift(),o.push.apply(o,d);return e.push.apply(e,o),e}function k4(t){if(!t)return[];if(t.slice(0,2)==="{}")t="\\{\\}"+t.slice(2);return w2(DQ(t),!0).map(NQ)}function LQ(t){return"{"+t+"}"}function ZQ(t){return/^-?0\d/.test(t)}function TQ(t,e){return t<=e}function EQ(t,e){return t>=e}function w2(t,e){let u=[],a=ko("{","}",t);if(!a)return[t];let l=a.pre,i=a.post.length?w2(a.post,!1):[""];if(/\$$/.test(a.pre))for(let o=0;o<i.length;o++){let d=l+"{"+a.body+"}"+i[o];u.push(d)}else{let o=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(a.body),d=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(a.body),m=o||d,_=a.body.indexOf(",")>=0;if(!m&&!_){if(a.post.match(/,(?!,).*\}/))return t=a.pre+"{"+a.body+ho+a.post,w2(t);return[t]}let n;if(m)n=a.body.split(/\.\./);else if(n=s4(a.body),n.length===1&&n[0]!==void 0){if(n=w2(n[0],!1).map(LQ),n.length===1)return i.map((c)=>a.pre+n[0]+c)}let r;if(m&&n[0]!==void 0&&n[1]!==void 0){let c=fo(n[0]),x=fo(n[1]),I=Math.max(n[0].length,n[1].length),s=n.length===3&&n[2]!==void 0?Math.abs(fo(n[2])):1,k=TQ;if(x<c)s*=-1,k=EQ;let f=n.some(ZQ);r=[];for(let h=c;k(h,x);h+=s){let B;if(d){if(B=String.fromCharCode(h),B==="\\")B=""}else if(B=String(h),f){let Q=I-B.length;if(Q>0){let V=Array(Q+1).join("0");if(h<0)B="-"+V+B.slice(1);else B=V+B}}r.push(B)}}else{r=[];for(let c=0;c<n.length;c++)r.push.apply(r,w2(n[c],!1))}for(let c=0;c<r.length;c++)for(let x=0;x<i.length;x++){let I=l+r[c]+i[x];if(!e||m||I)u.push(I)}}return u}var s2=(t)=>{if(typeof t!=="string")throw TypeError("invalid pattern");if(t.length>65536)throw TypeError("pattern is too long")};var RQ={"[:alnum:]":["\\p{L}\\p{Nl}\\p{Nd}",!0],"[:alpha:]":["\\p{L}\\p{Nl}",!0],"[:ascii:]":["\\x00-\\x7f",!1],"[:blank:]":["\\p{Zs}\\t",!0],"[:cntrl:]":["\\p{Cc}",!0],"[:digit:]":["\\p{Nd}",!0],"[:graph:]":["\\p{Z}\\p{C}",!0,!0],"[:lower:]":["\\p{Ll}",!0],"[:print:]":["\\p{C}",!0],"[:punct:]":["\\p{P}",!0],"[:space:]":["\\p{Z}\\t\\r\\n\\v\\f",!0],"[:upper:]":["\\p{Lu}",!0],"[:word:]":["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}",!0],"[:xdigit:]":["A-Fa-f0-9",!1]},k2=(t)=>t.replace(/[[\]\\-]/g,"\\$&"),SQ=(t)=>t.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),f4=(t)=>t.join(""),h4=(t,e)=>{let u=e;if(t.charAt(u)!=="[")throw Error("not in a brace expression");let a=[],l=[],i=u+1,o=!1,d=!1,m=!1,_=!1,n=u,r="";t:while(i<t.length){let s=t.charAt(i);if((s==="!"||s==="^")&&i===u+1){_=!0,i++;continue}if(s==="]"&&o&&!m){n=i+1;break}if(o=!0,s==="\\"){if(!m){m=!0,i++;continue}}if(s==="["&&!m){for(let[k,[g,f,h]]of Object.entries(RQ))if(t.startsWith(k,i)){if(r)return["$.",!1,t.length-u,!0];if(i+=k.length,h)l.push(g);else a.push(g);d=d||f;continue t}}if(m=!1,r){if(s>r)a.push(k2(r)+"-"+k2(s));else if(s===r)a.push(k2(s));r="",i++;continue}if(t.startsWith("-]",i+1)){a.push(k2(s+"-")),i+=2;continue}if(t.startsWith("-",i+1)){r=s,i+=2;continue}a.push(k2(s)),i++}if(n<i)return["",!1,0,!1];if(!a.length&&!l.length)return["$.",!1,t.length-u,!0];if(l.length===0&&a.length===1&&/^\\?.$/.test(a[0])&&!_){let s=a[0].length===2?a[0].slice(-1):a[0];return[SQ(s),!1,n-u,!1]}let c="["+(_?"^":"")+f4(a)+"]",x="["+(_?"":"^")+f4(l)+"]";return[a.length&&l.length?"("+c+"|"+x+")":a.length?c:x,d,n-u,!0]};var d0=(t,{windowsPathsNoEscape:e=!1,magicalBraces:u=!0}={})=>{if(u)return e?t.replace(/\[([^\/\\])\]/g,"$1"):t.replace(/((?!\\).|^)\[([^\/\\])\]/g,"$1$2").replace(/\\([^\/])/g,"$1");return e?t.replace(/\[([^\/\\{}])\]/g,"$1"):t.replace(/((?!\\).|^)\[([^\/\\{}])\]/g,"$1$2").replace(/\\([^\/{}])/g,"$1")};var OQ=new Set(["!","?","+","*","@"]),g4=(t)=>OQ.has(t),PQ="(?!(?:^|/)\\.\\.?(?:$|/))",Aa="(?!\\.)",CQ=new Set(["[","."]),yQ=new Set(["..","."]),tv=new Set("().*{}+?[]^$\\!"),ev=(t)=>t.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),go="[^/]",B4=go+"*?",Q4=go+"+?";class Ht{type;#u;#a;#i=!1;#t=[];#e;#o;#p;#d=!1;#l;#m;#_=!1;constructor(t,e,u={}){if(this.type=t,t)this.#a=!0;if(this.#e=e,this.#u=this.#e?this.#e.#u:this,this.#l=this.#u===this?u:this.#u.#l,this.#p=this.#u===this?[]:this.#u.#p,t==="!"&&!this.#u.#d)this.#p.push(this);this.#o=this.#e?this.#e.#t.length:0}get hasMagic(){if(this.#a!==void 0)return this.#a;for(let t of this.#t){if(typeof t==="string")continue;if(t.type||t.hasMagic)return this.#a=!0}return this.#a}toString(){if(this.#m!==void 0)return this.#m;if(!this.type)return this.#m=this.#t.map((t)=>String(t)).join("");else return this.#m=this.type+"("+this.#t.map((t)=>String(t)).join("|")+")"}#c(){if(this!==this.#u)throw Error("should only call on root");if(this.#d)return this;this.toString(),this.#d=!0;let t;while(t=this.#p.pop()){if(t.type!=="!")continue;let e=t,u=e.#e;while(u){for(let a=e.#o+1;!u.type&&a<u.#t.length;a++)for(let l of t.#t){if(typeof l==="string")throw Error("string part in extglob AST??");l.copyIn(u.#t[a])}e=u,u=e.#e}}return this}push(...t){for(let e of t){if(e==="")continue;if(typeof e!=="string"&&!(e instanceof Ht&&e.#e===this))throw Error("invalid part: "+e);this.#t.push(e)}}toJSON(){let t=this.type===null?this.#t.slice().map((e)=>typeof e==="string"?e:e.toJSON()):[this.type,...this.#t.map((e)=>e.toJSON())];if(this.isStart()&&!this.type)t.unshift([]);if(this.isEnd()&&(this===this.#u||this.#u.#d&&this.#e?.type==="!"))t.push({});return t}isStart(){if(this.#u===this)return!0;if(!this.#e?.isStart())return!1;if(this.#o===0)return!0;let t=this.#e;for(let e=0;e<this.#o;e++){let u=t.#t[e];if(!(u instanceof Ht&&u.type==="!"))return!1}return!0}isEnd(){if(this.#u===this)return!0;if(this.#e?.type==="!")return!0;if(!this.#e?.isEnd())return!1;if(!this.type)return this.#e?.isEnd();let t=this.#e?this.#e.#t.length:0;return this.#o===t-1}copyIn(t){if(typeof t==="string")this.push(t);else this.push(t.clone(this))}clone(t){let e=new Ht(this.type,t);for(let u of this.#t)e.copyIn(u);return e}static#n(t,e,u,a){let l=!1,i=!1,o=-1,d=!1;if(e.type===null){let c=u,x="";while(c<t.length){let I=t.charAt(c++);if(l||I==="\\"){l=!l,x+=I;continue}if(i){if(c===o+1){if(I==="^"||I==="!")d=!0}else if(I==="]"&&!(c===o+2&&d))i=!1;x+=I;continue}else if(I==="["){i=!0,o=c,d=!1,x+=I;continue}if(!a.noext&&g4(I)&&t.charAt(c)==="("){e.push(x),x="";let s=new Ht(I,e);c=Ht.#n(t,s,c,a),e.push(s);continue}x+=I}return e.push(x),c}let m=u+1,_=new Ht(null,e),n=[],r="";while(m<t.length){let c=t.charAt(m++);if(l||c==="\\"){l=!l,r+=c;continue}if(i){if(m===o+1){if(c==="^"||c==="!")d=!0}else if(c==="]"&&!(m===o+2&&d))i=!1;r+=c;continue}else if(c==="["){i=!0,o=m,d=!1,r+=c;continue}if(g4(c)&&t.charAt(m)==="("){_.push(r),r="";let x=new Ht(c,_);_.push(x),m=Ht.#n(t,x,m,a);continue}if(c==="|"){_.push(r),r="",n.push(_),_=new Ht(null,e);continue}if(c===")"){if(r===""&&e.#t.length===0)e.#_=!0;return _.push(r),r="",e.push(...n,_),m}r+=c}return e.type=null,e.#a=void 0,e.#t=[t.substring(u-1)],m}static fromGlob(t,e={}){let u=new Ht(null,void 0,e);return Ht.#n(t,u,0,e),u}toMMPattern(){if(this!==this.#u)return this.#u.toMMPattern();let t=this.toString(),[e,u,a,l]=this.toRegExpSource();if(!(a||this.#a||this.#l.nocase&&!this.#l.nocaseMagicOnly&&t.toUpperCase()!==t.toLowerCase()))return u;let o=(this.#l.nocase?"i":"")+(l?"u":"");return Object.assign(new RegExp(`^${e}$`,o),{_src:e,_glob:t})}get options(){return this.#l}toRegExpSource(t){let e=t??!!this.#l.dot;if(this.#u===this)this.#c();if(!this.type){let d=this.isStart()&&this.isEnd()&&!this.#t.some((c)=>typeof c!=="string"),m=this.#t.map((c)=>{let[x,I,s,k]=typeof c==="string"?Ht.#x(c,this.#a,d):c.toRegExpSource(t);return this.#a=this.#a||s,this.#i=this.#i||k,x}).join(""),_="";if(this.isStart()){if(typeof this.#t[0]==="string"){if(!(this.#t.length===1&&yQ.has(this.#t[0]))){let x=CQ,I=e&&x.has(m.charAt(0))||m.startsWith("\\.")&&x.has(m.charAt(2))||m.startsWith("\\.\\.")&&x.has(m.charAt(4)),s=!e&&!t&&x.has(m.charAt(0));_=I?PQ:s?Aa:""}}}let n="";if(this.isEnd()&&this.#u.#d&&this.#e?.type==="!")n="(?:$|\\/)";return[_+m+n,d0(m),this.#a=!!this.#a,this.#i]}let u=this.type==="*"||this.type==="+",a=this.type==="!"?"(?:(?!(?:":"(?:",l=this.#r(e);if(this.isStart()&&this.isEnd()&&!l&&this.type!=="!"){let d=this.toString();return this.#t=[d],this.type=null,this.#a=void 0,[d,d0(this.toString()),!1,!1]}let i=!u||t||e||!Aa?"":this.#r(!0);if(i===l)i="";if(i)l=`(?:${l})(?:${i})*?`;let o="";if(this.type==="!"&&this.#_)o=(this.isStart()&&!e?Aa:"")+Q4;else{let d=this.type==="!"?"))"+(this.isStart()&&!e&&!t?Aa:"")+B4+")":this.type==="@"?")":this.type==="?"?")?":this.type==="+"&&i?")":this.type==="*"&&i?")?":`)${this.type}`;o=a+l+d}return[o,d0(l),this.#a=!!this.#a,this.#i]}#r(t){return this.#t.map((e)=>{if(typeof e==="string")throw Error("string type in extglob ast??");let[u,a,l,i]=e.toRegExpSource(t);return this.#i=this.#i||i,u}).filter((e)=>!(this.isStart()&&this.isEnd())||!!e).join("|")}static#x(t,e,u=!1){let a=!1,l="",i=!1;for(let o=0;o<t.length;o++){let d=t.charAt(o);if(a){a=!1,l+=(tv.has(d)?"\\":"")+d;continue}if(d==="\\"){if(o===t.length-1)l+="\\\\";else a=!0;continue}if(d==="["){let[m,_,n,r]=h4(t,o);if(n){l+=m,i=i||_,o+=n-1,e=e||r;continue}}if(d==="*"){l+=u&&t==="*"?Q4:B4,e=!0;continue}if(d==="?"){l+=go,e=!0;continue}l+=ev(d)}return[l,d0(t),!!e,i]}}var Bo=(t,{windowsPathsNoEscape:e=!1,magicalBraces:u=!1}={})=>{if(u)return e?t.replace(/[?*()[\]{}]/g,"[$&]"):t.replace(/[?*()[\]\\{}]/g,"\\$&");return e?t.replace(/[?*()[\]]/g,"[$&]"):t.replace(/[?*()[\]\\]/g,"\\$&")};var zt=(t,e,u={})=>{if(s2(e),!u.nocomment&&e.charAt(0)==="#")return!1;return new f2(e,u).match(t)},uv=/^\*+([^+@!?\*\[\(]*)$/,av=(t)=>(e)=>!e.startsWith(".")&&e.endsWith(t),lv=(t)=>(e)=>e.endsWith(t),iv=(t)=>{return t=t.toLowerCase(),(e)=>!e.startsWith(".")&&e.toLowerCase().endsWith(t)},ov=(t)=>{return t=t.toLowerCase(),(e)=>e.toLowerCase().endsWith(t)},dv=/^\*+\.\*+$/,pv=(t)=>!t.startsWith(".")&&t.includes("."),mv=(t)=>t!=="."&&t!==".."&&t.includes("."),nv=/^\.\*+$/,_v=(t)=>t!=="."&&t!==".."&&t.startsWith("."),rv=/^\*+$/,cv=(t)=>t.length!==0&&!t.startsWith("."),xv=(t)=>t.length!==0&&t!=="."&&t!=="..",Iv=/^\?+([^+@!?\*\[\(]*)?$/,wv=([t,e=""])=>{let u=G4([t]);if(!e)return u;return e=e.toLowerCase(),(a)=>u(a)&&a.toLowerCase().endsWith(e)},sv=([t,e=""])=>{let u=$4([t]);if(!e)return u;return e=e.toLowerCase(),(a)=>u(a)&&a.toLowerCase().endsWith(e)},kv=([t,e=""])=>{let u=$4([t]);return!e?u:(a)=>u(a)&&a.endsWith(e)},fv=([t,e=""])=>{let u=G4([t]);return!e?u:(a)=>u(a)&&a.endsWith(e)},G4=([t])=>{let e=t.length;return(u)=>u.length===e&&!u.startsWith(".")},$4=([t])=>{let e=t.length;return(u)=>u.length===e&&u!=="."&&u!==".."},X4=typeof process==="object"&&process?typeof process.env==="object"&&process.env&&process.env.__MINIMATCH_TESTING_PLATFORM__||process.platform:"posix",v4={win32:{sep:"\\"},posix:{sep:"/"}},hv=X4==="win32"?v4.win32.sep:v4.posix.sep;zt.sep=hv;var oe=Symbol("globstar **");zt.GLOBSTAR=oe;var gv="[^/]",Bv=gv+"*?",Qv="(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?",vv="(?:(?!(?:\\/|^)\\.).)*?",qv=(t,e={})=>(u)=>zt(u,t,e);zt.filter=qv;var ie=(t,e={})=>Object.assign({},t,e),Gv=(t)=>{if(!t||typeof t!=="object"||!Object.keys(t).length)return zt;let e=zt;return Object.assign((a,l,i={})=>e(a,l,ie(t,i)),{Minimatch:class extends e.Minimatch{constructor(l,i={}){super(l,ie(t,i))}static defaults(l){return e.defaults(ie(t,l)).Minimatch}},AST:class extends e.AST{constructor(l,i,o={}){super(l,i,ie(t,o))}static fromGlob(l,i={}){return e.AST.fromGlob(l,ie(t,i))}},unescape:(a,l={})=>e.unescape(a,ie(t,l)),escape:(a,l={})=>e.escape(a,ie(t,l)),filter:(a,l={})=>e.filter(a,ie(t,l)),defaults:(a)=>e.defaults(ie(t,a)),makeRe:(a,l={})=>e.makeRe(a,ie(t,l)),braceExpand:(a,l={})=>e.braceExpand(a,ie(t,l)),match:(a,l,i={})=>e.match(a,l,ie(t,i)),sep:e.sep,GLOBSTAR:oe})};zt.defaults=Gv;var J4=(t,e={})=>{if(s2(t),e.nobrace||!/\{(?:(?!\{).)*\}/.test(t))return[t];return k4(t)};zt.braceExpand=J4;var $v=(t,e={})=>new f2(t,e).makeRe();zt.makeRe=$v;var Xv=(t,e,u={})=>{let a=new f2(e,u);if(t=t.filter((l)=>a.match(l)),a.options.nonull&&!t.length)t.push(e);return t};zt.match=Xv;var q4=/[?*]|[+@!]\(.*?\)|\[|\]/,Jv=(t)=>t.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&");class f2{options;set;pattern;windowsPathsNoEscape;nonegate;negate;comment;empty;preserveMultipleSlashes;partial;globSet;globParts;nocase;isWindows;platform;windowsNoMagicRoot;regexp;constructor(t,e={}){if(s2(t),e=e||{},this.options=e,this.pattern=t,this.platform=e.platform||X4,this.isWindows=this.platform==="win32",this.windowsPathsNoEscape=!!e.windowsPathsNoEscape||e.allowWindowsEscape===!1,this.windowsPathsNoEscape)this.pattern=this.pattern.replace(/\\/g,"/");this.preserveMultipleSlashes=!!e.preserveMultipleSlashes,this.regexp=null,this.negate=!1,this.nonegate=!!e.nonegate,this.comment=!1,this.empty=!1,this.partial=!!e.partial,this.nocase=!!this.options.nocase,this.windowsNoMagicRoot=e.windowsNoMagicRoot!==void 0?e.windowsNoMagicRoot:!!(this.isWindows&&this.nocase),this.globSet=[],this.globParts=[],this.set=[],this.make()}hasMagic(){if(this.options.magicalBraces&&this.set.length>1)return!0;for(let t of this.set)for(let e of t)if(typeof e!=="string")return!0;return!1}debug(...t){}make(){let t=this.pattern,e=this.options;if(!e.nocomment&&t.charAt(0)==="#"){this.comment=!0;return}if(!t){this.empty=!0;return}if(this.parseNegate(),this.globSet=[...new Set(this.braceExpand())],e.debug)this.debug=(...l)=>console.error(...l);this.debug(this.pattern,this.globSet);let u=this.globSet.map((l)=>this.slashSplit(l));this.globParts=this.preprocess(u),this.debug(this.pattern,this.globParts);let a=this.globParts.map((l,i,o)=>{if(this.isWindows&&this.windowsNoMagicRoot){let d=l[0]===""&&l[1]===""&&(l[2]==="?"||!q4.test(l[2]))&&!q4.test(l[3]),m=/^[a-z]:/i.test(l[0]);if(d)return[...l.slice(0,4),...l.slice(4).map((_)=>this.parse(_))];else if(m)return[l[0],...l.slice(1).map((_)=>this.parse(_))]}return l.map((d)=>this.parse(d))});if(this.debug(this.pattern,a),this.set=a.filter((l)=>l.indexOf(!1)===-1),this.isWindows)for(let l=0;l<this.set.length;l++){let i=this.set[l];if(i[0]===""&&i[1]===""&&this.globParts[l][2]==="?"&&typeof i[3]==="string"&&/^[a-z]:$/i.test(i[3]))i[2]="?"}this.debug(this.pattern,this.set)}preprocess(t){if(this.options.noglobstar){for(let u=0;u<t.length;u++)for(let a=0;a<t[u].length;a++)if(t[u][a]==="**")t[u][a]="*"}let{optimizationLevel:e=1}=this.options;if(e>=2)t=this.firstPhasePreProcess(t),t=this.secondPhasePreProcess(t);else if(e>=1)t=this.levelOneOptimize(t);else t=this.adjascentGlobstarOptimize(t);return t}adjascentGlobstarOptimize(t){return t.map((e)=>{let u=-1;while((u=e.indexOf("**",u+1))!==-1){let a=u;while(e[a+1]==="**")a++;if(a!==u)e.splice(u,a-u)}return e})}levelOneOptimize(t){return t.map((e)=>{return e=e.reduce((u,a)=>{let l=u[u.length-1];if(a==="**"&&l==="**")return u;if(a===".."){if(l&&l!==".."&&l!=="."&&l!=="**")return u.pop(),u}return u.push(a),u},[]),e.length===0?[""]:e})}levelTwoFileOptimize(t){if(!Array.isArray(t))t=this.slashSplit(t);let e=!1;do{if(e=!1,!this.preserveMultipleSlashes){for(let a=1;a<t.length-1;a++){let l=t[a];if(a===1&&l===""&&t[0]==="")continue;if(l==="."||l==="")e=!0,t.splice(a,1),a--}if(t[0]==="."&&t.length===2&&(t[1]==="."||t[1]===""))e=!0,t.pop()}let u=0;while((u=t.indexOf("..",u+1))!==-1){let a=t[u-1];if(a&&a!=="."&&a!==".."&&a!=="**")e=!0,t.splice(u-1,2),u-=2}}while(e);return t.length===0?[""]:t}firstPhasePreProcess(t){let e=!1;do{e=!1;for(let u of t){let a=-1;while((a=u.indexOf("**",a+1))!==-1){let i=a;while(u[i+1]==="**")i++;if(i>a)u.splice(a+1,i-a);let o=u[a+1],d=u[a+2],m=u[a+3];if(o!=="..")continue;if(!d||d==="."||d===".."||!m||m==="."||m==="..")continue;e=!0,u.splice(a,1);let _=u.slice(0);_[a]="**",t.push(_),a--}if(!this.preserveMultipleSlashes){for(let i=1;i<u.length-1;i++){let o=u[i];if(i===1&&o===""&&u[0]==="")continue;if(o==="."||o==="")e=!0,u.splice(i,1),i--}if(u[0]==="."&&u.length===2&&(u[1]==="."||u[1]===""))e=!0,u.pop()}let l=0;while((l=u.indexOf("..",l+1))!==-1){let i=u[l-1];if(i&&i!=="."&&i!==".."&&i!=="**"){e=!0;let d=l===1&&u[l+1]==="**"?["."]:[];if(u.splice(l-1,2,...d),u.length===0)u.push("");l-=2}}}}while(e);return t}secondPhasePreProcess(t){for(let e=0;e<t.length-1;e++)for(let u=e+1;u<t.length;u++){let a=this.partsMatch(t[e],t[u],!this.preserveMultipleSlashes);if(a){t[e]=[],t[u]=a;break}}return t.filter((e)=>e.length)}partsMatch(t,e,u=!1){let a=0,l=0,i=[],o="";while(a<t.length&&l<e.length)if(t[a]===e[l])i.push(o==="b"?e[l]:t[a]),a++,l++;else if(u&&t[a]==="**"&&e[l]===t[a+1])i.push(t[a]),a++;else if(u&&e[l]==="**"&&t[a]===e[l+1])i.push(e[l]),l++;else if(t[a]==="*"&&e[l]&&(this.options.dot||!e[l].startsWith("."))&&e[l]!=="**"){if(o==="b")return!1;o="a",i.push(t[a]),a++,l++}else if(e[l]==="*"&&t[a]&&(this.options.dot||!t[a].startsWith("."))&&t[a]!=="**"){if(o==="a")return!1;o="b",i.push(e[l]),a++,l++}else return!1;return t.length===e.length&&i}parseNegate(){if(this.nonegate)return;let t=this.pattern,e=!1,u=0;for(let a=0;a<t.length&&t.charAt(a)==="!";a++)e=!e,u++;if(u)this.pattern=t.slice(u);this.negate=e}matchOne(t,e,u=!1){let a=this.options;if(this.isWindows){let I=typeof t[0]==="string"&&/^[a-z]:$/i.test(t[0]),s=!I&&t[0]===""&&t[1]===""&&t[2]==="?"&&/^[a-z]:$/i.test(t[3]),k=typeof e[0]==="string"&&/^[a-z]:$/i.test(e[0]),g=!k&&e[0]===""&&e[1]===""&&e[2]==="?"&&typeof e[3]==="string"&&/^[a-z]:$/i.test(e[3]),f=s?3:I?0:void 0,h=g?3:k?0:void 0;if(typeof f==="number"&&typeof h==="number"){let[B,Q]=[t[f],e[h]];if(B.toLowerCase()===Q.toLowerCase()){if(e[h]=B,h>f)e=e.slice(h);else if(f>h)t=t.slice(f)}}}let{optimizationLevel:l=1}=this.options;if(l>=2)t=this.levelTwoFileOptimize(t);this.debug("matchOne",this,{file:t,pattern:e}),this.debug("matchOne",t.length,e.length);for(var i=0,o=0,d=t.length,m=e.length;i<d&&o<m;i++,o++){this.debug("matchOne loop");var _=e[o],n=t[i];if(this.debug(e,_,n),_===!1)return!1;if(_===oe){this.debug("GLOBSTAR",[e,_,n]);var r=i,c=o+1;if(c===m){this.debug("** at the end");for(;i<d;i++)if(t[i]==="."||t[i]===".."||!a.dot&&t[i].charAt(0)===".")return!1;return!0}while(r<d){var x=t[r];if(this.debug(`
|
|
189
|
+
globstar while`,t,r,e,c,x),this.matchOne(t.slice(r),e.slice(c),u))return this.debug("globstar found match!",r,d,x),!0;else{if(x==="."||x===".."||!a.dot&&x.charAt(0)==="."){this.debug("dot detected!",t,r,e,c);break}this.debug("globstar swallow a segment, and continue"),r++}}if(u){if(this.debug(`
|
|
190
|
+
>>> no match, partial?`,t,r,e,c),r===d)return!0}return!1}let I;if(typeof _==="string")I=n===_,this.debug("string match",_,n,I);else I=_.test(n),this.debug("pattern match",_,n,I);if(!I)return!1}if(i===d&&o===m)return!0;else if(i===d)return u;else if(o===m)return i===d-1&&t[i]==="";else throw Error("wtf?")}braceExpand(){return J4(this.pattern,this.options)}parse(t){s2(t);let e=this.options;if(t==="**")return oe;if(t==="")return"";let u,a=null;if(u=t.match(rv))a=e.dot?xv:cv;else if(u=t.match(uv))a=(e.nocase?e.dot?ov:iv:e.dot?lv:av)(u[1]);else if(u=t.match(Iv))a=(e.nocase?e.dot?sv:wv:e.dot?kv:fv)(u);else if(u=t.match(dv))a=e.dot?mv:pv;else if(u=t.match(nv))a=_v;let l=Ht.fromGlob(t,this.options).toMMPattern();if(a&&typeof l==="object")Reflect.defineProperty(l,"test",{value:a});return l}makeRe(){if(this.regexp||this.regexp===!1)return this.regexp;let t=this.set;if(!t.length)return this.regexp=!1,this.regexp;let e=this.options,u=e.noglobstar?Bv:e.dot?Qv:vv,a=new Set(e.nocase?["i"]:[]),l=t.map((d)=>{let m=d.map((n)=>{if(n instanceof RegExp)for(let r of n.flags.split(""))a.add(r);return typeof n==="string"?Jv(n):n===oe?oe:n._src});m.forEach((n,r)=>{let c=m[r+1],x=m[r-1];if(n!==oe||x===oe)return;if(x===void 0)if(c!==void 0&&c!==oe)m[r+1]="(?:\\/|"+u+"\\/)?"+c;else m[r]=u;else if(c===void 0)m[r-1]=x+"(?:\\/|\\/"+u+")?";else if(c!==oe)m[r-1]=x+"(?:\\/|\\/"+u+"\\/)"+c,m[r+1]=oe});let _=m.filter((n)=>n!==oe);if(this.partial&&_.length>=1){let n=[];for(let r=1;r<=_.length;r++)n.push(_.slice(0,r).join("/"));return"(?:"+n.join("|")+")"}return _.join("/")}).join("|"),[i,o]=t.length>1?["(?:",")"]:["",""];if(l="^"+i+l+o+"$",this.partial)l="^(?:\\/|"+i+l.slice(1,-1)+o+")$";if(this.negate)l="^(?!"+l+").+$";try{this.regexp=new RegExp(l,[...a].join(""))}catch(d){this.regexp=!1}return this.regexp}slashSplit(t){if(this.preserveMultipleSlashes)return t.split("/");else if(this.isWindows&&/^\/\/[^\/]+/.test(t))return["",...t.split(/\/+/)];else return t.split(/\/+/)}match(t,e=this.partial){if(this.debug("match",t,this.pattern),this.comment)return!1;if(this.empty)return t==="";if(t==="/"&&e)return!0;let u=this.options;if(this.isWindows)t=t.split("\\").join("/");let a=this.slashSplit(t);this.debug(this.pattern,"split",a);let l=this.set;this.debug(this.pattern,"set",l);let i=a[a.length-1];if(!i)for(let o=a.length-2;!i&&o>=0;o--)i=a[o];for(let o=0;o<l.length;o++){let d=l[o],m=a;if(u.matchBase&&d.length===1)m=[i];if(this.matchOne(m,d,e)){if(u.flipNegate)return!0;return!this.negate}}if(u.flipNegate)return!1;return this.negate}static defaults(t){return zt.defaults(t).Minimatch}}zt.AST=Ht;zt.Minimatch=f2;zt.escape=Bo;zt.unescape=d0;wd();t2();import sd from"node:fs";import U0 from"node:path";class xl{executionPath;checkpointPath;git=null;logger;trackedPatterns=new Set;constructor(t,e){this.executionPath=t,this.checkpointPath=U0.join(t,".hankweave","checkpoints"),this.logger=e}async initialize(){await sd.promises.mkdir(this.checkpointPath,{recursive:!0});let t=U0.join(this.checkpointPath,".git");if(sd.existsSync(t)){this.git=cl(this.executionPath,{maxConcurrentProcesses:1,config:[`core.worktree=${this.executionPath}`,`core.gitdir=${U0.join(this.checkpointPath,".git")}`]}).env({GIT_DIR:U0.join(this.checkpointPath,".git"),GIT_WORK_TREE:this.executionPath,HOME:this.checkpointPath,XDG_CONFIG_HOME:this.checkpointPath});try{let o=await this.git.revparse(["HEAD"]);return this.logger.log(`Using existing shadow git repository with HEAD: ${o}`),o}catch(o){this.logger.log(`Could not get HEAD from existing repository: ${o}`,"error"),this.logger.log("Using existing shadow git repository");return}}let u=U0.join(this.checkpointPath,".gitconfig"),a=`[user]
|
|
191
|
+
name = Hankweave Runtime
|
|
192
|
+
email = froggie@southbridge.ai
|
|
193
|
+
[commit]
|
|
194
|
+
gpgsign = false
|
|
195
|
+
`;await sd.promises.writeFile(u,a),this.git=cl(this.executionPath,{maxConcurrentProcesses:1,config:[`core.worktree=${this.executionPath}`,`core.gitdir=${U0.join(this.checkpointPath,".git")}`]}).env({GIT_DIR:U0.join(this.checkpointPath,".git"),GIT_WORK_TREE:this.executionPath,HOME:this.checkpointPath,XDG_CONFIG_HOME:this.checkpointPath}),await this.git.init(!1,{"--initial-branch":"main"}),await this.git.addConfig("user.name","Hankweave Runtime"),await this.git.addConfig("user.email","froggie@southbridge.ai"),await this.git.addConfig("commit.gpgsign","false");let i=(await this.git.commit("Initial checkpoint setup",{"--allow-empty":null})).commit||void 0;return this.logger.log(`Shadow git repository initialized with initial commit: ${i}`),i}isInitialized(){return this.git!==null}async getCurrentBranch(){if(!this.git)return;return(await this.git.branch()).current}async addPatterns(t){for(let e of t)this.trackedPatterns.add(e)}clearPatterns(){this.trackedPatterns.clear(),this.logger.log("Cleared all tracked patterns")}async getCheckpointedFiles(){if(this.trackedPatterns.size===0)return[];let t=Array.from(this.trackedPatterns);return await G0.resolveFiles(this.executionPath,t)}async commit(t,e){if(!this.git)return null;this.logger.log(`[CHECKPOINT-COMMIT] Starting commit with message: ${t.split(`
|
|
196
|
+
`)[0]}`),this.logger.log(`[CHECKPOINT-COMMIT] Tracked patterns: ${Array.from(this.trackedPatterns).join(", ")}`);let u;if(e?.branch)if(u=await this.getCurrentBranch(),this.logger.log(`[CHECKPOINT-COMMIT] Current branch: ${u}, switching to: ${e.branch}`),!(await this.git.branch()).all.includes(e.branch))this.logger.log(`[CHECKPOINT-COMMIT] Creating new branch: ${e.branch}`),await this.git.checkoutLocalBranch(e.branch);else this.logger.log(`[CHECKPOINT-COMMIT] Switching to existing branch: ${e.branch}`),await this.git.checkout(e.branch);let a=null;try{let l=await this.getCheckpointedFiles();if(this.logger.log(`[CHECKPOINT-COMMIT] Resolved ${l.length} files to track`),l.length>0)this.logger.log(`[CHECKPOINT-COMMIT] First few files: ${l.slice(0,5).join(", ")}${l.length>5?"...":""}`);let i=await this.git.status();this.logger.log(`[CHECKPOINT-COMMIT] Status before reset - modified: ${i.modified.length}, not_added: ${i.not_added.length}`),this.logger.log("[CHECKPOINT-COMMIT] Resetting index (mixed mode - working directory unchanged)"),await this.git.reset(["--mixed","HEAD"]);let o=await this.git.status();if(this.logger.log(`[CHECKPOINT-COMMIT] Status after reset - modified: ${o.modified.length}, not_added: ${o.not_added.length}`),l.length>0)for(let _=0;_<l.length;_+=100){let n=l.slice(_,_+100);try{this.logger.log(`[CHECKPOINT-COMMIT] Adding batch ${Math.floor(_/100)+1}/${Math.ceil(l.length/100)} (${n.length} files)`),await this.git.raw(["add","-f",...n])}catch(r){this.logger.log(`[CHECKPOINT-COMMIT] Error adding files to checkpoint: ${r}`,"error")}}this.logger.log("[CHECKPOINT-COMMIT] Creating commit"),a=(await this.git.commit(t,{"--allow-empty":null})).commit||null,this.logger.log(`[CHECKPOINT-COMMIT] Commit complete: ${a}`)}finally{if(e?.branch&&u&&u!==e.branch)try{await this.git.checkout(u),this.logger.log(`[CHECKPOINT-COMMIT] Restored original branch: ${u}`)}catch(l){this.logger.log(`[CHECKPOINT-COMMIT] Failed to restore original branch (${u}): ${l}`,"error")}}return a}getPath(){return this.checkpointPath}async switchToBranch(t){if(!this.git)throw Error("Git repository not initialized");try{if((await this.git.branch()).all.includes(t))await this.git.checkout(t),this.logger.log(`Switched to existing branch: ${t}`);else this.logger.log(`Creating new branch: ${t}`),await this.git.checkoutLocalBranch(t),this.logger.log(`Created and switched to new branch: ${t}`)}catch(e){throw this.logger.log(`Failed to switch branch: ${e}`,"error"),e}}async createBranchFromSha(t,e){if(!this.git)throw Error("Git repository not initialized");let a=[...await this.getAllCheckpointShas()].find((l)=>l.startsWith(e));if(!a)throw Error(`Checkpoint ${e} not found in repository`);try{let l=await this.git.branch();if(l.all.includes(t)){if(l.current===t)await this.git.checkout(a);await this.git.branch(["-D",t])}await this.git.checkout(["-b",t,a]),this.logger.log(`Created branch ${t} from ${e.substring(0,7)}`)}catch(l){throw this.logger.log(`Failed to create branch from SHA: ${l}`,"error"),l}}async getAllCheckpointShas(){if(!this.git)throw Error("Git repository not initialized");try{let t=await this.git.log(["--all"]);return new Set(t.all.map((e)=>e.hash))}catch(t){return this.logger.log(`Failed to get checkpoint SHAs: ${t}`,"error"),new Set}}async commitExists(t){if(!this.git)return!1;try{return(await this.git.raw(["cat-file","-t",t])).trim()==="commit"}catch{return!1}}async getAllCheckpoints(){if(!this.git)throw Error("Git repository not initialized");try{let t=await this.git.branch(),e=new Set,u=[];for(let a of t.all)try{let l=await this.git.log([a]);for(let i of l.all){if(e.has(i.hash))continue;e.add(i.hash),u.push({sha:i.hash,message:i.message,timestamp:i.date,branch:a})}}catch(l){this.logger.log(`Could not get log for branch ${a}: ${l}`,"debug")}return u.sort((a,l)=>{let i=new Date(a.timestamp).getTime();return new Date(l.timestamp).getTime()-i}),u}catch(t){return this.logger.log(`Failed to get checkpoints: ${t}`,"error"),[]}}async resetToCheckpoint(t){if(!this.git)throw Error("Git repository not initialized");try{let u=[...await this.getAllCheckpointShas()].find((a)=>a.startsWith(t));if(!u)throw Error(`Checkpoint ${t} not found in repository`);await this.git.checkout(["--force",u]),this.logger.log(`Checked out checkpoint ${t.substring(0,7)} (detached HEAD)`)}catch(e){throw this.logger.log(`Checkout to checkpoint failed: ${e}`,"error"),Error(`Failed to reset to checkpoint: ${e instanceof Error?e.message:String(e)}`)}}}x2();Nt();var Qx=p.string().transform((t)=>at(t)),vx=p.discriminatedUnion("type",[p.object({id:p.string(),type:p.literal("codon.start"),data:p.object({codonId:Qx,skipPreCommands:p.boolean().optional()})}),p.object({id:p.string(),type:p.literal("codon.next")}),p.object({id:p.string(),type:p.literal("codon.skip")}),p.object({id:p.string(),type:p.literal("codon.redo")}),p.object({id:p.string(),type:p.literal("server.shutdown"),data:p.object({reason:p.string().optional()}).optional()}),p.object({id:p.string(),type:p.literal("checkpoint.list"),data:p.object({runId:p.string().optional()}).optional()}),p.object({id:p.string(),type:p.literal("codon.forceStop"),data:p.object({reason:p.string().optional()}).optional()}),p.object({id:p.string(),type:p.literal("rollback.toCheckpoint"),data:p.object({checkpointSha:p.string(),autoRestart:p.boolean().optional().default(!1)})}),p.object({id:p.string(),type:p.literal("rollback.toCodon"),data:p.object({codonId:Qx,checkpointType:p.enum(["start","end","rig-setup","completed","error","skipped"]),autoRestart:p.boolean().optional().default(!1)})}),p.object({id:p.string(),type:p.literal("rollback.toLastSuccess"),data:p.object({autoRestart:p.boolean().optional().default(!1)}).optional()}),p.object({id:p.string(),type:p.literal("ping")}),p.object({id:p.string(),type:p.literal("ping.broadcast")}),p.object({id:p.string(),type:p.literal("history.sync")})]);K0();Ya();import{createInterface as YX}from"node:readline";import{Readable as VX}from"node:stream";class kd{events=[];maxEvents=100;async initialize(){}async append(t){await this.appendMany([t])}async appendMany(t){let e=0;for(let u of t)this.events.push(u),e+=1;if(e===0)return;if(this.events.length>this.maxEvents){let u=Math.max(1,Math.floor(this.maxEvents*0.1)),a=this.events.length-this.maxEvents,l=Math.max(u,a);this.events=this.events.slice(l)}}async getRecentEvents(t){let e=this.events.length,u=Math.max(0,e-t);return{events:this.events.slice(u),totalEvents:e}}async getTotalEvents(){return this.events.length}async createReadStream(){let t=this.events.map((e)=>`${JSON.stringify(e)}
|
|
197
|
+
`);return VX.from(t)}}class fd{storage;constructor(t){this.storage=t||new kd}get transport(){return this.storage}async initialize(){await this.storage.initialize()}async append(t){if(!d2(t)&&!p2(t)&&!Wa(t))throw Error(`Cannot journal non-journaled event: ${t.type}. Only server state, agentic backbone, or sentinel events should be persisted to the event journal.`);await this.storage.append(t)}async*getAllEvents(){let t=YX({input:await this.storage.createReadStream(),crlfDelay:Number.POSITIVE_INFINITY});try{for await(let e of t){let u=e.trim();if(u.length===0)continue;yield JSON.parse(u)}}finally{t.close()}}async getMostRecentEvents(t){let{events:e,totalEvents:u}=await this.storage.getRecentEvents(t),a=[...e].reverse();return{events:a,totalEvents:u,hasMore:u>a.length}}async getTotalEvents(){return this.storage.getTotalEvents()}async streamAllEvents(){return this.storage.createReadStream()}}var qx={preparing:["starting","failed","skipped"],starting:["initializing","failed","skipped"],initializing:["running","failed","skipped"],running:["completing-sentinels","completed","failed","skipped"],"completing-sentinels":["completed","failed","skipped"],completed:[],failed:[],skipped:[]};function Ft(t){return t==="completed"||t==="failed"||t==="skipped"}function Il(t){switch(t.status){case"completed":return t.finalCost;case"failed":return t.partialCost;case"skipped":return 0;case"running":return t.currentCost;case"completing-sentinels":return t.currentCost;default:return 0}}class hd{codons;totalRuns;hasRunningCodon;nextCodonId;constructor(t=[],e=0,u=!1,a=null){this.codons=t;this.totalRuns=e;this.hasRunningCodon=u;this.nextCodonId=a}get failed(){if(this.codons.length===0)return!1;let t=this.codons[0];if(t.codon.status==="failed")return!0;if((t.runStatus==="failed"||t.runStatus==="crashed")&&!Ft(t.codon.status))return!0;return!1}}async function F0(t,e,u,a){let l=t.executionPlan,i=u?t.runs.find((I)=>I.runId===u):t.runs[0];if(!i)return a?.log("No runs found for execution thread analysis","debug"),new hd([],0,!1,null);let o=[],d=new Set,m=i,_=i.codons.length-1,n=0,r=0,c=!1;while(m&&!d.has(m.runId)){d.add(m.runId),a?.log(`Processing run ${m.runId} (status: ${m.status}, codons: ${m.codons.length}, including up to index ${_})`,"debug");for(let I=_;I>=0;I--){let s=m.codons[I];if(!Ft(s.status))c=!0;let k=HX(s,e),g="previousSessionId"in s&&s.previousSessionId?s.previousSessionId:null,f={codon:s,runId:m.runId,runStatus:m.status,runStartTime:m.startTime,runEndTime:m.endTime||null,gitBranch:m.gitBranch,globalIndex:r,runIndex:n,codonIndexInRun:I,validatedCheckpoints:k,continuationSessionId:g};o.push(f),r++}if(m.startingConditions.type==="continuation"){let I=m.startingConditions.source,s=I.runId,k=I.afterCodon,g=I.checkpointSha,f=t.runs.find((h)=>h.runId===s);if(!f){a?.log(`Parent run ${s} not found, ending chain`,"info");break}if(!k)_=-1;else{let h=f.codons.findIndex((B)=>B.codonId===k);if(h===-1)a?.log(`Codon ${k} not found in parent run ${s}, including all codons`,"info"),_=f.codons.length-1;else{let B=f.codons[h];if("rigSetupCheckpoint"in B&&B.rigSetupCheckpoint===g)_=h-1,a?.log(`Rig setup continuation for ${k}, excluding it from parent`,"debug");else _=h,a?.log(`Normal continuation after ${k}, including codons up to index ${h}`,"debug")}}m=f,n++}else break}let x=null;if(i.status==="failed")x=null;else if(!c&&o.length>0){let I=o[0];if(i.startingConditions.type==="continuation"){let{afterCodon:s,checkpointSha:k}=i.startingConditions.source;if(s&&o.length===0){let g=t.runs.find((f)=>f.runId===i.startingConditions.source.runId);if(g){let f=g.codons.find((h)=>h.codonId===s);if(f&&"rigSetupCheckpoint"in f&&f.rigSetupCheckpoint===k)x=s}}}if(!x){let s=l.findIndex((k)=>k.codonId===I.codon.codonId);if(s>=0&&s<l.length-1)x=l[s+1].codonId}}else if(!c&&o.length===0)if(i.startingConditions.type==="continuation"){let{afterCodon:I,checkpointSha:s}=i.startingConditions.source;if(!I)x=l[0]?.codonId??null;else{let k=t.runs.find((g)=>g.runId===i.startingConditions.source.runId);if(k){let g=k.codons.find((f)=>f.codonId===I);if(g&&"rigSetupCheckpoint"in g&&g.rigSetupCheckpoint===s)x=I;else{let f=l.findIndex((h)=>h.codonId===I);if(f>=0&&f<l.length-1)x=l[f+1].codonId}}}}else x=l[0]?.codonId??null;return a?.log(`Built execution thread: ${o.length} codons across ${n+1} runs, next codon: ${x||"none"}`,"debug"),new hd(o,n+1,c,x)}function HX(t,e){let u=[],a=(l,i)=>{let o=e?.get(i);if(o)u.push({type:l,sha:i,message:o.message,timestamp:o.timestamp,branch:o.branch})};if("rigSetupCheckpoint"in t&&t.rigSetupCheckpoint)a("rig-setup",t.rigSetupCheckpoint);if(t.status==="completed"&&t.completionCheckpoint)a("completed",t.completionCheckpoint);if(t.status==="failed"&&"errorCheckpoint"in t&&t.errorCheckpoint)a("error",t.errorCheckpoint);if(t.status==="skipped"&&"skipCheckpoint"in t&&t.skipCheckpoint)a("skipped",t.skipCheckpoint);return u}function Gx(t,e,u){let a=u.executionPlan||[],l=a.find((d)=>d.codonId===e);if(!l||l.codon.continuationMode!=="continue-previous")return null;let i=a.findIndex((d)=>d.codonId===e);if(i<=0)return null;let o=a[i-1].codonId;for(let d of t.codons){if(d.codon.codonId!==o)continue;let m=d.codon;if(!("claudeSessionId"in m)||!m.claudeSessionId)continue;if(m.status==="completed")return m.claudeSessionId;if(m.status==="skipped"&&"assistantMessageCount"in m&&m.assistantMessageCount&&m.assistantMessageCount>0)return m.claudeSessionId}return null}t2();hu();eo();Yt();class $x{async handleRequest(t,e){return t}async handleResponse(t){return t}async processRequest(t){let{body:e,...u}=t,a=await this.handleRequest(u,e);return Object.assign({},a,{body:a.claudeRequestData?JSON.stringify(a.claudeRequestData):t.body})}async processResponse(t){return this.handleResponse(t)}}class Xx{baseUrl;logger;constructor(t,e){this.baseUrl=t;this.logger=e}async forward(t){let e=`${this.baseUrl}${t.url}`;this.logger.log(`[PROXY-HTTP-TRANSPORT] Forwarding ${t.method} request to ${e}`);try{let u={...t.headers},a=new URL(this.baseUrl);u.host=a.host,delete u["content-length"],delete u["Content-Length"];let l=await fetch(e,{method:t.method,headers:u,body:t.body});this.logger.log(`[PROXY-HTTP-TRANSPORT] Received response with status ${l.status}`);let i={};l.headers.forEach((m,_)=>{i[_]=m});let d=i["content-type"]?.includes("text/event-stream")||i["transfer-encoding"]==="chunked"?l.body||void 0:await l.text();if(l.status!==200)this.logger.log(`[PROXY-HTTP-TRANSPORT] error: ${d} }`,"error");return{status:l.status,headers:i,body:d}}catch(u){let a=u instanceof Error?{message:u.message,cause:u.cause,stack:u.stack?.split(`
|
|
198
|
+
`).slice(0,3).join(`
|
|
199
|
+
`)}:u;throw this.logger.log(`[PROXY-HTTP-TRANSPORT] Failed to fetch from ${e}: ${JSON.stringify(a,null,2)}`,"error"),u}}}class Jx extends $x{logger;constructor(t){super();this.logger=t}async handleRequest(t,e){if(this.logger.log(`[LOGGING-MIDDLEWARE] Received request ${t.method} ${t.url}`),e)if(t.claudeRequestData){let{model:u,max_tokens:a,stream:l}=t.claudeRequestData,i=t.claudeRequestData.messages?.length||0;this.logger.log(`[LOGGING-MIDDLEWARE] Claude request - model=${u}, messages=${i}, max_tokens=${a}, stream=${l}`)}else{let u=e.length>500?`${e.substring(0,500)}...[truncated]`:e;this.logger.log(`[LOGGING-MIDDLEWARE] Request body: ${u}`)}return this.logger.log("---"),t}async handleResponse(t){return this.logger.log(`[LOGGING-MIDDLEWARE] Response status: ${t.status}`),this.logger.log("---"),t}}class Kx{transport;logger;logMiddlewareCalls;middleware=[];constructor(t,e=[],u,a=!1){this.transport=t;this.logger=u;this.logMiddlewareCalls=a;this.middleware=e}logLLMProxyRequest=(t)=>{let e=t.claudeRequestData?JSON.stringify(t.claudeRequestData,null,2):t.body||"";this.logger.log(`[LLM-PROXY] ${t.method} ${t.url}
|
|
200
|
+
|
|
201
|
+
${e}`,"debug")};addMiddleware(t){this.middleware.push(t)}removeMiddleware(t){let e=this.middleware.indexOf(t);if(e===-1)return!1;return this.middleware.splice(e,1),!0}async processRequest(t,e){try{let u={};t.headers.forEach((d,m)=>{u[m]=d});let a=t.method!=="GET"&&t.method!=="HEAD"?await t.text():void 0,l;if(a)try{let{success:d,data:m}=P_.passthrough().safeParse(JSON.parse(a));if(!d)this.logger.log(`[LLM-PROXY] Unrecognizable Claude API request body: ${a}`,"debug");else l=m}catch(d){this.logger.log(`[LLM-PROXY] Failed to parse Claude API request body: ${a} - ${d}`,"debug")}let i={method:t.method,url:e,headers:u,body:a,claudeRequestData:l};for(let d of this.middleware)if(d.processRequest){let m=d.constructor.name;if(this.logMiddlewareCalls)this.logger.log(`[LLM-PROXY] Applying request middleware: ${m}`),this.logLLMProxyRequest(i);if(i=await d.processRequest(i),this.logMiddlewareCalls)this.logger.log(`[LLM-PROXY] ${m} middleware applied`),this.logLLMProxyRequest(i)}let o=await this.transport.forward(i);for(let d of this.middleware)if(d.processResponse){let m=d.constructor.name;if(this.logMiddlewareCalls)this.logger.log(`[LLM-PROXY] Applying response middleware: ${m}`);if(o=await d.processResponse(o),this.logMiddlewareCalls)this.logger.log(`[LLM-PROXY] After ${m} response middleware - status: ${o.status}`)}return new Response(o.body,{status:o.status,headers:o.headers})}catch(u){return this.logger.log(`[LLM-PROXY] Request processing error: ${u}`,"error"),new Response("Proxy Error",{status:500})}}}function zX({proxyToUrl:t,logger:e}){return new Kx(new Xx(t,e),[new Jx(e)],e,!1)}class gd{proxy;port;proxyToUrl;logger;idleTimeout;server;constructor(t,e,u,a,l=0){this.proxy=t;this.port=e;this.proxyToUrl=u;this.logger=a;this.idleTimeout=l}get proxyUrl(){return`http://localhost:${this.port}`}start(){if(this.proxy!=="passthrough")throw Error("Unsupported proxy type. Only 'passthrough' is supported.");let t=zX({proxyToUrl:this.proxyToUrl,logger:this.logger});this.server=Ba({port:this.port,idleTimeout:this.idleTimeout,async fetch(u){let a=new URL(u.url),l=a.pathname+a.search;if(l==="/health"||l==="/")return new Response("Hankweave Proxy OK",{status:200,headers:{"Content-Type":"text/plain"}});return t.processRequest(u,l)}});let e=`http://localhost:${this.port}`;return console.log(`ProxyRunner: LLM Proxy server started on port ${this.port}`),console.log(` Health check: ${e}/health`),e}stop(){if(this.server)this.server.stop(),console.log("ProxyRunner: Proxy server stopped")}}Ya();c2();import Wx from"node:fs";import W2 from"node:path";class Bd{logger;configCache=new Map;constructor(t){this.logger=t}loadConfigsForCodon(t,e,u){let a=[],l=[],i=new Set;for(let o of t)try{let d,m,_,n,r=o.settings?.failCodonIfNotLoaded??!1,c=o.settings?.outputPaths;if(typeof o.sentinelConfig==="string"){let x=W2.isAbsolute(o.sentinelConfig)?o.sentinelConfig:W2.resolve(u,o.sentinelConfig);if(this.configCache.has(x)){let I=this.configCache.get(x);if(!I)throw Error(`Cache inconsistency for ${x}`);d=I,this.logger?.log(`Using cached sentinel config: ${W2.basename(x)}`,"debug")}else{if(!Wx.existsSync(x))throw Error(`Config file not found: ${o.sentinelConfig}`);let I=Wx.readFileSync(x,"utf-8"),s=JSON.parse(I);d=r2.parse(s),this.configCache.set(x,d),this.logger?.log(`Loaded and cached sentinel config: ${W2.basename(x)}`,"debug")}m=W2.dirname(x),_="file",n=x}else d=r2.parse(o.sentinelConfig),m=u,_="inline";if(i.has(d.id))throw Error(`Duplicate sentinel ID '${d.id}' in codon ${e}`);i.add(d.id),a.push({config:d,failCodonIfNotLoaded:r,outputPaths:c,source:_,sourcePath:n,configDirectory:m}),this.logger?.log(`Loaded sentinel config '${d.id}' (${_})${r?" [REQUIRED]":""}`,"debug")}catch(d){let m=typeof o.sentinelConfig==="string"?o.sentinelConfig:`inline:${o.sentinelConfig.id||"unknown"}`,_=d instanceof Error?d.message:String(d),n=o.settings?.failCodonIfNotLoaded??!1;l.push({ref:m,error:_,fatal:n}),this.logger?.log(`Failed to load sentinel config ${m}: ${_}${n?" [FATAL]":""}`,n?"error":"info")}return{configs:a,errors:l}}clearCache(){this.configCache.clear(),this.logger?.log("Sentinel config cache cleared","debug")}}hu();Yt();import{promises as lJ}from"node:fs";import*as Ex from"node:path";import{generateObject as iJ,generateText as oJ}from"ai";Nt();Yt();import pe from"node:fs";import te from"node:path";uo();Yt();import{promises as Qd}from"node:fs";import*as Yx from"node:path";var Vx=(t)=>{return Math.ceil(t.length/4)};class vd{history=[];historyFilePath;trimmingStrategy;logger;isInitialized=!1;sentinelId;constructor(t,e,u,a,l){if(this.sentinelId=t,this.trimmingStrategy=u,this.logger=l,a){let i=`${t}-codon-${e}.json`;this.historyFilePath=Yx.join(a,i),this.logger?.log(`[HistoryManager:${this.sentinelId}] Persistence enabled at: ${this.historyFilePath}`,"debug")}else this.logger?.log(`[HistoryManager:${this.sentinelId}] Running in memory-only mode (no persistence)`,"info")}async ensureInitialized(){if(this.isInitialized)return;if(this.historyFilePath)await this.loadFromFile();this.isInitialized=!0}async addMessagePair(t,e,u,a){await this.ensureInitialized();let l=typeof t==="string"?t:JSON.stringify(t),i=typeof e==="string"?e:JSON.stringify(e);if(this.history.push({message:{role:"user",content:l},tokens:u},{message:{role:"assistant",content:i},tokens:a}),this.logger?.log(`[HistoryManager:${this.sentinelId}] Added message pair - user: ${l.length} chars${u?` (${u} tokens)`:""}, assistant: ${i.length} chars${a?` (${a} tokens)`:""}. Total messages: ${this.history.length}`,"debug"),this.historyFilePath)await this.saveToFile()}async getMessagesToSend(t,e=!1){if(await this.ensureInitialized(),!e)this.prune();let u=[{role:"system",content:t},...this.history.map((a)=>a.message)];return this.logger?.log(`[HistoryManager:${this.sentinelId}] Prepared ${u.length} messages for LLM (including system prompt)`,"debug"),u}prune(){if(this.trimmingStrategy.type==="maxTurns"){let t=this.trimmingStrategy.maxTurns,e=this.history.filter((l)=>l.message.role==="user").length,u=this.history.filter((l)=>l.message.role==="assistant").length,a=Math.min(e,u);if(a>t){let l=a-t,i=l*2,o=this.history.splice(0,i);this.logger?.log(`[HistoryManager:${this.sentinelId}] Pruned ${o.length} messages (${l} turns) to stay within maxTurns=${t}`,"info")}}else if(this.trimmingStrategy.type==="maxTokens"){let t=this.trimmingStrategy.maxTokens,e=this.history.reduce((a,l)=>{if(l.tokens!==void 0)return a+l.tokens;else{let i=typeof l.message.content==="string"?l.message.content:JSON.stringify(l.message.content);return a+Vx(i)}},0),u=0;while(e>t&&this.history.length>0){let a=this.history.shift();if(a){let l=a.tokens??(()=>{let i=typeof a.message.content==="string"?a.message.content:JSON.stringify(a.message.content);return Vx(i)})();e-=l,u++}}if(u>0)this.logger?.log(`[HistoryManager:${this.sentinelId}] Pruned ${u} messages to stay within maxTokens=${t}. Remaining: ${this.history.length}`,"info")}}async loadFromFile(){if(!this.historyFilePath)return;try{let t=await Qd.readFile(this.historyFilePath,"utf-8"),e=JSON.parse(t);if(Array.isArray(e)){let u=[],a=[];for(let l=0;l<e.length;l++){let i=e[l],o="message"in i?i.message:i,d="tokens"in i?i.tokens:void 0,m=n2.safeParse(o);if(!m.success){a.push(`Message ${l}: Parse failed - ${m.error.message}`),this.logger?.log(`[HistoryManager:${this.sentinelId}] Failed to parse message ${l}: ${m.error.message}`,"error");continue}if(m.data.role!=="user"&&m.data.role!=="assistant"){a.push(`Message ${l}: Invalid role '${m.data.role}'`),this.logger?.log(`[HistoryManager:${this.sentinelId}] Invalid role at message ${l}: ${m.data.role}`,"error");continue}u.push({message:m.data,tokens:typeof d==="number"?d:void 0})}if(a.length>0){let l=a.length/e.length;if(this.logger?.log(`[HistoryManager:${this.sentinelId}] History file has ${a.length}/${e.length} invalid messages (${(l*100).toFixed(1)}%)`,"error"),l>0.2)throw this.logger?.log(`[HistoryManager:${this.sentinelId}] Corruption rate too high, clearing history and starting fresh`,"error"),this.history=[],Error(`History file severely corrupted: ${a.length}/${e.length} invalid messages. Starting with fresh history.`)}this.history=u,this.logger?.log(`[HistoryManager:${this.sentinelId}] Loaded ${this.history.length} messages from file${a.length>0?` (skipped ${a.length} invalid)`:""}`,"info")}else this.logger?.log(`[HistoryManager:${this.sentinelId}] Invalid history file format, starting fresh`,"info"),this.history=[]}catch(t){if(t instanceof Error&&"code"in t&&t.code==="ENOENT")this.logger?.log(`[HistoryManager:${this.sentinelId}] No existing history file, starting fresh`,"debug");else this.logger?.log(`[HistoryManager:${this.sentinelId}] Error loading history: ${t}`,"error");this.history=[]}}async saveToFile(){if(!this.historyFilePath)return;let t=`${this.historyFilePath}.tmp`;try{await Qd.writeFile(t,JSON.stringify(this.history,null,2),"utf-8"),await ga(t,this.historyFilePath,{logger:this.logger}),this.logger?.log(`[HistoryManager:${this.sentinelId}] Saved ${this.history.length} messages to file`,"debug")}catch(e){this.logger?.log(`[HistoryManager:${this.sentinelId}] Error saving history: ${e}`,"error");try{await Qd.unlink(t)}catch{}}}}import*as de from"node:path";import*as zx from"node:fs";class qd{constructor(t){this.cache=void 0,this.cache=t}define(t,e){this.cache[t]=e}get(t){return this.cache[t]}remove(t){delete this.cache[t]}reset(){this.cache={}}load(t){this.cache={...this.cache,...t}}}class Y2 extends Error{constructor(t){super(t);this.name="Eta Error"}}class Gd extends Y2{constructor(t){super(t);this.name="EtaParser Error"}}class bx extends Y2{constructor(t){super(t);this.name="EtaRuntime Error"}}class hl extends Y2{constructor(t){super(t);this.name="EtaFileResolution Error"}}class Mx extends Y2{constructor(t){super(t);this.name="EtaNameResolution Error"}}function V2(t,e,u){let a=e.slice(0,u).split(/\n/),l=a.length,i=a[l-1].length+1;throw t+=" at line "+l+" col "+i+`:
|
|
202
|
+
|
|
203
|
+
`+e.split(/\n/)[l-1]+`
|
|
204
|
+
`+Array(i).join(" ")+"^",new Gd(t)}function bX(t,e,u,a){let l=e.split(`
|
|
205
|
+
`),i=Math.max(u-3,0),o=Math.min(l.length,u+3),d=a,m=l.slice(i,o).map(function(r,c){let x=c+i+1;return(x==u?" >> ":" ")+x+"| "+r}).join(`
|
|
206
|
+
`),_=d?d+":"+u+`
|
|
207
|
+
`:"line "+u+`
|
|
208
|
+
`,n=new bx(_+m+`
|
|
209
|
+
|
|
210
|
+
`+t.message);throw n.name=t.name,n}var MX=async function(){}.constructor;function UX(t,e){let u=this.config,a=e&&e.async?MX:Function;try{return new a(u.varName,"options",this.compileToString.call(this,t,e))}catch(l){if(l instanceof SyntaxError)throw new Gd(`Bad template syntax
|
|
211
|
+
|
|
212
|
+
`+l.message+`
|
|
213
|
+
`+Array(l.message.length+1).join("=")+`
|
|
214
|
+
`+this.compileToString.call(this,t,e)+`
|
|
215
|
+
`);else throw l}}function FX(t,e){let u=this.config,a=e&&e.async,l=this.compileBody,i=this.parse.call(this,t),o=`${u.functionHeader}
|
|
216
|
+
let include = (template, data) => this.render(template, data, options);
|
|
217
|
+
let includeAsync = (template, data) => this.renderAsync(template, data, options);
|
|
218
|
+
|
|
219
|
+
let __eta = {res: "", e: this.config.escapeFunction, f: this.config.filterFunction${u.debug?', line: 1, templateStr: "'+t.replace(/\\|"/g,"\\$&").replace(/\r\n|\n|\r/g,"\\n")+'"':""}};
|
|
220
|
+
|
|
221
|
+
function layout(path, data) {
|
|
222
|
+
__eta.layout = path;
|
|
223
|
+
__eta.layoutData = data;
|
|
224
|
+
}${u.debug?"try {":""}${u.useWith?"with("+u.varName+"||{}){":""}
|
|
225
|
+
|
|
226
|
+
${l.call(this,i)}
|
|
227
|
+
if (__eta.layout) {
|
|
228
|
+
__eta.res = ${a?"await includeAsync":"include"} (__eta.layout, {...${u.varName}, body: __eta.res, ...__eta.layoutData});
|
|
229
|
+
}
|
|
230
|
+
${u.useWith?"}":""}${u.debug?"} catch (e) { this.RuntimeErr(e, __eta.templateStr, __eta.line, options.filepath) }":""}
|
|
231
|
+
return __eta.res;
|
|
232
|
+
`;if(u.plugins)for(let d=0;d<u.plugins.length;d++){let m=u.plugins[d];if(m.processFnString)o=m.processFnString(o,u)}return o}function AX(t){let e=this.config,u=0,a=t.length,l="";for(u;u<a;u++){let i=t[u];if(typeof i==="string")l+="__eta.res+='"+i+`'
|
|
233
|
+
`;else{let o=i.t,d=i.val||"";if(e.debug)l+="__eta.line="+i.lineNo+`
|
|
234
|
+
`;if(o==="r"){if(e.autoFilter)d="__eta.f("+d+")";l+="__eta.res+="+d+`
|
|
235
|
+
`}else if(o==="i"){if(e.autoFilter)d="__eta.f("+d+")";if(e.autoEscape)d="__eta.e("+d+")";l+="__eta.res+="+d+`
|
|
236
|
+
`}else if(o==="e")l+=d+`
|
|
237
|
+
`}}return l}function jX(t,e,u,a){let l,i;if(Array.isArray(e.autoTrim))l=e.autoTrim[1],i=e.autoTrim[0];else l=i=e.autoTrim;if(u||u===!1)l=u;if(a||a===!1)i=a;if(!i&&!l)return t;if(l==="slurp"&&i==="slurp")return t.trim();if(l==="_"||l==="slurp")t=t.trimStart();else if(l==="-"||l==="nl")t=t.replace(/^(?:\r\n|\n|\r)/,"");if(i==="_"||i==="slurp")t=t.trimEnd();else if(i==="-"||i==="nl")t=t.replace(/(?:\r\n|\n|\r)$/,"");return t}var DX={"&":"&","<":"<",">":">",'"':""","'":"'"};function NX(t){return DX[t]}function LX(t){let e=String(t);if(/[&<>"']/.test(e))return e.replace(/[&<>"']/g,NX);else return e}var Hx={autoEscape:!0,autoFilter:!1,autoTrim:[!1,"nl"],cache:!1,cacheFilepaths:!0,debug:!1,escapeFunction:LX,filterFunction:(t)=>String(t),functionHeader:"",parse:{exec:"",interpolate:"=",raw:"~"},plugins:[],rmWhitespace:!1,tags:["<%","%>"],useWith:!1,varName:"it",defaultExtension:".eta"},wl=/`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})*}|(?!\${)[^\\`])*`/g,sl=/'(?:\\[\s\w"'\\`]|[^\n\r'\\])*?'/g,kl=/"(?:\\[\s\w"'\\`]|[^\n\r"\\])*?"/g;function fl(t){return t.replace(/[.*+\-?^${}()|[\]\\]/g,"\\$&")}function ZX(t,e){return t.slice(0,e).split(`
|
|
238
|
+
`).length}function TX(t){let e=this.config,u=[],a=!1,l=0,i=e.parse;if(e.plugins)for(let r=0;r<e.plugins.length;r++){let c=e.plugins[r];if(c.processTemplate)t=c.processTemplate(t,e)}if(e.rmWhitespace)t=t.replace(/[\r\n]+/g,`
|
|
239
|
+
`).replace(/^\s+|\s+$/gm,"");wl.lastIndex=0,sl.lastIndex=0,kl.lastIndex=0;function o(r,c){if(r){if(r=jX(r,e,a,c),r)r=r.replace(/\\|'/g,"\\$&").replace(/\r\n|\n|\r/g,"\\n"),u.push(r)}}let d=[i.exec,i.interpolate,i.raw].reduce(function(r,c){if(r&&c)return r+"|"+fl(c);else if(c)return fl(c);else return r},""),m=new RegExp(fl(e.tags[0])+"(-|_)?\\s*("+d+")?\\s*","g"),_=new RegExp("'|\"|`|\\/\\*|(\\s*(-|_)?"+fl(e.tags[1])+")","g"),n;while(n=m.exec(t)){let r=t.slice(l,n.index);l=n[0].length+n.index;let c=n[1],x=n[2]||"";o(r,c),_.lastIndex=l;let I,s=!1;while(I=_.exec(t))if(I[1]){let k=t.slice(l,I.index);m.lastIndex=l=_.lastIndex,a=I[2],s={t:x===i.exec?"e":x===i.raw?"r":x===i.interpolate?"i":"",val:k};break}else{let k=I[0];if(k==="/*"){let g=t.indexOf("*/",_.lastIndex);if(g===-1)V2("unclosed comment",t,I.index);_.lastIndex=g}else if(k==="'")if(sl.lastIndex=I.index,sl.exec(t))_.lastIndex=sl.lastIndex;else V2("unclosed string",t,I.index);else if(k==='"')if(kl.lastIndex=I.index,kl.exec(t))_.lastIndex=kl.lastIndex;else V2("unclosed string",t,I.index);else if(k==="`")if(wl.lastIndex=I.index,wl.exec(t))_.lastIndex=wl.lastIndex;else V2("unclosed string",t,I.index)}if(s){if(e.debug)s.lineNo=ZX(t,n.index);u.push(s)}else V2("unclosed tag",t,n.index)}if(o(t.slice(l,t.length),!1),e.plugins)for(let r=0;r<e.plugins.length;r++){let c=e.plugins[r];if(c.processAST)u=c.processAST(u,e)}return u}function Ux(t,e){let u=e&&e.async?this.templatesAsync:this.templatesSync;if(this.resolvePath&&this.readFile&&!t.startsWith("@")){let a=e.filepath,l=u.get(a);if(this.config.cache&&l)return l;else{let i=this.readFile(a),o=this.compile(i,e);if(this.config.cache)u.define(a,o);return o}}else{let a=u.get(t);if(a)return a;else throw new Mx("Failed to get template '"+t+"'")}}function Fx(t,e,u){let a,l={...u,async:!1};if(typeof t==="string"){if(this.resolvePath&&this.readFile&&!t.startsWith("@"))l.filepath=this.resolvePath(t,l);a=Ux.call(this,t,l)}else a=t;return a.call(this,e,l)}function Ax(t,e,u){let a,l={...u,async:!0};if(typeof t==="string"){if(this.resolvePath&&this.readFile&&!t.startsWith("@"))l.filepath=this.resolvePath(t,l);a=Ux.call(this,t,l)}else a=t;let i=a.call(this,e,l);return Promise.resolve(i)}function EX(t,e){let u=this.compile(t,{async:!1});return Fx.call(this,u,e)}function RX(t,e){let u=this.compile(t,{async:!0});return Ax.call(this,u,e)}class jx{constructor(t){if(this.config=void 0,this.RuntimeErr=bX,this.compile=UX,this.compileToString=FX,this.compileBody=AX,this.parse=TX,this.render=Fx,this.renderAsync=Ax,this.renderString=EX,this.renderStringAsync=RX,this.filepathCache={},this.templatesSync=new qd({}),this.templatesAsync=new qd({}),this.resolvePath=null,this.readFile=null,t)this.config={...Hx,...t};else this.config={...Hx}}configure(t){this.config={...this.config,...t}}withConfig(t){return{...this,config:{...this.config,...t}}}loadTemplate(t,e,u){if(typeof e==="string")(u&&u.async?this.templatesAsync:this.templatesSync).define(t,this.compile(e,u));else{let a=this.templatesSync;if(e.constructor.name==="AsyncFunction"||u&&u.async)a=this.templatesAsync;a.define(t,e)}}}function SX(t){let e="";try{e=zx.readFileSync(t,"utf8")}catch(u){if((u==null?void 0:u.code)==="ENOENT")throw new hl(`Could not find template: ${t}`);else throw u}return e}function OX(t,e){let u="",a=this.config.views;if(!a)throw new hl("Views directory is not defined");let l=e&&e.filepath,i=this.config.defaultExtension===void 0?".eta":this.config.defaultExtension,o=JSON.stringify({filename:l,path:t,views:this.config.views});if(t+=de.extname(t)?"":i,l){if(this.config.cacheFilepaths&&this.filepathCache[o])return this.filepathCache[o];let d=CX.exec(t);if(d&&d.length){let m=t.replace(/^\/*|^\\*/,"");u=de.join(a,m)}else u=de.join(de.dirname(l),t)}else u=de.join(a,t);if(PX(a,u)){if(l&&this.config.cacheFilepaths)this.filepathCache[o]=u;return u}else throw new hl(`Template '${t}' is not in the views directory`)}function PX(t,e){let u=de.relative(t,e);return u&&!u.startsWith("..")&&!de.isAbsolute(u)}var CX=/^\\|^\//;class gl extends jx{constructor(...t){super(...t);this.readFile=SX,this.resolvePath=OX}}var yX=1000,Dx=new gl({cache:!0,autoEscape:!1,rmWhitespace:!1});async function tJ(t,e){let u={...e,events:e.events.slice(0,yX)};try{return Dx.renderString(t,u)}catch(a){if(a instanceof Error)throw Error(`Template rendering failed: ${a.message}`);throw Error(`Template rendering failed: ${String(a)}`)}}function eJ(){Object.assign(Dx,new gl({cache:!0,autoEscape:!1,rmWhitespace:!1}))}var $d={render:tJ,resetCache:eJ};var uJ={temperature:0,maxOutputTokens:8192,maxRetries:2};function Nx(t){return{...uJ,...t}}class rt extends Error{sentinelId;errorType;shouldUnload;retryable;constructor(t,e,u,a=!0,l=!1){super(e);this.sentinelId=t;this.errorType=u;this.shouldUnload=a;this.retryable=l;this.name="SentinelFatalError"}}c2();function aJ(t,e){let u=br(e,t.path);if(u===void 0)return!1;switch(t.operator){case"equals":return u===t.value;case"notEquals":return u!==t.value;case"in":return Array.isArray(t.value)&&t.value.includes(u);case"notIn":return Array.isArray(t.value)&&!t.value.includes(u);case"contains":{if(typeof u==="string"&&typeof t.value==="string")return u.includes(t.value);if(Array.isArray(u))return u.includes(t.value);return!1}case"matches":{if(typeof u==="string"&&typeof t.value==="string")try{return new RegExp(t.value).test(u)}catch{return!1}return!1}case"greaterThan":return typeof u==="number"&&typeof t.value==="number"&&u>t.value;case"lessThan":return typeof u==="number"&&typeof t.value==="number"&&u<t.value;default:return!1}}function Bl(t,e){if(!t||t.length===0)return!0;return t.every((u)=>aJ(u,e))}class Xd{}class Lx extends Xd{trigger;logger;triggerId;constructor(t,e){super();this.trigger=t;this.logger=e;this.triggerId=`EventTrigger-${t.on.join(",")}`}processEvent(t){if(!this.trigger.on.includes(t.type)&&!this.trigger.on.includes("*"))return{matched:!1,events:[]};if(this.trigger.conditions&&this.trigger.conditions.length>0){if(!Bl(this.trigger.conditions,t.data))return{matched:!1,events:[]}}return this.logger?.log(`[${this.triggerId}] MATCHED ${t.type}`,"debug"),{matched:!0,events:[t]}}reset(){}}class Zx extends Xd{trigger;logger;eventHistory=[];lastTriggerEventId=null;maxHistorySize=1000;triggerId;constructor(t,e){super();this.trigger=t;this.logger=e;this.triggerId=`SequenceTrigger-${t.pattern.length}steps`}processEvent(t){if(this.trigger.interestFilter.on.includes(t.type)||this.trigger.interestFilter.on.includes("*")){if(this.eventHistory.push(t),this.eventHistory.length>this.maxHistorySize){let l=this.eventHistory.length;this.eventHistory=this.eventHistory.slice(-this.maxHistorySize),this.logger?.log(`[${this.triggerId}] Trimmed history from ${l} to ${this.maxHistorySize} events`,"debug")}}if(!this.trigger.interestFilter.on.includes("*")){let l=this.trigger.interestFilter.on[this.trigger.interestFilter.on.length-1];if(t.type!==l)return{matched:!1,events:[]}}let u=this.getSearchWindow(),a=this.checkPatternMatch(u);if(a.matched)return this.logger?.log(`[${this.triggerId}] PATTERN MATCHED with ${a.events.length} events`,"info"),this.lastTriggerEventId=a.events[a.events.length-1].id,a;return{matched:!1,events:[]}}getSearchWindow(){if(!this.lastTriggerEventId)return this.eventHistory;let t=this.eventHistory.findIndex((e)=>e.id===this.lastTriggerEventId);if(t===-1)return this.eventHistory;return this.eventHistory.slice(t+1)}checkPatternMatch(t){let e=this.trigger.pattern;if(this.trigger.options?.consecutive!==!1)return this.checkConsecutivePattern(t,e);else return this.checkNonConsecutivePattern(t,e)}checkConsecutivePattern(t,e){if(t.length<e.length)return{matched:!1,events:[]};let u=t.slice(-e.length),a=[];for(let l=0;l<e.length;l++){let i=u[l],o=e[l];if(o.type!=="*"&&i.type!==o.type)return{matched:!1,events:[]};if(o.conditions&&!Bl(o.conditions,i.data))return{matched:!1,events:[]};a.push(i)}return{matched:!0,events:a}}checkNonConsecutivePattern(t,e){let u=[],a=0,l=0;while(a<e.length&&l<t.length){let i=t[l],o=e[a];if(o.type==="*"||i.type===o.type){if(!o.conditions||Bl(o.conditions,i.data))u.push(i),a++}l++}if(a===e.length)return{matched:!0,events:u};return{matched:!1,events:[]}}reset(){this.eventHistory=[],this.lastTriggerEventId=null}}function Tx(t,e){switch(t.type){case"event":return new Lx(t,e);case"sequence":return new Zx(t,e);default:throw Error(`Unknown trigger type: ${JSON.stringify(t)}`)}}class Jd{config;codonId;llmCall;logger;onExecute;llmObjectCall;executionPath;sendEventToServer;triggerEngine;triggerQueue=[];isProcessingQueue=!1;queueProcessingPromise;MAX_QUEUE_SIZE=100;pendingEvents=[];pendingDebounce;timeWindowTimer;lastWindowTime;MAX_BUFFER_SIZE=1e4;historyManager;userPromptTemplate;systemPromptTemplate;runStartTime;llmParams;totalCost=0;modelCost;structuredOutputContext;outputPaths;triggerNumber=0;llmCallCount=0;failedLLMCallsCount=0;lastLlmCallAt;constructor(t,e,u,a,l,i,o,d,m,_,n,r,c){this.config=t;this.codonId=e;this.llmCall=u;this.logger=a;this.onExecute=d;this.llmObjectCall=_;this.executionPath=n;this.sendEventToServer=c;if(this.modelCost=m,this.runStartTime=o||new Date,this.llmParams=Nx(this.config.llmParams),this.triggerEngine=Tx(t.trigger,a),t.structuredOutput){if(this.structuredOutputContext=this.loadStructuredOutputSchema(i),this.structuredOutputContext&&!_)throw new rt(t.id,"Structured output requires llmObjectCall to be provided","configuration",!0);this.logger?.log(`[Sentinel:${t.id}] Loaded structured output: mode=${this.structuredOutputContext.output}`,"debug")}let x=this.assemblePrompt(t.userPromptFile,t.userPromptText,i,"user prompt");if(!x)throw Error(`[Sentinel:${t.id}] User prompt is required but none provided`);if(this.userPromptTemplate=x,this.systemPromptTemplate=this.assemblePrompt(t.systemPromptFile,t.systemPromptText,i,"system prompt"),t.conversational){if(!this.systemPromptTemplate)throw new rt(t.id,"Conversational sentinel missing required system prompt","configuration",!0);this.historyManager=new vd(t.id,this.codonId,t.conversational.trimmingStrategy,l,this.logger),this.logger?.log(`[Sentinel:${t.id}] Initialized conversational mode with ${t.conversational.trimmingStrategy.type} trimming`,"info")}this.outputPaths=this.initializeOutputFiles(r,n),this.logger?.log(`[Sentinel:${t.id}] Initialized with ${t.execution.strategy} strategy`,"debug")}async handleEvent(t){let e=this.triggerEngine.processEvent(t);if(e.matched){this.logger?.log(`[Sentinel:${this.config.id}] ✓ Trigger MATCHED for ${t.type} - Strategy: ${this.config.execution.strategy}, Events: ${e.events.length}`,"debug");let u=e.events;switch(this.config.execution.strategy){case"immediate":await this.enqueueImmediateTrigger(u);break;case"debounce":this.handleDebounceStrategy(u,this.config.execution.milliseconds);break;case"count":this.handleCountStrategy(u,this.config.execution.threshold);break;case"timeWindow":this.handleTimeWindowStrategy(u,this.config.execution.milliseconds);break}}}async enqueueImmediateTrigger(t){let e={id:J(),events:t,strategy:"immediate",queuedAt:new Date};this.logger?.log(`[Sentinel:${this.config.id}] Queueing immediate trigger with ${t.length} events`,"debug"),this.enqueueAndProcess(e),await this.queueProcessingPromise}enqueueAndProcess(t){let e=this.triggerQueue.reduce((u,a)=>u+a.events.length,0);if(e>this.MAX_BUFFER_SIZE)this.logger?.log(`[Sentinel:${this.config.id}] Total queued events (${e}) exceeds limit, dropping oldest trigger`,"info"),this.triggerQueue.shift();if(this.triggerQueue.length>=this.MAX_QUEUE_SIZE)this.logger?.log(`[Sentinel:${this.config.id}] Queue full (${this.MAX_QUEUE_SIZE} triggers), dropping oldest trigger`,"info"),this.triggerQueue.shift();if(this.triggerQueue.push(t),this.logger?.log(`[Sentinel:${this.config.id}] Trigger ${t.id} queued (strategy: ${t.strategy}, queue size: ${this.triggerQueue.length})`,"debug"),this.checkBackpressure(),!this.isProcessingQueue)this.queueProcessingPromise=this.processQueue()}async processQueue(){if(this.isProcessingQueue)return;this.isProcessingQueue=!0;while(this.triggerQueue.length>0){let t=this.triggerQueue.shift();if(!t)break;this.logger?.log(`[Sentinel:${this.config.id}] Processing trigger ${t.id} (${t.events.length} events, queued at ${t.queuedAt.toISOString()})`,"debug");try{await this.executeTrigger(t)}catch(e){if(e instanceof rt)throw this.logger?.log(`[Sentinel:${this.config.id}] Fatal error in trigger ${t.id}: ${e}`,"error"),this.isProcessingQueue=!1,e;if(this.logger?.log(`[Sentinel:${this.config.id}] Error in trigger ${t.id}: ${e}`,"error"),t.strategy==="immediate"&&!this.config.conversational)throw this.isProcessingQueue=!1,e}}this.isProcessingQueue=!1}async executeTrigger(t){if(this.onExecute?.(this.config.id,t.events),this.triggerNumber++,this.config.reportToWebsocket?.triggers===!0&&this.sendEventToServer)this.sendEventToServer({id:z(J()),timestamp:new Date().toISOString(),type:"sentinel.triggered",data:{sentinelId:this.config.id,codonId:this.codonId,triggerNumber:this.triggerNumber,strategy:this.config.execution.strategy,eventCount:t.events.length,queueSize:this.triggerQueue.length}});let u={events:t.events,codon:{id:this.codonId,name:this.config.name,description:this.config.description,startTime:this.runStartTime},world:{currentTime:t.queuedAt}},a;try{a=await $d.render(this.userPromptTemplate,u)}catch(i){if(i instanceof Error&&i.message.includes("Template syntax error"))throw new rt(this.config.id,`Template syntax permanently broken: ${i.message}`,"template",!0);if(i instanceof Error&&i.message.includes("Template rendering failed")){this.logger?.log(`[Sentinel:${this.config.id}] Template rendering failed: ${i.message}`,"error");return}throw i}let l;if(this.systemPromptTemplate)try{l=await $d.render(this.systemPromptTemplate,u)}catch(i){if(i instanceof Error&&i.message.includes("Template syntax error"))throw new rt(this.config.id,`System prompt template syntax permanently broken: ${i.message}`,"template",!0);if(i instanceof Error&&i.message.includes("Template rendering failed")){this.logger?.log(`[Sentinel:${this.config.id}] System template rendering failed: ${i.message}`,"error");return}throw i}if(this.structuredOutputContext&&this.llmObjectCall)await this.executeStructuredOutput(a,l,this.structuredOutputContext);else await this.executeTextGeneration(a,l)}async executeTextGeneration(t,e){if(this.config.conversational&&this.historyManager){if(!e)throw Error(`[Sentinel:${this.config.id}] Conversational sentinels require a system prompt`);let u=await this.historyManager.getMessagesToSend(e);u.push({role:"user",content:t});let a={messages:u,temperature:this.llmParams.temperature,maxOutputTokens:this.llmParams.maxOutputTokens,maxRetries:this.llmParams.maxRetries};try{let l=await this.llmCall(this.config.id,a);this.trackSuccessfulLLMCall();let i=0;if(this.modelCost&&l.usage){let _=l.usage.inputTokens/1e6*this.modelCost.input+l.usage.outputTokens/1e6*this.modelCost.output;this.totalCost+=_,i=_,this.logger?.log(`[Sentinel:${this.config.id}] LLM call cost: $${_.toFixed(6)} (total: $${this.totalCost.toFixed(6)})`,"info")}if(this.writeOutputFiles(l.text),this.config.reportToWebsocket?.outputs!==!1&&this.sendEventToServer)this.sendEventToServer({id:z(J()),timestamp:new Date().toISOString(),type:"sentinel.output",data:{sentinelId:this.config.id,codonId:this.codonId,triggerNumber:this.triggerNumber,outputType:"text",content:l.text,cost:i,tokens:{input:l.usage?.inputTokens||0,output:l.usage?.outputTokens||0},eventCount:1}});let d=l.usage?.inputTokens,m=l.usage?.outputTokens;await this.historyManager.addMessagePair(t,l.text,d,m)}catch(l){if(this.trackFailedLLMCall(),this.logger?.log(`[Sentinel:${this.config.id}] LLM call failed: ${l}`,"error"),this.config.reportToWebsocket?.errors!==!1&&this.sendEventToServer)this.sendEventToServer({id:z(J()),timestamp:new Date().toISOString(),type:"sentinel.error",data:{sentinelId:this.config.id,codonId:this.codonId,errorType:"llm-call-failed",message:l instanceof Error?l.message:String(l),retriable:!0,consecutiveFailureCount:this.failedLLMCallsCount}});if(this.config.conversational?.continueOnError===!0)this.logger?.log(`[Sentinel:${this.config.id}] Ignoring error as per configuration and continuing conversation`,"info");else throw l}}else{let u={messages:[{role:"user",content:t}],system:e,temperature:this.llmParams.temperature,maxOutputTokens:this.llmParams.maxOutputTokens,maxRetries:this.llmParams.maxRetries};try{let a=await this.llmCall(this.config.id,u);this.trackSuccessfulLLMCall();let l=0;if(this.modelCost&&a.usage){let o=a.usage.inputTokens/1e6*this.modelCost.input+a.usage.outputTokens/1e6*this.modelCost.output;this.totalCost+=o,l=o,this.logger?.log(`[Sentinel:${this.config.id}] LLM call cost: $${o.toFixed(6)} (total: $${this.totalCost.toFixed(6)})`,"info")}if(this.writeOutputFiles(a.text),this.config.reportToWebsocket?.outputs!==!1&&this.sendEventToServer)this.sendEventToServer({id:z(J()),timestamp:new Date().toISOString(),type:"sentinel.output",data:{sentinelId:this.config.id,codonId:this.codonId,triggerNumber:this.triggerNumber,outputType:"text",content:a.text,cost:l,tokens:{input:a.usage?.inputTokens||0,output:a.usage?.outputTokens||0},eventCount:1}})}catch(a){if(this.trackFailedLLMCall(),this.logger?.log(`[Sentinel:${this.config.id}] LLM call failed: ${a}`,"error"),this.config.reportToWebsocket?.errors!==!1&&this.sendEventToServer)this.sendEventToServer({id:z(J()),timestamp:new Date().toISOString(),type:"sentinel.error",data:{sentinelId:this.config.id,codonId:this.codonId,errorType:"llm-call-failed",message:a instanceof Error?a.message:String(a),retriable:!0,consecutiveFailureCount:this.failedLLMCallsCount}});throw a}}}async executeStructuredOutput(t,e,u){if(!this.llmObjectCall)throw new rt(this.config.id,"llmObjectCall required for structured output but not provided","configuration",!0);if(this.config.conversational&&this.historyManager){if(!e)throw Error(`[Sentinel:${this.config.id}] Conversational sentinels require a system prompt`);let a=await this.historyManager.getMessagesToSend(e);a.push({role:"user",content:t});let l={messages:a,output:u.output,schemaName:u.schemaName,schemaDescription:u.schemaDescription,temperature:this.llmParams.temperature,maxOutputTokens:this.llmParams.maxOutputTokens,maxRetries:this.llmParams.maxRetries},i=u.output==="enum"?{...l,enum:u.enumValues}:{...l,schema:u.zodSchema};try{let o=await this.llmObjectCall(this.config.id,i);this.trackSuccessfulLLMCall();let d=0;if(this.modelCost&&o.usage){let r=o.usage.inputTokens/1e6*this.modelCost.input+o.usage.outputTokens/1e6*this.modelCost.output;this.totalCost+=r,d=r,this.logger?.log(`[Sentinel:${this.config.id}] LLM call cost: $${r.toFixed(6)} (total: $${this.totalCost.toFixed(6)})`,"info")}let m=o.usage?.inputTokens,_=o.usage?.outputTokens;if(this.logger?.log(`[Sentinel:${this.config.id}] Generated object: ${JSON.stringify(o.object)}`,"debug"),this.writeOutputFiles(o.object),this.config.reportToWebsocket?.outputs!==!1&&this.sendEventToServer)this.sendEventToServer({id:z(J()),timestamp:new Date().toISOString(),type:"sentinel.output",data:{sentinelId:this.config.id,codonId:this.codonId,triggerNumber:this.triggerNumber,outputType:"structured",content:o.object,cost:d,tokens:{input:o.usage?.inputTokens||0,output:o.usage?.outputTokens||0},eventCount:1}});await this.historyManager.addMessagePair(t,o.object,m,_)}catch(o){if(this.trackFailedLLMCall(),this.logger?.log(`[Sentinel:${this.config.id}] LLM call failed: ${o}`,"error"),this.config.reportToWebsocket?.errors!==!1&&this.sendEventToServer)this.sendEventToServer({id:z(J()),timestamp:new Date().toISOString(),type:"sentinel.error",data:{sentinelId:this.config.id,codonId:this.codonId,errorType:"llm-call-failed",message:o instanceof Error?o.message:String(o),retriable:!0,consecutiveFailureCount:this.failedLLMCallsCount}});if(this.config.conversational?.continueOnError===!0)this.logger?.log(`[Sentinel:${this.config.id}] Ignoring error as per configuration and continuing conversation`,"info");else throw o}}else{let a={messages:[{role:"user",content:t}],system:e,output:u.output,schemaName:u.schemaName,schemaDescription:u.schemaDescription,temperature:this.llmParams.temperature,maxOutputTokens:this.llmParams.maxOutputTokens,maxRetries:this.llmParams.maxRetries},l=u.output==="enum"?{...a,enum:u.enumValues}:{...a,schema:u.zodSchema};try{let i=await this.llmObjectCall(this.config.id,l);this.trackSuccessfulLLMCall();let o=0;if(this.modelCost&&i.usage){let m=i.usage.inputTokens/1e6*this.modelCost.input+i.usage.outputTokens/1e6*this.modelCost.output;this.totalCost+=m,o=m,this.logger?.log(`[Sentinel:${this.config.id}] LLM call cost: $${m.toFixed(6)} (total: $${this.totalCost.toFixed(6)})`,"info")}if(this.logger?.log(`[Sentinel:${this.config.id}] Generated object: ${JSON.stringify(i.object)}`,"debug"),this.writeOutputFiles(i.object),this.config.reportToWebsocket?.outputs!==!1&&this.sendEventToServer)this.sendEventToServer({id:z(J()),timestamp:new Date().toISOString(),type:"sentinel.output",data:{sentinelId:this.config.id,codonId:this.codonId,triggerNumber:this.triggerNumber,outputType:"structured",content:i.object,cost:o,tokens:{input:i.usage?.inputTokens||0,output:i.usage?.outputTokens||0},eventCount:1}})}catch(i){if(this.trackFailedLLMCall(),this.logger?.log(`[Sentinel:${this.config.id}] LLM call failed: ${i}`,"error"),this.config.reportToWebsocket?.errors!==!1&&this.sendEventToServer)this.sendEventToServer({id:z(J()),timestamp:new Date().toISOString(),type:"sentinel.error",data:{sentinelId:this.config.id,codonId:this.codonId,errorType:"llm-call-failed",message:i instanceof Error?i.message:String(i),retriable:!0,consecutiveFailureCount:this.failedLLMCallsCount}});throw i}}}checkBackpressure(){let t=this.triggerQueue.length,e=this.MAX_QUEUE_SIZE*0.7;if(t>e)this.logger?.log(`[Sentinel:${this.config.id}] Queue backpressure: ${t}/${this.MAX_QUEUE_SIZE} triggers queued`,"info")}handleDebounceStrategy(t,e){if(this.pendingDebounce)this.pendingDebounce.events.push(...t),clearTimeout(this.pendingDebounce.timer),this.logger?.log(`[Sentinel:${this.config.id}] Debounce: Added ${t.length} events, total: ${this.pendingDebounce.events.length}, resetting timer`,"debug");else this.pendingDebounce={events:[...t],timer:void 0},this.logger?.log(`[Sentinel:${this.config.id}] Debounce: Starting with ${t.length} events, timer: ${e}ms`,"debug");this.pendingDebounce.timer=setTimeout(()=>{if(!this.pendingDebounce)return;let u=this.pendingDebounce.events;this.pendingDebounce=void 0,this.logger?.log(`[Sentinel:${this.config.id}] Debounce timer fired, queueing trigger with ${u.length} events`,"info");let a={id:J(),events:u,strategy:"debounce",queuedAt:new Date};this.enqueueAndProcess(a)},e)}handleCountStrategy(t,e){this.pendingEvents.push(...t),this.logger?.log(`[Sentinel:${this.config.id}] Count: Added ${t.length} events, total: ${this.pendingEvents.length}/${e}`,"debug");while(this.pendingEvents.length>=e){let u=this.pendingEvents.splice(0,e);this.logger?.log(`[Sentinel:${this.config.id}] Count threshold reached, queueing trigger with ${u.length} events`,"info");let a={id:J(),events:u,strategy:"count",queuedAt:new Date};this.enqueueAndProcess(a)}}handleTimeWindowStrategy(t,e){if(this.pendingEvents.push(...t),this.logger?.log(`[Sentinel:${this.config.id}] TimeWindow: Added ${t.length} events, total: ${this.pendingEvents.length}`,"debug"),!this.timeWindowTimer)this.logger?.log(`[Sentinel:${this.config.id}] Starting time window loop: ${e}ms`,"info"),this.startTimeWindowLoop(e)}startTimeWindowLoop(t){if(this.timeWindowTimer)clearTimeout(this.timeWindowTimer);let e=Date.now(),u=this.lastWindowTime?this.lastWindowTime+t:e+t,a=Math.max(0,u-e);if(a===0&&this.lastWindowTime)this.logger?.log(`[Sentinel:${this.config.id}] Time window behind schedule by ${e-u}ms, firing immediately`,"debug");this.timeWindowTimer=setTimeout(()=>{this.lastWindowTime=Date.now();let l=this.pendingEvents.length;if(l>0){let i=[...this.pendingEvents];this.pendingEvents=[],this.logger?.log(`[Sentinel:${this.config.id}] Time window closing, queueing trigger with ${l} events`,"info");let o={id:J(),events:i,strategy:"timeWindow",queuedAt:new Date};this.enqueueAndProcess(o)}this.startTimeWindowLoop(t)},a)}async completeAllWork(){if(this.logger?.log(`[Sentinel:${this.config.id}] Completing all work: ${this.triggerQueue.length} triggers queued`,"info"),this.timeWindowTimer)clearTimeout(this.timeWindowTimer),this.timeWindowTimer=void 0;if(this.pendingDebounce){clearTimeout(this.pendingDebounce.timer),this.logger?.log(`[Sentinel:${this.config.id}] Finalizing pending debounce with ${this.pendingDebounce.events.length} events`,"debug");let t={id:J(),events:this.pendingDebounce.events,strategy:"debounce",queuedAt:new Date};this.enqueueAndProcess(t),this.pendingDebounce=void 0}if(this.pendingEvents.length>0){this.logger?.log(`[Sentinel:${this.config.id}] Finalizing pending count buffer with ${this.pendingEvents.length} events`,"debug");let t={id:J(),events:[...this.pendingEvents],strategy:"count",queuedAt:new Date};this.enqueueAndProcess(t),this.pendingEvents=[]}while(this.isProcessingQueue||this.triggerQueue.length>0)if(await this.queueProcessingPromise,this.triggerQueue.length>0&&!this.isProcessingQueue)this.queueProcessingPromise=this.processQueue();this.logger?.log(`[Sentinel:${this.config.id}] All work completed`,"info")}destroyTimers(){if(this.pendingDebounce)clearTimeout(this.pendingDebounce.timer),this.pendingDebounce=void 0;if(this.timeWindowTimer)clearTimeout(this.timeWindowTimer),this.timeWindowTimer=void 0}loadStructuredOutputSchema(t){let e=this.config.structuredOutput??(()=>{throw Error("structuredOutput should be defined")})();if(e.output==="enum"){if(!e.enumValues||e.enumValues.length===0)throw new rt(this.config.id,"Enum output requires enumValues","configuration",!0);return{zodSchema:void 0,output:"enum",enumValues:e.enumValues}}let u;if(e.schemaFile){let l=t&&!te.isAbsolute(e.schemaFile)?te.resolve(t,e.schemaFile):e.schemaFile;try{u=pe.readFileSync(l,"utf-8")}catch(i){throw new rt(this.config.id,`Failed to load schema file "${e.schemaFile}": ${i instanceof Error?i.message:String(i)}`,"configuration",!0)}}else if(e.schemaStr)u=e.schemaStr;else throw new rt(this.config.id,"Object/array mode requires schemaStr or schemaFile","configuration",!0);let a;try{a=Function("z",`return ${u}`)(p)}catch(l){throw new rt(this.config.id,`Invalid Zod schema code: ${l instanceof Error?l.message:String(l)}`,"configuration",!0)}if(!a||typeof a.parse!=="function")throw new rt(this.config.id,"Schema must be a valid Zod schema with parse method","configuration",!0);return{zodSchema:a,output:e.output,schemaName:e.schemaName,schemaDescription:e.schemaDescription}}assemblePrompt(t,e,u,a){let l=[];if(t){let i=Array.isArray(t)?t:[t];for(let o of i)try{let d=u&&!te.isAbsolute(o)?te.resolve(u,o):o,m=pe.readFileSync(d,"utf-8");l.push(m)}catch(d){throw Error(`[Sentinel:${this.config.id}] Failed to load ${a} file "${o}": ${d instanceof Error?d.message:String(d)}`)}}if(e)l.push(e);return l.length>0?l.join(`
|
|
240
|
+
|
|
241
|
+
`):void 0}getId(){return this.config.id}getTotalCost(){return this.totalCost}getHistoryManager(){return this.historyManager}getSentinelState(){return{id:this.config.id,model:this.config.model,loadedAt:this.runStartTime.toISOString(),llmCallCount:this.llmCallCount,failedLLMCalls:this.failedLLMCallsCount,lastLlmCallAt:this.lastLlmCallAt?.toISOString(),totalTriggers:this.triggerNumber,totalCost:this.totalCost,status:"active"}}trackSuccessfulLLMCall(){this.llmCallCount++,this.lastLlmCallAt=new Date}trackFailedLLMCall(){this.failedLLMCallsCount++,this.lastLlmCallAt=new Date}initializeOutputFiles(t,e){if(!e){this.logger?.log(`[Sentinel:${this.config.id}] No execution path provided - output files disabled`,"debug");let d=this.config.joinString||`
|
|
242
|
+
---
|
|
243
|
+
`;return{continuousLog:"",currentValue:void 0,joinString:this.processEscapeSequences(d)}}let u;if(!t?.logFile)u=this.generateLogFilePath(e),this.logger?.log(`[Sentinel:${this.config.id}] Auto-generated logFile: ${te.relative(e,u)}`,"info");else u=this.resolveOutputPath(t.logFile,e);let a=t?.lastValueFile?this.resolveOutputPath(t.lastValueFile,e):void 0;if(this.validatePathSafety(u,e),a)this.validatePathSafety(a,e);if(this.config.structuredOutput){if(!u.endsWith(".ndjson")&&!u.endsWith(".jsonl"))throw new rt(this.config.id,`Structured output logFile must use .ndjson or .jsonl extension: ${u}`,"configuration",!0);if(a&&!a.endsWith(".json"))throw new rt(this.config.id,`Structured output lastValueFile must use .json extension: ${a}`,"configuration",!0)}let l=[u,a].filter(Boolean);for(let d of l){try{pe.mkdirSync(te.dirname(d),{recursive:!0})}catch(m){throw new rt(this.config.id,`Failed to create directory for ${d}: ${m}`,"configuration",!0)}try{if(!pe.existsSync(d))pe.writeFileSync(d,"")}catch(m){throw new rt(this.config.id,`Failed to create file ${d}: ${m}`,"configuration",!0)}try{pe.accessSync(d,pe.constants.W_OK)}catch(m){throw new rt(this.config.id,`Output file not writable: ${d}`,"configuration",!0)}}this.logger?.log(`[Sentinel:${this.config.id}] Output files initialized:
|
|
244
|
+
Log: ${te.relative(e,u)}`+(a?`
|
|
245
|
+
LastValue: ${te.relative(e,a)}`:""),"info");let i=this.config.joinString||`
|
|
246
|
+
---
|
|
247
|
+
`,o=this.processEscapeSequences(i);return{continuousLog:u,currentValue:a,joinString:o}}generateLogFilePath(t){let e=Date.now(),u=this.config.structuredOutput?"ndjson":"md",a=`${this.config.id}-${this.codonId}-${e}.${u}`;return te.join(t,".hankweave","sentinels","outputs",this.config.id,a)}resolveOutputPath(t,e){if(t.includes("/"))return te.join(e,t);return te.join(e,".hankweave","sentinels","outputs",this.config.id,t)}validatePathSafety(t,e){let u=te.resolve(t),a=te.resolve(e);if(!u.startsWith(a))throw new rt(this.config.id,`Output path escapes execution directory: ${t}`,"configuration",!0)}processEscapeSequences(t){return t.replace(/\\n/g,`
|
|
248
|
+
`).replace(/\\t/g,"\t").replace(/\\r/g,"\r").replace(/\\\\/g,"\\")}writeAtomic(t,e){let u=`${t}.tmp`;try{pe.writeFileSync(u,e,"utf-8"),F_(u,t,{logger:this.logger})}catch(a){if(pe.existsSync(u))pe.unlinkSync(u);throw a}}writeOutputFiles(t){if(!this.outputPaths.continuousLog)return;let e=typeof t==="object";try{if(e){let u=JSON.stringify(t),a=JSON.stringify(t,null,2);if(pe.appendFileSync(this.outputPaths.continuousLog,`${u}
|
|
249
|
+
`),this.outputPaths.currentValue)this.writeAtomic(this.outputPaths.currentValue,a);this.logger?.log(`[Sentinel:${this.config.id}] Wrote structured output`,"debug")}else{let u=t;if(pe.appendFileSync(this.outputPaths.continuousLog,`${this.outputPaths.joinString+u}
|
|
250
|
+
`),this.outputPaths.currentValue)this.writeAtomic(this.outputPaths.currentValue,u);this.logger?.log(`[Sentinel:${this.config.id}] Wrote text output (${u.length} chars)`,"debug")}}catch(u){this.logger?.log(`[Sentinel:${this.config.id}] Failed to write output files: ${u}`,"error")}}destroy(){this.destroyTimers(),this.pendingEvents=[];let t=this.triggerQueue.length;if(this.triggerQueue=[],t>0)this.logger?.log(`[Sentinel:${this.config.id}] Destroyed with ${t} pending triggers dropped`,"info");this.isProcessingQueue=!1,this.queueProcessingPromise=void 0,this.triggerEngine.reset(),this.logger?.log(`[Sentinel:${this.config.id}] Destroyed.`,"debug")}}class Kd{sentinels=[];sentinelDir;isDirectoryInitialized=!1;sentinelConfigs=new Map;sentinelFailureCounts=new Map;providerRegistry;healthCheckPromise;logger;options;codonId;executionPath;constructor(t={}){if(this.options=t,this.logger=t.logger,t.enablePersistence!==!1){let e=t.rootDirectory||".";this.sentinelDir=Ex.join(e,".hankweave","sentinels","history")}this.providerRegistry=t.providerRegistry||new kt({logger:this.logger,performHealthCheckOnInit:!1}),this.initializeProviderRegistry(t.waitForHealthChecks)}async initializeProviderRegistry(t=!1){try{if(this.logger?.log("Initializing LLM Provider Registry","info"),this.healthCheckPromise=this.providerRegistry.performHealthChecks().then((e)=>{let u=Array.from(e.values()).filter((l)=>l.status==="available"&&l.healthy),a=Array.from(e.values()).filter((l)=>l.status==="available");this.logger?.log(`LLM providers initialized: ${u.length}/${a.length} healthy, ${e.size} total`,"info");for(let[l,i]of e)if(i.status==="available")this.logger?.log(`Provider ${l}: available=true, healthy=${i.healthy}`,"debug");else this.logger?.log(`Provider ${l}: ${i.status}`,"debug")}).catch((e)=>{this.logger?.log(`Provider health checks failed: ${e}`,"error")}),t)this.logger?.log("Waiting for ALL provider health checks to complete...","info"),await this.healthCheckPromise;else if(this.options.healthCheckGracePeriodMs!==void 0&&this.options.healthCheckGracePeriodMs>0){let e=this.options.healthCheckGracePeriodMs;this.logger?.log(`Waiting ${e}ms grace period for health checks to complete...`,"info"),await Promise.race([this.healthCheckPromise,new Promise((l)=>setTimeout(l,e))]);let u=this.providerRegistry.getProviderStatus(),a=Array.from(u.values()).filter((l)=>l.status==="available"&&l.lastChecked).length;this.logger?.log(`Grace period complete: ${a}/${u.size} providers checked`,"info")}}catch(e){this.logger?.log(`Failed to initialize LLM providers: ${e}`,"error")}}async initialize(){if(this.isDirectoryInitialized||!this.sentinelDir)return;try{await lJ.mkdir(this.sentinelDir,{recursive:!0}),this.isDirectoryInitialized=!0,this.logger?.log(`[SentinelManager] Created/verified sentinel directory at ${this.sentinelDir}`,"debug")}catch(t){this.logger?.log(`[SentinelManager] Failed to create directory ${this.sentinelDir}: ${t}. Running without persistence.`,"info"),this.sentinelDir=void 0}}async _safelyExecute(t,e){try{await e(),this.sentinelFailureCounts.set(t,0)}catch(u){let a=this.sentinelFailureCounts.get(t)||0;if(this.sentinelFailureCounts.set(t,a+1),u instanceof rt){this.logger?.log(`[SentinelManager] Sentinel ${t} threw fatal error (${u.errorType}): ${u.message}`,"error");let l=this.sentinels.find((i)=>i.getId()===t);if(l&&await this.shouldUnloadSentinel(l,u))await this.unloadSentinel(t,"fatal-error",u.errorType);else this.logger?.log(`[SentinelManager] Keeping sentinel ${t} despite fatal error based on policy`,"info")}else{let l=this.sentinelConfigs.get(t),i=this.sentinelFailureCounts.get(t)||0;if(this.logger?.log(`[SentinelManager] Sentinel ${t} failed (${i} consecutive): ${u}`,"error"),!l?.conversational){let o=l?.errorHandling?.maxConsecutiveFailures??3;if(i>=o)this.logger?.log(`[SentinelManager] Unloading non-conversational sentinel ${t} after ${i} consecutive failures (threshold: ${o})`,"info"),await this.unloadSentinel(t,"consecutive-failures")}}}}async loadSentinelsForCodon(t,e,u={}){let{configDirectory:a,runStartTime:l,executionPath:i,outputPathsMap:o,llmCallOverride:d,llmObjectCallOverride:m,onExecute:_}=u;await this.unloadAllSentinels("codon-complete"),this.codonId=e,this.executionPath=i,await this.initialize();let n=!!(d||m),r=!n&&this.providerRegistry&&Array.from(this.providerRegistry.getProviderStatus().values()).some((c)=>c.status==="available");for(let c of t){let x;try{let I=c.model?.includes("/");if(!n&&r&&I){this.logger?.log(`Checking availability of model ${c.model} for sentinel ${c.id}`,"debug");let Q=this.providerRegistry.getModelInfo(c.model);if(!Q.success){this.logger?.log(`Skipping sentinel ${c.id}: Model ${c.model} not found in registry`,"info");continue}let A=Q.info.providerId,F=this.providerRegistry.getProviderStatus().get(A);if(!F||F.status!=="available"){this.logger?.log(`Skipping sentinel ${c.id}: Provider '${A}' for model ${c.model} is not configured (missing API key?)`,"info");continue}if(F.status==="available"&&!F.healthy){let L=F.lastChecked?`health check failed: ${F.error}`:"health check pending";this.logger?.log(`Skipping sentinel ${c.id}: Provider '${A}' for model ${c.model} is not healthy (${L})`,"info");continue}}let s=async(Q,V)=>{if(!c.model)throw new rt(Q,`Model configuration required for sentinel ${Q}`,"configuration",!0);let A=this.providerRegistry.getProviderForModel(c.model);if(!A.success)throw new rt(Q,`Model ${c.model} is not available: ${A.reason}`,"configuration",!0);let{model:F,...L}=V,y=await oJ({model:A.model,...L}),pt={stop:"stop",length:"length","content-filter":"content-filter","tool-calls":"tool-calls",error:"error"}[y.finishReason]??"other";return{text:y.text,finishReason:pt,usage:{inputTokens:y.usage?.inputTokens||0,outputTokens:y.usage?.outputTokens||0}}},k;if(c.model&&r&&I){let Q=this.providerRegistry.getModelInfo(c.model);if(Q.success&&Q.info.cost){let V=Q.info.cost;if(V.input!==void 0&&V.output!==void 0)k={input:V.input,output:V.output}}}let g;if(c.structuredOutput&&r&&I)g=async(Q,V)=>{if(!c.model)throw new rt(Q,`Model required for ${Q}`,"configuration",!0);let A=this.providerRegistry.getProviderForModel(c.model);if(!A.success)throw new rt(Q,`Model ${c.model} not available: ${A.reason}`,"configuration",!0);let F=this.providerRegistry.getModelInfo(c.model);if(F.success&&F.info.tool_call===!1)throw new rt(Q,`Model ${c.model} doesn't support structured output (no tool_call capability)`,"configuration",!0);let{model:L,...y}=V,G=await iJ({model:A.model,...y}),mt={stop:"stop",length:"length","content-filter":"content-filter",error:"error"}[G.finishReason]??"other";return{object:G.object,finishReason:mt,usage:{inputTokens:G.usage?.inputTokens||0,outputTokens:G.usage?.outputTokens||0}}};let f=o?.get(c.id),h=d||(r&&I?s:async()=>{throw Error("No LLM provider available")}),B=m||(c.structuredOutput&&r&&I?g:async()=>{throw Error("No LLM provider available")});x=new Jd(c,e,h,this.logger,this.sentinelDir,a,l,_,k,B,i,f,this.eventCallback),this.sentinels.push(x),this.sentinelConfigs.set(c.id,c),this.sentinelFailureCounts.set(c.id,0),this.logger?.log(`[SentinelManager] Loaded sentinel '${c.id}' for codon '${e}'`,"info")}catch(I){if(I instanceof rt){this.logger?.log(`Fatal error loading sentinel ${c.id}: ${I.message}`,"error");continue}this.logger?.log(`[SentinelManager] Failed to load sentinel ${c.id}: ${I}`,"error")}}this.logger?.log(`Loaded ${this.sentinels.length} sentinels for codon ${e}`,"info")}async handleEvent(t){let e=Array.from(this.sentinels.values()).map((u)=>this._safelyExecute(u.getId(),()=>u.handleEvent(t)));await Promise.allSettled(e)}async completeAllWork(){let t=Array.from(this.sentinels.values()).map((e)=>this._safelyExecute(e.getId(),()=>e.completeAllWork()));await Promise.allSettled(t)}async shutdown(){await this.completeAllWork(),await this.unloadAllSentinels("shutdown"),this.sentinelConfigs.clear(),this.sentinelFailureCounts.clear(),this.logger?.log("[SentinelManager] Shutdown complete","debug")}getSentinelCount(){return this.sentinels.length}getSentinelIds(){return this.sentinels.map((t)=>t.getId())}getSentinelCosts(){let t=new Map;for(let e of this.sentinels)t.set(e.getId(),e.getTotalCost());return t}getSentinelStates(){return this.sentinels.map((t)=>t.getSentinelState())}eventCallback;setEventCallback(t){this.eventCallback=t,this.logger?.log("[SentinelManager] Event callback registered","debug")}async shouldUnloadSentinel(t,e){let u=t.getId(),a=this.sentinelConfigs.get(u);if(!a)return this.logger?.log(`[SentinelManager] Cannot find config for sentinel ${u}, defaulting to unload`,"error"),!0;if(e.shouldUnload)return this.logger?.log(`[SentinelManager] Unloading ${u} - error explicitly requested unload`,"info"),!0;if(e.errorType==="template"||e.errorType==="configuration")return this.logger?.log(`[SentinelManager] Unloading ${u} - ${e.errorType} errors will recur on every execution`,"info"),!0;if(e.errorType==="corruption")if(a.conversational){let l=a.conversational.continueOnError===!0;return this.logger?.log(`[SentinelManager] Conversational sentinel ${u} corruption error - continueOnError: ${l}`,"info"),!l}else return!1;if(e.errorType==="resource")return this.logger?.log(`[SentinelManager] Not unloading ${u} - resource errors are often transient`,"info"),!1;return!1}async unloadSentinel(t,e="codon-complete",u){let a=this.sentinels.findIndex((d)=>d.getId()===t);if(a===-1){this.logger?.log(`[SentinelManager] Cannot unload sentinel ${t} - not found`,"error");return}let l=this.sentinels[a],i=l.getTotalCost(),o=l.getSentinelState();if(this.eventCallback&&this.codonId)this.eventCallback({id:z(J()),timestamp:new Date().toISOString(),type:"sentinel.unloaded",data:{sentinelId:t,codonId:this.codonId,reason:e,errorType:u,finalCost:i,llmCallCount:o.llmCallCount}});try{l.destroy()}catch(d){this.logger?.log(`[SentinelManager] Error during sentinel ${t} cleanup: ${d}`,"error")}this.sentinels.splice(a,1),this.logger?.log(`[SentinelManager] Unloaded sentinel ${t}. Remaining sentinels: ${this.sentinels.length}`,"info")}async unloadAllSentinels(t){let e=this.sentinels.map((u)=>u.getId());for(let u of e)await this.unloadSentinel(u,t)}}import _0 from"node:fs";import Vd from"node:path";class Wd{codonConfigs;constructor(t){this.codonConfigs=t}buildInitialPlan(){let t=[];for(let e=0;e<this.codonConfigs.length;e++){let u=this.codonConfigs[e];if(u.type==="loop")t.push(...this.createIterationPlan(u,0));else t.push({codon:u,codonId:at(u.id)})}return t}expandNextIteration(t){let{currentPlan:e,completedCodonId:u,contextExceeded:a=!1}=t,l=e.findIndex((x)=>x.codonId===u);if(l<0)throw Error(`Codon not found in plan: ${u}`);let i=e[l],o=i.loopContext,d=o?.loopId,m=this.codonConfigs.find((x)=>x.type==="loop"&&x.id===d);if(!m||!o)throw Error(`Not in a loop: ${i.codonId}`);let{iteration:_,codonIndexInLoop:n}=o;if(a&&m.terminateOn.type==="contextExceeded"){let x=e.findIndex((I,s)=>{if(s<=l)return!1;if(!I.loopContext)return!0;if(I.loopContext.loopId!==d)return!0;if(I.loopContext.iteration!==_)return!0;return!1});if(x===-1)return e.slice(0,l+1);return[...e.slice(0,l+1),...e.slice(x)]}if(n!==m.codons.length-1)return e;if(m.terminateOn.type==="iterationLimit"){let{limit:x}=m.terminateOn;if(_>=x-1)return e}if(m.terminateOn.type==="contextExceeded");let c=this.createIterationPlan(m,_+1);return[...e.slice(0,l+1),...c,...e.slice(l+1)]}validatePlan(t){let e=t.map((a)=>a.codonId),u=e.filter((a,l)=>e.indexOf(a)!==l);if(u.length>0)throw Error(`Duplicate codon IDs after loop expansion: ${u.join(", ")}`);for(let a of t)if(a.loopContext){let{loopId:l,codonIndexInLoop:i}=a.loopContext,o=this.codonConfigs.find((d)=>d.type==="loop"&&d.id===l);if(!o)throw Error(`Loop not found for codon ${a.codonId}: ${l}`);if(i>=o.codons.length)throw Error(`Codon index ${i} out of bounds for loop ${o.id}`)}}createIterationPlan(t,e){return t.codons.map((u,a)=>({codon:u,codonId:this.generateIterationCodonId(at(u.id),e),loopContext:{loopId:at(t.id),iteration:e,codonIndexInLoop:a}}))}generateIterationCodonId(t,e){return at(`${t}#${e}`)}}function dJ(t){return typeof t==="object"&&t!==null&&"claudePid"in t&&"claudeLogPath"in t&&typeof t.claudePid==="number"&&typeof t.claudeLogPath==="string"}function pJ(t){return typeof t==="object"&&t!==null&&"claudeSessionId"in t&&typeof t.claudeSessionId==="string"}function mJ(t){return typeof t==="object"&&t!==null&&"checkpointSha"in t&&typeof t.checkpointSha==="string"}function nJ(t){let e=t;return typeof t==="object"&&t!==null&&"exitCode"in t&&typeof e.exitCode==="number"&&"failureReason"in t&&typeof e.failureReason==="object"&&"failedDuring"in t&&typeof e.failedDuring==="string"}function _J(t){return typeof t==="object"&&t!==null&&"skippedDuring"in t&&typeof t.skippedDuring==="string"}class n0 extends Error{transitionTo;missingFields;constructor(t,e){super(`Missing required metadata fields for transition to ${t}: ${e.join(", ")}`);this.transitionTo=t;this.missingFields=e;this.name="MetadataValidationError"}}function Rx(t,e){switch(t){case"initializing":if(!dJ(e)){let u=[];if(!e||typeof e!=="object")u.push("metadata object");else{if(!("claudePid"in e))u.push("claudePid");if(!("claudeLogPath"in e))u.push("claudeLogPath")}throw new n0(t,u)}break;case"running":if(!pJ(e)){let u=[];if(!e||typeof e!=="object")u.push("metadata object");else if(!("claudeSessionId"in e))u.push("claudeSessionId");throw new n0(t,u)}break;case"completed":if(!mJ(e)){let u=[];if(!e||typeof e!=="object")u.push("metadata object");else if(!("checkpointSha"in e))u.push("checkpointSha");throw new n0(t,u)}break;case"failed":if(!nJ(e)){let u=[];if(!e||typeof e!=="object")u.push("metadata object");else{if(!("exitCode"in e))u.push("exitCode");if(!("failureReason"in e))u.push("failureReason");if(!("failedDuring"in e))u.push("failedDuring")}throw new n0(t,u)}break;case"skipped":if(!_J(e)){let u=[];if(!e||typeof e!=="object")u.push("metadata object");else if(!("skippedDuring"in e))u.push("skippedDuring");throw new n0(t,u)}break;case"preparing":case"starting":case"completing-sentinels":break}}$0();Yt();class Ql extends Error{constructor(t,e){super(`Invalid transition from ${t} to ${e}`);this.name="InvalidTransitionError"}}class Sx extends Error{constructor(t,e){super(`State persistence failed during ${t}: ${e.message}`);this.name="PersistenceError",this.cause=e}}class Yd extends Ot{hankweaveDir;codonConfigs;state;statePath;stateBackupPath;logger;transitionQueue=[];isProcessing=!1;planner;costCache={total:0,currentRun:0,lastUpdated:null};constructor(t,e,u){super();this.hankweaveDir=t;this.codonConfigs=u;this.logger=e,this.statePath=Vd.join(t,"state.json"),this.stateBackupPath=Vd.join(t,"state.json.bak"),this.planner=new Wd(u||[]),this.state={runs:[],currentRunId:null,executionPlan:[]}}async initialize(){try{if(_0.existsSync(this.statePath)){let t=await this.loadAndValidateStateFile(this.statePath);this.restoreStateFromParsed(t,"primary")}else this.logger.log("No state file found, starting fresh")}catch(t){this.logger.log(`Failed to load state: ${t}`,"error"),await this.tryRestoreFromBackup()}await this.detectCrashedRuns()}async loadAndValidateStateFile(t){let e=await _0.promises.readFile(t,"utf-8"),u=JSON.parse(e),a=this.validate(u);if(!a.valid){if(this.logger.log("State validation errors found:","error"),a.errors.forEach((l)=>this.logger.log(` - ${l.type}: ${l.message}`,"error")),a.errors.some((l)=>l.type==="corrupted_data"))throw Error("State file corrupted")}return a.warnings.forEach((l)=>this.logger.log(`Warning - ${l.type}: ${l.message}`,"info")),u}restoreStateFromParsed(t,e){this.state=t,this.rebuildCostCache();let u=e==="primary"?"":" from backup";this.logger.log(`Restored execution plan${u} with ${t.executionPlan.length} codons`);let a=e==="primary"?"Loaded existing state file":"Recovered from backup state file";this.logger.log(a)}async tryRestoreFromBackup(){if(!_0.existsSync(this.stateBackupPath))return;try{let t=await this.loadAndValidateStateFile(this.stateBackupPath);this.restoreStateFromParsed(t,"backup")}catch{this.logger.log("Backup also corrupted, starting fresh","error")}}getState(){return this.state}getCodonById(t){return this.state.executionPlan.find((e)=>e.codonId===t)||null}buildInitialPlan(){let t=this.planner.buildInitialPlan();this.planner.validatePlan(t),this.state.executionPlan=t,this.logger.log(`Built execution plan with ${t.length} codons`,"debug")}async expandNextIterationForCodon(t){let{codonId:e,contextExceeded:u=!1}=t,a=this.state.executionPlan,i=a.find((d)=>d.codonId===e)?.loopContext;if(!i)return;let o=this.planner.expandNextIteration({currentPlan:a,completedCodonId:e,contextExceeded:u});if(o.length>a.length){let d=o.length-a.length,_=this.codonConfigs?.find((r)=>r.type==="loop"&&r.id===i.loopId)?.name??i.loopId,n=i.iteration+1;this.logger.log(`[STATE-MANAGER] Expanded loop '${_}' - added iteration ${n} (${d} codons)`,"info")}else{let d=this.codonConfigs?.find((m)=>m.type==="loop"&&m.id===i.loopId);if(d&&d.type==="loop"){let m=d.terminateOn.type,_=i.iteration+1,n;if(u&&m==="contextExceeded")n="context exceeded";else if(m==="iterationLimit")n=`reached iteration limit (${d.terminateOn.limit})`;else n="termination condition met";this.logger.log(`[STATE-MANAGER] Loop '${d.name}' terminated after ${_} iteration(s) - ${n}`,"info")}}this.planner.validatePlan(o),this.state.executionPlan=o,await this.save()}isContextExceededAcceptable(t){let u=this.state.executionPlan.find((i)=>i.codonId===t);if(!u?.loopContext)return!1;let{loopId:a}=u.loopContext,l=this.codonConfigs?.find((i)=>i.type==="loop"&&i.id===a);if(!l||l.type!=="loop")return!1;return l.terminateOn.type==="contextExceeded"}transition(t){this.transitionQueue.push(t),this.processQueue()}async processQueue(){if(this.isProcessing)return;this.isProcessing=!0;while(this.transitionQueue.length>0){let t=this.transitionQueue.shift();if(!t)break;try{this.validateTransition(t);let e=this.applyTransition(this.state,t);if(this.state=e,this.updateCostCache(t),this.updateExecutionPlan(t),await this.save(),this.emit("stateChanged",t),this.logger.log(`State transition: ${t.type}`),t.type==="CodonTransitioned"&&t.data.to==="running")this.emit("codonRunning",{runId:t.data.runId,codonId:t.data.codonId,from:t.data.from,to:"running",metadata:t.data.metadata})}catch(e){if(this.logger.log(`State transition failed: ${e}`,"error"),this.emit("transitionError",{event:t,error:e}),e instanceof Ql);else break}}this.isProcessing=!1}updateCostCache(t){if(t.type==="CostsUpdated"||t.type==="CostsIncremented"||t.type==="CodonFinalCostSet")this.rebuildCostCache();else if(t.type==="RunStarted")this.costCache.currentRun=0,this.rebuildCostCache();else if(t.type==="RunCompleted"||t.type==="RunFailed")this.costCache.currentRun=0}updateExecutionPlan(t){if(t.type==="RunStarted"){if(t.data.startingConditions.type!=="continuation")this.buildInitialPlan()}}rebuildCostCache(){this.costCache.total=this.state.runs.reduce((e,u)=>{return e+u.codons.reduce((a,l)=>{return a+Il(l)},0)},0);let t=this.getCurrentRun();if(t)this.costCache.currentRun=t.codons.reduce((e,u)=>{return e+Il(u)},0)}validate(t){let e=[],u=[];if(!this.isValidStateStructure(t))return e.push({type:"corrupted_data",message:"State file has invalid structure"}),{valid:!1,errors:e,warnings:u};let a=t;if(a.currentRunId&&!a.runs.find((i)=>i.runId===a.currentRunId))e.push({type:"missing_run",message:`Current run ${a.currentRunId} not found`});let l=Vd.join(this.hankweaveDir,"runs");if(_0.existsSync(l)){let i=_0.readdirSync(l),o=new Set(a.runs.map((d)=>d.runId));for(let d of i)if(!o.has(d))u.push({type:"orphaned_folder",message:`Found run folder without state entry: ${d}`})}return{valid:e.length===0,errors:e,warnings:u}}isValidStateStructure(t){if(!t||typeof t!=="object")return!1;let e=t,u=Array.isArray(e.runs),a=e.currentRunId===null||typeof e.currentRunId==="string",l=Array.isArray(e.executionPlan);return u&&a&&l}getCurrentRunCost(){return this.costCache.currentRun}getTotalCost(){return this.costCache.total}getCurrentRun(){if(!this.state.currentRunId)return null;return this.state.runs.find((t)=>t.runId===this.state.currentRunId)||null}getCurrentlyRunningCodon(){let t=this.getCurrentRun();if(!t)return null;for(let e=t.codons.length-1;e>=0;e--){let u=t.codons[e];if(!Ft(u.status))return u}return null}getCodonInCurrentRun(t){let e=this.getCurrentRun();if(!e)return null;return e.codons.find((u)=>u.codonId===t)||null}async getNextCodonToExecute(){let t=await this.getExecutionThread();return this.logger.log(`[getNextCodonToExecute] Execution thread determined next codon: ${t.nextCodonId||"none"}`,"debug"),t.nextCodonId||null}getRun(t){return this.state.runs.find((e)=>e.runId===t)||null}async getCodonHistory(t){let e=[];for(let u of this.state.runs)for(let a of u.codons)if(a.codonId===t)e.push({run:u,codon:a});return e}getCostSince(t){let e=!1,u=0;for(let a of this.state.runs){if(a.runId===t)e=!0;if(e)for(let l of a.codons)u+=Il(l)}return u}canContinueFrom(t,e){let u=this.getRun(t);if(!u)return!1;if(e)return u.codons.find((l)=>l.codonId===e)?.status==="completed"||!1;return!0}getCheckpointForContinuation(t,e){let u=this.getRun(t);if(!u)return null;if(!e){let l=u.codons[0];if(l&&"rigSetupCheckpoint"in l&&l.rigSetupCheckpoint)return l.rigSetupCheckpoint;return null}let a=u.codons.find((l)=>l.codonId===e);if(!a||a.status!=="completed")return null;return a.completionCheckpoint}getRunById(t){return this.state.runs.find((e)=>e.runId===t)||null}checkpointGit;setCheckpointGit(t){this.checkpointGit=t}async getExecutionThread(t,e=!0){let u=e&&this.checkpointGit?.isInitialized()?await this.getCheckpointDataMap():void 0,a;if(this.state.executionPlan.length>0)a=this.state.executionPlan;else a=(this.codonConfigs||[]).map((i)=>({codon:i.type==="loop"?i.codons[0]:i,codonId:at(i.id),loopContext:void 0}));let l=a!==this.state.executionPlan?{...this.state,executionPlan:a}:this.state;return F0(l,u,t,this.logger)}async getCheckpointDataMap(){let t=await this.getAllCheckpoints();if(!t)return new Map;let e=new Map;for(let u of t)e.set(u.sha,{message:u.message,timestamp:u.timestamp,branch:u.branch});return e}async getAllCheckpoints(){if(!this.checkpointGit?.isInitialized())return null;try{return await this.checkpointGit.getAllCheckpoints()}catch(t){return this.logger.log(`Failed to get all checkpoints: ${t}`,"error"),null}}validateTransition(t){if(t.type==="CodonTransitioned"){let{from:e,to:u,metadata:a}=t.data;if(!qx[e].includes(u))throw new Ql(e,u);try{Rx(u,a)}catch(i){if(i instanceof n0)throw this.logger.log(`Metadata validation failed for ${e} → ${u}: ${i.message}`,"error"),i;throw i}}}applyTransition(t,e){let u=JSON.parse(JSON.stringify(t));switch(e.type){case"RunStarted":{let a={runId:e.data.runId,runFolder:e.data.runFolder,gitBranch:e.data.gitBranch,startingConditions:e.data.startingConditions,codons:[],status:"running",startTime:new Date().toISOString(),serverPid:e.data.serverPid};u.runs.unshift(a),u.currentRunId=e.data.runId;break}case"InitialCheckpointSet":{u.initialCheckpoint=e.data.sha;break}case"RunCompleted":{let a=u.runs.find((l)=>l.runId===e.data.runId);if(a)a.status="completed",a.endTime=new Date().toISOString();u.currentRunId=null;break}case"RunFailed":{let a=u.runs.find((l)=>l.runId===e.data.runId);if(a)a.status="failed",a.endTime=new Date().toISOString();u.currentRunId=null;break}case"RunCrashed":{let a=u.runs.find((l)=>l.runId===e.data.runId);if(a){a.status="crashed",a.endTime=e.data.detectedAt;let l=a.codons.find((i)=>!Ft(i.status));if(l){let o=l.status==="running"?l:null,d={codonId:l.codonId,startTime:l.startTime,status:"failed",endTime:e.data.detectedAt,failedDuring:l.status,exitCode:-1,failureReason:{type:"unknown",retriable:!1,message:"Server crashed"},partialCost:"currentCost"in l?l.currentCost:0,partialTokens:"currentTokens"in l?l.currentTokens:{inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0},sentinels:o?.sentinels?{executed:o.sentinels.loaded,totalCost:o.sentinels.totalCost}:void 0};if("rigSetupCheckpoint"in l)d.rigSetupCheckpoint=l.rigSetupCheckpoint;if("claudePid"in l)d.claudePid=l.claudePid;if("claudeSessionId"in l)d.claudeSessionId=l.claudeSessionId;if("claudeLogPath"in l)d.claudeLogPath=l.claudeLogPath;if("previousSessionId"in l)d.previousSessionId=l.previousSessionId;if("loopContext"in l)d.loopContext=l.loopContext;let m=a.codons.indexOf(l);a.codons[m]=d}}break}case"CodonStarted":{let a=u.runs.find((l)=>l.runId===e.data.runId);if(a){let l={codonId:e.data.codonId,startTime:new Date().toISOString(),status:"preparing",loopContext:e.data.loopContext};a.codons.push(l)}break}case"CodonTransitioned":{let a=u.runs.find((m)=>m.runId===e.data.runId);if(!a)break;let l=-1;for(let m=a.codons.length-1;m>=0;m--){let _=a.codons[m];if(_.codonId===e.data.codonId&&!Ft(_.status)){l=m;break}}if(l===-1)l=a.codons.findIndex((m)=>m.codonId===e.data.codonId&&m.status===e.data.from);if(l===-1)break;let i=a.codons[l];if(i.status!==e.data.from)throw new Ql(i.status,e.data.to);let{to:o,metadata:d}=e.data;switch(o){case"starting":{let m={codonId:i.codonId,startTime:i.startTime,status:"starting",rigSetupCheckpoint:d?.checkpointSha,loopContext:i.loopContext};a.codons[l]=m;break}case"initializing":{if(!d||typeof d!=="object"||!("claudePid"in d)||!("claudeLogPath"in d))throw Error("Invalid metadata for initializing transition");let m={...i,status:"initializing",claudePid:d.claudePid,claudeLogPath:d.claudeLogPath,previousSessionId:d.previousSessionId||("previousSessionId"in i?i.previousSessionId:void 0)};a.codons[l]=m;break}case"running":{if(!d||typeof d!=="object"||!("claudeSessionId"in d))throw Error("Invalid metadata for running transition");let m={...i,status:"running",claudeSessionId:d.claudeSessionId,currentCost:0,currentTokens:{inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0},assistantMessageCount:0};a.codons[l]=m;break}case"completing-sentinels":{let _={...i,status:"completing-sentinels"};a.codons[l]=_;break}case"completed":{let m=i,_={...m,status:"completed",endTime:new Date().toISOString(),exitCode:0,finalCost:"currentCost"in i?i.currentCost:0,finalTokens:"currentTokens"in i?i.currentTokens:{inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0},resultMessageReceived:d?.resultMessageReceived||!1,completionCheckpoint:d?.checkpointSha||"",sentinels:m.sentinels?{executed:m.sentinels.loaded,totalCost:m.sentinels.totalCost}:void 0};a.codons[l]=_;break}case"failed":{if(!d||typeof d!=="object"||!("failedDuring"in d)||!("exitCode"in d)||!("failureReason"in d))throw Error("Invalid metadata for failed transition");let m=i.status==="running"||i.status==="completing-sentinels"?i:null,_={codonId:i.codonId,startTime:i.startTime,status:"failed",endTime:new Date().toISOString(),failedDuring:d.failedDuring,exitCode:d.exitCode,failureReason:d.failureReason,partialCost:"currentCost"in i?i.currentCost:0,partialTokens:"currentTokens"in i?i.currentTokens:{inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0},sentinels:m?.sentinels?{executed:m.sentinels.loaded,totalCost:m.sentinels.totalCost}:void 0};if("rigSetupCheckpoint"in i)_.rigSetupCheckpoint=i.rigSetupCheckpoint;if("claudePid"in i)_.claudePid=i.claudePid;if("claudeSessionId"in i)_.claudeSessionId=i.claudeSessionId;if("claudeLogPath"in i)_.claudeLogPath=i.claudeLogPath;if("previousSessionId"in i)_.previousSessionId=i.previousSessionId;if("loopContext"in i)_.loopContext=i.loopContext;if(d?.checkpointSha)_.errorCheckpoint=d.checkpointSha;a.codons[l]=_;break}case"skipped":{if(!d||typeof d!=="object"||!("skippedDuring"in d))throw Error("Invalid metadata for skipped transition");let m=i.status==="running"||i.status==="completing-sentinels"?i:null,_={codonId:i.codonId,startTime:i.startTime,status:"skipped",endTime:new Date().toISOString(),skippedDuring:d.skippedDuring,partialCost:"currentCost"in i?i.currentCost:0,partialTokens:"currentTokens"in i?i.currentTokens:{inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0},sentinels:m?.sentinels?{executed:m.sentinels.loaded,totalCost:m.sentinels.totalCost}:void 0};if("rigSetupCheckpoint"in i)_.rigSetupCheckpoint=i.rigSetupCheckpoint;if("claudePid"in i)_.claudePid=i.claudePid;if("claudeSessionId"in i)_.claudeSessionId=i.claudeSessionId;if("claudeLogPath"in i)_.claudeLogPath=i.claudeLogPath;if("previousSessionId"in i)_.previousSessionId=i.previousSessionId;if("loopContext"in i)_.loopContext=i.loopContext;if("assistantMessageCount"in i)_.assistantMessageCount=i.assistantMessageCount;if(d?.checkpointSha)_.skipCheckpoint=d.checkpointSha;a.codons[l]=_;break}}break}case"CostsUpdated":{let a=u.runs.find((i)=>i.runId===e.data.runId);if(!a)break;let l=a.codons.find((i)=>i.codonId===e.data.codonId);if(!l)break;if(l.status==="running")l.currentCost=e.data.cost,l.currentTokens=e.data.tokens;break}case"CostsIncremented":{let a=u.runs.find((i)=>i.runId===e.data.runId);if(!a)break;let l=a.codons.slice().reverse().find((i)=>i.codonId===e.data.codonId&&i.status==="running");if(l&&l.status==="running")l.currentCost+=e.data.costDelta,l.currentTokens.inputTokens+=e.data.tokensDelta.inputTokens,l.currentTokens.outputTokens+=e.data.tokensDelta.outputTokens,l.currentTokens.cacheCreationTokens+=e.data.tokensDelta.cacheCreationTokens,l.currentTokens.cacheReadTokens+=e.data.tokensDelta.cacheReadTokens;break}case"AssistantMessageCountUpdated":{let a=u.runs.find((i)=>i.runId===e.data.runId);if(!a)break;let l=a.codons.find((i)=>i.codonId===e.data.codonId);if(!l)break;if(l.status==="running")l.assistantMessageCount=e.data.newCount;else if(l.status==="skipped"&&"assistantMessageCount"in l)l.assistantMessageCount=e.data.newCount;break}case"CheckpointCreated":{let a=u.runs.find((i)=>i.runId===e.data.runId);if(!a)break;let l=a.codons.find((i)=>i.codonId===e.data.codonId);if(!l)break;switch(e.data.checkpointType){case"rig-setup":if("rigSetupCheckpoint"in l||l.status==="preparing"||l.status==="starting")l.rigSetupCheckpoint=e.data.sha;break;case"completed":if(l.status==="completed")l.completionCheckpoint=e.data.sha;break;case"error":if(l.status==="failed")l.errorCheckpoint=e.data.sha;break;case"skipped":if(l.status==="skipped")l.skipCheckpoint=e.data.sha;break}break}case"CodonFinalCostSet":{let a=u.runs.find((i)=>i.runId===e.data.runId);if(!a)break;let l=a.codons.slice().reverse().find((i)=>i.codonId===e.data.codonId&&i.status==="running");if(l&&l.status==="running")l.currentCost=e.data.finalCost,l.currentTokens=e.data.finalTokens;break}case"SentinelStatesUpdated":{let a=u.runs.find((i)=>i.runId===e.data.runId);if(!a)break;let l=a.codons.slice().reverse().find((i)=>i.codonId===e.data.codonId&&(i.status==="starting"||i.status==="initializing"||i.status==="running"||i.status==="completing-sentinels"));if(l&&(l.status==="starting"||l.status==="initializing"||l.status==="running"||l.status==="completing-sentinels"))l.sentinels={loaded:e.data.sentinelStates,totalCost:e.data.totalCost};break}}return u}async save(){try{if(_0.existsSync(this.statePath))await _0.promises.copyFile(this.statePath,this.stateBackupPath);let t=`${this.statePath}.tmp`;await _0.promises.writeFile(t,JSON.stringify(this.state,null,2),"utf-8"),await ga(t,this.statePath,{logger:this.logger})}catch(t){throw new Sx("save",t)}}async detectCrashedRuns(){for(let t of this.state.runs)if(t.status==="running"&&t.runId!==this.state.currentRunId)try{process.kill(t.serverPid,0)}catch{let u=t.codons[t.codons.length-1]?.status||"unknown";this.transition({type:"RunCrashed",data:{runId:t.runId,detectedAt:new Date().toISOString(),lastCodonStatus:u}})}}async recover(){return this.state={runs:[],currentRunId:null,executionPlan:[]},await this.save(),{success:!0,method:"fresh",dataLoss:!0,message:"Started with fresh state"}}async waitForPendingTransitions(){while(this.isProcessing||this.transitionQueue.length>0)await new Promise((t)=>setTimeout(t,10))}}import{createReadStream as Hd,promises as vl}from"node:fs";import*as ql from"node:path";import{createInterface as Ox}from"node:readline";class zd{eventsFilePath;totalEvents=0;constructor(t){this.eventsFilePath=ql.join(t,"events.jsonl")}async initialize(){await vl.mkdir(ql.dirname(this.eventsFilePath),{recursive:!0});try{await vl.access(this.eventsFilePath)}catch(t){if(t.code==="ENOENT")await vl.writeFile(this.eventsFilePath,"");else throw t}this.totalEvents=await this.countExistingEvents()}async append(t){await this.appendMany([t])}async appendMany(t){let e=0,u=[],a=1e4,l=async()=>{if(u.length===0)return;let i=`${u.join(`
|
|
251
|
+
`)}
|
|
252
|
+
`;u.length=0,await vl.appendFile(this.eventsFilePath,i)};for(let i of t)if(u.push(JSON.stringify(i)),e+=1,u.length>=a)await l();if(u.length>0)await l();this.totalEvents+=e}async getRecentEvents(t){if(t<=0)return{events:[],totalEvents:this.totalEvents};let e=[];try{let u=Hd(this.eventsFilePath,{encoding:"utf-8"}),a=Ox({input:u,crlfDelay:Number.POSITIVE_INFINITY});for await(let l of a){let i=l.trim();if(i.length===0)continue;let o=JSON.parse(i);if(e.length===t)e.shift();e.push(o)}}catch(u){if(u.code!=="ENOENT")throw u}return{events:e,totalEvents:this.totalEvents}}async getTotalEvents(){return this.totalEvents}async createReadStream(){return Hd(this.eventsFilePath,{encoding:"utf-8"})}async countExistingEvents(){let t=0;try{let e=Hd(this.eventsFilePath,{encoding:"utf-8"}),u=Ox({input:e,crlfDelay:Number.POSITIVE_INFINITY});for await(let a of u){if(a.trim().length===0)continue;t+=1}}catch(e){if(e.code!=="ENOENT")throw e}return t}}$0();class Px extends Error{severity;code;context;constructor(t,e,u,a){super(t);this.severity=e;this.code=u;this.context=a;this.name="HankweaveError"}}class H2 extends Px{constructor(t,e){super("Claude API request timed out","codon","API_TIMEOUT_ERROR",{...e,codonId:t});this.name="APITimeoutError"}}class Gl extends Error{exitCode;stdout;stderr;constructor(t,e,u,a){super(t);this.exitCode=e;this.stdout=u;this.stderr=a;this.name="CommandError"}}z2();Yt();class bd extends Ot{server=null;clients=new Map;config;logger;proxyRunner=null;stateManager;currentRunId=null;heartbeatInterval;eventJournal;eventJournalAppendQueue=Promise.resolve();pendingToolUses=new Map;watchedPatterns=[];currentCodon;recentFileAccess;codonRunners=new Map;serverStartTime;isShuttingDown=!1;isSkippingCodon=!1;checkpointGit=null;checkpointingEnabled=!0;codonFailureReason;isForceStopping=!1;resultMessageReceived=!1;isRollingBack=!1;READ_ONLY_COMMANDS=new Set(["checkpoint.list","server.shutdown","ping","history.sync"]);sentinelManager;sentinelConfigLoader;currentCodonSentinels=new Set;llmRegistry;constructor(t){super();this.config={...Bu,...t},this.logger=new e2($t.join(this.config.executionPath,this.config.serverLogFile)),this.serverStartTime=new Date,this.config.lockFile=$t.join(this.config.executionPath,this.config.lockFile);let e=$t.join(this.config.executionPath,".hankweave");this.stateManager=new Yd(e,this.logger,this.config.codons),this.eventJournal=new fd(new zd($t.join(e,"events"))),this.sentinelConfigLoader=new Bd(this.logger),this.sentinelManager=new Kd({logger:this.logger,enablePersistence:this.config.sentinel.enablePersistence,healthCheckGracePeriodMs:this.config.sentinel.healthCheckGracePeriodMs,waitForHealthChecks:this.config.sentinel.waitForAllHealthChecks,rootDirectory:this.config.executionPath}),this.llmRegistry=kt.getInstance(),this.setupStateManagerListeners()}setupStateManagerListeners(){this.stateManager.on("codonRunning",(t)=>{let e=this.stateManager.getCurrentlyRunningCodon();if(e&&"claudeSessionId"in e){let u=this.stateManager.getCodonById(t.codonId);if(u){let l=this.codonRunners.get(t.codonId)?.getPromptFrontmatter();this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"codon.started",data:{codonId:t.codonId,codonName:u.codon.name,codonDescription:u.codon.description,sessionId:e.claudeSessionId,previousSessionId:"previousSessionId"in e?e.previousSessionId:void 0,startTime:e.startTime,promptMetadata:l}})}}}),this.stateManager.on("stateChanged",(t)=>{this.emitStateTransitionEvent(t)}),this.stateManager.on("transitionError",({event:t,error:e})=>{if(e.name==="PersistenceError")this.handleError(e,"state-persistence","fatal")})}setupSentinelEventRouting(){this.on("event",(t)=>{if(d2(t)||p2(t))this.sentinelManager.handleEvent(t).catch((e)=>{this.logger.log(`Error in sentinel event handling: ${e}`,"error")})})}emitStateTransitionEvent(t){let e,u;if("runId"in t.data)e=t.data.runId;if("codonId"in t.data)u=t.data.codonId;let a={id:z(J()),timestamp:new Date().toISOString(),type:"state.transition",data:{transitionType:t.type,runId:e,codonId:u,transition:{type:t.type,data:t.data},resultingState:{currentRunId:this.stateManager.getState().currentRunId,runCount:this.stateManager.getState().runs.length,totalCost:this.stateManager.getTotalCost(),currentRunCost:this.stateManager.getCurrentRunCost()}}};this.emit("event",a)}isProcessRunning(t){try{return process.kill(t,0),!0}catch{return!1}}async start(){if(this.logger.log(`Starting Hankweave Runtime v${this.config.version} in ${this.config.executionPath}`),!this.config.withoutProxy){let e=this.config.port+1;this.logger.log(`Starting proxy server on port ${e}`),this.proxyRunner=new gd("passthrough",e,this.config.anthropicBaseUrl||"https://api.anthropic.com",this.logger),this.proxyRunner.start()}else this.logger.log("Proxy server disabled");if(await this.initializeCheckpoints(),await this.stateManager.initialize(),await this.eventJournal.initialize(),await this.sentinelManager.initialize(),this.sentinelManager.setEventCallback((e)=>{this.emit("event",e)}),this.setupSentinelEventRouting(),dt.existsSync(this.config.lockFile)){let e=dt.readFileSync(this.config.lockFile,"utf-8");try{let u=JSON.parse(e),a=Date.now()-new Date(u.lastHeartbeat).getTime();if(!this.isProcessRunning(u.pid)){if(this.logger.log(`Found lock file from dead process (PID: ${u.pid}), removing...`),dt.unlinkSync(this.config.lockFile),u.runId)this.stateManager.transition({type:"RunCrashed",data:{runId:Ne(u.runId),detectedAt:new Date().toISOString(),lastCodonStatus:"unknown"}})}else if(a>120000){if(this.logger.log(`Found stale lock file (heartbeat age: ${a}ms), removing...`),dt.unlinkSync(this.config.lockFile),u.runId)this.stateManager.transition({type:"RunCrashed",data:{runId:Ne(u.runId),detectedAt:new Date().toISOString(),lastCodonStatus:"unknown"}})}else{let i=this.stateManager.getState();if(i.currentRunId&&i.currentRunId===u.runId)this.currentRunId=Ne(u.runId),this.logger.log(`Recovering run ${this.currentRunId}`);else throw Error(`Server already running (PID: ${u.pid}, Run: ${u.runId})`)}}catch(u){throw Error(`Server already running (PID: ${e}). Remove ${this.config.lockFile} if this is incorrect.`)}}let t=await this.stateManager.getExecutionThread();if(t?.failed)this.logger.log("Execution thread failed, rolling back...","error"),await this.rollbackToLastSuccess(this.config.autostart);if(!t?.failed&&!this.currentRunId){let e=t?.codons.find((a)=>a.codon.status==="completed");if(!e&&t?.codons.length===0){let a=this.stateManager.getState();for(let l of a.runs){if(l.codons.length===0)continue;for(let i=l.codons.length-1;i>=0;i--){let o=l.codons[i];if(o.status==="completed"&&o.completionCheckpoint){this.logger.log(`Thread was empty, found last completed codon by searching state: ${o.codonId} in run ${l.runId}`),e={codon:o,runId:l.runId};break}}if(e)break}}if(e&&e.codon.status==="completed")this.logger.log(`Resuming from last completed codon: ${e.codon.codonId} in run ${e.runId}`),await this.startNewRun({type:"continuation",source:{runId:e.runId,afterCodon:e.codon.codonId,checkpointSha:e.codon.completionCheckpoint},reason:"continue"});else await this.startNewRun();let u=this.stateManager.getCurrentRun();if(u?.gitBranch&&this.checkpointGit)if(u.startingConditions?.type!=="fresh")try{await this.checkpointGit.switchToBranch(u.gitBranch)}catch(l){this.logger.log(`Failed to switch to run branch: ${l}`,"error")}else this.logger.log(`Fresh run ${u.runId} - branch will be created on first checkpoint`)}this.server=Ba({port:this.config.port,websocket:{upgrade:()=>{let e=new Date;return{id:J(),connectionTime:e,lastActivity:e,handshakeComplete:!1}},open:(e)=>this.handleConnection(e),message:(e,u)=>this.handleMessage(e,u),close:(e)=>this.handleClose(e)}}),this.logger.log(`WebSocket server listening on port ${this.config.port}`),process.on("SIGINT",()=>this.shutdown("SIGINT")),process.on("SIGTERM",()=>this.shutdown("SIGTERM")),process.on("uncaughtException",(e)=>{if(this.logger.log(`Uncaught exception: ${e.message}`,"error"),e.stack)this.logger.log(`Stack trace:
|
|
253
|
+
${e.stack}`,"error");this.shutdown("uncaughtException")}),process.on("unhandledRejection",(e,u)=>{if(this.logger.log(`Unhandled rejection at: ${u}, reason: ${e}`,"error"),e instanceof Error){if(this.logger.log(`Error name: ${e.name}`,"error"),this.logger.log(`Error message: ${e.message}`,"error"),e.stack)this.logger.log(`Stack trace:
|
|
254
|
+
${e.stack}`,"error")}else if(e&&typeof e==="object")try{this.logger.log(`Reason object: ${JSON.stringify(e,null,2)}`,"error")}catch{this.logger.log(`Reason (unstringifiable): ${String(e)}`,"error")}this.shutdown("unhandledRejection")})}handleConnection(t){let e=t.data.id;this.logger.log(`Client ${e} connected`),this.clients.set(e,t),this.logger.log(`Client ${e} waiting for handshake`)}async handleHandshake(t,e){let{mode:u,sendPreviousEvents:a=!1}=e.data,l=t.data.id,i=u;this.logger.log(`Client ${l} granted ${i} access`),t.data={...t.data,id:l,mode:i,handshakeComplete:!0};let{events:o,totalEvents:d,hasMore:m}=a?await this.eventJournal.getMostRecentEvents(this.config.handshakeHistoryLimit):{events:[],totalEvents:await this.eventJournal.getTotalEvents(),hasMore:!1};this.logger.log(`Sending ${o.length} events (of ${d} total) to client ${l}`+(a?" (limited history)":" (no history)")+(m?" with additional history available via download":""));let _={type:"handshake.response",data:{clientId:l,mode:i,eventHistory:o,totalEvents:d}};t.send(JSON.stringify(_)),this.logger.log(`Handshake complete for client ${l} (${i})`);let n={id:z(J()),timestamp:new Date().toISOString(),type:"server.ready",data:{serverVersion:this.config.version,executionPath:this.config.executionPath,dataPath:this.config.dataPathInExecutionDir}};if(this.emit("event",n,t),this.logger.log(`[handleHandshake] config.autostart = ${this.config.autostart}`),this.config.autostart)this.logger.log("[handleHandshake] Calling autoStartNextCodon()"),this.autoStartNextCodon().catch((r)=>{this.logger.log(`[handleHandshake] autoStartNextCodon error: ${r}`,"error")});else{let r={id:z(J()),timestamp:new Date().toISOString(),type:"server.idle",data:{reason:"startup",message:"Server ready. Waiting for commands (autostart disabled)."}};this.emit("event",r)}}async handleMessage(t,e){try{t.data.lastActivity=new Date;let u=JSON.parse(e.toString());if(u.type==="handshake"){this.handleHandshake(t,u);return}if(!t.data.handshakeComplete){this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"error",data:{message:"Handshake required before sending commands",fatal:!1}},t);return}let a=vx.safeParse(u);if(!a.success){this.logger.log(`Invalid client command: ${a.error.message}`,"error"),this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"error",data:{message:"Invalid command format",fatal:!1}},t);return}await this.handleCommand(a.data,t)}catch(u){let a=qt(u);if(this.logger.log(`Error handling command: ${a.message}`,"error"),a.stack)this.logger.log(`Stack trace: ${a.stack}`,"error");this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"error",data:{message:`Command execution failed: ${a.message}`,fatal:!1}},t)}}handleClose(t){let e=t.data.id;this.logger.log(`Client ${e} disconnected`),this.clients.delete(e)}async handleCommand(t,e){if(this.logger.log(`Handling command: ${t.type}`),this.isRollingBack&&!this.READ_ONLY_COMMANDS.has(t.type)){this.logger.log(`Client ${e.data.id} attempted state-modifying command while rollback is in progress`,"error"),this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"error",data:{message:"Cannot execute state-modifying commands while rollback is in progress",context:`Attempted command: ${t.type}`,codon:this.currentCodon?.codon.id,fatal:!1,severity:"operation",code:"ROLLBACK_IN_PROGRESS"}},e);return}if(!this.READ_ONLY_COMMANDS.has(t.type)){if(!e.data.handshakeComplete){this.logger.log(`Client ${e.data.id} attempted state-modifying command without handshake`,"error"),this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"error",data:{message:"Cannot execute state-modifying commands without handshake",context:`Attempted command: ${t.type}`,codon:this.currentCodon?.codon.id,fatal:!1,severity:"operation",code:"HANDSHAKE_REQUIRED"}},e);return}if(e.data.mode==="readonly"){this.logger.log(`Client ${e.data.id} attempted state-modifying command in read-only mode`,"error"),this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"error",data:{message:"Cannot execute state-modifying commands in read-only mode",context:`Attempted command: ${t.type}`,codon:this.currentCodon?.codon.id,fatal:!1,severity:"operation",code:"INSUFFICIENT_PERMISSIONS"}},e);return}}switch(t.type){case"codon.start":{await this.startCodon(t.data.codonId,t.data.skipPreCommands);break}case"codon.next":await this.startNextCodon();break;case"codon.skip":await this.skipCurrentCodon();break;case"codon.redo":await this.redoCurrentCodon();break;case"server.shutdown":await this.shutdown(t.data?.reason||"client request");break;case"checkpoint.list":await this.listCheckpoints(t.data?.runId);break;case"codon.forceStop":await this.forceStopCodon(t.data?.reason);break;case"rollback.toCheckpoint":await this.rollbackToCheckpoint(t.data.checkpointSha,t.data.autoRestart??!1);break;case"rollback.toCodon":await this.rollbackToCodon(t.data.codonId,t.data.checkpointType,t.data.autoRestart??!1);break;case"rollback.toLastSuccess":await this.rollbackToLastSuccess(t.data?.autoRestart??!1);break;case"ping":this.handlePing(t.id,e);break;case"ping.broadcast":this.handlePingBroadcast(t.id,e);break;case"history.sync":await this.handleHistorySync(t,e);break;default:z_(t)}}handlePing(t,e){if(this.logger.log(`Handling ping command: ${t}`),e?.data.handshakeComplete){let u={id:z(J()),timestamp:new Date().toISOString(),type:"pong",data:{message:"pong",timestamp:new Date().toISOString()}};this.emit("event",u,e)}else this.logger.log("Ping command received but no valid sender provided","error")}handlePingBroadcast(t,e){this.logger.log(`Handling ping.broadcast command: ${t}`);let u=e?.data.id||"unknown";for(let[a,l]of this.clients){if(!l.data.handshakeComplete)continue;let i={id:z(J()),timestamp:new Date().toISOString(),type:"pong",data:{message:"pong",timestamp:new Date().toISOString(),clientId:u}};this.emit("event",i,l)}}async handleHistorySync(t,e){if(!e?.data.handshakeComplete){this.logger.log("History sync command received but sender not ready","error");return}this.logger.log(`Handling history.sync command: ${t.id}`);let u=e;if(!u){this.logger.log("History sync command received without sender","error");return}let a=this.eventJournal.getAllEvents()[Symbol.asyncIterator](),l=await a.next();if(l.done){this.sendHistoryBatch(u,[],!1);return}let i=l.value;while(!0){if(l=await a.next(),l.done){this.sendHistoryBatch(u,[i],!1);break}this.sendHistoryBatch(u,[i],!0),i=l.value}}sendHistoryBatch(t,e,u){let a={id:z(J()),timestamp:new Date().toISOString(),type:"history.batch",data:{events:e,hasMore:u}};try{t.send(JSON.stringify(a)),this.logger.log(`Sent ${e.length} events to client ${t.data.id}`)}catch(l){this.logger.log(`Failed to send history batch to client ${t.data.id}: ${l}`,"error"),this.clients.delete(t.data.id)}}emit(t,e,u){if(t!=="event")throw this.logger.log(`Unsupported event type emitted: ${t}`,"error"),Error(`Unsupported event type: ${t}. Can only emit "event" events.`);let a=e,l=d2(a),i=p2(a),o=Wa(a),d=Kr(a);if(!l&&!i&&!o&&!d)throw this.logger.log(`Unknown event type: ${a.type}`,"error"),Error(`Unknown event: ${a.type}`);if(d&&!u)return this.logger.log(`Connection state event ${a.type} requires a target client but none provided`,"error"),!1;if((l||i||o)&&!u){if(this.eventJournalAppendQueue=this.eventJournalAppendQueue.then(()=>this.eventJournal.append(a)).catch((m)=>{this.logger.log(`Error appending event to journal: ${m}`,"error")}),this.clients.size>0)for(let[m,_]of this.clients){if(!_.data.handshakeComplete)continue;try{_.send(JSON.stringify(a))}catch(n){this.logger.log(`Failed to send event to client ${_.data.id}: ${n}`,"error")}}}else try{u?.send(JSON.stringify(a))}catch(m){this.logger.log(`Failed to send event to client ${u?.data.id}: ${m}`,"error")}return super.emit(t,e)}async sendStateSnapshot(){let t=this.stateManager.getTotalCost(),e=this.serverStartTime?Date.now()-this.serverStartTime.getTime():0,u=await this.getTerminalCodonsForSnapshot(),a=this.stateManager.getCurrentlyRunningCodon(),l={id:z(J()),timestamp:new Date().toISOString(),type:"state.snapshot",data:{currentCodon:a||void 0,completedCodons:u,fileTree:[],totalCost:t,totalTime:e,recentFileAccess:this.recentFileAccess,isRollingBack:this.isRollingBack}};this.emit("event",l)}async getTerminalCodonsForSnapshot(){return(await this.stateManager.getExecutionThread()).codons.filter((e)=>Ft(e.codon.status)).map((e)=>e.codon)}async startNewRun(t){let e=Ne(`${Date.now()}-${Math.random().toString(36).substring(2,7)}`),u=$t.join(this.config.executionPath,".hankweave","runs",e);await dt.promises.mkdir(u,{recursive:!0}),this.stateManager.transition({type:"RunStarted",data:{runId:e,runFolder:u,gitBranch:`run-${e}`,startingConditions:t||{type:"fresh"},serverPid:process.pid}}),this.currentRunId=e;let a={pid:process.pid,runId:e,startTime:new Date().toISOString(),lastHeartbeat:new Date().toISOString()},l=$t.dirname(this.config.lockFile);if(!dt.existsSync(l))dt.mkdirSync(l,{recursive:!0});dt.writeFileSync(this.config.lockFile,JSON.stringify(a)),this.heartbeatInterval=setInterval(()=>{this.updateHeartbeat()},30000),this.logger.log(`Started new run: ${e}`)}updateHeartbeat(){try{if(dt.existsSync(this.config.lockFile)){let t=JSON.parse(dt.readFileSync(this.config.lockFile,"utf-8"));t.lastHeartbeat=new Date().toISOString(),dt.writeFileSync(this.config.lockFile,JSON.stringify(t))}}catch(t){this.logger.log(`Failed to update heartbeat: ${t}`,"error")}}async startCodon(t,e){let u=this.stateManager.getCodonById(t);if(!u){await this.handleError(Error(`Unknown codon: ${t}`),"startCodon","operation");return}let a=u.codon;this.logger.log(`Starting codon: ${a.name}`);let l=await this.stateManager.getCodonHistory(at(a.id)),i;for(let c of l)if("rigSetupCheckpoint"in c.codon&&c.codon.rigSetupCheckpoint){i=c.codon.rigSetupCheckpoint;break}if(i)this.logger.log(`Found existing rig setup checkpoint: ${i}`);let o=this.stateManager.getCurrentlyRunningCodon();if(o&&!Ft(o.status)){await this.handleError(Error(`Codon already running: ${o.codonId}`),"startCodon","operation");return}let d=this.stateManager.getCurrentRun();if(d){let c=d.codons.find((x)=>x.codonId===t);if(c&&Ft(c.status))this.logger.log(`Codon ${t} was already attempted in current run, starting new run`),this.stateManager.transition({type:"RunCompleted",data:{runId:d.runId}}),await this.stateManager.waitForPendingTransitions(),await this.startNewRun({type:"continuation",source:{runId:d.runId,afterCodon:null,checkpointSha:""},reason:"retry"})}if(!this.currentRunId){await this.handleError(Error("No active run"),"startCodon","fatal");return}if(this.stateManager.transition({type:"CodonStarted",data:{runId:this.currentRunId,codonId:t,loopContext:u.loopContext}}),!this.currentRunId){await this.handleError(Error("No active run during codon start"),"startCodon","fatal");return}if(!e&&!i&&a.rigSetup){this.logger.log(`Running rig setup for codon: ${a.name}`);let c=null;for(let[x,I]of a.rigSetup.entries())try{if(I.type==="copy"&&I.copy){let s=$t.join(this.config.executionPath,I.copy.to);if(this.logger.log(`Copying ${I.copy.from} to ${s}`),dt.existsSync(s))this.logger.log(`Warning: Target path already exists: ${s}. Removing it before copying.`),await dt.promises.rm(s,{recursive:!0}),this.logger.log(`Removed existing path: ${s}`);await this.copyPath(I.copy.from,s),c=s,this.logger.log(`Copied ${I.copy.from} to ${s}`)}else if(I.type==="command"&&I.command){await this.runCommand(I,c||void 0);let s=I.command.workingDirectory==="lastCopied"&&c?c:this.config.executionPath;this.logger.log(`Ran command in ${s}: ${I.command.run}`)}}catch(s){let g=qt(s).message,f=s instanceof Gl,h=f?s.exitCode:-1,B=f?s.stdout:"",Q=f?s.stderr:"";if(this.logger.log(`[DEBUG] Rig setup error details - Exit code: ${h}`,"error"),B)this.logger.log(`[DEBUG] Rig setup error stdout: ${B}`,"info");if(Q)this.logger.log(`[DEBUG] Rig setup error stderr: ${Q}`,"error");if(I.allowFailure){this.logger.log(`Rig setup operation failed (allowFailure=true) at item ${x+1} (${JSON.stringify(I)}): ${g}`,"info"),this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"error",data:{message:`Rig setup operation failed but continuing (allowFailure=true): ${g}`,context:`Codon ${a.id} - ${I.type} operation (item ${x+1})`,codon:a.id,fatal:!1,severity:"operation"}});continue}if(this.logger.log(`Rig setup failed at item ${x+1} (${JSON.stringify(I)}): ${g}`,"error"),this.codonFailureReason={type:"unknown",retriable:!0,message:`Rig setup failed at ${I.type} operation: ${g}`},this.currentRunId)this.stateManager.transition({type:"CodonTransitioned",data:{runId:this.currentRunId,codonId:t,from:"preparing",to:"failed",metadata:{exitCode:h,failedDuring:"preparing",failureReason:this.codonFailureReason}}});this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"error",data:{message:`Rig setup failed: ${g}`,context:`Codon ${a.id} - ${I.type} operation (item ${x+1})`,codon:a.id,fatal:!0,severity:"fatal"}}),this.cleanupCurrentCodon(),await this.handleError(qt(s),`Rig setup item ${x+1}`,"fatal");return}}this.stateManager.transition({type:"CodonTransitioned",data:{runId:this.currentRunId,codonId:t,from:"preparing",to:"starting",metadata:{checkpointSha:i}}});let m=await this.loadSentinelsForCodon(a,t),_=m.errors.filter((c)=>c.fatal);if(_.length>0){let c=_.map((I)=>I.ref).join(", "),x=`Required sentinels failed to load (failCodonIfNotLoaded=true): ${c}`;this.codonFailureReason={type:"sentinel-load-failure",retriable:!1,message:x,sentinelRefs:_.map((I)=>I.ref)},this.stateManager.transition({type:"CodonTransitioned",data:{runId:this.currentRunId,codonId:at(a.id),from:"starting",to:"failed",metadata:{failedDuring:"starting",failureReason:this.codonFailureReason}}}),this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"error",data:{message:x,context:`Failed sentinels: ${c}`,codon:a.id,fatal:!0,severity:"codon",code:"SENTINEL_LOAD_FAILURE"}}),this.cleanupCurrentCodon();return}for(let c of m.errors.filter((x)=>!x.fatal))this.logger.log(`Non-required sentinel failed to load (${c.ref}): ${c.error}`,"info");let n=this.config.codons.findIndex((c)=>c.id===a.id);if(n>=0){for(let c=0;c<=n;c++){let x=this.config.codons[c];if(x.type!=="loop"&&x.checkpointedFiles&&x.checkpointedFiles.length>0)await this.addCheckpointPatterns(x.checkpointedFiles)}if(!e&&a.rigSetup&&this.checkpointingEnabled)await this.createCheckpoint({status:"rig-setup",codonId:t,codonName:a.name,runId:this.currentRunId||Ne("unknown"),timestamp:new Date().toISOString()})}let r=null;if(a.continuationMode==="continue-previous"){let c=this.stateManager.getState(),x=await F0(c,void 0,void 0,this.logger);if(r=Gx(x,t,c),r)this.logger.log(`Codon ${t} will continue from previous session: ${r}`),this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"info",data:{message:`Continuing from previous session: ${r}`}});else{let s=`Codon ${t} requires continuation from previous codon but no valid session found. Previous codon must complete successfully or be skipped with at least one assistant message.`;if(this.logger.log(s,"error"),this.codonFailureReason={type:"unknown",retriable:!1,message:s},this.currentRunId)this.stateManager.transition({type:"CodonTransitioned",data:{runId:this.currentRunId,codonId:t,from:"starting",to:"failed",metadata:{failedDuring:"starting",failureReason:this.codonFailureReason}}});this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"error",data:{message:s,codon:a.id,fatal:!0,severity:"codon"}}),this.cleanupCurrentCodon();return}}if(this.currentCodon={status:"initializing",codonId:t,codon:a,previousSessionId:r?gu(r):void 0,startTime:new Date,codonCost:0,codonTokens:{inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0}},a.checkpointedFiles&&a.checkpointedFiles.length>0)this.watchedPatterns=a.checkpointedFiles,this.logger.log(`Watching patterns: ${this.watchedPatterns.join(", ")}`);if(a.checkpointedFiles&&a.checkpointedFiles.length>0){let c=await G0.resolveFiles(this.config.executionPath,a.checkpointedFiles),x=await Promise.all(c.map(async(I)=>{let s=$t.join(this.config.executionPath,I),k=await dt.promises.stat(s),g=await dt.promises.readFile(s,"utf-8");return{path:I,content:g,lastModified:k.mtime.toISOString()}}));if(x.length>0){for(let s of x)this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"file.updated",data:{path:s.path,filename:$t.basename(s.path),content:s.content,action:"created"}});let I=x.reduce((s,k)=>new Date(k.lastModified)>new Date(s.lastModified)?k:s);this.recentFileAccess={path:I.path,content:I.content,timestamp:new Date(I.lastModified)},await this.sendFileTreeUpdate()}}await this.runCodon(t,a,r)}async runCodon(t,e,u){try{let a=this.stateManager.getCurrentRun();if(!a||!a.runFolder)throw Error("No active run or run folder not found");let l=a.runFolder;await dt.promises.mkdir(l,{recursive:!0});let i=`${t.replace(/#/g,"-")}-claude.log`,o=$t.join(l,i),d=new W0({codon:e,codonId:t,executionPath:this.config.executionPath,logger:this.logger,logParsingInterval:this.config.logParsingInterval,anthropicBaseUrl:this.proxyRunner?.proxyUrl,logPath:o});if(this.codonRunners.set(t,d),this.logger.log(`[runCodon] Setting up event handlers for codon ${t}`,"debug"),this.setupCodonRunnerEventHandlers(t),this.logger.log(`[runCodon] Starting runner execution for codon ${t}, previousSessionId: ${u||"none"}`,"debug"),await d.run(u?gu(u):void 0),this.logger.log(`[runCodon] Runner.run() completed for codon ${t}`,"debug"),this.logger.log(`[runCodon] Validating process started for codon ${t}`,"debug"),!this.currentRunId)throw Error("No active run while starting Claude process");let m=d.getPid();if(this.logger.log(`[runCodon] Got PID ${m} for codon ${t}`,"debug"),!m)throw Error("Failed to get process PID");this.logger.log(`[runCodon] Transitioning codon ${t} to initializing (PID: ${m})`,"debug"),this.stateManager.transition({type:"CodonTransitioned",data:{runId:this.currentRunId,codonId:t,from:"starting",to:"initializing",metadata:{claudePid:m,claudeLogPath:$t.relative(this.config.executionPath,o),...u&&{previousSessionId:gu(u)}}}}),this.logger.log(`[runCodon] Successfully completed runCodon for ${t}, status should be initializing`,"debug")}catch(a){this.logger.log(`[runCodon] CAUGHT ERROR during codon ${t} initialization: ${qt(a).message}`,"error"),this.logger.log(`[runCodon] Error stack: ${qt(a).stack}`,"error");let l=this.codonRunners.get(t);if(this.logger.log(`[runCodon] State at error - currentRunId: ${this.currentRunId}, hasRunner: ${!!l}`,"error"),l)this.logger.log(`[runCodon] Calling cleanup on runner for codon ${t} due to error`,"error"),await l.cleanup(),this.codonRunners.delete(t),this.logger.log("[runCodon] CodonRunner cleanup complete, removed from map","error");if(this.currentRunId)this.logger.log(`[runCodon] Transitioning codon ${t} to failed due to error`,"error"),this.stateManager.transition({type:"CodonTransitioned",data:{runId:this.currentRunId,codonId:t,from:"starting",to:"failed",metadata:{failedDuring:"starting",failureReason:{type:"unknown",retriable:!1,message:qt(a).message}}}});throw this.logger.log("[runCodon] Calling cleanupCurrentCodon()","error"),this.cleanupCurrentCodon(),this.logger.log("[runCodon] Re-throwing error","error"),a}}setupCodonRunnerEventHandlers(t){let e=this.codonRunners.get(t);if(!e)throw Error(`Cannot setup handlers: no runner found for codon ${t}`);e.on("exit",(u,a)=>{if(a)this.logger.log(`[HANKWEAVE-SERVER] Context exceeded error detected for codon ${t}`,"error");this.handleCodonComplete(u,a)}),e.on("error",(u)=>{this.handleError(u,`Process for codon ${t}`,"fatal")}),e.on("systemMessage",(u)=>{this.handleSystemMessage(u,t)}),e.on("assistantMessage",(u)=>{this.handleAssistantMessage(u,t)}),e.on("userMessage",(u)=>{this.handleUserMessage(u,t)}),e.on("resultMessage",(u)=>{this.handleResultMessage(u,t)})}handleSystemMessage(t,e){if(t.subtype==="init")this.logger.log(`[handleSystemMessage] Received init message for codon ${e}, session: ${t.session_id}`,"debug"),this.logger.log(`[handleSystemMessage] Condition check - subtype=init: true, has_session: ${!!t.session_id}, has_currentCodon: ${!!this.currentCodon}, currentCodon_status: ${this.currentCodon?.status||"N/A"}`,"debug");if(t.subtype==="init"&&t.session_id&&this.currentCodon&&this.currentCodon.status==="initializing"){if(this.logger.log(`[handleSystemMessage] All conditions met, transitioning codon ${e} to running`,"info"),this.currentRunId)this.stateManager.transition({type:"CodonTransitioned",data:{runId:this.currentRunId,codonId:at(e),from:"initializing",to:"running",metadata:{claudeSessionId:gu(t.session_id)}}});this.currentCodon={status:"running",codonId:this.currentCodon.codonId,codon:this.currentCodon.codon,sessionId:gu(t.session_id),previousSessionId:this.currentCodon.previousSessionId,startTime:this.currentCodon.startTime,codonCost:0,codonTokens:{inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0}},this.logger.log(`Claude started codon ${e} with session ID: ${t.session_id}`),this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"info",data:{message:`Claude started codon ${e} with session ID: ${t.session_id}`}})}else if(t.subtype==="init")this.logger.log(`[handleSystemMessage] Init message for codon ${e} did NOT meet all conditions - skipping transition`,"info")}handleAssistantMessage(t,e){if(this.currentRunId){let l=this.stateManager.getCodonInCurrentRun(at(e)),i=l&&"assistantMessageCount"in l?l.assistantMessageCount??0:0;this.stateManager.transition({type:"AssistantMessageCountUpdated",data:{runId:this.currentRunId,codonId:at(e),newCount:i+1}})}if(Pd(t)){this.logger.log(`API timeout detected in synthetic message for codon ${e}`,"error");let l=new H2(e,{message:"API Error: Request timed out.",timestamp:new Date().toISOString(),synthetic:!0});if(this.codonFailureReason={type:"timeout",retriable:!0,message:"API Error: Request timed out."},this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"error",data:{message:l.message,codon:e,fatal:!1,severity:l.severity,context:JSON.stringify(l.context)}}),this.currentCodon){let i=this.codonRunners.get(this.currentCodon.codonId);if(i)i.kill()}return}if(t.message.usage){let l={inputTokens:t.message.usage.input_tokens||0,outputTokens:t.message.usage.output_tokens||0,cacheCreationTokens:t.message.usage.cache_creation_input_tokens||0,cacheReadTokens:t.message.usage.cache_read_input_tokens||0},i=0,o=this.currentCodon?.codon.model.modelId;if(o){let d=this.llmRegistry.calculateCost(o,{inputTokens:l.inputTokens,outputTokens:l.outputTokens,cacheReadTokens:l.cacheReadTokens,cacheCreationTokens:l.cacheCreationTokens});if(d!==null)i=d;else this.logger.log(`Cannot calculate incremental cost for model: ${o}`,"debug")}else this.logger.log("Cannot calculate incremental cost: no model ID in current codon","debug");if(this.currentCodon&&this.currentCodon.status==="running")this.currentCodon.codonCost+=i,this.currentCodon.codonTokens.inputTokens+=l.inputTokens,this.currentCodon.codonTokens.outputTokens+=l.outputTokens,this.currentCodon.codonTokens.cacheCreationTokens+=l.cacheCreationTokens,this.currentCodon.codonTokens.cacheReadTokens+=l.cacheReadTokens;if(this.currentRunId)this.stateManager.transition({type:"CostsIncremented",data:{runId:this.currentRunId,codonId:at(e),costDelta:i,tokensDelta:l}});this.logger.log(`Codon ${e} token update - Call cost: $${i.toFixed(4)}, Running total: $${this.currentCodon?.codonCost.toFixed(4)||0} (${l.inputTokens} in, ${l.outputTokens} out, ${l.cacheCreationTokens} cache create, ${l.cacheReadTokens} cache read)`),this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"token.usage",data:{codonId:e,...l,totalCost:i,modelId:this.currentCodon?.codon.model.modelId}})}let u=t.message.content,a=Array.isArray(u)?u:[{type:"text",text:u}];for(let l of a)if("text"in l&&l.type==="text"){let i=l;if(i.text==="API Error: Request timed out."){this.logger.log(`API timeout detected in codon ${e}`,"error");let o=new H2(e,{message:i.text,timestamp:new Date().toISOString()});if(this.codonFailureReason={type:"timeout",retriable:!0,message:"API Error: Request timed out."},this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"error",data:{message:o.message,codon:e,fatal:!1,severity:o.severity,context:JSON.stringify(o.context)}}),this.currentCodon){let d=this.codonRunners.get(this.currentCodon.codonId);if(d)d.kill()}return}this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"assistant.action",data:{codonId:e,action:"message",content:i.text}})}else if("thinking"in l&&l.type==="thinking"){let i=l;this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"assistant.action",data:{codonId:e,action:"thinking",content:i.thinking}})}else if(l.type==="tool_use"){let i=l;if(this.pendingToolUses.set(i.id,{toolName:i.name,timestamp:Date.now(),codonId:e}),["Read","Write","Edit","MultiEdit"].includes(i.name))this.handleFileToolCall(i.name,i.input).catch((d)=>{this.handleError(qt(d),`handleFileToolCall(${i.name})`,"operation")});this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"assistant.action",data:{codonId:e,action:"tool_use",content:"",toolName:i.name,toolInput:i.input}})}}handleResultMessage(t,e){if(this.logger.log(`Codon ${e} result message received: ${t.subtype}`),this.resultMessageReceived=!0,t.result==="API Error: Request timed out."&&t.is_error){this.logger.log(`API timeout detected in result message for codon ${e}`,"error");let u=new H2(e,{message:t.result,timestamp:new Date().toISOString(),is_error:t.is_error,duration_ms:t.duration_ms,duration_api_ms:t.duration_api_ms});this.codonFailureReason={type:"timeout",retriable:!0,message:"API Error: Request timed out."},this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"error",data:{message:u.message,codon:e,fatal:!1,severity:u.severity,context:JSON.stringify(u.context)}})}if(t.subtype==="success"){if(this.logger.log(`Codon ${e} completed successfully`),t.usage&&this.currentRunId){let u={inputTokens:t.usage.input_tokens||0,outputTokens:t.usage.output_tokens||0,cacheCreationTokens:t.usage.cache_creation_input_tokens||0,cacheReadTokens:t.usage.cache_read_input_tokens||0},a=t.total_cost_usd;if(a===void 0){let i=this.currentCodon?.codon.model.modelId;if(i){let o=this.llmRegistry.calculateCost(i,{inputTokens:u.inputTokens,outputTokens:u.outputTokens,cacheReadTokens:u.cacheReadTokens,cacheCreationTokens:u.cacheCreationTokens});if(o!==null)a=o;else{let d=this.currentCodon?.codonCost||0;this.logger.log(`Cannot calculate final cost for model: ${i}, using accumulated cost: $${d.toFixed(4)}`,"debug"),a=d}}else{let o=this.currentCodon?.codonCost||0;this.logger.log(`Cannot calculate final cost: no model ID, using accumulated cost: $${o.toFixed(4)}`,"debug"),a=o}}let l=this.currentCodon?.codonCost||0;if(Math.abs(l-a)>0.0001)this.logger.log(`Codon ${e} cost discrepancy - Accumulated: $${l.toFixed(4)}, Final: $${a.toFixed(4)} (using final from result message)`);this.stateManager.transition({type:"CodonFinalCostSet",data:{runId:this.currentRunId,codonId:at(e),finalCost:a,finalTokens:u}}),this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"token.usage",data:{codonId:e,...u,totalCost:a,...t.modelUsage?{modelUsage:t.modelUsage}:{},...!t.modelUsage?{modelId:this.currentCodon?.codon.model.modelId}:{}}})}}}handleUserMessage(t,e){let u=t.message.content,a=Array.isArray(u)?u:[];for(let l of a)if(l.type==="tool_result"){let i=l,o=this.pendingToolUses.get(i.tool_use_id);if(!o){this.logger.log(`Tool result without matching tool use: ${i.tool_use_id}`,"info");continue}let d=Date.now()-o.timestamp,m="",_=!1;if(typeof i.content==="string")m=i.content;else if(Array.isArray(i.content))m=i.content.filter((x)=>x.type==="text").map((x)=>x.text).join(`
|
|
255
|
+
`);else if(i.content&&typeof i.content==="object"){if("is_error"in i.content)_=i.content.is_error===!0;m=JSON.stringify(i.content,null,2)}let n=m.length,r=this.config.toolResultTruncateLength,c=m.length>r;if(c)m=`${m.substring(0,r)}...`;this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"tool.result",data:{codonId:o.codonId,toolUseId:i.tool_use_id,toolName:o.toolName,result:m,truncated:c,originalLength:n,executionTimeMs:d,isError:_}}),this.pendingToolUses.delete(i.tool_use_id)}}async handleCodonComplete(t,e){this.logger.log(`[handleCodonComplete] ======= ENTERED handleCodonComplete - exitCode=${t}, isContextExceeded=${e} =======`,"info");let u=this.currentCodon?!!this.codonRunners.get(this.currentCodon.codonId):!1;if(this.logger.log(`[handleCodonComplete] currentCodon=${this.currentCodon?.codonId||"none"}, hasRunner=${u}`,"info"),this.logger.log(`[handleCodonComplete] Call stack:
|
|
256
|
+
${Error().stack}`,"debug"),!this.currentCodon){this.logger.log("[handleCodonComplete] No currentCodon, returning early","info");return}let a=this.currentCodon.codonId,l=this.isSkippingCodon,i=this.stateManager.getCodonInCurrentRun(at(a));if(!i||Ft(i.status))return;let o=i.status;await new Promise((g)=>setTimeout(g,this.config.logParsingInterval*2));let d=this.stateManager.getCodonInCurrentRun(at(a));if(!d)return;let m=this.currentCodonSentinels.size;if(m>0&&this.currentRunId)this.stateManager.transition({type:"CodonTransitioned",data:{runId:this.currentRunId,codonId:a,from:d.status,to:"completing-sentinels",metadata:{sentinelCount:m,sentinelIds:Array.from(this.currentCodonSentinels)}}}),this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"info",data:{message:`Completing work for ${m} sentinel(s)...`}}),await this.stateManager.waitForPendingTransitions();if(this.sentinelManager&&m>0)await this.sentinelManager.completeAllWork(),this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"info",data:{message:`Sentinel work completed (${m} sentinel(s))`}});if(this.currentRunId&&m>0){let g=this.sentinelManager.getSentinelStates(),f=g.reduce((h,B)=>h+B.totalCost,0);this.stateManager.transition({type:"SentinelStatesUpdated",data:{runId:this.currentRunId,codonId:a,sentinelStates:g,totalCost:f}}),this.logger.log(`Updated final state for ${g.length} sentinel(s)`,"debug"),await this.stateManager.waitForPendingTransitions()}let _={};if(this.sentinelManager&&this.currentCodonSentinels.size>0){let g=this.sentinelManager.getSentinelCosts();for(let[h,B]of g)_[h]=B;let f=Object.values(_).reduce((h,B)=>h+B,0);this.logger.log(`Sentinel costs: ${JSON.stringify(_)} (total: $${f.toFixed(6)})`,"info")}let n;if(this.isForceStopping)n="failed";else if(t===0&&this.resultMessageReceived)n="completed";else if(e&&this.stateManager.isContextExceededAcceptable(a))n="completed",this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"info",data:{message:"Codon completed successfully due to context exceeded (loop termination condition met)"}});else if(l&&!this.resultMessageReceived)n="skipped";else if(t!==0)n="failed";else n="failed";let r;if(this.checkpointingEnabled)try{let g=n==="completed"?"completed":n==="skipped"?"skipped":"error";r=await this.createCheckpoint({status:g,codonId:a,codonName:this.currentCodon?.codon.name||a,runId:this.currentRunId||Ne("unknown"),timestamp:new Date().toISOString(),duration:Date.now()-new Date(i.startTime).getTime()})||void 0}catch(g){if(this.logger.log(`Checkpoint creation failed: ${g}`,"error"),n==="completed")n="failed",this.codonFailureReason={type:"unknown",retriable:!1,message:`Checkpoint creation failed: ${qt(g).message}`}}let c=m>0?this.stateManager.getCodonInCurrentRun(at(a)):d;if(this.currentRunId&&c)this.stateManager.transition({type:"CodonTransitioned",data:{runId:this.currentRunId,codonId:a,from:c.status,to:n,metadata:{exitCode:t,resultMessageReceived:this.resultMessageReceived,checkpointSha:r||"",contextExceeded:e,...n==="failed"&&{failedDuring:l?o:d.status,failureReason:this.codonFailureReason||{type:"unknown",retriable:!1}},...n==="skipped"&&{skippedDuring:o}}}});await this.stateManager.waitForPendingTransitions();let x=this.stateManager.getCodonInCurrentRun(at(a)),I=0;if(x){if(x.status==="completed")I=x.finalCost;else if(x.status==="failed"||x.status==="skipped")I=x.partialCost}let s=n==="skipped"?0:I;if(this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"codon.completed",data:{codonId:a,success:n==="completed",cost:s,duration:Date.now()-new Date(i.startTime).getTime(),exitStatus:n==="skipped"?{type:"error",code:t}:t===0?{type:"success"}:{type:"error",code:t},failureReason:n==="failed"?this.codonFailureReason:void 0}}),await this.sendStateSnapshot(),n==="completed"&&this.currentCodon.codon.outputFiles)for(let[g,f]of this.currentCodon.codon.outputFiles.entries()){let h=!1;try{if(f.beforeCopy&&f.beforeCopy.length>0){this.logger.log(`Running ${f.beforeCopy.length} beforeCopy command(s) for codon ${this.currentCodon.codon.id} (group ${g+1})`);for(let[B,Q]of f.beforeCopy.entries())this.logger.log(`Running beforeCopy command ${B+1}/${f.beforeCopy.length}: ${Q.command.run}`),await this.runCommand(Q);this.logger.log(`Completed all beforeCopy commands for codon ${this.currentCodon.codon.id} (group ${g+1})`)}h=!0,await U_(this.config.executionPath,f.copy,$t.join(this.config.cwd,this.config.outputDirectory),this.logger)}catch(B){await this.handleError(Error(`Copy group ${g} failed with: ${String(B)}`),h?"codonOutputCopyFiles":"codonOutputBeforeCopy")}}if(n==="completed"||n==="skipped")await this.stateManager.expandNextIterationForCodon({codonId:at(a),contextExceeded:e});this.logger.log(`[handleCodonComplete] About to cleanup codon ${a} - exitCode=${t}, isContextExceeded=${e}, finalStatus=${n}`,"info"),this.logger.log(`[handleCodonComplete] Stack trace:
|
|
257
|
+
${Error().stack}`,"debug");let k=this.codonRunners.get(a);if(k)this.logger.log(`[handleCodonComplete] Found runner for codon ${a}, cleaning up`,"info"),await k.cleanup().catch((g)=>this.logger.log(`Error cleaning up runner for ${a}: ${g}`,"error")),this.codonRunners.delete(a);else this.logger.log(`[handleCodonComplete] No runner found in map for codon ${a}`,"info");if(this.currentCodon?.codonId===a)this.logger.log(`[handleCodonComplete] Clearing current codon state for ${a}`,"info"),this.cleanupCurrentCodon();else this.logger.log(`[handleCodonComplete] Not clearing current codon state (current is ${this.currentCodon?.codonId||"none"}, completed is ${a})`,"info");if(this.logger.log(`[handleCodonComplete] Cleanup completed for codon ${a}`,"info"),(n==="completed"||n==="skipped")&&!this.isShuttingDown)if(this.config.autostart)await this.autoStartNextCodon();else this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"server.idle",data:{reason:"codon-completed",message:`Codon ${a} ${n}. Use 'codon.next' to continue.`}});else if(n==="failed"&&!this.isShuttingDown)if(this.codonFailureReason?.retriable)this.logger.log("Codon failed with retriable error. Server remains active.");else{if(this.currentRunId)this.stateManager.transition({type:"RunFailed",data:{runId:this.currentRunId}}),await this.stateManager.waitForPendingTransitions();await this.shutdown("codon failure")}}async handleFileToolCall(t,e){if(this.watchedPatterns.length===0)return;let u=null,a="modified",l="";switch(t){case"Read":{u=e?.file_path||null,a="modified";break}case"Write":{let d=e;if(u=d?.file_path||null,l=d?.content||"",u)a=dt.existsSync($t.join(this.config.executionPath,u))?"modified":"created";break}case"Edit":{u=e?.file_path||null,a="modified";break}case"MultiEdit":{u=e?.file_path||null,a="modified";break}}if(!u)return;if($t.isAbsolute(u))u=$t.relative(this.config.executionPath,u);let i=u.replace(/^\.\//g,"");if(!this.watchedPatterns.some((d)=>{let m=d.replace(/^\.\//g,"");return zt(i,m,{matchBase:!0})}))return;if(!l){let d=$t.join(this.config.executionPath,u);if(dt.existsSync(d))try{l=dt.readFileSync(d,"utf-8")}catch(m){this.logger.log(`Error reading file ${u}: ${qt(m).message}`,"error");return}}this.recentFileAccess={path:u,content:l,timestamp:new Date},this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"file.updated",data:{path:u,filename:$t.basename(u),content:l,action:a}}),await this.sendFileTreeUpdate()}async sendFileTreeUpdate(){if(this.watchedPatterns.length===0)return;let e=(await Promise.all(this.watchedPatterns.map((u)=>H_(this.config.executionPath,u)))).flat();this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"filetree.updated",data:{tree:e}})}async handleError(t,e,u="operation"){switch(this.logger.log(`[${u}] ${e}: ${t.message}`,u==="fatal"?"error":"info"),this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"error",data:{message:t.message,context:e,severity:u,codon:this.currentCodon?.codon.id,fatal:u==="fatal"}}),u){case"fatal":await this.shutdown(`Fatal error: ${e}`);break;case"codon":this.cleanupCurrentCodon();break}}async autoStartNextCodon(){let t=await this.stateManager.getExecutionThread();if(this.logger.log(`[autoStartNextCodon] Called - hasRunningCodon: ${t.hasRunningCodon}, isShuttingDown: ${this.isShuttingDown}`),t.hasRunningCodon||this.isShuttingDown){this.logger.log("[autoStartNextCodon] Returning early - codon running or shutting down");return}let e=t.nextCodonId;if(this.logger.log(`[autoStartNextCodon] ExecutionThread returned nextCodonId: ${e}`),!e){if(this.logger.log("[autoStartNextCodon] No more codons to run"),this.config.autostart)this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"info",data:{message:"All codons completed successfully. Server shutting down."}}),setTimeout(()=>{this.shutdown("all codons completed")},2000);else this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"server.idle",data:{reason:"all-codons-completed",message:"All codons completed. Server remains active."}});return}this.logger.log(`[autoStartNextCodon] Auto-starting codon: ${e}`),await this.startCodon(e)}async startNextCodon(){let t=await this.stateManager.getExecutionThread();if(t.hasRunningCodon){await this.handleError(Error("Cannot start next codon while current codon is running"),"startNextCodon","operation");return}let e=t.nextCodonId;if(e)this.logger.log(`[startNextCodon] Advancing to next codon: ${e}`),await this.startCodon(e);else await this.handleError(Error("No more codons to run"),"startNextCodon","operation")}async skipCurrentCodon(){if(!this.currentCodon){await this.handleError(Error("No codon is currently running"),"skipCurrentCodon","operation");return}this.logger.log(`Skipping codon ${this.currentCodon.codonId}`),this.isSkippingCodon=!0;let t=this.codonRunners.get(this.currentCodon.codonId);if(t)await t.kill("SIGTERM")}async redoCurrentCodon(){let t=await this.stateManager.getExecutionThread();if(t.hasRunningCodon){await this.handleError(Error("Cannot redo while codon is running"),"redoCurrentCodon","operation");return}if(t.codons.length>0){let e=t.codons[0];this.logger.log(`[redoCurrentCodon] Redoing last codon: ${e.codon.codonId}`),await this.startCodon(e.codon.codonId)}else await this.handleError(Error("No codon has been run yet to redo."),"redoCurrentCodon","operation")}async listCheckpoints(t){let e=this.stateManager.getState(),u=t?this.stateManager.getRun(Ne(t)):this.stateManager.getCurrentRun();if(!u){this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"error",data:{message:t?`Run ${t} not found`:"No active run",fatal:!1}});return}let a=[],l=t?e.runs.filter((i)=>i.runId===t):e.runs;for(let i of[...l].reverse())for(let o of i.codons){let m=this.config.codons.find((_)=>_.id===o.codonId)?.name||o.codonId;if("rigSetupCheckpoint"in o&&o.rigSetupCheckpoint)a.push({codonId:o.codonId,codonName:m,checkpointType:"rig-setup",sha:o.rigSetupCheckpoint,status:o.status,timestamp:o.startTime});if(o.status==="completed"&&o.completionCheckpoint)a.push({codonId:o.codonId,codonName:m,checkpointType:"completed",sha:o.completionCheckpoint,status:o.status,timestamp:o.endTime});if(o.status==="failed"&&"errorCheckpoint"in o&&o.errorCheckpoint)a.push({codonId:o.codonId,codonName:m,checkpointType:"error",sha:o.errorCheckpoint,status:o.status,timestamp:o.endTime});if(o.status==="skipped"&&"skipCheckpoint"in o&&o.skipCheckpoint)a.push({codonId:o.codonId,codonName:m,checkpointType:"skipped",sha:o.skipCheckpoint,status:o.status,timestamp:o.endTime})}a.reverse(),this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"checkpoint.list",data:{runId:u.runId,checkpoints:a,currentBranch:u.gitBranch}})}async forceStopCodon(t){let e=this.stateManager.getCurrentlyRunningCodon();if(!e||Ft(e.status)){this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"error",data:{message:"No running codon to stop",fatal:!1}});return}if(this.logger.log(`Force stopping codon ${e.codonId}: ${t||"user request"}`),this.isForceStopping=!0,this.codonFailureReason={type:"unknown",retriable:!0,message:`Force stopped: ${t||"user request"}`},this.currentRunId)this.stateManager.transition({type:"CodonTransitioned",data:{runId:this.currentRunId,codonId:e.codonId,from:e.status,to:"failed",metadata:{exitCode:-1,failureReason:this.codonFailureReason,failedDuring:e.status}}});if(this.currentCodon){let u=this.codonRunners.get(this.currentCodon.codonId);if(u)await u.kill("SIGTERM")}this.cleanupCurrentCodon(),this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"info",data:{message:`Codon ${e.codonId} force stopped`}})}async rollbackToCheckpoint(t,e){let u=this.stateManager.getCurrentlyRunningCodon();if(u&&!Ft(u.status)){this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"error",data:{message:"Cannot rollback while codon is running. Use 'codon.forceStop' first.",codon:u.codonId,fatal:!1}});return}let a=this.stateManager.getState(),l=await F0(a,void 0,void 0,this.logger),i=[];if(l.codons.forEach((d,m)=>{let _=d.codon;if("rigSetupCheckpoint"in _&&_.rigSetupCheckpoint){if(_.rigSetupCheckpoint.startsWith(t))i.push({threadCodon:d,checkpointType:"rig-setup",fullSha:_.rigSetupCheckpoint,codonIndex:m})}if(_.status==="completed"&&_.completionCheckpoint){if(_.completionCheckpoint.startsWith(t))i.push({threadCodon:d,checkpointType:"completed",fullSha:_.completionCheckpoint,codonIndex:m})}if(_.status==="failed"&&"errorCheckpoint"in _&&_.errorCheckpoint){if(_.errorCheckpoint.startsWith(t))i.push({threadCodon:d,checkpointType:"error",fullSha:_.errorCheckpoint,codonIndex:m})}if(_.status==="skipped"&&"skipCheckpoint"in _&&_.skipCheckpoint){if(_.skipCheckpoint.startsWith(t))i.push({threadCodon:d,checkpointType:"skipped",fullSha:_.skipCheckpoint,codonIndex:m})}}),i.length===0){this.logger.log(`SHA ${t} not found in current thread, searching all historical runs...`);for(let d of a.runs)for(let m=0;m<d.codons.length;m++){let _=d.codons[m],n={codon:_,runId:d.runId,runStatus:d.status,runStartTime:d.startTime,runEndTime:d.endTime||null,gitBranch:d.gitBranch,globalIndex:-1,runIndex:m,codonIndexInRun:m,validatedCheckpoints:[],continuationSessionId:null};if("rigSetupCheckpoint"in _&&_.rigSetupCheckpoint){if(_.rigSetupCheckpoint.startsWith(t))i.push({threadCodon:n,checkpointType:"rig-setup",fullSha:_.rigSetupCheckpoint,codonIndex:m})}if(_.status==="completed"&&_.completionCheckpoint){if(_.completionCheckpoint.startsWith(t))i.push({threadCodon:n,checkpointType:"completed",fullSha:_.completionCheckpoint,codonIndex:m})}if(_.status==="failed"&&"errorCheckpoint"in _&&_.errorCheckpoint){if(_.errorCheckpoint.startsWith(t))i.push({threadCodon:n,checkpointType:"error",fullSha:_.errorCheckpoint,codonIndex:m})}if(_.status==="skipped"&&"skipCheckpoint"in _&&_.skipCheckpoint){if(_.skipCheckpoint.startsWith(t))i.push({threadCodon:n,checkpointType:"skipped",fullSha:_.skipCheckpoint,codonIndex:m})}}if(i.length>0)this.logger.log(`Found ${i.length} match(es) in historical runs`)}if(i.length===0){this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"error",data:{message:`Checkpoint ${t} not found in any run (current or historical)`,fatal:!1}});return}if(i.length>1){let d=i.map((m)=>{let n=this.config.codons.find((r)=>r.id===m.threadCodon.codon.codonId)?.name||m.threadCodon.codon.codonId;return` - ${m.fullSha.substring(0,7)}... (${n} - ${m.checkpointType}) in run ${m.threadCodon.runId}`}).join(`
|
|
258
|
+
`);this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"error",data:{message:`Ambiguous checkpoint SHA '${t}'. Multiple checkpoints match:
|
|
259
|
+
${d}
|
|
260
|
+
Please provide more characters to uniquely identify the checkpoint.`,fatal:!1}});return}let o=i[0];try{if(l.codons.some((m)=>m.runId===o.threadCodon.runId&&m.codon.codonId===o.threadCodon.codon.codonId)){let m=l.codons.findIndex((_)=>_.runId===o.threadCodon.runId&&_.codon.codonId===o.threadCodon.codon.codonId);this.logger.log(`Executing rollback to ${o.fullSha.substring(0,7)} (${o.checkpointType}) at thread index ${m}`),await this.executeRollback(l,m,o.fullSha,o.checkpointType,e)}else this.logger.log(`Executing direct rollback to historical checkpoint ${o.fullSha.substring(0,7)} (${o.checkpointType}) from run ${o.threadCodon.runId}`),await this.executeDirectRollback(o.threadCodon,o.fullSha,o.checkpointType,e)}catch(d){let m=qt(d);if(this.logger.log(`Rollback failed: ${m.message}`,"error"),m.stack)this.logger.log(`Stack trace: ${m.stack}`,"error");throw this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"error",data:{message:`Rollback failed: ${m.message}`,fatal:!1}}),d}}async executeDirectRollback(t,e,u,a){let i=this.config.codons.find((o)=>o.id===t.codon.codonId)?.name||t.codon.codonId;this.logger.log(`Direct rollback to ${u} checkpoint ${e} in codon ${t.codon.codonId} (${i}) from run ${t.runId}`),this.isRollingBack=!0;try{this.cleanupCurrentCodon();let o=this.stateManager.getCurrentRun(),d=o?.runId||t.runId,m=o?.codons[0]?.codonId||t.codon.codonId;if(this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"rollback.started",data:{fromRun:d,fromCodon:m,toCodon:t.codon.codonId,toCheckpoint:e,checkpointType:u,codonsToProcess:[t.codon.codonId]}}),o&&o.status!=="completed")this.stateManager.transition({type:"RunCompleted",data:{runId:o.runId}}),await this.stateManager.waitForPendingTransitions();if(this.checkpointGit)this.logger.log(`Resetting to checkpoint ${e.substring(0,7)}`),await this.checkpointGit.resetToCheckpoint(e),this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"rollback.codonCheckpoint",data:{codonId:t.codon.codonId,codonName:i,checkpointType:u,checkpoint:e,message:`Reset to ${i} ${u} checkpoint`}});let _=u==="rig-setup"?null:t.codon.codonId;await this.startNewRun({type:"continuation",source:{runId:t.runId,afterCodon:_?at(_):null,checkpointSha:e},reason:"rollback"});let n=this.stateManager.getCurrentRun();if(this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"rollback.completed",data:{fromRun:d,toRun:n?.runId||t.runId,codonId:t.codon.codonId,codonName:i,checkpointType:u,checkpoint:e,autoRestart:a}}),a&&n)this.logger.log("Auto-starting next codon after rollback"),await this.autoStartNextCodon()}finally{this.isRollingBack=!1}}async rollbackToCodon(t,e,u){let a=this.stateManager.getCurrentlyRunningCodon();if(a&&!Ft(a.status)){this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"error",data:{message:"Cannot rollback while codon is running. Use 'codon.forceStop' first.",codon:a.codonId,fatal:!1}});return}let l=this.stateManager.getState(),i=await F0(l,void 0,void 0,this.logger),o=null,d=-1;for(let r=0;r<i.codons.length;r++)if(i.codons[r].codon.codonId===t){o=i.codons[r],d=r;break}if(!o){this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"error",data:{message:`Codon ${t} not found in execution history`,fatal:!1}});return}let m=o.codon,_,n=null;if(e==="start"){if("rigSetupCheckpoint"in m&&m.rigSetupCheckpoint)n=m.rigSetupCheckpoint,_="rig-setup";else if(m.status==="completed"&&m.completionCheckpoint)n=m.completionCheckpoint,_="completed";else if(m.status==="failed"&&"errorCheckpoint"in m&&m.errorCheckpoint)n=m.errorCheckpoint,_="error";else if(m.status==="skipped"&&"skipCheckpoint"in m&&m.skipCheckpoint)n=m.skipCheckpoint,_="skipped"}else if(e==="end"){if(m.status==="completed"&&m.completionCheckpoint)n=m.completionCheckpoint,_="completed";else if(m.status==="failed"&&"errorCheckpoint"in m&&m.errorCheckpoint)n=m.errorCheckpoint,_="error";else if(m.status==="skipped"&&"skipCheckpoint"in m&&m.skipCheckpoint)n=m.skipCheckpoint,_="skipped";else if("rigSetupCheckpoint"in m&&m.rigSetupCheckpoint)n=m.rigSetupCheckpoint,_="rig-setup"}else switch(_=e,e){case"rig-setup":n="rigSetupCheckpoint"in m?m.rigSetupCheckpoint||null:null;break;case"completed":n=m.status==="completed"?m.completionCheckpoint:null;break;case"error":n=m.status==="failed"&&"errorCheckpoint"in m?m.errorCheckpoint||null:null;break;case"skipped":n=m.status==="skipped"&&"skipCheckpoint"in m?m.skipCheckpoint||null:null;break}if(!n||!_){this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"error",data:{message:`No ${e} checkpoint found for codon ${t}`,fatal:!1}});return}await this.executeRollback(i,d,n,_,u)}async rollbackToLastSuccess(t){let e=this.stateManager.getCurrentlyRunningCodon();if(e&&!Ft(e.status)){this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"error",data:{message:"Cannot rollback while codon is running. Use 'codon.forceStop' first.",codon:e.codonId,fatal:!1}});return}let u=this.stateManager.getState(),a=await F0(u,void 0,void 0,this.logger),l=-1;for(let m=0;m<a.codons.length;m++)if(a.codons[m].codon.status==="completed"){l=m;break}if(l>=0){let m=a.codons[l];if(m.codon.status==="completed"){this.logger.log(`Found last successfully completed thread codon to rollback to: ${JSON.stringify(m)}`),await this.executeRollback(a,l,m.codon.completionCheckpoint,"completed",t);return}}this.logger.log("Did not find any successful codon to rollback to. Going to look for a checkpoint in the thread.");let i=-1,o=null,d=null;for(let m=a.codons.length-1;m>=0;m--){let n=a.codons[m].codon;if("rigSetupCheckpoint"in n&&n.rigSetupCheckpoint)i=m,o=n.rigSetupCheckpoint,d="rig-setup",this.logger.log(`Found rig setup checkpoint in codon ${n.codonId}`);else if(n.status==="completed"&&n.completionCheckpoint)i=m,o=n.completionCheckpoint,d="completed",this.logger.log(`Found completion checkpoint in codon ${n.codonId}`);else if(n.status==="failed"&&"errorCheckpoint"in n&&n.errorCheckpoint)i=m,o=n.errorCheckpoint,d="error",this.logger.log(`Found error checkpoint in codon ${n.codonId}`);else if(n.status==="skipped"&&"skipCheckpoint"in n&&n.skipCheckpoint)i=m,o=n.skipCheckpoint,d="skipped",this.logger.log(`Found skipped checkpoint in codon ${n.codonId}`)}if(i>=0&&o&&d)await this.executeRollback(a,i,o,d,t);else this.logger.log("No checkpoints found in execution history","error"),this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"error",data:{message:"No checkpoints found in execution history",fatal:!1}})}async executeRollback(t,e,u,a,l){let i=t.codons[e];if(!i)throw Error(`Invalid target codon index: ${e}`);let d=this.config.codons.find((m)=>m.id===i.codon.codonId)?.name||i.codon.codonId;this.logger.log(`Starting codon-by-codon rollback to ${a} checkpoint ${u} in codon ${i.codon.codonId} (${d})`),this.isRollingBack=!0,await this.executeCodonByCodonRollback(t,e,u,a,d,l).finally(()=>{this.isRollingBack=!1})}async executeCodonByCodonRollback(t,e,u,a,l,i){this.cleanupCurrentCodon();let o=t.codons[e];if(!o)throw Error(`Invalid target codon index: ${e}`);let d=t.codons.slice(0,e),m=t.codons[0]?.runId||o.runId,_=t.codons[0]?.codon.codonId||o.codon.codonId;this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"rollback.started",data:{fromRun:m,fromCodon:_,toCodon:o.codon.codonId,toCheckpoint:u,checkpointType:a,codonsToProcess:d.map((s)=>s.codon.codonId)}});let n=0,r=d.length+1;for(let s of d){n++,this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"rollback.progress",data:{currentStep:n,totalSteps:r,message:`Rolling back through ${s.codon.codonId}`}});let k=this.getLastCheckpointForCodon(s.codon);if(k&&this.checkpointGit){await this.checkpointGit.resetToCheckpoint(k.sha);let g=this.config.codons.find((f)=>f.id===s.codon.codonId);this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"rollback.codonCheckpoint",data:{codonId:s.codon.codonId,codonName:g?.name||s.codon.codonId,checkpoint:k.sha,checkpointType:k.type,message:`Reset to ${s.codon.codonId} ${k.type} checkpoint`}})}await this.cleanupCodonRigDirectories(s.codon)}if(n++,this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"rollback.progress",data:{currentStep:n,totalSteps:r,message:"Applying final checkpoint"}}),this.checkpointGit)await this.checkpointGit.resetToCheckpoint(u);this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"rollback.codonCheckpoint",data:{codonId:o.codon.codonId,codonName:l,checkpoint:u,checkpointType:a,message:`Reset to target checkpoint ${o.codon.codonId} (${a})`}});let c=this.stateManager.getCurrentRun();if(c)this.stateManager.transition({type:"RunCompleted",data:{runId:c.runId}});await this.stateManager.waitForPendingTransitions();let x=a==="rig-setup"?null:o.codon.codonId;await this.startNewRun({type:"continuation",source:{runId:o.runId,afterCodon:x?at(x):null,checkpointSha:u},reason:"rollback"});let I=this.config.codons.findIndex((s)=>s.id===o.codon.codonId);if(I>=0){let k=a==="rig-setup"?I:I-1;for(let g=0;g<=k;g++){let f=this.config.codons[g];if(f.type!=="loop"&&f.checkpointedFiles?.length)await this.addCheckpointPatterns(f.checkpointedFiles)}}if(await this.stateManager.waitForPendingTransitions(),this.isRollingBack=!1,this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"rollback.completed",data:{fromRun:m,toRun:this.currentRunId||"",checkpoint:u,codonId:o.codon.codonId,codonName:l,checkpointType:a,autoRestart:i}}),await this.sendStateSnapshot(),i&&this.config.autostart){let s=await this.stateManager.getNextCodonToExecute();if(s)await this.startCodon(s,a==="rig-setup")}}getLastCheckpointForCodon(t){if(t.status==="completed"&&t.completionCheckpoint)return{sha:t.completionCheckpoint,type:"completed"};if(t.status==="failed"&&"errorCheckpoint"in t&&t.errorCheckpoint)return{sha:t.errorCheckpoint,type:"error"};if(t.status==="skipped"&&"skipCheckpoint"in t&&t.skipCheckpoint)return{sha:t.skipCheckpoint,type:"skipped"};if("rigSetupCheckpoint"in t&&t.rigSetupCheckpoint)return{sha:t.rigSetupCheckpoint,type:"rig-setup"};return null}getRigSetupDirectories(t){let e=this.config.codons.find((l)=>l.id===t);if(!e)return[];if(e.type==="loop")return[];let u=e;if(!u.rigSetup)return[];let a=[];for(let l of u.rigSetup)if(l.type==="copy"&&l.copy)a.push(l.copy.to);return a}async cleanupCodonRigDirectories(t){let e=this.getRigSetupDirectories(t.codonId);if(e.length===0)return;let a=this.config.codons.find((o)=>o.id===t.codonId)?.name||t.codonId;this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"rollback.rigCleanup",data:{codonId:t.codonId,codonName:a,directories:e,status:"started"}});let l=[],i=[];for(let o of e){let d=$t.join(this.config.executionPath,o);try{if(dt.existsSync(d))await dt.promises.rm(d,{recursive:!0,force:!0}),this.logger.log(`Removed rig setup directory: ${o}`),l.push(o);else this.logger.log(`Rig setup directory already absent: ${o}`),l.push(o)}catch(m){let _=qt(m).message;this.logger.log(`Failed to remove rig directory ${o}: ${_}`,"error"),i.push({directory:o,error:_})}}if(i.length>0){let o=l.length>0?"partial":"failed";this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"rollback.rigCleanup",data:{codonId:t.codonId,codonName:a,directories:e,status:o,successfulCleanups:l,failedCleanups:i,error:i.map((d)=>`${d.directory}: ${d.error}`).join(", ")}})}else this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"rollback.rigCleanup",data:{codonId:t.codonId,codonName:a,directories:e,status:"completed",successfulCleanups:l,failedCleanups:[]}})}async loadSentinelsForCodon(t,e){if(this.currentCodonSentinels.clear(),!t.sentinels||t.sentinels.length===0)return{loaded:[],errors:[]};this.logger.log(`Loading ${t.sentinels.length} sentinel config(s) for codon ${e}`,"info");let u=this.config.configPath?$t.dirname(this.config.configPath):this.config.cwd,a=this.sentinelConfigLoader.loadConfigsForCodon(t.sentinels,t.id,u);if(a.errors.length>0)this.logger.log(`${a.errors.length} sentinel config(s) failed to load`,"info");if(a.configs.length===0)return this.logger.log("No sentinels loaded for this codon","info"),{loaded:[],errors:a.errors};try{let l=a.configs.map((d)=>{let m=d.config;if(d.config.reportToWebsocket||d.outputPaths||d.failCodonIfNotLoaded){let _=t.sentinels?.find((n)=>typeof n.sentinelConfig==="object"&&n.sentinelConfig.id===m.id||typeof n.sentinelConfig==="string")?.settings?.reportToWebsocket;if(_){let n={...m.reportToWebsocket||{},..._};return{...m,reportToWebsocket:n}}}return m}),i=a.configs.map((d)=>d.configDirectory),o=new Map;for(let d of a.configs)if(d.outputPaths)o.set(d.config.id,d.outputPaths);await this.sentinelManager.loadSentinelsForCodon(l,e,{configDirectory:i[0],runStartTime:new Date,executionPath:this.config.executionPath,outputPathsMap:o.size>0?o:void 0}),this.currentCodonSentinels.clear();for(let d of l)this.currentCodonSentinels.add(d.id);this.logger.log(`Successfully loaded ${l.length} sentinel instance(s)`,"info");for(let d of a.configs){let m=d.config;this.emit("event",{id:z(J()),timestamp:new Date().toISOString(),type:"sentinel.loaded",data:{sentinelId:m.id,codonId:e,model:m.model,triggerType:m.trigger.type,executionStrategy:m.execution.strategy,conversational:!!m.conversational,source:d.source,sourcePath:d.sourcePath}})}if(this.currentRunId&&l.length>0){let d=this.sentinelManager.getSentinelStates(),m=d.reduce((_,n)=>_+n.totalCost,0);this.stateManager.transition({type:"SentinelStatesUpdated",data:{runId:this.currentRunId,codonId:t.id,sentinelStates:d,totalCost:m}}),this.logger.log(`Captured initial state for ${d.length} sentinel(s)`,"debug")}return{loaded:a.configs.map((d)=>d.config.id),errors:a.errors}}catch(l){let i=`Failed to instantiate sentinels in SentinelManager: ${l}`,o=a.configs.every((d)=>d.failCodonIfNotLoaded);return{loaded:[],errors:[{ref:"SentinelManager",error:i,fatal:o}]}}}cleanupCurrentCodon(){let t=this.currentCodon?!!this.codonRunners.get(this.currentCodon.codonId):!1;if(this.logger.log(`[cleanupCurrentCodon] Called - currentCodon=${this.currentCodon?.codonId||"none"}, hasRunner=${t}`,"info"),this.logger.log(`[cleanupCurrentCodon] Stack trace:
|
|
261
|
+
${Error().stack}`,"debug"),this.currentCodon?.codonId){let e=this.codonRunners.get(this.currentCodon.codonId);if(e)this.logger.log(`[cleanupCurrentCodon] Calling cleanup() on runner for codon ${this.currentCodon.codonId}`,"info"),e.cleanup().catch((u)=>this.logger.log(`Error cleaning up runner for codon ${this.currentCodon?.codonId}: ${u}`,"error")),this.codonRunners.delete(this.currentCodon.codonId),this.logger.log(`[cleanupCurrentCodon] Runner for codon ${this.currentCodon.codonId} cleaned up and removed from map`,"info");else this.logger.log(`[cleanupCurrentCodon] No runner found in map for codon ${this.currentCodon.codonId}`,"info")}this.watchedPatterns=[],this.recentFileAccess=void 0,this.currentCodon=void 0,this.codonFailureReason=void 0,this.isForceStopping=!1,this.isSkippingCodon=!1,this.resultMessageReceived=!1,this.pendingToolUses.clear()}async runCommand(t,e){let u,a=typeof t==="string"?{type:"command",command:{run:t}}:t;if(a.command.workingDirectory==="lastCopied")if(e)u=e;else u=this.config.executionPath;else u=this.config.executionPath;this.logger.log(`[DEBUG] Running command: ${a.command.run}`,"info"),this.logger.log(`[DEBUG] Working directory: ${u}`,"info");try{let l=await dt.promises.readdir(u);this.logger.log(`[DEBUG] Directory contents: ${l.join(", ")}`,"info")}catch(l){this.logger.log(`[DEBUG] Could not read directory contents: ${qt(l).message}`,"error")}return new Promise((l,i)=>{let o=Cx(a.command.run,{shell:!0,cwd:u}),d="",m="";o.stdout?.on("data",(_)=>{let n=_.toString();d+=n,this.logger.log(`[DEBUG] Command stdout: ${n.trim()}`,"info")}),o.stderr?.on("data",(_)=>{let n=_.toString();m+=n,this.logger.log(`[DEBUG] Command stderr: ${n.trim()}`,"error")}),o.on("exit",(_)=>{if(_===0)this.logger.log("[DEBUG] Command completed successfully","info"),l();else{let n=_??-1;this.logger.log(`[DEBUG] Command failed with exit code ${n}`,"error"),this.logger.log(`[DEBUG] Full stdout: ${d}`,"info"),this.logger.log(`[DEBUG] Full stderr: ${m}`,"error");let r=new Gl(`Command failed with exit code ${n}`,n,d,m);i(r)}}),o.on("error",(_)=>{this.logger.log(`[DEBUG] Command error: ${_.message}`,"error"),i(_)})})}async copyPath(t,e){if(!await dt.promises.stat(t).catch(()=>null))throw Error(`Source path does not exist: ${t}`);let a=$t.dirname(e),l=await dt.promises.stat(a).catch(()=>null);if(!l||!l.isDirectory())throw Error(`Target parent directory does not exist: ${a}`);if(await dt.promises.stat(e).catch(()=>null))throw Error(`Target path already exists: ${e}`);await this.runCommand(`cp -r ${u2(t)} ${u2(e)}`)}async initializeCheckpoints(){if(!await this.isGitAvailable()){this.logger.log("Git is not available. Checkpointing disabled.","info"),this.checkpointingEnabled=!1;return}this.checkpointGit=new xl(this.config.executionPath,this.logger),await this.checkpointGit.initialize(),this.stateManager.setCheckpointGit(this.checkpointGit),this.logger.log("Checkpoint system initialized")}async isGitAvailable(){return new Promise((t)=>{let e=Cx("git",["--version"],{stdio:"ignore"});e.on("error",()=>t(!1)),e.on("exit",(u)=>t(u===0))})}async addCheckpointPatterns(t){if(!this.checkpointingEnabled||t.length===0)return;if(!this.checkpointGit)this.checkpointGit=new xl(this.config.executionPath,this.logger),await this.checkpointGit.initialize();await this.checkpointGit.addPatterns(t),this.logger.log(`Added checkpoint patterns: ${t.join(", ")}`)}async createCheckpoint(t){if(!this.checkpointingEnabled||!this.checkpointGit){this.logger.log(`[CHECKPOINT-DEBUG] Checkpoint creation skipped - enabled: ${this.checkpointingEnabled}, git: ${!!this.checkpointGit}`);return}this.logger.log(`[CHECKPOINT-DEBUG] Creating checkpoint for codon ${t.codonId} with status ${t.status}`),this.logger.log(`[CHECKPOINT-DEBUG] Checkpoint info: ${JSON.stringify(t)}`);try{let e=`${t.status}:${t.codonId} [run:${t.runId}] ${t.codonName}`,u=["",`Codon: ${t.codonName}`,`Status: ${t.status}`,`Timestamp: ${t.timestamp}`];if(t.duration!==void 0)u.push(`Duration: ${t.duration}ms`);let a=`${e}
|
|
262
|
+
${u.join(`
|
|
263
|
+
`)}`;this.logger.log(`[CHECKPOINT-DEBUG] Commit message: ${a}`);let i=this.stateManager.getCurrentRun()?.gitBranch||`run-${this.currentRunId}`;this.logger.log(`[CHECKPOINT-DEBUG] Using branch: ${i}`),await this.checkpointGit.switchToBranch(i);let o=await this.checkpointGit.commit(a);if(this.logger.log(`[CHECKPOINT-DEBUG] Checkpoint commit returned: ${o}`),o){this.logger.log(`[CHECKPOINT-DEBUG] Created checkpoint: ${o} (${t.status}) on branch ${i}`);let d=t.status==="rig-setup"?"rig-setup":t.status==="completed"?"completed":t.status==="error"?"error":"skipped";if(this.logger.log(`[CHECKPOINT-DEBUG] Firing CheckpointCreated transition with type: ${d}`),this.currentRunId)this.stateManager.transition({type:"CheckpointCreated",data:{runId:this.currentRunId,codonId:at(t.codonId),checkpointType:d,sha:o,branch:i}});return o}else this.logger.log("[CHECKPOINT-DEBUG] No commit hash returned from checkpoint.commit()")}catch(e){this.logger.log(`[CHECKPOINT-DEBUG] Checkpoint failed: ${qt(e).message}. Disabling checkpointing for this session.`,"error"),this.checkpointingEnabled=!1}}async shutdown(t,e=!0){if(this.isShuttingDown){this.logger.log(`Shutdown already in progress, ignoring: ${t}`);return}if(this.logger.log(`Shutting down server: ${t}`),this.currentCodon){let u=this.codonRunners.get(this.currentCodon.codonId);if(u)this.logger.log("Killing current codon runner for shutdown"),await u.kill("SIGTERM")}if(this.isShuttingDown=!0,t!=="all codons completed"&&this.checkpointingEnabled&&this.currentCodon)await this.createCheckpoint({status:"exit",codonId:at(this.currentCodon.codon.id),codonName:this.currentCodon.codon.name,runId:this.currentRunId||Ne("unknown"),timestamp:new Date().toISOString()});if(this.cleanupCurrentCodon(),this.sentinelManager)this.logger.log("Shutting down sentinel manager...","info"),await this.sentinelManager.shutdown(),this.logger.log("Sentinel manager shutdown complete","info");if(this.currentRunId&&t==="all codons completed")this.stateManager.transition({type:"RunCompleted",data:{runId:this.currentRunId}});else if(this.currentRunId&&t!=="codon failure")this.stateManager.transition({type:"RunFailed",data:{runId:this.currentRunId}});if(await this.stateManager.waitForPendingTransitions(),this.heartbeatInterval)clearInterval(this.heartbeatInterval),this.heartbeatInterval=void 0;for(let[u,a]of this.clients)try{a.close()}catch(l){this.logger.log(`Error closing client ${u}: ${l}`,"error")}if(this.clients.clear(),this.server)this.server.stop(),this.server=null;if(this.proxyRunner)this.proxyRunner.stop(),this.proxyRunner=null;try{this.logger.log("Event journal closed")}catch(u){this.logger.log(`Error closing event journal: ${u}`,"error")}if(dt.existsSync(this.config.lockFile))try{dt.unlinkSync(this.config.lockFile),this.logger.log("Lock file removed")}catch(u){this.logger.log(`Failed to remove lock file: ${u}`,"error")}this.logger.log("Server shutdown complete");try{if(dt.existsSync(this.config.lockFile))dt.unlinkSync(this.config.lockFile)}catch{}if(e&&t!=="running integration test")setTimeout(()=>{process.exit(0)},J0.CODON_CLEANUP_DELAY_MS)}}import*as me from"node:fs";import*as Vu from"node:path";var rJ={"hank.json":`{
|
|
264
|
+
"meta": {
|
|
265
|
+
"name": "My Workflow",
|
|
266
|
+
"version": "1.0.0",
|
|
267
|
+
"description": "Generated by hankweave init"
|
|
268
|
+
},
|
|
269
|
+
"recommendations": {
|
|
270
|
+
"model": "haiku"
|
|
271
|
+
},
|
|
272
|
+
"hank": [
|
|
273
|
+
{
|
|
274
|
+
"id": "analyze-haiku",
|
|
275
|
+
"name": "Analyze Project (Haiku)",
|
|
276
|
+
"model": "haiku",
|
|
277
|
+
"continuationMode": "fresh",
|
|
278
|
+
"promptFile": "./prompts/analyze-haiku.md",
|
|
279
|
+
"checkpointedFiles": ["analysis-haiku.md"],
|
|
280
|
+
"outputFiles": [
|
|
281
|
+
{
|
|
282
|
+
"copy": ["analysis-haiku.md"]
|
|
283
|
+
}
|
|
284
|
+
]
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
"id": "analyze-gemini",
|
|
288
|
+
"name": "Analyze Project (Gemini)",
|
|
289
|
+
"model": "gemini-2.5-flash",
|
|
290
|
+
"continuationMode": "fresh",
|
|
291
|
+
"promptFile": "./prompts/analyze-gemini.md",
|
|
292
|
+
"checkpointedFiles": ["analysis-gemini.md"],
|
|
293
|
+
"outputFiles": [
|
|
294
|
+
{
|
|
295
|
+
"copy": ["analysis-gemini.md"]
|
|
296
|
+
}
|
|
297
|
+
]
|
|
298
|
+
}
|
|
299
|
+
]
|
|
300
|
+
}`,"prompts/analyze-haiku.md":`# Project Analysis (Haiku)
|
|
301
|
+
|
|
302
|
+
Please analyze the files in the \`data\` directory located in the current working directory (do not go to other directories) and create a comprehensive analysis report.
|
|
303
|
+
|
|
304
|
+
Your analysis should include:
|
|
305
|
+
|
|
306
|
+
1. Very brief overview of the files in that directory
|
|
307
|
+
|
|
308
|
+
Please create your analysis in a file called \`analysis-haiku.md\` in the execution directory.`,"prompts/analyze-gemini.md":`# Project Analysis (Gemini)
|
|
309
|
+
|
|
310
|
+
Please analyze the files in the \`data\` directory located in the current working directory (do not go to other directories) and create a comprehensive analysis report.
|
|
311
|
+
|
|
312
|
+
Your analysis should include:
|
|
313
|
+
|
|
314
|
+
1. Very brief overview of the files in that directory
|
|
315
|
+
|
|
316
|
+
Please create your analysis in a file called \`analysis-gemini.md\` in the execution directory.`,"README.md":"# Hank\n\nThis hank was initialized with `hankweave init`.\n\n- `hank.json` - Main workflow configuration\n- `prompts/analyze.md` - Prompt template for analysis\n- `.gitignore` - Ignore patterns for version control\n\n## Customization\n\nEdit `hank.json` to customize your workflow:\n- Add more codons to the `hank` array\n- Change the `model` (sonnet or opus)\n- Add `rigSetup` to prepare your environment\n- Configure `checkpointedFiles` to track files in checkpoints\n- Use `recommendations` to suggest runtime settings","data/sample1.txt":`# Project Overview
|
|
317
|
+
|
|
318
|
+
This is a sample project for demonstrating the hankweave workflow system.
|
|
319
|
+
|
|
320
|
+
## Key Features
|
|
321
|
+
- Multi-step AI workflows
|
|
322
|
+
- Flexible codon configuration
|
|
323
|
+
- File tracking and persistence
|
|
324
|
+
|
|
325
|
+
## Getting Started
|
|
326
|
+
1. Review the hank.json configuration
|
|
327
|
+
2. Customize prompts in the prompts/ directory
|
|
328
|
+
3. Run your workflow with hankweave`,"data/sample2.txt":`# Technical Specifications
|
|
329
|
+
|
|
330
|
+
## Architecture
|
|
331
|
+
- Node.js runtime
|
|
332
|
+
- TypeScript for type safety
|
|
333
|
+
- Event-driven processing model
|
|
334
|
+
|
|
335
|
+
## Dependencies
|
|
336
|
+
- bun for fast execution
|
|
337
|
+
- Anthropic Claude API for AI capabilities
|
|
338
|
+
|
|
339
|
+
## Configuration
|
|
340
|
+
The system uses JSON-based configuration files to define workflows and execution parameters.`,"data/notes.txt":`# Development Notes
|
|
341
|
+
|
|
342
|
+
## TODO
|
|
343
|
+
- Add more example workflows
|
|
344
|
+
- Improve error handling
|
|
345
|
+
- Add unit tests for core functionality
|
|
346
|
+
|
|
347
|
+
## Ideas
|
|
348
|
+
- Support for parallel codon execution
|
|
349
|
+
- Integration with other AI providers
|
|
350
|
+
- Web-based workflow designer
|
|
351
|
+
|
|
352
|
+
## Known Issues
|
|
353
|
+
- None at this time`};async function yx(t){if(!me.existsSync(t))me.mkdirSync(t,{recursive:!0});if(me.readdirSync(t).length>0)throw Error(`Directory ${t} is not empty. Please run init in an empty directory or specify a new directory.`);let u=Vu.join(t,"prompts");me.mkdirSync(u,{recursive:!0});let a=Vu.join(t,"data");me.mkdirSync(a,{recursive:!0});for(let[l,i]of Object.entries(rJ)){let o=Vu.join(t,l),d=Vu.dirname(o);if(!me.existsSync(d))me.mkdirSync(d,{recursive:!0});me.writeFileSync(o,i,"utf-8")}console.log(`
|
|
354
|
+
✅ Initialized hank in ${t}
|
|
355
|
+
`),console.log("Created files:"),console.log(" - hank.json"),console.log(" - prompts/analyze-haiku.md"),console.log(" - prompts/analyze-gemini.md"),console.log(" - data/sample1.txt"),console.log(" - data/sample2.txt"),console.log(" - data/notes.txt"),console.log(" - README.md")}lo();io();oo();po();import{generateText as cJ}from"ai";class Ve{static instance=null;static MODEL_SHORTCUTS={opus:"claude-opus",sonnet:"claude-sonnet",haiku:"claude-haiku"};providers=new Map;models=new Map;uniqueModels=new Set;providerStatus=new Map;logger;healthCheckTimeout;blockList;constructor(t={}){if(this.logger=t.logger,this.healthCheckTimeout=t.healthCheckTimeout||5000,this.blockList=t.blockList||{},this.loadModelsData(),this.initializeProviders(),t.performHealthCheckOnInit)this.performHealthChecks().catch((e)=>{this.logger?.log(`Background health checks failed: ${e}`,"error")})}static getInstance(t){if(!Ve.instance)Ve.instance=new Ve(t);return Ve.instance}static resetInstance(){Ve.instance=null}loadModelsData(){try{let t=ku.parse(Ma),e=ku.parse(ba);if(e.providers.length>0)this.logger?.log(`Loaded ${e.providers.length} custom providers from extension file`,"info");let u=[...t.providers,...e.providers];for(let a of u)for(let l of a.models){let i=`${l.providerId}/${l.modelId}`;if(this.uniqueModels.add(i.toLowerCase()),this.models.set(i.toLowerCase(),l),!l.modelId.includes("/"))this.models.set(l.modelId.toLowerCase(),l)}this.logger?.log(`Loaded ${this.uniqueModels.size} unique models from data files`,"info")}catch(t){this.logger?.log(`Failed to load models data: ${t}`,"error")}}findCheapestModel(t){let e,u=Number.POSITIVE_INFINITY,a=new Date;a.setFullYear(a.getFullYear()-1);let l=a.toISOString().substring(0,7);for(let i of this.models.values()){if(i.providerId.toLowerCase()!==t.toLowerCase())continue;if(!i.modalities.output.includes("text")||!i.modalities.input.includes("text")||i.modalities.output.length===1&&i.modalities.output[0]==="embedding"){this.logger?.log(`Skipping ${i.modelId} for health check (embedding or non-chat model)`,"debug");continue}if(i.last_updated<l){this.logger?.log(`Skipping ${i.modelId} for health check (last updated: ${i.last_updated})`,"debug");continue}let d=i.cost?.input;if(d!==void 0&&d>0&&d<u)u=d,e=i}if(e)this.logger?.log(`Selected ${e.modelId} as cheapest for ${t} (input cost: $${e.cost?.input}/M tokens, updated: ${e.last_updated})`,"debug");return e?.modelId}initializeProviders(){for(let t of fu){let e=`HANKWEAVE_SENTINEL_${t.apiKeyEnvVar}`,u=process.env[e]||process.env[t.apiKeyEnvVar];if(!u){let l={status:"not-configured",id:t.id,error:`No API key found (checked: ${e}, ${t.apiKeyEnvVar})`};this.providerStatus.set(t.id.toLowerCase(),l),this.logger?.log(`Provider ${t.id}: ${l.error}`,"debug");continue}let a=process.env[e]?e:t.apiKeyEnvVar;try{let l=t.createProvider(u);this.providers.set(t.id.toLowerCase(),l);let i={status:"available",id:t.id,healthy:!1};this.providerStatus.set(t.id.toLowerCase(),i),this.logger?.log(`Provider ${t.id}: Initialized (using ${a})`,"info")}catch(l){let i={status:"failed",id:t.id,error:`Failed to initialize: ${l}`,lastChecked:new Date};this.providerStatus.set(t.id.toLowerCase(),i),this.logger?.log(`Provider ${t.id}: ${i.error}`,"error")}}}isModelBlocked(t){let e=this.blockList.models?.some((a)=>a.toLowerCase()===t.modelId.toLowerCase()),u=this.blockList.providers?.some((a)=>a.toLowerCase()===t.providerId.toLowerCase());return e||u||!1}calculateStringSimilarity(t,e){let u=t.toLowerCase(),a=e.toLowerCase();if(u===a)return 1;if(u.length===0||a.length===0)return 0;let l=[];for(let d=0;d<=a.length;d++)l[d]=[d];for(let d=0;d<=u.length;d++)l[0][d]=d;for(let d=1;d<=a.length;d++)for(let m=1;m<=u.length;m++)if(a.charAt(d-1)===u.charAt(m-1))l[d][m]=l[d-1][m-1];else l[d][m]=Math.min(l[d-1][m-1]+1,l[d][m-1]+1,l[d-1][m]+1);let i=l[a.length][u.length],o=Math.max(u.length,a.length);return 1-i/o}getPreferredProvider(t){let e=t.toLowerCase();if(e.includes("claude"))return"anthropic";if(e.includes("gemini"))return"google";if(e.startsWith("gpt-")||e.startsWith("o1-")||e.startsWith("o3-"))return"openai";let u=[{term:"claude",provider:"anthropic"},{term:"gemini",provider:"google"},{term:"gpt",provider:"openai"}];for(let{term:a,provider:l}of u){if(this.calculateStringSimilarity(e,a)>=0.75)return l;let o=e.split(/[-_\s]/);for(let d of o)if(d.length>=3){if(this.calculateStringSimilarity(d,a)>=0.75)return l}}return null}fuzzyMatchModels(t,e,u,a){let l=[],i=a||this.getPreferredProvider(t);for(let o of this.uniqueModels){let d=this.models.get(o);if(!d)continue;if(a&&d.providerId.toLowerCase()!==a.toLowerCase())continue;if(!u){if(this.blockList.models?.some((s)=>s.toLowerCase()===d.modelId.toLowerCase()))continue;if(this.blockList.providers?.some((s)=>s.toLowerCase()===d.providerId.toLowerCase()))continue}let m=this.calculateStringSimilarity(t,d.modelId),_=this.calculateStringSimilarity(t,d.name),n=t.toLowerCase(),r=d.modelId.toLowerCase(),c=d.name.toLowerCase();if(r.includes(n)||r.startsWith(n))m=Math.min(1,m+0.2);if(c.includes(n)||c.startsWith(n))_=Math.min(1,_+0.2);let x=n.split(/[-_\s]+/).filter((s)=>s.length>=3);if(x.length>=2){let s=r.split(/[-_\s]+/),k=c.split(/[-_\s]+/),g=x.every((h)=>s.some((B)=>{return B===h||B.includes(h)||h.includes(B)||this.calculateStringSimilarity(h,B)>=0.75})),f=x.every((h)=>k.some((B)=>{return B===h||B.includes(h)||h.includes(B)||this.calculateStringSimilarity(h,B)>=0.75}));if(g)m=Math.min(1,m+0.15);if(f)_=Math.min(1,_+0.15)}let I=Math.max(m,_);if(i&&d.providerId.toLowerCase()===i.toLowerCase())I=Math.min(1,I+0.1);if(I>=e)l.push({model:d,score:I})}if(l.length===0)return null;return l.sort((o,d)=>{if(Math.abs(o.score-d.score)>0.2)return d.score-o.score;if(i&&!a){let r=o.model.providerId.toLowerCase()===i.toLowerCase(),c=d.model.providerId.toLowerCase()===i.toLowerCase();if(r!==c)return r?-1:1}let m=new Date(o.model.last_updated.length===7?`${o.model.last_updated}-01`:o.model.last_updated),n=new Date(d.model.last_updated.length===7?`${d.model.last_updated}-01`:d.model.last_updated).getTime()-m.getTime();if(n===0)return d.score-o.score;return n}),l[0].model}async performHealthChecks(){this.logger?.log("Starting provider health checks","debug");let t=Array.from(this.providers.entries()).map(async([e,u])=>{let a=this.providerStatus.get(e);if(!a||a.status!=="available"){this.logger?.log(`Skipping health check for ${e} (not available)`,"debug");return}let l=this.findCheapestModel(e);if(!l){this.logger?.log(`No models found for provider ${e}, marking as unhealthy`,"error");let i={...a,healthy:!1,error:"No models available",lastChecked:new Date};this.providerStatus.set(e,i);return}this.logger?.log(`Using ${l} for ${e} health check (cheapest model)`,"debug");try{let i=new Promise((_,n)=>{setTimeout(()=>n(Error("Health check timeout")),this.healthCheckTimeout)}),o=u.languageModel(l),d=await Promise.race([cJ({model:o,messages:[{role:"user",content:"Hi"}],maxOutputTokens:16,temperature:0}),i]);this.logger?.log(`Provider ${e} health check response: "${d.text.substring(0,50)}${d.text.length>50?"...":""}"`,"debug");let m={...a,healthy:!0,error:void 0,lastChecked:new Date};this.providerStatus.set(e,m),this.logger?.log(`Provider ${e}: Health check passed`,"debug")}catch(i){let o={...a,healthy:!1,error:`Health check failed: ${i}`,lastChecked:new Date};this.providerStatus.set(e,o),this.logger?.log(`Provider ${e}: ${o.error}`,"error")}});return await Promise.allSettled(t),this.logger?.log("Health checks complete","debug"),new Map(this.providerStatus)}getProviderForModel(t,e){let u=t.toLowerCase(),a=this.models.get(u);if(!a)return this.logger?.log(`Model not found: ${t}`,"debug"),{success:!1,reason:"model-not-found"};if(this.isModelBlocked(a))return this.logger?.log(`Model blocked: ${t}`,"error"),{success:!1,reason:"model-blocked"};let l=a.providerId.toLowerCase(),i=this.providers.get(l);if(!i)return this.logger?.log(`Provider not available: ${a.providerId}`,"debug"),{success:!1,reason:"provider-unavailable"};let o=this.providerStatus.get(l);if(o?.status==="available"&&o.healthy===!1)return this.logger?.log(`Provider unhealthy: ${a.providerId}`,"debug"),{success:!1,reason:"provider-unhealthy"};if(e){if(e.temperature!==void 0&&!a.temperature)this.logger?.log(`Model ${t} doesn't support temperature control, parameter will be ignored`,"info");if(e.maxOutputTokens!==void 0&&e.maxOutputTokens>a.limit.output)this.logger?.log(`Trimming maxOutputTokens from ${e.maxOutputTokens} to model limit ${a.limit.output}`,"info"),e.maxOutputTokens=a.limit.output}return{success:!0,model:i.languageModel(a.modelId)}}getModelInfo(t){let e=t.toLowerCase(),u=this.models.get(e);if(!u)return{success:!1,reason:"model-not-found"};if(this.isModelBlocked(u))return{success:!1,reason:"model-blocked"};return{success:!0,info:u}}resolveModel(t){let{providerId:e,model:u,ignoreBlockList:a=!0}=t,l=0.6,i=u.toLowerCase();if(Ve.MODEL_SHORTCUTS[i])u=Ve.MODEL_SHORTCUTS[i];let o=(m)=>{if(a)return!1;return this.blockList.models?.some((_)=>_.toLowerCase()===m.modelId.toLowerCase())||this.blockList.providers?.some((_)=>_.toLowerCase()===m.providerId.toLowerCase())||!1};if(e){if(!a&&this.blockList.providers?.some((n)=>n.toLowerCase()===e.toLowerCase()))return{success:!1,reason:"model-blocked"};let m=`${e}/${u}`,_=this.models.get(m.toLowerCase());if(!_){if(_=this.models.get(u.toLowerCase()),_&&_.providerId.toLowerCase()!==e.toLowerCase())_=void 0}if(_){if(o(_))return{success:!1,reason:"model-blocked"};return{success:!0,modelInfo:_,matchType:"exact"}}}if(!e){let m=this.getPreferredProvider(u);if(m){let n=`${m}/${u}`,r=this.models.get(n.toLowerCase());if(r){if(o(r))return{success:!1,reason:"model-blocked"};return{success:!0,modelInfo:r,matchType:"exact-with-inferred-provider"}}}let _=this.models.get(u.toLowerCase());if(_){if(o(_))return{success:!1,reason:"model-blocked"};return{success:!0,modelInfo:_,matchType:"exact-with-inferred-provider"}}}let d=this.fuzzyMatchModels(u,0.6,a,e);return d?{success:!0,modelInfo:d,matchType:"fuzzy"}:{success:!1,reason:"model-not-found"}}isModelAvailable(t){return this.getProviderForModel(t).success}getAvailableModels(){let t=new Set;for(let e of this.uniqueModels)if(this.isModelAvailable(e))t.add(e);return Array.from(t)}getProviderStatus(){return new Map(this.providerStatus)}calculateCost(t,e){let u=this.getModelInfo(t);if(!u.success)return this.logger?.log(`Cannot calculate cost: model not found: ${t}`,"debug"),null;let a=u.info.cost;if(!a)return this.logger?.log(`Cannot calculate cost: no pricing data for ${t}`,"debug"),null;let l=e.inputTokens/1e6*(a.input||0),i=e.outputTokens/1e6*(a.output||0),o=(e.cacheReadTokens||0)/1e6*(a.cache_read||0),d=(e.cacheCreationTokens||0)/1e6*(a.cache_write||0);return l+i+o+d}formatCost(t){if(t===0)return"$0.0000";if(t<0.01)return`$${(t*100).toFixed(4)}¢`;return`$${t.toFixed(4)}`}getModelsForProvider(t){let e=[],u=t.toLowerCase();for(let a of this.uniqueModels){let l=this.models.get(a);if(l&&l.providerId.toLowerCase()===u)e.push(a)}return e}getStats(){let t=this.uniqueModels.size,e=fu.length,u=Array.from(this.providerStatus.values()).filter((l)=>l.status==="available").length,a=Array.from(this.providerStatus.values()).filter((l)=>l.status==="available"&&l.healthy===!0).length;return{totalModels:t,totalProviders:e,availableProviders:u,healthyProviders:a}}}Nd();Nt();t2();var BJ=_e(ea(),1),QJ=_e(Vi(),1);import c0 from"node:fs";import Xl from"node:path";import{fileURLToPath as gJ}from"node:url";import{serve as XM}from"crossws/server";import KM from"crossws/websocket";class Ld{logFile;constructor(t){this.logFile=t}log(t,e="info"){let a=`[${new Date().toISOString()}] [${e.toUpperCase()}] ${t}
|
|
356
|
+
`;try{let l=Xl.dirname(this.logFile);if(!c0.existsSync(l))c0.mkdirSync(l,{recursive:!0});c0.appendFileSync(this.logFile,a)}catch(l){console.error(`Failed to write to log file: ${l}`)}if(e==="error")console.error(a.trim())}logWebSocketMessage(t,e,u){try{let a={loggedAt:new Date().toISOString(),direction:e,message:u,metadata:{size:JSON.stringify(u).length}},l=`${JSON.stringify(a)}
|
|
357
|
+
`,i=Xl.dirname(t);if(!c0.existsSync(i))c0.mkdirSync(i,{recursive:!0});c0.appendFileSync(t,l)}catch(a){console.error(`Failed to log WebSocket message: ${a}`)}}logSocketTraffic(t,e,u){this.logWebSocketMessage(t,e,u)}}function vJ(){if(process.env.HANKWEAVE_TEST_IS_COMPILED!==void 0)return process.env.HANKWEAVE_TEST_IS_COMPILED==="true";if(!(typeof Bun<"u"))return!1;let e=import.meta.path;return e.startsWith("/$bunfs/")||/^[A-Z]:[/\\]~BUN[/\\]/i.test(e)}var qJ=p.object({version:p.string().min(1,"Version cannot be empty"),buildDate:p.string().optional(),buildTarget:p.string().optional()});class x0{data;constructor(t){this.data=t}static create(t){let e=qJ.parse(t);return new x0(e)}static deserialize(t){let e=JSON.parse(t);return x0.create(e)}serialize(){return JSON.stringify(this.data,null,2)}get version(){return this.data.version}get buildDate(){return this.data.buildDate}get buildTarget(){return this.data.buildTarget}toObject(){return{...this.data}}}var Ye=null,$l="1.0.0";function Zd(){if(Ye)return Ye;try{if(vJ())try{let u={version:BUILD_VERSION,buildDate:BUILD_DATE,buildTarget:BUILD_TARGET};return Ye=x0.create(u),Ye}catch{return Ye=x0.create({version:$l}),Ye}let t=Xl.dirname(gJ(import.meta.url)),e=Xl.resolve(t,"../package.json");if(c0.existsSync(e)){let u=c0.readFileSync(e,"utf-8"),a=JSON.parse(u);Ye=x0.create({version:a.version||$l})}else Ye=x0.create({version:$l})}catch{Ye=x0.create({version:$l})}return Ye}K0();import GJ from"node:fs";import Td from"node:os";import Ze from"node:path";hu();Yt();function $J(t){if(t.executionPath)return{executionPath:t.executionPath,dataPathInExecutionDir:Ze.join(t.executionPath,"read_only_data_source"),configPath:t.executionPath};else if(t.startNew){let e=Ze.join(Td.homedir(),".hankweave-executions"),u=Date.now(),a=Math.random().toString(36).substring(2,6),l=`${u}-${a}-${t.dataHash.substring(0,6)}`,i=Ze.join(e,l);return{executionPath:i,dataPathInExecutionDir:Ze.join(i,"read_only_data_source"),configPath:i}}else{let e=Ze.join(Td.homedir(),".hankweave-executions"),u=`validation-${t.dataHash.substring(0,6)}`,a=Ze.join(e,u);return{executionPath:a,dataPathInExecutionDir:Ze.join(a,"read_only_data_source"),configPath:a}}}function XJ(t){console.log(`
|
|
358
|
+
✅ Configuration is valid!
|
|
359
|
+
`),console.log("\uD83D\uDCCB Summary:"),console.log(` - Codons: ${t.result.codonCount}`),console.log(` - Total prompt files: ${t.result.promptFileCount}`),console.log(` - Total system prompt files: ${t.result.systemPromptFileCount}`),console.log(` - Rig setup operations: ${t.result.rigSetupCount}`),console.log(` - Codons with file watching: ${t.result.trackingCodonCount}`),console.log(` - Codons with checkpoints: ${t.result.checkpointCodonCount}`);let e=Object.keys(t.result.environmentVariables.fromSystem).length>0,u=t.result.environmentVariables.fromCodons.length>0;if(e||u){if(console.log(`
|
|
360
|
+
\uD83D\uDD27 Environment Variables:`),e){console.log(`
|
|
361
|
+
From System (HANKWEAVE_ prefixed):`);for(let[a,l]of Object.entries(t.result.environmentVariables.fromSystem))console.log(` - ${a}: ${l}`)}if(u){console.log(`
|
|
362
|
+
From Codon Configurations:`);for(let a of t.result.environmentVariables.fromCodons){console.log(` Codon "${a.codonName}" (${a.codonId}):`);for(let[l,i]of Object.entries(a.variables))console.log(` - ${l}: ${i}`)}}}if(t.result.warnings.length>0){console.log(`
|
|
363
|
+
⚠️ Warnings:`);for(let a of t.result.warnings)console.log(` - ${a}`)}}async function u8(t){let{dataPath:e,configPath:u,executionPath:a,startNew:l}=t;if(!GJ.existsSync(e))throw Error(`Data source not found: ${e}`);console.log("Calculating data signature for validation...");let i=await X0(e,Bu.dataHashTimeLimit),o=$J({readOnlySourceDataPath:e,executionPath:a?Ze.resolve(a):void 0,startNew:l,dataHash:i}),d=new e2(Ze.join(Td.tmpdir(),`hankweave-validation-${Date.now()}.log`));kt.getInstance({logger:d,performHealthCheckOnInit:!1}),console.log(`
|
|
364
|
+
\uD83D\uDD0D Validating configuration: ${u}
|
|
365
|
+
`),console.log(`\uD83D\uDCC1 Data source: ${e}`),console.log(`\uD83C\uDFC3 Would execute in: ${o.executionPath}`);let m=await Zr(u,o.executionPath,d);XJ({configPath:u,dataPath:e,executionPath:o.executionPath,result:m})}async function KJ(){if(process.stdin.isTTY)throw Error('No input provided on stdin. Use: echo "text" | hankweave hank.json -');let t=[];for await(let e of process.stdin)t.push(e);return Buffer.concat(t).toString("utf-8")}function l8(t){return A0.join(JJ.tmpdir(),`hankweave-${t}-${Date.now()}-${Math.random().toString(36).slice(2)}.txt`)}async function WJ(){let t=process.argv.slice(2),e;try{e=E_(t)}catch(Q){console.error(`\u274C Error: ${Q.message}`),process.exit(1)}if(e.showVersion)console.log(Zd().version),process.exit(0);console.log(`
|
|
366
|
+
Hankweave v${Zd().version}
|
|
367
|
+
`);let u=e.hankPath||e.configPath||"hank.json",a=e.dataPath||e.dataFlag,l=e.executionPath,i=e.inputText,o=!e.copy,d=e.headless||!1,m=e.validate||!1,_=e.cleanup||!1,n=e.skipConfirmation||!1,r=e.startNew||!1,c=e.force||!1,x=e.init||!1;if(e.help)console.log(`
|
|
368
|
+
Hankweave Runtime - Codon Orchestration
|
|
369
|
+
|
|
370
|
+
Usage: hankweave [hank-path] [data-path] [options]
|
|
371
|
+
|
|
372
|
+
Arguments:
|
|
373
|
+
data-path Path to data file/directory, or "-" for stdin (default: cwd)
|
|
374
|
+
When only one argument provided:
|
|
375
|
+
- If ends with .json: treated as hank-path
|
|
376
|
+
- Otherwise: treated as data-path
|
|
377
|
+
hank-path Path to hank config, or remote Git URL (default: hank.json)
|
|
378
|
+
Remote URLs: https://github.com/user/repo#branch
|
|
379
|
+
Requires both arguments to specify custom hank path
|
|
380
|
+
Options:
|
|
381
|
+
--init Initialize a new hank in current directory
|
|
382
|
+
--config <path> Path to hank configuration file (alternative to positional arg)
|
|
383
|
+
--data <path> Path to data file or directory, or "-" for stdin
|
|
384
|
+
--input <text> Use inline text as data input (highest priority)
|
|
385
|
+
--execution <path> Resume in specific execution directory
|
|
386
|
+
--start-new Start a new execution (don't resume existing)
|
|
387
|
+
- Creates directory if it doesn't exist
|
|
388
|
+
- Requires --force if directory has .hankweave/
|
|
389
|
+
--force Force operation in directories with existing .hankweave/
|
|
390
|
+
- Backs up existing .hankweave.backup-{timestamp}
|
|
391
|
+
- Overwrites read_only_data_source link
|
|
392
|
+
--copy Copy data instead of symlinking (for compatibility)
|
|
393
|
+
--port <port> WebSocket server port (default: 7777)
|
|
394
|
+
--headless Run without TUI (for CI/CD and scripts)
|
|
395
|
+
--validate, -v Validate configuration without creating directories
|
|
396
|
+
- Performs comprehensive preflight checks
|
|
397
|
+
- No filesystem side effects
|
|
398
|
+
--cleanup Clean up execution directories
|
|
399
|
+
-y Skip confirmation prompts
|
|
400
|
+
--no-autostart Don't automatically start codons
|
|
401
|
+
--model <model> Override model for all codons (ignores per-codon settings)
|
|
402
|
+
--anthropic-base-url <url> Custom Anthropic API base URL
|
|
403
|
+
--proxy Enable the LLM proxy server (disabled by default)
|
|
404
|
+
--idle-timeout <seconds> Idle timeout for WebSocket and proxy servers (0-255, default: 0)
|
|
405
|
+
--help, -h Show this help message
|
|
406
|
+
|
|
407
|
+
Execution Safety:
|
|
408
|
+
Hankweave implements a three-tier safety system for execution directories:
|
|
409
|
+
- Tier 1: Cannot use ~/.hankweave-executions/ directly (reserved for auto-managed)
|
|
410
|
+
- Tier 2: Directories with existing .hankweave/ require --force (backs up existing)
|
|
411
|
+
- Tier 3: Non-empty directories show warning and prompt for confirmation
|
|
412
|
+
|
|
413
|
+
Execution Isolation:
|
|
414
|
+
Hankweave runs in an isolated execution directory separate from your data.
|
|
415
|
+
This enables clean rollbacks and multiple execution tracking.
|
|
416
|
+
|
|
417
|
+
Your data is accessed via: <execution-dir>/read_only_data_source/
|
|
418
|
+
|
|
419
|
+
Template Variables:
|
|
420
|
+
<%EXECUTION_DIR%> - The execution directory path
|
|
421
|
+
<%DATA_DIR%> - The data directory path (execution-dir/read_only_data_source)
|
|
422
|
+
|
|
423
|
+
Examples:
|
|
424
|
+
# Run with default data (current directory)
|
|
425
|
+
hankweave
|
|
426
|
+
|
|
427
|
+
# Run with specific hank and data (positional args)
|
|
428
|
+
hankweave ./my-hank.json ./my-data
|
|
429
|
+
|
|
430
|
+
# Use inline text as input
|
|
431
|
+
hankweave hank.json --input "Analyze this text"
|
|
432
|
+
|
|
433
|
+
# Pipe from stdin
|
|
434
|
+
echo "Design a REST API" | hankweave hank.json -
|
|
435
|
+
|
|
436
|
+
# Pipe file contents to stdin
|
|
437
|
+
cat spec.md | hankweave hank.json --data -
|
|
438
|
+
|
|
439
|
+
# Run a hank from a GitHub repository
|
|
440
|
+
hankweave https://github.com/user/repo ./my-data
|
|
441
|
+
|
|
442
|
+
# Run a specific branch/tag from a remote repo
|
|
443
|
+
hankweave https://github.com/user/repo#v1.0.0 ./my-data
|
|
444
|
+
hankweave https://github.com/user/repo/tree/feature-branch ./my-data
|
|
445
|
+
|
|
446
|
+
# Run in headless mode for CI/CD
|
|
447
|
+
hankweave --headless
|
|
448
|
+
|
|
449
|
+
# Override all codon models to use Opus
|
|
450
|
+
hankweave --model opus
|
|
451
|
+
`),process.exit(0);if(x)try{await yx(process.cwd()),process.exit(0)}catch(Q){console.error(`
|
|
452
|
+
\u274C Init failed: ${Q.message}
|
|
453
|
+
`),process.exit(1)}if(!_&&!m)try{await Ci.ensureSdkAvailable()}catch(Q){console.error(`
|
|
454
|
+
\u274C ${Q.message}
|
|
455
|
+
`),process.exit(1)}let I=process.cwd(),s,k="path";if(i){let Q=l8("input");await a8.promises.writeFile(Q,i),s=Q,k="inline-text",console.log(`\uD83D\uDCDD Using inline text input (${i.length} chars)`)}else if(a==="-")try{let Q=await KJ(),V=l8("stdin");await a8.promises.writeFile(V,Q),s=V,k="stdin",console.log(`\uD83D\uDCDD Using stdin input (${Q.length} chars)`)}catch(Q){console.error(`\u274C ${Q.message}`),process.exit(1)}else s=A0.resolve(a||I);let g;if(Ud(u)){console.log(`
|
|
456
|
+
\uD83C\uDF10 Fetching remote hank: ${u}`);try{let Q=await Ad(u);if(g=Q.hankPath,Q.wasFresh)console.log(` \uD83D\uDCE6 Using cached version (fetched ${Q.cachedAt.toLocaleString()})`);else console.log(" \u2705 Cloned to cache");let V=await Promise.resolve().then(() => (Nd(),e8)).then((F)=>F.parseRemoteHankUrl(u)),A=jd(g,u,V.ref);Dd(A)}catch(Q){console.error(`
|
|
457
|
+
\u274C Failed to fetch remote hank: ${Q.message}`),process.exit(1)}}else g=A0.isAbsolute(u)?u:A0.resolve(I,u);if(m)try{await u8({dataPath:s,configPath:g,executionPath:l?A0.resolve(l):void 0,startNew:r}),process.exit(0)}catch(Q){console.error(`\u274C Validation failed: ${Q.message}`),process.exit(1)}let f;try{f=await _4({readOnlySourceDataPath:s,executionPath:l?A0.resolve(l):void 0,useSymlink:k==="path"?o:!1,startNew:r,forceMode:c,skipConfirmation:n,hankPath:g})}catch(Q){console.error(`\u274C Execution setup failed: ${Q.message}`),process.exit(1)}if(k!=="path")console.log(`\uD83D\uDCE5 Input type: ${k}`);if(console.log(`\uD83D\uDCC1 Data source: ${f.readOnlySourceDataPath}`),console.log(`\uD83C\uDFC3 Execution: ${f.executionPath}`),console.log(`\uD83D\uDD17 Link type: ${f.linkType}`),process.chdir(f.executionPath),_)try{let V=await new yi({dataSourcePath:f.readOnlySourceDataPath,executionPath:f.executionPath,skipConfirmation:n}).execute();process.exit(V.success?0:1)}catch(Q){console.error(`
|
|
458
|
+
\u274C Cleanup failed: ${Q.message}`),process.exit(1)}let h=d4({cliArgs:e,hankPath:g}),B=new Ld(A0.join(f.executionPath,"model-validation.log"));Ve.getInstance({logger:B,performHealthCheckOnInit:!1});try{let{codons:Q,warnings:V}=await p4(g,f.executionPath,B);if(V.length>0){console.log(`
|
|
459
|
+
\u26A0\uFE0F Configuration warnings:`);for(let L of V)console.log(` - ${L}`);console.log()}let A={...h,cwd:I,configPath:g,readOnlySourceDataPath:f.readOnlySourceDataPath,executionPath:f.executionPath,dataPathInExecutionDir:f.dataPathInExecutionDir,dataHash:f.dataHash,isNewExecution:f.isNewExecution,isResuming:f.isResuming,linkType:f.linkType,codons:Q},F=new bd(A);if(await F.start(),!d)setTimeout(()=>{new Zi(F)},100),console.log("\uD83C\uDFAE Running in TUI mode (use --headless to disable)")}catch(Q){console.error(`Failed to start server: ${Q instanceof Error?Q.message:String(Q)}`),process.exit(1)}}if(it.main==it.module)WJ();
|
|
460
|
+
|
|
461
|
+
//# debugId=625839310306859D64756E2164756E21
|