fluxflow-cli 4.25.5 → 4.26.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +15 -4
  2. package/dist/chunks/9router-J5GHSSMY.js +2 -0
  3. package/dist/chunks/ai-26X3QUNA.js +1 -0
  4. package/dist/chunks/aihubmix-ZANBMI5F.js +2 -0
  5. package/dist/chunks/apinex-MSG2QNBL.js +2 -0
  6. package/dist/chunks/{app-EIBVHMQV.js → app-HB46OKKI.js} +133 -133
  7. package/dist/chunks/{chunk-2AUIP6N5.js → chunk-37QHXCGM.js} +1 -1
  8. package/dist/chunks/chunk-HM3CMNOJ.js +1 -0
  9. package/dist/chunks/chunk-JS5ZIGFR.js +1 -0
  10. package/dist/chunks/chunk-NL4MAQSB.js +1 -0
  11. package/dist/chunks/chunk-PSAFKMCL.js +12 -0
  12. package/dist/chunks/{chunk-AF7LASZ3.js → chunk-QJBRY74K.js} +1 -1
  13. package/dist/chunks/{chunk-BM3FXMTK.js → chunk-QNUIT5G4.js} +1 -1
  14. package/dist/chunks/chunk-QWTKV7Q4.js +1 -0
  15. package/dist/chunks/chunk-QXN5B2BR.js +33 -0
  16. package/dist/chunks/chunk-Y5H7A7H3.js +882 -0
  17. package/dist/chunks/chunk-ZLWYMCCW.js +1 -0
  18. package/dist/chunks/{click-5I5YOSNC.js → click-BIP2KIKK.js} +2 -2
  19. package/dist/chunks/{computer_action-RTEC7VUX.js → computer_action-W532LBFE.js} +1 -1
  20. package/dist/chunks/deepseek-Y4NFGKGV.js +2 -0
  21. package/dist/chunks/{drag-6TRBT2C3.js → drag-XXDYAMBU.js} +1 -1
  22. package/dist/chunks/{exec_command-J23EG77W.js → exec_command-AB4DNQYP.js} +1 -1
  23. package/dist/chunks/explabs-4D3EJOBE.js +2 -0
  24. package/dist/chunks/{generate_image-4LIDEIYO.js → generate_image-DJ5N72HD.js} +1 -1
  25. package/dist/chunks/inferx-R7LOBSCS.js +3 -0
  26. package/dist/chunks/infron-6QUT2E5V.js +2 -0
  27. package/dist/chunks/{invoke-R75DZFQB.js → invoke-7BVHSLMJ.js} +2 -2
  28. package/dist/chunks/{invokeSync-JS3JUZLM.js → invokeSync-CJLYOYER.js} +2 -2
  29. package/dist/chunks/{key_press-Z3OXF74E.js → key_press-EJFHIVWP.js} +1 -1
  30. package/dist/chunks/{keyboard_typing-F2SAZLI2.js → keyboard_typing-4M63JGZ4.js} +1 -1
  31. package/dist/chunks/mistral-7PATNJTO.js +2 -0
  32. package/dist/chunks/{model_config-M24OEKJE.js → model_config-YD5AWI33.js} +1 -1
  33. package/dist/chunks/nvidia-FORTI2DZ.js +2 -0
  34. package/dist/chunks/ollama-ZPTZJK7V.js +2 -0
  35. package/dist/chunks/openrouter-M3ZZMDXU.js +2 -0
  36. package/dist/chunks/poolside-IS5XCHAE.js +2 -0
  37. package/dist/chunks/{screen_grid-RAKJUJQA.js → screen_grid-BK5KF7MP.js} +1 -1
  38. package/dist/chunks/{scroll-7JYRU34H.js → scroll-5V7P3DXY.js} +1 -1
  39. package/dist/chunks/search_keyword-7WJ4M737.js +6 -0
  40. package/dist/chunks/{secrets-LPVNWDTB.js → secrets-4GLUJF7A.js} +1 -1
  41. package/dist/chunks/sensenova-AJZGPQZ5.js +2 -0
  42. package/dist/chunks/{settings-KKYNW25D.js → settings-RB45GKVI.js} +1 -1
  43. package/dist/chunks/tokenharbor-3ZMTIJ2M.js +2 -0
  44. package/dist/chunks/{update_file-KNEQRJAG.js → update_file-FUWOJ4JN.js} +1 -1
  45. package/dist/chunks/{usage-VLICZGBC.js → usage-73HUG5FC.js} +1 -1
  46. package/dist/chunks/usageServer-NUJCWWP3.js +1 -0
  47. package/dist/chunks/{write_file-7X2GQFWK.js → write_file-HH7WRRDJ.js} +1 -1
  48. package/dist/cli.js +5 -5
  49. package/dist/model_config.json +7 -6
  50. package/dist/package.json +2 -2
  51. package/model_config.json +7 -6
  52. package/package.json +2 -2
  53. package/surprise.js +15 -1
  54. package/dist/chunks/ai-ZBSCEHTS.js +0 -1
  55. package/dist/chunks/chunk-3CZWTXIR.js +0 -1
  56. package/dist/chunks/chunk-4XXLWMY6.js +0 -9
  57. package/dist/chunks/chunk-GRQ7JZZP.js +0 -1
  58. package/dist/chunks/chunk-KA7IQD5D.js +0 -892
  59. package/dist/chunks/chunk-OSDQRSY6.js +0 -1
  60. package/dist/chunks/chunk-RTT7P5KS.js +0 -33
  61. package/dist/chunks/search_keyword-CSRQFPHQ.js +0 -6
  62. package/dist/chunks/usageServer-HY4ME2BW.js +0 -1
