fluxflow-cli 4.35.1 → 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 (36) hide show
  1. package/dist/chunks/{ai-2KKP7NFF.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-VMFH7MSG.js → chunk-PUCRX3HD.js} +206 -206
  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/halloween-MX3VNQRW.js +1 -0
  14. package/dist/chunks/{invoke-QP4USBCP.js → invoke-7S44ZFQY.js} +2 -2
  15. package/dist/chunks/{invokeSync-UHGKK3NF.js → invokeSync-SAKOE3G5.js} +2 -2
  16. package/dist/chunks/{key_press-RJIPXDAB.js → key_press-KR2O7S6E.js} +1 -1
  17. package/dist/chunks/{keyboard_typing-VXT53PRV.js → keyboard_typing-V4ALD3BD.js} +1 -1
  18. package/dist/chunks/{mistral-N6352JPY.js → mistral-O5VGMA23.js} +1 -1
  19. package/dist/chunks/model_config-C72R7DKL.js +1 -0
  20. package/dist/chunks/{nvidia-L6QMFBL3.js → nvidia-OVQSNJOT.js} +1 -1
  21. package/dist/chunks/{screen_grid-PMTAQA3B.js → screen_grid-XZKZBWOH.js} +1 -1
  22. package/dist/chunks/{scroll-OMBQDZHP.js → scroll-YTLIQ6C5.js} +1 -1
  23. package/dist/chunks/{settings-Q5OBKUO6.js → settings-LO76WAO4.js} +1 -1
  24. package/dist/chunks/{update_file-BD3AWZNQ.js → update_file-HGCNRGTK.js} +1 -1
  25. package/dist/chunks/usage-MHRBABMW.js +1 -0
  26. package/dist/chunks/{usageServer-SQHTSGOH.js → usageServer-YSHTV2E3.js} +52 -11
  27. package/dist/chunks/{write_file-AMAYRCUC.js → write_file-A67UXLZ2.js} +1 -1
  28. package/dist/cli.js +3 -3
  29. package/dist/package.json +2 -2
  30. package/package.json +2 -2
  31. package/dist/chunks/app-JERPNQ7V.js +0 -315
  32. package/dist/chunks/chunk-63V6P5DU.js +0 -1
  33. package/dist/chunks/chunk-KZTDLEUL.js +0 -1
  34. package/dist/chunks/chunk-X6YW3TVC.js +0 -12
  35. package/dist/chunks/model_config-EN3OYDPU.js +0 -1
  36. package/dist/chunks/usage-OUCURLG4.js +0 -1
