fluxflow-cli 4.29.1 → 4.30.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.
@@ -1,12 +0,0 @@
1
- import{a as V}from"./chunk-RVCMZTHS.js";import{a as rt,b as J}from"./chunk-L3W2X74K.js";import{d as G,h as Y,i as v,j as M}from"./chunk-DSVLWYIT.js";import S from"fs-extra";import U from"path";import Dt from"http";import F from"fs-extra";import Z from"path";import{spawn as Lt}from"child_process";import{fileURLToPath as vt}from"url";var E=52991,Mt=15e3,ct=Z.join(G,"usage","usage_error.txt"),lt=async(s,t)=>{let o=t?.stack||t?.message||String(t);console.error(`[Usage Daemon Error] [${s}]:`,t);try{await F.ensureDir(Z.dirname(ct));let e=`[${new Date().toISOString()}] [Daemon:${s}] ${o}
2
- -------------------------------------
3
-
4
- `;await F.appendFile(ct,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:[]},K=(s,t)=>{if(!s)return{};let o=Object.keys(s),n=new Date(new Date(t).getTime()-720*60*60*1e3),e={};for(let i of o)new Date(i)>=n&&(e[i]=s[i]);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 lt("loadUsageFromDisk",o)}if(t){let o={...j,...t.stats||{}};Array.isArray(o.imageCalls)||(o.imageCalls=[]);let n=t.history||{},e=K(n,s);if(t.date===s)return{...t,stats:o,history:e};{let i=t.date,r={...e};return i&&(r[i]=o),{date:s,stats:{...j},history:K(r,s)}}}return{date:s,stats:{...j},history:{}}}async function xt(s=E){let t=await Rt(),o=!1,n=!1,e=Date.now(),i=null,r=async()=>{if(t)try{await F.ensureDir(Z.dirname(v));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 a=rt(JSON.stringify(t,null,2));await F.writeFile(v,a,"utf8"),n=!1}catch(l){await lt("flushToDisk",l)}},c=async()=>{i&&clearInterval(i),await r(),u.close(()=>{process.exit(0)}),setTimeout(()=>process.exit(0),1e3).unref()};i=setInterval(async()=>{if(o)return;Date.now()-e>Mt&&await c()},5e3),i.unref&&i.unref();let u=Dt.createServer(async(l,a)=>{let d=l.url||"";if(l.method==="POST"&&d==="/heartbeat"){o||(e=Date.now()),a.writeHead(200,{"Content-Type":"application/json"}),a.end(JSON.stringify({ok:!0}));return}if((l.method==="GET"||l.method==="POST")&&d==="/finalize"){o=!0,i&&clearInterval(i),await r(),a.writeHead(200,{"Content-Type":"application/json"}),a.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||(e=Date.now(),await r()),a.writeHead(200,{"Content-Type":"application/json"}),a.end(JSON.stringify({success:!0}));return}if(l.method==="POST"&&d==="/write"){if(o){a.writeHead(403,{"Content-Type":"application/json"}),a.end(JSON.stringify({error:"Daemon finalized. Writes locked."}));return}e=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:p,amount:f=1,provider:y,model:D}=h;if(p&&t.stats[p]!==void 0&&typeof t.stats[p]=="number"&&(t.stats[p]+=Math.floor(f)),p==="agent"&&y&&(t.stats.providerRequests||(t.stats.providerRequests={}),t.stats.providerRequests[y]=(t.stats.providerRequests[y]||0)+Math.floor(f)),y&&D&&(p==="tokens"||p==="cachedTokens"||p==="candidateTokens")){t.stats.models||(t.stats.models={}),t.stats.models[y]||(t.stats.models[y]={}),t.stats.models[y][D]||(t.stats.models[y][D]={tokens:0,cachedTokens:0,candidateTokens:0});let T=t.stats.models[y][D];p==="tokens"&&(T.tokens+=Math.floor(f)),p==="cachedTokens"&&(T.cachedTokens+=Math.floor(f)),p==="candidateTokens"&&(T.candidateTokens+=Math.floor(f))}n=!0,await r(),a.writeHead(200,{"Content-Type":"application/json"}),a.end(JSON.stringify({success:!0}))}catch(h){a.writeHead(400,{"Content-Type":"application/json"}),a.end(JSON.stringify({error:h.message}))}});return}a.writeHead(404,{"Content-Type":"text/plain"}),a.end("Not Found")});u.listen(s,"127.0.0.1",()=>{e=Date.now()}),u.on("error",l=>{l.code==="EADDRINUSE"&&process.exit(0)})}async function Ct(s=E){try{if((await fetch(`http://127.0.0.1:${s}/heartbeat`,{method:"POST",signal:AbortSignal.timeout(300)})).ok)return!0}catch{}try{let t=vt(import.meta.url);Lt(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 tt(s,t=E){try{await Ct(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 Ut(s=E){try{await fetch(`http://127.0.0.1:${s}/heartbeat`,{method:"POST",signal:AbortSignal.timeout(600)})}catch{}}async function Ot(s=E){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):E;xt(t)}var dt=U.join(G,"usage","usage_error.txt"),W=async(s,t)=>{let o=t?.stack||t?.message||String(t);console.error(`[Usage Error] [${s}]:`,t);try{await S.ensureDir(U.dirname(dt));let e=`[${new Date().toISOString()}] [${s}] ${o}
5
- -------------------------------------
6
-
7
- `;await S.appendFile(dt,e,"utf8")}catch{}},g=null,R={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 i of o)new Date(i)>=n&&(e[i]=s[i]);return e},$=async()=>{let s=new Date().toISOString().split("T")[0];try{!await S.exists(v)&&await S.exists(Y)&&(await S.ensureDir(U.dirname(v)),await S.move(Y,v))}catch{}let t=null;try{if(await S.exists(v)){let n=(await S.readFile(v,"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||{...R},e={...R,...n};Array.isArray(e.imageCalls)||(e.imageCalls=[]);let i=o.history||{},r=z(i,s);if(o.date===s)return{...o,stats:e,history:r};{let c=o.date,u=e,l={...r};return c&&(l[c]=u),{date:s,stats:{...R},history:z(l,s)}}}return{date:s,stats:{...R},history:{}}},bt=async()=>{},mt=500,ut=0,At=()=>{let t=new Date().toISOString().split("T")[0];return U.join(M,`${t}.jsonl`)},Xt=async s=>{try{await S.ensureDir(M);let t={time:new Date().toISOString(),provider:s.provider||"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};await S.appendFile(At(),JSON.stringify(t)+`
8
- `,"utf8"),++ut>=25&&(ut=0,await ft())}catch{}},ft=async()=>{try{if(!await S.exists(M))return;let s=(await S.readdir(M)).filter(e=>e.endsWith(".jsonl")).sort(),t=[];for(let e of s)try{let i=await S.readFile(U.join(M,e),"utf8");for(let r of i.split(`
9
- `))r.trim()&&t.push({file:e,line:r})}catch{}if(t.length<=mt)return;let o=t.slice(-mt),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 i=n.get(e);!i||i.length===0?await S.remove(U.join(M,e)):await S.writeFile(U.join(M,e),i.join(`
10
- `)+`
11
- `,"utf8")}}catch{}},Yt=async(s=30)=>{let t=[];try{if(!await S.exists(M))return t;let n=(await S.readdir(M)).filter(e=>e.endsWith(".jsonl")).sort().slice(-Math.max(1,s));for(let e of n)try{let i=await S.readFile(U.join(M,e),"utf8");for(let r of i.split(`
12
- `))if(r.trim())try{t.push(JSON.parse(r))}catch(c){await W(`getTimedUsage:parseLine (${e})`,c)}}catch(i){await W(`getTimedUsage:readFile (${e})`,i)}}catch(o){await W("getTimedUsage",o)}return t},Vt=async()=>{g=await $(),await ft()},x=async()=>{let s=new Date().toISOString().split("T")[0];if(!g)g=await $();else if(g.date!==s){let t=g.date,o=g.stats,n=g.history||{};o&&(n[t]=o),g={date:s,stats:{...R},history:z(n,s)},await bt()}return g&&g.stats&&!Array.isArray(g.stats.imageCalls)&&(g.stats.imageCalls=[]),g.stats},gt=async()=>{let s=new Date().toISOString().split("T")[0];g||(g=await $()),g.date!==s&&await x();let t=g.history||{},o=z(t,s);g.history=o;let n=g.stats||{...R},e={...R};e.imageCalls=[],e.models={},e.providerRequests={};let i=(r,c)=>{for(let u in r)if(u==="imageCalls")r.imageCalls=[...r.imageCalls||[],...c.imageCalls||[]];else if(u==="providerRequests"){let l=c.providerRequests||{};for(let a in l)r.providerRequests[a]=(r.providerRequests[a]||0)+(l[a]||0)}else if(u==="models"){let l=c.models||{};for(let a in l){r.models[a]||(r.models[a]={});for(let d in l[a]){r.models[a][d]||(r.models[a][d]={tokens:0,cachedTokens:0,candidateTokens:0});let m=r.models[a][d],h=l[a][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)};i(e,n);for(let r in o)i(e,o[r]);return e},Kt=async(s,t)=>{s==="toolSuccess"?I.toolSuccess++:s==="toolFailure"?I.toolFailure++:s==="toolDenied"&&I.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 tt({key:s,amount:1,provider:t})},I={linesAdded:0,linesRemoved:0,toolSuccess:0,toolFailure:0,toolDenied:0},Zt=async(s,t,o,n)=>{s==="linesAdded"?I.linesAdded+=t:s==="linesRemoved"&&(I.linesRemoved+=t);let e=await x();if(e[s]!==void 0&&(e[s]+=Math.floor(t)),o&&n&&(s==="tokens"||s==="cachedTokens"||s==="candidateTokens")){e.models||(e.models={}),e.models[o]||(e.models[o]={}),e.models[o][n]||(e.models[o][n]={tokens:0,cachedTokens:0,candidateTokens:0});let i=e.models[o][n];s==="tokens"&&(i.tokens+=Math.floor(t)),s==="cachedTokens"&&(i.cachedTokens+=Math.floor(t)),s==="candidateTokens"&&(i.candidateTokens+=Math.floor(t))}await tt({key:s,amount:t,provider:o,model:n})},ht=async(s=1)=>{let t=new Date,o=t.toISOString().split("T")[0];g||(g=await $()),g.date!==o&&await x();let n=t.getFullYear(),e=t.getMonth();t.getDate()<s&&(e-=1,e<0&&(e=11,n-=1));let c=new Date(n,e,s).toISOString().split("T")[0],u=g.history||{},l=g.stats||{...R},a={...R};a.imageCalls=[],a.models={},a.providerRequests={};let d=(m,h)=>{for(let k in m)if(k==="imageCalls")m.imageCalls=[...m.imageCalls||[],...h.imageCalls||[]];else if(k==="providerRequests"){let p=h.providerRequests||{};for(let f in p)m.providerRequests[f]=(m.providerRequests[f]||0)+(p[f]||0)}else if(k==="models"){let p=h.models||{};for(let f in p){m.models[f]||(m.models[f]={});for(let y in p[f]){m.models[f][y]||(m.models[f][y]={tokens:0,cachedTokens:0,candidateTokens:0});let D=m.models[f][y],T=p[f][y];D.tokens+=T.tokens||0,D.cachedTokens+=T.cachedTokens||0,D.candidateTokens+=T.candidateTokens||0}}}else typeof m[k]=="number"&&(m[k]+=h[k]||0)};d(a,l);for(let m in u)m>=c&&m<o&&d(a,u[m]);return a},Ft=async(s,t={})=>{let o=await V().catch(()=>({})),n=t.apiTier||o.apiTier||"Free",e=t.quotas||t.systemSettings?.quotas||o.quotas||{},i=e.providerBudgets||{},r=!!i.__useProvider,c=t.aiProvider||o.aiProvider||"Google",u=r&&!!i[c],l=()=>{if(u){let a=i[c];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}}return{agentLimit:e.agentLimit||99999999,tokenLimit:e.tokenLimit||99999999999999,monthlyTokenLimit:e.monthlyTokenLimit||99999999999999}};if(s==="agent"){let{agentLimit:a,tokenLimit:d,monthlyTokenLimit:m}=l(),h=await x(),k;e.resetMode==="Custom"?k=await ht(e.resetDay||1):k=await gt();let p=0,f=0,y=0;if(u){p=h.providerRequests?.[c]||0;let D=h.models?.[c]||{};for(let q in D)f+=D[q]?.tokens||0;let T=k.models?.[c]||{};for(let q in T)y+=T[q]?.tokens||0}else p=h.agent||0,f=h.tokens||0,y=k.tokens||0;return n==="Free"&&h.agent+h.background>=999999?{allowed:!1,reason:"Free Tier Daily Usage Limit Exceeded"}:p>=a?{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"}:y>=m?{allowed:!1,reason:u?`Monthly Token Budget Exhausted for ${c}`:"Monthly Token Budget Exhausted"}:{allowed:!0}}if(s==="background"){let a=await x();if(n==="Free"&&a.agent+a.background>=999999)return{allowed:!1,reason:"Free Tier Background Limit Exceeded"};let d=a.background<(e.backgroundLimit||999999);return{allowed:d,reason:d?void 0:"Background Request Limit Exceeded"}}if(s==="search"){let d=(await x()).search<(e.searchLimit||100);return{allowed:d,reason:d?void 0:"Search Quota Exceeded"}}return{allowed:!0}},te=async(s,t={})=>(await Ft(s,t)).allowed,et=s=>{if(!s||s.length===0)return[];let o=[...s].sort((e,i)=>e.timestamp-i.timestamp),n=[];for(let e of o){if(n.length>0){let i=n[n.length-1];if(e.timestamp>=i.start&&e.timestamp<i.end){i.calls.push(e),i.spent+=e.cost;continue}}n.push({start:e.timestamp,end:e.timestamp+36e5,calls:[e],spent:e.cost})}return n},pt=(s,t)=>{if(!s||s.length===0)return .025;let n=et(s);if(n.length===0)return .025;let e=[];for(let d of n){let m=.025;if(e.length>0){let k=e[e.length-1],p=!1;if(e.length>=2){let f=e[e.length-2];k.ratio>=.8&&f.ratio>=.8&&(p=!0)}if(p)m=.015;else{let f=k.limit,y=k.ratio;y>=.8?m=f===.015?.015:f:y<.4?m=Math.min(.025,f+.005):y>=.4&&y<.6?m=Math.min(.025,f+.004):m=Math.min(.025,f+.002)}}let h=m>0?d.spent/m:0;e.push({limit:m,spent:d.spent,ratio:h})}let i=n[n.length-1];if(t<i.end)return e[e.length-1].limit;let r=e[e.length-1].limit,c=r,u=e[e.length-1].ratio,l=i.end,a=0;for(let d=e.length-1;d>=0&&e[d].ratio>=.8;d--)a++;for(;l<=t;){let d=.025;a>=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,a=0,l+=36e5,r=d}return r},ee=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 i=Date.now(),r=et(e.imageCalls),c=0;if(r.length>0){let l=r[r.length-1];i>=l.start&&i<l.end&&(c=l.spent)}let u=pt(e.imageCalls,i);return c+n<=u},se=async()=>{let s=await x();s.imageCalls||(s.imageCalls=[]);let t=Date.now(),o=et(s.imageCalls),n=[],e=0,i=0;if(o.length>0){let l=o[o.length-1];t>=l.start&&t<l.end&&(n=l.calls,e=l.spent,i=Math.max(0,Math.ceil((l.end-t)/(60*1e3))))}let r=pt(s.imageCalls,t),c=Math.max(0,r-e),u=e;return{totalSpent:e,remaining:c,activeCallsCount:n.length,nextResetMin:i,reclaimCost:u,limit:r}},oe=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()},ne=async()=>{let s=new Date().toISOString().split("T")[0];g||(g=await $()),g.date!==s&&await x();let t=g.stats||{...R},o=g.history||{},n=new Set(Object.keys(o));n.add(s);let i=Array.from(n).sort().map(L=>{let C=L===s?t:o[L]||{},w={...R,...C},P=w.tokens||0,H=w.cachedTokens||0,_=w.candidateTokens||0,B=Math.max(0,P-_),N=Math.max(0,B-H),O=w.agent||0,b=w.background||0,A=w.search||0,yt=O+b+A,Q=w.toolSuccess||0,st=w.toolFailure||0,ot=w.toolDenied||0,X=Q+st+ot,kt=X>0?(Q/X*100).toFixed(1):"100.0",nt=w.linesAdded||0,it=w.linesRemoved||0,at=Array.isArray(w.imageCalls)?w.imageCalls:[],wt=at.reduce((Tt,St)=>Tt+(St.cost||0),0);return{date:L,tokens:P,cachedTokens:H,candidateTokens:_,promptTokens:B,uncachedPromptTokens:N,agent:O,background:b,search:A,totalRequests:yt,toolSuccess:Q,toolFailure:st,toolDenied:ot,totalTools:X,toolSuccessRate:parseFloat(kt),linesAdded:nt,linesRemoved:it,netLines:nt-it,duration:w.duration||0,imageCallsCount:at.length,imageCost:wt,models:w.models||{},providerRequests:w.providerRequests||{}}}),r=await V().catch(()=>({})),c=r.quotas||{},u=r.apiTier||"Free",l=await gt().catch(()=>({tokens:0,agent:0})),a=null;c.resetMode==="Custom"&&(a=await ht(c.resetDay||1).catch(()=>({tokens:0})));let d=c.tokenLimit||0,m=c.monthlyTokenLimit||0,h=c.agentLimit||0,k=c.resetMode||"Daily",p=c.resetDay||1,f=c.providerBudgets||{},y=!!f.__useProvider,D=["Google","Anthropic","OpenAI","DeepSeek","Mistral","NVIDIA","OpenRouter","Ollama","InferX","SenseNova","AIHubMix","Poolside"];Object.keys(f).forEach(L=>{L!=="__useProvider"&&!D.includes(L)&&D.push(L)});let T=[];for(let L of D){let C=f[L];if(C&&(C.agentLimit||C.tokenLimit||C.monthlyTokenLimit)){let w=0,P=t.models?.[L]||{};for(let A in P)w+=P[A]?.tokens||0;let H=0,_=(c.resetMode==="Custom"?a?.models:l?.models)?.[L]||{};for(let A in _)H+=_[A]?.tokens||0;let B=t.providerRequests?.[L]||0,N=C.tokenLimit||0,O=C.monthlyTokenLimit||0,b=C.agentLimit||0;T.push({provider:L,dailyTokens:w,dailyTokenLimit:N,isDailyUnlimited:N>=9999999999999||N===0,monthlyTokens:H,monthlyTokenLimit:O,isMonthlyUnlimited:O>=9999999999999||O===0,dailyRequests:B,dailyAgentLimit:b,isRequestsUnlimited:b>=9999999||b===0})}}let q={apiTier:u,resetMode:k,resetDay:p,quotas:c,usingProviderBudgets:y&&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"?a?.tokens:l?.tokens)||0,tokenLimit:m,isUnlimitedTokens:m>=9999999999999||m===0},providerBudgets:f};return{currentDate:s,todayStats:t,history:o,timeline:i,budget:q,runtimeSession:{...I}}};export{Ut as a,Ot as b,bt as c,Xt as d,Yt as e,Vt as f,x as g,gt as h,Kt as i,I as j,Zt as k,ht as l,Ft as m,te as n,et as o,pt as p,ee as q,se as r,oe as s,ne as t};
@@ -1,6 +0,0 @@
1
- import{a as V}from"./chunk-Y5JU726N.js";import{w as j,x as H}from"./chunk-DSVLWYIT.js";import K from"fs/promises";import z from"path";import Z from"fast-glob";import{Minimatch as q}from"minimatch";async function O(a,n,s=a,g=1){if(g>12)return[];let c=[],r;try{r=await K.readdir(a,{withFileTypes:!0})}catch{return[]}for(let t of r){let l=z.join(a,t.name),m=z.relative(s,l),L=m.split(z.sep).map($=>$.toLowerCase()),W=t.name.toLowerCase();if(!n.some($=>{let E=$.toLowerCase();return E.startsWith(".")&&W.endsWith(E)?!0:L.some(v=>v===E||v.startsWith(".pnpm"))}))if(t.isDirectory()){let $=await O(l,n,s,g+1);c=c.concat($)}else t.isFile()&&c.push({fullPath:l,relativePath:m})}return c}function Y(a,n,s=1/0){if(a===n)return 0;if(a.length===0)return n.length;if(n.length===0)return a.length;if(Math.abs(a.length-n.length)>s)return s+1;let g=Array.from({length:n.length+1},(c,r)=>r);for(let c=1;c<=a.length;c++){let r=[c],t=c;for(let l=1;l<=n.length;l++){let m=a[c-1]===n[l-1]?0:1,L=Math.min(r[l-1]+1,g[l]+1,g[l-1]+m);r.push(L),L<t&&(t=L)}if(g=r,t>s)return s+1}return g[n.length]}function tt(a,n){if(!a||!n)return!1;let s=a.toLowerCase(),g=n.toLowerCase();if(s.includes(g))return!0;let c=s.split(/[^a-z0-9]+/).filter(t=>t.length>0),r=g.split(/[^a-z0-9]+/).filter(t=>t.length>1||g.length===1&&t.length>0);return r.length===0?!1:r.every(t=>{let l=t.length<=2?0:t.length<=5?1:2;for(let m of c)if(m.includes(t)||t.length>=3&&m.length>=3&&Math.abs(m.length-t.length)<=l&&Y(t,m,l)<=l)return!0;return!1})}var at=async a=>{let{keyword:n,path:s,fuzzy:g,subString:c,regex:r}=V(a);if(n==null)return'ERROR: Missing "keyword" argument.';let t=String(n);if(s){let e=s.trim().toLowerCase();if(e==="#docs"||e==="#doc"||e==="#documentation"||e.includes("#skill/global/fluxflow")||e.startsWith("#skill"))return"ERROR: Cannot search in reserved VFS '#skill' namespace. Use 'ReadFile' to read specific skills."}let l=e=>e===!0||e==="true"||e===1||e==="1"||e==="yes",m=r===!1||r==="false"||r===0||r==="0"||r==="no",L=r===!0||r==="true"||r===1||r==="1"||r==="yes",W=l(g)||l(c),A=null,$=null;if(m)W||($=new RegExp(`(?<![\\w])${t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}(?![\\w])`,"i"));else{try{A=new RegExp(t,"i")}catch(e){if(L)return`ERROR: Invalid regex pattern "${t}": ${e.message}`}$=new RegExp(`(?<![\\w])${t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}(?![\\w])`,"i")}let E=Array.from(new Set([...j,...H(process.cwd())])),v=150;try{let e=[],x=process.cwd(),h=null;if(s){let o=s.split(";").map(i=>i.trim()).filter(Boolean),y=o.some(i=>i.startsWith("!"));if(o.some(i=>Z.isDynamicPattern(i)||/[*?{}[\]()|+]/.test(i))){h="glob";let i=s.replace(/\\/g,"/"),F=o.map(u=>u.replace(/\\/g,"/")),f=E.map(u=>u.startsWith(".")?`**/*${u}`:`**/${u}/**`);if(y&&!o.some(u=>!u.startsWith("!"))){let u=await O(x,E,x),w=d=>d.endsWith("/")?d+"**":d,p=F.filter(d=>d.startsWith("!")).map(d=>w(d.slice(1))),M=F.filter(d=>!d.startsWith("!")).map(w);e=u.filter(d=>{let R=d.relativePath.replace(/\\/g,"/"),_=M.length===0||M.some(b=>{try{return new q(b).match(R)}catch{return!1}}),k=p.some(b=>{try{return new q(b).match(R)}catch{return!1}});return _&&!k})}else{let u=F.some(p=>/[\(\)\|]|\.\*/.test(p)),w=[];if(!u)try{w=await Z(F,{cwd:x,ignore:f,dot:!0,onlyFiles:!0,absolute:!1})}catch{w=[]}if(w.length===0&&(u||Z.isDynamicPattern(i))){let p=i.match(/^([^\*\?\(\)\|\[\]\s]+)\//),M=p&&!/[\*\?\(\)\|\[\]]/.test(p[1])?z.resolve(x,p[1]):x,d=await O(M,E,x);try{let R=i.replace(/^\.\//,"");R=R.replace(/\.\*\/(\\.|[^\/])/g,".*$1"),!R.startsWith("^")&&!R.startsWith(".*")&&(R=`.*${R}`);let _=new RegExp(R.endsWith("$")?R:`${R}$`,"i");e=d.filter(k=>{let b=k.relativePath.replace(/\\/g,"/");return _.test(b)})}catch{e=[]}}else e=w.map(p=>({fullPath:z.resolve(x,p),relativePath:p}))}}else{let i=[],F=!1,f=!1;for(let S of o){let u=S.replace(/[\/\\]+$/,""),w=z.resolve(x,u);try{let p=await K.stat(w);if(p.isDirectory()){f=!0;let M=await O(w,E,x);i.push(...M)}else if(p.isFile())F=!0,i.push({fullPath:w,relativePath:z.relative(x,w)});else return`ERROR: Path is neither a file nor a directory: ${S}`}catch{return`ERROR: Path not found: ${S}`}}e=i,F&&!f?h="file":h="dir"}}else e=await O(x,E);let J=e.map(async o=>{try{let y=await K.readFile(o.fullPath,"utf-8");if(y.includes("\0"))return[];let P=y.split(/\r?\n/),i=[];for(let f=0;f<P.length;f++)(W?P[f].toLowerCase().includes(t.toLowerCase())||tt(P[f],t):m?$&&$.test(P[f]):A&&A.test(P[f])||$&&$.test(P[f]))&&i.push({line:f+1,content:P[f].trim()});return i.length===0?null:{path:o.relativePath.replace(/\\/g,"/"),matches:i}}catch{return[]}}),Q=await Promise.all(J),D=[],C=0;for(let o of Q){if(!o||!o.matches)continue;if(C>=v)break;let y=v-C,P=o.matches.slice(0,y);D.push({path:o.path,matches:P}),C+=P.length}typeof global.gc=="function"&&global.gc();let G=W?"(fuzzy mode)":L?"(regex mode)":m?"(keyword mode)":"(standard mode)";if(D.length===0){let o=h==="file"?` in '${s}'`:h==="dir"||h==="glob"?` in '${s}'`:". Try to specify files",y=h==="dir"?"[DIR]":h==="glob"?"[GLOB]":"";return`${y}${y?" ":""}Found 0 matches of '${t}'${o}${G?` ${G}`:""}`}let N=G?` ${G}`:"",T=`${D.length} file${D.length===1?"":"s"}`,U=`${C} match${C===1?"":"es"}`,I;h==="file"?I=`Found ${U} of '${t}' in '${s}'${N}:`:h==="dir"||h==="glob"?I=`Found ${U} of '${t}' in '${s}' across ${T}${N}:`:I=`Found ${U} of '${t}' across ${T}${N}:`;let X=h==="dir"?"[DIR]":h==="glob"?"[GLOB]":"",B=`${X}${X?" ":""}${I}
2
-
3
- `;for(let o of D){B+=`${o.path}
4
- `;for(let y of o.matches)B+=` ${y.line}: ${y.content}
5
- `;B+=`
6
- `}return B.trimEnd()}catch(e){return`ERROR: ${e.message}`}};export{at as search_keyword};