fluxflow-cli 2.7.3 → 2.7.5

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.
Files changed (2) hide show
  1. package/dist/fluxflow.js +77 -74
  2. package/package.json +1 -1
package/dist/fluxflow.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
- var Nc=Object.defineProperty;var ae=(e,t)=>()=>(e&&(t=e(e=0)),t);var rr=(e,t)=>{for(var o in t)Nc(e,o,{get:t[o],enumerable:!0})};var Ca={};rr(Ca,{ACTIVE_TX_FILE:()=>In,BACKUPS_DIR:()=>kn,CONTEXT_FILE:()=>ln,DATA_DIR:()=>es,FLUXFLOW_DIR:()=>Zn,HISTORY_FILE:()=>ts,LEDGER_FILE:()=>Do,LOGS_DIR:()=>To,MEMORIES_FILE:()=>Ht,PARSER_DIR:()=>Mn,PATHS_FILE:()=>ir,SECRET_DIR:()=>bt,SETTINGS_FILE:()=>lo,TEMP_MEM_CHAT_FILE:()=>Vo,TEMP_MEM_FILE:()=>So,USAGE_FILE:()=>Zt});import Bc from"os";import co from"path";import Sa from"fs";import Ea from"crypto";var Zn,lo,ba,es,To,bt,ts,Zt,Ht,So,Vo,kn,Do,In,ir,ln,Mn,Pt=ae(()=>{Zn=co.join(Bc.homedir(),".fluxflow"),lo=co.join(Zn,"settings.json"),ba=null;try{if(Sa.existsSync(lo)){let e=Sa.readFileSync(lo,"utf8").trim(),t;if(e.startsWith("{"))t=JSON.parse(e);else{let o=e.split(":");if(o.length===2){let n=Buffer.from(o[0],"hex"),s=o[1],r=Ea.createHash("sha256").update("fluxflow-cli-sanctuary-key").digest(),i=Ea.createDecipheriv("aes-256-cbc",r,n),u=i.update(s,"hex","utf8");u+=i.final("utf8"),t=JSON.parse(u)}}if(t){let o=t.systemSettings||{};o.useExternalData&&o.externalDataPath&&(ba=o.externalDataPath)}}}catch{}es=ba||Zn,To=co.join(es,"logs"),bt=co.join(es,"secret"),ts=co.join(bt,"history.json"),Zt=co.join(Zn,"usage.json"),Ht=co.join(bt,"memories.json"),So=co.join(bt,"memory-temp.json"),Vo=co.join(bt,"temp-memory-chat.json"),kn=co.join(es,"backups"),Do=co.join(bt,"ledger.json"),In=co.join(bt,"active_tx.json"),ir=co.join(bt,"path.json"),ln=co.join(bt,"context.json"),Mn=co.join(es,"parsers")});import $s from"fs";import zr from"path";import ar from"crypto";var Rc,Uc,Wc,ka,Ia,_s,An,fe,De,lr,cr,Oo=ae(()=>{Rc=66,Uc=!1,Wc=e=>{let t=Buffer.isBuffer(e)?e:Buffer.from(e),o=Buffer.alloc(t.length);for(let n=0;n<t.length;n++)o[n]=t[n]^Rc;return o},ka="aes-256-cbc",Ia=ar.createHash("sha256").update("fluxflow-cli-sanctuary-key").digest(),_s=e=>{if(Uc)return e;let t=ar.randomBytes(16),o=ar.createCipheriv(ka,Ia,t),n=o.update(e,"utf8","hex");return n+=o.final("hex"),t.toString("hex")+":"+n},An=e=>{let t=e.split(":");if(t.length!==2)throw new Error("Invalid AES format");let o=Buffer.from(t[0],"hex"),n=t[1],s=ar.createDecipheriv(ka,Ia,o),r=s.update(n,"hex","utf8");return r+=s.final("utf8"),r},fe=(e,t={})=>{try{if(!$s.existsSync(e))return t;let o=$s.readFileSync(e),n=o.toString("utf8").trim();if(n.startsWith("{")||n.startsWith("["))return JSON.parse(n);try{let r=An(n);return JSON.parse(r)}catch{}let s=Wc(o).toString("utf8");if(s.startsWith("{")||s.startsWith("["))return JSON.parse(s);throw new Error("Unsupported or corrupt encryption format")}catch(o){return console.error(`Vault Read Error [${zr.basename(e)}]:`,o.message),t}},De=(e,t)=>{try{let o=zr.dirname(e);$s.existsSync(o)||$s.mkdirSync(o,{recursive:!0});let n=JSON.stringify(t,null,2),s=_s(n);$s.writeFileSync(e,s,"utf8")}catch(o){console.error(`Vault Write Error [${zr.basename(e)}]:`,o.message)}},lr=fe,cr=De});var mr={};rr(mr,{getAPIKey:()=>Hc,getProviderAPIKey:()=>ur,getSearchSecrets:()=>Xc,getSecret:()=>Gc,removeAPIKey:()=>Jr,removeSecret:()=>Ma,saveAPIKey:()=>Kc,saveProviderAPIKey:()=>dr,saveSearchId:()=>qc,saveSearchKey:()=>Vc,saveSecret:()=>cn});import Yc from"fs-extra";import jc from"path";var vn,Hc,ur,dr,Gc,cn,Xc,Kc,Vc,qc,Ma,Jr,Ns=ae(()=>{Oo();Pt();vn=jc.join(bt,"secrets.json"),Hc=async()=>{try{let e=fe(vn,{});if(e.API_KEY)return e.API_KEY}catch{}return null},ur=async e=>{try{let t=fe(vn,{});if(e==="Google")return t.GOOGLE_API_KEY||t.API_KEY||null;if(e==="DeepSeek")return t.DEEPSEEK_API_KEY||null;if(e==="OpenRouter")return t.OPENROUTER_API_KEY||null;if(e==="NVIDIA")return t.NVIDIA_API_KEY||null}catch{}return null},dr=async(e,t)=>{e==="Google"?(await cn("GOOGLE_API_KEY",t),await cn("API_KEY",t)):e==="DeepSeek"?await cn("DEEPSEEK_API_KEY",t):e==="OpenRouter"?await cn("OPENROUTER_API_KEY",t):e==="NVIDIA"&&await cn("NVIDIA_API_KEY",t)},Gc=async e=>{try{return fe(vn,{})[e]||null}catch{return null}},cn=async(e,t)=>{await Yc.ensureDir(bt);let o=fe(vn,{});o[e]=t,De(vn,o)},Xc=async()=>{try{let e=fe(vn,{});return{key:e.GOOGLE_API_KEY||e.API_KEY,cx:e.SEARCH_ID}}catch{}return{key:null,cx:null}},Kc=async e=>cn("API_KEY",e),Vc=async e=>cn("GOOGLE_API_KEY",e),qc=async e=>cn("SEARCH_ID",e),Ma=async e=>{try{let t=fe(vn,{});delete t[e],De(vn,t)}catch{}},Jr=async()=>Ma("API_KEY")});var Aa={};rr(Aa,{loadSettings:()=>hs,saveSettings:()=>Dn});import Bs from"fs-extra";import Qr from"path";var fs,hs,zc,Dn,fr=ae(()=>{Pt();Oo();fs={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:""}},hs=async()=>{let e={...fs};try{if(await Bs.exists(lo)){let t=lr(lo);if(t.imageSettings&&t.imageSettings.apiKey)try{let o=t.imageSettings.apiKey,{saveSecret:n}=await Promise.resolve().then(()=>(Ns(),mr));await n("POLLINATIONS_API_KEY",o),t.imageSettings.apiKey="",cr(lo,t)}catch{}e={...fs,...t,quotas:{...fs.quotas,...t.quotas},systemSettings:{...fs.systemSettings,...t.systemSettings},profileData:{...fs.profileData,...t.profileData},imageSettings:{...fs.imageSettings,...t.imageSettings}}}}catch(t){console.error("Failed to load settings:",t)}try{let{getSecret:t}=await Promise.resolve().then(()=>(Ns(),mr)),o=await t("POLLINATIONS_API_KEY");o&&(e.imageSettings.apiKey=o)}catch{}if(e.showFullThinking===!1){e.showFullThinking=!0;try{cr(lo,e)}catch{}}return e},zc=async e=>{let{FLUXFLOW_DIR:t}=await Promise.resolve().then(()=>(Pt(),Ca)),o=["logs","secret"];for(let n of o){let s=Qr.join(t,n),r=Qr.join(e,n);try{await Bs.exists(s)&&(await Bs.ensureDir(r),await Bs.copy(s,r,{overwrite:!0}))}catch(i){console.error(`Migration failed for ${n}:`,i)}}},Dn=async e=>{try{let t=await hs();if(!t.systemSettings.useExternalData&&e.systemSettings?.useExternalData&&e.systemSettings?.externalDataPath&&await zc(e.systemSettings.externalDataPath),e.imageSettings&&e.imageSettings.apiKey!==void 0){let{saveSecret:n,removeSecret:s}=await Promise.resolve().then(()=>(Ns(),mr)),r=e.imageSettings.apiKey;r?await n("POLLINATIONS_API_KEY",r):await s("POLLINATIONS_API_KEY")}let o={...t,...e};return o.imageSettings&&(o.imageSettings={...o.imageSettings,apiKey:""}),await Bs.ensureDir(Qr.dirname(lo)),cr(lo,o),!0}catch(t){return console.error("Failed to save settings:",t),!1}}});import ho,{useState as Ws,useEffect as ti,useMemo as Zr,useCallback as hr,useRef as va}from"react";import{Box as Us,Spacer as Jc,Text as Rs,useInput as Qc,measureElement as Zc}from"ink";function eu(e,t){return e.replace(/\t/g," ".repeat(t))}function ei(e){return e==null?"":e.replace(/\r\n/g,`
2
+ var Nc=Object.defineProperty;var ae=(e,t)=>()=>(e&&(t=e(e=0)),t);var rr=(e,t)=>{for(var o in t)Nc(e,o,{get:t[o],enumerable:!0})};var Ca={};rr(Ca,{ACTIVE_TX_FILE:()=>In,BACKUPS_DIR:()=>kn,CONTEXT_FILE:()=>ln,DATA_DIR:()=>es,FLUXFLOW_DIR:()=>Zn,HISTORY_FILE:()=>ts,LEDGER_FILE:()=>Do,LOGS_DIR:()=>To,MEMORIES_FILE:()=>Ht,PARSER_DIR:()=>Mn,PATHS_FILE:()=>ir,SECRET_DIR:()=>bt,SETTINGS_FILE:()=>lo,TEMP_MEM_CHAT_FILE:()=>Vo,TEMP_MEM_FILE:()=>So,USAGE_FILE:()=>Zt});import Bc from"os";import co from"path";import Sa from"fs";import Ea from"crypto";var Zn,lo,ba,es,To,bt,ts,Zt,Ht,So,Vo,kn,Do,In,ir,ln,Mn,Pt=ae(()=>{Zn=co.join(Bc.homedir(),".fluxflow"),lo=co.join(Zn,"settings.json"),ba=null;try{if(Sa.existsSync(lo)){let e=Sa.readFileSync(lo,"utf8").trim(),t;if(e.startsWith("{"))t=JSON.parse(e);else{let o=e.split(":");if(o.length===2){let n=Buffer.from(o[0],"hex"),s=o[1],r=Ea.createHash("sha256").update("fluxflow-cli-sanctuary-key").digest(),i=Ea.createDecipheriv("aes-256-cbc",r,n),u=i.update(s,"hex","utf8");u+=i.final("utf8"),t=JSON.parse(u)}}if(t){let o=t.systemSettings||{};o.useExternalData&&o.externalDataPath&&(ba=o.externalDataPath)}}}catch{}es=ba||Zn,To=co.join(es,"logs"),bt=co.join(es,"secret"),ts=co.join(bt,"history.json"),Zt=co.join(Zn,"usage.json"),Ht=co.join(bt,"memories.json"),So=co.join(bt,"memory-temp.json"),Vo=co.join(bt,"temp-memory-chat.json"),kn=co.join(es,"backups"),Do=co.join(bt,"ledger.json"),In=co.join(bt,"active_tx.json"),ir=co.join(bt,"path.json"),ln=co.join(bt,"context.json"),Mn=co.join(es,"parsers")});import $s from"fs";import zr from"path";import ar from"crypto";var Rc,Uc,Wc,ka,Ia,_s,An,fe,De,lr,cr,Oo=ae(()=>{Rc=66,Uc=!1,Wc=e=>{let t=Buffer.isBuffer(e)?e:Buffer.from(e),o=Buffer.alloc(t.length);for(let n=0;n<t.length;n++)o[n]=t[n]^Rc;return o},ka="aes-256-cbc",Ia=ar.createHash("sha256").update("fluxflow-cli-sanctuary-key").digest(),_s=e=>{if(Uc)return e;let t=ar.randomBytes(16),o=ar.createCipheriv(ka,Ia,t),n=o.update(e,"utf8","hex");return n+=o.final("hex"),t.toString("hex")+":"+n},An=e=>{let t=e.split(":");if(t.length!==2)throw new Error("Invalid AES format");let o=Buffer.from(t[0],"hex"),n=t[1],s=ar.createDecipheriv(ka,Ia,o),r=s.update(n,"hex","utf8");return r+=s.final("utf8"),r},fe=(e,t={})=>{try{if(!$s.existsSync(e))return t;let o=$s.readFileSync(e),n=o.toString("utf8").trim();if(n.startsWith("{")||n.startsWith("["))return JSON.parse(n);try{let r=An(n);return JSON.parse(r)}catch{}let s=Wc(o).toString("utf8");if(s.startsWith("{")||s.startsWith("["))return JSON.parse(s);throw new Error("Unsupported or corrupt encryption format")}catch(o){return console.error(`Vault Read Error [${zr.basename(e)}]:`,o.message),t}},De=(e,t)=>{try{let o=zr.dirname(e);$s.existsSync(o)||$s.mkdirSync(o,{recursive:!0});let n=JSON.stringify(t,null,2),s=_s(n);$s.writeFileSync(e,s,"utf8")}catch(o){console.error(`Vault Write Error [${zr.basename(e)}]:`,o.message)}},lr=fe,cr=De});var mr={};rr(mr,{getAPIKey:()=>Hc,getProviderAPIKey:()=>ur,getSearchSecrets:()=>Kc,getSecret:()=>Gc,removeAPIKey:()=>Jr,removeSecret:()=>Ma,saveAPIKey:()=>Xc,saveProviderAPIKey:()=>dr,saveSearchId:()=>qc,saveSearchKey:()=>Vc,saveSecret:()=>cn});import Yc from"fs-extra";import jc from"path";var vn,Hc,ur,dr,Gc,cn,Kc,Xc,Vc,qc,Ma,Jr,Ns=ae(()=>{Oo();Pt();vn=jc.join(bt,"secrets.json"),Hc=async()=>{try{let e=fe(vn,{});if(e.API_KEY)return e.API_KEY}catch{}return null},ur=async e=>{try{let t=fe(vn,{});if(e==="Google")return t.GOOGLE_API_KEY||t.API_KEY||null;if(e==="DeepSeek")return t.DEEPSEEK_API_KEY||null;if(e==="OpenRouter")return t.OPENROUTER_API_KEY||null;if(e==="NVIDIA")return t.NVIDIA_API_KEY||null}catch{}return null},dr=async(e,t)=>{e==="Google"?(await cn("GOOGLE_API_KEY",t),await cn("API_KEY",t)):e==="DeepSeek"?await cn("DEEPSEEK_API_KEY",t):e==="OpenRouter"?await cn("OPENROUTER_API_KEY",t):e==="NVIDIA"&&await cn("NVIDIA_API_KEY",t)},Gc=async e=>{try{return fe(vn,{})[e]||null}catch{return null}},cn=async(e,t)=>{await Yc.ensureDir(bt);let o=fe(vn,{});o[e]=t,De(vn,o)},Kc=async()=>{try{let e=fe(vn,{});return{key:e.GOOGLE_API_KEY||e.API_KEY,cx:e.SEARCH_ID}}catch{}return{key:null,cx:null}},Xc=async e=>cn("API_KEY",e),Vc=async e=>cn("GOOGLE_API_KEY",e),qc=async e=>cn("SEARCH_ID",e),Ma=async e=>{try{let t=fe(vn,{});delete t[e],De(vn,t)}catch{}},Jr=async()=>Ma("API_KEY")});var Aa={};rr(Aa,{loadSettings:()=>hs,saveSettings:()=>Dn});import Bs from"fs-extra";import Qr from"path";var fs,hs,zc,Dn,fr=ae(()=>{Pt();Oo();fs={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:""}},hs=async()=>{let e={...fs};try{if(await Bs.exists(lo)){let t=lr(lo);if(t.imageSettings&&t.imageSettings.apiKey)try{let o=t.imageSettings.apiKey,{saveSecret:n}=await Promise.resolve().then(()=>(Ns(),mr));await n("POLLINATIONS_API_KEY",o),t.imageSettings.apiKey="",cr(lo,t)}catch{}e={...fs,...t,quotas:{...fs.quotas,...t.quotas},systemSettings:{...fs.systemSettings,...t.systemSettings},profileData:{...fs.profileData,...t.profileData},imageSettings:{...fs.imageSettings,...t.imageSettings}}}}catch(t){console.error("Failed to load settings:",t)}try{let{getSecret:t}=await Promise.resolve().then(()=>(Ns(),mr)),o=await t("POLLINATIONS_API_KEY");o&&(e.imageSettings.apiKey=o)}catch{}if(e.showFullThinking===!1){e.showFullThinking=!0;try{cr(lo,e)}catch{}}return e},zc=async e=>{let{FLUXFLOW_DIR:t}=await Promise.resolve().then(()=>(Pt(),Ca)),o=["logs","secret"];for(let n of o){let s=Qr.join(t,n),r=Qr.join(e,n);try{await Bs.exists(s)&&(await Bs.ensureDir(r),await Bs.copy(s,r,{overwrite:!0}))}catch(i){console.error(`Migration failed for ${n}:`,i)}}},Dn=async e=>{try{let t=await hs();if(!t.systemSettings.useExternalData&&e.systemSettings?.useExternalData&&e.systemSettings?.externalDataPath&&await zc(e.systemSettings.externalDataPath),e.imageSettings&&e.imageSettings.apiKey!==void 0){let{saveSecret:n,removeSecret:s}=await Promise.resolve().then(()=>(Ns(),mr)),r=e.imageSettings.apiKey;r?await n("POLLINATIONS_API_KEY",r):await s("POLLINATIONS_API_KEY")}let o={...t,...e};return o.imageSettings&&(o.imageSettings={...o.imageSettings,apiKey:""}),await Bs.ensureDir(Qr.dirname(lo)),cr(lo,o),!0}catch(t){return console.error("Failed to save settings:",t),!1}}});import ho,{useState as Ws,useEffect as ti,useMemo as Zr,useCallback as hr,useRef as va}from"react";import{Box as Us,Spacer as Jc,Text as Rs,useInput as Qc,measureElement as Zc}from"ink";function eu(e,t){return e.replace(/\t/g," ".repeat(t))}function ei(e){return e==null?"":e.replace(/\r\n/g,`
3
3
  `).replace(/\r/g,`
4
- `)}var Da,tu,Oa,La=ae(()=>{Da=({children:e,onHeightChange:t})=>{let o=va(null),n=va(void 0);return ti(()=>{if(o.current){let{height:s}=Zc(o.current);n.current!==s&&(n.current=s,t?.(s))}}),ho.createElement(Us,{ref:o,flexShrink:0,flexGrow:0,width:"100%"},e)},tu=({value:e,rows:t,maxRows:o,highlightStyle:n,textStyle:s,placeholder:r="",mask:i,showCursor:u=!0,focus:f=!0,tabSize:m=4,cursorIndex:c=0,highlight:a,refreshKey:d})=>{let[h,p]=Ws(0),[y,T]=Ws(0),[w,E]=Ws(0),A=hr((M,P=!1)=>{let j=ei(M);if(!P&&i)return j.replace(/[^\n]/g,i);let G=eu(j,m);return P?G:G.replace(/@\[(.*?)\]/g,(q,Y)=>{let N=Y.indexOf("#"),he=Y.indexOf(":L"),ee=Y,Me="";N!==-1?(ee=Y.slice(0,N),Me=Y.slice(N)):he!==-1&&(ee=Y.slice(0,he),Me=Y.slice(he));let le=ee.replace(/\\/g,"/"),ue=(process.cwd()||"").replace(/\\/g,"/");ue&&le.toLowerCase().startsWith(ue.toLowerCase()+"/")?le=le.slice(ue.length+1):le.startsWith("./")&&(le=le.slice(2));let Ke=le.split("/");return`[${Ke[Ke.length-1]}${Me}]`})},[m,i]),{preCursor:$,postCursor:W}=Zr(()=>{if(!e)return r&&!f?{preCursor:[{value:A(r,!0),type:"placeholder"}],postCursor:[]}:{preCursor:[{value:u&&f?" ":"",type:"cursor"}],postCursor:[]};let M=e.slice(0,c),P=e[c]||" ",j=e.slice(c+1);if(!f)return{preCursor:[{value:A(e)}],postCursor:[]};if(a&&a.end>a.start&&a.start>=0&&a.end<=e.length)return{preCursor:[{value:A(e.slice(0,Math.min(c,a.start)))},{value:A(e.slice(Math.max(0,a.start),Math.min(a.end,c))),type:"highlight"},{value:A(e.slice(Math.max(a.end,0),c))},{value:A(P),type:"cursor"}],postCursor:[{value:A(e.slice(c+1,Math.max(c+1,a.start)))},{value:A(e.slice(Math.max(c+1,a.start),Math.max(c+1,a.end))),type:"highlight"},{value:A(e.slice(Math.max(c+1,a.end)))}]};{let q=A(M),Y=A(j),N=q.lastIndexOf(`
4
+ `)}var Da,tu,Oa,La=ae(()=>{Da=({children:e,onHeightChange:t})=>{let o=va(null),n=va(void 0);return ti(()=>{if(o.current){let{height:s}=Zc(o.current);n.current!==s&&(n.current=s,t?.(s))}}),ho.createElement(Us,{ref:o,flexShrink:0,flexGrow:0,width:"100%"},e)},tu=({value:e,rows:t,maxRows:o,highlightStyle:n,textStyle:s,placeholder:r="",mask:i,showCursor:u=!0,focus:f=!0,tabSize:m=4,cursorIndex:c=0,highlight:a,refreshKey:d})=>{let[h,p]=Ws(0),[y,T]=Ws(0),[w,E]=Ws(0),A=hr((M,P=!1)=>{let j=ei(M);if(!P&&i)return j.replace(/[^\n]/g,i);let G=eu(j,m);return P?G:G.replace(/@\[(.*?)\]/g,(q,Y)=>{let N=Y.indexOf("#"),he=Y.indexOf(":L"),ee=Y,Me="";N!==-1?(ee=Y.slice(0,N),Me=Y.slice(N)):he!==-1&&(ee=Y.slice(0,he),Me=Y.slice(he));let le=ee.replace(/\\/g,"/"),ue=(process.cwd()||"").replace(/\\/g,"/");ue&&le.toLowerCase().startsWith(ue.toLowerCase()+"/")?le=le.slice(ue.length+1):le.startsWith("./")&&(le=le.slice(2));let Xe=le.split("/");return`[${Xe[Xe.length-1]}${Me}]`})},[m,i]),{preCursor:$,postCursor:W}=Zr(()=>{if(!e)return r&&!f?{preCursor:[{value:A(r,!0),type:"placeholder"}],postCursor:[]}:{preCursor:[{value:u&&f?" ":"",type:"cursor"}],postCursor:[]};let M=e.slice(0,c),P=e[c]||" ",j=e.slice(c+1);if(!f)return{preCursor:[{value:A(e)}],postCursor:[]};if(a&&a.end>a.start&&a.start>=0&&a.end<=e.length)return{preCursor:[{value:A(e.slice(0,Math.min(c,a.start)))},{value:A(e.slice(Math.max(0,a.start),Math.min(a.end,c))),type:"highlight"},{value:A(e.slice(Math.max(a.end,0),c))},{value:A(P),type:"cursor"}],postCursor:[{value:A(e.slice(c+1,Math.max(c+1,a.start)))},{value:A(e.slice(Math.max(c+1,a.start),Math.max(c+1,a.end))),type:"highlight"},{value:A(e.slice(Math.max(c+1,a.end)))}]};{let q=A(M),Y=A(j),N=q.lastIndexOf(`
5
5
  `)+1,he=Y.indexOf(`
6
6
  `)===-1?Y.length:Y.indexOf(`
7
7
  `);return{preCursor:[{value:q.slice(0,N)},{value:q.slice(N),type:"highlight"},{value:A(P),type:"cursor"}],postCursor:[{value:Y.slice(0,he),type:"highlight"},{value:Y.slice(he)}]}}},[c,u,f,e,r,i,a,A,d]),D=Zr(()=>y!==void 0?Math.max(t??o??1,Math.min(o??t??1,y)):1,[t,o,y]);ti(()=>{if(w!==void 0&&D!==void 0){let M=w;p(P=>{let j=P,G=P+D;if(M<=j)return Math.max(0,M-1);if(M>G)return M-D;if(y){if(y<D)return 0;if(y<G)return y-D}return P})}},[w,D,y]);let O=hr(M=>{switch(M){case"placeholder":return{...s,dimColor:!0};case"highlight":return n??s;case"cursor":return{...s,color:u&&f?"white":void 0,bold:u&&f,inverse:u&&f};default:return s}},[s,n,u,f]);return ho.createElement(Us,{height:D,overflow:"hidden",flexDirection:"column",flexGrow:0,flexShrink:0},ho.createElement(Us,{flexDirection:"column"},ho.createElement(Us,{height:D,overflowY:"hidden",flexShrink:0,flexDirection:"column"},ho.createElement(Us,{marginTop:-h,flexDirection:"column"},ho.createElement(Da,{onHeightChange:T},ho.createElement(Rs,null,$?.map((M,P)=>ho.createElement(Rs,{key:P,...O(M.type)},M.value)),W?.map((M,P)=>ho.createElement(Rs,{key:P,...O(M.type)},M.value))))),ho.createElement(Jc,null)),ho.createElement(Da,{onHeightChange:E},ho.createElement(Rs,null,$?.map((M,P)=>ho.createElement(Rs,{key:P,...O(M.type)},M.value))))))},Oa=({value:e,onChange:t,onSubmit:o,keyBindings:n,showCursor:s=!0,highlightPastedText:r=!1,focus:i=!0,lastFocusEventTime:u=0,columns:f=80,useCustomInput:m=(a,d)=>Qc(a,{isActive:d}),...c})=>{let[a,d]=Ws(e.length),[h,p]=Ws(0);ti(()=>{a>e.length&&d(e.length)},[e,a]);let y=hr(E=>{let $=ei(e).split(`
@@ -64,7 +64,7 @@ ${s[7]}`}});import k from"react";import{Box as H,Text as te}from"ink";var ru,iu,
64
64
  `).replace(/\\\n/g,`
65
65
  `).replace(/\\$/,""),o-6).split(`
66
66
  `).map((h,p)=>k.createElement(H,{key:p,flexDirection:"row",width:"100%"},k.createElement(H,{flexShrink:0,width:2},k.createElement(te,{bold:!0,color:"white"},p===0?">":" ")),k.createElement(H,{flexGrow:1,marginLeft:1},k.createElement(Pn,{text:h,color:e.color||"white"}))))),k.createElement(H,{width:"100%",height:1,overflow:"hidden"},k.createElement(te,{color:"#444444"},"\u2580".repeat(Math.max(1,o))))):e.role==="think"?k.createElement(H,{flexDirection:"column",marginTop:0,marginBottom:0,paddingX:1,width:"100%"},e.isStreaming&&!e.duration?k.createElement(te,{bold:!0,color:"white"},"\u2727 Thinking..."):k.createElement(te,{bold:!0,color:"white"},"\u2726 Thought",e.duration?k.createElement(te,{color:"gray"}," for ",k.createElement(te,{bold:!0,color:"white"},Ba(e.duration))):""),k.createElement(H,{borderStyle:"single",borderLeft:!0,borderRight:!1,borderTop:!1,borderBottom:!1,paddingLeft:2,paddingTop:1,paddingBottom:1,flexDirection:"column",width:"100%"},au(d,o))):k.createElement(H,{flexDirection:"column",paddingX:1,marginTop:0,width:"100%"},k.createElement(Na,{text:d.replace(/ \|\n\n/g,` |
67
- `),columns:o}),e.memoryUpdated&&k.createElement(H,{marginTop:1,width:"100%"},k.createElement(te,{color:"white",italic:!0},"[Memory Updated]")),e.role==="agent"&&e.workedDuration?k.createElement(H,{marginTop:1,marginBottom:2,width:"100%"},k.createElement(te,null,"["),k.createElement(te,{color:"gray"},"Worked for ",k.createElement(te,{bold:!0,color:"white"},Ba(e.workedDuration))),k.createElement(te,null,"]")):null))}),mu=k.memo(({messages:e,showFullThinking:t,columns:o=80,aiProvider:n,version:s})=>k.createElement(H,{flexDirection:"column",width:"100%"},e.map((r,i)=>k.createElement(si,{key:r.id||i,msg:r,showFullThinking:t,columns:o,aiProvider:n,version:s})))),Ra=mu});import rt from"react";import{Box as dn,Text as po}from"ink";var fu,Wa,Ya=ae(()=>{os();fu=rt.memo(({mode:e,thinkingLevel:t,tokens:o="0.0k",tokensTotal:n="0.0k",chatId:s="NEW-SESSION",isMemoryEnabled:r=!0,apiTier:i="Free",aiProvider:u="Google"})=>{let m=256e3;return(u==="DeepSeek"||u==="Google"&&i==="Paid")&&(m=4e5),rt.createElement(dn,{flexDirection:"row",justifyContent:"space-between",paddingX:1,width:"100%"},rt.createElement(dn,null,rt.createElement(dn,{marginRight:1},rt.createElement(po,{color:"white",bold:!0},""," ",e.toUpperCase())),rt.createElement(po,{color:"gray",dimColor:!0},"\u2503 "),rt.createElement(dn,{marginX:1},rt.createElement(po,{color:"white",bold:!0},t.toUpperCase())),rt.createElement(po,{color:"gray",dimColor:!0},"\u2503 "),rt.createElement(dn,{marginX:1},rt.createElement(po,{color:"gray"},"MEM: "),rt.createElement(po,{color:"white",bold:!0},r?"ON":"OFF"))),rt.createElement(dn,{flexGrow:1,justifyContent:"center",paddingX:2},rt.createElement(po,{color:"white",italic:!0}," ",Pa(process.cwd(),35))),rt.createElement(dn,null,rt.createElement(po,{color:"gray",dimColor:!0},"\u2503 "),rt.createElement(dn,{marginX:1},rt.createElement(po,{color:"white"}," ",eo(n)," ",rt.createElement(po,{dimColor:!0},(o/m*100).toFixed(0),"%"))),rt.createElement(po,{color:"gray",dimColor:!0},"\u2503 "),rt.createElement(dn,{marginLeft:1},rt.createElement(po,{color:"gray",italic:!0}," ",s),(i==="Custom"||i==="Paid")&&rt.createElement(po,{color:"gray",dimColor:!0}," | ",rt.createElement(po,{color:"gray",bold:!0},"PAID")))))}),Wa=fu});import Lo from"react";import{Box as ps,Text as Tr}from"ink";import hu from"ink-select-input";function go({title:e,subtitle:t,items:o,onSelect:n}){return Lo.createElement(ps,{flexDirection:"column",borderStyle:"round",borderColor:"white",padding:0,marginTop:1,flexShrink:0,width:"100%"},Lo.createElement(ps,{paddingX:1,paddingY:0,marginBottom:t?0:1},Lo.createElement(Tr,{color:"gray",bold:!0},"\u{1F527} ",typeof e=="string"?e.toUpperCase():e)),t&&Lo.createElement(ps,{paddingX:1,marginBottom:1},Lo.createElement(Tr,{color:"gray",italic:!0}," ",t)),Lo.createElement(ps,{flexDirection:"column",width:"100%"},Lo.createElement(hu,{items:o,onSelect:n,itemComponent:pu,indicatorComponent:()=>null})),Lo.createElement(ps,{paddingX:1,marginTop:1},Lo.createElement(Tr,{color:"gray",italic:!0},"(Arrows to select \u2022 Enter to confirm)")))}var pu,ja=ae(()=>{pu=({label:e,isSelected:t})=>{let o=e==="Cancel"||e==="Back"||e.toLowerCase().includes("exit")||e.toLowerCase().includes("back");return Lo.createElement(ps,{marginTop:o?1:0,backgroundColor:t?"#2a2a2a":void 0,paddingX:1,width:"100%"},Lo.createElement(Tr,{color:t?"white":"gray",bold:t},t?"\u276F ":" ",e))}});var se,Xt=ae(()=>{se=e=>{let t={};if(!e)return t;let o=0;for(;o<e.length;){for(;o<e.length&&/[\s,]/.test(e[o]);)o++;if(o>=e.length)break;let n=e.substring(o).match(/^(\w+)\s*=\s*/);if(!n){o++;continue}let s=n[1];o+=n[0].length;let r="";if(o<e.length&&(e[o]==='"'||e[o]==="'"||e[o]==="`")){let i=e[o];o++;let u=o,f=-1,m=o;for(;m<e.length;){let a=e.indexOf(i,m);if(a===-1)break;let d=0;for(let T=a-1;T>=0&&e[T]==="\\";T--)d++;if(d%2!==0){m=a+1;continue}let h=e.substring(a+1),p=h.trim(),y=p===""||/^,\s*\w+\s*=/.test(p)||p.startsWith(")")&&(p.length===1||/^\)\s*([,\]\s]|\[\[?tool:)/i.test(p));if(y&&h.startsWith(`
67
+ `),columns:o}),e.memoryUpdated&&k.createElement(H,{marginTop:1,width:"100%"},k.createElement(te,{color:"white",italic:!0},"[Memory Updated]")),e.role==="agent"&&e.workedDuration?k.createElement(H,{marginTop:1,marginBottom:2,width:"100%"},k.createElement(te,null,"["),k.createElement(te,{color:"gray"},"Worked for ",k.createElement(te,{bold:!0,color:"white"},Ba(e.workedDuration))),k.createElement(te,null,"]")):null))}),mu=k.memo(({messages:e,showFullThinking:t,columns:o=80,aiProvider:n,version:s})=>k.createElement(H,{flexDirection:"column",width:"100%"},e.map((r,i)=>k.createElement(si,{key:r.id||i,msg:r,showFullThinking:t,columns:o,aiProvider:n,version:s})))),Ra=mu});import rt from"react";import{Box as dn,Text as po}from"ink";var fu,Wa,Ya=ae(()=>{os();fu=rt.memo(({mode:e,thinkingLevel:t,tokens:o="0.0k",tokensTotal:n="0.0k",chatId:s="NEW-SESSION",isMemoryEnabled:r=!0,apiTier:i="Free",aiProvider:u="Google"})=>{let m=256e3;return(u==="DeepSeek"||u==="Google"&&i==="Paid")&&(m=4e5),rt.createElement(dn,{flexDirection:"row",justifyContent:"space-between",paddingX:1,width:"100%"},rt.createElement(dn,null,rt.createElement(dn,{marginRight:1},rt.createElement(po,{color:"white",bold:!0},""," ",e.toUpperCase())),rt.createElement(po,{color:"gray",dimColor:!0},"\u2503 "),rt.createElement(dn,{marginX:1},rt.createElement(po,{color:"white",bold:!0},t.toUpperCase())),rt.createElement(po,{color:"gray",dimColor:!0},"\u2503 "),rt.createElement(dn,{marginX:1},rt.createElement(po,{color:"gray"},"MEM: "),rt.createElement(po,{color:"white",bold:!0},r?"ON":"OFF"))),rt.createElement(dn,{flexGrow:1,justifyContent:"center",paddingX:2},rt.createElement(po,{color:"white",italic:!0}," ",Pa(process.cwd(),35))),rt.createElement(dn,null,rt.createElement(po,{color:"gray",dimColor:!0},"\u2503 "),rt.createElement(dn,{marginX:1},rt.createElement(po,{color:"white"}," ",eo(n)," ",rt.createElement(po,{dimColor:!0},(o/m*100).toFixed(0),"%"))),rt.createElement(po,{color:"gray",dimColor:!0},"\u2503 "),rt.createElement(dn,{marginLeft:1},rt.createElement(po,{color:"gray",italic:!0}," ",s),(i==="Custom"||i==="Paid")&&rt.createElement(po,{color:"gray",dimColor:!0}," | ",rt.createElement(po,{color:"gray",bold:!0},"PAID")))))}),Wa=fu});import Lo from"react";import{Box as ps,Text as Tr}from"ink";import hu from"ink-select-input";function go({title:e,subtitle:t,items:o,onSelect:n}){return Lo.createElement(ps,{flexDirection:"column",borderStyle:"round",borderColor:"white",padding:0,marginTop:1,flexShrink:0,width:"100%"},Lo.createElement(ps,{paddingX:1,paddingY:0,marginBottom:t?0:1},Lo.createElement(Tr,{color:"gray",bold:!0},"\u{1F527} ",typeof e=="string"?e.toUpperCase():e)),t&&Lo.createElement(ps,{paddingX:1,marginBottom:1},Lo.createElement(Tr,{color:"gray",italic:!0}," ",t)),Lo.createElement(ps,{flexDirection:"column",width:"100%"},Lo.createElement(hu,{items:o,onSelect:n,itemComponent:pu,indicatorComponent:()=>null})),Lo.createElement(ps,{paddingX:1,marginTop:1},Lo.createElement(Tr,{color:"gray",italic:!0},"(Arrows to select \u2022 Enter to confirm)")))}var pu,ja=ae(()=>{pu=({label:e,isSelected:t})=>{let o=e==="Cancel"||e==="Back"||e.toLowerCase().includes("exit")||e.toLowerCase().includes("back");return Lo.createElement(ps,{marginTop:o?1:0,backgroundColor:t?"#2a2a2a":void 0,paddingX:1,width:"100%"},Lo.createElement(Tr,{color:t?"white":"gray",bold:t},t?"\u276F ":" ",e))}});var se,Kt=ae(()=>{se=e=>{let t={};if(!e)return t;let o=0;for(;o<e.length;){for(;o<e.length&&/[\s,]/.test(e[o]);)o++;if(o>=e.length)break;let n=e.substring(o).match(/^(\w+)\s*=\s*/);if(!n){o++;continue}let s=n[1];o+=n[0].length;let r="";if(o<e.length&&(e[o]==='"'||e[o]==="'"||e[o]==="`")){let i=e[o];o++;let u=o,f=-1,m=o;for(;m<e.length;){let a=e.indexOf(i,m);if(a===-1)break;let d=0;for(let T=a-1;T>=0&&e[T]==="\\";T--)d++;if(d%2!==0){m=a+1;continue}let h=e.substring(a+1),p=h.trim(),y=p===""||/^,\s*\w+\s*=/.test(p)||p.startsWith(")")&&(p.length===1||/^\)\s*([,\]\s]|\[\[?tool:)/i.test(p));if(y&&h.startsWith(`
68
68
  `)){let T=p.split(`
69
69
  `)[0];if(!T.includes("=")&&!T.includes(")")){m=a+1;continue}}if(y){f=a;break}m=a+1}f!==-1?(r=e.substring(u,f),o=f+1):(r=e.substring(u),o=e.length);let c=s.toLowerCase().includes("path")||["dest","source","to","from"].includes(s.toLowerCase());r=r.replace(/\\(.)/g,(a,d)=>{switch(d){case"n":return`
70
70
  `;case"r":return"\r";case"t":return" ";case"\\":return"\\";default:return d===i?i:a}})}else if(o<e.length&&e[o]==="["){let i=0,u=null,f=o,m=-1;for(let c=o;c<e.length;c++){let a=e[c];if(u&&a===u){let d=0;for(let h=c-1;h>=0&&e[h]==="\\";h--)d++;d%2===0&&(u=null)}else!u&&(a==='"'||a==="'"||a==="`")&&(u=a);if(!u&&(a==="["?i++:a==="]"&&i--,i===0)){m=c;break}}if(m!==-1){r=e.substring(f,m+1),o=m+1;try{let c=r.trim();c.startsWith("'")||c.includes("'")}catch{}}else r=e.substring(f),o=e.length}else{let i=e.substring(o),u=i.match(/,\s*\w+\s*=|(?:\s*\)\s*(?:$|\]\]))/);if(u){let f=u.index;r=i.substring(0,f).trim(),o+=f}else r=i.trim(),o=e.length}r==="true"?r=!0:r==="false"?r=!1:typeof r=="string"&&!isNaN(r)&&r.trim()!==""&&(r=Number(r)),typeof r=="string"&&(s.toLowerCase().includes("path")||["dest","source","to","from"].includes(s.toLowerCase()))&&(r=r.replace(/\x0C/g,"\\f").replace(/\x0D/g,"\\r").replace(/\x0B/g,"\\v").replace(/\x08/g,"\\b")),t[s]=r}return t}});import{execSync as gu}from"child_process";var Ys,xs,Ha,ri=ae(async()=>{await js();Ys=null,xs=()=>{if(process.platform!=="win32")return!1;if(Ys!==null)return Ys;try{gu('powershell.exe -NoProfile -Command "exit"',{stdio:"ignore"}),Ys=!0}catch{Ys=!1}return Ys},Ha=(e,t,o,n)=>`
@@ -72,11 +72,12 @@ ${s[7]}`}});import k from"react";import{Box as H,Text as te}from"ink";var ru,iu,
72
72
  Access to internal tools. MUST use the EXACT syntax '[tool:functions.ToolName(args)]'. **NO OTHER SYNTAX/MARKERS ARE ALLOWED, BRACKETS SHOULD BE PROPERLY USED AS PER SCHEMA**
73
73
 
74
74
  **TOOL USAGE POLICY:**
75
- - **MAX 3 TOOL CALLS PER TURN. Next Turn, verify tool results, plan next**
76
- ${e==="Flux"?`- USE multiple search & replace on patch tool if editing same file/path with many changes \u2190 **HIGHLY PREFERRED**
75
+ - **MAX 3 TOOL CALLS PER TURN. Next Turn, verify tool results, plan next${e==="Flux"?". EXCEPTION FOR 3 CALL LIMIT: Todo tool":""}**
76
+ ${e==="Flux"?`- USE multiple search & replace on patch tool if editing same file/path with many changes \u2190 **HIGHLY RECOMMENDED**
77
77
  - Tool execution denied? MUST use 'Ask' tool immediately to ask for reason/changes. NEVER END RESPONSE OR PROCEED BLINDLY \u2190 **MANDATORY**
78
78
  - FileMap >> ReadFile for understandling files efficiently
79
- - Want a spefific word/varible to find across project? SearchKeyword >> Guessing/ReadFile`:""}- No brute force, no spamming of tools
79
+ - Want spefific TEXT across project? SearchKeyword >> Guessing/ReadFile
80
+ - HUGE FILES? SearchKeyword >> FileMap`:""}- No brute force, no spamming of tools
80
81
  ${e==="Flux"?`- **File Tools >> Code in chat**
81
82
  `:""}
82
83
  - COMMUNICATION TOOLS -
@@ -94,7 +95,7 @@ ${e==="Flux"?`- WORKSPACE TOOLS (path = relative to CWD & WILL BE FIRST ARGUMENT
94
95
  5. [tool:functions.WriteFile(path="...", content="...")]. Creates/Overwrites. File Exist? PatchFile > WriteFile. Verify Imports
95
96
  6. [tool:functions.SearchKeyword(keyword="...", file="optional")]. Global project search. If 'file' is provided, searches only that file. Finds definitions/logic without reading every file. Usage: Can search for relevent lines/logic area to read specifically for edit
96
97
  7. [tool:functions.Run(command="...")]. Runs ${t==="Windows"?xs()?`${gs?"Interactive ":""}WINDOWS POWERSHELL ONLY`:`${gs?"Interactive ":""}WINDOWS CMD ONLY`:`${gs?"Interactive ":""}BASH`} command. Destructive/Irreversible ops -> Ask user. **TOOL DENY RULE APPLIES**. **1 CALL LIMIT FOR RUN**
97
- 8. [tool:functions.Todo(method="create/append/get", tasks=[ARRAY OF STRINGS, NO MD CHECKBOXES], markDone=[ARRAY OF TASK STRINGS, NO MD CHECKBOXES])]. Internal TODO List. Usage: MUST FOR LONG MULTISTEP TASKS TO KEEP GOAL CONSISTENT. 'tasks' & 'markDone' are OPTIONAL WITH method 'get'. TO MARK DONE USE 'get' method WITH 'markDone'. MUST UPDATE TASKS AS SOON AS COMPLETION`.trim():`- CREATIVE TOOLS (path = relative to CWD & WILL BE FIRST ARGUMENT, path separator: '/') -
98
+ 8. [tool:functions.Todo(method="create/append/get", tasks=[ARRAY OF STRINGS], markDone=[ARRAY OF TASK STRINGS])]. TODO List, Markdown IN ARRAY NOT ALLOWED. USAGE: ANALYZE USER PROMPT \u2192 BREAK DOWN TASK \u2192 CREATE TODO **BEFORE** STARTING WORK. MUST CHECK TASKS IN REALTIME USING 'markDone' BASED ON PROGRESS. 'tasks' & 'markDone' are OPTIONAL WITH method 'get'. TO MARK DONE USE 'get' method WITH 'markDone'`.trim():`- CREATIVE TOOLS (path = relative to CWD & WILL BE FIRST ARGUMENT, path separator: '/') -
98
99
  1. [tool:functions.WritePDF(path="...", content="...", orientation="...")]. PROACTIVE A4 PAGE BREAKS MUST IN CSS. HTML/CSS for PREMIUM layout
99
100
  2. [tool:functions.WriteDoc(path="...", content="...")]. A4 Word document
100
101
  - WORKSPACE TOOLS ARE NOT AVAILABLE IN FLOW`.trim()}
@@ -102,9 +103,9 @@ ${e==="Flux"?`- WORKSPACE TOOLS (path = relative to CWD & WILL BE FIRST ARGUMENT
102
103
  - VERIFY TOOL RESULT CONTENTS. Fix errors. No hallucinations
103
104
  - Escape quotes: \\" for code strings
104
105
  - Literal escapes: Double-escape sequences (e.g., \\\\n, \\\\t)
105
- - File structure: Real newlines for code formatting`.trim()});import{spawn as ii}from"child_process";var Sr,gs,Er,Hs,Ct,Po,ko,Ga,Xa,li,ai,js=ae(async()=>{Xt();await ri();Sr=null;try{let e=await import("node-pty");Sr=e.default||e}catch{}gs=!!Sr,Er=e=>typeof e!="string"?e:e.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),Hs=e=>{if(!e)return"";let t=[[]],o=0,n=0,s=/\x1b\[([0-9;]*?)([a-zA-Z])/g,r=0,i,u=m=>{for(let c=0;c<m.length;c++){let a=m[c];if(a===`
106
+ - File structure: Real newlines for code formatting`.trim()});import{spawn as ii}from"child_process";var Sr,gs,Er,Hs,Ct,Po,ko,Ga,Ka,li,ai,js=ae(async()=>{Kt();await ri();Sr=null;try{let e=await import("node-pty");Sr=e.default||e}catch{}gs=!!Sr,Er=e=>typeof e!="string"?e:e.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),Hs=e=>{if(!e)return"";let t=[[]],o=0,n=0,s=/\x1b\[([0-9;]*?)([a-zA-Z])/g,r=0,i,u=m=>{for(let c=0;c<m.length;c++){let a=m[c];if(a===`
106
107
  `)for(o++,n=0;o>=t.length;)t.push([]);else if(a==="\r")n=0;else{for(;o>=t.length;)t.push([]);let d=t[o];for(;n>d.length;)d.push(" ");d[n]=a,n++}}};for(;(i=s.exec(e))!==null;){u(e.substring(r,i.index));let m=i[1],c=i[2],a=m?m.split(";").map(Number):[];if(c==="A"){let d=a[0]||1;o=Math.max(0,o-d)}else if(c==="B"){let d=a[0]||1;for(o=o+d;o>=t.length;)t.push([])}else if(c==="C"){let d=a[0]||1;n=n+d}else if(c==="D"){let d=a[0]||1;n=Math.max(0,n-d)}else if(c==="G"){let d=(a[0]||1)-1;n=Math.max(0,d)}else if(c==="H"||c==="f"){let d=(a[0]||1)-1,h=(a[1]||1)-1;for(o=Math.max(0,d),n=Math.max(0,h);o>=t.length;)t.push([])}else if(c==="K"){let d=a[0]||0;if(o<t.length){let h=t[o];if(d===0)h.length=n;else if(d===1)for(let p=0;p<n&&p<h.length;p++)h[p]=" ";else d===2&&(h.length=0)}}else if(c==="J"){let d=a[0]||0;(d===2||d===3)&&(t.length=0,t.push([]),o=0,n=0)}r=s.lastIndex}u(e.substring(r));let f=t.map(m=>m.join(""));for(;f.length>0&&f[f.length-1]==="";)f.pop();return f.join(`
107
- `)},Ct=null,Po=!1,ko=e=>{try{Ct&&(Po&&typeof Ct.write=="function"?Ct.write(e):Ct.stdin&&Ct.stdin.writable&&Ct.stdin.write(e))}catch{}},Ga=()=>{if(Ct){try{Po&&typeof Ct.destroy=="function"?Ct.destroy():typeof Ct.kill=="function"&&(process.platform==="win32"?ii("taskkill",["/pid",Ct.pid,"/f","/t"]):Ct.kill("SIGKILL"))}catch{}Ct=null,Po=!1}},Xa=(e,t=!1)=>{if(process.platform!=="win32")return e;let o=[],n="",s=null,r=!1;for(let c=0;c<e.length;c++){let a=e[c];if(r){n+=a,r=!1;continue}if(a==="\\"){if(e[c+1]===" "){n+=" ",c++;continue}n+=a,r=!0;continue}s?(a===s&&(s=null),n+=a):a==='"'||a==="'"?(s=a,n+=a):a===";"&&!n.includes("://")?(n.length>0&&(o.push(n),n=""),o.push(t?";":"&")):a==="&"&&!n.includes("://")?e[c+1]==="&"?(n.length>0&&(o.push(n),n=""),o.push("&&"),c++):(n.length>0&&(o.push(n),n=""),o.push("&")):a==="|"&&!n.includes("://")?(n.length>0&&(o.push(n),n=""),o.push("|")):/\s/.test(a)?n.length>0&&(o.push(n),n=""):n+=a}n.length>0&&o.push(n);let i=c=>!(!c.includes("/")||/^(https?|file|ftp):\/\//i.test(c)||c.startsWith("/")&&(c.match(/\//g)||[]).length===1||/\s\/|\/\s/.test(c)||/[\(\)\{\}\;\<\>\=\'\"]/.test(c)),u=[];for(let c=0;c<o.length;c++){let a=o[c];if(a==="mkdir"&&t&&xs()){let d=[],h=c+1;for(;h<o.length;){let p=o[h];if([">",">>","<","&","&&","|","||",";"].includes(p))break;p!=="-p"&&p!=="--parents"&&p!=="-v"&&p!=="--verbose"&&d.push(p),h++}if(d.length>0){let p=d.map(y=>{let T=y.replace(/^['"]|['"]$/g,""),w=y;return i(T)&&(w=y.replace(/\//g,"\\")),w});u.push("New-Item","-ItemType","Directory","-Force","-Path",p.join(","))}else u.push("New-Item","-ItemType","Directory","-Force");c=h-1;continue}if(a==="rm"&&t&&xs()){let d=[],h=!1,p=!1,y=c+1;for(;y<o.length;){let w=o[y];if([">",">>","<","&","&&","|","||",";"].includes(w))break;w==="-rf"||w==="-fr"?(h=!0,p=!0):w==="-r"||w==="-R"||w==="--recursive"?h=!0:w==="-f"||w==="--force"?p=!0:d.push(w),y++}let T=["Remove-Item"];if(h&&T.push("-Recurse"),p&&T.push("-Force"),d.length>0){let w=d.map(E=>{let A=E.replace(/^['"]|['"]$/g,""),$=E;return i(A)&&($=E.replace(/\//g,"\\")),$});T.push("-Path",w.join(","))}u.push(...T),c=y-1;continue}if(a==="cp"&&t&&xs()){let d=[],h=!1,p=!1,y=c+1;for(;y<o.length;){let w=o[y];if([">",">>","<","&","&&","|","||",";"].includes(w))break;w==="-r"||w==="-R"||w==="--recursive"?h=!0:w==="-f"||w==="--force"?p=!0:d.push(w),y++}let T=["Copy-Item"];if(h&&T.push("-Recurse"),p&&T.push("-Force"),d.length>0){let w=d.map(E=>{let A=E.replace(/^['"]|['"]$/g,""),$=E;return i(A)&&($=E.replace(/\//g,"\\")),$});if(w.length>1){let E=w.pop();T.push("-Path",w.join(","),"-Destination",E)}else T.push("-Path",w[0])}u.push(...T),c=y-1;continue}if(a==="touch"&&t&&xs()){let d=[],h=c+1;for(;h<o.length;){let p=o[h];if([">",">>","<","&","&&","|","||",";"].includes(p))break;d.push(p),h++}if(d.length>0){let y=`(${d.map(T=>{let w=T.replace(/^['"]|['"]$/g,""),E=T;return i(w)&&(E=T.replace(/\//g,"\\")),E}).join(", ")}) | ForEach-Object { if (Test-Path $_) { (Get-Item $_).LastWriteTime = [System.DateTime]::Now } else { $null | Out-File -FilePath $_ } }`;u.push(y)}c=h-1;continue}if(a==="|"&&o[c+1]==="tee"){o[c+2]==="-a"?(u.push(">>"),c+=2):(u.push(">"),c+=1);continue}if(a==="|"&&o[c+1]==="cat"&&o[c+2]===">"){u.push(">"),c+=2;continue}if(a==="|"){let d=o[c+1];if(d){let h=d.replace(/^['"]|['"]$/g,""),p=/\.(txt|md|json|log|csv|html|css|py|js|xml|yaml|yml|pdf|docx|pptx|xlsx)$/i.test(h);if(i(h)&&p){u.push(">");continue}}}u.push(a)}let f=!1,m=u.map(c=>{if(c==="echo")return f=!0,c;[">",">>","<","&","&&","|","||",";"].includes(c)&&(f=!1);let d=/^['"]|['"]$/.test(c),h=c;f&&d&&(h=c.replace(/^['"]|['"]$/g,""));let p=/^['"]|['"]$/.test(h),y=h.replace(/^['"]|['"]$/g,"");i(y)&&(h=h.replace(/\//g,"\\"));let T=h.replace(/^['"]|['"]$/g,"");return T.includes(" ")&&!p&&(h=`"${T}"`),h});if(t){let c="",a=0;for(let d=0;d<m.length;d++){let h=m[d];h==="&&"?(c+="; if ($?) {",a++):h===";"?(c+=" }".repeat(a)+";",a=0):(c&&!c.endsWith(" ")&&!c.endsWith("{")&&(c+=" "),c+=h)}return c+=" }".repeat(a),c}return m.join(" ")},li=async(e,t={})=>{let{command:o}=se(e),{onChunk:n}=t;if(!o)return'ERROR: Missing "command" argument for exec_command.';let s=process.platform==="win32",r=t.systemSettings||{},i={};return r.networkAccess===!1&&(i.HTTP_PROXY="http://127.0.0.1:9999",i.HTTPS_PROXY="http://127.0.0.1:9999",i.ALL_PROXY="socks5://127.0.0.1:9999",i.http_proxy="http://127.0.0.1:9999",i.https_proxy="http://127.0.0.1:9999",i.all_proxy="socks5://127.0.0.1:9999",i.NO_PROXY="localhost,127.0.0.1"),new Promise(u=>{let f=m=>{let c=Xa(o,m),a=s?m?"powershell.exe":"cmd.exe":process.env.SHELL||"bash",d=s?m?["-NoProfile","-Command",c]:["/c",c]:["-c",c];if(Sr)try{let h=Sr.spawn(a,d,{name:"xterm-256color",cols:t.cols||120,rows:t.rows||30,cwd:process.cwd(),env:{...process.env,CI:"false",TERM:"xterm-256color",FORCE_COLOR:"1",...i}});Ct=h,Po=!0;let p="",y=!1;return h.onData(T=>{if(!y){p+=T,n&&n(T);let w=Er(p);/(?: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(w)&&(y=!0,setTimeout(()=>u(`SUCCESS: Dev server started successfully in background.
108
+ `)},Ct=null,Po=!1,ko=e=>{try{Ct&&(Po&&typeof Ct.write=="function"?Ct.write(e):Ct.stdin&&Ct.stdin.writable&&Ct.stdin.write(e))}catch{}},Ga=()=>{if(Ct){try{Po&&typeof Ct.destroy=="function"?Ct.destroy():typeof Ct.kill=="function"&&(process.platform==="win32"?ii("taskkill",["/pid",Ct.pid,"/f","/t"]):Ct.kill("SIGKILL"))}catch{}Ct=null,Po=!1}},Ka=(e,t=!1)=>{if(process.platform!=="win32")return e;let o=[],n="",s=null,r=!1;for(let c=0;c<e.length;c++){let a=e[c];if(r){n+=a,r=!1;continue}if(a==="\\"){if(e[c+1]===" "){n+=" ",c++;continue}n+=a,r=!0;continue}s?(a===s&&(s=null),n+=a):a==='"'||a==="'"?(s=a,n+=a):a===";"&&!n.includes("://")?(n.length>0&&(o.push(n),n=""),o.push(t?";":"&")):a==="&"&&!n.includes("://")?e[c+1]==="&"?(n.length>0&&(o.push(n),n=""),o.push("&&"),c++):(n.length>0&&(o.push(n),n=""),o.push("&")):a==="|"&&!n.includes("://")?(n.length>0&&(o.push(n),n=""),o.push("|")):/\s/.test(a)?n.length>0&&(o.push(n),n=""):n+=a}n.length>0&&o.push(n);let i=c=>!(!c.includes("/")||/^(https?|file|ftp):\/\//i.test(c)||c.startsWith("/")&&(c.match(/\//g)||[]).length===1||/\s\/|\/\s/.test(c)||/[\(\)\{\}\;\<\>\=\'\"]/.test(c)),u=[];for(let c=0;c<o.length;c++){let a=o[c];if(a==="mkdir"&&t&&xs()){let d=[],h=c+1;for(;h<o.length;){let p=o[h];if([">",">>","<","&","&&","|","||",";"].includes(p))break;p!=="-p"&&p!=="--parents"&&p!=="-v"&&p!=="--verbose"&&d.push(p),h++}if(d.length>0){let p=d.map(y=>{let T=y.replace(/^['"]|['"]$/g,""),w=y;return i(T)&&(w=y.replace(/\//g,"\\")),w});u.push("New-Item","-ItemType","Directory","-Force","-Path",p.join(","))}else u.push("New-Item","-ItemType","Directory","-Force");c=h-1;continue}if(a==="rm"&&t&&xs()){let d=[],h=!1,p=!1,y=c+1;for(;y<o.length;){let w=o[y];if([">",">>","<","&","&&","|","||",";"].includes(w))break;w==="-rf"||w==="-fr"?(h=!0,p=!0):w==="-r"||w==="-R"||w==="--recursive"?h=!0:w==="-f"||w==="--force"?p=!0:d.push(w),y++}let T=["Remove-Item"];if(h&&T.push("-Recurse"),p&&T.push("-Force"),d.length>0){let w=d.map(E=>{let A=E.replace(/^['"]|['"]$/g,""),$=E;return i(A)&&($=E.replace(/\//g,"\\")),$});T.push("-Path",w.join(","))}u.push(...T),c=y-1;continue}if(a==="cp"&&t&&xs()){let d=[],h=!1,p=!1,y=c+1;for(;y<o.length;){let w=o[y];if([">",">>","<","&","&&","|","||",";"].includes(w))break;w==="-r"||w==="-R"||w==="--recursive"?h=!0:w==="-f"||w==="--force"?p=!0:d.push(w),y++}let T=["Copy-Item"];if(h&&T.push("-Recurse"),p&&T.push("-Force"),d.length>0){let w=d.map(E=>{let A=E.replace(/^['"]|['"]$/g,""),$=E;return i(A)&&($=E.replace(/\//g,"\\")),$});if(w.length>1){let E=w.pop();T.push("-Path",w.join(","),"-Destination",E)}else T.push("-Path",w[0])}u.push(...T),c=y-1;continue}if(a==="touch"&&t&&xs()){let d=[],h=c+1;for(;h<o.length;){let p=o[h];if([">",">>","<","&","&&","|","||",";"].includes(p))break;d.push(p),h++}if(d.length>0){let y=`(${d.map(T=>{let w=T.replace(/^['"]|['"]$/g,""),E=T;return i(w)&&(E=T.replace(/\//g,"\\")),E}).join(", ")}) | ForEach-Object { if (Test-Path $_) { (Get-Item $_).LastWriteTime = [System.DateTime]::Now } else { $null | Out-File -FilePath $_ } }`;u.push(y)}c=h-1;continue}if(a==="|"&&o[c+1]==="tee"){o[c+2]==="-a"?(u.push(">>"),c+=2):(u.push(">"),c+=1);continue}if(a==="|"&&o[c+1]==="cat"&&o[c+2]===">"){u.push(">"),c+=2;continue}if(a==="|"){let d=o[c+1];if(d){let h=d.replace(/^['"]|['"]$/g,""),p=/\.(txt|md|json|log|csv|html|css|py|js|xml|yaml|yml|pdf|docx|pptx|xlsx)$/i.test(h);if(i(h)&&p){u.push(">");continue}}}u.push(a)}let f=!1,m=u.map(c=>{if(c==="echo")return f=!0,c;[">",">>","<","&","&&","|","||",";"].includes(c)&&(f=!1);let d=/^['"]|['"]$/.test(c),h=c;f&&d&&(h=c.replace(/^['"]|['"]$/g,""));let p=/^['"]|['"]$/.test(h),y=h.replace(/^['"]|['"]$/g,"");i(y)&&(h=h.replace(/\//g,"\\"));let T=h.replace(/^['"]|['"]$/g,"");return T.includes(" ")&&!p&&(h=`"${T}"`),h});if(t){let c="",a=0;for(let d=0;d<m.length;d++){let h=m[d];h==="&&"?(c+="; if ($?) {",a++):h===";"?(c+=" }".repeat(a)+";",a=0):(c&&!c.endsWith(" ")&&!c.endsWith("{")&&(c+=" "),c+=h)}return c+=" }".repeat(a),c}return m.join(" ")},li=async(e,t={})=>{let{command:o}=se(e),{onChunk:n}=t;if(!o)return'ERROR: Missing "command" argument for exec_command.';let s=process.platform==="win32",r=t.systemSettings||{},i={};return r.networkAccess===!1&&(i.HTTP_PROXY="http://127.0.0.1:9999",i.HTTPS_PROXY="http://127.0.0.1:9999",i.ALL_PROXY="socks5://127.0.0.1:9999",i.http_proxy="http://127.0.0.1:9999",i.https_proxy="http://127.0.0.1:9999",i.all_proxy="socks5://127.0.0.1:9999",i.NO_PROXY="localhost,127.0.0.1"),new Promise(u=>{let f=m=>{let c=Ka(o,m),a=s?m?"powershell.exe":"cmd.exe":process.env.SHELL||"bash",d=s?m?["-NoProfile","-Command",c]:["/c",c]:["-c",c];if(Sr)try{let h=Sr.spawn(a,d,{name:"xterm-256color",cols:t.cols||120,rows:t.rows||30,cwd:process.cwd(),env:{...process.env,CI:"false",TERM:"xterm-256color",FORCE_COLOR:"1",...i}});Ct=h,Po=!0;let p="",y=!1;return h.onData(T=>{if(!y){p+=T,n&&n(T);let w=Er(p);/(?: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(w)&&(y=!0,setTimeout(()=>u(`SUCCESS: Dev server started successfully in background.
108
109
 
109
110
  ${w}`),500))}}),h.onExit(({exitCode:T})=>{if(y)return;Ct=null;let w=Hs(p||""),E=Er(w).replace(/\n{3,}/g,`
110
111
 
@@ -124,7 +125,7 @@ ${T}`),h!==0&&p.push(`EXIT CODE: ${h}`);let w=p.join(`
124
125
 
125
126
  ${E}`:`SUCCESS: Command [${o}] completed.
126
127
 
127
- ${E}`)}),m.on("error",h=>{if(i&&r&&h.code==="ENOENT"){let y=Xa(o,!1);return ai(e,y,o,n,s,!1)}Ct=null;let p=h instanceof Error?h.message:String(h);e(`ERROR: Failed to start command [${o}]: ${p}`)})}});import Pe,{useState as Gs}from"react";import{Box as Ft,Text as to,useInput as xu}from"ink";import yu from"ink-text-input";function ui({systemSettings:e,setSystemSettings:t,apiTier:o,setActiveView:n,setInputConfig:s,saveSettings:r,quotas:i,setMessages:u,aiProvider:f}){let[m,c]=Gs("categories"),[a,d]=Gs(0),[h,p]=Gs(0),[y,T]=Gs(null),[w,E]=Gs(""),A=O=>{switch(O){case"memory":return[{label:"Toggle Memory",value:"memory",status:e.memory?"ON":"OFF"}];case"security":return[{label:"Sandbox Preset",value:"sandboxPreset",status:Ka(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:ci(e.alwaysAskCommands),section:"Sandbox"},{label:"Auto Approve Commands",value:"autoApprove",status:ci(e.autoApproveCommands),section:"Sandbox"},{label:"Auto Disapprove Commands",value:"autoDisallow",status:ci(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:f},{label:"API Tier",value:"apiTier",status:o},{label:"Download Language Parsers",value:"parserDownload",status:"ACTION"}];default:return[]}},$=mn[a].id,W=A($);xu((O,M)=>{if(y){M.escape&&T(null);return}if(m==="categories")M.upArrow?d(P=>(P-1+mn.length)%mn.length):M.downArrow?d(P=>(P+1)%mn.length):M.return||M.rightArrow?mn[a].id==="exit"?n("chat"):(c("items"),p(0)):M.escape&&n("chat");else if(m==="items"){if(M.upArrow)p(P=>(P-1+W.length)%W.length);else if(M.downArrow)p(P=>(P+1)%W.length);else if(M.leftArrow||M.escape)c("categories");else if(M.return){let P=W[h];D(P)}}});let D=O=>{if(O.value==="memory")t(M=>({...M,memory:!M.memory}));else if(O.value==="sandboxPreset"){let M=Ka(e),P=["Autonomous","Balanced","Strict"],G=(P.indexOf(M)+1)%P.length,q=P[G];t(Y=>{let N={...Y,sandboxPreset:q};return q==="Strict"?(N.autoExec=!1,N.allowExternalAccess=!1,N.networkAccess=!1,N.autoApproveCommands="",N.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",N.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",N.autoApproveGit=!1):q==="Balanced"?(N.autoExec=!0,N.allowExternalAccess=!1,N.networkAccess=!0,N.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",N.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",N.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",N.autoApproveGit=!1):q==="Autonomous"&&(N.autoExec=!0,N.allowExternalAccess=!0,N.networkAccess=!0,N.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",N.autoDisallowCommands="",N.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",N.autoApproveGit=!0),N})}else if(O.value==="autoExec")e.autoExec?t(M=>({...M,autoExec:!1,sandboxPreset:"Custom"})):e.allowExternalAccess?n("doubleDanger"):n("autoExecDanger");else if(O.value==="externalAccess")e.allowExternalAccess?t(M=>({...M,allowExternalAccess:!1,sandboxPreset:"Custom"})):e.autoExec?n("doubleDanger"):n("externalDanger");else if(O.value==="networkAccess")t(M=>({...M,networkAccess:M.networkAccess===!1,sandboxPreset:"Custom"}));else if(O.value==="alwaysAsk")T("alwaysAskCommands"),E(e.alwaysAskCommands||"");else if(O.value==="autoApprove")T("autoApproveCommands"),E(e.autoApproveCommands||"");else if(O.value==="autoApproveGit")t(M=>({...M,autoApproveGit:!M.autoApproveGit,sandboxPreset:"Custom"}));else if(O.value==="autoDisallow")T("autoDisallowCommands"),E(e.autoDisallowCommands||"");else if(O.value==="apiTier")n("apiTier");else if(O.value==="aiProvider")n("selectProvider");else if(O.value==="autoDelete"){let M=["1d","7d","30d"],j=(M.indexOf(e.autoDeleteHistory||"30d")+1)%M.length;t(G=>({...G,autoDeleteHistory:M[j]}))}else if(O.value==="autoUpdate")t(M=>({...M,autoUpdate:!M.autoUpdate}));else if(O.value==="externalData")if(!e.useExternalData)s({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 M={...e,useExternalData:!1};t(M),r({systemSettings:M,apiTier:o,quotas:i}),u(P=>[...P,{id:Date.now(),role:"system",text:"[STORAGE RESET] Flux Flow will return to default ~/.fluxflow after restart."}]),n("chat")}else O.value==="updateManager"?n("updateManager"):O.value==="parserDownload"&&n("parserDownload")};return Pe.createElement(Ft,{flexDirection:"column",borderStyle:"round",borderColor:"white",padding:0,width:"100%",minHeight:32},Pe.createElement(Ft,{paddingX:1,paddingY:0,marginBottom:0,borderStyle:"single",borderColor:"gray",width:"100%"},Pe.createElement(to,{color:"gray",bold:!0},"SYSTEM CONFIGURATION")),Pe.createElement(Ft,{flexDirection:"row",width:"100%",minHeight:26},Pe.createElement(Ft,{flexDirection:"column",width:"30%",borderStyle:"round",borderColor:m==="categories"?"white":"grey",padding:1,paddingY:0},Pe.createElement(Ft,{marginBottom:1},Pe.createElement(to,{color:m==="categories"?"white":"grey",bold:!0,underline:!0},"CATEGORIES")),mn.map((O,M)=>{let P=a===M,j=O.id==="exit";return Pe.createElement(Ft,{key:O.id,marginTop:j?17:0,backgroundColor:P?m==="categories"?"#2a2a2a":"#1e1e1e":void 0,paddingX:1},Pe.createElement(to,{color:P&&m==="categories"?"white":"grey",bold:P},P?"\u276F ":" ",O.label))})),Pe.createElement(Ft,{flexDirection:"column",width:"70%",borderStyle:"round",borderColor:m==="items"?"white":"grey",paddingX:1,marginLeft:1,paddingY:0},Pe.createElement(Ft,{marginBottom:1},Pe.createElement(to,{color:m==="items"?"white":"grey",bold:!0,underline:!0},mn[a].label.toUpperCase()," SETTINGS")),W.length>0?(()=>{let O=null,M=[],P=ee=>(ee||"").split(",").map(Me=>Me.trim().toLowerCase()).filter(Boolean),j=P(e.autoApproveCommands),G=P(e.autoDisallowCommands),q=P(e.alwaysAskCommands),Y=[...j,...G,...q],N=new Set(Y),he=$==="security"&&Y.length!==N.size;return W.forEach((ee,Me)=>{let le=m==="items"&&h===Me,ue=ee.label.length,Ke=Math.max(2,35-ue),_t=".".repeat(Ke),Ve=Ye=>$==="security"?(Ye.value==="autoExec"||Ye.value==="externalAccess")&&Ye.status==="ON"?"white":"gray":Ye.status?.startsWith("\u2713")?"white":Ye.status?.startsWith("\u26A0")?"gray":Ye.status==="ON"?"white":Ye.status==="OFF"?"gray":"white";ee.section&&ee.section!==O&&(O=ee.section,M.push(Pe.createElement(Ft,{key:`sec-hdr-${ee.section}`,marginTop:M.length>0?1:0,marginBottom:0,paddingX:1},Pe.createElement(to,{color:"gray",bold:!0,underline:!0},ee.section.toUpperCase()))));let Ee=le&&y&&(y==="alwaysAskCommands"&&ee.value==="alwaysAsk"||y==="autoApproveCommands"&&ee.value==="autoApprove"||y==="autoDisallowCommands"&&ee.value==="autoDisallow"),ft=ee.value==="alwaysAsk"||ee.value==="autoApprove"||ee.value==="autoDisallow",et=ee.value==="parserDownload";M.push(Pe.createElement(Ft,{key:ee.value,flexDirection:"column"},Pe.createElement(Ft,{backgroundColor:le&&!Ee?"#2a2a2a":void 0,paddingX:2},Pe.createElement(to,{color:le?"white":"grey",bold:le,underline:et},le?"\u276F ":" ",ee.label),!ft&&!et&&Pe.createElement(Pe.Fragment,null,Pe.createElement(to,{color:"gray"},_t),Pe.createElement(to,{color:Ve(ee),bold:!0},ee.value==="aiProvider"?ee.status:`[ ${ee.status} ]`))),ft&&!Ee&&ee.status!=="None"&&Pe.createElement(Ft,{paddingX:4,marginBottom:1},Pe.createElement(to,{color:"gray"},"\u21B3 ",ee.status)),Ee&&Pe.createElement(Ft,{flexDirection:"column",marginLeft:4,marginBottom:1},Pe.createElement(Ft,{paddingX:1,borderStyle:"single",borderColor:"gray",flexDirection:"row"},Pe.createElement(to,{color:"gray",bold:!0},"> "," "),Pe.createElement(yu,{value:w,onChange:E,onSubmit:Ye=>{let qe={...e,[y]:Ye.trim(),sandboxPreset:"Custom"};t(qe),r({systemSettings:qe,apiTier:o,quotas:i}),T(null)}})),Pe.createElement(to,{color:"gray",italic:!0}," Comma separated \u2022 Press Enter to save, Esc to cancel"))))}),$==="other"&&M.push(Pe.createElement(Ft,{key:"pty-notice",marginTop:18,paddingX:1},Pe.createElement(to,{color:"white"},gs?"\u2713 Advance Interactive Terminal Supported":"\u26A0 Interactive Terminal is Limited"))),he&&M.push(Pe.createElement(Ft,{key:"conflict-warning",marginTop:1,paddingX:1},Pe.createElement(to,{color:"white",italic:!0},"* Conflicting commands will be ignored and defaulted to highest priority"))),M})():Pe.createElement(Ft,{paddingX:1},Pe.createElement(to,{color:"gray",italic:!0},mn[a].desc)))),Pe.createElement(Ft,{paddingX:1,marginTop:0,flexDirection:"row",justifyContent:"space-between"},Pe.createElement(to,{color:"gray",italic:!0},m==="categories"?"\u25B2\u25BC Select Category \u2022 Enter/\u25BA to configure":"\u25B2\u25BC Select Option \u2022 Enter to Toggle \u2022 \u25C4/ESC to go back"),m==="categories"&&Pe.createElement(to,{color:"gray"},mn[a].desc)))}var mn,Ka,ci,Va=ae(async()=>{await js();mn=[{id:"memory",label:"Memory",desc:"Manage system context & agent's memory"},{id:"security",label:"Security",desc:"Configure permissions & data safety"},{id:"updater",label:"Updater",desc:"Manage application updates"},{id:"other",label:"Other",desc:"Miscellaneous preferences"},{id:"exit",label:"Exit Settings",desc:"Return to chat view"}],Ka=e=>{let t=e.autoApproveCommands||"",o=e.autoDisallowCommands||"",n=e.alwaysAskCommands||"",s=e.autoExec===!1&&e.allowExternalAccess===!1&&e.networkAccess===!1&&t===""&&o==="rm -rf, rm -f, del /f, del /q, rd /s, rmdir /s, format, mkfs, dd if=/dev, shred, srm, Remove-Item -Recurse -Force, Initialize-Disk, Clear-Disk, format c:, flashrom, nvram -c"&&n==="killall, pkill, taskkill, shutdown, reboot, init 0, init 6, Stop-Process, Stop-Service, mv /*, move c:\\*, chmod 000, chmod -R 777, chown, icacls, netsh advfirewall, iptables -F, ufw disable, git reset --hard, git clean -fd, npm r, npm uninstall"&&e.autoApproveGit===!1,r=e.autoExec===!0&&e.allowExternalAccess===!1&&e.networkAccess!==!1&&t==="ls, dir, cat, type, echo, pwd, cd, git status, git log, git diff, git branch, git show, help, mkdir, touch, md, whoami, hostname, ps, Get-Process, date, time, mkdir"&&o==="rm -rf, rm -f, del /f, del /q, rd /s, rmdir /s, format, mkfs, dd if=/dev, shred, srm, Remove-Item -Recurse -Force, Initialize-Disk, Clear-Disk, format c:, flashrom, nvram -c"&&n==="killall, pkill, taskkill, Stop-Process, mv /*, move c:\\*, chmod 000, chmod -R 777, chown, icacls, shutdown, reboot, init 0, init 6, git reset --hard, git clean -fd, npm r, npm uninstall"&&e.autoApproveGit===!1,i=e.autoExec===!0&&e.allowExternalAccess===!0&&e.networkAccess!==!1&&t==="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, mkdir"&&o===""&&n==="rm -rf, rm -f, del /f, del /q, rd /s, rmdir /s, format, mkfs, dd if=/dev, shred, srm, Remove-Item -Recurse -Force, Initialize-Disk, Clear-Disk, format c:, flashrom, nvram -c"&&e.autoApproveGit===!0;return s?"Strict":r?"Balanced":i?"Autonomous":e.sandboxPreset||"Custom"},ci=e=>!e||e.trim()===""?"None":e.length>40?e.substring(0,40)+"...":e});import Fo,{useState as di,useEffect as wu}from"react";import{Box as ys,Text as br}from"ink";import Tu from"ink-text-input";function mi({initialData:e,onSave:t,onCancel:o}){let[n,s]=di(0),[r,i]=di(""),[u,f]=di(()=>({name:e?.name||"",nickname:e?.nickname||"",instructions:e?.instructions||""})),m=[{key:"name",label:"Enter your Name: "},{key:"nickname",label:"Enter a Nickname (Agent will use this): "},{key:"instructions",label:"System Instructions (Persona overrides): "}];wu(()=>{let a=m[n].key;i(u[a]||"")},[n,u]);let c=a=>{if(a.trim().toLowerCase()==="/cancel"){o();return}let d=m[n].key,h={...u,[d]:a.trim()};f(h),i(""),n<m.length-1?s(n+1):t(h)};return Fo.createElement(ys,{borderStyle:"round",borderColor:"gray",padding:0,marginTop:1,flexShrink:0,flexDirection:"column",width:"100%"},Fo.createElement(ys,{paddingX:1,marginBottom:1},Fo.createElement(br,{color:"white",bold:!0},"\u{1F464} DEVELOPER PROFILE CONFIGURATION")),Fo.createElement(ys,{paddingX:1,flexDirection:"column"},Fo.createElement(ys,null,Fo.createElement(br,{color:"white",bold:!0},m[n].label),Fo.createElement(Tu,{value:r,onChange:i,onSubmit:c})),Fo.createElement(ys,{marginTop:1},Fo.createElement(br,{color:"gray",italic:!0},"Step ",n+1," of ",m.length))),Fo.createElement(ys,{paddingX:1,marginTop:1},Fo.createElement(br,{color:"gray",italic:!0},"(Enter to submit \u2022 Type /cancel to abort)")))}var qa=ae(()=>{});import mt,{useState as fi}from"react";import{Box as Io,Text as fn,useInput as Su}from"ink";import Eu from"ink-text-input";var bu,za,Ja=ae(()=>{un();bu=({question:e,options:t,onResolve:o})=>{let[n,s]=fi(!1),[r,i]=fi(""),[u,f]=fi(0),m=[...t,{id:"CUSTOM",label:"Suggest something else...",description:"Provide a custom response"}];Su((a,d)=>{if(!n&&((d.leftArrow||d.upArrow)&&f(h=>Math.max(0,h-1)),(d.rightArrow||d.downArrow)&&f(h=>Math.min(m.length-1,h+1)),d.return)){let h=m[u];h.id==="CUSTOM"?s(!0):o(h.label)}});let c=Fe(2);return n?mt.createElement(Io,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},mt.createElement(Io,{paddingX:1},mt.createElement(fn,{color:"white",bold:!0},"\u{1F4AC} SUGGEST SOMETHING ELSE")),mt.createElement(Io,{marginTop:1,paddingX:1},mt.createElement(fn,{italic:!0,color:"gray"},"Replying to: ",e)),mt.createElement(Io,{marginTop:1,paddingX:1,flexDirection:"row"},mt.createElement(fn,{color:"white",bold:!0},"\u{1F4A0} "),mt.createElement(Eu,{value:r,onChange:i,onSubmit:()=>o(r)})),mt.createElement(Io,{marginTop:1,paddingX:1,marginBottom:1},mt.createElement(fn,{color:"gray",italic:!0},"(Press Enter to send)"))):mt.createElement(Io,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},mt.createElement(Io,{paddingX:1,marginBottom:1},mt.createElement(fn,{color:"white",bold:!0},"\u{1F4AC} AGENT REQUEST: ACTION REQUIRED")),mt.createElement(Io,{paddingX:1,marginBottom:1},mt.createElement(fn,{bold:!0,color:"white"},e)),mt.createElement(Io,{flexDirection:"column",width:"100%"},m.map((a,d)=>{let h=d===u;return mt.createElement(Io,{key:a.id,flexDirection:"column",width:"100%",backgroundColor:h?"#2a2a2a":void 0,paddingX:1,marginBottom:d===m.length-1?0:1},mt.createElement(fn,{color:h?"white":"grey",bold:h},h?"\u276F ":" ",a.label),a.description&&mt.createElement(Io,{marginLeft:4},mt.createElement(fn,{color:"gray",italic:!0},a.description)))})),mt.createElement(Io,{paddingX:1,marginTop:1,marginBottom:1},mt.createElement(fn,{color:"gray",italic:!0},"(Use Arrows to navigate, Enter to confirm)")))},za=bu});var Qa,Za=ae(()=>{Qa=(e=!0,t=!0)=>`
128
+ ${E}`)}),m.on("error",h=>{if(i&&r&&h.code==="ENOENT"){let y=Ka(o,!1);return ai(e,y,o,n,s,!1)}Ct=null;let p=h instanceof Error?h.message:String(h);e(`ERROR: Failed to start command [${o}]: ${p}`)})}});import Pe,{useState as Gs}from"react";import{Box as Ft,Text as to,useInput as xu}from"ink";import yu from"ink-text-input";function ui({systemSettings:e,setSystemSettings:t,apiTier:o,setActiveView:n,setInputConfig:s,saveSettings:r,quotas:i,setMessages:u,aiProvider:f}){let[m,c]=Gs("categories"),[a,d]=Gs(0),[h,p]=Gs(0),[y,T]=Gs(null),[w,E]=Gs(""),A=O=>{switch(O){case"memory":return[{label:"Toggle Memory",value:"memory",status:e.memory?"ON":"OFF"}];case"security":return[{label:"Sandbox Preset",value:"sandboxPreset",status:Xa(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:ci(e.alwaysAskCommands),section:"Sandbox"},{label:"Auto Approve Commands",value:"autoApprove",status:ci(e.autoApproveCommands),section:"Sandbox"},{label:"Auto Disapprove Commands",value:"autoDisallow",status:ci(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:f},{label:"API Tier",value:"apiTier",status:o},{label:"Download Language Parsers",value:"parserDownload",status:"ACTION"}];default:return[]}},$=mn[a].id,W=A($);xu((O,M)=>{if(y){M.escape&&T(null);return}if(m==="categories")M.upArrow?d(P=>(P-1+mn.length)%mn.length):M.downArrow?d(P=>(P+1)%mn.length):M.return||M.rightArrow?mn[a].id==="exit"?n("chat"):(c("items"),p(0)):M.escape&&n("chat");else if(m==="items"){if(M.upArrow)p(P=>(P-1+W.length)%W.length);else if(M.downArrow)p(P=>(P+1)%W.length);else if(M.leftArrow||M.escape)c("categories");else if(M.return){let P=W[h];D(P)}}});let D=O=>{if(O.value==="memory")t(M=>({...M,memory:!M.memory}));else if(O.value==="sandboxPreset"){let M=Xa(e),P=["Autonomous","Balanced","Strict"],G=(P.indexOf(M)+1)%P.length,q=P[G];t(Y=>{let N={...Y,sandboxPreset:q};return q==="Strict"?(N.autoExec=!1,N.allowExternalAccess=!1,N.networkAccess=!1,N.autoApproveCommands="",N.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",N.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",N.autoApproveGit=!1):q==="Balanced"?(N.autoExec=!0,N.allowExternalAccess=!1,N.networkAccess=!0,N.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",N.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",N.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",N.autoApproveGit=!1):q==="Autonomous"&&(N.autoExec=!0,N.allowExternalAccess=!0,N.networkAccess=!0,N.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",N.autoDisallowCommands="",N.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",N.autoApproveGit=!0),N})}else if(O.value==="autoExec")e.autoExec?t(M=>({...M,autoExec:!1,sandboxPreset:"Custom"})):e.allowExternalAccess?n("doubleDanger"):n("autoExecDanger");else if(O.value==="externalAccess")e.allowExternalAccess?t(M=>({...M,allowExternalAccess:!1,sandboxPreset:"Custom"})):e.autoExec?n("doubleDanger"):n("externalDanger");else if(O.value==="networkAccess")t(M=>({...M,networkAccess:M.networkAccess===!1,sandboxPreset:"Custom"}));else if(O.value==="alwaysAsk")T("alwaysAskCommands"),E(e.alwaysAskCommands||"");else if(O.value==="autoApprove")T("autoApproveCommands"),E(e.autoApproveCommands||"");else if(O.value==="autoApproveGit")t(M=>({...M,autoApproveGit:!M.autoApproveGit,sandboxPreset:"Custom"}));else if(O.value==="autoDisallow")T("autoDisallowCommands"),E(e.autoDisallowCommands||"");else if(O.value==="apiTier")n("apiTier");else if(O.value==="aiProvider")n("selectProvider");else if(O.value==="autoDelete"){let M=["1d","7d","30d"],j=(M.indexOf(e.autoDeleteHistory||"30d")+1)%M.length;t(G=>({...G,autoDeleteHistory:M[j]}))}else if(O.value==="autoUpdate")t(M=>({...M,autoUpdate:!M.autoUpdate}));else if(O.value==="externalData")if(!e.useExternalData)s({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 M={...e,useExternalData:!1};t(M),r({systemSettings:M,apiTier:o,quotas:i}),u(P=>[...P,{id:Date.now(),role:"system",text:"[STORAGE RESET] Flux Flow will return to default ~/.fluxflow after restart."}]),n("chat")}else O.value==="updateManager"?n("updateManager"):O.value==="parserDownload"&&n("parserDownload")};return Pe.createElement(Ft,{flexDirection:"column",borderStyle:"round",borderColor:"white",padding:0,width:"100%",minHeight:32},Pe.createElement(Ft,{paddingX:1,paddingY:0,marginBottom:0,borderStyle:"single",borderColor:"gray",width:"100%"},Pe.createElement(to,{color:"gray",bold:!0},"SYSTEM CONFIGURATION")),Pe.createElement(Ft,{flexDirection:"row",width:"100%",minHeight:26},Pe.createElement(Ft,{flexDirection:"column",width:"30%",borderStyle:"round",borderColor:m==="categories"?"white":"grey",padding:1,paddingY:0},Pe.createElement(Ft,{marginBottom:1},Pe.createElement(to,{color:m==="categories"?"white":"grey",bold:!0,underline:!0},"CATEGORIES")),mn.map((O,M)=>{let P=a===M,j=O.id==="exit";return Pe.createElement(Ft,{key:O.id,marginTop:j?17:0,backgroundColor:P?m==="categories"?"#2a2a2a":"#1e1e1e":void 0,paddingX:1},Pe.createElement(to,{color:P&&m==="categories"?"white":"grey",bold:P},P?"\u276F ":" ",O.label))})),Pe.createElement(Ft,{flexDirection:"column",width:"70%",borderStyle:"round",borderColor:m==="items"?"white":"grey",paddingX:1,marginLeft:1,paddingY:0},Pe.createElement(Ft,{marginBottom:1},Pe.createElement(to,{color:m==="items"?"white":"grey",bold:!0,underline:!0},mn[a].label.toUpperCase()," SETTINGS")),W.length>0?(()=>{let O=null,M=[],P=ee=>(ee||"").split(",").map(Me=>Me.trim().toLowerCase()).filter(Boolean),j=P(e.autoApproveCommands),G=P(e.autoDisallowCommands),q=P(e.alwaysAskCommands),Y=[...j,...G,...q],N=new Set(Y),he=$==="security"&&Y.length!==N.size;return W.forEach((ee,Me)=>{let le=m==="items"&&h===Me,ue=ee.label.length,Xe=Math.max(2,35-ue),_t=".".repeat(Xe),Ve=Ye=>$==="security"?(Ye.value==="autoExec"||Ye.value==="externalAccess")&&Ye.status==="ON"?"white":"gray":Ye.status?.startsWith("\u2713")?"white":Ye.status?.startsWith("\u26A0")?"gray":Ye.status==="ON"?"white":Ye.status==="OFF"?"gray":"white";ee.section&&ee.section!==O&&(O=ee.section,M.push(Pe.createElement(Ft,{key:`sec-hdr-${ee.section}`,marginTop:M.length>0?1:0,marginBottom:0,paddingX:1},Pe.createElement(to,{color:"gray",bold:!0,underline:!0},ee.section.toUpperCase()))));let Ee=le&&y&&(y==="alwaysAskCommands"&&ee.value==="alwaysAsk"||y==="autoApproveCommands"&&ee.value==="autoApprove"||y==="autoDisallowCommands"&&ee.value==="autoDisallow"),ft=ee.value==="alwaysAsk"||ee.value==="autoApprove"||ee.value==="autoDisallow",et=ee.value==="parserDownload";M.push(Pe.createElement(Ft,{key:ee.value,flexDirection:"column"},Pe.createElement(Ft,{backgroundColor:le&&!Ee?"#2a2a2a":void 0,paddingX:2},Pe.createElement(to,{color:le?"white":"grey",bold:le,underline:et},le?"\u276F ":" ",ee.label),!ft&&!et&&Pe.createElement(Pe.Fragment,null,Pe.createElement(to,{color:"gray"},_t),Pe.createElement(to,{color:Ve(ee),bold:!0},ee.value==="aiProvider"?ee.status:`[ ${ee.status} ]`))),ft&&!Ee&&ee.status!=="None"&&Pe.createElement(Ft,{paddingX:4,marginBottom:1},Pe.createElement(to,{color:"gray"},"\u21B3 ",ee.status)),Ee&&Pe.createElement(Ft,{flexDirection:"column",marginLeft:4,marginBottom:1},Pe.createElement(Ft,{paddingX:1,borderStyle:"single",borderColor:"gray",flexDirection:"row"},Pe.createElement(to,{color:"gray",bold:!0},"> "," "),Pe.createElement(yu,{value:w,onChange:E,onSubmit:Ye=>{let qe={...e,[y]:Ye.trim(),sandboxPreset:"Custom"};t(qe),r({systemSettings:qe,apiTier:o,quotas:i}),T(null)}})),Pe.createElement(to,{color:"gray",italic:!0}," Comma separated \u2022 Press Enter to save, Esc to cancel"))))}),$==="other"&&M.push(Pe.createElement(Ft,{key:"pty-notice",marginTop:18,paddingX:1},Pe.createElement(to,{color:"white"},gs?"\u2713 Advance Interactive Terminal Supported":"\u26A0 Interactive Terminal is Limited"))),he&&M.push(Pe.createElement(Ft,{key:"conflict-warning",marginTop:1,paddingX:1},Pe.createElement(to,{color:"white",italic:!0},"* Conflicting commands will be ignored and defaulted to highest priority"))),M})():Pe.createElement(Ft,{paddingX:1},Pe.createElement(to,{color:"gray",italic:!0},mn[a].desc)))),Pe.createElement(Ft,{paddingX:1,marginTop:0,flexDirection:"row",justifyContent:"space-between"},Pe.createElement(to,{color:"gray",italic:!0},m==="categories"?"\u25B2\u25BC Select Category \u2022 Enter/\u25BA to configure":"\u25B2\u25BC Select Option \u2022 Enter to Toggle \u2022 \u25C4/ESC to go back"),m==="categories"&&Pe.createElement(to,{color:"gray"},mn[a].desc)))}var mn,Xa,ci,Va=ae(async()=>{await js();mn=[{id:"memory",label:"Memory",desc:"Manage system context & agent's memory"},{id:"security",label:"Security",desc:"Configure permissions & data safety"},{id:"updater",label:"Updater",desc:"Manage application updates"},{id:"other",label:"Other",desc:"Miscellaneous preferences"},{id:"exit",label:"Exit Settings",desc:"Return to chat view"}],Xa=e=>{let t=e.autoApproveCommands||"",o=e.autoDisallowCommands||"",n=e.alwaysAskCommands||"",s=e.autoExec===!1&&e.allowExternalAccess===!1&&e.networkAccess===!1&&t===""&&o==="rm -rf, rm -f, del /f, del /q, rd /s, rmdir /s, format, mkfs, dd if=/dev, shred, srm, Remove-Item -Recurse -Force, Initialize-Disk, Clear-Disk, format c:, flashrom, nvram -c"&&n==="killall, pkill, taskkill, shutdown, reboot, init 0, init 6, Stop-Process, Stop-Service, mv /*, move c:\\*, chmod 000, chmod -R 777, chown, icacls, netsh advfirewall, iptables -F, ufw disable, git reset --hard, git clean -fd, npm r, npm uninstall"&&e.autoApproveGit===!1,r=e.autoExec===!0&&e.allowExternalAccess===!1&&e.networkAccess!==!1&&t==="ls, dir, cat, type, echo, pwd, cd, git status, git log, git diff, git branch, git show, help, mkdir, touch, md, whoami, hostname, ps, Get-Process, date, time, mkdir"&&o==="rm -rf, rm -f, del /f, del /q, rd /s, rmdir /s, format, mkfs, dd if=/dev, shred, srm, Remove-Item -Recurse -Force, Initialize-Disk, Clear-Disk, format c:, flashrom, nvram -c"&&n==="killall, pkill, taskkill, Stop-Process, mv /*, move c:\\*, chmod 000, chmod -R 777, chown, icacls, shutdown, reboot, init 0, init 6, git reset --hard, git clean -fd, npm r, npm uninstall"&&e.autoApproveGit===!1,i=e.autoExec===!0&&e.allowExternalAccess===!0&&e.networkAccess!==!1&&t==="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, mkdir"&&o===""&&n==="rm -rf, rm -f, del /f, del /q, rd /s, rmdir /s, format, mkfs, dd if=/dev, shred, srm, Remove-Item -Recurse -Force, Initialize-Disk, Clear-Disk, format c:, flashrom, nvram -c"&&e.autoApproveGit===!0;return s?"Strict":r?"Balanced":i?"Autonomous":e.sandboxPreset||"Custom"},ci=e=>!e||e.trim()===""?"None":e.length>40?e.substring(0,40)+"...":e});import Fo,{useState as di,useEffect as wu}from"react";import{Box as ys,Text as br}from"ink";import Tu from"ink-text-input";function mi({initialData:e,onSave:t,onCancel:o}){let[n,s]=di(0),[r,i]=di(""),[u,f]=di(()=>({name:e?.name||"",nickname:e?.nickname||"",instructions:e?.instructions||""})),m=[{key:"name",label:"Enter your Name: "},{key:"nickname",label:"Enter a Nickname (Agent will use this): "},{key:"instructions",label:"System Instructions (Persona overrides): "}];wu(()=>{let a=m[n].key;i(u[a]||"")},[n,u]);let c=a=>{if(a.trim().toLowerCase()==="/cancel"){o();return}let d=m[n].key,h={...u,[d]:a.trim()};f(h),i(""),n<m.length-1?s(n+1):t(h)};return Fo.createElement(ys,{borderStyle:"round",borderColor:"gray",padding:0,marginTop:1,flexShrink:0,flexDirection:"column",width:"100%"},Fo.createElement(ys,{paddingX:1,marginBottom:1},Fo.createElement(br,{color:"white",bold:!0},"\u{1F464} DEVELOPER PROFILE CONFIGURATION")),Fo.createElement(ys,{paddingX:1,flexDirection:"column"},Fo.createElement(ys,null,Fo.createElement(br,{color:"white",bold:!0},m[n].label),Fo.createElement(Tu,{value:r,onChange:i,onSubmit:c})),Fo.createElement(ys,{marginTop:1},Fo.createElement(br,{color:"gray",italic:!0},"Step ",n+1," of ",m.length))),Fo.createElement(ys,{paddingX:1,marginTop:1},Fo.createElement(br,{color:"gray",italic:!0},"(Enter to submit \u2022 Type /cancel to abort)")))}var qa=ae(()=>{});import mt,{useState as fi}from"react";import{Box as Io,Text as fn,useInput as Su}from"ink";import Eu from"ink-text-input";var bu,za,Ja=ae(()=>{un();bu=({question:e,options:t,onResolve:o})=>{let[n,s]=fi(!1),[r,i]=fi(""),[u,f]=fi(0),m=[...t,{id:"CUSTOM",label:"Suggest something else...",description:"Provide a custom response"}];Su((a,d)=>{if(!n&&((d.leftArrow||d.upArrow)&&f(h=>Math.max(0,h-1)),(d.rightArrow||d.downArrow)&&f(h=>Math.min(m.length-1,h+1)),d.return)){let h=m[u];h.id==="CUSTOM"?s(!0):o(h.label)}});let c=Fe(2);return n?mt.createElement(Io,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},mt.createElement(Io,{paddingX:1},mt.createElement(fn,{color:"white",bold:!0},"\u{1F4AC} SUGGEST SOMETHING ELSE")),mt.createElement(Io,{marginTop:1,paddingX:1},mt.createElement(fn,{italic:!0,color:"gray"},"Replying to: ",e)),mt.createElement(Io,{marginTop:1,paddingX:1,flexDirection:"row"},mt.createElement(fn,{color:"white",bold:!0},"\u{1F4A0} "),mt.createElement(Eu,{value:r,onChange:i,onSubmit:()=>o(r)})),mt.createElement(Io,{marginTop:1,paddingX:1,marginBottom:1},mt.createElement(fn,{color:"gray",italic:!0},"(Press Enter to send)"))):mt.createElement(Io,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},mt.createElement(Io,{paddingX:1,marginBottom:1},mt.createElement(fn,{color:"white",bold:!0},"\u{1F4AC} AGENT REQUEST: ACTION REQUIRED")),mt.createElement(Io,{paddingX:1,marginBottom:1},mt.createElement(fn,{bold:!0,color:"white"},e)),mt.createElement(Io,{flexDirection:"column",width:"100%"},m.map((a,d)=>{let h=d===u;return mt.createElement(Io,{key:a.id,flexDirection:"column",width:"100%",backgroundColor:h?"#2a2a2a":void 0,paddingX:1,marginBottom:d===m.length-1?0:1},mt.createElement(fn,{color:h?"white":"grey",bold:h},h?"\u276F ":" ",a.label),a.description&&mt.createElement(Io,{marginLeft:4},mt.createElement(fn,{color:"gray",italic:!0},a.description)))})),mt.createElement(Io,{paddingX:1,marginTop:1,marginBottom:1},mt.createElement(fn,{color:"gray",italic:!0},"(Use Arrows to navigate, Enter to confirm)")))},za=bu});var Qa,Za=ae(()=>{Qa=(e=!0,t=!0)=>`
128
129
  Your tool syntax is: '[tool:functions.ToolName(args...)]'
129
130
 
130
131
  -- CHAT MANAGEMENT TOOLS (MUST CALL THESE 2 TOOLS ALWAYS) --
@@ -273,12 +274,12 @@ ${t?"If user tell something that is important (like, hobbies, preferences, facts
273
274
  ${Qa(t,o)}
274
275
 
275
276
  Current date and Time: ${new Date().toLocaleString([],{year:"numeric",month:"numeric",day:"numeric",hour:"2-digit",hour12:!0})}.
276
- === END SYSTEM PROMPT ===`.trim()});import Kt from"fs-extra";import hn from"path";async function Iu(e,t){try{if(e.type==="create")await Kt.pathExists(e.filePath)&&(await Kt.chmod(e.filePath,438).catch(()=>{}),await Kt.remove(e.filePath));else if(e.type==="update"){if(!e.backupFile)return;let o=hn.join(kn,t.chatId,e.backupFile);if(await Kt.pathExists(o)){let n=fe(o,null);if(!n||!n.data)throw new Error(`Backup container corrupt or empty for ${hn.basename(e.filePath)}`);let s=An(n.data);await Kt.pathExists(e.filePath)&&await Kt.chmod(e.filePath,438).catch(()=>{}),await Kt.writeFile(e.filePath,s,"utf8")}}}catch(o){throw new Error(`Restoration failed for ${hn.basename(e.filePath)}: ${o.message}`)}}async function Mu(e,t,o=7){let n=0;for(;n<o;)try{return await Iu(e,t),!0}catch{if(n++,n>=o)return!1;let r=Math.min(100*Math.pow(2,n-1),5e3);await new Promise(i=>setTimeout(i,r))}return!1}var $o,yt,pn=ae(()=>{Pt();Oo();Kt.ensureDirSync(kn);$o=null;yt={async startTransaction(e,t){$o={id:`tx_prompt_${Date.now()}`,chatId:e,timestamp:new Date().toISOString(),prompt:t.trim(),changes:[],reverted:!1},De(In,$o)},async recordFileChange(e,t=null){if($o)try{if($o.changes.some(i=>i.filePath===e))return;let s=await Kt.pathExists(e)||t?"update":"create",r=null;if(s==="update"){let i=hn.basename(e);r=`${$o.id}_${i}.bak`;let u=hn.join(kn,$o.chatId);await Kt.ensureDir(u);let f=hn.join(u,r),m=t!==null?t:await Kt.readFile(e,"utf8").catch(()=>null);m!==null?De(f,{data:_s(m)}):(s="create",r=null)}$o.changes.push({filePath:e,type:s,backupFile:r}),De(In,$o)}catch{}},async commitTransaction(){if($o)try{let e=fe(Do,[]);if(e.push($o),e.length>512e3){let t=e.shift();if(t.changes)for(let o of t.changes)o.backupFile&&await Kt.remove(hn.join(kn,t.chatId,o.backupFile)).catch(()=>{})}De(Do,e),await Kt.remove(In).catch(()=>{})}catch{}finally{$o=null}},async recoverCrashedTransaction(){try{if(await Kt.pathExists(In)){let e=fe(In,null);if(e?.changes?.length>0){let t=fe(Do,[]);t.some(o=>o.id===e.id)||(t.push(e),De(Do,t))}await Kt.remove(In).catch(()=>{})}}catch{}},async rollbackToBefore(e){let t=fe(Do,null);if(!t)throw new Error("No transaction ledger found.");let o=t.findIndex(i=>i.id===e);if(o===-1)throw new Error(`Transaction [${e}] not found.`);let n=t[o].chatId,s=t[o].prompt,r=t.slice(o).filter(i=>i.chatId===n&&!i.reverted).reverse();for(let i of r){for(let u of[...i.changes].reverse())await Mu(u,i);for(let u of i.changes)if(u.backupFile){let f=hn.join(kn,i.chatId,u.backupFile);await Kt.remove(f).catch(()=>{})}t=t.filter(u=>u.id!==i.id),De(Do,t)}return{success:!0,chatId:n,targetPrompt:s}},async getChatHistory(e){try{return fe(Do,[]).filter(o=>o.chatId===e&&!o.reverted)}catch{return[]}},async deleteChatBackups(e){try{await Kt.remove(hn.join(kn,e));let t=fe(Do,[]),o=t.filter(n=>n.chatId!==e);t.length!==o.length&&De(Do,o)}catch{}}}});import Mo from"fs-extra";import Au from"path";import{nanoid as vu}from"nanoid";var rl,Cr,_o,kr,il,gi,xi,al,Du,Ou,ll,cl,ul,Ir,Xs=ae(()=>{Oo();Pt();pn();rl=Promise.resolve(),Cr=e=>{let t=rl.then(async()=>{try{return await e()}catch(o){throw console.error("Lock Operation Failed:",o),o}});return rl=t.catch(()=>{}),t},_o=async()=>{if(await Mo.pathExists(ts))try{return fe(ts,{})}catch{return{}}return{}},kr=async(e,t,o)=>Cr(async()=>{let n=await _o(),s=n[e],r=(o||[]).filter(u=>!u.isUpdateNotification&&!u.isMeta),i=t||(s?s.name:`Session ${e.slice(-6)}`);n[e]={name:i,messages:r,updatedAt:Date.now()},De(ts,n)}),il=async(e,t)=>Cr(async()=>{let o=await _o();o[e]?(o[e].name=t,o[e].updatedAt=Date.now()):o[e]={name:t,messages:[],updatedAt:Date.now()},De(ts,o)}),gi=async e=>Cr(async()=>{let t=await _o();if(delete t[e],De(ts,t),await Mo.pathExists(ln))try{let s=fe(ln,[]);if(Array.isArray(s)){let r=s.filter(i=>Object.keys(i)[0]!==String(e));De(ln,r)}}catch{}let o=fe(So,{});o[e]&&(delete o[e],De(So,o));let n=fe(Vo,{});return n[e]&&(delete n[e],De(Vo,n)),await yt.deleteChatBackups(e),t}),xi=()=>`flow-${vu(6)}`,al=async e=>{if(!e||e==="Never")return;let t=parseInt(e);if(isNaN(t))return;let o=await _o(),n=Date.now(),s=t*24*60*60*1e3,r=0;for(let i in o){let u=o[i];u.updatedAt&&n-u.updatedAt>s&&(await gi(i),r++)}return r},Du=e=>{let t=e.replace(/[\[\]]/g,"").trim(),o=new Date(t);if(!isNaN(o.getTime()))return o.getTime();let n=t.split(/,\s*|\s+/);if(n.length===0)return null;let s=n[0],r=n[1]||"",i=n[2]||"",u=s.split(/[-/.]/).map(Number);if(u.length!==3)return null;let f,m,c;if(u[0]>1e3)f=u[0],m=u[1],c=u[2];else if(u[2]>1e3)f=u[2],u[0]>12?(c=u[0],m=u[1]):u[1]>12?(c=u[1],m=u[0]):(m=u[0],c=u[1]);else return null;let a=0,d=0,h=0;if(r){let y=r.split(":").map(Number);a=y[0]||0,d=y[1]||0,h=y[2]||0,i.toLowerCase()==="pm"&&a<12?a+=12:i.toLowerCase()==="am"&&a===12&&(a=0)}let p=new Date(f,m-1,c,a,d,h);return isNaN(p.getTime())?null:p.getTime()},Ou=async e=>{try{if(!await Mo.pathExists(e))return;let t=await Mo.readFile(e,"utf8");if(!t.trim())return;let o=t.split(`
277
+ === END SYSTEM PROMPT ===`.trim()});import Xt from"fs-extra";import hn from"path";async function Iu(e,t){try{if(e.type==="create")await Xt.pathExists(e.filePath)&&(await Xt.chmod(e.filePath,438).catch(()=>{}),await Xt.remove(e.filePath));else if(e.type==="update"){if(!e.backupFile)return;let o=hn.join(kn,t.chatId,e.backupFile);if(await Xt.pathExists(o)){let n=fe(o,null);if(!n||!n.data)throw new Error(`Backup container corrupt or empty for ${hn.basename(e.filePath)}`);let s=An(n.data);await Xt.pathExists(e.filePath)&&await Xt.chmod(e.filePath,438).catch(()=>{}),await Xt.writeFile(e.filePath,s,"utf8")}}}catch(o){throw new Error(`Restoration failed for ${hn.basename(e.filePath)}: ${o.message}`)}}async function Mu(e,t,o=7){let n=0;for(;n<o;)try{return await Iu(e,t),!0}catch{if(n++,n>=o)return!1;let r=Math.min(100*Math.pow(2,n-1),5e3);await new Promise(i=>setTimeout(i,r))}return!1}var $o,yt,pn=ae(()=>{Pt();Oo();Xt.ensureDirSync(kn);$o=null;yt={async startTransaction(e,t){$o={id:`tx_prompt_${Date.now()}`,chatId:e,timestamp:new Date().toISOString(),prompt:t.trim(),changes:[],reverted:!1},De(In,$o)},async recordFileChange(e,t=null){if($o)try{if($o.changes.some(i=>i.filePath===e))return;let s=await Xt.pathExists(e)||t?"update":"create",r=null;if(s==="update"){let i=hn.basename(e);r=`${$o.id}_${i}.bak`;let u=hn.join(kn,$o.chatId);await Xt.ensureDir(u);let f=hn.join(u,r),m=t!==null?t:await Xt.readFile(e,"utf8").catch(()=>null);m!==null?De(f,{data:_s(m)}):(s="create",r=null)}$o.changes.push({filePath:e,type:s,backupFile:r}),De(In,$o)}catch{}},async commitTransaction(){if($o)try{let e=fe(Do,[]);if(e.push($o),e.length>512e3){let t=e.shift();if(t.changes)for(let o of t.changes)o.backupFile&&await Xt.remove(hn.join(kn,t.chatId,o.backupFile)).catch(()=>{})}De(Do,e),await Xt.remove(In).catch(()=>{})}catch{}finally{$o=null}},async recoverCrashedTransaction(){try{if(await Xt.pathExists(In)){let e=fe(In,null);if(e?.changes?.length>0){let t=fe(Do,[]);t.some(o=>o.id===e.id)||(t.push(e),De(Do,t))}await Xt.remove(In).catch(()=>{})}}catch{}},async rollbackToBefore(e){let t=fe(Do,null);if(!t)throw new Error("No transaction ledger found.");let o=t.findIndex(i=>i.id===e);if(o===-1)throw new Error(`Transaction [${e}] not found.`);let n=t[o].chatId,s=t[o].prompt,r=t.slice(o).filter(i=>i.chatId===n&&!i.reverted).reverse();for(let i of r){for(let u of[...i.changes].reverse())await Mu(u,i);for(let u of i.changes)if(u.backupFile){let f=hn.join(kn,i.chatId,u.backupFile);await Xt.remove(f).catch(()=>{})}t=t.filter(u=>u.id!==i.id),De(Do,t)}return{success:!0,chatId:n,targetPrompt:s}},async getChatHistory(e){try{return fe(Do,[]).filter(o=>o.chatId===e&&!o.reverted)}catch{return[]}},async deleteChatBackups(e){try{await Xt.remove(hn.join(kn,e));let t=fe(Do,[]),o=t.filter(n=>n.chatId!==e);t.length!==o.length&&De(Do,o)}catch{}}}});import Mo from"fs-extra";import Au from"path";import{nanoid as vu}from"nanoid";var rl,Cr,_o,kr,il,gi,xi,al,Du,Ou,ll,cl,ul,Ir,Ks=ae(()=>{Oo();Pt();pn();rl=Promise.resolve(),Cr=e=>{let t=rl.then(async()=>{try{return await e()}catch(o){throw console.error("Lock Operation Failed:",o),o}});return rl=t.catch(()=>{}),t},_o=async()=>{if(await Mo.pathExists(ts))try{return fe(ts,{})}catch{return{}}return{}},kr=async(e,t,o)=>Cr(async()=>{let n=await _o(),s=n[e],r=(o||[]).filter(u=>!u.isUpdateNotification&&!u.isMeta),i=t||(s?s.name:`Session ${e.slice(-6)}`);n[e]={name:i,messages:r,updatedAt:Date.now()},De(ts,n)}),il=async(e,t)=>Cr(async()=>{let o=await _o();o[e]?(o[e].name=t,o[e].updatedAt=Date.now()):o[e]={name:t,messages:[],updatedAt:Date.now()},De(ts,o)}),gi=async e=>Cr(async()=>{let t=await _o();if(delete t[e],De(ts,t),await Mo.pathExists(ln))try{let s=fe(ln,[]);if(Array.isArray(s)){let r=s.filter(i=>Object.keys(i)[0]!==String(e));De(ln,r)}}catch{}let o=fe(So,{});o[e]&&(delete o[e],De(So,o));let n=fe(Vo,{});return n[e]&&(delete n[e],De(Vo,n)),await yt.deleteChatBackups(e),t}),xi=()=>`flow-${vu(6)}`,al=async e=>{if(!e||e==="Never")return;let t=parseInt(e);if(isNaN(t))return;let o=await _o(),n=Date.now(),s=t*24*60*60*1e3,r=0;for(let i in o){let u=o[i];u.updatedAt&&n-u.updatedAt>s&&(await gi(i),r++)}return r},Du=e=>{let t=e.replace(/[\[\]]/g,"").trim(),o=new Date(t);if(!isNaN(o.getTime()))return o.getTime();let n=t.split(/,\s*|\s+/);if(n.length===0)return null;let s=n[0],r=n[1]||"",i=n[2]||"",u=s.split(/[-/.]/).map(Number);if(u.length!==3)return null;let f,m,c;if(u[0]>1e3)f=u[0],m=u[1],c=u[2];else if(u[2]>1e3)f=u[2],u[0]>12?(c=u[0],m=u[1]):u[1]>12?(c=u[1],m=u[0]):(m=u[0],c=u[1]);else return null;let a=0,d=0,h=0;if(r){let y=r.split(":").map(Number);a=y[0]||0,d=y[1]||0,h=y[2]||0,i.toLowerCase()==="pm"&&a<12?a+=12:i.toLowerCase()==="am"&&a===12&&(a=0)}let p=new Date(f,m-1,c,a,d,h);return isNaN(p.getTime())?null:p.getTime()},Ou=async e=>{try{if(!await Mo.pathExists(e))return;let t=await Mo.readFile(e,"utf8");if(!t.trim())return;let o=t.split(`
277
278
  `),n=[],s=null,r=/^\s*(?:DEBUG|ERROR|SEARCH|PUPPETEER)\b/i;for(let a of o)r.test(a)?(s&&n.push(s),s={header:a,body:[]}):s?s.body.push(a):n.push({header:a,body:[]});s&&n.push(s);let i=10080*60*1e3,u=Date.now(),f=[],m=/(\d{1,4}[-/.]\d{1,4}[-/.]\d{1,4}(?:,\s*|\s+)?(?:\d{1,2}:\d{2}:\d{2}(?:\s*[aApP][mM])?)?)/;for(let a of n){let d=a.header+(a.body.length>0?`
278
279
  `+a.body.join(`
279
280
  `):""),h=d.match(m);if(h){let p=Du(h[1]);if(p&&u-p>i)continue}f.push(d)}let c=f.join(`
280
281
  `).trim();c?await Mo.writeFile(e,c+`
281
- `,"utf8"):await Mo.writeFile(e,"","utf8")}catch{}},ll=async e=>{try{if(!await Mo.pathExists(e))return;let t=async o=>{let n=await Mo.readdir(o);for(let s of n){let r=Au.join(o,s);(await Mo.stat(r)).isDirectory()?(await t(r),(await Mo.readdir(r)).length===0&&await Mo.remove(r)):s.endsWith(".log")&&await Ou(r)}};await t(e)}catch{}},cl=(e,t=4)=>{if(e.length<=1)return e;let o=e[0],n=e.slice(1),s=t*2,r=n.slice(s);return[o,...r]},ul=async(e,t,o)=>Cr(async()=>{let n=fe(ln,[]);Array.isArray(n)||(n=[]);let s={total:t,context:o},r=n.findIndex(i=>Object.keys(i)[0]===String(e));r!==-1?n[r]={[String(e)]:s}:n.push({[String(e)]:s}),De(ln,n)}),Ir=async e=>{try{if(!await Mo.pathExists(ln))return{total:0,context:0};let t=fe(ln,[]);if(!Array.isArray(t))return{total:0,context:0};let o=t.find(n=>Object.keys(n)[0]===String(e));return o?o[String(e)]:{total:0,context:0}}catch{return{total:0,context:0}}}});import nt from"fs-extra";import zo from"path";import yi from"os";var Lu,gn,Pu,wt,Fn,dl,Mr,wi,ml,Ti,Si,fl,hl,$n,Jo,Eo,Ei,bi,pl,gl,Ar,xl,vr=ae(()=>{Pt();Oo();Lu=()=>{if(process.platform==="win32"){let t=process.env.LOCALAPPDATA||zo.join(yi.homedir(),"AppData","Local");return zo.join(t,"FxFl","backups","backup.json")}if(process.platform==="darwin")return zo.join(yi.homedir(),"Library","Application Support","FxFl","backups","backup.json");let e=process.env.XDG_DATA_HOME||zo.join(yi.homedir(),".local","share");return zo.join(e,"fxfl","backups","backup.json")},gn=Lu(),Pu=()=>Math.random().toString(36).substring(2)+Date.now().toString(36),wt=null,Fn=null,dl=0,Mr=!1,wi={agent:0,background:0,search:0,toolSuccess:0,toolFailure:0,toolDenied:0,duration:0,tokens:0,cachedTokens:0,candidateTokens:0,linesAdded:0,linesRemoved:0,imageCalls:[]},ml=async()=>{let e=new Date().toISOString().split("T")[0],t=Zt+".tmp",o=null,n=null;try{if(await nt.exists(t)){let r=(await nt.readFile(t,"utf8")).trim(),i=null;if(r.startsWith("{")||r.startsWith("[")?i=JSON.parse(r):i=JSON.parse(An(r)),i&&i.date&&i.stats){o=i;try{await nt.rename(t,Zt)}catch{}}else try{await nt.remove(t)}catch{}}}catch{try{await nt.remove(t)}catch{}}if(!o)try{if(await nt.exists(Zt)){let r=(await nt.readFile(Zt,"utf8")).trim();r.startsWith("{")||r.startsWith("[")?o=JSON.parse(r):o=JSON.parse(An(r))}}catch{}try{if(await nt.exists(gn)){let r=(await nt.readFile(gn,"utf8")).trim();r.startsWith("{")||r.startsWith("[")?n=JSON.parse(r):n=JSON.parse(An(r))}}catch{}let s=null;if(o&&n)if(o.saveId!==n.saveId){s=o;try{await nt.ensureDir(zo.dirname(gn)),await nt.copy(Zt,gn)}catch{}}else s=o;else if(o&&!n){s=o;try{await nt.ensureDir(zo.dirname(gn)),await nt.copy(Zt,gn)}catch{}}else if(!o&&n){s=n;try{await nt.ensureDir(zo.dirname(Zt)),await nt.copy(gn,Zt)}catch{}}if(s&&s.date===e&&s.stats){let r={...wi,...s.stats};return Array.isArray(r.imageCalls)||(r.imageCalls=[]),{...s,stats:r}}return{date:e,stats:{...wi}}},Ti=async()=>{if(!(!Mr||!wt))try{await nt.ensureDir(zo.dirname(Zt));let e=null;try{if(await nt.exists(Zt)){let s=(await nt.readFile(Zt,"utf8")).trim();s.startsWith("{")||s.startsWith("[")?e=JSON.parse(s):e=JSON.parse(An(s))}}catch{}if(e&&e.date===wt.date&&e.stats){for(let s in wt.stats)if(e.stats[s]!==void 0)if(Array.isArray(wt.stats[s])){let r=Array.isArray(e.stats[s])?e.stats[s]:[],i=wt.stats[s],u=new Map;for(let f of[...r,...i])f&&f.timestamp&&u.set(f.timestamp,f);wt.stats[s]=Array.from(u.values())}else typeof wt.stats[s]=="number"&&(wt.stats[s]=Math.max(wt.stats[s],Number(e.stats[s])||0))}wt.saveId=Pu();let t=Zt+".tmp",o=_s(JSON.stringify(wt,null,2));await nt.writeFile(t,o,"utf8");let n=await nt.open(t,"r+");await nt.fsync(n),await nt.close(n),await nt.rename(t,Zt);try{await nt.ensureDir(zo.dirname(gn)),await nt.copy(Zt,gn)}catch{}Mr=!1,dl=Date.now()}catch{}},Si=()=>{if(Mr=!0,Fn)return;let e=Date.now(),t=Math.max(0,1500-(e-dl));Fn=setTimeout(async()=>{await Ti(),Fn=null},t),Fn.unref&&Fn.unref()},fl=async()=>{wt=await ml()},hl=async()=>{Fn&&(clearTimeout(Fn),Fn=null),await Ti()},$n=async()=>{let e=new Date().toISOString().split("T")[0];return wt?wt.date!==e&&(wt={date:e,stats:{...wi}},Mr=!0,await Ti()):wt=await ml(),wt&&wt.stats&&!Array.isArray(wt.stats.imageCalls)&&(wt.stats.imageCalls=[]),wt.stats},Jo=async e=>{let t=await $n();t[e]!==void 0&&(t[e]++,Si())},Eo=async(e,t)=>{let o=await $n();o[e]!==void 0&&(o[e]+=Math.floor(t),Si())},Ei=async(e,t)=>{let o=await $n(),n=t.apiTier||"Free",s=t.quotas||{};if(n==="Free"){if(e==="agent"||e==="background")return o.agent+o.background<999999;if(e==="search")return!0}if(n==="Paid"||n==="Custom"){if(e==="agent")return o.agent<(s.agentLimit||999999);if(e==="background")return o.background<(s.backgroundLimit||999999);if(e==="search")return o.search<(s.searchLimit||100)}return!0},bi=e=>{if(!e||e.length===0)return[];let o=[...e].sort((s,r)=>s.timestamp-r.timestamp),n=[];for(let s of o){if(n.length>0){let r=n[n.length-1];if(s.timestamp>=r.start&&s.timestamp<r.end){r.calls.push(s),r.spent+=s.cost;continue}}n.push({start:s.timestamp,end:s.timestamp+36e5,calls:[s],spent:s.cost})}return n},pl=(e,t)=>{if(!e||e.length===0)return .025;let n=bi(e);if(n.length===0)return .025;let s=[];for(let a of n){let d=.025;if(s.length>0){let p=s[s.length-1],y=!1;if(s.length>=2){let T=s[s.length-2];p.ratio>=.8&&T.ratio>=.8&&(y=!0)}if(y)d=.015;else{let T=p.limit,w=p.ratio;w>=.8?d=T===.015?.015:T:w<.4?d=Math.min(.025,T+.005):w>=.4&&w<.6?d=Math.min(.025,T+.004):d=Math.min(.025,T+.002)}}let h=d>0?a.spent/d:0;s.push({limit:d,spent:a.spent,ratio:h})}let r=n[n.length-1];if(t<r.end)return s[s.length-1].limit;let i=s[s.length-1].limit,u=i,f=s[s.length-1].ratio,m=r.end,c=0;for(let a=s.length-1;a>=0&&s[a].ratio>=.8;a--)c++;for(;m<=t;){let a=.025;c>=2?a=.015:f>=.8?a=u===.015?.015:u:f<.4?a=Math.min(.025,u+.005):f>=.4&&f<.6?a=Math.min(.025,u+.004):a=Math.min(.025,u+.002),u=a,f=0,c=0,m+=36e5,i=a}return i},gl=async e=>{let t=e.imageSettings||{keyType:"Default",quality:"Low-High"};if(t.keyType!=="Default")return!0;let n={Low:.001,"Low-High":.002,Medium:.008,"Medium-High":.01,High:.045,Ultra:.0488,Premium:.15}[t.quality]||.002,s=await $n();s.imageCalls||(s.imageCalls=[]);let r=Date.now(),i=bi(s.imageCalls),u=0;if(i.length>0){let m=i[i.length-1];r>=m.start&&r<m.end&&(u=m.spent)}let f=pl(s.imageCalls,r);return u+n<=f},Ar=async()=>{let e=await $n();e.imageCalls||(e.imageCalls=[]);let t=Date.now(),o=bi(e.imageCalls),n=[],s=0,r=0;if(o.length>0){let m=o[o.length-1];t>=m.start&&t<m.end&&(n=m.calls,s=m.spent,r=Math.max(0,Math.ceil((m.end-t)/(60*1e3))))}let i=pl(e.imageCalls,t),u=Math.max(0,i-s),f=s;return{totalSpent:s,remaining:u,activeCallsCount:n.length,nextResetMin:r,reclaimCost:f,limit:i}},xl=async e=>{let t=e.imageSettings||{keyType:"Default",quality:"Low-High"},n={Low:.001,"Low-High":.002,Medium:.008,"Medium-High":.01,High:.045,Ultra:.0488,Premium:.1}[t.quality]||.002,s=await $n();s.imageCalls||(s.imageCalls=[]),s.imageCalls.push({timestamp:Date.now(),cost:n}),Si()}});import Fu from"puppeteer";var Ci,yl=ae(()=>{Xt();Pt();Ci=async e=>{let{query:t,limit:o=10}=se(e);if(!t)return'ERROR: Missing "query" argument for web_search.';let n=3,s=null;for(let r=1;r<=n;r++){let i=null;try{i=await Fu.launch({headless:!0,args:["--no-sandbox","--disable-setuid-sandbox","--disable-gpu","--disable-dev-shm-usage"]});let u=await i.newPage();await u.setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.7778.97 Safari/537.36"),await u.setViewport({width:1366,height:768});let f=r===1?Math.random()*1e3+500:Math.random()*2e3+1e3;await new Promise(d=>setTimeout(d,f));let m=`https://html.duckduckgo.com/html/?q=${encodeURIComponent(t)}`;await u.goto(m,{waitUntil:"networkidle2",timeout:18e4});let c=await u.$$eval(".result",(d,h)=>d.slice(0,h).map((p,y)=>{let T=p.querySelector(".result__a"),w=p.querySelector(".result__snippet"),E=T?T.href:"";E.includes("uddg=")&&(E=decodeURIComponent(E.split("uddg=")[1].split("&")[0]));let A=T?T.innerText.trim():"No Title",$=w?w.innerText.trim():"No Snippet";return`${y+1}. ${A}
282
+ `,"utf8"):await Mo.writeFile(e,"","utf8")}catch{}},ll=async e=>{try{if(!await Mo.pathExists(e))return;let t=async o=>{let n=await Mo.readdir(o);for(let s of n){let r=Au.join(o,s);(await Mo.stat(r)).isDirectory()?(await t(r),(await Mo.readdir(r)).length===0&&await Mo.remove(r)):s.endsWith(".log")&&await Ou(r)}};await t(e)}catch{}},cl=(e,t=4)=>{if(e.length<=1)return e;let o=e[0],n=e.slice(1),s=t*2,r=n.slice(s);return[o,...r]},ul=async(e,t,o)=>Cr(async()=>{let n=fe(ln,[]);Array.isArray(n)||(n=[]);let s={total:t,context:o},r=n.findIndex(i=>Object.keys(i)[0]===String(e));r!==-1?n[r]={[String(e)]:s}:n.push({[String(e)]:s}),De(ln,n)}),Ir=async e=>{try{if(!await Mo.pathExists(ln))return{total:0,context:0};let t=fe(ln,[]);if(!Array.isArray(t))return{total:0,context:0};let o=t.find(n=>Object.keys(n)[0]===String(e));return o?o[String(e)]:{total:0,context:0}}catch{return{total:0,context:0}}}});import nt from"fs-extra";import zo from"path";import yi from"os";var Lu,gn,Pu,wt,Fn,dl,Mr,wi,ml,Ti,Si,fl,hl,$n,Jo,Eo,Ei,bi,pl,gl,Ar,xl,vr=ae(()=>{Pt();Oo();Lu=()=>{if(process.platform==="win32"){let t=process.env.LOCALAPPDATA||zo.join(yi.homedir(),"AppData","Local");return zo.join(t,"FxFl","backups","backup.json")}if(process.platform==="darwin")return zo.join(yi.homedir(),"Library","Application Support","FxFl","backups","backup.json");let e=process.env.XDG_DATA_HOME||zo.join(yi.homedir(),".local","share");return zo.join(e,"fxfl","backups","backup.json")},gn=Lu(),Pu=()=>Math.random().toString(36).substring(2)+Date.now().toString(36),wt=null,Fn=null,dl=0,Mr=!1,wi={agent:0,background:0,search:0,toolSuccess:0,toolFailure:0,toolDenied:0,duration:0,tokens:0,cachedTokens:0,candidateTokens:0,linesAdded:0,linesRemoved:0,imageCalls:[]},ml=async()=>{let e=new Date().toISOString().split("T")[0],t=Zt+".tmp",o=null,n=null;try{if(await nt.exists(t)){let r=(await nt.readFile(t,"utf8")).trim(),i=null;if(r.startsWith("{")||r.startsWith("[")?i=JSON.parse(r):i=JSON.parse(An(r)),i&&i.date&&i.stats){o=i;try{await nt.rename(t,Zt)}catch{}}else try{await nt.remove(t)}catch{}}}catch{try{await nt.remove(t)}catch{}}if(!o)try{if(await nt.exists(Zt)){let r=(await nt.readFile(Zt,"utf8")).trim();r.startsWith("{")||r.startsWith("[")?o=JSON.parse(r):o=JSON.parse(An(r))}}catch{}try{if(await nt.exists(gn)){let r=(await nt.readFile(gn,"utf8")).trim();r.startsWith("{")||r.startsWith("[")?n=JSON.parse(r):n=JSON.parse(An(r))}}catch{}let s=null;if(o&&n)if(o.saveId!==n.saveId){s=o;try{await nt.ensureDir(zo.dirname(gn)),await nt.copy(Zt,gn)}catch{}}else s=o;else if(o&&!n){s=o;try{await nt.ensureDir(zo.dirname(gn)),await nt.copy(Zt,gn)}catch{}}else if(!o&&n){s=n;try{await nt.ensureDir(zo.dirname(Zt)),await nt.copy(gn,Zt)}catch{}}if(s&&s.date===e&&s.stats){let r={...wi,...s.stats};return Array.isArray(r.imageCalls)||(r.imageCalls=[]),{...s,stats:r}}return{date:e,stats:{...wi}}},Ti=async()=>{if(!(!Mr||!wt))try{await nt.ensureDir(zo.dirname(Zt));let e=null;try{if(await nt.exists(Zt)){let s=(await nt.readFile(Zt,"utf8")).trim();s.startsWith("{")||s.startsWith("[")?e=JSON.parse(s):e=JSON.parse(An(s))}}catch{}if(e&&e.date===wt.date&&e.stats){for(let s in wt.stats)if(e.stats[s]!==void 0)if(Array.isArray(wt.stats[s])){let r=Array.isArray(e.stats[s])?e.stats[s]:[],i=wt.stats[s],u=new Map;for(let f of[...r,...i])f&&f.timestamp&&u.set(f.timestamp,f);wt.stats[s]=Array.from(u.values())}else typeof wt.stats[s]=="number"&&(wt.stats[s]=Math.max(wt.stats[s],Number(e.stats[s])||0))}wt.saveId=Pu();let t=Zt+".tmp",o=_s(JSON.stringify(wt,null,2));await nt.writeFile(t,o,"utf8");let n=await nt.open(t,"r+");await nt.fsync(n),await nt.close(n),await nt.rename(t,Zt);try{await nt.ensureDir(zo.dirname(gn)),await nt.copy(Zt,gn)}catch{}Mr=!1,dl=Date.now()}catch{}},Si=()=>{if(Mr=!0,Fn)return;let e=Date.now(),t=Math.max(0,1500-(e-dl));Fn=setTimeout(async()=>{await Ti(),Fn=null},t),Fn.unref&&Fn.unref()},fl=async()=>{wt=await ml()},hl=async()=>{Fn&&(clearTimeout(Fn),Fn=null),await Ti()},$n=async()=>{let e=new Date().toISOString().split("T")[0];return wt?wt.date!==e&&(wt={date:e,stats:{...wi}},Mr=!0,await Ti()):wt=await ml(),wt&&wt.stats&&!Array.isArray(wt.stats.imageCalls)&&(wt.stats.imageCalls=[]),wt.stats},Jo=async e=>{let t=await $n();t[e]!==void 0&&(t[e]++,Si())},Eo=async(e,t)=>{let o=await $n();o[e]!==void 0&&(o[e]+=Math.floor(t),Si())},Ei=async(e,t)=>{let o=await $n(),n=t.apiTier||"Free",s=t.quotas||{};if(n==="Free"){if(e==="agent"||e==="background")return o.agent+o.background<999999;if(e==="search")return!0}if(n==="Paid"||n==="Custom"){if(e==="agent")return o.agent<(s.agentLimit||999999);if(e==="background")return o.background<(s.backgroundLimit||999999);if(e==="search")return o.search<(s.searchLimit||100)}return!0},bi=e=>{if(!e||e.length===0)return[];let o=[...e].sort((s,r)=>s.timestamp-r.timestamp),n=[];for(let s of o){if(n.length>0){let r=n[n.length-1];if(s.timestamp>=r.start&&s.timestamp<r.end){r.calls.push(s),r.spent+=s.cost;continue}}n.push({start:s.timestamp,end:s.timestamp+36e5,calls:[s],spent:s.cost})}return n},pl=(e,t)=>{if(!e||e.length===0)return .025;let n=bi(e);if(n.length===0)return .025;let s=[];for(let a of n){let d=.025;if(s.length>0){let p=s[s.length-1],y=!1;if(s.length>=2){let T=s[s.length-2];p.ratio>=.8&&T.ratio>=.8&&(y=!0)}if(y)d=.015;else{let T=p.limit,w=p.ratio;w>=.8?d=T===.015?.015:T:w<.4?d=Math.min(.025,T+.005):w>=.4&&w<.6?d=Math.min(.025,T+.004):d=Math.min(.025,T+.002)}}let h=d>0?a.spent/d:0;s.push({limit:d,spent:a.spent,ratio:h})}let r=n[n.length-1];if(t<r.end)return s[s.length-1].limit;let i=s[s.length-1].limit,u=i,f=s[s.length-1].ratio,m=r.end,c=0;for(let a=s.length-1;a>=0&&s[a].ratio>=.8;a--)c++;for(;m<=t;){let a=.025;c>=2?a=.015:f>=.8?a=u===.015?.015:u:f<.4?a=Math.min(.025,u+.005):f>=.4&&f<.6?a=Math.min(.025,u+.004):a=Math.min(.025,u+.002),u=a,f=0,c=0,m+=36e5,i=a}return i},gl=async e=>{let t=e.imageSettings||{keyType:"Default",quality:"Low-High"};if(t.keyType!=="Default")return!0;let n={Low:.001,"Low-High":.002,Medium:.008,"Medium-High":.01,High:.045,Ultra:.0488,Premium:.15}[t.quality]||.002,s=await $n();s.imageCalls||(s.imageCalls=[]);let r=Date.now(),i=bi(s.imageCalls),u=0;if(i.length>0){let m=i[i.length-1];r>=m.start&&r<m.end&&(u=m.spent)}let f=pl(s.imageCalls,r);return u+n<=f},Ar=async()=>{let e=await $n();e.imageCalls||(e.imageCalls=[]);let t=Date.now(),o=bi(e.imageCalls),n=[],s=0,r=0;if(o.length>0){let m=o[o.length-1];t>=m.start&&t<m.end&&(n=m.calls,s=m.spent,r=Math.max(0,Math.ceil((m.end-t)/(60*1e3))))}let i=pl(e.imageCalls,t),u=Math.max(0,i-s),f=s;return{totalSpent:s,remaining:u,activeCallsCount:n.length,nextResetMin:r,reclaimCost:f,limit:i}},xl=async e=>{let t=e.imageSettings||{keyType:"Default",quality:"Low-High"},n={Low:.001,"Low-High":.002,Medium:.008,"Medium-High":.01,High:.045,Ultra:.0488,Premium:.1}[t.quality]||.002,s=await $n();s.imageCalls||(s.imageCalls=[]),s.imageCalls.push({timestamp:Date.now(),cost:n}),Si()}});import Fu from"puppeteer";var Ci,yl=ae(()=>{Kt();Pt();Ci=async e=>{let{query:t,limit:o=10}=se(e);if(!t)return'ERROR: Missing "query" argument for web_search.';let n=3,s=null;for(let r=1;r<=n;r++){let i=null;try{i=await Fu.launch({headless:!0,args:["--no-sandbox","--disable-setuid-sandbox","--disable-gpu","--disable-dev-shm-usage"]});let u=await i.newPage();await u.setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.7778.97 Safari/537.36"),await u.setViewport({width:1366,height:768});let f=r===1?Math.random()*1e3+500:Math.random()*2e3+1e3;await new Promise(d=>setTimeout(d,f));let m=`https://html.duckduckgo.com/html/?q=${encodeURIComponent(t)}`;await u.goto(m,{waitUntil:"networkidle2",timeout:18e4});let c=await u.$$eval(".result",(d,h)=>d.slice(0,h).map((p,y)=>{let T=p.querySelector(".result__a"),w=p.querySelector(".result__snippet"),E=T?T.href:"";E.includes("uddg=")&&(E=decodeURIComponent(E.split("uddg=")[1].split("&")[0]));let A=T?T.innerText.trim():"No Title",$=w?w.innerText.trim():"No Snippet";return`${y+1}. ${A}
282
283
  Source: ${E}
283
284
  Snippet: ${$}`}),o);if(c.length===0){if((await u.evaluate(()=>document.body.innerText)).includes("anomaly"))throw new Error("ANOMALY_DETECTED");return await i.close(),`No results found for query: [${t}].`}let a=c.join(`
284
285
 
@@ -288,13 +289,13 @@ ${a}`}catch(u){if(s=u,i&&await i.close(),r<n){let f=Math.pow(2,r)*1e3;await new
288
289
 
289
290
  ${c}${m.length>3e4?`
290
291
 
291
- [TRUNCATED AT 30K CHARS]`:""}`}catch(u){if(s=u,i&&await i.close(),r<n){let f=Math.pow(2,r)*1e3;await new Promise(m=>setTimeout(m,f))}}}return`ERROR: Scrape failed after ${n+1} attempts. Last error: ${s.message}`}});var _u,Ii,Tl=ae(()=>{Oo();Pt();_u=4*(1024*2),Ii=async(e,t={})=>{let o=c=>{let a=new RegExp(`${c}\\s*[:=]\\s*(["'])(.*?)\\1(?=\\s*[,)]|\\s+\\w+\\s*[:=]|$)`,"s"),d=e.match(a);if(d)return d[2].trim();let h=new RegExp(`${c}\\s*[:=]\\s*([^,\\s)]+)`,"s"),p=e.match(h);return p?p[1].trim():null},n=o("action"),s=o("method"),r=o("content"),i=o("content-new"),u=o("content-old"),f=o("id"),m=o("chat-id")||t.chatId||t.sessionId||"default-session";if(n==="temp"){if(!r)return"ERROR: Missing 'content' for temp memory.";let c=fe(So,{});c[m]||(c[m]=[]),c[m].push(r),De(So,c);let a=c[m].reduce((d,h)=>d+h.length,0);return`SUCCESS: Temporary context saved for session [${m}]. (Size: ${a} chars)`}if(n==="user"){let c=fe(Ht,[]).map(a=>(a.score===void 0&&(a.score=.5),a));if(s==="add"){if(!r)return"ERROR: Missing 'content' for memory addition.";let a=new Date,d=`${a.getDate()}/${a.getMonth()+1}/${a.getFullYear()}`,h=r.includes("[Saved on:")?r:`${r.trim()} [Saved on: ${d}]`,p=_u,y=c.reduce((A,$)=>A+($.memory?.length||0),0);for(;c.length>0&&y+h.length>p;){let A=c.shift();y-=A.memory?.length||0}let T=o("score"),w=T?parseFloat(T):.5,E={id:`mem-${Date.now().toString(36)}`,memory:h,score:Math.min(2,isNaN(w)?.5:w)};return c.push(E),De(Ht,c),`SUCCESS: Memory added with ID [${E.id}] and score [${E.score}]. (Vault Size: ${y+h.length} chars)`}if(s==="update"){let a=f||u,d=i||r;if(!a||!d)return"ERROR: Missing 'id' or content for update.";let h=c.findIndex(w=>w.id===a);if(h===-1)return`ERROR: Memory ID [${a}] not found.`;let p=new Date,y=`${p.getDate()}/${p.getMonth()+1}/${p.getFullYear()}`,T=d.includes("[Saved on:")?d:`${d.trim()} [Saved on: ${y}]`;return c[h].memory=T,De(Ht,c),`SUCCESS: Memory [${a}] updated.`}if(s==="delete"){let a=f||r;if(!a)return"ERROR: Missing 'id' for deletion.";let d=c.length,h=c.filter(p=>p.id!==a);return h.length===d?`ERROR: Memory ID [${a}] not found.`:(De(Ht,h),`SUCCESS: Memory [${a}] deleted.`)}return`ERROR: Invalid method [${s}] for user memory. Use 'add', 'update', or 'delete'.`}return`ERROR: Unknown action [${n}] for memory tool.`}});var Mi,Sl=ae(()=>{Xs();Xt();Mi=async(e,t={})=>{let o=se(e).title,n=t.chatId||t.sessionId;if(!n)return"ERROR: No active chatId found in tool context.";if(!o)return"ERROR: Missing 'title' argument.";try{return await il(n,o),`SUCCESS: Chat title updated to [${o}] for session [${n}].`}catch(s){return`ERROR: Failed to update chat title: ${s instanceof Error?s.message:String(s)}`}}});import Dr from"fs";import El from"path";var Ai,bl=ae(()=>{Xt();Ai=async(e,t={})=>{let{path:o,StartLine:n,EndLine:s,start_line:r,end_line:i,startLine:u,endLine:f}=se(e),m=parseInt(n||r||u),c=parseInt(s||i||f),a=m||1,d=c||(m?m+800:800);if(!o)return'ERROR: Missing "path" argument for view_file.';let h=El.resolve(process.cwd(),o);try{if(!Dr.existsSync(h))return`ERROR: File [${o}] does not exist.`;if(Dr.statSync(h).isDirectory())return`ERROR: Path [${o}] is a directory. Use list_files instead.`;let y=El.extname(o).toLowerCase();if([".mp4",".mkv",".avi",".mov",".webm",".flv",".wmv",".mpeg",".mpg"].includes(y))return`ERROR: Unable to read. Type ${y.slice(1).toUpperCase()} not supported`;let w={".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(w[y]){if(!(t.isMultiModal!==!1))return`ERROR: Multimodality is not supported for the current model. Unable to load [${o}].`;let q=Dr.readFileSync(h).toString("base64"),Y=w[y];return{text:`[BINARY FILE]: ${o} (${Y}) - Loaded as multimodal part.`,binaryPart:{inlineData:{data:q,mimeType:Y}}}}let E=Dr.readFileSync(h,"utf8");E.startsWith("\uFEFF")&&(E=E.slice(1)),E=E.replace(/\r\n/g,`
292
+ [TRUNCATED AT 30K CHARS]`:""}`}catch(u){if(s=u,i&&await i.close(),r<n){let f=Math.pow(2,r)*1e3;await new Promise(m=>setTimeout(m,f))}}}return`ERROR: Scrape failed after ${n+1} attempts. Last error: ${s.message}`}});var _u,Ii,Tl=ae(()=>{Oo();Pt();_u=4*(1024*2),Ii=async(e,t={})=>{let o=c=>{let a=new RegExp(`${c}\\s*[:=]\\s*(["'])(.*?)\\1(?=\\s*[,)]|\\s+\\w+\\s*[:=]|$)`,"s"),d=e.match(a);if(d)return d[2].trim();let h=new RegExp(`${c}\\s*[:=]\\s*([^,\\s)]+)`,"s"),p=e.match(h);return p?p[1].trim():null},n=o("action"),s=o("method"),r=o("content"),i=o("content-new"),u=o("content-old"),f=o("id"),m=o("chat-id")||t.chatId||t.sessionId||"default-session";if(n==="temp"){if(!r)return"ERROR: Missing 'content' for temp memory.";let c=fe(So,{});c[m]||(c[m]=[]),c[m].push(r),De(So,c);let a=c[m].reduce((d,h)=>d+h.length,0);return`SUCCESS: Temporary context saved for session [${m}]. (Size: ${a} chars)`}if(n==="user"){let c=fe(Ht,[]).map(a=>(a.score===void 0&&(a.score=.5),a));if(s==="add"){if(!r)return"ERROR: Missing 'content' for memory addition.";let a=new Date,d=`${a.getDate()}/${a.getMonth()+1}/${a.getFullYear()}`,h=r.includes("[Saved on:")?r:`${r.trim()} [Saved on: ${d}]`,p=_u,y=c.reduce((A,$)=>A+($.memory?.length||0),0);for(;c.length>0&&y+h.length>p;){let A=c.shift();y-=A.memory?.length||0}let T=o("score"),w=T?parseFloat(T):.5,E={id:`mem-${Date.now().toString(36)}`,memory:h,score:Math.min(2,isNaN(w)?.5:w)};return c.push(E),De(Ht,c),`SUCCESS: Memory added with ID [${E.id}] and score [${E.score}]. (Vault Size: ${y+h.length} chars)`}if(s==="update"){let a=f||u,d=i||r;if(!a||!d)return"ERROR: Missing 'id' or content for update.";let h=c.findIndex(w=>w.id===a);if(h===-1)return`ERROR: Memory ID [${a}] not found.`;let p=new Date,y=`${p.getDate()}/${p.getMonth()+1}/${p.getFullYear()}`,T=d.includes("[Saved on:")?d:`${d.trim()} [Saved on: ${y}]`;return c[h].memory=T,De(Ht,c),`SUCCESS: Memory [${a}] updated.`}if(s==="delete"){let a=f||r;if(!a)return"ERROR: Missing 'id' for deletion.";let d=c.length,h=c.filter(p=>p.id!==a);return h.length===d?`ERROR: Memory ID [${a}] not found.`:(De(Ht,h),`SUCCESS: Memory [${a}] deleted.`)}return`ERROR: Invalid method [${s}] for user memory. Use 'add', 'update', or 'delete'.`}return`ERROR: Unknown action [${n}] for memory tool.`}});var Mi,Sl=ae(()=>{Ks();Kt();Mi=async(e,t={})=>{let o=se(e).title,n=t.chatId||t.sessionId;if(!n)return"ERROR: No active chatId found in tool context.";if(!o)return"ERROR: Missing 'title' argument.";try{return await il(n,o),`SUCCESS: Chat title updated to [${o}] for session [${n}].`}catch(s){return`ERROR: Failed to update chat title: ${s instanceof Error?s.message:String(s)}`}}});import Dr from"fs";import El from"path";var Ai,bl=ae(()=>{Kt();Ai=async(e,t={})=>{let{path:o,StartLine:n,EndLine:s,start_line:r,end_line:i,startLine:u,endLine:f}=se(e),m=parseInt(n||r||u),c=parseInt(s||i||f),a=m||1,d=c||(m?m+800:800);if(!o)return'ERROR: Missing "path" argument for view_file.';let h=El.resolve(process.cwd(),o);try{if(!Dr.existsSync(h))return`ERROR: File [${o}] does not exist.`;if(Dr.statSync(h).isDirectory())return`ERROR: Path [${o}] is a directory. Use list_files instead.`;let y=El.extname(o).toLowerCase();if([".mp4",".mkv",".avi",".mov",".webm",".flv",".wmv",".mpeg",".mpg"].includes(y))return`ERROR: Unable to read. Type ${y.slice(1).toUpperCase()} not supported`;let w={".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(w[y]){if(!(t.isMultiModal!==!1))return`ERROR: Multimodality is not supported for the current model. Unable to load [${o}].`;let q=Dr.readFileSync(h).toString("base64"),Y=w[y];return{text:`[BINARY FILE]: ${o} (${Y}) - Loaded as multimodal part.`,binaryPart:{inlineData:{data:q,mimeType:Y}}}}let E=Dr.readFileSync(h,"utf8");E.startsWith("\uFEFF")&&(E=E.slice(1)),E=E.replace(/\r\n/g,`
292
293
  `).replace(/\r/g,`
293
294
  `);let A=E.split(`
294
295
  `),$=A.length,W=Math.max(0,a-1),D=Math.min($,d),O=A.slice(W,D),M=`File: [${o}] (Showing lines ${W+1}-${D} of ${$}).`,P=O.map((j,G)=>`${String(W+G+1).padStart(4)}: ${j}`).join(`
295
296
  `);return`${M}
296
297
 
297
- ${P}`}catch(p){let y=p instanceof Error?p.message:String(p);return`ERROR: Failed to read file [${o}]: ${y}`}}});import ws from"fs";import Cl from"path";var vi,kl=ae(()=>{Xt();pn();vi=async(e,t={})=>{let{path:o,content:n}=se(e);if(!o)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,`
298
+ ${P}`}catch(p){let y=p instanceof Error?p.message:String(p);return`ERROR: Failed to read file [${o}]: ${y}`}}});import ws from"fs";import Cl from"path";var vi,kl=ae(()=>{Kt();pn();vi=async(e,t={})=>{let{path:o,content:n}=se(e);if(!o)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,`
298
299
  `).replace(/\r/g,`
299
300
  `);let s=Cl.resolve(process.cwd(),o),r=Cl.dirname(s);try{await yt.recordFileChange(s);let i="";if(ws.existsSync(s))try{i=`Old File contents:
300
301
  ${ws.readFileSync(s,"utf8").split(/\r?\n/).map((E,A)=>`${A+1} | ${E}`).join(`
@@ -317,7 +318,7 @@ ${w}`}return a=null,`SUCCESS: File [${o}] saved.
317
318
  ${i}- Content Preview:
318
319
  ${y}
319
320
 
320
- [SYSTEM] Check the content preview for verification [/SYSTEM]`}catch(i){let u=i instanceof Error?i.message:String(i);return`ERROR: Failed to write file [${o}]: ${u}`}}});import Di from"fs";import Nu from"path";var Oi,Il=ae(()=>{Xt();pn();os();Oi=async(e,t={})=>{let o=se(e),n=o.path;if(!n)return'ERROR: Missing "path" argument for update_file.';let{patchPairs:s,error:r}=pr(o);if(r)return`ERROR: ${r}`;if(s.length===0)return"ERROR: No valid replacement pairs found. Use replaceContent1, newContent1, etc.";let i=Nu.resolve(process.cwd(),n);try{if(!Di.existsSync(i))return`ERROR: File [${n}] does not exist. Use write_file instead.`;let u=t.forcedContent||Di.readFileSync(i,"utf8");u.startsWith("\uFEFF")&&(u=u.slice(1));let f=u.replace(/\r\n/g,`
321
+ [SYSTEM] Check the content preview for verification [/SYSTEM]`}catch(i){let u=i instanceof Error?i.message:String(i);return`ERROR: Failed to write file [${o}]: ${u}`}}});import Di from"fs";import Nu from"path";var Oi,Il=ae(()=>{Kt();pn();os();Oi=async(e,t={})=>{let o=se(e),n=o.path;if(!n)return'ERROR: Missing "path" argument for update_file.';let{patchPairs:s,error:r}=pr(o);if(r)return`ERROR: ${r}`;if(s.length===0)return"ERROR: No valid replacement pairs found. Use replaceContent1, newContent1, etc.";let i=Nu.resolve(process.cwd(),n);try{if(!Di.existsSync(i))return`ERROR: File [${n}] does not exist. Use write_file instead.`;let u=t.forcedContent||Di.readFileSync(i,"utf8");u.startsWith("\uFEFF")&&(u=u.slice(1));let f=u.replace(/\r\n/g,`
321
322
  `).replace(/\r/g,`
322
323
  `),{content:m,results:c}=gr(f,s),a=c.filter(p=>!p.success),d=c.filter(p=>p.success);if(d.length===0)return`ERROR: Patch Failed to apply to [${n}].
323
324
  ${a.map(p=>` \u2022 ${p.error}`).join(`
@@ -329,14 +330,14 @@ ${a.map(p=>` \u2022 ${p.error}`).join(`
329
330
 
330
331
  ${h}`:`SUCCESS: File [${n}] updated. [${c.length}/${s.length}] blocks applied.
331
332
 
332
- ${h}`}catch(u){let f=u instanceof Error?u.message:String(u);return`ERROR: Failed to update file [${n}]: ${f}`}}});import Or from"fs";import Ml from"path";var Li,Al=ae(()=>{Xt();Li=async e=>{let{path:t="."}=se(e),o=Ml.resolve(process.cwd(),t);try{if(!Or.existsSync(o))return`ERROR: Path [${t}] does not exist.`;if(!Or.statSync(o).isDirectory())return`ERROR: Path [${t}] is a file, not a directory. Use view_file instead.`;let s=Or.readdirSync(o),r=s.length,i=100,u=s.slice(0,i),f=[];for(let d of u){let h=Ml.join(o,d),p="\u{1F4C4}",y={name:d,type:"unknown",size:"N/A",mtime:"N/A"};try{let T=Or.statSync(h);y={name:d,type:T.isDirectory()?"directory":"file",size:(T.size/1024).toFixed(1)+" KB",mtime:T.mtime.toLocaleString()}}catch{y.type="inaccessible"}f.push(y)}let m=f.map(d=>{let h=d.type==="directory"?"\u{1F4C1}":d.type==="file"?"\u{1F4C4}":"\u2753";return d.type==="directory"?`${h} ${d.name} - [DIR] - [Modified: ${d.mtime}]`:`${h} ${d.name} - [Size: ${d.size}] - [Modified: ${d.mtime}]`}).join(`
333
+ ${h}`}catch(u){let f=u instanceof Error?u.message:String(u);return`ERROR: Failed to update file [${n}]: ${f}`}}});import Or from"fs";import Ml from"path";var Li,Al=ae(()=>{Kt();Li=async e=>{let{path:t="."}=se(e),o=Ml.resolve(process.cwd(),t);try{if(!Or.existsSync(o))return`ERROR: Path [${t}] does not exist.`;if(!Or.statSync(o).isDirectory())return`ERROR: Path [${t}] is a file, not a directory. Use view_file instead.`;let s=Or.readdirSync(o),r=s.length,i=100,u=s.slice(0,i),f=[];for(let d of u){let h=Ml.join(o,d),p="\u{1F4C4}",y={name:d,type:"unknown",size:"N/A",mtime:"N/A"};try{let T=Or.statSync(h);y={name:d,type:T.isDirectory()?"directory":"file",size:(T.size/1024).toFixed(1)+" KB",mtime:T.mtime.toLocaleString()}}catch{y.type="inaccessible"}f.push(y)}let m=f.map(d=>{let h=d.type==="directory"?"\u{1F4C1}":d.type==="file"?"\u{1F4C4}":"\u2753";return d.type==="directory"?`${h} ${d.name} - [DIR] - [Modified: ${d.mtime}]`:`${h} ${d.name} - [Size: ${d.size}] - [Modified: ${d.mtime}]`}).join(`
333
334
  `),c=`
334
335
 
335
336
  (Total items in folder: ${r})`;r>i&&(c=`
336
337
 
337
338
  \u26A0\uFE0F TRUNCATED: Showing first ${i} of ${r} items.`);let a=`Detailed folder stats for [${t}]:
338
339
 
339
- ${m}${c}`;return s.length=0,u.length=0,f.length=0,a}catch(n){let s=n instanceof Error?n.message:String(n);return`ERROR: Failed to read folder [${t}]: ${s}`}}});var Pi,vl=ae(()=>{Xt();Pi=async(e,t)=>{let o=se(e),{question:n}=o;if(!n)return'ERROR: Missing "question" argument for ask.';if(!t.onAskUser)return"ERROR: onAskUser callback not provided in tool context.";let s=[];Object.keys(o).forEach(r=>{if(r.startsWith("option")){let i=o[r];if(typeof i=="string"&&i.includes("::")){let[u,f]=i.split("::");s.push({id:r,label:u.trim(),description:f.trim()})}else s.push({id:r,label:String(i).trim(),description:""})}});try{return`USER CHOOSE: ${await t.onAskUser(n,s)}`}catch(r){return`ERROR: Failed to get user input: ${r instanceof Error?r.message:String(r)}`}}});import Bu from"puppeteer";import Ts from"path";import ns from"fs-extra";import{PDFDocument as Ru}from"pdf-lib";var Fi,Dl=ae(()=>{Xt();pn();Fi=async e=>{let{path:t,content:o,orientation:n="portrait",margin:s="0px"}=se(e);if(!t)return'ERROR: Missing "path" argument for write_pdf.';if(!o)return'ERROR: Missing "content" (HTML/CSS) for write_pdf.';let r=Ts.resolve(process.cwd(),t),i=null;try{await ns.ensureDir(Ts.dirname(r)),await yt.recordFileChange(r),i=await Bu.launch({headless:!0,args:["--no-sandbox","--disable-setuid-sandbox","--disable-gpu","--disable-dev-shm-usage"]});let u=await i.newPage(),f=o,m={},c=async D=>{if(!D||D.startsWith("http://")||D.startsWith("https://")||D.startsWith("data:"))return null;try{let O=Ts.resolve(process.cwd(),D);if(await ns.pathExists(O)){let M=Ts.extname(O).toLowerCase().replace(".","")||"png",P=M==="jpg"?"jpeg":M==="svg"?"svg+xml":M,j=await ns.readFile(O,"base64");return`data:image/${P};base64,${j}`}}catch{}return null},a=/<link[^>]+href=["']([^"']+)["']/gi,d={},h;for(;(h=a.exec(o))!==null;){let D=h[1],O=h[0];if(D&&O.toLowerCase().includes("stylesheet")&&!D.startsWith("http://")&&!D.startsWith("https://")&&!D.startsWith("data:"))try{let M=Ts.resolve(process.cwd(),D);if(await ns.pathExists(M)){let P=await ns.readFile(M,"utf-8");d[O]=`<style>${P}</style>`}}catch{}}for(let[D,O]of Object.entries(d))f=f.split(D).join(O);let p=/<img[^>]+src=["']([^"']+)["']/gi;for(;(h=p.exec(f))!==null;){let D=h[1];if(D&&!m[D]){let O=await c(D);O&&(m[D]=O)}}let y=/url\(\s*['"]?([^'")]+?)['"]?\s*\)/gi;for(;(h=y.exec(f))!==null;){let D=h[1].trim();if(D&&!m[D]){let O=await c(D);O&&(m[D]=O)}}for(let[D,O]of Object.entries(m)){let M=D.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),P=new RegExp(`(src=["'])(${M})(["'])`,"gi");f=f.replace(P,`$1${O}$3`);let j=new RegExp(`url\\(\\s*(['"]?)(${M})\\1\\s*\\)`,"gi");f=f.replace(j,`url($1${O}$1)`)}let T=`
340
+ ${m}${c}`;return s.length=0,u.length=0,f.length=0,a}catch(n){let s=n instanceof Error?n.message:String(n);return`ERROR: Failed to read folder [${t}]: ${s}`}}});var Pi,vl=ae(()=>{Kt();Pi=async(e,t)=>{let o=se(e),{question:n}=o;if(!n)return'ERROR: Missing "question" argument for ask.';if(!t.onAskUser)return"ERROR: onAskUser callback not provided in tool context.";let s=[];Object.keys(o).forEach(r=>{if(r.startsWith("option")){let i=o[r];if(typeof i=="string"&&i.includes("::")){let[u,f]=i.split("::");s.push({id:r,label:u.trim(),description:f.trim()})}else s.push({id:r,label:String(i).trim(),description:""})}});try{return`USER CHOOSE: ${await t.onAskUser(n,s)}`}catch(r){return`ERROR: Failed to get user input: ${r instanceof Error?r.message:String(r)}`}}});import Bu from"puppeteer";import Ts from"path";import ns from"fs-extra";import{PDFDocument as Ru}from"pdf-lib";var Fi,Dl=ae(()=>{Kt();pn();Fi=async e=>{let{path:t,content:o,orientation:n="portrait",margin:s="0px"}=se(e);if(!t)return'ERROR: Missing "path" argument for write_pdf.';if(!o)return'ERROR: Missing "content" (HTML/CSS) for write_pdf.';let r=Ts.resolve(process.cwd(),t),i=null;try{await ns.ensureDir(Ts.dirname(r)),await yt.recordFileChange(r),i=await Bu.launch({headless:!0,args:["--no-sandbox","--disable-setuid-sandbox","--disable-gpu","--disable-dev-shm-usage"]});let u=await i.newPage(),f=o,m={},c=async D=>{if(!D||D.startsWith("http://")||D.startsWith("https://")||D.startsWith("data:"))return null;try{let O=Ts.resolve(process.cwd(),D);if(await ns.pathExists(O)){let M=Ts.extname(O).toLowerCase().replace(".","")||"png",P=M==="jpg"?"jpeg":M==="svg"?"svg+xml":M,j=await ns.readFile(O,"base64");return`data:image/${P};base64,${j}`}}catch{}return null},a=/<link[^>]+href=["']([^"']+)["']/gi,d={},h;for(;(h=a.exec(o))!==null;){let D=h[1],O=h[0];if(D&&O.toLowerCase().includes("stylesheet")&&!D.startsWith("http://")&&!D.startsWith("https://")&&!D.startsWith("data:"))try{let M=Ts.resolve(process.cwd(),D);if(await ns.pathExists(M)){let P=await ns.readFile(M,"utf-8");d[O]=`<style>${P}</style>`}}catch{}}for(let[D,O]of Object.entries(d))f=f.split(D).join(O);let p=/<img[^>]+src=["']([^"']+)["']/gi;for(;(h=p.exec(f))!==null;){let D=h[1];if(D&&!m[D]){let O=await c(D);O&&(m[D]=O)}}let y=/url\(\s*['"]?([^'")]+?)['"]?\s*\)/gi;for(;(h=y.exec(f))!==null;){let D=h[1].trim();if(D&&!m[D]){let O=await c(D);O&&(m[D]=O)}}for(let[D,O]of Object.entries(m)){let M=D.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),P=new RegExp(`(src=["'])(${M})(["'])`,"gi");f=f.replace(P,`$1${O}$3`);let j=new RegExp(`url\\(\\s*(['"]?)(${M})\\1\\s*\\)`,"gi");f=f.replace(j,`url($1${O}$1)`)}let T=`
340
341
  <style>
341
342
  @page {
342
343
  margin: ${s};
@@ -366,7 +367,7 @@ ${m}${c}`;return s.length=0,u.length=0,f.length=0,a}catch(n){let s=n instanceof
366
367
  </style>
367
368
  <div class="watermark">Generated by FluxFlow CLI (AI)</div>
368
369
  ${f}
369
- `;await u.setContent(T,{waitUntil:"networkidle0",timeout:18e4});let w=await u.pdf({format:"A4",landscape:String(n).toLowerCase()==="landscape",margin:{top:s,right:s,bottom:s,left:s},printBackground:!0}),E=await Ru.load(w),A=Ts.basename(t);E.setTitle(`FluxFlow_${A}`),E.setAuthor("FluxFlow CLI"),E.setSubject("Generated with Agentic AI System"),E.setKeywords(["FluxFlow","AI","Agentic","Automated"]),E.setCreator("FluxFlow PDF Engine"),E.setProducer("FluxFlow (Generative AI)");let $=await E.save();await ns.writeFile(r,$);let W=await ns.stat(r);return`SUCCESS: PDF generated successfully at [${t}] (${(W.size/1024).toFixed(2)} KB).`}catch(u){let f=u instanceof Error?u.message:String(u);return`ERROR: Failed to generate PDF [${t}]: ${f}`}finally{i&&await i.close()}}});import Ol from"fs-extra";import $i from"path";import Uu from"html-to-docx";var _i,Ll=ae(()=>{Xt();pn();_i=async e=>{let{path:t,content:o}=se(e);if(!t)return'ERROR: Missing "path" argument for write_docx.';if(!o)return'ERROR: Missing "content" (HTML) for write_docx.';let n=$i.resolve(process.cwd(),t);try{await Ol.ensureDir($i.dirname(n)),await yt.recordFileChange(n);let s=$i.basename(t),r=o.includes("<html")?o:`
370
+ `;await u.setContent(T,{waitUntil:"networkidle0",timeout:18e4});let w=await u.pdf({format:"A4",landscape:String(n).toLowerCase()==="landscape",margin:{top:s,right:s,bottom:s,left:s},printBackground:!0}),E=await Ru.load(w),A=Ts.basename(t);E.setTitle(`FluxFlow_${A}`),E.setAuthor("FluxFlow CLI"),E.setSubject("Generated with Agentic AI System"),E.setKeywords(["FluxFlow","AI","Agentic","Automated"]),E.setCreator("FluxFlow PDF Engine"),E.setProducer("FluxFlow (Generative AI)");let $=await E.save();await ns.writeFile(r,$);let W=await ns.stat(r);return`SUCCESS: PDF generated successfully at [${t}] (${(W.size/1024).toFixed(2)} KB).`}catch(u){let f=u instanceof Error?u.message:String(u);return`ERROR: Failed to generate PDF [${t}]: ${f}`}finally{i&&await i.close()}}});import Ol from"fs-extra";import $i from"path";import Uu from"html-to-docx";var _i,Ll=ae(()=>{Kt();pn();_i=async e=>{let{path:t,content:o}=se(e);if(!t)return'ERROR: Missing "path" argument for write_docx.';if(!o)return'ERROR: Missing "content" (HTML) for write_docx.';let n=$i.resolve(process.cwd(),t);try{await Ol.ensureDir($i.dirname(n)),await yt.recordFileChange(n);let s=$i.basename(t),r=o.includes("<html")?o:`
370
371
  <!DOCTYPE html>
371
372
  <html lang="en">
372
373
  <head>
@@ -378,16 +379,18 @@ ${m}${c}`;return s.length=0,u.length=0,f.length=0,a}catch(n){let s=n instanceof
378
379
  </body>
379
380
  </html>
380
381
  `,i=await Uu(r,null,{title:`FluxFlow_${s}`,creator:"FluxFlow CLI",description:"Generated by Agentic AI System",table:{row:{cantSplit:!0}},footer:!0,pageNumber:!0});return await Ol.writeFile(n,i),`SUCCESS: Word document [${t}] generated successfully.
381
- - Size: ${(i.length/1024).toFixed(1)} KB`}catch(s){let r=s instanceof Error?s.message:String(s);return`ERROR: Failed to generate DOCX [${t}]: ${r}`}}});import Ni from"fs/promises";import Ks from"path";async function Pl(e,t,o=e,n=1){if(n>12)return[];let s=[],r;try{r=await Ni.readdir(e,{withFileTypes:!0})}catch{return[]}for(let i of r){let u=Ks.join(e,i.name),f=Ks.relative(o,u),m=f.split(Ks.sep).map(a=>a.toLowerCase());if(!t.some(a=>m.includes(a.toLowerCase())))if(i.isDirectory()){let a=await Pl(u,t,o,n+1);s=s.concat(a)}else i.isFile()&&s.push({fullPath:u,relativePath:f})}return s}var Bi,Fl=ae(()=>{Xt();Bi=async e=>{let{keyword:t,file:o}=se(e);if(!t)return'ERROR: Missing "keyword" argument.';let n=["node_modules",".git","dist",".next",".gemini",".exe",".dll",".png",".jpg",".jpeg",".gif",".zip",".tgz"],s=150;try{let r=[],i=process.cwd();if(o){let a=Ks.resolve(i,o);try{(await Ni.stat(a)).isFile()&&r.push({fullPath:a,relativePath:Ks.relative(i,a)})}catch{return`ERROR: File not found: ${o}`}}else r=await Pl(i,n);let u=r.map(async a=>{try{let d=await Ni.readFile(a.fullPath,"utf-8");if(d.includes("\0"))return[];let h=d.split(/\r?\n/),p=[];for(let y=0;y<h.length;y++)if(h[y].includes(t)){let T=a.relativePath.replace(/\\/g,"/");p.push(`${T} \u2192 ${y+1}`)}return p}catch{return[]}}),m=(await Promise.all(u)).flat().slice(0,s);if(typeof global.gc=="function"&&global.gc(),m.length===0)return`Found 0 matches for keyword: "${t}"${o?` in file: ${o}`:". Try to specify files"}`;let c=`Found ${m.length} matches:
382
+ - Size: ${(i.length/1024).toFixed(1)} KB`}catch(s){let r=s instanceof Error?s.message:String(s);return`ERROR: Failed to generate DOCX [${t}]: ${r}`}}});import Ni from"fs/promises";import Xs from"path";async function Pl(e,t,o=e,n=1){if(n>12)return[];let s=[],r;try{r=await Ni.readdir(e,{withFileTypes:!0})}catch{return[]}for(let i of r){let u=Xs.join(e,i.name),f=Xs.relative(o,u),m=f.split(Xs.sep).map(a=>a.toLowerCase());if(!t.some(a=>m.includes(a.toLowerCase())))if(i.isDirectory()){let a=await Pl(u,t,o,n+1);s=s.concat(a)}else i.isFile()&&s.push({fullPath:u,relativePath:f})}return s}var Bi,Fl=ae(()=>{Kt();Bi=async e=>{let{keyword:t,file:o}=se(e);if(!t)return'ERROR: Missing "keyword" argument.';let n=["node_modules",".git","dist",".next",".gemini",".exe",".dll",".png",".jpg",".jpeg",".gif",".zip",".tgz"],s=150;try{let r=[],i=process.cwd();if(o){let a=Xs.resolve(i,o);try{(await Ni.stat(a)).isFile()&&r.push({fullPath:a,relativePath:Xs.relative(i,a)})}catch{return`ERROR: File not found: ${o}`}}else r=await Pl(i,n);let u=r.map(async a=>{try{let d=await Ni.readFile(a.fullPath,"utf-8");if(d.includes("\0"))return[];let h=d.split(/\r?\n/),p=[];for(let y=0;y<h.length;y++)if(h[y].includes(t)){let T=a.relativePath.replace(/\\/g,"/");p.push(`${T} \u2192 ${y+1}`)}return p}catch{return[]}}),m=(await Promise.all(u)).flat().slice(0,s);if(typeof global.gc=="function"&&global.gc(),m.length===0)return`Found 0 matches for keyword: "${t}"${o?` in file: ${o}`:". Try to specify files"}`;let c=`Found ${m.length} matches:
382
383
 
383
384
  `;return c+=m.join(`
384
- `),c}catch(r){return`ERROR: ${r.message}`}}});import $l from"fs-extra";import Ri from"path";var Wu,Ui,_l=ae(()=>{Xt();fr();vr();pn();Wu=(e,t={})=>{try{if(e.length<8||e[0]!==137||e[1]!==80||e[2]!==78||e[3]!==71)return e;let o=[],n=[];for(let i=0;i<256;i++){let u=i;for(let f=0;f<8;f++)u&1?u=3988292384^u>>>1:u=u>>>1;n[i]=u}let s=i=>{let u=4294967295;for(let f=0;f<i.length;f++)u=n[(u^i[f])&255]^u>>>8;return(u^4294967295)>>>0},r=(i,u)=>{let f=Buffer.from(i,"ascii"),m=Buffer.from(u,"utf-8"),c=f.length+1+m.length,a=Buffer.alloc(8+c+4);a.writeUInt32BE(c,0),a.write("tEXt",4,"ascii"),f.copy(a,8),a[8+f.length]=0,m.copy(a,8+f.length+1);let d=s(a.subarray(4,8+c));return a.writeUInt32BE(d,8+c),a};for(let[i,u]of Object.entries(t))u!=null&&o.push(r(i,String(u)));if(o.length===0)return e;if(e.subarray(12,16).toString("ascii")==="IHDR"){let u=e.subarray(0,33),f=e.subarray(33);return Buffer.concat([u,...o,f])}return e}catch{return e}},Ui=async(e,t={})=>{let o=se(e),n=o.prompt||o.text,s=o.path||o.outputPath||o.output||"generated_image.png",r=o.ratio;if(!n)return'ERROR: Missing "prompt" argument for generate_image.';let i=["nsfw","naked","nudity","nude","porn","sex","xxx","erotic","gore","bloody","violence","abuse","suicide","murder","hentai","pedophile","rape"],u=n.toLowerCase();if(i.some(m=>u.includes(m)))return"ERROR: Prompt blocked by system safety filter (inappropriate or unsafe content detected).";try{let m=await hs();if(!await gl(m))return`ERROR: Insufficient Quota for selected quality. Either tell user reduce quality or wait for next refresh cycle (${(await Ar()).nextResetMin||60}m).`;let a=m.imageSettings||{keyType:"Default",quality:"Low-High",apiKey:""},d=a.keyType==="Custom"&&a.apiKey?a.apiKey:FALLBACK_IMAGE_KEY,p={Low:"flux","Low-High":"zimage",Medium:"gptimage","Medium-High":"gptimage",High:"qwen-image",Ultra:"gptimage-large",Premium:"nanobanana-pro"}[a.quality]||"zimage",y=1024,T=1024;if(r){let N=r.replace(/\s+/g,"");N==="16:9"?(y=1024,T=576):N==="9:16"?(y=576,T=1024):N==="4:3"?(y=1024,T=768):N==="3:4"?(y=768,T=1024):N==="1:1"&&(y=1024,T=1024)}let w=Math.floor(Math.random()*1e7),A=`https://gen.pollinations.ai/image/${encodeURIComponent(n)}?model=${p}&width=${y}&height=${T}&seed=${w}&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")}`,$=await fetch(A,{method:"GET",headers:{Authorization:`Bearer ${d}`}});if(!$.ok){let N=$.status,he="";try{he=await $.text()}catch{}return N===402||he.includes("Insufficient balance")||he.includes("PAYMENT_REQUIRED")?"ERROR: Image Generation Currently unavailable. Try again later.":`ERROR: Image Generation failed with status [${N}]: ${he||"Unknown API Error"}`}if(($.headers.get("content-type")||"").includes("application/json")){let N=await $.json();return N.status===402||N.error&&N.error.code==="PAYMENT_REQUIRED"?"ERROR: Image Generation Currently unavailable. Try again later.":`ERROR: Image Generation failed: ${N.error?.message||JSON.stringify(N)}`}let D=await $.arrayBuffer(),O=Buffer.from(D),M={Title:n,Description:"Generated via FluxFlow CLI",Software:"FluxFlow CLI",Author:"FluxFlow","Creation Time":new Date().toISOString(),Prompt:n,Model:`Fluxflow:${p}`,Ratio:r||"1:1",Seed:String(w)};O=Wu(O,M);let P=Ri.resolve(process.cwd(),s);await $l.ensureDir(Ri.dirname(P)),await yt.recordFileChange(P),await $l.writeFile(P,O),await xl(m);let j=Ri.extname(s).toLowerCase(),q={".jpg":"image/jpeg",".jpeg":"image/jpeg",".png":"image/png",".webp":"image/webp"}[j]||"image/png";return t.isMultiModal!==!1?{text:`SUCCESS: Image successfully generated from prompt [${n}] and saved to [${s}]. Output attached to multimodal part`,binaryPart:{inlineData:{data:O.toString("base64"),mimeType:q}}}:`SUCCESS: Image successfully generated from prompt [${n}] and saved to [${s}].`}catch(m){return`ERROR: Failed during image generation: ${m instanceof Error?m.message:String(m)}`}}});var Vs,Nl=ae(()=>{Oo();Pt();Vs=async(e,t={})=>{let o=r=>{let i=new RegExp(`${r}\\s*[:=]\\s*(["'])(.*?)\\1(?=\\s*[,)]|\\s+\\w+\\s*[:=]|$)`,"s"),u=e.match(i);return u?u[2].trim():null},n=o("id"),s=o("summary");if(!n||!s)return"ERROR: Missing 'id' or 'summary' for saveSummary tool.";try{let r=fe(So,{}),i=fe(Vo,{});return i[n]=s,delete r[n],De(Vo,i),De(So,r),`SUCCESS: Saved summary and purged raw memories for chat [${n}].`}catch(r){let i=r instanceof Error?r.message:String(r);return`ERROR: Failed to save summary for chat [${n}]: ${i}`}}});var Ss,Bl=ae(()=>{Oo();Pt();Ss=async(e,t={})=>{let n=(s=>{let r=new RegExp(`${s}\\s*[:=]\\s*(["'])(.*?)\\1(?=\\s*[,)]|\\s+\\w+\\s*[:=]|$)`,"s"),i=e.match(r);return i?i[2].trim():null})("id");if(!n)return"ERROR: Missing 'id' parameter for addMemScore tool.";try{let s=fe(Ht,[]),r=!1,i=[];for(let c of s)c.score===void 0&&(c.score=.5),c.id===n?(c.score=Math.min(2,c.score+.2),r=!0):(c.score*=.98,c.score<.05&&(c.score=0)),c.score=Math.round(c.score*1e5)/1e5,c.score>0&&i.push(c);if(De(Ht,i),!r)return`WARNING: Memory ID [${n}] not found. Other memories decayed by -0.01.`;let u=i.find(c=>c.id===n),f=u?u.score.toFixed(2):"deleted (score <= 0)",m=s.length-i.length;return`SUCCESS: Adjusted memory scores. Target [${n}] is now ${f}.${m>0?` Purged ${m} decayed memories.`:""}`}catch(s){let r=s instanceof Error?s.message:String(s);return`ERROR: Failed to adjust memory score for [${n}]: ${r}`}}});import ss from"fs-extra";import Wi from"path";import Yu from"https";async function Yi(e,t=null){let o=t||`https://unpkg.com/tree-sitter-wasms@0.1.13/out/${e}`,n=Wi.join(Mn,e);return await ss.ensureDir(Mn),new Promise((s,r)=>{let i={headers:{"User-Agent":"FluxFlow-Agent"}};Yu.get(o,i,u=>{if([301,302,307,308].includes(u.statusCode)&&u.headers.location){let m=u.headers.location;if(!m.startsWith("http")){let c=new URL(o);m=`${c.protocol}//${c.host}${m}`}Yi(e,m).then(s).catch(r);return}if(u.statusCode!==200){r(new Error(`Failed to download ${e}: HTTP ${u.statusCode}`));return}let f=ss.createWriteStream(n);u.pipe(f),f.on("finish",()=>{f.close(),s()})}).on("error",u=>{ss.existsSync(n)&&ss.unlink(n,()=>{}),r(u)})})}function Ul(e){let t=Wi.join(Mn,e);return ss.existsSync(t)}async function Wl(e){let t=Wi.join(Mn,e);ss.existsSync(t)&&await ss.unlink(t)}var Rl,ji=ae(()=>{Pt();Rl={js:"tree-sitter-javascript.wasm",jsx:"tree-sitter-javascript.wasm",ts:"tree-sitter-typescript.wasm",tsx:"tree-sitter-tsx.wasm",py:"tree-sitter-python.wasm",c:"tree-sitter-c.wasm",cpp:"tree-sitter-cpp.wasm",java:"tree-sitter-java.wasm",html:"tree-sitter-html.wasm"}});import Hi from"fs-extra";import rs from"path";import{createRequire as ju}from"module";function No(e,t=50){if(!e)return"";let o=e.replace(/\s+/g," ").trim();return o.length>t?o.substring(0,t-3)+"...":o}function Kl(e){let t=e.type;if(t==="if_statement"){let n=e.childForFieldName("condition");return n?`if (${No(n.text,40)})`:"if"}if(t==="else_clause")return"else";if(t==="while_statement"||t==="do_statement"){let n=e.childForFieldName("condition");return`${t.split("_")[0]} (${n?No(n.text,40):""})`}if(t==="for_statement"||t==="for_in_statement"||t==="for_of_statement"){let s=e.text.split(`
385
+ `),c}catch(r){return`ERROR: ${r.message}`}}});import $l from"fs-extra";import Ri from"path";var Wu,Ui,_l=ae(()=>{Kt();fr();vr();pn();Wu=(e,t={})=>{try{if(e.length<8||e[0]!==137||e[1]!==80||e[2]!==78||e[3]!==71)return e;let o=[],n=[];for(let i=0;i<256;i++){let u=i;for(let f=0;f<8;f++)u&1?u=3988292384^u>>>1:u=u>>>1;n[i]=u}let s=i=>{let u=4294967295;for(let f=0;f<i.length;f++)u=n[(u^i[f])&255]^u>>>8;return(u^4294967295)>>>0},r=(i,u)=>{let f=Buffer.from(i,"ascii"),m=Buffer.from(u,"utf-8"),c=f.length+1+m.length,a=Buffer.alloc(8+c+4);a.writeUInt32BE(c,0),a.write("tEXt",4,"ascii"),f.copy(a,8),a[8+f.length]=0,m.copy(a,8+f.length+1);let d=s(a.subarray(4,8+c));return a.writeUInt32BE(d,8+c),a};for(let[i,u]of Object.entries(t))u!=null&&o.push(r(i,String(u)));if(o.length===0)return e;if(e.subarray(12,16).toString("ascii")==="IHDR"){let u=e.subarray(0,33),f=e.subarray(33);return Buffer.concat([u,...o,f])}return e}catch{return e}},Ui=async(e,t={})=>{let o=se(e),n=o.prompt||o.text,s=o.path||o.outputPath||o.output||"generated_image.png",r=o.ratio;if(!n)return'ERROR: Missing "prompt" argument for generate_image.';let i=["nsfw","naked","nudity","nude","porn","sex","xxx","erotic","gore","bloody","violence","abuse","suicide","murder","hentai","pedophile","rape"],u=n.toLowerCase();if(i.some(m=>u.includes(m)))return"ERROR: Prompt blocked by system safety filter (inappropriate or unsafe content detected).";try{let m=await hs();if(!await gl(m))return`ERROR: Insufficient Quota for selected quality. Either tell user reduce quality or wait for next refresh cycle (${(await Ar()).nextResetMin||60}m).`;let a=m.imageSettings||{keyType:"Default",quality:"Low-High",apiKey:""},d=a.keyType==="Custom"&&a.apiKey?a.apiKey:FALLBACK_IMAGE_KEY,p={Low:"flux","Low-High":"zimage",Medium:"gptimage","Medium-High":"gptimage",High:"qwen-image",Ultra:"gptimage-large",Premium:"nanobanana-pro"}[a.quality]||"zimage",y=1024,T=1024;if(r){let N=r.replace(/\s+/g,"");N==="16:9"?(y=1024,T=576):N==="9:16"?(y=576,T=1024):N==="4:3"?(y=1024,T=768):N==="3:4"?(y=768,T=1024):N==="1:1"&&(y=1024,T=1024)}let w=Math.floor(Math.random()*1e7),A=`https://gen.pollinations.ai/image/${encodeURIComponent(n)}?model=${p}&width=${y}&height=${T}&seed=${w}&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")}`,$=await fetch(A,{method:"GET",headers:{Authorization:`Bearer ${d}`}});if(!$.ok){let N=$.status,he="";try{he=await $.text()}catch{}return N===402||he.includes("Insufficient balance")||he.includes("PAYMENT_REQUIRED")?"ERROR: Image Generation Currently unavailable. Try again later.":`ERROR: Image Generation failed with status [${N}]: ${he||"Unknown API Error"}`}if(($.headers.get("content-type")||"").includes("application/json")){let N=await $.json();return N.status===402||N.error&&N.error.code==="PAYMENT_REQUIRED"?"ERROR: Image Generation Currently unavailable. Try again later.":`ERROR: Image Generation failed: ${N.error?.message||JSON.stringify(N)}`}let D=await $.arrayBuffer(),O=Buffer.from(D),M={Title:n,Description:"Generated via FluxFlow CLI",Software:"FluxFlow CLI",Author:"FluxFlow","Creation Time":new Date().toISOString(),Prompt:n,Model:`Fluxflow:${p}`,Ratio:r||"1:1",Seed:String(w)};O=Wu(O,M);let P=Ri.resolve(process.cwd(),s);await $l.ensureDir(Ri.dirname(P)),await yt.recordFileChange(P),await $l.writeFile(P,O),await xl(m);let j=Ri.extname(s).toLowerCase(),q={".jpg":"image/jpeg",".jpeg":"image/jpeg",".png":"image/png",".webp":"image/webp"}[j]||"image/png";return t.isMultiModal!==!1?{text:`SUCCESS: Image successfully generated from prompt [${n}] and saved to [${s}]. Output attached to multimodal part`,binaryPart:{inlineData:{data:O.toString("base64"),mimeType:q}}}:`SUCCESS: Image successfully generated from prompt [${n}] and saved to [${s}].`}catch(m){return`ERROR: Failed during image generation: ${m instanceof Error?m.message:String(m)}`}}});var Vs,Nl=ae(()=>{Oo();Pt();Vs=async(e,t={})=>{let o=r=>{let i=new RegExp(`${r}\\s*[:=]\\s*(["'])(.*?)\\1(?=\\s*[,)]|\\s+\\w+\\s*[:=]|$)`,"s"),u=e.match(i);return u?u[2].trim():null},n=o("id"),s=o("summary");if(!n||!s)return"ERROR: Missing 'id' or 'summary' for saveSummary tool.";try{let r=fe(So,{}),i=fe(Vo,{});return i[n]=s,delete r[n],De(Vo,i),De(So,r),`SUCCESS: Saved summary and purged raw memories for chat [${n}].`}catch(r){let i=r instanceof Error?r.message:String(r);return`ERROR: Failed to save summary for chat [${n}]: ${i}`}}});var Ss,Bl=ae(()=>{Oo();Pt();Ss=async(e,t={})=>{let n=(s=>{let r=new RegExp(`${s}\\s*[:=]\\s*(["'])(.*?)\\1(?=\\s*[,)]|\\s+\\w+\\s*[:=]|$)`,"s"),i=e.match(r);return i?i[2].trim():null})("id");if(!n)return"ERROR: Missing 'id' parameter for addMemScore tool.";try{let s=fe(Ht,[]),r=!1,i=[];for(let c of s)c.score===void 0&&(c.score=.5),c.id===n?(c.score=Math.min(2,c.score+.2),r=!0):(c.score*=.98,c.score<.05&&(c.score=0)),c.score=Math.round(c.score*1e5)/1e5,c.score>0&&i.push(c);if(De(Ht,i),!r)return`WARNING: Memory ID [${n}] not found. Other memories decayed by -0.01.`;let u=i.find(c=>c.id===n),f=u?u.score.toFixed(2):"deleted (score <= 0)",m=s.length-i.length;return`SUCCESS: Adjusted memory scores. Target [${n}] is now ${f}.${m>0?` Purged ${m} decayed memories.`:""}`}catch(s){let r=s instanceof Error?s.message:String(s);return`ERROR: Failed to adjust memory score for [${n}]: ${r}`}}});import ss from"fs-extra";import Wi from"path";import Yu from"https";async function Yi(e,t=null){let o=t||`https://unpkg.com/tree-sitter-wasms@0.1.13/out/${e}`,n=Wi.join(Mn,e);return await ss.ensureDir(Mn),new Promise((s,r)=>{let i={headers:{"User-Agent":"FluxFlow-Agent"}};Yu.get(o,i,u=>{if([301,302,307,308].includes(u.statusCode)&&u.headers.location){let m=u.headers.location;if(!m.startsWith("http")){let c=new URL(o);m=`${c.protocol}//${c.host}${m}`}Yi(e,m).then(s).catch(r);return}if(u.statusCode!==200){r(new Error(`Failed to download ${e}: HTTP ${u.statusCode}`));return}let f=ss.createWriteStream(n);u.pipe(f),f.on("finish",()=>{f.close(),s()})}).on("error",u=>{ss.existsSync(n)&&ss.unlink(n,()=>{}),r(u)})})}function Ul(e){let t=Wi.join(Mn,e);return ss.existsSync(t)}async function Wl(e){let t=Wi.join(Mn,e);ss.existsSync(t)&&await ss.unlink(t)}var Rl,ji=ae(()=>{Pt();Rl={js:"tree-sitter-javascript.wasm",jsx:"tree-sitter-javascript.wasm",ts:"tree-sitter-typescript.wasm",tsx:"tree-sitter-tsx.wasm",py:"tree-sitter-python.wasm",c:"tree-sitter-c.wasm",cpp:"tree-sitter-cpp.wasm",java:"tree-sitter-java.wasm",html:"tree-sitter-html.wasm"}});import Hi from"fs-extra";import rs from"path";import{createRequire as ju}from"module";function No(e,t=50){if(!e)return"";let o=e.replace(/\s+/g," ").trim();return o.length>t?o.substring(0,t-3)+"...":o}function Xl(e){let t=e.type;if(t==="if_statement"){let n=e.childForFieldName("condition");return n?`if (${No(n.text,40)})`:"if"}if(t==="else_clause")return"else";if(t==="while_statement"||t==="do_statement"){let n=e.childForFieldName("condition");return`${t.split("_")[0]} (${n?No(n.text,40):""})`}if(t==="for_statement"||t==="for_in_statement"||t==="for_of_statement"){let s=e.text.split(`
385
386
  `)[0].match(/for\s*(?:await\s*)?\((.*)\)/);return s?`for (${No(s[1],40)})`:"for"}if(t==="switch_statement"){let n=e.childForFieldName("value");return`switch (${n?No(n.text,40):""})`}if(t==="try_statement")return"try";if(t==="catch_clause")return"catch";if(t==="element"||t==="script_element"||t==="style_element"||t==="jsx_element"||t==="jsx_self_closing_element"){let n=e.childForFieldName("opening_element")||e.childForFieldName("start_tag")||e.children.find(r=>r.type==="start_tag")||e,s=n.childForFieldName("name")||n.childForFieldName("tag_name")||n.children.find(r=>r.type==="tag_name");return s?`<${No(s.text,30)}>`:null}if(["import_declaration","import_from_statement","import_statement","preproc_include"].includes(t))return No(e.text.split(`
386
- `)[0],60);if(t==="pair"){let n=e.childForFieldName("key");return n?No(n.text.replace(/["']/g,""),40):null}if(t==="assignment_expression"){let n=e.childForFieldName("left");return n?`${No(n.text,30)} = ...`:null}if(t==="variable_declarator"){let n=e.childForFieldName("name")||e.children.find(s=>["identifier","object_pattern","array_pattern"].includes(s.type));return n?No(n.text,40):null}let o=e.childForFieldName("name")||e.childForFieldName("declarator")||e.children.find(n=>["identifier","type_identifier","field_identifier","property_identifier","shorthand_property_identifier"].includes(n.type));if(o){if(o.type.includes("declarator")){let n=o.descendantsOfType("identifier")[0]||o.descendantsOfType("field_identifier")[0];if(n)return No(n.text,40)}return No(o.text,40)}if(["arrow_function","function_expression","function_declaration"].includes(t)){let n=e.parent;for(;n&&n.type!=="program";){let s=Kl(n);if(s)return s;if(!Xl.has(n.type))break;n=n.parent}}return null}function Hu(e){let t=[];function o(n){for(let s of n.children)Gl.has(s.type)?t.push(s):o(s)}return o(e),t}function Gu(e){return e.replace(/_([a-z])/g,t=>t[1].toUpperCase())}function Vl(e,t=0,o=!0,n="",s=null){if(t>12)return"";let i=e.type,u=Kl(e),f=Gl.has(i)||t===0,m=Hu(e),c=f&&t>0&&(Xl.has(i)&&m.length>0||u!==null&&u===s&&m.length>0),a="",d=n,h=t,p=s;if(f&&!c){let y=e.startPosition.row+1,T=e.endPosition.row+1,w=Gu(i),E=u?`${w} [${u}]`:w;t===0?(a+=`\u{1F4C1} ROOT (Lines: ${y}-${T})
387
+ `)[0],60);if(t==="pair"){let n=e.childForFieldName("key");return n?No(n.text.replace(/["']/g,""),40):null}if(t==="assignment_expression"){let n=e.childForFieldName("left");return n?`${No(n.text,30)} = ...`:null}if(t==="variable_declarator"){let n=e.childForFieldName("name")||e.children.find(s=>["identifier","object_pattern","array_pattern"].includes(s.type));return n?No(n.text,40):null}let o=e.childForFieldName("name")||e.childForFieldName("declarator")||e.children.find(n=>["identifier","type_identifier","field_identifier","property_identifier","shorthand_property_identifier"].includes(n.type));if(o){if(o.type.includes("declarator")){let n=o.descendantsOfType("identifier")[0]||o.descendantsOfType("field_identifier")[0];if(n)return No(n.text,40)}return No(o.text,40)}if(["arrow_function","function_expression","function_declaration"].includes(t)){let n=e.parent;for(;n&&n.type!=="program";){let s=Xl(n);if(s)return s;if(!Kl.has(n.type))break;n=n.parent}}return null}function Hu(e){let t=[];function o(n){for(let s of n.children)Gl.has(s.type)?t.push(s):o(s)}return o(e),t}function Gu(e){return e.replace(/_([a-z])/g,t=>t[1].toUpperCase())}function Vl(e,t=0,o=!0,n="",s=null,r=12){let i=e.type,u=Xl(e),f=Gl.has(i)||t===0,m=Hu(e),c=f&&t>0&&(Kl.has(i)&&m.length>0||u!==null&&u===s&&m.length>0),a="",d=n,h=t,p=s;if(f&&!c){let y=e.startPosition.row+1,T=e.endPosition.row+1,w=Gu(i),E=u?`${w} [${u}]`:w;t===0?(a+=`\u{1F4C1} ROOT (Lines: ${y}-${T})
387
388
  `,d=n):(a+=`${n}${o?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 "}${E} (Lines: ${y}-${T})
388
- `,d+=o?" ":"\u2502 "),h=t+1,p=u}return m.forEach((y,T)=>{let w=T===m.length-1;a+=Vl(y,h,c?o&&w:w,d,p)}),a}var Hl,Yl,jl,Gl,Xl,Gi,ql=ae(()=>{ji();Pt();Xt();Hl=ju(import.meta.url),Yl=Hl("web-tree-sitter"),jl=!1,Gl=new Set(["class_declaration","function_declaration","method_definition","arrow_function","function_expression","if_statement","else_clause","for_statement","for_in_statement","for_of_statement","while_statement","do_statement","switch_statement","try_statement","catch_clause","variable_declarator","export_statement","lexical_declaration","variable_declaration","interface_declaration","type_alias_declaration","enum_declaration","import_declaration","jsx_element","jsx_self_closing_element","class_definition","function_definition","decorated_definition","import_from_statement","import_statement","preproc_include","method_declaration","constructor_declaration","assignment_expression","pair","class_specifier","struct_specifier","enum_specifier","field_declaration","element","script_element","style_element"]),Xl=new Set(["export_statement","lexical_declaration","variable_declaration","variable_declarator","pair","assignment_expression"]);Gi=async e=>{let t;try{t=se(e).path}catch{return`ERROR: Failed to parse arguments: ${e}`}if(!t)return'ERROR: No file path provided. Use [tool:functions.FileMap(path="...")]';let o=rs.isAbsolute(t)?t:rs.resolve(process.cwd(),t);if(!Hi.existsSync(o))return`ERROR: File not found: ${t}`;let n=rs.extname(o).slice(1).toLowerCase(),s=Rl[n];if(!s)return`ERROR: Unsupported file extension: .${n}`;let r=rs.resolve(Mn,s);if(!Hi.existsSync(r))return`ERROR: Parser for .${n} not found. Please download it in Settings > Other.`;try{let i=Yl.Parser;if(!jl){let d;try{d=rs.join(rs.dirname(Hl.resolve("web-tree-sitter")),"tree-sitter.wasm")}catch{d=rs.join(process.cwd(),"node_modules","web-tree-sitter","tree-sitter.wasm")}await i.init({locateFile:h=>h==="tree-sitter.wasm"||h.endsWith("tree-sitter.wasm")?d:h}),jl=!0}let u=new i,f=await Yl.Language.load(r);u.setLanguage(f);let m=await Hi.readFile(o,"utf8"),c=u.parse(m),a=Vl(c.rootNode,0,!0," ");return`\u{1F4C4} File Map for: ${t}
389
- ${a}`}catch(i){let u=i instanceof Error?i.message:typeof i=="object"?JSON.stringify(i):String(i),f=i instanceof Error?`
390
- Stack: ${i.stack}`:"";return`ERROR: Failed to map file: ${u}${f}`}}});import _n from"fs";import zl from"path";var Lr,Jl=ae(()=>{Xt();Pt();Lr=async(e,t={})=>{let{method:o,tasks:n,markDone:s}=se(e),r=t.chatId||"default";if(!o)return'ERROR: Missing "method" argument for todo tool (create/append/get).';let i=zl.join(es,"plan",r),u=zl.join(i,"todo.md"),f=c=>{if(!c||Array.isArray(c))return c;let a=String(c).trim();if(a.startsWith("[")&&a.endsWith("]")){let d=a.match(/"([^"\\]*(?:\\.[^"\\]*)*)"|'([^'\\]*(?:\\.[^'\\]*)*)'/g);return d?d.map(h=>h.slice(1,-1).replace(/\\(.)/g,"$1")):a.slice(1,-1).split(",").map(h=>h.trim()).filter(Boolean)}return c},m=c=>{let a=f(c);return a?(Array.isArray(a)?a:String(a).split(`
389
+ `,d+=o?" ":"\u2502 "),h=t+1,p=u}return h>r&&m.length>0?a+=`${d}\u2514\u2500\u2500 ... depth exceeded ...
390
+ `:m.forEach((y,T)=>{let w=T===m.length-1;a+=Vl(y,h,c?o&&w:w,d,p,r)}),a}var Hl,Yl,jl,Gl,Kl,Gi,ql=ae(()=>{ji();Pt();Kt();Hl=ju(import.meta.url),Yl=Hl("web-tree-sitter"),jl=!1,Gl=new Set(["class_declaration","function_declaration","method_definition","arrow_function","function_expression","if_statement","else_clause","for_statement","for_in_statement","for_of_statement","while_statement","do_statement","switch_statement","try_statement","catch_clause","variable_declarator","export_statement","lexical_declaration","variable_declaration","interface_declaration","type_alias_declaration","enum_declaration","import_declaration","jsx_element","jsx_self_closing_element","class_definition","function_definition","decorated_definition","import_from_statement","import_statement","preproc_include","method_declaration","constructor_declaration","assignment_expression","pair","class_specifier","struct_specifier","enum_specifier","field_declaration","element","script_element","style_element"]),Kl=new Set(["export_statement","lexical_declaration","variable_declaration","variable_declarator","pair","assignment_expression"]);Gi=async e=>{let t;try{t=se(e).path}catch{return`ERROR: Failed to parse arguments: ${e}`}if(!t)return'ERROR: No file path provided. Use [tool:functions.FileMap(path="...")]';let o=rs.isAbsolute(t)?t:rs.resolve(process.cwd(),t);if(!Hi.existsSync(o))return`ERROR: File not found: ${t}`;let n=rs.extname(o).slice(1).toLowerCase(),s=Rl[n];if(!s)return`ERROR: Unsupported file extension: .${n}`;let r=rs.resolve(Mn,s);if(!Hi.existsSync(r))return`ERROR: Parser for .${n} not found. Please download it in Settings > Other.`;try{let i=Yl.Parser;if(!jl){let p;try{p=rs.join(rs.dirname(Hl.resolve("web-tree-sitter")),"tree-sitter.wasm")}catch{p=rs.join(process.cwd(),"node_modules","web-tree-sitter","tree-sitter.wasm")}await i.init({locateFile:y=>y==="tree-sitter.wasm"||y.endsWith("tree-sitter.wasm")?p:y}),jl=!0}let u=new i,f=await Yl.Language.load(r);u.setLanguage(f);let m=await Hi.readFile(o,"utf8"),c=m.split(`
391
+ `).length,a=12;c>1e4?a=2:c>=8e3?a=3:c>=5e3?a=5:c>=4e3?a=8:c>2e3&&(a=10);let d=u.parse(m),h=Vl(d.rootNode,0,!0," ",null,a);return`\u{1F4C4} File Map for: ${t}
392
+ ${h}`}catch(i){let u=i instanceof Error?i.message:typeof i=="object"?JSON.stringify(i):String(i),f=i instanceof Error?`
393
+ Stack: ${i.stack}`:"";return`ERROR: Failed to map file: ${u}${f}`}}});import _n from"fs";import zl from"path";var Lr,Jl=ae(()=>{Kt();Pt();Lr=async(e,t={})=>{let{method:o,tasks:n,markDone:s}=se(e),r=t.chatId||"default";if(!o)return'ERROR: Missing "method" argument for todo tool (create/append/get).';let i=zl.join(es,"plan",r),u=zl.join(i,"todo.md"),f=c=>{if(!c||Array.isArray(c))return c;let a=String(c).trim();if(a.startsWith("[")&&a.endsWith("]")){let d=a.match(/"([^"\\]*(?:\\.[^"\\]*)*)"|'([^'\\]*(?:\\.[^'\\]*)*)'/g);return d?d.map(h=>h.slice(1,-1).replace(/\\(.)/g,"$1")):a.slice(1,-1).split(",").map(h=>h.trim()).filter(Boolean)}return c},m=c=>{let a=f(c);return a?(Array.isArray(a)?a:String(a).split(`
391
394
  `)).map(h=>{let p=String(h).trim();return p?p.startsWith("- [ ]")||p.startsWith("- [x]")||p.startsWith("- [X]")?p:`- [ ] ${p}`:null}).filter(Boolean).join(`
392
395
  `)+`
393
396
  `:""};try{if(_n.existsSync(i)||_n.mkdirSync(i,{recursive:!0}),o==="create"){if(!n)return'ERROR: Missing "tasks" for create method.';let c=m(n);return _n.writeFileSync(u,c,"utf8"),`SUCCESS: TASK LIST CREATED (${(c.match(/^- \[ [xX ]\]/gm)||[]).length} total)
@@ -395,15 +398,15 @@ ${c}`}if(o==="append"){if(!n)return'ERROR: Missing "tasks" for append method.';l
395
398
  ${a}`}if(o==="get"){if(!_n.existsSync(u))return"TODO GET: No task list found for this session.";let c=_n.readFileSync(u,"utf8"),a=0;if(s){let y=f(s),T=(Array.isArray(y)?y:[y]).map(A=>String(A).replace(/^- \[[xX ]\]\s*/i,"").trim()).filter(Boolean),w=c.split(`
396
399
  `),E=!1;for(let A of T){let $=!1;for(let W=0;W<w.length;W++)if(w[W].includes(A)&&/^- \[\s\]/.test(w[W].trim())){w[W]=w[W].replace("- [ ]","- [x]"),$=!0,E=!0,a++;break}if(!$){for(let W=0;W<w.length;W++)if(w[W].toLowerCase().includes(A.toLowerCase())&&/^- \[\s\]/.test(w[W].trim())){w[W]=w[W].replace("- [ ]","- [x]"),$=!0,E=!0,a++;break}}}E&&(c=w.join(`
397
400
  `),_n.writeFileSync(u,c,"utf8"))}let d=(c.match(/^- \[ [xX ]\]/gm)||[]).length,h=(c.match(/^- \[x\]/gim)||[]).length;return`${a>0?`SUCCESS: ${a} TASK(S) MARKED DONE`:"TODO GET"}: ${h} Completed, ${d-h} left
398
- ${c}`}return`ERROR: Unknown method "${o}". Use create, append, or get.`}catch(c){return`ERROR: Todo tool failure: ${c instanceof Error?c.message:String(c)}`}}});var Xu,Pr,Ql=ae(async()=>{yl();wl();Tl();Sl();bl();kl();Il();await js();Al();vl();Dl();Ll();Fl();_l();Nl();Bl();ql();Jl();Xu={web_search:Ci,web_scrape:ki,memory:Ii,chat:Mi,view_file:Ai,write_file:vi,update_file:Oi,exec_command:li,read_folder:Li,write_pdf:Fi,write_docx:_i,search_keyword:Bi,generate_image:Ui,saveSummary:Vs,addMemScore:Ss,file_map:Gi,todo:Lr,ask:Pi,Ask:Pi,WebSearch:Ci,WebScrape:ki,ReadFile:Ai,ReadFolder:Li,WriteFile:vi,PatchFile:Oi,WritePDF:Fi,WriteDoc:_i,Run:li,SearchKeyword:Bi,Memory:Ii,Chat:Mi,GenerateImage:Ui,saveSumary:Vs,SaveSummary:Vs,SaveSumary:Vs,add_mem_score:Ss,AddMemScore:Ss,addMemoryScore:Ss,AddMemoryScore:Ss,FileMap:Gi,Todo:Lr,TODO:Lr},Pr=async(e,t,o={})=>{let n=o.mode?o.mode.toLowerCase():"flux",s=e.toLowerCase();if(!(["memory","chat","savesummary","addmemscore","add_mem_score","ask","web_search","web_scrape"].some(f=>s.includes(f))||s==="ask")){if(n==="flow"){if(!(s.includes("write_pdf")||s.includes("write_docx")||s.includes("generate_image")))return`ERROR: Tool [${e}] is a Workspace Tool and NOT available in Flow mode. Tell user to switch (\`/mode flux\`) to use this tool.`}else if(s.includes("write_pdf")||s.includes("write_docx")||s.includes("generate_image"))return`ERROR: Tool [${e}] is not available in Flux mode. Tell user to switch (\`/mode flow\`) for document generation.`}let u=Xu[e];if(!u)return`ERROR: Tool [${e}] not found in registry.`;try{return await u(t,o)}catch(f){let m=f instanceof Error?f.message:String(f);return`ERROR: Execution failed for [${e}]: ${m}`}}});import{WebSocket as Fr}from"ws";var xo,Es,Ku,Xi,bs,Ki,Zl,Vi,qi,ec,$r,Qo,_r,qs,tc,zi,oc,Ji=ae(()=>{xo=null,Es=!1,Ku="ws://localhost:56832",Xi=[],bs=null,Ki=null,Zl="2.0.0",Vi=e=>{Zl=e,ec()},qi=e=>{Ki=e},ec=()=>{if(xo||Es)return;Es=!0;let e=new Fr(Ku);e.on("open",()=>{for(xo=e,Es=!1,xo.send(JSON.stringify({command:"version",version:Zl,pid:process.pid,ppid:process.ppid}));Xi.length>0;)xo.send(JSON.stringify(Xi.shift()))}),e.on("message",t=>{try{let o=JSON.parse(t.toString());o.command==="contextResponse"&&bs?(bs(o.data),bs=null):o.command==="securityResponse"&&Ki&&Ki(o.result)}catch{}}),e.on("error",()=>{Es=!1,xo=null}),e.on("close",()=>{Es=!1,xo=null})},$r=e=>{xo&&xo.readyState===Fr.OPEN?xo.send(JSON.stringify(e)):(Xi.push(e),Es||ec())},Qo=()=>xo!==null&&xo.readyState===Fr.OPEN,_r=e=>{$r({command:"status",status:e})},qs=()=>new Promise(e=>{if(!xo||xo.readyState!==Fr.OPEN){e({cursor_line:0,selected:0,manual_edits:"",file_focused:"none",opened_editors:[]});return}bs=e,xo.send(JSON.stringify({command:"requestContext"})),setTimeout(()=>{bs===e&&(e({cursor_line:0,selected:0,manual_edits:"",file_focused:"none",opened_editors:[]}),bs=null)},1e3)}),tc=e=>{$r({command:"open",filePath:e})},zi=(e,t,o)=>{$r({command:"showDiff",filePath:e,originalContent:t,modifiedContent:o})},oc=(e,t)=>{$r({command:"closeDiff",filePath:e,result:t})}});import{GoogleGenAI as Vu,ThinkingLevel as Ro,HarmBlockThreshold as Nn,HarmCategory as Bn}from"@google/genai";import Ae from"path";import tt from"fs";var Cs,Zi,Bo,qu,Qi,zu,Ju,ta,oa,na,sa,rc,nc,Qu,ic,Zu,ac,ed,sc,ra,zs,ea,td,ia,lc,cc,uc=ae(async()=>{await sl();Xs();vr();await Ql();Oo();Xt();un();os();Pt();pn();Ji();Cs=null,Zi={},Bo=!1,qu=["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","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"],Qi=e=>{if(!e)return!1;let t=e.toLowerCase();return t.startsWith("gemini-")||t.startsWith("gemma-")?!0:qu.some(o=>o.toLowerCase()===t)},zu=e=>{let t=[];return e.forEach(o=>{if(!((o.role==="user"||o.role==="agent"||o.role==="system")&&o.role!=="think"&&!o.isVisualFeedback&&!o.isMeta&&!String(o.id).startsWith("welcome")))return;let s=o.fullText||o.text||"";if(o.role==="system"&&s?.startsWith("[TOOL RESULT]")){let r=t[t.length-1];if(r&&r.role==="system"&&r.text?.startsWith("[TOOL RESULT]")){r.text+=`
401
+ ${c}`}return`ERROR: Unknown method "${o}". Use create, append, or get.`}catch(c){return`ERROR: Todo tool failure: ${c instanceof Error?c.message:String(c)}`}}});var Ku,Pr,Ql=ae(async()=>{yl();wl();Tl();Sl();bl();kl();Il();await js();Al();vl();Dl();Ll();Fl();_l();Nl();Bl();ql();Jl();Ku={web_search:Ci,web_scrape:ki,memory:Ii,chat:Mi,view_file:Ai,write_file:vi,update_file:Oi,exec_command:li,read_folder:Li,write_pdf:Fi,write_docx:_i,search_keyword:Bi,generate_image:Ui,saveSummary:Vs,addMemScore:Ss,file_map:Gi,todo:Lr,ask:Pi,Ask:Pi,WebSearch:Ci,WebScrape:ki,ReadFile:Ai,ReadFolder:Li,WriteFile:vi,PatchFile:Oi,WritePDF:Fi,WriteDoc:_i,Run:li,SearchKeyword:Bi,Memory:Ii,Chat:Mi,GenerateImage:Ui,saveSumary:Vs,SaveSummary:Vs,SaveSumary:Vs,add_mem_score:Ss,AddMemScore:Ss,addMemoryScore:Ss,AddMemoryScore:Ss,FileMap:Gi,Todo:Lr,TODO:Lr},Pr=async(e,t,o={})=>{let n=o.mode?o.mode.toLowerCase():"flux",s=e.toLowerCase();if(!(["memory","chat","savesummary","addmemscore","add_mem_score","ask","web_search","web_scrape"].some(f=>s.includes(f))||s==="ask")){if(n==="flow"){if(!(s.includes("write_pdf")||s.includes("write_docx")||s.includes("generate_image")))return`ERROR: Tool [${e}] is a Workspace Tool and NOT available in Flow mode. Tell user to switch (\`/mode flux\`) to use this tool.`}else if(s.includes("write_pdf")||s.includes("write_docx")||s.includes("generate_image"))return`ERROR: Tool [${e}] is not available in Flux mode. Tell user to switch (\`/mode flow\`) for document generation.`}let u=Ku[e];if(!u)return`ERROR: Tool [${e}] not found in registry.`;try{return await u(t,o)}catch(f){let m=f instanceof Error?f.message:String(f);return`ERROR: Execution failed for [${e}]: ${m}`}}});import{WebSocket as Fr}from"ws";var xo,Es,Xu,Ki,bs,Xi,Zl,Vi,qi,ec,$r,Qo,_r,qs,tc,zi,oc,Ji=ae(()=>{xo=null,Es=!1,Xu="ws://localhost:56832",Ki=[],bs=null,Xi=null,Zl="2.0.0",Vi=e=>{Zl=e,ec()},qi=e=>{Xi=e},ec=()=>{if(xo||Es)return;Es=!0;let e=new Fr(Xu);e.on("open",()=>{for(xo=e,Es=!1,xo.send(JSON.stringify({command:"version",version:Zl,pid:process.pid,ppid:process.ppid}));Ki.length>0;)xo.send(JSON.stringify(Ki.shift()))}),e.on("message",t=>{try{let o=JSON.parse(t.toString());o.command==="contextResponse"&&bs?(bs(o.data),bs=null):o.command==="securityResponse"&&Xi&&Xi(o.result)}catch{}}),e.on("error",()=>{Es=!1,xo=null}),e.on("close",()=>{Es=!1,xo=null})},$r=e=>{xo&&xo.readyState===Fr.OPEN?xo.send(JSON.stringify(e)):(Ki.push(e),Es||ec())},Qo=()=>xo!==null&&xo.readyState===Fr.OPEN,_r=e=>{$r({command:"status",status:e})},qs=()=>new Promise(e=>{if(!xo||xo.readyState!==Fr.OPEN){e({cursor_line:0,selected:0,manual_edits:"",file_focused:"none",opened_editors:[]});return}bs=e,xo.send(JSON.stringify({command:"requestContext"})),setTimeout(()=>{bs===e&&(e({cursor_line:0,selected:0,manual_edits:"",file_focused:"none",opened_editors:[]}),bs=null)},1e3)}),tc=e=>{$r({command:"open",filePath:e})},zi=(e,t,o)=>{$r({command:"showDiff",filePath:e,originalContent:t,modifiedContent:o})},oc=(e,t)=>{$r({command:"closeDiff",filePath:e,result:t})}});import{GoogleGenAI as Vu,ThinkingLevel as Ro,HarmBlockThreshold as Nn,HarmCategory as Bn}from"@google/genai";import Ae from"path";import tt from"fs";var Cs,Zi,Bo,qu,Qi,zu,Ju,ta,oa,na,sa,rc,nc,Qu,ic,Zu,ac,ed,sc,ra,zs,ea,td,ia,lc,cc,uc=ae(async()=>{await sl();Ks();vr();await Ql();Oo();Kt();un();os();Pt();pn();Ji();Cs=null,Zi={},Bo=!1,qu=["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","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"],Qi=e=>{if(!e)return!1;let t=e.toLowerCase();return t.startsWith("gemini-")||t.startsWith("gemma-")?!0:qu.some(o=>o.toLowerCase()===t)},zu=e=>{let t=[];return e.forEach(o=>{if(!((o.role==="user"||o.role==="agent"||o.role==="system")&&o.role!=="think"&&!o.isVisualFeedback&&!o.isMeta&&!String(o.id).startsWith("welcome")))return;let s=o.fullText||o.text||"";if(o.role==="system"&&s?.startsWith("[TOOL RESULT]")){let r=t[t.length-1];if(r&&r.role==="system"&&r.text?.startsWith("[TOOL RESULT]")){r.text+=`
399
402
 
400
403
  `+s;return}}t.push({...o,text:s})}),t.length},Ju=e=>typeof e!="string"?e:e.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),ta=async(e,t,o=5,n=1e3)=>{let s=t?.signal;for(let r=0;r<o;r++){if(s?.aborted)throw new DOMException("The user aborted a request.","AbortError");try{let i=await fetch(e,t);if(i.ok||i.status!==429&&i.status<500)return i}catch(i){if(i.name==="AbortError"||s?.aborted||r===o-1)throw i}s?await new Promise((i,u)=>{let f=setTimeout(()=>{s.removeEventListener("abort",m),i()},Math.min(24e3,n*Math.pow(2,r))),m=()=>{clearTimeout(f),u(new DOMException("The user aborted a request.","AbortError"))};s.addEventListener("abort",m)}):await new Promise(i=>setTimeout(i,Math.min(24e3,n*Math.pow(2,r))))}if(s?.aborted)throw new DOMException("The user aborted a request.","AbortError");return fetch(e,t)},oa=async function*(e,t,o,n,s,r,i,u){let f=[];n&&f.push({role:"system",content:n});for(let E of o){let A=E.role==="user"?"user":"assistant",$=[];if(Array.isArray(E.parts)){for(let W of E.parts)if(W.text)$.push({type:"text",text:W.text});else if(W.inlineData&&i){let D=W.inlineData.mimeType,O=W.inlineData.data;D.startsWith("image/")&&$.push({type:"image_url",image_url:{url:`data:${D};base64,${O}`}})}}else{let W=E.text||"";W&&$.push({type:"text",text:W})}f.push({role:A,content:$.length===1&&$[0].type==="text"?$[0].text:$})}let m={model:t,messages:f,stream:!0,stream_options:{include_usage:!0}};if(s!=="Fast"){let E={Low:"high",Medium:"high",Standard:"high",High:"max",xHigh:"max"};m.reasoning_effort=E[s]||"high",m.extra_body={thinking:{type:"enabled"}}}else m.extra_body={thinking:{type:"disabled"}};let c=await ta("https://api.deepseek.com/chat/completions",{method:"POST",headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json"},body:JSON.stringify(m),signal:u});if(!c.ok){let E=await c.json().catch(()=>({}));throw new Error(`DeepSeek Error (${c.status}): ${E.error?.message||c.statusText}`)}let a=c.body.getReader(),d=new TextDecoder,h="",p=[],y=null,T=Date.now(),w=!1;for(;;){let{done:E,value:A}=await a.read();if(E){w&&(p.length>0||y)&&(yield{candidates:p.length>0?[{content:{parts:p}}]:[],usageMetadata:y});break}h+=d.decode(A,{stream:!0});let $=h.split(`
401
404
  `);h=$.pop();for(let W of $){let D=W.trim();if(!(!D||!D.startsWith("data: "))){if(D==="data: [DONE]")break;try{let O=JSON.parse(D.substring(6)),M=O.choices?.[0]?.delta,P=O.usage;if(P&&(y={totalTokenCount:P.total_tokens||P.prompt_tokens+P.completion_tokens,promptTokenCount:P.prompt_tokens||0,candidatesTokenCount:P.completion_tokens||0,cachedContentTokenCount:P.prompt_tokens_details?.cached_tokens||0,thoughtsTokenCount:P.completion_tokens_details?.reasoning_tokens||0},w=!0),M){let j=M.reasoning_content||null;j&&(p.push({text:j,thought:!0}),w=!0),M.content&&(p.push({text:M.content}),w=!0)}}catch{}}}Date.now()-T>=150&&w&&(yield{candidates:p.length>0?[{content:{parts:[...p]}}]:[],usageMetadata:y},p=[],T=Date.now(),w=!1)}},na=async function*(e,t,o,n,s,r,i=!1,u){let f=[];n&&f.push({role:"system",content:n}),o.forEach(q=>{let Y=q.role==="model"?"assistant":"user",N=[];Array.isArray(q.parts)&&q.parts.forEach(he=>{if(he.text)N.push({type:"text",text:he.text});else if(he.inlineData&&i){let ee=he.inlineData.mimeType,Me=he.inlineData.data;ee.startsWith("image/")&&N.push({type:"image_url",image_url:{url:`data:${ee};base64,${Me}`}})}}),f.push({role:Y,content:N.length===1&&N[0].type==="text"?N[0].text:N})});let c={Fast:"Fast",Low:"Fast",Medium:"Standard",Standard:"Standard",High:"High",xHigh:"High"}[s]||"Standard",a=c!=="Fast",d=t.includes("kimi"),h=t.includes("gemma"),p=t.includes("deepseek"),y=t.includes("glm"),T=t.includes("mistral"),w=t.includes("minimax"),A={model:t,messages:f,max_tokens:w||p?16384:32768,stream:!0,stream_options:{include_usage:!0}};if(d)A.chat_template_kwargs={thinking:a};else if(h)A.chat_template_kwargs={enable_thinking:a};else if(p)if(a){let q=c==="High"?"max":"high";A.chat_template_kwargs={thinking:!0,reasoning_effort:q}}else A.chat_template_kwargs={thinking:!1};else y?A.chat_template_kwargs={enable_thinking:a,clear_thinking:!a}:T?A.reasoning_effort=a?"high":"none":w&&t.includes("minimax-m3")&&(A.chat_template_kwargs={thinking_mode:a?"enabled":"disabled"});let $=await ta("https://integrate.api.nvidia.com/v1/chat/completions",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify(A),signal:u});if(!$.ok){let q=await $.json(),Y=new Error(`NVIDIA API Error: ${q.error?.message||$.statusText}`);throw Y.status=$.status,Y}let W=$.body.getReader(),D=new TextDecoder,O="",M=[],P=null,j=Date.now(),G=!1;for(;;){let{done:q,value:Y}=await W.read();if(q){G&&(M.length>0||P)&&(yield{candidates:M.length>0?[{content:{parts:M}}]:[],usageMetadata:P});break}O+=D.decode(Y,{stream:!0});let N=O.split(`
402
- `);O=N.pop();for(let he of N){let ee=he.trim();if(!(!ee||ee==="data: [DONE]")&&ee.startsWith("data: "))try{let Me=JSON.parse(ee.substring(6)),le=Me.usage;le&&(P={totalTokenCount:le.total_tokens||le.prompt_tokens+le.completion_tokens,promptTokenCount:le.prompt_tokens||0,candidatesTokenCount:le.completion_tokens||0,thoughtsTokenCount:(le.completion_tokens_details?.reasoning_tokens||0)+(le.completion_tokens_details?.thoughts_tokens||0)},G=!0);let ue=Me.choices?.[0]?.delta?.reasoning||Me.choices?.[0]?.delta?.reasoning_content||"",Ke=Me.choices?.[0]?.delta?.content||"";ue&&(M.push({text:ue,thought:!0}),G=!0),Ke&&(M.push({text:Ke}),G=!0)}catch{}}Date.now()-j>=350&&G&&(yield{candidates:M.length>0?[{content:{parts:[...M]}}]:[],usageMetadata:P},M=[],j=Date.now(),G=!1)}},sa=async function*(e,t,o,n,s,r,i,u){let f=[];n&&f.push({role:"system",content:n});for(let $ of o){let W=$.role==="user"?"user":"assistant",D=[];if(Array.isArray($.parts)){for(let O of $.parts)if(O.text)D.push({type:"text",text:O.text});else if(O.inlineData&&i){let M=O.inlineData.mimeType,P=O.inlineData.data;M.startsWith("image/")?D.push({type:"image_url",image_url:{url:`data:${M};base64,${P}`}}):D.push({type:"file",file:{filename:O.filename||"file",file_data:`data:${M};base64,${P}`}})}}else{let O=$.text||"";O&&D.push({type:"text",text:O})}f.push({role:W,content:D.length===1&&D[0].type==="text"?D[0].text:D})}let m={Low:"low",Medium:"medium",Standard:"medium",High:"high",xHigh:"high"},c={model:t,messages:f,stream:!0},a=m[s];a&&s!=="Fast"&&(c.reasoning_effort=a);let d=await ta("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(c),signal:u});if(!d.ok){let $=await d.json().catch(()=>({}));throw new Error(`OpenRouter Error (${d.status}): ${$.error?.message||d.statusText}`)}let h=d.body.getReader(),p=new TextDecoder,y="",T=[],w=null,E=Date.now(),A=!1;for(;;){let{done:$,value:W}=await h.read();if($){A&&(T.length>0||w)&&(yield{candidates:T.length>0?[{content:{parts:T}}]:[],usageMetadata:w});break}y+=p.decode(W,{stream:!0});let D=y.split(`
405
+ `);O=N.pop();for(let he of N){let ee=he.trim();if(!(!ee||ee==="data: [DONE]")&&ee.startsWith("data: "))try{let Me=JSON.parse(ee.substring(6)),le=Me.usage;le&&(P={totalTokenCount:le.total_tokens||le.prompt_tokens+le.completion_tokens,promptTokenCount:le.prompt_tokens||0,candidatesTokenCount:le.completion_tokens||0,thoughtsTokenCount:(le.completion_tokens_details?.reasoning_tokens||0)+(le.completion_tokens_details?.thoughts_tokens||0)},G=!0);let ue=Me.choices?.[0]?.delta?.reasoning||Me.choices?.[0]?.delta?.reasoning_content||"",Xe=Me.choices?.[0]?.delta?.content||"";ue&&(M.push({text:ue,thought:!0}),G=!0),Xe&&(M.push({text:Xe}),G=!0)}catch{}}Date.now()-j>=350&&G&&(yield{candidates:M.length>0?[{content:{parts:[...M]}}]:[],usageMetadata:P},M=[],j=Date.now(),G=!1)}},sa=async function*(e,t,o,n,s,r,i,u){let f=[];n&&f.push({role:"system",content:n});for(let $ of o){let W=$.role==="user"?"user":"assistant",D=[];if(Array.isArray($.parts)){for(let O of $.parts)if(O.text)D.push({type:"text",text:O.text});else if(O.inlineData&&i){let M=O.inlineData.mimeType,P=O.inlineData.data;M.startsWith("image/")?D.push({type:"image_url",image_url:{url:`data:${M};base64,${P}`}}):D.push({type:"file",file:{filename:O.filename||"file",file_data:`data:${M};base64,${P}`}})}}else{let O=$.text||"";O&&D.push({type:"text",text:O})}f.push({role:W,content:D.length===1&&D[0].type==="text"?D[0].text:D})}let m={Low:"low",Medium:"medium",Standard:"medium",High:"high",xHigh:"high"},c={model:t,messages:f,stream:!0},a=m[s];a&&s!=="Fast"&&(c.reasoning_effort=a);let d=await ta("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(c),signal:u});if(!d.ok){let $=await d.json().catch(()=>({}));throw new Error(`OpenRouter Error (${d.status}): ${$.error?.message||d.statusText}`)}let h=d.body.getReader(),p=new TextDecoder,y="",T=[],w=null,E=Date.now(),A=!1;for(;;){let{done:$,value:W}=await h.read();if($){A&&(T.length>0||w)&&(yield{candidates:T.length>0?[{content:{parts:T}}]:[],usageMetadata:w});break}y+=p.decode(W,{stream:!0});let D=y.split(`
403
406
  `);y=D.pop();for(let O of D){let M=O.trim();if(!(!M||!M.startsWith("data: "))){if(M==="data: [DONE]")break;try{let P=JSON.parse(M.substring(6)),j=P.choices?.[0]?.delta,G=P.usage;if(G&&(w={totalTokenCount:G.total_tokens||G.prompt_tokens+G.completion_tokens,promptTokenCount:G.prompt_tokens||0,candidatesTokenCount:G.completion_tokens||0,cachedContentTokenCount:G.prompt_tokens_details?.cached_tokens||0,thoughtsTokenCount:G.completion_tokens_details?.reasoning_tokens||0},A=!0),j){let q=j.reasoning||(j.reasoning_details?j.reasoning_details.map(Y=>Y.text).join(""):null);q&&(T.push({text:q,thought:!0}),A=!0),j.content&&(T.push({text:j.content}),A=!0)}}catch{}}}Date.now()-E>=150&&A&&(yield{candidates:T.length>0?[{content:{parts:[...T]}}]:[],usageMetadata:w},T=[],E=Date.now(),A=!1)}},rc=()=>{Bo=!0},nc={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",file_map:"Generating Map",ask:"User Input",write_pdf:"Creating",write_docx:"Creating",generate_image:"Generating",todo:"Planning",Todo:"Planning"},Qu=(e,t)=>{try{let o=se(t),n=o.path||o.targetFile||o.TargetFile||o.directory;return n?Ae.basename(n.replace(/["']/g,"").replace(/\\/g,"/")):null}catch{return null}},ic=async(e,t,o,n,s={})=>{process.stdout.isTTY&&(process.stdout.write("\x1B]0;Finalizing...\x07"),process.stdout.write("\x1B]633;P;TerminalTitle=Finalizing...\x07"));let r=4*(1024*2),i=4*(1024*8),{onStatus:u,onMemoryUpdated:f,onBackgroundIncrement:m}=s,{profile:c,thinkingLevel:a,mode:d,janitorModel:h,chatId:p,systemSettings:y,sessionStats:T,aiProvider:w="Google",apiKey:E}=e,A=y?.memory!==!1,W=fe(Ht,[]).map(ue=>`- [${ue.id}]: ${ue.memory}`).join(`
404
- `),D=n.slice(0,-1).filter(ue=>ue.text&&!ue.text.includes("[TOOL RESULT]")&&!ue.text.includes("OBSERVATION:")&&!ue.text.startsWith("[TERMINAL_RECORD]")&&!ue.isTerminalRecord&&!ue.isMeta&&!ue.isLogo&&!String(ue.id).startsWith("welcome")&&!String(ue.id).startsWith("logo")).slice(-14).map(ue=>{let Ke=Ju(ue.text).replace(/\[tool:functions\..*?\]/g,"").replace(/(?:<think>|\[think\])[\s\S]*?(?:<\/think>|\[\/think\])/g,"").replace(/\[Prompted on:.*?\]/g,"").replace(/\[METADATA \(PRIORITY: DYNAMIC\)\] Time: ([^|\n]+)/g,(ft,et)=>`[METADATA (PRIORITY: DYNAMIC)] Time: ${et.replace(/:\d{2}/g,"")}`).replace(/\[\[\s*turn\s*:\s*(continue|finish)\s*\]\]/gi,"").replace(/\[\[END\]\]/g,"").replace(/\[TOOL RESULTS\]/g,"").replace(/\[tool results\]/g,"").replace(/\r?\n\r?\n/g,`
407
+ `),D=n.slice(0,-1).filter(ue=>ue.text&&!ue.text.includes("[TOOL RESULT]")&&!ue.text.includes("OBSERVATION:")&&!ue.text.startsWith("[TERMINAL_RECORD]")&&!ue.isTerminalRecord&&!ue.isMeta&&!ue.isLogo&&!String(ue.id).startsWith("welcome")&&!String(ue.id).startsWith("logo")).slice(-14).map(ue=>{let Xe=Ju(ue.text).replace(/\[tool:functions\..*?\]/g,"").replace(/(?:<think>|\[think\])[\s\S]*?(?:<\/think>|\[\/think\])/g,"").replace(/\[Prompted on:.*?\]/g,"").replace(/\[METADATA \(PRIORITY: DYNAMIC\)\] Time: ([^|\n]+)/g,(ft,et)=>`[METADATA (PRIORITY: DYNAMIC)] Time: ${et.replace(/:\d{2}/g,"")}`).replace(/\[\[\s*turn\s*:\s*(continue|finish)\s*\]\]/gi,"").replace(/\[\[END\]\]/g,"").replace(/\[TOOL RESULTS\]/g,"").replace(/\[tool results\]/g,"").replace(/\r?\n\r?\n/g,`
405
408
  `).replace(/\n\n/g,`
406
- `).replace(/\\n\\n/g,"").trim(),_t=ue.role==="user"?r:i,Ve=Ke.substring(0,_t);Ke.length>_t&&(Ve+=`
409
+ `).replace(/\\n\\n/g,"").trim(),_t=ue.role==="user"?r:i,Ve=Xe.substring(0,_t);Xe.length>_t&&(Ve+=`
407
410
  ... (truncated) ...`);let Ee=ue.role==="user"?Ve.startsWith("[USER]")?"":"[USER]: ":Ve.startsWith("[AGENT]")?"":"[AGENT]: ";return{role:ue.role==="user"?"user":"model",parts:[{text:`${Ee}${Ve}`}]}}),O=n.filter(ue=>ue.role==="user").length===1,M=t.includes("[TITLE-UPDATE]"),P=Math.random()<.8,j=O||M||P,G=o.replace(/(?:<think>|\[think\])[\s\S]*?(?:<\/think>|\[\/think\])/g,"").trim(),q=nl(W,A,j),Y=`${G.replace(/\[tool:functions\..*?\]/g,"").replace(/(?:<think>|\[think\])[\s\S]*?(?:<\/think>|\[\/think\])/g,"").replace(/\[Prompted on:.*?\]/g,"").replace(/\[\[\s*turn\s*:\s*(continue|finish)\s*\]\]/gi,"").replace(/\[\[END\]\]/g,"").replace(/\[\[TOOL RESULTS\]\]/g,"").replace(/\[tool results\]/g,"").substring(0,i)}`;Y.length>i&&(Y+=`
408
411
  ... (truncated) ...`);let N=t.replace(/\[Prompted on:.*?\]/g,"").trim();Y=Y.replace(/\r?\n\r?\n/g,`
409
412
  `).replace(/\n\n/g,`
@@ -411,12 +414,12 @@ ${c}`}return`ERROR: Unknown method "${o}". Use create, append, or get.`}catch(c)
411
414
  ${N.length>r?`... (truncated) ...
412
415
 
413
416
  `:""}
414
- [AGENT (current turn)]: ${Y}`;D.push({role:"user",parts:[{text:he}]});let ee="",Me=0,le=A?12:-1;for(;Me<=le;){process.stdout.isTTY&&(process.stdout.write(`\x1B]0;Retrying Finalizing... (${Me+1})...\x07`),process.stdout.write(`\x1B]633;P;TerminalTitle=Retrying Finalizing... (${Me+1})...\x07`));try{if(!await Ei("background",e))return;let ue="",Ke=null;try{let Ee=new Promise((Vt,ct)=>setTimeout(()=>ct(new Error("JANITOR_TIMEOUT")),6e4)),ft=(async()=>{if(w==="OpenRouter"){let ze=sa(E,"google/gemma-4-26b-a4b-it:free",D,q,"Fast",d)[Symbol.asyncIterator](),ot=await ze.next();return{iterator:ze,firstResult:ot}}else if(w==="DeepSeek"){let ct=oa(E,"deepseek-chat",D,q,"Fast",d,!1)[Symbol.asyncIterator](),ze=await ct.next();return{iterator:ct,firstResult:ze}}else if(w==="NVIDIA"){let ct=na(E,"moonshotai/kimi-k2.6",D,q,"Fast",d,!1)[Symbol.asyncIterator](),ze=await ct.next();return{iterator:ct,firstResult:ze}}else{let ct=(await Cs.models.generateContentStream({model:h||(Me===le?"gemini-3.1-flash-lite":"gemma-4-26b-a4b-it"),contents:D,config:{systemInstruction:q,maxOutputTokens:512,temperature:.3,safetySettings:[{category:Bn.HARM_CATEGORY_HARASSMENT,threshold:Nn.BLOCK_NONE},{category:Bn.HARM_CATEGORY_HATE_SPEECH,threshold:Nn.BLOCK_NONE},{category:Bn.HARM_CATEGORY_SEXUALLY_EXPLICIT,threshold:Nn.BLOCK_NONE},{category:Bn.HARM_CATEGORY_DANGEROUS_CONTENT,threshold:Nn.BLOCK_NONE}],thinkingConfig:{includeThoughts:!1,thinkingLevel:Ro.MINIMAL}}}))[Symbol.asyncIterator](),ze=await ct.next();return{iterator:ct,firstResult:ze}}})(),{iterator:et,firstResult:Ye}=await Promise.race([ft,Ee]),{value:qe,done:mo}=Ye;if(!mo&&qe){let Vt=qe.candidates?.[0]?.content?.parts,ct=Vt?.[1]?.text||Vt?.[0]?.text||(typeof qe.text=="function"?qe.text():"");ct&&(ue+=ct),Ke=qe.usageMetadata;for await(let ze of{[Symbol.asyncIterator]:()=>et}){let ot=ze.candidates?.[0]?.content?.parts,Ao=ot?.[1]?.text||ot?.[0]?.text||(typeof ze.text=="function"?ze.text():"");Ao&&(ue+=Ao),Ke=ze.usageMetadata}}}catch(Ee){throw Ee}if(ue)ee=ue,Ke&&await Eo("tokens",Ke.totalTokenCount||0);else throw new Error("No synthesis generated by Janitor.");m&&(m(),await Jo("background"));let _t=ra(ee),Ve=!1;for(let Ee of _t){let ft=Ee.toolName;["addMemScore","add_mem_score","AddMemScore","addMemoryScore","AddMemoryScore"].includes(ft)&&(Ve=!0);let et={chatId:p,sessionId:p,history:n},Ye=await Pr(ft,Ee.args,et);ft.toLowerCase()==="memory"&&(Ee.args.includes("action='user'")||Ee.args.includes('action="user"'))&&!Ye.startsWith("ERROR")&&(f&&f(),process.stdout.isTTY&&(process.stdout.write("\x1B]0;Memory Updated\x07"),process.stdout.write("\x1B]633;P;TerminalTitle=Memory Updated\x07")),await new Promise(mo=>setTimeout(mo,3e3)))}if(!Ve)try{let Ee=fe(Ht,[]);if(Ee.length>0){let ft=[];for(let et of Ee)et.score===void 0&&(et.score=.5),et.score*=.9995,et.score<.05&&(et.score=0),et.score=Math.round(et.score*1e5)/1e5,et.score>0&&ft.push(et);De(Ht,ft)}}catch{}break}catch(ue){Me++;let Ke=new Date().toLocaleString();process.stdout.isTTY&&process.stdout.write("\x1B]0;Finalizing Error\x07"),await new Promise(Ee=>setTimeout(Ee,1e3));let _t=Ae.join(To,"janitor");if(tt.existsSync(_t)||tt.mkdirSync(_t,{recursive:!0}),tt.appendFileSync(Ae.join(_t,"error.log"),`ERROR [Attempt ${Me}/${le+1}] [${Ke}]: ${String(ue)}
417
+ [AGENT (current turn)]: ${Y}`;D.push({role:"user",parts:[{text:he}]});let ee="",Me=0,le=A?12:-1;for(;Me<=le;){process.stdout.isTTY&&(process.stdout.write(`\x1B]0;Retrying Finalizing... (${Me+1})...\x07`),process.stdout.write(`\x1B]633;P;TerminalTitle=Retrying Finalizing... (${Me+1})...\x07`));try{if(!await Ei("background",e))return;let ue="",Xe=null;try{let Ee=new Promise((Vt,ct)=>setTimeout(()=>ct(new Error("JANITOR_TIMEOUT")),6e4)),ft=(async()=>{if(w==="OpenRouter"){let ze=sa(E,"google/gemma-4-26b-a4b-it:free",D,q,"Fast",d)[Symbol.asyncIterator](),ot=await ze.next();return{iterator:ze,firstResult:ot}}else if(w==="DeepSeek"){let ct=oa(E,"deepseek-chat",D,q,"Fast",d,!1)[Symbol.asyncIterator](),ze=await ct.next();return{iterator:ct,firstResult:ze}}else if(w==="NVIDIA"){let ct=na(E,"moonshotai/kimi-k2.6",D,q,"Fast",d,!1)[Symbol.asyncIterator](),ze=await ct.next();return{iterator:ct,firstResult:ze}}else{let ct=(await Cs.models.generateContentStream({model:h||(Me===le?"gemini-3.1-flash-lite":"gemma-4-26b-a4b-it"),contents:D,config:{systemInstruction:q,maxOutputTokens:512,temperature:.3,safetySettings:[{category:Bn.HARM_CATEGORY_HARASSMENT,threshold:Nn.BLOCK_NONE},{category:Bn.HARM_CATEGORY_HATE_SPEECH,threshold:Nn.BLOCK_NONE},{category:Bn.HARM_CATEGORY_SEXUALLY_EXPLICIT,threshold:Nn.BLOCK_NONE},{category:Bn.HARM_CATEGORY_DANGEROUS_CONTENT,threshold:Nn.BLOCK_NONE}],thinkingConfig:{includeThoughts:!1,thinkingLevel:Ro.MINIMAL}}}))[Symbol.asyncIterator](),ze=await ct.next();return{iterator:ct,firstResult:ze}}})(),{iterator:et,firstResult:Ye}=await Promise.race([ft,Ee]),{value:qe,done:mo}=Ye;if(!mo&&qe){let Vt=qe.candidates?.[0]?.content?.parts,ct=Vt?.[1]?.text||Vt?.[0]?.text||(typeof qe.text=="function"?qe.text():"");ct&&(ue+=ct),Xe=qe.usageMetadata;for await(let ze of{[Symbol.asyncIterator]:()=>et}){let ot=ze.candidates?.[0]?.content?.parts,Ao=ot?.[1]?.text||ot?.[0]?.text||(typeof ze.text=="function"?ze.text():"");Ao&&(ue+=Ao),Xe=ze.usageMetadata}}}catch(Ee){throw Ee}if(ue)ee=ue,Xe&&await Eo("tokens",Xe.totalTokenCount||0);else throw new Error("No synthesis generated by Janitor.");m&&(m(),await Jo("background"));let _t=ra(ee),Ve=!1;for(let Ee of _t){let ft=Ee.toolName;["addMemScore","add_mem_score","AddMemScore","addMemoryScore","AddMemoryScore"].includes(ft)&&(Ve=!0);let et={chatId:p,sessionId:p,history:n},Ye=await Pr(ft,Ee.args,et);ft.toLowerCase()==="memory"&&(Ee.args.includes("action='user'")||Ee.args.includes('action="user"'))&&!Ye.startsWith("ERROR")&&(f&&f(),process.stdout.isTTY&&(process.stdout.write("\x1B]0;Memory Updated\x07"),process.stdout.write("\x1B]633;P;TerminalTitle=Memory Updated\x07")),await new Promise(mo=>setTimeout(mo,3e3)))}if(!Ve)try{let Ee=fe(Ht,[]);if(Ee.length>0){let ft=[];for(let et of Ee)et.score===void 0&&(et.score=.5),et.score*=.9995,et.score<.05&&(et.score=0),et.score=Math.round(et.score*1e5)/1e5,et.score>0&&ft.push(et);De(Ht,ft)}}catch{}break}catch(ue){Me++;let Xe=new Date().toLocaleString();process.stdout.isTTY&&process.stdout.write("\x1B]0;Finalizing Error\x07"),await new Promise(Ee=>setTimeout(Ee,1e3));let _t=Ae.join(To,"janitor");if(tt.existsSync(_t)||tt.mkdirSync(_t,{recursive:!0}),tt.appendFileSync(Ae.join(_t,"error.log"),`ERROR [Attempt ${Me}/${le+1}] [${Xe}]: ${String(ue)}
415
418
 
416
419
  `),Me>le)break;let Ve=Math.min(1e3*Math.pow(2,Me-1),8e3);await new Promise(Ee=>setTimeout(Ee,Ve))}}if(Me){let ue=Ae.join(To,"janitor");tt.appendFileSync(Ae.join(ue,"error.log"),`-----------------------------------------------------------------------------
417
420
 
418
421
 
419
- `),Me>=le&&(process.stdout.isTTY&&process.stdout.write(`\x1B]0;${A?"Finalizing Error":"Finalizing Skipped"}\x07`),await new Promise(Ke=>setTimeout(Ke,3e3)))}process.stdout.isTTY&&(process.stdout.write("\x1B]0;FluxFlow | Idle\x07"),process.stdout.write("\x1B]633;P;TerminalTitle=FluxFlow | Idle\x07"))},Zu=e=>{let t=/\[\s*tool:functions\.([a-z0-9_]+)\s*\(/gi,o;for(;(o=t.exec(e))!==null;){let n=o.index+o[0].length-1,s=0,r=null,i=!1,u=!1;for(let f=n;f<e.length;f++){let m=e[f];if(!r&&(m==='"'||m==="'"||m==="`")?(r=m,i=!1):r&&m===r&&!i&&(r=null),!r&&(m==="("?s++:m===")"&&s--,s===0)){let c=f+1;for(;c<e.length&&/\s/.test(e[c]);)c++;if(c<e.length&&e[c]==="]"){u=!0,t.lastIndex=c+1;break}}m==="\\"?i=!i:i=!1}if(!u)return{inside:!0,toolName:o[1],startIndex:o.index,args:e.substring(o.index+o[0].length)}}return{inside:!1}},ac=(e,t=!0)=>{let o=/\[\s*tool:functions\.([a-z0-9_]+)\s*\(/gi,n="",s=0,r;for(;(r=o.exec(e))!==null;){let i=e.substring(s,r.index);n+=t?i.replace(/(?:<think>|\[think\])[\s\S]*?(?:<\/think>|\[\/think\]|$)/gi,""):i;let u=r.index+r[0].length-1,f=0,m=null,c=-1;for(let a=u;a<e.length;a++){let d=e[a];if(m){if(d===m){let h=0;for(let p=a-1;p>=0&&e[p]==="\\";p--)h++;h%2===0&&(m=null)}}else if(d==='"'||d==="'"||d==="`")m=d;else if(d==="(")f++;else if(d===")"&&(f--,f===0)){let h=a+1;for(;h<e.length&&/\s/.test(e[h]);)h++;if(h<e.length&&e[h]==="]"){c=h;break}}}if(c!==-1)n+="[tool:functions."+r[1]+"()]",s=c+1,o.lastIndex=s;else{n+="[tool:functions."+r[1]+"(",s=e.length;break}}return s<e.length&&(n+=t?e.substring(s).replace(/(?:<think>|\[think\])[\s\S]*?(?:<\/think>|\[\/think\]|$)/gi,""):e.substring(s)),n},ed=(e,t,o)=>{let n=/\[\s*tool:functions\.([a-z0-9_]+)\s*\(/gi,s="",r=0,i;for(;(i=n.exec(e))!==null;){let u=e.substring(r,i.index);s+=u.replace(t,o);let f=i.index+i[0].length-1,m=0,c=null,a=-1;for(let d=f;d<e.length;d++){let h=e[d];if(c){if(h===c){let p=0;for(let y=d-1;y>=0&&e[y]==="\\";y--)p++;p%2===0&&(c=null)}}else if(h==='"'||h==="'"||h==="`")c=h;else if(h==="(")m++;else if(h===")"&&(m--,m===0)){let p=d+1;for(;p<e.length&&/\s/.test(e[p]);)p++;if(p<e.length&&e[p]==="]"){a=p;break}}}if(a!==-1)s+=e.substring(i.index,a+1),r=a+1,n.lastIndex=r;else{s+=e.substring(i.index),r=e.length;break}}return r<e.length&&(s+=e.substring(r).replace(t,o)),s},sc=e=>ac(e,!0),ra=e=>{if(!e)return[];let t=e.replace(/(?:<(think|thought|thoughts)>|\[(think|thought|thoughts)\])[\s\S]*?(?:<\/(think|thought|thoughts)>|\[\/(think|thought|thoughts)\]|$)/gi,""),o=[],n=/\[\s*tool:functions\.([a-z0-9_]+)\s*\(/gi,s;for(;(s=n.exec(t))!==null;){let r=s[1],i=s.index+s[0].length-1,u=0,f=null,m=-1,c=-1;for(let a=i;a<t.length;a++){let d=t[a];if(f){if(d===f){let h=0;for(let p=a-1;p>=0&&t[p]==="\\";p--)h++;h%2===0&&(f=null)}}else if(d==='"'||d==="'"||d==="`")f=d;else if(d==="(")u++;else if(d===")"&&(u--,u===0)){c=a;let h=a+1;for(;h<t.length&&/\s/.test(t[h]);)h++;if(h<t.length&&t[h]==="]"){m=h;break}}}if(m!==-1){let a=t.substring(i+1,c),d=t.substring(s.index,m+1);o.push({fullMatch:d,toolName:r.trim(),args:a.trim()}),n.lastIndex=m+1}}return o},zs=(e,t={})=>e?(Zi=t,Cs=new Vu({apiKey:e}),Cs):null,ea=async(e,t,o,n,s="Fast")=>{let{aiProvider:r="Google",apiKey:i,mode:u}=e,f="",m=null,c=typeof o=="string"?[{role:"user",parts:[{text:o}]}]:o,a;r==="OpenRouter"?a=sa(i,t,c,n,s,u,!1):r==="DeepSeek"?a=oa(i,t,c,n,s,u,!1):r==="NVIDIA"?a=na(i,t,c,n,s,u,!1):a=await Cs.models.generateContentStream({model:t,contents:c,config:{systemInstruction:n,maxOutputTokens:2048,temperature:.3,thinkingConfig:{includeThoughts:!1,thinkingLevel:Ro.MINIMAL}}});for await(let d of a){if(d.candidates?.[0]?.content?.parts)for(let h of d.candidates[0].content.parts)h.text&&!h.thought&&(f+=h.text);d.usageMetadata&&(m=d.usageMetadata)}return{text:f,usageMetadata:m}},td=async(e,t)=>{try{let{aiProvider:o="Google"}=t,n=fe(So,{});if(Object.values(n).flat().length<=2)return;let r=Object.keys(n).filter(d=>d!==e&&Array.isArray(n[d])&&n[d].length>2);if(r.length===0)return;let i=`You are a silent background process for the FluxFlow CLI Agent.
422
+ `),Me>=le&&(process.stdout.isTTY&&process.stdout.write(`\x1B]0;${A?"Finalizing Error":"Finalizing Skipped"}\x07`),await new Promise(Xe=>setTimeout(Xe,3e3)))}process.stdout.isTTY&&(process.stdout.write("\x1B]0;FluxFlow | Idle\x07"),process.stdout.write("\x1B]633;P;TerminalTitle=FluxFlow | Idle\x07"))},Zu=e=>{let t=/\[\s*tool:functions\.([a-z0-9_]+)\s*\(/gi,o;for(;(o=t.exec(e))!==null;){let n=o.index+o[0].length-1,s=0,r=null,i=!1,u=!1;for(let f=n;f<e.length;f++){let m=e[f];if(!r&&(m==='"'||m==="'"||m==="`")?(r=m,i=!1):r&&m===r&&!i&&(r=null),!r&&(m==="("?s++:m===")"&&s--,s===0)){let c=f+1;for(;c<e.length&&/\s/.test(e[c]);)c++;if(c<e.length&&e[c]==="]"){u=!0,t.lastIndex=c+1;break}}m==="\\"?i=!i:i=!1}if(!u)return{inside:!0,toolName:o[1],startIndex:o.index,args:e.substring(o.index+o[0].length)}}return{inside:!1}},ac=(e,t=!0)=>{let o=/\[\s*tool:functions\.([a-z0-9_]+)\s*\(/gi,n="",s=0,r;for(;(r=o.exec(e))!==null;){let i=e.substring(s,r.index);n+=t?i.replace(/(?:<think>|\[think\])[\s\S]*?(?:<\/think>|\[\/think\]|$)/gi,""):i;let u=r.index+r[0].length-1,f=0,m=null,c=-1;for(let a=u;a<e.length;a++){let d=e[a];if(m){if(d===m){let h=0;for(let p=a-1;p>=0&&e[p]==="\\";p--)h++;h%2===0&&(m=null)}}else if(d==='"'||d==="'"||d==="`")m=d;else if(d==="(")f++;else if(d===")"&&(f--,f===0)){let h=a+1;for(;h<e.length&&/\s/.test(e[h]);)h++;if(h<e.length&&e[h]==="]"){c=h;break}}}if(c!==-1)n+="[tool:functions."+r[1]+"()]",s=c+1,o.lastIndex=s;else{n+="[tool:functions."+r[1]+"(",s=e.length;break}}return s<e.length&&(n+=t?e.substring(s).replace(/(?:<think>|\[think\])[\s\S]*?(?:<\/think>|\[\/think\]|$)/gi,""):e.substring(s)),n},ed=(e,t,o)=>{let n=/\[\s*tool:functions\.([a-z0-9_]+)\s*\(/gi,s="",r=0,i;for(;(i=n.exec(e))!==null;){let u=e.substring(r,i.index);s+=u.replace(t,o);let f=i.index+i[0].length-1,m=0,c=null,a=-1;for(let d=f;d<e.length;d++){let h=e[d];if(c){if(h===c){let p=0;for(let y=d-1;y>=0&&e[y]==="\\";y--)p++;p%2===0&&(c=null)}}else if(h==='"'||h==="'"||h==="`")c=h;else if(h==="(")m++;else if(h===")"&&(m--,m===0)){let p=d+1;for(;p<e.length&&/\s/.test(e[p]);)p++;if(p<e.length&&e[p]==="]"){a=p;break}}}if(a!==-1)s+=e.substring(i.index,a+1),r=a+1,n.lastIndex=r;else{s+=e.substring(i.index),r=e.length;break}}return r<e.length&&(s+=e.substring(r).replace(t,o)),s},sc=e=>ac(e,!0),ra=e=>{if(!e)return[];let t=e.replace(/(?:<(think|thought|thoughts)>|\[(think|thought|thoughts)\])[\s\S]*?(?:<\/(think|thought|thoughts)>|\[\/(think|thought|thoughts)\]|$)/gi,""),o=[],n=/\[\s*tool:functions\.([a-z0-9_]+)\s*\(/gi,s;for(;(s=n.exec(t))!==null;){let r=s[1],i=s.index+s[0].length-1,u=0,f=null,m=-1,c=-1;for(let a=i;a<t.length;a++){let d=t[a];if(f){if(d===f){let h=0;for(let p=a-1;p>=0&&t[p]==="\\";p--)h++;h%2===0&&(f=null)}}else if(d==='"'||d==="'"||d==="`")f=d;else if(d==="(")u++;else if(d===")"&&(u--,u===0)){c=a;let h=a+1;for(;h<t.length&&/\s/.test(t[h]);)h++;if(h<t.length&&t[h]==="]"){m=h;break}}}if(m!==-1){let a=t.substring(i+1,c),d=t.substring(s.index,m+1);o.push({fullMatch:d,toolName:r.trim(),args:a.trim()}),n.lastIndex=m+1}}return o},zs=(e,t={})=>e?(Zi=t,Cs=new Vu({apiKey:e}),Cs):null,ea=async(e,t,o,n,s="Fast")=>{let{aiProvider:r="Google",apiKey:i,mode:u}=e,f="",m=null,c=typeof o=="string"?[{role:"user",parts:[{text:o}]}]:o,a;r==="OpenRouter"?a=sa(i,t,c,n,s,u,!1):r==="DeepSeek"?a=oa(i,t,c,n,s,u,!1):r==="NVIDIA"?a=na(i,t,c,n,s,u,!1):a=await Cs.models.generateContentStream({model:t,contents:c,config:{systemInstruction:n,maxOutputTokens:2048,temperature:.3,thinkingConfig:{includeThoughts:!1,thinkingLevel:Ro.MINIMAL}}});for await(let d of a){if(d.candidates?.[0]?.content?.parts)for(let h of d.candidates[0].content.parts)h.text&&!h.thought&&(f+=h.text);d.usageMetadata&&(m=d.usageMetadata)}return{text:f,usageMetadata:m}},td=async(e,t)=>{try{let{aiProvider:o="Google"}=t,n=fe(So,{});if(Object.values(n).flat().length<=2)return;let r=Object.keys(n).filter(d=>d!==e&&Array.isArray(n[d])&&n[d].length>2);if(r.length===0)return;let i=`You are a silent background process for the FluxFlow CLI Agent.
420
423
  Your task is to summarize or merge temporary context memories from one or more past conversation sessions.
421
424
  For each Chat ID provided, you must output a tool call to save the consolidated summary.
422
425
 
@@ -452,14 +455,14 @@ ${h}
452
455
  Provide a new consolidated summary of the entire session.`:`Here is the conversation history:
453
456
  ${h}
454
457
 
455
- Provide a consolidated summary of the entire session.`,w="gemma-4-26b-a4b-it";s==="OpenRouter"&&(w="google/gemma-4-26b-a4b-it:free"),s==="DeepSeek"&&(w="deepseek-v4-flash"),s==="NVIDIA"&&(w="stepfun-ai/step-3.7-flash");let E=0,A=!1,$=null;for(;E<=3&&!A;){E++;try{$=await ea(e,w,T,y,"Fast"),A=!0}catch{if(E>3){if(s==="Google")try{return(await ea(e,"gemini-3.1-flash-lite",T,y,"Fast")).text||""}catch{return""}return""}}}return $&&$.text||""},f=i(t),m=fe(r,{}),c=m[n]||{summary:"",historyLength:0};typeof c=="string"&&(c={summary:c,historyLength:0});let a=c.summary||"",d=await u(f,a);if(d){c.summary=d;let h=zu(t);return o?c.historyLength=(c.historyLength||0)+h:c.historyLength=h,m[n]=c,De(r,m),d}return null},lc=e=>{try{let t=Ae.join(bt,"chat-summaries.json");if(tt.existsSync(t)){let o=fe(t,{});o[e]&&(delete o[e],De(t,o))}}catch{}},cc=async function*(e,t,o,n,s){let{profile:r,thinkingLevel:i,mode:u,janitorModel:f,chatId:m,systemSettings:c,sessionStats:a,aiProvider:d="Google",apiTier:h}=o,p=Qi(e);if(!Cs&&d==="Google")throw new Error("AI not initialized");let y=c?.memory!==!1,T=t[t.length-1].text,w=Ae.join(bt,"chat-summaries.json"),E=!1,A=t.filter(M=>M.role==="user").length===1,$=T.includes("[TITLE-UPDATE]"),W=A||$,D=T.replace(/\[TITLE-UPDATE\]/g,"").trim();D=D.replace(/\s*\[Prompted on:.*?\]/g,"").trim(),await yt.startTransaction(m,D),Bo=!1;let O=null;try{let M=new AbortController;O=setInterval(()=>{Bo&&(M.abort(),O&&(clearInterval(O),O=null))},400);let P=[...t.slice(0,-1)];{let $e=fe(w,{})[m]||{summary:"",historyLength:0};if($e.summary&&$e.historyLength>0){let Xe=0,Oe=[];for(let Je=0;Je<P.length;Je++){let Te=P[Je];(Te.role==="user"||Te.role==="agent"||Te.role==="system")&&!String(Te.id).startsWith("welcome")&&!Te.isMeta&&Xe++,Xe>$e.historyLength&&Oe.push(Te)}P=Oe}}let j=252e3,G=254e3;(d==="DeepSeek"||d==="Google"&&h==="Paid")&&(j=396e3,G=4e5),(a?.tokens||0)>j&&(yield{type:"status_history",content:"Context Limit Reached. Condensing session history..."},await ia(o,P,!0)&&(P=[],E=!0)),A&&y&&(yield{type:"status",content:"Condensing past chat memories..."},await td(m,o));let q=fe(So,{}),Y=fe(Vo,{}),N=Object.entries(q).filter(([re])=>re!==m).flatMap(([re,$e])=>$e),ee=[...Object.entries(Y).filter(([re])=>re!==m).slice(-20).map(([re,$e])=>`[Chat Summary]: ${$e}`),...N].map(re=>`- ${re}`).join(`
458
+ Provide a consolidated summary of the entire session.`,w="gemma-4-26b-a4b-it";s==="OpenRouter"&&(w="google/gemma-4-26b-a4b-it:free"),s==="DeepSeek"&&(w="deepseek-v4-flash"),s==="NVIDIA"&&(w="stepfun-ai/step-3.7-flash");let E=0,A=!1,$=null;for(;E<=3&&!A;){E++;try{$=await ea(e,w,T,y,"Fast"),A=!0}catch{if(E>3){if(s==="Google")try{return(await ea(e,"gemini-3.1-flash-lite",T,y,"Fast")).text||""}catch{return""}return""}}}return $&&$.text||""},f=i(t),m=fe(r,{}),c=m[n]||{summary:"",historyLength:0};typeof c=="string"&&(c={summary:c,historyLength:0});let a=c.summary||"",d=await u(f,a);if(d){c.summary=d;let h=zu(t);return o?c.historyLength=(c.historyLength||0)+h:c.historyLength=h,m[n]=c,De(r,m),d}return null},lc=e=>{try{let t=Ae.join(bt,"chat-summaries.json");if(tt.existsSync(t)){let o=fe(t,{});o[e]&&(delete o[e],De(t,o))}}catch{}},cc=async function*(e,t,o,n,s){let{profile:r,thinkingLevel:i,mode:u,janitorModel:f,chatId:m,systemSettings:c,sessionStats:a,aiProvider:d="Google",apiTier:h}=o,p=Qi(e);if(!Cs&&d==="Google")throw new Error("AI not initialized");let y=c?.memory!==!1,T=t[t.length-1].text,w=Ae.join(bt,"chat-summaries.json"),E=!1,A=t.filter(M=>M.role==="user").length===1,$=T.includes("[TITLE-UPDATE]"),W=A||$,D=T.replace(/\[TITLE-UPDATE\]/g,"").trim();D=D.replace(/\s*\[Prompted on:.*?\]/g,"").trim(),await yt.startTransaction(m,D),Bo=!1;let O=null;try{let M=new AbortController;O=setInterval(()=>{Bo&&(M.abort(),O&&(clearInterval(O),O=null))},400);let P=[...t.slice(0,-1)];{let $e=fe(w,{})[m]||{summary:"",historyLength:0};if($e.summary&&$e.historyLength>0){let Ke=0,Oe=[];for(let Je=0;Je<P.length;Je++){let Te=P[Je];(Te.role==="user"||Te.role==="agent"||Te.role==="system")&&!String(Te.id).startsWith("welcome")&&!Te.isMeta&&Ke++,Ke>$e.historyLength&&Oe.push(Te)}P=Oe}}let j=252e3,G=254e3;(d==="DeepSeek"||d==="Google"&&h==="Paid")&&(j=396e3,G=4e5),(a?.tokens||0)>j&&(yield{type:"status_history",content:"Context Limit Reached. Condensing session history..."},await ia(o,P,!0)&&(P=[],E=!0)),A&&y&&(yield{type:"status",content:"Condensing past chat memories..."},await td(m,o));let q=fe(So,{}),Y=fe(Vo,{}),N=Object.entries(q).filter(([re])=>re!==m).flatMap(([re,$e])=>$e),ee=[...Object.entries(Y).filter(([re])=>re!==m).slice(-20).map(([re,$e])=>`[Chat Summary]: ${$e}`),...N].map(re=>`- ${re}`).join(`
456
459
  `),le=fe(Ht,[]).map(re=>`- ${re.memory}`).join(`
457
- `),ue=(a?.tokens||0)>=24e3,Ke=tl(ee,le,y,ue),_t=new Date().toLocaleString([],{year:"numeric",month:"numeric",day:"numeric",hour:"2-digit",minute:"2-digit",hour12:!0}),Ve=[".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"],Ee=re=>{try{return tt.readdirSync(re,{withFileTypes:!0})}catch{return[]}},ft=(re,$e={value:0},Xe=1)=>{if($e.value>6200||Xe>7)return $e.value;let Oe=Ee(re);for(let Je of Oe){if($e.value>6200)break;Ve.includes(Je.name)||Je.isDirectory()&&($e.value++,ft(Ae.join(re,Je.name),$e,Xe+1))}return $e.value},et=(re,$e,Xe="",Oe=1)=>{let Je=Ee(re),Te=Ae.sep;if(Je.length>100)return`${Xe}\u2514\u2500\u2500 ${Ae.basename(re)}${Te} ...100+ files...
458
- `;let Et="",Yn=Ve,Tt=Je.filter(Se=>!Yn.includes(Se.name)),Tn=Je.filter(Se=>Yn.includes(Se.name)).map(Se=>Se.name).sort();Tt.sort((Se,zt)=>Se.isDirectory()&&!zt.isDirectory()?-1:!Se.isDirectory()&&zt.isDirectory()?1:Se.name.localeCompare(zt.name));let lt=[...Tt.map(Se=>({name:Se.name,isDir:Se.isDirectory()})),...Tn.map(Se=>({name:Se,isDir:!0,isCollapsed:!0}))];return lt.forEach((Se,zt)=>{let vt=zt===lt.length-1,Yo=Ae.join(re,Se.name),Bt=vt?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ",jn=Xe+(vt?" ":"\u2502 ");if(Se.isCollapsed){Et+=`${Xe}${Bt}${Se.name}${Te}...
459
- `;return}Se.isDir?Oe>$e?Et+=`${Xe}${Bt}${Se.name}${Te} ...depth exceeded...
460
- `:Ee(Yo).length>80?Et+=`${Xe}${Bt}${Se.name}${Te} ...80+ files...
461
- `:(Et+=`${Xe}${Bt}${Se.name}${Te}
462
- `,Et+=et(Yo,$e,jn,Oe+1)):Et+=`${Xe}${Bt}${Se.name}
460
+ `),ue=(a?.tokens||0)>=24e3,Xe=tl(ee,le,y,ue),_t=new Date().toLocaleString([],{year:"numeric",month:"numeric",day:"numeric",hour:"2-digit",minute:"2-digit",hour12:!0}),Ve=[".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"],Ee=re=>{try{return tt.readdirSync(re,{withFileTypes:!0})}catch{return[]}},ft=(re,$e={value:0},Ke=1)=>{if($e.value>6200||Ke>7)return $e.value;let Oe=Ee(re);for(let Je of Oe){if($e.value>6200)break;Ve.includes(Je.name)||Je.isDirectory()&&($e.value++,ft(Ae.join(re,Je.name),$e,Ke+1))}return $e.value},et=(re,$e,Ke="",Oe=1)=>{let Je=Ee(re),Te=Ae.sep;if(Je.length>100)return`${Ke}\u2514\u2500\u2500 ${Ae.basename(re)}${Te} ...100+ files...
461
+ `;let Et="",Yn=Ve,Tt=Je.filter(Se=>!Yn.includes(Se.name)),Tn=Je.filter(Se=>Yn.includes(Se.name)).map(Se=>Se.name).sort();Tt.sort((Se,zt)=>Se.isDirectory()&&!zt.isDirectory()?-1:!Se.isDirectory()&&zt.isDirectory()?1:Se.name.localeCompare(zt.name));let lt=[...Tt.map(Se=>({name:Se.name,isDir:Se.isDirectory()})),...Tn.map(Se=>({name:Se,isDir:!0,isCollapsed:!0}))];return lt.forEach((Se,zt)=>{let vt=zt===lt.length-1,Yo=Ae.join(re,Se.name),Bt=vt?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ",jn=Ke+(vt?" ":"\u2502 ");if(Se.isCollapsed){Et+=`${Ke}${Bt}${Se.name}${Te}...
462
+ `;return}Se.isDir?Oe>$e?Et+=`${Ke}${Bt}${Se.name}${Te} ...depth exceeded...
463
+ `:Ee(Yo).length>80?Et+=`${Ke}${Bt}${Se.name}${Te} ...80+ files...
464
+ `:(Et+=`${Ke}${Bt}${Se.name}${Te}
465
+ `,Et+=et(Yo,$e,jn,Oe+1)):Et+=`${Ke}${Bt}${Se.name}
463
466
  `}),Et};yield{type:"status",content:"Gathering Context..."},await new Promise(re=>setTimeout(re,500));let Ye=ft(process.cwd()),qe=12;Ye>4096?qe=1:Ye>3072?qe=2:Ye>2048?qe=3:Ye>1024?qe=4:Ye>512?qe=6:Ye>256?qe=7:Ye>128?qe=8:Ye>64?qe=9:Ye>32&&(qe=10);let mo=fe(ir,{}),Vt=mo[m],ct=Vt?Vt!==process.cwd():!1;mo[m]=process.cwd(),De(ir,mo);let ze=fe(w,{}),ot=ze[m]||{summary:"",historyLength:0};typeof ot=="string"&&(ot={summary:ot,historyLength:0});let Ao=t.filter(re=>(re.role==="user"||re.role==="agent"||re.role==="system")&&!String(re.id).startsWith("welcome")&&!re.isMeta).length;ot.historyLength&&Ao<ot.historyLength&&(ot.summary="",ot.historyLength=0,ze[m]=ot,De(w,ze));let on=typeof ot=="object"?ot.summary||"":ot||"",qt=P.length>0;qt&&on&&P[0]&&(P[0].role==="user"||P[0].role==="system")&&(P[0].text.includes("**CONTEXT SUMMARY OF PREVIOUS TURNS")||(P[0].text=`[SYSTEM METADATA (PRIORITY: HIGH)]
464
467
  **CONTEXT SUMMARY OF PREVIOUS TURNS (PRIORITY: HIGH)**
465
468
  ${on}
@@ -488,28 +491,28 @@ ${so.warnings}
488
491
  `)}else ro+="No file currently focused.";let Qs=D.replace(/\s*\[Prompted on:.*?\]/g,"").trim(),Wo=`[SYSTEM METADATA (PRIORITY: DYNAMIC), Chat Context >> Metadata] Time: ${_t}
489
492
  CWD: ${process.cwd()}${ct?` (WARNING: CWD Mismatch! Previous Path: ${Vt})`:""}
490
493
  **DIRECTORY STRUCTURE**
491
- ${Mt}${Ke}${ro}
494
+ ${Mt}${Xe}${ro}
492
495
  ${J}${i!="Fast"&&d==="Google"?`${e.toLowerCase().startsWith("gemma")?`[SYSTEM] **STRICTLY FOLLOW THINKING POLICY AS CRITICAL PRIORITY. DO NOT START A RESPONSE WITHOUT <think> ... </think>**
493
496
  [/SYSTEM]`:""}`:""} [USER] ${Qs}[/USER]`.trim();P.push({role:"user",text:Wo}),J&&t[t.length-1]?.id&&(yield{type:"summary_injected",content:{id:t[t.length-1].id,text:Wo}});let At=null,Nt=u==="Flux"?70:7,at=16;yield{type:"status",content:"Connecting..."},Bo=!1;let wn=[],as=!1;P.forEach(re=>{re.text&&re.role==="agent"&&(re.text=re.text.replace(/(?:<(think|thought)>|\[(think|thought)\])[\s\S]*?(?:<\/(think|thought)>|\[\/(think|thought)\])/gi,"").trim())});for(let re=0;re<=Nt;re++){if(as=!1,c?.compression===0&&(a?.tokens||0)>G&&(P=cl(P,6)),re>0&&(yield{type:"status",content:"Working...."}),Bo){yield{type:"status",content:"Request Cancelled"},yield{type:"text",content:`
494
497
 
495
498
  \x1B[33m\u2139 Request Cancelled\x1B[0m`};break}if(n){let me=await n();me&&(P.length>0&&P[P.length-1].role==="user"?P[P.length-1].text+=`
496
499
 
497
500
  [STEERING HINT]: ${me}`:P.push({role:"user",text:`${i!="Fast"&&d==="Google"?`${e.toLowerCase().startsWith("gemma")?`[SYSTEM] **STRICTLY FOLLOW THINKING POLICY AS CRITICAL PRIORITY. DO NOT START A RESPONSE WITHOUT <think> ... </think>**
498
- [/SYSTEM]`:""}`:""} [STEERING HINT]: ${me}`}),yield{type:"status",content:"Steering Hint Injected."})}let $e,Xe=!1,Oe=1,Je=1,Te="",Et=null,Yn=null,Tt=null,Tn=0,lt=[],Se=0,zt=!1,vt=!1,Yo=!1,Bt=!1,jn=!0,ht="",ut="",Jt=!1,Rt=e,jo="";for(;Oe<=at&&Je<=at&&!Xe&&!Bo;){let me=!1;try{Te="",jn&&(process.stdout.isTTY&&process.stdout.write("\x1B]0;Working...\x07"),yield{type:"turn_reset",content:!0},yield{type:"spinner",content:!0},jn=!1,Je===1&&(ht=""));let be=P.filter(oe=>(oe.role==="user"||oe.role==="agent"||oe.role==="system")&&!String(oe.id).startsWith("welcome")&&!oe.isMeta&&!oe.isTerminalRecord&&!(oe.text&&oe.text.startsWith("[TERMINAL_RECORD]"))).map((oe,Ce,ie)=>{let We=oe.text||"";oe.role==="agent"&&(We=We.replace(/\[turn:\s*finish\]/gi,"").replace(/\[\[END\]\]/gi,"").trim());let pe=[{text:We}];return oe.binaryPart&&Qi(Rt)&&ie.slice(Ce+1).filter(He=>He.role==="user"&&!He.text?.startsWith("[TOOL RESULT]")).length<=2&&pe.push(oe.binaryPart),{role:oe.role==="user"||oe.role==="system"?"user":"model",parts:pe}});for(let oe=0;oe<be.length;oe++){let Ce=be[oe],ie=Ce.parts?.[0]?.text||"";if(Ce.role==="model"&&/\[tool:/i.test(ie)){let We=-1;for(let pe=oe+1;pe<be.length;pe++){let St=be[pe],He=St.parts?.[0]?.text||"";if(St.role==="user"&&He.startsWith("[TOOL RESULT]")){We=pe;break}}if(We!==-1&&We!==oe+1){let[pe]=be.splice(We,1);be.splice(oe+1,0,pe)}}}for(let oe=be.length-2;oe>=0;oe--){let Ce=be[oe],ie=be[oe+1];Ce.role==="user"&&ie.role==="user"&&(ie.parts?.[0]?.text||"").trim().startsWith("[SYSTEM")&&be.splice(oe,1)}let je=[];for(let oe=0;oe<be.length;oe++){let Ce=be[oe];if(je.length===0)je.push(Ce);else{let ie=je[je.length-1];ie.role===Ce.role?(ie.parts[0].text+=`
501
+ [/SYSTEM]`:""}`:""} [STEERING HINT]: ${me}`}),yield{type:"status",content:"Steering Hint Injected."})}let $e,Ke=!1,Oe=1,Je=1,Te="",Et=null,Yn=null,Tt=null,Tn=0,lt=[],Se=0,zt=!1,vt=!1,Yo=!1,Bt=!1,jn=!0,ht="",ut="",Jt=!1,Rt=e,jo="";for(;Oe<=at&&Je<=at&&!Ke&&!Bo;){let me=!1;try{Te="",jn&&(process.stdout.isTTY&&process.stdout.write("\x1B]0;Working...\x07"),yield{type:"turn_reset",content:!0},yield{type:"spinner",content:!0},jn=!1,Je===1&&(ht=""));let be=P.filter(oe=>(oe.role==="user"||oe.role==="agent"||oe.role==="system")&&!String(oe.id).startsWith("welcome")&&!oe.isMeta&&!oe.isTerminalRecord&&!(oe.text&&oe.text.startsWith("[TERMINAL_RECORD]"))).map((oe,Ce,ie)=>{let We=oe.text||"";oe.role==="agent"&&(We=We.replace(/\[turn:\s*finish\]/gi,"").replace(/\[\[END\]\]/gi,"").trim());let pe=[{text:We}];return oe.binaryPart&&Qi(Rt)&&ie.slice(Ce+1).filter(He=>He.role==="user"&&!He.text?.startsWith("[TOOL RESULT]")).length<=2&&pe.push(oe.binaryPart),{role:oe.role==="user"||oe.role==="system"?"user":"model",parts:pe}});for(let oe=0;oe<be.length;oe++){let Ce=be[oe],ie=Ce.parts?.[0]?.text||"";if(Ce.role==="model"&&/\[tool:/i.test(ie)){let We=-1;for(let pe=oe+1;pe<be.length;pe++){let St=be[pe],He=St.parts?.[0]?.text||"";if(St.role==="user"&&He.startsWith("[TOOL RESULT]")){We=pe;break}}if(We!==-1&&We!==oe+1){let[pe]=be.splice(We,1);be.splice(oe+1,0,pe)}}}for(let oe=be.length-2;oe>=0;oe--){let Ce=be[oe],ie=be[oe+1];Ce.role==="user"&&ie.role==="user"&&(ie.parts?.[0]?.text||"").trim().startsWith("[SYSTEM")&&be.splice(oe,1)}let je=[];for(let oe=0;oe<be.length;oe++){let Ce=be[oe];if(je.length===0)je.push(Ce);else{let ie=je[je.length-1];ie.role===Ce.role?(ie.parts[0].text+=`
499
502
 
500
503
  `+(Ce.parts?.[0]?.text||""),Ce.parts?.length>1&&ie.parts.push(...Ce.parts.slice(1))):je.push(Ce)}}if(be.length=0,be.push(...je),!await Ei("agent",o))throw new Error("Error: Quota Exausted for Agent");Rt=e,d==="DeepSeek"&&i==="Fast"&&Rt.includes("flash")&&(Rt="deepseek-chat"),Oe===at-1?(Rt=d==="DeepSeek"?"deepseek-v4-flash":"gemini-3-flash-preview",yield{type:"model_update",content:"Trying with fallback model"}):Oe===at?(Rt=d==="DeepSeek"?"deepseek-v4-pro":"gemini-3.5-flash",yield{type:"model_update",content:"Trying with fallback model"}):Oe>12&&Oe<at-2&&o.apiKey!=="custom"?(Rt="gemma-4-31b-it",yield{type:"model_update",content:"Trying with fallback Gemma Model"}):Oe>0&&(yield{type:"model_update",content:null}),jo=ol(r,(Rt||"gemma").toLowerCase().startsWith("gemma")?i:"GEM",u,c,y,A,d,p);let nn=e&&e.toLowerCase().startsWith("gemma")&&d==="Google",pt=be[be.length-1];if(nn){let oe=`
501
504
  [SYSTEM] Tool result received. Analyze output and proceed with your turn${i!="Fast"&&d==="Google"?". **STRICTLY MAINTAIN THINKING POLICY. DO NOT START A RESPONSE WITHOUT <think> ... </think>**":""}[/SYSTEM]`;pt&&pt.role==="user"&&pt.parts?.[0]?.text?.startsWith("[TOOL RESULT]")&&(pt.parts[0].text+=oe)}if(nn){let oe=Math.floor(Nt*(u==="Flux"?.98:.7)),Ce=re+1;Ce>=oe&&pt&&pt.parts?.[0]&&(pt.parts[0].text+=`
502
505
  [SYSTEM] WARNING, Turn Limit Impending: Step ${Ce}/${Nt}. Wrap up quickly/prompt user to continue & use [[END]] quickly.[/SYSTEM]`)}let sn=new Promise((oe,Ce)=>{M.signal.aborted&&Ce(new DOMException("The user aborted a request.","AbortError")),M.signal.addEventListener("abort",()=>{Ce(new DOMException("The user aborted a request.","AbortError"))})}),Ut=be;if(d==="OpenRouter")$e=sa(o.apiKey,Rt,Ut,jo,i,u,p,M.signal);else if(d==="DeepSeek")$e=oa(o.apiKey,Rt,Ut,jo,i,u,p,M.signal);else if(d==="NVIDIA")$e=na(o.apiKey,Rt,Ut,jo,i,u,p,M.signal);else{let oe=Cs.models.generateContentStream({model:Rt||"gemma-4-31b-it",contents:Ut,config:{systemInstruction:jo,mediaResolution:"MEDIA_RESOLUTION_MEDIUM",safetySettings:[{category:Bn.HARM_CATEGORY_HARASSMENT,threshold:Nn.BLOCK_NONE},{category:Bn.HARM_CATEGORY_HATE_SPEECH,threshold:Nn.BLOCK_NONE},{category:Bn.HARM_CATEGORY_SEXUALLY_EXPLICIT,threshold:Nn.BLOCK_NONE},{category:Bn.HARM_CATEGORY_DANGEROUS_CONTENT,threshold:Nn.BLOCK_NONE}],thinkingConfig:(()=>{let Ce=(Rt||"").toLowerCase(),ie=Ce.includes("gemma-4")||Ce.startsWith("gemma"),We=Ce.includes("gemini-3");if(ie||We)return ie?{includeThoughts:!1,thinkingLevel:Ro.MINIMAL}:{includeThoughts:!0,thinkingLevel:{Fast:Ce.includes("pro")?Ro.LOW:Ro.MINIMAL,Low:Ro.LOW,Medium:Ro.MEDIUM,Standard:Ro.MEDIUM,High:Ro.HIGH,xHigh:Ro.HIGH}[i]||Ro.MEDIUM};{let pe={Fast:0,Low:512,Medium:2048,Standard:2048,High:16384,xHigh:24576}[i]||2048;return pe===0?{includeThoughts:!1}:{includeThoughts:!0,thinkingBudget:pe}}})()}},{signal:M.signal});$e=await Promise.race([oe,sn])}Te="",Et=null,Tt=null,lt=[],Se=0,yield{type:"model_update",content:null},ut="",Jt=ht.length>0;let Dt="",Wt=Date.now(),Ot=async function*(){if(d==="Google"&&Dt){let oe=Sn(Dt);for(let Ce of oe)yield Ce;Dt="",Wt=Date.now()}},io=!0,Qt="",Co=!1,rn=null,Sn=oe=>{let Ce=[],ie=oe;for(;ie.length>0;)if(Co){let We=rn==="tool"?"]":"[[END]]",pe=Qt+ie;if(rn==="tool"){let He="[tool:functions.";if(!pe.startsWith("[tool")||pe.length>=He.length&&!pe.startsWith(He)){Ce.push({type:"text",content:pe}),Qt="",Co=!1,rn=null,ie="";break}}let St=pe.indexOf(We);if(St!==-1){let He=pe.substring(0,St+We.length);Ce.push({type:"text",content:He}),Qt="",Co=!1,rn=null,ie=pe.substring(St+We.length)}else{pe.length>512?(Ce.push({type:"text",content:pe}),Qt="",Co=!1):Qt=pe,ie="";break}}else{let We=ie.indexOf("[tool"),pe=ie.indexOf("[[END]]"),St=[{type:"tool",idx:We,start:"[tool",end:"]"},{type:"end",idx:pe,start:"[[END]]",end:"[[END]]"}].filter(He=>He.idx!==-1).sort((He,Ho)=>He.idx-Ho.idx);if(St.length>0){let He=St[0];He.idx>0&&Ce.push({type:"text",content:ie.substring(0,He.idx)}),Co=!0,rn=He.type,Qt="",ie=ie.substring(He.idx)}else{let He=["[tool","[[END]]"],Ho=-1;for(let En of He){for(let fo=En.length-1;fo>0;fo--)if(ie.endsWith(En.substring(0,fo))){Ho=ie.length-fo,rn=He.indexOf(En)===0?"tool":"end";break}if(Ho!==-1)break}if(Ho!==-1)Ho>0&&Ce.push({type:"text",content:ie.substring(0,Ho)}),Co=!0,Qt=ie.substring(Ho),ie="";else{Ce.push({type:"text",content:ie});break}}}return Ce},Zs=$e[Symbol.asyncIterator]();for(;;){let{value:oe,done:Ce}=await Promise.race([Zs.next(),sn]);if(Ce)break;if(io&&(yield{type:"status",content:"Working..."},io=!1),Bo){yield{type:"status",content:"Request Cancelled"},yield{type:"text",content:`
503
506
 
504
- \x1B[33m\u2139 Request Cancelled\x1B[0m`};break}let ie="",We=oe.candidates?.[0]?.content?.parts;if(We&&We.length>0)for(let pe of We)pe.thought?pe.text&&(me||(ie+="<think>",me=!0),ie+=pe.text):pe.text&&(me&&(ie+="</think>",me=!1),ie+=pe.text);else{let pe=oe.text||"";pe&&me&&(ie+="</think>",me=!1),ie+=pe}if(ie){if(Jt){if(ut+=ie,ut.length>=64){let Z=0,Qe=Math.min(ht.length,ut.length);for(let K=Qe;K>=10;K--)if(ht.endsWith(ut.substring(0,K))){Z=K;break}let gt=ut.substring(Z);if(gt){let _e=/(?:<(think|thought)>|\[(think|thought)\])(?:(?!(?:<\/(?:think|thought)>|\[\/(?:think|thought)\]))[\s\S])*$/i.test(ht)?gt.replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])\s*/gi,""):gt.replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])[\s\S]*?(?:<\/(think|thought)>|\[\/(think|thought)\])\s*/gi,"").replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])\s*/gi,"");if(_e)if(Te+=_e,d==="Google")Dt+=_e;else{let U=Sn(_e);for(let ve of U)yield ve}}Jt=!1,ut=""}continue}else if(Te+=ie,d==="Google")Dt+=ie;else{let Z=Sn(ie);for(let Qe of Z)yield Qe}let pe=sc(Te),St=Zu(Te);if(St.inside){Tt||(Tt=Date.now());let Z=St.toolName,gt={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",file_map:"file_map",FileMap:"file_map",Chat:"chat",chat:"chat",GenerateImage:"generate_image",generate_image:"generate_image"}[Z]||Z,K=St.args||"",_e=null;if(["write_file","update_file","view_file","read_folder","write_pdf","write_docx","search_keyword","generate_image","file_map"].includes(gt)){let ve=se(K),vo=ve.path||ve.targetFile||ve.TargetFile||ve.directory,z=ve.keyword;if(z)_e=z.replace(/["']/g,"");else if(vo)_e=Ae.basename(vo.replace(/["']/g,"").replace(/\\/g,"/"));else{let Jn=K.match(/(?:path|targetFile|TargetFile|directory|keyword)\s*=\s*\\?["']?([^\\"' \),]+)/);if(Jn){let xt=Jn[1].replace(/["']/g,"");_e=gt==="search_keyword"||gt==="file_map"?xt:Ae.basename(xt.replace(/\\/g,"/"))}}}let U=`${nc[gt]||gt}${_e?` (${_e})`:""}`;if((gt!==Et||_e!==Yn)&&(Et=gt,Yn=_e,yield{type:"status",content:`${U}...`},process.stdout.isTTY)){let vo={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"}[gt]||"Working";process.stdout.write(`\x1B]0;${vo}...\x07`)}}let He=ac(Te,!1),En=(He.match(/(?:<think>|\[think\])([\s\S]*?)(?:<\/think>|\[\/think\]|$)/gi)||[]).join("").trim(),fo=En.split(/[.!?]\s+/),Os=new Set(fo),Kn=fo.length>10?(fo.length-Os.size)/fo.length:0,or=En.split(/\s+/).filter(Z=>Z.length>0).length,Ls=.4,Ps=.6,Vn=!1;if((Rt||"").toLowerCase().startsWith("gemma")){let Qe={low:256,medium:768,high:2048,max:4096,xhigh:4096}[i?.toLowerCase()]||2500;Vn=or>Qe}if(Kn>Ls||Vn){yield{type:"status",content:`${Kn>Ls?"Reasoning Loop Detected":"Thinking Budget Exceeded"}. Re-centering...`},vt=!0,await new Promise(Qe=>setTimeout(Qe,3e3));break}let qn=pe.trim().split(/[.!?]\s+/),zn=new Set(qn);if((qn.length>10?(qn.length-zn.size)/qn.length:0)>Ps){yield{type:"status",content:"Response Loop Detected. Re-centering..."},vt=!1,Bt=!0,await new Promise(Z=>setTimeout(Z,3e3));break}let Go=He.toLowerCase().split(/\s+/).filter(Z=>Z.length>0),Xo=!1;if(Go.length>5)for(let Z=1;Z<=15;Z++){let Qe=Math.max(3,Math.ceil(8/Z));if(Go.length<Z*Qe)continue;let gt=!0,_e=Go.slice(Go.length-Z).join(" ");for(let U=1;U<Qe;U++)if(Go.slice(Go.length-Z*(U+1),Go.length-Z*U).join(" ")!==_e){gt=!1;break}if(gt){Xo=!0;break}}if(!Xo){let Z=He.toLowerCase().replace(/[^a-z0-9]/gi,"");if(Z.length>=10)for(let Qe=1;Qe<=10;Qe++){let gt=Math.max(4,Math.ceil(12/Qe));if(Z.length<Qe*gt)continue;let K=Z.substring(Z.length-Qe),_e=!0;for(let U=1;U<gt;U++)if(Z.substring(Z.length-Qe*(U+1),Z.length-Qe*U)!==K){_e=!1;break}if(_e){Xo=!0;break}}}if(Xo){yield{type:"status",content:"Stuttering Detected. Re-centering..."},vt=!1,Yo=!0,await new Promise(Z=>setTimeout(Z,3e3));break}let Ta=Te.replace(/(?:<(think|thought|thoughts)>|\[(think|thought|thoughts)\])[\s\S]*?(?:<\/(think|thought|thoughts)>|\[\/(think|thought|thoughts)\]|$)/gi,""),ds=ra(Ta);for(;ds.length>Se;){yield*Ot();let Z=ds[Se],Qe=Date.now(),K={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",file_map:"file_map",FileMap:"file_map",Chat:"chat",chat:"chat",GenerateImage:"generate_image",generate_image:"generate_image",todo:"todo",Todo:"todo"}[Z.toolName]||Z.toolName,_e=nc[K]||Z.toolName,U=Qu(K,Z.args);yield{type:"status",content:`${_e}${U?` (${U})`:""}...`};let ve="";if(K==="web_search"){let{query:x,limit:g=10}=se(Z.args);ve=`\u{1F50D} Searched: ${x}`}else if(K==="web_scrape")ve=`\u{1F4D6} Visited: ${se(Z.args).url||"..."}`;else if(K==="view_file"){let{path:x,StartLine:g,EndLine:v,start_line:F,end_line:C,startLine:_,endLine:B}=se(Z.args),b=g||F||_,L=v||C||B,R=parseInt(b)||1,V=parseInt(L)||(b?R+800:800),ne="...",Ne=V;try{let Re=Ae.resolve(process.cwd(),x);if(tt.existsSync(Re)){let Yt=tt.readFileSync(Re,"utf8").split(`
505
- `).length;ne=Yt,Ne=Math.min(V,Yt)}}catch{}let de=x.toLowerCase(),ce=de.endsWith(".pdf"),xe=de.endsWith(".docx")||de.endsWith(".doc")||de.endsWith(".ppt")||de.endsWith(".pptx")||de.endsWith(".xls")||de.endsWith(".xlsx"),ye=/\.(png|jpg|jpeg|webp|gif|bmp)$/.test(de);ce||xe?ve=`\u{1F4C4} Viewed: ${x}`:ye?ve=`\u{1F4F8} Viewed: ${x}`:ve=`\u{1F4C4} Read: ${x} \u2192 Lines ${R} - ${Ne} of ${ne}`}else if(K==="list_files"||K==="read_folder"){let x=K==="list_files"?"List":"Viewed",g=se(Z.args).path;ve=`\u{1F4C2} ${x}: ${g==="."?"./":g}`}else if(K==="write_file"||K==="update_file")ve=`\u{1F4BE} ${K==="write_file"?"Created":"Edited"}: ${se(Z.args).path||"..."}`;else if(K==="write_pdf")ve=`\u{1F4D1} Created: ${se(Z.args).path||"..."}`;else if(K==="write_docx")ve=`\u{1F4DD} Created: ${se(Z.args).path||"..."}`;else if(K==="file_map")ve=`\u{1F4CB} Get Map: ${se(Z.args).path||"..."}`;else if(K.toLowerCase()==="search_keyword"||K.toLowerCase()==="todo")ve="";else if(K.toLowerCase()==="generate_image"){let{path:x,outputPath:g,output:v}=se(Z.args);ve=`\u{1F3A8} Generated: ${x||g||v||"generated_image.png"}`}else K.toLowerCase()==="exec_command"||K.toLowerCase()==="ask"?ve="":ve=`Executed: ${Z.toolName}`;if(K==="exec_command"){let{command:x}=se(Z.args);if(x&&o.systemSettings&&o.systemSettings.allowExternalAccess===!1){let g=[/[a-zA-Z]:[\\\/]/i,/^\//,/\.\.[\\\/]/,/\/etc\//,/\/var\//,/\/root\//,/\/bin\//,/\/usr\//],v=Ae.resolve(process.cwd()).substring(0,3).toLowerCase();if(g.some(C=>{if(C.source==="[a-zA-Z]:[\\\\\\/]"){let _=x.match(/[a-zA-Z]:[\\\/]/i);return _&&_[0].toLowerCase()!==v}return C.test(x)})){let C='Access Denied. Terminal is prohibited from accessing system drives (C://) or external directories while "External Workspace Access" is disabled.';o.onExecStart&&o.onExecStart(x||"Unknown"),yield{type:"exec_start"},await new Promise(_=>setTimeout(_,50)),o.onExecChunk&&o.onExecChunk(`ERROR: ${C}`),await new Promise(_=>setTimeout(_,50)),o.onExecEnd&&o.onExecEnd(),lt.push({role:"user",text:`[TOOL RESULT]: ERROR: ${C}`}),yield{type:"tool_result",content:`[TOOL RESULT]: ERROR: ${C}`},Se++;continue}}o.onExecStart&&o.onExecStart(x||"Unknown"),yield{type:"exec_start"}}let vo=se(Z.args),z=vo.path||vo.targetPath||null;if(z){let x=o.systemSettings&&o.systemSettings.allowExternalAccess===!1,g=Ae.resolve(z),v=Ae.resolve(process.cwd());if(x&&!g.startsWith(v)){let F="Access Denied. You are not allowed to access files outside the current workspace.";if(K==="write_file"||K==="update_file"){let _=`\u{1F4BE} ${K==="write_file"?"Write Canceled":"Edit Canceled"}: ${vo.path||"..."}`,B=115;process.stdout.isTTY&&(B=process.stdout.columns-10||120);let b=Math.min(_.length+4,B),L=`\u256D${"\u2500".repeat(b)}\u256E`,R=`\u2502 ${_.padEnd(b-2).substring(0,b-2)} \u2502`,V=`\u2570${"\u2500".repeat(b)}\u256F`;yield{type:"visual_feedback",content:`${L}
507
+ \x1B[33m\u2139 Request Cancelled\x1B[0m`};break}let ie="",We=oe.candidates?.[0]?.content?.parts;if(We&&We.length>0)for(let pe of We)pe.thought?pe.text&&(me||(ie+="<think>",me=!0),ie+=pe.text):pe.text&&(me&&(ie+="</think>",me=!1),ie+=pe.text);else{let pe=oe.text||"";pe&&me&&(ie+="</think>",me=!1),ie+=pe}if(ie){if(Jt){if(ut+=ie,ut.length>=64){let Z=0,Qe=Math.min(ht.length,ut.length);for(let X=Qe;X>=10;X--)if(ht.endsWith(ut.substring(0,X))){Z=X;break}let gt=ut.substring(Z);if(gt){let _e=/(?:<(think|thought)>|\[(think|thought)\])(?:(?!(?:<\/(?:think|thought)>|\[\/(?:think|thought)\]))[\s\S])*$/i.test(ht)?gt.replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])\s*/gi,""):gt.replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])[\s\S]*?(?:<\/(think|thought)>|\[\/(think|thought)\])\s*/gi,"").replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])\s*/gi,"");if(_e)if(Te+=_e,d==="Google")Dt+=_e;else{let U=Sn(_e);for(let ve of U)yield ve}}Jt=!1,ut=""}continue}else if(Te+=ie,d==="Google")Dt+=ie;else{let Z=Sn(ie);for(let Qe of Z)yield Qe}let pe=sc(Te),St=Zu(Te);if(St.inside){Tt||(Tt=Date.now());let Z=St.toolName,gt={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",file_map:"file_map",FileMap:"file_map",Chat:"chat",chat:"chat",GenerateImage:"generate_image",generate_image:"generate_image"}[Z]||Z,X=St.args||"",_e=null;if(["write_file","update_file","view_file","read_folder","write_pdf","write_docx","search_keyword","generate_image","file_map"].includes(gt)){let ve=se(X),vo=ve.path||ve.targetFile||ve.TargetFile||ve.directory,z=ve.keyword;if(z)_e=z.replace(/["']/g,"");else if(vo)_e=Ae.basename(vo.replace(/["']/g,"").replace(/\\/g,"/"));else{let Jn=X.match(/(?:path|targetFile|TargetFile|directory|keyword)\s*=\s*\\?["']?([^\\"' \),]+)/);if(Jn){let xt=Jn[1].replace(/["']/g,"");_e=gt==="search_keyword"||gt==="file_map"?xt:Ae.basename(xt.replace(/\\/g,"/"))}}}let U=`${nc[gt]||gt}${_e?` (${_e})`:""}`;if((gt!==Et||_e!==Yn)&&(Et=gt,Yn=_e,yield{type:"status",content:`${U}...`},process.stdout.isTTY)){let vo={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"}[gt]||"Working";process.stdout.write(`\x1B]0;${vo}...\x07`)}}let He=ac(Te,!1),En=(He.match(/(?:<think>|\[think\])([\s\S]*?)(?:<\/think>|\[\/think\]|$)/gi)||[]).join("").trim(),fo=En.split(/[.!?]\s+/),Os=new Set(fo),Xn=fo.length>10?(fo.length-Os.size)/fo.length:0,or=En.split(/\s+/).filter(Z=>Z.length>0).length,Ls=.4,Ps=.6,Vn=!1;if((Rt||"").toLowerCase().startsWith("gemma")){let Qe={low:256,medium:768,high:2048,max:4096,xhigh:4096}[i?.toLowerCase()]||2500;Vn=or>Qe}if(Xn>Ls||Vn){yield{type:"status",content:`${Xn>Ls?"Reasoning Loop Detected":"Thinking Budget Exceeded"}. Re-centering...`},vt=!0,await new Promise(Qe=>setTimeout(Qe,3e3));break}let qn=pe.trim().split(/[.!?]\s+/),zn=new Set(qn);if((qn.length>10?(qn.length-zn.size)/qn.length:0)>Ps){yield{type:"status",content:"Response Loop Detected. Re-centering..."},vt=!1,Bt=!0,await new Promise(Z=>setTimeout(Z,3e3));break}let Go=He.toLowerCase().split(/\s+/).filter(Z=>Z.length>0),Ko=!1;if(Go.length>5)for(let Z=1;Z<=15;Z++){let Qe=Math.max(3,Math.ceil(8/Z));if(Go.length<Z*Qe)continue;let gt=!0,_e=Go.slice(Go.length-Z).join(" ");for(let U=1;U<Qe;U++)if(Go.slice(Go.length-Z*(U+1),Go.length-Z*U).join(" ")!==_e){gt=!1;break}if(gt){Ko=!0;break}}if(!Ko){let Z=He.toLowerCase().replace(/[^a-z0-9]/gi,"");if(Z.length>=10)for(let Qe=1;Qe<=10;Qe++){let gt=Math.max(4,Math.ceil(12/Qe));if(Z.length<Qe*gt)continue;let X=Z.substring(Z.length-Qe),_e=!0;for(let U=1;U<gt;U++)if(Z.substring(Z.length-Qe*(U+1),Z.length-Qe*U)!==X){_e=!1;break}if(_e){Ko=!0;break}}}if(Ko){yield{type:"status",content:"Stuttering Detected. Re-centering..."},vt=!1,Yo=!0,await new Promise(Z=>setTimeout(Z,3e3));break}let Ta=Te.replace(/(?:<(think|thought|thoughts)>|\[(think|thought|thoughts)\])[\s\S]*?(?:<\/(think|thought|thoughts)>|\[\/(think|thought|thoughts)\]|$)/gi,""),ds=ra(Ta);for(;ds.length>Se;){yield*Ot();let Z=ds[Se],Qe=Date.now(),X={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",file_map:"file_map",FileMap:"file_map",Chat:"chat",chat:"chat",GenerateImage:"generate_image",generate_image:"generate_image",todo:"todo",Todo:"todo"}[Z.toolName]||Z.toolName,_e=nc[X]||Z.toolName,U=Qu(X,Z.args);yield{type:"status",content:`${_e}${U?` (${U})`:""}...`};let ve="";if(X==="web_search"){let{query:x,limit:g=10}=se(Z.args);ve=`\u{1F50D} Searched: ${x}`}else if(X==="web_scrape")ve=`\u{1F4D6} Visited: ${se(Z.args).url||"..."}`;else if(X==="view_file"){let{path:x,StartLine:g,EndLine:v,start_line:F,end_line:C,startLine:_,endLine:B}=se(Z.args),b=g||F||_,L=v||C||B,R=parseInt(b)||1,V=parseInt(L)||(b?R+800:800),ne="...",Ne=V;try{let Re=Ae.resolve(process.cwd(),x);if(tt.existsSync(Re)){let Yt=tt.readFileSync(Re,"utf8").split(`
508
+ `).length;ne=Yt,Ne=Math.min(V,Yt)}}catch{}let de=x.toLowerCase(),ce=de.endsWith(".pdf"),xe=de.endsWith(".docx")||de.endsWith(".doc")||de.endsWith(".ppt")||de.endsWith(".pptx")||de.endsWith(".xls")||de.endsWith(".xlsx"),ye=/\.(png|jpg|jpeg|webp|gif|bmp)$/.test(de);ce||xe?ve=`\u{1F4C4} Viewed: ${x}`:ye?ve=`\u{1F4F8} Viewed: ${x}`:ve=`\u{1F4C4} Read: ${x} \u2192 Lines ${R} - ${Ne} of ${ne}`}else if(X==="list_files"||X==="read_folder"){let x=X==="list_files"?"List":"Viewed",g=se(Z.args).path;ve=`\u{1F4C2} ${x}: ${g==="."?"./":g}`}else if(X==="write_file"||X==="update_file")ve=`\u{1F4BE} ${X==="write_file"?"Created":"Edited"}: ${se(Z.args).path||"..."}`;else if(X==="write_pdf")ve=`\u{1F4D1} Created: ${se(Z.args).path||"..."}`;else if(X==="write_docx")ve=`\u{1F4DD} Created: ${se(Z.args).path||"..."}`;else if(X==="file_map")ve=`\u{1F4CB} Get Map: ${se(Z.args).path||"..."}`;else if(X.toLowerCase()==="search_keyword"||X.toLowerCase()==="todo")ve="";else if(X.toLowerCase()==="generate_image"){let{path:x,outputPath:g,output:v}=se(Z.args);ve=`\u{1F3A8} Generated: ${x||g||v||"generated_image.png"}`}else X.toLowerCase()==="exec_command"||X.toLowerCase()==="ask"?ve="":ve=`Executed: ${Z.toolName}`;if(X==="exec_command"){let{command:x}=se(Z.args);if(x&&o.systemSettings&&o.systemSettings.allowExternalAccess===!1){let g=[/[a-zA-Z]:[\\\/]/i,/^\//,/\.\.[\\\/]/,/\/etc\//,/\/var\//,/\/root\//,/\/bin\//,/\/usr\//],v=Ae.resolve(process.cwd()).substring(0,3).toLowerCase();if(g.some(C=>{if(C.source==="[a-zA-Z]:[\\\\\\/]"){let _=x.match(/[a-zA-Z]:[\\\/]/i);return _&&_[0].toLowerCase()!==v}return C.test(x)})){let C='Access Denied. Terminal is prohibited from accessing system drives (C://) or external directories while "External Workspace Access" is disabled.';o.onExecStart&&o.onExecStart(x||"Unknown"),yield{type:"exec_start"},await new Promise(_=>setTimeout(_,50)),o.onExecChunk&&o.onExecChunk(`ERROR: ${C}`),await new Promise(_=>setTimeout(_,50)),o.onExecEnd&&o.onExecEnd(),lt.push({role:"user",text:`[TOOL RESULT]: ERROR: ${C}`}),yield{type:"tool_result",content:`[TOOL RESULT]: ERROR: ${C}`},Se++;continue}}o.onExecStart&&o.onExecStart(x||"Unknown"),yield{type:"exec_start"}}let vo=se(Z.args),z=vo.path||vo.targetPath||null;if(z){let x=o.systemSettings&&o.systemSettings.allowExternalAccess===!1,g=Ae.resolve(z),v=Ae.resolve(process.cwd());if(x&&!g.startsWith(v)){let F="Access Denied. You are not allowed to access files outside the current workspace.";if(X==="write_file"||X==="update_file"){let _=`\u{1F4BE} ${X==="write_file"?"Write Canceled":"Edit Canceled"}: ${vo.path||"..."}`,B=115;process.stdout.isTTY&&(B=process.stdout.columns-10||120);let b=Math.min(_.length+4,B),L=`\u256D${"\u2500".repeat(b)}\u256E`,R=`\u2502 ${_.padEnd(b-2).substring(0,b-2)} \u2502`,V=`\u2570${"\u2500".repeat(b)}\u256F`;yield{type:"visual_feedback",content:`${L}
506
509
  ${R}
507
- ${V}`}}lt.push({role:"user",text:`[TOOL RESULT]: ERROR: ${F}`}),yield{type:"tool_result",content:`[TOOL RESULT]: ERROR: ${F}`},Se++;continue}}if(o.onToolApproval&&(K==="write_file"||K==="update_file"||K==="exec_command")){let g=o.systemSettings||{},v=g.autoExec,F=null,C=!1,_=!1,B=!1;if(K==="exec_command"){let{command:ce}=se(Z.args),xe=(ce||"").trim(),ye=(Yt,wo)=>{if(!wo)return!1;let dt=wo.split(",").map(ao=>ao.trim().toLowerCase()).filter(Boolean),an=Yt.toLowerCase();return dt.some(ao=>an.startsWith(ao))},Re=ye(xe,g.alwaysAskCommands),Be=ye(xe,g.autoApproveCommands);_=ye(xe,g.autoDisallowCommands),Re?C=!0:(Be||g.autoApproveGit&&/^git\s+commit\b/i.test(xe))&&(F="allow"),!C&&!F&&(g.networkAccess===!1&&/\b(curl|wget|npm|yarn|pnpm|pip|pip3|ssh|docker|git\s+(clone|push|pull|fetch))\b/i.test(xe)&&(F="deny",B=!0),!F&&_&&(F="deny")),!C&&!F&&v&&(F="allow")}else v&&(F="allow");let b=F,L="";F==="deny"&&(B?L="network":_?L="settings":L="prohibited");let R=!1,V="",ne=[],Ne=0,de=!1;if(!b){if(K==="write_file"||K==="update_file")try{let ye=se(Z.args),{path:Re}=ye;if(Re){let Be=Ae.resolve(process.cwd(),Re),Yt=we=>we?we.toLowerCase().replace(/\\/g,"/").replace(/^[a-z]:/,ge=>ge.toUpperCase()):"",wo=Yt(Be),dt="",an=!1,ao=await qs(),X=Yt(ao?.file_focused);if(ao&&X===wo&&ao.full_content?(dt=ao.full_content,an=!0):tt.existsSync(Be)&&(dt=tt.readFileSync(Be,"utf8"),an=!0),V=dt,await yt.recordFileChange(Be,dt),an){let we=dt;if(K==="write_file")we=ye.content||ye.newContent||"";else{let{patchPairs:ge,error:Le}=pr(ye);if(Le){let Ue=`[TOOL RESULT]: ERROR: ${Le}`;lt.push({role:"user",text:Ue}),await Jo("toolFailure"),o.onToolResult&&o.onToolResult("failure",K),yield{type:"tool_result",content:Ue,toolName:K},Se++;continue}Ne=ge.length;let jt=gr(dt,ge);we=jt.content,ne=jt.results;let ke=ne.filter(Ue=>Ue.success),Ie=ne.filter(Ue=>!Ue.success);if(ke.length===0){let Ue=`[TOOL RESULT]: ERROR: Failed to apply patches to [${Ae.basename(Be)}].
510
+ ${V}`}}lt.push({role:"user",text:`[TOOL RESULT]: ERROR: ${F}`}),yield{type:"tool_result",content:`[TOOL RESULT]: ERROR: ${F}`},Se++;continue}}if(o.onToolApproval&&(X==="write_file"||X==="update_file"||X==="exec_command")){let g=o.systemSettings||{},v=g.autoExec,F=null,C=!1,_=!1,B=!1;if(X==="exec_command"){let{command:ce}=se(Z.args),xe=(ce||"").trim(),ye=(Yt,wo)=>{if(!wo)return!1;let dt=wo.split(",").map(ao=>ao.trim().toLowerCase()).filter(Boolean),an=Yt.toLowerCase();return dt.some(ao=>an.startsWith(ao))},Re=ye(xe,g.alwaysAskCommands),Be=ye(xe,g.autoApproveCommands);_=ye(xe,g.autoDisallowCommands),Re?C=!0:(Be||g.autoApproveGit&&/^git\s+commit\b/i.test(xe))&&(F="allow"),!C&&!F&&(g.networkAccess===!1&&/\b(curl|wget|npm|yarn|pnpm|pip|pip3|ssh|docker|git\s+(clone|push|pull|fetch))\b/i.test(xe)&&(F="deny",B=!0),!F&&_&&(F="deny")),!C&&!F&&v&&(F="allow")}else v&&(F="allow");let b=F,L="";F==="deny"&&(B?L="network":_?L="settings":L="prohibited");let R=!1,V="",ne=[],Ne=0,de=!1;if(!b){if(X==="write_file"||X==="update_file")try{let ye=se(Z.args),{path:Re}=ye;if(Re){let Be=Ae.resolve(process.cwd(),Re),Yt=we=>we?we.toLowerCase().replace(/\\/g,"/").replace(/^[a-z]:/,ge=>ge.toUpperCase()):"",wo=Yt(Be),dt="",an=!1,ao=await qs(),K=Yt(ao?.file_focused);if(ao&&K===wo&&ao.full_content?(dt=ao.full_content,an=!0):tt.existsSync(Be)&&(dt=tt.readFileSync(Be,"utf8"),an=!0),V=dt,await yt.recordFileChange(Be,dt),an){let we=dt;if(X==="write_file")we=ye.content||ye.newContent||"";else{let{patchPairs:ge,error:Le}=pr(ye);if(Le){let Ue=`[TOOL RESULT]: ERROR: ${Le}`;lt.push({role:"user",text:Ue}),await Jo("toolFailure"),o.onToolResult&&o.onToolResult("failure",X),yield{type:"tool_result",content:Ue,toolName:X},Se++;continue}Ne=ge.length;let jt=gr(dt,ge);we=jt.content,ne=jt.results;let ke=ne.filter(Ue=>Ue.success),Ie=ne.filter(Ue=>!Ue.success);if(ke.length===0){let Ue=`[TOOL RESULT]: ERROR: Failed to apply patches to [${Ae.basename(Be)}].
508
511
  ${Ie.map(sr=>` \u2022 ${sr.error}`).join(`
509
- `)}`,st=`\u{1F4BE} Edited: ${Ae.basename(Be)}`.toUpperCase(),Ge=115;process.stdout.isTTY&&(Ge=process.stdout.columns-10||120);let Ze=Math.min(st.length+4,Ge),Ko=`\u256D${"\u2500".repeat(Ze)}\u256E`,Cn=`\u2502 ${st.padEnd(Ze-2).substring(0,Ze-2)} \u2502`,Qn=`\u2570${"\u2500".repeat(Ze)}\u256F`;yield{type:"visual_feedback",content:`${Ko}
512
+ `)}`,st=`\u{1F4BE} Edited: ${Ae.basename(Be)}`.toUpperCase(),Ge=115;process.stdout.isTTY&&(Ge=process.stdout.columns-10||120);let Ze=Math.min(st.length+4,Ge),Xo=`\u256D${"\u2500".repeat(Ze)}\u256E`,Cn=`\u2502 ${st.padEnd(Ze-2).substring(0,Ze-2)} \u2502`,Qn=`\u2570${"\u2500".repeat(Ze)}\u256F`;yield{type:"visual_feedback",content:`${Xo}
510
513
  ${Cn}
511
- ${Qn}`},lt.push({role:"user",text:Ue}),await Jo("toolFailure"),o.onToolResult&&o.onToolResult("failure",K),yield{type:"tool_result",content:Ue,toolName:K},Se++;continue}}yield{type:"status",content:`Opening Diff in IDE: ${Ae.basename(Be)}...`},zi(Be,dt,we),R=!0,await new Promise(ge=>setTimeout(ge,50))}else if(K==="write_file"){let we=ye.content||ye.newContent||"";tt.existsSync(Be)||(de=!0,tt.mkdirSync(Ae.dirname(Be),{recursive:!0}),tt.writeFileSync(Be,"","utf8")),yield{type:"status",content:`Opening New File Diff in IDE: ${Ae.basename(Be)}...`},zi(Be,"",we),R=!0,await new Promise(ge=>setTimeout(ge,50))}}}catch(ye){console.error("Simulation/Diff Error:",ye)}let ce=null;qi(ye=>{ce=ye});let xe=o.onToolApproval;if(b=await new Promise(async ye=>{let Re=setInterval(()=>{ce&&(Zi.onIDEApproval&&Zi.onIDEApproval(ce),clearInterval(Re),ye(ce))},100);try{let Be=await xe(K,Z.args);clearInterval(Re),ye(Be)}catch{clearInterval(Re),ye("deny")}}),qi(null),K==="write_file"||K==="update_file"){let{path:ye}=se(Z.args);if(ye){let Re=Ae.resolve(process.cwd(),ye);if(oc(Re,b),b==="deny"&&de&&tt.existsSync(Re))try{tt.unlinkSync(Re)}catch{}}}b==="deny"&&(L="user")}if(b==="allow"&&R&&Qo()){let{path:ce}=se(Z.args),xe=Ae.resolve(process.cwd(),ce),ye=await qs(),Re="";ye&&ye.file_focused===xe&&ye.full_content?Re=ye.full_content:tt.existsSync(xe)&&(Re=tt.readFileSync(xe,"utf8"));let Be=Re.split(/\r?\n/),Yt=Be.length,wo=Buffer.byteLength(Re,"utf8"),dt="";V&&(dt=`Old File contents:
512
- ${V.split(/\r?\n/).map((Ze,Ko)=>`${Ko+1} | ${Ze}`).join(`
514
+ ${Qn}`},lt.push({role:"user",text:Ue}),await Jo("toolFailure"),o.onToolResult&&o.onToolResult("failure",X),yield{type:"tool_result",content:Ue,toolName:X},Se++;continue}}yield{type:"status",content:`Opening Diff in IDE: ${Ae.basename(Be)}...`},zi(Be,dt,we),R=!0,await new Promise(ge=>setTimeout(ge,50))}else if(X==="write_file"){let we=ye.content||ye.newContent||"";tt.existsSync(Be)||(de=!0,tt.mkdirSync(Ae.dirname(Be),{recursive:!0}),tt.writeFileSync(Be,"","utf8")),yield{type:"status",content:`Opening New File Diff in IDE: ${Ae.basename(Be)}...`},zi(Be,"",we),R=!0,await new Promise(ge=>setTimeout(ge,50))}}}catch(ye){console.error("Simulation/Diff Error:",ye)}let ce=null;qi(ye=>{ce=ye});let xe=o.onToolApproval;if(b=await new Promise(async ye=>{let Re=setInterval(()=>{ce&&(Zi.onIDEApproval&&Zi.onIDEApproval(ce),clearInterval(Re),ye(ce))},100);try{let Be=await xe(X,Z.args);clearInterval(Re),ye(Be)}catch{clearInterval(Re),ye("deny")}}),qi(null),X==="write_file"||X==="update_file"){let{path:ye}=se(Z.args);if(ye){let Re=Ae.resolve(process.cwd(),ye);if(oc(Re,b),b==="deny"&&de&&tt.existsSync(Re))try{tt.unlinkSync(Re)}catch{}}}b==="deny"&&(L="user")}if(b==="allow"&&R&&Qo()){let{path:ce}=se(Z.args),xe=Ae.resolve(process.cwd(),ce),ye=await qs(),Re="";ye&&ye.file_focused===xe&&ye.full_content?Re=ye.full_content:tt.existsSync(xe)&&(Re=tt.readFileSync(xe,"utf8"));let Be=Re.split(/\r?\n/),Yt=Be.length,wo=Buffer.byteLength(Re,"utf8"),dt="";V&&(dt=`Old File contents:
515
+ ${V.split(/\r?\n/).map((Ze,Xo)=>`${Xo+1} | ${Ze}`).join(`
513
516
  `)}
514
517
 
515
518
  `);let an="";if(Yt<=200)an=Be.join(`
@@ -519,9 +522,9 @@ ${V.split(/\r?\n/).map((Ze,Ko)=>`${Ko+1} | ${Ze}`).join(`
519
522
 
520
523
  ... [${Yt-200} lines truncated for history stability] ...
521
524
 
522
- ${Ze}`}let ao="";if(K==="update_file"){let Ge=xr(V,Re,ne,12);ao=`SUCCESS: File [${ce}] updated via IDE Companion (May have user edits). [${ne.length}/${Ne}] blocks applied.
525
+ ${Ze}`}let ao="";if(X==="update_file"){let Ge=xr(V,Re,ne,12);ao=`SUCCESS: File [${ce}] updated via IDE Companion (May have user edits). [${ne.length}/${Ne}] blocks applied.
523
526
 
524
- ${Ge}`}else{let Ge=Re.split(/\r?\n/),Ze=Ge.length,Ko=Buffer.byteLength(Re,"utf8"),Cn="";V&&(Cn=`Old File contents:
527
+ ${Ge}`}else{let Ge=Re.split(/\r?\n/),Ze=Ge.length,Xo=Buffer.byteLength(Re,"utf8"),Cn="";V&&(Cn=`Old File contents:
525
528
  ${V.split(/\r?\n/).map((qr,_c)=>`${_c+1} | ${qr}`).join(`
526
529
  `)}
527
530
 
@@ -534,27 +537,27 @@ ${V.split(/\r?\n/).map((qr,_c)=>`${_c+1} | ${qr}`).join(`
534
537
 
535
538
  ${qr}`}ao=`SUCCESS: File [${ce}] saved via IDE Companion (May have user edits).
536
539
 
537
- - Stats: [${Ze} lines, ${(Ko/1024).toFixed(1)} KB]
540
+ - Stats: [${Ze} lines, ${(Xo/1024).toFixed(1)} KB]
538
541
  ${Cn}- Content Preview:
539
542
  ${Qn}
540
543
 
541
- [SYSTEM] Check the content preview for verification [/SYSTEM]`}let we=`\u{1F4BE} ${K==="write_file"?"Written":"Edited"}: ${ce||"..."}`,ge=115;process.stdout.isTTY&&(ge=process.stdout.columns-10||120);let Le=Math.min(we.length+4,ge),jt=`\u256D${"\u2500".repeat(Le)}\u256E`,ke=`\u2502 ${we.padEnd(Le-2).substring(0,Le-2)} \u2502`,Ie=`\u2570${"\u2500".repeat(Le)}\u256F`;yield{type:"visual_feedback",content:`${jt}
544
+ [SYSTEM] Check the content preview for verification [/SYSTEM]`}let we=`\u{1F4BE} ${X==="write_file"?"Written":"Edited"}: ${ce||"..."}`,ge=115;process.stdout.isTTY&&(ge=process.stdout.columns-10||120);let Le=Math.min(we.length+4,ge),jt=`\u256D${"\u2500".repeat(Le)}\u256E`,ke=`\u2502 ${we.padEnd(Le-2).substring(0,Le-2)} \u2502`,Ie=`\u2570${"\u2500".repeat(Le)}\u256F`;yield{type:"visual_feedback",content:`${jt}
542
545
  ${ke}
543
- ${Ie}`};let Ue=Date.now();Tn=Ue,yield{type:"tool_time",content:Ue-Qe};let st=`[TOOL RESULT]: ${ao}`;lt.push({role:"user",text:st}),zt=!0,await Jo("toolSuccess"),o.onToolResult&&o.onToolResult("success",K),yield{type:"tool_result",content:ao,aiContent:st,toolName:K},Se++;continue}if(b==="deny"){let ce=`Permission Denied: Prohibited ${K==="exec_command"?"Command":"file edit"}.`;if(L==="user"?ce="Permission Denied by User":L==="settings"?ce="Permission Denied by User Policy":L==="network"?ce="Permission Denied: Sandbox Network Access Disabled by User Policy.":L==="prohibited"&&K==="exec_command"&&(ce="Permission Denied: Prohibited Command"),K==="write_file"||K==="update_file"){let ye=`\u{1F4BE} ${K==="write_file"?"WRITE DENIED":"UPDATE DENIED"}: ${se(Z.args).path||"..."}`.toUpperCase(),Re=115;process.stdout.isTTY&&(Re=process.stdout.columns-10||120);let Be=Math.min(ye.length+4,Re),Yt=`\u256D${"\u2500".repeat(Be)}\u256E`,wo=`\u2502 ${ye.padEnd(Be-2).substring(0,Be-2)} \u2502`,dt=`\u2570${"\u2500".repeat(Be)}\u256F`;yield{type:"visual_feedback",content:`${Yt}
546
+ ${Ie}`};let Ue=Date.now();Tn=Ue,yield{type:"tool_time",content:Ue-Qe};let st=`[TOOL RESULT]: ${ao}`;lt.push({role:"user",text:st}),zt=!0,await Jo("toolSuccess"),o.onToolResult&&o.onToolResult("success",X),yield{type:"tool_result",content:ao,aiContent:st,toolName:X},Se++;continue}if(b==="deny"){let ce=`Permission Denied: Prohibited ${X==="exec_command"?"Command":"file edit"}.`;if(L==="user"?ce="Permission Denied by User":L==="settings"?ce="Permission Denied by User Policy":L==="network"?ce="Permission Denied: Sandbox Network Access Disabled by User Policy.":L==="prohibited"&&X==="exec_command"&&(ce="Permission Denied: Prohibited Command"),X==="write_file"||X==="update_file"){let ye=`\u{1F4BE} ${X==="write_file"?"WRITE DENIED":"UPDATE DENIED"}: ${se(Z.args).path||"..."}`.toUpperCase(),Re=115;process.stdout.isTTY&&(Re=process.stdout.columns-10||120);let Be=Math.min(ye.length+4,Re),Yt=`\u256D${"\u2500".repeat(Be)}\u256E`,wo=`\u2502 ${ye.padEnd(Be-2).substring(0,Be-2)} \u2502`,dt=`\u2570${"\u2500".repeat(Be)}\u256F`;yield{type:"visual_feedback",content:`${Yt}
544
547
  ${wo}
545
- ${dt}`}}K==="exec_command"&&(await new Promise(xe=>setTimeout(xe,50)),o.onExecChunk&&o.onExecChunk(`ERROR: ${ce}`),await new Promise(xe=>setTimeout(xe,50)),o.onExecEnd&&o.onExecEnd()),lt.push({role:"user",text:`[TOOL RESULT]: DENIED: ${ce}`}),yield{type:"tool_result",content:`[TOOL RESULT]: DENIED: ${ce}`},await Jo("toolDenied"),o.onToolResult&&o.onToolResult("denied",K),Se++;continue}}if(ve){let x=115;process.stdout.isTTY&&(x=process.stdout.columns-10||120);let g=Math.min(ve.length+4,x),v=`\u256D${"\u2500".repeat(g)}\u256E`,F=`\u2502 ${ve.padEnd(g-2).substring(0,g-2)} \u2502`,C=`\u2570${"\u2500".repeat(g)}\u256F`;yield{type:"visual_feedback",content:`${v}
548
+ ${dt}`}}X==="exec_command"&&(await new Promise(xe=>setTimeout(xe,50)),o.onExecChunk&&o.onExecChunk(`ERROR: ${ce}`),await new Promise(xe=>setTimeout(xe,50)),o.onExecEnd&&o.onExecEnd()),lt.push({role:"user",text:`[TOOL RESULT]: DENIED: ${ce}`}),yield{type:"tool_result",content:`[TOOL RESULT]: DENIED: ${ce}`},await Jo("toolDenied"),o.onToolResult&&o.onToolResult("denied",X),Se++;continue}}if(ve){let x=115;process.stdout.isTTY&&(x=process.stdout.columns-10||120);let g=Math.min(ve.length+4,x),v=`\u256D${"\u2500".repeat(g)}\u256E`,F=`\u2502 ${ve.padEnd(g-2).substring(0,g-2)} \u2502`,C=`\u2570${"\u2500".repeat(g)}\u256F`;yield{type:"visual_feedback",content:`${v}
546
549
  ${F}
547
- ${C}`}}if(Tn>0){let x=Date.now()-Tn;x<1e3&&await new Promise(g=>setTimeout(g,1e3-x))}yield{type:"spinner",content:!1};let Jn={chatId:m,history:t,onChunk:x=>o.onExecChunk?o.onExecChunk(x):null,onAskUser:o.onAskUser,systemSettings:o.systemSettings,mode:u,isMultiModal:Qi(Rt)};if(K==="write_file"||K==="update_file")try{let{path:x}=se(Z.args);if(x){let g=Ae.resolve(process.cwd(),x),v=await qs();v&&v.file_focused===g&&v.full_content&&(Jn.forcedContent=v.full_content)}}catch{}let xt=await Pr(K,Z.args,Jn);if(yield{type:"spinner",content:!0},K==="write_file"&&xt.startsWith("SUCCESS")){let{path:x}=se(Z.args);if(x){let g=Ae.resolve(process.cwd(),x);tc(g)}}process.stdout.isTTY&&process.stdout.write("\x1B]0;Working...\x07");let ms=Date.now();Tn=ms,yield{type:"tool_time",content:ms-Qe},Tt=ms;let bn=null;if(typeof xt=="object"&&xt.binaryPart&&(bn=xt.binaryPart,xt=xt.text),K==="search_keyword"){let{keyword:x,file:g}=se(Z.args),v=0;if(xt){let R=xt.match(/Found (\d+) matches/i);R&&(v=parseInt(R[1]))}let F=`\u{1F50E} Searched: "${x}" in ${g?`"${g}"`:"./"} \u2192 ${v} Match${v===1?"":"es"}`,C=115;process.stdout.isTTY&&(C=process.stdout.columns-10||120);let _=Math.min(F.length+4,C),B=`\u256D${"\u2500".repeat(_)}\u256E`,b=`\u2502 ${F.padEnd(_-2).substring(0,_-2)} \u2502`,L=`\u2570${"\u2500".repeat(_)}\u256F`;yield{type:"visual_feedback",content:`${B}
550
+ ${C}`}}if(Tn>0){let x=Date.now()-Tn;x<1e3&&await new Promise(g=>setTimeout(g,1e3-x))}yield{type:"spinner",content:!1};let Jn={chatId:m,history:t,onChunk:x=>o.onExecChunk?o.onExecChunk(x):null,onAskUser:o.onAskUser,systemSettings:o.systemSettings,mode:u,isMultiModal:Qi(Rt)};if(X==="write_file"||X==="update_file")try{let{path:x}=se(Z.args);if(x){let g=Ae.resolve(process.cwd(),x),v=await qs();v&&v.file_focused===g&&v.full_content&&(Jn.forcedContent=v.full_content)}}catch{}let xt=await Pr(X,Z.args,Jn);if(yield{type:"spinner",content:!0},X==="write_file"&&xt.startsWith("SUCCESS")){let{path:x}=se(Z.args);if(x){let g=Ae.resolve(process.cwd(),x);tc(g)}}process.stdout.isTTY&&process.stdout.write("\x1B]0;Working...\x07");let ms=Date.now();Tn=ms,yield{type:"tool_time",content:ms-Qe},Tt=ms;let bn=null;if(typeof xt=="object"&&xt.binaryPart&&(bn=xt.binaryPart,xt=xt.text),X==="search_keyword"){let{keyword:x,file:g}=se(Z.args),v=0;if(xt){let R=xt.match(/Found (\d+) matches/i);R&&(v=parseInt(R[1]))}let F=`\u{1F50E} Searched: "${x}" in ${g?`"${g}"`:"./"} \u2192 ${v} Match${v===1?"":"es"}`,C=115;process.stdout.isTTY&&(C=process.stdout.columns-10||120);let _=Math.min(F.length+4,C),B=`\u256D${"\u2500".repeat(_)}\u256E`,b=`\u2502 ${F.padEnd(_-2).substring(0,_-2)} \u2502`,L=`\u2570${"\u2500".repeat(_)}\u256F`;yield{type:"visual_feedback",content:`${B}
548
551
  ${b}
549
- ${L}`}}if(K==="todo"){let{method:x,tasks:g,markDone:v}=se(Z.args),F="",C=[],_=B=>{if(!B)return[];let b=Array.isArray(B)?B:[];if(b.length===0&&typeof B=="string"){let L=B.trim();if(L.startsWith("[")&&L.endsWith("]")){let R=L.match(/"([^"\\]*(?:\\.[^"\\]*)*)"|'([^'\\]*(?:\\.[^'\\]*)*)'/g);R?b=R.map(V=>V.slice(1,-1).replace(/\\(.)/g,"$1")):b=L.slice(1,-1).split(",").map(V=>V.trim()).filter(Boolean)}else b=B.split(`
552
+ ${L}`}}if(X==="todo"){let{method:x,tasks:g,markDone:v}=se(Z.args),F="",C=[],_=B=>{if(!B)return[];let b=Array.isArray(B)?B:[];if(b.length===0&&typeof B=="string"){let L=B.trim();if(L.startsWith("[")&&L.endsWith("]")){let R=L.match(/"([^"\\]*(?:\\.[^"\\]*)*)"|'([^'\\]*(?:\\.[^'\\]*)*)'/g);R?b=R.map(V=>V.slice(1,-1).replace(/\\(.)/g,"$1")):b=L.slice(1,-1).split(",").map(V=>V.trim()).filter(Boolean)}else b=B.split(`
550
553
  `)}return b.filter(L=>String(L).trim()).map(L=>{let R=String(L).trim();return R.startsWith("- [")?R.substring(6).trim():R})};if(x==="create"?(F="\u{1F4C5} Created Plan",C=_(g).map(B=>`\u25CB ${B}`)):x==="append"?(F="\u{1F4E5} Added Plan",C=_(g).map(B=>`\u25CB ${B}`)):x==="get"&&(F=v?"\u{1F4CC} Updated Plan":"\u{1F4DD} Reviewed Plan",C=(xt||"").split(`
551
554
  `).slice(1).join(`
552
555
  `).split(`
553
556
  `).filter(b=>b.trim().startsWith("- [")).map(b=>{let L=b.trim();return`${L.startsWith("- [x]")?"\x1B[32m\u25CF\x1B[0m":"\u25CB"} ${L.substring(6).trim()}`})),F&&C.length>0){let B=Math.max(F.length,...C.map(ce=>ce.length))+4,b=100;process.stdout.isTTY&&(b=process.stdout.columns-10||120);let L=Math.min(B,b),R=`\u256D${"\u2500".repeat(L)}\u256E`,V=`\u2502 ${F.padEnd(L-2).substring(0,L-2)} \u2502`,ne=`\u251C${"\u2500".repeat(L)}\u2524`,Ne=C.map(ce=>`\u2502 ${ce.padEnd(L-2).substring(0,L-2)} \u2502`),de=`\u2570${"\u2500".repeat(L)}\u256F`;yield{type:"visual_feedback",content:[R,V,ne,...Ne,de].join(`
554
- `)}}}K==="exec_command"&&o.onExecEnd&&(await new Promise(x=>setTimeout(x,800)),o.onExecEnd());let Fs=xt&&xt.startsWith("DENIED:");xt&&!xt.startsWith("ERROR:")&&!Fs?(await Jo("toolSuccess"),o.onToolResult&&o.onToolResult("success",K)):Fs||(await Jo("toolFailure"),o.onToolResult&&o.onToolResult("failure",K));let Lt=`[TOOL RESULT]: ${(xt||"").toString().split(/\r?\n/).filter(x=>!x.includes("[[UI_CONTEXT]]")).join(`
555
- `)}`;lt.push({role:"user",text:Lt,binaryPart:bn}),zt=!0;let nr=`[TOOL RESULT]: ${xt||""}`;(K==="view_file"||K==="web_scrape"||K==="file_map")&&(nr=`[TOOL RESULT]: ${ve} (Context Locked for UI Clarity)`),yield{type:"tool_result",content:nr,aiContent:Lt,binaryPart:bn,toolName:K},K==="memory"&&xt.includes("SUCCESS")&&(yield{type:"memory_updated"}),Se++}if(d==="Google"&&Dt&&Date.now()-Wt>=150){let Z=Sn(Dt);for(let Qe of Z)yield Qe;Dt="",Wt=Date.now()}}oe.usageMetadata&&(At=oe.usageMetadata),At&&(yield{type:"liveTokens",content:At.totalTokenCount})}if(me&&(me=!1,Jt?ut+="</think>":(Te+="</think>",d==="Google"?Dt+="</think>":yield{type:"text",content:"</think>"})),Jt&&ut.length>0){let oe=0,Ce=Math.min(ht.length,ut.length);for(let We=Ce;We>0;We--)if(ht.endsWith(ut.substring(0,We))){oe=We;break}let ie=ut.substring(oe);if(ie){let pe=/(?:<(think|thought)>|\[(think|thought)\])(?:(?!(?:<\/(?:think|thought)>|\[\/(?:think|thought)\]))[\s\S])*$/i.test(ht)?ie.replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])\s*/gi,""):ie.replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])[\s\S]*?(?:<\/(think|thought)>|\[\/(think|thought)\])\s*/gi,"").replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])\s*/gi,"");if(pe)if(Te+=pe,d==="Google")Dt+=pe;else{let St=Sn(pe);for(let He of St)yield He}}Jt=!1,ut=""}if(yield*Ot(),Bo)break;let Gn=(Te||"").trim(),vs=/\[\s*(turn\s*:)?\s*finish\s*\]/i.test(Gn.toLowerCase())||/\[\[END\]\]/i.test(Gn.toLowerCase()),er=/\[\s*(turn\s*:)?\s*continue\s*\]/i.test(Gn.toLowerCase()),Kr=lt.length>0||Et!==null,Ds=Gn.replace(/(?:<think>|\[think\])[\s\S]*?(?:<\/think>|\[\/think\])/gi,"").trim(),Xn=/(\p{Emoji_Presentation}|\p{Extended_Pictographic})$/u.test(Ds),us=/([.!?"'*_`|\]\)”’~~]+|\s|`{3}|[\u200B-\u200D\uFEFF])$/u.test(Ds.trim()),tr=/[.!?}"'`’“”]$|```$/s.test(Ds)||us||Xn;!vs&&!er&&!Kr&&Gn.length>0,Xe=!0,await Jo("agent")}catch(be){if(Bo){yield{type:"status",content:"Request Cancelled"},yield{type:"text",content:`
557
+ `)}}}X==="exec_command"&&o.onExecEnd&&(await new Promise(x=>setTimeout(x,800)),o.onExecEnd());let Fs=xt&&xt.startsWith("DENIED:");xt&&!xt.startsWith("ERROR:")&&!Fs?(await Jo("toolSuccess"),o.onToolResult&&o.onToolResult("success",X)):Fs||(await Jo("toolFailure"),o.onToolResult&&o.onToolResult("failure",X));let Lt=`[TOOL RESULT]: ${(xt||"").toString().split(/\r?\n/).filter(x=>!x.includes("[[UI_CONTEXT]]")).join(`
558
+ `)}`;lt.push({role:"user",text:Lt,binaryPart:bn}),zt=!0;let nr=`[TOOL RESULT]: ${xt||""}`;(X==="view_file"||X==="web_scrape"||X==="file_map")&&(nr=`[TOOL RESULT]: ${ve} (Context Locked for UI Clarity)`),yield{type:"tool_result",content:nr,aiContent:Lt,binaryPart:bn,toolName:X},X==="memory"&&xt.includes("SUCCESS")&&(yield{type:"memory_updated"}),Se++}if(d==="Google"&&Dt&&Date.now()-Wt>=150){let Z=Sn(Dt);for(let Qe of Z)yield Qe;Dt="",Wt=Date.now()}}oe.usageMetadata&&(At=oe.usageMetadata),At&&(yield{type:"liveTokens",content:At.totalTokenCount})}if(me&&(me=!1,Jt?ut+="</think>":(Te+="</think>",d==="Google"?Dt+="</think>":yield{type:"text",content:"</think>"})),Jt&&ut.length>0){let oe=0,Ce=Math.min(ht.length,ut.length);for(let We=Ce;We>0;We--)if(ht.endsWith(ut.substring(0,We))){oe=We;break}let ie=ut.substring(oe);if(ie){let pe=/(?:<(think|thought)>|\[(think|thought)\])(?:(?!(?:<\/(?:think|thought)>|\[\/(?:think|thought)\]))[\s\S])*$/i.test(ht)?ie.replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])\s*/gi,""):ie.replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])[\s\S]*?(?:<\/(think|thought)>|\[\/(think|thought)\])\s*/gi,"").replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])\s*/gi,"");if(pe)if(Te+=pe,d==="Google")Dt+=pe;else{let St=Sn(pe);for(let He of St)yield He}}Jt=!1,ut=""}if(yield*Ot(),Bo)break;let Gn=(Te||"").trim(),vs=/\[\s*(turn\s*:)?\s*finish\s*\]/i.test(Gn.toLowerCase())||/\[\[END\]\]/i.test(Gn.toLowerCase()),er=/\[\s*(turn\s*:)?\s*continue\s*\]/i.test(Gn.toLowerCase()),Xr=lt.length>0||Et!==null,Ds=Gn.replace(/(?:<think>|\[think\])[\s\S]*?(?:<\/think>|\[\/think\])/gi,"").trim(),Kn=/(\p{Emoji_Presentation}|\p{Extended_Pictographic})$/u.test(Ds),us=/([.!?"'*_`|\]\)”’~~]+|\s|`{3}|[\u200B-\u200D\uFEFF])$/u.test(Ds.trim()),tr=/[.!?}"'`’“”]$|```$/s.test(Ds)||us||Kn;!vs&&!er&&!Xr&&Gn.length>0,Ke=!0,await Jo("agent")}catch(be){if(Bo){yield{type:"status",content:"Request Cancelled"},yield{type:"text",content:`
556
559
 
557
- \x1B[33m\u2139 Request Cancelled\x1B[0m`};break}if(String(be).includes("Incomplete JSON segment at the end")){me&&(me=!1,Jt?ut+="</think>":(Te+="</think>",yield{type:"text",content:"</think>"})),Xe=!0,await Jo("agent");break}if(me&&(me=!1,Jt?ut+="</think>":Te+="</think>"),Jt&&ut.length>0){let Wt=0,Ot=Math.min(ht.length,ut.length);for(let Qt=Ot;Qt>0;Qt--)if(ht.endsWith(ut.substring(0,Qt))){Wt=Qt;break}let io=ut.substring(Wt);if(io){let Co=/(?:<(think|thought)>|\[(think|thought)\])(?:(?!(?:<\/(?:think|thought)>|\[\/(?:think|thought)\]))[\s\S])*$/i.test(ht)?io.replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])\s*/gi,""):io.replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])[\s\S]*?(?:<\/(think|thought)>|\[\/(think|thought)\])\s*/gi,"").replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])\s*/gi,"");Co&&(Te+=Co)}Jt=!1,ut=""}let je=be.status||be.error&&be.error.message||String(be),nn=String(be),pt=new Date().toLocaleString(),sn=Ae.join(To,"agent");tt.existsSync(sn)||tt.mkdirSync(sn,{recursive:!0}),tt.appendFileSync(Ae.join(sn,"error.log"),`ERROR [${pt}]: ${nn}
560
+ \x1B[33m\u2139 Request Cancelled\x1B[0m`};break}if(String(be).includes("Incomplete JSON segment at the end")){me&&(me=!1,Jt?ut+="</think>":(Te+="</think>",yield{type:"text",content:"</think>"})),Ke=!0,await Jo("agent");break}if(me&&(me=!1,Jt?ut+="</think>":Te+="</think>"),Jt&&ut.length>0){let Wt=0,Ot=Math.min(ht.length,ut.length);for(let Qt=Ot;Qt>0;Qt--)if(ht.endsWith(ut.substring(0,Qt))){Wt=Qt;break}let io=ut.substring(Wt);if(io){let Co=/(?:<(think|thought)>|\[(think|thought)\])(?:(?!(?:<\/(?:think|thought)>|\[\/(?:think|thought)\]))[\s\S])*$/i.test(ht)?io.replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])\s*/gi,""):io.replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])[\s\S]*?(?:<\/(think|thought)>|\[\/(think|thought)\])\s*/gi,"").replace(/^\s*(?:<(think|thought)>|\[(think|thought)\])\s*/gi,"");Co&&(Te+=Co)}Jt=!1,ut=""}let je=be.status||be.error&&be.error.message||String(be),nn=String(be),pt=new Date().toLocaleString(),sn=Ae.join(To,"agent");tt.existsSync(sn)||tt.mkdirSync(sn,{recursive:!0}),tt.appendFileSync(Ae.join(sn,"error.log"),`ERROR [${pt}]: ${nn}
558
561
 
559
562
  ----------------------------------------------------------------------
560
563
 
@@ -568,15 +571,15 @@ ${L}`}}if(K==="todo"){let{method:x,tasks:g,markDone:v}=se(Z.args),F="",C=[],_=B=
568
571
  ${Ot}`}):P.push(io)}):P.push({role:"user",text:Ot}),ht+=Te}for(let Ot=Wt/1e3;Ot>0&&!Bo;Ot--)yield{type:"status",content:`Error Occured. Recovering Stream (${Je}/${at}) [Retrying in ${Ot}s]...`},await new Promise(io=>setTimeout(io,1e3));yield{type:"status",content:"Error Occured. Recovering Stream..."}}else throw new Error(`Stream collapsed too many times. (Failed to resolve ${at} times)
569
572
  Error Log can be found in ${Ae.join(To,"agent","error.log")}`);else if(Oe<=at){Oe++,Je=1,ht="";let Wt=Math.min(1e3*Math.pow(2,Oe-1),32e3);jn=!0,yield{type:"status",content:`Trying to reach ${e} (${Oe}/${at}) [Retrying in ${(Wt/1e3).toFixed(0)}s]...`};for(let Ot=Wt/1e3;Ot>0&&!Bo;Ot--)yield{type:"status",content:`Trying to reach ${e} (${Oe}/${at}) [Retrying in ${Ot}s]...`},await new Promise(io=>setTimeout(io,1e3));yield{type:"status",content:`Trying to reach ${e}...`}}else throw new Error(`Model ${e} cannot be reached. (Failed ${at} times)
570
573
  Error Log can be found in ${Ae.join(To,"agent","error.log")}`)}}if(At){let me=At.totalTokenCount||0,be=At.cachedContentTokenCount||0,je=(At.candidatesTokenCount||0)+(At.thoughtsTokenCount||0);await Eo("tokens",me),be>0&&await Eo("cachedTokens",be),je>0&&await Eo("candidateTokens",je),yield{type:"usage",content:At}}wn.push(Te);let Hr=Te;Te.match(/(?:<think>|\[think\])([\s\S]*?)(?:<\/think>|\[\/think\])/i)&&(Hr=Te.replace(/(?:<think>|\[think\])[\s\S]*?(?:<\/think>|\[\/think\])/i,""));let Ms=sc(Te),ls=/\[\s*(turn\s*:)?\s*finish\s*\]/i.test(Ms.toLowerCase())||/\[\[END\]\]/i.test(Ms.toLowerCase())||!0,xa=/\[\s*(turn\s*:)?\s*continue\s*\]/i.test(Ms.toLowerCase()),As=Se>0;yield{type:"status",content:"Working..."};let Gr=ed(Te,/(\[\s*(turn\s*:)?\s*(continue|finish)\s*\]|\[\[END\]\])/gi,"").trim(),Hn=(ls||lt.length===0)&&!vt&&!Yo&&!Bt;if(Hn=lt.length===0?Hn:!1,Hn){let me=wn.join(`
571
- `),be=me.replace(/(?:<think>|\[think\])[\s\S]*?(?:<\/think>|\[\/think\])/g,"").trim();yield{type:"interactive_turn_finished",data:{agentText:D,fullAgentTextRaw:me,history:[...P],needTitle:W}},P.length>0&&P[P.length-1].role==="agent"?P[P.length-1].text=be:P.push({role:"agent",text:be})}if(Hn)break;let Xr=Gr.trim()||"*Working...*";if(P.push({role:"agent",text:Xr}),lt.length>0||zt){if(lt.length>0){let me=lt.map(je=>je.text).join(`
574
+ `),be=me.replace(/(?:<think>|\[think\])[\s\S]*?(?:<\/think>|\[\/think\])/g,"").trim();yield{type:"interactive_turn_finished",data:{agentText:D,fullAgentTextRaw:me,history:[...P],needTitle:W}},P.length>0&&P[P.length-1].role==="agent"?P[P.length-1].text=be:P.push({role:"agent",text:be})}if(Hn)break;let Kr=Gr.trim()||"*Working...*";if(P.push({role:"agent",text:Kr}),lt.length>0||zt){if(lt.length>0){let me=lt.map(je=>je.text).join(`
572
575
 
573
576
  `),be=lt.find(je=>je.binaryPart)?.binaryPart||null;P.push({role:"user",text:me,binaryPart:be})}}else as?P.push({role:"user",text:"[SYSTEM] Failed to verify tool execution, Verify tool syntax, proper escaping or ask user if tool worked when unsure[/SYSTEM]"}):P.push({role:"user",text:`[SYSTEM] ${Yo&&!vt?"STUTTERING DETECTED by Internal System. Re-calibrate your response & proceed.":`${vt?" OVER THINKING":" LOOP"} DETECTED by Internal System${vt?" for current EFFORT_LEVEL":""}. ${vt?"If you have planned the task, prioritize execution/output":"If you have finished your task use [[END]]"}`} [/SYSTEM]`}),vt=!1,Yo=!1,Bt=!1;as=Se>0||zt}e&&e.toLowerCase().startsWith("gemma")&&d==="Google"&&P.forEach(re=>{if(re.role==="user"&&re.text&&re.text.startsWith("[TOOL RESULT]")){let $e=`
574
- [SYSTEM] Tool result received. Analyze output and proceed with your turn [/SYSTEM]`,Xe=`
575
- [SYSTEM] Tool result received. Analyze output and proceed with your turn. **STRICTLY MAINTAIN THINKING POLICY. DO NOT START A RESPONSE WITHOUT <think> ... </think>** [/SYSTEM]`;re.text=re.text.replace(Xe,"").replace($e,"").trim()}})}catch(M){let P=M instanceof Error?M.message:String(M),j=new Date().toLocaleString(),G=Ae.join(To,"agent");tt.existsSync(G)||tt.mkdirSync(G,{recursive:!0}),tt.appendFileSync(Ae.join(G,"error.log"),`CRITICAL ERROR [${j}]: ${M instanceof Error?M.stack:M}
577
+ [SYSTEM] Tool result received. Analyze output and proceed with your turn [/SYSTEM]`,Ke=`
578
+ [SYSTEM] Tool result received. Analyze output and proceed with your turn. **STRICTLY MAINTAIN THINKING POLICY. DO NOT START A RESPONSE WITHOUT <think> ... </think>** [/SYSTEM]`;re.text=re.text.replace(Ke,"").replace($e,"").trim()}})}catch(M){let P=M instanceof Error?M.message:String(M),j=new Date().toLocaleString(),G=Ae.join(To,"agent");tt.existsSync(G)||tt.mkdirSync(G,{recursive:!0}),tt.appendFileSync(Ae.join(G,"error.log"),`CRITICAL ERROR [${j}]: ${M instanceof Error?M.stack:M}
576
579
 
577
580
  ----------------------------------------------------------------------
578
581
 
579
- `),typeof flushGoogleBuffer=="function"&&(yield*flushGoogleBuffer()),yield{type:"tool_result",content:`ERROR: [INTERNAL CRITICAL] ${P}`}}finally{O&&(clearInterval(O),O=null),await yt.commitTransaction()}yield{type:"status",content:null}}});import $t,{useState as aa,useEffect as od}from"react";import{Box as Zo,Text as Rn,useInput as nd}from"ink";function la({onSelect:e,onDelete:t,onClose:o}){let[n,s]=aa({}),[r,i]=aa([]),[u,f]=aa(0);od(()=>{(async()=>{let p=await _o();s(p),i(Object.keys(p).sort((y,T)=>(p[T].updatedAt||0)-(p[y].updatedAt||0)))})()},[]),nd((h,p)=>{if(p.escape&&o(),p.upArrow&&f(y=>Math.max(0,y-1)),p.downArrow&&f(y=>Math.min(r.length-1,y+1)),p.return&&r[u]&&e(r[u]),h==="x"&&r[u]){let y=r[u];t(y).then(T=>{let w=T||{};s(w);let E=Object.keys(w).sort((A,$)=>(w[$]?.updatedAt||0)-(w[A]?.updatedAt||0));i(E),f(A=>Math.max(0,Math.min(E.length-1,A)))})}});let m=Fe(2),c=15,a=0;if(r.length>c){let h=Math.floor(c/2);a=u-h,a<0?a=0:a+c>r.length&&(a=r.length-c)}let d=r.slice(a,a+c);return $t.createElement(Zo,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},$t.createElement(Zo,{paddingX:1,marginBottom:1},$t.createElement(Rn,{color:"white",bold:!0},"CHAT HISTORY: RESUME CONVERSATION")),r.length===0?$t.createElement(Zo,{paddingX:2,paddingY:1},$t.createElement(Rn,{italic:!0,color:"gray"},"No saved chats found.")):$t.createElement(Zo,{flexDirection:"column",width:"100%"},a>0&&$t.createElement(Zo,{paddingX:2,marginBottom:1},$t.createElement(Rn,{color:"gray"},"\u25B2 (+",a," more chats above)")),d.map((h,p)=>{let y=n[h],w=a+p===u,E=sd(y?.updatedAt);return $t.createElement(Zo,{key:h,paddingX:1,backgroundColor:w?"#2a2a2a":void 0,width:"100%"},$t.createElement(Zo,{flexGrow:1},$t.createElement(Rn,{color:w?"while":"grey",bold:w},w?"\u276F ":" ",y?.name||h,$t.createElement(Rn,{color:"grey"}," [",E," \u2022 ",h,"]"))),w&&$t.createElement(Zo,{flexShrink:0},$t.createElement(Rn,{color:"white",bold:!0},"[X] DELETE ")))}),a+c<r.length&&$t.createElement(Zo,{paddingX:2,marginTop:1},$t.createElement(Rn,{color:"gray"},"\u25BC (+",r.length-(a+c)," more chats below)"))),$t.createElement(Zo,{marginTop:1,paddingX:1,borderStyle:"single",borderLeft:!1,borderRight:!1,borderBottom:!1,borderColor:"gray"},$t.createElement(Rn,{italic:!0},"\u2191\u2193 navigate \u2022 Enter select \u2022 x delete \u2022 Esc close")))}function sd(e){if(!e)return"N/A";let t=new Date(e);if(isNaN(t.getTime()))return"N/A";let o=u=>String(u).padStart(2,"0"),n=o(t.getMonth()+1),s=o(t.getDate()),r=o(t.getHours()),i=o(t.getMinutes());return`${n}-${s} ${r}:${i}`}var dc=ae(()=>{Xs();un()});import kt,{useState as ca,useEffect as rd}from"react";import{Box as en,Text as xn,useInput as id}from"ink";function ua({onClose:e}){let[t,o]=ca([]),[n,s]=ca(0),[r,i]=ca(!0),u=()=>{let w=fe(Ht,[]);o(w);try{let A=lr(lo,{}).systemSettings?.memory!==!1;i(A)}catch{i(!0)}};rd(()=>{u()},[]),id((w,E)=>{if(E.escape&&e(),E.upArrow&&s(A=>Math.max(0,A-1)),E.downArrow&&s(A=>Math.min(t.length-1,A+1)),w==="x"&&t.length>0){let A=t[n].id,$=t.filter(W=>W.id!==A);De(Ht,$),o($),n>=$.length&&$.length>0&&s($.length-1)}});let f=w=>w?w.replace(/\[Saved on: .*?\]/g,"").replace(/\\+'/g,"'").trim():"",m=4*1024*2,c=t.reduce((w,E)=>w+(E.memory?.length||0),0),a=Math.min(100,Math.round(c/m*100)),d=12,h=Math.round(a/100*d),p="\u2588".repeat(h)+"\u2591".repeat(Math.max(0,d-h)),y=()=>a<50?"grey":a<90?"yellow":"red",T=Fe(2);return kt.createElement(en,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},kt.createElement(en,{paddingX:1,marginBottom:1,justifyContent:"space-between"},kt.createElement(xn,{color:"white",bold:!0},"AGENT MEMORY: LONG-TERM KNOWLEDGE"),kt.createElement(en,null,kt.createElement(xn,{color:"gray"},"Vault: "),kt.createElement(xn,{color:y()},p),kt.createElement(xn,{color:"white",bold:!0}," ",a,"%"))),!r&&t.length>0?kt.createElement(en,{paddingX:2,paddingY:1},kt.createElement(xn,{italic:!0,color:"gray"},"Memory is currently Off...")):t.length===0?kt.createElement(en,{paddingX:2,paddingY:1},kt.createElement(xn,{italic:!0,color:"gray"},r?"Learning...":"Memory not available...")):kt.createElement(en,{flexDirection:"column"},t.map((w,E)=>{let A=E===n;return kt.createElement(en,{key:w.id,paddingX:1,backgroundColor:A?"#2a2a2a":void 0,width:"100%"},kt.createElement(en,{flexGrow:1},kt.createElement(xn,{color:A?"white":"grey",bold:A},A?"\u276F ":" ",E+1,". ",f(w.memory))),A&&kt.createElement(en,{flexShrink:0},kt.createElement(xn,{color:"grey",bold:!0},"[X] WIPE ")))})),kt.createElement(en,{marginTop:1,paddingX:1,borderStyle:"single",borderLeft:!1,borderRight:!1,borderBottom:!1,borderColor:"gray"},kt.createElement(xn,{color:"grey",italic:!0},"\u2191\u2193 navigate \u2022 x wipe memory \u2022 Esc close")))}var mc=ae(()=>{Oo();Pt();un()});import it,{useState as Nr,useEffect as fc}from"react";import{Box as Un,Text as oo}from"ink";import{spawn as hc}from"child_process";var Br,pc,ad,gc,xc=ae(async()=>{Br=null;try{let e=await import("node-pty");Br=e.default||e,Br=!1}catch{}pc=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],ad=({latest:e,current:t,settings:o,onClose:n,onUpdateSettings:s,onSuccess:r})=>{let[i,u]=Nr("initializing"),[f,m]=Nr(""),[c,a]=Nr(null),[d,h]=Nr(0);if(fc(()=>{let p=setInterval(()=>{h(y=>(y+1)%1e3)},33);return()=>clearInterval(p)},[]),fc(()=>{let p;return(async()=>{let T=o.updateManager||"npm";if(!o.updateManager){s();return}let w="";T==="pnpm"?w=`pnpm add -g fluxflow-cli@${e}`:T==="bun"?w=`bun add -g fluxflow-cli@${e}`:T==="yarn"?w=`yarn global add fluxflow-cli@${e}`:T==="custom"?w=o.customUpdateCommand:w=`npm install -g fluxflow-cli@${e}`,u("downloading"),m(`Running: ${w}...`);let E=process.platform==="win32",A=W=>new Promise(D=>{let O=E?W?"powershell.exe":"cmd.exe":process.env.SHELL||"bash",M=E?W?["-NoProfile","-Command",w]:["/c",w]:["-c",w],P=G=>{let Y=G.toString().replace(/\x1B\[[0-?]*[ -/]*[@-~]|\x1B\][^\x07\x1B]*[\x07\x1B]|\b|\x07/g,"").replace(/\r/g,"").trim();Y&&m(N=>{let he=N.split(`
582
+ `),typeof flushGoogleBuffer=="function"&&(yield*flushGoogleBuffer()),yield{type:"tool_result",content:`ERROR: [INTERNAL CRITICAL] ${P}`}}finally{O&&(clearInterval(O),O=null),await yt.commitTransaction()}yield{type:"status",content:null}}});import $t,{useState as aa,useEffect as od}from"react";import{Box as Zo,Text as Rn,useInput as nd}from"ink";function la({onSelect:e,onDelete:t,onClose:o}){let[n,s]=aa({}),[r,i]=aa([]),[u,f]=aa(0);od(()=>{(async()=>{let p=await _o();s(p),i(Object.keys(p).sort((y,T)=>(p[T].updatedAt||0)-(p[y].updatedAt||0)))})()},[]),nd((h,p)=>{if(p.escape&&o(),p.upArrow&&f(y=>Math.max(0,y-1)),p.downArrow&&f(y=>Math.min(r.length-1,y+1)),p.return&&r[u]&&e(r[u]),h==="x"&&r[u]){let y=r[u];t(y).then(T=>{let w=T||{};s(w);let E=Object.keys(w).sort((A,$)=>(w[$]?.updatedAt||0)-(w[A]?.updatedAt||0));i(E),f(A=>Math.max(0,Math.min(E.length-1,A)))})}});let m=Fe(2),c=15,a=0;if(r.length>c){let h=Math.floor(c/2);a=u-h,a<0?a=0:a+c>r.length&&(a=r.length-c)}let d=r.slice(a,a+c);return $t.createElement(Zo,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},$t.createElement(Zo,{paddingX:1,marginBottom:1},$t.createElement(Rn,{color:"white",bold:!0},"CHAT HISTORY: RESUME CONVERSATION")),r.length===0?$t.createElement(Zo,{paddingX:2,paddingY:1},$t.createElement(Rn,{italic:!0,color:"gray"},"No saved chats found.")):$t.createElement(Zo,{flexDirection:"column",width:"100%"},a>0&&$t.createElement(Zo,{paddingX:2,marginBottom:1},$t.createElement(Rn,{color:"gray"},"\u25B2 (+",a," more chats above)")),d.map((h,p)=>{let y=n[h],w=a+p===u,E=sd(y?.updatedAt);return $t.createElement(Zo,{key:h,paddingX:1,backgroundColor:w?"#2a2a2a":void 0,width:"100%"},$t.createElement(Zo,{flexGrow:1},$t.createElement(Rn,{color:w?"while":"grey",bold:w},w?"\u276F ":" ",y?.name||h,$t.createElement(Rn,{color:"grey"}," [",E," \u2022 ",h,"]"))),w&&$t.createElement(Zo,{flexShrink:0},$t.createElement(Rn,{color:"white",bold:!0},"[X] DELETE ")))}),a+c<r.length&&$t.createElement(Zo,{paddingX:2,marginTop:1},$t.createElement(Rn,{color:"gray"},"\u25BC (+",r.length-(a+c)," more chats below)"))),$t.createElement(Zo,{marginTop:1,paddingX:1,borderStyle:"single",borderLeft:!1,borderRight:!1,borderBottom:!1,borderColor:"gray"},$t.createElement(Rn,{italic:!0},"\u2191\u2193 navigate \u2022 Enter select \u2022 x delete \u2022 Esc close")))}function sd(e){if(!e)return"N/A";let t=new Date(e);if(isNaN(t.getTime()))return"N/A";let o=u=>String(u).padStart(2,"0"),n=o(t.getMonth()+1),s=o(t.getDate()),r=o(t.getHours()),i=o(t.getMinutes());return`${n}-${s} ${r}:${i}`}var dc=ae(()=>{Ks();un()});import kt,{useState as ca,useEffect as rd}from"react";import{Box as en,Text as xn,useInput as id}from"ink";function ua({onClose:e}){let[t,o]=ca([]),[n,s]=ca(0),[r,i]=ca(!0),u=()=>{let w=fe(Ht,[]);o(w);try{let A=lr(lo,{}).systemSettings?.memory!==!1;i(A)}catch{i(!0)}};rd(()=>{u()},[]),id((w,E)=>{if(E.escape&&e(),E.upArrow&&s(A=>Math.max(0,A-1)),E.downArrow&&s(A=>Math.min(t.length-1,A+1)),w==="x"&&t.length>0){let A=t[n].id,$=t.filter(W=>W.id!==A);De(Ht,$),o($),n>=$.length&&$.length>0&&s($.length-1)}});let f=w=>w?w.replace(/\[Saved on: .*?\]/g,"").replace(/\\+'/g,"'").trim():"",m=4*1024*2,c=t.reduce((w,E)=>w+(E.memory?.length||0),0),a=Math.min(100,Math.round(c/m*100)),d=12,h=Math.round(a/100*d),p="\u2588".repeat(h)+"\u2591".repeat(Math.max(0,d-h)),y=()=>a<50?"grey":a<90?"yellow":"red",T=Fe(2);return kt.createElement(en,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},kt.createElement(en,{paddingX:1,marginBottom:1,justifyContent:"space-between"},kt.createElement(xn,{color:"white",bold:!0},"AGENT MEMORY: LONG-TERM KNOWLEDGE"),kt.createElement(en,null,kt.createElement(xn,{color:"gray"},"Vault: "),kt.createElement(xn,{color:y()},p),kt.createElement(xn,{color:"white",bold:!0}," ",a,"%"))),!r&&t.length>0?kt.createElement(en,{paddingX:2,paddingY:1},kt.createElement(xn,{italic:!0,color:"gray"},"Memory is currently Off...")):t.length===0?kt.createElement(en,{paddingX:2,paddingY:1},kt.createElement(xn,{italic:!0,color:"gray"},r?"Learning...":"Memory not available...")):kt.createElement(en,{flexDirection:"column"},t.map((w,E)=>{let A=E===n;return kt.createElement(en,{key:w.id,paddingX:1,backgroundColor:A?"#2a2a2a":void 0,width:"100%"},kt.createElement(en,{flexGrow:1},kt.createElement(xn,{color:A?"white":"grey",bold:A},A?"\u276F ":" ",E+1,". ",f(w.memory))),A&&kt.createElement(en,{flexShrink:0},kt.createElement(xn,{color:"grey",bold:!0},"[X] WIPE ")))})),kt.createElement(en,{marginTop:1,paddingX:1,borderStyle:"single",borderLeft:!1,borderRight:!1,borderBottom:!1,borderColor:"gray"},kt.createElement(xn,{color:"grey",italic:!0},"\u2191\u2193 navigate \u2022 x wipe memory \u2022 Esc close")))}var mc=ae(()=>{Oo();Pt();un()});import it,{useState as Nr,useEffect as fc}from"react";import{Box as Un,Text as oo}from"ink";import{spawn as hc}from"child_process";var Br,pc,ad,gc,xc=ae(async()=>{Br=null;try{let e=await import("node-pty");Br=e.default||e,Br=!1}catch{}pc=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],ad=({latest:e,current:t,settings:o,onClose:n,onUpdateSettings:s,onSuccess:r})=>{let[i,u]=Nr("initializing"),[f,m]=Nr(""),[c,a]=Nr(null),[d,h]=Nr(0);if(fc(()=>{let p=setInterval(()=>{h(y=>(y+1)%1e3)},33);return()=>clearInterval(p)},[]),fc(()=>{let p;return(async()=>{let T=o.updateManager||"npm";if(!o.updateManager){s();return}let w="";T==="pnpm"?w=`pnpm add -g fluxflow-cli@${e}`:T==="bun"?w=`bun add -g fluxflow-cli@${e}`:T==="yarn"?w=`yarn global add fluxflow-cli@${e}`:T==="custom"?w=o.customUpdateCommand:w=`npm install -g fluxflow-cli@${e}`,u("downloading"),m(`Running: ${w}...`);let E=process.platform==="win32",A=W=>new Promise(D=>{let O=E?W?"powershell.exe":"cmd.exe":process.env.SHELL||"bash",M=E?W?["-NoProfile","-Command",w]:["/c",w]:["-c",w],P=G=>{let Y=G.toString().replace(/\x1B\[[0-?]*[ -/]*[@-~]|\x1B\][^\x07\x1B]*[\x07\x1B]|\b|\x07/g,"").replace(/\r/g,"").trim();Y&&m(N=>{let he=N.split(`
580
583
  `);return he[he.length-1]?.startsWith("Progress:")&&Y.startsWith("Progress:")?(he[he.length-1]=Y,he.slice(-5).join(`
581
584
  `)):(N+`
582
585
  `+Y).split(`
@@ -586,11 +589,11 @@ Error Log can be found in ${Ae.join(To,"agent","error.log")}`)}}if(At){let me=At
586
589
  `)?o+"...":o}function fd(e){if(!e)return"N/A";let t=new Date(e);if(isNaN(t.getTime()))return"N/A";let o=i=>String(i).padStart(2,"0"),n=o(t.getHours()),s=o(t.getMinutes()),r=o(t.getSeconds());return`${n}:${s}:${r}`}var Ec=ae(()=>{un()});import hd from"puppeteer";import{exec as pd}from"child_process";import{promisify as gd}from"util";import xd from"fs";var bc,Cc,kc,Ic=ae(()=>{bc=gd(pd),Cc=()=>{try{let e=hd.executablePath();if(e&&xd.existsSync(e))return!0}catch{return!1}return!1},kc=async e=>{e&&e("\u{1F4E5} Downloading Chromium engine (chrome@148)...");try{try{await bc("pnpm exec puppeteer browsers install chrome@148")}catch{await bc("npx -y puppeteer browsers install chrome@148")}return await new Promise(t=>setTimeout(t,1e3)),{success:!0}}catch(t){return console.error("[SETUP ERROR]",t),{success:!1,error:t.message}}}});var Pc={};rr(Pc,{default:()=>Lc});import Mc from"os";import l,{useState as Q,useEffect as no,useRef as bo,useMemo as Js}from"react";import{Box as I,Text as S,useInput as yd,useStdout as wd}from"ink";import uo from"fs-extra";import is from"path";import{exec as Ur}from"child_process";import{fileURLToPath as Td}from"url";import Ac from"ink-text-input";import Sd from"gradient-string";function Lc({args:e=[]}){let[t,o]=Q(!1),[n,s]=Q(10),{stdout:r}=wd(),[i,u]=Q(""),[f,m]=Q(0),[c,a]=Q(!1),[d,h]=Q("Flux"),[p,y]=Q({columns:r?.columns||80,rows:r?.rows||24}),[T,w]=Q(0),[E,A]=Q(!1),[$,W]=Q(!1),[D,O]=Q(0),M=bo(0),P=bo(null);no(()=>{let x=jr(),g=!["Terminal","Windows Terminal"].includes(x)||!!process.env.VSC_TERMINAL_URL,v=setTimeout(()=>{g&&!Qo()&&W(!0)},500),F=setInterval(()=>{Qo()&&W(!1)},1e3);return()=>{clearTimeout(v),clearInterval(F)}},[]);let j=Js(()=>{let x={};for(let g=0;g<e.length;g++)if(e[g]==="--key"&&e[g+1]){let F=e[g+1];if(x.key=F,F.includes("@")){let C=F.split("@"),_=C[0],B=C[1].toLowerCase();if(["google","deepseek","openrouter","nvidia"].includes(B)){let b="Google";B==="google"?b="Google":B==="deepseek"?b="DeepSeek":B==="openrouter"?b="OpenRouter":B==="nvidia"&&(b="NVIDIA"),x.key=_,x.provider=b}}}for(let g=0;g<e.length;g++){let v=e[g];if(v==="--key"){g++;continue}if(v==="--model"&&e[g+1])x.model=e[g+1],g++;else if(v==="--memory"&&e[g+1])x.memory=e[g+1].toLowerCase(),g++;else if(v==="--resume"&&e[g+1])x.resume=e[g+1],g++;else if(v==="--package"&&e[g+1]){let F=e[g+1].toLowerCase();["npm","pnpm","yarn","bun"].includes(F)&&(x.package=F),g++}else if(v==="--auto-del"&&e[g+1]){let F=e[g+1].toLowerCase();["1d","7d","30d"].includes(F)&&(x.autoDel=F),g++}else if(v==="--auto-exec"&&e[g+1])x.autoExec=e[g+1].toLowerCase(),g++;else if(v==="--yolo"&&e[g+1])x.autoExec=e[g+1].toLowerCase(),g++;else if(v==="--external-access"&&e[g+1])x.externalAccess=e[g+1].toLowerCase(),g++;else if(v==="--mode"&&e[g+1]){let C=e[g+1].toLowerCase();if(["flux","flow"].includes(C)){let _="Flux";C==="flux"?_="Flux":C==="flow"&&(_="Flow"),x.mode=_}g++}else if(v==="--thinking"&&e[g+1]){let C=e[g+1].toLowerCase();if(["fast","low","medium","high","xhigh","standard"].includes(C)){let _="Medium";C==="fast"?_="Fast":C==="low"?_="Low":C==="standard"?_="Standard":C==="medium"?_="Medium":C==="high"?_="High":C==="xhigh"&&(_="xHigh"),x.thinking=_}g++}else if(v==="--provider"&&e[g+1]){let F=e[g+1].toLowerCase();if(["google","deepseek","openrouter","nvidia"].includes(F)){let C="Google";F==="google"?C="Google":F==="deepseek"?C="DeepSeek":F==="openrouter"?C="OpenRouter":F==="nvidia"&&(C="NVIDIA"),x.provider=C}g++}else(v==="--resume"||v==="-r")&&e[g+1]&&(x.resume=e[g+1],g++)}return x},[e]),G=async(x=!1,g=null)=>{let v=g||Nt;x&&U(F=>(z(F.length+1),[...F,{id:"check-"+Date.now(),role:"system",text:"\u{1F50D} Checking for updates...",isMeta:!0}]));try{let C=await(await fetch("https://registry.npmjs.org/fluxflow-cli",{cache:"no-store"})).json(),_=C["dist-tags"]?.latest,B=C["dist-tags"]?.stable;if(_&&ue(_),_&&_!==Uo){let b=_===B?`v${_}-stable`:`v${_}`;!x&&v.autoUpdate?J("update"):U(L=>{let R=[...L],V=x?R.length:Math.min(R.length,3);return R.splice(V,0,{id:"update-"+Date.now(),role:"system",text:`A new version (${b}) is here.
587
590
 
588
591
  \u2022 Type \`/update latest\` to apply the update.
589
- \u2022 Type \`/changelog\` to view the release notes.`,isUpdateNotification:!0,isMeta:!0}),R})}else x&&U(b=>{z(b.length+1);let L=_&&_===B?`${Uo}-stable`:Uo;return[...b,{id:"uptodate-"+Date.now(),role:"system",text:`[SYSTEM] Flux Flow is already up to date (${L}).`,isMeta:!0}]})}catch(F){x&&U(C=>(z(C.length+1),[...C,{id:"check-err-"+Date.now(),role:"system",text:`ERROR: Failed to check for updates: ${F.message}`,isMeta:!0}]))}};no(()=>{let x=()=>{r.write("\x1B[2J\x1B[3J\x1B[H"),y({columns:r.columns,rows:r.rows})};return r.on("resize",x),()=>{r.off("resize",x)}},[r]);let[q,Y]=Q("Medium"),[N,he]=Q("Google"),[ee,Me]=Q(0),[le,ue]=Q(null),[Ke,_t]=Q(!1),[Ve,Ee]=Q("gemma-4-31b-it"),[ft,et]=Q("gemma-4-26b-a4b-it"),[Ye,qe]=Q(!0),[mo,Vt]=Q(!0),ct=bo(0),[ze,ot]=Q(null),[Ao,on]=Q(""),[qt,J]=Q("chat"),[Mt,so]=Q("Free"),[ro,Qs]=Q({agentLimit:999999,backgroundLimit:999999,searchLimit:100,customModelId:"",customLimit:0}),[Wo,At]=Q(null),[Nt,at]=Q({memory:!0,compression:0,autoExec:!1,autoDeleteHistory:"7d",autoUpdate:!1,updateManager:"npm",customUpdateCommand:""}),[wn,as]=Q({name:null,nickname:null,instructions:null}),[re,$e]=Q({keyType:"Default",quality:"Low-High",apiKey:""}),[Xe,Oe]=Q({tokens:0}),[Je,Te]=Q(0),[Et,Yn]=Q(0),[Tt,Tn]=Q(0),[lt,Se]=Q(0),zt=bo(0),[vt,Yo]=Q(0),[Bt,jn]=Q(0),[ht,ut]=Q(0),[Jt,Rt]=Q(0),[jo,Hr]=Q(0),[Is,Ms]=Q(0),[ls,xa]=Q(0),[As,Gr]=Q(0),[Hn,Xr]=Q(0),[me,be]=Q(null),[je,nn]=Q(xi());no(()=>{let x=Tt-zt.current;Se(x),je&&ul(je,x,Xe.tokens).catch(()=>{})},[Tt,je,Xe.tokens]);let[pt,sn]=Q(null),[Ut,Dt]=Q(""),[Wt,Ot]=Q(!1),[io,Qt]=Q(0),Co=bo(!0),rn=bo(!0),Sn=bo(!0),Zs=bo(N);no(()=>{Zs.current!==N?(Zs.current=N,Y(N==="DeepSeek"||N==="NVIDIA"?"Standard":"Medium")):N==="Google"&&q==="xHigh"&&Ve&&Ve.toLowerCase().startsWith("gemini-3")&&Y("High")},[N,Ve,q]),no(()=>{if(!ze)return;if(Co.current){Co.current=!1,setTimeout(()=>{rn.current=!1,setTimeout(()=>{Sn.current=!1},1e3)},2e3);return}if(rn.current||Sn.current)return;let x=Fe(2),g="",v="";Mt==="Free"?N==="Google"?(g="gemma-4-31b-it",v="Gemma 4 (Free default)"):N==="DeepSeek"?(g="deepseek-v4-flash",v="DeepSeek Flash (Free default)"):N==="NVIDIA"?(g="moonshotai/kimi-k2.6",v="Moonshot Kimi (NVIDIA)"):(g="google/gemma-4-31b-it:free",v="Gemma 4 (Free default)"):N==="Google"?(g="gemini-3-flash-preview",v="Gemini 3 Flash"):N==="DeepSeek"?(g="deepseek-v4-flash",v="DeepSeek Flash"):N==="NVIDIA"?(g="moonshotai/kimi-k2.6",v="Moonshot Kimi (NVIDIA)"):(g="deepseek/deepseek-v4-flash",v="DeepSeek Flash"),Ee(g),Dn({apiTier:Mt,activeModel:g}),U(F=>(z(F.length+1),[...F,{id:"tier-switch-"+Date.now(),role:"system",text:`**[TIER LIMIT]** Auto-switched to ${v}.`,isMeta:!0}]))},[Mt,N,ze]);let Gn=Js(()=>{let x=jr(),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"}},[]),vs=bo(null),er=bo("");no(()=>{vs.current=pt},[pt]),no(()=>{er.current=Ut},[Ut]);let[Kr,Ds]=Q(!1),[Xn,cs]=Q(null),[us,tr]=Q(null),oe=x=>{cs(null),J("chat")},Ce=x=>{let g=Math.floor(x/3600),v=Math.floor(x%3600/60),F=x%60,C=[];return g>0&&C.push(`${g}h`),(v>0||g>0)&&C.push(`${v}m`),C.push(`${F}s`),C.join(" ")},ie=x=>x<1e3?`${x}ms`:Ce(Math.floor(x/1e3)),[We,pe]=Q(null),[St,He]=Q("");no(()=>{let x;if(We){let g=()=>{let v=fa[Math.floor(Math.random()*fa.length)];He(v)};St||g(),x=setInterval(g,1e4)}else He("");return()=>clearInterval(x)},[We]);let[Ho,En]=Q(!0),[fo,Os]=Q(!1),[Kn,or]=Q(!1),[Ls,Ps]=Q(!1),[Vn,ya]=Q(null),[qn,zn]=Q(0),[wa,Go]=Q([]),Xo=bo(null),[Ta,ds]=Q(null),[Z,Qe]=Q(null),[gt,K]=Q(null);no(()=>zn(0),[i]);let[_e,U]=Q(()=>{let x={id:"logo-"+Date.now(),role:"system",isLogo:!0,isMeta:!0},g=process.cwd()===Mc.homedir(),v=(()=>{let C=process.cwd().toLowerCase();if(process.platform==="win32"){let _=process.env.SystemRoot?.toLowerCase()||"c:\\windows",B=process.env.ProgramFiles?.toLowerCase()||"c:\\program files",b=process.env["ProgramFiles(x86)"]?.toLowerCase()||"c:\\program files (x86)";return C.startsWith(_)||C.startsWith(B)||C.startsWith(b)}else return C==="/"||["/bin","/sbin","/etc","/usr","/var","/root"].some(B=>C.startsWith(B))})(),F=[x];return v?F.push({id:"system-warning",role:"system",text:"[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}):g&&F.push({id:"home-warning",role:"system",text:"[SECURITY ALERT] HOME DIRECTORY DETECTED",subText:`You are currently in ${Mc.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}),F}),ve=bo(null),[vo,z]=Q(_e.length),Jn=Js(()=>{let g=p.columns||80,v=0,F=0;for(let C=_e.length-1;C>=0;C--){let _=_e[C];if(!_)continue;let B=_.text||"",b=B.split(/\r?\n/).length;if(B.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,v+b>2e3){F=C+1;break}v+=b}return{items:_e.slice(F,vo),isTruncated:F>0}},[_e,p.columns,p.rows]),xt=Js(()=>{if(!pt||!Ut)return!1;let x=Ut.trim();return x.endsWith("?")||x.endsWith(":")||/\[[yYnN/]+\]\s*$/.test(x)||/\([yYnN]\)\s*$/.test(x)},[pt,Ut]);yd((x,g)=>{if(!(x==="\x1B[I"||x==="\x1B[O"||x==="[I"||x==="[O")){if($){let v=jr(),F=Dc(v);if(g.upArrow)O(C=>C>0?C-1:F.length-1);else if(g.downArrow)O(C=>C<F.length-1?C+1:0);else if(g.return){let C=F[D];if(C.action==="dismiss")W(!1);else if(C.url){let _=process.platform==="win32"?`start ${C.url}`:process.platform==="darwin"?`open ${C.url}`:`xdg-open ${C.url}`;Ur(_),W(!1)}}return}if(g.tab&&pt){Ot(v=>!v);return}if(Wt&&pt){if(g.return){let v=process.platform==="win32";ko(v?`\r
592
+ \u2022 Type \`/changelog\` to view the release notes.`,isUpdateNotification:!0,isMeta:!0}),R})}else x&&U(b=>{z(b.length+1);let L=_&&_===B?`${Uo}-stable`:Uo;return[...b,{id:"uptodate-"+Date.now(),role:"system",text:`[SYSTEM] Flux Flow is already up to date (${L}).`,isMeta:!0}]})}catch(F){x&&U(C=>(z(C.length+1),[...C,{id:"check-err-"+Date.now(),role:"system",text:`ERROR: Failed to check for updates: ${F.message}`,isMeta:!0}]))}};no(()=>{let x=()=>{r.write("\x1B[2J\x1B[3J\x1B[H"),y({columns:r.columns,rows:r.rows})};return r.on("resize",x),()=>{r.off("resize",x)}},[r]);let[q,Y]=Q("Medium"),[N,he]=Q("Google"),[ee,Me]=Q(0),[le,ue]=Q(null),[Xe,_t]=Q(!1),[Ve,Ee]=Q("gemma-4-31b-it"),[ft,et]=Q("gemma-4-26b-a4b-it"),[Ye,qe]=Q(!0),[mo,Vt]=Q(!0),ct=bo(0),[ze,ot]=Q(null),[Ao,on]=Q(""),[qt,J]=Q("chat"),[Mt,so]=Q("Free"),[ro,Qs]=Q({agentLimit:999999,backgroundLimit:999999,searchLimit:100,customModelId:"",customLimit:0}),[Wo,At]=Q(null),[Nt,at]=Q({memory:!0,compression:0,autoExec:!1,autoDeleteHistory:"7d",autoUpdate:!1,updateManager:"npm",customUpdateCommand:""}),[wn,as]=Q({name:null,nickname:null,instructions:null}),[re,$e]=Q({keyType:"Default",quality:"Low-High",apiKey:""}),[Ke,Oe]=Q({tokens:0}),[Je,Te]=Q(0),[Et,Yn]=Q(0),[Tt,Tn]=Q(0),[lt,Se]=Q(0),zt=bo(0),[vt,Yo]=Q(0),[Bt,jn]=Q(0),[ht,ut]=Q(0),[Jt,Rt]=Q(0),[jo,Hr]=Q(0),[Is,Ms]=Q(0),[ls,xa]=Q(0),[As,Gr]=Q(0),[Hn,Kr]=Q(0),[me,be]=Q(null),[je,nn]=Q(xi());no(()=>{let x=Tt-zt.current;Se(x),je&&ul(je,x,Ke.tokens).catch(()=>{})},[Tt,je,Ke.tokens]);let[pt,sn]=Q(null),[Ut,Dt]=Q(""),[Wt,Ot]=Q(!1),[io,Qt]=Q(0),Co=bo(!0),rn=bo(!0),Sn=bo(!0),Zs=bo(N);no(()=>{Zs.current!==N?(Zs.current=N,Y(N==="DeepSeek"||N==="NVIDIA"?"Standard":"Medium")):N==="Google"&&q==="xHigh"&&Ve&&Ve.toLowerCase().startsWith("gemini-3")&&Y("High")},[N,Ve,q]),no(()=>{if(!ze)return;if(Co.current){Co.current=!1,setTimeout(()=>{rn.current=!1,setTimeout(()=>{Sn.current=!1},1e3)},2e3);return}if(rn.current||Sn.current)return;let x=Fe(2),g="",v="";Mt==="Free"?N==="Google"?(g="gemma-4-31b-it",v="Gemma 4 (Free default)"):N==="DeepSeek"?(g="deepseek-v4-flash",v="DeepSeek Flash (Free default)"):N==="NVIDIA"?(g="moonshotai/kimi-k2.6",v="Moonshot Kimi (NVIDIA)"):(g="google/gemma-4-31b-it:free",v="Gemma 4 (Free default)"):N==="Google"?(g="gemini-3-flash-preview",v="Gemini 3 Flash"):N==="DeepSeek"?(g="deepseek-v4-flash",v="DeepSeek Flash"):N==="NVIDIA"?(g="moonshotai/kimi-k2.6",v="Moonshot Kimi (NVIDIA)"):(g="deepseek/deepseek-v4-flash",v="DeepSeek Flash"),Ee(g),Dn({apiTier:Mt,activeModel:g}),U(F=>(z(F.length+1),[...F,{id:"tier-switch-"+Date.now(),role:"system",text:`**[TIER LIMIT]** Auto-switched to ${v}.`,isMeta:!0}]))},[Mt,N,ze]);let Gn=Js(()=>{let x=jr(),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"}},[]),vs=bo(null),er=bo("");no(()=>{vs.current=pt},[pt]),no(()=>{er.current=Ut},[Ut]);let[Xr,Ds]=Q(!1),[Kn,cs]=Q(null),[us,tr]=Q(null),oe=x=>{cs(null),J("chat")},Ce=x=>{let g=Math.floor(x/3600),v=Math.floor(x%3600/60),F=x%60,C=[];return g>0&&C.push(`${g}h`),(v>0||g>0)&&C.push(`${v}m`),C.push(`${F}s`),C.join(" ")},ie=x=>x<1e3?`${x}ms`:Ce(Math.floor(x/1e3)),[We,pe]=Q(null),[St,He]=Q("");no(()=>{let x;if(We){let g=()=>{let v=fa[Math.floor(Math.random()*fa.length)];He(v)};St||g(),x=setInterval(g,1e4)}else He("");return()=>clearInterval(x)},[We]);let[Ho,En]=Q(!0),[fo,Os]=Q(!1),[Xn,or]=Q(!1),[Ls,Ps]=Q(!1),[Vn,ya]=Q(null),[qn,zn]=Q(0),[wa,Go]=Q([]),Ko=bo(null),[Ta,ds]=Q(null),[Z,Qe]=Q(null),[gt,X]=Q(null);no(()=>zn(0),[i]);let[_e,U]=Q(()=>{let x={id:"logo-"+Date.now(),role:"system",isLogo:!0,isMeta:!0},g=process.cwd()===Mc.homedir(),v=(()=>{let C=process.cwd().toLowerCase();if(process.platform==="win32"){let _=process.env.SystemRoot?.toLowerCase()||"c:\\windows",B=process.env.ProgramFiles?.toLowerCase()||"c:\\program files",b=process.env["ProgramFiles(x86)"]?.toLowerCase()||"c:\\program files (x86)";return C.startsWith(_)||C.startsWith(B)||C.startsWith(b)}else return C==="/"||["/bin","/sbin","/etc","/usr","/var","/root"].some(B=>C.startsWith(B))})(),F=[x];return v?F.push({id:"system-warning",role:"system",text:"[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}):g&&F.push({id:"home-warning",role:"system",text:"[SECURITY ALERT] HOME DIRECTORY DETECTED",subText:`You are currently in ${Mc.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}),F}),ve=bo(null),[vo,z]=Q(_e.length),Jn=Js(()=>{let g=p.columns||80,v=0,F=0;for(let C=_e.length-1;C>=0;C--){let _=_e[C];if(!_)continue;let B=_.text||"",b=B.split(/\r?\n/).length;if(B.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,v+b>2e3){F=C+1;break}v+=b}return{items:_e.slice(F,vo),isTruncated:F>0}},[_e,p.columns,p.rows]),xt=Js(()=>{if(!pt||!Ut)return!1;let x=Ut.trim();return x.endsWith("?")||x.endsWith(":")||/\[[yYnN/]+\]\s*$/.test(x)||/\([yYnN]\)\s*$/.test(x)},[pt,Ut]);yd((x,g)=>{if(!(x==="\x1B[I"||x==="\x1B[O"||x==="[I"||x==="[O")){if($){let v=jr(),F=Dc(v);if(g.upArrow)O(C=>C>0?C-1:F.length-1);else if(g.downArrow)O(C=>C<F.length-1?C+1:0);else if(g.return){let C=F[D];if(C.action==="dismiss")W(!1);else if(C.url){let _=process.platform==="win32"?`start ${C.url}`:process.platform==="darwin"?`open ${C.url}`:`xdg-open ${C.url}`;Ur(_),W(!1)}}return}if(g.tab&&pt){Ot(v=>!v);return}if(Wt&&pt){if(g.return){let v=process.platform==="win32";ko(v?`\r
590
593
  `:`
591
594
  `),Po||Dt(F=>F+`
592
- `)}else if(g.backspace||g.delete)Po?ko("\x7F"):(ko("\b \b"),Dt(v=>v.slice(0,-1)));else if(g.upArrow)ko(g.shift?"\x1B[1;2A":"\x1B[A");else if(g.downArrow)ko(g.shift?"\x1B[1;2B":"\x1B[B");else if(g.rightArrow)ko(g.shift?"\x1B[1;2C":"\x1B[C");else if(g.leftArrow)ko(g.shift?"\x1B[1;2D":"\x1B[D");else if(g.escape)ko("\x1B");else if(g.ctrl&&x){let v=x.toLowerCase().charCodeAt(0);v>=97&&v<=122?ko(String.fromCharCode(v-96)):ko(x)}else x&&(ko(x),Po||Dt(v=>v+x));return}if(g.escape){if(Lt.length>0&&qt==="chat"){A(!0);return}if(t){o(!1);return}if(fo||pt)Ls?(rc(),Ga(),Ps(!1),Vn&&clearTimeout(Vn)):(Ps(!0),Vn&&clearTimeout(Vn),ya(setTimeout(()=>Ps(!1),3e3)));else if(qt==="revert")J("chat"),zn(0);else if(qt!=="chat"&&qt!=="settings")J("chat");else{if(!ze&&ee===1){Me(0),on("");return}zn(v=>{let F=v+1;return F===1?(Xo.current&&clearTimeout(Xo.current),Xo.current=setTimeout(()=>zn(0),2e3)):F===2&&(Xo.current&&clearTimeout(Xo.current),zn(0),i.length>0?u(""):yt.getChatHistory(je).then(C=>{C.length>0?(Go(C.reverse()),J("revert")):U(_=>(z(_.length+1),[..._,{id:"revert-empty-"+Date.now(),role:"system",text:"\u{1F6C8} Nothing to revert to.",isMeta:!0}]))})),F})}}if(Lt.length>0&&qt==="chat"){if(g.upArrow){w(v=>v>0?v-1:Lt.length-1);return}if(g.downArrow){w(v=>v<Lt.length-1?v+1:0);return}if(g.return)return}if(g.tab,g.ctrl&&x==="c"&&qt!=="exit"){if(i.length>0){u("");return}if(g.shift){J("exit"),o(!1);return}t?(J("exit"),o(!1)):o(!0)}g.return&&(g.shift||g.ctrl||g.meta||g.leftAlt||g.rightAlt)&&u(v=>v.replace(/\\\r?$/,"").replace(/\r?$/,"")+`
593
- `)}}),no(()=>{process.stdout.write("\x1B[?1004h");let x=g=>{let v=g.toString();v.includes("\x1B[I")?(Vt(!0),ct.current=Date.now()):v.includes("\x1B[O")&&(Vt(!1),ct.current=Date.now())};return process.stdin.on("data",x),()=>{process.stdout.write("\x1B[?1004l"),process.stdin.off("data",x)}},[]),no(()=>{async function x(){try{let B=JSON.parse(uo.readFileSync(is.join(process.cwd(),"package.json"),"utf8"));Vi(Uo||B.version||"2.0.0")}catch{Vi("2.0.0")}process.stdout.isTTY&&(process.stdout.write("\x1B]0;FluxFlow\x07"),process.stdout.write("\x1B]633;P;TerminalTitle=FluxFlow\x07")),Cc()||(U(B=>(z(B.length+1),[...B,{id:"setup-"+Date.now(),role:"system",text:"[SYSTEM] Installing Required dependencies... (One-time setup)",isMeta:!0}])),await kc(),U(B=>(z(B.length+1),[...B,{id:"setup-done-"+Date.now(),role:"system",text:"[SYSTEM] All dependencies installed successfully.",isMeta:!0}])));let g=await hs();j.mode?h(j.mode):h(g.mode),j.thinking?Y(j.thinking):Y(g.thinkingLevel);let v=j.provider||g.aiProvider||"Google";he(v);let F=g.apiTier||"Free";if(P.current=g.activeModel,j.model)Ee(j.model);else if(j.provider){let B="";F==="Free"?v==="Google"?B="gemma-4-31b-it":v==="DeepSeek"?B="deepseek-v4-flash":v==="OpenRouter"?B="google/gemma-4-31b-it:free":v==="NVIDIA"&&(B="moonshotai/kimi-k2.6"):v==="Google"?B="gemini-3-flash-preview":v==="DeepSeek"?B="deepseek-v4-flash":v==="OpenRouter"?B="deepseek/deepseek-v4-flash":v==="NVIDIA"&&(B="moonshotai/kimi-k2.6"),Ee(B)}else Ee(g.activeModel);_t(g.showFullThinking),so(g.apiTier||"Free"),Qs(g.quotas||{agentLimit:999999,backgroundLimit:999999,searchLimit:100,customModelId:"",customLimit:0});let C={memory:!0,compression:0,autoExec:!1,autoDeleteHistory:"7d",autoUpdate:!1,updateManager:"npm",customUpdateCommand:"",...g.systemSettings||{}};j.memory==="on"?C.memory=!0:j.memory==="off"&&(C.memory=!1),j.package&&(C.updateManager=j.package),j.autoDel&&(C.autoDeleteHistory=j.autoDel),j.autoExec==="on"?C.autoExec=!0:j.autoExec==="off"&&(C.autoExec=!1),j.externalAccess==="on"?C.allowExternalAccess=!0:j.externalAccess==="off"&&(C.allowExternalAccess=!1),at(C),as(g.profileData),$e(g.imageSettings||{keyType:"Default",quality:"Low-High",apiKey:""});let _=j.key;if(_||(_=await ur(v)),_&&(ot(_),zs(_,{aiProvider:v,onIDEApproval:oe})),g.systemSettings?.autoDeleteHistory&&al(g.systemSettings.autoDeleteHistory),ll(To),G(!1,C),await fl(),await yt.recoverCrashedTransaction(),j.resume){let B=await _o(),b=j.resume;if(B[b]){nn(b);let L=await Ir(b);zt.current=Tt-L.total,Se(L.total),Oe({tokens:L.context});let R=[...B[b].messages];R[0]?.text?.includes("\u2591\u2591\u2591\u2588\u2588\u2588")||R.unshift({id:"logo-"+Date.now(),role:"system",isLogo:!0,isMeta:!0}),U(R),J("chat"),U(ne=>{let Ne=[...ne,{id:"sys-"+Date.now(),role:"system",text:`SESSION RESUMED VIA CLI: [${b}]`,isMeta:!0}];return z(Ne.length),Ne})}else U(L=>[...L,{id:"sys-err-"+Date.now(),role:"system",text:`ERROR: Chat session [${b}] not found. Started new session.`,isMeta:!0}])}qe(!1)}x()},[]),no(()=>{let x;return t&&(s(10),x=setInterval(()=>{s(g=>g<=1?(o(!1),0):g-1)},1e3)),()=>{x&&clearInterval(x)}},[t]),no(()=>{if(!Ye){let x=j.model&&Ve===j.model?P.current:Ve;Dn({mode:d,thinkingLevel:q,aiProvider:N,activeModel:x||Ve,showFullThinking:Ke,systemSettings:Nt,profileData:wn,imageSettings:re,apiTier:Mt})}},[d,q,N,Ve,Ke,Nt,wn,re,Ye,j,Mt]);let ms=async x=>{let g=x.trim(),v=38;if(N==="OpenRouter"&&(v=30),N==="DeepSeek"&&(v=30),N==="NVIDIA"&&(v=30),g.length>=v){await dr(N,g),ot(g),zs(g,{aiProvider:N,onIDEApproval:oe});let F="gemma-4-31b-it";N==="OpenRouter"?F="google/gemma-4-31b-it:free":N==="DeepSeek"?F="deepseek-v4-flash":N==="NVIDIA"&&(F="moonshotai/kimi-k2.6"),Ee(F),U(C=>[...C,{role:"system",text:`${N} API Key saved successfully! Model set to ${F}. Initialization complete.`,isMeta:!0}])}else U(F=>[...F,{role:"system",text:`INVALID KEY: ${N} API keys must be at least ${v} characters.`,isMeta:!0}]),on("")},bn=bo(pa);no(()=>{if(qt==="exit"){(async()=>{let v=Date.now(),F=Math.floor((v-bn.current)/1e3);F>=1&&(await Eo("duration",F),bn.current+=F*1e3),await hl()})();let g=setTimeout(()=>{process.exit(0)},1700);return()=>clearTimeout(g)}},[qt]),no(()=>{let x=setInterval(async()=>{if(!Ye){let g=Date.now(),v=Math.floor((g-bn.current)/1e3);v>=1&&(await Eo("duration",v),bn.current+=v*1e3)}},1500);return()=>clearInterval(x)},[Ye]);let Fs=[{cmd:"/quit",desc:"Exit and shutdown Flux"},{cmd:"/help",desc:"Show all available commands"},{cmd:"/compress",desc:"Summarize and compress chat history"},{cmd:"/clear",desc:"Clear terminal screen"},{cmd:"/resume",desc:"Load previous session"},{cmd:"/revert",desc:"Revert codebase back to a checkpoint"},{cmd:"/gemini",desc:"Get a happy message from Gemini CLI"},{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:"/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:N==="DeepSeek"?[{cmd:"Fast",desc:"Fastest"},{cmd:"Standard",desc:"Standard Reasoning"},{cmd:"High",desc:"Extended Reasoning"}]:N==="NVIDIA"?[{cmd:"Fast",desc:"Reasoning Disabled"},{cmd:"Standard",desc:"Balanced Reasoning"},{cmd:"High",desc:"Reasoning Enabled"}]:N==="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"}]:Ve&&Ve.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:N==="OpenRouter"?Mt==="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"}]:N==="DeepSeek"?[{cmd:"deepseek-v4-flash",desc:"Fast & Efficient"},{cmd:"deepseek-v4-pro",desc:"High-Intelligence Reasoning"}]:N==="NVIDIA"?[{cmd:"moonshotai/kimi-k2.6",desc:"Multimodal"},{cmd:"google/gemma-4-31b-it",desc:""},{cmd:"stepfun-ai/step-3.7-flash",desc:""},{cmd:"minimaxai/minimax-m2.7",desc:""},{cmd:"deepseek-ai/deepseek-v4-flash",desc:""},{cmd:"deepseek-ai/deepseek-v4-pro",desc:""},{cmd:"mistralai/mistral-medium-3.5-128b",desc:""},{cmd:"z-ai/glm-5.1",desc:""},{cmd:"google/diffusiongemma-26b-a4b-it",desc:"Mega Fast [Experimental]"},{cmd:"minimaxai/minimax-m3",desc:""}]:Mt==="Free"?[{cmd:"gemma-4-26b-a4b-it",desc:"Standard & Faster"},{cmd:"gemma-4-31b-it",desc:"Standard Default"},{cmd:"gemini-2.5-flash-lite",desc:"Fast & Cheap (Limited Free Quota)"},{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-lite",desc:"Fast & Cheap"},{cmd:"gemini-2.5-flash",desc:"Fast & Reliable"},{cmd:"gemini-2.5-pro",desc:"Last gen Pro reasoning"},{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:"/docs",desc:"View Documentation"},{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"}]}],Vr=async(x,g=!1)=>{if(!g&&Lt.length>0){let C=Lt[T]||Lt[0],_=x.split(" ");if(_.length===1)u(C.cmd+" ");else{let B=_.slice(0,-1);u(B.join(" ")+" "+C.cmd+" ")}w(0),m(B=>B+1);return}let v=x.replace(/\r\n/g,`
595
+ `)}else if(g.backspace||g.delete)Po?ko("\x7F"):(ko("\b \b"),Dt(v=>v.slice(0,-1)));else if(g.upArrow)ko(g.shift?"\x1B[1;2A":"\x1B[A");else if(g.downArrow)ko(g.shift?"\x1B[1;2B":"\x1B[B");else if(g.rightArrow)ko(g.shift?"\x1B[1;2C":"\x1B[C");else if(g.leftArrow)ko(g.shift?"\x1B[1;2D":"\x1B[D");else if(g.escape)ko("\x1B");else if(g.ctrl&&x){let v=x.toLowerCase().charCodeAt(0);v>=97&&v<=122?ko(String.fromCharCode(v-96)):ko(x)}else x&&(ko(x),Po||Dt(v=>v+x));return}if(g.escape){if(Lt.length>0&&qt==="chat"){A(!0);return}if(t){o(!1);return}if(fo||pt)Ls?(rc(),Ga(),Ps(!1),Vn&&clearTimeout(Vn)):(Ps(!0),Vn&&clearTimeout(Vn),ya(setTimeout(()=>Ps(!1),3e3)));else if(qt==="revert")J("chat"),zn(0);else if(qt!=="chat"&&qt!=="settings")J("chat");else{if(!ze&&ee===1){Me(0),on("");return}zn(v=>{let F=v+1;return F===1?(Ko.current&&clearTimeout(Ko.current),Ko.current=setTimeout(()=>zn(0),2e3)):F===2&&(Ko.current&&clearTimeout(Ko.current),zn(0),i.length>0?u(""):yt.getChatHistory(je).then(C=>{C.length>0?(Go(C.reverse()),J("revert")):U(_=>(z(_.length+1),[..._,{id:"revert-empty-"+Date.now(),role:"system",text:"\u{1F6C8} Nothing to revert to.",isMeta:!0}]))})),F})}}if(Lt.length>0&&qt==="chat"){if(g.upArrow){w(v=>v>0?v-1:Lt.length-1);return}if(g.downArrow){w(v=>v<Lt.length-1?v+1:0);return}if(g.return)return}if(g.tab,g.ctrl&&x==="c"&&qt!=="exit"){if(i.length>0){u("");return}if(g.shift){J("exit"),o(!1);return}t?(J("exit"),o(!1)):o(!0)}g.return&&(g.shift||g.ctrl||g.meta||g.leftAlt||g.rightAlt)&&u(v=>v.replace(/\\\r?$/,"").replace(/\r?$/,"")+`
596
+ `)}}),no(()=>{process.stdout.write("\x1B[?1004h");let x=g=>{let v=g.toString();v.includes("\x1B[I")?(Vt(!0),ct.current=Date.now()):v.includes("\x1B[O")&&(Vt(!1),ct.current=Date.now())};return process.stdin.on("data",x),()=>{process.stdout.write("\x1B[?1004l"),process.stdin.off("data",x)}},[]),no(()=>{async function x(){try{let B=JSON.parse(uo.readFileSync(is.join(process.cwd(),"package.json"),"utf8"));Vi(Uo||B.version||"2.0.0")}catch{Vi("2.0.0")}process.stdout.isTTY&&(process.stdout.write("\x1B]0;FluxFlow\x07"),process.stdout.write("\x1B]633;P;TerminalTitle=FluxFlow\x07")),Cc()||(U(B=>(z(B.length+1),[...B,{id:"setup-"+Date.now(),role:"system",text:"[SYSTEM] Installing Required dependencies... (One-time setup)",isMeta:!0}])),await kc(),U(B=>(z(B.length+1),[...B,{id:"setup-done-"+Date.now(),role:"system",text:"[SYSTEM] All dependencies installed successfully.",isMeta:!0}])));let g=await hs();j.mode?h(j.mode):h(g.mode),j.thinking?Y(j.thinking):Y(g.thinkingLevel);let v=j.provider||g.aiProvider||"Google";he(v);let F=g.apiTier||"Free";if(P.current=g.activeModel,j.model)Ee(j.model);else if(j.provider){let B="";F==="Free"?v==="Google"?B="gemma-4-31b-it":v==="DeepSeek"?B="deepseek-v4-flash":v==="OpenRouter"?B="google/gemma-4-31b-it:free":v==="NVIDIA"&&(B="moonshotai/kimi-k2.6"):v==="Google"?B="gemini-3-flash-preview":v==="DeepSeek"?B="deepseek-v4-flash":v==="OpenRouter"?B="deepseek/deepseek-v4-flash":v==="NVIDIA"&&(B="moonshotai/kimi-k2.6"),Ee(B)}else Ee(g.activeModel);_t(g.showFullThinking),so(g.apiTier||"Free"),Qs(g.quotas||{agentLimit:999999,backgroundLimit:999999,searchLimit:100,customModelId:"",customLimit:0});let C={memory:!0,compression:0,autoExec:!1,autoDeleteHistory:"7d",autoUpdate:!1,updateManager:"npm",customUpdateCommand:"",...g.systemSettings||{}};j.memory==="on"?C.memory=!0:j.memory==="off"&&(C.memory=!1),j.package&&(C.updateManager=j.package),j.autoDel&&(C.autoDeleteHistory=j.autoDel),j.autoExec==="on"?C.autoExec=!0:j.autoExec==="off"&&(C.autoExec=!1),j.externalAccess==="on"?C.allowExternalAccess=!0:j.externalAccess==="off"&&(C.allowExternalAccess=!1),at(C),as(g.profileData),$e(g.imageSettings||{keyType:"Default",quality:"Low-High",apiKey:""});let _=j.key;if(_||(_=await ur(v)),_&&(ot(_),zs(_,{aiProvider:v,onIDEApproval:oe})),g.systemSettings?.autoDeleteHistory&&al(g.systemSettings.autoDeleteHistory),ll(To),G(!1,C),await fl(),await yt.recoverCrashedTransaction(),j.resume){let B=await _o(),b=j.resume;if(B[b]){nn(b);let L=await Ir(b);zt.current=Tt-L.total,Se(L.total),Oe({tokens:L.context});let R=[...B[b].messages];R[0]?.text?.includes("\u2591\u2591\u2591\u2588\u2588\u2588")||R.unshift({id:"logo-"+Date.now(),role:"system",isLogo:!0,isMeta:!0}),U(R),J("chat"),U(ne=>{let Ne=[...ne,{id:"sys-"+Date.now(),role:"system",text:`SESSION RESUMED VIA CLI: [${b}]`,isMeta:!0}];return z(Ne.length),Ne})}else U(L=>[...L,{id:"sys-err-"+Date.now(),role:"system",text:`ERROR: Chat session [${b}] not found. Started new session.`,isMeta:!0}])}qe(!1)}x()},[]),no(()=>{let x;return t&&(s(10),x=setInterval(()=>{s(g=>g<=1?(o(!1),0):g-1)},1e3)),()=>{x&&clearInterval(x)}},[t]),no(()=>{if(!Ye){let x=j.model&&Ve===j.model?P.current:Ve;Dn({mode:d,thinkingLevel:q,aiProvider:N,activeModel:x||Ve,showFullThinking:Xe,systemSettings:Nt,profileData:wn,imageSettings:re,apiTier:Mt})}},[d,q,N,Ve,Xe,Nt,wn,re,Ye,j,Mt]);let ms=async x=>{let g=x.trim(),v=38;if(N==="OpenRouter"&&(v=30),N==="DeepSeek"&&(v=30),N==="NVIDIA"&&(v=30),g.length>=v){await dr(N,g),ot(g),zs(g,{aiProvider:N,onIDEApproval:oe});let F="gemma-4-31b-it";N==="OpenRouter"?F="google/gemma-4-31b-it:free":N==="DeepSeek"?F="deepseek-v4-flash":N==="NVIDIA"&&(F="moonshotai/kimi-k2.6"),Ee(F),U(C=>[...C,{role:"system",text:`${N} API Key saved successfully! Model set to ${F}. Initialization complete.`,isMeta:!0}])}else U(F=>[...F,{role:"system",text:`INVALID KEY: ${N} API keys must be at least ${v} characters.`,isMeta:!0}]),on("")},bn=bo(pa);no(()=>{if(qt==="exit"){(async()=>{let v=Date.now(),F=Math.floor((v-bn.current)/1e3);F>=1&&(await Eo("duration",F),bn.current+=F*1e3),await hl()})();let g=setTimeout(()=>{process.exit(0)},1700);return()=>clearTimeout(g)}},[qt]),no(()=>{let x=setInterval(async()=>{if(!Ye){let g=Date.now(),v=Math.floor((g-bn.current)/1e3);v>=1&&(await Eo("duration",v),bn.current+=v*1e3)}},1500);return()=>clearInterval(x)},[Ye]);let Fs=[{cmd:"/quit",desc:"Exit and shutdown Flux"},{cmd:"/help",desc:"Show all available commands"},{cmd:"/compress",desc:"Summarize and compress chat history"},{cmd:"/clear",desc:"Clear terminal screen"},{cmd:"/resume",desc:"Load previous session"},{cmd:"/revert",desc:"Revert codebase back to a checkpoint"},{cmd:"/gemini",desc:"Get a happy message from Gemini CLI"},{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:"/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:N==="DeepSeek"?[{cmd:"Fast",desc:"Fastest"},{cmd:"Standard",desc:"Standard Reasoning"},{cmd:"High",desc:"Extended Reasoning"}]:N==="NVIDIA"?[{cmd:"Fast",desc:"Reasoning Disabled"},{cmd:"Standard",desc:"Balanced Reasoning"},{cmd:"High",desc:"Reasoning Enabled"}]:N==="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"}]:Ve&&Ve.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:N==="OpenRouter"?Mt==="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"}]:N==="DeepSeek"?[{cmd:"deepseek-v4-flash",desc:"Fast & Efficient"},{cmd:"deepseek-v4-pro",desc:"High-Intelligence Reasoning"}]:N==="NVIDIA"?[{cmd:"moonshotai/kimi-k2.6",desc:"Multimodal"},{cmd:"google/gemma-4-31b-it",desc:""},{cmd:"stepfun-ai/step-3.7-flash",desc:""},{cmd:"minimaxai/minimax-m2.7",desc:""},{cmd:"deepseek-ai/deepseek-v4-flash",desc:""},{cmd:"deepseek-ai/deepseek-v4-pro",desc:""},{cmd:"mistralai/mistral-medium-3.5-128b",desc:""},{cmd:"z-ai/glm-5.1",desc:""},{cmd:"google/diffusiongemma-26b-a4b-it",desc:"Mega Fast [Experimental]"},{cmd:"minimaxai/minimax-m3",desc:""}]:Mt==="Free"?[{cmd:"gemma-4-26b-a4b-it",desc:"Standard & Faster"},{cmd:"gemma-4-31b-it",desc:"Standard Default"},{cmd:"gemini-2.5-flash-lite",desc:"Fast & Cheap (Limited Free Quota)"},{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-lite",desc:"Fast & Cheap"},{cmd:"gemini-2.5-flash",desc:"Fast & Reliable"},{cmd:"gemini-2.5-pro",desc:"Last gen Pro reasoning"},{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:"/docs",desc:"View Documentation"},{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"}]}],Vr=async(x,g=!1)=>{if(!g&&Lt.length>0){let C=Lt[T]||Lt[0],_=x.split(" ");if(_.length===1)u(C.cmd+" ");else{let B=_.slice(0,-1);u(B.join(" ")+" "+C.cmd+" ")}w(0),m(B=>B+1);return}let v=x.replace(/\r\n/g,`
594
597
  `).replace(/\r/g,`
595
598
  `).trimEnd();if(v.endsWith("\\")){u(v.slice(0,-1)+`
596
599
  `);return}let F=v.replace(/\\\s*\n/g,`
@@ -620,24 +623,24 @@ ${R||"No saved chats found."}`,isMeta:!0}]))})();break}case"/memory":{J("memory"
620
623
 
621
624
  # SKILLS & WORKFLOWS
622
625
  - [Define custom step-by-step recipes for this project here]
623
- `,R=is.join(process.cwd(),"FluxFlow.md");if(uo.pathExistsSync(R))U(V=>(z(V.length+1),[...V,{id:"init-err-"+Date.now(),role:"system",text:"ERROR: FluxFlow.md already exists in this directory.",isMeta:!0}]));else try{uo.writeFileSync(R,L),U(V=>(z(V.length+1),[...V,{id:"init-ok-"+Date.now(),role:"system",text:"[SUCCESS] FluxFlow.md has been initialized. You can now customize it for this project.",isMeta:!0}]))}catch(V){U(ne=>(z(ne.length+1),[...ne,{id:"init-err-"+Date.now(),role:"system",text:`ERROR: Failed to initialize FluxFlow.md: ${V.message}`,isMeta:!0}]))}}else U(L=>(z(L.length+1),[...L,{id:"ff-err-"+Date.now(),role:"system",text:"Usage: /fluxflow init",isMeta:!0}]));break}case"/update":{if(C[1]?.toLowerCase()==="check"){G(!0);break}let L=C.includes("--latest");J("update");break}case"/gemini":{let b=ma[Math.floor(Math.random()*ma.length)];U(L=>(z(L.length+1),[...L,{id:Date.now(),role:"system",text:`\u2728 [GEMINI CLI] ${b}`}])),u("");break}case"/compress":{u("");let b=_e.filter(V=>(V.role==="user"||V.role==="agent"||V.role==="system")&&!String(V.id).startsWith("welcome")&&!V.isMeta).length,L=Xe?.tokens||0;if(b<100||L<32768){let V=Fe(2);U(ne=>(z(ne.length+1),[...ne,{id:Date.now(),role:"system",text:`[SYSTEM] Compression skipped: History requires at least 100 messages and 32k tokens (current: ${b}/100 msgs, ${L}/32768 tokens).`,isMeta:!0}]));break}(async()=>{or(!0);let V=Fe(2);U(ne=>(z(ne.length+1),[...ne,{id:Date.now(),role:"system",text:"[SYSTEM] Compressing session history...",isMeta:!0}]));try{if(await ia({chatId:je,aiProvider:N,apiKey:ze,thinkingLevel:q,mode:d,janitorModel:ft,systemSettings:Nt,sessionStats:Xe},_e)){let de=Fe(2);U(ce=>{let xe=[...ce,{id:Date.now(),role:"system",text:"[SYSTEM] Chat History compressed saving tokens.",isMeta:!0}];return z(xe.length),xe})}else U(de=>(z(de.length+1),[...de,{id:Date.now(),role:"system",text:"[SYSTEM] Compression failed (no summary returned).",isMeta:!0}]))}catch(ne){U(Ne=>(z(Ne.length+1),[...Ne,{id:Date.now(),role:"system",text:`[SYSTEM] Error during compression: ${ne.message}`,isMeta:!0}]))}finally{or(!1)}})();break}case"/help":{U(b=>(z(b.length+1),[...b,{id:Date.now(),role:"system",isHelpRecord:!0,isMeta:!0}]));break}default:let B=Fe(2);U(b=>(z(b.length+1),[...b,{id:Date.now(),role:"system",text:`[SYSTEM] Unknown command: ${_}`,isMeta:!0}]))}}else{let C=`[Prompted on: ${new Date().toLocaleString(void 0,{year:"numeric",month:"numeric",day:"numeric",hour:"2-digit",minute:"2-digit"})}]`,_={id:"user-"+Date.now(),role:"user",text:`${F}
626
+ `,R=is.join(process.cwd(),"FluxFlow.md");if(uo.pathExistsSync(R))U(V=>(z(V.length+1),[...V,{id:"init-err-"+Date.now(),role:"system",text:"ERROR: FluxFlow.md already exists in this directory.",isMeta:!0}]));else try{uo.writeFileSync(R,L),U(V=>(z(V.length+1),[...V,{id:"init-ok-"+Date.now(),role:"system",text:"[SUCCESS] FluxFlow.md has been initialized. You can now customize it for this project.",isMeta:!0}]))}catch(V){U(ne=>(z(ne.length+1),[...ne,{id:"init-err-"+Date.now(),role:"system",text:`ERROR: Failed to initialize FluxFlow.md: ${V.message}`,isMeta:!0}]))}}else U(L=>(z(L.length+1),[...L,{id:"ff-err-"+Date.now(),role:"system",text:"Usage: /fluxflow init",isMeta:!0}]));break}case"/update":{if(C[1]?.toLowerCase()==="check"){G(!0);break}let L=C.includes("--latest");J("update");break}case"/gemini":{let b=ma[Math.floor(Math.random()*ma.length)];U(L=>(z(L.length+1),[...L,{id:Date.now(),role:"system",text:`\u2728 [GEMINI CLI] ${b}`}])),u("");break}case"/compress":{u("");let b=_e.filter(V=>(V.role==="user"||V.role==="agent"||V.role==="system")&&!String(V.id).startsWith("welcome")&&!V.isMeta).length,L=Ke?.tokens||0;if(b<100||L<32768){let V=Fe(2);U(ne=>(z(ne.length+1),[...ne,{id:Date.now(),role:"system",text:`[SYSTEM] Compression skipped: History requires at least 100 messages and 32k tokens (current: ${b}/100 msgs, ${L}/32768 tokens).`,isMeta:!0}]));break}(async()=>{or(!0);let V=Fe(2);U(ne=>(z(ne.length+1),[...ne,{id:Date.now(),role:"system",text:"[SYSTEM] Compressing session history...",isMeta:!0}]));try{if(await ia({chatId:je,aiProvider:N,apiKey:ze,thinkingLevel:q,mode:d,janitorModel:ft,systemSettings:Nt,sessionStats:Ke},_e)){let de=Fe(2);U(ce=>{let xe=[...ce,{id:Date.now(),role:"system",text:"[SYSTEM] Chat History compressed saving tokens.",isMeta:!0}];return z(xe.length),xe})}else U(de=>(z(de.length+1),[...de,{id:Date.now(),role:"system",text:"[SYSTEM] Compression failed (no summary returned).",isMeta:!0}]))}catch(ne){U(Ne=>(z(Ne.length+1),[...Ne,{id:Date.now(),role:"system",text:`[SYSTEM] Error during compression: ${ne.message}`,isMeta:!0}]))}finally{or(!1)}})();break}case"/help":{U(b=>(z(b.length+1),[...b,{id:Date.now(),role:"system",isHelpRecord:!0,isMeta:!0}]));break}default:let B=Fe(2);U(b=>(z(b.length+1),[...b,{id:Date.now(),role:"system",text:`[SYSTEM] Unknown command: ${_}`,isMeta:!0}]))}}else{let C=`[Prompted on: ${new Date().toLocaleString(void 0,{year:"numeric",month:"numeric",day:"numeric",hour:"2-digit",minute:"2-digit"})}]`,_={id:"user-"+Date.now(),role:"user",text:`${F}
624
627
 
625
- ${C}`};U(b=>(z(b.length+1),[...b,_])),(async()=>{let b=!1;Os(!0),a(!1);let L=Date.now(),R=!0;try{let V=[..._e,_].filter(X=>X.role!=="think"&&!X.isVisualFeedback&&!X.isMeta&&!String(X.id).startsWith("welcome")),ne=[];V.forEach((X,we)=>{let ge=X.fullText||X.text;if(X.role==="user"&&we<V.length-1)if(ge.includes("**CONTEXT SUMMARY OF PREVIOUS TURNS")){let Le=ge.indexOf("[SYSTEM METADATA (PRIORITY: DYNAMIC)]");Le!==-1&&(ge=ge.substring(Le).trim())}else{let Le=ge.lastIndexOf("[USER]");Le!==-1&&(ge=ge.substring(Le+6).trim())}if(X.role==="system"&&ge?.startsWith("[TOOL RESULT]")){let Le=ne[ne.length-1];if(Le&&Le.role==="system"&&Le.text?.startsWith("[TOOL RESULT]")){Le.text+=`
628
+ ${C}`};U(b=>(z(b.length+1),[...b,_])),(async()=>{let b=!1;Os(!0),a(!1);let L=Date.now(),R=!0;try{let V=[..._e,_].filter(K=>K.role!=="think"&&!K.isVisualFeedback&&!K.isMeta&&!String(K.id).startsWith("welcome")),ne=[];V.forEach((K,we)=>{let ge=K.fullText||K.text;if(K.role==="user"&&we<V.length-1)if(ge.includes("**CONTEXT SUMMARY OF PREVIOUS TURNS")){let Le=ge.indexOf("[SYSTEM METADATA (PRIORITY: DYNAMIC)]");Le!==-1&&(ge=ge.substring(Le).trim())}else{let Le=ge.lastIndexOf("[USER]");Le!==-1&&(ge=ge.substring(Le+6).trim())}if(K.role==="system"&&ge?.startsWith("[TOOL RESULT]")){let Le=ne[ne.length-1];if(Le&&Le.role==="system"&&Le.text?.startsWith("[TOOL RESULT]")){Le.text+=`
626
629
 
627
- `+ge;return}}ne.push({...X,text:ge})});let Ne=cc(Ve,ne,{profile:wn,thinkingLevel:q,mode:d,systemSettings:Nt,janitorModel:ft,sessionStats:Xe,chatId:je,aiProvider:N,apiKey:ze,apiTier:Mt,cols:p.columns-6,rows:30,onExecStart:X=>{sn(X),Dt("")},onExecChunk:X=>{Dt(we=>we+X)},onExecEnd:()=>{U(X=>{if(!vs.current)return X;let we=er.current||"",ge=Hs(we),Le=`[TERMINAL_RECORD]
630
+ `+ge;return}}ne.push({...K,text:ge})});let Ne=cc(Ve,ne,{profile:wn,thinkingLevel:q,mode:d,systemSettings:Nt,janitorModel:ft,sessionStats:Ke,chatId:je,aiProvider:N,apiKey:ze,apiTier:Mt,cols:p.columns-6,rows:30,onExecStart:K=>{sn(K),Dt("")},onExecChunk:K=>{Dt(we=>we+K)},onExecEnd:()=>{U(K=>{if(!vs.current)return K;let we=er.current||"",ge=Hs(we),Le=`[TERMINAL_RECORD]
628
631
  COMMAND: ${vs.current}
629
632
  PTY: ${Po}
630
633
  OUTPUT: ${ge.replace(/\n{3,}/g,`
631
634
 
632
- `)}`;return[...X,{id:"term-"+Date.now(),role:"system",text:Le,isTerminalRecord:!0}]}),sn(null),Ot(!1),Dt("")},onToolResult:(X,we)=>{if(X==="success"){if(ut(ge=>ge+1),we==="generate_image"){Gr(jt=>jt+1);let Le={Low:.001,"Low-High":.002,Medium:.008,"Medium-High":.01,High:.045,Ultra:.0488,Premium:.1}[re.quality]||.002;Xr(jt=>jt+Le)}}else X==="denied"?Hr(ge=>ge+1):Rt(ge=>ge+1)},onToolApproval:async(X,we)=>{let ge=Kr||Nt.autoExec;if(X==="exec_command"){let{command:Le}=se(we||"{}");return ge||Le&&/^(echo|ls|dir|pwd|cd|git status|git log|git diff|type|cat|help)\b/i.test(Le.trim())?"allow":new Promise(ke=>{cs({tool:X,args:we,resolve:ke}),J("terminalApproval")})}return ge?"allow":new Promise(Le=>{cs({tool:X,args:we,resolve:Le}),J("approval")})},onAskUser:async(X,we)=>new Promise(ge=>{tr({question:X,options:we,resolve:Le=>{U(jt=>[...jt,{id:"ask-"+Date.now(),role:"system",text:`\u{1F4AC} **Ask User**
633
- Selection: ${Le}`,isAskRecord:!0}]),ge(Le)}}),J("ask")})},async()=>{if(ve.current){let X=ve.current;return ds(null),ve.current=null,U(we=>{let ge=[...we].reverse().findIndex(Le=>Le.text?.includes("[STEERING HINT: QUEUED]"));if(ge!==-1){let Le=we.length-1-ge,jt=[...we];return jt[Le]={...jt[Le],text:jt[Le].text.replace("[STEERING HINT: QUEUED]","[STEERING HINT: INJECTED]"),color:"cyan"},jt}return we}),X}return null},Uo),de=!1,ce=null,xe=null,ye=!1,Re=!1,Be=!1,Yt=!1,wo=0,dt=null,an=/\[?\s*turn\s*:\s*.*?\s*\]?/gi;for await(let X of Ne){if(R&&X.type==="text"&&(L=Date.now(),R=!1),X.type==="status"){pe(X.content),Qo()&&_r(X.content);continue}if(X.type==="status_history"){pe(X.content),Qo()&&_r(X.content),U(ke=>[...ke,{id:"condense-"+Date.now(),role:"system",text:`[SYSTEM] ${X.content}`,isMeta:!0}]);continue}if(X.type==="summary_injected"){U(ke=>ke.map(Ie=>Ie.id===X.content.id?{...Ie,fullText:X.content.text}:Ie));continue}if(X.type==="spinner"){En(X.content);continue}if(X.type==="model_update"){K(X.content);continue}if(X.type==="turn_reset"){ce=null,xe=null,de=!1,ye=!1,Re=!1,Yt=!1,Be=!1;continue}if(X.type==="interactive_turn_finished"){Os(!1),Qo()&&_r(null),b=!0,ic({profile:wn,thinkingLevel:q,mode:d,janitorModel:ft,chatId:je,systemSettings:Nt,sessionStats:Xe,aiProvider:N,apiKey:ze},X.data.agentText,X.data.fullAgentTextRaw,X.data.history,{onMemoryUpdated:()=>U(ke=>{let Ie=[...ke];return Ie.length>0&&(Ie[Ie.length-1].memoryUpdated=!0),Ie}),onBackgroundIncrement:()=>Yn(ke=>ke+1)});continue}if(X.type==="visual_feedback"){U(ke=>[...ke,{id:"feedback-"+Date.now(),role:"system",text:X.content,isVisualFeedback:!0}]);continue}if(X.type==="exec_start")continue;if(X.type==="liveTokens"){Oe({tokens:X.content});continue}if(X.type==="usage"){let ke=X.content.totalTokenCount||0,Ie=X.content.cachedContentTokenCount||0,Ue=X.content.candidatesTokenCount||0;Oe({tokens:ke}),Tn(st=>st+ke),Ie>0&&Yo(st=>st+Ie),Ue>0&&jn(st=>st+Ue),Te(st=>st+1);continue}if(X.type==="tool_time"){xa(ke=>ke+X.content);continue}if(X.type==="tool_result"){if(U(ke=>[...ke,{id:"tool-"+Date.now(),role:"system",text:X.content,fullText:X.aiContent,binaryPart:X.binaryPart,toolName:X.toolName}]),X.toolName==="update_file"&&X.aiContent){let ke=X.aiContent.split(`
634
- `),Ie=0,Ue=0,st=!1;for(let Ge of ke){if(Ge.includes("[DIFF_START]")){st=!0;continue}if(Ge.includes("[DIFF_END]")){st=!1;continue}st&&(/^\+\d+/.test(Ge)?Ie++:/^\-\d+/.test(Ge)&&Ue++)}Wr+=Ie,Yr+=Ue,Eo("linesAdded",Ie),Eo("linesRemoved",Ue)}else if(X.toolName==="write_file"&&X.aiContent){let ke=X.aiContent.match(/- Stats: \[(\d+) lines/),Ie=ke?parseInt(ke[1]):0,Ue=0;if(X.aiContent.includes("Old File contents:")){let st=X.aiContent.split(`
635
- `),Ge=!1;for(let Ze of st){if(Ze.includes("Old File contents:")){Ge=!0;continue}Ge&&(Ze.trim()===""?Ge=!1:/^\d+ \|/.test(Ze)&&Ue++)}}Wr+=Ie,Yr+=Ue,Eo("linesAdded",Ie),Eo("linesRemoved",Ue)}continue}let we=X.content,ge=we.toLowerCase();if(we.includes("```")&&(ye=!ye),ge.includes("tool:functions.")&&(Re=!0,wo=0,dt=null,we.includes("[tool:functions.")&&(wo=0)),Re){for(let ke=0;ke<we.length;ke++){let Ie=we[ke];!dt&&(Ie==="'"||Ie==='"'||Ie==="`")?dt=Ie:dt&&Ie===dt&&we[ke-1]!=="\\"&&(dt=null),dt||(Ie==="("||Ie==="["?wo++:(Ie===")"||Ie==="]")&&wo--)}wo<=0&&!dt&&(Re=!1)}if((ge.includes("<think")||ge.includes("<thought"))&&(!de&&!ye&&!Re&&!Be)&&(de=!0,Be=!0,we=we.replace(/<(think|thought)>[\s\S]*?<\/(think|thought)>/gi,"").replace(/<(think|thought)>/gi,""),ce="think-"+Date.now(),U(ke=>[...ke,{id:ce,role:"think",text:"",isStreaming:!0,startTime:Date.now()}])),(ge.includes("</think>")||ge.includes("</thought>"))&&ce){let ke=we.split(/<\/(think|thought)>/gi),Ie=ke[0]||"",Ue=ke.slice(2).join("").replace(/<\/?(think|thought)>/gi,"");U(st=>{let Ge=st.map(Ze=>{if(Ze.id===ce&&typeof Ze.id=="string"){let Ko=Ze.startTime||parseInt(Ze.id.split("-")[1])||Date.now(),Cn=Date.now()-Ko;return{...Ze,text:Ze.text+Ie,isStreaming:!1,duration:Cn}}return Ze});return de=!1,xe="agent-"+Date.now(),[...Ge,{id:xe,role:"agent",text:Ue,isStreaming:!0}]});continue}if(de&&ce)U(ke=>{let Ie=!1,Ue="",st=ke.map(Ge=>{if(Ge.id===ce){let Ze=Ge.text+we;if(Ze.toLowerCase().includes("</think>")){Ie=!0;let Ko=Ze.split(/<\/think>/gi);Ue=Ko.slice(1).join("</think>")||"";let Cn=Ge.startTime||parseInt(Ge.id.split("-")[1])||Date.now(),Qn=Date.now()-Cn;return{...Ge,text:Ko[0],isStreaming:!1,duration:Qn}}return{...Ge,text:Ze,isStreaming:!0}}return Ge});return Ie?(de=!1,xe="agent-"+Date.now(),[...st,{id:xe,role:"agent",text:Ue.replace(/<\/?(think|thought)>/gi,""),isStreaming:!0}]):st});else if(!de){let ke=we.toLowerCase();!Yt&&ke.includes("tool:functions.")&&(Yt=!0),xe?U(Ie=>Ie.map(Ue=>Ue.id===xe?{...Ue,text:Ue.text+we,isStreaming:!0}:Ue)):(xe="agent-"+Date.now(),U(Ie=>[...Ie,{id:xe,role:"agent",text:we,isStreaming:!0}]))}}let ao=Date.now();Ms(X=>X+(ao-L))}catch(V){U(ne=>(z(ne.length+1),[...ne,{id:"error-"+Date.now(),role:"system",text:`\u274C ERROR: ${V.message}`}]))}finally{if(Os(!1),pe(null),b||process.stdout.isTTY&&(process.stdout.write("\x1B]0;FluxFlow | Idle\x07"),process.stdout.write("\x1B]633;P;TerminalTitle=FluxFlow | Idle\x07")),ve.current){Qe(ve.current),ds(null);let V=ve.current;ve.current=null,U(ne=>{let Ne=[...ne],de=Ne.reverse().find(ce=>ce.text?.includes("[STEERING HINT: QUEUED]"));return de&&(de.text=de.text.replace("[STEERING HINT: QUEUED]","[STEERING HINT: FINISHED_TURN]")),Ne.reverse()}),J("resolution")}U(V=>{let ne=Date.now()-L,Ne=!1,de=[...V].reverse().map(xe=>{let ye=xe.isStreaming?{...xe,isStreaming:!1}:xe;return!Ne&&ye.role==="agent"&&(Ne=!0,ye={...ye,workedDuration:ne}),ye}).reverse(),ce=de.filter(xe=>!String(xe.id).startsWith("welcome")&&!xe.isMeta);return kr(je,null,ce),z(de.length),de})}})()}u(""),a(!1)}},Lt=Js(()=>{if(i.startsWith("/")&&!E){let v=i.split(" "),F=v[v.length-1].toLowerCase();if(v.length===1){let _=F.startsWith("/")?F.slice(1):F;return Fs.filter(B=>(B.cmd.startsWith("/")?B.cmd.slice(1):B.cmd).toLowerCase().includes(_))}let C=Fs;for(let _=0;_<v.length-1;_++){let B=v[_].toLowerCase(),b=C.find(L=>L.cmd.toLowerCase()===B);if(b&&b.subs)C=b.subs;else return[]}return C.filter(_=>_.cmd.toLowerCase().includes(F))}let x=i.split(" "),g=x[x.length-1];if(g&&g.startsWith("@")&&!E){let v=g.indexOf("#"),F=v!==-1,C=F?g.substring(1,v).toLowerCase():g.slice(1).toLowerCase(),_=F?g.substring(v):"";return Md(process.cwd()).filter(L=>L.name.toLowerCase().includes(C)).map(L=>{let R=L.relativePath.replace(/\\/g,"/");return{cmd:"@["+(R.startsWith(".")?R:"./"+R)+_+"]",desc:L.relativePath}})}return[]},[i,E]);no(()=>{w(0)},[Lt]);let nr=()=>{switch(qt){case"settings":return l.createElement(ui,{systemSettings:Nt,setSystemSettings:at,apiTier:Mt,setActiveView:J,setInputConfig:At,saveSettings:Dn,quotas:ro,setMessages:U,aiProvider:N});case"selectProvider":return l.createElement(go,{title:"SELECT AI PROVIDER",items:[{label:"Google (Free/Paid)",value:"Google"},{label:"DeepSeek (Paid)",value:"DeepSeek"},{label:"OpenRouter (Free/Paid) [EXPERIMENTAL]",value:"OpenRouter"},{label:"NVIDIA (Free/Paid)",value:"NVIDIA"},{label:"Back",value:"settings"}],onSelect:async x=>{if(x.value==="settings"||x.value==="Back"){J("settings");return}let g=x.value,v=await ur(g);if(v){he(g),ot(v),zs(v,{aiProvider:g,onIDEApproval:oe});let F="gemma-4-31b-it";g==="OpenRouter"?F="google/gemma-4-31b-it:free":g==="DeepSeek"?F="deepseek-v4-flash":g==="NVIDIA"&&(F="moonshotai/kimi-k2.6"),Ee(F),Dn({aiProvider:g,activeModel:F,apiTier:Mt,quotas:ro}),U(C=>[...C,{role:"system",text:`\u2705 Switched to ${g}! Key loaded from Vault. Model set to ${F}.`,isMeta:!0}]),J("settings")}else At({label:`Enter ${g} API Key:`,key:"providerKey",provider:g,value:"",returnView:"settings"}),J("input")},onClose:()=>J("settings")});case"apiTier":return l.createElement(go,{title:l.createElement(S,null,"SELECT YOUR CURRENT API TIER BASED ON ",l.createElement(S,{color:"cyan",underline:!0,bold:!0},"\x1B]8;;https://aistudio.google.com/projects\x07AI STUDIO\x1B]8;;\x07"),". (CURRENT: ",Mt.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"){J("settings");return}let g=x.value;so(g),g==="Paid"?(At({label:"Enter Agent daily budget (requests made):",key:"quotas",subKey:"agentLimit",value:String(ro.agentLimit)}),J("input")):(Dn({apiTier:g,quotas:ro}),J("settings"))},onClose:()=>J("settings")});case"input":return l.createElement(I,{flexDirection:"column",borderStyle:"round",borderColor:"white",padding:0,width:"100%"},l.createElement(I,{paddingX:1},l.createElement(S,{color:"white",bold:!0},"DATA CONFIGURATION")),Wo?.note&&l.createElement(I,{paddingX:1,marginBottom:1},l.createElement(S,{color:"gray",italic:!0},Wo.note)),l.createElement(I,{paddingX:1,flexDirection:"row"},l.createElement(S,{color:"white",bold:!0},Wo?.label," "),l.createElement(Ac,{value:Wo?.value||"",onChange:x=>At(g=>({...g,value:x})),onSubmit:async x=>{let{key:g,subKey:v,next:F}=Wo,C={...ro},_={};if(g==="quotas"){let B=v.toLowerCase().includes("limit")?parseInt(x)||0:x;C[v]=B,Qs(C),_.quotas=C}else if(g==="activeModel")Ee(x),_.activeModel=x;else if(g==="janitorModel")et(x),_.janitorModel=x;else if(g==="autoApproveCommands"||g==="autoDisallowCommands"||g==="alwaysAskCommands"){let B={...Nt,[g]:x.trim(),sandboxPreset:"Custom"};at(B),_.systemSettings=B}else if(g==="externalDataPath"){let B={...Nt,useExternalData:!0,externalDataPath:x.trim()};at(B),_.systemSettings=B,U(b=>[...b,{id:Date.now(),role:"system",text:"[EXTERNAL STORAGE] Flux Flow will use "+x.trim()+" for data after restart."}])}else if(g==="imageSettings"){let B=x.trim();if(B.startsWith("sk_")){let b={...re,apiKey:B};$e(b),_.imageSettings=b,U(L=>(z(L.length+1),[...L,{id:Date.now(),role:"system",text:"[IMAGE KEY] Custom API key saved successfully.",isMeta:!0}]))}else $e(b=>({...b,keyType:"Default"})),_.imageSettings={...re,keyType:"Default"},U(b=>(z(b.length+1),[...b,{id:Date.now(),role:"system",text:"[IMAGE KEY ERROR] API key must start with sk_. Key strategy reset to Default.",isMeta:!0}]))}else if(g==="providerKey"){let B=x.trim(),b=Wo.provider;await dr(b,B),he(b),ot(B),zs(B,{aiProvider:b,onIDEApproval:oe});let L="gemma-4-31b-it";b==="OpenRouter"?L="google/gemma-4-31b-it:free":b==="DeepSeek"?L="deepseek-v4-flash":b==="NVIDIA"&&(L="moonshotai/kimi-k2.6"),Ee(L),_.aiProvider=b,_.activeModel=L,U(R=>(z(R.length+1),[...R,{id:Date.now(),role:"system",text:`\u2705 ${b} API Key saved successfully! Model set to ${L}.`,isMeta:!0}]))}F?At(F(g==="quotas"?C:x)):(Dn({..._,apiTier:Mt,quotas:C,imageSettings:_.imageSettings||re}),At(null),J(Wo?.returnView||"settings"))}})),l.createElement(I,{paddingX:1,marginTop:1},l.createElement(S,{color:"gray",dimColor:!0,italic:!0},"(Press Enter to confirm selection)")));case"stats":return l.createElement(I,{flexDirection:"column",borderStyle:"round",borderColor:"grey",paddingX:3,paddingY:1,width:Math.min(100,(r?.columns||100)-2)},l.createElement(I,{marginBottom:1},l.createElement(S,{color:"white",bold:!0,underline:!0},"SESSION TELEMETRY")),l.createElement(I,{flexDirection:"column"},l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Session Duration:")),l.createElement(S,{color:"white"},ie(Date.now()-pa))),l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Agent Interactions:")),l.createElement(S,{color:"white"},Je)),l.createElement(I,{marginLeft:2},l.createElement(I,{width:23},l.createElement(S,{color:"grey"},"\xBB API Time:")),l.createElement(S,{color:"white"},ie(Is))),l.createElement(I,{marginLeft:2},l.createElement(I,{width:23},l.createElement(S,{color:"grey"},"\xBB Tool Time:")),l.createElement(S,{color:"white"},ie(ls))),l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Background Tasks:")),l.createElement(S,{color:"white"},Et)),l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Tokens Consumed:")),l.createElement(S,{color:"white"},eo(Tt))),l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Active Context:")),l.createElement(S,{color:"white"},eo(Xe.tokens))),Tt>0&&l.createElement(l.Fragment,null,l.createElement(I,{marginLeft:2},l.createElement(I,{width:23},l.createElement(S,{color:"grey"},"\xBB Input Tokens:")),l.createElement(S,{color:"white"},eo(Tt-Bt))),vt>0&&l.createElement(I,{marginLeft:4},l.createElement(I,{width:21},l.createElement(S,{color:"grey"},"\xBB Cached:")),l.createElement(S,{color:"white"},eo(vt))),Bt>0&&l.createElement(I,{marginLeft:2},l.createElement(I,{width:23},l.createElement(S,{color:"grey"},"\xBB Output Tokens:")),l.createElement(S,{color:"white"},eo(Bt)))),As>0&&l.createElement(l.Fragment,null,l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Images Made:")),l.createElement(S,{color:"white"},As)),l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Image Credits:")),l.createElement(S,{color:"white"},Number(((Hn||0)*1e3).toFixed(0))," credits"))),l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Code Changes (Sess):")),l.createElement(S,{color:"white"},l.createElement(S,{color:"green"},"+",Wr)," ",l.createElement(S,{color:"red"},"-",Yr))),l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Tool Calls (Sess):")),l.createElement(S,{color:"white"},ht+Jt+jo," ( "),l.createElement(S,{color:"green"},"\u2713 ",ht),l.createElement(S,{color:"white"}," "),l.createElement(S,{color:"yellow"},"\u2298 ",jo),l.createElement(S,{color:"white"}," "),l.createElement(S,{color:"red"},"\u2715 ",Jt),l.createElement(S,{color:"white"}," )"))),l.createElement(I,{flexDirection:"column",marginTop:1},l.createElement(S,{color:"white",bold:!0,underline:!0},"DAILY USAGE TRACKER"),l.createElement(I,{marginTop:1},l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Wall Time Today:")),l.createElement(S,{color:"white"},Ce(me?.duration||0))),l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Agent Interactions:")),l.createElement(S,{color:"white"},me?.agent||0)),l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Background Tasks:")),l.createElement(S,{color:"white"},me?.background||0)),l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Tokens Used Today:")),l.createElement(S,{color:"white"},eo(me?.tokens||0))),(me?.tokens||0)>0&&l.createElement(l.Fragment,null,l.createElement(I,{marginLeft:2},l.createElement(I,{width:23},l.createElement(S,{color:"grey"},"\xBB Input Tokens:")),l.createElement(S,{color:"white"},eo((me?.tokens||0)-(me?.candidateTokens||0)))),(me?.cachedTokens||0)>0&&l.createElement(I,{marginLeft:4},l.createElement(I,{width:21},l.createElement(S,{color:"grey"},"\xBB Cached:")),l.createElement(S,{color:"white"},eo(me.cachedTokens))),(me?.candidateTokens||0)>0&&l.createElement(I,{marginLeft:2},l.createElement(I,{width:23},l.createElement(S,{color:"grey"},"\xBB Output Tokens:")),l.createElement(S,{color:"white"},eo(me.candidateTokens)))),(me?.imageCalls?.length||0)>0&&l.createElement(l.Fragment,null,l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Images Made Today:")),l.createElement(S,{color:"white"},me.imageCalls.length)),l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Image Credits Today:")),l.createElement(S,{color:"white"},Number(((me.imageCalls.reduce((x,g)=>x+g.cost,0)||0)*1e3).toFixed(0))," credits"))),l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Code Changes Today:")),l.createElement(S,{color:"white"},l.createElement(S,{color:"green"},"+",me?.linesAdded||0)," ",l.createElement(S,{color:"red"},"-",me?.linesRemoved||0))),l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Tool Calls Today:")),l.createElement(S,{color:"white"},(me?.toolSuccess||0)+(me?.toolFailure||0)+(me?.toolDenied||0)," ( "),l.createElement(S,{color:"green"},"\u2713 ",me?.toolSuccess||0),l.createElement(S,{color:"white"}," "),l.createElement(S,{color:"yellow"},"\u2298 ",me?.toolDenied||0),l.createElement(S,{color:"white"}," "),l.createElement(S,{color:"red"},"\u2715 ",me?.toolFailure||0),l.createElement(S,{color:"white"}," )"))),l.createElement(S,{dimColor:!0,marginTop:1,italic:!0},"(Press ESC to return to chat)"));case"autoExecDanger":return l.createElement(I,{flexDirection:"column",borderStyle:"round",borderColor:"grey",paddingX:2,paddingY:1,width:"100%"},l.createElement(S,{color:"white",bold:!0,underline:!0},"SECURITY WARNING: YOLO MODE"),l.createElement(S,{marginTop:1},"Turning this ON allows the agent to execute terminal commands automatically without requiring your approval for each step."),l.createElement(S,{marginTop:1,color:"white"},"RISKS INVOLVED:"),l.createElement(S,null,"\u2022 The agent may execute destructive commands (rm -rf, etc.) by mistake unless specified in sandbox rules."),l.createElement(S,null,"\u2022 Unintended system changes if the agent hallucinates a path or command."),l.createElement(S,null,"\u2022 Reduced control over the agent's step-by-step decision making."),l.createElement(I,{marginTop:1},l.createElement(go,{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"&&at(g=>({...g,autoExec:!0})),J("settings")}})));case"externalDanger":return l.createElement(I,{flexDirection:"column",borderStyle:"round",borderColor:"grey",paddingX:2,paddingY:1,width:"100%"},l.createElement(S,{color:"white",bold:!0,underline:!0},"SECURITY WARNING: EXTERNAL WORKSPACE ACCESS"),l.createElement(S,{marginTop:1},"Turning this ON allows the agent to execute tools (Read/Write/Exec) outside of the current active workspace directory."),l.createElement(S,{marginTop:1,color:"white"},"RISKS INVOLVED:"),l.createElement(S,null,"\u2022 Access to sensitive system files (SSH keys, Browser data, etc.)"),l.createElement(S,null,"\u2022 Potential for accidental or malicious deletion of OS-critical files."),l.createElement(S,null,"\u2022 Unauthorized script execution across your entire file system."),l.createElement(I,{marginTop:1},l.createElement(go,{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"&&at(g=>({...g,allowExternalAccess:!0})),J("settings")}})));case"doubleDanger":return l.createElement(I,{flexDirection:"column",borderStyle:"round",borderColor:"white",paddingX:2,paddingY:1,width:"100%"},l.createElement(S,{color:"white",bold:!0,underline:!0},"CRITICAL SECURITY WARNING: COMBINED SYSTEM RISK"),l.createElement(S,{marginTop:1},"You are attempting to enable BOTH [YOLO Mode] and [External Workspace Access] simultaneously."),l.createElement(S,{marginTop:1,color:"red",bold:!0},"THIS IS NOT RECOMMENDED."),l.createElement(S,{marginTop:1,color:"white"},"THE CRITICAL RISK:"),l.createElement(S,null,"The agent will have the power to execute any command across your entire system WITHOUT your approval or supervision."),l.createElement(S,{color:"red",italic:!0,marginTop:1},"A single hallucination or error could result in full system wipe or data theft."),l.createElement(I,{marginTop:1},l.createElement(go,{title:"Final Confirmation",items:[{label:"I agree knowing the consequences",value:"on"},{label:"Keep Off",value:"off"}],onSelect:x=>{x.value==="on"&&at(g=>({...g,autoExec:!0,allowExternalAccess:!0})),J("settings")}})));case"key":return l.createElement(go,{title:"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"){ot(null),J("chat");let g=Fe(2);U(v=>[...v,{id:Date.now(),role:"system",text:"[ACTION] Flux waiting for new API Key..."}])}else x.value==="remove"?J("deleteKey"):J("chat")}});case"deleteKey":return l.createElement(I,{flexDirection:"column",borderStyle:"round",borderColor:"grey",paddingX:2,paddingY:1},(()=>{let x=Fe(2);return l.createElement(S,{color:"white",bold:!0},"DANGER: PURGE API KEY")})(),l.createElement(S,{marginTop:1},"This will permanently delete the saved API key from the project vault. You will need to enter it again to use Flux."),l.createElement(I,{marginTop:1},l.createElement(go,{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 Jr(),ot(null),J("chat");let g=Fe(2);U(v=>[...v,{id:Date.now(),role:"system",text:"[VAULT PURGED] API Key removed successfully."}])}else J("key")}})));case"exit":return null;case"ask":return l.createElement(I,{width:"100%"},l.createElement(za,{question:us?.question,options:us?.options,onResolve:x=>{us?.resolve&&us.resolve(x),tr(null),J("chat")}}));case"revert":return l.createElement(I,{width:"100%",alignItems:"center",justifyContent:"center"},l.createElement(ha,{prompts:wa,onSelect:async x=>{try{let g=await yt.rollbackToBefore(x);if(g.success){let{targetPrompt:v}=g;lc(je);let F=_e.findLastIndex(b=>b.role==="user"&&b.text&&(b.text.startsWith(v)||b.text.includes(v))),C=[..._e];F!==-1&&(C=_e.slice(0,F)),U(C),z(C.length),u(v),a(v.split(`
636
- `).length>2);let _=C.filter(b=>!String(b.id).startsWith("welcome")&&!b.isMeta);await kr(je,null,_);let B=Fe(2);U(b=>{let L=[...b,{id:"revert-ok-"+Date.now(),role:"system",text:"[ROLLBACK SUCCESSFUL] Reverted prompt loaded to input box.",isMeta:!0}];return z(L.length),L}),J("chat")}}catch(g){let v=Fe(2);U(F=>{let C=[...F,{id:"revert-err-"+Date.now(),role:"system",text:`[ROLLBACK ERROR] ${g.message}`,isMeta:!0}];return z(C.length),C}),J("chat")}},onClose:()=>J("chat")}));case"resume":return l.createElement(I,{width:"100%",alignItems:"center",justifyContent:"center"},l.createElement(la,{onSelect:async x=>{let g=await _o();if(g[x]){r.write("\x1B[2J\x1B[3J\x1B[H"),nn(x);let v=await Ir(x);zt.current=Tt-v.total,Se(v.total),Oe({tokens:v.context});let F=[...g[x].messages];F[0]?.text?.includes("\u2591\u2591\u2591\u2588\u2588\u2588")||F.unshift({id:"logo-"+Date.now(),role:"system",isLogo:!0,isMeta:!0}),U(F),J("chat"),U(_=>{let B=[..._,{id:"sys-"+Date.now(),role:"system",text:`SESSION RESUMED: [${x}]`,isMeta:!0}];return z(B.length),B})}},onDelete:async x=>await gi(x),onClose:()=>J("chat")}));case"memory":return l.createElement(I,{width:"100%",alignItems:"center",justifyContent:"center"},l.createElement(ua,{onClose:()=>J("chat")}));case"parserDownload":return l.createElement(I,{width:"100%",alignItems:"center",justifyContent:"center"},l.createElement(da,{onClose:()=>J("settings")}));case"profile":return l.createElement(mi,{initialData:wn,onSave:x=>{as(x),U(g=>[...g,{id:Date.now(),role:"system",text:`Profile updated: ${x.name} (${x.nickname})`}]),J("chat")},onCancel:()=>J("chat")});case"resolution":return l.createElement(I,{width:"100%",alignItems:"center",justifyContent:"center"},l.createElement(kd,{data:Z,onResolve:x=>{Qe(null),J("chat"),setTimeout(()=>{Vr(x,!0)},500)},onEdit:x=>{Qe(null),J("chat"),u(x)}}));case"approval":return l.createElement(I,{flexDirection:"column",borderStyle:"round",borderColor:"white",paddingX:2,paddingY:1,width:"100%"},l.createElement(S,{color:"white",bold:!0,underline:!0},"FILE WRITE PERMISSION"),l.createElement(S,{marginTop:1},"The agent is attempting to modify: ",l.createElement(S,{color:"cyan"},se(Xn?.args||"{}").path||"Unknown File")),Qo()?l.createElement(I,{marginTop:1,paddingX:1},l.createElement(S,{color:"cyan",italic:!0},"\u26A1\uFE0F FluxFlow Companion is active. Review the changes in your editor.")):l.createElement(I,{marginTop:1,borderStyle:"single",borderColor:"#333",paddingX:1,flexDirection:"column"},l.createElement(S,{color:"gray"},"--- PROPOSED CONTENT ---"),(()=>{let x=se(Xn?.args||"{}"),g=[],v=new Set;if(Object.keys(x).forEach(_=>{let B=_.match(/^(replaceContent|newContent|content_to_replace|content_to_add|TargetContent|ReplacementContent|replacementContent)(\d+)?$/);if(B){let b=B[2]?parseInt(B[2]):1;v.add(b)}}),Array.from(v).sort((_,B)=>_-B).forEach(_=>{let B,b;_===1?(B=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):(B=x[`replaceContent${_}`]??x[`content_to_replace${_}`]??null,b=x[`newContent${_}`]??x[`content_to_add${_}`]??null),(B!==null||b!==null)&&g.push({replace:B,new:b})}),g.length>0)return l.createElement(I,{flexDirection:"column",marginTop:1},g.map((_,B)=>{let b=_.replace!==null,L=_.new!==null;return l.createElement(I,{key:B,flexDirection:"column",marginTop:B>0?1:0},g.length>1&&l.createElement(S,{color:"gray"},"Block ",B+1,":"),b&&l.createElement(I,null,l.createElement(S,{color:"red",wrap:"anywhere",bold:!0},"- ",_.replace)),L&&l.createElement(I,{marginTop:0},l.createElement(S,{color:"green",wrap:"anywhere",bold:!0},"+ ",_.new.replace(/\[\/n\]?/g,"\\n"))))}));let C=x.content||x.ReplacementContent||x.content_to_add||x.replacementContent||x.newContent||null;return l.createElement(S,{color:"white",wrap:"anywhere"},(C?C.replace(/\[\/n\]?/g,"\\n"):null)||"Updating file content...")})()),l.createElement(I,{marginTop:1},l.createElement(go,{title:"Action Required",items:[{label:"Accept this time",value:"allow"},{label:"Accept for this session",value:"always"},{label:"Don't accept",value:"deny"}],onSelect:x=>{x.value==="always"&&Ds(!0);let g=x.value==="deny"?"deny":"allow";Xn.resolve(g),cs(null),J("chat")}})));case"updateManager":return l.createElement(go,{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"){J("settings");return}x.value==="custom"?(At({label:"Enter Custom Update Command (Global install recommended):",key:"customUpdateCommand",value:Nt.customUpdateCommand,next:g=>(at(v=>({...v,updateManager:"custom",customUpdateCommand:g})),null)}),J("input")):(at(g=>({...g,updateManager:x.value})),J("settings"))}});case"update":return l.createElement(gc,{latest:le,current:Uo,settings:Nt,onClose:()=>J("chat"),onSuccess:()=>{U(x=>(z(x.length+1),[...x,{id:"update-success-"+Date.now(),role:"system",text:`**[UPDATE COMPLETED]** Flux Flow successfully updated to v${le}.
637
- **Restart to see changes.**`,isMeta:!0}])),J("chat")},onUpdateSettings:x=>{J("updateManager")}});case"terminalApproval":return l.createElement(I,{flexDirection:"column",borderStyle:"round",borderColor:"white",paddingX:2,paddingY:1,width:"100%"},l.createElement(S,{color:"white",bold:!0,underline:!0},"TERMINAL COMMAND OVERSIGHT"),l.createElement(I,{marginTop:1},l.createElement(S,null,"Agent requested to run: ",l.createElement(S,{color:"yellow",bold:!0},se(Xn?.args||"{}").command||"Unknown Command"))),l.createElement(I,{marginTop:1},l.createElement(go,{title:"Risk Assessment Required",items:[{label:"Run",value:"allow"},{label:"Deny",value:"deny"}],onSelect:x=>{Xn.resolve(x.value),cs(null),J("chat")}})));default:return l.createElement(I,{flexDirection:"column",marginTop:1,flexShrink:0,width:"100%"},l.createElement(I,{paddingX:1,marginBottom:0,justifyContent:"space-between",width:"100%"},l.createElement(I,null,We?l.createElement(I,null,l.createElement(S,{color:"gray",bold:!0,italic:!0},We)):l.createElement(S,{color:"gray",italic:!0},i.length>0&&qn?"Press ESC again to clear input":"Waiting for input...")),l.createElement(I,null,St&&l.createElement(S,{color:"gray",italic:!0},St," "),l.createElement(S,{color:"gray",bold:!0},"[ "),l.createElement(S,{color:"white"},gt||Ve),l.createElement(S,{color:"gray",bold:!0}," ]"))),l.createElement(I,{flexDirection:"column",width:"100%"},l.createElement(I,{width:"100%",height:1,overflow:"hidden"},l.createElement(S,{color:"#555555"},"\u2584".repeat(Math.max(1,p.columns)))),l.createElement(I,{backgroundColor:"#555555",paddingX:1,paddingY:0,width:"100%",flexDirection:"column"},l.createElement(I,{flexDirection:"column",width:"100%"},l.createElement(I,{flexDirection:"row",width:"100%",paddingY:0},l.createElement(I,{flexShrink:0,width:4},l.createElement(S,{color:"white",bold:!0},fo||Kn?"\u2726 ":" \u276F ")),l.createElement(I,{flexGrow:1},l.createElement(I,{flexGrow:1,position:"relative"},i===""&&l.createElement(I,{position:"absolute",paddingLeft:0},pt&&!Wt?l.createElement(S,{color:"yellow"},xt?" Terminal is waiting for user input. Press TAB to interact":" Press TAB to interact with terminal..."):pt&&Wt?l.createElement(S,{color:"yellow",bold:!0}," [ TERMINAL FOCUSED ] Type to interact, press TAB to exit..."):qn===1?l.createElement(S,{color:"white",bold:!0}," Press ESC again to ",i.length>0?"clear input":"revert codebase to checkpoint","..."):l.createElement(S,{color:"#cccccc"},Ls?" Press ESC again to cancel the request.":Kn?" Compressing session history, please wait...":fo?" Enter a prompt to steer the agent.":` Send message, @file or /cmd ... (${Gn.shortcut} for newline)`)),l.createElement(Oa,{key:`input-${f}`,focus:!Wt&&!Kn,showCursor:mo&&!Kn,lastFocusEventTime:ct.current,value:i,textStyle:{bold:!0},columns:p.columns,onChange:x=>{let g=x.replace(/\r\n/g,`
635
+ `)}`;return[...K,{id:"term-"+Date.now(),role:"system",text:Le,isTerminalRecord:!0}]}),sn(null),Ot(!1),Dt("")},onToolResult:(K,we)=>{if(K==="success"){if(ut(ge=>ge+1),we==="generate_image"){Gr(jt=>jt+1);let Le={Low:.001,"Low-High":.002,Medium:.008,"Medium-High":.01,High:.045,Ultra:.0488,Premium:.1}[re.quality]||.002;Kr(jt=>jt+Le)}}else K==="denied"?Hr(ge=>ge+1):Rt(ge=>ge+1)},onToolApproval:async(K,we)=>{let ge=Xr||Nt.autoExec;if(K==="exec_command"){let{command:Le}=se(we||"{}");return ge||Le&&/^(echo|ls|dir|pwd|cd|git status|git log|git diff|type|cat|help)\b/i.test(Le.trim())?"allow":new Promise(ke=>{cs({tool:K,args:we,resolve:ke}),J("terminalApproval")})}return ge?"allow":new Promise(Le=>{cs({tool:K,args:we,resolve:Le}),J("approval")})},onAskUser:async(K,we)=>new Promise(ge=>{tr({question:K,options:we,resolve:Le=>{U(jt=>[...jt,{id:"ask-"+Date.now(),role:"system",text:`\u{1F4AC} **Ask User**
636
+ Selection: ${Le}`,isAskRecord:!0}]),ge(Le)}}),J("ask")})},async()=>{if(ve.current){let K=ve.current;return ds(null),ve.current=null,U(we=>{let ge=[...we].reverse().findIndex(Le=>Le.text?.includes("[STEERING HINT: QUEUED]"));if(ge!==-1){let Le=we.length-1-ge,jt=[...we];return jt[Le]={...jt[Le],text:jt[Le].text.replace("[STEERING HINT: QUEUED]","[STEERING HINT: INJECTED]"),color:"cyan"},jt}return we}),K}return null},Uo),de=!1,ce=null,xe=null,ye=!1,Re=!1,Be=!1,Yt=!1,wo=0,dt=null,an=/\[?\s*turn\s*:\s*.*?\s*\]?/gi;for await(let K of Ne){if(R&&K.type==="text"&&(L=Date.now(),R=!1),K.type==="status"){pe(K.content),Qo()&&_r(K.content);continue}if(K.type==="status_history"){pe(K.content),Qo()&&_r(K.content),U(ke=>[...ke,{id:"condense-"+Date.now(),role:"system",text:`[SYSTEM] ${K.content}`,isMeta:!0}]);continue}if(K.type==="summary_injected"){U(ke=>ke.map(Ie=>Ie.id===K.content.id?{...Ie,fullText:K.content.text}:Ie));continue}if(K.type==="spinner"){En(K.content);continue}if(K.type==="model_update"){X(K.content);continue}if(K.type==="turn_reset"){ce=null,xe=null,de=!1,ye=!1,Re=!1,Yt=!1,Be=!1;continue}if(K.type==="interactive_turn_finished"){Os(!1),Qo()&&_r(null),b=!0,ic({profile:wn,thinkingLevel:q,mode:d,janitorModel:ft,chatId:je,systemSettings:Nt,sessionStats:Ke,aiProvider:N,apiKey:ze},K.data.agentText,K.data.fullAgentTextRaw,K.data.history,{onMemoryUpdated:()=>U(ke=>{let Ie=[...ke];return Ie.length>0&&(Ie[Ie.length-1].memoryUpdated=!0),Ie}),onBackgroundIncrement:()=>Yn(ke=>ke+1)});continue}if(K.type==="visual_feedback"){U(ke=>[...ke,{id:"feedback-"+Date.now(),role:"system",text:K.content,isVisualFeedback:!0}]);continue}if(K.type==="exec_start")continue;if(K.type==="liveTokens"){Oe({tokens:K.content});continue}if(K.type==="usage"){let ke=K.content.totalTokenCount||0,Ie=K.content.cachedContentTokenCount||0,Ue=K.content.candidatesTokenCount||0;Oe({tokens:ke}),Tn(st=>st+ke),Ie>0&&Yo(st=>st+Ie),Ue>0&&jn(st=>st+Ue),Te(st=>st+1);continue}if(K.type==="tool_time"){xa(ke=>ke+K.content);continue}if(K.type==="tool_result"){if(U(ke=>[...ke,{id:"tool-"+Date.now(),role:"system",text:K.content,fullText:K.aiContent,binaryPart:K.binaryPart,toolName:K.toolName}]),K.toolName==="update_file"&&K.aiContent){let ke=K.aiContent.split(`
637
+ `),Ie=0,Ue=0,st=!1;for(let Ge of ke){if(Ge.includes("[DIFF_START]")){st=!0;continue}if(Ge.includes("[DIFF_END]")){st=!1;continue}st&&(/^\+\d+/.test(Ge)?Ie++:/^\-\d+/.test(Ge)&&Ue++)}Wr+=Ie,Yr+=Ue,Eo("linesAdded",Ie),Eo("linesRemoved",Ue)}else if(K.toolName==="write_file"&&K.aiContent){let ke=K.aiContent.match(/- Stats: \[(\d+) lines/),Ie=ke?parseInt(ke[1]):0,Ue=0;if(K.aiContent.includes("Old File contents:")){let st=K.aiContent.split(`
638
+ `),Ge=!1;for(let Ze of st){if(Ze.includes("Old File contents:")){Ge=!0;continue}Ge&&(Ze.trim()===""?Ge=!1:/^\d+ \|/.test(Ze)&&Ue++)}}Wr+=Ie,Yr+=Ue,Eo("linesAdded",Ie),Eo("linesRemoved",Ue)}continue}let we=K.content,ge=we.toLowerCase();if(we.includes("```")&&(ye=!ye),ge.includes("tool:functions.")&&(Re=!0,wo=0,dt=null,we.includes("[tool:functions.")&&(wo=0)),Re){for(let ke=0;ke<we.length;ke++){let Ie=we[ke];!dt&&(Ie==="'"||Ie==='"'||Ie==="`")?dt=Ie:dt&&Ie===dt&&we[ke-1]!=="\\"&&(dt=null),dt||(Ie==="("||Ie==="["?wo++:(Ie===")"||Ie==="]")&&wo--)}wo<=0&&!dt&&(Re=!1)}if((ge.includes("<think")||ge.includes("<thought"))&&(!de&&!ye&&!Re&&!Be)&&(de=!0,Be=!0,we=we.replace(/<(think|thought)>[\s\S]*?<\/(think|thought)>/gi,"").replace(/<(think|thought)>/gi,""),ce="think-"+Date.now(),U(ke=>[...ke,{id:ce,role:"think",text:"",isStreaming:!0,startTime:Date.now()}])),(ge.includes("</think>")||ge.includes("</thought>"))&&ce){let ke=we.split(/<\/(think|thought)>/gi),Ie=ke[0]||"",Ue=ke.slice(2).join("").replace(/<\/?(think|thought)>/gi,"");U(st=>{let Ge=st.map(Ze=>{if(Ze.id===ce&&typeof Ze.id=="string"){let Xo=Ze.startTime||parseInt(Ze.id.split("-")[1])||Date.now(),Cn=Date.now()-Xo;return{...Ze,text:Ze.text+Ie,isStreaming:!1,duration:Cn}}return Ze});return de=!1,xe="agent-"+Date.now(),[...Ge,{id:xe,role:"agent",text:Ue,isStreaming:!0}]});continue}if(de&&ce)U(ke=>{let Ie=!1,Ue="",st=ke.map(Ge=>{if(Ge.id===ce){let Ze=Ge.text+we;if(Ze.toLowerCase().includes("</think>")){Ie=!0;let Xo=Ze.split(/<\/think>/gi);Ue=Xo.slice(1).join("</think>")||"";let Cn=Ge.startTime||parseInt(Ge.id.split("-")[1])||Date.now(),Qn=Date.now()-Cn;return{...Ge,text:Xo[0],isStreaming:!1,duration:Qn}}return{...Ge,text:Ze,isStreaming:!0}}return Ge});return Ie?(de=!1,xe="agent-"+Date.now(),[...st,{id:xe,role:"agent",text:Ue.replace(/<\/?(think|thought)>/gi,""),isStreaming:!0}]):st});else if(!de){let ke=we.toLowerCase();!Yt&&ke.includes("tool:functions.")&&(Yt=!0),xe?U(Ie=>Ie.map(Ue=>Ue.id===xe?{...Ue,text:Ue.text+we,isStreaming:!0}:Ue)):(xe="agent-"+Date.now(),U(Ie=>[...Ie,{id:xe,role:"agent",text:we,isStreaming:!0}]))}}let ao=Date.now();Ms(K=>K+(ao-L))}catch(V){U(ne=>(z(ne.length+1),[...ne,{id:"error-"+Date.now(),role:"system",text:`\u274C ERROR: ${V.message}`}]))}finally{if(Os(!1),pe(null),b||process.stdout.isTTY&&(process.stdout.write("\x1B]0;FluxFlow | Idle\x07"),process.stdout.write("\x1B]633;P;TerminalTitle=FluxFlow | Idle\x07")),ve.current){Qe(ve.current),ds(null);let V=ve.current;ve.current=null,U(ne=>{let Ne=[...ne],de=Ne.reverse().find(ce=>ce.text?.includes("[STEERING HINT: QUEUED]"));return de&&(de.text=de.text.replace("[STEERING HINT: QUEUED]","[STEERING HINT: FINISHED_TURN]")),Ne.reverse()}),J("resolution")}U(V=>{let ne=Date.now()-L,Ne=!1,de=[...V].reverse().map(xe=>{let ye=xe.isStreaming?{...xe,isStreaming:!1}:xe;return!Ne&&ye.role==="agent"&&(Ne=!0,ye={...ye,workedDuration:ne}),ye}).reverse(),ce=de.filter(xe=>!String(xe.id).startsWith("welcome")&&!xe.isMeta);return kr(je,null,ce),z(de.length),de})}})()}u(""),a(!1)}},Lt=Js(()=>{if(i.startsWith("/")&&!E){let v=i.split(" "),F=v[v.length-1].toLowerCase();if(v.length===1){let _=F.startsWith("/")?F.slice(1):F;return Fs.filter(B=>(B.cmd.startsWith("/")?B.cmd.slice(1):B.cmd).toLowerCase().includes(_))}let C=Fs;for(let _=0;_<v.length-1;_++){let B=v[_].toLowerCase(),b=C.find(L=>L.cmd.toLowerCase()===B);if(b&&b.subs)C=b.subs;else return[]}return C.filter(_=>_.cmd.toLowerCase().includes(F))}let x=i.split(" "),g=x[x.length-1];if(g&&g.startsWith("@")&&!E){let v=g.indexOf("#"),F=v!==-1,C=F?g.substring(1,v).toLowerCase():g.slice(1).toLowerCase(),_=F?g.substring(v):"";return Md(process.cwd()).filter(L=>L.name.toLowerCase().includes(C)).map(L=>{let R=L.relativePath.replace(/\\/g,"/");return{cmd:"@["+(R.startsWith(".")?R:"./"+R)+_+"]",desc:L.relativePath}})}return[]},[i,E]);no(()=>{w(0)},[Lt]);let nr=()=>{switch(qt){case"settings":return l.createElement(ui,{systemSettings:Nt,setSystemSettings:at,apiTier:Mt,setActiveView:J,setInputConfig:At,saveSettings:Dn,quotas:ro,setMessages:U,aiProvider:N});case"selectProvider":return l.createElement(go,{title:"SELECT AI PROVIDER",items:[{label:"Google (Free/Paid)",value:"Google"},{label:"DeepSeek (Paid)",value:"DeepSeek"},{label:"OpenRouter (Free/Paid) [EXPERIMENTAL]",value:"OpenRouter"},{label:"NVIDIA (Free/Paid)",value:"NVIDIA"},{label:"Back",value:"settings"}],onSelect:async x=>{if(x.value==="settings"||x.value==="Back"){J("settings");return}let g=x.value,v=await ur(g);if(v){he(g),ot(v),zs(v,{aiProvider:g,onIDEApproval:oe});let F="gemma-4-31b-it";g==="OpenRouter"?F="google/gemma-4-31b-it:free":g==="DeepSeek"?F="deepseek-v4-flash":g==="NVIDIA"&&(F="moonshotai/kimi-k2.6"),Ee(F),Dn({aiProvider:g,activeModel:F,apiTier:Mt,quotas:ro}),U(C=>[...C,{role:"system",text:`\u2705 Switched to ${g}! Key loaded from Vault. Model set to ${F}.`,isMeta:!0}]),J("settings")}else At({label:`Enter ${g} API Key:`,key:"providerKey",provider:g,value:"",returnView:"settings"}),J("input")},onClose:()=>J("settings")});case"apiTier":return l.createElement(go,{title:l.createElement(S,null,"SELECT YOUR CURRENT API TIER BASED ON ",l.createElement(S,{color:"cyan",underline:!0,bold:!0},"\x1B]8;;https://aistudio.google.com/projects\x07AI STUDIO\x1B]8;;\x07"),". (CURRENT: ",Mt.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"){J("settings");return}let g=x.value;so(g),g==="Paid"?(At({label:"Enter Agent daily budget (requests made):",key:"quotas",subKey:"agentLimit",value:String(ro.agentLimit)}),J("input")):(Dn({apiTier:g,quotas:ro}),J("settings"))},onClose:()=>J("settings")});case"input":return l.createElement(I,{flexDirection:"column",borderStyle:"round",borderColor:"white",padding:0,width:"100%"},l.createElement(I,{paddingX:1},l.createElement(S,{color:"white",bold:!0},"DATA CONFIGURATION")),Wo?.note&&l.createElement(I,{paddingX:1,marginBottom:1},l.createElement(S,{color:"gray",italic:!0},Wo.note)),l.createElement(I,{paddingX:1,flexDirection:"row"},l.createElement(S,{color:"white",bold:!0},Wo?.label," "),l.createElement(Ac,{value:Wo?.value||"",onChange:x=>At(g=>({...g,value:x})),onSubmit:async x=>{let{key:g,subKey:v,next:F}=Wo,C={...ro},_={};if(g==="quotas"){let B=v.toLowerCase().includes("limit")?parseInt(x)||0:x;C[v]=B,Qs(C),_.quotas=C}else if(g==="activeModel")Ee(x),_.activeModel=x;else if(g==="janitorModel")et(x),_.janitorModel=x;else if(g==="autoApproveCommands"||g==="autoDisallowCommands"||g==="alwaysAskCommands"){let B={...Nt,[g]:x.trim(),sandboxPreset:"Custom"};at(B),_.systemSettings=B}else if(g==="externalDataPath"){let B={...Nt,useExternalData:!0,externalDataPath:x.trim()};at(B),_.systemSettings=B,U(b=>[...b,{id:Date.now(),role:"system",text:"[EXTERNAL STORAGE] Flux Flow will use "+x.trim()+" for data after restart."}])}else if(g==="imageSettings"){let B=x.trim();if(B.startsWith("sk_")){let b={...re,apiKey:B};$e(b),_.imageSettings=b,U(L=>(z(L.length+1),[...L,{id:Date.now(),role:"system",text:"[IMAGE KEY] Custom API key saved successfully.",isMeta:!0}]))}else $e(b=>({...b,keyType:"Default"})),_.imageSettings={...re,keyType:"Default"},U(b=>(z(b.length+1),[...b,{id:Date.now(),role:"system",text:"[IMAGE KEY ERROR] API key must start with sk_. Key strategy reset to Default.",isMeta:!0}]))}else if(g==="providerKey"){let B=x.trim(),b=Wo.provider;await dr(b,B),he(b),ot(B),zs(B,{aiProvider:b,onIDEApproval:oe});let L="gemma-4-31b-it";b==="OpenRouter"?L="google/gemma-4-31b-it:free":b==="DeepSeek"?L="deepseek-v4-flash":b==="NVIDIA"&&(L="moonshotai/kimi-k2.6"),Ee(L),_.aiProvider=b,_.activeModel=L,U(R=>(z(R.length+1),[...R,{id:Date.now(),role:"system",text:`\u2705 ${b} API Key saved successfully! Model set to ${L}.`,isMeta:!0}]))}F?At(F(g==="quotas"?C:x)):(Dn({..._,apiTier:Mt,quotas:C,imageSettings:_.imageSettings||re}),At(null),J(Wo?.returnView||"settings"))}})),l.createElement(I,{paddingX:1,marginTop:1},l.createElement(S,{color:"gray",dimColor:!0,italic:!0},"(Press Enter to confirm selection)")));case"stats":return l.createElement(I,{flexDirection:"column",borderStyle:"round",borderColor:"grey",paddingX:3,paddingY:1,width:Math.min(100,(r?.columns||100)-2)},l.createElement(I,{marginBottom:1},l.createElement(S,{color:"white",bold:!0,underline:!0},"SESSION TELEMETRY")),l.createElement(I,{flexDirection:"column"},l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Session Duration:")),l.createElement(S,{color:"white"},ie(Date.now()-pa))),l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Agent Interactions:")),l.createElement(S,{color:"white"},Je)),l.createElement(I,{marginLeft:2},l.createElement(I,{width:23},l.createElement(S,{color:"grey"},"\xBB API Time:")),l.createElement(S,{color:"white"},ie(Is))),l.createElement(I,{marginLeft:2},l.createElement(I,{width:23},l.createElement(S,{color:"grey"},"\xBB Tool Time:")),l.createElement(S,{color:"white"},ie(ls))),l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Background Tasks:")),l.createElement(S,{color:"white"},Et)),l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Tokens Consumed:")),l.createElement(S,{color:"white"},eo(Tt))),l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Active Context:")),l.createElement(S,{color:"white"},eo(Ke.tokens))),Tt>0&&l.createElement(l.Fragment,null,l.createElement(I,{marginLeft:2},l.createElement(I,{width:23},l.createElement(S,{color:"grey"},"\xBB Input Tokens:")),l.createElement(S,{color:"white"},eo(Tt-Bt))),vt>0&&l.createElement(I,{marginLeft:4},l.createElement(I,{width:21},l.createElement(S,{color:"grey"},"\xBB Cached:")),l.createElement(S,{color:"white"},eo(vt))),Bt>0&&l.createElement(I,{marginLeft:2},l.createElement(I,{width:23},l.createElement(S,{color:"grey"},"\xBB Output Tokens:")),l.createElement(S,{color:"white"},eo(Bt)))),As>0&&l.createElement(l.Fragment,null,l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Images Made:")),l.createElement(S,{color:"white"},As)),l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Image Credits:")),l.createElement(S,{color:"white"},Number(((Hn||0)*1e3).toFixed(0))," credits"))),l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Code Changes (Sess):")),l.createElement(S,{color:"white"},l.createElement(S,{color:"green"},"+",Wr)," ",l.createElement(S,{color:"red"},"-",Yr))),l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Tool Calls (Sess):")),l.createElement(S,{color:"white"},ht+Jt+jo," ( "),l.createElement(S,{color:"green"},"\u2713 ",ht),l.createElement(S,{color:"white"}," "),l.createElement(S,{color:"yellow"},"\u2298 ",jo),l.createElement(S,{color:"white"}," "),l.createElement(S,{color:"red"},"\u2715 ",Jt),l.createElement(S,{color:"white"}," )"))),l.createElement(I,{flexDirection:"column",marginTop:1},l.createElement(S,{color:"white",bold:!0,underline:!0},"DAILY USAGE TRACKER"),l.createElement(I,{marginTop:1},l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Wall Time Today:")),l.createElement(S,{color:"white"},Ce(me?.duration||0))),l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Agent Interactions:")),l.createElement(S,{color:"white"},me?.agent||0)),l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Background Tasks:")),l.createElement(S,{color:"white"},me?.background||0)),l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Tokens Used Today:")),l.createElement(S,{color:"white"},eo(me?.tokens||0))),(me?.tokens||0)>0&&l.createElement(l.Fragment,null,l.createElement(I,{marginLeft:2},l.createElement(I,{width:23},l.createElement(S,{color:"grey"},"\xBB Input Tokens:")),l.createElement(S,{color:"white"},eo((me?.tokens||0)-(me?.candidateTokens||0)))),(me?.cachedTokens||0)>0&&l.createElement(I,{marginLeft:4},l.createElement(I,{width:21},l.createElement(S,{color:"grey"},"\xBB Cached:")),l.createElement(S,{color:"white"},eo(me.cachedTokens))),(me?.candidateTokens||0)>0&&l.createElement(I,{marginLeft:2},l.createElement(I,{width:23},l.createElement(S,{color:"grey"},"\xBB Output Tokens:")),l.createElement(S,{color:"white"},eo(me.candidateTokens)))),(me?.imageCalls?.length||0)>0&&l.createElement(l.Fragment,null,l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Images Made Today:")),l.createElement(S,{color:"white"},me.imageCalls.length)),l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Image Credits Today:")),l.createElement(S,{color:"white"},Number(((me.imageCalls.reduce((x,g)=>x+g.cost,0)||0)*1e3).toFixed(0))," credits"))),l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Code Changes Today:")),l.createElement(S,{color:"white"},l.createElement(S,{color:"green"},"+",me?.linesAdded||0)," ",l.createElement(S,{color:"red"},"-",me?.linesRemoved||0))),l.createElement(I,null,l.createElement(I,{width:25},l.createElement(S,{color:"blue"},"Tool Calls Today:")),l.createElement(S,{color:"white"},(me?.toolSuccess||0)+(me?.toolFailure||0)+(me?.toolDenied||0)," ( "),l.createElement(S,{color:"green"},"\u2713 ",me?.toolSuccess||0),l.createElement(S,{color:"white"}," "),l.createElement(S,{color:"yellow"},"\u2298 ",me?.toolDenied||0),l.createElement(S,{color:"white"}," "),l.createElement(S,{color:"red"},"\u2715 ",me?.toolFailure||0),l.createElement(S,{color:"white"}," )"))),l.createElement(S,{dimColor:!0,marginTop:1,italic:!0},"(Press ESC to return to chat)"));case"autoExecDanger":return l.createElement(I,{flexDirection:"column",borderStyle:"round",borderColor:"grey",paddingX:2,paddingY:1,width:"100%"},l.createElement(S,{color:"white",bold:!0,underline:!0},"SECURITY WARNING: YOLO MODE"),l.createElement(S,{marginTop:1},"Turning this ON allows the agent to execute terminal commands automatically without requiring your approval for each step."),l.createElement(S,{marginTop:1,color:"white"},"RISKS INVOLVED:"),l.createElement(S,null,"\u2022 The agent may execute destructive commands (rm -rf, etc.) by mistake unless specified in sandbox rules."),l.createElement(S,null,"\u2022 Unintended system changes if the agent hallucinates a path or command."),l.createElement(S,null,"\u2022 Reduced control over the agent's step-by-step decision making."),l.createElement(I,{marginTop:1},l.createElement(go,{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"&&at(g=>({...g,autoExec:!0})),J("settings")}})));case"externalDanger":return l.createElement(I,{flexDirection:"column",borderStyle:"round",borderColor:"grey",paddingX:2,paddingY:1,width:"100%"},l.createElement(S,{color:"white",bold:!0,underline:!0},"SECURITY WARNING: EXTERNAL WORKSPACE ACCESS"),l.createElement(S,{marginTop:1},"Turning this ON allows the agent to execute tools (Read/Write/Exec) outside of the current active workspace directory."),l.createElement(S,{marginTop:1,color:"white"},"RISKS INVOLVED:"),l.createElement(S,null,"\u2022 Access to sensitive system files (SSH keys, Browser data, etc.)"),l.createElement(S,null,"\u2022 Potential for accidental or malicious deletion of OS-critical files."),l.createElement(S,null,"\u2022 Unauthorized script execution across your entire file system."),l.createElement(I,{marginTop:1},l.createElement(go,{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"&&at(g=>({...g,allowExternalAccess:!0})),J("settings")}})));case"doubleDanger":return l.createElement(I,{flexDirection:"column",borderStyle:"round",borderColor:"white",paddingX:2,paddingY:1,width:"100%"},l.createElement(S,{color:"white",bold:!0,underline:!0},"CRITICAL SECURITY WARNING: COMBINED SYSTEM RISK"),l.createElement(S,{marginTop:1},"You are attempting to enable BOTH [YOLO Mode] and [External Workspace Access] simultaneously."),l.createElement(S,{marginTop:1,color:"red",bold:!0},"THIS IS NOT RECOMMENDED."),l.createElement(S,{marginTop:1,color:"white"},"THE CRITICAL RISK:"),l.createElement(S,null,"The agent will have the power to execute any command across your entire system WITHOUT your approval or supervision."),l.createElement(S,{color:"red",italic:!0,marginTop:1},"A single hallucination or error could result in full system wipe or data theft."),l.createElement(I,{marginTop:1},l.createElement(go,{title:"Final Confirmation",items:[{label:"I agree knowing the consequences",value:"on"},{label:"Keep Off",value:"off"}],onSelect:x=>{x.value==="on"&&at(g=>({...g,autoExec:!0,allowExternalAccess:!0})),J("settings")}})));case"key":return l.createElement(go,{title:"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"){ot(null),J("chat");let g=Fe(2);U(v=>[...v,{id:Date.now(),role:"system",text:"[ACTION] Flux waiting for new API Key..."}])}else x.value==="remove"?J("deleteKey"):J("chat")}});case"deleteKey":return l.createElement(I,{flexDirection:"column",borderStyle:"round",borderColor:"grey",paddingX:2,paddingY:1},(()=>{let x=Fe(2);return l.createElement(S,{color:"white",bold:!0},"DANGER: PURGE API KEY")})(),l.createElement(S,{marginTop:1},"This will permanently delete the saved API key from the project vault. You will need to enter it again to use Flux."),l.createElement(I,{marginTop:1},l.createElement(go,{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 Jr(),ot(null),J("chat");let g=Fe(2);U(v=>[...v,{id:Date.now(),role:"system",text:"[VAULT PURGED] API Key removed successfully."}])}else J("key")}})));case"exit":return null;case"ask":return l.createElement(I,{width:"100%"},l.createElement(za,{question:us?.question,options:us?.options,onResolve:x=>{us?.resolve&&us.resolve(x),tr(null),J("chat")}}));case"revert":return l.createElement(I,{width:"100%",alignItems:"center",justifyContent:"center"},l.createElement(ha,{prompts:wa,onSelect:async x=>{try{let g=await yt.rollbackToBefore(x);if(g.success){let{targetPrompt:v}=g;lc(je);let F=_e.findLastIndex(b=>b.role==="user"&&b.text&&(b.text.startsWith(v)||b.text.includes(v))),C=[..._e];F!==-1&&(C=_e.slice(0,F)),U(C),z(C.length),u(v),a(v.split(`
639
+ `).length>2);let _=C.filter(b=>!String(b.id).startsWith("welcome")&&!b.isMeta);await kr(je,null,_);let B=Fe(2);U(b=>{let L=[...b,{id:"revert-ok-"+Date.now(),role:"system",text:"[ROLLBACK SUCCESSFUL] Reverted prompt loaded to input box.",isMeta:!0}];return z(L.length),L}),J("chat")}}catch(g){let v=Fe(2);U(F=>{let C=[...F,{id:"revert-err-"+Date.now(),role:"system",text:`[ROLLBACK ERROR] ${g.message}`,isMeta:!0}];return z(C.length),C}),J("chat")}},onClose:()=>J("chat")}));case"resume":return l.createElement(I,{width:"100%",alignItems:"center",justifyContent:"center"},l.createElement(la,{onSelect:async x=>{let g=await _o();if(g[x]){r.write("\x1B[2J\x1B[3J\x1B[H"),nn(x);let v=await Ir(x);zt.current=Tt-v.total,Se(v.total),Oe({tokens:v.context});let F=[...g[x].messages];F[0]?.text?.includes("\u2591\u2591\u2591\u2588\u2588\u2588")||F.unshift({id:"logo-"+Date.now(),role:"system",isLogo:!0,isMeta:!0}),U(F),J("chat"),U(_=>{let B=[..._,{id:"sys-"+Date.now(),role:"system",text:`SESSION RESUMED: [${x}]`,isMeta:!0}];return z(B.length),B})}},onDelete:async x=>await gi(x),onClose:()=>J("chat")}));case"memory":return l.createElement(I,{width:"100%",alignItems:"center",justifyContent:"center"},l.createElement(ua,{onClose:()=>J("chat")}));case"parserDownload":return l.createElement(I,{width:"100%",alignItems:"center",justifyContent:"center"},l.createElement(da,{onClose:()=>J("settings")}));case"profile":return l.createElement(mi,{initialData:wn,onSave:x=>{as(x),U(g=>[...g,{id:Date.now(),role:"system",text:`Profile updated: ${x.name} (${x.nickname})`}]),J("chat")},onCancel:()=>J("chat")});case"resolution":return l.createElement(I,{width:"100%",alignItems:"center",justifyContent:"center"},l.createElement(kd,{data:Z,onResolve:x=>{Qe(null),J("chat"),setTimeout(()=>{Vr(x,!0)},500)},onEdit:x=>{Qe(null),J("chat"),u(x)}}));case"approval":return l.createElement(I,{flexDirection:"column",borderStyle:"round",borderColor:"white",paddingX:2,paddingY:1,width:"100%"},l.createElement(S,{color:"white",bold:!0,underline:!0},"FILE WRITE PERMISSION"),l.createElement(S,{marginTop:1},"The agent is attempting to modify: ",l.createElement(S,{color:"cyan"},se(Kn?.args||"{}").path||"Unknown File")),Qo()?l.createElement(I,{marginTop:1,paddingX:1},l.createElement(S,{color:"cyan",italic:!0},"\u26A1\uFE0F FluxFlow Companion is active. Review the changes in your editor.")):l.createElement(I,{marginTop:1,borderStyle:"single",borderColor:"#333",paddingX:1,flexDirection:"column"},l.createElement(S,{color:"gray"},"--- PROPOSED CONTENT ---"),(()=>{let x=se(Kn?.args||"{}"),g=[],v=new Set;if(Object.keys(x).forEach(_=>{let B=_.match(/^(replaceContent|newContent|content_to_replace|content_to_add|TargetContent|ReplacementContent|replacementContent)(\d+)?$/);if(B){let b=B[2]?parseInt(B[2]):1;v.add(b)}}),Array.from(v).sort((_,B)=>_-B).forEach(_=>{let B,b;_===1?(B=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):(B=x[`replaceContent${_}`]??x[`content_to_replace${_}`]??null,b=x[`newContent${_}`]??x[`content_to_add${_}`]??null),(B!==null||b!==null)&&g.push({replace:B,new:b})}),g.length>0)return l.createElement(I,{flexDirection:"column",marginTop:1},g.map((_,B)=>{let b=_.replace!==null,L=_.new!==null;return l.createElement(I,{key:B,flexDirection:"column",marginTop:B>0?1:0},g.length>1&&l.createElement(S,{color:"gray"},"Block ",B+1,":"),b&&l.createElement(I,null,l.createElement(S,{color:"red",wrap:"anywhere",bold:!0},"- ",_.replace)),L&&l.createElement(I,{marginTop:0},l.createElement(S,{color:"green",wrap:"anywhere",bold:!0},"+ ",_.new.replace(/\[\/n\]?/g,"\\n"))))}));let C=x.content||x.ReplacementContent||x.content_to_add||x.replacementContent||x.newContent||null;return l.createElement(S,{color:"white",wrap:"anywhere"},(C?C.replace(/\[\/n\]?/g,"\\n"):null)||"Updating file content...")})()),l.createElement(I,{marginTop:1},l.createElement(go,{title:"Action Required",items:[{label:"Accept this time",value:"allow"},{label:"Accept for this session",value:"always"},{label:"Don't accept",value:"deny"}],onSelect:x=>{x.value==="always"&&Ds(!0);let g=x.value==="deny"?"deny":"allow";Kn.resolve(g),cs(null),J("chat")}})));case"updateManager":return l.createElement(go,{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"){J("settings");return}x.value==="custom"?(At({label:"Enter Custom Update Command (Global install recommended):",key:"customUpdateCommand",value:Nt.customUpdateCommand,next:g=>(at(v=>({...v,updateManager:"custom",customUpdateCommand:g})),null)}),J("input")):(at(g=>({...g,updateManager:x.value})),J("settings"))}});case"update":return l.createElement(gc,{latest:le,current:Uo,settings:Nt,onClose:()=>J("chat"),onSuccess:()=>{U(x=>(z(x.length+1),[...x,{id:"update-success-"+Date.now(),role:"system",text:`**[UPDATE COMPLETED]** Flux Flow successfully updated to v${le}.
640
+ **Restart to see changes.**`,isMeta:!0}])),J("chat")},onUpdateSettings:x=>{J("updateManager")}});case"terminalApproval":return l.createElement(I,{flexDirection:"column",borderStyle:"round",borderColor:"white",paddingX:2,paddingY:1,width:"100%"},l.createElement(S,{color:"white",bold:!0,underline:!0},"TERMINAL COMMAND OVERSIGHT"),l.createElement(I,{marginTop:1},l.createElement(S,null,"Agent requested to run: ",l.createElement(S,{color:"yellow",bold:!0},se(Kn?.args||"{}").command||"Unknown Command"))),l.createElement(I,{marginTop:1},l.createElement(go,{title:"Risk Assessment Required",items:[{label:"Run",value:"allow"},{label:"Deny",value:"deny"}],onSelect:x=>{Kn.resolve(x.value),cs(null),J("chat")}})));default:return l.createElement(I,{flexDirection:"column",marginTop:1,flexShrink:0,width:"100%"},l.createElement(I,{paddingX:1,marginBottom:0,justifyContent:"space-between",width:"100%"},l.createElement(I,null,We?l.createElement(I,null,l.createElement(S,{color:"gray",bold:!0,italic:!0},We)):l.createElement(S,{color:"gray",italic:!0},i.length>0&&qn?"Press ESC again to clear input":"Waiting for input...")),l.createElement(I,null,St&&l.createElement(S,{color:"gray",italic:!0},St," "),l.createElement(S,{color:"gray",bold:!0},"[ "),l.createElement(S,{color:"white"},gt||Ve),l.createElement(S,{color:"gray",bold:!0}," ]"))),l.createElement(I,{flexDirection:"column",width:"100%"},l.createElement(I,{width:"100%",height:1,overflow:"hidden"},l.createElement(S,{color:"#555555"},"\u2584".repeat(Math.max(1,p.columns)))),l.createElement(I,{backgroundColor:"#555555",paddingX:1,paddingY:0,width:"100%",flexDirection:"column"},l.createElement(I,{flexDirection:"column",width:"100%"},l.createElement(I,{flexDirection:"row",width:"100%",paddingY:0},l.createElement(I,{flexShrink:0,width:4},l.createElement(S,{color:"white",bold:!0},fo||Xn?"\u2726 ":" \u276F ")),l.createElement(I,{flexGrow:1},l.createElement(I,{flexGrow:1,position:"relative"},i===""&&l.createElement(I,{position:"absolute",paddingLeft:0},pt&&!Wt?l.createElement(S,{color:"yellow"},xt?" Terminal is waiting for user input. Press TAB to interact":" Press TAB to interact with terminal..."):pt&&Wt?l.createElement(S,{color:"yellow",bold:!0}," [ TERMINAL FOCUSED ] Type to interact, press TAB to exit..."):qn===1?l.createElement(S,{color:"white",bold:!0}," Press ESC again to ",i.length>0?"clear input":"revert codebase to checkpoint","..."):l.createElement(S,{color:"#cccccc"},Ls?" Press ESC again to cancel the request.":Xn?" Compressing session history, please wait...":fo?" Enter a prompt to steer the agent.":` Send message, @file or /cmd ... (${Gn.shortcut} for newline)`)),l.createElement(Oa,{key:`input-${f}`,focus:!Wt&&!Xn,showCursor:mo&&!Xn,lastFocusEventTime:ct.current,value:i,textStyle:{bold:!0},columns:p.columns,onChange:x=>{let g=x.replace(/\r\n/g,`
638
641
  `).replace(/\r/g,`
639
642
  `).replace(/\\\s*\n/g,`
640
- `);u(g),A(!1)},onSubmit:Vr,rows:1,maxRows:10,keyBindings:{submit:x=>x.return&&!x.shift&&!x.ctrl,newline:x=>x.return&&x.shift||x.return&&x.ctrl}})))))),l.createElement(I,{width:"100%",height:1,overflow:"hidden"},l.createElement(S,{color:"#555555"},"\u2580".repeat(Math.max(1,p.columns))))))}};return l.createElement(I,{flexDirection:"column",width:"100%"},$?l.createElement(Ed,{width:r?.columns||80,height:r?.rows||24,selectedIndex:D}):l.createElement(l.Fragment,null,l.createElement(I,{flexDirection:"column",width:"100%",flexGrow:1},Jn.items.map((x,g)=>l.createElement(si,{key:x.id||g,msg:x,showFullThinking:Ke,columns:r?.columns||80,aiProvider:N,version:Uo}))),l.createElement(I,{flexDirection:"column",padding:1,width:"100%"},(qt==="chat"||["ask","approval","terminalApproval"].includes(qt))&&l.createElement(I,{flexDirection:"column",width:"100%"},l.createElement(Ra,{messages:_e.slice(vo),showFullThinking:Ke,columns:Math.max(20,(r?.columns||80)-1),aiProvider:N,version:Uo}),pt&&l.createElement(I,{marginTop:1},l.createElement(yr,{command:pt,output:Ut,isFocused:Wt,isPty:Po}))),Ye?l.createElement(I,{borderStyle:"double",borderColor:"grey",padding:1,flexShrink:0},l.createElement(S,{color:"white"},"Starting Flux Flow...")):ze?nr():l.createElement(I,{borderStyle:"round",borderColor:"white",padding:0,flexDirection:"column",flexShrink:0,width:"100%"},l.createElement(I,{paddingX:1,marginBottom:1},l.createElement(S,{color:"gray",bold:!0},"\u{1F511}",Fe(2),"API KEY REQUIRED")),l.createElement(I,{paddingX:1,flexDirection:"column"},ee===0?l.createElement(l.Fragment,null,l.createElement(S,{color:"white"},"Select your Preferred Provider:"),l.createElement(I,{marginTop:1},l.createElement(go,{items:[{label:"Google (Free/Paid)",value:"Google"},{label:"DeepSeek (Paid)",value:"DeepSeek"},{label:"OpenRouter (Free/Paid) [EXPERIMENTAL]",value:"OpenRouter"},{label:"NVIDIA (Free/Paid)",value:"NVIDIA"}],onSelect:x=>{he(x.value),Me(1)}}))):l.createElement(l.Fragment,null,l.createElement(S,{color:"white"},"Please enter your ",N," API Key to initialize the agent (If billing is enabled set Tier to paid in /settings \u2192 other \u2192 API Tier)."),l.createElement(I,{marginTop:1},l.createElement(S,{color:"gray",bold:!0}," ",">"," "),l.createElement(Ac,{value:Ao,onChange:on,onSubmit:ms,mask:"*"})),l.createElement(I,{marginTop:1},l.createElement(S,{color:"gray",italic:!0},"(Press ESC to go back to provider selection)")))),l.createElement(I,{paddingX:1,marginTop:1},l.createElement(S,{color:"gray",italic:!0},ee===0?"(Use arrows to select and Enter to confirm)":"(Press Enter to confirm and initialize)"))),t&&l.createElement(I,{borderStyle:"round",borderColor:"white",paddingX:2,marginY:0,width:"100%"},l.createElement(S,{color:"white",bold:!0},"\u{1F534} EXIT CONFIRMATION: "),l.createElement(S,{color:"white"},"Press "),l.createElement(S,{color:"white",bold:!0},"CTRL + C"),l.createElement(S,{color:"white"}," again to exit (",n,"s). Press "),l.createElement(S,{color:"gray",bold:!0},"ESC"),l.createElement(S,{color:"white"}," to cancel.")),Lt.length>0&&(()=>{let g=M.current;T<g?g=T:T>=g+5&&(g=T-5+1),g=Math.max(0,Math.min(g,Math.max(0,Lt.length-5))),M.current=g;let v=Lt.slice(g,g+5),F=Lt.length-(g+v.length);return l.createElement(I,{flexDirection:"column",width:"100%",marginBottom:1},l.createElement(I,{paddingX:1,marginBottom:0,justifyContent:"space-between",width:"100%"},l.createElement(S,{color:"white",bold:!0},Lt[0]?.cmd?.startsWith("@")?"FILE SUGGESTIONS":"COMMAND SUGGESTIONS"),Lt[0]?.cmd?.startsWith("@")?l.createElement(S,{color:"gray",italic:!0},"(Use '#Lstart-Lend' to specify line numbers)"):i.startsWith("/model")&&Mt==="Free"?(()=>{let C="https://aistudio.google.com/billing",_="billing";return N==="DeepSeek"?(C="https://platform.deepseek.com/usage",_="billing"):N==="OpenRouter"?(C="https://openrouter.ai/settings/profile",_="profile"):N==="NVIDIA"&&(C="https://build.nvidia.com/settings/api-keys",_="billing"),l.createElement(S,{color:"gray",dimColor:!0,italic:!0},"Paid API has more models. Configure ",l.createElement(S,{color:"cyan",underline:!0},`\x1B]8;;${C}\x07${_}\x1B]8;;\x07`)," & /settings")})():null),v.map((C,_)=>{let b=g+_===T,L=C.cmd==="gemma-4-31b-it"&&Mt!=="Free";return l.createElement(I,{key:C.cmd,flexDirection:"row",backgroundColor:b?"#2a2a2a":void 0,paddingX:1},l.createElement(I,{width:3},l.createElement(S,{color:b?"white":"gray",bold:b},b?" \u276F":" ")),l.createElement(I,{width:55},l.createElement(S,{color:L?"gray":b?"white":"grey",bold:b},C.cmd?.startsWith("@[")&&C.cmd?.endsWith("]")?(()=>{let V=C.cmd.slice(2,-1).split(/[/\\]/);return V[V.length-1]})():C.cmd)),l.createElement(I,{flexGrow:1},l.createElement(S,{color:`${b?"white":"gray"}`,italic:!0},C.desc)))}),Lt.length>5&&l.createElement(I,{paddingX:1,height:1},F>0?l.createElement(S,{color:"gray",dimColor:!0,italic:!0}," ... (",F," more commands available)"):l.createElement(S,{color:"gray",dimColor:!0,italic:!0}," (End of list)")))})(),l.createElement(I,{flexShrink:0,width:"100%"},l.createElement(Wa,{mode:d,thinkingLevel:q,tokens:Xe.tokens,tokensTotal:lt,chatId:je,isMemoryEnabled:Nt.memory,apiTier:Mt,aiProvider:N})),qt==="exit"&&(()=>{let x=Date.now()-pa,g=ht+Jt,v=g>0?(ht/g*100).toFixed(1):"0.0",F=Is+ls,C=F>0?(Is/F*100).toFixed(1):"0.0",_=F>0?(ls/F*100).toFixed(1):"0.0";return l.createElement(I,{flexDirection:"column",borderStyle:"round",paddingX:3,paddingY:1,borderColor:"grey",width:Math.min(100,(r?.columns||100)-2),marginTop:0,marginBottom:0},l.createElement(I,{marginBottom:1},l.createElement(S,{bold:!0},Sd(["blue","purple"])("Agent powering down. Goodbye!"))),l.createElement(I,{flexDirection:"column"},l.createElement(S,{color:"white",bold:!0,underline:!0},"Interaction Summary"),l.createElement(I,{marginTop:1},l.createElement(I,{width:20},l.createElement(S,{color:"blue"},"Session ID:")),l.createElement(S,{color:"white"},je)),l.createElement(I,null,l.createElement(I,{width:20},l.createElement(S,{color:"blue"},"Tool Calls:")),l.createElement(S,{color:"white"},ht+Jt+jo," ( ",l.createElement(S,{color:"green"},"\u2713 ",ht)," ",l.createElement(S,{color:"yellow"},"\u2298 ",jo)," ",l.createElement(S,{color:"red"},"\u2715 ",Jt)," )")),l.createElement(I,null,l.createElement(I,{width:20},l.createElement(S,{color:"blue"},"Success Rate:")),l.createElement(S,{color:"white"},v,"%")),l.createElement(I,null,l.createElement(I,{width:20},l.createElement(S,{color:"blue"},"Code Changes:")),l.createElement(S,{color:"white"},l.createElement(S,{color:"green"},"+",Wr)," ",l.createElement(S,{color:"red"},"-",Yr))),l.createElement(I,null,l.createElement(I,{width:20},l.createElement(S,{color:"blue"},"Tokens Consumed:")),l.createElement(S,{color:"white"},eo(Tt))),Tt>0&&l.createElement(l.Fragment,null,l.createElement(I,{marginLeft:2},l.createElement(I,{width:18},l.createElement(S,{color:"grey"},"\xBB Input Tokens:")),l.createElement(S,{color:"white"},eo(Tt-Bt))),vt>0&&l.createElement(I,{marginLeft:4},l.createElement(I,{width:16},l.createElement(S,{color:"grey"},"\xBB Cached:")),l.createElement(S,{color:"white"},eo(vt))),Bt>0&&l.createElement(I,{marginLeft:2},l.createElement(I,{width:18},l.createElement(S,{color:"grey"},"\xBB Output Tokens:")),l.createElement(S,{color:"white"},eo(Bt)))),As>0&&l.createElement(l.Fragment,null,l.createElement(I,null,l.createElement(I,{width:20},l.createElement(S,{color:"blue"},"Images Made:")),l.createElement(S,{color:"white"},As)),l.createElement(I,null,l.createElement(I,{width:20},l.createElement(S,{color:"blue"},"Image Credits:")),l.createElement(S,{color:"white"},Number(((Hn||0)*1e3).toFixed(0))," credits")))),l.createElement(I,{flexDirection:"column",marginTop:1},l.createElement(S,{color:"white",bold:!0,underline:!0},"Performance"),l.createElement(I,{marginTop:1},l.createElement(I,{width:20},l.createElement(S,{color:"blue"},"Wall Time:")),l.createElement(S,{color:"white"},ie(x))),l.createElement(I,null,l.createElement(I,{width:20},l.createElement(S,{color:"blue"},"Agent Active:")),l.createElement(S,{color:"white"},ie(F))),l.createElement(I,{marginLeft:2},l.createElement(I,{width:18},l.createElement(S,{color:"grey"},"\xBB API Time:")),l.createElement(S,{color:"white"},ie(Is)," (",C,"%)")),l.createElement(I,{marginLeft:2},l.createElement(I,{width:18},l.createElement(S,{color:"grey"},"\xBB Tool Time:")),l.createElement(S,{color:"white"},ie(ls)," (",_,"%)"))))})())))}var jr,Dc,Ed,pa,vc,ga,Wr,Yr,bd,Oc,Uo,Cd,kd,Id,Md,Fc=ae(async()=>{La();Ua();Ya();ja();await Va();qa();Ja();Ns();await uc();fr();Xs();dc();mc();await xc();wc();pn();Tc();Sc();Ec();vr();oi();Xt();Pt();un();await js();Ic();os();Ji();jr=()=>{let e=(process.env.TERM_PROGRAM||"").toLowerCase();if(process.env.WT_SESSION)return"Windows Terminal";let t=o=>{let n=o.toLowerCase();for(let[s,r]of Object.entries(process.env))if(!["PATH","PWD","CWD","PS1","LS_COLORS","PROMPT"].includes(s)&&String(r).toLowerCase().includes(n))return!0;return!1};return e==="cursor"||process.env.CURSOR_SETTINGS_DIR||t("cursor")?"Cursor":e==="windsurf"||t("windsurf")?"Windsurf":t("antigravity")?"Antigravity":e==="trae"||t("trae")?"Trae":e==="codium"||t("codium")||t("vscode-oss")?"VSCodium":t("positron")?"Positron":e==="vscode"||process.env.VSCODE_GIT_IPC_HANDLE||t("vscode")?"VS Code":process.env.INTELLIJ_TERMINAL_COMMAND_BLOCKS||t("intellij")?"JetBrains":"Terminal"},Dc=e=>{let t=e==="VS Code",o=[];return t?(o.push({label:"Install Manually (VSIX)",url:"https://github.com/KushalRoyChowdhury/fluxflow-cli/releases"}),o.push({label:"Install from VS Code Marketplace",url:"https://marketplace.visualstudio.com/items?itemName=fluxflow-cli.fluxflow-cli-companion"})):o.push({label:`Download for ${e} (GitHub)`,url:"https://github.com/KushalRoyChowdhury/fluxflow-cli/releases"}),o.push({label:"Continue to CLI only",action:"dismiss"}),o},Ed=({width:e,height:t,selectedIndex:o})=>{let n=jr(),s=Dc(n);return l.createElement(I,{flexDirection:"column",alignItems:"center",justifyContent:"center",width:e,height:t},l.createElement(I,{marginBottom:1,width:Math.min(80,e-4),justifyContent:"flex-start"},l.createElement(S,null,wr(Uo))),l.createElement(I,{flexDirection:"column",borderStyle:"double",borderColor:"grey",paddingX:3,paddingY:1,width:Math.min(80,e-4)},l.createElement(S,{bold:!0,color:"white",textAlign:"center"},"\u{1F680} UPGRADE YOUR WORKFLOW"),l.createElement(I,{marginY:1,flexDirection:"column",alignItems:"left"},l.createElement(S,null,"You're in ",l.createElement(S,{bold:!0,color:"cyan"},n),", but the ",l.createElement(S,{bold:!0,color:"white"},"FluxFlow-CLI Companion")," is not installed."),l.createElement(I,{flexDirection:"column",marginY:1},l.createElement(S,{color:"gray"}," \u2705 Real-time file & cursor tracking"),l.createElement(S,{color:"gray"}," \u2705 Auto-open files created by agent"),l.createElement(S,{color:"gray"}," \u2705 Native DIFF viewer for AI edits"),l.createElement(S,{color:"gray"}," \u2705 Direct IDE context sharing"),l.createElement(S,{color:"gray"}," \u2705 Surgical Diagnostic Sync"),l.createElement(S,{color:"gray"}," \u2705 Native Right-Click \u276F Chat integration"),l.createElement(S,{color:"gray"}," \u2705 Live Status in IDE"),l.createElement(S,{color:"gray"}," \u2705 Clickable terminal-to-code links"))),l.createElement(I,{flexDirection:"column",marginTop:1},s.map((r,i)=>l.createElement(I,{key:i},l.createElement(S,{color:o===i?"yellow":"white",bold:o===i},o===i?" \u276F ":" ",r.label)))),l.createElement(I,{marginTop:1,alignItems:"center",justifyContent:"center"},l.createElement(S,{dimColor:!0,italic:!0},"(Use arrows to navigate, Enter to select)"))))},pa=Date.now(),vc="https://fluxflow-cli.onrender.com/changelog",ga="https://fluxflow-cli.onrender.com/",Wr=0,Yr=0,bd=is.join(is.dirname(Td(import.meta.url)),"../package.json"),Oc=JSON.parse(uo.readFileSync(bd,"utf8")),Uo=Oc.version,Cd=Oc.date||"2026-05-20",kd=({data:e,onResolve:t,onEdit:o})=>l.createElement(I,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},l.createElement(I,{paddingX:1},l.createElement(S,{color:"magenta",bold:!0,underline:!0},"\u{1F7E3} STEERING HINT RESOLUTION")),l.createElement(I,{paddingX:1,marginTop:1},l.createElement(S,null,"The agent already finished the task before your hint was consumed.")),l.createElement(I,{marginTop:1,backgroundColor:"#222",paddingX:2,width:"100%"},l.createElement(S,{italic:!0,color:"gray"},'"',e,'"')),l.createElement(I,{paddingX:1,marginTop:1},l.createElement(S,{color:"cyan"},"How would you like to proceed?")),l.createElement(I,{marginTop:0},l.createElement(go,{title:"Select Action",items:[{label:"Send Anyway",value:"send"},{label:"Edit Prompt",value:"edit"}],onSelect:n=>{n==="send"?t(e):o(e)}}))),Id=e=>{let t=[],o=/\[\s*tool:functions\.([a-z0-9_]+)\s*\(/gi,n=0,s;for(;(s=o.exec(e))!==null;){let r=s[1],i=s.index+s[0].length-1,u=0,f=null,m=-1,c=-1;for(let a=i;a<e.length;a++){let d=e[a];if(f){if(d===f){let h=0;for(let p=a-1;p>=0&&e[p]==="\\";p--)h++;h%2===0&&(f=null)}}else if(d==='"'||d==="'"||d==="`")f=d;else if(d==="(")u++;else if(d===")"&&(u--,u===0)){c=a;let h=a+1;for(;h<e.length&&/\s/.test(e[h]);)h++;if(h<e.length&&e[h]==="]"){m=h;break}}}if(m!==-1){let a=e.substring(n,s.index);a.trim()&&t.push({type:"output",content:a});let d=e.substring(i+1,c);t.push({type:"tool",toolName:r.trim(),args:d.trim()}),n=m+1,o.lastIndex=n}else break}if(n<e.length){let r=e.substring(n);r.trim()&&t.push({type:"output",content:r})}return t},Md=(()=>{let e=null,t=0;return o=>{let n=Date.now();if(e&&n-t<5e3)return e;let s=[],r=i=>{try{let u=uo.readdirSync(i);for(let f of u){if(["node_modules",".git",".gemini","dist","build",".next",".cache","out"].includes(f))continue;let m=is.join(i,f);uo.statSync(m).isDirectory()?r(m):s.push({name:f,relativePath:is.relative(process.cwd(),m)})}}catch{}};return r(o),e=s,t=n,s}})()});import{spawn as Ad}from"child_process";import{fileURLToPath as $c}from"url";var vd=4096,Dd=$c(import.meta.url).endsWith(".js");if(Dd&&!process.execArgv.some(e=>e.includes("max-old-space-size")))Ad(process.execPath,[`--max-old-space-size=${vd}`,$c(import.meta.url),...process.argv.slice(2)],{stdio:"inherit"}).on("exit",t=>process.exit(t||0));else{let e=process.argv.slice(2),t=e.includes("--help")&&e[e.indexOf("--help")+1]==="commands",o=e.includes("--help")&&!t,n=e.includes("--version")||e.includes("-v"),s=e[0]==="--update";if(n||o||t||s){let h=await import("fs"),p=await import("path"),{fileURLToPath:y}=await import("url"),T=p.join(p.dirname(y(import.meta.url)),"../package.json"),E=JSON.parse(h.readFileSync(T,"utf8")).version;if(n&&(console.log(`v${E}`),process.exit(0)),o&&(console.log(`FluxFlow CLI Arguments:
643
+ `);u(g),A(!1)},onSubmit:Vr,rows:1,maxRows:10,keyBindings:{submit:x=>x.return&&!x.shift&&!x.ctrl,newline:x=>x.return&&x.shift||x.return&&x.ctrl}})))))),l.createElement(I,{width:"100%",height:1,overflow:"hidden"},l.createElement(S,{color:"#555555"},"\u2580".repeat(Math.max(1,p.columns))))))}};return l.createElement(I,{flexDirection:"column",width:"100%"},$?l.createElement(Ed,{width:r?.columns||80,height:r?.rows||24,selectedIndex:D}):l.createElement(l.Fragment,null,l.createElement(I,{flexDirection:"column",width:"100%",flexGrow:1},Jn.items.map((x,g)=>l.createElement(si,{key:x.id||g,msg:x,showFullThinking:Xe,columns:r?.columns||80,aiProvider:N,version:Uo}))),l.createElement(I,{flexDirection:"column",padding:1,width:"100%"},(qt==="chat"||["ask","approval","terminalApproval"].includes(qt))&&l.createElement(I,{flexDirection:"column",width:"100%"},l.createElement(Ra,{messages:_e.slice(vo),showFullThinking:Xe,columns:Math.max(20,(r?.columns||80)-1),aiProvider:N,version:Uo}),pt&&l.createElement(I,{marginTop:1},l.createElement(yr,{command:pt,output:Ut,isFocused:Wt,isPty:Po}))),Ye?l.createElement(I,{borderStyle:"double",borderColor:"grey",padding:1,flexShrink:0},l.createElement(S,{color:"white"},"Starting Flux Flow...")):ze?nr():l.createElement(I,{borderStyle:"round",borderColor:"white",padding:0,flexDirection:"column",flexShrink:0,width:"100%"},l.createElement(I,{paddingX:1,marginBottom:1},l.createElement(S,{color:"gray",bold:!0},"\u{1F511}",Fe(2),"API KEY REQUIRED")),l.createElement(I,{paddingX:1,flexDirection:"column"},ee===0?l.createElement(l.Fragment,null,l.createElement(S,{color:"white"},"Select your Preferred Provider:"),l.createElement(I,{marginTop:1},l.createElement(go,{items:[{label:"Google (Free/Paid)",value:"Google"},{label:"DeepSeek (Paid)",value:"DeepSeek"},{label:"OpenRouter (Free/Paid) [EXPERIMENTAL]",value:"OpenRouter"},{label:"NVIDIA (Free/Paid)",value:"NVIDIA"}],onSelect:x=>{he(x.value),Me(1)}}))):l.createElement(l.Fragment,null,l.createElement(S,{color:"white"},"Please enter your ",N," API Key to initialize the agent (If billing is enabled set Tier to paid in /settings \u2192 other \u2192 API Tier)."),l.createElement(I,{marginTop:1},l.createElement(S,{color:"gray",bold:!0}," ",">"," "),l.createElement(Ac,{value:Ao,onChange:on,onSubmit:ms,mask:"*"})),l.createElement(I,{marginTop:1},l.createElement(S,{color:"gray",italic:!0},"(Press ESC to go back to provider selection)")))),l.createElement(I,{paddingX:1,marginTop:1},l.createElement(S,{color:"gray",italic:!0},ee===0?"(Use arrows to select and Enter to confirm)":"(Press Enter to confirm and initialize)"))),t&&l.createElement(I,{borderStyle:"round",borderColor:"white",paddingX:2,marginY:0,width:"100%"},l.createElement(S,{color:"white",bold:!0},"\u{1F534} EXIT CONFIRMATION: "),l.createElement(S,{color:"white"},"Press "),l.createElement(S,{color:"white",bold:!0},"CTRL + C"),l.createElement(S,{color:"white"}," again to exit (",n,"s). Press "),l.createElement(S,{color:"gray",bold:!0},"ESC"),l.createElement(S,{color:"white"}," to cancel.")),Lt.length>0&&(()=>{let g=M.current;T<g?g=T:T>=g+5&&(g=T-5+1),g=Math.max(0,Math.min(g,Math.max(0,Lt.length-5))),M.current=g;let v=Lt.slice(g,g+5),F=Lt.length-(g+v.length);return l.createElement(I,{flexDirection:"column",width:"100%",marginBottom:1},l.createElement(I,{paddingX:1,marginBottom:0,justifyContent:"space-between",width:"100%"},l.createElement(S,{color:"white",bold:!0},Lt[0]?.cmd?.startsWith("@")?"FILE SUGGESTIONS":"COMMAND SUGGESTIONS"),Lt[0]?.cmd?.startsWith("@")?l.createElement(S,{color:"gray",italic:!0},"(Use '#Lstart-Lend' to specify line numbers)"):i.startsWith("/model")&&Mt==="Free"?(()=>{let C="https://aistudio.google.com/billing",_="billing";return N==="DeepSeek"?(C="https://platform.deepseek.com/usage",_="billing"):N==="OpenRouter"?(C="https://openrouter.ai/settings/profile",_="profile"):N==="NVIDIA"&&(C="https://build.nvidia.com/settings/api-keys",_="billing"),l.createElement(S,{color:"gray",dimColor:!0,italic:!0},"Paid API has more models. Configure ",l.createElement(S,{color:"cyan",underline:!0},`\x1B]8;;${C}\x07${_}\x1B]8;;\x07`)," & /settings")})():null),v.map((C,_)=>{let b=g+_===T,L=C.cmd==="gemma-4-31b-it"&&Mt!=="Free";return l.createElement(I,{key:C.cmd,flexDirection:"row",backgroundColor:b?"#2a2a2a":void 0,paddingX:1},l.createElement(I,{width:3},l.createElement(S,{color:b?"white":"gray",bold:b},b?" \u276F":" ")),l.createElement(I,{width:55},l.createElement(S,{color:L?"gray":b?"white":"grey",bold:b},C.cmd?.startsWith("@[")&&C.cmd?.endsWith("]")?(()=>{let V=C.cmd.slice(2,-1).split(/[/\\]/);return V[V.length-1]})():C.cmd)),l.createElement(I,{flexGrow:1},l.createElement(S,{color:`${b?"white":"gray"}`,italic:!0},C.desc)))}),Lt.length>5&&l.createElement(I,{paddingX:1,height:1},F>0?l.createElement(S,{color:"gray",dimColor:!0,italic:!0}," ... (",F," more commands available)"):l.createElement(S,{color:"gray",dimColor:!0,italic:!0}," (End of list)")))})(),l.createElement(I,{flexShrink:0,width:"100%"},l.createElement(Wa,{mode:d,thinkingLevel:q,tokens:Ke.tokens,tokensTotal:lt,chatId:je,isMemoryEnabled:Nt.memory,apiTier:Mt,aiProvider:N})),qt==="exit"&&(()=>{let x=Date.now()-pa,g=ht+Jt,v=g>0?(ht/g*100).toFixed(1):"0.0",F=Is+ls,C=F>0?(Is/F*100).toFixed(1):"0.0",_=F>0?(ls/F*100).toFixed(1):"0.0";return l.createElement(I,{flexDirection:"column",borderStyle:"round",paddingX:3,paddingY:1,borderColor:"grey",width:Math.min(100,(r?.columns||100)-2),marginTop:0,marginBottom:0},l.createElement(I,{marginBottom:1},l.createElement(S,{bold:!0},Sd(["blue","purple"])("Agent powering down. Goodbye!"))),l.createElement(I,{flexDirection:"column"},l.createElement(S,{color:"white",bold:!0,underline:!0},"Interaction Summary"),l.createElement(I,{marginTop:1},l.createElement(I,{width:20},l.createElement(S,{color:"blue"},"Session ID:")),l.createElement(S,{color:"white"},je)),l.createElement(I,null,l.createElement(I,{width:20},l.createElement(S,{color:"blue"},"Tool Calls:")),l.createElement(S,{color:"white"},ht+Jt+jo," ( ",l.createElement(S,{color:"green"},"\u2713 ",ht)," ",l.createElement(S,{color:"yellow"},"\u2298 ",jo)," ",l.createElement(S,{color:"red"},"\u2715 ",Jt)," )")),l.createElement(I,null,l.createElement(I,{width:20},l.createElement(S,{color:"blue"},"Success Rate:")),l.createElement(S,{color:"white"},v,"%")),l.createElement(I,null,l.createElement(I,{width:20},l.createElement(S,{color:"blue"},"Code Changes:")),l.createElement(S,{color:"white"},l.createElement(S,{color:"green"},"+",Wr)," ",l.createElement(S,{color:"red"},"-",Yr))),l.createElement(I,null,l.createElement(I,{width:20},l.createElement(S,{color:"blue"},"Tokens Consumed:")),l.createElement(S,{color:"white"},eo(Tt))),Tt>0&&l.createElement(l.Fragment,null,l.createElement(I,{marginLeft:2},l.createElement(I,{width:18},l.createElement(S,{color:"grey"},"\xBB Input Tokens:")),l.createElement(S,{color:"white"},eo(Tt-Bt))),vt>0&&l.createElement(I,{marginLeft:4},l.createElement(I,{width:16},l.createElement(S,{color:"grey"},"\xBB Cached:")),l.createElement(S,{color:"white"},eo(vt))),Bt>0&&l.createElement(I,{marginLeft:2},l.createElement(I,{width:18},l.createElement(S,{color:"grey"},"\xBB Output Tokens:")),l.createElement(S,{color:"white"},eo(Bt)))),As>0&&l.createElement(l.Fragment,null,l.createElement(I,null,l.createElement(I,{width:20},l.createElement(S,{color:"blue"},"Images Made:")),l.createElement(S,{color:"white"},As)),l.createElement(I,null,l.createElement(I,{width:20},l.createElement(S,{color:"blue"},"Image Credits:")),l.createElement(S,{color:"white"},Number(((Hn||0)*1e3).toFixed(0))," credits")))),l.createElement(I,{flexDirection:"column",marginTop:1},l.createElement(S,{color:"white",bold:!0,underline:!0},"Performance"),l.createElement(I,{marginTop:1},l.createElement(I,{width:20},l.createElement(S,{color:"blue"},"Wall Time:")),l.createElement(S,{color:"white"},ie(x))),l.createElement(I,null,l.createElement(I,{width:20},l.createElement(S,{color:"blue"},"Agent Active:")),l.createElement(S,{color:"white"},ie(F))),l.createElement(I,{marginLeft:2},l.createElement(I,{width:18},l.createElement(S,{color:"grey"},"\xBB API Time:")),l.createElement(S,{color:"white"},ie(Is)," (",C,"%)")),l.createElement(I,{marginLeft:2},l.createElement(I,{width:18},l.createElement(S,{color:"grey"},"\xBB Tool Time:")),l.createElement(S,{color:"white"},ie(ls)," (",_,"%)"))))})())))}var jr,Dc,Ed,pa,vc,ga,Wr,Yr,bd,Oc,Uo,Cd,kd,Id,Md,Fc=ae(async()=>{La();Ua();Ya();ja();await Va();qa();Ja();Ns();await uc();fr();Ks();dc();mc();await xc();wc();pn();Tc();Sc();Ec();vr();oi();Kt();Pt();un();await js();Ic();os();Ji();jr=()=>{let e=(process.env.TERM_PROGRAM||"").toLowerCase();if(process.env.WT_SESSION)return"Windows Terminal";let t=o=>{let n=o.toLowerCase();for(let[s,r]of Object.entries(process.env))if(!["PATH","PWD","CWD","PS1","LS_COLORS","PROMPT"].includes(s)&&String(r).toLowerCase().includes(n))return!0;return!1};return e==="cursor"||process.env.CURSOR_SETTINGS_DIR||t("cursor")?"Cursor":e==="windsurf"||t("windsurf")?"Windsurf":t("antigravity")?"Antigravity":e==="trae"||t("trae")?"Trae":e==="codium"||t("codium")||t("vscode-oss")?"VSCodium":t("positron")?"Positron":e==="vscode"||process.env.VSCODE_GIT_IPC_HANDLE||t("vscode")?"VS Code":process.env.INTELLIJ_TERMINAL_COMMAND_BLOCKS||t("intellij")?"JetBrains":"Terminal"},Dc=e=>{let t=e==="VS Code",o=[];return t?(o.push({label:"Install Manually (VSIX)",url:"https://github.com/KushalRoyChowdhury/fluxflow-cli/releases"}),o.push({label:"Install from VS Code Marketplace",url:"https://marketplace.visualstudio.com/items?itemName=fluxflow-cli.fluxflow-cli-companion"})):o.push({label:`Download for ${e} (GitHub)`,url:"https://github.com/KushalRoyChowdhury/fluxflow-cli/releases"}),o.push({label:"Continue to CLI only",action:"dismiss"}),o},Ed=({width:e,height:t,selectedIndex:o})=>{let n=jr(),s=Dc(n);return l.createElement(I,{flexDirection:"column",alignItems:"center",justifyContent:"center",width:e,height:t},l.createElement(I,{marginBottom:1,width:Math.min(80,e-4),justifyContent:"flex-start"},l.createElement(S,null,wr(Uo))),l.createElement(I,{flexDirection:"column",borderStyle:"double",borderColor:"grey",paddingX:3,paddingY:1,width:Math.min(80,e-4)},l.createElement(S,{bold:!0,color:"white",textAlign:"center"},"\u{1F680} UPGRADE YOUR WORKFLOW"),l.createElement(I,{marginY:1,flexDirection:"column",alignItems:"left"},l.createElement(S,null,"You're in ",l.createElement(S,{bold:!0,color:"cyan"},n),", but the ",l.createElement(S,{bold:!0,color:"white"},"FluxFlow-CLI Companion")," is not installed."),l.createElement(I,{flexDirection:"column",marginY:1},l.createElement(S,{color:"gray"}," \u2705 Real-time file & cursor tracking"),l.createElement(S,{color:"gray"}," \u2705 Auto-open files created by agent"),l.createElement(S,{color:"gray"}," \u2705 Native DIFF viewer for AI edits"),l.createElement(S,{color:"gray"}," \u2705 Direct IDE context sharing"),l.createElement(S,{color:"gray"}," \u2705 Surgical Diagnostic Sync"),l.createElement(S,{color:"gray"}," \u2705 Native Right-Click \u276F Chat integration"),l.createElement(S,{color:"gray"}," \u2705 Live Status in IDE"),l.createElement(S,{color:"gray"}," \u2705 Clickable terminal-to-code links"))),l.createElement(I,{flexDirection:"column",marginTop:1},s.map((r,i)=>l.createElement(I,{key:i},l.createElement(S,{color:o===i?"yellow":"white",bold:o===i},o===i?" \u276F ":" ",r.label)))),l.createElement(I,{marginTop:1,alignItems:"center",justifyContent:"center"},l.createElement(S,{dimColor:!0,italic:!0},"(Use arrows to navigate, Enter to select)"))))},pa=Date.now(),vc="https://fluxflow-cli.onrender.com/changelog",ga="https://fluxflow-cli.onrender.com/",Wr=0,Yr=0,bd=is.join(is.dirname(Td(import.meta.url)),"../package.json"),Oc=JSON.parse(uo.readFileSync(bd,"utf8")),Uo=Oc.version,Cd=Oc.date||"2026-05-20",kd=({data:e,onResolve:t,onEdit:o})=>l.createElement(I,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},l.createElement(I,{paddingX:1},l.createElement(S,{color:"magenta",bold:!0,underline:!0},"\u{1F7E3} STEERING HINT RESOLUTION")),l.createElement(I,{paddingX:1,marginTop:1},l.createElement(S,null,"The agent already finished the task before your hint was consumed.")),l.createElement(I,{marginTop:1,backgroundColor:"#222",paddingX:2,width:"100%"},l.createElement(S,{italic:!0,color:"gray"},'"',e,'"')),l.createElement(I,{paddingX:1,marginTop:1},l.createElement(S,{color:"cyan"},"How would you like to proceed?")),l.createElement(I,{marginTop:0},l.createElement(go,{title:"Select Action",items:[{label:"Send Anyway",value:"send"},{label:"Edit Prompt",value:"edit"}],onSelect:n=>{n==="send"?t(e):o(e)}}))),Id=e=>{let t=[],o=/\[\s*tool:functions\.([a-z0-9_]+)\s*\(/gi,n=0,s;for(;(s=o.exec(e))!==null;){let r=s[1],i=s.index+s[0].length-1,u=0,f=null,m=-1,c=-1;for(let a=i;a<e.length;a++){let d=e[a];if(f){if(d===f){let h=0;for(let p=a-1;p>=0&&e[p]==="\\";p--)h++;h%2===0&&(f=null)}}else if(d==='"'||d==="'"||d==="`")f=d;else if(d==="(")u++;else if(d===")"&&(u--,u===0)){c=a;let h=a+1;for(;h<e.length&&/\s/.test(e[h]);)h++;if(h<e.length&&e[h]==="]"){m=h;break}}}if(m!==-1){let a=e.substring(n,s.index);a.trim()&&t.push({type:"output",content:a});let d=e.substring(i+1,c);t.push({type:"tool",toolName:r.trim(),args:d.trim()}),n=m+1,o.lastIndex=n}else break}if(n<e.length){let r=e.substring(n);r.trim()&&t.push({type:"output",content:r})}return t},Md=(()=>{let e=null,t=0;return o=>{let n=Date.now();if(e&&n-t<5e3)return e;let s=[],r=i=>{try{let u=uo.readdirSync(i);for(let f of u){if(["node_modules",".git",".gemini","dist","build",".next",".cache","out"].includes(f))continue;let m=is.join(i,f);uo.statSync(m).isDirectory()?r(m):s.push({name:f,relativePath:is.relative(process.cwd(),m)})}}catch{}};return r(o),e=s,t=n,s}})()});import{spawn as Ad}from"child_process";import{fileURLToPath as $c}from"url";var vd=4096,Dd=$c(import.meta.url).endsWith(".js");if(Dd&&!process.execArgv.some(e=>e.includes("max-old-space-size")))Ad(process.execPath,[`--max-old-space-size=${vd}`,$c(import.meta.url),...process.argv.slice(2)],{stdio:"inherit"}).on("exit",t=>process.exit(t||0));else{let e=process.argv.slice(2),t=e.includes("--help")&&e[e.indexOf("--help")+1]==="commands",o=e.includes("--help")&&!t,n=e.includes("--version")||e.includes("-v"),s=e[0]==="--update";if(n||o||t||s){let h=await import("fs"),p=await import("path"),{fileURLToPath:y}=await import("url"),T=p.join(p.dirname(y(import.meta.url)),"../package.json"),E=JSON.parse(h.readFileSync(T,"utf8")).version;if(n&&(console.log(`v${E}`),process.exit(0)),o&&(console.log(`FluxFlow CLI Arguments:
641
644
  --mode <flux|flow> Set startup mode (flux: Agent / flow: Chat)
642
645
  --model <model_name> Set startup AI model
643
646
  --key <key@provider> Set API key and provider
@@ -682,4 +685,4 @@ Selection: ${Le}`,isAskRecord:!0}]),ge(Le)}}),J("ask")})},async()=>{if(ve.curren
682
685
  /docs View documentation
683
686
  /fluxflow init Create FluxFlow.md template
684
687
  /update check Check for new version
685
- /update latest Install latest release`),process.exit(0)),s){let A=e[1];if(A==="check"){let $=e[2]==="latest";try{let O=(await(await fetch("https://registry.npmjs.org/fluxflow-cli",{cache:"no-store"})).json())["dist-tags"]?.latest;O||(console.error("Error: Could not retrieve latest version."),process.exit(1)),console.log($?`Latest version: v${O}`:O!==E?`A new version of FluxFlow is available: v${O} (current: v${E}). Run "fluxflow --update latest" to upgrade.`:`FluxFlow is up to date (v${E}).`)}catch(W){console.error("Error checking for updates:",W.message),process.exit(1)}process.exit(0)}else if(A==="latest"){console.log("Checking latest version and settings...");try{let D=(await(await fetch("https://registry.npmjs.org/fluxflow-cli",{cache:"no-store"})).json())["dist-tags"]?.latest;D||(console.error("Error: Could not retrieve latest version."),process.exit(1)),D===E&&(console.log(`FluxFlow is already up to date (v${E}).`),process.exit(0));let O=async()=>{let Y=(await import("react")).default,{useState:N}=Y,{render:he,Box:ee,Text:Me}=await import("ink"),le=(await import("ink-select-input")).default,ue=(await import("ink-text-input")).default;return new Promise(Ke=>{let _t=[{label:"NPM",value:"npm"},{label:"PNPM",value:"pnpm"},{label:"Yarn",value:"yarn"},{label:"Bun",value:"bun"},{label:"Custom Command",value:"custom"}],Ve=({label:qe,isSelected:mo})=>Y.createElement(ee,{width:"100%"},Y.createElement(Me,{bold:mo},"\u2514\u2500 ",mo?"\x1B[32m\u25CF\x1B[0m":"\u25CB"," ",qe)),Ee,ft=()=>{let[qe,mo]=N("select"),[Vt,ct]=N(""),ze=Ao=>{Ao.value==="custom"?mo("custom"):et({manager:Ao.value})},ot=Ao=>{et({manager:"custom",customCommand:Ao})};return qe==="custom"?Y.createElement(ee,{flexDirection:"column",marginY:1},Y.createElement(ee,{marginBottom:1},Y.createElement(Me,{color:"magenta",bold:!0},"\u{1F527} Enter custom update command:")),Y.createElement(ee,{flexDirection:"row"},Y.createElement(Me,{color:"cyan",bold:!0}," \u276F "),Y.createElement(ue,{value:Vt,onChange:ct,onSubmit:ot})),Y.createElement(ee,{marginTop:1},Y.createElement(Me,{color:"gray",dimColor:!0,italic:!0}," (Press Enter to confirm)"))):Y.createElement(ee,{flexDirection:"column",marginY:1},Y.createElement(ee,{marginBottom:1},Y.createElement(Me,{color:"magenta",bold:!0},"\u{1F4E6} Select a package manager for the update:")),Y.createElement(le,{items:_t,onSelect:ze,itemComponent:Ve,indicatorComponent:()=>null}))},et=qe=>{Ee&&Ee(),Ke(qe)},{unmount:Ye}=he(Y.createElement(ft,null));Ee=Ye})},M,P="",j;try{let{loadSettings:Y}=await Promise.resolve().then(()=>(fr(),Aa));j=await Y(),M=j?.systemSettings?.updateManager||j?.updateManager}catch{}{let Y=await O();M=Y.manager,P=Y.customCommand}let G="";M==="pnpm"?G=`pnpm add -g fluxflow-cli@${D}`:M==="bun"?G=`bun add -g fluxflow-cli@${D}`:M==="yarn"?G=`yarn global add fluxflow-cli@${D}`:M==="custom"?G=P||j?.customUpdateCommand||`npm install -g fluxflow-cli@${D}`:G=`npm install -g fluxflow-cli@${D}`,console.log(`Updating FluxFlow to v${D} using ${M}...`),console.log(`Running: ${G}`);let{execSync:q}=await import("child_process");q(G,{stdio:"inherit"}),console.log(`\x1B[32m\u2705 Update successful! FluxFlow updated to v${D}.\x1B[0m`)}catch($){console.error("\x1B[31m\u274C Update failed:\x1B[0m",$.message),process.exit(1)}process.exit(0)}else console.error("Unknown update command. Available options: --update check, --update check latest, --update latest"),process.exit(1)}}let{default:r}=await import("react"),{render:i}=await import("ink"),{default:u}=await Fc().then(()=>Pc);process.env.NODE_NO_WARNINGS="1";let f=["cuimp","Found existing binary","Binary verified","curl.exe not found","Falling back to .bat file","DeprecationWarning"],m=console.log,c=console.warn,a=console.error,d=h=>{let p=h.map(String).join(" ");return f.some(y=>p.includes(y))};console.log=(...h)=>!d(h)&&m(...h),console.warn=(...h)=>!d(h)&&c(...h),console.error=(...h)=>!d(h)&&a(...h),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")),i(r.createElement(u,{args:process.argv.slice(2)}),{exitOnCtrlC:!1})}
688
+ /update latest Install latest release`),process.exit(0)),s){let A=e[1];if(A==="check"){let $=e[2]==="latest";try{let O=(await(await fetch("https://registry.npmjs.org/fluxflow-cli",{cache:"no-store"})).json())["dist-tags"]?.latest;O||(console.error("Error: Could not retrieve latest version."),process.exit(1)),console.log($?`Latest version: v${O}`:O!==E?`A new version of FluxFlow is available: v${O} (current: v${E}). Run "fluxflow --update latest" to upgrade.`:`FluxFlow is up to date (v${E}).`)}catch(W){console.error("Error checking for updates:",W.message),process.exit(1)}process.exit(0)}else if(A==="latest"){console.log("Checking latest version and settings...");try{let D=(await(await fetch("https://registry.npmjs.org/fluxflow-cli",{cache:"no-store"})).json())["dist-tags"]?.latest;D||(console.error("Error: Could not retrieve latest version."),process.exit(1)),D===E&&(console.log(`FluxFlow is already up to date (v${E}).`),process.exit(0));let O=async()=>{let Y=(await import("react")).default,{useState:N}=Y,{render:he,Box:ee,Text:Me}=await import("ink"),le=(await import("ink-select-input")).default,ue=(await import("ink-text-input")).default;return new Promise(Xe=>{let _t=[{label:"NPM",value:"npm"},{label:"PNPM",value:"pnpm"},{label:"Yarn",value:"yarn"},{label:"Bun",value:"bun"},{label:"Custom Command",value:"custom"}],Ve=({label:qe,isSelected:mo})=>Y.createElement(ee,{width:"100%"},Y.createElement(Me,{bold:mo},"\u2514\u2500 ",mo?"\x1B[32m\u25CF\x1B[0m":"\u25CB"," ",qe)),Ee,ft=()=>{let[qe,mo]=N("select"),[Vt,ct]=N(""),ze=Ao=>{Ao.value==="custom"?mo("custom"):et({manager:Ao.value})},ot=Ao=>{et({manager:"custom",customCommand:Ao})};return qe==="custom"?Y.createElement(ee,{flexDirection:"column",marginY:1},Y.createElement(ee,{marginBottom:1},Y.createElement(Me,{color:"magenta",bold:!0},"\u{1F527} Enter custom update command:")),Y.createElement(ee,{flexDirection:"row"},Y.createElement(Me,{color:"cyan",bold:!0}," \u276F "),Y.createElement(ue,{value:Vt,onChange:ct,onSubmit:ot})),Y.createElement(ee,{marginTop:1},Y.createElement(Me,{color:"gray",dimColor:!0,italic:!0}," (Press Enter to confirm)"))):Y.createElement(ee,{flexDirection:"column",marginY:1},Y.createElement(ee,{marginBottom:1},Y.createElement(Me,{color:"magenta",bold:!0},"\u{1F4E6} Select a package manager for the update:")),Y.createElement(le,{items:_t,onSelect:ze,itemComponent:Ve,indicatorComponent:()=>null}))},et=qe=>{Ee&&Ee(),Xe(qe)},{unmount:Ye}=he(Y.createElement(ft,null));Ee=Ye})},M,P="",j;try{let{loadSettings:Y}=await Promise.resolve().then(()=>(fr(),Aa));j=await Y(),M=j?.systemSettings?.updateManager||j?.updateManager}catch{}{let Y=await O();M=Y.manager,P=Y.customCommand}let G="";M==="pnpm"?G=`pnpm add -g fluxflow-cli@${D}`:M==="bun"?G=`bun add -g fluxflow-cli@${D}`:M==="yarn"?G=`yarn global add fluxflow-cli@${D}`:M==="custom"?G=P||j?.customUpdateCommand||`npm install -g fluxflow-cli@${D}`:G=`npm install -g fluxflow-cli@${D}`,console.log(`Updating FluxFlow to v${D} using ${M}...`),console.log(`Running: ${G}`);let{execSync:q}=await import("child_process");q(G,{stdio:"inherit"}),console.log(`\x1B[32m\u2705 Update successful! FluxFlow updated to v${D}.\x1B[0m`)}catch($){console.error("\x1B[31m\u274C Update failed:\x1B[0m",$.message),process.exit(1)}process.exit(0)}else console.error("Unknown update command. Available options: --update check, --update check latest, --update latest"),process.exit(1)}}let{default:r}=await import("react"),{render:i}=await import("ink"),{default:u}=await Fc().then(()=>Pc);process.env.NODE_NO_WARNINGS="1";let f=["cuimp","Found existing binary","Binary verified","curl.exe not found","Falling back to .bat file","DeprecationWarning"],m=console.log,c=console.warn,a=console.error,d=h=>{let p=h.map(String).join(" ");return f.some(y=>p.includes(y))};console.log=(...h)=>!d(h)&&m(...h),console.warn=(...h)=>!d(h)&&c(...h),console.error=(...h)=>!d(h)&&a(...h),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")),i(r.createElement(u,{args:process.argv.slice(2)}),{exitOnCtrlC:!1})}