fluxflow-cli 4.35.2 → 4.36.0

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 (35) hide show
  1. package/dist/chunks/{ai-MQYEWTCP.js → ai-DUQ7JTFT.js} +1 -1
  2. package/dist/chunks/app-3RT5WIFW.js +322 -0
  3. package/dist/chunks/{chunk-KHJAWDBM.js → chunk-ARVJHIPP.js} +1 -1
  4. package/dist/chunks/{chunk-H4KXMWYP.js → chunk-EKTQJIFL.js} +1 -1
  5. package/dist/chunks/chunk-HWQD4HC4.js +13 -0
  6. package/dist/chunks/chunk-NJADNSYK.js +1 -0
  7. package/dist/chunks/chunk-NXGWQV2R.js +1 -0
  8. package/dist/chunks/{chunk-QY6I2SVW.js → chunk-PUCRX3HD.js} +4 -4
  9. package/dist/chunks/{click-PN3BLFOY.js → click-YDLHTDEK.js} +2 -2
  10. package/dist/chunks/{computer_action-VMC545YJ.js → computer_action-2JLV6MY4.js} +1 -1
  11. package/dist/chunks/{drag-NMHO3BAW.js → drag-PUEGJCAB.js} +1 -1
  12. package/dist/chunks/{generate_image-ZNBMY2PT.js → generate_image-L2LXNTNE.js} +1 -1
  13. package/dist/chunks/{invoke-QLUOJSNO.js → invoke-7S44ZFQY.js} +2 -2
  14. package/dist/chunks/{invokeSync-75S6MWM4.js → invokeSync-SAKOE3G5.js} +2 -2
  15. package/dist/chunks/{key_press-RJIPXDAB.js → key_press-KR2O7S6E.js} +1 -1
  16. package/dist/chunks/{keyboard_typing-VXT53PRV.js → keyboard_typing-V4ALD3BD.js} +1 -1
  17. package/dist/chunks/{mistral-N6352JPY.js → mistral-O5VGMA23.js} +1 -1
  18. package/dist/chunks/model_config-C72R7DKL.js +1 -0
  19. package/dist/chunks/{nvidia-L6QMFBL3.js → nvidia-OVQSNJOT.js} +1 -1
  20. package/dist/chunks/{screen_grid-PMTAQA3B.js → screen_grid-XZKZBWOH.js} +1 -1
  21. package/dist/chunks/{scroll-OMBQDZHP.js → scroll-YTLIQ6C5.js} +1 -1
  22. package/dist/chunks/{settings-Q5OBKUO6.js → settings-LO76WAO4.js} +1 -1
  23. package/dist/chunks/{update_file-BD3AWZNQ.js → update_file-HGCNRGTK.js} +1 -1
  24. package/dist/chunks/usage-MHRBABMW.js +1 -0
  25. package/dist/chunks/{usageServer-SQHTSGOH.js → usageServer-YSHTV2E3.js} +52 -11
  26. package/dist/chunks/{write_file-AMAYRCUC.js → write_file-A67UXLZ2.js} +1 -1
  27. package/dist/cli.js +3 -3
  28. package/dist/package.json +2 -2
  29. package/package.json +2 -2
  30. package/dist/chunks/app-VK6325RN.js +0 -315
  31. package/dist/chunks/chunk-63V6P5DU.js +0 -1
  32. package/dist/chunks/chunk-KZTDLEUL.js +0 -1
  33. package/dist/chunks/chunk-X6YW3TVC.js +0 -12
  34. package/dist/chunks/model_config-EN3OYDPU.js +0 -1
  35. package/dist/chunks/usage-OUCURLG4.js +0 -1
