nex-code 0.4.26 → 0.4.27

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 (2) hide show
  1. package/dist/nex-code.js +3 -3
  2. package/package.json +1 -1
package/dist/nex-code.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- var Q=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var As=Q((fT,S$)=>{S$.exports={name:"nex-code",version:"0.4.26",description:"Run 400B+ open coding models on your codebase without the hardware bill. Ollama Cloud first \u2014 OpenAI, Anthropic, and Gemini when you need them.",bin:{"nex-code":"./dist/nex-code.js"},files:["dist/","examples/","README.md","LICENSE"],engines:{node:">=18.0.0"},scripts:{start:"node dist/nex-code.js",build:"esbuild bin/nex-code.js --bundle --platform=node --target=node18 --outfile=dist/nex-code.js --minify --external:axios --external:dotenv --external:playwright && rm -rf dist/skills && cp -r cli/skills dist/skills",dev:"esbuild bin/nex-code.js --bundle --platform=node --target=node18 --outfile=dist/nex-code.js --external:axios --external:dotenv --external:playwright --watch",test:"jest --forceExit","test:orchestrator":"jest tests/orchestrator.test.js --forceExit",coverage:"jest --coverage --forceExit","test:watch":"jest --watch",typecheck:"tsc --noEmit",format:"prettier --write .","install-hooks":"ln -sf ../../hooks/pre-push .git/hooks/pre-push && chmod +x .git/hooks/pre-push && ln -sf ../../hooks/post-merge .git/hooks/post-merge && chmod +x .git/hooks/post-merge && echo 'Hooks installed (pre-push, post-merge).'",prepublishOnly:"npm run build && npm test","merge-to-main":"bash scripts/merge-to-main.sh",improve:"node scripts/improve.js","extract-examples":"node scripts/extract-examples.js","benchmark:realworld":"node scripts/benchmark-realworld.js",release:"npm version patch && git push --follow-tags && npm publish"},keywords:["ai","cli","coding","agent","ollama","ollama-cloud","openai","anthropic","claude","gemini","llm","gpt","agentic","terminal","coding-assistant","claude-code-alternative","gemini-cli-alternative","open-source","free","qwen3","devstral","kimi-k2","deepseek","local-llm","mcp","model-context-protocol","multi-provider"],repository:{type:"git",url:"https://github.com/hybridpicker/nex-code.git"},bugs:{url:"https://github.com/hybridpicker/nex-code/issues"},homepage:"https://github.com/hybridpicker/nex-code#readme",license:"MIT",dependencies:{axios:"^1.7.0",dotenv:"^16.4.0"},devDependencies:{esbuild:"^0.27.3",jest:"^29.7.0",prettier:"^3.8.1",typescript:"^5.9.3"},overrides:{"brace-expansion":">=5.0.5",picomatch:">=4.0.4"},jest:{coverageThreshold:{global:{lines:45,functions:30,branches:35},"./cli/sub-agent.js":{lines:70,functions:60,branches:55}}}}});var Yn=Q((pT,Ou)=>{"use strict";var Su="\x1B[0m",Eu="\x1B[1m",Os="\x1B[2m";function Z(t,e,n){return`\x1B[38;2;${t};${e};${n}m`}function E$(){if(!process.stdout.isTTY)return null;try{let{execFileSync:t}=require("child_process"),e=["import sys,os,tty,termios,select","f=open('/dev/tty','r+b',buffering=0)","fd=f.fileno()","s=termios.tcgetattr(fd)","try:"," tty.setraw(fd)"," f.write(bytes([0x1b,0x5d,0x31,0x31,0x3b,0x3f,0x1b,0x5c]))"," r=select.select([fd],[],[],0.1)[0]"," d=b''"," if r:"," while True:"," r2=select.select([fd],[],[],0.05)[0]"," if not r2:break"," c=os.read(fd,1)"," d+=c"," if d[-1:]==bytes([0x07]) or d[-2:]==bytes([0x1b,0x5c]):break"," sys.stdout.buffer.write(d)","finally:"," termios.tcsetattr(fd,termios.TCSADRAIN,s)"," f.close()"].join(`
2
+ var Q=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var As=Q((fT,S$)=>{S$.exports={name:"nex-code",version:"0.4.27",description:"Run 400B+ open coding models on your codebase without the hardware bill. Ollama Cloud first \u2014 OpenAI, Anthropic, and Gemini when you need them.",bin:{"nex-code":"./dist/nex-code.js"},files:["dist/","examples/","README.md","LICENSE"],engines:{node:">=18.0.0"},scripts:{start:"node dist/nex-code.js",build:"esbuild bin/nex-code.js --bundle --platform=node --target=node18 --outfile=dist/nex-code.js --minify --external:axios --external:dotenv --external:playwright && rm -rf dist/skills && cp -r cli/skills dist/skills",dev:"esbuild bin/nex-code.js --bundle --platform=node --target=node18 --outfile=dist/nex-code.js --external:axios --external:dotenv --external:playwright --watch",test:"jest --forceExit","test:orchestrator":"jest tests/orchestrator.test.js --forceExit",coverage:"jest --coverage --forceExit","test:watch":"jest --watch",typecheck:"tsc --noEmit",format:"prettier --write .","install-hooks":"ln -sf ../../hooks/pre-push .git/hooks/pre-push && chmod +x .git/hooks/pre-push && ln -sf ../../hooks/post-merge .git/hooks/post-merge && chmod +x .git/hooks/post-merge && echo 'Hooks installed (pre-push, post-merge).'",prepublishOnly:"npm run build && npm test","merge-to-main":"bash scripts/merge-to-main.sh",improve:"node scripts/improve.js","extract-examples":"node scripts/extract-examples.js","benchmark:realworld":"node scripts/benchmark-realworld.js",release:"npm version patch && git push --follow-tags && npm publish"},keywords:["ai","cli","coding","agent","ollama","ollama-cloud","openai","anthropic","claude","gemini","llm","gpt","agentic","terminal","coding-assistant","claude-code-alternative","gemini-cli-alternative","open-source","free","qwen3","devstral","kimi-k2","deepseek","local-llm","mcp","model-context-protocol","multi-provider"],repository:{type:"git",url:"https://github.com/hybridpicker/nex-code.git"},bugs:{url:"https://github.com/hybridpicker/nex-code/issues"},homepage:"https://github.com/hybridpicker/nex-code#readme",license:"MIT",dependencies:{axios:"^1.7.0",dotenv:"^16.4.0"},devDependencies:{esbuild:"^0.27.3",jest:"^29.7.0",prettier:"^3.8.1",typescript:"^5.9.3"},overrides:{"brace-expansion":">=5.0.5",picomatch:">=4.0.4"},jest:{coverageThreshold:{global:{lines:45,functions:30,branches:35},"./cli/sub-agent.js":{lines:70,functions:60,branches:55}}}}});var Yn=Q((pT,Ou)=>{"use strict";var Su="\x1B[0m",Eu="\x1B[1m",Os="\x1B[2m";function Z(t,e,n){return`\x1B[38;2;${t};${e};${n}m`}function E$(){if(!process.stdout.isTTY)return null;try{let{execFileSync:t}=require("child_process"),e=["import sys,os,tty,termios,select","f=open('/dev/tty','r+b',buffering=0)","fd=f.fileno()","s=termios.tcgetattr(fd)","try:"," tty.setraw(fd)"," f.write(bytes([0x1b,0x5d,0x31,0x31,0x3b,0x3f,0x1b,0x5c]))"," r=select.select([fd],[],[],0.1)[0]"," d=b''"," if r:"," while True:"," r2=select.select([fd],[],[],0.05)[0]"," if not r2:break"," c=os.read(fd,1)"," d+=c"," if d[-1:]==bytes([0x07]) or d[-2:]==bytes([0x1b,0x5c]):break"," sys.stdout.buffer.write(d)","finally:"," termios.tcsetattr(fd,termios.TCSADRAIN,s)"," f.close()"].join(`
3
3
  `),s=t("python3",["-c",e],{encoding:"buffer",timeout:400,stdio:["ignore","pipe","ignore"]}).toString("utf8").match(/rgb:([0-9a-fA-F]+)\/([0-9a-fA-F]+)\/([0-9a-fA-F]+)/);if(s){let r=parseInt(s[1].slice(0,2),16),i=parseInt(s[2].slice(0,2),16),c=parseInt(s[3].slice(0,2),16);return .299*r+.587*i+.114*c<128}}catch{}return null}function Tu(){let t=require("os");return require("path").join(t.homedir(),".nex-code",".theme_cache.json")}function T$(t){try{let n=require("fs").readFileSync(Tu(),"utf8"),o=JSON.parse(n);if(o&&typeof o[t]=="boolean")return o[t]}catch{}return null}function R$(t,e){try{let n=require("fs"),o=require("path"),s=Tu(),r=o.dirname(s),i={};try{i=JSON.parse(n.readFileSync(s,"utf8"))}catch{}i[t]=e;let c=Object.keys(i);c.length>50&&c.slice(0,c.length-50).forEach(l=>delete i[l]),n.existsSync(r)||n.mkdirSync(r,{recursive:!0}),n.writeFileSync(s,JSON.stringify(i),"utf8")}catch{}}function C$(){let t=(process.env.NEX_THEME||"").toLowerCase();if(t==="light")return!1;if(t==="dark")return!0;let e=process.env.COLORFGBG;if(e){let i=e.split(";"),c=parseInt(i[i.length-1],10);if(!isNaN(c))return c<8}let n=process.env.TERM_SESSION_ID||"default",o=T$(n);if(o!==null)return o;let s=E$(),r=s!==null?s:!0;return R$(n,r),r}var Ru=C$(),Cu={reset:Su,bold:Eu,dim:Os,primary:Z(80,190,255),secondary:Z(60,170,190),success:Z(80,210,120),warning:Z(245,175,50),error:Z(230,80,80),muted:Os,subtle:Z(130,130,145),tool_read:Z(80,190,255),tool_write:Z(245,165,55),tool_exec:Z(185,100,235),tool_search:Z(70,185,190),tool_git:Z(90,210,100),tool_web:Z(100,215,250),tool_sysadmin:Z(225,150,75),tool_default:Z(100,205,115),syn_keyword:Z(185,100,235),syn_string:Z(90,210,120),syn_number:Z(245,175,50),syn_comment:Os,syn_key:Z(80,190,255),diff_add:Z(80,210,120),diff_rem:Z(230,80,80),banner_logo:Z(80,200,255),banner_name:Z(80,200,255),banner_version:Os,banner_model:Os,banner_yolo:Z(245,175,50),footer_sep:Os,footer_model:Z(80,175,235),footer_branch:Z(80,210,100),footer_project:Z(130,130,145),footer_divider:Z(80,80,95),footer_mode:Z(210,150,50),white:"\x1B[37m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",cyan:"\x1B[36m",gray:"\x1B[90m",bgRed:"\x1B[41m",bgGreen:"\x1B[42m",diff_add_bg:"\x1B[48;2;10;46;20m",diff_rem_bg:"\x1B[48;2;58;16;16m",brightCyan:"\x1B[96m",brightMagenta:"\x1B[95m",brightBlue:"\x1B[94m"},Au={reset:Su,bold:Eu,dim:Z(110,110,120),primary:Z(0,110,190),secondary:Z(0,125,148),success:Z(0,148,62),warning:Z(168,92,0),error:Z(188,32,32),muted:Z(110,110,120),subtle:Z(155,155,165),tool_read:Z(0,110,190),tool_write:Z(168,92,0),tool_exec:Z(128,42,188),tool_search:Z(0,122,148),tool_git:Z(0,138,62),tool_web:Z(0,112,178),tool_sysadmin:Z(168,82,0),tool_default:Z(0,138,62),syn_keyword:Z(128,42,188),syn_string:Z(0,138,62),syn_number:Z(168,92,0),syn_comment:Z(135,135,148),syn_key:Z(0,110,190),diff_add:Z(0,148,62),diff_rem:Z(188,32,32),banner_logo:Z(0,122,205),banner_name:Z(0,122,205),banner_version:Z(100,100,118),banner_model:Z(100,100,118),banner_yolo:Z(168,62,0),footer_sep:Z(168,168,178),footer_model:Z(0,102,175),footer_branch:Z(0,138,62),footer_project:Z(135,135,148),footer_divider:Z(168,168,178),footer_mode:Z(148,88,0),white:Z(40,40,52),red:Z(188,32,32),green:Z(0,148,62),yellow:Z(168,92,0),blue:Z(0,110,190),magenta:Z(128,42,188),cyan:Z(0,125,148),gray:Z(132,132,142),bgRed:"\x1B[41m",bgGreen:"\x1B[42m",diff_add_bg:"\x1B[48;2;215;245;220m",diff_rem_bg:"\x1B[48;2;255;215;215m",brightCyan:Z(0,158,182),brightMagenta:Z(158,52,208),brightBlue:Z(0,112,208)},A$=Ru?Cu:Au;Ou.exports={T:A$,isDark:Ru,DARK:Cu,LIGHT:Au}});var Ms=Q((mT,Mu)=>{var{T:ne}=Yn(),Pr=5,Ns=(()=>{let t=[];for(let e=0;e<Pr;e++)t.push(e);for(let e=Pr-2;e>=1;e--)t.push(e);return t})(),Nu=["\u273D","\u2726","\u2727","\u2726"],Ra=class{constructor(e="Thinking..."){this.text=e,this.frame=0,this.interval=null,this.startTime=null}_render(){if(this._stopped)return;let e=Ns[this.frame%Ns.length],n="";for(let s=0;s<Pr;s++)n+=s===e?`${ne.cyan}\u25CF${ne.reset}`:" ";let o="";if(this.startTime){let s=Math.floor((Date.now()-this.startTime)/1e3);if(s>=60){let r=Math.floor(s/60),i=s%60;o=` ${ne.dim}${r}m ${String(i).padStart(2,"0")}s${ne.reset}`}else s>=1&&(o=` ${ne.dim}${s}s${ne.reset}`)}process.stderr.write(`\x1B[2K\r${n} ${ne.dim}${this.text}${ne.reset}${o}`),this.frame++}start(){this._stopped=!1,this.startTime=Date.now(),process.stderr.isTTY&&(process.stderr.write("\x1B[?25l"),this._render(),this.interval=setInterval(()=>this._render(),100))}update(e){this.text=e}stop(){this._stopped=!0,this.interval&&(clearInterval(this.interval),this.interval=null),process.stderr.isTTY&&process.stderr.write("\x1B[2K\r\x1B[?25h"),this.startTime=null}},Ca=class{constructor(e){this.labels=e,this.statuses=e.map(()=>"running"),this.frame=0,this.interval=null,this.startTime=null,this.lineCount=e.length}_formatElapsed(){if(!this.startTime)return"";let e=Math.floor((Date.now()-this.startTime)/1e3);if(e<1)return"";let n=Math.floor(e/60),o=e%60;return n>0?`${n}m ${String(o).padStart(2,"0")}s`:`${o}s`}_render(){if(this._stopped)return;let e=Ns[this.frame%Ns.length],n=`${ne.cyan}\u25CF${ne.reset}`,o=this._formatElapsed(),s=o?` ${ne.dim}${o}${ne.reset}`:"",r=process.stderr.columns||80,i="";for(let c=0;c<this.labels.length;c++){let l,u;switch(this.statuses[c]){case"done":l=`${ne.green}\u2713${ne.reset}`,u=ne.dim;break;case"error":l=`${ne.red}\u2717${ne.reset}`,u=ne.dim;break;case"retry":l=`${ne.yellow}\u21BB${ne.reset}`,u=ne.yellow;break;default:l=c===e?n:" ",u=""}let d=c===this.labels.length-1?s:"",f=r-4-(d?o.length+1:0),p=this.labels[c].length>f?this.labels[c].substring(0,Math.max(10,f-3))+"...":this.labels[c];i+=`\x1B[2K ${l} ${u}${p}${ne.reset}${d}
4
4
  `}this.lineCount>0&&(i+=`\x1B[${this.lineCount}A`),process.stderr.write(i),this.frame++}start(){this._stopped=!1,this.startTime=Date.now();let e="\x1B[?25l";for(let n=0;n<this.lineCount;n++)e+=`
5
5
  `;this.lineCount>0&&(e+=`\x1B[${this.lineCount}A`),process.stderr.write(e),this._render(),this.interval=setInterval(()=>this._render(),100)}update(e,n){e>=0&&e<this.statuses.length&&(this.statuses[e]=n)}stop(e={}){if(this._stopped=!0,this.interval&&(clearInterval(this.interval),this.interval=null),!e.silent)this._renderFinal();else{let n="";for(let o=0;o<this.lineCount;o++)n+=`\x1B[2K
@@ -1164,7 +1164,7 @@ ${Ne.instructions}`).join(`
1164
1164
  `+Ae+`
1165
1165
  `}let g=[{role:"system",content:p},...H],y=new oo("Thinking...");y.start();let w=H.length===1,v=w?Xk().catch(()=>null):Promise.resolve(null),M=w?Kv(typeof t=="string"?t:"").catch(()=>null):Promise.resolve(null),C=pt(),[{messages:S,compressed:O,compacted:D,tokensRemoved:K},V,X]=await Promise.all([Mv(g,C),v,M]),B=Zt(g,C);if(y.stop(),V&&console.log(`${$.dim}${V}${$.reset}`),D)console.log(`${$.dim} [context compacted \u2014 summary (~${K} tokens freed)]${$.reset}`);else if(O){let Ae=B.limit>0?Math.round(K/B.limit*100):0;W(`${$.dim} [context compressed \u2014 ~${K} tokens freed (${Ae}%)]${$.reset}`)}B.percentage>85&&W(`${$.yellow} \u26A0 Context ${Math.round(B.percentage)}% used (${Math.round(100-B.percentage)}% remaining) \u2014 consider /clear or /save + start fresh${$.reset}`);let R=S;if(X&&w&&(R=[R[0],{role:"user",content:`[Server probe at task start]
1166
1166
  ${X}`},{role:"assistant",content:"Understood \u2014 I have the server context. Proceeding with the task."},...R.slice(1)]),w){let Ae=Gv(typeof t=="string"?t:"");Ae&&(R=[R[0],{role:"user",content:Ae.user},{role:"assistant",content:Ae.assistant},...R.slice(1)])}if(Zt(R,pt()).percentage>=65){let{messages:Ne,tokensRemoved:qe}=un(R,pt());qe>0&&(R=Ne,console.log(`${$.dim} [pre-flight compress \u2014 ${qe} tokens freed, now ${Math.round(Zt(R,pt()).percentage)}% used]${$.reset}`))}let ye=0,be=0,fe=0,pe=0,xe=0,me=9,he=0,Re=(()=>{let Ae=H.find(Ne=>Ne.role==="user");return typeof Ae?.content=="string"?Ae.content:""})(),k=/set_reminder|google.?auth|cron:|api\.log|jarvis.{0,30}(fehler|error|fail|broken|crash|nicht.{0,10}(funktioniert|läuft)|debug)|(?:fehler|error|crash|broken|gecrasht|abgestürzt).{0,30}jarvis|swarm.{0,30}(agent|crash|gecrasht|abgestürzt|fail)|agent.{0,30}(gecrasht|abgestürzt|crashed|fail)|server.{0,30}(passiert|fehler|crash|problem)|am.server/i.test(Re),j=0;if(!ot){let Ae=H.filter(qe=>qe.role==="user"||qe.role==="tool").map(qe=>typeof qe.content=="string"?qe.content:"").join(`
1167
- `),Ne=dl(Ae);Ne&&(ot=!0,kt=Ne.slice(0,120),W(`${$.yellow} \u26A1 Root cause in briefing: ${kt} \u2014 fix phase active from start (read budget: 3)${$.reset}`))}!ot&&!Bt&&/\b(create|build|generate|implement|write|make|develop|set\s*up|scaffold|add)\b.{0,80}\b(app|component|page|game|api|backend|frontend|server|service|module|class|function|feature|project|system|bot|script|tool)\b/i.test(Re)&&(Bt=!0,W(`${$.cyan} \u26A1 Creation task detected \u2014 tight investigation cap (4 pre-edit, 2 post-edit)${$.reset}`)),H.length<=1&&(Te=Uv(),Te&&(ao=Fv(Re)?.id||"coding",Xe="plan",kn=pl("plan",ao),sa=0,dr=0,qn=0,process.stdout.isTTY&&console.log(`${$.dim} \u21B3 Phase routing: plan(${kn||"default"}) \u2192 implement \u2192 verify${$.reset}`),W(`${$.cyan} \u26A1 Phase routing enabled \u2014 plan phase with ${kn||"default model"} (category: ${ao})${$.reset}`)));let x=0,E=new Map,A=new Set,T=new Set,L=Date.now(),ie=new Cv(gk),se=Cl,ge=3,Ce=5,tt=El,nt=5,Tn=8,wa=Tl,ba=Te?6:4,i$=Te?10:7,du=pr,a$=Te?5:3,fu=Te?8:5,c$=Rl,l$=Te?4:3,u$=Te?6:4,d$=3,f$=4,Er=xs,p$=Te?3:2,m$=Te?5:3,ho=Te?6:4,h$=25,Hn=0,g$=6,$$=10,Kn=0,pu=5,Gn=0,y$=2,w$=3,_a=0,go=10,b$=16,mu=o.investigationCap,Ve,sn=Te?hs(Xe):hl,xa=0,hu=3,va=!1;e:for(;;){for(va=!1,Ve=0;Ve<sn&&!Hi()?.aborted;Ve++){{let _=pt(),b=Zt(R,_),re=x===0?65:78;if(b.percentage>=re){let{messages:I,tokensRemoved:F}=un(R,_,x===0);if(F>0&&(R=I,F>50&&console.log(`${$.dim} [auto-compressed \u2014 ~${F} tokens freed, now ${Math.round(Zt(R,_).percentage)}%]${$.reset}`),Bt&&A.size>=3)){let ce=[...A].map(we=>we.split("/").pop()).slice(0,10).join(", "),G={role:"user",content:`[FRAMEWORK \u2014 context compressed] Task is IN PROGRESS. Already created ${A.size} files: ${ce}. DO NOT restart or re-investigate what was already done. Continue from where you left off.`};R.push(G)}}}if(Nt&&!ot&&lr<2){lr++;let _={role:"user",content:"[SYSTEM] SSH paused \u2014 you have made many consecutive SSH calls. Synthesize your findings so far: summarize what you learned and what the likely issue is. After your synthesis, SSH will be available again for targeted follow-up commands."};R.push(_),H.push(_),W(`${$.yellow} \u26A0 Pre-call SSH-blocked nudge #${lr} injected \u2014 model told to synthesize${$.reset}`)}Nt||(lr=0);let Ne=!0;x>0&&nk();let qe=null;if(u&&u.isActive())u._paused&&u.resume();else if(!u){let _,b=sk();if(b&&b.total>1){let re=b.description.length>40?b.description.slice(0,37)+"\u2026":b.description;_=`Plan step ${b.current}/${b.total}: ${re}`}else _=x>0?`Thinking... (step ${x+1})`:"Thinking...";qe=new oo(_),qe.start()}let Es=!0,It="",Ts=!1,ct=new ok,on,ka=Date.now(),Tr=!1,Sa=new AbortController,gu=setInterval(()=>{let _=Date.now()-ka;if(_>=ll)ct._clearCursorLine(),W(`${$.yellow} \u26A0 Stream stale for ${Math.round(_/1e3)}s \u2014 aborting and retrying${$.reset}`),Sa.abort();else if(_>=Sh&&!Tr){Tr=!0,ct._clearCursorLine();let b=ea.fast?.[ro()],re=fe>0?` (retry ${fe+1}/${Bi})`:"",I=Math.round((ll-_)/1e3);W(`${$.yellow} \u26A0 No tokens received for ${Math.round(_/1e3)}s \u2014 waiting...${re}${$.reset}`),b&&b!==fn()?console.log(`${$.dim} \u{1F4A1} Will auto-switch to ${b} in ~${I}s if no tokens arrive${$.reset}`):console.log(`${$.dim} \u{1F4A1} Ctrl+C to abort \xB7 auto-abort in ~${I}s${$.reset}`)}},5e3),jt="",mn=null;try{let _=Ph(pt()),b=new Set(["read_file","list_directory","search_files","glob","grep","git_status","git_diff","git_log","git_show","ssh_exec"]),re=new Set(["read_file","list_directory","glob","grep","bash","git_status","git_diff","git_log","ssh_exec"]),I;fr()?I=_.filter(G=>Nh.has(G.function.name)):Te&&Xe==="plan"?I=_.filter(G=>b.has(G.function.name)):Te&&Xe==="verify"?I=_.filter(G=>re.has(G.function.name)):I=_;let F=Hi(),ce=new AbortController;F&&F.addEventListener("abort",()=>ce.abort(),{once:!0}),Sa.signal.addEventListener("abort",()=>ce.abort(),{once:!0}),on=await gh(R,I,{signal:ce.signal,...kn?{model:kn}:{},onThinkingToken:()=>{ka=Date.now(),Tr=!1,pn?.onThinkingToken&&pn.onThinkingToken()},onToken:G=>{if(ka=Date.now(),Tr=!1,pn?.onToken){pn.onToken(G),It+=G;return}if(It+=G,!Ts&&It.length>400&&It.length%250<G.length+1){let we=ml(It,3);we.truncated&&(Ts=!0,ct._clearCursorLine?.(),W(`${$.yellow} \u26A0 LLM stream loop detected (${we.repeatCount}\xD7 repeated) \u2014 suppressing display${$.reset}`))}Ts||(jt+=G,process.stdout.isTTY?mn||(mn=setTimeout(()=>{jt&&ct&&ct.push(jt),jt="",mn=null},50)):(ct.push(jt),jt=""),Es&&(u&&!u._paused?u.pause():qe&&qe.stop(),Ne||(Ne=!0),ct.startCursor(),Es=!1))}})}catch(_){if(clearInterval(gu),mn&&(clearTimeout(mn),mn=null),jt&&ct&&(ct.push(jt),jt=""),u&&!u._paused&&u.pause(),qe&&qe.stop(),ct.stopCursor(),Sa.signal.aborted&&!Hi()?.aborted){if(fe++,fe>Bi){if(pe<1){pe++,so("Stale retries exhausted \u2014 last-resort force-compress...",$.yellow);let we=pt(),{messages:U,tokensRemoved:Y}=un(R,we);R=U,Y>50&&W(`${$.dim} [force-compressed \u2014 ~${Y} tokens freed]${$.reset}`),fe=0,Ve--;continue}u&&(u.stop(),u=null);let G=await Vk();if(G.action==="quit"){l(null),Qe(x,E,A,T,L),Ze(H);break}G.action==="switch"&&(vh(`${G.provider}:${G.model}`),console.log(`${$.green} \u2713 Switched to ${G.provider}:${G.model}${$.reset}`)),fe=0,Ve--;continue}let F=fe===1?3e3:5e3;if(fe>=1&&he<1){he++,so(`Stale retry ${fe}/${Bi} \u2014 force-compressing before retry...`,$.yellow);let G=pt(),{messages:we,tokensRemoved:U}=un(R,G,!0);if(R=we,U>0&&U>50&&W(`${$.dim} [force-compressed \u2014 ~${U} tokens freed]${$.reset}`),Mk){let Y=ea.fast?.[ro()];Y&&Y!==fn()&&(vh(`${ro()}:${Y}`),console.log(`${$.cyan} \u26A1 Auto-switched to ${Y} to avoid further stale timeouts${$.reset}`),console.log(`${$.dim} (disable with NEX_STALE_AUTO_SWITCH=0)${$.reset}`))}}else W(`${$.yellow} \u26A0 Stale retry ${fe}/${Bi} \u2014 retrying in ${F/1e3}s...${$.reset}`);let ce=new oo(`Waiting ${F/1e3}s before retry...`);ce.start(),await new Promise(G=>setTimeout(G,F)),ce.stop(),Ve--;continue}if(_.name==="AbortError"||_.name==="CanceledError"||_.message?.includes("canceled")||_.message?.includes("aborted")){u&&(u.stop(),u=null),l(null),Qe(x,E,A,T,L),Ze(H);break}let b=_.message;if(_.code==="ECONNREFUSED"||_.message.includes("ECONNREFUSED"))b="Connection refused \u2014 please check your internet connection or API endpoint";else if(_.code==="ENOTFOUND"||_.message.includes("ENOTFOUND"))b="Network error \u2014 could not reach the API server. Please check your connection";else if(_.code==="ETIMEDOUT"||_.message.includes("timeout"))b="Request timed out \u2014 the API server took too long to respond. Please try again";else if(_.message.includes("401")||_.message.includes("Unauthorized"))b="Authentication failed \u2014 please check your API key in the .env file";else if(_.message.includes("403")||_.message.includes("Forbidden"))b="Access denied \u2014 your API key may not have permission for this model";else if(_.message.includes("404")){b=`Model not found (404): ${fn?fn():"unknown"} \u2014 check your .env MODEL setting or run /models to list available models`,console.log(`${$.red} \u2717 ${b}${$.reset}`),u&&(u.stop(),u=null),l(null),Qe(x,E,A,T,L),Ze(H);break}else if(_.message.includes("400")){if(pe<3&&xe<me){pe++,xe++;let F=x===0&&pe===1,ce=F||pe===3||he>0;if(F){pe=3;let Y=_.message.replace(/^API Error(\s*\[HTTP \d+\])?:\s*/i,"").slice(0,150);so(`Bad request (400) \u2014 ${Y||"system prompt too large"}, compressing...`,$.yellow)}else so(ce?`Bad request (400) \u2014 nuclear compression (attempt ${pe}/3, dropping history)...`:`Bad request (400) \u2014 force-compressing and retrying... (attempt ${pe}/3)`,$.yellow);let G=pt(),{messages:we,tokensRemoved:U}=un(R,G,ce);R=we,U>50&&W(`${$.dim} [force-compressed \u2014 ~${U} tokens freed]${$.reset}`),Ve--;continue}{let F=R.find(z=>z.role==="system"),ce=R.find(z=>z.role==="user"&&!String(z.content).startsWith("[SYSTEM")&&!String(z.content).startsWith("BLOCKED:")),G=[F,ce].filter(Boolean),{getUsage:we}=Rt(),U=Rt().estimateMessagesTokens(G),Y=Rt().estimateMessagesTokens(R);if(U<Y){let z=[],ee=H.filter(ae=>ae.role==="assistant"&&typeof ae.content=="string"&&ae.content.trim().length>30).slice(-5).map(ae=>ae.content.trim().slice(0,300).replace(/\n+/g," "));ee.length>0&&z.push(`Key findings:
1167
+ `),Ne=dl(Ae);Ne&&(ot=!0,kt=Ne.slice(0,120),W(`${$.yellow} \u26A1 Root cause in briefing: ${kt} \u2014 fix phase active from start (read budget: 3)${$.reset}`))}!ot&&!Bt&&/\b(create|build|generate|implement|write|make|develop|set\s*up|scaffold|add)\b.{0,80}\b(app|component|page|game|api|backend|frontend|server|service|module|class|function|feature|project|system|bot|script|tool)\b/i.test(Re)&&(Bt=!0,W(`${$.cyan} \u26A1 Creation task detected \u2014 tight investigation cap (4 pre-edit, 2 post-edit)${$.reset}`)),H.length<=1&&!n.skipPhaseRouting&&(Te=Uv(),Te&&(ao=Fv(Re)?.id||"coding",Xe="plan",kn=pl("plan",ao),sa=0,dr=0,qn=0,process.stdout.isTTY&&console.log(`${$.dim} \u21B3 Phase routing: plan(${kn||"default"}) \u2192 implement \u2192 verify${$.reset}`),W(`${$.cyan} \u26A1 Phase routing enabled \u2014 plan phase with ${kn||"default model"} (category: ${ao})${$.reset}`)));let x=0,E=new Map,A=new Set,T=new Set,L=Date.now(),ie=new Cv(gk),se=Cl,ge=3,Ce=5,tt=El,nt=5,Tn=8,wa=Tl,ba=Te?6:4,i$=Te?10:7,du=pr,a$=Te?5:3,fu=Te?8:5,c$=Rl,l$=Te?4:3,u$=Te?6:4,d$=3,f$=4,Er=xs,p$=Te?3:2,m$=Te?5:3,ho=Te?6:4,h$=25,Hn=0,g$=6,$$=10,Kn=0,pu=5,Gn=0,y$=2,w$=3,_a=0,go=10,b$=16,mu=o.investigationCap,Ve,sn=n.maxIterations||(Te?hs(Xe):hl),xa=0,hu=3,va=!1;e:for(;;){for(va=!1,Ve=0;Ve<sn&&!Hi()?.aborted;Ve++){{let _=pt(),b=Zt(R,_),re=x===0?65:78;if(b.percentage>=re){let{messages:I,tokensRemoved:F}=un(R,_,x===0);if(F>0&&(R=I,F>50&&console.log(`${$.dim} [auto-compressed \u2014 ~${F} tokens freed, now ${Math.round(Zt(R,_).percentage)}%]${$.reset}`),Bt&&A.size>=3)){let ce=[...A].map(we=>we.split("/").pop()).slice(0,10).join(", "),G={role:"user",content:`[FRAMEWORK \u2014 context compressed] Task is IN PROGRESS. Already created ${A.size} files: ${ce}. DO NOT restart or re-investigate what was already done. Continue from where you left off.`};R.push(G)}}}if(Nt&&!ot&&lr<2){lr++;let _={role:"user",content:"[SYSTEM] SSH paused \u2014 you have made many consecutive SSH calls. Synthesize your findings so far: summarize what you learned and what the likely issue is. After your synthesis, SSH will be available again for targeted follow-up commands."};R.push(_),H.push(_),W(`${$.yellow} \u26A0 Pre-call SSH-blocked nudge #${lr} injected \u2014 model told to synthesize${$.reset}`)}Nt||(lr=0);let Ne=!0;x>0&&nk();let qe=null;if(u&&u.isActive())u._paused&&u.resume();else if(!u){let _,b=sk();if(b&&b.total>1){let re=b.description.length>40?b.description.slice(0,37)+"\u2026":b.description;_=`Plan step ${b.current}/${b.total}: ${re}`}else _=x>0?`Thinking... (step ${x+1})`:"Thinking...";qe=new oo(_),qe.start()}let Es=!0,It="",Ts=!1,ct=new ok,on,ka=Date.now(),Tr=!1,Sa=new AbortController,gu=setInterval(()=>{let _=Date.now()-ka;if(_>=ll)ct._clearCursorLine(),W(`${$.yellow} \u26A0 Stream stale for ${Math.round(_/1e3)}s \u2014 aborting and retrying${$.reset}`),Sa.abort();else if(_>=Sh&&!Tr){Tr=!0,ct._clearCursorLine();let b=ea.fast?.[ro()],re=fe>0?` (retry ${fe+1}/${Bi})`:"",I=Math.round((ll-_)/1e3);W(`${$.yellow} \u26A0 No tokens received for ${Math.round(_/1e3)}s \u2014 waiting...${re}${$.reset}`),b&&b!==fn()?console.log(`${$.dim} \u{1F4A1} Will auto-switch to ${b} in ~${I}s if no tokens arrive${$.reset}`):console.log(`${$.dim} \u{1F4A1} Ctrl+C to abort \xB7 auto-abort in ~${I}s${$.reset}`)}},5e3),jt="",mn=null;try{let _=Ph(pt()),b=new Set(["read_file","list_directory","search_files","glob","grep","git_status","git_diff","git_log","git_show","ssh_exec"]),re=new Set(["read_file","list_directory","glob","grep","bash","git_status","git_diff","git_log","ssh_exec"]),I;fr()?I=_.filter(G=>Nh.has(G.function.name)):Te&&Xe==="plan"?I=_.filter(G=>b.has(G.function.name)):Te&&Xe==="verify"?I=_.filter(G=>re.has(G.function.name)):I=_;let F=Hi(),ce=new AbortController;F&&F.addEventListener("abort",()=>ce.abort(),{once:!0}),Sa.signal.addEventListener("abort",()=>ce.abort(),{once:!0}),on=await gh(R,I,{signal:ce.signal,...kn?{model:kn}:{},onThinkingToken:()=>{ka=Date.now(),Tr=!1,pn?.onThinkingToken&&pn.onThinkingToken()},onToken:G=>{if(ka=Date.now(),Tr=!1,pn?.onToken){pn.onToken(G),It+=G;return}if(It+=G,!Ts&&It.length>400&&It.length%250<G.length+1){let we=ml(It,3);we.truncated&&(Ts=!0,ct._clearCursorLine?.(),W(`${$.yellow} \u26A0 LLM stream loop detected (${we.repeatCount}\xD7 repeated) \u2014 suppressing display${$.reset}`))}Ts||(jt+=G,process.stdout.isTTY?mn||(mn=setTimeout(()=>{jt&&ct&&ct.push(jt),jt="",mn=null},50)):(ct.push(jt),jt=""),Es&&(u&&!u._paused?u.pause():qe&&qe.stop(),Ne||(Ne=!0),ct.startCursor(),Es=!1))}})}catch(_){if(clearInterval(gu),mn&&(clearTimeout(mn),mn=null),jt&&ct&&(ct.push(jt),jt=""),u&&!u._paused&&u.pause(),qe&&qe.stop(),ct.stopCursor(),Sa.signal.aborted&&!Hi()?.aborted){if(fe++,fe>Bi){if(pe<1){pe++,so("Stale retries exhausted \u2014 last-resort force-compress...",$.yellow);let we=pt(),{messages:U,tokensRemoved:Y}=un(R,we);R=U,Y>50&&W(`${$.dim} [force-compressed \u2014 ~${Y} tokens freed]${$.reset}`),fe=0,Ve--;continue}u&&(u.stop(),u=null);let G=await Vk();if(G.action==="quit"){l(null),Qe(x,E,A,T,L),Ze(H);break}G.action==="switch"&&(vh(`${G.provider}:${G.model}`),console.log(`${$.green} \u2713 Switched to ${G.provider}:${G.model}${$.reset}`)),fe=0,Ve--;continue}let F=fe===1?3e3:5e3;if(fe>=1&&he<1){he++,so(`Stale retry ${fe}/${Bi} \u2014 force-compressing before retry...`,$.yellow);let G=pt(),{messages:we,tokensRemoved:U}=un(R,G,!0);if(R=we,U>0&&U>50&&W(`${$.dim} [force-compressed \u2014 ~${U} tokens freed]${$.reset}`),Mk){let Y=ea.fast?.[ro()];Y&&Y!==fn()&&(vh(`${ro()}:${Y}`),console.log(`${$.cyan} \u26A1 Auto-switched to ${Y} to avoid further stale timeouts${$.reset}`),console.log(`${$.dim} (disable with NEX_STALE_AUTO_SWITCH=0)${$.reset}`))}}else W(`${$.yellow} \u26A0 Stale retry ${fe}/${Bi} \u2014 retrying in ${F/1e3}s...${$.reset}`);let ce=new oo(`Waiting ${F/1e3}s before retry...`);ce.start(),await new Promise(G=>setTimeout(G,F)),ce.stop(),Ve--;continue}if(_.name==="AbortError"||_.name==="CanceledError"||_.message?.includes("canceled")||_.message?.includes("aborted")){u&&(u.stop(),u=null),l(null),Qe(x,E,A,T,L),Ze(H);break}let b=_.message;if(_.code==="ECONNREFUSED"||_.message.includes("ECONNREFUSED"))b="Connection refused \u2014 please check your internet connection or API endpoint";else if(_.code==="ENOTFOUND"||_.message.includes("ENOTFOUND"))b="Network error \u2014 could not reach the API server. Please check your connection";else if(_.code==="ETIMEDOUT"||_.message.includes("timeout"))b="Request timed out \u2014 the API server took too long to respond. Please try again";else if(_.message.includes("401")||_.message.includes("Unauthorized"))b="Authentication failed \u2014 please check your API key in the .env file";else if(_.message.includes("403")||_.message.includes("Forbidden"))b="Access denied \u2014 your API key may not have permission for this model";else if(_.message.includes("404")){b=`Model not found (404): ${fn?fn():"unknown"} \u2014 check your .env MODEL setting or run /models to list available models`,console.log(`${$.red} \u2717 ${b}${$.reset}`),u&&(u.stop(),u=null),l(null),Qe(x,E,A,T,L),Ze(H);break}else if(_.message.includes("400")){if(pe<3&&xe<me){pe++,xe++;let F=x===0&&pe===1,ce=F||pe===3||he>0;if(F){pe=3;let Y=_.message.replace(/^API Error(\s*\[HTTP \d+\])?:\s*/i,"").slice(0,150);so(`Bad request (400) \u2014 ${Y||"system prompt too large"}, compressing...`,$.yellow)}else so(ce?`Bad request (400) \u2014 nuclear compression (attempt ${pe}/3, dropping history)...`:`Bad request (400) \u2014 force-compressing and retrying... (attempt ${pe}/3)`,$.yellow);let G=pt(),{messages:we,tokensRemoved:U}=un(R,G,ce);R=we,U>50&&W(`${$.dim} [force-compressed \u2014 ~${U} tokens freed]${$.reset}`),Ve--;continue}{let F=R.find(z=>z.role==="system"),ce=R.find(z=>z.role==="user"&&!String(z.content).startsWith("[SYSTEM")&&!String(z.content).startsWith("BLOCKED:")),G=[F,ce].filter(Boolean),{getUsage:we}=Rt(),U=Rt().estimateMessagesTokens(G),Y=Rt().estimateMessagesTokens(R);if(U<Y){let z=[],ee=H.filter(ae=>ae.role==="assistant"&&typeof ae.content=="string"&&ae.content.trim().length>30).slice(-5).map(ae=>ae.content.trim().slice(0,300).replace(/\n+/g," "));ee.length>0&&z.push(`Key findings:
1168
1168
  `+ee.map(ae=>`- ${ae}`).join(`
1169
1169
  `));let te=H.filter(ae=>ae.role==="tool"&&typeof ae.content=="string"&&!ae.content.startsWith("BLOCKED:")&&ae.content.trim().length>10).slice(-5).map(ae=>ae.content.trim().split(`
1170
1170
  `).slice(0,8).join(`
@@ -1667,7 +1667,7 @@ ${L}. `).trim()}let{loadSession:k}=Jt(),{setConversationMessages:j}=ve();if(e()=
1667
1667
  `).trim();if(me=null,L){$a(L.replace(/\n/g,"\\n")),v=!0,m.prompt(),M=0,C=!1,S&&(clearTimeout(S),S=null),nn=new AbortController;try{await n(L)}catch(se){if(!nn?.signal?.aborted){let ge=se.message?.split(`
1668
1668
  `)[0]||"An unexpected error occurred";console.log(`${a.red}Error: ${ge}${a.reset}`)}}v=!1;let ie=A();ie>0&&process.stdout.write(`${a.gray}[${ie} messages] ${a.reset}`)}m.setPrompt(Lt()),m.prompt();return}me.push(x),m.setPrompt(he),m.prompt();return}if(x.endsWith("\\"))me.push(x.slice(0,-1));else{me.push(x);let L=me.join(`
1669
1669
  `).trim();if(me=null,L){$a(L.replace(/\n/g,"\\n")),v=!0,m.prompt(),M=0,C=!1,S&&(clearTimeout(S),S=null),nn=new AbortController;try{await n(L)}catch(ge){if(!nn?.signal?.aborted){let Ce=ge.message?.split(`
1670
- `)[0]||"An unexpected error occurred";console.log(`${a.red}Error: ${Ce}${a.reset}`)}}let{getConversationLength:ie}=ve();v=!1;let se=ie();se>0&&process.stdout.write(`${a.gray}[${se} messages] ${a.reset}`)}m.setPrompt(Lt()),m.prompt();return}m.setPrompt(he),m.prompt();return}if(x.trim()==='"""'||x.trim().startsWith('"""')){let L=x.trim().substring(3);me=L?[L]:[],me._mode="triple",m.setPrompt(he),m.prompt();return}if(x.endsWith("\\")){me=[x.slice(0,-1)],me._mode="backslash",m.setPrompt(he),m.prompt();return}let E=Re(x.trim());if(!E){m.setPrompt(Lt()),m.prompt();return}if($a(E),E==="/"){Gg(),m.setPrompt(Lt()),m.prompt();return}if(E.startsWith("/")){await kr(E,m);let L=kr._pendingAgentPrompt;if(L){kr._pendingAgentPrompt=null;try{let{isPlanMode:ie,setPlanMode:se}=Vt(),{invalidateSystemPromptCache:ge}=ve();ie()&&(se(!1),ge())}catch{}v=!0,m.prompt(),M=0,C=!1,S&&(clearTimeout(S),S=null),nn=new AbortController;try{await n(L,null,{autoOrchestrate:!1})}catch(ie){if(!nn?.signal?.aborted){let se=ie.message?.split(`
1670
+ `)[0]||"An unexpected error occurred";console.log(`${a.red}Error: ${Ce}${a.reset}`)}}let{getConversationLength:ie}=ve();v=!1;let se=ie();se>0&&process.stdout.write(`${a.gray}[${se} messages] ${a.reset}`)}m.setPrompt(Lt()),m.prompt();return}m.setPrompt(he),m.prompt();return}if(x.trim()==='"""'||x.trim().startsWith('"""')){let L=x.trim().substring(3);me=L?[L]:[],me._mode="triple",m.setPrompt(he),m.prompt();return}if(x.endsWith("\\")){me=[x.slice(0,-1)],me._mode="backslash",m.setPrompt(he),m.prompt();return}let E=Re(x.trim());if(!E){m.setPrompt(Lt()),m.prompt();return}if($a(E),E==="/"){Gg(),m.setPrompt(Lt()),m.prompt();return}if(E.startsWith("/")){await kr(E,m);let L=kr._pendingAgentPrompt;if(L){kr._pendingAgentPrompt=null;try{let{isPlanMode:ie,setPlanMode:se}=Vt(),{invalidateSystemPromptCache:ge}=ve();ie()&&(se(!1),ge())}catch{}v=!0,m.prompt(),M=0,C=!1,S&&(clearTimeout(S),S=null),nn=new AbortController;try{await n(L,null,{autoOrchestrate:!1,skipPhaseRouting:!0,maxIterations:200})}catch(ie){if(!nn?.signal?.aborted){let se=ie.message?.split(`
1671
1671
  `)[0]||"An unexpected error occurred";console.log(`${a.red}Error: ${se}${a.reset}`)}}v=!1}m.setPrompt(Lt()),m.prompt();return}{let L=zE?"\x1B[48;5;237m":"\x1B[48;2;220;225;235m",ie=process.stdout.columns||80,se=E.split(`
1672
1672
  `);process.stdout.isTTY&&process.stdout.write(`\x1B[${se.length}A`),se.forEach((ge,Ce)=>{let tt=Ce===0?"\x1B[1;36m\u203A\x1B[22;39m":" ",nt=2+ge.length,Tn=" ".repeat(Math.max(0,ie-nt));console.log(`\x1B[2K${L}${tt} ${ge}${Tn}\x1B[0m`)}),console.log()}if(process.env.NEX_AUTO_PLAN!=="0"&&!Vl()){let{isPlanMode:L,setPlanMode:ie}=Vt(),{invalidateSystemPromptCache:se}=ve(),ge=/\b(implement|refactor|migrate|redesign)\b/i,Ce=/\b(create|build|add|write|introduce|develop|set\s+up)\b/i,tt=/^(how|what|why|when|where|which|explain|show|list|tell|describe|can\s+you|could\s+you|do\s+you)\b/i,nt=/\b(spawn[_\s]?agents?|swarm)\b/i;!tt.test(E)&&!nt.test(E)&&(ge.test(E)||Ce.test(E)&&E.split(/\s+/).length>=5)&&!L()&&(ie(!0),se(),console.log(`${a.cyan}${a.bold}\u2387 Auto Plan Mode${a.reset}${a.dim} \u2014 implementation task detected \xB7 read-only until /plan approve${a.reset}`))}{let{getConversationLength:L}=ve();if(L()===0)try{let{detectCategory:ie,getModelForCategory:se}=In(),ge=ie(E);if(ge&&ge.id!=="coding"){let Ce=se(ge.id),tt=En();if(Ce&&Ce!==tt?.id&&eu(Ce)){let nt=En();console.log(`${a.dim}\u21B3 ${ge.icon} ${ge.label} task \u2014 routing to ${nt?.name||Ce}${a.reset}`),global._nexFooter&&global._nexFooter.setStatusInfo({model:nt?.name||Ce})}}}catch{}}v=!0,m.prompt(),M=0,C=!1,S&&(clearTimeout(S),S=null),nn=new AbortController;try{await n(E)}catch(L){if(!nn?.signal?.aborted){let ie=L.message?.split(`
1673
1673
  `)[0]||"An unexpected error occurred";console.log(`${a.red}Error: ${ie}${a.reset}`)}}v=!1;let{getConversationLength:A}=ve(),T=A();T>0&&process.stdout.write(`${a.gray}[${T} messages] ${a.reset}`),m.setPrompt(Lt()),m.prompt()}),m.on("close",()=>{process.stdin.isTTY&&process.stdout.write("\x1B[?2004l"),process.stdout.write("\x1B[r\x1B[H\x1B[2J\x1B[3J"),process.exit(0)})}Zg.exports={startREPL:aT,getPrompt:Lt,loadHistory:Vg,appendHistory:$a,getHistoryPath:nu,HISTORY_MAX:tu,showCommandList:Gg,completer:zg,completeFilePath:Yg,handleSlashCommand:kr,showProviders:Zl,showHelp:Xg,renderBar:Jg,hasPasteStart:oT,hasPasteEnd:rT,stripPasteSequences:vr,getAbortSignal:Kg}});var e$=Q((GR,Qg)=>{"use strict";var cT=require("readline");function Ss(t){process.stdout.write(JSON.stringify(t)+`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nex-code",
3
- "version": "0.4.26",
3
+ "version": "0.4.27",
4
4
  "description": "Run 400B+ open coding models on your codebase without the hardware bill. Ollama Cloud first — OpenAI, Anthropic, and Gemini when you need them.",
5
5
  "bin": {
6
6
  "nex-code": "./dist/nex-code.js"