@@ -1 +1 @@
1
- import{g as f}from"./chunk-H4KXMWYP.js";import{mouse as c,keyboard as i,Button as u,Key as e,Point as l,clipboard as g}from"@nut-tree-fork/nut-js";c.config.autoDelayMs=50;i.config.autoDelayMs=50;async function w(){try{await i.releaseKey(e.LeftControl,e.RightControl,e.LeftAlt,e.RightAlt,e.LeftShift,e.RightShift,e.LeftSuper,e.RightSuper)}catch{}}async function h(n,t,s={}){let r=await f(t);if(!r&&(n==="move"||n==="click"||n==="drag"))return`ERROR: Invalid target location specified: ${JSON.stringify(t)}`;try{switch(n.toLowerCase()){case"move":return await c.setPosition(new l(r.x,r.y)),`Moved mouse to grid target ${typeof t=="string"?t:`(${r.x}, ${r.y})`}`;case"click":{await c.setPosition(new l(r.x,r.y));let a=s.button==="right"?u.RIGHT:s.button==="middle"?u.MIDDLE:u.LEFT;return s.clickType==="double"?await c.doubleClick(a):await c.click(a),`${s.clickType||"Single"} clicked ${s.button||"left"} button at ${typeof t=="string"?t:`(${r.x}, ${r.y})`}`}case"drag":{let a=await f(s.from||t),o=await f(s.to);return!a||!o?'ERROR: Drag requires valid "from" and "to" target coordinates/grid codes.':(await c.setPosition(new l(a.x,a.y)),await c.pressButton(u.LEFT),await c.setPosition(new l(o.x,o.y)),await c.releaseButton(u.LEFT),`Dragged mouse from (${a.x}, ${a.y}) to (${o.x}, ${o.y})`)}case"scroll":{let a=r||await f({x:640,y:360});a&&(await c.setPosition(new l(a.x,a.y)),await new Promise(d=>setTimeout(d,60)));let o=parseInt(s.amount,10);(isNaN(o)||o<=0)&&(o=5);let y=o>50?Math.min(20,Math.max(1,Math.round(o/100))):Math.min(20,o),R=s.direction==="up";for(let d=0;d<y;d++)R?await c.scrollUp(120):await c.scrollDown(120),await new Promise(L=>setTimeout(L,20));return`Scrolled ${s.direction||"down"} (${y} notches${r?` at target (${r.x}, ${r.y})`:" at screen center"})`}default:return`ERROR: Unsupported mouse action "${n}"`}}catch(a){return`ERROR: Mouse action failed: ${a.message}`}}var m={enter:e.Enter,return:e.Return,escape:e.Escape,esc:e.Escape,backspace:e.Backspace,tab:e.Tab,space:e.Space,up:e.Up,down:e.Down,left:e.Left,right:e.Right,ctrl:e.LeftControl,control:e.LeftControl,alt:e.LeftAlt,shift:e.LeftShift,cmd:e.LeftCmd,win:e.LeftWin,meta:e.LeftWin,super:e.LeftSuper,a:e.A,b:e.B,c:e.C,d:e.D,e:e.E,f:e.F,g:e.G,h:e.H,i:e.I,j:e.J,k:e.K,l:e.L,m:e.M,n:e.N,o:e.O,p:e.P,q:e.Q,r:e.R,s:e.S,t:e.T,u:e.U,v:e.V,w:e.W,x:e.X,y:e.Y,z:e.Z,0:e.Num0,1:e.Num1,2:e.Num2,3:e.Num3,4:e.Num4,5:e.Num5,6:e.Num6,7:e.Num7,8:e.Num8,9:e.Num9,f1:e.F1,f2:e.F2,f3:e.F3,f4:e.F4,f5:e.F5,f6:e.F6,f7:e.F7,f8:e.F8,f9:e.F9,f10:e.F10,f11:e.F11,f12:e.F12},p=n=>{if(!n)return;let t=String(n).toLowerCase().trim();if(m[t]!==void 0)return m[t];if(e[n]!==void 0)return e[n];if(e[t.toUpperCase()]!==void 0)return e[t.toUpperCase()]};async function E(n,t,s={}){try{switch(n.toLowerCase()){case"type":{if(typeof t!="string")return"ERROR: Type action requires a valid string input";await w(),await g.setContent(t);let a=process.platform==="darwin"?e.LeftSuper:e.LeftControl;return await i.pressKey(a,e.V),await i.releaseKey(a,e.V),await w(),s.autoPressEnter?(await new Promise(o=>setTimeout(o,50)),await i.type(e.Enter),`Typed text input ("${t.length>20?t.substring(0,20)+"...":t}") and pressed Enter`):`Typed text input ("${t.length>20?t.substring(0,20)+"...":t}")`}case"key_press":{let r=p(t);return r===void 0?`ERROR: Unknown key name "${t}"`:(await i.type(r),`Pressed key ${t}`)}case"key_combination":{if(!Array.isArray(t))return'ERROR: key_combination requires an array of keys (e.g. ["ctrl", "c"])';let r=t.map(a=>p(a)).filter(a=>a!==void 0);return r.length===0?"ERROR: Invalid key combination":(await i.pressKey(...r),await i.releaseKey(...r),`Executed key combination [${t.join(" + ")}]`)}case"clear_input":return await i.pressKey(e.LeftControl,e.A),await i.releaseKey(e.LeftControl,e.A),await i.type(e.Backspace),"Cleared active text input (Select All + Backspace)";case"browser_back":{let r=process.platform==="darwin";return r?(await i.pressKey(e.LeftSuper,e.Left),await i.releaseKey(e.LeftSuper,e.Left)):(await i.pressKey(e.LeftAlt,e.Left),await i.releaseKey(e.LeftAlt,e.Left)),await w(),`Browser back navigation (${r?"Cmd+Left":"Alt+Left"})`}default:return`ERROR: Unsupported keyboard action "${n}"`}}catch(r){return`ERROR: Keyboard action failed: ${r.message}`}}export{h as a,E as b};
1
+ import{g as f}from"./chunk-EKTQJIFL.js";import{mouse as c,keyboard as i,Button as u,Key as e,Point as l,clipboard as g}from"@nut-tree-fork/nut-js";c.config.autoDelayMs=50;i.config.autoDelayMs=50;async function w(){try{await i.releaseKey(e.LeftControl,e.RightControl,e.LeftAlt,e.RightAlt,e.LeftShift,e.RightShift,e.LeftSuper,e.RightSuper)}catch{}}async function h(n,t,s={}){let r=await f(t);if(!r&&(n==="move"||n==="click"||n==="drag"))return`ERROR: Invalid target location specified: ${JSON.stringify(t)}`;try{switch(n.toLowerCase()){case"move":return await c.setPosition(new l(r.x,r.y)),`Moved mouse to grid target ${typeof t=="string"?t:`(${r.x}, ${r.y})`}`;case"click":{await c.setPosition(new l(r.x,r.y));let a=s.button==="right"?u.RIGHT:s.button==="middle"?u.MIDDLE:u.LEFT;return s.clickType==="double"?await c.doubleClick(a):await c.click(a),`${s.clickType||"Single"} clicked ${s.button||"left"} button at ${typeof t=="string"?t:`(${r.x}, ${r.y})`}`}case"drag":{let a=await f(s.from||t),o=await f(s.to);return!a||!o?'ERROR: Drag requires valid "from" and "to" target coordinates/grid codes.':(await c.setPosition(new l(a.x,a.y)),await c.pressButton(u.LEFT),await c.setPosition(new l(o.x,o.y)),await c.releaseButton(u.LEFT),`Dragged mouse from (${a.x}, ${a.y}) to (${o.x}, ${o.y})`)}case"scroll":{let a=r||await f({x:640,y:360});a&&(await c.setPosition(new l(a.x,a.y)),await new Promise(d=>setTimeout(d,60)));let o=parseInt(s.amount,10);(isNaN(o)||o<=0)&&(o=5);let y=o>50?Math.min(20,Math.max(1,Math.round(o/100))):Math.min(20,o),R=s.direction==="up";for(let d=0;d<y;d++)R?await c.scrollUp(120):await c.scrollDown(120),await new Promise(L=>setTimeout(L,20));return`Scrolled ${s.direction||"down"} (${y} notches${r?` at target (${r.x}, ${r.y})`:" at screen center"})`}default:return`ERROR: Unsupported mouse action "${n}"`}}catch(a){return`ERROR: Mouse action failed: ${a.message}`}}var m={enter:e.Enter,return:e.Return,escape:e.Escape,esc:e.Escape,backspace:e.Backspace,tab:e.Tab,space:e.Space,up:e.Up,down:e.Down,left:e.Left,right:e.Right,ctrl:e.LeftControl,control:e.LeftControl,alt:e.LeftAlt,shift:e.LeftShift,cmd:e.LeftCmd,win:e.LeftWin,meta:e.LeftWin,super:e.LeftSuper,a:e.A,b:e.B,c:e.C,d:e.D,e:e.E,f:e.F,g:e.G,h:e.H,i:e.I,j:e.J,k:e.K,l:e.L,m:e.M,n:e.N,o:e.O,p:e.P,q:e.Q,r:e.R,s:e.S,t:e.T,u:e.U,v:e.V,w:e.W,x:e.X,y:e.Y,z:e.Z,0:e.Num0,1:e.Num1,2:e.Num2,3:e.Num3,4:e.Num4,5:e.Num5,6:e.Num6,7:e.Num7,8:e.Num8,9:e.Num9,f1:e.F1,f2:e.F2,f3:e.F3,f4:e.F4,f5:e.F5,f6:e.F6,f7:e.F7,f8:e.F8,f9:e.F9,f10:e.F10,f11:e.F11,f12:e.F12},p=n=>{if(!n)return;let t=String(n).toLowerCase().trim();if(m[t]!==void 0)return m[t];if(e[n]!==void 0)return e[n];if(e[t.toUpperCase()]!==void 0)return e[t.toUpperCase()]};async function E(n,t,s={}){try{switch(n.toLowerCase()){case"type":{if(typeof t!="string")return"ERROR: Type action requires a valid string input";await w(),await g.setContent(t);let a=process.platform==="darwin"?e.LeftSuper:e.LeftControl;return await i.pressKey(a,e.V),await i.releaseKey(a,e.V),await w(),s.autoPressEnter?(await new Promise(o=>setTimeout(o,50)),await i.type(e.Enter),`Typed text input ("${t.length>20?t.substring(0,20)+"...":t}") and pressed Enter`):`Typed text input ("${t.length>20?t.substring(0,20)+"...":t}")`}case"key_press":{let r=p(t);return r===void 0?`ERROR: Unknown key name "${t}"`:(await i.type(r),`Pressed key ${t}`)}case"key_combination":{if(!Array.isArray(t))return'ERROR: key_combination requires an array of keys (e.g. ["ctrl", "c"])';let r=t.map(a=>p(a)).filter(a=>a!==void 0);return r.length===0?"ERROR: Invalid key combination":(await i.pressKey(...r),await i.releaseKey(...r),`Executed key combination [${t.join(" + ")}]`)}case"clear_input":return await i.pressKey(e.LeftControl,e.A),await i.releaseKey(e.LeftControl,e.A),await i.type(e.Backspace),"Cleared active text input (Select All + Backspace)";case"browser_back":{let r=process.platform==="darwin";return r?(await i.pressKey(e.LeftSuper,e.Left),await i.releaseKey(e.LeftSuper,e.Left)):(await i.pressKey(e.LeftAlt,e.Left),await i.releaseKey(e.LeftAlt,e.Left)),await w(),`Browser back navigation (${r?"Cmd+Left":"Alt+Left"})`}default:return`ERROR: Unsupported keyboard action "${n}"`}}catch(r){return`ERROR: Keyboard action failed: ${r.message}`}}export{h as a,E as b};
@@ -2,4 +2,4 @@ import{screen as V}from"@nut-tree-fork/nut-js";import P from"screenshot-desktop"
2
2
  <rect x="${x+1}" y="${i+1}" width="${C-2}" height="${l-2}" fill="rgba(0, 255, 255, 0.015)" stroke="rgba(255, 255, 0, 0.3)" stroke-width="1.1" rx="2"/>
3
3
  `;let p=s.some(t=>t!==m&&t.startY+t.cellH>=i-6&&t.startY<i&&Math.max(0,Math.min(x+C,t.startX+t.cellW)-Math.max(x,t.startX))>10),w=s.some(t=>t!==m&&t.startY<=i+l+6&&t.startY>i&&Math.max(0,Math.min(x+C,t.startX+t.cellW)-Math.max(x,t.startX))>10),a;if(m.isCustomY)a=c,!p&&a<i+11&&(a=Math.max(10,Math.min(a,i+4)));else{let t=m.yOffset!==void 0?m.yOffset:3;!p&&t<0&&(t=Math.min(t,-12));let y=c+t,O=!p&&(t<0||y<i+11)?Math.max(10,i+4):i+11,D=!w&&(t>0||y>i+l-2)?Math.min(o-2,i+l+6):i+l+3;a=Math.max(O,Math.min(D,y))}Y+=`
4
4
  <text x="${n}" y="${a}" 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">${u}</text>
