ms-vite-plugin 1.5.0 → 1.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.
- package/dist/luaObfuscator/addVararg.js +1 -1
- package/dist/luaObfuscator/flatten.js +1 -1
- package/dist/luaObfuscator/rename.js +1 -1
- package/dist/luaObfuscator/scope.js +1 -1
- package/dist/mcp/runtime-tools.js +11 -8
- package/dist/mcp-server.js +1 -1
- package/dist/usb-forward.d.ts +4 -0
- package/dist/usb-forward.js +1 -0
- package/docs/api/config.md +0 -19
- package/docs/apicn/config.md +0 -19
- package/docs/apicn/global.md +0 -2
- package/docs/apilua/config.md +0 -20
- package/docs/apipython/config.md +0 -20
- package/docs/quick/vscode/createProject.md +0 -6
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.addVararg=c;function s(
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.addVararg=c;function s(o){o.vararg=!0,t(o.body.body)}function a(o){switch(o.type){case"FuncExpr":s(o);break;case"UnaryExpr":a(o.arg);break;case"BinaryExpr":a(o.left),a(o.right);break;case"TableExpr":for(const e of o.fields)e.kind==="index"&&a(e.key),a(e.value);break;case"IndexExpr":a(o.object),a(o.index);break;case"MemberExpr":a(o.object);break;case"CallExpr":a(o.callee);for(const e of o.args)a(e);break;case"MethodCallExpr":a(o.object);for(const e of o.args)a(e);break;case"ParenExpr":a(o.exp);break;default:break}}function t(o){for(const e of o)switch(e.type){case"DoStat":case"WhileStat":case"RepeatStat":case"ForNumStat":case"ForInStat":if(e.type==="WhileStat"&&a(e.cond),e.type==="RepeatStat"&&a(e.cond),e.type==="ForNumStat"&&(a(e.start),a(e.end),e.step&&a(e.step)),e.type==="ForInStat")for(const r of e.exps)a(r);t(e.body.body);break;case"IfStat":for(const r of e.clauses)a(r.cond),t(r.body.body);e.elseBody&&t(e.elseBody.body);break;case"FuncStat":case"LocalFuncStat":s(e.func);break;case"LocalStat":if(e.exps)for(const r of e.exps)a(r);break;case"AssignStat":for(const r of e.vars)a(r);for(const r of e.exps)a(r);break;case"CallStat":a(e.exp);break;case"ReturnStat":for(const r of e.exps)a(r);break;default:break}}function c(o){t(o.body)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.flattenControlFlow=C;function m(t){return{type:"NumberLiteral",raw:String(t),value:t}}function p(t){return{type:"NameExpr",name:t}}function f(t,
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.flattenControlFlow=C;function m(t){return{type:"NumberLiteral",raw:String(t),value:t}}function p(t){return{type:"NameExpr",name:t}}function f(t,s){return{type:"AssignStat",vars:t.map(e=>p(e)),exps:s}}function u(t,s){return f([t.stateName],[typeof s=="number"?m(s):s])}function k(t,s,e){return{type:"BinaryExpr",op:"or",left:{type:"BinaryExpr",op:"and",left:p(t),right:m(s)},right:m(e)}}function E(t,s,e){return{type:"BinaryExpr",op:t,left:s,right:e}}function S(t){const s=`__t${t.nextTemp}`;return t.nextTemp+=1,t.temps.push(s),s}function x(t){const s=t.nextState;return t.nextState+=1,t.states.set(s,[]),s}function n(t,s,e){t.states.get(s).push(e)}function F(t,s){for(const e of t)if(e.type==="LocalStat")for(const a of e.names)s.push(a.name);else if(e.type==="LocalFuncStat")s.push(e.name);else if(e.type==="ForNumStat")s.push(e.name),F(e.body.body,s);else if(e.type==="ForInStat")s.push(...e.names),F(e.body.body,s);else if(e.type==="DoStat"||e.type==="WhileStat"||e.type==="RepeatStat")F(e.body.body,s);else if(e.type==="IfStat"){for(const a of e.clauses)F(a.body.body,s);e.elseBody&&F(e.elseBody.body,s)}}function h(t,s,e,a){if(t.length===0)return s;const y=t.map(()=>x(e));for(let o=0;o<t.length;o+=1){const r=t[o];r.type==="LabelStat"&&e.userLabels.set(r.name,y[o])}for(let o=0;o<t.length;o+=1){const r=o+1<t.length?y[o+1]:s;I(e,y[o],t[o],r,a)}return y[0]}function I(t,s,e,a,y){switch(e.type){case"EmptyStat":case"LabelStat":n(t,s,u(t,a));return;case"AssignStat":case"CallStat":case"FuncStat":n(t,s,e),n(t,s,u(t,a));return;case"LocalStat":e.exps&&e.exps.length>0&&n(t,s,f(e.names.map(o=>o.name),e.exps)),n(t,s,u(t,a));return;case"LocalFuncStat":n(t,s,f([e.name],[e.func])),n(t,s,u(t,a));return;case"ReturnStat":n(t,s,e);return;case"BreakStat":n(t,s,u(t,y));return;case"GotoStat":{const o=t.userLabels.get(e.name);if(o===void 0)throw new Error(`goto \u672A\u5B9A\u4E49\u6807\u7B7E ::${e.name}::`);n(t,s,u(t,o));return}case"DoStat":n(t,s,u(t,h(e.body.body,a,t,y)));return;case"IfStat":{const o=S(t);let r=s;for(let l=0;l<e.clauses.length;l+=1){const b=l===e.clauses.length-1,d=h(e.clauses[l].body.body,a,t,y);let i=a;b?e.elseBody&&(i=h(e.elseBody.body,a,t,y)):i=x(t),n(t,r,f([o],[e.clauses[l].cond])),n(t,r,u(t,k(o,d,i))),b||(r=i)}e.clauses.length===0&&n(t,s,u(t,a));return}case"WhileStat":{const o=S(t),r=h(e.body.body,s,t,a);n(t,s,f([o],[e.cond])),n(t,s,u(t,k(o,r,a)));return}case"RepeatStat":{const o=S(t),r=x(t),l=h(e.body.body,r,t,a);n(t,s,u(t,l)),n(t,r,f([o],[e.cond])),n(t,r,u(t,k(o,a,l)));return}case"ForNumStat":{const o=e.name,r=S(t),l=S(t),b=S(t),d=x(t),i=x(t),L=x(t),g=x(t),N=h(e.body.body,g,t,a);n(t,s,f([o],[e.start])),n(t,s,f([r],[e.end])),n(t,s,f([l],[e.step??m(1)])),n(t,s,u(t,d)),n(t,d,f([b],[E(">=",p(l),m(0))])),n(t,d,u(t,k(b,i,L))),n(t,i,f([b],[E("<=",p(o),p(r))])),n(t,i,u(t,k(b,N,a))),n(t,L,f([b],[E(">=",p(o),p(r))])),n(t,L,u(t,k(b,N,a))),n(t,g,f([o],[E("+",p(o),p(l))])),n(t,g,u(t,d));return}case"ForInStat":{const o=S(t),r=S(t),l=S(t),b=S(t),d=x(t),i=[f([l],[p(e.names[0])]),...e.body.body],L=h(i,d,t,a),g=e.exps.slice();for(;g.length<3;)g.push({type:"NilLiteral"});n(t,s,f([o,r,l],g.slice(0,3))),n(t,s,u(t,d)),n(t,d,{type:"AssignStat",vars:e.names.map(N=>p(N)),exps:[{type:"CallExpr",callee:p(o),args:[p(r),p(l)]}]}),n(t,d,f([b],[E("~=",p(e.names[0]),{type:"NilLiteral"})])),n(t,d,u(t,k(b,L,a)));return}default:n(t,s,u(t,a))}}function v(t,s){const e=t.slice();let a=s>>>0||1;for(let y=e.length-1;y>0;y-=1){a=Math.imul(a,1664525)+1013904223>>>0;const o=a%(y+1),r=e[y];e[y]=e[o],e[o]=r}return e}function w(t,s){if(t.length===0)return t;const e={states:new Map,temps:[],nextState:1,nextTemp:1,stateName:"__s",userLabels:new Map},a=[];F(t,a);const y=h(t,0,e,0),o=[...new Set([...a,...e.temps,e.stateName])],r=v([...e.states.keys()],s).map(l=>({cond:E("==",p(e.stateName),m(l)),body:{type:"Block",body:e.states.get(l)}}));return[{type:"LocalStat",names:o.map(l=>({name:l}))},f([e.stateName],[m(y)]),{type:"WhileStat",cond:E("~=",p(e.stateName),m(0)),body:{type:"Block",body:[{type:"IfStat",clauses:r}]}}]}function c(t,s){switch(t.type){case"FuncExpr":B(t.body.body,s),t.body.body=w(t.body.body,s);break;case"UnaryExpr":c(t.arg,s);break;case"BinaryExpr":c(t.left,s),c(t.right,s);break;case"TableExpr":for(const e of t.fields)e.kind==="index"&&c(e.key,s),c(e.value,s);break;case"IndexExpr":c(t.object,s),c(t.index,s);break;case"MemberExpr":c(t.object,s);break;case"CallExpr":c(t.callee,s);for(const e of t.args)c(e,s);break;case"MethodCallExpr":c(t.object,s);for(const e of t.args)c(e,s);break;case"ParenExpr":c(t.exp,s);break;default:break}}function B(t,s){for(const e of t)switch(e.type){case"DoStat":case"WhileStat":case"RepeatStat":case"ForNumStat":case"ForInStat":if((e.type==="WhileStat"||e.type==="RepeatStat")&&c(e.cond,s),e.type==="ForNumStat"&&(c(e.start,s),c(e.end,s),e.step&&c(e.step,s)),e.type==="ForInStat")for(const a of e.exps)c(a,s);B(e.body.body,s);break;case"IfStat":for(const a of e.clauses)c(a.cond,s),B(a.body.body,s);e.elseBody&&B(e.elseBody.body,s);break;case"FuncStat":case"LocalFuncStat":B(e.func.body.body,s),e.func.body.body=w(e.func.body.body,s);break;case"LocalStat":if(e.exps)for(const a of e.exps)c(a,s);break;case"AssignStat":for(const a of e.vars)c(a,s);for(const a of e.exps)c(a,s);break;case"CallStat":c(e.exp,s);break;case"ReturnStat":for(const a of e.exps)c(a,s);break;default:break}}function C(t,s){B(t.body,s),t.body=w(t.body,s)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.shortName=
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.shortName=r,exports.renameLocals=c;const u=require("./reserved"),d=require("./scope"),l="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";function r(a){let e=a,t="";do t=l[e%l.length]+t,e=Math.floor(e/l.length)-1;while(e>=0);return u.luaKeywords.has(t)?`_${t}`:t}function c(a){let e=0;const t=new Set;(0,d.collectAndRename)(a,(o,s)=>{if(o.newName!==o.original)return;let n=r(e);for(e+=1;s.has(n)||t.has(n)||u.luaKeywords.has(n);)n=r(e),e+=1;o.newName=n,t.add(n),s.add(n)})}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.resolveLocal=i,exports.collectAndRename=x;function i(t,
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.resolveLocal=i,exports.collectAndRename=x;function i(t,s){let r=t;for(;r;){const e=r.locals.get(s);if(e)return e;r=r.parent}}function c(t){return{parent:t,locals:new Map}}function f(t,s){const r=t.locals.get(s);if(r)return r;const e={original:s,newName:s};return t.locals.set(s,e),e}function x(t,s){const r=new Set,e={locals:new Map};d(t.body,e,r,s)}function l(t,s,r,e){d(t.body,s,r,e)}function d(t,s,r,e){for(const o of t)b(o,s,r,e)}function m(t,s,r,e){const o=c(s),a=t.params.slice();for(let u=0;u<a.length;u+=1){const p=f(o,a[u]);e(p,r),t.params[u]=p.newName}l(t.body,o,r,e)}function b(t,s,r,e){switch(t.type){case"EmptyStat":case"BreakStat":case"GotoStat":case"LabelStat":return;case"DoStat":l(t.body,c(s),r,e);return;case"WhileStat":n(t.cond,s,r,e),l(t.body,c(s),r,e);return;case"RepeatStat":{const o=c(s);l(t.body,o,r,e),n(t.cond,o,r,e);return}case"IfStat":for(const o of t.clauses)n(o.cond,s,r,e),l(o.body,c(s),r,e);t.elseBody&&l(t.elseBody,c(s),r,e);return;case"ForNumStat":{n(t.start,s,r,e),n(t.end,s,r,e),t.step&&n(t.step,s,r,e);const o=c(s),a=f(o,t.name);e(a,r),t.name=a.newName,l(t.body,o,r,e);return}case"ForInStat":{for(const a of t.exps)n(a,s,r,e);const o=c(s);for(let a=0;a<t.names.length;a+=1){const u=f(o,t.names[a]);e(u,r),t.names[a]=u.newName}l(t.body,o,r,e);return}case"FuncStat":{const o=i(s,t.name.base);o&&(t.name.base=o.newName),m(t.func,s,r,e);return}case"LocalFuncStat":{const o=f(s,t.name);e(o,r),t.name=o.newName,m(t.func,s,r,e);return}case"LocalStat":if(t.exps)for(const o of t.exps)n(o,s,r,e);for(let o=0;o<t.names.length;o+=1){const a=f(s,t.names[o].name);e(a,r),t.names[o].name=a.newName}return;case"AssignStat":for(const o of t.vars)n(o,s,r,e);for(const o of t.exps)n(o,s,r,e);return;case"CallStat":n(t.exp,s,r,e);return;case"ReturnStat":for(const o of t.exps)n(o,s,r,e);return}}function n(t,s,r,e){switch(t.type){case"NilLiteral":case"BoolLiteral":case"NumberLiteral":case"StringLiteral":case"VarargExpr":return;case"NameExpr":{const o=i(s,t.name);o&&(t.name=o.newName);return}case"UnaryExpr":n(t.arg,s,r,e);return;case"BinaryExpr":n(t.left,s,r,e),n(t.right,s,r,e);return;case"FuncExpr":m(t,s,r,e);return;case"TableExpr":for(const o of t.fields)o.kind==="index"&&n(o.key,s,r,e),n(o.value,s,r,e);return;case"IndexExpr":n(t.object,s,r,e),n(t.index,s,r,e);return;case"MemberExpr":n(t.object,s,r,e);return;case"CallExpr":n(t.callee,s,r,e);for(const o of t.args)n(o,s,r,e);return;case"MethodCallExpr":n(t.object,s,r,e);for(const o of t.args)n(o,s,r,e);return;case"ParenExpr":n(t.exp,s,r,e);return}}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var $=exports&&exports.__createBinding||(Object.create?(function(t,r,s,o){o===void 0&&(o=s);var c=Object.getOwnPropertyDescriptor(r,s);(!c||("get"in c?!r.__esModule:c.writable||c.configurable))&&(c={enumerable:!0,get:function(){return r[s]}}),Object.defineProperty(t,o,c)}):(function(t,r,s,o){o===void 0&&(o=s),t[o]=r[s]})),R=exports&&exports.__setModuleDefault||(Object.create?(function(t,r){Object.defineProperty(t,"default",{enumerable:!0,value:r})}):function(t,r){t.default=r}),w=exports&&exports.__importStar||(function(){var t=function(r){return t=Object.getOwnPropertyNames||function(s){var o=[];for(var c in s)Object.prototype.hasOwnProperty.call(s,c)&&(o[o.length]=c);return o},t(r)};return function(r){if(r&&r.__esModule)return r;var s={};if(r!=null)for(var o=t(r),c=0;c<o.length;c++)o[c]!=="default"&&$(s,r,o[c]);return R(s,r),s}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.registerRuntimeTools=O;const b=w(require("fs-extra")),v=w(require("os")),T=w(require("path")),u=w(require("zod/v4")),P=require("../packager"),m=require("../project"),h=require("./device-config"),D=require("./device-log"),y=require("./project"),i=require("./tool-utils"),_=require("../usb-forward");function S(t,r,s){return t&&t.trim()?T.resolve(t.trim()):T.join(v.tmpdir(),`${r}-${Date.now()}-${Math.random().toString(36).slice(2,8)}.${s}`)}function O(t){let r;function s(e){if(e&&e.trim())return r=T.resolve(e.trim()),r;if(r)return r;throw new Error("\u672A\u8BBE\u7F6E\u5DE5\u4F5C\u76EE\u5F55\uFF1A\u8BF7\u5148\u8C03\u7528 set_workspace\uFF0C\u6216\u5728\u672C\u6B21\u5DE5\u5177\u8C03\u7528\u65F6\u4F20 workspacePath\u3002")}async function o(e){const n=s(e);return await(0,y.ensureValidKuaiJSProject)(n),n}t.registerTool("set_workspace",{title:"Set Workspace",description:"\u8BBE\u7F6E\u5F53\u524D MCP \u8FDB\u7A0B\u5185\u7684\u9ED8\u8BA4\u5DE5\u4F5C\u76EE\u5F55\u3002\u540E\u7EED build/run/package \u4F18\u5148\u4F7F\u7528\u8BE5\u76EE\u5F55\u3002",inputSchema:{workspacePath:u.string().min(1).describe("\u5FEB\u70B9JS \u9879\u76EE\u76EE\u5F55\u7EDD\u5BF9\u8DEF\u5F84\uFF08\u9700\u5305\u542B package.json \u4E0E scripts\uFF09")}},async({workspacePath:e})=>{const n=await o(e);return(0,i.createTextToolResult)(`\u9ED8\u8BA4\u5DE5\u4F5C\u76EE\u5F55\u5DF2\u8BBE\u7F6E\u4E3A: ${n}`)}),t.registerTool("get_workspace",{title:"Get Workspace",description:"\u67E5\u770B\u5F53\u524D MCP \u8FDB\u7A0B\u5185\u8BB0\u5FC6\u7684\u5DE5\u4F5C\u76EE\u5F55\u3002",inputSchema:{}},async()=>r?(0,i.createTextToolResult)(`\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55: ${r}`):(0,i.createTextToolResult)("\u5F53\u524D\u672A\u8BBE\u7F6E\u5DE5\u4F5C\u76EE\u5F55\uFF0C\u8BF7\u5148\u8C03\u7528 set_workspace\u3002"));function c(e){return e.length===0?"\u5F53\u524D\u65E0 USB \u8BBE\u5907":e.map((n,a)=>`[${a+1}] ${n.name} udid=${n.udid} ${n.ip}:${n.port}`).join(`
|
|
2
|
+
`)}t.registerTool("list_usb_devices",{title:"List USB Devices",description:"\u5217\u51FA\u5F53\u524D USB \u8F6C\u53D1\u8BBE\u5907\u3002",inputSchema:{}},async()=>{const e=(0,_.getSharedUsbDevices)();return(0,i.createTextToolResult)(`USB \u8BBE\u5907 (${e.length}):
|
|
3
|
+
${c(e)}`)}),t.registerTool("set_device",{title:"Set Device",description:"\u8BBE\u7F6E\u9ED8\u8BA4\u8BBE\u5907\u3002\u7F51\u7EDC\u8BBE\u5907\u4F20 ip/port\uFF0CUSB \u8BBE\u5907\u4F20 udid\u3002",inputSchema:{ip:u.string().min(1).optional().describe("\u8BBE\u5907 IP\uFF0C\u4F8B\u5982 192.168.1.100"),port:u.number().int().min(1).max(65535).optional().describe("\u8BBE\u5907\u7AEF\u53E3\uFF0C\u9ED8\u8BA4 9800"),udid:u.string().min(1).optional().describe("USB \u8BBE\u5907 UDID")}},async({ip:e,port:n,udid:a})=>{if(a?.trim()){const p=a.trim(),l=(0,_.getSharedUsbDevices)().find(f=>f.udid===p);if(!l)throw new Error(`\u672A\u627E\u5230 USB \u8BBE\u5907 udid=${p}
|
|
4
|
+
${c((0,_.getSharedUsbDevices)())}`);const d=await(0,h.setDeviceConfig)(l.ip,l.port);return(0,i.createTextToolResult)(`\u9ED8\u8BA4\u8BBE\u5907\u5DF2\u8BBE\u7F6E\u4E3A USB ${l.name} (${d.ip}:${d.port})`)}if(!e?.trim())throw new Error("\u8BF7\u63D0\u4F9B ip\uFF0C\u6216\u63D0\u4F9B USB udid\u3002");const g=await(0,h.setDeviceConfig)(e,n);return(0,i.createTextToolResult)(`\u9ED8\u8BA4\u8BBE\u5907\u5DF2\u8BBE\u7F6E\u4E3A ${g.ip}:${g.port}`)}),t.registerTool("get_device",{title:"Get Device",description:"\u67E5\u770B\u5F53\u524D\u9ED8\u8BA4\u8BBE\u5907\u914D\u7F6E\u3002",inputSchema:{}},async()=>{const e=await(0,h.readDeviceConfig)();return e?(0,i.createTextToolResult)(`\u5F53\u524D\u9ED8\u8BA4\u8BBE\u5907: ${e.ip}:${e.port}`):(0,i.createTextToolResult)("\u5F53\u524D\u672A\u8BBE\u7F6E\u9ED8\u8BA4\u8BBE\u5907\uFF0C\u8BF7\u5148\u8C03\u7528 set_device\u3002")}),t.registerTool("take_screenshot",{title:"Take Screenshot",description:"\u83B7\u53D6\u5F53\u524D\u9ED8\u8BA4\u8BBE\u5907\u622A\u56FE\u3002\u53EF\u8FD4\u56DE base64\uFF0C\u6216\u843D\u5730\u5230\u6587\u4EF6\u540E\u8FD4\u56DE\u6587\u4EF6\u8DEF\u5F84\uFF08\u9ED8\u8BA4\u5199\u5165\u7CFB\u7EDF\u4E34\u65F6\u76EE\u5F55\uFF09\u3002",inputSchema:{format:u.enum(["file","base64"]).optional().default("file").describe("\u622A\u56FE\u8FD4\u56DE\u683C\u5F0F\uFF1Afile=\u6587\u4EF6\u8DEF\u5F84\uFF0Cbase64=\u56FE\u7247 base64"),outputPath:u.string().min(1).optional().describe("\u5F53 format=file \u65F6\u53EF\u6307\u5B9A\u8F93\u51FA\u8DEF\u5F84\uFF0C\u4E0D\u4F20\u5219\u5199\u5165\u7CFB\u7EDF\u4E34\u65F6\u76EE\u5F55")}},async({format:e,outputPath:n})=>{const a=await(0,i.resolveRuntimeHttpTarget)(),g=(0,i.createRuntimeHttpRequestOptions)(a);if(e==="base64"){const d=await(0,m.getScreenshotBase64OnDevice)(g);return(0,i.createTextToolResult)(`\u622A\u56FE\u6210\u529F: ${a.label}
|
|
2
5
|
format: base64
|
|
3
|
-
${
|
|
6
|
+
${d}`)}const p=await(0,m.getScreenshotOnDevice)(g),l=S(n,"ms-mcp-screenshot","jpg");return await b.ensureDir(T.dirname(l)),await b.writeFile(l,p),(0,i.createTextToolResult)(`\u622A\u56FE\u6210\u529F: ${a.label}
|
|
4
7
|
format: file
|
|
5
|
-
path: ${
|
|
6
|
-
size: ${
|
|
8
|
+
path: ${l}
|
|
9
|
+
size: ${p.length} bytes`)}),t.registerTool("get_node_source",{title:"Get Node Source",description:"\u83B7\u53D6\u5F53\u524D\u9ED8\u8BA4\u8BBE\u5907\u9875\u9762\u8282\u70B9 XML\uFF0C\u5199\u5165\u6587\u4EF6\u540E\u8FD4\u56DE\u8DEF\u5F84\uFF0C\u907F\u514D\u957F\u6587\u672C\u54CD\u5E94\u88AB\u622A\u65AD\u3002",inputSchema:{maxDepth:u.number().int().min(1).max(200).optional().default(50).describe("\u8282\u70B9\u6811\u6700\u5927\u6DF1\u5EA6\uFF0C\u9ED8\u8BA4 50"),timeout:u.number().int().min(1).max(600).optional().default(120).describe("\u8BBE\u5907\u7AEF\u8282\u70B9\u6293\u53D6\u8D85\u65F6\u79D2\u6570\uFF0C\u9ED8\u8BA4 120"),mode:u.number().int().min(1).max(3).optional().default(1).describe("\u8282\u70B9\u6293\u53D6\u6A21\u5F0F\uFF1A1\u30012\u30013\uFF0C\u9ED8\u8BA4 1"),outputPath:u.string().min(1).optional().describe("\u53EF\u9009\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84\uFF0C\u4E0D\u4F20\u5219\u5199\u5165\u7CFB\u7EDF\u4E34\u65F6\u76EE\u5F55")}},async({maxDepth:e,timeout:n,mode:a,outputPath:g})=>{const p=await(0,i.resolveRuntimeHttpTarget)(),l=(0,i.createRuntimeHttpRequestOptions)(p),d=await(0,m.getSourceOnDevice)(l,e,n,a),f=S(g,"ms-mcp-node-source","xml");return await b.ensureDir(T.dirname(f)),await b.writeFile(f,d,"utf8"),(0,i.createTextToolResult)(`\u8282\u70B9\u83B7\u53D6\u6210\u529F: ${p.label}
|
|
7
10
|
maxDepth: ${e}
|
|
8
|
-
timeout: ${
|
|
9
|
-
mode: ${
|
|
10
|
-
path: ${
|
|
11
|
-
size: ${Buffer.byteLength(
|
|
11
|
+
timeout: ${n}
|
|
12
|
+
mode: ${a}
|
|
13
|
+
path: ${f}
|
|
14
|
+
size: ${Buffer.byteLength(d,"utf8")} bytes`)}),t.registerTool("get_logs",{title:"Get Device Logs",description:"\u83B7\u53D6\u5F53\u524D\u9ED8\u8BA4\u8BBE\u5907\u7684\u6700\u65B0\u65E5\u5FD7\u884C\u3002",inputSchema:{limit:u.number().int().min(1).max(5e3).optional().default(200).describe("\u8FD4\u56DE\u6700\u8FD1\u65E5\u5FD7\u6761\u6570\uFF0C\u9ED8\u8BA4 200\uFF0C\u6700\u5927 5000")}},async({limit:e})=>{const n=await(0,i.resolveRuntimeHttpTarget)();return(0,i.createTextToolResult)(await(0,D.buildDeviceLogSnapshotText)(n,e))}),t.registerTool("package_project",{title:"Package Project",description:"\u6267\u884C\u751F\u4EA7\u6784\u5EFA\u5E76\u52A0\u5BC6\uFF0C\u8FD4\u56DE enc.msbundle \u8DEF\u5F84\u3002",inputSchema:{workspacePath:u.string().min(1).optional().describe("\u53EF\u9009\u5DE5\u4F5C\u76EE\u5F55\uFF1B\u4E0D\u4F20\u65F6\u4F7F\u7528 set_workspace \u8BB0\u5FC6\u503C")}},async({workspacePath:e})=>{const n=await o(e),a=await(0,P.packageProject)(n);return(0,i.createTextToolResult)(`\u6253\u5305\u5B8C\u6210: ${a}`)}),t.registerTool("run_project",{title:"Run Project",description:"\u6784\u5EFA\u5E76\u540C\u6B65\u5230\u5F53\u524D\u9ED8\u8BA4\u8BBE\u5907\u540E\u8FD0\u884C\u9879\u76EE\uFF0C\u4EC5\u4F7F\u7528 HTTP \u8BBE\u5907\u8FDE\u63A5\u3002",inputSchema:{workspacePath:u.string().min(1).optional().describe("\u53EF\u9009\u5DE5\u4F5C\u76EE\u5F55\uFF1B\u4E0D\u4F20\u65F6\u4F7F\u7528 set_workspace \u8BB0\u5FC6\u503C")}},async({workspacePath:e})=>{const n=await o(e),a=await(0,i.resolveRuntimeHttpTarget)();return await(0,m.runOnDevice)({...(0,i.createRuntimeHttpRequestOptions)(a),workspacePath:n}),(0,i.createTextToolResult)(`\u8FD0\u884C\u8BF7\u6C42\u5DF2\u53D1\u9001\u5230 ${a.label}`)}),t.registerTool("run_ui_project",{title:"Run UI Project",description:"\u6784\u5EFA\u5E76\u540C\u6B65\u5230\u5F53\u524D\u9ED8\u8BA4\u8BBE\u5907\u540E\u9884\u89C8 UI\uFF0C\u4EC5\u4F7F\u7528 HTTP \u8BBE\u5907\u8FDE\u63A5\u3002",inputSchema:{workspacePath:u.string().min(1).optional().describe("\u53EF\u9009\u5DE5\u4F5C\u76EE\u5F55\uFF1B\u4E0D\u4F20\u65F6\u4F7F\u7528 set_workspace \u8BB0\u5FC6\u503C")}},async({workspacePath:e})=>{const n=await o(e),a=await(0,i.resolveRuntimeHttpTarget)();return await(0,m.runUIOnDevice)({...(0,i.createRuntimeHttpRequestOptions)(a),workspacePath:n}),(0,i.createTextToolResult)(`UI \u9884\u89C8\u8BF7\u6C42\u5DF2\u53D1\u9001\u5230 ${a.label}`)}),t.registerTool("stop_project",{title:"Stop Project",description:"\u505C\u6B62\u5F53\u524D\u9ED8\u8BA4\u8BBE\u5907\u4E0A\u7684\u9879\u76EE\uFF0C\u4EC5\u4F7F\u7528 HTTP \u8BBE\u5907\u8FDE\u63A5\u3002",inputSchema:{}},async()=>{const e=await(0,i.resolveRuntimeHttpTarget)();return await(0,m.stopOnDevice)((0,i.createRuntimeHttpRequestOptions)(e)),(0,i.createTextToolResult)(`\u505C\u6B62\u8BF7\u6C42\u5DF2\u53D1\u9001\u5230 ${e.label}`)})}
|
package/dist/mcp-server.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var o=exports&&exports.__createBinding||(Object.create?(function(
|
|
2
|
+
"use strict";var o=exports&&exports.__createBinding||(Object.create?(function(r,e,n,t){t===void 0&&(t=n);var c=Object.getOwnPropertyDescriptor(e,n);(!c||("get"in c?!e.__esModule:c.writable||c.configurable))&&(c={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(r,t,c)}):(function(r,e,n,t){t===void 0&&(t=n),r[t]=e[n]})),s=exports&&exports.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),u=exports&&exports.__importStar||(function(){var r=function(e){return r=Object.getOwnPropertyNames||function(n){var t=[];for(var c in n)Object.prototype.hasOwnProperty.call(n,c)&&(t[t.length]=c);return t},r(e)};return function(e){if(e&&e.__esModule)return e;var n={};if(e!=null)for(var t=r(e),c=0;c<t.length;c++)t[c]!=="default"&&o(n,e,t[c]);return s(n,e),n}})();Object.defineProperty(exports,"__esModule",{value:!0});const i=u(require("fs-extra")),f=require("@modelcontextprotocol/sdk/server/stdio.js"),l=require("./mcp/tools"),a=require("./mcp/device-config"),_=require("./usb-forward");async function d(){const r=(0,l.createMcpServer)(),e=new f.StdioServerTransport,n=async()=>{try{await i.remove(a.DEVICE_CONFIG_FILE)}catch{}};process.once("SIGINT",()=>{n().catch(()=>{}).finally(()=>process.exit(0))}),process.once("SIGTERM",()=>{n().catch(()=>{}).finally(()=>process.exit(0))}),process.once("exit",()=>{try{i.removeSync(a.DEVICE_CONFIG_FILE)}catch{}});try{await(0,_.attachUsbForward)()}catch(t){const c=t instanceof Error?t.message:String(t);console.error(`USB \u8F6C\u53D1\u63A5\u5165\u5931\u8D25: ${c}`)}await r.connect(e)}d().catch(r=>{const e=r instanceof Error?r.message:String(r);console.error(`MCP \u670D\u52A1\u542F\u52A8\u5931\u8D25: ${e}`),process.exit(1)});
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type UsbForwardDevice } from "kuaijs-forward-service/daemon.js";
|
|
2
|
+
export type UsbDevice = UsbForwardDevice;
|
|
3
|
+
export declare function attachUsbForward(onChange?: (devices: UsbDevice[]) => void): Promise<void>;
|
|
4
|
+
export declare function getSharedUsbDevices(): UsbDevice[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.attachUsbForward=a,exports.getSharedUsbDevices=n;const s=require("kuaijs-forward-service/daemon.js");let r=[];function a(t){return(0,s.openClient)(e=>{r=e,t?.(e)},{name:"ms"}).ready}function n(){return r}
|
package/docs/api/config.md
CHANGED
|
@@ -117,25 +117,6 @@ if (maxRetries !== null) {
|
|
|
117
117
|
}
|
|
118
118
|
```
|
|
119
119
|
|
|
120
|
-
### getKuiConfig - 获取 KUI 的配置。
|
|
121
|
-
|
|
122
|
-
```typescript
|
|
123
|
-
function getKuiConfig(): Record<string, any>;
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
**返回值:**
|
|
127
|
-
|
|
128
|
-
| 类型 | 描述 |
|
|
129
|
-
| --------------------- | -------------------------------------------------------- |
|
|
130
|
-
| `Record<string, any>` | `KUI_CONFIG` 对应的对象,配置不存在或无法转换时返回空对象 |
|
|
131
|
-
|
|
132
|
-
**示例:**
|
|
133
|
-
|
|
134
|
-
```javascript
|
|
135
|
-
const kuiConfig = config.getKuiConfig();
|
|
136
|
-
logi(`KUI 配置: ${JSON.stringify(kuiConfig, null, 2)}`);
|
|
137
|
-
```
|
|
138
|
-
|
|
139
120
|
### remove - 删除指定的配置项。
|
|
140
121
|
|
|
141
122
|
```typescript
|
package/docs/apicn/config.md
CHANGED
|
@@ -115,25 +115,6 @@ const maxRetries = $配置.获取("maxRetries");
|
|
|
115
115
|
$打印信息日志(`最大重试次数: ${maxRetries}`);
|
|
116
116
|
```
|
|
117
117
|
|
|
118
|
-
### 获取KUI配置 - 获取 KUI 的配置。
|
|
119
|
-
|
|
120
|
-
```typescript
|
|
121
|
-
function 获取KUI配置(): 字典<任意类型>;
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
**返回值:**
|
|
125
|
-
|
|
126
|
-
| 类型 | 描述 |
|
|
127
|
-
| ---------------- | -------------------------------------------------------- |
|
|
128
|
-
| `字典<任意类型>` | `KUI_CONFIG` 对应的对象,配置不存在或无法转换时返回空对象 |
|
|
129
|
-
|
|
130
|
-
**示例:**
|
|
131
|
-
|
|
132
|
-
```javascript
|
|
133
|
-
const kuiConfig = $配置.获取KUI配置();
|
|
134
|
-
$打印信息日志(`KUI 配置: ${JSON.stringify(kuiConfig, null, 2)}`);
|
|
135
|
-
```
|
|
136
|
-
|
|
137
118
|
### 删除
|
|
138
119
|
|
|
139
120
|
```typescript
|
package/docs/apicn/global.md
CHANGED
package/docs/apilua/config.md
CHANGED
|
@@ -127,26 +127,6 @@ if maxRetries ~= nil then
|
|
|
127
127
|
end
|
|
128
128
|
```
|
|
129
129
|
|
|
130
|
-
### getKuiConfig - 获取 KUI 的配置。
|
|
131
|
-
|
|
132
|
-
```lua
|
|
133
|
-
---@return table
|
|
134
|
-
function getKuiConfig() end
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
**返回值:**
|
|
138
|
-
|
|
139
|
-
| 类型 | 描述 |
|
|
140
|
-
| --------------------- | -------------------------------------------------------- |
|
|
141
|
-
| `table` | `KUI_CONFIG` 对应的对象,配置不存在或无法转换时返回空对象 |
|
|
142
|
-
|
|
143
|
-
**示例:**
|
|
144
|
-
|
|
145
|
-
```lua
|
|
146
|
-
local kuiConfig = config.getKuiConfig()
|
|
147
|
-
print("KUI 配置: " .. tostring(ToJsonString(kuiConfig, nil, 2)))
|
|
148
|
-
```
|
|
149
|
-
|
|
150
130
|
### remove - 删除指定的配置项。
|
|
151
131
|
|
|
152
132
|
```lua
|
package/docs/apipython/config.md
CHANGED
|
@@ -121,26 +121,6 @@ if maxRetries:
|
|
|
121
121
|
print(f"最大重试次数: {maxRetries}")
|
|
122
122
|
```
|
|
123
123
|
|
|
124
|
-
### getKuiConfig - 获取 KUI 的配置。
|
|
125
|
-
|
|
126
|
-
```python
|
|
127
|
-
def getKuiConfig() -> Dict[str, Any]:
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
**返回值:**
|
|
131
|
-
|
|
132
|
-
| 类型 | 描述 |
|
|
133
|
-
| ---------------- | -------------------------------------------------------- |
|
|
134
|
-
| `Dict[str, Any]` | `KUI_CONFIG` 对应的字典,配置不存在或无法转换时返回空字典 |
|
|
135
|
-
|
|
136
|
-
**示例:**
|
|
137
|
-
|
|
138
|
-
```python
|
|
139
|
-
from kuaijs import config
|
|
140
|
-
kui_config = config.getKuiConfig()
|
|
141
|
-
print(f"KUI 配置: {kui_config}")
|
|
142
|
-
```
|
|
143
|
-
|
|
144
124
|
### remove - 删除指定的配置项。
|
|
145
125
|
|
|
146
126
|
```python
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ms-vite-plugin",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.2",
|
|
4
4
|
"type": "commonjs",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
"crc": "^4.3.2",
|
|
30
30
|
"fs-extra": "^11.3.5",
|
|
31
31
|
"jpeg-js": "^0.4.4",
|
|
32
|
+
"kuaijs-forward-service": "^0.1.1",
|
|
32
33
|
"magic-string": "^0.30.21",
|
|
33
34
|
"pngjs": "^7.0.0",
|
|
34
35
|
"uuid": "^14.0.0",
|