@@ -1 +0,0 @@
1
- import{a as m}from"./chunk-DSVLWYIT.js";import f from"fs";import p from"path";import{fileURLToPath as M}from"url";var u={version:0,release:20261004,fallbacks:{janitor_default:"gemini-3.5-flash-lite",janitor_attempts_fallback:"gemma-4-26b-a4b-it",janitor_open_router:"google/gemma-4-26b-a4b-it:free",general_fallback:"gemini-3.5-flash-lite",deepseek_fast_fallback:"deepseek-v4-flash",deepseek_level_1:"deepseek-flash",deepseek_level_2:"deepseek-pro",mistral_janitor_fallback:"",mistral_level_1:"",nvidia_janitor_fallback:"mistralai/mistral-nemotron",nvidia_chat_summarizer_fallback:"nvidia/nemotron-3-super-120b-a12b",google_level_1:"gemini-3-flash-preview",google_level_2:"gemini-3.7-flash",gemma_emergency:"gemma-4-31b-it",gemma_janitor_fallback_google_openrouter:"google/gemma-4-26b-a4b-it:free",gemma_janitor_fallback_google:"gemma-4-26b-a4b-it",inferx_fallback:"",sensenova_fallback:"",crofai_fallback:"",aihubmix_fallback:"",poolside_fallback:"","9router_fallback":"",explabs_fallback:"",tokenharbor_fallback:"",infron_fallback:"",c_openai_fallback:""},providers:{}};var S=M(import.meta.url),y=p.dirname(S),g="",I=[p.join(y,"../../model_config.json"),p.join(y,"../model_config.json")];for(let e of I)try{if(f.existsSync(e)){g=e;break}}catch{}var _=p.join(m,"model_config.json"),l=null,v=()=>{if(g)try{let e=f.readFileSync(g,"utf-8"),s=JSON.parse(e);if(s&&typeof s=="object")return s}catch{}return u&&typeof u=="object"?JSON.parse(JSON.stringify(u)):{version:0,release:20260913,fallbacks:{},providers:{}}};if(f.existsSync(_))try{let e=f.readFileSync(_,"utf-8"),s=JSON.parse(e);if(s&&typeof s=="object"){let t=v();s.fallbacks={...t.fallbacks||{},...s.fallbacks||{}},s.providers||(s.providers={}),s.release||(s.release=t.release||20260913),l=s}}catch{}l||(l=v());var F=new Set,k=new Set,d=()=>{let e=new Set,s=new Set;if(l.providers)for(let t of Object.keys(l.providers)){let r=l.providers[t];if(r&&r.models){let o=["Free","Paid"];for(let a of o){let i=r.models[a];if(Array.isArray(i)){for(let n of i)if(n&&n.cmd){let b=n.cmd.trim().toLowerCase();n.multimodal===!0&&e.add(b),n.hasReasoning===!0&&s.add(b)}}}}}if(Array.isArray(l.multimodal_models))for(let t of l.multimodal_models)t&&typeof t=="string"&&e.add(t.trim().toLowerCase());F=e,k=s};d();var L=()=>l,c=()=>{try{return f.existsSync(m)||f.mkdirSync(m,{recursive:!0}),f.writeFileSync(_,JSON.stringify(l,null,2),"utf-8"),!0}catch{return!1}},$=(e,s,t=!1)=>{if(!e||!s)return{success:!1,reason:"Invalid provider or model ID"};let r=s.trim();if(!r)return{success:!1,reason:"Model ID cannot be empty"};l.providers||(l.providers={}),l.providers[e]||(l.providers[e]={default_free:"",default_paid:"",models:{Free:[],Paid:[]}});let o=l.providers[e];o.models||(o.models={Free:[],Paid:[]}),Array.isArray(o.models.Free)||(o.models.Free=[]);let a=o.models.Free.find(i=>(typeof i=="string"?i:i?.cmd)===r);if(!a)o.models.Free.push({cmd:r,multimodal:!!t,desc:r});else if(typeof a=="string"){let i=o.models.Free.indexOf(a);o.models.Free[i]={cmd:r,multimodal:!!t,desc:r}}else a.multimodal=!!t;return d(),c(),{success:!0}},N=(e,s,t=!0)=>{if(!e||!s)return{success:!1,reason:"Invalid provider or model ID"};let r=s.trim();if(!r)return{success:!1,reason:"Model ID cannot be empty"};let o=l.providers?.[e];if(!o||!o.models||!Array.isArray(o.models.Free))return{success:!1,reason:`Provider ${e} has no models configured`};let a=o.models.Free.find(i=>(typeof i=="string"?i:i?.cmd)===r);if(!a)return{success:!1,reason:`Model "${r}" not found in ${e} model list`};if(typeof a=="string"){let i=o.models.Free.indexOf(a);o.models.Free[i]={cmd:r,multimodal:!!t,desc:r}}else a.multimodal=!!t;return d(),c(),{success:!0}},J=(e,s,t=!1)=>{if(!e||!s)return{success:!1,reason:"Invalid provider or model ID"};let r=s.trim();if(!r)return{success:!1,reason:"Model ID cannot be empty"};l.providers||(l.providers={}),l.providers[e]||(l.providers[e]={default_free:"",default_paid:"",models:{Free:[],Paid:[]}});let o=l.providers[e];o.models||(o.models={Free:[],Paid:[]}),Array.isArray(o.models.Free)||(o.models.Free=[]);let a=o.models.Free.find(i=>(typeof i=="string"?i:i?.cmd)===r);if(!a)o.models.Free.push({cmd:r,multimodal:!!t,desc:r});else if(t)if(typeof a=="string"){let i=o.models.Free.indexOf(a);o.models.Free[i]={cmd:r,multimodal:!0,desc:r}}else a.multimodal=!0;return o.default_free=r,d(),c(),{success:!0}},R=(e,s)=>{if(!e||!s)return{success:!1,reason:"Invalid provider or model ID"};let t=s.trim();if(!t)return{success:!1,reason:"Model ID cannot be empty"};let r=l.providers?.[e];if(!r||!r.models||!Array.isArray(r.models.Free))return{success:!1,reason:`Provider ${e} has no models configured`};let o=r.models.Free.findIndex(a=>(typeof a=="string"?a:a?.cmd)===t);return o===-1?{success:!1,reason:`Model "${t}" not found in ${e} model list`}:(r.models.Free.splice(o,1),r.default_free===t&&(r.default_free=""),r.default_paid===t&&(r.default_paid=""),d(),c(),{success:!0})},T=(e,s,t)=>{if(!e||!s||!t)return{success:!1,reason:"Invalid provider or model IDs"};let r=s.trim(),o=t.trim();if(!r||!o)return{success:!1,reason:"Model IDs cannot be empty"};let a=l.providers?.[e];if(!a||!a.models||!Array.isArray(a.models.Free))return{success:!1,reason:`Provider ${e} has no models configured`};let i=a.models.Free.find(n=>(typeof n=="string"?n:n?.cmd)===r);if(!i)return{success:!1,reason:`Model "${r}" not found in ${e} model list`};if(typeof i=="string"){let n=a.models.Free.indexOf(i);a.models.Free[n]={cmd:o,multimodal:!1,desc:o}}else i.cmd=o,(i.desc===r||!i.desc)&&(i.desc=o);return d(),c(),{success:!0}},x=!1,P=e=>{x=!!e},E=P,U=e=>{if(!e)return!1;let s=e.trim().toLowerCase();return!!(x||F.has(s)||s.startsWith("gemini-")||s.startsWith("gemma-"))},W=e=>{if(!e)return!1;let s=e.trim().toLowerCase();return k.has(s)},z=(e,s)=>{let t=l.providers[e];return t?t.models[s==="Free"?"Free":"Paid"]||[]:[]},G=(e,s)=>{let t=l.providers[e];return t?s==="Free"?t.default_free:t.default_paid:""},K=e=>l.fallbacks[e];export{u as a,L as b,c,$ as d,N as e,J as f,R as g,T as h,P as i,E as j,U as k,W as l,z as m,G as n,K as o};
@@ -1 +0,0 @@
1
- import{n as u}from"./chunk-63V6P5DU.js";import{e as g,f as c}from"./chunk-L3W2X74K.js";import{b as s}from"./chunk-DSVLWYIT.js";import n from"fs-extra";import m 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",Infron:"Free",APInex:"Free",c_openai:"Free"}},systemSettings:{customOpenAIBaseUrl:"",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:""}},p=async()=>{let t={...r};try{if(await n.exists(s)){let e=g(s);if(e.imageSettings&&e.imageSettings.apiKey)try{let a=e.imageSettings.apiKey,{saveSecret:i}=await import("./secrets-UNXNDOLK.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-UNXNDOLK.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=m.join(e,i),o=m.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)}}},F=async t=>{try{let e=await p();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-UNXNDOLK.js"),o=t.imageSettings.apiKey;o?await i("POLLINATIONS_API_KEY",o):await l("POLLINATIONS_API_KEY")}let a={...e,...t};a.systemSettings&&(a.systemSettings.dynamicDirAwareness=!1),a.imageSettings&&(a.imageSettings={...a.imageSettings,apiKey:""}),await n.ensureDir(m.dirname(s)),c(s,a);try{let{invalidateCachedBaseUrl:i}=await import("./usage-OUCURLG4.js");i()}catch{}return!0}catch(e){return console.error("Failed to save settings:",e),!1}};export{p as a,F as b};
@@ -1,12 +0,0 @@
1
- import{a as W}from"./chunk-KZTDLEUL.js";import{a as dt,b as J}from"./chunk-L3W2X74K.js";import{d as G,h as K,i as v,j as C}from"./chunk-DSVLWYIT.js";import D from"fs-extra";import U from"path";import vt from"http";import F from"fs-extra";import tt from"path";import{spawn as Ct}from"child_process";import{fileURLToPath as Mt}from"url";var I=52991,xt=15e3,mt=tt.join(G,"usage","usage_error.txt"),ut=async(s,t)=>{let o=t?.stack||t?.message||String(t);console.error(`[Usage Daemon Error] [${s}]:`,t);try{await F.ensureDir(tt.dirname(mt));let e=`[${new Date().toISOString()}] [Daemon:${s}] ${o}
2
- -------------------------------------
3
-
4
- `;await F.appendFile(mt,e,"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:[]},Z=(s,t)=>{if(!s)return{};let o=Object.keys(s),n=new Date(new Date(t).getTime()-720*60*60*1e3),e={};for(let a of o)new Date(a)>=n&&(e[a]=s[a]);return e};async function Rt(){let s=new Date().toISOString().split("T")[0],t=null;try{if(await F.exists(v)){let o=(await F.readFile(v,"utf8")).trim();o.startsWith("{")||o.startsWith("[")?t=JSON.parse(o):t=JSON.parse(J(o))}}catch(o){await ut("loadUsageFromDisk",o)}if(t){let o={...j,...t.stats||{}};Array.isArray(o.imageCalls)||(o.imageCalls=[]);let n=t.history||{},e=Z(n,s);if(t.date===s)return{...t,stats:o,history:e};{let a=t.date,r={...e};return a&&(r[a]=o),{date:s,stats:{...j},history:Z(r,s)}}}return{date:s,stats:{...j},history:{}}}async function Ut(s=I){let t=await Rt(),o=!1,n=!1,e=Date.now(),a=null,r=async()=>{if(t)try{await F.ensureDir(tt.dirname(v));let c=new Date().toISOString().split("T")[0];t.history=Z(t.history||{},t.date||c),t.saveId=Math.random().toString(36).substring(2)+Date.now().toString(36);let i=dt(JSON.stringify(t,null,2));await F.writeFile(v,i,"utf8"),n=!1}catch(c){await ut("flushToDisk",c)}},l=async()=>{a&&clearInterval(a),await r(),f.close(()=>{process.exit(0)}),setTimeout(()=>process.exit(0),1e3).unref()};a=setInterval(async()=>{if(o)return;Date.now()-e>xt&&await l()},5e3),a.unref&&a.unref();let f=vt.createServer(async(c,i)=>{let m=c.url||"";if(c.method==="POST"&&m==="/heartbeat"){o||(e=Date.now()),i.writeHead(200,{"Content-Type":"application/json"}),i.end(JSON.stringify({ok:!0}));return}if((c.method==="GET"||c.method==="POST")&&m==="/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(()=>{f.close(()=>process.exit(0)),setTimeout(()=>process.exit(0),500).unref()},3e3);return}if(c.method==="POST"&&m==="/flush"){o||(e=Date.now(),await r()),i.writeHead(200,{"Content-Type":"application/json"}),i.end(JSON.stringify({success:!0}));return}if(c.method==="POST"&&m==="/write"){if(o){i.writeHead(403,{"Content-Type":"application/json"}),i.end(JSON.stringify({error:"Daemon finalized. Writes locked."}));return}e=Date.now();let d="";c.on("data",g=>{d+=g}),c.on("end",async()=>{try{let g=JSON.parse(d||"{}"),w=new Date().toISOString().split("T")[0];if(t.date!==w){let k=t.date;k&&(t.history||(t.history={}),t.history[k]={...t.stats}),t.date=w,t.stats={...j}}t.stats||(t.stats={...j});let{key:h,amount:u=1,provider:y,model:T}=g;if(h&&t.stats[h]!==void 0&&typeof t.stats[h]=="number"&&(t.stats[h]+=Math.floor(u)),h==="agent"&&y&&(t.stats.providerRequests||(t.stats.providerRequests={}),t.stats.providerRequests[y]=(t.stats.providerRequests[y]||0)+Math.floor(u)),y&&T&&(h==="tokens"||h==="cachedTokens"||h==="candidateTokens"||h==="ttft")){t.stats.models||(t.stats.models={}),t.stats.models[y]||(t.stats.models[y]={}),t.stats.models[y][T]||(t.stats.models[y][T]={tokens:0,cachedTokens:0,candidateTokens:0,ttftSum:0,ttftCalls:0});let k=t.stats.models[y][T];h==="tokens"&&(k.tokens+=Math.floor(u)),h==="cachedTokens"&&(k.cachedTokens+=Math.floor(u)),h==="candidateTokens"&&(k.candidateTokens+=Math.floor(u)),h==="ttft"&&(k.ttftSum=(k.ttftSum||0)+Math.floor(u),k.ttftCalls=(k.ttftCalls||0)+1)}n=!0,await r(),i.writeHead(200,{"Content-Type":"application/json"}),i.end(JSON.stringify({success:!0}))}catch(g){i.writeHead(400,{"Content-Type":"application/json"}),i.end(JSON.stringify({error:g.message}))}});return}i.writeHead(404,{"Content-Type":"text/plain"}),i.end("Not Found")});f.listen(s,"127.0.0.1",()=>{e=Date.now()}),f.on("error",c=>{c.code==="EADDRINUSE"&&process.exit(0)})}async function Ot(s=I){try{if((await fetch(`http://127.0.0.1:${s}/heartbeat`,{method:"POST",signal:AbortSignal.timeout(300)})).ok)return!0}catch{}try{let t=Mt(import.meta.url);Ct(process.execPath,[t,"--usage-daemon-worker",`--port=${s}`],{detached:!0,stdio:"ignore",windowsHide:!0}).unref();for(let n=0;n<10;n++){await new Promise(e=>setTimeout(e,100));try{if((await fetch(`http://127.0.0.1:${s}/heartbeat`,{method:"POST",signal:AbortSignal.timeout(300)})).ok)return!0}catch{}}}catch{}return!1}async function et(s,t=I){try{await Ot(t),await fetch(`http://127.0.0.1:${t}/write`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s),signal:AbortSignal.timeout(1e3)})}catch{}}async function bt(s=I){try{await fetch(`http://127.0.0.1:${s}/heartbeat`,{method:"POST",signal:AbortSignal.timeout(600)})}catch{}}async function At(s=I){try{await fetch(`http://127.0.0.1:${s}/finalize`,{method:"GET",signal:AbortSignal.timeout(1e3)})}catch{}}if(process.argv.includes("--usage-daemon-worker")){let s=process.argv.find(o=>o.startsWith("--port=")),t=s?parseInt(s.split("=")[1],10):I;Ut(t)}var ft=U.join(G,"usage","usage_error.txt"),z=null,Vt=()=>{z=null},ot=async s=>{if(s!=="c_openai")return s;if(z)return z;try{let o=(await W())?.systemSettings?.customOpenAIBaseUrl||"";if(o=o.trim().replace(/\/+$/,""),o){let n=o.indexOf("/v1");return n!==-1&&(o=o.substring(0,n+3)),z=o,o}}catch{}return"c_openai"},Q=async(s,t)=>{let o=t?.stack||t?.message||String(t);console.error(`[Usage Error] [${s}]:`,t);try{await D.ensureDir(U.dirname(ft));let e=`[${new Date().toISOString()}] [${s}] ${o}
5
- -------------------------------------
6
-
7
- `;await D.appendFile(ft,e,"utf8")}catch{}},p=null,M={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:[]},X=(s,t)=>{if(!s)return{};let o=Object.keys(s),n=new Date(new Date(t).getTime()-720*60*60*1e3),e={};for(let a of o)new Date(a)>=n&&(e[a]=s[a]);return e},B=async()=>{let s=new Date().toISOString().split("T")[0];try{!await D.exists(v)&&await D.exists(K)&&(await D.ensureDir(U.dirname(v)),await D.move(K,v))}catch{}let t=null;try{if(await D.exists(v)){let n=(await D.readFile(v,"utf8")).trim();n.startsWith("{")||n.startsWith("[")?t=JSON.parse(n):t=JSON.parse(J(n))}}catch(n){await Q("loadUsageFromFile",n)}let o=t;if(o){let n=o.stats||{...M},e={...M,...n};Array.isArray(e.imageCalls)||(e.imageCalls=[]);let a=o.history||{},r=X(a,s);if(o.date===s)return{...o,stats:e,history:r};{let l=o.date,f=e,c={...r};return l&&(c[l]=f),{date:s,stats:{...M},history:X(c,s)}}}return{date:s,stats:{...M},history:{}}},Ft=async()=>{},st=500,gt=0,It=()=>{let t=new Date().toISOString().split("T")[0];return U.join(C,`${t}.jsonl`)},Kt=async s=>{try{await D.ensureDir(C);let t=await ot(s.provider),o={time:new Date().toISOString(),provider:t||"unknown",model:s.model||"unknown",input:Number(s.prompt)||0,cached:Number(s.cached)||0,output:Number(s.output)||0,reasoning:Number(s.reasoning)||0,ttft:Number(s.ttft)||0};await D.appendFile(It(),JSON.stringify(o)+`
8
- `,"utf8"),++gt>=10&&(gt=0,await ht())}catch{}},ht=async()=>{try{if(!await D.exists(C))return;let s=(await D.readdir(C)).filter(e=>e.endsWith(".jsonl")).sort(),t=[];for(let e of s)try{let a=await D.readFile(U.join(C,e),"utf8");for(let r of a.split(`
9
- `))r.trim()&&t.push({file:e,line:r})}catch{}if(t.length<=st)return;let o=t.slice(-st),n=new Map;for(let e of o)n.has(e.file)||n.set(e.file,[]),n.get(e.file).push(e.line);for(let e of s){let a=n.get(e);!a||a.length===0?await D.remove(U.join(C,e)):await D.writeFile(U.join(C,e),a.join(`
10
- `)+`
11
- `,"utf8")}}catch{}},Zt=async(s=30)=>{let t=[];try{if(!await D.exists(C))return t;let n=(await D.readdir(C)).filter(e=>e.endsWith(".jsonl")).sort().slice(-Math.max(1,s));for(let e of n)try{let a=await D.readFile(U.join(C,e),"utf8");for(let r of a.split(`
12
- `))if(r.trim())try{t.push(JSON.parse(r))}catch(l){await Q(`getTimedUsage:parseLine (${e})`,l)}}catch(a){await Q(`getTimedUsage:readFile (${e})`,a)}}catch(o){await Q("getTimedUsage",o)}return t.slice(-st)},te=async()=>{p=await B(),await ht()},x=async()=>{let s=new Date().toISOString().split("T")[0];if(!p)p=await B();else if(p.date!==s){let t=p.date,o=p.stats,n=p.history||{};o&&(n[t]=o),p={date:s,stats:{...M},history:X(n,s)},await Ft()}return p&&p.stats&&!Array.isArray(p.stats.imageCalls)&&(p.stats.imageCalls=[]),p.stats},pt=async()=>{let s=new Date().toISOString().split("T")[0];p||(p=await B()),p.date!==s&&await x();let t=p.history||{},o=X(t,s);p.history=o;let n=p.stats||{...M},e={...M};e.imageCalls=[],e.models={},e.providerRequests={};let a=(r,l)=>{for(let f in r)if(f==="imageCalls")r.imageCalls=[...r.imageCalls||[],...l.imageCalls||[]];else if(f==="providerRequests"){let c=l.providerRequests||{};for(let i in c)r.providerRequests[i]=(r.providerRequests[i]||0)+(c[i]||0)}else if(f==="models"){let c=l.models||{};for(let i in c){r.models[i]||(r.models[i]={});for(let m in c[i]){r.models[i][m]||(r.models[i][m]={tokens:0,cachedTokens:0,candidateTokens:0,ttftSum:0,ttftCalls:0});let d=r.models[i][m],g=c[i][m];d.tokens+=g.tokens||0,d.cachedTokens+=g.cachedTokens||0,d.candidateTokens+=g.candidateTokens||0,d.ttftSum=(d.ttftSum||0)+(g.ttftSum||0),d.ttftCalls=(d.ttftCalls||0)+(g.ttftCalls||0)}}}else typeof r[f]=="number"&&(r[f]+=l[f]||0)};a(e,n);for(let r in o)a(e,o[r]);return e},ee=async(s,t)=>{t=await ot(t),s==="toolSuccess"?E.toolSuccess++:s==="toolFailure"?E.toolFailure++:s==="toolDenied"&&E.toolDenied++;let o=await x();o[s]!==void 0&&o[s]++,t&&s==="agent"&&(o.providerRequests||(o.providerRequests={}),o.providerRequests[t]=(o.providerRequests[t]||0)+1),await et({key:s,amount:1,provider:t})},E={linesAdded:0,linesRemoved:0,toolSuccess:0,toolFailure:0,toolDenied:0},se=async(s,t,o,n)=>{o=await ot(o),s==="linesAdded"?E.linesAdded+=t:s==="linesRemoved"&&(E.linesRemoved+=t);let e=await x();if(e[s]!==void 0&&(e[s]+=Math.floor(t)),o&&n&&(s==="tokens"||s==="cachedTokens"||s==="candidateTokens"||s==="ttft")){e.models||(e.models={}),e.models[o]||(e.models[o]={}),e.models[o][n]||(e.models[o][n]={tokens:0,cachedTokens:0,candidateTokens:0,ttftSum:0,ttftCalls:0});let a=e.models[o][n];s==="tokens"&&(a.tokens+=Math.floor(t)),s==="cachedTokens"&&(a.cachedTokens+=Math.floor(t)),s==="candidateTokens"&&(a.candidateTokens+=Math.floor(t)),s==="ttft"&&(a.ttftSum=(a.ttftSum||0)+Math.floor(t),a.ttftCalls=(a.ttftCalls||0)+1)}await et({key:s,amount:t,provider:o,model:n})},yt=async(s=1)=>{let t=new Date,o=t.toISOString().split("T")[0];p||(p=await B()),p.date!==o&&await x();let n=t.getFullYear(),e=t.getMonth();t.getDate()<s&&(e-=1,e<0&&(e=11,n-=1));let l=new Date(n,e,s).toISOString().split("T")[0],f=p.history||{},c=p.stats||{...M},i={...M};i.imageCalls=[],i.models={},i.providerRequests={};let m=(d,g)=>{for(let w in d)if(w==="imageCalls")d.imageCalls=[...d.imageCalls||[],...g.imageCalls||[]];else if(w==="providerRequests"){let h=g.providerRequests||{};for(let u in h)d.providerRequests[u]=(d.providerRequests[u]||0)+(h[u]||0)}else if(w==="models"){let h=g.models||{};for(let u in h){d.models[u]||(d.models[u]={});for(let y in h[u]){d.models[u][y]||(d.models[u][y]={tokens:0,cachedTokens:0,candidateTokens:0,ttftSum:0,ttftCalls:0});let T=d.models[u][y],k=h[u][y];T.tokens+=k.tokens||0,T.cachedTokens+=k.cachedTokens||0,T.candidateTokens+=k.candidateTokens||0,T.ttftSum=(T.ttftSum||0)+(k.ttftSum||0),T.ttftCalls=(T.ttftCalls||0)+(k.ttftCalls||0)}}}else typeof d[w]=="number"&&(d[w]+=g[w]||0)};m(i,c);for(let d in f)d>=l&&d<o&&m(i,f[d]);return i},Et=async(s,t={})=>{let o=await W().catch(()=>({})),n=t.apiTier||o.apiTier||"Free",e=t.quotas||t.systemSettings?.quotas||o.quotas||{},a=e.providerBudgets||{},r=!!a.__useProvider,l=t.aiProvider||o.aiProvider||"Google",f=r&&!!a[l],c=()=>{if(f){let i=a[l];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:e.agentLimit||99999999,tokenLimit:e.tokenLimit||99999999999999,monthlyTokenLimit:e.monthlyTokenLimit||99999999999999}};if(s==="agent"){let{agentLimit:i,tokenLimit:m,monthlyTokenLimit:d}=c(),g=await x(),w;e.resetMode==="Custom"?w=await yt(e.resetDay||1):w=await pt();let h=0,u=0,y=0;if(f){h=g.providerRequests?.[l]||0;let T=g.models?.[l]||{};for(let q in T)u+=T[q]?.tokens||0;let k=w.models?.[l]||{};for(let q in k)y+=k[q]?.tokens||0}else h=g.agent||0,u=g.tokens||0,y=w.tokens||0;return n==="Free"&&g.agent+g.background>=999999?{allowed:!1,reason:"Free Tier Daily Usage Limit Exceeded"}:h>=i?{allowed:!1,reason:f?`Daily Request Limit Reached for ${l}`:"Daily Agent Request Limit Reached"}:u>=m?{allowed:!1,reason:f?`Daily Token Budget Exhausted for ${l}`:"Daily Token Budget Exhausted"}:y>=d?{allowed:!1,reason:f?`Monthly Token Budget Exhausted for ${l}`:"Monthly Token Budget Exhausted"}:{allowed:!0}}if(s==="background"){let i=await x();if(n==="Free"&&i.agent+i.background>=999999)return{allowed:!1,reason:"Free Tier Background Limit Exceeded"};let m=i.background<(e.backgroundLimit||999999);return{allowed:m,reason:m?void 0:"Background Request Limit Exceeded"}}if(s==="search"){let m=(await x()).search<(e.searchLimit||100);return{allowed:m,reason:m?void 0:"Search Quota Exceeded"}}return{allowed:!0}},oe=async(s,t={})=>(await Et(s,t)).allowed,nt=s=>{if(!s||s.length===0)return[];let o=[...s].sort((e,a)=>e.timestamp-a.timestamp),n=[];for(let e of o){if(n.length>0){let a=n[n.length-1];if(e.timestamp>=a.start&&e.timestamp<a.end){a.calls.push(e),a.spent+=e.cost;continue}}n.push({start:e.timestamp,end:e.timestamp+36e5,calls:[e],spent:e.cost})}return n},kt=(s,t)=>{if(!s||s.length===0)return .025;let n=nt(s);if(n.length===0)return .025;let e=[];for(let m of n){let d=.025;if(e.length>0){let w=e[e.length-1],h=!1;if(e.length>=2){let u=e[e.length-2];w.ratio>=.8&&u.ratio>=.8&&(h=!0)}if(h)d=.015;else{let u=w.limit,y=w.ratio;y>=.8?d=u===.015?.015:u:y<.4?d=Math.min(.025,u+.005):y>=.4&&y<.6?d=Math.min(.025,u+.004):d=Math.min(.025,u+.002)}}let g=d>0?m.spent/d:0;e.push({limit:d,spent:m.spent,ratio:g})}let a=n[n.length-1];if(t<a.end)return e[e.length-1].limit;let r=e[e.length-1].limit,l=r,f=e[e.length-1].ratio,c=a.end,i=0;for(let m=e.length-1;m>=0&&e[m].ratio>=.8;m--)i++;for(;c<=t;){let m=.025;i>=2?m=.015:f>=.8?m=l===.015?.015:l:f<.4?m=Math.min(.025,l+.005):f>=.4&&f<.6?m=Math.min(.025,l+.004):m=Math.min(.025,l+.002),l=m,f=0,i=0,c+=36e5,r=m}return r},ne=async s=>{let t=s.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,e=await x();e.imageCalls||(e.imageCalls=[]);let a=Date.now(),r=nt(e.imageCalls),l=0;if(r.length>0){let c=r[r.length-1];a>=c.start&&a<c.end&&(l=c.spent)}let f=kt(e.imageCalls,a);return l+n<=f},ae=async()=>{let s=await x();s.imageCalls||(s.imageCalls=[]);let t=Date.now(),o=nt(s.imageCalls),n=[],e=0,a=0;if(o.length>0){let c=o[o.length-1];t>=c.start&&t<c.end&&(n=c.calls,e=c.spent,a=Math.max(0,Math.ceil((c.end-t)/(60*1e3))))}let r=kt(s.imageCalls,t),l=Math.max(0,r-e),f=e;return{totalSpent:e,remaining:l,activeCallsCount:n.length,nextResetMin:a,reclaimCost:f,limit:r}},ie=async s=>{let t=s.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,e=await x();e.imageCalls||(e.imageCalls=[]),e.imageCalls.push({timestamp:Date.now(),cost:n}),queueFlush()},re=async()=>{let s=new Date().toISOString().split("T")[0];p||(p=await B()),p.date!==s&&await x();let t=p.stats||{...M},o=p.history||{},n=new Set(Object.keys(o));n.add(s);let a=Array.from(n).sort().map(L=>{let R=L===s?t:o[L]||{},S={...M,...R},P=S.tokens||0,_=S.cachedTokens||0,H=S.candidateTokens||0,$=Math.max(0,P-H),N=Math.max(0,$-_),O=S.agent||0,b=S.background||0,A=S.search||0,wt=O+b+A,Y=S.toolSuccess||0,at=S.toolFailure||0,it=S.toolDenied||0,V=Y+at+it,Tt=V>0?(Y/V*100).toFixed(1):"100.0",rt=S.linesAdded||0,lt=S.linesRemoved||0,ct=Array.isArray(S.imageCalls)?S.imageCalls:[],St=ct.reduce((Dt,Lt)=>Dt+(Lt.cost||0),0);return{date:L,tokens:P,cachedTokens:_,candidateTokens:H,promptTokens:$,uncachedPromptTokens:N,agent:O,background:b,search:A,totalRequests:wt,toolSuccess:Y,toolFailure:at,toolDenied:it,totalTools:V,toolSuccessRate:parseFloat(Tt),linesAdded:rt,linesRemoved:lt,netLines:rt-lt,duration:S.duration||0,imageCallsCount:ct.length,imageCost:St,models:S.models||{},providerRequests:S.providerRequests||{}}}),r=await W().catch(()=>({})),l=r.quotas||{},f=r.apiTier||"Free",c=await pt().catch(()=>({tokens:0,agent:0})),i=null;l.resetMode==="Custom"&&(i=await yt(l.resetDay||1).catch(()=>({tokens:0})));let m=l.tokenLimit||0,d=l.monthlyTokenLimit||0,g=l.agentLimit||0,w=l.resetMode||"Daily",h=l.resetDay||1,u=l.providerBudgets||{},y=!!u.__useProvider,T=["Google","Anthropic","OpenAI","DeepSeek","Mistral","NVIDIA","OpenRouter","Ollama","InferX","SenseNova","AIHubMix","Poolside"];Object.keys(u).forEach(L=>{L!=="__useProvider"&&!T.includes(L)&&T.push(L)});let k=[];for(let L of T){let R=u[L];if(R&&(R.agentLimit||R.tokenLimit||R.monthlyTokenLimit)){let S=0,P=t.models?.[L]||{};for(let A in P)S+=P[A]?.tokens||0;let _=0,H=(l.resetMode==="Custom"?i?.models:c?.models)?.[L]||{};for(let A in H)_+=H[A]?.tokens||0;let $=t.providerRequests?.[L]||0,N=R.tokenLimit||0,O=R.monthlyTokenLimit||0,b=R.agentLimit||0;k.push({provider:L,dailyTokens:S,dailyTokenLimit:N,isDailyUnlimited:N>=9999999999999||N===0,monthlyTokens:_,monthlyTokenLimit:O,isMonthlyUnlimited:O>=9999999999999||O===0,dailyRequests:$,dailyAgentLimit:b,isRequestsUnlimited:b>=9999999||b===0})}}let q={apiTier:f,resetMode:w,resetDay:h,quotas:l,usingProviderBudgets:y&&k.length>0||k.length>0,providerBudgetsList:k,daily:{tokensUsed:t.tokens||0,tokenLimit:m,agentRequests:t.agent||0,agentLimit:g,isUnlimitedTokens:m>=9999999999999||m===0,isUnlimitedRequests:g>=9999999||g===0},monthly:{tokensUsed:(l.resetMode==="Custom"?i?.tokens:c?.tokens)||0,tokenLimit:d,isUnlimitedTokens:d>=9999999999999||d===0},providerBudgets:u};return{currentDate:s,todayStats:t,history:o,timeline:a,budget:q,runtimeSession:{...E}}};export{bt as a,At as b,Vt as c,Ft as d,Kt as e,ht as f,Zt as g,te as h,x as i,pt as j,ee as k,E as l,se as m,yt as n,Et as o,oe as p,nt as q,kt as r,ne as s,ae as t,ie as u,re as v};
@@ -1 +0,0 @@
1
- import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o}from"./chunk-63V6P5DU.js";import"./chunk-DSVLWYIT.js";export{a as DEFAULT_MODEL_CONFIG,n as getDefaultModel,o as getFallbackValue,b as getModelConfig,m as getModels,l as hasModelReasoning,k as isModelMultimodal,g as removeModelFromProvider,h as renameModelInProvider,c as saveModelConfigToDisk,d as saveModelToProvider,i as setCustomMultimodal,f as setDefaultModelForProvider,e as setModelMultimodalInProvider,j as setOllamaMultimodal};
@@ -1 +0,0 @@
1
- import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v}from"./chunk-X6YW3TVC.js";import"./chunk-KZTDLEUL.js";import"./chunk-63V6P5DU.js";import"./chunk-L3W2X74K.js";import"./chunk-DSVLWYIT.js";export{m as addToUsage,s as checkImageQuota,p as checkQuota,o as checkQuotaDetailed,d as forceFlushUsage,v as getAllUsageData,n as getCustomPeriodUsage,i as getDailyUsage,q as getImageQuotaBuckets,r as getImageQuotaLimit,t as getImageQuotaStats,j as getMonthlyUsage,g as getTimedUsage,k as incrementUsage,h as initUsage,c as invalidateCachedBaseUrl,f as purgeTimedUsage,u as recordImageGeneration,e as recordTimedUsage,l as runtimeSession,b as sendUsageFinalize,a as sendUsageHeartbeat};