@qqbrowser/qbot-claw-launcher 0.9.60 → 0.9.61

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";Object.defineProperty(exports,"__esModule",{value:!0}),exports.verifyServiceToken=u,exports.verifyOrigin=s,exports.authenticateRequest=o;const i=["https://quickstart.imtt.qq.com","https://quickstarttest.imtt.qq.com","https://browser.qq.com"];function u(t,e){return!0}function s(t){let e=t.headers.origin;if(!e){const r=t.headers.referer;if(r)try{e=new URL(r).origin}catch{}}if(!e||e.startsWith("chrome-extension://")||e.startsWith("moz-extension://"))return!0;try{const r=new URL(e).origin;return i.some(n=>{try{return new URL(n).origin===r}catch{return!1}})}catch{return!1}}function o(t,e){return u(t,e)?s(t)?{ok:!0,statusCode:200,message:""}:{ok:!1,statusCode:403,message:"\u8BF7\u6C42\u6765\u6E90\u4E0D\u5728\u5141\u8BB8\u5217\u8868\u4E2D"}:{ok:!1,statusCode:401,message:"\u672A\u6388\u6743\u8BBF\u95EE\uFF1A\u7F3A\u5C11\u6709\u6548\u7684 ServiceToken"}}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.verifyServiceToken=u,exports.verifyOrigin=s,exports.authenticateRequest=o;const n=["https://quickstart.imtt.qq.com","https://quickstarttest.imtt.qq.com","https://browser.qq.com"];function u(t,e){return!0}function s(t){let e=t.headers.origin;if(!e){const r=t.headers.referer;if(r)try{e=new URL(r).origin}catch{}}if(!e||e.startsWith("chrome-extension://")||e.startsWith("moz-extension://"))return!0;try{const r=new URL(e).origin;return n.some(i=>{try{return new URL(i).origin===r}catch{return!1}})}catch{return!1}}function o(t,e){return u(t,e)?s(t)?{ok:!0,statusCode:200,message:""}:{ok:!1,statusCode:403,message:"\u8BF7\u6C42\u6765\u6E90\u4E0D\u5728\u5141\u8BB8\u5217\u8868\u4E2D"}:{ok:!1,statusCode:401,message:"\u672A\u6388\u6743\u8BBF\u95EE\uFF1A\u7F3A\u5C11\u6709\u6548\u7684 ServiceToken"}}
@@ -1,11 +1,11 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isFilePickerBusy=$,exports.showFilePicker=B;const f=require("child_process"),E=6e4;let d=!1;function $(){return d}async function B(r={}){if(d)throw new Error("\u5DF2\u6709\u6587\u4EF6\u9009\u62E9\u5BF9\u8BDD\u6846\u6B63\u5728\u663E\u793A");d=!0;try{const l=process.platform;switch(l){case"darwin":return await y(r);case"win32":return await x(r);case"linux":return await O(r);default:throw new Error(`\u4E0D\u652F\u6301\u7684\u64CD\u4F5C\u7CFB\u7EDF\u5E73\u53F0: ${l}`)}}finally{d=!1}}function y(r){const{extensions:l=[],multiple:o=!1,title:c="\u9009\u62E9\u6587\u4EF6",allowDirectory:F=!1}=r;let t;if(F)t=`choose folder with prompt "${h(c)}"`,o&&(t+=" with multiple selections allowed");else if(t=`choose file with prompt "${h(c)}"`,o&&(t+=" with multiple selections allowed"),l.length>0){const u=l.map(e=>`"${e.replace(/^\./,"")}"`).join(", ");t+=` of type {${u}}`}const i=o?`set selectedItems to (${t})
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isFilePickerBusy=g,exports.showFilePicker=B;const f=require("child_process"),E=6e4;let d=!1;function g(){return d}async function B(l={}){if(d)throw new Error("\u5DF2\u6709\u6587\u4EF6\u9009\u62E9\u5BF9\u8BDD\u6846\u6B63\u5728\u663E\u793A");d=!0;try{const r=process.platform;switch(r){case"darwin":return await y(l);case"win32":return await x(l);case"linux":return await O(l);default:throw new Error(`\u4E0D\u652F\u6301\u7684\u64CD\u4F5C\u7CFB\u7EDF\u5E73\u53F0: ${r}`)}}finally{d=!1}}function y(l){const{extensions:r=[],multiple:n=!1,title:c="\u9009\u62E9\u6587\u4EF6",allowDirectory:F=!1}=l;let t;if(F)t=`choose folder with prompt "${h(c)}"`,n&&(t+=" with multiple selections allowed");else if(t=`choose file with prompt "${h(c)}"`,n&&(t+=" with multiple selections allowed"),r.length>0){const u=r.map(e=>`"${e.replace(/^\./,"")}"`).join(", ");t+=` of type {${u}}`}const i=n?`set selectedItems to (${t})
2
2
  set posixPaths to ""
3
3
  repeat with anItem in selectedItems
4
4
  set posixPaths to posixPaths & POSIX path of anItem & linefeed
5
5
  end repeat
6
6
  return posixPaths`:`set selectedItem to (${t})
7
- return POSIX path of selectedItem`;return new Promise((u,e)=>{const p=(0,f.execFile)("osascript",["-e",i],{timeout:E},(s,a,n)=>{if(s){if(s.killed){e(new Error("\u6587\u4EF6\u9009\u62E9\u5BF9\u8BDD\u6846\u8D85\u65F6\uFF0860\u79D2\uFF09"));return}if(n&&n.includes("User canceled")){u(null);return}if(s.code===1){u(null);return}e(new Error(`macOS \u6587\u4EF6\u9009\u62E9\u5931\u8D25: ${n||s.message}`));return}const m=a.trim().split(`
8
- `).map(g=>g.trim()).filter(Boolean);u(m.length>0?m:null)})})}function h(r){return r.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function x(r){const{extensions:l=[],multiple:o=!1,title:c="\u9009\u62E9\u6587\u4EF6",allowDirectory:F=!1}=r;let t;if(F)t=`
7
+ return POSIX path of selectedItem`;return new Promise((u,e)=>{const p=(0,f.execFile)("osascript",["-e",i],{timeout:E},(s,a,o)=>{if(s){if(s.killed){e(new Error("\u6587\u4EF6\u9009\u62E9\u5BF9\u8BDD\u6846\u8D85\u65F6\uFF0860\u79D2\uFF09"));return}if(o&&o.includes("User canceled")){u(null);return}if(s.code===1){u(null);return}e(new Error(`macOS \u6587\u4EF6\u9009\u62E9\u5931\u8D25: ${o||s.message}`));return}const m=a.trim().split(`
8
+ `).map($=>$.trim()).filter(Boolean);u(m.length>0?m:null)})})}function h(l){return l.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function x(l){const{extensions:r=[],multiple:n=!1,title:c="\u9009\u62E9\u6587\u4EF6",allowDirectory:F=!1}=l;let t;if(F)t=`
9
9
  Add-Type -AssemblyName System.Windows.Forms
10
10
  $dialog = New-Object System.Windows.Forms.FolderBrowserDialog
11
11
  $dialog.Description = '${w(c)}'
@@ -15,19 +15,19 @@ if ($result -eq [System.Windows.Forms.DialogResult]::OK) {
15
15
  Write-Output $dialog.SelectedPath
16
16
  } else {
17
17
  Write-Output ''
18
- }`;else{let i="\u6240\u6709\u6587\u4EF6 (*.*)|*.*";if(l.length>0){const u=l.map(e=>`*${e.startsWith(".")?e:"."+e}`).join(";");i=`\u5141\u8BB8\u7684\u6587\u4EF6\u7C7B\u578B (${l.map(e=>e.startsWith(".")?e:"."+e).join(", ")})|${u}|\u6240\u6709\u6587\u4EF6 (*.*)|*.*`}t=`
18
+ }`;else{let i="\u6240\u6709\u6587\u4EF6 (*.*)|*.*";if(r.length>0){const u=r.map(e=>`*${e.startsWith(".")?e:"."+e}`).join(";");i=`\u5141\u8BB8\u7684\u6587\u4EF6\u7C7B\u578B (${r.map(e=>e.startsWith(".")?e:"."+e).join(", ")})|${u}|\u6240\u6709\u6587\u4EF6 (*.*)|*.*`}t=`
19
19
  Add-Type -AssemblyName System.Windows.Forms
20
20
  $dialog = New-Object System.Windows.Forms.OpenFileDialog
21
21
  $dialog.Title = '${w(c)}'
22
22
  $dialog.Filter = '${w(i)}'
23
- $dialog.Multiselect = $${o?"true":"false"}
23
+ $dialog.Multiselect = $${n?"true":"false"}
24
24
  $result = $dialog.ShowDialog()
