oioxo-mcp 0.5.1 → 0.5.2

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/bundle/cli.js +6 -6
  2. package/package.json +1 -1
package/bundle/cli.js CHANGED
@@ -44,7 +44,7 @@ Return the changed files now, each as a FILE: block.`),e.join(`
44
44
  \u2022 set a key: OPENAI_API_KEY / ANTHROPIC_API_KEY / GROQ_API_KEY (optionally OIOXO_MODEL)
45
45
  \u2022 or any OpenAI-compatible base: OIOXO_PROVIDER=custom OIOXO_BASE_URL=\u2026 OIOXO_MODEL=\u2026 OIOXO_API_KEY=\u2026
46
46
  \u2022 or local Ollama: OIOXO_PROVIDER=ollama OIOXO_MODEL=qwen2.5-coder (no key)
47
- \u2022 or fully on-device: oioxo code --local (private; installs node-llama-cpp on first use)`}}var d$,f$,th,ok,E_=mr(()=>{"use strict";d$=`You are OIOXO, a precise coding agent. You are given a TASK and a CONTEXT capsule
47
+ \u2022 or fully on-device: oioxo code --local (private; one-time \`npm i -g node-llama-cpp\`, then no key)`}}var d$,f$,th,ok,E_=mr(()=>{"use strict";d$=`You are OIOXO, a precise coding agent. You are given a TASK and a CONTEXT capsule
48
48
  (the minimal relevant slice of the user's repository \u2014 full excerpts for the key files,
49
49
  signatures only for their neighbors). Make the SMALLEST change that satisfies the task.
50
50
 
@@ -241,7 +241,7 @@ ${G.slice(he.start-1,he.end).join(`
241
241
  [timed out]`})},r);s.on("close",c=>{clearTimeout(a),n({code:c??1,out:i})}),s.on("error",c=>{clearTimeout(a),n({code:1,out:i+`
242
242
  `+String(c)})})})}function rne(t,e=40){let r=t.split(`
243
243
  `),n=/\b(error|fail(ed|ing)?|exception|expected|received|assert|cannot find|is not|undefined|TypeError|SyntaxError|TS\d{3,})\b/i,s=[];for(let i=0;i<r.length&&s.length<e;i++)if(n.test(r[i]))for(let o=Math.max(0,i-1);o<=Math.min(r.length-1,i+1);o++)s.includes(r[o])||s.push(r[o]);return(s.length?s:r.slice(-e)).join(`
244
- `).slice(0,3e3)}var nne=new RegExp("(^|/)(package\\.json|package-lock\\.json|pnpm-lock\\.yaml|yarn\\.lock|\\.npmrc|\\.yarnrc|\\.yarnrc\\.yml|Makefile|[^/]+\\.config\\.(c|m)?(j|t)s|(jest|vitest|vite|playwright|cypress|ava|karma|webpack|rollup|babel|eslint|prettier|tailwind|postcss|next|nuxt|svelte|astro)\\.config\\.(c|m)?(j|t)s|\\.(babelrc|mocharc|eslintrc|prettierrc|stylelintrc|swcrc)\\.(c|m)?(j|t)s)$","i");async function HB(t,e,r={}){let n=[],s=r.containRoot?Hc.resolve(r.containRoot):null;for(let i of e){let o=Hc.resolve(t,i.path);if(s&&o!==s&&!o.startsWith(s+Hc.sep)){n.push(i.path);continue}if(!r.seed&&nne.test(i.path.replace(/\\/g,"/"))){n.push(i.path);continue}await Jre(Hc.dirname(o),{recursive:!0}),await Yre(o,i.content,"utf8")}return n}async function sne(t){try{let e=JSON.parse(await tk(Hc.join(t,"package.json"),"utf8"));if(e.scripts?.test&&!/no test specified/i.test(e.scripts.test))return"npm test";if(e.scripts?.typecheck)return"npm run typecheck"}catch{}try{return await tk(Hc.join(t,"tsconfig.json"),"utf8"),await tk(Hc.join(t,"node_modules",".bin",process.platform==="win32"?"tsc.cmd":"tsc"),"utf8"),"npm exec --no -- tsc --noEmit"}catch{}return""}async function FB(t){let e=t.onNote??(()=>{}),r=Math.max(1,t.maxIters??4),n=t.verifyCmd??await sne(t.root);e("\xB7 reading the repo + building the OIOXO context capsule\u2026");let s=await Jf(t.root),i=new qc;i.build(s);let o=S_(t.task,s,i,{maxChars:24e3});e(`\xB7 capsule: ${o.files.length} files, ~${o.savedTokens.toLocaleString()} tokens saved vs reading them whole`),e(n?`\xB7 verify command: ${n}`:"\xB7 no test/typecheck found \u2014 running a single pass without a verify oracle");let a=await Xre(Hc.join(ene(),"oioxo-code-"));try{await HB(a,s.map(f=>({path:f.path,content:f.content})),{containRoot:a,seed:!0});let c={edits:[],out:"",ok:!1},u,l=!n,d=!1;for(let f=0;f<r;f++){e(`
244
+ `).slice(0,3e3)}var nne=new RegExp("(^|/)(package\\.json|package-lock\\.json|pnpm-lock\\.yaml|yarn\\.lock|\\.npmrc|\\.yarnrc|\\.yarnrc\\.yml|Makefile|[^/]+\\.config\\.(c|m)?(j|t)s|(jest|vitest|vite|playwright|cypress|ava|karma|webpack|rollup|babel|eslint|prettier|tailwind|postcss|next|nuxt|svelte|astro)\\.config\\.(c|m)?(j|t)s|\\.(babelrc|mocharc|eslintrc|prettierrc|stylelintrc|swcrc)\\.(c|m)?(j|t)s)$","i");async function HB(t,e,r={}){let n=[],s=r.containRoot?Hc.resolve(r.containRoot):null,i=/[<>:"|?*]/;for(let o of e)try{if(typeof o.path!="string"||o.path.trim()===""||i.test(o.path)){n.push(o.path);continue}let a=Hc.resolve(t,o.path);if(s&&a!==s&&!a.startsWith(s+Hc.sep)){n.push(o.path);continue}if(!r.seed&&nne.test(o.path.replace(/\\/g,"/"))){n.push(o.path);continue}await Jre(Hc.dirname(a),{recursive:!0}),await Yre(a,o.content,"utf8")}catch{n.push(o.path)}return n}async function sne(t){try{let e=JSON.parse(await tk(Hc.join(t,"package.json"),"utf8"));if(e.scripts?.test&&!/no test specified/i.test(e.scripts.test))return"npm test";if(e.scripts?.typecheck)return"npm run typecheck"}catch{}try{return await tk(Hc.join(t,"tsconfig.json"),"utf8"),await tk(Hc.join(t,"node_modules",".bin",process.platform==="win32"?"tsc.cmd":"tsc"),"utf8"),"npm exec --no -- tsc --noEmit"}catch{}return""}async function FB(t){let e=t.onNote??(()=>{}),r=Math.max(1,t.maxIters??4),n=t.verifyCmd??await sne(t.root);e("\xB7 reading the repo + building the OIOXO context capsule\u2026");let s=await Jf(t.root),i=new qc;i.build(s);let o=S_(t.task,s,i,{maxChars:24e3});e(`\xB7 capsule: ${o.files.length} files, ~${o.savedTokens.toLocaleString()} tokens saved vs reading them whole`),e(n?`\xB7 verify command: ${n}`:"\xB7 no test/typecheck found \u2014 running a single pass without a verify oracle");let a=await Xre(Hc.join(ene(),"oioxo-code-"));try{await HB(a,s.map(f=>({path:f.path,content:f.content})),{containRoot:a,seed:!0});let c={edits:[],out:"",ok:!1},u,l=!n,d=!1;for(let f=0;f<r;f++){e(`
245
245
  \xB7 ${f===0?"drafting":`repair ${f}`} with ${t.coder.label}\u2026`);let p;try{p=await t.coder.generate({task:t.task,grounding:o.text,error:u,attempt:f})}catch(C){let E=String(C.message||C);return{ok:!1,edits:c.edits,iters:f,savedTokens:o.savedTokens,lastOutput:E,coderError:E}}if(!p.length){if(e("\xB7 the coder proposed no changes."),f===0)break;break}e(`\xB7 proposed ${p.length} file change${p.length===1?"":"s"}: ${p.map(C=>C.path).join(", ")}`);let m=await HB(a,p,{containRoot:a});m.length&&e(`\xB7 \u26A0 refused ${m.length} unsafe edit(s) (path escape or executable manifest): ${m.join(", ")}`);let y=p.filter(C=>!m.includes(C.path));if(c.edits=ine(c.edits,y),!n){c={edits:c.edits,out:"\u2713 (no verify oracle configured)",ok:!0};break}if(d||(d=!0,l=t.onConfirmRun?await t.onConfirmRun(n).catch(()=>!1):!0,l||e("\xB7 skipping verification (not approved) \u2014 the diff is shown unverified.")),!l){c={edits:c.edits,out:"(verification skipped \u2014 not approved)",ok:!1};break}e("\xB7 verifying on your machine\u2026");let{code:_,out:S}=await tne(n,a,bl()?.verifyTimeoutMs);if(_===0){e("\xB7 \u2713 verified green."),c={edits:c.edits,out:S,ok:!0};break}u=rne(S),e(`\xB7 \u2717 verify failed (exit ${_}) \u2014 feeding the error back.`),c={edits:c.edits,out:S,ok:!1}}return{ok:c.ok,edits:c.edits,iters:r,savedTokens:o.savedTokens,lastOutput:c.out}}finally{await Qre(a,{recursive:!0,force:!0}).catch(()=>{})}}function ine(t,e){let r=new Map(t.map(n=>[n.path,n.content]));for(let n of e)r.set(n.path,n.content);return[...r].map(([n,s])=>({path:n,content:s}))}E_();Mo();import{promises as C_}from"node:fs";import*as uk from"node:path";import*as h$ from"node:os";var p$=process.env.OIOXO_HOME||uk.join(h$.homedir(),".oioxo"),ck=uk.join(p$,"config.json"),_l=["provider","model","baseUrl","apiKey"],Tne=new Set(["apiKey"]);async function vl(){try{let t=JSON.parse(await C_.readFile(ck,"utf8"));return t&&typeof t=="object"?t:{}}catch{return{}}}async function k_(t){await C_.mkdir(p$,{recursive:!0}),await C_.writeFile(ck,JSON.stringify(t,null,2),{mode:384});try{await C_.chmod(ck,384)}catch{}}function Om(t,e){return Tne.has(t)?e.length<=8?"\u2022\u2022\u2022\u2022":e.slice(0,4)+"\u2026"+e.slice(-2):e}async function m$(t){let[e,r,...n]=t,s=await vl();if(!e||e==="list"){let i=_l.filter(o=>s[o]!=null);if(i.length===0){console.log("No OIOXO config set. Try: oioxo config set provider anthropic");return}console.log(`
246
246
  OIOXO config (~/.oioxo/config.json):`);for(let o of i)console.log(` ${o.padEnd(10)} ${Om(o,String(s[o]))}`);return}if(e==="get"){if(!ak(r))return Rm(`Unknown key "${r}". Known: ${_l.join(", ")}`);let i=s[r];console.log(i==null?"":Om(r,String(i)));return}if(e==="set"){if(!ak(r))return Rm(`Unknown key "${r}". Known: ${_l.join(", ")}`);let i=n.join(" ");if(!i)return Rm(`Usage: oioxo config set ${r} <value>`);s[r]=i,await k_(s),console.log(`Set ${r} = ${Om(r,i)}`);return}if(e==="unset"){if(!ak(r))return Rm(`Unknown key "${r}". Known: ${_l.join(", ")}`);delete s[r],await k_(s),console.log(`Unset ${r}`);return}Rm(`Unknown config command "${e}". Use: set | get | list | unset`)}function ak(t){return!!t&&_l.includes(t)}function Rm(t){console.error(`oioxo config: ${t}`),process.exitCode=1}function One(t){let e={task:"",yes:!1,local:!1},r=[];for(let n=0;n<t.length;n++){let s=t[n];s==="--yes"||s==="-y"?e.yes=!0:s==="--local"?e.local=!0:s==="--verify"?e.verify=t[++n]:s==="--max-iters"?e.maxIters=Number(t[++n])||void 0:r.push(s)}return e.task=r.join(" ").trim(),e}function Nne(t,e){if(!t)return{add:e.split(`
247
247
  `).length,del:0,isNew:!0};let r=t.split(`
@@ -290,8 +290,8 @@ OIOXO coding agent \u2014 how to run it:
290
290
  Pin one with: oioxo model use <provider> [model]`);return}if(e==="use"){let[n,s]=r;if(!n){console.error("Usage: oioxo model use <provider> [model]"),process.exitCode=1;return}if(!U5.some(a=>a.id===n)){console.error(`Unknown provider "${n}". Known: ${U5.map(a=>a.id).join(", ")}`),process.exitCode=1;return}let i=await vl();i.provider=n,s&&(i.model=s),await k_(i);let o=n==="ollama"?"":n==="custom"?" Set the base URL with `oioxo config set baseUrl <url>` (and apiKey if the endpoint needs one).":" Set your key with `oioxo config set apiKey <key>` or the provider env var.";console.log(`Pinned ${n}${s?" / "+s:""}.${o}`);return}console.error(`Unknown model command "${e}". Use: list | use`),process.exitCode=1}async function GW(t){let[e]=t;if(e&&e!=="list"&&e!=="status"){console.error(`Unknown mcp command "${e}". Use: list`),process.exitCode=1;return}let r=process.cwd(),n=await JC(r,q5.homedir());console.log(`
291
291
  OIOXO context engine \u2014 agent wiring (this project + machine):
292
292
  `);for(let s of n){let i=s.configured?"\u2713 wired":s.detected?"\xB7 detected, not wired":"\xB7 not detected";console.log(` ${s.display.padEnd(26)} ${i}`)}console.log(`
293
- Wire one (or all): oioxo init [--all]`)}async function WW(){let t=await ja();if(!t||t.expiresAt<=Date.now()){console.log("Not signed in. Run `oioxo login` to connect your OIOXO account.");return}let e=Math.max(0,Math.round((t.expiresAt-Date.now())/864e5));console.log(`
294
- Signed in${t.email?` as ${t.email}`:""} (credential valid ~${e}d).`);let r=await ms("check");r&&r.tier==="anon"?console.log("Your OIOXO session has expired or was revoked. Run `oioxo login` to reconnect."):r&&console.log(`Plan: ${H5(r)}`)}async function XW(t){if(!await Ki()){console.log("Not signed in. Run `oioxo login`.");return}let e=await ms("check");if(!e){console.error("Could not reach oioxo.com to read your usage."),process.exitCode=1;return}if(t.includes("--json")){console.log(JSON.stringify(e));return}console.log(`
293
+ Wire one (or all): oioxo init [--all]`)}async function WW(){let t=await ja();if(!t||t.expiresAt<=Date.now()){console.log("Not signed in. Run `oioxo login` to connect your OIOXO account.");return}let e=await ms("check");if(e&&e.tier==="anon"){console.log("\nYour OIOXO token is not valid (expired or revoked). Run `oioxo login` to reconnect.");return}let r=t.expiresAt-Date.now(),n=Math.round(r/864e5),s=t.expiresAt>=Number.MAX_SAFE_INTEGER||n>3650?"":` (valid ~${Math.max(0,n)}d)`;console.log(`
294
+ Signed in${t.email?` as ${t.email}`:""}${s}.`),console.log(e?`Plan: ${H5(e)}`:"Could not reach oioxo.com to confirm your plan.")}async function XW(t){if(!await Ki()){console.log("Not signed in. Run `oioxo login`.");return}let e=await ms("check");if(!e){console.error("Could not reach oioxo.com to read your usage."),process.exitCode=1;return}if(t.includes("--json")){console.log(JSON.stringify(e));return}console.log(`
295
295
  OIOXO usage`),console.log(` Plan : ${H5(e)}`),e.tier==="free"&&(console.log(` Saved : ${(e.savedThisMonth??0).toLocaleString()} tokens this month`),e.capTokens==null||e.remainingTokens==null?console.log(" Remaining : \u2014 (allowance not available yet)"):console.log(` Remaining : ${e.remainingTokens.toLocaleString()} of ${e.capTokens.toLocaleString()}`),e.resetsAt&&console.log(` Resets : ${new Date(e.resetsAt).toUTCString()}`),console.log(` Upgrade : ${xl}`))}async function YW(){console.log(`
296
296
  OIOXO doctor
297
297
  `);let t=process.versions.node,e=Number(t.split(".")[0])>=18;tE(e,`Node ${t}`,e?"":"OIOXO needs Node \u2265 18.17"),console.log(` \xB7 Control plane: ${gn}`);let r=!1;try{r=(await fetch(gn+"/api/version",{signal:AbortSignal.timeout(6e3)})).ok}catch{r=!1}tE(r,"Control plane reachable",r?"":"could not reach oioxo.com (offline or blocked)");let n=await Ki(),s=n?await ms("check"):null,i=n&&s?.tier!=="anon";tE(i,i?"Signed in":n?"Signed in but session not recognized":"Not signed in",i?"":"run `oioxo login`"),n&&s&&s.tier!=="anon"&&console.log(` \xB7 Plan: ${H5(s)}`);let o=await vl(),a=_l.filter(l=>o[l]!=null);if(a.length)console.log(` \xB7 Coder pin: ${a.map(l=>`${l}=${Om(l,String(o[l]))}`).join(" ")}`);else{let l=["OIOXO_PROVIDER","OPENAI_API_KEY","ANTHROPIC_API_KEY","GROQ_API_KEY"].filter(d=>process.env[d]);console.log(` \xB7 Coder: ${l.length?"from env ("+l.join(", ")+")":"not configured \u2014 `oioxo model use <provider>` or set a key"}`)}let u=(await JC(process.cwd(),q5.homedir())).filter(l=>l.configured);tE(u.length>0,`Agents wired: ${u.length?u.map(l=>l.display).join(", "):"none"}`,u.length?"":"run `oioxo init` to wire your AI agent"),console.log("")}function JW(t){console.log(`
@@ -349,7 +349,7 @@ ${f.map(m=>` ${m}`).join(`
349
349
 
350
350
  IMPORTED BY (changing ${l} may break these):
351
351
  ${p.map(m=>` ${m}`).join(`
352
- `)||" (none \u2014 no in-project callers)"}`)}),e.tool("remember","Save one durable fact about THIS project to .oioxo/memory.md (on-device, shared with the OIOXO IDEs). Use for decisions, conventions, gotchas worth keeping.",{fact:Pf.string().describe("The fact, one concise sentence.")},async({fact:c})=>(await Jte(t,c),Ba("Saved to .oioxo/memory.md."))),e.tool("recall","This project's rules and learned memory from .oioxo/ (same files the OIOXO IDEs maintain). Call when starting work in an unfamiliar repo.",{},async()=>{let c=wB(await vB(t));return Ba(c||"No .oioxo/rules.md or memory.md in this project yet.")});let a=new qC;await e.connect(a)}Mo();var AB=(()=>{try{return"0.5.1"}catch{}try{return OEe(import.meta.url)("../../package.json").version}catch{return"0.0.0"}})(),ere=`OIOXO ${AB} \u2014 context engine + terminal coding agent (https://oioxo.com)
352
+ `)||" (none \u2014 no in-project callers)"}`)}),e.tool("remember","Save one durable fact about THIS project to .oioxo/memory.md (on-device, shared with the OIOXO IDEs). Use for decisions, conventions, gotchas worth keeping.",{fact:Pf.string().describe("The fact, one concise sentence.")},async({fact:c})=>(await Jte(t,c),Ba("Saved to .oioxo/memory.md."))),e.tool("recall","This project's rules and learned memory from .oioxo/ (same files the OIOXO IDEs maintain). Call when starting work in an unfamiliar repo.",{},async()=>{let c=wB(await vB(t));return Ba(c||"No .oioxo/rules.md or memory.md in this project yet.")});let a=new qC;await e.connect(a)}Mo();var AB=(()=>{try{return"0.5.2"}catch{}try{return OEe(import.meta.url)("../../package.json").version}catch{return"0.0.0"}})(),ere=`OIOXO ${AB} \u2014 context engine + terminal coding agent (https://oioxo.com)
353
353
 
354
354
  Usage: oioxo <command> [options]
355
355
 
@@ -390,5 +390,5 @@ Maintenance:
390
390
  --version, -v Print the version
391
391
  --help, -h Show this help
392
392
  `;async function NEe(t){console.log(`
393
- OIOXO status`),console.log(` Control plane : ${gn}`);let e=await ja();if(!e||e.expiresAt<=Date.now())console.log(" Account : not connected \u2014 run `oioxo login`");else{let i=Math.max(0,Math.round((e.expiresAt-Date.now())/864e5));console.log(` Account : connected (credential valid ~${i}d)`);let o=await ms("check");o?.tier==="pro"?console.log(" Plan : OIOXO Pro \u2014 unlimited context engine"):o?.tier==="free"?console.log(` Plan : OIOXO Free \u2014 ${o.remainingTokens?.toLocaleString()??"\u2014"} saved-tokens left this month (resets ${new Date(o.resetsAt).toUTCString()})`):console.log(o?` Plan : ${o.tier}`:" Plan : could not reach oioxo.com")}let r=await Jf(t),s=new qc().build(r);console.log(` Index : ${s.files} files, ${s.chunks} chunks (in-memory, on-device)`)}async function BEe(){let[t,...e]=process.argv.slice(2),r=process.cwd();switch(t){case"code":await x$(r,e);return;case"login":await __();return;case"logout":await IB(),console.log("OIOXO credential removed from this machine.");return;case"whoami":await WW();return;case"usage":await XW(e);return;case"config":await m$(e);return;case"model":await ZW(e);return;case"mcp":await GW(e);return;case"mesh":await d1(e);return;case"devices":case"scan":await d1(["devices",...e]);return;case"invite":await d1(["invite",...e]);return;case"join":await d1(["join",...e]);return;case"stop-helping":console.log("To stop helping, press Ctrl+C in the terminal that is running `oioxo invite`/`oioxo join`.");return;case"doctor":await YW();return;case"update":JW(AB);return;case"init":{let n=e.includes("--all"),s=e.indexOf("--command"),i=s>=0?e[s+1]:void 0;await BB(r,{all:n,command:i});return}case"serve":await Qte(r);return;case"status":await NEe(r);return;case"--version":case"-v":case"version":console.log(AB);return;case"--help":case"-h":case"help":case void 0:console.log(ere);return;default:console.log(`oioxo: unknown command "${t}"
393
+ OIOXO status`),console.log(` Control plane : ${gn}`);let e=await ja();if(!e||e.expiresAt<=Date.now())console.log(" Account : not connected \u2014 run `oioxo login`");else{let i=Math.max(0,Math.round((e.expiresAt-Date.now())/864e5));console.log(` Account : connected (credential valid ~${i}d)`);let o=await ms("check");o?.tier==="pro"?console.log(" Plan : OIOXO Pro \u2014 unlimited context engine"):o?.tier==="free"?console.log(` Plan : OIOXO Free \u2014 ${o.remainingTokens?.toLocaleString()??"\u2014"} saved-tokens left this month (resets ${new Date(o.resetsAt).toUTCString()})`):o?.tier==="anon"?console.log(" Plan : not signed in \u2014 run `oioxo login`"):console.log(o?` Plan : ${o.tier}`:" Plan : could not reach oioxo.com")}let r=await Jf(t),s=new qc().build(r);console.log(` Index : ${s.files} files, ${s.chunks} chunks (in-memory, on-device)`)}async function BEe(){let[t,...e]=process.argv.slice(2),r=process.cwd();switch(t){case"code":await x$(r,e);return;case"login":await __();return;case"logout":await IB(),console.log("OIOXO credential removed from this machine.");return;case"whoami":await WW();return;case"usage":await XW(e);return;case"config":await m$(e);return;case"model":await ZW(e);return;case"mcp":await GW(e);return;case"mesh":await d1(e);return;case"devices":case"scan":await d1(["devices",...e]);return;case"invite":await d1(["invite",...e]);return;case"join":await d1(["join",...e]);return;case"stop-helping":console.log("To stop helping, press Ctrl+C in the terminal that is running `oioxo invite`/`oioxo join`.");return;case"doctor":await YW();return;case"update":JW(AB);return;case"init":{let n=e.includes("--all"),s=e.indexOf("--command"),i=s>=0?e[s+1]:void 0;await BB(r,{all:n,command:i});return}case"serve":await Qte(r);return;case"status":await NEe(r);return;case"--version":case"-v":case"version":console.log(AB);return;case"--help":case"-h":case"help":case void 0:console.log(ere);return;default:console.log(`oioxo: unknown command "${t}"
394
394
  `),console.log(ere),process.exitCode=1}}BEe().catch(t=>{console.error(`oioxo-mcp: ${t instanceof Error?t.message:String(t)}`),process.exit(1)});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oioxo-mcp",
3
- "version": "0.5.1",
3
+ "version": "0.5.2",
4
4
  "description": "OIOXO context engine for AI coding agents — feeds Claude Code, Copilot, Cursor and any MCP-capable agent the minimal relevant slice of your codebase, on-device, so your tokens go further.",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "type": "module",