nex-code 0.3.61 → 0.3.62
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.
- package/dist/nex-code.js +2 -2
- package/package.json +1 -1
package/dist/nex-code.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var D=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var ks=D((vb,xf)=>{xf.exports={name:"nex-code",version:"0.3.
|
|
2
|
+
var D=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var ks=D((vb,xf)=>{xf.exports={name:"nex-code",version:"0.3.62",description:"The open-source agentic coding CLI. Free with Ollama Cloud \u2014 switch to OpenAI, Anthropic or Gemini anytime. Alternative to Claude Code & Gemini CLI.",bin:{"nex-code":"./dist/nex-code.js"},files:["dist/","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",test:"jest --forceExit",coverage:"jest --coverage --forceExit","test:watch":"jest --watch",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",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"},jest:{coverageThreshold:{global:{lines:45,functions:30,branches:35},"./cli/sub-agent.js":{lines:70,functions:65,branches:55}}}}});var Ut=D((Sb,fa)=>{"use strict";var ia="\x1B[0m",aa="\x1B[1m",cn="\x1B[2m";function A(t,e,s){return`\x1B[38;2;${t};${e};${s}m`}function vf(){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
|
`),n=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(n){let r=parseInt(n[1].slice(0,2),16),i=parseInt(n[2].slice(0,2),16),c=parseInt(n[3].slice(0,2),16);return .299*r+.587*i+.114*c<128}}catch{}return null}function ca(){let t=require("os");return require("path").join(t.homedir(),".nex-code",".theme_cache.json")}function Sf(t){try{let s=require("fs").readFileSync(ca(),"utf8"),o=JSON.parse(s);if(o&&typeof o[t]=="boolean")return o[t]}catch{}return null}function Ef(t,e){try{let s=require("fs"),o=require("path"),n=ca(),r=o.dirname(n),i={};try{i=JSON.parse(s.readFileSync(n,"utf8"))}catch{}i[t]=e;let c=Object.keys(i);c.length>50&&c.slice(0,c.length-50).forEach(l=>delete i[l]),s.existsSync(r)||s.mkdirSync(r,{recursive:!0}),s.writeFileSync(n,JSON.stringify(i),"utf8")}catch{}}function Tf(){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 s=process.env.TERM_SESSION_ID||"default",o=Sf(s);if(o!==null)return o;let n=vf(),r=n!==null?n:!0;return Ef(s,r),r}var la=Tf(),ua={reset:ia,bold:aa,dim:cn,primary:A(80,190,255),secondary:A(60,170,190),success:A(80,210,120),warning:A(245,175,50),error:A(230,80,80),muted:cn,subtle:A(130,130,145),tool_read:A(80,190,255),tool_write:A(245,165,55),tool_exec:A(185,100,235),tool_search:A(70,185,190),tool_git:A(90,210,100),tool_web:A(100,215,250),tool_sysadmin:A(225,150,75),tool_default:A(100,205,115),syn_keyword:A(185,100,235),syn_string:A(90,210,120),syn_number:A(245,175,50),syn_comment:cn,syn_key:A(80,190,255),diff_add:A(80,210,120),diff_rem:A(230,80,80),banner_logo:A(80,200,255),banner_name:A(80,200,255),banner_version:cn,banner_model:cn,banner_yolo:A(245,175,50),footer_sep:cn,footer_model:A(80,175,235),footer_branch:A(80,210,100),footer_project:A(130,130,145),footer_divider:A(80,80,95),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"},da={reset:ia,bold:aa,dim:A(110,110,120),primary:A(0,110,190),secondary:A(0,125,148),success:A(0,148,62),warning:A(168,92,0),error:A(188,32,32),muted:A(110,110,120),subtle:A(155,155,165),tool_read:A(0,110,190),tool_write:A(168,92,0),tool_exec:A(128,42,188),tool_search:A(0,122,148),tool_git:A(0,138,62),tool_web:A(0,112,178),tool_sysadmin:A(168,82,0),tool_default:A(0,138,62),syn_keyword:A(128,42,188),syn_string:A(0,138,62),syn_number:A(168,92,0),syn_comment:A(135,135,148),syn_key:A(0,110,190),diff_add:A(0,148,62),diff_rem:A(188,32,32),banner_logo:A(0,122,205),banner_name:A(0,122,205),banner_version:A(100,100,118),banner_model:A(100,100,118),banner_yolo:A(168,62,0),footer_sep:A(168,168,178),footer_model:A(0,102,175),footer_branch:A(0,138,62),footer_project:A(135,135,148),footer_divider:A(168,168,178),white:A(40,40,52),red:A(188,32,32),green:A(0,148,62),yellow:A(168,92,0),blue:A(0,110,190),magenta:A(128,42,188),cyan:A(0,125,148),gray:A(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:A(0,158,182),brightMagenta:A(158,52,208),brightBlue:A(0,112,208)},Rf=la?ua:da;fa.exports={T:Rf,isDark:la,DARK:ua,LIGHT:da}});var Pn=D((Eb,ma)=>{var{T:P}=Ut(),Ss=5,ln=(()=>{let t=[];for(let e=0;e<Ss;e++)t.push(e);for(let e=Ss-2;e>=1;e--)t.push(e);return t})(),pa=["\u273D","\u2726","\u2727","\u2726"],Yo=class{constructor(e="Thinking..."){this.text=e,this.frame=0,this.interval=null,this.startTime=null}_render(){if(this._stopped)return;let e=ln[this.frame%ln.length],s="";for(let n=0;n<Ss;n++)s+=n===e?`${P.cyan}\u25CF${P.reset}`:" ";let o="";if(this.startTime){let n=Math.floor((Date.now()-this.startTime)/1e3);if(n>=60){let r=Math.floor(n/60),i=n%60;o=` ${P.dim}${r}m ${String(i).padStart(2,"0")}s${P.reset}`}else n>=1&&(o=` ${P.dim}${n}s${P.reset}`)}process.stderr.write(`\x1B[2K\r${s} ${P.dim}${this.text}${P.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}},Xo=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 s=Math.floor(e/60),o=e%60;return s>0?`${s}m ${String(o).padStart(2,"0")}s`:`${o}s`}_render(){if(this._stopped)return;let e=ln[this.frame%ln.length],s=`${P.cyan}\u25CF${P.reset}`,o=`${P.dim}\u25CB${P.reset}`,n=this._formatElapsed(),r=n?` ${P.dim}${n}${P.reset}`:"",i="";for(let c=0;c<this.labels.length;c++){let l,u;switch(this.statuses[c]){case"done":l=`${P.green}\u2713${P.reset}`,u=P.dim;break;case"error":l=`${P.red}\u2717${P.reset}`,u=P.dim;break;default:l=c===e?s:" ",u=""}let d=c===this.labels.length-1?r:"";i+=`\x1B[2K ${l} ${u}${this.labels[c]}${P.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 s=0;s<this.lineCount;s++)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,s){e>=0&&e<this.statuses.length&&(this.statuses[e]=s)}stop(){this._stopped=!0,this.interval&&(clearInterval(this.interval),this.interval=null),this._renderFinal(),process.stderr.write("\x1B[?25h")}_renderFinal(){let e=this._formatElapsed(),s=e?` ${P.dim}${e}${P.reset}`:"",o="";for(let n=0;n<this.labels.length;n++){let r;switch(this.statuses[n]){case"done":r=`${P.green}\u2713${P.reset}`;break;case"error":r=`${P.red}\u2717${P.reset}`;break;default:r=`${P.yellow}\u25CB${P.reset}`}let i=n===this.labels.length-1?s:"";o+=`\x1B[2K ${r} ${P.dim}${this.labels[n]}${P.reset}${i}
|
|
@@ -77,7 +77,7 @@ ${o}`,_compacted:!0,_originalCount:t.length},tokensRemoved:n-r}}catch{return nul
|
|
|
77
77
|
`);S=k.pop()||"";for(let v of k){let R=v.trim();if(R.startsWith("data: ")){let C=R.slice(6),O;try{O=JSON.parse(C)}catch{continue}switch(O.type){case"content_block_start":{let L=O.content_block;L?.type==="tool_use"&&(b=y.length,y.push({id:L.id,name:L.name,inputJson:""}));break}case"content_block_delta":{let L=O.delta;L?.type==="text_delta"&&L.text&&(l(L.text),$+=L.text),L?.type==="input_json_delta"&&L.partial_json!==void 0&&b>=0&&(y[b].inputJson+=L.partial_json);break}case"content_block_stop":b=-1;break;case"message_stop":p({content:$,tool_calls:this._buildToolCalls(y)});return}}}}),h.data.on("error",w=>{o.signal?.aborted||g(new Error(`Stream error: ${w.message}`))}),h.data.on("end",()=>{p({content:$,tool_calls:this._buildToolCalls(y)})})})}normalizeResponse(e){let s="",o=[];for(let n of e.content||[])n.type==="text"?s+=n.text:n.type==="tool_use"&&o.push({id:n.id,function:{name:n.name,arguments:n.input}});return{content:s,tool_calls:o}}_buildToolCalls(e){return e.filter(s=>s.name).map(s=>{let o={};if(s.inputJson)try{o=JSON.parse(s.inputJson)}catch{o=s.inputJson}return{id:s.id||`anthropic-${Date.now()}`,function:{name:s.name,arguments:o}}})}};Ja.exports={AnthropicProvider:lr,ANTHROPIC_MODELS:Xa}});var tc=D((qb,ec)=>{var Qa=require("axios"),{BaseProvider:Mp}=un(),{serializeMessage:Db}=ot(),Za={"gemini-3.1-pro-preview":{id:"gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview",maxTokens:65536,contextWindow:1048576},"gemini-3-flash-preview":{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview",maxTokens:65536,contextWindow:1048576},"gemini-2.5-pro":{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro",maxTokens:65536,contextWindow:1048576},"gemini-2.5-flash":{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash",maxTokens:65536,contextWindow:1048576},"gemini-2.5-flash-lite":{id:"gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite",maxTokens:65536,contextWindow:1048576},"gemini-2.0-flash":{id:"gemini-2.0-flash",name:"Gemini 2.0 Flash",maxTokens:8192,contextWindow:1048576},"gemini-2.0-flash-lite":{id:"gemini-2.0-flash-lite",name:"Gemini 2.0 Flash Lite",maxTokens:8192,contextWindow:1048576},"gemini-1.5-pro":{id:"gemini-1.5-pro",name:"Gemini 1.5 Pro",maxTokens:8192,contextWindow:1048576},"gemini-1.5-flash":{id:"gemini-1.5-flash",name:"Gemini 1.5 Flash",maxTokens:8192,contextWindow:1048576}},ur=class extends Mp{constructor(e={}){super({name:"gemini",baseUrl:e.baseUrl||"https://generativelanguage.googleapis.com/v1beta/openai",models:e.models||Za,defaultModel:e.defaultModel||"gemini-2.5-flash",...e}),this.timeout=e.timeout||18e4,this.temperature=e.temperature??.2}isConfigured(){return!!this.getApiKey()}getApiKey(){return process.env.GEMINI_API_KEY||process.env.GOOGLE_API_KEY||null}_getHeaders(){let e=this.getApiKey();if(!e)throw new Error("GEMINI_API_KEY not set");return{Authorization:`Bearer ${e}`,"Content-Type":"application/json"}}_messageFormatCache=new WeakMap;_messageStringCache=new Map;_maxCacheSize=200;formatMessages(e){let s=[];for(let o of e){if(this._messageFormatCache.has(o)){s.push(this._messageFormatCache.get(o));continue}let n=this._getMessageCacheKey(o);if(this._messageStringCache.has(n)){let i=this._messageStringCache.get(n);this._messageFormatCache.set(o,i),s.push(i);continue}let r=this._formatSingleMessage(o);this._messageStringCache.size<this._maxCacheSize&&this._messageStringCache.set(n,r),this._messageFormatCache.set(o,r),s.push(r)}return{messages:s}}_getMessageCacheKey(e){let s=e.role||"",o=typeof e.content=="string"?e.content.substring(0,100):"",n=e.tool_calls?e.tool_calls.length:0;return`${s}:${o.length}:${n}`}_formatSingleMessage(e){if(e.role==="assistant"&&e.tool_calls)return{role:"assistant",content:e.content||"",tool_calls:e.tool_calls.map(s=>({id:s.id||`call-${Date.now()}`,type:"function",function:{name:s.function.name,arguments:typeof s.function.arguments=="string"?s.function.arguments:JSON.stringify(s.function.arguments)}}))};if(e.role==="tool")return{role:"tool",content:typeof e.content=="string"?e.content:JSON.stringify(e.content),tool_call_id:e.tool_call_id};if(e.role==="user"&&Array.isArray(e.content)){let s=[];for(let o of e.content)if(o.type==="text")s.push({type:"text",text:o.text??""});else if(o.type==="image"&&o.data){let n=o.data.startsWith("data:")?o.data:`data:${o.media_type||"image/png"};base64,${o.data}`;s.push({type:"image_url",image_url:{url:n,detail:"auto"}})}return{role:"user",content:s}}return{role:e.role,content:e.content}}async chat(e,s,o={}){let n=o.model||this.defaultModel,r=this.getModel(n),i=o.maxTokens||r?.maxTokens||8192,{messages:c}=this.formatMessages(e),l={model:n,messages:c,max_tokens:i,temperature:o.temperature??this.temperature};s&&s.length>0&&(l.tools=s);let u=await Qa.post(`${this.baseUrl}/chat/completions`,l,{timeout:o.timeout||this.timeout,headers:this._getHeaders()});return this.normalizeResponse(u.data)}async stream(e,s,o={}){let n=o.model||this.defaultModel,r=this.getModel(n),i=o.maxTokens||r?.maxTokens||8192,c=o.onToken||(()=>{}),{messages:l}=this.formatMessages(e),u={model:n,messages:l,max_tokens:i,temperature:o.temperature??this.temperature,stream:!0};s&&s.length>0&&(u.tools=s);let d;try{d=await Qa.post(`${this.baseUrl}/chat/completions`,u,{timeout:o.timeout||this.timeout,headers:this._getHeaders(),responseType:"stream",signal:o.signal})}catch(f){if(f.name==="CanceledError"||f.name==="AbortError"||f.code==="ERR_CANCELED")throw f;let m=f.response?.data?.error?.message||f.message;throw new Error(`API Error: ${m}`)}return new Promise((f,m)=>{let h="",p={},g="";o.signal&&o.signal.addEventListener("abort",()=>{d.data.destroy(),m(new DOMException("The operation was aborted","AbortError"))},{once:!0}),d.data.on("data",$=>{g+=$.toString();let y=g.split(`
|
|
78
78
|
`);g=y.pop()||"";for(let b of y){let S=b.trim();if(!S||!S.startsWith("data: "))continue;let w=S.slice(6);if(w==="[DONE]"){f({content:h,tool_calls:this._buildToolCalls(p)});return}let k;try{k=JSON.parse(w)}catch{continue}let v=k.choices?.[0]?.delta;if(v&&(v.content&&(c(v.content),h+=v.content),v.tool_calls))for(let R of v.tool_calls){let C=R.index??0;p[C]||(p[C]={id:R.id||"",name:"",arguments:""}),R.id&&(p[C].id=R.id),R.function?.name&&(p[C].name+=R.function.name),R.function?.arguments&&(p[C].arguments+=R.function.arguments)}}}),d.data.on("error",$=>{o.signal?.aborted||m(new Error(`Stream error: ${$.message}`))}),d.data.on("end",()=>{f({content:h,tool_calls:this._buildToolCalls(p)})})})}normalizeResponse(e){let s=e.choices?.[0]?.message||{},o=(s.tool_calls||[]).map(n=>({id:n.id,function:{name:n.function.name,arguments:n.function.arguments}}));return{content:s.content||"",tool_calls:o}}_buildToolCalls(e){return Object.values(e).filter(s=>s.name).map(s=>({id:s.id||`call-${Date.now()}-${Math.random().toString(36).slice(2,6)}`,function:{name:s.name,arguments:s.arguments}}))}};ec.exports={GeminiProvider:ur,GEMINI_MODELS:Za}});var oc=D((Fb,sc)=>{var Ms=require("axios"),{BaseProvider:Pp}=un(),nc="http://localhost:11434",dr=class extends Pp{constructor(e={}){super({name:"local",baseUrl:e.baseUrl||process.env.OLLAMA_HOST||process.env.OLLAMA_LOCAL_URL||nc,models:e.models||{},defaultModel:e.defaultModel||null,...e}),this.timeout=e.timeout||3e5,this.temperature=e.temperature??.2,this._modelsLoaded=!1}isConfigured(){return!0}async loadModels(){if(this._modelsLoaded)return this.models;try{let s=(await Ms.get(`${this.baseUrl}/api/tags`,{timeout:5e3})).data?.models||[];this.models={};for(let o of s){let n=o.name||o.model;if(!n)continue;let r=n.replace(/:latest$/,""),i=32768;try{let c=await Ms.post(`${this.baseUrl}/api/show`,{name:n},{timeout:5e3}),l=c.data?.model_info||c.data?.details||{};i=l["general.context_length"]||l["llama.context_length"]||this._parseContextFromModelfile(c.data?.modelfile)||32768}catch{}this.models[r]={id:r,name:o.name,maxTokens:Math.min(8192,Math.floor(i*.1)),contextWindow:i}}!this.defaultModel&&Object.keys(this.models).length>0&&(this.defaultModel=Object.keys(this.models)[0]),this._modelsLoaded=!0}catch{this.models={},this._modelsLoaded=!1}return this.models}getModels(){return this.models}getModelNames(){return Object.keys(this.models)}_formatMessages(e){return e.map(s=>{if(s.role==="user"&&Array.isArray(s.content)){let o=[],n=[];for(let i of s.content)i.type==="text"?o.push(i.text??""):i.type==="image"&&i.data&&n.push(i.data);let r={role:"user",content:o.join(`
|
|
79
79
|
`)};return n.length>0&&(r.images=n),r}return s})}async chat(e,s,o={}){this._modelsLoaded||await this.loadModels();let n=o.model||this.defaultModel;if(!n)throw new Error("No local model available. Is Ollama running?");let r=await Ms.post(`${this.baseUrl}/api/chat`,{model:n,messages:this._formatMessages(e),tools:s&&s.length>0?s:void 0,stream:!1,options:{temperature:o.temperature??this.temperature,num_predict:o.maxTokens||8192}},{timeout:o.timeout||this.timeout});return this.normalizeResponse(r.data)}async stream(e,s,o={}){this._modelsLoaded||await this.loadModels();let n=o.model||this.defaultModel;if(!n)throw new Error("No local model available. Is Ollama running?");let r=o.onToken||(()=>{}),i;try{i=await Ms.post(`${this.baseUrl}/api/chat`,{model:n,messages:this._formatMessages(e),tools:s&&s.length>0?s:void 0,stream:!0,options:{temperature:o.temperature??this.temperature,num_predict:o.maxTokens||8192}},{timeout:o.timeout||this.timeout,responseType:"stream",signal:o.signal})}catch(c){if(c.name==="CanceledError"||c.name==="AbortError"||c.code==="ERR_CANCELED")throw c;let l=c.response?.data?.error||c.message;throw new Error(`API Error: ${l}`)}return new Promise((c,l)=>{let u="",d=[],f="";o.signal&&o.signal.addEventListener("abort",()=>{i.data.destroy(),l(new DOMException("The operation was aborted","AbortError"))},{once:!0}),i.data.on("data",m=>{f+=m.toString();let h=f.split(`
|
|
80
|
-
`);f=h.pop()||"";for(let p of h){if(!p.trim())continue;let g;try{g=JSON.parse(p)}catch{continue}if(g.message?.content&&(r(g.message.content),u+=g.message.content),g.message?.tool_calls&&(d=d.concat(g.message.tool_calls)),g.done){c({content:u,tool_calls:this._normalizeToolCalls(d)});return}}}),i.data.on("error",m=>{o.signal?.aborted||l(new Error(`Stream error: ${m.message}`))}),i.data.on("end",()=>{if(f.trim())try{let m=JSON.parse(f);m.message?.content&&(r(m.message.content),u+=m.message.content),m.message?.tool_calls&&(d=d.concat(m.message.tool_calls))}catch{}c({content:u,tool_calls:this._normalizeToolCalls(d)})})})}normalizeResponse(e){let s=e.message||{};return{content:s.content||"",tool_calls:this._normalizeToolCalls(s.tool_calls||[])}}_parseContextFromModelfile(e){if(!e)return null;let s=e.match(/PARAMETER\s+num_ctx\s+(\d+)/i);return s?parseInt(s[1],10):null}_normalizeToolCalls(e){return e.map((s,o)=>({id:s.id||`local-${Date.now()}-${o}`,function:{name:s.function?.name||s.name||"unknown",arguments:s.function?.arguments||s.arguments||{}}}))}};sc.exports={LocalProvider:dr,DEFAULT_LOCAL_URL:nc}});var At=D((Ub,ic)=>{"use strict";var Ke=require("fs"),rc=require("path");function Ip(t){if(!t||isNaN(t))return!1;try{return process.kill(t,0),!0}catch(e){return e.code==="EPERM"}}function Lp(t){try{Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,t)}catch{let e=Date.now()+t;for(;Date.now()<e;);}}function jp(t,e){let s=rc.dirname(t),o=rc.join(s,`.nex-tmp.${process.pid}.${Date.now()}`);try{Ke.existsSync(s)||Ke.mkdirSync(s,{recursive:!0}),Ke.writeFileSync(o,e,"utf-8"),Ke.renameSync(o,t)}catch(n){try{Ke.unlinkSync(o)}catch{}throw n}}function Dp(t,e,{timeout:s=5e3,retryMs:o=50}={}){let n=t+".lock",r=Date.now()+s;for(;;){let i=-1;try{i=Ke.openSync(n,"wx"),Ke.writeSync(i,Buffer.from(String(process.pid))),Ke.closeSync(i),i=-1;try{return e()}finally{try{Ke.unlinkSync(n)}catch{}}}catch(c){if(i!==-1)try{Ke.closeSync(i)}catch{}if(c.code!=="EEXIST")throw c;try{let l=Ke.readFileSync(n,"utf-8").trim(),u=parseInt(l,10);if(!Ip(u)){try{Ke.unlinkSync(n)}catch{}continue}}catch{continue}if(Date.now()>=r){try{Ke.unlinkSync(n)}catch{}return e()}Lp(o)}}}ic.exports={atomicWrite:jp,withFileLockSync:Dp}});var mn=D((Wb,pc)=>{var pn=require("fs"),fr=require("path"),{atomicWrite:qp,withFileLockSync:Fp}=At(),ac={openai:{"gpt-4o":{input:2.5,output:10},"gpt-4o-mini":{input:.15,output:.6},"gpt-4.1":{input:2,output:8},"gpt-4.1-mini":{input:.4,output:1.6},"gpt-4.1-nano":{input:.1,output:.4},o1:{input:15,output:60},o3:{input:10,output:40},"o3-mini":{input:1.1,output:4.4},"o4-mini":{input:1.1,output:4.4}},anthropic:{"claude-sonnet":{input:3,output:15},"claude-opus":{input:5,output:25},"claude-haiku":{input:.8,output:4},"claude-sonnet-4-5":{input:3,output:15},"claude-sonnet-4":{input:3,output:15}},gemini:{"gemini-2.5-pro":{input:1.25,output:10},"gemini-2.5-flash":{input:.15,output:.6},"gemini-2.0-flash":{input:.1,output:.4},"gemini-2.0-flash-lite":{input:.075,output:.3}},ollama:{"qwen3-coder:480b":{input:0,output:0},"qwen3-coder-next":{input:0,output:0},"devstral-2:123b":{input:0,output:0},"devstral-small-2:24b":{input:0,output:0},"kimi-k2.5":{input:0,output:0},"kimi-k2:1t":{input:0,output:0},"deepseek-v3.2":{input:0,output:0},"minimax-m2.5":{input:0,output:0},"glm-5":{input:0,output:0},"glm-4.7":{input:0,output:0},"gpt-oss:120b":{input:0,output:0}},local:{}},Ps=[],Ot={};function Up(t,e,s,o){if(Ps.push({provider:t,model:e,input:s,output:o}),Ot[t]!==void 0){let n=dc(t);n.allowed||process.stderr.write(`\x1B[33m\u26A0 Budget limit reached for ${t}: $${n.spent.toFixed(2)} / $${n.limit.toFixed(2)}\x1B[0m
|
|
80
|
+
`);f=h.pop()||"";for(let p of h){if(!p.trim())continue;let g;try{g=JSON.parse(p)}catch{continue}if(g.message?.content&&(r(g.message.content),u+=g.message.content),g.message?.tool_calls&&(d=d.concat(g.message.tool_calls)),g.done){c({content:u,tool_calls:this._normalizeToolCalls(d)});return}}}),i.data.on("error",m=>{o.signal?.aborted||l(new Error(`Stream error: ${m.message}`))}),i.data.on("end",()=>{if(f.trim())try{let m=JSON.parse(f);m.message?.content&&(r(m.message.content),u+=m.message.content),m.message?.tool_calls&&(d=d.concat(m.message.tool_calls))}catch{}c({content:u,tool_calls:this._normalizeToolCalls(d)})})})}normalizeResponse(e){let s=e.message||{};return{content:s.content||"",tool_calls:this._normalizeToolCalls(s.tool_calls||[])}}_parseContextFromModelfile(e){if(!e)return null;let s=e.match(/PARAMETER\s+num_ctx\s+(\d+)/i);return s?parseInt(s[1],10):null}_normalizeToolCalls(e){return e.map((s,o)=>({id:s.id||`local-${Date.now()}-${o}`,function:{name:s.function?.name||s.name||"unknown",arguments:s.function?.arguments||s.arguments||{}}}))}};sc.exports={LocalProvider:dr,DEFAULT_LOCAL_URL:nc}});var At=D((Ub,ic)=>{"use strict";var Ke=require("fs"),rc=require("path");function Ip(t){if(!t||isNaN(t))return!1;try{return process.kill(t,0),!0}catch(e){return e.code==="EPERM"}}function Lp(t){try{Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,t)}catch{let e=Date.now()+t;for(;Date.now()<e;);}}function jp(t,e){let s=rc.dirname(t),o=rc.join(s,`.nex-tmp.${process.pid}.${Date.now()}`);try{Ke.existsSync(s)||Ke.mkdirSync(s,{recursive:!0}),Ke.writeFileSync(o,e,"utf-8"),Ke.renameSync(o,t)}catch(n){try{Ke.unlinkSync(o)}catch{}throw n}}function Dp(t,e,{timeout:s=5e3,retryMs:o=50}={}){let n=t+".lock",r=Date.now()+s;for(;;){let i=-1;try{i=Ke.openSync(n,"wx"),Ke.writeSync(i,Buffer.from(String(process.pid))),Ke.closeSync(i),i=-1;try{return e()}finally{try{Ke.unlinkSync(n)}catch{}}}catch(c){if(i!==-1)try{Ke.closeSync(i)}catch{}if(c.code!=="EEXIST")throw c;try{let l=Ke.readFileSync(n,"utf-8").trim(),u=parseInt(l,10);if(!Ip(u)){try{Ke.unlinkSync(n)}catch{}continue}}catch(l){if(l.code&&l.code!=="ENOENT")throw l;continue}if(Date.now()>=r){try{Ke.unlinkSync(n)}catch{}return e()}Lp(o)}}}ic.exports={atomicWrite:jp,withFileLockSync:Dp}});var mn=D((Wb,pc)=>{var pn=require("fs"),fr=require("path"),{atomicWrite:qp,withFileLockSync:Fp}=At(),ac={openai:{"gpt-4o":{input:2.5,output:10},"gpt-4o-mini":{input:.15,output:.6},"gpt-4.1":{input:2,output:8},"gpt-4.1-mini":{input:.4,output:1.6},"gpt-4.1-nano":{input:.1,output:.4},o1:{input:15,output:60},o3:{input:10,output:40},"o3-mini":{input:1.1,output:4.4},"o4-mini":{input:1.1,output:4.4}},anthropic:{"claude-sonnet":{input:3,output:15},"claude-opus":{input:5,output:25},"claude-haiku":{input:.8,output:4},"claude-sonnet-4-5":{input:3,output:15},"claude-sonnet-4":{input:3,output:15}},gemini:{"gemini-2.5-pro":{input:1.25,output:10},"gemini-2.5-flash":{input:.15,output:.6},"gemini-2.0-flash":{input:.1,output:.4},"gemini-2.0-flash-lite":{input:.075,output:.3}},ollama:{"qwen3-coder:480b":{input:0,output:0},"qwen3-coder-next":{input:0,output:0},"devstral-2:123b":{input:0,output:0},"devstral-small-2:24b":{input:0,output:0},"kimi-k2.5":{input:0,output:0},"kimi-k2:1t":{input:0,output:0},"deepseek-v3.2":{input:0,output:0},"minimax-m2.5":{input:0,output:0},"glm-5":{input:0,output:0},"glm-4.7":{input:0,output:0},"gpt-oss:120b":{input:0,output:0}},local:{}},Ps=[],Ot={};function Up(t,e,s,o){if(Ps.push({provider:t,model:e,input:s,output:o}),Ot[t]!==void 0){let n=dc(t);n.allowed||process.stderr.write(`\x1B[33m\u26A0 Budget limit reached for ${t}: $${n.spent.toFixed(2)} / $${n.limit.toFixed(2)}\x1B[0m
|
|
81
81
|
`)}}function pr(t,e){let s=ac[t];return s?s[e]||{input:0,output:0}:{input:0,output:0}}function cc(t){let e=pr(t.provider,t.model);return(t.input*e.input+t.output*e.output)/1e6}function lc(){let t={};for(let r of Ps){let i=`${r.provider}:${r.model}`;t[i]||(t[i]={provider:r.provider,model:r.model,input:0,output:0}),t[i].input+=r.input,t[i].output+=r.output}let e=Object.values(t).map(r=>({...r,cost:cc(r)})),s=e.reduce((r,i)=>r+i.cost,0),o=e.reduce((r,i)=>r+i.input,0),n=e.reduce((r,i)=>r+i.output,0);return{totalCost:s,totalInput:o,totalOutput:n,breakdown:e}}function Wp(){let{totalCost:t,totalInput:e,totalOutput:s,breakdown:o}=lc();if(o.length===0)return"No token usage recorded this session.";let n=[];n.push("Session Token Usage:"),n.push("");for(let r of o){let i=r.cost>0?`$${r.cost.toFixed(4)}`:"free";n.push(` ${r.provider}:${r.model}`),n.push(` Input: ${r.input.toLocaleString()} tokens`),n.push(` Output: ${r.output.toLocaleString()} tokens`),n.push(` Cost: ${i}`)}return n.push(""),n.push(` Total: ${e.toLocaleString()} in + ${s.toLocaleString()} out = $${t.toFixed(4)}`),n.join(`
|
|
82
82
|
`)}function Bp(t,e,s,o){let n=pr(t,e),r=(s*n.input+o*n.output)/1e6;return r<=0?"":`[~$${r.toFixed(4)}]`}function Hp(){Ps=[]}function Gp(t,e){Ot[t]=e}function Kp(t){delete Ot[t]}function zp(){return{...Ot}}function uc(t){let e=0;for(let s of Ps)s.provider===t&&(e+=cc(s));return e}function dc(t){let e=uc(t),s=Ot[t];if(s===void 0)return{allowed:!0,spent:e,limit:null,remaining:null};let o=Math.max(0,s-e);return{allowed:e<s,spent:e,limit:s,remaining:o}}function fc(){let t=fr.join(process.cwd(),".nex","config.json");if(pn.existsSync(t))try{let e=JSON.parse(pn.readFileSync(t,"utf-8"));e.costLimits&&typeof e.costLimits=="object"&&(Ot={...e.costLimits})}catch{}}function Yp(){let t=fr.join(process.cwd(),".nex"),e=fr.join(t,"config.json");pn.existsSync(t)||pn.mkdirSync(t,{recursive:!0}),Fp(e,()=>{let s={};if(pn.existsSync(e))try{s=JSON.parse(pn.readFileSync(e,"utf-8"))}catch{s={}}s.costLimits=Ot,qp(e,JSON.stringify(s,null,2))})}function Xp(){Ot={}}fc();pc.exports={PRICING:ac,trackUsage:Up,getSessionCosts:lc,formatCosts:Wp,formatCostHint:Bp,resetCosts:Hp,getPricing:pr,setCostLimit:Gp,removeCostLimit:Kp,getCostLimits:zp,getProviderSpend:uc,checkBudget:dc,loadCostLimits:fc,saveCostLimits:Yp,resetCostLimits:Xp}});var gc=D((Bb,hc)=>{"use strict";var Jp=new Set(["read_file","grep","glob","search_files","list_directory"]),Vp=new Set(["write_file","edit_file","patch_file"]),Qp=new Set(["bash"]),Zp=new Set(["web_search","web_fetch","perplexity_search"]);function mc(t,e){let s=0,o=0,n=0,r=0,i=0;for(let[c,l]of t)i+=l,Jp.has(c)&&(s+=l),Vp.has(c)&&(o+=l),Qp.has(c)&&(n+=l),Zp.has(c)&&(r+=l);return i===0?`Phase ${e}`:r/i>.5?"Research":s/i>.5?"Exploration":o/i>.3?"Implementation":n/i>.3&&o/i<.15?"Verification":`Phase ${e}`}var mr=class{constructor(e){this._N=e,this._disabled=e<=0,this._phaseNum=0,this._linesThisPhase=0,this._stepsThisPhase=0,this._phaseCounts=new Map,this._phaseStart=Date.now()}record(e,s,o,n){if(this._disabled)return null;this._linesThisPhase+=e,this._stepsThisPhase++;for(let i of s)this._phaseCounts.set(i,(this._phaseCounts.get(i)||0)+1);if(this._stepsThisPhase<this._N)return null;this._phaseNum++;let r={fire:!0,inViewport:this._isInViewport(),linesBack:this._linesThisPhase,phaseNum:this._phaseNum,phaseName:mc(this._phaseCounts,this._phaseNum),stepCount:this._stepsThisPhase,toolCounts:new Map(this._phaseCounts),elapsed:Date.now()-this._phaseStart,filesRead:new Set(o),filesModified:new Set(n)};return this._linesThisPhase=0,this._stepsThisPhase=0,this._phaseCounts=new Map,this._phaseStart=Date.now(),r}_isInViewport(){if(!process.stdout.isTTY)return!1;let e=Math.max(1,(process.stdout.rows||24)-2);return this._linesThisPhase<=e}};hc.exports={MilestoneTracker:mr,_phaseName:mc}});var Is=D((Hb,$c)=>{var Ln=we(),em={"kimi-k2.5":{id:"kimi-k2.5",name:"Kimi K2.5",max_tokens:16384},"qwen3-coder:480b":{id:"qwen3-coder:480b",name:"Qwen3 Coder 480B",max_tokens:16384}};function tm(){return Ln.getActiveModel()}function nm(t){return Ln.setActiveModel(t)}function sm(){return Ln.getModelNames()}function om(t){if(!t)return null;if(typeof t=="object")return t;try{return JSON.parse(t)}catch{}try{let o=t.replace(/,\s*([}\]])/g,"$1").replace(/'/g,'"');return JSON.parse(o)}catch{}let e=t.match(/\{[\s\S]*\}/);if(e)try{return JSON.parse(e[0])}catch{}try{let o=t.replace(/(\{|,)\s*([a-zA-Z_]\w*)\s*:/g,'$1"$2":');return JSON.parse(o)}catch{}let s=t.match(/```(?:json)?\s*([\s\S]*?)```/);if(s)try{return JSON.parse(s[1].trim())}catch{}return null}async function rm(t,e){let{C:s}=ye(),{Spinner:o}=ye(),n=new o("Thinking...");n.start();let r=!0,i="";try{let c=await Ln.callStream(t,e,{onToken:l=>{r&&(n.stop(),process.stdout.write(`${s.blue}`),r=!1),process.stdout.write(l),i+=l}});return r?n.stop():process.stdout.write(`${s.reset}
|
|
83
83
|
`),c}catch(c){throw n.stop(),c}}async function im(t,e){return Ln.callChat(t,e)}$c.exports={MODELS:em,getActiveModel:tm,setActiveModel:nm,getModelNames:sm,callOllamaStream:rm,callOllama:im,parseToolArgs:om}});var bc=D((Kb,wc)=>{var Ls=require("path"),{C:T}=ye(),{T:hr,isDark:Gb}=Ut(),{confirm:am,getAutoConfirm:cm}=je(),yc=2e3;function jn(t,e){let s=t.split(`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nex-code",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.62",
|
|
4
4
|
"description": "The open-source agentic coding CLI. Free with Ollama Cloud — switch to OpenAI, Anthropic or Gemini anytime. Alternative to Claude Code & Gemini CLI.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"nex-code": "./dist/nex-code.js"
|