ms-vite-plugin 1.5.17 → 1.5.19

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.
@@ -1 +1 @@
1
- "use strict";var x=Object.create;var L=Object.defineProperty;var N=Object.getOwnPropertyDescriptor;var q=Object.getOwnPropertyNames;var $=Object.getPrototypeOf,z=Object.prototype.hasOwnProperty;var C=(t,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of q(e))!z.call(t,r)&&r!==n&&L(t,r,{get:()=>e[r],enumerable:!(i=N(e,r))||i.enumerable});return t};var W=(t,e,n)=>(n=t!=null?x($(t)):{},C(e||!t||!t.__esModule?L(n,"default",{value:t,enumerable:!0}):n,t));var K=exports&&exports.__createBinding||(Object.create?(function(t,e,n,i){i===void 0&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);(!r||("get"in r?!e.__esModule:r.writable||r.configurable))&&(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}):(function(t,e,n,i){i===void 0&&(i=n),t[i]=e[n]})),A=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(n){var i=[];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(i[i.length]=r);return i},t(e)};return function(e){if(e&&e.__esModule)return e;var n={};if(e!=null)for(var i=t(e),r=0;r<i.length;r++)i[r]!=="default"&&K(n,e,i[r]);return A(n,e),n}})(),M=exports&&exports.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.buildAll=void 0;const T=M(require("archiver")),D=require("child_process"),s=O(require("fs-extra")),F=O(require("os")),o=O(require("path")),B=require("./stopGuardPlugin"),G=require("./luaBundle"),E=require("./scriptProtect"),H=M(require("vite-plugin-bundle-obfuscator"));async function R(t,e){const n=(0,T.default)("zip",{zlib:{level:9}}),i=s.createWriteStream(e);return new Promise((r,c)=>{n.directory(t,!1).on("error",a=>c(a)).pipe(i),i.on("close",()=>r()),n.finalize()})}async function I(t,e){const n=[];async function i(r){const c=await s.readdir(r,{withFileTypes:!0});for(const a of c){const u=o.resolve(r,a.name);a.isDirectory()?await i(u):a.isFile()&&(/^main\.(js|ts)$/.test(a.name)||/_thread\.(js|ts)$/.test(a.name))&&n.push(o.relative(e,u))}}return await i(t),n}function k(){const t=[{cmd:o.join(F.homedir(),".KuaiJSDevloper","python","python.exe"),args:["--version"]},{cmd:o.join(F.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 n=(0,D.spawnSync)(e.cmd,e.args,{encoding:"utf8"}),i=(n.stdout||n.stderr||"").trim();if(i&&/Python\s+3\.14(\.\d+)?/i.test(i))return{ok:!0,path:e.cmd,version:i}}catch{}return{ok:!1}}async function ee(t){async function e(n){const i=await s.readdir(n,{withFileTypes:!0});for(const r of i){const c=o.join(n,r.name);if(r.isDirectory())if(r.name==="__pycache__"){const a=await s.readdir(c,{withFileTypes:!0});for(const u of a){const P=o.join(c,u.name);if(u.isFile()&&u.name.endsWith(".cpython-314.pyc")){const S=o.dirname(c),b=u.name.replace(/\.cpython-314\.pyc$/,".pyc"),g=o.join(S,b);await s.move(P,g,{overwrite:!0})}}try{await s.remove(c)}catch{}}else await e(c);else if(r.isFile())if(r.name.endsWith(".cpython-314.pyc")){const a=c.replace(".cpython-314.pyc",".pyc");await s.move(c,a,{overwrite:!0})}else r.name.endsWith(".py")&&await s.remove(c)}}await e(t)}const Q=["Minify","Weak","Medium","Strong"];async function U(t){const e=o.join(t,"obfuscator.json");if(!await s.pathExists(e))return{enabled:!0,preset:"Medium",bundle:!0};try{const n=await s.readJSON(e),i=n?.enabled!==!1,r=n?.bundle!==!1,c=V(n?.preset);return{enabled:i,preset:c,bundle:r}}catch(n){return console.error("\u274C \u65E0\u6CD5\u8BFB\u53D6 obfuscator.json"),console.error(n instanceof Error?n.message:String(n)),process.exit(1),{enabled:!0,preset:"Medium",bundle:!0}}}function V(t){if(typeof t!="string")return"Medium";const e=Q.find(n=>n.toLowerCase()===t.trim().toLowerCase());return e||(console.warn(`\u26A0\uFE0F obfuscator.json \u7684 preset \u65E0\u6548: ${t}\uFF0C\u5DF2\u6539\u7528 Medium`),"Medium")}function X(t){const e=o.resolve(__dirname,"..","..");return[o.join(e,"node_modules/@gamely/prometheus-cli/bin/cli.js"),o.join(e,"..","@gamely/prometheus-cli/bin/cli.js")].find(i=>s.pathExistsSync(i))}const Y=async(t=!0,e)=>{const n=o.join(e,"scripts"),i=await s.pathExists(o.join(n,"main.js"))||await s.pathExists(o.join(n,"main.ts")),r=await s.pathExists(o.join(n,"main.py")),c=await s.pathExists(o.join(n,"main.lua"));if(i){console.log("\u{1F680} \u5F00\u59CB\u6784\u5EFAJavaScript\u9879\u76EE...");const{build:d}=await import("vite"),l=o.join(e,"obfuscator.json");await s.pathExists(l)||(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 j=await s.readJSON(l),m=j.scriptProtect===!0,{enabled:_,scriptProtect:y,...p}=j,f=o.join(e,t?"dist":"msbundle"),h=await I(n,n);await s.remove(f);const w=!t&&m?(0,E.createScriptProtectHelpers)():[];!t&&m&&console.log("\u{1F510} \u5DF2\u542F\u7528 JS \u539F\u751F\u4FDD\u62A4\uFF08scriptProtect=true\uFF09");for(const v of h)await d({root:e,build:{lib:{entry:{[o.basename(v,o.extname(v))]:`./scripts/${v}`},fileName:()=>v.replace(/\.ts$/,".js"),formats:["iife"],name:"KuaiJS"},outDir:t?"dist/scripts":"msbundle/scripts",emptyOutDir:!1,sourcemap:t,minify:!t,target:"safari15"},plugins:[(0,B.createStopGuardPlugin)(),...t?[]:[...m?[(0,E.createScriptProtectPlugin)(w)]:[],_?(0,H.default)({autoExcludeNodeModules:!0,threadPool:!0,options:{...p,target:"browser",debugProtection:!1,disableConsoleOutput:!1,domainLock:[],selfDefending:!1,renameGlobals:!1,renameProperties:!1,reservedNames:[...p.reservedNames||[],...w]}}):[],...m?[(0,E.createKjstEmbedPlugin)()]:[]]]})}if(t)return;const a=o.join(e,"msbundle");if(await s.ensureDir(a),(r||c)&&await s.copy(o.join(e,"scripts"),o.join(a,"scripts")),!r){if(c){const d=await U(e),l=o.join(a,"scripts");if(d.bundle?await(0,G.bundleLuaScripts)(l):console.log("\u2139\uFE0F \u5DF2\u5173\u95ED Lua \u5355\u6587\u4EF6\u5408\u5E76\uFF08obfuscator.json bundle=false\uFF09"),!d.enabled)console.log("\u2139\uFE0F \u5DF2\u5173\u95ED Lua \u6DF7\u6DC6\uFF08obfuscator.json enabled=false\uFF09");else{const j=[],m=async y=>{const p=await s.readdir(y,{withFileTypes:!0});for(const f of p){const h=o.join(y,f.name);f.isDirectory()?await m(h):f.isFile()&&f.name.endsWith(".lua")&&j.push(h)}};await m(l);const _=X(e);_||(console.error("\u274C \u672A\u627E\u5230 @gamely/prometheus-cli\uFF0C\u65E0\u6CD5\u6DF7\u6DC6 Lua"),process.exit(1));for(const y of j){const p=o.relative(l,y);console.log(`\u{1F6E0}\uFE0F \u6DF7\u6DC6 Lua: ${p} (preset=${d.preset})`);const f=(0,D.spawnSync)(process.execPath,[_,p,"--preset",d.preset],{cwd:l,encoding:"utf8"});f.status!==0&&(console.error("\u274C \u6DF7\u6DC6 Lua \u5931\u8D25:",p),console.error(f.stderr||f.stdout||""),process.exit(1));const h=p.replace(/\.lua$/,".obfuscated.lua"),w=o.join(l,h);await s.pathExists(w)&&(await s.remove(y),await s.move(w,y,{overwrite:!0}))}console.log("\u2705 Lua \u6DF7\u6DC6\u5B8C\u6210")}}}await s.copy(o.join(e,"res"),o.join(a,"res")),await s.copy(o.join(e,"ui"),o.join(a,"ui"));for(const d of["logo.jpg","logo.png"]){const l=o.join(e,d);await s.pathExists(l)&&await s.copy(l,o.join(a,d))}const u=o.join(e,"dist"),P=o.join(e,"package.json"),S=o.join(a,"package.json"),b=await s.readJSON(P);delete b.scripts,delete b.devDependencies,delete b.dependencies,await s.writeJSON(S,b,{spaces:2}),await s.emptyDir(u);const g=o.join(u,"ms.zip"),J=o.join(u,"ms.msbundle");await R(a,g),await s.rename(g,J),await s.remove(a)};exports.buildAll=Y;
1
+ "use strict";var x=Object.create;var L=Object.defineProperty;var N=Object.getOwnPropertyDescriptor;var q=Object.getOwnPropertyNames;var $=Object.getPrototypeOf,z=Object.prototype.hasOwnProperty;var C=(t,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of q(e))!z.call(t,r)&&r!==n&&L(t,r,{get:()=>e[r],enumerable:!(i=N(e,r))||i.enumerable});return t};var W=(t,e,n)=>(n=t!=null?x($(t)):{},C(e||!t||!t.__esModule?L(n,"default",{value:t,enumerable:!0}):n,t));var K=exports&&exports.__createBinding||(Object.create?(function(t,e,n,i){i===void 0&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);(!r||("get"in r?!e.__esModule:r.writable||r.configurable))&&(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}):(function(t,e,n,i){i===void 0&&(i=n),t[i]=e[n]})),A=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(n){var i=[];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(i[i.length]=r);return i},t(e)};return function(e){if(e&&e.__esModule)return e;var n={};if(e!=null)for(var i=t(e),r=0;r<i.length;r++)i[r]!=="default"&&K(n,e,i[r]);return A(n,e),n}})(),M=exports&&exports.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.buildAll=void 0;const T=M(require("archiver")),D=require("child_process"),s=O(require("fs-extra")),F=O(require("os")),o=O(require("path")),B=require("./stopGuardPlugin"),G=require("./luaBundle"),E=require("./scriptProtect"),H=M(require("vite-plugin-bundle-obfuscator"));async function R(t,e){const n=(0,T.default)("zip",{zlib:{level:9}}),i=s.createWriteStream(e);return new Promise((r,c)=>{n.directory(t,!1).on("error",a=>c(a)).pipe(i),i.on("close",()=>r()),n.finalize()})}async function I(t,e){const n=[];async function i(r){const c=await s.readdir(r,{withFileTypes:!0});for(const a of c){const u=o.resolve(r,a.name);a.isDirectory()?await i(u):a.isFile()&&(/^main\.(js|ts)$/.test(a.name)||/_thread\.(js|ts)$/.test(a.name))&&n.push(o.relative(e,u))}}return await i(t),n}function Q(){const t=[{cmd:o.join(F.homedir(),".KuaiJSDevloper","python","python.exe"),args:["--version"]},{cmd:o.join(F.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 n=(0,D.spawnSync)(e.cmd,e.args,{encoding:"utf8"}),i=(n.stdout||n.stderr||"").trim();if(i&&/Python\s+3\.14(\.\d+)?/i.test(i))return{ok:!0,path:e.cmd,version:i}}catch{}return{ok:!1}}async function ee(t){async function e(n){const i=await s.readdir(n,{withFileTypes:!0});for(const r of i){const c=o.join(n,r.name);if(r.isDirectory())if(r.name==="__pycache__"){const a=await s.readdir(c,{withFileTypes:!0});for(const u of a){const P=o.join(c,u.name);if(u.isFile()&&u.name.endsWith(".cpython-314.pyc")){const S=o.dirname(c),b=u.name.replace(/\.cpython-314\.pyc$/,".pyc"),g=o.join(S,b);await s.move(P,g,{overwrite:!0})}}try{await s.remove(c)}catch{}}else await e(c);else if(r.isFile())if(r.name.endsWith(".cpython-314.pyc")){const a=c.replace(".cpython-314.pyc",".pyc");await s.move(c,a,{overwrite:!0})}else r.name.endsWith(".py")&&await s.remove(c)}}await e(t)}const U=["Minify","Weak","Medium","Strong"];async function V(t){const e=o.join(t,"obfuscator.json");if(!await s.pathExists(e))return{enabled:!0,preset:"Medium",bundle:!0};try{const n=await s.readJSON(e),i=n?.enabled!==!1,r=n?.bundle!==!1,c=X(n?.preset);return{enabled:i,preset:c,bundle:r}}catch(n){return console.error("\u274C \u65E0\u6CD5\u8BFB\u53D6 obfuscator.json"),console.error(n instanceof Error?n.message:String(n)),process.exit(1),{enabled:!0,preset:"Medium",bundle:!0}}}function X(t){if(typeof t!="string")return"Medium";const e=U.find(n=>n.toLowerCase()===t.trim().toLowerCase());return e||(console.warn(`\u26A0\uFE0F obfuscator.json \u7684 preset \u65E0\u6548: ${t}\uFF0C\u5DF2\u6539\u7528 Medium`),"Medium")}function Y(t){const e=o.resolve(__dirname,"..","..");return[o.join(e,"node_modules/@gamely/prometheus-cli/bin/cli.js"),o.join(e,"..","@gamely/prometheus-cli/bin/cli.js")].find(i=>s.pathExistsSync(i))}const Z=async(t=!0,e)=>{const n=o.join(e,"scripts"),i=await s.pathExists(o.join(n,"main.js"))||await s.pathExists(o.join(n,"main.ts")),r=await s.pathExists(o.join(n,"main.py")),c=await s.pathExists(o.join(n,"main.lua"));if(i){console.log("\u{1F680} \u5F00\u59CB\u6784\u5EFAJavaScript\u9879\u76EE...");const{build:f}=await import("vite"),l=o.join(e,"obfuscator.json");await s.pathExists(l)||(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 j=await s.readJSON(l),m=j.scriptProtect===!0,{enabled:_,scriptProtect:y,...p}=j,d=o.join(e,t?"dist":"msbundle"),h=await I(n,n);await s.remove(d);const w=!t&&m?(0,E.createScriptProtectHelpers)():[];!t&&m&&console.log("\u{1F510} \u5DF2\u542F\u7528 JS \u539F\u751F\u4FDD\u62A4\uFF08scriptProtect=true\uFF09");for(const v of h)await f({root:e,build:{lib:{entry:{[o.basename(v,o.extname(v))]:`./scripts/${v}`},fileName:()=>v.replace(/\.ts$/,".js"),formats:["iife"],name:"KuaiJS"},outDir:t?"dist/scripts":"msbundle/scripts",emptyOutDir:!1,sourcemap:t,minify:!t,target:"safari15"},plugins:[(0,B.createStopGuardPlugin)(),...t?[]:[...m?[(0,E.createScriptProtectPlugin)(w)]:[],_?(0,H.default)({autoExcludeNodeModules:!0,threadPool:!0,options:{...p,target:"browser",debugProtection:!1,disableConsoleOutput:!1,domainLock:[],selfDefending:!1,renameGlobals:!1,renameProperties:!1,reservedNames:[...p.reservedNames||[],...w]}}):[],...m?[(0,E.createKjstEmbedPlugin)()]:[]]]})}if(t)return;const a=o.join(e,"msbundle");if(await s.ensureDir(a),(r||c)&&await s.copy(o.join(e,"scripts"),o.join(a,"scripts")),r)Q().ok;else if(c){const f=await V(e),l=o.join(a,"scripts");if(f.bundle?await(0,G.bundleLuaScripts)(l):console.log("\u2139\uFE0F \u5DF2\u5173\u95ED Lua \u5355\u6587\u4EF6\u5408\u5E76\uFF08obfuscator.json bundle=false\uFF09"),!f.enabled)console.log("\u2139\uFE0F \u5DF2\u5173\u95ED Lua \u6DF7\u6DC6\uFF08obfuscator.json enabled=false\uFF09");else{const j=[],m=async y=>{const p=await s.readdir(y,{withFileTypes:!0});for(const d of p){const h=o.join(y,d.name);d.isDirectory()?await m(h):d.isFile()&&d.name.endsWith(".lua")&&j.push(h)}};await m(l);const _=Y(e);_||(console.error("\u274C \u672A\u627E\u5230 @gamely/prometheus-cli\uFF0C\u65E0\u6CD5\u6DF7\u6DC6 Lua"),process.exit(1));for(const y of j){const p=o.relative(l,y);console.log(`\u{1F6E0}\uFE0F \u6DF7\u6DC6 Lua: ${p} (preset=${f.preset})`);const d=(0,D.spawnSync)(process.execPath,[_,p,"--preset",f.preset],{cwd:l,encoding:"utf8"});d.status!==0&&(console.error("\u274C \u6DF7\u6DC6 Lua \u5931\u8D25:",p),console.error(d.stderr||d.stdout||""),process.exit(1));const h=p.replace(/\.lua$/,".obfuscated.lua"),w=o.join(l,h);await s.pathExists(w)&&(await s.remove(y),await s.move(w,y,{overwrite:!0}))}console.log("\u2705 Lua \u6DF7\u6DC6\u5B8C\u6210")}}await s.copy(o.join(e,"res"),o.join(a,"res")),await s.copy(o.join(e,"ui"),o.join(a,"ui"));for(const f of["logo.jpg","logo.png"]){const l=o.join(e,f);await s.pathExists(l)&&await s.copy(l,o.join(a,f))}const u=o.join(e,"dist"),P=o.join(e,"package.json"),S=o.join(a,"package.json"),b=await s.readJSON(P);delete b.scripts,delete b.devDependencies,delete b.dependencies,await s.writeJSON(S,b,{spaces:2}),await s.emptyDir(u);const g=o.join(u,"ms.zip"),J=o.join(u,"ms.msbundle");await R(a,g),await s.rename(g,J),await s.remove(a)};exports.buildAll=Z;
@@ -1,4 +1,4 @@
1
- "use strict";var _=exports&&exports.__createBinding||(Object.create?(function(t,e,n,a){a===void 0&&(a=n);var i=Object.getOwnPropertyDescriptor(e,n);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,a,i)}):(function(t,e,n,a){a===void 0&&(a=n),t[a]=e[n]})),k=exports&&exports.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),I=exports&&exports.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(n){var a=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(a[a.length]=i);return a},t(e)};return function(e){if(e&&e.__esModule)return e;var n={};if(e!=null)for(var a=t(e),i=0;i<a.length;i++)a[i]!=="default"&&_(n,e,a[i]);return k(n,e),n}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.protectScript=G,exports.createScriptProtectPlugin=Y,exports.createKjstEmbedPlugin=Q,exports.createScriptProtectHelpers=w;const P=I(require("acorn")),p=I(require("crypto")),T=require("magic-string"),D=Buffer.from([126,145,60,165]),M=1,U="x",N=Buffer.from([165,60,145,126]),L=`-----BEGIN PUBLIC KEY-----
1
+ "use strict";var _=exports&&exports.__createBinding||(Object.create?(function(t,e,n,a){a===void 0&&(a=n);var i=Object.getOwnPropertyDescriptor(e,n);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,a,i)}):(function(t,e,n,a){a===void 0&&(a=n),t[a]=e[n]})),k=exports&&exports.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),P=exports&&exports.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(n){var a=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(a[a.length]=i);return a},t(e)};return function(e){if(e&&e.__esModule)return e;var n={};if(e!=null)for(var a=t(e),i=0;i<a.length;i++)a[i]!=="default"&&_(n,e,a[i]);return k(n,e),n}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.protectScript=F,exports.createScriptProtectPlugin=Y,exports.createKjstEmbedPlugin=Q,exports.createScriptProtectHelpers=w;const A=P(require("acorn")),p=P(require("crypto")),T=require("magic-string"),D=Buffer.from([126,145,60,165]),U=1,M="x",N=Buffer.from([165,60,145,126]),L=`-----BEGIN PUBLIC KEY-----
2
2
  MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArzeAhUUEi4p0AxLYIVJK
