fluxflow-cli 4.6.0 → 4.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{ai-MBEY7TQE.js → ai-P2EI77UO.js} +1 -1
- package/dist/chunks/app-E4LPHXZS.js +224 -0
- package/dist/chunks/chunk-4TZKD2XR.js +1 -0
- package/dist/chunks/{chunk-3JTGIHTN.js → chunk-7PJOF5I2.js} +1 -1
- package/dist/chunks/{chunk-INAFOYCM.js → chunk-A2MCYGU4.js} +1 -1
- package/dist/chunks/{chunk-N5EE3XWJ.js → chunk-IJCIHHAH.js} +2 -2
- package/dist/chunks/{chunk-27R5UNHK.js → chunk-JGU5KBCM.js} +211 -203
- package/dist/chunks/{chunk-ACHIC75V.js → chunk-JM3JCK2K.js} +1 -1
- package/dist/chunks/{chunk-XGA3P7TV.js → chunk-QLPFOHKZ.js} +1 -1
- package/dist/chunks/{chunk-LXTXILI5.js → chunk-ROHVHR3J.js} +1 -1
- package/dist/chunks/export-PSA6YZMJ.js +1 -0
- package/dist/chunks/{paths-R3DD7CRF.js → paths-CHZDSDRF.js} +1 -1
- package/dist/chunks/{screen_grid-PVIPPVR7.js → screen_grid-WWZV4QEB.js} +1 -1
- package/dist/chunks/{secrets-BTHIU63L.js → secrets-K4C4B5TU.js} +1 -1
- package/dist/chunks/settings-QKREUSRE.js +1 -0
- package/dist/chunks/usageServer-2ICYG54E.js +1 -0
- package/dist/cli.js +3 -3
- package/dist/package.json +1 -1
- package/package.json +1 -1
- package/dist/chunks/app-H32HU2V4.js +0 -239
- package/dist/chunks/chunk-I27MASHH.js +0 -1
- package/dist/chunks/export-NRMLNZUN.js +0 -1
- package/dist/chunks/settings-TAIBP5U4.js +0 -1
- package/dist/chunks/usageServer-C2QUDNFE.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as a,d as c}from"./chunk-SIINYZWE.js";import{e as E}from"./chunk-
|
|
1
|
+
import{c as a,d as c}from"./chunk-SIINYZWE.js";import{e as E}from"./chunk-4TZKD2XR.js";import r from"fs-extra";import A from"path";var s=A.join(E,"secrets.json"),u=async()=>{try{let e=a(s,{});if(e.API_KEY)return e.API_KEY}catch{}return null},f=async e=>{try{let t=a(s,{});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==="Mistral")return t.MISTRAL_API_KEY||null;if(e==="NVIDIA")return t.NVIDIA_API_KEY||null;if(e==="Ollama")return t.OLLAMA_API_KEY||"LOCAL";if(e==="CrofAI"||e==="Crof")return t.CROFAI_API_KEY||null;if(e==="InferX")return t.INFERX_API_KEY||null;if(e==="SenseNova"||e==="Sensenova")return t.SENSENOVA_API_KEY||null}catch{}return null},Y=async(e,t)=>{e==="Google"?(await n("GOOGLE_API_KEY",t),await n("API_KEY",t)):e==="DeepSeek"?await n("DEEPSEEK_API_KEY",t):e==="OpenRouter"?await n("OPENROUTER_API_KEY",t):e==="Mistral"?await n("MISTRAL_API_KEY",t):e==="NVIDIA"?await n("NVIDIA_API_KEY",t):e==="Ollama"?await n("OLLAMA_API_KEY",t):e==="CrofAI"||e==="Crof"?await n("CROFAI_API_KEY",t):e==="InferX"?await n("INFERX_API_KEY",t):(e==="SenseNova"||e==="Sensenova")&&await n("SENSENOVA_API_KEY",t)},S=async e=>{try{return a(s,{})[e]||null}catch{return null}},n=async(e,t)=>{await r.ensureDir(E);let I=a(s,{});I[e]=t,c(s,I)},O=async()=>{try{let e=a(s,{});return{key:e.GOOGLE_API_KEY||e.API_KEY,cx:e.SEARCH_ID}}catch{}return{key:null,cx:null}},i=async e=>n("API_KEY",e),y=async e=>n("GOOGLE_API_KEY",e),R=async e=>n("SEARCH_ID",e),_=async e=>{try{let t=a(s,{});delete t[e],c(s,t)}catch{}},N=async()=>_("API_KEY");export{u as a,f as b,Y as c,S as d,n as e,O as f,i as g,y as h,R as i,_ as j,N as k};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{h as K}from"./chunk-N5EE3XWJ.js";import{a as et,b as _}from"./chunk-SIINYZWE.js";import{h as G,i as L}from"./chunk-I27MASHH.js";import p from"fs-extra";import st from"path";var ut=()=>Math.random().toString(36).substring(2)+Date.now().toString(36),r=null,A=null,ot=0,F=!1,S={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:[]},O=(e,i)=>{if(!e)return{};let n=Object.keys(e),c=new Date(new Date(i).getTime()-720*60*60*1e3),t={};for(let s of n)new Date(s)>=c&&(t[s]=e[s]);return t},j=async()=>{let e=new Date().toISOString().split("T")[0];try{!await p.exists(L)&&await p.exists(G)&&(await p.ensureDir(st.dirname(L)),await p.move(G,L))}catch{}let i=L+".tmp",n=null;try{if(await p.exists(i)){let t=(await p.readFile(i,"utf8")).trim(),s=null;if(t.startsWith("{")||t.startsWith("[")?s=JSON.parse(t):s=JSON.parse(_(t)),s&&s.date&&s.stats){n=s;try{await p.rename(i,L)}catch{}}else try{await p.remove(i)}catch{}}}catch{try{await p.remove(i)}catch{}}if(!n)try{if(await p.exists(L)){let t=(await p.readFile(L,"utf8")).trim();t.startsWith("{")||t.startsWith("[")?n=JSON.parse(t):n=JSON.parse(_(t))}}catch{}let c=n;if(c){let t=c.stats||{...S},s={...S,...t};Array.isArray(s.imageCalls)||(s.imageCalls=[]);let a=c.history||{},o=O(a,e);if(Object.keys(a).length!==Object.keys(o).length&&(F=!0),c.date===e)return{...c,stats:s,history:o};{let l=c.date,f=s,d={...o};return l&&(d[l]=f),{date:e,stats:{...S},history:O(d,e)}}}return{date:e,stats:{...S},history:{}}},$=async()=>{if(!(!F||!r))try{await p.ensureDir(st.dirname(L));let e=null;try{if(await p.exists(L)){let t=(await p.readFile(L,"utf8")).trim();t.startsWith("{")||t.startsWith("[")?e=JSON.parse(t):e=JSON.parse(_(t))}}catch{}if(e&&e.date===r.date&&e.stats){for(let t in r.stats)if(e.stats[t]!==void 0){if(Array.isArray(r.stats[t])){let s=Array.isArray(e.stats[t])?e.stats[t]:[],a=r.stats[t],o=new Map;for(let l of[...s,...a])l&&l.timestamp&&o.set(l.timestamp,l);r.stats[t]=Array.from(o.values())}else if(typeof r.stats[t]=="number")r.stats[t]=Math.max(r.stats[t],Number(e.stats[t])||0);else if(r.stats[t]&&typeof r.stats[t]=="object"){let s=e.stats[t]||{},a=r.stats[t];for(let o in s)if(typeof s[o]=="number")a[o]=Math.max(a[o]||0,s[o]);else if(s[o]&&typeof s[o]=="object"){a[o]||(a[o]={});for(let l in s[o])if(typeof s[o][l]=="number")a[o][l]=Math.max(a[o][l]||0,s[o][l]);else if(s[o][l]&&typeof s[o][l]=="object"){a[o][l]||(a[o][l]={});for(let f in s[o][l])a[o][l][f]=Math.max(a[o][l][f]||0,s[o][l][f])}}}}}if(e&&e.history){let t={...r.history||{}};for(let s in e.history)if(t[s])for(let a in t[s])if(a==="imageCalls"){let o=Array.isArray(e.history[s].imageCalls)?e.history[s].imageCalls:[],l=Array.isArray(t[s].imageCalls)?t[s].imageCalls:[],f=new Map;for(let d of[...o,...l])d&&d.timestamp&&f.set(d.timestamp,d);t[s].imageCalls=Array.from(f.values())}else typeof t[s][a]=="number"&&(t[s][a]=Math.max(t[s][a],Number(e.history[s][a])||0));else t[s]=e.history[s];r.history=O(t,r.date||today)}else if(r&&r.history){let t=new Date().toISOString().split("T")[0];r.history=O(r.history,t)}r.saveId=ut();let i=L+".tmp",n=et(JSON.stringify(r,null,2));await p.writeFile(i,n,"utf8");let c=await p.open(i,"r+");await p.fsync(c),await p.close(c),await p.rename(i,L),F=!1,ot=Date.now()}catch{}},J=()=>{if(F=!0,A)return;let e=Date.now(),i=Math.max(0,1500-(e-ot));A=setTimeout(async()=>{await $(),A=null},i),A.unref&&A.unref()},wt=async()=>{r=await j(),F&&J()},Tt=async()=>{A&&(clearTimeout(A),A=null),await $()},v=async()=>{let e=new Date().toISOString().split("T")[0];if(!r)r=await j();else if(r.date!==e){let i=r.date,n=r.stats,c=r.history||{};n&&(c[i]=n),r={date:e,stats:{...S},history:O(c,e)},F=!0,await $()}return r&&r.stats&&!Array.isArray(r.stats.imageCalls)&&(r.stats.imageCalls=[]),r.stats},it=async()=>{let e=new Date().toISOString().split("T")[0];r||(r=await j()),r.date!==e&&await v();let i=r.history||{},n=O(i,e);r.history=n;let c=r.stats||{...S},t={...S};t.imageCalls=[],t.models={};let s=(a,o)=>{for(let l in a)if(l==="imageCalls")a.imageCalls=[...a.imageCalls||[],...o.imageCalls||[]];else if(l==="models"){let f=o.models||{};for(let d in f){a.models[d]||(a.models[d]={});for(let m in f[d]){a.models[d][m]||(a.models[d][m]={tokens:0,cachedTokens:0,candidateTokens:0});let u=a.models[d][m],h=f[d][m];u.tokens+=h.tokens||0,u.cachedTokens+=h.cachedTokens||0,u.candidateTokens+=h.candidateTokens||0}}}else typeof a[l]=="number"&&(a[l]+=o[l]||0)};s(t,c);for(let a in n)s(t,n[a]);return t},Lt=async(e,i)=>{e==="toolSuccess"?q.toolSuccess++:e==="toolFailure"?q.toolFailure++:e==="toolDenied"&&q.toolDenied++;let n=await v();n[e]!==void 0&&n[e]++,i&&e==="agent"&&(n.providerRequests||(n.providerRequests={}),n.providerRequests[i]=(n.providerRequests[i]||0)+1),J()},q={linesAdded:0,linesRemoved:0,toolSuccess:0,toolFailure:0,toolDenied:0},Dt=async(e,i,n,c)=>{e==="linesAdded"?q.linesAdded+=i:e==="linesRemoved"&&(q.linesRemoved+=i);let t=await v();if(t[e]!==void 0&&(t[e]+=Math.floor(i)),n&&c&&(e==="tokens"||e==="cachedTokens"||e==="candidateTokens")){t.models||(t.models={}),t.models[n]||(t.models[n]={}),t.models[n][c]||(t.models[n][c]={tokens:0,cachedTokens:0,candidateTokens:0});let s=t.models[n][c];e==="tokens"&&(s.tokens+=Math.floor(i)),e==="cachedTokens"&&(s.cachedTokens+=Math.floor(i)),e==="candidateTokens"&&(s.candidateTokens+=Math.floor(i))}J()},at=async(e=1)=>{let i=new Date,n=i.toISOString().split("T")[0];r||(r=await j()),r.date!==n&&await v();let c=i.getFullYear(),t=i.getMonth();i.getDate()<e&&(t-=1,t<0&&(t=11,c-=1));let o=new Date(c,t,e).toISOString().split("T")[0],l=r.history||{},f=r.stats||{...S},d={...S};d.imageCalls=[],d.models={};let m=(u,h)=>{for(let k in u)if(k==="imageCalls")u.imageCalls=[...u.imageCalls||[],...h.imageCalls||[]];else if(k==="models"){let D=h.models||{};for(let y in D){u.models[y]||(u.models[y]={});for(let w in D[y]){u.models[y][w]||(u.models[y][w]={tokens:0,cachedTokens:0,candidateTokens:0});let C=u.models[y][w],M=D[y][w];C.tokens+=M.tokens||0,C.cachedTokens+=M.cachedTokens||0,C.candidateTokens+=M.candidateTokens||0}}}else typeof u[k]=="number"&&(u[k]+=h[k]||0)};m(d,f);for(let u in l)u>=o&&u<n&&m(d,l[u]);return d},ft=async(e,i={})=>{let n=await K().catch(()=>({})),c=i.apiTier||n.apiTier||"Free",t=i.quotas||i.systemSettings?.quotas||n.quotas||{},s=t.providerBudgets||{},a=!!s.__useProvider,o=i.aiProvider||n.aiProvider||"Google",l=a&&!!s[o],f=()=>{if(l){let d=s[o];return{agentLimit:typeof d.agentLimit=="number"&&d.agentLimit>0?d.agentLimit:99999999,tokenLimit:typeof d.tokenLimit=="number"&&d.tokenLimit>0?d.tokenLimit:99999999999999,monthlyTokenLimit:typeof d.monthlyTokenLimit=="number"&&d.monthlyTokenLimit>0?d.monthlyTokenLimit:99999999999999}}return{agentLimit:t.agentLimit||99999999,tokenLimit:t.tokenLimit||99999999999999,monthlyTokenLimit:t.monthlyTokenLimit||99999999999999}};if(e==="agent"){let{agentLimit:d,tokenLimit:m,monthlyTokenLimit:u}=f(),h=await v(),k;t.resetMode==="Custom"?k=await at(t.resetDay||1):k=await it();let D=0,y=0,w=0;if(l){D=h.providerRequests?.[o]||0;let C=h.models?.[o]||{};for(let I in C)y+=C[I]?.tokens||0;let M=k.models?.[o]||{};for(let I in M)w+=M[I]?.tokens||0}else D=h.agent||0,y=h.tokens||0,w=k.tokens||0;return c==="Free"&&h.agent+h.background>=999999?{allowed:!1,reason:"Free Tier Daily Usage Limit Exceeded"}:D>=d?{allowed:!1,reason:l?`Daily Request Limit Reached for ${o}`:"Daily Agent Request Limit Reached"}:y>=m?{allowed:!1,reason:l?`Daily Token Budget Exhausted for ${o}`:"Daily Token Budget Exhausted"}:w>=u?{allowed:!1,reason:l?`Monthly Token Budget Exhausted for ${o}`:"Monthly Token Budget Exhausted"}:{allowed:!0}}if(e==="background"){let d=await v();if(c==="Free"&&d.agent+d.background>=999999)return{allowed:!1,reason:"Free Tier Background Limit Exceeded"};let m=d.background<(t.backgroundLimit||999999);return{allowed:m,reason:m?void 0:"Background Request Limit Exceeded"}}if(e==="search"){let m=(await v()).search<(t.searchLimit||100);return{allowed:m,reason:m?void 0:"Search Quota Exceeded"}}return{allowed:!0}},Mt=async(e,i={})=>(await ft(e,i)).allowed,Y=e=>{if(!e||e.length===0)return[];let n=[...e].sort((t,s)=>t.timestamp-s.timestamp),c=[];for(let t of n){if(c.length>0){let s=c[c.length-1];if(t.timestamp>=s.start&&t.timestamp<s.end){s.calls.push(t),s.spent+=t.cost;continue}}c.push({start:t.timestamp,end:t.timestamp+36e5,calls:[t],spent:t.cost})}return c},nt=(e,i)=>{if(!e||e.length===0)return .025;let c=Y(e);if(c.length===0)return .025;let t=[];for(let m of c){let u=.025;if(t.length>0){let k=t[t.length-1],D=!1;if(t.length>=2){let y=t[t.length-2];k.ratio>=.8&&y.ratio>=.8&&(D=!0)}if(D)u=.015;else{let y=k.limit,w=k.ratio;w>=.8?u=y===.015?.015:y:w<.4?u=Math.min(.025,y+.005):w>=.4&&w<.6?u=Math.min(.025,y+.004):u=Math.min(.025,y+.002)}}let h=u>0?m.spent/u:0;t.push({limit:u,spent:m.spent,ratio:h})}let s=c[c.length-1];if(i<s.end)return t[t.length-1].limit;let a=t[t.length-1].limit,o=a,l=t[t.length-1].ratio,f=s.end,d=0;for(let m=t.length-1;m>=0&&t[m].ratio>=.8;m--)d++;for(;f<=i;){let m=.025;d>=2?m=.015:l>=.8?m=o===.015?.015:o:l<.4?m=Math.min(.025,o+.005):l>=.4&&l<.6?m=Math.min(.025,o+.004):m=Math.min(.025,o+.002),o=m,l=0,d=0,f+=36e5,a=m}return a},St=async e=>{let i=e.imageSettings||{keyType:"Default",quality:"Low-High"};if(i.keyType!=="Default")return!0;let c={Low:.001,"Low-High":.002,Medium:.008,"Medium-High":.01,High:.045,Ultra:.0488,Premium:.15}[i.quality]||.002,t=await v();t.imageCalls||(t.imageCalls=[]);let s=Date.now(),a=Y(t.imageCalls),o=0;if(a.length>0){let f=a[a.length-1];s>=f.start&&s<f.end&&(o=f.spent)}let l=nt(t.imageCalls,s);return o+c<=l},vt=async()=>{let e=await v();e.imageCalls||(e.imageCalls=[]);let i=Date.now(),n=Y(e.imageCalls),c=[],t=0,s=0;if(n.length>0){let f=n[n.length-1];i>=f.start&&i<f.end&&(c=f.calls,t=f.spent,s=Math.max(0,Math.ceil((f.end-i)/(60*1e3))))}let a=nt(e.imageCalls,i),o=Math.max(0,a-t),l=t;return{totalSpent:t,remaining:o,activeCallsCount:c.length,nextResetMin:s,reclaimCost:l,limit:a}},Ct=async e=>{let i=e.imageSettings||{keyType:"Default",quality:"Low-High"},c={Low:.001,"Low-High":.002,Medium:.008,"Medium-High":.01,High:.045,Ultra:.0488,Premium:.1}[i.quality]||.002,t=await v();t.imageCalls||(t.imageCalls=[]),t.imageCalls.push({timestamp:Date.now(),cost:c}),J()},xt=async()=>{let e=new Date().toISOString().split("T")[0];r||(r=await j()),r.date!==e&&await v();let i=r.stats||{...S},n=r.history||{},c=new Set(Object.keys(n));c.add(e);let s=Array.from(c).sort().map(T=>{let x=T===e?i:n[T]||{},g={...S,...x},B=g.tokens||0,P=g.cachedTokens||0,H=g.candidateTokens||0,N=Math.max(0,B-H),E=Math.max(0,N-P),b=g.agent||0,R=g.background||0,U=g.search||0,rt=b+R+U,Q=g.toolSuccess||0,V=g.toolFailure||0,X=g.toolDenied||0,W=Q+V+X,lt=W>0?(Q/W*100).toFixed(1):"100.0",z=g.linesAdded||0,Z=g.linesRemoved||0,tt=Array.isArray(g.imageCalls)?g.imageCalls:[],ct=tt.reduce((dt,mt)=>dt+(mt.cost||0),0);return{date:T,tokens:B,cachedTokens:P,candidateTokens:H,promptTokens:N,uncachedPromptTokens:E,agent:b,background:R,search:U,totalRequests:rt,toolSuccess:Q,toolFailure:V,toolDenied:X,totalTools:W,toolSuccessRate:parseFloat(lt),linesAdded:z,linesRemoved:Z,netLines:z-Z,duration:g.duration||0,imageCallsCount:tt.length,imageCost:ct,models:g.models||{},providerRequests:g.providerRequests||{}}}),a=await K().catch(()=>({})),o=a.quotas||{},l=a.apiTier||"Free",f=await it().catch(()=>({tokens:0,agent:0})),d=null;o.resetMode==="Custom"&&(d=await at(o.resetDay||1).catch(()=>({tokens:0})));let m=o.tokenLimit||0,u=o.monthlyTokenLimit||0,h=o.agentLimit||0,k=o.resetMode||"Daily",D=o.resetDay||1,y=o.providerBudgets||{},w=!!y.__useProvider,C=["Google","Anthropic","OpenAI","DeepSeek","Mistral","NVIDIA","OpenRouter","Ollama","CrofAI","InferX","SenseNova","AIHubMix"];Object.keys(y).forEach(T=>{T!=="__useProvider"&&!C.includes(T)&&C.push(T)});let M=[];for(let T of C){let x=y[T];if(x&&(x.agentLimit||x.tokenLimit||x.monthlyTokenLimit)){let g=0,B=i.models?.[T]||{};for(let U in B)g+=B[U]?.tokens||0;let P=0,H=(o.resetMode==="Custom"?d?.models:f?.models)?.[T]||{};for(let U in H)P+=H[U]?.tokens||0;let N=i.providerRequests?.[T]||0,E=x.tokenLimit||0,b=x.monthlyTokenLimit||0,R=x.agentLimit||0;M.push({provider:T,dailyTokens:g,dailyTokenLimit:E,isDailyUnlimited:E>=9999999999999||E===0,monthlyTokens:P,monthlyTokenLimit:b,isMonthlyUnlimited:b>=9999999999999||b===0,dailyRequests:N,dailyAgentLimit:R,isRequestsUnlimited:R>=9999999||R===0})}}let I={apiTier:l,resetMode:k,resetDay:D,quotas:o,usingProviderBudgets:w&&M.length>0||M.length>0,providerBudgetsList:M,daily:{tokensUsed:i.tokens||0,tokenLimit:m,agentRequests:i.agent||0,agentLimit:h,isUnlimitedTokens:m>=9999999999999||m===0,isUnlimitedRequests:h>=9999999||h===0},monthly:{tokensUsed:(o.resetMode==="Custom"?d?.tokens:f?.tokens)||0,tokenLimit:u,isUnlimitedTokens:u>=9999999999999||u===0},providerBudgets:y};return{currentDate:e,todayStats:i,history:n,timeline:s,budget:I,runtimeSession:{...q}}};export{wt as a,Tt as b,v as c,it as d,Lt as e,q as f,Dt as g,at as h,ft as i,Mt as j,St as k,vt as l,Ct as m,xt as n};
|
|
1
|
+
import{h as K}from"./chunk-IJCIHHAH.js";import{a as et,b as _}from"./chunk-SIINYZWE.js";import{h as G,i as L}from"./chunk-4TZKD2XR.js";import p from"fs-extra";import st from"path";var ut=()=>Math.random().toString(36).substring(2)+Date.now().toString(36),r=null,A=null,ot=0,F=!1,S={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:[]},O=(e,i)=>{if(!e)return{};let n=Object.keys(e),c=new Date(new Date(i).getTime()-720*60*60*1e3),t={};for(let s of n)new Date(s)>=c&&(t[s]=e[s]);return t},j=async()=>{let e=new Date().toISOString().split("T")[0];try{!await p.exists(L)&&await p.exists(G)&&(await p.ensureDir(st.dirname(L)),await p.move(G,L))}catch{}let i=L+".tmp",n=null;try{if(await p.exists(i)){let t=(await p.readFile(i,"utf8")).trim(),s=null;if(t.startsWith("{")||t.startsWith("[")?s=JSON.parse(t):s=JSON.parse(_(t)),s&&s.date&&s.stats){n=s;try{await p.rename(i,L)}catch{}}else try{await p.remove(i)}catch{}}}catch{try{await p.remove(i)}catch{}}if(!n)try{if(await p.exists(L)){let t=(await p.readFile(L,"utf8")).trim();t.startsWith("{")||t.startsWith("[")?n=JSON.parse(t):n=JSON.parse(_(t))}}catch{}let c=n;if(c){let t=c.stats||{...S},s={...S,...t};Array.isArray(s.imageCalls)||(s.imageCalls=[]);let a=c.history||{},o=O(a,e);if(Object.keys(a).length!==Object.keys(o).length&&(F=!0),c.date===e)return{...c,stats:s,history:o};{let l=c.date,f=s,d={...o};return l&&(d[l]=f),{date:e,stats:{...S},history:O(d,e)}}}return{date:e,stats:{...S},history:{}}},$=async()=>{if(!(!F||!r))try{await p.ensureDir(st.dirname(L));let e=null;try{if(await p.exists(L)){let t=(await p.readFile(L,"utf8")).trim();t.startsWith("{")||t.startsWith("[")?e=JSON.parse(t):e=JSON.parse(_(t))}}catch{}if(e&&e.date===r.date&&e.stats){for(let t in r.stats)if(e.stats[t]!==void 0){if(Array.isArray(r.stats[t])){let s=Array.isArray(e.stats[t])?e.stats[t]:[],a=r.stats[t],o=new Map;for(let l of[...s,...a])l&&l.timestamp&&o.set(l.timestamp,l);r.stats[t]=Array.from(o.values())}else if(typeof r.stats[t]=="number")r.stats[t]=Math.max(r.stats[t],Number(e.stats[t])||0);else if(r.stats[t]&&typeof r.stats[t]=="object"){let s=e.stats[t]||{},a=r.stats[t];for(let o in s)if(typeof s[o]=="number")a[o]=Math.max(a[o]||0,s[o]);else if(s[o]&&typeof s[o]=="object"){a[o]||(a[o]={});for(let l in s[o])if(typeof s[o][l]=="number")a[o][l]=Math.max(a[o][l]||0,s[o][l]);else if(s[o][l]&&typeof s[o][l]=="object"){a[o][l]||(a[o][l]={});for(let f in s[o][l])a[o][l][f]=Math.max(a[o][l][f]||0,s[o][l][f])}}}}}if(e&&e.history){let t={...r.history||{}};for(let s in e.history)if(t[s])for(let a in t[s])if(a==="imageCalls"){let o=Array.isArray(e.history[s].imageCalls)?e.history[s].imageCalls:[],l=Array.isArray(t[s].imageCalls)?t[s].imageCalls:[],f=new Map;for(let d of[...o,...l])d&&d.timestamp&&f.set(d.timestamp,d);t[s].imageCalls=Array.from(f.values())}else typeof t[s][a]=="number"&&(t[s][a]=Math.max(t[s][a],Number(e.history[s][a])||0));else t[s]=e.history[s];r.history=O(t,r.date||today)}else if(r&&r.history){let t=new Date().toISOString().split("T")[0];r.history=O(r.history,t)}r.saveId=ut();let i=L+".tmp",n=et(JSON.stringify(r,null,2));await p.writeFile(i,n,"utf8");let c=await p.open(i,"r+");await p.fsync(c),await p.close(c),await p.rename(i,L),F=!1,ot=Date.now()}catch{}},J=()=>{if(F=!0,A)return;let e=Date.now(),i=Math.max(0,1500-(e-ot));A=setTimeout(async()=>{await $(),A=null},i),A.unref&&A.unref()},wt=async()=>{r=await j(),F&&J()},Tt=async()=>{A&&(clearTimeout(A),A=null),await $()},v=async()=>{let e=new Date().toISOString().split("T")[0];if(!r)r=await j();else if(r.date!==e){let i=r.date,n=r.stats,c=r.history||{};n&&(c[i]=n),r={date:e,stats:{...S},history:O(c,e)},F=!0,await $()}return r&&r.stats&&!Array.isArray(r.stats.imageCalls)&&(r.stats.imageCalls=[]),r.stats},it=async()=>{let e=new Date().toISOString().split("T")[0];r||(r=await j()),r.date!==e&&await v();let i=r.history||{},n=O(i,e);r.history=n;let c=r.stats||{...S},t={...S};t.imageCalls=[],t.models={};let s=(a,o)=>{for(let l in a)if(l==="imageCalls")a.imageCalls=[...a.imageCalls||[],...o.imageCalls||[]];else if(l==="models"){let f=o.models||{};for(let d in f){a.models[d]||(a.models[d]={});for(let m in f[d]){a.models[d][m]||(a.models[d][m]={tokens:0,cachedTokens:0,candidateTokens:0});let u=a.models[d][m],h=f[d][m];u.tokens+=h.tokens||0,u.cachedTokens+=h.cachedTokens||0,u.candidateTokens+=h.candidateTokens||0}}}else typeof a[l]=="number"&&(a[l]+=o[l]||0)};s(t,c);for(let a in n)s(t,n[a]);return t},Lt=async(e,i)=>{e==="toolSuccess"?q.toolSuccess++:e==="toolFailure"?q.toolFailure++:e==="toolDenied"&&q.toolDenied++;let n=await v();n[e]!==void 0&&n[e]++,i&&e==="agent"&&(n.providerRequests||(n.providerRequests={}),n.providerRequests[i]=(n.providerRequests[i]||0)+1),J()},q={linesAdded:0,linesRemoved:0,toolSuccess:0,toolFailure:0,toolDenied:0},Dt=async(e,i,n,c)=>{e==="linesAdded"?q.linesAdded+=i:e==="linesRemoved"&&(q.linesRemoved+=i);let t=await v();if(t[e]!==void 0&&(t[e]+=Math.floor(i)),n&&c&&(e==="tokens"||e==="cachedTokens"||e==="candidateTokens")){t.models||(t.models={}),t.models[n]||(t.models[n]={}),t.models[n][c]||(t.models[n][c]={tokens:0,cachedTokens:0,candidateTokens:0});let s=t.models[n][c];e==="tokens"&&(s.tokens+=Math.floor(i)),e==="cachedTokens"&&(s.cachedTokens+=Math.floor(i)),e==="candidateTokens"&&(s.candidateTokens+=Math.floor(i))}J()},at=async(e=1)=>{let i=new Date,n=i.toISOString().split("T")[0];r||(r=await j()),r.date!==n&&await v();let c=i.getFullYear(),t=i.getMonth();i.getDate()<e&&(t-=1,t<0&&(t=11,c-=1));let o=new Date(c,t,e).toISOString().split("T")[0],l=r.history||{},f=r.stats||{...S},d={...S};d.imageCalls=[],d.models={};let m=(u,h)=>{for(let k in u)if(k==="imageCalls")u.imageCalls=[...u.imageCalls||[],...h.imageCalls||[]];else if(k==="models"){let D=h.models||{};for(let y in D){u.models[y]||(u.models[y]={});for(let w in D[y]){u.models[y][w]||(u.models[y][w]={tokens:0,cachedTokens:0,candidateTokens:0});let C=u.models[y][w],M=D[y][w];C.tokens+=M.tokens||0,C.cachedTokens+=M.cachedTokens||0,C.candidateTokens+=M.candidateTokens||0}}}else typeof u[k]=="number"&&(u[k]+=h[k]||0)};m(d,f);for(let u in l)u>=o&&u<n&&m(d,l[u]);return d},ft=async(e,i={})=>{let n=await K().catch(()=>({})),c=i.apiTier||n.apiTier||"Free",t=i.quotas||i.systemSettings?.quotas||n.quotas||{},s=t.providerBudgets||{},a=!!s.__useProvider,o=i.aiProvider||n.aiProvider||"Google",l=a&&!!s[o],f=()=>{if(l){let d=s[o];return{agentLimit:typeof d.agentLimit=="number"&&d.agentLimit>0?d.agentLimit:99999999,tokenLimit:typeof d.tokenLimit=="number"&&d.tokenLimit>0?d.tokenLimit:99999999999999,monthlyTokenLimit:typeof d.monthlyTokenLimit=="number"&&d.monthlyTokenLimit>0?d.monthlyTokenLimit:99999999999999}}return{agentLimit:t.agentLimit||99999999,tokenLimit:t.tokenLimit||99999999999999,monthlyTokenLimit:t.monthlyTokenLimit||99999999999999}};if(e==="agent"){let{agentLimit:d,tokenLimit:m,monthlyTokenLimit:u}=f(),h=await v(),k;t.resetMode==="Custom"?k=await at(t.resetDay||1):k=await it();let D=0,y=0,w=0;if(l){D=h.providerRequests?.[o]||0;let C=h.models?.[o]||{};for(let I in C)y+=C[I]?.tokens||0;let M=k.models?.[o]||{};for(let I in M)w+=M[I]?.tokens||0}else D=h.agent||0,y=h.tokens||0,w=k.tokens||0;return c==="Free"&&h.agent+h.background>=999999?{allowed:!1,reason:"Free Tier Daily Usage Limit Exceeded"}:D>=d?{allowed:!1,reason:l?`Daily Request Limit Reached for ${o}`:"Daily Agent Request Limit Reached"}:y>=m?{allowed:!1,reason:l?`Daily Token Budget Exhausted for ${o}`:"Daily Token Budget Exhausted"}:w>=u?{allowed:!1,reason:l?`Monthly Token Budget Exhausted for ${o}`:"Monthly Token Budget Exhausted"}:{allowed:!0}}if(e==="background"){let d=await v();if(c==="Free"&&d.agent+d.background>=999999)return{allowed:!1,reason:"Free Tier Background Limit Exceeded"};let m=d.background<(t.backgroundLimit||999999);return{allowed:m,reason:m?void 0:"Background Request Limit Exceeded"}}if(e==="search"){let m=(await v()).search<(t.searchLimit||100);return{allowed:m,reason:m?void 0:"Search Quota Exceeded"}}return{allowed:!0}},Mt=async(e,i={})=>(await ft(e,i)).allowed,Y=e=>{if(!e||e.length===0)return[];let n=[...e].sort((t,s)=>t.timestamp-s.timestamp),c=[];for(let t of n){if(c.length>0){let s=c[c.length-1];if(t.timestamp>=s.start&&t.timestamp<s.end){s.calls.push(t),s.spent+=t.cost;continue}}c.push({start:t.timestamp,end:t.timestamp+36e5,calls:[t],spent:t.cost})}return c},nt=(e,i)=>{if(!e||e.length===0)return .025;let c=Y(e);if(c.length===0)return .025;let t=[];for(let m of c){let u=.025;if(t.length>0){let k=t[t.length-1],D=!1;if(t.length>=2){let y=t[t.length-2];k.ratio>=.8&&y.ratio>=.8&&(D=!0)}if(D)u=.015;else{let y=k.limit,w=k.ratio;w>=.8?u=y===.015?.015:y:w<.4?u=Math.min(.025,y+.005):w>=.4&&w<.6?u=Math.min(.025,y+.004):u=Math.min(.025,y+.002)}}let h=u>0?m.spent/u:0;t.push({limit:u,spent:m.spent,ratio:h})}let s=c[c.length-1];if(i<s.end)return t[t.length-1].limit;let a=t[t.length-1].limit,o=a,l=t[t.length-1].ratio,f=s.end,d=0;for(let m=t.length-1;m>=0&&t[m].ratio>=.8;m--)d++;for(;f<=i;){let m=.025;d>=2?m=.015:l>=.8?m=o===.015?.015:o:l<.4?m=Math.min(.025,o+.005):l>=.4&&l<.6?m=Math.min(.025,o+.004):m=Math.min(.025,o+.002),o=m,l=0,d=0,f+=36e5,a=m}return a},St=async e=>{let i=e.imageSettings||{keyType:"Default",quality:"Low-High"};if(i.keyType!=="Default")return!0;let c={Low:.001,"Low-High":.002,Medium:.008,"Medium-High":.01,High:.045,Ultra:.0488,Premium:.15}[i.quality]||.002,t=await v();t.imageCalls||(t.imageCalls=[]);let s=Date.now(),a=Y(t.imageCalls),o=0;if(a.length>0){let f=a[a.length-1];s>=f.start&&s<f.end&&(o=f.spent)}let l=nt(t.imageCalls,s);return o+c<=l},vt=async()=>{let e=await v();e.imageCalls||(e.imageCalls=[]);let i=Date.now(),n=Y(e.imageCalls),c=[],t=0,s=0;if(n.length>0){let f=n[n.length-1];i>=f.start&&i<f.end&&(c=f.calls,t=f.spent,s=Math.max(0,Math.ceil((f.end-i)/(60*1e3))))}let a=nt(e.imageCalls,i),o=Math.max(0,a-t),l=t;return{totalSpent:t,remaining:o,activeCallsCount:c.length,nextResetMin:s,reclaimCost:l,limit:a}},Ct=async e=>{let i=e.imageSettings||{keyType:"Default",quality:"Low-High"},c={Low:.001,"Low-High":.002,Medium:.008,"Medium-High":.01,High:.045,Ultra:.0488,Premium:.1}[i.quality]||.002,t=await v();t.imageCalls||(t.imageCalls=[]),t.imageCalls.push({timestamp:Date.now(),cost:c}),J()},xt=async()=>{let e=new Date().toISOString().split("T")[0];r||(r=await j()),r.date!==e&&await v();let i=r.stats||{...S},n=r.history||{},c=new Set(Object.keys(n));c.add(e);let s=Array.from(c).sort().map(T=>{let x=T===e?i:n[T]||{},g={...S,...x},B=g.tokens||0,P=g.cachedTokens||0,H=g.candidateTokens||0,N=Math.max(0,B-H),E=Math.max(0,N-P),b=g.agent||0,R=g.background||0,U=g.search||0,rt=b+R+U,Q=g.toolSuccess||0,V=g.toolFailure||0,X=g.toolDenied||0,W=Q+V+X,lt=W>0?(Q/W*100).toFixed(1):"100.0",z=g.linesAdded||0,Z=g.linesRemoved||0,tt=Array.isArray(g.imageCalls)?g.imageCalls:[],ct=tt.reduce((dt,mt)=>dt+(mt.cost||0),0);return{date:T,tokens:B,cachedTokens:P,candidateTokens:H,promptTokens:N,uncachedPromptTokens:E,agent:b,background:R,search:U,totalRequests:rt,toolSuccess:Q,toolFailure:V,toolDenied:X,totalTools:W,toolSuccessRate:parseFloat(lt),linesAdded:z,linesRemoved:Z,netLines:z-Z,duration:g.duration||0,imageCallsCount:tt.length,imageCost:ct,models:g.models||{},providerRequests:g.providerRequests||{}}}),a=await K().catch(()=>({})),o=a.quotas||{},l=a.apiTier||"Free",f=await it().catch(()=>({tokens:0,agent:0})),d=null;o.resetMode==="Custom"&&(d=await at(o.resetDay||1).catch(()=>({tokens:0})));let m=o.tokenLimit||0,u=o.monthlyTokenLimit||0,h=o.agentLimit||0,k=o.resetMode||"Daily",D=o.resetDay||1,y=o.providerBudgets||{},w=!!y.__useProvider,C=["Google","Anthropic","OpenAI","DeepSeek","Mistral","NVIDIA","OpenRouter","Ollama","CrofAI","InferX","SenseNova","AIHubMix"];Object.keys(y).forEach(T=>{T!=="__useProvider"&&!C.includes(T)&&C.push(T)});let M=[];for(let T of C){let x=y[T];if(x&&(x.agentLimit||x.tokenLimit||x.monthlyTokenLimit)){let g=0,B=i.models?.[T]||{};for(let U in B)g+=B[U]?.tokens||0;let P=0,H=(o.resetMode==="Custom"?d?.models:f?.models)?.[T]||{};for(let U in H)P+=H[U]?.tokens||0;let N=i.providerRequests?.[T]||0,E=x.tokenLimit||0,b=x.monthlyTokenLimit||0,R=x.agentLimit||0;M.push({provider:T,dailyTokens:g,dailyTokenLimit:E,isDailyUnlimited:E>=9999999999999||E===0,monthlyTokens:P,monthlyTokenLimit:b,isMonthlyUnlimited:b>=9999999999999||b===0,dailyRequests:N,dailyAgentLimit:R,isRequestsUnlimited:R>=9999999||R===0})}}let I={apiTier:l,resetMode:k,resetDay:D,quotas:o,usingProviderBudgets:w&&M.length>0||M.length>0,providerBudgetsList:M,daily:{tokensUsed:i.tokens||0,tokenLimit:m,agentRequests:i.agent||0,agentLimit:h,isUnlimitedTokens:m>=9999999999999||m===0,isUnlimitedRequests:h>=9999999||h===0},monthly:{tokensUsed:(o.resetMode==="Custom"?d?.tokens:f?.tokens)||0,tokenLimit:u,isUnlimitedTokens:u>=9999999999999||u===0},providerBudgets:y};return{currentDate:e,todayStats:i,history:n,timeline:s,budget:I,runtimeSession:{...q}}};export{wt as a,Tt as b,v as c,it as d,Lt as e,q as f,Dt as g,at as h,ft as i,Mt as j,St as k,vt as l,Ct as m,xt as n};
|
|
@@ -2,4 +2,4 @@ import{screen as j}from"@nut-tree-fork/nut-js";import B from"screenshot-desktop"
|
|
|
2
2
|
<rect x="${w+1}" y="${m+1}" width="${v-2}" height="${y-2}" fill="rgba(0, 255, 255, 0.015)" stroke="rgba(255, 255, 0, 0.3)" stroke-width="1.1" rx="2"/>
|
|
3
3
|
`;let M;if(s.isCustomY)M=r;else{let g=r+(s.yOffset!==void 0?s.yOffset:3);M=Math.max(m+11,Math.min(m+y+3,g))}u+=`
|
|
4
4
|
<text x="${e}" y="${M}" font-family="'Segoe UI', Roboto, sans-serif" font-size="14" font-weight="600" fill="#FFFF00" stroke="#000000" stroke-width="2" paint-order="stroke fill" stroke-linejoin="round" opacity="0.8" text-anchor="middle">${G}</text>
|
|
5
|
-
`}return`<svg width="${o}" height="${t}" xmlns="http://www.w3.org/2000/svg">${u}</svg>`}var J=1,V=o=>new Promise(t=>setTimeout(t,o));async function Q(){try{let{loadSettings:o}=await import("./settings-
|
|
5
|
+
`}return`<svg width="${o}" height="${t}" xmlns="http://www.w3.org/2000/svg">${u}</svg>`}var J=1,V=o=>new Promise(t=>setTimeout(t,o));async function Q(){try{let{loadSettings:o}=await import("./settings-QKREUSRE.js"),t=await o();return Number(t.display||0)}catch{return 0}}async function st(){let o=await Q();try{let t=await B.listDisplays();if(t&&t.length>0)return{format:"png",screen:(t[o]||t[0]).id}}catch{}return{format:"png"}}async function rt(){let o=0,t=await st();for(;o<2;){let C=await B(t);await V(500);let a=await B(t);if(C.equals(a))return a;o++,o<2&&await V(3e3)}return await V(3e3),await B(t)}async function ht(){try{let o=await rt(),t=await et(o),C=ot(l.TARGET_WIDTH,l.TARGET_HEIGHT,l.COLS,l.ROWS,t),a=await K(o).resize(l.TARGET_WIDTH,l.TARGET_HEIGHT,{fit:"fill"}).composite([{input:Buffer.from(C),top:0,left:0}]).png({quality:100}).toBuffer();if(process.env.SHOW_DEBUG_GRID)try{let s=Z.resolve(process.cwd(),"screenshots");await P.ensureDir(s);let G=Z.join(s,`${J}.png`);await P.writeFile(G,a),J++}catch{}let x=a.toString("base64"),c=t.length,d=o,u=a;return d=null,u=null,{base64:x,mimeType:"image/png",width:l.TARGET_WIDTH,height:l.TARGET_HEIGHT,detectedCount:c}}catch(o){return console.error("Failed to capture gridded screenshot:",o),null}}function nt(o){if(o==null)return null;let t=null;if(typeof o=="number")t=o;else if(typeof o=="string"){let w=o.trim();if(/^\d+$/.test(w))t=parseInt(w,10);else{let m=w.match(/^([A-Z])([0-9]{1,2})$/i);if(m){let v=m[1].toUpperCase().charCodeAt(0)-65,y=parseInt(m[2],10)-1;t=v*l.COLS+y+1}}}if(t===null||isNaN(t))return null;if(U&&U.length>0){let w=U.find(m=>m.cellNum===t);if(w)return{x:w.cx,y:w.cy,colIdx:Math.floor((t-1)%l.COLS),rowIdx:Math.floor((t-1)/l.COLS),cellNum:t}}let C=l.COLS*l.ROWS;if(t<1||t>C)return null;let a=t-1,x=Math.floor(a/l.COLS),c=a%l.COLS,d=l.TARGET_WIDTH/l.COLS,u=l.TARGET_HEIGHT/l.ROWS,s=Math.floor(c*d+d/2),G=Math.floor(x*u+u/2);return{x:s,y:G,colIdx:c,rowIdx:x,cellNum:t}}async function ut(o,t,C){let a=null;if(typeof o=="number"||typeof o=="string"?a=nt(o):o&&typeof o.x=="number"&&typeof o.y=="number"&&(a=o),!a)return null;let x=t,c=C,d=0,u=0,s=await Q();try{let y=await B.listDisplays();if(y&&y.length>0){let e=y[s]||y[0];e.width&&e.height&&(x=e.width,c=e.height),e.left!==void 0&&(d=e.left),e.top!==void 0&&(u=e.top)}}catch{}if(!x||!c)try{x=await j.width(),c=await j.height()}catch{x=1920,c=1080}let G=x/l.TARGET_WIDTH,w=c/l.TARGET_HEIGHT,m=Math.round(a.x*G)+d,v=Math.round(a.y*w)+u;return{x:m,y:v,screenW:x,screenH:c,offsetX:d,offsetY:u}}export{l as a,Q as b,ht as c,nt as d,ut as e};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a,b,c,d,e}from"./chunk-7PJOF5I2.js";import"./chunk-4TZKD2XR.js";export{b as exportCurrentChat,d as exportErrorLogs,e as handleExport,a as parseAgentText,c as parseLogEntries};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t}from"./chunk-
|
|
1
|
+
import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t}from"./chunk-4TZKD2XR.js";export{p as ACTIVE_TX_FILE,m as BACKUPS_DIR,r as CONTEXT_FILE,t as CU_CACHE_DIR,c as DATA_DIR,a as FLUXFLOW_DIR,g as HISTORY_DIR,f as HISTORY_FILE,o as LEDGER_ADVANCE_FILE,n as LEDGER_FILE,d as LOGS_DIR,j as MEMORIES_FILE,s as PARSER_DIR,q as PATHS_FILE,e as SECRET_DIR,b as SETTINGS_FILE,l as TEMP_MEM_CHAT_FILE,k as TEMP_MEM_FILE,i as USAGE_FILE,h as USAGE_FILE_OLD};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a,b,c,d,e}from"./chunk-
|
|
1
|
+
import{a,b,c,d,e}from"./chunk-ROHVHR3J.js";export{a as GRID_CONFIG,c as captureGriddedScreenshot,b as getActiveDisplay,e as gridToNativeCoordinates,d as parseGridCodeTo720p};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a,b,c,d,e,f,g,h,i,j,k}from"./chunk-
|
|
1
|
+
import{a,b,c,d,e,f,g,h,i,j,k}from"./chunk-JM3JCK2K.js";import"./chunk-SIINYZWE.js";import"./chunk-4TZKD2XR.js";export{a as getAPIKey,b as getProviderAPIKey,f as getSearchSecrets,d as getSecret,k as removeAPIKey,j as removeSecret,g as saveAPIKey,c as saveProviderAPIKey,i as saveSearchId,h as saveSearchKey,e as saveSecret};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{h as a,i as b}from"./chunk-IJCIHHAH.js";import"./chunk-SIINYZWE.js";import"./chunk-4TZKD2XR.js";export{a as loadSettings,b as saveSettings};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a,b}from"./chunk-A2MCYGU4.js";import"./chunk-QLPFOHKZ.js";import"./chunk-IJCIHHAH.js";import"./chunk-SIINYZWE.js";import"./chunk-4TZKD2XR.js";export{b as openUsageDashboard,a as startUsageServer};
|
package/dist/cli.js
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
import{spawn as ne}from"child_process";import{fileURLToPath as _}from"url";import ie from"os";import A from"dotenv";A.config({quiet:!0});A.config({path:"./fluxflow.env",override:!0,quiet:!0});A.config({path:"./.fluxflow.env",override:!0,quiet:!0});var le=ie.totalmem(),L=le/(1024*1024),ce=.5,ue=Math.floor(L*ce),D=process.argv.slice(2),B=D.indexOf("--allocation"),s=B!==-1?parseInt(D[B+1],10):NaN,pe=process.env.EXPERIMENTAL_MEMORY_MANAGER==="true"||process.env.EXPERIMENTAL_MEMORY_MANAGER==="1"||process.env.EXPERIMENTAL_MEMORY_MANAGER===!0||process.env.EXPERIMENTAL_MEMORY_MANAGER===1||!1,me=!isNaN(s)||pe||!1;!isNaN(s)&&s<64&&(console.error(`
|
|
3
3
|
[ERROR] Allocation value '${s} MB' is too low. Minimum: 64 MB, Recommended: 4096 MB.
|
|
4
4
|
`),process.exit(1));var y=Math.floor(L*.75),de=!isNaN(s)&&s>0?Math.min(s,y):Math.max(1536,Math.min(32768,ue)),ge=_(import.meta.url).endsWith(".js");if(ge&&!process.execArgv.some(o=>o.includes("max-old-space-size"))&&me)Number.isNaN(s)||(console.log(`
|
|
5
|
-
[MEMORY] Starting with: '${s>y?y:s} MB' Allocation${s>y?" (Max allowed: '"+y+" MB')":""}. Please Wait...`),await new Promise(u=>setTimeout(u,5e3))),ne(process.execPath,[`--max-old-space-size=${de}`,"--expose-gc","--max-semi-space-size=1",_(import.meta.url),...process.argv.slice(2)],{stdio:"inherit"}).on("exit",u=>process.exit(u||0));else{let o=process.argv.slice(2),u=o.includes("--help")&&o[o.indexOf("--help")+1]==="commands",F=o.includes("--help")&&!u,T=o.includes("--version")||o.includes("-v"),P=o[0]==="--update",R=o[0]==="--export";if(o[0]==="--usage"||o.includes("--usage")||o[0]==="--budget"||o.includes("--budget")){let{openUsageDashboard:e}=await import("./chunks/usageServer-
|
|
5
|
+
[MEMORY] Starting with: '${s>y?y:s} MB' Allocation${s>y?" (Max allowed: '"+y+" MB')":""}. Please Wait...`),await new Promise(u=>setTimeout(u,5e3))),ne(process.execPath,[`--max-old-space-size=${de}`,"--expose-gc","--max-semi-space-size=1",_(import.meta.url),...process.argv.slice(2)],{stdio:"inherit"}).on("exit",u=>process.exit(u||0));else{let o=process.argv.slice(2),u=o.includes("--help")&&o[o.indexOf("--help")+1]==="commands",F=o.includes("--help")&&!u,T=o.includes("--version")||o.includes("-v"),P=o[0]==="--update",R=o[0]==="--export";if(o[0]==="--usage"||o.includes("--usage")||o[0]==="--budget"||o.includes("--budget")){let{openUsageDashboard:e}=await import("./chunks/usageServer-2ICYG54E.js"),{url:a}=await e();console.log(`
|
|
6
6
|
\u2726 FluxFlow Token Usage & Analytics Dashboard
|
|
7
7
|
\u2800\u2800\u2514\u2500 Serving at: ${a}
|
|
8
8
|
\u2800\u2800\u2514\u2500 Opened in default browser. Press Ctrl+C to stop.
|
|
9
|
-
`),await new Promise(()=>{})}if(T||F||u||P||R){let e=await import("fs"),a=await import("path"),{fileURLToPath:n}=await import("url"),p=a.join(a.dirname(n(import.meta.url)),"../package.json"),m=JSON.parse(e.readFileSync(p,"utf8")).version;if(R){let w=(o[1]||"").toLowerCase();if(w==="error"||w==="logs")try{let{exportErrorLogs:i}=await import("./chunks/export-
|
|
9
|
+
`),await new Promise(()=>{})}if(T||F||u||P||R){let e=await import("fs"),a=await import("path"),{fileURLToPath:n}=await import("url"),p=a.join(a.dirname(n(import.meta.url)),"../package.json"),m=JSON.parse(e.readFileSync(p,"utf8")).version;if(R){let w=(o[1]||"").toLowerCase();if(w==="error"||w==="logs")try{let{exportErrorLogs:i}=await import("./chunks/export-PSA6YZMJ.js"),l=await i();console.log(`[EXPORT LOGS] Exported ${l.entryCount} error log entries (FluxFlow: ${l.fluxflowCount}, Memory: ${l.memoryCount}) to "${l.exportFile}"`),process.exit(0)}catch(i){console.error(`[EXPORT ERROR] Failed to export error logs: ${i.message}`),process.exit(1)}else console.error(`[EXPORT ERROR] Invalid export target "${o[1]||""}". --export only supports 'error'.
|
|
10
10
|
Usage: fluxflow --export error`),process.exit(1)}if(T&&(console.log(`v${m}`),process.exit(0)),F&&(console.log(`FluxFlow CLI Arguments:
|
|
11
11
|
--mode <flux|flow> Set startup mode (flux: Agent / flow: Chat)
|
|
12
12
|
--model <model_name> Set startup AI model
|
|
@@ -63,4 +63,4 @@ Usage: fluxflow --export error`),process.exit(1)}if(T&&(console.log(`v${m}`),pro
|
|
|
63
63
|
/docs View documentation
|
|
64
64
|
/fluxflow init Create FluxFlow.md template
|
|
65
65
|
/update check Check for new version
|
|
66
|
-
/update latest Install latest release`),process.exit(0)),P){let w=o[1]||"latest";if(w==="check"){let i=o[2]==="latest";try{let f=(await(await fetch("https://registry.npmjs.org/fluxflow-cli",{cache:"no-store"})).json())["dist-tags"]?.latest;f||(console.error("Error: Could not retrieve latest version."),process.exit(1)),console.log(i?`Latest version: v${f}`:f!==m?`A new version of FluxFlow is available: v${f} (current: v${m}). Run "fluxflow --update latest" to upgrade.`:`FluxFlow is up to date (v${m}).`)}catch(l){console.error("Error checking for updates:",l.message),process.exit(1)}process.exit(0)}else if(w==="latest"){console.log("Checking latest version and settings...");try{let r=(await(await fetch("https://registry.npmjs.org/fluxflow-cli",{cache:"no-store"})).json())["dist-tags"]?.latest;r||(console.error("Error: Could not retrieve latest version."),process.exit(1)),r===m&&(console.log(`FluxFlow is already up to date (v${m}).`),process.exit(0));let f=async()=>{let t=(await import("react")).default,{useState:$}=t,{render:q,Box:g,Text:h}=await import("ink"),z=(await import("ink-select-input")).default,J=(await import("ink-text-input")).default;return new Promise(K=>{let Q=[{label:"NPM",value:"npm"},{label:"PNPM",value:"pnpm"},{label:"Yarn",value:"yarn"},{label:"Bun",value:"bun"},{label:"Custom Command",value:"custom"}],Z=({label:v,isSelected:M})=>t.createElement(g,{width:"100%"},t.createElement(h,{bold:M},"\u2514\u2500 ",M?"\x1B[32m\u25CF\x1B[0m":"\u25CB"," ",v)),k,ee=()=>{let[v,M]=$("select"),[te,se]=$(""),ae=E=>{E.value==="custom"?M("custom"):O({manager:E.value})},re=E=>{O({manager:"custom",customCommand:E})};return v==="custom"?t.createElement(g,{flexDirection:"column",marginY:1},t.createElement(g,{marginBottom:1},t.createElement(h,{color:"magenta",bold:!0},"\u{1F527} Enter custom update command:")),t.createElement(g,{flexDirection:"row"},t.createElement(h,{color:"cyan",bold:!0}," \u276F "),t.createElement(J,{value:te,onChange:se,onSubmit:re})),t.createElement(g,{marginTop:1},t.createElement(h,{color:"gray",dimColor:!0,italic:!0}," (Press Enter to confirm)"))):t.createElement(g,{flexDirection:"column",marginY:1},t.createElement(g,{marginBottom:1},t.createElement(h,{color:"magenta",bold:!0},"\u{1F4E6} Select a package manager for the update:")),t.createElement(z,{items:Q,onSelect:ae,itemComponent:Z,indicatorComponent:()=>null}))},O=v=>{k&&k(),K(v)},{unmount:oe}=q(t.createElement(ee,null));k=oe})},c,N="",b;try{let{loadSettings:t}=await import("./chunks/settings-
|
|
66
|
+
/update latest Install latest release`),process.exit(0)),P){let w=o[1]||"latest";if(w==="check"){let i=o[2]==="latest";try{let f=(await(await fetch("https://registry.npmjs.org/fluxflow-cli",{cache:"no-store"})).json())["dist-tags"]?.latest;f||(console.error("Error: Could not retrieve latest version."),process.exit(1)),console.log(i?`Latest version: v${f}`:f!==m?`A new version of FluxFlow is available: v${f} (current: v${m}). Run "fluxflow --update latest" to upgrade.`:`FluxFlow is up to date (v${m}).`)}catch(l){console.error("Error checking for updates:",l.message),process.exit(1)}process.exit(0)}else if(w==="latest"){console.log("Checking latest version and settings...");try{let r=(await(await fetch("https://registry.npmjs.org/fluxflow-cli",{cache:"no-store"})).json())["dist-tags"]?.latest;r||(console.error("Error: Could not retrieve latest version."),process.exit(1)),r===m&&(console.log(`FluxFlow is already up to date (v${m}).`),process.exit(0));let f=async()=>{let t=(await import("react")).default,{useState:$}=t,{render:q,Box:g,Text:h}=await import("ink"),z=(await import("ink-select-input")).default,J=(await import("ink-text-input")).default;return new Promise(K=>{let Q=[{label:"NPM",value:"npm"},{label:"PNPM",value:"pnpm"},{label:"Yarn",value:"yarn"},{label:"Bun",value:"bun"},{label:"Custom Command",value:"custom"}],Z=({label:v,isSelected:M})=>t.createElement(g,{width:"100%"},t.createElement(h,{bold:M},"\u2514\u2500 ",M?"\x1B[32m\u25CF\x1B[0m":"\u25CB"," ",v)),k,ee=()=>{let[v,M]=$("select"),[te,se]=$(""),ae=E=>{E.value==="custom"?M("custom"):O({manager:E.value})},re=E=>{O({manager:"custom",customCommand:E})};return v==="custom"?t.createElement(g,{flexDirection:"column",marginY:1},t.createElement(g,{marginBottom:1},t.createElement(h,{color:"magenta",bold:!0},"\u{1F527} Enter custom update command:")),t.createElement(g,{flexDirection:"row"},t.createElement(h,{color:"cyan",bold:!0}," \u276F "),t.createElement(J,{value:te,onChange:se,onSubmit:re})),t.createElement(g,{marginTop:1},t.createElement(h,{color:"gray",dimColor:!0,italic:!0}," (Press Enter to confirm)"))):t.createElement(g,{flexDirection:"column",marginY:1},t.createElement(g,{marginBottom:1},t.createElement(h,{color:"magenta",bold:!0},"\u{1F4E6} Select a package manager for the update:")),t.createElement(z,{items:Q,onSelect:ae,itemComponent:Z,indicatorComponent:()=>null}))},O=v=>{k&&k(),K(v)},{unmount:oe}=q(t.createElement(ee,null));k=oe})},c,N="",b;try{let{loadSettings:t}=await import("./chunks/settings-QKREUSRE.js");b=await t(),c=b?.systemSettings?.updateManager||b?.updateManager}catch{}if(!c){let t=await f();c=t.manager,N=t.customCommand}let d="";c==="pnpm"?d=`pnpm add -g fluxflow-cli@${r}`:c==="bun"?d=`bun add -g fluxflow-cli@${r}`:c==="yarn"?d=`yarn global add fluxflow-cli@${r}`:c==="custom"?d=N||b?.customUpdateCommand||`npm install -g fluxflow-cli@${r}`:d=`npm install -g fluxflow-cli@${r}`,console.log(`Updating FluxFlow to v${r} using ${c}...`),console.log(`Running: ${d}`);let{execSync:X}=await import("child_process");X(d,{stdio:"inherit"}),console.log(`\x1B[32m\u2705 Update successful! FluxFlow updated to v${r}.\x1B[0m`)}catch(i){console.error("\x1B[31m\u274C Update failed:\x1B[0m",i.message),process.exit(1)}process.exit(0)}else console.error("Unknown update command. Available options: --update, --update check, --update check latest, --update latest"),process.exit(1)}}let{default:U}=await import("react"),{render:j}=await import("ink"),{default:Y}=await import("./chunks/app-E4LPHXZS.js");process.env.NODE_NO_WARNINGS="1";let G=["cuimp","Found existing binary","Binary verified","curl.exe not found","Falling back to .bat file","DeprecationWarning"],H=console.log,W=console.warn,V=console.error,S=e=>{let a=e.map(String).join(" ");return G.some(n=>a.includes(n))};console.log=(...e)=>!S(e)&&H(...e),console.warn=(...e)=>!S(e)&&W(...e),console.error=(...e)=>!S(e)&&V(...e);let C=o.findIndex(e=>e==="--cwd"||e==="--path");if(C!==-1&&C+1<o.length){let e=o[C+1],a=await import("path"),n=await import("fs-extra"),p=a.default.resolve(e);try{n.default.existsSync(p)&&n.default.statSync(p).isDirectory()?process.chdir(p):(console.error(`[ERROR] Directory not found: "${e}"`),process.exit(0))}catch(x){console.error(`[ERROR] Failed to change directory to "${e}": ${x.message}`),process.exit(0)}}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"),process.stdout.write("\x1B[?2004h"));let I=()=>{process.stdout.isTTY&&process.stdout.write("\x1B[?2004l")};if(process.on("exit",I),["SIGINT","SIGTERM","SIGHUP"].forEach(e=>{process.once(e,()=>{I(),process.exit(0)})}),o.includes("--playground")){let e=process.cwd();process.argv.push("--original-cwd",e);let{DATA_DIR:a}=await import("./chunks/paths-CHZDSDRF.js"),n=await import("path"),p=await import("fs-extra"),x=n.default.join(a,"playground");try{p.default.ensureDirSync(x),process.chdir(x)}catch{}}j(U.createElement(Y,{args:process.argv.slice(2)}),{exitOnCtrlC:!1})}
|
package/dist/package.json
CHANGED