xuanzhu 0.4.2 → 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -20
- package/dist/cli.js +320 -305
- package/dist/skills/release/SKILL.md +51 -0
- package/dist/skills/release/references/checklist.md +107 -0
- package/dist/skills/release/references/pitfalls.md +66 -0
- package/docs/ARCHITECTURE.md +66 -15
- package/docs/README.en.md +27 -15
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var
|
|
2
|
+
"use strict";var Po=Object.create;var Xr=Object.defineProperty;var Ro=Object.getOwnPropertyDescriptor;var Mo=Object.getOwnPropertyNames;var Io=Object.getPrototypeOf,Do=Object.prototype.hasOwnProperty;var Oo=(r,e,n,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Mo(e))!Do.call(r,i)&&i!==n&&Xr(r,i,{get:()=>e[i],enumerable:!(s=Ro(e,i))||s.enumerable});return r};var v=(r,e,n)=>(n=r!=null?Po(Io(r)):{},Oo(e||!r||!r.__esModule?Xr(n,"default",{value:r,enumerable:!0}):n,r));var pt=v(require("fs")),xn=v(require("path"));var ee=v(require("fs"));var J=v(require("fs")),ht=v(require("os")),ce=v(require("path"));function T(){let r=process.env.XZH_HOME?.trim();return r?ce.resolve(q(r)):ce.join(ht.homedir(),".xzh")}function Lo(){return!!process.env.XZH_HOME?.trim()}function No(){return ce.join(ht.homedir(),".xuanzhu")}function D(){return ce.join(T(),"config.json")}function Vr(){return ce.join(__dirname,"skills")}function Yr(){return ce.join(T(),"skills")}function Zr(){if(Lo())return{migrated:!1};let r=No(),e=T();if(ce.resolve(r)===ce.resolve(e))return{migrated:!1};try{if(J.existsSync(e)||!J.existsSync(r))return{migrated:!1}}catch{return{migrated:!1}}try{return J.renameSync(r,e),{migrated:!0,from:r,to:e}}catch{}let n=`${e}.migrating-${process.pid}`;try{J.rmSync(n,{recursive:!0,force:!0}),J.cpSync(r,n,{recursive:!0}),J.renameSync(n,e)}catch{try{J.rmSync(n,{recursive:!0,force:!0})}catch{}return{migrated:!1}}try{J.rmSync(r,{recursive:!0,force:!0})}catch{}return{migrated:!0,from:r,to:e}}function Z(r){J.existsSync(r)||J.mkdirSync(r,{recursive:!0})}function q(r){return r&&(r==="~"?ht.homedir():r.startsWith("~/")||r.startsWith("~\\")?ce.join(ht.homedir(),r.slice(2)):r)}var C=v(require("fs")),he=v(require("path")),jo=".xuanzhu",Bo="MEMORY.md",Uo=`# \u9879\u76EE\u89C4\u5219
|
|
3
3
|
|
|
4
4
|
> \u672C\u6587\u4EF6\u5185\u5BB9\u4F1A\u4F5C\u4E3A\u300C\u9879\u76EE\u7EA7\u6307\u4EE4\u300D\u8FFD\u52A0\u5230\u7384\u732A\u7684\u7CFB\u7EDF\u63D0\u793A\u8BCD\u4E2D\uFF0C\u7528\u4E8E\u7EA6\u5B9A\u672C\u9879\u76EE\u7684
|
|
5
5
|
> \u7F16\u7801\u89C4\u8303\u3001\u76EE\u5F55\u7ED3\u6784\u3001\u6784\u5EFA\u4E0E\u6D4B\u8BD5\u547D\u4EE4\u7B49\u3002\u7559\u7A7A\u6216\u5220\u9664\u672C\u6587\u4EF6\u5373\u8868\u793A\u4E0D\u4F7F\u7528\u9879\u76EE\u89C4\u5219\u3002
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
- \u5B89\u88C5\u4F9D\u8D56\uFF1A
|
|
12
12
|
- \u8FD0\u884C\u6D4B\u8BD5\uFF1A
|
|
13
13
|
- \u4EE3\u7801\u98CE\u683C\uFF1A
|
|
14
|
-
`,
|
|
14
|
+
`,Fo="AGENTS.md";function ts(r){try{return C.existsSync(r)&&C.readFileSync(r,"utf8").trim()||null}catch{return null}}var zo=`# \u9879\u76EE\u89C4\u5219
|
|
15
15
|
|
|
16
16
|
> \u672C\u6587\u4EF6\u5185\u5BB9\u4F1A\u4F5C\u4E3A\u300C\u9879\u76EE\u7EA7\u6307\u4EE4\u300D\u8FFD\u52A0\u5230\u7384\u732A\u7684\u7CFB\u7EDF\u63D0\u793A\u8BCD\u4E2D\u3002
|
|
17
17
|
> \u7559\u7A7A\u6216\u5220\u9664\u672C\u6587\u4EF6\u5373\u8868\u793A\u4E0D\u4F7F\u7528\u9879\u76EE\u89C4\u5219\u3002
|
|
@@ -22,88 +22,88 @@
|
|
|
22
22
|
\u76EE\u5F55\u7ED3\u6784\u7B49\uFF09\u3002**\u4F60\u5FC5\u987B\u4E25\u683C\u6309\u7167 \`AGENTS.md\` \u6267\u884C\u3002**
|
|
23
23
|
|
|
24
24
|
\u5728\u5F00\u59CB\u4EFB\u4F55\u5DE5\u4F5C\u4E4B\u524D\uFF0C\u5148\u8BFB\u53D6\u9879\u76EE\u6839\u76EE\u5F55\u7684 \`AGENTS.md\`\u3002\u82E5\u5B83\u5728\u4F1A\u8BDD\u8FC7\u7A0B\u4E2D\u88AB\u4FEE\u6539\uFF0C
|
|
25
|
-
\u8BF7\u91CD\u65B0\u8BFB\u53D6\u4EE5\u83B7\u53D6\u6700\u65B0\u5185\u5BB9 \u2014\u2014 \u5B83\u59CB\u7EC8\u662F\u672C\u9879\u76EE\u7EA6\u5B9A\u7684\u552F\u4E00\u6765\u6E90\u3002`;function
|
|
26
|
-
`}function
|
|
25
|
+
\u8BF7\u91CD\u65B0\u8BFB\u53D6\u4EE5\u83B7\u53D6\u6700\u65B0\u5185\u5BB9 \u2014\u2014 \u5B83\u59CB\u7EC8\u662F\u672C\u9879\u76EE\u7EA6\u5B9A\u7684\u552F\u4E00\u6765\u6E90\u3002`;function Qr(r){return ts(he.join(r,Fo))===null?Uo:`${zo}
|
|
26
|
+
`}function Jo(r){let e=he.join(r,jo),n=he.join(e,"memory");return{root:r,dir:e,memoryDir:n,longTermFile:he.join(n,Bo),rulesFile:he.join(e,"rules.md")}}function Q(r){return Jo(he.resolve(r))}function Cn(r){let e=Q(r);if(C.existsSync(e.dir)){C.mkdirSync(e.memoryDir,{recursive:!0});try{C.existsSync(e.rulesFile)||C.writeFileSync(e.rulesFile,Qr(e.root),"utf8")}catch{}return{paths:e,created:!1}}try{return C.mkdirSync(e.memoryDir,{recursive:!0}),C.writeFileSync(e.rulesFile,Qr(e.root),"utf8"),{paths:e,created:!0}}catch{return{paths:e,created:!1}}}function ns(r){return ts(Q(r).rulesFile)}function Ko(r,e=new Date){let n=`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`;return he.join(Q(r).memoryDir,`${n}.md`)}function Xe(r){let e=Q(r),n="",s="",i="";try{C.existsSync(e.longTermFile)&&(n=C.readFileSync(e.longTermFile,"utf8").trim())}catch{}try{if(C.existsSync(e.memoryDir)){let o=C.readdirSync(e.memoryDir).filter(a=>/^\d{4}-\d{2}-\d{2}\.md$/.test(a)).sort().reverse();o.length>0&&(i=o[0],s=C.readFileSync(he.join(e.memoryDir,o[0]),"utf8").trim())}}catch{}return{longTerm:n,recentDailyName:i,recentDaily:s}}function rs(r,e,n){let s=Q(r);C.mkdirSync(s.memoryDir,{recursive:!0});let i=new Date,o=p=>String(p).padStart(2,"0"),a=`${i.getFullYear()}-${o(i.getMonth()+1)}-${o(i.getDate())} ${o(i.getHours())}:${o(i.getMinutes())}`,l=n==="long"?s.longTermFile:Ko(r,i),c=`
|
|
27
27
|
|
|
28
28
|
## ${a}
|
|
29
29
|
|
|
30
30
|
${e.trim()}
|
|
31
|
-
`,u=C.existsSync(l)?"":
|
|
31
|
+
`,u=C.existsSync(l)?"":n==="long"?`# \u9879\u76EE\u957F\u671F\u8BB0\u5FC6
|
|
32
32
|
`:`# \u6BCF\u65E5\u8BB0\u5F55
|
|
33
|
-
`;return C.appendFileSync(l,`${u}${c}`,"utf8"),l}var me=
|
|
34
|
-
`),
|
|
33
|
+
`;return C.appendFileSync(l,`${u}${c}`,"utf8"),l}var me=12e3;function ss(r){return/^##\s+\d{4}-\d{2}-\d{2}(\s+\d{2}:\d{2})?\s*$/.test(r)}function Ho(r){for(let e=r.length-1;e>=0;e--)if(ss(r[e].title))return e;return-1}function qo(r){let e=r.split(`
|
|
34
|
+
`),n=-1;for(let c=0;c<e.length;c++)if(/^##\s/.test(e[c])){n=c;break}if(n<0)return{header:r.trim(),blocks:[]};let s=e.slice(0,n).join(`
|
|
35
35
|
`).trim(),i=[],o="",a=[],l=()=>{o&&i.push({title:o,body:a.join(`
|
|
36
|
-
`).trim()})};for(let c=
|
|
36
|
+
`).trim()})};for(let c=n;c<e.length;c++){let u=e[c];/^##\s/.test(u)?(l(),o=u.trim(),a=[]):a.push(u)}return l(),{header:s,blocks:i}}function es(r,e){let n=r||"# \u9879\u76EE\u957F\u671F\u8BB0\u5FC6";if(e.length===0)return`${n}
|
|
37
37
|
`;let s=e.map(i=>`${i.title}
|
|
38
38
|
|
|
39
|
-
${i.body}`);return`${
|
|
39
|
+
${i.body}`);return`${n}
|
|
40
40
|
|
|
41
41
|
${s.join(`
|
|
42
42
|
|
|
43
43
|
`)}
|
|
44
|
-
`}function
|
|
45
|
-
`:"",i=`${
|
|
46
|
-
\u6D88\u606F\uFF1A${e}`}var
|
|
47
|
-
`,s=`${e}.${process.pid}.tmp`;ee.writeFileSync(s,
|
|
48
|
-
\u7384\u732A\u5DF2\u81EA\u52A8\u91CD\u8BD5\uFF1B\u82E5\u4ECD\u9891\u7E41\u51FA\u73B0\uFF0C\u901A\u5E38\u662F\u4EE3\u7406/\u7F51\u7EDC\u4E0D\u7A33\u5B9A\u5BFC\u81F4\uFF0C\u53EF\u68C0\u67E5\u4EE3\u7406\u6216\u7A0D\u540E\u518D\u8BD5\u3002`;if(i==="ECONNRESET"||s.includes("socket hang up"))return"\u8FDE\u63A5\u88AB\u5BF9\u7AEF\u91CD\u7F6E\uFF08ECONNRESET\uFF09\uFF1A\u7F51\u7EDC\u6216\u4EE3\u7406\u4E2D\u65AD\u4E86\u8FDE\u63A5\uFF0C\u8BF7\u91CD\u8BD5\u3002";if(i==="ETIMEDOUT"||s.includes("timed out"))return"\u8BF7\u6C42\u8D85\u65F6\uFF1A\u7F51\u7EDC\u8F83\u6162\u6216\u6A21\u578B\u670D\u52A1\u672A\u54CD\u5E94\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002";if(i==="ENOTFOUND"||i==="EAI_AGAIN")return"\u65E0\u6CD5\u89E3\u6790\u670D\u52A1\u5730\u5740\uFF1A\u8BF7\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5\u4E0E\u4EE3\u7406\u8BBE\u7F6E\uFF08DNS \u53EF\u80FD\u88AB\u62E6\u622A\uFF09\u3002";if(i==="ECONNREFUSED")return"\u8FDE\u63A5\u88AB\u62D2\u7EDD\uFF1A\u76EE\u6807\u5730\u5740\u6216\u7AEF\u53E3\u4E0D\u53EF\u8FBE\uFF0C\u8BF7\u68C0\u67E5 baseUrl \u4E0E\u4EE3\u7406\u8BBE\u7F6E\u3002";if(o===401||s.includes("unauthorized")||s.includes("invalid api key")||s.includes("authentication"))return"\u8BA4\u8BC1\u5931\u8D25\uFF1AAPI Key \u65E0\u6548\u6216\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u8FD0\u884C `xzh model` \u91CD\u65B0\u914D\u7F6E\u3002";if(o===403)return"\u8BBF\u95EE\u88AB\u62D2\u7EDD\uFF08403\uFF09\uFF1A\u8BF7\u68C0\u67E5 API Key \u6743\u9650\u6216\u670D\u52A1\u5546\u533A\u57DF\u9650\u5236\u3002";if(o===402||s.includes("insufficient")||s.includes("balance"))return"\u8D26\u6237\u989D\u5EA6\u4E0D\u8DB3\uFF1A\u8BF7\u68C0\u67E5\u670D\u52A1\u5546\u4F59\u989D\u6216\u914D\u989D\u3002";if(o===429||s.includes("rate limit"))return"\u8BF7\u6C42\u8FC7\u4E8E\u9891\u7E41\uFF08\u9650\u6D41\uFF09\uFF1A\u8BF7\u7A0D\u540E\u518D\u8BD5\u3002";if(/out\s*of\s*(device\s*)?memory|outofdevicememory|outofmemory|vk::|cuda.*error|hip.*error|cannot allocate|insufficient memory/i.test(
|
|
44
|
+
`}function Wo(r){return r.replace(/\s+/g," ").trim()}function Go(r,e=me){let n=Q(r);if(!C.existsSync(n.longTermFile))return null;let s;try{s=C.readFileSync(n.longTermFile,"utf8")}catch{return null}let i=s.trim().length,{header:o,blocks:a}=qo(s);if(a.length===0)return{before:i,after:i,removedDuplicates:0,removedOldest:0};let l=new Set,c=[],u=0;for(let h of a){let m=Wo(h.body);if(m&&l.has(m)){u++;continue}m&&l.add(m),c.push(h)}let p=0;if(e>0){let h=Math.max(200,Math.floor(e)),m=es(o,c).trim().length;for(;m>h;){let f=Ho(c),y=c.findIndex((S,$)=>ss(S.title)&&$!==f);if(y<0)break;let g=c.splice(y,1)[0];m-=g.title.length+g.body.length+4,p++}}if(u===0&&p===0)return{before:i,after:i,removedDuplicates:0,removedOldest:0};let d=es(o,c);return Tn(r,d),{before:i,after:d.trim().length,removedDuplicates:u,removedOldest:p}}function At(r,e=me){let n=!(e>0),s=Q(r),i;try{if(!C.existsSync(s.longTermFile))return null;i=C.readFileSync(s.longTermFile,"utf8").trim().length}catch{return null}return!n&&i<=e?null:Go(r,e)}function Tn(r,e){let n=Q(r);C.mkdirSync(n.memoryDir,{recursive:!0});let s=e.trim()?`${e.trim()}
|
|
45
|
+
`:"",i=`${n.longTermFile}.${process.pid}.tmp`;return C.writeFileSync(i,s,"utf8"),C.renameSync(i,n.longTermFile),n.longTermFile}var An="{{'\u7528\u6237\u53D1\u9001\u8FC7\u6765\u7684\u6D88\u606F'}}",os=`\u8BF7\u5206\u6790\u4E0B\u9762\u6D88\u606F\u7684\u610F\u56FE\uFF0C\u4EE5\u7B2C\u4E00\u4EBA\u79F0\u8F93\u51FA\u4E09\u6BB5\uFF1A\u3010\u6838\u5FC3\u610F\u56FE\u3011\u4E00\u53E5\u8BDD\u603B\u7ED3\uFF1B\u3010\u9700\u6C42\u62C6\u89E3\u3011\u9010\u6761\u5217\u51FA\u660E\u786E\u9700\u6C42\uFF1B\u3010\u9690\u6027\u610F\u56FE\u3011\u6F5C\u5728\u8BC9\u6C42\u3002\u4E0D\u8981\u589E\u52A0\u539F\u6587\u4E0D\u5B58\u5728\u4FE1\u606F\u3002 \u6D88\u606F\uFF1A ${An}`;function as(r,e){if(r.includes(An))return r.replace(An,()=>e);let n=/\{\{\s*[^{}]*\s*\}\}/;return n.test(r)?r.replace(n,()=>e):`${r}
|
|
46
|
+
\u6D88\u606F\uFF1A${e}`}var Xo=1,B={version:Xo,provider:"deepseek",model:"deepseek-chat",models:[],intent:{enabled:!1},providers:{},maxToolRounds:200,autoApprove:!0,mouseCapture:!0,confirmSensitiveRead:!1,memoryMaxChars:me,maxParallelAgents:4,temperature:.2};function te(){let r=D();try{if(!ee.existsSync(r))return{...B,provider:"",model:"",models:[]};let e=ee.readFileSync(r,"utf8"),n=JSON.parse(e);return Yo(n)}catch(e){throw new Error(`\u8BFB\u53D6\u914D\u7F6E\u5931\u8D25\uFF08${r}\uFF09\uFF1A${e instanceof Error?e.message:String(e)}`)}}function Vo(r){let e={id:r.id||ve(r.provider,r.model),provider:r.provider,model:r.model};return r.apiKey&&(e.apiKey=r.apiKey),r.baseUrl&&(e.baseUrl=r.baseUrl),kn(r.contextWindow)&&(e.contextWindow=Math.floor(r.contextWindow)),typeof r.vision=="boolean"&&(e.vision=r.vision),e}function Yo(r){let e=Array.isArray(r.models)?r.models.filter(n=>!!n&&typeof n.provider=="string"&&typeof n.model=="string").map(n=>Vo(n)):B.models;return{...B,...r,models:e,intent:{enabled:r.intent?.enabled===!0,...r.intent?.prompt?{prompt:r.intent.prompt}:{}},providers:{...B.providers,...r.providers??{}},maxToolRounds:r.maxToolRounds??B.maxToolRounds,autoApprove:r.autoApprove??B.autoApprove,mouseCapture:r.mouseCapture??B.mouseCapture,confirmSensitiveRead:r.confirmSensitiveRead??B.confirmSensitiveRead,memoryMaxChars:r.memoryMaxChars??B.memoryMaxChars,maxParallelAgents:r.maxParallelAgents??B.maxParallelAgents,temperature:r.temperature??B.temperature}}function W(r){Z(T());let e=D(),n=JSON.stringify(r,null,2)+`
|
|
47
|
+
`,s=`${e}.${process.pid}.tmp`;ee.writeFileSync(s,n,{mode:384});try{ee.chmodSync(s,384)}catch{}ee.renameSync(s,e);try{ee.chmodSync(e,384)}catch{}}function mt(){return ee.existsSync(D())}function is(r){return r?r.length<=8?"****":`${r.slice(0,4)}...${r.slice(-4)}`:"(\u672A\u8BBE\u7F6E)"}function ls(r){let e={};for(let[n,s]of Object.entries(r.providers))e[n]={...s,apiKey:is(s.apiKey)};return{version:r.version,provider:r.provider,model:r.model,models:U(r).map(n=>({id:n.id,...n.contextWindow?{contextWindow:n.contextWindow}:{},...n.vision===void 0?{}:{vision:n.vision},...n.baseUrl?{baseUrl:n.baseUrl}:{},...n.apiKey?{apiKey:is(n.apiKey)}:{}})),intent:{enabled:r.intent?.enabled===!0,...r.intent?.prompt?{prompt:r.intent.prompt}:{}},temperature:r.temperature,maxToolRounds:r.maxToolRounds,autoApprove:r.autoApprove,memoryMaxChars:r.memoryMaxChars??B.memoryMaxChars,maxParallelAgents:r.maxParallelAgents??B.maxParallelAgents,systemPromptExtra:r.systemPromptExtra??"",providers:e}}function ve(r,e){return`${r}/${e}`}function U(r){if(r.models&&r.models.length>0)return r.models.map(s=>({...s}));let e=r.provider,n=r.providers[e]?.model||r.model;return e&&n?[{id:ve(e,n),provider:e,model:n}]:[]}function be(r){let e=U(r);if(e.length===0)return null;let n=r.provider&&r.model?ve(r.provider,r.model):"";return e.find(s=>s.id===n)??e[0]}function cs(r,e,n=[]){let s=U(r);if(s.length===0)return null;let i=new Set(n);i.add(e);let o=s.findIndex(a=>a.id===e);for(let a=1;a<=s.length;a++){let l=s[(o+a+s.length)%s.length];if(!i.has(l.id))return l}return null}function _n(r,e){r.provider=e.provider,r.model=e.model,r.providers={...r.providers,[e.provider]:{...r.providers[e.provider]??{},model:e.model}}}function Ve(r){return(!r.models||r.models.length===0)&&(r.models=U(r)),r.models}function kn(r){return typeof r=="number"&&Number.isFinite(r)&&r>0}function us(r,e){let n=Ve(r),s=ve(e.provider,e.model),i=n.find(a=>a.id===s);if(i)return e.apiKey&&(i.apiKey=e.apiKey),e.baseUrl&&(i.baseUrl=e.baseUrl),kn(e.contextWindow)&&(i.contextWindow=Math.floor(e.contextWindow)),typeof e.vision=="boolean"&&(i.vision=e.vision),i;let o={id:s,provider:e.provider,model:e.model,...e.apiKey?{apiKey:e.apiKey}:{},...e.baseUrl?{baseUrl:e.baseUrl}:{},...kn(e.contextWindow)?{contextWindow:Math.floor(e.contextWindow)}:{},...typeof e.vision=="boolean"?{vision:e.vision}:{}};return n.push(o),o}function Zo(r,e){let n=r.findIndex(o=>o.id===e);if(n>=0)return n;let s=r.findIndex(o=>o.model===e);if(s>=0)return s;let i=Number.parseInt(e,10);return!Number.isNaN(i)&&i>=1&&i<=r.length?i-1:-1}function ds(r,e){let n=Ve(r),s=Zo(n,e);if(s<0)return null;let[i]=n.splice(s,1),o=r.provider&&r.model?ve(r.provider,r.model):"";if(i&&i.id===o){let a=n[0];r.provider=a?a.provider:"",r.model=a?a.model:""}return i??null}var vs=v(require("@anthropic-ai/sdk"));var hs=v(require("http")),ms=v(require("https"));function fs(r){let e=!/^http:\/\//i.test(r),n={keepAlive:!1};return e?new ms.Agent(n):new hs.Agent(n)}var ps=new Set(["ECONNRESET","ECONNREFUSED","ECONNABORTED","ETIMEDOUT","EPIPE","ENOTFOUND","EAI_AGAIN","UND_ERR_SOCKET","UND_ERR_CONNECT_TIMEOUT","ERR_STREAM_PREMATURE_CLOSE"]),Qo=["premature close","socket hang up","other side closed","fetch failed","network error","connection error","connection reset","terminated","timeout","timed out"];function ea(r){return r&&r.replace(/\b(Bearer|Basic|Token)\s+[A-Za-z0-9._~+/=-]{6,}/gi,"$1 ***").replace(/\b(sk|pk|rk|api|key|token)[-_][A-Za-z0-9._-]{6,}/gi,"$1-***").replace(/([?&](?:api[-_]?key|key|token|access_token|authorization)=)[^&\s"']+/gi,"$1***").replace(/("(?:api[-_]?key|apikey|token|secret|password|authorization)"\s*:\s*")[^"]*/gi,"$1***")}function I(r){return typeof r=="string"?r:typeof r=="number"||typeof r=="boolean"?String(r):""}function Ye(r){if(typeof r=="number"&&Number.isFinite(r))return r;if(typeof r=="string"){let e=Number.parseInt(r,10);if(!Number.isNaN(e))return e}}function ta(r){let e=r,n=I(e?.message);if(n)return n;let s=e?.error,i=I(s?.message);if(i)return i;let o=e?.cause,a=I(o?.message);if(a)return a;if(r instanceof Error&&r.message)return r.message;try{let c=JSON.stringify(r);if(c&&c!=="{}")return c}catch{}let l=String(r);return l==="[object Object]"?"\u672A\u77E5\u9519\u8BEF\uFF08\u65E0\u6CD5\u89E3\u6790\u9519\u8BEF\u8BE6\u60C5\uFF09":l}function En(r){let e=r,n=Ye(e?.status);if(n!==void 0){if(n===408||n===409||n===429||n>=500&&n<=599)return!0;if(n>=400&&n<500)return!1}let s=I(e?.code).toUpperCase();if(s&&ps.has(s))return!0;let i=e?.cause,o=I(i?.code).toUpperCase();if(o&&ps.has(o))return!0;let a=(I(e?.message)||I(i?.message)||String(r)).toLowerCase();return Qo.some(l=>a.includes(l))}function ne(r){return ea(na(r))}function Pn(r){let e=r,n=Ye(e?.status);if(n===401||n===403||n===404)return!0;let s=(I(e?.message)||I(e?.error?.message)||I(e?.cause?.message)||String(r)).toLowerCase();return["invalid api key","incorrect api key","api key not valid","authentication","unauthorized","\u672A\u77E5 provider","unknown provider","model not found","unknown model","no such model","invalid base url","\u7F3A\u5C11 api key"].some(i=>s.includes(i))}function Rn(r){return Ye(r?.status)===404}function kt(r){let e=r,n=Ye(e?.status);if(n!==void 0&&(n<400||n>=500))return!1;let s=I(e?.code)||I(e?.error?.code);if(/context[_ ]?length|context[_ ]?size|max[_ ]?tokens?_exceeded|token[_ ]?limit/i.test(s))return!0;let i=(I(e?.message)||I(e?.error?.message)||I(e?.cause?.message)||String(r)).toLowerCase();return["context length","context_length","maximum context","context window","prompt is too long","exceed context limit","exceeds the maximum number of tokens","reduce the length","too many tokens","context size","context_size","exceeds the available context","input length exceeds","exceeds the context","n_ctx","n_keep","too long"].some(o=>i.includes(o))}function _t(r){let e=r,n=Ye(e?.status);if(n!==void 0&&(n<400||n>=500))return!1;let s=(I(e?.message)||I(e?.error?.message)||I(e?.cause?.message)||String(r)).toLowerCase();if(["does not support image","doesn't support image","not support image","unsupported image","image input is not supported","images are not supported","vision is not supported","does not support vision","not a multimodal","not support multimodal","unsupported content type","invalid content type","image_url is only supported","only supported by certain models","\u4E0D\u652F\u6301\u56FE\u7247","\u4E0D\u652F\u6301\u56FE\u50CF","\u4E0D\u652F\u6301\u591A\u6A21\u6001","\u4E0D\u652F\u6301\u89C6\u89C9"].some(l=>s.includes(l)))return!0;let o=/image|vision|multimodal|图片|图像|视觉/.test(s),a=/not support|unsupported|only supported|不支持|无法处理/.test(s);return o&&a}function na(r){let e=r,n=ta(r),s=n.toLowerCase(),i=I(e?.code).toUpperCase(),o=Ye(e?.status);if(kt(r))return"\u4E0A\u4E0B\u6587\u8D85\u51FA\u6A21\u578B\u7A97\u53E3\uFF1A\u672C\u6B21\u8BF7\u6C42\u7684\u5185\u5BB9\u6BD4\u6A21\u578B\u80FD\u63A5\u53D7\u7684\u957F\u5EA6\u66F4\u957F\u3002\n\u7384\u732A\u5DF2\u81EA\u52A8\u6536\u655B\u5386\u53F2\u540E\u91CD\u8BD5\uFF1B\u82E5\u4ECD\u5931\u8D25\uFF0C\u53EF\u51CF\u5C11\u4E00\u6B21\u6027\u8BFB\u53D6\u7684\u5185\u5BB9\u91CF\uFF0C\u6216\u7528 `xzh model context <id> <\u5927\u5C0F>` \u8C03\u5927\u8BE5\u6A21\u578B\u7684\u4E0A\u4E0B\u6587\u7A97\u53E3\u3002";if(s.includes("premature close"))return`\u8FDE\u63A5\u88AB\u63D0\u524D\u5173\u95ED\uFF08Premature close\uFF09\uFF1A\u7F51\u7EDC\u6216\u4EE3\u7406\u4E2D\u65AD\u4E86\u54CD\u5E94\u6D41\u3002
|
|
48
|
+
\u7384\u732A\u5DF2\u81EA\u52A8\u91CD\u8BD5\uFF1B\u82E5\u4ECD\u9891\u7E41\u51FA\u73B0\uFF0C\u901A\u5E38\u662F\u4EE3\u7406/\u7F51\u7EDC\u4E0D\u7A33\u5B9A\u5BFC\u81F4\uFF0C\u53EF\u68C0\u67E5\u4EE3\u7406\u6216\u7A0D\u540E\u518D\u8BD5\u3002`;if(i==="ECONNRESET"||s.includes("socket hang up"))return"\u8FDE\u63A5\u88AB\u5BF9\u7AEF\u91CD\u7F6E\uFF08ECONNRESET\uFF09\uFF1A\u7F51\u7EDC\u6216\u4EE3\u7406\u4E2D\u65AD\u4E86\u8FDE\u63A5\uFF0C\u8BF7\u91CD\u8BD5\u3002";if(i==="ETIMEDOUT"||s.includes("timed out"))return"\u8BF7\u6C42\u8D85\u65F6\uFF1A\u7F51\u7EDC\u8F83\u6162\u6216\u6A21\u578B\u670D\u52A1\u672A\u54CD\u5E94\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002";if(i==="ENOTFOUND"||i==="EAI_AGAIN")return"\u65E0\u6CD5\u89E3\u6790\u670D\u52A1\u5730\u5740\uFF1A\u8BF7\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5\u4E0E\u4EE3\u7406\u8BBE\u7F6E\uFF08DNS \u53EF\u80FD\u88AB\u62E6\u622A\uFF09\u3002";if(i==="ECONNREFUSED")return"\u8FDE\u63A5\u88AB\u62D2\u7EDD\uFF1A\u76EE\u6807\u5730\u5740\u6216\u7AEF\u53E3\u4E0D\u53EF\u8FBE\uFF0C\u8BF7\u68C0\u67E5 baseUrl \u4E0E\u4EE3\u7406\u8BBE\u7F6E\u3002";if(o===401||s.includes("unauthorized")||s.includes("invalid api key")||s.includes("authentication"))return"\u8BA4\u8BC1\u5931\u8D25\uFF1AAPI Key \u65E0\u6548\u6216\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u8FD0\u884C `xzh model` \u91CD\u65B0\u914D\u7F6E\u3002";if(o===403)return"\u8BBF\u95EE\u88AB\u62D2\u7EDD\uFF08403\uFF09\uFF1A\u8BF7\u68C0\u67E5 API Key \u6743\u9650\u6216\u670D\u52A1\u5546\u533A\u57DF\u9650\u5236\u3002";if(o===402||s.includes("insufficient")||s.includes("balance"))return"\u8D26\u6237\u989D\u5EA6\u4E0D\u8DB3\uFF1A\u8BF7\u68C0\u67E5\u670D\u52A1\u5546\u4F59\u989D\u6216\u914D\u989D\u3002";if(o===429||s.includes("rate limit"))return"\u8BF7\u6C42\u8FC7\u4E8E\u9891\u7E41\uFF08\u9650\u6D41\uFF09\uFF1A\u8BF7\u7A0D\u540E\u518D\u8BD5\u3002";if(/out\s*of\s*(device\s*)?memory|outofdevicememory|outofmemory|vk::|cuda.*error|hip.*error|cannot allocate|insufficient memory/i.test(n))return`${n}
|
|
49
49
|
\u4EE5\u4E0A\u662F\u6A21\u578B\u670D\u52A1\u7AEF\uFF08llama.cpp / LM Studio \u7B49\uFF09\u62A5\u51FA\u7684\u8D44\u6E90\u9519\u8BEF\uFF1A\u663E\u5B58\u6216\u5185\u5B58\u4E0D\u8DB3\uFF0C\u4E0E\u7384\u732A\u65E0\u5173\u3002
|
|
50
50
|
\u53EF\u5C1D\u8BD5\uFF1A\u51CF\u5C0F\u4E0A\u4E0B\u6587\u957F\u5EA6\uFF08llama.cpp \u7684 -c\uFF0C\u4F8B\u5982 -c 8192\uFF09\u3001\u964D\u4F4E KV cache \u7CBE\u5EA6
|
|
51
51
|
\uFF08--cache-type-k q8_0 --cache-type-v q8_0\uFF09\u3001\u51CF\u5C11 GPU \u5378\u8F7D\u5C42\u6570\uFF08-ngl\uFF09\u3001
|
|
52
52
|
\u6362\u66F4\u5C0F\u7684\u6A21\u578B / \u91CF\u5316\uFF0C\u6216\u5148\u91CA\u653E\u88AB\u5176\u4ED6\u8FDB\u7A0B\u5360\u7528\u7684\u663E\u5B58\u3002
|
|
53
|
-
\u4FEE\u597D\u670D\u52A1\u7AEF\u540E\u91CD\u8BD5\u5373\u53EF\uFF1B\u82E5\u672C\u8F6E\u5DF2\u6CBF\u6A21\u578B\u5217\u8868\u56DE\u9000\u5230\u522B\u7684\u6A21\u578B\uFF0C\u4E0B\u6B21\u542F\u52A8\u4F1A\u63A5\u7740\u7528\u5B83\u3002`;if(typeof o=="number"&&o>=500)return`\u6A21\u578B\u670D\u52A1\u7AEF\u9519\u8BEF\uFF08HTTP ${o}\uFF09\uFF1A\u670D\u52A1\u6682\u65F6\u4E0D\u53EF\u7528\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002`;if(
|
|
53
|
+
\u4FEE\u597D\u670D\u52A1\u7AEF\u540E\u91CD\u8BD5\u5373\u53EF\uFF1B\u82E5\u672C\u8F6E\u5DF2\u6CBF\u6A21\u578B\u5217\u8868\u56DE\u9000\u5230\u522B\u7684\u6A21\u578B\uFF0C\u4E0B\u6B21\u542F\u52A8\u4F1A\u63A5\u7740\u7528\u5B83\u3002`;if(typeof o=="number"&&o>=500)return`\u6A21\u578B\u670D\u52A1\u7AEF\u9519\u8BEF\uFF08HTTP ${o}\uFF09\uFF1A\u670D\u52A1\u6682\u65F6\u4E0D\u53EF\u7528\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002`;if(_t(r))return`${n}
|
|
54
54
|
\u8BE5\u6A21\u578B\u4E0D\u652F\u6301\u56FE\u7247\u8F93\u5165\uFF08\u7384\u732A\u5DF2\u81EA\u52A8\u53BB\u6389\u56FE\u7247\u91CD\u8BD5\u4E00\u6B21\uFF0C\u672C\u8F6E\u6B63\u6587\u4E0D\u53D7\u5F71\u54CD\uFF09\u3002
|
|
55
55
|
\xB7 \u60F3\u5F7B\u5E95\u907F\u514D\u8FD9\u6B21\u767D\u8BD5\uFF1A\`xzh model vision <id> off\`
|
|
56
|
-
\xB7 \u6216\u6539\u7528 glm-4v / qwen-vl / gpt-4o / claude / gemini \u7B49\u652F\u6301\u89C6\u89C9\u7684\u6A21\u578B`;if(o===400){let a=
|
|
56
|
+
\xB7 \u6216\u6539\u7528 glm-4v / qwen-vl / gpt-4o / claude / gemini \u7B49\u652F\u6301\u89C6\u89C9\u7684\u6A21\u578B`;if(o===400){let a=n.replace(/^4\d\d\s*/,""),l=/model/i.test(a)?"\n\u63D0\u793A\uFF1A\u591A\u534A\u662F\u6A21\u578B\u540D\u4E0D\u88AB\u8BE5\u7AEF\u70B9\u652F\u6301\u3002\u53EF\u7528 `curl <baseUrl>/models` \u67E5\u770B\u7AEF\u70B9\u652F\u6301\u7684\u6A21\u578B id\uFF0C\u518D\u7528 `xzh model remove <id>` + `xzh model add <provider> <model>` \u66F4\u6B63\u6A21\u578B\u540D\u3002":"";return`\u8BF7\u6C42\u88AB\u62D2\u7EDD\uFF08HTTP 400\uFF09\uFF1A${a}${l}`}return s.includes("fetch failed")||s.includes("network")?`\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25\uFF1A${n}`:n}function gs(r){return new Promise(e=>setTimeout(e,r))}var ra=3,sa=r=>r*600,ft=class extends Error{constructor(){super("\u7EED\u4F20\u524D\u7F00\u4E0E\u5DF2\u8F93\u51FA\u5185\u5BB9\u4E0D\u4E00\u81F4"),this.name="ResumeMismatchError"}},Mn=class{text="";reasoning="";toolCalls=0;get hasDeliveredContent(){return this.text.length>0||this.reasoning.length>0}},In=class{constructor(e){this.previous=e;this.settled=e.length===0}collected="";settled;accept(e){if(this.settled)return e;if(this.collected+=e,this.collected.length<this.previous.length)return null;if(!this.collected.startsWith(this.previous))throw new ft;this.settled=!0;let n=this.collected.slice(this.previous.length);return this.collected="",n.length>0?n:null}finish(){if(!this.settled)throw new ft}},Dn=class{constructor(e){this.ledger=e;this.textPrefix=new In(e.text),this.suppressReasoning=e.reasoning.length>0,this.remainingToolCallSkips=e.toolCalls}textPrefix;suppressReasoning;remainingToolCallSkips;text(e){let n=this.textPrefix.accept(e);return n&&(this.ledger.text+=n),n}reasoning(e){return this.suppressReasoning?null:(this.ledger.reasoning+=e,e)}toolCall(){return this.remainingToolCallSkips>0?(this.remainingToolCallSkips--,!1):(this.ledger.toolCalls++,!0)}finish(){this.textPrefix.finish()}};async function*Ze(r,e,n={}){let s=n.maxAttempts??ra,i=n.backoffMs??sa,o=new Mn,a;for(let l=1;l<=s;l++){let c=new Dn(o);try{yield*e(c),c.finish();return}catch(u){if(u instanceof ft)throw a??u;if(a=u,!(!r.signal?.aborted&&l<s&&o.toolCalls===0&&En(u)))throw u;let d=o.hasDeliveredContent;r.onRetry?.(l,s,u instanceof Error?u:new Error(String(u)),{resumed:d}),await gs(i(l))}}throw a}var ia=[/^o1(-|$)/i,/^o3-mini/i,/deepseek-(chat|reasoner|coder)/i,/glm-4-(plus|air|flash|long)/i,/qwen-(max|plus|turbo)/i,/llama-?3/i,/mixtral|mistral-(small|medium|large|nemo)/i,/command-r(?!\+)/i],oa=[/gpt-4o|gpt-4\.1|gpt-4-turbo|gpt-4-vision|chatgpt-4o/i,/^o3(-|$)|^o4(-|$)/i,/claude/i,/gemini/i,/glm-4v|glm-4\.\dv/i,/qwen[^/]*vl/i,/llava|bakllava|minicpm-v|pixtral|internvl|moondream|gemma-?3/i,/grok-[^/]*vision/i];function On(r){let e=r.trim();if(!e)return!1;for(let n of ia)if(n.test(e))return!1;for(let n of oa)if(n.test(e))return!0;return!1}var aa="custom";function Be(r){return typeof r.vision=="boolean"?r.vision:r.provider===aa?!0:On(r.model)}var la=new Set(["image/png","image/jpeg","image/gif","image/webp"]);function $s(r){let e=r.trim().toLowerCase();return la.has(e)?e:"image/png"}var _e="\u8BF7\u770B\u8FD9\u5F20\u56FE\u7247\u3002";var Et=class{id;model;client;maxTokens;constructor(e){this.id=e.id,this.model=e.model,this.maxTokens=e.maxTokens??8192,this.client=new vs.default({apiKey:e.apiKey,baseURL:e.baseUrl,maxRetries:0})}async*chat(e){yield*Ze(e,n=>this.streamOnce(e,n))}async*streamOnce(e,n){let{system:s,messages:i}=ca(e.messages),o=e.tools.length>0?e.tools.map(d=>({name:d.name,description:d.description,input_schema:d.parameters})):void 0,a=await this.client.messages.create({model:this.model,max_tokens:this.maxTokens,system:s||void 0,messages:i,tools:o,temperature:e.temperature,stream:!0},{signal:e.signal}),l=new Map,c,u,p=!1;for await(let d of a)switch(d.type){case"message_start":{let h=d.message?.usage?.input_tokens;typeof h=="number"&&(c={inputTokens:h});break}case"content_block_start":{let h=d.content_block;h.type==="tool_use"&&(p=!0,l.set(d.index,{id:h.id,name:h.name,json:""}));break}case"content_block_delta":{let h=d.delta;if(h.type==="text_delta"&&h.text){let m=n.text(h.text);m&&(yield{type:"text",text:m})}else if(h.type==="input_json_delta"){let m=l.get(d.index);m&&(m.json+=h.partial_json??"")}else if(h.type==="thinking_delta"){let m=h.thinking;if(m){let f=n.reasoning(m);f&&(yield{type:"reasoning",text:f})}}break}case"message_delta":{d.delta?.stop_reason&&(u=d.delta.stop_reason);let h=d.usage?.output_tokens;typeof h=="number"&&(c={...c??{},outputTokens:h});break}default:break}for(let d of l.values())d.name&&n.toolCall()&&(yield{type:"tool_call",toolCall:{id:d.id,name:d.name,arguments:d.json||"{}"}});yield{type:"done",finishReason:p?"tool_calls":u,usage:c}}};function ca(r){let e=[],n=[];for(let s of r){if(s.role==="system"){e.push(s.content);continue}if(s.role==="user"){if(s.images&&s.images.length>0){let i=[{type:"text",text:s.content||_e}];for(let o of s.images)i.push({type:"image",source:{type:"base64",media_type:$s(o.mimeType),data:o.data}});n.push({role:"user",content:i});continue}n.push({role:"user",content:s.content});continue}if(s.role==="assistant"){if(s.toolCalls&&s.toolCalls.length>0){let i=[];s.content&&i.push({type:"text",text:s.content});for(let o of s.toolCalls)i.push({type:"tool_use",id:o.id,name:o.name,input:da(o.arguments)});n.push({role:"assistant",content:i})}else n.push({role:"assistant",content:s.content});continue}if(s.role==="tool"){let i={type:"tool_result",tool_use_id:s.toolCallId??"",content:s.content},o=n[n.length-1];o&&o.role==="user"&&Array.isArray(o.content)&&o.content.every(a=>a.type==="tool_result")?o.content.push(i):n.push({role:"user",content:[i]})}}return{system:e.join(`
|
|
57
57
|
|
|
58
|
-
`),messages:
|
|
58
|
+
`),messages:ua(n)}}function ys(r){return typeof r=="string"?[{type:"text",text:r}]:r}function ua(r){let e=[];for(let n of r){let s=e[e.length-1];if(s&&s.role===n.role){n.role==="user"?e[e.length-1]={role:"user",content:[...ys(s.content),...ys(n.content)]}:e[e.length-1]=n;continue}e.push(n)}for(;e.length>0&&e[0].role!=="user";)e.shift();return e}function da(r){try{let e=JSON.parse(r||"{}");return typeof e=="object"&&e!==null?e:{}}catch{return{}}}var xe=require("@google/generative-ai");var Pt=class{id;model;apiKey;baseUrl;constructor(e){this.id=e.id,this.model=e.model,this.apiKey=e.apiKey,this.baseUrl=e.baseUrl}async*chat(e){yield*Ze(e,n=>this.streamOnce(e,n))}async*streamOnce(e,n){let s=new xe.GoogleGenerativeAI(this.apiKey),{system:i,contents:o}=ma(e.messages),a=e.tools.length>0?[{functionDeclarations:e.tools.map(ga)}]:void 0,c=await s.getGenerativeModel({model:this.model,systemInstruction:i||void 0,tools:a,generationConfig:{temperature:e.temperature}},{...this.baseUrl?{baseUrl:this.baseUrl}:{},...e.signal?{signal:e.signal}:{}}).generateContentStream({contents:o}),u,p=!1,d=0;for await(let h of c.stream){if(e.signal?.aborted)break;let m=pa(h);if(m){let g=n.text(m);g&&(yield{type:"text",text:g})}let f=ha(h);for(let g of f)p=!0,n.toolCall()&&(yield{type:"tool_call",toolCall:{id:`gemini_call_${Date.now()}_${d++}`,name:g.name,arguments:JSON.stringify(g.args??{})}});let y=h.usageMetadata;y&&(u={inputTokens:y.promptTokenCount,outputTokens:y.candidatesTokenCount})}yield{type:"done",finishReason:p?"tool_calls":"stop",usage:u}}};function pa(r){try{return r.text()??""}catch{return""}}function ha(r){try{return r.functionCalls?.()??[]}catch{return[]}}function ma(r){let e=[],n=[];for(let s of r){if(s.role==="system"){e.push(s.content);continue}if(s.role==="user"){if(s.images&&s.images.length>0){let i=[{text:s.content||_e}];for(let o of s.images)i.push({inlineData:{mimeType:o.mimeType,data:o.data}});n.push({role:"user",parts:i});continue}n.push({role:"user",parts:[{text:s.content}]});continue}if(s.role==="assistant"){let i=[];s.content&&i.push({text:s.content});for(let o of s.toolCalls??[])i.push({functionCall:{name:o.name,args:ya(o.arguments)}});i.length>0&&n.push({role:"model",parts:i});continue}if(s.role==="tool"){let i={functionResponse:{name:s.name??"unknown",response:{result:s.content}}},o=n[n.length-1];o&&o.role==="user"&&o.parts?.some(a=>"functionResponse"in a)?o.parts.push(i):n.push({role:"user",parts:[i]})}}return{system:e.join(`
|
|
59
59
|
|
|
60
|
-
`),contents:
|
|
60
|
+
`),contents:fa(n)}}function fa(r){let e=[];for(let n of r){let s=e[e.length-1];if(s&&s.role===n.role){s.parts=[...s.parts??[],...n.parts??[]];continue}e.push({role:n.role,parts:[...n.parts??[]]})}for(;e.length>0&&e[0].role!=="user";)e.shift();return e}function ga(r){return{name:r.name,description:r.description,parameters:Ln(r.parameters)}}function Ln(r){let e={type:$a(r.type)};if(r.description&&(e.description=r.description),r.enum&&(e.enum=r.enum),r.required&&(e.required=r.required),r.items&&(e.items=Ln(r.items)),r.properties){let n={};for(let[s,i]of Object.entries(r.properties))n[s]=Ln(i);e.properties=n}return e}function $a(r){switch(r.toLowerCase()){case"string":return xe.SchemaType.STRING;case"number":return xe.SchemaType.NUMBER;case"integer":return xe.SchemaType.INTEGER;case"boolean":return xe.SchemaType.BOOLEAN;case"array":return xe.SchemaType.ARRAY;default:return xe.SchemaType.OBJECT}}function ya(r){try{let e=JSON.parse(r||"{}");return typeof e=="object"&&e!==null?e:{}}catch{return{}}}var bs=v(require("openai"));var Rt=class{id;model;client;constructor(e){this.id=e.id,this.model=e.model;let n=e.baseUrl||"https://api.openai.com/v1";this.client=new bs.default({apiKey:e.apiKey||"not-needed",baseURL:e.baseUrl,httpAgent:fs(n),maxRetries:0})}async*chat(e){yield*Ze(e,n=>this.streamOnce(e,n))}async*streamOnce(e,n){let s=e.messages.map(va),i=e.tools.length>0?e.tools.map(ba):void 0,o=await this.client.chat.completions.create({model:this.model,messages:s,tools:i,temperature:e.temperature,stream:!0},{signal:e.signal}),a=new Map,l,c,u=!1;for await(let p of o){p.usage&&(c={inputTokens:p.usage.prompt_tokens,outputTokens:p.usage.completion_tokens});let d=p.choices?.[0];if(!d)continue;let h=d.delta;if(h){let m=h.content;if(typeof m=="string"&&m.length>0){let g=n.text(m);g&&(yield{type:"text",text:g})}let f=h.reasoning_content;if(typeof f=="string"&&f.length>0){let g=n.reasoning(f);g&&(yield{type:"reasoning",text:g})}let y=h.tool_calls;if(y){u=!0;for(let g of y){let S=g.index??0,$=a.get(S)??{id:"",name:"",args:""};g.id&&($.id=g.id),g.function?.name&&($.name+=g.function.name),g.function?.arguments&&($.args+=g.function.arguments),a.set(S,$)}}}d.finish_reason&&(l=d.finish_reason)}for(let[p,d]of a){if(!d.name)continue;let h={id:d.id||`call_${Date.now()}_${p}`,name:d.name,arguments:d.args||"{}"};n.toolCall()&&(yield{type:"tool_call",toolCall:h})}yield{type:"done",finishReason:u?"tool_calls":l,usage:c}}};function va(r){switch(r.role){case"system":return{role:"system",content:r.content};case"user":{if(r.images&&r.images.length>0){let e=[{type:"text",text:r.content||_e}];for(let n of r.images)e.push({type:"image_url",image_url:{url:`data:${n.mimeType};base64,${n.data}`}});return{role:"user",content:e}}return{role:"user",content:r.content}}case"assistant":return r.toolCalls&&r.toolCalls.length>0?{role:"assistant",content:r.content||null,tool_calls:r.toolCalls.map(e=>({id:e.id,type:"function",function:{name:e.name,arguments:e.arguments}}))}:{role:"assistant",content:r.content};case"tool":return{role:"tool",content:r.content,tool_call_id:r.toolCallId??""};default:return{role:"user",content:r.content}}}function ba(r){return{type:"function",function:{name:r.name,description:r.description,parameters:r.parameters}}}function Ee(r){if(!r)return 0;let e=0,n=0;for(let s of r)s.codePointAt(0)<128?e++:n++;return Math.ceil(e/3.5)+n}var xs=1600;function Qe(r){let e=4+Ee(r.content??"");if(r.toolCalls)for(let n of r.toolCalls)e+=10+Ee(n.name)+Ee(n.arguments);return r.images&&r.images.length>0&&(e+=r.images.length*xs),e}function jn(r,e=0){if(r.length===0)return r;let n=Math.max(0,Math.min(e,r.length)),s=-1;for(let i=r.length-1;i>=n;i--)if(r[i]?.images?.length){s=i;break}return r.map((i,o)=>{if(o===s)return i;let a=i.images;if(!a||a.length===0)return i;let c=`
|
|
61
61
|
|
|
62
|
-
[\u56FE\u7247\u5DF2\u7701\u7565\uFF1A${[...new Set(a.map(u=>u.mimeType))].join("\u3001")}${a.length>1?`\uFF0C\u5171 ${a.length} \u5F20`:""}]`;return{...i,content:`${i.content}${c}`,images:void 0}})}function
|
|
62
|
+
[\u56FE\u7247\u5DF2\u7701\u7565\uFF1A${[...new Set(a.map(u=>u.mimeType))].join("\u3001")}${a.length>1?`\uFF0C\u5171 ${a.length} \u5F20`:""}]`;return{...i,content:`${i.content}${c}`,images:void 0}})}function Bn(r,e){if(e<=0)return"";let n=0,s=0,i=0;for(let o of r){let a=o.codePointAt(0)<128,l=n+(a?1:0),c=s+(a?0:1);if(Math.ceil(l/3.5)+c>e)break;n=l,s=c,i+=o.length}return r.slice(0,i)}function xa(r,e){let n=s=>{let i=s?30:50,o=s?r:{...r,images:void 0},a=Qe({...o,content:""});if(a+i>=e)return null;let l=r.content??"",c=e-a-i;if(Ee(l)<=c)return s?r:{...o,content:`${l}
|
|
63
63
|
|
|
64
|
-
[\u56FE\u7247\u5DF2\u7701\u7565\uFF1A\u56E0\u8D85\u51FA\u4E0A\u4E0B\u6587\u9884\u7B97]`};let u=
|
|
64
|
+
[\u56FE\u7247\u5DF2\u7701\u7565\uFF1A\u56E0\u8D85\u51FA\u4E0A\u4E0B\u6587\u9884\u7B97]`};let u=Bn(l,c),p=l.length-u.length;return{...o,content:`${u}
|
|
65
65
|
|
|
66
|
-
\u2026\uFF08\u5185\u5BB9\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD ${
|
|
66
|
+
\u2026\uFF08\u5185\u5BB9\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD ${p} \u5B57\u7B26\u4EE5\u9002\u914D\u6A21\u578B\u4E0A\u4E0B\u6587\u7A97\u53E3\uFF09`}};return n(!0)??n(!1)}function Ss(r){if(r.length<=6)return r;let e=r.length-6;return r.map((n,s)=>{if(s>=e||n.role!=="tool")return n;let i=n.content??"";if(Ee(i)<=600)return n;let o=Math.floor(600*.6),a=600-o,l=Bn(i,o),c=Math.min(i.length-l.length,Math.max(0,a)*3),u=c>0?i.slice(-c):"",p=i.length-l.length-u.length,d=`${l}
|
|
67
67
|
|
|
68
|
-
\u2026\uFF08\u6B64\u5904\u7701\u7565 ${
|
|
68
|
+
\u2026\uFF08\u6B64\u5904\u7701\u7565 ${p} \u5B57\u7B26\u7684\u4E2D\u95F4\u5185\u5BB9\uFF09
|
|
69
69
|
|
|
70
|
-
${u}`;return
|
|
70
|
+
${u}`;return p<=0||d.length>=i.length?n:{...n,content:d}})}function Un(r){return r.map(e=>{let n=e.images;if(!n||n.length===0)return e;let s=[...new Set(n.map(i=>i.mimeType))].join("\u3001");return{...e,content:`${e.content}
|
|
71
71
|
|
|
72
|
-
[\u56FE\u7247\u5DF2\u7701\u7565\uFF1A${s}\uFF08\u5F53\u524D\u6A21\u578B\u4E0D\u652F\u6301\u56FE\u7247\u8F93\u5165\uFF09]`,images:void 0}})}function Rt(n){let e=0;for(;e<n.length;){let r=n[e].role;if(r!=="assistant"&&r!=="tool")break;e++}return e===0?n:n.slice(e)}function Mt(n,e){let r=xs(n),s=r.length,i=0;for(let a=r.length-1;a>=0;a--){let l=Ze(r[a]);if(s<r.length&&i+l>e)break;i+=l,s=a}let o=Rt(r.slice(s));if(o.length===0){for(let a=n.length-1;a>=0;a--)if(n[a].role==="user"){o=[n[a]];break}}if(o.length===1&&Ze(o[0])>e){let l=va(o[0],e);if(l===null)return[];o[0]=l}return o}function Ur(n,e,r){let s=Ss(n,e),i=Ee(r)+4,o=s-i;return Math.max(1,Math.min(Math.max(o,1e3),s))}function Ss(n,e){let r=n&&n>0?n:Ue(e);return Math.floor(r*.8)}function Fr(n,e,r){let s=Ss(n,e);return Ee(r)+4>=s*.5}var Lr={"gpt-4o":128e3,"gpt-4o-mini":128e3,"gpt-4-turbo":128e3,"gpt-4.1":1e6,"gpt-4":8192,"gpt-3.5-turbo":16385,o1:2e5,"o1-mini":128e3,"o3-mini":2e5,"claude-sonnet-4-5":2e5,"claude-opus-4-1":2e5,"claude-3-5-haiku-latest":2e5,"claude-3-5-sonnet-latest":2e5,"deepseek-chat":64e3,"deepseek-reasoner":64e3,"gemini-2.0-flash":1e6,"gemini-2.5-pro":1e6,"gemini-2.5-flash":1e6,"glm-4-plus":128e3,"glm-4-air":128e3,"glm-4-flash":128e3,"qwen-max":32e3,"qwen-plus":128e3,"qwen2.5-coder-32b-instruct":32e3,"llama-3.3-70b-versatile":128e3,"qwen2.5-coder":32e3,"llama3.1":128e3,"deepseek-coder-v2":128e3},ba=[[/claude/i,2e5],[/gemini/i,1e6],[/deepseek/i,64e3],[/gpt-4\.1|gpt-4o|gpt-4-turbo/i,128e3],[/\bo[13]\b/i,128e3],[/gpt-4\b/i,8192],[/gpt-3\.5/i,16385],[/qwen|glm|yi-|moonshot|kimi/i,128e3],[/llama|mistral|mixtral|gemma|phi-|command-r/i,128e3]];function Ue(n){let e=n.trim();if(!e)return 32e3;let r=e.toLowerCase(),s=Lr[r];if(s)return s;let i=r.replace(/[-_]?(latest|preview|stable|beta|exp)$/,"").replace(/[-_]\d{6,8}$/,"").replace(/[:@].*$/,""),o=Lr[i]??Object.entries(Lr).find(([a])=>i.startsWith(a)||i===a)?.[1];if(o)return o;for(let[a,l]of ba)if(a.test(i))return l;return 32e3}function xe(n){return!Number.isFinite(n)||n<=0?"\u672A\u8BBE\u7F6E":String(Math.floor(n))}var It=class{ratio=1;samples=0;observe(e,r){if(!Number.isFinite(e)||!Number.isFinite(r)||e<=0||r<=0)return;let s=r/e;s<.1||s>8||(this.ratio=this.samples===0?s:this.ratio*(1-.3)+s*.3,this.samples++)}factor(){return this.samples<2?1:Math.min(Math.max(this.ratio,1),4)}get observationCount(){return this.samples}reset(){this.ratio=1,this.samples=0}};function zr(n,e){return e>1?Math.max(1,Math.floor(n/e)):n}var ws=new Map;function Jr(n){let e=n||"",r=ws.get(e);if(r)return r;let s=new It;return ws.set(e,s),s}var Se=[{id:"deepseek",label:"DeepSeek \u6DF1\u5EA6\u6C42\u7D22",kind:"openai",defaultBaseUrl:"https://api.deepseek.com/v1",defaultModel:"deepseek-chat",models:["deepseek-chat","deepseek-reasoner"],requiresApiKey:!0,envKey:"DEEPSEEK_API_KEY",apiKeyHint:"sk-..."},{id:"anthropic",label:"Anthropic Claude",kind:"anthropic",defaultModel:"claude-sonnet-4-5",models:["claude-sonnet-4-5","claude-opus-4-1","claude-3-5-haiku-latest"],requiresApiKey:!0,envKey:"ANTHROPIC_API_KEY",apiKeyHint:"sk-ant-..."},{id:"openai",label:"OpenAI",kind:"openai",defaultBaseUrl:"https://api.openai.com/v1",defaultModel:"gpt-4o",models:["gpt-4o","gpt-4o-mini","o4-mini"],requiresApiKey:!0,envKey:"OPENAI_API_KEY",apiKeyHint:"sk-..."},{id:"gemini",label:"Google Gemini",kind:"gemini",defaultModel:"gemini-2.0-flash",models:["gemini-2.0-flash","gemini-2.5-pro","gemini-2.5-flash"],requiresApiKey:!0,envKey:"GEMINI_API_KEY",apiKeyHint:"AIza..."},{id:"glm",label:"\u667A\u8C31 GLM",kind:"openai",defaultBaseUrl:"https://open.bigmodel.cn/api/paas/v4",defaultModel:"glm-4-plus",models:["glm-4-plus","glm-4-air","glm-4-flash"],requiresApiKey:!0,envKey:"GLM_API_KEY"},{id:"qwen",label:"\u901A\u4E49\u5343\u95EE Qwen",kind:"openai",defaultBaseUrl:"https://dashscope.aliyuncs.com/compatible-mode/v1",defaultModel:"qwen-max",models:["qwen-max","qwen-plus","qwen2.5-coder-32b-instruct"],requiresApiKey:!0,envKey:"DASHSCOPE_API_KEY"},{id:"groq",label:"Groq",kind:"openai",defaultBaseUrl:"https://api.groq.com/openai/v1",defaultModel:"llama-3.3-70b-versatile",models:["llama-3.3-70b-versatile","qwen-2.5-coder-32b"],requiresApiKey:!0,envKey:"GROQ_API_KEY",apiKeyHint:"gsk_..."},{id:"ollama",label:"Ollama\uFF08\u672C\u5730\uFF09",kind:"openai",defaultBaseUrl:"http://localhost:11434/v1",defaultModel:"qwen2.5-coder",models:["qwen2.5-coder","llama3.1","deepseek-coder-v2"],requiresApiKey:!1,envKey:"OLLAMA_API_KEY"},{id:"custom",label:"\u81EA\u5B9A\u4E49\uFF08OpenAI \u517C\u5BB9\u7AEF\u70B9\uFF09",kind:"openai",defaultModel:"",models:[],requiresApiKey:!1,requiresBaseUrl:!0,envKey:"XUANZHU_API_KEY"}];function we(n){return Se.find(e=>e.id===n)}function Dt(n,e){return e||(n.envKey?process.env[n.envKey]??"":"")}function Ts(n,e){return e||n.defaultBaseUrl}function Kr(n,e){let r=[],s=we(e.provider);if(!s)return[`\u6A21\u578B ${e.id} \u4F7F\u7528\u4E86\u672A\u77E5 provider\uFF1A${e.provider}`];let i=n.providers[e.provider]??{};return s.requiresApiKey&&!Dt(s,e.apiKey??i.apiKey)&&r.push(`\u6A21\u578B ${e.id} \u7F3A\u5C11 API Key\uFF0C\u8BF7\u8FD0\u884C \`xzh model\` \u6216\u8BBE\u7F6E\u73AF\u5883\u53D8\u91CF ${s.envKey}`),s.requiresBaseUrl&&!Ts(s,e.baseUrl??i.baseUrl)&&r.push(`\u6A21\u578B ${e.id} \u9700\u8981\u914D\u7F6E baseUrl`),e.model||r.push(`\u6A21\u578B ${e.id} \u672A\u6307\u5B9A\u6A21\u578B\u540D`),r}function As(n){let e=U(n);return e.length===0?["\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\uFF0C\u8BF7\u8FD0\u884C `xzh model add` \u6DFB\u52A0"]:e.flatMap(r=>Kr(n,r))}function Ot(n,e){let r=e?.provider??n.provider,s=we(r);if(!s)throw new Error(`\u672A\u77E5\u7684 provider\uFF1A${r}`);let i=n.providers[r]??{},o=Dt(s,e?.apiKey??i.apiKey),a=Ts(s,e?.baseUrl??i.baseUrl),l=e?.model||i.model||n.model||s.defaultModel;if(s.requiresBaseUrl&&!a)throw new Error(`provider "${s.label}" \u9700\u8981\u914D\u7F6E API \u7AEF\u70B9 baseUrl\u3002\u8FD0\u884C \`xzh model\` \u8865\u9F50\u540E\u518D\u8BD5\u3002`);if(s.requiresApiKey&&!o)throw new Error(`provider "${s.label}" \u7F3A\u5C11 API Key\u3002\u8FD0\u884C \`xzh model\` \u8FDB\u884C\u914D\u7F6E\uFF0C\u6216\u8BBE\u7F6E\u73AF\u5883\u53D8\u91CF ${s.envKey}\u3002`);if(!l)throw new Error(`provider "${s.label}" \u672A\u6307\u5B9A\u6A21\u578B\u3002\u8FD0\u884C \`xzh model\` \u9009\u62E9\u6A21\u578B\u3002`);switch(s.kind){case"anthropic":return new Et({id:s.id,apiKey:o,baseUrl:a,model:l});case"gemini":return new _t({id:s.id,apiKey:o,baseUrl:a,model:l});case"openai":default:return new Pt({id:s.id,apiKey:o,baseUrl:a,model:l})}}var nt=v(require("fs")),Gs=v(require("os")),cn=v(require("path"));var K="0.4.2";var _e=9317,Hr=1e4,qr=process.env.XZH_DEVICE_PLUGIN_VERSION?.trim()||"1.110.0",ks=K;function Wr(){return`${Date.now()}_${Math.random()}`}function Es(n){let e=Wr();return n>=629?JSON.stringify({message_id:e,data:"ok",version:qr,debug:!1,type:"hello"}):JSON.stringify({message_id:e,data:"\u8FDE\u63A5\u6210\u529F",debug:!1,type:"hello"})}function _s(n){return JSON.stringify({type:"pong",data:n})}function Ps(n,e,r){return JSON.stringify({type:"command",message_id:Wr(),data:{command:n,id:e,name:e,script:r}})}function Gr(n,e={}){return JSON.stringify({type:"command",message_id:Wr(),data:{command:n,...e}})}function Rs(n){try{let e=JSON.parse(n);if(!e||typeof e!="object")return null;let r=typeof e.type=="string"?e.type:"";return r?{type:r,data:e.data}:null}catch{return null}}function Xr(n){let e=n??{},r=typeof e.device_name=="string"&&e.device_name.trim()?e.device_name.trim():"",s=typeof e.app_version_code=="number"&&Number.isFinite(e.app_version_code)?e.app_version_code:0;return{name:r,appVersionCode:s}}function Ms(n){if(typeof n=="string")return n;let e=n??{};return typeof e.log=="string"?e.log:""}var Re=v(require("fs")),Js=v(require("http")),et=v(require("os")),Ce=v(require("path")),$t=require("ws");var Bs=v(require("net"));var Yr=n=>n,Lt=n=>Yr(n);function Vr(n){return Buffer.from(Yr(n))}function Ds(n){return Buffer.concat(n.map(Yr))}var Qe=8,Os=1,xa=2,Is=64*1024*1024;var fe=6347,X=7347,ft=process.env.XZH_AUTOJS6_EXT_VERSION?.trim()||"1.0.13";function Sa(n,e){let r=Buffer.alloc(Qe);return r.writeInt32BE(n,0),r.writeInt32BE(e,4),r}function Nt(n){let e=Buffer.from(n,"utf8");return Ds([Sa(e.length,Os),e])}var Fe=class{buffer=Buffer.alloc(0);push(e){let r=Vr(e);this.buffer=this.buffer.length===0?r:Ds([this.buffer,r]);let s=[];for(;this.buffer.length>=Qe;){let i=this.buffer.readInt32BE(0),o=this.buffer.readInt32BE(4);if(i<0||i>Is)throw new Error(`AutoJs6 \u5E27\u957F\u5EA6\u975E\u6CD5\uFF1A${i}\uFF08\u4E0A\u9650 ${Is}\uFF09\uFF0C\u8FDE\u63A5\u53EF\u80FD\u4E0D\u662F AutoJs6 \u534F\u8BAE`);if(this.buffer.length<Qe+i)break;let a=Vr(this.buffer.subarray(Qe,Qe+i));this.buffer=Vr(this.buffer.subarray(Qe+i)),o===Os?s.push({kind:"json",payload:a.toString("utf8")}):o===xa&&s.push({kind:"bytes",payload:a})}return s}get pendingBytes(){return this.buffer.length}};function jt(n){try{let e=JSON.parse(n);if(!e||typeof e!="object"||typeof e.type!="string"||!e.type)return null;let r=e.data&&typeof e.data=="object"?e.data:{};return{type:e.type,data:r}}catch{return null}}function Ls(n=ft){return JSON.stringify({type:"hello",data:{extensionVersion:n}})}function Ns(n){let e=s=>typeof s=="string"?s:"",r=s=>typeof s=="number"&&Number.isFinite(s)?s:0;return{deviceName:e(n.device_name).trim(),appVersion:e(n.app_version).trim(),appVersionCode:r(n.app_version_code),deviceId:e(n.device_id).trim()}}function Pe(n,e={}){return JSON.stringify({type:"command",data:{command:n,...e}})}function Bt(n){if(n.type!=="log")return null;let e=n.data.log;return typeof e=="string"?e:null}function Ut(n){let e=n.data["\xA0cmd\xA0"];return typeof e=="string"?e:null}var wa=2e3,Zr=3,Ca=15e3,js=5e3,Ft=class{host;port;options;socket=null;decoder=new Fe;active=!1;connected=!1;connecting=!1;retryTimer=null;attempt=0;quickFailures=0;connectedAt=0;constructor(e){this.options=e,this.host=e.host.trim(),this.port=e.port??X}getAddress(){return`${this.host}:${this.port}`}isConnected(){return this.connected}isRetrying(){return this.active}start(){this.active||(this.active=!0,this.attempt=0,this.quickFailures=0,this.connectOnce())}close(){this.active=!1,this.retryTimer&&(clearTimeout(this.retryTimer),this.retryTimer=null);let e=this.socket,r=this.connected;if(this.socket=null,this.connected=!1,this.connecting=!1,e){e.removeAllListeners();try{e.destroy()}catch{}}r&&this.options.onDisconnect?.()}runScript(e,r,s){return this.sendJson(Pe("run",{id:r,name:s,script:e}))}saveScript(e,r){return this.sendJson(Pe("save",{name:r,script:e}))}stopScript(e){return this.sendJson(Pe("stop",{id:e}))}stopAllScripts(){return this.sendJson(Pe("stopAll"))}sendJson(e){let r=this.socket;if(!this.connected||!r)return!1;try{return r.write(Lt(Nt(e))),!0}catch{return!1}}connectOnce(){if(!this.active||this.socket||this.connecting)return;this.connecting=!0,this.decoder=new Fe;let e=new Bs.Socket;this.socket=e,e.setNoDelay(!0),e.setKeepAlive(!0,15e3);let r=setTimeout(()=>{this.connected||(this.options.onStatus?.(`\u8FDE\u63A5 ${this.getAddress()} \u8D85\u65F6\uFF08${js} ms\uFF09`),e.destroy())},js),s=()=>clearTimeout(r);e.once("close",s),e.connect(this.port,this.host),e.on("connect",()=>{s(),this.connecting=!1,this.connected=!0,this.connectedAt=Date.now(),this.attempt=0,this.sendHello(),this.options.onStatus?.(`\u5DF2\u8FDE\u63A5\u624B\u673A ${this.getAddress()}\uFF08AutoJs6 \u670D\u52A1\u5668\u6A21\u5F0F\uFF09`),this.options.onConnect?.()}),e.on("data",i=>this.handleData(i)),e.on("error",i=>{this.options.onStatus?.(i.code==="ECONNREFUSED"?`\u8FDE\u63A5\u88AB\u62D2\u7EDD\uFF08${this.getAddress()}\uFF09\uFF1A\u624B\u673A\u4E0A AutoJs6 \u7684\u300C\u670D\u52A1\u5668\u6A21\u5F0F\u300D\u6CA1\u5F00\uFF0C\u6216\u5730\u5740\u4E0D\u5BF9`:`\u8FDE\u63A5\u51FA\u9519\uFF1A${i.message}`)}),e.on("close",()=>this.handleDisconnect())}sendHello(){this.sendJson(JSON.stringify({type:"hello",data:{device_name:`xzh ${K}`,app_version:K,app_version_code:0,device_id:"",extensionVersion:ft}}))}handleData(e){let r;try{r=this.decoder.push(e)}catch(s){this.options.onStatus?.(`${this.getAddress()} \u8FD4\u56DE\u7684\u6570\u636E\u4E0D\u662F AutoJs6 \u534F\u8BAE\uFF1A${s instanceof Error?s.message:String(s)}`),this.active=!1,this.close();return}for(let s of r){if(s.kind!=="json")continue;let i=jt(String(s.payload));if(!i)continue;let o=Bt(i);if(o!==null){this.options.onLog?.(o);continue}let a=Ut(i);a!==null&&this.options.onPhoneCommand?.(a,i.data)}}handleDisconnect(){let e=this.connected,r=this.connectedAt>0?Date.now()-this.connectedAt:Number.MAX_SAFE_INTEGER;if(this.socket=null,this.connected=!1,this.connecting=!1,e&&this.options.onDisconnect?.(),!!this.active){if(e&&r<wa){if(this.quickFailures++,this.quickFailures>=Zr){this.active=!1,this.options.onStatus?.(`\u4E0E ${this.getAddress()} \u8FDE\u7EED ${this.quickFailures} \u6B21\u521A\u8FDE\u4E0A\u5C31\u65AD\u5F00\uFF0C\u5DF2\u505C\u6B62\u91CD\u8FDE\u3002\u8BF7\u786E\u8BA4\uFF1A\u2460 \u624B\u673A\u4E0A AutoJs6 \u6253\u5F00\u300C\u8FDE\u63A5\u7535\u8111 \u2192 \u670D\u52A1\u5668\u6A21\u5F0F\u300D\uFF1B\u2461 \u5730\u5740\u4E0E\u7AEF\u53E3\uFF08\u9ED8\u8BA4 7347\uFF09\u6B63\u786E\uFF1B\u2462 xzh \u4E0E\u624B\u673A\u5728\u540C\u4E00\u7F51\u7EDC\uFF08\u624B\u673A\u672C\u673A\u8FD0\u884C\u65F6\u7528 127.0.0.1\uFF09\u3002`);return}}else e&&(this.quickFailures=0);if(!e&&this.quickFailures<Zr&&(this.quickFailures++,this.quickFailures>=Zr)){this.active=!1,this.options.onStatus?.(`\u8FDE\u63A5 ${this.getAddress()} \u5931\u8D25 ${this.quickFailures} \u6B21\uFF0C\u5DF2\u505C\u6B62\u91CD\u8FDE\u3002\u8BF7\u786E\u8BA4\u624B\u673A\u4E0A AutoJs6 \u5DF2\u6253\u5F00\u300C\u8FDE\u63A5\u7535\u8111 \u2192 \u670D\u52A1\u5668\u6A21\u5F0F\u300D\uFF08\u9ED8\u8BA4\u7AEF\u53E3 ${X}\uFF09\u3002`);return}this.scheduleReconnect()}}scheduleReconnect(){let e=this.options.reconnectDelayMs??1500;if(e<=0||this.retryTimer)return;let r=Math.min(e*2**this.attempt,Ca);this.attempt++,this.retryTimer=setTimeout(()=>{this.retryTimer=null,this.options.onStatus?.(`\u6B63\u5728\u91CD\u8FDE ${this.getAddress()}\u2026\uFF08\u7B2C ${this.attempt} \u6B21\uFF09`),this.connectOnce()},r)}};var Fs=v(require("net"));var Us=1e4,gt=class{options;port;server=null;connections=new Map;constructor(e={}){this.options=e,this.port=e.port??fe}isRunning(){return this.server!==null}getPort(){return this.port}start(){if(this.server)return Promise.resolve();let e=Fs.createServer(r=>this.handleConnection(r));return new Promise((r,s)=>{let i=a=>{if(e.removeListener("listening",o),a.code==="EADDRINUSE"){s(new Error(`\u7AEF\u53E3 ${this.port} \u5DF2\u88AB\u5360\u7528 \u2014\u2014 \u8FD9\u662F AutoJs6\u300C\u5BA2\u6237\u7AEF\u6A21\u5F0F\u300D\u7684\u7AEF\u53E3\u3002\u4E24\u79CD\u53EF\u80FD\uFF1A\u2460 VSCode \u91CC\u7684 AutoJs6 \u6269\u5C55\uFF08003.autojs6-vscode-ext\uFF09\u6B63\u5728\u8FD0\u884C\uFF0C\u8BF7\u5728 VSCode \u91CC\u7981\u7528\u5B83\uFF1B\u2461 \u5DF2\u7ECF\u6709\u53E6\u4E00\u4E2A xzh \u8BBE\u5907\u6865\u5728\u8DD1\u3002\u540C\u4E00\u4E2A\u7AEF\u53E3\u4E0A\u7684\u4E24\u4E2A\u670D\u52A1\u4F1A\u4E92\u76F8\u62A2\u624B\u673A\u8FDE\u63A5\u3002`));return}s(a)},o=()=>{e.removeListener("error",i),e.on("error",a=>this.options.onStatus?.(`AutoJs6 \u76D1\u542C\u51FA\u9519\uFF1A${a.message}`)),r()};e.once("error",i),e.once("listening",o),e.listen(this.port,"0.0.0.0")}).then(()=>{this.server=e,this.options.onStatus?.(`AutoJs6 \u76D1\u542C\u5DF2\u5C31\u7EEA\uFF08\u7AEF\u53E3 ${this.port}\uFF09\uFF1A\u624B\u673A\u4E0A\u300C\u8FDE\u63A5\u7535\u8111 \u2192 \u5BA2\u6237\u7AEF\u6A21\u5F0F\u300D\u586B\u672C\u673A IP \u5373\u53EF`)})}async stop(){for(let r of[...this.connections.values()])this.dispose(r);this.connections.clear();let e=this.server;this.server=null,e&&await new Promise(r=>e.close(()=>r()))}listDevices(){return[...this.connections.values()].map(e=>e.peer).filter(e=>e!==null)}sendTo(e,r){let s=this.connections.get(e);return!s||!s.peer?!1:this.write(s,r)}broadcast(e){let r=0;for(let s of this.connections.values())s.peer&&this.write(s,e)&&r++;return r}closeDevice(e){let r=this.connections.get(e);r&&this.dispose(r)}handleConnection(e){let r=e.remoteAddress??"unknown",i=`${r.startsWith("::ffff:")?r.slice(7):r}:${e.remotePort??0}`,o={socket:e,id:i,decoder:new Fe,peer:null,handshakeTimer:setTimeout(()=>{o.peer||(this.options.onStatus?.(`\u8FDE\u63A5 ${i} \u672A\u5728 ${Us/1e3} \u79D2\u5185\u63E1\u624B\uFF0C\u5DF2\u65AD\u5F00\u3002`),this.dispose(o))},Us)};this.connections.set(i,o),e.setNoDelay(!0),e.setKeepAlive(!0,15e3),e.on("data",a=>this.handleData(o,a)),e.on("error",a=>{this.options.onStatus?.(`\u4E0E ${i} \u7684\u8FDE\u63A5\u51FA\u9519\uFF1A${a.message}`),this.dispose(o)}),e.on("close",()=>this.dispose(o))}handleData(e,r){let s;try{s=e.decoder.push(r)}catch(i){this.options.onStatus?.(`${e.id} \u53D1\u6765\u7684\u6570\u636E\u4E0D\u662F AutoJs6 \u534F\u8BAE\uFF1A${i instanceof Error?i.message:String(i)}`),this.dispose(e);return}for(let i of s){if(i.kind!=="json")continue;let o=jt(String(i.payload));if(!o)continue;if(o.type==="hello"){this.handleHello(e,o.data,String(i.payload));continue}let a=Bt(o);if(a!==null&&e.peer){this.options.onLog?.(e.peer,a);continue}let l=Ut(o);l!==null&&e.peer&&this.options.onPhoneCommand?.(e.peer,l,o.data)}}handleHello(e,r,s){let i=Ns(r);e.peer={id:e.id,name:i.deviceName||e.id,appVersion:i.appVersion,appVersionCode:i.appVersionCode},clearTimeout(e.handshakeTimer);let o=Ls(),a=this.write(e,o);this.options.onStatus?.(`\u63E1\u624B\uFF1A${e.peer.name}\uFF08AutoJs6 ${i.appVersion||"?"} / versionCode ${i.appVersionCode}\uFF09${a?"":"\u2014\u2014\u26A0 \u5E94\u7B54\u53D1\u9001\u5931\u8D25"}\uFF5C\u56DE\u62A5\u534F\u8BAE\u7248\u672C ${ft}`),this.options.onStatus?.(` \u624B\u673A\u539F\u59CB hello\uFF1A${Ta(s,240)}`),this.options.onAttach?.(e.peer)}write(e,r){if(e.socket.destroyed)return!1;try{return e.socket.write(Lt(Nt(r))),!0}catch{return!1}}dispose(e){clearTimeout(e.handshakeTimer);let r=this.connections.delete(e.id),s=e.peer;e.peer=null;try{e.socket.destroy()}catch{}r&&s&&this.options.onDetach?.(s)}};function Ta(n,e){let r=n.replace(/\s+/g," ").trim();return r.length>e?`${r.slice(0,e)}\u2026`:r}function Qr(n){let e=n.scale??.3,r=n.quality??55,s=`http://${n.host}:${n.port}/shot`;return["// \u7531 xzh \u751F\u6210\uFF1A\u622A\u56FE\u5E76\u6309\u6388\u6743\u6846\u3001\u56DE\u4F20\u5230\u6865\uFF08\u52FF\u624B\u6539\uFF0C\u6A21\u677F\u89C1 src/device/screenshot.ts\uFF09","try {"," auto.waitFor(8000);"," var clicked = false;"," var auth = threads.start(function () {",' var btn = text("\u7ACB\u5373\u5F00\u59CB").findOne(3000);',' if (!btn) btn = text("\u5F00\u59CB\u73B0\u5728").findOne(300);',' if (!btn) btn = text("\u5141\u8BB8").findOne(300);'," if (!btn) btn = textMatches(/START NOW|Allow/i).findOne(300);"," if (btn) { clicked = true; btn.click(); }"," });",' console.log("\u3010\u622A\u56FE\u3011\u7B49\u5F85\u5C4F\u5E55\u6388\u6743\u2026");'," var img = captureScreen();"," auth.join(1500);",' if (!img) { console.log("\u3010\u622A\u56FE\u3011\u672A\u62FF\u5230\u56FE\u50CF\uFF08\u6388\u6743\u88AB\u62D2\u6216\u8D85\u65F6\uFF0C\u70B9\u5230\u6388\u6743\u6846=" + clicked + "\uFF09"); exit(); }',` var small = images.scale(img, ${e}, ${e});`,` var b64 = images.toBase64(small, "jpg", ${r});`,` var r = http.post("${s}", b64, { contentType: "text/plain" });`,' console.log("\u3010\u622A\u56FE\u3011" + img.width + "x" + img.height + " \u2192 " + small.width + "x" + small.height + "\uFF0C\u56DE\u4F20=" + r.statusCode);',"} catch (e) {",' console.log("\u3010\u622A\u56FE\u3011\u5931\u8D25\uFF1A" + e);',"}",""].join(`
|
|
73
|
-
`)}var
|
|
72
|
+
[\u56FE\u7247\u5DF2\u7701\u7565\uFF1A${s}\uFF08\u5F53\u524D\u6A21\u578B\u4E0D\u652F\u6301\u56FE\u7247\u8F93\u5165\uFF09]`,images:void 0}})}function Mt(r){let e=0;for(;e<r.length;){let n=r[e].role;if(n!=="assistant"&&n!=="tool")break;e++}return e===0?r:r.slice(e)}function It(r,e){let n=Ss(r),s=n.length,i=0;for(let a=n.length-1;a>=0;a--){let l=Qe(n[a]);if(s<n.length&&i+l>e)break;i+=l,s=a}let o=Mt(n.slice(s));if(o.length===0){for(let a=r.length-1;a>=0;a--)if(r[a].role==="user"){o=[r[a]];break}}if(o.length===1&&Qe(o[0])>e){let l=xa(o[0],e);if(l===null)return[];o[0]=l}return o}function Fn(r,e,n){let s=ws(r,e),i=Ee(n)+4,o=s-i;return Math.max(1,Math.min(Math.max(o,1e3),s))}function ws(r,e){let n=r&&r>0?r:Ue(e);return Math.floor(n*.8)}function zn(r,e,n){let s=ws(r,e);return Ee(n)+4>=s*.5}var Nn={"gpt-4o":128e3,"gpt-4o-mini":128e3,"gpt-4-turbo":128e3,"gpt-4.1":1e6,"gpt-4":8192,"gpt-3.5-turbo":16385,o1:2e5,"o1-mini":128e3,"o3-mini":2e5,"claude-sonnet-4-5":2e5,"claude-opus-4-1":2e5,"claude-3-5-haiku-latest":2e5,"claude-3-5-sonnet-latest":2e5,"deepseek-chat":64e3,"deepseek-reasoner":64e3,"gemini-2.0-flash":1e6,"gemini-2.5-pro":1e6,"gemini-2.5-flash":1e6,"glm-4-plus":128e3,"glm-4-air":128e3,"glm-4-flash":128e3,"qwen-max":32e3,"qwen-plus":128e3,"qwen2.5-coder-32b-instruct":32e3,"llama-3.3-70b-versatile":128e3,"qwen2.5-coder":32e3,"llama3.1":128e3,"deepseek-coder-v2":128e3},Sa=[[/claude/i,2e5],[/gemini/i,1e6],[/deepseek/i,64e3],[/gpt-4\.1|gpt-4o|gpt-4-turbo/i,128e3],[/\bo[13]\b/i,128e3],[/gpt-4\b/i,8192],[/gpt-3\.5/i,16385],[/qwen|glm|yi-|moonshot|kimi/i,128e3],[/llama|mistral|mixtral|gemma|phi-|command-r/i,128e3]];function Ue(r){let e=r.trim();if(!e)return 32e3;let n=e.toLowerCase(),s=Nn[n];if(s)return s;let i=n.replace(/[-_]?(latest|preview|stable|beta|exp)$/,"").replace(/[-_]\d{6,8}$/,"").replace(/[:@].*$/,""),o=Nn[i]??Object.entries(Nn).find(([a])=>i.startsWith(a)||i===a)?.[1];if(o)return o;for(let[a,l]of Sa)if(a.test(i))return l;return 32e3}function Se(r){return!Number.isFinite(r)||r<=0?"\u672A\u8BBE\u7F6E":String(Math.floor(r))}var Dt=class{ratio=1;samples=0;observe(e,n){if(!Number.isFinite(e)||!Number.isFinite(n)||e<=0||n<=0)return;let s=n/e;s<.1||s>8||(this.ratio=this.samples===0?s:this.ratio*(1-.3)+s*.3,this.samples++)}factor(){return this.samples<2?1:Math.min(Math.max(this.ratio,1),4)}get observationCount(){return this.samples}reset(){this.ratio=1,this.samples=0}};function Jn(r,e){return e>1?Math.max(1,Math.floor(r/e)):r}var Cs=new Map;function Kn(r){let e=r||"",n=Cs.get(e);if(n)return n;let s=new Dt;return Cs.set(e,s),s}var we=[{id:"deepseek",label:"DeepSeek \u6DF1\u5EA6\u6C42\u7D22",kind:"openai",defaultBaseUrl:"https://api.deepseek.com/v1",defaultModel:"deepseek-chat",models:["deepseek-chat","deepseek-reasoner"],requiresApiKey:!0,envKey:"DEEPSEEK_API_KEY",apiKeyHint:"sk-..."},{id:"anthropic",label:"Anthropic Claude",kind:"anthropic",defaultModel:"claude-sonnet-4-5",models:["claude-sonnet-4-5","claude-opus-4-1","claude-3-5-haiku-latest"],requiresApiKey:!0,envKey:"ANTHROPIC_API_KEY",apiKeyHint:"sk-ant-..."},{id:"openai",label:"OpenAI",kind:"openai",defaultBaseUrl:"https://api.openai.com/v1",defaultModel:"gpt-4o",models:["gpt-4o","gpt-4o-mini","o4-mini"],requiresApiKey:!0,envKey:"OPENAI_API_KEY",apiKeyHint:"sk-..."},{id:"gemini",label:"Google Gemini",kind:"gemini",defaultModel:"gemini-2.0-flash",models:["gemini-2.0-flash","gemini-2.5-pro","gemini-2.5-flash"],requiresApiKey:!0,envKey:"GEMINI_API_KEY",apiKeyHint:"AIza..."},{id:"glm",label:"\u667A\u8C31 GLM",kind:"openai",defaultBaseUrl:"https://open.bigmodel.cn/api/paas/v4",defaultModel:"glm-4-plus",models:["glm-4-plus","glm-4-air","glm-4-flash"],requiresApiKey:!0,envKey:"GLM_API_KEY"},{id:"qwen",label:"\u901A\u4E49\u5343\u95EE Qwen",kind:"openai",defaultBaseUrl:"https://dashscope.aliyuncs.com/compatible-mode/v1",defaultModel:"qwen-max",models:["qwen-max","qwen-plus","qwen2.5-coder-32b-instruct"],requiresApiKey:!0,envKey:"DASHSCOPE_API_KEY"},{id:"groq",label:"Groq",kind:"openai",defaultBaseUrl:"https://api.groq.com/openai/v1",defaultModel:"llama-3.3-70b-versatile",models:["llama-3.3-70b-versatile","qwen-2.5-coder-32b"],requiresApiKey:!0,envKey:"GROQ_API_KEY",apiKeyHint:"gsk_..."},{id:"ollama",label:"Ollama\uFF08\u672C\u5730\uFF09",kind:"openai",defaultBaseUrl:"http://localhost:11434/v1",defaultModel:"qwen2.5-coder",models:["qwen2.5-coder","llama3.1","deepseek-coder-v2"],requiresApiKey:!1,envKey:"OLLAMA_API_KEY"},{id:"custom",label:"\u81EA\u5B9A\u4E49\uFF08OpenAI \u517C\u5BB9\u7AEF\u70B9\uFF09",kind:"openai",defaultModel:"",models:[],requiresApiKey:!1,requiresBaseUrl:!0,envKey:"XUANZHU_API_KEY"}];function Ce(r){return we.find(e=>e.id===r)}function Ot(r,e){return e||(r.envKey?process.env[r.envKey]??"":"")}function As(r,e){return e||r.defaultBaseUrl}function Hn(r,e){let n=[],s=Ce(e.provider);if(!s)return[`\u6A21\u578B ${e.id} \u4F7F\u7528\u4E86\u672A\u77E5 provider\uFF1A${e.provider}`];let i=r.providers[e.provider]??{};return s.requiresApiKey&&!Ot(s,e.apiKey??i.apiKey)&&n.push(`\u6A21\u578B ${e.id} \u7F3A\u5C11 API Key\uFF0C\u8BF7\u8FD0\u884C \`xzh model\` \u6216\u8BBE\u7F6E\u73AF\u5883\u53D8\u91CF ${s.envKey}`),s.requiresBaseUrl&&!As(s,e.baseUrl??i.baseUrl)&&n.push(`\u6A21\u578B ${e.id} \u9700\u8981\u914D\u7F6E baseUrl`),e.model||n.push(`\u6A21\u578B ${e.id} \u672A\u6307\u5B9A\u6A21\u578B\u540D`),n}function ks(r){let e=U(r);return e.length===0?["\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\uFF0C\u8BF7\u8FD0\u884C `xzh model add` \u6DFB\u52A0"]:e.flatMap(n=>Hn(r,n))}function gt(r,e){let n=e?.provider??r.provider,s=Ce(n);if(!s)throw new Error(`\u672A\u77E5\u7684 provider\uFF1A${n}`);let i=r.providers[n]??{},o=Ot(s,e?.apiKey??i.apiKey),a=As(s,e?.baseUrl??i.baseUrl),l=e?.model||i.model||r.model||s.defaultModel;if(s.requiresBaseUrl&&!a)throw new Error(`provider "${s.label}" \u9700\u8981\u914D\u7F6E API \u7AEF\u70B9 baseUrl\u3002\u8FD0\u884C \`xzh model\` \u8865\u9F50\u540E\u518D\u8BD5\u3002`);if(s.requiresApiKey&&!o)throw new Error(`provider "${s.label}" \u7F3A\u5C11 API Key\u3002\u8FD0\u884C \`xzh model\` \u8FDB\u884C\u914D\u7F6E\uFF0C\u6216\u8BBE\u7F6E\u73AF\u5883\u53D8\u91CF ${s.envKey}\u3002`);if(!l)throw new Error(`provider "${s.label}" \u672A\u6307\u5B9A\u6A21\u578B\u3002\u8FD0\u884C \`xzh model\` \u9009\u62E9\u6A21\u578B\u3002`);switch(s.kind){case"anthropic":return new Et({id:s.id,apiKey:o,baseUrl:a,model:l});case"gemini":return new Pt({id:s.id,apiKey:o,baseUrl:a,model:l});case"openai":default:return new Rt({id:s.id,apiKey:o,baseUrl:a,model:l})}}var it=v(require("fs")),Xs=v(require("os")),cr=v(require("path"));var K="0.4.4";var Pe=9317,qn=1e4,Wn=process.env.XZH_DEVICE_PLUGIN_VERSION?.trim()||"1.110.0",_s=K;function Gn(){return`${Date.now()}_${Math.random()}`}function Es(r){let e=Gn();return r>=629?JSON.stringify({message_id:e,data:"ok",version:Wn,debug:!1,type:"hello"}):JSON.stringify({message_id:e,data:"\u8FDE\u63A5\u6210\u529F",debug:!1,type:"hello"})}function Ps(r){return JSON.stringify({type:"pong",data:r})}function Rs(r,e,n){return JSON.stringify({type:"command",message_id:Gn(),data:{command:r,id:e,name:e,script:n}})}function Xn(r,e={}){return JSON.stringify({type:"command",message_id:Gn(),data:{command:r,...e}})}function Ms(r){try{let e=JSON.parse(r);if(!e||typeof e!="object")return null;let n=typeof e.type=="string"?e.type:"";return n?{type:n,data:e.data}:null}catch{return null}}function Vn(r){let e=r??{},n=typeof e.device_name=="string"&&e.device_name.trim()?e.device_name.trim():"",s=typeof e.app_version_code=="number"&&Number.isFinite(e.app_version_code)?e.app_version_code:0;return{name:n,appVersionCode:s}}function Is(r){if(typeof r=="string")return r;let e=r??{};return typeof e.log=="string"?e.log:""}var Me=v(require("fs")),Ks=v(require("http")),tt=v(require("os")),Te=v(require("path")),vt=require("ws");var Us=v(require("net"));var Zn=r=>r,Lt=r=>Zn(r);function Yn(r){return Buffer.from(Zn(r))}function Os(r){return Buffer.concat(r.map(Zn))}var et=8,Ls=1,wa=2,Ds=64*1024*1024;var fe=6347,X=7347,$t=process.env.XZH_AUTOJS6_EXT_VERSION?.trim()||"1.0.13";function Ca(r,e){let n=Buffer.alloc(et);return n.writeInt32BE(r,0),n.writeInt32BE(e,4),n}function Nt(r){let e=Buffer.from(r,"utf8");return Os([Ca(e.length,Ls),e])}var Fe=class{buffer=Buffer.alloc(0);push(e){let n=Yn(e);this.buffer=this.buffer.length===0?n:Os([this.buffer,n]);let s=[];for(;this.buffer.length>=et;){let i=this.buffer.readInt32BE(0),o=this.buffer.readInt32BE(4);if(i<0||i>Ds)throw new Error(`AutoJs6 \u5E27\u957F\u5EA6\u975E\u6CD5\uFF1A${i}\uFF08\u4E0A\u9650 ${Ds}\uFF09\uFF0C\u8FDE\u63A5\u53EF\u80FD\u4E0D\u662F AutoJs6 \u534F\u8BAE`);if(this.buffer.length<et+i)break;let a=Yn(this.buffer.subarray(et,et+i));this.buffer=Yn(this.buffer.subarray(et+i)),o===Ls?s.push({kind:"json",payload:a.toString("utf8")}):o===wa&&s.push({kind:"bytes",payload:a})}return s}get pendingBytes(){return this.buffer.length}};function jt(r){try{let e=JSON.parse(r);if(!e||typeof e!="object"||typeof e.type!="string"||!e.type)return null;let n=e.data&&typeof e.data=="object"?e.data:{};return{type:e.type,data:n}}catch{return null}}function Ns(r=$t){return JSON.stringify({type:"hello",data:{extensionVersion:r}})}function js(r){let e=s=>typeof s=="string"?s:"",n=s=>typeof s=="number"&&Number.isFinite(s)?s:0;return{deviceName:e(r.device_name).trim(),appVersion:e(r.app_version).trim(),appVersionCode:n(r.app_version_code),deviceId:e(r.device_id).trim()}}function Re(r,e={}){return JSON.stringify({type:"command",data:{command:r,...e}})}function Bt(r){if(r.type!=="log")return null;let e=r.data.log;return typeof e=="string"?e:null}function Ut(r){let e=r.data["\xA0cmd\xA0"];return typeof e=="string"?e:null}var Ta=2e3,Qn=3,Aa=15e3,Bs=5e3,Ft=class{host;port;options;socket=null;decoder=new Fe;active=!1;connected=!1;connecting=!1;retryTimer=null;attempt=0;quickFailures=0;connectedAt=0;constructor(e){this.options=e,this.host=e.host.trim(),this.port=e.port??X}getAddress(){return`${this.host}:${this.port}`}isConnected(){return this.connected}isRetrying(){return this.active}start(){this.active||(this.active=!0,this.attempt=0,this.quickFailures=0,this.connectOnce())}close(){this.active=!1,this.retryTimer&&(clearTimeout(this.retryTimer),this.retryTimer=null);let e=this.socket,n=this.connected;if(this.socket=null,this.connected=!1,this.connecting=!1,e){e.removeAllListeners();try{e.destroy()}catch{}}n&&this.options.onDisconnect?.()}runScript(e,n,s){return this.sendJson(Re("run",{id:n,name:s,script:e}))}saveScript(e,n){return this.sendJson(Re("save",{name:n,script:e}))}stopScript(e){return this.sendJson(Re("stop",{id:e}))}stopAllScripts(){return this.sendJson(Re("stopAll"))}sendJson(e){let n=this.socket;if(!this.connected||!n)return!1;try{return n.write(Lt(Nt(e))),!0}catch{return!1}}connectOnce(){if(!this.active||this.socket||this.connecting)return;this.connecting=!0,this.decoder=new Fe;let e=new Us.Socket;this.socket=e,e.setNoDelay(!0),e.setKeepAlive(!0,15e3);let n=setTimeout(()=>{this.connected||(this.options.onStatus?.(`\u8FDE\u63A5 ${this.getAddress()} \u8D85\u65F6\uFF08${Bs} ms\uFF09`),e.destroy())},Bs),s=()=>clearTimeout(n);e.once("close",s),e.connect(this.port,this.host),e.on("connect",()=>{s(),this.connecting=!1,this.connected=!0,this.connectedAt=Date.now(),this.attempt=0,this.sendHello(),this.options.onStatus?.(`\u5DF2\u8FDE\u63A5\u624B\u673A ${this.getAddress()}\uFF08AutoJs6 \u670D\u52A1\u5668\u6A21\u5F0F\uFF09`),this.options.onConnect?.()}),e.on("data",i=>this.handleData(i)),e.on("error",i=>{this.options.onStatus?.(i.code==="ECONNREFUSED"?`\u8FDE\u63A5\u88AB\u62D2\u7EDD\uFF08${this.getAddress()}\uFF09\uFF1A\u624B\u673A\u4E0A AutoJs6 \u7684\u300C\u670D\u52A1\u5668\u6A21\u5F0F\u300D\u6CA1\u5F00\uFF0C\u6216\u5730\u5740\u4E0D\u5BF9`:`\u8FDE\u63A5\u51FA\u9519\uFF1A${i.message}`)}),e.on("close",()=>this.handleDisconnect())}sendHello(){this.sendJson(JSON.stringify({type:"hello",data:{device_name:`xzh ${K}`,app_version:K,app_version_code:0,device_id:"",extensionVersion:$t}}))}handleData(e){let n;try{n=this.decoder.push(e)}catch(s){this.options.onStatus?.(`${this.getAddress()} \u8FD4\u56DE\u7684\u6570\u636E\u4E0D\u662F AutoJs6 \u534F\u8BAE\uFF1A${s instanceof Error?s.message:String(s)}`),this.active=!1,this.close();return}for(let s of n){if(s.kind!=="json")continue;let i=jt(String(s.payload));if(!i)continue;let o=Bt(i);if(o!==null){this.options.onLog?.(o);continue}let a=Ut(i);a!==null&&this.options.onPhoneCommand?.(a,i.data)}}handleDisconnect(){let e=this.connected,n=this.connectedAt>0?Date.now()-this.connectedAt:Number.MAX_SAFE_INTEGER;if(this.socket=null,this.connected=!1,this.connecting=!1,e&&this.options.onDisconnect?.(),!!this.active){if(e&&n<Ta){if(this.quickFailures++,this.quickFailures>=Qn){this.active=!1,this.options.onStatus?.(`\u4E0E ${this.getAddress()} \u8FDE\u7EED ${this.quickFailures} \u6B21\u521A\u8FDE\u4E0A\u5C31\u65AD\u5F00\uFF0C\u5DF2\u505C\u6B62\u91CD\u8FDE\u3002\u8BF7\u786E\u8BA4\uFF1A\u2460 \u624B\u673A\u4E0A AutoJs6 \u6253\u5F00\u300C\u8FDE\u63A5\u7535\u8111 \u2192 \u670D\u52A1\u5668\u6A21\u5F0F\u300D\uFF1B\u2461 \u5730\u5740\u4E0E\u7AEF\u53E3\uFF08\u9ED8\u8BA4 7347\uFF09\u6B63\u786E\uFF1B\u2462 xzh \u4E0E\u624B\u673A\u5728\u540C\u4E00\u7F51\u7EDC\uFF08\u624B\u673A\u672C\u673A\u8FD0\u884C\u65F6\u7528 127.0.0.1\uFF09\u3002`);return}}else e&&(this.quickFailures=0);if(!e&&this.quickFailures<Qn&&(this.quickFailures++,this.quickFailures>=Qn)){this.active=!1,this.options.onStatus?.(`\u8FDE\u63A5 ${this.getAddress()} \u5931\u8D25 ${this.quickFailures} \u6B21\uFF0C\u5DF2\u505C\u6B62\u91CD\u8FDE\u3002\u8BF7\u786E\u8BA4\u624B\u673A\u4E0A AutoJs6 \u5DF2\u6253\u5F00\u300C\u8FDE\u63A5\u7535\u8111 \u2192 \u670D\u52A1\u5668\u6A21\u5F0F\u300D\uFF08\u9ED8\u8BA4\u7AEF\u53E3 ${X}\uFF09\u3002`);return}this.scheduleReconnect()}}scheduleReconnect(){let e=this.options.reconnectDelayMs??1500;if(e<=0||this.retryTimer)return;let n=Math.min(e*2**this.attempt,Aa);this.attempt++,this.retryTimer=setTimeout(()=>{this.retryTimer=null,this.options.onStatus?.(`\u6B63\u5728\u91CD\u8FDE ${this.getAddress()}\u2026\uFF08\u7B2C ${this.attempt} \u6B21\uFF09`),this.connectOnce()},n)}};var zs=v(require("net"));var Fs=1e4,yt=class{options;port;server=null;connections=new Map;constructor(e={}){this.options=e,this.port=e.port??fe}isRunning(){return this.server!==null}getPort(){return this.port}start(){if(this.server)return Promise.resolve();let e=zs.createServer(n=>this.handleConnection(n));return new Promise((n,s)=>{let i=a=>{if(e.removeListener("listening",o),a.code==="EADDRINUSE"){s(new Error(`\u7AEF\u53E3 ${this.port} \u5DF2\u88AB\u5360\u7528 \u2014\u2014 \u8FD9\u662F AutoJs6\u300C\u5BA2\u6237\u7AEF\u6A21\u5F0F\u300D\u7684\u7AEF\u53E3\u3002\u4E24\u79CD\u53EF\u80FD\uFF1A\u2460 VSCode \u91CC\u7684 AutoJs6 \u6269\u5C55\uFF08003.autojs6-vscode-ext\uFF09\u6B63\u5728\u8FD0\u884C\uFF0C\u8BF7\u5728 VSCode \u91CC\u7981\u7528\u5B83\uFF1B\u2461 \u5DF2\u7ECF\u6709\u53E6\u4E00\u4E2A xzh \u8BBE\u5907\u6865\u5728\u8DD1\u3002\u540C\u4E00\u4E2A\u7AEF\u53E3\u4E0A\u7684\u4E24\u4E2A\u670D\u52A1\u4F1A\u4E92\u76F8\u62A2\u624B\u673A\u8FDE\u63A5\u3002`));return}s(a)},o=()=>{e.removeListener("error",i),e.on("error",a=>this.options.onStatus?.(`AutoJs6 \u76D1\u542C\u51FA\u9519\uFF1A${a.message}`)),n()};e.once("error",i),e.once("listening",o),e.listen(this.port,"0.0.0.0")}).then(()=>{this.server=e,this.options.onStatus?.(`AutoJs6 \u76D1\u542C\u5DF2\u5C31\u7EEA\uFF08\u7AEF\u53E3 ${this.port}\uFF09\uFF1A\u624B\u673A\u4E0A\u300C\u8FDE\u63A5\u7535\u8111 \u2192 \u5BA2\u6237\u7AEF\u6A21\u5F0F\u300D\u586B\u672C\u673A IP \u5373\u53EF`)})}async stop(){for(let n of[...this.connections.values()])this.dispose(n);this.connections.clear();let e=this.server;this.server=null,e&&await new Promise(n=>e.close(()=>n()))}listDevices(){return[...this.connections.values()].map(e=>e.peer).filter(e=>e!==null)}sendTo(e,n){let s=this.connections.get(e);return!s||!s.peer?!1:this.write(s,n)}broadcast(e){let n=0;for(let s of this.connections.values())s.peer&&this.write(s,e)&&n++;return n}closeDevice(e){let n=this.connections.get(e);n&&this.dispose(n)}handleConnection(e){let n=e.remoteAddress??"unknown",i=`${n.startsWith("::ffff:")?n.slice(7):n}:${e.remotePort??0}`,o={socket:e,id:i,decoder:new Fe,peer:null,handshakeTimer:setTimeout(()=>{o.peer||(this.options.onStatus?.(`\u8FDE\u63A5 ${i} \u672A\u5728 ${Fs/1e3} \u79D2\u5185\u63E1\u624B\uFF0C\u5DF2\u65AD\u5F00\u3002`),this.dispose(o))},Fs)};this.connections.set(i,o),e.setNoDelay(!0),e.setKeepAlive(!0,15e3),e.on("data",a=>this.handleData(o,a)),e.on("error",a=>{this.options.onStatus?.(`\u4E0E ${i} \u7684\u8FDE\u63A5\u51FA\u9519\uFF1A${a.message}`),this.dispose(o)}),e.on("close",()=>this.dispose(o))}handleData(e,n){let s;try{s=e.decoder.push(n)}catch(i){this.options.onStatus?.(`${e.id} \u53D1\u6765\u7684\u6570\u636E\u4E0D\u662F AutoJs6 \u534F\u8BAE\uFF1A${i instanceof Error?i.message:String(i)}`),this.dispose(e);return}for(let i of s){if(i.kind!=="json")continue;let o=jt(String(i.payload));if(!o)continue;if(o.type==="hello"){this.handleHello(e,o.data,String(i.payload));continue}let a=Bt(o);if(a!==null&&e.peer){this.options.onLog?.(e.peer,a);continue}let l=Ut(o);l!==null&&e.peer&&this.options.onPhoneCommand?.(e.peer,l,o.data)}}handleHello(e,n,s){let i=js(n);e.peer={id:e.id,name:i.deviceName||e.id,appVersion:i.appVersion,appVersionCode:i.appVersionCode},clearTimeout(e.handshakeTimer);let o=Ns(),a=this.write(e,o);this.options.onStatus?.(`\u63E1\u624B\uFF1A${e.peer.name}\uFF08AutoJs6 ${i.appVersion||"?"} / versionCode ${i.appVersionCode}\uFF09${a?"":"\u2014\u2014\u26A0 \u5E94\u7B54\u53D1\u9001\u5931\u8D25"}\uFF5C\u56DE\u62A5\u534F\u8BAE\u7248\u672C ${$t}`),this.options.onStatus?.(` \u624B\u673A\u539F\u59CB hello\uFF1A${ka(s,240)}`),this.options.onAttach?.(e.peer)}write(e,n){if(e.socket.destroyed)return!1;try{return e.socket.write(Lt(Nt(n))),!0}catch{return!1}}dispose(e){clearTimeout(e.handshakeTimer);let n=this.connections.delete(e.id),s=e.peer;e.peer=null;try{e.socket.destroy()}catch{}n&&s&&this.options.onDetach?.(s)}};function ka(r,e){let n=r.replace(/\s+/g," ").trim();return n.length>e?`${n.slice(0,e)}\u2026`:n}function er(r){let e=r.scale??.3,n=r.quality??55,s=`http://${r.host}:${r.port}/shot`;return["// \u7531 xzh \u751F\u6210\uFF1A\u622A\u56FE\u5E76\u6309\u6388\u6743\u6846\u3001\u56DE\u4F20\u5230\u6865\uFF08\u52FF\u624B\u6539\uFF0C\u6A21\u677F\u89C1 src/device/screenshot.ts\uFF09","try {"," auto.waitFor(8000);"," var clicked = false;"," var auth = threads.start(function () {",' var btn = text("\u7ACB\u5373\u5F00\u59CB").findOne(3000);',' if (!btn) btn = text("\u5F00\u59CB\u73B0\u5728").findOne(300);',' if (!btn) btn = text("\u5141\u8BB8").findOne(300);'," if (!btn) btn = textMatches(/START NOW|Allow/i).findOne(300);"," if (btn) { clicked = true; btn.click(); }"," });",' console.log("\u3010\u622A\u56FE\u3011\u7B49\u5F85\u5C4F\u5E55\u6388\u6743\u2026");'," var img = captureScreen();"," auth.join(1500);",' if (!img) { console.log("\u3010\u622A\u56FE\u3011\u672A\u62FF\u5230\u56FE\u50CF\uFF08\u6388\u6743\u88AB\u62D2\u6216\u8D85\u65F6\uFF0C\u70B9\u5230\u6388\u6743\u6846=" + clicked + "\uFF09"); exit(); }',` var small = images.scale(img, ${e}, ${e});`,` var b64 = images.toBase64(small, "jpg", ${n});`,` var r = http.post("${s}", b64, { contentType: "text/plain" });`,' console.log("\u3010\u622A\u56FE\u3011" + img.width + "x" + img.height + " \u2192 " + small.width + "x" + small.height + "\uFF0C\u56DE\u4F20=" + r.statusCode);',"} catch (e) {",' console.log("\u3010\u622A\u56FE\u3011\u5931\u8D25\uFF1A" + e);',"}",""].join(`
|
|
73
|
+
`)}var Js=2*1024*1024,ze=class{port;baseDir;logBufferSize;options;sessions=new Set;logs=[];httpServer=null;wss=null;autojs6=null;autojs6Server=null;latestShot=null;constructor(e={}){this.options=e,this.port=e.port??Pe,this.baseDir=e.baseDir??process.cwd(),this.logBufferSize=Math.max(50,e.logBufferSize??500)}async start(e={}){if(this.httpServer)return;let n=Ks.createServer((i,o)=>this.handleHttp(i,o)),s=new vt.WebSocketServer({server:n});s.on("error",()=>{}),s.on("connection",(i,o)=>this.handleConnection(i,o)),await new Promise((i,o)=>{let a=c=>{if(n.removeListener("listening",l),c.code==="EADDRINUSE"){o(new Error(`\u7AEF\u53E3 ${this.port} \u5DF2\u88AB\u5360\u7528\u3002\u53EF\u80FD\u662F\uFF1A
|
|
74
74
|
\xB7 \u7384\u732A\u81EA\u5DF1\u5DF2\u7ECF\u6709\u4E00\u4E2A\u8BBE\u5907\u6865\u5728\u8DD1\uFF08\u7528 \`xzh device status\` \u770B\u4E00\u773C\uFF0C\u540C\u4E00\u4E2A\u63A7\u5236\u7AEF\u53E3\u540C\u65F6\u53EA\u80FD\u6709\u4E00\u4E2A\u6865\uFF09\uFF1B
|
|
75
75
|
\xB7 VSCode \u7684 Auto.js / AutoX.js \u63D2\u4EF6\u6B63\u5728\u8FD0\u884C\uFF08\u5B83\u7528 9317\uFF0C\u4E24\u8005\u4E0D\u80FD\u540C\u65F6\u5F00\uFF09\u3002
|
|
76
|
-
\u6362\u7AEF\u53E3\u518D\u8BD5\uFF1A--port <\u7AEF\u53E3>\u3002`));return}o(c)},l=()=>{r.removeListener("error",a),i()};r.once("error",a),r.once("listening",l),r.listen(this.port,"0.0.0.0")}),this.httpServer=r,this.wss=s,this.options.onStatus?.(e.announceUrls===!1?`\u63A7\u5236\u901A\u9053\u5DF2\u5C31\u7EEA\uFF08\u7AEF\u53E3 ${this.port}\uFF09`:`\u8BBE\u5907\u6865\u5DF2\u542F\u52A8\uFF0C\u76D1\u542C ${this.port}\u3002\u624B\u673A\u4E0A\u7684 AutoX.js \u586B\uFF1A${this.urls().join(" \u6216 ")}`)}async stop(){this.disconnectAutoJs6(),await this.stopAutoJs6Listener();for(let s of this.sessions)try{s.close()}catch{}this.sessions.clear();let e=this.wss;this.wss=null,e&&await new Promise(s=>e.close(()=>s()));let r=this.httpServer;this.httpServer=null,r&&await new Promise(s=>r.close(()=>s())),this.options.onStatus?.("\u8BBE\u5907\u6865\u5DF2\u505C\u6B62\u3002")}isRunning(){return this.httpServer!==null||this.autojs6Server!==null}getPort(){return this.port}urls(){let e=tn();return(e.length>0?e:["127.0.0.1"]).map(r=>`ws://${r}:${this.port}`)}listDevices(){return[...this.sessions].map(e=>e.info).filter(e=>e!==null).sort((e,r)=>e.attachedAt-r.attachedAt)}status(){return{running:this.isRunning(),port:this.port,urls:this.isRunning()?this.urls():[],devices:this.listDevices(),autojs6:this.autojs6?{address:this.autojs6.address,connected:this.autojs6.client.isConnected(),retrying:this.autojs6.client.isRetrying()}:null,autojs6Listener:this.autojs6Server?{port:this.autojs6Server.getPort(),urls:this.listenerUrls()}:null}}async connectAutoJs6(e,r=X){await this.start({announceUrls:!1}),this.disconnectAutoJs6();let s=`${e.trim()}:${r}`,i=new Ft({host:e.trim(),port:r,onStatus:a=>this.options.onStatus?.(a),onLog:a=>this.appendLog(s,a),onPhoneCommand:(a,l)=>{let c=typeof l.id=="string"?l.id:"";a==="rerun"&&c&&(this.options.onStatus?.(`\u624B\u673A\u8BF7\u6C42\u91CD\u8DD1\uFF1A${c}`),this.runScript(c))},onConnect:()=>{o.info={kind:"autojs6",id:s,name:s,appVersionCode:0,attachedAt:Date.now()},this.options.onDeviceAttach?.(o.info)},onDisconnect:()=>{let a=o.info;o.info=null,a&&this.options.onDeviceDetach?.(a)}}),o={kind:"autojs6",origin:"dial",id:s,info:null,sendJson:a=>i.sendJson(a),isAlive:()=>i.isConnected(),close:()=>i.close()};this.autojs6={client:i,address:s},this.sessions.add(o),i.start()}disconnectAutoJs6(){this.autojs6=null;for(let e of[...this.sessions])e.kind!=="autojs6"||e.origin!=="dial"||(this.sessions.delete(e),e.close())}async startAutoJs6Listener(e=fe){if(this.autojs6Server)return;let r=new gt({port:e,onStatus:s=>this.options.onStatus?.(s),onLog:(s,i)=>this.appendLog(s.name,i),onPhoneCommand:(s,i,o)=>{let a=typeof o.id=="string"?o.id:"";i==="rerun"&&a&&(this.options.onStatus?.(`\u624B\u673A\u8BF7\u6C42\u91CD\u8DD1\uFF1A${a}`),this.runScript(a))},onAttach:s=>{let i={kind:"autojs6",origin:"listen",id:s.id,info:{kind:"autojs6",id:s.id,name:s.name,appVersionCode:s.appVersionCode,attachedAt:Date.now()},sendJson:o=>r.sendTo(s.id,o),isAlive:()=>r.listDevices().some(o=>o.id===s.id),close:()=>r.closeDevice(s.id)};this.sessions.add(i),this.options.onDeviceAttach?.(i.info)},onDetach:s=>{let i=[...this.sessions].find(a=>a.kind==="autojs6"&&a.origin==="listen"&&a.id===s.id);if(!i)return;this.sessions.delete(i);let o=i.info;i.info=null,o&&this.options.onDeviceDetach?.(o)}});this.autojs6Server=r;try{await r.start()}catch(s){throw this.autojs6Server=null,s}}async stopAutoJs6Listener(){let e=this.autojs6Server;if(this.autojs6Server=null,!!e){for(let r of[...this.sessions]){if(r.kind!=="autojs6"||r.origin!=="listen")continue;this.sessions.delete(r);let s=r.info;r.info=null,s&&this.options.onDeviceDetach?.(s)}await e.stop()}}listenerUrls(){if(!this.autojs6Server)return[];let e=this.autojs6Server.getPort(),r=tn();return(r.length>0?r:["127.0.0.1"]).map(s=>`${s}:${e}`)}async screenshot(e=2e4){let r=this.listDevices();if(r.length===0)return{ok:!1,message:this.noDeviceMessage()};if(!this.httpServer)return{ok:!1,message:"\u63A7\u5236\u901A\u9053\u6CA1\u6709\u8FD0\u884C\uFF0C\u65E0\u6CD5\u63A5\u6536\u624B\u673A\u56DE\u4F20\u7684\u622A\u56FE\u3002"};let s=r[0],i=Qr({host:this.preferredHostFor(s.id),port:this.port}),o=Ce.join(et.tmpdir(),`xzh-shot-${Date.now()}.js`),a;try{Re.writeFileSync(o,i,"utf8"),a=this.sendScript("run",o)}finally{Re.rmSync(o,{force:!0})}if(!a.ok)return{ok:!1,message:a.message};let l=Date.now(),c=l+e;for(;Date.now()<c;){let u=this.latestShot;if(u&&u.at>l)return{ok:!0,data:u.data};await new Promise(h=>setTimeout(h,250))}return{ok:!1,message:`\u7B49\u5F85\u624B\u673A\u622A\u56FE\u8D85\u65F6\uFF08${Math.round(e/1e3)} \u79D2\uFF09\u3002\u5E38\u89C1\u539F\u56E0\uFF1A\u2460 \u7CFB\u7EDF\u6388\u6743\u6846\u6CA1\u88AB\u70B9\u6389\uFF08\u811A\u672C\u4F1A\u81EA\u52A8\u70B9\u300C\u7ACB\u5373\u5F00\u59CB\u300D\uFF0C\u4ECD\u5931\u8D25\u53EF\u624B\u52A8\u70B9\u4E00\u6B21\uFF09\uFF1B\u2461 \u811A\u672C\u5361\u4F4F\uFF08\u7528 xzh device stop \u6536\u5C3E\uFF09\uFF1B\u2462 \u624B\u673A\u4E0E\u7535\u8111\u4E0D\u5728\u540C\u4E00\u7F51\u7EDC\u3002`}}preferredHostFor(e){let s=(e.split(":")[0]??"").split(".").slice(0,3).join("."),i=tn();return i.find(o=>o.startsWith(`${s}.`))??i[0]??"127.0.0.1"}pushScript(e,r){return this.sendScript("save",e,r)}runScript(e,r){return this.sendScript("run",e,r)}stopScript(e,r){let s=this.selectSessions(r);if(s.length===0)return{ok:!1,message:this.noDeviceMessage()};let i=e?this.resolvePath(e):"",o=0;for(let a of s)this.sendTo(a,a.kind==="autojs6"?Pe(e?"stop":"stopAll",e?{id:i}:{}):e?Gr("stop",{id:i}):Gr("stopAll"))&&o++;return{ok:!0,path:e?this.resolvePath(e):"",delivered:o,devices:s.map(a=>en(a.info))}}sendScript(e,r,s){if(!this.isRunning())return{ok:!1,message:"\u8BBE\u5907\u6865\u5C1A\u672A\u542F\u52A8\u3002\u8BF7\u5728 xzh \u91CC\u6267\u884C /device serve\uFF0C\u6216\u5728\u53E6\u4E00\u4E2A\u7EC8\u7AEF\u8FD0\u884C `xzh device serve`\u3002"};let i=this.resolvePath(r),o;try{let c=Re.statSync(i);if(!c.isFile())return{ok:!1,message:`\u4E0D\u662F\u6587\u4EF6\uFF1A${i}`};if(c.size>zs)return{ok:!1,message:`\u811A\u672C\u8FC7\u5927\uFF08${Math.round(c.size/1024)} KB\uFF09\uFF0C\u4E0A\u9650 ${Math.round(zs/1024)} KB\u3002\u9879\u76EE\u7EA7\u540C\u6B65\u8BF7\u6539\u7528 VSCode \u63D2\u4EF6\u3002`};o=Re.readFileSync(i,"utf8")}catch(c){return{ok:!1,message:`\u8BFB\u53D6\u811A\u672C\u5931\u8D25\uFF1A${c instanceof Error?c.message:String(c)}`}}let a=this.selectSessions(s);if(a.length===0)return{ok:!1,message:this.noDeviceMessage()};let l=0;for(let c of a){let u=c.kind==="autojs6"?Pe(e,{id:i,name:Ce.basename(i),script:o}):Ps(e,i,o);this.sendTo(c,u)&&l++}return l===0?{ok:!1,message:"\u6307\u4EE4\u672A\u80FD\u9001\u8FBE\u4EFB\u4F55\u8BBE\u5907\uFF08\u8FDE\u63A5\u53EF\u80FD\u521A\u521A\u65AD\u5F00\uFF09\u3002"}:{ok:!0,path:i,delivered:l,devices:a.map(c=>en(c.info))}}appendLog(e,r){let s={device:e,text:r,at:Date.now()};this.logs.push(s),this.logs.length>this.logBufferSize&&this.logs.splice(0,this.logs.length-this.logBufferSize),this.options.onLog?.(s)}recentLogs(e=50){let r=Math.max(1,e);return this.logs.slice(-r)}clearLogs(){this.logs.length=0}handleConnection(e,r){let i=`${r.socket.remoteAddress??"unknown"}:${r.socket.remotePort??0}`,o,a={kind:"autoxjs",origin:"listen",id:i,info:null,sendJson:l=>{if(e.readyState!==$t.WebSocket.OPEN)return!1;try{return e.send(l),!0}catch{return!1}},isAlive:()=>e.readyState===$t.WebSocket.OPEN,close:()=>{o&&clearTimeout(o);try{e.close()}catch{}}};o=setTimeout(()=>{a.info||(this.options.onStatus?.(`\u8FDE\u63A5 ${i} \u672A\u5728 ${Hr/1e3} \u79D2\u5185\u63E1\u624B\uFF0C\u5DF2\u65AD\u5F00\u3002`),a.close())},Hr),this.sessions.add(a),e.on("message",l=>{let c=l.toString(),u=Rs(c);if(!u){this.options.onStatus?.(`\u6536\u5230\u65E0\u6CD5\u89E3\u6790\u7684\u6D88\u606F\uFF08\u5DF2\u5FFD\u7565\uFF09\uFF1A${zt(c,200)}`);return}this.handleDeviceMessage(a,u.type,u.data,c)}),e.on("close",()=>this.detach(a)),e.on("error",()=>this.detach(a))}handleDeviceMessage(e,r,s,i){switch(r){case"hello":{let{name:o,appVersionCode:a}=Xr(s);e.info={kind:"autoxjs",id:e.id,name:o||e.id,appVersionCode:a,attachedAt:Date.now()};let l=Es(a),c=this.sendTo(e,l);this.options.onStatus?.(`\u63E1\u624B\uFF1A${o||e.id}\uFF08versionCode ${a}\uFF09${c?"":"\u2014\u2014\u26A0 \u5E94\u7B54\u53D1\u9001\u5931\u8D25"}\uFF5C\u534F\u8BAE\u7248\u672C ${qr}\uFF08\u5B9E\u73B0 v${ks}\uFF09`),this.options.onStatus?.(` \u624B\u673A\u539F\u59CB hello\uFF1A${zt(i,240)}`),this.options.onStatus?.(` \u5DF2\u56DE\u5E94\uFF1A${zt(l,240)}`),this.options.onDeviceAttach?.(e.info);return}case"ping":this.sendTo(e,_s(s));return;case"device_name":{let{name:o}=Xr(s);e.info&&o&&(e.info.name=o);return}case"log":{let o=Ms(s);if(!o)return;this.appendLog(en(e.info),o);return}default:this.options.onStatus?.(`\u6536\u5230\u672A\u77E5\u6D88\u606F\u7C7B\u578B\u300C${r}\u300D\uFF0C\u5DF2\u5FFD\u7565\uFF1A${zt(i,200)}`);return}}detach(e){this.sessions.delete(e)&&(e.info&&(this.options.onDeviceDetach?.(e.info),e.info=null),e.close())}sendTo(e,r){return e.isAlive()&&e.sendJson(r)}selectSessions(e){let r=[...this.sessions].filter(i=>i.info!==null);if(!e)return r;let s=e.trim().toLowerCase();return r.filter(i=>{let o=i.info;return i.id.toLowerCase()===s||o.name.toLowerCase().includes(s)})}noDeviceMessage(){return this.autojs6Server?`AutoJs6 \u5C1A\u672A\u8FDE\u63A5\uFF08\u672C\u673A\u6B63\u5728\u76D1\u542C ${this.listenerUrls().join(" \u6216 ")}\uFF09\u3002\u8BF7\u786E\u8BA4\uFF1A\u2460 \u624B\u673A\u4E0A AutoJs6 \u6253\u5F00\u300C\u8FDE\u63A5\u7535\u8111 \u2192 \u5BA2\u6237\u7AEF\u6A21\u5F0F\u300D\uFF0C\u586B\u5165\u4E0A\u9762\u7684\u5730\u5740\uFF1B\u2461 \u7AEF\u53E3\u7528\u9ED8\u8BA4\u7684 ${fe}\uFF1B\u2462 \u624B\u673A\u4E0E\u7535\u8111\u5728\u540C\u4E00\u7F51\u7EDC\u3002`:this.autojs6?`AutoJs6 \u5C1A\u672A\u8FDE\u63A5\uFF08${this.autojs6.address}\uFF09\u3002\u8BF7\u786E\u8BA4\uFF1A\u2460 \u624B\u673A\u4E0A AutoJs6 \u6253\u5F00\u300C\u8FDE\u63A5\u7535\u8111 \u2192 \u670D\u52A1\u5668\u6A21\u5F0F\u300D\uFF08\u9ED8\u8BA4\u7AEF\u53E3 7347\uFF09\uFF1B\u2461 \u5730\u5740\u586B\u7684\u662F\u624B\u673A IP\uFF0C\u624B\u673A\u672C\u673A\u8FD0\u884C xzh \u65F6\u7528 127.0.0.1\uFF1B\u2462 \u4E24\u8005\u5728\u540C\u4E00\u7F51\u7EDC\u3002`:`\u5F53\u524D\u6CA1\u6709\u5DF2\u8FDE\u63A5\u7684\u8BBE\u5907\u3002\u8BF7\u786E\u8BA4\uFF1A\u2460 \u624B\u673A\u4E0E\u7535\u8111\u5728\u540C\u4E00\u7F51\u7EDC\uFF1B\u2461 \u624B\u673A AutoX.js \u91CC\u586B\u4E86 ${this.urls().join(" \u6216 ")||`ws://<\u7535\u8111IP>:${this.port}`} \u5E76\u70B9\u4E86\u8FDE\u63A5\u3002`}resolvePath(e){let r=e.startsWith("~")?Ce.join(et.homedir(),e.slice(1)):e;return Ce.isAbsolute(r)?r:Ce.resolve(this.baseDir,r)}handleHttp(e,r){let s=new URL(e.url??"/",`http://127.0.0.1:${this.port}`),i=(o,a=200)=>{r.writeHead(a,{"content-type":"application/json; charset=utf-8"}),r.end(JSON.stringify(o))};switch(s.pathname){case"/":r.writeHead(200,{"content-type":"text/plain; charset=utf-8"}),r.end(`xzh device bridge
|
|
76
|
+
\u6362\u7AEF\u53E3\u518D\u8BD5\uFF1A--port <\u7AEF\u53E3>\u3002`));return}o(c)},l=()=>{n.removeListener("error",a),i()};n.once("error",a),n.once("listening",l),n.listen(this.port,"0.0.0.0")}),this.httpServer=n,this.wss=s,this.options.onStatus?.(e.announceUrls===!1?`\u63A7\u5236\u901A\u9053\u5DF2\u5C31\u7EEA\uFF08\u7AEF\u53E3 ${this.port}\uFF09`:`\u8BBE\u5907\u6865\u5DF2\u542F\u52A8\uFF0C\u76D1\u542C ${this.port}\u3002\u624B\u673A\u4E0A\u7684 AutoX.js \u586B\uFF1A${this.urls().join(" \u6216 ")}`)}async stop(){this.disconnectAutoJs6(),await this.stopAutoJs6Listener();for(let s of this.sessions)try{s.close()}catch{}this.sessions.clear();let e=this.wss;this.wss=null,e&&await new Promise(s=>e.close(()=>s()));let n=this.httpServer;this.httpServer=null,n&&await new Promise(s=>n.close(()=>s())),this.options.onStatus?.("\u8BBE\u5907\u6865\u5DF2\u505C\u6B62\u3002")}isRunning(){return this.httpServer!==null||this.autojs6Server!==null}getPort(){return this.port}urls(){let e=nr();return(e.length>0?e:["127.0.0.1"]).map(n=>`ws://${n}:${this.port}`)}listDevices(){return[...this.sessions].map(e=>e.info).filter(e=>e!==null).sort((e,n)=>e.attachedAt-n.attachedAt)}status(){return{running:this.isRunning(),port:this.port,urls:this.isRunning()?this.urls():[],devices:this.listDevices(),autojs6:this.autojs6?{address:this.autojs6.address,connected:this.autojs6.client.isConnected(),retrying:this.autojs6.client.isRetrying()}:null,autojs6Listener:this.autojs6Server?{port:this.autojs6Server.getPort(),urls:this.listenerUrls()}:null}}async connectAutoJs6(e,n=X){await this.start({announceUrls:!1}),this.disconnectAutoJs6();let s=`${e.trim()}:${n}`,i=new Ft({host:e.trim(),port:n,onStatus:a=>this.options.onStatus?.(a),onLog:a=>this.appendLog(s,a),onPhoneCommand:(a,l)=>{let c=typeof l.id=="string"?l.id:"";a==="rerun"&&c&&(this.options.onStatus?.(`\u624B\u673A\u8BF7\u6C42\u91CD\u8DD1\uFF1A${c}`),this.runScript(c))},onConnect:()=>{o.info={kind:"autojs6",id:s,name:s,appVersionCode:0,attachedAt:Date.now()},this.options.onDeviceAttach?.(o.info)},onDisconnect:()=>{let a=o.info;o.info=null,a&&this.options.onDeviceDetach?.(a)}}),o={kind:"autojs6",origin:"dial",id:s,info:null,sendJson:a=>i.sendJson(a),isAlive:()=>i.isConnected(),close:()=>i.close()};this.autojs6={client:i,address:s},this.sessions.add(o),i.start()}disconnectAutoJs6(){this.autojs6=null;for(let e of[...this.sessions])e.kind!=="autojs6"||e.origin!=="dial"||(this.sessions.delete(e),e.close())}async startAutoJs6Listener(e=fe){if(this.autojs6Server)return;let n=new yt({port:e,onStatus:s=>this.options.onStatus?.(s),onLog:(s,i)=>this.appendLog(s.name,i),onPhoneCommand:(s,i,o)=>{let a=typeof o.id=="string"?o.id:"";i==="rerun"&&a&&(this.options.onStatus?.(`\u624B\u673A\u8BF7\u6C42\u91CD\u8DD1\uFF1A${a}`),this.runScript(a))},onAttach:s=>{let i={kind:"autojs6",origin:"listen",id:s.id,info:{kind:"autojs6",id:s.id,name:s.name,appVersionCode:s.appVersionCode,attachedAt:Date.now()},sendJson:o=>n.sendTo(s.id,o),isAlive:()=>n.listDevices().some(o=>o.id===s.id),close:()=>n.closeDevice(s.id)};this.sessions.add(i),this.options.onDeviceAttach?.(i.info)},onDetach:s=>{let i=[...this.sessions].find(a=>a.kind==="autojs6"&&a.origin==="listen"&&a.id===s.id);if(!i)return;this.sessions.delete(i);let o=i.info;i.info=null,o&&this.options.onDeviceDetach?.(o)}});this.autojs6Server=n;try{await n.start()}catch(s){throw this.autojs6Server=null,s}}async stopAutoJs6Listener(){let e=this.autojs6Server;if(this.autojs6Server=null,!!e){for(let n of[...this.sessions]){if(n.kind!=="autojs6"||n.origin!=="listen")continue;this.sessions.delete(n);let s=n.info;n.info=null,s&&this.options.onDeviceDetach?.(s)}await e.stop()}}listenerUrls(){if(!this.autojs6Server)return[];let e=this.autojs6Server.getPort(),n=nr();return(n.length>0?n:["127.0.0.1"]).map(s=>`${s}:${e}`)}async screenshot(e=2e4){let n=this.listDevices();if(n.length===0)return{ok:!1,message:this.noDeviceMessage()};if(!this.httpServer)return{ok:!1,message:"\u63A7\u5236\u901A\u9053\u6CA1\u6709\u8FD0\u884C\uFF0C\u65E0\u6CD5\u63A5\u6536\u624B\u673A\u56DE\u4F20\u7684\u622A\u56FE\u3002"};let s=n[0],i=er({host:this.preferredHostFor(s.id),port:this.port}),o=Te.join(tt.tmpdir(),`xzh-shot-${Date.now()}.js`),a;try{Me.writeFileSync(o,i,"utf8"),a=this.sendScript("run",o)}finally{Me.rmSync(o,{force:!0})}if(!a.ok)return{ok:!1,message:a.message};let l=Date.now(),c=l+e;for(;Date.now()<c;){let u=this.latestShot;if(u&&u.at>l)return{ok:!0,data:u.data};await new Promise(p=>setTimeout(p,250))}return{ok:!1,message:`\u7B49\u5F85\u624B\u673A\u622A\u56FE\u8D85\u65F6\uFF08${Math.round(e/1e3)} \u79D2\uFF09\u3002\u5E38\u89C1\u539F\u56E0\uFF1A\u2460 \u7CFB\u7EDF\u6388\u6743\u6846\u6CA1\u88AB\u70B9\u6389\uFF08\u811A\u672C\u4F1A\u81EA\u52A8\u70B9\u300C\u7ACB\u5373\u5F00\u59CB\u300D\uFF0C\u4ECD\u5931\u8D25\u53EF\u624B\u52A8\u70B9\u4E00\u6B21\uFF09\uFF1B\u2461 \u811A\u672C\u5361\u4F4F\uFF08\u7528 xzh device stop \u6536\u5C3E\uFF09\uFF1B\u2462 \u624B\u673A\u4E0E\u7535\u8111\u4E0D\u5728\u540C\u4E00\u7F51\u7EDC\u3002`}}preferredHostFor(e){let s=(e.split(":")[0]??"").split(".").slice(0,3).join("."),i=nr();return i.find(o=>o.startsWith(`${s}.`))??i[0]??"127.0.0.1"}pushScript(e,n){return this.sendScript("save",e,n)}runScript(e,n){return this.sendScript("run",e,n)}stopScript(e,n){let s=this.selectSessions(n);if(s.length===0)return{ok:!1,message:this.noDeviceMessage()};let i=e?this.resolvePath(e):"",o=0;for(let a of s)this.sendTo(a,a.kind==="autojs6"?Re(e?"stop":"stopAll",e?{id:i}:{}):e?Xn("stop",{id:i}):Xn("stopAll"))&&o++;return{ok:!0,path:e?this.resolvePath(e):"",delivered:o,devices:s.map(a=>tr(a.info))}}sendScript(e,n,s){if(!this.isRunning())return{ok:!1,message:"\u8BBE\u5907\u6865\u5C1A\u672A\u542F\u52A8\u3002\u8BF7\u5728 xzh \u91CC\u6267\u884C /device serve\uFF0C\u6216\u5728\u53E6\u4E00\u4E2A\u7EC8\u7AEF\u8FD0\u884C `xzh device serve`\u3002"};let i=this.resolvePath(n),o;try{let c=Me.statSync(i);if(!c.isFile())return{ok:!1,message:`\u4E0D\u662F\u6587\u4EF6\uFF1A${i}`};if(c.size>Js)return{ok:!1,message:`\u811A\u672C\u8FC7\u5927\uFF08${Math.round(c.size/1024)} KB\uFF09\uFF0C\u4E0A\u9650 ${Math.round(Js/1024)} KB\u3002\u9879\u76EE\u7EA7\u540C\u6B65\u8BF7\u6539\u7528 VSCode \u63D2\u4EF6\u3002`};o=Me.readFileSync(i,"utf8")}catch(c){return{ok:!1,message:`\u8BFB\u53D6\u811A\u672C\u5931\u8D25\uFF1A${c instanceof Error?c.message:String(c)}`}}let a=this.selectSessions(s);if(a.length===0)return{ok:!1,message:this.noDeviceMessage()};let l=0;for(let c of a){let u=c.kind==="autojs6"?Re(e,{id:i,name:Te.basename(i),script:o}):Rs(e,i,o);this.sendTo(c,u)&&l++}return l===0?{ok:!1,message:"\u6307\u4EE4\u672A\u80FD\u9001\u8FBE\u4EFB\u4F55\u8BBE\u5907\uFF08\u8FDE\u63A5\u53EF\u80FD\u521A\u521A\u65AD\u5F00\uFF09\u3002"}:{ok:!0,path:i,delivered:l,devices:a.map(c=>tr(c.info))}}appendLog(e,n){let s={device:e,text:n,at:Date.now()};this.logs.push(s),this.logs.length>this.logBufferSize&&this.logs.splice(0,this.logs.length-this.logBufferSize),this.options.onLog?.(s)}recentLogs(e=50){let n=Math.max(1,e);return this.logs.slice(-n)}clearLogs(){this.logs.length=0}handleConnection(e,n){let i=`${n.socket.remoteAddress??"unknown"}:${n.socket.remotePort??0}`,o,a={kind:"autoxjs",origin:"listen",id:i,info:null,sendJson:l=>{if(e.readyState!==vt.WebSocket.OPEN)return!1;try{return e.send(l),!0}catch{return!1}},isAlive:()=>e.readyState===vt.WebSocket.OPEN,close:()=>{o&&clearTimeout(o);try{e.close()}catch{}}};o=setTimeout(()=>{a.info||(this.options.onStatus?.(`\u8FDE\u63A5 ${i} \u672A\u5728 ${qn/1e3} \u79D2\u5185\u63E1\u624B\uFF0C\u5DF2\u65AD\u5F00\u3002`),a.close())},qn),this.sessions.add(a),e.on("message",l=>{let c=l.toString(),u=Ms(c);if(!u){this.options.onStatus?.(`\u6536\u5230\u65E0\u6CD5\u89E3\u6790\u7684\u6D88\u606F\uFF08\u5DF2\u5FFD\u7565\uFF09\uFF1A${zt(c,200)}`);return}this.handleDeviceMessage(a,u.type,u.data,c)}),e.on("close",()=>this.detach(a)),e.on("error",()=>this.detach(a))}handleDeviceMessage(e,n,s,i){switch(n){case"hello":{let{name:o,appVersionCode:a}=Vn(s);e.info={kind:"autoxjs",id:e.id,name:o||e.id,appVersionCode:a,attachedAt:Date.now()};let l=Es(a),c=this.sendTo(e,l);this.options.onStatus?.(`\u63E1\u624B\uFF1A${o||e.id}\uFF08versionCode ${a}\uFF09${c?"":"\u2014\u2014\u26A0 \u5E94\u7B54\u53D1\u9001\u5931\u8D25"}\uFF5C\u534F\u8BAE\u7248\u672C ${Wn}\uFF08\u5B9E\u73B0 v${_s}\uFF09`),this.options.onStatus?.(` \u624B\u673A\u539F\u59CB hello\uFF1A${zt(i,240)}`),this.options.onStatus?.(` \u5DF2\u56DE\u5E94\uFF1A${zt(l,240)}`),this.options.onDeviceAttach?.(e.info);return}case"ping":this.sendTo(e,Ps(s));return;case"device_name":{let{name:o}=Vn(s);e.info&&o&&(e.info.name=o);return}case"log":{let o=Is(s);if(!o)return;this.appendLog(tr(e.info),o);return}default:this.options.onStatus?.(`\u6536\u5230\u672A\u77E5\u6D88\u606F\u7C7B\u578B\u300C${n}\u300D\uFF0C\u5DF2\u5FFD\u7565\uFF1A${zt(i,200)}`);return}}detach(e){this.sessions.delete(e)&&(e.info&&(this.options.onDeviceDetach?.(e.info),e.info=null),e.close())}sendTo(e,n){return e.isAlive()&&e.sendJson(n)}selectSessions(e){let n=[...this.sessions].filter(i=>i.info!==null);if(!e)return n;let s=e.trim().toLowerCase();return n.filter(i=>{let o=i.info;return i.id.toLowerCase()===s||o.name.toLowerCase().includes(s)})}noDeviceMessage(){return this.autojs6Server?`AutoJs6 \u5C1A\u672A\u8FDE\u63A5\uFF08\u672C\u673A\u6B63\u5728\u76D1\u542C ${this.listenerUrls().join(" \u6216 ")}\uFF09\u3002\u8BF7\u786E\u8BA4\uFF1A\u2460 \u624B\u673A\u4E0A AutoJs6 \u6253\u5F00\u300C\u8FDE\u63A5\u7535\u8111 \u2192 \u5BA2\u6237\u7AEF\u6A21\u5F0F\u300D\uFF0C\u586B\u5165\u4E0A\u9762\u7684\u5730\u5740\uFF1B\u2461 \u7AEF\u53E3\u7528\u9ED8\u8BA4\u7684 ${fe}\uFF1B\u2462 \u624B\u673A\u4E0E\u7535\u8111\u5728\u540C\u4E00\u7F51\u7EDC\u3002`:this.autojs6?`AutoJs6 \u5C1A\u672A\u8FDE\u63A5\uFF08${this.autojs6.address}\uFF09\u3002\u8BF7\u786E\u8BA4\uFF1A\u2460 \u624B\u673A\u4E0A AutoJs6 \u6253\u5F00\u300C\u8FDE\u63A5\u7535\u8111 \u2192 \u670D\u52A1\u5668\u6A21\u5F0F\u300D\uFF08\u9ED8\u8BA4\u7AEF\u53E3 7347\uFF09\uFF1B\u2461 \u5730\u5740\u586B\u7684\u662F\u624B\u673A IP\uFF0C\u624B\u673A\u672C\u673A\u8FD0\u884C xzh \u65F6\u7528 127.0.0.1\uFF1B\u2462 \u4E24\u8005\u5728\u540C\u4E00\u7F51\u7EDC\u3002`:`\u5F53\u524D\u6CA1\u6709\u5DF2\u8FDE\u63A5\u7684\u8BBE\u5907\u3002\u8BF7\u786E\u8BA4\uFF1A\u2460 \u624B\u673A\u4E0E\u7535\u8111\u5728\u540C\u4E00\u7F51\u7EDC\uFF1B\u2461 \u624B\u673A AutoX.js \u91CC\u586B\u4E86 ${this.urls().join(" \u6216 ")||`ws://<\u7535\u8111IP>:${this.port}`} \u5E76\u70B9\u4E86\u8FDE\u63A5\u3002`}resolvePath(e){let n=e.startsWith("~")?Te.join(tt.homedir(),e.slice(1)):e;return Te.isAbsolute(n)?n:Te.resolve(this.baseDir,n)}handleHttp(e,n){let s=new URL(e.url??"/",`http://127.0.0.1:${this.port}`),i=(o,a=200)=>{n.writeHead(a,{"content-type":"application/json; charset=utf-8"}),n.end(JSON.stringify(o))};switch(s.pathname){case"/":n.writeHead(200,{"content-type":"text/plain; charset=utf-8"}),n.end(`xzh device bridge
|
|
77
77
|
devices: ${this.listDevices().length}
|
|
78
78
|
url: ${this.urls().join(" ")}
|
|
79
79
|
endpoints: /status /devices /logs /exec?cmd=save|run|rerun|stop|stopAll&path=<\u811A\u672C>
|
|
80
|
-
`);return;case"/status":i(this.status());return;case"/devices":i({devices:this.listDevices()});return;case"/logs":{let o=Number(s.searchParams.get("limit")??"50");i({logs:this.recentLogs(Number.isFinite(o)?o:50)});return}case"/exec":{let o=(s.searchParams.get("cmd")??"").trim(),a=(s.searchParams.get("path")??"").trim(),l=(s.searchParams.get("device")??"").trim()||void 0;switch(o){case"save":case"push":i(a?this.pushScript(a,l):{ok:!1,message:"\u7F3A\u5C11 path \u53C2\u6570"});return;case"run":i(a?this.runScript(a,l):{ok:!1,message:"\u7F3A\u5C11 path \u53C2\u6570"});return;case"rerun":{if(!a){i({ok:!1,message:"\u7F3A\u5C11 path \u53C2\u6570"});return}this.stopScript(void 0,l),setTimeout(()=>this.runScript(a,l),800),i({ok:!0,path:this.resolvePath(a),action:"rerun"});return}case"stop":i(this.stopScript(a||void 0,l));return;case"stopAll":i(this.stopScript(void 0,l));return;default:i({ok:!1,message:`\u672A\u77E5 cmd\uFF1A${o}`},400);return}}case"/shot":{if(e.method!=="POST"){i({ok:!1,message:"\u8BF7\u7528 POST \u4E0A\u4F20\u622A\u56FE"},405);return}let o=[];e.on("data",a=>o.push(a)),e.on("end",()=>{let a=Buffer.concat(o),l=Buffer.from(a.toString("utf8").trim(),"base64");if(l.length===0){i({ok:!1,message:"\u622A\u56FE\u5185\u5BB9\u4E3A\u7A7A"},400);return}this.latestShot={data:l,at:Date.now()},i({ok:!0,bytes:l.length})});return}case"/screenshot":{this.screenshot().then(o=>{if(!o.ok){i({ok:!1,message:o.message},504);return}
|
|
81
|
-
`);return}}}};function zt(
|
|
82
|
-
`).slice(1).map(
|
|
83
|
-
`)}function
|
|
84
|
-
`)}var t={reset:"\x1B[0m",bold:"\x1B[1m",dim:"\x1B[2m",italic:"\x1B[3m",underline:"\x1B[4m",inverse:"\x1B[7m",black:"\x1B[30m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",cyan:"\x1B[36m",white:"\x1B[37m",gray:"\x1B[90m",brightRed:"\x1B[91m",brightGreen:"\x1B[92m",brightYellow:"\x1B[93m",brightBlue:"\x1B[94m",brightMagenta:"\x1B[95m",brightCyan:"\x1B[96m",brightWhite:"\x1B[97m",bgRed:"\x1B[41m",bgGreen:"\x1B[42m",bgYellow:"\x1B[43m",bgBlue:"\x1B[44m",bgMagenta:"\x1B[45m",bgCyan:"\x1B[46m",bgGray:"\x1B[100m"},
|
|
85
|
-
`)){if(s===""){
|
|
80
|
+
`);return;case"/status":i(this.status());return;case"/devices":i({devices:this.listDevices()});return;case"/logs":{let o=Number(s.searchParams.get("limit")??"50");i({logs:this.recentLogs(Number.isFinite(o)?o:50)});return}case"/exec":{let o=(s.searchParams.get("cmd")??"").trim(),a=(s.searchParams.get("path")??"").trim(),l=(s.searchParams.get("device")??"").trim()||void 0;switch(o){case"save":case"push":i(a?this.pushScript(a,l):{ok:!1,message:"\u7F3A\u5C11 path \u53C2\u6570"});return;case"run":i(a?this.runScript(a,l):{ok:!1,message:"\u7F3A\u5C11 path \u53C2\u6570"});return;case"rerun":{if(!a){i({ok:!1,message:"\u7F3A\u5C11 path \u53C2\u6570"});return}this.stopScript(void 0,l),setTimeout(()=>this.runScript(a,l),800),i({ok:!0,path:this.resolvePath(a),action:"rerun"});return}case"stop":i(this.stopScript(a||void 0,l));return;case"stopAll":i(this.stopScript(void 0,l));return;default:i({ok:!1,message:`\u672A\u77E5 cmd\uFF1A${o}`},400);return}}case"/shot":{if(e.method!=="POST"){i({ok:!1,message:"\u8BF7\u7528 POST \u4E0A\u4F20\u622A\u56FE"},405);return}let o=[];e.on("data",a=>o.push(a)),e.on("end",()=>{let a=Buffer.concat(o),l=Buffer.from(a.toString("utf8").trim(),"base64");if(l.length===0){i({ok:!1,message:"\u622A\u56FE\u5185\u5BB9\u4E3A\u7A7A"},400);return}this.latestShot={data:l,at:Date.now()},i({ok:!0,bytes:l.length})});return}case"/screenshot":{this.screenshot().then(o=>{if(!o.ok){i({ok:!1,message:o.message},504);return}n.writeHead(200,{"content-type":"image/jpeg","content-length":String(o.data.length)}),n.end(o.data)}).catch(o=>i({ok:!1,message:String(o)},500));return}default:{n.writeHead(404,{"content-type":"text/plain; charset=utf-8"}),n.end(`not found
|
|
81
|
+
`);return}}}};function zt(r,e){let n=r.replace(/\s+/g," ").trim();return n.length>e?`${n.slice(0,e)}\u2026`:n}function tr(r){return r?r.name||r.id:"\u672A\u63E1\u624B\u8FDE\u63A5"}function nr(){let r=[],e=tt.networkInterfaces();for(let n of Object.keys(e))for(let s of e[n]??[])s.family==="IPv4"&&!s.internal&&r.push(s.address);return r}var rr=v(require("http"));var _a=5e3;function Ie(r){if(typeof r=="number"&&r>0&&r<=65535)return r;let e=Number.parseInt(process.env.XZH_DEVICE_PORT??"",10);return Number.isFinite(e)&&e>0&&e<=65535?e:Pe}var re=class{port;constructor(e=Pe){this.port=e}getPort(){return this.port}screenshot(e=4e4){return new Promise(n=>{let s=rr.request({host:"127.0.0.1",port:this.port,path:"/screenshot",method:"POST",timeout:e},i=>{let o=[];i.on("data",a=>o.push(a)),i.on("end",()=>{let a=Buffer.concat(o);if(i.statusCode===200){n({ok:!0,data:a});return}let l=`\u622A\u56FE\u5931\u8D25\uFF08HTTP ${i.statusCode}\uFF09`;try{let c=JSON.parse(a.toString("utf8"));c.message&&(l=c.message)}catch{}n({ok:!1,message:l})})});s.on("error",i=>n({ok:!1,message:String(i)})),s.on("timeout",()=>{s.destroy(),n({ok:!1,message:`\u622A\u56FE\u8D85\u65F6\uFF08${e}ms\uFF09`})}),s.end()})}async status(){return this.request("/status")}async isRunning(){return await this.status()!==null}async devices(){let e=await this.request("/devices");return e?e.devices:null}async logs(e=50){let n=await this.request(`/logs?limit=${encodeURIComponent(String(e))}`);return n?n.logs:null}async exec(e,n,s){let i=new URLSearchParams({cmd:e});n&&i.set("path",n),s&&i.set("device",s);let o=await this.request(`/exec?${i.toString()}`);return o||{ok:!1,message:`\u8FDE\u4E0D\u4E0A\u8BBE\u5907\u6865\uFF08127.0.0.1:${this.port}\uFF09\u3002\u5148\u5728\u53E6\u4E00\u4E2A\u7EC8\u7AEF\u8FD0\u884C \`xzh device serve\`\uFF0C\u6216\u5728 xzh \u91CC\u6267\u884C /device serve\u3002`}}request(e){return new Promise(n=>{let s=rr.request({host:"127.0.0.1",port:this.port,path:e,method:"GET",timeout:_a},i=>{let o=[];i.on("data",a=>o.push(a)),i.on("end",()=>{try{n(JSON.parse(Buffer.concat(o).toString("utf8")))}catch{n(null)}})});s.on("timeout",()=>{s.destroy(),n(null)}),s.on("error",()=>n(null)),s.end()})}};var sr=require("child_process"),nt=v(require("fs")),ir=v(require("path"));var or="https://github.com/SuperMonster003/AutoJs6/releases/";function Hs(){return ir.join(T(),"apks")}var Ea=["arm64-v8a","armeabi-v7a","x86_64","x86"];function Jt(){try{let e=(0,sr.execFileSync)("adb",["devices"],{timeout:5e3,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).split(`
|
|
82
|
+
`).slice(1).map(n=>n.trim()).filter(n=>n.endsWith(" device"));if(e.length>0){let n=(0,sr.execFileSync)("adb",["shell","getprop","ro.product.cpu.abi"],{timeout:5e3,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim();if(Ea.includes(n))return{abi:n,source:"adb",detail:`\u7531 adb \u8BFB\u53D6\u8BBE\u5907\u4FE1\u606F\u5F97\u5230\uFF08${e.length} \u53F0\u8BBE\u5907\u5728\u7EBF\uFF09`}}}catch{}return{abi:"arm64-v8a",source:"default",detail:"\u672A\u68C0\u6D4B\u5230 adb \u8BBE\u5907\uFF0C\u6309\u4E3B\u6D41\u673A\u578B\u9ED8\u8BA4\u9009\u62E9\uFF08\u6A21\u62DF\u5668\u8BF7\u9009 x86_64\uFF09"}}function Kt(r,e=Hs()){let n;try{n=nt.readdirSync(e)}catch{return null}for(let s of n){if(!s.toLowerCase().endsWith(".apk")||!s.toLowerCase().includes(r.toLowerCase()))continue;let i=ir.join(e,s);try{let o=nt.statSync(i);if(o.isFile())return{path:i,sizeBytes:o.size}}catch{}}return null}function rt(){if(process.env.PREFIX?.includes("com.termux")||process.env.ANDROID_ROOT||process.env.ANDROID_DATA)return!0;try{return nt.existsSync("/system/build.prop")}catch{return!1}}function Pa(r){return r<1024*1024?`${Math.round(r/1024)} KB`:`${(r/(1024*1024)).toFixed(0)} MB`}function Ht(r){let{where:e,abi:n,address:s,localApk:i}=r,o=[];return o.push("\u9996\u6B21\u8FDE\u63A5\u624B\u673A\u9700\u8981\u88C5 AutoJs6\uFF08\u5B83\u63D0\u4F9B\u65E0\u969C\u788D\u80FD\u529B\uFF0Cxzh \u901A\u8FC7\u5B83\u64CD\u4F5C\u624B\u673A\uFF09\uFF1A"),o.push(""),o.push(` 1. \u624B\u673A\u5B89\u88C5 AutoJs6 \u2014\u2014 \u4E0B\u8F7D\u9875\uFF1A${or}`),o.push(` \u9009 ${n} \u7248\u672C${n==="arm64-v8a"?"\uFF08\u7EDD\u5927\u591A\u6570\u624B\u673A\uFF09":"\uFF08\u6A21\u62DF\u5668/\u7279\u6B8A\u673A\u578B\uFF09"}`),i?o.push(` \u672C\u673A\u5DF2\u6709\u73B0\u6210\u5B89\u88C5\u5305\uFF1A${i.path}\uFF08${Pa(i.sizeBytes)}\uFF09`):o.push(` \u4E5F\u53EF\u4EE5\u628A\u5B89\u88C5\u5305\u653E\u5230 ${Hs()}/\uFF0C\u4E0B\u6B21\u4F1A\u76F4\u63A5\u63D0\u793A\u672C\u673A\u8DEF\u5F84`),o.push(" 2. \u624B\u673A\u6253\u5F00 AutoJs6 \u2192 \u4FA7\u8FB9\u680F\u300C\u8FDE\u63A5\u7535\u8111\u300D\u2192 \u6253\u5F00\u300C\u670D\u52A1\u5668\u6A21\u5F0F\u300D\uFF08\u7AEF\u53E3 7347\uFF09"),e==="pc"?(o.push(` 3. \u5728\u672C\u673A\u6267\u884C\uFF1Axzh device connect <\u624B\u673AIP>${s?` \uFF08\u4F60\u521A\u8BD5\u7684\u662F ${s}\uFF09`:""}`),o.push(" \u624B\u673A IP \u770B\u300C\u8BBE\u7F6E \u2192 \u5173\u4E8E\u624B\u673A \u2192 \u72B6\u6001\u4FE1\u606F\u300D\uFF0C\u6216\u624B\u673A AutoJs6 \u670D\u52A1\u5668\u6A21\u5F0F\u9875\u9762\u4E0A\u663E\u793A\u7684\u5730\u5740")):(o.push(` 3. \u5728\u672C\u673A\uFF08\u624B\u673A\uFF09\u6267\u884C\uFF1Axzh device connect 127.0.0.1${s?` \uFF08\u4F60\u521A\u8BD5\u7684\u662F ${s}\uFF09`:""}`),o.push(" \u5728\u624B\u673A\u672C\u673A\u8FD0\u884C\u4E0D\u9700\u8981\u586B IP\uFF0C\u4E5F\u4E0D\u9700\u8981\u8054\u7F51")),o.push(""),o.push("\u8FDE\u4E0D\u4E0A\u65F6\u6309\u987A\u5E8F\u6392\u67E5\uFF1A"),o.push(" \xB7 AutoJs6 \u7684\u300C\u670D\u52A1\u5668\u6A21\u5F0F\u300D\u662F\u5426\u5DF2\u6253\u5F00\uFF08\u4E0D\u662F\u300C\u5BA2\u6237\u7AEF\u6A21\u5F0F\u300D\uFF09"),e==="pc"&&(o.push(" \xB7 \u624B\u673A\u4E0E\u7535\u8111\u662F\u5426\u5728\u540C\u4E00\u5C40\u57DF\u7F51\uFF08\u4E0D\u540C\u7F51\u6BB5 / \u624B\u673A\u6D41\u91CF / VPN \u90FD\u4E0D\u901A\uFF09"),o.push(" \xB7 \u8DEF\u7531\u5668\u662F\u5426\u5F00\u4E86\u300CAP \u9694\u79BB\u300D\uFF08\u540C WiFi \u4E0B\u8BBE\u5907\u4E92\u76F8\u4E0D\u901A\uFF0C\u662F\u6700\u5E38\u89C1\u7684\u539F\u56E0\uFF09")),o.push(" \xB7 \u7AEF\u53E3\u662F\u5426\u88AB\u6539\u8FC7\uFF08xzh \u9ED8\u8BA4\u8FDE 7347\uFF0C\u4E0E AutoJs6 \u670D\u52A1\u5668\u6A21\u5F0F\u9ED8\u8BA4\u4E00\u81F4\uFF09"),o.push(" \xB7 \u624B\u673A\u7AEF AutoJs6 \u662F\u5426\u88AB\u7CFB\u7EDF\u540E\u53F0\u9650\u5236\uFF08OPPO/\u5C0F\u7C73\u7B49\u9700\u5141\u8BB8\u540E\u53F0\u8FD0\u884C\uFF09"),o.join(`
|
|
83
|
+
`)}function ar(r=60,e=""){return["// \u7531 xzh \u751F\u6210\uFF1A\u8BFB\u53D6\u5F53\u524D\u754C\u9762\u5185\u5BB9\uFF08\u6A21\u677F\u89C1 src/device/ui-dump.ts\uFF09","try {",` console.log("\u3010\u5F00\u59CB\u3011${e}");`," auto.waitFor(8000);"," if (!auto.isRunning()) {",' console.log("\u3010\u754C\u9762\u3011\u65E0\u969C\u788D\u672A\u5C31\u7EEA\uFF0C\u65E0\u6CD5\u8BFB\u53D6\u754C\u9762");'," exit();"," }",' console.log("\u3010\u754C\u9762\u3011" + currentPackage() + " / " + currentActivity());'," var lines = [];"," classNameMatches(/.*/).find().forEach(function (el) {"," try {"," var t = el.text();"," var d = el.desc();"," var label = (t && t.trim()) || (d && d.trim());"," if (!label) return;",' if (label.indexOf("\u3010") === 0) return;'," var b = el.bounds();",' lines.push(el.className().replace(/^android\\.widget\\./, "") + " | " + label +',' " | click=" + (el.clickable() ? "Y" : "N") +',' " | [" + b.left + "," + b.top + "," + b.right + "," + b.bottom + "]");'," } catch (e) {}"," });",` console.log("\u3010\u63A7\u4EF6\u3011\u5171 " + lines.length + " \u4E2A" + (lines.length > ${r} ? "\uFF08\u53EA\u5217\u524D ${r} \u4E2A\uFF09" : ""));`,` lines.slice(0, ${r}).forEach(function (line) { console.log("\u3010\u63A7\u4EF6\u3011" + line); });`," if (lines.length < 3) {",' console.log("\u3010\u5224\u65AD\u3011\u53EF\u7528\u63A7\u4EF6\u6570=" + lines.length + " \u21D2 \u8BE5\u754C\u9762\u65E0\u6CD5\u901A\u8FC7\u65E0\u969C\u788D\u8BFB\u53D6");',' console.log("\u3010\u539F\u56E0\u3011\u5FAE\u4FE1\u3001\u5E94\u7528\u5206\u8EAB\u3001\u6E38\u620F\u7B49\u81EA\u7ED8/\u8DE8\u7528\u6237\u754C\u9762\u4E0D\u66B4\u9732\u65E0\u969C\u788D\u8282\u70B9\uFF08\u5E94\u7528\u5206\u8EAB\u8DD1\u5728\u72EC\u7ACB\u7528\u6237\u7A7A\u95F4\uFF09");',' console.log("\u3010\u63D0\u9192\u3011\u6B64\u65F6 currentPackage()/currentActivity() **\u4E5F\u4E0D\u53EF\u4FE1**\uFF08\u540C\u6837\u6765\u81EA\u65E0\u969C\u788D\u4E8B\u4EF6\uFF0C\u53EF\u80FD\u662F\u8FC7\u671F\u4FE1\u606F\uFF09");',' console.log("\u3010\u5EFA\u8BAE\u3011\u6539\u7528 device_screenshot \u622A\u56FE\uFF1A\u8BA9\u5177\u5907\u89C6\u89C9\u80FD\u529B\u7684\u6A21\u578B\u770B\u56FE\u5224\u65AD\uFF0C\u6216\u628A\u56FE\u7ED9\u7528\u6237\u770B\uFF1B\u518D\u6309\u5750\u6807 click(x,y) \u64CD\u4F5C");'," }",' console.log("\u3010\u5B8C\u6210\u3011\u754C\u9762\u5185\u5BB9\u5DF2\u8F93\u51FA");',"} catch (e) {",' console.log("\u3010\u754C\u9762\u3011\u8BFB\u53D6\u5931\u8D25\uFF1A" + e);',"}",""].join(`
|
|
84
|
+
`)}var t={reset:"\x1B[0m",bold:"\x1B[1m",dim:"\x1B[2m",italic:"\x1B[3m",underline:"\x1B[4m",inverse:"\x1B[7m",black:"\x1B[30m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",cyan:"\x1B[36m",white:"\x1B[37m",gray:"\x1B[90m",brightRed:"\x1B[91m",brightGreen:"\x1B[92m",brightYellow:"\x1B[93m",brightBlue:"\x1B[94m",brightMagenta:"\x1B[95m",brightCyan:"\x1B[96m",brightWhite:"\x1B[97m",bgRed:"\x1B[41m",bgGreen:"\x1B[42m",bgYellow:"\x1B[43m",bgBlue:"\x1B[44m",bgMagenta:"\x1B[45m",bgCyan:"\x1B[46m",bgGray:"\x1B[100m"},se={hide:"\x1B[?25l",show:"\x1B[?25h",up:(r=1)=>`\x1B[${r}A`,down:(r=1)=>`\x1B[${r}B`,right:(r=1)=>`\x1B[${r}C`,left:(r=1)=>`\x1B[${r}D`,to:(r,e)=>`\x1B[${r};${e}H`,col:r=>`\x1B[${r}G`,clearLine:"\x1B[2K",clearToEnd:"\x1B[0K",clearScreen:"\x1B[2J"},qt={enterAlt:"\x1B[?1049h",exitAlt:"\x1B[?1049l",save:"\x1B[s",restore:"\x1B[u"};function Ra(r){return r>=4352&&r<=4447||r>=11904&&r<=12350||r>=12353&&r<=13311||r>=13312&&r<=19903||r>=19968&&r<=40959||r>=40960&&r<=42191||r>=44032&&r<=55203||r>=63744&&r<=64255||r>=65072&&r<=65103||r>=65280&&r<=65376||r>=65504&&r<=65510||r>=127744&&r<=129791||r>=131072&&r<=262141}function N(r){let e=0;for(let n=0;n<r.length;n++){let s=r.codePointAt(n);if(s!==void 0){if(s===27){let i=/^\x1b\[[0-9;?]*[ -/]*[@-~]/.exec(r.slice(n));if(i){n+=i[0].length-1;continue}let o=/^\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)?/.exec(r.slice(n));if(o){n+=o[0].length-1;continue}}if(s>65535&&n++,s===9){e+=8-e%8;continue}s<32||s>=768&&s<=879||s>=8400&&s<=8447||s>=65024&&s<=65039||(e+=Ra(s)?2:1)}}return e}function Ma(r){return/^\x1b\[[0-9;]*m$/.test(r)}function st(r,e){let n=[];for(let s of r.split(`
|
|
85
|
+
`)){if(s===""){n.push("");continue}let i="",o=0,a=[],l=s.match(/\x1b\[[0-9;?]*[A-Za-z]|./gu)??[];for(let c of l){let u=N(c);o+u>e&&i!==""&&(n.push(a.length>0?`${i}${t.reset}`:i),i=a.join(""),o=0),Ma(c)&&(c===t.reset||c==="\x1B[m"?a=[]:a.push(c)),i+=c,o+=u}n.push(a.length>0?`${i}${t.reset}`:i)}return n}function O(r,e){if(N(r)<=e)return r;let n=r.match(/\x1b\[[0-9;?]*[A-Za-z]|[\s\S]/gu)??[],s="",i=0,o=Math.max(0,e-1);for(let a of n){let l=N(a);if(i+l>o)break;s+=a,i+=l}return`${s}${t.reset}\u2026`}function bt(r,e){let n=N(r);return r+" ".repeat(Math.max(0,e-n))}function ge(r){return r&&r.replace(/\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)?/g,"").replace(/\x1b\[[0-9;?]*[ -/]*[@-~]/g,"").replace(/\x1b[@-Z\\-_]/g,"").replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g,"")}async function Vs(r){let e=qa(r);if(e.error){j(e.error);return}switch(e.sub){case"serve":case"start":return Ia(e);case"connect":return Da(e);case"apk":return Oa(e);case"check":return Na(e);case"shot":case"screenshot":return La(e);case"status":return Ba(e);case"list":case"ls":case"devices":return Ua(e);case"push":case"save":return Ws(e,"save");case"run":return Ws(e,"run");case"stop":return Fa(e);case"logs":case"log":return za(e);case"help":case"-h":case"--help":case void 0:Ja();return;default:j(`\u672A\u77E5\u5B50\u547D\u4EE4\uFF1A${e.sub}`,"\u53EF\u7528\uFF1Aserve / status / list / push / run / stop / logs");return}}async function Ia(r){let e=r.port,n=new ze({port:e,baseDir:process.cwd(),onStatus:o=>process.stdout.write(`${t.gray}${o}${t.reset}
|
|
86
86
|
`),onDeviceAttach:o=>process.stdout.write(`
|
|
87
87
|
${t.green}\u25CF${t.reset} \u8BBE\u5907\u5DF2\u8FDE\u63A5\uFF1A${t.bold}${o.name}${t.reset}${t.gray}\uFF08${o.kind==="autojs6"?"AutoJs6":"AutoX.js"}${o.appVersionCode?` versionCode ${o.appVersionCode}`:""}\uFF09${t.reset}
|
|
88
88
|
`),onDeviceDetach:o=>process.stdout.write(`
|
|
89
89
|
${t.yellow}\u25CB${t.reset} \u8BBE\u5907\u5DF2\u65AD\u5F00\uFF1A${o.name}
|
|
90
90
|
`),onLog:o=>process.stdout.write(`${t.gray}[${o.device}]${t.reset} ${o.text}
|
|
91
|
-
`)}),s=!1;try{await
|
|
91
|
+
`)}),s=!1;try{await n.start(),s=!0}catch(o){process.stdout.write(`
|
|
92
92
|
${t.yellow}\u26A0 AutoX.js \u76D1\u542C\u672A\u542F\u52A8${t.reset}
|
|
93
93
|
${t.gray}${o instanceof Error?o.message:String(o)}${t.reset}
|
|
94
94
|
`)}s&&process.stdout.write(`
|
|
95
95
|
${t.bold}\u8BBE\u5907\u6865\u5DF2\u542F\u52A8${t.reset}
|
|
96
96
|
${t.gray}AutoX.js \u76D1\u542C\u7AEF\u53E3\uFF1A${t.reset}${e}
|
|
97
|
-
`+
|
|
98
|
-
`).join(""));let i=!1;try{await
|
|
97
|
+
`+n.urls().map(o=>` ${t.gray}\u624B\u673A AutoX.js \u586B\uFF1A${t.reset}${t.brightGreen}${o}${t.reset}
|
|
98
|
+
`).join(""));let i=!1;try{await n.startAutoJs6Listener(),i=!0}catch(o){process.stdout.write(`
|
|
99
99
|
${t.yellow}\u26A0 AutoJs6 \u76D1\u542C\u672A\u542F\u52A8${t.reset}
|
|
100
100
|
${t.gray}${o instanceof Error?o.message:String(o)}${t.reset}
|
|
101
101
|
${t.gray}\uFF08AutoX.js \u90A3\u4FA7\u4E0D\u53D7\u5F71\u54CD\uFF0C\u4ECD\u53EF\u6B63\u5E38\u4F7F\u7528\uFF09${t.reset}
|
|
102
102
|
`)}if(i&&process.stdout.write(` ${t.gray}AutoJs6 \u76D1\u542C\u7AEF\u53E3\uFF1A${t.reset}${fe}${t.gray}\uFF08\u624B\u673A\u70B9\u300C\u8FDE\u63A5\u7535\u8111 \u2192 \u5BA2\u6237\u7AEF\u6A21\u5F0F\u300D\u586B\u4E0B\u9762\u5730\u5740\uFF09${t.reset}
|
|
103
|
-
`+
|
|
104
|
-
`).join("")),!s&&!i){j("\u8BBE\u5907\u6865\u6CA1\u80FD\u542F\u52A8\uFF1A\u4E24\u4E2A\u76D1\u542C\u7AEF\u53E3\u90FD\u4E0D\u53EF\u7528\u3002","\u5206\u522B\u88AB VSCode \u7684 Auto.js \u63D2\u4EF6\uFF089317\uFF09\u4E0E AutoJs6 \u6269\u5C55\uFF086347\uFF09\u5360\u7528\u65F6\u4F1A\u8FD9\u6837 \u2014\u2014 \u7981\u7528\u5176\u4E00\u5373\u53EF\u3002"),await
|
|
103
|
+
`+n.listenerUrls().map(o=>` ${t.gray}\u624B\u673A AutoJs6 \u586B\uFF1A${t.reset}${t.brightGreen}${o}${t.reset}
|
|
104
|
+
`).join("")),!s&&!i){j("\u8BBE\u5907\u6865\u6CA1\u80FD\u542F\u52A8\uFF1A\u4E24\u4E2A\u76D1\u542C\u7AEF\u53E3\u90FD\u4E0D\u53EF\u7528\u3002","\u5206\u522B\u88AB VSCode \u7684 Auto.js \u63D2\u4EF6\uFF089317\uFF09\u4E0E AutoJs6 \u6269\u5C55\uFF086347\uFF09\u5360\u7528\u65F6\u4F1A\u8FD9\u6837 \u2014\u2014 \u7981\u7528\u5176\u4E00\u5373\u53EF\u3002"),await n.stop(),process.exitCode=1;return}process.stdout.write(` ${t.gray}\u624B\u673A\u8FDE\u4E0A\u540E\u5373\u53EF\u63A8\u9001\u811A\u672C\uFF1B\u65E5\u5FD7\u4F1A\u663E\u793A\u5728\u8FD9\u91CC\u3002\u4FDD\u6301\u672C\u7A97\u53E3\u5F00\u542F\uFF0C\u505C\u6B62\uFF1ACtrl+C${t.reset}
|
|
105
105
|
|
|
106
|
-
`),await
|
|
106
|
+
`),await Ys(()=>n.stop())}async function Da(r){let e=rt(),n=r.positional[0]?.trim()??"",s="",i=X;if(n){let a=/^(.*?)(?::(\d+))?$/.exec(n);s=(a?.[1]??n).trim();let l=a?.[2]?Number.parseInt(a[2],10):NaN;Number.isFinite(l)&&(i=l)}else e&&(s="127.0.0.1");if(!s){j("\u7F3A\u5C11\u624B\u673A\u5730\u5740",`\u7528\u6CD5\uFF1Axzh device connect <\u624B\u673AIP>[:\u7AEF\u53E3]\uFF08\u9ED8\u8BA4 ${X}\uFF09`),lr({where:e?"phone":"pc"});return}let o=new ze({port:r.port,baseDir:process.cwd(),onStatus:a=>process.stdout.write(`${t.gray}${a}${t.reset}
|
|
107
107
|
`),onDeviceAttach:a=>process.stdout.write(`
|
|
108
108
|
${t.green}\u25CF${t.reset} \u624B\u673A\u5DF2\u5C31\u7EEA\uFF1A${a.name}
|
|
109
109
|
`),onDeviceDetach:()=>process.stdout.write(`
|
|
@@ -111,23 +111,23 @@ ${t.yellow}\u25CB${t.reset} \u624B\u673A\u5DF2\u65AD\u5F00
|
|
|
111
111
|
`),onLog:a=>process.stdout.write(`${t.gray}[${a.device}]${t.reset} ${a.text}
|
|
112
112
|
`)});try{await o.connectAutoJs6(s,i)}catch(a){j(a instanceof Error?a.message:String(a));return}if(process.stdout.write(`
|
|
113
113
|
${t.bold}\u6B63\u5728\u8FDE\u63A5\u624B\u673A${t.reset} ${t.brightGreen}${s}:${i}${t.reset}${t.gray}\uFF08AutoJs6 \u670D\u52A1\u5668\u6A21\u5F0F\uFF09${t.reset}
|
|
114
|
-
`),await
|
|
114
|
+
`),await ja(o,6e3))process.stdout.write(`${t.green}\u2713${t.reset} \u5DF2\u8FDE\u63A5\u3002\u53EF\u4EE5\u63A8\u9001\u811A\u672C\u4E86\uFF1A${t.gray}xzh device run <\u811A\u672C>${t.reset}
|
|
115
115
|
|
|
116
116
|
`);else{let a=o.status().autojs6?.retrying??!1;if(process.stdout.write(a?`${t.yellow}\u6682\u65F6\u6CA1\u8FDE\u4E0A${t.reset}${t.gray}\uFF0C\u4ECD\u5728\u540E\u53F0\u6309\u9000\u907F\u91CD\u8BD5\u3002${t.reset}
|
|
117
117
|
|
|
118
118
|
`:`${t.red}\u8FDE\u4E0D\u4E0A\u624B\u673A${t.reset}${t.gray}\uFF08\u5DF2\u505C\u6B62\u91CD\u8BD5\uFF09\u3002${t.reset}
|
|
119
119
|
|
|
120
|
-
`),
|
|
120
|
+
`),lr({where:e?"phone":"pc",address:`${s}:${i}`}),!a){await o.stop(),process.exitCode=1;return}process.stdout.write(`
|
|
121
121
|
${t.gray}\uFF08Ctrl+C \u9000\u51FA\uFF09${t.reset}
|
|
122
122
|
|
|
123
|
-
`)}await
|
|
123
|
+
`)}await Ys(()=>o.stop())}async function Oa(r){lr({where:rt()?"phone":"pc"})}async function La(r){let e=new re(r.port),n=await e.devices();if(!n){j(`\u8FDE\u4E0D\u4E0A\u8BBE\u5907\u6865\uFF08127.0.0.1:${r.port}\uFF09`,"\u5148\u542F\u52A8\uFF1Axzh device serve");return}if(n.length===0){j("\u6CA1\u6709\u5DF2\u8FDE\u63A5\u7684\u624B\u673A","\u5148\u8BA9\u624B\u673A\u8FDE\u4E0A\uFF1A\u624B\u673A AutoJs6\u300C\u8FDE\u63A5\u7535\u8111 \u2192 \u5BA2\u6237\u7AEF\u6A21\u5F0F\u300D");return}process.stdout.write(`
|
|
124
124
|
${t.gray}\u6B63\u5728\u8BA9\u624B\u673A\u622A\u56FE\u2026\uFF08\u4F1A\u5F39\u7CFB\u7EDF\u6388\u6743\u6846\uFF0C\u811A\u672C\u4F1A\u81EA\u52A8\u70B9\u300C\u7ACB\u5373\u5F00\u59CB\u300D\uFF09${t.reset}
|
|
125
|
-
`);let s=await e.screenshot();if(!s.ok){j(s.message);return}let i=
|
|
125
|
+
`);let s=await e.screenshot();if(!s.ok){j(s.message);return}let i=r.positional.find(o=>!o.startsWith("-"))??cr.join(process.cwd(),`xzh-shot-${new Date().toISOString().replace(/[:.]/g,"-")}.jpg`);try{it.writeFileSync(i,s.data)}catch(o){j(`\u4FDD\u5B58\u622A\u56FE\u5931\u8D25\uFF1A${o instanceof Error?o.message:String(o)}`);return}process.stdout.write(`${t.green}\u2713 \u5DF2\u4FDD\u5B58${t.reset} ${i} ${t.gray}\uFF08${Math.round(s.data.length/1024)} KB\uFF0CJPEG\uFF09${t.reset}
|
|
126
126
|
|
|
127
|
-
`)}async function
|
|
128
|
-
`),"utf8");let i=(await e.logs(1))?.length??0,o=await e.exec("run",s);if(!o.ok){
|
|
127
|
+
`)}async function Na(r){let e=new re(r.port),n=await e.devices();if(!n){j(`\u8FDE\u4E0D\u4E0A\u8BBE\u5907\u6865\uFF08127.0.0.1:${r.port}\uFF09`,"\u5148\u542F\u52A8\uFF1Axzh device serve");return}if(n.length===0){j("\u6CA1\u6709\u5DF2\u8FDE\u63A5\u7684\u624B\u673A","\u5148\u8BA9\u624B\u673A\u8FDE\u4E0A\uFF1A\u624B\u673A AutoJs6\u300C\u8FDE\u63A5\u7535\u8111 \u2192 \u5BA2\u6237\u7AEF\u6A21\u5F0F\u300D");return}let s=cr.join(Xs.tmpdir(),`xzh-device-check-${Date.now()}.js`);it.writeFileSync(s,["// \u7531 xzh device check \u751F\u6210\uFF1A\u63A2\u6D4B\u65E0\u969C\u788D\u670D\u52A1\u4E0E\u8BBE\u5907\u4FE1\u606F","try {"," auto.waitFor(8000);"," if (!auto.isRunning()) {",' toastLog("\u3010\u4F53\u68C0\u3011\u65E0\u969C\u788D=\u672A\u5C31\u7EEA\uFF08\u670D\u52A1\u6CA1\u771F\u6B63\u8FD0\u884C\uFF09");'," } else {",' toastLog("\u3010\u4F53\u68C0\u3011\u65E0\u969C\u788D=\u5DF2\u5C31\u7EEA");',' toastLog("\u3010\u4F53\u68C0\u3011\u8BBE\u5907=" + device.brand + " " + device.model + " " + device.width + "x" + device.height);',' toastLog("\u3010\u4F53\u68C0\u3011\u5F53\u524D\u754C\u9762=" + currentPackage() + " / " + currentActivity());',' toastLog("\u3010\u4F53\u68C0\u3011\u7ED3\u8BBA=\u53EF\u4EE5\u64CD\u4F5C\u624B\u673A");'," }","} catch (e) {",' toastLog("\u3010\u4F53\u68C0\u3011\u65E0\u969C\u788D=\u5F02\u5E38\uFF1A" + e);',"}",""].join(`
|
|
128
|
+
`),"utf8");let i=(await e.logs(1))?.length??0,o=await e.exec("run",s);if(!o.ok){it.rmSync(s,{force:!0}),j(o.message??"\u4F53\u68C0\u811A\u672C\u672A\u80FD\u9001\u8FBE");return}process.stdout.write(`
|
|
129
129
|
${t.gray}\u5DF2\u5728\u624B\u673A\u4E0A\u8FD0\u884C\u4F53\u68C0\u811A\u672C\uFF0C\u7B49\u5F85\u56DE\u62A5\u2026\uFF08\u6700\u591A 15 \u79D2\uFF09${t.reset}
|
|
130
|
-
`);let a=Date.now()+15e3,l=[];for(;Date.now()<a&&(l=(await e.logs(40)??[]).map(u=>u.text).filter(u=>u.includes("\u3010\u4F53\u68C0\u3011")),!l.some(u=>u.includes("\u7ED3\u8BBA=")||u.includes("\u5F02\u5E38")||u.includes("\u672A\u5C31\u7EEA")));)await new Promise(u=>setTimeout(u,800));if(
|
|
130
|
+
`);let a=Date.now()+15e3,l=[];for(;Date.now()<a&&(l=(await e.logs(40)??[]).map(u=>u.text).filter(u=>u.includes("\u3010\u4F53\u68C0\u3011")),!l.some(u=>u.includes("\u7ED3\u8BBA=")||u.includes("\u5F02\u5E38")||u.includes("\u672A\u5C31\u7EEA")));)await new Promise(u=>setTimeout(u,800));if(it.rmSync(s,{force:!0}),l.some(c=>c.includes("\u7ED3\u8BBA=\u53EF\u4EE5\u64CD\u4F5C\u624B\u673A"))){process.stdout.write(`${t.green}\u2713 \u53EF\u4EE5\u64CD\u4F5C\u624B\u673A${t.reset}
|
|
131
131
|
`);for(let c of l)process.stdout.write(`${t.gray} ${c.replace("\u3010\u4F53\u68C0\u3011","")}${t.reset}
|
|
132
132
|
`);process.stdout.write(`${t.gray} \u63A5\u4E0B\u6765\u53EF\u4EE5\u76F4\u63A5\u8BA9\u7384\u732A\u64CD\u4F5C\u624B\u673A\uFF08\u5B83\u4F1A\u5148\u52A0\u8F7D autojs6 \u6280\u80FD\uFF09\u3002${t.reset}
|
|
133
133
|
|
|
@@ -141,46 +141,46 @@ ${t.bold}\u5904\u7406\u529E\u6CD5${t.reset}
|
|
|
141
141
|
3. \u82E5\u811A\u672C\u8FD8\u6302\u7740\uFF0C\u5148\u6536\u6389\u5B83\uFF1A${t.reset}xzh device stop
|
|
142
142
|
${t.gray} \u8BF4\u660E\uFF1A\u6CA1\u6709\u65E0\u969C\u788D\u670D\u52A1\uFF0Cxzh \u53EA\u80FD\u63A8\u9001\u811A\u672C\uFF0C\u65E0\u6CD5\u70B9\u51FB/\u6ED1\u52A8/\u8BFB\u53D6\u754C\u9762\u3002${t.reset}
|
|
143
143
|
|
|
144
|
-
`),process.exitCode=1}function
|
|
144
|
+
`),process.exitCode=1}function lr(r){let e=Jt(),n=Ht({where:r.where,abi:e.abi,address:r.address,localApk:Kt(e.abi)});process.stdout.write(`
|
|
145
145
|
${t.bold}${t.yellow}\u9700\u8981\u5148\u88C5 AutoJs6${t.reset}${t.gray}\uFF08${e.detail}\uFF09${t.reset}
|
|
146
146
|
|
|
147
|
-
`);for(let s of
|
|
147
|
+
`);for(let s of n.split(`
|
|
148
148
|
`))process.stdout.write(`${s?`${t.gray}${s}${t.reset}`:""}
|
|
149
149
|
`);process.stdout.write(`
|
|
150
|
-
`)}async function
|
|
150
|
+
`)}async function ja(r,e){let n=Date.now()+e;for(;Date.now()<n;){if(r.status().autojs6?.connected)return!0;await new Promise(s=>setTimeout(s,200))}return r.status().autojs6?.connected??!1}function Ys(r){return new Promise(e=>{let n=!1,s=()=>{n||(n=!0,process.stdout.write(`
|
|
151
151
|
${t.gray}\u6B63\u5728\u505C\u6B62\u8BBE\u5907\u6865\u2026${t.reset}
|
|
152
|
-
`),
|
|
152
|
+
`),r().finally(()=>e()))};process.once("SIGINT",s),process.once("SIGTERM",s)})}async function Ba(r){let n=await new re(r.port).status();if(!n){process.stdout.write(`${t.yellow}\u8BBE\u5907\u6865\u672A\u8FD0\u884C${t.reset}${t.gray}\uFF08127.0.0.1:${r.port}\uFF09${t.reset}
|
|
153
153
|
${t.gray}\u542F\u52A8\uFF1Axzh device serve${t.reset}
|
|
154
154
|
`),process.exitCode=1;return}process.stdout.write(`
|
|
155
155
|
${t.green}\u25CF${t.reset} \u8BBE\u5907\u6865\u8FD0\u884C\u4E2D
|
|
156
|
-
`),
|
|
157
|
-
`+
|
|
158
|
-
`).join("")),
|
|
159
|
-
`+
|
|
160
|
-
`).join("")),
|
|
161
|
-
`:
|
|
156
|
+
`),n.urls.length>0&&process.stdout.write(` ${t.gray}AutoX.js \u76D1\u542C\u7AEF\u53E3\uFF1A${t.reset}${n.port}
|
|
157
|
+
`+n.urls.map(s=>` ${t.gray}\u624B\u673A AutoX.js \u586B\uFF1A${t.reset}${s}
|
|
158
|
+
`).join("")),n.autojs6Listener&&process.stdout.write(` ${t.gray}AutoJs6 \u76D1\u542C\u7AEF\u53E3\uFF1A${t.reset}${n.autojs6Listener.port}
|
|
159
|
+
`+n.autojs6Listener.urls.map(s=>` ${t.gray}\u624B\u673A AutoJs6 \u586B\uFF1A${t.reset}${s}
|
|
160
|
+
`).join("")),n.autojs6&&process.stdout.write(` ${t.gray}AutoJs6 \u51FA\u7AD9\u8FDE\u63A5\uFF1A${t.reset}${n.autojs6.address} `+(n.autojs6.connected?`${t.green}\u5DF2\u8FDE\u63A5${t.reset}
|
|
161
|
+
`:n.autojs6.retrying?`${t.yellow}\u8FDE\u63A5\u4E2D/\u7B49\u5F85\u91CD\u8BD5${t.reset}
|
|
162
162
|
`:`${t.red}\u5DF2\u653E\u5F03\u91CD\u8BD5${t.reset}
|
|
163
|
-
`)),process.stdout.write(` ${t.gray}\u5DF2\u8FDE\u63A5\u8BBE\u5907\uFF1A${t.reset}${
|
|
164
|
-
`);for(let s of
|
|
163
|
+
`)),process.stdout.write(` ${t.gray}\u5DF2\u8FDE\u63A5\u8BBE\u5907\uFF1A${t.reset}${n.devices.length}
|
|
164
|
+
`);for(let s of n.devices){let i=s.kind==="autojs6"?"AutoJs6":"AutoX.js";process.stdout.write(` ${t.cyan}${s.name}${t.reset} ${t.gray}${s.id} \xB7 ${i}${s.appVersionCode?` versionCode ${s.appVersionCode}`:""}${t.reset}
|
|
165
165
|
`)}process.stdout.write(`
|
|
166
|
-
`)}async function
|
|
166
|
+
`)}async function Ua(r){let e=new re(r.port),n=await e.devices();if(!n){j(`\u8FDE\u4E0D\u4E0A\u8BBE\u5907\u6865\uFF08127.0.0.1:${r.port}\uFF09`,"\u5148\u542F\u52A8\uFF1Axzh device serve");return}if(n.length===0){let s=await e.status();process.stdout.write(`${t.yellow}\u5F53\u524D\u6CA1\u6709\u5DF2\u8FDE\u63A5\u7684\u8BBE\u5907${t.reset}
|
|
167
167
|
`),s?.autojs6Listener&&process.stdout.write(`${t.gray}\u624B\u673A AutoJs6\u300C\u8FDE\u63A5\u7535\u8111 \u2192 \u5BA2\u6237\u7AEF\u6A21\u5F0F\u300D\u586B\uFF1A${t.reset}${s.autojs6Listener.urls.join(" \u6216 ")}
|
|
168
168
|
`),s?.urls.length&&process.stdout.write(`${t.gray}\u624B\u673A AutoX.js \u586B\uFF1A${t.reset}${s.urls.join(" \u6216 ")}
|
|
169
169
|
`),s?.autojs6&&process.stdout.write(`${t.gray}AutoJs6 \u51FA\u7AD9\u8FDE\u63A5\uFF1A${t.reset}${s.autojs6.address} `+(s.autojs6.retrying?"\uFF08\u8FDE\u63A5\u4E2D/\u7B49\u5F85\u91CD\u8BD5\uFF09":"\uFF08\u5DF2\u653E\u5F03\u91CD\u8BD5\uFF09")+`
|
|
170
170
|
`);return}process.stdout.write(`
|
|
171
|
-
${t.bold}\u5DF2\u8FDE\u63A5\u8BBE\u5907\uFF08${
|
|
172
|
-
`);for(let s of
|
|
171
|
+
${t.bold}\u5DF2\u8FDE\u63A5\u8BBE\u5907\uFF08${n.length}\uFF09${t.reset}
|
|
172
|
+
`);for(let s of n){let i=s.kind==="autojs6"?"AutoJs6":"AutoX.js";process.stdout.write(` ${t.cyan}${s.name}${t.reset} ${t.gray}${s.id} \xB7 ${i}${s.appVersionCode?` versionCode ${s.appVersionCode}`:""}${t.reset}
|
|
173
173
|
`)}process.stdout.write(`
|
|
174
|
-
`)}async function
|
|
174
|
+
`)}async function Ws(r,e){let n=r.positional[0];if(!n){j(`\u7528\u6CD5\uFF1Axzh device ${r.sub} <\u811A\u672C\u6587\u4EF6>`);return}let i=await new re(r.port).exec(e,n,r.device);if(!i.ok){j(i.message??"\u6307\u4EE4\u5931\u8D25");return}let o=e==="run"?"\u5DF2\u63A8\u9001\u5230\u8BBE\u5907\u5E76\u5F00\u59CB\u8FD0\u884C":"\u5DF2\u4FDD\u5B58\u5230\u8BBE\u5907";process.stdout.write(`${t.green}\u2713${t.reset} ${o}\uFF1A${i.path}
|
|
175
175
|
${t.gray} \u76EE\u6807\u8BBE\u5907\uFF08${i.delivered}\uFF09\uFF1A${(i.devices??[]).join("\u3001")}${t.reset}
|
|
176
176
|
`+(e==="run"?`${t.gray} \u67E5\u770B\u8F93\u51FA\uFF1Axzh device logs${t.reset}
|
|
177
|
-
`:""))}async function
|
|
178
|
-
`)}async function
|
|
177
|
+
`:""))}async function Fa(r){let e=new re(r.port),n=r.all?void 0:r.positional[0],s=await e.exec(n?"stop":"stopAll",n,r.device);if(!s.ok){j(s.message??"\u505C\u6B62\u5931\u8D25");return}process.stdout.write(`${t.green}\u2713${t.reset} ${n?`\u5DF2\u505C\u6B62 ${n}`:"\u5DF2\u505C\u6B62\u5168\u90E8\u811A\u672C"}
|
|
178
|
+
`)}async function za(r){let n=await new re(r.port).logs(r.limit);if(!n){j(`\u8FDE\u4E0D\u4E0A\u8BBE\u5907\u6865\uFF08127.0.0.1:${r.port}\uFF09`,"\u5148\u542F\u52A8\uFF1Axzh device serve");return}if(n.length===0){process.stdout.write(`${t.gray}\u6682\u65E0\u8BBE\u5907\u65E5\u5FD7\u3002${t.reset}
|
|
179
179
|
`);return}process.stdout.write(`
|
|
180
|
-
${t.bold}\u6700\u8FD1 ${
|
|
181
|
-
`);for(let s of
|
|
180
|
+
${t.bold}\u6700\u8FD1 ${n.length} \u6761\u8BBE\u5907\u65E5\u5FD7${t.reset}
|
|
181
|
+
`);for(let s of n){let i=new Date(s.at).toLocaleTimeString();process.stdout.write(`${t.gray}${i} [${s.device}]${t.reset} ${s.text}
|
|
182
182
|
`)}process.stdout.write(`
|
|
183
|
-
`)}function
|
|
183
|
+
`)}function Ja(){process.stdout.write(`
|
|
184
184
|
${t.bold}xzh device${t.reset} ${t.gray}\u2014\u2014 \u4E0E\u624B\u673A\u4E0A\u7684 AutoX.js / Auto.js \u901A\u4FE1\uFF08\u8BBE\u5907\u6865\uFF09${t.reset}
|
|
185
185
|
|
|
186
186
|
${t.bold}\u7528\u6CD5${t.reset}
|
|
@@ -203,7 +203,7 @@ ${t.bold}\u7528\u6CD5${t.reset}
|
|
|
203
203
|
\u67E5\u770B\u6700\u8FD1\u7684\u8BBE\u5907\u65E5\u5FD7
|
|
204
204
|
|
|
205
205
|
${t.bold}\u901A\u7528\u53C2\u6570${t.reset}
|
|
206
|
-
${t.gray}--port <\u7AEF\u53E3>${t.reset} \u9ED8\u8BA4 ${
|
|
206
|
+
${t.gray}--port <\u7AEF\u53E3>${t.reset} \u9ED8\u8BA4 ${Pe}\uFF08\u4E5F\u53EF\u7528\u73AF\u5883\u53D8\u91CF XZH_DEVICE_PORT\uFF09
|
|
207
207
|
${t.gray}--device <\u540D\u79F0>${t.reset} \u53EA\u5BF9\u67D0\u53F0\u8BBE\u5907\u4E0B\u53D1\u6307\u4EE4\uFF08\u9ED8\u8BA4\u5168\u90E8\uFF09
|
|
208
208
|
|
|
209
209
|
${t.bold}\u4E24\u79CD\u8FDE\u63A5\u65B9\u5F0F${t.reset}
|
|
@@ -212,21 +212,21 @@ ${t.bold}\u4E24\u79CD\u8FDE\u63A5\u65B9\u5F0F${t.reset}
|
|
|
212
212
|
\xB7 ${t.green}AutoX.js${t.reset}\uFF1Axzh device serve \u4E4B\u540E\uFF0C\u624B\u673A\u7AEF\u586B\u5B83\u6253\u5370\u7684 ws:// \u5730\u5740\u3002
|
|
213
213
|
|
|
214
214
|
${t.bold}\u6CE8\u610F${t.reset}
|
|
215
|
-
\xB7 serve \u4F1A\u5360\u7528 ${
|
|
215
|
+
\xB7 serve \u4F1A\u5360\u7528 ${Pe} \u7AEF\u53E3\uFF1A${t.yellow}VSCode \u7684 Auto.js \u63D2\u4EF6\u7528\u540C\u4E00\u4E2A\u7AEF\u53E3\uFF0C\u4E24\u8005\u4E0D\u80FD\u540C\u65F6\u5F00${t.reset}\u3002
|
|
216
216
|
\xB7 \u53EA\u505A\u5355\u6587\u4EF6\u63A8\u9001\uFF08\u8FD0\u884C / \u4FDD\u5B58 / \u505C\u6B62 / \u65E5\u5FD7\uFF09\uFF0C\u9879\u76EE\u7EA7\uFF08zip\uFF09\u540C\u6B65\u8BF7\u7528 VSCode \u63D2\u4EF6\u3002
|
|
217
|
-
\xB7 \u7384\u732A\u4E0D\u6253\u5305 AutoJs6 \u5B89\u88C5\u5305\uFF08\u6BCF\u4E2A ABI \u7EA6 130 MB\uFF09\uFF0C\u7531 ${t.reset}${
|
|
217
|
+
\xB7 \u7384\u732A\u4E0D\u6253\u5305 AutoJs6 \u5B89\u88C5\u5305\uFF08\u6BCF\u4E2A ABI \u7EA6 130 MB\uFF09\uFF0C\u7531 ${t.reset}${or}${t.gray} \u81EA\u884C\u4E0B\u8F7D\u3002
|
|
218
218
|
\xB7 \u5728 xzh \u754C\u9762\u5185\u4E5F\u53EF\u4EE5\u64CD\u4F5C\uFF1A${t.green}/device${t.reset}\uFF08\u89C1 /help\uFF09\u3002
|
|
219
|
-
`)}var
|
|
219
|
+
`)}var Ka=new Set(["--port","--device","-n","--limit"]),Ha=new Set(["--all","-h","--help"]);function qa(r){let e={sub:void 0,positional:[],port:Ie(),limit:50,all:!1},n=[...r];for(e.sub=n.shift();n.length>0;){let s=n.shift();if(Ha.has(s)){s==="--all"?e.all=!0:e.positional.push(s);continue}if(s==="--"){e.positional.push(...n);break}let i=/^(--[a-z-]+)=(.*)$/.exec(s);if(i){if(Gs(e,i[1],i[2]),e.error)return e;continue}if(Ka.has(s)){let o=n.shift();if(o===void 0)return{...e,error:`${s} \u7F3A\u5C11\u53D6\u503C`};if(Gs(e,s,o),e.error)return e;continue}if(s.startsWith("-")&&s!=="-")return{...e,error:`\u672A\u77E5\u53C2\u6570\uFF1A${s}`};e.positional.push(s)}return e}function Gs(r,e,n){switch(e){case"--port":{let s=Number.parseInt(n,10);if(!Number.isFinite(s)||s<1||s>65535){r.error=`\u7AEF\u53E3\u4E0D\u5408\u6CD5\uFF1A${n}`;return}r.port=s;return}case"--device":r.device=n;return;case"-n":case"--limit":{let s=Number.parseInt(n,10);if(!Number.isFinite(s)||s<1){r.error=`\u6761\u6570\u4E0D\u5408\u6CD5\uFF1A${n}`;return}r.limit=s;return}default:r.error=`\u672A\u77E5\u53C2\u6570\uFF1A${e}`}}function j(r,e){process.stdout.write(`${t.red}\u2717 ${r}${t.reset}
|
|
220
220
|
`),e&&process.stdout.write(`${t.gray} ${e}${t.reset}
|
|
221
|
-
`),process.exitCode=1}var pe=v(require("fs")),
|
|
222
|
-
`)}catch{}return i}function
|
|
221
|
+
`),process.exitCode=1}var pe=v(require("fs")),Le=v(require("path"));var Zs=v(require("crypto")),V=v(require("fs")),ue=v(require("path"));function Wa(){return ue.join(T(),"sessions")}function Qs(r){let e=Zs.createHash("sha1").update(ue.resolve(r)).digest("hex").slice(0,10),n=ue.basename(r)||"project";return ue.join(Wa(),`${n}-${e}`)}function xt(r,e){let n=Qs(r);Z(n);let s=new Date().toISOString().replace(/[:.]/g,"-"),i=ue.join(n,`${s}.jsonl`);for(let o=2;V.existsSync(i);o++)i=ue.join(n,`${s}-${o}.jsonl`);try{V.writeFileSync(i,`${JSON.stringify({type:"meta",cwd:ue.resolve(r),version:e,startedAt:new Date().toISOString()})}
|
|
222
|
+
`)}catch{}return i}function ur(r,e){if(e.length!==0)try{let n=e.map(s=>{let i=s.images&&s.images.length>0?{...s,images:void 0,content:`${s.content??""}
|
|
223
223
|
|
|
224
224
|
[\u56FE\u7247\u5DF2\u7701\u7565\uFF1A\u4F1A\u8BDD\u6587\u4EF6\u4E0D\u4FDD\u5B58\u56FE\u7247]`}:s;return`${JSON.stringify({type:"message",message:i})}
|
|
225
|
-
`});V.appendFileSync(n
|
|
226
|
-
`)[0]??"";try{a=JSON.parse(l).startedAt??null}catch{}s.push({file:o,startedAt:a,bytes:V.statSync(o).size})}catch{}}return s}function
|
|
227
|
-
`))if(
|
|
225
|
+
`});V.appendFileSync(r,n.join(""))}catch{}}function dr(r){let e=Qs(r),n;try{n=V.readdirSync(e).filter(i=>i.endsWith(".jsonl")).sort().reverse()}catch{return[]}let s=[];for(let i of n){let o=ue.join(e,i);try{let a=null,l=V.readFileSync(o,"utf8").split(`
|
|
226
|
+
`)[0]??"";try{a=JSON.parse(l).startedAt??null}catch{}s.push({file:o,startedAt:a,bytes:V.statSync(o).size})}catch{}}return s}function pr(r){let e=[];try{for(let n of V.readFileSync(r,"utf8").split(`
|
|
227
|
+
`))if(n.trim())try{let s=JSON.parse(n);s.type==="message"&&s.message?.role&&e.push(s.message)}catch{}}catch{}return e}var ei={name:"code-explorer",description:'Fast subagent specialized in codebase exploration. Use it whenever the task requires searching across multiple files, directories, or patterns, or when the scope of code exploration is too large for a single read_file or grep call. When calling it, state the desired thoroughness level in the prompt: "quick" for a basic lookup, "medium" for moderate exploration, or "very thorough" for comprehensive analysis across multiple locations and naming conventions. \u5B83\u662F**\u53EA\u8BFB**\u5B50\u4EE3\u7406\uFF1A\u53EA\u56DE\u62A5\u53D1\u73B0\u4E0E\u8BC1\u636E\uFF0C\u4E0D\u4F1A\u4FEE\u6539\u4EFB\u4F55\u6587\u4EF6\uFF1B\u9700\u8981\u5B9E\u9645\u6539\u4EE3\u7801\u65F6\u4E0D\u8981\u6D3E\u5B83\uFF0C\u81EA\u5DF1\u52A8\u624B\u3002',toolNames:["read_file","list_dir","glob","grep","list_skills","load_skill"],systemPrompt({cwd:r,description:e,prompt:n}){return`\u4F60\u662F\u300C\u7384\u732A\u300D\u6D3E\u51FA\u7684 **code-explorer\uFF08\u4EE3\u7801\u5E93\u63A2\u7D22\uFF09\u5B50\u4EE3\u7406**\uFF0C\u53EA\u505A\u8C03\u7814\u5E76\u56DE\u62A5\u53D1\u73B0\u3002
|
|
228
228
|
|
|
229
|
-
\u5DE5\u4F5C\u76EE\u5F55\uFF1A${
|
|
229
|
+
\u5DE5\u4F5C\u76EE\u5F55\uFF1A${r}
|
|
230
230
|
\u5B50\u4EFB\u52A1\uFF1A${e}
|
|
231
231
|
\u6743\u9650\uFF1A**\u53EA\u8BFB**\u3002\u4F60\u53EA\u6709 read_file / list_dir / glob / grep \u7B49\u8BFB\u53D6\u4E0E\u641C\u7D22\u5DE5\u5177\uFF0C
|
|
232
232
|
**\u4E0D\u8981\u5C1D\u8BD5\u4FEE\u6539\u4EFB\u4F55\u6587\u4EF6\u6216\u6267\u884C\u547D\u4EE4**\uFF1B\u53D1\u73B0\u9700\u8981\u6539\u52A8\u7684\u5730\u65B9\uFF0C\u5199\u8FDB\u62A5\u544A\u7531\u4E3B\u4EE3\u7406\u5904\u7406\u3002
|
|
@@ -251,9 +251,9 @@ ${t.bold}\u6CE8\u610F${t.reset}
|
|
|
251
251
|
- **\u98CE\u9669\u6216\u5F85\u786E\u8BA4\u9879**\uFF1A\u5982\u6709\u3002
|
|
252
252
|
|
|
253
253
|
## \u4EFB\u52A1\u63CF\u8FF0
|
|
254
|
-
${
|
|
254
|
+
${n.trim()}`}};var ti={name:"test-runner",description:"Run the project's tests (full suite or specific files) and report a verified pass/fail summary: failing cases, causes with exact file:line references, and the exact commands to reproduce. Use it whenever test output would be long, when you need to know whether the suite passes after your changes, or when you want failures triaged (assertion vs environment vs code bug) without reading raw logs yourself. \u5B83\u662F**\u53EA\u8FD0\u884C\u3001\u4E0D\u4FEE\u6539**\u7684\u5B50\u4EE3\u7406\uFF1A\u4E0D\u6539\u4EE3\u7801\u3001\u4E0D\u88C5\u4F9D\u8D56\u3001\u4E0D\u505A git \u5199\u64CD\u4F5C\uFF1B\u9700\u8981\u6839\u636E\u5931\u8D25\u4FEE\u6539\u4EE3\u7801\u65F6\u4E0D\u8981\u6D3E\u5B83\uFF0C\u81EA\u5DF1\u52A8\u624B\u3002\u5728 prompt \u91CC\u5199\u6E05\u695A\u8981\u8DD1\u54EA\u4E9B\u6D4B\u8BD5\uFF08\u5168\u90E8\u8FD8\u662F\u6307\u5B9A\u6587\u4EF6\uFF09\u4E0E\u4F60\u5DF2\u77E5\u7684\u6D4B\u8BD5\u547D\u4EE4\uFF08\u5982\u679C\u6709\u7684\u8BDD\uFF09\u3002",toolNames:["bash","read_file","glob","grep","list_dir"],systemPrompt({cwd:r,description:e,prompt:n}){return`\u4F60\u662F\u300C\u7384\u732A\u300D\u6D3E\u51FA\u7684 **test-runner\uFF08\u6D4B\u8BD5\u8FD0\u884C\uFF09\u5B50\u4EE3\u7406**\uFF0C\u53EA\u8D1F\u8D23\u8FD0\u884C\u6D4B\u8BD5\u3001\u89E3\u8BFB\u7ED3\u679C\u5E76\u6C47\u62A5\u3002
|
|
255
255
|
|
|
256
|
-
\u5DE5\u4F5C\u76EE\u5F55\uFF1A${
|
|
256
|
+
\u5DE5\u4F5C\u76EE\u5F55\uFF1A${r}
|
|
257
257
|
\u5B50\u4EFB\u52A1\uFF1A${e}
|
|
258
258
|
\u6743\u9650\uFF1A**\u53EA\u8FD0\u884C\u3001\u4E0D\u4FEE\u6539**\u3002\u4F60\u6709 bash\uFF08\u8DD1\u6D4B\u8BD5\uFF09\u4E0E read_file / glob / grep / list_dir\uFF08\u5B9A\u4F4D\u4E0E\u786E\u8BA4\uFF09\uFF0C
|
|
259
259
|
\u4F46**\u7EDD\u5BF9\u4E0D\u8981**\uFF1A\u4FEE\u6539\u6216\u521B\u5EFA\u4EFB\u4F55\u6587\u4EF6\u3001git commit/checkout/stash\u3001\u5B89\u88C5\u4F9D\u8D56
|
|
@@ -280,8 +280,8 @@ ${r.trim()}`}};var ei={name:"test-runner",description:"Run the project's tests (
|
|
|
280
280
|
- **\u5EFA\u8BAE\u4E0B\u4E00\u6B65**\uFF1A\u7B80\u77ED\u6307\u65B9\u5411\uFF08\u8BE5\u770B\u54EA\u4E2A\u6587\u4EF6\uFF09\uFF0C**\u4E0D\u8981\u81EA\u5DF1\u52A8\u624B\u4FEE**\u3002
|
|
281
281
|
|
|
282
282
|
## \u4EFB\u52A1\u63CF\u8FF0
|
|
283
|
-
${
|
|
284
|
-
`),
|
|
283
|
+
${n.trim()}`}};var ot=[ei,ti],hr=ot[0].name;function St(){return ot.map(r=>r.name)}function Wt(r){let e=r?.trim();return e?ot.find(n=>n.name===e):ot.find(n=>n.name===hr)}var Ga=ot.map(r=>`- ${r.name}: ${r.description}`).join(`
|
|
284
|
+
`),ni={name:"task",description:`\u6D3E\u751F\u4E00\u4E2A**\u5B50\u4EE3\u7406**\u53BB\u72EC\u7ACB\u5B8C\u6210\u4E00\u4EF6\u5B50\u4EFB\u52A1\uFF0C\u53EA\u628A\u6700\u7EC8\u7ED3\u8BBA\u8FD4\u56DE\u7ED9\u4F60\uFF08\u4E2D\u95F4\u8FC7\u7A0B\u4E0D\u8FDB\u4F60\u7684\u4E0A\u4E0B\u6587\uFF09\u3002
|
|
285
285
|
|
|
286
286
|
**\u4EC0\u4E48\u65F6\u5019\u8BE5\u7528\u5B83**\uFF08\u6EE1\u8DB3\u4EFB\u4E00\u6761\u5C31\u8BE5\u7528\uFF0C\u4E0D\u8981\u56E0\u4E3A\u300C\u81EA\u5DF1\u505A\u66F4\u7701\u4E8B\u300D\u800C\u7565\u8FC7\uFF09\uFF1A
|
|
287
287
|
\xB7 \u4E00\u4EF6\u5B50\u4EFB\u52A1\u9884\u8BA1\u8981\u8BFB **3 \u4E2A\u4EE5\u4E0A\u6587\u4EF6**\uFF1B
|
|
@@ -293,92 +293,94 @@ ${r.trim()}`}};var st=[Qs,ei],hn=st[0].name;function xt(){return st.map(n=>n.nam
|
|
|
293
293
|
**prompt \u5FC5\u987B\u81EA\u5305\u542B**\uFF08\u5B50\u4EE3\u7406\u770B\u4E0D\u5230\u6211\u4EEC\u7684\u5BF9\u8BDD\u5386\u53F2\uFF09\uFF1A\u80CC\u666F\u3001\u76EE\u6807\u3001\u5DF2\u77E5\u7EBF\u7D22\u3001\u671F\u671B\u7684\u8F93\u51FA\u683C\u5F0F\u4E0E\u8FB9\u754C\uFF08\u54EA\u4E9B\u4E8B\u4E0D\u8981\u505A\uFF09\u3002
|
|
294
294
|
|
|
295
295
|
\u53EF\u7528\u5B50\u4EE3\u7406\uFF1A
|
|
296
|
-
${
|
|
296
|
+
${Ga}
|
|
297
297
|
|
|
298
|
-
\u5B50\u4EE3\u7406\u4E0D\u4F1A\u5199\u5165\u9879\u76EE\u8BB0\u5FC6 \u2014\u2014 \u8BB0\u5FC6\u7531\u4F60\u6839\u636E\u5B83\u7684\u7ED3\u8BBA\u7EDF\u4E00\u8BB0\u5F55\u3002`,parallelSafe:!0,parameters:{type:"object",properties:{subagent_name:{type:"string",enum:
|
|
298
|
+
\u5B50\u4EE3\u7406\u4E0D\u4F1A\u5199\u5165\u9879\u76EE\u8BB0\u5FC6 \u2014\u2014 \u8BB0\u5FC6\u7531\u4F60\u6839\u636E\u5B83\u7684\u7ED3\u8BBA\u7EDF\u4E00\u8BB0\u5F55\u3002`,parallelSafe:!0,parameters:{type:"object",properties:{subagent_name:{type:"string",enum:St(),description:`\u8981\u6D3E\u751F\u7684\u5B50\u4EE3\u7406\u540D\u79F0\uFF0C\u9ED8\u8BA4 ${hr}\u3002`},description:{type:"string",description:"\u5B50\u4EFB\u52A1\u7684\u4E00\u53E5\u8BDD\u8BF4\u660E\uFF083-5 \u4E2A\u8BCD\uFF09\uFF0C\u7528\u4E8E\u754C\u9762\u663E\u793A\u4E0E\u7ED3\u679C\u6458\u8981"},prompt:{type:"string",description:"\u4EA4\u7ED9\u5B50\u4EE3\u7406\u7684\u5B8C\u6574\u4EFB\u52A1\u63CF\u8FF0\u3002\u5B50\u4EE3\u7406\u770B\u4E0D\u5230\u5F53\u524D\u5BF9\u8BDD\uFF0C\u5FC5\u987B\u81EA\u5305\u542B\uFF1A\u80CC\u666F\u3001\u76EE\u6807\u3001\u5DF2\u77E5\u7EBF\u7D22\u3001\u8981\u4EA7\u51FA\u7684\u7ED3\u8BBA\u4E0E\u683C\u5F0F\u3001\u4E0D\u8981\u505A\u4EC0\u4E48\u3002"}},required:["description","prompt"]},async execute(r,e){if(!e.spawnAgent)return{ok:!1,content:"\u9519\u8BEF\uFF1A\u5F53\u524D\u73AF\u5883\u4E0D\u652F\u6301\u6D3E\u751F\u5B50\u4EE3\u7406\u3002"};let n=typeof r.description=="string"?r.description.trim():"",s=typeof r.prompt=="string"?r.prompt.trim():"";if(!n||!s)return{ok:!1,content:"\u9519\u8BEF\uFF1Adescription \u4E0E prompt \u5747\u4E0D\u80FD\u4E3A\u7A7A\u3002"};let i=typeof r.subagent_name=="string"?r.subagent_name.trim():"";if(i&&!Wt(i))return{ok:!1,content:`\u9519\u8BEF\uFF1A\u672A\u77E5\u5B50\u4EE3\u7406 "${i}"\u3002\u53EF\u7528\uFF1A${St().join("\u3001")}`};try{return await e.spawnAgent({subagentName:i||void 0,description:n,prompt:s})}catch(o){return{ok:!1,content:`\u5B50\u4EE3\u7406\u6267\u884C\u5931\u8D25\uFF1A${o instanceof Error?o.message:String(o)}`}}}};var ri=require("child_process"),Gt=v(require("path"));var at=3e4,Xa=12e4,Va=6e5,Ya=1500,Za=`[\u8F93\u51FA\u88AB\u622A\u65AD] \u5355\u6761\u547D\u4EE4\u7684\u6355\u83B7\u4E0A\u9650\u4E3A ${at} \u5B57\u7B26\uFF0C**\u8D85\u51FA\u90E8\u5206\u5DF2\u4E22\u5F03** \u2014\u2014 \u4E0B\u9762\u7684\u5185\u5BB9\u5E76\u4E0D\u5B8C\u6574\uFF08\u7ED3\u5C3E\u7684\u62A5\u9519\u4E5F\u53EF\u80FD\u5728\u91CC\u9762\uFF09\u3002\u9700\u8981\u5B8C\u6574\u5185\u5BB9\u65F6\u8BF7\u628A\u547D\u4EE4\u62C6\u5C0F\uFF0C\u6216\u5148\u91CD\u5B9A\u5411\u5230\u6587\u4EF6\u518D\u7528 read_file / grep \u5B9A\u4F4D\u3002`;function Qa(r,e,n,s){return new Promise(i=>{if(s?.aborted){i({stdout:"",stderr:"\u547D\u4EE4\u5DF2\u88AB\u4E2D\u65AD\uFF08\u5728\u6267\u884C\u524D\uFF09\u3002",code:null,timedOut:!1,aborted:!0,truncated:!1});return}let o=process.platform==="win32",a=o?"cmd.exe":process.env.SHELL||"bash",c=(0,ri.spawn)(a,o?["/d","/s","/c",r]:["-lc",r],{cwd:e,env:process.env,windowsHide:!0,detached:!o}),u="",p="",d=!1,h=!1,m=!1,f=!1,y,g=x=>{let P=c.pid;if(P!==void 0)try{process.kill(-P,x)}catch{try{c.kill(x)}catch{}}},S=x=>{m||(m=!0,clearTimeout(H),y&&clearTimeout(y),s?.removeEventListener("abort",A),i({stdout:u,stderr:p,code:x,timedOut:d,aborted:h,truncated:f}))},$=()=>{y&&clearTimeout(y),y=setTimeout(()=>S(null),Ya)},A=()=>{h=!0,g("SIGKILL"),$()},H=setTimeout(()=>{d=!0,g("SIGKILL"),$()},n);s?.addEventListener("abort",A,{once:!0}),c.stdout?.on("data",x=>{if(u.length>=at){f=!0;return}u+=x.toString(),u.length>=at&&(f=!0)}),c.stderr?.on("data",x=>{if(p.length>=at){f=!0;return}p+=x.toString(),p.length>=at&&(f=!0)}),c.on("error",x=>{p+=String(x),S(-1)}),c.on("exit",x=>{y&&clearTimeout(y),y=setTimeout(()=>S(x),120)}),c.on("close",x=>S(x))})}var si={name:"bash",description:"\u5728\u7EC8\u7AEF\u4E2D\u6267\u884C shell \u547D\u4EE4\u5E76\u8FD4\u56DE\u8F93\u51FA\u3002\u9002\u7528\u4E8E\u8FD0\u884C\u6D4B\u8BD5\u3001\u6784\u5EFA\u3001\u5B89\u88C5\u4F9D\u8D56\u3001git \u64CD\u4F5C\u7B49\u3002\u547D\u4EE4\u5728\u975E\u4EA4\u4E92\u5F0F shell \u4E2D\u6267\u884C\uFF0C\u957F\u65F6\u95F4\u8FD0\u884C\u7684\u547D\u4EE4\u8BF7\u8BBE\u7F6E timeout\u3002",requiresConfirmation:!0,danger:!0,parameters:{type:"object",properties:{command:{type:"string",description:"\u8981\u6267\u884C\u7684 shell \u547D\u4EE4"},timeout:{type:"integer",description:"\u8D85\u65F6\u65F6\u95F4\uFF08\u6BEB\u79D2\uFF0C\u9ED8\u8BA4 120000\uFF0C\u6700\u5927 600000\uFF09"},cwd:{type:"string",description:"\u547D\u4EE4\u6267\u884C\u76EE\u5F55\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\uFF09"}},required:["command"]},async execute(r,e){let n=typeof r.command=="string"?r.command:"";if(!n.trim())return{ok:!1,content:"\u9519\u8BEF\uFF1Acommand \u4E0D\u80FD\u4E3A\u7A7A"};let s=e.cwd;if(typeof r.cwd=="string"&&r.cwd){let u=q(r.cwd);s=Gt.isAbsolute(u)?u:Gt.resolve(e.cwd,u)}let i=typeof r.timeout=="number"?r.timeout:Xa,o=Math.min(Math.max(1e3,i),Va),a=await Qa(n,s,o,e.signal),l=[];a.stdout.trim()&&l.push(a.stdout.trimEnd()),a.stderr.trim()&&l.push(`[stderr]
|
|
299
299
|
${a.stderr.trimEnd()}`),a.aborted&&l.push("[\u4E2D\u65AD] \u547D\u4EE4\u5DF2\u88AB\u7528\u6237\u4E2D\u65AD\uFF0C\u5176\u8FDB\u7A0B\u7EC4\u5DF2\u7EC8\u6B62\u3002"),a.timedOut&&l.push(`[\u8B66\u544A] \u547D\u4EE4\u5728 ${o}ms \u540E\u8D85\u65F6\u5E76\u88AB\u7EC8\u6B62\u3002`),l.push(`[\u9000\u51FA\u7801] ${a.code??"\u672A\u77E5"}`);let c=l.join(`
|
|
300
300
|
|
|
301
|
-
`);return{ok:a.code===0&&!a.timedOut&&!a.aborted,content:(a.truncated?`${
|
|
301
|
+
`);return{ok:a.code===0&&!a.timedOut&&!a.aborted,content:(a.truncated?`${Za}
|
|
302
302
|
|
|
303
|
-
`:"")+c.slice(0,
|
|
304
|
-
`))if(s.trim())try{let i=JSON.parse(s);typeof i.file=="string"&&
|
|
303
|
+
`:"")+c.slice(0,at),summary:a.aborted?"\u5DF2\u4E2D\u65AD":a.timedOut?"\u8D85\u65F6":a.code===0?"\u6267\u884C\u6210\u529F":`\u9000\u51FA\u7801 ${a.code}`}}};var E=v(require("fs")),M=v(require("path"));var ii=v(require("crypto")),F=v(require("fs")),de=v(require("path"));var el=50,tl=0;function lt(r){let e=ii.createHash("sha1").update(de.resolve(r)).digest("hex").slice(0,10),n=de.basename(r)||"project";return de.join(T(),"backups",`${n}-${e}`)}function oi(r){return de.join(lt(r),"manifest.jsonl")}function ai(r){try{let e=F.readFileSync(oi(r),"utf8"),n=[];for(let s of e.split(`
|
|
304
|
+
`))if(s.trim())try{let i=JSON.parse(s);typeof i.file=="string"&&n.push({file:i.file,backup:typeof i.backup=="string"?i.backup:null,time:typeof i.time=="string"?i.time:""})}catch{}return n}catch{return[]}}function li(r,e){for(Z(lt(r));e.length>el;){let n=e.shift();if(n?.backup)try{F.rmSync(de.join(lt(r),n.backup),{force:!0})}catch{}}F.writeFileSync(oi(r),e.map(n=>JSON.stringify(n)).join(`
|
|
305
305
|
`)+`
|
|
306
|
-
`)}function
|
|
307
|
-
`).map(
|
|
308
|
-
`),a=Math.max(1,
|
|
309
|
-
`),
|
|
310
|
-
\u2026\uFF08\u6587\u4EF6\u5171 ${o.length} \u884C\uFF0C\u5DF2\u622A\u65AD\uFF09`:"";return{ok:!0,content:u+
|
|
311
|
-
\u6CE8\u610F\uFF1A\u5FFD\u7565\u7A7A\u767D\u540E\u80FD\u627E\u5230\u76F8\u4F3C\u5185\u5BB9 \u2014\u2014 \u5F88\u53EF\u80FD\u53EA\u662F\u7F29\u8FDB\uFF08\u7A7A\u683C/\u5236\u8868\u7B26\uFF09\u6216\u6362\u884C\u4E0D\u4E00\u81F4\u3002\u8BF7\u91CD\u65B0 read_file \u8BE5\u533A\u57DF\uFF0C\u7528\u6587\u4EF6\u91CC**\u539F\u6837**\u7684\u7A7A\u767D\u91CD\u5199 search\u3002`),{ok:!1,content:`\u9519\u8BEF\uFF1A\u5728 ${
|
|
312
|
-
\u8BF7\u63D0\u4F9B\u66F4\u7CBE\u786E\u7684 search\uFF08\u5E26\u4E0A\u524D\u540E\u6587\uFF09\uFF0C\u6216\u663E\u5F0F\u8BBE\u7F6E replace_all: true \u4EE5\u66FF\u6362\u5168\u90E8\u5339\u914D\u3002`};let
|
|
306
|
+
`)}function mr(r,e){try{Z(lt(e));let n=ai(e),s=null;if(F.existsSync(r)){let i=!1;try{i=F.statSync(r).isFile()}catch{i=!1}if(i){let o=new Date().toISOString().replace(/[:.]/g,"-");s=`${de.basename(r)}.${o}-${++tl}.bak`,F.copyFileSync(r,de.join(lt(e),s))}}n.push({file:r,backup:s,time:new Date().toISOString()}),li(e,n)}catch{}}function ci(r){let e=ai(r),n=e[e.length-1];if(!n)return"\u6CA1\u6709\u53EF\u64A4\u9500\u7684\u4FEE\u6539\u3002";try{if(n.backup){let s=de.join(lt(r),n.backup);if(!F.existsSync(s))return`\u64A4\u9500\u5931\u8D25\uFF1A\u5FEB\u7167\u6587\u4EF6\u5DF2\u4E0D\u5B58\u5728\uFF08${n.backup}\uFF09\u3002`;F.copyFileSync(s,n.file)}else F.existsSync(n.file)&&F.rmSync(n.file,{force:!0})}catch(s){return`\u64A4\u9500\u5931\u8D25\uFF1A${s instanceof Error?s.message:String(s)}`}return e.pop(),li(r,e),n.backup?`\u2713 \u5DF2\u64A4\u9500\u5BF9 ${n.file} \u7684\u4FEE\u6539\uFF08\u6062\u590D\u4E3A\u4FEE\u6539\u524D\u7684\u5185\u5BB9\uFF09\u3002`:`\u2713 \u5DF2\u64A4\u9500\uFF1A\u5220\u9664\u4E86\u7384\u732A\u65B0\u5EFA\u7684\u6587\u4EF6 ${n.file}\u3002`}var ui=2e3,gr=2*1024*1024,fr=200,Xt=200,nl=1024*1024,di=2e3;function rl(r){return/\((?:[^()\\]|\\.)*[+*](?:[^()\\]|\\.)*\)\s*[+*{]/.test(r)?!0:/\((?:[^()\\]|\\.)*\|(?:[^()\\]|\\.)*\)\s*[+*{]/.test(r)}function mi(r){let e;try{e=E.statSync(r)}catch{return null}return e.isDirectory()?{problem:`\u9519\u8BEF\uFF1A${r} \u662F\u4E00\u4E2A\u76EE\u5F55\uFF0C\u4E0D\u80FD\u4F5C\u4E3A\u6587\u4EF6\u5199\u5165`}:e.isFile()?e.size>gr?{problem:`\u9519\u8BEF\uFF1A\u6587\u4EF6\u8FC7\u5927\uFF08${(e.size/1024/1024).toFixed(1)}MB\uFF09\uFF0C\u8D85\u51FA ${gr/1024/1024}MB \u9650\u5236`}:null:{problem:`\u9519\u8BEF\uFF1A${r} \u4E0D\u662F\u666E\u901A\u6587\u4EF6\uFF08\u8BBE\u5907\u6587\u4EF6 / \u7BA1\u9053 / socket\uFF09\uFF0C\u62D2\u7EDD\u5199\u5165`}}var fi=new Set([".git","node_modules","dist","build","out",".next",".nuxt",".cache","coverage",".venv","venv","__pycache__",".idea",".vscode-test"]);function sl(r){try{let e=M.join(r,".gitignore");return E.existsSync(e)?E.readFileSync(e,"utf8").split(`
|
|
307
|
+
`).map(n=>n.trim()).filter(n=>n&&!n.startsWith("#")&&!n.startsWith("!")):[]}catch{return[]}}function il(r,e){let n=r.split(M.sep).join("/"),s=M.basename(n);for(let i of e){let o=i.replace(/^\//,"").replace(/\/$/,"");if(o){if(o.includes("*")){try{if(Vt(o).test(n)||Vt(o).test(s))return!0}catch{}continue}if(n===o||n.startsWith(`${o}/`)||s===o)return!0}}return!1}function ct(r,e){let n=q(r);return M.isAbsolute(n)?n:M.resolve(e,n)}function ie(r,e=""){return typeof r=="string"?r:e}function pi(r,e){return typeof r=="number"&&Number.isFinite(r)?r:e}function $r(r){return r.subarray(0,8e3).includes(0)}var gi={name:"read_file",description:"\u8BFB\u53D6\u6587\u672C\u6587\u4EF6\u5185\u5BB9\uFF0C\u8FD4\u56DE\u5E26\u884C\u53F7\u7684\u6587\u672C\u3002\u652F\u6301\u901A\u8FC7 offset/limit \u8BFB\u53D6\u6307\u5B9A\u884C\u8303\u56F4\u3002\u5728\u4FEE\u6539\u6587\u4EF6\u524D\u5E94\u5148\u8BFB\u53D6\u786E\u8BA4\u5185\u5BB9\u3002",parameters:{type:"object",properties:{path:{type:"string",description:"\u6587\u4EF6\u8DEF\u5F84\uFF08\u7EDD\u5BF9\u6216\u76F8\u5BF9\u5F53\u524D\u76EE\u5F55\uFF09"},offset:{type:"integer",description:"\u8D77\u59CB\u884C\u53F7\uFF08\u4ECE 1 \u5F00\u59CB\uFF0C\u53EF\u9009\uFF09"},limit:{type:"integer",description:`\u6700\u591A\u8BFB\u53D6\u7684\u884C\u6570\uFF08\u9ED8\u8BA4 ${ui}\uFF09`}},required:["path"]},async execute(r,e){let n=ct(ie(r.path),e.cwd);if(!E.existsSync(n))return{ok:!1,content:`\u9519\u8BEF\uFF1A\u6587\u4EF6\u4E0D\u5B58\u5728\uFF1A${n}`};let s=E.statSync(n);if(s.isDirectory())return{ok:!1,content:`\u9519\u8BEF\uFF1A${n} \u662F\u4E00\u4E2A\u76EE\u5F55\uFF0C\u8BF7\u4F7F\u7528 list_dir`};if(!s.isFile())return{ok:!1,content:`\u9519\u8BEF\uFF1A${n} \u4E0D\u662F\u666E\u901A\u6587\u4EF6\uFF08\u8BBE\u5907\u6587\u4EF6 / \u7BA1\u9053 / socket\uFF09\uFF0C\u62D2\u7EDD\u8BFB\u53D6`};if(s.size>gr)return{ok:!1,content:`\u9519\u8BEF\uFF1A\u6587\u4EF6\u8FC7\u5927\uFF08${(s.size/1024/1024).toFixed(1)}MB\uFF09\uFF0C\u8D85\u51FA 2MB \u9650\u5236`};let i=E.readFileSync(n);if($r(i))return{ok:!1,content:`\u9519\u8BEF\uFF1A${n} \u662F\u4E8C\u8FDB\u5236\u6587\u4EF6\uFF0C\u65E0\u6CD5\u4F5C\u4E3A\u6587\u672C\u8BFB\u53D6`};let o=i.toString("utf8").split(`
|
|
308
|
+
`),a=Math.max(1,pi(r.offset,1)),l=Math.max(1,pi(r.limit,ui)),c=o.slice(a-1,a-1+l),u=c.map((d,h)=>{let m=a+h;return`${String(m).padStart(6," ")}| ${d}`}).join(`
|
|
309
|
+
`),p=a-1+l<o.length?`
|
|
310
|
+
\u2026\uFF08\u6587\u4EF6\u5171 ${o.length} \u884C\uFF0C\u5DF2\u622A\u65AD\uFF09`:"";return{ok:!0,content:u+p,summary:`\u8BFB\u53D6 ${c.length} \u884C`}}},$i={name:"write_file",description:"\u5199\u5165\uFF08\u8986\u76D6\uFF09\u6587\u4EF6\u3002\u4F1A\u521B\u5EFA\u7F3A\u5931\u7684\u7236\u76EE\u5F55\u3002\u8BF7\u8C28\u614E\u4F7F\u7528\uFF0C\u4F18\u5148\u4F7F\u7528 edit_file \u505A\u5C40\u90E8\u4FEE\u6539\u3002",requiresConfirmation:!0,parameters:{type:"object",properties:{path:{type:"string",description:"\u6587\u4EF6\u8DEF\u5F84"},content:{type:"string",description:"\u8981\u5199\u5165\u7684\u5B8C\u6574\u6587\u4EF6\u5185\u5BB9"}},required:["path","content"]},async execute(r,e){let n=ct(ie(r.path),e.cwd),s=ie(r.content),i=mi(n);if(i)return{ok:!1,content:i.problem};try{return mr(n,e.cwd),E.mkdirSync(M.dirname(n),{recursive:!0}),E.writeFileSync(n,s,"utf8"),{ok:!0,content:`\u5DF2\u5199\u5165 ${n}\uFF08${s.length} \u5B57\u7B26\uFF09`,summary:"\u5199\u5165\u6210\u529F"}}catch(o){return{ok:!1,content:`\u5199\u5165\u5931\u8D25\uFF1A${o instanceof Error?o.message:String(o)}`}}}},yi={name:"edit_file",description:"\u7CBE\u786E\u66FF\u6362\u6587\u4EF6\u4E2D\u7684\u6587\u672C\u3002\u5C06 search \u6307\u5B9A\u7684\u6587\u672C\u66FF\u6362\u4E3A replace\u3002search \u5FC5\u987B\u4E0E\u6587\u4EF6\u5185\u5BB9\u5B8C\u5168\u4E00\u81F4\uFF08\u542B\u7F29\u8FDB\uFF09\uFF1B\u82E5 search \u5339\u914D\u5230\u591A\u5904\u5219\u9ED8\u8BA4\u62D2\u7EDD\u6267\u884C\uFF0C\u9700\u63D0\u4F9B\u66F4\u7CBE\u786E\u7684 search \u6216\u8BBE\u7F6E replace_all \u4E3A true\u3002",requiresConfirmation:!0,parameters:{type:"object",properties:{path:{type:"string",description:"\u6587\u4EF6\u8DEF\u5F84"},search:{type:"string",description:"\u8981\u88AB\u66FF\u6362\u7684\u539F\u6587\uFF08\u9700\u7CBE\u786E\u5339\u914D\uFF09"},replace:{type:"string",description:"\u66FF\u6362\u540E\u7684\u65B0\u6587\u672C"},replace_all:{type:"boolean",description:"\u662F\u5426\u66FF\u6362\u6240\u6709\u5339\u914D\u9879\uFF08\u9ED8\u8BA4 false\uFF09"}},required:["path","search","replace"]},async execute(r,e){let n=ct(ie(r.path),e.cwd);if(!E.existsSync(n))return{ok:!1,content:`\u9519\u8BEF\uFF1A\u6587\u4EF6\u4E0D\u5B58\u5728\uFF1A${n}`};let s=mi(n);if(s)return{ok:!1,content:s.problem};let i=ie(r.search),o=ie(r.replace),a=r.replace_all===!0;if(!i)return{ok:!1,content:"\u9519\u8BEF\uFF1Asearch \u4E0D\u80FD\u4E3A\u7A7A"};let l=E.readFileSync(n);if($r(l))return{ok:!1,content:`\u9519\u8BEF\uFF1A${n} \u662F\u4E8C\u8FDB\u5236\u6587\u4EF6\uFF0Cedit_file \u53EA\u5904\u7406\u6587\u672C\uFF1B\u786E\u5B9E\u8981\u6574\u4F53\u66FF\u6362\u8BF7\u7528 write_file`};let c=l.toString("utf8");if(!c.includes(i)){let d=y=>y.replace(/\s+/g," ").trim(),h=/^\s*\d+\s*[:|]/m.test(i),m=!h&&d(c).includes(d(i)),f="";return h?f="\n\u6CE8\u610F\uFF1Asearch \u91CC\u4F3C\u4E4E\u5E26\u4E86\u884C\u53F7\uFF08\u5F62\u5982 `123:`\uFF09\u3002read_file \u8F93\u51FA\u7684\u884C\u53F7\u53EA\u662F\u663E\u793A\u7528\uFF0C\u6587\u4EF6\u91CC\u5E76\u4E0D\u5B58\u5728 \u2014\u2014 \u8BF7\u53BB\u6389\u884C\u53F7\u524D\u7F00\uFF0C\u53EA\u4FDD\u7559\u4EE3\u7801\u672C\u8EAB\u3002":m&&(f=`
|
|
311
|
+
\u6CE8\u610F\uFF1A\u5FFD\u7565\u7A7A\u767D\u540E\u80FD\u627E\u5230\u76F8\u4F3C\u5185\u5BB9 \u2014\u2014 \u5F88\u53EF\u80FD\u53EA\u662F\u7F29\u8FDB\uFF08\u7A7A\u683C/\u5236\u8868\u7B26\uFF09\u6216\u6362\u884C\u4E0D\u4E00\u81F4\u3002\u8BF7\u91CD\u65B0 read_file \u8BE5\u533A\u57DF\uFF0C\u7528\u6587\u4EF6\u91CC**\u539F\u6837**\u7684\u7A7A\u767D\u91CD\u5199 search\u3002`),{ok:!1,content:`\u9519\u8BEF\uFF1A\u5728 ${n} \u4E2D\u672A\u627E\u5230\u5339\u914D\u6587\u672C\u3002\u8BF7\u5148\u7528 read_file \u786E\u8BA4\u5185\u5BB9\uFF08\u6CE8\u610F\u7F29\u8FDB\u4E0E\u6362\u884C\u9700\u5B8C\u5168\u4E00\u81F4\uFF09\u3002`+f}}let u=c.split(i).length-1;if(u>1&&!a)return{ok:!1,content:`\u9519\u8BEF\uFF1Asearch \u5728 ${n} \u4E2D\u51FA\u73B0 ${u} \u5904\uFF0C\u4E3A\u907F\u514D\u8BEF\u6539\u672A\u6267\u884C\u3002
|
|
312
|
+
\u8BF7\u63D0\u4F9B\u66F4\u7CBE\u786E\u7684 search\uFF08\u5E26\u4E0A\u524D\u540E\u6587\uFF09\uFF0C\u6216\u663E\u5F0F\u8BBE\u7F6E replace_all: true \u4EE5\u66FF\u6362\u5168\u90E8\u5339\u914D\u3002`};let p=a?c.split(i).join(o):c.replace(i,()=>o);return mr(n,e.cwd),E.writeFileSync(n,p,"utf8"),{ok:!0,content:`\u5DF2\u66F4\u65B0 ${n}\uFF08\u66FF\u6362 ${a?u:1} \u5904\uFF09`,summary:`\u66FF\u6362 ${a?u:1} \u5904`}}},vi={name:"list_dir",description:"\u5217\u51FA\u76EE\u5F55\u4E2D\u7684\u6587\u4EF6\u4E0E\u5B50\u76EE\u5F55\u3002\u7701\u7565 path \u65F6\u5217\u51FA\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\u3002",parameters:{type:"object",properties:{path:{type:"string",description:"\u76EE\u5F55\u8DEF\u5F84\uFF08\u53EF\u9009\uFF09"}},required:[]},async execute(r,e){let n=r.path?ct(ie(r.path),e.cwd):e.cwd;if(!E.existsSync(n))return{ok:!1,content:`\u9519\u8BEF\uFF1A\u76EE\u5F55\u4E0D\u5B58\u5728\uFF1A${n}`};if(!E.statSync(n).isDirectory())return{ok:!1,content:`\u9519\u8BEF\uFF1A${n} \u4E0D\u662F\u76EE\u5F55`};let s=E.readdirSync(n,{withFileTypes:!0}).filter(o=>!fi.has(o.name)).sort((o,a)=>o.isDirectory()!==a.isDirectory()?o.isDirectory()?-1:1:o.name.localeCompare(a.name)),i=s.map(o=>{let a=o.isDirectory()?"/":"";return`${o.isDirectory()?"DIR ":"FILE"} ${o.name}${a}`});return{ok:!0,content:`${n}
|
|
313
313
|
${i.join(`
|
|
314
|
-
`)||"(\u7A7A\u76EE\u5F55)"}`,summary:`${s.length} \u9879`}}},
|
|
315
|
-
\u2026\uFF08\u5DF2\u8FBE ${
|
|
316
|
-
`)+a,summary:`${o.length} \u4E2A\u6587\u4EF6`}}},
|
|
317
|
-
\u8BF7\u6539\u5199\u4E3A\u7B49\u4EF7\u4F46\u66F4\u5B89\u5168\u7684\u6A21\u5F0F\uFF0C\u4F8B\u5982\u7528 [^x]* \u4EE3\u66FF (.*)+\u3002`};let s;try{s=new RegExp(
|
|
318
|
-
`);for(let f=0;f<m.length;f++){if(l.length>=Xt)return;let y=m[f],g=y.length>
|
|
314
|
+
`)||"(\u7A7A\u76EE\u5F55)"}`,summary:`${s.length} \u9879`}}},bi={name:"glob",description:"\u6309\u901A\u914D\u7B26\u67E5\u627E\u6587\u4EF6\uFF0C\u652F\u6301 **\u3001*\u3001? \u8BED\u6CD5\u3002\u4F8B\u5982 'src/**/*.ts'\u3002\u8FD4\u56DE\u5339\u914D\u7684\u6587\u4EF6\u8DEF\u5F84\u3002",parameters:{type:"object",properties:{pattern:{type:"string",description:"glob \u6A21\u5F0F\uFF0C\u5982 '**/*.ts'"},path:{type:"string",description:"\u641C\u7D22\u8D77\u59CB\u76EE\u5F55\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4\u5F53\u524D\u76EE\u5F55\uFF09"}},required:["pattern"]},async execute(r,e){let n=ie(r.pattern);if(!n)return{ok:!1,content:"\u9519\u8BEF\uFF1Apattern \u4E0D\u80FD\u4E3A\u7A7A"};let s=r.path?ct(ie(r.path),e.cwd):e.cwd,i=Vt(n),o=[];if(yr(s,l=>{if(o.length>=fr)return;let c=M.relative(s,l).split(M.sep).join("/");i.test(c)&&o.push(c)}),o.length===0)return{ok:!0,content:"\u672A\u627E\u5230\u5339\u914D\u7684\u6587\u4EF6\u3002"};let a=o.length>=fr?`
|
|
315
|
+
\u2026\uFF08\u5DF2\u8FBE ${fr} \u6761\u4E0A\u9650\uFF09`:"";return{ok:!0,content:o.join(`
|
|
316
|
+
`)+a,summary:`${o.length} \u4E2A\u6587\u4EF6`}}},xi={name:"grep",description:"\u5728\u6587\u4EF6\u4E2D\u6309\u6B63\u5219\u8868\u8FBE\u5F0F\u641C\u7D22\u6587\u672C\u5185\u5BB9\u3002\u8FD4\u56DE \u6587\u4EF6:\u884C\u53F7:\u5185\u5BB9\u3002\u53EF\u901A\u8FC7 include \u9650\u5B9A\u6587\u4EF6\u7C7B\u578B\uFF08\u5982 '*.ts'\uFF09\u3002",parameters:{type:"object",properties:{pattern:{type:"string",description:"\u6B63\u5219\u8868\u8FBE\u5F0F"},path:{type:"string",description:"\u641C\u7D22\u76EE\u5F55\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4\u5F53\u524D\u76EE\u5F55\uFF09"},include:{type:"string",description:"\u6587\u4EF6\u540D\u901A\u914D\u7B26\u8FC7\u6EE4\uFF0C\u5982 '*.ts'\uFF08\u53EF\u9009\uFF09"}},required:["pattern"]},async execute(r,e){let n=ie(r.pattern);if(!n)return{ok:!1,content:"\u9519\u8BEF\uFF1Apattern \u4E0D\u80FD\u4E3A\u7A7A"};if(rl(n))return{ok:!1,content:`\u9519\u8BEF\uFF1A\u6B63\u5219\u53EF\u80FD\u5B58\u5728\u707E\u96BE\u6027\u56DE\u6EAF\uFF08\u5D4C\u5957\u91CF\u8BCD\uFF0C\u5982 (a+)+\uFF09\uFF0C\u5DF2\u62D2\u7EDD\u6267\u884C\u4EE5\u514D\u5361\u6B7B\u8FDB\u7A0B\u3002
|
|
317
|
+
\u8BF7\u6539\u5199\u4E3A\u7B49\u4EF7\u4F46\u66F4\u5B89\u5168\u7684\u6A21\u5F0F\uFF0C\u4F8B\u5982\u7528 [^x]* \u4EE3\u66FF (.*)+\u3002`};let s;try{s=new RegExp(n)}catch(u){return{ok:!1,content:`\u9519\u8BEF\uFF1A\u65E0\u6548\u7684\u6B63\u5219\u8868\u8FBE\u5F0F\uFF1A${u instanceof Error?u.message:String(u)}`}}let i=r.path?ct(ie(r.path),e.cwd):e.cwd,o=r.include?Vt(ie(r.include)):null,a=sl(i),l=[];if(yr(i,u=>{if(l.length>=Xt||a.length>0&&il(M.relative(i,u),a))return;let p=M.relative(i,u).split(M.sep).join("/");if(o&&!o.test(p)&&!o.test(M.basename(u)))return;let d;try{d=E.statSync(u)}catch{return}if(d.size>nl||d.size===0)return;let h;try{h=E.readFileSync(u)}catch{return}if($r(h))return;let m=h.toString("utf8").split(`
|
|
318
|
+
`);for(let f=0;f<m.length;f++){if(l.length>=Xt)return;let y=m[f],g=y.length>di?y.slice(0,di):y;s.test(g)&&l.push(`${p}:${f+1}: ${y.trim().slice(0,300)}`)}}),l.length===0)return{ok:!0,content:"\u672A\u627E\u5230\u5339\u914D\u5185\u5BB9\u3002"};let c=l.length>=Xt?`
|
|
319
319
|
\u2026\uFF08\u5DF2\u8FBE ${Xt} \u6761\u4E0A\u9650\uFF09`:"";return{ok:!0,content:l.join(`
|
|
320
|
-
`)+c,summary:`${l.length} \u6761\u5339\u914D`}}};function
|
|
320
|
+
`)+c,summary:`${l.length} \u6761\u5339\u914D`}}};function yr(r,e){let n;try{n=E.readdirSync(r,{withFileTypes:!0})}catch{return}for(let s of n){if(fi.has(s.name))continue;let i=M.join(r,s.name);s.isDirectory()?yr(i,e):(s.isFile()||s.isSymbolicLink())&&e(i)}}function Vt(r){let e="",n=r.split(M.sep).join("/");for(let s=0;s<n.length;s++){let i=n[s];if(i==="*")n[s+1]==="*"?(s++,n[s+1]==="/"?(s++,e+="(?:.*/)?"):e+=".*"):e+="[^/]*";else if(i==="?")e+="[^/]";else if(i==="{"){let o=n.indexOf("}",s);if(o!==-1){let a=n.slice(s+1,o).split(",").map(hi).join("|");e+=`(?:${a})`,s=o}else e+="\\{"}else e+=hi(i)}return new RegExp(`^${e}$`)}function hi(r){return r.replace(/[.+^${}()|[\]\\]/g,"\\$&")}var wt=v(require("fs")),vr=v(require("os")),De=v(require("path"));function Je(r){let e=r.deviceBridge;if(e?.isRunning())return{source:`xzh \u5185\u7F6E\u8BBE\u5907\u6865\uFF08\u7AEF\u53E3 ${e.getPort()}\uFF09`,list:async()=>e.listDevices().map(i=>({name:i.name,id:i.id,appVersionCode:i.appVersionCode})),push:async(i,o)=>e.pushScript(i,o),run:async(i,o)=>e.runScript(i,o),stop:async(i,o)=>e.stopScript(i,o),logs:async i=>e.recentLogs(i).map(o=>({device:o.device,text:o.text})),screenshot:async()=>e.screenshot()};let n=Ie(),s=new re(n);return{source:`\u8BBE\u5907\u6865\uFF08127.0.0.1:${n}\uFF09`,list:async()=>{let i=await s.devices();return i?i.map(o=>({name:o.name,id:o.id,appVersionCode:o.appVersionCode})):null},push:async(i,o)=>s.exec("save",i,o),run:async(i,o)=>s.exec("run",i,o),stop:async(i,o)=>s.exec(i?"stop":"stopAll",i,o),screenshot:async()=>s.screenshot(),logs:async i=>{let o=await s.logs(i);return o?o.map(a=>({device:a.device,text:a.text})):null}}}function Si(r){return{ok:!1,content:`\u8BBE\u5907\u6865\u4E0D\u53EF\u7528\uFF08${r.source}\uFF09\u3002
|
|
321
321
|
\u8BF7\u8BA9\u7528\u6237\u5148\u628A\u624B\u673A\u8FDE\u4E0A\uFF0C\u4EFB\u9009\u5176\u4E00\uFF1A
|
|
322
322
|
\xB7 AutoJs6\uFF08\u63A8\u8350\uFF09\uFF1A\u624B\u673A\u4E0A\u6253\u5F00\u300C\u8FDE\u63A5\u7535\u8111 \u2192 \u670D\u52A1\u5668\u6A21\u5F0F\u300D\uFF0C\u7136\u540E\u5728 xzh \u91CC\u6267\u884C \`/device connect <\u624B\u673AIP>\`\uFF08\u624B\u673A\u672C\u673A\u8FD0\u884C\u65F6\u4E0D\u7528\u586B IP\uFF09\uFF1B
|
|
323
323
|
\xB7 AutoX.js\uFF1A\`/device serve\`\uFF0C\u518D\u8BA9\u624B\u673A\u586B\u5B83\u6253\u5370\u51FA\u7684 ws:// \u5730\u5740\u3002
|
|
324
324
|
\u53E6\u5F00\u4E00\u4E2A\u7EC8\u7AEF\u8DD1 \`xzh device connect <\u624B\u673AIP>\` / \`xzh device serve\` \u4E5F\u53EF\u4EE5\u3002
|
|
325
|
-
\u82E5\u624B\u673A\u8FD8\u6CA1\u88C5 AutoJs6\uFF0C\u7528 \`xzh device apk\` \u67E5\u770B\u8BE5\u88C5\u54EA\u4E2A\u7248\u672C\uFF08\u7384\u732A\u4E0D\u6253\u5305\u5B89\u88C5\u5305\uFF09\u3002`}}function Yt(
|
|
326
|
-
`)}var
|
|
327
|
-
${
|
|
325
|
+
\u82E5\u624B\u673A\u8FD8\u6CA1\u88C5 AutoJs6\uFF0C\u7528 \`xzh device apk\` \u67E5\u770B\u8BE5\u88C5\u54EA\u4E2A\u7248\u672C\uFF08\u7384\u732A\u4E0D\u6253\u5305\u5B89\u88C5\u5305\uFF09\u3002`}}function Yt(r,e){let n=e.startsWith("~")?De.join(process.env.HOME??process.env.USERPROFILE??"",e.slice(1)):e;return De.isAbsolute(n)?n:De.resolve(r.cwd,q(n))}function ol(r){return r.map(e=>`- ${e.name}\uFF08${e.id}\uFF0CAutoX.js versionCode ${e.appVersionCode}\uFF09`).join(`
|
|
326
|
+
`)}var al={name:"device_list",description:"\u5217\u51FA\u5F53\u524D\u5DF2\u8FDE\u63A5\u7684\u624B\u673A\u8BBE\u5907\uFF08\u901A\u8FC7\u8BBE\u5907\u6865\u8FDE\u4E0A\u6765\u7684 AutoX.js / Auto.js\uFF09\u3002\u63A8\u811A\u672C\u6216\u8FD0\u884C\u811A\u672C\u4E4B\u524D\u5148\u770B\u4E00\u773C\uFF0C\u786E\u8BA4\u624B\u673A\u662F\u5426\u5DF2\u8FDE\u4E0A\u3002",parameters:{type:"object",properties:{}},async execute(r,e){let n=Je(e),s=await n.list();return s?s.length===0?{ok:!0,content:`\u6CA1\u6709\u5DF2\u8FDE\u63A5\u7684\u8BBE\u5907\uFF08${n.source}\uFF09\u3002\u8BF7\u786E\u8BA4\u624B\u673A\u4E0E\u7535\u8111\u5728\u540C\u4E00\u7F51\u7EDC\uFF0C\u4E14\u624B\u673A\u4E0A\u7684 AutoX.js \u5DF2\u8FDE\u63A5\u5230\u6865\u6253\u5370\u51FA\u7684 ws:// \u5730\u5740\u3002`,summary:"0 \u53F0\u8BBE\u5907"}:{ok:!0,content:`\u5DF2\u8FDE\u63A5 ${s.length} \u53F0\u8BBE\u5907\uFF1A
|
|
327
|
+
${ol(s)}`,summary:`${s.length} \u53F0\u8BBE\u5907`}:Si(n)}},ll={name:"device_push",description:"\u628A\u4E00\u4E2A\u811A\u672C\u6587\u4EF6**\u4FDD\u5B58**\u5230\u624B\u673A\uFF08\u4E0D\u8FD0\u884C\uFF09\u3002\u624B\u673A\u4E0A\u8DD1\u7684\u662F AutoX.js \u811A\u672C\u65F6\u7528\u8FD9\u4E2A\u628A\u672C\u5730\u6539\u597D\u7684\u4EE3\u7801\u540C\u6B65\u8FC7\u53BB\uFF1B\u53EA\u60F3\u770B\u6548\u679C\u5C31\u76F4\u63A5\u7528 device_run\u3002",parameters:{type:"object",properties:{path:{type:"string",description:"\u8981\u63A8\u9001\u7684\u811A\u672C\u6587\u4EF6\u8DEF\u5F84\uFF08\u76F8\u5BF9\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\u6216\u7EDD\u5BF9\u8DEF\u5F84\uFF09"},device:{type:"string",description:"\u53EA\u63A8\u9001\u5230\u6307\u5B9A\u8BBE\u5907\uFF08\u8BBE\u5907\u540D\u6216\u8FDE\u63A5 id\uFF09\uFF1B\u4E0D\u4F20\u8868\u793A\u6240\u6709\u5DF2\u8FDE\u63A5\u8BBE\u5907"}},required:["path"]},requiresConfirmation:!0,async execute(r,e){if(!r.path)return{ok:!1,content:"\u7F3A\u5C11\u5FC5\u586B\u53C2\u6570\uFF1Apath"};let n=Yt(e,String(r.path).trim()),s=Je(e),i=await s.push(n,r.device?String(r.device):void 0);return br(i,s,`\u5DF2\u4FDD\u5B58\u5230 ${i.delivered??0} \u53F0\u8BBE\u5907`)}},cl={name:"device_run",description:`\u628A\u811A\u672C\u6587\u4EF6\u63A8\u5230\u624B\u673A\u4E0A**\u5E76\u7ACB\u5373\u8FD0\u884C**\uFF0C\u7136\u540E\u53EF\u4EE5\u7528 device_logs \u67E5\u770B\u624B\u673A\u4E0A\u7684\u8F93\u51FA\u3002\u8FD9\u662F\u300C\u64CD\u4F5C\u624B\u673A\u300D\u7684\u4E3B\u901A\u9053\uFF08\u7B49\u4EF7\u4E8E VSCode \u63D2\u4EF6\u7684 F5\uFF09\u3002
|
|
328
328
|
**\u5199\u811A\u672C\u524D\u5148 load_skill autojs6** \u2014\u2014 \u91CC\u9762\u6709 AutoJs6 \u7684 API \u901F\u67E5\u4E0E\u5FC5\u987B\u9075\u5B88\u7684\u7EA6\u5B9A\u3002
|
|
329
|
-
\u4E09\u6761\u8981\u70B9\uFF1A\u2460 \u811A\u672C\u5728**\u624B\u673A\u4E0A**\u8DD1\uFF0C\u8FD4\u56DE\u503C\u4E0D\u4F1A\u56DE\u6765\uFF0C\u56E0\u6B64\u6BCF\u6B65\u90FD\u8981 toastLog \u56DE\u62A5\uFF0C\u518D\u7528 device_logs \u8BFB\uFF1B\u2461 \u672C\u5DE5\u5177**\u53D1\u51FA\u5373\u8FD4\u56DE**\uFF0C\u4E0D\u7B49\u4E8E\u811A\u672C\u8DD1\u5B8C \u2014\u2014 \u5148 sleep 1~3 \u79D2\u518D\u8BFB\u65E5\u5FD7\uFF1B\u2462 \u9700\u8981 UI \u64CD\u4F5C\u7684\u811A\u672C**\u5FC5\u987B**\u4EE5 auto.waitFor(8000) \u5F00\u5934\uFF08auto() \u5728\u670D\u52A1\u672A\u771F\u6B63\u8FD0\u884C\u65F6\u76F4\u63A5\u629B\u9519\uFF09\u3002`,parameters:{type:"object",properties:{path:{type:"string",description:"\u8981\u8FD0\u884C\u7684\u811A\u672C\u6587\u4EF6\u8DEF\u5F84\uFF08\u76F8\u5BF9\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\u6216\u7EDD\u5BF9\u8DEF\u5F84\uFF09"},device:{type:"string",description:"\u53EA\u5728\u6307\u5B9A\u8BBE\u5907\u4E0A\u8FD0\u884C\uFF08\u8BBE\u5907\u540D\u6216\u8FDE\u63A5 id\uFF09\uFF1B\u4E0D\u4F20\u8868\u793A\u6240\u6709\u5DF2\u8FDE\u63A5\u8BBE\u5907"}},required:["path"]},requiresConfirmation:!0,async execute(
|
|
329
|
+
\u4E09\u6761\u8981\u70B9\uFF1A\u2460 \u811A\u672C\u5728**\u624B\u673A\u4E0A**\u8DD1\uFF0C\u8FD4\u56DE\u503C\u4E0D\u4F1A\u56DE\u6765\uFF0C\u56E0\u6B64\u6BCF\u6B65\u90FD\u8981 toastLog \u56DE\u62A5\uFF0C\u518D\u7528 device_logs \u8BFB\uFF1B\u2461 \u672C\u5DE5\u5177**\u53D1\u51FA\u5373\u8FD4\u56DE**\uFF0C\u4E0D\u7B49\u4E8E\u811A\u672C\u8DD1\u5B8C \u2014\u2014 \u5148 sleep 1~3 \u79D2\u518D\u8BFB\u65E5\u5FD7\uFF1B\u2462 \u9700\u8981 UI \u64CD\u4F5C\u7684\u811A\u672C**\u5FC5\u987B**\u4EE5 auto.waitFor(8000) \u5F00\u5934\uFF08auto() \u5728\u670D\u52A1\u672A\u771F\u6B63\u8FD0\u884C\u65F6\u76F4\u63A5\u629B\u9519\uFF09\u3002`,parameters:{type:"object",properties:{path:{type:"string",description:"\u8981\u8FD0\u884C\u7684\u811A\u672C\u6587\u4EF6\u8DEF\u5F84\uFF08\u76F8\u5BF9\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\u6216\u7EDD\u5BF9\u8DEF\u5F84\uFF09"},device:{type:"string",description:"\u53EA\u5728\u6307\u5B9A\u8BBE\u5907\u4E0A\u8FD0\u884C\uFF08\u8BBE\u5907\u540D\u6216\u8FDE\u63A5 id\uFF09\uFF1B\u4E0D\u4F20\u8868\u793A\u6240\u6709\u5DF2\u8FDE\u63A5\u8BBE\u5907"}},required:["path"]},requiresConfirmation:!0,async execute(r,e){if(!r.path)return{ok:!1,content:"\u7F3A\u5C11\u5FC5\u586B\u53C2\u6570\uFF1Apath"};let n=Yt(e,String(r.path).trim()),s=Je(e),i=await s.run(n,r.device?String(r.device):void 0);return br(i,s,`\u5DF2\u5728 ${i.delivered??0} \u53F0\u8BBE\u5907\u4E0A\u542F\u52A8\uFF08\u7528 device_logs \u770B\u8F93\u51FA\uFF09`)}},ul={name:"device_stop",description:"\u505C\u6B62\u624B\u673A\u4E0A\u6B63\u5728\u8FD0\u884C\u7684\u811A\u672C\u3002\u4E0D\u4F20 path \u8868\u793A\u505C\u6B62\u5168\u90E8\uFF08AutoX.js \u7684\u300C\u505C\u6B62\u6240\u6709\u811A\u672C\u300D\uFF09\u2014\u2014\u811A\u672C\u662F\u6B7B\u5FAA\u73AF\u65F6\u8FD9\u662F\u552F\u4E00\u7684\u6536\u5C3E\u624B\u6BB5\u3002",parameters:{type:"object",properties:{path:{type:"string",description:"\u53EA\u505C\u6B62\u8FD9\u4E2A\u811A\u672C\uFF1B\u4E0D\u4F20\u8868\u793A\u505C\u6B62\u5168\u90E8\u811A\u672C"},device:{type:"string",description:"\u53EA\u5BF9\u6307\u5B9A\u8BBE\u5907\u751F\u6548\uFF08\u8BBE\u5907\u540D\u6216\u8FDE\u63A5 id\uFF09"}}},requiresConfirmation:!0,async execute(r,e){let n=Je(e),s=r.path?Yt(e,String(r.path).trim()):void 0,i=await n.stop(s,r.device?String(r.device):void 0);return br(i,n,s?"\u5DF2\u8BF7\u6C42\u505C\u6B62\u8BE5\u811A\u672C":"\u5DF2\u8BF7\u6C42\u505C\u6B62\u5168\u90E8\u811A\u672C")}},dl={name:"device_logs",description:"\u8BFB\u53D6\u624B\u673A\u4E0A\u811A\u672C\u6700\u8FD1\u6253\u5370\u7684\u65E5\u5FD7\uFF08AutoX.js \u91CC console.log / toast \u4E4B\u7C7B\u7684\u5185\u5BB9\u4F1A\u56DE\u5230\u8FD9\u91CC\uFF09\u3002\u8FD0\u884C\u811A\u672C\u540E\u7528\u5B83\u786E\u8BA4\u6267\u884C\u7ED3\u679C\uFF0C\u6BD4\u8BA9\u7528\u6237\u8089\u773C\u76EF\u624B\u673A\u9760\u8C31\u3002",parameters:{type:"object",properties:{limit:{type:"integer",description:"\u6700\u591A\u8FD4\u56DE\u591A\u5C11\u884C\uFF0C\u9ED8\u8BA4 50"}}},async execute(r,e){let n=Number(r.limit??50),s=Number.isFinite(n)&&n>0?Math.min(Math.floor(n),500):50,i=Je(e),o=await i.logs(s);if(!o)return Si(i);if(o.length===0)return{ok:!0,content:`\u6682\u65F6\u6CA1\u6709\u8BBE\u5907\u65E5\u5FD7\uFF08${i.source}\uFF09\u3002\u811A\u672C\u53EF\u80FD\u8FD8\u6CA1\u8F93\u51FA\uFF0C\u6216\u6CA1\u5728\u8FD0\u884C\u3002`,summary:"0 \u884C\u65E5\u5FD7"};let a=o.map(l=>`[${l.device}] ${l.text}`).join(`
|
|
330
330
|
`);return{ok:!0,content:`\u6700\u8FD1 ${o.length} \u884C\u8BBE\u5907\u65E5\u5FD7\uFF1A
|
|
331
|
-
${a}`,summary:`${o.length} \u884C\u65E5\u5FD7`}}};function
|
|
332
|
-
${
|
|
333
|
-
`:""}\u6765\u6E90\uFF1A${e.source}`,summary:
|
|
331
|
+
${a}`,summary:`${o.length} \u884C\u65E5\u5FD7`}}};function br(r,e,n){if(!r.ok)return{ok:!1,content:r.message??"\u64CD\u4F5C\u5931\u8D25"};let s=(r.devices??[]).join("\u3001");return{ok:!0,content:`${n}${s?`\uFF1A${s}`:""}
|
|
332
|
+
${r.path?`\u811A\u672C\uFF1A${r.path}
|
|
333
|
+
`:""}\u6765\u6E90\uFF1A${e.source}`,summary:n}}var pl={name:"device_screenshot",description:`\u622A\u53D6**\u624B\u673A\u5F53\u524D\u5C4F\u5E55**\u5E76\u4FDD\u5B58\u4E3A JPEG\uFF1B**\u56FE\u7247\u4F1A\u76F4\u63A5\u9644\u5728\u7ED3\u679C\u4E4B\u540E**\uFF0C\u4F60\u80FD\u770B\u5230\u753B\u9762\u5185\u5BB9\u3002
|
|
334
334
|
\u7528\u9014\uFF1A\u2460 \u65E0\u969C\u788D\u8BFB\u4E0D\u5230\u7684\u754C\u9762\uFF08\u5FAE\u4FE1\u3001\u5E94\u7528\u5206\u8EAB\u3001\u6E38\u620F\uFF09\u2014\u2014 \u5148 device_read_screen \u5224\u65AD\uFF0C
|
|
335
335
|
\u63A7\u4EF6\u6570\u4E3A 0 \u65F6\u6539\u7528\u5B83\u770B\u56FE\uFF1B\u2461 \u628A\u753B\u9762\u62FF\u7ED9\u7528\u6237\u786E\u8BA4\u3002
|
|
336
336
|
\u770B\u5B8C\u4E4B\u540E\u8981\u64CD\u4F5C\uFF0C\u5C31\u6309\u5750\u6807 click(x,y)\uFF08\u56FE\u91CC\u7684\u50CF\u7D20\u5750\u6807\u5373\u5C4F\u5E55\u5750\u6807\uFF09\u3002
|
|
337
|
-
\u9996\u6B21/\u6BCF\u6B21\u622A\u56FE\u624B\u673A\u90FD\u4F1A\u5F39\u7CFB\u7EDF\u6388\u6743\u6846\uFF0C\u6865\u5185\u7F6E\u7684\u811A\u672C\u4F1A\u81EA\u52A8\u70B9\u6389\uFF08\u65E0\u9700\u4EBA\u5DE5\uFF09\u3002`,parameters:{type:"object",properties:{path:{type:"string",description:"\u4FDD\u5B58\u8DEF\u5F84\uFF08\u76F8\u5BF9\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\u6216\u7EDD\u5BF9\u8DEF\u5F84\uFF09\uFF1B\u4E0D\u4F20\u5219\u5199\u5230\u7CFB\u7EDF\u4E34\u65F6\u76EE\u5F55"}}},async execute(
|
|
338
|
-
\uFF08\u6765\u6E90\uFF1A${
|
|
337
|
+
\u9996\u6B21/\u6BCF\u6B21\u622A\u56FE\u624B\u673A\u90FD\u4F1A\u5F39\u7CFB\u7EDF\u6388\u6743\u6846\uFF0C\u6865\u5185\u7F6E\u7684\u811A\u672C\u4F1A\u81EA\u52A8\u70B9\u6389\uFF08\u65E0\u9700\u4EBA\u5DE5\uFF09\u3002`,parameters:{type:"object",properties:{path:{type:"string",description:"\u4FDD\u5B58\u8DEF\u5F84\uFF08\u76F8\u5BF9\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\u6216\u7EDD\u5BF9\u8DEF\u5F84\uFF09\uFF1B\u4E0D\u4F20\u5219\u5199\u5230\u7CFB\u7EDF\u4E34\u65F6\u76EE\u5F55"}}},async execute(r,e){let n=Je(e),s=await n.screenshot();if(!s.ok)return{ok:!1,content:`${s.message}
|
|
338
|
+
\uFF08\u6765\u6E90\uFF1A${n.source}\uFF09`};let i=typeof r.path=="string"&&r.path.trim()?Yt(e,r.path.trim()):De.join(vr.tmpdir(),`xzh-device-shot-${Date.now()}.jpg`);try{wt.writeFileSync(i,s.data)}catch(o){return{ok:!1,content:`\u622A\u56FE\u5DF2\u62FF\u5230\u4F46\u4FDD\u5B58\u5931\u8D25\uFF1A${o instanceof Error?o.message:String(o)}`}}return{ok:!0,content:`\u5DF2\u622A\u53D6\u624B\u673A\u5C4F\u5E55\uFF1A${i}\uFF08${Math.round(s.data.length/1024)} KB\uFF0CJPEG\uFF09
|
|
339
339
|
\u56FE\u7247**\u5DF2\u9644\u5728\u672C\u6761\u7ED3\u679C\u4E4B\u540E** \u2014\u2014 \u76F4\u63A5\u770B\u56FE\u5224\u65AD\u754C\u9762\u5185\u5BB9\u3001\u51B3\u5B9A\u70B9\u54EA\u91CC\uFF08\u6309\u5750\u6807 click(x,y)\uFF09\u3002
|
|
340
340
|
\u82E5\u4F60\u65E0\u6CD5\u770B\u5230\u56FE\u7247\uFF0C\u8BF4\u660E\u5F53\u524D\u6A21\u578B\u4E0D\u652F\u6301\u89C6\u89C9\uFF1A\u6B64\u65F6\u8BF7\u8BA9\u7528\u6237\u770B\u8FD9\u5F20\u56FE\uFF0C\u6216\u6539\u7528 device_read_screen\u3002
|
|
341
|
-
\uFF08\u6765\u6E90\uFF1A${
|
|
341
|
+
\uFF08\u6765\u6E90\uFF1A${n.source}\uFF09`,images:[{mimeType:"image/jpeg",data:s.data.toString("base64")}]}}},hl={name:"device_read_screen",description:`\u8BFB\u53D6\u624B\u673A**\u5F53\u524D\u754C\u9762**\u7684\u5185\u5BB9\u5E76**\u4EE5\u6587\u5B57\u8FD4\u56DE**\uFF1A\u5305\u540D / Activity\u3001\u53EF\u89C1\u63A7\u4EF6\u7684\u6587\u672C\u4E0E\u63CF\u8FF0\u3001\u662F\u5426\u53EF\u70B9\u51FB\u3001\u4EE5\u53CA\u5750\u6807 \u2014\u2014 \u8FD9\u662F\u4F60\u300C\u770B\u300D\u624B\u673A\u5C4F\u5E55\u7684\u6B63\u786E\u65B9\u5F0F\u3002
|
|
342
342
|
\u7528\u4E8E\uFF1A\u5224\u65AD\u5F53\u524D\u505C\u5728\u54EA\u4E2A\u754C\u9762\u3001\u627E\u8981\u70B9\u7684\u63A7\u4EF6\u3001\u786E\u8BA4\u64CD\u4F5C\u7ED3\u679C\u3002
|
|
343
|
-
\uFF08device_screenshot \u53EA\u4EA7\u51FA\u4F60\u770B\u4E0D\u5230\u7684\u56FE\u7247\u6587\u4EF6\uFF0C\u7ED9\u7528\u6237\u770B\u7528\uFF1B\u8981\u81EA\u5DF1\u5224\u65AD\u754C\u9762\u4E00\u5F8B\u7528\u672C\u5DE5\u5177\u3002\uFF09`,parameters:{type:"object",properties:{}},async execute(
|
|
344
|
-
\uFF08\u6765\u6E90\uFF1A${
|
|
343
|
+
\uFF08device_screenshot \u53EA\u4EA7\u51FA\u4F60\u770B\u4E0D\u5230\u7684\u56FE\u7247\u6587\u4EF6\uFF0C\u7ED9\u7528\u6237\u770B\u7528\uFF1B\u8981\u81EA\u5DF1\u5224\u65AD\u754C\u9762\u4E00\u5F8B\u7528\u672C\u5DE5\u5177\u3002\uFF09`,parameters:{type:"object",properties:{}},async execute(r,e){let n=Je(e),s=`r${Date.now()}`,i=`\u3010\u5F00\u59CB\u3011${s}`,o=De.join(vr.tmpdir(),`xzh-ui-dump-${Date.now()}.js`);try{wt.writeFileSync(o,ar(60,s),"utf8");let c=await n.run(o);if(!c.ok)return{ok:!1,content:`${c.message??"\u8BFB\u53D6\u754C\u9762\u5931\u8D25"}
|
|
344
|
+
\uFF08\u6765\u6E90\uFF1A${n.source}\uFF09`}}finally{wt.rmSync(o,{force:!0})}let a=Date.now()+45e3,l=[];for(;Date.now()<a;){let c=(await n.logs(200)??[]).map(d=>d.text),u=c.map(d=>d.includes(i)).lastIndexOf(!0);if(l=u<0?[]:c.slice(u).filter(d=>d.includes("\u3010")),l.some(d=>d.includes("\u3010\u5B8C\u6210\u3011")||d.includes("\u8BFB\u53D6\u5931\u8D25")||d.includes("\u65E0\u969C\u788D\u672A\u5C31\u7EEA")))break;await new Promise(d=>setTimeout(d,700))}return l.length===0?{ok:!1,content:`\u6CA1\u6709\u4ECE\u624B\u673A\u8BFB\u56DE\u754C\u9762\u5185\u5BB9\uFF08\u811A\u672C\u53EF\u80FD\u6CA1\u8DD1\u8D77\u6765\uFF0C\u6216\u5361\u5728\u7B49\u5F85\u65E0\u969C\u788D\u670D\u52A1\uFF09\u3002
|
|
345
345
|
\u53EF\u5148\u8DD1 xzh device check \u4F53\u68C0\uFF0C\u6216\u7528 device_stop \u6536\u6389\u6302\u4F4F\u7684\u811A\u672C\u3002
|
|
346
|
-
\uFF08\u6765\u6E90\uFF1A${
|
|
346
|
+
\uFF08\u6765\u6E90\uFF1A${n.source}\uFF09`}:{ok:!0,content:`${l.join(`
|
|
347
347
|
`)}
|
|
348
|
-
\uFF08\u6765\u6E90\uFF1A${
|
|
348
|
+
\uFF08\u6765\u6E90\uFF1A${n.source}\uFF09`}}},xr=[al,ll,cl,ul,dl,hl,pl];var wi=12e3,Ci={name:"memory_read",description:"\u8BFB\u53D6\u5F53\u524D\u9879\u76EE\u7684\u8BB0\u5FC6\uFF08\u5B58\u653E\u5728 <\u9879\u76EE>/.xuanzhu/memory/\uFF09\uFF1A\u5305\u542B\u957F\u671F\u8BB0\u5FC6 MEMORY.md\uFF08\u6309\u4E3B\u9898\u6574\u7406\u7684\u7ED3\u8BBA\u5E93\uFF09\u4E0E\u6700\u8FD1\u4E00\u4EFD\u6BCF\u65E5\u65E5\u5FD7\u3002\u5728\u5F00\u59CB\u5904\u7406\u9700\u8981\u9879\u76EE\u80CC\u666F\u7684\u4EFB\u52A1\u524D\u8C03\u7528\u5B83\uFF0C\u53EF\u4EE5\u4E86\u89E3\u6B64\u524D\u79EF\u7D2F\u7684\u7EA6\u5B9A\u4E0E\u7ED3\u8BBA\u3002\u5199\u957F\u671F\u8BB0\u5FC6\uFF08scope=long\uFF09\u4E4B\u524D\u4E5F\u5E94\u5F53\u5148\u8BFB\uFF0C\u786E\u8BA4\u65B0\u7ED3\u8BBA\u5C5E\u4E8E\u54EA\u4E2A\u4E3B\u9898\u5C0F\u8282\u3002\u5F53\u7CFB\u7EDF\u63D0\u793A\u8BCD\u63D0\u793A\u300C\u957F\u671F\u8BB0\u5FC6\u8FC7\u957F\u300D\u65F6\uFF0C\u4E5F\u5E94\u5148\u7528\u5B83\u8BFB\u53D6\u5168\u6587\uFF0C\u518D\u8C03\u7528 memory_compact \u7CBE\u7B80\u3002",parameters:{type:"object",properties:{},required:[]},async execute(r,e){let n=Xe(e.cwd),s=Q(e.cwd);if(!n.longTerm&&!n.recentDaily)return{ok:!0,content:`\u9879\u76EE\u8BB0\u5FC6\u4E3A\u7A7A\uFF08\u76EE\u5F55\uFF1A${s.memoryDir}\uFF09\u3002`,summary:"\u6682\u65E0\u8BB0\u5FC6"};let i=[];n.longTerm&&i.push(`## \u957F\u671F\u8BB0\u5FC6\uFF08MEMORY.md\uFF09
|
|
349
349
|
|
|
350
|
-
${
|
|
350
|
+
${n.longTerm}`),n.recentDaily&&i.push(`## \u6700\u8FD1\u65E5\u5FD7\uFF08${n.recentDailyName}\uFF09
|
|
351
351
|
|
|
352
|
-
${
|
|
352
|
+
${n.recentDaily}`);let o=i.join(`
|
|
353
353
|
|
|
354
354
|
---
|
|
355
355
|
|
|
356
|
-
`);return{ok:!0,content:o.length>
|
|
356
|
+
`);return{ok:!0,content:o.length>wi?`${o.slice(0,wi)}
|
|
357
357
|
|
|
358
|
-
\u2026\uFF08\u5185\u5BB9\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD\uFF09`:o,summary:"\u5DF2\u8BFB\u53D6\u9879\u76EE\u8BB0\u5FC6"}}},
|
|
358
|
+
\u2026\uFF08\u5185\u5BB9\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD\uFF09`:o,summary:"\u5DF2\u8BFB\u53D6\u9879\u76EE\u8BB0\u5FC6"}}},Ti={name:"memory_write",description:"\u628A\u503C\u5F97\u8DE8\u4F1A\u8BDD\u4FDD\u7559\u7684\u4FE1\u606F\u5199\u5165\u9879\u76EE\u8BB0\u5FC6\uFF08<\u9879\u76EE>/.xuanzhu/memory/\uFF09\u3002\u5728\u5B8C\u6210\u5B9E\u8D28\u5DE5\u4F5C\uFF08\u5B9E\u73B0\u529F\u80FD\u3001\u4FEE\u590D\u7F3A\u9677\u3001\u786E\u5B9A\u6280\u672F\u65B9\u6848\u3001\u7EA6\u5B9A\u9879\u76EE\u89C4\u8303\uFF09\u540E\u8C03\u7528\uFF0C\u4EE5\u4FBF\u540E\u7EED\u4F1A\u8BDD\u590D\u7528\u3002scope=daily \u8FFD\u52A0\u5230\u5F53\u65E5\u65E5\u5FD7\uFF08\u9ED8\u8BA4\uFF0C\u9002\u5408\u5F53\u5929\u7684\u8FDB\u5C55\u4E0E\u8FC7\u7A0B\u8BB0\u5F55\uFF09\uFF1Bscope=long \u5728\u957F\u671F\u8BB0\u5FC6 MEMORY.md \u672B\u5C3E\u8FFD\u52A0\u4E00\u5757 \u2014\u2014 **\u53EA\u9002\u5408\u5168\u65B0\u4E3B\u9898**\uFF1A\u82E5\u65B0\u7ED3\u8BBA\u5C5E\u4E8E\u5DF2\u6709\u7684\u4E3B\u9898\u5C0F\u8282\uFF0C\u5E94\u5148 memory_read \u518D\u7528 memory_compact \u5E76\u8FDB\u90A3\u4E2A\u5C0F\u8282\uFF0C\u5426\u5219\u957F\u671F\u8BB0\u5FC6\u4F1A\u9000\u5316\u6210\u6309\u65F6\u95F4\u5806\u53E0\u3001\u8D8A\u7528\u8D8A\u4E71\u7684\u6D41\u6C34\u8D26\u3002\u8BF7\u5199\u7B80\u6D01\u7684\u4E8B\u5B9E\u6027\u5185\u5BB9\uFF0C\u4E0D\u8981\u8BB0\u5F55\u77AC\u65F6\u4FE1\u606F\uFF08\u4E34\u65F6\u8DEF\u5F84\u3001\u5DE5\u5177\u62A5\u9519\u7B49\uFF09\u3002\u957F\u671F\u8BB0\u5FC6\u8D85\u51FA\u4E0A\u9650\u65F6\u4F1A\u81EA\u52A8\u53BB\u91CD\u4E0E\u7CBE\u7B80\uFF0C\u6458\u8981\u4E2D\u4F1A\u8BF4\u660E\u7CBE\u7B80\u7ED3\u679C\u3002",parameters:{type:"object",properties:{content:{type:"string",description:"\u8981\u8BB0\u5F55\u7684\u5185\u5BB9\uFF08Markdown\uFF0C\u5EFA\u8BAE\u7B80\u6D01\u3001\u5206\u70B9\uFF09"},scope:{type:"string",enum:["daily","long"],description:"daily=\u5F53\u65E5\u65E5\u5FD7\uFF08\u9ED8\u8BA4\uFF09\uFF1Blong=\u957F\u671F\u8BB0\u5FC6 MEMORY.md\uFF08\u4EC5\u7528\u4E8E\u5168\u65B0\u4E3B\u9898\uFF1B\u5DF2\u6709\u4E3B\u9898\u8BF7\u7528 memory_compact \u5E76\u5165\uFF09"}},required:["content"]},async execute(r,e){let n=typeof r.content=="string"?r.content.trim():"";if(!n)return{ok:!1,content:"\u9519\u8BEF\uFF1Acontent \u4E0D\u80FD\u4E3A\u7A7A\u3002"};let s=r.scope==="long"?"long":"daily";try{let i=rs(e.cwd,n,s),o=s==="long"?"\u957F\u671F\u8BB0\u5FC6":"\u5F53\u65E5\u65E5\u5FD7",a="";if(s==="long"){let l=e.memoryMaxChars??me,c=At(e.cwd,l);if(c&&(c.removedDuplicates>0||c.removedOldest>0)){let p=[];c.removedDuplicates>0&&p.push(`\u53BB\u9664 ${c.removedDuplicates} \u6761\u91CD\u590D\u8BB0\u5F55`),c.removedOldest>0&&p.push(`\u4E22\u5F03 ${c.removedOldest} \u6761\u6700\u65E7\u7684\u8FFD\u52A0\u8BB0\u5F55`),a=`
|
|
359
359
|
|
|
360
|
-
\uFF08\u957F\u671F\u8BB0\u5FC6\u5DF2\u81EA\u52A8\u7CBE\u7B80\uFF1A${
|
|
360
|
+
\uFF08\u957F\u671F\u8BB0\u5FC6\u5DF2\u81EA\u52A8\u7CBE\u7B80\uFF1A${p.join("\u3001")}\uFF0C${c.before} \u2192 ${c.after} \u5B57\u7B26\uFF09`}let u=Xe(e.cwd).longTerm.length;l>0&&u>l&&(a+=`
|
|
361
|
+
|
|
362
|
+
\u26A0 \u957F\u671F\u8BB0\u5FC6\u4ECD\u6709 ${u} \u5B57\u7B26\uFF08\u4E0A\u9650 ${l}\uFF09\uFF0C\u81EA\u52A8\u7CBE\u7B80\u5DF2\u65E0\u6CD5\u7EE7\u7EED\uFF08\u5269\u4E0B\u7684\u90FD\u662F\u6309\u4E3B\u9898\u6574\u7406\u7684\u7A33\u5B9A\u5C0F\u8282\uFF09\u3002\u8BF7**\u7ACB\u5373**\u7528 memory_read \u8BFB\u53D6\u5168\u6587\uFF0C\u518D\u7528 memory_compact \u63D0\u4EA4\u5408\u5E76\u540C\u4E3B\u9898\u3001\u5220\u51CF\u8FC7\u65F6\u5185\u5BB9\u540E\u7684\u5B8C\u6574\u7248\u672C\u3002`)}return{ok:!0,content:`\u5DF2\u5199\u5165${o}\uFF1A${i}${a}
|
|
361
363
|
|
|
362
364
|
\uFF08\u8BB0\u5FC6\u76EE\u5F55\uFF1A${Q(e.cwd).memoryDir}\uFF09`,summary:`\u5DF2\u5199\u5165${o}`}}catch(i){return{ok:!1,content:`\u5199\u5165\u8BB0\u5FC6\u5931\u8D25\uFF1A${i instanceof Error?i.message:String(i)}
|
|
363
|
-
\uFF08\u76EE\u6807\u76EE\u5F55\uFF1A${Q(e.cwd).memoryDir}\uFF09`}}}},
|
|
364
|
-
\uFF08${s} \u2192 ${
|
|
365
|
-
`)}function
|
|
366
|
-
|
|
367
|
-
\u2026\uFF08\u6280\u80FD\u5185\u5BB9\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD\uFF09`}function
|
|
368
|
-
[\u6267\u884C\u8D85\u65F6 ${e}ms]`:c,timedOut:u})},
|
|
369
|
-
[\u5DF2\u53D6\u6D88]`,timedOut:!1})};if(
|
|
370
|
-
[\u6267\u884C\u8D85\u65F6 ${e}ms]`:c,timedOut:u})},
|
|
371
|
-
[\u6267\u884C\u8D85\u65F6 ${e}ms]`:c,timedOut:u})})})}function
|
|
372
|
-
`)};let
|
|
373
|
-
`)}}return await Ke(n
|
|
374
|
-
`)}):(l(`\u26A0 \u5B89\u88C5\u547D\u4EE4\u5DF2\u6267\u884C\uFF0C\u4F46 \u201C${
|
|
375
|
-
`)})}async function
|
|
376
|
-
`).slice(-2).join(" ");s.failed.push(`${i.name} \u2192 ${c}`)}}return s}function
|
|
377
|
-
`).map(s=>s.trimEnd()).filter(s=>s.trim().length>0).slice(-e)}var
|
|
365
|
+
\uFF08\u76EE\u6807\u76EE\u5F55\uFF1A${Q(e.cwd).memoryDir}\uFF09`}}}},Ai={name:"memory_compact",description:"\u7528\u4E00\u4EFD**\u7CBE\u7B80\u540E\u7684\u5B8C\u6574\u5185\u5BB9**\u8986\u76D6\u957F\u671F\u8BB0\u5FC6 MEMORY.md\uFF08\u8BED\u4E49\u538B\u7F29\uFF09\u3002\u4E24\u4E2A\u7528\u9014\uFF1A\u2460 \u628A\u65B0\u7ED3\u8BBA**\u5E76\u8FDB\u5DF2\u6709\u4E3B\u9898\u5C0F\u8282**\uFF08\u8FD9\u662F\u957F\u671F\u8BB0\u5FC6\u7684\u5E38\u89C4\u66F4\u65B0\u65B9\u5F0F\uFF0C\u56E0\u4E3A memory_write \u53EA\u4F1A\u5728\u6587\u672B\u8FFD\u52A0\uFF09\uFF1B\u2461 \u957F\u671F\u8BB0\u5FC6\u8FC7\u957F / \u91CD\u590D / \u6709\u8FC7\u65F6\u6761\u76EE\u65F6\u505A\u6574\u4F53\u6574\u7406\u3002\u505A\u6CD5\uFF1A\u5148 memory_read \u8BFB\u53D6\u5168\u6587\uFF0C\u518D\u6309\u4E3B\u9898\u5408\u5E76\u6761\u76EE\u3001\u5220\u9664\u5DF2\u8FC7\u65F6\u6216\u88AB\u540E\u7EED\u7ED3\u8BBA\u63A8\u7FFB\u7684\u5185\u5BB9\u3001\u628A\u5197\u957F\u7684\u8FC7\u7A0B\u6D53\u7F29\u4E3A\u7ED3\u8BBA\uFF08\u7EC6\u8282\u7559\u5728\u9879\u76EE\u6587\u6863\u91CC\u3001\u8FD9\u91CC\u53EA\u7559\u6307\u9488\uFF09\uFF0C\u6700\u540E\u628A\u91CD\u5199\u7ED3\u679C\u901A\u8FC7\u672C\u5DE5\u5177\u63D0\u4EA4\u3002\u6CE8\u610F\uFF1A\u63D0\u4EA4\u7684\u662F**\u5B8C\u6574\u7684\u65B0\u7248\u672C**\uFF08\u4F1A\u6574\u4F53\u8986\u76D6\uFF09\uFF0C\u4E0D\u8981\u53EA\u63D0\u4EA4\u589E\u91CF\uFF1B\u7ED3\u6784\u4E0A\u4FDD\u7559\u300C\u6587\u9996\u7EF4\u62A4\u8BF4\u660E + `## \u4E3B\u9898` \u5C0F\u8282\u300D\u7684\u7EC4\u7EC7\u65B9\u5F0F\uFF0C\u4E0D\u8981\u9000\u56DE\u6309\u65F6\u95F4\u5806\u53E0\u7684\u65E5\u671F\u5757\uFF1B\u5FC5\u987B\u4FDD\u7559\u4ECD\u7136\u6709\u6548\u7684\u5173\u952E\u7ED3\u8BBA\u3001\u9879\u76EE\u7EA6\u5B9A\u4E0E\u8E29\u5751\u7ECF\u9A8C\u3002",parameters:{type:"object",properties:{content:{type:"string",description:"\u7CBE\u7B80\u540E\u7684\u957F\u671F\u8BB0\u5FC6\u5168\u6587\uFF08Markdown\uFF1A\u6587\u9996\u4E00\u884C\u7EF4\u62A4\u8BF4\u660E\uFF0C\u6B63\u6587\u6309 `## \u4E3B\u9898` \u5206\u8282\uFF09"}},required:["content"]},async execute(r,e){let n=typeof r.content=="string"?r.content.trim():"";if(!n)return{ok:!1,content:"\u9519\u8BEF\uFF1Acontent \u4E0D\u80FD\u4E3A\u7A7A\u3002\u82E5\u8981\u6E05\u7A7A\u957F\u671F\u8BB0\u5FC6\uFF0C\u8BF7\u63D0\u4EA4\u975E\u7A7A\u8BF4\u660E\u5185\u5BB9\u3002"};try{let s=Xe(e.cwd).longTerm.length;return{ok:!0,content:`\u5DF2\u91CD\u5199\u957F\u671F\u8BB0\u5FC6\uFF1A${Tn(e.cwd,n)}
|
|
366
|
+
\uFF08${s} \u2192 ${n.length} \u5B57\u7B26\uFF09`,summary:`\u957F\u671F\u8BB0\u5FC6\u5DF2\u7CBE\u7B80\uFF08${s} \u2192 ${n.length} \u5B57\u7B26\uFF09`}}catch(s){return{ok:!1,content:`\u91CD\u5199\u957F\u671F\u8BB0\u5FC6\u5931\u8D25\uFF1A${s instanceof Error?s.message:String(s)}`}}}};var Oe=v(require("fs")),tn=v(require("path"));var Qt=v(require("fs")),_i=v(require("path"));var Zt=1;function Sr(){return _i.join(T(),"skills.json")}function Ei(){try{let r=Qt.readFileSync(Sr(),"utf8"),e=JSON.parse(r),n=Array.isArray(e.disabled)?e.disabled.filter(s=>typeof s=="string"&&s.trim()!==""):[];return{version:Zt,disabled:n}}catch{return{version:Zt,disabled:[]}}}function ki(r){Z(T()),Qt.writeFileSync(Sr(),`${JSON.stringify(r,null,2)}
|
|
367
|
+
`)}function wr(){return Ei().disabled}function en(r,e){let n=Ei(),s=r.trim().toLowerCase(),i=n.disabled.filter(o=>o.toLowerCase()!==s);return e?i.length!==n.disabled.length?!1:(ki({version:Zt,disabled:[...i,r.trim()]}),!0):i.length===n.disabled.length?!1:(ki({version:Zt,disabled:i}),!0)}var Pi="SKILL.md",Ri=8e4;function Ii(r){return r.replace(/^["']|["']$/g,"").trim()}function ml(r){let e=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?/.exec(r);if(!e)return{meta:{},body:r};let n=e[1],s=r.slice(e[0].length),i=/^name:\s*(.+)$/m.exec(n)?.[1];return{meta:{name:i?Ii(i):void 0,description:fl(n)},body:s}}function fl(r){let e=/^description:\s*(.*)$/m.exec(r)?.[1]?.trim();if(e&&e!==">"&&e!=="|"&&e!==">-"&&e!=="|-")return Ii(e);let n=/^description:\s*[>|]-?\s*\n((?:[ \t]+\S.*\n?)+)/m.exec(r)?.[1];return n?n.replace(/\s+/g," ").trim():""}function gl(r){let e=tn.join(r,Pi);if(Oe.existsSync(e))return e;try{let n=Oe.readdirSync(r).find(s=>s.toLowerCase()===Pi.toLowerCase());return n?tn.join(r,n):null}catch{return null}}function Mi(r,e,n){let s;try{s=Oe.readdirSync(r,{withFileTypes:!0})}catch{return}for(let i of s){if(!i.isDirectory())continue;let o=tn.join(r,i.name),a=gl(o);if(!a)continue;let l;try{l=Oe.readFileSync(a,"utf8")}catch{continue}let{meta:c}=ml(l),u=(c.name||i.name).trim();u&&n.set(u,{name:u,description:c.description??"",dir:o,file:a,source:e})}}function oe(r={}){let e=new Map;Mi(Vr(),"builtin",e),Mi(Yr(),"user",e);let n=[...e.values()].sort((i,o)=>i.name.localeCompare(o.name));if(r.includeDisabled)return n;let s=new Set(wr().map(i=>i.toLowerCase()));return n.filter(i=>!s.has(i.name.toLowerCase()))}function Di(r,e={}){let n=r.trim().toLowerCase();if(n)return oe(e).find(s=>s.name.toLowerCase()===n)}function Oi(r){let e=Oe.readFileSync(r.file,"utf8");return e.length<=Ri?e:`${e.slice(0,Ri)}
|
|
368
|
+
|
|
369
|
+
\u2026\uFF08\u6280\u80FD\u5185\u5BB9\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD\uFF09`}function Ae(){return process.platform==="darwin"?"darwin":process.platform==="win32"?"win32":"linux"}var Cr="npm install -g @playwright/cli@latest",Tr="npx --yes playwright@latest install chromium",$l={linux:"curl -fsSL https://d.officecli.ai/install.sh | bash",darwin:"curl -fsSL https://d.officecli.ai/install.sh | bash",win32:'powershell -NoProfile -Command "irm https://d.officecli.ai/install.ps1 | iex"'},Li={playwright:[{name:"Playwright CLI\uFF08playwright-cli\uFF09",check:"playwright-cli --version",install:{linux:Cr,darwin:Cr,win32:Cr},postInstall:{linux:Tr,darwin:Tr,win32:Tr}}],officecli:[{name:"OfficeCLI\uFF08officecli\uFF09",check:"officecli --version",install:$l}]};function ut(r){return Li[r.trim().toLowerCase()]??[]}function Ni(){return Object.keys(Li)}function ji(r){return['SUDO="sudo -n"; [ -t 0 ] && SUDO="sudo"',`if command -v apt-get >/dev/null 2>&1; then $SUDO apt-get install -y ${r}`,`elif command -v dnf >/dev/null 2>&1; then $SUDO dnf install -y ${r}`,`elif command -v yum >/dev/null 2>&1; then $SUDO yum install -y ${r}`,`elif command -v pacman >/dev/null 2>&1; then $SUDO pacman -S --noconfirm ${r}`,`elif command -v zypper >/dev/null 2>&1; then $SUDO zypper --non-interactive install ${r}`,`elif command -v apk >/dev/null 2>&1; then $SUDO apk add ${r}`,'else echo "\u672A\u8BC6\u522B\u5230\u53D7\u652F\u6301\u7684\u5305\u7BA1\u7406\u5668\uFF08apt / dnf / yum / pacman / zypper / apk\uFF09" >&2; exit 1; fi'].join("; ")}var yl={name:"xclip\uFF08X11 \u526A\u8D34\u677F\u5DE5\u5177\uFF09",check:"command -v xclip",install:{linux:ji("xclip")}},vl={name:"wl-clipboard\uFF08Wayland \u526A\u8D34\u677F\u5DE5\u5177\uFF09",check:"command -v wl-paste",install:{linux:ji("wl-clipboard")}};function Ar(r=Ae()){return r!=="linux"?[]:[!!(process.env.WAYLAND_DISPLAY||process.env.WAYLAND_SOCKET)?vl:yl]}function Bi(r=Ae()){return Ar(r)}var kr=require("child_process");var bl=15e3,nn=9e5,xl=2e4,Fi=120,zi=1500;function Ji(r,e,n){return new Promise(s=>{let i=process.platform==="win32",o=i?"cmd.exe":process.env.SHELL||"bash",l=(0,kr.spawn)(o,i?["/d","/s","/c",r]:["-lc",r],{env:process.env,windowsHide:!0,detached:!i}),c="",u=!1,p=!1,d,h=$=>{c.length<xl&&(c+=$.toString())},m=$=>{p||(p=!0,clearTimeout(g),d&&clearTimeout(d),n?.removeEventListener("abort",S),s($))},f=()=>{if(!i&&l.pid)try{process.kill(-l.pid,"SIGKILL");return}catch{}try{l.kill("SIGKILL")}catch{}},y=()=>{d&&clearTimeout(d),d=setTimeout(()=>{m({ok:!1,output:u?`${c}
|
|
370
|
+
[\u6267\u884C\u8D85\u65F6 ${e}ms]`:c,timedOut:u})},zi)},g=setTimeout(()=>{u=!0,f(),y()},e),S=()=>{f(),m({ok:!1,output:c+`
|
|
371
|
+
[\u5DF2\u53D6\u6D88]`,timedOut:!1})};if(n){if(n.aborted){S();return}n.addEventListener("abort",S,{once:!0})}l.stdout?.on("data",h),l.stderr?.on("data",h),l.on("error",$=>{m({ok:!1,output:c+String($),timedOut:u})}),l.on("exit",$=>{d&&clearTimeout(d),d=setTimeout(()=>{m({ok:$===0&&!u,output:u?`${c}
|
|
372
|
+
[\u6267\u884C\u8D85\u65F6 ${e}ms]`:c,timedOut:u})},Fi)}),l.on("close",$=>{m({ok:$===0&&!u,output:u?`${c}
|
|
373
|
+
[\u6267\u884C\u8D85\u65F6 ${e}ms]`:c,timedOut:u})})})}function _r(r,e=nn,n){return new Promise(s=>{let i=process.platform==="win32",o=i?"cmd.exe":process.env.SHELL||"bash",l=(0,kr.spawn)(o,i?["/d","/s","/c",r]:["-lc",r],{stdio:"inherit",env:process.env,windowsHide:!0}),c=!1,u=!1,p,d=g=>{u||(u=!0,clearTimeout(f),p&&clearTimeout(p),n?.removeEventListener("abort",y),s(g))},h=()=>{try{l.kill("SIGKILL")}catch{}},m=()=>{p&&clearTimeout(p),p=setTimeout(()=>d({ok:!1,output:"",timedOut:c}),zi)},f=setTimeout(()=>{c=!0,h(),m()},e),y=()=>{h(),m()};if(n){if(n.aborted){y();return}n.addEventListener("abort",y,{once:!0})}l.on("error",g=>{d({ok:!1,output:String(g),timedOut:!1})}),l.on("exit",g=>{p&&clearTimeout(p),p=setTimeout(()=>d({ok:g===0&&!c,output:"",timedOut:c}),Fi)}),l.on("close",g=>{d({ok:g===0&&!c,output:"",timedOut:c})})})}async function Ke(r,e){return(await Ji(r.check,bl,e)).ok}async function Er(r,e=Ae(),n,s,i={}){let o=r.install[e];if(!o)return{ok:!1,log:`\u5F53\u524D\u5E73\u53F0\uFF08${e}\uFF09\u6CA1\u6709\u53EF\u7528\u7684\u81EA\u52A8\u5B89\u88C5\u547D\u4EE4\u3002`};let a=[],l=h=>{let m=h.trim();m&&(a.push(m),s?.(m))},c=async h=>{if(!i.interactive)return Ji(h,nn,n);let m=await _r(h,nn,n);return m.ok||l(m.timedOut?`[\u6267\u884C\u8D85\u65F6 ${nn}ms]\uFF1B\u4EA4\u4E92\u5F0F\u5B89\u88C5\u65E0\u6CD5\u6309\u8FDB\u7A0B\u7EC4\u7EC8\u6B62\uFF0C\u82E5\u5B89\u88C5\u7A0B\u5E8F\u4ECD\u5728\u540E\u53F0\u8DD1\uFF0C\u8BF7\u624B\u52A8\u68C0\u67E5`:"\uFF08\u5B89\u88C5\u8F93\u51FA\u5DF2\u76F4\u63A5\u6253\u5370\u5728\u7EC8\u7AEF\u4E0A\uFF09"),m};l(`$ ${o}`);let u=await c(o);for(let h of Ui(u.output,12))l(h);if(!u.ok)return{ok:!1,log:a.join(`
|
|
374
|
+
`)};let p=r.postInstall?.[e];if(p){l(`$ ${p}`);let h=await c(p);for(let m of Ui(h.output,12))l(m);if(!h.ok)return{ok:!1,log:a.join(`
|
|
375
|
+
`)}}return await Ke(r,n)?(l(`\u2713 ${r.name} \u5DF2\u5C31\u7EEA`),{ok:!0,log:a.join(`
|
|
376
|
+
`)}):(l(`\u26A0 \u5B89\u88C5\u547D\u4EE4\u5DF2\u6267\u884C\uFF0C\u4F46 \u201C${r.check}\u201D \u4ECD\u672A\u901A\u8FC7\uFF1B\u53EF\u80FD\u662F PATH \u5C1A\u672A\u5237\u65B0\uFF0C\u8BF7\u91CD\u65B0\u6253\u5F00\u7EC8\u7AEF\u540E\u518D\u8BD5\u3002`),{ok:!1,log:a.join(`
|
|
377
|
+
`)})}async function Ki(r,e={}){return Sl(ut(r),e)}async function Sl(r,e={}){let n=e.platform??Ae(),s={installed:[],skipped:[],failed:[]};for(let i of r){if(await Ke(i,e.signal))continue;let o=i.install[n];if(!o){s.skipped.push(`${i.name}\uFF08\u5F53\u524D\u5E73\u53F0\u65E0\u81EA\u52A8\u5B89\u88C5\u547D\u4EE4\uFF09`);continue}if(!(e.confirm?await e.confirm(i,o):!1)){s.skipped.push(`${i.name}`);continue}e.onOutput?.(`\u6B63\u5728\u5B89\u88C5 ${i.name} \u2026\uFF08\u53EF\u80FD\u9700\u8981\u6570\u5206\u949F\uFF09`);let l=await Er(i,n,e.signal,e.onOutput);if(l.ok)s.installed.push(i.name);else{let c=l.log.split(`
|
|
378
|
+
`).slice(-2).join(" ");s.failed.push(`${i.name} \u2192 ${c}`)}}return s}function Ui(r,e){return r.split(`
|
|
379
|
+
`).map(s=>s.trimEnd()).filter(s=>s.trim().length>0).slice(-e)}var Hi={name:"list_skills",description:"\u5217\u51FA\u7384\u732A\u5F53\u524D\u53EF\u7528\u7684\u5168\u90E8\u6280\u80FD\uFF08\u540D\u79F0\u4E0E\u7528\u9014\uFF09\u3002\u6280\u80FD\u662F\u4E00\u4EFD\u6307\u5BFC\u4F60\u4F7F\u7528\u7279\u5B9A\u5916\u90E8 CLI \u5DE5\u5177\u7684\u6307\u5357\u3002\u5F53\u4EFB\u52A1\u53EF\u80FD\u6D89\u53CA\u67D0\u4E2A\u9886\u57DF\uFF08\u6D4F\u89C8\u5668\u81EA\u52A8\u5316\u3001Office \u6587\u6863\u3001GitHub\u3001\u6570\u636E\u5E93\u7B49\uFF09\u65F6\uFF0C\u5148\u8C03\u7528\u672C\u5DE5\u5177\u67E5\u770B\u662F\u5426\u6709\u5BF9\u5E94\u6280\u80FD\u3002",parameters:{type:"object",properties:{},required:[]},async execute(r,e){let n=oe();if(n.length===0)return{ok:!0,content:"\u5F53\u524D\u6CA1\u6709\u53EF\u7528\u6280\u80FD\u3002"};let s=n.map(i=>{let o=i.source==="user"?"\uFF08\u7528\u6237\uFF09":"";return`- ${i.name}${o}\uFF1A${i.description||"\uFF08\u65E0\u63CF\u8FF0\uFF09"}`});return{ok:!0,content:`\u53EF\u7528\u6280\u80FD\uFF08${n.length} \u4E2A\uFF09\uFF1A
|
|
378
380
|
${s.join(`
|
|
379
|
-
`)}`,summary:`${
|
|
381
|
+
`)}`,summary:`${n.length} \u4E2A\u6280\u80FD`}}},qi={name:"load_skill",description:"\u52A0\u8F7D\u6307\u5B9A\u6280\u80FD\u7684\u5B8C\u6574\u6307\u5357\uFF08SKILL.md \u5168\u6587\uFF09\uFF0C\u968F\u540E\u8BF7\u4E25\u683C\u6309\u6307\u5357\u4E2D\u7684\u6B65\u9AA4\u4E0E\u547D\u4EE4\u64CD\u4F5C\u3002\u82E5\u8BE5\u6280\u80FD\u4F9D\u8D56\u7684\u5916\u90E8\u547D\u4EE4\u5C1A\u672A\u5B89\u88C5\uFF0C\u7384\u732A\u4F1A\u81EA\u52A8\u5B89\u88C5\uFF08\u53EF\u80FD\u9700\u8981\u7528\u6237\u786E\u8BA4\u4E00\u6B21\uFF09\u3002\u6307\u5357\u5728\u672C\u6B21\u5BF9\u8BDD\u4E2D\u6301\u7EED\u6709\u6548\uFF0C\u540C\u4E00\u4E2A\u6280\u80FD\u65E0\u9700\u91CD\u590D\u52A0\u8F7D\u3002",parameters:{type:"object",properties:{name:{type:"string",description:"\u6280\u80FD\u540D\u79F0\uFF0C\u4F8B\u5982 playwright\u3001officecli"}},required:["name"]},async execute(r,e){let n=typeof r.name=="string"?r.name:"";if(!n.trim())return{ok:!1,content:"\u9519\u8BEF\uFF1A\u7F3A\u5C11\u6280\u80FD\u540D\u79F0\u53C2\u6570 name\u3002"};let s=Di(n);if(!s){let c=oe().map(u=>u.name).join(", ");return{ok:!1,content:`\u672A\u627E\u5230\u6280\u80FD "${n}"\u3002\u53EF\u7528\u6280\u80FD\uFF1A${c||"\uFF08\u65E0\uFF09"}\u3002\u53EF\u5148\u8C03\u7528 list_skills \u67E5\u770B\u3002`}}let i=[];if(ut(s.name).length>0){let c=await Ki(s.name,{signal:e.signal,onOutput:u=>e.emit?.(u),confirm:async(u,p)=>e.autoApprove?!0:e.confirm?e.confirm({tool:"load_skill",title:`\u5B89\u88C5\u6280\u80FD\u4F9D\u8D56\uFF1A${u.name}`,detail:`\u6280\u80FD\u300C${s.name}\u300D\u9700\u8981\u8BE5\u547D\u4EE4\uFF0C\u662F\u5426\u73B0\u5728\u81EA\u52A8\u5B89\u88C5\uFF1F
|
|
380
382
|
|
|
381
|
-
${
|
|
383
|
+
${p}`,danger:!0}):!1});for(let u of c.installed)i.push(`\u2713 \u5DF2\u5B89\u88C5\u5E76\u9A8C\u8BC1\uFF1A${u}`);for(let u of c.skipped)i.push(`\u26A0 \u672A\u5B89\u88C5\uFF08\u5DF2\u8DF3\u8FC7\uFF09\uFF1A${u}`);for(let u of c.failed)i.push(`\u2717 \u5B89\u88C5\u5931\u8D25\uFF1A${u}`)}let o=Oi(s),a=i.length>0?`> \u4F9D\u8D56\u5904\u7406\uFF1A
|
|
382
384
|
${i.map(c=>`> ${c}`).join(`
|
|
383
385
|
`)}
|
|
384
386
|
|
|
@@ -387,11 +389,11 @@ ${i.map(c=>`> ${c}`).join(`
|
|
|
387
389
|
> \u6280\u80FD\u76EE\u5F55\uFF1A${s.dir}
|
|
388
390
|
> \u4E3B\u6587\u4EF6\u91CC\u63D0\u5230\u7684\u4F34\u968F\u6587\u4EF6\uFF08\u5982 \`references/*.md\`\uFF09\u90FD\u5728\u6B64\u76EE\u5F55\u4E0B\uFF0C\u7528 read_file \u6309\u300C\u6280\u80FD\u76EE\u5F55 + \u76F8\u5BF9\u8DEF\u5F84\u300D\u8BFB\u53D6\u3002
|
|
389
391
|
|
|
390
|
-
${a}${o}`,summary:l>0?`\u5DF2\u52A0\u8F7D ${s.name}\uFF08\u5B89\u88C5 ${l} \u9879\u4F9D\u8D56\uFF09`:`\u5DF2\u52A0\u8F7D\u6280\u80FD ${s.name}`}}};var
|
|
391
|
-
`)}function
|
|
392
|
-
${
|
|
392
|
+
${a}${o}`,summary:l>0?`\u5DF2\u52A0\u8F7D ${s.name}\uFF08\u5B89\u88C5 ${l} \u9879\u4F9D\u8D56\uFF09`:`\u5DF2\u52A0\u8F7D\u6280\u80FD ${s.name}`}}};var Wi=["pending","in_progress","completed","cancelled"],wl={pending:"[ ]",in_progress:"[~]",completed:"[x]",cancelled:"[-]"};function Cl(r){if(!Array.isArray(r))return"\u9519\u8BEF\uFF1Atodos \u5FC5\u987B\u662F\u6570\u7EC4\u3002";let e=[];for(let s=0;s<r.length;s++){let i=r[s];if(typeof i!="object"||i===null||Array.isArray(i))return`\u9519\u8BEF\uFF1Atodos[${s}] \u5FC5\u987B\u662F\u5BF9\u8C61\uFF08{content, status}\uFF09\u3002`;let{content:o,status:a}=i;if(typeof o!="string"||!o.trim())return`\u9519\u8BEF\uFF1Atodos[${s}].content \u4E0D\u80FD\u4E3A\u7A7A\u3002`;let l=Wi.includes(a)?a:"pending";e.push({content:o.trim(),status:l})}return e.filter(s=>s.status==="in_progress").length>1?"\u9519\u8BEF\uFF1A\u540C\u4E00\u65F6\u95F4\u53EA\u80FD\u6709\u4E00\u4E2A in_progress \u7684\u4EFB\u52A1\uFF0C\u8BF7\u628A\u5176\u4F59\u4EFB\u52A1\u6807\u4E3A pending\u3002":e}function Tl(r){return r.length===0?"\uFF08\u4EFB\u52A1\u5217\u8868\u4E3A\u7A7A\uFF09":r.map(e=>`${wl[e.status]} ${e.content}`).join(`
|
|
393
|
+
`)}function Al(r){let e=r.filter(i=>i.status==="completed").length,n=r.find(i=>i.status==="in_progress"),s=r.filter(i=>i.status!=="cancelled").length;return n?`\u4EFB\u52A1 ${e}/${s} \xB7 \u8FDB\u884C\u4E2D\uFF1A${n.content}`:`\u4EFB\u52A1 ${e}/${s}`}var Gi={name:"todo_write",description:"\u521B\u5EFA\u6216\u66F4\u65B0\u5F53\u524D\u4F1A\u8BDD\u7684\u4EFB\u52A1\u5217\u8868\uFF08todo list\uFF09\uFF0C\u7528\u4E8E\u628A\u590D\u6742\u4EFB\u52A1\u62C6\u6210\u53EF\u8DDF\u8E2A\u7684\u6B65\u9AA4\u3002**\u5F53\u4EFB\u52A1\u9700\u8981 3 \u6B65\u4EE5\u4E0A\u3001\u6216\u7528\u6237\u7ED9\u51FA\u591A\u9879\u8981\u6C42\u65F6\uFF0C\u5E94\u5148\u8C03\u7528\u5B83\u5217\u51FA\u8BA1\u5212**\uFF0C\u5E76\u5728\u6BCF\u5B8C\u6210\u4E00\u6B65\u540E\u66F4\u65B0\u5217\u8868\uFF08\u628A\u8BE5\u9879\u6807\u4E3A completed\u3001\u628A\u4E0B\u4E00\u9879\u6807\u4E3A in_progress\uFF09\u3002\u6BCF\u6B21\u63D0\u4EA4**\u5B8C\u6574\u5217\u8868**\uFF08\u8986\u76D6\u65E7\u5217\u8868\uFF09\uFF0C\u800C\u4E0D\u662F\u589E\u91CF\u3002\u540C\u4E00\u65F6\u95F4\u53EA\u80FD\u6709\u4E00\u9879 in_progress\u3002\u7B80\u5355\u7684\u4E00\u4E24\u6B65\u4EFB\u52A1\uFF08\u8BFB\u4E00\u4E2A\u6587\u4EF6\u3001\u6539\u4E00\u884C\uFF09\u4E0D\u5FC5\u4F7F\u7528\u3002",parameters:{type:"object",properties:{todos:{type:"array",description:"\u5B8C\u6574\u7684\u4EFB\u52A1\u5217\u8868\uFF08\u5168\u91CF\u8986\u76D6\uFF09\uFF0C\u6309\u6267\u884C\u987A\u5E8F\u6392\u5217",items:{type:"object",properties:{content:{type:"string",description:"\u4EFB\u52A1\u5185\u5BB9\uFF0C\u4E00\u53E5\u8BDD\uFF0C\u52A8\u8BCD\u5F00\u5934\uFF08\u5982\u300C\u4FEE\u6539 agent.ts \u7684 runTool\u300D\uFF09"},status:{type:"string",enum:Wi,description:"pending=\u5F85\u529E\uFF1Bin_progress=\u8FDB\u884C\u4E2D\uFF08\u540C\u65F6\u53EA\u80FD\u6709\u4E00\u4E2A\uFF09\uFF1Bcompleted=\u5DF2\u5B8C\u6210\uFF1Bcancelled=\u5DF2\u53D6\u6D88"}},required:["content","status"]}}},required:["todos"]},async execute(r,e){if(!e.todos)return{ok:!1,content:"\u9519\u8BEF\uFF1A\u5F53\u524D\u73AF\u5883\u4E0D\u652F\u6301\u4EFB\u52A1\u5217\u8868\u3002"};let n=Cl(r.todos);return typeof n=="string"?{ok:!1,content:n}:(e.todos.set(n),{ok:!0,content:`\u5DF2\u66F4\u65B0\u4EFB\u52A1\u5217\u8868\uFF1A
|
|
394
|
+
${Tl(n)}`,summary:Al(n)})}};var rn=[Hi,qi,Ci,Ti,Ai,Gi,ni,gi,vi,bi,xi,$i,yi,si,...xr],kl=new Set(["task","todo_write","memory_write","memory_compact",...xr.map(r=>r.name)]);function sn(r,e=rn){return e.find(n=>n.name===r)}function on(r=rn){return r.map(e=>({name:e.name,description:e.description,parameters:e.parameters}))}function Xi(r){return rn.filter(e=>kl.has(e.name)?!1:r?r.includes(e.name):!0)}async function Vi(r,e,n,s=rn){let i=sn(r,s);if(!i)return{ok:!1,content:`\u9519\u8BEF\uFF1A\u672A\u77E5\u5DE5\u5177 "${r}"`};let o={};if(e&&e.trim())try{let d=JSON.parse(e);typeof d=="object"&&d!==null&&!Array.isArray(d)&&(o=d)}catch(d){return{ok:!1,content:`\u9519\u8BEF\uFF1A\u5DE5\u5177\u53C2\u6570\u4E0D\u662F\u5408\u6CD5 JSON\uFF1A${d instanceof Error?d.message:String(d)}`}}let a=i.parameters,l=a.properties??{},c=Array.isArray(a.required)?a.required:[],u=Object.keys(o).filter(d=>!(d in l));if(u.length>0){let d=Object.keys(l);return{ok:!1,content:`\u9519\u8BEF\uFF1A${r} \u6536\u5230\u672A\u77E5\u53C2\u6570 ${u.map(h=>`"${h}"`).join("\u3001")}\u3002\u53EF\u7528\u53C2\u6570\uFF1A${d.length>0?d.map(h=>`"${h}"`).join("\u3001"):"\uFF08\u65E0\uFF09"}`}}let p=c.filter(d=>o[d]===void 0||o[d]===null);if(p.length>0)return{ok:!1,content:`\u9519\u8BEF\uFF1A${r} \u7F3A\u5C11\u5FC5\u586B\u53C2\u6570 ${p.map(d=>`"${d}"`).join("\u3001")}\u3002`};try{return await i.execute(o,n)}catch(d){return{ok:!1,content:`\u5DE5\u5177\u6267\u884C\u5F02\u5E38\uFF1A${d instanceof Error?d.message:String(d)}`}}}async function Yi(r,e,n){let s=new Array(r.length);if(r.length===0)return s;let i=Number.isFinite(e)?Math.floor(e):1,o=Math.min(Math.max(1,i),r.length),a=0;return await Promise.all(Array.from({length:o},async()=>{for(;;){let l=a++;if(l>=r.length)return;s[l]=await n(r[l],l)}})),s}function Zi(r,e,n,s,i){let a=`\u4F60\u662F\u300C\u7384\u732A\u300D\uFF08XuanZhu\uFF09\uFF0C\u4E00\u6B3E\u8FD0\u884C\u5728\u7EC8\u7AEF\u4E2D\u7684 AI \u7F16\u7801 Agent\u3002
|
|
393
395
|
|
|
394
|
-
\u4F60\u7684\u5DE5\u4F5C\u76EE\u5F55\uFF1A${
|
|
396
|
+
\u4F60\u7684\u5DE5\u4F5C\u76EE\u5F55\uFF1A${r}
|
|
395
397
|
|
|
396
398
|
## \u6838\u5FC3\u539F\u5219
|
|
397
399
|
1. \u5148\u7406\u89E3\u518D\u52A8\u624B\uFF1A\u4FEE\u6539\u6587\u4EF6\u524D\u5148\u7528 read_file \u8BFB\u53D6\u786E\u8BA4\u5185\u5BB9\uFF0C\u4E0D\u8981\u51ED\u731C\u6D4B\u4FEE\u6539\u3002
|
|
@@ -402,12 +404,21 @@ ${wl(r)}`,summary:Cl(r)})}};var nr=[Ki,Hi,wi,Ci,Ti,Wi,ti,fi,yi,vi,bi,gi,$i,ni,..
|
|
|
402
404
|
6. \u6536\u5C3E\u65F6\u6C89\u6DC0\u8BB0\u5FC6\uFF1A**\u5728\u7ED9\u51FA\u672C\u8F6E\u6700\u7EC8\u7B54\u590D\u4E4B\u524D**\uFF0C\u5148\u5224\u65AD\u8FD9\u6B21\u662F\u5426\u4EA7\u51FA\u4E86\u8DE8\u4F1A\u8BDD\u4ECD\u6709\u4EF7\u503C\u7684\u5185\u5BB9
|
|
403
405
|
\uFF08\u786E\u5B9A\u7684\u6280\u672F\u65B9\u6848\u3001\u9879\u76EE\u7EA6\u5B9A\u3001\u8E29\u8FC7\u7684\u5751\u4E0E\u89E3\u6CD5\u3001\u91CD\u8981\u53D1\u73B0\u3001\u7528\u6237\u7684\u504F\u597D\u8981\u6C42\uFF09\u3002
|
|
404
406
|
\u53EA\u8981\u6709\uFF0C\u5C31**\u5FC5\u987B\u5148\u8C03\u7528 memory_write \u8BB0\u5F55\uFF0C\u518D\u7ED3\u675F\u672C\u8F6E**\u3002
|
|
407
|
+
\u5199\u957F\u671F\u8BB0\u5FC6\uFF08scope=long\uFF09\u524D\u5148 memory_read\uFF1A\u5C5E\u4E8E**\u5DF2\u6709\u4E3B\u9898**\u7684\u5185\u5BB9\u8981\u7528 memory_compact
|
|
408
|
+
\u5E76\u8FDB\u90A3\u4E2A\u5C0F\u8282\uFF0C\u53EA\u6709\u5168\u65B0\u4E3B\u9898\u624D\u8FFD\u52A0\u65B0\u5757 \u2014\u2014 \u957F\u671F\u8BB0\u5FC6\u662F\u6309\u4E3B\u9898\u6574\u7406\u7684\u7ED3\u8BBA\u5E93\uFF0C\u4E0D\u662F\u6D41\u6C34\u8D26\u3002
|
|
405
409
|
\u4E0D\u8981\u7559\u5230"\u4E0B\u6B21\u518D\u8BF4"\u2014\u2014\u672C\u8F6E\u7ED3\u675F\u540E\u4E0A\u4E0B\u6587\u5C31\u6CA1\u4E86\uFF0C\u8FD9\u4E9B\u7ED3\u8BBA\u4F1A\u6C38\u4E45\u4E22\u5931\u3002
|
|
406
|
-
\u7410\u788E\u7684\u8FC7\u7A0B\u7EC6\u8282\u3001\u4E34\u65F6\u8DEF\u5F84\u3001\u5DE5\u5177\u62A5\u9519\u4E0D\u5FC5\u8BB0\u5F55\u3002
|
|
407
|
-
7. \
|
|
408
|
-
\
|
|
409
|
-
|
|
410
|
-
|
|
410
|
+
\u7410\u788E\u7684\u8FC7\u7A0B\u7EC6\u8282\u3001\u4E34\u65F6\u8DEF\u5F84\u3001\u5DE5\u5177\u62A5\u9519\u4E0D\u5FC5\u8BB0\u5F55\uFF08\u5F53\u5929\u7684\u8FDB\u5C55\u8BB0 scope=daily\uFF09\u3002
|
|
411
|
+
7. \u5206\u6E05\u300C\u5F53\u524D\u4EFB\u52A1\u300D\u4E0E\u300C\u4E0A\u4E0B\u6587\u91CC\u7684\u65E7\u4EFB\u52A1\u300D\uFF1A**\u7528\u6237\u6700\u65B0\u4E00\u6761\u6D88\u606F\u5C31\u662F\u672C\u8F6E\u8981\u505A\u7684\u4E8B**\u3002
|
|
412
|
+
- \u5B83\u82E5\u53EA\u662F\u5BD2\u6684\uFF08\u300C\u5728\u5417\u300D\u300C\u4F60\u597D\u300D\u300C\u8C22\u8C22\u300D\uFF09\u3001\u63D0\u95EE\u3001\u6216\u8BF4\u4E86\u522B\u7684\u4E8B\u60C5\uFF0C\u5C31\u7167\u5B83\u56DE\u7B54 / \u7167\u5B83\u505A\uFF0C
|
|
413
|
+
**\u4E0D\u8981**\u987A\u624B\u628A\u4E0A\u6587\u91CC\u6CA1\u505A\u5B8C\u7684\u65E7\u4EFB\u52A1\u63A5\u7740\u505A\u5B8C \u2014\u2014 \u7528\u6237\u53EF\u80FD\u65E9\u5C31\u6362\u4E86\u8BDD\u9898\uFF0C
|
|
414
|
+
\u64C5\u81EA\u7EED\u8DD1\u65E7\u4EFB\u52A1\u4F1A\u505A\u51FA\u4E00\u5806\u4ED6\u6CA1\u8981\u7684\u4E8B\uFF08\u8D77\u670D\u52A1\u3001\u6539\u6587\u4EF6\uFF09\uFF0C\u8FD9\u662F\u6700\u4E25\u91CD\u7684\u4E00\u7C7B\u8D8A\u6743\u3002
|
|
415
|
+
- \u53EA\u6709\u5F53\u65B0\u6D88\u606F**\u660E\u786E\u8981\u6C42\u7EE7\u7EED**\uFF08\u300C\u7EE7\u7EED\u300D\u300C\u63A5\u7740\u505A\u300D\u300C\u7136\u540E\u5462\u300D\uFF09\u6216\u672C\u8EAB\u5C31\u6307\u5411\u90A3\u4EF6\u4E8B\u65F6\uFF0C
|
|
416
|
+
\u624D\u4ECE\u4E0A\u6B21\u505C\u4E0B\u7684\u5730\u65B9\u5F80\u4E0B\u505A\uFF1A\u52A8\u624B\u524D\u5148\u770B\u5BF9\u8BDD\u91CC**\u5DF2\u7ECF\u505A\u8FC7\u4EC0\u4E48**\uFF0C\u4E0D\u8981\u6BCF\u6B21\u4ECE\u5934\u91CD\u8FF0\u8BA1\u5212\u3001
|
|
417
|
+
\u91CD\u8DD1\u540C\u6837\u7684\u8C03\u7528\u3002\u82E5\u5DE5\u5177\u8FD4\u56DE\u91CC\u51FA\u73B0\u300C[\u7CFB\u7EDF\u63D0\u9192] \u8FD9\u4E00\u6B65\u5DF2\u7ECF\u5B8C\u6210\u300D\uFF0C\u8BF4\u660E\u4F60\u6B63\u5728\u91CD\u590D\uFF0C
|
|
418
|
+
\u8BF7\u7ACB\u5373\u8F6C\u5411\u672A\u5B8C\u6210\u7684\u90E8\u5206 \u2014\u2014 \u957F\u4EFB\u52A1\u91CC\u6700\u5BB9\u6613\u51FA\u7684\u95EE\u9898\u5C31\u662F\u300C\u5FD8\u8BB0\u8FDB\u5EA6\u540E\u91CD\u65B0\u5F00\u59CB\u300D\u3002
|
|
419
|
+
- \u4E0A\u6587\u91CC\u7684\u8BA1\u5212\u3001\u5F85\u529E\u3001\u5DF2\u6267\u884C\u8BB0\u5F55\u90FD**\u4E0D\u662F**\u73B0\u5728\u5FC5\u987B\u505A\u7684\u4E8B\uFF1B\u51FA\u73B0\u300C[\u4E0A\u4E0B\u6587\u63D0\u9192]\u300D\u8BF4\u660E
|
|
420
|
+
\u5386\u53F2\u5DF2\u88AB\u88C1\u526A\uFF0C\u6B8B\u7F3A\u7684\u65E7\u4EFB\u52A1\u4E00\u5F8B\u4E0D\u8981\u63A8\u6D4B\u7740\u5F80\u4E0B\u505A\u3002\u62FF\u4E0D\u51C6\u7528\u6237\u7684\u610F\u601D\u65F6\u5148\u95EE\u4E00\u53E5\uFF0C
|
|
421
|
+
\u6BD4\u66FF\u4ED6\u505A\u4E00\u5806\u4E8B\u8981\u597D\u3002
|
|
411
422
|
8. \u62C6\u89E3\u590D\u6742\u4EFB\u52A1\uFF1A\u4EFB\u52A1\u9700\u8981 **3 \u6B65\u4EE5\u4E0A**\u3001\u6216\u7528\u6237\u4E00\u6B21\u63D0\u51FA\u591A\u9879\u8981\u6C42\u65F6\uFF0C**\u5148\u7528 todo_write
|
|
412
423
|
\u5217\u51FA\u8BA1\u5212**\u518D\u52A8\u624B\uFF1B\u6BCF\u5B8C\u6210\u4E00\u6B65\u5C31\u66F4\u65B0\u5217\u8868\uFF08\u8BE5\u9879\u6807 completed\u3001\u4E0B\u4E00\u9879\u6807 in_progress\uFF09\u3002
|
|
413
424
|
\u8FD9\u65E2\u662F\u7ED9\u81EA\u5DF1\u7EF4\u6301\u8FDB\u5EA6\uFF0C\u4E5F\u8BA9\u7528\u6237\u968F\u65F6\u770B\u5230\u8FDB\u5C55\u3002\u4E00\u4E24\u6B65\u7684\u5C0F\u4EFB\u52A1\u4E0D\u5FC5\u4F7F\u7528\u3002
|
|
@@ -429,7 +440,7 @@ ${wl(r)}`,summary:Cl(r)})}};var nr=[Ki,Hi,wi,Ci,Ti,Wi,ti,fi,yi,vi,bi,gi,$i,ni,..
|
|
|
429
440
|
- bash\uFF1A\u6267\u884C shell \u547D\u4EE4\uFF08\u5371\u9669\uFF0C\u9700\u786E\u8BA4\uFF09
|
|
430
441
|
- todo_write\uFF1A\u521B\u5EFA / \u66F4\u65B0\u4EFB\u52A1\u5217\u8868\uFF08\u6BCF\u6B21\u63D0\u4EA4\u5B8C\u6574\u5217\u8868\uFF09
|
|
431
442
|
- task\uFF1A\u6D3E\u751F\u5B50\u4EE3\u7406\uFF08\u9ED8\u8BA4 code-explorer\uFF09\u6267\u884C\u5B50\u4EFB\u52A1\uFF0C\u53EA\u8FD4\u56DE\u7ED3\u8BBA
|
|
432
|
-
- memory_compact\uFF1A\u7528\u7CBE\u7B80\u540E\u7684\u5B8C\u6574\u5185\u5BB9\u91CD\u5199\u957F\u671F\u8BB0\u5FC6\
|
|
443
|
+
- memory_compact\uFF1A\u7528\u7CBE\u7B80\u540E\u7684\u5B8C\u6574\u5185\u5BB9\u91CD\u5199\u957F\u671F\u8BB0\u5FC6 \u2014\u2014 \u628A\u65B0\u7ED3\u8BBA\u5E76\u8FDB\u5DF2\u6709\u4E3B\u9898\u5C0F\u8282\uFF0C\u6216\u6574\u4F53\u538B\u7F29
|
|
433
444
|
- device_list / device_push / device_run / device_stop / device_logs\uFF1A\u628A\u811A\u672C\u63A8\u5230**\u624B\u673A**
|
|
434
445
|
\uFF08AutoJs6 / AutoX.js\uFF09\u4E0A\u8FD0\u884C\uFF0C\u5E76\u56DE\u6536\u624B\u673A\u4E0A\u7684\u65E5\u5FD7\uFF08\u8FD9\u5C31\u662F"\u64CD\u4F5C\u624B\u673A"\u7684\u65B9\u5F0F\uFF09\u3002
|
|
435
446
|
\xB7 **\u8981\u64CD\u4F5C\u624B\u673A\u65F6\u5148 load_skill autojs6** \u2014\u2014 \u91CC\u9762\u6709 API \u901F\u67E5\u4E0E\u5FC5\u987B\u9075\u5B88\u7684\u7EA6\u5B9A\uFF1B
|
|
@@ -461,204 +472,208 @@ ${wl(r)}`,summary:Cl(r)})}};var nr=[Ki,Hi,wi,Ci,Ti,Wi,ti,fi,yi,vi,bi,gi,$i,ni,..
|
|
|
461
472
|
## \u8F93\u51FA\u98CE\u683C
|
|
462
473
|
- \u6D89\u53CA\u4EE3\u7801\u65F6\u4F7F\u7528 Markdown \u4EE3\u7801\u5757\u5E76\u6807\u6CE8\u8BED\u8A00\u3002
|
|
463
474
|
- \u5B8C\u6210\u4EFB\u52A1\u540E\u7B80\u8981\u8BF4\u660E\u6539\u4E86\u4EC0\u4E48\u3001\u63A5\u4E0B\u6765\u53EF\u4EE5\u505A\u4EC0\u4E48\u3002
|
|
464
|
-
- \u82E5\u4EFB\u52A1\u65E0\u6CD5\u5B8C\u6210\uFF0C\u8BF4\u660E\u539F\u56E0\u548C\u6240\u9700\u4FE1\u606F\u3002`;return
|
|
475
|
+
- \u82E5\u4EFB\u52A1\u65E0\u6CD5\u5B8C\u6210\uFF0C\u8BF4\u660E\u539F\u56E0\u548C\u6240\u9700\u4FE1\u606F\u3002`;return n&&n.trim()&&(a+=`
|
|
465
476
|
|
|
466
477
|
## \u9879\u76EE\u89C4\u5219\uFF08\u6765\u81EA\u9879\u76EE\u6839 .xuanzhu/rules.md\uFF0C\u8BF7\u4F18\u5148\u9075\u5B88\uFF09
|
|
467
|
-
${
|
|
478
|
+
${n.trim()}`),a+=_l(s,i),e&&e.trim()&&(a+=`
|
|
468
479
|
|
|
469
480
|
## \u9644\u52A0\u6307\u4EE4
|
|
470
|
-
${e.trim()}`),a}var
|
|
471
|
-
\u2026\uFF08\u5DF2\u622A\u65AD\uFF0C\u53EF\u7528 memory_read \u67E5\u770B\u5B8C\u6574\u5185\u5BB9\uFF09`:s;
|
|
481
|
+
${e.trim()}`),a}var an=1500;function _l(r,e){let n="\n\n## \u9879\u76EE\u8BB0\u5FC6\n\u672C\u9879\u76EE\u5728 `.xuanzhu/memory/` \u4E2D\u4FDD\u5B58\u8DE8\u4F1A\u8BDD\u8BB0\u5FC6\uFF0C\u5206\u4E24\u5C42\uFF1A\n- **\u957F\u671F\u8BB0\u5FC6 `MEMORY.md`**\uFF1A**\u6309\u4E3B\u9898\u6574\u7406\u7684\u7ED3\u8BBA\u5E93** \u2014\u2014 \u8DE8\u4F1A\u8BDD\u7A33\u5B9A\u7684\u4E8B\u5B9E\u3001\u53E3\u5F84\u4E0E\u8E29\u5751\u3002\n- **\u5F53\u65E5\u65E5\u5FD7 `YYYY-MM-DD.md`**\uFF1A\u5F53\u5929\u7684\u8FDB\u5C55\u4E0E\u8FC7\u7A0B\u8BB0\u5F55\u3002\n\u5DE5\u5177\uFF1A\n- **`memory_read`**\uFF1A\u8BFB\u53D6\u957F\u671F\u8BB0\u5FC6\u5168\u6587\u4E0E\u6700\u8FD1\u4E00\u4EFD\u65E5\u5FD7\u3002\u5F00\u59CB\u4E00\u9879\u9700\u8981\u9879\u76EE\u80CC\u666F\u7684\u4EFB\u52A1\u524D**\u5E94\u5F53\u5148\u8BFB**\uFF0C\u907F\u514D\u91CD\u590D\u6478\u7D22\u3001\u91CD\u590D\u8E29\u5751\u3002\n- **`memory_write`**\uFF1A\u5199\u5165\u503C\u5F97\u8DE8\u4F1A\u8BDD\u4FDD\u7559\u7684\u4FE1\u606F\uFF0C**\u6BCF\u5B8C\u6210\u4E00\u4EF6\u5B9E\u8D28\u5DE5\u4F5C\u90FD\u5FC5\u987B\u5199**\u3002`scope=daily`\uFF08\u9ED8\u8BA4\uFF09\u8FFD\u52A0\u5F53\u65E5\u8FDB\u5C55\uFF1B`scope=long` \u8FFD\u52A0\u4E00\u6761\u957F\u671F\u8BB0\u5FC6\u5757\u3002\n- **`memory_compact`**\uFF1A\u7528\u7CBE\u7B80\u540E\u7684**\u5B8C\u6574\u5185\u5BB9**\u91CD\u5199\u957F\u671F\u8BB0\u5FC6\u3002**\u8981\u628A\u65B0\u7ED3\u8BBA\u5E76\u8FDB\u5DF2\u6709\u5C0F\u8282\u65F6\u7528\u5B83\uFF0C\u800C\u4E0D\u662F\u518D\u8FFD\u52A0\u4E00\u5757\u3002**\n\n**\u957F\u671F\u8BB0\u5FC6\u600E\u4E48\u5199\uFF08\u51B3\u5B9A\u5B83\u5728\u540E\u7EED\u4F1A\u8BDD\u91CC\u662F\u5426\u771F\u7684\u6709\u7528\uFF09**\uFF1A\n1. **\u6309\u4E3B\u9898\u5206\u8282\uFF0C\u4E0D\u6309\u65F6\u95F4\u5806\u780C**\uFF1A\u5982 `## \u73AF\u5883\u4E0E\u90E8\u7F72`\u3001`## \u6743\u9650\u673A\u5236`\u3001`## \u5E38\u89C1\u5751`\uFF1B\u540C\u4E00\u4E3B\u9898\u7684\u65B0\u53D1\u73B0\u8981**\u5E76\u8FDB\u5DF2\u6709\u5C0F\u8282**\uFF08`memory_read` \u2192 `memory_compact` \u91CD\u5199\uFF09\uFF0C\u4E0D\u8981\u5728\u6587\u672B\u518D\u6302\u4E00\u6761\u65E5\u671F\u5757\u3002\u6587\u9996\u7559\u4E00\u884C\u7EF4\u62A4\u8BF4\u660E\uFF1A\u8FD9\u4EFD\u6587\u4EF6\u653E\u4EC0\u4E48 + \u6700\u8FD1\u4E00\u6B21\u6574\u7406\u65E5\u671F\u3002\u5C0F\u8282**\u6309\u91CD\u8981\u6027\u4ECE\u524D\u5F80\u540E\u6392**\uFF08\u6CE8\u5165\u63D0\u793A\u8BCD\u7684\u53EA\u662F\u5F00\u5934\u4E00\u8282\u9009\uFF09\u3002\n2. **\u53EA\u5199\u8DE8\u4F1A\u8BDD\u7A33\u5B9A\u3001\u53EF\u590D\u7528\u7684\u5185\u5BB9**\uFF1A\u7ED3\u8BBA\u4E0E\u53E3\u5F84\u3001\u9879\u76EE\u7EA6\u5B9A\u3001\u7528\u6237\u7684\u504F\u597D\u4E0E\u8981\u6C42\u3001\u8E29\u8FC7\u7684\u5751\u53CA\u5176**\u539F\u56E0\u4E0E\u89E3\u6CD5**\u3001\u5173\u952E\u8DEF\u5F84 / \u547D\u4EE4 / \u7AEF\u53E3\u4E4B\u7C7B\u7684\u73AF\u5883\u4E8B\u5B9E\u3002\n3. **\u6761\u76EE\u683C\u5F0F\uFF1A\u5148\u7ED3\u8BBA\uFF0C\u518D\u8BF4\u4F9D\u636E** \u2014\u2014 \u5177\u4F53\u5230 `file.ts::func()`\u3001\u8868\u540D\u6216\u53EF\u76F4\u63A5\u6267\u884C\u7684\u547D\u4EE4\uFF0C\u5FC5\u8981\u65F6\u5E26\u65E5\u671F / \u7248\u672C\u951A\u70B9\uFF1B**\u5371\u9669\u6216\u4E0D\u53EF\u9006\u7684\u64CD\u4F5C\u6807 `\u26A0`**\u3002\n4. **\u7EC6\u8282\u5916\u7F6E**\uFF1A\u7248\u672C\u53D9\u4E8B\u4E0E\u957F\u7BC7\u8BBA\u8BC1\u7559\u5728\u9879\u76EE\u6587\u6863\u548C\u4EE3\u7801\u91CC\uFF0C\u957F\u671F\u8BB0\u5FC6\u53EA\u7559\u7ED3\u8BBA + \u6307\u9488\uFF08\u5982 `\u8BE6\u89C1 docs/xxx.md`\uFF09\u2014\u2014 \u8BB0\u5FC6\u8981\u77ED\u5230\u80FD\u6574\u7BC7\u8BFB\u5B8C\uFF0C\u7EC6\u8282\u9760\u5DE5\u5177\u53BB\u53D6\u3002\n5. **\u5220\u9664\u548C\u5199\u5165\u4E00\u6837\u91CD\u8981**\uFF1A\u5DF2\u8FC7\u65F6\u3001\u5DF2\u88AB\u63A8\u7FFB\u3001\u5DF2\u5199\u8FDB\u9879\u76EE\u6587\u6863\u7684\u5185\u5BB9\u8981\u5220\u6389\uFF0C\u65B0\u65E7\u7ED3\u8BBA\u5E76\u5B58\u53EA\u4F1A\u8BA9\u8BB0\u5FC6\u628A\u4EBA\u5E26\u504F\u3002\n6. **\u4E0D\u8981\u8BB0\u5F55**\uFF1A\u4E34\u65F6\u8DEF\u5F84\u3001\u4E00\u6B21\u6027\u547D\u4EE4\u8F93\u51FA\u3001\u5DE5\u5177\u62A5\u9519\u3001\u7EAF\u63A2\u7D22\u8FC7\u7A0B\u3001\u5F53\u5929\u7684\u6D41\u6C34\u8FDB\u5C55\uFF08\u8FD9\u4E9B\u8FDB\u5F53\u65E5\u65E5\u5FD7\uFF09\u2014\u2014 \u5199\u8FDB\u53BB\u53EA\u4F1A\u6324\u5360\u540E\u7EED\u4F1A\u8BDD\u7684\u4E0A\u4E0B\u6587\u3002\n- \u957F\u671F\u8BB0\u5FC6\u8D85\u51FA\u4E0A\u9650\u65F6\u4F1A\u88AB**\u81EA\u52A8\u7CBE\u7B80**\uFF1A\u53BB\u9664\u5B8C\u5168\u91CD\u590D\u7684\u8BB0\u5F55 + \u88C1\u526A\u6700\u65E7\u7684\u8FFD\u52A0\u5757\uFF08`## \u65F6\u95F4\u6233`\uFF0C\u6700\u65B0\u7684\u4E00\u5757\u4FDD\u7559\uFF09\uFF1B**\u6309\u4E3B\u9898\u6574\u7406\u7684\u7A33\u5B9A\u5C0F\u8282\u4E0D\u4F1A\u88AB\u81EA\u52A8\u5220\u9664**\uFF0C\u4ECD\u8D85\u9650\u65F6\u4F1A\u63D0\u793A\u4F60\u7528 `memory_compact` \u505A\u8BED\u4E49\u538B\u7F29\u3002",s=r?.longTerm?.trim();if(s){let a=s.length>an?`${s.slice(0,an)}
|
|
482
|
+
\u2026\uFF08\u5DF2\u622A\u65AD\uFF0C\u53EF\u7528 memory_read \u67E5\u770B\u5B8C\u6574\u5185\u5BB9\uFF09`:s;n+=`
|
|
472
483
|
|
|
473
484
|
### \u73B0\u6709\u957F\u671F\u8BB0\u5FC6\uFF08\u8282\u9009\uFF09
|
|
474
|
-
${a}`}let i=e??me;s&&i>0&&s.length>i&&(
|
|
485
|
+
${a}`}let i=e??me;s&&i>0&&s.length>i&&(n+=`
|
|
475
486
|
|
|
476
487
|
### \u26A0 \u957F\u671F\u8BB0\u5FC6\u4ECD\u7136\u8FC7\u957F
|
|
477
|
-
\u957F\u671F\u8BB0\u5FC6\u7EA6 ${s.length} \u5B57\u7B26\uFF0C\u5DF2\u8D85\u8FC7\u4E0A\u9650 ${i}\uFF0C\
|
|
488
|
+
\u957F\u671F\u8BB0\u5FC6\u7EA6 ${s.length} \u5B57\u7B26\uFF0C\u5DF2\u8D85\u8FC7\u4E0A\u9650 ${i}\uFF0C\u800C**\u81EA\u52A8\u7CBE\u7B80\u5DF2\u65E0\u6CD5\u7EE7\u7EED**\uFF08\u5269\u4E0B\u7684\u8981\u4E48\u662F\u6309\u4E3B\u9898\u6574\u7406\u7684\u7A33\u5B9A\u5C0F\u8282 \u2014\u2014 \u81EA\u52A8\u5220\u4F1A\u628A\u9879\u76EE\u4E8B\u5B9E\u6574\u6BB5\u62B9\u6389\uFF0C\u8981\u4E48\u662F\u5355\u6761\u8BB0\u5F55\u672C\u8EAB\u5C31\u8FC7\u957F\uFF09\u3002\u8BF7\uFF1A
|
|
478
489
|
1. \u7528 \`memory_read\` \u8BFB\u53D6\u957F\u671F\u8BB0\u5FC6\u5168\u6587\uFF1B
|
|
479
|
-
2. \u5408\u5E76\u540C\u4E00\u4E3B\u9898\u7684\u591A\u6761\u8BB0\u5F55\
|
|
480
|
-
3. \u7528 \`memory_compact\` \u63D0\u4EA4\u7CBE\u7B80\u540E\u7684**\u5B8C\u6574**\u7248\u672C \u2014\u2014 \u5FC5\u987B\u4FDD\u7559\u4ECD\u7136\u6709\u6548\u7684\u7ED3\u8BBA\u3001\u9879\u76EE\u7EA6\u5B9A\u4E0E\u8E29\u5751\u7ECF\u9A8C\u3002`);let o=
|
|
481
|
-
\u2026\uFF08\u5DF2\u622A\u65AD\uFF0C\u53EF\u7528 memory_read \u67E5\u770B\u5B8C\u6574\u5185\u5BB9\uFF09`:o;
|
|
490
|
+
2. \u5408\u5E76\u540C\u4E00\u4E3B\u9898\u7684\u591A\u6761\u8BB0\u5F55\u3001\u5220\u6389\u5DF2\u8FC7\u65F6\u6216\u88AB\u540E\u7EED\u7ED3\u8BBA\u63A8\u7FFB\u7684\u5185\u5BB9\u3001\u628A\u5197\u957F\u7684\u8FC7\u7A0B\u6D53\u7F29\u4E3A\u7ED3\u8BBA\uFF0C\u80FD\u632A\u8FDB\u9879\u76EE\u6587\u6863\u7684\u7EC6\u8282\u5C31\u632A\u8D70\u3001\u8FD9\u91CC\u53EA\u7559\u6307\u9488\uFF1B
|
|
491
|
+
3. \u7528 \`memory_compact\` \u63D0\u4EA4\u7CBE\u7B80\u540E\u7684**\u5B8C\u6574**\u7248\u672C \u2014\u2014 \u5FC5\u987B\u4FDD\u7559\u4ECD\u7136\u6709\u6548\u7684\u7ED3\u8BBA\u3001\u9879\u76EE\u7EA6\u5B9A\u4E0E\u8E29\u5751\u7ECF\u9A8C\u3002`);let o=r?.recentDaily?.trim();if(o){let a=o.length>an?`${o.slice(-an)}
|
|
492
|
+
\u2026\uFF08\u5DF2\u622A\u65AD\uFF0C\u53EF\u7528 memory_read \u67E5\u770B\u5B8C\u6574\u5185\u5BB9\uFF09`:o;n+=`
|
|
482
493
|
|
|
483
494
|
### \u4ECA\u65E5\u65E5\u5FD7\uFF08\u8282\u9009\uFF09
|
|
484
|
-
${a}`}return
|
|
485
|
-
\
|
|
495
|
+
${a}`}return n}var eo=v(require("path")),El=new Set(["read_file","list_dir","glob","grep"]),Pl=/(^|\/)(\.env(\..+)?|\.npmrc|\.netrc|\.git-credentials|\.ssh|\.aws|\.gnupg|\.kube|\.docker|\.xzh|\.xuanzhu|credentials|secrets?)(\/|$)|\.(pem|key|p12|pfx|jks)$|(^|\/)id_(rsa|dsa|ecdsa|ed25519)(\.|$)/i,ln=400,Rl=.5,Pr=1e6,Ml=4,Il=1,Dl=new Set(["read_file","list_dir","glob","grep"]),Ol=8,Ll=4e4,Rr=2e4,Nl=60,jl=16,Bl=4,Ul="[\u7CFB\u7EDF] \u672C\u6B21\u8C03\u7528\u5DF2\u8DF3\u8FC7",Fl=12,Qi=120;function zl(){return{role:"system",content:`[\u4E0A\u4E0B\u6587\u63D0\u9192] \u66F4\u65E9\u7684\u5BF9\u8BDD\u5DF2\u56E0\u8D85\u51FA\u4E0A\u4E0B\u6587\u7A97\u53E3\u88AB\u88C1\u526A\uFF0C\u4F60\u770B\u5230\u7684**\u4E0D\u662F\u5B8C\u6574\u5386\u53F2**\uFF1A
|
|
496
|
+
\xB7 \u88AB\u88C1\u6389\u7684\u5185\u5BB9\u4E0D\u8981\u63A8\u6D4B\u3001\u4E0D\u8981\u8865\u505A\uFF1B
|
|
497
|
+
\xB7 \u4E0A\u6587\u91CC\u90A3\u4E9B\u6CA1\u6709\u7ED3\u8BBA\u7684\u65E7\u4EFB\u52A1\u53EA\u662F\u6B8B\u7247\uFF0C**\u4E0D\u4EE3\u8868\u8981\u63A5\u7740\u505A**\uFF1B
|
|
498
|
+
\xB7 \u53EA\u6709\u5F53\u7528\u6237\u6700\u65B0\u4E00\u6761\u6D88\u606F\u660E\u786E\u8981\u6C42\u7EE7\u7EED\u65F6\u624D\u7EED\u505A\uFF0C\u5426\u5219\u5148\u56DE\u7B54\u4ED6\u5F53\u524D\u8FD9\u6761\u6D88\u606F\uFF1B
|
|
499
|
+
\xB7 \u82E5\u5F53\u524D\u6D88\u606F\u6307\u5411\u4F60\u5DF2\u7ECF\u770B\u4E0D\u5230\u7684\u4E0A\u4E0B\u6587\uFF0C\u5148\u95EE\u6E05\u695A\uFF0C\u518D\u52A8\u624B\u3002`}}var cn=class r{provider;config;cwd;events;systemPrompt;warnedTightContext=!1;historyTrimmed=!1;history=[];activeModel;tools;systemPromptOverride;maxToolRoundsOverride;sessionFile;todos=[];deviceBridge;pendingMemoryNotices=[];constructor(e,n,s,i,o,a){this.provider=e,this.config=n,this.cwd=s,this.events=i,this.activeModel=o??be(n),this.tools=a?.tools,this.systemPromptOverride=a?.systemPrompt,this.maxToolRoundsOverride=a?.maxToolRounds,this.sessionFile=a?.sessionFile,this.systemPrompt=this.composeSystemPrompt()}getActiveModel(){return this.activeModel}switchModel(e){return this.activeModel&&this.activeModel.id===e.id?!1:(this.provider=gt(this.config,e),this.activeModel=e,_n(this.config,e),this.persistConfig(),!0)}composeSystemPrompt(){return this.systemPromptOverride?this.systemPromptOverride:(this.autoCompactMemory(),Zi(this.cwd,this.config.systemPromptExtra,ns(this.cwd),Xe(this.cwd),this.config.memoryMaxChars))}autoCompactMemory(){let e=this.config.memoryMaxChars??me,n=At(this.cwd,e);if(!n||n.removedDuplicates===0&&n.removedOldest===0)return;let s=[];n.removedDuplicates>0&&s.push(`\u53BB\u9664 ${n.removedDuplicates} \u6761\u91CD\u590D\u8BB0\u5F55`),n.removedOldest>0&&s.push(`\u88C1\u526A ${n.removedOldest} \u6761\u6700\u65E7\u7684\u8FFD\u52A0\u8BB0\u5F55`),this.pendingMemoryNotices.push(`\u957F\u671F\u8BB0\u5FC6\u5DF2\u81EA\u52A8\u7CBE\u7B80\uFF08${s.join("\u3001")}\uFF0C${n.before} \u2192 ${n.after} \u5B57\u7B26\uFF09\u3002\u6309\u4E3B\u9898\u6574\u7406\u7684\u7A33\u5B9A\u5C0F\u8282\u4E0D\u53D7\u81EA\u52A8\u88C1\u526A\u5F71\u54CD\uFF1B\u82E5\u9700\u8981\u66F4\u5F7B\u5E95\u7684\u538B\u7F29\uFF0C\u53EF\u8BA9\u7384\u732A\u7528 memory_compact \u91CD\u5199\u4E3A\u7CBE\u7B80\u7248\u672C\u3002`)}get messages(){return this.history}reset(){this.history=[],this.historyTrimmed=!1,this.todos.length>0&&(this.todos=[],this.events.onTodos?.([]))}appendHistory(e){for(let n of e)this.history.push(n);this.sessionFile&&ur(this.sessionFile,e)}restoreSession(e,n){this.history=[...e],this.sessionFile=n,this.historyTrimmed=!1,ur(n,e)}getTodos(){return this.todos}setDeviceBridge(e){this.deviceBridge=e}todoStore(){return{get:()=>this.todos,set:e=>{let n=!1;this.todos=e.map(s=>s.status!=="in_progress"?s:n?{...s,status:"pending"}:(n=!0,s)),this.events.onTodos?.(this.todos)}}}get messageCount(){return this.history.length}getCwd(){return this.cwd}setCwd(e){this.cwd=e,this.systemPrompt=this.composeSystemPrompt()}abortReason;async run(e,n,s){this.abortReason=void 0;let i=e;if(this.pendingMemoryNotices.length>0){for(let x of this.pendingMemoryNotices)this.events.onNotice?.(x);this.pendingMemoryNotices=[]}if(!this.warnedTightContext&&zn(this.activeModel?.contextWindow,this.activeModel?.model??"",this.systemPrompt)&&(this.warnedTightContext=!0,this.events.onNotice?.("\u5F53\u524D\u6A21\u578B\u53EF\u7528\u4E0A\u4E0B\u6587\u8FC7\u5C0F\uFF1A\u7CFB\u7EDF\u63D0\u793A\u8BCD\u5DF2\u5360\u53BB\u7EDD\u5927\u90E8\u5206\u7A97\u53E3\uFF0C\u5386\u53F2\u4E0E\u5DE5\u5177\u8F93\u51FA\u5C06\u65E0\u6CD5\u53D1\u9001\u3002\u53EF\u7CBE\u7B80\u9879\u76EE\u89C4\u5219\uFF08.xuanzhu/rules.md\uFF09\u6216 systemPromptExtra\uFF0C\u6216\u6539\u7528\u7A97\u53E3\u66F4\u5927\u7684\u6A21\u578B\uFF08xzh model context <id> <\u5927\u5C0F>\uFF09\u3002")),this.config.intent?.enabled){this.events.onStatus("\u5206\u6790\u610F\u56FE\u4E2D");let x=await this.analyzeIntent(e,n);if(n?.aborted){this.events.onStatus("\u5DF2\u4E2D\u65AD");return}x?(i=x,this.events.onIntent?.(x,e)):this.events.onNotice?.("\u610F\u56FE\u5206\u6790\u672A\u8FD4\u56DE\u5185\u5BB9\uFF0C\u5DF2\u6309\u539F\u59CB\u8F93\u5165\u7EE7\u7EED\u3002")}let o=!!(s&&s.length>0),a=[{role:"user",content:o&&!i.trim()?_e:i,images:o?s:void 0}],l=Math.max(1,Math.floor(this.maxToolRoundsOverride??this.config.maxToolRounds)||1),c=()=>{this.appendHistory(a),this.trimHistory()},u=x=>{let P=new Map;for(let w of a)for(let b of w.toolCalls??[])P.set(b.id,b.arguments);let z=[];for(let w of a){if(w.role!=="tool"||w.content.startsWith(Ul))continue;let b=P.get(w.toolCallId??"")??"",k=b.length>Qi?`${b.slice(0,Qi)}\u2026`:b;z.push(`${w.name??"\u5DE5\u5177"}(${k})`)}if(z.length===0)return null;let R=z.slice(0,Fl).map(w=>`\xB7 ${w}`);return z.length>R.length&&R.push(`\xB7 \u2026\u7B49\u5171 ${z.length} \u6B21\u8C03\u7528`),{role:"system",content:`[\u4E0A\u4E00\u8F6E\u5DF2\u4E2D\u6B62] \u4E0A\u4E00\u8F6E${x}\uFF0C\u6CA1\u6709\u7ED9\u51FA\u7ED3\u8BBA\uFF0C\u8BE5\u8F6E\u5BF9\u8BDD\u5DF2\u4F5C\u5E9F \u2014\u2014 **\u4E0D\u4F1A\u88AB\u81EA\u52A8\u63A5\u7740\u505A**\uFF0C\u9664\u975E\u7528\u6237\u660E\u786E\u8981\u6C42\u7EE7\u7EED\u3002
|
|
500
|
+
\u4E2D\u6B62\u524D**\u5DF2\u7ECF\u771F\u5B9E\u6267\u884C**\u8FC7\u7684\u64CD\u4F5C\uFF08\u4EE5\u4E0B\u662F**\u5DF2\u6267\u884C\u8BB0\u5F55\uFF0C\u4E0D\u662F\u5F85\u529E\u6E05\u5355**\uFF0C\u526F\u4F5C\u7528\u4ECD\u7136\u5B58\u5728\uFF0C\u4E0D\u8981\u91CD\u590D\u6267\u884C\uFF09\uFF1A
|
|
486
501
|
`+R.join(`
|
|
487
502
|
`)+`
|
|
488
|
-
\u8BF7\u76F4\u63A5\u56DE\u5E94\u7528\u6237
|
|
503
|
+
\u8BF7\u76F4\u63A5\u56DE\u5E94\u7528\u6237**\u6700\u65B0\u7684\u90A3\u6761\u6D88\u606F**\uFF1A\u82E5\u5B83\u53EA\u662F\u5BD2\u6684\uFF08\u300C\u5728\u5417\u300D\u300C\u4F60\u597D\u300D\uFF09\u6216\u53E6\u4E00\u4EF6\u4E8B\uFF0C\u5C31\u7167\u5B83\u56DE\u7B54\uFF1B\u4E0D\u8981\u63A5\u7740\u5B8C\u6210\u88AB\u4E2D\u6B62\u7684\u65E7\u4EFB\u52A1\u3002`}},p=x=>{let P=u(x);a.length=0,P&&(this.appendHistory([P]),this.trimHistory())},d="",h=0,m=new Map,f=0,y=0,g=!1,S=!1,$=(x,P)=>g||S||!Dl.has(x)||(f++,y+=P.length,f<Ol&&y<Ll)?"":(g=!0,this.events.onStatus("\u5EFA\u8BAE\u6539\u7528\u5B50\u4EE3\u7406",`\u672C\u8F6E\u5DF2\u8C03\u7814 ${f} \u6B21`),`
|
|
489
504
|
|
|
490
505
|
[\u7CFB\u7EDF\u63D0\u9192] \u672C\u8F6E\u4F60\u5DF2\u7ECF\u505A\u4E86 ${f} \u6B21\u53EA\u8BFB\u8C03\u7814\uFF08\u7D2F\u8BA1\u7EA6 ${Math.round(y/1e3)}k \u5B57\u7B26\uFF09\uFF0C\u8FD9\u4E9B\u5185\u5BB9\u4F1A\u4E00\u76F4\u5360\u7528\u4F60\u7684\u4E0A\u4E0B\u6587\u7A97\u53E3\u3002
|
|
491
506
|
\xB7 \u82E5\u63A5\u4E0B\u6765\u8FD8\u6709**\u4E92\u4E0D\u4F9D\u8D56**\u7684\u8C03\u7814\u4EFB\u52A1\uFF0C\u8BF7\u6539\u7528 \`task\` \u6D3E\u751F \`code-explorer\` \u5B50\u4EE3\u7406\uFF08\u53EF\u4E00\u6B21\u5E76\u5217\u591A\u4E2A\u3001\u5E76\u884C\u6267\u884C\uFF09\uFF0C\u53EA\u628A\u7ED3\u8BBA\u5E26\u56DE\u6765\uFF1B
|
|
492
|
-
\xB7 \u82E5\u53EA\u5269\u6536\u5C3E\u5DE5\u4F5C\uFF0C\u5FFD\u7565\u672C\u6761\u5373\u53EF\u3002`),A=0,H=l;try{for(let R=0;;R++){if(R>=H){if(
|
|
507
|
+
\xB7 \u82E5\u53EA\u5269\u6536\u5C3E\u5DE5\u4F5C\uFF0C\u5FFD\u7565\u672C\u6761\u5373\u53EF\u3002`),A=0,H=l;try{for(let R=0;;R++){if(R>=H){if(n?.aborted){p("\u88AB\u7528\u6237\u4E2D\u65AD"),this.events.onStatus("\u5DF2\u4E2D\u65AD");return}if(!(this.events.onRoundLimit?await this.events.onRoundLimit(R):!1))break;H+=l}if(n?.aborted){p("\u88AB\u7528\u6237\u4E2D\u65AD"),this.events.onStatus("\u5DF2\u4E2D\u65AD");return}this.trimHistory(),this.events.onStatus("\u601D\u8003\u4E2D",`\u7B2C ${R+1} \u8F6E`);let{text:w,toolCalls:b}=await this.streamAssistant(n,new Set,a);if(n?.aborted){p("\u88AB\u7528\u6237\u4E2D\u65AD"),this.events.onStatus("\u5DF2\u4E2D\u65AD");return}if(a.push({role:"assistant",content:w,toolCalls:b.length>0?b:void 0}),b.length===0){c(),this.events.onStatus("\u5C31\u7EEA");return}let k=0,G=[];for(;k<b.length;){let _=b[k],je=`${_.name}:${_.arguments}`;if(je===d?h++:(d=je,h=1),h>=Ml){if(A<Il){A++;let L=h;h=0,d="",this.skipToolCalls(a,b,k,le=>le===k?`[\u7CFB\u7EDF] \u672C\u6B21\u8C03\u7528\u5DF2\u8DF3\u8FC7\uFF1A\u5B83\u4E0E\u524D\u9762 ${L} \u6B21\u5B8C\u5168\u76F8\u540C\u3002`:"[\u7CFB\u7EDF] \u672C\u6B21\u8C03\u7528\u5DF2\u8DF3\u8FC7\uFF1A\u540C\u4E00\u8F6E\u5185\u7684\u91CD\u590D\u8C03\u7528\u89E6\u53D1\u4E86\u81EA\u6211\u4FEE\u6B63\u3002"),a.push({role:"user",content:`[\u7CFB\u7EDF\u68C0\u6D4B] \u4F60\u8FDE\u7EED ${L} \u6B21\u8C03\u7528\u4E86 \`${_.name}\`\uFF08\u53C2\u6570\u5B8C\u5168\u76F8\u540C\uFF09\uFF0C\u4F46\u4EFB\u52A1\u5E76\u6CA1\u6709\u56E0\u6B64\u63A8\u8FDB\u3002
|
|
493
508
|
|
|
494
509
|
\u8BF7\u5148\u505C\u4E0B\u6765\u5206\u6790\uFF0C\u4E0D\u8981\u7EE7\u7EED\u8C03\u7528\u5DE5\u5177\uFF1A
|
|
495
510
|
1. \u8FD9\u4E2A\u8C03\u7528\u4E3A\u4EC0\u4E48\u6CA1\u6709\u63A8\u8FDB\u4EFB\u52A1\uFF1F\u5B83\u7684\u8FD4\u56DE\u503C\u91CC\u662F\u4E0D\u662F**\u5DF2\u7ECF**\u6709\u4F60\u9700\u8981\u7684\u5168\u90E8\u4FE1\u606F\uFF1F
|
|
496
511
|
2. \u4EFB\u52A1\u76EE\u524D\u5B9E\u9645\u5B8C\u6210\u5230\u54EA\u4E00\u6B65\u4E86\uFF1F\u628A\u5DF2\u7ECF\u505A\u5B8C\u7684\u90E8\u5206\u5217\u51FA\u6765\u3002
|
|
497
512
|
3. \u63A5\u4E0B\u6765\u5E94\u8BE5\u505A\u4EC0\u4E48**\u4E0D\u540C**\u7684\u4E8B\uFF1F
|
|
498
513
|
|
|
499
|
-
\u5206\u6790\u5B8C\u5C31\u6309\u65B0\u65B9\u6848\u7EE7\u7EED\uFF0C\u4E0D\u8981\u518D\u505A\u540C\u4E00\u4E2A\u8C03\u7528\u3002`}),this.events.onStatus("\u81EA\u6211\u4FEE\u6B63",`\u5206\u6790 ${
|
|
514
|
+
\u5206\u6790\u5B8C\u5C31\u6309\u65B0\u65B9\u6848\u7EE7\u7EED\uFF0C\u4E0D\u8981\u518D\u505A\u540C\u4E00\u4E2A\u8C03\u7528\u3002`}),this.events.onStatus("\u81EA\u6211\u4FEE\u6B63",`\u5206\u6790 ${_.name} \u7684\u91CD\u590D`),this.events.onNotice?.(`\u68C0\u6D4B\u5230\u8FDE\u7EED ${L} \u6B21\u91CD\u590D\u8C03\u7528\uFF08${_.name}\uFF09\uFF0C\u5DF2\u8BF7\u6C42\u6A21\u578B\u81EA\u884C\u5206\u6790\u539F\u56E0\u5E76\u8C03\u6574\u65B9\u6848\u3002`);break}this.skipToolCalls(a,b,k,()=>"[\u7CFB\u7EDF] \u672C\u6B21\u8C03\u7528\u5DF2\u8DF3\u8FC7\uFF1A\u672C\u8F6E\u56E0\u91CD\u590D\u8C03\u7528\u800C\u4E2D\u6B62\u3002"),c(),this.events.onStatus("\u5DF2\u4E2D\u6B62","\u91CD\u590D\u8C03\u7528\u4E14\u81EA\u6211\u4FEE\u6B63\u65E0\u6548"),this.events.onNotice?.(`\u68C0\u6D4B\u5230\u518D\u6B21\u8FDE\u7EED ${h} \u6B21\u5B8C\u5168\u76F8\u540C\u7684\u5DE5\u5177\u8C03\u7528\uFF08${_.name}\uFF09\u3002\u6B64\u524D\u5DF2\u8BF7\u6C42\u8FC7\u81EA\u6211\u4FEE\u6B63\uFF0C\u4F46\u5B83\u6CA1\u6709\u8C03\u6574\u8FC7\u6765\uFF0C\u6545\u4E2D\u6B62\u672C\u8F6E\u3002
|
|
500
515
|
\xB7 \u8FD9\u901A\u5E38\u610F\u5473\u7740\u4E0A\u4E0B\u6587\u88AB\u88C1\u5F97\u592A\u591A\u3001\u5B83\u770B\u4E0D\u5230\u81EA\u5DF1\u521A\u505A\u8FC7\u4EC0\u4E48
|
|
501
516
|
\xB7 \u53EF\u8C03\u5927\u8BE5\u6A21\u578B\u7684\u4E0A\u4E0B\u6587\u7A97\u53E3\uFF1Axzh model context <id> <\u5927\u5C0F>
|
|
502
|
-
\xB7 \u4E5F\u53EF\u4EE5\u628A\u4EFB\u52A1\u62C6\u5C0F\uFF0C\u6216\u76F4\u63A5\u8BF4\u300C\u4E0D\u8981\u91CD\u590D\u8C03\u7528 ${
|
|
517
|
+
\xB7 \u4E5F\u53EF\u4EE5\u628A\u4EFB\u52A1\u62C6\u5C0F\uFF0C\u6216\u76F4\u63A5\u8BF4\u300C\u4E0D\u8981\u91CD\u590D\u8C03\u7528 ${_.name}\u300D`),this.abortReason="\u9677\u5165\u91CD\u590D\u8C03\u7528\uFF08\u81EA\u6211\u4FEE\u6B63\u65E0\u6548\uFF09";return}if(this.isParallelTool(_.name)){let L=[_],le=k+1;for(;le<b.length&&L.length<this.parallelLimit()&&this.isParallelTool(b[le].name)&&!L.some(We=>We.name===b[le].name&&We.arguments===b[le].arguments);)L.push(b[le]),le++;if(L.length>1){for(let ye=1;ye<L.length;ye++)d=`${L[ye].name}:${L[ye].arguments}`,h=1;this.events.onStatus("\u5E76\u884C\u6267\u884C",`${L.length} \u4E2A\u5B50\u4EE3\u7406`);let We=await this.runToolBatch(L,n);for(let ye=0;ye<L.length;ye++){let Ge=L[ye],wn=We[ye];if(Ge.name==="task"&&(S=!0),wn.ok){let Gr=`${Ge.name}:${Ge.arguments}`;m.set(Gr,(m.get(Gr)??0)+1)}a.push({role:"tool",content:wn.content,toolCallId:Ge.id,name:Ge.name}),this.events.onToolEnd(Ge,wn)}if(n?.aborted){p("\u88AB\u7528\u6237\u4E2D\u65AD"),this.events.onStatus("\u5DF2\u4E2D\u65AD");return}k=le;continue}}let $e=await this.runTool(_,n);$e.ok&&m.set(je,(m.get(je)??0)+1);let Sn=$e.content;if(h>=2&&$e.ok){let L=[...m.entries()].map(([le,We])=>`${le.split(":")[0]}\xD7${We}`).join("\u3001");Sn+=`
|
|
503
518
|
|
|
504
|
-
[\u7CFB\u7EDF\u63D0\u9192] \u8FD9\u662F\u8FDE\u7EED\u7B2C ${
|
|
519
|
+
[\u7CFB\u7EDF\u63D0\u9192] \u8FD9\u662F\u8FDE\u7EED\u7B2C ${h} \u6B21\u8C03\u7528 \`${_.name}\`\uFF0C\u53C2\u6570\u4E0E\u8FD4\u56DE\u7ED3\u679C\u90FD\u4E0E\u4E0A\u4E00\u6B21\u5B8C\u5168\u76F8\u540C \u2014\u2014 **\u8FD9\u4E00\u6B65\u5DF2\u7ECF\u5B8C\u6210\u4E86\uFF0C\u4E0D\u8981\u91CD\u590D**\u3002
|
|
505
520
|
\u672C\u8F6E\u5DF2\u6210\u529F\u6267\u884C\u7684\u8C03\u7528\uFF1A${L}
|
|
506
|
-
\u8BF7\u76F4\u63A5\u8FDB\u884C\u4E0B\u4E00\u4E2A\u672A\u5B8C\u6210\u7684\u90E8\u5206\uFF1B\u82E5\u4EFB\u52A1\u672C\u8EAB\u5DF2\u5B8C\u6210\uFF0C\u8BF7\u76F4\u63A5\u7ED9\u51FA\u603B\u7ED3\u3002`,this.events.onStatus("\u63D0\u9192\u91CD\u590D",`${
|
|
521
|
+
\u8BF7\u76F4\u63A5\u8FDB\u884C\u4E0B\u4E00\u4E2A\u672A\u5B8C\u6210\u7684\u90E8\u5206\uFF1B\u82E5\u4EFB\u52A1\u672C\u8EAB\u5DF2\u5B8C\u6210\uFF0C\u8BF7\u76F4\u63A5\u7ED9\u51FA\u603B\u7ED3\u3002`,this.events.onStatus("\u63D0\u9192\u91CD\u590D",`${_.name} \xD7${h}`)}if(_.name==="task"&&(S=!0),Sn+=$(_.name,$e.content),a.push({role:"tool",content:Sn,toolCallId:_.id,name:_.name}),$e.images&&$e.images.length>0&&G.push({role:"user",content:`\uFF08\u4E0A\u9762 ${_.name} \u7684\u8FD4\u56DE\u9644\u5E26\u4E86 ${$e.images.length} \u5F20\u56FE\u7247\uFF09`,images:$e.images}),this.events.onToolEnd(_,$e),n?.aborted){p("\u88AB\u7528\u6237\u4E2D\u65AD"),this.events.onStatus("\u5DF2\u4E2D\u65AD");return}k++}G.length>0&&a.push(...G)}c(),this.events.onStatus("\u5DF2\u8FBE\u5DE5\u5177\u8C03\u7528\u4E0A\u9650",`\u5171 ${H} \u8F6E`);let x=new Map;for(let R of a)for(let w of R.toolCalls??[])x.set(w.name,(x.get(w.name)??0)+1);let P=[...x.values()].reduce((R,w)=>R+w,0),z=[...x.entries()].sort((R,w)=>w[1]-R[1]).map(([R,w])=>`${R} \xD7${w}`).join("\u3001");this.events.onNotice?.(`\u5DF2\u8FBE\u5DE5\u5177\u8C03\u7528\u4E0A\u9650\uFF08\u5171 ${H} \u8F6E\uFF09\u800C\u4E2D\u6B62\u672C\u8F6E\u3002
|
|
507
522
|
`+(z?`\xB7 \u672C\u8F6E\u5171 ${P} \u6B21\u5DE5\u5177\u8C03\u7528\uFF1A${z}
|
|
508
523
|
`:"")+`\xB7 \u82E5\u6A21\u578B\u5728\u53CD\u590D\u505A\u540C\u4E00\u4EF6\u4E8B\uFF0C\u901A\u5E38\u65E9\u5DF2\u88AB\u91CD\u590D\u8C03\u7528\u68C0\u6D4B\u63D0\u524D\u4E2D\u6B62
|
|
509
524
|
`+(this.maxToolRoundsOverride?`\xB7 \u8BE5\u4E0A\u9650\u662F\u5B50\u4EE3\u7406\u7684\u9ED8\u8BA4\u503C\uFF08${l} \u8F6E\uFF09\uFF1A\u9700\u8981\u66F4\u957F\u8C03\u7814\u65F6\uFF0C\u8BF7\u5728\u4E3B\u5BF9\u8BDD\u91CC\u628A\u4EFB\u52A1\u62C6\u5C0F
|
|
510
525
|
`:`\xB7 \u60F3\u8C03\u5927\u4E0A\u9650\uFF1A\u7F16\u8F91 ${D()} \u91CC\u7684 maxToolRounds\uFF08\u5F53\u524D ${this.config.maxToolRounds}\uFF09
|
|
511
|
-
`)+"\xB7 \u6216\u628A\u4EFB\u52A1\u62C6\u6210\u66F4\u5C0F\u7684\u6B65\u9AA4\uFF0C\u6BCF\u6B65\u5355\u72EC\u63D0\u4E00\u6B21"),this.abortReason="\u8FBE\u5230\u5DE5\u5177\u8C03\u7528\u4E0A\u9650"}catch(x){if(
|
|
512
|
-
`)[0]}\uFF09\uFF0C\u5DF2\u6309\u539F\u59CB\u8F93\u5165\u7EE7\u7EED\u3002`),null}let a=o.trim();return a.length>0?a:null}async streamAssistant(e,
|
|
513
|
-
`)[0])}});for await(let f of m){if(e?.aborted)break;switch(d=!0,f.type){case"text":if(u+=f.text,this.events.onText(f.text),u.length>
|
|
526
|
+
`)+"\xB7 \u6216\u628A\u4EFB\u52A1\u62C6\u6210\u66F4\u5C0F\u7684\u6B65\u9AA4\uFF0C\u6BCF\u6B65\u5355\u72EC\u63D0\u4E00\u6B21"),this.abortReason="\u8FBE\u5230\u5DE5\u5177\u8C03\u7528\u4E0A\u9650"}catch(x){if(p(n?.aborted?"\u88AB\u7528\u6237\u4E2D\u65AD":"\u56E0\u51FA\u9519\u4E2D\u6B62"),n?.aborted){this.events.onStatus("\u5DF2\u4E2D\u65AD"),this.abortReason="\u5DF2\u88AB\u7528\u6237\u4E2D\u65AD";return}throw x}}async analyzeIntent(e,n){let s=this.config.intent?.prompt?.trim()||os,i=as(s,e),o="";try{let l=this.provider.chat({messages:[{role:"user",content:i}],tools:[],temperature:this.config.temperature,signal:n});for await(let c of l)if(c.type==="text"&&(o+=c.text,o.length>Pr))break}catch(l){return n?.aborted||this.events.onNotice?.(`\u610F\u56FE\u5206\u6790\u8BF7\u6C42\u5931\u8D25\uFF08${ne(l).split(`
|
|
527
|
+
`)[0]}\uFF09\uFF0C\u5DF2\u6309\u539F\u59CB\u8F93\u5165\u7EE7\u7EED\u3002`),null}let a=o.trim();return a.length>0?a:null}async streamAssistant(e,n=new Set,s=[],i=1,o=!1){this.activeModel&&n.add(this.activeModel.id);let a=this.buildConversation(s,i);o&&(a=Un(a));let l=[{role:"system",content:this.systemPrompt},...a],c=l.reduce((m,f)=>m+Qe(f),0),u="",p=[],d=!1,h=[...this.history,...s].some(m=>(m.images?.length??0)>0);try{let m=this.provider.chat({messages:l,tools:on(this.tools),temperature:this.config.temperature,signal:e,onRetry:(f,y,g,S)=>{this.events.onStatus(S.resumed?`\u54CD\u5E94\u4E2D\u65AD\uFF0C\u6B63\u5728\u7EED\u4F20 (${f}/${y})`:`\u7F51\u7EDC\u4E2D\u65AD\uFF0C\u6B63\u5728\u91CD\u8BD5 (${f}/${y})`,ne(g).split(`
|
|
528
|
+
`)[0])}});for await(let f of m){if(e?.aborted)break;switch(d=!0,f.type){case"text":if(u+=f.text,this.events.onText(f.text),u.length>Pr)return this.events.onNotice?.(`\u6A21\u578B\u8F93\u51FA\u8D85\u8FC7 ${Pr} \u5B57\u7B26\uFF0C\u5DF2\u5F3A\u5236\u4E2D\u65AD \u2014\u2014 \u8FD9\u901A\u5E38\u610F\u5473\u7740\u6A21\u578B\u9677\u5165\u4E86\u91CD\u590D\u8F93\u51FA\uFF0C\u5EFA\u8BAE\u68C0\u67E5\u4E0A\u4E0B\u6587\u6216\u6362\u4E2A\u63D0\u793A\u3002`),{text:u,toolCalls:p};break;case"reasoning":this.events.onReasoning?.(f.text);break;case"tool_call":p.push(f.toolCall);break;case"done":f.usage?.inputTokens&&this.tokenCalibrator().observe(c,f.usage.inputTokens);break}}return{text:u,toolCalls:p}}catch(m){if(e?.aborted)throw m;if(!d&&!e?.aborted&&i>=1&&kt(m))return this.events.onStatus("\u4E0A\u4E0B\u6587\u8D85\u9650","\u5DF2\u6536\u655B\u5386\u53F2\uFF0C\u6B63\u5728\u91CD\u8BD5"),this.streamAssistant(e,n,s,Rl,o);if(!d&&!e?.aborted&&!o&&h&&_t(m))return this.events.onStatus("\u6A21\u578B\u4E0D\u652F\u6301\u56FE\u7247","\u5DF2\u53BB\u6389\u56FE\u7247\u91CD\u8BD5"),this.events.onNotice?.(`\u5F53\u524D\u6A21\u578B\u4E0D\u652F\u6301\u56FE\u7247\u8F93\u5165\uFF08${ne(m).split(`
|
|
514
529
|
`)[0]}\uFF09\uFF0C\u5DF2\u53BB\u6389\u56FE\u7247\u91CD\u8BD5\u4E00\u6B21\u3002
|
|
515
530
|
\xB7 \u60F3\u5F7B\u5E95\u907F\u514D\u8FD9\u6B21\u767D\u8BD5\uFF1Axzh model vision <id> off
|
|
516
|
-
\xB7 \u6216\u6539\u7528 glm-4v / qwen-vl / gpt-4o / claude / gemini \u7B49\u652F\u6301\u89C6\u89C9\u7684\u6A21\u578B`),this.streamAssistant(e,
|
|
517
|
-
`)[0];if(
|
|
531
|
+
\xB7 \u6216\u6539\u7528 glm-4v / qwen-vl / gpt-4o / claude / gemini \u7B49\u652F\u6301\u89C6\u89C9\u7684\u6A21\u578B`),this.streamAssistant(e,n,s,i,!0);if(this.handleModelFailure(m,n,!d))return this.streamAssistant(e,n,s,i);throw m}}handleModelFailure(e,n,s=!0){let i=this.activeModel;if(!i)return!1;n.add(i.id);let o=ne(e).split(`
|
|
532
|
+
`)[0];if(Pn(e)&&!Rn(e))return this.events.onNotice?.(`\u26A0 \u6A21\u578B ${i.id} \u7684\u914D\u7F6E\u53EF\u80FD\u6709\u8BEF\uFF08${o}\uFF09\u3002\u5DF2\u8DF3\u8FC7\u6A21\u578B\u56DE\u9000 \u2014\u2014 \u8BF7\u68C0\u67E5 provider\u3001API Key \u4E0E baseUrl\u3002`),!1;if(!s)return!1;let a=cs(this.config,i.id,n);if(!a)return this.events.onNotice?.(`\u26A0 ${i.id} \u8C03\u7528\u5931\u8D25\uFF08${o}\uFF09\uFF0C\u4E14\u5DF2\u914D\u7F6E\u7684\u6A21\u578B\u90FD\u8BD5\u8FC7\u4E86 \u2014\u2014 \u672C\u8F6E\u65E0\u6CD5\u5B8C\u6210\u3002`),!1;try{return this.provider=gt(this.config,a),this.activeModel=a,_n(this.config,a),this.persistConfig(),this.events.onNotice?.(`\u21BB ${i.id} \u8C03\u7528\u5931\u8D25\uFF08${o}\uFF09\uFF0C\u5DF2\u5207\u6362\u5230 ${a.id} \u91CD\u8BD5\u3002`),this.events.onModelChange?.({provider:a.provider,model:a.model,reason:"\u8C03\u7528\u5931\u8D25\u56DE\u9000"}),!0}catch(l){return this.events.onNotice?.(`\u5207\u6362\u6A21\u578B\u5931\u8D25\uFF1A${ne(l)}`),!1}}persistConfig(){try{W(this.config)}catch{}}touchesSensitivePath(e,n){if(!El.has(e))return!1;let s="";try{let i=JSON.parse(n);typeof i.path=="string"&&(s=i.path)}catch{return!1}return s?Pl.test(eo.resolve(this.cwd,q(s))):!1}async runTool(e,n){let s=sn(e.name,this.tools);if(!s)return{ok:!1,content:`\u9519\u8BEF\uFF1A\u672A\u77E5\u5DE5\u5177 "${e.name}"`};if(this.config.confirmSensitiveRead===!0&&this.touchesSensitivePath(s.name,e.arguments)||!!s.requiresConfirmation&&!this.config.autoApprove){let a=e.arguments;try{a=JSON.stringify(JSON.parse(e.arguments),null,2)}catch{}if(!await this.events.confirm({tool:e.name,title:`\u6267\u884C\u5DE5\u5177\uFF1A${e.name}`,detail:a,danger:!!s.danger}))return{ok:!1,denied:!0,content:"\u7528\u6237\u62D2\u7EDD\u4E86\u6B64\u64CD\u4F5C\u3002"}}if(n?.aborted)return{ok:!1,content:"\u64CD\u4F5C\u5DF2\u88AB\u4E2D\u65AD\u3002"};this.events.onToolStart(e);let o={cwd:this.cwd,autoApprove:this.config.autoApprove,emit:a=>this.events.onNotice?.(a),confirm:a=>this.events.confirm(a),signal:n,todos:this.todoStore(),memoryMaxChars:this.config.memoryMaxChars,spawnAgent:a=>this.spawnSubAgent(a,n),deviceBridge:this.deviceBridge};return Vi(e.name,e.arguments,o,this.tools)}isParallelTool(e){return sn(e,this.tools)?.parallelSafe===!0}parallelLimit(){let e=Math.floor(this.config.maxParallelAgents??Bl);return!Number.isFinite(e)||e<1?1:Math.min(e,jl)}async runToolBatch(e,n){return Yi(e,this.parallelLimit(),async s=>{try{return await this.runTool(s,n)}catch(i){return{ok:!1,content:`\u5DE5\u5177\u6267\u884C\u5F02\u5E38\uFF1A${i instanceof Error?i.message:String(i)}`}}})}skipToolCalls(e,n,s,i){for(let o=s;o<n.length;o++)e.push({role:"tool",content:i(o),toolCallId:n[o].id,name:n[o].name})}async spawnSubAgent(e,n){let s=Wt(e.subagentName);if(!s)return{ok:!1,content:`\u9519\u8BEF\uFF1A\u672A\u77E5\u5B50\u4EE3\u7406 "${e.subagentName}"\u3002\u53EF\u7528\uFF1A${St().join("\u3001")}`};let i="",o=e.description.length>24?`${e.description.slice(0,24)}\u2026`:e.description,a=`[${s.name}: ${o}]`,l={onText:h=>{i+=h},onToolStart:h=>{let m=h.arguments.length>120?`${h.arguments.slice(0,120)}\u2026`:h.arguments;this.events.onNotice?.(`${a} ${h.name} ${m}`)},onToolEnd:()=>{},onStatus:h=>this.events.onStatus(`\u5B50\u4EE3\u7406\uFF1A${h}`,o),onNotice:h=>this.events.onNotice?.(`${a} ${h}`),confirm:h=>this.events.confirm(h),onRoundLimit:async()=>!1};this.events.onStatus(`\u5B50\u4EE3\u7406\u6267\u884C\u4E2D\uFF08${s.name}\uFF09`,o);let c=new r(this.provider,this.config,this.cwd,l,this.activeModel,{tools:Xi(s.toolNames),systemPrompt:s.systemPrompt({cwd:this.cwd,description:e.description,prompt:e.prompt}),maxToolRounds:Nl});try{await c.run(e.prompt,n)}catch(h){let m=c.abortReason?`\uFF08${c.abortReason}\uFF09`:"";throw new Error(`${m}${h instanceof Error?h.message:String(h)}`)}let u=c.abortReason?`\u26A0 \u5B50\u4EE3\u7406${c.abortReason}\uFF0C\u4EE5\u4E0B\u5185\u5BB9\u53EF\u80FD\u4E0D\u5B8C\u6574 \u2014\u2014 \u5FC5\u8981\u65F6\u7528\u66F4\u805A\u7126\u7684 prompt \u91CD\u8BD5\uFF0C\u6216\u7531\u4F60\u81EA\u5DF1\u5B8C\u6210\u3002
|
|
518
533
|
|
|
519
|
-
`:"",
|
|
534
|
+
`:"",p=i.trim();if(!p)return{ok:!1,content:`${s.name} \u5B50\u4EE3\u7406\u672A\u8FD4\u56DE\u4EFB\u4F55\u7ED3\u8BBA${c.abortReason?`\uFF08${c.abortReason}\uFF09`:"\uFF08\u53EF\u80FD\u88AB\u4E2D\u65AD\u6216\u5728\u7ED9\u51FA\u7B54\u590D\u524D\u7528\u5C3D\u4E86\u8F6E\u6B21\uFF09"}\u3002\u53EF\u6539\u7528\u66F4\u805A\u7126\u7684 prompt \u91CD\u8BD5\uFF0C\u6216\u76F4\u63A5\u81EA\u5DF1\u5B8C\u6210\u3002`,summary:`\u5B50\u4EE3\u7406\u672A\u8FD4\u56DE\u7ED3\u8BBA\uFF1A${e.description}`};let d=p.length>Rr?`${p.slice(0,Rr)}
|
|
520
535
|
|
|
521
|
-
\u2026\uFF08\u5B50\u4EE3\u7406\u62A5\u544A\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD ${
|
|
536
|
+
\u2026\uFF08\u5B50\u4EE3\u7406\u62A5\u544A\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD ${p.length-Rr} \u5B57\u7B26\uFF09`:p;return{ok:!0,content:`${u}${s.name} \u5B50\u4EE3\u7406\u300C${e.description}\u300D\u7684\u7ED3\u8BBA\uFF1A
|
|
522
537
|
|
|
523
|
-
${d}`,summary:`${c.abortReason?`\u5B50\u4EE3\u7406\u4E2D\u6B62\uFF08${c.abortReason}\uFF09`:"\u5B50\u4EE3\u7406\u5B8C\u6210"}\uFF1A${e.description}`}}tokenCalibrator(){let e=this.activeModel?.id??this.provider.model;return
|
|
524
|
-
`);for(;s!==-1;){let i=this.buffer.slice(0,s);this.buffer=this.buffer.slice(s+1),
|
|
525
|
-
`)}return
|
|
526
|
-
`),s=this.partial,i=this.parseState,o=this.parseSeq;for(let a of
|
|
527
|
-
`){this.pushLine(s),s="";continue}a==="\x07"||a==="\b"||(s+=a)}s.length>
|
|
538
|
+
${d}`,summary:`${c.abortReason?`\u5B50\u4EE3\u7406\u4E2D\u6B62\uFF08${c.abortReason}\uFF09`:"\u5B50\u4EE3\u7406\u5B8C\u6210"}\uFF1A${e.description}`}}tokenCalibrator(){let e=this.activeModel?.id??this.provider.model;return Kn(e)}conversationBudget(){let e=Fn(this.activeModel?.contextWindow,this.activeModel?.model??"",this.systemPrompt);return Jn(e,this.tokenCalibrator().factor())}buildConversation(e,n=1){let s=jn([...this.history,...e],this.history.length),i=s.length>ln?s.slice(-ln):s,o=Math.max(1,Math.floor(this.conversationBudget()*n)),a=It(i,o);return a.length<i.length&&(this.historyTrimmed=!0),this.historyTrimmed?[zl(),...a]:a}trimHistory(){let e=It(this.history,this.conversationBudget());if(e.length>ln&&(e=Mt(e.slice(e.length-ln))),e.length===this.history.length)return 0;let n=this.history.length-e.length;return this.history=e,this.historyTrimmed=!0,n}};var so=require("child_process"),un=5*1024*1024,to=1e4,Jl=["$ErrorActionPreference='Stop'","Add-Type -AssemblyName System.Windows.Forms","$img=[System.Windows.Forms.Clipboard]::GetImage()","if($null -eq $img){exit 3}","$ms=New-Object System.IO.MemoryStream","$img.Save($ms,[System.Drawing.Imaging.ImageFormat]::Png)","[Console]::Out.Write([Convert]::ToBase64String($ms.ToArray()))"].join("; "),no="[Console]::Out.Write((Get-Clipboard -Raw))",Kl=3;function Hl(){if(process.platform==="win32"){let r=e=>["-NoProfile","-NonInteractive",...e==="powershell.exe"?["-STA"]:[],"-Command",Jl];return[{command:"powershell.exe",args:r("powershell.exe"),output:"base64",label:"PowerShell"},{command:"pwsh",args:r("pwsh"),output:"base64",label:"PowerShell 7"}]}return process.platform==="darwin"?[{command:"pngpaste",args:["-"],output:"binary",label:"pngpaste"},{command:"osascript",args:["-e","the clipboard as \xABclass PNGf\xBB"],output:"applescript-hex",label:"osascript"}]:[{command:"wl-paste",args:["--no-newline","--type","image/png"],output:"binary",label:"wl-paste\uFF08wl-clipboard\uFF09"},{command:"xclip",args:["-selection","clipboard","-t","image/png","-o"],output:"binary",label:"xclip"}]}function ql(){return process.platform==="win32"?[{command:"powershell.exe",args:["-NoProfile","-NonInteractive","-Command",no],output:"binary",label:"PowerShell"},{command:"pwsh",args:["-NoProfile","-NonInteractive","-Command",no],output:"binary",label:"PowerShell 7"}]:process.platform==="darwin"?[{command:"pbpaste",args:[],output:"binary",label:"pbpaste"}]:[{command:"wl-paste",args:["--no-newline"],output:"binary",label:"wl-paste\uFF08wl-clipboard\uFF09"},{command:"xclip",args:["-selection","clipboard","-o"],output:"binary",label:"xclip"}]}function ro(r){return r.length===0?Buffer.alloc(0):Buffer.concat(r)}function io(r){return new Promise(e=>{let n=!1,s=l=>{n||(n=!0,e(l))},i;try{i=(0,so.spawn)(r.command,r.args,{stdio:["ignore","pipe","ignore"],windowsHide:!0})}catch(l){s({missing:!0,code:null,stdout:Buffer.alloc(0),error:l instanceof Error?l.message:String(l)});return}let o=[],a=setTimeout(()=>{try{i.kill()}catch{}s({missing:!1,code:null,stdout:ro(o),error:`\u8D85\u65F6\uFF08${to} ms\uFF09`})},to);i.stdout?.on("data",l=>o.push(l)),i.on("error",l=>{clearTimeout(a),s({missing:l.code==="ENOENT",code:null,stdout:Buffer.alloc(0),error:l.message})}),i.on("close",l=>{clearTimeout(a),s({missing:!1,code:l,stdout:ro(o)})})})}function Mr(r){return r.length>=8&&r[0]===137&&r[1]===80&&r[2]===78&&r[3]===71?"image/png":r.length>=3&&r[0]===255&&r[1]===216&&r[2]===255?"image/jpeg":r.length>=6&&r.subarray(0,4).toString("latin1")==="GIF8"?"image/gif":r.length>=12&&r.subarray(0,4).toString("latin1")==="RIFF"&&r.subarray(8,12).toString("latin1")==="WEBP"?"image/webp":null}function Wl(r){let e=/«data\s+\w{4}([0-9A-Fa-f]+)»/.exec(r);if(!e)return null;let n=e[1];return n.length===0||n.length%2!==0?null:Buffer.from(n,"hex")}function Gl(r,e){if(e.code!==0)return e.code===Kl?{empty:!0}:{error:`${r.label} \u9000\u51FA\u7801 ${e.code??"\u672A\u77E5"}${e.error?`\uFF08${e.error}\uFF09`:""}`};let n=null;if(r.output==="binary")n=e.stdout;else if(r.output==="base64"){let i=e.stdout.toString("utf8").replace(/\s+/g,"");n=i.length>0?Buffer.from(i,"base64"):null}else n=Wl(e.stdout.toString("utf8"));if(!n||n.length===0)return{empty:!0};let s=Mr(n);return s?{image:{mimeType:s,base64:n.toString("base64"),bytes:n.length}}:{empty:!0}}async function Ir(){let r=[],e="";for(let n of Hl()){r.push(n.label);let s=await io(n);if(s.missing)continue;let i=Gl(n,s);if("image"in i)return{kind:"image",image:i.image};if("empty"in i)return{kind:"empty"};e=i.error}return{kind:"unavailable",detail:e||`\u672A\u627E\u5230\u53EF\u7528\u7684\u526A\u8D34\u677F\u5DE5\u5177\uFF08\u5DF2\u5C1D\u8BD5\uFF1A${r.join("\u3001")}\uFF09\u3002`+(process.platform==="linux"?" \u8BF7\u5B89\u88C5 wl-clipboard\uFF08Wayland\uFF09\u6216 xclip\uFF08X11\uFF09\u3002":"")}}async function oo(){for(let r of ql()){let e=await io(r);if(e.missing||e.code!==0)continue;let n=e.stdout.toString("utf8");if(n.length>0)return n}return null}var dn=class{buffer="";inCodeBlock=!1;codeLang="";push(e){this.buffer+=e;let n=[],s=this.buffer.indexOf(`
|
|
539
|
+
`);for(;s!==-1;){let i=this.buffer.slice(0,s);this.buffer=this.buffer.slice(s+1),n.push(this.renderLine(i)),s=this.buffer.indexOf(`
|
|
540
|
+
`)}return n}peek(){if(!this.buffer)return"";let e=this.inCodeBlock,n=this.codeLang;try{return this.renderLine(this.buffer)}finally{this.inCodeBlock=e,this.codeLang=n}}flush(){if(this.buffer.length===0)return this.inCodeBlock=!1,this.codeLang="",[];let e=this.buffer;this.buffer="";let n=this.renderLine(e);return this.inCodeBlock=!1,this.codeLang="",[n]}renderLine(e){let n=e.replace(/\r$/,""),s=n.trimStart();if(s.startsWith("```")){if(!this.inCodeBlock){this.inCodeBlock=!0,this.codeLang=s.slice(3).trim();let a=this.codeLang?` ${this.codeLang} `:"";return`${t.gray}\u250C\u2500${a}${"\u2500".repeat(Math.max(0,6-a.length))}${t.reset}`}return this.inCodeBlock=!1,this.codeLang="",`${t.gray}\u2514\u2500\u2500${t.reset}`}if(this.inCodeBlock)return`${t.cyan}${n}${t.reset}`;let i=/^(#{1,6})\s+(.*)$/.exec(s);if(i){let a=i[2];return i[1].length<=2?`${t.bold}${t.brightWhite}${a}${t.reset}`:`${t.bold}${a}${t.reset}`}if(s.startsWith("> "))return`${t.gray}\u2502 ${this.renderInline(s.slice(2),t.gray)}${t.reset}`;let o=/^(\s*)([-*+]|\d+\.)\s+(.*)$/.exec(n);return o?`${o[1]}${t.blue}${o[2]}${t.reset} ${this.renderInline(o[3])}`:/^(-{3,}|\*{3,}|_{3,})$/.test(s)?`${t.gray}${"\u2500".repeat(20)}${t.reset}`:this.renderInline(n)}renderInline(e,n=""){let s=n?`${t.reset}${n}`:t.reset,i=e;return i=i.replace(/`([^`]+)`/g,(o,a)=>`${t.cyan}${a}${s}`),i=i.replace(/\*\*([^*]+)\*\*/g,(o,a)=>`${t.bold}${a}${s}`),i=i.replace(/(^|\s)\*([^*\s][^*]*)\*(?=\s|$)/g,"$1$2"),i}};var Ct=require("child_process"),dt=v(require("fs")),hn=v(require("os")),ae=v(require("path"));var ao=2e3,Xl=8192,Vl=1200,He;function Yl(){if(He!==void 0)return He;He=null;try{(0,Ct.spawnSync)("script",["--version"],{timeout:2e3,stdio:"ignore"}).status===0?He="linux":He=(0,Ct.spawnSync)("script",["-h"],{timeout:2e3,stdio:"ignore"}).error?null:"bsd"}catch{He=null}return He}function Zl(r,e){let n=Yl();return n==="linux"?{file:"script",args:["-qec",e,"/dev/null"]}:n==="bsd"?{file:"script",args:["-q","/dev/null",r,"-c",e]}:{file:r,args:["-c",e]}}var mn=class{lines=[];partial="";running;killTimer;cwd;onChange;parseState="text";parseSeq="";constructor(e,n){this.cwd=e,this.onChange=n,this.pushLine(`${t.gray}\u7EC8\u7AEF\u5C31\u7EEA \xB7 \u547D\u4EE4\u5728\u5F53\u524D\u9879\u76EE\u76EE\u5F55\u4E0B\u6267\u884C${t.reset}`)}getCwd(){return this.cwd}isRunning(){return this.running!==void 0}setCwd(e){this.cwd=e,this.pushLine(`${t.gray}\u2500\u2500 \u5DE5\u4F5C\u76EE\u5F55\u5DF2\u5207\u6362\uFF1A${e}${t.reset}`),this.onChange()}clear(){this.lines=[],this.partial="",this.onChange()}notice(e){this.pushLine(e),this.onChange()}visibleLines(){return this.partial?[...this.lines,this.partial]:this.lines}run(e){let n=e.trim();if(!n)return;if(this.running){this.pushLine(`${t.yellow}\u26A0 \u4E0A\u4E00\u6761\u547D\u4EE4\u4ECD\u5728\u8FD0\u884C\uFF0C\u8BF7\u5148 Ctrl+C \u4E2D\u65AD${t.reset}`),this.onChange();return}if(n==="clear"||n==="cls"){this.clear();return}if(this.handleCd(n))return;this.flushPartial(),this.pushLine(`${t.brightGreen}\u276F${t.reset} ${t.bold}${n}${t.reset}`);let s=process.env.SHELL||"/bin/bash",i=Zl(s,n),o;try{o=(0,Ct.spawn)(i.file,i.args,{cwd:this.cwd,env:{...process.env,TERM:"xterm-256color",CLICOLOR_FORCE:"1",FORCE_COLOR:"1"},stdio:["pipe","pipe","pipe"],detached:!0})}catch(l){this.pushLine(`${t.red}\u2717 \u542F\u52A8\u5931\u8D25\uFF1A${l instanceof Error?l.message:String(l)}${t.reset}`),this.onChange();return}this.running=o;let a=l=>this.feed(l.toString("utf8"));o.stdout?.on("data",a),o.stderr?.on("data",a),o.on("error",l=>{this.flushPartial(),this.pushLine(`${t.red}\u2717 \u6267\u884C\u51FA\u9519\uFF1A${l.message}${t.reset}`),this.running=void 0,this.onChange()}),o.on("close",(l,c)=>{this.flushPartial(),c?this.pushLine(`${t.yellow}\u23F9 \u5DF2\u4E2D\u65AD\uFF08${c}\uFF09${t.reset}`):l===0?this.pushLine(`${t.gray}\u2713 \u5B8C\u6210${t.reset}`):this.pushLine(`${t.red}\u2717 \u9000\u51FA\u7801 ${l}${t.reset}`),this.running=void 0,this.onChange()}),this.onChange()}write(e){let n=this.running;if(!(!n?.stdin||n.stdin.destroyed))try{n.stdin.write(e)}catch{}}interrupt(){let e=this.running;if(!e||e.pid===void 0)return;let n=e.pid,s=i=>{try{process.kill(-n,i)}catch{try{e.kill(i)}catch{}}};s("SIGINT"),this.killTimer&&clearTimeout(this.killTimer),this.killTimer=setTimeout(()=>{this.killTimer=void 0,this.running===e&&s("SIGKILL")},Vl)}dispose(){this.killTimer&&(clearTimeout(this.killTimer),this.killTimer=void 0);let e=this.running;if(this.running=void 0,!(!e||e.pid===void 0))try{process.kill(-e.pid,"SIGKILL")}catch{try{e.kill("SIGKILL")}catch{}}}handleCd(e){let n=/^cd(?:\s+([\s\S]*))?$/.exec(e);if(!n)return!1;let s=(n[1]??"").trim().replace(/^['"]|['"]$/g,""),i;if(!s||s==="~")i=hn.homedir();else{let o=s.startsWith("~/")?ae.join(hn.homedir(),s.slice(2)):s;i=ae.isAbsolute(o)?o:ae.resolve(this.cwd,o)}try{if(!dt.statSync(i).isDirectory())return this.pushLine(`${t.red}cd: \u4E0D\u662F\u76EE\u5F55\uFF1A${i}${t.reset}`),this.onChange(),!0}catch{return this.pushLine(`${t.red}cd: \u76EE\u5F55\u4E0D\u5B58\u5728\uFF1A${i}${t.reset}`),this.onChange(),!0}return this.cwd=i,this.flushPartial(),this.pushLine(`${t.gray}cd ${this.cwd}${t.reset}`),this.onChange(),!0}feed(e){let n=e.replace(/\r\n/g,`
|
|
541
|
+
`),s=this.partial,i=this.parseState,o=this.parseSeq;for(let a of n){if(i==="osc"){(a==="\x07"||a==="\\"&&o.endsWith("\x1B"))&&(i="text"),o+=a;continue}if(i==="esc"){if(a==="["){i="csi",o="\x1B[";continue}if(a==="]"){i="osc",o="\x1B]";continue}i="text";continue}if(i==="csi"){o+=a,a>="@"&&a<="~"&&(a==="m"&&(s+=o),i="text");continue}if(a==="\x1B"){i="esc",o="\x1B";continue}if(a==="\r"){s="";continue}if(a===`
|
|
542
|
+
`){this.pushLine(s),s="";continue}a==="\x07"||a==="\b"||(s+=a)}s.length>Xl&&(this.pushLine(s),s=""),this.parseState=i,this.parseSeq=o,this.partial=s,this.onChange()}pushLine(e){this.lines.push(e),this.lines.length>ao&&this.lines.splice(0,this.lines.length-ao)}flushPartial(){this.partial&&(this.pushLine(this.partial),this.partial="")}},Ql=["alias","cd","clear","cls","echo","exit","export","false","history","pwd","set","source","true","type","unalias","unset","which"],pn=null;function ec(){if(pn)return pn;let r=new Set(Ql);for(let e of(process.env.PATH??"").split(ae.delimiter)){if(!e)continue;let n;try{n=dt.readdirSync(e)}catch{continue}for(let s of n)r.add(s)}return pn=[...r].sort(),pn}function tc(r){if(r.length===0)return"";let e=r[0];for(let n of r.slice(1)){let s=0;for(;s<e.length&&s<n.length&&e[s]===n[s];)s++;if(e=e.slice(0,s),!e)break}return e}function nc(r,e){return e?e==="~"||e.startsWith("~/")?ae.join(hn.homedir(),e.slice(1)):ae.isAbsolute(e)?e:ae.resolve(r,e):r}function lo(r,e){if(r.isDirectory())return!0;if(!r.isSymbolicLink())return!1;try{return dt.statSync(ae.join(e,r.name)).isDirectory()}catch{return!1}}function rc(r,e,n){let s=e.lastIndexOf("/"),i=s>=0?e.slice(0,s+1):"",o=e.slice(s+1),a=nc(r,i),l;try{l=dt.readdirSync(a,{withFileTypes:!0})}catch{return{dirPart:i,base:o,names:[]}}let c=l.filter(u=>n&&!lo(u,a)||u.name.startsWith(".")&&!o.startsWith(".")?!1:u.name.startsWith(o)).map(u=>u.name+(lo(u,a)?"/":"")).sort();return{dirPart:i,base:o,names:c}}function co(r,e,n){let i=e.slice(0,n).replace(/\s+$/,""),o=i.lastIndexOf(" ")+1,a=i.slice(o),l=i.slice(0,o),c="",u=a.lastIndexOf("=");u>=0&&/^[A-Za-z_][A-Za-z0-9_]*$/.test(a.slice(0,u))&&(c=a.slice(0,u+1),a=a.slice(u+1));let p="";(a.startsWith('"')||a.startsWith("'"))&&(p=a[0],a=a.slice(1));let d=a.startsWith("./")||a.startsWith("../")||a.startsWith("/")||a.startsWith("~"),h=l.trim().length===0&&!d&&c.length===0,m=$=>`${c}${p}${$}`,f="",y;if(h)y=ec().filter($=>$.startsWith(a));else{let $=l.trim().split(/\s+/)[0]??"",A=rc(r,a,$==="cd");f=A.dirPart,y=A.names}if(y.length===0)return null;if(y.length===1){let $=f+y[0],A=$.endsWith("/"),H=p&&!A?p:"",x=A?"":" ",P=l+m($)+H+x;return{line:P+e.slice(n),cursor:P.length,candidates:[]}}let g=h?a:a.slice(f.length),S=tc(y);if(S.length>g.length){let $=l+m(f+S);return{line:$+e.slice(n),cursor:$.length,candidates:[]}}return{line:e,cursor:n,candidates:y.map($=>m(f+$))}}function gn(){try{process.stdout.write("\x1B[?2004l\x1B[>4m\x1B[?1000l\x1B[?1002l\x1B[?1006l\x1B[?7h"+t.reset+se.show+qt.exitAlt)}catch{}try{process.stdin.isTTY&&process.stdin.isRaw&&process.stdin.setRawMode(!1)}catch{}}var fn=class r{options;agent;markdown=new dn;cwd;currentSessionFile;modelProviderLabel;modelLabel;lines=[];input="";inputCursor=0;scrollOffset=0;statusText="\u5C31\u7EEA";statusDetail="";todoItems=[];deviceBridge;pendingImages=new Map;imageSeq=0;suspended=!1;busy=!1;exited=!1;autoApprove;intentEnabled;history=[];historyIndex=-1;pendingConfirm;pendingSelect;confirmChain=Promise.resolve();abortController;keyBuffer="";escTimer;projectDirCreated;needsRender=!1;mouseCapture;lastAnswerStart=0;streamingPreview="";termVisible=!0;termFocus=!1;termScroll=0;lastLeftWidth=0;lastPhysicalCount=0;lastPhysicalMap=[];screenToLogical=[];selectionAnchor;selectionHead;dragging=!1;lastTermPhysicalCount=0;termInput="";termInputCursor=0;termHistory=[];termHistoryIndex=-1;term;onData=e=>this.handleData(e);onResize=()=>{this.lastPhysicalCount=-1,this.lastTermPhysicalCount=-1,this.scheduleRender()};constructor(e){this.options=e,this.cwd=e.cwd,this.autoApprove=e.autoApprove,this.mouseCapture=e.config.mouseCapture===!0,this.intentEnabled=e.intentEnabled??e.config.intent?.enabled===!0,e.config.intent={...e.config.intent??{enabled:!1},enabled:this.intentEnabled},this.modelProviderLabel=e.providerLabel,this.modelLabel=e.model,this.term=new mn(e.cwd,()=>this.scheduleRender());let n=Cn(e.cwd);n.created&&(this.projectDirCreated=n.paths.dir);let s={onText:o=>this.handleTextDelta(o),onReasoning:()=>{},onToolStart:o=>this.handleToolStart(o),onToolEnd:(o,a)=>this.handleToolEnd(o,a),onStatus:(o,a)=>{this.statusText=o,this.statusDetail=a??"",this.scheduleRender()},onNotice:o=>this.handleNotice(o),onTodos:o=>{this.todoItems=o,this.scheduleRender()},onIntent:(o,a)=>this.handleIntent(o,a),onModelChange:o=>this.handleModelChange(o),confirm:o=>this.requestConfirm(o),onRoundLimit:o=>this.requestConfirm({tool:"round_limit",title:`\u5DF2\u8C03\u7528 ${o} \u8F6E\u5DE5\u5177\uFF0C\u662F\u5426\u7EE7\u7EED\uFF1F`,detail:`\u672C\u8F6E\u5BF9\u8BDD\u5DF2\u6267\u884C ${o} \u8F6E\u5DE5\u5177\u8C03\u7528\uFF08\u8FBE\u5230\u5F53\u524D\u4E0A\u9650\uFF09\uFF0C\u4EFB\u52A1\u53EF\u80FD\u5C1A\u672A\u5B8C\u6210\u3002
|
|
528
543
|
|
|
529
544
|
\xB7 \u6309 y \u7EE7\u7EED\uFF1A\u518D\u8FFD\u52A0 ${this.options.config.maxToolRounds} \u8F6E
|
|
530
545
|
\xB7 \u6309 n \u7ED3\u675F\uFF1A\u4FDD\u7559\u5DF2\u6709\u8FDB\u5C55\uFF0C\u672C\u8F6E\u5230\u6B64\u4E3A\u6B62
|
|
531
546
|
|
|
532
|
-
\u60F3\u6C38\u4E45\u8C03\u6574\u4E0A\u9650\uFF1A\u7F16\u8F91\u914D\u7F6E\u6587\u4EF6\u7684 maxToolRounds \u5B57\u6BB5\u3002`,danger:!1})},i=
|
|
533
|
-
`))this.lines.push(e);this.lines.push("")}this.mouseCapture&&this.lines.push(`${t.gray}\u9F20\u6807\u5DF2\u63A5\u7BA1\uFF1A\u6EDA\u8F6E\u6EDA\u52A8\u8F93\u51FA\u533A\uFF0C${t.reset}\u5728\u8F93\u51FA\u533A\u62D6\u62FD\u5373\u53EF\u9009\u4E2D\u5E76\u590D\u5236${t.gray}\uFF08\u677E\u5F00\u751F\u6548\uFF09\u3002${t.reset}`,`${t.gray}\u60F3\u7528\u7EC8\u7AEF\u539F\u751F\u7684\u6846\u9009\u4E0E\u53F3\u952E\u83DC\u5355\uFF1A\u6309\u4F4F ${t.reset}Shift${t.gray} \u62D6\u62FD\uFF0C\u6216\u8F93\u5165 ${t.reset}/mouse${t.gray}\u3002${t.reset}`,""),this.projectDirCreated&&(this.lines.push(`${t.green}\u2713 \u5DF2\u521D\u59CB\u5316\u9879\u76EE\u76EE\u5F55 ${this.projectDirCreated}${t.reset}`),this.lines.push(`${t.gray} \xB7 memory/ \u9879\u76EE\u8BB0\u5FC6\uFF08\u7384\u732A\u5199\u5165\uFF0C\u8DE8\u4F1A\u8BDD\u590D\u7528\uFF09${t.reset}`),this.lines.push(`${t.gray} \xB7 rules.md \u9879\u76EE\u89C4\u5219\uFF08\u5185\u5BB9\u6CE8\u5165\u7CFB\u7EDF\u63D0\u793A\u8BCD\uFF09${t.reset}`),this.lines.push("")),this.scheduleRender(),await new Promise(e=>{this.resolveExit=e})}resolveExit;enterTerminal(){process.stdout.write(qt.enterAlt+
|
|
534
|
-
`),a=o.length<=6?o:[...o.slice(0,3),`\u2026\uFF08\u7701\u7565 ${o.length-6} \u884C\uFF09`,...o.slice(-3)];for(let l of a)this.lines.push(` ${t.gray}${l.slice(0,120)}${t.reset}`)}this.statusText="\u601D\u8003\u4E2D",this.scheduleRender()}handleNotice(e){this.flushStreamingPreview();let
|
|
535
|
-
`))s.trim().length>0&&this.lines.push(`${t.gray} ${s}${t.reset}`);this.scheduleRender()}handleIntent(e,
|
|
536
|
-
`).map(a=>a.trim()).filter(a=>a.length>0);this.lines.push(`${t.gray}\u2301 \u610F\u56FE\u5206\u6790\u7ED3\u679C\uFF08\u5C06\u4F5C\u4E3A\u672C\u6B21\u8F93\u5165\uFF09${t.reset}`);for(let a of o.slice(0,14))this.lines.push(`${t.gray} ${a}${t.reset}`);o.length>14&&this.lines.push(`${t.gray} \u2026\uFF08\u5171 ${o.length} \u884C\uFF0C\u5B8C\u6574\u5185\u5BB9\u5DF2\u4F5C\u4E3A\u8F93\u5165\u53D1\u9001\uFF09${t.reset}`),this.lines.push(`${t.gray} \u539F\u59CB\u6D88\u606F\uFF1A${O(
|
|
537
|
-
`)}catch{}}drainKeys(){for(;;){let e=this.readKey();if(e===null){this.armIncompleteTimer();return}if(this.escTimer&&(clearTimeout(this.escTimer),this.escTimer=void 0),this.handleKey(e),this.exited)return}}armIncompleteTimer(){this.escTimer&&clearTimeout(this.escTimer),this.escTimer=void 0;let e=this.keyBuffer;if(e.startsWith(qe)){this.escTimer=setTimeout(()=>{this.escTimer=void 0;let
|
|
538
|
-
`)return;let
|
|
547
|
+
\u60F3\u6C38\u4E45\u8C03\u6574\u4E0A\u9650\uFF1A\u7F16\u8F91\u914D\u7F6E\u6587\u4EF6\u7684 maxToolRounds \u5B57\u6BB5\u3002`,danger:!1})},i=xt(e.cwd,K);this.currentSessionFile=i,this.agent=new cn(e.provider,e.config,e.cwd,s,e.activeModel,{sessionFile:i})}async start(){if(this.enterTerminal(),this.options.startupNotice){for(let e of this.options.startupNotice.split(`
|
|
548
|
+
`))this.lines.push(e);this.lines.push("")}this.mouseCapture&&this.lines.push(`${t.gray}\u9F20\u6807\u5DF2\u63A5\u7BA1\uFF1A\u6EDA\u8F6E\u6EDA\u52A8\u8F93\u51FA\u533A\uFF0C${t.reset}\u5728\u8F93\u51FA\u533A\u62D6\u62FD\u5373\u53EF\u9009\u4E2D\u5E76\u590D\u5236${t.gray}\uFF08\u677E\u5F00\u751F\u6548\uFF09\u3002${t.reset}`,`${t.gray}\u60F3\u7528\u7EC8\u7AEF\u539F\u751F\u7684\u6846\u9009\u4E0E\u53F3\u952E\u83DC\u5355\uFF1A\u6309\u4F4F ${t.reset}Shift${t.gray} \u62D6\u62FD\uFF0C\u6216\u8F93\u5165 ${t.reset}/mouse${t.gray}\u3002${t.reset}`,""),this.projectDirCreated&&(this.lines.push(`${t.green}\u2713 \u5DF2\u521D\u59CB\u5316\u9879\u76EE\u76EE\u5F55 ${this.projectDirCreated}${t.reset}`),this.lines.push(`${t.gray} \xB7 memory/ \u9879\u76EE\u8BB0\u5FC6\uFF08\u7384\u732A\u5199\u5165\uFF0C\u8DE8\u4F1A\u8BDD\u590D\u7528\uFF09${t.reset}`),this.lines.push(`${t.gray} \xB7 rules.md \u9879\u76EE\u89C4\u5219\uFF08\u5185\u5BB9\u6CE8\u5165\u7CFB\u7EDF\u63D0\u793A\u8BCD\uFF09${t.reset}`),this.lines.push("")),this.scheduleRender(),await new Promise(e=>{this.resolveExit=e})}resolveExit;enterTerminal(){process.stdout.write(qt.enterAlt+se.hide+"\x1B[?7l"+(this.mouseCapture?"\x1B[?1000h\x1B[?1002h\x1B[?1006h":"\x1B[?1000l\x1B[?1002l\x1B[?1006l")+"\x1B[?2004h"+this.extendedKeyRequest()),process.stdin.isTTY&&process.stdin.setRawMode(!0),process.stdin.resume(),process.stdin.setEncoding("utf8"),process.stdin.on("data",this.onData),process.stdout.on("resize",this.onResize)}flushStreamingPreview(){this.streamingPreview&&(this.lines.push(this.streamingPreview),this.streamingPreview="")}static MAX_OUTPUT_LINES=4e3;trimOutputLines(){let e=r.MAX_OUTPUT_LINES,n=this.lines.length-e;if(n<=0)return;this.lines.splice(0,n),this.lastAnswerStart>0&&(this.lastAnswerStart=Math.max(0,this.lastAnswerStart-n));let s=this.selectionAnchor,i=this.selectionHead;(s!==void 0||i!==void 0)&&(s!==void 0&&s<n||i!==void 0&&i<n?(this.selectionAnchor=void 0,this.selectionHead=void 0):(s!==void 0&&(this.selectionAnchor=s-n),i!==void 0&&(this.selectionHead=i-n)))}exitTerminal(){this.escTimer&&(clearTimeout(this.escTimer),this.escTimer=void 0),process.stdin.off("data",this.onData),process.stdout.off("resize",this.onResize),process.stdin.isTTY&&process.stdin.setRawMode(!1),process.stdin.pause(),process.stdout.write("\x1B[?2004l\x1B[>4m\x1B[?1000l\x1B[?1002l\x1B[?1006l\x1B[?7h"+t.reset+se.show+qt.exitAlt)}extendedKeyRequest(){let e=process.env.TERM??"",n=process.env.TERM_PROGRAM??"";return process.env.XZH_KITTY_KEYS?"\x1B[>1u":process.env.KITTY_WINDOW_ID||/kitty|ghostty/i.test(e)||/kitty|ghostty/i.test(n)?"":"\x1B[>4;2m"}shutdown(){if(this.exited)return;this.exited=!0;let e=this.deviceBridge;this.deviceBridge=void 0,this.agent.setDeviceBridge(void 0),e?.stop(),this.term.dispose(),this.exitTerminal(),this.resolveExit?.()}handleTextDelta(e){let n=this.markdown.push(ge(e));n.length>0&&this.lines.push(...n),this.streamingPreview=this.markdown.peek(),this.scheduleRender()}handleToolStart(e){this.flushStreamingPreview();let n=mc(e);this.lines.push(`${t.magenta}\u23FA${t.reset} ${t.bold}${e.name}${t.reset} ${t.gray}${n}${t.reset}`),this.statusText=`\u6267\u884C ${e.name}`,this.scheduleRender()}handleToolEnd(e,n){this.flushStreamingPreview();let s=ge(n.summary??(n.ok?"\u5B8C\u6210":"\u5931\u8D25")).slice(0,60),i=n.denied?`${t.yellow}\u23BF \u5DF2\u62D2\u7EDD${t.reset}`:n.ok?`${t.green}\u23BF ${s}${t.reset}`:`${t.red}\u23BF ${s}${t.reset}`;if(this.lines.push(` ${i}`),!n.ok&&!n.denied&&n.content?.trim()){let o=ge(n.content).trim().split(`
|
|
549
|
+
`),a=o.length<=6?o:[...o.slice(0,3),`\u2026\uFF08\u7701\u7565 ${o.length-6} \u884C\uFF09`,...o.slice(-3)];for(let l of a)this.lines.push(` ${t.gray}${l.slice(0,120)}${t.reset}`)}this.statusText="\u601D\u8003\u4E2D",this.scheduleRender()}handleNotice(e){this.flushStreamingPreview();let n=ge(e);for(let s of n.split(`
|
|
550
|
+
`))s.trim().length>0&&this.lines.push(`${t.gray} ${s}${t.reset}`);this.scheduleRender()}handleIntent(e,n){let o=ge(e).split(`
|
|
551
|
+
`).map(a=>a.trim()).filter(a=>a.length>0);this.lines.push(`${t.gray}\u2301 \u610F\u56FE\u5206\u6790\u7ED3\u679C\uFF08\u5C06\u4F5C\u4E3A\u672C\u6B21\u8F93\u5165\uFF09${t.reset}`);for(let a of o.slice(0,14))this.lines.push(`${t.gray} ${a}${t.reset}`);o.length>14&&this.lines.push(`${t.gray} \u2026\uFF08\u5171 ${o.length} \u884C\uFF0C\u5B8C\u6574\u5185\u5BB9\u5DF2\u4F5C\u4E3A\u8F93\u5165\u53D1\u9001\uFF09${t.reset}`),this.lines.push(`${t.gray} \u539F\u59CB\u6D88\u606F\uFF1A${O(n.replace(/\s+/g," "),60)}${t.reset}`),this.scheduleRender()}handleModelChange(e){this.modelProviderLabel=Ce(e.provider)?.label??e.provider,this.modelLabel=e.model,this.lines.push(`${t.yellow}\u21C4 \u6A21\u578B\u5DF2\u5207\u6362\u4E3A ${e.provider}/${e.model}\uFF08${e.reason}\uFF09${t.reset}`),this.scheduleRender()}async handleModelCommand(e){let n=U(this.options.config);if(n.length===0){this.lines.push(`${t.yellow}\u8FD8\u6CA1\u6709\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B${t.reset}${t.gray} \u2014\u2014 \u7528 ${t.reset}xzh model${t.gray} \u6DFB\u52A0\u3002${t.reset}`),this.scheduleRender();return}let s=be(this.options.config);if(e){let l=ic(n,e);if(!l){this.lines.push(`${t.yellow}\u6CA1\u627E\u5230\u6A21\u578B\u300C${e}\u300D${t.reset}${t.gray} \u2014\u2014 \u8F93\u5165 ${t.reset}/model${t.gray} \u67E5\u770B\u5217\u8868\u3002${t.reset}`),this.scheduleRender();return}this.applyModelSwitch(l);return}if(n.length===1){this.lines.push(`${t.gray}\u53EA\u914D\u7F6E\u4E86\u4E00\u4E2A\u6A21\u578B\uFF1A${t.reset}${n[0].id}${t.gray}\uFF08\u7528 ${t.reset}xzh model${t.gray} \u6DFB\u52A0\u66F4\u591A\uFF09${t.reset}`),this.scheduleRender();return}let i=Math.max(0,n.findIndex(l=>l.id===s?.id)),o=await this.requestSelect("\u9009\u62E9\u6A21\u578B",n.map(l=>({label:l.id,hint:l.id===s?.id?"\u5F53\u524D\u4F7F\u7528\u4E2D":void 0,value:l.id})),"\u987A\u5E8F\u5373\u56DE\u9000\u4F18\u5148\u7EA7\uFF1B\u9009\u4E2D\u7684\u6A21\u578B\u4F1A\u8BB0\u5165\u914D\u7F6E\uFF0C\u4E0B\u6B21\u542F\u52A8\u7EE7\u7EED\u7528\u5B83",i);if(o===void 0){this.lines.push(`${t.gray}\u5DF2\u53D6\u6D88\uFF0C\u4ECD\u4F7F\u7528 ${s?.id??this.modelLabel}${t.reset}`),this.scheduleRender();return}let a=n.find(l=>l.id===o);a&&this.applyModelSwitch(a)}applyModelSwitch(e){if(this.busy){this.lines.push(`${t.yellow}\u672C\u8F6E\u5BF9\u8BDD\u8FDB\u884C\u4E2D \u2014\u2014 \u5148\u7B49\u5B83\u7ED3\u675F\u6216 Ctrl+C \u4E2D\u65AD\uFF0C\u518D\u5207\u6362\u6A21\u578B\u3002${t.reset}`),this.scheduleRender();return}try{if(!this.agent.switchModel(e)){this.lines.push(`${t.gray}\u5DF2\u7ECF\u662F\u5F53\u524D\u6A21\u578B\uFF1A${e.id}${t.reset}`),this.scheduleRender();return}this.handleModelChange({provider:e.provider,model:e.model,reason:"\u624B\u52A8\u5207\u6362"})}catch(n){this.lines.push(`${t.yellow}\u5207\u6362\u6A21\u578B\u5931\u8D25\uFF1A${t.reset}${ne(n)}`),this.scheduleRender()}}requestConfirm(e){let n=this.confirmChain.then(()=>new Promise(s=>{this.pendingConfirm={request:e,resolve:s,selected:!0},this.scheduleRender()}));return this.confirmChain=n.then(()=>{},()=>{}),n}handleData(e){process.env.XZH_DEBUG_KEYS&&this.logRawKeys(e),this.keyBuffer+=e,this.drainKeys()}logRawKeys(e){let n=[...e].map(i=>i.codePointAt(0).toString(16).padStart(2,"0")).join(" "),s=e.replace(/\x1b/g,"\\e").replace(/\r/g,"\\r").replace(/\n/g,"\\n");try{pe.appendFileSync(Le.join(T(),"keys.log"),`${new Date().toISOString()} hex=[${n}] raw=${JSON.stringify(s)}
|
|
552
|
+
`)}catch{}}drainKeys(){for(;;){let e=this.readKey();if(e===null){this.armIncompleteTimer();return}if(this.escTimer&&(clearTimeout(this.escTimer),this.escTimer=void 0),this.handleKey(e),this.exited)return}}armIncompleteTimer(){this.escTimer&&clearTimeout(this.escTimer),this.escTimer=void 0;let e=this.keyBuffer;if(e.startsWith(qe)){this.escTimer=setTimeout(()=>{this.escTimer=void 0;let n=this.keyBuffer;n.startsWith(qe)&&(this.keyBuffer="",this.insertPastedText(n.slice(qe.length)))},ac);return}e.startsWith("\x1B")&&(this.escTimer=setTimeout(()=>{this.escTimer=void 0;let n=this.keyBuffer;this.keyBuffer="",n==="\x1B"&&this.handleKey("\x1B")},oc))}readKey(){let e=this.keyBuffer;if(e.length===0)return null;if(e.startsWith(qe)){let i=e.indexOf(Tt,qe.length);return i===-1?null:(this.keyBuffer=e.slice(i+Tt.length),e.slice(0,i+Tt.length))}if(e[0]==="\x1B"){let i=/^\x1b\[[0-9:;<=>?]*[@-~]/.exec(e);if(i)return this.keyBuffer=e.slice(i[0].length),i[0];let o=/^\x1bO[A-Za-z]/.exec(e);return o?(this.keyBuffer=e.slice(o[0].length),o[0]):/^\x1b\[?[0-9:;<=>?]*$/.test(e)?null:e.length>=2?(this.keyBuffer=e.slice(2),e.slice(0,2)):null}let n=e.codePointAt(0);if(n===void 0)return null;let s=String.fromCodePoint(n);return this.keyBuffer=e.slice(s.length),s}handleKey(e){if(e.startsWith(qe)&&e.endsWith(Tt)){this.insertPastedText(e.slice(qe.length,e.length-Tt.length));return}if(e===`
|
|
553
|
+
`)return;let n=dc(e);if(this.pendingConfirm){this.handleConfirmKey(n);return}if(this.pendingSelect){this.handleSelectKey(n);return}let s=/^\x1b\[<(\d+);(\d+);(\d+)([Mm])$/.exec(n);if(s){this.handleMouse(s);return}if(n==="\x1B[Z"){this.toggleFocus();return}if(this.termFocus){this.handleTermKey(n);return}switch(n){case"":this.busy?(this.abortController?.abort(),this.statusText="\u4E2D\u65AD\u4E2D\u2026",this.scheduleRender()):this.input.length>0?(this.input="",this.inputCursor=0,this.scheduleRender()):this.shutdown();return;case"":this.busy&&(this.abortController?.abort(),this.statusText="\u4E2D\u65AD\u4E2D\u2026",this.scheduleRender());return;case"":this.pasteFromClipboard();return;case"\r":this.submit();return;case`
|
|
539
554
|
`:this.insertText(`
|
|
540
|
-
`);return;case"\x7F":case"\b":this.backspace();return;case"":this.inputCursor=0,this.scheduleRender();return;case"":this.inputCursor=this.input.length,this.scheduleRender();return;case"\f":this.lines=[],this.scrollOffset=0,this.scheduleRender();return;case"\x1B[A":this.navigateHistory(-1);return;case"\x1B[B":this.navigateHistory(1);return;case"\x1B[C":this.moveCursor(1);return;case"\x1B[D":this.moveCursor(-1);return;case"\x1B[5~":this.scrollBy(5);return;case"\x1B[6~":this.scrollBy(-5);return;case"\x1B[1;2A":this.scrollBy(1);return;case"\x1B[1;2B":this.scrollBy(-1);return;case"\x1B[H":case"\x1B[1~":case"\x1B[7~":this.scrollToTop();return;case"\x1B[F":case"\x1B[4~":case"\x1B[8~":this.scrollToBottom();return;default:
|
|
541
|
-
`)).trim();if(this.dragging=!1,!i){this.scheduleRender();return}let o=Buffer.from(i,"utf8").toString("base64");process.stdout.write(`\x1B]52;c;${o}\x07`),this.lines.push(`${t.green}\u2713 \u5DF2\u590D\u5236 ${s} \u884C\u5230\u526A\u8D34\u677F${t.reset}${t.gray}\uFF08\u9009\u4E2D\u5904\u4ECD\u4FDD\u6301\u9AD8\u4EAE\uFF09\u3002\u82E5\u7C98\u8D34\u51FA\u6765\u662F\u7A7A\u7684\uFF0C\u8BF4\u660E\u672C\u7EC8\u7AEF\u7981\u7528\u4E86 OSC 52\uFF0C\u8BF7\u6539\u7528 ${t.reset}/copy${t.gray} \u6216 Shift+\u62D6\u62FD\u3002${t.reset}`),this.scheduleRender()}toggleFocus(){if(!this.termVisible){this.lines.push(`${t.gray}\u7EC8\u7AEF\u9762\u677F\u5DF2\u9690\u85CF\uFF0C\u8F93\u5165 /term \u53EF\u91CD\u65B0\u663E\u793A\u3002${t.reset}`),this.scheduleRender();return}this.termFocus=!this.termFocus,this.scheduleRender()}handleTermKey(e){if(this.term.isRunning()){if(e===""||e===""){this.term.interrupt(),this.scheduleRender();return}this.term.write(e);return}switch(e){case"":return;case"":this.term.isRunning()?this.term.interrupt():this.termInput.length>0?(this.termInput="",this.termInputCursor=0):this.termFocus=!1,this.scheduleRender();return;case"\r":this.submitTermCommand();return;case" ":this.applyTermCompletion();return;case"\x7F":case"\b":this.termBackspace();return;case"":this.termInputCursor=0,this.scheduleRender();return;case"":this.termInputCursor=this.termInput.length,this.scheduleRender();return;case"\f":this.term.clear(),this.scrollTermToBottom();return;case"\x1B[A":this.navigateTermHistory(-1);return;case"\x1B[B":this.navigateTermHistory(1);return;case"\x1B[C":this.termInputCursor=Math.min(this.termInput.length,this.termInputCursor+1),this.scheduleRender();return;case"\x1B[D":this.termInputCursor=Math.max(0,this.termInputCursor-1),this.scheduleRender();return;case"\x1B[5~":this.scrollTermBy(5);return;case"\x1B[6~":this.scrollTermBy(-5);return;case"\x1B[1;2A":this.scrollTermBy(1);return;case"\x1B[1;2B":this.scrollTermBy(-1);return;case"\x1B[H":case"\x1B[1~":case"\x1B[7~":this.scrollTermToTop();return;case"\x1B[F":case"\x1B[4~":case"\x1B[8~":this.scrollTermToBottom();return;default:e.charCodeAt(0)>=32&&(this.termInput=this.termInput.slice(0,this.termInputCursor)+e+this.termInput.slice(this.termInputCursor),this.termInputCursor+=e.length,this.termScroll=0,this.scheduleRender())}}termBackspace(){if(this.termInputCursor<=0)return;let e=this.termInputCursor-1,
|
|
542
|
-
`).replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g,"");
|
|
543
|
-
\u63D0\u793A\uFF1A\u4E5F\u53EF\u4EE5\u76F4\u63A5\u628A\u56FE\u7247\u6587\u4EF6\u62D6\u8FDB\u7EC8\u7AEF\uFF0C\u628A\u8DEF\u5F84\u8D34\u5728\u8F93\u5165\u6846\u91CC\u3002`)}}finally{this.statusText="\u5C31\u7EEA",this.statusDetail="",this.scheduleRender()}}}async ensureClipboardTool(){let e=
|
|
555
|
+
`);return;case"\x7F":case"\b":this.backspace();return;case"":this.inputCursor=0,this.scheduleRender();return;case"":this.inputCursor=this.input.length,this.scheduleRender();return;case"\f":this.lines=[],this.scrollOffset=0,this.scheduleRender();return;case"\x1B[A":this.navigateHistory(-1);return;case"\x1B[B":this.navigateHistory(1);return;case"\x1B[C":this.moveCursor(1);return;case"\x1B[D":this.moveCursor(-1);return;case"\x1B[5~":this.scrollBy(5);return;case"\x1B[6~":this.scrollBy(-5);return;case"\x1B[1;2A":this.scrollBy(1);return;case"\x1B[1;2B":this.scrollBy(-1);return;case"\x1B[H":case"\x1B[1~":case"\x1B[7~":this.scrollToTop();return;case"\x1B[F":case"\x1B[4~":case"\x1B[8~":this.scrollToBottom();return;default:n.charCodeAt(0)>=32&&this.insertText(n)}}handleMouse(e){let n=Number(e[1]),s=Number(e[2]),i=Number(e[3]),o=e[4]==="M",a=this.resolveTermWidth(process.stdout.columns||80),l=this.lastLeftWidth>0&&a>0&&s>this.lastLeftWidth+1;if(process.env.XZH_DEBUG_KEYS&&this.logRawKeys(`MOUSE btn=${n} col=${s} row=${i} ${o?"press":"release"} inTerm=${l} logical=${this.logicalAtScreenRow(i)} mapLen=${this.screenToLogical.length} anchor=${this.selectionAnchor} head=${this.selectionHead} drag=${this.dragging}`),o&&(n&64)===64){let u=(n&1)===0?3:-3;l?this.scrollTermBy(u):this.scrollBy(u);return}if(o&&(n&3)===0&&(n&32)===0){let c=this.logicalAtScreenRow(i);if(!l&&c!==void 0){this.selectionAnchor=c,this.selectionHead=c,this.dragging=!1,this.scheduleRender();return}l!==this.termFocus&&(this.termFocus=l,this.scheduleRender());return}if(o&&(n&32)===32&&this.selectionAnchor!==void 0){let c=this.logicalAtScreenRow(i);c!==void 0&&c!==this.selectionHead&&(this.selectionHead=c,this.dragging=!0,this.scheduleRender());return}!o&&this.selectionAnchor!==void 0&&(this.dragging?this.finishSelection():this.clearSelection())}logicalAtScreenRow(e){return this.screenToLogical[e-1]}clearSelection(){this.selectionAnchor!==void 0&&(this.selectionAnchor=void 0,this.selectionHead=void 0,this.dragging=!1,this.scheduleRender())}finishSelection(){let e=Math.min(this.selectionAnchor,this.selectionHead),n=Math.max(this.selectionAnchor,this.selectionHead),s=n-e+1,i=ge(this.lines.slice(e,n+1).join(`
|
|
556
|
+
`)).trim();if(this.dragging=!1,!i){this.scheduleRender();return}let o=Buffer.from(i,"utf8").toString("base64");process.stdout.write(`\x1B]52;c;${o}\x07`),this.lines.push(`${t.green}\u2713 \u5DF2\u590D\u5236 ${s} \u884C\u5230\u526A\u8D34\u677F${t.reset}${t.gray}\uFF08\u9009\u4E2D\u5904\u4ECD\u4FDD\u6301\u9AD8\u4EAE\uFF09\u3002\u82E5\u7C98\u8D34\u51FA\u6765\u662F\u7A7A\u7684\uFF0C\u8BF4\u660E\u672C\u7EC8\u7AEF\u7981\u7528\u4E86 OSC 52\uFF0C\u8BF7\u6539\u7528 ${t.reset}/copy${t.gray} \u6216 Shift+\u62D6\u62FD\u3002${t.reset}`),this.scheduleRender()}toggleFocus(){if(!this.termVisible){this.lines.push(`${t.gray}\u7EC8\u7AEF\u9762\u677F\u5DF2\u9690\u85CF\uFF0C\u8F93\u5165 /term \u53EF\u91CD\u65B0\u663E\u793A\u3002${t.reset}`),this.scheduleRender();return}this.termFocus=!this.termFocus,this.scheduleRender()}handleTermKey(e){if(this.term.isRunning()){if(e===""||e===""){this.term.interrupt(),this.scheduleRender();return}this.term.write(e);return}switch(e){case"":return;case"":this.term.isRunning()?this.term.interrupt():this.termInput.length>0?(this.termInput="",this.termInputCursor=0):this.termFocus=!1,this.scheduleRender();return;case"\r":this.submitTermCommand();return;case" ":this.applyTermCompletion();return;case"\x7F":case"\b":this.termBackspace();return;case"":this.termInputCursor=0,this.scheduleRender();return;case"":this.termInputCursor=this.termInput.length,this.scheduleRender();return;case"\f":this.term.clear(),this.scrollTermToBottom();return;case"\x1B[A":this.navigateTermHistory(-1);return;case"\x1B[B":this.navigateTermHistory(1);return;case"\x1B[C":this.termInputCursor=Math.min(this.termInput.length,this.termInputCursor+1),this.scheduleRender();return;case"\x1B[D":this.termInputCursor=Math.max(0,this.termInputCursor-1),this.scheduleRender();return;case"\x1B[5~":this.scrollTermBy(5);return;case"\x1B[6~":this.scrollTermBy(-5);return;case"\x1B[1;2A":this.scrollTermBy(1);return;case"\x1B[1;2B":this.scrollTermBy(-1);return;case"\x1B[H":case"\x1B[1~":case"\x1B[7~":this.scrollTermToTop();return;case"\x1B[F":case"\x1B[4~":case"\x1B[8~":this.scrollTermToBottom();return;default:e.charCodeAt(0)>=32&&(this.termInput=this.termInput.slice(0,this.termInputCursor)+e+this.termInput.slice(this.termInputCursor),this.termInputCursor+=e.length,this.termScroll=0,this.scheduleRender())}}termBackspace(){if(this.termInputCursor<=0)return;let e=this.termInputCursor-1,n=this.termInput.charCodeAt(e);n>=56320&&n<=57343&&e>0&&(e-=1),this.termInput=this.termInput.slice(0,e)+this.termInput.slice(this.termInputCursor),this.termInputCursor=e,this.scheduleRender()}navigateTermHistory(e){this.termHistory.length!==0&&(this.termHistoryIndex===-1&&(this.termHistoryIndex=this.termHistory.length),this.termHistoryIndex+=e,this.termHistoryIndex<0&&(this.termHistoryIndex=0),this.termHistoryIndex>=this.termHistory.length?(this.termHistoryIndex=-1,this.termInput="",this.termInputCursor=0):(this.termInput=this.termHistory[this.termHistoryIndex],this.termInputCursor=this.termInput.length),this.scheduleRender())}submitTermCommand(){let e=this.termInput.trim();e&&(this.termInput="",this.termInputCursor=0,this.termScroll=0,this.termHistory.push(e),this.termHistoryIndex=-1,this.term.run(e),this.scheduleRender())}applyTermCompletion(){let e=co(this.term.getCwd(),this.termInput,this.termInputCursor);if(e){if(e.candidates.length>0){let s=e.candidates.slice(0,24),i=e.candidates.length>s.length?` \u2026\uFF08\u5171 ${e.candidates.length} \u9879\uFF09`:"";this.term.notice(`${t.gray}${s.join(" ")}${i}${t.reset}`)}else this.termInput=e.line,this.termInputCursor=e.cursor,this.termScroll=0;this.scheduleRender()}}handleConfirmKey(e){let n=this.pendingConfirm;if(n)switch(e){case"y":case"Y":case"\r":this.resolveConfirm(!0);return;case"":this.abortController?.abort(),this.resolveConfirm(!1);return;case"n":case"N":case"\x1B":case"":this.resolveConfirm(!1);return;case"\x1B[C":case"\x1B[D":case" ":n.selected=!n.selected,this.scheduleRender();return;default:return}}resolveConfirm(e){let n=this.pendingConfirm;if(!n)return;this.pendingConfirm=void 0;let s=e?"\u5DF2\u5141\u8BB8":"\u5DF2\u62D2\u7EDD";this.lines.push(` ${e?t.green:t.yellow}${s}${t.reset}`),n.resolve(e),this.scheduleRender()}requestSelect(e,n,s,i=0){return new Promise(o=>{this.pendingSelect={title:e,detail:s,options:n,index:Math.min(Math.max(0,i),Math.max(0,n.length-1)),resolve:o},this.scheduleRender()})}resolveSelect(e){let n=this.pendingSelect;n&&(this.pendingSelect=void 0,n.resolve(e),this.scheduleRender())}handleSelectKey(e){let n=this.pendingSelect,s=n.options.length;switch(e){case"\x1B[A":case"k":n.index=(n.index-1+s)%s,this.scheduleRender();return;case"\x1B[B":case"j":n.index=(n.index+1)%s,this.scheduleRender();return;case"\r":this.resolveSelect(n.options[n.index]?.value);return;case"\x1B":case"":this.resolveSelect(void 0);return;default:if(/^[1-9]$/.test(e)){let i=Number(e)-1;i<s&&this.resolveSelect(n.options[i].value)}}}insertText(e){this.input=this.input.slice(0,this.inputCursor)+e+this.input.slice(this.inputCursor),this.inputCursor+=e.length,this.scrollOffset=0,this.scheduleRender()}insertPastedText(e){let n=e.replace(/\r\n?/g,`
|
|
557
|
+
`).replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g,"");n&&this.insertText(n)}async pasteFromClipboard(){if(!(this.busy||this.termFocus)){this.statusText="\u8BFB\u53D6\u526A\u8D34\u677F",this.statusDetail="",this.scheduleRender();try{let e=await Ir();if(e.kind==="image"){this.attachClipboardImage(e.image);return}let n=await oo();if(n){this.insertText(n);return}if(e.kind==="unavailable"){if(await this.ensureClipboardTool()){let s=await Ir();if(s.kind==="image"){this.attachClipboardImage(s.image);return}}this.handleNotice(`\u672A\u80FD\u8BFB\u53D6\u526A\u8D34\u677F\uFF1A${e.detail}
|
|
558
|
+
\u63D0\u793A\uFF1A\u4E5F\u53EF\u4EE5\u76F4\u63A5\u628A\u56FE\u7247\u6587\u4EF6\u62D6\u8FDB\u7EC8\u7AEF\uFF0C\u628A\u8DEF\u5F84\u8D34\u5728\u8F93\u5165\u6846\u91CC\u3002`)}}finally{this.statusText="\u5C31\u7EEA",this.statusDetail="",this.scheduleRender()}}}async ensureClipboardTool(){let e=Ar();if(e.length===0)return!1;for(let n of e){if(await Ke(n))return!0;let s=n.install[Ae()];if(!s)continue;if(!await this.requestConfirm({tool:"clipboard_install",title:`\u9700\u8981\u5B89\u88C5\u526A\u8D34\u677F\u5DE5\u5177\uFF1A${n.name}`,detail:`Ctrl+V \u7C98\u8D34\u56FE\u7247\u9700\u8981\u8BFB\u53D6\u7CFB\u7EDF\u526A\u8D34\u677F\uFF0C\u5F53\u524D\u7F3A\u5C11\u5B83\u3002
|
|
544
559
|
|
|
545
560
|
\u5B89\u88C5\u547D\u4EE4\uFF1A
|
|
546
561
|
${s}
|
|
547
562
|
|
|
548
563
|
\u6309 y \u7ACB\u5373\u5B89\u88C5\uFF08\u4F1A\u6682\u65F6\u79BB\u5F00\u754C\u9762\uFF0C\u4EE5\u4FBF\u8F93\u5165 sudo \u5BC6\u7801\uFF09\uFF1B\u6309 n \u8DF3\u8FC7\u3002`,danger:!1}))return this.handleNotice(`\u5DF2\u8DF3\u8FC7\u5B89\u88C5\u3002\u4E5F\u53EF\u4EE5\u624B\u52A8\u6267\u884C\uFF1A
|
|
549
|
-
${s}`),!1;this.handleNotice(`\u6B63\u5728\u5B89\u88C5 ${
|
|
564
|
+
${s}`),!1;this.handleNotice(`\u6B63\u5728\u5B89\u88C5 ${n.name} \u2026\uFF08\u53EF\u80FD\u9700\u8981\u8F93\u5165 sudo \u5BC6\u7801\uFF09`),this.suspendUi();let o;try{o=await _r(s)}catch(a){o={ok:!1,output:String(a),timedOut:!1}}finally{this.resumeUi()}return o.ok?await Ke(n)?(this.handleNotice(`\u2713 ${n.name} \u5B89\u88C5\u5B8C\u6210`),!0):(this.handleNotice(`\u5B89\u88C5\u547D\u4EE4\u5DF2\u6267\u884C\uFF0C\u4F46\u68C0\u6D4B\u4ECD\u672A\u901A\u8FC7\uFF08\u53EF\u80FD\u9700\u8981\u91CD\u5F00\u7EC8\u7AEF\u5237\u65B0 PATH\uFF09\u3002
|
|
550
565
|
\u53EF\u624B\u52A8\u6267\u884C\uFF1A
|
|
551
566
|
${s}`),!1):(this.handleNotice(`\u5B89\u88C5\u5931\u8D25${o.timedOut?"\uFF08\u8D85\u65F6\uFF09":""}${o.output.trim()?`\uFF1A${o.output.trim()}`:""}
|
|
552
567
|
\u53EF\u624B\u52A8\u6267\u884C\uFF1A
|
|
553
568
|
${s}`),!1)}return!1}suspendUi(){this.suspended=!0,this.exitTerminal(),process.stdout.write(`${t.gray}[\u7384\u732A] \u6B63\u5728\u5B89\u88C5\u4F9D\u8D56\uFF0C\u5B89\u88C5\u5B8C\u6210\u540E\u4F1A\u81EA\u52A8\u56DE\u5230\u754C\u9762\u2026${t.reset}
|
|
554
569
|
|
|
555
|
-
`)}resumeUi(){this.enterTerminal(),this.suspended=!1,this.lastPhysicalCount=-1,this.lastTermPhysicalCount=-1,this.scheduleRender()}attachClipboardImage(e){if(e.bytes>
|
|
570
|
+
`)}resumeUi(){this.enterTerminal(),this.suspended=!1,this.lastPhysicalCount=-1,this.lastTermPhysicalCount=-1,this.scheduleRender()}attachClipboardImage(e){if(e.bytes>un){this.handleNotice(`\u56FE\u7247\u8FC7\u5927\uFF08${Dr(e.bytes)}\uFF09\uFF0C\u8D85\u51FA\u4E0A\u9650 ${Dr(un)}\uFF0C\u5DF2\u5FFD\u7565\u3002`);return}if(!this.currentModelSupportsVision()){this.handleNotice(`\u5F53\u524D\u6A21\u578B ${this.modelLabel} \u672A\u6807\u6CE8\u652F\u6301\u56FE\u7247\u8F93\u5165\uFF0C\u672A\u9644\u52A0\u56FE\u7247\u3002
|
|
556
571
|
\xB7 \u82E5\u8BE5\u6A21\u578B\u786E\u5B9E\u652F\u6301\u89C6\u89C9\uFF1Axzh model vision <id> on
|
|
557
|
-
\xB7 \u6216\u8005\u5207\u6362\u5230 glm-4v / qwen-vl / gpt-4o / claude \u7B49\u652F\u6301\u89C6\u89C9\u7684\u6A21\u578B`);return}let
|
|
558
|
-
`)){let o=
|
|
559
|
-
`).trim(),images:
|
|
560
|
-
`:""}[\u56FE\u7247 \xD7 ${s.length}]`:
|
|
561
|
-
`);this.lines.push(`${o} ${t.brightGreen}${t.bold}${l}${t.reset}`);for(let
|
|
562
|
-
`);this.lines.push(`${t.red}\u2717 ${d}${t.reset}`);for(let m of
|
|
563
|
-
`)).trim();if(!c){let d=
|
|
564
|
-
`).length;this.lines.push(`${t.green}\u2713 \u5DF2\u590D\u5236${l}\uFF08${
|
|
565
|
-
`))i&&this.lines.push(`${t.gray} ${i}${t.reset}`)}async handleDeviceCommand(e){let[
|
|
566
|
-
${t.gray} \u76EE\u6807\u8BBE\u5907\uFF08${a.delivered}\uFF09\uFF1A${a.devices.join("\u3001")}${t.reset}`);break}case"logs":{if(!o?.isRunning()){this.lines.push(`${t.yellow}\u8BBE\u5907\u6865\u672A\u542F\u52A8${t.reset}${t.gray}\uFF08/device serve\uFF09${t.reset}`);break}let a=Number.parseInt(i,10),l=o.recentLogs(Number.isFinite(a)&&a>0?a:30);if(l.length===0){this.lines.push(`${t.gray}\u6682\u65E0\u8BBE\u5907\u65E5\u5FD7\u3002${t.reset}`);break}this.lines.push(`${t.gray}\u6700\u8FD1 ${l.length} \u6761\u8BBE\u5907\u65E5\u5FD7\uFF1A${t.reset}`);for(let c of l)this.lines.push(`${t.gray}[${c.device}]${t.reset} ${ge(c.text)}`);break}default:this.lines.push(`${t.gray}\u7528\u6CD5\uFF1A/device [connect <\u624B\u673AIP>|serve|stop|list|push <\u6587\u4EF6>|run <\u6587\u4EF6>|logs]${t.reset}`);break}this.scheduleRender()}printTools(){let e=
|
|
567
|
-
`)[0].replace(/\*\*/g,"");this.lines.push(` ${t.cyan}${r.name.padEnd(16)}${t.reset} ${t.gray}${O(s,60)}${t.reset}`)}this.lines.push(`${t.gray} \u662F\u5426\u88AB\u8C03\u7528\u7531\u6A21\u578B\u51B3\u5B9A\uFF1B\u60F3\u5F3A\u8C03\u67D0\u4E2A\u5DE5\u5177\uFF0C\u53EF\u5199\u8FDB\u9879\u76EE\u89C4\u5219\uFF08.xuanzhu/rules.md\uFF09\u3002${t.reset}`),this.scheduleRender()}printHelp(){let e=[`${t.bold}\u7384\u732A \u5185\u7F6E\u547D\u4EE4${t.reset}`," /help \u663E\u793A\u672C\u5E2E\u52A9"," /clear \u6E05\u7A7A\u5C4F\u5E55"," /tools \u5217\u51FA\u672C\u8F6E\u53D1\u7ED9\u6A21\u578B\u7684\u5DE5\u5177\uFF08\u6392\u67E5\u300C\u67D0\u4E2A\u5DE5\u5177\u4F3C\u4E4E\u6CA1\u88AB\u8C03\u7528\u8FC7\u300D\uFF09"," /device \u624B\u673A\u8BBE\u5907\u6865\uFF08\u5148 /device serve \u6216 /device connect <\u624B\u673AIP>\uFF09"," \u5B50\u547D\u4EE4\uFF1Aconnect\uFF5Cserve\uFF5Cstop\uFF5Clist\uFF5Cpush <\u6587\u4EF6>\uFF5Crun <\u6587\u4EF6>\uFF5Clogs [N]"," \u4F53\u68C0\u4E0E\u622A\u56FE\u8BF7\u7528\u547D\u4EE4\u884C\uFF1Axzh device check / xzh device shot"," /copy [N|A-B|last|all] \u590D\u5236\u5DE6\u4FA7\u5BF9\u8BDD\u5230\u7CFB\u7EDF\u526A\u8D34\u677F\uFF08\u9ED8\u8BA4\u6700\u8FD1 30 \u884C\uFF09"," /copy term [N|A-B|all] \u590D\u5236\u53F3\u4FA7\u7EC8\u7AEF\u8F93\u51FA\uFF08\u6309\u680F\u53D6\u5185\u5BB9\uFF0C\u4E0D\u4F1A\u4E32\u680F\uFF09"," /image \u628A\u7CFB\u7EDF\u526A\u8D34\u677F\u91CC\u7684\u56FE\u7247\u52A0\u4E3A\u672C\u8F6E\u9644\u4EF6\uFF08\u540C Ctrl+V\uFF1B\u522B\u540D /paste\uFF09"," /mouse \u5207\u6362\u9F20\u6807\u6355\u83B7\uFF1A\u5F00\u542F\u540E\u53EF\u5728\u8F93\u51FA\u533A\u62D6\u62FD\u9009\u62E9\uFF08\u6309\u6574\u884C\uFF09"," /reset \u91CD\u7F6E\u5BF9\u8BDD\u4E0A\u4E0B\u6587"," /undo \u64A4\u9500\u7384\u732A\u5BF9\u6587\u4EF6\u7684\u6700\u8FD1\u4E00\u6B21\u4FEE\u6539\uFF08\u6539\u524D\u81EA\u52A8\u5907\u4EFD\uFF09"," /resume [\u7F16\u53F7] \u5217\u51FA / \u6062\u590D\u5386\u53F2\u4F1A\u8BDD\uFF08\u5BF9\u8BDD\u5386\u53F2\u4F1A\u81EA\u52A8\u4FDD\u5B58\uFF09"," /cwd \u663E\u793A\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55"," /switch <\u76EE\u5F55> \u5207\u6362\u9879\u76EE\uFF08\u8F7D\u5165\u8BE5\u9879\u76EE\u4E0A\u6B21\u4F1A\u8BDD\u63A5\u7740\u804A\uFF09"," /term \u663E\u793A/\u9690\u85CF\u53F3\u4FA7\u7EC8\u7AEF\u9762\u677F\uFF08/term clear \u6E05\u7A7A\u8F93\u51FA\uFF09"," /model \u663E\u793A\u5F53\u524D\u6A21\u578B\u4E0E\u5DF2\u914D\u7F6E\u6A21\u578B\uFF08\u6309\u56DE\u9000\u987A\u5E8F\uFF09"," /auto [on|off] \u5207\u6362\u81EA\u52A8\u6279\u51C6\uFF08on\uFF1A\u6240\u6709\u5DE5\u5177\u76F4\u63A5\u6267\u884C\uFF0C\u5199\u5165\u914D\u7F6E\uFF09"," /intent [on|off] \u5207\u6362\u610F\u56FE\u5206\u6790\uFF08on\uFF1A\u6BCF\u6761\u6D88\u606F\u5148\u505A\u610F\u56FE\u5206\u6790\u518D\u5904\u7406\uFF0C\u5199\u5165\u914D\u7F6E\uFF09"," /exit \u9000\u51FA\u7384\u732A",`${t.bold}\u5FEB\u6377\u952E${t.reset}`,` Enter \u63D0\u4EA4 \xB7 ${t.bold}Alt+Enter${t.reset} \u6362\u884C\uFF08Ctrl/Shift+Enter \u89C6\u7EC8\u7AEF\u800C\u5B9A\uFF09`," \u2191/\u2193 \u5386\u53F2 \xB7 Ctrl+A/Ctrl+E \u884C\u9996/\u884C\u5C3E \xB7 PgUp/PgDn \u7FFB\u9875 \xB7 Shift+\u2191/\u2193 \u9010\u884C"," Home/End \u8DF3\u5230\u6700\u65E9/\u6700\u65B0",` ${t.gray}\u9F20\u6807${t.reset}\uFF1A\u6EDA\u8F6E\u6EDA\u52A8\u8F93\u51FA\u533A\uFF1B${t.bold}\u5728\u8F93\u51FA\u533A\u62D6\u62FD\u5373\u53EF\u9009\u4E2D\u5E76\u590D\u5236${t.reset}${t.gray}\uFF08\u677E\u5F00\u5199\u5165\u526A\u8D34\u677F\uFF09\u3002${t.reset}`,` \u60F3\u7528\u7EC8\u7AEF\u539F\u751F\u6846\u9009/\u53F3\u952E\u83DC\u5355\uFF1A${t.reset}Shift+\u62D6\u62FD${t.gray} \u7ED5\u8FC7\uFF0C\u6216 ${t.reset}/mouse${t.gray} \u4EA4\u8FD8\u9F20\u6807\uFF08\u6EDA\u52A8\u6539\u7528 PgUp/PgDn\uFF09\u3002${t.reset}`,` \u26A0 \u62D6\u9009\u662F\u77E9\u5F62\u9009\u62E9\uFF0C\u8DE8\u8FC7\u4E2D\u7F1D\u4F1A\u628A\u53E6\u4E00\u680F\u4E00\u8D77\u5E26\u8D70 \u2014\u2014\u8DE8\u680F\u5185\u5BB9\u8BF7\u6539\u7528 ${t.reset}/copy${t.gray}\uFF08\u5DE6\u680F\uFF09\u6216 ${t.reset}/copy term${t.gray}\uFF08\u53F3\u680F\uFF09\u3002${t.reset}`,` ${t.gray}\u7C98\u8D34${t.reset}\uFF1A\u652F\u6301\u591A\u884C\u6574\u6BB5\u7C98\u8D34\uFF08\u4E0D\u4F1A\u9010\u884C\u63D0\u4EA4\uFF09\uFF1B\u4E5F\u53EF\u7528 ${t.reset}/copy${t.gray} \u590D\u5236\u8F93\u51FA\u533A\u3002${t.reset}`,` ${t.bold}Ctrl+V${t.reset} ${t.gray}\u7C98\u8D34\u56FE\u7247\uFF1A\u8BFB\u53D6\u7CFB\u7EDF\u526A\u8D34\u677F\u91CC\u7684\u56FE\u7247\u4F5C\u4E3A\u9644\u4EF6\uFF08\u8F93\u5165\u6846\u663E\u793A${t.reset}[\u56FE\u7247N]${t.gray}\uFF0C\u56DE\u8F66\u53D1\u9001\uFF09\u3002${t.reset}`,` ${t.gray}\u7EC8\u7AEF\u53EA\u4F1A\u4F20\u6587\u672C\uFF0C\u56FE\u7247\u62FF\u4E0D\u5230\uFF0C\u56E0\u6B64\u7531\u7384\u732A\u4E3B\u52A8\u8BFB\u526A\u8D34\u677F\uFF1A${t.reset}`,` ${t.gray}Linux \u7F3A ${t.reset}wl-clipboard${t.gray}/${t.reset}xclip${t.gray} \u65F6\u4F1A\u8BE2\u95EE\u540E\u81EA\u52A8\u5B89\u88C5\uFF1BWindows \u7528\u5185\u7F6E PowerShell\uFF1BmacOS \u7528 ${t.reset}pngpaste${t.gray} \u6216\u5185\u7F6E osascript\u3002${t.reset}`,` ${t.gray}\u82E5\u672C\u7EC8\u7AEF\u628A Ctrl+V \u5F53\u81EA\u5DF1\u7684\u7C98\u8D34\u952E\uFF08\u5982 Windows Terminal\uFF09\uFF0C\u6539\u7528 ${t.reset}/image${t.gray}\u3002${t.reset}`,` ${t.gray}\u9700\u8981\u6A21\u578B\u652F\u6301\u89C6\u89C9\uFF08glm-4v / qwen-vl / gpt-4o / claude \u7B49\uFF09\uFF1B\u53EF\u7528 ${t.reset}xzh model vision <id> on${t.gray} \u624B\u52A8\u6807\u6CE8\u3002${t.reset}`," Shift+Tab \u5207\u6362\u7126\u70B9\uFF08\u5BF9\u8BDD \u21C4 \u53F3\u4FA7\u7EC8\u7AEF\uFF09\xB7 \u9F20\u6807\u70B9\u51FB\u4EA6\u53EF"," Ctrl+C \u4E2D\u65AD\u4EFB\u52A1 / \u6E05\u7A7A\u8F93\u5165 / \u9000\u51FA\uFF08\u7A7A\u95F2\u4E14\u8F93\u5165\u4E3A\u7A7A\u65F6\u9000\u51FA\uFF09"," Ctrl+D \u7ED3\u675F\u672C\u8F6E\u6B63\u5728\u8FDB\u884C\u7684\u5BF9\u8BDD \xB7 \u4EFB\u4F55\u60C5\u51B5\u4E0B\u90FD\u4E0D\u4F1A\u9000\u51FA\u7384\u732A"," Ctrl+L \u6E05\u5C4F",` \u6CE8\uFF1A${t.bold}Alt+Enter${t.reset} \u8D70\u7EC8\u7AEF\u539F\u751F\u7F16\u7801\uFF0C\u5404\u7EC8\u7AEF\u901A\u7528\uFF1B`," Ctrl/Shift+Enter \u9700\u8981\u7EC8\u7AEF\u652F\u6301\u6269\u5C55\u952E\u76D8\u534F\u8BAE\uFF0C\u90E8\u5206\u7EC8\u7AEF\uFF08\u5C24\u5176 IDE \u5185\u7F6E\uFF09\u4E0D\u652F\u6301\u3002",`${t.bold}\u53F3\u4FA7\u7EC8\u7AEF${t.reset}`," Enter \u6267\u884C\u547D\u4EE4 \xB7 \u2191/\u2193 \u547D\u4EE4\u5386\u53F2 \xB7 Ctrl+C / Ctrl+D \u4E2D\u65AD\u8FD0\u884C\u4E2D\u7684\u547D\u4EE4 \xB7 Ctrl+L \u6E05\u7A7A"," PgUp/PgDn / Shift+\u2191\u2193 / Home/End \u56DE\u770B\u5386\u53F2\u8F93\u51FA\uFF08\u6EDA\u52A8\u4E0D\u5F71\u54CD\u6B63\u5728\u8FD0\u884C\u7684\u547D\u4EE4\uFF09"," \u547D\u4EE4\u5728\u5F53\u524D\u9879\u76EE\u76EE\u5F55\u4E0B\u6267\u884C\uFF1Bcd \u751F\u6548\uFF08\u9762\u677F\u81EA\u884C\u7EF4\u62A4\u5DE5\u4F5C\u76EE\u5F55\uFF09"];this.lines.push(...e.map(r=>`${t.gray}${r}${t.reset}`)),this.lines.push("")}buildHeaderLines(e){let r=O(`${this.modelProviderLabel} / ${this.modelLabel}`,Math.max(10,e-8)),s=O(this.cwd,Math.max(10,e-8)),i=`${t.gray}${"\u2500".repeat(Math.max(0,e))}${t.reset}`;return{info:[`${t.brightMagenta}${t.bold} \u7384\u732A XuanZhu${t.reset} ${t.gray}v${K} \xB7 \u7EC8\u7AEF AI \u7F16\u7801 Agent${t.reset}`,`${t.gray} \u6A21\u578B\uFF1A${t.reset}${r}${t.reset}`,`${t.gray} \u76EE\u5F55\uFF1A${t.reset}${s}${t.reset}`,...this.todoHeaderLines(e),`${t.gray} \u8F93\u5165 ${t.reset}${t.brightGreen}/help${t.reset}${t.gray} \u67E5\u770B\u547D\u4EE4\u4E0E\u5FEB\u6377\u952E${t.reset}`,`${t.gray} ${t.reset}Ctrl+D${t.gray} \u7ED3\u675F\u672C\u8F6E\u5BF9\u8BDD\uFF08\u4E0D\u9000\u51FA\uFF09\xB7 ${t.reset}Ctrl+C${t.gray} \u4E2D\u65AD/\u6E05\u7A7A/\u9000\u51FA${t.reset}`,`${t.gray} ${t.reset}Shift+Tab${t.gray} \u5207\u7EC8\u7AEF \xB7 ${t.reset}PgUp${t.gray}/\u6EDA\u8F6E\u56DE\u770B\u5386\u53F2${t.reset}`],divider:i}}todoHeaderLines(e){if(this.todoItems.length===0)return[];let r=this.todoItems.filter(u=>u.status==="completed").length,s=this.todoItems.filter(u=>u.status==="cancelled").length,i=this.todoItems.length-s,o=`\u4EFB\u52A1 ${r}/${i}`+(s>0?` \xB7 \u53D6\u6D88 ${s}`:""),a=[`${t.gray} ${t.reset}${t.bold}${o}${t.reset}`],l=this.todoItems.filter(u=>u.status==="in_progress"||u.status==="pending"),c=3;for(let u of l.slice(0,c)){let h=u.status==="in_progress",d=h?`${t.brightCyan}\u25B8${t.reset}`:`${t.gray}\xB7${t.reset}`,p=O(u.content,Math.max(8,e-8));a.push(` ${d} ${h?t.bold:t.gray}${p}${t.reset}`)}return l.length>c&&a.push(`${t.gray} \u2026\u8FD8\u6709 ${l.length-c} \u9879${t.reset}`),a}scheduleRender(){this.needsRender||this.exited||(this.needsRender=!0,setTimeout(()=>{this.needsRender=!1,this.render()},16))}render(){if(this.exited||this.suspended)return;this.trimOutputLines();let e=Math.max(40,process.stdout.columns||80),r=Math.max(8,process.stdout.rows||24),s=this.resolveTermWidth(e),i=s>0?Math.max(20,e-s-1):e;this.lastLeftWidth=i;let o=this.pendingConfirm?this.layoutConfirm(i):this.layoutInput(i),a=o.lines.length,l=1,c=this.buildHeaderLines(i),u=Math.max(1,Math.floor(r/3)),h=Math.min(c.info.length,Math.max(0,u-1)),d=[...c.info.slice(0,h),c.divider],p=d.length,m=Math.max(3,r-p-a-l),f=this.physicalLines(i),y=f.length;this.lastPhysicalCount>=0&&this.scrollOffset>0&&y>this.lastPhysicalCount&&(this.scrollOffset+=y-this.lastPhysicalCount),this.lastPhysicalCount=y;let g=Math.max(0,y-m);this.scrollOffset>g&&(this.scrollOffset=g);let S=y-this.scrollOffset,$=Math.max(0,S-m),A=f.slice($,S);for(;A.length<m;)A.unshift("");let H=r-1,x=Math.max(0,m-(S-$)),P=this.lastPhysicalMap;this.screenToLogical=[];for(let b=0;b<H;b++){let k=b-p;if(k<0||k>=m){this.screenToLogical.push(void 0);continue}let G=$+k-x,E=G>=0&&G<P.length?P[G]:-1;this.screenToLogical.push(E>=0?E:void 0)}if(this.selectionAnchor!==void 0&&this.selectionHead!==void 0){let b=Math.min(this.selectionAnchor,this.selectionHead),k=Math.max(this.selectionAnchor,this.selectionHead);for(let G=0;G<A.length;G++){let E=$+G-x;if(E<0||E>=P.length)continue;let Ne=P[E];Ne>=b&&Ne<=k&&(A[G]=`${t.inverse}${A[G]}${t.reset}`)}}let z=s>0?this.buildTermPanel(s,H):{rows:[],cursorRow:0,cursorCol:0},R=p+m,w=ne.hide;for(let b=0;b<H;b++){let k;b<p?k=d[b]:b<p+m?k=A[b-p]:b<R+a?k=o.lines[b-R]:k="",w+=ne.to(b+1,1)+"\x1B[2K",s>0?w+=vt(O(k,i),i)+`${t.gray}\u2502${t.reset}`+O(z.rows[b]??"",s):w+=vt(O(k,e),e)}if(w+=ne.to(r,1)+"\x1B[2K"+this.renderStatus(e),this.pendingConfirm)w+=ne.hide;else if(this.termFocus&&s>0&&z.cursorRow>0){let b=z.cursorRow,k=Math.min(e,i+1+z.cursorCol);w+=ne.to(b,k)+ne.show}else{let b=R+o.cursorRow+1,k=Math.min(i,o.cursorCol+1);w+=ne.to(b,k)+ne.show}process.stdout.write(w)}resolveTermWidth(e){return!this.termVisible||e<80?0:Math.min(64,Math.max(32,Math.floor(e*.4)))}buildTermPanel(e,r){if(e<=0||r<=0)return{rows:[],cursorRow:0,cursorCol:0};let s=[],i=this.term.isRunning(),o=this.termFocus?`${t.bgBlue}${t.brightWhite} \u7EC8\u7AEF ${t.reset}`:`${t.gray} \u7EC8\u7AEF ${t.reset}`,a=i?`${t.brightYellow} \u25CF \u8FD0\u884C\u4E2D${t.reset}`:"",l=N(o)+N(a),c=Math.max(6,e-l);s.push(`${o}${t.gray}${O(this.term.getCwd(),c)}${t.reset}${a}`);let u=Math.max(1,r-3),h=[];for(let w of this.term.visibleLines())h.push(...yt(w,e));this.lastTermPhysicalCount>=0&&this.termScroll>0&&h.length>this.lastTermPhysicalCount&&(this.termScroll+=h.length-this.lastTermPhysicalCount),this.lastTermPhysicalCount=h.length;let d=Math.max(0,h.length-u);this.termScroll>d&&(this.termScroll=d);let p=h.length-this.termScroll,m=Math.max(0,p-u),f=h.slice(m,p);for(;f.length<u;)f.unshift("");s.push(...f),s.push(`${t.gray}${"\u2500".repeat(e)}${t.reset}`);let y=2,g=Math.max(1,e-y),S=Array.from(this.termInput),$=S.length;{let w=0;for(let b=0;b<S.length;b++){if(w>=this.termInputCursor){$=b;break}w+=S[b].length}}let A=0;for(;A<$&&N(S.slice(A,$).join(""))>g;)A++;let H=S.slice(A).join(""),x=N(S.slice(A,$).join("")),P=this.termFocus?`${t.brightCyan}\u276F${t.reset} `:`${t.gray}\u276F${t.reset} `;s.push(O(`${P}${H}`,e));let z=s.length,R=Math.min(e,y+x+1);for(;s.length<r;)s.push("");return{rows:s.slice(0,r),cursorRow:z,cursorCol:R}}physicalLines(e){let r=[],s=[];for(let i=0;i<this.lines.length;i++){let o=yt(this.lines[i],e);r.push(...o);for(let a=0;a<o.length;a++)s.push(i)}if(this.streamingPreview){let i=yt(this.streamingPreview,e);r.push(...i);for(let o=0;o<i.length;o++)s.push(-1)}return this.lastPhysicalMap=s,r}renderStatus(e){let r=" \u7384\u732A ",s=this.autoApprove?"\u26A1auto \xB7 ":"",i=this.intentEnabled?"\u2301intent \xB7 ":"",o=this.termVisible?this.termFocus?"\u7EC8\u7AEF\u25B8 ":"\u5BF9\u8BDD\u25B8 ":"",a=this.scrollOffset>0?`${t.brightYellow}\u2191${this.scrollOffset}${t.reset}${t.bgBlue} `:"",l=this.termScroll>0?`${t.brightYellow}\u21E1${this.termScroll}${t.reset}${t.bgBlue} `:"",c=this.selectionAnchor!==void 0&&this.selectionHead!==void 0?`${t.brightYellow}\u5DF2\u9009 ${Math.abs(this.selectionHead-this.selectionAnchor)+1} \u884C${this.dragging?"\uFF08\u677E\u5F00\u590D\u5236\uFF09":"\uFF08\u5DF2\u590D\u5236\uFF09"}${t.reset}${t.bgBlue} `:"",u=` ${s}${i}${o}${c}${a}${l}${this.modelLabel} \u2502 ${this.statusText}${this.statusDetail?" \xB7 "+this.statusDetail:""} `,h=` ${this.cwd} `,d=this.busy?`${t.brightYellow}\u25CF \u8FD0\u884C\u4E2D${t.reset}${t.bgBlue}`:"",p=N(r)+N(u)+N(d)+6,m=`${t.bgBlue}${t.brightWhite}${r}${t.reset}${t.bgBlue}${t.brightWhite}${d}${t.bgBlue}${t.gray}${O(h,Math.max(0,e-p))}${t.bgBlue}${t.brightWhite}${u}${t.reset}`,f=N(m);return f<e?m+=`${t.bgBlue}${" ".repeat(e-f)}${t.reset}`:f>e&&(m=`${O(m,e)}${t.reset}`),m}layoutInput(e){let i=Math.max(1,Math.floor((process.stdout.rows||24)/2)-1),o=Array.from(this.input),a=0;{let p=0;a=o.length;for(let m=0;m<o.length;m++){if(p>=this.inputCursor){a=m;break}p+=o[m].length}}let l=[],c="\u276F ",u=N("\u276F "),h=0,d=u;for(let p=0;p<o.length;p++){let m=o[p];if(m===`
|
|
568
|
-
`){l.push(c),c=" ",u=N(" "),
|
|
569
|
-
`).slice(0,12);for(let u of a)for(let
|
|
570
|
-
`:"\r";case 9:return
|
|
572
|
+
\xB7 \u6216\u8005\u5207\u6362\u5230 glm-4v / qwen-vl / gpt-4o / claude \u7B49\u652F\u6301\u89C6\u89C9\u7684\u6A21\u578B`);return}let n=++this.imageSeq;this.pendingImages.set(n,{mimeType:e.mimeType,data:e.base64}),this.insertText(`[\u56FE\u7247${n}]`),this.handleNotice(`\u5DF2\u9644\u52A0\u56FE\u7247${n}\uFF08${Dr(e.bytes)}\uFF0C${e.mimeType}\uFF09\uFF1B\u56DE\u8F66\u53D1\u9001\uFF0C\u9000\u683C\u5220\u6389\u5360\u4F4D\u5373\u53EF\u79FB\u9664\u3002`)}takePendingImages(e){let n=[],s=e.replace(/\[图片(\d+)\]/g,(i,o)=>{let a=this.pendingImages.get(Number(o));return a&&n.push(a),""}).replace(/[ \t]{2,}/g," ").trim();return this.pendingImages.clear(),{text:s,images:n}}absorbImagePaths(e){if(!/\.(png|jpe?g|gif|webp)\b/i.test(e))return{text:e,images:[]};let n=[],s=[];for(let i of e.split(`
|
|
573
|
+
`)){let o=pc(i),a=o?hc(o,this.cwd):null;a?n.push(a):s.push(i)}return{text:s.join(`
|
|
574
|
+
`).trim(),images:n}}currentModelSupportsVision(){let e=this.agent.getActiveModel();return e?Be(e):!1}backspace(){if(this.inputCursor<=0)return;let e=this.inputCursor-1,n=this.input.charCodeAt(e);n>=56320&&n<=57343&&e>0&&(e-=1),this.input=this.input.slice(0,e)+this.input.slice(this.inputCursor),this.inputCursor=e,this.scheduleRender()}moveCursor(e){let n=this.inputCursor+e;if(n=Math.max(0,Math.min(this.input.length,n)),e>0&&n>0&&n<this.input.length){let s=this.input.charCodeAt(n-1);s>=55296&&s<=56319&&(n+=1)}else if(e<0&&n<this.input.length){let s=this.input.charCodeAt(n);s>=56320&&s<=57343&&(n-=1)}this.inputCursor=Math.max(0,Math.min(this.input.length,n)),this.scheduleRender()}navigateHistory(e){this.history.length!==0&&(this.historyIndex===-1&&(this.historyIndex=this.history.length),this.historyIndex+=e,this.historyIndex<0&&(this.historyIndex=0),this.historyIndex>=this.history.length?(this.historyIndex=-1,this.input="",this.inputCursor=0):(this.input=this.history[this.historyIndex],this.inputCursor=this.input.length),this.scheduleRender())}scrollBy(e){this.setScrollOffset(this.scrollOffset+e)}setScrollOffset(e){this.scrollOffset=Math.max(0,Math.round(e)),this.scheduleRender()}scrollToTop(){this.setScrollOffset(Number.MAX_SAFE_INTEGER)}scrollToBottom(){this.setScrollOffset(0)}scrollTermBy(e){this.termScroll=Math.max(0,Math.round(this.termScroll+e)),this.scheduleRender()}scrollTermToTop(){this.termScroll=Number.MAX_SAFE_INTEGER,this.scheduleRender()}scrollTermToBottom(){this.termScroll=0,this.scheduleRender()}async submit(){if(this.busy)return;let e=this.input.trim();if(!e)return;if(this.input="",this.inputCursor=0,this.scrollOffset=0,this.historyIndex=-1,e.startsWith("/")){this.history.push(e),this.pendingImages.clear(),this.handleCommand(e);return}let{text:n,images:s}=this.takePendingImages(e),i=this.absorbImagePaths(n);if(i.images.length>0&&(n=i.text,s=[...s,...i.images]),s.length>0&&!this.currentModelSupportsVision()&&(this.lines.push(`${t.yellow}\u26A0 \u5F53\u524D\u6A21\u578B ${this.modelLabel} \u672A\u6807\u6CE8\u652F\u6301\u56FE\u7247\u8F93\u5165\uFF0C\u5DF2\u5FFD\u7565 ${s.length} \u5F20\u56FE\u7247\u3002${t.reset}`),this.lines.push(`${t.gray} \xB7 \u82E5\u8BE5\u6A21\u578B\u786E\u5B9E\u652F\u6301\u89C6\u89C9\uFF1Axzh model vision <id> on${t.reset}`),this.lines.push(`${t.gray} \xB7 \u6216\u6539\u7528 glm-4v / qwen-vl / gpt-4o / claude \u7B49\u652F\u6301\u89C6\u89C9\u7684\u6A21\u578B${t.reset}`),s=[]),!n&&s.length===0){this.lines.push(`${t.gray}\uFF08\u6CA1\u6709\u53EF\u53D1\u9001\u7684\u5185\u5BB9\uFF09${t.reset}`),this.scheduleRender();return}this.history.push(n||`${s.length} \u5F20\u56FE\u7247`),this.lastAnswerStart=this.lines.length;let o=`${t.bgGreen}${t.black}${t.bold} \u276F ${t.reset}`,a=s.length>0?`${n}${n?`
|
|
575
|
+
`:""}[\u56FE\u7247 \xD7 ${s.length}]`:n,[l,...c]=a.split(`
|
|
576
|
+
`);this.lines.push(`${o} ${t.brightGreen}${t.bold}${l}${t.reset}`);for(let p of c)this.lines.push(`${t.brightGreen}${t.bold}\u2502${t.reset} ${t.brightGreen}${p}${t.reset}`);this.lines.push(""),this.busy=!0,this.statusText="\u601D\u8003\u4E2D",this.statusDetail="",this.abortController=new AbortController,this.scheduleRender();let u={label:this.modelLabel};try{await this.agent.run(n,this.abortController.signal,s.length>0?s:void 0)}catch(p){let[d,...h]=ne(p).split(`
|
|
577
|
+
`);this.lines.push(`${t.red}\u2717 ${d}${t.reset}`);for(let m of h)this.lines.push(`${t.gray} ${m}${t.reset}`);this.lines.push(`${t.gray} \u672C\u6B21\u8BF7\u6C42\u4F7F\u7528\u7684\u6A21\u578B\uFF1A${this.modelProviderLabel} / ${u.label}${t.reset}`)}finally{let p=this.markdown.flush();p.length>0&&this.lines.push(...p),this.streamingPreview="",this.lines.push(""),this.busy=!1,this.abortController=void 0,this.statusText="\u5C31\u7EEA",this.scheduleRender()}}handleCommand(e){let[n,...s]=e.slice(1).split(/\s+/),i=s.join(" ");switch(n){case"help":case"h":this.printHelp();break;case"clear":this.lines=[];break;case"tools":this.printTools();break;case"device":this.handleDeviceCommand(i);break;case"copy":this.copyOutput(i);break;case"image":case"img":case"paste":this.pasteFromClipboard();break;case"mouse":this.toggleMouseCapture();break;case"reset":this.agent.reset(),this.currentSessionFile=xt(this.cwd,K),this.agent.restoreSession([],this.currentSessionFile),this.lines.push(`${t.gray}\u4F1A\u8BDD\u5DF2\u91CD\u7F6E\u3002${t.reset}`);break;case"undo":this.lines.push(ci(this.cwd));break;case"resume":this.handleResumeCommand(i);break;case"exit":case"quit":case"q":this.shutdown();return;case"cwd":this.lines.push(`${t.gray}${this.cwd}${t.reset}`);break;case"switch":{i?this.switchDirectory(i):(this.lines.push(`${t.gray}\u5F53\u524D\u76EE\u5F55\uFF1A${this.cwd}${t.reset}`),this.lines.push(`${t.gray}\u7528\u6CD5\uFF1A/switch <\u76EE\u5F55\u8DEF\u5F84>${t.reset}`));break}case"term":{i==="clear"?this.term.clear():i==="focus"?(this.termVisible=!0,this.termFocus=!0):(this.termVisible=!this.termVisible,this.termVisible||(this.termFocus=!1),this.lines.push(`${t.gray}\u7EC8\u7AEF\u9762\u677F\uFF1A${this.termVisible?"\u663E\u793A":"\u9690\u85CF"}\uFF08Shift+Tab \u6216\u9F20\u6807\u70B9\u51FB\u5207\u6362\u7126\u70B9\uFF09${t.reset}`));break}case"auto":{let o=i==="on"?!0:i==="off"?!1:!this.autoApprove;this.autoApprove=o,this.options.config.autoApprove=o;try{W(this.options.config)}catch(a){this.lines.push(`${t.yellow}\u26A0 \u914D\u7F6E\u4FDD\u5B58\u5931\u8D25\uFF1A${a instanceof Error?a.message:String(a)}${t.reset}`)}this.lines.push(o?`${t.gray}\u81EA\u52A8\u6279\u51C6\uFF1A${t.brightYellow}\u5F00${t.reset}${t.gray} \u2014\u2014 \u6240\u6709\u5DE5\u5177\uFF08\u542B\u5199\u6587\u4EF6\u3001\u6267\u884C\u547D\u4EE4\uFF09\u5C06\u76F4\u63A5\u6267\u884C\uFF0C\u4E0D\u518D\u8BE2\u95EE\uFF1B\u5DF2\u5199\u5165\u914D\u7F6E\u3002${t.reset}`:`${t.gray}\u81EA\u52A8\u6279\u51C6\uFF1A\u5173 \u2014\u2014 \u5199\u6587\u4EF6 / \u7F16\u8F91\u6587\u4EF6 / \u6267\u884C\u547D\u4EE4\u524D\u4F1A\u8BF7\u6C42\u786E\u8BA4\uFF1B\u5DF2\u5199\u5165\u914D\u7F6E\u3002${t.reset}`);break}case"intent":{let o=i==="on"?!0:i==="off"?!1:!this.intentEnabled;this.intentEnabled=o,this.options.config.intent={...this.options.config.intent??{enabled:!1},enabled:o};try{W(this.options.config)}catch(a){this.lines.push(`${t.yellow}\u26A0 \u914D\u7F6E\u4FDD\u5B58\u5931\u8D25\uFF1A${a instanceof Error?a.message:String(a)}${t.reset}`)}this.lines.push(o?`${t.gray}\u610F\u56FE\u5206\u6790\uFF1A${t.brightGreen}\u5F00${t.reset}${t.gray} \u2014\u2014 \u6BCF\u6761\u6D88\u606F\u4F1A\u5148\u7528\u6A21\u677F\u5305\u88F9\u5E76\u8BF7\u6C42\u6A21\u578B\uFF0C\u8FD4\u56DE\u7684\u5206\u6790\u7ED3\u679C\u4F5C\u4E3A\u672C\u6B21\u8F93\u5165\uFF1B\u5DF2\u5199\u5165\u914D\u7F6E\u3002${t.reset}`:`${t.gray}\u610F\u56FE\u5206\u6790\uFF1A\u5173 \u2014\u2014 \u76F4\u63A5\u4F7F\u7528\u4F60\u8F93\u5165\u7684\u5185\u5BB9\uFF1B\u5DF2\u5199\u5165\u914D\u7F6E\u3002${t.reset}`);break}case"model":this.handleModelCommand(i);break;default:this.lines.push(`${t.yellow}\u672A\u77E5\u547D\u4EE4\uFF1A/${n}\uFF0C\u8F93\u5165 /help \u67E5\u770B\u5E2E\u52A9\u3002${t.reset}`)}this.scheduleRender()}handleResumeCommand(e){let n=dr(this.cwd).filter(l=>l.file!==this.currentSessionFile);if(n.length===0){this.lines.push(`${t.gray}\u6CA1\u6709\u53EF\u6062\u590D\u7684\u5386\u53F2\u4F1A\u8BDD\u3002${t.reset}`);return}if(!e){this.lines.push(`${t.bold}\u5386\u53F2\u4F1A\u8BDD${t.reset} ${t.gray}(\u65B0\u7684\u5728\u524D\uFF0C\u8F93\u5165 /resume <\u7F16\u53F7> \u6062\u590D)${t.reset}`),n.slice(0,10).forEach((l,c)=>{let u=l.startedAt??"\u672A\u77E5\u65F6\u95F4";this.lines.push(` ${c+1}. ${t.cyan}${u}${t.reset} ${t.gray}\xB7 ${t.reset}${(l.bytes/1024).toFixed(1)} KB`)});return}let s=Number.parseInt(e,10)-1,i=Number.isInteger(s)?n[s]:void 0;if(!i){this.lines.push(`${t.yellow}\u65E0\u6548\u7F16\u53F7\uFF1A${e}\u3002\u5148\u8FD0\u884C /resume \u67E5\u770B\u5217\u8868\u3002${t.reset}`);return}let o=pr(i.file);if(o.length===0){this.lines.push(`${t.yellow}\u8BE5\u4F1A\u8BDD\u6587\u4EF6\u91CC\u6CA1\u6709\u53EF\u6062\u590D\u7684\u6D88\u606F\u3002${t.reset}`);return}let a=xt(this.cwd,K);this.currentSessionFile=a,this.agent.restoreSession(o,a),this.lines.push(`${t.green}\u2713 \u5DF2\u6062\u590D ${o.length} \u6761\u6D88\u606F\u7684\u5BF9\u8BDD\u5386\u53F2\u3002${t.reset}`,`${t.gray}\u7EE7\u7EED\u5BF9\u8BDD\u5373\u53EF\uFF1B\u6B64\u540E\u5185\u5BB9\u4F1A\u5199\u5165\u65B0\u7684\u4F1A\u8BDD\u6587\u4EF6\u3002${t.reset}`)}switchDirectory(e){let n=q(e.trim()),s=Le.isAbsolute(n)?n:Le.resolve(this.cwd,n);if(!pe.existsSync(s)){this.lines.push(`${t.red}\u2717 \u76EE\u5F55\u4E0D\u5B58\u5728\uFF1A${s}${t.reset}`),this.scheduleRender();return}if(!pe.statSync(s).isDirectory()){this.lines.push(`${t.red}\u2717 \u4E0D\u662F\u76EE\u5F55\uFF1A${s}${t.reset}`),this.scheduleRender();return}let i=s;try{i=pe.realpathSync(s)}catch{}this.cwd=i;let o=Cn(i);this.agent.setCwd(i),this.term.setCwd(i),this.termScroll=0,this.lines.push(`${t.green}\u2713 \u5DF2\u5207\u6362\u9879\u76EE\u76EE\u5F55\uFF1A${i}${t.reset}`),o.created&&this.lines.push(`${t.gray} \u5DF2\u521D\u59CB\u5316\u9879\u76EE\u76EE\u5F55 ${o.paths.dir}\uFF08memory/ \u8BB0\u5FC6 \xB7 rules.md \u89C4\u5219\uFF09${t.reset}`);let a=dr(i).filter(u=>u.file!==this.currentSessionFile)[0],l=a?pr(a.file):[],c=xt(i,K);this.currentSessionFile=c,this.agent.restoreSession(l,c),l.length>0?this.lines.push(`${t.gray} \u5DF2\u8F7D\u5165\u8BE5\u9879\u76EE\u4E0A\u6B21\u4F1A\u8BDD\uFF08${l.length} \u6761\u6D88\u606F\uFF0C${a.startedAt??"\u672A\u77E5\u65F6\u95F4"}\uFF09\uFF0C\u63A5\u7740\u804A\u5373\u53EF\uFF1B\u539F\u5BF9\u8BDD\u5DF2\u5B58\u6863\uFF0C\u5207\u56DE\u540E /resume \u53EF\u627E\u56DE\u3002${t.reset}`):this.lines.push(`${t.gray} \u8BE5\u9879\u76EE\u8FD8\u6CA1\u6709\u5386\u53F2\u4F1A\u8BDD\uFF0C\u5168\u65B0\u5F00\u5C40\uFF1B\u540E\u7EED\u6587\u4EF6\u4E0E\u547D\u4EE4\u64CD\u4F5C\u5C06\u57FA\u4E8E\u8BE5\u76EE\u5F55\u3002${t.reset}`),this.scheduleRender()}toggleMouseCapture(){this.mouseCapture=!this.mouseCapture,this.options.config.mouseCapture=this.mouseCapture;try{W(this.options.config)}catch{}process.stdout.write(this.mouseCapture?"\x1B[?1000h\x1B[?1002h\x1B[?1006h":"\x1B[?1000l\x1B[?1002l\x1B[?1006l"),this.lines.push(this.mouseCapture?`${t.gray}\u9F20\u6807\u6355\u83B7\uFF1A${t.reset}\u5F00 ${t.gray}\u2014 \u6EDA\u8F6E\u53EF\u6EDA\u52A8\u8F93\u51FA\u533A\u3002\u4F46\u53F3\u952E\u83DC\u5355\u4E0E\u539F\u751F\u6846\u9009\u4F1A\u88AB\u63A5\u7BA1\uFF0C\u8981\u9009\u6587\u672C\u8BF7\u6309\u4F4F ${t.reset}Shift${t.gray} \u62D6\u62FD\u3002\u518D\u8F93\u5165 ${t.reset}/mouse${t.gray} \u5173\u95ED\u3002${t.reset}`:`${t.gray}\u9F20\u6807\u6355\u83B7\uFF1A${t.reset}${t.brightGreen}\u5173${t.reset}${t.gray} \u2014 \u9F20\u6807\u5168\u90E8\u529F\u80FD\u53EF\u7528\uFF08\u53F3\u952E\u83DC\u5355\u3001\u6846\u9009\u590D\u5236\u3001\u6EDA\u8F6E\u7531\u7EC8\u7AEF\u5904\u7406\uFF09\u3002\u6EDA\u52A8\u8F93\u51FA\u533A\u8BF7\u7528 ${t.reset}PgUp/PgDn${t.gray}\uFF0C\u6216\u7528 ${t.reset}/mouse${t.gray} \u6362\u56DE\u6EDA\u8F6E\u3002${t.reset}`)}copyOutput(e){let n=e.trim().toLowerCase(),s=this.lines,i="";(n==="term"||n.startsWith("term "))&&(s=this.term.visibleLines(),i="\u7EC8\u7AEF\u8F93\u51FA ",n=n.slice(4).trim());let o=s.length,a,l;if(n==="all")a=s.slice(),l="\u5168\u90E8";else if(n==="last")a=s===this.lines?this.lines.slice(Math.min(this.lastAnswerStart,o)):s.slice(-30),l=s===this.lines?"\u6700\u8FD1\u4E00\u6B21\u5BF9\u8BDD":"\u6700\u8FD1 30 \u884C";else if(/^\d+-\d+$/.test(n)){let[d,h]=n.split("-"),m=Math.max(1,Number(d)),f=Math.min(o,Number(h));if(m>f){this.lines.push(`${t.yellow}\u884C\u53F7\u8303\u56F4\u65E0\u6548\uFF1A${n}${t.reset}${t.gray}\uFF08${i||"\u8F93\u51FA\u533A"}\u5F53\u524D ${o} \u884C\uFF09${t.reset}`);return}a=s.slice(m-1,f),l=`\u7B2C ${m}-${f} \u884C`}else{let d=/^\d+$/.test(n)?Number(n):30;a=s.slice(-Math.max(1,d)),l=`\u6700\u8FD1 ${Math.min(Math.max(1,d),o)} \u884C`}l=i+l;let c=ge(a.join(`
|
|
578
|
+
`)).trim();if(!c){let d=n==="last"&&o===0&&s===this.lines?"\uFF0C\u5C1A\u672A\u8FDB\u884C\u8FC7\u5BF9\u8BDD":"";this.lines.push(`${t.yellow}\u6CA1\u6709\u53EF\u590D\u5236\u7684\u5185\u5BB9${t.reset}${t.gray}\uFF08\u8F93\u51FA\u533A\u5F53\u524D ${o} \u884C${d}\uFF09\u3002${t.reset}`);return}let u=Buffer.from(c,"utf8").toString("base64");process.stdout.write(`\x1B]52;c;${u}\x07`);let p=c.split(`
|
|
579
|
+
`).length;this.lines.push(`${t.green}\u2713 \u5DF2\u590D\u5236${l}\uFF08${p} \u884C\uFF09\u5230\u526A\u8D34\u677F${t.reset}${t.gray}\uFF08OSC 52\uFF09\u3002\u82E5\u7C98\u8D34\u51FA\u6765\u662F\u7A7A\u7684\uFF0C\u8BF4\u660E\u672C\u7EC8\u7AEF\u7981\u7528\u4E86\u8BE5\u5E8F\u5217\uFF0C\u8BF7\u6539\u7528 ${t.reset}Shift${t.gray}+\u9F20\u6807\u62D6\u62FD\u9009\u62E9\u3002${t.reset}`)}createDeviceBridge(e){return new ze({port:e,baseDir:this.cwd,onStatus:n=>this.term.notice(`${t.gray}${n}${t.reset}`),onDeviceAttach:n=>{let s=n.kind==="autojs6"?"AutoJs6":"AutoX.js";this.handleNotice(`\u8BBE\u5907\u5DF2\u8FDE\u63A5\uFF1A${n.name}\uFF08${s}\uFF09`),this.term.notice(`${t.brightGreen}\u25CF${t.reset} \u8BBE\u5907\u5DF2\u8FDE\u63A5\uFF1A${t.bold}${n.name}${t.reset}${t.gray}\uFF08${s}\uFF09${t.reset}`)},onDeviceDetach:n=>{this.handleNotice(`\u8BBE\u5907\u5DF2\u65AD\u5F00\uFF1A${n.name}`),this.term.notice(`${t.yellow}\u25CB${t.reset} \u8BBE\u5907\u5DF2\u65AD\u5F00\uFF1A${n.name}`)},onLog:n=>this.term.notice(`${t.gray}[${n.device}]${t.reset} ${ge(n.text)}`)})}pushDeviceSetupGuide(e){let n=Jt(),s=Ht({where:rt()?"phone":"pc",abi:n.abi,address:e,localApk:Kt(n.abi)});this.lines.push(`${t.yellow}\u9700\u8981\u5148\u88C5 AutoJs6${t.reset}${t.gray}\uFF08${n.detail}\uFF09${t.reset}`);for(let i of s.split(`
|
|
580
|
+
`))i&&this.lines.push(`${t.gray} ${i}${t.reset}`)}async handleDeviceCommand(e){let[n,...s]=e.trim().split(/\s+/),i=s.join(" ").trim(),o=this.deviceBridge;switch(n){case"":case"status":{if(!o?.isRunning()&&!o?.status().autojs6){this.lines.push(`${t.yellow}\u8BBE\u5907\u6865\u672A\u542F\u52A8${t.reset}`),this.lines.push(`${t.gray} \xB7 \u8FDE\u63A5 AutoJs6\uFF08\u63A8\u8350\uFF09\uFF1A/device connect <\u624B\u673AIP>\uFF08\u624B\u673A\u672C\u673A\u8FD0\u884C\u65F6\u4E0D\u7528\u586B\uFF09${t.reset}`),this.lines.push(`${t.gray} \xB7 \u6216\u7B49 AutoX.js \u8FDE\u8FC7\u6765\uFF1A/device serve${t.reset}`);break}let a=o.status();this.lines.push(`${t.brightGreen}\u25CF${t.reset} \u8BBE\u5907\u6865\u8FD0\u884C\u4E2D ${t.gray}\u7AEF\u53E3 ${a.port}${t.reset}`),a.autojs6&&this.lines.push(`${t.gray} AutoJs6\uFF1A${t.reset}${a.autojs6.address} `+(a.autojs6.connected?`${t.brightGreen}\u5DF2\u8FDE\u63A5${t.reset}`:`${t.yellow}\u8FDE\u63A5\u4E2D/\u7B49\u5F85\u91CD\u8BD5${t.reset}`));for(let l of a.urls)this.lines.push(`${t.gray} \u624B\u673A\u7AEF AutoX.js \u586B\u5199\uFF1A${t.reset}${l}`);this.lines.push(`${t.gray} \u5DF2\u8FDE\u63A5\u8BBE\u5907\uFF1A${t.reset}${a.devices.length}`);for(let l of a.devices){let c=l.kind==="autojs6"?"AutoJs6":"AutoX.js";this.lines.push(` ${t.cyan}${l.name}${t.reset} ${t.gray}${l.id} \xB7 ${c}${t.reset}`)}break}case"connect":{if(o?.isRunning()||o?.status().autojs6){this.lines.push(`${t.yellow}\u8BBE\u5907\u6865\u5DF2\u5728\u8FD0\u884C${t.reset}${t.gray}\uFF08\u5148 /device stop \u518D\u8FDE\uFF09${t.reset}`);break}let a=rt(),l="",c=X;if(i){let d=/^(.*?)(?::(\d+))?$/.exec(i);l=(d?.[1]??i).trim();let h=d?.[2]?Number.parseInt(d[2],10):NaN;Number.isFinite(h)&&(c=h)}else a&&(l="127.0.0.1");if(!l){this.lines.push(`${t.gray}\u7528\u6CD5\uFF1A/device connect <\u624B\u673AIP>[:\u7AEF\u53E3]\uFF08\u9ED8\u8BA4 ${X}\uFF09${t.reset}`),this.pushDeviceSetupGuide();break}let u=this.createDeviceBridge(Ie());try{await u.connectAutoJs6(l,c)}catch(d){this.lines.push(`${t.red}\u2717 \u8BBE\u5907\u6865\u542F\u52A8\u5931\u8D25\uFF1A${d instanceof Error?d.message:String(d)}${t.reset}`);break}this.deviceBridge=u,this.agent.setDeviceBridge(u),this.termVisible||(this.termVisible=!0),this.lines.push(`${t.brightGreen}\u25CF${t.reset} \u6B63\u5728\u8FDE\u63A5\u624B\u673A ${t.brightGreen}${l}:${c}${t.reset}${t.gray}\uFF08AutoJs6 \u670D\u52A1\u5668\u6A21\u5F0F\uFF09${t.reset}`);let p=!1;for(let d=0;d<20&&!p;d++)p=u.status().autojs6?.connected??!1,p||await new Promise(h=>setTimeout(h,150));if(p)this.lines.push(`${t.gray} \u5DF2\u8FDE\u63A5\u3002\u63A8\u9001\u811A\u672C\uFF1A/device run <\u6587\u4EF6>\uFF1B\u65E5\u5FD7\u663E\u793A\u5728\u53F3\u4FA7\u7EC8\u7AEF\u9762\u677F\u3002${t.reset}`);else{let d=u.status().autojs6?.retrying??!1;this.lines.push(d?`${t.yellow}\u6682\u65F6\u6CA1\u8FDE\u4E0A\uFF0C\u4ECD\u5728\u540E\u53F0\u6309\u9000\u907F\u91CD\u8BD5${t.reset}${t.gray}\uFF08/device stop \u53EF\u505C\u6B62\uFF09${t.reset}`:`${t.red}\u8FDE\u4E0D\u4E0A\u624B\u673A\uFF08\u5DF2\u505C\u6B62\u91CD\u8BD5\uFF09${t.reset}${t.gray} \u2014\u2014 \u6309\u4E0B\u9762\u6B65\u9AA4\u68C0\u67E5\u540E\uFF0C\u5148 /device stop \u518D\u91CD\u65B0 /device connect${t.reset}`),this.pushDeviceSetupGuide(`${l}:${c}`)}break}case"serve":case"start":{if(o?.isRunning()){this.lines.push(`${t.yellow}\u8BBE\u5907\u6865\u5DF2\u5728\u8FD0\u884C${t.reset}${t.gray}\uFF08\u7AEF\u53E3 ${o.getPort()}\uFF09${t.reset}`);break}let a=i?Number.parseInt(i,10):Ie(),l=this.createDeviceBridge(Number.isFinite(a)&&a>0?a:Ie());try{await l.start()}catch(c){this.lines.push(`${t.red}\u2717 \u8BBE\u5907\u6865\u542F\u52A8\u5931\u8D25\uFF1A${c instanceof Error?c.message:String(c)}${t.reset}`);break}this.deviceBridge=l,this.agent.setDeviceBridge(l),this.termVisible||(this.termVisible=!0),this.lines.push(`${t.brightGreen}\u25CF${t.reset} \u8BBE\u5907\u6865\u5DF2\u542F\u52A8 ${t.gray}\uFF08\u7AEF\u53E3 ${l.getPort()}\uFF09${t.reset}`);for(let c of l.urls())this.lines.push(`${t.gray} \u624B\u673A\u7AEF AutoX.js \u586B\u5199\uFF1A${t.reset}${t.brightGreen}${c}${t.reset}`);try{await l.startAutoJs6Listener(),this.lines.push(`${t.brightGreen}\u25CF${t.reset} AutoJs6 \u76D1\u542C\u5DF2\u5C31\u7EEA ${t.gray}\uFF08\u7AEF\u53E3 ${fe}\uFF09${t.reset}`);for(let c of l.listenerUrls())this.lines.push(`${t.gray} \u624B\u673A AutoJs6\u300C\u5BA2\u6237\u7AEF\u6A21\u5F0F\u300D\u586B\uFF1A${t.reset}${t.brightGreen}${c}${t.reset}`)}catch(c){this.lines.push(`${t.yellow}\u26A0 AutoJs6 \u76D1\u542C\u672A\u542F\u52A8${t.reset}${t.gray}\uFF1A${c instanceof Error?c.message:String(c)}${t.reset}`)}this.lines.push(`${t.gray} \u811A\u672C\u65E5\u5FD7\u663E\u793A\u5728\u53F3\u4FA7\u7EC8\u7AEF\u9762\u677F\uFF1B\u63A8\u9001\u811A\u672C\uFF1A/device run <\u6587\u4EF6>\uFF08\u6216 /device push\uFF09\u3002${t.reset}`),this.lines.push(`${t.gray} \u505C\u6B62\uFF1A/device stop${t.reset}`);break}case"stop":{if(!o?.isRunning()){this.lines.push(`${t.gray}\u8BBE\u5907\u6865\u672A\u5728\u8FD0\u884C\u3002${t.reset}`);break}await o.stop(),this.deviceBridge=void 0,this.agent.setDeviceBridge(void 0),this.lines.push(`${t.gray}\u8BBE\u5907\u6865\u5DF2\u505C\u6B62\u3002${t.reset}`);break}case"list":case"devices":{if(!o?.isRunning()){this.lines.push(`${t.yellow}\u8BBE\u5907\u6865\u672A\u542F\u52A8${t.reset}${t.gray}\uFF08/device serve\uFF09${t.reset}`);break}let a=o.listDevices();if(a.length===0){this.lines.push(`${t.gray}\u5F53\u524D\u6CA1\u6709\u5DF2\u8FDE\u63A5\u7684\u8BBE\u5907\u3002${t.reset}`);break}this.lines.push(`${t.gray}\u5DF2\u8FDE\u63A5\u8BBE\u5907\uFF08${a.length}\uFF09\uFF1A${t.reset}`);for(let l of a)this.lines.push(` ${t.cyan}${l.name}${t.reset} ${t.gray}${l.id} \xB7 versionCode ${l.appVersionCode}${t.reset}`);break}case"push":case"run":{if(!i){this.lines.push(`${t.gray}\u7528\u6CD5\uFF1A/device ${n} <\u811A\u672C\u6587\u4EF6>${t.reset}`);break}if(!o?.isRunning()){this.lines.push(`${t.yellow}\u8BBE\u5907\u6865\u672A\u542F\u52A8${t.reset}${t.gray}\uFF08/device serve\uFF09${t.reset}`);break}let a=n==="run"?o.runScript(i):o.pushScript(i);if(!a.ok){this.lines.push(`${t.red}\u2717 ${a.message}${t.reset}`);break}this.lines.push(`${t.green}\u2713${t.reset} ${n==="run"?"\u5DF2\u63A8\u9001\u5230\u8BBE\u5907\u5E76\u5F00\u59CB\u8FD0\u884C":"\u5DF2\u4FDD\u5B58\u5230\u8BBE\u5907"}\uFF1A${a.path}
|
|
581
|
+
${t.gray} \u76EE\u6807\u8BBE\u5907\uFF08${a.delivered}\uFF09\uFF1A${a.devices.join("\u3001")}${t.reset}`);break}case"logs":{if(!o?.isRunning()){this.lines.push(`${t.yellow}\u8BBE\u5907\u6865\u672A\u542F\u52A8${t.reset}${t.gray}\uFF08/device serve\uFF09${t.reset}`);break}let a=Number.parseInt(i,10),l=o.recentLogs(Number.isFinite(a)&&a>0?a:30);if(l.length===0){this.lines.push(`${t.gray}\u6682\u65E0\u8BBE\u5907\u65E5\u5FD7\u3002${t.reset}`);break}this.lines.push(`${t.gray}\u6700\u8FD1 ${l.length} \u6761\u8BBE\u5907\u65E5\u5FD7\uFF1A${t.reset}`);for(let c of l)this.lines.push(`${t.gray}[${c.device}]${t.reset} ${ge(c.text)}`);break}default:this.lines.push(`${t.gray}\u7528\u6CD5\uFF1A/device [connect <\u624B\u673AIP>|serve|stop|list|push <\u6587\u4EF6>|run <\u6587\u4EF6>|logs]${t.reset}`);break}this.scheduleRender()}printTools(){let e=on();this.lines.push(`${t.bold}\u53D1\u7ED9\u6A21\u578B\u7684\u5DE5\u5177\uFF08\u5171 ${e.length} \u4E2A\uFF09${t.reset}${t.gray}\uFF08\u6BCF\u6B21\u8BF7\u6C42\u90FD\u4F1A\u5E26\u4E0A\uFF0C\u65E0\u5F00\u5173\uFF09${t.reset}`);for(let n of e){let s=n.description.split(`
|
|
582
|
+
`)[0].replace(/\*\*/g,"");this.lines.push(` ${t.cyan}${n.name.padEnd(16)}${t.reset} ${t.gray}${O(s,60)}${t.reset}`)}this.lines.push(`${t.gray} \u662F\u5426\u88AB\u8C03\u7528\u7531\u6A21\u578B\u51B3\u5B9A\uFF1B\u60F3\u5F3A\u8C03\u67D0\u4E2A\u5DE5\u5177\uFF0C\u53EF\u5199\u8FDB\u9879\u76EE\u89C4\u5219\uFF08.xuanzhu/rules.md\uFF09\u3002${t.reset}`),this.scheduleRender()}printHelp(){let e=[`${t.bold}\u7384\u732A \u5185\u7F6E\u547D\u4EE4${t.reset}`," /help \u663E\u793A\u672C\u5E2E\u52A9"," /clear \u6E05\u7A7A\u5C4F\u5E55"," /tools \u5217\u51FA\u672C\u8F6E\u53D1\u7ED9\u6A21\u578B\u7684\u5DE5\u5177\uFF08\u6392\u67E5\u300C\u67D0\u4E2A\u5DE5\u5177\u4F3C\u4E4E\u6CA1\u88AB\u8C03\u7528\u8FC7\u300D\uFF09"," /device \u624B\u673A\u8BBE\u5907\u6865\uFF08\u5148 /device serve \u6216 /device connect <\u624B\u673AIP>\uFF09"," \u5B50\u547D\u4EE4\uFF1Aconnect\uFF5Cserve\uFF5Cstop\uFF5Clist\uFF5Cpush <\u6587\u4EF6>\uFF5Crun <\u6587\u4EF6>\uFF5Clogs [N]"," \u4F53\u68C0\u4E0E\u622A\u56FE\u8BF7\u7528\u547D\u4EE4\u884C\uFF1Axzh device check / xzh device shot"," /copy [N|A-B|last|all] \u590D\u5236\u5DE6\u4FA7\u5BF9\u8BDD\u5230\u7CFB\u7EDF\u526A\u8D34\u677F\uFF08\u9ED8\u8BA4\u6700\u8FD1 30 \u884C\uFF09"," /copy term [N|A-B|all] \u590D\u5236\u53F3\u4FA7\u7EC8\u7AEF\u8F93\u51FA\uFF08\u6309\u680F\u53D6\u5185\u5BB9\uFF0C\u4E0D\u4F1A\u4E32\u680F\uFF09"," /image \u628A\u7CFB\u7EDF\u526A\u8D34\u677F\u91CC\u7684\u56FE\u7247\u52A0\u4E3A\u672C\u8F6E\u9644\u4EF6\uFF08\u540C Ctrl+V\uFF1B\u522B\u540D /paste\uFF09"," /mouse \u5207\u6362\u9F20\u6807\u6355\u83B7\uFF1A\u5F00\u542F\u540E\u53EF\u5728\u8F93\u51FA\u533A\u62D6\u62FD\u9009\u62E9\uFF08\u6309\u6574\u884C\uFF09"," /reset \u91CD\u7F6E\u5BF9\u8BDD\u4E0A\u4E0B\u6587"," /undo \u64A4\u9500\u7384\u732A\u5BF9\u6587\u4EF6\u7684\u6700\u8FD1\u4E00\u6B21\u4FEE\u6539\uFF08\u6539\u524D\u81EA\u52A8\u5907\u4EFD\uFF09"," /resume [\u7F16\u53F7] \u5217\u51FA / \u6062\u590D\u5386\u53F2\u4F1A\u8BDD\uFF08\u5BF9\u8BDD\u5386\u53F2\u4F1A\u81EA\u52A8\u4FDD\u5B58\uFF09"," /cwd \u663E\u793A\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55"," /switch <\u76EE\u5F55> \u5207\u6362\u9879\u76EE\uFF08\u8F7D\u5165\u8BE5\u9879\u76EE\u4E0A\u6B21\u4F1A\u8BDD\u63A5\u7740\u804A\uFF09"," /term \u663E\u793A/\u9690\u85CF\u53F3\u4FA7\u7EC8\u7AEF\u9762\u677F\uFF08/term clear \u6E05\u7A7A\u8F93\u51FA\uFF09"," /model [\u7F16\u53F7|id|\u6A21\u578B\u540D] \u67E5\u770B / \u5207\u6362\u5F53\u524D\u6A21\u578B\uFF08\u4E0D\u5E26\u53C2\u6570\uFF1A\u2191 \u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4\uFF09"," /auto [on|off] \u5207\u6362\u81EA\u52A8\u6279\u51C6\uFF08on\uFF1A\u6240\u6709\u5DE5\u5177\u76F4\u63A5\u6267\u884C\uFF0C\u5199\u5165\u914D\u7F6E\uFF09"," /intent [on|off] \u5207\u6362\u610F\u56FE\u5206\u6790\uFF08on\uFF1A\u6BCF\u6761\u6D88\u606F\u5148\u505A\u610F\u56FE\u5206\u6790\u518D\u5904\u7406\uFF0C\u5199\u5165\u914D\u7F6E\uFF09"," /exit \u9000\u51FA\u7384\u732A",`${t.bold}\u5FEB\u6377\u952E${t.reset}`,` Enter \u63D0\u4EA4 \xB7 ${t.bold}Alt+Enter${t.reset} \u6362\u884C\uFF08Ctrl/Shift+Enter \u89C6\u7EC8\u7AEF\u800C\u5B9A\uFF09`," \u2191/\u2193 \u5386\u53F2 \xB7 Ctrl+A/Ctrl+E \u884C\u9996/\u884C\u5C3E \xB7 PgUp/PgDn \u7FFB\u9875 \xB7 Shift+\u2191/\u2193 \u9010\u884C"," Home/End \u8DF3\u5230\u6700\u65E9/\u6700\u65B0",` ${t.gray}\u9F20\u6807${t.reset}\uFF1A\u6EDA\u8F6E\u6EDA\u52A8\u8F93\u51FA\u533A\uFF1B${t.bold}\u5728\u8F93\u51FA\u533A\u62D6\u62FD\u5373\u53EF\u9009\u4E2D\u5E76\u590D\u5236${t.reset}${t.gray}\uFF08\u677E\u5F00\u5199\u5165\u526A\u8D34\u677F\uFF09\u3002${t.reset}`,` \u60F3\u7528\u7EC8\u7AEF\u539F\u751F\u6846\u9009/\u53F3\u952E\u83DC\u5355\uFF1A${t.reset}Shift+\u62D6\u62FD${t.gray} \u7ED5\u8FC7\uFF0C\u6216 ${t.reset}/mouse${t.gray} \u4EA4\u8FD8\u9F20\u6807\uFF08\u6EDA\u52A8\u6539\u7528 PgUp/PgDn\uFF09\u3002${t.reset}`,` \u26A0 \u62D6\u9009\u662F\u77E9\u5F62\u9009\u62E9\uFF0C\u8DE8\u8FC7\u4E2D\u7F1D\u4F1A\u628A\u53E6\u4E00\u680F\u4E00\u8D77\u5E26\u8D70 \u2014\u2014\u8DE8\u680F\u5185\u5BB9\u8BF7\u6539\u7528 ${t.reset}/copy${t.gray}\uFF08\u5DE6\u680F\uFF09\u6216 ${t.reset}/copy term${t.gray}\uFF08\u53F3\u680F\uFF09\u3002${t.reset}`,` ${t.gray}\u7C98\u8D34${t.reset}\uFF1A\u652F\u6301\u591A\u884C\u6574\u6BB5\u7C98\u8D34\uFF08\u4E0D\u4F1A\u9010\u884C\u63D0\u4EA4\uFF09\uFF1B\u4E5F\u53EF\u7528 ${t.reset}/copy${t.gray} \u590D\u5236\u8F93\u51FA\u533A\u3002${t.reset}`,` ${t.bold}Ctrl+V${t.reset} ${t.gray}\u7C98\u8D34\u56FE\u7247\uFF1A\u8BFB\u53D6\u7CFB\u7EDF\u526A\u8D34\u677F\u91CC\u7684\u56FE\u7247\u4F5C\u4E3A\u9644\u4EF6\uFF08\u8F93\u5165\u6846\u663E\u793A${t.reset}[\u56FE\u7247N]${t.gray}\uFF0C\u56DE\u8F66\u53D1\u9001\uFF09\u3002${t.reset}`,` ${t.gray}\u7EC8\u7AEF\u53EA\u4F1A\u4F20\u6587\u672C\uFF0C\u56FE\u7247\u62FF\u4E0D\u5230\uFF0C\u56E0\u6B64\u7531\u7384\u732A\u4E3B\u52A8\u8BFB\u526A\u8D34\u677F\uFF1A${t.reset}`,` ${t.gray}Linux \u7F3A ${t.reset}wl-clipboard${t.gray}/${t.reset}xclip${t.gray} \u65F6\u4F1A\u8BE2\u95EE\u540E\u81EA\u52A8\u5B89\u88C5\uFF1BWindows \u7528\u5185\u7F6E PowerShell\uFF1BmacOS \u7528 ${t.reset}pngpaste${t.gray} \u6216\u5185\u7F6E osascript\u3002${t.reset}`,` ${t.gray}\u82E5\u672C\u7EC8\u7AEF\u628A Ctrl+V \u5F53\u81EA\u5DF1\u7684\u7C98\u8D34\u952E\uFF08\u5982 Windows Terminal\uFF09\uFF0C\u6539\u7528 ${t.reset}/image${t.gray}\u3002${t.reset}`,` ${t.gray}\u9700\u8981\u6A21\u578B\u652F\u6301\u89C6\u89C9\uFF08glm-4v / qwen-vl / gpt-4o / claude \u7B49\uFF09\uFF1B\u53EF\u7528 ${t.reset}xzh model vision <id> on${t.gray} \u624B\u52A8\u6807\u6CE8\u3002${t.reset}`," Shift+Tab \u5207\u6362\u7126\u70B9\uFF08\u5BF9\u8BDD \u21C4 \u53F3\u4FA7\u7EC8\u7AEF\uFF09\xB7 \u9F20\u6807\u70B9\u51FB\u4EA6\u53EF"," Ctrl+C \u4E2D\u65AD\u4EFB\u52A1 / \u6E05\u7A7A\u8F93\u5165 / \u9000\u51FA\uFF08\u7A7A\u95F2\u4E14\u8F93\u5165\u4E3A\u7A7A\u65F6\u9000\u51FA\uFF09"," Ctrl+D \u7ED3\u675F\u672C\u8F6E\u6B63\u5728\u8FDB\u884C\u7684\u5BF9\u8BDD \xB7 \u4EFB\u4F55\u60C5\u51B5\u4E0B\u90FD\u4E0D\u4F1A\u9000\u51FA\u7384\u732A"," Ctrl+L \u6E05\u5C4F",` \u6CE8\uFF1A${t.bold}Alt+Enter${t.reset} \u8D70\u7EC8\u7AEF\u539F\u751F\u7F16\u7801\uFF0C\u5404\u7EC8\u7AEF\u901A\u7528\uFF1B`," Ctrl/Shift+Enter \u9700\u8981\u7EC8\u7AEF\u652F\u6301\u6269\u5C55\u952E\u76D8\u534F\u8BAE\uFF0C\u90E8\u5206\u7EC8\u7AEF\uFF08\u5C24\u5176 IDE \u5185\u7F6E\uFF09\u4E0D\u652F\u6301\u3002",`${t.bold}\u53F3\u4FA7\u7EC8\u7AEF${t.reset}`," Enter \u6267\u884C\u547D\u4EE4 \xB7 \u2191/\u2193 \u547D\u4EE4\u5386\u53F2 \xB7 Ctrl+C / Ctrl+D \u4E2D\u65AD\u8FD0\u884C\u4E2D\u7684\u547D\u4EE4 \xB7 Ctrl+L \u6E05\u7A7A"," PgUp/PgDn / Shift+\u2191\u2193 / Home/End \u56DE\u770B\u5386\u53F2\u8F93\u51FA\uFF08\u6EDA\u52A8\u4E0D\u5F71\u54CD\u6B63\u5728\u8FD0\u884C\u7684\u547D\u4EE4\uFF09"," \u547D\u4EE4\u5728\u5F53\u524D\u9879\u76EE\u76EE\u5F55\u4E0B\u6267\u884C\uFF1Bcd \u751F\u6548\uFF08\u9762\u677F\u81EA\u884C\u7EF4\u62A4\u5DE5\u4F5C\u76EE\u5F55\uFF09"];this.lines.push(...e.map(n=>`${t.gray}${n}${t.reset}`)),this.lines.push("")}buildHeaderLines(e){let n=O(`${this.modelProviderLabel} / ${this.modelLabel}`,Math.max(10,e-8)),s=O(this.cwd,Math.max(10,e-8)),i=`${t.gray}${"\u2500".repeat(Math.max(0,e))}${t.reset}`;return{info:[`${t.brightMagenta}${t.bold} \u7384\u732A XuanZhu${t.reset} ${t.gray}v${K} \xB7 \u7EC8\u7AEF AI \u7F16\u7801 Agent${t.reset}`,`${t.gray} \u6A21\u578B\uFF1A${t.reset}${n}${t.reset}`,`${t.gray} \u76EE\u5F55\uFF1A${t.reset}${s}${t.reset}`,...this.todoHeaderLines(e),`${t.gray} \u8F93\u5165 ${t.reset}${t.brightGreen}/help${t.reset}${t.gray} \u67E5\u770B\u547D\u4EE4\u4E0E\u5FEB\u6377\u952E${t.reset}`,`${t.gray} ${t.reset}Ctrl+D${t.gray} \u7ED3\u675F\u672C\u8F6E\u5BF9\u8BDD\uFF08\u4E0D\u9000\u51FA\uFF09\xB7 ${t.reset}Ctrl+C${t.gray} \u4E2D\u65AD/\u6E05\u7A7A/\u9000\u51FA${t.reset}`,`${t.gray} ${t.reset}Shift+Tab${t.gray} \u5207\u7EC8\u7AEF \xB7 ${t.reset}PgUp${t.gray}/\u6EDA\u8F6E\u56DE\u770B\u5386\u53F2${t.reset}`],divider:i}}todoHeaderLines(e){if(this.todoItems.length===0)return[];let n=this.todoItems.filter(u=>u.status==="completed").length,s=this.todoItems.filter(u=>u.status==="cancelled").length,i=this.todoItems.length-s,o=`\u4EFB\u52A1 ${n}/${i}`+(s>0?` \xB7 \u53D6\u6D88 ${s}`:""),a=[`${t.gray} ${t.reset}${t.bold}${o}${t.reset}`],l=this.todoItems.filter(u=>u.status==="in_progress"||u.status==="pending"),c=3;for(let u of l.slice(0,c)){let p=u.status==="in_progress",d=p?`${t.brightCyan}\u25B8${t.reset}`:`${t.gray}\xB7${t.reset}`,h=O(u.content,Math.max(8,e-8));a.push(` ${d} ${p?t.bold:t.gray}${h}${t.reset}`)}return l.length>c&&a.push(`${t.gray} \u2026\u8FD8\u6709 ${l.length-c} \u9879${t.reset}`),a}scheduleRender(){this.needsRender||this.exited||(this.needsRender=!0,setTimeout(()=>{this.needsRender=!1,this.render()},16))}render(){if(this.exited||this.suspended)return;this.trimOutputLines();let e=Math.max(40,process.stdout.columns||80),n=Math.max(8,process.stdout.rows||24),s=this.resolveTermWidth(e),i=s>0?Math.max(20,e-s-1):e;this.lastLeftWidth=i;let o=this.pendingConfirm?this.layoutConfirm(i):this.pendingSelect?this.layoutSelect(i):this.layoutInput(i),a=o.lines.length,l=1,c=this.buildHeaderLines(i),u=Math.max(1,Math.floor(n/3)),p=Math.min(c.info.length,Math.max(0,u-1)),d=[...c.info.slice(0,p),c.divider],h=d.length,m=Math.max(3,n-h-a-l),f=this.physicalLines(i),y=f.length;this.lastPhysicalCount>=0&&this.scrollOffset>0&&y>this.lastPhysicalCount&&(this.scrollOffset+=y-this.lastPhysicalCount),this.lastPhysicalCount=y;let g=Math.max(0,y-m);this.scrollOffset>g&&(this.scrollOffset=g);let S=y-this.scrollOffset,$=Math.max(0,S-m),A=f.slice($,S);for(;A.length<m;)A.unshift("");let H=n-1,x=Math.max(0,m-(S-$)),P=this.lastPhysicalMap;this.screenToLogical=[];for(let b=0;b<H;b++){let k=b-h;if(k<0||k>=m){this.screenToLogical.push(void 0);continue}let G=$+k-x,_=G>=0&&G<P.length?P[G]:-1;this.screenToLogical.push(_>=0?_:void 0)}if(this.selectionAnchor!==void 0&&this.selectionHead!==void 0){let b=Math.min(this.selectionAnchor,this.selectionHead),k=Math.max(this.selectionAnchor,this.selectionHead);for(let G=0;G<A.length;G++){let _=$+G-x;if(_<0||_>=P.length)continue;let je=P[_];je>=b&&je<=k&&(A[G]=`${t.inverse}${A[G]}${t.reset}`)}}let z=s>0?this.buildTermPanel(s,H):{rows:[],cursorRow:0,cursorCol:0},R=h+m,w=se.hide;for(let b=0;b<H;b++){let k;b<h?k=d[b]:b<h+m?k=A[b-h]:b<R+a?k=o.lines[b-R]:k="",w+=se.to(b+1,1)+"\x1B[2K",s>0?w+=bt(O(k,i),i)+`${t.gray}\u2502${t.reset}`+O(z.rows[b]??"",s):w+=bt(O(k,e),e)}if(w+=se.to(n,1)+"\x1B[2K"+this.renderStatus(e),this.pendingConfirm||this.pendingSelect)w+=se.hide;else if(this.termFocus&&s>0&&z.cursorRow>0){let b=z.cursorRow,k=Math.min(e,i+1+z.cursorCol);w+=se.to(b,k)+se.show}else{let b=R+o.cursorRow+1,k=Math.min(i,o.cursorCol+1);w+=se.to(b,k)+se.show}process.stdout.write(w)}resolveTermWidth(e){return!this.termVisible||e<80?0:Math.min(64,Math.max(32,Math.floor(e*.4)))}buildTermPanel(e,n){if(e<=0||n<=0)return{rows:[],cursorRow:0,cursorCol:0};let s=[],i=this.term.isRunning(),o=this.termFocus?`${t.bgBlue}${t.brightWhite} \u7EC8\u7AEF ${t.reset}`:`${t.gray} \u7EC8\u7AEF ${t.reset}`,a=i?`${t.brightYellow} \u25CF \u8FD0\u884C\u4E2D${t.reset}`:"",l=N(o)+N(a),c=Math.max(6,e-l);s.push(`${o}${t.gray}${O(this.term.getCwd(),c)}${t.reset}${a}`);let u=Math.max(1,n-3),p=[];for(let w of this.term.visibleLines())p.push(...st(w,e));this.lastTermPhysicalCount>=0&&this.termScroll>0&&p.length>this.lastTermPhysicalCount&&(this.termScroll+=p.length-this.lastTermPhysicalCount),this.lastTermPhysicalCount=p.length;let d=Math.max(0,p.length-u);this.termScroll>d&&(this.termScroll=d);let h=p.length-this.termScroll,m=Math.max(0,h-u),f=p.slice(m,h);for(;f.length<u;)f.unshift("");s.push(...f),s.push(`${t.gray}${"\u2500".repeat(e)}${t.reset}`);let y=2,g=Math.max(1,e-y),S=Array.from(this.termInput),$=S.length;{let w=0;for(let b=0;b<S.length;b++){if(w>=this.termInputCursor){$=b;break}w+=S[b].length}}let A=0;for(;A<$&&N(S.slice(A,$).join(""))>g;)A++;let H=S.slice(A).join(""),x=N(S.slice(A,$).join("")),P=this.termFocus?`${t.brightCyan}\u276F${t.reset} `:`${t.gray}\u276F${t.reset} `;s.push(O(`${P}${H}`,e));let z=s.length,R=Math.min(e,y+x+1);for(;s.length<n;)s.push("");return{rows:s.slice(0,n),cursorRow:z,cursorCol:R}}physicalLines(e){let n=[],s=[];for(let i=0;i<this.lines.length;i++){let o=st(this.lines[i],e);n.push(...o);for(let a=0;a<o.length;a++)s.push(i)}if(this.streamingPreview){let i=st(this.streamingPreview,e);n.push(...i);for(let o=0;o<i.length;o++)s.push(-1)}return this.lastPhysicalMap=s,n}renderStatus(e){let n=" \u7384\u732A ",s=this.autoApprove?"\u26A1auto \xB7 ":"",i=this.intentEnabled?"\u2301intent \xB7 ":"",o=this.termVisible?this.termFocus?"\u7EC8\u7AEF\u25B8 ":"\u5BF9\u8BDD\u25B8 ":"",a=this.scrollOffset>0?`${t.brightYellow}\u2191${this.scrollOffset}${t.reset}${t.bgBlue} `:"",l=this.termScroll>0?`${t.brightYellow}\u21E1${this.termScroll}${t.reset}${t.bgBlue} `:"",c=this.selectionAnchor!==void 0&&this.selectionHead!==void 0?`${t.brightYellow}\u5DF2\u9009 ${Math.abs(this.selectionHead-this.selectionAnchor)+1} \u884C${this.dragging?"\uFF08\u677E\u5F00\u590D\u5236\uFF09":"\uFF08\u5DF2\u590D\u5236\uFF09"}${t.reset}${t.bgBlue} `:"",u=` ${s}${i}${o}${c}${a}${l}${this.modelLabel} \u2502 ${this.statusText}${this.statusDetail?" \xB7 "+this.statusDetail:""} `,p=` ${this.cwd} `,d=this.busy?`${t.brightYellow}\u25CF \u8FD0\u884C\u4E2D${t.reset}${t.bgBlue}`:"",h=N(n)+N(u)+N(d)+6,m=`${t.bgBlue}${t.brightWhite}${n}${t.reset}${t.bgBlue}${t.brightWhite}${d}${t.bgBlue}${t.gray}${O(p,Math.max(0,e-h))}${t.bgBlue}${t.brightWhite}${u}${t.reset}`,f=N(m);return f<e?m+=`${t.bgBlue}${" ".repeat(e-f)}${t.reset}`:f>e&&(m=`${O(m,e)}${t.reset}`),m}layoutInput(e){let i=Math.max(1,Math.floor((process.stdout.rows||24)/2)-1),o=Array.from(this.input),a=0;{let h=0;a=o.length;for(let m=0;m<o.length;m++){if(h>=this.inputCursor){a=m;break}h+=o[m].length}}let l=[],c="\u276F ",u=N("\u276F "),p=0,d=u;for(let h=0;h<o.length;h++){let m=o[h];if(m===`
|
|
583
|
+
`){l.push(c),c=" ",u=N(" "),h===a&&(p=l.length,d=u);continue}let f=N(m);u+f>e&&(l.push(c),c=" ",u=N(" ")),h===a&&(p=l.length,d=u),c+=m,u+=f}if(a>=o.length&&(p=l.length,d=u),l.push(c),l.length>i){let h=Math.max(0,p-i+1);return{lines:l.slice(h,h+i),cursorRow:p-h,cursorCol:d}}return{lines:l,cursorRow:p,cursorCol:d}}layoutConfirm(e){let n=this.pendingConfirm,{request:s}=n,i=[],o=s.danger;i.push(`${o?t.brightRed:t.brightYellow}\u26A0 ${s.title}${t.reset}`);let a=s.detail.split(`
|
|
584
|
+
`).slice(0,12);for(let u of a)for(let p of st(`${t.gray}${u}${t.reset}`,e-4))i.push(` ${p}`);let l=n.selected?`${t.inverse}${t.green} \u5141\u8BB8 ${t.reset}`:`${t.gray} \u5141\u8BB8 ${t.reset}`,c=n.selected?`${t.gray} \u62D2\u7EDD ${t.reset}`:`${t.inverse}${t.yellow} \u62D2\u7EDD ${t.reset}`;return i.push(` ${l} ${c} ${t.gray}\u2190 \u2192 \u5207\u6362 \xB7 Enter \u786E\u8BA4 \xB7 y/n \u5FEB\u6377${t.reset}`),{lines:i,cursorRow:0,cursorCol:0}}layoutSelect(e){let n=this.pendingSelect,s=[];if(s.push(`${t.bold}${n.title}${t.reset}`),n.detail)for(let c of st(`${t.gray}${n.detail}${t.reset}`,e-4))s.push(` ${c}`);let i=10,o=n.options.length,{start:a,end:l}=sc(o,n.index,i);return n.options.slice(a,l).forEach((c,u)=>{let p=a+u,d=c.hint?` ${t.gray}${c.hint}${t.reset}`:"",h=` ${p+1}. ${c.label}`;s.push(p===n.index?`${t.inverse}${h}${t.reset}${d}`:`${t.gray}${h}${t.reset}${d}`)}),o>i&&s.push(` ${t.gray}\u2026\u5171 ${o} \u4E2A\u6A21\u578B${t.reset}`),s.push(` ${t.gray}\u2191 \u2193 \u9009\u62E9 \xB7 \u6570\u5B57\u76F4\u9009 \xB7 Enter \u786E\u8BA4 \xB7 Esc \u53D6\u6D88${t.reset}`),{lines:s,cursorRow:0,cursorCol:0}}};function sc(r,e,n){if(r<=n)return{start:0,end:Math.max(0,r)};let s=Math.min(Math.max(0,e-Math.floor(n/2)),r-n);return{start:s,end:s+n}}function ic(r,e){let n=e.trim();if(/^\d+$/.test(n))return r[Number(n)-1];let s=n.toLowerCase();return r.find(i=>i.id===n)??r.find(i=>i.model===n)??r.find(i=>i.id.toLowerCase()===s)}var qe="\x1B[200~",Tt="\x1B[201~",oc=40,ac=2e3,lc=1,cc=2,Or=4;function uc(r,e){if((e&Or)===0)return null;let n=r>=65&&r<=90?r+32:r;if(n>=97&&n<=122)return String.fromCharCode(n-96);switch(r){case 32:case 64:return"\0";case 91:return"\x1B";case 92:return"";case 93:return"";case 94:return"";case 95:case 47:return"";default:return null}}function uo(r,e){let n=(e&(lc|Or|cc))!==0;switch(r){case 13:return n?`
|
|
585
|
+
`:"\r";case 9:return n&&(e&Or)===0?"\x1B[Z":" ";case 8:case 127:return"\x7F";default:return uc(r,e)}}function dc(r){if(r==="\x1B\r"||r===`\x1B
|
|
571
586
|
`)return`
|
|
572
|
-
`;let e=/^\x1b\[(\d+)(?::\d+)?(?:;(\d+))?u$/.exec(
|
|
573
|
-
[${new Date().toISOString()}] ${
|
|
587
|
+
`;let e=/^\x1b\[(\d+)(?::\d+)?(?:;(\d+))?u$/.exec(r);if(e){let s=e[2]?Number(e[2])-1:0;return uo(Number(e[1]),s)??r}let n=/^\x1b\[27;(\d+)(?:;(\d+))?~$/.exec(r);if(n){let s=Number(n[1])-1,i=n[2]?Number(n[2]):27;return uo(i,s)??r}return r}function Dr(r){return r<1024?`${r} B`:r<1024*1024?`${(r/1024).toFixed(1)} KB`:`${(r/(1024*1024)).toFixed(1)} MB`}function pc(r){let e=r.trim();if(!e)return null;let n=/^(['"])(.*)\1$/.exec(e);return n&&(e=n[2]),e.startsWith("file://")&&(e=e.slice(7)),e=e.replace(/\\ /g," "),/\.(png|jpe?g|gif|webp)$/i.test(e)?e:null}function hc(r,e){try{let n=Le.isAbsolute(r)?r:Le.resolve(e,q(r)),s=pe.statSync(n);if(!s.isFile()||s.size>un)return null;let i=pe.readFileSync(n),o=Mr(i);return o?{mimeType:o,data:i.toString("base64")}:null}catch{return null}}function mc(r){let e={};try{let i=JSON.parse(r.arguments||"{}");typeof i=="object"&&i!==null&&(e=i)}catch{return O(r.arguments,60)}let n=i=>{let o=e[i];return typeof o=="string"?o:void 0},s=n("path")??n("pattern")??n("command")??n("dirPath")??"";return O(s.replace(/\s+/g," "),80)}var Y=v(require("fs")),Lr=v(require("path"));function Nr(){return Lr.join(T(),"session.lock")}function $n(){return Lr.join(T(),"crash.log")}function po(r){let e=fc();try{Y.mkdirSync(T(),{recursive:!0}),Y.writeFileSync(Nr(),JSON.stringify({pid:process.pid,startedAt:new Date().toISOString(),version:r}),{mode:384})}catch{}return e}function fc(){let r;try{r=Y.readFileSync(Nr(),"utf8")}catch{return null}let e={};try{let n=JSON.parse(r);e.startedAt=n.startedAt,e.version=n.version}catch{}try{let n=Y.readFileSync($n(),"utf8");e.crashLog=n.slice(-4e3)}catch{}return e}function jr(r,e){let n=e instanceof Error?e.stack??e.message:String(e),s=`
|
|
588
|
+
[${new Date().toISOString()}] ${r}
|
|
574
589
|
\u7248\u672C: ${process.version} \u5E73\u53F0: ${process.platform} PID: ${process.pid}
|
|
575
|
-
`+
|
|
590
|
+
`+n.split(`
|
|
576
591
|
`).map(i=>` ${i}`).join(`
|
|
577
592
|
`)+`
|
|
578
|
-
`;try{Y.mkdirSync(T(),{recursive:!0}),Y.appendFileSync(
|
|
579
|
-
`);return;case"init":{if(Z(T()),
|
|
593
|
+
`;try{Y.mkdirSync(T(),{recursive:!0}),Y.appendFileSync($n(),s,"utf8")}catch{}}function Br(){try{Y.rmSync(Nr(),{force:!0}),Y.rmSync($n(),{force:!0})}catch{}}function yn(){return $n()}var ho=require("child_process"),mo=v(require("fs"));async function fo(r){let e=r[0];switch(e){case"edit":return $c();case"path":process.stdout.write(`${D()}
|
|
594
|
+
`);return;case"init":{if(Z(T()),mt()){process.stdout.write(`${t.yellow}\u914D\u7F6E\u6587\u4EF6\u5DF2\u5B58\u5728\uFF1A${D()}${t.reset}
|
|
580
595
|
`);return}W({...B}),process.stdout.write(`${t.green}\u2713 \u5DF2\u751F\u6210\u9ED8\u8BA4\u914D\u7F6E\uFF1A${D()}${t.reset}
|
|
581
|
-
`);return}case void 0:return
|
|
596
|
+
`);return}case void 0:return gc();default:process.stdout.write(`${t.red}\u672A\u77E5\u5B50\u547D\u4EE4\uFF1A${e}${t.reset}
|
|
582
597
|
${t.gray}\u7528\u6CD5\uFF1Axzh config [edit|path|init]${t.reset}
|
|
583
|
-
`),process.exitCode=1;return}}function
|
|
598
|
+
`),process.exitCode=1;return}}function gc(){if(!mt()){process.stdout.write(`${t.yellow}\u5C1A\u672A\u521B\u5EFA\u914D\u7F6E\u6587\u4EF6\u3002${t.reset}
|
|
584
599
|
${t.gray}\u8FD0\u884C ${t.reset}xzh model${t.gray} \u8FDB\u884C\u914D\u7F6E\uFF0C\u6216\u8FD0\u884C ${t.reset}xzh config init${t.gray} \u751F\u6210\u9ED8\u8BA4\u914D\u7F6E\u3002${t.reset}
|
|
585
|
-
`);return}let
|
|
600
|
+
`);return}let r=te(),e=ls(r);process.stdout.write(`${t.bold}\u7384\u732A\u914D\u7F6E${t.reset} ${t.gray}(${D()})${t.reset}
|
|
586
601
|
|
|
587
602
|
`),process.stdout.write(JSON.stringify(e,null,2)+`
|
|
588
603
|
`),process.stdout.write(`
|
|
589
604
|
${t.gray}\u63D0\u793A\uFF1AAPI Key \u5DF2\u8131\u654F\u663E\u793A\uFF1B\u4F7F\u7528 ${t.reset}xzh config edit${t.gray} \u7F16\u8F91\u5B8C\u6574\u914D\u7F6E\u3002${t.reset}
|
|
590
|
-
`)}function
|
|
605
|
+
`)}function $c(){Z(T());let r=D();mo.existsSync(r)||W({...B});let e=[process.env.XUANZHU_EDITOR,"nano",process.env.EDITOR,"vi","vim","code --wait"].filter(n=>!!n);for(let n of e){let[s,...i]=n.split(" "),o=(0,ho.spawnSync)(s,[...i,r],{stdio:"inherit"});if(o.error){if(o.error.code==="ENOENT")continue;process.stdout.write(`${t.red}\u7F16\u8F91\u5668\u542F\u52A8\u5931\u8D25\uFF1A${o.error.message}${t.reset}
|
|
591
606
|
`),process.exitCode=1;return}typeof o.status=="number"&&o.status!==0&&(process.stdout.write(`${t.yellow}\u7F16\u8F91\u5668\u9000\u51FA\u7801 ${o.status}\uFF0C\u914D\u7F6E\u53EF\u80FD\u672A\u4FDD\u5B58\u3002${t.reset}
|
|
592
|
-
`),process.exitCode=1);return}process.stdout.write(`${t.yellow}\u672A\u627E\u5230\u53EF\u7528\u7684\u6587\u672C\u7F16\u8F91\u5668\uFF0C\u8BF7\u624B\u52A8\u7F16\u8F91\uFF1A${
|
|
593
|
-
`),process.exitCode=1}var
|
|
594
|
-
`),a.trim()||e||""}finally{s.close()}}async function
|
|
595
|
-
`}async function
|
|
596
|
-
${t.bold}${
|
|
597
|
-
`),c(),process.stdout.write(l());let
|
|
598
|
-
`),
|
|
599
|
-
`){f();return}else if(g[$]===""){m(void 0);return}else if(g[$]==="\x1B"){m(void 0);return}else if(g[$]==="\x7F"||g[$]==="\b")o=o.slice(0,-1),S=!0,$+=1;else if(/\d/.test(g[$])){let A=o+g[$];o=A.length>2?g[$]:A,S=!0,$+=1}else $+=1;S&&u()};
|
|
600
|
-
${t.bold}${
|
|
601
|
-
`),e.forEach((i,o)=>{let a=o===
|
|
602
|
-
`)});let s=
|
|
603
|
-
`),e[
|
|
604
|
-
`);return}let i=
|
|
605
|
-
${t.gray}\u53EF\u7528\uFF1A${
|
|
606
|
-
`),process.exitCode=1;return}let o=
|
|
607
|
-
`);return}let a=await
|
|
608
|
-
${t.green}\u2713 ${
|
|
607
|
+
`),process.exitCode=1);return}process.stdout.write(`${t.yellow}\u672A\u627E\u5230\u53EF\u7528\u7684\u6587\u672C\u7F16\u8F91\u5668\uFF0C\u8BF7\u624B\u52A8\u7F16\u8F91\uFF1A${r}${t.reset}
|
|
608
|
+
`),process.exitCode=1}var vn=v(require("readline/promises")),go=require("stream");var yc=new go.Writable({write(r,e,n){n()}});function vc(r){return r.length<=8?"*".repeat(r.length):`${r.slice(0,4)}\u2026${r.slice(-4)}`}async function Ne(r,e,n={}){let s=vn.createInterface({input:process.stdin,output:n.mask?yc:process.stdout});try{let i=e&&n.mask?vc(e):e,o=i?` ${t.gray}(${i})${t.reset}`:"",a=await Promise.race([s.question(`${r}${o}: `),new Promise(c=>s.once("close",()=>c("")))]);return n.mask&&process.stdout.write(`
|
|
609
|
+
`),a.trim()||e||""}finally{s.close()}}async function ke(r,e,n=0){return process.stdin.isTTY?xc(r,e,n):Sc(r,e,n)}function bc(r,e,n){let s=e===n?`${t.brightGreen}\u276F${t.reset}`:" ",i=r.hint?` ${t.gray}${r.hint}${t.reset}`:"",o=`${t.gray}${String(e+1).padStart(2)}.${t.reset}`;return`\x1B[2K ${s} ${o} ${r.label}${i}
|
|
610
|
+
`}async function xc(r,e,n){let i=Math.min(Math.max(n,0),e.length-1),o="",a=e.length,l=()=>o?`${t.gray}\u2191/\u2193 \u9009\u62E9 \xB7 ${t.reset}\u7F16\u53F7 ${t.brightCyan}${o}${t.reset}${t.gray} \xB7 Enter \u786E\u8BA4 \xB7 Esc \u53D6\u6D88${t.reset}`:`${t.gray}\u2191/\u2193 \u9009\u62E9 \xB7 \u6570\u5B57\u76F4\u8FBE \xB7 Enter \u786E\u8BA4 \xB7 Esc \u53D6\u6D88${t.reset}`,c=()=>{for(let h=0;h<e.length;h++)process.stdout.write(bc(e[h],h,i))},u=()=>{process.stdout.write(`\x1B[${a}A\x1B[1G\x1B[J`),c(),process.stdout.write(l())};process.stdout.write(`
|
|
611
|
+
${t.bold}${r}${t.reset}
|
|
612
|
+
`),c(),process.stdout.write(l());let p=process.stdin,d=!!p.isRaw;return new Promise(h=>{let m=g=>{p.off("data",y),d||p.setRawMode(!1),p.pause(),process.stdout.write(`
|
|
613
|
+
`),h(g)},f=()=>{let g=o?Number.parseInt(o,10)-1:i;g>=0&&g<e.length?m(e[g].value):o?(o="",u()):m(e[i].value)},y=g=>{let S=!1,$=0;for(;$<g.length;)if(g.startsWith("\x1B[A",$)||g[$]==="k")i=(i-1+e.length)%e.length,S=!0,$+=g.startsWith("\x1B[A",$)?3:1;else if(g.startsWith("\x1B[B",$)||g[$]==="j")i=(i+1)%e.length,S=!0,$+=g.startsWith("\x1B[B",$)?3:1;else if(g[$]==="\r"||g[$]===`
|
|
614
|
+
`){f();return}else if(g[$]===""){m(void 0);return}else if(g[$]==="\x1B"){m(void 0);return}else if(g[$]==="\x7F"||g[$]==="\b")o=o.slice(0,-1),S=!0,$+=1;else if(/\d/.test(g[$])){let A=o+g[$];o=A.length>2?g[$]:A,S=!0,$+=1}else $+=1;S&&u()};p.setRawMode(!0),p.resume(),p.setEncoding("utf8"),p.on("data",y)})}async function Sc(r,e,n){process.stdout.write(`
|
|
615
|
+
${t.bold}${r}${t.reset}
|
|
616
|
+
`),e.forEach((i,o)=>{let a=o===n?`${t.brightGreen}\u276F${t.reset}`:" ",l=i.hint?` ${t.gray}${i.hint}${t.reset}`:"";process.stdout.write(` ${a} ${o+1}. ${i.label}${l}
|
|
617
|
+
`)});let s=vn.createInterface({input:process.stdin,output:process.stdout});try{let o=(await Promise.race([s.question(`${t.gray}\u8BF7\u8F93\u5165\u7F16\u53F7 [${n+1}]: ${t.reset}`),new Promise(l=>s.once("close",()=>l("")))])).trim();if(!o)return e[n].value;let a=Number.parseInt(o,10)-1;return Number.isNaN(a)||a<0||a>=e.length?(process.stdout.write(`${t.yellow}\u65E0\u6548\u7F16\u53F7\uFF0C\u4F7F\u7528\u9ED8\u8BA4\u9009\u9879\u3002${t.reset}
|
|
618
|
+
`),e[n].value):e[a].value}finally{s.close()}}async function bn(r,e=!1){let n=vn.createInterface({input:process.stdin,output:process.stdout});try{let s=e?"[Y/n]":"[y/N]",o=(await Promise.race([n.question(`${r} ${s} `),new Promise(a=>n.once("close",()=>a("")))])).trim().toLowerCase();return o?o==="y"||o==="yes":e}finally{n.close()}}async function $o(r){switch(r[0]){case void 0:return Ac();case"list":case"ls":return Cc();case"all":case"available":case"providers":return Tc();case"add":return Ur(r.slice(1));case"remove":case"rm":case"delete":return yo(r.slice(1));case"context":case"ctx":return vo(r.slice(1));case"vision":case"image":return wc(r.slice(1));case"help":case"-h":case"--help":return kc();default:return Ur(r)}}async function Ur(r){let e=te(),n=Ve(e),s=r[0]??await _c();if(!s){process.stdout.write(`${t.gray}\u5DF2\u53D6\u6D88\u3002${t.reset}
|
|
619
|
+
`);return}let i=Ce(s);if(!i){process.stdout.write(`${t.red}\u672A\u77E5\u7684 provider\uFF1A${s}${t.reset}
|
|
620
|
+
${t.gray}\u53EF\u7528\uFF1A${we.map(h=>h.id).join(", ")}${t.reset}
|
|
621
|
+
`),process.exitCode=1;return}let o=r[1]??await Ec(i.id,i.models,e);if(!o){process.stdout.write(`${t.gray}\u5DF2\u53D6\u6D88\u3002${t.reset}
|
|
622
|
+
`);return}let a=await Pc(i.id,i.requiresBaseUrl===!0,e),l=await Ic(i.id,i.envKey,e),c=await Rc(o,r[2]),u=await Mc(i.id,o,r[3]);e.providers={...e.providers,[i.id]:{...e.providers[i.id]??{},model:o,...a?{baseUrl:a}:{},...l?{apiKey:l}:{}}},e.provider=i.id,e.model=o;let p=n.some(h=>h.id===ve(i.id,o)),d=us(e,{provider:i.id,model:o,contextWindow:c,vision:u,...a?{baseUrl:a}:{},...l?{apiKey:l}:{}});W(e),process.stdout.write(`
|
|
623
|
+
${t.green}\u2713 ${p?"\u5DF2\u66F4\u65B0":"\u5DF2\u65B0\u589E"}\u6A21\u578B${t.reset} ${t.bold}${d.id}${t.reset}
|
|
609
624
|
${t.gray}provider\uFF1A${t.reset}${i.label}
|
|
610
625
|
${t.gray}model \uFF1A${t.reset}${d.model}
|
|
611
|
-
${t.gray}\u4E0A\u4E0B\u6587 \uFF1A${t.reset}${
|
|
626
|
+
${t.gray}\u4E0A\u4E0B\u6587 \uFF1A${t.reset}${Se(d.contextWindow??32e3)} token
|
|
612
627
|
${t.gray}\u56FE\u7247\u8F93\u5165\uFF1A${t.reset}${Be(d)?"\u652F\u6301\uFF08Ctrl+V \u7C98\u8D34\u56FE\u7247\uFF09":"\u4E0D\u652F\u6301"}
|
|
613
628
|
`+(a?` ${t.gray}baseUrl \uFF1A${t.reset}${a}
|
|
614
629
|
`:"")+` ${t.gray}\u914D\u7F6E\u6587\u4EF6\uFF1A${t.reset}${D()}
|
|
615
|
-
`),
|
|
616
|
-
`);return}let s=
|
|
617
|
-
`);return}let i=
|
|
630
|
+
`),bo(e)}async function yo(r){let e=te(),n=U(e);if(n.length===0){process.stdout.write(`${t.yellow}\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\u3002${t.reset}
|
|
631
|
+
`);return}let s=r[0]||await Hr(n,"\u9009\u62E9\u8981\u5220\u9664\u7684\u6A21\u578B\uFF1A");if(!s){process.stdout.write(`${t.gray}\u5DF2\u53D6\u6D88\u3002${t.reset}
|
|
632
|
+
`);return}let i=Kr(e,s),o=i?ds(e,i):null;if(!o){process.stdout.write(`${t.red}\u672A\u627E\u5230\u6A21\u578B\uFF1A${s}${t.reset}
|
|
618
633
|
${t.gray}\u63D0\u793A\uFF1A\u53EF\u4F7F\u7528 ${t.reset}xzh model list${t.gray} \u67E5\u770B id \u4E0E\u5E8F\u53F7\u3002${t.reset}
|
|
619
634
|
`),process.exitCode=1;return}W(e),process.stdout.write(`
|
|
620
635
|
${t.green}\u2713 \u5DF2\u5220\u9664\u6A21\u578B${t.reset} ${o.id}
|
|
621
|
-
`),
|
|
622
|
-
`);return}let s=
|
|
623
|
-
`);return}let i=
|
|
636
|
+
`),bo(e)}async function vo(r){let e=te(),n=U(e);if(n.length===0){process.stdout.write(`${t.yellow}\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\u3002${t.reset}
|
|
637
|
+
`);return}let s=r[0]||await Hr(n,"\u9009\u62E9\u8981\u8BBE\u7F6E\u4E0A\u4E0B\u6587\u7A97\u53E3\u7684\u6A21\u578B\uFF1A");if(!s){process.stdout.write(`${t.gray}\u5DF2\u53D6\u6D88\u3002${t.reset}
|
|
638
|
+
`);return}let i=Kr(e,s),o=i?n.find(p=>p.id===i):void 0;if(!o){process.stdout.write(`${t.red}\u672A\u627E\u5230\u6A21\u578B\uFF1A${s}${t.reset}
|
|
624
639
|
${t.gray}\u63D0\u793A\uFF1A\u53EF\u4F7F\u7528 ${t.reset}xzh model list${t.gray} \u67E5\u770B id \u4E0E\u5E8F\u53F7\u3002${t.reset}
|
|
625
|
-
`),process.exitCode=1;return}let a=o.contextWindow??Ue(o.model),l=
|
|
626
|
-
`),process.exitCode=1;return}let u=
|
|
627
|
-
${t.green}\u2713 \u5DF2\u66F4\u65B0\u4E0A\u4E0B\u6587\u7A97\u53E3${t.reset} ${o.id} \u2192 ${
|
|
628
|
-
`)}async function
|
|
629
|
-
`);return}let s=
|
|
630
|
-
`);return}let i=
|
|
640
|
+
`),process.exitCode=1;return}let a=o.contextWindow??Ue(o.model),l=r[1]??await Ne(`\u8BF7\u8F93\u5165 ${o.id} \u7684\u4E0A\u4E0B\u6587\u7A97\u53E3\uFF08token\uFF0C\u5982 128000\uFF09`,String(a)),c=zr(l);if(c===void 0){process.stdout.write(`${t.red}\u65E0\u6CD5\u8BC6\u522B\u7684\u7A97\u53E3\u5927\u5C0F\uFF1A${l}${t.reset}
|
|
641
|
+
`),process.exitCode=1;return}let u=Ve(e).find(p=>p.id===o.id);u&&(u.contextWindow=c),W(e),process.stdout.write(`
|
|
642
|
+
${t.green}\u2713 \u5DF2\u66F4\u65B0\u4E0A\u4E0B\u6587\u7A97\u53E3${t.reset} ${o.id} \u2192 ${Se(c)} token
|
|
643
|
+
`)}async function wc(r){let e=te(),n=U(e);if(n.length===0){process.stdout.write(`${t.yellow}\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\u3002${t.reset}
|
|
644
|
+
`);return}let s=r[0]||await Hr(n,"\u9009\u62E9\u8981\u6807\u6CE8\u89C6\u89C9\u80FD\u529B\u7684\u6A21\u578B\uFF1A");if(!s){process.stdout.write(`${t.gray}\u5DF2\u53D6\u6D88\u3002${t.reset}
|
|
645
|
+
`);return}let i=Kr(e,s),o=i?n.find(p=>p.id===i):void 0;if(!o){process.stdout.write(`${t.red}\u672A\u627E\u5230\u6A21\u578B\uFF1A${s}${t.reset}
|
|
631
646
|
${t.gray}\u63D0\u793A\uFF1A\u53EF\u4F7F\u7528 ${t.reset}xzh model list${t.gray} \u67E5\u770B id \u4E0E\u5E8F\u53F7\u3002${t.reset}
|
|
632
|
-
`),process.exitCode=1;return}let a=
|
|
633
|
-
`),process.exitCode=1;return}let u=
|
|
647
|
+
`),process.exitCode=1;return}let a=On(o.model),l=(r[1]??await Ne(`\u8BF7\u8F93\u5165 ${o.id} \u662F\u5426\u652F\u6301\u56FE\u7247\u8F93\u5165\uFF08on / off\uFF0C\u56DE\u8F66\u6309\u6A21\u578B\u540D\u63A8\u65AD\uFF09`,a?"on":"off")).trim().toLowerCase(),c=Jr(l);if(c===void 0){process.stdout.write(`${t.red}\u65E0\u6CD5\u8BC6\u522B\u300C${l}\u300D\uFF0C\u8BF7\u4F7F\u7528 on \u6216 off\u3002${t.reset}
|
|
648
|
+
`),process.exitCode=1;return}let u=Ve(e).find(p=>p.id===o.id);if(!u){process.stdout.write(`${t.red}\u8BBE\u7F6E\u5931\u8D25\uFF1A${o.id}${t.reset}
|
|
634
649
|
`),process.exitCode=1;return}u.vision=c,W(e),process.stdout.write(`
|
|
635
650
|
${t.green}\u2713 \u5DF2\u66F4\u65B0\u89C6\u89C9\u80FD\u529B${t.reset} ${o.id} \u2192 ${c?"\u652F\u6301\u56FE\u7247\u8F93\u5165":"\u4E0D\u652F\u6301\u56FE\u7247\u8F93\u5165"}
|
|
636
651
|
${t.gray} \u751F\u6548\u7ED3\u679C\uFF1A${Be(u)?"\u53EF\u4EE5\u7C98\u8D34\u56FE\u7247":"\u7C98\u8D34\u56FE\u7247\u4F1A\u88AB\u62D2\u7EDD"}\uFF08Ctrl+V \u6216 /image\uFF09${t.reset}
|
|
637
|
-
`)}function
|
|
638
|
-
${t.bold}\u6240\u6709\u53EF\u7528\u6A21\u578B${t.reset}${t.gray}\uFF08${
|
|
639
|
-
`);for(let o of
|
|
652
|
+
`)}function Cc(){let r=te();Fr(r)}function Tc(){let r=te(),e=new Set(U(r).map(o=>o.id)),n=we.reduce((o,a)=>o+a.models.length,0);process.stdout.write(`
|
|
653
|
+
${t.bold}\u6240\u6709\u53EF\u7528\u6A21\u578B${t.reset}${t.gray}\uFF08${we.length} \u4E2A\u670D\u52A1\u5546\uFF0C\u5171 ${n} \u4E2A\u5185\u7F6E\u6A21\u578B\uFF09${t.reset}
|
|
654
|
+
`);for(let o of we){let a=r.providers[o.id]!==void 0?` ${t.gray}\xB7 \u5DF2\u586B\u5199 Key${t.reset}`:"";if(process.stdout.write(`
|
|
640
655
|
${t.bold}${o.label}${t.reset} ${t.gray}(${o.id})${t.reset}${a}
|
|
641
656
|
`),o.models.length===0){process.stdout.write(` ${t.gray}\u65E0\u5185\u7F6E\u5217\u8868\uFF0C\u9700\u624B\u52A8\u8F93\u5165\u6A21\u578B\u540D${o.requiresBaseUrl?"\uFF08\u81EA\u5B9A\u4E49\u7AEF\u70B9\uFF09":""}${t.reset}
|
|
642
|
-
`);continue}for(let l of o.models){let c=ve(o.id,l),u=e.has(c),
|
|
643
|
-
`)}}let s=new Set(
|
|
657
|
+
`);continue}for(let l of o.models){let c=ve(o.id,l),u=e.has(c),p=u?`${t.brightGreen}\u276F${t.reset}`:" ",d=[];l===o.defaultModel&&d.push("\u9ED8\u8BA4"),u&&d.push("\u5DF2\u914D\u7F6E");let h=d.length>0?` ${t.gray}\u2190 ${d.join(" \xB7 ")}${t.reset}`:"";process.stdout.write(` ${p} ${l}${h}
|
|
658
|
+
`)}}let s=new Set(we.flatMap(o=>o.models.map(a=>ve(o.id,a)))),i=U(r).filter(o=>!s.has(o.id));if(i.length>0){process.stdout.write(`
|
|
644
659
|
${t.bold}\u5DF2\u914D\u7F6E\u7684\u81EA\u5B9A\u4E49\u6A21\u578B${t.reset}${t.gray}\uFF08\u4E0D\u5728\u4E0A\u9762\u7684\u5185\u7F6E\u5217\u8868\u4E2D\uFF09${t.reset}
|
|
645
660
|
`);for(let o of i)process.stdout.write(` ${t.brightGreen}\u276F${t.reset} ${o.id}
|
|
646
661
|
`)}process.stdout.write(`
|
|
647
662
|
${t.gray}\u276F \u8868\u793A\u5DF2\u52A0\u5165\u914D\u7F6E\u3002\u6DFB\u52A0\u6A21\u578B\uFF1A${t.reset}${t.brightGreen}xzh model add <provider> <model>${t.reset}
|
|
648
663
|
${t.gray}\u67E5\u770B\u5DF2\u914D\u7F6E\u7684\u6A21\u578B\uFF1A${t.reset}xzh model list
|
|
649
|
-
`)}async function
|
|
664
|
+
`)}async function Ac(){for(;;){let r=te();switch(Fr(r),await ke("\u8BF7\u9009\u62E9\u64CD\u4F5C\uFF1A",[{label:"\u65B0\u589E\u6A21\u578B",value:"add",hint:"add"},{label:"\u67E5\u770B\u5DF2\u914D\u7F6E\u7684\u6A21\u578B",value:"list",hint:"list"},{label:"\u5220\u9664\u6A21\u578B",value:"remove",hint:"remove"},{label:"\u8C03\u6574\u4E0A\u4E0B\u6587\u7A97\u53E3",value:"context",hint:"context"},{label:"\u9000\u51FA",value:"exit"}],0)){case"add":await Ur([]);break;case"list":Fr(r);break;case"remove":await yo([]);break;case"context":await vo([]);break;default:process.stdout.write(`
|
|
650
665
|
${t.gray}\u5DF2\u9000\u51FA\u6A21\u578B\u7BA1\u7406\u3002${t.reset}
|
|
651
|
-
`);return}}}function
|
|
666
|
+
`);return}}}function Fr(r){let e=U(r),n=be(r);if(process.stdout.write(`
|
|
652
667
|
${t.bold}\u7384\u732A\u6A21\u578B\u5217\u8868${t.reset} ${t.gray}(${D()})${t.reset}
|
|
653
668
|
`),e.length===0){process.stdout.write(` ${t.yellow}\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\u3002${t.reset}
|
|
654
669
|
${t.gray}\u8FD0\u884C ${t.reset}xzh model add <provider> <model>${t.gray} \u6DFB\u52A0\u3002${t.reset}
|
|
655
|
-
`);return}e.forEach((s,i)=>{let o=
|
|
670
|
+
`);return}e.forEach((s,i)=>{let o=n!==null&&s.id===n.id,a=o?`${t.brightGreen}\u276F${t.reset}`:" ",l=o?` ${t.gray}\u2190 \u5F53\u524D\u4F7F\u7528${t.reset}`:"",c=Se(s.contextWindow??Ue(s.model)),u=Be(s)?` ${t.cyan}\u89C6\u89C9${t.reset}`:"";process.stdout.write(` ${a} ${i+1}. ${s.id.padEnd(34)} ${t.gray}ctx ${c.padStart(5)}${t.reset}${u}${l}
|
|
656
671
|
`)}),process.stdout.write(`${t.gray} \u987A\u5E8F\u5373\u56DE\u9000\u987A\u5E8F\uFF1A\u5148\u7528\u300C\u5F53\u524D\u4F7F\u7528\u300D\u90A3\u4E2A\uFF0C\u5B83\u8C03\u7528\u5931\u8D25\u65F6\u6309\u6B64\u987A\u5E8F\u5F80\u540E\u5207\u6362\uFF0C\u76F4\u5230\u5168\u90E8\u8BD5\u8FC7\u3002${t.reset}
|
|
657
|
-
`)}function
|
|
658
|
-
`):(
|
|
672
|
+
`)}function bo(r){let e=be(r);e?process.stdout.write(`${t.gray}\u4E0B\u6B21\u542F\u52A8\u5C06\u4F7F\u7528\u4E0A\u6B21\u7528\u8FC7\u7684\u6A21\u578B\uFF1A${t.reset}${t.bold}${e.id}${t.reset}
|
|
673
|
+
`):(r.models??[]).length===0&&process.stdout.write(`${t.yellow}\u26A0 \u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\uFF0C\u8FD0\u884C ${t.reset}xzh model add <provider> <model>${t.yellow} \u6DFB\u52A0\u3002${t.reset}
|
|
659
674
|
`),process.stdout.write(`
|
|
660
675
|
\u8FD0\u884C ${t.brightGreen}xzh${t.reset} \u5F00\u59CB\u4F7F\u7528\u3002
|
|
661
|
-
`)}function
|
|
676
|
+
`)}function kc(){process.stdout.write(`
|
|
662
677
|
${t.bold}xzh model \u2014\u2014 \u591A\u6A21\u578B\u7BA1\u7406${t.reset}
|
|
663
678
|
${t.green}xzh model${t.reset} \u4EA4\u4E92\u5F0F\u83DC\u5355
|
|
664
679
|
${t.green}xzh model list${t.reset} \u5217\u51FA\u5DF2\u914D\u7F6E\u7684\u6A21\u578B\uFF08\u6309\u56DE\u9000\u987A\u5E8F\uFF09
|
|
@@ -674,89 +689,89 @@ ${t.bold}\u591A\u6A21\u578B\u4E0E\u56DE\u9000${t.reset}
|
|
|
674
689
|
\u76F4\u5230\u6240\u6709\u6A21\u578B\u90FD\u8BD5\u8FC7\u624D\u62A5\u9519\u3002**\u5217\u8868\u987A\u5E8F\u5373\u4F18\u5148\u7EA7**\uFF0C\u4E0D\u518D\u6709\u6743\u91CD\u8BBE\u7F6E \u2014\u2014
|
|
675
690
|
\u4E0D\u60F3\u8BA9\u67D0\u4E2A\u6A21\u578B\u53C2\u4E0E\uFF0C\u76F4\u63A5 ${t.green}xzh model remove${t.reset} \u5220\u6389\u5373\u53EF\u3002
|
|
676
691
|
|
|
677
|
-
${t.gray}\u53EF\u7528 provider\uFF1A${
|
|
678
|
-
`)}async function
|
|
679
|
-
`),
|
|
680
|
-
`);let s=await
|
|
681
|
-
`),
|
|
682
|
-
`),s)}let o=
|
|
683
|
-
`);let a=await
|
|
684
|
-
`),s)}async function
|
|
685
|
-
`),await
|
|
686
|
-
${t.bold}\u7384\u732A\u4F9D\u8D56\u68C0\u67E5${t.reset} ${t.gray}(\u5E73\u53F0\uFF1A${
|
|
687
|
-
|
|
688
|
-
`);let e=[...
|
|
689
|
-
`);continue}let l=o.install[
|
|
692
|
+
${t.gray}\u53EF\u7528 provider\uFF1A${we.map(r=>r.id).join(", ")}${t.reset}
|
|
693
|
+
`)}async function _c(){return ke("\u9009\u62E9 AI \u670D\u52A1\u5546\uFF1A",[...we.map(r=>({label:r.label,value:r.id,hint:r.id})),{label:"\u8FD4\u56DE",value:""}],0)}async function Ec(r,e,n){let s=n.providers[r]?.model;if(e.length>0){let o=[...e.map(c=>({label:c,value:c})),{label:"\u624B\u52A8\u8F93\u5165\u6A21\u578B\u540D",value:"__custom__"},{label:"\u8FD4\u56DE",value:""}],a=s?Math.max(0,e.indexOf(s)):0,l=await ke(`\u9009\u62E9\u6A21\u578B\uFF08${r}\uFF09\uFF1A`,o,a);if(l!=="__custom__")return l}return await Ne("\u8BF7\u8F93\u5165\u6A21\u578B\u540D\u79F0",s)}async function Pc(r,e,n){let s=n.providers[r]?.baseUrl;return e?await Ne("\u8BF7\u8F93\u5165 API \u7AEF\u70B9 baseUrl",s):s??""}function zr(r){let e=r.trim().toLowerCase().replace(/[_,\s]/g,"");if(!e)return;let n=/^(\d+(?:\.\d+)?)(k|m|万)?$/.exec(e);if(!n)return;let s=Number(n[1]);if(!Number.isFinite(s)||s<=0)return;let i=n[2],a=Math.floor(s*(i==="k"?1e3:i==="m"?1e6:i==="\u4E07"?1e4:1));return a>0?a:void 0}async function Rc(r,e){let n=Ue(r);if(e!==void 0&&e.trim()!==""){let o=zr(e);return o===void 0?(process.stdout.write(`${t.yellow}\u65E0\u6CD5\u8BC6\u522B\u4E0A\u4E0B\u6587\u7A97\u53E3\u300C${e}\u300D\uFF0C\u5DF2\u4F7F\u7528\u63A8\u65AD\u503C ${Se(n)}\u3002${t.reset}
|
|
694
|
+
`),n):o}process.stdout.write(`${t.gray} \u4E0A\u4E0B\u6587\u7A97\u53E3\uFF1A\u6309\u6A21\u578B\u540D\u63A8\u65AD\u4E3A ${Se(n)} token\u3002${t.reset}
|
|
695
|
+
`);let s=await Ne("\u8BF7\u8F93\u5165\u4E0A\u4E0B\u6587\u7A97\u53E3\u5927\u5C0F\uFF08token\uFF0C\u5982 128000\uFF1B\u56DE\u8F66\u4F7F\u7528\u63A8\u65AD\u503C\uFF09",String(n)),i=zr(s);return i===void 0?(process.stdout.write(`${t.yellow} \u65E0\u6CD5\u8BC6\u522B\u300C${s}\u300D\uFF0C\u5DF2\u4F7F\u7528\u63A8\u65AD\u503C ${Se(n)}\u3002${t.reset}
|
|
696
|
+
`),n):i}function Jr(r){let e=r.trim().toLowerCase();if(["on","true","yes","y","1"].includes(e))return!0;if(["off","false","no","n","0"].includes(e))return!1}async function Mc(r,e,n){let s=Be({provider:r,model:e}),i=s?"\u652F\u6301":"\u4E0D\u652F\u6301";if(n!==void 0&&n.trim()!==""){let c=Jr(n);return c!==void 0?c:(process.stdout.write(`${t.yellow}\u65E0\u6CD5\u8BC6\u522B\u56FE\u7247\u8F93\u5165\u8BBE\u7F6E\u300C${n}\u300D\uFF0C\u5DF2\u4F7F\u7528${i}\u3002${t.reset}
|
|
697
|
+
`),s)}let o=r==="custom"?"\uFF08\u81EA\u5B9A\u4E49\u7AEF\u70B9\u9ED8\u8BA4\u6309\u652F\u6301\u5904\u7406\uFF09":`\uFF08\u6309\u6A21\u578B\u540D\u63A8\u65AD\u4E3A${i}\uFF09`;process.stdout.write(`${t.gray} \u56FE\u7247\u8F93\u5165\uFF1A${o}\u3002${t.reset}
|
|
698
|
+
`);let a=await Ne("\u8BE5\u6A21\u578B\u662F\u5426\u652F\u6301\u56FE\u7247\u8F93\u5165\uFF08Ctrl+V \u7C98\u8D34\u56FE\u7247\uFF09\uFF1F\u8F93\u5165 on / off",s?"on":"off"),l=Jr(a);return l!==void 0?l:(process.stdout.write(`${t.yellow} \u65E0\u6CD5\u8BC6\u522B\u300C${a}\u300D\uFF0C\u5DF2\u4F7F\u7528${i}\u3002${t.reset}
|
|
699
|
+
`),s)}async function Ic(r,e,n){let s=Ce(r),i=n.providers[r]?.apiKey;return s?.requiresApiKey?(Ot(s,i)&&process.stdout.write(`${t.gray}\u5DF2\u68C0\u6D4B\u5230 API Key\uFF08${e} \u6216\u914D\u7F6E\u4E2D\uFF09\uFF0C\u76F4\u63A5\u56DE\u8F66\u4FDD\u7559\u3002${t.reset}
|
|
700
|
+
`),await Ne("\u8BF7\u8F93\u5165 API Key",i??"",{mask:!0})):i??""}function Kr(r,e){let n=U(r),s=n.find(o=>o.id===e);if(s)return s.id;let i=n.find(o=>o.model===e);if(i)return i.id;if(/^\d+$/.test(e.trim())){let o=Number.parseInt(e,10);if(o>=1&&o<=n.length)return n[o-1].id}return null}async function Hr(r,e){return await ke(e,[...r.map(s=>({label:`${s.id} ctx ${Se(s.contextWindow??Ue(s.model))}`,value:s.id})),{label:"\u8FD4\u56DE",value:""}],0)}async function xo(){let r=Ae();process.stdout.write(`
|
|
701
|
+
${t.bold}\u7384\u732A\u4F9D\u8D56\u68C0\u67E5${t.reset} ${t.gray}(\u5E73\u53F0\uFF1A${r})${t.reset}
|
|
702
|
+
|
|
703
|
+
`);let e=[...Bi(r).map(o=>({requirement:o,owner:"\u7384\u732A\uFF08Ctrl+V \u7C98\u8D34\u56FE\u7247\uFF09"})),...Ni().flatMap(o=>ut(o).map(a=>({requirement:a,owner:`\u6280\u80FD ${o}`})))],n=[],s=[],i=[];for(let{requirement:o,owner:a}of e){if(await Ke(o)){process.stdout.write(`${t.green}\u2713${t.reset} ${o.name} ${t.gray}\u5DF2\u5B89\u88C5${t.reset}
|
|
704
|
+
`);continue}let l=o.install[r];if(!l){process.stdout.write(`${t.yellow}\u26A0${t.reset} ${o.name} ${t.gray}\u5F53\u524D\u5E73\u53F0\u65E0\u81EA\u52A8\u5B89\u88C5\u547D\u4EE4${t.reset}
|
|
690
705
|
`),i.push(o.name);continue}if(process.stdout.write(`
|
|
691
706
|
${t.yellow}\u25CF${t.reset} ${t.bold}${o.name}${t.reset} ${t.gray}\u672A\u5B89\u88C5${t.reset}
|
|
692
707
|
${t.gray}\u6240\u5C5E\uFF1A${a}${t.reset}
|
|
693
708
|
${t.gray}\u5B89\u88C5\u547D\u4EE4\uFF1A${t.reset}${l}
|
|
694
|
-
`),!await
|
|
709
|
+
`),!await bn(" \u662F\u5426\u73B0\u5728\u5B89\u88C5\uFF1F",!0)){i.push(o.name);continue}(await Er(o,r,void 0,p=>process.stdout.write(`${t.gray} ${p}${t.reset}
|
|
695
710
|
`),{interactive:!0})).ok?(process.stdout.write(`${t.green} \u2713 ${o.name} \u5B89\u88C5\u5B8C\u6210${t.reset}
|
|
696
|
-
`),
|
|
711
|
+
`),n.push(o.name)):(process.stdout.write(`${t.red} \u2717 ${o.name} \u5B89\u88C5\u5931\u8D25${t.reset}
|
|
697
712
|
`),s.push(o.name))}process.stdout.write(`
|
|
698
713
|
${t.bold}\u7ED3\u679C${t.reset}
|
|
699
|
-
`),
|
|
714
|
+
`),n.length>0&&process.stdout.write(` ${t.green}\u5DF2\u5B89\u88C5 ${n.length} \u9879${t.reset}\uFF1A${n.join("\u3001")}
|
|
700
715
|
`),i.length>0&&process.stdout.write(` ${t.yellow}\u5DF2\u8DF3\u8FC7 ${i.length} \u9879${t.reset}\uFF1A${i.join("\u3001")}
|
|
701
716
|
`),s.length>0&&(process.exitCode=1,process.stdout.write(` ${t.red}\u5931\u8D25 ${s.length} \u9879${t.reset}\uFF1A${s.join("\u3001")}
|
|
702
717
|
`)),e.length===0?process.stdout.write(` ${t.gray}\u5F53\u524D\u5E73\u53F0\u6CA1\u6709\u9700\u8981\u68C0\u67E5\u7684\u4F9D\u8D56\u3002${t.reset}
|
|
703
|
-
`):
|
|
718
|
+
`):n.length===0&&i.length===0&&s.length===0&&process.stdout.write(` ${t.green}\u6240\u6709\u4F9D\u8D56\u5747\u5DF2\u5C31\u7EEA\u3002${t.reset}
|
|
704
719
|
`),process.stdout.write(`
|
|
705
|
-
`)}var
|
|
706
|
-
`),
|
|
707
|
-
${t.bold}\u7384\u732A\u6280\u80FD\u5217\u8868${t.reset} ${t.gray}(\u5185\u7F6E ${s} \xB7 \u7528\u6237 ${i} \xB7 \u5DF2\u7981\u7528 ${e.length-
|
|
720
|
+
`)}var Co=v(require("fs")),Wr=v(require("path"));var Dc=52;async function To(r){switch(r[0]?.trim().toLowerCase()){case void 0:await Oc();return;case"list":case"ls":Ao(!0);return;case"enable":case"on":await qr(r.slice(1),!0);return;case"disable":case"off":await qr(r.slice(1),!1);return;case"delete":case"remove":case"rm":await ko(r.slice(1));return;case"help":case"-h":case"--help":wo();return;default:process.stdout.write(`${t.red}\u672A\u77E5\u5B50\u547D\u4EE4\uFF1A${r[0]}${t.reset}
|
|
721
|
+
`),wo(),process.exitCode=1}}function Ao(r){let e=oe({includeDisabled:!0}),n=oe(),s=e.filter(a=>a.source==="builtin").length,i=e.length-s,o=Wr.join(T(),"skills.json");if(process.stdout.write(`
|
|
722
|
+
${t.bold}\u7384\u732A\u6280\u80FD\u5217\u8868${t.reset} ${t.gray}(\u5185\u7F6E ${s} \xB7 \u7528\u6237 ${i} \xB7 \u5DF2\u7981\u7528 ${e.length-n.length} \xB7 ${o})${t.reset}
|
|
708
723
|
`),e.length===0){process.stdout.write(` ${t.yellow}\u6CA1\u6709\u53D1\u73B0\u4EFB\u4F55\u6280\u80FD\u3002${t.reset}
|
|
709
724
|
${t.gray}\u628A\u542B SKILL.md \u7684\u76EE\u5F55\u653E\u8FDB ${t.reset}~/.xzh/skills/<name>${t.gray} \u5373\u53EF\u3002${t.reset}
|
|
710
|
-
`);return}for(let a of e){let l=!
|
|
711
|
-
`)}}async function
|
|
725
|
+
`);return}for(let a of e){let l=!n.some(m=>m.name===a.name),c=l?`${t.yellow}\u2717${t.reset}`:`${t.green}\u2713${t.reset}`,u=a.source==="user"?`${t.cyan}\u7528\u6237${t.reset}`:"\u5185\u7F6E",p=l?`${t.gray}\uFF08\u5DF2\u7981\u7528\uFF09${t.reset} `:"",d=bt(a.name,22),h=l?`${t.gray}${d}${t.reset}`:`${t.bold}${d}${t.reset}`;process.stdout.write(` ${c} ${h} ${u} ${p}${t.gray}${O(a.description,Dc)}${t.reset}
|
|
726
|
+
`)}}async function qr(r,e){let n=e?"\u542F\u7528":"\u7981\u7528",s=r.find(c=>!c.startsWith("-"));if(s){let c=oe({includeDisabled:!0}).find(u=>u.name.toLowerCase()===s.trim().toLowerCase());if(!c){process.stdout.write(`${t.red}\u672A\u627E\u5230\u6280\u80FD\uFF1A${s}${t.reset}
|
|
712
727
|
${t.gray}\u8FD0\u884C ${t.reset}xzh skill list${t.gray} \u67E5\u770B\u5168\u90E8\u6280\u80FD\u3002${t.reset}
|
|
713
|
-
`),process.exitCode=1;return}
|
|
728
|
+
`),process.exitCode=1;return}So(c,e);return}let i=new Set(oe().map(c=>c.name)),o=oe({includeDisabled:!0}).filter(c=>e?!i.has(c.name):i.has(c.name));if(o.length===0){process.stdout.write(`${t.yellow}\u6CA1\u6709\u53EF${n}\u7684\u6280\u80FD\u3002${t.reset}
|
|
714
729
|
${t.gray}\u8FD0\u884C ${t.reset}xzh skill list${t.gray} \u67E5\u770B\u5F53\u524D\u72B6\u6001\u3002${t.reset}
|
|
715
|
-
`);return}let a=await
|
|
716
|
-
`);return}let s=e?`${t.green}\u5DF2\u542F\u7528${t.reset}`:`${t.yellow}\u5DF2\u7981\u7528${t.reset}`;process.stdout.write(`${s}\u6280\u80FD\u300C${t.bold}${
|
|
730
|
+
`);return}let a=await ke(`\u9009\u62E9\u8981${n}\u7684\u6280\u80FD\uFF1A`,[...o.map(c=>({label:c.name,value:c.name,hint:`${c.source==="user"?"\u7528\u6237":"\u5185\u7F6E"} \xB7 ${O(c.description,36)}`})),{label:"\u53D6\u6D88",value:""}],0);if(!a)return;let l=o.find(c=>c.name===a);l&&So(l,e)}function So(r,e){if(!en(r.name,!e)){process.stdout.write(`${t.yellow}\u6280\u80FD\u300C${r.name}\u300D\u672C\u6765\u5C31\u5904\u4E8E${e?"\u542F\u7528":"\u7981\u7528"}\u72B6\u6001\u3002${t.reset}
|
|
731
|
+
`);return}let s=e?`${t.green}\u5DF2\u542F\u7528${t.reset}`:`${t.yellow}\u5DF2\u7981\u7528${t.reset}`;process.stdout.write(`${s}\u6280\u80FD\u300C${t.bold}${r.name}${t.reset}\u300D${t.gray}(\u6765\u6E90\uFF1A${r.source==="user"?"\u7528\u6237":"\u5185\u7F6E"})${t.reset}
|
|
717
732
|
${t.gray}${e?"list_skills / load_skill \u73B0\u5728\u53EF\u4EE5\u770B\u5230\u5B83\u4E86\u3002":"list_skills / load_skill \u4E0D\u518D\u770B\u5230\u5B83\uFF08\u968F\u65F6\u53EF\u518D\u542F\u7528\uFF09\u3002"}${t.reset}
|
|
718
|
-
`)}async function
|
|
733
|
+
`)}async function ko(r){let e=r.some(i=>i==="--yes"||i==="-y"),n=r.find(i=>!i.startsWith("-")),s;if(n){if(s=oe({includeDisabled:!0}).find(i=>i.name.toLowerCase()===n.trim().toLowerCase()),!s){process.stdout.write(`${t.red}\u672A\u627E\u5230\u6280\u80FD\uFF1A${n}${t.reset}
|
|
719
734
|
${t.gray}\u8FD0\u884C ${t.reset}xzh skill list${t.gray} \u67E5\u770B\u5168\u90E8\u6280\u80FD\u3002${t.reset}
|
|
720
|
-
`),process.exitCode=1;return}}else{let i=
|
|
735
|
+
`),process.exitCode=1;return}}else{let i=oe({includeDisabled:!0}).filter(a=>a.source==="user");if(i.length===0){process.stdout.write(`${t.yellow}\u6CA1\u6709\u53EF\u5220\u9664\u7684\u7528\u6237\u6280\u80FD${t.gray}\uFF08~/.xzh/skills/ \u4E0B\u6CA1\u6709\u81EA\u5EFA\u6280\u80FD\uFF09\u3002${t.reset}
|
|
721
736
|
${t.gray}\u5185\u7F6E\u6280\u80FD\u4E0D\u53EF\u5220\u9664\uFF0C\u5982\u9700\u9690\u85CF\u8BF7\u7528 ${t.reset}xzh skill disable <\u540D\u79F0>${t.gray}\u3002${t.reset}
|
|
722
|
-
`);return}let o=await
|
|
737
|
+
`);return}let o=await ke("\u9009\u62E9\u8981\u5220\u9664\u7684\u7528\u6237\u6280\u80FD\uFF1A",[...i.map(a=>({label:a.name,value:a.name,hint:a.dir})),{label:"\u53D6\u6D88",value:""}],0);if(!o)return;s=i.find(a=>a.name===o)}if(s){if(s.source!=="user"){process.stdout.write(`${t.yellow}\u300C${s.name}\u300D\u662F\u5185\u7F6E\u6280\u80FD\uFF0C\u4E0D\u80FD\u5220\u9664\u3002${t.reset}
|
|
723
738
|
${t.gray}\u5982\u9700\u9690\u85CF\uFF0C\u8FD0\u884C ${t.reset}xzh skill disable ${s.name}${t.gray}\u3002${t.reset}
|
|
724
|
-
`),process.exitCode=1;return}if(!e&&!await
|
|
725
|
-
`);return}try{
|
|
726
|
-
`),process.exitCode=1;return}
|
|
739
|
+
`),process.exitCode=1;return}if(!e&&!await bn(`\u5220\u9664\u7528\u6237\u6280\u80FD\u300C${s.name}\u300D\uFF08\u6574\u4E2A\u76EE\u5F55 ${s.dir}\uFF0C\u4E0D\u53EF\u6062\u590D\uFF09\uFF1F`,!1)){process.stdout.write(`${t.gray}\u5DF2\u53D6\u6D88\u3002${t.reset}
|
|
740
|
+
`);return}try{Co.rmSync(s.dir,{recursive:!0,force:!0})}catch(i){process.stdout.write(`${t.red}\u5220\u9664\u5931\u8D25\uFF1A${i instanceof Error?i.message:String(i)}${t.reset}
|
|
741
|
+
`),process.exitCode=1;return}en(s.name,!1),process.stdout.write(`${t.green}\u5DF2\u5220\u9664\u7528\u6237\u6280\u80FD\u300C${t.bold}${s.name}${t.reset}${t.green}\u300D\u3002${t.reset}
|
|
727
742
|
${t.gray}\u76EE\u5F55\uFF1A${s.dir}${t.reset}
|
|
728
743
|
${t.gray}\u82E5\u5B83\u66FE\u8986\u76D6\u540C\u540D\u5185\u7F6E\u6280\u80FD\uFF0C\u8BE5\u5185\u7F6E\u6280\u80FD\u73B0\u5DF2\u6062\u590D\u53EF\u89C1\u3002${t.reset}
|
|
729
|
-
`)}}async function
|
|
744
|
+
`)}}async function Oc(){if(!process.stdin.isTTY){process.stdout.write(`${t.yellow}\u4EA4\u4E92\u5F0F\u6280\u80FD\u7BA1\u7406\u9700\u8981 TTY\u3002${t.reset}
|
|
730
745
|
${t.gray}\u975E\u4EA4\u4E92\u573A\u666F\u8BF7\u7528\uFF1A${t.reset}xzh skill list${t.gray} / ${t.reset}xzh skill enable|disable <\u540D\u79F0>${t.gray} / ${t.reset}xzh skill delete <\u540D\u79F0> [--yes]${t.reset}
|
|
731
|
-
`),process.exitCode=1;return}for(;;)switch(
|
|
746
|
+
`),process.exitCode=1;return}for(;;)switch(Ao(!0),await ke("\u8BF7\u9009\u62E9\u64CD\u4F5C\uFF1A",[{label:"\u542F\u7528 / \u7981\u7528\u6280\u80FD",value:"toggle",hint:"\u5207\u6362\u53EF\u89C1\u6027"},{label:"\u5220\u9664\u6280\u80FD\uFF08\u4EC5\u7528\u6237\u6280\u80FD\uFF09",value:"delete",hint:"\u4E0D\u53EF\u6062\u590D"},{label:"\u9000\u51FA",value:"exit"}],0)){case"toggle":await qr([],!0);break;case"delete":await ko([]);break;default:process.stdout.write(`
|
|
732
747
|
${t.gray}\u5DF2\u9000\u51FA\u6280\u80FD\u7BA1\u7406\u3002${t.reset}
|
|
733
|
-
`);return}}function
|
|
734
|
-
`))}process.stdout.on("error",
|
|
735
|
-
\u672A\u6355\u83B7\u5F02\u5E38\uFF1A${
|
|
736
|
-
`),process.stderr.write(`\u8BE6\u60C5\u5DF2\u5199\u5165 ${
|
|
737
|
-
`),process.exit(1)});process.on("unhandledRejection",
|
|
738
|
-
\u672A\u5904\u7406\u7684 Promise \u62D2\u7EDD\uFF1A${String(
|
|
739
|
-
`),process.stderr.write(`\u8BE6\u60C5\u5DF2\u5199\u5165 ${
|
|
740
|
-
`),process.exit(1)});async function
|
|
741
|
-
`);let e=process.argv.slice(2),
|
|
742
|
-
`);return;default:{if(i.startsWith("-")){Eo();return}let o=
|
|
748
|
+
`);return}}function wo(){process.stdout.write(["",`${t.bold}\u7528\u6CD5${t.reset}`,` ${t.green}xzh skill${t.reset} \u4EA4\u4E92\u5F0F\u7BA1\u7406\u6280\u80FD\uFF08\u542F\u7528 / \u7981\u7528 / \u5220\u9664\uFF09`,` ${t.green}xzh skill list${t.reset} \u5217\u51FA\u5168\u90E8\u6280\u80FD\uFF08\u542B\u5DF2\u7981\u7528\u9879\u4E0E\u6765\u6E90\uFF09`,` ${t.green}xzh skill enable <\u540D\u79F0>${t.reset} \u542F\u7528\u6280\u80FD`,` ${t.green}xzh skill disable <\u540D\u79F0>${t.reset} \u7981\u7528\u6280\u80FD\uFF08list_skills / load_skill \u4E0D\u518D\u53EF\u89C1\uFF09`,` ${t.green}xzh skill delete <\u540D\u79F0> [--yes]${t.reset}`," \u5220\u9664\u6280\u80FD\uFF08\u4EC5\u9650\u7528\u6237\u6280\u80FD\uFF1B\u5185\u7F6E\u6280\u80FD\u8BF7\u6539\u7528 disable\uFF09","",`${t.bold}\u8BF4\u660E${t.reset}`,` \u72B6\u6001\u4FDD\u5B58\u5728 ${t.gray}${Wr.join(T(),"skills.json")}${t.reset}\u3002`," \u7981\u7528 = list_skills / load_skill \u4E0D\u518D\u53EF\u89C1\uFF08\u53EF\u968F\u65F6\u6062\u590D\uFF09\uFF1B"," \u5220\u9664 = \u4ECE\u78C1\u76D8\u79FB\u9664\u6280\u80FD\u76EE\u5F55\uFF0C\u4EC5\u5BF9\u7528\u6237\u6280\u80FD\uFF08~/.xzh/skills/<name>\uFF09\u751F\u6548\u3002",""].join(`
|
|
749
|
+
`))}process.stdout.on("error",r=>{r.code==="EPIPE"&&process.exit(0)});process.stderr.on("error",()=>{});for(let r of["SIGTERM","SIGHUP"])process.on(r,()=>{Br(),gn(),process.exit(0)});process.on("uncaughtException",r=>{jr("\u672A\u6355\u83B7\u5F02\u5E38",r),gn(),process.stderr.write(`
|
|
750
|
+
\u672A\u6355\u83B7\u5F02\u5E38\uFF1A${r?.stack??String(r)}
|
|
751
|
+
`),process.stderr.write(`\u8BE6\u60C5\u5DF2\u5199\u5165 ${yn()}
|
|
752
|
+
`),process.exit(1)});process.on("unhandledRejection",r=>{jr("\u672A\u5904\u7406\u7684 Promise \u62D2\u7EDD",r),gn(),process.stderr.write(`
|
|
753
|
+
\u672A\u5904\u7406\u7684 Promise \u62D2\u7EDD\uFF1A${String(r)}
|
|
754
|
+
`),process.stderr.write(`\u8BE6\u60C5\u5DF2\u5199\u5165 ${yn()}
|
|
755
|
+
`),process.exit(1)});async function Lc(){let r=Zr();r.migrated&&process.stdout.write(`${t.gray}\u5DF2\u5C06\u5168\u5C40\u76EE\u5F55\u8FC1\u79FB\u81F3 ${T()}${r.from?`\uFF08\u539F ${r.from}\uFF09`:""}${t.reset}
|
|
756
|
+
`);let e=process.argv.slice(2),n;e.includes("--intent")?n=!0:e.includes("--no-intent")&&(n=!1);let s=e.filter(o=>o!=="--intent"&&o!=="--no-intent"),i=s[0];switch(i){case void 0:await _o(void 0,n);return;case"model":await $o(s.slice(1));return;case"config":await fo(s.slice(1));return;case"setup":await xo();return;case"skill":await To(s.slice(1));return;case"device":await Vs(s.slice(1));return;case"help":case"-h":case"--help":Eo();return;case"version":case"-v":case"--version":process.stdout.write(`\u7384\u732A xzh v${K}
|
|
757
|
+
`);return;default:{if(i.startsWith("-")){Eo();return}let o=jc(i);if(o){await _o(o,n);return}if(Nc(i)){process.stdout.write(`${t.red}\u76EE\u5F55\u4E0D\u5B58\u5728\u6216\u4E0D\u662F\u76EE\u5F55\uFF1A${i}${t.reset}
|
|
743
758
|
`),process.exitCode=1;return}process.stdout.write(`${t.red}\u672A\u77E5\u547D\u4EE4\uFF1A${i}${t.reset}
|
|
744
759
|
${t.gray}\u8FD0\u884C ${t.reset}xzh --help${t.gray} \u67E5\u770B\u7528\u6CD5\uFF0C\u6216\u8FD0\u884C ${t.reset}xzh <\u76EE\u5F55>${t.gray} \u6307\u5B9A\u9879\u76EE\u76EE\u5F55\u3002${t.reset}
|
|
745
|
-
`),process.exitCode=1}}}function
|
|
760
|
+
`),process.exitCode=1}}}function Nc(r){return r.startsWith("/")||r.startsWith("~")||r.startsWith("./")||r.startsWith("../")||r==="."||r===".."}function jc(r){let e=q(r),n=xn.isAbsolute(e)?e:xn.resolve(process.cwd(),e);try{if(pt.existsSync(n)&&pt.statSync(n).isDirectory())return pt.realpathSync(n)}catch{}return null}async function _o(r,e){if(!process.stdin.isTTY||!process.stdout.isTTY){process.stdout.write(`${t.red}\u7384\u732A\u9700\u8981\u4EA4\u4E92\u5F0F\u7EC8\u7AEF\uFF08TTY\uFF09\u3002${t.reset}
|
|
746
761
|
${t.gray}\u8BF7\u5728\u771F\u5B9E\u7EC8\u7AEF\u4E2D\u8FD0\u884C xzh\u3002${t.reset}
|
|
747
|
-
`),process.exitCode=1;return}let
|
|
762
|
+
`),process.exitCode=1;return}let n=te(),s=be(n);if(!s){process.stdout.write(`${t.yellow}\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\u3002${t.reset}
|
|
748
763
|
${t.gray}\u8BF7\u5148\u8FD0\u884C ${t.reset}xzh model add <provider> <model>${t.gray} \u6DFB\u52A0\u6A21\u578B\u3002${t.reset}
|
|
749
|
-
`),process.exitCode=1;return}let i=
|
|
764
|
+
`),process.exitCode=1;return}let i=Hn(n,s);if(i.length>0){process.stdout.write(`${t.yellow}\u26A0 \u5F53\u524D\u6A21\u578B\u4E0D\u53EF\u7528\uFF1A${t.reset}
|
|
750
765
|
`);for(let u of i)process.stdout.write(` ${t.gray}\xB7${t.reset} ${u}
|
|
751
|
-
`);
|
|
766
|
+
`);mt()?process.stdout.write(`
|
|
752
767
|
${t.gray}\u914D\u7F6E\u6587\u4EF6\uFF1A${D()}${t.reset}
|
|
753
768
|
`):process.stdout.write(`
|
|
754
769
|
${t.gray}\u63D0\u793A\uFF1A\u8FD0\u884C ${t.reset}xzh model${t.gray} \u5B8C\u6210\u521D\u59CB\u5316\u914D\u7F6E\u3002${t.reset}
|
|
755
|
-
`),process.exitCode=1;return}let o=
|
|
770
|
+
`),process.exitCode=1;return}let o=ks(n).filter(u=>!i.includes(u));if(o.length>0){process.stdout.write(`${t.yellow}\u26A0 ${o.length} \u4E2A\u5907\u7528\u6A21\u578B\u6682\u4E0D\u53EF\u7528\uFF08\u4E0D\u5F71\u54CD\u672C\u6B21\u542F\u52A8\uFF09\uFF1A${t.reset}
|
|
756
771
|
`);for(let u of o)process.stdout.write(` ${t.gray}\xB7${t.reset} ${u}
|
|
757
|
-
`)}let a=
|
|
758
|
-
`).slice(-10))
|
|
759
|
-
`)}function Eo(){let
|
|
772
|
+
`)}let a=Ce(s.provider),l=gt(n,s);await new fn({provider:l,config:n,cwd:r??process.cwd(),providerLabel:a?.label??s.provider,model:s.model,activeModel:s,intentEnabled:e!==void 0?e:n.intent?.enabled===!0,autoApprove:n.autoApprove,startupNotice:Bc()}).start(),Br()}function Bc(){let r=po(K);if(!r)return;let e=r.startedAt?`\uFF08\u5F00\u59CB\u4E8E ${r.startedAt}\uFF09`:"",n=[`${t.yellow}\u26A0 \u4E0A\u6B21\u8FD0\u884C\u7591\u4F3C\u5F02\u5E38\u9000\u51FA${e}${t.reset}`];if(r.crashLog){n.push(`${t.gray} \u6700\u540E\u7684\u8BB0\u5F55\uFF1A${t.reset}`);for(let s of r.crashLog.trim().split(`
|
|
773
|
+
`).slice(-10))n.push(`${t.gray} ${s}${t.reset}`)}else n.push(`${t.gray} \u672A\u7559\u4E0B\u65E5\u5FD7 \u2014\u2014 \u591A\u4E3A\u8FDB\u7A0B\u88AB\u5F3A\u5236\u7EC8\u6B62\uFF08\u4F8B\u5982\u5185\u5B58\u4E0D\u8DB3\u88AB\u7CFB\u7EDF\u6740\u6389\uFF09${t.reset}`);return n.push(`${t.gray} \u5B8C\u6574\u65E5\u5FD7\uFF1A${yn()}${t.reset}`,""),n.join(`
|
|
774
|
+
`)}function Eo(){let r=`
|
|
760
775
|
${t.brightMagenta}${t.bold}\u7384\u732A XuanZhu${t.reset} ${t.gray}v${K} \u2014\u2014 \u4E13\u4E3A\u7EC8\u7AEF\u6253\u9020\u7684 AI \u7F16\u7801 Agent${t.reset}
|
|
761
776
|
|
|
762
777
|
${t.bold}\u7528\u6CD5${t.reset}
|
|
@@ -807,6 +822,6 @@ ${t.bold}\u754C\u9762\u5185\u5FEB\u6377\u952E${t.reset}
|
|
|
807
822
|
Enter \u63D0\u4EA4 \xB7 Ctrl+J \u6362\u884C \xB7 \u2191/\u2193 \u5386\u53F2 \xB7 PgUp/PgDn \u6EDA\u52A8
|
|
808
823
|
Ctrl+C \u4E2D\u65AD\u4EFB\u52A1/\u9000\u51FA \xB7 Ctrl+L \u6E05\u5C4F \xB7 \u8F93\u5165 /help \u67E5\u770B\u5185\u7F6E\u547D\u4EE4
|
|
809
824
|
\u5207\u6362\u9879\u76EE\u76EE\u5F55\uFF1A\u5728\u754C\u9762\u4E2D\u8F93\u5165 ${t.green}/switch <\u76EE\u5F55>${t.reset}
|
|
810
|
-
`;process.stdout.write(
|
|
811
|
-
${t.red}\u7384\u732A\u8FD0\u884C\u51FA\u9519\uFF1A${
|
|
825
|
+
`;process.stdout.write(r)}Lc().catch(r=>{process.stdout.write(`
|
|
826
|
+
${t.red}\u7384\u732A\u8FD0\u884C\u51FA\u9519\uFF1A${ne(r)}${t.reset}
|
|
812
827
|
`),process.exit(1)});
|