fluxflow-cli 2.1.0 → 2.1.1
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 +70 -70
- package/package.json +2 -2
package/dist/fluxflow.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
var Dl=Object.defineProperty;var se=(e,o)=>()=>(e&&(o=e(e=0)),o);var Es=(e,o)=>{for(var t in o)Dl(e,t,{get:o[t],enumerable:!0})};import ro,{useState as hr,useEffect as ks,useMemo as bs,useCallback as Nr,useRef as vi}from"react";import{Box as pr,Spacer as vl,Text as fr,useInput as $l,measureElement as Fl}from"ink";function Pl(e,o){return e.replace(/\t/g," ".repeat(o))}function Cs(e){return e==null?"":e.replace(/\r\n/g,`
|
|
3
3
|
`).replace(/\r/g,`
|
|
4
|
-
`)}var $i,Bl,Fi,Pi=se(()=>{$i=({children:e,onHeightChange:o})=>{let t=vi(null),n=vi(void 0);return ks(()=>{if(t.current){let{height:i}=Fl(t.current);n.current!==i&&(n.current=i,o?.(i))}}),ro.createElement(pr,{ref:t,flexShrink:0,flexGrow:0,width:"100%"},e)},Bl=({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((
|
|
4
|
+
`)}var $i,Bl,Fi,Pi=se(()=>{$i=({children:e,onHeightChange:o})=>{let t=vi(null),n=vi(void 0);return ks(()=>{if(t.current){let{height:i}=Fl(t.current);n.current!==i&&(n.current=i,o?.(i))}}),ro.createElement(pr,{ref:t,flexShrink:0,flexGrow:0,width:"100%"},e)},Bl=({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 J=Cs(A);if(!v&&l)return J.replace(/[^\n]/g,l);let K=Pl(J,d);return v?K:K.replace(/@\[(.*?)\]/g,(ae,W)=>{let j=W.indexOf("#"),$e=W.indexOf(":L"),le=W,Oe="";j!==-1?(le=W.slice(0,j),Oe=W.slice(j)):$e!==-1&&(le=W.slice(0,$e),Oe=W.slice($e));let nt=le.replace(/\\/g,"/"),fe=(process.cwd()||"").replace(/\\/g,"/");fe&&nt.toLowerCase().startsWith(fe.toLowerCase()+"/")?nt=nt.slice(fe.length+1):nt.startsWith("./")&&(nt=nt.slice(2));let ut=nt.split("/");return`[${ut[ut.length-1]}${Oe}]`})},[d,l]),{preCursor:N,postCursor:X}=bs(()=>{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 K=D(A),ae=D(v),W=K.lastIndexOf(`
|
|
5
5
|
`)+1,j=ae.indexOf(`
|
|
6
|
-
`);return{preCursor:[{value:K.slice(0,W)},{value:K.slice(W),type:"highlight"},{value:c&&m?" ":"",type:"cursor"}],postCursor:[{value:ae.slice(0,j),type:"highlight"},{value:ae.slice(j)}]}}},[u,c,m,e,r,l,a,D,f]),F=bs(()=>T!==void 0?Math.max(o??t??1,Math.min(t??o??1,T)):1,[o,t,T]);ks(()=>{if(S!==void 0&&F!==void 0){let
|
|
7
|
-
`),X=Math.max(20,m-10),F=0,I=0,
|
|
8
|
-
`),F=Math.max(20,m-10),I=0,
|
|
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 F=0;if(k.length>1&&(F=k.length),D.upArrow){if(i){let{visualLine:I,visualCol:
|
|
6
|
+
`);return{preCursor:[{value:K.slice(0,W)},{value:K.slice(W),type:"highlight"},{value:c&&m?" ":"",type:"cursor"}],postCursor:[{value:ae.slice(0,j),type:"highlight"},{value:ae.slice(j)}]}}},[u,c,m,e,r,l,a,D,f]),F=bs(()=>T!==void 0?Math.max(o??t??1,Math.min(t??o??1,T)):1,[o,t,T]);ks(()=>{if(S!==void 0&&F!==void 0){let A=S;h(v=>{let J=v,K=v+F;if(A<=J)return Math.max(0,A-1);if(A>K)return A-F;if(T){if(T<F)return 0;if(T<K)return T-F}return v})}},[S,F,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:F,overflow:"hidden",flexDirection:"column",flexGrow:0,flexShrink:0},ro.createElement(pr,{flexDirection:"column"},ro.createElement(pr,{height:F,overflowY:"hidden",flexShrink:0,flexDirection:"column"},ro.createElement(pr,{marginTop:-p,flexDirection:"column"},ro.createElement($i,{onHeightChange:w},ro.createElement(fr,null,N?.map((A,v)=>ro.createElement(fr,{key:v,...I(A.type)},A.value)),X?.map((A,v)=>ro.createElement(fr,{key:v,...I(A.type)},A.value))))),ro.createElement(vl,null)),ro.createElement($i,{onHeightChange:k},ro.createElement(fr,null,N?.map((A,v)=>ro.createElement(fr,{key:v,...I(A.type)},A.value))))))},Fi=({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)=>$l(a,{isActive:f}),...u})=>{let[a,f]=hr(e.length),[p,h]=hr(0);ks(()=>{a>e.length&&f(e.length)},[e,a]);let T=Nr(k=>{let N=Cs(e).split(`
|
|
7
|
+
`),X=Math.max(20,m-10),F=0,I=0,A=0;for(let v=0;v<N.length;v++){let K=N[v].length;if(k>=A&&k<=A+K){let W=k-A;return F+=Math.floor(W/X),I=W%X,{visualLine:F,visualCol:I}}let ae=Math.max(1,Math.ceil(K/X));F+=ae,A+=K+1}return{visualLine:F,visualCol:I}},[e,m]),w=Nr((k,D)=>{let X=Cs(e).split(`
|
|
8
|
+
`),F=Math.max(20,m-10),I=0,A=0;for(let v=0;v<X.length;v++){let K=X[v].length,ae=Math.max(1,Math.ceil(K/F));if(k>=I&&k<I+ae){let W=(k-I)*F,j=Math.min(D,K-W),$e=Math.max(0,j);return Math.min(A+W+$e,A+K)}I+=ae,A+=K+1}return e.length},[e,m]);d((k,D)=>{if(k==="\x1B[I"||k==="\x1B[O"||k==="[I"||k==="[O")return;let N=n?.submit??(I=>I.return&&I.ctrl),X=n?.newline??(I=>I.return);if(N(D)){t?.(e);return}else if(X(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 F=0;if(k.length>1&&(F=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
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(F)}},l);let S=bs(()=>{if(r&&p>1)return{start:Math.max(0,a-p),end:a}},[a,p,r]);return ro.createElement(Bl,{...u,value:e,cursorIndex:a,highlight:S,showCursor:i,focus:l})}});import _l from"os";var No,zt,Bi,Ur,Rr,Wr,Fn=se(()=>{No=(e,o)=>{if(!e)return"";let t=/\x1B\[[0-?]*[ -/]*[@-~]/g,n=e.split(`
|
|
11
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
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()},Bi=(e,o=40)=>{if(e=e.replace(_l.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,`
|
|
@@ -15,16 +15,16 @@ var Dl=Object.defineProperty;var se=(e,o)=>()=>(e&&(o=e(e=0)),o);var Es=(e,o)=>{
|
|
|
15
15
|
`).replace(/\r/g,`
|
|
16
16
|
`),r=p=>p.match(/^\s*/)[0],l=p=>{let h=p.split(`
|
|
17
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=J=>{let K=J.split(`
|
|
18
|
-
`).filter(le=>le.trim()!=="");if(K.length===0)return{char:" ",size:4};let ae=K[0].match(/^\s*/)[0];if(ae.includes(" "))return{char:" ",size:1};let W=K.map(le=>le.match(/^\s*/)[0].length).filter(le=>le>0);if(W.length===0)return{char:" ",size:ae.length||4};let j=(le,
|
|
19
|
-
`).map((J,K)=>{if(J.trim()===""&&K!==0)return"";let ae=J.match(/^\s*/)[0].length/k.size,W=Math.max(0,ae+
|
|
20
|
-
`)},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
|
|
21
|
-
`).map(v=>v.trim()).filter(v=>v.length>0).map(v=>v.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/\s+/g,"\\s*"));if(
|
|
18
|
+
`).filter(le=>le.trim()!=="");if(K.length===0)return{char:" ",size:4};let ae=K[0].match(/^\s*/)[0];if(ae.includes(" "))return{char:" ",size:1};let W=K.map(le=>le.match(/^\s*/)[0].length).filter(le=>le>0);if(W.length===0)return{char:" ",size:ae.length||4};let j=(le,Oe)=>Oe?j(Oe,le%Oe):le;return{char:" ",size:W.reduce((le,Oe)=>j(le,Oe))||4}},S=w(h),k=w(p),D=l(h).length,N=(T.match(/^\s*/)||[""])[0].length,F=(N+D)/S.size,I=l(p).length/k.size,A=F-I;return p.split(`
|
|
19
|
+
`).map((J,K)=>{if(J.trim()===""&&K!==0)return"";let ae=J.match(/^\s*/)[0].length/k.size,W=Math.max(0,ae+A),j=W;if(K===0){let $e=N/S.size;j=Math.max(0,W-$e)}return S.char.repeat(j*S.size)+J.trimStart()}).join(`
|
|
20
|
+
`)},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(`
|
|
21
|
+
`).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,N=k[0][0],X=m.lastIndexOf(`
|
|
22
22
|
`,D)+1,F=m.substring(X,D),I=c(T,N,F);d.push({startPos:D,firstMatchContent:N,finalReplacement:I,content_to_replace:h,content_to_add:T}),m=m.substring(0,D)+I+m.substring(D+N.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 j=h.content_to_replace.split(`
|
|
23
23
|
`).map($e=>$e.trim()).filter($e=>$e.length>0).map($e=>$e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/\s+/g,"\\s*")).join("\\s*");try{w=new RegExp(j,"g")}catch{w=new RegExp(T,"g")}}let S=[...a.matchAll(w)],k=S[0].index,D=S[0][0],N=a.lastIndexOf(`
|
|
24
24
|
`,k)+1,X=a.substring(N,k),F=c(h.content_to_add,D,X),I=a.split(`
|
|
25
|
-
`),
|
|
26
|
-
`).length,v=[];for(let W=Math.max(0,
|
|
27
|
-
`),K=[],ae=
|
|
25
|
+
`),A=a.substring(0,k).split(`
|
|
26
|
+
`).length,v=[];for(let W=Math.max(0,A-4);W<A-1;W++)v.push({num:W+1,text:I[W]});let J=D.split(`
|
|
27
|
+
`),K=[],ae=A+J.length-1;for(let W=ae;W<Math.min(I.length,ae+3);W++)K.push({num:W+1,text:I[W]});f.push({success:!0,oldContent:D,newContent:F,originalStartLine:A,contextBefore:v,contextAfter:K}),a=a.substring(0,k)+F+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]
|
|
28
28
|
`,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]||""}
|
|
29
29
|
`,m++;else{let T=t[u-1],w=T.originalStartLine+T.oldContent.split(`
|
|
30
30
|
`).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]||""}
|
|
@@ -55,10 +55,10 @@ var Dl=Object.defineProperty;var se=(e,o)=>()=>(e&&(o=e(e=0)),o);var Es=(e,o)=>{
|
|
|
55
55
|
`).replace(/\\\n/g,`
|
|
56
56
|
`).replace(/\\$/,""),t-6).split(`
|
|
57
57
|
`).map((a,f)=>E.createElement(Y,{key:f,flexDirection:"row",width:"100%"},E.createElement(Y,{flexShrink:0,width:2},E.createElement(ee,{bold:!0,color:"white"},f===0?"\u276F":" ")),E.createElement(Y,{flexGrow:1,marginLeft:1},E.createElement(Tn,{text:a,color:e.color||"white"}))))):e.role==="think"?E.createElement(Y,{flexDirection:"column",marginTop:0,marginBottom:0,paddingX:1,width:"100%"},e.isStreaming&&!e.duration?E.createElement(ee,{bold:!0,color:"white"},"\u2727 Thinking..."):E.createElement(ee,{bold:!0,color:"white"},"\u2726 Thought",e.duration?E.createElement(ee,{color:"gray"}," for ",E.createElement(ee,{bold:!0,color:"cyan"},Ri(e.duration))):""),E.createElement(Y,{borderStyle:"single",borderLeft:!0,borderRight:!1,borderTop:!1,borderBottom:!1,paddingLeft:2,paddingTop:1,paddingBottom:1,flexDirection:"column",width:"100%"},Wl(u,t))):E.createElement(Y,{flexDirection:"column",paddingX:1,marginTop:0,width:"100%"},E.createElement(Ui,{text:u.replace(/ \|\n\n/g,` |
|
|
58
|
-
`),columns:t}),e.memoryUpdated&&E.createElement(Y,{marginTop:1,width:"100%"},E.createElement(ee,{color:"yellow",italic:!0},"\u2728 [Memory Updated]")),e.role==="agent"&&e.workedDuration?E.createElement(Y,{marginTop:1,marginBottom:2,width:"100%"},E.createElement(ee,null,"["),E.createElement(ee,{color:"gray"},"\u26A1 Worked for ",E.createElement(ee,{bold:!0,color:"cyan"},Ri(e.workedDuration))),E.createElement(ee,null,"]")):null))}),Xl=E.memo(({messages:e,showFullThinking:o,columns:t=80})=>E.createElement(Y,{flexDirection:"column",width:"100%"},e.map((n,i)=>E.createElement(Ms,{key:n.id||i,msg:n,showFullThinking:o,columns:t})))),Wi=Xl});import Re from"react";import{Box as Qo,Text as $t}from"ink";var Kl,Hi,Gi=se(()=>{Fn();Kl=Re.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),Re.createElement(Qo,{borderStyle:"round",borderColor:"gray",flexDirection:"row",justifyContent:"space-between",paddingX:1,width:"100%"},Re.createElement(Qo,null,Re.createElement(Qo,{marginRight:1},Re.createElement($t,{color:m,bold:!0},d," ",e.toUpperCase())),Re.createElement($t,{color:"gray",dimColor:!0},"\u2503 "),Re.createElement(Qo,{marginX:1},Re.createElement($t,{color:"magenta"},"\u{1F9E0} ",o)),Re.createElement($t,{color:"gray",dimColor:!0},"\u2503 "),Re.createElement(Qo,{marginX:1},Re.createElement($t,{color:"gray"},"MEM: "),Re.createElement($t,{color:r?"green":"red",bold:!0},r?"ON":"OFF"))),Re.createElement(Qo,{flexGrow:1,justifyContent:"center",paddingX:2},Re.createElement($t,null,"\u{1F4C1}"),Re.createElement($t,{color:"gray",italic:!0}," ",Bi(process.cwd(),35))),Re.createElement(Qo,null,Re.createElement($t,{color:"gray",dimColor:!0},"\u2503 "),Re.createElement(Qo,{marginX:1},Re.createElement($t,null,"\u2728"),Re.createElement($t,{color:"blue"}," ",zt(n)," ",Re.createElement($t,{dimColor:!0},"(",(t/u*100).toFixed(0),"%)"))),Re.createElement($t,{color:"gray",dimColor:!0},"\u2503 "),Re.createElement(Qo,{marginLeft:1},Re.createElement($t,null,"\u{1F194}"),Re.createElement($t,{color:"gray",dimColor:!0,italic:!0}," ",i),(l==="Custom"||l==="Paid")&&Re.createElement($t,{color:"gray",dimColor:!0}," | ",Re.createElement($t,{color:"green",bold:!0},"PAID")))))}),Hi=Kl});import
|
|
58
|
+
`),columns:t}),e.memoryUpdated&&E.createElement(Y,{marginTop:1,width:"100%"},E.createElement(ee,{color:"yellow",italic:!0},"\u2728 [Memory Updated]")),e.role==="agent"&&e.workedDuration?E.createElement(Y,{marginTop:1,marginBottom:2,width:"100%"},E.createElement(ee,null,"["),E.createElement(ee,{color:"gray"},"\u26A1 Worked for ",E.createElement(ee,{bold:!0,color:"cyan"},Ri(e.workedDuration))),E.createElement(ee,null,"]")):null))}),Xl=E.memo(({messages:e,showFullThinking:o,columns:t=80})=>E.createElement(Y,{flexDirection:"column",width:"100%"},e.map((n,i)=>E.createElement(Ms,{key:n.id||i,msg:n,showFullThinking:o,columns:t})))),Wi=Xl});import Re from"react";import{Box as Qo,Text as $t}from"ink";var Kl,Hi,Gi=se(()=>{Fn();Kl=Re.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),Re.createElement(Qo,{borderStyle:"round",borderColor:"gray",flexDirection:"row",justifyContent:"space-between",paddingX:1,width:"100%"},Re.createElement(Qo,null,Re.createElement(Qo,{marginRight:1},Re.createElement($t,{color:m,bold:!0},d," ",e.toUpperCase())),Re.createElement($t,{color:"gray",dimColor:!0},"\u2503 "),Re.createElement(Qo,{marginX:1},Re.createElement($t,{color:"magenta"},"\u{1F9E0} ",o)),Re.createElement($t,{color:"gray",dimColor:!0},"\u2503 "),Re.createElement(Qo,{marginX:1},Re.createElement($t,{color:"gray"},"MEM: "),Re.createElement($t,{color:r?"green":"red",bold:!0},r?"ON":"OFF"))),Re.createElement(Qo,{flexGrow:1,justifyContent:"center",paddingX:2},Re.createElement($t,null,"\u{1F4C1}"),Re.createElement($t,{color:"gray",italic:!0}," ",Bi(process.cwd(),35))),Re.createElement(Qo,null,Re.createElement($t,{color:"gray",dimColor:!0},"\u2503 "),Re.createElement(Qo,{marginX:1},Re.createElement($t,null,"\u2728"),Re.createElement($t,{color:"blue"}," ",zt(n)," ",Re.createElement($t,{dimColor:!0},"(",(t/u*100).toFixed(0),"%)"))),Re.createElement($t,{color:"gray",dimColor:!0},"\u2503 "),Re.createElement(Qo,{marginLeft:1},Re.createElement($t,null,"\u{1F194}"),Re.createElement($t,{color:"gray",dimColor:!0,italic:!0}," ",i),(l==="Custom"||l==="Paid")&&Re.createElement($t,{color:"gray",dimColor:!0}," | ",Re.createElement($t,{color:"green",bold:!0},"PAID")))))}),Hi=Kl});import Ao from"react";import{Box as Jn,Text as Hr}from"ink";import ql from"ink-select-input";function so({title:e,subtitle:o,items:t,onSelect:n}){return Ao.createElement(Jn,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,marginTop:1,flexShrink:0,width:"100%"},Ao.createElement(Jn,{paddingX:1,paddingY:0,marginBottom:o?0:1},Ao.createElement(Hr,{color:"magenta",bold:!0},"\u{1F527} ",typeof e=="string"?e.toUpperCase():e)),o&&Ao.createElement(Jn,{paddingX:1,marginBottom:1},Ao.createElement(Hr,{color:"yellow",dimColor:!0,italic:!0}," ",o)),Ao.createElement(Jn,{flexDirection:"column",width:"100%"},Ao.createElement(ql,{items:t,onSelect:n,itemComponent:Vl,indicatorComponent:()=>null})),Ao.createElement(Jn,{paddingX:1,marginTop:1},Ao.createElement(Hr,{color:"gray",dimColor:!0,italic:!0},"(Arrows to select \u2022 Enter to confirm)")))}var Vl,ji=se(()=>{Vl=({label:e,isSelected:o})=>{let t=e==="Cancel"||e==="Back"||e.toLowerCase().includes("exit")||e.toLowerCase().includes("back");return Ao.createElement(Jn,{marginTop:t?1:0,backgroundColor:o?"#2a2a2a":void 0,paddingX:1,width:"100%"},Ao.createElement(Hr,{color:o?"cyan":"white",bold:o},o?"\u276F ":" ",e))}});var oe,Jt=se(()=>{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(`
|
|
59
59
|
`)){let w=h.split(`
|
|
60
60
|
`)[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`
|
|
61
|
-
`;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 zl}from"child_process";var gr,Qn,Xi,
|
|
61
|
+
`;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 zl}from"child_process";var gr,Qn,Xi,Os=se(async()=>{await xr();gr=null,Qn=()=>{if(process.platform!=="win32")return!1;if(gr!==null)return gr;try{zl('powershell.exe -NoProfile -Command "exit"',{stdio:"ignore"}),gr=!0}catch{gr=!1}return gr},Xi=(e,o,t,n)=>`
|
|
62
62
|
-- TOOL DEFINITIONS --
|
|
63
63
|
Access to internal tools. MUST use the exact syntax on a new line: [tool:functions.ToolName(args)]
|
|
64
64
|
MANDATORY TOOL POLICY:
|
|
@@ -92,7 +92,7 @@ ${e==="Flux"?`- PROJECT TOOLS (path = relative to CWD, path separator: '/') -
|
|
|
92
92
|
- File structure: Real newlines for code formatting`.trim():"\n- FILE TOOLS ARE NOT AVAILABLE IN FLOW (Tell user,` /mode flux` if needed)".trim()}
|
|
93
93
|
|
|
94
94
|
- Results: Passed as [TOOL RESULT]
|
|
95
|
-
- MAX Tool call stack: STRICTLY 3 per turn`.trim()});import{spawn as
|
|
95
|
+
- MAX Tool call stack: STRICTLY 3 per turn`.trim()});import{spawn as As}from"child_process";var Gr,Pn,jr,Ct,To,So,Ki,qi,Ds,Ls,xr=se(async()=>{Jt();await Os();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,""),Ct=null,To=!1,So=e=>{try{Ct&&(To&&typeof Ct.write=="function"?Ct.write(e):Ct.stdin&&Ct.stdin.writable&&Ct.stdin.write(e))}catch{}},Ki=()=>{if(Ct){try{To&&typeof Ct.destroy=="function"?Ct.destroy():typeof Ct.kill=="function"&&(process.platform==="win32"?As("taskkill",["/pid",Ct.pid,"/f","/t"]):Ct.kill("SIGKILL"))}catch{}Ct=null,To=!1}},qi=(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&&Qn()){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&&Qn()){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,""),N=k;return l(D)&&(N=k.replace(/\//g,"\\")),N});w.push("-Path",S.join(","))}c.push(...w),u=T-1;continue}if(a==="cp"&&o&&Qn()){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,""),N=k;return l(D)&&(N=k.replace(/\//g,"\\")),N});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&&Qn()){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(" ")},Ds=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=qi(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}});Ct=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.
|
|
96
96
|
|
|
97
97
|
${S}`),500))}}),p.onExit(({exitCode:w})=>{if(T)return;Ct=null;let S=(h||"").replace(/\r\n/g,`
|
|
98
98
|
`).replace(/\r/g,`
|
|
@@ -102,7 +102,7 @@ ${S}`),500))}}),p.onExit(({exitCode:w})=>{if(T)return;Ct=null;let S=(h||"").repl
|
|
|
102
102
|
|
|
103
103
|
${k}`:`SUCCESS: Command [${t}] completed.
|
|
104
104
|
|
|
105
|
-
${k}`)}),!0}catch(p){return i&&d&&p.code==="ENOENT"?!1:(Ls(c,u,t,l,n,d),!0)}else return Ls(c,u,t,l,n,d),!0};i&&m(!0)||m(!1)})},Ls=(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?
|
|
105
|
+
${k}`)}),!0}catch(p){return i&&d&&p.code==="ENOENT"?!1:(Ls(c,u,t,l,n,d),!0)}else return Ls(c,u,t,l,n,d),!0};i&&m(!0)||m(!1)})},Ls=(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?As(c,l?r?["-NoProfile","-Command",o]:["/c",o]:["-c",o],{cwd:process.cwd(),env:{...process.env,...n}}):As(o,{shell:!0,cwd:process.cwd(),env:{...process.env,CI:"false",TERM:"xterm-256color",FORCE_COLOR:"1",...n}});Ct=d,To=!1,d.stdin&&d.stdin.on("error",()=>{Ct=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.
|
|
106
106
|
|
|
107
107
|
${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;Ct=null;let h=[];u&&h.push(`STDOUT:
|
|
108
108
|
${u}`),a&&h.push(`STDERR:
|
|
@@ -114,7 +114,7 @@ ${a}`),p!==0&&h.push(`EXIT CODE: ${p}`);let T=h.join(`
|
|
|
114
114
|
|
|
115
115
|
${w}`:`SUCCESS: Command [${t}] completed.
|
|
116
116
|
|
|
117
|
-
${w}`)}),d.on("error",p=>{if(l&&r&&p.code==="ENOENT"){let h=qi(t,!1);return Ls(e,h,t,n,i,!1)}Ct=null,e(`ERROR: Failed to start command [${t}]: ${p.message}`)})}});import Se,{useState as yr}from"react";import{Box as At,Text as Nt,useInput as Jl}from"ink";import Ql from"ink-text-input";function $s({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:Vi(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:vs(e.alwaysAskCommands),section:"Sandbox"},{label:"Auto Approve Commands",value:"autoApprove",status:vs(e.autoApproveCommands),section:"Sandbox"},{label:"Auto Disapprove Commands",value:"autoDisallow",status:vs(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[]}},N=Zo[a].id,X=D(N);Jl((I,O)=>{if(T){O.escape&&w(null);return}if(d==="categories")O.upArrow?f(v=>(v-1+Zo.length)%Zo.length):O.downArrow?f(v=>(v+1)%Zo.length):O.return||O.rightArrow?Zo[a].id==="exit"?n("chat"):(u("items"),h(0)):O.escape&&n("chat");else if(d==="items"){if(O.upArrow)h(v=>(v-1+X.length)%X.length);else if(O.downArrow)h(v=>(v+1)%X.length);else if(O.leftArrow||O.escape)u("categories");else if(O.return){let v=X[p];F(v)}}});let F=I=>{if(I.value==="memory")o(O=>({...O,memory:!O.memory}));else if(I.value==="sandboxPreset"){let O=Vi(e),v=["Autonomous","Balanced","Strict"],K=(v.indexOf(O)+1)%v.length,ae=v[K];o(W=>{let j={...W,sandboxPreset:ae};return ae==="Strict"?(j.autoExec=!1,j.allowExternalAccess=!1,j.networkAccess=!1,j.autoApproveCommands="",j.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",j.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",j.autoApproveGit=!1):ae==="Balanced"?(j.autoExec=!0,j.allowExternalAccess=!1,j.networkAccess=!0,j.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",j.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",j.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",j.autoApproveGit=!1):ae==="Autonomous"&&(j.autoExec=!0,j.allowExternalAccess=!0,j.networkAccess=!0,j.autoApproveCommands="",j.autoDisallowCommands="",j.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",j.autoApproveGit=!0),j})}else if(I.value==="autoExec")e.autoExec?o(O=>({...O,autoExec:!1,sandboxPreset:"Custom"})):e.allowExternalAccess?n("doubleDanger"):n("autoExecDanger");else if(I.value==="externalAccess")e.allowExternalAccess?o(O=>({...O,allowExternalAccess:!1,sandboxPreset:"Custom"})):e.autoExec?n("doubleDanger"):n("externalDanger");else if(I.value==="networkAccess")o(O=>({...O,networkAccess:O.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(O=>({...O,autoApproveGit:!O.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 O=["1d","7d","30d"],J=(O.indexOf(e.autoDeleteHistory||"30d")+1)%O.length;o(K=>({...K,autoDeleteHistory:O[J]}))}else if(I.value==="autoUpdate")o(O=>({...O,autoUpdate:!O.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 O={...e,useExternalData:!1};o(O),r({systemSettings:O,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 Se.createElement(At,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},Se.createElement(At,{paddingX:1,paddingY:0,marginBottom:1,borderStyle:"single",borderColor:"magenta",width:"100%"},Se.createElement(Nt,{color:"magenta",bold:!0},"\u{1F527} SYSTEM CONFIGURATION")),Se.createElement(At,{flexDirection:"row",width:"100%",minHeight:8},Se.createElement(At,{flexDirection:"column",width:"30%",borderStyle:"round",borderColor:d==="categories"?"cyan":"gray",padding:1},Se.createElement(At,{marginBottom:1},Se.createElement(Nt,{color:d==="categories"?"cyan":"white",bold:!0,underline:!0},"CATEGORIES")),Zo.map((I,O)=>{let v=a===O,J=I.id==="exit";return Se.createElement(At,{key:I.id,marginTop:J?1:0,backgroundColor:v?d==="categories"?"#2a2a2a":"#1e1e1e":void 0,paddingX:1},Se.createElement(Nt,{color:v?d==="categories"?"cyan":"yellow":"white",bold:v},v?"\u276F ":" ",I.label))})),Se.createElement(At,{flexDirection:"column",width:"70%",borderStyle:"round",borderColor:d==="items"?"cyan":"gray",padding:1,marginLeft:1},Se.createElement(At,{marginBottom:1},Se.createElement(Nt,{color:d==="items"?"cyan":"white",bold:!0,underline:!0},Zo[a].label.toUpperCase()," SETTINGS")),X.length>0?(()=>{let I=null,O=[],v=le=>(le||"").split(",").map(Ae=>Ae.trim().toLowerCase()).filter(Boolean),J=v(e.autoApproveCommands),K=v(e.autoDisallowCommands),ae=v(e.alwaysAskCommands),W=[...J,...K,...ae],j=new Set(W),$e=N==="security"&&W.length!==j.size;return X.forEach((le,Ae)=>{let nt=d==="items"&&p===Ae,fe=le.label.length,ut=Math.max(2,35-fe),Ke=".".repeat(ut),qe=ue=>N==="security"?(ue.value==="autoExec"||ue.value==="externalAccess")&&ue.status==="ON"?"red":"yellow":ue.status?.startsWith("\u2713")?"green":ue.status?.startsWith("\u26A0")?"yellow":ue.status==="ON"?"green":ue.status==="OFF"?"red":"yellow";le.section&&le.section!==I&&(I=le.section,O.push(Se.createElement(At,{key:`sec-hdr-${le.section}`,marginTop:O.length>0?1:0,marginBottom:0,paddingX:1},Se.createElement(Nt,{color:"magenta",bold:!0,underline:!0},"\u{1F4C2} ",le.section.toUpperCase()))));let Pe=nt&&T&&(T==="alwaysAskCommands"&&le.value==="alwaysAsk"||T==="autoApproveCommands"&&le.value==="autoApprove"||T==="autoDisallowCommands"&&le.value==="autoDisallow"),Ve=le.value==="alwaysAsk"||le.value==="autoApprove"||le.value==="autoDisallow";O.push(Se.createElement(At,{key:le.value,flexDirection:"column"},Se.createElement(At,{backgroundColor:nt&&!Pe?"#2a2a2a":void 0,paddingX:2},Se.createElement(Nt,{color:nt?"cyan":"white",bold:nt},nt?"\u276F ":" ",le.label),!Ve&&Se.createElement(Se.Fragment,null,Se.createElement(Nt,{color:"gray",dimColor:!0},Ke),Se.createElement(Nt,{color:qe(le),bold:!0},le.value==="aiProvider"?le.status:`[ ${le.status} ]`))),Ve&&!Pe&&le.status!=="None"&&Se.createElement(At,{paddingX:4,marginBottom:1},Se.createElement(Nt,{color:"gray",dimColor:!0},"\u21B3 ",le.status)),Pe&&Se.createElement(At,{flexDirection:"column",marginLeft:4,marginBottom:1},Se.createElement(At,{paddingX:1,borderStyle:"single",borderColor:"cyan",flexDirection:"row"},Se.createElement(Nt,{color:"cyan",bold:!0},"> "," "),Se.createElement(Ql,{value:S,onChange:k,onSubmit:ue=>{let go={...e,[T]:ue.trim(),sandboxPreset:"Custom"};o(go),r({systemSettings:go,apiTier:t,quotas:l}),w(null)}})),Se.createElement(Nt,{color:"gray",dimColor:!0,italic:!0}," Comma separated \u2022 Press Enter to save, Esc to cancel"))))}),N==="other"&&O.push(Se.createElement(At,{key:"pty-notice",marginTop:4,paddingX:1},Se.createElement(Nt,{color:Pn?"green":"yellow"},Pn?"\u2713 Advance Interactive Terminal Supported":"\u26A0 Interactive Terminal is Limited"))),$e&&O.push(Se.createElement(At,{key:"conflict-warning",marginTop:1,paddingX:1},Se.createElement(Nt,{color:"red",dimColor:!0,italic:!0},"* Conflicting commands will be ignored and defaulted to highest priority"))),O})():Se.createElement(At,{paddingX:1},Se.createElement(Nt,{color:"gray",italic:!0},Zo[a].desc)))),Se.createElement(At,{paddingX:1,marginTop:1,flexDirection:"row",justifyContent:"space-between"},Se.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"&&Se.createElement(Nt,{color:"gray",dimColor:!0},Zo[a].desc)))}var Zo,Vi,vs,zi=se(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"}],Vi=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"},vs=e=>!e||e.trim()===""?"None":e.length>40?e.substring(0,40)+"...":e});import Lo,{useState as Fs,useEffect as Zl}from"react";import{Box as Zn,Text as Xr}from"ink";import ec from"ink-text-input";function Ps({initialData:e,onSave:o,onCancel:t}){let[n,i]=Fs(0),[r,l]=Fs(""),[c,m]=Fs(()=>({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): "}];Zl(()=>{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(Zn,{borderStyle:"round",borderColor:"gray",padding:0,marginTop:1,flexShrink:0,flexDirection:"column",width:"100%"},Lo.createElement(Zn,{paddingX:1,marginBottom:1},Lo.createElement(Xr,{color:"magenta",bold:!0},"\u{1F464} DEVELOPER PROFILE CONFIGURATION")),Lo.createElement(Zn,{paddingX:1,flexDirection:"column"},Lo.createElement(Zn,null,Lo.createElement(Xr,{color:"cyan",bold:!0},d[n].label),Lo.createElement(ec,{value:r,onChange:l,onSubmit:u})),Lo.createElement(Zn,{marginTop:1},Lo.createElement(Xr,{color:"gray",dimColor:!0,italic:!0},"Step ",n+1," of ",d.length))),Lo.createElement(Zn,{paddingX:1,marginTop:1},Lo.createElement(Xr,{color:"gray",dimColor:!0,italic:!0},"(Enter to submit \u2022 Type /cancel to abort)")))}var Ji=se(()=>{});import dt,{useState as Bs}from"react";import{Box as Eo,Text as en,useInput as tc}from"ink";import oc from"ink-text-input";var nc,Qi,Zi=se(()=>{wn();nc=({question:e,options:o,onResolve:t})=>{let[n,i]=Bs(!1),[r,l]=Bs(""),[c,m]=Bs(0),d=[...o,{id:"CUSTOM",label:"Suggest something else...",description:"Provide a custom response"}];tc((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?dt.createElement(Eo,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},dt.createElement(Eo,{paddingX:1},dt.createElement(en,{color:"cyan",bold:!0},"\u{1F4AC} SUGGEST SOMETHING ELSE")),dt.createElement(Eo,{marginTop:1,paddingX:1},dt.createElement(en,{italic:!0,color:"gray"},"Replying to: ",e)),dt.createElement(Eo,{marginTop:1,paddingX:1,flexDirection:"row"},dt.createElement(en,{color:"cyan",bold:!0},"\u{1F4A0} "),dt.createElement(oc,{value:r,onChange:l,onSubmit:()=>t(r)})),dt.createElement(Eo,{marginTop:1,paddingX:1,marginBottom:1},dt.createElement(en,{color:"gray",dimColor:!0,italic:!0},"(Press Enter to send)"))):dt.createElement(Eo,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},dt.createElement(Eo,{paddingX:1,marginBottom:1},dt.createElement(en,{color:"cyan",bold:!0},"\u{1F4AC} AGENT REQUEST: ACTION REQUIRED")),dt.createElement(Eo,{paddingX:1,marginBottom:1},dt.createElement(en,{bold:!0,color:"white"},e)),dt.createElement(Eo,{flexDirection:"column",width:"100%"},d.map((a,f)=>{let p=f===c;return dt.createElement(Eo,{key:a.id,flexDirection:"column",width:"100%",backgroundColor:p?"#2a2a2a":void 0,paddingX:1,marginBottom:f===d.length-1?0:1},dt.createElement(en,{color:p?"cyan":"white",bold:p},p?"\u276F ":" ",a.label),a.description&&dt.createElement(Eo,{marginLeft:4},dt.createElement(en,{color:"gray",italic:!0,dimColor:!0},a.description)))})),dt.createElement(Eo,{paddingX:1,marginTop:1,marginBottom:1},dt.createElement(en,{color:"gray",dimColor:!0,italic:!0},"(Use Arrows to navigate, Enter to confirm)")))},Qi=nc});import wr from"fs";import _s from"path";import Kr from"crypto";var rc,sc,ea,ta,Tr,Sn,we,ke,qr,Vr,Do=se(()=>{rc=66,sc=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]^rc;return t},ea="aes-256-cbc",ta=Kr.createHash("sha256").update("fluxflow-cli-sanctuary-key").digest(),Tr=e=>{let o=Kr.randomBytes(16),t=Kr.createCipheriv(ea,ta,o),n=t.update(e,"utf8","hex");return n+=t.final("hex"),o.toString("hex")+":"+n},Sn=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(ea,ta,t),r=i.update(n,"hex","utf8");return r+=i.final("utf8"),r},we=(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=Sn(n);return JSON.parse(r)}catch{}let i=sc(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 [${_s.basename(e)}]:`,t.message),o}},ke=(e,o)=>{try{let t=_s.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 [${_s.basename(e)}]:`,t.message)}},qr=we,Vr=ke});var sa={};Es(sa,{BACKUPS_DIR:()=>En,DATA_DIR:()=>zr,FLUXFLOW_DIR:()=>Bn,HISTORY_FILE:()=>_n,LEDGER_FILE:()=>tn,LOGS_DIR:()=>Co,MEMORIES_FILE:()=>Ft,PATHS_FILE:()=>Jr,SECRET_DIR:()=>Zt,SETTINGS_FILE:()=>Qt,TEMP_MEM_CHAT_FILE:()=>Uo,TEMP_MEM_FILE:()=>fo,USAGE_FILE:()=>Ut});import ic from"os";import bo from"path";import oa from"fs";import na from"crypto";var Bn,Qt,ra,zr,Co,Zt,_n,Ut,Ft,fo,Uo,En,tn,Jr,eo=se(()=>{Bn=bo.join(ic.homedir(),".fluxflow"),Qt=bo.join(Bn,"settings.json"),ra=null;try{if(oa.existsSync(Qt)){let e=oa.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=na.createHash("sha256").update("fluxflow-cli-sanctuary-key").digest(),l=na.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&&(ra=t.externalDataPath)}}}catch{}zr=ra||Bn,Co=bo.join(zr,"logs"),Zt=bo.join(zr,"secret"),_n=bo.join(Zt,"history.json"),Ut=bo.join(Bn,"usage.json"),Ft=bo.join(Zt,"memories.json"),fo=bo.join(Zt,"memory-temp.json"),Uo=bo.join(Zt,"temp-memory-chat.json"),En=bo.join(zr,"backups"),tn=bo.join(Zt,"ledger.json"),Jr=bo.join(Zt,"path.json")});var es={};Es(es,{getAPIKey:()=>cc,getProviderAPIKey:()=>Qr,getSearchSecrets:()=>uc,getSecret:()=>dc,removeAPIKey:()=>Ns,removeSecret:()=>ia,saveAPIKey:()=>mc,saveProviderAPIKey:()=>Zr,saveSearchId:()=>pc,saveSearchKey:()=>fc,saveSecret:()=>bn});import ac from"fs-extra";import lc from"path";var Cn,cc,Qr,Zr,dc,bn,uc,mc,fc,pc,ia,Ns,Sr=se(()=>{Do();eo();Cn=lc.join(Zt,"secrets.json"),cc=async()=>{try{let e=we(Cn,{});if(e.API_KEY)return e.API_KEY}catch{}return null},Qr=async e=>{try{let o=we(Cn,{});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 bn("GOOGLE_API_KEY",o),await bn("API_KEY",o)):e==="DeepSeek"?await bn("DEEPSEEK_API_KEY",o):e==="OpenRouter"&&await bn("OPENROUTER_API_KEY",o)},dc=async e=>{try{return we(Cn,{})[e]||null}catch{return null}},bn=async(e,o)=>{await ac.ensureDir(Zt);let t=we(Cn,{});t[e]=o,ke(Cn,t)},uc=async()=>{try{let e=we(Cn,{});return{key:e.GOOGLE_API_KEY||e.API_KEY,cx:e.SEARCH_ID}}catch{}return{key:null,cx:null}},mc=async e=>bn("API_KEY",e),fc=async e=>bn("GOOGLE_API_KEY",e),pc=async e=>bn("SEARCH_ID",e),ia=async e=>{try{let o=we(Cn,{});delete o[e],ke(Cn,o)}catch{}},Ns=async()=>ia("API_KEY")});var aa,la=se(()=>{aa=(e=!0,o=!0)=>`
|
|
117
|
+
${w}`)}),d.on("error",p=>{if(l&&r&&p.code==="ENOENT"){let h=qi(t,!1);return Ls(e,h,t,n,i,!1)}Ct=null,e(`ERROR: Failed to start command [${t}]: ${p.message}`)})}});import Se,{useState as yr}from"react";import{Box as Ot,Text as Nt,useInput as Jl}from"ink";import Ql from"ink-text-input";function $s({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:Vi(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:vs(e.alwaysAskCommands),section:"Sandbox"},{label:"Auto Approve Commands",value:"autoApprove",status:vs(e.autoApproveCommands),section:"Sandbox"},{label:"Auto Disapprove Commands",value:"autoDisallow",status:vs(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[]}},N=Zo[a].id,X=D(N);Jl((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+X.length)%X.length);else if(A.downArrow)h(v=>(v+1)%X.length);else if(A.leftArrow||A.escape)u("categories");else if(A.return){let v=X[p];F(v)}}});let F=I=>{if(I.value==="memory")o(A=>({...A,memory:!A.memory}));else if(I.value==="sandboxPreset"){let A=Vi(e),v=["Autonomous","Balanced","Strict"],K=(v.indexOf(A)+1)%v.length,ae=v[K];o(W=>{let j={...W,sandboxPreset:ae};return ae==="Strict"?(j.autoExec=!1,j.allowExternalAccess=!1,j.networkAccess=!1,j.autoApproveCommands="",j.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",j.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",j.autoApproveGit=!1):ae==="Balanced"?(j.autoExec=!0,j.allowExternalAccess=!1,j.networkAccess=!0,j.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",j.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",j.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",j.autoApproveGit=!1):ae==="Autonomous"&&(j.autoExec=!0,j.allowExternalAccess=!0,j.networkAccess=!0,j.autoApproveCommands="",j.autoDisallowCommands="",j.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",j.autoApproveGit=!0),j})}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"],J=(A.indexOf(e.autoDeleteHistory||"30d")+1)%A.length;o(K=>({...K,autoDeleteHistory:A[J]}))}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 Se.createElement(Ot,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},Se.createElement(Ot,{paddingX:1,paddingY:0,marginBottom:1,borderStyle:"single",borderColor:"magenta",width:"100%"},Se.createElement(Nt,{color:"magenta",bold:!0},"\u{1F527} SYSTEM CONFIGURATION")),Se.createElement(Ot,{flexDirection:"row",width:"100%",minHeight:8},Se.createElement(Ot,{flexDirection:"column",width:"30%",borderStyle:"round",borderColor:d==="categories"?"cyan":"gray",padding:1},Se.createElement(Ot,{marginBottom:1},Se.createElement(Nt,{color:d==="categories"?"cyan":"white",bold:!0,underline:!0},"CATEGORIES")),Zo.map((I,A)=>{let v=a===A,J=I.id==="exit";return Se.createElement(Ot,{key:I.id,marginTop:J?1:0,backgroundColor:v?d==="categories"?"#2a2a2a":"#1e1e1e":void 0,paddingX:1},Se.createElement(Nt,{color:v?d==="categories"?"cyan":"yellow":"white",bold:v},v?"\u276F ":" ",I.label))})),Se.createElement(Ot,{flexDirection:"column",width:"70%",borderStyle:"round",borderColor:d==="items"?"cyan":"gray",padding:1,marginLeft:1},Se.createElement(Ot,{marginBottom:1},Se.createElement(Nt,{color:d==="items"?"cyan":"white",bold:!0,underline:!0},Zo[a].label.toUpperCase()," SETTINGS")),X.length>0?(()=>{let I=null,A=[],v=le=>(le||"").split(",").map(Oe=>Oe.trim().toLowerCase()).filter(Boolean),J=v(e.autoApproveCommands),K=v(e.autoDisallowCommands),ae=v(e.alwaysAskCommands),W=[...J,...K,...ae],j=new Set(W),$e=N==="security"&&W.length!==j.size;return X.forEach((le,Oe)=>{let nt=d==="items"&&p===Oe,fe=le.label.length,ut=Math.max(2,35-fe),Ke=".".repeat(ut),qe=ue=>N==="security"?(ue.value==="autoExec"||ue.value==="externalAccess")&&ue.status==="ON"?"red":"yellow":ue.status?.startsWith("\u2713")?"green":ue.status?.startsWith("\u26A0")?"yellow":ue.status==="ON"?"green":ue.status==="OFF"?"red":"yellow";le.section&&le.section!==I&&(I=le.section,A.push(Se.createElement(Ot,{key:`sec-hdr-${le.section}`,marginTop:A.length>0?1:0,marginBottom:0,paddingX:1},Se.createElement(Nt,{color:"magenta",bold:!0,underline:!0},"\u{1F4C2} ",le.section.toUpperCase()))));let Pe=nt&&T&&(T==="alwaysAskCommands"&&le.value==="alwaysAsk"||T==="autoApproveCommands"&&le.value==="autoApprove"||T==="autoDisallowCommands"&&le.value==="autoDisallow"),Ve=le.value==="alwaysAsk"||le.value==="autoApprove"||le.value==="autoDisallow";A.push(Se.createElement(Ot,{key:le.value,flexDirection:"column"},Se.createElement(Ot,{backgroundColor:nt&&!Pe?"#2a2a2a":void 0,paddingX:2},Se.createElement(Nt,{color:nt?"cyan":"white",bold:nt},nt?"\u276F ":" ",le.label),!Ve&&Se.createElement(Se.Fragment,null,Se.createElement(Nt,{color:"gray",dimColor:!0},Ke),Se.createElement(Nt,{color:qe(le),bold:!0},le.value==="aiProvider"?le.status:`[ ${le.status} ]`))),Ve&&!Pe&&le.status!=="None"&&Se.createElement(Ot,{paddingX:4,marginBottom:1},Se.createElement(Nt,{color:"gray",dimColor:!0},"\u21B3 ",le.status)),Pe&&Se.createElement(Ot,{flexDirection:"column",marginLeft:4,marginBottom:1},Se.createElement(Ot,{paddingX:1,borderStyle:"single",borderColor:"cyan",flexDirection:"row"},Se.createElement(Nt,{color:"cyan",bold:!0},"> "," "),Se.createElement(Ql,{value:S,onChange:k,onSubmit:ue=>{let go={...e,[T]:ue.trim(),sandboxPreset:"Custom"};o(go),r({systemSettings:go,apiTier:t,quotas:l}),w(null)}})),Se.createElement(Nt,{color:"gray",dimColor:!0,italic:!0}," Comma separated \u2022 Press Enter to save, Esc to cancel"))))}),N==="other"&&A.push(Se.createElement(Ot,{key:"pty-notice",marginTop:4,paddingX:1},Se.createElement(Nt,{color:Pn?"green":"yellow"},Pn?"\u2713 Advance Interactive Terminal Supported":"\u26A0 Interactive Terminal is Limited"))),$e&&A.push(Se.createElement(Ot,{key:"conflict-warning",marginTop:1,paddingX:1},Se.createElement(Nt,{color:"red",dimColor:!0,italic:!0},"* Conflicting commands will be ignored and defaulted to highest priority"))),A})():Se.createElement(Ot,{paddingX:1},Se.createElement(Nt,{color:"gray",italic:!0},Zo[a].desc)))),Se.createElement(Ot,{paddingX:1,marginTop:1,flexDirection:"row",justifyContent:"space-between"},Se.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"&&Se.createElement(Nt,{color:"gray",dimColor:!0},Zo[a].desc)))}var Zo,Vi,vs,zi=se(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"}],Vi=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"},vs=e=>!e||e.trim()===""?"None":e.length>40?e.substring(0,40)+"...":e});import Lo,{useState as Fs,useEffect as Zl}from"react";import{Box as Zn,Text as Xr}from"ink";import ec from"ink-text-input";function Ps({initialData:e,onSave:o,onCancel:t}){let[n,i]=Fs(0),[r,l]=Fs(""),[c,m]=Fs(()=>({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): "}];Zl(()=>{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(Zn,{borderStyle:"round",borderColor:"gray",padding:0,marginTop:1,flexShrink:0,flexDirection:"column",width:"100%"},Lo.createElement(Zn,{paddingX:1,marginBottom:1},Lo.createElement(Xr,{color:"magenta",bold:!0},"\u{1F464} DEVELOPER PROFILE CONFIGURATION")),Lo.createElement(Zn,{paddingX:1,flexDirection:"column"},Lo.createElement(Zn,null,Lo.createElement(Xr,{color:"cyan",bold:!0},d[n].label),Lo.createElement(ec,{value:r,onChange:l,onSubmit:u})),Lo.createElement(Zn,{marginTop:1},Lo.createElement(Xr,{color:"gray",dimColor:!0,italic:!0},"Step ",n+1," of ",d.length))),Lo.createElement(Zn,{paddingX:1,marginTop:1},Lo.createElement(Xr,{color:"gray",dimColor:!0,italic:!0},"(Enter to submit \u2022 Type /cancel to abort)")))}var Ji=se(()=>{});import dt,{useState as Bs}from"react";import{Box as Eo,Text as en,useInput as tc}from"ink";import oc from"ink-text-input";var nc,Qi,Zi=se(()=>{wn();nc=({question:e,options:o,onResolve:t})=>{let[n,i]=Bs(!1),[r,l]=Bs(""),[c,m]=Bs(0),d=[...o,{id:"CUSTOM",label:"Suggest something else...",description:"Provide a custom response"}];tc((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?dt.createElement(Eo,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},dt.createElement(Eo,{paddingX:1},dt.createElement(en,{color:"cyan",bold:!0},"\u{1F4AC} SUGGEST SOMETHING ELSE")),dt.createElement(Eo,{marginTop:1,paddingX:1},dt.createElement(en,{italic:!0,color:"gray"},"Replying to: ",e)),dt.createElement(Eo,{marginTop:1,paddingX:1,flexDirection:"row"},dt.createElement(en,{color:"cyan",bold:!0},"\u{1F4A0} "),dt.createElement(oc,{value:r,onChange:l,onSubmit:()=>t(r)})),dt.createElement(Eo,{marginTop:1,paddingX:1,marginBottom:1},dt.createElement(en,{color:"gray",dimColor:!0,italic:!0},"(Press Enter to send)"))):dt.createElement(Eo,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},dt.createElement(Eo,{paddingX:1,marginBottom:1},dt.createElement(en,{color:"cyan",bold:!0},"\u{1F4AC} AGENT REQUEST: ACTION REQUIRED")),dt.createElement(Eo,{paddingX:1,marginBottom:1},dt.createElement(en,{bold:!0,color:"white"},e)),dt.createElement(Eo,{flexDirection:"column",width:"100%"},d.map((a,f)=>{let p=f===c;return dt.createElement(Eo,{key:a.id,flexDirection:"column",width:"100%",backgroundColor:p?"#2a2a2a":void 0,paddingX:1,marginBottom:f===d.length-1?0:1},dt.createElement(en,{color:p?"cyan":"white",bold:p},p?"\u276F ":" ",a.label),a.description&&dt.createElement(Eo,{marginLeft:4},dt.createElement(en,{color:"gray",italic:!0,dimColor:!0},a.description)))})),dt.createElement(Eo,{paddingX:1,marginTop:1,marginBottom:1},dt.createElement(en,{color:"gray",dimColor:!0,italic:!0},"(Use Arrows to navigate, Enter to confirm)")))},Qi=nc});import wr from"fs";import _s from"path";import Kr from"crypto";var rc,sc,ea,ta,Tr,Sn,we,ke,qr,Vr,Do=se(()=>{rc=66,sc=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]^rc;return t},ea="aes-256-cbc",ta=Kr.createHash("sha256").update("fluxflow-cli-sanctuary-key").digest(),Tr=e=>{let o=Kr.randomBytes(16),t=Kr.createCipheriv(ea,ta,o),n=t.update(e,"utf8","hex");return n+=t.final("hex"),o.toString("hex")+":"+n},Sn=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(ea,ta,t),r=i.update(n,"hex","utf8");return r+=i.final("utf8"),r},we=(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=Sn(n);return JSON.parse(r)}catch{}let i=sc(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 [${_s.basename(e)}]:`,t.message),o}},ke=(e,o)=>{try{let t=_s.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 [${_s.basename(e)}]:`,t.message)}},qr=we,Vr=ke});var sa={};Es(sa,{BACKUPS_DIR:()=>En,DATA_DIR:()=>zr,FLUXFLOW_DIR:()=>Bn,HISTORY_FILE:()=>_n,LEDGER_FILE:()=>tn,LOGS_DIR:()=>Co,MEMORIES_FILE:()=>Ft,PATHS_FILE:()=>Jr,SECRET_DIR:()=>Zt,SETTINGS_FILE:()=>Qt,TEMP_MEM_CHAT_FILE:()=>Uo,TEMP_MEM_FILE:()=>fo,USAGE_FILE:()=>Ut});import ic from"os";import bo from"path";import oa from"fs";import na from"crypto";var Bn,Qt,ra,zr,Co,Zt,_n,Ut,Ft,fo,Uo,En,tn,Jr,eo=se(()=>{Bn=bo.join(ic.homedir(),".fluxflow"),Qt=bo.join(Bn,"settings.json"),ra=null;try{if(oa.existsSync(Qt)){let e=oa.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=na.createHash("sha256").update("fluxflow-cli-sanctuary-key").digest(),l=na.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&&(ra=t.externalDataPath)}}}catch{}zr=ra||Bn,Co=bo.join(zr,"logs"),Zt=bo.join(zr,"secret"),_n=bo.join(Zt,"history.json"),Ut=bo.join(Bn,"usage.json"),Ft=bo.join(Zt,"memories.json"),fo=bo.join(Zt,"memory-temp.json"),Uo=bo.join(Zt,"temp-memory-chat.json"),En=bo.join(zr,"backups"),tn=bo.join(Zt,"ledger.json"),Jr=bo.join(Zt,"path.json")});var es={};Es(es,{getAPIKey:()=>cc,getProviderAPIKey:()=>Qr,getSearchSecrets:()=>uc,getSecret:()=>dc,removeAPIKey:()=>Ns,removeSecret:()=>ia,saveAPIKey:()=>mc,saveProviderAPIKey:()=>Zr,saveSearchId:()=>pc,saveSearchKey:()=>fc,saveSecret:()=>bn});import ac from"fs-extra";import lc from"path";var Cn,cc,Qr,Zr,dc,bn,uc,mc,fc,pc,ia,Ns,Sr=se(()=>{Do();eo();Cn=lc.join(Zt,"secrets.json"),cc=async()=>{try{let e=we(Cn,{});if(e.API_KEY)return e.API_KEY}catch{}return null},Qr=async e=>{try{let o=we(Cn,{});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 bn("GOOGLE_API_KEY",o),await bn("API_KEY",o)):e==="DeepSeek"?await bn("DEEPSEEK_API_KEY",o):e==="OpenRouter"&&await bn("OPENROUTER_API_KEY",o)},dc=async e=>{try{return we(Cn,{})[e]||null}catch{return null}},bn=async(e,o)=>{await ac.ensureDir(Zt);let t=we(Cn,{});t[e]=o,ke(Cn,t)},uc=async()=>{try{let e=we(Cn,{});return{key:e.GOOGLE_API_KEY||e.API_KEY,cx:e.SEARCH_ID}}catch{}return{key:null,cx:null}},mc=async e=>bn("API_KEY",e),fc=async e=>bn("GOOGLE_API_KEY",e),pc=async e=>bn("SEARCH_ID",e),ia=async e=>{try{let o=we(Cn,{});delete o[e],ke(Cn,o)}catch{}},Ns=async()=>ia("API_KEY")});var aa,la=se(()=>{aa=(e=!0,o=!0)=>`
|
|
118
118
|
Your tool syntax is: '[tool:functions.ToolName(args...)]'
|
|
119
119
|
|
|
120
120
|
-- CHAT MANAGEMENT TOOLS (MUST CALL THESE 2 TOOLS ALWAYS) --
|
|
@@ -193,7 +193,7 @@ RULES:
|
|
|
193
193
|
- Suitable for simple requests/greetings`,Off:`EFFORT LEVEL: INSTANT
|
|
194
194
|
No thinking. Immediate response
|
|
195
195
|
RULES:
|
|
196
|
-
- Verify ALL imports and system stability, AVOID ANY Syntax errors, re-read TOOL RESULTS/files to verify`}});import gc from"fs";var Rs,da,ua,ma,fa=se(async()=>{await
|
|
196
|
+
- Verify ALL imports and system stability, AVOID ANY Syntax errors, re-read TOOL RESULTS/files to verify`}});import gc from"fs";var Rs,da,ua,ma,fa=se(async()=>{await Os();la();ca();Rs=null,da=(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) --
|
|
197
197
|
${e}`:"",l=[o?.length>0?`--- SAVED MEMORIES (PRIORITY: MEDIUM, USER PREFERENCES) ---
|
|
198
198
|
${o}`:"",i].filter(c=>c.length>0);return l.length>0?`[SYSTEM CONTEXT]
|
|
199
199
|
${l.join(`
|
|
@@ -281,11 +281,11 @@ ${a}`}catch(c){if(i=c,l&&await l.close(),r<n){let m=Math.pow(2,r)*1e3;await new
|
|
|
281
281
|
|
|
282
282
|
${u}${d.length>3e4?`
|
|
283
283
|
|
|
284
|
-
[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 kc,Qs,
|
|
284
|
+
[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 kc,Qs,Oa=se(()=>{Do();eo();kc=4*(1024*2),Qs=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=we(fo,{});u[d]||(u[d]=[]),u[d].push(r),ke(fo,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=we(Ft,[]).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=kc,T=u.reduce((D,N)=>D+(N.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(Ft,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(Ft,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(Ft,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 Zs,Aa=se(()=>{Er();Jt();Zs=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 ha(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 La from"path";var ei,Da=se(()=>{Jt();ei=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=La.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=La.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 ae=ss.readFileSync(p).toString("base64"),W=S[T];return{text:`[BINARY FILE]: ${t} (${W}) - Loaded as multimodal part.`,binaryPart:{inlineData:{data:ae,mimeType:W}}}}let k=ss.readFileSync(p,"utf8");k.startsWith("\uFEFF")&&(k=k.slice(1)),k=k.replace(/\r\n/g,`
|
|
285
285
|
`).replace(/\r/g,`
|
|
286
286
|
`);let D=k.split(`
|
|
287
|
-
`),N=D.length,X=Math.max(0,a-1),F=Math.min(N,f),I=D.slice(X,F),
|
|
288
|
-
`);return`${
|
|
287
|
+
`),N=D.length,X=Math.max(0,a-1),F=Math.min(N,f),I=D.slice(X,F),A=`File: [${t}] (Showing lines ${X+1}-${F} of ${N}).`,v=I.map((J,K)=>`${String(X+K+1).padStart(4)}: ${J}`).join(`
|
|
288
|
+
`);return`${A}
|
|
289
289
|
|
|
290
290
|
${v}`}catch(h){return`ERROR: Failed to read file [${t}]: ${h.message}`}}});import er from"fs";import va from"path";var ti,$a=se(()=>{Jt();nn();ti=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,`
|
|
291
291
|
`).replace(/\r/g,`
|
|
@@ -323,7 +323,7 @@ ${f}`}catch(c){return`ERROR: Failed to update file [${n}]: ${c.message}`}}});imp
|
|
|
323
323
|
|
|
324
324
|
\u26A0\uFE0F TRUNCATED: Showing first ${l} of ${r} items.`);let a=`Detailed folder stats for [${o}]:
|
|
325
325
|
|
|
326
|
-
${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 si,_a=se(()=>{Jt();si=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 Mc from"puppeteer";import tr from"path";import Rn from"fs-extra";import{PDFDocument as
|
|
326
|
+
${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 si,_a=se(()=>{Jt();si=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 Mc from"puppeteer";import tr from"path";import Rn from"fs-extra";import{PDFDocument as Oc}from"pdf-lib";var ii,Na=se(()=>{Jt();nn();ii=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=tr.resolve(process.cwd(),o),l=null;try{await Rn.ensureDir(tr.dirname(r)),await bt.recordFileChange(r),l=await Mc.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 F=>{if(!F||F.startsWith("http://")||F.startsWith("https://")||F.startsWith("data:"))return null;try{let I=tr.resolve(process.cwd(),F);if(await Rn.pathExists(I)){let A=tr.extname(I).toLowerCase().replace(".","")||"png",v=A==="jpg"?"jpeg":A==="svg"?"svg+xml":A,J=await Rn.readFile(I,"base64");return`data:image/${v};base64,${J}`}}catch{}return null},a=/<link[^>]+href=["']([^"']+)["']/gi,f={},p;for(;(p=a.exec(t))!==null;){let F=p[1],I=p[0];if(F&&I.toLowerCase().includes("stylesheet")&&!F.startsWith("http://")&&!F.startsWith("https://")&&!F.startsWith("data:"))try{let A=tr.resolve(process.cwd(),F);if(await Rn.pathExists(A)){let v=await Rn.readFile(A,"utf-8");f[I]=`<style>${v}</style>`}}catch{}}for(let[F,I]of Object.entries(f))m=m.split(F).join(I);let h=/<img[^>]+src=["']([^"']+)["']/gi;for(;(p=h.exec(m))!==null;){let F=p[1];if(F&&!d[F]){let I=await u(F);I&&(d[F]=I)}}let T=/url\(\s*['"]?([^'")]+?)['"]?\s*\)/gi;for(;(p=T.exec(m))!==null;){let F=p[1].trim();if(F&&!d[F]){let I=await u(F);I&&(d[F]=I)}}for(let[F,I]of Object.entries(d)){let A=F.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),v=new RegExp(`(src=["'])(${A})(["'])`,"gi");m=m.replace(v,`$1${I}$3`);let J=new RegExp(`url\\(\\s*(['"]?)(${A})\\1\\s*\\)`,"gi");m=m.replace(J,`url($1${I}$1)`)}let w=`
|
|
327
327
|
<style>
|
|
328
328
|
@page {
|
|
329
329
|
margin: ${i};
|
|
@@ -353,7 +353,7 @@ ${d}${u}`;return i.length=0,c.length=0,m.length=0,a}catch(n){return`ERROR: Faile
|
|
|
353
353
|
</style>
|
|
354
354
|
<div class="watermark">Generated by FluxFlow CLI (AI)</div>
|
|
355
355
|
${m}
|
|
356
|
-
`;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
|
|
356
|
+
`;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 Oc.load(S),D=tr.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 N=await k.save();await Rn.writeFile(r,N);let X=await Rn.stat(r);return`SUCCESS: PDF generated successfully at [${o}] (${(X.size/1024).toFixed(2)} KB).`}catch(c){return`ERROR: Failed to generate PDF [${o}]: ${c.message}`}finally{l&&await l.close()}}});import Ua from"fs-extra";import ai from"path";import Ac from"html-to-docx";var li,Ra=se(()=>{Jt();nn();li=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=ai.resolve(process.cwd(),o);try{await Ua.ensureDir(ai.dirname(n)),await bt.recordFileChange(n);let i=ai.basename(o),r=t.includes("<html")?t:`
|
|
357
357
|
<!DOCTYPE html>
|
|
358
358
|
<html lang="en">
|
|
359
359
|
<head>
|
|
@@ -364,29 +364,29 @@ ${d}${u}`;return i.length=0,c.length=0,m.length=0,a}catch(n){return`ERROR: Faile
|
|
|
364
364
|
${t}
|
|
365
365
|
</body>
|
|
366
366
|
</html>
|
|
367
|
-
`,l=await
|
|
367
|
+
`,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 Ua.writeFile(n,l),`SUCCESS: Word document [${o}] generated successfully.
|
|
368
368
|
- Size: ${(l.length/1024).toFixed(1)} KB`}catch(i){return`ERROR: Failed to generate DOCX [${o}]: ${i.message}`}}});import ci from"fs/promises";import br from"path";async function Wa(e,o,t=e,n=1){if(n>12)return[];let i=[],r;try{r=await ci.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 Wa(c,o,t,n+1);i=i.concat(a)}else l.isFile()&&i.push({fullPath:c,relativePath:m})}return i}var di,Ya=se(()=>{Jt();di=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 ci.stat(a)).isFile()&&r.push({fullPath:a,relativePath:br.relative(l,a)})}catch{return`ERROR: File not found: ${t}`}}else r=await Wa(l,n);let c=r.map(async a=>{try{let f=await ci.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:
|
|
369
369
|
|
|
370
370
|
`;return u+=d.join(`
|
|
371
|
-
`),u}catch(r){return`ERROR: ${r.message}`}}});import Cr from"fs-extra";import ui from"path";var or,kr,Lc,Wn,mi=se(()=>{eo();Do();or={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={...or};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={...or,...o,quotas:{...or.quotas,...o.quotas},systemSettings:{...or.systemSettings,...o.systemSettings},profileData:{...or.profileData,...o.profileData},imageSettings:{...or.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},Lc=async e=>{let{FLUXFLOW_DIR:o}=await Promise.resolve().then(()=>(eo(),sa)),t=["logs","secret"];for(let n of t){let i=ui.join(o,n),r=ui.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)}}},Wn=async e=>{try{let o=await kr();if(!o.systemSettings.useExternalData&&e.systemSettings?.useExternalData&&e.systemSettings?.externalDataPath&&await Lc(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(ui.dirname(Qt)),Vr(Qt,t),!0}catch(o){return console.error("Failed to save settings:",o),!1}}});var Ha,Ga=se(()=>{Ha="pk_oH8wkUdQaQK1cmst"});import ja from"fs-extra";import fi from"path";var Dc,pi,Xa=se(()=>{Jt();mi();rs();Ga();nn();Dc=(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}},pi=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 Ca(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:Ha,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 j=r.replace(/\s+/g,"");j==="16:9"?(T=1024,w=576):j==="9:16"?(T=576,w=1024):j==="4:3"?(T=1024,w=768):j==="3:4"?(T=768,w=1024):j==="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")}`,N=await fetch(D,{method:"GET",headers:{Authorization:`Bearer ${f}`}});if(!N.ok){let j=N.status,$e="";try{$e=await N.text()}catch{}return j===402||$e.includes("Insufficient balance")||$e.includes("PAYMENT_REQUIRED")?"ERROR: Image Generation Currently unavailable. Try again later.":`ERROR: Image Generation failed with status [${j}]: ${$e||"Unknown API Error"}`}if((N.headers.get("content-type")||"").includes("application/json")){let j=await N.json();return j.status===402||j.error&&j.error.code==="PAYMENT_REQUIRED"?"ERROR: Image Generation Currently unavailable. Try again later.":`ERROR: Image Generation failed: ${j.error?.message||JSON.stringify(j)}`}let F=await N.arrayBuffer(),I=Buffer.from(F),O={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=Dc(I,O);let v=fi.resolve(process.cwd(),i);await ja.ensureDir(fi.dirname(v)),await bt.recordFileChange(v),await ja.writeFile(v,I),await ka(d);let J=fi.extname(i).toLowerCase(),ae={".jpg":"image/jpeg",".jpeg":"image/jpeg",".png":"image/png",".webp":"image/webp"}[J]||"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:ae}}}:`SUCCESS: Image successfully generated from prompt [${n}] and saved to [${i}].`}catch(d){return`ERROR: Failed during image generation: ${d.message}`}}});var Ir,Ka=se(()=>{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=we(fo,{}),l=we(Uo,{});return l[n]=i,delete r[n],ke(Uo,l),ke(fo,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 nr,qa=se(()=>{Do();eo();nr=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=we(Ft,[]),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(Ft,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 vc,as,Va=se(async()=>{Ia();Ma();Aa();Oa();Da();$a();Fa();await xr();Ba();_a();Na();Ra();Ya();Xa();Ka();qa();vc={web_search:zs,web_scrape:Js,memory:Qs,chat:Zs,view_file:ei,write_file:ti,update_file:ni,exec_command:Ds,read_folder:ri,write_pdf:ii,write_docx:li,search_keyword:di,generate_image:pi,saveSummary:Ir,addMemScore:nr,ask:si,Ask:si,WebSearch:zs,WebScrape:Js,ReadFile:ei,ReadFolder:ri,WriteFile:ti,PatchFile:ni,WritePDF:ii,WriteDoc:li,Run:Ds,SearchKeyword:di,Memory:Qs,Chat:Zs,GenerateImage:pi,saveSumary:Ir,SaveSummary:Ir,SaveSumary:Ir,add_mem_score:nr,AddMemScore:nr,addMemoryScore:nr,AddMemoryScore:nr},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=vc[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,rr,$c,hi,sr,za,gi,Ja,cs,sn,ds,Mr,Qa,xi,Za,yi=se(()=>{io=null,rr=!1,$c="ws://localhost:56832",hi=[],sr=null,za="2.0.0",gi=e=>{za=e,Ja()},Ja=()=>{if(io||rr)return;rr=!0;let e=new ls($c);e.on("open",()=>{for(io=e,rr=!1,io.send(JSON.stringify({command:"version",version:za,pid:process.pid,ppid:process.ppid}));hi.length>0;)io.send(JSON.stringify(hi.shift()))}),e.on("message",o=>{try{let t=JSON.parse(o.toString());t.command==="contextResponse"&&sr&&(sr(t.data),sr=null)}catch{}}),e.on("error",()=>{rr=!1,io=null}),e.on("close",()=>{rr=!1,io=null})},cs=e=>{io&&io.readyState===ls.OPEN?io.send(JSON.stringify(e)):(hi.push(e),rr||Ja())},sn=()=>io!==null&&io.readyState===ls.OPEN,ds=e=>{cs({command:"status",status:e})},Mr=()=>new Promise(e=>{if(!io||io.readyState!==ls.OPEN){e({cursor_line:0,selected:0,manual_edits:"",file_focused:"none",opened_editors:[]});return}sr=e,io.send(JSON.stringify({command:"requestContext"})),setTimeout(()=>{sr===e&&(e({cursor_line:0,selected:0,manual_edits:"",file_focused:"none",opened_editors:[]}),sr=null)},1e3)}),Qa=e=>{cs({command:"open",filePath:e})},xi=(e,o,t)=>{cs({command:"showDiff",filePath:e,originalContent:o,modifiedContent:t})},Za=(e,o)=>{cs({command:"closeDiff",filePath:e,result:o})}});import{GoogleGenAI as Fc,ThinkingLevel as Yo,HarmBlockThreshold as Mn,HarmCategory as An}from"@google/genai";import Ie from"path";import Pt from"fs";var ar,ir,Pc,wi,Bc,ol,Si,Ei,nl,el,_c,rl,Nc,sl,Uc,tl,bi,Ar,Ti,Rc,il,al=se(async()=>{await fa();Er();rs();await Va();Do();Jt();wn();Fn();eo();nn();yi();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"],wi=e=>{if(!e)return!1;let o=e.toLowerCase();return o.startsWith("gemini-")||o.startsWith("gemma-")?!0:Pc.some(t=>t.toLowerCase()===o)},Bc=e=>typeof e!="string"?e:e.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),ol=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)},Si=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 N of S.parts)if(N.text)D.push({type:"text",text:N.text});else if(N.inlineData&&l){let X=N.inlineData.mimeType,F=N.inlineData.data;X.startsWith("image/")&&D.push({type:"image_url",image_url:{url:`data:${X};base64,${F}`}})}}else{let N=S.text||"";N&&D.push({type:"text",text:N})}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 ol("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(`
|
|
372
|
-
`);f=D.pop();for(let N of D){let X=N.trim();if(!(!X||!X.startsWith("data: "))){if(X==="data: [DONE]")break;try{let F=JSON.parse(X.substring(6)),I=F.choices?.[0]?.delta,
|
|
373
|
-
`);h=X.pop();for(let F of X){let I=F.trim();if(!(!I||!I.startsWith("data: "))){if(I==="data: [DONE]")break;try{let
|
|
371
|
+
`),u}catch(r){return`ERROR: ${r.message}`}}});import Cr from"fs-extra";import ui from"path";var or,kr,Lc,Wn,mi=se(()=>{eo();Do();or={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={...or};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={...or,...o,quotas:{...or.quotas,...o.quotas},systemSettings:{...or.systemSettings,...o.systemSettings},profileData:{...or.profileData,...o.profileData},imageSettings:{...or.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},Lc=async e=>{let{FLUXFLOW_DIR:o}=await Promise.resolve().then(()=>(eo(),sa)),t=["logs","secret"];for(let n of t){let i=ui.join(o,n),r=ui.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)}}},Wn=async e=>{try{let o=await kr();if(!o.systemSettings.useExternalData&&e.systemSettings?.useExternalData&&e.systemSettings?.externalDataPath&&await Lc(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(ui.dirname(Qt)),Vr(Qt,t),!0}catch(o){return console.error("Failed to save settings:",o),!1}}});var Ha,Ga=se(()=>{Ha="pk_oH8wkUdQaQK1cmst"});import ja from"fs-extra";import fi from"path";var Dc,pi,Xa=se(()=>{Jt();mi();rs();Ga();nn();Dc=(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}},pi=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 Ca(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:Ha,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 j=r.replace(/\s+/g,"");j==="16:9"?(T=1024,w=576):j==="9:16"?(T=576,w=1024):j==="4:3"?(T=1024,w=768):j==="3:4"?(T=768,w=1024):j==="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")}`,N=await fetch(D,{method:"GET",headers:{Authorization:`Bearer ${f}`}});if(!N.ok){let j=N.status,$e="";try{$e=await N.text()}catch{}return j===402||$e.includes("Insufficient balance")||$e.includes("PAYMENT_REQUIRED")?"ERROR: Image Generation Currently unavailable. Try again later.":`ERROR: Image Generation failed with status [${j}]: ${$e||"Unknown API Error"}`}if((N.headers.get("content-type")||"").includes("application/json")){let j=await N.json();return j.status===402||j.error&&j.error.code==="PAYMENT_REQUIRED"?"ERROR: Image Generation Currently unavailable. Try again later.":`ERROR: Image Generation failed: ${j.error?.message||JSON.stringify(j)}`}let F=await N.arrayBuffer(),I=Buffer.from(F),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=Dc(I,A);let v=fi.resolve(process.cwd(),i);await ja.ensureDir(fi.dirname(v)),await bt.recordFileChange(v),await ja.writeFile(v,I),await ka(d);let J=fi.extname(i).toLowerCase(),ae={".jpg":"image/jpeg",".jpeg":"image/jpeg",".png":"image/png",".webp":"image/webp"}[J]||"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:ae}}}:`SUCCESS: Image successfully generated from prompt [${n}] and saved to [${i}].`}catch(d){return`ERROR: Failed during image generation: ${d.message}`}}});var Ir,Ka=se(()=>{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=we(fo,{}),l=we(Uo,{});return l[n]=i,delete r[n],ke(Uo,l),ke(fo,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 nr,qa=se(()=>{Do();eo();nr=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=we(Ft,[]),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(Ft,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 vc,as,Va=se(async()=>{Ia();Ma();Oa();Aa();Da();$a();Fa();await xr();Ba();_a();Na();Ra();Ya();Xa();Ka();qa();vc={web_search:zs,web_scrape:Js,memory:Qs,chat:Zs,view_file:ei,write_file:ti,update_file:ni,exec_command:Ds,read_folder:ri,write_pdf:ii,write_docx:li,search_keyword:di,generate_image:pi,saveSummary:Ir,addMemScore:nr,ask:si,Ask:si,WebSearch:zs,WebScrape:Js,ReadFile:ei,ReadFolder:ri,WriteFile:ti,PatchFile:ni,WritePDF:ii,WriteDoc:li,Run:Ds,SearchKeyword:di,Memory:Qs,Chat:Zs,GenerateImage:pi,saveSumary:Ir,SaveSummary:Ir,SaveSumary:Ir,add_mem_score:nr,AddMemScore:nr,addMemoryScore:nr,AddMemoryScore:nr},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=vc[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,rr,$c,hi,sr,za,gi,Ja,cs,sn,ds,Mr,Qa,xi,Za,yi=se(()=>{io=null,rr=!1,$c="ws://localhost:56832",hi=[],sr=null,za="2.0.0",gi=e=>{za=e,Ja()},Ja=()=>{if(io||rr)return;rr=!0;let e=new ls($c);e.on("open",()=>{for(io=e,rr=!1,io.send(JSON.stringify({command:"version",version:za,pid:process.pid,ppid:process.ppid}));hi.length>0;)io.send(JSON.stringify(hi.shift()))}),e.on("message",o=>{try{let t=JSON.parse(o.toString());t.command==="contextResponse"&&sr&&(sr(t.data),sr=null)}catch{}}),e.on("error",()=>{rr=!1,io=null}),e.on("close",()=>{rr=!1,io=null})},cs=e=>{io&&io.readyState===ls.OPEN?io.send(JSON.stringify(e)):(hi.push(e),rr||Ja())},sn=()=>io!==null&&io.readyState===ls.OPEN,ds=e=>{cs({command:"status",status:e})},Mr=()=>new Promise(e=>{if(!io||io.readyState!==ls.OPEN){e({cursor_line:0,selected:0,manual_edits:"",file_focused:"none",opened_editors:[]});return}sr=e,io.send(JSON.stringify({command:"requestContext"})),setTimeout(()=>{sr===e&&(e({cursor_line:0,selected:0,manual_edits:"",file_focused:"none",opened_editors:[]}),sr=null)},1e3)}),Qa=e=>{cs({command:"open",filePath:e})},xi=(e,o,t)=>{cs({command:"showDiff",filePath:e,originalContent:o,modifiedContent:t})},Za=(e,o)=>{cs({command:"closeDiff",filePath:e,result:o})}});import{GoogleGenAI as Fc,ThinkingLevel as Yo,HarmBlockThreshold as Mn,HarmCategory as On}from"@google/genai";import Ie from"path";import Pt from"fs";var ar,ir,Pc,wi,Bc,ol,Si,Ei,nl,el,_c,rl,Nc,sl,Uc,tl,bi,Or,Ti,Rc,il,al=se(async()=>{await fa();Er();rs();await Va();Do();Jt();wn();Fn();eo();nn();yi();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"],wi=e=>{if(!e)return!1;let o=e.toLowerCase();return o.startsWith("gemini-")||o.startsWith("gemma-")?!0:Pc.some(t=>t.toLowerCase()===o)},Bc=e=>typeof e!="string"?e:e.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),ol=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)},Si=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 N of S.parts)if(N.text)D.push({type:"text",text:N.text});else if(N.inlineData&&l){let X=N.inlineData.mimeType,F=N.inlineData.data;X.startsWith("image/")&&D.push({type:"image_url",image_url:{url:`data:${X};base64,${F}`}})}}else{let N=S.text||"";N&&D.push({type:"text",text:N})}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 ol("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(`
|
|
372
|
+
`);f=D.pop();for(let N of D){let X=N.trim();if(!(!X||!X.startsWith("data: "))){if(X==="data: [DONE]")break;try{let F=JSON.parse(X.substring(6)),I=F.choices?.[0]?.delta,A=F.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)}},Ei=async function*(e,o,t,n,i,r,l){let c=[];n&&c.push({role:"system",content:n});for(let D of t){let N=D.role==="user"?"user":"assistant",X=[];if(Array.isArray(D.parts)){for(let F of D.parts)if(F.text)X.push({type:"text",text:F.text});else if(F.inlineData&&l){let I=F.inlineData.mimeType,A=F.inlineData.data;I.startsWith("image/")?X.push({type:"image_url",image_url:{url:`data:${I};base64,${A}`}}):X.push({type:"file",file:{filename:F.filename||"file",file_data:`data:${I};base64,${A}`}})}}else{let F=D.text||"";F&&X.push({type:"text",text:F})}c.push({role:N,content:X.length===1&&X[0].type==="text"?X[0].text:X})}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 ol("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:N}=await f.read();if(D){k&&(T.length>0||w)&&(yield{candidates:T.length>0?[{content:{parts:T}}]:[],usageMetadata:w});break}h+=p.decode(N,{stream:!0});let X=h.split(`
|
|
373
|
+
`);h=X.pop();for(let F of X){let I=F.trim();if(!(!I||!I.startsWith("data: "))){if(I==="data: [DONE]")break;try{let A=JSON.parse(I.substring(6)),v=A.choices?.[0]?.delta,J=A.usage;if(J&&(w={totalTokenCount:J.total_tokens||J.prompt_tokens+J.completion_tokens,promptTokenCount:J.prompt_tokens||0,candidatesTokenCount:J.completion_tokens||0,cachedContentTokenCount:J.prompt_tokens_details?.cached_tokens||0,thoughtsTokenCount:J.completion_tokens_details?.reasoning_tokens||0},k=!0),v){let K=v.reasoning||(v.reasoning_details?v.reasoning_details.map(ae=>ae.text).join(""):null);K&&(T.push({text:K,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)}},nl=()=>{ir=!0},el={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"},_c=(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}},rl=async(e,o,t,n,i={})=>{process.stdout.isTTY&&(process.stdout.write("\x1B]0;Finalizing...\x07"),process.stdout.write("\x1B]633;P;TerminalTitle=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,X=we(Ft,[]).map(fe=>`- [${fe.id}]: ${fe.memory}`).join(`
|
|
374
374
|
`),F=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=Bc(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,(Ve,ue)=>`[METADATA (PRIORITY: DYNAMIC)] Time: ${ue.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,`
|
|
375
375
|
`).replace(/\n\n/g,`
|
|
376
376
|
`).replace(/\\n\\n/g,"").trim(),Ke=fe.role==="user"?r:l,qe=ut.substring(0,Ke);ut.length>Ke&&(qe+=`
|
|
377
|
-
... (truncated) ...`);let Pe=fe.role==="user"?qe.startsWith("[USER]")?"":"[USER]: ":qe.startsWith("[AGENT]")?"":"[AGENT]: ";return{role:fe.role==="user"?"user":"model",parts:[{text:`${Pe}${qe}`}]}}),I=n.filter(fe=>fe.role==="user").length===1,
|
|
377
|
+
... (truncated) ...`);let Pe=fe.role==="user"?qe.startsWith("[USER]")?"":"[USER]: ":qe.startsWith("[AGENT]")?"":"[AGENT]: ";return{role:fe.role==="user"?"user":"model",parts:[{text:`${Pe}${qe}`}]}}),I=n.filter(fe=>fe.role==="user").length===1,A=o.includes("[TITLE-UPDATE]"),v=Math.random()<.8,J=I||A||v,K=t.replace(/(?:<think>|\[think\])[\s\S]*?(?:<\/think>|\[\/think\])/g,"").trim(),ae=ma(X,D,J),W=`${K.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)}`;W.length>l&&(W+=`
|
|
378
378
|
... (truncated) ...`);let j=o.replace(/\[Prompted on:.*?\]/g,"").trim();W=W.replace(/\r?\n\r?\n/g,`
|
|
379
379
|
`).replace(/\n\n/g,`
|
|
380
380
|
`).replace(/\\n\\n/g,"").trim();let $e=`[USER]: ${j.substring(0,r)}
|
|
381
381
|
${j.length>r?`... (truncated) ...
|
|
382
382
|
|
|
383
383
|
`:""}
|
|
384
|
-
[AGENT (current turn)]: ${W}`;F.push({role:"user",parts:[{text:$e}]});let le="",
|
|
384
|
+
[AGENT (current turn)]: ${W}`;F.push({role:"user",parts:[{text:$e}]});let le="",Oe=0,nt=D?12:-1;for(;Oe<=nt;){process.stdout.isTTY&&(process.stdout.write(`\x1B]0;Retrying Finalizing... (${Oe+1})...\x07`),process.stdout.write(`\x1B]633;P;TerminalTitle=Retrying Finalizing... (${Oe+1})...\x07`));try{if(!await qs("background",e))return;let fe="",ut=null;try{let Pe=new Promise((oo,Ae)=>setTimeout(()=>Ae(new Error("JANITOR_TIMEOUT")),6e4)),Ve=(async()=>{if(S==="OpenRouter"){let yt=Ei(k,"google/gemma-4-26b-a4b-it:free",F,ae,"Fast",f)[Symbol.asyncIterator](),Ko=await yt.next();return{iterator:yt,firstResult:Ko}}else if(S==="DeepSeek"){let Ae=Si(k,"deepseek-chat",F,ae,"Fast",f,!1)[Symbol.asyncIterator](),yt=await Ae.next();return{iterator:Ae,firstResult:yt}}else{let Ae=(await ar.models.generateContentStream({model:p||"gemma-4-26b-a4b-it",contents:F,config:{systemInstruction:ae,maxOutputTokens:512,temperature:.3,safetySettings:[{category:On.HARM_CATEGORY_HARASSMENT,threshold:Mn.BLOCK_NONE},{category:On.HARM_CATEGORY_HATE_SPEECH,threshold:Mn.BLOCK_NONE},{category:On.HARM_CATEGORY_SEXUALLY_EXPLICIT,threshold:Mn.BLOCK_NONE},{category:On.HARM_CATEGORY_DANGEROUS_CONTENT,threshold:Mn.BLOCK_NONE}],thinkingConfig:{includeThoughts:!1,thinkingLevel:Yo.MINIMAL}}}))[Symbol.asyncIterator](),yt=await Ae.next();return{iterator:Ae,firstResult:yt}}})(),{iterator:ue,firstResult:go}=await Promise.race([Ve,Pe]),{value:xo,done:cn}=go;if(!cn&&xo){let oo=xo.candidates?.[0]?.content?.parts,Ae=oo?.[1]?.text||oo?.[0]?.text||(typeof xo.text=="function"?xo.text():"");Ae&&(fe+=Ae),ut=xo.usageMetadata;for await(let yt of{[Symbol.asyncIterator]:()=>ue}){let Ko=yt.candidates?.[0]?.content?.parts,qo=Ko?.[1]?.text||Ko?.[0]?.text||(typeof yt.text=="function"?yt.text():"");qo&&(fe+=qo),ut=yt.usageMetadata}}}catch(Pe){throw Pe}if(fe)le=fe,ut&&await ho("tokens",ut.totalTokenCount||0);else throw new Error("No synthesis generated by Janitor.");d&&(d(),await Un("background"));let Ke=bi(le),qe=!1;for(let Pe of Ke){let Ve=Pe.toolName;["addMemScore","add_mem_score","AddMemScore","addMemoryScore","AddMemoryScore"].includes(Ve)&&(qe=!0);let ue={chatId:h,sessionId:h,history:n},go=await as(Ve,Pe.args,ue);Ve.toLowerCase()==="memory"&&(Pe.args.includes("action='user'")||Pe.args.includes('action="user"'))&&!go.startsWith("ERROR")&&(m&&m(),process.stdout.isTTY&&(process.stdout.write("\x1B]0;Memory Updated\x07"),process.stdout.write("\x1B]633;P;TerminalTitle=Memory Updated\x07")),await new Promise(cn=>setTimeout(cn,3e3)))}if(!qe)try{let Pe=we(Ft,[]);if(Pe.length>0){let Ve=[];for(let ue of Pe)ue.score===void 0&&(ue.score=.5),ue.score*=.9995,ue.score<.05&&(ue.score=0),ue.score=Math.round(ue.score*1e5)/1e5,ue.score>0&&Ve.push(ue);ke(Ft,Ve)}}catch{}break}catch(fe){Oe++;let ut=new Date().toLocaleString();process.stdout.isTTY&&process.stdout.write("\x1B]0;Finalizing Error\x07"),await new Promise(Pe=>setTimeout(Pe,1e3));let Ke=Ie.join(Co,"janitor");if(Pt.existsSync(Ke)||Pt.mkdirSync(Ke,{recursive:!0}),Pt.appendFileSync(Ie.join(Ke,"error.log"),`ERROR [Attempt ${Oe}/${nt+1}] [${ut}]: ${String(fe)}
|
|
385
385
|
|
|
386
|
-
`),
|
|
386
|
+
`),Oe>nt)break;let qe=Math.min(1e3*Math.pow(2,Oe-1),8e3);await new Promise(Pe=>setTimeout(Pe,qe))}}if(Oe){let fe=Ie.join(Co,"janitor");Pt.appendFileSync(Ie.join(fe,"error.log"),`-----------------------------------------------------------------------------
|
|
387
387
|
|
|
388
388
|
|
|
389
|
-
`),
|
|
389
|
+
`),Oe>=nt&&(process.stdout.isTTY&&process.stdout.write(`\x1B]0;${D?"Finalizing Error":"Finalizing Skipped"}\x07`),await new Promise(ut=>setTimeout(ut,3e3)))}process.stdout.isTTY&&(process.stdout.write("\x1B]0;FluxFlow | Idle\x07"),process.stdout.write("\x1B]633;P;TerminalTitle=FluxFlow | Idle\x07"))},Nc=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}},sl=(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},Uc=(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},tl=e=>sl(e,!0),bi=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},Or=e=>e?(ar=new Fc({apiKey:e}),ar):null,Ti=async(e,o,t,n,i="Fast")=>{let{aiProvider:r="Google",apiKey:l,mode:c}=e,m="",d=null,u;r==="OpenRouter"?u=Ei(l,o,t,n,i,c,!1):r==="DeepSeek"?u=Si(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}},Rc=async(e,o)=>{try{let{aiProvider:t="Google"}=o,n=we(fo,{});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.
|
|
390
390
|
Your task is to summarize or merge temporary context memories from one or more past conversation sessions.
|
|
391
391
|
For each Chat ID provided, you must output a tool call to save the consolidated summary.
|
|
392
392
|
|
|
@@ -411,7 +411,7 @@ ${h}
|
|
|
411
411
|
${h}
|
|
412
412
|
|
|
413
413
|
`}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 Ti(o,a,l,null,"Fast"),p=f.text||"",h=bi(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 ho("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");Pt.existsSync(n)||Pt.mkdirSync(n,{recursive:!0}),Pt.appendFileSync(Ie.join(n,"error.log"),`[${new Date().toLocaleString()}] Past memory batch consolidation error: ${t.message}
|
|
414
|
-
`)}},il=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=wi(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,N=w.includes("[TITLE-UPDATE]"),X=D||N,F=w.replace(/\[TITLE-UPDATE\]/g,"").trim();F=F.replace(/\s*\[Prompted on:.*?\]/g,"").trim(),await bt.startTransaction(d,F);try{let I=[...o.slice(0,-1)],
|
|
414
|
+
`)}},il=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=wi(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,N=w.includes("[TITLE-UPDATE]"),X=D||N,F=w.replace(/\[TITLE-UPDATE\]/g,"").trim();F=F.replace(/\s*\[Prompted on:.*?\]/g,"").trim(),await bt.startTransaction(d,F);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 Z=wt=>wt.filter(ft=>(ft.role==="user"||ft.role==="agent"||ft.role==="system")&&!String(ft.id).startsWith("welcome")&&!ft.isMeta).map(ft=>`[${ft.text?.startsWith("[TOOL RESULT]")?"TOOL":ft.role==="agent"?"AGENT":"USER"}]: ${ft.text}`).join(`
|
|
415
415
|
|
|
416
416
|
`),Me=async(wt,ft)=>{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.",ce=ft?`Here is the previous summary:
|
|
417
417
|
${ft}
|
|
@@ -424,13 +424,13 @@ ${wt}
|
|
|
424
424
|
|
|
425
425
|
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 it=0,lo=!1,pt=null;for(;it<=3&&!lo;){it++;try{pt=await Ti(t,Bt,ce,We,"Fast"),lo=!0}catch{if(it>3){if(f==="Google")try{return(await Ti(t,"gemini-3.1-flash-lite",ce,We,"Fast")).text||""}catch{return""}return""}}}return pt&&pt.text||""},rt=Z(I),ne=we(S,{}),ge=ne[d]||{summary:"",historyLength:0};typeof ge=="string"&&(ge={summary:ge,historyLength:0});let pe=I.filter(wt=>(wt.role==="user"||wt.role==="agent"||wt.role==="system")&&!String(wt.id).startsWith("welcome")&&!wt.isMeta).length;ge.historyLength&&pe<ge.historyLength&&(ge.summary="",ge.historyLength=0,ne[d]=ge,ke(S,ne));let st=ge.summary||"",$o=await Me(rt,st);$o&&(ge.summary=$o,ne[d]=ge,ke(S,ne),I=[],k=!0)}D&&T&&(yield{type:"status",content:"Condensing past chat memories..."},await Rc(d,t));let J=we(fo,{}),K=we(Uo,{}),ae=Object.entries(J).filter(([Z])=>Z!==d).flatMap(([Z,Me])=>Me),j=[...Object.entries(K).filter(([Z])=>Z!==d).slice(-20).map(([Z,Me])=>`[Chat Summary]: ${Me}`),...ae].map(Z=>`- ${Z}`).join(`
|
|
426
426
|
`),le=we(Ft,[]).map(Z=>`- ${Z.memory}`).join(`
|
|
427
|
-
`),
|
|
427
|
+
`),Oe=(a?.tokens||0)>=24e3,nt=da(j,le,T,Oe),fe=new Date().toLocaleString([],{year:"numeric",month:"numeric",day:"numeric",hour:"2-digit",minute:"2-digit",hour12:!0}),ut=[".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"],Ke=Z=>{try{return Pt.readdirSync(Z,{withFileTypes:!0})}catch{return[]}},qe=(Z,Me={value:0},rt=1)=>{if(Me.value>6200||rt>7)return Me.value;let ne=Ke(Z);for(let ge of ne){if(Me.value>6200)break;ut.includes(ge.name)||ge.isDirectory()&&(Me.value++,qe(Ie.join(Z,ge.name),Me,rt+1))}return Me.value},Pe=(Z,Me,rt="",ne=1)=>{let ge=Ke(Z),pe=Ie.sep;if(ge.length>100)return`${rt}\u2514\u2500\u2500 ${Ie.basename(Z)}${pe} ...100+ files...
|
|
428
428
|
`;let st="",$o=ut,wt=ge.filter(ce=>!$o.includes(ce.name)),ft=ge.filter(ce=>$o.includes(ce.name)).map(ce=>ce.name).sort();wt.sort((ce,Bt)=>ce.isDirectory()&&!Bt.isDirectory()?-1:!ce.isDirectory()&&Bt.isDirectory()?1:ce.name.localeCompare(Bt.name));let We=[...wt.map(ce=>({name:ce.name,isDir:ce.isDirectory()})),...ft.map(ce=>({name:ce,isDir:!0,isCollapsed:!0}))];return We.forEach((ce,Bt)=>{let it=Bt===We.length-1,lo=Ie.join(Z,ce.name),pt=it?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ",dn=rt+(it?" ":"\u2502 ");if(ce.isCollapsed){st+=`${rt}${pt}${ce.name}${pe}...
|
|
429
429
|
`;return}ce.isDir?ne>Me?st+=`${rt}${pt}${ce.name}${pe} ...depth exceeded...
|
|
430
430
|
`:Ke(lo).length>80?st+=`${rt}${pt}${ce.name}${pe} ...80+ files...
|
|
431
431
|
`:(st+=`${rt}${pt}${ce.name}${pe}
|
|
432
432
|
`,st+=Pe(lo,Me,dn,ne+1)):st+=`${rt}${pt}${ce.name}
|
|
433
|
-
`}),st};yield{type:"status",content:"Gathering Context..."},await new Promise(Z=>setTimeout(Z,500));let Ve=qe(process.cwd()),ue=12;Ve>4096?ue=1:Ve>3072?ue=2:Ve>2048?ue=3:Ve>1024?ue=4:Ve>512?ue=6:Ve>256?ue=7:Ve>128?ue=8:Ve>64?ue=9:Ve>32&&(ue=10);let go=we(Jr,{}),xo=go[d],cn=xo?xo!==process.cwd():!1;go[d]=process.cwd(),ke(Jr,go);let oo=we(S,{}),
|
|
433
|
+
`}),st};yield{type:"status",content:"Gathering Context..."},await new Promise(Z=>setTimeout(Z,500));let Ve=qe(process.cwd()),ue=12;Ve>4096?ue=1:Ve>3072?ue=2:Ve>2048?ue=3:Ve>1024?ue=4:Ve>512?ue=6:Ve>256?ue=7:Ve>128?ue=8:Ve>64?ue=9:Ve>32&&(ue=10);let go=we(Jr,{}),xo=go[d],cn=xo?xo!==process.cwd():!1;go[d]=process.cwd(),ke(Jr,go);let oo=we(S,{}),Ae=oo[d]||{summary:"",historyLength:0};typeof Ae=="string"&&(Ae={summary:Ae,historyLength:0});let yt=o.filter(Z=>(Z.role==="user"||Z.role==="agent"||Z.role==="system")&&!String(Z.id).startsWith("welcome")&&!Z.isMeta).length;Ae.historyLength&&yt<Ae.historyLength&&(Ae.summary="",Ae.historyLength=0,oo[d]=Ae,ke(S,oo));let Ko=typeof Ae=="object"?Ae.summary||"":Ae||"",qo=Ko?`
|
|
434
434
|
|
|
435
435
|
--- CONTEXT SUMMARY OF PREVIOUS TURNS (PRIORITY: HIGH) ---
|
|
436
436
|
${Ko}
|
|
@@ -465,13 +465,13 @@ ${l!="Fast"&&f==="Google"?`${e.toLowerCase().startsWith("gemma")?`[SYSTEM] **STR
|
|
|
465
465
|
[STEERING HINT]: ${re}`: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>**
|
|
466
466
|
`:""}`:""}[STEERING HINT]: ${re}`}),yield{type:"status",content:"Steering Hint Injected."})}let Me,rt=!1,ne=1,ge=1,pe="",st=null,$o=null,wt=null,ft=0,We=[],ce=0,Bt=!1,it=!1,lo=!1,pt=!1,dn=!0,Ze="",at="",_t=!1,Gt=e,Vo="";for(;ne<=mt&&ge<=mt&&!rt&&!ir;){let re=!1;try{pe="",dn&&(process.stdout.isTTY&&process.stdout.write("\x1B]0;Working...\x07"),yield{type:"turn_reset",content:!0},yield{type:"spinner",content:!0},dn=!1,ge===1&&(Ze=""));let _e=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,co)=>{let Be=[{text:Ee.text}];return Ee.binaryPart&&wi(Gt)&&co.slice(Je+1).filter(un=>un.role==="user"&&!un.text?.startsWith("[TOOL RESULT]")).length<=2&&Be.push(Ee.binaryPart),{role:Ee.role==="user"||Ee.role==="system"?"user":"model",parts:Be}});if(!await qs("agent",t))throw new Error("Error: Quota Exausted for Agent");Gt=e,f==="DeepSeek"&&l==="Fast"&&(Gt="deepseek-chat"),ne===mt-1?(Gt=f==="DeepSeek"?"deepseek-v4-flash":"gemini-3-flash-preview",yield{type:"model_update",content:"Trying with fallback model"}):ne===mt?(Gt=f==="DeepSeek"?"deepseek-v4-pro":"gemini-3.5-flash",yield{type:"model_update",content:"Trying with fallback model"}):ne>12&&ne<mt-2&&t.apiKey!=="custom"?(Gt="gemma-4-31b-it",yield{type:"model_update",content:"Trying with fallback Gemma Model"}):ne>0&&(yield{type:"model_update",content:null}),Vo=ua(r,(Gt||"gemma").toLowerCase().startsWith("gemma")?l:"GEM",c,u,T,D,f,h);let Ne=e&&e.toLowerCase().startsWith("gemma"),lt=_e[_e.length-1];if(Ne){let Ee=`
|
|
467
467
|
[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>}**":""}`;lt&<.role==="user"&<.parts?.[0]?.text?.startsWith("[TOOL RESULT]")&&(lt.parts[0].text+=Ee)}if(Ne){let Ee=Math.floor(Hn*(c==="Flux"?.98:.7)),Je=Z+1;Je>=Ee&<&<.parts?.[0]&&(lt.parts[0].text+=`
|
|
468
|
-
[SYSTEM] WARNING, Turn Limit Impending: Step ${Je}/${Hn}. Wrap up quickly/prompt user to continue & use [turn:finish] quickly.`)}let Tt=_e;f==="OpenRouter"?Me=Ei(t.apiKey,Gt,Tt,Vo,l,c,h):f==="DeepSeek"?Me=Si(t.apiKey,Gt,Tt,Vo,l,c,h):Me=await ar.models.generateContentStream({model:Gt||"gemma-4-31b-it",contents:Tt,config:{systemInstruction:Vo,temperature:c==="Flux"?1:1.4,maxOutputTokens:32768,mediaResolution:"MEDIA_RESOLUTION_MEDIUM",safetySettings:[{category:
|
|
469
|
-
`).length;
|
|
468
|
+
[SYSTEM] WARNING, Turn Limit Impending: Step ${Je}/${Hn}. Wrap up quickly/prompt user to continue & use [turn:finish] quickly.`)}let Tt=_e;f==="OpenRouter"?Me=Ei(t.apiKey,Gt,Tt,Vo,l,c,h):f==="DeepSeek"?Me=Si(t.apiKey,Gt,Tt,Vo,l,c,h):Me=await ar.models.generateContentStream({model:Gt||"gemma-4-31b-it",contents:Tt,config:{systemInstruction:Vo,temperature:c==="Flux"?1:1.4,maxOutputTokens:32768,mediaResolution:"MEDIA_RESOLUTION_MEDIUM",safetySettings:[{category:On.HARM_CATEGORY_HARASSMENT,threshold:Mn.BLOCK_NONE},{category:On.HARM_CATEGORY_HATE_SPEECH,threshold:Mn.BLOCK_NONE},{category:On.HARM_CATEGORY_SEXUALLY_EXPLICIT,threshold:Mn.BLOCK_NONE},{category:On.HARM_CATEGORY_DANGEROUS_CONTENT,threshold:Mn.BLOCK_NONE}],thinkingConfig:(()=>{let Ee=(Gt||"").toLowerCase(),Je=Ee.includes("gemma-4")||Ee.startsWith("gemma"),co=Ee.includes("gemini-3");if(Je||co)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 Be={Fast:0,Low:512,Medium:2048,High:16384,xHigh:24576}[l]||2048;return Be===0?{includeThoughts:!1}:{includeThoughts:!0,thinkingBudget:Be}}})()}}),pe="",st=null,wt=null,We=[],ce=0,yield{type:"model_update",content:null},yield{type:"status",content:"Working..."},at="",_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(Be=>setTimeout(Be,1500));break}let Je="",co=Ee.candidates?.[0]?.content?.parts;if(co&&co.length>0)for(let Be of co)Be.thought?Be.text&&(re||(Je+="<think>",re=!0),Je+=Be.text):Be.text&&(re&&(Je+="</think>",re=!1),Je+=Be.text);else{let Be=Ee.text||"";Be&&re&&(Je+="</think>",re=!1),Je+=Be}if(Je){if(_t){if(at+=Je,at.length>=30){let z=0,Ye=Math.min(Ze.length,at.length);for(let G=Ye;G>0;G--)if(Ze.endsWith(at.substring(0,G))){z=G;break}let St=at.substring(z);if(St){let Ge=/(?:<(think|thought)>|\[(think|thought)\])(?:(?!(?:<\/(?:think|thought)>|\[\/(?:think|thought)\]))[\s\S])*$/i.test(Ze)?St.replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])\s*/gi,""):St.replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])[\s\S]*?(?:<\/(think|thought)>|\[\/(think|thought)\])\s*/gi,"").replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])\s*/gi,"");Ge&&(pe+=Ge,f==="Google"?et+=Ge:yield{type:"text",content:Ge})}_t=!1,at=""}continue}else pe+=Je,f==="Google"?et+=Je:yield{type:"text",content:Je};let Be=tl(pe),wo=Nc(pe);if(wo.inside){wt||(wt=Date.now());let z=wo.toolName,St={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"}[z]||z,G=wo.args||"",Ge=null;if(["write_file","update_file","view_file","read_folder","write_pdf","write_docx","search_keyword","generate_image"].includes(St)){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 $n=G.match(/(?:path|targetFile|TargetFile|directory|keyword)\s*=\s*\\?["']?([^\\"' \),]+)/);if($n){let Et=$n[1].replace(/["']/g,"");Ge=St==="search_keyword"?Et:Ie.basename(Et.replace(/\\/g,"/"))}}}let Kt=`${el[St]||St}${Ge?` (${Ge})`:""}`;if((St!==st||Ge!==$o)&&(st=St,$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"}[St]||"Working";process.stdout.write(`\x1B]0;${_o}...\x07`)}}let un=sl(pe,!1),mn=(un.match(/(?:<think>|\[think\])([\s\S]*?)(?:<\/think>|\[\/think\]|$)/gi)||[]).join("").trim(),zo=mn.split(/[.!?]\s+/),Xn=new Set(zo),ur=zo.length>10?(zo.length-Xn.size)/zo.length:0,vr=mn.split(/\s+/).filter(z=>z.length>0).length,Po=.4,$r=.6,Kn=!1;if((Gt||"").toLowerCase().startsWith("gemma")){let Ye={low:256,medium:768,high:2048,max:4096,xhigh:4096}[l?.toLowerCase()]||2500;Kn=vr>Ye}if(ur>Po||Kn){yield{type:"status",content:`${ur>Po?"Reasoning Loop Detected":"Thinking Budget Exceeded"}. Re-centering...`},it=!0,await new Promise(Ye=>setTimeout(Ye,3e3));break}let qn=Be.trim().split(/[.!?]\s+/),fn=new Set(qn);if((qn.length>10?(qn.length-fn.size)/qn.length:0)>$r){yield{type:"status",content:"Response Loop Detected. Re-centering..."},it=!1,pt=!0,await new Promise(z=>setTimeout(z,3e3));break}let Bo=un.toLowerCase().split(/\s+/).filter(z=>z.length>0),pn=!1;if(Bo.length>5)for(let z=1;z<=15;z++){let Ye=Math.max(3,Math.ceil(8/z));if(Bo.length<z*Ye)continue;let St=!0,Ge=Bo.slice(Bo.length-z).join(" ");for(let Kt=1;Kt<Ye;Kt++)if(Bo.slice(Bo.length-z*(Kt+1),Bo.length-z*Kt).join(" ")!==Ge){St=!1;break}if(St){pn=!0;break}}if(!pn){let z=un.toLowerCase().replace(/[^a-z0-9]/gi,"");if(z.length>=10)for(let Ye=1;Ye<=10;Ye++){let St=Math.max(4,Math.ceil(12/Ye));if(z.length<Ye*St)continue;let G=z.substring(z.length-Ye),Ge=!0;for(let Kt=1;Kt<St;Kt++)if(z.substring(z.length-Ye*(Kt+1),z.length-Ye*Kt)!==G){Ge=!1;break}if(Ge){pn=!0;break}}}if(pn){yield{type:"status",content:"Stuttering Detected. Re-centering..."},it=!1,lo=!0,await new Promise(z=>setTimeout(z,3e3));break}let Vn=pe.replace(/(?:<(think|thought|thoughts)>|\[(think|thought|thoughts)\])[\s\S]*?(?:<\/(think|thought|thoughts)>|\[\/(think|thought|thoughts)\]|$)/gi,""),Pr=bi(Vn);for(;Pr.length>ce;){let z=Pr[ce],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"}[z.toolName]||z.toolName,Ge=el[G]||z.toolName,Kt=_c(G,z.args);yield{type:"status",content:`${Ge}${Kt?` (${Kt})`:""}...`};let Le="";if(G==="web_search"){let{query:ie,limit:De=10}=oe(z.args);Le=`\u{1F50D} Searched: ${ie}`}else if(G==="web_scrape")Le=`\u{1F4D6} Visited: ${oe(z.args).url||"..."}`;else if(G==="view_file"){let{path:ie,StartLine:De,EndLine:He,start_line:je,end_line:ht,startLine:be,endLine:uo}=oe(z.args),x=De||je||be,g=He||ht||uo,M=parseInt(x)||1,P=parseInt(g)||(x?M+800:800),O="...",$=P;try{let q=Ie.resolve(process.cwd(),ie);if(Pt.existsSync(q)){let ve=Pt.readFileSync(q,"utf8").split(`
|
|
469
|
+
`).length;O=ve,$=Math.min(P,ve)}}catch{}let _=ie.toLowerCase(),b=_.endsWith(".pdf"),L=_.endsWith(".docx")||_.endsWith(".doc")||_.endsWith(".ppt")||_.endsWith(".pptx")||_.endsWith(".xls")||_.endsWith(".xlsx"),B=/\.(png|jpg|jpeg|webp|gif|bmp)$/.test(_);b||L?Le=`\u{1F4C4} Viewed: ${ie}`:B?Le=`\u{1F4F8} Viewed: ${ie}`:Le=`\u{1F4C4} Read: ${ie} \u2192 Lines ${M} - ${$} of ${O}`}else if(G==="list_files"||G==="read_folder"){let ie=G==="list_files"?"List":"Viewed",De=oe(z.args).path;Le=`\u{1F4C2} ${ie}: ${De==="."?"./":De}`}else if(G==="write_file"||G==="update_file")Le=`\u{1F4BE} ${G==="write_file"?"Created":"Edited"}: ${oe(z.args).path||"..."}`;else if(G==="write_pdf")Le=`\u{1F4D1} Created: ${oe(z.args).path||"..."}`;else if(G==="write_docx")Le=`\u{1F4DD} Created: ${oe(z.args).path||"..."}`;else if(G==="search_keyword")Le="";else if(G==="generate_image"){let{path:ie,outputPath:De,output:He}=oe(z.args);Le=`\u{1F3A8} Generated: ${ie||De||He||"generated_image.png"}`}else G==="exec_command"||G==="ask"?Le="":Le=`Executed: ${z.toolName}`;if(G==="exec_command"){let{command:ie}=oe(z.args);if(ie&&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(ht=>{if(ht.source==="[a-zA-Z]:[\\\\\\/]"){let be=ie.match(/[a-zA-Z]:[\\\/]/i);return be&&be[0].toLowerCase()!==He}return ht.test(ie)})){let ht='Access Denied. Terminal is prohibited from accessing system drives (C://) or external directories while "External Workspace Access" is disabled.';t.onExecStart&&t.onExecStart(ie||"Unknown"),yield{type:"exec_start"},await new Promise(be=>setTimeout(be,50)),t.onExecChunk&&t.onExecChunk(`ERROR: ${ht}`),await new Promise(be=>setTimeout(be,50)),t.onExecEnd&&t.onExecEnd(),We.push({role:"user",text:`[TOOL RESULT]: ERROR: ${ht}`}),yield{type:"tool_result",content:`[TOOL RESULT]: ERROR: ${ht}`},ce++;continue}}t.onExecStart&&t.onExecStart(ie||"Unknown"),yield{type:"exec_start"}}let _o=oe(z.args),Jo=_o.path||_o.targetPath||null;if(Jo){let ie=t.systemSettings&&t.systemSettings.allowExternalAccess===!1,De=Ie.resolve(Jo),He=Ie.resolve(process.cwd());if(ie&&!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||"..."}`,uo=Math.min(be.length+4,115),x=`\u256D${"\u2500".repeat(uo)}\u256E`,g=`\u2502 ${be.padEnd(uo-2).substring(0,uo-2)} \u2502`,M=`\u2570${"\u2500".repeat(uo)}\u256F`;yield{type:"visual_feedback",content:`${x}
|
|
470
470
|
${g}
|
|
471
|
-
${M}`}}We.push({role:"user",text:`[TOOL RESULT]: ERROR: ${je}`}),yield{type:"tool_result",content:`[TOOL RESULT]: ERROR: ${je}`},ce++;continue}}if(t.onToolApproval&&(G==="write_file"||G==="update_file"||G==="exec_command")){let De=t.systemSettings||{},He=De.autoExec,je=null,ht=!1,be=!1,uo=!1;if(G==="exec_command"){let{command:_}=oe(z.args),b=(_||"").trim(),L=(te,ve)=>{if(!ve)return!1;let he=ve.split(",").map(xe=>xe.trim().toLowerCase()).filter(Boolean),Ue=te.toLowerCase();return he.some(xe=>Ue.startsWith(xe))},
|
|
471
|
+
${M}`}}We.push({role:"user",text:`[TOOL RESULT]: ERROR: ${je}`}),yield{type:"tool_result",content:`[TOOL RESULT]: ERROR: ${je}`},ce++;continue}}if(t.onToolApproval&&(G==="write_file"||G==="update_file"||G==="exec_command")){let De=t.systemSettings||{},He=De.autoExec,je=null,ht=!1,be=!1,uo=!1;if(G==="exec_command"){let{command:_}=oe(z.args),b=(_||"").trim(),L=(te,ve)=>{if(!ve)return!1;let he=ve.split(",").map(xe=>xe.trim().toLowerCase()).filter(Boolean),Ue=te.toLowerCase();return he.some(xe=>Ue.startsWith(xe))},B=L(b,De.alwaysAskCommands),q=L(b,De.autoApproveCommands);be=L(b,De.autoDisallowCommands),B?ht=!0:(q||De.autoApproveGit&&/^git\s+commit\b/i.test(b))&&(je="allow"),!ht&&!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",uo=!0),!je&&be&&(je="deny")),!ht&&!je&&He&&(je="allow")}else He&&(je="allow");let x=je,g="";je==="deny"&&(uo?g="network":be?g="settings":g="prohibited");let M=!1,P="",O=[],$=0;if(!x){if(G==="write_file"||G==="update_file")try{let _=oe(z.args),{path:b}=_;if(b){let L=Ie.resolve(process.cwd(),b),B=xe=>xe?xe.toLowerCase().replace(/\\/g,"/").replace(/^[a-z]:/,ct=>ct.toUpperCase()):"",q=B(L),te="",ve=!1,he=await Mr(),Ue=B(he?.file_focused);if(he&&Ue===q&&he.full_content?(te=he.full_content,ve=!0):Pt.existsSync(L)&&(te=Pt.readFileSync(L,"utf8"),ve=!0),P=te,await bt.recordFileChange(L,te),ve){let xe=te;if(G==="write_file")xe=_.content||_.newContent||"";else{let{patchPairs:ct,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},ce++;continue}$=ct.length;let Oo=Rr(te,ct);xe=Oo.content,O=Oo.results;let hn=O.filter(qt=>!qt.success);if(hn.length>0){let qt=`[TOOL RESULT]: ERROR: Failed to apply patches to [${Ie.basename(L)}].\\n${hn.map(Te=>` \u2022 ${Te.error}`).join("\\n")}`,mo=`\u{1F4BE} Edited: ${Ie.basename(L)}`.toUpperCase(),gn=Math.min(mo.length+4,115),zn=`\u256D${"\u2500".repeat(gn)}\u256E`,R=`\u2502 ${mo.padEnd(gn-2).substring(0,gn-2)} \u2502`,de=`\u2570${"\u2500".repeat(gn)}\u256F`;yield{type:"visual_feedback",content:`${zn}
|
|
472
472
|
${R}
|
|
473
|
-
${de}`},We.push({role:"user",text:qt}),yield{type:"tool_result",content:qt,toolName:G},ce++;continue}}yield{type:"status",content:`Opening Diff in IDE: ${Ie.basename(L)}...`},xi(L,te,xe),M=!0,await new Promise(ct=>setTimeout(ct,50))}else if(G==="write_file"){let xe=_.content||_.newContent||"";yield{type:"status",content:`Opening New File Diff in IDE: ${Ie.basename(L)}...`},xi(L,"",xe),M=!0,await new Promise(ct=>setTimeout(ct,50))}}}catch(_){console.error("Simulation/Diff Error:",_)}if(x=await t.onToolApproval(G,z.args),G==="write_file"||G==="update_file"){let{path:_}=oe(z.args);if(_){let b=Ie.resolve(process.cwd(),_);Za(b,x)}}x==="deny"&&(g="user")}if(x==="allow"&&M&&sn()){let{path:_}=oe(z.args),b=Ie.resolve(process.cwd(),_),L=await Mr(),
|
|
474
|
-
${
|
|
473
|
+
${de}`},We.push({role:"user",text:qt}),yield{type:"tool_result",content:qt,toolName:G},ce++;continue}}yield{type:"status",content:`Opening Diff in IDE: ${Ie.basename(L)}...`},xi(L,te,xe),M=!0,await new Promise(ct=>setTimeout(ct,50))}else if(G==="write_file"){let xe=_.content||_.newContent||"";yield{type:"status",content:`Opening New File Diff in IDE: ${Ie.basename(L)}...`},xi(L,"",xe),M=!0,await new Promise(ct=>setTimeout(ct,50))}}}catch(_){console.error("Simulation/Diff Error:",_)}if(x=await t.onToolApproval(G,z.args),G==="write_file"||G==="update_file"){let{path:_}=oe(z.args);if(_){let b=Ie.resolve(process.cwd(),_);Za(b,x)}}x==="deny"&&(g="user")}if(x==="allow"&&M&&sn()){let{path:_}=oe(z.args),b=Ie.resolve(process.cwd(),_),L=await Mr(),B="";L&&L.file_focused===b&&L.full_content?B=L.full_content:Pt.existsSync(b)&&(B=Pt.readFileSync(b,"utf8"));let q=B.split(/\r?\n/),te=q.length,ve=Buffer.byteLength(B,"utf8"),he="";P&&(he=`Old File contents:
|
|
474
|
+
${P.split(/\r?\n/).map((de,Te)=>`${Te+1} | ${de}`).join(`
|
|
475
475
|
`)}
|
|
476
476
|
|
|
477
477
|
`);let Ue="";if(te<=200)Ue=q.join(`
|
|
@@ -481,10 +481,10 @@ ${B.split(/\r?\n/).map((de,Te)=>`${Te+1} | ${de}`).join(`
|
|
|
481
481
|
|
|
482
482
|
... [${te-200} lines truncated for history stability] ...
|
|
483
483
|
|
|
484
|
-
${de}`}let xe="";if(G==="update_file"){let R=Wr(B,
|
|
484
|
+
${de}`}let xe="";if(G==="update_file"){let R=Wr(P,B,O,12);xe=`SUCCESS: File [${_}] updated via IDE Companion (May have user edits). [${O.length}/${$}] blocks applied.
|
|
485
485
|
|
|
486
|
-
${R}`}else{let R=
|
|
487
|
-
${
|
|
486
|
+
${R}`}else{let R=B.split(/\r?\n/),de=R.length,Te=Buffer.byteLength(B,"utf8"),Fe="";P&&(Fe=`Old File contents:
|
|
487
|
+
${P.split(/\r?\n/).map((ye,tt)=>`${tt+1} | ${ye}`).join(`
|
|
488
488
|
`)}
|
|
489
489
|
|
|
490
490
|
`);let Mt="";if(de<=200)Mt=R.join(`
|
|
@@ -500,9 +500,9 @@ ${ye}`}xe=`SUCCESS: File [${_}] saved via IDE Companion (May have user edits).
|
|
|
500
500
|
${Fe}- Content Preview:
|
|
501
501
|
${Mt}
|
|
502
502
|
|
|
503
|
-
Check if Starting and Ending matches your write.`}let Mo=`\u{1F4BE} ${G==="write_file"?"Written":"Edited"}: ${_||"..."}`,
|
|
503
|
+
Check if Starting and Ending matches your write.`}let Mo=`\u{1F4BE} ${G==="write_file"?"Written":"Edited"}: ${_||"..."}`,Oo=Math.min(Mo.length+4,115),hn=`\u256D${"\u2500".repeat(Oo)}\u256E`,qt=`\u2502 ${Mo.padEnd(Oo-2).substring(0,Oo-2)} \u2502`,mo=`\u2570${"\u2500".repeat(Oo)}\u256F`;yield{type:"visual_feedback",content:`${hn}
|
|
504
504
|
${qt}
|
|
505
|
-
${mo}`};let gn=Date.now();ft=gn,yield{type:"tool_time",content:gn-Ye};let zn=`[TOOL RESULT]: ${xe}`;We.push({role:"user",text:zn}),Bt=!0,yield{type:"tool_result",content:xe,aiContent:zn,toolName:G},ce++;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 L=`\u{1F4BE} ${G==="write_file"?"WRITE DENIED":"UPDATE DENIED"}: ${oe(z.args).path||"..."}`.toUpperCase(),
|
|
505
|
+
${mo}`};let gn=Date.now();ft=gn,yield{type:"tool_time",content:gn-Ye};let zn=`[TOOL RESULT]: ${xe}`;We.push({role:"user",text:zn}),Bt=!0,yield{type:"tool_result",content:xe,aiContent:zn,toolName:G},ce++;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 L=`\u{1F4BE} ${G==="write_file"?"WRITE DENIED":"UPDATE DENIED"}: ${oe(z.args).path||"..."}`.toUpperCase(),B=Math.min(L.length+4,115),q=`\u256D${"\u2500".repeat(B)}\u256E`,te=`\u2502 ${L.padEnd(B-2).substring(0,B-2)} \u2502`,ve=`\u2570${"\u2500".repeat(B)}\u256F`;yield{type:"visual_feedback",content:`${q}
|
|
506
506
|
${te}
|
|
507
507
|
${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 Un("toolDenied"),t.onToolResult&&t.onToolResult("denied",G),ce++;continue}}if(Le){let ie=Math.min(Le.length+4,115),De=`\u256D${"\u2500".repeat(ie)}\u256E`,He=`\u2502 ${Le.padEnd(ie-2).substring(0,ie-2)} \u2502`,je=`\u2570${"\u2500".repeat(ie)}\u256F`;yield{type:"visual_feedback",content:`${De}
|
|
508
508
|
${He}
|
|
@@ -527,36 +527,36 @@ Error Log can be found in ${Ie.join(Co,"agent","error.log")}`)}}if(Yt){let re=Yt
|
|
|
527
527
|
|
|
528
528
|
`),_e=We.find(Ne=>Ne.binaryPart)?.binaryPart||null;I.push({role:"user",text:re,binaryPart:_e})}}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] ${lo&&!it?"STUTTERING DETECTED by Internal System. Re-calibrate your response & proceed.":`${it?" OVER-THINKING":" LOOP"} DETECTED by Internal System${it?" for current EFFORT_LEVEL":""}. ${it?"If you have planned the task, prioritize the execution/output. ":"If you have finished your task use [turn: finish] else continue."}`}`}),it=!1,lo=!1,pt=!1;Ht=ce>0||Bt}e&&e.toLowerCase().startsWith("gemma")&&I.forEach(Z=>{if(Z.role==="user"&&Z.text&&Z.text.startsWith("[TOOL RESULT]")){let Me=`
|
|
529
529
|
[SYSTEM] Tool result received. Analyze output and proceed with your turn`,rt=`
|
|
530
|
-
[SYSTEM] Tool result received. Analyze output and proceed with your turn. **STRICTLY MAINTAIN THINKING POLICY. DO NOT START A RESPONSE WITHOUT <think> ... </think>}**`;Z.text=Z.text.replace(rt,"").replace(Me,"").trim()}})}finally{await bt.commitTransaction()}yield{type:"status",content:null}}});import
|
|
530
|
+
[SYSTEM] Tool result received. Analyze output and proceed with your turn. **STRICTLY MAINTAIN THINKING POLICY. DO NOT START A RESPONSE WITHOUT <think> ... </think>}**`;Z.text=Z.text.replace(rt,"").replace(Me,"").trim()}})}finally{await bt.commitTransaction()}yield{type:"status",content:null}}});import At,{useState as Ci,useEffect as Wc}from"react";import{Box as Ho,Text as An,useInput as Yc}from"ink";function ki({onSelect:e,onDelete:o,onClose:t}){let[n,i]=Ci({}),[r,l]=Ci([]),[c,m]=Ci(0);Wc(()=>{(async()=>{let h=await vo();i(h),l(Object.keys(h).sort((T,w)=>(h[w].updatedAt||0)-(h[T].updatedAt||0)))})()},[]),Yc((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,N)=>(S[N]?.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 At.createElement(Ho,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},At.createElement(Ho,{paddingX:1,marginBottom:1},At.createElement(An,{color:"cyan",bold:!0},"\u{1F4A0} CHAT HISTORY: RESUME CONVERSATION")),r.length===0?At.createElement(Ho,{paddingX:2,paddingY:1},At.createElement(An,{italic:!0,color:"gray"},"No saved chats found.")):At.createElement(Ho,{flexDirection:"column",width:"100%"},a>0&&At.createElement(Ho,{paddingX:2,marginBottom:1},At.createElement(An,{color:"gray",dimColor:!0},"\u25B2 (+",a," more chats above)")),f.map((p,h)=>{let T=n[p],S=a+h===c,k=Hc(T?.updatedAt);return At.createElement(Ho,{key:p,paddingX:1,backgroundColor:S?"#2a2a2a":void 0,width:"100%"},At.createElement(Ho,{flexGrow:1},At.createElement(An,{color:S?"cyan":"white",bold:S},S?"\u276F ":" ",T?.name||p,At.createElement(An,{color:"gray",dimColor:!S}," [",k," \u2022 ",p.slice(5),"]"))),S&&At.createElement(Ho,{flexShrink:0},At.createElement(An,{color:"red",bold:!0},"[X] DELETE ")))}),a+u<r.length&&At.createElement(Ho,{paddingX:2,marginTop:1},At.createElement(An,{color:"gray",dimColor:!0},"\u25BC (+",r.length-(a+u)," more chats below)"))),At.createElement(Ho,{marginTop:1,paddingX:1,borderStyle:"single",borderLeft:!1,borderRight:!1,borderBottom:!1,borderColor:"gray"},At.createElement(An,{dimColor:!0,italic:!0},"\u2191\u2193 navigate \u2022 Enter select \u2022 x delete \u2022 Esc close")))}function Hc(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 ll=se(()=>{Er();wn()});import kt,{useState as Ii,useEffect as Gc}from"react";import{Box as Go,Text as an,useInput as jc}from"ink";function Mi({onClose:e}){let[o,t]=Ii([]),[n,i]=Ii(0),[r,l]=Ii(!0),c=()=>{let S=we(Ft,[]);t(S);try{let D=qr(Qt,{}).systemSettings?.memory!==!1;l(D)}catch{l(!0)}};Gc(()=>{c()},[]),jc((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,N=o.filter(X=>X.id!==D);ke(Ft,N),t(N),n>=N.length&&N.length>0&&i(N.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 kt.createElement(Go,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},kt.createElement(Go,{paddingX:1,marginBottom:1,justifyContent:"space-between"},kt.createElement(an,{color:"cyan",bold:!0},"\u{1F9E0} AGENT MEMORY: LONG-TERM KNOWLEDGE"),kt.createElement(Go,null,kt.createElement(an,{color:"gray"},"Vault: "),kt.createElement(an,{color:T()},h),kt.createElement(an,{color:"white",bold:!0}," ",a,"%"))),!r&&o.length>0?kt.createElement(Go,{paddingX:2,paddingY:1},kt.createElement(an,{italic:!0,color:"gray"},"Memory is currently Off...")):o.length===0?kt.createElement(Go,{paddingX:2,paddingY:1},kt.createElement(an,{italic:!0,color:"gray"},r?"Learning...":"Memory not available...")):kt.createElement(Go,{flexDirection:"column"},o.map((S,k)=>{let D=k===n;return kt.createElement(Go,{key:S.id,paddingX:1,backgroundColor:D?"#2a2a2a":void 0,width:"100%"},kt.createElement(Go,{flexGrow:1},kt.createElement(an,{color:D?"cyan":"white",bold:D},D?"\u276F ":" ",k+1,". ",m(S.memory))),D&&kt.createElement(Go,{flexShrink:0},kt.createElement(an,{color:"red",bold:!0},"[X] WIPE ")))})),kt.createElement(Go,{marginTop:1,paddingX:1,borderStyle:"single",borderLeft:!1,borderRight:!1,borderBottom:!1,borderColor:"gray"},kt.createElement(an,{dimColor:!0,italic:!0},"\u2191\u2193 navigate \u2022 x wipe memory \u2022 Esc close")))}var cl=se(()=>{Do();eo();wn()});import Qe,{useState as us,useEffect as dl}from"react";import{Box as Ln,Text as Rt}from"ink";import{spawn as ul}from"child_process";var ms,ml,Xc,fl,pl=se(async()=>{ms=null;try{let e=await import("node-pty");ms=e.default||e,ms=!1}catch{}ml=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],Xc=({latest:e,current:o,settings:t,onClose:n,onUpdateSettings:i,onSuccess:r})=>{let[l,c]=us("initializing"),[m,d]=us(""),[u,a]=us(null),[f,p]=us(0);if(dl(()=>{let h=setInterval(()=>{p(T=>(T+1)%1e3)},33);return()=>clearInterval(h)},[]),dl(()=>{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=X=>new Promise(F=>{let I=k?X?"powershell.exe":"cmd.exe":process.env.SHELL||"bash",A=k?X?["-NoProfile","-Command",S]:["/c",S]:["-c",S],v=K=>{let W=K.toString().replace(/\x1B\[[0-?]*[ -/]*[@-~]|\x1B\][^\x07\x1B]*[\x07\x1B]|\b|\x07/g,"").replace(/\r/g,"").trim();W&&d(j=>(j+`
|
|
531
531
|
`+W).split(`
|
|
532
532
|
`).slice(-5).join(`
|
|
533
|
-
`))};if(ms)try{let K=ms.spawn(I,
|
|
533
|
+
`))};if(ms)try{let K=ms.spawn(I,A,{name:"xterm-256color",cols:80,rows:30,cwd:process.cwd(),env:process.env});h=K,K.onData(v),K.onExit(({exitCode:ae})=>{h=null,F(ae!==0?{error:`Process exited with code ${ae}`}:{success:!0})});return}catch(K){if(k&&X&&K.code==="ENOENT"){F({retryCmd:!0});return}}let J=k?ul(I,A,{cwd:process.cwd(),env:process.env}):ul(S,{shell:!0,cwd:process.cwd(),env:process.env});h=J,J.stdout.on("data",v),J.stderr.on("data",v),J.on("close",K=>{h=null,F(K!==0?{error:`Process exited with code ${K}`}:{success:!0})}),J.on("error",K=>{k&&X&&K.code==="ENOENT"?F({retryCmd:!0}):(h=null,F({error:K.message}))})}),N={};k?(N=await D(!0),N.retryCmd&&(N=await D(!1))):N=await D(!1),N.error?(a(N.error),c("error")):N.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=ml[Math.floor(f/3)%ml.length];return Qe.createElement(Ln,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",paddingX:2,paddingY:1},Qe.createElement(Ln,null,Qe.createElement(Rt,{color:"magenta"},h),Qe.createElement(Rt,{marginLeft:1,bold:!0}," Updating Flux Flow to v",e,"...")),Qe.createElement(Ln,{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(Ln,{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(Ln,{marginTop:1},Qe.createElement(Rt,{dimColor:!0},"(Press ESC to return to chat)"))):l==="error"?Qe.createElement(Ln,{flexDirection:"column",borderStyle:"round",borderColor:"red",paddingX:2,paddingY:1},Qe.createElement(Rt,{color:"red",bold:!0},"\u274C UPDATE FAILED"),Qe.createElement(Ln,{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(Ln,{marginTop:1},Qe.createElement(Rt,{dimColor:!0},"(Press ESC to return to chat)"))):null},fl=Xc});import It,{useState as Kc}from"react";import{Box as jo,Text as ln,useInput as qc}from"ink";function Oi({prompts:e,onSelect:o,onClose:t}){let[n,i]=Kc(0);qc((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 It.createElement(jo,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",padding:0,width:"100%"},It.createElement(jo,{paddingX:1,marginBottom:1},It.createElement(ln,{color:"cyan",bold:!0},"\u{1F504} CODEBASE TIME TRAVEL: SELECT UNDO POINT")),It.createElement(jo,{paddingX:2,marginBottom:1},It.createElement(ln,null,"Select a prompt to revert the codebase back to the state ",It.createElement(ln,{bold:!0,color:"blue"},"immediately before")," it was executed:")),e.length===0?It.createElement(jo,{paddingX:2,paddingY:1},It.createElement(ln,{italic:!0,color:"gray"},"No prompt checkpoints found for this session.")):It.createElement(jo,{flexDirection:"column",width:"100%"},c>0&&It.createElement(jo,{paddingX:2,marginBottom:1},It.createElement(ln,{color:"gray",dimColor:!0},"\u25B2 (+",c," more prompts above)")),m.map((d,u)=>{let f=c+u===n,p=zc(d.timestamp),h=d.changes?d.changes.length:0;return It.createElement(jo,{key:d.id,paddingX:1,backgroundColor:f?"#1a2a3a":void 0,width:"100%"},It.createElement(jo,{flexGrow:1},It.createElement(ln,{color:f?"cyan":"white",bold:f},f?"\u276F ":" ",'"',Vc(d.prompt),'"',It.createElement(ln,{color:"gray",dimColor:!f}," [",p," \u2022 ",h," file(s) changed]"))))}),c+l<e.length&&It.createElement(jo,{paddingX:2,marginTop:1},It.createElement(ln,{color:"gray",dimColor:!0},"\u25BC (+",e.length-(c+l)," more prompts below)"))),It.createElement(jo,{marginTop:1,paddingX:1,borderStyle:"single",borderLeft:!1,borderRight:!1,borderBottom:!1,borderColor:"cyan"},It.createElement(ln,{dimColor:!0,italic:!0},"\u2191\u2193 navigate \u2022 Enter select undo point \u2022 Esc close")))}function Vc(e){if(!e)return"";let t=(e.split(`
|
|
534
534
|
`)[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(`
|
|
535
|
-
`)?t+"...":t}function zc(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 hl=se(()=>{wn()});import Jc from"puppeteer";import{exec as Qc}from"child_process";import{promisify as Zc}from"util";import ed from"fs";var gl,xl,yl,wl=se(()=>{gl=Zc(Qc),xl=()=>{try{let e=Jc.executablePath();if(e&&ed.existsSync(e))return!0}catch{return!1}return!1},yl=async e=>{e&&e("\u{1F4E5} Downloading Chromium engine (chrome@148)...");try{try{await gl("pnpm exec puppeteer browsers install chrome@148")}catch{await gl("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 Ml={};Es(Ml,{default:()=>Il});import Tl from"os";import s,{useState as V,useEffect as ao,useRef as Xo,useMemo as
|
|
535
|
+
`)?t+"...":t}function zc(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 hl=se(()=>{wn()});import Jc from"puppeteer";import{exec as Qc}from"child_process";import{promisify as Zc}from"util";import ed from"fs";var gl,xl,yl,wl=se(()=>{gl=Zc(Qc),xl=()=>{try{let e=Jc.executablePath();if(e&&ed.existsSync(e))return!0}catch{return!1}return!1},yl=async e=>{e&&e("\u{1F4E5} Downloading Chromium engine (chrome@148)...");try{try{await gl("pnpm exec puppeteer browsers install chrome@148")}catch{await gl("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 Ml={};Es(Ml,{default:()=>Il});import Tl from"os";import s,{useState as V,useEffect as ao,useRef as Xo,useMemo as Ar}from"react";import{Box as C,Text as y,useInput as td,useStdout as od}from"ink";import to from"fs-extra";import Yn from"path";import{exec as Ai}from"child_process";import{fileURLToPath as nd}from"url";import Sl from"ink-text-input";import rd from"gradient-string";function Il({args:e=[]}){let[o,t]=V(!1),[n,i]=V(10),{stdout:r}=od(),[l,c]=V(""),[m,d]=V(0),[u,a]=V(!1),[f,p]=V("Flux"),[h,T]=V({columns:r?.columns||80,rows:r?.rows||24}),[w,S]=V(0),[k,D]=V(!1),[N,X]=V(!1),[F,I]=V(0),A=Xo(null);ao(()=>{let x=hs(),g=!["Terminal","Windows Terminal"].includes(x)||!!process.env.VSC_TERMINAL_URL,M=setTimeout(()=>{g&&!sn()&&X(!0)},500),P=setInterval(()=>{sn()&&X(!1)},1e3);return()=>{clearTimeout(M),clearInterval(P)}},[]);let v=Ar(()=>{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 P=e[g+1].toLowerCase();["npm","pnpm","yarn","bun"].includes(P)&&(x.package=P),g++}else if(M==="--auto-del"&&e[g+1]){let P=e[g+1].toLowerCase();["1d","7d","30d"].includes(P)&&(x.autoDel=P),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 O=e[g+1].toLowerCase();if(["flux","flow"].includes(O)){let $="Flux";O==="flux"?$="Flux":O==="flow"&&($="Flow"),x.mode=$}g++}else if(M==="--thinking"&&e[g+1]){let O=e[g+1].toLowerCase();if(["fast","low","medium","high","xhigh"].includes(O)){let $="Medium";O==="fast"?$="Fast":O==="low"?$="Low":O==="medium"?$="Medium":O==="high"?$="High":O==="xhigh"&&($="xHigh"),x.thinking=$}g++}}return x},[e]),J=async(x=!1,g=null)=>{let M=g||Ht;x&&U(P=>(Q(P.length+1),[...P,{id:"check-"+Date.now(),role:"system",text:"\u{1F50D} Checking for updates...",isMeta:!0}]));try{let O=await(await fetch("https://registry.npmjs.org/fluxflow-cli",{cache:"no-store"})).json(),$=O["dist-tags"]?.latest,_=O["dist-tags"]?.stable;if($&&nt($),$&&$!==Dn){let b=$===_?`v${$}-stable`:`v${$}`;!x&&M.autoUpdate?H("update"):U(L=>{let B=[...L],q=x?B.length:Math.min(B.length,3);return B.splice(q,0,{id:"update-"+Date.now(),role:"system",text:`A new version (${b}) is here.
|
|
536
536
|
|
|
537
537
|
\u2022 Type \`/update latest\` to apply the update.
|
|
538
|
-
\u2022 Type \`/changelog\` to view the release notes.`,isUpdateNotification:!0,isMeta:!0}),
|
|
538
|
+
\u2022 Type \`/changelog\` to view the release notes.`,isUpdateNotification:!0,isMeta:!0}),B})}else x&&U(b=>{Q(b.length+1);let L=$&&$===_?`${Dn}-stable`:Dn;return[...b,{id:"uptodate-"+Date.now(),role:"system",text:`\u2705 [SYSTEM] Flux Flow is already up to date (${L}).`,isMeta:!0}]})}catch(P){x&&U(O=>(Q(O.length+1),[...O,{id:"check-err-"+Date.now(),role:"system",text:`\u274C ERROR: Failed to check for updates: ${P.message}`,isMeta:!0}]))}};ao(()=>{let x=()=>{r.write("\x1B[2J\x1B[3J\x1B[H"),T({columns:r.columns,rows:r.rows})};return r.on("resize",x),()=>{r.off("resize",x)}},[r]);let[K,ae]=V("Medium"),[W,j]=V("Google"),[$e,le]=V(0),[Oe,nt]=V(null),[fe,ut]=V(!1),[Ke,qe]=V("gemma-4-31b-it"),[Pe,Ve]=V("gemma-4-26b-a4b-it"),[ue,go]=V(!0),[xo,cn]=V(!0),oo=Xo(0),[Ae,yt]=V(null),[Ko,qo]=V(""),[Wt,H]=V("chat"),[ze,Lr]=V("Free"),[Yt,Hn]=V({agentLimit:999999,backgroundLimit:999999,searchLimit:100,customModelId:"",customLimit:0}),[mt,ko]=V(null),[Ht,Z]=V({memory:!0,compression:0,autoExec:!1,autoDeleteHistory:"7d",autoUpdate:!1,updateManager:"npm",customUpdateCommand:""}),[Me,rt]=V({name:null,nickname:null,instructions:null}),[ne,ge]=V({keyType:"Default",quality:"Low-High",apiKey:""}),[pe,st]=V({tokens:0}),[$o,wt]=V(0),[ft,We]=V(0),[ce,Bt]=V(0),[it,lo]=V(0),[pt,dn]=V(0),[Ze,at]=V(0),[_t,Gt]=V(0),[Vo,gs]=V(0),[cr,Dr]=V(0),[Gn,xs]=V(0),[jn,ys]=V(0),[dr,ws]=V(0),[re,_e]=V(null),[Ne,lt]=V(Hs()),[Tt,et]=V(null),[jt,yo]=V(""),[Xt,Lt]=V(!1),[no,Fo]=V(0),vn=Xo(!0),Ee=Xo(!0),Je=Xo(!0);ao(()=>{if(!Ae)return;if(vn.current){vn.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="";ze==="Free"?W==="Google"?(g="gemma-4-31b-it",M="Gemma 4 (Free default)"):W==="DeepSeek"?(g="deepseek-v4-flash",M="DeepSeek Flash (Free default)"):(g="google/gemma-4-31b-it:free",M="Gemma 4 (Free default)"):W==="Google"?(g="gemini-3-flash-preview",M="Gemini 3 Flash"):W==="DeepSeek"?(g="deepseek-v4-flash",M="DeepSeek Flash"):(g="deepseek/deepseek-v4-flash",M="DeepSeek Flash"),qe(g),Wn({apiTier:ze,activeModel:g}),U(P=>(Q(P.length+1),[...P,{id:"tier-switch-"+Date.now(),role:"system",text:`\u26A0\uFE0F${x}**[TIER LIMIT]** Auto-switched to ${M}.`,isMeta:!0}]))},[ze,W,Ae]);let co=Ar(()=>{let x=hs(),g=!["Terminal","Windows Terminal"].includes(x)||!!process.env.VSC_TERMINAL_URL||!!process.env.INTELLIJ_TERMINAL_COMMAND_BLOCKS;return{isIDE:g,shortcut:g?"Shift + Enter":"Ctrl + Enter"}},[]),Be=Xo(null),wo=Xo("");ao(()=>{Be.current=Tt},[Tt]),ao(()=>{wo.current=jt},[jt]);let[un,Di]=V(!1),[mn,zo]=V(null),[Xn,ur]=V(null),vr=x=>{let g=Math.floor(x/3600),M=Math.floor(x%3600/60),P=x%60,O=[];return g>0&&O.push(`${g}h`),(M>0||g>0)&&O.push(`${M}m`),O.push(`${P}s`),O.join(" ")},Po=x=>x<1e3?`${x}ms`:vr(Math.floor(x/1e3)),[$r,Kn]=V(null),[mr,qn]=V(!0),[fn,Fr]=V(!1),[Bo,pn]=V(!1),[Vn,Pr]=V(null),[z,Ye]=V(0),[St,G]=V([]),Ge=Xo(null),[Kt,Le]=V(null),[_o,Jo]=V(null),[$n,Et]=V(null);ao(()=>Ye(0),[l]);let[Dt,U]=V(()=>{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()===Tl.homedir(),P=(()=>{let $=process.cwd().toLowerCase();if(process.platform==="win32"){let _=process.env.SystemRoot?.toLowerCase()||"c:\\windows",b=process.env.ProgramFiles?.toLowerCase()||"c:\\program files",L=process.env["ProgramFiles(x86)"]?.toLowerCase()||"c:\\program files (x86)";return $.startsWith(_)||$.startsWith(b)||$.startsWith(L)}else return $==="/"||["/bin","/sbin","/etc","/usr","/var","/root"].some(b=>$.startsWith(b))})(),O=[x,g];return P?O.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&&O.push({id:"home-warning",role:"system",text:"[SECURITY ALERT] HOME DIRECTORY DETECTED",subText:`You are currently in ${Tl.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}),O}),Io=Xo(null),[Ts,Q]=V(Dt.length),Br=Ar(()=>{let g=h.columns||80,M=0,P=0;for(let O=Dt.length-1;O>=0;O--){let $=Dt[O];if(!$)continue;let _=$.text||"",b=_.split(/\r?\n/).length;if(_.split(/\r?\n/).forEach(L=>{b+=Math.floor(L.length/g)}),$.isHelpRecord&&(b=15),$.isUpdateNotification&&(b=8),$.isTerminalRecord&&(b=10),b+=$.role==="think"?3:2,M+b>2e3){P=O+1;break}M+=b}return{items:Dt.slice(P,Ts),isTruncated:P>0}},[Dt,h.columns,h.rows]),ie=Ar(()=>{if(!Tt||!jt)return!1;let x=jt.trim();return x.endsWith("?")||x.endsWith(":")||/\[[yYnN/]+\]\s*$/.test(x)||/\([yYnN]\)\s*$/.test(x)},[Tt,jt]);td((x,g)=>{if(!(x==="\x1B[I"||x==="\x1B[O"||x==="[I"||x==="[O")){if(N){let M=hs(),P=Cl(M);if(g.upArrow)I(O=>O>0?O-1:P.length-1);else if(g.downArrow)I(O=>O<P.length-1?O+1:0);else if(g.return){let O=P[F];if(O.action==="dismiss")X(!1);else if(O.url){let $=process.platform==="win32"?`start ${O.url}`:process.platform==="darwin"?`open ${O.url}`:`xdg-open ${O.url}`;Ai($),X(!1)}}return}if(g.tab&&Tt){Lt(M=>!M);return}if(Xt&&Tt){if(g.return){let M=process.platform==="win32";So(M?`\r
|
|
539
539
|
`:`
|
|
540
|
-
`),To||yo(
|
|
541
|
-
`)}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(fn||Tt)Bo?(nl(),Ki(),pn(!1),Vn&&clearTimeout(Vn)):(pn(!0),Vn&&clearTimeout(Vn),Pr(setTimeout(()=>pn(!1),3e3)));else if(Wt==="revert")H("chat"),Ye(0);else if(Wt!=="chat"&&Wt!=="settings")H("chat");else{if(!
|
|
542
|
-
`)}}),ao(()=>{process.stdout.write("\x1B[?1004h");let x=g=>{let M=g.toString();M.includes("\x1B[I")?(cn(!0),oo.current=Date.now()):M.includes("\x1B[O")&&(cn(!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(Yn.join(process.cwd(),"package.json"),"utf8"));gi(Dn||$.version||"2.0.0")}catch{gi("2.0.0")}process.stdout.isTTY&&(process.stdout.write("\x1B]0;FluxFlow\x07"),process.stdout.write("\x1B]633;P;TerminalTitle=FluxFlow\x07")),xl()||(U($=>(Q($.length+1),[...$,{id:"setup-"+Date.now(),role:"system",text:"\u{1F527} [SYSTEM] Installing Required dependencies... (One-time setup)",isMeta:!0}])),await yl(),U($=>(Q($.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?ae(v.thinking):ae(g.thinkingLevel),j(g.aiProvider||"Google"),
|
|
540
|
+
`),To||yo(P=>P+`
|
|
541
|
+
`)}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(fn||Tt)Bo?(nl(),Ki(),pn(!1),Vn&&clearTimeout(Vn)):(pn(!0),Vn&&clearTimeout(Vn),Pr(setTimeout(()=>pn(!1),3e3)));else if(Wt==="revert")H("chat"),Ye(0);else if(Wt!=="chat"&&Wt!=="settings")H("chat");else{if(!Ae&&$e===1){le(0),qo("");return}Ye(M=>{let P=M+1;return P===1?(Ge.current&&clearTimeout(Ge.current),Ge.current=setTimeout(()=>Ye(0),2e3)):P===2&&(Ge.current&&clearTimeout(Ge.current),Ye(0),l.length>0?c(""):bt.getChatHistory(Ne).then(O=>{O.length>0?(G(O.reverse()),H("revert")):U($=>(Q($.length+1),[...$,{id:"revert-empty-"+Date.now(),role:"system",text:"\u{1F6C8} No revert checkpoints found for this session.",isMeta:!0}]))})),P})}}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){H("exit"),t(!1);return}o?(H("exit"),t(!1)):t(!0)}g.return&&(g.shift||g.ctrl||g.meta||g.leftAlt||g.rightAlt)&&c(M=>M.replace(/\\\r?$/,"").replace(/\r?$/,"")+`
|
|
542
|
+
`)}}),ao(()=>{process.stdout.write("\x1B[?1004h");let x=g=>{let M=g.toString();M.includes("\x1B[I")?(cn(!0),oo.current=Date.now()):M.includes("\x1B[O")&&(cn(!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(Yn.join(process.cwd(),"package.json"),"utf8"));gi(Dn||$.version||"2.0.0")}catch{gi("2.0.0")}process.stdout.isTTY&&(process.stdout.write("\x1B]0;FluxFlow\x07"),process.stdout.write("\x1B]633;P;TerminalTitle=FluxFlow\x07")),xl()||(U($=>(Q($.length+1),[...$,{id:"setup-"+Date.now(),role:"system",text:"\u{1F527} [SYSTEM] Installing Required dependencies... (One-time setup)",isMeta:!0}])),await yl(),U($=>(Q($.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?ae(v.thinking):ae(g.thinkingLevel),j(g.aiProvider||"Google"),A.current=g.activeModel,v.model?qe(v.model):qe(g.activeModel),ut(g.showFullThinking),Lr(g.apiTier||"Free"),Hn(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),Z(M),rt(g.profileData),ge(g.imageSettings||{keyType:"Default",quality:"Low-High",apiKey:""});let P=g.aiProvider||"Google",O=await Qr(P);if(O&&(yt(O),Or(O)),g.systemSettings?.autoDeleteHistory&&ga(g.systemSettings.autoDeleteHistory),xa(Co),v.update==="check"?J(!0,M):v.update==="latest"?(H("update"),J(!0,M)):J(!1,M),await Sa(),v.resume){let $=await vo(),_=v.resume;if($[_]){lt(_);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+`
|
|
543
543
|
|
|
544
|
-
\u{1F30A}\u26A1 Resuming Flux Flow Session...`,isMeta:!0}),U(b),H("chat"),U(
|
|
544
|
+
\u{1F30A}\u26A1 Resuming Flux Flow Session...`,isMeta:!0}),U(b),H("chat"),U(B=>{let q=[...B,{id:"sys-"+Date.now(),role:"system",text:`\u{1F4E1} SESSION RESUMED VIA CLI: [${_}]`,isMeta:!0}];return Q(q.length),q})}else U(b=>[...b,{id:"sys-err-"+Date.now(),role:"system",text:`\u274C ERROR: Chat session [${_}] not found. Started new session.`,isMeta:!0}])}go(!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(!ue){let x=v.model&&Ke===v.model?A.current:Ke;Wn({mode:f,thinkingLevel:K,aiProvider:W,activeModel:x||Ke,showFullThinking:fe,systemSettings:Ht,profileData:Me,imageSettings:ne,apiTier:ze})}},[f,K,W,Ke,fe,Ht,Me,ne,ue,v,ze]);let De=async x=>{let g=x.trim(),M=30;if(W==="OpenRouter"&&(M=10),W==="DeepSeek"&&(M=20),g.length>=M){await Zr(W,g),yt(g),Or(g);let P="gemma-4-31b-it";W==="OpenRouter"?P="google/gemma-4-31b-it:free":W==="DeepSeek"&&(P="deepseek-v4-flash"),qe(P),U(O=>[...O,{role:"system",text:`\u2705 ${W} API Key saved successfully! Model set to ${P}. Initialization complete.`,isMeta:!0}])}else U(P=>[...P,{role:"system",text:`\u274C INVALID KEY: ${W} API keys must be at least ${M} characters.`,isMeta:!0}]),qo("")},He=Xo(Li);ao(()=>{if(Wt==="exit"){(async()=>{let M=Date.now(),P=Math.floor((M-He.current)/1e3);P>=1&&(await ho("duration",P),He.current+=P*1e3),await Ea()})();let g=setTimeout(()=>{process.exit(0)},1700);return()=>clearTimeout(g)}},[Wt]),ao(()=>{let x=setInterval(async()=>{if(!ue){let g=Date.now(),M=Math.floor((g-He.current)/1e3);M>=1&&(await ho("duration",M),He.current+=M*1e3)}},1500);return()=>clearInterval(x)},[ue]);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:ne?.keyType==="Custom"?"(0.001/img)":"(1/img)"},{cmd:"low-high",desc:ne?.keyType==="Custom"?"(0.002/img)":"(2/img)"},{cmd:"medium",desc:ne?.keyType==="Custom"?"(0.008/img)":"(8/img)"},{cmd:"medium-high",desc:ne?.keyType==="Custom"?"(0.01/img)":"(10/img)"},{cmd:"high",desc:ne?.keyType==="Custom"?"(0.045/img)":"(45/img)"},{cmd:"ultra",desc:ne?.keyType==="Custom"?"(0.0488/img)":"(49/img)"},{cmd:"premium",desc:ne?.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:W==="DeepSeek"?[{cmd:"Fast",desc:"Fastest"},{cmd:"Standard",desc:"Standard Reasoning"},{cmd:"xHigh",desc:"Extended Reasoning"}]:W==="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"}]:Ke&&Ke.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:W==="OpenRouter"?ze==="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"}]:W==="DeepSeek"?[{cmd:"deepseek-v4-flash",desc:"Fast & Efficient"},{cmd:"deepseek-v4-pro",desc:"High-Intelligence Reasoning"}]:ze==="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"}]}],ht=async(x,g=!1)=>{if(!g&&be.length>0){let O=be[w]||be[0],$=x.split(" ");if($.length===1)c(O.cmd+" ");else{let _=$.slice(0,-1);c(_.join(" ")+" "+O.cmd+" ")}S(0),d(_=>_+1);return}let M=x.replace(/\r\n/g,`
|
|
545
545
|
`).replace(/\r/g,`
|
|
546
546
|
`).trimEnd();if(M.endsWith("\\")){c(M.slice(0,-1)+`
|
|
547
|
-
`);return}let
|
|
548
|
-
`).split(/\r?\n/).map(
|
|
549
|
-
`);if(
|
|
550
|
-
${
|
|
547
|
+
`);return}let P=M.replace(/\\\s*\n/g,`
|
|
548
|
+
`).split(/\r?\n/).map(O=>O.replace(/\\$/,"")).join(`
|
|
549
|
+
`);if(P.trim()){if(fn){let O=P.trim();if(O.startsWith("/")){U($=>(Q($.length+1),[...$,{id:"hint-err-"+Date.now(),role:"system",text:"\u274C [RESTRICTED] Steering Hints cannot start with /",isMeta:!0}])),c("");return}Le(O),Io.current=O,U($=>(Q($.length+1),[...$,{id:"hint-"+Date.now(),role:"user",text:`[STEERING HINT: QUEUED]
|
|
550
|
+
${O}`,color:"magenta"}])),c("");return}if(!Ae){De(P),qo("");return}if(P.startsWith("/")){let O=P.split(" "),$=O[0]?.toLowerCase();switch($){case"/quit":{H("exit");break}case"/resume":{if(O[1]){let b=O[1];(async()=>{let B=await vo(),q=B[b]||Object.values(B).find(te=>te.name.toLowerCase()===b.toLowerCase());if(q){r.write("\x1B[2J\x1B[3J\x1B[H"),lt(b);let te=[...q.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})),U(te),U(he=>[...he,{id:"sys-"+Date.now(),role:"system",text:`\u{1F4E1} SESSION RESUMED: [${b}]`,isMeta:!0}]),Q(0)}else U(te=>[...te,{id:"err-"+Date.now(),role:"system",text:`\u274C ERROR: Session [${b}] not found.`}])})()}else H("resume");break}case"/clear":{U([{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}]),Q(2),lt(Hs()),st({tokens:0}),a(!1);break}case"/revert":{bt.getChatHistory(Ne).then(b=>{if(b.length>0)G(b.reverse()),H("revert");else{let L=Ce(2);U(B=>(Q(B.length+1),[...B,{id:"revert-empty-"+Date.now(),role:"system",text:"No revert checkpoints found for this session.",isMeta:!0}]))}});break}case"/mode":{if(O[1]){let b=O[1].toLowerCase()==="flow"?"Flow":"Flux";p(b),b==="Flow"?ae("Fast"):b==="Flux"&&ae("High");let L=Ce(2);U(B=>(Q(B.length+1),[...B,{id:Date.now(),role:"system",text:`\u{1F527}${L}[SYSTEM] Mode switched to ${b}`,isMeta:!0}]))}else H("mode");break}case"/image":{if(O[1]?.toLowerCase()==="stats"){let b=Ce(2);if(ne.keyType==="Custom")U(L=>(Q(L.length+1),[...L,{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 L=await ns();U(B=>(Q(B.length+1),[...B,{id:Date.now(),role:"system",isImageStats:!0,text:`\u2022 Hourly Limit: ${Number((L.limit*1e3).toFixed(0))} credits
|
|
551
551
|
\u2022 Spent (Last 1hr): ${Number((L.totalSpent*1e3).toFixed(0))} credits
|
|
552
552
|
\u2022 Remaining: ${Number((L.remaining*1e3).toFixed(0))} credits
|
|
553
553
|
\u2022 Requests (Last 1hr): ${L.activeCallsCount} requests
|
|
554
|
-
`+(L.nextResetMin>0?`\u2022 Refreshes in: ${L.nextResetMin}m`:""),isMeta:!0}]))}catch{U(
|
|
555
|
-
`);try{to.writeFileSync(L,te,"utf8"),U(ve=>(Q(ve.length+1),[...ve,{id:Date.now(),role:"system",text:`\u{1F4E4} [EXPORT] Chat exported successfully to "${b}"`,isMeta:!0}]))}catch(ve){U(he=>(Q(he.length+1),[...he,{id:Date.now(),role:"system",text:`\u274C [EXPORT ERROR] Failed to export chat: ${ve.message}`,isMeta:!0}]))}break}case"/chats":{(async()=>{let L=await vo(),
|
|
554
|
+
`+(L.nextResetMin>0?`\u2022 Refreshes in: ${L.nextResetMin}m`:""),isMeta:!0}]))}catch{U(B=>(Q(B.length+1),[...B,{id:Date.now(),role:"system",text:"\u274C [SYSTEM] Failed to load image quota stats.",isMeta:!0}]))}}else if(O[1]?.toLowerCase()==="setup")if(O[2]?.toLowerCase()==="key")if(O[3]){let b=["default","custom"].find(L=>L===O[3].toLowerCase());if(b){let L=b==="default"?"Default":"Custom";ge(q=>({...q,keyType:L}));let B=Ce(2);U(q=>(Q(q.length+1),[...q,{id:Date.now(),role:"system",text:`\u{1F527}${B}[SYSTEM] Image key strategy set to ${L}`,isMeta:!0}])),L==="Custom"&&(ko({label:"Enter Pollinations API key (starting with sk_):",note:"Get a key from https://enter.pollinations.ai",key:"imageSettings",subKey:"apiKey",value:ne.apiKey||"",returnView:"chat"}),H("input"))}else{let L=Ce(2);U(B=>(Q(B.length+1),[...B,{id:Date.now(),role:"system",text:"\u274C [SYSTEM] Invalid key option. Choose: Default or Custom.",isMeta:!0}]))}}else{let b=Ce(2);U(L=>(Q(L.length+1),[...L,{id:Date.now(),role:"system",text:"\u274C [SYSTEM] Usage: /image setup Key <Default|Custom>",isMeta:!0}]))}else if(O[2]?.toLowerCase()==="quality")if(O[3]){let b=["low","low-high","medium","medium-high","high","ultra","premium"].find(L=>L===O[3].toLowerCase());if(b){let B={low:"Low","low-high":"Low-High",medium:"Medium","medium-high":"Medium-High",high:"High",ultra:"Ultra",premium:"Premium"}[b];ge(te=>({...te,quality:B}));let q=Ce(2);U(te=>(Q(te.length+1),[...te,{id:Date.now(),role:"system",text:`\u{1F527}${q}[SYSTEM] Image quality set to ${B}`,isMeta:!0}]))}else{let L=Ce(2);U(B=>(Q(B.length+1),[...B,{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);U(L=>(Q(L.length+1),[...L,{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);U(L=>(Q(L.length+1),[...L,{id:Date.now(),role:"system",text:"\u274C [SYSTEM] Usage: /image setup <Key|Quality> ...",isMeta:!0}]))}else{let b=Ce(2);U(L=>(Q(L.length+1),[...L,{id:Date.now(),role:"system",text:"\u274C [SYSTEM] Usage: /image setup <Key|Quality> ...",isMeta:!0}]))}break}case"/thinking":{let b;if(O[1]){let L=O[1].toLowerCase(),B=O.includes("--bypass");if(b=L.charAt(0).toUpperCase()+L.slice(1),L==="xhigh"&&(b="xHigh"),!B&&f==="Flow"&&(b==="Medium"||b==="High"||b==="xHigh"))U(q=>(Q(q.length+1),[...q,{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{ae(b);let q=Ce(1);U(te=>(Q(te.length+1),[...te,{id:Date.now(),role:"system",text:`\u{1F527} [SYSTEM] Thinking level set to ${b}${B?` (Bypass Activated \u{1F575}\uFE0F${q})`:""}`,isMeta:!0}]))}}else H("thinking");break}case"/model":{if(O[1]){let b=O.slice(1).join(" ");if(b==="gemma-4-31b-it"&&ze!=="Free"&&W==="Google")U(L=>(Q(L.length+1),[...L,{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}])),qe("gemini-3-flash-preview");else{qe(b);let L=Ce(2);U(B=>(Q(B.length+1),[...B,{id:Date.now(),role:"system",text:`\u{1F527}${L}[SYSTEM] Model switched to ${b}`,isMeta:!0}]))}}else H("model");break}case"/settings":{H("settings");break}case"/key":{H("key");break}case"/profile":{H("profile");break}case"/stats":{(async()=>{let L=await In();_e(L),H("stats")})();break}case"/save":{let b=O.slice(1).join(" ")||`Session ${new Date().toLocaleTimeString()}`;ts(Ne,b,Dt),U(L=>(Q(L.length+1),[...L,{id:Date.now(),role:"system",text:`\u{1F4BE} [MEMORY] Chat saved as "${b}" (ID: ${Ne})`,isMeta:!0}]));break}case"/export":{let b=`export-fluxflow-${Ne}.txt`,L=Yn.join(process.cwd(),b),B=[],q=!1;for(let ve=0;ve<Dt.length;ve++){let he=Dt[ve];if(he&&!(he.role==="system"||he.isMeta||he.isLogo||String(he.id).startsWith("welcome"))){if(he.role==="user"){let Ue=he.text||"";Ue=Ue.replace(/\s*\[Prompted on:.*?\]/g,"").trim(),B.length>0&&B.push(""),B.push("[USER]"),B.push(Ue),q=!1}else if(he.role==="think"){q||(B.push(""),B.push("[AGENT]"),q=!0);let Ue=(he.text||"").replace(/\[turn:\s*continue\]/gi,"").replace(/\[turn:\s*finish\]/gi,"").replace(/\[TOOL RESULTS\]/gi,"").trim();Ue&&(B.push("[thoughts]"),B.push(Ue))}else if(he.role==="agent"){q||(B.push(""),B.push("[AGENT]"),q=!0);let Ue=dd(he.text||"");for(let xe of Ue)if(xe.type==="output"){let ct=xe.content.replace(/\[turn:\s*continue\]/gi,"").replace(/\[turn:\s*finish\]/gi,"").replace(/\[TOOL RESULTS\]/gi,"").trim();ct&&(B.push("[output]"),B.push(ct))}else xe.type==="tool"&&(B.push("[tool]"),B.push(`${xe.toolName} ${xe.args}`))}}}let te=B.join(`
|
|
555
|
+
`);try{to.writeFileSync(L,te,"utf8"),U(ve=>(Q(ve.length+1),[...ve,{id:Date.now(),role:"system",text:`\u{1F4E4} [EXPORT] Chat exported successfully to "${b}"`,isMeta:!0}]))}catch(ve){U(he=>(Q(he.length+1),[...he,{id:Date.now(),role:"system",text:`\u274C [EXPORT ERROR] Failed to export chat: ${ve.message}`,isMeta:!0}]))}break}case"/chats":{(async()=>{let L=await vo(),B=Object.entries(L).map(([q,te])=>`\u2022 ${q}: ${te.name}`).join(`
|
|
556
556
|
`);U(q=>(Q(q.length+1),[...q,{id:Date.now(),role:"system",text:`\u{1F5C3}\uFE0F [HISTORY] Saved Chats:
|
|
557
|
-
${
|
|
558
|
-
\u{1F539} Status: ${
|
|
559
|
-
\u{1F539} Released on: ${ad}`;U(
|
|
557
|
+
${B||"No saved chats found."}`,isMeta:!0}]))})();break}case"/memory":{H("memory");break}case"/reset":{(async()=>{try{U(L=>(Q(L.length+1),[...L,{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(Bn).length===0&&to.removeSync(Bn)}catch{}setTimeout(()=>{H("exit"),setTimeout(()=>process.exit(0),500)},500)}catch(L){U(B=>(Q(B.length+1),[...B,{id:Date.now(),role:"system",text:`\u274C [RESET ERROR] Failed to purge data: ${L.message}`}]))}})();break}case"/about":{let b=Ce(2),L=`\u{1F539} FluxFlow Version: v${Dn}
|
|
558
|
+
\u{1F539} Status: ${Oe&&Oe!==Dn?`Update Available [v${Oe}]`:"Up to date"}
|
|
559
|
+
\u{1F539} Released on: ${ad}`;U(B=>(Q(B.length+1),[...B,{id:"about-"+Date.now(),role:"system",text:L,isAboutRecord:!0,isMeta:!0}]));break}case"/changelog":{let b=process.platform;Ai(`${b==="win32"?"start":b==="darwin"?"open":"xdg-open"} ${El}`),U(B=>(Q(B.length+1),[...B,{id:Date.now(),role:"system",text:`\u{1F310} [BROWSER] Opening changelog: ${El}`,isMeta:!0}]));break}case"/fluxflow":{if(O.slice(1)[0]==="init"){let L=`# FluxFlow Configuration
|
|
560
560
|
# This file defines project-specific instructions for the Flux Flow Agent.
|
|
561
561
|
|
|
562
562
|
# IDENTITY & TONE
|
|
@@ -571,11 +571,11 @@ ${P||"No saved chats found."}`,isMeta:!0}]))})();break}case"/memory":{H("memory"
|
|
|
571
571
|
|
|
572
572
|
# SKILLS & WORKFLOWS
|
|
573
573
|
- [Define custom step-by-step recipes for this project here]
|
|
574
|
-
`,
|
|
574
|
+
`,B=Yn.join(process.cwd(),"FluxFlow.md");if(to.pathExistsSync(B))U(q=>(Q(q.length+1),[...q,{id:"init-err-"+Date.now(),role:"system",text:"\u274C ERROR: FluxFlow.md already exists in this directory.",isMeta:!0}]));else try{to.writeFileSync(B,L),U(q=>(Q(q.length+1),[...q,{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(q){U(te=>(Q(te.length+1),[...te,{id:"init-err-"+Date.now(),role:"system",text:`\u274C ERROR: Failed to initialize FluxFlow.md: ${q.message}`,isMeta:!0}]))}}else U(L=>(Q(L.length+1),[...L,{id:"ff-err-"+Date.now(),role:"system",text:"\u2753 Usage: /fluxflow init",isMeta:!0}]));break}case"/update":{if(O[1]?.toLowerCase()==="check"){J(!0);break}let L=O.includes("--latest");H("update");break}case"/help":{U(b=>(Q(b.length+1),[...b,{id:Date.now(),role:"system",isHelpRecord:!0,isMeta:!0}]));break}default:let _=Ce(2);U(b=>(Q(b.length+1),[...b,{id:Date.now(),role:"system",text:`\u{1F527}${_}[SYSTEM] Unknown command: ${$}`,isMeta:!0}]))}}else{let O=`[Prompted on: ${new Date().toLocaleString()}]`,$={id:"user-"+Date.now(),role:"user",text:`${P}
|
|
575
575
|
|
|
576
|
-
${
|
|
576
|
+
${O}`};U(b=>(Q(b.length+1),[...b,$])),(async()=>{let b=!1;Fr(!0),a(!1);let L=Date.now(),B=!0;try{let q=[...Dt,$].filter(R=>R.role!=="think"&&!R.isVisualFeedback&&!R.isMeta&&!String(R.id).startsWith("welcome")),te=[];q.forEach((R,de)=>{let Te=R.fullText||R.text;if(R.role==="user"&&de<q.length-1){let Fe=Te.lastIndexOf("[USER]");Fe!==-1&&(Te=Te.substring(Fe+6).trim())}if(R.role==="system"&&Te?.startsWith("[TOOL RESULT]")){let Fe=te[te.length-1];if(Fe&&Fe.role==="system"&&Fe.text?.startsWith("[TOOL RESULT]")){Fe.text+=`
|
|
577
577
|
|
|
578
|
-
`+Te;return}}te.push({...R,text:Te})});let ve=il(Ke,te,{profile:Me,thinkingLevel:K,mode:f,systemSettings:Ht,janitorModel:Pe,sessionStats:pe,chatId:Ne,aiProvider:W,apiKey:
|
|
578
|
+
`+Te;return}}te.push({...R,text:Te})});let ve=il(Ke,te,{profile:Me,thinkingLevel:K,mode:f,systemSettings:Ht,janitorModel:Pe,sessionStats:pe,chatId:Ne,aiProvider:W,apiKey:Ae,apiTier:ze,cols:h.columns-6,rows:30,onExecStart:R=>{et(R),yo("")},onExecChunk:R=>{yo(de=>de+R)},onExecEnd:()=>{U(R=>{if(!Be.current)return R;let de=wo.current||"",Te="";if(To){let Mt=/\x1b\[H|\x1b\[2J|\x1b\[3J|\x1bc/g,me=[...de.matchAll(Mt)],ye=de;if(me.length>0){let ot=me[me.length-1];ye=de.substring(ot.index+ot[0].length)}Te=ye.replace(/\r+\n/g,`
|
|
579
579
|
`).split(`
|
|
580
580
|
`).map(ot=>{let gt=ot.split("\r");return gt[gt.length-1]}).join(`
|
|
581
581
|
`)}else Te=de.replace(/\r\n/g,`
|
|
@@ -585,18 +585,18 @@ ${A}`};U(b=>(Q(b.length+1),[...b,$])),(async()=>{let b=!1;Fr(!0),a(!1);let L=Dat
|
|
|
585
585
|
OUTPUT: ${Te.replace(/\n{3,}/g,`
|
|
586
586
|
|
|
587
587
|
`)}`;return[...R,{id:"term-"+Date.now(),role:"system",text:Fe,isTerminalRecord:!0}]}),et(null),Lt(!1),yo("")},onToolResult:(R,de)=>{if(R==="success"){if(at(Te=>Te+1),de==="generate_image"){ys(Mt=>Mt+1);let Fe={Low:.001,"Low-High":.002,Medium:.008,"Medium-High":.01,High:.045,Ultra:.0488,Premium:.1}[ne.quality]||.002;ws(Mt=>Mt+Fe)}}else R==="denied"?gs(Te=>Te+1):Gt(Te=>Te+1)},onToolApproval:async(R,de)=>{let Te=un||Ht.autoExec;if(R==="exec_command"){let{command:Fe}=oe(de||"{}");return Te||Fe&&/^(echo|ls|dir|pwd|cd|git status|git log|git diff|type|cat|help)\b/i.test(Fe.trim())?"allow":new Promise(me=>{zo({tool:R,args:de,resolve:me}),H("terminalApproval")})}return Te?"allow":new Promise(Fe=>{zo({tool:R,args:de,resolve:Fe}),H("approval")})},onAskUser:async(R,de)=>new Promise(Te=>{ur({question:R,options:de,resolve:Fe=>{U(Mt=>[...Mt,{id:"ask-"+Date.now(),role:"system",text:`\u{1F4AC} **Ask User**
|
|
588
|
-
Selection: ${Fe}`,isAskRecord:!0}]),Te(Fe)}}),H("ask")})},async()=>{if(Io.current){let R=Io.current;return Le(null),Io.current=null,U(de=>{let Te=[...de].reverse().findIndex(Fe=>Fe.text?.includes("[STEERING HINT: QUEUED]"));if(Te!==-1){let Fe=de.length-1-Te,Mt=[...de];return Mt[Fe]={...Mt[Fe],text:Mt[Fe].text.replace("[STEERING HINT: QUEUED]","[STEERING HINT: INJECTED]"),color:"cyan"},Mt}return de}),R}return null},Dn),he=!1,Ue=null,xe=null,ct=!1,Mo=!1,
|
|
588
|
+
Selection: ${Fe}`,isAskRecord:!0}]),Te(Fe)}}),H("ask")})},async()=>{if(Io.current){let R=Io.current;return Le(null),Io.current=null,U(de=>{let Te=[...de].reverse().findIndex(Fe=>Fe.text?.includes("[STEERING HINT: QUEUED]"));if(Te!==-1){let Fe=de.length-1-Te,Mt=[...de];return Mt[Fe]={...Mt[Fe],text:Mt[Fe].text.replace("[STEERING HINT: QUEUED]","[STEERING HINT: INJECTED]"),color:"cyan"},Mt}return de}),R}return null},Dn),he=!1,Ue=null,xe=null,ct=!1,Mo=!1,Oo=!1,hn=!1,qt=0,mo=null,gn=/\[?\s*turn\s*:\s*.*?\s*\]?/gi;for await(let R of ve){if(B&&R.type==="text"&&(L=Date.now(),B=!1),R.type==="status"){Kn(R.content),sn()&&ds(R.content);continue}if(R.type==="status_history"){Kn(R.content),sn()&&ds(R.content),U(me=>[...me,{id:"condense-"+Date.now(),role:"system",text:`\u2699\uFE0F [SYSTEM] ${R.content}`,isMeta:!0}]);continue}if(R.type==="spinner"){qn(R.content);continue}if(R.type==="model_update"){Et(R.content);continue}if(R.type==="turn_reset"){Ue=null,xe=null,he=!1,ct=!1,Mo=!1,hn=!1,Oo=!1;continue}if(R.type==="interactive_turn_finished"){Fr(!1),sn()&&ds(null),b=!0,rl({profile:Me,thinkingLevel:K,mode:f,janitorModel:Pe,chatId:Ne,systemSettings:Ht,sessionStats:pe,aiProvider:W,apiKey:Ae},R.data.agentText,R.data.fullAgentTextRaw,R.data.history,{onMemoryUpdated:()=>U(me=>{let ye=[...me];return ye.length>0&&(ye[ye.length-1].memoryUpdated=!0),ye}),onBackgroundIncrement:()=>We(me=>me+1)});continue}if(R.type==="visual_feedback"){U(me=>[...me,{id:"feedback-"+Date.now(),role:"system",text:R.content,isVisualFeedback:!0}]);continue}if(R.type==="exec_start")continue;if(R.type==="liveTokens"){st({tokens:R.content});continue}if(R.type==="usage"){let me=R.content.totalTokenCount||0,ye=R.content.cachedContentTokenCount||0,tt=R.content.candidatesTokenCount||0;st({tokens:me}),Bt(ot=>ot+me),ye>0&&lo(ot=>ot+ye),tt>0&&dn(ot=>ot+tt),wt(ot=>ot+1);continue}if(R.type==="tool_time"){xs(me=>me+R.content);continue}if(R.type==="tool_result"){if(U(me=>[...me,{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 me=R.aiContent.split(`
|
|
589
589
|
`),ye=0,tt=0,ot=!1;for(let gt of me){if(gt.includes("[DIFF_START]")){ot=!0;continue}if(gt.includes("[DIFF_END]")){ot=!1;continue}ot&&(/^\+\d+/.test(gt)?ye++:/^\-\d+/.test(gt)&&tt++)}fs+=ye,ps+=tt,ho("linesAdded",ye),ho("linesRemoved",tt)}else if(R.toolName==="write_file"&&R.aiContent){let me=R.aiContent.match(/- Stats: \[(\d+) lines/),ye=me?parseInt(me[1]):0,tt=0;if(R.aiContent.includes("Old File contents:")){let ot=R.aiContent.split(`
|
|
590
|
-
`),gt=!1;for(let Vt of ot){if(Vt.includes("Old File contents:")){gt=!0;continue}gt&&(Vt.trim()===""?gt=!1:/^\d+ \|/.test(Vt)&&tt++)}}fs+=ye,ps+=tt,ho("linesAdded",ye),ho("linesRemoved",tt)}continue}let de=R.content,Te=de.toLowerCase();if(de.includes("```")&&(ct=!ct),Te.includes("tool:functions.")&&(Mo=!0,qt=0,mo=null,de.includes("[tool:functions.")&&(qt=0)),Mo){for(let me=0;me<de.length;me++){let ye=de[me];!mo&&(ye==="'"||ye==='"'||ye==="`")?mo=ye:mo&&ye===mo&&de[me-1]!=="\\"&&(mo=null),mo||(ye==="("||ye==="["?qt++:(ye===")"||ye==="]")&&qt--)}qt<=0&&!mo&&(Mo=!1)}if((Te.includes("<think")||Te.includes("<thought"))&&(!he&&!ct&&!Mo&&!Ao)&&(he=!0,Ao=!0,de=de.replace(/<(think|thought)>[\s\S]*?<\/(think|thought)>/gi,"").replace(/<(think|thought)>/gi,""),Ue="think-"+Date.now(),U(me=>[...me,{id:Ue,role:"think",text:"",isStreaming:!0,startTime:Date.now()}])),(Te.includes("</think>")||Te.includes("</thought>"))&&Ue){let me=de.split(/<\/(think|thought)>/gi),ye=me[0]||"",tt=me.slice(2).join("").replace(/<\/?(think|thought)>/gi,"");U(ot=>{let gt=ot.map(Vt=>{if(Vt.id===Ue&&typeof Vt.id=="string"){let _r=Vt.startTime||parseInt(Vt.id.split("-")[1])||Date.now(),Ss=Date.now()-_r;return{...Vt,text:Vt.text+ye,isStreaming:!1,duration:Ss}}return Vt});return he=!1,xe="agent-"+Date.now(),[...gt,{id:xe,role:"agent",text:tt,isStreaming:!0}]});continue}if(he&&Ue)U(me=>{let ye=!1,tt="",ot=me.map(gt=>{if(gt.id===Ue){let Vt=gt.text+de;if(Vt.toLowerCase().includes("</think>")){ye=!0;let _r=Vt.split(/<\/think>/gi);tt=_r.slice(1).join("</think>")||"";let Ss=gt.startTime||parseInt(gt.id.split("-")[1])||Date.now(),Ll=Date.now()-Ss;return{...gt,text:_r[0],isStreaming:!1,duration:Ll}}return{...gt,text:Vt,isStreaming:!0}}return gt});return ye?(he=!1,xe="agent-"+Date.now(),[...ot,{id:xe,role:"agent",text:tt.replace(/<\/?(think|thought)>/gi,""),isStreaming:!0}]):ot});else if(!he){let me=de.toLowerCase();!hn&&me.includes("tool:functions.")&&(hn=!0),xe?U(ye=>ye.map(tt=>tt.id===xe?{...tt,text:tt.text+de,isStreaming:!0}:tt)):(xe="agent-"+Date.now(),U(ye=>[...ye,{id:xe,role:"agent",text:de,isStreaming:!0}]))}}let zn=Date.now();Dr(R=>R+(zn-L))}catch(q){U(te=>(Q(te.length+1),[...te,{id:"error-"+Date.now(),role:"system",text:`\u274C ERROR: ${q.message}`}]))}finally{if(Fr(!1),Kn(null),b||process.stdout.isTTY&&(process.stdout.write("\x1B]0;FluxFlow | Idle\x07"),process.stdout.write("\x1B]633;P;TerminalTitle=FluxFlow | Idle\x07")),Io.current){Jo(Io.current),Le(null);let q=Io.current;Io.current=null,U(te=>{let ve=[...te],he=ve.reverse().find(Ue=>Ue.text?.includes("[STEERING HINT: QUEUED]"));return he&&(he.text=he.text.replace("[STEERING HINT: QUEUED]","[STEERING HINT: FINISHED_TURN]")),ve.reverse()}),H("resolution")}U(q=>{let te=Date.now()-L,ve=!1,he=[...q].reverse().map(xe=>{let ct=xe.isStreaming?{...xe,isStreaming:!1}:xe;return!ve&&ct.role==="agent"&&(ve=!0,ct={...ct,workedDuration:te}),ct}).reverse(),Ue=he.filter(xe=>!String(xe.id).startsWith("welcome")&&!xe.isMeta);return ts(Ne,null,Ue),Q(he.length),he})}})()}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 A=je;for(let $=0;$<M.length-1;$++){let _=M[$].toLowerCase(),b=A.find(L=>L.cmd.toLowerCase()===_);if(b&&b.subs)A=b.subs;else return[]}return A.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,A=B?g.substring(1,M).toLowerCase():g.slice(1).toLowerCase(),$=B?g.substring(M):"";return ud(process.cwd()).filter(L=>L.name.toLowerCase().includes(A)).map(L=>{let P=L.relativePath.replace(/\\/g,"/");return{cmd:"@["+(P.startsWith(".")?P:"./"+P)+$+"]",desc:L.relativePath}})}return[]},[l,k]);ao(()=>{S(0)},[be]);let uo=()=>{switch(Wt){case"settings":return s.createElement($s,{systemSettings:Ht,setSystemSettings:Z,apiTier:ze,setActiveView:H,setInputConfig:ko,saveSettings:Wn,quotas:Yt,setMessages:U,aiProvider:W});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"){H("settings");return}let g=x.value,M=await Qr(g);if(M){j(g),yt(M),Ar(M);let B="gemma-4-31b-it";g==="OpenRouter"?B="google/gemma-4-31b-it:free":g==="DeepSeek"&&(B="deepseek-v4-flash"),qe(B),Wn({aiProvider:g,activeModel:B,apiTier:ze,quotas:Yt}),U(A=>[...A,{role:"system",text:`\u2705 Switched to ${g}! Key loaded from Vault. Model set to ${B}.`,isMeta:!0}]),H("settings")}else ko({label:`Enter ${g} API Key:`,key:"providerKey",provider:g,value:"",returnView:"settings"}),H("input")},onClose:()=>H("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: ",ze.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"){H("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)}),H("input")):(Wn({apiTier:g,quotas:Yt}),H("settings"))},onClose:()=>H("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")),mt?.note&&s.createElement(C,{paddingX:1,marginBottom:1},s.createElement(y,{color:"yellow",dimColor:!0,italic:!0},mt.note)),s.createElement(C,{paddingX:1,flexDirection:"row"},s.createElement(y,{color:"cyan",bold:!0},mt?.label," "),s.createElement(Sl,{value:mt?.value||"",onChange:x=>ko(g=>({...g,value:x})),onSubmit:async x=>{let{key:g,subKey:M,next:B}=mt,A={...Yt},$={};if(g==="quotas"){let _=M.toLowerCase().includes("limit")?parseInt(x)||0:x;A[M]=_,Hn(A),$.quotas=A}else if(g==="activeModel")qe(x),$.activeModel=x;else if(g==="janitorModel")Ve(x),$.janitorModel=x;else if(g==="autoApproveCommands"||g==="autoDisallowCommands"||g==="alwaysAskCommands"){let _={...Ht,[g]:x.trim(),sandboxPreset:"Custom"};Z(_),$.systemSettings=_}else if(g==="externalDataPath"){let _={...Ht,useExternalData:!0,externalDataPath:x.trim()};Z(_),$.systemSettings=_,U(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={...ne,apiKey:_};ge(b),$.imageSettings=b,U(L=>(Q(L.length+1),[...L,{id:Date.now(),role:"system",text:"\u{1F511} [IMAGE KEY] Custom API key saved successfully.",isMeta:!0}]))}else ge(b=>({...b,keyType:"Default"})),$.imageSettings={...ne,keyType:"Default"},U(b=>(Q(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=mt.provider;await Zr(b,_),j(b),yt(_),Ar(_);let L="gemma-4-31b-it";b==="OpenRouter"?L="google/gemma-4-31b-it:free":b==="DeepSeek"&&(L="deepseek-v4-flash"),qe(L),$.aiProvider=b,$.activeModel=L,U(P=>(Q(P.length+1),[...P,{id:Date.now(),role:"system",text:`\u2705 ${b} API Key saved successfully! Model set to ${L}.`,isMeta:!0}]))}B?ko(B(g==="quotas"?A:x)):(Wn({...$,apiTier:ze,quotas:A,imageSettings:$.imageSettings||ne}),ko(null),H(mt?.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"},Po(Date.now()-Li))),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"},Po(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"},Po(Gn))),s.createElement(C,null,s.createElement(C,{width:25},s.createElement(y,{color:"blue"},"Background Tasks:")),s.createElement(y,{color:"white"},ft)),s.createElement(C,null,s.createElement(C,{width:25},s.createElement(y,{color:"blue"},"Tokens Consumed:")),s.createElement(y,{color:"white"},zt(ce))),ce>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(ce-pt))),it>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(it))),pt>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(pt)))),jn>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"},jn)),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"},"+",fs)," ",s.createElement(y,{color:"red"},"-",ps))),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(re?.duration||0))),s.createElement(C,null,s.createElement(C,{width:25},s.createElement(y,{color:"blue"},"Agent Interactions:")),s.createElement(y,{color:"white"},re?.agent||0)),s.createElement(C,null,s.createElement(C,{width:25},s.createElement(y,{color:"blue"},"Background Tasks:")),s.createElement(y,{color:"white"},re?.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(re?.tokens||0))),(re?.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((re?.tokens||0)-(re?.candidateTokens||0)))),(re?.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(re.cachedTokens))),(re?.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(re.candidateTokens)))),(re?.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"},re.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(((re.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"},"+",re?.linesAdded||0)," ",s.createElement(y,{color:"red"},"-",re?.linesRemoved||0))),s.createElement(C,null,s.createElement(C,{width:25},s.createElement(y,{color:"blue"},"Tool Calls Today:")),s.createElement(y,{color:"white"},(re?.toolSuccess||0)+(re?.toolFailure||0)+(re?.toolDenied||0)," ( "),s.createElement(y,{color:"green"},"\u2713 ",re?.toolSuccess||0),s.createElement(y,{color:"white"}," "),s.createElement(y,{color:"yellow"},"\u2298 ",re?.toolDenied||0),s.createElement(y,{color:"white"}," "),s.createElement(y,{color:"red"},"\u2715 ",re?.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"&&Z(g=>({...g,autoExec:!0})),H("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"&&Z(g=>({...g,allowExternalAccess:!0})),H("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"&&Z(g=>({...g,autoExec:!0,allowExternalAccess:!0})),H("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"){yt(null),H("chat");let g=Ce(2);U(M=>[...M,{id:Date.now(),role:"system",text:`\u{1F511}${g}[ACTION] Flux waiting for new API Key...`}])}else x.value==="remove"?H("deleteKey"):H("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 Ns(),yt(null),H("chat");let g=Ce(2);U(M=>[...M,{id:Date.now(),role:"system",text:`\u2728${g}[VAULT PURGED] API Key removed successfully.`}])}else H("key")}})));case"exit":return null;case"ask":return s.createElement(C,{width:"100%"},s.createElement(Qi,{question:Xn?.question,options:Xn?.options,onResolve:x=>{Xn?.resolve&&Xn.resolve(x),ur(null),H("chat")}}));case"revert":return s.createElement(C,{width:"100%",alignItems:"center",justifyContent:"center"},s.createElement(Ai,{prompts:St,onSelect:async x=>{try{let g=await bt.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))),A=[...Dt];B!==-1&&(A=Dt.slice(0,B)),U(A),Q(A.length),c(M),a(M.split(`
|
|
591
|
-
`).length>2);let $=
|
|
590
|
+
`),gt=!1;for(let Vt of ot){if(Vt.includes("Old File contents:")){gt=!0;continue}gt&&(Vt.trim()===""?gt=!1:/^\d+ \|/.test(Vt)&&tt++)}}fs+=ye,ps+=tt,ho("linesAdded",ye),ho("linesRemoved",tt)}continue}let de=R.content,Te=de.toLowerCase();if(de.includes("```")&&(ct=!ct),Te.includes("tool:functions.")&&(Mo=!0,qt=0,mo=null,de.includes("[tool:functions.")&&(qt=0)),Mo){for(let me=0;me<de.length;me++){let ye=de[me];!mo&&(ye==="'"||ye==='"'||ye==="`")?mo=ye:mo&&ye===mo&&de[me-1]!=="\\"&&(mo=null),mo||(ye==="("||ye==="["?qt++:(ye===")"||ye==="]")&&qt--)}qt<=0&&!mo&&(Mo=!1)}if((Te.includes("<think")||Te.includes("<thought"))&&(!he&&!ct&&!Mo&&!Oo)&&(he=!0,Oo=!0,de=de.replace(/<(think|thought)>[\s\S]*?<\/(think|thought)>/gi,"").replace(/<(think|thought)>/gi,""),Ue="think-"+Date.now(),U(me=>[...me,{id:Ue,role:"think",text:"",isStreaming:!0,startTime:Date.now()}])),(Te.includes("</think>")||Te.includes("</thought>"))&&Ue){let me=de.split(/<\/(think|thought)>/gi),ye=me[0]||"",tt=me.slice(2).join("").replace(/<\/?(think|thought)>/gi,"");U(ot=>{let gt=ot.map(Vt=>{if(Vt.id===Ue&&typeof Vt.id=="string"){let _r=Vt.startTime||parseInt(Vt.id.split("-")[1])||Date.now(),Ss=Date.now()-_r;return{...Vt,text:Vt.text+ye,isStreaming:!1,duration:Ss}}return Vt});return he=!1,xe="agent-"+Date.now(),[...gt,{id:xe,role:"agent",text:tt,isStreaming:!0}]});continue}if(he&&Ue)U(me=>{let ye=!1,tt="",ot=me.map(gt=>{if(gt.id===Ue){let Vt=gt.text+de;if(Vt.toLowerCase().includes("</think>")){ye=!0;let _r=Vt.split(/<\/think>/gi);tt=_r.slice(1).join("</think>")||"";let Ss=gt.startTime||parseInt(gt.id.split("-")[1])||Date.now(),Ll=Date.now()-Ss;return{...gt,text:_r[0],isStreaming:!1,duration:Ll}}return{...gt,text:Vt,isStreaming:!0}}return gt});return ye?(he=!1,xe="agent-"+Date.now(),[...ot,{id:xe,role:"agent",text:tt.replace(/<\/?(think|thought)>/gi,""),isStreaming:!0}]):ot});else if(!he){let me=de.toLowerCase();!hn&&me.includes("tool:functions.")&&(hn=!0),xe?U(ye=>ye.map(tt=>tt.id===xe?{...tt,text:tt.text+de,isStreaming:!0}:tt)):(xe="agent-"+Date.now(),U(ye=>[...ye,{id:xe,role:"agent",text:de,isStreaming:!0}]))}}let zn=Date.now();Dr(R=>R+(zn-L))}catch(q){U(te=>(Q(te.length+1),[...te,{id:"error-"+Date.now(),role:"system",text:`\u274C ERROR: ${q.message}`}]))}finally{if(Fr(!1),Kn(null),b||process.stdout.isTTY&&(process.stdout.write("\x1B]0;FluxFlow | Idle\x07"),process.stdout.write("\x1B]633;P;TerminalTitle=FluxFlow | Idle\x07")),Io.current){Jo(Io.current),Le(null);let q=Io.current;Io.current=null,U(te=>{let ve=[...te],he=ve.reverse().find(Ue=>Ue.text?.includes("[STEERING HINT: QUEUED]"));return he&&(he.text=he.text.replace("[STEERING HINT: QUEUED]","[STEERING HINT: FINISHED_TURN]")),ve.reverse()}),H("resolution")}U(q=>{let te=Date.now()-L,ve=!1,he=[...q].reverse().map(xe=>{let ct=xe.isStreaming?{...xe,isStreaming:!1}:xe;return!ve&&ct.role==="agent"&&(ve=!0,ct={...ct,workedDuration:te}),ct}).reverse(),Ue=he.filter(xe=>!String(xe.id).startsWith("welcome")&&!xe.isMeta);return ts(Ne,null,Ue),Q(he.length),he})}})()}c(""),a(!1)}},be=Ar(()=>{if(l.startsWith("/")&&!k){let M=l.split(" "),P=M[M.length-1].toLowerCase();if(M.length===1){let $=P.startsWith("/")?P.slice(1):P;return je.filter(_=>(_.cmd.startsWith("/")?_.cmd.slice(1):_.cmd).toLowerCase().includes($))}let O=je;for(let $=0;$<M.length-1;$++){let _=M[$].toLowerCase(),b=O.find(L=>L.cmd.toLowerCase()===_);if(b&&b.subs)O=b.subs;else return[]}return O.filter($=>$.cmd.toLowerCase().includes(P))}let x=l.split(" "),g=x[x.length-1];if(g&&g.startsWith("@")&&!k){let M=g.indexOf("#"),P=M!==-1,O=P?g.substring(1,M).toLowerCase():g.slice(1).toLowerCase(),$=P?g.substring(M):"";return ud(process.cwd()).filter(L=>L.name.toLowerCase().includes(O)).map(L=>{let B=L.relativePath.replace(/\\/g,"/");return{cmd:"@["+(B.startsWith(".")?B:"./"+B)+$+"]",desc:L.relativePath}})}return[]},[l,k]);ao(()=>{S(0)},[be]);let uo=()=>{switch(Wt){case"settings":return s.createElement($s,{systemSettings:Ht,setSystemSettings:Z,apiTier:ze,setActiveView:H,setInputConfig:ko,saveSettings:Wn,quotas:Yt,setMessages:U,aiProvider:W});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"){H("settings");return}let g=x.value,M=await Qr(g);if(M){j(g),yt(M),Or(M);let P="gemma-4-31b-it";g==="OpenRouter"?P="google/gemma-4-31b-it:free":g==="DeepSeek"&&(P="deepseek-v4-flash"),qe(P),Wn({aiProvider:g,activeModel:P,apiTier:ze,quotas:Yt}),U(O=>[...O,{role:"system",text:`\u2705 Switched to ${g}! Key loaded from Vault. Model set to ${P}.`,isMeta:!0}]),H("settings")}else ko({label:`Enter ${g} API Key:`,key:"providerKey",provider:g,value:"",returnView:"settings"}),H("input")},onClose:()=>H("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: ",ze.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"){H("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)}),H("input")):(Wn({apiTier:g,quotas:Yt}),H("settings"))},onClose:()=>H("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")),mt?.note&&s.createElement(C,{paddingX:1,marginBottom:1},s.createElement(y,{color:"yellow",dimColor:!0,italic:!0},mt.note)),s.createElement(C,{paddingX:1,flexDirection:"row"},s.createElement(y,{color:"cyan",bold:!0},mt?.label," "),s.createElement(Sl,{value:mt?.value||"",onChange:x=>ko(g=>({...g,value:x})),onSubmit:async x=>{let{key:g,subKey:M,next:P}=mt,O={...Yt},$={};if(g==="quotas"){let _=M.toLowerCase().includes("limit")?parseInt(x)||0:x;O[M]=_,Hn(O),$.quotas=O}else if(g==="activeModel")qe(x),$.activeModel=x;else if(g==="janitorModel")Ve(x),$.janitorModel=x;else if(g==="autoApproveCommands"||g==="autoDisallowCommands"||g==="alwaysAskCommands"){let _={...Ht,[g]:x.trim(),sandboxPreset:"Custom"};Z(_),$.systemSettings=_}else if(g==="externalDataPath"){let _={...Ht,useExternalData:!0,externalDataPath:x.trim()};Z(_),$.systemSettings=_,U(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={...ne,apiKey:_};ge(b),$.imageSettings=b,U(L=>(Q(L.length+1),[...L,{id:Date.now(),role:"system",text:"\u{1F511} [IMAGE KEY] Custom API key saved successfully.",isMeta:!0}]))}else ge(b=>({...b,keyType:"Default"})),$.imageSettings={...ne,keyType:"Default"},U(b=>(Q(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=mt.provider;await Zr(b,_),j(b),yt(_),Or(_);let L="gemma-4-31b-it";b==="OpenRouter"?L="google/gemma-4-31b-it:free":b==="DeepSeek"&&(L="deepseek-v4-flash"),qe(L),$.aiProvider=b,$.activeModel=L,U(B=>(Q(B.length+1),[...B,{id:Date.now(),role:"system",text:`\u2705 ${b} API Key saved successfully! Model set to ${L}.`,isMeta:!0}]))}P?ko(P(g==="quotas"?O:x)):(Wn({...$,apiTier:ze,quotas:O,imageSettings:$.imageSettings||ne}),ko(null),H(mt?.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"},Po(Date.now()-Li))),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"},Po(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"},Po(Gn))),s.createElement(C,null,s.createElement(C,{width:25},s.createElement(y,{color:"blue"},"Background Tasks:")),s.createElement(y,{color:"white"},ft)),s.createElement(C,null,s.createElement(C,{width:25},s.createElement(y,{color:"blue"},"Tokens Consumed:")),s.createElement(y,{color:"white"},zt(ce))),ce>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(ce-pt))),it>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(it))),pt>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(pt)))),jn>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"},jn)),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"},"+",fs)," ",s.createElement(y,{color:"red"},"-",ps))),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(re?.duration||0))),s.createElement(C,null,s.createElement(C,{width:25},s.createElement(y,{color:"blue"},"Agent Interactions:")),s.createElement(y,{color:"white"},re?.agent||0)),s.createElement(C,null,s.createElement(C,{width:25},s.createElement(y,{color:"blue"},"Background Tasks:")),s.createElement(y,{color:"white"},re?.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(re?.tokens||0))),(re?.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((re?.tokens||0)-(re?.candidateTokens||0)))),(re?.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(re.cachedTokens))),(re?.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(re.candidateTokens)))),(re?.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"},re.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(((re.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"},"+",re?.linesAdded||0)," ",s.createElement(y,{color:"red"},"-",re?.linesRemoved||0))),s.createElement(C,null,s.createElement(C,{width:25},s.createElement(y,{color:"blue"},"Tool Calls Today:")),s.createElement(y,{color:"white"},(re?.toolSuccess||0)+(re?.toolFailure||0)+(re?.toolDenied||0)," ( "),s.createElement(y,{color:"green"},"\u2713 ",re?.toolSuccess||0),s.createElement(y,{color:"white"}," "),s.createElement(y,{color:"yellow"},"\u2298 ",re?.toolDenied||0),s.createElement(y,{color:"white"}," "),s.createElement(y,{color:"red"},"\u2715 ",re?.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"&&Z(g=>({...g,autoExec:!0})),H("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"&&Z(g=>({...g,allowExternalAccess:!0})),H("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"&&Z(g=>({...g,autoExec:!0,allowExternalAccess:!0})),H("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"){yt(null),H("chat");let g=Ce(2);U(M=>[...M,{id:Date.now(),role:"system",text:`\u{1F511}${g}[ACTION] Flux waiting for new API Key...`}])}else x.value==="remove"?H("deleteKey"):H("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 Ns(),yt(null),H("chat");let g=Ce(2);U(M=>[...M,{id:Date.now(),role:"system",text:`\u2728${g}[VAULT PURGED] API Key removed successfully.`}])}else H("key")}})));case"exit":return null;case"ask":return s.createElement(C,{width:"100%"},s.createElement(Qi,{question:Xn?.question,options:Xn?.options,onResolve:x=>{Xn?.resolve&&Xn.resolve(x),ur(null),H("chat")}}));case"revert":return s.createElement(C,{width:"100%",alignItems:"center",justifyContent:"center"},s.createElement(Oi,{prompts:St,onSelect:async x=>{try{let g=await bt.rollbackToBefore(x);if(g.success){let{targetPrompt:M}=g,P=Dt.findIndex(b=>b.role==="user"&&b.text&&(b.text.startsWith(M)||b.text.includes(M))),O=[...Dt];P!==-1&&(O=Dt.slice(0,P)),U(O),Q(O.length),c(M),a(M.split(`
|
|
591
|
+
`).length>2);let $=O.filter(b=>!String(b.id).startsWith("welcome")&&!b.isMeta);await ts(Ne,null,$);let _=Ce(2);U(b=>{let L=[...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 Q(L.length),L}),H("chat")}}catch(g){let M=Ce(2);U(P=>{let O=[...P,{id:"revert-err-"+Date.now(),role:"system",text:`\u274C${M}[TIME TRAVEL ERROR] Failed to rollback: ${g.message}`,isMeta:!0}];return Q(O.length),O}),H("chat")}},onClose:()=>H("chat")}));case"resume":return s.createElement(C,{width:"100%",alignItems:"center",justifyContent:"center"},s.createElement(ki,{onSelect:async x=>{let g=await vo();if(g[x]){r.write("\x1B[2J\x1B[3J\x1B[H"),lt(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+`
|
|
592
592
|
|
|
593
|
-
\u{1F30A}\u26A1 Resuming Flux Flow Session...`,isMeta:!0}),U(M),H("chat"),U(
|
|
593
|
+
\u{1F30A}\u26A1 Resuming Flux Flow Session...`,isMeta:!0}),U(M),H("chat"),U(O=>{let $=[...O,{id:"sys-"+Date.now(),role:"system",text:`\u{1F4E1} SESSION RESUMED: [${x}]`,isMeta:!0}];return Q($.length),$})}},onDelete:async x=>await Ys(x),onClose:()=>H("chat")}));case"memory":return s.createElement(C,{width:"100%",alignItems:"center",justifyContent:"center"},s.createElement(Mi,{onClose:()=>H("chat")}));case"profile":return s.createElement(Ps,{initialData:Me,onSave:x=>{rt(x),U(g=>[...g,{id:Date.now(),role:"system",text:`\u2705 Profile updated: ${x.name} (${x.nickname})`}]),H("chat")},onCancel:()=>H("chat")});case"resolution":return s.createElement(C,{width:"100%",alignItems:"center",justifyContent:"center"},s.createElement(cd,{data:_o,onResolve:x=>{Jo(null),H("chat"),setTimeout(()=>{ht(x,!0)},500)},onEdit:x=>{Jo(null),H("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(mn?.args||"{}").path||"Unknown File")),sn()?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(mn?.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,L=$.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)),L&&s.createElement(C,{marginTop:b?1:0},s.createElement(y,{color:"green",wrap:"anywhere",bold:!0},"+ ",$.new.replace(/\[\/n\]?/g,"\\n"))))}));let O=x.content||x.ReplacementContent||x.content_to_add||x.replacementContent||x.newContent||null;return s.createElement(y,{color:"white",wrap:"anywhere"},(O?O.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"&&Di(!0);let g=x.value==="deny"?"deny":"allow";mn.resolve(g),zo(null),H("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"){H("settings");return}x.value==="custom"?(ko({label:"Enter Custom Update Command (Global install recommended):",key:"customUpdateCommand",value:Ht.customUpdateCommand,next:g=>(Z(M=>({...M,updateManager:"custom",customUpdateCommand:g})),null)}),H("input")):(Z(g=>({...g,updateManager:x.value})),H("settings"))}});case"update":return s.createElement(fl,{latest:Oe,current:Dn,settings:Ht,onClose:()=>H("chat"),onSuccess:()=>{U(x=>(Q(x.length+1),[...x,{id:"update-success-"+Date.now(),role:"system",text:`\u2728 **[UPDATE COMPLETED]** Flux Flow successfully upgraded to v${Oe}.
|
|
594
594
|
\u{1F680} **Restart Flux Flow to see changes.**`,isMeta:!0}])),H("chat")},onUpdateSettings:x=>{H("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(mn?.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=>{mn.resolve(x.value),zo(null),H("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(ld,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&&z?"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"},$n||Ke),s.createElement(y,{color:"gray",bold:!0}," ]"))),s.createElement(C,{borderStyle:"round",borderColor:fn?"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:fn?"magenta":"cyan",bold:!0},fn?"\u2726 ":"\u{1F4A0} ")),s.createElement(C,{flexGrow:1},s.createElement(C,{flexGrow:1,position:"relative"},l===""&&s.createElement(C,{position:"absolute",paddingLeft:0},Tt&&!Xt?s.createElement(y,{color:"yellow"},ie?" Terminal is waiting for user input. Press TAB to interact":" Press TAB to interact with terminal..."):Tt&&Xt?s.createElement(y,{color:"yellow",bold:!0}," [ TERMINAL FOCUSED ] Type to interact, press TAB to exit..."):z===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.":fn?" Enter a prompt to steer the agent.":` Send message or /cmd ... (${co.shortcut} for newline), @file`)),s.createElement(Fi,{key:`input-${m}`,focus:!Xt,showCursor:xo,lastFocusEventTime:oo.current,value:l,columns:h.columns,onChange:x=>{let g=x.replace(/\r\n/g,`
|
|
595
595
|
`).replace(/\r/g,`
|
|
596
596
|
`).replace(/\\\s*\n/g,`
|
|
597
|
-
`);c(g),D(!1)},onSubmit:ht,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%"},N?s.createElement(sd,{width:r?.columns||80,height:r?.rows||24,selectedIndex:F}):s.createElement(s.Fragment,null,s.createElement(C,{flexDirection:"column",width:"100%",flexGrow:1},Br.items.map((x,g)=>s.createElement(Ms,{key:x.id||g,msg:x,showFullThinking:fe,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(Wi,{messages:Dt.slice(Ts),showFullThinking:fe,columns:Math.max(20,(r?.columns||80)-1)}),Tt&&s.createElement(C,{marginTop:1},s.createElement(Yr,{command:Tt,output:jt,isFocused:Xt,isPty:To}))),ue?s.createElement(C,{borderStyle:"double",borderColor:"magenta",padding:1,flexShrink:0},s.createElement(y,{color:"magenta"},"\u{1F30A} Starting Flux Flow...")):Oe?uo():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"},$e===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=>{j(x.value),le(1)}}))):s.createElement(s.Fragment,null,s.createElement(y,null,"Please enter your ",W," 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(Sl,{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},$e===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(Hi,{mode:f,thinkingLevel:K,tokens:pe.tokens,tokensTotal:pe.tokens,chatId:Ne,isMemoryEnabled:Ht.memory,apiTier:ze,aiProvider:W})),Wt==="exit"&&(()=>{let x=Date.now()-Li,g=Ze+_t,M=g>0?(Ze/g*100).toFixed(1):"0.0",B=cr+Gn,A=B>0?(cr/B*100).toFixed(1):"0.0",$=B>0?(Gn/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:0},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"},Ne)),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"},"+",fs)," ",s.createElement(y,{color:"red"},"-",ps))),s.createElement(C,null,s.createElement(C,{width:20},s.createElement(y,{color:"blue"},"Tokens Consumed:")),s.createElement(y,{color:"white"},zt(ce))),ce>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(ce-pt))),it>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(it))),pt>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(pt)))),jn>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"},jn)),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"},Po(x))),s.createElement(C,null,s.createElement(C,{width:20},s.createElement(y,{color:"blue"},"Agent Active:")),s.createElement(y,{color:"white"},Po(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"},Po(cr)," (",A,"%)")),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"},Po(Gn)," (",$,"%)"))))})(),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")&&ze==="Free"?(()=>{let A="https://aistudio.google.com/billing",$="billing";return W==="DeepSeek"?(A="https://platform.deepseek.com/usage",$="billing"):W==="OpenRouter"&&(A="https://openrouter.ai/settings/profile",$="profile"),s.createElement(y,{color:"gray",dimColor:!0,italic:!0},"Paid API has more models. Configure ",s.createElement(y,{color:"cyan",underline:!0},`\x1B]8;;${A}\x07${$}\x1B]8;;\x07`)," & /settings")})():null),M.map((A,$)=>{let b=g+$===w,L=A.cmd==="gemma-4-31b-it"&&ze!=="Free";return s.createElement(C,{key:A.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:L?"gray":b?"yellow":"white",bold:b,dimColor:L&&!b},A.cmd?.startsWith("@[")&&A.cmd?.endsWith("]")?(()=>{let q=A.cmd.slice(2,-1).split(/[/\\]/);return q[q.length-1]})():A.cmd)),s.createElement(C,{flexGrow:1},s.createElement(y,{color:"gray",italic:!0,dimColor:!b},A.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 hs,Cl,sd,Li,El,fs,ps,id,kl,Dn,ad,bl,ld,cd,lr,dd,ud,Al=se(async()=>{Pi();Yi();Gi();ji();await zi();Ji();Zi();Sr();await al();mi();Er();ll();cl();await pl();nn();hl();rs();Is();Jt();eo();wn();await xr();wl();Fn();yi();hs=()=>{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"},Cl=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},sd=({width:e,height:o,selectedIndex:t})=>{let n=hs(),i=Cl(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"},"FluxFlow-CLI Companion")," is not installed."),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 DIFF viewer for AI edits"),s.createElement(y,{color:"gray"}," \u2705 Direct IDE context sharing"),s.createElement(y,{color:"gray"}," \u2705 Surgical Diagnostic Sync"),s.createElement(y,{color:"gray"}," \u2705 Native Right-Click \u276F Chat integration"),s.createElement(y,{color:"gray"}," \u2705 Live Status in IDE"),s.createElement(y,{color:"gray"}," \u2705 Clickable terminal-to-code links"))),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)"))))},Li=Date.now(),El="https://fluxflow-cli.onrender.com/changelog.html",fs=0,ps=0,id=Yn.join(Yn.dirname(nd(import.meta.url)),"../package.json"),kl=JSON.parse(to.readFileSync(id,"utf8")),Dn=kl.version,ad=kl.date||"2026-05-20",bl=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],ld=()=>{let[e,o]=V(0);return ao(()=>{let t=setInterval(()=>{o(n=>(n+1)%1e3)},33);return()=>clearInterval(t)},[]),s.createElement(y,{color:"magenta"},bl[Math.floor(e/3)%bl.length])},cd=({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=rd(["#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
|
+
`);c(g),D(!1)},onSubmit:ht,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%"},N?s.createElement(sd,{width:r?.columns||80,height:r?.rows||24,selectedIndex:F}):s.createElement(s.Fragment,null,s.createElement(C,{flexDirection:"column",width:"100%",flexGrow:1},Br.items.map((x,g)=>s.createElement(Ms,{key:x.id||g,msg:x,showFullThinking:fe,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(Wi,{messages:Dt.slice(Ts),showFullThinking:fe,columns:Math.max(20,(r?.columns||80)-1)}),Tt&&s.createElement(C,{marginTop:1},s.createElement(Yr,{command:Tt,output:jt,isFocused:Xt,isPty:To}))),ue?s.createElement(C,{borderStyle:"double",borderColor:"magenta",padding:1,flexShrink:0},s.createElement(y,{color:"magenta"},"\u{1F30A} Starting Flux Flow...")):Ae?uo():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"},$e===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=>{j(x.value),le(1)}}))):s.createElement(s.Fragment,null,s.createElement(y,null,"Please enter your ",W," 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(Sl,{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},$e===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(Hi,{mode:f,thinkingLevel:K,tokens:pe.tokens,tokensTotal:pe.tokens,chatId:Ne,isMemoryEnabled:Ht.memory,apiTier:ze,aiProvider:W})),Wt==="exit"&&(()=>{let x=Date.now()-Li,g=Ze+_t,M=g>0?(Ze/g*100).toFixed(1):"0.0",P=cr+Gn,O=P>0?(cr/P*100).toFixed(1):"0.0",$=P>0?(Gn/P*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:0},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"},Ne)),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"},"+",fs)," ",s.createElement(y,{color:"red"},"-",ps))),s.createElement(C,null,s.createElement(C,{width:20},s.createElement(y,{color:"blue"},"Tokens Consumed:")),s.createElement(y,{color:"white"},zt(ce))),ce>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(ce-pt))),it>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(it))),pt>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(pt)))),jn>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"},jn)),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"},Po(x))),s.createElement(C,null,s.createElement(C,{width:20},s.createElement(y,{color:"blue"},"Agent Active:")),s.createElement(y,{color:"white"},Po(P))),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"},Po(cr)," (",O,"%)")),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"},Po(Gn)," (",$,"%)"))))})(),be.length>0&&(()=>{let g=Math.max(0,Math.min(w-2,be.length-5)),M=be.slice(g,g+5),P=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")&&ze==="Free"?(()=>{let O="https://aistudio.google.com/billing",$="billing";return W==="DeepSeek"?(O="https://platform.deepseek.com/usage",$="billing"):W==="OpenRouter"&&(O="https://openrouter.ai/settings/profile",$="profile"),s.createElement(y,{color:"gray",dimColor:!0,italic:!0},"Paid API has more models. Configure ",s.createElement(y,{color:"cyan",underline:!0},`\x1B]8;;${O}\x07${$}\x1B]8;;\x07`)," & /settings")})():null),M.map((O,$)=>{let b=g+$===w,L=O.cmd==="gemma-4-31b-it"&&ze!=="Free";return s.createElement(C,{key:O.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:L?"gray":b?"yellow":"white",bold:b,dimColor:L&&!b},O.cmd?.startsWith("@[")&&O.cmd?.endsWith("]")?(()=>{let q=O.cmd.slice(2,-1).split(/[/\\]/);return q[q.length-1]})():O.cmd)),s.createElement(C,{flexGrow:1},s.createElement(y,{color:"gray",italic:!0,dimColor:!b},O.desc)))}),be.length>5&&s.createElement(C,{paddingX:1,height:1},P>0?s.createElement(y,{color:"gray",dimColor:!0,italic:!0}," ... (",P," more commands available)"):s.createElement(y,{color:"gray",dimColor:!0,italic:!0}," (End of list)")))})())))}var hs,Cl,sd,Li,El,fs,ps,id,kl,Dn,ad,bl,ld,cd,lr,dd,ud,Ol=se(async()=>{Pi();Yi();Gi();ji();await zi();Ji();Zi();Sr();await al();mi();Er();ll();cl();await pl();nn();hl();rs();Is();Jt();eo();wn();await xr();wl();Fn();yi();hs=()=>{let e=(process.env.TERM_PROGRAM||"").toLowerCase();if(process.env.WT_SESSION)return"Windows Terminal";let o=t=>{let n=t.toLowerCase();for(let[i,r]of Object.entries(process.env))if(!["PATH","PWD","CWD","PS1","LS_COLORS","PROMPT"].includes(i)&&String(r).toLowerCase().includes(n))return!0;return!1};return e==="cursor"||process.env.CURSOR_SETTINGS_DIR||o("cursor")?"Cursor":e==="windsurf"||o("windsurf")?"Windsurf":o("antigravity")?"Antigravity":e==="trae"||o("trae")?"Trae":e==="codium"||o("codium")||o("vscode-oss")?"VSCodium":o("positron")?"Positron":e==="vscode"||process.env.VSCODE_GIT_IPC_HANDLE||o("vscode")?"VS Code":process.env.INTELLIJ_TERMINAL_COMMAND_BLOCKS||o("intellij")?"JetBrains":"Terminal"},Cl=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},sd=({width:e,height:o,selectedIndex:t})=>{let n=hs(),i=Cl(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"},"FluxFlow-CLI Companion")," is not installed."),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 DIFF viewer for AI edits"),s.createElement(y,{color:"gray"}," \u2705 Direct IDE context sharing"),s.createElement(y,{color:"gray"}," \u2705 Surgical Diagnostic Sync"),s.createElement(y,{color:"gray"}," \u2705 Native Right-Click \u276F Chat integration"),s.createElement(y,{color:"gray"}," \u2705 Live Status in IDE"),s.createElement(y,{color:"gray"}," \u2705 Clickable terminal-to-code links"))),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)"))))},Li=Date.now(),El="https://fluxflow-cli.onrender.com/changelog.html",fs=0,ps=0,id=Yn.join(Yn.dirname(nd(import.meta.url)),"../package.json"),kl=JSON.parse(to.readFileSync(id,"utf8")),Dn=kl.version,ad=kl.date||"2026-05-20",bl=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],ld=()=>{let[e,o]=V(0);return ao(()=>{let t=setInterval(()=>{o(n=>(n+1)%1e3)},33);return()=>clearInterval(t)},[]),s.createElement(y,{color:"magenta"},bl[Math.floor(e/3)%bl.length])},cd=({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=rd(["#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
|
|
598
598
|
\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
|
|
599
599
|
\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
|
|
600
600
|
\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
|
|
601
601
|
\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
|
|
602
|
-
\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`),dd=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},ud=(()=>{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=Yn.join(l,m);to.statSync(d).isDirectory()?r(d):i.push({name:m,relativePath:Yn.relative(process.cwd(),d)})}}catch{}};return r(t),e=i,o=n,i}})()});import{spawn as md}from"child_process";import{fileURLToPath as
|
|
602
|
+
\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`),dd=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},ud=(()=>{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=Yn.join(l,m);to.statSync(d).isDirectory()?r(d):i.push({name:m,relativePath:Yn.relative(process.cwd(),d)})}}catch{}};return r(t),e=i,o=n,i}})()});import{spawn as md}from"child_process";import{fileURLToPath as Al}from"url";var fd=4096,pd=Al(import.meta.url).endsWith(".js");if(pd&&!process.execArgv.some(e=>e.includes("max-old-space-size")))md(process.execPath,[`--max-old-space-size=${fd}`,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 Ol().then(()=>Ml);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("\x1B[2J\x1B[3J\x1B[H"),process.stdout.isTTY&&(process.stdout.write("\x1B]0;FluxFlow\x07"),process.stdout.write("\x1B]633;P;TerminalTitle=FluxFlow\x07")),o(e.createElement(t,{args:process.argv.slice(2)}),{exitOnCtrlC:!1})}
|