5
- `}return`<svg width="${e}" height="${o}" xmlns="http://www.w3.org/2000/svg">${Y}</svg>`}var tt=1,j=e=>new Promise(o=>setTimeout(o,e));async function et(){try{let{loadSettings:e}=await import("./settings-Q5OBKUO6.js"),o=await e();return Number(o.display||0)}catch{return 0}}async function lt(){let e=await et();try{let o=await P.listDisplays();if(o&&o.length>0)return{format:"png",screen:(o[e]||o[0]).id}}catch{}return{format:"png"}}async function ct(){let e=0,o=await lt();for(;e<2;){let b=await P(o);await j(500);let T=await P(o);if(b.equals(T))return T;e++,e<2&&await j(3e3)}return await j(3e3),await P(o)}function at(e=[],o=[]){if(!e||e.length===0)return o||[];if(!o||o.length===0)return e;let b=[...e],T=typeof e.getModelConfidence=="function"?e.getModelConfidence.bind(e):null;for(let s of o){if(T&&T(s.startX,s.startY,s.cellW,s.cellH)<.01)continue;let h=s.startX,d=s.startX+s.cellW,Y=s.startY,m=s.startY+s.cellH;for(let u of e){let p=u.startX,w=u.startY,a=u.startX+u.cellW,t=u.startY+u.cellH;if(Math.max(0,Math.min(m,t)-Math.max(Y,w))>s.cellH*.4&&p<d&&a>h){let O=(p+a)/2,D=(h+d)/2;O<=D?h=Math.max(h,a):d=Math.min(d,p)}}let r=d-h;if(r<18)continue;let H=h,x=Y,i=d,C=m,l=Math.floor(h+r/2),n=s.cy,c=!1;for(let u of e){let p=u.startX,w=u.startY,a=u.startX+u.cellW,t=u.startY+u.cellH;if(l>=p&&l<=a&&n>=w&&n<=t){c=!0;break}let y=Math.max(H,p),O=Math.max(x,w),D=Math.min(i,a),E=Math.min(C,t),g=Math.max(0,D-y)*Math.max(0,E-O),f=(i-H)*(C-x);if(g/(f||1)>=.25){c=!0;break}}c||b.push({...s,startX:H,cellW:r,cx:l})}return b.sort((s,h)=>Math.abs(s.startY-h.startY)>18?s.startY-h.startY:s.startX-h.startX),b.forEach((s,h)=>{s.badgeId=h+1}),b}async function pt(){try{let e=await ct(),o=null;if(st){let m=(async()=>{try{let{detectUIBoxesONNX:r}=await import("./ui_detector_onnx-YGGFMOK5.js");return await r(e,M.TARGET_WIDTH,M.TARGET_HEIGHT)}catch{return null}})();if(nt)o=await m||[];else{let r=z(e,!0),[H,x]=await Promise.all([m,r]);o=H&&H.length>0?at(H,x):await z(e,!1)}}else o=await z(e,!1);F=o;let b=rt(M.TARGET_WIDTH,M.TARGET_HEIGHT,M.COLS,M.ROWS,o),T=await Z(e).resize(M.TARGET_WIDTH,M.TARGET_HEIGHT,{fit:"fill"}).composite([{input:Buffer.from(b),top:0,left:0}]).png({quality:100}).toBuffer();if(process.env.SHOW_DEBUG_GRID)try{let m=Q.resolve(process.cwd(),"screenshots");await K.ensureDir(m);let r=Q.join(m,`${tt}.png`);await K.writeFile(r,T),tt++}catch{}let s=T.toString("base64"),h=o.length,d=e,Y=T;return d=null,Y=null,{base64:s,mimeType:"image/png",width:M.TARGET_WIDTH,height:M.TARGET_HEIGHT,detectedCount:h}}catch(e){return console.error("Failed to capture gridded screenshot:",e),null}}function it(e){if(e==null)return null;let o=null;if(typeof e=="number")o=e;else if(typeof e=="string"){let H=e.trim();if(/^\d+$/.test(H))o=parseInt(H,10);else{let x=H.match(/^([A-Z])([0-9]{1,2})$/i);if(x){let i=x[1].toUpperCase().charCodeAt(0)-65,C=parseInt(x[2],10)-1;o=i*M.COLS+C+1}}}if(o===null||isNaN(o))return null;if(F&&F.length>0){let H=F.find(x=>x.badgeId===o)||F.find(x=>x.cellNum===o);if(H){let x=Math.floor((H.cellNum-1)%M.COLS),i=Math.floor((H.cellNum-1)/M.COLS);return{x:H.cx,y:H.cy,colIdx:x>=0?x:0,rowIdx:i>=0?i:0,cellNum:o}}}let b=M.COLS*M.ROWS;if(o<1||o>b)return null;let T=o-1,s=Math.floor(T/M.COLS),h=T%M.COLS,d=M.TARGET_WIDTH/M.COLS,Y=M.TARGET_HEIGHT/M.ROWS,m=Math.floor(h*d+d/2),r=Math.floor(s*Y+Y/2);return{x:m,y:r,colIdx:h,rowIdx:s,cellNum:o}}async function yt(e,o,b){let T=null;if(typeof e=="number"||typeof e=="string"?T=it(e):e&&typeof e.x=="number"&&typeof e.y=="number"&&(T=e),!T)return null;let s=o,h=b,d=0,Y=0,m=await et();try{let C=await P.listDisplays();if(C&&C.length>0){let l=C[m]||C[0];l.width&&l.height&&(s=l.width,h=l.height),l.left!==void 0&&(d=l.left),l.top!==void 0&&(Y=l.top)}}catch{}if(!s||!h)try{let C=await P({}),l=await Z(C).metadata();l&&l.width&&l.height?(s=l.width,h=l.height):(s=await V.width(),h=await V.height())}catch{(!s||!h)&&(s=await V.width(),h=await V.height())}let r=s/M.TARGET_WIDTH,H=h/M.TARGET_HEIGHT,x=Math.round(T.x*r)+d,i=Math.round(T.y*H)+Y;return{x,y:i,screenW:s,screenH:h,offsetX:d,offsetY:Y}}export{M as a,st as b,nt as c,et as d,pt as e,it as f,yt as g};
5
+ `}return`<svg width="${e}" height="${o}" xmlns="http://www.w3.org/2000/svg">${Y}</svg>`}var tt=1,j=e=>new Promise(o=>setTimeout(o,e));async function et(){try{let{loadSettings:e}=await import("./settings-LO76WAO4.js"),o=await e();return Number(o.display||0)}catch{return 0}}async function lt(){let e=await et();try{let o=await P.listDisplays();if(o&&o.length>0)return{format:"png",screen:(o[e]||o[0]).id}}catch{}return{format:"png"}}async function ct(){let e=0,o=await lt();for(;e<2;){let b=await P(o);await j(500);let T=await P(o);if(b.equals(T))return T;e++,e<2&&await j(3e3)}return await j(3e3),await P(o)}function at(e=[],o=[]){if(!e||e.length===0)return o||[];if(!o||o.length===0)return e;let b=[...e],T=typeof e.getModelConfidence=="function"?e.getModelConfidence.bind(e):null;for(let s of o){if(T&&T(s.startX,s.startY,s.cellW,s.cellH)<.01)continue;let h=s.startX,d=s.startX+s.cellW,Y=s.startY,m=s.startY+s.cellH;for(let u of e){let p=u.startX,w=u.startY,a=u.startX+u.cellW,t=u.startY+u.cellH;if(Math.max(0,Math.min(m,t)-Math.max(Y,w))>s.cellH*.4&&p<d&&a>h){let O=(p+a)/2,D=(h+d)/2;O<=D?h=Math.max(h,a):d=Math.min(d,p)}}let r=d-h;if(r<18)continue;let H=h,x=Y,i=d,C=m,l=Math.floor(h+r/2),n=s.cy,c=!1;for(let u of e){let p=u.startX,w=u.startY,a=u.startX+u.cellW,t=u.startY+u.cellH;if(l>=p&&l<=a&&n>=w&&n<=t){c=!0;break}let y=Math.max(H,p),O=Math.max(x,w),D=Math.min(i,a),E=Math.min(C,t),g=Math.max(0,D-y)*Math.max(0,E-O),f=(i-H)*(C-x);if(g/(f||1)>=.25){c=!0;break}}c||b.push({...s,startX:H,cellW:r,cx:l})}return b.sort((s,h)=>Math.abs(s.startY-h.startY)>18?s.startY-h.startY:s.startX-h.startX),b.forEach((s,h)=>{s.badgeId=h+1}),b}async function pt(){try{let e=await ct(),o=null;if(st){let m=(async()=>{try{let{detectUIBoxesONNX:r}=await import("./ui_detector_onnx-YGGFMOK5.js");return await r(e,M.TARGET_WIDTH,M.TARGET_HEIGHT)}catch{return null}})();if(nt)o=await m||[];else{let r=z(e,!0),[H,x]=await Promise.all([m,r]);o=H&&H.length>0?at(H,x):await z(e,!1)}}else o=await z(e,!1);F=o;let b=rt(M.TARGET_WIDTH,M.TARGET_HEIGHT,M.COLS,M.ROWS,o),T=await Z(e).resize(M.TARGET_WIDTH,M.TARGET_HEIGHT,{fit:"fill"}).composite([{input:Buffer.from(b),top:0,left:0}]).png({quality:100}).toBuffer();if(process.env.SHOW_DEBUG_GRID)try{let m=Q.resolve(process.cwd(),"screenshots");await K.ensureDir(m);let r=Q.join(m,`${tt}.png`);await K.writeFile(r,T),tt++}catch{}let s=T.toString("base64"),h=o.length,d=e,Y=T;return d=null,Y=null,{base64:s,mimeType:"image/png",width:M.TARGET_WIDTH,height:M.TARGET_HEIGHT,detectedCount:h}}catch(e){return console.error("Failed to capture gridded screenshot:",e),null}}function it(e){if(e==null)return null;let o=null;if(typeof e=="number")o=e;else if(typeof e=="string"){let H=e.trim();if(/^\d+$/.test(H))o=parseInt(H,10);else{let x=H.match(/^([A-Z])([0-9]{1,2})$/i);if(x){let i=x[1].toUpperCase().charCodeAt(0)-65,C=parseInt(x[2],10)-1;o=i*M.COLS+C+1}}}if(o===null||isNaN(o))return null;if(F&&F.length>0){let H=F.find(x=>x.badgeId===o)||F.find(x=>x.cellNum===o);if(H){let x=Math.floor((H.cellNum-1)%M.COLS),i=Math.floor((H.cellNum-1)/M.COLS);return{x:H.cx,y:H.cy,colIdx:x>=0?x:0,rowIdx:i>=0?i:0,cellNum:o}}}let b=M.COLS*M.ROWS;if(o<1||o>b)return null;let T=o-1,s=Math.floor(T/M.COLS),h=T%M.COLS,d=M.TARGET_WIDTH/M.COLS,Y=M.TARGET_HEIGHT/M.ROWS,m=Math.floor(h*d+d/2),r=Math.floor(s*Y+Y/2);return{x:m,y:r,colIdx:h,rowIdx:s,cellNum:o}}async function yt(e,o,b){let T=null;if(typeof e=="number"||typeof e=="string"?T=it(e):e&&typeof e.x=="number"&&typeof e.y=="number"&&(T=e),!T)return null;let s=o,h=b,d=0,Y=0,m=await et();try{let C=await P.listDisplays();if(C&&C.length>0){let l=C[m]||C[0];l.width&&l.height&&(s=l.width,h=l.height),l.left!==void 0&&(d=l.left),l.top!==void 0&&(Y=l.top)}}catch{}if(!s||!h)try{let C=await P({}),l=await Z(C).metadata();l&&l.width&&l.height?(s=l.width,h=l.height):(s=await V.width(),h=await V.height())}catch{(!s||!h)&&(s=await V.width(),h=await V.height())}let r=s/M.TARGET_WIDTH,H=h/M.TARGET_HEIGHT,x=Math.round(T.x*r)+d,i=Math.round(T.y*H)+Y;return{x,y:i,screenW:s,screenH:h,offsetX:d,offsetY:Y}}export{M as a,st as b,nt as c,et as d,pt as e,it as f,yt as g};
@@ -0,0 +1,13 @@
1
+ import{a as z}from"./chunk-NXGWQV2R.js";import{p as ut}from"./chunk-NJADNSYK.js";import{a as mt,b as W}from"./chunk-L3W2X74K.js";import{d as J,h as Z,i as M,j as b}from"./chunk-DSVLWYIT.js";import S from"fs-extra";import U from"path";import bt from"http";import N from"fs-extra";import et from"path";import{spawn as vt}from"child_process";import{fileURLToPath as Ft}from"url";var $=52991,Rt=15e3,ft=et.join(J,"usage","usage_error.txt"),ht=async(e,t)=>{let o=t?.stack||t?.message||String(t);console.error(`[Usage Daemon Error] [${e}]:`,t);try{await N.ensureDir(et.dirname(ft));let s=`[${new Date().toISOString()}] [Daemon:${e}] ${o}
2
+ -------------------------------------
3
+
4
+ `;await N.appendFile(ft,s,"utf8")}catch{}},B={agent:0,background:0,search:0,toolSuccess:0,toolFailure:0,toolDenied:0,duration:0,tokens:0,cachedTokens:0,candidateTokens:0,linesAdded:0,linesRemoved:0,cost:0,imageCalls:[]},tt=(e,t)=>{if(!e)return{};let o=Object.keys(e),i=new Date(new Date(t).getTime()-720*60*60*1e3),s={};for(let n of o)new Date(n)>=i&&(s[n]=e[n]);return s};async function Ut(){let e=new Date().toISOString().split("T")[0],t=null;try{if(await N.exists(M)){let o=(await N.readFile(M,"utf8")).trim();o.startsWith("{")||o.startsWith("[")?t=JSON.parse(o):t=JSON.parse(W(o))}}catch(o){await ht("loadUsageFromDisk",o)}if(t){let o={...B,...t.stats||{}};Array.isArray(o.imageCalls)||(o.imageCalls=[]);let i=t.history||{},s=tt(i,e);if(t.date===e)return{...t,stats:o,history:s};{let n=t.date,c={...s};return n&&(c[n]=o),{date:e,stats:{...B},history:tt(c,e)}}}return{date:e,stats:{...B},history:{}}}async function Ot(e=$){let t=await Ut(),o=!1,i=!1,s=Date.now(),n=null,c=async()=>{if(t)try{await N.ensureDir(et.dirname(M));let l=new Date().toISOString().split("T")[0];t.history=tt(t.history||{},t.date||l),t.saveId=Math.random().toString(36).substring(2)+Date.now().toString(36);let a=mt(JSON.stringify(t,null,2));await N.writeFile(M,a,"utf8"),i=!1}catch(l){await ht("flushToDisk",l)}},r=async()=>{n&&clearInterval(n),await c(),m.close(()=>{process.exit(0)}),setTimeout(()=>process.exit(0),1e3).unref()};n=setInterval(async()=>{if(o)return;Date.now()-s>Rt&&await r()},5e3),n.unref&&n.unref();let m=bt.createServer(async(l,a)=>{let u=l.url||"";if(l.method==="POST"&&u==="/heartbeat"){o||(s=Date.now()),a.writeHead(200,{"Content-Type":"application/json"}),a.end(JSON.stringify({ok:!0}));return}if((l.method==="GET"||l.method==="POST")&&u==="/finalize"){o=!0,n&&clearInterval(n),await c(),a.writeHead(200,{"Content-Type":"application/json"}),a.end(JSON.stringify({success:!0,message:"Finalized and written to disk"})),setTimeout(()=>{m.close(()=>process.exit(0)),setTimeout(()=>process.exit(0),500).unref()},3e3);return}if(l.method==="POST"&&u==="/flush"){o||(s=Date.now(),await c()),a.writeHead(200,{"Content-Type":"application/json"}),a.end(JSON.stringify({success:!0}));return}if(l.method==="POST"&&u==="/write"){if(o){a.writeHead(403,{"Content-Type":"application/json"}),a.end(JSON.stringify({error:"Daemon finalized. Writes locked."}));return}s=Date.now();let d="";l.on("data",p=>{d+=p}),l.on("end",async()=>{try{let p=JSON.parse(d||"{}"),C=new Date().toISOString().split("T")[0];if(t.date!==C){let y=t.date;y&&(t.history||(t.history={}),t.history[y]={...t.stats}),t.date=C,t.stats={...B}}t.stats||(t.stats={...B});let{key:h,amount:f=1,provider:w,model:T}=p;if(h&&t.stats[h]!==void 0&&(h==="cost"?t.stats.cost=Number(((t.stats.cost||0)+Number(f)).toFixed(6)):typeof t.stats[h]=="number"&&(t.stats[h]+=Math.floor(f))),h==="agent"&&w&&(t.stats.providerRequests||(t.stats.providerRequests={}),t.stats.providerRequests[w]=(t.stats.providerRequests[w]||0)+Math.floor(f)),w&&T&&(h==="tokens"||h==="cachedTokens"||h==="candidateTokens"||h==="ttft"||h==="cost")){t.stats.models||(t.stats.models={}),t.stats.models[w]||(t.stats.models[w]={}),t.stats.models[w][T]||(t.stats.models[w][T]={tokens:0,cachedTokens:0,candidateTokens:0,ttftSum:0,ttftCalls:0,cost:0});let y=t.stats.models[w][T];h==="tokens"&&(y.tokens+=Math.floor(f)),h==="cachedTokens"&&(y.cachedTokens+=Math.floor(f)),h==="candidateTokens"&&(y.candidateTokens+=Math.floor(f)),h==="cost"&&(y.cost=Number(((y.cost||0)+Number(f)).toFixed(6))),h==="ttft"&&(y.ttftSum=(y.ttftSum||0)+Math.floor(f),y.ttftCalls=(y.ttftCalls||0)+1)}i=!0,await c(),a.writeHead(200,{"Content-Type":"application/json"}),a.end(JSON.stringify({success:!0}))}catch(p){a.writeHead(400,{"Content-Type":"application/json"}),a.end(JSON.stringify({error:p.message}))}});return}a.writeHead(404,{"Content-Type":"text/plain"}),a.end("Not Found")});m.listen(e,"127.0.0.1",()=>{s=Date.now()}),m.on("error",l=>{l.code==="EADDRINUSE"&&process.exit(0)})}async function At(e=$){try{if((await fetch(`http://127.0.0.1:${e}/heartbeat`,{method:"POST",signal:AbortSignal.timeout(300)})).ok)return!0}catch{}try{let t=Ft(import.meta.url);vt(process.execPath,[t,"--usage-daemon-worker",`--port=${e}`],{detached:!0,stdio:"ignore",windowsHide:!0}).unref();for(let i=0;i<10;i++){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 st(e,t=$){try{await At(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 It(e=$){try{await fetch(`http://127.0.0.1:${e}/heartbeat`,{method:"POST",signal:AbortSignal.timeout(600)})}catch{}}async function Et(e=$){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):$;Ot(t)}var pt=U.join(J,"usage","usage_error.txt"),H=new Map,Nt=(e,t)=>{let o=`${e}:${t}`;if(H.has(o))return H.get(o);try{let i=yt();if(S.existsSync(i)){let n=S.readFileSync(i,"utf8").split(`
5
+ `).filter(Boolean),c=t?t.trim().toLowerCase():"",r=e?e.trim().toLowerCase():"";for(let m=n.length-1;m>=0;m--)try{let l=JSON.parse(n[m]),a=l.provider&&l.provider.trim().toLowerCase()===r,u=l.model&&l.model.trim().toLowerCase()===c;if(a&&u&&l.cached!==void 0){let d=Number(l.cached)||0;return H.set(o,d),d}}catch{}}}catch{}return H.set(o,0),0},$t=(e,t,{input:o=0,cached:i=0,output:s=0})=>{let n=ut(e,t);if(!n)return{cost:0,uncachedInput:Math.max(0,o-i),estimatedCacheWrite:0,pricing:null};let c=Math.max(0,o-i),r=`${e}:${t}`,m=Nt(e,t);H.set(r,i);let l=i>m?i-m:0,a=c/1e6*n.IN,u=s/1e6*n.OUT,d=i/1e6*n.CR,p=l/1e6*n.CW,C=a+u+d+p;return{cost:Number(C.toFixed(6)),uncachedInput:c,estimatedCacheWrite:l,breakdown:{inputCost:Number(a.toFixed(6)),outputCost:Number(u.toFixed(6)),cacheReadCost:Number(d.toFixed(6)),cacheWriteCost:Number(p.toFixed(6))},pricing:n}},Q=null,oe=()=>{Q=null},it=async e=>{if(e!=="c_openai")return e;if(Q)return Q;try{let o=(await z())?.systemSettings?.customOpenAIBaseUrl||"";if(o=o.trim().replace(/\/+$/,""),o){let i=o.indexOf("/v1");return i!==-1&&(o=o.substring(0,i+3)),Q=o,o}}catch{}return"c_openai"},X=async(e,t)=>{let o=t?.stack||t?.message||String(t);console.error(`[Usage Error] [${e}]:`,t);try{await S.ensureDir(U.dirname(pt));let s=`[${new Date().toISOString()}] [${e}] ${o}
6
+ -------------------------------------
7
+
8
+ `;await S.appendFile(pt,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,cost:0,imageCalls:[]},Y=(e,t)=>{if(!e)return{};let o=Object.keys(e),i=new Date(new Date(t).getTime()-720*60*60*1e3),s={};for(let n of o)new Date(n)>=i&&(s[n]=e[n]);return s},j=async()=>{let e=new Date().toISOString().split("T")[0];try{!await S.exists(M)&&await S.exists(Z)&&(await S.ensureDir(U.dirname(M)),await S.move(Z,M))}catch{}let t=null;try{if(await S.exists(M)){let i=(await S.readFile(M,"utf8")).trim();i.startsWith("{")||i.startsWith("[")?t=JSON.parse(i):t=JSON.parse(W(i))}}catch(i){await X("loadUsageFromFile",i)}let o=t;if(o){let i=o.stats||{...v},s={...v,...i};Array.isArray(s.imageCalls)||(s.imageCalls=[]);let n=o.history||{},c=Y(n,e);if(o.date===e)return{...o,stats:s,history:c};{let r=o.date,m=s,l={...c};return r&&(l[r]=m),{date:e,stats:{...v},history:Y(l,e)}}}return{date:e,stats:{...v},history:{}}},Pt=async()=>{},ot=500,gt=0,yt=()=>{let t=new Date().toISOString().split("T")[0];return U.join(b,`${t}.jsonl`)},ie=async e=>{try{await S.ensureDir(b);let t=await it(e.provider),o=Number(e.prompt)||0,i=Number(e.cached)||0,s=Number(e.output)||0,n=$t(e.provider,e.model,{input:o,cached:i,output:s}),c={time:new Date().toISOString(),provider:t||"unknown",model:e.model||"unknown",input:o,cached:i,output:s,reasoning:Number(e.reasoning)||0,ttft:Number(e.ttft)||0,cost:n.cost,estimatedCacheWrite:n.estimatedCacheWrite};n.breakdown&&(c.costBreakdown=n.breakdown),await S.appendFile(yt(),JSON.stringify(c)+`
9
+ `,"utf8"),n.cost>0&&await qt("cost",n.cost,e.provider,e.model),++gt>=10&&(gt=0,await wt())}catch{}},wt=async()=>{try{if(!await S.exists(b))return;let e=(await S.readdir(b)).filter(s=>s.endsWith(".jsonl")).sort(),t=[];for(let s of e)try{let n=await S.readFile(U.join(b,s),"utf8");for(let c of n.split(`
10
+ `))c.trim()&&t.push({file:s,line:c})}catch{}if(t.length<=ot)return;let o=t.slice(-ot),i=new Map;for(let s of o)i.has(s.file)||i.set(s.file,[]),i.get(s.file).push(s.line);for(let s of e){let n=i.get(s);!n||n.length===0?await S.remove(U.join(b,s)):await S.writeFile(U.join(b,s),n.join(`
11
+ `)+`
12
+ `,"utf8")}}catch{}},ne=async(e=30)=>{let t=[];try{if(!await S.exists(b))return t;let i=(await S.readdir(b)).filter(s=>s.endsWith(".jsonl")).sort().slice(-Math.max(1,e));for(let s of i)try{let n=await S.readFile(U.join(b,s),"utf8");for(let c of n.split(`
13
+ `))if(c.trim())try{t.push(JSON.parse(c))}catch(r){await X(`getTimedUsage:parseLine (${s})`,r)}}catch(n){await X(`getTimedUsage:readFile (${s})`,n)}}catch(o){await X("getTimedUsage",o)}return t.slice(-ot)},ae=async()=>{g=await j(),await wt()},F=async()=>{let e=new Date().toISOString().split("T")[0];if(!g)g=await j();else if(g.date!==e){let t=g.date,o=g.stats,i=g.history||{};o&&(i[t]=o),g={date:e,stats:{...v},history:Y(i,e)},await Pt()}return g&&g.stats&&!Array.isArray(g.stats.imageCalls)&&(g.stats.imageCalls=[]),g.stats},kt=async()=>{let e=new Date().toISOString().split("T")[0];g||(g=await j()),g.date!==e&&await F();let t=g.history||{},o=Y(t,e);g.history=o;let i=g.stats||{...v},s={...v};s.imageCalls=[],s.models={},s.providerRequests={};let n=(c,r)=>{for(let m in c)if(m==="imageCalls")c.imageCalls=[...c.imageCalls||[],...r.imageCalls||[]];else if(m==="providerRequests"){let l=r.providerRequests||{};for(let a in l)c.providerRequests[a]=(c.providerRequests[a]||0)+(l[a]||0)}else if(m==="models"){let l=r.models||{};for(let a in l){c.models[a]||(c.models[a]={});for(let u in l[a]){c.models[a][u]||(c.models[a][u]={tokens:0,cachedTokens:0,candidateTokens:0,ttftSum:0,ttftCalls:0,cost:0});let d=c.models[a][u],p=l[a][u];d.tokens+=p.tokens||0,d.cachedTokens+=p.cachedTokens||0,d.candidateTokens+=p.candidateTokens||0,d.cost=Number(((d.cost||0)+(p.cost||0)).toFixed(6)),d.ttftSum=(d.ttftSum||0)+(p.ttftSum||0),d.ttftCalls=(d.ttftCalls||0)+(p.ttftCalls||0)}}}else m==="cost"?c.cost=Number(((c.cost||0)+(r.cost||0)).toFixed(6)):typeof c[m]=="number"&&(c[m]+=r[m]||0)};n(s,i);for(let c in o)n(s,o[c]);return s},re=async(e,t)=>{t=await it(t),e==="toolSuccess"?R.toolSuccess++:e==="toolFailure"?R.toolFailure++:e==="toolDenied"&&R.toolDenied++;let o=await F();o[e]!==void 0&&o[e]++,t&&e==="agent"&&(o.providerRequests||(o.providerRequests={}),o.providerRequests[t]=(o.providerRequests[t]||0)+1),await st({key:e,amount:1,provider:t})},R={linesAdded:0,linesRemoved:0,toolSuccess:0,toolFailure:0,toolDenied:0,cost:0},qt=async(e,t,o,i)=>{o=await it(o),e==="linesAdded"?R.linesAdded+=t:e==="linesRemoved"?R.linesRemoved+=t:e==="cost"&&(R.cost=Number(((R.cost||0)+Number(t)).toFixed(6)));let s=await F();if(s[e]!==void 0&&(e==="cost"?s.cost=Number(((s.cost||0)+Number(t)).toFixed(6)):s[e]+=Math.floor(t)),o&&i&&(e==="tokens"||e==="cachedTokens"||e==="candidateTokens"||e==="ttft"||e==="cost")){s.models||(s.models={}),s.models[o]||(s.models[o]={}),s.models[o][i]||(s.models[o][i]={tokens:0,cachedTokens:0,candidateTokens:0,ttftSum:0,ttftCalls:0,cost:0});let n=s.models[o][i];e==="tokens"&&(n.tokens+=Math.floor(t)),e==="cachedTokens"&&(n.cachedTokens+=Math.floor(t)),e==="candidateTokens"&&(n.candidateTokens+=Math.floor(t)),e==="cost"&&(n.cost=Number(((n.cost||0)+Number(t)).toFixed(6))),e==="ttft"&&(n.ttftSum=(n.ttftSum||0)+Math.floor(t),n.ttftCalls=(n.ttftCalls||0)+1)}await st({key:e,amount:t,provider:o,model:i})},Ct=async(e=1)=>{let t=new Date,o=t.toISOString().split("T")[0];g||(g=await j()),g.date!==o&&await F();let i=t.getFullYear(),s=t.getMonth();t.getDate()<e&&(s-=1,s<0&&(s=11,i-=1));let r=new Date(i,s,e).toISOString().split("T")[0],m=g.history||{},l=g.stats||{...v},a={...v};a.imageCalls=[],a.models={},a.providerRequests={};let u=(d,p)=>{for(let C in d)if(C==="imageCalls")d.imageCalls=[...d.imageCalls||[],...p.imageCalls||[]];else if(C==="providerRequests"){let h=p.providerRequests||{};for(let f in h)d.providerRequests[f]=(d.providerRequests[f]||0)+(h[f]||0)}else if(C==="models"){let h=p.models||{};for(let f in h){d.models[f]||(d.models[f]={});for(let w in h[f]){d.models[f][w]||(d.models[f][w]={tokens:0,cachedTokens:0,candidateTokens:0,ttftSum:0,ttftCalls:0});let T=d.models[f][w],y=h[f][w];T.tokens+=y.tokens||0,T.cachedTokens+=y.cachedTokens||0,T.candidateTokens+=y.candidateTokens||0,T.ttftSum=(T.ttftSum||0)+(y.ttftSum||0),T.ttftCalls=(T.ttftCalls||0)+(y.ttftCalls||0)}}}else typeof d[C]=="number"&&(d[C]+=p[C]||0)};u(a,l);for(let d in m)d>=r&&d<o&&u(a,m[d]);return a},_t=async(e,t={})=>{let o=await z().catch(()=>({})),i=t.apiTier||o.apiTier||"Free",s=t.quotas||t.systemSettings?.quotas||o.quotas||{},n=s.providerBudgets||{},c=!!n.__useProvider,r=t.aiProvider||o.aiProvider||"Google",m=c&&!!n[r],l=()=>{if(m){let a=n[r];return{agentLimit:typeof a.agentLimit=="number"&&a.agentLimit>0?a.agentLimit:99999999,tokenLimit:typeof a.tokenLimit=="number"&&a.tokenLimit>0?a.tokenLimit:99999999999999,monthlyTokenLimit:typeof a.monthlyTokenLimit=="number"&&a.monthlyTokenLimit>0?a.monthlyTokenLimit:99999999999999,dailyCostLimit:typeof a.dailyCostLimit=="number"&&a.dailyCostLimit>0?a.dailyCostLimit:99999999999999,monthlyCostLimit:typeof a.monthlyCostLimit=="number"&&a.monthlyCostLimit>0?a.monthlyCostLimit:99999999999999}}return{agentLimit:s.agentLimit||99999999,tokenLimit:s.tokenLimit||99999999999999,monthlyTokenLimit:s.monthlyTokenLimit||99999999999999,dailyCostLimit:typeof s.dailyCostLimit=="number"&&s.dailyCostLimit>0?s.dailyCostLimit:99999999999999,monthlyCostLimit:typeof s.monthlyCostLimit=="number"&&s.monthlyCostLimit>0?s.monthlyCostLimit:99999999999999}};if(e==="agent"){let{agentLimit:a,tokenLimit:u,monthlyTokenLimit:d,dailyCostLimit:p,monthlyCostLimit:C}=l(),h=await F(),f;s.resetMode==="Custom"?f=await Ct(s.resetDay||1):f=await kt();let w=0,T=0,y=0,O=0,L=0;if(m){w=h.providerRequests?.[r]||0;let D=h.models?.[r]||{};for(let x in D)T+=D[x]?.tokens||0,O+=D[x]?.cost||0;let k=f.models?.[r]||{};for(let x in k)y+=k[x]?.tokens||0,L+=k[x]?.cost||0}else w=h.agent||0,T=h.tokens||0,y=f.tokens||0,O=h.cost||0,L=f.cost||0;return i==="Free"&&h.agent+h.background>=999999?{allowed:!1,reason:"Free Tier Daily Usage Limit Exceeded"}:w>=a?{allowed:!1,reason:m?`Daily Request Limit Reached for ${r}`:"Daily Agent Request Limit Reached"}:T>=u?{allowed:!1,reason:m?`Daily Token Budget Exhausted for ${r}`:"Daily Token Budget Exhausted"}:y>=d?{allowed:!1,reason:m?`Monthly Token Budget Exhausted for ${r}`:"Monthly Token Budget Exhausted"}:O>=p?{allowed:!1,reason:m?`Daily Cost Budget Exhausted for ${r} ($${O.toFixed(4)} >= $${p.toFixed(4)})`:`Daily Cost Budget Exhausted ($${O.toFixed(4)} >= $${p.toFixed(4)})`}:L>=C?{allowed:!1,reason:m?`Monthly Cost Budget Exhausted for ${r} ($${L.toFixed(4)} >= $${C.toFixed(4)})`:`Monthly Cost Budget Exhausted ($${L.toFixed(4)} >= $${C.toFixed(4)})`}:{allowed:!0}}if(e==="background"){let a=await F();if(i==="Free"&&a.agent+a.background>=999999)return{allowed:!1,reason:"Free Tier Background Limit Exceeded"};let u=a.background<(s.backgroundLimit||999999);return{allowed:u,reason:u?void 0:"Background Request Limit Exceeded"}}if(e==="search"){let u=(await F()).search<(s.searchLimit||100);return{allowed:u,reason:u?void 0:"Search Quota Exceeded"}}return{allowed:!0}},ce=async(e,t={})=>(await _t(e,t)).allowed,nt=e=>{if(!e||e.length===0)return[];let o=[...e].sort((s,n)=>s.timestamp-n.timestamp),i=[];for(let s of o){if(i.length>0){let n=i[i.length-1];if(s.timestamp>=n.start&&s.timestamp<n.end){n.calls.push(s),n.spent+=s.cost;continue}}i.push({start:s.timestamp,end:s.timestamp+36e5,calls:[s],spent:s.cost})}return i},Tt=(e,t)=>{if(!e||e.length===0)return .025;let i=nt(e);if(i.length===0)return .025;let s=[];for(let u of i){let d=.025;if(s.length>0){let C=s[s.length-1],h=!1;if(s.length>=2){let f=s[s.length-2];C.ratio>=.8&&f.ratio>=.8&&(h=!0)}if(h)d=.015;else{let f=C.limit,w=C.ratio;w>=.8?d=f===.015?.015:f:w<.4?d=Math.min(.025,f+.005):w>=.4&&w<.6?d=Math.min(.025,f+.004):d=Math.min(.025,f+.002)}}let p=d>0?u.spent/d:0;s.push({limit:d,spent:u.spent,ratio:p})}let n=i[i.length-1];if(t<n.end)return s[s.length-1].limit;let c=s[s.length-1].limit,r=c,m=s[s.length-1].ratio,l=n.end,a=0;for(let u=s.length-1;u>=0&&s[u].ratio>=.8;u--)a++;for(;l<=t;){let u=.025;a>=2?u=.015:m>=.8?u=r===.015?.015:r:m<.4?u=Math.min(.025,r+.005):m>=.4&&m<.6?u=Math.min(.025,r+.004):u=Math.min(.025,r+.002),r=u,m=0,a=0,l+=36e5,c=u}return c},le=async e=>{let t=e.imageSettings||{keyType:"Default",quality:"Low-High"};if(t.keyType!=="Default")return!0;let i={Low:.001,"Low-High":.002,Medium:.008,"Medium-High":.01,High:.045,Ultra:.0488,Premium:.15}[t.quality]||.002,s=await F();s.imageCalls||(s.imageCalls=[]);let n=Date.now(),c=nt(s.imageCalls),r=0;if(c.length>0){let l=c[c.length-1];n>=l.start&&n<l.end&&(r=l.spent)}let m=Tt(s.imageCalls,n);return r+i<=m},de=async()=>{let e=await F();e.imageCalls||(e.imageCalls=[]);let t=Date.now(),o=nt(e.imageCalls),i=[],s=0,n=0;if(o.length>0){let l=o[o.length-1];t>=l.start&&t<l.end&&(i=l.calls,s=l.spent,n=Math.max(0,Math.ceil((l.end-t)/(60*1e3))))}let c=Tt(e.imageCalls,t),r=Math.max(0,c-s),m=s;return{totalSpent:s,remaining:r,activeCallsCount:i.length,nextResetMin:n,reclaimCost:m,limit:c}},me=async e=>{let t=e.imageSettings||{keyType:"Default",quality:"Low-High"},i={Low:.001,"Low-High":.002,Medium:.008,"Medium-High":.01,High:.045,Ultra:.0488,Premium:.1}[t.quality]||.002,s=await F();s.imageCalls||(s.imageCalls=[]),s.imageCalls.push({timestamp:Date.now(),cost:i}),queueFlush()},ue=async()=>{let e=new Date().toISOString().split("T")[0];g||(g=await j()),g.date!==e&&await F();let t=g.stats||{...v},o=g.history||{},i=new Set(Object.keys(o));i.add(e);let n=Array.from(i).sort().map(L=>{let D=L===e?t:o[L]||{},k={...v,...D},x=k.tokens||0,P=k.cachedTokens||0,q=k.candidateTokens||0,G=Math.max(0,x-q),_=Math.max(0,G-P),A=k.agent||0,I=k.background||0,E=k.search||0,St=A+I+E,V=k.toolSuccess||0,at=k.toolFailure||0,rt=k.toolDenied||0,K=V+at+rt,Lt=K>0?(V/K*100).toFixed(1):"100.0",ct=k.linesAdded||0,lt=k.linesRemoved||0,dt=Array.isArray(k.imageCalls)?k.imageCalls:[],Dt=dt.reduce((xt,Mt)=>xt+(Mt.cost||0),0);return{date:L,tokens:x,cachedTokens:P,candidateTokens:q,promptTokens:G,uncachedPromptTokens:_,agent:A,background:I,search:E,totalRequests:St,toolSuccess:V,toolFailure:at,toolDenied:rt,totalTools:K,toolSuccessRate:parseFloat(Lt),linesAdded:ct,linesRemoved:lt,netLines:ct-lt,duration:k.duration||0,cost:k.cost||0,imageCallsCount:dt.length,imageCost:Dt,models:k.models||{},providerRequests:k.providerRequests||{}}}),c=await z().catch(()=>({})),r=c.quotas||{},m=c.apiTier||"Free",l=await kt().catch(()=>({tokens:0,agent:0})),a=null;r.resetMode==="Custom"&&(a=await Ct(r.resetDay||1).catch(()=>({tokens:0})));let u=r.tokenLimit||0,d=r.monthlyTokenLimit||0,p=r.agentLimit||0,C=r.resetMode||"Daily",h=r.resetDay||1,f=r.providerBudgets||{},w=!!f.__useProvider,T=["Google","Anthropic","OpenAI","DeepSeek","Mistral","NVIDIA","OpenRouter","Ollama","InferX","SenseNova","AIHubMix","Poolside"];Object.keys(f).forEach(L=>{L!=="__useProvider"&&!T.includes(L)&&T.push(L)});let y=[];for(let L of T){let D=f[L];if(D&&(D.agentLimit||D.tokenLimit||D.monthlyTokenLimit)){let k=0,x=t.models?.[L]||{};for(let E in x)k+=x[E]?.tokens||0;let P=0,q=(r.resetMode==="Custom"?a?.models:l?.models)?.[L]||{};for(let E in q)P+=q[E]?.tokens||0;let G=t.providerRequests?.[L]||0,_=D.tokenLimit||0,A=D.monthlyTokenLimit||0,I=D.agentLimit||0;y.push({provider:L,dailyTokens:k,dailyTokenLimit:_,isDailyUnlimited:_>=9999999999999||_===0,monthlyTokens:P,monthlyTokenLimit:A,isMonthlyUnlimited:A>=9999999999999||A===0,dailyRequests:G,dailyAgentLimit:I,isRequestsUnlimited:I>=9999999||I===0})}}let O={apiTier:m,resetMode:C,resetDay:h,quotas:r,usingProviderBudgets:w&&y.length>0||y.length>0,providerBudgetsList:y,daily:{tokensUsed:t.tokens||0,tokenLimit:u,cost:t.cost||0,costLimit:r.dailyCostLimit||0,agentRequests:t.agent||0,agentLimit:p,isUnlimitedTokens:u>=9999999999999||u===0,isUnlimitedCost:!r.dailyCostLimit||r.dailyCostLimit>=9999999999999||r.dailyCostLimit===0,isUnlimitedRequests:p>=9999999||p===0},monthly:{tokensUsed:(r.resetMode==="Custom"?a?.tokens:l?.tokens)||0,tokenLimit:d,cost:(r.resetMode==="Custom"?a?.cost:l?.cost)||0,costLimit:r.monthlyCostLimit||0,isUnlimitedTokens:d>=9999999999999||d===0,isUnlimitedCost:!r.monthlyCostLimit||r.monthlyCostLimit>=9999999999999||r.monthlyCostLimit===0},providerBudgets:f};return{currentDate:e,todayStats:t,history:o,timeline:n,budget:O,runtimeSession:{...R}}};export{It as a,Et as b,$t as c,oe as d,Pt as e,ie as f,wt as g,ne as h,ae as i,F as j,kt as k,re as l,R as m,qt as n,Ct as o,_t as p,ce as q,nt as r,Tt as s,le as t,de as u,me as v,ue as w};
@@ -0,0 +1 @@
1
+ import{a as u}from"./chunk-DSVLWYIT.js";import f from"fs";import g from"path";import{fileURLToPath as M}from"url";var p={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 I=M(import.meta.url),y=g.dirname(I),_="",j=[g.join(y,"../../model_config.json"),g.join(y,"../model_config.json")];for(let e of j)try{if(f.existsSync(e)){_=e;break}}catch{}var b=g.join(u,"model_config.json"),a=null,v=()=>{if(_)try{let e=f.readFileSync(_,"utf-8"),r=JSON.parse(e);if(r&&typeof r=="object")return r}catch{}return p&&typeof p=="object"?JSON.parse(JSON.stringify(p)):{version:0,release:20260913,fallbacks:{},providers:{}}};if(f.existsSync(b))try{let e=f.readFileSync(b,"utf-8"),r=JSON.parse(e);if(r&&typeof r=="object"){let t=v();r.fallbacks={...t.fallbacks||{},...r.fallbacks||{}},r.providers||(r.providers={}),r.release||(r.release=t.release||20260913),a=r}}catch{}a||(a=v());var F=new Set,k=new Set,c=()=>{let e=new Set,r=new Set;if(a.providers)for(let t of Object.keys(a.providers)){let s=a.providers[t];if(s&&s.models){let i=["Free","Paid"];for(let n of i){let l=s.models[n];if(Array.isArray(l)){for(let o of l)if(o&&o.cmd){let d=o.cmd.trim().toLowerCase();o.multimodal===!0&&e.add(d),o.hasReasoning===!0&&r.add(d)}}}}}if(Array.isArray(a.multimodal_models))for(let t of a.multimodal_models)t&&typeof t=="string"&&e.add(t.trim().toLowerCase());F=e,k=r};c();var L=()=>a,m=()=>{try{return f.existsSync(u)||f.mkdirSync(u,{recursive:!0}),f.writeFileSync(b,JSON.stringify(a,null,2),"utf-8"),!0}catch{return!1}},N=(e,r,t=!1,s=null)=>{if(!e||!r)return{success:!1,reason:"Invalid provider or model ID"};let i=r.trim();if(!i)return{success:!1,reason:"Model ID cannot be empty"};a.providers||(a.providers={}),a.providers[e]||(a.providers[e]={default_free:"",default_paid:"",models:{Free:[],Paid:[]}});let n=a.providers[e];n.models||(n.models={Free:[],Paid:[]}),Array.isArray(n.models.Free)||(n.models.Free=[]);let l=n.models.Free.find(o=>(typeof o=="string"?o:o?.cmd)===i);if(l)if(typeof l=="string"){let o=n.models.Free.indexOf(l),d={cmd:i,multimodal:!!t,desc:i};s&&Object.keys(s).length>0&&(d.info=s),n.models.Free[o]=d}else l.multimodal=!!t,s&&Object.keys(s).length>0&&(l.info={...l.info||{},...s});else{let o={cmd:i,multimodal:!!t,desc:i};s&&Object.keys(s).length>0&&(o.info=s),n.models.Free.push(o)}return c(),m(),{success:!0}},$=(e,r,t={})=>{if(!e||!r)return{success:!1,reason:"Invalid provider or model ID"};let s=r.trim();if(!s)return{success:!1,reason:"Model ID cannot be empty"};a.providers||(a.providers={}),a.providers[e]||(a.providers[e]={default_free:"",default_paid:"",models:{Free:[],Paid:[]}});let i=a.providers[e];i.models||(i.models={Free:[],Paid:[]}),Array.isArray(i.models.Free)||(i.models.Free=[]);let n=s.toLowerCase(),l=i.models.Free.find(o=>{let d=typeof o=="string"?o:o?.cmd;return d&&d.trim().toLowerCase()===n});if(!l)i.models.Free.push({cmd:s,multimodal:!1,desc:s,info:t});else if(typeof l=="string"){let o=i.models.Free.indexOf(l);i.models.Free[o]={cmd:l,multimodal:!1,desc:l,info:t}}else l.info={...l.info||{},...t};return m(),{success:!0}},R=(e,r,t=!0)=>{if(!e||!r)return{success:!1,reason:"Invalid provider or model ID"};let s=r.trim();if(!s)return{success:!1,reason:"Model ID cannot be empty"};let i=a.providers?.[e];if(!i||!i.models||!Array.isArray(i.models.Free))return{success:!1,reason:`Provider ${e} has no models configured`};let n=i.models.Free.find(l=>(typeof l=="string"?l:l?.cmd)===s);if(!n)return{success:!1,reason:`Model "${s}" not found in ${e} model list`};if(typeof n=="string"){let l=i.models.Free.indexOf(n);i.models.Free[l]={cmd:s,multimodal:!!t,desc:s}}else n.multimodal=!!t;return c(),m(),{success:!0}},T=(e,r,t=!1,s=null)=>{if(!e||!r)return{success:!1,reason:"Invalid provider or model ID"};let i=r.trim();if(!i)return{success:!1,reason:"Model ID cannot be empty"};a.providers||(a.providers={}),a.providers[e]||(a.providers[e]={default_free:"",default_paid:"",models:{Free:[],Paid:[]}});let n=a.providers[e];n.models||(n.models={Free:[],Paid:[]}),Array.isArray(n.models.Free)||(n.models.Free=[]);let l=n.models.Free.find(o=>(typeof o=="string"?o:o?.cmd)===i);if(l)if(typeof l=="string"){let o=n.models.Free.indexOf(l),d={cmd:i,multimodal:!!t,desc:i};s&&Object.keys(s).length>0&&(d.info=s),n.models.Free[o]=d}else t&&(l.multimodal=!0),s&&Object.keys(s).length>0&&(l.info={...l.info||{},...s});else{let o={cmd:i,multimodal:!!t,desc:i};s&&Object.keys(s).length>0&&(o.info=s),n.models.Free.push(o)}return n.default_free=i,c(),m(),{success:!0}},J=(e,r)=>{if(!e||!r)return{success:!1,reason:"Invalid provider or model ID"};let t=r.trim();if(!t)return{success:!1,reason:"Model ID cannot be empty"};let s=a.providers?.[e];if(!s||!s.models||!Array.isArray(s.models.Free))return{success:!1,reason:`Provider ${e} has no models configured`};let i=s.models.Free.findIndex(n=>(typeof n=="string"?n:n?.cmd)===t);return i===-1?{success:!1,reason:`Model "${t}" not found in ${e} model list`}:(s.models.Free.splice(i,1),s.default_free===t&&(s.default_free=""),s.default_paid===t&&(s.default_paid=""),c(),m(),{success:!0})},U=(e,r,t)=>{if(!e||!r||!t)return{success:!1,reason:"Invalid provider or model IDs"};let s=r.trim(),i=t.trim();if(!s||!i)return{success:!1,reason:"Model IDs cannot be empty"};let n=a.providers?.[e];if(!n||!n.models||!Array.isArray(n.models.Free))return{success:!1,reason:`Provider ${e} has no models configured`};let l=n.models.Free.find(o=>(typeof o=="string"?o:o?.cmd)===s);if(!l)return{success:!1,reason:`Model "${s}" not found in ${e} model list`};if(typeof l=="string"){let o=n.models.Free.indexOf(l);n.models.Free[o]={cmd:i,multimodal:!1,desc:i}}else l.cmd=i,(l.desc===s||!l.desc)&&(l.desc=i);return c(),m(),{success:!0}},x=!1,C=e=>{x=!!e},W=C,E=e=>{if(!e)return!1;let r=e.trim().toLowerCase();return!!(x||F.has(r)||r.startsWith("gemini-")||r.startsWith("gemma-"))},z=e=>{if(!e)return!1;let r=e.trim().toLowerCase();return k.has(r)},G=(e,r)=>{let t=a.providers[e];return t?t.models[r==="Free"?"Free":"Paid"]||[]:[]},K=(e,r)=>{let t=a.providers[e];return t?r==="Free"?t.default_free:t.default_paid:""},V=(e,r)=>{if(!e||!r||!a.providers)return null;let t=a.providers[e];if(!t||!t.models)return null;let s=r.trim().toLowerCase(),i=["Free","Paid"];for(let n of i){let l=t.models[n];if(Array.isArray(l)){for(let o of l)if(typeof o=="object"&&o?.cmd&&o.cmd.trim().toLowerCase()===s&&o.info)return{IN:Number(o.info.IN)||0,OUT:Number(o.info.OUT)||0,CR:Number(o.info.CR)||0,CW:Number(o.info.CW)||0}}}return null},X=e=>a?.fallbacks?.[e];export{p as a,L as b,m as c,N as d,$ as e,R as f,T as g,J as h,U as i,C as j,W as k,E as l,z as m,G as n,K as o,V as p,X as q};
@@ -0,0 +1 @@
1
+ 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:"",activeModel:"",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:!1,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:""}},d=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},p=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(u){console.error(`Migration failed for ${i}:`,u)}}},D=async t=>{try{let e=await d();if(!e.systemSettings.useExternalData&&t.systemSettings?.useExternalData&&t.systemSettings?.externalDataPath&&await p(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-MHRBABMW.js");i()}catch{}return!0}catch(e){return console.error("Failed to save settings:",e),!1}};export{d as a,D as b};