Lines 1-48javascript
2"use strict";var fe=(n,e)=>()=>(e||n((e={exports:{}}).exports,e),e.exports);var Fe=fe((or,pn)=>{"use strict";var qe=require("fs"),fn=require("path"),Fo=require("os"),bt=fn.join(Fo.homedir(),".mxr"),He=fn.join(bt,"config.json"),de=null;function wt(){if(!qe.existsSync(He))return{};try{return JSON.parse(qe.readFileSync(He,"utf-8"))}catch{return{}}}function Ot(n){qe.existsSync(bt)||qe.mkdirSync(bt,{recursive:!0,mode:448});try{qe.chmodSync(bt,448)}catch{}let e=`${He}.${process.pid}.tmp`;qe.writeFileSync(e,JSON.stringify(n,null,2),{encoding:"utf-8",mode:384}),qe.renameSync(e,He);try{qe.chmodSync(He, ...
3`+t.split(`
HighChild Process
Package source references child process execution.
dist/mxr.jsView on unpkg · L1 4`).map(r=>G.bgBlack.white(" "+r)).join(`
6`)}async function kn(n,e,t,r){e.push({role:"user",content:t});let c=Go({text:G.dim(`${n} is thinking\u2026`),color:"cyan"}).start(),d=Date.now();try{let f=await st.chat.send(n,e,r||null);return c.stop(),e.push({role:"assistant",content:f.content}),process.stdout.write(`
7`),console.log(G.cyan("> ")+Yo(f.content)),console.log(G.dim(`
8 ${f.model} ${f.tokens_in+f.tokens_out} tokens `)+G.yellow(`${f.cost} MXR`)+G.dim(` ${f.latency_ms}ms`)),process.stdout.write(`
9`),f}catch(f){return c.stop(),f.message.includes("security_blocked")||f.message.includes("blocked")?(console.log(G.red.bold(`
10 [!] Response blocked by security guardrail`)),console.log(G.dim(` The AI tried to send potentially harmful content.
11`))):f.message.includes("No credits")?console.log(G.red(`
13`)):console.log(G.red(`
15`)),e.pop(),null}}async function zo(n,e,t){Sn.get("token")||(console.log(G.yellow("Not logged in. Run: mxr login")),process.exit(1));let r=e.model||Sn.get("model")||Vo;if(n){await kn(r,[],n,null);return}if(t)return t();console.log(G.cyan.bold(" mxr_")+G.dim(" AI Model Router")),console.log(G.dim(` Model: ${r} Type /help for commands`));let c=!1;(async()=>{try{let b=await st.user.me();console.log(G.dim(` Balance: ${b.credits.toFixed(2)} MXR / ${b.credits_limit} MXR
16`)),c=!0}catch{console.log(""),c=!0}})();let d=null;(async()=>{try{d=(await st.chats.create("CLI \u0447\u0430\u0442","cli")).id}catch{}})();let f=[],y=[];function v(){return new Promise(b=>{let k=Ko.createInterface({input:process.stdin,output:process.stdout,prompt:G.cyan("> ")});k.history=[...y],k.prompt(),k.on("line",L=>{y=[...k.history],k.close(),b(L)})})}for(;;){let b=(await v()).trim();if(b){if((b==="/exit"||b==="/quit"||b==="/q")&&(console.log(G.dim(`
17Bye!`)),process.exit(0)),b==="/clear"){f.length=0,console.log(G.dim(` Context cleared.
18`));continue}if(b==="/help"){console.log(G.dim([""," /clear \u2014 clear conversation context"," /model \u2014 show current model"," /models \u2014 list available models"," /key \u2014 show API key"," /status \u2014 show credits"," /exit \u2014 quit",""].join(`
19`)));continue}if(b==="/model"){console.log(G.dim(` Current model: ${r}
20`));continue}if(b==="/key"){try{let{api_key:k}=await st.user.apiKey();console.log(G.cyan(`
22`))}catch{}continue}if(b==="/status"){try{let k=await st.user.me();console.log(G.dim(`
23 Balance: ${k.credits.toFixed(2)} MXR / ${k.credits_limit} MXR`)),console.log(G.dim(` Plan: ${k.plan}
24`))}catch{}continue}await kn(r,f,b,d)}}}Mn.exports=function(e,t={}){e.command("chat [message]").description("Chat with an AI model (interactive if no message given)").option("-m, --model <id>","Model to use").action((r,c)=>zo(r,c,t.runInteractive))}});var En=fe((cr,Cn)=>{"use strict";var F=require("chalk"),qt=require("ora"),yt=Xe(),rt=Fe();function Jo(n,e,t=20){let r=e>0?Math.max(0,Math.min(1,n/e)):0,c=Math.round(r*t);return(r>.8?F.red:r>.5?F.yellow:F.cyan)("\u2588".repeat(c))+F.dim("\u2591".repeat(t-c))+` ${(r*100).toFixed(0)}%`}function Qo(n){return new Date(n*1e3).toLocaleString()}async fun ...
25`)),console.log(F.bold(" MXR balance")),console.log(` ${Jo(e.credits_limit-e.credits,e.credits_limit)} `+F.cyan(`${e.credits.toFixed(2)} MXR`)+F.dim(` / ${e
26`)),console.log(F.bold(" Today")),console.log(` Requests : ${F.white(t.today.requests)}`),console.log(` Tokens : ${F.white(t.today.tokens.toLocaleString())}`),console.log(` Cost : ${F.yellow("$"
27`),t.models.length){console.log(F.bold(" Top models (today)"));for(let r of t.models.slice(0,5))console.log(` ${F.cyan(r.model.padEnd(24))} ${r.requests} reqs ${F.yellow("$"+r
28`))}catch(e){n.fail(F.red(e.message))}}async function Tn(){if(!rt.get("token")){console.log(F.yellow("Run: mxr login"));return}let n=qt("Loading key\u2026").start();try{let{api_key:e}
29 Use as Bearer token in Authorization header.`)),console.log(F.dim(` Compatible with OpenAI SDK (set base_url=http://localhost:8000)
30`))}catch(e){n.fail(F.red(e.message))}}async function es(){if(!rt.get("token")){console.log(F.yellow("Run: mxr login"));return}let n=qt("Regenerating key\u2026").start();try{let{api_key:e}
31`));let r=e.filter(f=>f.free),c=e.filter(f=>!f.free),d=(f,y)=>{console.log(re.dim(` \u2500\u2500 ${f} \u2500\u2500`));for(let v of y){let b=v.id===t,k=b?re.cyan(" >"):" ",L=b?re.cyan.bold(v.name):re.white(v.name),T=re.dim(v.id.padEnd(22)),z=re.dim(v.provider.padEnd(12)),J=re.yellow(`$${v.cost_per_1k}/1k`);console.log(`${k} ${T} ${z} ${J} ${L}`)}console.log("")};d("Free",r),d("Paid",c),console.log(re.dim(` Active model: ${re.cyan(t)}`)),console.log(re.dim(` Change with: mxr models use <id>
32`))}catch(e){n.fail(re.red(e.message))}}async function ns(n){if(!n){let e=Rn("Loading models\u2026").start(),t;try{({models:t}=await Ut.models.list()),e.stop()}catch(c){e.fail(re.red(c.message));return}let{chosen:r}=await ts.prompt([{type:"list",name:"chosen",message:"Select model:",choices:t.map(c=>({name:`${c.id.padEnd(24)} ${c.provider.padEnd(12)} $${c.cost_per_1k}/1k ${c.free?re.green("free"):re.yellow("paid")}`,value:c.id})),default:Pt.get("model")}]);n=r}if(n)try{let{models:e}=await Ut.models.list();if(!e.some(t=>t.id===n)){console.log(re.red(`Unknown model: ${n}`)),process.exitCode=1;r ...
33`),c=e.split(`
HighSame File Env Network Execution
A single source file combines environment access, network access, and code or shell execution; review context before blocking.
dist/mxr.jsView on unpkg · L28 34`),d=[`--- ${t}`,`+++ ${t}`],f=0;for(;f<r.length&&f<c.length&&r[f]===c[f];)f++;let y=r.length-1,v=c.length-1;for(;y>=f&&v>=
35`)}async function Gt(n,e,t={}){try{let r=await n.api.security.check(e,t);return{safe:!!r.safe,threats:r.threats||[],reason:r.reason||""}}catch(r){return{safe:!1,threats:[`security check unavailable: ${r.message}`],reason:"fail-closed"}}}function Qn
36\u2026[stdout truncated]`:""),stderr:f+(v?`
37\u2026[stderr truncated]`:"")}))};c.on("error",j=>J(null,`spawn-error:${j.message}`)),c.on("close",(j,Q)=>J(j,Q))})}async function $s(n,e,t){e=e||{};let r=t.sandboxRoot;try{switch(n){case"read_file":{let c=ze(r,e.path);if(ae.statSync(c).isDirectory())return{output:`Error: ${e.path} is a directory (use list_dir)`,meta:{kind:"error"}};let f=ae.readFileSync(c);if(Yn(f))return{output:`Error: ${e.path} appears to be binary`,meta:{kind:"error"}};let y=f.slice(0,Ht).toString("utf8"),v=f.length>Ht,b=y.split(`
38`),k=Math.max(1,parseInt(e.start)||1),L=e.end?Math.max(k,parseInt(e.end)):Math.min(b.length,k-1+Xt),T=b.slice(k-1,L),z=!1;T.length>Xt&&(T.length=Xt,z=!0);let J=T.map((Q,ge)=>`${k+ge} ${Q}`).join(`
40\u2026[file truncated at 100KB]`:"")+(z?`
41\u2026[truncated at 2000 lines]`:"");return{output:J+j,meta:{kind:"read",path:Ye(r,c),lines:T.length}}}case"list_dir":{let c=ze(r,e.path||"."),d=ae.readdirSync(c,{withFileTypes:!0});d.sort((b,k)=>k.isDirectory()-b.isDirectory()||b.name.localeCompare(k.name));let y=d.slice(0,Kt).map(b=>b.isDirectory()?"[D] "+b.name+"/":"[F] "+b.name),v=d.length>Kt?`
42\u2026[${d.length-Kt} more]`:"";return{output:`${Ye(r,c)}:
44`)}${v}`,meta:{kind:"list",path:Ye(r,c),count:d.length}}}case"search":{let c=String(e.query||"");if(!c)return{output:"Error: empty query",meta:{kind:"error"}};let d=ze(r,e.path||"."),f=c.toLowerCase(),y=[],v=k=>{if(y.length>=vt)return;let L;try{L=ae.readdirSync(k,{withFileTypes:!0})}catch{return}for(let T of L){if(y.length>=vt)return;if(T.name.startsWith(".")&&T.name!==".env"||bs.has(T.name))continue;let z=ke.join(k,T.name);if(T.isSymbolicLink())continue;if(T.isDirectory()){v(z);continue}let J;try{J=ae.readFileSync(z)}catch{continue}if(J.length>Ht||Yn(J))continue;let j=J.toString("utf8").split ...
45`);for(let Q=0;Q<j.length&&!(j[Q].toLowerCase().includes(f)&&(y.push(`${Ye(r,z)}:${Q+1}: ${j[Q].trim().slice(0,160)}`),y.
46\u2026[capped at 100 matches]`:"";return{output:y.length?y.join(`
47`)+b:`No matches for "${c}"`,meta:{kind:"search",count:y.length}}}case"write_file":{if(typeof e.content!="string")return{output:"Error: content must be a string",meta:{kind:"error"}};if(Buffer.byteLength(e.content)>Vn)return{output:"Error: content exceeds the 1MB write limit",meta:{kind:"error"}};let c=ze(r,e.path),d=
48${b}`;return v.safe||(k=`[!] Security flagged this content: ${v.threats.join("; ")}
Long lines were clipped for display.