3
3
  UcXyySzlh8G4TfH/quDXiKVlYlho9v2R1cQKQgFpVuDW8SDyc2iWUTNa8D/NX9LN
4
4
  IqcgQP0lyTxuFvevfGOlPt6NDl0nYNqaToK5AvN/F7AcchU9JrNSB4BNEeFRechm
@@ -6,4 +6,4 @@ GL9m5iUY0HCbiOIcbo+rx1GQaqTYCUuZIJttuARYCq0ggoOHjBqMHUKWwdNtJVoe
6
6
  PrdRaKzL3CB2gXazQzKUVrlK2vEDEaTvSLJoCym7SkSf/XmxjfEADlcwrqTb01ar
7
7
  U8mm9/g5R9q43B8NqlTpGOcs1OpAY5DZW1DDjXhyHBfrPCt82hhmeO/yI0N8vE2m
8
8
  MwIDAQAB
9
- -----END PUBLIC KEY-----`,S=new Set(["action","$\u52A8\u4F5C","ai","$AI","appleOcr","$\u82F9\u679COCR","cloud","$\u4E91\u63A7","config","$\u914D\u7F6E","cryptoUtils","cv","device","$\u8BBE\u5907","dotOcr","$\u70B9\u9635OCR","file","$\u6587\u4EF6","hid","$HID","hidKey","$HID\u6309\u952E","hotUpdate","$\u70ED\u66F4\u65B0","http","$HTTP","image","$\u56FE\u7247","ime","$\u8F93\u5165\u6CD5","jbdylib","jbshell","jbclear","jbsystem","jbdevice","jbpower","jbvpn","jbdraw","logger","$\u65E5\u5FD7","media","$\u5A92\u4F53","mysql","$MySQL\u6570\u636E\u5E93","sqlite","$SQLite\u6570\u636E\u5E93","netCard","$\u5361\u5BC6","paddleOcr","$PaddleOCR","pip","$\u60AC\u6D6E\u7A97","plist","sharedState","$\u5171\u4EAB\u72B6\u6001","system","$\u7CFB\u7EDF","thread","$\u7EBF\u7A0B","tomatoOcr","tts","$\u6587\u5B57\u8F6C\u8BED\u97F3","ui","$\u89C6\u56FE","utils","$\u5DE5\u5177","yolo","$YOLO","yoloCls","$YOLO\u5206\u7C7B","zipFile","$ZIP"]),C=new Set(["createNodeSelector","$\u521B\u5EFA\u8282\u70B9\u9009\u62E9\u5668","exit","$\u9000\u51FA\u811A\u672C","getAgentFastMode","$\u83B7\u53D6Agent\u5FEB\u901F\u6A21\u5F0F","getAgentTouchMode","$\u83B7\u53D6Agent\u89E6\u63A7\u6A21\u5F0F","getContext","$\u83B7\u53D6\u4E0A\u4E0B\u6587","getCpuAutoThrottle","$\u83B7\u53D6CPU\u81EA\u52A8\u9650\u6D41","getCpuThrottleDelay","$\u83B7\u53D6CPU\u9650\u6D41\u5EF6\u8FDF","importClass","$\u5BFC\u5165\u7C7B","loadDex","$\u52A0\u8F7DDex","logd","$\u6253\u5370\u8C03\u8BD5\u65E5\u5FD7","loge","$\u6253\u5370\u9519\u8BEF\u65E5\u5FD7","logi","$\u6253\u5370\u4FE1\u606F\u65E5\u5FD7","logw","$\u6253\u5370\u8B66\u544A\u65E5\u5FD7","println","$\u6253\u5370","restartScript","$\u91CD\u542F\u811A\u672C","setAgentFastMode","$\u8BBE\u7F6EAgent\u5FEB\u901F\u6A21\u5F0F","setAgentTouchMode","$\u8BBE\u7F6EAgent\u89E6\u63A7\u6A21\u5F0F","setCpuAutoThrottle","$\u8BBE\u7F6ECPU\u81EA\u52A8\u9650\u6D41","setCpuThrottleDelay","$\u8BBE\u7F6ECPU\u9650\u6D41\u5EF6\u8FDF","setExceptionCallback","$\u8BBE\u7F6E\u5F02\u5E38\u505C\u6B62\u56DE\u8C03","setStopCallback","$\u8BBE\u7F6E\u505C\u6B62\u56DE\u8C03","sleep","$\u5EF6\u65F6","takeMeToFront","$APP\u5207\u5165\u524D\u53F0","time","$\u83B7\u53D6\u5F53\u524D\u65F6\u95F4\u6233"]);function B(t){for(;;){const e=`_0x${p.randomBytes(3).toString("hex")}`;if(!t.has(e))return t.add(e),e}}function g(t,e){const n=t.indexOf(e);return n>=0?n:(t.push(e),t.length-1)}function j(t,e){for(let n=e.length-1;n>=0;n-=1)if(e[n].has(t))return!0;return!1}function h(t,e){if(!(!t||typeof t!="object")){if(t.type==="Identifier"){e.add(t.name);return}if(t.type==="AssignmentPattern"){h(t.left,e);return}if(t.type==="RestElement"){h(t.argument,e);return}if(t.type==="ArrayPattern"){for(const n of t.elements||[])h(n,e);return}if(t.type==="ObjectPattern")for(const n of t.properties||[])n.type==="RestElement"?h(n.argument,e):h(n.value,e)}}function K(t){try{return P.parse(t,{allowHashBang:!0,ecmaVersion:"latest",sourceType:"script"})}catch{return P.parse(t,{allowHashBang:!0,ecmaVersion:"latest",sourceType:"module"})}}function A(t,e,n,a){if(!t||typeof t!="object"||typeof t.type!="string")return;let i=0;if(t.type==="FunctionDeclaration"||t.type==="FunctionExpression"||t.type==="ArrowFunctionExpression"){const o=new Set;t.id&&t.id.type==="Identifier"&&o.add(t.id.name);for(const l of t.params||[])h(l,o);n.push(o),i+=1}if(t.type==="CatchClause"&&t.param){const o=new Set;h(t.param,o),n.push(o),i+=1}if(t.type==="VariableDeclaration"){const o=n[n.length-1];for(const l of t.declarations||[])h(l.id,o)}a(t,e,n);for(const o of Object.keys(t)){if(o==="parent"||o==="start"||o==="end"||o==="loc"||o==="range"||o==="raw")continue;const l=t[o];if(Array.isArray(l))for(const c of l)A(c,t,n,a);else l&&typeof l=="object"&&A(l,t,n,a)}for(;i>0;)n.pop(),i-=1}function q(t,e){return!(!e||t.value!=="use strict"||e.type!=="ExpressionStatement")}function E(t){if(!(!t||t.type!=="MemberExpression")){if(t.computed)return t.property?.type==="Literal"&&typeof t.property.value=="string"?t.property.value:void 0;if(t.property?.type==="Identifier")return t.property.name}}function d(t,e){return t^e}function v(t){for(let e=t.length-1;e>0;e-=1){const n=p.randomInt(e+1),a=t[e];t[e]=t[n],t[n]=a}}function H(t){const e=[...S,...C].filter(s=>!t.includes(s));v(e);const n=Math.min(e.length,6+p.randomInt(7)),a=2+p.randomInt(4),i=[];for(let s=0;s<t.length;s+=1)i.push({intern:s,value:t[s]});for(let s=0;s<n;s+=1)i.push({intern:null,value:e[s]});for(let s=0;s<a;s+=1)i.push({intern:null,value:""});v(i);const o=i.map(s=>s.value),l=new Array(t.length).fill(-1),c=[];for(let s=0;s<i.length;s+=1){const y=i[s];y.intern!==null&&(l[y.intern]=s),y.value===""&&c.push(s)}return{values:o,slotOf:l,globalSlots:c}}function R(t){return t.length===0?0:t[p.randomInt(t.length)]}function F(t){const e=Buffer.from(JSON.stringify(t),"utf8"),n=p.randomBytes(32),a=p.randomBytes(16),i=p.createCipheriv("aes-256-cbc",n,a),o=Buffer.concat([i.update(e),i.final()]),l=p.publicEncrypt({key:L,padding:p.constants.RSA_PKCS1_PADDING},n),c=Buffer.alloc(7);D.copy(c,0),c.writeUInt8(M,4),c.writeUInt16BE(l.length,5);const s=Buffer.alloc(4);return s.writeUInt32BE(o.length,0),Buffer.concat([c,l,a,s,o])}function G(t){const e=w();return x(t,e[0],e[1],e[2])}function Y(t){const e=new Set(t),n=t[0],a=t[1],i=t[2];if(!n||!a||!i||e.size!==3)throw new Error("script protect helper names \u65E0\u6548");return{name:"kuaijs-script-protect",apply:"build",renderChunk:{order:"pre",handler(o,l){const c=x(o,n,a,i);return this.emitFile({type:"asset",fileName:l.fileName.replace(/\.js$/i,".kjst"),source:c.table}),{code:c.code,map:null}}}}}function Q(){return{name:"kuaijs-kjst-embed",apply:"build",enforce:"post",generateBundle(t,e){for(const[n,a]of Object.entries(e)){if(a.type!=="asset"||!/\.kjst$/i.test(n))continue;const i=n.replace(/\.kjst$/i,".js"),o=e[i];if(!o||o.type!=="chunk")continue;const l=a.source,c=typeof l=="string"?Buffer.from(l,"binary"):Buffer.from(l),s=Buffer.from(o.code,"utf8"),y=Buffer.alloc(4);y.writeUInt32BE(c.length,0);const m=Buffer.concat([s,c,y,N]);delete e[n],delete e[i],this.emitFile({type:"asset",fileName:i,source:m})}}}}function w(){const t=new Set;return[B(t),B(t),B(t)]}function x(t,e,n,a){const i=[""],o=[],l=K(t);let c=p.randomBytes(2).readUInt16BE(0);c===0&&(c=1),A(l,null,[new Set],(r,u,$)=>{if(r.type==="CallExpression"){const f=r.callee;if(f?.type==="Identifier"){C.has(f.name)&&!j(f.name,$)&&o.push({start:f.start,end:f.end,kind:"nGlobal",a:g(i,f.name)});return}if(f?.type==="MemberExpression"&&f.object?.type==="Identifier"){const b=f.object.name,O=E(f);O&&S.has(b)&&!j(b,$)&&o.push({start:f.start,end:f.end,kind:"nMember",a:g(i,b),b:g(i,O)})}return}if(r.type==="MemberExpression"){if(u?.type==="CallExpression"&&u.callee===r||u?.type==="AssignmentExpression"&&u.left===r||r.object?.type!=="Identifier")return;const f=r.object.name,b=E(r);b&&S.has(f)&&!j(f,$)&&o.push({start:r.start,end:r.end,kind:"p",a:g(i,f),b:g(i,b)});return}if(r.type==="Literal"&&typeof r.value=="string"){if(q(r,u)||u?.type==="Property"&&u.key===r)return;o.push({start:r.start,end:r.end,kind:"s",a:g(i,r.value)});return}r.type==="Property"&&!r.method&&!r.computed&&r.key?.type==="Identifier"&&r.key.name!=="__proto__"&&o.push({start:r.shorthand?r.start:r.key.start,end:r.shorthand?r.end:r.key.end,kind:r.shorthand?"keyShort":"key",a:g(i,r.key.name),ident:r.key.name})});const s=H(i),y=o.map(r=>{const u=s.slotOf[r.a],$=r.b===void 0?0:s.slotOf[r.b];return r.kind==="nGlobal"?{start:r.start,end:r.end,text:`${n}(${d(R(s.globalSlots),c)},${d(u,c)})`}:r.kind==="nMember"?{start:r.start,end:r.end,text:`${n}(${d(u,c)},${d($,c)})`}:r.kind==="p"?{start:r.start,end:r.end,text:`${a}(${d(u,c)},${d($,c)})`}:r.kind==="keyShort"?{start:r.start,end:r.end,text:`[${e}(${d(u,c)})]:${r.ident??""}`}:{start:r.start,end:r.end,text:r.kind==="key"?`[${e}(${d(u,c)})]`:`${e}(${d(u,c)})`}});y.sort((r,u)=>u.start-r.start);const m=new T(t);for(const r of y)r.start===r.end?m.appendLeft(r.start,r.text):m.overwrite(r.start,r.end,r.text);return{code:m.toString(),table:F({s:e,n,p:a,v:s.values,[U]:c}),reservedNames:[e,n,a]}}
9
+ -----END PUBLIC KEY-----`,S=new Set(["action","$\u52A8\u4F5C","ai","$AI","appleOcr","$\u82F9\u679COCR","cloud","$\u4E91\u63A7","config","$\u914D\u7F6E","cryptoUtils","cv","device","$\u8BBE\u5907","dotOcr","$\u70B9\u9635OCR","file","$\u6587\u4EF6","hid","$HID","hidKey","$HID\u6309\u952E","hotUpdate","$\u70ED\u66F4\u65B0","http","$HTTP","image","$\u56FE\u7247","ime","$\u8F93\u5165\u6CD5","jbdylib","jbshell","jbclear","jbsystem","jbdevice","jbpower","jbvpn","jbdraw","logger","$\u65E5\u5FD7","media","$\u5A92\u4F53","mysql","$MySQL\u6570\u636E\u5E93","sqlite","$SQLite\u6570\u636E\u5E93","netCard","$\u5361\u5BC6","paddleOcr","$PaddleOCR","pip","$\u60AC\u6D6E\u7A97","plist","sharedState","$\u5171\u4EAB\u72B6\u6001","system","$\u7CFB\u7EDF","thread","$\u7EBF\u7A0B","tomatoOcr","tts","$\u6587\u5B57\u8F6C\u8BED\u97F3","ui","$\u89C6\u56FE","utils","$\u5DE5\u5177","yolo","$YOLO","yoloCls","$YOLO\u5206\u7C7B","zipFile","$ZIP"]),C=new Set(["createNodeSelector","$\u521B\u5EFA\u8282\u70B9\u9009\u62E9\u5668","exit","$\u9000\u51FA\u811A\u672C","getAgentTouchMode","$\u83B7\u53D6Agent\u89E6\u63A7\u6A21\u5F0F","getContext","$\u83B7\u53D6\u4E0A\u4E0B\u6587","getCpuAutoThrottle","$\u83B7\u53D6CPU\u81EA\u52A8\u9650\u6D41","getCpuThrottleDelay","$\u83B7\u53D6CPU\u9650\u6D41\u5EF6\u8FDF","importClass","$\u5BFC\u5165\u7C7B","loadDex","$\u52A0\u8F7DDex","logd","$\u6253\u5370\u8C03\u8BD5\u65E5\u5FD7","loge","$\u6253\u5370\u9519\u8BEF\u65E5\u5FD7","logi","$\u6253\u5370\u4FE1\u606F\u65E5\u5FD7","logw","$\u6253\u5370\u8B66\u544A\u65E5\u5FD7","println","$\u6253\u5370","restartScript","$\u91CD\u542F\u811A\u672C","setAgentTouchMode","$\u8BBE\u7F6EAgent\u89E6\u63A7\u6A21\u5F0F","setCpuAutoThrottle","$\u8BBE\u7F6ECPU\u81EA\u52A8\u9650\u6D41","setCpuThrottleDelay","$\u8BBE\u7F6ECPU\u9650\u6D41\u5EF6\u8FDF","setExceptionCallback","$\u8BBE\u7F6E\u5F02\u5E38\u505C\u6B62\u56DE\u8C03","setStopCallback","$\u8BBE\u7F6E\u505C\u6B62\u56DE\u8C03","sleep","$\u5EF6\u65F6","takeMeToFront","$APP\u5207\u5165\u524D\u53F0","time","$\u83B7\u53D6\u5F53\u524D\u65F6\u95F4\u6233"]);function B(t){for(;;){const e=`_0x${p.randomBytes(3).toString("hex")}`;if(!t.has(e))return t.add(e),e}}function $(t,e){const n=t.indexOf(e);return n>=0?n:(t.push(e),t.length-1)}function j(t,e){for(let n=e.length-1;n>=0;n-=1)if(e[n].has(t))return!0;return!1}function h(t,e){if(!(!t||typeof t!="object")){if(t.type==="Identifier"){e.add(t.name);return}if(t.type==="AssignmentPattern"){h(t.left,e);return}if(t.type==="RestElement"){h(t.argument,e);return}if(t.type==="ArrayPattern"){for(const n of t.elements||[])h(n,e);return}if(t.type==="ObjectPattern")for(const n of t.properties||[])n.type==="RestElement"?h(n.argument,e):h(n.value,e)}}function K(t){try{return A.parse(t,{allowHashBang:!0,ecmaVersion:"latest",sourceType:"script"})}catch{return A.parse(t,{allowHashBang:!0,ecmaVersion:"latest",sourceType:"module"})}}function O(t,e,n,a){if(!t||typeof t!="object"||typeof t.type!="string")return;let i=0;if(t.type==="FunctionDeclaration"||t.type==="FunctionExpression"||t.type==="ArrowFunctionExpression"){const c=new Set;t.id&&t.id.type==="Identifier"&&c.add(t.id.name);for(const l of t.params||[])h(l,c);n.push(c),i+=1}if(t.type==="CatchClause"&&t.param){const c=new Set;h(t.param,c),n.push(c),i+=1}if(t.type==="VariableDeclaration"){const c=n[n.length-1];for(const l of t.declarations||[])h(l.id,c)}a(t,e,n);for(const c of Object.keys(t)){if(c==="parent"||c==="start"||c==="end"||c==="loc"||c==="range"||c==="raw")continue;const l=t[c];if(Array.isArray(l))for(const s of l)O(s,t,n,a);else l&&typeof l=="object"&&O(l,t,n,a)}for(;i>0;)n.pop(),i-=1}function q(t,e){return!(!e||t.value!=="use strict"||e.type!=="ExpressionStatement")}function E(t){if(!(!t||t.type!=="MemberExpression")){if(t.computed)return t.property?.type==="Literal"&&typeof t.property.value=="string"?t.property.value:void 0;if(t.property?.type==="Identifier")return t.property.name}}function d(t,e){return t^e}function v(t){for(let e=t.length-1;e>0;e-=1){const n=p.randomInt(e+1),a=t[e];t[e]=t[n],t[n]=a}}function H(t){const e=[...S,...C].filter(o=>!t.includes(o));v(e);const n=Math.min(e.length,6+p.randomInt(7)),a=2+p.randomInt(4),i=[];for(let o=0;o<t.length;o+=1)i.push({intern:o,value:t[o]});for(let o=0;o<n;o+=1)i.push({intern:null,value:e[o]});for(let o=0;o<a;o+=1)i.push({intern:null,value:""});v(i);const c=i.map(o=>o.value),l=new Array(t.length).fill(-1),s=[];for(let o=0;o<i.length;o+=1){const y=i[o];y.intern!==null&&(l[y.intern]=o),y.value===""&&s.push(o)}return{values:c,slotOf:l,globalSlots:s}}function R(t){return t.length===0?0:t[p.randomInt(t.length)]}function G(t){const e=Buffer.from(JSON.stringify(t),"utf8"),n=p.randomBytes(32),a=p.randomBytes(16),i=p.createCipheriv("aes-256-cbc",n,a),c=Buffer.concat([i.update(e),i.final()]),l=p.publicEncrypt({key:L,padding:p.constants.RSA_PKCS1_PADDING},n),s=Buffer.alloc(7);D.copy(s,0),s.writeUInt8(U,4),s.writeUInt16BE(l.length,5);const o=Buffer.alloc(4);return o.writeUInt32BE(c.length,0),Buffer.concat([s,l,a,o,c])}function F(t){const e=w();return x(t,e[0],e[1],e[2])}function Y(t){const e=new Set(t),n=t[0],a=t[1],i=t[2];if(!n||!a||!i||e.size!==3)throw new Error("script protect helper names \u65E0\u6548");return{name:"kuaijs-script-protect",apply:"build",renderChunk:{order:"pre",handler(c,l){const s=x(c,n,a,i);return this.emitFile({type:"asset",fileName:l.fileName.replace(/\.js$/i,".kjst"),source:s.table}),{code:s.code,map:null}}}}}function Q(){return{name:"kuaijs-kjst-embed",apply:"build",enforce:"post",generateBundle(t,e){for(const[n,a]of Object.entries(e)){if(a.type!=="asset"||!/\.kjst$/i.test(n))continue;const i=n.replace(/\.kjst$/i,".js"),c=e[i];if(!c||c.type!=="chunk")continue;const l=a.source,s=typeof l=="string"?Buffer.from(l,"binary"):Buffer.from(l),o=Buffer.from(c.code,"utf8"),y=Buffer.alloc(4);y.writeUInt32BE(s.length,0);const m=Buffer.concat([o,s,y,N]);delete e[n],delete e[i],this.emitFile({type:"asset",fileName:i,source:m})}}}}function w(){const t=new Set;return[B(t),B(t),B(t)]}function x(t,e,n,a){const i=[""],c=[],l=K(t);let s=p.randomBytes(2).readUInt16BE(0);s===0&&(s=1),O(l,null,[new Set],(r,u,g)=>{if(r.type==="CallExpression"){const f=r.callee;if(f?.type==="Identifier"){C.has(f.name)&&!j(f.name,g)&&c.push({start:f.start,end:f.end,kind:"nGlobal",a:$(i,f.name)});return}if(f?.type==="MemberExpression"&&f.object?.type==="Identifier"){const b=f.object.name,I=E(f);I&&S.has(b)&&!j(b,g)&&c.push({start:f.start,end:f.end,kind:"nMember",a:$(i,b),b:$(i,I)})}return}if(r.type==="MemberExpression"){if(u?.type==="CallExpression"&&u.callee===r||u?.type==="AssignmentExpression"&&u.left===r||r.object?.type!=="Identifier")return;const f=r.object.name,b=E(r);b&&S.has(f)&&!j(f,g)&&c.push({start:r.start,end:r.end,kind:"p",a:$(i,f),b:$(i,b)});return}if(r.type==="Literal"&&typeof r.value=="string"){if(q(r,u)||u?.type==="Property"&&u.key===r)return;c.push({start:r.start,end:r.end,kind:"s",a:$(i,r.value)});return}r.type==="Property"&&!r.method&&!r.computed&&r.key?.type==="Identifier"&&r.key.name!=="__proto__"&&c.push({start:r.shorthand?r.start:r.key.start,end:r.shorthand?r.end:r.key.end,kind:r.shorthand?"keyShort":"key",a:$(i,r.key.name),ident:r.key.name})});const o=H(i),y=c.map(r=>{const u=o.slotOf[r.a],g=r.b===void 0?0:o.slotOf[r.b];return r.kind==="nGlobal"?{start:r.start,end:r.end,text:`${n}(${d(R(o.globalSlots),s)},${d(u,s)})`}:r.kind==="nMember"?{start:r.start,end:r.end,text:`${n}(${d(u,s)},${d(g,s)})`}:r.kind==="p"?{start:r.start,end:r.end,text:`${a}(${d(u,s)},${d(g,s)})`}:r.kind==="keyShort"?{start:r.start,end:r.end,text:`[${e}(${d(u,s)})]:${r.ident??""}`}:{start:r.start,end:r.end,text:r.kind==="key"?`[${e}(${d(u,s)})]`:`${e}(${d(u,s)})`}});y.sort((r,u)=>u.start-r.start);const m=new T(t);for(const r of y)r.start===r.end?m.appendLeft(r.start,r.text):m.overwrite(r.start,r.end,r.text);return{code:m.toString(),table:G({s:e,n,p:a,v:o.values,[M]:s}),reservedNames:[e,n,a]}}
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var R=exports&&exports.__createBinding||(Object.create?(function(e,t,o,r){r===void 0&&(r=o);var n=Object.getOwnPropertyDescriptor(t,o);(!n||("get"in n?!t.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return t[o]}}),Object.defineProperty(e,r,n)}):(function(e,t,o,r){r===void 0&&(r=o),e[r]=t[o]})),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(o){var r=[];for(var n in o)Object.prototype.hasOwnProperty.call(o,n)&&(r[r.length]=n);return r},e(t)};return function(t){if(t&&t.__esModule)return t;var o={};if(t!=null)for(var r=e(t),n=0;n<r.length;n++)r[n]!=="default"&&R(o,t,r[n]);return J(o,t),o}})();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("./device/project"),W=require("./packaging"),H=require("./device/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"),o=m.join(e,"scripts"),[r,n]=await Promise.all([p.pathExists(t),p.pathExists(o)]);return r&&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,o,r,n){const i=(e??String(t)).trim(),s=Number.parseInt(i,10);if(!Number.isInteger(s)||s<r||n!==void 0&&s>n)throw new Error(`\u65E0\u6548 ${o}: ${i}\uFF0C\u5141\u8BB8\u8303\u56F4 ${r}${n===void 0?"+":`..${n}`}`);return s}function F(e,t,o,r,n){const i=(e??String(t)).trim(),s=Number.parseFloat(i);if(!Number.isFinite(s)||s<r||s>n)throw new Error(`\u65E0\u6548 ${o}: ${i}\uFF0C\u5141\u8BB8\u8303\u56F4 ${r}..${n}`);return s}function g(e,t,o,r){const n=(e??t).trim();if(!o.includes(n))throw new Error(`\u65E0\u6548 ${r}: ${n}\uFF0C\u53EF\u9009\u503C: ${o.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 o=a(e.port,9800,"port",1,65535);return{ip:t,port:String(o),label:`${t}:${o}`}}async function $(e,t,o){if(t?.trim()){const r=m.resolve(t.trim());await p.ensureDir(m.dirname(r)),await p.writeFile(r,e,"utf8"),console.log(`\u2705 ${o}: ${r}`);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
- `)}function K(e,t){return t.push(e),t}function q(e,t){const o=e?.trim();if(!o)return;if(o.startsWith("[")){const n=JSON.parse(o);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 r=o.split(",").map(n=>n.trim()).filter(n=>n.length>0);if(r.length===0)throw new Error(`${t} \u4E0D\u80FD\u4E3A\u7A7A\u3002`);return r}function X(e){const t=q(e,"languages");if(!t)return;const o=new Set(x.APPLE_OCR_LANGUAGES),r=t.filter(n=>!o.has(n));if(r.length>0)throw new Error(`\u65E0\u6548 languages: ${r.join(", ")}\uFF0C\u53EF\u9009\u503C: ${x.APPLE_OCR_LANGUAGES.join(", ")}`);return t}function Q(e,t){const o=e?.trim();if(!o)return;const r=JSON.parse(o);if(!r||typeof r!="object"||Array.isArray(r)||!Object.values(r).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 r}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[o,r]of Object.entries(t))r!==null&&e.searchParams.set(o,String(r))}function et(e){return e===void 0?{}:{headers:{"Content-Type":"application/json"},requestBody:JSON.stringify(e)}}async function ot(e,t){const o=await e.text();return t==="text"?o:(0,j.formatRuntimeJsonText)(JSON.parse(o))}async function rt(e){try{const t=process.cwd(),o=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 (${o?"\u5F00\u53D1\u6A21\u5F0F":"\u751F\u4EA7\u6A21\u5F0F"})...`),await(0,G.buildAll)(o,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(e){try{const t=process.cwd();console.log(`\u{1F50D} \u68C0\u67E5\u9879\u76EE\u76EE\u5F55: ${t}`),await C(t),console.log("\u{1F4E6} \u5F00\u59CB\u6253\u5305\u751F\u4EA7\u6784\u5EFA\u5E76\u52A0\u5BC6 bundle...");const o=await(0,W.packageProject)(t,{v2:e.v2});console.log(`\u2705 \u6253\u5305\u5B8C\u6210: ${o}`)}catch(t){console.error("\u274C \u6253\u5305\u5931\u8D25:",t instanceof Error?t.message:t),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 o=await(0,h.getScreenshotOnDevice)(e),r=e.output?.trim()?m.resolve(e.output.trim()):m.resolve(process.cwd(),"screenshot.jpg");await p.ensureDir(m.dirname(r)),await p.writeFile(r,o),console.log(`\u2705 \u622A\u56FE\u6210\u529F: ${r} (${o.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(),o=(e.timeout??"120").trim(),r=(e.mode??"1").trim(),n=Number.parseInt(t,10),i=Number.parseInt(o,10),s=Number.parseInt(r,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: ${o}`);if(!Number.isInteger(s)||s!==1&&s!==2&&s!==3)throw new Error(`\u65E0\u6548 mode: ${r}`);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),o=g(e.format,"text",["text","json"],"format"),r=await(0,h.getCurrentLogLinesOnDevice)(e,t),n=o==="json"?(0,j.formatRuntimeJsonText)(r):r.lines.length>0?r.lines.join(`
4
- `):"\u65E0\u65E5\u5FD7";await $(n,e.output,"\u65E5\u5FD7\u5DF2\u4FDD\u5B58"),o==="text"&&r.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),o=V(e.method),r=Z(e.path??""),n=await(0,L.findHttpApiDocEntry)(r,o);if(!n)throw new Error(`HTTP API \u6587\u6863\u4E2D\u4E0D\u5B58\u5728\u8BE5\u63A5\u53E3: ${o} ${r}\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(o==="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}${r}`);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:o,signal:S.signal,headers:b,body:y}),T=await ot(f,u),_=[`HTTP API \u8C03\u7528${f.ok?"\u6210\u529F":"\u5931\u8D25"}: ${o} ${r}`,`\u8BBE\u5907: ${t.label}`,`\u6587\u6863: ${n.title} (lines ${n.startLine}-${n.endLine})`,`\u72B6\u6001\u7801: ${f.status}`,"",T].join(`
5
- `);await $(_,e.output,"HTTP API \u54CD\u5E94\u5DF2\u4FDD\u5B58"),f.ok||process.exit(1)}finally{clearTimeout(I)}}catch(t){const o=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:",o),process.exit(1)}}async function lt(e){try{const t=E(e),o=g(e.engine,"appleocr",["appleocr","paddleocr"],"engine"),r=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:o,mode:r,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: ${o}`,`mode: ${r}`,`input: ${n}`,`region: x=${i}, y=${s}, ex=${u}, ey=${l}`,...o==="paddleocr"&&y?[`paddleModel: ${y}`]:[],...o==="paddleocr"&&f!==void 0?[`maxSideLen: ${f}`]:[],`status: ${O.status}`].join(`
6
- `)),O.body.success===!1&&process.exit(1)}catch(t){console.error("\u274C OCR \u6267\u884C\u5931\u8D25:",t instanceof Error?t.message:t),process.exit(1)}}async function ft(e){try{const t=e.image?.trim();if(!t)throw new Error("\u8BF7\u901A\u8FC7 --image \u6307\u5B9A\u8F93\u5165\u56FE\u7247\u8DEF\u5F84\u3002");const o=a(e.x,0,"x",0),r=a(e.y,0,"y",0),n=a(e.width,1,"width",1),i=a(e.height,1,"height",1),s=await(0,P.cropLocalImage)(t,o,r,n,i,e.output);console.log(s)}catch(t){console.error("\u274C \u56FE\u7247\u88C1\u5207\u5931\u8D25:",t instanceof Error?t.message:t),process.exit(1)}}async function gt(e){try{const t=E(e),o=a(e.x,0,"x",0),r=a(e.y,0,"y",0),n=a(e.width,1,"width",1),i=a(e.height,1,"height",1),s=await(0,P.cropDeviceScreen)(t,o,r,n,i,e.output);console.log(s)}catch(t){console.error("\u274C \u5C4F\u5E55\u88C1\u56FE\u5931\u8D25:",t instanceof Error?t.message:t),process.exit(1)}}async function ht(e){try{const t=e.image?.trim();if(!t)throw new Error("\u8BF7\u901A\u8FC7 --image \u6307\u5B9A\u8F93\u5165\u56FE\u7247\u8DEF\u5F84\u3002");const o=a(e.x,0,"x",0),r=a(e.y,0,"y",0),n=a(e.radius,0,"radius",0,20),i=await(0,P.pickLocalImageColor)(t,o,r,n);console.log(i)}catch(t){console.error("\u274C \u56FE\u7247\u53D6\u8272\u5931\u8D25:",t instanceof Error?t.message:t),process.exit(1)}}async function wt(e){try{const t=E(e),o=a(e.x,0,"x",0),r=a(e.y,0,"y",0),n=a(e.radius,0,"radius",0,20),i=await(0,P.pickDeviceScreenColor)(t,o,r,n);console.log(i)}catch(t){console.error("\u274C \u5C4F\u5E55\u53D6\u8272\u5931\u8D25:",t instanceof Error?t.message:t),process.exit(1)}}async function yt(e){try{const t=e.image?.trim();if(!t)throw new Error("\u8BF7\u901A\u8FC7 --image \u6307\u5B9A\u8F93\u5165\u56FE\u7247\u8DEF\u5F84\u3002");const o=g(e.sampleCorner,"topLeft",["topLeft","topRight","bottomLeft","bottomRight"],"sample-corner"),r=a(e.tolerance,24,"tolerance",0,441),n=await(0,P.makeLocalImageTransparent)(t,e.output,e.transparentColor,o,r);console.log(n)}catch(t){console.error("\u274C \u900F\u660E\u56FE\u5236\u4F5C\u5931\u8D25:",t instanceof Error?t.message:t),process.exit(1)}}async function xt(e){try{const t=(e.wsPort??"31111").trim(),o=Number.parseInt(t,10);if(!Number.isInteger(o)||o<1||o>65535)throw new Error(`\u65E0\u6548 ws \u7AEF\u53E3: ${t}`);const r=H.WSManager.get();await r.start(o);const n=async()=>{const s={pid:process.pid,port:o,address:r.getAddress(),startedAt:Date.now(),connected:r.isClientConnected(),clientIp:r.getConnectedClientIp()};await p.writeJSON(d,s)};await n();const i=setInterval(()=>{n().catch(()=>{})},1e3);await p.writeJSON(d,{pid:process.pid,port:o,address:r.getAddress(),startedAt:Date.now(),connected:r.isClientConnected(),clientIp:r.getConnectedClientIp()}),await new Promise(s=>{const u=async()=>{process.off("SIGINT",u),process.off("SIGTERM",u),clearInterval(i),await r.stop(),await p.remove(d),s()};process.on("SIGINT",u),process.on("SIGTERM",u)})}catch(t){console.error("\u274C WS \u670D\u52A1\u542F\u52A8\u5931\u8D25:",t instanceof Error?t.message:t),process.exit(1)}}async function Pt(){try{if(!await p.pathExists(d)){console.log("WS \u670D\u52A1\u672A\u8FD0\u884C");return}const e=await p.readJSON(d),t=Number(e.pid);if(!Number.isInteger(t)||t<=0)throw await p.remove(d),new Error("WS PID \u6587\u4EF6\u635F\u574F");try{process.kill(t,"SIGTERM"),console.log(`\u2705 \u5DF2\u53D1\u9001\u505C\u6B62\u4FE1\u53F7\u5230 WS \u8FDB\u7A0B: ${t}`)}catch{console.log("WS \u8FDB\u7A0B\u4E0D\u5B58\u5728\uFF0C\u6E05\u7406 PID \u6587\u4EF6")}await p.remove(d)}catch(e){console.error("\u274C WS \u670D\u52A1\u505C\u6B62\u5931\u8D25:",e instanceof Error?e.message:e),process.exit(1)}}async function St(){if(!await p.pathExists(d)){console.log(JSON.stringify({status:"stopped",running:!1,pid:null,address:null,connected:!1,clientIp:null}));return}const e=await p.readJSON(d),t=Number(e.pid),o=String(e.address||"unknown"),r=!!e.connected,n=e.clientIp===null||e.clientIp===void 0?null:String(e.clientIp);let i=!1;try{process.kill(t,0),i=!0}catch{i=!1}if(!i){await p.remove(d),console.log(JSON.stringify({status:"stopped",running:!1,pid:null,address:null,connected:!1,clientIp:null}));return}console.log(JSON.stringify({status:"running",running:!0,pid:t,address:o,connected:r,clientIp:r?n||"unknown":null}))}function Ot(){const e=[];e.push(""),e.push("\u8BE6\u7EC6\u547D\u4EE4\u53C2\u6570:");const t=c.program.commands.filter(o=>o.name()!=="help");for(const o of t){if(e.push(` ${o.name()}:`),o.options.length===0){e.push(" (\u65E0\u989D\u5916\u53C2\u6570)");continue}for(const r of o.options){const n=r.defaultValue!==void 0&&r.defaultValue!==null?` (\u9ED8\u8BA4: ${String(r.defaultValue)})`:"",i=r.description?` ${r.description}${n}`:n;e.push(` ${r.flags}${i}`)}}return e.push(""),e.join(`
7
- `)}c.program.name("ms-cli").description("\u5FEB\u70B9JS \u6784\u5EFA\u5DE5\u5177").version(k.PACKAGE_VERSION),c.program.addHelpText("after",Ot),c.program.command("build").description("\u6784\u5EFA \u5FEB\u70B9JS \u9879\u76EE").option("-d, --dev","\u5F00\u53D1\u6A21\u5F0F\u6784\u5EFA (\u5305\u542B source map)").action(rt),c.program.command("package").description("\u751F\u4EA7\u6784\u5EFA\u5E76\u52A0\u5BC6 ms.msbundle").option("--v2","\u6309\u9700\u70ED\u66F4\u65B0\u52A0\u5BC6").action(nt),c.program.command("run").description("\u5728\u8BBE\u5907\u4E0A\u8FD0\u884C\u9879\u76EE").option("-i, --ip <ip>","\u8BBE\u5907 IP \u5730\u5740\uFF08transport=http \u65F6\u5FC5\u586B\uFF09").option("--port <port>","\u8BBE\u5907\u7AEF\u53E3","9800").option("-t, --transport <transport>","\u4F20\u8F93\u65B9\u5F0F: http|ws","http").option("--ws-port <wsPort>","WS \u670D\u52A1\u7AEF\u53E3","31111").option("--ws-wait-ms <wsWaitMs>","WS \u7B49\u5F85\u8BBE\u5907\u8FDE\u63A5\u65F6\u95F4(\u6BEB\u79D2)","30000").action(it),c.program.command("run-ui").description("\u5728\u8BBE\u5907\u4E0A\u9884\u89C8 UI").option("-i, --ip <ip>","\u8BBE\u5907 IP \u5730\u5740\uFF08transport=http \u65F6\u5FC5\u586B\uFF09").option("--port <port>","\u8BBE\u5907\u7AEF\u53E3","9800").option("-t, --transport <transport>","\u4F20\u8F93\u65B9\u5F0F: http|ws","http").option("--ws-port <wsPort>","WS \u670D\u52A1\u7AEF\u53E3","31111").option("--ws-wait-ms <wsWaitMs>","WS \u7B49\u5F85\u8BBE\u5907\u8FDE\u63A5\u65F6\u95F4(\u6BEB\u79D2)","30000").action(st),c.program.command("stop").description("\u505C\u6B62\u8BBE\u5907\u4E0A\u7684\u9879\u76EE").option("-i, --ip <ip>","\u8BBE\u5907 IP \u5730\u5740\uFF08transport=http \u65F6\u5FC5\u586B\uFF09").option("--port <port>","\u8BBE\u5907\u7AEF\u53E3","9800").option("-t, --transport <transport>","\u4F20\u8F93\u65B9\u5F0F: http|ws","http").option("--ws-port <wsPort>","WS \u670D\u52A1\u7AEF\u53E3","31111").option("--ws-wait-ms <wsWaitMs>","WS \u7B49\u5F85\u8BBE\u5907\u8FDE\u63A5\u65F6\u95F4(\u6BEB\u79D2)","30000").action(at),c.program.command("screenshot").description("\u83B7\u53D6\u8BBE\u5907\u622A\u56FE\uFF08JPG\uFF09").option("-i, --ip <ip>","\u8BBE\u5907 IP \u5730\u5740\uFF08transport=http \u65F6\u5FC5\u586B\uFF09").option("--port <port>","\u8BBE\u5907\u7AEF\u53E3","9800").option("-t, --transport <transport>","\u4F20\u8F93\u65B9\u5F0F: http|ws","http").option("--ws-port <wsPort>","WS \u670D\u52A1\u7AEF\u53E3","31111").option("--ws-wait-ms <wsWaitMs>","WS \u7B49\u5F85\u8BBE\u5907\u8FDE\u63A5\u65F6\u95F4(\u6BEB\u79D2)","30000").option("--format <format>","\u8FD4\u56DE\u683C\u5F0F: file|base64","file").option("--output <output>","\u622A\u56FE\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84\uFF08format=file \u65F6\u751F\u6548\uFF09").action(ct),c.program.command("source").description("\u83B7\u53D6\u8BBE\u5907\u5F53\u524D\u9875\u9762\u8282\u70B9 XML").option("-i, --ip <ip>","\u8BBE\u5907 IP \u5730\u5740\uFF08transport=http \u65F6\u5FC5\u586B\uFF09").option("--port <port>","\u8BBE\u5907\u7AEF\u53E3","9800").option("-t, --transport <transport>","\u4F20\u8F93\u65B9\u5F0F: http|ws","http").option("--ws-port <wsPort>","WS \u670D\u52A1\u7AEF\u53E3","31111").option("--ws-wait-ms <wsWaitMs>","WS \u7B49\u5F85\u8BBE\u5907\u8FDE\u63A5\u65F6\u95F4(\u6BEB\u79D2)","30000").option("--max-depth <maxDepth>","\u8282\u70B9\u6700\u5927\u6DF1\u5EA6","50").option("--timeout <timeout>","\u8282\u70B9\u6293\u53D6\u8D85\u65F6\u79D2\u6570","120").option("--mode <mode>","\u8282\u70B9\u6293\u53D6\u6A21\u5F0F: 1=\u6A21\u5F0F1, 2=\u6A21\u5F0F2, 3=\u6A21\u5F0F3","1").option("--output <output>","\u8282\u70B9 XML \u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84\uFF08\u53EF\u9009\uFF09").action(pt),c.program.command("logs").description("\u83B7\u53D6\u8BBE\u5907\u5F53\u524D\u65E5\u5FD7\u6700\u65B0\u884C").option("-i, --ip <ip>","\u8BBE\u5907 IP \u5730\u5740").option("--port <port>","\u8BBE\u5907\u7AEF\u53E3","9800").option("--limit <limit>","\u8BFB\u53D6\u6700\u65B0\u65E5\u5FD7\u884C\u6570\uFF0C\u8303\u56F4 1..5000","200").option("--format <format>","\u8FD4\u56DE\u683C\u5F0F: text|json","text").option("--output <output>","\u65E5\u5FD7\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84\uFF08\u53EF\u9009\uFF09").action(ut),c.program.command("ocr").description("\u5728\u8BBE\u5907\u4E0A\u6267\u884C OCR \u8BC6\u522B").option("-i, --ip <ip>","\u8BBE\u5907 IP \u5730\u5740").option("--port <port>","\u8BBE\u5907\u7AEF\u53E3","9800").option("--engine <engine>","OCR \u5F15\u64CE: appleocr|paddleocr","appleocr").option("--mode <mode>","OCR \u6A21\u5F0F: recognize|numbers|findText","recognize").option("--input <input>",'\u8F93\u5165\u6E90\uFF0C\u9ED8\u8BA4 "screen"',"screen").option("--x <x>","\u533A\u57DF\u5DE6\u4E0A\u89D2 x","0").option("--y <y>","\u533A\u57DF\u5DE6\u4E0A\u89D2 y","0").option("--ex <ex>","\u533A\u57DF\u53F3\u4E0B\u89D2 x\uFF1B\u5168\u5C4F\u53EF\u4F20 0","0").option("--ey <ey>","\u533A\u57DF\u53F3\u4E0B\u89D2 y\uFF1B\u5168\u5C4F\u53EF\u4F20 0","0").option("--text <text>","findText \u6587\u672C\uFF0C\u53EF\u91CD\u590D",K,[]).option("--texts <texts>","findText \u6587\u672C\u6570\u7EC4\uFF0C\u652F\u6301 JSON \u6570\u7EC4\u6216\u9017\u53F7\u5206\u9694").option("--languages <languages>","Apple OCR \u8BED\u8A00\uFF0C\u652F\u6301 JSON \u6570\u7EC4\u6216\u9017\u53F7\u5206\u9694").option("--exact-match","findText \u8981\u6C42\u5B8C\u6574\u5339\u914D\u6587\u672C").option("--confidence-threshold <confidenceThreshold>","PaddleOCR \u7F6E\u4FE1\u5EA6\u9608\u503C","0.6").option("--paddle-model <paddleModel>","\u4EC5 paddleocr\uFF1A\u5207\u6362\u6A21\u578B ppocr-v6-tiny|ppocr-v6-small|ppocr-v5").option("--max-side-len <maxSideLen>","\u4EC5 paddleocr\uFF1A\u68C0\u6D4B\u6700\u5927\u8FB9\u957F\uFF0C0 \u56DE\u843D\u9ED8\u8BA4 768").option("--use-gpu","\u4EC5 paddleocr\uFF1A\u5207\u6362\u6A21\u578B\u65F6\u542F\u7528 GPU").option("--timeout-ms <timeoutMs>","\u8BF7\u6C42\u8D85\u65F6\u65F6\u95F4(\u6BEB\u79D2)","60000").option("--format <format>","\u8FD4\u56DE\u683C\u5F0F: summary|json","summary").option("--output <output>","OCR \u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84\uFF08\u53EF\u9009\uFF09").action(lt),c.program.command("image-crop").description("\u88C1\u5207\u672C\u5730\u56FE\u7247\u5E76\u8F93\u51FA PNG").requiredOption("--image <image>","\u8F93\u5165\u56FE\u7247\u8DEF\u5F84").option("--x <x>","\u88C1\u5207\u8D77\u70B9 x","0").option("--y <y>","\u88C1\u5207\u8D77\u70B9 y","0").requiredOption("--width <width>","\u88C1\u5207\u5BBD\u5EA6").requiredOption("--height <height>","\u88C1\u5207\u9AD8\u5EA6").option("--output <output>","\u8F93\u51FA PNG \u8DEF\u5F84\uFF08\u53EF\u9009\uFF09").action(ft),c.program.command("screen-crop").description("\u4ECE\u8BBE\u5907\u622A\u56FE\u4E2D\u88C1\u5207 PNG").option("-i, --ip <ip>","\u8BBE\u5907 IP \u5730\u5740").option("--port <port>","\u8BBE\u5907\u7AEF\u53E3","9800").option("--x <x>","\u88C1\u5207\u8D77\u70B9 x","0").option("--y <y>","\u88C1\u5207\u8D77\u70B9 y","0").requiredOption("--width <width>","\u88C1\u5207\u5BBD\u5EA6").requiredOption("--height <height>","\u88C1\u5207\u9AD8\u5EA6").option("--output <output>","\u8F93\u51FA PNG \u8DEF\u5F84\uFF08\u53EF\u9009\uFF09").action(gt),c.program.command("image-pick-color").description("\u8BFB\u53D6\u672C\u5730\u56FE\u7247\u6307\u5B9A\u5750\u6807\u989C\u8272").requiredOption("--image <image>","\u8F93\u5165\u56FE\u7247\u8DEF\u5F84").option("--x <x>","\u76EE\u6807\u5750\u6807 x","0").option("--y <y>","\u76EE\u6807\u5750\u6807 y","0").option("--radius <radius>","\u91C7\u6837\u534A\u5F84\uFF0C\u8303\u56F4 0..20","0").action(ht),c.program.command("screen-pick-color").description("\u8BFB\u53D6\u8BBE\u5907\u622A\u56FE\u6307\u5B9A\u5750\u6807\u989C\u8272").option("-i, --ip <ip>","\u8BBE\u5907 IP \u5730\u5740").option("--port <port>","\u8BBE\u5907\u7AEF\u53E3","9800").option("--x <x>","\u76EE\u6807\u5750\u6807 x","0").option("--y <y>","\u76EE\u6807\u5750\u6807 y","0").option("--radius <radius>","\u91C7\u6837\u534A\u5F84\uFF0C\u8303\u56F4 0..20","0").action(wt),c.program.command("image-transparent").description("\u5C06\u56FE\u7247\u4E2D\u63A5\u8FD1\u6307\u5B9A\u989C\u8272\u6216\u89D2\u843D\u80CC\u666F\u8272\u7684\u50CF\u7D20\u8BBE\u4E3A\u900F\u660E").requiredOption("--image <image>","\u8F93\u5165\u56FE\u7247\u8DEF\u5F84").option("--output <output>","\u8F93\u51FA PNG \u8DEF\u5F84\uFF08\u53EF\u9009\uFF09").option("--transparent-color <transparentColor>","\u900F\u660E\u5316\u989C\u8272\uFF0C\u683C\u5F0F #RRGGBB").option("--sample-corner <sampleCorner>","\u672A\u4F20 transparent-color \u65F6\u91C7\u6837\u89D2\u843D: topLeft|topRight|bottomLeft|bottomRight","topLeft").option("--tolerance <tolerance>","RGB \u6B27\u6C0F\u8DDD\u79BB\u5BB9\u5DEE\uFF0C\u8303\u56F4 0..441","24").action(yt);const Ct=c.program.command("docs").description("\u663E\u793A KuaiJS \u672C\u5730\u6587\u6863\u8DEF\u5F84");Ct.command("paths").description("\u663E\u793A KuaiJS \u672C\u5730\u6587\u6863\u8DEF\u5F84").option("--output <output>","\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84\uFF08\u53EF\u9009\uFF09").action(mt),c.program.command("http-call").description("\u6309 HTTP API \u6587\u6863\u58F0\u660E\u8C03\u7528\u8BBE\u5907\u63A5\u53E3").option("-i, --ip <ip>","\u8BBE\u5907 IP \u5730\u5740").option("--port <port>","\u8BBE\u5907\u7AEF\u53E3","9800").requiredOption("--method <method>","HTTP \u65B9\u6CD5: GET|POST").requiredOption("--path <path>","HTTP API \u76F8\u5BF9\u8DEF\u5F84\uFF0C\u4F8B\u5982 /api/status").option("--query <query>","JSON \u5BF9\u8C61 query \u53C2\u6570").option("--body <body>","JSON \u8BF7\u6C42\u4F53\uFF1B\u666E\u901A\u5B57\u7B26\u4E32\u4F1A\u4F5C\u4E3A JSON \u5B57\u7B26\u4E32\u63D0\u4EA4").option("--response-format <responseFormat>","\u54CD\u5E94\u683C\u5F0F: json|text","json").option("--timeout-ms <timeoutMs>","\u8BF7\u6C42\u8D85\u65F6\u65F6\u95F4(\u6BEB\u79D2)","30000").option("--output <output>","\u54CD\u5E94\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84\uFF08\u53EF\u9009\uFF09").action(dt),c.program.command("ws-start").description("\u542F\u52A8 CLI \u5185\u7F6E WS \u670D\u52A1").option("--ws-port <wsPort>","WS \u670D\u52A1\u7AEF\u53E3","31111").action(xt),c.program.command("ws-stop").description("\u505C\u6B62 CLI \u5185\u7F6E WS \u670D\u52A1").action(Pt),c.program.command("ws-status").description("\u67E5\u770B CLI \u5185\u7F6E WS \u670D\u52A1\u72B6\u6001").action(St),c.program.parse();
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("./device/project"),W=require("./packaging"),H=require("./device/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
+ `)}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
+ `):"\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
+ `);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(`
6
+ `)),O.body.success===!1&&process.exit(1)}catch(t){console.error("\u274C OCR \u6267\u884C\u5931\u8D25:",t instanceof Error?t.message:t),process.exit(1)}}async function ft(e){try{const t=e.image?.trim();if(!t)throw new Error("\u8BF7\u901A\u8FC7 --image \u6307\u5B9A\u8F93\u5165\u56FE\u7247\u8DEF\u5F84\u3002");const r=a(e.x,0,"x",0),o=a(e.y,0,"y",0),n=a(e.width,1,"width",1),i=a(e.height,1,"height",1),s=await(0,P.cropLocalImage)(t,r,o,n,i,e.output);console.log(s)}catch(t){console.error("\u274C \u56FE\u7247\u88C1\u5207\u5931\u8D25:",t instanceof Error?t.message:t),process.exit(1)}}async function gt(e){try{const t=E(e),r=a(e.x,0,"x",0),o=a(e.y,0,"y",0),n=a(e.width,1,"width",1),i=a(e.height,1,"height",1),s=await(0,P.cropDeviceScreen)(t,r,o,n,i,e.output);console.log(s)}catch(t){console.error("\u274C \u5C4F\u5E55\u88C1\u56FE\u5931\u8D25:",t instanceof Error?t.message:t),process.exit(1)}}async function ht(e){try{const t=e.image?.trim();if(!t)throw new Error("\u8BF7\u901A\u8FC7 --image \u6307\u5B9A\u8F93\u5165\u56FE\u7247\u8DEF\u5F84\u3002");const r=a(e.x,0,"x",0),o=a(e.y,0,"y",0),n=a(e.radius,0,"radius",0,20),i=await(0,P.pickLocalImageColor)(t,r,o,n);console.log(i)}catch(t){console.error("\u274C \u56FE\u7247\u53D6\u8272\u5931\u8D25:",t instanceof Error?t.message:t),process.exit(1)}}async function wt(e){try{const t=E(e),r=a(e.x,0,"x",0),o=a(e.y,0,"y",0),n=a(e.radius,0,"radius",0,20),i=await(0,P.pickDeviceScreenColor)(t,r,o,n);console.log(i)}catch(t){console.error("\u274C \u5C4F\u5E55\u53D6\u8272\u5931\u8D25:",t instanceof Error?t.message:t),process.exit(1)}}async function yt(e){try{const t=e.image?.trim();if(!t)throw new Error("\u8BF7\u901A\u8FC7 --image \u6307\u5B9A\u8F93\u5165\u56FE\u7247\u8DEF\u5F84\u3002");const r=g(e.sampleCorner,"topLeft",["topLeft","topRight","bottomLeft","bottomRight"],"sample-corner"),o=a(e.tolerance,24,"tolerance",0,441),n=await(0,P.makeLocalImageTransparent)(t,e.output,e.transparentColor,r,o);console.log(n)}catch(t){console.error("\u274C \u900F\u660E\u56FE\u5236\u4F5C\u5931\u8D25:",t instanceof Error?t.message:t),process.exit(1)}}async function xt(e){try{const t=(e.wsPort??"31111").trim(),r=Number.parseInt(t,10);if(!Number.isInteger(r)||r<1||r>65535)throw new Error(`\u65E0\u6548 ws \u7AEF\u53E3: ${t}`);const o=H.WSManager.get();await o.start(r);const n=async()=>{const s={pid:process.pid,port:r,address:o.getAddress(),startedAt:Date.now(),connected:o.isClientConnected(),clientIp:o.getConnectedClientIp()};await p.writeJSON(d,s)};await n();const i=setInterval(()=>{n().catch(()=>{})},1e3);await p.writeJSON(d,{pid:process.pid,port:r,address:o.getAddress(),startedAt:Date.now(),connected:o.isClientConnected(),clientIp:o.getConnectedClientIp()}),await new Promise(s=>{const u=async()=>{process.off("SIGINT",u),process.off("SIGTERM",u),clearInterval(i),await o.stop(),await p.remove(d),s()};process.on("SIGINT",u),process.on("SIGTERM",u)})}catch(t){console.error("\u274C WS \u670D\u52A1\u542F\u52A8\u5931\u8D25:",t instanceof Error?t.message:t),process.exit(1)}}async function Pt(){try{if(!await p.pathExists(d)){console.log("WS \u670D\u52A1\u672A\u8FD0\u884C");return}const e=await p.readJSON(d),t=Number(e.pid);if(!Number.isInteger(t)||t<=0)throw await p.remove(d),new Error("WS PID \u6587\u4EF6\u635F\u574F");try{process.kill(t,"SIGTERM"),console.log(`\u2705 \u5DF2\u53D1\u9001\u505C\u6B62\u4FE1\u53F7\u5230 WS \u8FDB\u7A0B: ${t}`)}catch{console.log("WS \u8FDB\u7A0B\u4E0D\u5B58\u5728\uFF0C\u6E05\u7406 PID \u6587\u4EF6")}await p.remove(d)}catch(e){console.error("\u274C WS \u670D\u52A1\u505C\u6B62\u5931\u8D25:",e instanceof Error?e.message:e),process.exit(1)}}async function St(){if(!await p.pathExists(d)){console.log(JSON.stringify({status:"stopped",running:!1,pid:null,address:null,connected:!1,clientIp:null}));return}const e=await p.readJSON(d),t=Number(e.pid),r=String(e.address||"unknown"),o=!!e.connected,n=e.clientIp===null||e.clientIp===void 0?null:String(e.clientIp);let i=!1;try{process.kill(t,0),i=!0}catch{i=!1}if(!i){await p.remove(d),console.log(JSON.stringify({status:"stopped",running:!1,pid:null,address:null,connected:!1,clientIp:null}));return}console.log(JSON.stringify({status:"running",running:!0,pid:t,address:r,connected:o,clientIp:o?n||"unknown":null}))}function Ot(){const e=[];e.push(""),e.push("\u8BE6\u7EC6\u547D\u4EE4\u53C2\u6570:");const t=c.program.commands.filter(r=>r.name()!=="help");for(const r of t){if(e.push(` ${r.name()}:`),r.options.length===0){e.push(" (\u65E0\u989D\u5916\u53C2\u6570)");continue}for(const o of r.options){const n=o.defaultValue!==void 0&&o.defaultValue!==null?` (\u9ED8\u8BA4: ${String(o.defaultValue)})`:"",i=o.description?` ${o.description}${n}`:n;e.push(` ${o.flags}${i}`)}}return e.push(""),e.join(`
7
+ `)}c.program.name("ms-cli").description("\u5FEB\u70B9JS \u6784\u5EFA\u5DE5\u5177").version(k.PACKAGE_VERSION),c.program.addHelpText("after",Ot),c.program.command("build").description("\u6784\u5EFA \u5FEB\u70B9JS \u9879\u76EE").option("-d, --dev","\u5F00\u53D1\u6A21\u5F0F\u6784\u5EFA (\u5305\u542B source map)").action(rt),c.program.command("package").description("\u751F\u4EA7\u6784\u5EFA\u5E76\u52A0\u5BC6 ms.msbundle").action(nt),c.program.command("run").description("\u5728\u8BBE\u5907\u4E0A\u8FD0\u884C\u9879\u76EE").option("-i, --ip <ip>","\u8BBE\u5907 IP \u5730\u5740\uFF08transport=http \u65F6\u5FC5\u586B\uFF09").option("--port <port>","\u8BBE\u5907\u7AEF\u53E3","9800").option("-t, --transport <transport>","\u4F20\u8F93\u65B9\u5F0F: http|ws","http").option("--ws-port <wsPort>","WS \u670D\u52A1\u7AEF\u53E3","31111").option("--ws-wait-ms <wsWaitMs>","WS \u7B49\u5F85\u8BBE\u5907\u8FDE\u63A5\u65F6\u95F4(\u6BEB\u79D2)","30000").action(it),c.program.command("run-ui").description("\u5728\u8BBE\u5907\u4E0A\u9884\u89C8 UI").option("-i, --ip <ip>","\u8BBE\u5907 IP \u5730\u5740\uFF08transport=http \u65F6\u5FC5\u586B\uFF09").option("--port <port>","\u8BBE\u5907\u7AEF\u53E3","9800").option("-t, --transport <transport>","\u4F20\u8F93\u65B9\u5F0F: http|ws","http").option("--ws-port <wsPort>","WS \u670D\u52A1\u7AEF\u53E3","31111").option("--ws-wait-ms <wsWaitMs>","WS \u7B49\u5F85\u8BBE\u5907\u8FDE\u63A5\u65F6\u95F4(\u6BEB\u79D2)","30000").action(st),c.program.command("stop").description("\u505C\u6B62\u8BBE\u5907\u4E0A\u7684\u9879\u76EE").option("-i, --ip <ip>","\u8BBE\u5907 IP \u5730\u5740\uFF08transport=http \u65F6\u5FC5\u586B\uFF09").option("--port <port>","\u8BBE\u5907\u7AEF\u53E3","9800").option("-t, --transport <transport>","\u4F20\u8F93\u65B9\u5F0F: http|ws","http").option("--ws-port <wsPort>","WS \u670D\u52A1\u7AEF\u53E3","31111").option("--ws-wait-ms <wsWaitMs>","WS \u7B49\u5F85\u8BBE\u5907\u8FDE\u63A5\u65F6\u95F4(\u6BEB\u79D2)","30000").action(at),c.program.command("screenshot").description("\u83B7\u53D6\u8BBE\u5907\u622A\u56FE\uFF08JPG\uFF09").option("-i, --ip <ip>","\u8BBE\u5907 IP \u5730\u5740\uFF08transport=http \u65F6\u5FC5\u586B\uFF09").option("--port <port>","\u8BBE\u5907\u7AEF\u53E3","9800").option("-t, --transport <transport>","\u4F20\u8F93\u65B9\u5F0F: http|ws","http").option("--ws-port <wsPort>","WS \u670D\u52A1\u7AEF\u53E3","31111").option("--ws-wait-ms <wsWaitMs>","WS \u7B49\u5F85\u8BBE\u5907\u8FDE\u63A5\u65F6\u95F4(\u6BEB\u79D2)","30000").option("--format <format>","\u8FD4\u56DE\u683C\u5F0F: file|base64","file").option("--output <output>","\u622A\u56FE\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84\uFF08format=file \u65F6\u751F\u6548\uFF09").action(ct),c.program.command("source").description("\u83B7\u53D6\u8BBE\u5907\u5F53\u524D\u9875\u9762\u8282\u70B9 XML").option("-i, --ip <ip>","\u8BBE\u5907 IP \u5730\u5740\uFF08transport=http \u65F6\u5FC5\u586B\uFF09").option("--port <port>","\u8BBE\u5907\u7AEF\u53E3","9800").option("-t, --transport <transport>","\u4F20\u8F93\u65B9\u5F0F: http|ws","http").option("--ws-port <wsPort>","WS \u670D\u52A1\u7AEF\u53E3","31111").option("--ws-wait-ms <wsWaitMs>","WS \u7B49\u5F85\u8BBE\u5907\u8FDE\u63A5\u65F6\u95F4(\u6BEB\u79D2)","30000").option("--max-depth <maxDepth>","\u8282\u70B9\u6700\u5927\u6DF1\u5EA6","50").option("--timeout <timeout>","\u8282\u70B9\u6293\u53D6\u8D85\u65F6\u79D2\u6570","120").option("--mode <mode>","\u8282\u70B9\u6293\u53D6\u6A21\u5F0F: 1=\u6A21\u5F0F1, 2=\u6A21\u5F0F2, 3=\u6A21\u5F0F3","1").option("--output <output>","\u8282\u70B9 XML \u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84\uFF08\u53EF\u9009\uFF09").action(pt),c.program.command("logs").description("\u83B7\u53D6\u8BBE\u5907\u5F53\u524D\u65E5\u5FD7\u6700\u65B0\u884C").option("-i, --ip <ip>","\u8BBE\u5907 IP \u5730\u5740").option("--port <port>","\u8BBE\u5907\u7AEF\u53E3","9800").option("--limit <limit>","\u8BFB\u53D6\u6700\u65B0\u65E5\u5FD7\u884C\u6570\uFF0C\u8303\u56F4 1..5000","200").option("--format <format>","\u8FD4\u56DE\u683C\u5F0F: text|json","text").option("--output <output>","\u65E5\u5FD7\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84\uFF08\u53EF\u9009\uFF09").action(ut),c.program.command("ocr").description("\u5728\u8BBE\u5907\u4E0A\u6267\u884C OCR \u8BC6\u522B").option("-i, --ip <ip>","\u8BBE\u5907 IP \u5730\u5740").option("--port <port>","\u8BBE\u5907\u7AEF\u53E3","9800").option("--engine <engine>","OCR \u5F15\u64CE: appleocr|paddleocr","appleocr").option("--mode <mode>","OCR \u6A21\u5F0F: recognize|numbers|findText","recognize").option("--input <input>",'\u8F93\u5165\u6E90\uFF0C\u9ED8\u8BA4 "screen"',"screen").option("--x <x>","\u533A\u57DF\u5DE6\u4E0A\u89D2 x","0").option("--y <y>","\u533A\u57DF\u5DE6\u4E0A\u89D2 y","0").option("--ex <ex>","\u533A\u57DF\u53F3\u4E0B\u89D2 x\uFF1B\u5168\u5C4F\u53EF\u4F20 0","0").option("--ey <ey>","\u533A\u57DF\u53F3\u4E0B\u89D2 y\uFF1B\u5168\u5C4F\u53EF\u4F20 0","0").option("--text <text>","findText \u6587\u672C\uFF0C\u53EF\u91CD\u590D",K,[]).option("--texts <texts>","findText \u6587\u672C\u6570\u7EC4\uFF0C\u652F\u6301 JSON \u6570\u7EC4\u6216\u9017\u53F7\u5206\u9694").option("--languages <languages>","Apple OCR \u8BED\u8A00\uFF0C\u652F\u6301 JSON \u6570\u7EC4\u6216\u9017\u53F7\u5206\u9694").option("--exact-match","findText \u8981\u6C42\u5B8C\u6574\u5339\u914D\u6587\u672C").option("--confidence-threshold <confidenceThreshold>","PaddleOCR \u7F6E\u4FE1\u5EA6\u9608\u503C","0.6").option("--paddle-model <paddleModel>","\u4EC5 paddleocr\uFF1A\u5207\u6362\u6A21\u578B ppocr-v6-tiny|ppocr-v6-small|ppocr-v5").option("--max-side-len <maxSideLen>","\u4EC5 paddleocr\uFF1A\u68C0\u6D4B\u6700\u5927\u8FB9\u957F\uFF0C0 \u56DE\u843D\u9ED8\u8BA4 768").option("--use-gpu","\u4EC5 paddleocr\uFF1A\u5207\u6362\u6A21\u578B\u65F6\u542F\u7528 GPU").option("--timeout-ms <timeoutMs>","\u8BF7\u6C42\u8D85\u65F6\u65F6\u95F4(\u6BEB\u79D2)","60000").option("--format <format>","\u8FD4\u56DE\u683C\u5F0F: summary|json","summary").option("--output <output>","OCR \u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84\uFF08\u53EF\u9009\uFF09").action(lt),c.program.command("image-crop").description("\u88C1\u5207\u672C\u5730\u56FE\u7247\u5E76\u8F93\u51FA PNG").requiredOption("--image <image>","\u8F93\u5165\u56FE\u7247\u8DEF\u5F84").option("--x <x>","\u88C1\u5207\u8D77\u70B9 x","0").option("--y <y>","\u88C1\u5207\u8D77\u70B9 y","0").requiredOption("--width <width>","\u88C1\u5207\u5BBD\u5EA6").requiredOption("--height <height>","\u88C1\u5207\u9AD8\u5EA6").option("--output <output>","\u8F93\u51FA PNG \u8DEF\u5F84\uFF08\u53EF\u9009\uFF09").action(ft),c.program.command("screen-crop").description("\u4ECE\u8BBE\u5907\u622A\u56FE\u4E2D\u88C1\u5207 PNG").option("-i, --ip <ip>","\u8BBE\u5907 IP \u5730\u5740").option("--port <port>","\u8BBE\u5907\u7AEF\u53E3","9800").option("--x <x>","\u88C1\u5207\u8D77\u70B9 x","0").option("--y <y>","\u88C1\u5207\u8D77\u70B9 y","0").requiredOption("--width <width>","\u88C1\u5207\u5BBD\u5EA6").requiredOption("--height <height>","\u88C1\u5207\u9AD8\u5EA6").option("--output <output>","\u8F93\u51FA PNG \u8DEF\u5F84\uFF08\u53EF\u9009\uFF09").action(gt),c.program.command("image-pick-color").description("\u8BFB\u53D6\u672C\u5730\u56FE\u7247\u6307\u5B9A\u5750\u6807\u989C\u8272").requiredOption("--image <image>","\u8F93\u5165\u56FE\u7247\u8DEF\u5F84").option("--x <x>","\u76EE\u6807\u5750\u6807 x","0").option("--y <y>","\u76EE\u6807\u5750\u6807 y","0").option("--radius <radius>","\u91C7\u6837\u534A\u5F84\uFF0C\u8303\u56F4 0..20","0").action(ht),c.program.command("screen-pick-color").description("\u8BFB\u53D6\u8BBE\u5907\u622A\u56FE\u6307\u5B9A\u5750\u6807\u989C\u8272").option("-i, --ip <ip>","\u8BBE\u5907 IP \u5730\u5740").option("--port <port>","\u8BBE\u5907\u7AEF\u53E3","9800").option("--x <x>","\u76EE\u6807\u5750\u6807 x","0").option("--y <y>","\u76EE\u6807\u5750\u6807 y","0").option("--radius <radius>","\u91C7\u6837\u534A\u5F84\uFF0C\u8303\u56F4 0..20","0").action(wt),c.program.command("image-transparent").description("\u5C06\u56FE\u7247\u4E2D\u63A5\u8FD1\u6307\u5B9A\u989C\u8272\u6216\u89D2\u843D\u80CC\u666F\u8272\u7684\u50CF\u7D20\u8BBE\u4E3A\u900F\u660E").requiredOption("--image <image>","\u8F93\u5165\u56FE\u7247\u8DEF\u5F84").option("--output <output>","\u8F93\u51FA PNG \u8DEF\u5F84\uFF08\u53EF\u9009\uFF09").option("--transparent-color <transparentColor>","\u900F\u660E\u5316\u989C\u8272\uFF0C\u683C\u5F0F #RRGGBB").option("--sample-corner <sampleCorner>","\u672A\u4F20 transparent-color \u65F6\u91C7\u6837\u89D2\u843D: topLeft|topRight|bottomLeft|bottomRight","topLeft").option("--tolerance <tolerance>","RGB \u6B27\u6C0F\u8DDD\u79BB\u5BB9\u5DEE\uFF0C\u8303\u56F4 0..441","24").action(yt);const Ct=c.program.command("docs").description("\u663E\u793A KuaiJS \u672C\u5730\u6587\u6863\u8DEF\u5F84");Ct.command("paths").description("\u663E\u793A KuaiJS \u672C\u5730\u6587\u6863\u8DEF\u5F84").option("--output <output>","\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84\uFF08\u53EF\u9009\uFF09").action(mt),c.program.command("http-call").description("\u6309 HTTP API \u6587\u6863\u58F0\u660E\u8C03\u7528\u8BBE\u5907\u63A5\u53E3").option("-i, --ip <ip>","\u8BBE\u5907 IP \u5730\u5740").option("--port <port>","\u8BBE\u5907\u7AEF\u53E3","9800").requiredOption("--method <method>","HTTP \u65B9\u6CD5: GET|POST").requiredOption("--path <path>","HTTP API \u76F8\u5BF9\u8DEF\u5F84\uFF0C\u4F8B\u5982 /api/status").option("--query <query>","JSON \u5BF9\u8C61 query \u53C2\u6570").option("--body <body>","JSON \u8BF7\u6C42\u4F53\uFF1B\u666E\u901A\u5B57\u7B26\u4E32\u4F1A\u4F5C\u4E3A JSON \u5B57\u7B26\u4E32\u63D0\u4EA4").option("--response-format <responseFormat>","\u54CD\u5E94\u683C\u5F0F: json|text","json").option("--timeout-ms <timeoutMs>","\u8BF7\u6C42\u8D85\u65F6\u65F6\u95F4(\u6BEB\u79D2)","30000").option("--output <output>","\u54CD\u5E94\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84\uFF08\u53EF\u9009\uFF09").action(dt),c.program.command("ws-start").description("\u542F\u52A8 CLI \u5185\u7F6E WS \u670D\u52A1").option("--ws-port <wsPort>","WS \u670D\u52A1\u7AEF\u53E3","31111").action(xt),c.program.command("ws-stop").description("\u505C\u6B62 CLI \u5185\u7F6E WS \u670D\u52A1").action(Pt),c.program.command("ws-status").description("\u67E5\u770B CLI \u5185\u7F6E WS \u670D\u52A1\u72B6\u6001").action(St),c.program.parse();
@@ -1,4 +1 @@
1
- export type PackageOptions = {
2
- v2?: boolean;
3
- };
4
- export declare function packageProject(workspacePath: string, options?: PackageOptions): Promise<string>;
1
+ export declare function packageProject(workspacePath: string): Promise<string>;
@@ -1 +1 @@
1
- "use strict";var s=exports&&exports.__createBinding||(Object.create?(function(e,n,r,t){t===void 0&&(t=r);var i=Object.getOwnPropertyDescriptor(n,r);(!i||("get"in i?!n.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return n[r]}}),Object.defineProperty(e,t,i)}):(function(e,n,r,t){t===void 0&&(t=r),e[t]=n[r]})),f=exports&&exports.__setModuleDefault||(Object.create?(function(e,n){Object.defineProperty(e,"default",{enumerable:!0,value:n})}):function(e,n){e.default=n}),o=exports&&exports.__importStar||(function(){var e=function(n){return e=Object.getOwnPropertyNames||function(r){var t=[];for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[t.length]=i);return t},e(n)};return function(n){if(n&&n.__esModule)return n;var r={};if(n!=null)for(var t=e(n),i=0;i<t.length;i++)t[i]!=="default"&&s(r,n,t[i]);return f(r,n),r}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.packageProject=v;const l=require("module"),u=o(require("fs-extra")),a=o(require("path")),d=require("../build"),_=(0,l.createRequire)(__filename),c={BUNDLE_NAME:"ms.msbundle",ENCRYPTED_BUNDLE_NAME:"enc.msbundle"};function E(){return a.resolve(__dirname,"..","..")}function w(){const{platform:e,arch:n}=process;if(e==="darwin"&&n==="arm64")return"ms-bundle-enc.darwin-arm64.node";if(e==="darwin"&&n==="x64")return"ms-bundle-enc.darwin-x64.node";if(e==="win32"&&n==="x64")return"ms-bundle-enc.win32-x64-msvc.node";throw new Error(`\u4E0D\u652F\u6301\u7684\u7CFB\u7EDF\u5E73\u53F0: ${e}-${n}`)}function b(){const e=a.join(E(),"native",w());if(!u.pathExistsSync(e))throw new Error(`\u672A\u627E\u5230\u52A0\u5BC6\u6A21\u5757: ${e}`);return _(e)}async function h(e,n){if(n?.v2===!0)return!0;try{return(await u.readJson(a.join(e,"package.json")))?.hotUpdateVersion==="v2"}catch{return!1}}async function p(e,n){b().encrypt(e,{v2:n});const r=a.join(a.dirname(e),c.ENCRYPTED_BUNDLE_NAME);if(!await u.pathExists(r))throw new Error("\u52A0\u5BC6\u6A21\u5757\u672A\u751F\u6210 enc.msbundle \u6587\u4EF6");return await u.remove(e),r}async function v(e,n){await(0,d.buildAll)(!1,e);const r=a.join(e,"dist",c.BUNDLE_NAME);if(!await u.pathExists(r))throw new Error(`\u6784\u5EFA\u5931\u8D25\uFF0C\u672A\u627E\u5230 ${c.BUNDLE_NAME} \u6587\u4EF6`);const t=await h(e,n);return p(r,t)}
1
+ "use strict";var f=exports&&exports.__createBinding||(Object.create?(function(n,e,i,r){r===void 0&&(r=i);var t=Object.getOwnPropertyDescriptor(e,i);(!t||("get"in t?!e.__esModule:t.writable||t.configurable))&&(t={enumerable:!0,get:function(){return e[i]}}),Object.defineProperty(n,r,t)}):(function(n,e,i,r){r===void 0&&(r=i),n[r]=e[i]})),s=exports&&exports.__setModuleDefault||(Object.create?(function(n,e){Object.defineProperty(n,"default",{enumerable:!0,value:e})}):function(n,e){n.default=e}),o=exports&&exports.__importStar||(function(){var n=function(e){return n=Object.getOwnPropertyNames||function(i){var r=[];for(var t in i)Object.prototype.hasOwnProperty.call(i,t)&&(r[r.length]=t);return r},n(e)};return function(e){if(e&&e.__esModule)return e;var i={};if(e!=null)for(var r=n(e),t=0;t<r.length;t++)r[t]!=="default"&&f(i,e,r[t]);return s(i,e),i}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.packageProject=p;const l=require("module"),a=o(require("fs-extra")),u=o(require("path")),d=require("../build"),_=(0,l.createRequire)(__filename),c={BUNDLE_NAME:"ms.msbundle",ENCRYPTED_BUNDLE_NAME:"enc.msbundle"};function E(){return u.resolve(__dirname,"..","..")}function w(){const{platform:n,arch:e}=process;if(n==="darwin"&&e==="arm64")return"ms-bundle-enc.darwin-arm64.node";if(n==="darwin"&&e==="x64")return"ms-bundle-enc.darwin-x64.node";if(n==="win32"&&e==="x64")return"ms-bundle-enc.win32-x64-msvc.node";throw new Error(`\u4E0D\u652F\u6301\u7684\u7CFB\u7EDF\u5E73\u53F0: ${n}-${e}`)}function b(){const n=u.join(E(),"native",w());if(!a.pathExistsSync(n))throw new Error(`\u672A\u627E\u5230\u52A0\u5BC6\u6A21\u5757: ${n}`);return _(n)}async function h(n){b().encrypt(n);const e=u.join(u.dirname(n),c.ENCRYPTED_BUNDLE_NAME);if(!await a.pathExists(e))throw new Error("\u52A0\u5BC6\u6A21\u5757\u672A\u751F\u6210 enc.msbundle \u6587\u4EF6");return await a.remove(n),e}async function p(n){await(0,d.buildAll)(!1,n);const e=u.join(n,"dist",c.BUNDLE_NAME);if(!await a.pathExists(e))throw new Error(`\u6784\u5EFA\u5931\u8D25\uFF0C\u672A\u627E\u5230 ${c.BUNDLE_NAME} \u6587\u4EF6`);return h(e)}
@@ -313,7 +313,7 @@ logi("应用已切换到前台");
313
313
 
314
314
  - `0` 标准:等待完整执行完成
315
315
  - `1` 快速:更快的执行速度
316
- - `2` 真实点击:更接近真实手指触控
316
+ - `2` 真实点击:带触摸面积
317
317
 
318
318
  ```typescript
319
319
  function setAgentTouchMode(mode: number): number;
package/docs/api/image.md CHANGED
@@ -12,6 +12,8 @@
12
12
 
13
13
  所有传递`imageId`的函数都可以使用`"actionScreenshot"`作为参数,来表示指定 HID 快捷键系统截图
14
14
 
15
+ 所有传递`imageId`的函数都可以使用`"vpnScreenshot"`作为参数,来表示指定VPN免自动化截图
16
+
15
17
  所有传递`imageId`的函数都可以使用图片路径作为参数,来表示对指定图片进行操作,支持 res 目录文件,和手机文件路径。
16
18
 
17
19
  ## 图片获取与管理
@@ -38,8 +40,8 @@ function captureScreen(
38
40
 
39
41
  **返回值:**
40
42
 
41
- | 类型 | 描述 |
42
- | -------- | -------------------------------- |
43
+ | 类型 | 描述 |
44
+ | -------- | ------------------------------------- |
43
45
  | `string` | 截图的图片 ID,失败时返回 `undefined` |
44
46
 
45
47
  **示例:**
@@ -84,8 +86,8 @@ function readImage(path: string): string | undefined;
84
86
 
85
87
  **返回值:**
86
88
 
87
- | 类型 | 描述 |
88
- | -------- | -------------------------- |
89
+ | 类型 | 描述 |
90
+ | -------- | ------------------------------- |
89
91
  | `string` | 图片 ID,失败时返回 `undefined` |
90
92
 
91
93
  **示例:**
@@ -186,7 +188,9 @@ if (imageId) {
186
188
  ### getSize - 获取图片尺寸。
187
189
 
188
190
  ```typescript
189
- function getSize(imageId: string): { width: number; height: number } | undefined;
191
+ function getSize(
192
+ imageId: string,
193
+ ): { width: number; height: number } | undefined;
190
194
  ```
191
195
 
192
196
  **参数:**
@@ -197,8 +201,8 @@ function getSize(imageId: string): { width: number; height: number } | undefined
197
201
 
198
202
  **返回值:**
199
203
 
200
- | 类型 | 描述 |
201
- | ---------------- | -------------------------------------------------------------- |
204
+ | 类型 | 描述 |
205
+ | --------------------- | ------------------------------------------------------------------- |
202
206
  | `object \| undefined` | 图片尺寸对象,包含 `width` 和 `height` 属性,失败时返回 `undefined` |
203
207
 
204
208
  **示例:**
@@ -933,8 +937,8 @@ function rotateImage(imageId: string, degree: number): string | undefined;
933
937
 
934
938
  **返回值:**
935
939
 
936
- | 类型 | 描述 |
937
- | ---------------- | ----------------------------------- |
940
+ | 类型 | 描述 |
941
+ | --------------------- | ---------------------------------------- |
938
942
  | `string \| undefined` | 旋转后的新图片 ID 失败时返回 `undefined` |
939
943
 
940
944
  **示例:**
@@ -1070,8 +1074,8 @@ function scanCode(imageId: string): string | undefined;
1070
1074
 
1071
1075
  **返回值:**
1072
1076
 
1073
- | 类型 | 描述 |
1074
- | ---------------- | --------------------------- |
1077
+ | 类型 | 描述 |
1078
+ | --------------------- | -------------------------------- |
1075
1079
  | `string \| undefined` | 扫码结果,失败时返回 `undefined` |
1076
1080
 
1077
1081
  **示例:**
@@ -1127,7 +1131,11 @@ if (imageId) {
1127
1131
  ### toBase64Format - 将图片转换为 Base64 字符串。
1128
1132
 
1129
1133
  ```typescript
1130
- function toBase64Format(imageId: string, format: string, q: number): string | undefined;
1134
+ function toBase64Format(
1135
+ imageId: string,
1136
+ format: string,
1137
+ q: number,
1138
+ ): string | undefined;
1131
1139
  ```
1132
1140
 
1133
1141
  **参数:**
@@ -6,6 +6,8 @@
6
6
 
7
7
  还可读写「允许 App 请求跟踪」「个性化广告」和定位服务总开关。不同 iOS 版本中,这些设置项的名称或位置可能略有不同。
8
8
 
9
+ `jbroot` 把系统根下的路径映射成越狱根下的绝对路径。`rootfs` 把越狱根路径还原成系统根路径。已经是越狱根路径时再调用 `jbroot`,会再映射一次。
10
+
9
11
  ## API 参考
10
12
 
11
13
  ### respring - 重启 SpringBoard(Respring)。
@@ -209,3 +211,74 @@ function setLocationServices(enabled: boolean): boolean;
209
211
  ```javascript
210
212
  jbsystem.setLocationServices(false);
211
213
  ```
214
+
215
+ ### jbroot - 系统根路径映射为越狱根路径。
216
+
217
+ ```typescript
218
+ function jbroot(path: string): string;
219
+ ```
220
+
221
+ **参数:**
222
+
223
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
224
+ | ------ | -------- | -------- | ------ | -------------- |
225
+ | `path` | `string` | 是 | - | 系统根下的路径 |
226
+
227
+ **返回值:**
228
+
229
+ | 类型 | 描述 |
230
+ | -------- | ---------------- |
231
+ | `string` | 对应的越狱根路径 |
232
+
233
+ **示例:**
234
+
235
+ ```javascript
236
+ // 传入系统根下的路径,返回越狱根下的绝对路径。
237
+ // 隐根:
238
+ // jbsystem.jbroot("/") -> /var/containers/Bundle/Application/.jbroot-XXXXXXXXXXXXXXXX/
239
+ // jbsystem.jbroot("/usr/bin") -> /var/containers/Bundle/Application/.jbroot-XXXXXXXXXXXXXXXX/usr/bin
240
+ // 无根:
241
+ // jbsystem.jbroot("/") -> /var/jb
242
+ // jbsystem.jbroot("/usr/bin") -> /var/jb/usr/bin
243
+ const bin = jbsystem.jbroot("/usr/bin");
244
+ logi(bin);
245
+ ```
246
+
247
+ ### rootfs - 越狱根路径还原为系统根路径。
248
+
249
+ 把 `jbroot` 得到的越狱根路径还原成原来的系统根路径。
250
+
251
+ ```typescript
252
+ function rootfs(path: string): string;
253
+ ```
254
+
255
+ **参数:**
256
+
257
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
258
+ | ------ | -------- | -------- | ------ | -------------- |
259
+ | `path` | `string` | 是 | - | 越狱根下的路径 |
260
+
261
+ **返回值:**
262
+
263
+ | 类型 | 描述 |
264
+ | -------- | ---------------- |
265
+ | `string` | 对应的系统根路径 |
266
+
267
+ **示例:**
268
+
269
+ ```javascript
270
+ // 传入越狱根路径,返回对应的系统根路径。
271
+ // 隐根:
272
+ // jbsystem.rootfs("/var/containers/Bundle/Application/.jbroot-XXXXXXXXXXXXXXXX/")
273
+ // -> /
274
+ // jbsystem.rootfs("/var/containers/Bundle/Application/.jbroot-XXXXXXXXXXXXXXXX/usr/bin")
275
+ // -> /usr/bin
276
+ // 无根:
277
+ // jbsystem.rootfs("/var/jb") -> /
278
+ // jbsystem.rootfs("/var/jb/usr/bin") -> /usr/bin
279
+ // 隐根上,系统根路径也会被 rootfs 指到 /rootfs:
280
+ // jbsystem.rootfs("/usr/bin") -> /rootfs/usr/bin
281
+ const sysBin = jbsystem.rootfs(jbsystem.jbroot("/usr/bin"));
282
+ logi(sysBin);
283
+ // /usr/bin
284
+ ```