ms-vite-plugin 1.4.49 → 1.4.51
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/build.js +1 -1
- package/dist/cli.js +1 -1
- package/dist/mcp/doc-tools.js +1 -1
- package/dist/mcp/docs-service.js +1 -1
- package/dist/mcp/types.d.ts +1 -1
- package/dist/mcp/types.js +1 -1
- package/dist/project.js +1 -1
- package/docs/AGENTS.md +3 -2
- package/docs/SKILL.md +2 -1
- package/docs/apilua/action.md +1013 -0
- package/docs/apilua/appleocr.md +281 -0
- package/docs/apilua/cloud.md +183 -0
- package/docs/apilua/config.md +181 -0
- package/docs/apilua/cryptoUtils.md +253 -0
- package/docs/apilua/device.md +485 -0
- package/docs/apilua/dotocr.md +230 -0
- package/docs/apilua/file.md +554 -0
- package/docs/apilua/global.md +654 -0
- package/docs/apilua/hid.md +1126 -0
- package/docs/apilua/hotUpdate.md +167 -0
- package/docs/apilua/http.md +427 -0
- package/docs/apilua/image.md +1177 -0
- package/docs/apilua/ime.md +283 -0
- package/docs/apilua/logger.md +294 -0
- package/docs/apilua/media.md +283 -0
- package/docs/apilua/mysql.md +445 -0
- package/docs/apilua/netCard.md +224 -0
- package/docs/apilua/node.md +264 -0
- package/docs/apilua/opencv.md +870 -0
- package/docs/apilua/paddleocr.md +324 -0
- package/docs/apilua/pip.md +359 -0
- package/docs/apilua/system.md +686 -0
- package/docs/apilua/tomatoocr.md +461 -0
- package/docs/apilua/tts.md +330 -0
- package/docs/apilua/ui.md +1033 -0
- package/docs/apilua/utils.md +222 -0
- package/docs/apilua/yolo.md +324 -0
- package/docs/apilua/yolocls.md +276 -0
- package/docs/mcp-agent-description.md +5 -4
- package/docs/quick/vscode/createProject.md +84 -0
- package/docs/quick/vscode/packProject.md +17 -0
- package/package.json +2 -1
package/dist/build.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var J=Object.create;var O=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var M=Object.getPrototypeOf,q=Object.prototype.hasOwnProperty;var z=(t,e,i,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of $(e))!q.call(t,o)&&o!==i&&O(t,o,{get:()=>e[o],enumerable:!(s=x(e,o))||s.enumerable});return t};var L=(t,e,i)=>(i=t!=null?J(M(t)):{},z(e||!t||!t.__esModule?O(i,"default",{value:t,enumerable:!0}):i,t));var N=exports&&exports.__createBinding||(Object.create?(function(t,e,i,s){s===void 0&&(s=i);var o=Object.getOwnPropertyDescriptor(e,i);(!o||("get"in o?!e.__esModule:o.writable||o.configurable))&&(o={enumerable:!0,get:function(){return e[i]}}),Object.defineProperty(t,s,o)}):(function(t,e,i,s){s===void 0&&(s=i),t[s]=e[i]})),W=exports&&exports.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),_=exports&&exports.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(i){var s=[];for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(s[s.length]=o);return s},t(e)};return function(e){if(e&&e.__esModule)return e;var i={};if(e!=null)for(var s=t(e),o=0;o<s.length;o++)s[o]!=="default"&&N(i,e,s[o]);return W(i,e),i}})(),D=exports&&exports.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.buildAll=void 0;const A=D(require("archiver")),P=require("child_process"),r=_(require("fs-extra")),E=_(require("os")),n=_(require("path")),K=require("./stopGuardPlugin"),T=D(require("vite-plugin-bundle-obfuscator"));async function C(t,e){const i=(0,A.default)("zip",{zlib:{level:9}}),s=r.createWriteStream(e);return new Promise((o,c)=>{i.directory(t,!1).on("error",a=>c(a)).pipe(s),s.on("close",()=>o()),i.finalize()})}async function G(t,e){const i=[];async function s(o){const c=await r.readdir(o,{withFileTypes:!0});for(const a of c){const u=n.resolve(o,a.name);a.isDirectory()?await s(u):a.isFile()&&(/^main\.(js|ts)$/.test(a.name)||/_thread\.(js|ts)$/.test(a.name))&&i.push(n.relative(e,u))}}return await s(t),i}function B(){const t=[{cmd:n.join(E.homedir(),".KuaiJSDevloper","python","python.exe"),args:["--version"]},{cmd:n.join(E.homedir(),".KuaiJSDevloper","python","bin","python"),args:["--version"]},{cmd:"python",args:["--version"]},{cmd:"python3",args:["--version"]},{cmd:"python3.14",args:["--version"]}];for(const e of t)try{const i=(0,P.spawnSync)(e.cmd,e.args,{encoding:"utf8"}),s=(i.stdout||i.stderr||"").trim();if(s&&/Python\s+3\.14(\.\d+)?/i.test(s))return{ok:!0,path:e.cmd,version:s}}catch{}return{ok:!1}}async function R(t){async function e(i){const s=await r.readdir(i,{withFileTypes:!0});for(const o of s){const c=n.join(i,o.name);if(o.isDirectory())if(o.name==="__pycache__"){const a=await r.readdir(c,{withFileTypes:!0});for(const u of a){const b=n.join(c,u.name);if(u.isFile()&&u.name.endsWith(".cpython-314.pyc")){const v=n.dirname(c),m=u.name.replace(/\.cpython-314\.pyc$/,".pyc"),w=n.join(v,m);await r.move(b,w,{overwrite:!0})}}try{await r.remove(c)}catch{}}else await e(c);else if(o.isFile())if(o.name.endsWith(".cpython-314.pyc")){const a=c.replace(".cpython-314.pyc",".pyc");await r.move(c,a,{overwrite:!0})}else o.name.endsWith(".py")&&await r.remove(c)}}await e(t)}const H=async(t=!0,e)=>{const i=n.join(e,"scripts"),s=await r.pathExists(n.join(i,"main.js"))||await r.pathExists(n.join(i,"main.ts")),o=await r.pathExists(n.join(i,"main.py")),c=await r.pathExists(n.join(i,"main.lua"));if(s){console.log("\u{1F680} \u5F00\u59CB\u6784\u5EFAJavaScript\u9879\u76EE...");const{build:l}=await import("vite"),f=n.join(e,"obfuscator.json");await r.pathExists(f)||(console.error("\u274C \u9519\u8BEF: \u5F53\u524D\u76EE\u5F55\u4E0D\u662F\u6709\u6548\u7684 \u5FEB\u70B9JS \u9879\u76EE"),console.error("\u8BF7\u786E\u4FDD\u76EE\u5F55\u5305\u542B\u4EE5\u4E0B\u6587\u4EF6:"),console.error(" - obfuscator.json"),process.exit(1));const h=await r.readJSON(f),j=n.join(e,t?"dist":"msbundle"),d=await G(i,i);await r.remove(j);for(const p of d)await l({root:e,build:{lib:{entry:{[n.basename(p,n.extname(p))]:`./scripts/${p}`},fileName:()=>p.replace(/\.ts$/,".js"),formats:["iife"],name:"KuaiJS"},outDir:t?"dist/scripts":"msbundle/scripts",emptyOutDir:!1,sourcemap:t,minify:!t,target:"safari15"},plugins:[(0,K.createStopGuardPlugin)(),...t?[]:[h.enabled?(0,T.default)({autoExcludeNodeModules:!0,threadPool:!0,options:{...h,target:"browser",debugProtection:!1,disableConsoleOutput:!1,domainLock:[],selfDefending:!1,renameGlobals:!1,renameProperties:!1}}):[]]]})}if(t)return;const a=n.join(e,"msbundle");if(await r.ensureDir(a),(o||c)&&await r.copy(n.join(e,"scripts"),n.join(a,"scripts")),o){const l=B();if(l.ok){console.log(`\u2705 \u68C0\u6D4B\u5230 ${l.version} (${l.path})`);const f=(0,P.spawnSync)(l.path,["-m","compileall","scripts"],{encoding:"utf8",cwd:a});f.status===0?(console.log("\u2705 \u6210\u529F\u7F16\u8BD1\u6240\u6709 Python \u6587\u4EF6"),await R(n.join(a,"scripts"))):(console.error("\u274C \u7F16\u8BD1 Python \u6587\u4EF6\u5931\u8D25"),console.error(f.stderr),process.exit(1))}else console.warn("\u26A0\uFE0F \u672A\u68C0\u6D4B\u5230 Python 3.14\uFF0C\u8BF7\u786E\u4FDD\u5728\u76EE\u6807\u8FD0\u884C\u73AF\u5883\u5B89\u88C5 Python 3.14")}else if(c){const l=n.join(a,"scripts"),f=[],h=async d=>{const p=await r.readdir(d,{withFileTypes:!0});for(const y of p){const g=n.join(d,y.name);y.isDirectory()?await h(g):y.isFile()&&y.name.endsWith(".lua")&&f.push(g)}};await h(l);const j=n.resolve(process.cwd(),"node_modules/@gamely/prometheus-cli/bin/cli.js");await r.pathExists(j)||(console.error("\u274C \u672A\u627E\u5230 @gamely/prometheus-cli\uFF0C\u65E0\u6CD5\u6DF7\u6DC6 Lua"),process.exit(1));for(const d of f){const p=n.relative(l,d);console.log(`\u{1F6E0}\uFE0F \u6DF7\u6DC6 Lua: ${p}`);const y=(0,P.spawnSync)(process.execPath,[j,p,"--preset","Medium"],{cwd:l,encoding:"utf8"});y.status!==0&&(console.error("\u274C \u6DF7\u6DC6 Lua \u5931\u8D25:",p),console.error(y.stderr||y.stdout||""),process.exit(1));const g=p.replace(/\.lua$/,".obfuscated.lua"),S=n.join(l,g);await r.pathExists(S)&&(await r.remove(d),await r.move(S,d,{overwrite:!0}))}console.log("\u2705 Lua \u6DF7\u6DC6\u5B8C\u6210")}await r.copy(n.join(e,"res"),n.join(a,"res")),await r.copy(n.join(e,"ui"),n.join(a,"ui"));for(const l of["logo.jpg","logo.png"]){const f=n.join(e,l);await r.pathExists(f)&&await r.copy(f,n.join(a,l))}const u=n.join(e,"dist"),b=n.join(e,"package.json"),v=n.join(a,"package.json"),m=await r.readJSON(b);delete m.scripts,delete m.devDependencies,delete m.dependencies,await r.writeJSON(v,m,{spaces:2}),await r.emptyDir(u);const w=n.join(u,"ms.zip"),F=n.join(u,"ms.msbundle");await C(a,w),await r.rename(w,F),await r.remove(a)};exports.buildAll=H;
|
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var R=exports&&exports.__createBinding||(Object.create?(function(e,t,r,o){o===void 0&&(o=r);var n=Object.getOwnPropertyDescriptor(t,r);(!n||("get"in n?!t.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,o,n)}):(function(e,t,r,o){o===void 0&&(o=r),e[o]=t[r]})),J=exports&&exports.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),N=exports&&exports.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(r){var o=[];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(o[o.length]=n);return o},e(t)};return function(t){if(t&&t.__esModule)return t;var r={};if(t!=null)for(var o=e(t),n=0;n<o.length;n++)o[n]!=="default"&&R(r,t,o[n]);return J(r,t),r}})();Object.defineProperty(exports,"__esModule",{value:!0});const c=require("commander"),M=N(require("os")),m=N(require("path")),G=require("./build"),p=N(require("fs-extra")),h=require("./project"),W=require("./packager"),H=require("./ws-manager"),k=require("./version"),A=require("./mcp/docs-service"),L=require("./mcp/httpapi-docs-service"),j=require("./mcp/tool-utils"),B=require("./mcp/types"),x=require("./mcp/ocr-tools"),P=require("./mcp/image-tools"),d=m.join(M.tmpdir(),"ms-cli-ws-server.json");async function U(e){try{const t=m.join(e,"package.json"),r=m.join(e,"scripts"),[o,n]=await Promise.all([p.pathExists(t),p.pathExists(r)]);return o&&n}catch{return!1}}async function C(e){await U(e)||(console.error("\u274C \u9519\u8BEF: \u5F53\u524D\u76EE\u5F55\u4E0D\u662F\u6709\u6548\u7684 \u5FEB\u70B9JS \u9879\u76EE"),console.error("\u8BF7\u786E\u4FDD\u76EE\u5F55\u5305\u542B\u4EE5\u4E0B\u6587\u4EF6:"),console.error(" - package.json"),console.error(" - scripts/ \u76EE\u5F55"),process.exit(1))}function a(e,t,r,o,n){const i=(e??String(t)).trim(),s=Number.parseInt(i,10);if(!Number.isInteger(s)||s<o||n!==void 0&&s>n)throw new Error(`\u65E0\u6548 ${r}: ${i}\uFF0C\u5141\u8BB8\u8303\u56F4 ${o}${n===void 0?"+":`..${n}`}`);return s}function F(e,t,r,o,n){const i=(e??String(t)).trim(),s=Number.parseFloat(i);if(!Number.isFinite(s)||s<o||s>n)throw new Error(`\u65E0\u6548 ${r}: ${i}\uFF0C\u5141\u8BB8\u8303\u56F4 ${o}..${n}`);return s}function g(e,t,r,o){const n=(e??t).trim();if(!r.includes(n))throw new Error(`\u65E0\u6548 ${o}: ${n}\uFF0C\u53EF\u9009\u503C: ${r.join("|")}`);return n}function V(e){const t=e?.trim().toUpperCase();return g(t,"GET",["GET","POST"],"method")}function E(e){const t=e.ip?.trim();if(!t)throw new Error("\u8BF7\u901A\u8FC7 --ip \u6307\u5B9A\u8BBE\u5907 IP \u5730\u5740");const r=a(e.port,9800,"port",1,65535);return{ip:t,port:String(r),label:`${t}:${r}`}}async function $(e,t,r){if(t?.trim()){const o=m.resolve(t.trim());await p.ensureDir(m.dirname(o)),await p.writeFile(o,e,"utf8"),console.log(`\u2705 ${r}: ${o}`);return}console.log(e)}function z(){const e=["js","js_zh","python"];return["KuaiJS \u6587\u6863\u8DEF\u5F84:",`docsRoot: ${(0,A.getDocsRootDir)()}`,...e.map(t=>`${t}: ${(0,A.getDocsDirByLanguage)(t)} (${B.DOC_LANGUAGE_LABELS[t]})`),`httpApi: ${(0,L.getHttpApiDocPath)()}`,"\u8BF4\u660E: \u76F4\u63A5\u8BFB\u53D6\u4E0A\u8FF0 markdown \u8DEF\u5F84\u3002"].join(`
|
|
2
|
+
"use strict";var R=exports&&exports.__createBinding||(Object.create?(function(e,t,r,o){o===void 0&&(o=r);var n=Object.getOwnPropertyDescriptor(t,r);(!n||("get"in n?!t.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,o,n)}):(function(e,t,r,o){o===void 0&&(o=r),e[o]=t[r]})),J=exports&&exports.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),N=exports&&exports.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(r){var o=[];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(o[o.length]=n);return o},e(t)};return function(t){if(t&&t.__esModule)return t;var r={};if(t!=null)for(var o=e(t),n=0;n<o.length;n++)o[n]!=="default"&&R(r,t,o[n]);return J(r,t),r}})();Object.defineProperty(exports,"__esModule",{value:!0});const c=require("commander"),M=N(require("os")),m=N(require("path")),G=require("./build"),p=N(require("fs-extra")),h=require("./project"),W=require("./packager"),H=require("./ws-manager"),k=require("./version"),A=require("./mcp/docs-service"),L=require("./mcp/httpapi-docs-service"),j=require("./mcp/tool-utils"),B=require("./mcp/types"),x=require("./mcp/ocr-tools"),P=require("./mcp/image-tools"),d=m.join(M.tmpdir(),"ms-cli-ws-server.json");async function U(e){try{const t=m.join(e,"package.json"),r=m.join(e,"scripts"),[o,n]=await Promise.all([p.pathExists(t),p.pathExists(r)]);return o&&n}catch{return!1}}async function C(e){await U(e)||(console.error("\u274C \u9519\u8BEF: \u5F53\u524D\u76EE\u5F55\u4E0D\u662F\u6709\u6548\u7684 \u5FEB\u70B9JS \u9879\u76EE"),console.error("\u8BF7\u786E\u4FDD\u76EE\u5F55\u5305\u542B\u4EE5\u4E0B\u6587\u4EF6:"),console.error(" - package.json"),console.error(" - scripts/ \u76EE\u5F55"),process.exit(1))}function a(e,t,r,o,n){const i=(e??String(t)).trim(),s=Number.parseInt(i,10);if(!Number.isInteger(s)||s<o||n!==void 0&&s>n)throw new Error(`\u65E0\u6548 ${r}: ${i}\uFF0C\u5141\u8BB8\u8303\u56F4 ${o}${n===void 0?"+":`..${n}`}`);return s}function F(e,t,r,o,n){const i=(e??String(t)).trim(),s=Number.parseFloat(i);if(!Number.isFinite(s)||s<o||s>n)throw new Error(`\u65E0\u6548 ${r}: ${i}\uFF0C\u5141\u8BB8\u8303\u56F4 ${o}..${n}`);return s}function g(e,t,r,o){const n=(e??t).trim();if(!r.includes(n))throw new Error(`\u65E0\u6548 ${o}: ${n}\uFF0C\u53EF\u9009\u503C: ${r.join("|")}`);return n}function V(e){const t=e?.trim().toUpperCase();return g(t,"GET",["GET","POST"],"method")}function E(e){const t=e.ip?.trim();if(!t)throw new Error("\u8BF7\u901A\u8FC7 --ip \u6307\u5B9A\u8BBE\u5907 IP \u5730\u5740");const r=a(e.port,9800,"port",1,65535);return{ip:t,port:String(r),label:`${t}:${r}`}}async function $(e,t,r){if(t?.trim()){const o=m.resolve(t.trim());await p.ensureDir(m.dirname(o)),await p.writeFile(o,e,"utf8"),console.log(`\u2705 ${r}: ${o}`);return}console.log(e)}function z(){const e=["js","js_zh","python","lua"];return["KuaiJS \u6587\u6863\u8DEF\u5F84:",`docsRoot: ${(0,A.getDocsRootDir)()}`,...e.map(t=>`${t}: ${(0,A.getDocsDirByLanguage)(t)} (${B.DOC_LANGUAGE_LABELS[t]})`),`httpApi: ${(0,L.getHttpApiDocPath)()}`,"\u8BF4\u660E: \u76F4\u63A5\u8BFB\u53D6\u4E0A\u8FF0 markdown \u8DEF\u5F84\u3002"].join(`
|
|
3
3
|
`)}function K(e,t){return t.push(e),t}function q(e,t){const r=e?.trim();if(!r)return;if(r.startsWith("[")){const n=JSON.parse(r);if(!Array.isArray(n)||!n.every(i=>typeof i=="string"&&i.trim()))throw new Error(`${t} \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u6570\u7EC4\u3002`);return n.map(i=>i.trim())}const o=r.split(",").map(n=>n.trim()).filter(n=>n.length>0);if(o.length===0)throw new Error(`${t} \u4E0D\u80FD\u4E3A\u7A7A\u3002`);return o}function X(e){const t=q(e,"languages");if(!t)return;const r=new Set(x.APPLE_OCR_LANGUAGES),o=t.filter(n=>!r.has(n));if(o.length>0)throw new Error(`\u65E0\u6548 languages: ${o.join(", ")}\uFF0C\u53EF\u9009\u503C: ${x.APPLE_OCR_LANGUAGES.join(", ")}`);return t}function Q(e,t){const r=e?.trim();if(!r)return;const o=JSON.parse(r);if(!o||typeof o!="object"||Array.isArray(o)||!Object.values(o).every(n=>typeof n=="string"||typeof n=="number"||typeof n=="boolean"||n===null))throw new Error(`${t} \u5FC5\u987B\u662F JSON \u5BF9\u8C61\uFF0C\u4E14\u503C\u53EA\u80FD\u662F string/number/boolean/null\u3002`);return o}function Y(e){const t=e?.trim();if(!(t===void 0||t.length===0))try{return JSON.parse(t)}catch{return e}}function Z(e){const t=e.trim();if(/^https?:\/\//i.test(t))throw new Error("path \u53EA\u80FD\u4F20 HTTP API \u76F8\u5BF9\u8DEF\u5F84\uFF0C\u4E0D\u80FD\u4F20\u5B8C\u6574 URL\u3002");if(!t.startsWith("/"))throw new Error("path \u5FC5\u987B\u4EE5 / \u5F00\u5934\uFF0C\u4F8B\u5982 /api/status\u3002");if(t.includes("?"))throw new Error("path \u4E0D\u80FD\u5305\u542B query string\uFF0C\u8BF7\u4F7F\u7528 --query \u4F20\u9012\u67E5\u8BE2\u53C2\u6570\u3002");return t}function tt(e,t){if(t)for(const[r,o]of Object.entries(t))o!==null&&e.searchParams.set(r,String(o))}function et(e){return e===void 0?{}:{headers:{"Content-Type":"application/json"},requestBody:JSON.stringify(e)}}async function ot(e,t){const r=await e.text();return t==="text"?r:(0,j.formatRuntimeJsonText)(JSON.parse(r))}async function rt(e){try{const t=process.cwd(),r=e.dev||!1;console.log(`\u{1F50D} \u68C0\u67E5\u9879\u76EE\u76EE\u5F55: ${t}`),await C(t),console.log(`\u{1F680} \u5F00\u59CB\u6784\u5EFA\u9879\u76EE (${r?"\u5F00\u53D1\u6A21\u5F0F":"\u751F\u4EA7\u6A21\u5F0F"})...`),await(0,G.buildAll)(r,t),console.log("\u2705 \u6784\u5EFA\u5B8C\u6210!")}catch(t){console.error("\u274C \u6784\u5EFA\u5931\u8D25:",t instanceof Error?t.message:t),process.exit(1)}}async function nt(){try{const e=process.cwd();console.log(`\u{1F50D} \u68C0\u67E5\u9879\u76EE\u76EE\u5F55: ${e}`),await C(e),console.log("\u{1F4E6} \u5F00\u59CB\u6253\u5305\u751F\u4EA7\u6784\u5EFA\u5E76\u52A0\u5BC6 bundle...");const t=await(0,W.packageProject)(e);console.log(`\u2705 \u6253\u5305\u5B8C\u6210: ${t}`)}catch(e){console.error("\u274C \u6253\u5305\u5931\u8D25:",e instanceof Error?e.message:e),process.exit(1)}}async function it(e){try{const t=process.cwd();await C(t),await(0,h.runOnDevice)(e)}catch(t){console.error("\u274C \u8FD0\u884C\u5931\u8D25:",t instanceof Error?t.message:t),process.exit(1)}}async function st(e){try{const t=process.cwd();await C(t),await(0,h.runUIOnDevice)(e)}catch(t){console.error("\u274C UI \u9884\u89C8\u5931\u8D25:",t instanceof Error?t.message:t),process.exit(1)}}async function at(e){try{await(0,h.stopOnDevice)(e)}catch(t){console.error("\u274C \u505C\u6B62\u5931\u8D25:",t instanceof Error?t.message:t),process.exit(1)}}async function ct(e){try{if((e.format??"file")==="base64"){const n=await(0,h.getScreenshotBase64OnDevice)(e);console.log(n);return}const r=await(0,h.getScreenshotOnDevice)(e),o=e.output?.trim()?m.resolve(e.output.trim()):m.resolve(process.cwd(),"screenshot.jpg");await p.ensureDir(m.dirname(o)),await p.writeFile(o,r),console.log(`\u2705 \u622A\u56FE\u6210\u529F: ${o} (${r.length} bytes)`)}catch(t){console.error("\u274C \u622A\u56FE\u5931\u8D25:",t instanceof Error?t.message:t),process.exit(1)}}async function pt(e){try{const t=(e.maxDepth??"50").trim(),r=(e.timeout??"120").trim(),o=(e.mode??"1").trim(),n=Number.parseInt(t,10),i=Number.parseInt(r,10),s=Number.parseInt(o,10);if(!Number.isInteger(n)||n<1)throw new Error(`\u65E0\u6548 max-depth: ${t}`);if(!Number.isInteger(i)||i<1)throw new Error(`\u65E0\u6548 timeout: ${r}`);if(!Number.isInteger(s)||s!==1&&s!==2&&s!==3)throw new Error(`\u65E0\u6548 mode: ${o}`);const u=await(0,h.getSourceOnDevice)(e,n,i,s);if(e.output?.trim()){const l=m.resolve(e.output.trim());await p.ensureDir(m.dirname(l)),await p.writeFile(l,u,"utf8"),console.log(`\u2705 \u8282\u70B9\u5DF2\u4FDD\u5B58: ${l}`);return}console.log(u)}catch(t){console.error("\u274C \u83B7\u53D6\u8282\u70B9\u5931\u8D25:",t instanceof Error?t.message:t),process.exit(1)}}async function ut(e){try{const t=a(e.limit,200,"limit",1,5e3),r=g(e.format,"text",["text","json"],"format"),o=await(0,h.getCurrentLogLinesOnDevice)(e,t),n=r==="json"?(0,j.formatRuntimeJsonText)(o):o.lines.length>0?o.lines.join(`
|
|
4
4
|
`):"\u65E0\u65E5\u5FD7";await $(n,e.output,"\u65E5\u5FD7\u5DF2\u4FDD\u5B58"),r==="text"&&o.hasMore&&!e.output?.trim()&&console.error(`\u8FD8\u6709\u66F4\u65E9\u65E5\u5FD7\uFF0C\u53EF\u589E\u5927 --limit\uFF0C\u5F53\u524D\u6700\u591A ${t} \u884C\u3002`)}catch(t){console.error("\u274C \u83B7\u53D6\u65E5\u5FD7\u5931\u8D25:",t instanceof Error?t.message:t),process.exit(1)}}async function mt(e){try{await $(z(),e.output,"\u6587\u6863\u8DEF\u5F84\u5DF2\u4FDD\u5B58")}catch(t){console.error("\u274C \u8F93\u51FA\u6587\u6863\u8DEF\u5F84\u5931\u8D25:",t instanceof Error?t.message:t),process.exit(1)}}async function dt(e){try{const t=E(e),r=V(e.method),o=Z(e.path??""),n=await(0,L.findHttpApiDocEntry)(o,r);if(!n)throw new Error(`HTTP API \u6587\u6863\u4E2D\u4E0D\u5B58\u5728\u8BE5\u63A5\u53E3: ${r} ${o}\u3002\u8BF7\u5148\u8BFB\u53D6 docs paths \u8FD4\u56DE\u7684 HTTP API \u6587\u6863\u8DEF\u5F84\u3002`);const i=Q(e.query,"query"),s=Y(e.body);if(r==="GET"&&s!==void 0)throw new Error("GET \u63A5\u53E3\u4E0D\u80FD\u4F20 body\uFF0C\u8BF7\u4F7F\u7528 --query\u3002");const u=g(e.responseFormat,"json",["json","text"],"response-format"),l=a(e.timeoutMs,3e4,"timeout-ms",1e3,6e5),w=new URL(`http://${t.ip}:${t.port}${o}`);tt(w,i);const S=new AbortController,I=setTimeout(()=>S.abort(),l);try{const{headers:b,requestBody:y}=et(s),f=await fetch(w.toString(),{method:r,signal:S.signal,headers:b,body:y}),T=await ot(f,u),_=[`HTTP API \u8C03\u7528${f.ok?"\u6210\u529F":"\u5931\u8D25"}: ${r} ${o}`,`\u8BBE\u5907: ${t.label}`,`\u6587\u6863: ${n.title} (lines ${n.startLine}-${n.endLine})`,`\u72B6\u6001\u7801: ${f.status}`,"",T].join(`
|
|
5
5
|
`);await $(_,e.output,"HTTP API \u54CD\u5E94\u5DF2\u4FDD\u5B58"),f.ok||process.exit(1)}finally{clearTimeout(I)}}catch(t){const r=t instanceof Error&&t.name==="AbortError"?"\u8BF7\u6C42\u8D85\u65F6":t instanceof Error?t.message:String(t);console.error("\u274C HTTP API \u8C03\u7528\u5931\u8D25:",r),process.exit(1)}}async function lt(e){try{const t=E(e),r=g(e.engine,"appleocr",["appleocr","paddleocr"],"engine"),o=g(e.mode,"recognize",["recognize","numbers","findText"],"mode"),n=e.input?.trim()||"screen",i=a(e.x,0,"x",0),s=a(e.y,0,"y",0),u=a(e.ex,0,"ex",0),l=a(e.ey,0,"ey",0),w=[...q(e.texts,"texts")??[],...e.text??[]],S=w.length>0?w:void 0,I=X(e.languages),b=F(e.confidenceThreshold,.6,"confidence-threshold",0,1),y=e.paddleModel===void 0?void 0:g(e.paddleModel,x.PADDLE_OCR_MODELS[0],x.PADDLE_OCR_MODELS,"paddle-model"),f=e.maxSideLen===void 0?void 0:a(e.maxSideLen,0,"max-side-len",0),T=e.useGpu===!0?!0:void 0,_=a(e.timeoutMs,6e4,"timeout-ms",1e3,6e5),v=g(e.format,"summary",["summary","json"],"format"),O=await(0,x.runOcrRecognitionOnDevice)(t,{engine:r,mode:o,input:n,x:i,y:s,ex:u,ey:l,texts:S,languages:I,confidenceThreshold:b,exactMatch:e.exactMatch===!0,paddleModel:y,maxSideLen:f,useGpu:T,outputPath:v==="summary"?e.output:void 0,timeoutMs:_}),D=v==="json"?(0,j.formatRuntimeJsonText)(O.body):O.text;v==="json"?await $(D,e.output,"OCR \u7ED3\u679C\u5DF2\u4FDD\u5B58"):console.log([D,"",`device: ${t.label}`,`engine: ${r}`,`mode: ${o}`,`input: ${n}`,`region: x=${i}, y=${s}, ex=${u}, ey=${l}`,...r==="paddleocr"&&y?[`paddleModel: ${y}`]:[],...r==="paddleocr"&&f!==void 0?[`maxSideLen: ${f}`]:[],`status: ${O.status}`].join(`
|
package/dist/mcp/doc-tools.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.registerDocTools=n;const o=require("./docs-service"),s=require("./httpapi-docs-service"),r=require("./tool-utils"),c=require("./types");function i(){const t=["js","js_zh","python"];return["KuaiJS \u6587\u6863\u8DEF\u5F84:",`docsRoot: ${(0,o.getDocsRootDir)()}`,...t.map(e=>`${e}: ${(0,o.getDocsDirByLanguage)(e)} (${c.DOC_LANGUAGE_LABELS[e]})`),`httpApi: ${(0,s.getHttpApiDocPath)()}`,"\u8BF4\u660E: \u76F4\u63A5\u8BFB\u53D6\u4E0A\u8FF0 markdown \u8DEF\u5F84\u3002"].join(`
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.registerDocTools=n;const o=require("./docs-service"),s=require("./httpapi-docs-service"),r=require("./tool-utils"),c=require("./types");function i(){const t=["js","js_zh","python","lua"];return["KuaiJS \u6587\u6863\u8DEF\u5F84:",`docsRoot: ${(0,o.getDocsRootDir)()}`,...t.map(e=>`${e}: ${(0,o.getDocsDirByLanguage)(e)} (${c.DOC_LANGUAGE_LABELS[e]})`),`httpApi: ${(0,s.getHttpApiDocPath)()}`,"\u8BF4\u660E: \u76F4\u63A5\u8BFB\u53D6\u4E0A\u8FF0 markdown \u8DEF\u5F84\u3002"].join(`
|
|
2
2
|
`)}function n(t){t.registerTool("get_docs_paths",{title:"Get Docs Paths",description:"\u83B7\u53D6 KuaiJS \u672C\u5730\u6587\u6863\u8DEF\u5F84\uFF0C\u4FBF\u4E8E AI \u76F4\u63A5\u8BFB\u53D6 markdown \u6587\u4EF6\u800C\u4E0D\u662F\u731C\u6D4B\u4F4D\u7F6E\u3002",inputSchema:{}},async()=>(0,r.createTextToolResult)(i()))}
|
package/dist/mcp/docs-service.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var c=exports&&exports.__createBinding||(Object.create?(function(
|
|
1
|
+
"use strict";var c=exports&&exports.__createBinding||(Object.create?(function(t,e,i,r){r===void 0&&(r=i);var n=Object.getOwnPropertyDescriptor(e,i);(!n||("get"in n?!e.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return e[i]}}),Object.defineProperty(t,r,n)}):(function(t,e,i,r){r===void 0&&(r=i),t[r]=e[i]})),f=exports&&exports.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),o=exports&&exports.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(i){var r=[];for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&(r[r.length]=n);return r},t(e)};return function(e){if(e&&e.__esModule)return e;var i={};if(e!=null)for(var r=t(e),n=0;n<r.length;n++)r[n]!=="default"&&c(i,e,r[n]);return f(i,e),i}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.getDocsRootDir=a,exports.getDocsDirByLanguage=l;const u=o(require("path"));function a(){return u.resolve(__dirname,"..","..","docs")}function l(t){return t==="js"?u.join(a(),"api"):t==="js_zh"?u.join(a(),"apicn"):t==="lua"?u.join(a(),"apilua"):u.join(a(),"apipython")}
|
package/dist/mcp/types.d.ts
CHANGED
|
@@ -3,5 +3,5 @@ export type DeviceConfig = {
|
|
|
3
3
|
port: number;
|
|
4
4
|
updatedAt: number;
|
|
5
5
|
};
|
|
6
|
-
export type ApiDocsLanguage = "js" | "js_zh" | "python";
|
|
6
|
+
export type ApiDocsLanguage = "js" | "js_zh" | "python" | "lua";
|
|
7
7
|
export declare const DOC_LANGUAGE_LABELS: Record<ApiDocsLanguage, string>;
|
package/dist/mcp/types.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.DOC_LANGUAGE_LABELS=void 0,exports.DOC_LANGUAGE_LABELS={js:"JavaScript",js_zh:"JavaScript (\u4E2D\u6587)",python:"Python"};
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.DOC_LANGUAGE_LABELS=void 0,exports.DOC_LANGUAGE_LABELS={js:"JavaScript",js_zh:"JavaScript (\u4E2D\u6587)",python:"Python",lua:"Lua"};
|
package/dist/project.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var D=exports&&exports.__createBinding||(Object.create?(function(t,e,r,n){n===void 0&&(n=r);var s=Object.getOwnPropertyDescriptor(e,r);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,s)}):(function(t,e,r,n){n===void 0&&(n=r),t[n]=e[r]})),F=exports&&exports.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),v=exports&&exports.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(r){var n=[];for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(n[n.length]=s);return n},t(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var n=t(e),s=0;s<n.length;s++)n[s]!=="default"&&D(r,e,n[s]);return F(r,e),r}})(),I=exports&&exports.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getScreenshotOnDevice=L,exports.getScreenshotBase64OnDevice=U,exports.getSourceOnDevice=k,exports.getCurrentLogLinesOnDevice=A,exports.runOnDevice=z,exports.runUIOnDevice=G,exports.stopOnDevice=V;const f=v(require("fs-extra")),w=v(require("path")),T=require("./build"),N=I(require("crc")),h=require("./ws-manager");function g(t){const e=t.ip?.trim(),r=(t.port??"9800").trim(),n=Number.parseInt(r,10);if(!e)throw new Error("\u8BF7\u901A\u8FC7 --ip \u6307\u5B9A\u8BBE\u5907 IP \u5730\u5740");if(!Number.isInteger(n)||n<1||n>65535)throw new Error(`\u65E0\u6548\u7AEF\u53E3: ${r}`);return{ip:e,port:n}}function q(t){const e=(t.wsPort??"31111").trim(),r=(t.wsWaitMs??"30000").trim(),n=Number.parseInt(e,10),s=Number.parseInt(r,10);if(!Number.isInteger(n)||n<1||n>65535)throw new Error(`\u65E0\u6548 ws \u7AEF\u53E3: ${e}`);if(!Number.isInteger(s)||s<1)throw new Error(`\u65E0\u6548 ws \u7B49\u5F85\u65F6\u95F4: ${r}`);return{wsPort:n,wsWaitMs:s}}function d(t){const e=(t.transport??"http").trim().toLowerCase();if(e!=="http"&&e!=="ws")throw new Error(`\u65E0\u6548 transport: ${e}`);return e}async function j(t){const e=await f.readFile(t);return N.default.crc32(e).toString(16).padStart(8,"0")}async function b(t,e){const r=[];async function n(s){const i=await f.readdir(s,{withFileTypes:!0});for(const c of i){const o=w.join(s,c.name);if(c.isDirectory())await n(o);else if(c.isFile()){const a=w.relative(t,o).replace(/\\/g,"/"),l=await f.stat(o);r.push({path:o,bundlePath:`${e}/${a}`,size:l.size,crc32:await j(o)})}}}return await f.pathExists(t)&&await n(t),r}async function E(t){const e=w.join(t,"package.json"),r=await f.readJSON(e),n=r.name,s=r.appVersion;if(!n)throw new Error("\u8BF7\u5728 package.json \u4E2D\u6DFB\u52A0 name \u5B57\u6BB5");if(!s)throw new Error("\u8BF7\u5728 package.json \u4E2D\u6DFB\u52A0 appVersion \u5B57\u6BB5");return{projectName:n,appVersion:s,packageJsonPath:e}}async function _(t){let e=w.join(t,"dist","scripts");await f.pathExists(w.join(t,"scripts","main.py"))&&(e=w.join(t,"scripts"));const n=w.join(t,"ui"),s=w.join(t,"res"),i=w.join(t,"package.json"),c=[{path:i,bundlePath:"package.json",size:(await f.stat(i)).size,crc32:await j(i)}],[o,a,l]=await Promise.all([b(e,"scripts"),b(n,"ui"),b(s,"res")]);return c.push(...o,...a,...l),c}async function O(t){await(0,T.buildAll)(!0,t)}async function B(t,e,r){const n=new URL(`http://${t}:${e}/api/files`);n.searchParams.set("projectName",r);const s=await fetch(n.toString(),{method:"GET"});if(!s.ok)throw new Error(`\u6587\u4EF6\u5217\u8868\u8BF7\u6C42\u5931\u8D25: ${s.statusText}`);const i=await s.json();return Array.isArray(i)?i:[]}async function C(t){const e=await h.WSManager.request("files",{projectName:t});if(!e.success)throw new Error(`\u6587\u4EF6\u5217\u8868\u8BF7\u6C42\u5931\u8D25: ${String(e.message??"unknown")}`);const r=e.data;return Array.isArray(r)?r:[]}async function M(t,e,r){const{projectName:n,appVersion:s}=await E(t);console.log("\u{1F50E} \u6B63\u5728\u83B7\u53D6\u8BBE\u5907\u6587\u4EF6\u5217\u8868...");const i=await B(e,r,n),c=new Map(i.map(u=>[u.path,u]));console.log("\u{1F4C2} \u6B63\u5728\u5206\u6790\u9879\u76EE\u6587\u4EF6...");const o=await _(t),a=[];for(const u of o){const p=c.get(u.bundlePath),y=u.bundlePath.includes("main.js")||u.bundlePath.includes("main.py");if(!p){a.push(u);continue}const S=p.size!==u.size||p.crc32.toLowerCase()!==u.crc32.toLowerCase();(y||S)&&a.push(u)}if(console.log(`\u{1F4E6} \u53D1\u73B0 ${a.length} \u4E2A\u6587\u4EF6\u9700\u8981\u540C\u6B65`),a.length===0){console.log("\u2705 \u65E0\u9700\u540C\u6B65\u6587\u4EF6");return}let l=0;for(const u of a){l+=1,console.log(`\u2B06\uFE0F [${l}/${a.length}] \u540C\u6B65 ${u.bundlePath}`);const p=await f.readFile(u.path),y=new URL(`http://${e}:${r}/debug/patchSync`);y.searchParams.set("path",u.bundlePath),y.searchParams.set("projectName",n),y.searchParams.set("appVersion",s);const S=await fetch(y.toString(),{method:"POST",headers:{"Content-Type":"application/octet-stream"},body:p});if(!S.ok)throw new Error(`\u540C\u6B65\u5931\u8D25: ${u.bundlePath} (\u72B6\u6001\u7801: ${S.status})`)}console.log(`\u2705 \u540C\u6B65\u5B8C\u6210\uFF0C\u5171 ${a.length} \u4E2A\u6587\u4EF6`)}async function W(t){const{projectName:e,appVersion:r}=await E(t);console.log("\u{1F50E} \u6B63\u5728\u83B7\u53D6\u8BBE\u5907\u6587\u4EF6\u5217\u8868...");const n=await C(e),s=new Map(n.map(a=>[a.path,a]));console.log("\u{1F4C2} \u6B63\u5728\u5206\u6790\u9879\u76EE\u6587\u4EF6...");const i=await _(t),c=[];for(const a of i){const l=s.get(a.bundlePath),u=a.bundlePath.includes("main.js")||a.bundlePath.includes("main.py");if(!l){c.push(a);continue}const p=l.size!==a.size||l.crc32.toLowerCase()!==a.crc32.toLowerCase();(u||p)&&c.push(a)}if(console.log(`\u{1F4E6} \u53D1\u73B0 ${c.length} \u4E2A\u6587\u4EF6\u9700\u8981\u540C\u6B65`),c.length===0){console.log("\u2705 \u65E0\u9700\u540C\u6B65\u6587\u4EF6");return}let o=0;for(const a of c){o+=1,console.log(`\u2B06\uFE0F [${o}/${c.length}] \u540C\u6B65 ${a.bundlePath}`);const l=await f.readFile(a.path),u=await h.WSManager.request("patchSync",{path:a.bundlePath,data:l.toString("base64"),projectName:e,appVersion:r});if(!u.success)throw new Error(`\u540C\u6B65\u5931\u8D25: ${a.bundlePath} ${String(u.message??"")}`)}console.log(`\u2705 \u540C\u6B65\u5B8C\u6210\uFF0C\u5171 ${c.length} \u4E2A\u6587\u4EF6`)}async function P(t,e,r){const n=`http://${e}:${r}/api/${t}`,s=await fetch(n,{method:"GET"});if(!s.ok)throw new Error(`${t} \u5931\u8D25\uFF0C\u72B6\u6001\u7801: ${s.status}`)}async function L(t){if(d(t)==="ws"){await $(t);const o=await h.WSManager.request("screenshot");if(!o.success||typeof o.data!="string")throw new Error(`\u622A\u56FE\u5931\u8D25: ${String(o.message??"unknown")}`);return Buffer.from(o.data,"base64")}const{ip:r,port:n}=g(t),s=`http://${r}:${n}/api/screenshot`,i=await fetch(s,{method:"GET"});if(!i.ok)throw new Error(`\u622A\u56FE\u5931\u8D25\uFF0C\u72B6\u6001\u7801: ${i.status}`);const c=await i.arrayBuffer();return Buffer.from(c)}async function U(t){if(d(t)==="ws"){await $(t);const o=await h.WSManager.request("screenshot");if(!o.success||typeof o.data!="string")throw new Error(`\u622A\u56FE(base64)\u5931\u8D25: ${String(o.message??"unknown")}`);return o.data}const{ip:r,port:n}=g(t),s=`http://${r}:${n}/api/screenshotBase64`,i=await fetch(s,{method:"GET"});if(!i.ok)throw new Error(`\u622A\u56FE(base64)\u5931\u8D25\uFF0C\u72B6\u6001\u7801: ${i.status}`);const c=await i.json();if(!c.success||typeof c.data!="string")throw new Error(`\u622A\u56FE(base64)\u5931\u8D25: ${String(c.message??"unknown")}`);return c.data}async function k(t,e=50,r=120,n=1){const s=d(t);if(!Number.isInteger(e)||e<1)throw new Error(`\u65E0\u6548 maxDepth: ${e}`);if(!Number.isInteger(r)||r<1)throw new Error(`\u65E0\u6548 timeout: ${r}`);if(!Number.isInteger(n)||n!==1&&n!==2&&n!==3)throw new Error(`\u65E0\u6548 mode: ${n}`);if(s==="ws"){await $(t);const l=await h.WSManager.request("source",{max_depth:e,timeout:r,maxDepth:e,mode:n});if(!l.success||typeof l.data!="string")throw new Error(`\u83B7\u53D6\u8282\u70B9\u5931\u8D25: ${String(l.message??"unknown")}`);return l.data}const{ip:i,port:c}=g(t),o=new URL(`http://${i}:${c}/api/source`);o.searchParams.set("max_depth",String(e)),o.searchParams.set("timeout",String(r)),o.searchParams.set("mode",String(n));const a=await fetch(o.toString(),{method:"GET"});if(!a.ok)throw new Error(`\u83B7\u53D6\u8282\u70B9\u5931\u8D25\uFF0C\u72B6\u6001\u7801: ${a.status}`);return a.text()}async function A(t,e=200){if(d(t)!=="http")throw new Error("\u83B7\u53D6\u65E5\u5FD7\u5931\u8D25: \u5F53\u524D\u65E5\u5FD7\u884C\u63A5\u53E3\u4EC5\u652F\u6301 http \u4F20\u8F93");if(!Number.isInteger(e)||e<1||e>5e3)throw new Error(`\u83B7\u53D6\u65E5\u5FD7\u5931\u8D25: \u65E0\u6548 count ${e}`);const{ip:n,port:s}=g(t),i=new URL(`http://${n}:${s}/logger/current/lines`);i.searchParams.set("count",String(e));const c=await fetch(i.toString(),{method:"GET"});if(c.status===404)return{lines:[],hasMore:!1};if(!c.ok)throw new Error(`\u83B7\u53D6\u65E5\u5FD7\u5931\u8D25\uFF0C\u72B6\u6001\u7801: ${c.status}`);const o=await c.json();return{lines:Array.isArray(o.lines)?o.lines.map(a=>String(a)):[],hasMore:o.hasMore===!0}}async function m(t){const e=await h.WSManager.request(t);if(!e.success)throw new Error(`${t} \u5931\u8D25: ${String(e.message??"unknown")}`)}async function $(t){const{wsPort:e,wsWaitMs:r}=q(t),n=h.WSManager.get();n.isStarted()||await n.start(e),h.WSManager.isConnected()||(console.log("\u231B \u7B49\u5F85\u8BBE\u5907\u901A\u8FC7 WS \u8FDE\u63A5..."),await n.waitForClient(r))}async function z(t){const e=t.workspacePath?w.resolve(t.workspacePath):process.cwd(),r=d(t);if(console.log(`\u{1F527} \u5F00\u59CB\u6784\u5EFA\u9879\u76EE: ${e}`),await O(e),r==="ws"){await $(t),console.log("\u{1F4E6} \u5F00\u59CB\u901A\u8FC7 WS \u540C\u6B65\u9879\u76EE\u5230\u8BBE\u5907"),await W(e),console.log("\u{1F680} \u5F00\u59CB\u901A\u8FC7 WS \u8FD0\u884C\u9879\u76EE"),await m("run"),console.log("\u2705 \u8FD0\u884C\u8BF7\u6C42\u5DF2\u53D1\u9001");return}const{ip:n,port:s}=g(t);console.log(`\u{1F4E6} \u5F00\u59CB\u540C\u6B65\u9879\u76EE\u5230\u8BBE\u5907: ${n}:${s}`),await M(e,n,s),console.log(`\u{1F680} \u5F00\u59CB\u8FD0\u884C\u9879\u76EE: ${n}:${s}`),await P("run",n,s),console.log("\u2705 \u8FD0\u884C\u8BF7\u6C42\u5DF2\u53D1\u9001")}async function G(t){const e=t.workspacePath?w.resolve(t.workspacePath):process.cwd(),r=d(t);if(console.log(`\u{1F527} \u5F00\u59CB\u6784\u5EFA\u9879\u76EE: ${e}`),await O(e),r==="ws"){await $(t),console.log("\u{1F4E6} \u5F00\u59CB\u901A\u8FC7 WS \u540C\u6B65\u9879\u76EE\u5230\u8BBE\u5907"),await W(e),console.log("\u{1F5BC}\uFE0F \u5F00\u59CB\u901A\u8FC7 WS \u9884\u89C8 UI"),await m("runUI"),console.log("\u2705 UI \u9884\u89C8\u8BF7\u6C42\u5DF2\u53D1\u9001");return}const{ip:n,port:s}=g(t);console.log(`\u{1F4E6} \u5F00\u59CB\u540C\u6B65\u9879\u76EE\u5230\u8BBE\u5907: ${n}:${s}`),await M(e,n,s),console.log(`\u{1F5BC}\uFE0F \u5F00\u59CB\u9884\u89C8 UI: ${n}:${s}`),await P("runUI",n,s),console.log("\u2705 UI \u9884\u89C8\u8BF7\u6C42\u5DF2\u53D1\u9001")}async function V(t){if(d(t)==="ws"){await $(t),console.log("\u{1F6D1} \u5F00\u59CB\u901A\u8FC7 WS \u505C\u6B62\u9879\u76EE"),await m("stop"),console.log("\u2705 \u505C\u6B62\u8BF7\u6C42\u5DF2\u53D1\u9001");return}const{ip:r,port:n}=g(t);console.log(`\u{1F6D1} \u5F00\u59CB\u505C\u6B62\u9879\u76EE: ${r}:${n}`),await P("stop",r,n),console.log("\u2705 \u505C\u6B62\u8BF7\u6C42\u5DF2\u53D1\u9001")}
|
|
1
|
+
"use strict";var D=exports&&exports.__createBinding||(Object.create?(function(t,e,r,n){n===void 0&&(n=r);var s=Object.getOwnPropertyDescriptor(e,r);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,s)}):(function(t,e,r,n){n===void 0&&(n=r),t[n]=e[r]})),F=exports&&exports.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),v=exports&&exports.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(r){var n=[];for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(n[n.length]=s);return n},t(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var n=t(e),s=0;s<n.length;s++)n[s]!=="default"&&D(r,e,n[s]);return F(r,e),r}})(),I=exports&&exports.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getScreenshotOnDevice=C,exports.getScreenshotBase64OnDevice=U,exports.getSourceOnDevice=k,exports.getCurrentLogLinesOnDevice=A,exports.runOnDevice=z,exports.runUIOnDevice=G,exports.stopOnDevice=V;const f=v(require("fs-extra")),w=v(require("path")),T=require("./build"),N=I(require("crc")),h=require("./ws-manager");function g(t){const e=t.ip?.trim(),r=(t.port??"9800").trim(),n=Number.parseInt(r,10);if(!e)throw new Error("\u8BF7\u901A\u8FC7 --ip \u6307\u5B9A\u8BBE\u5907 IP \u5730\u5740");if(!Number.isInteger(n)||n<1||n>65535)throw new Error(`\u65E0\u6548\u7AEF\u53E3: ${r}`);return{ip:e,port:n}}function q(t){const e=(t.wsPort??"31111").trim(),r=(t.wsWaitMs??"30000").trim(),n=Number.parseInt(e,10),s=Number.parseInt(r,10);if(!Number.isInteger(n)||n<1||n>65535)throw new Error(`\u65E0\u6548 ws \u7AEF\u53E3: ${e}`);if(!Number.isInteger(s)||s<1)throw new Error(`\u65E0\u6548 ws \u7B49\u5F85\u65F6\u95F4: ${r}`);return{wsPort:n,wsWaitMs:s}}function d(t){const e=(t.transport??"http").trim().toLowerCase();if(e!=="http"&&e!=="ws")throw new Error(`\u65E0\u6548 transport: ${e}`);return e}async function j(t){const e=await f.readFile(t);return N.default.crc32(e).toString(16).padStart(8,"0")}async function b(t,e){const r=[];async function n(s){const c=await f.readdir(s,{withFileTypes:!0});for(const i of c){const o=w.join(s,i.name);if(i.isDirectory())await n(o);else if(i.isFile()){const a=w.relative(t,o).replace(/\\/g,"/"),l=await f.stat(o);r.push({path:o,bundlePath:`${e}/${a}`,size:l.size,crc32:await j(o)})}}}return await f.pathExists(t)&&await n(t),r}async function E(t){const e=w.join(t,"package.json"),r=await f.readJSON(e),n=r.name,s=r.appVersion;if(!n)throw new Error("\u8BF7\u5728 package.json \u4E2D\u6DFB\u52A0 name \u5B57\u6BB5");if(!s)throw new Error("\u8BF7\u5728 package.json \u4E2D\u6DFB\u52A0 appVersion \u5B57\u6BB5");return{projectName:n,appVersion:s,packageJsonPath:e}}async function _(t){let e=w.join(t,"dist","scripts");const r=await f.pathExists(w.join(t,"scripts","main.py")),n=await f.pathExists(w.join(t,"scripts","main.lua"));(r||n)&&(e=w.join(t,"scripts"));const s=w.join(t,"ui"),c=w.join(t,"res"),i=w.join(t,"package.json"),o=[{path:i,bundlePath:"package.json",size:(await f.stat(i)).size,crc32:await j(i)}],[a,l,u]=await Promise.all([b(e,"scripts"),b(s,"ui"),b(c,"res")]);return o.push(...a,...l,...u),o}async function O(t){await(0,T.buildAll)(!0,t)}async function B(t,e,r){const n=new URL(`http://${t}:${e}/api/files`);n.searchParams.set("projectName",r);const s=await fetch(n.toString(),{method:"GET"});if(!s.ok)throw new Error(`\u6587\u4EF6\u5217\u8868\u8BF7\u6C42\u5931\u8D25: ${s.statusText}`);const c=await s.json();return Array.isArray(c)?c:[]}async function L(t){const e=await h.WSManager.request("files",{projectName:t});if(!e.success)throw new Error(`\u6587\u4EF6\u5217\u8868\u8BF7\u6C42\u5931\u8D25: ${String(e.message??"unknown")}`);const r=e.data;return Array.isArray(r)?r:[]}async function M(t,e,r){const{projectName:n,appVersion:s}=await E(t);console.log("\u{1F50E} \u6B63\u5728\u83B7\u53D6\u8BBE\u5907\u6587\u4EF6\u5217\u8868...");const c=await B(e,r,n),i=new Map(c.map(u=>[u.path,u]));console.log("\u{1F4C2} \u6B63\u5728\u5206\u6790\u9879\u76EE\u6587\u4EF6...");const o=await _(t),a=[];for(const u of o){const p=i.get(u.bundlePath),y=u.bundlePath.includes("main.js")||u.bundlePath.includes("main.py")||u.bundlePath.includes("main.lua");if(!p){a.push(u);continue}const S=p.size!==u.size||p.crc32.toLowerCase()!==u.crc32.toLowerCase();(y||S)&&a.push(u)}if(console.log(`\u{1F4E6} \u53D1\u73B0 ${a.length} \u4E2A\u6587\u4EF6\u9700\u8981\u540C\u6B65`),a.length===0){console.log("\u2705 \u65E0\u9700\u540C\u6B65\u6587\u4EF6");return}let l=0;for(const u of a){l+=1,console.log(`\u2B06\uFE0F [${l}/${a.length}] \u540C\u6B65 ${u.bundlePath}`);const p=await f.readFile(u.path),y=new URL(`http://${e}:${r}/debug/patchSync`);y.searchParams.set("path",u.bundlePath),y.searchParams.set("projectName",n),y.searchParams.set("appVersion",s);const S=await fetch(y.toString(),{method:"POST",headers:{"Content-Type":"application/octet-stream"},body:p});if(!S.ok)throw new Error(`\u540C\u6B65\u5931\u8D25: ${u.bundlePath} (\u72B6\u6001\u7801: ${S.status})`)}console.log(`\u2705 \u540C\u6B65\u5B8C\u6210\uFF0C\u5171 ${a.length} \u4E2A\u6587\u4EF6`)}async function W(t){const{projectName:e,appVersion:r}=await E(t);console.log("\u{1F50E} \u6B63\u5728\u83B7\u53D6\u8BBE\u5907\u6587\u4EF6\u5217\u8868...");const n=await L(e),s=new Map(n.map(a=>[a.path,a]));console.log("\u{1F4C2} \u6B63\u5728\u5206\u6790\u9879\u76EE\u6587\u4EF6...");const c=await _(t),i=[];for(const a of c){const l=s.get(a.bundlePath),u=a.bundlePath.includes("main.js")||a.bundlePath.includes("main.py")||a.bundlePath.includes("main.lua");if(!l){i.push(a);continue}const p=l.size!==a.size||l.crc32.toLowerCase()!==a.crc32.toLowerCase();(u||p)&&i.push(a)}if(console.log(`\u{1F4E6} \u53D1\u73B0 ${i.length} \u4E2A\u6587\u4EF6\u9700\u8981\u540C\u6B65`),i.length===0){console.log("\u2705 \u65E0\u9700\u540C\u6B65\u6587\u4EF6");return}let o=0;for(const a of i){o+=1,console.log(`\u2B06\uFE0F [${o}/${i.length}] \u540C\u6B65 ${a.bundlePath}`);const l=await f.readFile(a.path),u=await h.WSManager.request("patchSync",{path:a.bundlePath,data:l.toString("base64"),projectName:e,appVersion:r});if(!u.success)throw new Error(`\u540C\u6B65\u5931\u8D25: ${a.bundlePath} ${String(u.message??"")}`)}console.log(`\u2705 \u540C\u6B65\u5B8C\u6210\uFF0C\u5171 ${i.length} \u4E2A\u6587\u4EF6`)}async function m(t,e,r){const n=`http://${e}:${r}/api/${t}`,s=await fetch(n,{method:"GET"});if(!s.ok)throw new Error(`${t} \u5931\u8D25\uFF0C\u72B6\u6001\u7801: ${s.status}`)}async function C(t){if(d(t)==="ws"){await $(t);const o=await h.WSManager.request("screenshot");if(!o.success||typeof o.data!="string")throw new Error(`\u622A\u56FE\u5931\u8D25: ${String(o.message??"unknown")}`);return Buffer.from(o.data,"base64")}const{ip:r,port:n}=g(t),s=`http://${r}:${n}/api/screenshot`,c=await fetch(s,{method:"GET"});if(!c.ok)throw new Error(`\u622A\u56FE\u5931\u8D25\uFF0C\u72B6\u6001\u7801: ${c.status}`);const i=await c.arrayBuffer();return Buffer.from(i)}async function U(t){if(d(t)==="ws"){await $(t);const o=await h.WSManager.request("screenshot");if(!o.success||typeof o.data!="string")throw new Error(`\u622A\u56FE(base64)\u5931\u8D25: ${String(o.message??"unknown")}`);return o.data}const{ip:r,port:n}=g(t),s=`http://${r}:${n}/api/screenshotBase64`,c=await fetch(s,{method:"GET"});if(!c.ok)throw new Error(`\u622A\u56FE(base64)\u5931\u8D25\uFF0C\u72B6\u6001\u7801: ${c.status}`);const i=await c.json();if(!i.success||typeof i.data!="string")throw new Error(`\u622A\u56FE(base64)\u5931\u8D25: ${String(i.message??"unknown")}`);return i.data}async function k(t,e=50,r=120,n=1){const s=d(t);if(!Number.isInteger(e)||e<1)throw new Error(`\u65E0\u6548 maxDepth: ${e}`);if(!Number.isInteger(r)||r<1)throw new Error(`\u65E0\u6548 timeout: ${r}`);if(!Number.isInteger(n)||n!==1&&n!==2&&n!==3)throw new Error(`\u65E0\u6548 mode: ${n}`);if(s==="ws"){await $(t);const l=await h.WSManager.request("source",{max_depth:e,timeout:r,maxDepth:e,mode:n});if(!l.success||typeof l.data!="string")throw new Error(`\u83B7\u53D6\u8282\u70B9\u5931\u8D25: ${String(l.message??"unknown")}`);return l.data}const{ip:c,port:i}=g(t),o=new URL(`http://${c}:${i}/api/source`);o.searchParams.set("max_depth",String(e)),o.searchParams.set("timeout",String(r)),o.searchParams.set("mode",String(n));const a=await fetch(o.toString(),{method:"GET"});if(!a.ok)throw new Error(`\u83B7\u53D6\u8282\u70B9\u5931\u8D25\uFF0C\u72B6\u6001\u7801: ${a.status}`);return a.text()}async function A(t,e=200){if(d(t)!=="http")throw new Error("\u83B7\u53D6\u65E5\u5FD7\u5931\u8D25: \u5F53\u524D\u65E5\u5FD7\u884C\u63A5\u53E3\u4EC5\u652F\u6301 http \u4F20\u8F93");if(!Number.isInteger(e)||e<1||e>5e3)throw new Error(`\u83B7\u53D6\u65E5\u5FD7\u5931\u8D25: \u65E0\u6548 count ${e}`);const{ip:n,port:s}=g(t),c=new URL(`http://${n}:${s}/logger/current/lines`);c.searchParams.set("count",String(e));const i=await fetch(c.toString(),{method:"GET"});if(i.status===404)return{lines:[],hasMore:!1};if(!i.ok)throw new Error(`\u83B7\u53D6\u65E5\u5FD7\u5931\u8D25\uFF0C\u72B6\u6001\u7801: ${i.status}`);const o=await i.json();return{lines:Array.isArray(o.lines)?o.lines.map(a=>String(a)):[],hasMore:o.hasMore===!0}}async function P(t){const e=await h.WSManager.request(t);if(!e.success)throw new Error(`${t} \u5931\u8D25: ${String(e.message??"unknown")}`)}async function $(t){const{wsPort:e,wsWaitMs:r}=q(t),n=h.WSManager.get();n.isStarted()||await n.start(e),h.WSManager.isConnected()||(console.log("\u231B \u7B49\u5F85\u8BBE\u5907\u901A\u8FC7 WS \u8FDE\u63A5..."),await n.waitForClient(r))}async function z(t){const e=t.workspacePath?w.resolve(t.workspacePath):process.cwd(),r=d(t);if(console.log(`\u{1F527} \u5F00\u59CB\u6784\u5EFA\u9879\u76EE: ${e}`),await O(e),r==="ws"){await $(t),console.log("\u{1F4E6} \u5F00\u59CB\u901A\u8FC7 WS \u540C\u6B65\u9879\u76EE\u5230\u8BBE\u5907"),await W(e),console.log("\u{1F680} \u5F00\u59CB\u901A\u8FC7 WS \u8FD0\u884C\u9879\u76EE"),await P("run"),console.log("\u2705 \u8FD0\u884C\u8BF7\u6C42\u5DF2\u53D1\u9001");return}const{ip:n,port:s}=g(t);console.log(`\u{1F4E6} \u5F00\u59CB\u540C\u6B65\u9879\u76EE\u5230\u8BBE\u5907: ${n}:${s}`),await M(e,n,s),console.log(`\u{1F680} \u5F00\u59CB\u8FD0\u884C\u9879\u76EE: ${n}:${s}`),await m("run",n,s),console.log("\u2705 \u8FD0\u884C\u8BF7\u6C42\u5DF2\u53D1\u9001")}async function G(t){const e=t.workspacePath?w.resolve(t.workspacePath):process.cwd(),r=d(t);if(console.log(`\u{1F527} \u5F00\u59CB\u6784\u5EFA\u9879\u76EE: ${e}`),await O(e),r==="ws"){await $(t),console.log("\u{1F4E6} \u5F00\u59CB\u901A\u8FC7 WS \u540C\u6B65\u9879\u76EE\u5230\u8BBE\u5907"),await W(e),console.log("\u{1F5BC}\uFE0F \u5F00\u59CB\u901A\u8FC7 WS \u9884\u89C8 UI"),await P("runUI"),console.log("\u2705 UI \u9884\u89C8\u8BF7\u6C42\u5DF2\u53D1\u9001");return}const{ip:n,port:s}=g(t);console.log(`\u{1F4E6} \u5F00\u59CB\u540C\u6B65\u9879\u76EE\u5230\u8BBE\u5907: ${n}:${s}`),await M(e,n,s),console.log(`\u{1F5BC}\uFE0F \u5F00\u59CB\u9884\u89C8 UI: ${n}:${s}`),await m("runUI",n,s),console.log("\u2705 UI \u9884\u89C8\u8BF7\u6C42\u5DF2\u53D1\u9001")}async function V(t){if(d(t)==="ws"){await $(t),console.log("\u{1F6D1} \u5F00\u59CB\u901A\u8FC7 WS \u505C\u6B62\u9879\u76EE"),await P("stop"),console.log("\u2705 \u505C\u6B62\u8BF7\u6C42\u5DF2\u53D1\u9001");return}const{ip:r,port:n}=g(t);console.log(`\u{1F6D1} \u5F00\u59CB\u505C\u6B62\u9879\u76EE: ${r}:${n}`),await m("stop",r,n),console.log("\u2705 \u505C\u6B62\u8BF7\u6C42\u5DF2\u53D1\u9001")}
|
package/docs/AGENTS.md
CHANGED
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
- JavaScript 项目使用 JavaScript 文档与写法。
|
|
12
12
|
- Python 项目使用 Python 文档与写法。
|
|
13
|
-
-
|
|
13
|
+
- Lua 项目使用 Lua 文档与写法。
|
|
14
|
+
- 不要混用 JavaScript、Python 与 Lua API。
|
|
14
15
|
- 不要把快点JS Python 脚本当成普通 CPython 脚本。
|
|
15
16
|
- 不要对快点JS Python 脚本运行 `python -m py_compile`、`py_compile` 或类似 CPython 编译校验。
|
|
16
17
|
- 不要创建、保留或同步 `__pycache__`、`.pyc` 作为项目改动。
|
|
@@ -184,7 +185,7 @@ UI 预览发起后不需要长时间等待结果,可以通过截图查看当
|
|
|
184
185
|
|
|
185
186
|
- 不要在没有读取本地文档的情况下回答 API 用法或编写 API 调用代码。
|
|
186
187
|
- 不要臆造快点JS API、对象、参数、返回值或运行机制。
|
|
187
|
-
- 不要混用 JavaScript 与
|
|
188
|
+
- 不要混用 JavaScript、Python 与 Lua API。
|
|
188
189
|
- 不要把快点JS当成普通 Node.js、浏览器或通用 Python 环境。
|
|
189
190
|
- 不要对快点JS Python 脚本运行 `py_compile` 或其他 CPython 编译校验。
|
|
190
191
|
- 不要在没有读取本地 HTTP API 文档的情况下调用 `http_api_call` 或 `ms http-call`。
|
package/docs/SKILL.md
CHANGED
|
@@ -17,7 +17,8 @@ description: 快点JS专用开发助手。用于快点JS项目开发、本地 AP
|
|
|
17
17
|
- 不要把快点JS当成普通 Node.js、浏览器或通用 Python 环境。
|
|
18
18
|
- Python 项目使用 Python 文档与写法。
|
|
19
19
|
- JavaScript 项目使用 JavaScript 文档与写法。
|
|
20
|
-
-
|
|
20
|
+
- Lua 项目使用 Lua 文档与写法。
|
|
21
|
+
- 不要混用 JavaScript、Python 与 Lua API。
|
|
21
22
|
- 文档未确认的能力必须明确说明无法确认,并给出保守方案。
|
|
22
23
|
- 快点JS Python 脚本不使用 CPython 编译校验;不要运行 `python -m py_compile`、`py_compile` 或类似命令。
|
|
23
24
|
|