25
25
  if ($result -eq [System.Windows.Forms.DialogResult]::OK) {
26
26
  $dialog.FileNames | ForEach-Object { Write-Output $_ }
27
27
  } else {
28
28
  Write-Output ''
29
- }`}return new Promise((i,u)=>{(0,f.execFile)("powershell.exe",["-NoProfile","-NonInteractive","-Command",t],{timeout:E},(e,p,s)=>{if(e){if(e.killed){u(new Error("\u6587\u4EF6\u9009\u62E9\u5BF9\u8BDD\u6846\u8D85\u65F6\uFF0860\u79D2\uFF09"));return}u(new Error(`Windows \u6587\u4EF6\u9009\u62E9\u5931\u8D25: ${s||e.message}`));return}const a=p.trim();if(!a){i(null);return}const n=a.split(`
30
- `).map(m=>m.trim()).filter(Boolean);i(n.length>0?n:null)})})}function w(r){return r.replace(/'/g,"''")}async function O(r){if(await D("zenity"))return P(r);if(await D("kdialog"))return W(r);throw new Error("Linux \u7CFB\u7EDF\u672A\u5B89\u88C5 zenity \u6216 kdialog\uFF0C\u65E0\u6CD5\u5F39\u51FA\u6587\u4EF6\u9009\u62E9\u5BF9\u8BDD\u6846\u3002\u8BF7\u5B89\u88C5\u5176\u4E2D\u4E4B\u4E00\uFF1Asudo apt install zenity \u6216 sudo apt install kdialog")}function D(r){return new Promise(l=>{(0,f.execFile)("which",[r],o=>{l(!o)})})}function P(r){const{extensions:l=[],multiple:o=!1,title:c="\u9009\u62E9\u6587\u4EF6",allowDirectory:F=!1}=r,t=["--file-selection",`--title=${c}`];if(F&&t.push("--directory"),o&&t.push("--multiple",`--separator=
31
- `),!F&&l.length>0){const i=l.map(u=>`*${u.startsWith(".")?u:"."+u}`).join(" ");t.push(`--file-filter=\u5141\u8BB8\u7684\u6587\u4EF6\u7C7B\u578B | ${i}`),t.push("--file-filter=\u6240\u6709\u6587\u4EF6 | *")}return new Promise((i,u)=>{(0,f.execFile)("zenity",t,{timeout:E},(e,p,s)=>{if(e){if(e.killed){u(new Error("\u6587\u4EF6\u9009\u62E9\u5BF9\u8BDD\u6846\u8D85\u65F6\uFF0860\u79D2\uFF09"));return}if(e.code===1){i(null);return}u(new Error(`zenity \u6587\u4EF6\u9009\u62E9\u5931\u8D25: ${s||e.message}`));return}const a=p.trim();if(!a){i(null);return}const n=a.split(`
32
- `).map(m=>m.trim()).filter(Boolean);i(n.length>0?n:null)})})}function W(r){const{extensions:l=[],multiple:o=!1,title:c="\u9009\u62E9\u6587\u4EF6",allowDirectory:F=!1}=r;let t;if(F)t=["--getexistingdirectory",process.env.HOME||"/"];else{let i="";l.length>0&&(i=`${l.map(u=>`*${u.startsWith(".")?u:"."+u}`).join(" ")} | \u5141\u8BB8\u7684\u6587\u4EF6\u7C7B\u578B`),o?t=["--getopenfilename",process.env.HOME||"/",i,"--multiple","--separate-output"]:t=["--getopenfilename",process.env.HOME||"/",i]}return t.push("--title",c),new Promise((i,u)=>{(0,f.execFile)("kdialog",t,{timeout:E},(e,p,s)=>{if(e){if(e.killed){u(new Error("\u6587\u4EF6\u9009\u62E9\u5BF9\u8BDD\u6846\u8D85\u65F6\uFF0860\u79D2\uFF09"));return}if(e.code===1){i(null);return}u(new Error(`kdialog \u6587\u4EF6\u9009\u62E9\u5931\u8D25: ${s||e.message}`));return}const a=p.trim();if(!a){i(null);return}const n=a.split(`
33
- `).map(m=>m.trim()).filter(Boolean);i(n.length>0?n:null)})})}
29
+ }`}return new Promise((i,u)=>{(0,f.execFile)("powershell.exe",["-NoProfile","-NonInteractive","-Command",t],{timeout:E},(e,p,s)=>{if(e){if(e.killed){u(new Error("\u6587\u4EF6\u9009\u62E9\u5BF9\u8BDD\u6846\u8D85\u65F6\uFF0860\u79D2\uFF09"));return}u(new Error(`Windows \u6587\u4EF6\u9009\u62E9\u5931\u8D25: ${s||e.message}`));return}const a=p.trim();if(!a){i(null);return}const o=a.split(`
30
+ `).map(m=>m.trim()).filter(Boolean);i(o.length>0?o:null)})})}function w(l){return l.replace(/'/g,"''")}async function O(l){if(await D("zenity"))return P(l);if(await D("kdialog"))return W(l);throw new Error("Linux \u7CFB\u7EDF\u672A\u5B89\u88C5 zenity \u6216 kdialog\uFF0C\u65E0\u6CD5\u5F39\u51FA\u6587\u4EF6\u9009\u62E9\u5BF9\u8BDD\u6846\u3002\u8BF7\u5B89\u88C5\u5176\u4E2D\u4E4B\u4E00\uFF1Asudo apt install zenity \u6216 sudo apt install kdialog")}function D(l){return new Promise(r=>{(0,f.execFile)("which",[l],n=>{r(!n)})})}function P(l){const{extensions:r=[],multiple:n=!1,title:c="\u9009\u62E9\u6587\u4EF6",allowDirectory:F=!1}=l,t=["--file-selection",`--title=${c}`];if(F&&t.push("--directory"),n&&t.push("--multiple",`--separator=
31
+ `),!F&&r.length>0){const i=r.map(u=>`*${u.startsWith(".")?u:"."+u}`).join(" ");t.push(`--file-filter=\u5141\u8BB8\u7684\u6587\u4EF6\u7C7B\u578B | ${i}`),t.push("--file-filter=\u6240\u6709\u6587\u4EF6 | *")}return new Promise((i,u)=>{(0,f.execFile)("zenity",t,{timeout:E},(e,p,s)=>{if(e){if(e.killed){u(new Error("\u6587\u4EF6\u9009\u62E9\u5BF9\u8BDD\u6846\u8D85\u65F6\uFF0860\u79D2\uFF09"));return}if(e.code===1){i(null);return}u(new Error(`zenity \u6587\u4EF6\u9009\u62E9\u5931\u8D25: ${s||e.message}`));return}const a=p.trim();if(!a){i(null);return}const o=a.split(`
32
+ `).map(m=>m.trim()).filter(Boolean);i(o.length>0?o:null)})})}function W(l){const{extensions:r=[],multiple:n=!1,title:c="\u9009\u62E9\u6587\u4EF6",allowDirectory:F=!1}=l;let t;if(F)t=["--getexistingdirectory",process.env.HOME||"/"];else{let i="";r.length>0&&(i=`${r.map(u=>`*${u.startsWith(".")?u:"."+u}`).join(" ")} | \u5141\u8BB8\u7684\u6587\u4EF6\u7C7B\u578B`),n?t=["--getopenfilename",process.env.HOME||"/",i,"--multiple","--separate-output"]:t=["--getopenfilename",process.env.HOME||"/",i]}return t.push("--title",c),new Promise((i,u)=>{(0,f.execFile)("kdialog",t,{timeout:E},(e,p,s)=>{if(e){if(e.killed){u(new Error("\u6587\u4EF6\u9009\u62E9\u5BF9\u8BDD\u6846\u8D85\u65F6\uFF0860\u79D2\uFF09"));return}if(e.code===1){i(null);return}u(new Error(`kdialog \u6587\u4EF6\u9009\u62E9\u5931\u8D25: ${s||e.message}`));return}const a=p.trim();if(!a){i(null);return}const o=a.split(`
33
+ `).map(m=>m.trim()).filter(Boolean);i(o.length>0?o:null)})})}
@@ -1 +1 @@
1
- "use strict";var r=exports&&exports.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.BLOCKED_DIRS=void 0,exports.getMimeType=s,exports.validateFilePath=p,exports.readFileInfo=m,exports.readFileAsBase64=g;const n=r(require("fs")),o=r(require("path")),v=require("./config");exports.BLOCKED_DIRS=process.platform==="win32"?["C:\\Windows","C:\\Program Files","C:\\Program Files (x86)","C:\\ProgramData"]:["/etc","/var","/usr","/bin","/sbin","/boot","/root","/sys","/proc","/dev","/lib","/lib64"];const x=o.default.basename(v.QBOT_CLAW_DIR),E={".pdf":"application/pdf",".doc":"application/msword",".docx":"application/vnd.openxmlformats-officedocument.wordprocessingml.document",".xls":"application/vnd.ms-excel",".xlsx":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",".ppt":"application/vnd.ms-powerpoint",".pptx":"application/vnd.openxmlformats-officedocument.presentationml.presentation",".txt":"text/plain",".csv":"text/csv",".rtf":"application/rtf",".md":"text/markdown",".jpg":"image/jpeg",".jpeg":"image/jpeg",".png":"image/png",".gif":"image/gif",".bmp":"image/bmp",".svg":"image/svg+xml",".webp":"image/webp",".ico":"image/x-icon",".tiff":"image/tiff",".tif":"image/tiff",".mp3":"audio/mpeg",".wav":"audio/wav",".ogg":"audio/ogg",".flac":"audio/flac",".aac":"audio/aac",".mp4":"video/mp4",".avi":"video/x-msvideo",".mov":"video/quicktime",".wmv":"video/x-ms-wmv",".webm":"video/webm",".mkv":"video/x-matroska",".zip":"application/zip",".rar":"application/vnd.rar",".7z":"application/x-7z-compressed",".tar":"application/x-tar",".gz":"application/gzip",".bz2":"application/x-bzip2",".json":"application/json",".xml":"application/xml",".html":"text/html",".htm":"text/html",".css":"text/css",".js":"application/javascript",".ts":"application/typescript",".py":"text/x-python",".java":"text/x-java-source",".c":"text/x-c",".cpp":"text/x-c++src",".h":"text/x-c",".sh":"application/x-sh",".yaml":"text/yaml",".yml":"text/yaml",".toml":"application/toml",".ini":"text/plain",".log":"text/plain",".wasm":"application/wasm",".exe":"application/x-msdownload",".dmg":"application/x-apple-diskimage",".iso":"application/x-iso9660-image"};function s(t){const a=o.default.extname(t).toLowerCase();return E[a]||"application/octet-stream"}function p(t){if(t.includes("\0"))return{valid:!1,reason:"\u8DEF\u5F84\u5305\u542B\u975E\u6CD5\u5B57\u7B26"};const a=o.default.resolve(t),e=l(a);if(!e.valid)return e;const i=c(a);if(!i.valid)return i;if(!n.default.existsSync(a))return{valid:!1,reason:`\u6587\u4EF6\u6216\u76EE\u5F55\u4E0D\u5B58\u5728: ${a}`};let u;try{u=n.default.realpathSync(a)}catch{return{valid:!1,reason:"\u65E0\u6CD5\u89E3\u6790\u6587\u4EF6\u771F\u5B9E\u8DEF\u5F84"}}if(u!==a){if(!l(u).valid)return{valid:!1,reason:"\u7981\u6B62\u8BBF\u95EE\u7CFB\u7EDF\u654F\u611F\u76EE\u5F55"};if(!c(u).valid)return{valid:!1,reason:"\u7981\u6B62\u8BBF\u95EE\u9690\u85CF\u6587\u4EF6\u6216\u76EE\u5F55"}}return{valid:!0}}function l(t){const a=t.toLowerCase();for(const e of exports.BLOCKED_DIRS)if(a===e.toLowerCase()||a.startsWith(e.toLowerCase()+o.default.sep))return{valid:!1,reason:"\u7981\u6B62\u8BBF\u95EE\u7CFB\u7EDF\u654F\u611F\u76EE\u5F55"};return{valid:!0}}function c(t){const a=t.split(o.default.sep);for(const e of a)if(e.startsWith(".")&&e!=="."&&e!==".."&&e!==x)return{valid:!1,reason:"\u7981\u6B62\u8BBF\u95EE\u9690\u85CF\u6587\u4EF6\u6216\u76EE\u5F55"};return{valid:!0}}function m(t,a){const e=p(t);if(!e.valid)return{ok:!1,path:t,reason:e.reason};const i=o.default.resolve(t);let u;try{u=n.default.statSync(i)}catch{return{ok:!1,path:t,reason:"\u65E0\u6CD5\u8BFB\u53D6\u6587\u4EF6\u4FE1\u606F"}}if(u.isDirectory())return{ok:!1,path:t,reason:"\u8DEF\u5F84\u6307\u5411\u4E00\u4E2A\u76EE\u5F55\uFF0C\u4E0D\u662F\u6587\u4EF6"};if(u.size>a){const f=(u.size/1024/1024).toFixed(2),F=(a/1024/1024).toFixed(2);return{ok:!1,path:t,reason:`\u6587\u4EF6\u5927\u5C0F (${f}MB) \u8D85\u8FC7\u9650\u5236 (${F}MB)`}}const d=s(i);return{ok:!0,name:o.default.basename(i),path:i,size:u.size,mimeType:d}}function g(t,a){const e=m(t,a);if(!e.ok)return e;try{const i=n.default.readFileSync(e.path);return{...e,content:i.toString("base64")}}catch(i){return{ok:!1,path:t,reason:`\u6587\u4EF6\u8BFB\u53D6\u5931\u8D25: ${i.message}`}}}
1
+ "use strict";var r=exports&&exports.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.BLOCKED_DIRS=void 0,exports.getMimeType=s,exports.validateFilePath=p,exports.readFileInfo=m,exports.readFileAsBase64=g;const n=r(require("fs")),o=r(require("path")),v=require("./config");exports.BLOCKED_DIRS=process.platform==="win32"?["C:\\Windows","C:\\Program Files","C:\\Program Files (x86)","C:\\ProgramData"]:["/etc","/var","/usr","/bin","/sbin","/boot","/root","/sys","/proc","/dev","/lib","/lib64"];const x=o.default.basename(v.QBOT_CLAW_DIR),E={".pdf":"application/pdf",".doc":"application/msword",".docx":"application/vnd.openxmlformats-officedocument.wordprocessingml.document",".xls":"application/vnd.ms-excel",".xlsx":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",".ppt":"application/vnd.ms-powerpoint",".pptx":"application/vnd.openxmlformats-officedocument.presentationml.presentation",".txt":"text/plain",".csv":"text/csv",".rtf":"application/rtf",".md":"text/markdown",".jpg":"image/jpeg",".jpeg":"image/jpeg",".png":"image/png",".gif":"image/gif",".bmp":"image/bmp",".svg":"image/svg+xml",".webp":"image/webp",".ico":"image/x-icon",".tiff":"image/tiff",".tif":"image/tiff",".mp3":"audio/mpeg",".wav":"audio/wav",".ogg":"audio/ogg",".flac":"audio/flac",".aac":"audio/aac",".mp4":"video/mp4",".avi":"video/x-msvideo",".mov":"video/quicktime",".wmv":"video/x-ms-wmv",".webm":"video/webm",".mkv":"video/x-matroska",".zip":"application/zip",".rar":"application/vnd.rar",".7z":"application/x-7z-compressed",".tar":"application/x-tar",".gz":"application/gzip",".bz2":"application/x-bzip2",".json":"application/json",".xml":"application/xml",".html":"text/html",".htm":"text/html",".css":"text/css",".js":"application/javascript",".ts":"application/typescript",".py":"text/x-python",".java":"text/x-java-source",".c":"text/x-c",".cpp":"text/x-c++src",".h":"text/x-c",".sh":"application/x-sh",".yaml":"text/yaml",".yml":"text/yaml",".toml":"application/toml",".ini":"text/plain",".log":"text/plain",".wasm":"application/wasm",".exe":"application/x-msdownload",".dmg":"application/x-apple-diskimage",".iso":"application/x-iso9660-image"};function s(e){const t=o.default.extname(e).toLowerCase();return E[t]||"application/octet-stream"}function p(e){if(e.includes("\0"))return{valid:!1,reason:"\u8DEF\u5F84\u5305\u542B\u975E\u6CD5\u5B57\u7B26"};const t=o.default.resolve(e),a=l(t);if(!a.valid)return a;const i=c(t);if(!i.valid)return i;if(!n.default.existsSync(t))return{valid:!1,reason:`\u6587\u4EF6\u6216\u76EE\u5F55\u4E0D\u5B58\u5728: ${t}`};let u;try{u=n.default.realpathSync(t)}catch{return{valid:!1,reason:"\u65E0\u6CD5\u89E3\u6790\u6587\u4EF6\u771F\u5B9E\u8DEF\u5F84"}}if(u!==t){if(!l(u).valid)return{valid:!1,reason:"\u7981\u6B62\u8BBF\u95EE\u7CFB\u7EDF\u654F\u611F\u76EE\u5F55"};if(!c(u).valid)return{valid:!1,reason:"\u7981\u6B62\u8BBF\u95EE\u9690\u85CF\u6587\u4EF6\u6216\u76EE\u5F55"}}return{valid:!0}}function l(e){const t=e.toLowerCase();for(const a of exports.BLOCKED_DIRS)if(t===a.toLowerCase()||t.startsWith(a.toLowerCase()+o.default.sep))return{valid:!1,reason:"\u7981\u6B62\u8BBF\u95EE\u7CFB\u7EDF\u654F\u611F\u76EE\u5F55"};return{valid:!0}}function c(e){const t=e.split(o.default.sep);for(const a of t)if(a.startsWith(".")&&a!=="."&&a!==".."&&a!==x)return{valid:!1,reason:"\u7981\u6B62\u8BBF\u95EE\u9690\u85CF\u6587\u4EF6\u6216\u76EE\u5F55"};return{valid:!0}}function m(e,t){const a=p(e);if(!a.valid)return{ok:!1,path:e,reason:a.reason};const i=o.default.resolve(e);let u;try{u=n.default.statSync(i)}catch{return{ok:!1,path:e,reason:"\u65E0\u6CD5\u8BFB\u53D6\u6587\u4EF6\u4FE1\u606F"}}if(u.isDirectory())return{ok:!1,path:e,reason:"\u8DEF\u5F84\u6307\u5411\u4E00\u4E2A\u76EE\u5F55\uFF0C\u4E0D\u662F\u6587\u4EF6"};if(u.size>t){const f=(u.size/1024/1024).toFixed(2),F=(t/1024/1024).toFixed(2);return{ok:!1,path:e,reason:`\u6587\u4EF6\u5927\u5C0F (${f}MB) \u8D85\u8FC7\u9650\u5236 (${F}MB)`}}const d=s(i);return{ok:!0,name:o.default.basename(i),path:i,size:u.size,mimeType:d}}function g(e,t){const a=m(e,t);if(!a.ok)return a;try{const i=n.default.readFileSync(a.path);return{...a,content:i.toString("base64")}}catch(i){return{ok:!1,path:e,reason:`\u6587\u4EF6\u8BFB\u53D6\u5931\u8D25: ${i.message}`}}}
package/dist/installer.js CHANGED
@@ -1,6 +1,6 @@
1
- "use strict";var d=exports&&exports.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.PYTHON_DIR=exports.isInstalling=exports.installState=void 0,exports.runQBotClaw=C,exports.configAndRunQBotClaw=N,exports.runInstall=B;const c=d(require("fs")),u=d(require("path")),_=require("child_process"),r=require("./config"),w=require("./utils"),p=require("./state"),f=require("./quarantine"),a=require("./reportLog"),P=require("./service");function g(t,o,s,i){if(t&&t.writable){const e=o>0?Math.round(s/o*1e4)/100:0;try{t.write(JSON.stringify({status:"downloading",progress:e,totalSteps:o,currentStep:s,message:i})+`
1
+ "use strict";var P=exports&&exports.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.PYTHON_DIR=exports.isInstalling=exports.installState=void 0,exports.runQBotClaw=C,exports.configAndRunQBotClaw=N,exports.runInstall=T;const c=P(require("fs")),u=P(require("path")),_=require("child_process"),r=require("./config"),w=require("./utils"),p=require("./state"),f=require("./quarantine"),a=require("./reportLog"),d=require("./service");function g(t,o,s,i){if(t&&t.writable){const e=o>0?Math.round(s/o*1e4)/100:0;try{t.write(JSON.stringify({status:"downloading",progress:e,totalSteps:o,currentStep:s,message:i})+`
2
2
  `)}catch{}}}exports.installState={status:"idle",message:"\u672A\u5F00\u59CB"},exports.isInstalling=!1,exports.PYTHON_DIR=u.default.join(r.QBOT_CLAW_DIR,"python");function C(t,o){return new Promise(s=>{const i=(0,_.spawn)(r.QBOTCLAW_BIN,t,{stdio:["ignore","pipe","pipe"],env:{PATH:r.NODE_BIN_DIR,HOME:process.env.HOME,OPENCLAW_TELEMETRY_GALIELO_GUID:process.env.QB_GUID||"",OPENCLAW_TELEMETRY_GALIELO_QIEMI36:process.env.QB_QIMEI36||""}});(0,a.log)(`[QBotClaw] \u6267\u884C: QBotClaw ${t.join(" ")}`),i.stdout.on("data",e=>{const n=e.toString();if(o&&o.writable)try{o.write(n)}catch{}}),i.stderr.on("data",e=>{const n=e.toString();if(o&&o.writable)try{o.write(n)}catch{}}),i.on("close",e=>{(0,a.log)(`[QBotClaw] \u6267\u884C\u5B8C\u6210\uFF0C\u9000\u51FA\u7801: ${e}`),s()}),i.on("error",e=>{(0,a.log)(`[QBotClaw] \u542F\u52A8\u5931\u8D25: ${e.message}`),s()})})}function I(){c.default.existsSync(r.QBOT_CLAW_DIR)||c.default.mkdirSync(r.QBOT_CLAW_DIR,{recursive:!0})}function m(){const t=u.default.join(exports.PYTHON_DIR,"pip.conf");if(c.default.existsSync(t)){(0,a.log)("pip.conf \u5DF2\u5B58\u5728\uFF0C\u8DF3\u8FC7");return}const o=["[global]","index-url = https://mirrors.tencent.com/pypi/simple/",`cache-dir = ${u.default.join(exports.PYTHON_DIR,".pip-cache")}`,"","[install]",`prefix = ${exports.PYTHON_DIR}`,""].join(`
3
- `);c.default.writeFileSync(t,o,"utf-8"),(0,a.log)(`\u5DF2\u5199\u5165 pip.conf: ${t}`)}async function O(t){if(c.default.existsSync(r.MCPORTER_BIN)){(0,a.log)("mcporter \u5DF2\u5B89\u88C5\uFF0C\u8DF3\u8FC7");return}(0,a.log)("\u5F00\u59CB\u5B89\u88C5 mcporter..."),await new Promise((o,s)=>{const i=(0,_.spawn)(r.NPM_BIN,["--userconfig",r.NPM_RC,"install","-g","mcporter"],{stdio:["ignore","pipe","pipe"],env:{...process.env,PATH:`${u.default.dirname(r.NPM_BIN)}:${process.env.PATH}`}});i.stdout.on("data",e=>{const n=`[mcporter] ${e.toString().trim()}`;(0,a.log)(n),g(t,0,0,n)}),i.stderr.on("data",e=>{const n=`[mcporter] ${e.toString().trim()}`;(0,a.log)(n),g(t,0,0,n)}),i.on("close",e=>{e===0?((0,a.log)("mcporter \u5B89\u88C5\u6210\u529F"),o()):s(new Error(`mcporter \u5B89\u88C5\u5931\u8D25\uFF0C\u9000\u51FA\u7801: ${e}`))}),i.on("error",s)})}function A(t,o){return new Promise((s,i)=>{const e=(0,_.spawn)(r.NPM_BIN,["--userconfig",r.NPM_RC,...t],{stdio:["ignore","pipe","pipe"],env:{...process.env,PATH:`${u.default.dirname(r.NPM_BIN)}:${process.env.PATH}`}});e.stdout.on("data",n=>{const l=`[npm] ${n.toString().trim()}`;(0,a.log)(l)}),e.stderr.on("data",n=>{const l=`[npm] ${n.toString().trim()}`;(0,a.log)(l)}),e.on("close",n=>{n===0?((0,a.log)(`${o} \u6210\u529F`),s()):i(new Error(`${o} \u5931\u8D25\uFF0C\u9000\u51FA\u7801: ${n}`))}),e.on("error",i)})}async function E(t){const o=`${r.NPM_PACKAGE_NAME}@${t}`;(0,a.log)(`\u5F00\u59CB\u5B89\u88C5 ${o}\uFF08--ignore-scripts\uFF0C\u4EC5\u4E0B\u8F7D\u89E3\u538B\uFF09...`),await A(["install","-g","--ignore-scripts",o],`${o} \u4E0B\u8F7D\u89E3\u538B`)}async function y(t){const o=`${r.NPM_PACKAGE_NAME}@${t}`;(0,a.log)("\u5F00\u59CB npm rebuild\uFF08\u6267\u884C postinstall \u811A\u672C\uFF09..."),await A(["rebuild","-g",r.NPM_PACKAGE_NAME],`${o} rebuild`),(0,a.log)(`${o} \u5B89\u88C5\u6210\u529F`)}async function $(t,o,s,i){let e;if((0,a.log)(`\u8986\u76D6\u7528\u6237\u5DF2\u6709\u914D\u7F6E: ${i}`),!i&&c.default.existsSync(r.QBOT_CLAW_CONFIG_PATH))e=r.QBOT_CLAW_CONFIG_PATH,(0,a.log)(`\u4F7F\u7528\u5DF2\u6709\u914D\u7F6E\u6587\u4EF6: ${e}`);else{const l=u.default.join(r.NPM_GLOBAL_MODULES,r.NPM_PACKAGE_NAME,"preset-config.json");if(!c.default.existsSync(l)){(0,a.log)(`npm \u5168\u5C40\u5B89\u88C5\u76EE\u5F55\u4E2D\u7684\u914D\u7F6E\u6587\u4EF6\u4E0D\u5B58\u5728\uFF0C\u8DF3\u8FC7\u914D\u7F6E\u5199\u5165: ${l}`);return}e=l,(0,a.log)(`\u4F7F\u7528 npm \u5168\u5C40\u5B89\u88C5\u76EE\u5F55\u4E2D\u7684\u914D\u7F6E: ${e}`)}let n;try{n=JSON.parse(c.default.readFileSync(e,"utf-8")),(0,a.log)(`\u5DF2\u8BFB\u53D6\u914D\u7F6E: ${e}`)}catch(l){(0,a.log)(`\u8BFB\u53D6\u914D\u7F6E\u5931\u8D25: ${e}\uFF0C${l.message}\uFF0C\u8DF3\u8FC7\u914D\u7F6E\u5199\u5165`);return}t!==void 0&&(n.gateway={...n.gateway??{},port:t},(0,a.log)(`\u5DF2\u5C06 gateway.port=${t} \u5199\u5165\u914D\u7F6E`)),n.plugins=n.plugins??{},n.plugins.entries=n.plugins.entries??{},n.plugins.entries["x5use-browser-control"]=n.plugins.entries["x5use-browser-control"]??{},n.plugins.entries["x5use-browser-control"].config={...n.plugins.entries["x5use-browser-control"].config??{},wsPort:s,httpPort:o},(0,a.log)(`\u5DF2\u5C06 x5use-browser-control wsPort=${s}, httpPort=${o} \u5199\u5165\u914D\u7F6E`),c.default.writeFileSync(r.QBOT_CLAW_CONFIG_PATH,JSON.stringify(n,null,2),"utf-8"),(0,a.log)(`\u914D\u7F6E\u6587\u4EF6\u5DF2\u5199\u5165: ${r.QBOT_CLAW_CONFIG_PATH}`)}async function N(t){const o=(0,p.readState)();let s;o.gatewayPort&&!await(0,p.isPortAvailable)(o.gatewayPort)?(s=o.gatewayPort,(0,a.log)(`\u68C0\u6D4B\u5230 QBotClaw gateway \u5DF2\u5728\u7AEF\u53E3 ${s} \u8FD0\u884C\uFF0C\u590D\u7528\u539F\u7AEF\u53E3`)):s=await(0,w.findAvailablePort)(),(0,a.log)(`\u540E\u53F0\u542F\u52A8 QBotClaw gateway run --port ${s} --force`);const i=await(0,w.findAvailablePort)(r.DEFAULT_MCP_HTTP_PORT),e=await(0,w.findAvailablePort)();await $(s,i,e,t);const n=(0,_.spawn)(r.QBOTCLAW_BIN,["gateway","run","--port",String(s),"--force"],{stdio:"ignore",env:{PATH:r.NODE_BIN_DIR,HOME:process.env.HOME,OPENCLAW_NO_RESPAWN:"true",VENUS_API_KEY:"E9isWWfAr4VIFuIa5RbJaPxD@2040",OPENCLAW_TELEMETRY_GALIELO_GUID:process.env.QB_GUID||"",OPENCLAW_TELEMETRY_GALIELO_QIEMI36:process.env.QB_QIMEI36||"",OPENCLAW_GATEWAY_TOKEN:(0,P.getOrCreateGatewayToken)()}});n.unref();const l=n.pid;(0,a.log)(`QBotClaw gateway \u5DF2\u5728\u540E\u53F0\u542F\u52A8\uFF0CPID: ${l}\uFF0C\u7AEF\u53E3: ${s}, token ${(0,P.getOrCreateGatewayToken)()}`),(0,p.writeState)({...(0,p.readState)(),gatewayPid:l,gatewayPort:s,mcpHttpPort:i,mcpWsPort:e})}function B(t,o,s){if(exports.isInstalling){if((0,a.log)("[runInstall] \u5B89\u88C5\u6B63\u5728\u8FDB\u884C\u4E2D\uFF0C\u62D2\u7EDD\u91CD\u590D\u6267\u884C"),t&&t.writable)try{t.end(JSON.stringify({status:"failed",progress:0,message:"\u5B89\u88C5\u6B63\u5728\u8FDB\u884C\u4E2D\uFF0C\u8BF7\u52FF\u91CD\u590D\u64CD\u4F5C"})+`
4
- `)}catch{}return}exports.isInstalling=!0,exports.installState={status:"downloading",message:"\u6B63\u5728\u5B89\u88C5...",startTime:new Date().toISOString()},(0,a.log)(`\u5F00\u59CB\u5B89\u88C5 ${r.NPM_PACKAGE_NAME}@${o}`),(async()=>{try{(0,p.stopGateway)(),I(),m();const i=5;let e=0;g(t,i,e,"\u5F00\u59CB\u5B89\u88C5 mcporter..."),await O(t),e++,g(t,i,e,"\u5F00\u59CB\u4E0B\u8F7D\u89E3\u538B QBotClaw..."),await E(o),e++,g(t,i,e,"npmDownloadQBotClaw \u5B8C\u6210"),await(0,f.fullScanClearQuarantine)("npm install --ignore-scripts \u5B8C\u6210\u540E\uFF0Crebuild \u524D"),e++,await(0,f.watchWorkspaceQuarantine)().catch(n=>{(0,a.log)(`[quarantine] watchWorkspaceQuarantine \u542F\u52A8\u5F02\u5E38: ${n.message}`)}),g(t,i,e,"\u5F00\u59CB npm rebuild..."),await y(o),e++,g(t,i,e,"npmRebuildQBotClaw \u5B8C\u6210");try{c.default.existsSync(r.OPENCLAW_BIN)||(c.default.symlinkSync(r.QBOTCLAW_BIN,r.OPENCLAW_BIN),(0,a.log)(`\u5DF2\u521B\u5EFA\u8F6F\u94FE\u63A5: ${r.OPENCLAW_BIN} -> ${r.QBOTCLAW_BIN}`))}catch(n){(0,a.log)(`\u521B\u5EFA openclaw \u8F6F\u94FE\u63A5\u5931\u8D25: ${n.message}`)}if(await(0,f.stopWatchWorkspaceQuarantine)().catch(n=>{(0,a.log)(`[quarantine] stopWatchWorkspaceQuarantine \u5F02\u5E38: ${n.message}`)}),exports.installState={status:"success",message:"\u5B89\u88C5\u6210\u529F",endTime:new Date().toISOString()},(0,a.log)("\u5B89\u88C5\u6210\u529F"),(0,a.refreshClawVersion)(o),g(t,i,e,"\u5F00\u59CB\u914D\u7F6E\u5E76\u542F\u52A8 QBotClaw gateway..."),await N(s),e++,t.writable)try{t.end(JSON.stringify({status:"done",progress:100,message:"\u5B89\u88C5\u6210\u529F"})+`
3
+ `);c.default.writeFileSync(t,o,"utf-8"),(0,a.log)(`\u5DF2\u5199\u5165 pip.conf: ${t}`)}async function O(t){if(c.default.existsSync(r.MCPORTER_BIN)){(0,a.log)("mcporter \u5DF2\u5B89\u88C5\uFF0C\u8DF3\u8FC7");return}(0,a.log)("\u5F00\u59CB\u5B89\u88C5 mcporter..."),await new Promise((o,s)=>{const i=(0,_.spawn)(r.NPM_BIN,["--userconfig",r.NPM_RC,"install","-g","mcporter"],{stdio:["ignore","pipe","pipe"],env:{...process.env,PATH:`${u.default.dirname(r.NPM_BIN)}:${process.env.PATH}`}});i.stdout.on("data",e=>{const n=`[mcporter] ${e.toString().trim()}`;(0,a.log)(n),g(t,0,0,n)}),i.stderr.on("data",e=>{const n=`[mcporter] ${e.toString().trim()}`;(0,a.log)(n),g(t,0,0,n)}),i.on("close",e=>{e===0?((0,a.log)("mcporter \u5B89\u88C5\u6210\u529F"),o()):s(new Error(`mcporter \u5B89\u88C5\u5931\u8D25\uFF0C\u9000\u51FA\u7801: ${e}`))}),i.on("error",s)})}function A(t,o){return new Promise((s,i)=>{const e=(0,_.spawn)(r.NPM_BIN,["--userconfig",r.NPM_RC,...t],{stdio:["ignore","pipe","pipe"],env:{...process.env,PATH:`${u.default.dirname(r.NPM_BIN)}:${process.env.PATH}`}});e.stdout.on("data",n=>{const l=`[npm] ${n.toString().trim()}`;(0,a.log)(l)}),e.stderr.on("data",n=>{const l=`[npm] ${n.toString().trim()}`;(0,a.log)(l)}),e.on("close",n=>{n===0?((0,a.log)(`${o} \u6210\u529F`),s()):i(new Error(`${o} \u5931\u8D25\uFF0C\u9000\u51FA\u7801: ${n}`))}),e.on("error",i)})}async function E(t){const o=`${r.NPM_PACKAGE_NAME}@${t}`;(0,a.log)(`\u5F00\u59CB\u5B89\u88C5 ${o}\uFF08--ignore-scripts\uFF0C\u4EC5\u4E0B\u8F7D\u89E3\u538B\uFF09...`),await A(["install","-g","--ignore-scripts",o],`${o} \u4E0B\u8F7D\u89E3\u538B`)}async function y(t){const o=`${r.NPM_PACKAGE_NAME}@${t}`;(0,a.log)("\u5F00\u59CB npm rebuild\uFF08\u6267\u884C postinstall \u811A\u672C\uFF09..."),await A(["rebuild","-g",r.NPM_PACKAGE_NAME],`${o} rebuild`),(0,a.log)(`${o} \u5B89\u88C5\u6210\u529F`)}async function $(t,o,s,i){let e;if((0,a.log)(`\u8986\u76D6\u7528\u6237\u5DF2\u6709\u914D\u7F6E: ${i}`),!i&&c.default.existsSync(r.QBOT_CLAW_CONFIG_PATH))e=r.QBOT_CLAW_CONFIG_PATH,(0,a.log)(`\u4F7F\u7528\u5DF2\u6709\u914D\u7F6E\u6587\u4EF6: ${e}`);else{const l=u.default.join(r.NPM_GLOBAL_MODULES,r.NPM_PACKAGE_NAME,"preset-config.json");if(!c.default.existsSync(l)){(0,a.log)(`npm \u5168\u5C40\u5B89\u88C5\u76EE\u5F55\u4E2D\u7684\u914D\u7F6E\u6587\u4EF6\u4E0D\u5B58\u5728\uFF0C\u8DF3\u8FC7\u914D\u7F6E\u5199\u5165: ${l}`);return}e=l,(0,a.log)(`\u4F7F\u7528 npm \u5168\u5C40\u5B89\u88C5\u76EE\u5F55\u4E2D\u7684\u914D\u7F6E: ${e}`)}let n;try{n=JSON.parse(c.default.readFileSync(e,"utf-8")),(0,a.log)(`\u5DF2\u8BFB\u53D6\u914D\u7F6E: ${e}`)}catch(l){(0,a.log)(`\u8BFB\u53D6\u914D\u7F6E\u5931\u8D25: ${e}\uFF0C${l.message}\uFF0C\u8DF3\u8FC7\u914D\u7F6E\u5199\u5165`);return}t!==void 0&&(n.gateway={...n.gateway??{},port:t},(0,a.log)(`\u5DF2\u5C06 gateway.port=${t} \u5199\u5165\u914D\u7F6E`)),n.plugins=n.plugins??{},n.plugins.entries=n.plugins.entries??{},n.plugins.entries["x5use-browser-control"]=n.plugins.entries["x5use-browser-control"]??{},n.plugins.entries["x5use-browser-control"].config={...n.plugins.entries["x5use-browser-control"].config??{},wsPort:s,httpPort:o},(0,a.log)(`\u5DF2\u5C06 x5use-browser-control wsPort=${s}, httpPort=${o} \u5199\u5165\u914D\u7F6E`),c.default.writeFileSync(r.QBOT_CLAW_CONFIG_PATH,JSON.stringify(n,null,2),"utf-8"),(0,a.log)(`\u914D\u7F6E\u6587\u4EF6\u5DF2\u5199\u5165: ${r.QBOT_CLAW_CONFIG_PATH}`)}async function N(t){const o=(0,p.readState)();let s;o.gatewayPort&&!await(0,p.isPortAvailable)(o.gatewayPort)?(s=o.gatewayPort,(0,a.log)(`\u68C0\u6D4B\u5230 QBotClaw gateway \u5DF2\u5728\u7AEF\u53E3 ${s} \u8FD0\u884C\uFF0C\u590D\u7528\u539F\u7AEF\u53E3`)):s=await(0,w.findAvailablePort)(),(0,a.log)(`\u540E\u53F0\u542F\u52A8 QBotClaw gateway run --port ${s} --force`);const i=await(0,w.findAvailablePort)(r.DEFAULT_MCP_HTTP_PORT),e=await(0,w.findAvailablePort)();await $(s,i,e,t);const n=(0,_.spawn)(r.QBOTCLAW_BIN,["gateway","run","--port",String(s),"--force"],{stdio:"ignore",env:{PATH:r.NODE_BIN_DIR,HOME:process.env.HOME,OPENCLAW_NO_RESPAWN:"true",VENUS_API_KEY:"E9isWWfAr4VIFuIa5RbJaPxD@2040",OPENCLAW_TELEMETRY_GALIELO_GUID:process.env.QB_GUID||"",OPENCLAW_TELEMETRY_GALIELO_QIEMI36:process.env.QB_QIMEI36||"",OPENCLAW_GATEWAY_TOKEN:(0,d.getOrCreateGatewayToken)()}});n.unref();const l=n.pid;(0,a.log)(`QBotClaw gateway \u5DF2\u5728\u540E\u53F0\u542F\u52A8\uFF0CPID: ${l}\uFF0C\u7AEF\u53E3: ${s}, token ${(0,d.getOrCreateGatewayToken)()}`),(0,p.writeState)({...(0,p.readState)(),gatewayPid:l,gatewayPort:s,mcpHttpPort:i,mcpWsPort:e})}function T(t,o,s){if(exports.isInstalling){if((0,a.log)("[runInstall] \u5B89\u88C5\u6B63\u5728\u8FDB\u884C\u4E2D\uFF0C\u62D2\u7EDD\u91CD\u590D\u6267\u884C"),t&&t.writable)try{t.end(JSON.stringify({status:"failed",progress:0,message:"\u5B89\u88C5\u6B63\u5728\u8FDB\u884C\u4E2D\uFF0C\u8BF7\u52FF\u91CD\u590D\u64CD\u4F5C"})+`
4
+ `)}catch{}return}exports.isInstalling=!0,exports.installState={status:"downloading",message:"\u6B63\u5728\u5B89\u88C5...",startTime:new Date().toISOString()},(0,a.log)(`\u5F00\u59CB\u5B89\u88C5 ${r.NPM_PACKAGE_NAME}@${o}`),(async()=>{try{(0,p.stopGateway)(),I(),m();const i=5;let e=0;g(t,i,e,"\u5F00\u59CB\u5B89\u88C5 mcporter..."),await O(t),e++,g(t,i,e,"\u5F00\u59CB\u4E0B\u8F7D\u89E3\u538B QBotClaw..."),await E(o),e++,g(t,i,e,"npmDownloadQBotClaw \u5B8C\u6210"),await(0,f.fullScanClearQuarantine)("npm install --ignore-scripts \u5B8C\u6210\u540E\uFF0Crebuild \u524D"),e++,await(0,f.watchWorkspaceQuarantine)().catch(n=>{(0,a.log)(`[quarantine] watchWorkspaceQuarantine \u542F\u52A8\u5F02\u5E38: ${n.message}`)}),g(t,i,e,"\u5F00\u59CB npm rebuild..."),await y(o),e++,g(t,i,e,"npmRebuildQBotClaw \u5B8C\u6210");try{c.default.existsSync(r.OPENCLAW_BIN)||(c.default.symlinkSync(r.QBOTCLAW_BIN,r.OPENCLAW_BIN),(0,a.log)(`\u5DF2\u521B\u5EFA\u8F6F\u94FE\u63A5: ${r.OPENCLAW_BIN} -> ${r.QBOTCLAW_BIN}`))}catch(n){(0,a.log)(`\u521B\u5EFA openclaw \u8F6F\u94FE\u63A5\u5931\u8D25: ${n.message}`)}if(await(0,f.stopWatchWorkspaceQuarantine)().catch(n=>{(0,a.log)(`[quarantine] stopWatchWorkspaceQuarantine \u5F02\u5E38: ${n.message}`)}),exports.installState={status:"success",message:"\u5B89\u88C5\u6210\u529F",endTime:new Date().toISOString()},(0,a.log)("\u5B89\u88C5\u6210\u529F"),(0,a.refreshClawVersion)(o),g(t,i,e,"\u5F00\u59CB\u914D\u7F6E\u5E76\u542F\u52A8 QBotClaw gateway..."),await N(s),e++,t.writable)try{const n=(0,d.getOrCreateGatewayToken)();t.end(JSON.stringify({status:"done",progress:100,message:"\u5B89\u88C5\u6210\u529F",gatewayToken:n})+`
5
5
  `)}catch{}}catch(i){if(await(0,f.stopWatchWorkspaceQuarantine)().catch(()=>{}),exports.installState={status:"failed",message:i.message,endTime:new Date().toISOString()},(0,a.log)(`\u5B89\u88C5\u5931\u8D25: ${i.message}`),t&&t.writable)try{t.end(JSON.stringify({status:"failed",progress:0,message:i.message})+`
6
6
  `)}catch{}}finally{exports.isInstalling=!1}})()}
package/dist/server.js CHANGED
@@ -1,6 +1,6 @@
1
- "use strict";var I=exports&&exports.__importDefault||function(p){return p&&p.__esModule?p:{default:p}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.server=void 0,exports.watchParentProcess=W;const R=I(require("http")),h=I(require("fs")),y=I(require("path")),l=require("./config"),n=require("./utils"),a=require("./reportLog"),_=require("./installer"),J=require("./version"),P=require("./state"),A=require("child_process"),N={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, PUT, DELETE, OPTIONS","Access-Control-Allow-Headers":"Content-Type, Authorization, X-Requested-With","Access-Control-Max-Age":"86400"};function b(p){for(const[t,d]of Object.entries(N))p.setHeader(t,d)}exports.server=R.default.createServer(async(p,t)=>{const d=p.url||"";if(b(t),p.method==="OPTIONS"){t.writeHead(204,N),t.end();return}if(d==="/api/version"){let r="unknown";try{r=(await(0,n.execCommand)(`"${l.NODE_BIN}" -v`)).trim(),(0,a.log)(`[version] node \u7248\u672C: ${r}`)}catch(i){(0,a.log)(`[version] \u83B7\u53D6 node \u7248\u672C\u5931\u8D25: ${i.message}`),r=`error: ${i.message}`}const o=await(0,n.getQBotClawVersion)()??"0.0.0";(0,a.log)(`[version] qbotclaw \u7248\u672C: ${o}`);let e="0.0.0";if(h.default.existsSync(l.MCPORTER_BIN))try{e=(await(0,n.execCommand)(`"${l.NODE_BIN}" "${l.MCPORTER_BIN}" --version`)).trim(),(0,a.log)(`[version] mcporter \u7248\u672C: ${e}`)}catch(i){(0,a.log)(`[version] \u83B7\u53D6 mcporter \u7248\u672C\u5931\u8D25: ${i.message}`),e=`error: ${i.message}`}let s="0.0.0";if(h.default.existsSync(l.PYTHON_BIN))try{s=(await(0,n.execCommand)(`"${l.PYTHON_BIN}" --version`)).trim(),(0,a.log)(`[version] python \u7248\u672C: ${s}`)}catch(i){(0,a.log)(`[version] \u83B7\u53D6 python \u7248\u672C\u5931\u8D25: ${i.message}`),s=`error: ${i.message}`}(0,n.sendJSON)(t,200,{status:"\u6210\u529F",launcher:J.LAUNCHER_VERSION,node:r,qbotclaw:o,mcporter:e,python:s});return}if(d==="/api/port"){const r=exports.server.address(),o=r&&typeof r=="object"?r.port:null,e=(0,P.readState)();(0,n.sendJSON)(t,200,{status:"\u6210\u529F",launcher:o,qbotclaw:e.gatewayPort??2e3,mcpHttp:e.mcpHttpPort??l.DEFAULT_MCP_HTTP_PORT,mcpWs:e.mcpWsPort??8765});return}if(d==="/api/status"){const r=(0,P.readState)(),o=[];if(r.gatewayPid)try{process.kill(r.gatewayPid,0)}catch{o.push(`gateway \u8FDB\u7A0B (pid: ${r.gatewayPid}) \u5DF2\u9000\u51FA`)}else o.push("gateway \u8FDB\u7A0B\u672A\u542F\u52A8\uFF08\u72B6\u6001\u4E2D\u65E0 gatewayPid\uFF09");const e=[{name:"gateway",port:r.gatewayPort},{name:"mcpHttp",port:r.mcpHttpPort},{name:"mcpWs",port:r.mcpWsPort}];for(const{name:s,port:i}of e){if(!i){o.push(`${s} \u7AEF\u53E3\u672A\u914D\u7F6E\uFF08\u72B6\u6001\u4E2D\u65E0\u5BF9\u5E94\u7AEF\u53E3\u53F7\uFF09`);continue}await(0,P.isPortAvailable)(i)&&o.push(`${s} \u7AEF\u53E3 (${i}) \u65E0\u670D\u52A1\u76D1\u542C`)}o.length===0?(0,n.sendJSON)(t,200,{ok:!0,message:"\u6240\u6709\u670D\u52A1\u8FD0\u884C\u6B63\u5E38"}):(0,n.sendJSON)(t,200,{ok:!1,message:o.join("\uFF1B")});return}if(d==="/api/restart"){try{const r=(0,P.readState)();if(r.gatewayPid)try{process.kill(r.gatewayPid,"SIGTERM"),(0,a.log)(`[restart] \u5DF2\u53D1\u9001 SIGTERM \u7ED9\u65E7 gateway \u8FDB\u7A0B pid: ${r.gatewayPid}`)}catch{(0,a.log)(`[restart] \u65E7 gateway \u8FDB\u7A0B ${r.gatewayPid} \u53EF\u80FD\u5DF2\u9000\u51FA\uFF0C\u5FFD\u7565`)}const{gatewayPid:o,gatewayPort:e,mcpHttpPort:s,mcpWsPort:i,...f}=r;(0,P.writeState)(f),(0,a.log)("[restart] \u5DF2\u6E05\u9664 gatewayPid, gatewayPort, mcpHttpPort, mcpWsPort"),await(0,_.configAndRunQBotClaw)(),(0,a.log)("[restart] QBotClaw gateway \u91CD\u542F\u5B8C\u6210");const g=(0,P.readState)(),c=exports.server.address(),u=c&&typeof c=="object"?c.port:null;(0,n.sendJSON)(t,200,{ok:!0,message:"QBotClaw gateway \u91CD\u542F\u6210\u529F",launcher:u,qbotclaw:g.gatewayPort??2e3,mcpHttp:g.mcpHttpPort??l.DEFAULT_MCP_HTTP_PORT,mcpWs:g.mcpWsPort??8765})}catch(r){(0,a.log)(`[restart] \u91CD\u542F\u5931\u8D25: ${r.message}`),(0,n.sendJSON)(t,500,{ok:!1,message:`\u91CD\u542F\u5931\u8D25: ${r.message}`})}return}if(d==="/api/wechat/history"){try{if(!h.default.existsSync(l.SESSIONS_FILE)){(0,n.sendJSON)(t,404,{ok:!1,sessionKey:"",message:"\u672A\u627E\u5230\u4F1A\u8BDD\u6587\u4EF6"});return}const r=JSON.parse(h.default.readFileSync(l.SESSIONS_FILE,"utf-8"));let o=null,e=0;for(const[f,g]of Object.entries(r))if(f.includes("openclaw-weixin")){const u=g.updatedAt??0;u>e&&(e=u,o=f)}if(!o){(0,n.sendJSON)(t,404,{ok:!1,sessionKey:"",message:"\u672A\u627E\u5230\u5FAE\u4FE1\u4F1A\u8BDD"});return}const i=o.split(":").slice(4).join(":");(0,n.sendJSON)(t,200,{ok:!0,sessionKey:i,message:"\u83B7\u53D6\u6210\u529F"})}catch(r){(0,a.log)(`[wechat/history] \u8BFB\u53D6\u5FAE\u4FE1\u4F1A\u8BDD\u5931\u8D25: ${r.message}`),(0,n.sendJSON)(t,500,{ok:!1,sessionKey:"",message:`\u8BFB\u53D6\u5FAE\u4FE1\u4F1A\u8BDD\u5931\u8D25: ${r.message}`})}return}if(d==="/api/installing"){(0,n.sendJSON)(t,200,{installing:_.isInstalling});return}if(d==="/api/install"||d.startsWith("/api/install?")){if(_.installState.status==="downloading"){(0,n.sendJSON)(t,200,{ok:"downloading",message:"\u6B63\u5728\u5B89\u88C5\u4E2D..."});return}const r=new URL(d,"http://localhost"),o=r.searchParams.get("version")||void 0,e=r.searchParams.get("overrideConfig")==="true";if(!o){(0,n.sendJSON)(t,400,{status:"\u5931\u8D25",message:"\u7F3A\u5C11\u5FC5\u8981\u53C2\u6570 version\uFF0C\u7528\u6CD5: GET /api/install?version=x.x.x"});return}t.writeHead(200,{...N,"Content-Type":"text/plain; charset=utf-8","Transfer-Encoding":"chunked","Cache-Control":"no-cache"}),(0,_.runInstall)(t,o,e);return}if(d.startsWith("/api/watch")){const o=new URL(d,"http://localhost").searchParams.get("ppid");if(!o||isNaN(Number(o))){(0,n.sendJSON)(t,400,{status:"\u5931\u8D25",message:"\u7F3A\u5C11\u6709\u6548\u7684 ppid \u53C2\u6570\uFF0C\u7528\u6CD5: GET /api/watch?ppid=12345"});return}const e=parseInt(o,10);try{process.kill(e,0)}catch{(0,n.sendJSON)(t,400,{status:"\u5931\u8D25",message:`\u8FDB\u7A0B ${e} \u4E0D\u5B58\u5728`});return}const s=(0,P.readState)();(0,P.writeState)({...s,ppid:e}),W(e),(0,n.sendJSON)(t,200,{status:"\u6210\u529F",message:`\u5DF2\u5F00\u59CB\u76D1\u63A7\u7236\u8FDB\u7A0B ppid: ${e}`});return}if(d==="/api/qbotclaw"&&p.method==="POST"){let r="";p.on("data",o=>{r+=o.toString()}),p.on("end",()=>{let o;try{const e=JSON.parse(r);if(!Array.isArray(e.args)||e.args.length===0){(0,n.sendJSON)(t,400,{status:"\u5931\u8D25",message:"\u53C2\u6570 args \u5FC5\u987B\u662F\u975E\u7A7A\u6570\u7EC4"});return}o=e.args.map(s=>String(s))}catch{(0,n.sendJSON)(t,400,{status:"\u5931\u8D25",message:"\u8BF7\u6C42\u4F53\u5FC5\u987B\u662F\u5408\u6CD5\u7684 JSON"});return}if(!h.default.existsSync(l.QBOTCLAW_BIN)){(0,n.sendJSON)(t,404,{status:"\u5931\u8D25",message:`qbotclaw \u53EF\u6267\u884C\u6587\u4EF6\u4E0D\u5B58\u5728: ${l.QBOTCLAW_BIN}`});return}t.writeHead(200,{...N,"Content-Type":"text/plain; charset=utf-8","Transfer-Encoding":"chunked","Cache-Control":"no-cache"}),(0,_.runQBotClaw)(o,t).then(()=>{t.end(`
1
+ "use strict";var I=exports&&exports.__importDefault||function(p){return p&&p.__esModule?p:{default:p}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.server=void 0,exports.watchParentProcess=W;const R=I(require("http")),w=I(require("fs")),y=I(require("path")),l=require("./config"),n=require("./utils"),a=require("./reportLog"),_=require("./installer"),J=require("./version"),P=require("./state"),A=require("child_process"),k=require("./service"),N={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, PUT, DELETE, OPTIONS","Access-Control-Allow-Headers":"Content-Type, Authorization, X-Requested-With","Access-Control-Max-Age":"86400"};function b(p){for(const[t,d]of Object.entries(N))p.setHeader(t,d)}exports.server=R.default.createServer(async(p,t)=>{const d=p.url||"";if(b(t),p.method==="OPTIONS"){t.writeHead(204,N),t.end();return}if(d==="/api/version"){let r="unknown";try{r=(await(0,n.execCommand)(`"${l.NODE_BIN}" -v`)).trim(),(0,a.log)(`[version] node \u7248\u672C: ${r}`)}catch(i){(0,a.log)(`[version] \u83B7\u53D6 node \u7248\u672C\u5931\u8D25: ${i.message}`),r=`error: ${i.message}`}const o=await(0,n.getQBotClawVersion)()??"0.0.0";(0,a.log)(`[version] qbotclaw \u7248\u672C: ${o}`);let e="0.0.0";if(w.default.existsSync(l.MCPORTER_BIN))try{e=(await(0,n.execCommand)(`"${l.NODE_BIN}" "${l.MCPORTER_BIN}" --version`)).trim(),(0,a.log)(`[version] mcporter \u7248\u672C: ${e}`)}catch(i){(0,a.log)(`[version] \u83B7\u53D6 mcporter \u7248\u672C\u5931\u8D25: ${i.message}`),e=`error: ${i.message}`}let s="0.0.0";if(w.default.existsSync(l.PYTHON_BIN))try{s=(await(0,n.execCommand)(`"${l.PYTHON_BIN}" --version`)).trim(),(0,a.log)(`[version] python \u7248\u672C: ${s}`)}catch(i){(0,a.log)(`[version] \u83B7\u53D6 python \u7248\u672C\u5931\u8D25: ${i.message}`),s=`error: ${i.message}`}(0,n.sendJSON)(t,200,{status:"\u6210\u529F",launcher:J.LAUNCHER_VERSION,node:r,qbotclaw:o,mcporter:e,python:s});return}if(d==="/api/port"){const r=exports.server.address(),o=r&&typeof r=="object"?r.port:null,e=(0,P.readState)();(0,n.sendJSON)(t,200,{status:"\u6210\u529F",launcher:o,qbotclaw:e.gatewayPort??2e3,mcpHttp:e.mcpHttpPort??l.DEFAULT_MCP_HTTP_PORT,mcpWs:e.mcpWsPort??8765});return}if(d==="/api/status"){const r=(0,P.readState)(),o=[];if(r.gatewayPid)try{process.kill(r.gatewayPid,0)}catch{o.push(`gateway \u8FDB\u7A0B (pid: ${r.gatewayPid}) \u5DF2\u9000\u51FA`)}else o.push("gateway \u8FDB\u7A0B\u672A\u542F\u52A8\uFF08\u72B6\u6001\u4E2D\u65E0 gatewayPid\uFF09");const e=[{name:"gateway",port:r.gatewayPort},{name:"mcpHttp",port:r.mcpHttpPort},{name:"mcpWs",port:r.mcpWsPort}];for(const{name:s,port:i}of e){if(!i){o.push(`${s} \u7AEF\u53E3\u672A\u914D\u7F6E\uFF08\u72B6\u6001\u4E2D\u65E0\u5BF9\u5E94\u7AEF\u53E3\u53F7\uFF09`);continue}await(0,P.isPortAvailable)(i)&&o.push(`${s} \u7AEF\u53E3 (${i}) \u65E0\u670D\u52A1\u76D1\u542C`)}o.length===0?(0,n.sendJSON)(t,200,{ok:!0,message:"\u6240\u6709\u670D\u52A1\u8FD0\u884C\u6B63\u5E38"}):(0,n.sendJSON)(t,200,{ok:!1,message:o.join("\uFF1B")});return}if(d==="/api/restart"){try{const r=(0,P.readState)();if(r.gatewayPid)try{process.kill(r.gatewayPid,"SIGTERM"),(0,a.log)(`[restart] \u5DF2\u53D1\u9001 SIGTERM \u7ED9\u65E7 gateway \u8FDB\u7A0B pid: ${r.gatewayPid}`)}catch{(0,a.log)(`[restart] \u65E7 gateway \u8FDB\u7A0B ${r.gatewayPid} \u53EF\u80FD\u5DF2\u9000\u51FA\uFF0C\u5FFD\u7565`)}const{gatewayPid:o,gatewayPort:e,mcpHttpPort:s,mcpWsPort:i,...f}=r;(0,P.writeState)(f),(0,a.log)("[restart] \u5DF2\u6E05\u9664 gatewayPid, gatewayPort, mcpHttpPort, mcpWsPort"),await(0,_.configAndRunQBotClaw)(),(0,a.log)("[restart] QBotClaw gateway \u91CD\u542F\u5B8C\u6210");const g=(0,P.readState)(),c=exports.server.address(),u=c&&typeof c=="object"?c.port:null;(0,n.sendJSON)(t,200,{ok:!0,message:"QBotClaw gateway \u91CD\u542F\u6210\u529F",launcher:u,qbotclaw:g.gatewayPort??2e3,mcpHttp:g.mcpHttpPort??l.DEFAULT_MCP_HTTP_PORT,mcpWs:g.mcpWsPort??8765,gatewayToken:(0,k.getOrCreateGatewayToken)()})}catch(r){(0,a.log)(`[restart] \u91CD\u542F\u5931\u8D25: ${r.message}`),(0,n.sendJSON)(t,500,{ok:!1,message:`\u91CD\u542F\u5931\u8D25: ${r.message}`})}return}if(d==="/api/wechat/history"){try{if(!w.default.existsSync(l.SESSIONS_FILE)){(0,n.sendJSON)(t,404,{ok:!1,sessionKey:"",message:"\u672A\u627E\u5230\u4F1A\u8BDD\u6587\u4EF6"});return}const r=JSON.parse(w.default.readFileSync(l.SESSIONS_FILE,"utf-8"));let o=null,e=0;for(const[f,g]of Object.entries(r))if(f.includes("openclaw-weixin")){const u=g.updatedAt??0;u>e&&(e=u,o=f)}if(!o){(0,n.sendJSON)(t,404,{ok:!1,sessionKey:"",message:"\u672A\u627E\u5230\u5FAE\u4FE1\u4F1A\u8BDD"});return}const i=o.split(":").slice(4).join(":");(0,n.sendJSON)(t,200,{ok:!0,sessionKey:i,message:"\u83B7\u53D6\u6210\u529F"})}catch(r){(0,a.log)(`[wechat/history] \u8BFB\u53D6\u5FAE\u4FE1\u4F1A\u8BDD\u5931\u8D25: ${r.message}`),(0,n.sendJSON)(t,500,{ok:!1,sessionKey:"",message:`\u8BFB\u53D6\u5FAE\u4FE1\u4F1A\u8BDD\u5931\u8D25: ${r.message}`})}return}if(d==="/api/installing"){(0,n.sendJSON)(t,200,{installing:_.isInstalling});return}if(d==="/api/install"||d.startsWith("/api/install?")){if(_.installState.status==="downloading"){(0,n.sendJSON)(t,200,{ok:"downloading",message:"\u6B63\u5728\u5B89\u88C5\u4E2D..."});return}const r=new URL(d,"http://localhost"),o=r.searchParams.get("version")||void 0,e=r.searchParams.get("overrideConfig")==="true";if(!o){(0,n.sendJSON)(t,400,{status:"\u5931\u8D25",message:"\u7F3A\u5C11\u5FC5\u8981\u53C2\u6570 version\uFF0C\u7528\u6CD5: GET /api/install?version=x.x.x"});return}t.writeHead(200,{...N,"Content-Type":"text/plain; charset=utf-8","Transfer-Encoding":"chunked","Cache-Control":"no-cache"}),(0,_.runInstall)(t,o,e);return}if(d.startsWith("/api/watch")){const o=new URL(d,"http://localhost").searchParams.get("ppid");if(!o||isNaN(Number(o))){(0,n.sendJSON)(t,400,{status:"\u5931\u8D25",message:"\u7F3A\u5C11\u6709\u6548\u7684 ppid \u53C2\u6570\uFF0C\u7528\u6CD5: GET /api/watch?ppid=12345"});return}const e=parseInt(o,10);try{process.kill(e,0)}catch{(0,n.sendJSON)(t,400,{status:"\u5931\u8D25",message:`\u8FDB\u7A0B ${e} \u4E0D\u5B58\u5728`});return}const s=(0,P.readState)();(0,P.writeState)({...s,ppid:e}),W(e),(0,n.sendJSON)(t,200,{status:"\u6210\u529F",message:`\u5DF2\u5F00\u59CB\u76D1\u63A7\u7236\u8FDB\u7A0B ppid: ${e}`});return}if(d==="/api/qbotclaw"&&p.method==="POST"){let r="";p.on("data",o=>{r+=o.toString()}),p.on("end",()=>{let o;try{const e=JSON.parse(r);if(!Array.isArray(e.args)||e.args.length===0){(0,n.sendJSON)(t,400,{status:"\u5931\u8D25",message:"\u53C2\u6570 args \u5FC5\u987B\u662F\u975E\u7A7A\u6570\u7EC4"});return}o=e.args.map(s=>String(s))}catch{(0,n.sendJSON)(t,400,{status:"\u5931\u8D25",message:"\u8BF7\u6C42\u4F53\u5FC5\u987B\u662F\u5408\u6CD5\u7684 JSON"});return}if(!w.default.existsSync(l.QBOTCLAW_BIN)){(0,n.sendJSON)(t,404,{status:"\u5931\u8D25",message:`qbotclaw \u53EF\u6267\u884C\u6587\u4EF6\u4E0D\u5B58\u5728: ${l.QBOTCLAW_BIN}`});return}t.writeHead(200,{...N,"Content-Type":"text/plain; charset=utf-8","Transfer-Encoding":"chunked","Cache-Control":"no-cache"}),(0,_.runQBotClaw)(o,t).then(()=>{t.end(`
2
2
  [\u6267\u884C\u6210\u529F]
3
3
  `)}).catch(e=>{t.end(`
4
4
  [\u542F\u52A8\u5931\u8D25: ${e.message}]
5
5
  `)})});return}if(d.startsWith("/api/uninstall")){const o=new URL(d,"http://localhost").searchParams.get("keepWorkspace")==="true";t.writeHead(200,{...N,"Content-Type":"text/plain; charset=utf-8","Transfer-Encoding":"chunked","Cache-Control":"no-cache"});const e=(s,i,f)=>{if(t.writable)try{t.write(JSON.stringify({status:s,file:i,msg:f})+`
6
- `)}catch{}};try{e("\u6210\u529F","","\u6B63\u5728\u505C\u6B62 QBotClaw...");const s=(0,P.readState)();if(s.gatewayPid)try{process.kill(s.gatewayPid,"SIGTERM"),(0,a.log)(`[uninstall] \u5DF2\u505C\u6B62 QBotClaw gateway \u8FDB\u7A0B pid: ${s.gatewayPid}`),e("\u6210\u529F","",`\u5DF2\u505C\u6B62 QBotClaw gateway \u8FDB\u7A0B pid: ${s.gatewayPid}`)}catch{(0,a.log)(`[uninstall] QBotClaw gateway \u8FDB\u7A0B ${s.gatewayPid} \u53EF\u80FD\u5DF2\u9000\u51FA`),e("\u6210\u529F","",`QBotClaw gateway \u8FDB\u7A0B ${s.gatewayPid} \u53EF\u80FD\u5DF2\u9000\u51FA`)}else e("\u6210\u529F","","QBotClaw \u672A\u5728\u8FD0\u884C");e("\u6210\u529F","",`\u6B63\u5728\u6267\u884C npm uninstall -g ${l.NPM_PACKAGE_NAME}...`);try{await new Promise((f,g)=>{const c=(0,A.spawn)(l.NPM_BIN,["--userconfig",l.NPM_RC,"uninstall","-g",l.NPM_PACKAGE_NAME],{env:{...process.env,PATH:`${l.NODE_BIN_DIR}:${process.env.PATH}`}});c.stdout?.on("data",u=>{(0,a.log)(`[uninstall] npm: ${u.toString().trim()}`)}),c.stderr?.on("data",u=>{(0,a.log)(`[uninstall] npm stderr: ${u.toString().trim()}`)}),c.on("close",u=>{u===0?f():g(new Error(`npm uninstall \u9000\u51FA\u7801: ${u}`))}),c.on("error",u=>g(u))}),(0,a.log)(`[uninstall] npm uninstall -g ${l.NPM_PACKAGE_NAME} \u6210\u529F`),e("\u6210\u529F","",`npm uninstall -g ${l.NPM_PACKAGE_NAME} \u6210\u529F`)}catch(f){(0,a.log)(`[uninstall] npm uninstall \u5931\u8D25: ${f.message}`),e("\u5931\u8D25","",`npm uninstall \u5931\u8D25: ${f.message}`)}e("\u6210\u529F","",`\u6B63\u5728\u6E05\u7406\u76EE\u5F55 ${l.QBOT_CLAW_DIR}...`);const i=[];if(h.default.existsSync(l.QBOT_CLAW_DIR)){const f=h.default.readdirSync(l.QBOT_CLAW_DIR);for(const g of f){const c=y.default.join(l.QBOT_CLAW_DIR,g);if(o&&g==="workspace"){e("\u6210\u529F",c,"\u4FDD\u7559 workspace \u76EE\u5F55");continue}try{h.default.statSync(c).isDirectory()?h.default.rmSync(c,{recursive:!0,force:!0}):h.default.unlinkSync(c),e("\u6210\u529F",c,"\u5DF2\u5220\u9664")}catch(u){(0,a.log)(`[uninstall] \u5220\u9664\u5931\u8D25: ${c} - ${u.message}`),e("\u5931\u8D25",c,`\u5220\u9664\u5931\u8D25: ${u.message}`),i.push(c)}}if(i.length>0){e("\u6210\u529F","",`${i.length} \u4E2A\u9879\u76EE\u5220\u9664\u5931\u8D25\uFF0C\u4F7F\u7528 rm \u547D\u4EE4\u91CD\u8BD5...`);for(const g of i)try{(0,A.execSync)(`rm -rf "${g}"`),(0,a.log)(`[uninstall] rm -rf \u91CD\u8BD5\u6210\u529F: ${g}`),e("\u6210\u529F",g,"rm \u91CD\u8BD5\u5220\u9664\u6210\u529F")}catch(c){(0,a.log)(`[uninstall] rm -rf \u91CD\u8BD5\u4E5F\u5931\u8D25: ${g} - ${c.message}`),e("\u5931\u8D25",g,`rm \u91CD\u8BD5\u4E5F\u5931\u8D25: ${c.message}`)}}if(o)e("\u6210\u529F",l.QBOT_CLAW_DIR,"\u4FDD\u7559\u6839\u76EE\u5F55\uFF08workspace \u6A21\u5F0F\uFF09");else try{h.default.rmSync(l.QBOT_CLAW_DIR,{recursive:!0,force:!0}),e("\u6210\u529F",l.QBOT_CLAW_DIR,"\u5DF2\u5220\u9664\u6839\u76EE\u5F55")}catch(g){(0,a.log)(`[uninstall] \u5220\u9664\u6839\u76EE\u5F55\u5931\u8D25: ${g.message}`);try{(0,A.execSync)(`rm -rf "${l.QBOT_CLAW_DIR}"`),e("\u6210\u529F",l.QBOT_CLAW_DIR,"rm \u91CD\u8BD5\u5220\u9664\u6839\u76EE\u5F55\u6210\u529F")}catch(c){e("\u5931\u8D25",l.QBOT_CLAW_DIR,`\u5220\u9664\u6839\u76EE\u5F55\u5931\u8D25: ${c.message}`)}}}else e("\u6210\u529F",l.QBOT_CLAW_DIR,"\u76EE\u5F55\u4E0D\u5B58\u5728\uFF0C\u65E0\u9700\u6E05\u7406");e("\u6210\u529F","","\u5378\u8F7D\u5B8C\u6210")}catch(s){(0,a.log)(`[uninstall] \u5378\u8F7D\u8FC7\u7A0B\u5F02\u5E38: ${s.message}`),e("\u5931\u8D25","",`\u5378\u8F7D\u8FC7\u7A0B\u5F02\u5E38: ${s.message}`)}t.end(),setTimeout(()=>{(0,a.log)("[uninstall] \u5378\u8F7D\u6D41\u7A0B\u7ED3\u675F\uFF0Clauncher \u8FDB\u7A0B\u9000\u51FA"),process.exit(0)},500);return}if(d.startsWith("/api/reveal")){const o=new URL(d,"http://localhost").searchParams.get("path");if(!o){(0,n.sendJSON)(t,400,{status:"\u5931\u8D25",message:"\u7F3A\u5C11\u5FC5\u8981\u53C2\u6570 path\uFF08\u9700 Base64 \u7F16\u7801\uFF09\uFF0C\u7528\u6CD5: GET /api/reveal?path=<base64\u7F16\u7801\u7684\u6587\u4EF6\u7EDD\u5BF9\u8DEF\u5F84>"});return}let e;try{e=Buffer.from(o,"base64").toString("utf-8")}catch{(0,n.sendJSON)(t,400,{status:"\u5931\u8D25",message:"path \u53C2\u6570 Base64 \u89E3\u7801\u5931\u8D25\uFF0C\u8BF7\u786E\u4FDD\u4F20\u5165\u5408\u6CD5\u7684 Base64 \u7F16\u7801\u5B57\u7B26\u4E32"});return}if(!e||e.trim()===""){(0,n.sendJSON)(t,400,{status:"\u5931\u8D25",message:"Base64 \u89E3\u7801\u540E\u8DEF\u5F84\u4E3A\u7A7A"});return}if(e.includes("\0")){(0,n.sendJSON)(t,400,{status:"\u5931\u8D25",message:"\u8DEF\u5F84\u5305\u542B\u975E\u6CD5\u5B57\u7B26"});return}const s=y.default.resolve(e),i=process.platform==="win32"?["C:\\Windows","C:\\Program Files","C:\\Program Files (x86)","C:\\ProgramData"]:["/etc","/var","/usr","/bin","/sbin","/boot","/root","/sys","/proc","/dev","/lib","/lib64"],f=s.toLowerCase();for(const m of i)if(f===m.toLowerCase()||f.startsWith(m.toLowerCase()+y.default.sep)){(0,a.log)(`[reveal] \u8BBF\u95EE\u7CFB\u7EDF\u654F\u611F\u76EE\u5F55\u88AB\u62D2\u7EDD: ${s}`),(0,n.sendJSON)(t,403,{status:"\u5931\u8D25",message:"\u7981\u6B62\u8BBF\u95EE\u7CFB\u7EDF\u654F\u611F\u76EE\u5F55"});return}const g=y.default.basename(l.QBOT_CLAW_DIR),c=s.split(y.default.sep);for(const m of c)if(m.startsWith(".")&&m!=="."&&m!==".."&&m!==g){(0,a.log)(`[reveal] \u8BBF\u95EE\u9690\u85CF\u6587\u4EF6/\u76EE\u5F55\u88AB\u62D2\u7EDD: ${s}\uFF08\u5339\u914D\u6BB5: ${m}\uFF09`),(0,n.sendJSON)(t,403,{status:"\u5931\u8D25",message:"\u7981\u6B62\u8BBF\u95EE\u9690\u85CF\u6587\u4EF6\u6216\u76EE\u5F55"});return}if(!h.default.existsSync(s)){(0,n.sendJSON)(t,404,{status:"\u5931\u8D25",message:`\u6587\u4EF6\u6216\u76EE\u5F55\u4E0D\u5B58\u5728: ${s}`});return}let u;try{u=h.default.realpathSync(s)}catch{(0,n.sendJSON)(t,400,{status:"\u5931\u8D25",message:"\u65E0\u6CD5\u89E3\u6790\u6587\u4EF6\u771F\u5B9E\u8DEF\u5F84"});return}if(u!==s){const m=u.toLowerCase();for(const w of i)if(m===w.toLowerCase()||m.startsWith(w.toLowerCase()+y.default.sep)){(0,a.log)(`[reveal] \u7B26\u53F7\u94FE\u63A5\u6307\u5411\u7CFB\u7EDF\u654F\u611F\u76EE\u5F55\u88AB\u62D2\u7EDD: ${s} -> ${u}`),(0,n.sendJSON)(t,403,{status:"\u5931\u8D25",message:"\u7981\u6B62\u8BBF\u95EE\u7CFB\u7EDF\u654F\u611F\u76EE\u5F55"});return}const $=u.split(y.default.sep);for(const w of $)if(w.startsWith(".")&&w!=="."&&w!==".."&&w!==g){(0,a.log)(`[reveal] \u7B26\u53F7\u94FE\u63A5\u6307\u5411\u9690\u85CF\u6587\u4EF6/\u76EE\u5F55\u88AB\u62D2\u7EDD: ${s} -> ${u}\uFF08\u5339\u914D\u6BB5: ${w}\uFF09`),(0,n.sendJSON)(t,403,{status:"\u5931\u8D25",message:"\u7981\u6B62\u8BBF\u95EE\u9690\u85CF\u6587\u4EF6\u6216\u76EE\u5F55"});return}}const E=process.platform;let T,v;E==="darwin"?(T="open",v=["-R",s]):E==="win32"?(T="explorer",v=[`/select,${s}`]):(T="xdg-open",v=[y.default.dirname(s)]);try{await new Promise((m,$)=>{const w=(0,A.spawn)(T,v,{stdio:"ignore"}),B=setTimeout(()=>{w.kill(),$(new Error("\u6253\u5F00\u6587\u4EF6\u7BA1\u7406\u5668\u8D85\u65F6\uFF085\u79D2\uFF09"))},5e3);w.on("close",O=>{clearTimeout(B),O===0||O===1?m():$(new Error(`\u8FDB\u7A0B\u9000\u51FA\u7801: ${O}`))}),w.on("error",O=>{clearTimeout(B),$(O)})}),(0,a.log)(`[reveal] \u5DF2\u5728\u6587\u4EF6\u7BA1\u7406\u5668\u4E2D\u663E\u793A: ${s}`),(0,n.sendJSON)(t,200,{status:"\u6210\u529F",message:`\u5DF2\u5728\u6587\u4EF6\u7BA1\u7406\u5668\u4E2D\u663E\u793A: ${s}`})}catch(m){(0,a.log)(`[reveal] \u6253\u5F00\u6587\u4EF6\u7BA1\u7406\u5668\u5931\u8D25: ${m.message}`),(0,n.sendJSON)(t,500,{status:"\u5931\u8D25",message:`\u6253\u5F00\u6587\u4EF6\u7BA1\u7406\u5668\u5931\u8D25: ${m.message}`})}return}(0,n.sendJSON)(t,404,{status:"\u5931\u8D25",message:"\u63A5\u53E3\u4E0D\u5B58\u5728"})});let S=null,C=null;function W(p){if(!p)return;if(S&&C===p){(0,a.log)(`[watchParentProcess] \u5DF2\u5728\u76D1\u63A7\u7236\u8FDB\u7A0B ppid: ${p}\uFF0C\u8DF3\u8FC7\u91CD\u590D\u76D1\u542C`);return}S?((0,a.log)(`[watchParentProcess] \u5DF2\u6709\u76D1\u63A7\uFF08ppid: ${C}\uFF09\uFF0C\u505C\u6B62\u65E7\u7684\u76D1\u63A7\uFF0C\u91CD\u65B0\u76D1\u63A7 ppid: ${p}`),clearInterval(S),S=null,C=null):(0,a.log)(`[watchParentProcess] \u5F00\u59CB\u76D1\u63A7\u7236\u8FDB\u7A0B ppid: ${p}`);const t=setInterval(()=>{try{process.kill(p,0)}catch{(0,a.log)(`[watchParentProcess] \u7236\u8FDB\u7A0B ${p} \u5DF2\u9000\u51FA\uFF0C\u5F00\u59CB\u6E05\u7406\u5E76\u9000\u51FA`),clearInterval(t),S=null,C=null;const d=(0,P.readState)();if(d.gatewayPid)try{process.kill(d.gatewayPid,"SIGTERM"),(0,a.log)(`[watchParentProcess] \u5DF2\u53D1\u9001 SIGTERM \u7ED9 qbotclaw \u8FDB\u7A0B pid: ${d.gatewayPid}`)}catch{(0,a.log)(`[watchParentProcess] qbotclaw \u8FDB\u7A0B ${d.gatewayPid} \u53EF\u80FD\u5DF2\u9000\u51FA\uFF0C\u5FFD\u7565`)}(0,P.clearState)(),(0,a.log)("[watchParentProcess] \u72B6\u6001\u5DF2\u6E05\u7406\uFF0C\u5173\u95ED server \u5E76\u9000\u51FA"),exports.server.close(()=>{(0,a.log)("[watchParentProcess] server \u5DF2\u5173\u95ED\uFF0C\u8FDB\u7A0B\u9000\u51FA"),process.exit(0)}),setTimeout(()=>{(0,a.log)("[watchParentProcess] server.close \u8D85\u65F6\uFF0C\u5F3A\u5236\u9000\u51FA"),process.exit(0)},3e3).unref()}},3e3);t.unref(),S=t,C=p}
6
+ `)}catch{}};try{e("\u6210\u529F","","\u6B63\u5728\u505C\u6B62 QBotClaw...");const s=(0,P.readState)();if(s.gatewayPid)try{process.kill(s.gatewayPid,"SIGTERM"),(0,a.log)(`[uninstall] \u5DF2\u505C\u6B62 QBotClaw gateway \u8FDB\u7A0B pid: ${s.gatewayPid}`),e("\u6210\u529F","",`\u5DF2\u505C\u6B62 QBotClaw gateway \u8FDB\u7A0B pid: ${s.gatewayPid}`)}catch{(0,a.log)(`[uninstall] QBotClaw gateway \u8FDB\u7A0B ${s.gatewayPid} \u53EF\u80FD\u5DF2\u9000\u51FA`),e("\u6210\u529F","",`QBotClaw gateway \u8FDB\u7A0B ${s.gatewayPid} \u53EF\u80FD\u5DF2\u9000\u51FA`)}else e("\u6210\u529F","","QBotClaw \u672A\u5728\u8FD0\u884C");e("\u6210\u529F","",`\u6B63\u5728\u6267\u884C npm uninstall -g ${l.NPM_PACKAGE_NAME}...`);try{await new Promise((f,g)=>{const c=(0,A.spawn)(l.NPM_BIN,["--userconfig",l.NPM_RC,"uninstall","-g",l.NPM_PACKAGE_NAME],{env:{...process.env,PATH:`${l.NODE_BIN_DIR}:${process.env.PATH}`}});c.stdout?.on("data",u=>{(0,a.log)(`[uninstall] npm: ${u.toString().trim()}`)}),c.stderr?.on("data",u=>{(0,a.log)(`[uninstall] npm stderr: ${u.toString().trim()}`)}),c.on("close",u=>{u===0?f():g(new Error(`npm uninstall \u9000\u51FA\u7801: ${u}`))}),c.on("error",u=>g(u))}),(0,a.log)(`[uninstall] npm uninstall -g ${l.NPM_PACKAGE_NAME} \u6210\u529F`),e("\u6210\u529F","",`npm uninstall -g ${l.NPM_PACKAGE_NAME} \u6210\u529F`)}catch(f){(0,a.log)(`[uninstall] npm uninstall \u5931\u8D25: ${f.message}`),e("\u5931\u8D25","",`npm uninstall \u5931\u8D25: ${f.message}`)}e("\u6210\u529F","",`\u6B63\u5728\u6E05\u7406\u76EE\u5F55 ${l.QBOT_CLAW_DIR}...`);const i=[];if(w.default.existsSync(l.QBOT_CLAW_DIR)){const f=w.default.readdirSync(l.QBOT_CLAW_DIR);for(const g of f){const c=y.default.join(l.QBOT_CLAW_DIR,g);if(o&&g==="workspace"){e("\u6210\u529F",c,"\u4FDD\u7559 workspace \u76EE\u5F55");continue}try{w.default.statSync(c).isDirectory()?w.default.rmSync(c,{recursive:!0,force:!0}):w.default.unlinkSync(c),e("\u6210\u529F",c,"\u5DF2\u5220\u9664")}catch(u){(0,a.log)(`[uninstall] \u5220\u9664\u5931\u8D25: ${c} - ${u.message}`),e("\u5931\u8D25",c,`\u5220\u9664\u5931\u8D25: ${u.message}`),i.push(c)}}if(i.length>0){e("\u6210\u529F","",`${i.length} \u4E2A\u9879\u76EE\u5220\u9664\u5931\u8D25\uFF0C\u4F7F\u7528 rm \u547D\u4EE4\u91CD\u8BD5...`);for(const g of i)try{(0,A.execSync)(`rm -rf "${g}"`),(0,a.log)(`[uninstall] rm -rf \u91CD\u8BD5\u6210\u529F: ${g}`),e("\u6210\u529F",g,"rm \u91CD\u8BD5\u5220\u9664\u6210\u529F")}catch(c){(0,a.log)(`[uninstall] rm -rf \u91CD\u8BD5\u4E5F\u5931\u8D25: ${g} - ${c.message}`),e("\u5931\u8D25",g,`rm \u91CD\u8BD5\u4E5F\u5931\u8D25: ${c.message}`)}}if(o)e("\u6210\u529F",l.QBOT_CLAW_DIR,"\u4FDD\u7559\u6839\u76EE\u5F55\uFF08workspace \u6A21\u5F0F\uFF09");else try{w.default.rmSync(l.QBOT_CLAW_DIR,{recursive:!0,force:!0}),e("\u6210\u529F",l.QBOT_CLAW_DIR,"\u5DF2\u5220\u9664\u6839\u76EE\u5F55")}catch(g){(0,a.log)(`[uninstall] \u5220\u9664\u6839\u76EE\u5F55\u5931\u8D25: ${g.message}`);try{(0,A.execSync)(`rm -rf "${l.QBOT_CLAW_DIR}"`),e("\u6210\u529F",l.QBOT_CLAW_DIR,"rm \u91CD\u8BD5\u5220\u9664\u6839\u76EE\u5F55\u6210\u529F")}catch(c){e("\u5931\u8D25",l.QBOT_CLAW_DIR,`\u5220\u9664\u6839\u76EE\u5F55\u5931\u8D25: ${c.message}`)}}}else e("\u6210\u529F",l.QBOT_CLAW_DIR,"\u76EE\u5F55\u4E0D\u5B58\u5728\uFF0C\u65E0\u9700\u6E05\u7406");e("\u6210\u529F","","\u5378\u8F7D\u5B8C\u6210")}catch(s){(0,a.log)(`[uninstall] \u5378\u8F7D\u8FC7\u7A0B\u5F02\u5E38: ${s.message}`),e("\u5931\u8D25","",`\u5378\u8F7D\u8FC7\u7A0B\u5F02\u5E38: ${s.message}`)}t.end(),setTimeout(()=>{(0,a.log)("[uninstall] \u5378\u8F7D\u6D41\u7A0B\u7ED3\u675F\uFF0Clauncher \u8FDB\u7A0B\u9000\u51FA"),process.exit(0)},500);return}if(d.startsWith("/api/reveal")){const o=new URL(d,"http://localhost").searchParams.get("path");if(!o){(0,n.sendJSON)(t,400,{status:"\u5931\u8D25",message:"\u7F3A\u5C11\u5FC5\u8981\u53C2\u6570 path\uFF08\u9700 Base64 \u7F16\u7801\uFF09\uFF0C\u7528\u6CD5: GET /api/reveal?path=<base64\u7F16\u7801\u7684\u6587\u4EF6\u7EDD\u5BF9\u8DEF\u5F84>"});return}let e;try{e=Buffer.from(o,"base64").toString("utf-8")}catch{(0,n.sendJSON)(t,400,{status:"\u5931\u8D25",message:"path \u53C2\u6570 Base64 \u89E3\u7801\u5931\u8D25\uFF0C\u8BF7\u786E\u4FDD\u4F20\u5165\u5408\u6CD5\u7684 Base64 \u7F16\u7801\u5B57\u7B26\u4E32"});return}if(!e||e.trim()===""){(0,n.sendJSON)(t,400,{status:"\u5931\u8D25",message:"Base64 \u89E3\u7801\u540E\u8DEF\u5F84\u4E3A\u7A7A"});return}if(e.includes("\0")){(0,n.sendJSON)(t,400,{status:"\u5931\u8D25",message:"\u8DEF\u5F84\u5305\u542B\u975E\u6CD5\u5B57\u7B26"});return}const s=y.default.resolve(e),i=process.platform==="win32"?["C:\\Windows","C:\\Program Files","C:\\Program Files (x86)","C:\\ProgramData"]:["/etc","/var","/usr","/bin","/sbin","/boot","/root","/sys","/proc","/dev","/lib","/lib64"],f=s.toLowerCase();for(const m of i)if(f===m.toLowerCase()||f.startsWith(m.toLowerCase()+y.default.sep)){(0,a.log)(`[reveal] \u8BBF\u95EE\u7CFB\u7EDF\u654F\u611F\u76EE\u5F55\u88AB\u62D2\u7EDD: ${s}`),(0,n.sendJSON)(t,403,{status:"\u5931\u8D25",message:"\u7981\u6B62\u8BBF\u95EE\u7CFB\u7EDF\u654F\u611F\u76EE\u5F55"});return}const g=y.default.basename(l.QBOT_CLAW_DIR),c=s.split(y.default.sep);for(const m of c)if(m.startsWith(".")&&m!=="."&&m!==".."&&m!==g){(0,a.log)(`[reveal] \u8BBF\u95EE\u9690\u85CF\u6587\u4EF6/\u76EE\u5F55\u88AB\u62D2\u7EDD: ${s}\uFF08\u5339\u914D\u6BB5: ${m}\uFF09`),(0,n.sendJSON)(t,403,{status:"\u5931\u8D25",message:"\u7981\u6B62\u8BBF\u95EE\u9690\u85CF\u6587\u4EF6\u6216\u76EE\u5F55"});return}if(!w.default.existsSync(s)){(0,n.sendJSON)(t,404,{status:"\u5931\u8D25",message:`\u6587\u4EF6\u6216\u76EE\u5F55\u4E0D\u5B58\u5728: ${s}`});return}let u;try{u=w.default.realpathSync(s)}catch{(0,n.sendJSON)(t,400,{status:"\u5931\u8D25",message:"\u65E0\u6CD5\u89E3\u6790\u6587\u4EF6\u771F\u5B9E\u8DEF\u5F84"});return}if(u!==s){const m=u.toLowerCase();for(const h of i)if(m===h.toLowerCase()||m.startsWith(h.toLowerCase()+y.default.sep)){(0,a.log)(`[reveal] \u7B26\u53F7\u94FE\u63A5\u6307\u5411\u7CFB\u7EDF\u654F\u611F\u76EE\u5F55\u88AB\u62D2\u7EDD: ${s} -> ${u}`),(0,n.sendJSON)(t,403,{status:"\u5931\u8D25",message:"\u7981\u6B62\u8BBF\u95EE\u7CFB\u7EDF\u654F\u611F\u76EE\u5F55"});return}const $=u.split(y.default.sep);for(const h of $)if(h.startsWith(".")&&h!=="."&&h!==".."&&h!==g){(0,a.log)(`[reveal] \u7B26\u53F7\u94FE\u63A5\u6307\u5411\u9690\u85CF\u6587\u4EF6/\u76EE\u5F55\u88AB\u62D2\u7EDD: ${s} -> ${u}\uFF08\u5339\u914D\u6BB5: ${h}\uFF09`),(0,n.sendJSON)(t,403,{status:"\u5931\u8D25",message:"\u7981\u6B62\u8BBF\u95EE\u9690\u85CF\u6587\u4EF6\u6216\u76EE\u5F55"});return}}const E=process.platform;let T,v;E==="darwin"?(T="open",v=["-R",s]):E==="win32"?(T="explorer",v=[`/select,${s}`]):(T="xdg-open",v=[y.default.dirname(s)]);try{await new Promise((m,$)=>{const h=(0,A.spawn)(T,v,{stdio:"ignore"}),B=setTimeout(()=>{h.kill(),$(new Error("\u6253\u5F00\u6587\u4EF6\u7BA1\u7406\u5668\u8D85\u65F6\uFF085\u79D2\uFF09"))},5e3);h.on("close",O=>{clearTimeout(B),O===0||O===1?m():$(new Error(`\u8FDB\u7A0B\u9000\u51FA\u7801: ${O}`))}),h.on("error",O=>{clearTimeout(B),$(O)})}),(0,a.log)(`[reveal] \u5DF2\u5728\u6587\u4EF6\u7BA1\u7406\u5668\u4E2D\u663E\u793A: ${s}`),(0,n.sendJSON)(t,200,{status:"\u6210\u529F",message:`\u5DF2\u5728\u6587\u4EF6\u7BA1\u7406\u5668\u4E2D\u663E\u793A: ${s}`})}catch(m){(0,a.log)(`[reveal] \u6253\u5F00\u6587\u4EF6\u7BA1\u7406\u5668\u5931\u8D25: ${m.message}`),(0,n.sendJSON)(t,500,{status:"\u5931\u8D25",message:`\u6253\u5F00\u6587\u4EF6\u7BA1\u7406\u5668\u5931\u8D25: ${m.message}`})}return}(0,n.sendJSON)(t,404,{status:"\u5931\u8D25",message:"\u63A5\u53E3\u4E0D\u5B58\u5728"})});let S=null,C=null;function W(p){if(!p)return;if(S&&C===p){(0,a.log)(`[watchParentProcess] \u5DF2\u5728\u76D1\u63A7\u7236\u8FDB\u7A0B ppid: ${p}\uFF0C\u8DF3\u8FC7\u91CD\u590D\u76D1\u542C`);return}S?((0,a.log)(`[watchParentProcess] \u5DF2\u6709\u76D1\u63A7\uFF08ppid: ${C}\uFF09\uFF0C\u505C\u6B62\u65E7\u7684\u76D1\u63A7\uFF0C\u91CD\u65B0\u76D1\u63A7 ppid: ${p}`),clearInterval(S),S=null,C=null):(0,a.log)(`[watchParentProcess] \u5F00\u59CB\u76D1\u63A7\u7236\u8FDB\u7A0B ppid: ${p}`);const t=setInterval(()=>{try{process.kill(p,0)}catch{(0,a.log)(`[watchParentProcess] \u7236\u8FDB\u7A0B ${p} \u5DF2\u9000\u51FA\uFF0C\u5F00\u59CB\u6E05\u7406\u5E76\u9000\u51FA`),clearInterval(t),S=null,C=null;const d=(0,P.readState)();if(d.gatewayPid)try{process.kill(d.gatewayPid,"SIGTERM"),(0,a.log)(`[watchParentProcess] \u5DF2\u53D1\u9001 SIGTERM \u7ED9 qbotclaw \u8FDB\u7A0B pid: ${d.gatewayPid}`)}catch{(0,a.log)(`[watchParentProcess] qbotclaw \u8FDB\u7A0B ${d.gatewayPid} \u53EF\u80FD\u5DF2\u9000\u51FA\uFF0C\u5FFD\u7565`)}(0,P.clearState)(),(0,a.log)("[watchParentProcess] \u72B6\u6001\u5DF2\u6E05\u7406\uFF0C\u5173\u95ED server \u5E76\u9000\u51FA"),exports.server.close(()=>{(0,a.log)("[watchParentProcess] server \u5DF2\u5173\u95ED\uFF0C\u8FDB\u7A0B\u9000\u51FA"),process.exit(0)}),setTimeout(()=>{(0,a.log)("[watchParentProcess] server.close \u8D85\u65F6\uFF0C\u5F3A\u5236\u9000\u51FA"),process.exit(0)},3e3).unref()}},3e3);t.unref(),S=t,C=p}
package/dist/version.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.LAUNCHER_VERSION=void 0,exports.LAUNCHER_VERSION="0.9.60";
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.LAUNCHER_VERSION=void 0,exports.LAUNCHER_VERSION="0.9.61";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qqbrowser/qbot-claw-launcher",
3
- "version": "0.9.60",
3
+ "version": "0.9.61",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "bin": {