@@ -1,9 +0,0 @@
1
- import{a as X}from"./chunk-GRQ7JZZP.js";import{a as rt,b as J}from"./chunk-L3W2X74K.js";import{d as G,h as V,i as M,j as O}from"./chunk-DSVLWYIT.js";import D from"fs-extra";import I from"path";import Tt from"http";import R from"fs-extra";import Z from"path";import{spawn as Dt}from"child_process";import{fileURLToPath as St}from"url";var F=52991,Lt=15e3,ct=Z.join(G,"usage","usage_error.txt"),lt=async(e,t)=>{let o=t?.stack||t?.message||String(t);console.error(`[Usage Daemon Error] [${e}]:`,t);try{await R.ensureDir(Z.dirname(ct));let s=`[${new Date().toISOString()}] [Daemon:${e}] ${o}
2
- -------------------------------------
3
-
4
- `;await R.appendFile(ct,s,"utf8")}catch{}},j={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:[]},K=(e,t)=>{if(!e)return{};let o=Object.keys(e),n=new Date(new Date(t).getTime()-720*60*60*1e3),s={};for(let a of o)new Date(a)>=n&&(s[a]=e[a]);return s};async function Mt(){let e=new Date().toISOString().split("T")[0],t=null;try{if(await R.exists(M)){let o=(await R.readFile(M,"utf8")).trim();o.startsWith("{")||o.startsWith("[")?t=JSON.parse(o):t=JSON.parse(J(o))}}catch(o){await lt("loadUsageFromDisk",o)}if(t){let o={...j,...t.stats||{}};Array.isArray(o.imageCalls)||(o.imageCalls=[]);let n=t.history||{},s=K(n,e);if(t.date===e)return{...t,stats:o,history:s};{let a=t.date,r={...s};return a&&(r[a]=o),{date:e,stats:{...j},history:K(r,e)}}}return{date:e,stats:{...j},history:{}}}async function vt(e=F){let t=await Mt(),o=!1,n=!1,s=Date.now(),a=null,r=async()=>{if(t)try{await R.ensureDir(Z.dirname(M));let l=new Date().toISOString().split("T")[0];t.history=K(t.history||{},t.date||l),t.saveId=Math.random().toString(36).substring(2)+Date.now().toString(36);let i=rt(JSON.stringify(t,null,2));await R.writeFile(M,i,"utf8"),n=!1}catch(l){await lt("flushToDisk",l)}},c=async()=>{a&&clearInterval(a),await r(),u.close(()=>{process.exit(0)}),setTimeout(()=>process.exit(0),1e3).unref()};a=setInterval(async()=>{if(o)return;Date.now()-s>Lt&&await c()},5e3),a.unref&&a.unref();let u=Tt.createServer(async(l,i)=>{let d=l.url||"";if(l.method==="POST"&&d==="/heartbeat"){o||(s=Date.now()),i.writeHead(200,{"Content-Type":"application/json"}),i.end(JSON.stringify({ok:!0}));return}if((l.method==="GET"||l.method==="POST")&&d==="/finalize"){o=!0,a&&clearInterval(a),await r(),i.writeHead(200,{"Content-Type":"application/json"}),i.end(JSON.stringify({success:!0,message:"Finalized and written to disk"})),setTimeout(()=>{u.close(()=>process.exit(0)),setTimeout(()=>process.exit(0),500).unref()},3e3);return}if(l.method==="POST"&&d==="/flush"){o||(s=Date.now(),await r()),i.writeHead(200,{"Content-Type":"application/json"}),i.end(JSON.stringify({success:!0}));return}if(l.method==="POST"&&d==="/write"){if(o){i.writeHead(403,{"Content-Type":"application/json"}),i.end(JSON.stringify({error:"Daemon finalized. Writes locked."}));return}s=Date.now();let m="";l.on("data",h=>{m+=h}),l.on("end",async()=>{try{let h=JSON.parse(m||"{}"),k=new Date().toISOString().split("T")[0];if(t.date!==k){let T=t.date;T&&(t.history||(t.history={}),t.history[T]={...t.stats}),t.date=k,t.stats={...j}}t.stats||(t.stats={...j});let{key:y,amount:f=1,provider:p,model:S}=h;if(y&&t.stats[y]!==void 0&&typeof t.stats[y]=="number"&&(t.stats[y]+=Math.floor(f)),y==="agent"&&p&&(t.stats.providerRequests||(t.stats.providerRequests={}),t.stats.providerRequests[p]=(t.stats.providerRequests[p]||0)+Math.floor(f)),p&&S&&(y==="tokens"||y==="cachedTokens"||y==="candidateTokens")){t.stats.models||(t.stats.models={}),t.stats.models[p]||(t.stats.models[p]={}),t.stats.models[p][S]||(t.stats.models[p][S]={tokens:0,cachedTokens:0,candidateTokens:0});let T=t.stats.models[p][S];y==="tokens"&&(T.tokens+=Math.floor(f)),y==="cachedTokens"&&(T.cachedTokens+=Math.floor(f)),y==="candidateTokens"&&(T.candidateTokens+=Math.floor(f))}n=!0,await r(),i.writeHead(200,{"Content-Type":"application/json"}),i.end(JSON.stringify({success:!0}))}catch(h){i.writeHead(400,{"Content-Type":"application/json"}),i.end(JSON.stringify({error:h.message}))}});return}i.writeHead(404,{"Content-Type":"text/plain"}),i.end("Not Found")});u.listen(e,"127.0.0.1",()=>{s=Date.now()}),u.on("error",l=>{l.code==="EADDRINUSE"&&process.exit(0)})}async function Ut(e=F){try{if((await fetch(`http://127.0.0.1:${e}/heartbeat`,{method:"POST",signal:AbortSignal.timeout(300)})).ok)return!0}catch{}try{let t=St(import.meta.url);Dt(process.execPath,[t,"--usage-daemon-worker",`--port=${e}`],{detached:!0,stdio:"ignore",windowsHide:!0}).unref();for(let n=0;n<10;n++){await new Promise(s=>setTimeout(s,100));try{if((await fetch(`http://127.0.0.1:${e}/heartbeat`,{method:"POST",signal:AbortSignal.timeout(300)})).ok)return!0}catch{}}}catch{}return!1}async function tt(e,t=F){try{await Ut(t),await fetch(`http://127.0.0.1:${t}/write`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e),signal:AbortSignal.timeout(1e3)})}catch{}}async function xt(e=F){try{await fetch(`http://127.0.0.1:${e}/heartbeat`,{method:"POST",signal:AbortSignal.timeout(600)})}catch{}}async function Ot(e=F){try{await fetch(`http://127.0.0.1:${e}/finalize`,{method:"GET",signal:AbortSignal.timeout(1e3)})}catch{}}if(process.argv.includes("--usage-daemon-worker")){let e=process.argv.find(o=>o.startsWith("--port=")),t=e?parseInt(e.split("=")[1],10):F;vt(t)}var dt=I.join(G,"usage","usage_error.txt"),W=async(e,t)=>{let o=t?.stack||t?.message||String(t);console.error(`[Usage Error] [${e}]:`,t);try{await D.ensureDir(I.dirname(dt));let s=`[${new Date().toISOString()}] [${e}] ${o}
5
- -------------------------------------
6
-
7
- `;await D.appendFile(dt,s,"utf8")}catch{}},g=null,v={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:[]},z=(e,t)=>{if(!e)return{};let o=Object.keys(e),n=new Date(new Date(t).getTime()-720*60*60*1e3),s={};for(let a of o)new Date(a)>=n&&(s[a]=e[a]);return s},$=async()=>{let e=new Date().toISOString().split("T")[0];try{!await D.exists(M)&&await D.exists(V)&&(await D.ensureDir(I.dirname(M)),await D.move(V,M))}catch{}let t=null;try{if(await D.exists(M)){let n=(await D.readFile(M,"utf8")).trim();n.startsWith("{")||n.startsWith("[")?t=JSON.parse(n):t=JSON.parse(J(n))}}catch(n){await W("loadUsageFromFile",n)}let o=t;if(o){let n=o.stats||{...v},s={...v,...n};Array.isArray(s.imageCalls)||(s.imageCalls=[]);let a=o.history||{},r=z(a,e);if(o.date===e)return{...o,stats:s,history:r};{let c=o.date,u=s,l={...r};return c&&(l[c]=u),{date:e,stats:{...v},history:z(l,e)}}}return{date:e,stats:{...v},history:{}}},zt=async()=>{},mt=30,Ct=()=>{let t=new Date().toISOString().split("T")[0];return I.join(O,`${t}.jsonl`)},Qt=async e=>{try{await D.ensureDir(O);let t={time:new Date().toISOString(),provider:e.provider||"unknown",model:e.model||"unknown",input:Number(e.prompt)||0,cached:Number(e.cached)||0,output:Number(e.output)||0,reasoning:Number(e.reasoning)||0};await D.appendFile(Ct(),JSON.stringify(t)+`
8
- `,"utf8")}catch{}},bt=async()=>{try{if(!await D.exists(O))return;let e=new Date;e.setDate(e.getDate()-mt);let t=await D.readdir(O);for(let o of t){if(!o.endsWith(".jsonl"))continue;let n=o.replace(".jsonl","");/^\d{4}-\d{2}-\d{2}$/.test(n)&&new Date(n)<e&&await D.remove(I.join(O,o))}}catch{}},Yt=async(e=mt)=>{let t=[];try{if(!await D.exists(O))return t;let n=(await D.readdir(O)).filter(s=>s.endsWith(".jsonl")).sort().slice(-Math.max(1,e));for(let s of n)try{let a=await D.readFile(I.join(O,s),"utf8");for(let r of a.split(`
9
- `))if(r.trim())try{t.push(JSON.parse(r))}catch(c){await W(`getTimedUsage:parseLine (${s})`,c)}}catch(a){await W(`getTimedUsage:readFile (${s})`,a)}}catch(o){await W("getTimedUsage",o)}return t},Vt=async()=>{g=await $(),await bt()},U=async()=>{let e=new Date().toISOString().split("T")[0];if(!g)g=await $();else if(g.date!==e){let t=g.date,o=g.stats,n=g.history||{};o&&(n[t]=o),g={date:e,stats:{...v},history:z(n,e)},isDirty=!0,await flushUsage()}return g&&g.stats&&!Array.isArray(g.stats.imageCalls)&&(g.stats.imageCalls=[]),g.stats},ut=async()=>{let e=new Date().toISOString().split("T")[0];g||(g=await $()),g.date!==e&&await U();let t=g.history||{},o=z(t,e);g.history=o;let n=g.stats||{...v},s={...v};s.imageCalls=[],s.models={};let a=(r,c)=>{for(let u in r)if(u==="imageCalls")r.imageCalls=[...r.imageCalls||[],...c.imageCalls||[]];else if(u==="models"){let l=c.models||{};for(let i in l){r.models[i]||(r.models[i]={});for(let d in l[i]){r.models[i][d]||(r.models[i][d]={tokens:0,cachedTokens:0,candidateTokens:0});let m=r.models[i][d],h=l[i][d];m.tokens+=h.tokens||0,m.cachedTokens+=h.cachedTokens||0,m.candidateTokens+=h.candidateTokens||0}}}else typeof r[u]=="number"&&(r[u]+=c[u]||0)};a(s,n);for(let r in o)a(s,o[r]);return s},Xt=async(e,t)=>{e==="toolSuccess"?E.toolSuccess++:e==="toolFailure"?E.toolFailure++:e==="toolDenied"&&E.toolDenied++;let o=await U();o[e]!==void 0&&o[e]++,t&&e==="agent"&&(o.providerRequests||(o.providerRequests={}),o.providerRequests[t]=(o.providerRequests[t]||0)+1),await tt({key:e,amount:1,provider:t})},E={linesAdded:0,linesRemoved:0,toolSuccess:0,toolFailure:0,toolDenied:0},Kt=async(e,t,o,n)=>{e==="linesAdded"?E.linesAdded+=t:e==="linesRemoved"&&(E.linesRemoved+=t);let s=await U();if(s[e]!==void 0&&(s[e]+=Math.floor(t)),o&&n&&(e==="tokens"||e==="cachedTokens"||e==="candidateTokens")){s.models||(s.models={}),s.models[o]||(s.models[o]={}),s.models[o][n]||(s.models[o][n]={tokens:0,cachedTokens:0,candidateTokens:0});let a=s.models[o][n];e==="tokens"&&(a.tokens+=Math.floor(t)),e==="cachedTokens"&&(a.cachedTokens+=Math.floor(t)),e==="candidateTokens"&&(a.candidateTokens+=Math.floor(t))}await tt({key:e,amount:t,provider:o,model:n})},ft=async(e=1)=>{let t=new Date,o=t.toISOString().split("T")[0];g||(g=await $()),g.date!==o&&await U();let n=t.getFullYear(),s=t.getMonth();t.getDate()<e&&(s-=1,s<0&&(s=11,n-=1));let c=new Date(n,s,e).toISOString().split("T")[0],u=g.history||{},l=g.stats||{...v},i={...v};i.imageCalls=[],i.models={};let d=(m,h)=>{for(let k in m)if(k==="imageCalls")m.imageCalls=[...m.imageCalls||[],...h.imageCalls||[]];else if(k==="models"){let y=h.models||{};for(let f in y){m.models[f]||(m.models[f]={});for(let p in y[f]){m.models[f][p]||(m.models[f][p]={tokens:0,cachedTokens:0,candidateTokens:0});let S=m.models[f][p],T=y[f][p];S.tokens+=T.tokens||0,S.cachedTokens+=T.cachedTokens||0,S.candidateTokens+=T.candidateTokens||0}}}else typeof m[k]=="number"&&(m[k]+=h[k]||0)};d(i,l);for(let m in u)m>=c&&m<o&&d(i,u[m]);return i},At=async(e,t={})=>{let o=await X().catch(()=>({})),n=t.apiTier||o.apiTier||"Free",s=t.quotas||t.systemSettings?.quotas||o.quotas||{},a=s.providerBudgets||{},r=!!a.__useProvider,c=t.aiProvider||o.aiProvider||"Google",u=r&&!!a[c],l=()=>{if(u){let i=a[c];return{agentLimit:typeof i.agentLimit=="number"&&i.agentLimit>0?i.agentLimit:99999999,tokenLimit:typeof i.tokenLimit=="number"&&i.tokenLimit>0?i.tokenLimit:99999999999999,monthlyTokenLimit:typeof i.monthlyTokenLimit=="number"&&i.monthlyTokenLimit>0?i.monthlyTokenLimit:99999999999999}}return{agentLimit:s.agentLimit||99999999,tokenLimit:s.tokenLimit||99999999999999,monthlyTokenLimit:s.monthlyTokenLimit||99999999999999}};if(e==="agent"){let{agentLimit:i,tokenLimit:d,monthlyTokenLimit:m}=l(),h=await U(),k;s.resetMode==="Custom"?k=await ft(s.resetDay||1):k=await ut();let y=0,f=0,p=0;if(u){y=h.providerRequests?.[c]||0;let S=h.models?.[c]||{};for(let P in S)f+=S[P]?.tokens||0;let T=k.models?.[c]||{};for(let P in T)p+=T[P]?.tokens||0}else y=h.agent||0,f=h.tokens||0,p=k.tokens||0;return n==="Free"&&h.agent+h.background>=999999?{allowed:!1,reason:"Free Tier Daily Usage Limit Exceeded"}:y>=i?{allowed:!1,reason:u?`Daily Request Limit Reached for ${c}`:"Daily Agent Request Limit Reached"}:f>=d?{allowed:!1,reason:u?`Daily Token Budget Exhausted for ${c}`:"Daily Token Budget Exhausted"}:p>=m?{allowed:!1,reason:u?`Monthly Token Budget Exhausted for ${c}`:"Monthly Token Budget Exhausted"}:{allowed:!0}}if(e==="background"){let i=await U();if(n==="Free"&&i.agent+i.background>=999999)return{allowed:!1,reason:"Free Tier Background Limit Exceeded"};let d=i.background<(s.backgroundLimit||999999);return{allowed:d,reason:d?void 0:"Background Request Limit Exceeded"}}if(e==="search"){let d=(await U()).search<(s.searchLimit||100);return{allowed:d,reason:d?void 0:"Search Quota Exceeded"}}return{allowed:!0}},Zt=async(e,t={})=>(await At(e,t)).allowed,et=e=>{if(!e||e.length===0)return[];let o=[...e].sort((s,a)=>s.timestamp-a.timestamp),n=[];for(let s of o){if(n.length>0){let a=n[n.length-1];if(s.timestamp>=a.start&&s.timestamp<a.end){a.calls.push(s),a.spent+=s.cost;continue}}n.push({start:s.timestamp,end:s.timestamp+36e5,calls:[s],spent:s.cost})}return n},gt=(e,t)=>{if(!e||e.length===0)return .025;let n=et(e);if(n.length===0)return .025;let s=[];for(let d of n){let m=.025;if(s.length>0){let k=s[s.length-1],y=!1;if(s.length>=2){let f=s[s.length-2];k.ratio>=.8&&f.ratio>=.8&&(y=!0)}if(y)m=.015;else{let f=k.limit,p=k.ratio;p>=.8?m=f===.015?.015:f:p<.4?m=Math.min(.025,f+.005):p>=.4&&p<.6?m=Math.min(.025,f+.004):m=Math.min(.025,f+.002)}}let h=m>0?d.spent/m:0;s.push({limit:m,spent:d.spent,ratio:h})}let a=n[n.length-1];if(t<a.end)return s[s.length-1].limit;let r=s[s.length-1].limit,c=r,u=s[s.length-1].ratio,l=a.end,i=0;for(let d=s.length-1;d>=0&&s[d].ratio>=.8;d--)i++;for(;l<=t;){let d=.025;i>=2?d=.015:u>=.8?d=c===.015?.015:c:u<.4?d=Math.min(.025,c+.005):u>=.4&&u<.6?d=Math.min(.025,c+.004):d=Math.min(.025,c+.002),c=d,u=0,i=0,l+=36e5,r=d}return r},te=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 U();s.imageCalls||(s.imageCalls=[]);let a=Date.now(),r=et(s.imageCalls),c=0;if(r.length>0){let l=r[r.length-1];a>=l.start&&a<l.end&&(c=l.spent)}let u=gt(s.imageCalls,a);return c+n<=u},ee=async()=>{let e=await U();e.imageCalls||(e.imageCalls=[]);let t=Date.now(),o=et(e.imageCalls),n=[],s=0,a=0;if(o.length>0){let l=o[o.length-1];t>=l.start&&t<l.end&&(n=l.calls,s=l.spent,a=Math.max(0,Math.ceil((l.end-t)/(60*1e3))))}let r=gt(e.imageCalls,t),c=Math.max(0,r-s),u=s;return{totalSpent:s,remaining:c,activeCallsCount:n.length,nextResetMin:a,reclaimCost:u,limit:r}},se=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 U();s.imageCalls||(s.imageCalls=[]),s.imageCalls.push({timestamp:Date.now(),cost:n}),queueFlush()},oe=async()=>{let e=new Date().toISOString().split("T")[0];g||(g=await $()),g.date!==e&&await U();let t=g.stats||{...v},o=g.history||{},n=new Set(Object.keys(o));n.add(e);let a=Array.from(n).sort().map(L=>{let x=L===e?t:o[L]||{},w={...v,...x},H=w.tokens||0,_=w.cachedTokens||0,N=w.candidateTokens||0,B=Math.max(0,H-N),q=Math.max(0,B-_),C=w.agent||0,b=w.background||0,A=w.search||0,ht=C+b+A,Q=w.toolSuccess||0,st=w.toolFailure||0,ot=w.toolDenied||0,Y=Q+st+ot,pt=Y>0?(Q/Y*100).toFixed(1):"100.0",nt=w.linesAdded||0,at=w.linesRemoved||0,it=Array.isArray(w.imageCalls)?w.imageCalls:[],yt=it.reduce((kt,wt)=>kt+(wt.cost||0),0);return{date:L,tokens:H,cachedTokens:_,candidateTokens:N,promptTokens:B,uncachedPromptTokens:q,agent:C,background:b,search:A,totalRequests:ht,toolSuccess:Q,toolFailure:st,toolDenied:ot,totalTools:Y,toolSuccessRate:parseFloat(pt),linesAdded:nt,linesRemoved:at,netLines:nt-at,duration:w.duration||0,imageCallsCount:it.length,imageCost:yt,models:w.models||{},providerRequests:w.providerRequests||{}}}),r=await X().catch(()=>({})),c=r.quotas||{},u=r.apiTier||"Free",l=await ut().catch(()=>({tokens:0,agent:0})),i=null;c.resetMode==="Custom"&&(i=await ft(c.resetDay||1).catch(()=>({tokens:0})));let d=c.tokenLimit||0,m=c.monthlyTokenLimit||0,h=c.agentLimit||0,k=c.resetMode||"Daily",y=c.resetDay||1,f=c.providerBudgets||{},p=!!f.__useProvider,S=["Google","Anthropic","OpenAI","DeepSeek","Mistral","NVIDIA","OpenRouter","Ollama","InferX","SenseNova","AIHubMix","Poolside"];Object.keys(f).forEach(L=>{L!=="__useProvider"&&!S.includes(L)&&S.push(L)});let T=[];for(let L of S){let x=f[L];if(x&&(x.agentLimit||x.tokenLimit||x.monthlyTokenLimit)){let w=0,H=t.models?.[L]||{};for(let A in H)w+=H[A]?.tokens||0;let _=0,N=(c.resetMode==="Custom"?i?.models:l?.models)?.[L]||{};for(let A in N)_+=N[A]?.tokens||0;let B=t.providerRequests?.[L]||0,q=x.tokenLimit||0,C=x.monthlyTokenLimit||0,b=x.agentLimit||0;T.push({provider:L,dailyTokens:w,dailyTokenLimit:q,isDailyUnlimited:q>=9999999999999||q===0,monthlyTokens:_,monthlyTokenLimit:C,isMonthlyUnlimited:C>=9999999999999||C===0,dailyRequests:B,dailyAgentLimit:b,isRequestsUnlimited:b>=9999999||b===0})}}let P={apiTier:u,resetMode:k,resetDay:y,quotas:c,usingProviderBudgets:p&&T.length>0||T.length>0,providerBudgetsList:T,daily:{tokensUsed:t.tokens||0,tokenLimit:d,agentRequests:t.agent||0,agentLimit:h,isUnlimitedTokens:d>=9999999999999||d===0,isUnlimitedRequests:h>=9999999||h===0},monthly:{tokensUsed:(c.resetMode==="Custom"?i?.tokens:l?.tokens)||0,tokenLimit:m,isUnlimitedTokens:m>=9999999999999||m===0},providerBudgets:f};return{currentDate:e,todayStats:t,history:o,timeline:a,budget:P,runtimeSession:{...E}}};export{xt as a,Ot as b,zt as c,Qt as d,Yt as e,Vt as f,U as g,ut as h,Xt as i,E as j,Kt as k,ft as l,At as m,Zt as n,et as o,gt as p,te as q,ee as r,se as s,oe as t};
@@ -1 +0,0 @@
1
- import{n as u}from"./chunk-OSDQRSY6.js";import{e as m,f as c}from"./chunk-L3W2X74K.js";import{b as s}from"./chunk-DSVLWYIT.js";import n from"fs-extra";import g from"path";var r={mode:"Flux",display:0,thinkingLevel:"Medium",aiProvider:"Google",activeModel:u("Google","Free")||"gemma-4-31b-it",showFullThinking:!0,apiTier:"Free",quotas:{agentLimit:999999,backgroundLimit:999999,searchLimit:100,customModelId:"",customLimit:0,providerTiers:{Google:"Free",DeepSeek:"Free",NVIDIA:"Free",OpenRouter:"Free",InferX:"Free",SenseNova:"Free",Poolside:"Free",ExpLabs:"Free",TokenHarbor:"Free",APInex:"Free"}},systemSettings:{memory:!1,theme:"Dark",compression:0,autoExec:!0,allowExternalAccess:!1,advanceRollback:!1,autoDeleteHistory:"7d",useExternalData:!1,externalDataPath:"",preserveThinking:!0,loadingPhrases:!0,progressiveRendering:!0,showTPMEstimate:!0,subAgents:!1,CustomSubAgent:!1,SubAgentModel:"Default",SubAgentProvider:"",dynamicDirAwareness:!1,indentationTree:!0,ollamaEndpoint:"Cloud",compressToolResults:!1,autoTruncateResults:!0,imageHistoryCU:"Standard",contextLength:"256k",keepReasoningContext:!1,autoExcludeMetadata:!1,disableTodo:!1},profileData:{name:null,nickname:null,instructions:null},imageSettings:{keyType:"Default",quality:"Low-High",apiKey:""}},S=async()=>{let t={...r};try{if(await n.exists(s)){let e=m(s);if(e.imageSettings&&e.imageSettings.apiKey)try{let a=e.imageSettings.apiKey,{saveSecret:i}=await import("./secrets-LPVNWDTB.js");await i("POLLINATIONS_API_KEY",a),e.imageSettings.apiKey="",c(s,e)}catch{}t={...r,...e,quotas:{...r.quotas,...e.quotas,providerTiers:{...r.quotas.providerTiers,...e.quotas?.providerTiers||{}}},systemSettings:{...r.systemSettings,...e.systemSettings},profileData:{...r.profileData,...e.profileData},imageSettings:{...r.imageSettings,...e.imageSettings}}}}catch(e){console.error("Failed to load settings:",e)}try{let{getSecret:e}=await import("./secrets-LPVNWDTB.js"),a=await e("POLLINATIONS_API_KEY");a&&(t.imageSettings.apiKey=a)}catch{}if(t.showFullThinking===!1){t.showFullThinking=!0;try{c(s,t)}catch{}}return t},f=async t=>{let{FLUXFLOW_DIR:e}=await import("./paths-2EXHWUSL.js"),a=["logs","secret"];for(let i of a){let l=g.join(e,i),o=g.join(t,i);try{await n.exists(l)&&(await n.ensureDir(o),await n.copy(l,o,{overwrite:!0}))}catch(d){console.error(`Migration failed for ${i}:`,d)}}},D=async t=>{try{let e=await S();if(!e.systemSettings.useExternalData&&t.systemSettings?.useExternalData&&t.systemSettings?.externalDataPath&&await f(t.systemSettings.externalDataPath),t.imageSettings&&t.imageSettings.apiKey!==void 0){let{saveSecret:i,removeSecret:l}=await import("./secrets-LPVNWDTB.js"),o=t.imageSettings.apiKey;o?await i("POLLINATIONS_API_KEY",o):await l("POLLINATIONS_API_KEY")}let a={...e,...t};return a.systemSettings&&(a.systemSettings.dynamicDirAwareness=!1),a.imageSettings&&(a.imageSettings={...a.imageSettings,apiKey:""}),await n.ensureDir(g.dirname(s)),c(s,a),!0}catch(e){return console.error("Failed to save settings:",e),!1}};export{S as a,D as b};