oioxo-mcp 0.5.22 → 0.5.23
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/bundle/cli.js +2 -2
- package/package.json +1 -1
package/bundle/cli.js
CHANGED
|
@@ -666,7 +666,7 @@ var shim = (reg && reg.get(${a})) || {};
|
|
|
666
666
|
var __stub = new Proxy(function(){}, { get: function(){ return undefined; }, apply: function(){ return undefined; }, construct: function(){ return {}; } });
|
|
667
667
|
module.exports = shim;
|
|
668
668
|
`+c+`
|
|
669
|
-
`)}catch{}}function M4t(r){let e=new Set;try{let t=EU(r,"utf8"),n=i=>{let s;for(;s=i.exec(t);)for(let a of s[1].split(",")){let c=a.trim().split(/\s+as\s+/)[0].trim().replace(/^\*\s*/,"");/^[A-Za-z_$][\w$]*$/.test(c)&&e.add(c)}};n(/import\s*\{([^}]*)\}\s*from\s*["']vscode["']/g),n(/(?:const|let|var)\s*\{([^}]*)\}\s*=\s*require\(\s*["']vscode["']\s*\)/g)}catch{}return[...e]}async function L4t(r,e,t){if(Jl.has(r)){let m=Jl.get(r);return{ok:!0,commands:[...m.commands.keys()],providers:m.providers.map(x=>x.kind),activationEvents:m.pkg.activationEvents??[]}}let n=gse(va.join(e,"extension","package.json"))?va.join(e,"extension"):e,i=va.join(n,"package.json");if(!gse(i))return{ok:!1,error:"no package.json",commands:[],providers:[],activationEvents:[]};let s=JSON.parse(EU(i,"utf8")),a={id:r,dir:n,pkg:s,module:null,context:null,commands:new Map,providers:[],outputChannels:new Map,events:[],configuration:{},subscriptions:[]};try{let m=s.contributes?.configuration,x=Array.isArray(m)?Object.assign({},...m.map(y=>y.properties)):m?.properties;for(let[y,b]of Object.entries(x||{}))b.default!==void 0&&(a.configuration[y]=b.default)}catch{}Jl.set(r,a);let c=B4t(a,t);yse.set(r,c);let d=s.main||s.browser||"extension.js",h=va.join(n,d);U4t(n,r,c,h);try{let m=R4t(xse(h).href),x=m("node:module"),y=x._resolveFilename;x._resolveFilename=function(w,...S){return w==="vscode"?"vscode":y.call(this,w,...S)};let b=x._load;x._load=function(w,...S){return w==="vscode"?c:b.call(this,w,...S)};try{a.module=m(h)}catch(w){if(w?.code==="ERR_REQUIRE_ESM"||w?.code==="ERR_REQUIRE_ASYNC_MODULE"||String(w?.code).startsWith("ERR_MODULE")||/Cannot use import statement|import statement outside a module/.test(String(w?.message))){let S=await import(xse(h).href);a.module=S?.activate?S:S?.default??S}else throw w}finally{x._resolveFilename=y,x._load=b}return a.context={subscriptions:a.subscriptions,extensionPath:n,extensionUri:c.Uri.file(n),globalState:{get:()=>{},update:async()=>{},keys:()=>[]},workspaceState:{get:()=>{},update:async()=>{},keys:()=>[]},asAbsolutePath:w=>va.join(n,w),extensionMode:1,storageUri:void 0,globalStorageUri:c.Uri.file(va.join(n,".storage"))},typeof a.module.activate=="function"&&await a.module.activate(a.context),{ok:!0,commands:[...a.commands.keys()],providers:a.providers.map(w=>w.kind),activationEvents:s.activationEvents??[]}}catch(m){return Jl.delete(r),{ok:!1,error:m instanceof Error?m.stack||m.message:String(m),commands:[],providers:[],activationEvents:[]}}}async function $4t(r,e,t){let n=Jl.get(r);if(!n)return{ok:!1,error:"extension not active"};let i=n.commands.get(e);if(!i)return{ok:!1,error:`no command ${e}`};try{return{ok:!0,result:aNe(await i.callback(...t))}}catch(s){return{ok:!1,error:s instanceof Error?s.message:String(s)}}}async function j4t(r,e,t,n,i){let s=Jl.get(r);if(!s)return{ok:!1,error:"extension not active"};let a=s.providers.find(m=>m.kind===e);if(!a)return{ok:!1,error:`no ${e} provider`};let c=sNe(t),d={line:n,character:i},h={isCancellationRequested:!1,onCancellationRequested:()=>({dispose(){}})};try{let m;
|
|
669
|
+
`)}catch{}}function M4t(r){let e=new Set;try{let t=EU(r,"utf8"),n=i=>{let s;for(;s=i.exec(t);)for(let a of s[1].split(",")){let c=a.trim().split(/\s+as\s+/)[0].trim().replace(/^\*\s*/,"");/^[A-Za-z_$][\w$]*$/.test(c)&&e.add(c)}};n(/import\s*\{([^}]*)\}\s*from\s*["']vscode["']/g),n(/(?:const|let|var)\s*\{([^}]*)\}\s*=\s*require\(\s*["']vscode["']\s*\)/g)}catch{}return[...e]}async function L4t(r,e,t){if(Jl.has(r)){let m=Jl.get(r);return{ok:!0,commands:[...m.commands.keys()],providers:m.providers.map(x=>x.kind),activationEvents:m.pkg.activationEvents??[]}}let n=gse(va.join(e,"extension","package.json"))?va.join(e,"extension"):e,i=va.join(n,"package.json");if(!gse(i))return{ok:!1,error:"no package.json",commands:[],providers:[],activationEvents:[]};let s=JSON.parse(EU(i,"utf8")),a={id:r,dir:n,pkg:s,module:null,context:null,commands:new Map,providers:[],outputChannels:new Map,events:[],configuration:{},subscriptions:[]};try{let m=s.contributes?.configuration,x=Array.isArray(m)?Object.assign({},...m.map(y=>y.properties)):m?.properties;for(let[y,b]of Object.entries(x||{}))b.default!==void 0&&(a.configuration[y]=b.default)}catch{}Jl.set(r,a);let c=B4t(a,t);yse.set(r,c);let d=s.main||s.browser||"extension.js",h=va.join(n,d);U4t(n,r,c,h);try{let m=R4t(xse(h).href),x=m("node:module"),y=x._resolveFilename;x._resolveFilename=function(w,...S){return w==="vscode"?"vscode":y.call(this,w,...S)};let b=x._load;x._load=function(w,...S){return w==="vscode"?c:b.call(this,w,...S)};try{a.module=m(h)}catch(w){if(w?.code==="ERR_REQUIRE_ESM"||w?.code==="ERR_REQUIRE_ASYNC_MODULE"||String(w?.code).startsWith("ERR_MODULE")||/Cannot use import statement|import statement outside a module/.test(String(w?.message))){let S=await import(xse(h).href);a.module=S?.activate?S:S?.default??S}else throw w}finally{x._resolveFilename=y,x._load=b}return a.context={subscriptions:a.subscriptions,extensionPath:n,extensionUri:c.Uri.file(n),globalState:{get:()=>{},update:async()=>{},keys:()=>[]},workspaceState:{get:()=>{},update:async()=>{},keys:()=>[]},asAbsolutePath:w=>va.join(n,w),extensionMode:1,storageUri:void 0,globalStorageUri:c.Uri.file(va.join(n,".storage"))},typeof a.module.activate=="function"&&await a.module.activate(a.context),{ok:!0,commands:[...a.commands.keys()],providers:a.providers.map(w=>w.kind),activationEvents:s.activationEvents??[]}}catch(m){return Jl.delete(r),{ok:!1,error:m instanceof Error?m.stack||m.message:String(m),commands:[],providers:[],activationEvents:[]}}}async function $4t(r,e,t){let n=Jl.get(r);if(!n)return{ok:!1,error:"extension not active"};let i=n.commands.get(e);if(!i)return{ok:!1,error:`no command ${e}`};try{return{ok:!0,result:aNe(await i.callback(...t))}}catch(s){return{ok:!1,error:s instanceof Error?s.message:String(s)}}}async function j4t(r,e,t,n,i){let s=Jl.get(r);if(!s)return{ok:!1,error:"extension not active"};let a=s.providers.find(m=>m.kind===e);if(!a)return{ok:!1,error:`no ${e} provider`};let c=sNe(t),d={line:n,character:i},h={isCancellationRequested:!1,onCancellationRequested:()=>({dispose(){}})};try{let m;if(e==="completion")m=await a.provider.provideCompletionItems(c,d,h,{triggerKind:0});else if(e==="hover")m=await a.provider.provideHover(c,d,h);else if(e==="definition")m=await a.provider.provideDefinition(c,d,h);else if(e==="formatting")m=await a.provider.provideDocumentFormattingEdits(c,{tabSize:2,insertSpaces:!0},h);else if(e==="codeAction"){let x={start:d,end:d,isEmpty:!0,isSingleLine:!0};m=await a.provider.provideCodeActions(c,x,{diagnostics:[],only:void 0,triggerKind:1},h)}else return{ok:!1,error:`unsupported provider kind ${e}`};return{ok:!0,result:aNe(m)}}catch(m){return{ok:!1,error:m instanceof Error?m.message:String(m)}}}function z4t(r,e){let t=sNe(e),n=[];for(let[i,s]of Jl){let a=s.docEmitters;if(!a)continue;let c=r==="open"?a.open:r==="save"?a.save:a.change;if(c?.listeners?.length)try{c.fire(r==="change"?{document:t,contentChanges:[],reason:void 0}:t),n.push(i)}catch{}}return{fired:n}}function q4t(r,e){let t=Jl.get(r);return t?{events:t.events.slice(Math.max(0,e)),next:t.events.length}:{events:[],next:0}}function W4t(r){let e=Jl.get(r);if(e){try{typeof e.module?.deactivate=="function"&&e.module.deactivate()}catch{}for(let t of e.subscriptions)try{t.dispose()}catch{}Jl.delete(r),yse.delete(r)}}function H4t(){return[...Jl.keys()]}function sNe(r){let e=r.content.split(`
|
|
670
670
|
`),t=n=>e.slice(0,n.line).reduce((i,s)=>i+s.length+1,0)+n.character;return{uri:{scheme:"file",path:r.uri,fsPath:r.uri,toString:()=>r.uri},fileName:r.uri,languageId:r.languageId,version:1,lineCount:e.length,getText:n=>n?r.content.slice(t(n.start),t(n.end)):r.content,lineAt:n=>{let i=typeof n=="number"?n:n.line,s=e[i]??"";return{lineNumber:i,text:s,range:{start:{line:i,character:0},end:{line:i,character:s.length}},firstNonWhitespaceCharacterIndex:s.search(/\S/),isEmptyOrWhitespace:!s.trim()}},offsetAt:t,positionAt:n=>{let i=0;for(let s=0;s<e.length;s++){if(i+e[s].length>=n)return{line:s,character:n-i};i+=e[s].length+1}return{line:e.length-1,character:0}},getWordRangeAtPosition:n=>{let i=e[n.line]??"",s=/[A-Za-z_$][\w$]*/g,a;for(;a=s.exec(i);)if(a.index<=n.character&&n.character<=a.index+a[0].length)return{start:{line:n.line,character:a.index},end:{line:n.line,character:a.index+a[0].length}}}}}function aNe(r){try{return JSON.parse(JSON.stringify(r,(e,t)=>typeof t=="function"?void 0:t))}catch{return null}}function V4t(r){let e="";for(let t=0;t<r.length;t++){let n=r[t];n==="*"?r[t+1]==="*"?(t++,r[t+1]==="/"?(t++,e+="(?:.*/)?"):e+=".*"):e+="[^/]*":n==="?"?e+="[^/]":n==="{"?e+="(?:":n==="}"?e+=")":n===","?e+="|":".+^$()|[]\\/".includes(n)?e+="\\"+n:e+=n}return new RegExp("^"+e+"$")}var Jl,yse,cNe=De(()=>{"use strict";Jl=new Map,yse=new Map;globalThis.__oioxoVscodeShims=yse});var gNe={};fs(gNe,{runBridge:()=>Y4t});import{createServer as G4t}from"node:http";import{randomBytes as fNe}from"node:crypto";import{spawn as dNe}from"node:child_process";import{existsSync as CU}from"node:fs";import*as Uc from"node:path";import{pathToFileURL as vse}from"node:url";import{mkdirSync as lNe,writeFileSync as J4t}from"node:fs";function uNe(r){try{let e=(process.env.PATH||"").split(Uc.delimiter).filter(Boolean),t=process.platform==="win32"?(process.env.PATHEXT||".COM;.EXE;.BAT;.CMD").split(";"):[""];for(let n of e)for(let i of t)if(CU(Uc.join(n,r+i)))return!0;return!1}catch{return!1}}function X4t(){let r=new Set,e=[];for(let[t,n]of Object.entries(hNe)){if(r.has(n.cmd)){uNe(n.cmd)&&e.push({lang:t,label:n.label});continue}r.add(n.cmd),uNe(n.cmd)&&e.push({lang:t,label:n.label})}return e}async function Y4t(r){let e=r.indexOf("--port"),t=e>=0?Number(r[e+1]):Number(process.env.OIOXO_BRIDGE_PORT)||Z4t,n=r.indexOf("--root"),i=Uc.resolve(n>=0?r[n+1]:process.cwd()),s=fNe(24).toString("hex"),a=(S,C)=>{let E=C&&/^https?:\/\/(localhost|127\.0\.0\.1|([\w-]+\.)?oioxo\.com)(:\d+)?$/.test(C)?C:"https://oioxo.com";S.setHeader("access-control-allow-origin",E),S.setHeader("access-control-allow-methods","GET, POST, OPTIONS"),S.setHeader("access-control-allow-headers","content-type, authorization, x-oioxo-bridge-token"),S.setHeader("access-control-allow-private-network","true"),S.setHeader("vary","origin")},c=S=>S.headers["x-oioxo-bridge-token"]===s||S.headers.authorization===`Bearer ${s}`,d=X4t(),{availableDap:h}=await Promise.resolve().then(()=>(mse(),pse)),m=h(),x=new Map,y=new Map,b=G4t(async(S,C)=>{let E=S.headers.origin;if(a(C,E),S.method==="OPTIONS"){C.writeHead(204).end();return}let D=S.url||"/";try{if(S.method==="GET"&&D.startsWith("/oioxo-bridge/health")){C.writeHead(200,{"content-type":"application/json"}),C.end(JSON.stringify({ok:!0,app:"oioxo-bridge",bridgeVersion:K4t,root:i,token:s,capabilities:{lsp:d.map(T=>T.lang),dap:m,exec:!0,extHost:!0},lspServers:d,platform:process.platform}));return}if(!c(S)){C.writeHead(401).end("unauthorized");return}if(S.method==="POST"&&D.startsWith("/oioxo-bridge/lsp")){let T=await TU(S),P;try{P=JSON.parse(T||"{}")}catch{C.writeHead(400).end("bad json");return}let O=hNe[P.lang||""];if(!O||!d.some(z=>z.lang===P.lang)){C.writeHead(404).end(JSON.stringify({error:`no language server for ${P.lang}`}));return}try{let z=await r3t(t3t(x,P.lang,O,i),P,i);C.writeHead(200,{"content-type":"application/json"}),C.end(JSON.stringify({ok:!0,result:z}))}catch(z){C.writeHead(200,{"content-type":"application/json"}),C.end(JSON.stringify({ok:!1,error:z instanceof Error?z.message:String(z)}))}return}if(S.method==="POST"&&D.startsWith("/oioxo-bridge/dap/")){let T=await TU(S),P;try{P=JSON.parse(T||"{}")}catch{C.writeHead(400).end("bad json");return}let O=D.replace(/^.*\/dap\//,"").split("?")[0],z=await Promise.resolve().then(()=>(mse(),pse)),L;try{O==="start"?L=await z.dapStart(String(P.lang),String(P.program),i,P.breakpoints||{}):O==="poll"?L=z.dapPoll(Number(P.since)||0):O==="continue"?(await z.dapContinue(),L={ok:!0}):O==="stepOver"?(await z.dapStep("next"),L={ok:!0}):O==="stepInto"?(await z.dapStep("stepIn"),L={ok:!0}):O==="stepOut"?(await z.dapStep("stepOut"),L={ok:!0}):O==="state"?L={ok:!0,...await z.dapStackAndVars()}:O==="evaluate"?L={ok:!0,result:await z.dapEvaluate(String(P.expression||""))}:O==="stop"?(await z.dapStop(),L={ok:!0}):L={ok:!1,error:"unknown dap op"}}catch(V){L={ok:!1,error:V instanceof Error?V.message:String(V)}}C.writeHead(200,{"content-type":"application/json"}),C.end(JSON.stringify(L));return}if(S.method==="POST"&&D.startsWith("/oioxo-bridge/ext/")){let T=await TU(S),P;try{P=JSON.parse(T||"{}")}catch{C.writeHead(400).end("bad json");return}let O=D.replace(/^.*\/ext\//,"").split("?")[0],z=await Promise.resolve().then(()=>(cNe(),oNe)),L;try{O==="install"?L=await Q4t(i,String(P.id),String(P.downloadUrl)):O==="activate"?L=await z.activateExtension(String(P.id),pNe(i,String(P.id)),i):O==="command"?L=await z.runExtCommand(String(P.id),String(P.command),P.args||[]):O==="provider"?L=await z.runExtProvider(String(P.id),String(P.kind),P.doc,Number(P.line)||0,Number(P.character)||0):O==="events"?L=z.pollExtEvents(String(P.id),Number(P.since)||0):O==="docevent"?L={ok:!0,...z.fireDocEvent(P.kind==="open"||P.kind==="save"?P.kind:"change",P.doc)}:O==="deactivate"?(z.deactivateExtension(String(P.id)),L={ok:!0}):O==="list"?L={ok:!0,active:z.activeExtensions()}:L={ok:!1,error:"unknown ext op"}}catch(V){L={ok:!1,error:V instanceof Error?V.message:String(V)}}C.writeHead(200,{"content-type":"application/json"}),C.end(JSON.stringify(L));return}if(S.method==="POST"&&D.startsWith("/oioxo-bridge/exec/")){let T=await TU(S),P;try{P=JSON.parse(T||"{}")}catch{C.writeHead(400).end("bad json");return}let O=D.replace(/^.*\/exec\//,"").split("?")[0],z=e3t(y,O,P,i);C.writeHead(z.status,{"content-type":"application/json"}),C.end(JSON.stringify(z.body));return}C.writeHead(404).end("not found")}catch(T){try{C.writeHead(500).end(T instanceof Error?T.message:"error")}catch{}}});await new Promise((S,C)=>{b.once("error",C),b.listen(t,"127.0.0.1",()=>S())}),process.stdout.write(`OIOXO_BRIDGE_READY ${JSON.stringify({url:`http://127.0.0.1:${t}`,token:s,capabilities:{lsp:d.map(S=>S.lang)}})}
|
|
671
671
|
`),process.stderr.write(`OIOXO bridge on http://127.0.0.1:${t} \u2014 root ${i}
|
|
672
672
|
`),process.stderr.write(d.length?`LSP available: ${d.map(S=>S.label).join(", ")}
|
|
@@ -971,7 +971,7 @@ ${C.snippet}`:""}`).join(`
|
|
|
971
971
|
`);return us(S||"No results.")}catch(b){return us(`web_search failed: ${b instanceof Error?b.message:"error"}`)}}),e.tool("fetch_url","Fetch a web page (http/https only) and return its readable text. Use to read a doc/article \u2014 typically a URL found via web_search.",{url:fo.string().describe("The full http(s) URL.")},async({url:x})=>{let y=await wA();if(!y.ok)return us(y.message);try{let w=await(await fetch(`${Bs}/tools/fetch?url=${encodeURIComponent(x)}`,{signal:AbortSignal.timeout(12e3)})).json();return us(w.error?`fetch_url failed: ${w.error}`:w.text??"(empty)")}catch(b){return us(`fetch_url failed: ${b instanceof Error?b.message:"error"}`)}});let c=null,d=!1,h=async x=>{if(d=x,c)return c;let{makePlaywrightBackend:y}=await Promise.resolve().then(()=>(use(),cse)),{BrowserController:b}=await Promise.resolve().then(()=>(wU(),KOe)),w=await y({headless:!1});return c=new b(w,{confirmNavigate:async()=>d,allowEvaluate:!1}),c};e.tool("browser",'Drive a REAL browser on this machine to see and test web pages \u2014 navigate, read a numbered snapshot of clickable elements, click/type by ref, screenshot. Runs LOCALLY (the page never leaves the device). Local URLs (localhost) are always allowed; set allow_external:true to permit other sites. Call one verb at a time; after navigate the result lists elements like [3] button "Sign in" \u2014 click by that ref.',{verb:fo.enum(["navigate","snapshot","screenshot","click","type","waitFor","scrollTo","back","reload","close"]).describe("The action."),url:fo.string().optional().describe("For navigate: the URL."),ref:fo.number().optional().describe("For click/type/scrollTo: element number from the latest snapshot."),text:fo.string().optional().describe("For type: text to enter. For click: visible text to match. For waitFor: text to wait for."),selector:fo.string().optional().describe("Optional CSS selector (prefer ref)."),submit:fo.boolean().optional().describe("For type: press Enter after typing."),allow_external:fo.boolean().optional().describe("Permit navigating to non-local sites (privacy gate; default false).")},async({verb:x,url:y,ref:b,text:w,selector:S,submit:C,allow_external:E})=>{let D=await wA();if(!D.ok)return us(D.message);try{let T=await h(!!E);if(x==="close")return await T.dispose(),c=null,us("Browser closed.");let P=await T.run({verb:x,url:y,ref:b,text:w,selector:S,submit:C});if(!P.ok)return us(`browser ${x} failed: ${P.error??"unknown error"}`);let O=`${P.title||""} \u2014 ${P.url}`.trim(),z=P.snapshot?`
|
|
972
972
|
${P.snapshot}`:"",L=P.consoleErrors?.length?`
|
|
973
973
|
console errors: ${P.consoleErrors.slice(0,3).join(" | ")}`:"",V=P.screenshot?`
|
|
974
|
-
(screenshot captured: ${P.screenshot.length} bytes \u2014 not shown as text)`:"";return us(`${O}${z}${L}${V}`.trim()||"OK")}catch(T){return us(`browser failed: ${T instanceof Error?T.message:"error"}`)}});let m=new bU;await e.connect(m)}hl();var _se=(()=>{try{return"0.5.
|
|
974
|
+
(screenshot captured: ${P.screenshot.length} bytes \u2014 not shown as text)`:"";return us(`${O}${z}${L}${V}`.trim()||"OK")}catch(T){return us(`browser failed: ${T instanceof Error?T.message:"error"}`)}});let m=new bU;await e.connect(m)}hl();var _se=(()=>{try{return"0.5.23"}catch{}try{return vNe(import.meta.url)("../../package.json").version}catch{return"0.0.0"}})(),n3t=`OIOXO ${_se} \u2014 context engine + terminal coding agent (https://oioxo.com)
|
|
975
975
|
|
|
976
976
|
Private, on your device. Cut your AI bill by up to ~90% in Copilot, Cursor & Claude,
|
|
977
977
|
and code from your terminal \u2014 nothing leaves your machine.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oioxo-mcp",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.23",
|
|
4
4
|
"description": "OIOXO — cut your AI bill by up to ~90%: it feeds Claude Code, Copilot, Cursor and any MCP agent only the relevant slice of your codebase instead of whole files. Also a private terminal coding agent (`oioxo code`, on-device with --local or any key). Runs on your device; your own devices can build together over Wi-Fi.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
6
6
|
"type": "module",
|