fluxflow-cli 2.2.5 → 2.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/fluxflow.js +1 -1
- package/package.json +1 -1
package/dist/fluxflow.js
CHANGED
|
@@ -112,7 +112,7 @@ ${a}`),p!==0&&g.push(`EXIT CODE: ${p}`);let E=g.join(`
|
|
|
112
112
|
|
|
113
113
|
${T}`:`SUCCESS: Command [${t}] completed.
|
|
114
114
|
|
|
115
|
-
${T}`)}),u.on("error",p=>{if(l&&r&&p.code==="ENOENT"){let g=Qi(t,!1);return Ds(e,g,t,n,i,!1)}It=null,e(`ERROR: Failed to start command [${t}]: ${p.message}`)})}});import we,{useState as xr}from"react";import{Box as At,Text as Rt,useInput as tc}from"ink";import oc from"ink-text-input";function Fs({systemSettings:e,setSystemSettings:o,apiTier:t,setActiveView:n,setInputConfig:i,saveSettings:r,quotas:l,setMessages:d,aiProvider:f}){let[u,c]=xr("categories"),[a,m]=xr(0),[p,g]=xr(0),[E,T]=xr(null),[w,M]=xr(""),v=I=>{switch(I){case"memory":return[{label:"Toggle Memory",value:"memory",status:e.memory?"ON":"OFF"}];case"security":return[{label:"Sandbox Preset",value:"sandboxPreset",status:Zi(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:$s(e.alwaysAskCommands),section:"Sandbox"},{label:"Auto Approve Commands",value:"autoApprove",status:$s(e.autoApproveCommands),section:"Sandbox"},{label:"Auto Disapprove Commands",value:"autoDisallow",status:$s(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:t}];default:return[]}},R=on[a].id,q=v(R);tc((I,L)=>{if(E){L.escape&&T(null);return}if(u==="categories")L.upArrow?m(D=>(D-1+on.length)%on.length):L.downArrow?m(D=>(D+1)%on.length):L.return||L.rightArrow?on[a].id==="exit"?n("chat"):(c("items"),g(0)):L.escape&&n("chat");else if(u==="items"){if(L.upArrow)g(D=>(D-1+q.length)%q.length);else if(L.downArrow)g(D=>(D+1)%q.length);else if(L.leftArrow||L.escape)c("categories");else if(L.return){let D=q[p];B(D)}}});let B=I=>{if(I.value==="memory")o(L=>({...L,memory:!L.memory}));else if(I.value==="sandboxPreset"){let L=Zi(e),D=["Autonomous","Balanced","Strict"],j=(D.indexOf(L)+1)%D.length,Z=D[j];o(X=>{let z={...X,sandboxPreset:Z};return Z==="Strict"?(z.autoExec=!1,z.allowExternalAccess=!1,z.networkAccess=!1,z.autoApproveCommands="",z.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",z.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",z.autoApproveGit=!1):Z==="Balanced"?(z.autoExec=!0,z.allowExternalAccess=!1,z.networkAccess=!0,z.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",z.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",z.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",z.autoApproveGit=!1):Z==="Autonomous"&&(z.autoExec=!0,z.allowExternalAccess=!0,z.networkAccess=!0,z.autoApproveCommands="",z.autoDisallowCommands="",z.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",z.autoApproveGit=!0),z})}else if(I.value==="autoExec")e.autoExec?o(L=>({...L,autoExec:!1,sandboxPreset:"Custom"})):e.allowExternalAccess?n("doubleDanger"):n("autoExecDanger");else if(I.value==="externalAccess")e.allowExternalAccess?o(L=>({...L,allowExternalAccess:!1,sandboxPreset:"Custom"})):e.autoExec?n("doubleDanger"):n("externalDanger");else if(I.value==="networkAccess")o(L=>({...L,networkAccess:L.networkAccess===!1,sandboxPreset:"Custom"}));else if(I.value==="alwaysAsk")T("alwaysAskCommands"),M(e.alwaysAskCommands||"");else if(I.value==="autoApprove")T("autoApproveCommands"),M(e.autoApproveCommands||"");else if(I.value==="autoApproveGit")o(L=>({...L,autoApproveGit:!L.autoApproveGit,sandboxPreset:"Custom"}));else if(I.value==="autoDisallow")T("autoDisallowCommands"),M(e.autoDisallowCommands||"");else if(I.value==="apiTier")n("apiTier");else if(I.value==="aiProvider")n("selectProvider");else if(I.value==="autoDelete"){let L=["1d","7d","30d"],Q=(L.indexOf(e.autoDeleteHistory||"30d")+1)%L.length;o(j=>({...j,autoDeleteHistory:L[Q]}))}else if(I.value==="autoUpdate")o(L=>({...L,autoUpdate:!L.autoUpdate}));else if(I.value==="externalData")if(!e.useExternalData)i({label:"Enter absolute path for External AppData:",note:"All history, logs and secrets will be stored here. ~/.fluxflow/settings.json stays as anchor.",key:"externalDataPath",value:e.externalDataPath||""}),n("input");else{let L={...e,useExternalData:!1};o(L),r({systemSettings:L,apiTier:t,quotas:l}),d(D=>[...D,{id:Date.now(),role:"system",text:"\u{1F3E0} [STORAGE RESET] Flux Flow will return to default ~/.fluxflow after restart."}]),n("chat")}else I.value==="updateManager"&&n("updateManager")};return we.createElement(At,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%",height:27},we.createElement(At,{paddingX:1,paddingY:0,marginBottom:1,borderStyle:"single",borderColor:"magenta",width:"100%"},we.createElement(Rt,{color:"magenta",bold:!0},"\u{1F527} SYSTEM CONFIGURATION")),we.createElement(At,{flexDirection:"row",width:"100%",minHeight:19},we.createElement(At,{flexDirection:"column",width:"30%",borderStyle:"round",borderColor:u==="categories"?"cyan":"gray",padding:1},we.createElement(At,{marginBottom:1},we.createElement(Rt,{color:u==="categories"?"cyan":"white",bold:!0,underline:!0},"CATEGORIES")),on.map((I,L)=>{let D=a===L,Q=I.id==="exit";return we.createElement(At,{key:I.id,marginTop:Q?8:0,backgroundColor:D?u==="categories"?"#2a2a2a":"#1e1e1e":void 0,paddingX:1},we.createElement(Rt,{color:D?u==="categories"?"cyan":"yellow":"white",bold:D},D?"\u276F ":" ",I.label))})),we.createElement(At,{flexDirection:"column",width:"70%",borderStyle:"round",borderColor:u==="items"?"cyan":"gray",padding:1,marginLeft:1},we.createElement(At,{marginBottom:1},we.createElement(Rt,{color:u==="items"?"cyan":"white",bold:!0,underline:!0},on[a].label.toUpperCase()," SETTINGS")),q.length>0?(()=>{let I=null,L=[],D=Te=>(Te||"").split(",").map(Ge=>Ge.trim().toLowerCase()).filter(Boolean),Q=D(e.autoApproveCommands),j=D(e.autoDisallowCommands),Z=D(e.alwaysAskCommands),X=[...Q,...j,...Z],z=new Set(X),Ct=R==="security"&&X.length!==z.size;return q.forEach((Te,Ge)=>{let nt=u==="items"&&p===Ge,fe=Te.label.length,ut=Math.max(2,35-fe),Je=".".repeat(ut),je=me=>R==="security"?(me.value==="autoExec"||me.value==="externalAccess")&&me.status==="ON"?"red":"yellow":me.status?.startsWith("\u2713")?"green":me.status?.startsWith("\u26A0")?"yellow":me.status==="ON"?"green":me.status==="OFF"?"red":"yellow";Te.section&&Te.section!==I&&(I=Te.section,L.push(we.createElement(At,{key:`sec-hdr-${Te.section}`,marginTop:L.length>0?1:0,marginBottom:0,paddingX:1},we.createElement(Rt,{color:"magenta",bold:!0,underline:!0},"\u{1F4C2} ",Te.section.toUpperCase()))));let Fe=nt&&E&&(E==="alwaysAskCommands"&&Te.value==="alwaysAsk"||E==="autoApproveCommands"&&Te.value==="autoApprove"||E==="autoDisallowCommands"&&Te.value==="autoDisallow"),Qe=Te.value==="alwaysAsk"||Te.value==="autoApprove"||Te.value==="autoDisallow";L.push(we.createElement(At,{key:Te.value,flexDirection:"column"},we.createElement(At,{backgroundColor:nt&&!Fe?"#2a2a2a":void 0,paddingX:2},we.createElement(Rt,{color:nt?"cyan":"white",bold:nt},nt?"\u276F ":" ",Te.label),!Qe&&we.createElement(we.Fragment,null,we.createElement(Rt,{color:"gray",dimColor:!0},Je),we.createElement(Rt,{color:je(Te),bold:!0},Te.value==="aiProvider"?Te.status:`[ ${Te.status} ]`))),Qe&&!Fe&&Te.status!=="None"&&we.createElement(At,{paddingX:4,marginBottom:1},we.createElement(Rt,{color:"gray",dimColor:!0},"\u21B3 ",Te.status)),Fe&&we.createElement(At,{flexDirection:"column",marginLeft:4,marginBottom:1},we.createElement(At,{paddingX:1,borderStyle:"single",borderColor:"cyan",flexDirection:"row"},we.createElement(Rt,{color:"cyan",bold:!0},"> "," "),we.createElement(oc,{value:w,onChange:M,onSubmit:me=>{let yo={...e,[E]:me.trim(),sandboxPreset:"Custom"};o(yo),r({systemSettings:yo,apiTier:t,quotas:l}),T(null)}})),we.createElement(Rt,{color:"gray",dimColor:!0,italic:!0}," Comma separated \u2022 Press Enter to save, Esc to cancel"))))}),R==="other"&&L.push(we.createElement(At,{key:"pty-notice",marginTop:10,paddingX:1},we.createElement(Rt,{color:Nn?"green":"yellow"},Nn?"\u2713 Advance Interactive Terminal Supported":"\u26A0 Interactive Terminal is Limited"))),Ct&&L.push(we.createElement(At,{key:"conflict-warning",marginTop:1,paddingX:1},we.createElement(Rt,{color:"red",dimColor:!0,italic:!0},"* Conflicting commands will be ignored and defaulted to highest priority"))),L})():we.createElement(At,{paddingX:1},we.createElement(Rt,{color:"gray",italic:!0},on[a].desc)))),we.createElement(At,{paddingX:1,marginTop:1,flexDirection:"row",justifyContent:"space-between"},we.createElement(Rt,{color:"gray",dimColor:!0,italic:!0},u==="categories"?"\u25B2\u25BC Select Category \u2022 Enter/\u25BA to configure":"\u25B2\u25BC Select Option \u2022 Enter to Toggle \u2022 \u25C4/ESC to go back"),u==="categories"&&we.createElement(Rt,{color:"gray",dimColor:!0},on[a].desc)))}var on,Zi,$s,ea=ae(async()=>{await gr();on=[{id:"memory",label:"\u{1F9E0} Memory",desc:"Manage system context & agent's memory"},{id:"security",label:"\u{1F512} Security",desc:"Configure permissions & data safety"},{id:"updater",label:"\u{1F504} Updater",desc:"Manage application updates"},{id:"other",label:"\u{1F4CB} Other",desc:"Miscellaneous preferences"},{id:"exit",label:"\u{1F6AA} Exit Settings",desc:"Return to chat view"}],Zi=e=>{let o=e.autoApproveCommands||"",t=e.autoDisallowCommands||"",n=e.alwaysAskCommands||"",i=e.autoExec===!1&&e.allowExternalAccess===!1&&e.networkAccess===!1&&o===""&&t==="rm -rf, rm -f, del /f, del /q, rd /s, rmdir /s, format, mkfs, dd if=/dev, shred, srm, Remove-Item -Recurse -Force, Initialize-Disk, Clear-Disk, format c:, flashrom, nvram -c"&&n==="killall, pkill, taskkill, shutdown, reboot, init 0, init 6, Stop-Process, Stop-Service, mv /*, move c:\\*, chmod 000, chmod -R 777, chown, icacls, netsh advfirewall, iptables -F, ufw disable, git reset --hard, git clean -fd, npm r, npm uninstall"&&e.autoApproveGit===!1,r=e.autoExec===!0&&e.allowExternalAccess===!1&&e.networkAccess!==!1&&o==="ls, dir, cat, type, echo, pwd, cd, git status, git log, git diff, git branch, git show, help, mkdir, touch, md, whoami, hostname, ps, Get-Process, date, time, mkdir"&&t==="rm -rf, rm -f, del /f, del /q, rd /s, rmdir /s, format, mkfs, dd if=/dev, shred, srm, Remove-Item -Recurse -Force, Initialize-Disk, Clear-Disk, format c:, flashrom, nvram -c"&&n==="killall, pkill, taskkill, Stop-Process, mv /*, move c:\\*, chmod 000, chmod -R 777, chown, icacls, shutdown, reboot, init 0, init 6, git reset --hard, git clean -fd, npm r, npm uninstall"&&e.autoApproveGit===!1,l=e.autoExec===!0&&e.allowExternalAccess===!0&&e.networkAccess!==!1&&o==="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"&&t===""&&n==="rm -rf, rm -f, del /f, del /q, rd /s, rmdir /s, format, mkfs, dd if=/dev, shred, srm, Remove-Item -Recurse -Force, Initialize-Disk, Clear-Disk, format c:, flashrom, nvram -c"&&e.autoApproveGit===!0;return i?"Strict":r?"Balanced":l?"Autonomous":e.sandboxPreset||"Custom"},$s=e=>!e||e.trim()===""?"None":e.length>40?e.substring(0,40)+"...":e});import Lo,{useState as Ps,useEffect as nc}from"react";import{Box as Zn,Text as qr}from"ink";import rc from"ink-text-input";function Bs({initialData:e,onSave:o,onCancel:t}){let[n,i]=Ps(0),[r,l]=Ps(""),[d,f]=Ps(()=>({name:e?.name||"",nickname:e?.nickname||"",instructions:e?.instructions||""})),u=[{key:"name",label:"Enter your Name: "},{key:"nickname",label:"Enter a Nickname (Agent will use this): "},{key:"instructions",label:"System Instructions (Persona overrides): "}];nc(()=>{let a=u[n].key;l(d[a]||"")},[n,d]);let c=a=>{if(a.trim().toLowerCase()==="/cancel"){t();return}let m=u[n].key,p={...d,[m]:a.trim()};f(p),l(""),n<u.length-1?i(n+1):o(p)};return Lo.createElement(Zn,{borderStyle:"round",borderColor:"gray",padding:0,marginTop:1,flexShrink:0,flexDirection:"column",width:"100%"},Lo.createElement(Zn,{paddingX:1,marginBottom:1},Lo.createElement(qr,{color:"magenta",bold:!0},"\u{1F464} DEVELOPER PROFILE CONFIGURATION")),Lo.createElement(Zn,{paddingX:1,flexDirection:"column"},Lo.createElement(Zn,null,Lo.createElement(qr,{color:"cyan",bold:!0},u[n].label),Lo.createElement(rc,{value:r,onChange:l,onSubmit:c})),Lo.createElement(Zn,{marginTop:1},Lo.createElement(qr,{color:"gray",dimColor:!0,italic:!0},"Step ",n+1," of ",u.length))),Lo.createElement(Zn,{paddingX:1,marginTop:1},Lo.createElement(qr,{color:"gray",dimColor:!0,italic:!0},"(Enter to submit \u2022 Type /cancel to abort)")))}var ta=ae(()=>{});import ct,{useState as Ns}from"react";import{Box as Co,Text as nn,useInput as sc}from"ink";import ic from"ink-text-input";var ac,oa,na=ae(()=>{wn();ac=({question:e,options:o,onResolve:t})=>{let[n,i]=Ns(!1),[r,l]=Ns(""),[d,f]=Ns(0),u=[...o,{id:"CUSTOM",label:"Suggest something else...",description:"Provide a custom response"}];sc((a,m)=>{if(!n&&((m.leftArrow||m.upArrow)&&f(p=>Math.max(0,p-1)),(m.rightArrow||m.downArrow)&&f(p=>Math.min(u.length-1,p+1)),m.return)){let p=u[d];p.id==="CUSTOM"?i(!0):t(p.label)}});let c=Ce(2);return n?ct.createElement(Co,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},ct.createElement(Co,{paddingX:1},ct.createElement(nn,{color:"cyan",bold:!0},"\u{1F4AC} SUGGEST SOMETHING ELSE")),ct.createElement(Co,{marginTop:1,paddingX:1},ct.createElement(nn,{italic:!0,color:"gray"},"Replying to: ",e)),ct.createElement(Co,{marginTop:1,paddingX:1,flexDirection:"row"},ct.createElement(nn,{color:"cyan",bold:!0},"\u{1F4A0} "),ct.createElement(ic,{value:r,onChange:l,onSubmit:()=>t(r)})),ct.createElement(Co,{marginTop:1,paddingX:1,marginBottom:1},ct.createElement(nn,{color:"gray",dimColor:!0,italic:!0},"(Press Enter to send)"))):ct.createElement(Co,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},ct.createElement(Co,{paddingX:1,marginBottom:1},ct.createElement(nn,{color:"cyan",bold:!0},"\u{1F4AC} AGENT REQUEST: ACTION REQUIRED")),ct.createElement(Co,{paddingX:1,marginBottom:1},ct.createElement(nn,{bold:!0,color:"white"},e)),ct.createElement(Co,{flexDirection:"column",width:"100%"},u.map((a,m)=>{let p=m===d;return ct.createElement(Co,{key:a.id,flexDirection:"column",width:"100%",backgroundColor:p?"#2a2a2a":void 0,paddingX:1,marginBottom:m===u.length-1?0:1},ct.createElement(nn,{color:p?"cyan":"white",bold:p},p?"\u276F ":" ",a.label),a.description&&ct.createElement(Co,{marginLeft:4},ct.createElement(nn,{color:"gray",italic:!0,dimColor:!0},a.description)))})),ct.createElement(Co,{paddingX:1,marginTop:1,marginBottom:1},ct.createElement(nn,{color:"gray",dimColor:!0,italic:!0},"(Use Arrows to navigate, Enter to confirm)")))},oa=ac});import yr from"fs";import _s from"path";import Vr from"crypto";var lc,cc,ra,sa,wr,Sn,ye,ke,zr,Jr,Do=ae(()=>{lc=66,cc=e=>{let o=Buffer.isBuffer(e)?e:Buffer.from(e),t=Buffer.alloc(o.length);for(let n=0;n<o.length;n++)t[n]=o[n]^lc;return t},ra="aes-256-cbc",sa=Vr.createHash("sha256").update("fluxflow-cli-sanctuary-key").digest(),wr=e=>{let o=Vr.randomBytes(16),t=Vr.createCipheriv(ra,sa,o),n=t.update(e,"utf8","hex");return n+=t.final("hex"),o.toString("hex")+":"+n},Sn=e=>{let o=e.split(":");if(o.length!==2)throw new Error("Invalid AES format");let t=Buffer.from(o[0],"hex"),n=o[1],i=Vr.createDecipheriv(ra,sa,t),r=i.update(n,"hex","utf8");return r+=i.final("utf8"),r},ye=(e,o={})=>{try{if(!yr.existsSync(e))return o;let t=yr.readFileSync(e),n=t.toString("utf8").trim();if(n.startsWith("{")||n.startsWith("["))return JSON.parse(n);try{let r=Sn(n);return JSON.parse(r)}catch{}let i=cc(t).toString("utf8");if(i.startsWith("{")||i.startsWith("["))return JSON.parse(i);throw new Error("Unsupported or corrupt encryption format")}catch(t){return console.error(`Vault Read Error [${_s.basename(e)}]:`,t.message),o}},ke=(e,o)=>{try{let t=_s.dirname(e);yr.existsSync(t)||yr.mkdirSync(t,{recursive:!0});let n=JSON.stringify(o,null,2),i=wr(n);yr.writeFileSync(e,i,"utf8")}catch(t){console.error(`Vault Write Error [${_s.basename(e)}]:`,t.message)}},zr=ye,Jr=ke});var ca={};bs(ca,{BACKUPS_DIR:()=>En,DATA_DIR:()=>Qr,FLUXFLOW_DIR:()=>_n,HISTORY_FILE:()=>Un,LEDGER_FILE:()=>rn,LOGS_DIR:()=>Io,MEMORIES_FILE:()=>Bt,PATHS_FILE:()=>Zr,SECRET_DIR:()=>to,SETTINGS_FILE:()=>eo,TEMP_MEM_CHAT_FILE:()=>Uo,TEMP_MEM_FILE:()=>ho,USAGE_FILE:()=>Wt});import dc from"os";import ko from"path";import ia from"fs";import aa from"crypto";var _n,eo,la,Qr,Io,to,Un,Wt,Bt,ho,Uo,En,rn,Zr,oo=ae(()=>{_n=ko.join(dc.homedir(),".fluxflow"),eo=ko.join(_n,"settings.json"),la=null;try{if(ia.existsSync(eo)){let e=ia.readFileSync(eo,"utf8").trim(),o;if(e.startsWith("{"))o=JSON.parse(e);else{let t=e.split(":");if(t.length===2){let n=Buffer.from(t[0],"hex"),i=t[1],r=aa.createHash("sha256").update("fluxflow-cli-sanctuary-key").digest(),l=aa.createDecipheriv("aes-256-cbc",r,n),d=l.update(i,"hex","utf8");d+=l.final("utf8"),o=JSON.parse(d)}}if(o){let t=o.systemSettings||{};t.useExternalData&&t.externalDataPath&&(la=t.externalDataPath)}}}catch{}Qr=la||_n,Io=ko.join(Qr,"logs"),to=ko.join(Qr,"secret"),Un=ko.join(to,"history.json"),Wt=ko.join(_n,"usage.json"),Bt=ko.join(to,"memories.json"),ho=ko.join(to,"memory-temp.json"),Uo=ko.join(to,"temp-memory-chat.json"),En=ko.join(Qr,"backups"),rn=ko.join(to,"ledger.json"),Zr=ko.join(to,"path.json")});var os={};bs(os,{getAPIKey:()=>fc,getProviderAPIKey:()=>es,getSearchSecrets:()=>hc,getSecret:()=>pc,removeAPIKey:()=>Us,removeSecret:()=>da,saveAPIKey:()=>gc,saveProviderAPIKey:()=>ts,saveSearchId:()=>yc,saveSearchKey:()=>xc,saveSecret:()=>bn});import uc from"fs-extra";import mc from"path";var Cn,fc,es,ts,pc,bn,hc,gc,xc,yc,da,Us,Tr=ae(()=>{Do();oo();Cn=mc.join(to,"secrets.json"),fc=async()=>{try{let e=ye(Cn,{});if(e.API_KEY)return e.API_KEY}catch{}return null},es=async e=>{try{let o=ye(Cn,{});if(e==="Google")return o.GOOGLE_API_KEY||o.API_KEY||null;if(e==="DeepSeek")return o.DEEPSEEK_API_KEY||null;if(e==="OpenRouter")return o.OPENROUTER_API_KEY||null}catch{}return null},ts=async(e,o)=>{e==="Google"?(await bn("GOOGLE_API_KEY",o),await bn("API_KEY",o)):e==="DeepSeek"?await bn("DEEPSEEK_API_KEY",o):e==="OpenRouter"&&await bn("OPENROUTER_API_KEY",o)},pc=async e=>{try{return ye(Cn,{})[e]||null}catch{return null}},bn=async(e,o)=>{await uc.ensureDir(to);let t=ye(Cn,{});t[e]=o,ke(Cn,t)},hc=async()=>{try{let e=ye(Cn,{});return{key:e.GOOGLE_API_KEY||e.API_KEY,cx:e.SEARCH_ID}}catch{}return{key:null,cx:null}},gc=async e=>bn("API_KEY",e),xc=async e=>bn("GOOGLE_API_KEY",e),yc=async e=>bn("SEARCH_ID",e),da=async e=>{try{let o=ye(Cn,{});delete o[e],ke(Cn,o)}catch{}},Us=async()=>da("API_KEY")});var ua,ma=ae(()=>{ua=(e=!0,o=!0)=>`
|
|
115
|
+
${T}`)}),u.on("error",p=>{if(l&&r&&p.code==="ENOENT"){let g=Qi(t,!1);return Ds(e,g,t,n,i,!1)}It=null,e(`ERROR: Failed to start command [${t}]: ${p.message}`)})}});import we,{useState as xr}from"react";import{Box as At,Text as Rt,useInput as tc}from"ink";import oc from"ink-text-input";function Fs({systemSettings:e,setSystemSettings:o,apiTier:t,setActiveView:n,setInputConfig:i,saveSettings:r,quotas:l,setMessages:d,aiProvider:f}){let[u,c]=xr("categories"),[a,m]=xr(0),[p,g]=xr(0),[E,T]=xr(null),[w,M]=xr(""),v=I=>{switch(I){case"memory":return[{label:"Toggle Memory",value:"memory",status:e.memory?"ON":"OFF"}];case"security":return[{label:"Sandbox Preset",value:"sandboxPreset",status:Zi(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:$s(e.alwaysAskCommands),section:"Sandbox"},{label:"Auto Approve Commands",value:"autoApprove",status:$s(e.autoApproveCommands),section:"Sandbox"},{label:"Auto Disapprove Commands",value:"autoDisallow",status:$s(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:t}];default:return[]}},R=on[a].id,q=v(R);tc((I,L)=>{if(E){L.escape&&T(null);return}if(u==="categories")L.upArrow?m(D=>(D-1+on.length)%on.length):L.downArrow?m(D=>(D+1)%on.length):L.return||L.rightArrow?on[a].id==="exit"?n("chat"):(c("items"),g(0)):L.escape&&n("chat");else if(u==="items"){if(L.upArrow)g(D=>(D-1+q.length)%q.length);else if(L.downArrow)g(D=>(D+1)%q.length);else if(L.leftArrow||L.escape)c("categories");else if(L.return){let D=q[p];B(D)}}});let B=I=>{if(I.value==="memory")o(L=>({...L,memory:!L.memory}));else if(I.value==="sandboxPreset"){let L=Zi(e),D=["Autonomous","Balanced","Strict"],j=(D.indexOf(L)+1)%D.length,Z=D[j];o(X=>{let z={...X,sandboxPreset:Z};return Z==="Strict"?(z.autoExec=!1,z.allowExternalAccess=!1,z.networkAccess=!1,z.autoApproveCommands="",z.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",z.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",z.autoApproveGit=!1):Z==="Balanced"?(z.autoExec=!0,z.allowExternalAccess=!1,z.networkAccess=!0,z.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",z.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",z.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",z.autoApproveGit=!1):Z==="Autonomous"&&(z.autoExec=!0,z.allowExternalAccess=!0,z.networkAccess=!0,z.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",z.autoDisallowCommands="",z.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",z.autoApproveGit=!0),z})}else if(I.value==="autoExec")e.autoExec?o(L=>({...L,autoExec:!1,sandboxPreset:"Custom"})):e.allowExternalAccess?n("doubleDanger"):n("autoExecDanger");else if(I.value==="externalAccess")e.allowExternalAccess?o(L=>({...L,allowExternalAccess:!1,sandboxPreset:"Custom"})):e.autoExec?n("doubleDanger"):n("externalDanger");else if(I.value==="networkAccess")o(L=>({...L,networkAccess:L.networkAccess===!1,sandboxPreset:"Custom"}));else if(I.value==="alwaysAsk")T("alwaysAskCommands"),M(e.alwaysAskCommands||"");else if(I.value==="autoApprove")T("autoApproveCommands"),M(e.autoApproveCommands||"");else if(I.value==="autoApproveGit")o(L=>({...L,autoApproveGit:!L.autoApproveGit,sandboxPreset:"Custom"}));else if(I.value==="autoDisallow")T("autoDisallowCommands"),M(e.autoDisallowCommands||"");else if(I.value==="apiTier")n("apiTier");else if(I.value==="aiProvider")n("selectProvider");else if(I.value==="autoDelete"){let L=["1d","7d","30d"],Q=(L.indexOf(e.autoDeleteHistory||"30d")+1)%L.length;o(j=>({...j,autoDeleteHistory:L[Q]}))}else if(I.value==="autoUpdate")o(L=>({...L,autoUpdate:!L.autoUpdate}));else if(I.value==="externalData")if(!e.useExternalData)i({label:"Enter absolute path for External AppData:",note:"All history, logs and secrets will be stored here. ~/.fluxflow/settings.json stays as anchor.",key:"externalDataPath",value:e.externalDataPath||""}),n("input");else{let L={...e,useExternalData:!1};o(L),r({systemSettings:L,apiTier:t,quotas:l}),d(D=>[...D,{id:Date.now(),role:"system",text:"\u{1F3E0} [STORAGE RESET] Flux Flow will return to default ~/.fluxflow after restart."}]),n("chat")}else I.value==="updateManager"&&n("updateManager")};return we.createElement(At,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%",minHeight:32},we.createElement(At,{paddingX:1,paddingY:0,marginBottom:0,borderStyle:"single",borderColor:"magenta",width:"100%"},we.createElement(Rt,{color:"magenta",bold:!0},"\u{1F527} SYSTEM CONFIGURATION")),we.createElement(At,{flexDirection:"row",width:"100%",minHeight:26},we.createElement(At,{flexDirection:"column",width:"30%",borderStyle:"round",borderColor:u==="categories"?"cyan":"gray",padding:1,paddingY:0},we.createElement(At,{marginBottom:1},we.createElement(Rt,{color:u==="categories"?"cyan":"white",bold:!0,underline:!0},"CATEGORIES")),on.map((I,L)=>{let D=a===L,Q=I.id==="exit";return we.createElement(At,{key:I.id,marginTop:Q?17:0,backgroundColor:D?u==="categories"?"#2a2a2a":"#1e1e1e":void 0,paddingX:1},we.createElement(Rt,{color:D?u==="categories"?"cyan":"yellow":"white",bold:D},D?"\u276F ":" ",I.label))})),we.createElement(At,{flexDirection:"column",width:"70%",borderStyle:"round",borderColor:u==="items"?"cyan":"gray",paddingX:1,marginLeft:1,paddingY:0},we.createElement(At,{marginBottom:1},we.createElement(Rt,{color:u==="items"?"cyan":"white",bold:!0,underline:!0},on[a].label.toUpperCase()," SETTINGS")),q.length>0?(()=>{let I=null,L=[],D=Te=>(Te||"").split(",").map(Ge=>Ge.trim().toLowerCase()).filter(Boolean),Q=D(e.autoApproveCommands),j=D(e.autoDisallowCommands),Z=D(e.alwaysAskCommands),X=[...Q,...j,...Z],z=new Set(X),Ct=R==="security"&&X.length!==z.size;return q.forEach((Te,Ge)=>{let nt=u==="items"&&p===Ge,fe=Te.label.length,ut=Math.max(2,35-fe),Je=".".repeat(ut),je=me=>R==="security"?(me.value==="autoExec"||me.value==="externalAccess")&&me.status==="ON"?"red":"yellow":me.status?.startsWith("\u2713")?"green":me.status?.startsWith("\u26A0")?"yellow":me.status==="ON"?"green":me.status==="OFF"?"red":"yellow";Te.section&&Te.section!==I&&(I=Te.section,L.push(we.createElement(At,{key:`sec-hdr-${Te.section}`,marginTop:L.length>0?1:0,marginBottom:0,paddingX:1},we.createElement(Rt,{color:"magenta",bold:!0,underline:!0},"\u{1F4C2} ",Te.section.toUpperCase()))));let Fe=nt&&E&&(E==="alwaysAskCommands"&&Te.value==="alwaysAsk"||E==="autoApproveCommands"&&Te.value==="autoApprove"||E==="autoDisallowCommands"&&Te.value==="autoDisallow"),Qe=Te.value==="alwaysAsk"||Te.value==="autoApprove"||Te.value==="autoDisallow";L.push(we.createElement(At,{key:Te.value,flexDirection:"column"},we.createElement(At,{backgroundColor:nt&&!Fe?"#2a2a2a":void 0,paddingX:2},we.createElement(Rt,{color:nt?"cyan":"white",bold:nt},nt?"\u276F ":" ",Te.label),!Qe&&we.createElement(we.Fragment,null,we.createElement(Rt,{color:"gray",dimColor:!0},Je),we.createElement(Rt,{color:je(Te),bold:!0},Te.value==="aiProvider"?Te.status:`[ ${Te.status} ]`))),Qe&&!Fe&&Te.status!=="None"&&we.createElement(At,{paddingX:4,marginBottom:1},we.createElement(Rt,{color:"gray",dimColor:!0},"\u21B3 ",Te.status)),Fe&&we.createElement(At,{flexDirection:"column",marginLeft:4,marginBottom:1},we.createElement(At,{paddingX:1,borderStyle:"single",borderColor:"cyan",flexDirection:"row"},we.createElement(Rt,{color:"cyan",bold:!0},"> "," "),we.createElement(oc,{value:w,onChange:M,onSubmit:me=>{let yo={...e,[E]:me.trim(),sandboxPreset:"Custom"};o(yo),r({systemSettings:yo,apiTier:t,quotas:l}),T(null)}})),we.createElement(Rt,{color:"gray",dimColor:!0,italic:!0}," Comma separated \u2022 Press Enter to save, Esc to cancel"))))}),R==="other"&&L.push(we.createElement(At,{key:"pty-notice",marginTop:19,paddingX:1},we.createElement(Rt,{color:Nn?"green":"yellow"},Nn?"\u2713 Advance Interactive Terminal Supported":"\u26A0 Interactive Terminal is Limited"))),Ct&&L.push(we.createElement(At,{key:"conflict-warning",marginTop:1,paddingX:1},we.createElement(Rt,{color:"red",dimColor:!0,italic:!0},"* Conflicting commands will be ignored and defaulted to highest priority"))),L})():we.createElement(At,{paddingX:1},we.createElement(Rt,{color:"gray",italic:!0},on[a].desc)))),we.createElement(At,{paddingX:1,marginTop:0,flexDirection:"row",justifyContent:"space-between"},we.createElement(Rt,{color:"gray",dimColor:!0,italic:!0},u==="categories"?"\u25B2\u25BC Select Category \u2022 Enter/\u25BA to configure":"\u25B2\u25BC Select Option \u2022 Enter to Toggle \u2022 \u25C4/ESC to go back"),u==="categories"&&we.createElement(Rt,{color:"gray",dimColor:!0},on[a].desc)))}var on,Zi,$s,ea=ae(async()=>{await gr();on=[{id:"memory",label:"\u{1F9E0} Memory",desc:"Manage system context & agent's memory"},{id:"security",label:"\u{1F512} Security",desc:"Configure permissions & data safety"},{id:"updater",label:"\u{1F504} Updater",desc:"Manage application updates"},{id:"other",label:"\u{1F4CB} Other",desc:"Miscellaneous preferences"},{id:"exit",label:"\u{1F6AA} Exit Settings",desc:"Return to chat view"}],Zi=e=>{let o=e.autoApproveCommands||"",t=e.autoDisallowCommands||"",n=e.alwaysAskCommands||"",i=e.autoExec===!1&&e.allowExternalAccess===!1&&e.networkAccess===!1&&o===""&&t==="rm -rf, rm -f, del /f, del /q, rd /s, rmdir /s, format, mkfs, dd if=/dev, shred, srm, Remove-Item -Recurse -Force, Initialize-Disk, Clear-Disk, format c:, flashrom, nvram -c"&&n==="killall, pkill, taskkill, shutdown, reboot, init 0, init 6, Stop-Process, Stop-Service, mv /*, move c:\\*, chmod 000, chmod -R 777, chown, icacls, netsh advfirewall, iptables -F, ufw disable, git reset --hard, git clean -fd, npm r, npm uninstall"&&e.autoApproveGit===!1,r=e.autoExec===!0&&e.allowExternalAccess===!1&&e.networkAccess!==!1&&o==="ls, dir, cat, type, echo, pwd, cd, git status, git log, git diff, git branch, git show, help, mkdir, touch, md, whoami, hostname, ps, Get-Process, date, time, mkdir"&&t==="rm -rf, rm -f, del /f, del /q, rd /s, rmdir /s, format, mkfs, dd if=/dev, shred, srm, Remove-Item -Recurse -Force, Initialize-Disk, Clear-Disk, format c:, flashrom, nvram -c"&&n==="killall, pkill, taskkill, Stop-Process, mv /*, move c:\\*, chmod 000, chmod -R 777, chown, icacls, shutdown, reboot, init 0, init 6, git reset --hard, git clean -fd, npm r, npm uninstall"&&e.autoApproveGit===!1,l=e.autoExec===!0&&e.allowExternalAccess===!0&&e.networkAccess!==!1&&o==="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"&&t===""&&n==="rm -rf, rm -f, del /f, del /q, rd /s, rmdir /s, format, mkfs, dd if=/dev, shred, srm, Remove-Item -Recurse -Force, Initialize-Disk, Clear-Disk, format c:, flashrom, nvram -c"&&e.autoApproveGit===!0;return i?"Strict":r?"Balanced":l?"Autonomous":e.sandboxPreset||"Custom"},$s=e=>!e||e.trim()===""?"None":e.length>40?e.substring(0,40)+"...":e});import Lo,{useState as Ps,useEffect as nc}from"react";import{Box as Zn,Text as qr}from"ink";import rc from"ink-text-input";function Bs({initialData:e,onSave:o,onCancel:t}){let[n,i]=Ps(0),[r,l]=Ps(""),[d,f]=Ps(()=>({name:e?.name||"",nickname:e?.nickname||"",instructions:e?.instructions||""})),u=[{key:"name",label:"Enter your Name: "},{key:"nickname",label:"Enter a Nickname (Agent will use this): "},{key:"instructions",label:"System Instructions (Persona overrides): "}];nc(()=>{let a=u[n].key;l(d[a]||"")},[n,d]);let c=a=>{if(a.trim().toLowerCase()==="/cancel"){t();return}let m=u[n].key,p={...d,[m]:a.trim()};f(p),l(""),n<u.length-1?i(n+1):o(p)};return Lo.createElement(Zn,{borderStyle:"round",borderColor:"gray",padding:0,marginTop:1,flexShrink:0,flexDirection:"column",width:"100%"},Lo.createElement(Zn,{paddingX:1,marginBottom:1},Lo.createElement(qr,{color:"magenta",bold:!0},"\u{1F464} DEVELOPER PROFILE CONFIGURATION")),Lo.createElement(Zn,{paddingX:1,flexDirection:"column"},Lo.createElement(Zn,null,Lo.createElement(qr,{color:"cyan",bold:!0},u[n].label),Lo.createElement(rc,{value:r,onChange:l,onSubmit:c})),Lo.createElement(Zn,{marginTop:1},Lo.createElement(qr,{color:"gray",dimColor:!0,italic:!0},"Step ",n+1," of ",u.length))),Lo.createElement(Zn,{paddingX:1,marginTop:1},Lo.createElement(qr,{color:"gray",dimColor:!0,italic:!0},"(Enter to submit \u2022 Type /cancel to abort)")))}var ta=ae(()=>{});import ct,{useState as Ns}from"react";import{Box as Co,Text as nn,useInput as sc}from"ink";import ic from"ink-text-input";var ac,oa,na=ae(()=>{wn();ac=({question:e,options:o,onResolve:t})=>{let[n,i]=Ns(!1),[r,l]=Ns(""),[d,f]=Ns(0),u=[...o,{id:"CUSTOM",label:"Suggest something else...",description:"Provide a custom response"}];sc((a,m)=>{if(!n&&((m.leftArrow||m.upArrow)&&f(p=>Math.max(0,p-1)),(m.rightArrow||m.downArrow)&&f(p=>Math.min(u.length-1,p+1)),m.return)){let p=u[d];p.id==="CUSTOM"?i(!0):t(p.label)}});let c=Ce(2);return n?ct.createElement(Co,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},ct.createElement(Co,{paddingX:1},ct.createElement(nn,{color:"cyan",bold:!0},"\u{1F4AC} SUGGEST SOMETHING ELSE")),ct.createElement(Co,{marginTop:1,paddingX:1},ct.createElement(nn,{italic:!0,color:"gray"},"Replying to: ",e)),ct.createElement(Co,{marginTop:1,paddingX:1,flexDirection:"row"},ct.createElement(nn,{color:"cyan",bold:!0},"\u{1F4A0} "),ct.createElement(ic,{value:r,onChange:l,onSubmit:()=>t(r)})),ct.createElement(Co,{marginTop:1,paddingX:1,marginBottom:1},ct.createElement(nn,{color:"gray",dimColor:!0,italic:!0},"(Press Enter to send)"))):ct.createElement(Co,{flexDirection:"column",borderStyle:"round",borderColor:"gray",padding:0,width:"100%"},ct.createElement(Co,{paddingX:1,marginBottom:1},ct.createElement(nn,{color:"cyan",bold:!0},"\u{1F4AC} AGENT REQUEST: ACTION REQUIRED")),ct.createElement(Co,{paddingX:1,marginBottom:1},ct.createElement(nn,{bold:!0,color:"white"},e)),ct.createElement(Co,{flexDirection:"column",width:"100%"},u.map((a,m)=>{let p=m===d;return ct.createElement(Co,{key:a.id,flexDirection:"column",width:"100%",backgroundColor:p?"#2a2a2a":void 0,paddingX:1,marginBottom:m===u.length-1?0:1},ct.createElement(nn,{color:p?"cyan":"white",bold:p},p?"\u276F ":" ",a.label),a.description&&ct.createElement(Co,{marginLeft:4},ct.createElement(nn,{color:"gray",italic:!0,dimColor:!0},a.description)))})),ct.createElement(Co,{paddingX:1,marginTop:1,marginBottom:1},ct.createElement(nn,{color:"gray",dimColor:!0,italic:!0},"(Use Arrows to navigate, Enter to confirm)")))},oa=ac});import yr from"fs";import _s from"path";import Vr from"crypto";var lc,cc,ra,sa,wr,Sn,ye,ke,zr,Jr,Do=ae(()=>{lc=66,cc=e=>{let o=Buffer.isBuffer(e)?e:Buffer.from(e),t=Buffer.alloc(o.length);for(let n=0;n<o.length;n++)t[n]=o[n]^lc;return t},ra="aes-256-cbc",sa=Vr.createHash("sha256").update("fluxflow-cli-sanctuary-key").digest(),wr=e=>{let o=Vr.randomBytes(16),t=Vr.createCipheriv(ra,sa,o),n=t.update(e,"utf8","hex");return n+=t.final("hex"),o.toString("hex")+":"+n},Sn=e=>{let o=e.split(":");if(o.length!==2)throw new Error("Invalid AES format");let t=Buffer.from(o[0],"hex"),n=o[1],i=Vr.createDecipheriv(ra,sa,t),r=i.update(n,"hex","utf8");return r+=i.final("utf8"),r},ye=(e,o={})=>{try{if(!yr.existsSync(e))return o;let t=yr.readFileSync(e),n=t.toString("utf8").trim();if(n.startsWith("{")||n.startsWith("["))return JSON.parse(n);try{let r=Sn(n);return JSON.parse(r)}catch{}let i=cc(t).toString("utf8");if(i.startsWith("{")||i.startsWith("["))return JSON.parse(i);throw new Error("Unsupported or corrupt encryption format")}catch(t){return console.error(`Vault Read Error [${_s.basename(e)}]:`,t.message),o}},ke=(e,o)=>{try{let t=_s.dirname(e);yr.existsSync(t)||yr.mkdirSync(t,{recursive:!0});let n=JSON.stringify(o,null,2),i=wr(n);yr.writeFileSync(e,i,"utf8")}catch(t){console.error(`Vault Write Error [${_s.basename(e)}]:`,t.message)}},zr=ye,Jr=ke});var ca={};bs(ca,{BACKUPS_DIR:()=>En,DATA_DIR:()=>Qr,FLUXFLOW_DIR:()=>_n,HISTORY_FILE:()=>Un,LEDGER_FILE:()=>rn,LOGS_DIR:()=>Io,MEMORIES_FILE:()=>Bt,PATHS_FILE:()=>Zr,SECRET_DIR:()=>to,SETTINGS_FILE:()=>eo,TEMP_MEM_CHAT_FILE:()=>Uo,TEMP_MEM_FILE:()=>ho,USAGE_FILE:()=>Wt});import dc from"os";import ko from"path";import ia from"fs";import aa from"crypto";var _n,eo,la,Qr,Io,to,Un,Wt,Bt,ho,Uo,En,rn,Zr,oo=ae(()=>{_n=ko.join(dc.homedir(),".fluxflow"),eo=ko.join(_n,"settings.json"),la=null;try{if(ia.existsSync(eo)){let e=ia.readFileSync(eo,"utf8").trim(),o;if(e.startsWith("{"))o=JSON.parse(e);else{let t=e.split(":");if(t.length===2){let n=Buffer.from(t[0],"hex"),i=t[1],r=aa.createHash("sha256").update("fluxflow-cli-sanctuary-key").digest(),l=aa.createDecipheriv("aes-256-cbc",r,n),d=l.update(i,"hex","utf8");d+=l.final("utf8"),o=JSON.parse(d)}}if(o){let t=o.systemSettings||{};t.useExternalData&&t.externalDataPath&&(la=t.externalDataPath)}}}catch{}Qr=la||_n,Io=ko.join(Qr,"logs"),to=ko.join(Qr,"secret"),Un=ko.join(to,"history.json"),Wt=ko.join(_n,"usage.json"),Bt=ko.join(to,"memories.json"),ho=ko.join(to,"memory-temp.json"),Uo=ko.join(to,"temp-memory-chat.json"),En=ko.join(Qr,"backups"),rn=ko.join(to,"ledger.json"),Zr=ko.join(to,"path.json")});var os={};bs(os,{getAPIKey:()=>fc,getProviderAPIKey:()=>es,getSearchSecrets:()=>hc,getSecret:()=>pc,removeAPIKey:()=>Us,removeSecret:()=>da,saveAPIKey:()=>gc,saveProviderAPIKey:()=>ts,saveSearchId:()=>yc,saveSearchKey:()=>xc,saveSecret:()=>bn});import uc from"fs-extra";import mc from"path";var Cn,fc,es,ts,pc,bn,hc,gc,xc,yc,da,Us,Tr=ae(()=>{Do();oo();Cn=mc.join(to,"secrets.json"),fc=async()=>{try{let e=ye(Cn,{});if(e.API_KEY)return e.API_KEY}catch{}return null},es=async e=>{try{let o=ye(Cn,{});if(e==="Google")return o.GOOGLE_API_KEY||o.API_KEY||null;if(e==="DeepSeek")return o.DEEPSEEK_API_KEY||null;if(e==="OpenRouter")return o.OPENROUTER_API_KEY||null}catch{}return null},ts=async(e,o)=>{e==="Google"?(await bn("GOOGLE_API_KEY",o),await bn("API_KEY",o)):e==="DeepSeek"?await bn("DEEPSEEK_API_KEY",o):e==="OpenRouter"&&await bn("OPENROUTER_API_KEY",o)},pc=async e=>{try{return ye(Cn,{})[e]||null}catch{return null}},bn=async(e,o)=>{await uc.ensureDir(to);let t=ye(Cn,{});t[e]=o,ke(Cn,t)},hc=async()=>{try{let e=ye(Cn,{});return{key:e.GOOGLE_API_KEY||e.API_KEY,cx:e.SEARCH_ID}}catch{}return{key:null,cx:null}},gc=async e=>bn("API_KEY",e),xc=async e=>bn("GOOGLE_API_KEY",e),yc=async e=>bn("SEARCH_ID",e),da=async e=>{try{let o=ye(Cn,{});delete o[e],ke(Cn,o)}catch{}},Us=async()=>da("API_KEY")});var ua,ma=ae(()=>{ua=(e=!0,o=!0)=>`
|
|
116
116
|
Your tool syntax is: '[tool:functions.ToolName(args...)]'
|
|
117
117
|
|
|
118
118
|
-- CHAT MANAGEMENT TOOLS (MUST CALL THESE 2 TOOLS ALWAYS) --
|