fluxflow-cli 2.0.0 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/fluxflow.js +263 -269
- package/package.json +3 -2
package/dist/fluxflow.js
CHANGED
|
@@ -1,63 +1,63 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var
|
|
2
|
+
var Ll=Object.defineProperty;var re=(e,o)=>()=>(e&&(o=e(e=0)),o);var Ts=(e,o)=>{for(var t in o)Ll(e,t,{get:o[t],enumerable:!0})};import ro,{useState as hr,useEffect as bs,useMemo as Ss,useCallback as Nr,useRef as Di}from"react";import{Box as pr,Spacer as Dl,Text as fr,useInput as vl,measureElement as $l}from"ink";function Pl(e,o){return e.replace(/\t/g," ".repeat(o))}function Es(e){return e==null?"":e.replace(/\r\n/g,`
|
|
3
3
|
`).replace(/\r/g,`
|
|
4
|
-
`)}var
|
|
5
|
-
`)+1,
|
|
6
|
-
`);return{preCursor:[{value:z.slice(0,
|
|
7
|
-
`),j=Math.max(20,
|
|
8
|
-
`),P=Math.max(20,
|
|
9
|
-
`+e.slice(
|
|
10
|
-
`+e.slice(
|
|
11
|
-
`),
|
|
12
|
-
`)},
|
|
4
|
+
`)}var vi,Fl,$i,Pi=re(()=>{vi=({children:e,onHeightChange:o})=>{let t=Di(null),n=Di(void 0);return bs(()=>{if(t.current){let{height:i}=$l(t.current);n.current!==i&&(n.current=i,o?.(i))}}),ro.createElement(pr,{ref:t,flexShrink:0,flexGrow:0,width:"100%"},e)},Fl=({value:e,rows:o,maxRows:t,highlightStyle:n,textStyle:i,placeholder:r="",mask:l,showCursor:c=!0,focus:m=!0,tabSize:d=4,cursorIndex:u=0,highlight:a,refreshKey:f})=>{let[p,h]=hr(0),[T,w]=hr(0),[S,k]=hr(0),D=Nr((A,v=!1)=>{let ee=Es(A);if(!v&&l)return ee.replace(/[^\n]/g,l);let z=Pl(ee,d);return v?z:z.replace(/@\[(.*?)\]/g,(ue,H)=>{let q=H.indexOf("#"),Re=H.indexOf(":L"),Se=H,Ke="";q!==-1?(Se=H.slice(0,q),Ke=H.slice(q)):Re!==-1&&(Se=H.slice(0,Re),Ke=H.slice(Re));let nt=Se.replace(/\\/g,"/"),me=(process.cwd()||"").replace(/\\/g,"/");me&&nt.toLowerCase().startsWith(me.toLowerCase()+"/")?nt=nt.slice(me.length+1):nt.startsWith("./")&&(nt=nt.slice(2));let ct=nt.split("/");return`[${ct[ct.length-1]}${Ke}]`})},[d,l]),{preCursor:U,postCursor:j}=Ss(()=>{if(!e)return r&&!m?{preCursor:[{value:D(r,!0),type:"placeholder"}],postCursor:[]}:{preCursor:[{value:c&&m?" ":"",type:"cursor"}],postCursor:[]};let A=e.slice(0,u),v=e.slice(u);if(!m)return{preCursor:[{value:D(e)}],postCursor:[]};if(a&&a.end>a.start&&a.start>=0&&a.end<=e.length)return{preCursor:[{value:D(A.slice(0,a.start))},{value:D(A.slice(a.start,Math.min(a.end,u))),type:"highlight"},{value:D(A.slice(a.end))},{value:c&&m?" ":"",type:"cursor"}],postCursor:[{value:D(v.slice(0,Math.max(a.start-u,0)))},{value:D(v.slice(Math.max(a.start-u,0),Math.max(a.end-u,0))),type:"highlight"},{value:D(v.slice(Math.max(a.end-u,0)))}]};{let z=D(A),ue=D(v),H=z.lastIndexOf(`
|
|
5
|
+
`)+1,q=ue.indexOf(`
|
|
6
|
+
`);return{preCursor:[{value:z.slice(0,H)},{value:z.slice(H),type:"highlight"},{value:c&&m?" ":"",type:"cursor"}],postCursor:[{value:ue.slice(0,q),type:"highlight"},{value:ue.slice(q)}]}}},[u,c,m,e,r,l,a,D,f]),P=Ss(()=>T!==void 0?Math.max(o??t??1,Math.min(t??o??1,T)):1,[o,t,T]);bs(()=>{if(S!==void 0&&P!==void 0){let A=S;h(v=>{let ee=v,z=v+P;if(A<=ee)return Math.max(0,A-1);if(A>z)return A-P;if(T){if(T<P)return 0;if(T<z)return T-P}return v})}},[S,P,T]);let I=Nr(A=>{switch(A){case"placeholder":return{...i,dimColor:!0};case"highlight":return n??i;case"cursor":return{...i,color:c&&m?"cyan":void 0,bold:c&&m,inverse:c&&m};default:return i}},[i,n,c,m]);return ro.createElement(pr,{height:P,overflow:"hidden",flexDirection:"column",flexGrow:0,flexShrink:0},ro.createElement(pr,{flexDirection:"column"},ro.createElement(pr,{height:P,overflowY:"hidden",flexShrink:0,flexDirection:"column"},ro.createElement(pr,{marginTop:-p,flexDirection:"column"},ro.createElement(vi,{onHeightChange:w},ro.createElement(fr,null,U?.map((A,v)=>ro.createElement(fr,{key:v,...I(A.type)},A.value)),j?.map((A,v)=>ro.createElement(fr,{key:v,...I(A.type)},A.value))))),ro.createElement(Dl,null)),ro.createElement(vi,{onHeightChange:k},ro.createElement(fr,null,U?.map((A,v)=>ro.createElement(fr,{key:v,...I(A.type)},A.value))))))},$i=({value:e,onChange:o,onSubmit:t,keyBindings:n,showCursor:i=!0,highlightPastedText:r=!1,focus:l=!0,lastFocusEventTime:c=0,columns:m=80,useCustomInput:d=(a,f)=>vl(a,{isActive:f}),...u})=>{let[a,f]=hr(e.length),[p,h]=hr(0);bs(()=>{a>e.length&&f(e.length)},[e,a]);let T=Nr(k=>{let U=Es(e).split(`
|
|
7
|
+
`),j=Math.max(20,m-10),P=0,I=0,A=0;for(let v=0;v<U.length;v++){let z=U[v].length;if(k>=A&&k<=A+z){let H=k-A;return P+=Math.floor(H/j),I=H%j,{visualLine:P,visualCol:I}}let ue=Math.max(1,Math.ceil(z/j));P+=ue,A+=z+1}return{visualLine:P,visualCol:I}},[e,m]),w=Nr((k,D)=>{let j=Es(e).split(`
|
|
8
|
+
`),P=Math.max(20,m-10),I=0,A=0;for(let v=0;v<j.length;v++){let z=j[v].length,ue=Math.max(1,Math.ceil(z/P));if(k>=I&&k<I+ue){let H=(k-I)*P,q=Math.min(D,z-H),Re=Math.max(0,q);return Math.min(A+H+Re,A+z)}I+=ue,A+=z+1}return e.length},[e,m]);d((k,D)=>{if(k==="\x1B[I"||k==="\x1B[O"||k==="[I"||k==="[O")return;let U=n?.submit??(I=>I.return&&I.ctrl),j=n?.newline??(I=>I.return);if(U(D)){t?.(e);return}else if(j(D)){let I=e.slice(0,a)+`
|
|
9
|
+
`+e.slice(a);o(I),f(a+1),h(0);return}if(D.tab||D.shift&&D.tab||D.ctrl&&k==="c")return;let P=0;if(k.length>1&&(P=k.length),D.upArrow){if(i){let{visualLine:I,visualCol:A}=T(a);if(I>0){let v=w(I-1,A);f(v),h(0)}}}else if(D.downArrow){if(i){let{visualLine:I,visualCol:A}=T(a),v=w(I+1,A);v!==a&&(f(v),h(0))}}else if(D.leftArrow)i&&(f(Math.max(0,a-1)),h(0));else if(D.rightArrow)i&&(f(Math.min(e.length,a+1)),h(0));else if(D.return){let I=e.slice(0,a)+`
|
|
10
|
+
`+e.slice(a);o(I),f(a+1),h(0)}else if(D.backspace||D.delete){if(a>0){let I=e.slice(0,a-1)+e.slice(a);o(I),f(a-1),h(0)}}else if(k){let I=e.slice(0,a)+k+e.slice(a);o(I),f(a+k.length),h(P)}},l);let S=Ss(()=>{if(r&&p>1)return{start:Math.max(0,a-p),end:a}},[a,p,r]);return ro.createElement(Fl,{...u,value:e,cursorIndex:a,highlight:S,showCursor:i,focus:l})}});import Bl from"os";var No,zt,Fi,Ur,Rr,Wr,$n=re(()=>{No=(e,o)=>{if(!e)return"";let t=/\x1B\[[0-?]*[ -/]*[@-~]/g,n=e.split(`
|
|
11
|
+
`),i=[];if(o<=5)return e;let r=l=>l.replace(t,"").length;return n.forEach(l=>{if(r(l)<=o){i.push(l);return}let m=l.split(/(\s+)/),d="",u=0,a=l.match(/^(\s*)/),f=a?a[1]:"";m.forEach((p,h)=>{if(p.length===0)return;let T=r(p);if(u+T>o)if(d.trim().length>0)i.push(d.trimEnd()),d=f+p,u=r(d);else if(t.test(p))i.push(p),d=f,u=r(d);else{let w=p;for(;r(w)>o&&o>10;)i.push(w.substring(0,o)),w=w.substring(o);d=w,u=r(d)}else d+=p,u+=T}),(d.trimEnd().length>0||d===f)&&i.push(d.trimEnd())}),i.join(`
|
|
12
|
+
`)},zt=e=>{if(!e&&e!==0)return"0.0k";let o=typeof e=="string"?parseFloat(e):e;return o>=1e6?`${(o/1e6).toFixed(1)}m`:o>=1e3?`${(o/1e3).toFixed(1)}k`:o.toString()},Fi=(e,o=40)=>{if(e=e.replace(Bl.homedir(),"~"),!e||e.length<=o)return e;let t=Math.floor((o-3)/2);return e.substring(0,t)+"..."+e.substring(e.length-t)},Ur=e=>{let o=[],t=new Set;Object.keys(e).forEach(i=>{let r=i.match(/^(replaceContent|newContent|content_to_replace|content_to_add)(\d+)?$/);if(r){let l=r[2]?parseInt(r[2]):1;t.add(l)}});let n=Array.from(t).sort((i,r)=>i-r);for(let i of n){let r,l;if(i===1?(r=e.replaceContent1??e.content_to_replace??e.replaceContent,l=e.newContent1??e.content_to_add??e.newContent):(r=e[`replaceContent${i}`]??e[`content_to_replace${i}`],l=e[`newContent${i}`]??e[`content_to_add${i}`]),r!==void 0&&l!==void 0)o.push({replace:r,new:l});else if(r!==void 0||l!==void 0)return{error:`Mismatched replacement pair for index ${i}. Both replacement and new content must be provided.`}}return{patchPairs:o}},Rr=(e,o)=>{let t=[],n=e.replace(/\r\n/g,`
|
|
13
13
|
`).replace(/\r/g,`
|
|
14
|
-
`),
|
|
14
|
+
`),i=p=>p.replace(/^```[\w]*\n?/,"").replace(/```\s*$/,"").replace(/\r\n/g,`
|
|
15
15
|
`).replace(/\r/g,`
|
|
16
|
-
`),
|
|
17
|
-
`).filter(w=>w.trim()!=="");if(
|
|
18
|
-
`).map((P,
|
|
19
|
-
`)},
|
|
20
|
-
`).map(
|
|
21
|
-
`,
|
|
22
|
-
`).map(Re=>Re.trim()).filter(Re=>Re.length>0).map(Re=>Re.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/\s+/g,"\\s*")).join("\\s*");try{w=new RegExp(
|
|
23
|
-
`,
|
|
24
|
-
`),
|
|
25
|
-
`).length,
|
|
26
|
-
`),z=[],
|
|
27
|
-
`,c="\u2550".repeat(88),
|
|
28
|
-
`,
|
|
29
|
-
`).length-1;if(
|
|
30
|
-
`,
|
|
31
|
-
`,
|
|
32
|
-
`,
|
|
33
|
-
`,
|
|
34
|
-
`);
|
|
35
|
-
`});let
|
|
36
|
-
`,
|
|
37
|
-
`,
|
|
16
|
+
`),r=p=>p.match(/^\s*/)[0],l=p=>{let h=p.split(`
|
|
17
|
+
`).filter(w=>w.trim()!=="");if(h.length===0)return"";let T=r(h[0]);for(let w of h){let S=r(w);S.length<T.length&&(T=S)}return T},c=(p,h,T="")=>{if(!p||h===void 0)return p;let w=l(h),S=(T.match(/^\s*/)||[""])[0]+w,k=l(p),D=S.length-k.length,U=(S.match(/\s/)||h.match(/\s/)||[" "])[0];return p.split(`
|
|
18
|
+
`).map((P,I)=>{if(P.trim()===""&&I!==0)return"";let A=r(P).length,v=Math.max(0,A+D),ee=I===0?Math.max(0,v-T.length):v;return U.repeat(ee)+P.trimStart()}).join(`
|
|
19
|
+
`)},m=n,d=[];for(let p of o){let h=i(p.replace||""),T=i(p.new||"");if(h===""&&T==="")continue;let w=h.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),S=null;if(h!==""&&m.includes(h))S=new RegExp(w,"g");else{let A=h.split(`
|
|
20
|
+
`).map(v=>v.trim()).filter(v=>v.length>0).map(v=>v.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/\s+/g,"\\s*"));if(A.length>0){let v=A.join("\\s*");try{S=new RegExp(v,"g")}catch{S=new RegExp(w,"g")}}else S=new RegExp(w,"g")}let k=[...m.matchAll(S)];if(k.length===0){t.push({success:!1,error:`Block ${t.length+1}: Could not find match.`});continue}if(k.length>1){t.push({success:!1,error:`Block ${t.length+1}: Found ${k.length} matches (must be unique).`});continue}let D=k[0].index,U=k[0][0],j=m.lastIndexOf(`
|
|
21
|
+
`,D)+1,P=m.substring(j,D),I=c(T,U,P);d.push({startPos:D,firstMatchContent:U,finalReplacement:I,content_to_replace:h,content_to_add:T}),m=m.substring(0,D)+I+m.substring(D+U.length)}if(t.filter(p=>!p.success).length>0)return{content:e,results:t};let a=n,f=[];for(let p=0;p<d.length;p++){let h=d[p],T=h.content_to_replace.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),w=null;if(h.content_to_replace!==""&&a.includes(h.content_to_replace))w=new RegExp(T,"g");else{let q=h.content_to_replace.split(`
|
|
22
|
+
`).map(Re=>Re.trim()).filter(Re=>Re.length>0).map(Re=>Re.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/\s+/g,"\\s*")).join("\\s*");try{w=new RegExp(q,"g")}catch{w=new RegExp(T,"g")}}let S=[...a.matchAll(w)],k=S[0].index,D=S[0][0],U=a.lastIndexOf(`
|
|
23
|
+
`,k)+1,j=a.substring(U,k),P=c(h.content_to_add,D,j),I=a.split(`
|
|
24
|
+
`),A=a.substring(0,k).split(`
|
|
25
|
+
`).length,v=[];for(let H=Math.max(0,A-4);H<A-1;H++)v.push({num:H+1,text:I[H]});let ee=D.split(`
|
|
26
|
+
`),z=[],ue=A+ee.length-1;for(let H=ue;H<Math.min(I.length,ue+3);H++)z.push({num:H+1,text:I[H]});f.push({success:!0,oldContent:D,newContent:P,originalStartLine:A,contextBefore:v,contextAfter:z}),a=a.substring(0,k)+P+a.substring(k+D.length)}return{content:a,results:f}},Wr=(e,o,t,n=8)=>{if(!t||t.length===0)return"";let i=e.split(/\r?\n/),r=o.split(/\r?\n/),l=`[DIFF_START]
|
|
27
|
+
`,c="\u2550".repeat(88),m=0;return t.forEach((d,u)=>{if(!d.success)return;if(u===0)for(m=Math.max(0,d.originalStartLine-4);m<d.originalStartLine-1;)l+=`[UI_CONTEXT] ${m+1} |${r[m]||""}
|
|
28
|
+
`,m++;else{let T=t[u-1],w=T.originalStartLine+T.oldContent.split(`
|
|
29
|
+
`).length-1;if(d.originalStartLine-w-1>=n){let k=Math.min(r.length,m+3);for(;m<k;)l+=`[UI_CONTEXT] ${m+1} |${r[m]||""}
|
|
30
|
+
`,m++;for(l+=`[UI_CONTEXT] ${c}
|
|
31
|
+
`,m=Math.max(m,d.originalStartLine-4);m<d.originalStartLine-1;)l+=`[UI_CONTEXT] ${m+1} |${r[m]||""}
|
|
32
|
+
`,m++}else for(;m<d.originalStartLine-1;)l+=`[UI_CONTEXT] ${m+1} |${r[m]||""}
|
|
33
|
+
`,m++}let a=d.oldContent.split(`
|
|
34
|
+
`);a.forEach((T,w)=>{l+=`-${d.originalStartLine+w}|${T}
|
|
35
|
+
`});let f=d.originalStartLine+a.length-1,p=i[f]||null,h=m;if(p!==null){let T=u<t.length-1?t[u+1].originalStartLine+10:r.length;for(let w=m;w<T;w++){if(r[w]===p){h=w;break}w===r.length-1&&(h=r.length)}}else h=r.length;for(;m<h;)l+=`+${m+1}|${r[m]||""}
|
|
36
|
+
`,m++;if(u===t.length-1){let T=Math.min(r.length,m+3);for(;m<T;)l+=`[UI_CONTEXT] ${m+1} |${r[m]||""}
|
|
37
|
+
`,m++}}),l+="[DIFF_END]",l}});import vt from"react";import{Box as gn,Text as xn}from"ink";var Yr,Cs=re(()=>{$n();Yr=vt.memo(({command:e,output:o,completed:t=!1,isFocused:n=!1,columns:i=80,isPty:r=!1})=>{let c=(r?(d=>{if(!d)return"";let u=/\x1b\[H|\x1b\[2J|\x1b\[3J|\x1bc/g,a=[...d.matchAll(u)],f=d;if(a.length>0){let h=a[a.length-1];f=d.substring(h.index+h[0].length)}return f.replace(/\r+\n/g,`
|
|
38
38
|
`).split(`
|
|
39
|
-
`).map(
|
|
40
|
-
`)})(
|
|
39
|
+
`).map(h=>{let T=h.split("\r");return T[T.length-1]}).join(`
|
|
40
|
+
`)})(o):(o||"").replace(/\r\n/g,`
|
|
41
41
|
`)).replace(/\n{3,}/g,`
|
|
42
42
|
|
|
43
|
-
`),
|
|
43
|
+
`),m=r?c:c?No(c,i-6):"";return vt.createElement(gn,{flexDirection:"column",borderStyle:n?"double":"round",borderColor:t?"#334155":n?"yellow":"cyan",paddingX:2,paddingY:t?0:1,width:"100%"},vt.createElement(gn,{marginBottom:1,justifyContent:"space-between",width:"100%"},vt.createElement(gn,{flexShrink:1,paddingRight:2},vt.createElement(xn,null,vt.createElement(xn,{color:t?"gray":n?"yellow":"cyan",bold:!0},t?"\u{1F3C1} FINISHED:":"\u26A1 EXECUTING:"," "),vt.createElement(xn,{color:t?"gray":"white"},e))),r&&vt.createElement(gn,{flexShrink:0,paddingX:1},vt.createElement(xn,{color:t?"gray":"magenta",bold:!0},"ADVANCE"))),m?vt.createElement(gn,{marginTop:t?0:1,backgroundColor:r?void 0:"#0a0a0a",paddingX:1},vt.createElement(xn,{color:t?"gray":void 0},m)):!t&&vt.createElement(gn,{marginTop:1,backgroundColor:r?void 0:"#0a0a0a",paddingX:1},vt.createElement(xn,{color:"gray",italic:!0},"Waiting for output...")),vt.createElement(gn,{justifyContent:"space-between",marginTop:1},t?vt.createElement(gn,null):vt.createElement(xn,{color:"gray",dimColor:!0,italic:!0},n?"Press TAB to unfocus, then double-press ESC to terminate.":"Double-press ESC to terminate if hanging."),vt.createElement(xn,{color:t?"#475569":n?"yellow":"cyan",bold:!0},t?"\u25CF ARCHIVED":n?"\u25B6 TERMINAL FOCUSED":"\u25CF LIVE (Press TAB to focus)")))})});var _l,Ce,yn=re(()=>{_l=()=>process.env.TERM_PROGRAM==="vscode"?"vscode":process.env.WT_SESSION?"wt":"default",Ce=(e=2)=>{let o=_l();return o==="wt"?" ".repeat(Math.max(1,e-1)):" ".repeat(e)}});import E from"react";import{Box as W,Text as Z}from"ink";var Nl,Ul,Rl,Wl,Bi,wn,Yl,_i,Hl,Gl,Ni,Ui,ks,jl,Ri,Wi=re(()=>{Cs();$n();yn();Nl={write_file:"WriteFile",update_file:"UpdateFile",read_folder:"ReadFolder",view_file:"ViewFile",exec_command:"ExecuteCommand",web_search:"WebSearch",web_scrape:"ReadSite",search_keyword:"SearchKeyword",write_pdf:"CreatePDF",write_docx:"CreateDocument",generate_image:"GenerateImage",WriteFile:"WriteFile",PatchFile:"PatchFile",ReadFolder:"ReadFolder",ReadFile:"ReadFile",Run:"RunCommand",WebSearch:"WebSearch",WebScrape:"WebScrape",SearchKeyword:"SearchKeyword",WritePDF:"WritePDF",WriteDoc:"WriteDoc",Memory:"Memory",Chat:"Chat",GenerateImage:"GenerateImage"},Ul=e=>{if(!e)return e;let o=e.replace(/<\/think>(\r?\n){2}/gi,"</think>").replace(/(\r?\n){2}(?=\[?(?:tool:functions|tool\.functions|\s*turn\s*:))/gi,""),t="tool:functions.";for(;;){let i=o.toLowerCase().indexOf(t);if(i===-1)break;let r=i,l=!1,c=i-1;for(;c>=0&&/\s/.test(o[c]);)c--;c>=0&&o[c]==="["&&(r=c,l=!0);let m=0,d=!1,u=null,a=i;for(;a<o.length;){let f=o[a];if(!u&&(f==="'"||f==='"'||f==="`")?u=f:u&&f===u&&o[a-1]!=="\\"&&(u=null),u||(f==="("?(m++,d=!0):f===")"&&m--),d&&m===0&&!u){let p=a;if(l){let h=a+1;for(;h<o.length&&/\s/.test(o[h]);)h++;h<o.length&&o[h]==="]"&&(p=h)}o=o.substring(0,r)+o.substring(p+1);break}if(a++,a===o.length)return o=o.substring(0,r),o}}return o.replace(/\[TOOL RESULT\]:?\s*/gi,"").split(`
|
|
44
44
|
`).filter(n=>!n.trim().startsWith("SUCCESS:")&&!n.trim().startsWith("ERROR:")).join(`
|
|
45
|
-
`).replace(/\[\s*turn\s*:\s*(continue|finish)\s*\]/gi,"").replace(/\[\s*turn\s*:?.*?$/gi,"").replace(/\n\s*turn\s*:?.*?$/gi,"").replace(/\[\s*$/gi,"").replace(/\n\nResponded on .*/g,"").replace(/\n\n\[Prompted on: .*\]/g,"").replace(/(\$?\\?\/?\\rightarrow\$?|\$\\rightarrow\$)/gi,"\u2192").replace(/(\$?\\?\/?\\leftarrow\$?|\$\\leftarrow\$)/gi,"\u2190").replace(/(\$?\\?\/?\\uparrow\$?|\$\\uparrow\$)/gi,"\u2191").replace(/(\$?\\?\/?\\downarrow\$?|\$\\downarrow\$)/gi,"\u2193").replace(/(\$?\\?\/?\\leftrightarrow\$?|\$\\leftrightarrow\$)/gi,"\u2194").replace(/@\[TerminalName:.*?, ProcessId:.*?\]/gi,"").replace(/\b(write_file|update_file|read_folder|view_file|exec_command|web_search|web_scrape|search_keyword|write_pdf|write_docx|generate_image)\b/gi,n=>
|
|
46
|
-
`),
|
|
45
|
+
`).replace(/\[\s*turn\s*:\s*(continue|finish)\s*\]/gi,"").replace(/\[\s*turn\s*:?.*?$/gi,"").replace(/\n\s*turn\s*:?.*?$/gi,"").replace(/\[\s*$/gi,"").replace(/\n\nResponded on .*/g,"").replace(/\n\n\[Prompted on: .*\]/g,"").replace(/(\$?\\?\/?\\rightarrow\$?|\$\\rightarrow\$)/gi,"\u2192").replace(/(\$?\\?\/?\\leftarrow\$?|\$\\leftarrow\$)/gi,"\u2190").replace(/(\$?\\?\/?\\uparrow\$?|\$\\uparrow\$)/gi,"\u2191").replace(/(\$?\\?\/?\\downarrow\$?|\$\\downarrow\$)/gi,"\u2193").replace(/(\$?\\?\/?\\leftrightarrow\$?|\$\\leftrightarrow\$)/gi,"\u2194").replace(/@\[TerminalName:.*?, ProcessId:.*?\]/gi,"").replace(/\b(write_file|update_file|read_folder|view_file|exec_command|web_search|web_scrape|search_keyword|write_pdf|write_docx|generate_image)\b/gi,n=>Nl[n.toLowerCase()]||n).trim()},Rl=(e,o=80)=>{if(!e)return null;let t=o-10,n=No(e.trim(),t);return E.createElement(W,{width:"100%"},E.createElement(Z,{italic:!0},E.createElement(wn,{text:n,color:"gray"})))},Wl=e=>e.replace(/\\multiply|\\mul|\\times/g,"\xD7").replace(/\\div/g,"\xF7").replace(/\\cdot/g,"\u22C5").replace(/\\infty/g,"\u221E").replace(/\\pm/g,"\xB1").replace(/\\leq/g,"\u2264").replace(/\\geq/g,"\u2265").replace(/\\neq/g,"\u2260").replace(/\\sqrt\s*\{([^}]+)\}/g,"\u221A($1)").replace(/\\sqrt\s*(\w+|\d+)/g,"\u221A($1)").replace(/\\alpha/g,"\u03B1").replace(/\\beta/g,"\u03B2").replace(/\\theta/g,"\u03B8").replace(/\\pi/g,"\u03C0").replace(/\\approx/g,"\u2248").replace(/\\Delta/g,"\u0394").replace(/\\sigma/g,"\u03C3").replace(/\\sum/g,"\u03A3").replace(/\\prod/g,"\u03A0").replace(/\\rightarrow|\\to/g,"\u2192").replace(/\\left\b|\\right\b/g,"").replace(/\\left\(|\\right\)/g,o=>o.includes("left")?"(":")").replace(/\\left\[|\\right\]/g,o=>o.includes("left")?"[":"]").replace(/\\\{|\\\}/g,o=>o.includes("{")?"{":"}").replace(/\\text\s*\{([^}]+)\}/g,"$1").replace(/\\text\s+(\w+)/g,"$1").replace(/\\%/g,"%"),Bi=(e,o)=>{if(!e)return null;let t=e.replace(/\\frac\s*\{([^{}]*)\}\s*\{([^{}]*)\}/g,"($1/$2)");t=Wl(t);let n=t.split(/(\\(?:mathbf|textbf|textit|underline|texttt)\{[^{}]*\})/g);return E.createElement(E.Fragment,{key:o},n.map((i,r)=>{if(i.startsWith("\\")){let l=i.match(/\\(\w+)\{([^{}]*)\}/);if(l){let c=l[1],m=l[2];return E.createElement(Z,{key:r,bold:c==="mathbf"||c==="textbf",italic:c==="textit",underline:c==="underline",color:c==="texttt"?"cyan":void 0},m)}}return i}))},wn=E.memo(({text:e,color:o})=>{if(!e)return null;let t=e.split(/(```[\s\S]*?```|`[^`]+`|@\[.*?\]|\*\*.*?\*\*|\*.*?\*|\$.*?\$|\[.*?\]\s*\(.*?\)|\[.*?\]\s*\[.*?\]|https?:\/\/[^\s]+)/g);return E.createElement(Z,{color:o,wrap:"anywhere"},t.map((n,i)=>{if(!n)return null;if(n.startsWith("```")&&n.endsWith("```")){let r=n.slice(3,-3);return E.createElement(Z,{key:i,color:"cyan",backgroundColor:"#003333"}," ",r," ")}if(n.startsWith("**")&&n.endsWith("**"))return E.createElement(Z,{key:i,bold:!0,color:"white"},E.createElement(wn,{text:n.slice(2,-2),color:"white"}));if(n.startsWith("*")&&n.endsWith("*"))return E.createElement(Z,{key:i,italic:!0,color:"gray"},E.createElement(wn,{text:n.slice(1,-1),color:"gray"}));if(n.startsWith("`")&&n.endsWith("`")){let r=n.slice(1,-1),l=r.replace(/@\[(.*?)\]/g,(m,d)=>d.split("/").pop().split("\\").pop().replace(/:L/gi,"#L")),c=r.includes("@[");return E.createElement(Z,{key:i,color:"cyan",bold:c,backgroundColor:c?"#111124":"#003333"}," ",l," ")}if(n.startsWith("@[")&&n.endsWith("]")){let l=n.slice(2,-1).split("/").pop().split("\\").pop().replace(/:L/gi,"#L");return E.createElement(Z,{key:i,color:"cyan",bold:!0,backgroundColor:"#111124"}," ",l," ")}if(n.startsWith("$")&&n.endsWith("$")){let r=n.slice(1,-1);return E.createElement(Z,{key:i,color:"yellow"},Bi(r,i))}if(n.startsWith("[")&&(n.includes("](")||n.includes("] ("))){let r=n.match(/\[(.*?)\]\s*\((.*?)\)/);if(r)return E.createElement(Z,{key:i},E.createElement(Z,{color:"cyan",underline:!0,bold:!0},r[1]),E.createElement(Z,{color:"gray",dimColor:!0,italic:!0}," (",r[2],")"))}if(n.startsWith("[")&&(n.includes("][")||n.includes("] ["))){let r=n.match(/\[(.*?)\]\s*\[(.*?)\]/);if(r)return E.createElement(Z,{key:i},E.createElement(Z,{color:"cyan",underline:!0,bold:!0},r[1]),E.createElement(Z,{color:"gray",dimColor:!0,italic:!0}," [",r[2],"]"))}return n.startsWith("http")?E.createElement(Z,{key:i,color:"cyan",underline:!0,italic:!0},n):Bi(n,i)}))}),Yl=E.memo(({buffer:e,terminalWidth:o=80})=>{if(e.length<2)return null;let t=e.map(m=>{let d=m.split("|");return d[0]!==void 0&&d[0].trim()===""&&d.shift(),d.length>0&&d[d.length-1].trim()===""&&d.pop(),d.map(u=>u.trim())}),n=t[0],i=t.slice(2),r=Math.floor(100/n.length),l=o-8,c=Math.floor(l/n.length)-2;return E.createElement(W,{flexDirection:"column",borderStyle:"round",borderColor:"#454545ff",paddingX:1,marginY:0,width:"100%",flexGrow:1},E.createElement(W,{flexDirection:"row",borderStyle:"single",borderBottom:!0,borderTop:!1,borderLeft:!1,borderRight:!1,borderColor:"#444",marginBottom:1,paddingBottom:0,width:"100%"},n.map((m,d)=>E.createElement(W,{key:d,flexBasis:`${r}%`,flexGrow:1,flexShrink:0,paddingRight:2},E.createElement(wn,{text:No(m,c),color:"cyan"})))),i.map((m,d)=>E.createElement(W,{key:d,flexDirection:"row",marginBottom:d===i.length-1?0:1,width:"100%"},m.map((u,a)=>E.createElement(W,{key:a,flexBasis:`${r}%`,flexGrow:1,flexShrink:0,paddingRight:2,flexDirection:"column"},E.createElement(wn,{text:No(u,c),color:"white"}))))))}),_i=E.memo(({text:e,color:o="white",columns:t=80})=>{if(!e)return null;let n=e.split(`
|
|
46
|
+
`),i=[],r=[],l=[],c=m=>{r.length>0&&(i.push(E.createElement(Yl,{key:`table-${m}`,buffer:[...r],terminalWidth:t})),r=[]),l.length>0&&(i.push(E.createElement(W,{key:`quote-${m}`,borderStyle:"bold",borderLeft:!0,borderRight:!1,borderTop:!1,borderBottom:!1,borderColor:"gray",paddingLeft:1,marginY:1,flexDirection:"column"},l.map((d,u)=>E.createElement(wn,{key:u,text:d,color:"gray"})))),l=[])};return n.forEach((m,d)=>{let u=m.trim(),a=u.startsWith("|"),f=u.startsWith(">");if(a)l.length>0&&c(d),r.push(m);else if(f)r.length>0&&c(d),l.push(u.replace(/^>\s*/,""));else{if(c(d),u===""){i.push(E.createElement(W,{key:d,height:1}));return}if(u==="---"||u==="***"||u==="___"){i.push(E.createElement(W,{key:d,marginY:1,borderStyle:"single",borderTop:!0,borderBottom:!1,borderLeft:!1,borderRight:!1,width:"100%",borderColor:"#333"}));return}let p=u.match(/^(#{1,6})\s+(.*)/);if(p){let k=p[1].length,D=p[2];i.push(E.createElement(W,{key:d,marginTop:1,marginBottom:1,width:"100%"},E.createElement(Z,{bold:!0,color:k===1?"cyan":k===2?"magenta":k===3?"yellow":k===4?"green":k===5?"blue":"white",underline:!0},D.toUpperCase())));return}let h=u.startsWith("* ")||u.startsWith("- "),T=/^\d+\.\s/.test(u),w=m.includes("\u2588")||m.includes("\u2554")||m.includes("\u255A")||m.includes("\u2550"),S="";if(w)S=m;else if(h||T){let k=h?" \u2022 ":u.match(/^\d+\.\s/)[0],D=" ".repeat(k.length),U=No(u.replace(/^[\*\-\d+\.]+\s/,""),t-(k.length+6));S=k+U.split(`
|
|
47
47
|
`).join(`
|
|
48
|
-
`+
|
|
49
|
-
`);return E.createElement(W,{flexDirection:"column",width:
|
|
50
|
-
`),
|
|
51
|
-
`),
|
|
52
|
-
`).map((
|
|
48
|
+
`+D)}else S=No(u,t-4);i.push(E.createElement(W,{key:d,width:"100%"},E.createElement(wn,{text:S,color:o})))}}),c("final"),E.createElement(W,{flexDirection:"column",width:t-2},i)}),Hl=E.memo(({line:e,columns:o=80})=>{let t=e.includes("[UI_CONTEXT]"),n=e.replace("[UI_CONTEXT]","");if(t&&n.includes("\u2550"))return E.createElement(W,{backgroundColor:"#1a1a1a",paddingX:1,width:"100%"},E.createElement(Z,{color:"gray",dimColor:!0},"\u2550".repeat(Math.max(10,o-4))));let i=n.startsWith("-"),r=n.startsWith("+"),l=n[0],c=n.substring(1),m=c.indexOf("|"),d=m!==-1?c.substring(0,m).trim():"",u=m!==-1?c.substring(m+1):c,a=i?"#3a0c0c":r?"#0c3a1a":"#1a1a1a",f=i?"#ff4d4d":r?"#4dff88":t?"gray":"white";return E.createElement(W,{backgroundColor:a,paddingX:1,width:"100%"},E.createElement(W,{width:5,flexShrink:0},E.createElement(Z,{color:i?"#cf3a3a":r?"#3acf65":"gray",dimColor:t},d)),E.createElement(W,{width:2,flexShrink:0,marginLeft:1},E.createElement(Z,{color:f,bold:!0},i?"-":r?"+":" ")),E.createElement(W,{flexGrow:1,marginLeft:1},E.createElement(Z,{color:f,dimColor:t},No(u,o-14))))}),Gl=E.memo(({text:e,columns:o=80})=>{let t=e.match(/\[DIFF_START\]([\s\S]*?)\[DIFF_END\]/),i=(t?t[1].trim():"").split(`
|
|
49
|
+
`);return E.createElement(W,{flexDirection:"column",width:o-3,marginBottom:0},E.createElement(W,{flexDirection:"column",backgroundColor:"#1a1a1a",paddingY:0,width:"100%"},i.map((r,l)=>E.createElement(Hl,{key:l,line:r,columns:o-3}))))}),Ni=E.memo(({text:e,columns:o=80})=>{if(!e)return null;if(e.includes("[DIFF_START]"))return E.createElement(Gl,{text:e,columns:o});if(e.includes("- Content Preview:")){let t=e.split("- Content Preview:"),n=t[0],i=t[1]||"",r="Check if Starting and Ending matches",l=i.split(r),c=l[0]?.trim()||"",m=l[1]?`${r}${l[1]}`:"",d=c.split(`
|
|
50
|
+
`),u=String(d.length).length;return E.createElement(W,{flexDirection:"column",width:o-3},E.createElement(W,{flexDirection:"column",borderStyle:"round",borderColor:"#444",paddingX:1,width:"100%"},E.createElement(W,{alignSelf:"flex-end",marginTop:-1,marginRight:1},E.createElement(Z,{backgroundColor:"#444",color:"white"}," FILE SNAPSHOT ")),E.createElement(W,{flexDirection:"column",paddingY:1,width:"100%"},d.map((a,f)=>E.createElement(W,{key:f,width:"100%"},E.createElement(W,{width:u+2,flexShrink:0},E.createElement(Z,{color:"gray",dimColor:!0},String(f+1).padStart(u," ")," ")),E.createElement(W,{flexGrow:1},E.createElement(Z,{color:"white"},a)))))))}if(e.includes("```")){let t=e.split(/(```\w*\n?[\s\S]*?(?:```|$))/g);return E.createElement(W,{flexDirection:"column",width:o-3},t.map((n,i)=>{if(n.startsWith("```")){let l=n.match(/```(\w*)\n?([\s\S]*?)(?:```|$)/),c=l?l[1]:"code",d=(l?l[2]:n.replace(/^```\w*\n?/,"").replace(/```$/,"")).trimEnd().split(`
|
|
51
|
+
`),u=String(d.length).length;return E.createElement(W,{key:i,flexDirection:"column",marginY:0,backgroundColor:"#111",borderStyle:"round",borderColor:"#333",paddingX:1,width:"100%"},E.createElement(W,{alignSelf:"flex-end",marginTop:-1,marginRight:1},E.createElement(Z,{backgroundColor:"#333",color:"white"}," ",c.toUpperCase()," ")),E.createElement(W,{flexDirection:"column",paddingY:1,width:"100%"},d.map((a,f)=>E.createElement(W,{key:f,width:"100%"},E.createElement(W,{width:u+2,flexShrink:0},E.createElement(Z,{color:"gray",dimColor:!0},String(f+1).padStart(u," ")," ")),E.createElement(W,{flexGrow:1},E.createElement(Z,{color:"cyan"},a))))))}let r=n;return i>0&&(r=r.replace(/^[\r\n]+/,"")),i<t.length-1&&(r=r.replace(/[\r\n]+$/,"")),r?E.createElement(_i,{key:i,text:r,columns:o-3}):null}))}return E.createElement(_i,{text:e,columns:o-3})}),Ui=e=>{let o=Math.round(e/1e3);if(o<=0)return"0s";let t=Math.floor(o/60),n=o%60;return t>0?`${t}m ${n}s`:`${o}s`},ks=E.memo(({msg:e,showFullThinking:o,columns:t=80})=>{let n=e.role==="system"&&(e.text?.includes("[DIFF_START]")||e.text?.includes("- Content Preview:")),i=e.role==="system"&&e.text?.includes("[TOOL RESULT]: ERROR:")&&(e.toolName==="update_file"||e.text?.includes("Could not find exact match")),r=e.isTerminalRecord;if(e.isHomeWarning)return E.createElement(W,{marginBottom:1,paddingX:1,width:"100%"},E.createElement(W,{flexDirection:"column",borderStyle:"round",borderColor:"red",padding:0,width:"100%"},E.createElement(W,{paddingX:1,backgroundColor:"#3a0000"},E.createElement(Z,{color:"red",bold:!0},e.text)),E.createElement(W,{paddingX:1,marginTop:1,marginBottom:1},E.createElement(Z,{color:"white"},e.subText))));if(e.isLogo)return E.createElement(W,{flexDirection:"column",alignItems:"center",width:"100%",marginY:1},E.createElement(Z,null,e.text));if(e.id&&String(e.id).startsWith("welcome"))return E.createElement(W,{flexDirection:"column",alignItems:"center",width:"100%",marginY:1},E.createElement(W,{borderStyle:"round",borderColor:"gray",paddingX:3,paddingY:0},E.createElement(Z,{color:"cyan",bold:!0},e.text.trim())));if(e.isVisualFeedback)return E.createElement(W,{marginBottom:0,marginTop:0,paddingX:1,width:"100%"},E.createElement(Z,{color:"white"},e.text));if(i)return E.createElement(W,{marginBottom:1},E.createElement(W,{flexDirection:"column",borderStyle:"round",borderColor:"red",paddingX:1,paddingY:0},E.createElement(Z,{color:"red",bold:!0,underline:!0},"\u274C PATCH FAILED"),E.createElement(W,{marginTop:1},E.createElement(Z,{color:"red"},"Patch failed: ",E.createElement(Z,{color:"white",bold:!0},"Model generated malformed edit.")))));if(e.role==="system"&&e.text?.includes("[TOOL RESULT]")&&!n&&!r&&!i)return null;if(e.isImageStats)return E.createElement(W,{marginBottom:1,paddingX:1,width:"100%"},E.createElement(W,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",padding:0,width:"100%"},E.createElement(W,{paddingX:1,backgroundColor:"#0e1b21"},E.createElement(Z,{color:"cyan",bold:!0},"\u{1F4B3} IMAGE STATS")),E.createElement(W,{paddingX:1,marginTop:1,marginBottom:1,flexDirection:"column"},e.text.split(`
|
|
52
|
+
`).map((a,f)=>E.createElement(Z,{key:f,color:"white"},a)))));if(e.isAskRecord){let a=e.text.match(/Selection: (.*)/),f=a?a[1]:"No selection",p=Ce(2);return E.createElement(W,{marginBottom:1,paddingX:1,width:"100%"},E.createElement(W,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},E.createElement(W,{paddingX:1},E.createElement(Z,{color:"cyan",bold:!0},"\u{1F4AC} AGENT REQUEST: RESOLVED")),E.createElement(W,{paddingX:1,marginTop:1,marginBottom:1},E.createElement(Z,{color:"white"},"Selection: ",E.createElement(Z,{color:"yellow",bold:!0},f)))))}if(e.isAboutRecord)return E.createElement(W,{marginBottom:1,paddingX:1,width:"100%"},E.createElement(W,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},E.createElement(W,{paddingX:1},E.createElement(Z,{color:"cyan",bold:!0},"\u{1F4A0} ABOUT FLUX FLOW")),E.createElement(W,{paddingX:1,marginTop:1,marginBottom:1},E.createElement(Z,null,e.text))));if(e.isUpdateNotification)return E.createElement(W,{marginBottom:1,paddingX:1,width:"100%"},E.createElement(W,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},E.createElement(W,{paddingX:1},E.createElement(Z,{color:"cyan",bold:!0},"\u{1F680} FLUX FLOW UPDATE AVAILABLE")),E.createElement(W,{paddingX:1,marginTop:1,marginBottom:1},E.createElement(Ni,{text:e.text,columns:t}))));if(e.isHelpRecord)return E.createElement(W,{marginBottom:1,paddingX:1,width:"100%"},E.createElement(W,{flexDirection:"column",borderStyle:"round",borderColor:"magenta",paddingX:2,paddingY:1,width:"100%"},E.createElement(Z,{color:"magenta",bold:!0,underline:!0},"\u{1F4DC} COMMAND REFERENCE"),E.createElement(W,{flexDirection:"column",marginTop:1},[{cmd:"/quit",desc:"Exit and shutdown Flux"},{cmd:"/help",desc:"Show all available commands"},{cmd:"/clear",desc:"Clear terminal screen"},{cmd:"/resume",desc:"Load previous session"},{cmd:"/revert",desc:"Revert codebase to checkpoint"},{cmd:"/save",desc:"Force save current chat"},{cmd:"/export",desc:"Export current chat in a .txt file"},{cmd:"/chats",desc:"List all chat sessions"},{cmd:"/image",desc:"Generate images"},{cmd:"/mode",desc:"Toggle Flux/Flow modes"},{cmd:"/thinking",desc:"Set AI reasoning depth"},{cmd:"/model",desc:"Switch AI model"},{cmd:"/settings",desc:"Configure system prefs"},{cmd:"/key",desc:"Manage API keys"},{cmd:"/profile",desc:"Edit developer persona"},{cmd:"/memory",desc:"Manage agent memory"},{cmd:"/stats",desc:"Show session usage"},{cmd:"/reset",desc:"Wipe all project data"},{cmd:"/about",desc:"Project info & credits"},{cmd:"/changelog",desc:"View latest updates"},{cmd:"/fluxflow",desc:"Project management"},{cmd:"/update",desc:"Check/Install updates"}].map((f,p)=>E.createElement(W,{key:p,flexDirection:"row"},E.createElement(W,{width:15},E.createElement(Z,{color:"cyan",bold:!0},f.cmd)),E.createElement(Z,{color:"gray"}," - ",f.desc))))));if(e.isTerminalRecord){let a=e.text.match(/COMMAND: (.*)/),f=e.text.match(/PTY: (true|false)/),p=e.text.match(/OUTPUT: ([\s\S]*)/),h=a?a[1]:"Unknown",T=f?f[1]==="true":!1,w=p?p[1]:"";return E.createElement(W,{marginBottom:1,paddingX:1,width:"100%"},E.createElement(Yr,{command:h,output:w,completed:!0,columns:t,isPty:T}))}let[c,m]=E.useState(!e.isStreaming),d=E.useMemo(()=>Ul(e.text),[e.text]);E.useEffect(()=>{e.isStreaming&&m(!1)},[e.id]);let u=E.useMemo(()=>e.role==="think"&&!o?"Thinking...":e.isStreaming?d:d.trimEnd(),[d,e.role,o,e.isStreaming]);return E.createElement(W,{marginBottom:e.role==="think"?0:e.role==="user"?1:e.role==="agent"?0:1,marginTop:(e.role==="think"||e.role==="user"||e.role==="agent",0),flexDirection:"column",flexShrink:0,width:"100%",flexGrow:1},e.role==="user"?E.createElement(W,{backgroundColor:"#262626",paddingX:1,paddingY:1,width:"100%",flexDirection:"column"},No(u.replace(/\r\n/g,`
|
|
53
53
|
`).replace(/\r/g,`
|
|
54
54
|
`).replace(/\\\n/g,`
|
|
55
|
-
`).replace(/\\$/,""),
|
|
56
|
-
`).map((
|
|
57
|
-
`),columns:
|
|
58
|
-
`)){let w=
|
|
59
|
-
`)[0];if(!w.includes("=")&&!w.includes(")")){
|
|
60
|
-
`;case"r":return"\r";case"t":return" ";case"\\":return"\\";default:return
|
|
55
|
+
`).replace(/\\$/,""),t-6).split(`
|
|
56
|
+
`).map((a,f)=>E.createElement(W,{key:f,flexDirection:"row",width:"100%"},E.createElement(W,{flexShrink:0,width:2},E.createElement(Z,{bold:!0,color:"white"},f===0?"\u276F":" ")),E.createElement(W,{flexGrow:1,marginLeft:1},E.createElement(wn,{text:a,color:e.color||"white"}))))):e.role==="think"?E.createElement(W,{flexDirection:"column",marginTop:0,marginBottom:0,paddingX:1,width:"100%"},e.isStreaming&&!e.duration?E.createElement(Z,{bold:!0,color:"white"},"\u2727 Thinking..."):E.createElement(Z,{bold:!0,color:"white"},"\u2726 Thought",e.duration?E.createElement(Z,{color:"gray"}," for ",E.createElement(Z,{bold:!0,color:"cyan"},Ui(e.duration))):""),E.createElement(W,{borderStyle:"single",borderLeft:!0,borderRight:!1,borderTop:!1,borderBottom:!1,paddingLeft:2,paddingTop:1,paddingBottom:1,flexDirection:"column",width:"100%"},Rl(u,t))):E.createElement(W,{flexDirection:"column",paddingX:1,marginTop:0,width:"100%"},E.createElement(Ni,{text:u.replace(/ \|\n\n/g,` |
|
|
57
|
+
`),columns:t}),e.memoryUpdated&&E.createElement(W,{marginTop:1,width:"100%"},E.createElement(Z,{color:"yellow",italic:!0},"\u2728 [Memory Updated]")),e.role==="agent"&&e.workedDuration?E.createElement(W,{marginTop:1,marginBottom:2,width:"100%"},E.createElement(Z,null,"["),E.createElement(Z,{color:"gray"},"\u26A1 Worked for ",E.createElement(Z,{bold:!0,color:"cyan"},Ui(e.workedDuration))),E.createElement(Z,null,"]")):null))}),jl=E.memo(({messages:e,showFullThinking:o,columns:t=80})=>E.createElement(W,{flexDirection:"column",width:"100%"},e.map((n,i)=>E.createElement(ks,{key:n.id||i,msg:n,showFullThinking:o,columns:t})))),Ri=jl});import Ue from"react";import{Box as Qo,Text as $t}from"ink";var Xl,Yi,Hi=re(()=>{$n();Xl=Ue.memo(({mode:e,thinkingLevel:o,tokens:t="0.0k",tokensTotal:n="0.0k",chatId:i="NEW-SESSION",isMemoryEnabled:r=!0,apiTier:l="Free",aiProvider:c="Google"})=>{let m=e==="Flux"?"yellow":"cyan",d=e==="Flux"?"\u26A1":"\u{1F30A}",u=256e3;return(c==="DeepSeek"||c==="Google"&&l==="Paid")&&(u=4e5),Ue.createElement(Qo,{borderStyle:"round",borderColor:"gray",flexDirection:"row",justifyContent:"space-between",paddingX:1,width:"100%"},Ue.createElement(Qo,null,Ue.createElement(Qo,{marginRight:1},Ue.createElement($t,{color:m,bold:!0},d," ",e.toUpperCase())),Ue.createElement($t,{color:"gray",dimColor:!0},"\u2503 "),Ue.createElement(Qo,{marginX:1},Ue.createElement($t,{color:"magenta"},"\u{1F9E0} ",o)),Ue.createElement($t,{color:"gray",dimColor:!0},"\u2503 "),Ue.createElement(Qo,{marginX:1},Ue.createElement($t,{color:"gray"},"MEM: "),Ue.createElement($t,{color:r?"green":"red",bold:!0},r?"ON":"OFF"))),Ue.createElement(Qo,{flexGrow:1,justifyContent:"center",paddingX:2},Ue.createElement($t,null,"\u{1F4C1}"),Ue.createElement($t,{color:"gray",italic:!0}," ",Fi(process.cwd(),35))),Ue.createElement(Qo,null,Ue.createElement($t,{color:"gray",dimColor:!0},"\u2503 "),Ue.createElement(Qo,{marginX:1},Ue.createElement($t,null,"\u2728"),Ue.createElement($t,{color:"blue"}," ",zt(n)," ",Ue.createElement($t,{dimColor:!0},"(",(t/u*100).toFixed(0),"%)"))),Ue.createElement($t,{color:"gray",dimColor:!0},"\u2503 "),Ue.createElement(Qo,{marginLeft:1},Ue.createElement($t,null,"\u{1F194}"),Ue.createElement($t,{color:"gray",dimColor:!0,italic:!0}," ",i),(l==="Custom"||l==="Paid")&&Ue.createElement($t,{color:"gray",dimColor:!0}," | ",Ue.createElement($t,{color:"green",bold:!0},"PAID")))))}),Yi=Xl});import Oo from"react";import{Box as zn,Text as Hr}from"ink";import Kl from"ink-select-input";function so({title:e,subtitle:o,items:t,onSelect:n}){return Oo.createElement(zn,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,marginTop:1,flexShrink:0,width:"100%"},Oo.createElement(zn,{paddingX:1,paddingY:0,marginBottom:o?0:1},Oo.createElement(Hr,{color:"magenta",bold:!0},"\u{1F527} ",typeof e=="string"?e.toUpperCase():e)),o&&Oo.createElement(zn,{paddingX:1,marginBottom:1},Oo.createElement(Hr,{color:"yellow",dimColor:!0,italic:!0}," ",o)),Oo.createElement(zn,{flexDirection:"column",width:"100%"},Oo.createElement(Kl,{items:t,onSelect:n,itemComponent:ql,indicatorComponent:()=>null})),Oo.createElement(zn,{paddingX:1,marginTop:1},Oo.createElement(Hr,{color:"gray",dimColor:!0,italic:!0},"(Arrows to select \u2022 Enter to confirm)")))}var ql,Gi=re(()=>{ql=({label:e,isSelected:o})=>{let t=e==="Cancel"||e==="Back"||e.toLowerCase().includes("exit")||e.toLowerCase().includes("back");return Oo.createElement(zn,{marginTop:t?1:0,backgroundColor:o?"#2a2a2a":void 0,paddingX:1,width:"100%"},Oo.createElement(Hr,{color:o?"cyan":"white",bold:o},o?"\u276F ":" ",e))}});var oe,Jt=re(()=>{oe=e=>{let o={};if(!e)return o;let t=0;for(;t<e.length;){for(;t<e.length&&/[\s,]/.test(e[t]);)t++;if(t>=e.length)break;let n=e.substring(t).match(/^(\w+)\s*=\s*/);if(!n){t++;continue}let i=n[1];t+=n[0].length;let r="";if(t<e.length&&(e[t]==='"'||e[t]==="'"||e[t]==="`")){let l=e[t];t++;let c=t,m=-1,d=t;for(;d<e.length;){let a=e.indexOf(l,d);if(a===-1)break;let f=0;for(let w=a-1;w>=0&&e[w]==="\\";w--)f++;if(f%2!==0){d=a+1;continue}let p=e.substring(a+1),h=p.trim(),T=h===""||/^,\s*\w+\s*=/.test(h)||h.startsWith(")")&&(h.length===1||/^\)\s*([,\]\s]|tool:)/i.test(h));if(T&&p.startsWith(`
|
|
58
|
+
`)){let w=h.split(`
|
|
59
|
+
`)[0];if(!w.includes("=")&&!w.includes(")")){d=a+1;continue}}if(T){m=a;break}d=a+1}m!==-1?(r=e.substring(c,m),t=m+1):(r=e.substring(c),t=e.length);let u=i.toLowerCase().includes("path")||["dest","source","to","from"].includes(i.toLowerCase());r=r.replace(/\\(.)/g,(a,f)=>{switch(f){case"n":return`
|
|
60
|
+
`;case"r":return"\r";case"t":return" ";case"\\":return"\\";default:return f===l?l:a}})}else if(t<e.length&&e[t]==="["){let l=0,c=null,m=t,d=-1;for(let u=t;u<e.length;u++){let a=e[u];if(c&&a===c){let f=0;for(let p=u-1;p>=0&&e[p]==="\\";p--)f++;f%2===0&&(c=null)}else!c&&(a==='"'||a==="'"||a==="`")&&(c=a);if(!c&&(a==="["?l++:a==="]"&&l--,l===0)){d=u;break}}if(d!==-1){r=e.substring(m,d+1),t=d+1;try{let u=r.trim();u.startsWith("'")||u.includes("'")}catch{}}else r=e.substring(m),t=e.length}else{let l=e.substring(t),c=l.match(/,\s*\w+\s*=|(?:\s*\)\s*(?:$|\]))/);if(c){let m=c.index;r=l.substring(0,m).trim(),t+=m}else r=l.trim(),t=e.length}r==="true"?r=!0:r==="false"?r=!1:typeof r=="string"&&!isNaN(r)&&r.trim()!==""&&(r=Number(r)),typeof r=="string"&&(i.toLowerCase().includes("path")||["dest","source","to","from"].includes(i.toLowerCase()))&&(r=r.replace(/\x0C/g,"\\f").replace(/\x0D/g,"\\r").replace(/\x0B/g,"\\v").replace(/\x08/g,"\\b")),o[i]=r}return o}});import{execSync as Vl}from"child_process";var gr,Jn,ji,Is=re(async()=>{await xr();gr=null,Jn=()=>{if(process.platform!=="win32")return!1;if(gr!==null)return gr;try{Vl('powershell.exe -NoProfile -Command "exit"',{stdio:"ignore"}),gr=!0}catch{gr=!1}return gr},ji=(e,o,t,n)=>`
|
|
61
61
|
-- TOOL DEFINITIONS --
|
|
62
62
|
Access to internal tools. MUST use the exact syntax on a new line: [tool:functions.ToolName(args)]
|
|
63
63
|
MANDATORY TOOL POLICY:
|
|
@@ -74,12 +74,12 @@ ${e==="Flux"?`- **File Tools >> Code in chat**
|
|
|
74
74
|
2. [tool:functions.WebScrape(url="...")]. Proactive use for specific webpage/docs/api
|
|
75
75
|
|
|
76
76
|
${e==="Flux"?`- PROJECT TOOLS (path = relative to CWD, path separator: '/') -
|
|
77
|
-
1. [tool:functions.ReadFile(path="...", startLine=number, endLine=number)]. ${n!=="Google"?`${
|
|
77
|
+
1. [tool:functions.ReadFile(path="...", startLine=number, endLine=number)]. ${n!=="Google"?`${t?"Supports images/docs. User gives image/doc: VIEW FIRST":"No Multimodal support"}`:"Supports images/docs. User gives image/doc: VIEW FIRST"}
|
|
78
78
|
2. [tool:functions.ReadFolder(path="...")]. Detailed DIR stats
|
|
79
79
|
3. [tool:functions.PatchFile(path="...", replaceContent1="exact string", newContent1="...", ...MAX 8)]. Surgical Patch. **Multiple patch on same file/path? Use replaceContent2, newContent2 etc >>> multiple spams**. Unsure? ReadFile > guessing.
|
|
80
80
|
4. [tool:functions.WriteFile(path="...", content="...")]. Creates/Overwrites. File Exist? PatchFile >>> WriteFile. Verify Imports
|
|
81
81
|
5. [tool:functions.SearchKeyword(keyword="...", file="optional")]. Global project search. If 'file' is provided, searches only that file. Finds definitions/logic without reading every file
|
|
82
|
-
6. [tool:functions.Run(command="...")]. Runs ${
|
|
82
|
+
6. [tool:functions.Run(command="...")]. Runs ${o==="Windows"?Jn()?`${Pn?"Interactive ":""}WINDOWS POWERSHELL ONLY`:`${Pn?"Interactive ":""}WINDOWS CMD`:`${Pn?"Interactive ":""}BASH`} command. Destructive/Irreversible ops -> Ask user
|
|
83
83
|
7. [tool:functions.GenerateImage(path="... png", prompt="detailed", ratio="16:9, 9:16, 1:1")]. Usage: Mockups, PDF thumbnails, any visual content
|
|
84
84
|
8. [tool:functions.WritePDF(path="...", content="...", orientation="...")]. PROACTIVE A4 PAGE BREAKS MUST IN CSS. HTML/CSS for PREMIUM layout (100vh/vw)
|
|
85
85
|
9. [tool:functions.WriteDoc(path="...", content="...")]. A4 Word document
|
|
@@ -91,29 +91,29 @@ ${e==="Flux"?`- PROJECT TOOLS (path = relative to CWD, path separator: '/') -
|
|
|
91
91
|
- File structure: Real newlines for code formatting`.trim():"\n- FILE TOOLS ARE NOT AVAILABLE IN FLOW (Tell user,` /mode flux` if needed)".trim()}
|
|
92
92
|
|
|
93
93
|
- Results: Passed as [TOOL RESULT]
|
|
94
|
-
- MAX Tool call stack: STRICTLY 3 per turn`.trim()});import{spawn as
|
|
94
|
+
- MAX Tool call stack: STRICTLY 3 per turn`.trim()});import{spawn as Ms}from"child_process";var Gr,Pn,jr,bt,To,So,Xi,Ki,Os,As,xr=re(async()=>{Jt();await Is();Gr=null;try{let e=await import("node-pty");Gr=e.default||e}catch{}Pn=!!Gr,jr=e=>typeof e!="string"?e:e.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),bt=null,To=!1,So=e=>{try{bt&&(To&&typeof bt.write=="function"?bt.write(e):bt.stdin&&bt.stdin.writable&&bt.stdin.write(e))}catch{}},Xi=()=>{if(bt){try{To&&typeof bt.destroy=="function"?bt.destroy():typeof bt.kill=="function"&&(process.platform==="win32"?Ms("taskkill",["/pid",bt.pid,"/f","/t"]):bt.kill("SIGKILL"))}catch{}bt=null,To=!1}},Ki=(e,o=!1)=>{if(process.platform!=="win32")return e;let t=[],n="",i=null,r=!1;for(let u=0;u<e.length;u++){let a=e[u];if(r){n+=a,r=!1;continue}if(a==="\\"){if(e[u+1]===" "){n+=" ",u++;continue}n+=a,r=!0;continue}i?(a===i&&(i=null),n+=a):a==='"'||a==="'"?(i=a,n+=a):a===";"&&!n.includes("://")?(n.length>0&&(t.push(n),n=""),t.push(o?";":"&")):a==="|"&&!n.includes("://")?(n.length>0&&(t.push(n),n=""),t.push("|")):/\s/.test(a)?n.length>0&&(t.push(n),n=""):n+=a}n.length>0&&t.push(n);let l=u=>!(!u.includes("/")||/^(https?|file|ftp):\/\//i.test(u)||u.startsWith("/")&&(u.match(/\//g)||[]).length===1||/\s\/|\/\s/.test(u)||/[\(\)\{\}\;\<\>\=\'\"]/.test(u)),c=[];for(let u=0;u<t.length;u++){let a=t[u];if(a==="mkdir"&&o&&Jn()){let f=[],p=u+1;for(;p<t.length;){let h=t[p];if([">",">>","<","&","&&","|","||",";"].includes(h))break;h!=="-p"&&h!=="--parents"&&h!=="-v"&&h!=="--verbose"&&f.push(h),p++}if(f.length>0){let h=f.map(T=>{let w=T.replace(/^['"]|['"]$/g,""),S=T;return l(w)&&(S=T.replace(/\//g,"\\")),S});c.push("New-Item","-ItemType","Directory","-Force","-Path",h.join(","))}else c.push("New-Item","-ItemType","Directory","-Force");u=p-1;continue}if(a==="rm"&&o&&Jn()){let f=[],p=!1,h=!1,T=u+1;for(;T<t.length;){let S=t[T];if([">",">>","<","&","&&","|","||",";"].includes(S))break;S==="-rf"||S==="-fr"?(p=!0,h=!0):S==="-r"||S==="-R"||S==="--recursive"?p=!0:S==="-f"||S==="--force"?h=!0:f.push(S),T++}let w=["Remove-Item"];if(p&&w.push("-Recurse"),h&&w.push("-Force"),f.length>0){let S=f.map(k=>{let D=k.replace(/^['"]|['"]$/g,""),U=k;return l(D)&&(U=k.replace(/\//g,"\\")),U});w.push("-Path",S.join(","))}c.push(...w),u=T-1;continue}if(a==="cp"&&o&&Jn()){let f=[],p=!1,h=!1,T=u+1;for(;T<t.length;){let S=t[T];if([">",">>","<","&","&&","|","||",";"].includes(S))break;S==="-r"||S==="-R"||S==="--recursive"?p=!0:S==="-f"||S==="--force"?h=!0:f.push(S),T++}let w=["Copy-Item"];if(p&&w.push("-Recurse"),h&&w.push("-Force"),f.length>0){let S=f.map(k=>{let D=k.replace(/^['"]|['"]$/g,""),U=k;return l(D)&&(U=k.replace(/\//g,"\\")),U});if(S.length>1){let k=S.pop();w.push("-Path",S.join(","),"-Destination",k)}else w.push("-Path",S[0])}c.push(...w),u=T-1;continue}if(a==="touch"&&o&&Jn()){let f=[],p=u+1;for(;p<t.length;){let h=t[p];if([">",">>","<","&","&&","|","||",";"].includes(h))break;f.push(h),p++}if(f.length>0){let T=`(${f.map(w=>{let S=w.replace(/^['"]|['"]$/g,""),k=w;return l(S)&&(k=w.replace(/\//g,"\\")),k}).join(", ")}) | ForEach-Object { if (Test-Path $_) { (Get-Item $_).LastWriteTime = [System.DateTime]::Now } else { $null | Out-File -FilePath $_ } }`;c.push(T)}u=p-1;continue}if(a==="|"&&t[u+1]==="tee"){t[u+2]==="-a"?(c.push(">>"),u+=2):(c.push(">"),u+=1);continue}if(a==="|"&&t[u+1]==="cat"&&t[u+2]===">"){c.push(">"),u+=2;continue}if(a==="|"){let f=t[u+1];if(f){let p=f.replace(/^['"]|['"]$/g,""),h=/\.(txt|md|json|log|csv|html|css|py|js|xml|yaml|yml|pdf|docx|pptx|xlsx)$/i.test(p);if(l(p)&&h){c.push(">");continue}}}c.push(a)}let m=!1;return c.map(u=>{if(u==="echo")return m=!0,u;[">",">>","<","&","&&","|","||",";"].includes(u)&&(m=!1);let f=/^['"]|['"]$/.test(u),p=u;m&&f&&(p=u.replace(/^['"]|['"]$/g,""));let h=/^['"]|['"]$/.test(p),T=p.replace(/^['"]|['"]$/g,"");l(T)&&(p=p.replace(/\//g,"\\"));let w=p.replace(/^['"]|['"]$/g,"");return w.includes(" ")&&!h&&(p=`"${w}"`),p}).join(" ")},Os=async(e,o={})=>{let{command:t}=oe(e),{onChunk:n}=o;if(!t)return'ERROR: Missing "command" argument for exec_command.';let i=process.platform==="win32",r=o.systemSettings||{},l={};return r.networkAccess===!1&&(l.HTTP_PROXY="http://127.0.0.1:9999",l.HTTPS_PROXY="http://127.0.0.1:9999",l.ALL_PROXY="socks5://127.0.0.1:9999",l.http_proxy="http://127.0.0.1:9999",l.https_proxy="http://127.0.0.1:9999",l.all_proxy="socks5://127.0.0.1:9999",l.NO_PROXY="localhost,127.0.0.1"),new Promise(c=>{let m=d=>{let u=Ki(t,d),a=i?d?"powershell.exe":"cmd.exe":process.env.SHELL||"bash",f=i?d?["-NoProfile","-Command",u]:["/c",u]:["-c",u];if(Gr)try{let p=Gr.spawn(a,f,{name:"xterm-256color",cols:o.cols||120,rows:o.rows||30,cwd:process.cwd(),env:{...process.env,CI:"false",TERM:"xterm-256color",FORCE_COLOR:"1",...l}});bt=p,To=!0;let h="",T=!1;return p.onData(w=>{if(!T){h+=w,n&&n(w);let S=jr(h);/(?:Network:\s+use\s+--host\s+to|Network:\s+Type\s+--host\s+to|Local:\s+http:\/\/localhost:\d+|ready in \d+\s*ms|Compiled successfully|Development server is running|Listening on:)/i.test(S)&&(T=!0,setTimeout(()=>c(`SUCCESS: Dev server started successfully in background.
|
|
95
95
|
|
|
96
|
-
${S}`),500))}}),
|
|
96
|
+
${S}`),500))}}),p.onExit(({exitCode:w})=>{if(T)return;bt=null;let S=(h||"").replace(/\r\n/g,`
|
|
97
97
|
`).replace(/\r/g,`
|
|
98
|
-
`),
|
|
98
|
+
`),k=jr(S).replace(/\n{3,}/g,`
|
|
99
99
|
|
|
100
|
-
`)||"Command executed with no output.";c(w!==0?`ERROR: Command [${
|
|
100
|
+
`)||"Command executed with no output.";c(w!==0?`ERROR: Command [${t}] failed with exit code [${w}].
|
|
101
101
|
|
|
102
|
-
${
|
|
102
|
+
${k}`:`SUCCESS: Command [${t}] completed.
|
|
103
103
|
|
|
104
|
-
${
|
|
104
|
+
${k}`)}),!0}catch(p){return i&&d&&p.code==="ENOENT"?!1:(As(c,u,t,l,n,d),!0)}else return As(c,u,t,l,n,d),!0};i&&m(!0)||m(!1)})},As=(e,o,t,n,i,r=!0)=>{let l=process.platform==="win32",c=l?r?"powershell.exe":"cmd.exe":process.env.SHELL||"bash",d=l?Ms(c,l?r?["-NoProfile","-Command",o]:["/c",o]:["-c",o],{cwd:process.cwd(),env:{...process.env,...n}}):Ms(o,{shell:!0,cwd:process.cwd(),env:{...process.env,CI:"false",TERM:"xterm-256color",FORCE_COLOR:"1",...n}});bt=d,To=!1,d.stdin&&d.stdin.on("error",()=>{bt=null});let u="",a="",f=!1;d.stdout.on("data",p=>{if(!f){let h=p.toString();u+=h,i&&i(h);let T=jr(u);/(?:Network:\s+use\s+--host\s+to|Network:\s+Type\s+--host\s+to|Local:\s+http:\/\/localhost:\d+|ready in \d+\s*ms|Compiled successfully|Development server is running|Listening on:)/i.test(T)&&(f=!0,setTimeout(()=>e(`SUCCESS: Dev server started successfully in background.
|
|
105
105
|
|
|
106
|
-
${
|
|
107
|
-
${
|
|
108
|
-
${
|
|
106
|
+
${T}`),500))}}),d.stderr.on("data",p=>{if(!f){let h=p.toString();a+=h,i&&i(h)}}),d.on("close",p=>{if(f)return;bt=null;let h=[];u&&h.push(`STDOUT:
|
|
107
|
+
${u}`),a&&h.push(`STDERR:
|
|
108
|
+
${a}`),p!==0&&h.push(`EXIT CODE: ${p}`);let T=h.join(`
|
|
109
109
|
|
|
110
|
-
`)||"Command executed with no output.",w=
|
|
110
|
+
`)||"Command executed with no output.",w=jr(T).replace(/\n{3,}/g,`
|
|
111
111
|
|
|
112
|
-
`);e(
|
|
112
|
+
`);e(p!==0?`ERROR: Command [${t}] failed with exit code [${p}].
|
|
113
113
|
|
|
114
|
-
${w}`:`SUCCESS: Command [${
|
|
114
|
+
${w}`:`SUCCESS: Command [${t}] completed.
|
|
115
115
|
|
|
116
|
-
${w}`)}),u.on("error",h=>{if(i&&s&&h.code==="ENOENT"){let p=dl(o,!1);return _i(e,p,o,n,r,!1)}_t=null,e(`ERROR: Failed to start command [${o}]: ${h.message}`)})}});import Te,{useState as Kr}from"react";import{Box as Lt,Text as Wt,useInput as bd}from"ink";import Cd from"ink-text-input";function Oi({systemSettings:e,setSystemSettings:t,apiTier:o,setActiveView:n,setInputConfig:r,saveSettings:s,quotas:i,setMessages:c,aiProvider:d}){let[u,f]=Kr("categories"),[l,m]=Kr(0),[h,p]=Kr(0),[x,w]=Kr(null),[S,_]=Kr(""),L=k=>{switch(k){case"memory":return[{label:"Toggle Memory",value:"memory",status:e.memory?"ON":"OFF"}];case"security":return[{label:"Sandbox Preset",value:"sandboxPreset",status:fl(e),section:"Sandbox"},{label:"YOLO Mode",value:"autoExec",status:e.autoExec?"ON":"OFF",section:"Sandbox"},{label:"External Workspace Access",value:"externalAccess",status:e.allowExternalAccess?"ON":"OFF",section:"Sandbox"},{label:"Network Access (Terminal)",value:"networkAccess",status:e.networkAccess!==!1?"ON":"OFF",section:"Sandbox"},{label:"Always Ask Commands",value:"alwaysAsk",status:Ii(e.alwaysAskCommands),section:"Sandbox"},{label:"Auto Approve Commands",value:"autoApprove",status:Ii(e.autoApproveCommands),section:"Sandbox"},{label:"Auto Disapprove Commands",value:"autoDisallow",status:Ii(e.autoDisallowCommands),section:"Sandbox"},{label:"Auto Approve Git Commits",value:"autoApproveGit",status:e.autoApproveGit?"ON":"OFF",section:"Sandbox"},{label:"Auto-Delete History",value:"autoDelete",status:e.autoDeleteHistory||"30d",section:"Other"},{label:"Save AppData Externally",value:"externalData",status:e.useExternalData?"ON":"OFF",section:"Other"}];case"updater":return[{label:"Auto-Update",value:"autoUpdate",status:e.autoUpdate?"ON":"OFF"},{label:"Preferred Updater",value:"updateManager",status:(e.updateManager||"npm")==="custom"?"Custom":(e.updateManager||"npm").toUpperCase()}];case"other":return[{label:"Current Provider",value:"aiProvider",status:d},{label:"API Tier",value:"apiTier",status:o}];default:return[]}},N=cn[l].id,j=L(N);bd((k,I)=>{if(x){I.escape&&w(null);return}if(u==="categories")I.upArrow?m(M=>(M-1+cn.length)%cn.length):I.downArrow?m(M=>(M+1)%cn.length):I.return||I.rightArrow?cn[l].id==="exit"?n("chat"):(f("items"),p(0)):I.escape&&n("chat");else if(u==="items"){if(I.upArrow)p(M=>(M-1+j.length)%j.length);else if(I.downArrow)p(M=>(M+1)%j.length);else if(I.leftArrow||I.escape)f("categories");else if(I.return){let M=j[h];P(M)}}});let P=k=>{if(k.value==="memory")t(I=>({...I,memory:!I.memory}));else if(k.value==="sandboxPreset"){let I=fl(e),M=["Autonomous","Balanced","Strict"],z=(M.indexOf(I)+1)%M.length,de=M[z];t(Y=>{let K={...Y,sandboxPreset:de};return de==="Strict"?(K.autoExec=!1,K.allowExternalAccess=!1,K.networkAccess=!1,K.autoApproveCommands="",K.autoDisallowCommands="rm -rf, rm -f, del /f, del /q, rd /s, rmdir /s, format, mkfs, dd if=/dev, shred, srm, Remove-Item -Recurse -Force, Initialize-Disk, Clear-Disk, format c:, flashrom, nvram -c",K.alwaysAskCommands="killall, pkill, taskkill, shutdown, reboot, init 0, init 6, Stop-Process, Stop-Service, mv /*, move c:\\*, chmod 000, chmod -R 777, chown, icacls, netsh advfirewall, iptables -F, ufw disable, git reset --hard, git clean -fd, npm r, npm uninstall",K.autoApproveGit=!1):de==="Balanced"?(K.autoExec=!0,K.allowExternalAccess=!1,K.networkAccess=!0,K.autoApproveCommands="ls, dir, cat, type, echo, pwd, cd, git status, git log, git diff, git branch, git show, help, mkdir, touch, md, whoami, hostname, ps, Get-Process, date, time",K.autoDisallowCommands="rm -rf, rm -f, del /f, del /q, rd /s, rmdir /s, format, mkfs, dd if=/dev, shred, srm, Remove-Item -Recurse -Force, Initialize-Disk, Clear-Disk, format c:, flashrom, nvram -c",K.alwaysAskCommands="killall, pkill, taskkill, Stop-Process, mv /*, move c:\\*, chmod 000, chmod -R 777, chown, icacls, shutdown, reboot, init 0, init 6, git reset --hard, git clean -fd, npm r, npm uninstall",K.autoApproveGit=!1):de==="Autonomous"&&(K.autoExec=!0,K.allowExternalAccess=!0,K.networkAccess=!0,K.autoApproveCommands="",K.autoDisallowCommands="",K.alwaysAskCommands="rm -rf, rm -f, del /f, del /q, rd /s, rmdir /s, format, mkfs, dd if=/dev, shred, srm, Remove-Item -Recurse -Force, Initialize-Disk, Clear-Disk, format c:, flashrom, nvram -c",K.autoApproveGit=!0),K})}else if(k.value==="autoExec")e.autoExec?t(I=>({...I,autoExec:!1,sandboxPreset:"Custom"})):e.allowExternalAccess?n("doubleDanger"):n("autoExecDanger");else if(k.value==="externalAccess")e.allowExternalAccess?t(I=>({...I,allowExternalAccess:!1,sandboxPreset:"Custom"})):e.autoExec?n("doubleDanger"):n("externalDanger");else if(k.value==="networkAccess")t(I=>({...I,networkAccess:I.networkAccess===!1,sandboxPreset:"Custom"}));else if(k.value==="alwaysAsk")w("alwaysAskCommands"),_(e.alwaysAskCommands||"");else if(k.value==="autoApprove")w("autoApproveCommands"),_(e.autoApproveCommands||"");else if(k.value==="autoApproveGit")t(I=>({...I,autoApproveGit:!I.autoApproveGit,sandboxPreset:"Custom"}));else if(k.value==="autoDisallow")w("autoDisallowCommands"),_(e.autoDisallowCommands||"");else if(k.value==="apiTier")n("apiTier");else if(k.value==="aiProvider")n("selectProvider");else if(k.value==="autoDelete"){let I=["1d","7d","30d"],ee=(I.indexOf(e.autoDeleteHistory||"30d")+1)%I.length;t(z=>({...z,autoDeleteHistory:I[ee]}))}else if(k.value==="autoUpdate")t(I=>({...I,autoUpdate:!I.autoUpdate}));else if(k.value==="externalData")if(!e.useExternalData)r({label:"Enter absolute path for External AppData:",note:"All history, logs and secrets will be stored here. ~/.fluxflow/settings.json stays as anchor.",key:"externalDataPath",value:e.externalDataPath||""}),n("input");else{let I={...e,useExternalData:!1};t(I),s({systemSettings:I,apiTier:o,quotas:i}),c(M=>[...M,{id:Date.now(),role:"system",text:"\u{1F3E0} [STORAGE RESET] Flux Flow will return to default ~/.fluxflow after restart."}]),n("chat")}else k.value==="updateManager"&&n("updateManager")};return Te.createElement(Lt,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},Te.createElement(Lt,{paddingX:1,paddingY:0,marginBottom:1,borderStyle:"single",borderColor:"magenta",width:"100%"},Te.createElement(Wt,{color:"magenta",bold:!0},"\u{1F527} SYSTEM CONFIGURATION")),Te.createElement(Lt,{flexDirection:"row",width:"100%",minHeight:8},Te.createElement(Lt,{flexDirection:"column",width:"30%",borderStyle:"round",borderColor:u==="categories"?"cyan":"gray",padding:1},Te.createElement(Lt,{marginBottom:1},Te.createElement(Wt,{color:u==="categories"?"cyan":"white",bold:!0,underline:!0},"CATEGORIES")),cn.map((k,I)=>{let M=l===I,ee=k.id==="exit";return Te.createElement(Lt,{key:k.id,marginTop:ee?1:0,backgroundColor:M?u==="categories"?"#2a2a2a":"#1e1e1e":void 0,paddingX:1},Te.createElement(Wt,{color:M?u==="categories"?"cyan":"yellow":"white",bold:M},M?"\u276F ":" ",k.label))})),Te.createElement(Lt,{flexDirection:"column",width:"70%",borderStyle:"round",borderColor:u==="items"?"cyan":"gray",padding:1,marginLeft:1},Te.createElement(Lt,{marginBottom:1},Te.createElement(Wt,{color:u==="items"?"cyan":"white",bold:!0,underline:!0},cn[l].label.toUpperCase()," SETTINGS")),j.length>0?(()=>{let k=null,I=[],M=Se=>(Se||"").split(",").map(qe=>qe.trim().toLowerCase()).filter(Boolean),ee=M(e.autoApproveCommands),z=M(e.autoDisallowCommands),de=M(e.alwaysAskCommands),Y=[...ee,...z,...de],K=new Set(Y),Re=N==="security"&&Y.length!==K.size;return j.forEach((Se,qe)=>{let rt=u==="items"&&h===qe,fe=Se.label.length,ut=Math.max(2,35-fe),Ke=".".repeat(ut),Ve=ce=>N==="security"?(ce.value==="autoExec"||ce.value==="externalAccess")&&ce.status==="ON"?"red":"yellow":ce.status?.startsWith("\u2713")?"green":ce.status?.startsWith("\u26A0")?"yellow":ce.status==="ON"?"green":ce.status==="OFF"?"red":"yellow";Se.section&&Se.section!==k&&(k=Se.section,I.push(Te.createElement(Lt,{key:`sec-hdr-${Se.section}`,marginTop:I.length>0?1:0,marginBottom:0,paddingX:1},Te.createElement(Wt,{color:"magenta",bold:!0,underline:!0},"\u{1F4C2} ",Se.section.toUpperCase()))));let Pe=rt&&x&&(x==="alwaysAskCommands"&&Se.value==="alwaysAsk"||x==="autoApproveCommands"&&Se.value==="autoApprove"||x==="autoDisallowCommands"&&Se.value==="autoDisallow"),ze=Se.value==="alwaysAsk"||Se.value==="autoApprove"||Se.value==="autoDisallow";I.push(Te.createElement(Lt,{key:Se.value,flexDirection:"column"},Te.createElement(Lt,{backgroundColor:rt&&!Pe?"#2a2a2a":void 0,paddingX:2},Te.createElement(Wt,{color:rt?"cyan":"white",bold:rt},rt?"\u276F ":" ",Se.label),!ze&&Te.createElement(Te.Fragment,null,Te.createElement(Wt,{color:"gray",dimColor:!0},Ke),Te.createElement(Wt,{color:Ve(Se),bold:!0},Se.value==="aiProvider"?Se.status:`[ ${Se.status} ]`))),ze&&!Pe&&Se.status!=="None"&&Te.createElement(Lt,{paddingX:4,marginBottom:1},Te.createElement(Wt,{color:"gray",dimColor:!0},"\u21B3 ",Se.status)),Pe&&Te.createElement(Lt,{flexDirection:"column",marginLeft:4,marginBottom:1},Te.createElement(Lt,{paddingX:1,borderStyle:"single",borderColor:"cyan",flexDirection:"row"},Te.createElement(Wt,{color:"cyan",bold:!0},"> "," "),Te.createElement(Cd,{value:S,onChange:_,onSubmit:ce=>{let To={...e,[x]:ce.trim(),sandboxPreset:"Custom"};t(To),s({systemSettings:To,apiTier:o,quotas:i}),w(null)}})),Te.createElement(Wt,{color:"gray",dimColor:!0,italic:!0}," Comma separated \u2022 Press Enter to save, Esc to cancel"))))}),N==="other"&&I.push(Te.createElement(Lt,{key:"pty-notice",marginTop:4,paddingX:1},Te.createElement(Wt,{color:zn?"green":"yellow"},zn?"\u2713 Advance Interactive Terminal Supported":"\u26A0 Interactive Terminal is Limited"))),Re&&I.push(Te.createElement(Lt,{key:"conflict-warning",marginTop:1,paddingX:1},Te.createElement(Wt,{color:"red",dimColor:!0,italic:!0},"* Conflicting commands will be ignored and defaulted to highest priority"))),I})():Te.createElement(Lt,{paddingX:1},Te.createElement(Wt,{color:"gray",italic:!0},cn[l].desc)))),Te.createElement(Lt,{paddingX:1,marginTop:1,flexDirection:"row",justifyContent:"space-between"},Te.createElement(Wt,{color:"gray",dimColor:!0,italic:!0},u==="categories"?"\u25B2\u25BC Select Category \u2022 Enter/\u25BA to configure":"\u25B2\u25BC Select Option \u2022 Enter to Toggle \u2022 \u25C4/ESC to go back"),u==="categories"&&Te.createElement(Wt,{color:"gray",dimColor:!0},cn[l].desc)))}var cn,fl,Ii,ml=ne(async()=>{await qr();cn=[{id:"memory",label:"\u{1F9E0} Memory",desc:"Manage system context & agent's memory"},{id:"security",label:"\u{1F512} Security",desc:"Configure permissions & data safety"},{id:"updater",label:"\u{1F504} Updater",desc:"Manage application updates"},{id:"other",label:"\u{1F4CB} Other",desc:"Miscellaneous preferences"},{id:"exit",label:"\u{1F6AA} Exit Settings",desc:"Return to chat view"}],fl=e=>{let t=e.autoApproveCommands||"",o=e.autoDisallowCommands||"",n=e.alwaysAskCommands||"",r=e.autoExec===!1&&e.allowExternalAccess===!1&&e.networkAccess===!1&&t===""&&o==="rm -rf, rm -f, del /f, del /q, rd /s, rmdir /s, format, mkfs, dd if=/dev, shred, srm, Remove-Item -Recurse -Force, Initialize-Disk, Clear-Disk, format c:, flashrom, nvram -c"&&n==="killall, pkill, taskkill, shutdown, reboot, init 0, init 6, Stop-Process, Stop-Service, mv /*, move c:\\*, chmod 000, chmod -R 777, chown, icacls, netsh advfirewall, iptables -F, ufw disable, git reset --hard, git clean -fd, npm r, npm uninstall"&&e.autoApproveGit===!1,s=e.autoExec===!0&&e.allowExternalAccess===!1&&e.networkAccess!==!1&&t==="ls, dir, cat, type, echo, pwd, cd, git status, git log, git diff, git branch, git show, help, mkdir, touch, md, whoami, hostname, ps, Get-Process, date, time"&&o==="rm -rf, rm -f, del /f, del /q, rd /s, rmdir /s, format, mkfs, dd if=/dev, shred, srm, Remove-Item -Recurse -Force, Initialize-Disk, Clear-Disk, format c:, flashrom, nvram -c"&&n==="killall, pkill, taskkill, Stop-Process, mv /*, move c:\\*, chmod 000, chmod -R 777, chown, icacls, shutdown, reboot, init 0, init 6, git reset --hard, git clean -fd, npm r, npm uninstall"&&e.autoApproveGit===!1,i=e.autoExec===!0&&e.allowExternalAccess===!0&&e.networkAccess!==!1&&t===""&&o===""&&n==="rm -rf, rm -f, del /f, del /q, rd /s, rmdir /s, format, mkfs, dd if=/dev, shred, srm, Remove-Item -Recurse -Force, Initialize-Disk, Clear-Disk, format c:, flashrom, nvram -c"&&e.autoApproveGit===!0;return r?"Strict":s?"Balanced":i?"Autonomous":e.sandboxPreset||"Custom"},Ii=e=>!e||e.trim()===""?"None":e.length>40?e.substring(0,40)+"...":e});import $o,{useState as vi,useEffect as _d}from"react";import{Box as wr,Text as vs}from"ink";import kd from"ink-text-input";function Li({initialData:e,onSave:t,onCancel:o}){let[n,r]=vi(0),[s,i]=vi(""),[c,d]=vi(()=>({name:e?.name||"",nickname:e?.nickname||"",instructions:e?.instructions||""})),u=[{key:"name",label:"Enter your Name: "},{key:"nickname",label:"Enter a Nickname (Agent will use this): "},{key:"instructions",label:"System Instructions (Persona overrides): "}];_d(()=>{let l=u[n].key;i(c[l]||"")},[n,c]);let f=l=>{if(l.trim().toLowerCase()==="/cancel"){o();return}let m=u[n].key,h={...c,[m]:l.trim()};d(h),i(""),n<u.length-1?r(n+1):t(h)};return $o.createElement(wr,{borderStyle:"round",borderColor:"gray",padding:0,marginTop:1,flexShrink:0,flexDirection:"column",width:"100%"},$o.createElement(wr,{paddingX:1,marginBottom:1},$o.createElement(vs,{color:"magenta",bold:!0},"\u{1F464} DEVELOPER PROFILE CONFIGURATION")),$o.createElement(wr,{paddingX:1,flexDirection:"column"},$o.createElement(wr,null,$o.createElement(vs,{color:"cyan",bold:!0},u[n].label),$o.createElement(kd,{value:s,onChange:i,onSubmit:f})),$o.createElement(wr,{marginTop:1},$o.createElement(vs,{color:"gray",dimColor:!0,italic:!0},"Step ",n+1," of ",u.length))),$o.createElement(wr,{paddingX:1,marginTop:1},$o.createElement(vs,{color:"gray",dimColor:!0,italic:!0},"(Enter to submit \u2022 Type /cancel to abort)")))}var hl=ne(()=>{});import ct,{useState as Mi}from"react";import{Box as Io,Text as un,useInput as Id}from"ink";import Od from"ink-text-input";var vd,pl,gl=ne(()=>{An();vd=({question:e,options:t,onResolve:o})=>{let[n,r]=Mi(!1),[s,i]=Mi(""),[c,d]=Mi(0),u=[...t,{id:"CUSTOM",label:"Suggest something else...",description:"Provide a custom response"}];Id((l,m)=>{if(!n&&((m.leftArrow||m.upArrow)&&d(h=>Math.max(0,h-1)),(m.rightArrow||m.downArrow)&&d(h=>Math.min(u.length-1,h+1)),m.return)){let h=u[c];h.id==="CUSTOM"?r(!0):o(h.label)}});let f=Ce(2);return n?ct.createElement(Io,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},ct.createElement(Io,{paddingX:1},ct.createElement(un,{color:"cyan",bold:!0},"\u{1F4AC} SUGGEST SOMETHING ELSE")),ct.createElement(Io,{marginTop:1,paddingX:1},ct.createElement(un,{italic:!0,color:"gray"},"Replying to: ",e)),ct.createElement(Io,{marginTop:1,paddingX:1,flexDirection:"row"},ct.createElement(un,{color:"cyan",bold:!0},"\u{1F4A0} "),ct.createElement(Od,{value:s,onChange:i,onSubmit:()=>o(s)})),ct.createElement(Io,{marginTop:1,paddingX:1,marginBottom:1},ct.createElement(un,{color:"gray",dimColor:!0,italic:!0},"(Press Enter to send)"))):ct.createElement(Io,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},ct.createElement(Io,{paddingX:1,marginBottom:1},ct.createElement(un,{color:"cyan",bold:!0},"\u{1F4AC} AGENT REQUEST: ACTION REQUIRED")),ct.createElement(Io,{paddingX:1,marginBottom:1},ct.createElement(un,{bold:!0,color:"white"},e)),ct.createElement(Io,{flexDirection:"column",width:"100%"},u.map((l,m)=>{let h=m===c;return ct.createElement(Io,{key:l.id,flexDirection:"column",width:"100%",backgroundColor:h?"#2a2a2a":void 0,paddingX:1,marginBottom:m===u.length-1?0:1},ct.createElement(un,{color:h?"cyan":"white",bold:h},h?"\u276F ":" ",l.label),l.description&&ct.createElement(Io,{marginLeft:4},ct.createElement(un,{color:"gray",italic:!0,dimColor:!0},l.description)))})),ct.createElement(Io,{paddingX:1,marginTop:1,marginBottom:1},ct.createElement(un,{color:"gray",dimColor:!0,italic:!0},"(Use Arrows to navigate, Enter to confirm)")))},pl=vd});import Vr from"fs";import Ai from"path";import Ls from"crypto";var Ld,Md,xl,yl,zr,Pn,xe,_e,Ms,As,No=ne(()=>{Ld=66,Md=e=>{let t=Buffer.isBuffer(e)?e:Buffer.from(e),o=Buffer.alloc(t.length);for(let n=0;n<t.length;n++)o[n]=t[n]^Ld;return o},xl="aes-256-cbc",yl=Ls.createHash("sha256").update("fluxflow-cli-sanctuary-key").digest(),zr=e=>{let t=Ls.randomBytes(16),o=Ls.createCipheriv(xl,yl,t),n=o.update(e,"utf8","hex");return n+=o.final("hex"),t.toString("hex")+":"+n},Pn=e=>{let t=e.split(":");if(t.length!==2)throw new Error("Invalid AES format");let o=Buffer.from(t[0],"hex"),n=t[1],r=Ls.createDecipheriv(xl,yl,o),s=r.update(n,"hex","utf8");return s+=r.final("utf8"),s},xe=(e,t={})=>{try{if(!Vr.existsSync(e))return t;let o=Vr.readFileSync(e),n=o.toString("utf8").trim();if(n.startsWith("{")||n.startsWith("["))return JSON.parse(n);try{let s=Pn(n);return JSON.parse(s)}catch{}let r=Md(o).toString("utf8");if(r.startsWith("{")||r.startsWith("["))return JSON.parse(r);throw new Error("Unsupported or corrupt encryption format")}catch(o){return console.error(`Vault Read Error [${Ai.basename(e)}]:`,o.message),t}},_e=(e,t)=>{try{let o=Ai.dirname(e);Vr.existsSync(o)||Vr.mkdirSync(o,{recursive:!0});let n=JSON.stringify(t,null,2),r=zr(n);Vr.writeFileSync(e,r,"utf8")}catch(o){console.error(`Vault Write Error [${Ai.basename(e)}]:`,o.message)}},Ms=xe,As=_e});var El={};xi(El,{BACKUPS_DIR:()=>Bn,DATA_DIR:()=>Ds,FLUXFLOW_DIR:()=>Jn,HISTORY_FILE:()=>Qn,LEDGER_FILE:()=>dn,LOGS_DIR:()=>vo,MEMORIES_FILE:()=>$t,PATHS_FILE:()=>Ps,SECRET_DIR:()=>oo,SETTINGS_FILE:()=>to,TEMP_MEM_CHAT_FILE:()=>qo,TEMP_MEM_FILE:()=>go,USAGE_FILE:()=>Gt});import Ad from"os";import Oo from"path";import wl from"fs";import Tl from"crypto";var Jn,to,Sl,Ds,vo,oo,Qn,Gt,$t,go,qo,Bn,dn,Ps,no=ne(()=>{Jn=Oo.join(Ad.homedir(),".fluxflow"),to=Oo.join(Jn,"settings.json"),Sl=null;try{if(wl.existsSync(to)){let e=wl.readFileSync(to,"utf8").trim(),t;if(e.startsWith("{"))t=JSON.parse(e);else{let o=e.split(":");if(o.length===2){let n=Buffer.from(o[0],"hex"),r=o[1],s=Tl.createHash("sha256").update("fluxflow-cli-sanctuary-key").digest(),i=Tl.createDecipheriv("aes-256-cbc",s,n),c=i.update(r,"hex","utf8");c+=i.final("utf8"),t=JSON.parse(c)}}if(t){let o=t.systemSettings||{};o.useExternalData&&o.externalDataPath&&(Sl=o.externalDataPath)}}}catch{}Ds=Sl||Jn,vo=Oo.join(Ds,"logs"),oo=Oo.join(Ds,"secret"),Qn=Oo.join(oo,"history.json"),Gt=Oo.join(Jn,"usage.json"),$t=Oo.join(oo,"memories.json"),go=Oo.join(oo,"memory-temp.json"),qo=Oo.join(oo,"temp-memory-chat.json"),Bn=Oo.join(Ds,"backups"),dn=Oo.join(oo,"ledger.json"),Ps=Oo.join(oo,"path.json")});var $s={};xi($s,{getAPIKey:()=>Bd,getProviderAPIKey:()=>Bs,getSearchSecrets:()=>$d,getSecret:()=>Fd,removeAPIKey:()=>Di,removeSecret:()=>bl,saveAPIKey:()=>Nd,saveProviderAPIKey:()=>Fs,saveSearchId:()=>Rd,saveSearchKey:()=>Ud,saveSecret:()=>Fn});import Dd from"fs-extra";import Pd from"path";var $n,Bd,Bs,Fs,Fd,Fn,$d,Nd,Ud,Rd,bl,Di,Jr=ne(()=>{No();no();$n=Pd.join(oo,"secrets.json"),Bd=async()=>{try{let e=xe($n,{});if(e.API_KEY)return e.API_KEY}catch{}return null},Bs=async e=>{try{let t=xe($n,{});if(e==="Google")return t.GOOGLE_API_KEY||t.API_KEY||null;if(e==="DeepSeek")return t.DEEPSEEK_API_KEY||null;if(e==="OpenRouter")return t.OPENROUTER_API_KEY||null}catch{}return null},Fs=async(e,t)=>{e==="Google"?(await Fn("GOOGLE_API_KEY",t),await Fn("API_KEY",t)):e==="DeepSeek"?await Fn("DEEPSEEK_API_KEY",t):e==="OpenRouter"&&await Fn("OPENROUTER_API_KEY",t)},Fd=async e=>{try{return xe($n,{})[e]||null}catch{return null}},Fn=async(e,t)=>{await Dd.ensureDir(oo);let o=xe($n,{});o[e]=t,_e($n,o)},$d=async()=>{try{let e=xe($n,{});return{key:e.GOOGLE_API_KEY||e.API_KEY,cx:e.SEARCH_ID}}catch{}return{key:null,cx:null}},Nd=async e=>Fn("API_KEY",e),Ud=async e=>Fn("GOOGLE_API_KEY",e),Rd=async e=>Fn("SEARCH_ID",e),bl=async e=>{try{let t=xe($n,{});delete t[e],_e($n,t)}catch{}},Di=async()=>bl("API_KEY")});var Cl,_l=ne(()=>{Cl=(e=!0,t=!0)=>`
|
|
116
|
+
${w}`)}),d.on("error",p=>{if(l&&r&&p.code==="ENOENT"){let h=Ki(t,!1);return As(e,h,t,n,i,!1)}bt=null,e(`ERROR: Failed to start command [${t}]: ${p.message}`)})}});import Te,{useState as yr}from"react";import{Box as At,Text as Nt,useInput as zl}from"ink";import Jl from"ink-text-input";function Ds({systemSettings:e,setSystemSettings:o,apiTier:t,setActiveView:n,setInputConfig:i,saveSettings:r,quotas:l,setMessages:c,aiProvider:m}){let[d,u]=yr("categories"),[a,f]=yr(0),[p,h]=yr(0),[T,w]=yr(null),[S,k]=yr(""),D=I=>{switch(I){case"memory":return[{label:"Toggle Memory",value:"memory",status:e.memory?"ON":"OFF"}];case"security":return[{label:"Sandbox Preset",value:"sandboxPreset",status:qi(e),section:"Sandbox"},{label:"YOLO Mode",value:"autoExec",status:e.autoExec?"ON":"OFF",section:"Sandbox"},{label:"External Workspace Access",value:"externalAccess",status:e.allowExternalAccess?"ON":"OFF",section:"Sandbox"},{label:"Network Access (Terminal)",value:"networkAccess",status:e.networkAccess!==!1?"ON":"OFF",section:"Sandbox"},{label:"Always Ask Commands",value:"alwaysAsk",status:Ls(e.alwaysAskCommands),section:"Sandbox"},{label:"Auto Approve Commands",value:"autoApprove",status:Ls(e.autoApproveCommands),section:"Sandbox"},{label:"Auto Disapprove Commands",value:"autoDisallow",status:Ls(e.autoDisallowCommands),section:"Sandbox"},{label:"Auto Approve Git Commits",value:"autoApproveGit",status:e.autoApproveGit?"ON":"OFF",section:"Sandbox"},{label:"Auto-Delete History",value:"autoDelete",status:e.autoDeleteHistory||"30d",section:"Other"},{label:"Save AppData Externally",value:"externalData",status:e.useExternalData?"ON":"OFF",section:"Other"}];case"updater":return[{label:"Auto-Update",value:"autoUpdate",status:e.autoUpdate?"ON":"OFF"},{label:"Preferred Updater",value:"updateManager",status:(e.updateManager||"npm")==="custom"?"Custom":(e.updateManager||"npm").toUpperCase()}];case"other":return[{label:"Current Provider",value:"aiProvider",status:m},{label:"API Tier",value:"apiTier",status:t}];default:return[]}},U=Zo[a].id,j=D(U);zl((I,A)=>{if(T){A.escape&&w(null);return}if(d==="categories")A.upArrow?f(v=>(v-1+Zo.length)%Zo.length):A.downArrow?f(v=>(v+1)%Zo.length):A.return||A.rightArrow?Zo[a].id==="exit"?n("chat"):(u("items"),h(0)):A.escape&&n("chat");else if(d==="items"){if(A.upArrow)h(v=>(v-1+j.length)%j.length);else if(A.downArrow)h(v=>(v+1)%j.length);else if(A.leftArrow||A.escape)u("categories");else if(A.return){let v=j[p];P(v)}}});let P=I=>{if(I.value==="memory")o(A=>({...A,memory:!A.memory}));else if(I.value==="sandboxPreset"){let A=qi(e),v=["Autonomous","Balanced","Strict"],z=(v.indexOf(A)+1)%v.length,ue=v[z];o(H=>{let q={...H,sandboxPreset:ue};return ue==="Strict"?(q.autoExec=!1,q.allowExternalAccess=!1,q.networkAccess=!1,q.autoApproveCommands="",q.autoDisallowCommands="rm -rf, rm -f, del /f, del /q, rd /s, rmdir /s, format, mkfs, dd if=/dev, shred, srm, Remove-Item -Recurse -Force, Initialize-Disk, Clear-Disk, format c:, flashrom, nvram -c",q.alwaysAskCommands="killall, pkill, taskkill, shutdown, reboot, init 0, init 6, Stop-Process, Stop-Service, mv /*, move c:\\*, chmod 000, chmod -R 777, chown, icacls, netsh advfirewall, iptables -F, ufw disable, git reset --hard, git clean -fd, npm r, npm uninstall",q.autoApproveGit=!1):ue==="Balanced"?(q.autoExec=!0,q.allowExternalAccess=!1,q.networkAccess=!0,q.autoApproveCommands="ls, dir, cat, type, echo, pwd, cd, git status, git log, git diff, git branch, git show, help, mkdir, touch, md, whoami, hostname, ps, Get-Process, date, time",q.autoDisallowCommands="rm -rf, rm -f, del /f, del /q, rd /s, rmdir /s, format, mkfs, dd if=/dev, shred, srm, Remove-Item -Recurse -Force, Initialize-Disk, Clear-Disk, format c:, flashrom, nvram -c",q.alwaysAskCommands="killall, pkill, taskkill, Stop-Process, mv /*, move c:\\*, chmod 000, chmod -R 777, chown, icacls, shutdown, reboot, init 0, init 6, git reset --hard, git clean -fd, npm r, npm uninstall",q.autoApproveGit=!1):ue==="Autonomous"&&(q.autoExec=!0,q.allowExternalAccess=!0,q.networkAccess=!0,q.autoApproveCommands="",q.autoDisallowCommands="",q.alwaysAskCommands="rm -rf, rm -f, del /f, del /q, rd /s, rmdir /s, format, mkfs, dd if=/dev, shred, srm, Remove-Item -Recurse -Force, Initialize-Disk, Clear-Disk, format c:, flashrom, nvram -c",q.autoApproveGit=!0),q})}else if(I.value==="autoExec")e.autoExec?o(A=>({...A,autoExec:!1,sandboxPreset:"Custom"})):e.allowExternalAccess?n("doubleDanger"):n("autoExecDanger");else if(I.value==="externalAccess")e.allowExternalAccess?o(A=>({...A,allowExternalAccess:!1,sandboxPreset:"Custom"})):e.autoExec?n("doubleDanger"):n("externalDanger");else if(I.value==="networkAccess")o(A=>({...A,networkAccess:A.networkAccess===!1,sandboxPreset:"Custom"}));else if(I.value==="alwaysAsk")w("alwaysAskCommands"),k(e.alwaysAskCommands||"");else if(I.value==="autoApprove")w("autoApproveCommands"),k(e.autoApproveCommands||"");else if(I.value==="autoApproveGit")o(A=>({...A,autoApproveGit:!A.autoApproveGit,sandboxPreset:"Custom"}));else if(I.value==="autoDisallow")w("autoDisallowCommands"),k(e.autoDisallowCommands||"");else if(I.value==="apiTier")n("apiTier");else if(I.value==="aiProvider")n("selectProvider");else if(I.value==="autoDelete"){let A=["1d","7d","30d"],ee=(A.indexOf(e.autoDeleteHistory||"30d")+1)%A.length;o(z=>({...z,autoDeleteHistory:A[ee]}))}else if(I.value==="autoUpdate")o(A=>({...A,autoUpdate:!A.autoUpdate}));else if(I.value==="externalData")if(!e.useExternalData)i({label:"Enter absolute path for External AppData:",note:"All history, logs and secrets will be stored here. ~/.fluxflow/settings.json stays as anchor.",key:"externalDataPath",value:e.externalDataPath||""}),n("input");else{let A={...e,useExternalData:!1};o(A),r({systemSettings:A,apiTier:t,quotas:l}),c(v=>[...v,{id:Date.now(),role:"system",text:"\u{1F3E0} [STORAGE RESET] Flux Flow will return to default ~/.fluxflow after restart."}]),n("chat")}else I.value==="updateManager"&&n("updateManager")};return Te.createElement(At,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},Te.createElement(At,{paddingX:1,paddingY:0,marginBottom:1,borderStyle:"single",borderColor:"magenta",width:"100%"},Te.createElement(Nt,{color:"magenta",bold:!0},"\u{1F527} SYSTEM CONFIGURATION")),Te.createElement(At,{flexDirection:"row",width:"100%",minHeight:8},Te.createElement(At,{flexDirection:"column",width:"30%",borderStyle:"round",borderColor:d==="categories"?"cyan":"gray",padding:1},Te.createElement(At,{marginBottom:1},Te.createElement(Nt,{color:d==="categories"?"cyan":"white",bold:!0,underline:!0},"CATEGORIES")),Zo.map((I,A)=>{let v=a===A,ee=I.id==="exit";return Te.createElement(At,{key:I.id,marginTop:ee?1:0,backgroundColor:v?d==="categories"?"#2a2a2a":"#1e1e1e":void 0,paddingX:1},Te.createElement(Nt,{color:v?d==="categories"?"cyan":"yellow":"white",bold:v},v?"\u276F ":" ",I.label))})),Te.createElement(At,{flexDirection:"column",width:"70%",borderStyle:"round",borderColor:d==="items"?"cyan":"gray",padding:1,marginLeft:1},Te.createElement(At,{marginBottom:1},Te.createElement(Nt,{color:d==="items"?"cyan":"white",bold:!0,underline:!0},Zo[a].label.toUpperCase()," SETTINGS")),j.length>0?(()=>{let I=null,A=[],v=Se=>(Se||"").split(",").map(Ke=>Ke.trim().toLowerCase()).filter(Boolean),ee=v(e.autoApproveCommands),z=v(e.autoDisallowCommands),ue=v(e.alwaysAskCommands),H=[...ee,...z,...ue],q=new Set(H),Re=U==="security"&&H.length!==q.size;return j.forEach((Se,Ke)=>{let nt=d==="items"&&p===Ke,me=Se.label.length,ct=Math.max(2,35-me),qe=".".repeat(ct),Ve=ce=>U==="security"?(ce.value==="autoExec"||ce.value==="externalAccess")&&ce.status==="ON"?"red":"yellow":ce.status?.startsWith("\u2713")?"green":ce.status?.startsWith("\u26A0")?"yellow":ce.status==="ON"?"green":ce.status==="OFF"?"red":"yellow";Se.section&&Se.section!==I&&(I=Se.section,A.push(Te.createElement(At,{key:`sec-hdr-${Se.section}`,marginTop:A.length>0?1:0,marginBottom:0,paddingX:1},Te.createElement(Nt,{color:"magenta",bold:!0,underline:!0},"\u{1F4C2} ",Se.section.toUpperCase()))));let Pe=nt&&T&&(T==="alwaysAskCommands"&&Se.value==="alwaysAsk"||T==="autoApproveCommands"&&Se.value==="autoApprove"||T==="autoDisallowCommands"&&Se.value==="autoDisallow"),ze=Se.value==="alwaysAsk"||Se.value==="autoApprove"||Se.value==="autoDisallow";A.push(Te.createElement(At,{key:Se.value,flexDirection:"column"},Te.createElement(At,{backgroundColor:nt&&!Pe?"#2a2a2a":void 0,paddingX:2},Te.createElement(Nt,{color:nt?"cyan":"white",bold:nt},nt?"\u276F ":" ",Se.label),!ze&&Te.createElement(Te.Fragment,null,Te.createElement(Nt,{color:"gray",dimColor:!0},qe),Te.createElement(Nt,{color:Ve(Se),bold:!0},Se.value==="aiProvider"?Se.status:`[ ${Se.status} ]`))),ze&&!Pe&&Se.status!=="None"&&Te.createElement(At,{paddingX:4,marginBottom:1},Te.createElement(Nt,{color:"gray",dimColor:!0},"\u21B3 ",Se.status)),Pe&&Te.createElement(At,{flexDirection:"column",marginLeft:4,marginBottom:1},Te.createElement(At,{paddingX:1,borderStyle:"single",borderColor:"cyan",flexDirection:"row"},Te.createElement(Nt,{color:"cyan",bold:!0},"> "," "),Te.createElement(Jl,{value:S,onChange:k,onSubmit:ce=>{let ho={...e,[T]:ce.trim(),sandboxPreset:"Custom"};o(ho),r({systemSettings:ho,apiTier:t,quotas:l}),w(null)}})),Te.createElement(Nt,{color:"gray",dimColor:!0,italic:!0}," Comma separated \u2022 Press Enter to save, Esc to cancel"))))}),U==="other"&&A.push(Te.createElement(At,{key:"pty-notice",marginTop:4,paddingX:1},Te.createElement(Nt,{color:Pn?"green":"yellow"},Pn?"\u2713 Advance Interactive Terminal Supported":"\u26A0 Interactive Terminal is Limited"))),Re&&A.push(Te.createElement(At,{key:"conflict-warning",marginTop:1,paddingX:1},Te.createElement(Nt,{color:"red",dimColor:!0,italic:!0},"* Conflicting commands will be ignored and defaulted to highest priority"))),A})():Te.createElement(At,{paddingX:1},Te.createElement(Nt,{color:"gray",italic:!0},Zo[a].desc)))),Te.createElement(At,{paddingX:1,marginTop:1,flexDirection:"row",justifyContent:"space-between"},Te.createElement(Nt,{color:"gray",dimColor:!0,italic:!0},d==="categories"?"\u25B2\u25BC Select Category \u2022 Enter/\u25BA to configure":"\u25B2\u25BC Select Option \u2022 Enter to Toggle \u2022 \u25C4/ESC to go back"),d==="categories"&&Te.createElement(Nt,{color:"gray",dimColor:!0},Zo[a].desc)))}var Zo,qi,Ls,Vi=re(async()=>{await xr();Zo=[{id:"memory",label:"\u{1F9E0} Memory",desc:"Manage system context & agent's memory"},{id:"security",label:"\u{1F512} Security",desc:"Configure permissions & data safety"},{id:"updater",label:"\u{1F504} Updater",desc:"Manage application updates"},{id:"other",label:"\u{1F4CB} Other",desc:"Miscellaneous preferences"},{id:"exit",label:"\u{1F6AA} Exit Settings",desc:"Return to chat view"}],qi=e=>{let o=e.autoApproveCommands||"",t=e.autoDisallowCommands||"",n=e.alwaysAskCommands||"",i=e.autoExec===!1&&e.allowExternalAccess===!1&&e.networkAccess===!1&&o===""&&t==="rm -rf, rm -f, del /f, del /q, rd /s, rmdir /s, format, mkfs, dd if=/dev, shred, srm, Remove-Item -Recurse -Force, Initialize-Disk, Clear-Disk, format c:, flashrom, nvram -c"&&n==="killall, pkill, taskkill, shutdown, reboot, init 0, init 6, Stop-Process, Stop-Service, mv /*, move c:\\*, chmod 000, chmod -R 777, chown, icacls, netsh advfirewall, iptables -F, ufw disable, git reset --hard, git clean -fd, npm r, npm uninstall"&&e.autoApproveGit===!1,r=e.autoExec===!0&&e.allowExternalAccess===!1&&e.networkAccess!==!1&&o==="ls, dir, cat, type, echo, pwd, cd, git status, git log, git diff, git branch, git show, help, mkdir, touch, md, whoami, hostname, ps, Get-Process, date, time"&&t==="rm -rf, rm -f, del /f, del /q, rd /s, rmdir /s, format, mkfs, dd if=/dev, shred, srm, Remove-Item -Recurse -Force, Initialize-Disk, Clear-Disk, format c:, flashrom, nvram -c"&&n==="killall, pkill, taskkill, Stop-Process, mv /*, move c:\\*, chmod 000, chmod -R 777, chown, icacls, shutdown, reboot, init 0, init 6, git reset --hard, git clean -fd, npm r, npm uninstall"&&e.autoApproveGit===!1,l=e.autoExec===!0&&e.allowExternalAccess===!0&&e.networkAccess!==!1&&o===""&&t===""&&n==="rm -rf, rm -f, del /f, del /q, rd /s, rmdir /s, format, mkfs, dd if=/dev, shred, srm, Remove-Item -Recurse -Force, Initialize-Disk, Clear-Disk, format c:, flashrom, nvram -c"&&e.autoApproveGit===!0;return i?"Strict":r?"Balanced":l?"Autonomous":e.sandboxPreset||"Custom"},Ls=e=>!e||e.trim()===""?"None":e.length>40?e.substring(0,40)+"...":e});import Lo,{useState as vs,useEffect as Ql}from"react";import{Box as Qn,Text as Xr}from"ink";import Zl from"ink-text-input";function $s({initialData:e,onSave:o,onCancel:t}){let[n,i]=vs(0),[r,l]=vs(""),[c,m]=vs(()=>({name:e?.name||"",nickname:e?.nickname||"",instructions:e?.instructions||""})),d=[{key:"name",label:"Enter your Name: "},{key:"nickname",label:"Enter a Nickname (Agent will use this): "},{key:"instructions",label:"System Instructions (Persona overrides): "}];Ql(()=>{let a=d[n].key;l(c[a]||"")},[n,c]);let u=a=>{if(a.trim().toLowerCase()==="/cancel"){t();return}let f=d[n].key,p={...c,[f]:a.trim()};m(p),l(""),n<d.length-1?i(n+1):o(p)};return Lo.createElement(Qn,{borderStyle:"round",borderColor:"gray",padding:0,marginTop:1,flexShrink:0,flexDirection:"column",width:"100%"},Lo.createElement(Qn,{paddingX:1,marginBottom:1},Lo.createElement(Xr,{color:"magenta",bold:!0},"\u{1F464} DEVELOPER PROFILE CONFIGURATION")),Lo.createElement(Qn,{paddingX:1,flexDirection:"column"},Lo.createElement(Qn,null,Lo.createElement(Xr,{color:"cyan",bold:!0},d[n].label),Lo.createElement(Zl,{value:r,onChange:l,onSubmit:u})),Lo.createElement(Qn,{marginTop:1},Lo.createElement(Xr,{color:"gray",dimColor:!0,italic:!0},"Step ",n+1," of ",d.length))),Lo.createElement(Qn,{paddingX:1,marginTop:1},Lo.createElement(Xr,{color:"gray",dimColor:!0,italic:!0},"(Enter to submit \u2022 Type /cancel to abort)")))}var zi=re(()=>{});import lt,{useState as Ps}from"react";import{Box as Eo,Text as en,useInput as ec}from"ink";import tc from"ink-text-input";var oc,Ji,Qi=re(()=>{yn();oc=({question:e,options:o,onResolve:t})=>{let[n,i]=Ps(!1),[r,l]=Ps(""),[c,m]=Ps(0),d=[...o,{id:"CUSTOM",label:"Suggest something else...",description:"Provide a custom response"}];ec((a,f)=>{if(!n&&((f.leftArrow||f.upArrow)&&m(p=>Math.max(0,p-1)),(f.rightArrow||f.downArrow)&&m(p=>Math.min(d.length-1,p+1)),f.return)){let p=d[c];p.id==="CUSTOM"?i(!0):t(p.label)}});let u=Ce(2);return n?lt.createElement(Eo,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},lt.createElement(Eo,{paddingX:1},lt.createElement(en,{color:"cyan",bold:!0},"\u{1F4AC} SUGGEST SOMETHING ELSE")),lt.createElement(Eo,{marginTop:1,paddingX:1},lt.createElement(en,{italic:!0,color:"gray"},"Replying to: ",e)),lt.createElement(Eo,{marginTop:1,paddingX:1,flexDirection:"row"},lt.createElement(en,{color:"cyan",bold:!0},"\u{1F4A0} "),lt.createElement(tc,{value:r,onChange:l,onSubmit:()=>t(r)})),lt.createElement(Eo,{marginTop:1,paddingX:1,marginBottom:1},lt.createElement(en,{color:"gray",dimColor:!0,italic:!0},"(Press Enter to send)"))):lt.createElement(Eo,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},lt.createElement(Eo,{paddingX:1,marginBottom:1},lt.createElement(en,{color:"cyan",bold:!0},"\u{1F4AC} AGENT REQUEST: ACTION REQUIRED")),lt.createElement(Eo,{paddingX:1,marginBottom:1},lt.createElement(en,{bold:!0,color:"white"},e)),lt.createElement(Eo,{flexDirection:"column",width:"100%"},d.map((a,f)=>{let p=f===c;return lt.createElement(Eo,{key:a.id,flexDirection:"column",width:"100%",backgroundColor:p?"#2a2a2a":void 0,paddingX:1,marginBottom:f===d.length-1?0:1},lt.createElement(en,{color:p?"cyan":"white",bold:p},p?"\u276F ":" ",a.label),a.description&<.createElement(Eo,{marginLeft:4},lt.createElement(en,{color:"gray",italic:!0,dimColor:!0},a.description)))})),lt.createElement(Eo,{paddingX:1,marginTop:1,marginBottom:1},lt.createElement(en,{color:"gray",dimColor:!0,italic:!0},"(Use Arrows to navigate, Enter to confirm)")))},Ji=oc});import wr from"fs";import Fs from"path";import Kr from"crypto";var nc,rc,Zi,ea,Tr,Tn,xe,ke,qr,Vr,Do=re(()=>{nc=66,rc=e=>{let o=Buffer.isBuffer(e)?e:Buffer.from(e),t=Buffer.alloc(o.length);for(let n=0;n<o.length;n++)t[n]=o[n]^nc;return t},Zi="aes-256-cbc",ea=Kr.createHash("sha256").update("fluxflow-cli-sanctuary-key").digest(),Tr=e=>{let o=Kr.randomBytes(16),t=Kr.createCipheriv(Zi,ea,o),n=t.update(e,"utf8","hex");return n+=t.final("hex"),o.toString("hex")+":"+n},Tn=e=>{let o=e.split(":");if(o.length!==2)throw new Error("Invalid AES format");let t=Buffer.from(o[0],"hex"),n=o[1],i=Kr.createDecipheriv(Zi,ea,t),r=i.update(n,"hex","utf8");return r+=i.final("utf8"),r},xe=(e,o={})=>{try{if(!wr.existsSync(e))return o;let t=wr.readFileSync(e),n=t.toString("utf8").trim();if(n.startsWith("{")||n.startsWith("["))return JSON.parse(n);try{let r=Tn(n);return JSON.parse(r)}catch{}let i=rc(t).toString("utf8");if(i.startsWith("{")||i.startsWith("["))return JSON.parse(i);throw new Error("Unsupported or corrupt encryption format")}catch(t){return console.error(`Vault Read Error [${Fs.basename(e)}]:`,t.message),o}},ke=(e,o)=>{try{let t=Fs.dirname(e);wr.existsSync(t)||wr.mkdirSync(t,{recursive:!0});let n=JSON.stringify(o,null,2),i=Tr(n);wr.writeFileSync(e,i,"utf8")}catch(t){console.error(`Vault Write Error [${Fs.basename(e)}]:`,t.message)}},qr=xe,Vr=ke});var ra={};Ts(ra,{BACKUPS_DIR:()=>Sn,DATA_DIR:()=>zr,FLUXFLOW_DIR:()=>Fn,HISTORY_FILE:()=>Bn,LEDGER_FILE:()=>tn,LOGS_DIR:()=>Co,MEMORIES_FILE:()=>Pt,PATHS_FILE:()=>Jr,SECRET_DIR:()=>Zt,SETTINGS_FILE:()=>Qt,TEMP_MEM_CHAT_FILE:()=>Uo,TEMP_MEM_FILE:()=>mo,USAGE_FILE:()=>Ut});import sc from"os";import bo from"path";import ta from"fs";import oa from"crypto";var Fn,Qt,na,zr,Co,Zt,Bn,Ut,Pt,mo,Uo,Sn,tn,Jr,eo=re(()=>{Fn=bo.join(sc.homedir(),".fluxflow"),Qt=bo.join(Fn,"settings.json"),na=null;try{if(ta.existsSync(Qt)){let e=ta.readFileSync(Qt,"utf8").trim(),o;if(e.startsWith("{"))o=JSON.parse(e);else{let t=e.split(":");if(t.length===2){let n=Buffer.from(t[0],"hex"),i=t[1],r=oa.createHash("sha256").update("fluxflow-cli-sanctuary-key").digest(),l=oa.createDecipheriv("aes-256-cbc",r,n),c=l.update(i,"hex","utf8");c+=l.final("utf8"),o=JSON.parse(c)}}if(o){let t=o.systemSettings||{};t.useExternalData&&t.externalDataPath&&(na=t.externalDataPath)}}}catch{}zr=na||Fn,Co=bo.join(zr,"logs"),Zt=bo.join(zr,"secret"),Bn=bo.join(Zt,"history.json"),Ut=bo.join(Fn,"usage.json"),Pt=bo.join(Zt,"memories.json"),mo=bo.join(Zt,"memory-temp.json"),Uo=bo.join(Zt,"temp-memory-chat.json"),Sn=bo.join(zr,"backups"),tn=bo.join(Zt,"ledger.json"),Jr=bo.join(Zt,"path.json")});var es={};Ts(es,{getAPIKey:()=>lc,getProviderAPIKey:()=>Qr,getSearchSecrets:()=>dc,getSecret:()=>cc,removeAPIKey:()=>Bs,removeSecret:()=>sa,saveAPIKey:()=>uc,saveProviderAPIKey:()=>Zr,saveSearchId:()=>fc,saveSearchKey:()=>mc,saveSecret:()=>En});import ic from"fs-extra";import ac from"path";var bn,lc,Qr,Zr,cc,En,dc,uc,mc,fc,sa,Bs,Sr=re(()=>{Do();eo();bn=ac.join(Zt,"secrets.json"),lc=async()=>{try{let e=xe(bn,{});if(e.API_KEY)return e.API_KEY}catch{}return null},Qr=async e=>{try{let o=xe(bn,{});if(e==="Google")return o.GOOGLE_API_KEY||o.API_KEY||null;if(e==="DeepSeek")return o.DEEPSEEK_API_KEY||null;if(e==="OpenRouter")return o.OPENROUTER_API_KEY||null}catch{}return null},Zr=async(e,o)=>{e==="Google"?(await En("GOOGLE_API_KEY",o),await En("API_KEY",o)):e==="DeepSeek"?await En("DEEPSEEK_API_KEY",o):e==="OpenRouter"&&await En("OPENROUTER_API_KEY",o)},cc=async e=>{try{return xe(bn,{})[e]||null}catch{return null}},En=async(e,o)=>{await ic.ensureDir(Zt);let t=xe(bn,{});t[e]=o,ke(bn,t)},dc=async()=>{try{let e=xe(bn,{});return{key:e.GOOGLE_API_KEY||e.API_KEY,cx:e.SEARCH_ID}}catch{}return{key:null,cx:null}},uc=async e=>En("API_KEY",e),mc=async e=>En("GOOGLE_API_KEY",e),fc=async e=>En("SEARCH_ID",e),sa=async e=>{try{let o=xe(bn,{});delete o[e],ke(bn,o)}catch{}},Bs=async()=>sa("API_KEY")});var ia,aa=re(()=>{ia=(e=!0,o=!0)=>`
|
|
117
117
|
Your tool syntax is: '[tool:functions.ToolName(args...)]'
|
|
118
118
|
|
|
119
119
|
-- CHAT MANAGEMENT TOOLS (MUST CALL THESE 2 TOOLS ALWAYS) --
|
|
@@ -138,7 +138,7 @@ Explicit Triggers for permanent memory:
|
|
|
138
138
|
|
|
139
139
|
Usage Rules:
|
|
140
140
|
- Frequency for 'user' action: Based on explicit triggers.
|
|
141
|
-
- IF YOU WANT TO SAVE SOMETHING, BUT SIMILAR MEMORY ALREADY EXISTS, USE THE UPDATE METHOD NOT THE ADD METHOD`:""}`.trim()});var
|
|
141
|
+
- IF YOU WANT TO SAVE SOMETHING, BUT SIMILAR MEMORY ALREADY EXISTS, USE THE UPDATE METHOD NOT THE ADD METHOD`:""}`.trim()});var _s,la=re(()=>{_s={xHigh:`EFFORT LEVEL: MAX
|
|
142
142
|
Think in a continuous, relentless analytical monologue within <think>...</think>. Engage in adversarial self interrogation that treats every assumption as hostile until proven:
|
|
143
143
|
Deconstruct requirements into atomic invariants. Trace every implicit dependency, side effect, and state mutation. Map the entire dependency graph and identify circular dependencies or tight coupling before they manifest
|
|
144
144
|
Evaluate algorithmic complexity (time/space) for every operation. Consider memory models, cache locality, and allocation patterns. For concurrent systems, reason through race conditions, deadlocks, and memory ordering
|
|
@@ -192,26 +192,26 @@ RULES:
|
|
|
192
192
|
- Suitable for simple requests/greetings`,Off:`EFFORT LEVEL: INSTANT
|
|
193
193
|
No thinking. Immediate response
|
|
194
194
|
RULES:
|
|
195
|
-
- Verify ALL imports and system stability, AVOID ANY Syntax errors, re-read TOOL RESULTS/files to verify`}});import
|
|
196
|
-
${e}`:"",
|
|
197
|
-
${
|
|
198
|
-
${
|
|
195
|
+
- Verify ALL imports and system stability, AVOID ANY Syntax errors, re-read TOOL RESULTS/files to verify`}});import hc from"fs";var Ns,ca,da,ua,ma=re(async()=>{await Is();aa();la();Ns=null,ca=(e="",o="",t=!0,n=!1)=>{if(!t)return"";let i=e?.length>0&&!n?`-- RECENT CONTEXT FROM OTHER CHATS (PRIORITY: DYNAMIC-LOW, FOCUS: Chat Context > Recent) --
|
|
196
|
+
${e}`:"",l=[o?.length>0?`--- SAVED MEMORIES (PRIORITY: MEDIUM, USER PREFERENCES) ---
|
|
197
|
+
${o}`:"",i].filter(c=>c.length>0);return l.length>0?`[SYSTEM CONTEXT]
|
|
198
|
+
${l.join(`
|
|
199
199
|
|
|
200
200
|
`)}
|
|
201
|
-
`:""},
|
|
201
|
+
`:""},da=(e,o,t,n,i=!0,r=!1,l="Google",c=!1)=>{let m="";if(o!=="GEM"){let S=o;o==="Fast"&&(S="Off"),o==="Low"&&(S="Minimal"),(o==="xHigh"||o==="Max")&&(S="xHigh"),m=_s[S]||_s.Medium}let d=process.platform==="win32"?"Windows":process.platform==="darwin"?"macOS":"Linux",u=e.instructions&&e.instructions?.length>0?`User Instructions: ${e.instructions}
|
|
202
202
|
|
|
203
|
-
`:"",
|
|
204
|
-
${
|
|
205
|
-
`}`:"",
|
|
206
|
-
${
|
|
207
|
-
`}`:"",
|
|
203
|
+
`:"",a=e.nickname&&e.nickname?.length>0?`User Nickname: ${e.nickname}
|
|
204
|
+
${u.length?"":`
|
|
205
|
+
`}`:"",f=e.name&&e.name?.length>0?`User Name: ${e.name}
|
|
206
|
+
${a.length||u.length?"":`
|
|
207
|
+
`}`:"",p=process.cwd(),h=(()=>{let S=process.cwd().toLowerCase();if(process.platform==="win32"){let k=process.env.SystemRoot?.toLowerCase()||"c:\\windows",D=process.env.ProgramFiles?.toLowerCase()||"c:\\program files",U=process.env["ProgramFiles(x86)"]?.toLowerCase()||"c:\\program files (x86)";return S.startsWith(k)||S.startsWith(D)||S.startsWith(U)}else return S==="/"||["/bin","/sbin","/etc","/usr","/var","/root"].some(D=>S.startsWith(D))})(),T=[{name:"Fluxflow.md",desc:"HIGH PRIORITY. Overrides other files"},{name:"README.md",desc:"Goals"},{name:"Agent.md",desc:"Standards"},{name:"Skills.md",desc:"Workflows"},{name:"design.md",desc:"UI/UX"},{name:"architecture.md",desc:"System Structure"}];if(r||Ns===null){let S=T.filter(k=>hc.existsSync(k.name));Ns=t==="Flux"&&S.length>0?`
|
|
208
208
|
-- PROJECT CONTEXT (Source of Truth) --
|
|
209
|
-
${S.map(
|
|
209
|
+
${S.map(k=>`- ${k.name}: ${k.desc}`).join(`
|
|
210
210
|
`)}
|
|
211
211
|
Check these first; These Files > Training Data. Safety rules apply
|
|
212
|
-
`:""}let w=
|
|
213
|
-
Identity: Flux Flow (by Kushal Roy Chowdhury). Conversational, Sassy${
|
|
214
|
-
Mode: ${
|
|
212
|
+
`:""}let w=Ns;return`${f}${a}${u}[SYSTEM]
|
|
213
|
+
Identity: Flux Flow (by Kushal Roy Chowdhury). Conversational, Sassy${t==="Flux"?", Respectful":", Friendly, Humorous, Sarcastic"}, CLI Agent
|
|
214
|
+
Mode: ${t}${o!=="Fast"?" (Thinking Mode)":""}. ${t==="Flux"?"Logical, Highly Detailed, Task-Driven. Prioritizes scalable file/folder structures, modular architecture, clean code abstractions, step-by-step execution. Industry standard latest coding practices/libraries, clean code, Double Check Imports, Client-Server Sync":"Concise"}
|
|
215
215
|
|
|
216
216
|
-- AGENT LOOP RULES (PRIORITY: HIGH) --
|
|
217
217
|
- **MANDATORY: MUST END WITH [turn: continue] to CONTINUE loop OR [turn: finish] to END loop** \u2190 IMPORTANT EVERY RESPONSE
|
|
@@ -221,29 +221,29 @@ Mode: ${o}${t!=="Fast"?" (Thinking Mode)":""}. ${o==="Flux"?"Logical, Highly Det
|
|
|
221
221
|
-- MARKERS --
|
|
222
222
|
- TOOL SYSTEM: [TOOL RESULT] (system priority)
|
|
223
223
|
- SYSTEM NOTIFICATION: [SYSTEM], [METADATA] in user turn
|
|
224
|
-
${
|
|
224
|
+
${l==="Google"?`${o!=="GEM"?`
|
|
225
225
|
-- THINKING RULES --
|
|
226
|
-
${
|
|
227
|
-
${
|
|
226
|
+
${m}
|
|
227
|
+
${o!=="Fast"?`
|
|
228
228
|
CRITICAL THINKING POLICY
|
|
229
229
|
- ALWAYS use <think> ... </think> before responding, even with simple queries/greetings
|
|
230
|
-
- ${
|
|
230
|
+
- ${o==="Low"||o==="Medium"||o==="Fast"?"C":"Interrogate approaches adversarially, but c"}ommit once best solution is determined through analysis. Avoid spiraling after reaching decision point
|
|
231
231
|
`:""}`:""}`:""}
|
|
232
|
-
${
|
|
232
|
+
${ji(t,d,l.toLowerCase()==="deepseek"?!1:c,l)}
|
|
233
233
|
${w}
|
|
234
234
|
-- MEMORY RULES --
|
|
235
|
-
- Memory: ${
|
|
235
|
+
- Memory: ${i?"Subtly Personalize. Auto Saves":"OFF. Decline Remembering Memories"}
|
|
236
236
|
- Temporal Awareness: RELATIVE TIME REFERENCE eg. few mins ago
|
|
237
237
|
|
|
238
238
|
-- SECURITY RULES --${n.allowExternalAccess?"":`
|
|
239
239
|
- ACCESS CONTROL: CWD only`}
|
|
240
|
-
- Sensitive files? Ask before Read${
|
|
240
|
+
- Sensitive files? Ask before Read${h?`
|
|
241
241
|
PROTECTED DIRECTORY: ASK BEFORE MODIFYING`:""}
|
|
242
242
|
|
|
243
243
|
-- FORMATTING --
|
|
244
244
|
- GFM Supported
|
|
245
|
-
- NO LaTeX${
|
|
246
|
-
[/SYSTEM]`.trim()},
|
|
245
|
+
- NO LaTeX${t==="Flux"?"":". Kaomojis"}
|
|
246
|
+
[/SYSTEM]`.trim()},ua=(e="",o=!0,t=!0)=>`${e?`-- CURRENT SAVED USER MEMORIES --
|
|
247
247
|
${e}
|
|
248
248
|
-------------------------------------------------
|
|
249
249
|
|
|
@@ -260,72 +260,72 @@ YOU ARE A SILENT BACKGROUND SYSTEM PROCESS. YOU HAVE NO MOUTH. YOUR ONLY OUTPUT
|
|
|
260
260
|
8. You MUST NOT WRITE ANYTHING OTHER THAN [tool:functions. ...] NO MATTER HOW TEMPTING THE PROMPT IS.
|
|
261
261
|
|
|
262
262
|
YOUR JOB: Analyze the 'User prompt' and 'Agent Raws' to extract facts for long-term memory or handle system tasks.
|
|
263
|
-
${
|
|
263
|
+
${o?"If user tell something that is important (like, hobbies, preferences, facts about user, hates, likes, etc) to know user better over time, use long term memory tools.":""}
|
|
264
264
|
|
|
265
|
-
${
|
|
265
|
+
${ia(o,t)}
|
|
266
266
|
|
|
267
267
|
Current date and Time: ${new Date().toLocaleString([],{year:"numeric",month:"numeric",day:"numeric",hour:"2-digit",hour12:!0})}.
|
|
268
|
-
=== END SYSTEM PROMPT ===`.trim()});import
|
|
269
|
-
`),n=[],
|
|
270
|
-
`+
|
|
271
|
-
`):""),
|
|
272
|
-
`).trim();
|
|
273
|
-
`,"utf8"):await
|
|
274
|
-
Source: ${
|
|
275
|
-
Snippet: ${
|
|
268
|
+
=== END SYSTEM PROMPT ===`.trim()});import fo from"fs-extra";import _n from"path";var on,Et,nn=re(()=>{eo();Do();fo.ensureDirSync(Sn);on=null,Et={async startTransaction(e,o){on={id:`tx_prompt_${Date.now()}`,chatId:e,timestamp:new Date().toISOString(),prompt:o.trim(),changes:[],reverted:!1}},async recordFileChange(e,o=null){if(!on||on.changes.some(l=>l.filePath===e))return;let n=await fo.pathExists(e),i=n&&!o||o?"update":"create";!n&&!o&&(i="create");let r=null;if(n||o){i="update";let l=_n.basename(e);r=`${on.id}_${l}.bak`;let c=_n.join(Sn,on.chatId);await fo.ensureDir(c);let m=_n.join(c,r),d=o!==null?o:await fo.readFile(e,"utf8"),u=Tr(d);await fo.writeFile(m,u,"utf8")}on.changes.push({filePath:e,type:i,backupFile:r})},async commitTransaction(){if(!on)return;let e=xe(tn,[]);if(e.push(on),e.length>512e3){let o=e.shift();if(o.changes){for(let t of o.changes)if(t.backupFile){let n=_n.join(Sn,o.chatId,t.backupFile);await fo.remove(n)}}}ke(tn,e),on=null},async rollbackToBefore(e){let o=xe(tn,null);if(!o)throw new Error("No transaction ledger found.");let t=o.findIndex(c=>c.id===e);if(t===-1)throw new Error(`Transaction [${e}] not found.`);let n=o[t].chatId,i=o[t].prompt,r=o.slice(t).filter(c=>c.chatId===n&&!c.reverted).reverse();for(let c of r){for(let m of[...c.changes].reverse())if(m.type==="create")await fo.pathExists(m.filePath)&&await fo.remove(m.filePath);else if(m.type==="update"){let d=_n.join(Sn,c.chatId,m.backupFile);if(await fo.pathExists(d)){let u=await fo.readFile(d,"utf8"),a=Tn(u);await fo.writeFile(m.filePath,a,"utf8")}}c.reverted=!0}for(let c of r)for(let m of c.changes)if(m.backupFile){let d=_n.join(Sn,c.chatId,m.backupFile);await fo.remove(d)}let l=o.filter(c=>!r.some(m=>m.id===c.id));return ke(tn,l),{success:!0,chatId:n,targetPrompt:i}},async getChatHistory(e){try{return xe(tn,[]).filter(t=>t.chatId===e&&!t.reverted)}catch{return[]}},async deleteChatBackups(e){try{let o=_n.join(Sn,e);await fo.remove(o);let t=xe(tn,[]),n=t.length;t=t.filter(i=>i.chatId!==e),t.length!==n&&ke(tn,t)}catch{}}}});import Ro from"fs-extra";import gc from"path";import{nanoid as xc}from"nanoid";var fa,Us,vo,ts,pa,Rs,Ws,ha,yc,wc,ga,xa,Er=re(()=>{Do();eo();nn();fa=Promise.resolve(),Us=e=>{let o=fa.then(async()=>{try{return await e()}catch(t){throw console.error("Lock Operation Failed:",t),t}});return fa=o.catch(()=>{}),o},vo=async()=>{if(await Ro.pathExists(Bn))try{return xe(Bn,{})}catch{return{}}return{}},ts=async(e,o,t)=>Us(async()=>{let n=await vo(),i=n[e],r=(t||[]).filter(c=>!c.isUpdateNotification&&!c.isMeta),l=o||(i?i.name:`Session ${e.slice(-6)}`);n[e]={name:l,messages:r,updatedAt:Date.now()},ke(Bn,n)}),pa=async(e,o)=>Us(async()=>{let t=await vo();t[e]?(t[e].name=o,t[e].updatedAt=Date.now()):t[e]={name:o,messages:[],updatedAt:Date.now()},ke(Bn,t)}),Rs=async e=>Us(async()=>{let o=await vo();delete o[e],ke(Bn,o);let t=xe(mo,{});t[e]&&(delete t[e],ke(mo,t));let n=xe(Uo,{});return n[e]&&(delete n[e],ke(Uo,n)),await Et.deleteChatBackups(e),o}),Ws=()=>`flow-${xc(6)}`,ha=async e=>{if(!e||e==="Never")return;let o=parseInt(e);if(isNaN(o))return;let t=await vo(),n=Date.now(),i=o*24*60*60*1e3,r=0;for(let l in t){let c=t[l];c.updatedAt&&n-c.updatedAt>i&&(await Rs(l),r++)}return r},yc=e=>{let o=e.replace(/[\[\]]/g,"").trim(),t=new Date(o);if(!isNaN(t.getTime()))return t.getTime();let n=o.split(/,\s*|\s+/);if(n.length===0)return null;let i=n[0],r=n[1]||"",l=n[2]||"",c=i.split(/[-/.]/).map(Number);if(c.length!==3)return null;let m,d,u;if(c[0]>1e3)m=c[0],d=c[1],u=c[2];else if(c[2]>1e3)m=c[2],c[0]>12?(u=c[0],d=c[1]):c[1]>12?(u=c[1],d=c[0]):(d=c[0],u=c[1]);else return null;let a=0,f=0,p=0;if(r){let T=r.split(":").map(Number);a=T[0]||0,f=T[1]||0,p=T[2]||0,l.toLowerCase()==="pm"&&a<12?a+=12:l.toLowerCase()==="am"&&a===12&&(a=0)}let h=new Date(m,d-1,u,a,f,p);return isNaN(h.getTime())?null:h.getTime()},wc=async e=>{try{if(!await Ro.pathExists(e))return;let o=await Ro.readFile(e,"utf8");if(!o.trim())return;let t=o.split(`
|
|
269
|
+
`),n=[],i=null,r=/^\s*(?:DEBUG|ERROR|SEARCH|PUPPETEER)\b/i;for(let a of t)r.test(a)?(i&&n.push(i),i={header:a,body:[]}):i?i.body.push(a):n.push({header:a,body:[]});i&&n.push(i);let l=10080*60*1e3,c=Date.now(),m=[],d=/(\d{1,4}[-/.]\d{1,4}[-/.]\d{1,4}(?:,\s*|\s+)?(?:\d{1,2}:\d{2}:\d{2}(?:\s*[aApP][mM])?)?)/;for(let a of n){let f=a.header+(a.body.length>0?`
|
|
270
|
+
`+a.body.join(`
|
|
271
|
+
`):""),p=f.match(d);if(p){let h=yc(p[1]);if(h&&c-h>l)continue}m.push(f)}let u=m.join(`
|
|
272
|
+
`).trim();u?await Ro.writeFile(e,u+`
|
|
273
|
+
`,"utf8"):await Ro.writeFile(e,"","utf8")}catch{}},ga=async e=>{try{if(!await Ro.pathExists(e))return;let o=async t=>{let n=await Ro.readdir(t);for(let i of n){let r=gc.join(t,i);(await Ro.stat(r)).isDirectory()?(await o(r),(await Ro.readdir(r)).length===0&&await Ro.remove(r)):i.endsWith(".log")&&await wc(r)}};await o(e)}catch{}},xa=(e,o=4)=>{if(e.length<=1)return e;let t=e[0],n=e.slice(1),i=o*2,r=n.slice(i);return[t,...r]}});import Xe from"fs-extra";import Wo from"path";import Ys from"os";var Tc,rn,Sc,ht,Cn,ya,os,Hs,wa,Gs,js,Ta,Sa,kn,Nn,po,Xs,Ks,Ea,ba,ns,Ca,rs=re(()=>{eo();Do();Tc=()=>{if(process.platform==="win32"){let o=process.env.LOCALAPPDATA||Wo.join(Ys.homedir(),"AppData","Local");return Wo.join(o,"FxFl","backups","backup.json")}if(process.platform==="darwin")return Wo.join(Ys.homedir(),"Library","Application Support","FxFl","backups","backup.json");let e=process.env.XDG_DATA_HOME||Wo.join(Ys.homedir(),".local","share");return Wo.join(e,"fxfl","backups","backup.json")},rn=Tc(),Sc=()=>Math.random().toString(36).substring(2)+Date.now().toString(36),ht=null,Cn=null,ya=0,os=!1,Hs={agent:0,background:0,search:0,toolSuccess:0,toolFailure:0,toolDenied:0,duration:0,tokens:0,cachedTokens:0,candidateTokens:0,linesAdded:0,linesRemoved:0,imageCalls:[]},wa=async()=>{let e=new Date().toISOString().split("T")[0],o=Ut+".tmp",t=null,n=null;try{if(await Xe.exists(o)){let r=(await Xe.readFile(o,"utf8")).trim(),l=null;if(r.startsWith("{")||r.startsWith("[")?l=JSON.parse(r):l=JSON.parse(Tn(r)),l&&l.date&&l.stats){t=l;try{await Xe.rename(o,Ut)}catch{}}else try{await Xe.remove(o)}catch{}}}catch{try{await Xe.remove(o)}catch{}}if(!t)try{if(await Xe.exists(Ut)){let r=(await Xe.readFile(Ut,"utf8")).trim();r.startsWith("{")||r.startsWith("[")?t=JSON.parse(r):t=JSON.parse(Tn(r))}}catch{}try{if(await Xe.exists(rn)){let r=(await Xe.readFile(rn,"utf8")).trim();r.startsWith("{")||r.startsWith("[")?n=JSON.parse(r):n=JSON.parse(Tn(r))}}catch{}let i=null;if(t&&n)if(t.saveId!==n.saveId){i=t;try{await Xe.ensureDir(Wo.dirname(rn)),await Xe.copy(Ut,rn)}catch{}}else i=t;else if(t&&!n){i=t;try{await Xe.ensureDir(Wo.dirname(rn)),await Xe.copy(Ut,rn)}catch{}}else if(!t&&n){i=n;try{await Xe.ensureDir(Wo.dirname(Ut)),await Xe.copy(rn,Ut)}catch{}}if(i&&i.date===e&&i.stats){let r={...Hs,...i.stats};return Array.isArray(r.imageCalls)||(r.imageCalls=[]),{...i,stats:r}}return{date:e,stats:{...Hs}}},Gs=async()=>{if(!(!os||!ht))try{await Xe.ensureDir(Wo.dirname(Ut));let e=null;try{if(await Xe.exists(Ut)){let i=(await Xe.readFile(Ut,"utf8")).trim();i.startsWith("{")||i.startsWith("[")?e=JSON.parse(i):e=JSON.parse(Tn(i))}}catch{}if(e&&e.date===ht.date&&e.stats){for(let i in ht.stats)if(e.stats[i]!==void 0)if(Array.isArray(ht.stats[i])){let r=Array.isArray(e.stats[i])?e.stats[i]:[],l=ht.stats[i],c=new Map;for(let m of[...r,...l])m&&m.timestamp&&c.set(m.timestamp,m);ht.stats[i]=Array.from(c.values())}else typeof ht.stats[i]=="number"&&(ht.stats[i]=Math.max(ht.stats[i],Number(e.stats[i])||0))}ht.saveId=Sc();let o=Ut+".tmp",t=Tr(JSON.stringify(ht,null,2));await Xe.writeFile(o,t,"utf8");let n=await Xe.open(o,"r+");await Xe.fsync(n),await Xe.close(n),await Xe.rename(o,Ut);try{await Xe.ensureDir(Wo.dirname(rn)),await Xe.copy(Ut,rn)}catch{}os=!1,ya=Date.now()}catch{}},js=()=>{if(os=!0,Cn)return;let e=Date.now(),o=Math.max(0,1500-(e-ya));Cn=setTimeout(async()=>{await Gs(),Cn=null},o),Cn.unref&&Cn.unref()},Ta=async()=>{ht=await wa()},Sa=async()=>{Cn&&(clearTimeout(Cn),Cn=null),await Gs()},kn=async()=>{let e=new Date().toISOString().split("T")[0];return ht?ht.date!==e&&(ht={date:e,stats:{...Hs}},os=!0,await Gs()):ht=await wa(),ht&&ht.stats&&!Array.isArray(ht.stats.imageCalls)&&(ht.stats.imageCalls=[]),ht.stats},Nn=async e=>{let o=await kn();o[e]!==void 0&&(o[e]++,js())},po=async(e,o)=>{let t=await kn();t[e]!==void 0&&(t[e]+=Math.floor(o),js())},Xs=async(e,o)=>{let t=await kn(),n=o.apiTier||"Free",i=o.quotas||{};if(n==="Free"){if(e==="agent"||e==="background")return t.agent+t.background<999999;if(e==="search")return!0}if(n==="Paid"||n==="Custom"){if(e==="agent")return t.agent<(i.agentLimit||999999);if(e==="background")return t.background<(i.backgroundLimit||999999);if(e==="search")return t.search<(i.searchLimit||100)}return!0},Ks=e=>{if(!e||e.length===0)return[];let t=[...e].sort((i,r)=>i.timestamp-r.timestamp),n=[];for(let i of t){if(n.length>0){let r=n[n.length-1];if(i.timestamp>=r.start&&i.timestamp<r.end){r.calls.push(i),r.spent+=i.cost;continue}}n.push({start:i.timestamp,end:i.timestamp+36e5,calls:[i],spent:i.cost})}return n},Ea=(e,o)=>{if(!e||e.length===0)return .025;let n=Ks(e);if(n.length===0)return .025;let i=[];for(let a of n){let f=.025;if(i.length>0){let h=i[i.length-1],T=!1;if(i.length>=2){let w=i[i.length-2];h.ratio>=.8&&w.ratio>=.8&&(T=!0)}if(T)f=.015;else{let w=h.limit,S=h.ratio;S>=.8?f=w===.015?.015:w:S<.4?f=Math.min(.025,w+.005):S>=.4&&S<.6?f=Math.min(.025,w+.004):f=Math.min(.025,w+.002)}}let p=f>0?a.spent/f:0;i.push({limit:f,spent:a.spent,ratio:p})}let r=n[n.length-1];if(o<r.end)return i[i.length-1].limit;let l=i[i.length-1].limit,c=l,m=i[i.length-1].ratio,d=r.end,u=0;for(let a=i.length-1;a>=0&&i[a].ratio>=.8;a--)u++;for(;d<=o;){let a=.025;u>=2?a=.015:m>=.8?a=c===.015?.015:c:m<.4?a=Math.min(.025,c+.005):m>=.4&&m<.6?a=Math.min(.025,c+.004):a=Math.min(.025,c+.002),c=a,m=0,u=0,d+=36e5,l=a}return l},ba=async e=>{let o=e.imageSettings||{keyType:"Default",quality:"Low-High"};if(o.keyType!=="Default")return!0;let n={Low:.001,"Low-High":.002,Medium:.008,"Medium-High":.01,High:.045,Ultra:.0488,Premium:.15}[o.quality]||.002,i=await kn();i.imageCalls||(i.imageCalls=[]);let r=Date.now(),l=Ks(i.imageCalls),c=0;if(l.length>0){let d=l[l.length-1];r>=d.start&&r<d.end&&(c=d.spent)}let m=Ea(i.imageCalls,r);return c+n<=m},ns=async()=>{let e=await kn();e.imageCalls||(e.imageCalls=[]);let o=Date.now(),t=Ks(e.imageCalls),n=[],i=0,r=0;if(t.length>0){let d=t[t.length-1];o>=d.start&&o<d.end&&(n=d.calls,i=d.spent,r=Math.max(0,Math.ceil((d.end-o)/(60*1e3))))}let l=Ea(e.imageCalls,o),c=Math.max(0,l-i),m=i;return{totalSpent:i,remaining:c,activeCallsCount:n.length,nextResetMin:r,reclaimCost:m,limit:l}},Ca=async e=>{let o=e.imageSettings||{keyType:"Default",quality:"Low-High"},n={Low:.001,"Low-High":.002,Medium:.008,"Medium-High":.01,High:.045,Ultra:.0488,Premium:.1}[o.quality]||.002,i=await kn();i.imageCalls||(i.imageCalls=[]),i.imageCalls.push({timestamp:Date.now(),cost:n}),js()}});import Ec from"puppeteer";var qs,ka=re(()=>{Jt();eo();qs=async e=>{let{query:o,limit:t=10}=oe(e);if(!o)return'ERROR: Missing "query" argument for web_search.';let n=3,i=null;for(let r=1;r<=n;r++){let l=null;try{l=await Ec.launch({headless:!0,args:["--no-sandbox","--disable-setuid-sandbox","--disable-gpu","--disable-dev-shm-usage"]});let c=await l.newPage();await c.setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.7778.97 Safari/537.36"),await c.setViewport({width:1366,height:768});let m=r===1?Math.random()*1e3+500:Math.random()*2e3+1e3;await new Promise(f=>setTimeout(f,m));let d=`https://html.duckduckgo.com/html/?q=${encodeURIComponent(o)}`;await c.goto(d,{waitUntil:"networkidle2",timeout:18e4});let u=await c.$$eval(".result",(f,p)=>f.slice(0,p).map((h,T)=>{let w=h.querySelector(".result__a"),S=h.querySelector(".result__snippet"),k=w?w.href:"";k.includes("uddg=")&&(k=decodeURIComponent(k.split("uddg=")[1].split("&")[0]));let D=w?w.innerText.trim():"No Title",U=S?S.innerText.trim():"No Snippet";return`${T+1}. ${D}
|
|
274
|
+
Source: ${k}
|
|
275
|
+
Snippet: ${U}`}),t);if(u.length===0){if((await c.evaluate(()=>document.body.innerText)).includes("anomaly"))throw new Error("ANOMALY_DETECTED");return await l.close(),`No results found for query: [${o}].`}let a=u.join(`
|
|
276
276
|
|
|
277
|
-
`);return await
|
|
277
|
+
`);return await l.close(),`Search results for [${o}]:
|
|
278
278
|
|
|
279
|
-
${
|
|
279
|
+
${a}`}catch(c){if(i=c,l&&await l.close(),r<n){let m=Math.pow(2,r)*1e3;await new Promise(d=>setTimeout(d,m))}}}return`ERROR: Search failed after ${n+1} attempts. Last error: ${i.message}`}});import bc from"puppeteer";var Vs,Ia=re(()=>{eo();Vs=async e=>{let o=e.match(/url\s*=\s*["'](.*)["']/),t=o?o[1]:e,n=3,i=null;for(let r=1;r<=n;r++){let l=null;try{l=await bc.launch({headless:!0,args:["--no-sandbox","--disable-setuid-sandbox","--disable-gpu","--disable-dev-shm-usage"]});let c=await l.newPage();await c.setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.7778.97 Safari/537.36"),await c.setViewport({width:1366,height:768});let m=r===1?Math.random()*1e3+500:Math.random()*2e3+1e3;await new Promise(a=>setTimeout(a,m)),await c.goto(t,{waitUntil:"networkidle2",timeout:18e4}),await new Promise(a=>setTimeout(a,5e3));let d=await c.evaluate(()=>{document.querySelectorAll("script, style, nav, footer, header, noscript, svg, canvas, iframe, ad, .ads, link, meta, img").forEach(w=>w.remove());let f=document.createNodeIterator(document.body,NodeFilter.SHOW_COMMENT),p;for(;p=f.nextNode();)p.remove();document.querySelectorAll("*").forEach(w=>{let S=w.attributes;for(let k=S.length-1;k>=0;k--){let D=S[k].name;D!=="href"&&D!=="src"&&w.removeAttribute(D)}(w.tagName==="SPAN"||w.tagName==="DIV"||w.tagName==="SECTION")&&w.attributes.length===0&&(w.tagName==="SPAN"||w.tagName==="DIV"&&w.childNodes.length===1&&w.childNodes[0].nodeType===Node.TEXT_NODE)&&w.replaceWith(...w.childNodes)});let T=()=>{let w=!1;document.querySelectorAll("*:not(br)").forEach(S=>{S.childNodes.length===0&&!S.innerText.trim()&&(S.remove(),w=!0)}),w&&T()};return T(),document.body.innerHTML});if(!d)throw new Error("EMPTY_RENDER_RESULT");let u=d.replace(/\s+/g," ").replace(/>\s+</g,"><").trim().substring(0,3e4);return await l.close(),`CLEANED HTML FROM [${t}]:
|
|
280
280
|
|
|
281
|
-
${
|
|
281
|
+
${u}${d.length>3e4?`
|
|
282
282
|
|
|
283
|
-
[TRUNCATED AT 30K CHARS]`:""}`}catch(c){if(
|
|
283
|
+
[TRUNCATED AT 30K CHARS]`:""}`}catch(c){if(i=c,l&&await l.close(),r<n){let m=Math.pow(2,r)*1e3;await new Promise(d=>setTimeout(d,m))}}}return`ERROR: Scrape failed after ${n+1} attempts. Last error: ${i.message}`}});var Cc,zs,Ma=re(()=>{Do();eo();Cc=4*(1024*2),zs=async(e,o={})=>{let t=u=>{let a=new RegExp(`${u}\\s*[:=]\\s*(["'])(.*?)\\1(?=\\s*[,)]|\\s+\\w+\\s*[:=]|$)`,"s"),f=e.match(a);if(f)return f[2].trim();let p=new RegExp(`${u}\\s*[:=]\\s*([^,\\s)]+)`,"s"),h=e.match(p);return h?h[1].trim():null},n=t("action"),i=t("method"),r=t("content"),l=t("content-new"),c=t("content-old"),m=t("id"),d=t("chat-id")||o.chatId||o.sessionId||"default-session";if(n==="temp"){if(!r)return"ERROR: Missing 'content' for temp memory.";let u=xe(mo,{});u[d]||(u[d]=[]),u[d].push(r),ke(mo,u);let a=u[d].reduce((f,p)=>f+p.length,0);return`SUCCESS: Temporary context saved for session [${d}]. (Size: ${a} chars)`}if(n==="user"){let u=xe(Pt,[]).map(a=>(a.score===void 0&&(a.score=.5),a));if(i==="add"){if(!r)return"ERROR: Missing 'content' for memory addition.";let a=new Date,f=`${a.getDate()}/${a.getMonth()+1}/${a.getFullYear()}`,p=r.includes("[Saved on:")?r:`${r.trim()} [Saved on: ${f}]`,h=Cc,T=u.reduce((D,U)=>D+(U.memory?.length||0),0);for(;u.length>0&&T+p.length>h;){let D=u.shift();T-=D.memory?.length||0}let w=t("score"),S=w?parseFloat(w):.5,k={id:`mem-${Date.now().toString(36)}`,memory:p,score:Math.min(2,isNaN(S)?.5:S)};return u.push(k),ke(Pt,u),`SUCCESS: Memory added with ID [${k.id}] and score [${k.score}]. (Vault Size: ${T+p.length} chars)`}if(i==="update"){let a=m||c,f=l||r;if(!a||!f)return"ERROR: Missing 'id' or content for update.";let p=u.findIndex(S=>S.id===a);if(p===-1)return`ERROR: Memory ID [${a}] not found.`;let h=new Date,T=`${h.getDate()}/${h.getMonth()+1}/${h.getFullYear()}`,w=f.includes("[Saved on:")?f:`${f.trim()} [Saved on: ${T}]`;return u[p].memory=w,ke(Pt,u),`SUCCESS: Memory [${a}] updated.`}if(i==="delete"){let a=m||r;if(!a)return"ERROR: Missing 'id' for deletion.";let f=u.length,p=u.filter(h=>h.id!==a);return p.length===f?`ERROR: Memory ID [${a}] not found.`:(ke(Pt,p),`SUCCESS: Memory [${a}] deleted.`)}return`ERROR: Invalid method [${i}] for user memory. Use 'add', 'update', or 'delete'.`}return`ERROR: Unknown action [${n}] for memory tool.`}});var Js,Aa=re(()=>{Er();Jt();Js=async(e,o={})=>{let t=oe(e).title,n=o.chatId||o.sessionId;if(!n)return"ERROR: No active chatId found in tool context.";if(!t)return"ERROR: Missing 'title' argument.";try{return await pa(n,t),`SUCCESS: Chat title updated to [${t}] for session [${n}].`}catch(i){return`ERROR: Failed to update chat title: ${i.message}`}}});import ss from"fs";import Oa from"path";var Qs,La=re(()=>{Jt();Qs=async(e,o={})=>{let{path:t,StartLine:n,EndLine:i,start_line:r,end_line:l,startLine:c,endLine:m}=oe(e),d=parseInt(n||r||c),u=parseInt(i||l||m),a=d||1,f=u||(d?d+800:800);if(!t)return'ERROR: Missing "path" argument for view_file.';let p=Oa.resolve(process.cwd(),t);try{if(!ss.existsSync(p))return`ERROR: File [${t}] does not exist.`;if(ss.statSync(p).isDirectory())return`ERROR: Path [${t}] is a directory. Use list_files instead.`;let T=Oa.extname(t).toLowerCase();if([".mp4",".mkv",".avi",".mov",".webm",".flv",".wmv",".mpeg",".mpg"].includes(T))return`ERROR: Unable to read. Type ${T.slice(1).toUpperCase()} not supported`;let S={".pdf":"application/pdf",".jpg":"image/jpeg",".jpeg":"image/jpeg",".png":"image/png",".webp":"image/webp",".docx":"application/vnd.openxmlformats-officedocument.wordprocessingml.document",".doc":"application/msword"};if(S[T]){if(!(o.isMultiModal!==!1))return`ERROR: Multimodality is not supported for the current model. Unable to load [${t}].`;let ue=ss.readFileSync(p).toString("base64"),H=S[T];return{text:`[BINARY FILE]: ${t} (${H}) - Loaded as multimodal part.`,binaryPart:{inlineData:{data:ue,mimeType:H}}}}let k=ss.readFileSync(p,"utf8");k.startsWith("\uFEFF")&&(k=k.slice(1)),k=k.replace(/\r\n/g,`
|
|
284
284
|
`).replace(/\r/g,`
|
|
285
|
-
`);let
|
|
286
|
-
`),
|
|
287
|
-
`);return`${
|
|
285
|
+
`);let D=k.split(`
|
|
286
|
+
`),U=D.length,j=Math.max(0,a-1),P=Math.min(U,f),I=D.slice(j,P),A=`File: [${t}] (Showing lines ${j+1}-${P} of ${U}).`,v=I.map((ee,z)=>`${String(j+z+1).padStart(4)}: ${ee}`).join(`
|
|
287
|
+
`);return`${A}
|
|
288
288
|
|
|
289
|
-
${
|
|
289
|
+
${v}`}catch(h){return`ERROR: Failed to read file [${t}]: ${h.message}`}}});import Zn from"fs";import Da from"path";var Zs,va=re(()=>{Jt();nn();Zs=async(e,o={})=>{let{path:t,content:n}=oe(e);if(!t)return'ERROR: Missing "path" argument for write_file.';if(n===void 0)return'ERROR: Missing "content" argument for write_file.';n=n.replace(/^```[\w]*\n?/,"").replace(/```\s*$/,"").replace(/\r\n/g,`
|
|
290
290
|
`).replace(/\r/g,`
|
|
291
|
-
`);let
|
|
292
|
-
${
|
|
291
|
+
`);let i=Da.resolve(process.cwd(),t),r=Da.dirname(i);try{await Et.recordFileChange(i);let l="";if(Zn.existsSync(i))try{l=`Old File contents:
|
|
292
|
+
${Zn.readFileSync(i,"utf8").split(/\r?\n/).map((k,D)=>`${D+1} | ${k}`).join(`
|
|
293
293
|
`)}
|
|
294
294
|
|
|
295
|
-
`}catch{
|
|
295
|
+
`}catch{l=`[Note: Could not read existing file for reversal reference]
|
|
296
296
|
|
|
297
|
-
`}
|
|
297
|
+
`}Zn.existsSync(r)||Zn.mkdirSync(r,{recursive:!0});let m=(w=>w.replace(/^```[\w]*\n?/,"").replace(/```\s*$/,"").replace(/\r\n/g,`
|
|
298
298
|
`).replace(/\r/g,`
|
|
299
|
-
`))(n),
|
|
300
|
-
`);else{let w=
|
|
301
|
-
`),S=
|
|
302
|
-
`);
|
|
299
|
+
`))(n),d=m.split(/\r?\n/).length,u=Buffer.byteLength(m,"utf8");Zn.writeFileSync(i,m,"utf8");let a=Zn.readFileSync(i,"utf8"),f=Buffer.byteLength(a,"utf8"),p=a.split(/\r?\n/),h=p.length;if(f===0&&u>0)return a=null,`ERROR: CRITICAL FAILURE: Verification failed. File [${t}] is empty on disk despite success report!`;let T="";if(h<=200)T=p.join(`
|
|
300
|
+
`);else{let w=p.slice(0,100).join(`
|
|
301
|
+
`),S=p.slice(-100).join(`
|
|
302
|
+
`);T=`${w}
|
|
303
303
|
|
|
304
|
-
... [${
|
|
304
|
+
... [${h-200} lines truncated] ...
|
|
305
305
|
|
|
306
|
-
${S}`}return
|
|
306
|
+
${S}`}return a=null,`SUCCESS: File [${t}] saved.
|
|
307
307
|
|
|
308
|
-
- Stats: [${
|
|
309
|
-
${
|
|
310
|
-
${
|
|
308
|
+
- Stats: [${h} lines, ${(f/1024).toFixed(1)} KB]
|
|
309
|
+
${l}- Content Preview:
|
|
310
|
+
${T}
|
|
311
311
|
|
|
312
|
-
Check if Starting and Ending matches your write.`}catch(
|
|
312
|
+
Check if Starting and Ending matches your write.`}catch(l){return`ERROR: Failed to write file [${t}]: ${l.message}`}}});import ei from"fs";import kc from"path";var ti,$a=re(()=>{Jt();nn();$n();ti=async(e,o={})=>{let t=oe(e),n=t.path;if(!n)return'ERROR: Missing "path" argument for update_file.';let{patchPairs:i,error:r}=Ur(t);if(r)return`ERROR: ${r}`;if(i.length===0)return"ERROR: No valid replacement pairs found. Use replaceContent1, newContent1, etc.";let l=kc.resolve(process.cwd(),n);try{if(!ei.existsSync(l))return`ERROR: File [${n}] does not exist. Use write_file instead.`;let c=o.forcedContent||ei.readFileSync(l,"utf8");c.startsWith("\uFEFF")&&(c=c.slice(1));let m=c.replace(/\r\n/g,`
|
|
313
313
|
`).replace(/\r/g,`
|
|
314
|
-
`),{content:
|
|
315
|
-
${
|
|
316
|
-
`)}`;await
|
|
314
|
+
`),{content:d,results:u}=Rr(m,i),a=u.filter(p=>!p.success);if(a.length>0)return`ERROR: Patch Failed to apply to [${n}].
|
|
315
|
+
${a.map(p=>` \u2022 ${p.error}`).join(`
|
|
316
|
+
`)}`;await Et.recordFileChange(l,m),ei.writeFileSync(l,d,"utf8");let f=Wr(m,d,u,12);return`SUCCESS: File [${n}] updated. [${u.length}/${i.length}] blocks applied.
|
|
317
317
|
|
|
318
|
-
${
|
|
319
|
-
`),
|
|
318
|
+
${f}`}catch(c){return`ERROR: Failed to update file [${n}]: ${c.message}`}}});import is from"fs";import Pa from"path";var oi,Fa=re(()=>{Jt();oi=async e=>{let{path:o="."}=oe(e),t=Pa.resolve(process.cwd(),o);try{if(!is.existsSync(t))return`ERROR: Path [${o}] does not exist.`;if(!is.statSync(t).isDirectory())return`ERROR: Path [${o}] is a file, not a directory. Use view_file instead.`;let i=is.readdirSync(t),r=i.length,l=100,c=i.slice(0,l),m=[];for(let f of c){let p=Pa.join(t,f),h="\u{1F4C4}",T={name:f,type:"unknown",size:"N/A",mtime:"N/A"};try{let w=is.statSync(p);T={name:f,type:w.isDirectory()?"directory":"file",size:(w.size/1024).toFixed(1)+" KB",mtime:w.mtime.toLocaleString()}}catch{T.type="inaccessible"}m.push(T)}let d=m.map(f=>{let p=f.type==="directory"?"\u{1F4C1}":f.type==="file"?"\u{1F4C4}":"\u2753";return f.type==="directory"?`${p} ${f.name} - [DIR] - [Modified: ${f.mtime}]`:`${p} ${f.name} - [Size: ${f.size}] - [Modified: ${f.mtime}]`}).join(`
|
|
319
|
+
`),u=`
|
|
320
320
|
|
|
321
|
-
(Total items in folder: ${
|
|
321
|
+
(Total items in folder: ${r})`;r>l&&(u=`
|
|
322
322
|
|
|
323
|
-
\u26A0\uFE0F TRUNCATED: Showing first ${
|
|
323
|
+
\u26A0\uFE0F TRUNCATED: Showing first ${l} of ${r} items.`);let a=`Detailed folder stats for [${o}]:
|
|
324
324
|
|
|
325
|
-
${
|
|
325
|
+
${d}${u}`;return i.length=0,c.length=0,m.length=0,a}catch(n){return`ERROR: Failed to read folder [${o}]: ${n.message}`}}});var ni,Ba=re(()=>{Jt();ni=async(e,o)=>{let t=oe(e),{question:n}=t;if(!n)return'ERROR: Missing "question" argument for ask.';if(!o.onAskUser)return"ERROR: onAskUser callback not provided in tool context.";let i=[];Object.keys(t).forEach(r=>{if(r.startsWith("option")){let l=t[r];if(typeof l=="string"&&l.includes("::")){let[c,m]=l.split("::");i.push({id:r,label:c.trim(),description:m.trim()})}else i.push({id:r,label:String(l).trim(),description:""})}});try{return`USER CHOOSE: ${await o.onAskUser(n,i)}`}catch(r){return`ERROR: Failed to get user input: ${r.message}`}}});import Ic from"puppeteer";import er from"path";import Un from"fs-extra";import{PDFDocument as Mc}from"pdf-lib";var ri,_a=re(()=>{Jt();nn();ri=async e=>{let{path:o,content:t,orientation:n="portrait",margin:i="0px"}=oe(e);if(!o)return'ERROR: Missing "path" argument for write_pdf.';if(!t)return'ERROR: Missing "content" (HTML/CSS) for write_pdf.';let r=er.resolve(process.cwd(),o),l=null;try{await Un.ensureDir(er.dirname(r)),await Et.recordFileChange(r),l=await Ic.launch({headless:!0,args:["--no-sandbox","--disable-setuid-sandbox","--disable-gpu","--disable-dev-shm-usage"]});let c=await l.newPage(),m=t,d={},u=async P=>{if(!P||P.startsWith("http://")||P.startsWith("https://")||P.startsWith("data:"))return null;try{let I=er.resolve(process.cwd(),P);if(await Un.pathExists(I)){let A=er.extname(I).toLowerCase().replace(".","")||"png",v=A==="jpg"?"jpeg":A==="svg"?"svg+xml":A,ee=await Un.readFile(I,"base64");return`data:image/${v};base64,${ee}`}}catch{}return null},a=/<link[^>]+href=["']([^"']+)["']/gi,f={},p;for(;(p=a.exec(t))!==null;){let P=p[1],I=p[0];if(P&&I.toLowerCase().includes("stylesheet")&&!P.startsWith("http://")&&!P.startsWith("https://")&&!P.startsWith("data:"))try{let A=er.resolve(process.cwd(),P);if(await Un.pathExists(A)){let v=await Un.readFile(A,"utf-8");f[I]=`<style>${v}</style>`}}catch{}}for(let[P,I]of Object.entries(f))m=m.split(P).join(I);let h=/<img[^>]+src=["']([^"']+)["']/gi;for(;(p=h.exec(m))!==null;){let P=p[1];if(P&&!d[P]){let I=await u(P);I&&(d[P]=I)}}let T=/url\(\s*['"]?([^'")]+?)['"]?\s*\)/gi;for(;(p=T.exec(m))!==null;){let P=p[1].trim();if(P&&!d[P]){let I=await u(P);I&&(d[P]=I)}}for(let[P,I]of Object.entries(d)){let A=P.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),v=new RegExp(`(src=["'])(${A})(["'])`,"gi");m=m.replace(v,`$1${I}$3`);let ee=new RegExp(`url\\(\\s*(['"]?)(${A})\\1\\s*\\)`,"gi");m=m.replace(ee,`url($1${I}$1)`)}let w=`
|
|
326
326
|
<style>
|
|
327
327
|
@page {
|
|
328
|
-
margin: ${
|
|
328
|
+
margin: ${i};
|
|
329
329
|
}
|
|
330
330
|
body {
|
|
331
331
|
margin: 0;
|
|
@@ -351,8 +351,8 @@ ${u}${f}`;return r.length=0,c.length=0,d.length=0,l}catch(n){return`ERROR: Faile
|
|
|
351
351
|
}
|
|
352
352
|
</style>
|
|
353
353
|
<div class="watermark">Generated by FluxFlow CLI (AI)</div>
|
|
354
|
-
${
|
|
355
|
-
`;await c.setContent(w,{waitUntil:"networkidle0",timeout:18e4});let S=await c.pdf({format:"A4",landscape:String(n).toLowerCase()==="landscape",margin:{top:
|
|
354
|
+
${m}
|
|
355
|
+
`;await c.setContent(w,{waitUntil:"networkidle0",timeout:18e4});let S=await c.pdf({format:"A4",landscape:String(n).toLowerCase()==="landscape",margin:{top:i,right:i,bottom:i,left:i},printBackground:!0}),k=await Mc.load(S),D=er.basename(o);k.setTitle(`FluxFlow_${D}`),k.setAuthor("FluxFlow CLI"),k.setSubject("Generated with Agentic AI System"),k.setKeywords(["FluxFlow","AI","Agentic","Automated"]),k.setCreator("FluxFlow PDF Engine"),k.setProducer("FluxFlow (Generative AI)");let U=await k.save();await Un.writeFile(r,U);let j=await Un.stat(r);return`SUCCESS: PDF generated successfully at [${o}] (${(j.size/1024).toFixed(2)} KB).`}catch(c){return`ERROR: Failed to generate PDF [${o}]: ${c.message}`}finally{l&&await l.close()}}});import Na from"fs-extra";import si from"path";import Ac from"html-to-docx";var ii,Ua=re(()=>{Jt();nn();ii=async e=>{let{path:o,content:t}=oe(e);if(!o)return'ERROR: Missing "path" argument for write_docx.';if(!t)return'ERROR: Missing "content" (HTML) for write_docx.';let n=si.resolve(process.cwd(),o);try{await Na.ensureDir(si.dirname(n)),await Et.recordFileChange(n);let i=si.basename(o),r=t.includes("<html")?t:`
|
|
356
356
|
<!DOCTYPE html>
|
|
357
357
|
<html lang="en">
|
|
358
358
|
<head>
|
|
@@ -360,38 +360,32 @@ ${u}${f}`;return r.length=0,c.length=0,d.length=0,l}catch(n){return`ERROR: Faile
|
|
|
360
360
|
<title>FluxFlow Document</title>
|
|
361
361
|
</head>
|
|
362
362
|
<body>
|
|
363
|
-
${
|
|
363
|
+
${t}
|
|
364
364
|
</body>
|
|
365
365
|
</html>
|
|
366
|
-
`,
|
|
367
|
-
- Size: ${(
|
|
368
|
-
|
|
369
|
-
`;return
|
|
370
|
-
`),f}catch(s){return`ERROR: ${s.message}`}}});import es from"fs-extra";import ia from"path";var Er,ts,of,or,aa=ne(()=>{no();No();Er={mode:"Flux",thinkingLevel:"Medium",aiProvider:"Google",activeModel:"gemma-4-31b-it",showFullThinking:!0,apiTier:"Free",quotas:{agentLimit:999999,backgroundLimit:999999,searchLimit:100,customModelId:"",customLimit:0},systemSettings:{memory:!0,compression:0,autoExec:!1,allowExternalAccess:!1,autoDeleteHistory:"7d",useExternalData:!1,externalDataPath:""},profileData:{name:null,nickname:null,instructions:null},imageSettings:{keyType:"Default",quality:"Low-High",apiKey:""}},ts=async()=>{let e={...Er};try{if(await es.exists(to)){let t=Ms(to);if(t.imageSettings&&t.imageSettings.apiKey)try{let o=t.imageSettings.apiKey,{saveSecret:n}=await Promise.resolve().then(()=>(Jr(),$s));await n("POLLINATIONS_API_KEY",o),t.imageSettings.apiKey="",As(to,t)}catch{}e={...Er,...t,quotas:{...Er.quotas,...t.quotas},systemSettings:{...Er.systemSettings,...t.systemSettings},profileData:{...Er.profileData,...t.profileData},imageSettings:{...Er.imageSettings,...t.imageSettings}}}}catch(t){console.error("Failed to load settings:",t)}try{let{getSecret:t}=await Promise.resolve().then(()=>(Jr(),$s)),o=await t("POLLINATIONS_API_KEY");o&&(e.imageSettings.apiKey=o)}catch{}if(e.showFullThinking===!1){e.showFullThinking=!0;try{As(to,e)}catch{}}return e},of=async e=>{let{FLUXFLOW_DIR:t}=await Promise.resolve().then(()=>(no(),El)),o=["logs","secret"];for(let n of o){let r=ia.join(t,n),s=ia.join(e,n);try{await es.exists(r)&&(await es.ensureDir(s),await es.copy(r,s,{overwrite:!0}))}catch(i){console.error(`Migration failed for ${n}:`,i)}}},or=async e=>{try{let t=await ts();if(!t.systemSettings.useExternalData&&e.systemSettings?.useExternalData&&e.systemSettings?.externalDataPath&&await of(e.systemSettings.externalDataPath),e.imageSettings&&e.imageSettings.apiKey!==void 0){let{saveSecret:n,removeSecret:r}=await Promise.resolve().then(()=>(Jr(),$s)),s=e.imageSettings.apiKey;s?await n("POLLINATIONS_API_KEY",s):await r("POLLINATIONS_API_KEY")}let o={...t,...e};return o.imageSettings&&(o.imageSettings={...o.imageSettings,apiKey:""}),await es.ensureDir(ia.dirname(to)),As(to,o),!0}catch(t){return console.error("Failed to save settings:",t),!1}}});var ic,ac=ne(()=>{ic="pk_oH8wkUdQaQK1cmst"});import lc from"fs-extra";import la from"path";var nf,ca,cc=ne(()=>{eo();aa();Ws();ac();mn();nf=(e,t={})=>{try{if(e.length<8||e[0]!==137||e[1]!==80||e[2]!==78||e[3]!==71)return e;let o=[],n=[];for(let i=0;i<256;i++){let c=i;for(let d=0;d<8;d++)c&1?c=3988292384^c>>>1:c=c>>>1;n[i]=c}let r=i=>{let c=4294967295;for(let d=0;d<i.length;d++)c=n[(c^i[d])&255]^c>>>8;return(c^4294967295)>>>0},s=(i,c)=>{let d=Buffer.from(i,"ascii"),u=Buffer.from(c,"utf-8"),f=d.length+1+u.length,l=Buffer.alloc(8+f+4);l.writeUInt32BE(f,0),l.write("tEXt",4,"ascii"),d.copy(l,8),l[8+d.length]=0,u.copy(l,8+d.length+1);let m=r(l.subarray(4,8+f));return l.writeUInt32BE(m,8+f),l};for(let[i,c]of Object.entries(t))c!=null&&o.push(s(i,String(c)));if(o.length===0)return e;if(e.subarray(12,16).toString("ascii")==="IHDR"){let c=e.subarray(0,33),d=e.subarray(33);return Buffer.concat([c,...o,d])}return e}catch{return e}},ca=async(e,t={})=>{let o=oe(e),n=o.prompt||o.text,r=o.path||o.outputPath||o.output||"generated_image.png",s=o.ratio;if(!n)return'ERROR: Missing "prompt" argument for generate_image.';let i=["nsfw","naked","nudity","nude","porn","sex","xxx","erotic","gore","bloody","violence","abuse","suicide","murder","hentai","pedophile","rape"],c=n.toLowerCase();if(i.some(u=>c.includes(u)))return"ERROR: Prompt blocked by system safety filter (inappropriate or unsafe content detected).";try{let u=await ts();if(!await Wl(u))return`ERROR: Insufficient Quota for selected quality. Either tell user reduce quality or wait for next refresh cycle (${(await Rs()).nextResetMin||60}m).`;let l=u.imageSettings||{keyType:"Default",quality:"Low-High",apiKey:""},m=l.keyType==="Custom"&&l.apiKey?l.apiKey:ic,p={Low:"flux","Low-High":"zimage",Medium:"gptimage","Medium-High":"gptimage",High:"qwen-image",Ultra:"gptimage-large",Premium:"nanobanana-pro"}[l.quality]||"zimage",x=1024,w=1024;if(s){let K=s.replace(/\s+/g,"");K==="16:9"?(x=1024,w=576):K==="9:16"?(x=576,w=1024):K==="4:3"?(x=1024,w=768):K==="3:4"?(x=768,w=1024):K==="1:1"&&(x=1024,w=1024)}let S=Math.floor(Math.random()*1e7),L=`https://gen.pollinations.ai/image/${encodeURIComponent(n)}?model=${p}&width=${x}&height=${w}&seed=${S}&enhance=true&reasoning=high&quality=high&negative=${encodeURIComponent("deformed, distorted, disfigured, poorly drawn, bad anatomy, wrong anatomy, extra limb, missing limb, floating limbs, disconnected limbs, mutation, mutated hands and fingers, blurry, low quality, low resolution, extra fingers, censored, watermarks, signatures")}`,N=await fetch(L,{method:"GET",headers:{Authorization:`Bearer ${m}`}});if(!N.ok){let K=N.status,Re="";try{Re=await N.text()}catch{}return K===402||Re.includes("Insufficient balance")||Re.includes("PAYMENT_REQUIRED")?"ERROR: Image Generation Currently unavailable. Try again later.":`ERROR: Image Generation failed with status [${K}]: ${Re||"Unknown API Error"}`}if((N.headers.get("content-type")||"").includes("application/json")){let K=await N.json();return K.status===402||K.error&&K.error.code==="PAYMENT_REQUIRED"?"ERROR: Image Generation Currently unavailable. Try again later.":`ERROR: Image Generation failed: ${K.error?.message||JSON.stringify(K)}`}let P=await N.arrayBuffer(),k=Buffer.from(P),I={Title:n,Description:"Generated via FluxFlow CLI",Software:"FluxFlow CLI",Author:"FluxFlow","Creation Time":new Date().toISOString(),Prompt:n,Model:`Fluxflow:${p}`,Ratio:s||"1:1",Seed:String(S)};k=nf(k,I);let M=la.resolve(process.cwd(),r);await lc.ensureDir(la.dirname(M)),await Ct.recordFileChange(M),await lc.writeFile(M,k),await Gl(u);let ee=la.extname(r).toLowerCase(),de={".jpg":"image/jpeg",".jpeg":"image/jpeg",".png":"image/png",".webp":"image/webp"}[ee]||"image/png";return t.isMultiModal!==!1?{text:`SUCCESS: Image successfully generated from prompt [${n}] and saved to [${r}]. Output attached to multimodal part`,binaryPart:{inlineData:{data:k.toString("base64"),mimeType:de}}}:`SUCCESS: Image successfully generated from prompt [${n}] and saved to [${r}].`}catch(u){return`ERROR: Failed during image generation: ${u.message}`}}});var os,uc=ne(()=>{No();no();os=async(e,t={})=>{let o=s=>{let i=new RegExp(`${s}\\s*[:=]\\s*(["'])(.*?)\\1(?=\\s*[,)]|\\s+\\w+\\s*[:=]|$)`,"s"),c=e.match(i);return c?c[2].trim():null},n=o("id"),r=o("summary");if(!n||!r)return"ERROR: Missing 'id' or 'summary' for saveSummary tool.";try{let s=xe(go,{}),i=xe(qo,{});return i[n]=r,delete s[n],_e(qo,i),_e(go,s),`SUCCESS: Saved summary and purged raw memories for chat [${n}].`}catch(s){return`ERROR: Failed to save summary for chat [${n}]: ${s.message}`}}});var br,dc=ne(()=>{No();no();br=async(e,t={})=>{let n=(r=>{let s=new RegExp(`${r}\\s*[:=]\\s*(["'])(.*?)\\1(?=\\s*[,)]|\\s+\\w+\\s*[:=]|$)`,"s"),i=e.match(s);return i?i[2].trim():null})("id");if(!n)return"ERROR: Missing 'id' parameter for addMemScore tool.";try{let r=xe($t,[]),s=!1,i=[];for(let f of r)f.score===void 0&&(f.score=.5),f.id===n?(f.score=Math.min(2,f.score+.2),s=!0):(f.score*=.98,f.score<.05&&(f.score=0)),f.score=Math.round(f.score*1e5)/1e5,f.score>0&&i.push(f);if(_e($t,i),!s)return`WARNING: Memory ID [${n}] not found. Other memories decayed by -0.01.`;let c=i.find(f=>f.id===n),d=c?c.score.toFixed(2):"deleted (score <= 0)",u=r.length-i.length;return`SUCCESS: Adjusted memory scores. Target [${n}] is now ${d}.${u>0?` Purged ${u} decayed memories.`:""}`}catch(r){return`ERROR: Failed to adjust memory score for [${n}]: ${r.message}`}}});var rf,Ys,fc=ne(async()=>{jl();Yl();Hl();Xl();Kl();zl();Jl();await qr();Zl();ec();tc();nc();sc();cc();uc();dc();rf={web_search:Hi,web_scrape:Xi,memory:qi,chat:Ki,view_file:Vi,write_file:zi,update_file:Qi,exec_command:ki,read_folder:Zi,write_pdf:ta,write_docx:na,search_keyword:sa,generate_image:ca,saveSummary:os,addMemScore:br,ask:ea,Ask:ea,WebSearch:Hi,WebScrape:Xi,ReadFile:Vi,ReadFolder:Zi,WriteFile:zi,PatchFile:Qi,WritePDF:ta,WriteDoc:na,Run:ki,SearchKeyword:sa,Memory:qi,Chat:Ki,GenerateImage:ca,saveSumary:os,SaveSummary:os,SaveSumary:os,add_mem_score:br,AddMemScore:br,addMemoryScore:br,AddMemoryScore:br},Ys=async(e,t,o={})=>{if(o.mode&&o.mode.toLowerCase()==="flow"){let r=e.toLowerCase();if(!(r.startsWith("web")||r.startsWith("ask")))return`ERROR: Tool [${e}] is restricted in Flow mode.`}let n=rf[e];if(!n)return`ERROR: Tool [${e}] not found in registry.`;try{return await n(t,o)}catch(r){return`ERROR: Execution failed for [${e}]: ${r.message}`}}});var pn=po((Lx,pc)=>{"use strict";var mc=["nodebuffer","arraybuffer","fragments"],hc=typeof Blob<"u";hc&&mc.push("blob");pc.exports={BINARY_TYPES:mc,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:hc,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var ns=po((Mx,Hs)=>{"use strict";var{EMPTY_BUFFER:sf}=pn(),ua=Buffer[Symbol.species];function af(e,t){if(e.length===0)return sf;if(e.length===1)return e[0];let o=Buffer.allocUnsafe(t),n=0;for(let r=0;r<e.length;r++){let s=e[r];o.set(s,n),n+=s.length}return n<t?new ua(o.buffer,o.byteOffset,n):o}function gc(e,t,o,n,r){for(let s=0;s<r;s++)o[n+s]=e[s]^t[s&3]}function xc(e,t){for(let o=0;o<e.length;o++)e[o]^=t[o&3]}function lf(e){return e.length===e.buffer.byteLength?e.buffer:e.buffer.slice(e.byteOffset,e.byteOffset+e.length)}function da(e){if(da.readOnly=!0,Buffer.isBuffer(e))return e;let t;return e instanceof ArrayBuffer?t=new ua(e):ArrayBuffer.isView(e)?t=new ua(e.buffer,e.byteOffset,e.byteLength):(t=Buffer.from(e),da.readOnly=!1),t}Hs.exports={concat:af,mask:gc,toArrayBuffer:lf,toBuffer:da,unmask:xc};if(!process.env.WS_NO_BUFFER_UTIL)try{let e=gt("bufferutil");Hs.exports.mask=function(t,o,n,r,s){s<48?gc(t,o,n,r,s):e.mask(t,o,n,r,s)},Hs.exports.unmask=function(t,o){t.length<32?xc(t,o):e.unmask(t,o)}}catch{}});var Tc=po((Ax,wc)=>{"use strict";var yc=Symbol("kDone"),fa=Symbol("kRun"),ma=class{constructor(t){this[yc]=()=>{this.pending--,this[fa]()},this.concurrency=t||1/0,this.jobs=[],this.pending=0}add(t){this.jobs.push(t),this[fa]()}[fa](){if(this.pending!==this.concurrency&&this.jobs.length){let t=this.jobs.shift();this.pending++,t(this[yc])}}};wc.exports=ma});var kr=po((Dx,Cc)=>{"use strict";var rs=gt("zlib"),Sc=ns(),cf=Tc(),{kStatusCode:Ec}=pn(),uf=Buffer[Symbol.species],df=Buffer.from([0,0,255,255]),qs=Symbol("permessage-deflate"),gn=Symbol("total-length"),Cr=Symbol("callback"),Rn=Symbol("buffers"),_r=Symbol("error"),Xs,ha=class{constructor(t){if(this._options=t||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._maxPayload=this._options.maxPayload|0,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!Xs){let o=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;Xs=new cf(o)}}static get extensionName(){return"permessage-deflate"}offer(){let t={};return this._options.serverNoContextTakeover&&(t.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(t.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(t.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?t.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(t.client_max_window_bits=!0),t}accept(t){return t=this.normalizeParams(t),this.params=this._isServer?this.acceptAsServer(t):this.acceptAsClient(t),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let t=this._deflate[Cr];this._deflate.close(),this._deflate=null,t&&t(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(t){let o=this._options,n=t.find(r=>!(o.serverNoContextTakeover===!1&&r.server_no_context_takeover||r.server_max_window_bits&&(o.serverMaxWindowBits===!1||typeof o.serverMaxWindowBits=="number"&&o.serverMaxWindowBits>r.server_max_window_bits)||typeof o.clientMaxWindowBits=="number"&&!r.client_max_window_bits));if(!n)throw new Error("None of the extension offers can be accepted");return o.serverNoContextTakeover&&(n.server_no_context_takeover=!0),o.clientNoContextTakeover&&(n.client_no_context_takeover=!0),typeof o.serverMaxWindowBits=="number"&&(n.server_max_window_bits=o.serverMaxWindowBits),typeof o.clientMaxWindowBits=="number"?n.client_max_window_bits=o.clientMaxWindowBits:(n.client_max_window_bits===!0||o.clientMaxWindowBits===!1)&&delete n.client_max_window_bits,n}acceptAsClient(t){let o=t[0];if(this._options.clientNoContextTakeover===!1&&o.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!o.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(o.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&o.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return o}normalizeParams(t){return t.forEach(o=>{Object.keys(o).forEach(n=>{let r=o[n];if(r.length>1)throw new Error(`Parameter "${n}" must have only a single value`);if(r=r[0],n==="client_max_window_bits"){if(r!==!0){let s=+r;if(!Number.isInteger(s)||s<8||s>15)throw new TypeError(`Invalid value for parameter "${n}": ${r}`);r=s}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${n}": ${r}`)}else if(n==="server_max_window_bits"){let s=+r;if(!Number.isInteger(s)||s<8||s>15)throw new TypeError(`Invalid value for parameter "${n}": ${r}`);r=s}else if(n==="client_no_context_takeover"||n==="server_no_context_takeover"){if(r!==!0)throw new TypeError(`Invalid value for parameter "${n}": ${r}`)}else throw new Error(`Unknown parameter "${n}"`);o[n]=r})}),t}decompress(t,o,n){Xs.add(r=>{this._decompress(t,o,(s,i)=>{r(),n(s,i)})})}compress(t,o,n){Xs.add(r=>{this._compress(t,o,(s,i)=>{r(),n(s,i)})})}_decompress(t,o,n){let r=this._isServer?"client":"server";if(!this._inflate){let s=`${r}_max_window_bits`,i=typeof this.params[s]!="number"?rs.Z_DEFAULT_WINDOWBITS:this.params[s];this._inflate=rs.createInflateRaw({...this._options.zlibInflateOptions,windowBits:i}),this._inflate[qs]=this,this._inflate[gn]=0,this._inflate[Rn]=[],this._inflate.on("error",mf),this._inflate.on("data",bc)}this._inflate[Cr]=n,this._inflate.write(t),o&&this._inflate.write(df),this._inflate.flush(()=>{let s=this._inflate[_r];if(s){this._inflate.close(),this._inflate=null,n(s);return}let i=Sc.concat(this._inflate[Rn],this._inflate[gn]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[gn]=0,this._inflate[Rn]=[],o&&this.params[`${r}_no_context_takeover`]&&this._inflate.reset()),n(null,i)})}_compress(t,o,n){let r=this._isServer?"server":"client";if(!this._deflate){let s=`${r}_max_window_bits`,i=typeof this.params[s]!="number"?rs.Z_DEFAULT_WINDOWBITS:this.params[s];this._deflate=rs.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:i}),this._deflate[gn]=0,this._deflate[Rn]=[],this._deflate.on("data",ff)}this._deflate[Cr]=n,this._deflate.write(t),this._deflate.flush(rs.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let s=Sc.concat(this._deflate[Rn],this._deflate[gn]);o&&(s=new uf(s.buffer,s.byteOffset,s.length-4)),this._deflate[Cr]=null,this._deflate[gn]=0,this._deflate[Rn]=[],o&&this.params[`${r}_no_context_takeover`]&&this._deflate.reset(),n(null,s)})}};Cc.exports=ha;function ff(e){this[Rn].push(e),this[gn]+=e.length}function bc(e){if(this[gn]+=e.length,this[qs]._maxPayload<1||this[gn]<=this[qs]._maxPayload){this[Rn].push(e);return}this[_r]=new RangeError("Max payload size exceeded"),this[_r].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[_r][Ec]=1009,this.removeListener("data",bc),this.reset()}function mf(e){if(this[qs]._inflate=null,this[_r]){this[Cr](this[_r]);return}e[Ec]=1007,this[Cr](e)}});var Ir=po((Px,Ks)=>{"use strict";var{isUtf8:_c}=gt("buffer"),{hasBlob:hf}=pn(),pf=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function gf(e){return e>=1e3&&e<=1014&&e!==1004&&e!==1005&&e!==1006||e>=3e3&&e<=4999}function pa(e){let t=e.length,o=0;for(;o<t;)if((e[o]&128)===0)o++;else if((e[o]&224)===192){if(o+1===t||(e[o+1]&192)!==128||(e[o]&254)===192)return!1;o+=2}else if((e[o]&240)===224){if(o+2>=t||(e[o+1]&192)!==128||(e[o+2]&192)!==128||e[o]===224&&(e[o+1]&224)===128||e[o]===237&&(e[o+1]&224)===160)return!1;o+=3}else if((e[o]&248)===240){if(o+3>=t||(e[o+1]&192)!==128||(e[o+2]&192)!==128||(e[o+3]&192)!==128||e[o]===240&&(e[o+1]&240)===128||e[o]===244&&e[o+1]>143||e[o]>244)return!1;o+=4}else return!1;return!0}function xf(e){return hf&&typeof e=="object"&&typeof e.arrayBuffer=="function"&&typeof e.type=="string"&&typeof e.stream=="function"&&(e[Symbol.toStringTag]==="Blob"||e[Symbol.toStringTag]==="File")}Ks.exports={isBlob:xf,isValidStatusCode:gf,isValidUTF8:pa,tokenChars:pf};if(_c)Ks.exports.isValidUTF8=function(e){return e.length<24?pa(e):_c(e)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let e=gt("utf-8-validate");Ks.exports.isValidUTF8=function(t){return t.length<32?pa(t):e(t)}}catch{}});var Ta=po((Bx,Ac)=>{"use strict";var{Writable:yf}=gt("stream"),kc=kr(),{BINARY_TYPES:wf,EMPTY_BUFFER:Ic,kStatusCode:Tf,kWebSocket:Sf}=pn(),{concat:ga,toArrayBuffer:Ef,unmask:bf}=ns(),{isValidStatusCode:Cf,isValidUTF8:Oc}=Ir(),Vs=Buffer[Symbol.species],Lo=0,vc=1,Lc=2,Mc=3,xa=4,ya=5,zs=6,wa=class extends yf{constructor(t={}){super(),this._allowSynchronousEvents=t.allowSynchronousEvents!==void 0?t.allowSynchronousEvents:!0,this._binaryType=t.binaryType||wf[0],this._extensions=t.extensions||{},this._isServer=!!t.isServer,this._maxBufferedChunks=t.maxBufferedChunks|0,this._maxFragments=t.maxFragments|0,this._maxPayload=t.maxPayload|0,this._skipUTF8Validation=!!t.skipUTF8Validation,this[Sf]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=Lo}_write(t,o,n){if(this._opcode===8&&this._state==Lo)return n();if(this._maxBufferedChunks>0&&this._buffers.length>=this._maxBufferedChunks){n(this.createError(RangeError,"Too many buffered chunks",!1,1008,"WS_ERR_TOO_MANY_BUFFERED_PARTS"));return}this._bufferedBytes+=t.length,this._buffers.push(t),this.startLoop(n)}consume(t){if(this._bufferedBytes-=t,t===this._buffers[0].length)return this._buffers.shift();if(t<this._buffers[0].length){let n=this._buffers[0];return this._buffers[0]=new Vs(n.buffer,n.byteOffset+t,n.length-t),new Vs(n.buffer,n.byteOffset,t)}let o=Buffer.allocUnsafe(t);do{let n=this._buffers[0],r=o.length-t;t>=n.length?o.set(this._buffers.shift(),r):(o.set(new Uint8Array(n.buffer,n.byteOffset,t),r),this._buffers[0]=new Vs(n.buffer,n.byteOffset+t,n.length-t)),t-=n.length}while(t>0);return o}startLoop(t){this._loop=!0;do switch(this._state){case Lo:this.getInfo(t);break;case vc:this.getPayloadLength16(t);break;case Lc:this.getPayloadLength64(t);break;case Mc:this.getMask();break;case xa:this.getData(t);break;case ya:case zs:this._loop=!1;return}while(this._loop);this._errored||t()}getInfo(t){if(this._bufferedBytes<2){this._loop=!1;return}let o=this.consume(2);if((o[0]&48)!==0){let r=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");t(r);return}let n=(o[0]&64)===64;if(n&&!this._extensions[kc.extensionName]){let r=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");t(r);return}if(this._fin=(o[0]&128)===128,this._opcode=o[0]&15,this._payloadLength=o[1]&127,this._opcode===0){if(n){let r=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");t(r);return}if(!this._fragmented){let r=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");t(r);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let r=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");t(r);return}this._compressed=n}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let r=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");t(r);return}if(n){let r=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");t(r);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let r=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");t(r);return}}else{let r=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");t(r);return}if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(o[1]&128)===128,this._isServer){if(!this._masked){let r=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");t(r);return}}else if(this._masked){let r=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");t(r);return}this._payloadLength===126?this._state=vc:this._payloadLength===127?this._state=Lc:this.haveLength(t)}getPayloadLength16(t){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(t)}getPayloadLength64(t){if(this._bufferedBytes<8){this._loop=!1;return}let o=this.consume(8),n=o.readUInt32BE(0);if(n>Math.pow(2,21)-1){let r=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");t(r);return}this._payloadLength=n*Math.pow(2,32)+o.readUInt32BE(4),this.haveLength(t)}haveLength(t){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)){let o=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");t(o);return}this._masked?this._state=Mc:this._state=xa}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=xa}getData(t){let o=Ic;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}o=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0&&bf(o,this._mask)}if(this._opcode>7){this.controlMessage(o,t);return}if(this._compressed){this._state=ya,this.decompress(o,t);return}if(o.length){if(this._maxFragments>0&&this._fragments.length>=this._maxFragments){let n=this.createError(RangeError,"Too many message fragments",!1,1008,"WS_ERR_TOO_MANY_BUFFERED_PARTS");t(n);return}this._messageLength=this._totalPayloadLength,this._fragments.push(o)}this.dataMessage(t)}decompress(t,o){this._extensions[kc.extensionName].decompress(t,this._fin,(r,s)=>{if(r)return o(r);if(s.length){if(this._messageLength+=s.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let i=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");o(i);return}if(this._maxFragments>0&&this._fragments.length>=this._maxFragments){let i=this.createError(RangeError,"Too many message fragments",!1,1008,"WS_ERR_TOO_MANY_BUFFERED_PARTS");o(i);return}this._fragments.push(s)}this.dataMessage(o),this._state===Lo&&this.startLoop(o)})}dataMessage(t){if(!this._fin){this._state=Lo;return}let o=this._messageLength,n=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let r;this._binaryType==="nodebuffer"?r=ga(n,o):this._binaryType==="arraybuffer"?r=Ef(ga(n,o)):this._binaryType==="blob"?r=new Blob(n):r=n,this._allowSynchronousEvents?(this.emit("message",r,!0),this._state=Lo):(this._state=zs,setImmediate(()=>{this.emit("message",r,!0),this._state=Lo,this.startLoop(t)}))}else{let r=ga(n,o);if(!this._skipUTF8Validation&&!Oc(r)){let s=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");t(s);return}this._state===ya||this._allowSynchronousEvents?(this.emit("message",r,!1),this._state=Lo):(this._state=zs,setImmediate(()=>{this.emit("message",r,!1),this._state=Lo,this.startLoop(t)}))}}controlMessage(t,o){if(this._opcode===8){if(t.length===0)this._loop=!1,this.emit("conclude",1005,Ic),this.end();else{let n=t.readUInt16BE(0);if(!Cf(n)){let s=this.createError(RangeError,`invalid status code ${n}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");o(s);return}let r=new Vs(t.buffer,t.byteOffset+2,t.length-2);if(!this._skipUTF8Validation&&!Oc(r)){let s=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");o(s);return}this._loop=!1,this.emit("conclude",n,r),this.end()}this._state=Lo;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",t),this._state=Lo):(this._state=zs,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",t),this._state=Lo,this.startLoop(o)}))}createError(t,o,n,r,s){this._loop=!1,this._errored=!0;let i=new t(n?`Invalid WebSocket frame: ${o}`:o);return Error.captureStackTrace(i,this.createError),i.code=s,i[Tf]=r,i}};Ac.exports=wa});var ba=po(($x,Bc)=>{"use strict";var{Duplex:Fx}=gt("stream"),{randomFillSync:_f}=gt("crypto"),{types:{isUint8Array:kf}}=gt("util"),Dc=kr(),{EMPTY_BUFFER:If,kWebSocket:Of,NOOP:vf}=pn(),{isBlob:Or,isValidStatusCode:Lf}=Ir(),{mask:Pc,toBuffer:nr}=ns(),Mo=Symbol("kByteLength"),Mf=Buffer.alloc(4),Js=8*1024,rr,vr=Js,Ro=0,Af=1,Df=2,Sa=class e{constructor(t,o,n){this._extensions=o||{},n&&(this._generateMask=n,this._maskBuffer=Buffer.alloc(4)),this._socket=t,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=Ro,this.onerror=vf,this[Of]=void 0}static frame(t,o){let n,r=!1,s=2,i=!1;o.mask&&(n=o.maskBuffer||Mf,o.generateMask?o.generateMask(n):(vr===Js&&(rr===void 0&&(rr=Buffer.alloc(Js)),_f(rr,0,Js),vr=0),n[0]=rr[vr++],n[1]=rr[vr++],n[2]=rr[vr++],n[3]=rr[vr++]),i=(n[0]|n[1]|n[2]|n[3])===0,s=6);let c;typeof t=="string"?(!o.mask||i)&&o[Mo]!==void 0?c=o[Mo]:(t=Buffer.from(t),c=t.length):(c=t.length,r=o.mask&&o.readOnly&&!i);let d=c;c>=65536?(s+=8,d=127):c>125&&(s+=2,d=126);let u=Buffer.allocUnsafe(r?c+s:s);return u[0]=o.fin?o.opcode|128:o.opcode,o.rsv1&&(u[0]|=64),u[1]=d,d===126?u.writeUInt16BE(c,2):d===127&&(u[2]=u[3]=0,u.writeUIntBE(c,4,6)),o.mask?(u[1]|=128,u[s-4]=n[0],u[s-3]=n[1],u[s-2]=n[2],u[s-1]=n[3],i?[u,t]:r?(Pc(t,n,u,s,c),[u]):(Pc(t,n,t,0,c),[u,t])):[u,t]}close(t,o,n,r){let s;if(t===void 0)s=If;else{if(typeof t!="number"||!Lf(t))throw new TypeError("First argument must be a valid error code number");if(o===void 0||!o.length)s=Buffer.allocUnsafe(2),s.writeUInt16BE(t,0);else{let c=Buffer.byteLength(o);if(c>123)throw new RangeError("The message must not be greater than 123 bytes");if(s=Buffer.allocUnsafe(2+c),s.writeUInt16BE(t,0),typeof o=="string")s.write(o,2);else if(kf(o))s.set(o,2);else throw new TypeError("Second argument must be a string or a Uint8Array")}}let i={[Mo]:s.length,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==Ro?this.enqueue([this.dispatch,s,!1,i,r]):this.sendFrame(e.frame(s,i),r)}ping(t,o,n){let r,s;if(typeof t=="string"?(r=Buffer.byteLength(t),s=!1):Or(t)?(r=t.size,s=!1):(t=nr(t),r=t.length,s=nr.readOnly),r>125)throw new RangeError("The data size must not be greater than 125 bytes");let i={[Mo]:r,fin:!0,generateMask:this._generateMask,mask:o,maskBuffer:this._maskBuffer,opcode:9,readOnly:s,rsv1:!1};Or(t)?this._state!==Ro?this.enqueue([this.getBlobData,t,!1,i,n]):this.getBlobData(t,!1,i,n):this._state!==Ro?this.enqueue([this.dispatch,t,!1,i,n]):this.sendFrame(e.frame(t,i),n)}pong(t,o,n){let r,s;if(typeof t=="string"?(r=Buffer.byteLength(t),s=!1):Or(t)?(r=t.size,s=!1):(t=nr(t),r=t.length,s=nr.readOnly),r>125)throw new RangeError("The data size must not be greater than 125 bytes");let i={[Mo]:r,fin:!0,generateMask:this._generateMask,mask:o,maskBuffer:this._maskBuffer,opcode:10,readOnly:s,rsv1:!1};Or(t)?this._state!==Ro?this.enqueue([this.getBlobData,t,!1,i,n]):this.getBlobData(t,!1,i,n):this._state!==Ro?this.enqueue([this.dispatch,t,!1,i,n]):this.sendFrame(e.frame(t,i),n)}send(t,o,n){let r=this._extensions[Dc.extensionName],s=o.binary?2:1,i=o.compress,c,d;typeof t=="string"?(c=Buffer.byteLength(t),d=!1):Or(t)?(c=t.size,d=!1):(t=nr(t),c=t.length,d=nr.readOnly),this._firstFragment?(this._firstFragment=!1,i&&r&&r.params[r._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(i=c>=r._threshold),this._compress=i):(i=!1,s=0),o.fin&&(this._firstFragment=!0);let u={[Mo]:c,fin:o.fin,generateMask:this._generateMask,mask:o.mask,maskBuffer:this._maskBuffer,opcode:s,readOnly:d,rsv1:i};Or(t)?this._state!==Ro?this.enqueue([this.getBlobData,t,this._compress,u,n]):this.getBlobData(t,this._compress,u,n):this._state!==Ro?this.enqueue([this.dispatch,t,this._compress,u,n]):this.dispatch(t,this._compress,u,n)}getBlobData(t,o,n,r){this._bufferedBytes+=n[Mo],this._state=Df,t.arrayBuffer().then(s=>{if(this._socket.destroyed){let c=new Error("The socket was closed while the blob was being read");process.nextTick(Ea,this,c,r);return}this._bufferedBytes-=n[Mo];let i=nr(s);o?this.dispatch(i,o,n,r):(this._state=Ro,this.sendFrame(e.frame(i,n),r),this.dequeue())}).catch(s=>{process.nextTick(Pf,this,s,r)})}dispatch(t,o,n,r){if(!o){this.sendFrame(e.frame(t,n),r);return}let s=this._extensions[Dc.extensionName];this._bufferedBytes+=n[Mo],this._state=Af,s.compress(t,n.fin,(i,c)=>{if(this._socket.destroyed){let d=new Error("The socket was closed while data was being compressed");Ea(this,d,r);return}this._bufferedBytes-=n[Mo],this._state=Ro,n.readOnly=!1,this.sendFrame(e.frame(c,n),r),this.dequeue()})}dequeue(){for(;this._state===Ro&&this._queue.length;){let t=this._queue.shift();this._bufferedBytes-=t[3][Mo],Reflect.apply(t[0],this,t.slice(1))}}enqueue(t){this._bufferedBytes+=t[3][Mo],this._queue.push(t)}sendFrame(t,o){t.length===2?(this._socket.cork(),this._socket.write(t[0]),this._socket.write(t[1],o),this._socket.uncork()):this._socket.write(t[0],o)}};Bc.exports=Sa;function Ea(e,t,o){typeof o=="function"&&o(t);for(let n=0;n<e._queue.length;n++){let r=e._queue[n],s=r[r.length-1];typeof s=="function"&&s(t)}}function Pf(e,t,o){Ea(e,t,o),e.onerror(t)}});var Yc=po((Nx,jc)=>{"use strict";var{kForOnEventAttribute:ss,kListener:Ca}=pn(),Fc=Symbol("kCode"),$c=Symbol("kData"),Nc=Symbol("kError"),Uc=Symbol("kMessage"),Rc=Symbol("kReason"),Lr=Symbol("kTarget"),Wc=Symbol("kType"),Gc=Symbol("kWasClean"),xn=class{constructor(t){this[Lr]=null,this[Wc]=t}get target(){return this[Lr]}get type(){return this[Wc]}};Object.defineProperty(xn.prototype,"target",{enumerable:!0});Object.defineProperty(xn.prototype,"type",{enumerable:!0});var sr=class extends xn{constructor(t,o={}){super(t),this[Fc]=o.code===void 0?0:o.code,this[Rc]=o.reason===void 0?"":o.reason,this[Gc]=o.wasClean===void 0?!1:o.wasClean}get code(){return this[Fc]}get reason(){return this[Rc]}get wasClean(){return this[Gc]}};Object.defineProperty(sr.prototype,"code",{enumerable:!0});Object.defineProperty(sr.prototype,"reason",{enumerable:!0});Object.defineProperty(sr.prototype,"wasClean",{enumerable:!0});var Mr=class extends xn{constructor(t,o={}){super(t),this[Nc]=o.error===void 0?null:o.error,this[Uc]=o.message===void 0?"":o.message}get error(){return this[Nc]}get message(){return this[Uc]}};Object.defineProperty(Mr.prototype,"error",{enumerable:!0});Object.defineProperty(Mr.prototype,"message",{enumerable:!0});var is=class extends xn{constructor(t,o={}){super(t),this[$c]=o.data===void 0?null:o.data}get data(){return this[$c]}};Object.defineProperty(is.prototype,"data",{enumerable:!0});var Bf={addEventListener(e,t,o={}){for(let r of this.listeners(e))if(!o[ss]&&r[Ca]===t&&!r[ss])return;let n;if(e==="message")n=function(s,i){let c=new is("message",{data:i?s:s.toString()});c[Lr]=this,Qs(t,this,c)};else if(e==="close")n=function(s,i){let c=new sr("close",{code:s,reason:i.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});c[Lr]=this,Qs(t,this,c)};else if(e==="error")n=function(s){let i=new Mr("error",{error:s,message:s.message});i[Lr]=this,Qs(t,this,i)};else if(e==="open")n=function(){let s=new xn("open");s[Lr]=this,Qs(t,this,s)};else return;n[ss]=!!o[ss],n[Ca]=t,o.once?this.once(e,n):this.on(e,n)},removeEventListener(e,t){for(let o of this.listeners(e))if(o[Ca]===t&&!o[ss]){this.removeListener(e,o);break}}};jc.exports={CloseEvent:sr,ErrorEvent:Mr,Event:xn,EventTarget:Bf,MessageEvent:is};function Qs(e,t,o){typeof e=="object"&&e.handleEvent?e.handleEvent.call(e,o):e.call(t,o)}});var Zs=po((Ux,Hc)=>{"use strict";var{tokenChars:as}=Ir();function zo(e,t,o){e[t]===void 0?e[t]=[o]:e[t].push(o)}function Ff(e){let t=Object.create(null),o=Object.create(null),n=!1,r=!1,s=!1,i,c,d=-1,u=-1,f=-1,l=0;for(;l<e.length;l++)if(u=e.charCodeAt(l),i===void 0)if(f===-1&&as[u]===1)d===-1&&(d=l);else if(l!==0&&(u===32||u===9))f===-1&&d!==-1&&(f=l);else if(u===59||u===44){if(d===-1)throw new SyntaxError(`Unexpected character at index ${l}`);f===-1&&(f=l);let h=e.slice(d,f);u===44?(zo(t,h,o),o=Object.create(null)):i=h,d=f=-1}else throw new SyntaxError(`Unexpected character at index ${l}`);else if(c===void 0)if(f===-1&&as[u]===1)d===-1&&(d=l);else if(u===32||u===9)f===-1&&d!==-1&&(f=l);else if(u===59||u===44){if(d===-1)throw new SyntaxError(`Unexpected character at index ${l}`);f===-1&&(f=l),zo(o,e.slice(d,f),!0),u===44&&(zo(t,i,o),o=Object.create(null),i=void 0),d=f=-1}else if(u===61&&d!==-1&&f===-1)c=e.slice(d,l),d=f=-1;else throw new SyntaxError(`Unexpected character at index ${l}`);else if(r){if(as[u]!==1)throw new SyntaxError(`Unexpected character at index ${l}`);d===-1?d=l:n||(n=!0),r=!1}else if(s)if(as[u]===1)d===-1&&(d=l);else if(u===34&&d!==-1)s=!1,f=l;else if(u===92)r=!0;else throw new SyntaxError(`Unexpected character at index ${l}`);else if(u===34&&e.charCodeAt(l-1)===61)s=!0;else if(f===-1&&as[u]===1)d===-1&&(d=l);else if(d!==-1&&(u===32||u===9))f===-1&&(f=l);else if(u===59||u===44){if(d===-1)throw new SyntaxError(`Unexpected character at index ${l}`);f===-1&&(f=l);let h=e.slice(d,f);n&&(h=h.replace(/\\/g,""),n=!1),zo(o,c,h),u===44&&(zo(t,i,o),o=Object.create(null),i=void 0),c=void 0,d=f=-1}else throw new SyntaxError(`Unexpected character at index ${l}`);if(d===-1||s||u===32||u===9)throw new SyntaxError("Unexpected end of input");f===-1&&(f=l);let m=e.slice(d,f);return i===void 0?zo(t,m,o):(c===void 0?zo(o,m,!0):n?zo(o,c,m.replace(/\\/g,"")):zo(o,c,m),zo(t,i,o)),t}function $f(e){return Object.keys(e).map(t=>{let o=e[t];return Array.isArray(o)||(o=[o]),o.map(n=>[t].concat(Object.keys(n).map(r=>{let s=n[r];return Array.isArray(s)||(s=[s]),s.map(i=>i===!0?r:`${r}=${i}`).join("; ")})).join("; ")).join(", ")}).join(", ")}Hc.exports={format:$f,parse:Ff}});var ni=po((Gx,nu)=>{"use strict";var Nf=gt("events"),Uf=gt("https"),Rf=gt("http"),Kc=gt("net"),Wf=gt("tls"),{randomBytes:Gf,createHash:jf}=gt("crypto"),{Duplex:Rx,Readable:Wx}=gt("stream"),{URL:_a}=gt("url"),Wn=kr(),Yf=Ta(),Hf=ba(),{isBlob:Xf}=Ir(),{BINARY_TYPES:Xc,CLOSE_TIMEOUT:qf,EMPTY_BUFFER:ei,GUID:Kf,kForOnEventAttribute:ka,kListener:Vf,kStatusCode:zf,kWebSocket:Mt,NOOP:Vc}=pn(),{EventTarget:{addEventListener:Jf,removeEventListener:Qf}}=Yc(),{format:Zf,parse:em}=Zs(),{toBuffer:tm}=ns(),zc=Symbol("kAborted"),Ia=[8,13],yn=["CONNECTING","OPEN","CLOSING","CLOSED"],om=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,Qe=class e extends Nf{constructor(t,o,n){super(),this._binaryType=Xc[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=ei,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=e.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,t!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,o===void 0?o=[]:Array.isArray(o)||(typeof o=="object"&&o!==null?(n=o,o=[]):o=[o]),Jc(this,t,o,n)):(this._autoPong=n.autoPong,this._closeTimeout=n.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(t){Xc.includes(t)&&(this._binaryType=t,this._receiver&&(this._receiver._binaryType=t))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(t,o,n){let r=new Yf({allowSynchronousEvents:n.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxBufferedChunks:n.maxBufferedChunks,maxFragments:n.maxFragments,maxPayload:n.maxPayload,skipUTF8Validation:n.skipUTF8Validation}),s=new Hf(t,this._extensions,n.generateMask);this._receiver=r,this._sender=s,this._socket=t,r[Mt]=this,s[Mt]=this,t[Mt]=this,r.on("conclude",sm),r.on("drain",im),r.on("error",am),r.on("message",lm),r.on("ping",cm),r.on("pong",um),s.onerror=dm,t.setTimeout&&t.setTimeout(0),t.setNoDelay&&t.setNoDelay(),o.length>0&&t.unshift(o),t.on("close",eu),t.on("data",oi),t.on("end",tu),t.on("error",ou),this._readyState=e.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=e.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[Wn.extensionName]&&this._extensions[Wn.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=e.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(t,o){if(this.readyState!==e.CLOSED){if(this.readyState===e.CONNECTING){wo(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===e.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=e.CLOSING,this._sender.close(t,o,!this._isServer,n=>{n||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),Zc(this)}}pause(){this.readyState===e.CONNECTING||this.readyState===e.CLOSED||(this._paused=!0,this._socket.pause())}ping(t,o,n){if(this.readyState===e.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof t=="function"?(n=t,t=o=void 0):typeof o=="function"&&(n=o,o=void 0),typeof t=="number"&&(t=t.toString()),this.readyState!==e.OPEN){Oa(this,t,n);return}o===void 0&&(o=!this._isServer),this._sender.ping(t||ei,o,n)}pong(t,o,n){if(this.readyState===e.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof t=="function"?(n=t,t=o=void 0):typeof o=="function"&&(n=o,o=void 0),typeof t=="number"&&(t=t.toString()),this.readyState!==e.OPEN){Oa(this,t,n);return}o===void 0&&(o=!this._isServer),this._sender.pong(t||ei,o,n)}resume(){this.readyState===e.CONNECTING||this.readyState===e.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(t,o,n){if(this.readyState===e.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof o=="function"&&(n=o,o={}),typeof t=="number"&&(t=t.toString()),this.readyState!==e.OPEN){Oa(this,t,n);return}let r={binary:typeof t!="string",mask:!this._isServer,compress:!0,fin:!0,...o};this._extensions[Wn.extensionName]||(r.compress=!1),this._sender.send(t||ei,r,n)}terminate(){if(this.readyState!==e.CLOSED){if(this.readyState===e.CONNECTING){wo(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=e.CLOSING,this._socket.destroy())}}};Object.defineProperty(Qe,"CONNECTING",{enumerable:!0,value:yn.indexOf("CONNECTING")});Object.defineProperty(Qe.prototype,"CONNECTING",{enumerable:!0,value:yn.indexOf("CONNECTING")});Object.defineProperty(Qe,"OPEN",{enumerable:!0,value:yn.indexOf("OPEN")});Object.defineProperty(Qe.prototype,"OPEN",{enumerable:!0,value:yn.indexOf("OPEN")});Object.defineProperty(Qe,"CLOSING",{enumerable:!0,value:yn.indexOf("CLOSING")});Object.defineProperty(Qe.prototype,"CLOSING",{enumerable:!0,value:yn.indexOf("CLOSING")});Object.defineProperty(Qe,"CLOSED",{enumerable:!0,value:yn.indexOf("CLOSED")});Object.defineProperty(Qe.prototype,"CLOSED",{enumerable:!0,value:yn.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(e=>{Object.defineProperty(Qe.prototype,e,{enumerable:!0})});["open","error","close","message"].forEach(e=>{Object.defineProperty(Qe.prototype,`on${e}`,{enumerable:!0,get(){for(let t of this.listeners(e))if(t[ka])return t[Vf];return null},set(t){for(let o of this.listeners(e))if(o[ka]){this.removeListener(e,o);break}typeof t=="function"&&this.addEventListener(e,t,{[ka]:!0})}})});Qe.prototype.addEventListener=Jf;Qe.prototype.removeEventListener=Qf;nu.exports=Qe;function Jc(e,t,o,n){let r={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:qf,protocolVersion:Ia[1],maxBufferedChunks:1048576,maxFragments:131072,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...n,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(e._autoPong=r.autoPong,e._closeTimeout=r.closeTimeout,!Ia.includes(r.protocolVersion))throw new RangeError(`Unsupported protocol version: ${r.protocolVersion} (supported versions: ${Ia.join(", ")})`);let s;if(t instanceof _a)s=t;else try{s=new _a(t)}catch{throw new SyntaxError(`Invalid URL: ${t}`)}s.protocol==="http:"?s.protocol="ws:":s.protocol==="https:"&&(s.protocol="wss:"),e._url=s.href;let i=s.protocol==="wss:",c=s.protocol==="ws+unix:",d;if(s.protocol!=="ws:"&&!i&&!c?d=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:c&&!s.pathname?d="The URL's pathname is empty":s.hash&&(d="The URL contains a fragment identifier"),d){let x=new SyntaxError(d);if(e._redirects===0)throw x;ti(e,x);return}let u=i?443:80,f=Gf(16).toString("base64"),l=i?Uf.request:Rf.request,m=new Set,h;if(r.createConnection=r.createConnection||(i?rm:nm),r.defaultPort=r.defaultPort||u,r.port=s.port||u,r.host=s.hostname.startsWith("[")?s.hostname.slice(1,-1):s.hostname,r.headers={...r.headers,"Sec-WebSocket-Version":r.protocolVersion,"Sec-WebSocket-Key":f,Connection:"Upgrade",Upgrade:"websocket"},r.path=s.pathname+s.search,r.timeout=r.handshakeTimeout,r.perMessageDeflate&&(h=new Wn({...r.perMessageDeflate,isServer:!1,maxPayload:r.maxPayload}),r.headers["Sec-WebSocket-Extensions"]=Zf({[Wn.extensionName]:h.offer()})),o.length){for(let x of o){if(typeof x!="string"||!om.test(x)||m.has(x))throw new SyntaxError("An invalid or duplicated subprotocol was specified");m.add(x)}r.headers["Sec-WebSocket-Protocol"]=o.join(",")}if(r.origin&&(r.protocolVersion<13?r.headers["Sec-WebSocket-Origin"]=r.origin:r.headers.Origin=r.origin),(s.username||s.password)&&(r.auth=`${s.username}:${s.password}`),c){let x=r.path.split(":");r.socketPath=x[0],r.path=x[1]}let p;if(r.followRedirects){if(e._redirects===0){e._originalIpc=c,e._originalSecure=i,e._originalHostOrSocketPath=c?r.socketPath:s.host;let x=n&&n.headers;if(n={...n,headers:{}},x)for(let[w,S]of Object.entries(x))n.headers[w.toLowerCase()]=S}else if(e.listenerCount("redirect")===0){let x=c?e._originalIpc?r.socketPath===e._originalHostOrSocketPath:!1:e._originalIpc?!1:s.host===e._originalHostOrSocketPath;(!x||e._originalSecure&&!i)&&(delete r.headers.authorization,delete r.headers.cookie,x||delete r.headers.host,r.auth=void 0)}r.auth&&!n.headers.authorization&&(n.headers.authorization="Basic "+Buffer.from(r.auth).toString("base64")),p=e._req=l(r),e._redirects&&e.emit("redirect",e.url,p)}else p=e._req=l(r);r.timeout&&p.on("timeout",()=>{wo(e,p,"Opening handshake has timed out")}),p.on("error",x=>{p===null||p[zc]||(p=e._req=null,ti(e,x))}),p.on("response",x=>{let w=x.headers.location,S=x.statusCode;if(w&&r.followRedirects&&S>=300&&S<400){if(++e._redirects>r.maxRedirects){wo(e,p,"Maximum redirects exceeded");return}p.abort();let _;try{_=new _a(w,t)}catch{let N=new SyntaxError(`Invalid URL: ${w}`);ti(e,N);return}Jc(e,_,o,n)}else e.emit("unexpected-response",p,x)||wo(e,p,`Unexpected server response: ${x.statusCode}`)}),p.on("upgrade",(x,w,S)=>{if(e.emit("upgrade",x),e.readyState!==Qe.CONNECTING)return;p=e._req=null;let _=x.headers.upgrade;if(_===void 0||_.toLowerCase()!=="websocket"){wo(e,w,"Invalid Upgrade header");return}let L=jf("sha1").update(f+Kf).digest("base64");if(x.headers["sec-websocket-accept"]!==L){wo(e,w,"Invalid Sec-WebSocket-Accept header");return}let N=x.headers["sec-websocket-protocol"],j;if(N!==void 0?m.size?m.has(N)||(j="Server sent an invalid subprotocol"):j="Server sent a subprotocol but none was requested":m.size&&(j="Server sent no subprotocol"),j){wo(e,w,j);return}N&&(e._protocol=N);let P=x.headers["sec-websocket-extensions"];if(P!==void 0){if(!h){wo(e,w,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let k;try{k=em(P)}catch{wo(e,w,"Invalid Sec-WebSocket-Extensions header");return}let I=Object.keys(k);if(I.length!==1||I[0]!==Wn.extensionName){wo(e,w,"Server indicated an extension that was not requested");return}try{h.accept(k[Wn.extensionName])}catch{wo(e,w,"Invalid Sec-WebSocket-Extensions header");return}e._extensions[Wn.extensionName]=h}e.setSocket(w,S,{allowSynchronousEvents:r.allowSynchronousEvents,generateMask:r.generateMask,maxBufferedChunks:r.maxBufferedChunks,maxFragments:r.maxFragments,maxPayload:r.maxPayload,skipUTF8Validation:r.skipUTF8Validation})}),r.finishRequest?r.finishRequest(p,e):p.end()}function ti(e,t){e._readyState=Qe.CLOSING,e._errorEmitted=!0,e.emit("error",t),e.emitClose()}function nm(e){return e.path=e.socketPath,Kc.connect(e)}function rm(e){return e.path=void 0,!e.servername&&e.servername!==""&&(e.servername=Kc.isIP(e.host)?"":e.host),Wf.connect(e)}function wo(e,t,o){e._readyState=Qe.CLOSING;let n=new Error(o);Error.captureStackTrace(n,wo),t.setHeader?(t[zc]=!0,t.abort(),t.socket&&!t.socket.destroyed&&t.socket.destroy(),process.nextTick(ti,e,n)):(t.destroy(n),t.once("error",e.emit.bind(e,"error")),t.once("close",e.emitClose.bind(e)))}function Oa(e,t,o){if(t){let n=Xf(t)?t.size:tm(t).length;e._socket?e._sender._bufferedBytes+=n:e._bufferedAmount+=n}if(o){let n=new Error(`WebSocket is not open: readyState ${e.readyState} (${yn[e.readyState]})`);process.nextTick(o,n)}}function sm(e,t){let o=this[Mt];o._closeFrameReceived=!0,o._closeMessage=t,o._closeCode=e,o._socket[Mt]!==void 0&&(o._socket.removeListener("data",oi),process.nextTick(Qc,o._socket),e===1005?o.close():o.close(e,t))}function im(){let e=this[Mt];e.isPaused||e._socket.resume()}function am(e){let t=this[Mt];t._socket[Mt]!==void 0&&(t._socket.removeListener("data",oi),process.nextTick(Qc,t._socket),t.close(e[zf])),t._errorEmitted||(t._errorEmitted=!0,t.emit("error",e))}function qc(){this[Mt].emitClose()}function lm(e,t){this[Mt].emit("message",e,t)}function cm(e){let t=this[Mt];t._autoPong&&t.pong(e,!this._isServer,Vc),t.emit("ping",e)}function um(e){this[Mt].emit("pong",e)}function Qc(e){e.resume()}function dm(e){let t=this[Mt];t.readyState!==Qe.CLOSED&&(t.readyState===Qe.OPEN&&(t._readyState=Qe.CLOSING,Zc(t)),this._socket.end(),t._errorEmitted||(t._errorEmitted=!0,t.emit("error",e)))}function Zc(e){e._closeTimer=setTimeout(e._socket.destroy.bind(e._socket),e._closeTimeout)}function eu(){let e=this[Mt];if(this.removeListener("close",eu),this.removeListener("data",oi),this.removeListener("end",tu),e._readyState=Qe.CLOSING,!this._readableState.endEmitted&&!e._closeFrameReceived&&!e._receiver._writableState.errorEmitted&&this._readableState.length!==0){let t=this.read(this._readableState.length);e._receiver.write(t)}e._receiver.end(),this[Mt]=void 0,clearTimeout(e._closeTimer),e._receiver._writableState.finished||e._receiver._writableState.errorEmitted?e.emitClose():(e._receiver.on("error",qc),e._receiver.on("finish",qc))}function oi(e){this[Mt]._receiver.write(e)||this.pause()}function tu(){let e=this[Mt];e._readyState=Qe.CLOSING,e._receiver.end(),this.end()}function ou(){let e=this[Mt];this.removeListener("error",ou),this.on("error",Vc),e&&(e._readyState=Qe.CLOSING,this.destroy())}});var au=po((Yx,iu)=>{"use strict";var jx=ni(),{Duplex:fm}=gt("stream");function ru(e){e.emit("close")}function mm(){!this.destroyed&&this._writableState.finished&&this.destroy()}function su(e){this.removeListener("error",su),this.destroy(),this.listenerCount("error")===0&&this.emit("error",e)}function hm(e,t){let o=!0,n=new fm({...t,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return e.on("message",function(s,i){let c=!i&&n._readableState.objectMode?s.toString():s;n.push(c)||e.pause()}),e.once("error",function(s){n.destroyed||(o=!1,n.destroy(s))}),e.once("close",function(){n.destroyed||n.push(null)}),n._destroy=function(r,s){if(e.readyState===e.CLOSED){s(r),process.nextTick(ru,n);return}let i=!1;e.once("error",function(d){i=!0,s(d)}),e.once("close",function(){i||s(r),process.nextTick(ru,n)}),o&&e.terminate()},n._final=function(r){if(e.readyState===e.CONNECTING){e.once("open",function(){n._final(r)});return}e._socket!==null&&(e._socket._writableState.finished?(r(),n._readableState.endEmitted&&n.destroy()):(e._socket.once("finish",function(){r()}),e.close()))},n._read=function(){e.isPaused&&e.resume()},n._write=function(r,s,i){if(e.readyState===e.CONNECTING){e.once("open",function(){n._write(r,s,i)});return}e.send(r,i)},n.on("end",mm),n.on("error",su),n}iu.exports=hm});var va=po((Hx,lu)=>{"use strict";var{tokenChars:pm}=Ir();function gm(e){let t=new Set,o=-1,n=-1,r=0;for(r;r<e.length;r++){let i=e.charCodeAt(r);if(n===-1&&pm[i]===1)o===-1&&(o=r);else if(r!==0&&(i===32||i===9))n===-1&&o!==-1&&(n=r);else if(i===44){if(o===-1)throw new SyntaxError(`Unexpected character at index ${r}`);n===-1&&(n=r);let c=e.slice(o,n);if(t.has(c))throw new SyntaxError(`The "${c}" subprotocol is duplicated`);t.add(c),o=n=-1}else throw new SyntaxError(`Unexpected character at index ${r}`)}if(o===-1||n!==-1)throw new SyntaxError("Unexpected end of input");let s=e.slice(o,r);if(t.has(s))throw new SyntaxError(`The "${s}" subprotocol is duplicated`);return t.add(s),t}lu.exports={parse:gm}});var pu=po((qx,hu)=>{"use strict";var xm=gt("events"),ri=gt("http"),{Duplex:Xx}=gt("stream"),{createHash:ym}=gt("crypto"),cu=Zs(),ir=kr(),wm=va(),Tm=ni(),{CLOSE_TIMEOUT:Sm,GUID:Em,kWebSocket:bm}=pn(),Cm=/^[+/0-9A-Za-z]{22}==$/,uu=0,du=1,mu=2,La=class extends xm{constructor(t,o){if(super(),t={allowSynchronousEvents:!0,autoPong:!0,maxBufferedChunks:1024*1024,maxFragments:128*1024,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:Sm,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:Tm,...t},t.port==null&&!t.server&&!t.noServer||t.port!=null&&(t.server||t.noServer)||t.server&&t.noServer)throw new TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(t.port!=null?(this._server=ri.createServer((n,r)=>{let s=ri.STATUS_CODES[426];r.writeHead(426,{"Content-Length":s.length,"Content-Type":"text/plain"}),r.end(s)}),this._server.listen(t.port,t.host,t.backlog,o)):t.server&&(this._server=t.server),this._server){let n=this.emit.bind(this,"connection");this._removeListeners=_m(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(r,s,i)=>{this.handleUpgrade(r,s,i,n)}})}t.perMessageDeflate===!0&&(t.perMessageDeflate={}),t.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=t,this._state=uu}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(t){if(this._state===mu){t&&this.once("close",()=>{t(new Error("The server is not running"))}),process.nextTick(ls,this);return}if(t&&this.once("close",t),this._state!==du)if(this._state=du,this.options.noServer||this.options.server)this._server&&(this._removeListeners(),this._removeListeners=this._server=null),this.clients?this.clients.size?this._shouldEmitClose=!0:process.nextTick(ls,this):process.nextTick(ls,this);else{let o=this._server;this._removeListeners(),this._removeListeners=this._server=null,o.close(()=>{ls(this)})}}shouldHandle(t){if(this.options.path){let o=t.url.indexOf("?");if((o!==-1?t.url.slice(0,o):t.url)!==this.options.path)return!1}return!0}handleUpgrade(t,o,n,r){o.on("error",fu);let s=t.headers["sec-websocket-key"],i=t.headers.upgrade,c=+t.headers["sec-websocket-version"];if(t.method!=="GET"){ar(this,t,o,405,"Invalid HTTP method");return}if(i===void 0||i.toLowerCase()!=="websocket"){ar(this,t,o,400,"Invalid Upgrade header");return}if(s===void 0||!Cm.test(s)){ar(this,t,o,400,"Missing or invalid Sec-WebSocket-Key header");return}if(c!==13&&c!==8){ar(this,t,o,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(t)){cs(o,400);return}let d=t.headers["sec-websocket-protocol"],u=new Set;if(d!==void 0)try{u=wm.parse(d)}catch{ar(this,t,o,400,"Invalid Sec-WebSocket-Protocol header");return}let f=t.headers["sec-websocket-extensions"],l={};if(this.options.perMessageDeflate&&f!==void 0){let m=new ir({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let h=cu.parse(f);h[ir.extensionName]&&(m.accept(h[ir.extensionName]),l[ir.extensionName]=m)}catch{ar(this,t,o,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let m={origin:t.headers[`${c===8?"sec-websocket-origin":"origin"}`],secure:!!(t.socket.authorized||t.socket.encrypted),req:t};if(this.options.verifyClient.length===2){this.options.verifyClient(m,(h,p,x,w)=>{if(!h)return cs(o,p||401,x,w);this.completeUpgrade(l,s,u,t,o,n,r)});return}if(!this.options.verifyClient(m))return cs(o,401)}this.completeUpgrade(l,s,u,t,o,n,r)}completeUpgrade(t,o,n,r,s,i,c){if(!s.readable||!s.writable)return s.destroy();if(s[bm])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>uu)return cs(s,503);let u=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${ym("sha1").update(o+Em).digest("base64")}`],f=new this.options.WebSocket(null,void 0,this.options);if(n.size){let l=this.options.handleProtocols?this.options.handleProtocols(n,r):n.values().next().value;l&&(u.push(`Sec-WebSocket-Protocol: ${l}`),f._protocol=l)}if(t[ir.extensionName]){let l=t[ir.extensionName].params,m=cu.format({[ir.extensionName]:[l]});u.push(`Sec-WebSocket-Extensions: ${m}`),f._extensions=t}this.emit("headers",u,r),s.write(u.concat(`\r
|
|
371
|
-
`).
|
|
372
|
-
`))
|
|
373
|
-
|
|
374
|
-
`)+`\r
|
|
375
|
-
\r
|
|
376
|
-
`+o)}function ar(e,t,o,n,r,s){if(e.listenerCount("wsClientError")){let i=new Error(r);Error.captureStackTrace(i,ar),e.emit("wsClientError",i,o,t)}else cs(o,n,r,s)}});var km,Im,Om,vm,Lm,Mm,Ar,Am,gu=ne(()=>{km=vn(au(),1),Im=vn(Zs(),1),Om=vn(kr(),1),vm=vn(Ta(),1),Lm=vn(ba(),1),Mm=vn(va(),1),Ar=vn(ni(),1),Am=vn(pu(),1)});var co,Dr,Dm,Ma,Pr,xu,Aa,yu,Da,Br,us,wu,Pa,Tu,Ba=ne(()=>{gu();co=null,Dr=!1,Dm="ws://localhost:56832",Ma=[],Pr=null,xu="2.0.0",Aa=e=>{xu=e,yu()},yu=()=>{if(co||Dr)return;Dr=!0;let e=new Ar.default(Dm);e.on("open",()=>{for(co=e,Dr=!1,co.send(JSON.stringify({command:"version",version:xu}));Ma.length>0;)co.send(JSON.stringify(Ma.shift()))}),e.on("message",t=>{try{let o=JSON.parse(t.toString());o.command==="contextResponse"&&Pr&&(Pr(o.data),Pr=null)}catch{}}),e.on("error",()=>{Dr=!1,co=null}),e.on("close",()=>{Dr=!1,co=null})},Da=e=>{co&&co.readyState===Ar.default.OPEN?co.send(JSON.stringify(e)):(Ma.push(e),Dr||yu())},Br=()=>co!==null&&co.readyState===Ar.default.OPEN,us=()=>new Promise(e=>{if(!co||co.readyState!==Ar.default.OPEN){e({cursor_line:0,selected:0,manual_edits:"",file_focused:"none",opened_editors:[]});return}Pr=e,co.send(JSON.stringify({command:"requestContext"})),setTimeout(()=>{Pr===e&&(e({cursor_line:0,selected:0,manual_edits:"",file_focused:"none",opened_editors:[]}),Pr=null)},1e3)}),wu=e=>{Da({command:"open",filePath:e})},Pa=(e,t,o)=>{Da({command:"showDiff",filePath:e,originalContent:t,modifiedContent:o})},Tu=(e,t)=>{Da({command:"closeDiff",filePath:e,result:t})}});import{GoogleGenAI as Pm,ThinkingLevel as Jo,HarmBlockThreshold as Gn,HarmCategory as jn}from"@google/genai";import ke from"path";import Nt from"fs";var $r,Fr,Bm,Fa,Fm,bu,Na,Ua,Cu,Su,$m,_u,Nm,ku,Um,Eu,Ra,ds,$a,Rm,Iu,Ou=ne(async()=>{await Ll();Qr();Ws();await fc();No();eo();An();Vn();no();mn();Ba();$r=null,Fr=!1,Bm=["google/gemma-4-31b-it:free","moonshotai/kimi-k2.6:free","google/gemini-3.5-flash","qwen/qwen3.7-plus","minimax/minimax-m3","anthropic/claude-sonnet-4.5","anthropic/claude-opus-4.6","anthropic/claude-opus-4.8","openai/gpt-5.2-codex","openai/gpt-5.2-pro","openai/gpt-5.5-pro","moonshotai/kimi-k2.6","gemma-4-31b-it","gemini-2.5-flash","gemini-3-flash-preview","gemini-3.5-flash","gemini-3.1-flash-lite","gemini-3.1-pro-preview"],Fa=e=>{if(!e)return!1;let t=e.toLowerCase();return t.startsWith("gemini-")||t.startsWith("gemma-")?!0:Bm.some(o=>o.toLowerCase()===t)},Fm=e=>typeof e!="string"?e:e.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),bu=async(e,t,o=5,n=1e3)=>{for(let r=0;r<o;r++){try{let s=await fetch(e,t);if(s.ok||s.status!==429&&s.status<500)return s}catch(s){if(r===o-1)throw s}await new Promise(s=>setTimeout(s,n*Math.pow(2,r)))}return fetch(e,t)},Na=async function*(e,t,o,n,r,s,i){let c=[];n&&c.push({role:"system",content:n});for(let S of o){let _=S.role==="user"?"user":"assistant",L=[];if(Array.isArray(S.parts)){for(let N of S.parts)if(N.text)L.push({type:"text",text:N.text});else if(N.inlineData&&i){let j=N.inlineData.mimeType,P=N.inlineData.data;j.startsWith("image/")&&L.push({type:"image_url",image_url:{url:`data:${j};base64,${P}`}})}}else{let N=S.text||"";N&&L.push({type:"text",text:N})}c.push({role:_,content:L.length===1&&L[0].type==="text"?L[0].text:L})}let d={model:t,messages:c,stream:!0,stream_options:{include_usage:!0},temperature:s==="Flux"?1:1.4};if(r!=="Fast"){let S={Low:"high",Medium:"high",High:"high",xHigh:"max"};d.reasoning_effort=S[r]||"high",d.extra_body={thinking:{type:"enabled"}}}else d.extra_body={thinking:{type:"disabled"}};let u=await bu("https://api.deepseek.com/chat/completions",{method:"POST",headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json"},body:JSON.stringify(d)});if(!u.ok){let S=await u.json().catch(()=>({}));throw new Error(`DeepSeek Error (${u.status}): ${S.error?.message||u.statusText}`)}let f=u.body.getReader(),l=new TextDecoder,m="",h=[],p=null,x=Date.now(),w=!1;for(;;){let{done:S,value:_}=await f.read();if(S){w&&(h.length>0||p)&&(yield{candidates:h.length>0?[{content:{parts:h}}]:[],usageMetadata:p});break}m+=l.decode(_,{stream:!0});let L=m.split(`
|
|
377
|
-
`);m=L.pop();for(let N of L){let j=N.trim();if(!(!j||!j.startsWith("data: "))){if(j==="data: [DONE]")break;try{let P=JSON.parse(j.substring(6)),k=P.choices?.[0]?.delta,I=P.usage;if(I&&(p={totalTokenCount:I.total_tokens||I.prompt_tokens+I.completion_tokens,promptTokenCount:I.prompt_tokens||0,candidatesTokenCount:I.completion_tokens||0,cachedContentTokenCount:I.prompt_tokens_details?.cached_tokens||0,thoughtsTokenCount:I.completion_tokens_details?.reasoning_tokens||0},w=!0),k){let M=k.reasoning_content||null;M&&(h.push({text:M,thought:!0}),w=!0),k.content&&(h.push({text:k.content}),w=!0)}}catch{}}}Date.now()-x>=150&&w&&(yield{candidates:h.length>0?[{content:{parts:[...h]}}]:[],usageMetadata:p},h=[],x=Date.now(),w=!1)}},Ua=async function*(e,t,o,n,r,s,i){let c=[];n&&c.push({role:"system",content:n});for(let L of o){let N=L.role==="user"?"user":"assistant",j=[];if(Array.isArray(L.parts)){for(let P of L.parts)if(P.text)j.push({type:"text",text:P.text});else if(P.inlineData&&i){let k=P.inlineData.mimeType,I=P.inlineData.data;k.startsWith("image/")?j.push({type:"image_url",image_url:{url:`data:${k};base64,${I}`}}):j.push({type:"file",file:{filename:P.filename||"file",file_data:`data:${k};base64,${I}`}})}}else{let P=L.text||"";P&&j.push({type:"text",text:P})}c.push({role:N,content:j.length===1&&j[0].type==="text"?j[0].text:j})}let d={Low:"low",Medium:"medium",High:"high",xHigh:"high"},u={model:t,messages:c,stream:!0,temperature:s==="Flux"?1:1.4},f=d[r];f&&r!=="Fast"&&(u.reasoning_effort=f);let l=await bu("https://openrouter.ai/api/v1/chat/completions",{method:"POST",headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Title":"FluxFlow CLI","X-Cache":"true"},body:JSON.stringify(u)});if(!l.ok){let L=await l.json().catch(()=>({}));throw new Error(`OpenRouter Error (${l.status}): ${L.error?.message||l.statusText}`)}let m=l.body.getReader(),h=new TextDecoder,p="",x=[],w=null,S=Date.now(),_=!1;for(;;){let{done:L,value:N}=await m.read();if(L){_&&(x.length>0||w)&&(yield{candidates:x.length>0?[{content:{parts:x}}]:[],usageMetadata:w});break}p+=h.decode(N,{stream:!0});let j=p.split(`
|
|
378
|
-
`);p=j.pop();for(let P of j){let k=P.trim();if(!(!k||!k.startsWith("data: "))){if(k==="data: [DONE]")break;try{let I=JSON.parse(k.substring(6)),M=I.choices?.[0]?.delta,ee=I.usage;if(ee&&(w={totalTokenCount:ee.total_tokens||ee.prompt_tokens+ee.completion_tokens,promptTokenCount:ee.prompt_tokens||0,candidatesTokenCount:ee.completion_tokens||0,cachedContentTokenCount:ee.prompt_tokens_details?.cached_tokens||0,thoughtsTokenCount:ee.completion_tokens_details?.reasoning_tokens||0},_=!0),M){let z=M.reasoning||(M.reasoning_details?M.reasoning_details.map(de=>de.text).join(""):null);z&&(x.push({text:z,thought:!0}),_=!0),M.content&&(x.push({text:M.content}),_=!0)}}catch{}}}Date.now()-S>=150&&_&&(yield{candidates:x.length>0?[{content:{parts:[...x]}}]:[],usageMetadata:w},x=[],S=Date.now(),_=!1)}},Cu=()=>{Fr=!0},Su={write_file:"Writing",update_file:"Editing",read_folder:"Reading",view_file:"Reading",exec_command:"Executing Command",web_search:"Searching",web_scrape:"Reading",memory:"Updating Memory",search_keyword:"Searching",ask:"User Input",write_pdf:"Creating",write_docx:"Creating",generate_image:"Generating"},$m=(e,t)=>{try{let o=oe(t),n=o.path||o.targetFile||o.TargetFile||o.directory;return n?ke.basename(n.replace(/["']/g,"").replace(/\\/g,"/")):null}catch{return null}},_u=async(e,t,o,n,r={})=>{process.stdout.isTTY&&process.stdout.write("\x1B]0;Finalizing...\x07");let s=4*(1024*2),i=4*(1024*8),{onStatus:c,onMemoryUpdated:d,onBackgroundIncrement:u}=r,{profile:f,thinkingLevel:l,mode:m,janitorModel:h,chatId:p,systemSettings:x,sessionStats:w,aiProvider:S="Google",apiKey:_}=e,L=x?.memory!==!1,j=xe($t,[]).map(fe=>`- [${fe.id}]: ${fe.memory}`).join(`
|
|
379
|
-
`),P=n.slice(0,-1).filter(fe=>fe.text&&!fe.text.includes("[TOOL RESULT]")&&!fe.text.includes("OBSERVATION:")&&!fe.text.startsWith("[TERMINAL_RECORD]")&&!fe.isTerminalRecord&&!fe.isMeta&&!fe.isLogo&&!String(fe.id).startsWith("welcome")&&!String(fe.id).startsWith("logo")).slice(-14).map(fe=>{let ut=Fm(fe.text).replace(/\[tool:functions\..*?\]/g,"").replace(/(?:<think>|\[think\])[\s\S]*?(?:<\/think>|\[\/think\])/g,"").replace(/\[Prompted on:.*?\]/g,"").replace(/\[METADATA \(PRIORITY: DYNAMIC\)\] Time: ([^|\n]+)/g,(ze,ce)=>`[METADATA (PRIORITY: DYNAMIC)] Time: ${ce.replace(/:\d{2}/g,"")}`).replace(/\[turn: continue\]/g,"").replace(/\[turn: finish\]/g,"").replace(/\[TOOL RESULTS\]/g,"").replace(/\[tool results\]/g,"").replace(/\r?\n\r?\n/g,`
|
|
366
|
+
`,l=await Ac(r,null,{title:`FluxFlow_${i}`,creator:"FluxFlow CLI",description:"Generated by Agentic AI System",table:{row:{cantSplit:!0}},footer:!0,pageNumber:!0});return await Na.writeFile(n,l),`SUCCESS: Word document [${o}] generated successfully.
|
|
367
|
+
- Size: ${(l.length/1024).toFixed(1)} KB`}catch(i){return`ERROR: Failed to generate DOCX [${o}]: ${i.message}`}}});import ai from"fs/promises";import br from"path";async function Ra(e,o,t=e,n=1){if(n>12)return[];let i=[],r;try{r=await ai.readdir(e,{withFileTypes:!0})}catch{return[]}for(let l of r){let c=br.join(e,l.name),m=br.relative(t,c),d=m.split(br.sep).map(a=>a.toLowerCase());if(!o.some(a=>d.includes(a.toLowerCase())))if(l.isDirectory()){let a=await Ra(c,o,t,n+1);i=i.concat(a)}else l.isFile()&&i.push({fullPath:c,relativePath:m})}return i}var li,Wa=re(()=>{Jt();li=async e=>{let{keyword:o,file:t}=oe(e);if(!o)return'ERROR: Missing "keyword" argument.';let n=["node_modules",".git","dist",".next",".gemini",".exe",".dll",".png",".jpg",".jpeg",".gif",".zip",".tgz"],i=150;try{let r=[],l=process.cwd();if(t){let a=br.resolve(l,t);try{(await ai.stat(a)).isFile()&&r.push({fullPath:a,relativePath:br.relative(l,a)})}catch{return`ERROR: File not found: ${t}`}}else r=await Ra(l,n);let c=r.map(async a=>{try{let f=await ai.readFile(a.fullPath,"utf-8");if(f.includes("\0"))return[];let p=f.split(/\r?\n/),h=[];for(let T=0;T<p.length;T++)if(p[T].includes(o)){let w=a.relativePath.replace(/\\/g,"/");h.push(`${w} \u2192 ${T+1}`)}return h}catch{return[]}}),d=(await Promise.all(c)).flat().slice(0,i);if(typeof global.gc=="function"&&global.gc(),d.length===0)return`Found 0 matches for keyword: "${o}"${t?` in file: ${t}`:". Try to specify files"}`;let u=`Found ${d.length} matches:
|
|
368
|
+
|
|
369
|
+
`;return u+=d.join(`
|
|
370
|
+
`),u}catch(r){return`ERROR: ${r.message}`}}});import Cr from"fs-extra";import ci from"path";var tr,kr,Oc,Rn,di=re(()=>{eo();Do();tr={mode:"Flux",thinkingLevel:"Medium",aiProvider:"Google",activeModel:"gemma-4-31b-it",showFullThinking:!0,apiTier:"Free",quotas:{agentLimit:999999,backgroundLimit:999999,searchLimit:100,customModelId:"",customLimit:0},systemSettings:{memory:!0,compression:0,autoExec:!1,allowExternalAccess:!1,autoDeleteHistory:"7d",useExternalData:!1,externalDataPath:""},profileData:{name:null,nickname:null,instructions:null},imageSettings:{keyType:"Default",quality:"Low-High",apiKey:""}},kr=async()=>{let e={...tr};try{if(await Cr.exists(Qt)){let o=qr(Qt);if(o.imageSettings&&o.imageSettings.apiKey)try{let t=o.imageSettings.apiKey,{saveSecret:n}=await Promise.resolve().then(()=>(Sr(),es));await n("POLLINATIONS_API_KEY",t),o.imageSettings.apiKey="",Vr(Qt,o)}catch{}e={...tr,...o,quotas:{...tr.quotas,...o.quotas},systemSettings:{...tr.systemSettings,...o.systemSettings},profileData:{...tr.profileData,...o.profileData},imageSettings:{...tr.imageSettings,...o.imageSettings}}}}catch(o){console.error("Failed to load settings:",o)}try{let{getSecret:o}=await Promise.resolve().then(()=>(Sr(),es)),t=await o("POLLINATIONS_API_KEY");t&&(e.imageSettings.apiKey=t)}catch{}if(e.showFullThinking===!1){e.showFullThinking=!0;try{Vr(Qt,e)}catch{}}return e},Oc=async e=>{let{FLUXFLOW_DIR:o}=await Promise.resolve().then(()=>(eo(),ra)),t=["logs","secret"];for(let n of t){let i=ci.join(o,n),r=ci.join(e,n);try{await Cr.exists(i)&&(await Cr.ensureDir(r),await Cr.copy(i,r,{overwrite:!0}))}catch(l){console.error(`Migration failed for ${n}:`,l)}}},Rn=async e=>{try{let o=await kr();if(!o.systemSettings.useExternalData&&e.systemSettings?.useExternalData&&e.systemSettings?.externalDataPath&&await Oc(e.systemSettings.externalDataPath),e.imageSettings&&e.imageSettings.apiKey!==void 0){let{saveSecret:n,removeSecret:i}=await Promise.resolve().then(()=>(Sr(),es)),r=e.imageSettings.apiKey;r?await n("POLLINATIONS_API_KEY",r):await i("POLLINATIONS_API_KEY")}let t={...o,...e};return t.imageSettings&&(t.imageSettings={...t.imageSettings,apiKey:""}),await Cr.ensureDir(ci.dirname(Qt)),Vr(Qt,t),!0}catch(o){return console.error("Failed to save settings:",o),!1}}});var Ya,Ha=re(()=>{Ya="pk_oH8wkUdQaQK1cmst"});import Ga from"fs-extra";import ui from"path";var Lc,mi,ja=re(()=>{Jt();di();rs();Ha();nn();Lc=(e,o={})=>{try{if(e.length<8||e[0]!==137||e[1]!==80||e[2]!==78||e[3]!==71)return e;let t=[],n=[];for(let l=0;l<256;l++){let c=l;for(let m=0;m<8;m++)c&1?c=3988292384^c>>>1:c=c>>>1;n[l]=c}let i=l=>{let c=4294967295;for(let m=0;m<l.length;m++)c=n[(c^l[m])&255]^c>>>8;return(c^4294967295)>>>0},r=(l,c)=>{let m=Buffer.from(l,"ascii"),d=Buffer.from(c,"utf-8"),u=m.length+1+d.length,a=Buffer.alloc(8+u+4);a.writeUInt32BE(u,0),a.write("tEXt",4,"ascii"),m.copy(a,8),a[8+m.length]=0,d.copy(a,8+m.length+1);let f=i(a.subarray(4,8+u));return a.writeUInt32BE(f,8+u),a};for(let[l,c]of Object.entries(o))c!=null&&t.push(r(l,String(c)));if(t.length===0)return e;if(e.subarray(12,16).toString("ascii")==="IHDR"){let c=e.subarray(0,33),m=e.subarray(33);return Buffer.concat([c,...t,m])}return e}catch{return e}},mi=async(e,o={})=>{let t=oe(e),n=t.prompt||t.text,i=t.path||t.outputPath||t.output||"generated_image.png",r=t.ratio;if(!n)return'ERROR: Missing "prompt" argument for generate_image.';let l=["nsfw","naked","nudity","nude","porn","sex","xxx","erotic","gore","bloody","violence","abuse","suicide","murder","hentai","pedophile","rape"],c=n.toLowerCase();if(l.some(d=>c.includes(d)))return"ERROR: Prompt blocked by system safety filter (inappropriate or unsafe content detected).";try{let d=await kr();if(!await ba(d))return`ERROR: Insufficient Quota for selected quality. Either tell user reduce quality or wait for next refresh cycle (${(await ns()).nextResetMin||60}m).`;let a=d.imageSettings||{keyType:"Default",quality:"Low-High",apiKey:""},f=a.keyType==="Custom"&&a.apiKey?a.apiKey:Ya,h={Low:"flux","Low-High":"zimage",Medium:"gptimage","Medium-High":"gptimage",High:"qwen-image",Ultra:"gptimage-large",Premium:"nanobanana-pro"}[a.quality]||"zimage",T=1024,w=1024;if(r){let q=r.replace(/\s+/g,"");q==="16:9"?(T=1024,w=576):q==="9:16"?(T=576,w=1024):q==="4:3"?(T=1024,w=768):q==="3:4"?(T=768,w=1024):q==="1:1"&&(T=1024,w=1024)}let S=Math.floor(Math.random()*1e7),D=`https://gen.pollinations.ai/image/${encodeURIComponent(n)}?model=${h}&width=${T}&height=${w}&seed=${S}&enhance=true&reasoning=high&quality=high&negative=${encodeURIComponent("deformed, distorted, disfigured, poorly drawn, bad anatomy, wrong anatomy, extra limb, missing limb, floating limbs, disconnected limbs, mutation, mutated hands and fingers, blurry, low quality, low resolution, extra fingers, censored, watermarks, signatures")}`,U=await fetch(D,{method:"GET",headers:{Authorization:`Bearer ${f}`}});if(!U.ok){let q=U.status,Re="";try{Re=await U.text()}catch{}return q===402||Re.includes("Insufficient balance")||Re.includes("PAYMENT_REQUIRED")?"ERROR: Image Generation Currently unavailable. Try again later.":`ERROR: Image Generation failed with status [${q}]: ${Re||"Unknown API Error"}`}if((U.headers.get("content-type")||"").includes("application/json")){let q=await U.json();return q.status===402||q.error&&q.error.code==="PAYMENT_REQUIRED"?"ERROR: Image Generation Currently unavailable. Try again later.":`ERROR: Image Generation failed: ${q.error?.message||JSON.stringify(q)}`}let P=await U.arrayBuffer(),I=Buffer.from(P),A={Title:n,Description:"Generated via FluxFlow CLI",Software:"FluxFlow CLI",Author:"FluxFlow","Creation Time":new Date().toISOString(),Prompt:n,Model:`Fluxflow:${h}`,Ratio:r||"1:1",Seed:String(S)};I=Lc(I,A);let v=ui.resolve(process.cwd(),i);await Ga.ensureDir(ui.dirname(v)),await Et.recordFileChange(v),await Ga.writeFile(v,I),await Ca(d);let ee=ui.extname(i).toLowerCase(),ue={".jpg":"image/jpeg",".jpeg":"image/jpeg",".png":"image/png",".webp":"image/webp"}[ee]||"image/png";return o.isMultiModal!==!1?{text:`SUCCESS: Image successfully generated from prompt [${n}] and saved to [${i}]. Output attached to multimodal part`,binaryPart:{inlineData:{data:I.toString("base64"),mimeType:ue}}}:`SUCCESS: Image successfully generated from prompt [${n}] and saved to [${i}].`}catch(d){return`ERROR: Failed during image generation: ${d.message}`}}});var Ir,Xa=re(()=>{Do();eo();Ir=async(e,o={})=>{let t=r=>{let l=new RegExp(`${r}\\s*[:=]\\s*(["'])(.*?)\\1(?=\\s*[,)]|\\s+\\w+\\s*[:=]|$)`,"s"),c=e.match(l);return c?c[2].trim():null},n=t("id"),i=t("summary");if(!n||!i)return"ERROR: Missing 'id' or 'summary' for saveSummary tool.";try{let r=xe(mo,{}),l=xe(Uo,{});return l[n]=i,delete r[n],ke(Uo,l),ke(mo,r),`SUCCESS: Saved summary and purged raw memories for chat [${n}].`}catch(r){return`ERROR: Failed to save summary for chat [${n}]: ${r.message}`}}});var or,Ka=re(()=>{Do();eo();or=async(e,o={})=>{let n=(i=>{let r=new RegExp(`${i}\\s*[:=]\\s*(["'])(.*?)\\1(?=\\s*[,)]|\\s+\\w+\\s*[:=]|$)`,"s"),l=e.match(r);return l?l[2].trim():null})("id");if(!n)return"ERROR: Missing 'id' parameter for addMemScore tool.";try{let i=xe(Pt,[]),r=!1,l=[];for(let u of i)u.score===void 0&&(u.score=.5),u.id===n?(u.score=Math.min(2,u.score+.2),r=!0):(u.score*=.98,u.score<.05&&(u.score=0)),u.score=Math.round(u.score*1e5)/1e5,u.score>0&&l.push(u);if(ke(Pt,l),!r)return`WARNING: Memory ID [${n}] not found. Other memories decayed by -0.01.`;let c=l.find(u=>u.id===n),m=c?c.score.toFixed(2):"deleted (score <= 0)",d=i.length-l.length;return`SUCCESS: Adjusted memory scores. Target [${n}] is now ${m}.${d>0?` Purged ${d} decayed memories.`:""}`}catch(i){return`ERROR: Failed to adjust memory score for [${n}]: ${i.message}`}}});var Dc,as,qa=re(async()=>{ka();Ia();Ma();Aa();La();va();$a();await xr();Fa();Ba();_a();Ua();Wa();ja();Xa();Ka();Dc={web_search:qs,web_scrape:Vs,memory:zs,chat:Js,view_file:Qs,write_file:Zs,update_file:ti,exec_command:Os,read_folder:oi,write_pdf:ri,write_docx:ii,search_keyword:li,generate_image:mi,saveSummary:Ir,addMemScore:or,ask:ni,Ask:ni,WebSearch:qs,WebScrape:Vs,ReadFile:Qs,ReadFolder:oi,WriteFile:Zs,PatchFile:ti,WritePDF:ri,WriteDoc:ii,Run:Os,SearchKeyword:li,Memory:zs,Chat:Js,GenerateImage:mi,saveSumary:Ir,SaveSummary:Ir,SaveSumary:Ir,add_mem_score:or,AddMemScore:or,addMemoryScore:or,AddMemoryScore:or},as=async(e,o,t={})=>{if(t.mode&&t.mode.toLowerCase()==="flow"){let i=e.toLowerCase();if(!(i.startsWith("web")||i.startsWith("ask")))return`ERROR: Tool [${e}] is restricted in Flow mode.`}let n=Dc[e];if(!n)return`ERROR: Tool [${e}] not found in registry.`;try{return await n(o,t)}catch(i){return`ERROR: Execution failed for [${e}]: ${i.message}`}}});import{WebSocket as ls}from"ws";var io,nr,vc,fi,rr,Va,pi,za,hi,sr,Mr,Ja,gi,Qa,xi=re(()=>{io=null,nr=!1,vc="ws://localhost:56832",fi=[],rr=null,Va="2.0.0",pi=e=>{Va=e,za()},za=()=>{if(io||nr)return;nr=!0;let e=new ls(vc);e.on("open",()=>{for(io=e,nr=!1,io.send(JSON.stringify({command:"version",version:Va}));fi.length>0;)io.send(JSON.stringify(fi.shift()))}),e.on("message",o=>{try{let t=JSON.parse(o.toString());t.command==="contextResponse"&&rr&&(rr(t.data),rr=null)}catch{}}),e.on("error",()=>{nr=!1,io=null}),e.on("close",()=>{nr=!1,io=null})},hi=e=>{io&&io.readyState===ls.OPEN?io.send(JSON.stringify(e)):(fi.push(e),nr||za())},sr=()=>io!==null&&io.readyState===ls.OPEN,Mr=()=>new Promise(e=>{if(!io||io.readyState!==ls.OPEN){e({cursor_line:0,selected:0,manual_edits:"",file_focused:"none",opened_editors:[]});return}rr=e,io.send(JSON.stringify({command:"requestContext"})),setTimeout(()=>{rr===e&&(e({cursor_line:0,selected:0,manual_edits:"",file_focused:"none",opened_editors:[]}),rr=null)},1e3)}),Ja=e=>{hi({command:"open",filePath:e})},gi=(e,o,t)=>{hi({command:"showDiff",filePath:e,originalContent:o,modifiedContent:t})},Qa=(e,o)=>{hi({command:"closeDiff",filePath:e,result:o})}});import{GoogleGenAI as $c,ThinkingLevel as Yo,HarmBlockThreshold as In,HarmCategory as Mn}from"@google/genai";import Ie from"path";import Ft from"fs";var ar,ir,Pc,yi,Fc,tl,Ti,Si,ol,Za,Bc,nl,_c,rl,Nc,el,Ei,Ar,wi,Uc,sl,il=re(async()=>{await ma();Er();rs();await qa();Do();Jt();yn();$n();eo();nn();xi();ar=null,ir=!1,Pc=["google/gemma-4-31b-it:free","moonshotai/kimi-k2.6:free","google/gemini-3.5-flash","qwen/qwen3.7-plus","minimax/minimax-m3","anthropic/claude-sonnet-4.5","anthropic/claude-opus-4.6","anthropic/claude-opus-4.8","openai/gpt-5.2-codex","openai/gpt-5.2-pro","openai/gpt-5.5-pro","moonshotai/kimi-k2.6","gemma-4-31b-it","gemini-2.5-flash","gemini-3-flash-preview","gemini-3.5-flash","gemini-3.1-flash-lite","gemini-3.1-pro-preview"],yi=e=>{if(!e)return!1;let o=e.toLowerCase();return o.startsWith("gemini-")||o.startsWith("gemma-")?!0:Pc.some(t=>t.toLowerCase()===o)},Fc=e=>typeof e!="string"?e:e.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),tl=async(e,o,t=5,n=1e3)=>{for(let i=0;i<t;i++){try{let r=await fetch(e,o);if(r.ok||r.status!==429&&r.status<500)return r}catch(r){if(i===t-1)throw r}await new Promise(r=>setTimeout(r,n*Math.pow(2,i)))}return fetch(e,o)},Ti=async function*(e,o,t,n,i,r,l){let c=[];n&&c.push({role:"system",content:n});for(let S of t){let k=S.role==="user"?"user":"assistant",D=[];if(Array.isArray(S.parts)){for(let U of S.parts)if(U.text)D.push({type:"text",text:U.text});else if(U.inlineData&&l){let j=U.inlineData.mimeType,P=U.inlineData.data;j.startsWith("image/")&&D.push({type:"image_url",image_url:{url:`data:${j};base64,${P}`}})}}else{let U=S.text||"";U&&D.push({type:"text",text:U})}c.push({role:k,content:D.length===1&&D[0].type==="text"?D[0].text:D})}let m={model:o,messages:c,stream:!0,stream_options:{include_usage:!0},temperature:r==="Flux"?1:1.4};if(i!=="Fast"){let S={Low:"high",Medium:"high",High:"high",xHigh:"max"};m.reasoning_effort=S[i]||"high",m.extra_body={thinking:{type:"enabled"}}}else m.extra_body={thinking:{type:"disabled"}};let d=await tl("https://api.deepseek.com/chat/completions",{method:"POST",headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json"},body:JSON.stringify(m)});if(!d.ok){let S=await d.json().catch(()=>({}));throw new Error(`DeepSeek Error (${d.status}): ${S.error?.message||d.statusText}`)}let u=d.body.getReader(),a=new TextDecoder,f="",p=[],h=null,T=Date.now(),w=!1;for(;;){let{done:S,value:k}=await u.read();if(S){w&&(p.length>0||h)&&(yield{candidates:p.length>0?[{content:{parts:p}}]:[],usageMetadata:h});break}f+=a.decode(k,{stream:!0});let D=f.split(`
|
|
371
|
+
`);f=D.pop();for(let U of D){let j=U.trim();if(!(!j||!j.startsWith("data: "))){if(j==="data: [DONE]")break;try{let P=JSON.parse(j.substring(6)),I=P.choices?.[0]?.delta,A=P.usage;if(A&&(h={totalTokenCount:A.total_tokens||A.prompt_tokens+A.completion_tokens,promptTokenCount:A.prompt_tokens||0,candidatesTokenCount:A.completion_tokens||0,cachedContentTokenCount:A.prompt_tokens_details?.cached_tokens||0,thoughtsTokenCount:A.completion_tokens_details?.reasoning_tokens||0},w=!0),I){let v=I.reasoning_content||null;v&&(p.push({text:v,thought:!0}),w=!0),I.content&&(p.push({text:I.content}),w=!0)}}catch{}}}Date.now()-T>=150&&w&&(yield{candidates:p.length>0?[{content:{parts:[...p]}}]:[],usageMetadata:h},p=[],T=Date.now(),w=!1)}},Si=async function*(e,o,t,n,i,r,l){let c=[];n&&c.push({role:"system",content:n});for(let D of t){let U=D.role==="user"?"user":"assistant",j=[];if(Array.isArray(D.parts)){for(let P of D.parts)if(P.text)j.push({type:"text",text:P.text});else if(P.inlineData&&l){let I=P.inlineData.mimeType,A=P.inlineData.data;I.startsWith("image/")?j.push({type:"image_url",image_url:{url:`data:${I};base64,${A}`}}):j.push({type:"file",file:{filename:P.filename||"file",file_data:`data:${I};base64,${A}`}})}}else{let P=D.text||"";P&&j.push({type:"text",text:P})}c.push({role:U,content:j.length===1&&j[0].type==="text"?j[0].text:j})}let m={Low:"low",Medium:"medium",High:"high",xHigh:"high"},d={model:o,messages:c,stream:!0,temperature:r==="Flux"?1:1.4},u=m[i];u&&i!=="Fast"&&(d.reasoning_effort=u);let a=await tl("https://openrouter.ai/api/v1/chat/completions",{method:"POST",headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-Title":"FluxFlow CLI","X-Cache":"true"},body:JSON.stringify(d)});if(!a.ok){let D=await a.json().catch(()=>({}));throw new Error(`OpenRouter Error (${a.status}): ${D.error?.message||a.statusText}`)}let f=a.body.getReader(),p=new TextDecoder,h="",T=[],w=null,S=Date.now(),k=!1;for(;;){let{done:D,value:U}=await f.read();if(D){k&&(T.length>0||w)&&(yield{candidates:T.length>0?[{content:{parts:T}}]:[],usageMetadata:w});break}h+=p.decode(U,{stream:!0});let j=h.split(`
|
|
372
|
+
`);h=j.pop();for(let P of j){let I=P.trim();if(!(!I||!I.startsWith("data: "))){if(I==="data: [DONE]")break;try{let A=JSON.parse(I.substring(6)),v=A.choices?.[0]?.delta,ee=A.usage;if(ee&&(w={totalTokenCount:ee.total_tokens||ee.prompt_tokens+ee.completion_tokens,promptTokenCount:ee.prompt_tokens||0,candidatesTokenCount:ee.completion_tokens||0,cachedContentTokenCount:ee.prompt_tokens_details?.cached_tokens||0,thoughtsTokenCount:ee.completion_tokens_details?.reasoning_tokens||0},k=!0),v){let z=v.reasoning||(v.reasoning_details?v.reasoning_details.map(ue=>ue.text).join(""):null);z&&(T.push({text:z,thought:!0}),k=!0),v.content&&(T.push({text:v.content}),k=!0)}}catch{}}}Date.now()-S>=150&&k&&(yield{candidates:T.length>0?[{content:{parts:[...T]}}]:[],usageMetadata:w},T=[],S=Date.now(),k=!1)}},ol=()=>{ir=!0},Za={write_file:"Writing",update_file:"Editing",read_folder:"Reading",view_file:"Reading",exec_command:"Executing Command",web_search:"Searching",web_scrape:"Reading",memory:"Updating Memory",search_keyword:"Searching",ask:"User Input",write_pdf:"Creating",write_docx:"Creating",generate_image:"Generating"},Bc=(e,o)=>{try{let t=oe(o),n=t.path||t.targetFile||t.TargetFile||t.directory;return n?Ie.basename(n.replace(/["']/g,"").replace(/\\/g,"/")):null}catch{return null}},nl=async(e,o,t,n,i={})=>{process.stdout.isTTY&&process.stdout.write("\x1B]0;Finalizing...\x07");let r=4*(1024*2),l=4*(1024*8),{onStatus:c,onMemoryUpdated:m,onBackgroundIncrement:d}=i,{profile:u,thinkingLevel:a,mode:f,janitorModel:p,chatId:h,systemSettings:T,sessionStats:w,aiProvider:S="Google",apiKey:k}=e,D=T?.memory!==!1,j=xe(Pt,[]).map(me=>`- [${me.id}]: ${me.memory}`).join(`
|
|
373
|
+
`),P=n.slice(0,-1).filter(me=>me.text&&!me.text.includes("[TOOL RESULT]")&&!me.text.includes("OBSERVATION:")&&!me.text.startsWith("[TERMINAL_RECORD]")&&!me.isTerminalRecord&&!me.isMeta&&!me.isLogo&&!String(me.id).startsWith("welcome")&&!String(me.id).startsWith("logo")).slice(-14).map(me=>{let ct=Fc(me.text).replace(/\[tool:functions\..*?\]/g,"").replace(/(?:<think>|\[think\])[\s\S]*?(?:<\/think>|\[\/think\])/g,"").replace(/\[Prompted on:.*?\]/g,"").replace(/\[METADATA \(PRIORITY: DYNAMIC\)\] Time: ([^|\n]+)/g,(ze,ce)=>`[METADATA (PRIORITY: DYNAMIC)] Time: ${ce.replace(/:\d{2}/g,"")}`).replace(/\[turn: continue\]/g,"").replace(/\[turn: finish\]/g,"").replace(/\[TOOL RESULTS\]/g,"").replace(/\[tool results\]/g,"").replace(/\r?\n\r?\n/g,`
|
|
380
374
|
`).replace(/\n\n/g,`
|
|
381
|
-
`).replace(/\\n\\n/g,"").trim(),
|
|
382
|
-
... (truncated) ...`);let Pe=
|
|
383
|
-
... (truncated) ...`);let
|
|
375
|
+
`).replace(/\\n\\n/g,"").trim(),qe=me.role==="user"?r:l,Ve=ct.substring(0,qe);ct.length>qe&&(Ve+=`
|
|
376
|
+
... (truncated) ...`);let Pe=me.role==="user"?Ve.startsWith("[USER]")?"":"[USER]: ":Ve.startsWith("[AGENT]")?"":"[AGENT]: ";return{role:me.role==="user"?"user":"model",parts:[{text:`${Pe}${Ve}`}]}}),I=n.filter(me=>me.role==="user").length===1,A=o.includes("[TITLE-UPDATE]"),v=Math.random()<.8,ee=I||A||v,z=t.replace(/(?:<think>|\[think\])[\s\S]*?(?:<\/think>|\[\/think\])/g,"").trim(),ue=ua(j,D,ee),H=`${z.replace(/\[tool:functions\..*?\]/g,"").replace(/(?:<think>|\[think\])[\s\S]*?(?:<\/think>|\[\/think\])/g,"").replace(/\[Prompted on:.*?\]/g,"").replace(/\[turn: continue\]/g,"").replace(/\[turn: finish\]/g,"").replace(/\[TOOL RESULTS\]/g,"").replace(/\[tool results\]/g,"").substring(0,l)}`;H.length>l&&(H+=`
|
|
377
|
+
... (truncated) ...`);let q=o.replace(/\[Prompted on:.*?\]/g,"").trim();H=H.replace(/\r?\n\r?\n/g,`
|
|
384
378
|
`).replace(/\n\n/g,`
|
|
385
|
-
`).replace(/\\n\\n/g,"").trim();let Re=`[USER]: ${
|
|
386
|
-
${
|
|
379
|
+
`).replace(/\\n\\n/g,"").trim();let Re=`[USER]: ${q.substring(0,r)}
|
|
380
|
+
${q.length>r?`... (truncated) ...
|
|
387
381
|
|
|
388
382
|
`:""}
|
|
389
|
-
[AGENT (current turn)]: ${
|
|
383
|
+
[AGENT (current turn)]: ${H}`;P.push({role:"user",parts:[{text:Re}]});let Se="",Ke=0,nt=D?12:-1;for(;Ke<=nt;){process.stdout.isTTY&&process.stdout.write(`\x1B]0;Retrying Finalizing... (${Ke+1})...\x07`);try{if(!await Xs("background",e))return;let me="",ct=null;try{let Pe=new Promise((oo,Ae)=>setTimeout(()=>Ae(new Error("JANITOR_TIMEOUT")),6e4)),ze=(async()=>{if(S==="OpenRouter"){let gt=Si(k,"google/gemma-4-26b-a4b-it:free",P,ue,"Fast",f)[Symbol.asyncIterator](),Ko=await gt.next();return{iterator:gt,firstResult:Ko}}else if(S==="DeepSeek"){let Ae=Ti(k,"deepseek-chat",P,ue,"Fast",f,!1)[Symbol.asyncIterator](),gt=await Ae.next();return{iterator:Ae,firstResult:gt}}else{let Ae=(await ar.models.generateContentStream({model:p||"gemma-4-26b-a4b-it",contents:P,config:{systemInstruction:ue,maxOutputTokens:512,temperature:.3,safetySettings:[{category:Mn.HARM_CATEGORY_HARASSMENT,threshold:In.BLOCK_NONE},{category:Mn.HARM_CATEGORY_HATE_SPEECH,threshold:In.BLOCK_NONE},{category:Mn.HARM_CATEGORY_SEXUALLY_EXPLICIT,threshold:In.BLOCK_NONE},{category:Mn.HARM_CATEGORY_DANGEROUS_CONTENT,threshold:In.BLOCK_NONE}],thinkingConfig:{includeThoughts:!1,thinkingLevel:Yo.MINIMAL}}}))[Symbol.asyncIterator](),gt=await Ae.next();return{iterator:Ae,firstResult:gt}}})(),{iterator:ce,firstResult:ho}=await Promise.race([ze,Pe]),{value:go,done:ln}=ho;if(!ln&&go){let oo=go.candidates?.[0]?.content?.parts,Ae=oo?.[1]?.text||oo?.[0]?.text||(typeof go.text=="function"?go.text():"");Ae&&(me+=Ae),ct=go.usageMetadata;for await(let gt of{[Symbol.asyncIterator]:()=>ce}){let Ko=gt.candidates?.[0]?.content?.parts,qo=Ko?.[1]?.text||Ko?.[0]?.text||(typeof gt.text=="function"?gt.text():"");qo&&(me+=qo),ct=gt.usageMetadata}}}catch(Pe){throw Pe}if(me)Se=me,ct&&await po("tokens",ct.totalTokenCount||0);else throw new Error("No synthesis generated by Janitor.");d&&(d(),await Nn("background"));let qe=Ei(Se),Ve=!1;for(let Pe of qe){let ze=Pe.toolName;["addMemScore","add_mem_score","AddMemScore","addMemoryScore","AddMemoryScore"].includes(ze)&&(Ve=!0);let ce={chatId:h,sessionId:h,history:n},ho=await as(ze,Pe.args,ce);ze.toLowerCase()==="memory"&&(Pe.args.includes("action='user'")||Pe.args.includes('action="user"'))&&!ho.startsWith("ERROR")&&(m&&m(),process.stdout.isTTY&&process.stdout.write("\x1B]0;Memory Updated\x07"),await new Promise(ln=>setTimeout(ln,3e3)))}if(!Ve)try{let Pe=xe(Pt,[]);if(Pe.length>0){let ze=[];for(let ce of Pe)ce.score===void 0&&(ce.score=.5),ce.score*=.9995,ce.score<.05&&(ce.score=0),ce.score=Math.round(ce.score*1e5)/1e5,ce.score>0&&ze.push(ce);ke(Pt,ze)}}catch{}break}catch(me){Ke++;let ct=new Date().toLocaleString();process.stdout.isTTY&&process.stdout.write("\x1B]0;Finalizing Error\x07"),await new Promise(Pe=>setTimeout(Pe,1e3));let qe=Ie.join(Co,"janitor");if(Ft.existsSync(qe)||Ft.mkdirSync(qe,{recursive:!0}),Ft.appendFileSync(Ie.join(qe,"error.log"),`ERROR [Attempt ${Ke}/${nt+1}] [${ct}]: ${String(me)}
|
|
390
384
|
|
|
391
|
-
`),
|
|
385
|
+
`),Ke>nt)break;let Ve=Math.min(1e3*Math.pow(2,Ke-1),8e3);await new Promise(Pe=>setTimeout(Pe,Ve))}}if(Ke){let me=Ie.join(Co,"janitor");Ft.appendFileSync(Ie.join(me,"error.log"),`-----------------------------------------------------------------------------
|
|
392
386
|
|
|
393
387
|
|
|
394
|
-
`),
|
|
388
|
+
`),Ke>=nt&&(process.stdout.isTTY&&process.stdout.write(`\x1B]0;${D?"Finalizing Error":"Finalizing Skipped"}\x07`),await new Promise(ct=>setTimeout(ct,3e3)))}process.stdout.isTTY&&process.stdout.write("\x1B]0;FluxFlow | Idle\x07")},_c=e=>{let o=/\[\s*tool:functions\.([a-z0-9_]+)\s*\(/gi,t;for(;(t=o.exec(e))!==null;){let n=t.index+t[0].length-1,i=0,r=null,l=!1,c=!1;for(let m=n;m<e.length;m++){let d=e[m];if(!r&&(d==='"'||d==="'"||d==="`")?(r=d,l=!1):r&&d===r&&!l&&(r=null),!r&&(d==="("?i++:d===")"&&i--,i===0)){let u=m+1;for(;u<e.length&&/\s/.test(e[u]);)u++;if(u<e.length&&e[u]==="]"){c=!0,o.lastIndex=u+1;break}}d==="\\"?l=!l:l=!1}if(!c)return{inside:!0,toolName:t[1],startIndex:t.index,args:e.substring(t.index+t[0].length)}}return{inside:!1}},rl=(e,o=!0)=>{let t=/\[\s*tool:functions\.([a-z0-9_]+)\s*\(/gi,n="",i=0,r;for(;(r=t.exec(e))!==null;){let l=e.substring(i,r.index);n+=o?l.replace(/(?:<think>|\[think\])[\s\S]*?(?:<\/think>|\[\/think\]|$)/gi,""):l;let c=r.index+r[0].length-1,m=0,d=null,u=-1;for(let a=c;a<e.length;a++){let f=e[a];if(d){if(f===d){let p=0;for(let h=a-1;h>=0&&e[h]==="\\";h--)p++;p%2===0&&(d=null)}}else if(f==='"'||f==="'"||f==="`")d=f;else if(f==="(")m++;else if(f===")"&&(m--,m===0)){let p=a+1;for(;p<e.length&&/\s/.test(e[p]);)p++;if(p<e.length&&e[p]==="]"){u=p;break}}}if(u!==-1)n+="[tool:functions."+r[1]+"()]",i=u+1,t.lastIndex=i;else{n+="[tool:functions."+r[1]+"(",i=e.length;break}}return i<e.length&&(n+=o?e.substring(i).replace(/(?:<think>|\[think\])[\s\S]*?(?:<\/think>|\[\/think\]|$)/gi,""):e.substring(i)),n},Nc=(e,o,t)=>{let n=/\[\s*tool:functions\.([a-z0-9_]+)\s*\(/gi,i="",r=0,l;for(;(l=n.exec(e))!==null;){let c=e.substring(r,l.index);i+=c.replace(o,t);let m=l.index+l[0].length-1,d=0,u=null,a=-1;for(let f=m;f<e.length;f++){let p=e[f];if(u){if(p===u){let h=0;for(let T=f-1;T>=0&&e[T]==="\\";T--)h++;h%2===0&&(u=null)}}else if(p==='"'||p==="'"||p==="`")u=p;else if(p==="(")d++;else if(p===")"&&(d--,d===0)){let h=f+1;for(;h<e.length&&/\s/.test(e[h]);)h++;if(h<e.length&&e[h]==="]"){a=h;break}}}if(a!==-1)i+=e.substring(l.index,a+1),r=a+1,n.lastIndex=r;else{i+=e.substring(l.index),r=e.length;break}}return r<e.length&&(i+=e.substring(r).replace(o,t)),i},el=e=>rl(e,!0),Ei=e=>{let o=[],t=/\[\s*tool:functions\.([a-z0-9_]+)\s*\(/gi,n;for(;(n=t.exec(e))!==null;){let i=n[1],r=n.index+n[0].length-1,l=0,c=null,m=-1,d=-1;for(let u=r;u<e.length;u++){let a=e[u];if(c){if(a===c){let f=0;for(let p=u-1;p>=0&&e[p]==="\\";p--)f++;f%2===0&&(c=null)}}else if(a==='"'||a==="'"||a==="`")c=a;else if(a==="(")l++;else if(a===")"&&(l--,l===0)){d=u;let f=u+1;for(;f<e.length&&/\s/.test(e[f]);)f++;if(f<e.length&&e[f]==="]"){m=f;break}}}if(m!==-1){let u=e.substring(r+1,d),a=e.substring(n.index,m+1);o.push({fullMatch:a,toolName:i.trim(),args:u.trim()}),t.lastIndex=m+1}}return o},Ar=e=>e?(ar=new $c({apiKey:e}),ar):null,wi=async(e,o,t,n,i="Fast")=>{let{aiProvider:r="Google",apiKey:l,mode:c}=e,m="",d=null,u;r==="OpenRouter"?u=Si(l,o,t,n,i,c,!1):r==="DeepSeek"?u=Ti(l,o,t,n,i,c,!1):u=await ar.models.generateContentStream({model:o,contents:t,config:{systemInstruction:n,maxOutputTokens:2048,temperature:.3,thinkingConfig:{includeThoughts:!1,thinkingLevel:Yo.MINIMAL}}});for await(let a of u){if(a.candidates?.[0]?.content?.parts)for(let f of a.candidates[0].content.parts)f.text&&!f.thought&&(m+=f.text);a.usageMetadata&&(d=a.usageMetadata)}return{text:m,usageMetadata:d}},Uc=async(e,o)=>{try{let{aiProvider:t="Google"}=o,n=xe(mo,{});if(Object.values(n).flat().length<=2)return;let r=Object.keys(n).filter(f=>f!==e&&Array.isArray(n[f])&&n[f].length>2);if(r.length===0)return;let l=`You are a silent background process for the FluxFlow CLI Agent.
|
|
395
389
|
Your task is to summarize or merge temporary context memories from one or more past conversation sessions.
|
|
396
390
|
For each Chat ID provided, you must output a tool call to save the consolidated summary.
|
|
397
391
|
|
|
@@ -406,71 +400,71 @@ Guidelines:
|
|
|
406
400
|
|
|
407
401
|
Chats to process:
|
|
408
402
|
|
|
409
|
-
`,c=xe(
|
|
410
|
-
`),
|
|
411
|
-
`,
|
|
412
|
-
`,
|
|
413
|
-
${
|
|
403
|
+
`,c=xe(Uo,{});for(let f of r){let h=n[f].map(w=>`- ${w}`).join(`
|
|
404
|
+
`),T=c[f];l+=`[Chat ID: ${f}]
|
|
405
|
+
`,T?(l+=`- Existing Summary: "${T}"
|
|
406
|
+
`,l+=`-- New Memories to integrate:
|
|
407
|
+
${h}
|
|
414
408
|
|
|
415
|
-
`):
|
|
416
|
-
${
|
|
409
|
+
`):l+=`-- Individual Memories:
|
|
410
|
+
${h}
|
|
417
411
|
|
|
418
|
-
`}let
|
|
419
|
-
`)}},
|
|
412
|
+
`}let m=0,d=5,u=!1,a="gemma-4-26b-a4b-it";for(t==="OpenRouter"&&(a="google/gemma-4-26b-a4b-it:free"),t==="DeepSeek"&&(a="deepseek-v4-flash");m<=d&&!u;){m++;try{let f=await wi(o,a,l,null,"Fast"),p=f.text||"",h=Ei(p);if(h.length===0)throw new Error("No tool calls detected in synthesis response");for(let T of h){let w=T.toolName;["saveSummary","saveSumary","SaveSummary","SaveSumary"].includes(w)&&await as(w,T.args,{chatId:e})}f.usageMetadata&&await po("tokens",f.usageMetadata.totalTokenCount||0),u=!0}catch(f){if(m>=d)throw new Error(`Failed after ${d} attempts. Last error: ${f.message}`)}}}catch(t){let n=Ie.join(Co,"janitor");Ft.existsSync(n)||Ft.mkdirSync(n,{recursive:!0}),Ft.appendFileSync(Ie.join(n,"error.log"),`[${new Date().toLocaleString()}] Past memory batch consolidation error: ${t.message}
|
|
413
|
+
`)}},sl=async function*(e,o,t,n,i){let{profile:r,thinkingLevel:l,mode:c,janitorModel:m,chatId:d,systemSettings:u,sessionStats:a,aiProvider:f="Google",apiTier:p}=t,h=yi(e);if(!ar&&f==="Google")throw new Error("AI not initialized");let T=u?.memory!==!1,w=o[o.length-1].text,S=Ie.join(Zt,"chat-summaries.json"),k=!1,D=o.filter(I=>I.role==="user").length===1,U=w.includes("[TITLE-UPDATE]"),j=D||U,P=w.replace(/\[TITLE-UPDATE\]/g,"").trim();P=P.replace(/\s*\[Prompted on:.*?\]/g,"").trim(),await Et.startTransaction(d,P);try{let I=[...o.slice(0,-1)],A=252e3,v=254e3;if((f==="DeepSeek"||f==="Google"&&p==="Paid")&&(A=396e3,v=4e5),u?.compression===0&&(a?.tokens||0)>A){yield{type:"status_history",content:"Context Limit Reached. Condensing session history..."};let Q=xt=>xt.filter(ut=>(ut.role==="user"||ut.role==="agent"||ut.role==="system")&&!String(ut.id).startsWith("welcome")&&!ut.isMeta).map(ut=>`[${ut.text?.startsWith("[TOOL RESULT]")?"TOOL":ut.role==="agent"?"AGENT":"USER"}]: ${ut.text}`).join(`
|
|
420
414
|
|
|
421
|
-
`),
|
|
422
|
-
${
|
|
415
|
+
`),Me=async(xt,ut)=>{let We="You are an expert context condenser. Summarize the provided chat history (which may include previous summaries, user instructions, agent outputs, and tool results) into a detailed, coherent, and highly technical summary of 1000 to 1500 words. Focus on preserving the architectural decisions made, current system state, task progress, and critical code details. Under no circumstances exceed MAX 2000 words.",ie=ut?`Here is the previous summary:
|
|
416
|
+
${ut}
|
|
423
417
|
|
|
424
418
|
Here is the new conversation history:
|
|
425
|
-
${
|
|
419
|
+
${xt}
|
|
426
420
|
|
|
427
421
|
Provide a new consolidated summary of the entire session.`:`Here is the conversation history:
|
|
428
|
-
${
|
|
429
|
-
|
|
430
|
-
Provide a consolidated summary of the entire session.`,
|
|
431
|
-
`),Se=xe(
|
|
432
|
-
`),
|
|
433
|
-
`;let
|
|
434
|
-
`;return}ie.isDir?ae>
|
|
435
|
-
`:
|
|
436
|
-
`:(
|
|
437
|
-
`,
|
|
438
|
-
`}),
|
|
422
|
+
${xt}
|
|
423
|
+
|
|
424
|
+
Provide a consolidated summary of the entire session.`,Bt="gemma-4-26b-a4b-it";f==="OpenRouter"&&(Bt="google/gemma-4-26b-a4b-it:free"),f==="DeepSeek"&&(Bt="deepseek-v4-flash");let mt=0,xo=!1,yt=null;for(;mt<=3&&!xo;){mt++;try{yt=await wi(t,Bt,ie,We,"Fast"),xo=!0}catch{if(mt>3){if(f==="Google")try{return(await wi(t,"gemini-3.1-flash-lite",ie,We,"Fast")).text||""}catch{return""}return""}}}return yt&&yt.text||""},Oe=Q(I),ae=xe(S,{}),ye=ae[d]||{summary:"",historyLength:0};typeof ye=="string"&&(ye={summary:ye,historyLength:0});let fe=I.filter(xt=>(xt.role==="user"||xt.role==="agent"||xt.role==="system")&&!String(xt.id).startsWith("welcome")&&!xt.isMeta).length;ye.historyLength&&fe<ye.historyLength&&(ye.summary="",ye.historyLength=0,ae[d]=ye,ke(S,ae));let It=ye.summary||"",$o=await Me(Oe,It);$o&&(ye.summary=$o,ae[d]=ye,ke(S,ae),I=[],k=!0)}D&&T&&(yield{type:"status",content:"Condensing past chat memories..."},await Uc(d,t));let ee=xe(mo,{}),z=xe(Uo,{}),ue=Object.entries(ee).filter(([Q])=>Q!==d).flatMap(([Q,Me])=>Me),q=[...Object.entries(z).filter(([Q])=>Q!==d).slice(-20).map(([Q,Me])=>`[Chat Summary]: ${Me}`),...ue].map(Q=>`- ${Q}`).join(`
|
|
425
|
+
`),Se=xe(Pt,[]).map(Q=>`- ${Q.memory}`).join(`
|
|
426
|
+
`),Ke=(a?.tokens||0)>=24e3,nt=ca(q,Se,T,Ke),me=new Date().toLocaleString([],{year:"numeric",month:"numeric",day:"numeric",hour:"2-digit",minute:"2-digit",hour12:!0}),ct=[".git","node_modules",".gemini","dist","build",".next","out",".cache","bin","obj","vendor","venv",".idea",".gradle",".terraform","target","coverage",".vscode",".svn",".hg",".fslckout",".github",".gitlab",".circleci",".gitea",".gitee",".lerna",".changeset",".nx",".npm",".yarn",".pnpm-store",".expo",".nuxt",".svelte-kit",".docusaurus",".turbo",".vercel","bower_components",".netlify",".vuepress",".quasar",".output",".angular","jspm_packages",".parcel-cache",".rollup.cache",".rspack",".vitepress","__pycache__",".pytest_cache",".mypy_cache",".tox",".poetry","env","vhdl",".ipynb_checkpoints",".jupyter",".conda",".pdm-build",".bundle",".yardoc",".metadata","App_Data","ClientBin",".cargo",".rustc_info",".go","Godeps","_vendor",".rake_tasks","CMakefiles",".wakatime",".dart_tool",".fvm",".cocoapods","Pods",".pub-cache",".symlinks","DerivedData",".xcworkspace",".serverless",".aws",".gcloud",".azure",".kube",".vagrant",".docker","postgres-data","redis-data","mongo-data",".Spotlight-V100",".Trashes","$RECYCLE.BIN","System Volume Information",".DocumentRevisions-V100",".fseventsd","AppData","Application Data","Local","LocalLow","Roaming","$WinREAgent","$WINDOWS.~BT","$WINDOWS.~WS","scw","System32","SysWOW64",".AppleDouble",".AppleDB",".AppleDesktop","_CodeSignature",".cmio",".LSOverride",".localized",".TemporaryItems",".Trash",".Trash-0",".Trash-1000",".gvfs",".local",".config",".dbus",".fontconfig",".snap",".var",".lost+found","lost+found",".thumb",".thumbnails","EFI","boot","grub","logs","log",".nyc_output",".sonar",".ruff_cache"],qe=Q=>{try{return Ft.readdirSync(Q,{withFileTypes:!0})}catch{return[]}},Ve=(Q,Me={value:0},Oe=1)=>{if(Me.value>6200||Oe>7)return Me.value;let ae=qe(Q);for(let ye of ae){if(Me.value>6200)break;ct.includes(ye.name)||ye.isDirectory()&&(Me.value++,Ve(Ie.join(Q,ye.name),Me,Oe+1))}return Me.value},Pe=(Q,Me,Oe="",ae=1)=>{let ye=qe(Q),fe=Ie.sep;if(ye.length>100)return`${Oe}\u2514\u2500\u2500 ${Ie.basename(Q)}${fe} ...100+ files...
|
|
427
|
+
`;let It="",$o=ct,xt=ye.filter(ie=>!$o.includes(ie.name)),ut=ye.filter(ie=>$o.includes(ie.name)).map(ie=>ie.name).sort();xt.sort((ie,Bt)=>ie.isDirectory()&&!Bt.isDirectory()?-1:!ie.isDirectory()&&Bt.isDirectory()?1:ie.name.localeCompare(Bt.name));let We=[...xt.map(ie=>({name:ie.name,isDir:ie.isDirectory()})),...ut.map(ie=>({name:ie,isDir:!0,isCollapsed:!0}))];return We.forEach((ie,Bt)=>{let mt=Bt===We.length-1,xo=Ie.join(Q,ie.name),yt=mt?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ",cn=Oe+(mt?" ":"\u2502 ");if(ie.isCollapsed){It+=`${Oe}${yt}${ie.name}${fe}...
|
|
428
|
+
`;return}ie.isDir?ae>Me?It+=`${Oe}${yt}${ie.name}${fe} ...depth exceeded...
|
|
429
|
+
`:qe(xo).length>80?It+=`${Oe}${yt}${ie.name}${fe} ...80+ files...
|
|
430
|
+
`:(It+=`${Oe}${yt}${ie.name}${fe}
|
|
431
|
+
`,It+=Pe(xo,Me,cn,ae+1)):It+=`${Oe}${yt}${ie.name}
|
|
432
|
+
`}),It};yield{type:"status",content:"Gathering Context..."},await new Promise(Q=>setTimeout(Q,500));let ze=Ve(process.cwd()),ce=12;ze>4096?ce=1:ze>3072?ce=2:ze>2048?ce=3:ze>1024?ce=4:ze>512?ce=6:ze>256?ce=7:ze>128?ce=8:ze>64?ce=9:ze>32&&(ce=10);let ho=xe(Jr,{}),go=ho[d],ln=go?go!==process.cwd():!1;ho[d]=process.cwd(),ke(Jr,ho);let oo=xe(S,{}),Ae=oo[d]||{summary:"",historyLength:0};typeof Ae=="string"&&(Ae={summary:Ae,historyLength:0});let gt=o.filter(Q=>(Q.role==="user"||Q.role==="agent"||Q.role==="system")&&!String(Q.id).startsWith("welcome")&&!Q.isMeta).length;Ae.historyLength&><Ae.historyLength&&(Ae.summary="",Ae.historyLength=0,oo[d]=Ae,ke(S,oo));let Ko=typeof Ae=="object"?Ae.summary||"":Ae||"",qo=Ko?`
|
|
439
433
|
|
|
440
434
|
--- CONTEXT SUMMARY OF PREVIOUS TURNS (PRIORITY: HIGH) ---
|
|
441
|
-
${
|
|
435
|
+
${Ko}
|
|
442
436
|
|
|
443
|
-
`:"",
|
|
444
|
-
`+Pe(process.cwd(),ce),
|
|
437
|
+
`:"",Wt=process.cwd()+`
|
|
438
|
+
`+Pe(process.cwd(),ce),Y=await Mr(),rt="";if(Y.file_focused!=="none"){let Q=Ie.relative(process.cwd(),Y.file_focused),Me=(Y.opened_editors||[]).map(Oe=>{let ae=Ie.relative(process.cwd(),Oe);return ae.startsWith("..")?`[External] ${Ie.basename(Oe)}`:ae});if(rt=`**IDE CONTEXT**
|
|
445
439
|
Focused File: ${Q}
|
|
446
|
-
Cursor Line: ${
|
|
447
|
-
`,
|
|
448
|
-
`),
|
|
449
|
-
`);
|
|
440
|
+
Cursor Line: ${Y.cursor_line}
|
|
441
|
+
`,Y.selected&&(rt+=`Current Selection: "${Y.selected}"
|
|
442
|
+
`),Y.manual_edits){let Oe=Y.manual_edits,ae=4*2048,ye=300,fe=Oe.split(`
|
|
443
|
+
`);fe.length>ye&&(Oe=fe.slice(0,ye).join(`
|
|
450
444
|
`)+`
|
|
451
|
-
... (${
|
|
452
|
-
... (Character limit reached, truncated)`),
|
|
453
|
-
${
|
|
454
|
-
`}
|
|
455
|
-
CWD: ${process.cwd()}${
|
|
445
|
+
... (${fe.length-ye} more lines truncated)`),Oe.length>ae&&(Oe=Oe.substring(0,ae)+`
|
|
446
|
+
... (Character limit reached, truncated)`),rt+=`Recent Manual Edits:
|
|
447
|
+
${Oe}
|
|
448
|
+
`}Me.length>0&&(rt+=`All Opened Editors: ${Me.join(", ")}`)}let Lr=`[SYSTEM METADATA (PRIORITY: DYNAMIC), Chat Context >> Metadata] Time: ${me}
|
|
449
|
+
CWD: ${process.cwd()}${ln?` (WARNING: CWD Mismatch! Previous Path: ${go})`:""}
|
|
456
450
|
**DIRECTORY STRUCTURE**
|
|
457
|
-
${
|
|
458
|
-
${
|
|
459
|
-
${st}
|
|
451
|
+
${Wt}
|
|
452
|
+
${qo}
|
|
460
453
|
${rt}
|
|
461
|
-
${
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
[
|
|
467
|
-
[SYSTEM]
|
|
468
|
-
|
|
454
|
+
${nt}
|
|
455
|
+
${l!="Fast"&&f==="Google"?`${e.toLowerCase().startsWith("gemma")?`[SYSTEM] **STRICTLY FOLLOW THINKING POLICY AS CRITICAL PRIORITY. DO NOT START A RESPONSE WITHOUT <think> ... </think>**
|
|
456
|
+
`:""}`:""}[USER] ${P.replace(/\s*\[Prompted on:.*?\]/g,"").trim()}`.trim();I.push({role:"user",text:Lr});let Yt=null,Yn=c==="Flux"?70:7,dt=16;yield{type:"status",content:"Connecting..."},ir=!1;let ko=[],Ht=!1;I.forEach(Q=>{Q.text&&Q.role==="agent"&&(Q.text=Q.text.replace(/(?:<(think|thought)>|\[(think|thought)\])[\s\S]*?(?:<\/(think|thought)>|\[\/(think|thought)\])/gi,"").trim())});for(let Q=0;Q<=Yn;Q++){if(u?.compression===0&&(a?.tokens||0)>v&&(I=xa(I,6)),Q>0&&(yield{type:"status",content:"Processed. Reconnecting..."}),ir){yield{type:"status",content:"Termination Signal Received."},await new Promise(ne=>setTimeout(ne,1500));break}if(n){let ne=await n();ne&&(I.length>0&&I[I.length-1].role==="user"?I[I.length-1].text+=`
|
|
457
|
+
|
|
458
|
+
[STEERING HINT]: ${ne}`:I.push({role:"user",text:`${l!="Fast"&&f==="Google"?`${e.toLowerCase().startsWith("gemma")?`[SYSTEM] **STRICTLY FOLLOW THINKING POLICY AS CRITICAL PRIORITY. DO NOT START A RESPONSE WITHOUT <think> ... </think>**
|
|
459
|
+
`:""}`:""}[STEERING HINT]: ${ne}`}),yield{type:"status",content:"Steering Hint Injected."})}let Me,Oe=!1,ae=1,ye=1,fe="",It=null,$o=null,xt=null,ut=0,We=[],ie=0,Bt=!1,mt=!1,xo=!1,yt=!1,cn=!0,Ze="",st="",_t=!1,Gt=e,Vo="";for(;ae<=dt&&ye<=dt&&!Oe&&!ir;){let ne=!1;try{fe="",cn&&(process.stdout.isTTY&&process.stdout.write("\x1B]0;Working...\x07"),yield{type:"turn_reset",content:!0},yield{type:"spinner",content:!0},cn=!1,ye===1&&(Ze=""));let Be=I.filter(Ee=>(Ee.role==="user"||Ee.role==="agent"||Ee.role==="system")&&!String(Ee.id).startsWith("welcome")&&!Ee.isMeta&&!Ee.isTerminalRecord&&!(Ee.text&&Ee.text.startsWith("[TERMINAL_RECORD]"))).map((Ee,Je,lo)=>{let Fe=[{text:Ee.text}];return Ee.binaryPart&&yi(Gt)&&lo.slice(Je+1).filter(dn=>dn.role==="user"&&!dn.text?.startsWith("[TOOL RESULT]")).length<=2&&Fe.push(Ee.binaryPart),{role:Ee.role==="user"||Ee.role==="system"?"user":"model",parts:Fe}});if(!await Xs("agent",t))throw new Error("Error: Quota Exausted for Agent");Gt=e,f==="DeepSeek"&&l==="Fast"&&(Gt="deepseek-chat"),ae===dt-1?(Gt=f==="DeepSeek"?"deepseek-v4-flash":"gemini-3-flash-preview",yield{type:"model_update",content:"Trying with fallback model"}):ae===dt?(Gt=f==="DeepSeek"?"deepseek-v4-pro":"gemini-3.5-flash",yield{type:"model_update",content:"Trying with fallback model"}):ae>12&&ae<dt-2&&t.apiKey!=="custom"?(Gt="gemma-4-31b-it",yield{type:"model_update",content:"Trying with fallback Gemma Model"}):ae>0&&(yield{type:"model_update",content:null}),Vo=da(r,(Gt||"gemma").toLowerCase().startsWith("gemma")?l:"GEM",c,u,T,D,f,h);let _e=e&&e.toLowerCase().startsWith("gemma"),it=Be[Be.length-1];if(_e){let Ee=`
|
|
460
|
+
[SYSTEM] Tool result received. Analyze output and proceed with your turn${l!="Fast"&&f==="Google"?". **STRICTLY MAINTAIN THINKING POLICY. DO NOT START A RESPONSE WITHOUT <think> ... </think>}**":""}`;it&&it.role==="user"&&it.parts?.[0]?.text?.startsWith("[TOOL RESULT]")&&(it.parts[0].text+=Ee)}if(_e){let Ee=Math.floor(Yn*(c==="Flux"?.98:.7)),Je=Q+1;Je>=Ee&&it&&it.parts?.[0]&&(it.parts[0].text+=`
|
|
461
|
+
[SYSTEM] WARNING, Turn Limit Impending: Step ${Je}/${Yn}. Wrap up quickly/prompt user to continue & use [turn:finish] quickly.`)}let wt=Be;f==="OpenRouter"?Me=Si(t.apiKey,Gt,wt,Vo,l,c,h):f==="DeepSeek"?Me=Ti(t.apiKey,Gt,wt,Vo,l,c,h):Me=await ar.models.generateContentStream({model:Gt||"gemma-4-31b-it",contents:wt,config:{systemInstruction:Vo,temperature:c==="Flux"?1:1.4,maxOutputTokens:32768,mediaResolution:"MEDIA_RESOLUTION_MEDIUM",safetySettings:[{category:Mn.HARM_CATEGORY_HARASSMENT,threshold:In.BLOCK_NONE},{category:Mn.HARM_CATEGORY_HATE_SPEECH,threshold:In.BLOCK_NONE},{category:Mn.HARM_CATEGORY_SEXUALLY_EXPLICIT,threshold:In.BLOCK_NONE},{category:Mn.HARM_CATEGORY_DANGEROUS_CONTENT,threshold:In.BLOCK_NONE}],thinkingConfig:(()=>{let Ee=(Gt||"").toLowerCase(),Je=Ee.includes("gemma-4")||Ee.startsWith("gemma"),lo=Ee.includes("gemini-3");if(Je||lo)return Je?{includeThoughts:!1,thinkingLevel:Yo.MINIMAL}:{includeThoughts:!0,thinkingLevel:{Fast:Ee.includes("pro")?Yo.LOW:Yo.MINIMAL,Low:Yo.LOW,Medium:Yo.MEDIUM,High:Yo.HIGH,xHigh:Yo.HIGH}[l]||Yo.MEDIUM};{let Fe={Fast:0,Low:512,Medium:2048,High:16384,xHigh:24576}[l]||2048;return Fe===0?{includeThoughts:!1}:{includeThoughts:!0,thinkingBudget:Fe}}})()}}),fe="",It=null,xt=null,We=[],ie=0,yield{type:"model_update",content:null},yield{type:"status",content:"Working..."},st="",_t=Ze.length>0;let et="",jt=Date.now();for await(let Ee of Me){if(ir){yield{type:"status",content:"Termination Signal Received."},await new Promise(Fe=>setTimeout(Fe,1500));break}let Je="",lo=Ee.candidates?.[0]?.content?.parts;if(lo&&lo.length>0)for(let Fe of lo)Fe.thought?Fe.text&&(ne||(Je+="<think>",ne=!0),Je+=Fe.text):Fe.text&&(ne&&(Je+="</think>",ne=!1),Je+=Fe.text);else{let Fe=Ee.text||"";Fe&&ne&&(Je+="</think>",ne=!1),Je+=Fe}if(Je){if(_t){if(st+=Je,st.length>=30){let V=0,Ye=Math.min(Ze.length,st.length);for(let G=Ye;G>0;G--)if(Ze.endsWith(st.substring(0,G))){V=G;break}let Tt=st.substring(V);if(Tt){let Ge=/(?:<(think|thought)>|\[(think|thought)\])(?:(?!(?:<\/(?:think|thought)>|\[\/(?:think|thought)\]))[\s\S])*$/i.test(Ze)?Tt.replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])\s*/gi,""):Tt.replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])[\s\S]*?(?:<\/(think|thought)>|\[\/(think|thought)\])\s*/gi,"").replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])\s*/gi,"");Ge&&(fe+=Ge,f==="Google"?et+=Ge:yield{type:"text",content:Ge})}_t=!1,st=""}continue}else fe+=Je,f==="Google"?et+=Je:yield{type:"text",content:Je};let Fe=el(fe),wo=_c(fe);if(wo.inside){xt||(xt=Date.now());let V=wo.toolName,Tt={Ask:"ask",WebSearch:"web_search",WebScrape:"web_scrape",ReadFile:"view_file",ReadFolder:"read_folder",WriteFile:"write_file",PatchFile:"update_file",WritePDF:"write_pdf",WriteDoc:"write_docx",Run:"exec_command",SearchKeyword:"search_keyword",Memory:"memory",Chat:"chat",chat:"chat",GenerateImage:"generate_image",generate_image:"generate_image"}[V]||V,G=wo.args||"",Ge=null;if(["write_file","update_file","view_file","read_folder","write_pdf","write_docx","search_keyword","generate_image"].includes(Tt)){let Le=oe(G),_o=Le.path||Le.targetFile||Le.TargetFile||Le.directory,Jo=Le.keyword;if(Jo)Ge=Jo.replace(/["']/g,"");else if(_o)Ge=Ie.basename(_o.replace(/["']/g,"").replace(/\\/g,"/"));else{let vn=G.match(/(?:path|targetFile|TargetFile|directory|keyword)\s*=\s*\\?["']?([^\\"' \),]+)/);if(vn){let St=vn[1].replace(/["']/g,"");Ge=Tt==="search_keyword"?St:Ie.basename(St.replace(/\\/g,"/"))}}}let Kt=`${Za[Tt]||Tt}${Ge?` (${Ge})`:""}`;if((Tt!==It||Ge!==$o)&&(It=Tt,$o=Ge,yield{type:"status",content:`${Kt}...`},process.stdout.isTTY)){let _o={web_search:"Searching",web_scrape:"Reading",view_file:"Reading",read_folder:"Reading",list_files:"Reading",write_file:"Writing",update_file:"Editing",write_pdf:"Creating",write_docx:"Creating",search_keyword:"Searching",exec_command:"Executing",ask:"User Input",memory:"Updating Memory",generate_image:"Generating"}[Tt]||"Working";process.stdout.write(`\x1B]0;${_o}...\x07`)}}let dn=rl(fe,!1),un=(dn.match(/(?:<think>|\[think\])([\s\S]*?)(?:<\/think>|\[\/think\]|$)/gi)||[]).join("").trim(),zo=un.split(/[.!?]\s+/),jn=new Set(zo),ur=zo.length>10?(zo.length-jn.size)/zo.length:0,vr=un.split(/\s+/).filter(V=>V.length>0).length,Fo=.4,$r=.6,Xn=!1;if((Gt||"").toLowerCase().startsWith("gemma")){let Ye={low:256,medium:768,high:2048,max:4096,xhigh:4096}[l?.toLowerCase()]||2500;Xn=vr>Ye}if(ur>Fo||Xn){yield{type:"status",content:`${ur>Fo?"Reasoning Loop Detected":"Thinking Budget Exceeded"}. Re-centering...`},mt=!0,await new Promise(Ye=>setTimeout(Ye,3e3));break}let Kn=Fe.trim().split(/[.!?]\s+/),mn=new Set(Kn);if((Kn.length>10?(Kn.length-mn.size)/Kn.length:0)>$r){yield{type:"status",content:"Response Loop Detected. Re-centering..."},mt=!1,yt=!0,await new Promise(V=>setTimeout(V,3e3));break}let Bo=dn.toLowerCase().split(/\s+/).filter(V=>V.length>0),fn=!1;if(Bo.length>5)for(let V=1;V<=15;V++){let Ye=Math.max(3,Math.ceil(8/V));if(Bo.length<V*Ye)continue;let Tt=!0,Ge=Bo.slice(Bo.length-V).join(" ");for(let Kt=1;Kt<Ye;Kt++)if(Bo.slice(Bo.length-V*(Kt+1),Bo.length-V*Kt).join(" ")!==Ge){Tt=!1;break}if(Tt){fn=!0;break}}if(!fn){let V=dn.toLowerCase().replace(/[^a-z0-9]/gi,"");if(V.length>=10)for(let Ye=1;Ye<=10;Ye++){let Tt=Math.max(4,Math.ceil(12/Ye));if(V.length<Ye*Tt)continue;let G=V.substring(V.length-Ye),Ge=!0;for(let Kt=1;Kt<Tt;Kt++)if(V.substring(V.length-Ye*(Kt+1),V.length-Ye*Kt)!==G){Ge=!1;break}if(Ge){fn=!0;break}}}if(fn){yield{type:"status",content:"Stuttering Detected. Re-centering..."},mt=!1,xo=!0,await new Promise(V=>setTimeout(V,3e3));break}let qn=fe.replace(/(?:<(think|thought|thoughts)>|\[(think|thought|thoughts)\])[\s\S]*?(?:<\/(think|thought|thoughts)>|\[\/(think|thought|thoughts)\]|$)/gi,""),Fr=Ei(qn);for(;Fr.length>ie;){let V=Fr[ie],Ye=Date.now(),G={Ask:"ask",WebSearch:"web_search",WebScrape:"web_scrape",ReadFile:"view_file",ReadFolder:"read_folder",WriteFile:"write_file",PatchFile:"update_file",WritePDF:"write_pdf",WriteDoc:"write_docx",Run:"exec_command",SearchKeyword:"search_keyword",Memory:"memory",Chat:"chat",chat:"chat",GenerateImage:"generate_image",generate_image:"generate_image"}[V.toolName]||V.toolName,Ge=Za[G]||V.toolName,Kt=Bc(G,V.args);yield{type:"status",content:`${Ge}${Kt?` (${Kt})`:""}...`};let Le="";if(G==="web_search"){let{query:se,limit:De=10}=oe(V.args);Le=`\u{1F50D} Searched: ${se}`}else if(G==="web_scrape")Le=`\u{1F4D6} Visited: ${oe(V.args).url||"..."}`;else if(G==="view_file"){let{path:se,StartLine:De,EndLine:He,start_line:je,end_line:ft,startLine:be,endLine:co}=oe(V.args),x=De||je||be,g=He||ft||co,M=parseInt(x)||1,B=parseInt(g)||(x?M+800:800),L="...",$=B;try{let X=Ie.resolve(process.cwd(),se);if(Ft.existsSync(X)){let ve=Ft.readFileSync(X,"utf8").split(`
|
|
462
|
+
`).length;L=ve,$=Math.min(B,ve)}}catch{}let _=se.toLowerCase(),b=_.endsWith(".pdf"),O=_.endsWith(".docx")||_.endsWith(".doc")||_.endsWith(".ppt")||_.endsWith(".pptx")||_.endsWith(".xls")||_.endsWith(".xlsx"),F=/\.(png|jpg|jpeg|webp|gif|bmp)$/.test(_);b||O?Le=`\u{1F4C4} Viewed: ${se}`:F?Le=`\u{1F4F8} Viewed: ${se}`:Le=`\u{1F4C4} Read: ${se} \u2192 Lines ${M} - ${$} of ${L}`}else if(G==="list_files"||G==="read_folder"){let se=G==="list_files"?"List":"Viewed",De=oe(V.args).path;Le=`\u{1F4C2} ${se}: ${De==="."?"./":De}`}else if(G==="write_file"||G==="update_file")Le=`\u{1F4BE} ${G==="write_file"?"Created":"Edited"}: ${oe(V.args).path||"..."}`;else if(G==="write_pdf")Le=`\u{1F4D1} Created: ${oe(V.args).path||"..."}`;else if(G==="write_docx")Le=`\u{1F4DD} Created: ${oe(V.args).path||"..."}`;else if(G==="search_keyword")Le="";else if(G==="generate_image"){let{path:se,outputPath:De,output:He}=oe(V.args);Le=`\u{1F3A8} Generated: ${se||De||He||"generated_image.png"}`}else G==="exec_command"||G==="ask"?Le="":Le=`Executed: ${V.toolName}`;if(G==="exec_command"){let{command:se}=oe(V.args);if(se&&t.systemSettings&&t.systemSettings.allowExternalAccess===!1){let De=[/[a-zA-Z]:[\\\/]/i,/^\//,/\.\.[\\\/]/,/\/etc\//,/\/var\//,/\/root\//,/\/bin\//,/\/usr\//],He=Ie.resolve(process.cwd()).substring(0,3).toLowerCase();if(De.some(ft=>{if(ft.source==="[a-zA-Z]:[\\\\\\/]"){let be=se.match(/[a-zA-Z]:[\\\/]/i);return be&&be[0].toLowerCase()!==He}return ft.test(se)})){let ft='Access Denied. Terminal is prohibited from accessing system drives (C://) or external directories while "External Workspace Access" is disabled.';t.onExecStart&&t.onExecStart(se||"Unknown"),yield{type:"exec_start"},await new Promise(be=>setTimeout(be,50)),t.onExecChunk&&t.onExecChunk(`ERROR: ${ft}`),await new Promise(be=>setTimeout(be,50)),t.onExecEnd&&t.onExecEnd(),We.push({role:"user",text:`[TOOL RESULT]: ERROR: ${ft}`}),yield{type:"tool_result",content:`[TOOL RESULT]: ERROR: ${ft}`},ie++;continue}}t.onExecStart&&t.onExecStart(se||"Unknown"),yield{type:"exec_start"}}let _o=oe(V.args),Jo=_o.path||_o.targetPath||null;if(Jo){let se=t.systemSettings&&t.systemSettings.allowExternalAccess===!1,De=Ie.resolve(Jo),He=Ie.resolve(process.cwd());if(se&&!De.startsWith(He)){let je="Access Denied. You are not allowed to access files outside the current workspace.";if(G==="write_file"||G==="update_file"){let be=`\u{1F4BE} ${G==="write_file"?"Write Canceled":"Edit Canceled"}: ${_o.path||"..."}`,co=Math.min(be.length+4,115),x=`\u256D${"\u2500".repeat(co)}\u256E`,g=`\u2502 ${be.padEnd(co-2).substring(0,co-2)} \u2502`,M=`\u2570${"\u2500".repeat(co)}\u256F`;yield{type:"visual_feedback",content:`${x}
|
|
469
463
|
${g}
|
|
470
|
-
${
|
|
464
|
+
${M}`}}We.push({role:"user",text:`[TOOL RESULT]: ERROR: ${je}`}),yield{type:"tool_result",content:`[TOOL RESULT]: ERROR: ${je}`},ie++;continue}}if(t.onToolApproval&&(G==="write_file"||G==="update_file"||G==="exec_command")){let De=t.systemSettings||{},He=De.autoExec,je=null,ft=!1,be=!1,co=!1;if(G==="exec_command"){let{command:_}=oe(V.args),b=(_||"").trim(),O=(te,ve)=>{if(!ve)return!1;let pe=ve.split(",").map(he=>he.trim().toLowerCase()).filter(Boolean),Ne=te.toLowerCase();return pe.some(he=>Ne.startsWith(he))},F=O(b,De.alwaysAskCommands),X=O(b,De.autoApproveCommands);be=O(b,De.autoDisallowCommands),F?ft=!0:(X||De.autoApproveGit&&/^git\s+commit\b/i.test(b))&&(je="allow"),!ft&&!je&&(De.networkAccess===!1&&/\b(curl|wget|npm|yarn|pnpm|pip|pip3|ssh|docker|git\s+(clone|push|pull|fetch))\b/i.test(b)&&(je="deny",co=!0),!je&&be&&(je="deny")),!ft&&!je&&He&&(je="allow")}else He&&(je="allow");let x=je,g="";je==="deny"&&(co?g="network":be?g="settings":g="prohibited");let M=!1,B="",L=[],$=0;if(!x){if(G==="write_file"||G==="update_file")try{let _=oe(V.args),{path:b}=_;if(b){let O=Ie.resolve(process.cwd(),b),F=he=>he?he.toLowerCase().replace(/\\/g,"/").replace(/^[a-z]:/,at=>at.toUpperCase()):"",X=F(O),te="",ve=!1,pe=await Mr(),Ne=F(pe?.file_focused);if(pe&&Ne===X&&pe.full_content?(te=pe.full_content,ve=!0):Ft.existsSync(O)&&(te=Ft.readFileSync(O,"utf8"),ve=!0),B=te,await Et.recordFileChange(O,te),ve){let he=te;if(G==="write_file")he=_.content||_.newContent||"";else{let{patchPairs:at,error:Mo}=Ur(_);if(Mo){let qt=`[TOOL RESULT]: ERROR: ${Mo}`;We.push({role:"user",text:qt}),yield{type:"tool_result",content:qt,toolName:G},ie++;continue}$=at.length;let Ao=Rr(te,at);he=Ao.content,L=Ao.results;let pn=L.filter(qt=>!qt.success);if(pn.length>0){let qt=`[TOOL RESULT]: ERROR: Failed to apply patches to [${Ie.basename(O)}].\\n${pn.map(we=>` \u2022 ${we.error}`).join("\\n")}`,uo=`\u{1F4BE} Edited: ${Ie.basename(O)}`.toUpperCase(),hn=Math.min(uo.length+4,115),Vn=`\u256D${"\u2500".repeat(hn)}\u256E`,R=`\u2502 ${uo.padEnd(hn-2).substring(0,hn-2)} \u2502`,le=`\u2570${"\u2500".repeat(hn)}\u256F`;yield{type:"visual_feedback",content:`${Vn}
|
|
471
465
|
${R}
|
|
472
|
-
${le}`},We.push({role:"user",text:
|
|
473
|
-
${
|
|
466
|
+
${le}`},We.push({role:"user",text:qt}),yield{type:"tool_result",content:qt,toolName:G},ie++;continue}}yield{type:"status",content:`Opening Diff in IDE: ${Ie.basename(O)}...`},gi(O,te,he),M=!0,await new Promise(at=>setTimeout(at,50))}else if(G==="write_file"){let he=_.content||_.newContent||"";yield{type:"status",content:`Opening New File Diff in IDE: ${Ie.basename(O)}...`},gi(O,"",he),M=!0,await new Promise(at=>setTimeout(at,50))}}}catch(_){console.error("Simulation/Diff Error:",_)}if(x=await t.onToolApproval(G,V.args),G==="write_file"||G==="update_file"){let{path:_}=oe(V.args);if(_){let b=Ie.resolve(process.cwd(),_);Qa(b,x)}}x==="deny"&&(g="user")}if(x==="allow"&&M&&sr()){let{path:_}=oe(V.args),b=Ie.resolve(process.cwd(),_),O=await Mr(),F="";O&&O.file_focused===b&&O.full_content?F=O.full_content:Ft.existsSync(b)&&(F=Ft.readFileSync(b,"utf8"));let X=F.split(/\r?\n/),te=X.length,ve=Buffer.byteLength(F,"utf8"),pe="";B&&(pe=`Old File contents:
|
|
467
|
+
${B.split(/\r?\n/).map((le,we)=>`${we+1} | ${le}`).join(`
|
|
474
468
|
`)}
|
|
475
469
|
|
|
476
470
|
`);let Ne="";if(te<=200)Ne=X.join(`
|
|
@@ -480,82 +474,82 @@ ${F.split(/\r?\n/).map((le,we)=>`${we+1} | ${le}`).join(`
|
|
|
480
474
|
|
|
481
475
|
... [${te-200} lines truncated for history stability] ...
|
|
482
476
|
|
|
483
|
-
${le}`}let
|
|
477
|
+
${le}`}let he="";if(G==="update_file"){let R=Wr(B,F,L,12);he=`SUCCESS: File [${_}] updated via IDE Companion (May have user edits). [${L.length}/${$}] blocks applied.
|
|
484
478
|
|
|
485
|
-
${R}`}else{let R=
|
|
486
|
-
${
|
|
479
|
+
${R}`}else{let R=F.split(/\r?\n/),le=R.length,we=Buffer.byteLength(F,"utf8"),$e="";B&&($e=`Old File contents:
|
|
480
|
+
${B.split(/\r?\n/).map((ge,tt)=>`${tt+1} | ${ge}`).join(`
|
|
487
481
|
`)}
|
|
488
482
|
|
|
489
|
-
`);let
|
|
490
|
-
`);else{let
|
|
483
|
+
`);let Mt="";if(le<=200)Mt=R.join(`
|
|
484
|
+
`);else{let de=R.slice(0,100).join(`
|
|
491
485
|
`),ge=R.slice(-100).join(`
|
|
492
|
-
`);
|
|
486
|
+
`);Mt=`${de}
|
|
493
487
|
|
|
494
488
|
... [${le-200} lines truncated] ...
|
|
495
489
|
|
|
496
|
-
${ge}`}
|
|
490
|
+
${ge}`}he=`SUCCESS: File [${_}] saved via IDE Companion (May have user edits).
|
|
497
491
|
|
|
498
492
|
- Stats: [${le} lines, ${(we/1024).toFixed(1)} KB]
|
|
499
|
-
${
|
|
500
|
-
${
|
|
493
|
+
${$e}- Content Preview:
|
|
494
|
+
${Mt}
|
|
501
495
|
|
|
502
|
-
Check if Starting and Ending matches your write.`}let
|
|
503
|
-
${
|
|
504
|
-
${
|
|
496
|
+
Check if Starting and Ending matches your write.`}let Mo=`\u{1F4BE} ${G==="write_file"?"Written":"Edited"}: ${_||"..."}`,Ao=Math.min(Mo.length+4,115),pn=`\u256D${"\u2500".repeat(Ao)}\u256E`,qt=`\u2502 ${Mo.padEnd(Ao-2).substring(0,Ao-2)} \u2502`,uo=`\u2570${"\u2500".repeat(Ao)}\u256F`;yield{type:"visual_feedback",content:`${pn}
|
|
497
|
+
${qt}
|
|
498
|
+
${uo}`};let hn=Date.now();ut=hn,yield{type:"tool_time",content:hn-Ye};let Vn=`[TOOL RESULT]: ${he}`;We.push({role:"user",text:Vn}),Bt=!0,yield{type:"tool_result",content:he,aiContent:Vn,toolName:G},ie++;continue}if(x==="deny"){let _=`Permission Denied: Prohibited ${G==="exec_command"?"Command":"file edit"}.`;if(g==="user"?_="Permission Denied by User":g==="settings"?_="Permission Denied by User Policy":g==="network"?_="Permission Denied: Sandbox Network Access Disabled by User Policy.":g==="prohibited"&&G==="exec_command"&&(_="Permission Denied: Prohibited Command"),G==="write_file"||G==="update_file"){let O=`\u{1F4BE} ${G==="write_file"?"WRITE DENIED":"UPDATE DENIED"}: ${oe(V.args).path||"..."}`.toUpperCase(),F=Math.min(O.length+4,115),X=`\u256D${"\u2500".repeat(F)}\u256E`,te=`\u2502 ${O.padEnd(F-2).substring(0,F-2)} \u2502`,ve=`\u2570${"\u2500".repeat(F)}\u256F`;yield{type:"visual_feedback",content:`${X}
|
|
505
499
|
${te}
|
|
506
|
-
${
|
|
507
|
-
${
|
|
508
|
-
${
|
|
509
|
-
${
|
|
510
|
-
${
|
|
511
|
-
`)}`;We.push({role:"user",text:J,binaryPart:
|
|
500
|
+
${ve}`}}G==="exec_command"&&(await new Promise(b=>setTimeout(b,50)),t.onExecChunk&&t.onExecChunk(`ERROR: ${_}`),await new Promise(b=>setTimeout(b,50)),t.onExecEnd&&t.onExecEnd()),We.push({role:"user",text:`[TOOL RESULT]: DENIED: ${_}`}),yield{type:"tool_result",content:`[TOOL RESULT]: DENIED: ${_}`},await Nn("toolDenied"),t.onToolResult&&t.onToolResult("denied",G),ie++;continue}}if(Le){let se=Math.min(Le.length+4,115),De=`\u256D${"\u2500".repeat(se)}\u256E`,He=`\u2502 ${Le.padEnd(se-2).substring(0,se-2)} \u2502`,je=`\u2570${"\u2500".repeat(se)}\u256F`;yield{type:"visual_feedback",content:`${De}
|
|
501
|
+
${He}
|
|
502
|
+
${je}`}}if(ut>0){let se=Date.now()-ut;se<1e3&&await new Promise(De=>setTimeout(De,1e3-se))}yield{type:"spinner",content:!1};let vn={chatId:d,history:o,onChunk:se=>t.onExecChunk?t.onExecChunk(se):null,onAskUser:t.onAskUser,systemSettings:t.systemSettings,mode:c,isMultiModal:yi(Gt)};if(G==="write_file"||G==="update_file")try{let{path:se}=oe(V.args);if(se){let De=Ie.resolve(process.cwd(),se),He=await Mr();He&&He.file_focused===De&&He.full_content&&(vn.forcedContent=He.full_content)}}catch{}let St=await as(G,V.args,vn);if(yield{type:"spinner",content:!0},G==="write_file"&&St.startsWith("SUCCESS")){let{path:se}=oe(V.args);se&&Ja(se)}process.stdout.isTTY&&process.stdout.write("\x1B]0;Working...\x07");let Dt=Date.now();ut=Dt,yield{type:"tool_time",content:Dt-Ye},xt=Dt;let N=null;if(typeof St=="object"&&St.binaryPart&&(N=St.binaryPart,St=St.text),G==="search_keyword"){let{keyword:se,file:De}=oe(V.args),He=0;if(St){let g=St.match(/Found (\d+) matches/i);g&&(He=parseInt(g[1]))}let je=`\u{1F50E} Searched: "${se}" in ${De?`"${De}"`:"./"} \u2192 ${He} Match${He===1?"":"es"}`,ft=Math.min(je.length+4,115),be=`\u256D${"\u2500".repeat(ft)}\u256E`,co=`\u2502 ${je.padEnd(ft-2).substring(0,ft-2)} \u2502`,x=`\u2570${"\u2500".repeat(ft)}\u256F`;yield{type:"visual_feedback",content:`${be}
|
|
503
|
+
${co}
|
|
504
|
+
${x}`}}G==="exec_command"&&t.onExecEnd&&(await new Promise(se=>setTimeout(se,800)),t.onExecEnd());let Io=St&&St.startsWith("DENIED:");St&&!St.startsWith("ERROR:")&&!Io?(await Nn("toolSuccess"),t.onToolResult&&t.onToolResult("success",G)):Io||(await Nn("toolFailure"),t.onToolResult&&t.onToolResult("failure",G));let J=`[TOOL RESULT]: ${(St||"").toString().split(/\r?\n/).filter(se=>!se.includes("[UI_CONTEXT]")).join(`
|
|
505
|
+
`)}`;We.push({role:"user",text:J,binaryPart:N}),Bt=!0;let Br=`[TOOL RESULT]: ${St||""}`;(G==="view_file"||G==="web_scrape")&&(Br=`[TOOL RESULT]: ${Le} (Context Locked for UI Clarity)`),yield{type:"tool_result",content:Br,aiContent:J,binaryPart:N,toolName:G},G==="memory"&&St.includes("SUCCESS")&&(yield{type:"memory_updated"}),ie++}f==="Google"&&et&&Date.now()-jt>=150&&(yield{type:"text",content:et},et="",jt=Date.now())}Ee.usageMetadata&&(Yt=Ee.usageMetadata),Yt&&(yield{type:"liveTokens",content:Yt.totalTokenCount})}if(ne&&(ne=!1,_t?st+="</think>":(fe+="</think>",f==="Google"?et+="</think>":yield{type:"text",content:"</think>"})),_t&&st.length>0){let Ee=0,Je=Math.min(Ze.length,st.length);for(let Fe=Je;Fe>0;Fe--)if(Ze.endsWith(st.substring(0,Fe))){Ee=Fe;break}let lo=st.substring(Ee);if(lo){let wo=/(?:<(think|thought)>|\[(think|thought)\])(?:(?!(?:<\/(?:think|thought)>|\[\/(?:think|thought)\]))[\s\S])*$/i.test(Ze)?lo.replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])\s*/gi,""):lo.replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])[\s\S]*?(?:<\/(think|thought)>|\[\/(think|thought)\])\s*/gi,"").replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])\s*/gi,"");wo&&(fe+=wo,f==="Google"?et+=wo:yield{type:"text",content:wo})}_t=!1,st=""}if(f==="Google"&&et&&(yield{type:"text",content:et},et=""),ir)break;let yo=(fe||"").trim(),Xt=/\[\s*(turn\s*:)?\s*finish\s*\]/i.test(yo.toLowerCase()),Lt=/\[\s*(turn\s*:)?\s*continue\s*\]/i.test(yo.toLowerCase()),no=We.length>0||It!==null,Po=yo.replace(/(?:<think>|\[think\])[\s\S]*?(?:<\/think>|\[\/think\])/gi,"").trim(),Dn=/[.!?}"'`’“”]$|```$/s.test(Po);if(!Xt&&!Lt&&!no&&yo.length>0&&!Dn&&!mt&&!xo&&!yt)throw new Error("Silent stream cutoff (500): Model stream closed cleanly but cut off mid-sentence without signals.");Oe=!0,await Nn("agent")}catch(Be){if(String(Be).includes("Incomplete JSON segment at the end")){ne&&(ne=!1,_t?st+="</think>":(fe+="</think>",yield{type:"text",content:"</think>"})),Oe=!0,await Nn("agent");break}if(ne&&(ne=!1,_t?st+="</think>":fe+="</think>"),_t&&st.length>0){let Xt=0,Lt=Math.min(Ze.length,st.length);for(let Po=Lt;Po>0;Po--)if(Ze.endsWith(st.substring(0,Po))){Xt=Po;break}let no=st.substring(Xt);if(no){let Dn=/(?:<(think|thought)>|\[(think|thought)\])(?:(?!(?:<\/(?:think|thought)>|\[\/(?:think|thought)\]))[\s\S])*$/i.test(Ze)?no.replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])\s*/gi,""):no.replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])[\s\S]*?(?:<\/(think|thought)>|\[\/(think|thought)\])\s*/gi,"").replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])\s*/gi,"");Dn&&(fe+=Dn)}_t=!1,st=""}let _e=Be.status||Be.error&&Be.error.message||String(Be),it=String(Be),wt=new Date().toLocaleString(),et=Ie.join(Co,"agent");Ft.existsSync(et)||Ft.mkdirSync(et,{recursive:!0}),Ft.appendFileSync(Ie.join(et,"error.log"),`ERROR [${wt}]: ${it}
|
|
512
506
|
|
|
513
507
|
----------------------------------------------------------------------
|
|
514
508
|
|
|
515
|
-
`);let
|
|
509
|
+
`);let jt=Be.status||Be.statusCode||Be.code;if(!(jt&&(jt>=500&&jt<600||jt===408)||!jt&&(/status[ :]+(5\d\d|408)/i.test(String(Be))||/code[ :]+(5\d\d|408)/i.test(String(Be))||/(500|503|408)/.test(String(Be))))&&ae<dt-3)throw Be;if(fe.trim().length>0||ye>1)if(ye<=dt){ye++;let Xt=Math.min(1e3*Math.pow(2,ye-1),24e3);if(fe.trim().length>0){I.push({role:"agent",text:fe});let Lt=`[SYSTEM]
|
|
516
510
|
- SEAMLESS CONTINUATION: Resume immediately. Pick up from last words with zero gap/disruption
|
|
517
511
|
- NO REPETITION: Do not repeat any text already written
|
|
518
512
|
- NO RE-THINK: Do not restart or open <think> if reasoning already started. Continue the thinking and close thinking block with </think> if opened
|
|
519
513
|
- MID-TOOL SAFETY: If cutoff was mid-tool call, restart that tool call from start
|
|
520
|
-
- STEALTH: Do not mention/apologize for cutoff`;We.length>0?We.forEach((
|
|
514
|
+
- STEALTH: Do not mention/apologize for cutoff`;We.length>0?We.forEach((no,Po)=>{Po===We.length-1?I.push({...no,text:`${no.text}
|
|
521
515
|
|
|
522
|
-
${
|
|
523
|
-
Error Log can be found in ${
|
|
524
|
-
Error Log can be found in ${
|
|
525
|
-
`),
|
|
516
|
+
${Lt}`}):I.push(no)}):I.push({role:"user",text:Lt}),Ze+=fe}for(let Lt=Xt/1e3;Lt>0;Lt--)yield{type:"status",content:`Error Occured. Recovering Stream (${ye}/${dt}) [Retrying in ${Lt}s]...`},await new Promise(no=>setTimeout(no,1e3));yield{type:"status",content:"Error Occured. Recovering Stream..."}}else throw new Error(`Stream collapsed too many times. (Failed to resolve ${dt} times)
|
|
517
|
+
Error Log can be found in ${Ie.join(Co,"agent","error.log")}`);else if(ae<=dt){ae++,ye=1,Ze="";let Xt=Math.min(1e3*Math.pow(2,ae-1),32e3);cn=!0,yield{type:"status",content:`Trying to reach ${e} (${ae}/${dt}) [Retrying in ${(Xt/1e3).toFixed(0)}s]...`};for(let Lt=Xt/1e3;Lt>0;Lt--)yield{type:"status",content:`Trying to reach ${e} (${ae}/${dt}) [Retrying in ${Lt}s]...`},await new Promise(no=>setTimeout(no,1e3));yield{type:"status",content:`Trying to reach ${e}...`}}else throw new Error(`Model ${e} cannot be reached. (Failed ${dt} times)
|
|
518
|
+
Error Log can be found in ${Ie.join(Co,"agent","error.log")}`)}}if(Yt){let ne=Yt.totalTokenCount||0,Be=Yt.cachedContentTokenCount||0,_e=(Yt.candidatesTokenCount||0)+(Yt.thoughtsTokenCount||0);await po("tokens",ne),Be>0&&await po("cachedTokens",Be),_e>0&&await po("candidateTokens",_e),yield{type:"usage",content:Yt}}ko.push(fe);let ps=fe;fe.match(/(?:<think>|\[think\])([\s\S]*?)(?:<\/think>|\[\/think\])/i)&&(ps=fe.replace(/(?:<think>|\[think\])[\s\S]*?(?:<\/think>|\[\/think\])/i,""));let Dr=el(fe),Hn=/\[\s*(turn\s*:)?\s*finish\s*\]/i.test(Dr.toLowerCase()),hs=/\[\s*(turn\s*:)?\s*continue\s*\]/i.test(Dr.toLowerCase()),Gn=ie>0;yield{type:"status",content:"Working..."};let gs=Nc(fe,/\[\s*(turn\s*:)?\s*(continue|finish)\s*\]/gi,"").trim(),dr=!hs&&(Hn||!Gn)&&We.length===0;if(dr){let ne=ko.join(`
|
|
519
|
+
`),Be=ne.replace(/(?:<think>|\[think\])[\s\S]*?(?:<\/think>|\[\/think\])/g,"").trim();yield{type:"interactive_turn_finished",data:{agentText:P,fullAgentTextRaw:ne,history:[...I],needTitle:j}},I.length>0&&I[I.length-1].role==="agent"?I[I.length-1].text=Be:I.push({role:"agent",text:Be});try{let _e=xe(S,{}),it=_e[d]||{summary:"",historyLength:0};typeof it=="string"&&(it={summary:it,historyLength:0});let wt=I.filter(et=>(et.role==="user"||et.role==="agent"||et.role==="system")&&!String(et.id).startsWith("welcome")&&!et.isMeta).length;k?it.historyLength=(it.historyLength||0)+wt:it.historyLength=wt,_e[d]=it,ke(S,_e)}catch{}}if(dr)break;let xs=gs.trim()||"*Working...*";if(I.push({role:"agent",text:xs}),We.length>0||Bt){if(We.length>0){let ne=We.map(_e=>_e.text).join(`
|
|
526
520
|
|
|
527
|
-
`),
|
|
528
|
-
[SYSTEM] Tool result received. Analyze output and proceed with your turn`,
|
|
529
|
-
[SYSTEM] Tool result received. Analyze output and proceed with your turn. **STRICTLY MAINTAIN THINKING POLICY. DO NOT START A RESPONSE WITHOUT <think> ... </think>}**`;Q.text=Q.text.replace(
|
|
530
|
-
`+
|
|
521
|
+
`),Be=We.find(_e=>_e.binaryPart)?.binaryPart||null;I.push({role:"user",text:ne,binaryPart:Be})}}else Ht?I.push({role:"user",text:"[SYSTEM] System failed to verify tool execution, Verify tool syntax, proper escaping and try again if failed"}):I.push({role:"user",text:`[SYSTEM] ${xo&&!mt?"STUTTERING DETECTED by Internal System. Re-calibrate your response & proceed.":`${mt?" OVER-THINKING":" LOOP"} DETECTED by Internal System${mt?" for current EFFORT_LEVEL":""}. ${mt?"If you have planned the task, prioritize the execution/output. ":"If you have finished your task use [turn: finish] else continue."}`}`}),mt=!1,xo=!1,yt=!1;Ht=ie>0||Bt}e&&e.toLowerCase().startsWith("gemma")&&I.forEach(Q=>{if(Q.role==="user"&&Q.text&&Q.text.startsWith("[TOOL RESULT]")){let Me=`
|
|
522
|
+
[SYSTEM] Tool result received. Analyze output and proceed with your turn`,Oe=`
|
|
523
|
+
[SYSTEM] Tool result received. Analyze output and proceed with your turn. **STRICTLY MAINTAIN THINKING POLICY. DO NOT START A RESPONSE WITHOUT <think> ... </think>}**`;Q.text=Q.text.replace(Oe,"").replace(Me,"").trim()}})}finally{await Et.commitTransaction()}yield{type:"status",content:null}}});import Ot,{useState as bi,useEffect as Rc}from"react";import{Box as Ho,Text as An,useInput as Wc}from"ink";function Ci({onSelect:e,onDelete:o,onClose:t}){let[n,i]=bi({}),[r,l]=bi([]),[c,m]=bi(0);Rc(()=>{(async()=>{let h=await vo();i(h),l(Object.keys(h).sort((T,w)=>(h[w].updatedAt||0)-(h[T].updatedAt||0)))})()},[]),Wc((p,h)=>{if(h.escape&&t(),h.upArrow&&m(T=>Math.max(0,T-1)),h.downArrow&&m(T=>Math.min(r.length-1,T+1)),h.return&&r[c]&&e(r[c]),p==="x"&&r[c]){let T=r[c];o(T).then(w=>{let S=w||{};i(S);let k=Object.keys(S).sort((D,U)=>(S[U]?.updatedAt||0)-(S[D]?.updatedAt||0));l(k),m(D=>Math.max(0,Math.min(k.length-1,D)))})}});let d=Ce(2),u=15,a=0;if(r.length>u){let p=Math.floor(u/2);a=c-p,a<0?a=0:a+u>r.length&&(a=r.length-u)}let f=r.slice(a,a+u);return Ot.createElement(Ho,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},Ot.createElement(Ho,{paddingX:1,marginBottom:1},Ot.createElement(An,{color:"cyan",bold:!0},"\u{1F4A0} CHAT HISTORY: RESUME CONVERSATION")),r.length===0?Ot.createElement(Ho,{paddingX:2,paddingY:1},Ot.createElement(An,{italic:!0,color:"gray"},"No saved chats found.")):Ot.createElement(Ho,{flexDirection:"column",width:"100%"},a>0&&Ot.createElement(Ho,{paddingX:2,marginBottom:1},Ot.createElement(An,{color:"gray",dimColor:!0},"\u25B2 (+",a," more chats above)")),f.map((p,h)=>{let T=n[p],S=a+h===c,k=Yc(T?.updatedAt);return Ot.createElement(Ho,{key:p,paddingX:1,backgroundColor:S?"#2a2a2a":void 0,width:"100%"},Ot.createElement(Ho,{flexGrow:1},Ot.createElement(An,{color:S?"cyan":"white",bold:S},S?"\u276F ":" ",T?.name||p,Ot.createElement(An,{color:"gray",dimColor:!S}," [",k," \u2022 ",p.slice(5),"]"))),S&&Ot.createElement(Ho,{flexShrink:0},Ot.createElement(An,{color:"red",bold:!0},"[X] DELETE ")))}),a+u<r.length&&Ot.createElement(Ho,{paddingX:2,marginTop:1},Ot.createElement(An,{color:"gray",dimColor:!0},"\u25BC (+",r.length-(a+u)," more chats below)"))),Ot.createElement(Ho,{marginTop:1,paddingX:1,borderStyle:"single",borderLeft:!1,borderRight:!1,borderBottom:!1,borderColor:"gray"},Ot.createElement(An,{dimColor:!0,italic:!0},"\u2191\u2193 navigate \u2022 Enter select \u2022 x delete \u2022 Esc close")))}function Yc(e){if(!e)return"N/A";let o=new Date(e);if(isNaN(o.getTime()))return"N/A";let t=c=>String(c).padStart(2,"0"),n=t(o.getMonth()+1),i=t(o.getDate()),r=t(o.getHours()),l=t(o.getMinutes());return`${n}-${i} ${r}:${l}`}var al=re(()=>{Er();yn()});import Ct,{useState as ki,useEffect as Hc}from"react";import{Box as Go,Text as sn,useInput as Gc}from"ink";function Ii({onClose:e}){let[o,t]=ki([]),[n,i]=ki(0),[r,l]=ki(!0),c=()=>{let S=xe(Pt,[]);t(S);try{let D=qr(Qt,{}).systemSettings?.memory!==!1;l(D)}catch{l(!0)}};Hc(()=>{c()},[]),Gc((S,k)=>{if(k.escape&&e(),k.upArrow&&i(D=>Math.max(0,D-1)),k.downArrow&&i(D=>Math.min(o.length-1,D+1)),S==="x"&&o.length>0){let D=o[n].id,U=o.filter(j=>j.id!==D);ke(Pt,U),t(U),n>=U.length&&U.length>0&&i(U.length-1)}});let m=S=>S?S.replace(/\[Saved on: .*?\]/g,"").replace(/\\+'/g,"'").trim():"",d=4*1024*2,u=o.reduce((S,k)=>S+(k.memory?.length||0),0),a=Math.min(100,Math.round(u/d*100)),f=12,p=Math.round(a/100*f),h="\u2588".repeat(p)+"\u2591".repeat(Math.max(0,f-p)),T=()=>a<50?"green":a<90?"yellow":"red",w=Ce(2);return Ct.createElement(Go,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},Ct.createElement(Go,{paddingX:1,marginBottom:1,justifyContent:"space-between"},Ct.createElement(sn,{color:"cyan",bold:!0},"\u{1F9E0} AGENT MEMORY: LONG-TERM KNOWLEDGE"),Ct.createElement(Go,null,Ct.createElement(sn,{color:"gray"},"Vault: "),Ct.createElement(sn,{color:T()},h),Ct.createElement(sn,{color:"white",bold:!0}," ",a,"%"))),!r&&o.length>0?Ct.createElement(Go,{paddingX:2,paddingY:1},Ct.createElement(sn,{italic:!0,color:"gray"},"Memory is currently Off...")):o.length===0?Ct.createElement(Go,{paddingX:2,paddingY:1},Ct.createElement(sn,{italic:!0,color:"gray"},r?"Learning...":"Memory not available...")):Ct.createElement(Go,{flexDirection:"column"},o.map((S,k)=>{let D=k===n;return Ct.createElement(Go,{key:S.id,paddingX:1,backgroundColor:D?"#2a2a2a":void 0,width:"100%"},Ct.createElement(Go,{flexGrow:1},Ct.createElement(sn,{color:D?"cyan":"white",bold:D},D?"\u276F ":" ",k+1,". ",m(S.memory))),D&&Ct.createElement(Go,{flexShrink:0},Ct.createElement(sn,{color:"red",bold:!0},"[X] WIPE ")))})),Ct.createElement(Go,{marginTop:1,paddingX:1,borderStyle:"single",borderLeft:!1,borderRight:!1,borderBottom:!1,borderColor:"gray"},Ct.createElement(sn,{dimColor:!0,italic:!0},"\u2191\u2193 navigate \u2022 x wipe memory \u2022 Esc close")))}var ll=re(()=>{Do();eo();yn()});import Qe,{useState as cs,useEffect as cl}from"react";import{Box as On,Text as Rt}from"ink";import{spawn as dl}from"child_process";var ds,ul,jc,ml,fl=re(async()=>{ds=null;try{let e=await import("node-pty");ds=e.default||e,ds=!1}catch{}ul=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],jc=({latest:e,current:o,settings:t,onClose:n,onUpdateSettings:i,onSuccess:r})=>{let[l,c]=cs("initializing"),[m,d]=cs(""),[u,a]=cs(null),[f,p]=cs(0);if(cl(()=>{let h=setInterval(()=>{p(T=>(T+1)%1e3)},33);return()=>clearInterval(h)},[]),cl(()=>{let h;return(async()=>{let w=t.updateManager||"npm";if(!t.updateManager){i();return}let S="";w==="pnpm"?S=`pnpm add -g fluxflow-cli@${e}`:w==="bun"?S=`bun add -g fluxflow-cli@${e}`:w==="yarn"?S=`yarn global add fluxflow-cli@${e}`:w==="custom"?S=t.customUpdateCommand:S=`npm install -g fluxflow-cli@${e}`,c("downloading"),d(`Running: ${S}...`);let k=process.platform==="win32",D=j=>new Promise(P=>{let I=k?j?"powershell.exe":"cmd.exe":process.env.SHELL||"bash",A=k?j?["-NoProfile","-Command",S]:["/c",S]:["-c",S],v=z=>{let H=z.toString().replace(/\x1B\[[0-?]*[ -/]*[@-~]|\x1B\][^\x07\x1B]*[\x07\x1B]|\b|\x07/g,"").replace(/\r/g,"").trim();H&&d(q=>(q+`
|
|
524
|
+
`+H).split(`
|
|
531
525
|
`).slice(-5).join(`
|
|
532
|
-
`))};if(
|
|
533
|
-
`)[0]||"").replace(/@\[(.*?)\]/g,(n,
|
|
534
|
-
`)?
|
|
526
|
+
`))};if(ds)try{let z=ds.spawn(I,A,{name:"xterm-256color",cols:80,rows:30,cwd:process.cwd(),env:process.env});h=z,z.onData(v),z.onExit(({exitCode:ue})=>{h=null,P(ue!==0?{error:`Process exited with code ${ue}`}:{success:!0})});return}catch(z){if(k&&j&&z.code==="ENOENT"){P({retryCmd:!0});return}}let ee=k?dl(I,A,{cwd:process.cwd(),env:process.env}):dl(S,{shell:!0,cwd:process.cwd(),env:process.env});h=ee,ee.stdout.on("data",v),ee.stderr.on("data",v),ee.on("close",z=>{h=null,P(z!==0?{error:`Process exited with code ${z}`}:{success:!0})}),ee.on("error",z=>{k&&j&&z.code==="ENOENT"?P({retryCmd:!0}):(h=null,P({error:z.message}))})}),U={};k?(U=await D(!0),U.retryCmd&&(U=await D(!1))):U=await D(!1),U.error?(a(U.error),c("error")):U.success&&(c("success"),r&&r())})(),()=>{if(h)try{typeof h.destroy=="function"?h.destroy():typeof h.kill=="function"&&h.kill()}catch{}}},[]),l==="initializing"||l==="downloading"){let h=ul[Math.floor(f/3)%ul.length];return Qe.createElement(On,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",paddingX:2,paddingY:1},Qe.createElement(On,null,Qe.createElement(Rt,{color:"magenta"},h),Qe.createElement(Rt,{marginLeft:1,bold:!0}," Updating Flux Flow to v",e,"...")),Qe.createElement(On,{marginTop:1,paddingX:1,borderStyle:"single",borderColor:"#333"},Qe.createElement(Rt,{color:"gray",italic:!0},m||"Preparing environment...")),Qe.createElement(Rt,{marginTop:1,dimColor:!0},"(Please do not close the terminal)"))}return l==="success"?Qe.createElement(On,{flexDirection:"column",borderStyle:"round",borderColor:"green",paddingX:2,paddingY:1},Qe.createElement(Rt,{color:"green",bold:!0},"\u2705 UPDATE SUCCESSFUL!"),Qe.createElement(Rt,{marginTop:1},"Flux Flow has been updated to ",Qe.createElement(Rt,{color:"cyan"},"v",e),"."),Qe.createElement(Rt,{marginTop:1,color:"yellow",bold:!0},"Please restart your terminal session to apply changes."),Qe.createElement(On,{marginTop:1},Qe.createElement(Rt,{dimColor:!0},"(Press ESC to return to chat)"))):l==="error"?Qe.createElement(On,{flexDirection:"column",borderStyle:"round",borderColor:"red",paddingX:2,paddingY:1},Qe.createElement(Rt,{color:"red",bold:!0},"\u274C UPDATE FAILED"),Qe.createElement(On,{marginTop:1,paddingX:1,borderStyle:"single",borderColor:"red"},Qe.createElement(Rt,{color:"red"},u)),Qe.createElement(Rt,{marginTop:1},"Possible causes:"),Qe.createElement(Rt,null,"\u2022 Missing permissions (Try running as Administrator/Sudo)"),Qe.createElement(Rt,null,"\u2022 Package manager (",t.updateManager,") not found"),Qe.createElement(Rt,null,"\u2022 Network failure"),Qe.createElement(On,{marginTop:1},Qe.createElement(Rt,{dimColor:!0},"(Press ESC to return to chat)"))):null},ml=jc});import kt,{useState as Xc}from"react";import{Box as jo,Text as an,useInput as Kc}from"ink";function Mi({prompts:e,onSelect:o,onClose:t}){let[n,i]=Xc(0);Kc((d,u)=>{u.escape&&t(),u.upArrow&&i(a=>Math.max(0,a-1)),u.downArrow&&i(a=>Math.min(e.length-1,a+1)),u.return&&e[n]&&o(e[n].id)});let r=Ce(2),l=10,c=0;if(e.length>l){let d=Math.floor(l/2);c=n-d,c<0?c=0:c+l>e.length&&(c=e.length-l)}let m=e.slice(c,c+l);return kt.createElement(jo,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",padding:0,width:"100%"},kt.createElement(jo,{paddingX:1,marginBottom:1},kt.createElement(an,{color:"cyan",bold:!0},"\u{1F504} CODEBASE TIME TRAVEL: SELECT UNDO POINT")),kt.createElement(jo,{paddingX:2,marginBottom:1},kt.createElement(an,null,"Select a prompt to revert the codebase back to the state ",kt.createElement(an,{bold:!0,color:"blue"},"immediately before")," it was executed:")),e.length===0?kt.createElement(jo,{paddingX:2,paddingY:1},kt.createElement(an,{italic:!0,color:"gray"},"No prompt checkpoints found for this session.")):kt.createElement(jo,{flexDirection:"column",width:"100%"},c>0&&kt.createElement(jo,{paddingX:2,marginBottom:1},kt.createElement(an,{color:"gray",dimColor:!0},"\u25B2 (+",c," more prompts above)")),m.map((d,u)=>{let f=c+u===n,p=Vc(d.timestamp),h=d.changes?d.changes.length:0;return kt.createElement(jo,{key:d.id,paddingX:1,backgroundColor:f?"#1a2a3a":void 0,width:"100%"},kt.createElement(jo,{flexGrow:1},kt.createElement(an,{color:f?"cyan":"white",bold:f},f?"\u276F ":" ",'"',qc(d.prompt),'"',kt.createElement(an,{color:"gray",dimColor:!f}," [",p," \u2022 ",h," file(s) changed]"))))}),c+l<e.length&&kt.createElement(jo,{paddingX:2,marginTop:1},kt.createElement(an,{color:"gray",dimColor:!0},"\u25BC (+",e.length-(c+l)," more prompts below)"))),kt.createElement(jo,{marginTop:1,paddingX:1,borderStyle:"single",borderLeft:!1,borderRight:!1,borderBottom:!1,borderColor:"cyan"},kt.createElement(an,{dimColor:!0,italic:!0},"\u2191\u2193 navigate \u2022 Enter select undo point \u2022 Esc close")))}function qc(e){if(!e)return"";let t=(e.split(`
|
|
527
|
+
`)[0]||"").replace(/@\[(.*?)\]/g,(n,i)=>{let r=i.replace(/\\/g,"/").split("/");return`[${r[r.length-1]}]`});return t.length>69?t.slice(0,67)+"...":e.includes(`
|
|
528
|
+
`)?t+"...":t}function Vc(e){if(!e)return"N/A";let o=new Date(e);if(isNaN(o.getTime()))return"N/A";let t=l=>String(l).padStart(2,"0"),n=t(o.getHours()),i=t(o.getMinutes()),r=t(o.getSeconds());return`${n}:${i}:${r}`}var pl=re(()=>{yn()});import zc from"puppeteer";import{exec as Jc}from"child_process";import{promisify as Qc}from"util";import Zc from"fs";var hl,gl,xl,yl=re(()=>{hl=Qc(Jc),gl=()=>{try{let e=zc.executablePath();if(e&&Zc.existsSync(e))return!0}catch{return!1}return!1},xl=async e=>{e&&e("\u{1F4E5} Downloading Chromium engine (chrome@148)...");try{try{await hl("pnpm exec puppeteer browsers install chrome@148")}catch{await hl("npx -y puppeteer browsers install chrome@148")}return await new Promise(o=>setTimeout(o,1e3)),{success:!0}}catch(o){return console.error("[SETUP ERROR]",o),{success:!1,error:o.message}}}});var Il={};Ts(Il,{default:()=>kl});import wl from"os";import s,{useState as K,useEffect as ao,useRef as Xo,useMemo as Or}from"react";import{Box as C,Text as y,useInput as ed,useStdout as td}from"ink";import to from"fs-extra";import Wn from"path";import{exec as Ai}from"child_process";import{fileURLToPath as od}from"url";import Tl from"ink-text-input";import nd from"gradient-string";function kl({args:e=[]}){let[o,t]=K(!1),[n,i]=K(10),{stdout:r}=td(),[l,c]=K(""),[m,d]=K(0),[u,a]=K(!1),[f,p]=K("Flux"),[h,T]=K({columns:r?.columns||80,rows:r?.rows||24}),[w,S]=K(0),[k,D]=K(!1),[U,j]=K(!1),[P,I]=K(0),A=Xo(null);ao(()=>{let x=fs()!=="IDE"||!!process.env.VSC_TERMINAL_URL,g=setTimeout(()=>{x&&!sr()&&j(!0)},500),M=setInterval(()=>{sr()&&j(!1)},1e3);return()=>{clearTimeout(g),clearInterval(M)}},[]);let v=Or(()=>{let x={};for(let g=0;g<e.length;g++){let M=e[g];if(M==="--model"&&e[g+1])x.model=e[g+1],g++;else if(M==="--memory"&&e[g+1])x.memory=e[g+1].toLowerCase(),g++;else if(M==="--resume"&&e[g+1])x.resume=e[g+1],g++;else if(M==="--update"&&e[g+1])x.update=e[g+1].toLowerCase(),g++;else if(M==="--package"&&e[g+1]){let B=e[g+1].toLowerCase();["npm","pnpm","yarn","bun"].includes(B)&&(x.package=B),g++}else if(M==="--auto-del"&&e[g+1]){let B=e[g+1].toLowerCase();["1d","7d","30d"].includes(B)&&(x.autoDel=B),g++}else if(M==="--auto-exec"&&e[g+1])x.autoExec=e[g+1].toLowerCase(),g++;else if(M==="--yolo"&&e[g+1])x.autoExec=e[g+1].toLowerCase(),g++;else if(M==="--external-access"&&e[g+1])x.externalAccess=e[g+1].toLowerCase(),g++;else if(M==="--mode"&&e[g+1]){let L=e[g+1].toLowerCase();if(["flux","flow"].includes(L)){let $="Flux";L==="flux"?$="Flux":L==="flow"&&($="Flow"),x.mode=$}g++}else if(M==="--thinking"&&e[g+1]){let L=e[g+1].toLowerCase();if(["fast","low","medium","high","xhigh"].includes(L)){let $="Medium";L==="fast"?$="Fast":L==="low"?$="Low":L==="medium"?$="Medium":L==="high"?$="High":L==="xhigh"&&($="xHigh"),x.thinking=$}g++}}return x},[e]),ee=async(x=!1,g=null)=>{let M=g||Ht;x&&N(B=>(J(B.length+1),[...B,{id:"check-"+Date.now(),role:"system",text:"\u{1F50D} Checking for updates...",isMeta:!0}]));try{let L=await(await fetch("https://registry.npmjs.org/fluxflow-cli",{cache:"no-store"})).json(),$=L["dist-tags"]?.latest,_=L["dist-tags"]?.stable;if($&&nt($),$&&$!==Ln){let b=$===_?`v${$}-stable`:`v${$}`;!x&&M.autoUpdate?Y("update"):N(O=>{let F=[...O],X=x?F.length:Math.min(F.length,3);return F.splice(X,0,{id:"update-"+Date.now(),role:"system",text:`A new version (${b}) is here.
|
|
535
529
|
|
|
536
530
|
\u2022 Type \`/update latest\` to apply the update.
|
|
537
|
-
\u2022 Type \`/changelog\` to view the release notes.`,isUpdateNotification:!0,isMeta:!0}),
|
|
531
|
+
\u2022 Type \`/changelog\` to view the release notes.`,isUpdateNotification:!0,isMeta:!0}),F})}else x&&N(b=>{J(b.length+1);let O=$&&$===_?`${Ln}-stable`:Ln;return[...b,{id:"uptodate-"+Date.now(),role:"system",text:`\u2705 [SYSTEM] Flux Flow is already up to date (${O}).`,isMeta:!0}]})}catch(B){x&&N(L=>(J(L.length+1),[...L,{id:"check-err-"+Date.now(),role:"system",text:`\u274C ERROR: Failed to check for updates: ${B.message}`,isMeta:!0}]))}};ao(()=>{let x=()=>{r.write("\x1Bc"),T({columns:r.columns,rows:r.rows})};return r.on("resize",x),()=>{r.off("resize",x)}},[r]);let[z,ue]=K("Medium"),[H,q]=K("Google"),[Re,Se]=K(0),[Ke,nt]=K(null),[me,ct]=K(!1),[qe,Ve]=K("gemma-4-31b-it"),[Pe,ze]=K("gemma-4-26b-a4b-it"),[ce,ho]=K(!0),[go,ln]=K(!0),oo=Xo(0),[Ae,gt]=K(null),[Ko,qo]=K(""),[Wt,Y]=K("chat"),[rt,Lr]=K("Free"),[Yt,Yn]=K({agentLimit:999999,backgroundLimit:999999,searchLimit:100,customModelId:"",customLimit:0}),[dt,ko]=K(null),[Ht,Q]=K({memory:!0,compression:0,autoExec:!1,autoDeleteHistory:"7d",autoUpdate:!1,updateManager:"npm",customUpdateCommand:""}),[Me,Oe]=K({name:null,nickname:null,instructions:null}),[ae,ye]=K({keyType:"Default",quality:"Low-High",apiKey:""}),[fe,It]=K({tokens:0}),[$o,xt]=K(0),[ut,We]=K(0),[ie,Bt]=K(0),[mt,xo]=K(0),[yt,cn]=K(0),[Ze,st]=K(0),[_t,Gt]=K(0),[Vo,ps]=K(0),[cr,Dr]=K(0),[Hn,hs]=K(0),[Gn,gs]=K(0),[dr,xs]=K(0),[ne,Be]=K(null),[_e,it]=K(Ws()),[wt,et]=K(null),[jt,yo]=K(""),[Xt,Lt]=K(!1),[no,Po]=K(0),Dn=Xo(!0),Ee=Xo(!0),Je=Xo(!0);ao(()=>{if(!Ae)return;if(Dn.current){Dn.current=!1,setTimeout(()=>{Ee.current=!1,setTimeout(()=>{Je.current=!1},1e3)},2e3);return}if(Ee.current||Je.current)return;let x=Ce(2),g="",M="";rt==="Free"?H==="Google"?(g="gemma-4-31b-it",M="Gemma 4 (Free default)"):H==="DeepSeek"?(g="deepseek-v4-flash",M="DeepSeek Flash (Free default)"):(g="google/gemma-4-31b-it:free",M="Gemma 4 (Free default)"):H==="Google"?(g="gemini-3-flash-preview",M="Gemini 3 Flash"):H==="DeepSeek"?(g="deepseek-v4-flash",M="DeepSeek Flash"):(g="deepseek/deepseek-v4-flash",M="DeepSeek Flash"),Ve(g),Rn({apiTier:rt,activeModel:g}),N(B=>(J(B.length+1),[...B,{id:"tier-switch-"+Date.now(),role:"system",text:`\u26A0\uFE0F${x}**[TIER LIMIT]** Auto-switched to ${M}.`,isMeta:!0}]))},[rt,H,Ae]);let lo=Or(()=>{let x=fs()!=="IDE"||!!process.env.VSC_TERMINAL_URL||!!process.env.INTELLIJ_TERMINAL_COMMAND_BLOCKS;return{isIDE:x,shortcut:x?"Shift + Enter":"Ctrl + Enter"}},[]),Fe=Xo(null),wo=Xo("");ao(()=>{Fe.current=wt},[wt]),ao(()=>{wo.current=jt},[jt]);let[dn,Li]=K(!1),[un,zo]=K(null),[jn,ur]=K(null),vr=x=>{let g=Math.floor(x/3600),M=Math.floor(x%3600/60),B=x%60,L=[];return g>0&&L.push(`${g}h`),(M>0||g>0)&&L.push(`${M}m`),L.push(`${B}s`),L.join(" ")},Fo=x=>x<1e3?`${x}ms`:vr(Math.floor(x/1e3)),[$r,Xn]=K(null),[mr,Kn]=K(!0),[mn,Pr]=K(!1),[Bo,fn]=K(!1),[qn,Fr]=K(null),[V,Ye]=K(0),[Tt,G]=K([]),Ge=Xo(null),[Kt,Le]=K(null),[_o,Jo]=K(null),[vn,St]=K(null);ao(()=>Ye(0),[l]);let[Dt,N]=K(()=>{let x={id:"logo-"+Date.now(),role:"system",text:lr,isLogo:!0,isMeta:!0},g={id:"welcome",role:"system",text:"\u{1F30A}\u26A1 Welcome to Flux Flow! Type /help for commands.",isMeta:!0},M=process.cwd()===wl.homedir(),B=(()=>{let $=process.cwd().toLowerCase();if(process.platform==="win32"){let _=process.env.SystemRoot?.toLowerCase()||"c:\\windows",b=process.env.ProgramFiles?.toLowerCase()||"c:\\program files",O=process.env["ProgramFiles(x86)"]?.toLowerCase()||"c:\\program files (x86)";return $.startsWith(_)||$.startsWith(b)||$.startsWith(O)}else return $==="/"||["/bin","/sbin","/etc","/usr","/var","/root"].some(b=>$.startsWith(b))})(),L=[x,g];return B?L.push({id:"system-warning",role:"system",text:"\u{1F6D1} [CRITICAL SECURITY ALERT] SYSTEM DIRECTORY DETECTED",subText:`You are currently in a PROTECTED SYSTEM DIRECTORY (${process.cwd()}). Operating here is EXTREMELY dangerous as the agent could accidentally corrupt your OS or installed applications. PLEASE MOVE TO A PROJECT FOLDER FOR SAFETY.`,isHomeWarning:!0,isMeta:!0}):M&&L.push({id:"home-warning",role:"system",text:"[SECURITY ALERT] HOME DIRECTORY DETECTED",subText:`You are currently in ${wl.homedir()}. Working here is high-risk as the agent may modify system-sensitive configurations. Please move to a project folder for safety.`,isHomeWarning:!0,isMeta:!0}),L}),Io=Xo(null),[ys,J]=K(Dt.length),Br=Or(()=>{let g=h.columns||80,M=0,B=0;for(let L=Dt.length-1;L>=0;L--){let $=Dt[L];if(!$)continue;let _=$.text||"",b=_.split(/\r?\n/).length;if(_.split(/\r?\n/).forEach(O=>{b+=Math.floor(O.length/g)}),$.isHelpRecord&&(b=15),$.isUpdateNotification&&(b=8),$.isTerminalRecord&&(b=10),b+=$.role==="think"?3:2,M+b>2e3){B=L+1;break}M+=b}return{items:Dt.slice(B,ys),isTruncated:B>0}},[Dt,h.columns,h.rows]),se=Or(()=>{if(!wt||!jt)return!1;let x=jt.trim();return x.endsWith("?")||x.endsWith(":")||/\[[yYnN/]+\]\s*$/.test(x)||/\([yYnN]\)\s*$/.test(x)},[wt,jt]);ed((x,g)=>{if(!(x==="\x1B[I"||x==="\x1B[O"||x==="[I"||x==="[O")){if(U){let M=fs(),B=bl(M);if(g.upArrow)I(L=>L>0?L-1:B.length-1);else if(g.downArrow)I(L=>L<B.length-1?L+1:0);else if(g.return){let L=B[P];if(L.action==="dismiss")j(!1);else if(L.url){let $=process.platform==="win32"?`start ${L.url}`:process.platform==="darwin"?`open ${L.url}`:`xdg-open ${L.url}`;Ai($),j(!1)}}return}if(g.tab&&wt){Lt(M=>!M);return}if(Xt&&wt){if(g.return){let M=process.platform==="win32";So(M?`\r
|
|
538
532
|
`:`
|
|
539
|
-
`),
|
|
540
|
-
`)}else if(g.backspace||g.delete)
|
|
541
|
-
`)}}),
|
|
533
|
+
`),To||yo(B=>B+`
|
|
534
|
+
`)}else if(g.backspace||g.delete)To?So("\x7F"):(So("\b \b"),yo(M=>M.slice(0,-1)));else if(g.upArrow)So(g.shift?"\x1B[1;2A":"\x1B[A");else if(g.downArrow)So(g.shift?"\x1B[1;2B":"\x1B[B");else if(g.rightArrow)So(g.shift?"\x1B[1;2C":"\x1B[C");else if(g.leftArrow)So(g.shift?"\x1B[1;2D":"\x1B[D");else if(g.escape)So("\x1B");else if(g.ctrl&&x){let M=x.toLowerCase().charCodeAt(0);M>=97&&M<=122?So(String.fromCharCode(M-96)):So(x)}else x&&(So(x),To||yo(M=>M+x));return}if(g.escape){if(be.length>0&&Wt==="chat"){D(!0);return}if(o){t(!1);return}if(mn||wt)Bo?(ol(),Xi(),fn(!1),qn&&clearTimeout(qn)):(fn(!0),qn&&clearTimeout(qn),Fr(setTimeout(()=>fn(!1),3e3)));else if(Wt==="revert")Y("chat"),Ye(0);else if(Wt!=="chat"&&Wt!=="settings")Y("chat");else{if(!Ae&&Re===1){Se(0),qo("");return}Ye(M=>{let B=M+1;return B===1?(Ge.current&&clearTimeout(Ge.current),Ge.current=setTimeout(()=>Ye(0),2e3)):B===2&&(Ge.current&&clearTimeout(Ge.current),Ye(0),l.length>0?c(""):Et.getChatHistory(_e).then(L=>{L.length>0?(G(L.reverse()),Y("revert")):N($=>(J($.length+1),[...$,{id:"revert-empty-"+Date.now(),role:"system",text:"\u{1F6C8} No revert checkpoints found for this session.",isMeta:!0}]))})),B})}}if(be.length>0&&Wt==="chat"){if(g.upArrow){S(M=>M>0?M-1:be.length-1);return}if(g.downArrow){S(M=>M<be.length-1?M+1:0);return}if(g.return)return}if(g.tab,g.ctrl&&x==="c"&&Wt!=="exit"){if(l.length>0){c("");return}if(g.shift){Y("exit"),t(!1);return}o?(Y("exit"),t(!1)):t(!0)}g.return&&(g.shift||g.ctrl||g.meta||g.leftAlt||g.rightAlt)&&c(M=>M.replace(/\\\r?$/,"").replace(/\r?$/,"")+`
|
|
535
|
+
`)}}),ao(()=>{process.stdout.write("\x1B[?1004h");let x=g=>{let M=g.toString();M.includes("\x1B[I")?(ln(!0),oo.current=Date.now()):M.includes("\x1B[O")&&(ln(!1),oo.current=Date.now())};return process.stdin.on("data",x),()=>{process.stdout.write("\x1B[?1004l"),process.stdin.off("data",x)}},[]),ao(()=>{async function x(){try{let $=JSON.parse(to.readFileSync(Wn.join(process.cwd(),"package.json"),"utf8"));pi(Ln||$.version||"2.0.0")}catch{pi("2.0.0")}process.stdout.isTTY&&process.stdout.write("\x1B]0;FluxFlow | Ready\x07"),gl()||(N($=>(J($.length+1),[...$,{id:"setup-"+Date.now(),role:"system",text:"\u{1F527} [SYSTEM] Installing Required dependencies... (One-time setup)",isMeta:!0}])),await xl(),N($=>(J($.length+1),[...$,{id:"setup-done-"+Date.now(),role:"system",text:"\u2705 [SYSTEM] All dependencies installed successfully.",isMeta:!0}])));let g=await kr();v.mode?p(v.mode):p(g.mode),v.thinking?ue(v.thinking):ue(g.thinkingLevel),q(g.aiProvider||"Google"),A.current=g.activeModel,v.model?Ve(v.model):Ve(g.activeModel),ct(g.showFullThinking),Lr(g.apiTier||"Free"),Yn(g.quotas||{agentLimit:999999,backgroundLimit:999999,searchLimit:100,customModelId:"",customLimit:0});let M={memory:!0,compression:0,autoExec:!1,autoDeleteHistory:"7d",autoUpdate:!1,updateManager:"npm",customUpdateCommand:"",...g.systemSettings||{}};v.memory==="on"?M.memory=!0:v.memory==="off"&&(M.memory=!1),v.package&&(M.updateManager=v.package),v.autoDel&&(M.autoDeleteHistory=v.autoDel),v.autoExec==="on"?M.autoExec=!0:v.autoExec==="off"&&(M.autoExec=!1),v.externalAccess==="on"?M.allowExternalAccess=!0:v.externalAccess==="off"&&(M.allowExternalAccess=!1),Q(M),Oe(g.profileData),ye(g.imageSettings||{keyType:"Default",quality:"Low-High",apiKey:""});let B=g.aiProvider||"Google",L=await Qr(B);if(L&&(gt(L),Ar(L)),g.systemSettings?.autoDeleteHistory&&ha(g.systemSettings.autoDeleteHistory),ga(Co),v.update==="check"?ee(!0,M):v.update==="latest"?(Y("update"),ee(!0,M)):ee(!1,M),await Ta(),v.resume){let $=await vo(),_=v.resume;if($[_]){it(_);let b=[...$[_].messages];b[0]?.text?.includes("\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557")||b.unshift({id:"welcome-"+Date.now(),role:"system",text:lr+`
|
|
542
536
|
|
|
543
|
-
\u{1F30A}\u26A1 Resuming Flux Flow Session...`,isMeta:!0}),
|
|
537
|
+
\u{1F30A}\u26A1 Resuming Flux Flow Session...`,isMeta:!0}),N(b),Y("chat"),N(F=>{let X=[...F,{id:"sys-"+Date.now(),role:"system",text:`\u{1F4E1} SESSION RESUMED VIA CLI: [${_}]`,isMeta:!0}];return J(X.length),X})}else N(b=>[...b,{id:"sys-err-"+Date.now(),role:"system",text:`\u274C ERROR: Chat session [${_}] not found. Started new session.`,isMeta:!0}])}ho(!1)}x()},[]),ao(()=>{let x;return o&&(i(10),x=setInterval(()=>{i(g=>g<=1?(t(!1),0):g-1)},1e3)),()=>{x&&clearInterval(x)}},[o]),ao(()=>{if(!ce){let x=v.model&&qe===v.model?A.current:qe;Rn({mode:f,thinkingLevel:z,aiProvider:H,activeModel:x||qe,showFullThinking:me,systemSettings:Ht,profileData:Me,imageSettings:ae,apiTier:rt})}},[f,z,H,qe,me,Ht,Me,ae,ce,v,rt]);let De=async x=>{let g=x.trim(),M=30;if(H==="OpenRouter"&&(M=10),H==="DeepSeek"&&(M=20),g.length>=M){await Zr(H,g),gt(g),Ar(g);let B="gemma-4-31b-it";H==="OpenRouter"?B="google/gemma-4-31b-it:free":H==="DeepSeek"&&(B="deepseek-v4-flash"),Ve(B),N(L=>[...L,{role:"system",text:`\u2705 ${H} API Key saved successfully! Model set to ${B}. Initialization complete.`,isMeta:!0}])}else N(B=>[...B,{role:"system",text:`\u274C INVALID KEY: ${H} API keys must be at least ${M} characters.`,isMeta:!0}]),qo("")},He=Xo(Oi);ao(()=>{if(Wt==="exit"){(async()=>{let M=Date.now(),B=Math.floor((M-He.current)/1e3);B>=1&&(await po("duration",B),He.current+=B*1e3),await Sa()})();let g=setTimeout(()=>{process.exit(0)},1700);return()=>clearTimeout(g)}},[Wt]),ao(()=>{let x=setInterval(async()=>{if(!ce){let g=Date.now(),M=Math.floor((g-He.current)/1e3);M>=1&&(await po("duration",M),He.current+=M*1e3)}},1500);return()=>clearInterval(x)},[ce]);let je=[{cmd:"/quit",desc:"Exit and shutdown Flux"},{cmd:"/help",desc:"Show all available commands"},{cmd:"/clear",desc:"Clear terminal screen"},{cmd:"/resume",desc:"Load previous session"},{cmd:"/revert",desc:"Revert codebase back to a checkpoint"},{cmd:"/save",desc:"Force save current chat"},{cmd:"/export",desc:"Export current chat in a .txt file"},{cmd:"/chats",desc:"List all chat sessions"},{cmd:"/image",desc:"Generate images using Pollinations",subs:[{cmd:"setup",desc:"Configure defaults",subs:[{cmd:"key",desc:"Set API key strategy",subs:[{cmd:"default",desc:"Default (Quota: Dynamic 25 max/hr)"},{cmd:"custom",desc:"Custom Key"}]},{cmd:"quality",desc:"Set default quality",subs:[{cmd:"low",desc:ae?.keyType==="Custom"?"(0.001/img)":"(1/img)"},{cmd:"low-high",desc:ae?.keyType==="Custom"?"(0.002/img)":"(2/img)"},{cmd:"medium",desc:ae?.keyType==="Custom"?"(0.008/img)":"(8/img)"},{cmd:"medium-high",desc:ae?.keyType==="Custom"?"(0.01/img)":"(10/img)"},{cmd:"high",desc:ae?.keyType==="Custom"?"(0.045/img)":"(45/img)"},{cmd:"ultra",desc:ae?.keyType==="Custom"?"(0.0488/img)":"(49/img)"},{cmd:"premium",desc:ae?.keyType==="Custom"?"(0.1/img)":"(100/img)"}]}]},{cmd:"stats",desc:"Show remaining credits or Pollinations balance status"}]},{cmd:"/mode",desc:"Toggle Flux/Flow modes",subs:[{cmd:"flux",desc:"Enable Dev toolset"},{cmd:"flow",desc:"Enable Chat mode"}]},{cmd:"/thinking",desc:"Set AI reasoning depth",subs:H==="DeepSeek"?[{cmd:"Fast",desc:"Fastest"},{cmd:"Standard",desc:"Standard Reasoning"},{cmd:"xHigh",desc:"Extended Reasoning"}]:H==="OpenRouter"?[{cmd:"Fast",desc:"Fastest"},{cmd:"Low",desc:"Quick Reasoning"},{cmd:"Medium",desc:"Balanced Reasoning"},{cmd:"High",desc:"Deep Reasoning"},{cmd:"xHigh",desc:"Extended Reasoning"}]:qe&&qe.toLowerCase().startsWith("gemini-3")?[{cmd:"Fast",desc:"Fastest"},{cmd:"Low",desc:"Quick Reasoning"},{cmd:"Medium",desc:"Balanced Reasoning"},{cmd:"High",desc:"Deep Reasoning"}]:[{cmd:"Fast",desc:"Fastest"},{cmd:"Low",desc:"Quick Reasoning"},{cmd:"Medium",desc:"Balanced Reasoning"},{cmd:"High",desc:"Deep Reasoning"},{cmd:"xHigh",desc:"Extended Reasoning"}]},{cmd:"/model",desc:"Switch Model for Agent",subs:H==="OpenRouter"?rt==="Free"?[{cmd:"google/gemma-4-31b-it:free",desc:"Multimodal"},{cmd:"moonshotai/kimi-k2.6:free",desc:"Multimodal"},{cmd:"qwen/qwen3-coder:free",desc:""},{cmd:"z-ai/glm-4.5-air:free",desc:""}]:[{cmd:"google/gemini-3.5-flash",desc:"Multimodal"},{cmd:"qwen/qwen3.7-plus",desc:"Multimodal"},{cmd:"minimax/minimax-m3",desc:"Multimodal"},{cmd:"anthropic/claude-sonnet-4.5",desc:"Multimodal"},{cmd:"anthropic/claude-opus-4.6",desc:"Multimodal"},{cmd:"anthropic/claude-opus-4.8",desc:"Multimodal"},{cmd:"deepseek/deepseek-v4-pro",desc:""},{cmd:"deepseek/deepseek-v4-flash",desc:""},{cmd:"xiaomi/mimo-v2.5-pro",desc:""},{cmd:"z-ai/glm-5",desc:""},{cmd:"openai/gpt-5.2-codex",desc:"Multimodal"},{cmd:"openai/gpt-5.2-pro",desc:"Multimodal"},{cmd:"openai/gpt-5.5-pro",desc:"Multimodal"},{cmd:"moonshotai/kimi-k2.6",desc:"Multimodal"}]:H==="DeepSeek"?[{cmd:"deepseek-v4-flash",desc:"Fast & Efficient"},{cmd:"deepseek-v4-pro",desc:"High-Intelligence Reasoning"}]:rt==="Free"?[{cmd:"gemma-4-31b-it",desc:"Standard Default"},{cmd:"gemini-2.5-flash",desc:"Fast & Reliable (Limited Free Quota)"},{cmd:"gemini-3-flash-preview",desc:"Fast & Lightweight (Limited Free Quota)"},{cmd:"gemini-3.5-flash",desc:"Flash Latest (Limited Free Quota) [Instability Issues]"}]:[{cmd:"gemini-2.5-flash",desc:"Fast & Reliable"},{cmd:"gemini-3.1-flash-lite",desc:"Ultra-Fast & Lite"},{cmd:"gemini-3-flash-preview",desc:"Default, Fast & Lightweight"},{cmd:"gemini-3.5-flash",desc:"Flash Latest [Instability Issues]"},{cmd:"gemini-3.1-pro-preview",desc:"Pro Reasoning"}]},{cmd:"/settings",desc:"Configure system prefs"},{cmd:"/key",desc:"Manage API keys"},{cmd:"/profile",desc:"Edit developer persona"},{cmd:"/memory",desc:"Manage agent memory"},{cmd:"/stats",desc:"Show session usage"},{cmd:"/reset",desc:"Wipe all project data"},{cmd:"/about",desc:"Project info & credits"},{cmd:"/changelog",desc:"View latest updates"},{cmd:"/fluxflow",desc:"Project management",subs:[{cmd:"init",desc:"Create FluxFlow.md template"}]},{cmd:"/update",desc:"Check/Install updates",subs:[{cmd:"check",desc:"Check for new version"},{cmd:"latest",desc:"Install latest release"}]}],ft=async(x,g=!1)=>{if(!g&&be.length>0){let L=be[w]||be[0],$=x.split(" ");if($.length===1)c(L.cmd+" ");else{let _=$.slice(0,-1);c(_.join(" ")+" "+L.cmd+" ")}S(0),d(_=>_+1);return}let M=x.replace(/\r\n/g,`
|
|
544
538
|
`).replace(/\r/g,`
|
|
545
|
-
`).trimEnd();if(
|
|
546
|
-
`);return}let
|
|
547
|
-
`).split(/\r?\n/).map(
|
|
548
|
-
`);if(
|
|
549
|
-
${
|
|
550
|
-
\u2022 Spent (Last 1hr): ${Number((
|
|
551
|
-
\u2022 Remaining: ${Number((
|
|
552
|
-
\u2022 Requests (Last 1hr): ${
|
|
553
|
-
`+(
|
|
554
|
-
`);try{
|
|
555
|
-
`);
|
|
556
|
-
${
|
|
557
|
-
\u{1F539} Status: ${
|
|
558
|
-
\u{1F539} Released on: ${
|
|
539
|
+
`).trimEnd();if(M.endsWith("\\")){c(M.slice(0,-1)+`
|
|
540
|
+
`);return}let B=M.replace(/\\\s*\n/g,`
|
|
541
|
+
`).split(/\r?\n/).map(L=>L.replace(/\\$/,"")).join(`
|
|
542
|
+
`);if(B.trim()){if(mn){let L=B.trim();if(L.startsWith("/")){N($=>(J($.length+1),[...$,{id:"hint-err-"+Date.now(),role:"system",text:"\u274C [RESTRICTED] Steering Hints cannot start with /",isMeta:!0}])),c("");return}Le(L),Io.current=L,N($=>(J($.length+1),[...$,{id:"hint-"+Date.now(),role:"user",text:`[STEERING HINT: QUEUED]
|
|
543
|
+
${L}`,color:"magenta"}])),c("");return}if(!Ae){De(B),qo("");return}if(B.startsWith("/")){let L=B.split(" "),$=L[0]?.toLowerCase();switch($){case"/quit":{Y("exit");break}case"/resume":{if(L[1]){let b=L[1];(async()=>{let F=await vo(),X=F[b]||Object.values(F).find(te=>te.name.toLowerCase()===b.toLowerCase());if(X){r.write("\x1B[2J\x1B[3J\x1B[H"),it(b);let te=[...X.messages];te[0]?.text?.includes("\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557")||(te.unshift({id:"welcome-"+Date.now(),role:"system",text:"\u{1F30A}\u26A1 Resuming Flux Flow Session...",isMeta:!0}),te.unshift({id:"logo-"+Date.now(),role:"system",text:lr,isLogo:!0,isMeta:!0})),N(te),N(pe=>[...pe,{id:"sys-"+Date.now(),role:"system",text:`\u{1F4E1} SESSION RESUMED: [${b}]`,isMeta:!0}]),J(0)}else N(te=>[...te,{id:"err-"+Date.now(),role:"system",text:`\u274C ERROR: Session [${b}] not found.`}])})()}else Y("resume");break}case"/clear":{N([{id:"logo-"+Date.now(),role:"system",text:lr,isLogo:!0,isMeta:!0},{id:"welcome-"+Date.now(),role:"system",text:"\u{1F30A}\u26A1 Welcome back to Flux Flow! Context cleared.",isMeta:!0}]),J(2),it(Ws()),It({tokens:0}),a(!1);break}case"/revert":{Et.getChatHistory(_e).then(b=>{if(b.length>0)G(b.reverse()),Y("revert");else{let O=Ce(2);N(F=>(J(F.length+1),[...F,{id:"revert-empty-"+Date.now(),role:"system",text:"No revert checkpoints found for this session.",isMeta:!0}]))}});break}case"/mode":{if(L[1]){let b=L[1].toLowerCase()==="flow"?"Flow":"Flux";p(b),b==="Flow"?ue("Fast"):b==="Flux"&&ue("High");let O=Ce(2);N(F=>(J(F.length+1),[...F,{id:Date.now(),role:"system",text:`\u{1F527}${O}[SYSTEM] Mode switched to ${b}`,isMeta:!0}]))}else Y("mode");break}case"/image":{if(L[1]?.toLowerCase()==="stats"){let b=Ce(2);if(ae.keyType==="Custom")N(O=>(J(O.length+1),[...O,{id:Date.now(),role:"system",text:`\u{1F517}${b}[SYSTEM] Key strategy is Custom. Redirecting to Pollinations dashboard (https://enter.pollinations.ai/#pollen)...`,isMeta:!0}])),Ai("start https://enter.pollinations.ai/#pollen");else try{let O=await ns();N(F=>(J(F.length+1),[...F,{id:Date.now(),role:"system",isImageStats:!0,text:`\u2022 Hourly Limit: ${Number((O.limit*1e3).toFixed(0))} credits
|
|
544
|
+
\u2022 Spent (Last 1hr): ${Number((O.totalSpent*1e3).toFixed(0))} credits
|
|
545
|
+
\u2022 Remaining: ${Number((O.remaining*1e3).toFixed(0))} credits
|
|
546
|
+
\u2022 Requests (Last 1hr): ${O.activeCallsCount} requests
|
|
547
|
+
`+(O.nextResetMin>0?`\u2022 Refreshes in: ${O.nextResetMin}m`:""),isMeta:!0}]))}catch{N(F=>(J(F.length+1),[...F,{id:Date.now(),role:"system",text:"\u274C [SYSTEM] Failed to load image quota stats.",isMeta:!0}]))}}else if(L[1]?.toLowerCase()==="setup")if(L[2]?.toLowerCase()==="key")if(L[3]){let b=["default","custom"].find(O=>O===L[3].toLowerCase());if(b){let O=b==="default"?"Default":"Custom";ye(X=>({...X,keyType:O}));let F=Ce(2);N(X=>(J(X.length+1),[...X,{id:Date.now(),role:"system",text:`\u{1F527}${F}[SYSTEM] Image key strategy set to ${O}`,isMeta:!0}])),O==="Custom"&&(ko({label:"Enter Pollinations API key (starting with sk_):",note:"Get a key from https://enter.pollinations.ai",key:"imageSettings",subKey:"apiKey",value:ae.apiKey||"",returnView:"chat"}),Y("input"))}else{let O=Ce(2);N(F=>(J(F.length+1),[...F,{id:Date.now(),role:"system",text:"\u274C [SYSTEM] Invalid key option. Choose: Default or Custom.",isMeta:!0}]))}}else{let b=Ce(2);N(O=>(J(O.length+1),[...O,{id:Date.now(),role:"system",text:"\u274C [SYSTEM] Usage: /image setup Key <Default|Custom>",isMeta:!0}]))}else if(L[2]?.toLowerCase()==="quality")if(L[3]){let b=["low","low-high","medium","medium-high","high","ultra","premium"].find(O=>O===L[3].toLowerCase());if(b){let F={low:"Low","low-high":"Low-High",medium:"Medium","medium-high":"Medium-High",high:"High",ultra:"Ultra",premium:"Premium"}[b];ye(te=>({...te,quality:F}));let X=Ce(2);N(te=>(J(te.length+1),[...te,{id:Date.now(),role:"system",text:`\u{1F527}${X}[SYSTEM] Image quality set to ${F}`,isMeta:!0}]))}else{let O=Ce(2);N(F=>(J(F.length+1),[...F,{id:Date.now(),role:"system",text:"\u274C [SYSTEM] Invalid quality level. Choose from: Low, Low-High, Medium, Medium-High, High, Ultra, Premium.",isMeta:!0}]))}}else{let b=Ce(2);N(O=>(J(O.length+1),[...O,{id:Date.now(),role:"system",text:"\u274C [SYSTEM] Usage: /image setup Quality <Low|Low-High|Medium|Medium-High|High|Ultra>",isMeta:!0}]))}else{let b=Ce(2);N(O=>(J(O.length+1),[...O,{id:Date.now(),role:"system",text:"\u274C [SYSTEM] Usage: /image setup <Key|Quality> ...",isMeta:!0}]))}else{let b=Ce(2);N(O=>(J(O.length+1),[...O,{id:Date.now(),role:"system",text:"\u274C [SYSTEM] Usage: /image setup <Key|Quality> ...",isMeta:!0}]))}break}case"/thinking":{let b;if(L[1]){let O=L[1].toLowerCase(),F=L.includes("--bypass");if(b=O.charAt(0).toUpperCase()+O.slice(1),O==="xhigh"&&(b="xHigh"),!F&&f==="Flow"&&(b==="Medium"||b==="High"||b==="xHigh"))N(X=>(J(X.length+1),[...X,{id:Date.now(),role:"system",text:`\u274C [RESTRICTED] "${b}" is restricted in Flow mode. Switch to Flux to enable Higher Thinking Levels.`,isMeta:!0}]));else{ue(b);let X=Ce(1);N(te=>(J(te.length+1),[...te,{id:Date.now(),role:"system",text:`\u{1F527} [SYSTEM] Thinking level set to ${b}${F?` (Bypass Activated \u{1F575}\uFE0F${X})`:""}`,isMeta:!0}]))}}else Y("thinking");break}case"/model":{if(L[1]){let b=L.slice(1).join(" ");if(b==="gemma-4-31b-it"&&rt!=="Free"&&H==="Google")N(O=>(J(O.length+1),[...O,{id:Date.now(),role:"system",text:"\u274C **[ACCESS DENIED]** Gemma is restricted to the Free API tier. Automatically switching you to **Gemini 3 Flash Preview** for optimal performance.",isMeta:!0}])),Ve("gemini-3-flash-preview");else{Ve(b);let O=Ce(2);N(F=>(J(F.length+1),[...F,{id:Date.now(),role:"system",text:`\u{1F527}${O}[SYSTEM] Model switched to ${b}`,isMeta:!0}]))}}else Y("model");break}case"/settings":{Y("settings");break}case"/key":{Y("key");break}case"/profile":{Y("profile");break}case"/stats":{(async()=>{let O=await kn();Be(O),Y("stats")})();break}case"/save":{let b=L.slice(1).join(" ")||`Session ${new Date().toLocaleTimeString()}`;ts(_e,b,Dt),N(O=>(J(O.length+1),[...O,{id:Date.now(),role:"system",text:`\u{1F4BE} [MEMORY] Chat saved as "${b}" (ID: ${_e})`,isMeta:!0}]));break}case"/export":{let b=`export-fluxflow-${_e}.txt`,O=Wn.join(process.cwd(),b),F=[],X=!1;for(let ve=0;ve<Dt.length;ve++){let pe=Dt[ve];if(pe&&!(pe.role==="system"||pe.isMeta||pe.isLogo||String(pe.id).startsWith("welcome"))){if(pe.role==="user"){let Ne=pe.text||"";Ne=Ne.replace(/\s*\[Prompted on:.*?\]/g,"").trim(),F.length>0&&F.push(""),F.push("[USER]"),F.push(Ne),X=!1}else if(pe.role==="think"){X||(F.push(""),F.push("[AGENT]"),X=!0);let Ne=(pe.text||"").replace(/\[turn:\s*continue\]/gi,"").replace(/\[turn:\s*finish\]/gi,"").replace(/\[TOOL RESULTS\]/gi,"").trim();Ne&&(F.push("[thoughts]"),F.push(Ne))}else if(pe.role==="agent"){X||(F.push(""),F.push("[AGENT]"),X=!0);let Ne=cd(pe.text||"");for(let he of Ne)if(he.type==="output"){let at=he.content.replace(/\[turn:\s*continue\]/gi,"").replace(/\[turn:\s*finish\]/gi,"").replace(/\[TOOL RESULTS\]/gi,"").trim();at&&(F.push("[output]"),F.push(at))}else he.type==="tool"&&(F.push("[tool]"),F.push(`${he.toolName} ${he.args}`))}}}let te=F.join(`
|
|
548
|
+
`);try{to.writeFileSync(O,te,"utf8"),N(ve=>(J(ve.length+1),[...ve,{id:Date.now(),role:"system",text:`\u{1F4E4} [EXPORT] Chat exported successfully to "${b}"`,isMeta:!0}]))}catch(ve){N(pe=>(J(pe.length+1),[...pe,{id:Date.now(),role:"system",text:`\u274C [EXPORT ERROR] Failed to export chat: ${ve.message}`,isMeta:!0}]))}break}case"/chats":{(async()=>{let O=await vo(),F=Object.entries(O).map(([X,te])=>`\u2022 ${X}: ${te.name}`).join(`
|
|
549
|
+
`);N(X=>(J(X.length+1),[...X,{id:Date.now(),role:"system",text:`\u{1F5C3}\uFE0F [HISTORY] Saved Chats:
|
|
550
|
+
${F||"No saved chats found."}`,isMeta:!0}]))})();break}case"/memory":{Y("memory");break}case"/reset":{(async()=>{try{N(O=>(J(O.length+1),[...O,{id:Date.now(),role:"system",text:"\u2622\uFE0F [NUCLEAR] Initiating reset...",isMeta:!0}])),to.existsSync(Co)&&to.removeSync(Co),to.existsSync(Zt)&&to.removeSync(Zt),to.existsSync(Qt)&&to.removeSync(Qt);try{to.readdirSync(Fn).length===0&&to.removeSync(Fn)}catch{}setTimeout(()=>{Y("exit"),setTimeout(()=>process.exit(0),500)},500)}catch(O){N(F=>(J(F.length+1),[...F,{id:Date.now(),role:"system",text:`\u274C [RESET ERROR] Failed to purge data: ${O.message}`}]))}})();break}case"/about":{let b=Ce(2),O=`\u{1F539} FluxFlow Version: v${Ln}
|
|
551
|
+
\u{1F539} Status: ${Ke&&Ke!==Ln?`Update Available [v${Ke}]`:"Up to date"}
|
|
552
|
+
\u{1F539} Released on: ${id}`;N(F=>(J(F.length+1),[...F,{id:"about-"+Date.now(),role:"system",text:O,isAboutRecord:!0,isMeta:!0}]));break}case"/changelog":{let b=process.platform;Ai(`${b==="win32"?"start":b==="darwin"?"open":"xdg-open"} ${Sl}`),N(F=>(J(F.length+1),[...F,{id:Date.now(),role:"system",text:`\u{1F310} [BROWSER] Opening changelog: ${Sl}`,isMeta:!0}]));break}case"/fluxflow":{if(L.slice(1)[0]==="init"){let O=`# FluxFlow Configuration
|
|
559
553
|
# This file defines project-specific instructions for the Flux Flow Agent.
|
|
560
554
|
|
|
561
555
|
# IDENTITY & TONE
|
|
@@ -570,32 +564,32 @@ ${B||"No saved chats found."}`,isMeta:!0}]))})();break}case"/memory":{G("memory"
|
|
|
570
564
|
|
|
571
565
|
# SKILLS & WORKFLOWS
|
|
572
566
|
- [Define custom step-by-step recipes for this project here]
|
|
573
|
-
`,
|
|
567
|
+
`,F=Wn.join(process.cwd(),"FluxFlow.md");if(to.pathExistsSync(F))N(X=>(J(X.length+1),[...X,{id:"init-err-"+Date.now(),role:"system",text:"\u274C ERROR: FluxFlow.md already exists in this directory.",isMeta:!0}]));else try{to.writeFileSync(F,O),N(X=>(J(X.length+1),[...X,{id:"init-ok-"+Date.now(),role:"system",text:"\u2705 [SUCCESS] FluxFlow.md has been initialized. You can now customize it for this project.",isMeta:!0}]))}catch(X){N(te=>(J(te.length+1),[...te,{id:"init-err-"+Date.now(),role:"system",text:`\u274C ERROR: Failed to initialize FluxFlow.md: ${X.message}`,isMeta:!0}]))}}else N(O=>(J(O.length+1),[...O,{id:"ff-err-"+Date.now(),role:"system",text:"\u2753 Usage: /fluxflow init",isMeta:!0}]));break}case"/update":{if(L[1]?.toLowerCase()==="check"){ee(!0);break}let O=L.includes("--latest");Y("update");break}case"/help":{N(b=>(J(b.length+1),[...b,{id:Date.now(),role:"system",isHelpRecord:!0,isMeta:!0}]));break}default:let _=Ce(2);N(b=>(J(b.length+1),[...b,{id:Date.now(),role:"system",text:`\u{1F527}${_}[SYSTEM] Unknown command: ${$}`,isMeta:!0}]))}}else{let L=`[Prompted on: ${new Date().toLocaleString()}]`,$={id:"user-"+Date.now(),role:"user",text:`${B}
|
|
574
568
|
|
|
575
|
-
${
|
|
569
|
+
${L}`};N(b=>(J(b.length+1),[...b,$])),(async()=>{let b=!1;Pr(!0),a(!1);let O=Date.now(),F=!0;try{let X=[...Dt,$].filter(R=>R.role!=="think"&&!R.isVisualFeedback&&!R.isMeta&&!String(R.id).startsWith("welcome")),te=[];X.forEach((R,le)=>{let we=R.fullText||R.text;if(R.role==="user"&&le<X.length-1){let $e=we.lastIndexOf("[USER]");$e!==-1&&(we=we.substring($e+6).trim())}if(R.role==="system"&&we?.startsWith("[TOOL RESULT]")){let $e=te[te.length-1];if($e&&$e.role==="system"&&$e.text?.startsWith("[TOOL RESULT]")){$e.text+=`
|
|
576
570
|
|
|
577
|
-
`+we;return}}te.push({...R,text:we})});let
|
|
571
|
+
`+we;return}}te.push({...R,text:we})});let ve=sl(qe,te,{profile:Me,thinkingLevel:z,mode:f,systemSettings:Ht,janitorModel:Pe,sessionStats:fe,chatId:_e,aiProvider:H,apiKey:Ae,apiTier:rt,cols:h.columns-6,rows:30,onExecStart:R=>{et(R),yo("")},onExecChunk:R=>{yo(le=>le+R)},onExecEnd:()=>{N(R=>{if(!Fe.current)return R;let le=wo.current||"",we="";if(To){let Mt=/\x1b\[H|\x1b\[2J|\x1b\[3J|\x1bc/g,de=[...le.matchAll(Mt)],ge=le;if(de.length>0){let ot=de[de.length-1];ge=le.substring(ot.index+ot[0].length)}we=ge.replace(/\r+\n/g,`
|
|
578
572
|
`).split(`
|
|
579
|
-
`).map(
|
|
573
|
+
`).map(ot=>{let pt=ot.split("\r");return pt[pt.length-1]}).join(`
|
|
580
574
|
`)}else we=le.replace(/\r\n/g,`
|
|
581
|
-
`);let
|
|
582
|
-
COMMAND: ${
|
|
583
|
-
PTY: ${
|
|
575
|
+
`);let $e=`[TERMINAL_RECORD]
|
|
576
|
+
COMMAND: ${Fe.current}
|
|
577
|
+
PTY: ${To}
|
|
584
578
|
OUTPUT: ${we.replace(/\n{3,}/g,`
|
|
585
579
|
|
|
586
|
-
`)}`;return[...R,{id:"term-"+Date.now(),role:"system",text
|
|
587
|
-
Selection: ${
|
|
588
|
-
`),ge=0,
|
|
589
|
-
`),pt=!1;for(let Qt of nt){if(Qt.includes("Old File contents:")){pt=!0;continue}pt&&(Qt.trim()===""?pt=!1:/^\d+ \|/.test(Qt)&&ot++)}}ai+=ge,li+=ot,yo("linesAdded",ge),yo("linesRemoved",ot)}continue}let le=R.content,we=le.toLowerCase();if(le.includes("```")&&(lt=!lt),we.includes("tool:functions.")&&(Po=!0,Jt=0,ho=null,le.includes("[tool:functions.")&&(Jt=0)),Po){for(let ue=0;ue<le.length;ue++){let ge=le[ue];!ho&&(ge==="'"||ge==='"'||ge==="`")?ho=ge:ho&&ge===ho&&le[ue-1]!=="\\"&&(ho=null),ho||(ge==="("||ge==="["?Jt++:(ge===")"||ge==="]")&&Jt--)}Jt<=0&&!ho&&(Po=!1)}if((we.includes("<think")||we.includes("<thought"))&&(!he&&!lt&&!Po&&!Bo)&&(he=!0,Bo=!0,le=le.replace(/<(think|thought)>[\s\S]*?<\/(think|thought)>/gi,"").replace(/<(think|thought)>/gi,""),Ne="think-"+Date.now(),U(ue=>[...ue,{id:Ne,role:"think",text:"",isStreaming:!0,startTime:Date.now()}])),(we.includes("</think>")||we.includes("</thought>"))&&Ne){let ue=le.split(/<\/(think|thought)>/gi),ge=ue[0]||"",ot=ue.slice(2).join("").replace(/<\/?(think|thought)>/gi,"");U(nt=>{let pt=nt.map(Qt=>{if(Qt.id===Ne&&typeof Qt.id=="string"){let Ts=Qt.startTime||parseInt(Qt.id.split("-")[1])||Date.now(),pi=Date.now()-Ts;return{...Qt,text:Qt.text+ge,isStreaming:!1,duration:pi}}return Qt});return he=!1,pe="agent-"+Date.now(),[...pt,{id:pe,role:"agent",text:ot,isStreaming:!0}]});continue}if(he&&Ne)U(ue=>{let ge=!1,ot="",nt=ue.map(pt=>{if(pt.id===Ne){let Qt=pt.text+le;if(Qt.toLowerCase().includes("</think>")){ge=!0;let Ts=Qt.split(/<\/think>/gi);ot=Ts.slice(1).join("</think>")||"";let pi=pt.startTime||parseInt(pt.id.split("-")[1])||Date.now(),Ju=Date.now()-pi;return{...pt,text:Ts[0],isStreaming:!1,duration:Ju}}return{...pt,text:Qt,isStreaming:!0}}return pt});return ge?(he=!1,pe="agent-"+Date.now(),[...nt,{id:pe,role:"agent",text:ot.replace(/<\/?(think|thought)>/gi,""),isStreaming:!0}]):nt});else if(!he){let ue=le.toLowerCase();!In&&ue.includes("tool:functions.")&&(In=!0),pe?U(ge=>ge.map(ot=>ot.id===pe?{...ot,text:ot.text+le,isStreaming:!0}:ot)):(pe="agent-"+Date.now(),U(ge=>[...ge,{id:pe,role:"agent",text:le,isStreaming:!0}]))}}let gr=Date.now();hs(R=>R+(gr-v))}catch(X){U(te=>(J(te.length+1),[...te,{id:"error-"+Date.now(),role:"system",text:`\u274C ERROR: ${X.message}`}]))}finally{if(xs(!1),mr(null),b||process.stdout.isTTY&&process.stdout.write("\x1B]0;FluxFlow | Idle\x07"),Do.current){an(Do.current),Le(null);let X=Do.current;Do.current=null,U(te=>{let Ae=[...te],he=Ae.reverse().find(Ne=>Ne.text?.includes("[STEERING HINT: QUEUED]"));return he&&(he.text=he.text.replace("[STEERING HINT: QUEUED]","[STEERING HINT: FINISHED_TURN]")),Ae.reverse()}),G("resolution")}U(X=>{let te=Date.now()-v,Ae=!1,he=[...X].reverse().map(pe=>{let lt=pe.isStreaming?{...pe,isStreaming:!1}:pe;return!Ae&<.role==="agent"&&(Ae=!0,lt={...lt,workedDuration:te}),lt}).reverse(),Ne=he.filter(pe=>!String(pe.id).startsWith("welcome")&&!pe.isMeta);return Ns($e,null,Ne),J(he.length),he})}})()}c(""),l(!1)}},be=fs(()=>{if(i.startsWith("/")&&!_){let O=i.split(" "),F=O[O.length-1].toLowerCase();if(O.length===1){let D=F.startsWith("/")?F.slice(1):F;return He.filter($=>($.cmd.startsWith("/")?$.cmd.slice(1):$.cmd).toLowerCase().includes(D))}let A=He;for(let D=0;D<O.length-1;D++){let $=O[D].toLowerCase(),b=A.find(v=>v.cmd.toLowerCase()===$);if(b&&b.subs)A=b.subs;else return[]}return A.filter(D=>D.cmd.toLowerCase().includes(F))}let y=i.split(" "),g=y[y.length-1];if(g&&g.startsWith("@")&&!_){let O=g.indexOf("#"),F=O!==-1,A=F?g.substring(1,O).toLowerCase():g.slice(1).toLowerCase(),D=F?g.substring(O):"";return dh(process.cwd()).filter(v=>v.name.toLowerCase().includes(A)).map(v=>{let B=v.relativePath.replace(/\\/g,"/");return{cmd:"@["+(B.startsWith(".")?B:"./"+B)+D+"]",desc:v.relativePath}})}return[]},[i,_]);uo(()=>{S(0)},[be]);let mo=()=>{switch(Yt){case"settings":return a.createElement(Oi,{systemSettings:Xt,setSystemSettings:Q,apiTier:st,setActiveView:G,setInputConfig:Ao,saveSettings:or,quotas:Ht,setMessages:U,aiProvider:Y});case"selectProvider":return a.createElement(lo,{title:"SELECT AI PROVIDER",items:[{label:"Google (Free/Paid)",value:"Google"},{label:"DeepSeek (Paid)",value:"DeepSeek"},{label:"OpenRouter (Free/Paid) [EXPERIMENTAL]",value:"OpenRouter"},{label:"Back",value:"settings"}],onSelect:async y=>{if(y.value==="settings"||y.value==="Back"){G("settings");return}let g=y.value,O=await Bs(g);if(O){K(g),yt(O),ds(O);let F="gemma-4-31b-it";g==="OpenRouter"?F="google/gemma-4-31b-it:free":g==="DeepSeek"&&(F="deepseek-v4-flash"),Ve(F),or({aiProvider:g,activeModel:F,apiTier:st,quotas:Ht}),U(A=>[...A,{role:"system",text:`\u2705 Switched to ${g}! Key loaded from Vault. Model set to ${F}.`,isMeta:!0}]),G("settings")}else Ao({label:`Enter ${g} API Key:`,key:"providerKey",provider:g,value:"",returnView:"settings"}),G("input")},onClose:()=>G("settings")});case"apiTier":return a.createElement(lo,{title:a.createElement(T,null,"SELECT YOUR CURRENT API TIER BASED ON ",a.createElement(T,{color:"cyan",underline:!0,bold:!0},"\x1B]8;;https://aistudio.google.com/projects\x07AI STUDIO\x1B]8;;\x07"),". (CURRENT: ",st.toUpperCase(),")"),items:[{label:"Free Tier (Gemini API Free Tier)",value:"Free"},{label:"Paid Tier (API with Billing Account)",value:"Paid"},{label:"Back",value:"settings"}],onSelect:y=>{if(y.value==="settings"||y.value==="Back"){G("settings");return}let g=y.value;ms(g),g==="Paid"?(Ao({label:"Enter Agent daily budget (requests made):",key:"quotas",subKey:"agentLimit",value:String(Ht.agentLimit)}),G("input")):(or({apiTier:g,quotas:Ht}),G("settings"))},onClose:()=>G("settings")});case"input":return a.createElement(C,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},a.createElement(C,{paddingX:1},a.createElement(T,{color:"magenta",bold:!0},"\u{1F527} DATA CONFIGURATION")),dt?.note&&a.createElement(C,{paddingX:1,marginBottom:1},a.createElement(T,{color:"yellow",dimColor:!0,italic:!0},dt.note)),a.createElement(C,{paddingX:1,flexDirection:"row"},a.createElement(T,{color:"cyan",bold:!0},dt?.label," "),a.createElement(Gu,{value:dt?.value||"",onChange:y=>Ao(g=>({...g,value:y})),onSubmit:async y=>{let{key:g,subKey:O,next:F}=dt,A={...Ht},D={};if(g==="quotas"){let $=O.toLowerCase().includes("limit")?parseInt(y)||0:y;A[O]=$,cr(A),D.quotas=A}else if(g==="activeModel")Ve(y),D.activeModel=y;else if(g==="janitorModel")ze(y),D.janitorModel=y;else if(g==="autoApproveCommands"||g==="autoDisallowCommands"||g==="alwaysAskCommands"){let $={...Xt,[g]:y.trim(),sandboxPreset:"Custom"};Q($),D.systemSettings=$}else if(g==="externalDataPath"){let $={...Xt,useExternalData:!0,externalDataPath:y.trim()};Q($),D.systemSettings=$,U(b=>[...b,{id:Date.now(),role:"system",text:"\u{1F4C1} [EXTERNAL STORAGE] Flux Flow will use "+y.trim()+" for data after restart."}])}else if(g==="imageSettings"){let $=y.trim();if($.startsWith("sk_")){let b={...ae,apiKey:$};ye(b),D.imageSettings=b,U(v=>(J(v.length+1),[...v,{id:Date.now(),role:"system",text:"\u{1F511} [IMAGE KEY] Custom API key saved successfully.",isMeta:!0}]))}else ye(b=>({...b,keyType:"Default"})),D.imageSettings={...ae,keyType:"Default"},U(b=>(J(b.length+1),[...b,{id:Date.now(),role:"system",text:"\u274C [IMAGE KEY ERROR] API key must start with sk_. Key strategy reset to Default.",isMeta:!0}]))}else if(g==="providerKey"){let $=y.trim(),b=dt.provider;await Fs(b,$),K(b),yt($),ds($);let v="gemma-4-31b-it";b==="OpenRouter"?v="google/gemma-4-31b-it:free":b==="DeepSeek"&&(v="deepseek-v4-flash"),Ve(v),D.aiProvider=b,D.activeModel=v,U(B=>(J(B.length+1),[...B,{id:Date.now(),role:"system",text:`\u2705 ${b} API Key saved successfully! Model set to ${v}.`,isMeta:!0}]))}F?Ao(F(g==="quotas"?A:y)):(or({...D,apiTier:st,quotas:A,imageSettings:D.imageSettings||ae}),Ao(null),G(dt?.returnView||"settings"))}})),a.createElement(C,{paddingX:1,marginTop:1},a.createElement(T,{color:"gray",dimColor:!0,italic:!0},"(Press Enter to confirm selection)")));case"stats":return a.createElement(C,{flexDirection:"column",borderStyle:"round",paddingX:3,paddingY:1,width:Math.min(100,(s?.columns||100)-2)},a.createElement(C,{marginBottom:1},a.createElement(T,{color:"white",bold:!0,underline:!0},"SESSION TELEMETRY")),a.createElement(C,{flexDirection:"column"},a.createElement(C,null,a.createElement(C,{width:25},a.createElement(T,{color:"blue"},"Session Duration:")),a.createElement(T,{color:"white"},jo(Date.now()-qa))),a.createElement(C,null,a.createElement(C,{width:25},a.createElement(T,{color:"blue"},"Agent Interactions:")),a.createElement(T,{color:"white"},Wo)),a.createElement(C,{marginLeft:2},a.createElement(C,{width:23},a.createElement(T,{color:"blue",dimColor:!0},"\xBB API Time:")),a.createElement(T,{color:"white"},jo(Ur))),a.createElement(C,{marginLeft:2},a.createElement(C,{width:23},a.createElement(T,{color:"blue",dimColor:!0},"\xBB Tool Time:")),a.createElement(T,{color:"white"},jo(ur))),a.createElement(C,null,a.createElement(C,{width:25},a.createElement(T,{color:"blue"},"Background Tasks:")),a.createElement(T,{color:"white"},ft)),a.createElement(C,null,a.createElement(C,{width:25},a.createElement(T,{color:"blue"},"Tokens Consumed:")),a.createElement(T,{color:"white"},Zt(ie))),ie>0&&a.createElement(a.Fragment,null,a.createElement(C,{marginLeft:2},a.createElement(C,{width:23},a.createElement(T,{color:"blue",dimColor:!0},"\xBB Input Tokens:")),a.createElement(T,{color:"white"},Zt(ie-Tt))),mt>0&&a.createElement(C,{marginLeft:4},a.createElement(C,{width:21},a.createElement(T,{color:"blue",dimColor:!0},"\xBB Cached:")),a.createElement(T,{color:"white"},Zt(mt))),Tt>0&&a.createElement(C,{marginLeft:2},a.createElement(C,{width:23},a.createElement(T,{color:"blue",dimColor:!0},"\xBB Output Tokens:")),a.createElement(T,{color:"white"},Zt(Tt)))),dr>0&&a.createElement(a.Fragment,null,a.createElement(C,null,a.createElement(C,{width:25},a.createElement(T,{color:"blue"},"Images Made:")),a.createElement(T,{color:"white"},dr)),a.createElement(C,null,a.createElement(C,{width:25},a.createElement(T,{color:"blue"},"Image Credits:")),a.createElement(T,{color:"white"},Number(((Rr||0)*1e3).toFixed(0))," credits"))),a.createElement(C,null,a.createElement(C,{width:25},a.createElement(T,{color:"blue"},"Code Changes (Sess):")),a.createElement(T,{color:"white"},a.createElement(T,{color:"green"},"+",ai)," ",a.createElement(T,{color:"red"},"-",li))),a.createElement(C,null,a.createElement(C,{width:25},a.createElement(T,{color:"blue"},"Tool Calls (Sess):")),a.createElement(T,{color:"white"},et+Rt+rn," ( "),a.createElement(T,{color:"green"},"\u2713 ",et),a.createElement(T,{color:"white"}," "),a.createElement(T,{color:"yellow"},"\u2298 ",rn),a.createElement(T,{color:"white"}," "),a.createElement(T,{color:"red"},"\u2715 ",Rt),a.createElement(T,{color:"white"}," )"))),a.createElement(C,{flexDirection:"column",marginTop:1},a.createElement(T,{color:"white",bold:!0,underline:!0},"DAILY USAGE TRACKER"),a.createElement(C,{marginTop:1},a.createElement(C,{width:25},a.createElement(T,{color:"blue"},"Wall Time Today:")),a.createElement(T,{color:"white"},ps(re?.duration||0))),a.createElement(C,null,a.createElement(C,{width:25},a.createElement(T,{color:"blue"},"Agent Interactions:")),a.createElement(T,{color:"white"},re?.agent||0)),a.createElement(C,null,a.createElement(C,{width:25},a.createElement(T,{color:"blue"},"Background Tasks:")),a.createElement(T,{color:"white"},re?.background||0)),a.createElement(C,null,a.createElement(C,{width:25},a.createElement(T,{color:"blue"},"Tokens Used Today:")),a.createElement(T,{color:"white"},Zt(re?.tokens||0))),(re?.tokens||0)>0&&a.createElement(a.Fragment,null,a.createElement(C,{marginLeft:2},a.createElement(C,{width:23},a.createElement(T,{color:"blue",dimColor:!0},"\xBB Input Tokens:")),a.createElement(T,{color:"white"},Zt((re?.tokens||0)-(re?.candidateTokens||0)))),(re?.cachedTokens||0)>0&&a.createElement(C,{marginLeft:4},a.createElement(C,{width:21},a.createElement(T,{color:"blue",dimColor:!0},"\xBB Cached:")),a.createElement(T,{color:"white"},Zt(re.cachedTokens))),(re?.candidateTokens||0)>0&&a.createElement(C,{marginLeft:2},a.createElement(C,{width:23},a.createElement(T,{color:"blue",dimColor:!0},"\xBB Output Tokens:")),a.createElement(T,{color:"white"},Zt(re.candidateTokens)))),(re?.imageCalls?.length||0)>0&&a.createElement(a.Fragment,null,a.createElement(C,null,a.createElement(C,{width:25},a.createElement(T,{color:"blue"},"Images Made Today:")),a.createElement(T,{color:"white"},re.imageCalls.length)),a.createElement(C,null,a.createElement(C,{width:25},a.createElement(T,{color:"blue"},"Image Credits Today:")),a.createElement(T,{color:"white"},Number(((re.imageCalls.reduce((y,g)=>y+g.cost,0)||0)*1e3).toFixed(0))," credits"))),a.createElement(C,null,a.createElement(C,{width:25},a.createElement(T,{color:"blue"},"Code Changes Today:")),a.createElement(T,{color:"white"},a.createElement(T,{color:"green"},"+",re?.linesAdded||0)," ",a.createElement(T,{color:"red"},"-",re?.linesRemoved||0))),a.createElement(C,null,a.createElement(C,{width:25},a.createElement(T,{color:"blue"},"Tool Calls Today:")),a.createElement(T,{color:"white"},(re?.toolSuccess||0)+(re?.toolFailure||0)+(re?.toolDenied||0)," ( "),a.createElement(T,{color:"green"},"\u2713 ",re?.toolSuccess||0),a.createElement(T,{color:"white"}," "),a.createElement(T,{color:"yellow"},"\u2298 ",re?.toolDenied||0),a.createElement(T,{color:"white"}," "),a.createElement(T,{color:"red"},"\u2715 ",re?.toolFailure||0),a.createElement(T,{color:"white"}," )"))),a.createElement(T,{dimColor:!0,marginTop:1,italic:!0},"(Press ESC to return to chat)"));case"autoExecDanger":return a.createElement(C,{flexDirection:"column",borderStyle:"round",borderColor:"yellow",paddingX:2,paddingY:1,width:"100%"},a.createElement(T,{color:"yellow",bold:!0,underline:!0},"\u26A0\uFE0F SECURITY WARNING: YOLO MODE"),a.createElement(T,{marginTop:1},"Turning this ON allows the agent to execute terminal commands automatically without requiring your approval for each step."),a.createElement(T,{marginTop:1,color:"yellow"},"RISKS INVOLVED:"),a.createElement(T,null,"\u2022 The agent may execute destructive commands (rm -rf, etc.) by mistake."),a.createElement(T,null,"\u2022 Unintended system changes if the agent hallucinates a path or command."),a.createElement(T,null,"\u2022 Reduced control over the agent's step-by-step decision making."),a.createElement(C,{marginTop:1},a.createElement(lo,{title:"Confirm Intent",items:[{label:"I know the risk and turning on intentionally",value:"on"},{label:"Keep Off (Recommended)",value:"off"}],onSelect:y=>{y.value==="on"&&Q(g=>({...g,autoExec:!0})),G("settings")}})));case"externalDanger":return a.createElement(C,{flexDirection:"column",borderStyle:"round",borderColor:"red",paddingX:2,paddingY:1,width:"100%"},a.createElement(T,{color:"red",bold:!0,underline:!0},"\u26A0\uFE0F SECURITY WARNING: EXTERNAL WORKSPACE ACCESS"),a.createElement(T,{marginTop:1},"Turning this ON allows the agent to execute tools (Read/Write/Exec) outside of the current active workspace directory."),a.createElement(T,{marginTop:1,color:"yellow"},"RISKS INVOLVED:"),a.createElement(T,null,"\u2022 Access to sensitive system files (SSH keys, Browser data, etc.)"),a.createElement(T,null,"\u2022 Potential for accidental or malicious deletion of OS-critical files."),a.createElement(T,null,"\u2022 Unauthorized script execution across your entire file system."),a.createElement(C,{marginTop:1},a.createElement(lo,{title:"Confirm Intent",items:[{label:"I know the risk and turning on intentionally",value:"on"},{label:"Keep Off (Recommended)",value:"off"}],onSelect:y=>{y.value==="on"&&Q(g=>({...g,allowExternalAccess:!0})),G("settings")}})));case"doubleDanger":return a.createElement(C,{flexDirection:"column",borderStyle:"round",borderColor:"red",paddingX:2,paddingY:1,width:"100%"},a.createElement(T,{color:"red",bold:!0,underline:!0},"\u26D4 CRITICAL SECURITY WARNING: COMBINED SYSTEM RISK"),a.createElement(T,{marginTop:1},"You are attempting to enable BOTH [YOLO Mode] and [External Workspace Access] simultaneously."),a.createElement(T,{marginTop:1,color:"red",bold:!0},"THIS IS NOT RECOMMENDED."),a.createElement(T,{marginTop:1,color:"yellow"},"THE CRITICAL RISK:"),a.createElement(T,null,"The agent will have the power to execute any command across your entire system WITHOUT your approval or supervision."),a.createElement(T,{color:"red",italic:!0,marginTop:1},"A single hallucination or error could result in full system wipe or data theft."),a.createElement(C,{marginTop:1},a.createElement(lo,{title:"Final Confirmation",items:[{label:"I agree knowing the consequences",value:"on"},{label:"Keep Off",value:"off"}],onSelect:y=>{y.value==="on"&&Q(g=>({...g,autoExec:!0,allowExternalAccess:!0})),G("settings")}})));case"key":return a.createElement(lo,{title:"\u{1F511} API KEY MANAGEMENT",items:[{label:"Edit Current Key (Update)",value:"edit"},{label:"Remove Current Key (Purge)",value:"remove"},{label:"Cancel",value:"Cancel"}],onSelect:y=>{if(y.value==="edit"){yt(null),G("chat");let g=Ce(2);U(O=>[...O,{id:Date.now(),role:"system",text:`\u{1F511}${g}[ACTION] Flux waiting for new API Key...`}])}else y.value==="remove"?G("deleteKey"):G("chat")}});case"deleteKey":return a.createElement(C,{flexDirection:"column",borderStyle:"round",borderColor:"red",paddingX:2,paddingY:1},(()=>{let y=Ce(2);return a.createElement(T,{color:"red",bold:!0},"\u26D4",y,"DANGER: PURGE API KEY")})(),a.createElement(T,{marginTop:1},"This will permanently delete the saved API key from the project vault. You will need to enter it again to use Flux."),a.createElement(C,{marginTop:1},a.createElement(lo,{title:"Are you absolutely sure?",items:[{label:"YES, PURGE KEY",value:"yes"},{label:"NO, GO BACK",value:"no"}],onSelect:async y=>{if(y.value==="yes"){await Di(),yt(null),G("chat");let g=Ce(2);U(O=>[...O,{id:Date.now(),role:"system",text:`\u2728${g}[VAULT PURGED] API Key removed successfully.`}])}else G("key")}})));case"exit":return null;case"ask":return a.createElement(C,{width:"100%"},a.createElement(pl,{question:fr?.question,options:fr?.options,onResolve:y=>{fr?.resolve&&fr.resolve(y),Wr(null),G("chat")}}));case"revert":return a.createElement(C,{width:"100%",alignItems:"center",justifyContent:"center"},a.createElement(Ha,{prompts:Et,onSelect:async y=>{try{let g=await Ct.rollbackToBefore(y);if(g.success){let{targetPrompt:O}=g,F=Pt.findIndex(b=>b.role==="user"&&b.text&&(b.text.startsWith(O)||b.text.includes(O))),A=[...Pt];F!==-1&&(A=Pt.slice(0,F)),U(A),J(A.length),c(O),l(O.split(`
|
|
590
|
-
`).length>2);let
|
|
580
|
+
`)}`;return[...R,{id:"term-"+Date.now(),role:"system",text:$e,isTerminalRecord:!0}]}),et(null),Lt(!1),yo("")},onToolResult:(R,le)=>{if(R==="success"){if(st(we=>we+1),le==="generate_image"){gs(Mt=>Mt+1);let $e={Low:.001,"Low-High":.002,Medium:.008,"Medium-High":.01,High:.045,Ultra:.0488,Premium:.1}[ae.quality]||.002;xs(Mt=>Mt+$e)}}else R==="denied"?ps(we=>we+1):Gt(we=>we+1)},onToolApproval:async(R,le)=>{let we=dn||Ht.autoExec;if(R==="exec_command"){let{command:$e}=oe(le||"{}");return we||$e&&/^(echo|ls|dir|pwd|cd|git status|git log|git diff|type|cat|help)\b/i.test($e.trim())?"allow":new Promise(de=>{zo({tool:R,args:le,resolve:de}),Y("terminalApproval")})}return we?"allow":new Promise($e=>{zo({tool:R,args:le,resolve:$e}),Y("approval")})},onAskUser:async(R,le)=>new Promise(we=>{ur({question:R,options:le,resolve:$e=>{N(Mt=>[...Mt,{id:"ask-"+Date.now(),role:"system",text:`\u{1F4AC} **Ask User**
|
|
581
|
+
Selection: ${$e}`,isAskRecord:!0}]),we($e)}}),Y("ask")})},async()=>{if(Io.current){let R=Io.current;return Le(null),Io.current=null,N(le=>{let we=[...le].reverse().findIndex($e=>$e.text?.includes("[STEERING HINT: QUEUED]"));if(we!==-1){let $e=le.length-1-we,Mt=[...le];return Mt[$e]={...Mt[$e],text:Mt[$e].text.replace("[STEERING HINT: QUEUED]","[STEERING HINT: INJECTED]"),color:"cyan"},Mt}return le}),R}return null},Ln),pe=!1,Ne=null,he=null,at=!1,Mo=!1,Ao=!1,pn=!1,qt=0,uo=null,hn=/\[?\s*turn\s*:\s*.*?\s*\]?/gi;for await(let R of ve){if(F&&R.type==="text"&&(O=Date.now(),F=!1),R.type==="status"){Xn(R.content);continue}if(R.type==="status_history"){Xn(R.content),N(de=>[...de,{id:"condense-"+Date.now(),role:"system",text:`\u2699\uFE0F [SYSTEM] ${R.content}`,isMeta:!0}]);continue}if(R.type==="spinner"){Kn(R.content);continue}if(R.type==="model_update"){St(R.content);continue}if(R.type==="turn_reset"){Ne=null,he=null,pe=!1,at=!1,Mo=!1,pn=!1,Ao=!1;continue}if(R.type==="interactive_turn_finished"){Pr(!1),b=!0,nl({profile:Me,thinkingLevel:z,mode:f,janitorModel:Pe,chatId:_e,systemSettings:Ht,sessionStats:fe,aiProvider:H,apiKey:Ae},R.data.agentText,R.data.fullAgentTextRaw,R.data.history,{onMemoryUpdated:()=>N(de=>{let ge=[...de];return ge.length>0&&(ge[ge.length-1].memoryUpdated=!0),ge}),onBackgroundIncrement:()=>We(de=>de+1)});continue}if(R.type==="visual_feedback"){N(de=>[...de,{id:"feedback-"+Date.now(),role:"system",text:R.content,isVisualFeedback:!0}]);continue}if(R.type==="exec_start")continue;if(R.type==="liveTokens"){It({tokens:R.content});continue}if(R.type==="usage"){let de=R.content.totalTokenCount||0,ge=R.content.cachedContentTokenCount||0,tt=R.content.candidatesTokenCount||0;It({tokens:de}),Bt(ot=>ot+de),ge>0&&xo(ot=>ot+ge),tt>0&&cn(ot=>ot+tt),xt(ot=>ot+1);continue}if(R.type==="tool_time"){hs(de=>de+R.content);continue}if(R.type==="tool_result"){if(N(de=>[...de,{id:"tool-"+Date.now(),role:"system",text:R.content,fullText:R.aiContent,binaryPart:R.binaryPart,toolName:R.toolName}]),R.toolName==="update_file"&&R.aiContent){let de=R.aiContent.split(`
|
|
582
|
+
`),ge=0,tt=0,ot=!1;for(let pt of de){if(pt.includes("[DIFF_START]")){ot=!0;continue}if(pt.includes("[DIFF_END]")){ot=!1;continue}ot&&(/^\+\d+/.test(pt)?ge++:/^\-\d+/.test(pt)&&tt++)}us+=ge,ms+=tt,po("linesAdded",ge),po("linesRemoved",tt)}else if(R.toolName==="write_file"&&R.aiContent){let de=R.aiContent.match(/- Stats: \[(\d+) lines/),ge=de?parseInt(de[1]):0,tt=0;if(R.aiContent.includes("Old File contents:")){let ot=R.aiContent.split(`
|
|
583
|
+
`),pt=!1;for(let Vt of ot){if(Vt.includes("Old File contents:")){pt=!0;continue}pt&&(Vt.trim()===""?pt=!1:/^\d+ \|/.test(Vt)&&tt++)}}us+=ge,ms+=tt,po("linesAdded",ge),po("linesRemoved",tt)}continue}let le=R.content,we=le.toLowerCase();if(le.includes("```")&&(at=!at),we.includes("tool:functions.")&&(Mo=!0,qt=0,uo=null,le.includes("[tool:functions.")&&(qt=0)),Mo){for(let de=0;de<le.length;de++){let ge=le[de];!uo&&(ge==="'"||ge==='"'||ge==="`")?uo=ge:uo&&ge===uo&&le[de-1]!=="\\"&&(uo=null),uo||(ge==="("||ge==="["?qt++:(ge===")"||ge==="]")&&qt--)}qt<=0&&!uo&&(Mo=!1)}if((we.includes("<think")||we.includes("<thought"))&&(!pe&&!at&&!Mo&&!Ao)&&(pe=!0,Ao=!0,le=le.replace(/<(think|thought)>[\s\S]*?<\/(think|thought)>/gi,"").replace(/<(think|thought)>/gi,""),Ne="think-"+Date.now(),N(de=>[...de,{id:Ne,role:"think",text:"",isStreaming:!0,startTime:Date.now()}])),(we.includes("</think>")||we.includes("</thought>"))&&Ne){let de=le.split(/<\/(think|thought)>/gi),ge=de[0]||"",tt=de.slice(2).join("").replace(/<\/?(think|thought)>/gi,"");N(ot=>{let pt=ot.map(Vt=>{if(Vt.id===Ne&&typeof Vt.id=="string"){let _r=Vt.startTime||parseInt(Vt.id.split("-")[1])||Date.now(),ws=Date.now()-_r;return{...Vt,text:Vt.text+ge,isStreaming:!1,duration:ws}}return Vt});return pe=!1,he="agent-"+Date.now(),[...pt,{id:he,role:"agent",text:tt,isStreaming:!0}]});continue}if(pe&&Ne)N(de=>{let ge=!1,tt="",ot=de.map(pt=>{if(pt.id===Ne){let Vt=pt.text+le;if(Vt.toLowerCase().includes("</think>")){ge=!0;let _r=Vt.split(/<\/think>/gi);tt=_r.slice(1).join("</think>")||"";let ws=pt.startTime||parseInt(pt.id.split("-")[1])||Date.now(),Ol=Date.now()-ws;return{...pt,text:_r[0],isStreaming:!1,duration:Ol}}return{...pt,text:Vt,isStreaming:!0}}return pt});return ge?(pe=!1,he="agent-"+Date.now(),[...ot,{id:he,role:"agent",text:tt.replace(/<\/?(think|thought)>/gi,""),isStreaming:!0}]):ot});else if(!pe){let de=le.toLowerCase();!pn&&de.includes("tool:functions.")&&(pn=!0),he?N(ge=>ge.map(tt=>tt.id===he?{...tt,text:tt.text+le,isStreaming:!0}:tt)):(he="agent-"+Date.now(),N(ge=>[...ge,{id:he,role:"agent",text:le,isStreaming:!0}]))}}let Vn=Date.now();Dr(R=>R+(Vn-O))}catch(X){N(te=>(J(te.length+1),[...te,{id:"error-"+Date.now(),role:"system",text:`\u274C ERROR: ${X.message}`}]))}finally{if(Pr(!1),Xn(null),b||process.stdout.isTTY&&process.stdout.write("\x1B]0;FluxFlow | Idle\x07"),Io.current){Jo(Io.current),Le(null);let X=Io.current;Io.current=null,N(te=>{let ve=[...te],pe=ve.reverse().find(Ne=>Ne.text?.includes("[STEERING HINT: QUEUED]"));return pe&&(pe.text=pe.text.replace("[STEERING HINT: QUEUED]","[STEERING HINT: FINISHED_TURN]")),ve.reverse()}),Y("resolution")}N(X=>{let te=Date.now()-O,ve=!1,pe=[...X].reverse().map(he=>{let at=he.isStreaming?{...he,isStreaming:!1}:he;return!ve&&at.role==="agent"&&(ve=!0,at={...at,workedDuration:te}),at}).reverse(),Ne=pe.filter(he=>!String(he.id).startsWith("welcome")&&!he.isMeta);return ts(_e,null,Ne),J(pe.length),pe})}})()}c(""),a(!1)}},be=Or(()=>{if(l.startsWith("/")&&!k){let M=l.split(" "),B=M[M.length-1].toLowerCase();if(M.length===1){let $=B.startsWith("/")?B.slice(1):B;return je.filter(_=>(_.cmd.startsWith("/")?_.cmd.slice(1):_.cmd).toLowerCase().includes($))}let L=je;for(let $=0;$<M.length-1;$++){let _=M[$].toLowerCase(),b=L.find(O=>O.cmd.toLowerCase()===_);if(b&&b.subs)L=b.subs;else return[]}return L.filter($=>$.cmd.toLowerCase().includes(B))}let x=l.split(" "),g=x[x.length-1];if(g&&g.startsWith("@")&&!k){let M=g.indexOf("#"),B=M!==-1,L=B?g.substring(1,M).toLowerCase():g.slice(1).toLowerCase(),$=B?g.substring(M):"";return dd(process.cwd()).filter(O=>O.name.toLowerCase().includes(L)).map(O=>{let F=O.relativePath.replace(/\\/g,"/");return{cmd:"@["+(F.startsWith(".")?F:"./"+F)+$+"]",desc:O.relativePath}})}return[]},[l,k]);ao(()=>{S(0)},[be]);let co=()=>{switch(Wt){case"settings":return s.createElement(Ds,{systemSettings:Ht,setSystemSettings:Q,apiTier:rt,setActiveView:Y,setInputConfig:ko,saveSettings:Rn,quotas:Yt,setMessages:N,aiProvider:H});case"selectProvider":return s.createElement(so,{title:"SELECT AI PROVIDER",items:[{label:"Google (Free/Paid)",value:"Google"},{label:"DeepSeek (Paid)",value:"DeepSeek"},{label:"OpenRouter (Free/Paid) [EXPERIMENTAL]",value:"OpenRouter"},{label:"Back",value:"settings"}],onSelect:async x=>{if(x.value==="settings"||x.value==="Back"){Y("settings");return}let g=x.value,M=await Qr(g);if(M){q(g),gt(M),Ar(M);let B="gemma-4-31b-it";g==="OpenRouter"?B="google/gemma-4-31b-it:free":g==="DeepSeek"&&(B="deepseek-v4-flash"),Ve(B),Rn({aiProvider:g,activeModel:B,apiTier:rt,quotas:Yt}),N(L=>[...L,{role:"system",text:`\u2705 Switched to ${g}! Key loaded from Vault. Model set to ${B}.`,isMeta:!0}]),Y("settings")}else ko({label:`Enter ${g} API Key:`,key:"providerKey",provider:g,value:"",returnView:"settings"}),Y("input")},onClose:()=>Y("settings")});case"apiTier":return s.createElement(so,{title:s.createElement(y,null,"SELECT YOUR CURRENT API TIER BASED ON ",s.createElement(y,{color:"cyan",underline:!0,bold:!0},"\x1B]8;;https://aistudio.google.com/projects\x07AI STUDIO\x1B]8;;\x07"),". (CURRENT: ",rt.toUpperCase(),")"),items:[{label:"Free Tier (Gemini API Free Tier)",value:"Free"},{label:"Paid Tier (API with Billing Account)",value:"Paid"},{label:"Back",value:"settings"}],onSelect:x=>{if(x.value==="settings"||x.value==="Back"){Y("settings");return}let g=x.value;Lr(g),g==="Paid"?(ko({label:"Enter Agent daily budget (requests made):",key:"quotas",subKey:"agentLimit",value:String(Yt.agentLimit)}),Y("input")):(Rn({apiTier:g,quotas:Yt}),Y("settings"))},onClose:()=>Y("settings")});case"input":return s.createElement(C,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},s.createElement(C,{paddingX:1},s.createElement(y,{color:"magenta",bold:!0},"\u{1F527} DATA CONFIGURATION")),dt?.note&&s.createElement(C,{paddingX:1,marginBottom:1},s.createElement(y,{color:"yellow",dimColor:!0,italic:!0},dt.note)),s.createElement(C,{paddingX:1,flexDirection:"row"},s.createElement(y,{color:"cyan",bold:!0},dt?.label," "),s.createElement(Tl,{value:dt?.value||"",onChange:x=>ko(g=>({...g,value:x})),onSubmit:async x=>{let{key:g,subKey:M,next:B}=dt,L={...Yt},$={};if(g==="quotas"){let _=M.toLowerCase().includes("limit")?parseInt(x)||0:x;L[M]=_,Yn(L),$.quotas=L}else if(g==="activeModel")Ve(x),$.activeModel=x;else if(g==="janitorModel")ze(x),$.janitorModel=x;else if(g==="autoApproveCommands"||g==="autoDisallowCommands"||g==="alwaysAskCommands"){let _={...Ht,[g]:x.trim(),sandboxPreset:"Custom"};Q(_),$.systemSettings=_}else if(g==="externalDataPath"){let _={...Ht,useExternalData:!0,externalDataPath:x.trim()};Q(_),$.systemSettings=_,N(b=>[...b,{id:Date.now(),role:"system",text:"\u{1F4C1} [EXTERNAL STORAGE] Flux Flow will use "+x.trim()+" for data after restart."}])}else if(g==="imageSettings"){let _=x.trim();if(_.startsWith("sk_")){let b={...ae,apiKey:_};ye(b),$.imageSettings=b,N(O=>(J(O.length+1),[...O,{id:Date.now(),role:"system",text:"\u{1F511} [IMAGE KEY] Custom API key saved successfully.",isMeta:!0}]))}else ye(b=>({...b,keyType:"Default"})),$.imageSettings={...ae,keyType:"Default"},N(b=>(J(b.length+1),[...b,{id:Date.now(),role:"system",text:"\u274C [IMAGE KEY ERROR] API key must start with sk_. Key strategy reset to Default.",isMeta:!0}]))}else if(g==="providerKey"){let _=x.trim(),b=dt.provider;await Zr(b,_),q(b),gt(_),Ar(_);let O="gemma-4-31b-it";b==="OpenRouter"?O="google/gemma-4-31b-it:free":b==="DeepSeek"&&(O="deepseek-v4-flash"),Ve(O),$.aiProvider=b,$.activeModel=O,N(F=>(J(F.length+1),[...F,{id:Date.now(),role:"system",text:`\u2705 ${b} API Key saved successfully! Model set to ${O}.`,isMeta:!0}]))}B?ko(B(g==="quotas"?L:x)):(Rn({...$,apiTier:rt,quotas:L,imageSettings:$.imageSettings||ae}),ko(null),Y(dt?.returnView||"settings"))}})),s.createElement(C,{paddingX:1,marginTop:1},s.createElement(y,{color:"gray",dimColor:!0,italic:!0},"(Press Enter to confirm selection)")));case"stats":return s.createElement(C,{flexDirection:"column",borderStyle:"round",paddingX:3,paddingY:1,width:Math.min(100,(r?.columns||100)-2)},s.createElement(C,{marginBottom:1},s.createElement(y,{color:"white",bold:!0,underline:!0},"SESSION TELEMETRY")),s.createElement(C,{flexDirection:"column"},s.createElement(C,null,s.createElement(C,{width:25},s.createElement(y,{color:"blue"},"Session Duration:")),s.createElement(y,{color:"white"},Fo(Date.now()-Oi))),s.createElement(C,null,s.createElement(C,{width:25},s.createElement(y,{color:"blue"},"Agent Interactions:")),s.createElement(y,{color:"white"},$o)),s.createElement(C,{marginLeft:2},s.createElement(C,{width:23},s.createElement(y,{color:"blue",dimColor:!0},"\xBB API Time:")),s.createElement(y,{color:"white"},Fo(cr))),s.createElement(C,{marginLeft:2},s.createElement(C,{width:23},s.createElement(y,{color:"blue",dimColor:!0},"\xBB Tool Time:")),s.createElement(y,{color:"white"},Fo(Hn))),s.createElement(C,null,s.createElement(C,{width:25},s.createElement(y,{color:"blue"},"Background Tasks:")),s.createElement(y,{color:"white"},ut)),s.createElement(C,null,s.createElement(C,{width:25},s.createElement(y,{color:"blue"},"Tokens Consumed:")),s.createElement(y,{color:"white"},zt(ie))),ie>0&&s.createElement(s.Fragment,null,s.createElement(C,{marginLeft:2},s.createElement(C,{width:23},s.createElement(y,{color:"blue",dimColor:!0},"\xBB Input Tokens:")),s.createElement(y,{color:"white"},zt(ie-yt))),mt>0&&s.createElement(C,{marginLeft:4},s.createElement(C,{width:21},s.createElement(y,{color:"blue",dimColor:!0},"\xBB Cached:")),s.createElement(y,{color:"white"},zt(mt))),yt>0&&s.createElement(C,{marginLeft:2},s.createElement(C,{width:23},s.createElement(y,{color:"blue",dimColor:!0},"\xBB Output Tokens:")),s.createElement(y,{color:"white"},zt(yt)))),Gn>0&&s.createElement(s.Fragment,null,s.createElement(C,null,s.createElement(C,{width:25},s.createElement(y,{color:"blue"},"Images Made:")),s.createElement(y,{color:"white"},Gn)),s.createElement(C,null,s.createElement(C,{width:25},s.createElement(y,{color:"blue"},"Image Credits:")),s.createElement(y,{color:"white"},Number(((dr||0)*1e3).toFixed(0))," credits"))),s.createElement(C,null,s.createElement(C,{width:25},s.createElement(y,{color:"blue"},"Code Changes (Sess):")),s.createElement(y,{color:"white"},s.createElement(y,{color:"green"},"+",us)," ",s.createElement(y,{color:"red"},"-",ms))),s.createElement(C,null,s.createElement(C,{width:25},s.createElement(y,{color:"blue"},"Tool Calls (Sess):")),s.createElement(y,{color:"white"},Ze+_t+Vo," ( "),s.createElement(y,{color:"green"},"\u2713 ",Ze),s.createElement(y,{color:"white"}," "),s.createElement(y,{color:"yellow"},"\u2298 ",Vo),s.createElement(y,{color:"white"}," "),s.createElement(y,{color:"red"},"\u2715 ",_t),s.createElement(y,{color:"white"}," )"))),s.createElement(C,{flexDirection:"column",marginTop:1},s.createElement(y,{color:"white",bold:!0,underline:!0},"DAILY USAGE TRACKER"),s.createElement(C,{marginTop:1},s.createElement(C,{width:25},s.createElement(y,{color:"blue"},"Wall Time Today:")),s.createElement(y,{color:"white"},vr(ne?.duration||0))),s.createElement(C,null,s.createElement(C,{width:25},s.createElement(y,{color:"blue"},"Agent Interactions:")),s.createElement(y,{color:"white"},ne?.agent||0)),s.createElement(C,null,s.createElement(C,{width:25},s.createElement(y,{color:"blue"},"Background Tasks:")),s.createElement(y,{color:"white"},ne?.background||0)),s.createElement(C,null,s.createElement(C,{width:25},s.createElement(y,{color:"blue"},"Tokens Used Today:")),s.createElement(y,{color:"white"},zt(ne?.tokens||0))),(ne?.tokens||0)>0&&s.createElement(s.Fragment,null,s.createElement(C,{marginLeft:2},s.createElement(C,{width:23},s.createElement(y,{color:"blue",dimColor:!0},"\xBB Input Tokens:")),s.createElement(y,{color:"white"},zt((ne?.tokens||0)-(ne?.candidateTokens||0)))),(ne?.cachedTokens||0)>0&&s.createElement(C,{marginLeft:4},s.createElement(C,{width:21},s.createElement(y,{color:"blue",dimColor:!0},"\xBB Cached:")),s.createElement(y,{color:"white"},zt(ne.cachedTokens))),(ne?.candidateTokens||0)>0&&s.createElement(C,{marginLeft:2},s.createElement(C,{width:23},s.createElement(y,{color:"blue",dimColor:!0},"\xBB Output Tokens:")),s.createElement(y,{color:"white"},zt(ne.candidateTokens)))),(ne?.imageCalls?.length||0)>0&&s.createElement(s.Fragment,null,s.createElement(C,null,s.createElement(C,{width:25},s.createElement(y,{color:"blue"},"Images Made Today:")),s.createElement(y,{color:"white"},ne.imageCalls.length)),s.createElement(C,null,s.createElement(C,{width:25},s.createElement(y,{color:"blue"},"Image Credits Today:")),s.createElement(y,{color:"white"},Number(((ne.imageCalls.reduce((x,g)=>x+g.cost,0)||0)*1e3).toFixed(0))," credits"))),s.createElement(C,null,s.createElement(C,{width:25},s.createElement(y,{color:"blue"},"Code Changes Today:")),s.createElement(y,{color:"white"},s.createElement(y,{color:"green"},"+",ne?.linesAdded||0)," ",s.createElement(y,{color:"red"},"-",ne?.linesRemoved||0))),s.createElement(C,null,s.createElement(C,{width:25},s.createElement(y,{color:"blue"},"Tool Calls Today:")),s.createElement(y,{color:"white"},(ne?.toolSuccess||0)+(ne?.toolFailure||0)+(ne?.toolDenied||0)," ( "),s.createElement(y,{color:"green"},"\u2713 ",ne?.toolSuccess||0),s.createElement(y,{color:"white"}," "),s.createElement(y,{color:"yellow"},"\u2298 ",ne?.toolDenied||0),s.createElement(y,{color:"white"}," "),s.createElement(y,{color:"red"},"\u2715 ",ne?.toolFailure||0),s.createElement(y,{color:"white"}," )"))),s.createElement(y,{dimColor:!0,marginTop:1,italic:!0},"(Press ESC to return to chat)"));case"autoExecDanger":return s.createElement(C,{flexDirection:"column",borderStyle:"round",borderColor:"yellow",paddingX:2,paddingY:1,width:"100%"},s.createElement(y,{color:"yellow",bold:!0,underline:!0},"\u26A0\uFE0F SECURITY WARNING: YOLO MODE"),s.createElement(y,{marginTop:1},"Turning this ON allows the agent to execute terminal commands automatically without requiring your approval for each step."),s.createElement(y,{marginTop:1,color:"yellow"},"RISKS INVOLVED:"),s.createElement(y,null,"\u2022 The agent may execute destructive commands (rm -rf, etc.) by mistake."),s.createElement(y,null,"\u2022 Unintended system changes if the agent hallucinates a path or command."),s.createElement(y,null,"\u2022 Reduced control over the agent's step-by-step decision making."),s.createElement(C,{marginTop:1},s.createElement(so,{title:"Confirm Intent",items:[{label:"I know the risk and turning on intentionally",value:"on"},{label:"Keep Off (Recommended)",value:"off"}],onSelect:x=>{x.value==="on"&&Q(g=>({...g,autoExec:!0})),Y("settings")}})));case"externalDanger":return s.createElement(C,{flexDirection:"column",borderStyle:"round",borderColor:"red",paddingX:2,paddingY:1,width:"100%"},s.createElement(y,{color:"red",bold:!0,underline:!0},"\u26A0\uFE0F SECURITY WARNING: EXTERNAL WORKSPACE ACCESS"),s.createElement(y,{marginTop:1},"Turning this ON allows the agent to execute tools (Read/Write/Exec) outside of the current active workspace directory."),s.createElement(y,{marginTop:1,color:"yellow"},"RISKS INVOLVED:"),s.createElement(y,null,"\u2022 Access to sensitive system files (SSH keys, Browser data, etc.)"),s.createElement(y,null,"\u2022 Potential for accidental or malicious deletion of OS-critical files."),s.createElement(y,null,"\u2022 Unauthorized script execution across your entire file system."),s.createElement(C,{marginTop:1},s.createElement(so,{title:"Confirm Intent",items:[{label:"I know the risk and turning on intentionally",value:"on"},{label:"Keep Off (Recommended)",value:"off"}],onSelect:x=>{x.value==="on"&&Q(g=>({...g,allowExternalAccess:!0})),Y("settings")}})));case"doubleDanger":return s.createElement(C,{flexDirection:"column",borderStyle:"round",borderColor:"red",paddingX:2,paddingY:1,width:"100%"},s.createElement(y,{color:"red",bold:!0,underline:!0},"\u26D4 CRITICAL SECURITY WARNING: COMBINED SYSTEM RISK"),s.createElement(y,{marginTop:1},"You are attempting to enable BOTH [YOLO Mode] and [External Workspace Access] simultaneously."),s.createElement(y,{marginTop:1,color:"red",bold:!0},"THIS IS NOT RECOMMENDED."),s.createElement(y,{marginTop:1,color:"yellow"},"THE CRITICAL RISK:"),s.createElement(y,null,"The agent will have the power to execute any command across your entire system WITHOUT your approval or supervision."),s.createElement(y,{color:"red",italic:!0,marginTop:1},"A single hallucination or error could result in full system wipe or data theft."),s.createElement(C,{marginTop:1},s.createElement(so,{title:"Final Confirmation",items:[{label:"I agree knowing the consequences",value:"on"},{label:"Keep Off",value:"off"}],onSelect:x=>{x.value==="on"&&Q(g=>({...g,autoExec:!0,allowExternalAccess:!0})),Y("settings")}})));case"key":return s.createElement(so,{title:"\u{1F511} API KEY MANAGEMENT",items:[{label:"Edit Current Key (Update)",value:"edit"},{label:"Remove Current Key (Purge)",value:"remove"},{label:"Cancel",value:"Cancel"}],onSelect:x=>{if(x.value==="edit"){gt(null),Y("chat");let g=Ce(2);N(M=>[...M,{id:Date.now(),role:"system",text:`\u{1F511}${g}[ACTION] Flux waiting for new API Key...`}])}else x.value==="remove"?Y("deleteKey"):Y("chat")}});case"deleteKey":return s.createElement(C,{flexDirection:"column",borderStyle:"round",borderColor:"red",paddingX:2,paddingY:1},(()=>{let x=Ce(2);return s.createElement(y,{color:"red",bold:!0},"\u26D4",x,"DANGER: PURGE API KEY")})(),s.createElement(y,{marginTop:1},"This will permanently delete the saved API key from the project vault. You will need to enter it again to use Flux."),s.createElement(C,{marginTop:1},s.createElement(so,{title:"Are you absolutely sure?",items:[{label:"YES, PURGE KEY",value:"yes"},{label:"NO, GO BACK",value:"no"}],onSelect:async x=>{if(x.value==="yes"){await Bs(),gt(null),Y("chat");let g=Ce(2);N(M=>[...M,{id:Date.now(),role:"system",text:`\u2728${g}[VAULT PURGED] API Key removed successfully.`}])}else Y("key")}})));case"exit":return null;case"ask":return s.createElement(C,{width:"100%"},s.createElement(Ji,{question:jn?.question,options:jn?.options,onResolve:x=>{jn?.resolve&&jn.resolve(x),ur(null),Y("chat")}}));case"revert":return s.createElement(C,{width:"100%",alignItems:"center",justifyContent:"center"},s.createElement(Mi,{prompts:Tt,onSelect:async x=>{try{let g=await Et.rollbackToBefore(x);if(g.success){let{targetPrompt:M}=g,B=Dt.findIndex(b=>b.role==="user"&&b.text&&(b.text.startsWith(M)||b.text.includes(M))),L=[...Dt];B!==-1&&(L=Dt.slice(0,B)),N(L),J(L.length),c(M),a(M.split(`
|
|
584
|
+
`).length>2);let $=L.filter(b=>!String(b.id).startsWith("welcome")&&!b.isMeta);await ts(_e,null,$);let _=Ce(2);N(b=>{let O=[...b,{id:"revert-ok-"+Date.now(),role:"system",text:`\u{1F504}${_}[TIME TRAVEL] Codebase rolled back successfully! Reverted prompt loaded to input box.`,isMeta:!0}];return J(O.length),O}),Y("chat")}}catch(g){let M=Ce(2);N(B=>{let L=[...B,{id:"revert-err-"+Date.now(),role:"system",text:`\u274C${M}[TIME TRAVEL ERROR] Failed to rollback: ${g.message}`,isMeta:!0}];return J(L.length),L}),Y("chat")}},onClose:()=>Y("chat")}));case"resume":return s.createElement(C,{width:"100%",alignItems:"center",justifyContent:"center"},s.createElement(Ci,{onSelect:async x=>{let g=await vo();if(g[x]){r.write("\x1B[2J\x1B[3J\x1B[H"),it(x);let M=[...g[x].messages];M[0]?.text?.includes("\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557")||M.unshift({id:"welcome-"+Date.now(),role:"system",text:lr+`
|
|
591
585
|
|
|
592
|
-
\u{1F30A}\u26A1 Resuming Flux Flow Session...`,isMeta:!0}),
|
|
593
|
-
\u{1F680} **Restart Flux Flow to see changes.**`,isMeta:!0}])),
|
|
586
|
+
\u{1F30A}\u26A1 Resuming Flux Flow Session...`,isMeta:!0}),N(M),Y("chat"),N(L=>{let $=[...L,{id:"sys-"+Date.now(),role:"system",text:`\u{1F4E1} SESSION RESUMED: [${x}]`,isMeta:!0}];return J($.length),$})}},onDelete:async x=>await Rs(x),onClose:()=>Y("chat")}));case"memory":return s.createElement(C,{width:"100%",alignItems:"center",justifyContent:"center"},s.createElement(Ii,{onClose:()=>Y("chat")}));case"profile":return s.createElement($s,{initialData:Me,onSave:x=>{Oe(x),N(g=>[...g,{id:Date.now(),role:"system",text:`\u2705 Profile updated: ${x.name} (${x.nickname})`}]),Y("chat")},onCancel:()=>Y("chat")});case"resolution":return s.createElement(C,{width:"100%",alignItems:"center",justifyContent:"center"},s.createElement(ld,{data:_o,onResolve:x=>{Jo(null),Y("chat"),setTimeout(()=>{ft(x,!0)},500)},onEdit:x=>{Jo(null),Y("chat"),c(x)}}));case"approval":return s.createElement(C,{flexDirection:"column",borderStyle:"round",borderColor:"yellow",paddingX:2,paddingY:1,width:"100%"},s.createElement(y,{color:"yellow",bold:!0,underline:!0},"\u{1F510} SECURITY GATE: FILE WRITE PERMISSION"),s.createElement(y,{marginTop:1},"The agent is attempting to modify: ",s.createElement(y,{color:"cyan"},oe(un?.args||"{}").path||"Unknown File")),sr()?s.createElement(C,{marginTop:1,paddingX:1},s.createElement(y,{color:"cyan",italic:!0},"\u26A1\uFE0F FluxFlow Companion is active. Review the changes in your editor.")):s.createElement(C,{marginTop:1,borderStyle:"single",borderColor:"#333",paddingX:1,flexDirection:"column"},s.createElement(y,{color:"gray"},"--- PROPOSED CONTENT / DIFF ---"),(()=>{let x=oe(un?.args||"{}"),g=[],M=new Set;if(Object.keys(x).forEach($=>{let _=$.match(/^(replaceContent|newContent|content_to_replace|content_to_add|TargetContent|ReplacementContent|replacementContent)(\d+)?$/);if(_){let b=_[2]?parseInt(_[2]):1;M.add(b)}}),Array.from(M).sort(($,_)=>$-_).forEach($=>{let _,b;$===1?(_=x.replaceContent1??x.content_to_replace1??x.replaceContent??x.content_to_replace??x.TargetContent??null,b=x.newContent1??x.content_to_add1??x.newContent??x.content_to_add??x.ReplacementContent??x.replacementContent??null):(_=x[`replaceContent${$}`]??x[`content_to_replace${$}`]??null,b=x[`newContent${$}`]??x[`content_to_add${$}`]??null),(_!==null||b!==null)&&g.push({replace:_,new:b})}),g.length>0)return s.createElement(C,{flexDirection:"column",marginTop:1},g.map(($,_)=>{let b=$.replace!==null,O=$.new!==null;return s.createElement(C,{key:_,flexDirection:"column",marginTop:_>0?1:0},g.length>1&&s.createElement(y,{color:"gray"},"Block ",_+1,":"),b&&s.createElement(C,null,s.createElement(y,{color:"red",wrap:"anywhere",bold:!0},"- ",$.replace)),O&&s.createElement(C,{marginTop:b?1:0},s.createElement(y,{color:"green",wrap:"anywhere",bold:!0},"+ ",$.new.replace(/\[\/n\]?/g,"\\n"))))}));let L=x.content||x.ReplacementContent||x.content_to_add||x.replacementContent||x.newContent||null;return s.createElement(y,{color:"white",wrap:"anywhere"},(L?L.replace(/\[\/n\]?/g,"\\n"):null)||"Updating file content...")})()),s.createElement(C,{marginTop:1},s.createElement(so,{title:"Action Required",items:[{label:"\u2705 Accept this time",value:"allow"},{label:"\u{1F510} Accept for this session",value:"always"},{label:"\u274C Don't accept",value:"deny"}],onSelect:x=>{x.value==="always"&&Li(!0);let g=x.value==="deny"?"deny":"allow";un.resolve(g),zo(null),Y("chat")}})));case"updateManager":return s.createElement(so,{title:"Select Preferred Update Manager",subtitle:"NOTE: If you are unsure about these, go with NPM",items:[{label:"NPM (Standard)",value:"npm"},{label:"PNPM (Recommended)",value:"pnpm"},{label:"BUN (Ultra Fast)",value:"bun"},{label:"YARN (Classic)",value:"yarn"},{label:"Custom Command",value:"custom"},{label:"Back",value:"settings"}],onSelect:x=>{if(x.value==="settings"||x.value==="Back"){Y("settings");return}x.value==="custom"?(ko({label:"Enter Custom Update Command (Global install recommended):",key:"customUpdateCommand",value:Ht.customUpdateCommand,next:g=>(Q(M=>({...M,updateManager:"custom",customUpdateCommand:g})),null)}),Y("input")):(Q(g=>({...g,updateManager:x.value})),Y("settings"))}});case"update":return s.createElement(ml,{latest:Ke,current:Ln,settings:Ht,onClose:()=>Y("chat"),onSuccess:()=>{N(x=>(J(x.length+1),[...x,{id:"update-success-"+Date.now(),role:"system",text:`\u2728 **[UPDATE COMPLETED]** Flux Flow successfully upgraded to v${Ke}.
|
|
587
|
+
\u{1F680} **Restart Flux Flow to see changes.**`,isMeta:!0}])),Y("chat")},onUpdateSettings:x=>{Y("updateManager")}});case"terminalApproval":return s.createElement(C,{flexDirection:"column",borderStyle:"round",borderColor:"red",paddingX:2,paddingY:1,width:"100%"},s.createElement(y,{color:"red",bold:!0,underline:!0},"\u{1F510} SECURITY GATE: TERMINAL COMMAND OVERSIGHT"),s.createElement(C,{marginTop:1},s.createElement(y,null,"Agent requested to run: ",s.createElement(y,{color:"yellow",bold:!0},oe(un?.args||"{}").command||"Unknown Command"))),s.createElement(C,{marginTop:1},s.createElement(so,{title:"Risk Assessment Required",items:[{label:"\u{1F680} Run",value:"allow"},{label:"\u274C Deny",value:"deny"}],onSelect:x=>{un.resolve(x.value),zo(null),Y("chat")}})));default:return s.createElement(C,{flexDirection:"column",marginTop:1,flexShrink:0,width:"100%"},s.createElement(C,{paddingX:1,marginBottom:0,justifyContent:"space-between",width:"100%"},s.createElement(C,null,$r?s.createElement(C,null,mr&&!mr&&s.createElement(ad,null),s.createElement(y,{color:"magenta",bold:!0,italic:!0},mr&&!mr?" ":"",$r.toUpperCase())):s.createElement(y,{color:"cyan",dimColor:!0,italic:!0}," ",l.length>0&&V?"Press ESC again to clear input":"READY FOR COMMAND...")),s.createElement(C,null,s.createElement(y,{color:"gray",bold:!0},"[ "),s.createElement(y,{color:"white"},vn||qe),s.createElement(y,{color:"gray",bold:!0}," ]"))),s.createElement(C,{borderStyle:"round",borderColor:mn?"magenta":"cyan",paddingX:1,paddingY:0,width:"100%"},s.createElement(C,{flexDirection:"column",width:"100%"},s.createElement(C,{flexDirection:"row",width:"100%",paddingY:0},s.createElement(C,{flexShrink:0,width:4},s.createElement(y,{color:mn?"magenta":"cyan",bold:!0},mn?"\u2726 ":"\u{1F4A0} ")),s.createElement(C,{flexGrow:1},s.createElement(C,{flexGrow:1,position:"relative"},l===""&&s.createElement(C,{position:"absolute",paddingLeft:0},wt&&!Xt?s.createElement(y,{color:"yellow"},se?" Terminal is waiting for user input. Press TAB to interact":" Press TAB to interact with terminal..."):wt&&Xt?s.createElement(y,{color:"yellow",bold:!0}," [ TERMINAL FOCUSED ] Type to interact, press TAB to exit..."):V===1?s.createElement(y,{color:"cyan",bold:!0}," Press ESC again to ",l.length>0?"clear input":"revert codebase to checkpoint","..."):s.createElement(y,{color:"gray"},Bo?" Press ESC again to cancel the request.":mn?" Enter a prompt to steer the agent.":` Send message or /cmd ... (${lo.shortcut} for newline), @file`)),s.createElement($i,{key:`input-${m}`,focus:!Xt,showCursor:go,lastFocusEventTime:oo.current,value:l,columns:h.columns,onChange:x=>{let g=x.replace(/\r\n/g,`
|
|
594
588
|
`).replace(/\r/g,`
|
|
595
589
|
`).replace(/\\\s*\n/g,`
|
|
596
|
-
`);c(g),L(!1)},onSubmit:ht,maxRows:3,keyBindings:{submit:y=>y.return&&!y.shift&&!y.ctrl,newline:y=>y.return&&y.shift||y.return&&y.ctrl}})))))))}};return a.createElement(C,{flexDirection:"column",width:"100%"},N?a.createElement(sh,{width:s?.columns||80,height:s?.rows||24,selectedIndex:P}):a.createElement(a.Fragment,null,a.createElement(C,{flexDirection:"column",width:"100%",flexGrow:1},ws.items.map((y,g)=>a.createElement(Ei,{key:y.id||g,msg:y,showFullThinking:fe,columns:s?.columns||80}))),a.createElement(C,{flexDirection:"column",padding:1,width:"100%"},(Yt==="chat"||["ask","approval","terminalApproval"].includes(Yt))&&a.createElement(C,{flexDirection:"column",width:"100%"},a.createElement(rl,{messages:Pt.slice(hi),showFullThinking:fe,columns:Math.max(20,(s?.columns||80)-1)}),St&&a.createElement(C,{marginTop:1},a.createElement(_s,{command:St,output:Kt,isFocused:Vt,isPty:_o}))),ce?a.createElement(C,{borderStyle:"double",borderColor:"magenta",padding:1,flexShrink:0},a.createElement(T,{color:"magenta"},"\u{1F30A} Starting Flux Flow...")):Oe?mo():a.createElement(C,{borderStyle:"round",borderColor:"gray",padding:0,flexDirection:"column",flexShrink:0,width:"100%"},a.createElement(C,{paddingX:1,marginBottom:1},a.createElement(T,{color:"yellow",bold:!0},"\u{1F511}",Ce(2),"API KEY REQUIRED")),a.createElement(C,{paddingX:1,flexDirection:"column"},Re===0?a.createElement(a.Fragment,null,a.createElement(T,null,"Select your Preferred Provider:"),a.createElement(C,{marginTop:1},a.createElement(lo,{items:[{label:"Google (Free/Paid)",value:"Google"},{label:"DeepSeek (Paid)",value:"DeepSeek"},{label:"OpenRouter (Free/Paid) [EXPERIMENTAL]",value:"OpenRouter"}],onSelect:y=>{K(y.value),Se(1)}}))):a.createElement(a.Fragment,null,a.createElement(T,null,"Please enter your ",Y," API Key to initialize the agent (If billing is enabled set Tier to paid in /settings \u2192 other \u2192 API Tier)."),a.createElement(C,{marginTop:1},a.createElement(T,{color:"cyan",bold:!0},"\u{1F4A0} "),a.createElement(Gu,{value:on,onChange:nn,onSubmit:Me,mask:"*"})),a.createElement(C,{marginTop:1},a.createElement(T,{color:"gray",italic:!0},"(Press ESC to go back to provider selection)")))),a.createElement(C,{paddingX:1,marginTop:1},a.createElement(T,{color:"gray",dimColor:!0,italic:!0},Re===0?"(Use arrows to select and Enter to confirm)":"(Press Enter to confirm and initialize)"))),t&&a.createElement(C,{borderStyle:"round",borderColor:"red",paddingX:2,marginY:0,width:"100%"},a.createElement(T,{color:"red",bold:!0},"\u{1F534} EXIT CONFIRMATION: "),a.createElement(T,{color:"white"},"Press "),a.createElement(T,{color:"red",bold:!0},"CTRL + C"),a.createElement(T,{color:"white"}," again to exit (",n,"s). Press "),a.createElement(T,{color:"cyan",bold:!0},"ESC"),a.createElement(T,{color:"white"}," to cancel.")),a.createElement(C,{flexShrink:0,width:"100%"},a.createElement(il,{mode:m,thinkingLevel:z,tokens:me.tokens,tokensTotal:me.tokens,chatId:$e,isMemoryEnabled:Xt.memory,apiTier:st,aiProvider:Y})),Yt==="exit"&&(()=>{let y=Date.now()-qa,g=et+Rt,O=g>0?(et/g*100).toFixed(1):"0.0",F=Ur+ur,A=F>0?(Ur/F*100).toFixed(1):"0.0",D=F>0?(ur/F*100).toFixed(1):"0.0";return a.createElement(C,{flexDirection:"column",borderStyle:"round",paddingX:3,paddingY:1,borderColor:"red",width:Math.min(100,(s?.columns||100)-2),marginTop:0,marginBottom:1},a.createElement(C,{marginBottom:1},a.createElement(T,{color:"cyan",bold:!0},"Agent powering down. ",a.createElement(T,{color:"magenta"},"Goodbye!"))),a.createElement(C,{flexDirection:"column"},a.createElement(T,{color:"white",bold:!0,underline:!0},"Interaction Summary"),a.createElement(C,{marginTop:1},a.createElement(C,{width:20},a.createElement(T,{color:"blue"},"Session ID:")),a.createElement(T,{color:"white"},$e)),a.createElement(C,null,a.createElement(C,{width:20},a.createElement(T,{color:"blue"},"Tool Calls:")),a.createElement(T,{color:"white"},et+Rt+rn," ( ",a.createElement(T,{color:"green"},"\u2713 ",et)," ",a.createElement(T,{color:"yellow"},"\u2298 ",rn)," ",a.createElement(T,{color:"red"},"\u2715 ",Rt)," )")),a.createElement(C,null,a.createElement(C,{width:20},a.createElement(T,{color:"blue"},"Success Rate:")),a.createElement(T,{color:"white"},O,"%")),a.createElement(C,null,a.createElement(C,{width:20},a.createElement(T,{color:"blue"},"Code Changes:")),a.createElement(T,{color:"white"},a.createElement(T,{color:"green"},"+",ai)," ",a.createElement(T,{color:"red"},"-",li))),a.createElement(C,null,a.createElement(C,{width:20},a.createElement(T,{color:"blue"},"Tokens Consumed:")),a.createElement(T,{color:"white"},Zt(ie))),ie>0&&a.createElement(a.Fragment,null,a.createElement(C,{marginLeft:2},a.createElement(C,{width:18},a.createElement(T,{color:"blue",dimColor:!0},"\xBB Input Tokens:")),a.createElement(T,{color:"white"},Zt(ie-Tt))),mt>0&&a.createElement(C,{marginLeft:4},a.createElement(C,{width:16},a.createElement(T,{color:"blue",dimColor:!0},"\xBB Cached:")),a.createElement(T,{color:"white"},Zt(mt))),Tt>0&&a.createElement(C,{marginLeft:2},a.createElement(C,{width:18},a.createElement(T,{color:"blue",dimColor:!0},"\xBB Output Tokens:")),a.createElement(T,{color:"white"},Zt(Tt)))),dr>0&&a.createElement(a.Fragment,null,a.createElement(C,null,a.createElement(C,{width:20},a.createElement(T,{color:"blue"},"Images Made:")),a.createElement(T,{color:"white"},dr)),a.createElement(C,null,a.createElement(C,{width:20},a.createElement(T,{color:"blue"},"Image Credits:")),a.createElement(T,{color:"white"},Number(((Rr||0)*1e3).toFixed(0))," credits")))),a.createElement(C,{flexDirection:"column",marginTop:1},a.createElement(T,{color:"white",bold:!0,underline:!0},"Performance"),a.createElement(C,{marginTop:1},a.createElement(C,{width:20},a.createElement(T,{color:"blue"},"Wall Time:")),a.createElement(T,{color:"white"},jo(y))),a.createElement(C,null,a.createElement(C,{width:20},a.createElement(T,{color:"blue"},"Agent Active:")),a.createElement(T,{color:"white"},jo(F))),a.createElement(C,{marginLeft:2},a.createElement(C,{width:18},a.createElement(T,{color:"blue",dimColor:!0},"\xBB API Time:")),a.createElement(T,{color:"white"},jo(Ur)," (",A,"%)")),a.createElement(C,{marginLeft:2},a.createElement(C,{width:18},a.createElement(T,{color:"blue",dimColor:!0},"\xBB Tool Time:")),a.createElement(T,{color:"white"},jo(ur)," (",D,"%)"))))})(),be.length>0&&(()=>{let g=Math.max(0,Math.min(w-2,be.length-5)),O=be.slice(g,g+5),F=be.length-(g+O.length);return a.createElement(C,{flexDirection:"column",borderStyle:"round",borderColor:"gray",paddingX:0,paddingY:0,width:"100%"},a.createElement(C,{paddingX:1,marginBottom:0,justifyContent:"space-between",width:"100%"},a.createElement(T,{color:"gray",bold:!0,dimColor:!0},be[0]?.cmd?.startsWith("@")?"\u{1F4C1} FILE SUGGESTIONS":"\u{1F50D} COMMAND SUGGESTIONS"),be[0]?.cmd?.startsWith("@")?a.createElement(T,{color:"gray",dimColor:!0,italic:!0},"(Use '#Lstart-Lend' to specify line numbers)"):i.startsWith("/model")&&st==="Free"?a.createElement(T,{color:"gray",dimColor:!0,italic:!0},"Paid API has more models. Configure ",a.createElement(T,{color:"cyan",underline:!0},"\x1B]8;;https://aistudio.google.com/billing\x07billing\x1B]8;;\x07")," & /settings"):null),O.map((A,D)=>{let b=g+D===w,v=A.cmd==="gemma-4-31b-it"&&st!=="Free";return a.createElement(C,{key:A.cmd,flexDirection:"row",backgroundColor:b?"#2a2a2a":void 0,paddingX:1},a.createElement(C,{width:3},a.createElement(T,{color:b?"cyan":"gray",bold:b},b?" \u276F":" ")),a.createElement(C,{width:55},a.createElement(T,{color:v?"gray":b?"yellow":"white",bold:b,dimColor:v&&!b},A.cmd?.startsWith("@[")&&A.cmd?.endsWith("]")?(()=>{let X=A.cmd.slice(2,-1).split(/[/\\]/);return X[X.length-1]})():A.cmd)),a.createElement(C,{flexGrow:1},a.createElement(T,{color:"gray",italic:!0,dimColor:!b},A.desc)))}),be.length>5&&a.createElement(C,{paddingX:1,height:1},F>0?a.createElement(T,{color:"gray",dimColor:!0,italic:!0}," ... (",F," more commands available)"):a.createElement(T,{color:"gray",dimColor:!0,italic:!0}," (End of list)")))})())))}var ci,Hu,sh,qa,ju,ai,li,ih,Xu,Xn,ah,Yu,lh,ch,Nr,uh,dh,Vu=ne(async()=>{Qa();sl();al();ll();await ml();hl();gl();Jr();await Ou();aa();Qr();vu();Lu();await Bu();mn();Fu();Ws();Si();eo();no();An();await qr();Ru();Vn();Ba();ci=()=>{let e=JSON.stringify(process.env).toLowerCase();return e.includes("antigravity")?"Antigravity":process.env.CURSOR_SETTINGS_DIR||process.env.TERM_PROGRAM==="cursor"||e.includes("cursor")?"Cursor":process.env.TERM_PROGRAM==="windsurf"||e.includes("windsurf")?"Windsurf":process.env.TERM_PROGRAM==="codium"||e.includes("codium")||e.includes("vscode-oss")?"VSCodium":e.includes("trae")?"Trae":e.includes("positron")?"Positron":process.env.TERM_PROGRAM==="vscode"||process.env.VSCODE_GIT_IPC_HANDLE||e.includes("vscode")?"VS Code":process.env.INTELLIJ_TERMINAL_COMMAND_BLOCKS||e.includes("intellij")?"JetBrains":"IDE"},Hu=e=>{let t=e==="VS Code",o=[];return t?(o.push({label:"Install Manually (VSIX)",url:"https://github.com/KushalRoyChowdhury/fluxflow-cli/releases"}),o.push({label:"Install from VS Code Marketplace",url:"https://marketplace.visualstudio.com/items?itemName=fluxflow-cli.fluxflow-cli-companion"})):o.push({label:`Download for ${e} (GitHub)`,url:"https://github.com/KushalRoyChowdhury/fluxflow-cli/releases"}),o.push({label:"Continue to CLI only",action:"dismiss"}),o},sh=({width:e,height:t,selectedIndex:o})=>{let n=ci(),r=Hu(n);return a.createElement(C,{flexDirection:"column",alignItems:"center",justifyContent:"center",width:e,height:t},a.createElement(C,{marginBottom:1},a.createElement(T,null,Nr)),a.createElement(C,{flexDirection:"column",borderStyle:"double",borderColor:"cyan",paddingX:3,paddingY:1,width:Math.min(80,e-4)},a.createElement(T,{bold:!0,color:"cyan",textAlign:"center"},"\u{1F680} UPGRADE YOUR WORKFLOW"),a.createElement(C,{marginY:1,flexDirection:"column",alignItems:"left"},a.createElement(T,null,"You're in ",a.createElement(T,{bold:!0,color:"cyan"},n),", but the ",a.createElement(T,{bold:!0,color:"magenta"},"Flux-Flow Companion")," is inactive."),a.createElement(C,{flexDirection:"column",marginY:1},a.createElement(T,{color:"gray"}," \u2705 Real-time file & cursor tracking"),a.createElement(T,{color:"gray"}," \u2705 Auto-open files created by agent"),a.createElement(T,{color:"gray"}," \u2705 Native green highlights for AI edits"),a.createElement(T,{color:"gray"}," \u2705 Direct IDE context sharing"))),a.createElement(C,{flexDirection:"column",marginTop:1},r.map((s,i)=>a.createElement(C,{key:i},a.createElement(T,{color:o===i?"yellow":"white",bold:o===i},o===i?" \u276F ":" ",s.label)))),a.createElement(C,{marginTop:1,alignItems:"center",justifyContent:"center"},a.createElement(T,{dimColor:!0,italic:!0},"(Use arrows to navigate, Enter to select)"))))},qa=Date.now(),ju="https://fluxflow-cli.onrender.com/changelog.html",ai=0,li=0,ih=lr.join(lr.dirname(nh(import.meta.url)),"../package.json"),Xu=JSON.parse(ro.readFileSync(ih,"utf8")),Xn=Xu.version,ah=Xu.date||"2026-05-20",Yu=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],lh=()=>{let[e,t]=q(0);return uo(()=>{let o=setInterval(()=>{t(n=>(n+1)%1e3)},33);return()=>clearInterval(o)},[]),a.createElement(T,{color:"magenta"},Yu[Math.floor(e/3)%Yu.length])},ch=({data:e,onResolve:t,onEdit:o})=>a.createElement(C,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},a.createElement(C,{paddingX:1},a.createElement(T,{color:"magenta",bold:!0,underline:!0},"\u{1F7E3} STEERING HINT RESOLUTION")),a.createElement(C,{paddingX:1,marginTop:1},a.createElement(T,null,"The agent already finished the task before your hint was consumed.")),a.createElement(C,{marginTop:1,backgroundColor:"#222",paddingX:2,width:"100%"},a.createElement(T,{italic:!0,color:"gray"},'"',e,'"')),a.createElement(C,{paddingX:1,marginTop:1},a.createElement(T,{color:"cyan"},"How would you like to proceed?")),a.createElement(C,{marginTop:0},a.createElement(lo,{title:"Select Action",items:[{label:"Send Anyway",value:"send"},{label:"Edit Prompt",value:"edit"}],onSelect:n=>{n==="send"?t(e):o(e)}}))),Nr=rh(["#00ffff","#0077ff","#ff00ff"]).multiline(`\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2557
|
|
590
|
+
`);c(g),D(!1)},onSubmit:ft,maxRows:3,keyBindings:{submit:x=>x.return&&!x.shift&&!x.ctrl,newline:x=>x.return&&x.shift||x.return&&x.ctrl}})))))))}};return s.createElement(C,{flexDirection:"column",width:"100%"},U?s.createElement(rd,{width:r?.columns||80,height:r?.rows||24,selectedIndex:P}):s.createElement(s.Fragment,null,s.createElement(C,{flexDirection:"column",width:"100%",flexGrow:1},Br.items.map((x,g)=>s.createElement(ks,{key:x.id||g,msg:x,showFullThinking:me,columns:r?.columns||80}))),s.createElement(C,{flexDirection:"column",padding:1,width:"100%"},(Wt==="chat"||["ask","approval","terminalApproval"].includes(Wt))&&s.createElement(C,{flexDirection:"column",width:"100%"},s.createElement(Ri,{messages:Dt.slice(ys),showFullThinking:me,columns:Math.max(20,(r?.columns||80)-1)}),wt&&s.createElement(C,{marginTop:1},s.createElement(Yr,{command:wt,output:jt,isFocused:Xt,isPty:To}))),ce?s.createElement(C,{borderStyle:"double",borderColor:"magenta",padding:1,flexShrink:0},s.createElement(y,{color:"magenta"},"\u{1F30A} Starting Flux Flow...")):Ae?co():s.createElement(C,{borderStyle:"round",borderColor:"gray",padding:0,flexDirection:"column",flexShrink:0,width:"100%"},s.createElement(C,{paddingX:1,marginBottom:1},s.createElement(y,{color:"yellow",bold:!0},"\u{1F511}",Ce(2),"API KEY REQUIRED")),s.createElement(C,{paddingX:1,flexDirection:"column"},Re===0?s.createElement(s.Fragment,null,s.createElement(y,null,"Select your Preferred Provider:"),s.createElement(C,{marginTop:1},s.createElement(so,{items:[{label:"Google (Free/Paid)",value:"Google"},{label:"DeepSeek (Paid)",value:"DeepSeek"},{label:"OpenRouter (Free/Paid) [EXPERIMENTAL]",value:"OpenRouter"}],onSelect:x=>{q(x.value),Se(1)}}))):s.createElement(s.Fragment,null,s.createElement(y,null,"Please enter your ",H," API Key to initialize the agent (If billing is enabled set Tier to paid in /settings \u2192 other \u2192 API Tier)."),s.createElement(C,{marginTop:1},s.createElement(y,{color:"cyan",bold:!0},"\u{1F4A0} "),s.createElement(Tl,{value:Ko,onChange:qo,onSubmit:De,mask:"*"})),s.createElement(C,{marginTop:1},s.createElement(y,{color:"gray",italic:!0},"(Press ESC to go back to provider selection)")))),s.createElement(C,{paddingX:1,marginTop:1},s.createElement(y,{color:"gray",dimColor:!0,italic:!0},Re===0?"(Use arrows to select and Enter to confirm)":"(Press Enter to confirm and initialize)"))),o&&s.createElement(C,{borderStyle:"round",borderColor:"red",paddingX:2,marginY:0,width:"100%"},s.createElement(y,{color:"red",bold:!0},"\u{1F534} EXIT CONFIRMATION: "),s.createElement(y,{color:"white"},"Press "),s.createElement(y,{color:"red",bold:!0},"CTRL + C"),s.createElement(y,{color:"white"}," again to exit (",n,"s). Press "),s.createElement(y,{color:"cyan",bold:!0},"ESC"),s.createElement(y,{color:"white"}," to cancel.")),s.createElement(C,{flexShrink:0,width:"100%"},s.createElement(Yi,{mode:f,thinkingLevel:z,tokens:fe.tokens,tokensTotal:fe.tokens,chatId:_e,isMemoryEnabled:Ht.memory,apiTier:rt,aiProvider:H})),Wt==="exit"&&(()=>{let x=Date.now()-Oi,g=Ze+_t,M=g>0?(Ze/g*100).toFixed(1):"0.0",B=cr+Hn,L=B>0?(cr/B*100).toFixed(1):"0.0",$=B>0?(Hn/B*100).toFixed(1):"0.0";return s.createElement(C,{flexDirection:"column",borderStyle:"round",paddingX:3,paddingY:1,borderColor:"red",width:Math.min(100,(r?.columns||100)-2),marginTop:0,marginBottom:1},s.createElement(C,{marginBottom:1},s.createElement(y,{color:"cyan",bold:!0},"Agent powering down. ",s.createElement(y,{color:"magenta"},"Goodbye!"))),s.createElement(C,{flexDirection:"column"},s.createElement(y,{color:"white",bold:!0,underline:!0},"Interaction Summary"),s.createElement(C,{marginTop:1},s.createElement(C,{width:20},s.createElement(y,{color:"blue"},"Session ID:")),s.createElement(y,{color:"white"},_e)),s.createElement(C,null,s.createElement(C,{width:20},s.createElement(y,{color:"blue"},"Tool Calls:")),s.createElement(y,{color:"white"},Ze+_t+Vo," ( ",s.createElement(y,{color:"green"},"\u2713 ",Ze)," ",s.createElement(y,{color:"yellow"},"\u2298 ",Vo)," ",s.createElement(y,{color:"red"},"\u2715 ",_t)," )")),s.createElement(C,null,s.createElement(C,{width:20},s.createElement(y,{color:"blue"},"Success Rate:")),s.createElement(y,{color:"white"},M,"%")),s.createElement(C,null,s.createElement(C,{width:20},s.createElement(y,{color:"blue"},"Code Changes:")),s.createElement(y,{color:"white"},s.createElement(y,{color:"green"},"+",us)," ",s.createElement(y,{color:"red"},"-",ms))),s.createElement(C,null,s.createElement(C,{width:20},s.createElement(y,{color:"blue"},"Tokens Consumed:")),s.createElement(y,{color:"white"},zt(ie))),ie>0&&s.createElement(s.Fragment,null,s.createElement(C,{marginLeft:2},s.createElement(C,{width:18},s.createElement(y,{color:"blue",dimColor:!0},"\xBB Input Tokens:")),s.createElement(y,{color:"white"},zt(ie-yt))),mt>0&&s.createElement(C,{marginLeft:4},s.createElement(C,{width:16},s.createElement(y,{color:"blue",dimColor:!0},"\xBB Cached:")),s.createElement(y,{color:"white"},zt(mt))),yt>0&&s.createElement(C,{marginLeft:2},s.createElement(C,{width:18},s.createElement(y,{color:"blue",dimColor:!0},"\xBB Output Tokens:")),s.createElement(y,{color:"white"},zt(yt)))),Gn>0&&s.createElement(s.Fragment,null,s.createElement(C,null,s.createElement(C,{width:20},s.createElement(y,{color:"blue"},"Images Made:")),s.createElement(y,{color:"white"},Gn)),s.createElement(C,null,s.createElement(C,{width:20},s.createElement(y,{color:"blue"},"Image Credits:")),s.createElement(y,{color:"white"},Number(((dr||0)*1e3).toFixed(0))," credits")))),s.createElement(C,{flexDirection:"column",marginTop:1},s.createElement(y,{color:"white",bold:!0,underline:!0},"Performance"),s.createElement(C,{marginTop:1},s.createElement(C,{width:20},s.createElement(y,{color:"blue"},"Wall Time:")),s.createElement(y,{color:"white"},Fo(x))),s.createElement(C,null,s.createElement(C,{width:20},s.createElement(y,{color:"blue"},"Agent Active:")),s.createElement(y,{color:"white"},Fo(B))),s.createElement(C,{marginLeft:2},s.createElement(C,{width:18},s.createElement(y,{color:"blue",dimColor:!0},"\xBB API Time:")),s.createElement(y,{color:"white"},Fo(cr)," (",L,"%)")),s.createElement(C,{marginLeft:2},s.createElement(C,{width:18},s.createElement(y,{color:"blue",dimColor:!0},"\xBB Tool Time:")),s.createElement(y,{color:"white"},Fo(Hn)," (",$,"%)"))))})(),be.length>0&&(()=>{let g=Math.max(0,Math.min(w-2,be.length-5)),M=be.slice(g,g+5),B=be.length-(g+M.length);return s.createElement(C,{flexDirection:"column",borderStyle:"round",borderColor:"gray",paddingX:0,paddingY:0,width:"100%"},s.createElement(C,{paddingX:1,marginBottom:0,justifyContent:"space-between",width:"100%"},s.createElement(y,{color:"gray",bold:!0,dimColor:!0},be[0]?.cmd?.startsWith("@")?"\u{1F4C1} FILE SUGGESTIONS":"\u{1F50D} COMMAND SUGGESTIONS"),be[0]?.cmd?.startsWith("@")?s.createElement(y,{color:"gray",dimColor:!0,italic:!0},"(Use '#Lstart-Lend' to specify line numbers)"):l.startsWith("/model")&&rt==="Free"?s.createElement(y,{color:"gray",dimColor:!0,italic:!0},"Paid API has more models. Configure ",s.createElement(y,{color:"cyan",underline:!0},"\x1B]8;;https://aistudio.google.com/billing\x07billing\x1B]8;;\x07")," & /settings"):null),M.map((L,$)=>{let b=g+$===w,O=L.cmd==="gemma-4-31b-it"&&rt!=="Free";return s.createElement(C,{key:L.cmd,flexDirection:"row",backgroundColor:b?"#2a2a2a":void 0,paddingX:1},s.createElement(C,{width:3},s.createElement(y,{color:b?"cyan":"gray",bold:b},b?" \u276F":" ")),s.createElement(C,{width:55},s.createElement(y,{color:O?"gray":b?"yellow":"white",bold:b,dimColor:O&&!b},L.cmd?.startsWith("@[")&&L.cmd?.endsWith("]")?(()=>{let X=L.cmd.slice(2,-1).split(/[/\\]/);return X[X.length-1]})():L.cmd)),s.createElement(C,{flexGrow:1},s.createElement(y,{color:"gray",italic:!0,dimColor:!b},L.desc)))}),be.length>5&&s.createElement(C,{paddingX:1,height:1},B>0?s.createElement(y,{color:"gray",dimColor:!0,italic:!0}," ... (",B," more commands available)"):s.createElement(y,{color:"gray",dimColor:!0,italic:!0}," (End of list)")))})())))}var fs,bl,rd,Oi,Sl,us,ms,sd,Cl,Ln,id,El,ad,ld,lr,cd,dd,Ml=re(async()=>{Pi();Wi();Hi();Gi();await Vi();zi();Qi();Sr();await il();di();Er();al();ll();await fl();nn();pl();rs();Cs();Jt();eo();yn();await xr();yl();$n();xi();fs=()=>{let e=JSON.stringify(process.env).toLowerCase();return e.includes("antigravity")?"Antigravity":process.env.CURSOR_SETTINGS_DIR||process.env.TERM_PROGRAM==="cursor"||e.includes("cursor")?"Cursor":process.env.TERM_PROGRAM==="windsurf"||e.includes("windsurf")?"Windsurf":process.env.TERM_PROGRAM==="codium"||e.includes("codium")||e.includes("vscode-oss")?"VSCodium":e.includes("trae")?"Trae":e.includes("positron")?"Positron":process.env.TERM_PROGRAM==="vscode"||process.env.VSCODE_GIT_IPC_HANDLE||e.includes("vscode")?"VS Code":process.env.INTELLIJ_TERMINAL_COMMAND_BLOCKS||e.includes("intellij")?"JetBrains":"IDE"},bl=e=>{let o=e==="VS Code",t=[];return o?(t.push({label:"Install Manually (VSIX)",url:"https://github.com/KushalRoyChowdhury/fluxflow-cli/releases"}),t.push({label:"Install from VS Code Marketplace",url:"https://marketplace.visualstudio.com/items?itemName=fluxflow-cli.fluxflow-cli-companion"})):t.push({label:`Download for ${e} (GitHub)`,url:"https://github.com/KushalRoyChowdhury/fluxflow-cli/releases"}),t.push({label:"Continue to CLI only",action:"dismiss"}),t},rd=({width:e,height:o,selectedIndex:t})=>{let n=fs(),i=bl(n);return s.createElement(C,{flexDirection:"column",alignItems:"center",justifyContent:"center",width:e,height:o},s.createElement(C,{marginBottom:1},s.createElement(y,null,lr)),s.createElement(C,{flexDirection:"column",borderStyle:"double",borderColor:"cyan",paddingX:3,paddingY:1,width:Math.min(80,e-4)},s.createElement(y,{bold:!0,color:"cyan",textAlign:"center"},"\u{1F680} UPGRADE YOUR WORKFLOW"),s.createElement(C,{marginY:1,flexDirection:"column",alignItems:"left"},s.createElement(y,null,"You're in ",s.createElement(y,{bold:!0,color:"cyan"},n),", but the ",s.createElement(y,{bold:!0,color:"magenta"},"Flux-Flow Companion")," is inactive."),s.createElement(C,{flexDirection:"column",marginY:1},s.createElement(y,{color:"gray"}," \u2705 Real-time file & cursor tracking"),s.createElement(y,{color:"gray"}," \u2705 Auto-open files created by agent"),s.createElement(y,{color:"gray"}," \u2705 Native green highlights for AI edits"),s.createElement(y,{color:"gray"}," \u2705 Direct IDE context sharing"))),s.createElement(C,{flexDirection:"column",marginTop:1},i.map((r,l)=>s.createElement(C,{key:l},s.createElement(y,{color:t===l?"yellow":"white",bold:t===l},t===l?" \u276F ":" ",r.label)))),s.createElement(C,{marginTop:1,alignItems:"center",justifyContent:"center"},s.createElement(y,{dimColor:!0,italic:!0},"(Use arrows to navigate, Enter to select)"))))},Oi=Date.now(),Sl="https://fluxflow-cli.onrender.com/changelog.html",us=0,ms=0,sd=Wn.join(Wn.dirname(od(import.meta.url)),"../package.json"),Cl=JSON.parse(to.readFileSync(sd,"utf8")),Ln=Cl.version,id=Cl.date||"2026-05-20",El=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],ad=()=>{let[e,o]=K(0);return ao(()=>{let t=setInterval(()=>{o(n=>(n+1)%1e3)},33);return()=>clearInterval(t)},[]),s.createElement(y,{color:"magenta"},El[Math.floor(e/3)%El.length])},ld=({data:e,onResolve:o,onEdit:t})=>s.createElement(C,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},s.createElement(C,{paddingX:1},s.createElement(y,{color:"magenta",bold:!0,underline:!0},"\u{1F7E3} STEERING HINT RESOLUTION")),s.createElement(C,{paddingX:1,marginTop:1},s.createElement(y,null,"The agent already finished the task before your hint was consumed.")),s.createElement(C,{marginTop:1,backgroundColor:"#222",paddingX:2,width:"100%"},s.createElement(y,{italic:!0,color:"gray"},'"',e,'"')),s.createElement(C,{paddingX:1,marginTop:1},s.createElement(y,{color:"cyan"},"How would you like to proceed?")),s.createElement(C,{marginTop:0},s.createElement(so,{title:"Select Action",items:[{label:"Send Anyway",value:"send"},{label:"Edit Prompt",value:"edit"}],onSelect:n=>{n==="send"?o(e):t(e)}}))),lr=nd(["#00ffff","#0077ff","#ff00ff"]).multiline(`\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2557
|
|
597
591
|
\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u255A\u2588\u2588\u2557\u2588\u2588\u2554\u255D \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551
|
|
598
592
|
\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2554\u255D \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2557 \u2588\u2588\u2551
|
|
599
593
|
\u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2554\u2588\u2588\u2557 \u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551\u2588\u2588\u2588\u2557\u2588\u2588\u2551
|
|
600
594
|
\u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2554\u255D \u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u255A\u2588\u2588\u2588\u2554\u2588\u2588\u2588\u2554\u255D
|
|
601
|
-
\u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u255D\u255A\u2550\u2550\u255D`),
|
|
595
|
+
\u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u255D\u255A\u2550\u2550\u255D`),cd=e=>{let o=[],t=/\[\s*tool:functions\.([a-z0-9_]+)\s*\(/gi,n=0,i;for(;(i=t.exec(e))!==null;){let r=i[1],l=i.index+i[0].length-1,c=0,m=null,d=-1,u=-1;for(let a=l;a<e.length;a++){let f=e[a];if(m){if(f===m){let p=0;for(let h=a-1;h>=0&&e[h]==="\\";h--)p++;p%2===0&&(m=null)}}else if(f==='"'||f==="'"||f==="`")m=f;else if(f==="(")c++;else if(f===")"&&(c--,c===0)){u=a;let p=a+1;for(;p<e.length&&/\s/.test(e[p]);)p++;if(p<e.length&&e[p]==="]"){d=p;break}}}if(d!==-1){let a=e.substring(n,i.index);a.trim()&&o.push({type:"output",content:a});let f=e.substring(l+1,u);o.push({type:"tool",toolName:r.trim(),args:f.trim()}),n=d+1,t.lastIndex=n}else break}if(n<e.length){let r=e.substring(n);r.trim()&&o.push({type:"output",content:r})}return o},dd=(()=>{let e=null,o=0;return t=>{let n=Date.now();if(e&&n-o<5e3)return e;let i=[],r=l=>{try{let c=to.readdirSync(l);for(let m of c){if(["node_modules",".git",".gemini","dist","build",".next",".cache","out"].includes(m))continue;let d=Wn.join(l,m);to.statSync(d).isDirectory()?r(d):i.push({name:m,relativePath:Wn.relative(process.cwd(),d)})}}catch{}};return r(t),e=i,o=n,i}})()});import{spawn as ud}from"child_process";import{fileURLToPath as Al}from"url";var md=4096,fd=Al(import.meta.url).endsWith(".js");if(fd&&!process.execArgv.some(e=>e.includes("max-old-space-size")))ud(process.execPath,[`--max-old-space-size=${md}`,Al(import.meta.url),...process.argv.slice(2)],{stdio:"inherit"}).on("exit",o=>process.exit(o||0));else{let{default:e}=await import("react"),{render:o}=await import("ink"),{default:t}=await Ml().then(()=>Il);process.env.NODE_NO_WARNINGS="1";let n=["cuimp","Found existing binary","Binary verified","curl.exe not found","Falling back to .bat file","DeprecationWarning"],i=console.log,r=console.warn,l=console.error,c=m=>{let d=m.map(String).join(" ");return n.some(u=>d.includes(u))};console.log=(...m)=>!c(m)&&i(...m),console.warn=(...m)=>!c(m)&&r(...m),console.error=(...m)=>!c(m)&&l(...m),process.stdout.write("\x1Bc"),o(e.createElement(t,{args:process.argv.slice(2)}),{exitOnCtrlC:!1})}
|