xuanzhu 0.4.2 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var _o=Object.create;var Xn=Object.defineProperty;var Po=Object.getOwnPropertyDescriptor;var Ro=Object.getOwnPropertyNames;var Mo=Object.getPrototypeOf,Io=Object.prototype.hasOwnProperty;var Do=(n,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ro(e))!Io.call(n,i)&&i!==r&&Xn(n,i,{get:()=>e[i],enumerable:!(s=Po(e,i))||s.enumerable});return n};var v=(n,e,r)=>(r=n!=null?_o(Mo(n)):{},Do(e||!n||!n.__esModule?Xn(r,"default",{value:n,enumerable:!0}):r,n));var ut=v(require("fs")),br=v(require("path"));var ee=v(require("fs"));var J=v(require("fs")),dt=v(require("os")),le=v(require("path"));function T(){let n=process.env.XZH_HOME?.trim();return n?le.resolve(q(n)):le.join(dt.homedir(),".xzh")}function Oo(){return!!process.env.XZH_HOME?.trim()}function Lo(){return le.join(dt.homedir(),".xuanzhu")}function D(){return le.join(T(),"config.json")}function Vn(){return le.join(__dirname,"skills")}function Yn(){return le.join(T(),"skills")}function Zn(){if(Oo())return{migrated:!1};let n=Lo(),e=T();if(le.resolve(n)===le.resolve(e))return{migrated:!1};try{if(J.existsSync(e)||!J.existsSync(n))return{migrated:!1}}catch{return{migrated:!1}}try{return J.renameSync(n,e),{migrated:!0,from:n,to:e}}catch{}let r=`${e}.migrating-${process.pid}`;try{J.rmSync(r,{recursive:!0,force:!0}),J.cpSync(n,r,{recursive:!0}),J.renameSync(r,e)}catch{try{J.rmSync(r,{recursive:!0,force:!0})}catch{}return{migrated:!1}}try{J.rmSync(n,{recursive:!0,force:!0})}catch{}return{migrated:!0,from:n,to:e}}function Z(n){J.existsSync(n)||J.mkdirSync(n,{recursive:!0})}function q(n){return n&&(n==="~"?dt.homedir():n.startsWith("~/")||n.startsWith("~\\")?le.join(dt.homedir(),n.slice(2)):n)}var C=v(require("fs")),he=v(require("path")),No=".xuanzhu",jo="MEMORY.md",Bo=`# \u9879\u76EE\u89C4\u5219
2
+ "use strict";var Po=Object.create;var Gn=Object.defineProperty;var Ro=Object.getOwnPropertyDescriptor;var Mo=Object.getOwnPropertyNames;var Io=Object.getPrototypeOf,Do=Object.prototype.hasOwnProperty;var Oo=(n,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Mo(e))!Do.call(n,i)&&i!==r&&Gn(n,i,{get:()=>e[i],enumerable:!(s=Ro(e,i))||s.enumerable});return n};var v=(n,e,r)=>(r=n!=null?Po(Io(n)):{},Oo(e||!n||!n.__esModule?Gn(r,"default",{value:n,enumerable:!0}):r,n));var dt=v(require("fs")),br=v(require("path"));var ee=v(require("fs"));var J=v(require("fs")),pt=v(require("os")),le=v(require("path"));function T(){let n=process.env.XZH_HOME?.trim();return n?le.resolve(q(n)):le.join(pt.homedir(),".xzh")}function Lo(){return!!process.env.XZH_HOME?.trim()}function No(){return le.join(pt.homedir(),".xuanzhu")}function D(){return le.join(T(),"config.json")}function Xn(){return le.join(__dirname,"skills")}function Vn(){return le.join(T(),"skills")}function Yn(){if(Lo())return{migrated:!1};let n=No(),e=T();if(le.resolve(n)===le.resolve(e))return{migrated:!1};try{if(J.existsSync(e)||!J.existsSync(n))return{migrated:!1}}catch{return{migrated:!1}}try{return J.renameSync(n,e),{migrated:!0,from:n,to:e}}catch{}let r=`${e}.migrating-${process.pid}`;try{J.rmSync(r,{recursive:!0,force:!0}),J.cpSync(n,r,{recursive:!0}),J.renameSync(r,e)}catch{try{J.rmSync(r,{recursive:!0,force:!0})}catch{}return{migrated:!1}}try{J.rmSync(n,{recursive:!0,force:!0})}catch{}return{migrated:!0,from:n,to:e}}function Z(n){J.existsSync(n)||J.mkdirSync(n,{recursive:!0})}function q(n){return n&&(n==="~"?pt.homedir():n.startsWith("~/")||n.startsWith("~\\")?le.join(pt.homedir(),n.slice(2)):n)}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
- `,Uo="AGENTS.md";function es(n){try{return C.existsSync(n)&&C.readFileSync(n,"utf8").trim()||null}catch{return null}}var Fo=`# \u9879\u76EE\u89C4\u5219
14
+ `,Fo="AGENTS.md";function es(n){try{return C.existsSync(n)&&C.readFileSync(n,"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,18 +22,18 @@
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 Qn(n){return es(he.join(n,Uo))===null?Bo:`${Fo}
26
- `}function zo(n){let e=he.join(n,No),r=he.join(e,"memory");return{root:n,dir:e,memoryDir:r,longTermFile:he.join(r,jo),rulesFile:he.join(e,"rules.md")}}function Q(n){return zo(he.resolve(n))}function Cr(n){let e=Q(n);if(C.existsSync(e.dir)){C.mkdirSync(e.memoryDir,{recursive:!0});try{C.existsSync(e.rulesFile)||C.writeFileSync(e.rulesFile,Qn(e.root),"utf8")}catch{}return{paths:e,created:!1}}try{return C.mkdirSync(e.memoryDir,{recursive:!0}),C.writeFileSync(e.rulesFile,Qn(e.root),"utf8"),{paths:e,created:!0}}catch{return{paths:e,created:!1}}}function ts(n){return es(Q(n).rulesFile)}function Jo(n,e=new Date){let r=`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`;return he.join(Q(n).memoryDir,`${r}.md`)}function pt(n){let e=Q(n),r="",s="",i="";try{C.existsSync(e.longTermFile)&&(r=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:r,recentDailyName:i,recentDaily:s}}function rs(n,e,r){let s=Q(n);C.mkdirSync(s.memoryDir,{recursive:!0});let i=new Date,o=h=>String(h).padStart(2,"0"),a=`${i.getFullYear()}-${o(i.getMonth()+1)}-${o(i.getDate())} ${o(i.getHours())}:${o(i.getMinutes())}`,l=r==="long"?s.longTermFile:Jo(n,i),c=`
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 Zn(n){return es(he.join(n,Fo))===null?Uo:`${zo}
26
+ `}function Jo(n){let e=he.join(n,jo),r=he.join(e,"memory");return{root:n,dir:e,memoryDir:r,longTermFile:he.join(r,Bo),rulesFile:he.join(e,"rules.md")}}function Q(n){return Jo(he.resolve(n))}function wr(n){let e=Q(n);if(C.existsSync(e.dir)){C.mkdirSync(e.memoryDir,{recursive:!0});try{C.existsSync(e.rulesFile)||C.writeFileSync(e.rulesFile,Zn(e.root),"utf8")}catch{}return{paths:e,created:!1}}try{return C.mkdirSync(e.memoryDir,{recursive:!0}),C.writeFileSync(e.rulesFile,Zn(e.root),"utf8"),{paths:e,created:!0}}catch{return{paths:e,created:!1}}}function ts(n){return es(Q(n).rulesFile)}function Ko(n,e=new Date){let r=`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`;return he.join(Q(n).memoryDir,`${r}.md`)}function Xe(n){let e=Q(n),r="",s="",i="";try{C.existsSync(e.longTermFile)&&(r=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:r,recentDailyName:i,recentDaily:s}}function rs(n,e,r){let s=Q(n);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=r==="long"?s.longTermFile:Ko(n,i),c=`
27
27
 
28
28
  ## ${a}
29
29
 
30
30
  ${e.trim()}
31
31
  `,u=C.existsSync(l)?"":r==="long"?`# \u9879\u76EE\u957F\u671F\u8BB0\u5FC6
32
32
  `:`# \u6BCF\u65E5\u8BB0\u5F55
33
- `;return C.appendFileSync(l,`${u}${c}`,"utf8"),l}var me=6e3;function Ko(n){let e=n.split(`
33
+ `;return C.appendFileSync(l,`${u}${c}`,"utf8"),l}var me=12e3;function ns(n){return/^##\s+\d{4}-\d{2}-\d{2}(\s+\d{2}:\d{2})?\s*$/.test(n)}function Ho(n){for(let e=n.length-1;e>=0;e--)if(ns(n[e].title))return e;return-1}function qo(n){let e=n.split(`
34
34
  `),r=-1;for(let c=0;c<e.length;c++)if(/^##\s/.test(e[c])){r=c;break}if(r<0)return{header:n.trim(),blocks:[]};let s=e.slice(0,r).join(`
35
35
  `).trim(),i=[],o="",a=[],l=()=>{o&&i.push({title:o,body:a.join(`
36
- `).trim()})};for(let c=r;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 wr(n,e){let r=n||"# \u9879\u76EE\u957F\u671F\u8BB0\u5FC6";if(e.length===0)return`${r}
36
+ `).trim()})};for(let c=r;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 Qn(n,e){let r=n||"# \u9879\u76EE\u957F\u671F\u8BB0\u5FC6";if(e.length===0)return`${r}
37
37
  `;let s=e.map(i=>`${i.title}
38
38
 
39
39
  ${i.body}`);return`${r}
@@ -41,10 +41,10 @@ ${i.body}`);return`${r}
41
41
  ${s.join(`
42
42
 
43
43
  `)}
44
- `}function Ho(n){return n.replace(/\s+/g," ").trim()}function qo(n,e=me){let r=Q(n);if(!C.existsSync(r.longTermFile))return null;let s;try{s=C.readFileSync(r.longTermFile,"utf8")}catch{return null}let i=s.trim().length,{header:o,blocks:a}=Ko(s);if(a.length===0)return{before:i,after:i,removedDuplicates:0,removedOldest:0};let l=new Set,c=[],u=0;for(let p of a){let m=Ho(p.body);if(m&&l.has(m)){u++;continue}m&&l.add(m),c.push(p)}let h=0;if(e>0){let p=Math.max(200,Math.floor(e));if(wr(o,c).trim().length>p){let m=wr(o,c).trim().length;for(;c.length>1&&m>p;){let f=c.shift();m-=f.title.length+f.body.length+4,h++}}}if(u===0&&h===0)return{before:i,after:i,removedDuplicates:0,removedOldest:0};let d=wr(o,c);return Tr(n,d),{before:i,after:d.trim().length,removedDuplicates:u,removedOldest:h}}function Tt(n,e=me){let r=!(e>0),s=Q(n),i;try{if(!C.existsSync(s.longTermFile))return null;i=C.readFileSync(s.longTermFile,"utf8").trim().length}catch{return null}return!r&&i<=e?null:qo(n,e)}function Tr(n,e){let r=Q(n);C.mkdirSync(r.memoryDir,{recursive:!0});let s=e.trim()?`${e.trim()}
45
- `:"",i=`${r.longTermFile}.${process.pid}.tmp`;return C.writeFileSync(i,s,"utf8"),C.renameSync(i,r.longTermFile),r.longTermFile}var Ar="{{'\u7528\u6237\u53D1\u9001\u8FC7\u6765\u7684\u6D88\u606F'}}",ss=`\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 ${Ar}`;function is(n,e){if(n.includes(Ar))return n.replace(Ar,()=>e);let r=/\{\{\s*[^{}]*\s*\}\}/;return r.test(n)?n.replace(r,()=>e):`${n}
46
- \u6D88\u606F\uFF1A${e}`}var Wo=1,B={version:Wo,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 n=D();try{if(!ee.existsSync(n))return{...B,provider:"",model:"",models:[]};let e=ee.readFileSync(n,"utf8"),r=JSON.parse(e);return Xo(r)}catch(e){throw new Error(`\u8BFB\u53D6\u914D\u7F6E\u5931\u8D25\uFF08${n}\uFF09\uFF1A${e instanceof Error?e.message:String(e)}`)}}function Go(n){let e={id:n.id||ve(n.provider,n.model),provider:n.provider,model:n.model};return n.apiKey&&(e.apiKey=n.apiKey),n.baseUrl&&(e.baseUrl=n.baseUrl),kr(n.contextWindow)&&(e.contextWindow=Math.floor(n.contextWindow)),typeof n.vision=="boolean"&&(e.vision=n.vision),e}function Xo(n){let e=Array.isArray(n.models)?n.models.filter(r=>!!r&&typeof r.provider=="string"&&typeof r.model=="string").map(r=>Go(r)):B.models;return{...B,...n,models:e,intent:{enabled:n.intent?.enabled===!0,...n.intent?.prompt?{prompt:n.intent.prompt}:{}},providers:{...B.providers,...n.providers??{}},maxToolRounds:n.maxToolRounds??B.maxToolRounds,autoApprove:n.autoApprove??B.autoApprove,mouseCapture:n.mouseCapture??B.mouseCapture,confirmSensitiveRead:n.confirmSensitiveRead??B.confirmSensitiveRead,memoryMaxChars:n.memoryMaxChars??B.memoryMaxChars,maxParallelAgents:n.maxParallelAgents??B.maxParallelAgents,temperature:n.temperature??B.temperature}}function W(n){Z(T());let e=D(),r=JSON.stringify(n,null,2)+`
47
- `,s=`${e}.${process.pid}.tmp`;ee.writeFileSync(s,r,{mode:384});try{ee.chmodSync(s,384)}catch{}ee.renameSync(s,e);try{ee.chmodSync(e,384)}catch{}}function ht(){return ee.existsSync(D())}function ns(n){return n?n.length<=8?"****":`${n.slice(0,4)}...${n.slice(-4)}`:"(\u672A\u8BBE\u7F6E)"}function os(n){let e={};for(let[r,s]of Object.entries(n.providers))e[r]={...s,apiKey:ns(s.apiKey)};return{version:n.version,provider:n.provider,model:n.model,models:U(n).map(r=>({id:r.id,...r.contextWindow?{contextWindow:r.contextWindow}:{},...r.vision===void 0?{}:{vision:r.vision},...r.baseUrl?{baseUrl:r.baseUrl}:{},...r.apiKey?{apiKey:ns(r.apiKey)}:{}})),intent:{enabled:n.intent?.enabled===!0,...n.intent?.prompt?{prompt:n.intent.prompt}:{}},temperature:n.temperature,maxToolRounds:n.maxToolRounds,autoApprove:n.autoApprove,memoryMaxChars:n.memoryMaxChars??B.memoryMaxChars,maxParallelAgents:n.maxParallelAgents??B.maxParallelAgents,systemPromptExtra:n.systemPromptExtra??"",providers:e}}function ve(n,e){return`${n}/${e}`}function U(n){if(n.models&&n.models.length>0)return n.models.map(s=>({...s}));let e=n.provider,r=n.providers[e]?.model||n.model;return e&&r?[{id:ve(e,r),provider:e,model:r}]:[]}function je(n){let e=U(n);if(e.length===0)return null;let r=n.provider&&n.model?ve(n.provider,n.model):"";return e.find(s=>s.id===r)??e[0]}function as(n,e,r=[]){let s=U(n);if(s.length===0)return null;let i=new Set(r);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 ls(n,e){n.provider=e.provider,n.model=e.model,n.providers={...n.providers,[e.provider]:{...n.providers[e.provider]??{},model:e.model}}}function Xe(n){return(!n.models||n.models.length===0)&&(n.models=U(n)),n.models}function kr(n){return typeof n=="number"&&Number.isFinite(n)&&n>0}function cs(n,e){let r=Xe(n),s=ve(e.provider,e.model),i=r.find(a=>a.id===s);if(i)return e.apiKey&&(i.apiKey=e.apiKey),e.baseUrl&&(i.baseUrl=e.baseUrl),kr(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}:{},...kr(e.contextWindow)?{contextWindow:Math.floor(e.contextWindow)}:{},...typeof e.vision=="boolean"?{vision:e.vision}:{}};return r.push(o),o}function Vo(n,e){let r=n.findIndex(o=>o.id===e);if(r>=0)return r;let s=n.findIndex(o=>o.model===e);if(s>=0)return s;let i=Number.parseInt(e,10);return!Number.isNaN(i)&&i>=1&&i<=n.length?i-1:-1}function us(n,e){let r=Xe(n),s=Vo(r,e);if(s<0)return null;let[i]=r.splice(s,1),o=n.provider&&n.model?ve(n.provider,n.model):"";if(i&&i.id===o){let a=r[0];n.provider=a?a.provider:"",n.model=a?a.model:""}return i??null}var ys=v(require("@anthropic-ai/sdk"));var ps=v(require("http")),hs=v(require("https"));function ms(n){let e=!/^http:\/\//i.test(n),r={keepAlive:!1};return e?new hs.Agent(r):new ps.Agent(r)}var ds=new Set(["ECONNRESET","ECONNREFUSED","ECONNABORTED","ETIMEDOUT","EPIPE","ENOTFOUND","EAI_AGAIN","UND_ERR_SOCKET","UND_ERR_CONNECT_TIMEOUT","ERR_STREAM_PREMATURE_CLOSE"]),Yo=["premature close","socket hang up","other side closed","fetch failed","network error","connection error","connection reset","terminated","timeout","timed out"];function Zo(n){return n&&n.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(n){return typeof n=="string"?n:typeof n=="number"||typeof n=="boolean"?String(n):""}function Ve(n){if(typeof n=="number"&&Number.isFinite(n))return n;if(typeof n=="string"){let e=Number.parseInt(n,10);if(!Number.isNaN(e))return e}}function Qo(n){let e=n,r=I(e?.message);if(r)return r;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(n instanceof Error&&n.message)return n.message;try{let c=JSON.stringify(n);if(c&&c!=="{}")return c}catch{}let l=String(n);return l==="[object Object]"?"\u672A\u77E5\u9519\u8BEF\uFF08\u65E0\u6CD5\u89E3\u6790\u9519\u8BEF\u8BE6\u60C5\uFF09":l}function Er(n){let e=n,r=Ve(e?.status);if(r!==void 0){if(r===408||r===409||r===429||r>=500&&r<=599)return!0;if(r>=400&&r<500)return!1}let s=I(e?.code).toUpperCase();if(s&&ds.has(s))return!0;let i=e?.cause,o=I(i?.code).toUpperCase();if(o&&ds.has(o))return!0;let a=(I(e?.message)||I(i?.message)||String(n)).toLowerCase();return Yo.some(l=>a.includes(l))}function ce(n){return Zo(ea(n))}function _r(n){let e=n,r=Ve(e?.status);if(r===401||r===403||r===404)return!0;let s=(I(e?.message)||I(e?.error?.message)||I(e?.cause?.message)||String(n)).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 Pr(n){return Ve(n?.status)===404}function At(n){let e=n,r=Ve(e?.status);if(r!==void 0&&(r<400||r>=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(n)).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 kt(n){let e=n,r=Ve(e?.status);if(r!==void 0&&(r<400||r>=500))return!1;let s=(I(e?.message)||I(e?.error?.message)||I(e?.cause?.message)||String(n)).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 ea(n){let e=n,r=Qo(n),s=r.toLowerCase(),i=I(e?.code).toUpperCase(),o=Ve(e?.status);if(At(n))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
44
+ `}function Wo(n){return n.replace(/\s+/g," ").trim()}function Go(n,e=me){let r=Q(n);if(!C.existsSync(r.longTermFile))return null;let s;try{s=C.readFileSync(r.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=Qn(o,c).trim().length;for(;m>h;){let f=Ho(c),y=c.findIndex((S,$)=>ns(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=Qn(o,c);return Cr(n,d),{before:i,after:d.trim().length,removedDuplicates:u,removedOldest:p}}function Tt(n,e=me){let r=!(e>0),s=Q(n),i;try{if(!C.existsSync(s.longTermFile))return null;i=C.readFileSync(s.longTermFile,"utf8").trim().length}catch{return null}return!r&&i<=e?null:Go(n,e)}function Cr(n,e){let r=Q(n);C.mkdirSync(r.memoryDir,{recursive:!0});let s=e.trim()?`${e.trim()}
45
+ `:"",i=`${r.longTermFile}.${process.pid}.tmp`;return C.writeFileSync(i,s,"utf8"),C.renameSync(i,r.longTermFile),r.longTermFile}var Tr="{{'\u7528\u6237\u53D1\u9001\u8FC7\u6765\u7684\u6D88\u606F'}}",is=`\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 ${Tr}`;function os(n,e){if(n.includes(Tr))return n.replace(Tr,()=>e);let r=/\{\{\s*[^{}]*\s*\}\}/;return r.test(n)?n.replace(r,()=>e):`${n}
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 n=D();try{if(!ee.existsSync(n))return{...B,provider:"",model:"",models:[]};let e=ee.readFileSync(n,"utf8"),r=JSON.parse(e);return Yo(r)}catch(e){throw new Error(`\u8BFB\u53D6\u914D\u7F6E\u5931\u8D25\uFF08${n}\uFF09\uFF1A${e instanceof Error?e.message:String(e)}`)}}function Vo(n){let e={id:n.id||ve(n.provider,n.model),provider:n.provider,model:n.model};return n.apiKey&&(e.apiKey=n.apiKey),n.baseUrl&&(e.baseUrl=n.baseUrl),Ar(n.contextWindow)&&(e.contextWindow=Math.floor(n.contextWindow)),typeof n.vision=="boolean"&&(e.vision=n.vision),e}function Yo(n){let e=Array.isArray(n.models)?n.models.filter(r=>!!r&&typeof r.provider=="string"&&typeof r.model=="string").map(r=>Vo(r)):B.models;return{...B,...n,models:e,intent:{enabled:n.intent?.enabled===!0,...n.intent?.prompt?{prompt:n.intent.prompt}:{}},providers:{...B.providers,...n.providers??{}},maxToolRounds:n.maxToolRounds??B.maxToolRounds,autoApprove:n.autoApprove??B.autoApprove,mouseCapture:n.mouseCapture??B.mouseCapture,confirmSensitiveRead:n.confirmSensitiveRead??B.confirmSensitiveRead,memoryMaxChars:n.memoryMaxChars??B.memoryMaxChars,maxParallelAgents:n.maxParallelAgents??B.maxParallelAgents,temperature:n.temperature??B.temperature}}function W(n){Z(T());let e=D(),r=JSON.stringify(n,null,2)+`
47
+ `,s=`${e}.${process.pid}.tmp`;ee.writeFileSync(s,r,{mode:384});try{ee.chmodSync(s,384)}catch{}ee.renameSync(s,e);try{ee.chmodSync(e,384)}catch{}}function ht(){return ee.existsSync(D())}function ss(n){return n?n.length<=8?"****":`${n.slice(0,4)}...${n.slice(-4)}`:"(\u672A\u8BBE\u7F6E)"}function as(n){let e={};for(let[r,s]of Object.entries(n.providers))e[r]={...s,apiKey:ss(s.apiKey)};return{version:n.version,provider:n.provider,model:n.model,models:U(n).map(r=>({id:r.id,...r.contextWindow?{contextWindow:r.contextWindow}:{},...r.vision===void 0?{}:{vision:r.vision},...r.baseUrl?{baseUrl:r.baseUrl}:{},...r.apiKey?{apiKey:ss(r.apiKey)}:{}})),intent:{enabled:n.intent?.enabled===!0,...n.intent?.prompt?{prompt:n.intent.prompt}:{}},temperature:n.temperature,maxToolRounds:n.maxToolRounds,autoApprove:n.autoApprove,memoryMaxChars:n.memoryMaxChars??B.memoryMaxChars,maxParallelAgents:n.maxParallelAgents??B.maxParallelAgents,systemPromptExtra:n.systemPromptExtra??"",providers:e}}function ve(n,e){return`${n}/${e}`}function U(n){if(n.models&&n.models.length>0)return n.models.map(s=>({...s}));let e=n.provider,r=n.providers[e]?.model||n.model;return e&&r?[{id:ve(e,r),provider:e,model:r}]:[]}function je(n){let e=U(n);if(e.length===0)return null;let r=n.provider&&n.model?ve(n.provider,n.model):"";return e.find(s=>s.id===r)??e[0]}function ls(n,e,r=[]){let s=U(n);if(s.length===0)return null;let i=new Set(r);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 cs(n,e){n.provider=e.provider,n.model=e.model,n.providers={...n.providers,[e.provider]:{...n.providers[e.provider]??{},model:e.model}}}function Ve(n){return(!n.models||n.models.length===0)&&(n.models=U(n)),n.models}function Ar(n){return typeof n=="number"&&Number.isFinite(n)&&n>0}function us(n,e){let r=Ve(n),s=ve(e.provider,e.model),i=r.find(a=>a.id===s);if(i)return e.apiKey&&(i.apiKey=e.apiKey),e.baseUrl&&(i.baseUrl=e.baseUrl),Ar(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}:{},...Ar(e.contextWindow)?{contextWindow:Math.floor(e.contextWindow)}:{},...typeof e.vision=="boolean"?{vision:e.vision}:{}};return r.push(o),o}function Zo(n,e){let r=n.findIndex(o=>o.id===e);if(r>=0)return r;let s=n.findIndex(o=>o.model===e);if(s>=0)return s;let i=Number.parseInt(e,10);return!Number.isNaN(i)&&i>=1&&i<=n.length?i-1:-1}function ds(n,e){let r=Ve(n),s=Zo(r,e);if(s<0)return null;let[i]=r.splice(s,1),o=n.provider&&n.model?ve(n.provider,n.model):"";if(i&&i.id===o){let a=r[0];n.provider=a?a.provider:"",n.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(n){let e=!/^http:\/\//i.test(n),r={keepAlive:!1};return e?new ms.Agent(r):new hs.Agent(r)}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(n){return n&&n.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(n){return typeof n=="string"?n:typeof n=="number"||typeof n=="boolean"?String(n):""}function Ye(n){if(typeof n=="number"&&Number.isFinite(n))return n;if(typeof n=="string"){let e=Number.parseInt(n,10);if(!Number.isNaN(e))return e}}function ta(n){let e=n,r=I(e?.message);if(r)return r;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(n instanceof Error&&n.message)return n.message;try{let c=JSON.stringify(n);if(c&&c!=="{}")return c}catch{}let l=String(n);return l==="[object Object]"?"\u672A\u77E5\u9519\u8BEF\uFF08\u65E0\u6CD5\u89E3\u6790\u9519\u8BEF\u8BE6\u60C5\uFF09":l}function kr(n){let e=n,r=Ye(e?.status);if(r!==void 0){if(r===408||r===409||r===429||r>=500&&r<=599)return!0;if(r>=400&&r<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(n)).toLowerCase();return Qo.some(l=>a.includes(l))}function ce(n){return ea(ra(n))}function _r(n){let e=n,r=Ye(e?.status);if(r===401||r===403||r===404)return!0;let s=(I(e?.message)||I(e?.error?.message)||I(e?.cause?.message)||String(n)).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 Er(n){return Ye(n?.status)===404}function At(n){let e=n,r=Ye(e?.status);if(r!==void 0&&(r<400||r>=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(n)).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 kt(n){let e=n,r=Ye(e?.status);if(r!==void 0&&(r<400||r>=500))return!1;let s=(I(e?.message)||I(e?.error?.message)||I(e?.cause?.message)||String(n)).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 ra(n){let e=n,r=ta(n),s=r.toLowerCase(),i=I(e?.code).toUpperCase(),o=Ye(e?.status);if(At(n))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
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(r))return`${r}
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
@@ -53,36 +53,36 @@ ${s.join(`
53
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(kt(n))return`${r}
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=r.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${r}`:r}function fs(n){return new Promise(e=>setTimeout(e,n))}var ta=3,ra=n=>n*600,mt=class extends Error{constructor(){super("\u7EED\u4F20\u524D\u7F00\u4E0E\u5DF2\u8F93\u51FA\u5185\u5BB9\u4E0D\u4E00\u81F4"),this.name="ResumeMismatchError"}},Rr=class{text="";reasoning="";toolCalls=0;get hasDeliveredContent(){return this.text.length>0||this.reasoning.length>0}},Mr=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 mt;this.settled=!0;let r=this.collected.slice(this.previous.length);return this.collected="",r.length>0?r:null}finish(){if(!this.settled)throw new mt}},Ir=class{constructor(e){this.ledger=e;this.textPrefix=new Mr(e.text),this.suppressReasoning=e.reasoning.length>0,this.remainingToolCallSkips=e.toolCalls}textPrefix;suppressReasoning;remainingToolCallSkips;text(e){let r=this.textPrefix.accept(e);return r&&(this.ledger.text+=r),r}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*Ye(n,e,r={}){let s=r.maxAttempts??ta,i=r.backoffMs??ra,o=new Rr,a;for(let l=1;l<=s;l++){let c=new Ir(o);try{yield*e(c),c.finish();return}catch(u){if(u instanceof mt)throw a??u;if(a=u,!(!n.signal?.aborted&&l<s&&o.toolCalls===0&&Er(u)))throw u;let d=o.hasDeliveredContent;n.onRetry?.(l,s,u instanceof Error?u:new Error(String(u)),{resumed:d}),await fs(i(l))}}throw a}var na=[/^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],sa=[/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 Dr(n){let e=n.trim();if(!e)return!1;for(let r of na)if(r.test(e))return!1;for(let r of sa)if(r.test(e))return!0;return!1}var ia="custom";function Be(n){return typeof n.vision=="boolean"?n.vision:n.provider===ia?!0:Dr(n.model)}var oa=new Set(["image/png","image/jpeg","image/gif","image/webp"]);function gs(n){let e=n.trim().toLowerCase();return oa.has(e)?e:"image/png"}var ke="\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 ys.default({apiKey:e.apiKey,baseURL:e.baseUrl,maxRetries:0})}async*chat(e){yield*Ye(e,r=>this.streamOnce(e,r))}async*streamOnce(e,r){let{system:s,messages:i}=aa(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,h=!1;for await(let d of a)switch(d.type){case"message_start":{let p=d.message?.usage?.input_tokens;typeof p=="number"&&(c={inputTokens:p});break}case"content_block_start":{let p=d.content_block;p.type==="tool_use"&&(h=!0,l.set(d.index,{id:p.id,name:p.name,json:""}));break}case"content_block_delta":{let p=d.delta;if(p.type==="text_delta"&&p.text){let m=r.text(p.text);m&&(yield{type:"text",text:m})}else if(p.type==="input_json_delta"){let m=l.get(d.index);m&&(m.json+=p.partial_json??"")}else if(p.type==="thinking_delta"){let m=p.thinking;if(m){let f=r.reasoning(m);f&&(yield{type:"reasoning",text:f})}}break}case"message_delta":{d.delta?.stop_reason&&(u=d.delta.stop_reason);let p=d.usage?.output_tokens;typeof p=="number"&&(c={...c??{},outputTokens:p});break}default:break}for(let d of l.values())d.name&&r.toolCall()&&(yield{type:"tool_call",toolCall:{id:d.id,name:d.name,arguments:d.json||"{}"}});yield{type:"done",finishReason:h?"tool_calls":u,usage:c}}};function aa(n){let e=[],r=[];for(let s of n){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||ke}];for(let o of s.images)i.push({type:"image",source:{type:"base64",media_type:gs(o.mimeType),data:o.data}});r.push({role:"user",content:i});continue}r.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:ca(o.arguments)});r.push({role:"assistant",content:i})}else r.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=r[r.length-1];o&&o.role==="user"&&Array.isArray(o.content)&&o.content.every(a=>a.type==="tool_result")?o.content.push(i):r.push({role:"user",content:[i]})}}return{system:e.join(`
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=r.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${r}`:r}function gs(n){return new Promise(e=>setTimeout(e,n))}var na=3,sa=n=>n*600,mt=class extends Error{constructor(){super("\u7EED\u4F20\u524D\u7F00\u4E0E\u5DF2\u8F93\u51FA\u5185\u5BB9\u4E0D\u4E00\u81F4"),this.name="ResumeMismatchError"}},Pr=class{text="";reasoning="";toolCalls=0;get hasDeliveredContent(){return this.text.length>0||this.reasoning.length>0}},Rr=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 mt;this.settled=!0;let r=this.collected.slice(this.previous.length);return this.collected="",r.length>0?r:null}finish(){if(!this.settled)throw new mt}},Mr=class{constructor(e){this.ledger=e;this.textPrefix=new Rr(e.text),this.suppressReasoning=e.reasoning.length>0,this.remainingToolCallSkips=e.toolCalls}textPrefix;suppressReasoning;remainingToolCallSkips;text(e){let r=this.textPrefix.accept(e);return r&&(this.ledger.text+=r),r}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(n,e,r={}){let s=r.maxAttempts??na,i=r.backoffMs??sa,o=new Pr,a;for(let l=1;l<=s;l++){let c=new Mr(o);try{yield*e(c),c.finish();return}catch(u){if(u instanceof mt)throw a??u;if(a=u,!(!n.signal?.aborted&&l<s&&o.toolCalls===0&&kr(u)))throw u;let d=o.hasDeliveredContent;n.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 Ir(n){let e=n.trim();if(!e)return!1;for(let r of ia)if(r.test(e))return!1;for(let r of oa)if(r.test(e))return!0;return!1}var aa="custom";function Be(n){return typeof n.vision=="boolean"?n.vision:n.provider===aa?!0:Ir(n.model)}var la=new Set(["image/png","image/jpeg","image/gif","image/webp"]);function $s(n){let e=n.trim().toLowerCase();return la.has(e)?e:"image/png"}var ke="\u8BF7\u770B\u8FD9\u5F20\u56FE\u7247\u3002";var _t=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,r=>this.streamOnce(e,r))}async*streamOnce(e,r){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=r.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=r.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&&r.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(n){let e=[],r=[];for(let s of n){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||ke}];for(let o of s.images)i.push({type:"image",source:{type:"base64",media_type:$s(o.mimeType),data:o.data}});r.push({role:"user",content:i});continue}r.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)});r.push({role:"assistant",content:i})}else r.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=r[r.length-1];o&&o.role==="user"&&Array.isArray(o.content)&&o.content.every(a=>a.type==="tool_result")?o.content.push(i):r.push({role:"user",content:[i]})}}return{system:e.join(`
57
57
 
58
- `),messages:la(r)}}function $s(n){return typeof n=="string"?[{type:"text",text:n}]:n}function la(n){let e=[];for(let r of n){let s=e[e.length-1];if(s&&s.role===r.role){r.role==="user"?e[e.length-1]={role:"user",content:[...$s(s.content),...$s(r.content)]}:e[e.length-1]=r;continue}e.push(r)}for(;e.length>0&&e[0].role!=="user";)e.shift();return e}function ca(n){try{let e=JSON.parse(n||"{}");return typeof e=="object"&&e!==null?e:{}}catch{return{}}}var be=require("@google/generative-ai");var _t=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*Ye(e,r=>this.streamOnce(e,r))}async*streamOnce(e,r){let s=new be.GoogleGenerativeAI(this.apiKey),{system:i,contents:o}=pa(e.messages),a=e.tools.length>0?[{functionDeclarations:e.tools.map(ma)}]: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,h=!1,d=0;for await(let p of c.stream){if(e.signal?.aborted)break;let m=ua(p);if(m){let g=r.text(m);g&&(yield{type:"text",text:g})}let f=da(p);for(let g of f)h=!0,r.toolCall()&&(yield{type:"tool_call",toolCall:{id:`gemini_call_${Date.now()}_${d++}`,name:g.name,arguments:JSON.stringify(g.args??{})}});let y=p.usageMetadata;y&&(u={inputTokens:y.promptTokenCount,outputTokens:y.candidatesTokenCount})}yield{type:"done",finishReason:h?"tool_calls":"stop",usage:u}}};function ua(n){try{return n.text()??""}catch{return""}}function da(n){try{return n.functionCalls?.()??[]}catch{return[]}}function pa(n){let e=[],r=[];for(let s of n){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||ke}];for(let o of s.images)i.push({inlineData:{mimeType:o.mimeType,data:o.data}});r.push({role:"user",parts:i});continue}r.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:ga(o.arguments)}});i.length>0&&r.push({role:"model",parts:i});continue}if(s.role==="tool"){let i={functionResponse:{name:s.name??"unknown",response:{result:s.content}}},o=r[r.length-1];o&&o.role==="user"&&o.parts?.some(a=>"functionResponse"in a)?o.parts.push(i):r.push({role:"user",parts:[i]})}}return{system:e.join(`
58
+ `),messages:ua(r)}}function ys(n){return typeof n=="string"?[{type:"text",text:n}]:n}function ua(n){let e=[];for(let r of n){let s=e[e.length-1];if(s&&s.role===r.role){r.role==="user"?e[e.length-1]={role:"user",content:[...ys(s.content),...ys(r.content)]}:e[e.length-1]=r;continue}e.push(r)}for(;e.length>0&&e[0].role!=="user";)e.shift();return e}function da(n){try{let e=JSON.parse(n||"{}");return typeof e=="object"&&e!==null?e:{}}catch{return{}}}var be=require("@google/generative-ai");var Et=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,r=>this.streamOnce(e,r))}async*streamOnce(e,r){let s=new be.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=r.text(m);g&&(yield{type:"text",text:g})}let f=ha(h);for(let g of f)p=!0,r.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(n){try{return n.text()??""}catch{return""}}function ha(n){try{return n.functionCalls?.()??[]}catch{return[]}}function ma(n){let e=[],r=[];for(let s of n){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||ke}];for(let o of s.images)i.push({inlineData:{mimeType:o.mimeType,data:o.data}});r.push({role:"user",parts:i});continue}r.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&&r.push({role:"model",parts:i});continue}if(s.role==="tool"){let i={functionResponse:{name:s.name??"unknown",response:{result:s.content}}},o=r[r.length-1];o&&o.role==="user"&&o.parts?.some(a=>"functionResponse"in a)?o.parts.push(i):r.push({role:"user",parts:[i]})}}return{system:e.join(`
59
59
 
60
- `),contents:ha(r)}}function ha(n){let e=[];for(let r of n){let s=e[e.length-1];if(s&&s.role===r.role){s.parts=[...s.parts??[],...r.parts??[]];continue}e.push({role:r.role,parts:[...r.parts??[]]})}for(;e.length>0&&e[0].role!=="user";)e.shift();return e}function ma(n){return{name:n.name,description:n.description,parameters:Or(n.parameters)}}function Or(n){let e={type:fa(n.type)};if(n.description&&(e.description=n.description),n.enum&&(e.enum=n.enum),n.required&&(e.required=n.required),n.items&&(e.items=Or(n.items)),n.properties){let r={};for(let[s,i]of Object.entries(n.properties))r[s]=Or(i);e.properties=r}return e}function fa(n){switch(n.toLowerCase()){case"string":return be.SchemaType.STRING;case"number":return be.SchemaType.NUMBER;case"integer":return be.SchemaType.INTEGER;case"boolean":return be.SchemaType.BOOLEAN;case"array":return be.SchemaType.ARRAY;default:return be.SchemaType.OBJECT}}function ga(n){try{let e=JSON.parse(n||"{}");return typeof e=="object"&&e!==null?e:{}}catch{return{}}}var vs=v(require("openai"));var Pt=class{id;model;client;constructor(e){this.id=e.id,this.model=e.model;let r=e.baseUrl||"https://api.openai.com/v1";this.client=new vs.default({apiKey:e.apiKey||"not-needed",baseURL:e.baseUrl,httpAgent:ms(r),maxRetries:0})}async*chat(e){yield*Ye(e,r=>this.streamOnce(e,r))}async*streamOnce(e,r){let s=e.messages.map($a),i=e.tools.length>0?e.tools.map(ya):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 h of o){h.usage&&(c={inputTokens:h.usage.prompt_tokens,outputTokens:h.usage.completion_tokens});let d=h.choices?.[0];if(!d)continue;let p=d.delta;if(p){let m=p.content;if(typeof m=="string"&&m.length>0){let g=r.text(m);g&&(yield{type:"text",text:g})}let f=p.reasoning_content;if(typeof f=="string"&&f.length>0){let g=r.reasoning(f);g&&(yield{type:"reasoning",text:g})}let y=p.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[h,d]of a){if(!d.name)continue;let p={id:d.id||`call_${Date.now()}_${h}`,name:d.name,arguments:d.args||"{}"};r.toolCall()&&(yield{type:"tool_call",toolCall:p})}yield{type:"done",finishReason:u?"tool_calls":l,usage:c}}};function $a(n){switch(n.role){case"system":return{role:"system",content:n.content};case"user":{if(n.images&&n.images.length>0){let e=[{type:"text",text:n.content||ke}];for(let r of n.images)e.push({type:"image_url",image_url:{url:`data:${r.mimeType};base64,${r.data}`}});return{role:"user",content:e}}return{role:"user",content:n.content}}case"assistant":return n.toolCalls&&n.toolCalls.length>0?{role:"assistant",content:n.content||null,tool_calls:n.toolCalls.map(e=>({id:e.id,type:"function",function:{name:e.name,arguments:e.arguments}}))}:{role:"assistant",content:n.content};case"tool":return{role:"tool",content:n.content,tool_call_id:n.toolCallId??""};default:return{role:"user",content:n.content}}}function ya(n){return{type:"function",function:{name:n.name,description:n.description,parameters:n.parameters}}}function Ee(n){if(!n)return 0;let e=0,r=0;for(let s of n)s.codePointAt(0)<128?e++:r++;return Math.ceil(e/3.5)+r}var bs=1600;function Ze(n){let e=4+Ee(n.content??"");if(n.toolCalls)for(let r of n.toolCalls)e+=10+Ee(r.name)+Ee(r.arguments);return n.images&&n.images.length>0&&(e+=n.images.length*bs),e}function Nr(n,e=0){if(n.length===0)return n;let r=Math.max(0,Math.min(e,n.length)),s=-1;for(let i=n.length-1;i>=r;i--)if(n[i]?.images?.length){s=i;break}return n.map((i,o)=>{if(o===s)return i;let a=i.images;if(!a||a.length===0)return i;let c=`
60
+ `),contents:fa(r)}}function fa(n){let e=[];for(let r of n){let s=e[e.length-1];if(s&&s.role===r.role){s.parts=[...s.parts??[],...r.parts??[]];continue}e.push({role:r.role,parts:[...r.parts??[]]})}for(;e.length>0&&e[0].role!=="user";)e.shift();return e}function ga(n){return{name:n.name,description:n.description,parameters:Dr(n.parameters)}}function Dr(n){let e={type:$a(n.type)};if(n.description&&(e.description=n.description),n.enum&&(e.enum=n.enum),n.required&&(e.required=n.required),n.items&&(e.items=Dr(n.items)),n.properties){let r={};for(let[s,i]of Object.entries(n.properties))r[s]=Dr(i);e.properties=r}return e}function $a(n){switch(n.toLowerCase()){case"string":return be.SchemaType.STRING;case"number":return be.SchemaType.NUMBER;case"integer":return be.SchemaType.INTEGER;case"boolean":return be.SchemaType.BOOLEAN;case"array":return be.SchemaType.ARRAY;default:return be.SchemaType.OBJECT}}function ya(n){try{let e=JSON.parse(n||"{}");return typeof e=="object"&&e!==null?e:{}}catch{return{}}}var bs=v(require("openai"));var Pt=class{id;model;client;constructor(e){this.id=e.id,this.model=e.model;let r=e.baseUrl||"https://api.openai.com/v1";this.client=new bs.default({apiKey:e.apiKey||"not-needed",baseURL:e.baseUrl,httpAgent:fs(r),maxRetries:0})}async*chat(e){yield*Ze(e,r=>this.streamOnce(e,r))}async*streamOnce(e,r){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=r.text(m);g&&(yield{type:"text",text:g})}let f=h.reasoning_content;if(typeof f=="string"&&f.length>0){let g=r.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||"{}"};r.toolCall()&&(yield{type:"tool_call",toolCall:h})}yield{type:"done",finishReason:u?"tool_calls":l,usage:c}}};function va(n){switch(n.role){case"system":return{role:"system",content:n.content};case"user":{if(n.images&&n.images.length>0){let e=[{type:"text",text:n.content||ke}];for(let r of n.images)e.push({type:"image_url",image_url:{url:`data:${r.mimeType};base64,${r.data}`}});return{role:"user",content:e}}return{role:"user",content:n.content}}case"assistant":return n.toolCalls&&n.toolCalls.length>0?{role:"assistant",content:n.content||null,tool_calls:n.toolCalls.map(e=>({id:e.id,type:"function",function:{name:e.name,arguments:e.arguments}}))}:{role:"assistant",content:n.content};case"tool":return{role:"tool",content:n.content,tool_call_id:n.toolCallId??""};default:return{role:"user",content:n.content}}}function ba(n){return{type:"function",function:{name:n.name,description:n.description,parameters:n.parameters}}}function _e(n){if(!n)return 0;let e=0,r=0;for(let s of n)s.codePointAt(0)<128?e++:r++;return Math.ceil(e/3.5)+r}var xs=1600;function Qe(n){let e=4+_e(n.content??"");if(n.toolCalls)for(let r of n.toolCalls)e+=10+_e(r.name)+_e(r.arguments);return n.images&&n.images.length>0&&(e+=n.images.length*xs),e}function Lr(n,e=0){if(n.length===0)return n;let r=Math.max(0,Math.min(e,n.length)),s=-1;for(let i=n.length-1;i>=r;i--)if(n[i]?.images?.length){s=i;break}return n.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 jr(n,e){if(e<=0)return"";let r=0,s=0,i=0;for(let o of n){let a=o.codePointAt(0)<128,l=r+(a?1:0),c=s+(a?0:1);if(Math.ceil(l/3.5)+c>e)break;r=l,s=c,i+=o.length}return n.slice(0,i)}function va(n,e){let r=s=>{let i=s?30:50,o=s?n:{...n,images:void 0},a=Ze({...o,content:""});if(a+i>=e)return null;let l=n.content??"",c=e-a-i;if(Ee(l)<=c)return s?n:{...o,content:`${l}
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 Nr(n,e){if(e<=0)return"";let r=0,s=0,i=0;for(let o of n){let a=o.codePointAt(0)<128,l=r+(a?1:0),c=s+(a?0:1);if(Math.ceil(l/3.5)+c>e)break;r=l,s=c,i+=o.length}return n.slice(0,i)}function xa(n,e){let r=s=>{let i=s?30:50,o=s?n:{...n,images:void 0},a=Qe({...o,content:""});if(a+i>=e)return null;let l=n.content??"",c=e-a-i;if(_e(l)<=c)return s?n:{...o,content:`${l}
63
63
 
64
- [\u56FE\u7247\u5DF2\u7701\u7565\uFF1A\u56E0\u8D85\u51FA\u4E0A\u4E0B\u6587\u9884\u7B97]`};let u=jr(l,c),h=l.length-u.length;return{...o,content:`${u}
64
+ [\u56FE\u7247\u5DF2\u7701\u7565\uFF1A\u56E0\u8D85\u51FA\u4E0A\u4E0B\u6587\u9884\u7B97]`};let u=Nr(l,c),p=l.length-u.length;return{...o,content:`${u}
65
65
 
66
- \u2026\uFF08\u5185\u5BB9\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD ${h} \u5B57\u7B26\u4EE5\u9002\u914D\u6A21\u578B\u4E0A\u4E0B\u6587\u7A97\u53E3\uFF09`}};return r(!0)??r(!1)}function xs(n){if(n.length<=6)return n;let e=n.length-6;return n.map((r,s)=>{if(s>=e||r.role!=="tool")return r;let i=r.content??"";if(Ee(i)<=600)return r;let o=Math.floor(600*.6),a=600-o,l=jr(i,o),c=Math.min(i.length-l.length,Math.max(0,a)*3),u=c>0?i.slice(-c):"",h=i.length-l.length-u.length,d=`${l}
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 r(!0)??r(!1)}function Ss(n){if(n.length<=6)return n;let e=n.length-6;return n.map((r,s)=>{if(s>=e||r.role!=="tool")return r;let i=r.content??"";if(_e(i)<=600)return r;let o=Math.floor(600*.6),a=600-o,l=Nr(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 ${h} \u5B57\u7B26\u7684\u4E2D\u95F4\u5185\u5BB9\uFF09
68
+ \u2026\uFF08\u6B64\u5904\u7701\u7565 ${p} \u5B57\u7B26\u7684\u4E2D\u95F4\u5185\u5BB9\uFF09
69
69
 
70
- ${u}`;return h<=0||d.length>=i.length?r:{...r,content:d}})}function Br(n){return n.map(e=>{let r=e.images;if(!r||r.length===0)return e;let s=[...new Set(r.map(i=>i.mimeType))].join("\u3001");return{...e,content:`${e.content}
70
+ ${u}`;return p<=0||d.length>=i.length?r:{...r,content:d}})}function jr(n){return n.map(e=>{let r=e.images;if(!r||r.length===0)return e;let s=[...new Set(r.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 zs=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??_e,this.baseDir=e.baseDir??process.cwd(),this.logBufferSize=Math.max(50,e.logBufferSize??500)}async start(e={}){if(this.httpServer)return;let r=Js.createServer((i,o)=>this.handleHttp(i,o)),s=new $t.WebSocketServer({server:r});s.on("error",()=>{}),s.on("connection",(i,o)=>this.handleConnection(i,o)),await new Promise((i,o)=>{let a=c=>{if(r.removeListener("listening",l),c.code==="EADDRINUSE"){o(new Error(`\u7AEF\u53E3 ${this.port} \u5DF2\u88AB\u5360\u7528\u3002\u53EF\u80FD\u662F\uFF1A
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=Ss(n),s=r.length,i=0;for(let a=r.length-1;a>=0;a--){let l=Qe(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&&Qe(o[0])>e){let l=xa(o[0],e);if(l===null)return[];o[0]=l}return o}function Br(n,e,r){let s=ws(n,e),i=_e(r)+4,o=s-i;return Math.max(1,Math.min(Math.max(o,1e3),s))}function ws(n,e){let r=n&&n>0?n:Ue(e);return Math.floor(r*.8)}function Ur(n,e,r){let s=ws(n,e);return _e(r)+4>=s*.5}var Or={"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(n){let e=n.trim();if(!e)return 32e3;let r=e.toLowerCase(),s=Or[r];if(s)return s;let i=r.replace(/[-_]?(latest|preview|stable|beta|exp)$/,"").replace(/[-_]\d{6,8}$/,"").replace(/[:@].*$/,""),o=Or[i]??Object.entries(Or).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 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 Fr(n,e){return e>1?Math.max(1,Math.floor(n/e)):n}var Cs=new Map;function zr(n){let e=n||"",r=Cs.get(e);if(r)return r;let s=new It;return Cs.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 As(n,e){return e||n.defaultBaseUrl}function Jr(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&&!As(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 ks(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=>Jr(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=As(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 _t({id:s.id,apiKey:o,baseUrl:a,model:l});case"gemini":return new Et({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 st=v(require("fs")),Xs=v(require("os")),ln=v(require("path"));var K="0.4.3";var Ee=9317,Kr=1e4,Hr=process.env.XZH_DEVICE_PLUGIN_VERSION?.trim()||"1.110.0",_s=K;function qr(){return`${Date.now()}_${Math.random()}`}function Es(n){let e=qr();return n>=629?JSON.stringify({message_id:e,data:"ok",version:Hr,debug:!1,type:"hello"}):JSON.stringify({message_id:e,data:"\u8FDE\u63A5\u6210\u529F",debug:!1,type:"hello"})}function Ps(n){return JSON.stringify({type:"pong",data:n})}function Rs(n,e,r){return JSON.stringify({type:"command",message_id:qr(),data:{command:n,id:e,name:e,script:r}})}function Wr(n,e={}){return JSON.stringify({type:"command",message_id:qr(),data:{command:n,...e}})}function Ms(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 Gr(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 Is(n){if(typeof n=="string")return n;let e=n??{};return typeof e.log=="string"?e.log:""}var Re=v(require("fs")),Ks=v(require("http")),tt=v(require("os")),Ce=v(require("path")),$t=require("ws");var Us=v(require("net"));var Vr=n=>n,Lt=n=>Vr(n);function Xr(n){return Buffer.from(Vr(n))}function Os(n){return Buffer.concat(n.map(Vr))}var et=8,Ls=1,wa=2,Ds=64*1024*1024;var fe=6347,X=7347,ft=process.env.XZH_AUTOJS6_EXT_VERSION?.trim()||"1.0.13";function Ca(n,e){let r=Buffer.alloc(et);return r.writeInt32BE(n,0),r.writeInt32BE(e,4),r}function Nt(n){let e=Buffer.from(n,"utf8");return Os([Ca(e.length,Ls),e])}var Fe=class{buffer=Buffer.alloc(0);push(e){let r=Xr(e);this.buffer=this.buffer.length===0?r:Os([this.buffer,r]);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=Xr(this.buffer.subarray(et,et+i));this.buffer=Xr(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(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 Ns(n=ft){return JSON.stringify({type:"hello",data:{extensionVersion:n}})}function js(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 Ta=2e3,Yr=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,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 Us.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${Bs} ms\uFF09`),e.destroy())},Bs),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<Ta){if(this.quickFailures++,this.quickFailures>=Yr){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<Yr&&(this.quickFailures++,this.quickFailures>=Yr)){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,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()},r)}};var zs=v(require("net"));var Fs=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=zs.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 ${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,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=js(r);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 ${ft}`),this.options.onStatus?.(` \u624B\u673A\u539F\u59CB hello\uFF1A${ka(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 ka(n,e){let r=n.replace(/\s+/g," ").trim();return r.length>e?`${r.slice(0,e)}\u2026`:r}function Zr(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 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??Ee,this.baseDir=e.baseDir??process.cwd(),this.logBufferSize=Math.max(50,e.logBufferSize??500)}async start(e={}){if(this.httpServer)return;let r=Ks.createServer((i,o)=>this.handleHttp(i,o)),s=new $t.WebSocketServer({server:r});s.on("error",()=>{}),s.on("connection",(i,o)=>this.handleConnection(i,o)),await new Promise((i,o)=>{let a=c=>{if(r.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=()=>{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=en();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=en();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=Zr({host:this.preferredHostFor(s.id),port:this.port}),o=Ce.join(tt.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(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=en();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?Wr("stop",{id:i}):Wr("stopAll"))&&o++;return{ok:!0,path:e?this.resolvePath(e):"",delivered:o,devices:s.map(a=>Qr(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>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=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}):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=>Qr(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 ${Kr/1e3} \u79D2\u5185\u63E1\u624B\uFF0C\u5DF2\u65AD\u5F00\u3002`),a.close())},Kr),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,r,s,i){switch(r){case"hello":{let{name:o,appVersionCode:a}=Gr(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 ${Hr}\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}=Gr(s);e.info&&o&&(e.info.name=o);return}case"log":{let o=Is(s);if(!o)return;this.appendLog(Qr(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(tt.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
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
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}r.writeHead(200,{"content-type":"image/jpeg","content-length":String(o.data.length)}),r.end(o.data)}).catch(o=>i({ok:!1,message:String(o)},500));return}default:{r.writeHead(404,{"content-type":"text/plain; charset=utf-8"}),r.end(`not found
81
- `);return}}}};function zt(n,e){let r=n.replace(/\s+/g," ").trim();return r.length>e?`${r.slice(0,e)}\u2026`:r}function en(n){return n?n.name||n.id:"\u672A\u63E1\u624B\u8FDE\u63A5"}function tn(){let n=[],e=et.networkInterfaces();for(let r of Object.keys(e))for(let s of e[r]??[])s.family==="IPv4"&&!s.internal&&n.push(s.address);return n}var rn=v(require("http"));var Aa=5e3;function Me(n){if(typeof n=="number"&&n>0&&n<=65535)return n;let e=Number.parseInt(process.env.XZH_DEVICE_PORT??"",10);return Number.isFinite(e)&&e>0&&e<=65535?e:_e}var re=class{port;constructor(e=_e){this.port=e}getPort(){return this.port}screenshot(e=4e4){return new Promise(r=>{let s=rn.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){r({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{}r({ok:!1,message:l})})});s.on("error",i=>r({ok:!1,message:String(i)})),s.on("timeout",()=>{s.destroy(),r({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 r=await this.request(`/logs?limit=${encodeURIComponent(String(e))}`);return r?r.logs:null}async exec(e,r,s){let i=new URLSearchParams({cmd:e});r&&i.set("path",r),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(r=>{let s=rn.request({host:"127.0.0.1",port:this.port,path:e,method:"GET",timeout:Aa},i=>{let o=[];i.on("data",a=>o.push(a)),i.on("end",()=>{try{r(JSON.parse(Buffer.concat(o).toString("utf8")))}catch{r(null)}})});s.on("timeout",()=>{s.destroy(),r(null)}),s.on("error",()=>r(null)),s.end()})}};var nn=require("child_process"),tt=v(require("fs")),sn=v(require("path"));var on="https://github.com/SuperMonster003/AutoJs6/releases/";function Ks(){return sn.join(T(),"apks")}var ka=["arm64-v8a","armeabi-v7a","x86_64","x86"];function Jt(){try{let e=(0,nn.execFileSync)("adb",["devices"],{timeout:5e3,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).split(`
82
- `).slice(1).map(r=>r.trim()).filter(r=>r.endsWith(" device"));if(e.length>0){let r=(0,nn.execFileSync)("adb",["shell","getprop","ro.product.cpu.abi"],{timeout:5e3,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim();if(ka.includes(r))return{abi:r,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(n,e=Ks()){let r;try{r=tt.readdirSync(e)}catch{return null}for(let s of r){if(!s.toLowerCase().endsWith(".apk")||!s.toLowerCase().includes(n.toLowerCase()))continue;let i=sn.join(e,s);try{let o=tt.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 tt.existsSync("/system/build.prop")}catch{return!1}}function Ea(n){return n<1024*1024?`${Math.round(n/1024)} KB`:`${(n/(1024*1024)).toFixed(0)} MB`}function Ht(n){let{where:e,abi:r,address:s,localApk:i}=n,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${on}`),o.push(` \u9009 ${r} \u7248\u672C${r==="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${Ea(i.sizeBytes)}\uFF09`):o.push(` \u4E5F\u53EF\u4EE5\u628A\u5B89\u88C5\u5305\u653E\u5230 ${Ks()}/\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 an(n=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 > ${n} ? "\uFF08\u53EA\u5217\u524D ${n} \u4E2A\uFF09" : ""));`,` lines.slice(0, ${n}).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"},ne={hide:"\x1B[?25l",show:"\x1B[?25h",up:(n=1)=>`\x1B[${n}A`,down:(n=1)=>`\x1B[${n}B`,right:(n=1)=>`\x1B[${n}C`,left:(n=1)=>`\x1B[${n}D`,to:(n,e)=>`\x1B[${n};${e}H`,col:n=>`\x1B[${n}G`,clearLine:"\x1B[2K",clearToEnd:"\x1B[0K",clearScreen:"\x1B[2J"},qt={enterAlt:"\x1B[?1049h",exitAlt:"\x1B[?1049l",save:"\x1B[s",restore:"\x1B[u"};function _a(n){return n>=4352&&n<=4447||n>=11904&&n<=12350||n>=12353&&n<=13311||n>=13312&&n<=19903||n>=19968&&n<=40959||n>=40960&&n<=42191||n>=44032&&n<=55203||n>=63744&&n<=64255||n>=65072&&n<=65103||n>=65280&&n<=65376||n>=65504&&n<=65510||n>=127744&&n<=129791||n>=131072&&n<=262141}function N(n){let e=0;for(let r=0;r<n.length;r++){let s=n.codePointAt(r);if(s!==void 0){if(s===27){let i=/^\x1b\[[0-9;?]*[ -/]*[@-~]/.exec(n.slice(r));if(i){r+=i[0].length-1;continue}let o=/^\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)?/.exec(n.slice(r));if(o){r+=o[0].length-1;continue}}if(s>65535&&r++,s===9){e+=8-e%8;continue}s<32||s>=768&&s<=879||s>=8400&&s<=8447||s>=65024&&s<=65039||(e+=_a(s)?2:1)}}return e}function Pa(n){return/^\x1b\[[0-9;]*m$/.test(n)}function yt(n,e){let r=[];for(let s of n.split(`
85
- `)){if(s===""){r.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!==""&&(r.push(a.length>0?`${i}${t.reset}`:i),i=a.join(""),o=0),Pa(c)&&(c===t.reset||c==="\x1B[m"?a=[]:a.push(c)),i+=c,o+=u}r.push(a.length>0?`${i}${t.reset}`:i)}return r}function O(n,e){if(N(n)<=e)return n;let r=n.match(/\x1b\[[0-9;?]*[A-Za-z]|[\s\S]/gu)??[],s="",i=0,o=Math.max(0,e-1);for(let a of r){let l=N(a);if(i+l>o)break;s+=a,i+=l}return`${s}${t.reset}\u2026`}function vt(n,e){let r=N(n);return n+" ".repeat(Math.max(0,e-r))}function ge(n){return n&&n.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 Xs(n){let e=Ka(n);if(e.error){j(e.error);return}switch(e.sub){case"serve":case"start":return Ra(e);case"connect":return Ma(e);case"apk":return Ia(e);case"check":return Oa(e);case"shot":case"screenshot":return Da(e);case"status":return Na(e);case"list":case"ls":case"devices":return ja(e);case"push":case"save":return qs(e,"save");case"run":return qs(e,"run");case"stop":return Ba(e);case"logs":case"log":return Ua(e);case"help":case"-h":case"--help":case void 0:Fa();return;default:j(`\u672A\u77E5\u5B50\u547D\u4EE4\uFF1A${e.sub}`,"\u53EF\u7528\uFF1Aserve / status / list / push / run / stop / logs");return}}async function Ra(n){let e=n.port,r=new ze({port:e,baseDir:process.cwd(),onStatus:o=>process.stdout.write(`${t.gray}${o}${t.reset}
81
+ `);return}}}};function zt(n,e){let r=n.replace(/\s+/g," ").trim();return r.length>e?`${r.slice(0,e)}\u2026`:r}function Qr(n){return n?n.name||n.id:"\u672A\u63E1\u624B\u8FDE\u63A5"}function en(){let n=[],e=tt.networkInterfaces();for(let r of Object.keys(e))for(let s of e[r]??[])s.family==="IPv4"&&!s.internal&&n.push(s.address);return n}var tn=v(require("http"));var _a=5e3;function Me(n){if(typeof n=="number"&&n>0&&n<=65535)return n;let e=Number.parseInt(process.env.XZH_DEVICE_PORT??"",10);return Number.isFinite(e)&&e>0&&e<=65535?e:Ee}var re=class{port;constructor(e=Ee){this.port=e}getPort(){return this.port}screenshot(e=4e4){return new Promise(r=>{let s=tn.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){r({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{}r({ok:!1,message:l})})});s.on("error",i=>r({ok:!1,message:String(i)})),s.on("timeout",()=>{s.destroy(),r({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 r=await this.request(`/logs?limit=${encodeURIComponent(String(e))}`);return r?r.logs:null}async exec(e,r,s){let i=new URLSearchParams({cmd:e});r&&i.set("path",r),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(r=>{let s=tn.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{r(JSON.parse(Buffer.concat(o).toString("utf8")))}catch{r(null)}})});s.on("timeout",()=>{s.destroy(),r(null)}),s.on("error",()=>r(null)),s.end()})}};var rn=require("child_process"),rt=v(require("fs")),nn=v(require("path"));var sn="https://github.com/SuperMonster003/AutoJs6/releases/";function Hs(){return nn.join(T(),"apks")}var Ea=["arm64-v8a","armeabi-v7a","x86_64","x86"];function Jt(){try{let e=(0,rn.execFileSync)("adb",["devices"],{timeout:5e3,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).split(`
82
+ `).slice(1).map(r=>r.trim()).filter(r=>r.endsWith(" device"));if(e.length>0){let r=(0,rn.execFileSync)("adb",["shell","getprop","ro.product.cpu.abi"],{timeout:5e3,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim();if(Ea.includes(r))return{abi:r,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(n,e=Hs()){let r;try{r=rt.readdirSync(e)}catch{return null}for(let s of r){if(!s.toLowerCase().endsWith(".apk")||!s.toLowerCase().includes(n.toLowerCase()))continue;let i=nn.join(e,s);try{let o=rt.statSync(i);if(o.isFile())return{path:i,sizeBytes:o.size}}catch{}}return null}function nt(){if(process.env.PREFIX?.includes("com.termux")||process.env.ANDROID_ROOT||process.env.ANDROID_DATA)return!0;try{return rt.existsSync("/system/build.prop")}catch{return!1}}function Pa(n){return n<1024*1024?`${Math.round(n/1024)} KB`:`${(n/(1024*1024)).toFixed(0)} MB`}function Ht(n){let{where:e,abi:r,address:s,localApk:i}=n,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${sn}`),o.push(` \u9009 ${r} \u7248\u672C${r==="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 on(n=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 > ${n} ? "\uFF08\u53EA\u5217\u524D ${n} \u4E2A\uFF09" : ""));`,` lines.slice(0, ${n}).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"},ne={hide:"\x1B[?25l",show:"\x1B[?25h",up:(n=1)=>`\x1B[${n}A`,down:(n=1)=>`\x1B[${n}B`,right:(n=1)=>`\x1B[${n}C`,left:(n=1)=>`\x1B[${n}D`,to:(n,e)=>`\x1B[${n};${e}H`,col:n=>`\x1B[${n}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(n){return n>=4352&&n<=4447||n>=11904&&n<=12350||n>=12353&&n<=13311||n>=13312&&n<=19903||n>=19968&&n<=40959||n>=40960&&n<=42191||n>=44032&&n<=55203||n>=63744&&n<=64255||n>=65072&&n<=65103||n>=65280&&n<=65376||n>=65504&&n<=65510||n>=127744&&n<=129791||n>=131072&&n<=262141}function N(n){let e=0;for(let r=0;r<n.length;r++){let s=n.codePointAt(r);if(s!==void 0){if(s===27){let i=/^\x1b\[[0-9;?]*[ -/]*[@-~]/.exec(n.slice(r));if(i){r+=i[0].length-1;continue}let o=/^\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)?/.exec(n.slice(r));if(o){r+=o[0].length-1;continue}}if(s>65535&&r++,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(n){return/^\x1b\[[0-9;]*m$/.test(n)}function yt(n,e){let r=[];for(let s of n.split(`
85
+ `)){if(s===""){r.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!==""&&(r.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}r.push(a.length>0?`${i}${t.reset}`:i)}return r}function O(n,e){if(N(n)<=e)return n;let r=n.match(/\x1b\[[0-9;?]*[A-Za-z]|[\s\S]/gu)??[],s="",i=0,o=Math.max(0,e-1);for(let a of r){let l=N(a);if(i+l>o)break;s+=a,i+=l}return`${s}${t.reset}\u2026`}function vt(n,e){let r=N(n);return n+" ".repeat(Math.max(0,e-r))}function ge(n){return n&&n.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(n){let e=qa(n);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(n){let e=n.port,r=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(`
@@ -103,7 +103,7 @@ ${t.gray}\uFF08AutoX.js \u90A3\u4FA7\u4E0D\u53D7\u5F71\u54CD\uFF0C\u4ECD\u53EF\u
103
103
  `+r.listenerUrls().map(o=>` ${t.gray}\u624B\u673A AutoJs6 \u586B\uFF1A${t.reset}${t.brightGreen}${o}${t.reset}
104
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 r.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 Vs(()=>r.stop())}async function Ma(n){let e=rt(),r=n.positional[0]?.trim()??"",s="",i=X;if(r){let a=/^(.*?)(?::(\d+))?$/.exec(r);s=(a?.[1]??r).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`),ln({where:e?"phone":"pc"});return}let o=new ze({port:n.port,baseDir:process.cwd(),onStatus:a=>process.stdout.write(`${t.gray}${a}${t.reset}
106
+ `),await Ys(()=>r.stop())}async function Da(n){let e=nt(),r=n.positional[0]?.trim()??"",s="",i=X;if(r){let a=/^(.*?)(?::(\d+))?$/.exec(r);s=(a?.[1]??r).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`),an({where:e?"phone":"pc"});return}let o=new ze({port:n.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 La(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}
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
- `),ln({where:e?"phone":"pc",address:`${s}:${i}`}),!a){await o.stop(),process.exitCode=1;return}process.stdout.write(`
120
+ `),an({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 Vs(()=>o.stop())}async function Ia(n){ln({where:rt()?"phone":"pc"})}async function Da(n){let e=new re(n.port),r=await e.devices();if(!r){j(`\u8FDE\u4E0D\u4E0A\u8BBE\u5907\u6865\uFF08127.0.0.1:${n.port}\uFF09`,"\u5148\u542F\u52A8\uFF1Axzh device serve");return}if(r.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(`
123
+ `)}await Ys(()=>o.stop())}async function Oa(n){an({where:nt()?"phone":"pc"})}async function La(n){let e=new re(n.port),r=await e.devices();if(!r){j(`\u8FDE\u4E0D\u4E0A\u8BBE\u5907\u6865\uFF08127.0.0.1:${n.port}\uFF09`,"\u5148\u542F\u52A8\uFF1Axzh device serve");return}if(r.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=n.positional.find(o=>!o.startsWith("-"))??cn.join(process.cwd(),`xzh-shot-${new Date().toISOString().replace(/[:.]/g,"-")}.jpg`);try{nt.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}
125
+ `);let s=await e.screenshot();if(!s.ok){j(s.message);return}let i=n.positional.find(o=>!o.startsWith("-"))??ln.join(process.cwd(),`xzh-shot-${new Date().toISOString().replace(/[:.]/g,"-")}.jpg`);try{st.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 Oa(n){let e=new re(n.port),r=await e.devices();if(!r){j(`\u8FDE\u4E0D\u4E0A\u8BBE\u5907\u6865\uFF08127.0.0.1:${n.port}\uFF09`,"\u5148\u542F\u52A8\uFF1Axzh device serve");return}if(r.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=cn.join(Gs.tmpdir(),`xzh-device-check-${Date.now()}.js`);nt.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){nt.rmSync(s,{force:!0}),j(o.message??"\u4F53\u68C0\u811A\u672C\u672A\u80FD\u9001\u8FBE");return}process.stdout.write(`
127
+ `)}async function Na(n){let e=new re(n.port),r=await e.devices();if(!r){j(`\u8FDE\u4E0D\u4E0A\u8BBE\u5907\u6865\uFF08127.0.0.1:${n.port}\uFF09`,"\u5148\u542F\u52A8\uFF1Axzh device serve");return}if(r.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=ln.join(Xs.tmpdir(),`xzh-device-check-${Date.now()}.js`);st.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){st.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(nt.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}
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(st.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,15 +141,15 @@ ${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 ln(n){let e=Jt(),r=Ht({where:n.where,abi:e.abi,address:n.address,localApk:Kt(e.abi)});process.stdout.write(`
144
+ `),process.exitCode=1}function an(n){let e=Jt(),r=Ht({where:n.where,abi:e.abi,address:n.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
147
  `);for(let s of r.split(`
148
148
  `))process.stdout.write(`${s?`${t.gray}${s}${t.reset}`:""}
149
149
  `);process.stdout.write(`
150
- `)}async function La(n,e){let r=Date.now()+e;for(;Date.now()<r;){if(n.status().autojs6?.connected)return!0;await new Promise(s=>setTimeout(s,200))}return n.status().autojs6?.connected??!1}function Vs(n){return new Promise(e=>{let r=!1,s=()=>{r||(r=!0,process.stdout.write(`
150
+ `)}async function ja(n,e){let r=Date.now()+e;for(;Date.now()<r;){if(n.status().autojs6?.connected)return!0;await new Promise(s=>setTimeout(s,200))}return n.status().autojs6?.connected??!1}function Ys(n){return new Promise(e=>{let r=!1,s=()=>{r||(r=!0,process.stdout.write(`
151
151
  ${t.gray}\u6B63\u5728\u505C\u6B62\u8BBE\u5907\u6865\u2026${t.reset}
152
- `),n().finally(()=>e()))};process.once("SIGINT",s),process.once("SIGTERM",s)})}async function Na(n){let r=await new re(n.port).status();if(!r){process.stdout.write(`${t.yellow}\u8BBE\u5907\u6865\u672A\u8FD0\u884C${t.reset}${t.gray}\uFF08127.0.0.1:${n.port}\uFF09${t.reset}
152
+ `),n().finally(()=>e()))};process.once("SIGINT",s),process.once("SIGTERM",s)})}async function Ba(n){let r=await new re(n.port).status();if(!r){process.stdout.write(`${t.yellow}\u8BBE\u5907\u6865\u672A\u8FD0\u884C${t.reset}${t.gray}\uFF08127.0.0.1:${n.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
@@ -163,7 +163,7 @@ ${t.green}\u25CF${t.reset} \u8BBE\u5907\u6865\u8FD0\u884C\u4E2D
163
163
  `)),process.stdout.write(` ${t.gray}\u5DF2\u8FDE\u63A5\u8BBE\u5907\uFF1A${t.reset}${r.devices.length}
164
164
  `);for(let s of r.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 ja(n){let e=new re(n.port),r=await e.devices();if(!r){j(`\u8FDE\u4E0D\u4E0A\u8BBE\u5907\u6865\uFF08127.0.0.1:${n.port}\uFF09`,"\u5148\u542F\u52A8\uFF1Axzh device serve");return}if(r.length===0){let s=await e.status();process.stdout.write(`${t.yellow}\u5F53\u524D\u6CA1\u6709\u5DF2\u8FDE\u63A5\u7684\u8BBE\u5907${t.reset}
166
+ `)}async function Ua(n){let e=new re(n.port),r=await e.devices();if(!r){j(`\u8FDE\u4E0D\u4E0A\u8BBE\u5907\u6865\uFF08127.0.0.1:${n.port}\uFF09`,"\u5148\u542F\u52A8\uFF1Axzh device serve");return}if(r.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")+`
@@ -171,16 +171,16 @@ ${t.green}\u25CF${t.reset} \u8BBE\u5907\u6865\u8FD0\u884C\u4E2D
171
171
  ${t.bold}\u5DF2\u8FDE\u63A5\u8BBE\u5907\uFF08${r.length}\uFF09${t.reset}
172
172
  `);for(let s of r){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 qs(n,e){let r=n.positional[0];if(!r){j(`\u7528\u6CD5\uFF1Axzh device ${n.sub} <\u811A\u672C\u6587\u4EF6>`);return}let i=await new re(n.port).exec(e,r,n.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}
174
+ `)}async function Ws(n,e){let r=n.positional[0];if(!r){j(`\u7528\u6CD5\uFF1Axzh device ${n.sub} <\u811A\u672C\u6587\u4EF6>`);return}let i=await new re(n.port).exec(e,r,n.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 Ba(n){let e=new re(n.port),r=n.all?void 0:n.positional[0],s=await e.exec(r?"stop":"stopAll",r,n.device);if(!s.ok){j(s.message??"\u505C\u6B62\u5931\u8D25");return}process.stdout.write(`${t.green}\u2713${t.reset} ${r?`\u5DF2\u505C\u6B62 ${r}`:"\u5DF2\u505C\u6B62\u5168\u90E8\u811A\u672C"}
178
- `)}async function Ua(n){let r=await new re(n.port).logs(n.limit);if(!r){j(`\u8FDE\u4E0D\u4E0A\u8BBE\u5907\u6865\uFF08127.0.0.1:${n.port}\uFF09`,"\u5148\u542F\u52A8\uFF1Axzh device serve");return}if(r.length===0){process.stdout.write(`${t.gray}\u6682\u65E0\u8BBE\u5907\u65E5\u5FD7\u3002${t.reset}
177
+ `:""))}async function Fa(n){let e=new re(n.port),r=n.all?void 0:n.positional[0],s=await e.exec(r?"stop":"stopAll",r,n.device);if(!s.ok){j(s.message??"\u505C\u6B62\u5931\u8D25");return}process.stdout.write(`${t.green}\u2713${t.reset} ${r?`\u5DF2\u505C\u6B62 ${r}`:"\u5DF2\u505C\u6B62\u5168\u90E8\u811A\u672C"}
178
+ `)}async function za(n){let r=await new re(n.port).logs(n.limit);if(!r){j(`\u8FDE\u4E0D\u4E0A\u8BBE\u5907\u6865\uFF08127.0.0.1:${n.port}\uFF09`,"\u5148\u542F\u52A8\uFF1Axzh device serve");return}if(r.length===0){process.stdout.write(`${t.gray}\u6682\u65E0\u8BBE\u5907\u65E5\u5FD7\u3002${t.reset}
179
179
  `);return}process.stdout.write(`
180
180
  ${t.bold}\u6700\u8FD1 ${r.length} \u6761\u8BBE\u5907\u65E5\u5FD7${t.reset}
181
181
  `);for(let s of r){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 Fa(){process.stdout.write(`
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 ${_e}\uFF08\u4E5F\u53EF\u7528\u73AF\u5883\u53D8\u91CF XZH_DEVICE_PORT\uFF09
206
+ ${t.gray}--port <\u7AEF\u53E3>${t.reset} \u9ED8\u8BA4 ${Ee}\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,19 +212,19 @@ ${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 ${_e} \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
215
+ \xB7 serve \u4F1A\u5360\u7528 ${Ee} \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}${on}${t.gray} \u81EA\u884C\u4E0B\u8F7D\u3002
217
+ \xB7 \u7384\u732A\u4E0D\u6253\u5305 AutoJs6 \u5B89\u88C5\u5305\uFF08\u6BCF\u4E2A ABI \u7EA6 130 MB\uFF09\uFF0C\u7531 ${t.reset}${sn}${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 za=new Set(["--port","--device","-n","--limit"]),Ja=new Set(["--all","-h","--help"]);function Ka(n){let e={sub:void 0,positional:[],port:Me(),limit:50,all:!1},r=[...n];for(e.sub=r.shift();r.length>0;){let s=r.shift();if(Ja.has(s)){s==="--all"?e.all=!0:e.positional.push(s);continue}if(s==="--"){e.positional.push(...r);break}let i=/^(--[a-z-]+)=(.*)$/.exec(s);if(i){if(Ws(e,i[1],i[2]),e.error)return e;continue}if(za.has(s)){let o=r.shift();if(o===void 0)return{...e,error:`${s} \u7F3A\u5C11\u53D6\u503C`};if(Ws(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 Ws(n,e,r){switch(e){case"--port":{let s=Number.parseInt(r,10);if(!Number.isFinite(s)||s<1||s>65535){n.error=`\u7AEF\u53E3\u4E0D\u5408\u6CD5\uFF1A${r}`;return}n.port=s;return}case"--device":n.device=r;return;case"-n":case"--limit":{let s=Number.parseInt(r,10);if(!Number.isFinite(s)||s<1){n.error=`\u6761\u6570\u4E0D\u5408\u6CD5\uFF1A${r}`;return}n.limit=s;return}default:n.error=`\u672A\u77E5\u53C2\u6570\uFF1A${e}`}}function j(n,e){process.stdout.write(`${t.red}\u2717 ${n}${t.reset}
219
+ `)}var Ka=new Set(["--port","--device","-n","--limit"]),Ha=new Set(["--all","-h","--help"]);function qa(n){let e={sub:void 0,positional:[],port:Me(),limit:50,all:!1},r=[...n];for(e.sub=r.shift();r.length>0;){let s=r.shift();if(Ha.has(s)){s==="--all"?e.all=!0:e.positional.push(s);continue}if(s==="--"){e.positional.push(...r);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=r.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(n,e,r){switch(e){case"--port":{let s=Number.parseInt(r,10);if(!Number.isFinite(s)||s<1||s>65535){n.error=`\u7AEF\u53E3\u4E0D\u5408\u6CD5\uFF1A${r}`;return}n.port=s;return}case"--device":n.device=r;return;case"-n":case"--limit":{let s=Number.parseInt(r,10);if(!Number.isFinite(s)||s<1){n.error=`\u6761\u6570\u4E0D\u5408\u6CD5\uFF1A${r}`;return}n.limit=s;return}default:n.error=`\u672A\u77E5\u53C2\u6570\uFF1A${e}`}}function j(n,e){process.stdout.write(`${t.red}\u2717 ${n}${t.reset}
220
220
  `),e&&process.stdout.write(`${t.gray} ${e}${t.reset}
221
- `),process.exitCode=1}var pe=v(require("fs")),Oe=v(require("path"));var Ys=v(require("crypto")),V=v(require("fs")),ue=v(require("path"));function Ha(){return ue.join(T(),"sessions")}function Zs(n){let e=Ys.createHash("sha1").update(ue.resolve(n)).digest("hex").slice(0,10),r=ue.basename(n)||"project";return ue.join(Ha(),`${r}-${e}`)}function bt(n,e){let r=Zs(n);Z(r);let s=new Date().toISOString().replace(/[:.]/g,"-"),i=ue.join(r,`${s}.jsonl`);for(let o=2;V.existsSync(i);o++)i=ue.join(r,`${s}-${o}.jsonl`);try{V.writeFileSync(i,`${JSON.stringify({type:"meta",cwd:ue.resolve(n),version:e,startedAt:new Date().toISOString()})}
222
- `)}catch{}return i}function un(n,e){if(e.length!==0)try{let r=e.map(s=>{let i=s.images&&s.images.length>0?{...s,images:void 0,content:`${s.content??""}
221
+ `),process.exitCode=1}var pe=v(require("fs")),Oe=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(n){let e=Zs.createHash("sha1").update(ue.resolve(n)).digest("hex").slice(0,10),r=ue.basename(n)||"project";return ue.join(Wa(),`${r}-${e}`)}function bt(n,e){let r=Qs(n);Z(r);let s=new Date().toISOString().replace(/[:.]/g,"-"),i=ue.join(r,`${s}.jsonl`);for(let o=2;V.existsSync(i);o++)i=ue.join(r,`${s}-${o}.jsonl`);try{V.writeFileSync(i,`${JSON.stringify({type:"meta",cwd:ue.resolve(n),version:e,startedAt:new Date().toISOString()})}
222
+ `)}catch{}return i}function cn(n,e){if(e.length!==0)try{let r=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,r.join(""))}catch{}}function dn(n){let e=Zs(n),r;try{r=V.readdirSync(e).filter(i=>i.endsWith(".jsonl")).sort().reverse()}catch{return[]}let s=[];for(let i of r){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 pn(n){let e=[];try{for(let r of V.readFileSync(n,"utf8").split(`
227
- `))if(r.trim())try{let s=JSON.parse(r);s.type==="message"&&s.message?.role&&e.push(s.message)}catch{}}catch{}return e}var Qs={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:n,description:e,prompt:r}){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
225
+ `});V.appendFileSync(n,r.join(""))}catch{}}function un(n){let e=Qs(n),r;try{r=V.readdirSync(e).filter(i=>i.endsWith(".jsonl")).sort().reverse()}catch{return[]}let s=[];for(let i of r){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 dn(n){let e=[];try{for(let r of V.readFileSync(n,"utf8").split(`
227
+ `))if(r.trim())try{let s=JSON.parse(r);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:n,description:e,prompt:r}){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
229
  \u5DE5\u4F5C\u76EE\u5F55\uFF1A${n}
230
230
  \u5B50\u4EFB\u52A1\uFF1A${e}
@@ -251,7 +251,7 @@ ${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
- ${r.trim()}`}};var ei={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:n,description:e,prompt:r}){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
254
+ ${r.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:n,description:e,prompt:r}){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
256
  \u5DE5\u4F5C\u76EE\u5F55\uFF1A${n}
257
257
  \u5B50\u4EFB\u52A1\uFF1A${e}
@@ -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
- ${r.trim()}`}};var st=[Qs,ei],hn=st[0].name;function xt(){return st.map(n=>n.name)}function Wt(n){let e=n?.trim();return e?st.find(r=>r.name===e):st.find(r=>r.name===hn)}var qa=st.map(n=>`- ${n.name}: ${n.description}`).join(`
284
- `),ti={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
283
+ ${r.trim()}`}};var it=[ei,ti],pn=it[0].name;function xt(){return it.map(n=>n.name)}function Wt(n){let e=n?.trim();return e?it.find(r=>r.name===e):it.find(r=>r.name===pn)}var Ga=it.map(n=>`- ${n.name}: ${n.description}`).join(`
284
+ `),ri={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,59 +293,59 @@ ${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
- ${qa}
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:xt(),description:`\u8981\u6D3E\u751F\u7684\u5B50\u4EE3\u7406\u540D\u79F0\uFF0C\u9ED8\u8BA4 ${hn}\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(n,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 r=typeof n.description=="string"?n.description.trim():"",s=typeof n.prompt=="string"?n.prompt.trim():"";if(!r||!s)return{ok:!1,content:"\u9519\u8BEF\uFF1Adescription \u4E0E prompt \u5747\u4E0D\u80FD\u4E3A\u7A7A\u3002"};let i=typeof n.subagent_name=="string"?n.subagent_name.trim():"";if(i&&!Wt(i))return{ok:!1,content:`\u9519\u8BEF\uFF1A\u672A\u77E5\u5B50\u4EE3\u7406 "${i}"\u3002\u53EF\u7528\uFF1A${xt().join("\u3001")}`};try{return await e.spawnAgent({subagentName:i||void 0,description:r,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 it=3e4,Wa=12e4,Ga=6e5,Xa=1500,Va=`[\u8F93\u51FA\u88AB\u622A\u65AD] \u5355\u6761\u547D\u4EE4\u7684\u6355\u83B7\u4E0A\u9650\u4E3A ${it} \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 Ya(n,e,r,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",n]:["-lc",n],{cwd:e,env:process.env,windowsHide:!0,detached:!o}),u="",h="",d=!1,p=!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:h,code:x,timedOut:d,aborted:p,truncated:f}))},$=()=>{y&&clearTimeout(y),y=setTimeout(()=>S(null),Xa)},A=()=>{p=!0,g("SIGKILL"),$()},H=setTimeout(()=>{d=!0,g("SIGKILL"),$()},r);s?.addEventListener("abort",A,{once:!0}),c.stdout?.on("data",x=>{if(u.length>=it){f=!0;return}u+=x.toString(),u.length>=it&&(f=!0)}),c.stderr?.on("data",x=>{if(h.length>=it){f=!0;return}h+=x.toString(),h.length>=it&&(f=!0)}),c.on("error",x=>{h+=String(x),S(-1)}),c.on("exit",x=>{y&&clearTimeout(y),y=setTimeout(()=>S(x),120)}),c.on("close",x=>S(x))})}var ni={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(n,e){let r=typeof n.command=="string"?n.command:"";if(!r.trim())return{ok:!1,content:"\u9519\u8BEF\uFF1Acommand \u4E0D\u80FD\u4E3A\u7A7A"};let s=e.cwd;if(typeof n.cwd=="string"&&n.cwd){let u=q(n.cwd);s=Gt.isAbsolute(u)?u:Gt.resolve(e.cwd,u)}let i=typeof n.timeout=="number"?n.timeout:Wa,o=Math.min(Math.max(1e3,i),Ga),a=await Ya(r,s,o,e.signal),l=[];a.stdout.trim()&&l.push(a.stdout.trimEnd()),a.stderr.trim()&&l.push(`[stderr]
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:xt(),description:`\u8981\u6D3E\u751F\u7684\u5B50\u4EE3\u7406\u540D\u79F0\uFF0C\u9ED8\u8BA4 ${pn}\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(n,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 r=typeof n.description=="string"?n.description.trim():"",s=typeof n.prompt=="string"?n.prompt.trim():"";if(!r||!s)return{ok:!1,content:"\u9519\u8BEF\uFF1Adescription \u4E0E prompt \u5747\u4E0D\u80FD\u4E3A\u7A7A\u3002"};let i=typeof n.subagent_name=="string"?n.subagent_name.trim():"";if(i&&!Wt(i))return{ok:!1,content:`\u9519\u8BEF\uFF1A\u672A\u77E5\u5B50\u4EE3\u7406 "${i}"\u3002\u53EF\u7528\uFF1A${xt().join("\u3001")}`};try{return await e.spawnAgent({subagentName:i||void 0,description:r,prompt:s})}catch(o){return{ok:!1,content:`\u5B50\u4EE3\u7406\u6267\u884C\u5931\u8D25\uFF1A${o instanceof Error?o.message:String(o)}`}}}};var ni=require("child_process"),Gt=v(require("path"));var ot=3e4,Xa=12e4,Va=6e5,Ya=1500,Za=`[\u8F93\u51FA\u88AB\u622A\u65AD] \u5355\u6761\u547D\u4EE4\u7684\u6355\u83B7\u4E0A\u9650\u4E3A ${ot} \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(n,e,r,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,ni.spawn)(a,o?["/d","/s","/c",n]:["-lc",n],{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"),$()},r);s?.addEventListener("abort",A,{once:!0}),c.stdout?.on("data",x=>{if(u.length>=ot){f=!0;return}u+=x.toString(),u.length>=ot&&(f=!0)}),c.stderr?.on("data",x=>{if(p.length>=ot){f=!0;return}p+=x.toString(),p.length>=ot&&(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(n,e){let r=typeof n.command=="string"?n.command:"";if(!r.trim())return{ok:!1,content:"\u9519\u8BEF\uFF1Acommand \u4E0D\u80FD\u4E3A\u7A7A"};let s=e.cwd;if(typeof n.cwd=="string"&&n.cwd){let u=q(n.cwd);s=Gt.isAbsolute(u)?u:Gt.resolve(e.cwd,u)}let i=typeof n.timeout=="number"?n.timeout:Xa,o=Math.min(Math.max(1e3,i),Va),a=await Qa(r,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?`${Va}
301
+ `);return{ok:a.code===0&&!a.timedOut&&!a.aborted,content:(a.truncated?`${Za}
302
302
 
303
- `:"")+c.slice(0,it),summary:a.aborted?"\u5DF2\u4E2D\u65AD":a.timedOut?"\u8D85\u65F6":a.code===0?"\u6267\u884C\u6210\u529F":`\u9000\u51FA\u7801 ${a.code}`}}};var _=v(require("fs")),M=v(require("path"));var si=v(require("crypto")),F=v(require("fs")),de=v(require("path"));var Za=50,Qa=0;function ot(n){let e=si.createHash("sha1").update(de.resolve(n)).digest("hex").slice(0,10),r=de.basename(n)||"project";return de.join(T(),"backups",`${r}-${e}`)}function ii(n){return de.join(ot(n),"manifest.jsonl")}function oi(n){try{let e=F.readFileSync(ii(n),"utf8"),r=[];for(let s of e.split(`
304
- `))if(s.trim())try{let i=JSON.parse(s);typeof i.file=="string"&&r.push({file:i.file,backup:typeof i.backup=="string"?i.backup:null,time:typeof i.time=="string"?i.time:""})}catch{}return r}catch{return[]}}function ai(n,e){for(Z(ot(n));e.length>Za;){let r=e.shift();if(r?.backup)try{F.rmSync(de.join(ot(n),r.backup),{force:!0})}catch{}}F.writeFileSync(ii(n),e.map(r=>JSON.stringify(r)).join(`
303
+ `:"")+c.slice(0,ot),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 at(n){let e=ii.createHash("sha1").update(de.resolve(n)).digest("hex").slice(0,10),r=de.basename(n)||"project";return de.join(T(),"backups",`${r}-${e}`)}function oi(n){return de.join(at(n),"manifest.jsonl")}function ai(n){try{let e=F.readFileSync(oi(n),"utf8"),r=[];for(let s of e.split(`
304
+ `))if(s.trim())try{let i=JSON.parse(s);typeof i.file=="string"&&r.push({file:i.file,backup:typeof i.backup=="string"?i.backup:null,time:typeof i.time=="string"?i.time:""})}catch{}return r}catch{return[]}}function li(n,e){for(Z(at(n));e.length>el;){let r=e.shift();if(r?.backup)try{F.rmSync(de.join(at(n),r.backup),{force:!0})}catch{}}F.writeFileSync(oi(n),e.map(r=>JSON.stringify(r)).join(`
305
305
  `)+`
306
- `)}function mn(n,e){try{Z(ot(e));let r=oi(e),s=null;if(F.existsSync(n)){let i=!1;try{i=F.statSync(n).isFile()}catch{i=!1}if(i){let o=new Date().toISOString().replace(/[:.]/g,"-");s=`${de.basename(n)}.${o}-${++Qa}.bak`,F.copyFileSync(n,de.join(ot(e),s))}}r.push({file:n,backup:s,time:new Date().toISOString()}),ai(e,r)}catch{}}function li(n){let e=oi(n),r=e[e.length-1];if(!r)return"\u6CA1\u6709\u53EF\u64A4\u9500\u7684\u4FEE\u6539\u3002";try{if(r.backup){let s=de.join(ot(n),r.backup);if(!F.existsSync(s))return`\u64A4\u9500\u5931\u8D25\uFF1A\u5FEB\u7167\u6587\u4EF6\u5DF2\u4E0D\u5B58\u5728\uFF08${r.backup}\uFF09\u3002`;F.copyFileSync(s,r.file)}else F.existsSync(r.file)&&F.rmSync(r.file,{force:!0})}catch(s){return`\u64A4\u9500\u5931\u8D25\uFF1A${s instanceof Error?s.message:String(s)}`}return e.pop(),ai(n,e),r.backup?`\u2713 \u5DF2\u64A4\u9500\u5BF9 ${r.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 ${r.file}\u3002`}var ci=2e3,gn=2*1024*1024,fn=200,Xt=200,el=1024*1024,ui=2e3;function tl(n){return/\((?:[^()\\]|\\.)*[+*](?:[^()\\]|\\.)*\)\s*[+*{]/.test(n)?!0:/\((?:[^()\\]|\\.)*\|(?:[^()\\]|\\.)*\)\s*[+*{]/.test(n)}function hi(n){let e;try{e=_.statSync(n)}catch{return null}return e.isDirectory()?{problem:`\u9519\u8BEF\uFF1A${n} \u662F\u4E00\u4E2A\u76EE\u5F55\uFF0C\u4E0D\u80FD\u4F5C\u4E3A\u6587\u4EF6\u5199\u5165`}:e.isFile()?e.size>gn?{problem:`\u9519\u8BEF\uFF1A\u6587\u4EF6\u8FC7\u5927\uFF08${(e.size/1024/1024).toFixed(1)}MB\uFF09\uFF0C\u8D85\u51FA ${gn/1024/1024}MB \u9650\u5236`}:null:{problem:`\u9519\u8BEF\uFF1A${n} \u4E0D\u662F\u666E\u901A\u6587\u4EF6\uFF08\u8BBE\u5907\u6587\u4EF6 / \u7BA1\u9053 / socket\uFF09\uFF0C\u62D2\u7EDD\u5199\u5165`}}var mi=new Set([".git","node_modules","dist","build","out",".next",".nuxt",".cache","coverage",".venv","venv","__pycache__",".idea",".vscode-test"]);function rl(n){try{let e=M.join(n,".gitignore");return _.existsSync(e)?_.readFileSync(e,"utf8").split(`
307
- `).map(r=>r.trim()).filter(r=>r&&!r.startsWith("#")&&!r.startsWith("!")):[]}catch{return[]}}function nl(n,e){let r=n.split(M.sep).join("/"),s=M.basename(r);for(let i of e){let o=i.replace(/^\//,"").replace(/\/$/,"");if(o){if(o.includes("*")){try{if(Vt(o).test(r)||Vt(o).test(s))return!0}catch{}continue}if(r===o||r.startsWith(`${o}/`)||s===o)return!0}}return!1}function at(n,e){let r=q(n);return M.isAbsolute(r)?r:M.resolve(e,r)}function se(n,e=""){return typeof n=="string"?n:e}function di(n,e){return typeof n=="number"&&Number.isFinite(n)?n:e}function $n(n){return n.subarray(0,8e3).includes(0)}var fi={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 ${ci}\uFF09`}},required:["path"]},async execute(n,e){let r=at(se(n.path),e.cwd);if(!_.existsSync(r))return{ok:!1,content:`\u9519\u8BEF\uFF1A\u6587\u4EF6\u4E0D\u5B58\u5728\uFF1A${r}`};let s=_.statSync(r);if(s.isDirectory())return{ok:!1,content:`\u9519\u8BEF\uFF1A${r} \u662F\u4E00\u4E2A\u76EE\u5F55\uFF0C\u8BF7\u4F7F\u7528 list_dir`};if(!s.isFile())return{ok:!1,content:`\u9519\u8BEF\uFF1A${r} \u4E0D\u662F\u666E\u901A\u6587\u4EF6\uFF08\u8BBE\u5907\u6587\u4EF6 / \u7BA1\u9053 / socket\uFF09\uFF0C\u62D2\u7EDD\u8BFB\u53D6`};if(s.size>gn)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=_.readFileSync(r);if($n(i))return{ok:!1,content:`\u9519\u8BEF\uFF1A${r} \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,di(n.offset,1)),l=Math.max(1,di(n.limit,ci)),c=o.slice(a-1,a-1+l),u=c.map((d,p)=>{let m=a+p;return`${String(m).padStart(6," ")}| ${d}`}).join(`
309
- `),h=a-1+l<o.length?`
310
- \u2026\uFF08\u6587\u4EF6\u5171 ${o.length} \u884C\uFF0C\u5DF2\u622A\u65AD\uFF09`:"";return{ok:!0,content:u+h,summary:`\u8BFB\u53D6 ${c.length} \u884C`}}},gi={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(n,e){let r=at(se(n.path),e.cwd),s=se(n.content),i=hi(r);if(i)return{ok:!1,content:i.problem};try{return mn(r,e.cwd),_.mkdirSync(M.dirname(r),{recursive:!0}),_.writeFileSync(r,s,"utf8"),{ok:!0,content:`\u5DF2\u5199\u5165 ${r}\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)}`}}}},$i={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(n,e){let r=at(se(n.path),e.cwd);if(!_.existsSync(r))return{ok:!1,content:`\u9519\u8BEF\uFF1A\u6587\u4EF6\u4E0D\u5B58\u5728\uFF1A${r}`};let s=hi(r);if(s)return{ok:!1,content:s.problem};let i=se(n.search),o=se(n.replace),a=n.replace_all===!0;if(!i)return{ok:!1,content:"\u9519\u8BEF\uFF1Asearch \u4E0D\u80FD\u4E3A\u7A7A"};let l=_.readFileSync(r);if($n(l))return{ok:!1,content:`\u9519\u8BEF\uFF1A${r} \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(),p=/^\s*\d+\s*[:|]/m.test(i),m=!p&&d(c).includes(d(i)),f="";return p?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=`
306
+ `)}function hn(n,e){try{Z(at(e));let r=ai(e),s=null;if(F.existsSync(n)){let i=!1;try{i=F.statSync(n).isFile()}catch{i=!1}if(i){let o=new Date().toISOString().replace(/[:.]/g,"-");s=`${de.basename(n)}.${o}-${++tl}.bak`,F.copyFileSync(n,de.join(at(e),s))}}r.push({file:n,backup:s,time:new Date().toISOString()}),li(e,r)}catch{}}function ci(n){let e=ai(n),r=e[e.length-1];if(!r)return"\u6CA1\u6709\u53EF\u64A4\u9500\u7684\u4FEE\u6539\u3002";try{if(r.backup){let s=de.join(at(n),r.backup);if(!F.existsSync(s))return`\u64A4\u9500\u5931\u8D25\uFF1A\u5FEB\u7167\u6587\u4EF6\u5DF2\u4E0D\u5B58\u5728\uFF08${r.backup}\uFF09\u3002`;F.copyFileSync(s,r.file)}else F.existsSync(r.file)&&F.rmSync(r.file,{force:!0})}catch(s){return`\u64A4\u9500\u5931\u8D25\uFF1A${s instanceof Error?s.message:String(s)}`}return e.pop(),li(n,e),r.backup?`\u2713 \u5DF2\u64A4\u9500\u5BF9 ${r.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 ${r.file}\u3002`}var ui=2e3,fn=2*1024*1024,mn=200,Xt=200,rl=1024*1024,di=2e3;function nl(n){return/\((?:[^()\\]|\\.)*[+*](?:[^()\\]|\\.)*\)\s*[+*{]/.test(n)?!0:/\((?:[^()\\]|\\.)*\|(?:[^()\\]|\\.)*\)\s*[+*{]/.test(n)}function mi(n){let e;try{e=E.statSync(n)}catch{return null}return e.isDirectory()?{problem:`\u9519\u8BEF\uFF1A${n} \u662F\u4E00\u4E2A\u76EE\u5F55\uFF0C\u4E0D\u80FD\u4F5C\u4E3A\u6587\u4EF6\u5199\u5165`}:e.isFile()?e.size>fn?{problem:`\u9519\u8BEF\uFF1A\u6587\u4EF6\u8FC7\u5927\uFF08${(e.size/1024/1024).toFixed(1)}MB\uFF09\uFF0C\u8D85\u51FA ${fn/1024/1024}MB \u9650\u5236`}:null:{problem:`\u9519\u8BEF\uFF1A${n} \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(n){try{let e=M.join(n,".gitignore");return E.existsSync(e)?E.readFileSync(e,"utf8").split(`
307
+ `).map(r=>r.trim()).filter(r=>r&&!r.startsWith("#")&&!r.startsWith("!")):[]}catch{return[]}}function il(n,e){let r=n.split(M.sep).join("/"),s=M.basename(r);for(let i of e){let o=i.replace(/^\//,"").replace(/\/$/,"");if(o){if(o.includes("*")){try{if(Vt(o).test(r)||Vt(o).test(s))return!0}catch{}continue}if(r===o||r.startsWith(`${o}/`)||s===o)return!0}}return!1}function lt(n,e){let r=q(n);return M.isAbsolute(r)?r:M.resolve(e,r)}function se(n,e=""){return typeof n=="string"?n:e}function pi(n,e){return typeof n=="number"&&Number.isFinite(n)?n:e}function gn(n){return n.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(n,e){let r=lt(se(n.path),e.cwd);if(!E.existsSync(r))return{ok:!1,content:`\u9519\u8BEF\uFF1A\u6587\u4EF6\u4E0D\u5B58\u5728\uFF1A${r}`};let s=E.statSync(r);if(s.isDirectory())return{ok:!1,content:`\u9519\u8BEF\uFF1A${r} \u662F\u4E00\u4E2A\u76EE\u5F55\uFF0C\u8BF7\u4F7F\u7528 list_dir`};if(!s.isFile())return{ok:!1,content:`\u9519\u8BEF\uFF1A${r} \u4E0D\u662F\u666E\u901A\u6587\u4EF6\uFF08\u8BBE\u5907\u6587\u4EF6 / \u7BA1\u9053 / socket\uFF09\uFF0C\u62D2\u7EDD\u8BFB\u53D6`};if(s.size>fn)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(r);if(gn(i))return{ok:!1,content:`\u9519\u8BEF\uFF1A${r} \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(n.offset,1)),l=Math.max(1,pi(n.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(n,e){let r=lt(se(n.path),e.cwd),s=se(n.content),i=mi(r);if(i)return{ok:!1,content:i.problem};try{return hn(r,e.cwd),E.mkdirSync(M.dirname(r),{recursive:!0}),E.writeFileSync(r,s,"utf8"),{ok:!0,content:`\u5DF2\u5199\u5165 ${r}\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(n,e){let r=lt(se(n.path),e.cwd);if(!E.existsSync(r))return{ok:!1,content:`\u9519\u8BEF\uFF1A\u6587\u4EF6\u4E0D\u5B58\u5728\uFF1A${r}`};let s=mi(r);if(s)return{ok:!1,content:s.problem};let i=se(n.search),o=se(n.replace),a=n.replace_all===!0;if(!i)return{ok:!1,content:"\u9519\u8BEF\uFF1Asearch \u4E0D\u80FD\u4E3A\u7A7A"};let l=E.readFileSync(r);if(gn(l))return{ok:!1,content:`\u9519\u8BEF\uFF1A${r} \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
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 ${r} \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 ${r} \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 h=a?c.split(i).join(o):c.replace(i,()=>o);return mn(r,e.cwd),_.writeFileSync(r,h,"utf8"),{ok:!0,content:`\u5DF2\u66F4\u65B0 ${r}\uFF08\u66FF\u6362 ${a?u:1} \u5904\uFF09`,summary:`\u66FF\u6362 ${a?u:1} \u5904`}}},yi={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(n,e){let r=n.path?at(se(n.path),e.cwd):e.cwd;if(!_.existsSync(r))return{ok:!1,content:`\u9519\u8BEF\uFF1A\u76EE\u5F55\u4E0D\u5B58\u5728\uFF1A${r}`};if(!_.statSync(r).isDirectory())return{ok:!1,content:`\u9519\u8BEF\uFF1A${r} \u4E0D\u662F\u76EE\u5F55`};let s=_.readdirSync(r,{withFileTypes:!0}).filter(o=>!mi.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:`${r}
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 hn(r,e.cwd),E.writeFileSync(r,p,"utf8"),{ok:!0,content:`\u5DF2\u66F4\u65B0 ${r}\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(n,e){let r=n.path?lt(se(n.path),e.cwd):e.cwd;if(!E.existsSync(r))return{ok:!1,content:`\u9519\u8BEF\uFF1A\u76EE\u5F55\u4E0D\u5B58\u5728\uFF1A${r}`};if(!E.statSync(r).isDirectory())return{ok:!1,content:`\u9519\u8BEF\uFF1A${r} \u4E0D\u662F\u76EE\u5F55`};let s=E.readdirSync(r,{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:`${r}
313
313
  ${i.join(`
314
- `)||"(\u7A7A\u76EE\u5F55)"}`,summary:`${s.length} \u9879`}}},vi={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(n,e){let r=se(n.pattern);if(!r)return{ok:!1,content:"\u9519\u8BEF\uFF1Apattern \u4E0D\u80FD\u4E3A\u7A7A"};let s=n.path?at(se(n.path),e.cwd):e.cwd,i=Vt(r),o=[];if(yn(s,l=>{if(o.length>=fn)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>=fn?`
315
- \u2026\uFF08\u5DF2\u8FBE ${fn} \u6761\u4E0A\u9650\uFF09`:"";return{ok:!0,content:o.join(`
316
- `)+a,summary:`${o.length} \u4E2A\u6587\u4EF6`}}},bi={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(n,e){let r=se(n.pattern);if(!r)return{ok:!1,content:"\u9519\u8BEF\uFF1Apattern \u4E0D\u80FD\u4E3A\u7A7A"};if(tl(r))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(r)}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=n.path?at(se(n.path),e.cwd):e.cwd,o=n.include?Vt(se(n.include)):null,a=rl(i),l=[];if(yn(i,u=>{if(l.length>=Xt||a.length>0&&nl(M.relative(i,u),a))return;let h=M.relative(i,u).split(M.sep).join("/");if(o&&!o.test(h)&&!o.test(M.basename(u)))return;let d;try{d=_.statSync(u)}catch{return}if(d.size>el||d.size===0)return;let p;try{p=_.readFileSync(u)}catch{return}if($n(p))return;let m=p.toString("utf8").split(`
318
- `);for(let f=0;f<m.length;f++){if(l.length>=Xt)return;let y=m[f],g=y.length>ui?y.slice(0,ui):y;s.test(g)&&l.push(`${h}:${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?`
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(n,e){let r=se(n.pattern);if(!r)return{ok:!1,content:"\u9519\u8BEF\uFF1Apattern \u4E0D\u80FD\u4E3A\u7A7A"};let s=n.path?lt(se(n.path),e.cwd):e.cwd,i=Vt(r),o=[];if($n(s,l=>{if(o.length>=mn)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>=mn?`
315
+ \u2026\uFF08\u5DF2\u8FBE ${mn} \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(n,e){let r=se(n.pattern);if(!r)return{ok:!1,content:"\u9519\u8BEF\uFF1Apattern \u4E0D\u80FD\u4E3A\u7A7A"};if(nl(r))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(r)}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=n.path?lt(se(n.path),e.cwd):e.cwd,o=n.include?Vt(se(n.include)):null,a=sl(i),l=[];if($n(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>rl||d.size===0)return;let h;try{h=E.readFileSync(u)}catch{return}if(gn(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 yn(n,e){let r;try{r=_.readdirSync(n,{withFileTypes:!0})}catch{return}for(let s of r){if(mi.has(s.name))continue;let i=M.join(n,s.name);s.isDirectory()?yn(i,e):(s.isFile()||s.isSymbolicLink())&&e(i)}}function Vt(n){let e="",r=n.split(M.sep).join("/");for(let s=0;s<r.length;s++){let i=r[s];if(i==="*")r[s+1]==="*"?(s++,r[s+1]==="/"?(s++,e+="(?:.*/)?"):e+=".*"):e+="[^/]*";else if(i==="?")e+="[^/]";else if(i==="{"){let o=r.indexOf("}",s);if(o!==-1){let a=r.slice(s+1,o).split(",").map(pi).join("|");e+=`(?:${a})`,s=o}else e+="\\{"}else e+=pi(i)}return new RegExp(`^${e}$`)}function pi(n){return n.replace(/[.+^${}()|[\]\\]/g,"\\$&")}var St=v(require("fs")),vn=v(require("os")),Ie=v(require("path"));function Je(n){let e=n.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 r=Me(),s=new re(r);return{source:`\u8BBE\u5907\u6865\uFF08127.0.0.1:${r}\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 xi(n){return{ok:!1,content:`\u8BBE\u5907\u6865\u4E0D\u53EF\u7528\uFF08${n.source}\uFF09\u3002
320
+ `)+c,summary:`${l.length} \u6761\u5339\u914D`}}};function $n(n,e){let r;try{r=E.readdirSync(n,{withFileTypes:!0})}catch{return}for(let s of r){if(fi.has(s.name))continue;let i=M.join(n,s.name);s.isDirectory()?$n(i,e):(s.isFile()||s.isSymbolicLink())&&e(i)}}function Vt(n){let e="",r=n.split(M.sep).join("/");for(let s=0;s<r.length;s++){let i=r[s];if(i==="*")r[s+1]==="*"?(s++,r[s+1]==="/"?(s++,e+="(?:.*/)?"):e+=".*"):e+="[^/]*";else if(i==="?")e+="[^/]";else if(i==="{"){let o=r.indexOf("}",s);if(o!==-1){let a=r.slice(s+1,o).split(",").map(hi).join("|");e+=`(?:${a})`,s=o}else e+="\\{"}else e+=hi(i)}return new RegExp(`^${e}$`)}function hi(n){return n.replace(/[.+^${}()|[\]\\]/g,"\\$&")}var St=v(require("fs")),yn=v(require("os")),Ie=v(require("path"));function Je(n){let e=n.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 r=Me(),s=new re(r);return{source:`\u8BBE\u5907\u6865\uFF08127.0.0.1:${r}\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(n){return{ok:!1,content:`\u8BBE\u5907\u6865\u4E0D\u53EF\u7528\uFF08${n.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(n,e){let r=e.startsWith("~")?Ie.join(process.env.HOME??process.env.USERPROFILE??"",e.slice(1)):e;return Ie.isAbsolute(r)?r:Ie.resolve(n.cwd,q(r))}function sl(n){return n.map(e=>`- ${e.name}\uFF08${e.id}\uFF0CAutoX.js versionCode ${e.appVersionCode}\uFF09`).join(`
326
- `)}var il={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(n,e){let r=Je(e),s=await r.list();return s?s.length===0?{ok:!0,content:`\u6CA1\u6709\u5DF2\u8FDE\u63A5\u7684\u8BBE\u5907\uFF08${r.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
- ${sl(s)}`,summary:`${s.length} \u53F0\u8BBE\u5907`}:xi(r)}},ol={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(n,e){if(!n.path)return{ok:!1,content:"\u7F3A\u5C11\u5FC5\u586B\u53C2\u6570\uFF1Apath"};let r=Yt(e,String(n.path).trim()),s=Je(e),i=await s.push(r,n.device?String(n.device):void 0);return bn(i,s,`\u5DF2\u4FDD\u5B58\u5230 ${i.delivered??0} \u53F0\u8BBE\u5907`)}},al={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
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(n,e){let r=e.startsWith("~")?Ie.join(process.env.HOME??process.env.USERPROFILE??"",e.slice(1)):e;return Ie.isAbsolute(r)?r:Ie.resolve(n.cwd,q(r))}function ol(n){return n.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(n,e){let r=Je(e),s=await r.list();return s?s.length===0?{ok:!0,content:`\u6CA1\u6709\u5DF2\u8FDE\u63A5\u7684\u8BBE\u5907\uFF08${r.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(r)}},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(n,e){if(!n.path)return{ok:!1,content:"\u7F3A\u5C11\u5FC5\u586B\u53C2\u6570\uFF1Apath"};let r=Yt(e,String(n.path).trim()),s=Je(e),i=await s.push(r,n.device?String(n.device):void 0);return vn(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(n,e){if(!n.path)return{ok:!1,content:"\u7F3A\u5C11\u5FC5\u586B\u53C2\u6570\uFF1Apath"};let r=Yt(e,String(n.path).trim()),s=Je(e),i=await s.run(r,n.device?String(n.device):void 0);return bn(i,s,`\u5DF2\u5728 ${i.delivered??0} \u53F0\u8BBE\u5907\u4E0A\u542F\u52A8\uFF08\u7528 device_logs \u770B\u8F93\u51FA\uFF09`)}},ll={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(n,e){let r=Je(e),s=n.path?Yt(e,String(n.path).trim()):void 0,i=await r.stop(s,n.device?String(n.device):void 0);return bn(i,r,s?"\u5DF2\u8BF7\u6C42\u505C\u6B62\u8BE5\u811A\u672C":"\u5DF2\u8BF7\u6C42\u505C\u6B62\u5168\u90E8\u811A\u672C")}},cl={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(n,e){let r=Number(n.limit??50),s=Number.isFinite(r)&&r>0?Math.min(Math.floor(r),500):50,i=Je(e),o=await i.logs(s);if(!o)return xi(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(`
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(n,e){if(!n.path)return{ok:!1,content:"\u7F3A\u5C11\u5FC5\u586B\u53C2\u6570\uFF1Apath"};let r=Yt(e,String(n.path).trim()),s=Je(e),i=await s.run(r,n.device?String(n.device):void 0);return vn(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(n,e){let r=Je(e),s=n.path?Yt(e,String(n.path).trim()):void 0,i=await r.stop(s,n.device?String(n.device):void 0);return vn(i,r,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(n,e){let r=Number(n.limit??50),s=Number.isFinite(r)&&r>0?Math.min(Math.floor(r),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 bn(n,e,r){if(!n.ok)return{ok:!1,content:n.message??"\u64CD\u4F5C\u5931\u8D25"};let s=(n.devices??[]).join("\u3001");return{ok:!0,content:`${r}${s?`\uFF1A${s}`:""}
331
+ ${a}`,summary:`${o.length} \u884C\u65E5\u5FD7`}}};function vn(n,e,r){if(!n.ok)return{ok:!1,content:n.message??"\u64CD\u4F5C\u5931\u8D25"};let s=(n.devices??[]).join("\u3001");return{ok:!0,content:`${r}${s?`\uFF1A${s}`:""}
332
332
  ${n.path?`\u811A\u672C\uFF1A${n.path}
333
- `:""}\u6765\u6E90\uFF1A${e.source}`,summary:r}}var ul={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
333
+ `:""}\u6765\u6E90\uFF1A${e.source}`,summary:r}}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
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(n,e){let r=Je(e),s=await r.screenshot();if(!s.ok)return{ok:!1,content:`${s.message}
338
- \uFF08\u6765\u6E90\uFF1A${r.source}\uFF09`};let i=typeof n.path=="string"&&n.path.trim()?Yt(e,n.path.trim()):Ie.join(vn.tmpdir(),`xzh-device-shot-${Date.now()}.jpg`);try{St.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
338
+ \uFF08\u6765\u6E90\uFF1A${r.source}\uFF09`};let i=typeof n.path=="string"&&n.path.trim()?Yt(e,n.path.trim()):Ie.join(yn.tmpdir(),`xzh-device-shot-${Date.now()}.jpg`);try{St.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${r.source}\uFF09`,images:[{mimeType:"image/jpeg",data:s.data.toString("base64")}]}}},dl={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
341
+ \uFF08\u6765\u6E90\uFF1A${r.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(n,e){let r=Je(e),s=`r${Date.now()}`,i=`\u3010\u5F00\u59CB\u3011${s}`,o=Ie.join(vn.tmpdir(),`xzh-ui-dump-${Date.now()}.js`);try{St.writeFileSync(o,an(60,s),"utf8");let c=await r.run(o);if(!c.ok)return{ok:!1,content:`${c.message??"\u8BFB\u53D6\u754C\u9762\u5931\u8D25"}
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(n,e){let r=Je(e),s=`r${Date.now()}`,i=`\u3010\u5F00\u59CB\u3011${s}`,o=Ie.join(yn.tmpdir(),`xzh-ui-dump-${Date.now()}.js`);try{St.writeFileSync(o,on(60,s),"utf8");let c=await r.run(o);if(!c.ok)return{ok:!1,content:`${c.message??"\u8BFB\u53D6\u754C\u9762\u5931\u8D25"}
344
344
  \uFF08\u6765\u6E90\uFF1A${r.source}\uFF09`}}finally{St.rmSync(o,{force:!0})}let a=Date.now()+45e3,l=[];for(;Date.now()<a;){let c=(await r.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
346
  \uFF08\u6765\u6E90\uFF1A${r.source}\uFF09`}:{ok:!0,content:`${l.join(`
347
347
  `)}
348
- \uFF08\u6765\u6E90\uFF1A${r.source}\uFF09`}}},xn=[il,ol,al,ll,cl,dl,ul];var Si=12e3,wi={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 \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\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(n,e){let r=pt(e.cwd),s=Q(e.cwd);if(!r.longTerm&&!r.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=[];r.longTerm&&i.push(`## \u957F\u671F\u8BB0\u5FC6\uFF08MEMORY.md\uFF09
348
+ \uFF08\u6765\u6E90\uFF1A${r.source}\uFF09`}}},bn=[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(n,e){let r=Xe(e.cwd),s=Q(e.cwd);if(!r.longTerm&&!r.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=[];r.longTerm&&i.push(`## \u957F\u671F\u8BB0\u5FC6\uFF08MEMORY.md\uFF09
349
349
 
350
350
  ${r.longTerm}`),r.recentDaily&&i.push(`## \u6700\u8FD1\u65E5\u5FD7\uFF08${r.recentDailyName}\uFF09
351
351
 
@@ -353,32 +353,34 @@ ${r.recentDaily}`);let o=i.join(`
353
353
 
354
354
  ---
355
355
 
356
- `);return{ok:!0,content:o.length>Si?`${o.slice(0,Si)}
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"}}},Ci={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\u8FC7\u7A0B\u8BB0\u5F55\uFF09\uFF1Bscope=long \u8FFD\u52A0\u5230\u957F\u671F\u8BB0\u5FC6 MEMORY.md\uFF08\u9002\u5408\u7A33\u5B9A\u7684\u7ED3\u8BBA\u4E0E\u7EA6\u5B9A\uFF09\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"}},required:["content"]},async execute(n,e){let r=typeof n.content=="string"?n.content.trim():"";if(!r)return{ok:!1,content:"\u9519\u8BEF\uFF1Acontent \u4E0D\u80FD\u4E3A\u7A7A\u3002"};let s=n.scope==="long"?"long":"daily";try{let i=rs(e.cwd,r,s),o=s==="long"?"\u957F\u671F\u8BB0\u5FC6":"\u5F53\u65E5\u65E5\u5FD7",a="";if(s==="long"){let l=Tt(e.cwd,e.memoryMaxChars??me);if(l&&(l.removedDuplicates>0||l.removedOldest>0)){let c=[];l.removedDuplicates>0&&c.push(`\u53BB\u9664 ${l.removedDuplicates} \u6761\u91CD\u590D\u8BB0\u5F55`),l.removedOldest>0&&c.push(`\u4E22\u5F03 ${l.removedOldest} \u6761\u6700\u65E7\u8BB0\u5F55`),a=`
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(n,e){let r=typeof n.content=="string"?n.content.trim():"";if(!r)return{ok:!1,content:"\u9519\u8BEF\uFF1Acontent \u4E0D\u80FD\u4E3A\u7A7A\u3002"};let s=n.scope==="long"?"long":"daily";try{let i=rs(e.cwd,r,s),o=s==="long"?"\u957F\u671F\u8BB0\u5FC6":"\u5F53\u65E5\u65E5\u5FD7",a="";if(s==="long"){let l=e.memoryMaxChars??me,c=Tt(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${c.join("\u3001")}\uFF0C${l.before} \u2192 ${l.after} \u5B57\u7B26\uFF09`}}return{ok:!0,content:`\u5DF2\u5199\u5165${o}\uFF1A${i}${a}
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`}}}},Ti={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\u5F53\u957F\u671F\u8BB0\u5FC6\u8FC7\u957F\u3001\u5185\u5BB9\u91CD\u590D\u6216\u6709\u8FC7\u65F6\u6761\u76EE\u65F6\u4F7F\u7528\uFF1A\u5148 memory_read \u8BFB\u53D6\u5168\u6587\uFF0C\u518D\u5408\u5E76\u540C\u4E00\u4E3B\u9898\u3001\u5220\u9664\u5DF2\u8FC7\u65F6/\u88AB\u63A8\u7FFB\u7684\u5185\u5BB9\u3001\u628A\u5197\u957F\u7684\u8FC7\u7A0B\u6D53\u7F29\u4E3A\u7ED3\u8BBA\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\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\uFF0C\u5EFA\u8BAE\u4FDD\u7559 `## \u65F6\u95F4\u6233` \u5F62\u5F0F\u7684\u6761\u76EE\u7ED3\u6784\uFF09"}},required:["content"]},async execute(n,e){let r=typeof n.content=="string"?n.content.trim():"";if(!r)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=pt(e.cwd).longTerm.length;return{ok:!0,content:`\u5DF2\u91CD\u5199\u957F\u671F\u8BB0\u5FC6\uFF1A${Tr(e.cwd,r)}
364
- \uFF08${s} \u2192 ${r.length} \u5B57\u7B26\uFF09`,summary:`\u957F\u671F\u8BB0\u5FC6\u5DF2\u7CBE\u7B80\uFF08${s} \u2192 ${r.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 De=v(require("fs")),tr=v(require("path"));var Qt=v(require("fs")),ki=v(require("path"));var Zt=1;function Sn(){return ki.join(T(),"skills.json")}function Ei(){try{let n=Qt.readFileSync(Sn(),"utf8"),e=JSON.parse(n),r=Array.isArray(e.disabled)?e.disabled.filter(s=>typeof s=="string"&&s.trim()!==""):[];return{version:Zt,disabled:r}}catch{return{version:Zt,disabled:[]}}}function Ai(n){Z(T()),Qt.writeFileSync(Sn(),`${JSON.stringify(n,null,2)}
365
- `)}function wn(){return Ei().disabled}function er(n,e){let r=Ei(),s=n.trim().toLowerCase(),i=r.disabled.filter(o=>o.toLowerCase()!==s);return e?i.length!==r.disabled.length?!1:(Ai({version:Zt,disabled:[...i,n.trim()]}),!0):i.length===r.disabled.length?!1:(Ai({version:Zt,disabled:i}),!0)}var _i="SKILL.md",Pi=8e4;function Mi(n){return n.replace(/^["']|["']$/g,"").trim()}function pl(n){let e=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?/.exec(n);if(!e)return{meta:{},body:n};let r=e[1],s=n.slice(e[0].length),i=/^name:\s*(.+)$/m.exec(r)?.[1];return{meta:{name:i?Mi(i):void 0,description:hl(r)},body:s}}function hl(n){let e=/^description:\s*(.*)$/m.exec(n)?.[1]?.trim();if(e&&e!==">"&&e!=="|"&&e!==">-"&&e!=="|-")return Mi(e);let r=/^description:\s*[>|]-?\s*\n((?:[ \t]+\S.*\n?)+)/m.exec(n)?.[1];return r?r.replace(/\s+/g," ").trim():""}function ml(n){let e=tr.join(n,_i);if(De.existsSync(e))return e;try{let r=De.readdirSync(n).find(s=>s.toLowerCase()===_i.toLowerCase());return r?tr.join(n,r):null}catch{return null}}function Ri(n,e,r){let s;try{s=De.readdirSync(n,{withFileTypes:!0})}catch{return}for(let i of s){if(!i.isDirectory())continue;let o=tr.join(n,i.name),a=ml(o);if(!a)continue;let l;try{l=De.readFileSync(a,"utf8")}catch{continue}let{meta:c}=pl(l),u=(c.name||i.name).trim();u&&r.set(u,{name:u,description:c.description??"",dir:o,file:a,source:e})}}function ie(n={}){let e=new Map;Ri(Vn(),"builtin",e),Ri(Yn(),"user",e);let r=[...e.values()].sort((i,o)=>i.name.localeCompare(o.name));if(n.includeDisabled)return r;let s=new Set(wn().map(i=>i.toLowerCase()));return r.filter(i=>!s.has(i.name.toLowerCase()))}function Ii(n,e={}){let r=n.trim().toLowerCase();if(r)return ie(e).find(s=>s.name.toLowerCase()===r)}function Di(n){let e=De.readFileSync(n.file,"utf8");return e.length<=Pi?e:`${e.slice(0,Pi)}
366
-
367
- \u2026\uFF08\u6280\u80FD\u5185\u5BB9\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD\uFF09`}function Te(){return process.platform==="darwin"?"darwin":process.platform==="win32"?"win32":"linux"}var Cn="npm install -g @playwright/cli@latest",Tn="npx --yes playwright@latest install chromium",fl={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"'},Oi={playwright:[{name:"Playwright CLI\uFF08playwright-cli\uFF09",check:"playwright-cli --version",install:{linux:Cn,darwin:Cn,win32:Cn},postInstall:{linux:Tn,darwin:Tn,win32:Tn}}],officecli:[{name:"OfficeCLI\uFF08officecli\uFF09",check:"officecli --version",install:fl}]};function lt(n){return Oi[n.trim().toLowerCase()]??[]}function Li(){return Object.keys(Oi)}function Ni(n){return['SUDO="sudo -n"; [ -t 0 ] && SUDO="sudo"',`if command -v apt-get >/dev/null 2>&1; then $SUDO apt-get install -y ${n}`,`elif command -v dnf >/dev/null 2>&1; then $SUDO dnf install -y ${n}`,`elif command -v yum >/dev/null 2>&1; then $SUDO yum install -y ${n}`,`elif command -v pacman >/dev/null 2>&1; then $SUDO pacman -S --noconfirm ${n}`,`elif command -v zypper >/dev/null 2>&1; then $SUDO zypper --non-interactive install ${n}`,`elif command -v apk >/dev/null 2>&1; then $SUDO apk add ${n}`,'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 gl={name:"xclip\uFF08X11 \u526A\u8D34\u677F\u5DE5\u5177\uFF09",check:"command -v xclip",install:{linux:Ni("xclip")}},$l={name:"wl-clipboard\uFF08Wayland \u526A\u8D34\u677F\u5DE5\u5177\uFF09",check:"command -v wl-paste",install:{linux:Ni("wl-clipboard")}};function An(n=Te()){return n!=="linux"?[]:[!!(process.env.WAYLAND_DISPLAY||process.env.WAYLAND_SOCKET)?$l:gl]}function ji(n=Te()){return An(n)}var kn=require("child_process");var yl=15e3,rr=9e5,vl=2e4,Ui=120,Fi=1500;function zi(n,e,r){return new Promise(s=>{let i=process.platform==="win32",o=i?"cmd.exe":process.env.SHELL||"bash",l=(0,kn.spawn)(o,i?["/d","/s","/c",n]:["-lc",n],{env:process.env,windowsHide:!0,detached:!i}),c="",u=!1,h=!1,d,p=$=>{c.length<vl&&(c+=$.toString())},m=$=>{h||(h=!0,clearTimeout(g),d&&clearTimeout(d),r?.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}
368
- [\u6267\u884C\u8D85\u65F6 ${e}ms]`:c,timedOut:u})},Fi)},g=setTimeout(()=>{u=!0,f(),y()},e),S=()=>{f(),m({ok:!1,output:c+`
369
- [\u5DF2\u53D6\u6D88]`,timedOut:!1})};if(r){if(r.aborted){S();return}r.addEventListener("abort",S,{once:!0})}l.stdout?.on("data",p),l.stderr?.on("data",p),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}
370
- [\u6267\u884C\u8D85\u65F6 ${e}ms]`:c,timedOut:u})},Ui)}),l.on("close",$=>{m({ok:$===0&&!u,output:u?`${c}
371
- [\u6267\u884C\u8D85\u65F6 ${e}ms]`:c,timedOut:u})})})}function En(n,e=rr,r){return new Promise(s=>{let i=process.platform==="win32",o=i?"cmd.exe":process.env.SHELL||"bash",l=(0,kn.spawn)(o,i?["/d","/s","/c",n]:["-lc",n],{stdio:"inherit",env:process.env,windowsHide:!0}),c=!1,u=!1,h,d=g=>{u||(u=!0,clearTimeout(f),h&&clearTimeout(h),r?.removeEventListener("abort",y),s(g))},p=()=>{try{l.kill("SIGKILL")}catch{}},m=()=>{h&&clearTimeout(h),h=setTimeout(()=>d({ok:!1,output:"",timedOut:c}),Fi)},f=setTimeout(()=>{c=!0,p(),m()},e),y=()=>{p(),m()};if(r){if(r.aborted){y();return}r.addEventListener("abort",y,{once:!0})}l.on("error",g=>{d({ok:!1,output:String(g),timedOut:!1})}),l.on("exit",g=>{h&&clearTimeout(h),h=setTimeout(()=>d({ok:g===0&&!c,output:"",timedOut:c}),Ui)}),l.on("close",g=>{d({ok:g===0&&!c,output:"",timedOut:c})})})}async function Ke(n,e){return(await zi(n.check,yl,e)).ok}async function _n(n,e=Te(),r,s,i={}){let o=n.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=p=>{let m=p.trim();m&&(a.push(m),s?.(m))},c=async p=>{if(!i.interactive)return zi(p,rr,r);let m=await En(p,rr,r);return m.ok||l(m.timedOut?`[\u6267\u884C\u8D85\u65F6 ${rr}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 p of Bi(u.output,12))l(p);if(!u.ok)return{ok:!1,log:a.join(`
372
- `)};let h=n.postInstall?.[e];if(h){l(`$ ${h}`);let p=await c(h);for(let m of Bi(p.output,12))l(m);if(!p.ok)return{ok:!1,log:a.join(`
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(n,e){let r=typeof n.content=="string"?n.content.trim():"";if(!r)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${Cr(e.cwd,r)}
366
+ \uFF08${s} \u2192 ${r.length} \u5B57\u7B26\uFF09`,summary:`\u957F\u671F\u8BB0\u5FC6\u5DF2\u7CBE\u7B80\uFF08${s} \u2192 ${r.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 De=v(require("fs")),tr=v(require("path"));var Qt=v(require("fs")),_i=v(require("path"));var Zt=1;function xn(){return _i.join(T(),"skills.json")}function Ei(){try{let n=Qt.readFileSync(xn(),"utf8"),e=JSON.parse(n),r=Array.isArray(e.disabled)?e.disabled.filter(s=>typeof s=="string"&&s.trim()!==""):[];return{version:Zt,disabled:r}}catch{return{version:Zt,disabled:[]}}}function ki(n){Z(T()),Qt.writeFileSync(xn(),`${JSON.stringify(n,null,2)}
367
+ `)}function Sn(){return Ei().disabled}function er(n,e){let r=Ei(),s=n.trim().toLowerCase(),i=r.disabled.filter(o=>o.toLowerCase()!==s);return e?i.length!==r.disabled.length?!1:(ki({version:Zt,disabled:[...i,n.trim()]}),!0):i.length===r.disabled.length?!1:(ki({version:Zt,disabled:i}),!0)}var Pi="SKILL.md",Ri=8e4;function Ii(n){return n.replace(/^["']|["']$/g,"").trim()}function ml(n){let e=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?/.exec(n);if(!e)return{meta:{},body:n};let r=e[1],s=n.slice(e[0].length),i=/^name:\s*(.+)$/m.exec(r)?.[1];return{meta:{name:i?Ii(i):void 0,description:fl(r)},body:s}}function fl(n){let e=/^description:\s*(.*)$/m.exec(n)?.[1]?.trim();if(e&&e!==">"&&e!=="|"&&e!==">-"&&e!=="|-")return Ii(e);let r=/^description:\s*[>|]-?\s*\n((?:[ \t]+\S.*\n?)+)/m.exec(n)?.[1];return r?r.replace(/\s+/g," ").trim():""}function gl(n){let e=tr.join(n,Pi);if(De.existsSync(e))return e;try{let r=De.readdirSync(n).find(s=>s.toLowerCase()===Pi.toLowerCase());return r?tr.join(n,r):null}catch{return null}}function Mi(n,e,r){let s;try{s=De.readdirSync(n,{withFileTypes:!0})}catch{return}for(let i of s){if(!i.isDirectory())continue;let o=tr.join(n,i.name),a=gl(o);if(!a)continue;let l;try{l=De.readFileSync(a,"utf8")}catch{continue}let{meta:c}=ml(l),u=(c.name||i.name).trim();u&&r.set(u,{name:u,description:c.description??"",dir:o,file:a,source:e})}}function ie(n={}){let e=new Map;Mi(Xn(),"builtin",e),Mi(Vn(),"user",e);let r=[...e.values()].sort((i,o)=>i.name.localeCompare(o.name));if(n.includeDisabled)return r;let s=new Set(Sn().map(i=>i.toLowerCase()));return r.filter(i=>!s.has(i.name.toLowerCase()))}function Di(n,e={}){let r=n.trim().toLowerCase();if(r)return ie(e).find(s=>s.name.toLowerCase()===r)}function Oi(n){let e=De.readFileSync(n.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 Te(){return process.platform==="darwin"?"darwin":process.platform==="win32"?"win32":"linux"}var wn="npm install -g @playwright/cli@latest",Cn="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:wn,darwin:wn,win32:wn},postInstall:{linux:Cn,darwin:Cn,win32:Cn}}],officecli:[{name:"OfficeCLI\uFF08officecli\uFF09",check:"officecli --version",install:$l}]};function ct(n){return Li[n.trim().toLowerCase()]??[]}function Ni(){return Object.keys(Li)}function ji(n){return['SUDO="sudo -n"; [ -t 0 ] && SUDO="sudo"',`if command -v apt-get >/dev/null 2>&1; then $SUDO apt-get install -y ${n}`,`elif command -v dnf >/dev/null 2>&1; then $SUDO dnf install -y ${n}`,`elif command -v yum >/dev/null 2>&1; then $SUDO yum install -y ${n}`,`elif command -v pacman >/dev/null 2>&1; then $SUDO pacman -S --noconfirm ${n}`,`elif command -v zypper >/dev/null 2>&1; then $SUDO zypper --non-interactive install ${n}`,`elif command -v apk >/dev/null 2>&1; then $SUDO apk add ${n}`,'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 Tn(n=Te()){return n!=="linux"?[]:[!!(process.env.WAYLAND_DISPLAY||process.env.WAYLAND_SOCKET)?vl:yl]}function Bi(n=Te()){return Tn(n)}var An=require("child_process");var bl=15e3,rr=9e5,xl=2e4,Fi=120,zi=1500;function Ji(n,e,r){return new Promise(s=>{let i=process.platform==="win32",o=i?"cmd.exe":process.env.SHELL||"bash",l=(0,An.spawn)(o,i?["/d","/s","/c",n]:["-lc",n],{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),r?.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(r){if(r.aborted){S();return}r.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 kn(n,e=rr,r){return new Promise(s=>{let i=process.platform==="win32",o=i?"cmd.exe":process.env.SHELL||"bash",l=(0,An.spawn)(o,i?["/d","/s","/c",n]:["-lc",n],{stdio:"inherit",env:process.env,windowsHide:!0}),c=!1,u=!1,p,d=g=>{u||(u=!0,clearTimeout(f),p&&clearTimeout(p),r?.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(r){if(r.aborted){y();return}r.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(n,e){return(await Ji(n.check,bl,e)).ok}async function _n(n,e=Te(),r,s,i={}){let o=n.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,rr,r);let m=await kn(h,rr,r);return m.ok||l(m.timedOut?`[\u6267\u884C\u8D85\u65F6 ${rr}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=n.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(`
373
375
  `)}}return await Ke(n,r)?(l(`\u2713 ${n.name} \u5DF2\u5C31\u7EEA`),{ok:!0,log:a.join(`
374
376
  `)}):(l(`\u26A0 \u5B89\u88C5\u547D\u4EE4\u5DF2\u6267\u884C\uFF0C\u4F46 \u201C${n.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(`
375
- `)})}async function Ji(n,e={}){return bl(lt(n),e)}async function bl(n,e={}){let r=e.platform??Te(),s={installed:[],skipped:[],failed:[]};for(let i of n){if(await Ke(i,e.signal))continue;let o=i.install[r];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 _n(i,r,e.signal,e.onOutput);if(l.ok)s.installed.push(i.name);else{let c=l.log.split(`
376
- `).slice(-2).join(" ");s.failed.push(`${i.name} \u2192 ${c}`)}}return s}function Bi(n,e){return n.split(`
377
- `).map(s=>s.trimEnd()).filter(s=>s.trim().length>0).slice(-e)}var Ki={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(n,e){let r=ie();if(r.length===0)return{ok:!0,content:"\u5F53\u524D\u6CA1\u6709\u53EF\u7528\u6280\u80FD\u3002"};let s=r.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${r.length} \u4E2A\uFF09\uFF1A
377
+ `)})}async function Ki(n,e={}){return Sl(ct(n),e)}async function Sl(n,e={}){let r=e.platform??Te(),s={installed:[],skipped:[],failed:[]};for(let i of n){if(await Ke(i,e.signal))continue;let o=i.install[r];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 _n(i,r,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(n,e){return n.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(n,e){let r=ie();if(r.length===0)return{ok:!0,content:"\u5F53\u524D\u6CA1\u6709\u53EF\u7528\u6280\u80FD\u3002"};let s=r.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${r.length} \u4E2A\uFF09\uFF1A
378
380
  ${s.join(`
379
- `)}`,summary:`${r.length} \u4E2A\u6280\u80FD`}}},Hi={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(n,e){let r=typeof n.name=="string"?n.name:"";if(!r.trim())return{ok:!1,content:"\u9519\u8BEF\uFF1A\u7F3A\u5C11\u6280\u80FD\u540D\u79F0\u53C2\u6570 name\u3002"};let s=Ii(r);if(!s){let c=ie().map(u=>u.name).join(", ");return{ok:!1,content:`\u672A\u627E\u5230\u6280\u80FD "${r}"\u3002\u53EF\u7528\u6280\u80FD\uFF1A${c||"\uFF08\u65E0\uFF09"}\u3002\u53EF\u5148\u8C03\u7528 list_skills \u67E5\u770B\u3002`}}let i=[];if(lt(s.name).length>0){let c=await Ji(s.name,{signal:e.signal,onOutput:u=>e.emit?.(u),confirm:async(u,h)=>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
381
+ `)}`,summary:`${r.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(n,e){let r=typeof n.name=="string"?n.name:"";if(!r.trim())return{ok:!1,content:"\u9519\u8BEF\uFF1A\u7F3A\u5C11\u6280\u80FD\u540D\u79F0\u53C2\u6570 name\u3002"};let s=Di(r);if(!s){let c=ie().map(u=>u.name).join(", ");return{ok:!1,content:`\u672A\u627E\u5230\u6280\u80FD "${r}"\u3002\u53EF\u7528\u6280\u80FD\uFF1A${c||"\uFF08\u65E0\uFF09"}\u3002\u53EF\u5148\u8C03\u7528 list_skills \u67E5\u770B\u3002`}}let i=[];if(ct(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
- ${h}`,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=Di(s),a=i.length>0?`> \u4F9D\u8D56\u5904\u7406\uFF1A
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,9 +389,9 @@ ${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 qi=["pending","in_progress","completed","cancelled"],xl={pending:"[ ]",in_progress:"[~]",completed:"[x]",cancelled:"[-]"};function Sl(n){if(!Array.isArray(n))return"\u9519\u8BEF\uFF1Atodos \u5FC5\u987B\u662F\u6570\u7EC4\u3002";let e=[];for(let s=0;s<n.length;s++){let i=n[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=qi.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 wl(n){return n.length===0?"\uFF08\u4EFB\u52A1\u5217\u8868\u4E3A\u7A7A\uFF09":n.map(e=>`${xl[e.status]} ${e.content}`).join(`
391
- `)}function Cl(n){let e=n.filter(i=>i.status==="completed").length,r=n.find(i=>i.status==="in_progress"),s=n.filter(i=>i.status!=="cancelled").length;return r?`\u4EFB\u52A1 ${e}/${s} \xB7 \u8FDB\u884C\u4E2D\uFF1A${r.content}`:`\u4EFB\u52A1 ${e}/${s}`}var Wi={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:qi,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(n,e){if(!e.todos)return{ok:!1,content:"\u9519\u8BEF\uFF1A\u5F53\u524D\u73AF\u5883\u4E0D\u652F\u6301\u4EFB\u52A1\u5217\u8868\u3002"};let r=Sl(n.todos);return typeof r=="string"?{ok:!1,content:r}:(e.todos.set(r),{ok:!0,content:`\u5DF2\u66F4\u65B0\u4EFB\u52A1\u5217\u8868\uFF1A
392
- ${wl(r)}`,summary:Cl(r)})}};var nr=[Ki,Hi,wi,Ci,Ti,Wi,ti,fi,yi,vi,bi,gi,$i,ni,...xn],Tl=new Set(["task","todo_write","memory_write","memory_compact",...xn.map(n=>n.name)]);function sr(n,e=nr){return e.find(r=>r.name===n)}function ir(n=nr){return n.map(e=>({name:e.name,description:e.description,parameters:e.parameters}))}function Gi(n){return nr.filter(e=>Tl.has(e.name)?!1:n?n.includes(e.name):!0)}async function Xi(n,e,r,s=nr){let i=sr(n,s);if(!i)return{ok:!1,content:`\u9519\u8BEF\uFF1A\u672A\u77E5\u5DE5\u5177 "${n}"`};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${n} \u6536\u5230\u672A\u77E5\u53C2\u6570 ${u.map(p=>`"${p}"`).join("\u3001")}\u3002\u53EF\u7528\u53C2\u6570\uFF1A${d.length>0?d.map(p=>`"${p}"`).join("\u3001"):"\uFF08\u65E0\uFF09"}`}}let h=c.filter(d=>o[d]===void 0||o[d]===null);if(h.length>0)return{ok:!1,content:`\u9519\u8BEF\uFF1A${n} \u7F3A\u5C11\u5FC5\u586B\u53C2\u6570 ${h.map(d=>`"${d}"`).join("\u3001")}\u3002`};try{return await i.execute(o,r)}catch(d){return{ok:!1,content:`\u5DE5\u5177\u6267\u884C\u5F02\u5E38\uFF1A${d instanceof Error?d.message:String(d)}`}}}async function Vi(n,e,r){let s=new Array(n.length);if(n.length===0)return s;let i=Number.isFinite(e)?Math.floor(e):1,o=Math.min(Math.max(1,i),n.length),a=0;return await Promise.all(Array.from({length:o},async()=>{for(;;){let l=a++;if(l>=n.length)return;s[l]=await r(n[l],l)}})),s}function Yi(n,e,r,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
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(n){if(!Array.isArray(n))return"\u9519\u8BEF\uFF1Atodos \u5FC5\u987B\u662F\u6570\u7EC4\u3002";let e=[];for(let s=0;s<n.length;s++){let i=n[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(n){return n.length===0?"\uFF08\u4EFB\u52A1\u5217\u8868\u4E3A\u7A7A\uFF09":n.map(e=>`${wl[e.status]} ${e.content}`).join(`
393
+ `)}function Al(n){let e=n.filter(i=>i.status==="completed").length,r=n.find(i=>i.status==="in_progress"),s=n.filter(i=>i.status!=="cancelled").length;return r?`\u4EFB\u52A1 ${e}/${s} \xB7 \u8FDB\u884C\u4E2D\uFF1A${r.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(n,e){if(!e.todos)return{ok:!1,content:"\u9519\u8BEF\uFF1A\u5F53\u524D\u73AF\u5883\u4E0D\u652F\u6301\u4EFB\u52A1\u5217\u8868\u3002"};let r=Cl(n.todos);return typeof r=="string"?{ok:!1,content:r}:(e.todos.set(r),{ok:!0,content:`\u5DF2\u66F4\u65B0\u4EFB\u52A1\u5217\u8868\uFF1A
394
+ ${Tl(r)}`,summary:Al(r)})}};var nr=[Hi,qi,Ci,Ti,Ai,Gi,ri,gi,vi,bi,xi,$i,yi,si,...bn],kl=new Set(["task","todo_write","memory_write","memory_compact",...bn.map(n=>n.name)]);function sr(n,e=nr){return e.find(r=>r.name===n)}function ir(n=nr){return n.map(e=>({name:e.name,description:e.description,parameters:e.parameters}))}function Xi(n){return nr.filter(e=>kl.has(e.name)?!1:n?n.includes(e.name):!0)}async function Vi(n,e,r,s=nr){let i=sr(n,s);if(!i)return{ok:!1,content:`\u9519\u8BEF\uFF1A\u672A\u77E5\u5DE5\u5177 "${n}"`};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${n} \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${n} \u7F3A\u5C11\u5FC5\u586B\u53C2\u6570 ${p.map(d=>`"${d}"`).join("\u3001")}\u3002`};try{return await i.execute(o,r)}catch(d){return{ok:!1,content:`\u5DE5\u5177\u6267\u884C\u5F02\u5E38\uFF1A${d instanceof Error?d.message:String(d)}`}}}async function Yi(n,e,r){let s=new Array(n.length);if(n.length===0)return s;let i=Number.isFinite(e)?Math.floor(e):1,o=Math.min(Math.max(1,i),n.length),a=0;return await Promise.all(Array.from({length:o},async()=>{for(;;){let l=a++;if(l>=n.length)return;s[l]=await r(n[l],l)}})),s}function Zi(n,e,r,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
396
  \u4F60\u7684\u5DE5\u4F5C\u76EE\u5F55\uFF1A${n}
395
397
 
@@ -402,8 +404,10 @@ ${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
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
407
411
  7. \u4E0D\u8981\u91CD\u590D\u5DF2\u5B8C\u6210\u7684\u5DE5\u4F5C\uFF1A\u52A8\u624B\u524D\u5148\u770B\u5BF9\u8BDD\u91CC**\u5DF2\u7ECF\u505A\u8FC7\u4EC0\u4E48**\uFF0C\u4ECE\u4E0A\u6B21\u505C\u4E0B\u7684\u5730\u65B9\u7EE7\u7EED\uFF0C
408
412
  \u4E0D\u8981\u6BCF\u6B21\u90FD\u4ECE\u5934\u91CD\u8FF0\u8BA1\u5212\u3001\u91CD\u8DD1\u540C\u6837\u7684\u8C03\u7528\u3002\u82E5\u5DE5\u5177\u8FD4\u56DE\u91CC\u51FA\u73B0
409
413
  \u300C[\u7CFB\u7EDF\u63D0\u9192] \u8FD9\u4E00\u6B65\u5DF2\u7ECF\u5B8C\u6210\u300D\uFF0C\u8BF4\u660E\u4F60\u6B63\u5728\u91CD\u590D\uFF0C\u8BF7\u7ACB\u5373\u8F6C\u5411\u672A\u5B8C\u6210\u7684\u90E8\u5206 \u2014\u2014
@@ -429,7 +433,7 @@ ${wl(r)}`,summary:Cl(r)})}};var nr=[Ki,Hi,wi,Ci,Ti,Wi,ti,fi,yi,vi,bi,gi,$i,ni,..
429
433
  - bash\uFF1A\u6267\u884C shell \u547D\u4EE4\uFF08\u5371\u9669\uFF0C\u9700\u786E\u8BA4\uFF09
430
434
  - todo_write\uFF1A\u521B\u5EFA / \u66F4\u65B0\u4EFB\u52A1\u5217\u8868\uFF08\u6BCF\u6B21\u63D0\u4EA4\u5B8C\u6574\u5217\u8868\uFF09
431
435
  - 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\uFF08\u5148 memory_read \u8BFB\u5168\u6587\uFF09
436
+ - 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
437
  - device_list / device_push / device_run / device_stop / device_logs\uFF1A\u628A\u811A\u672C\u63A8\u5230**\u624B\u673A**
434
438
  \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
439
  \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
@@ -464,201 +468,201 @@ ${wl(r)}`,summary:Cl(r)})}};var nr=[Ki,Hi,wi,Ci,Ti,Wi,ti,fi,yi,vi,bi,gi,$i,ni,..
464
468
  - \u82E5\u4EFB\u52A1\u65E0\u6CD5\u5B8C\u6210\uFF0C\u8BF4\u660E\u539F\u56E0\u548C\u6240\u9700\u4FE1\u606F\u3002`;return r&&r.trim()&&(a+=`
465
469
 
466
470
  ## \u9879\u76EE\u89C4\u5219\uFF08\u6765\u81EA\u9879\u76EE\u6839 .xuanzhu/rules.md\uFF0C\u8BF7\u4F18\u5148\u9075\u5B88\uFF09
467
- ${r.trim()}`),a+=Al(s,i),e&&e.trim()&&(a+=`
471
+ ${r.trim()}`),a+=_l(s,i),e&&e.trim()&&(a+=`
468
472
 
469
473
  ## \u9644\u52A0\u6307\u4EE4
470
- ${e.trim()}`),a}var or=1500;function Al(n,e){let r="\n\n## \u9879\u76EE\u8BB0\u5FC6\n\u672C\u9879\u76EE\u5728 `.xuanzhu/memory/` \u4E2D\u4FDD\u5B58\u8DE8\u4F1A\u8BDD\u8BB0\u5FC6\uFF08\u957F\u671F\u8BB0\u5FC6 `MEMORY.md` + \u6309\u65E5\u671F\u7684\u65E5\u5FD7\uFF09\uFF1A\n- **`memory_read`**\uFF1A\u8BFB\u53D6\u6B64\u524D\u79EF\u7D2F\u7684\u7ED3\u8BBA\u4E0E\u7EA6\u5B9A\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\u3002**\u6BCF\u5B8C\u6210\u4E00\u4EF6\u5B9E\u8D28\u5DE5\u4F5C\u90FD\u5FC5\u987B\u5199**\uFF0C\u4F8B\u5982\uFF1A\u786E\u5B9A\u7684\u6280\u672F\u65B9\u6848\u3001\u9879\u76EE\u7EA6\u5B9A\u3001\u7528\u6237\u7684\u504F\u597D\u4E0E\u8981\u6C42\u3001\u8E29\u8FC7\u7684\u5751\u53CA\u5176\u89E3\u6CD5\u3001\u91CD\u8981\u53D1\u73B0\u3002\n- \u8303\u56F4\u9009\u62E9\uFF1A`scope=long` \u5199\u957F\u671F\u8BB0\u5FC6\uFF08\u7A33\u5B9A\u7ED3\u8BBA\u4E0E\u7EA6\u5B9A\uFF09\uFF1B`scope=daily`\uFF08\u9ED8\u8BA4\uFF09\u5199\u5F53\u65E5\u65E5\u5FD7\uFF08\u8FC7\u7A0B\u8BB0\u5F55\u3001\u5F53\u5929\u7684\u8FDB\u5C55\uFF09\u3002\n- \u957F\u671F\u8BB0\u5FC6\u8D85\u51FA\u4E0A\u9650\u65F6\u4F1A\u88AB**\u81EA\u52A8\u7CBE\u7B80**\uFF08\u53BB\u91CD + \u88C1\u526A\u6700\u65E7\u6761\u76EE\uFF09\uFF0C\u4F60\u65E0\u9700\u4E3A\u6B64\u64CD\u5FC3\uFF1B\u82E5\u81EA\u52A8\u7CBE\u7B80\u540E\u4ECD\u8D85\u9650\uFF0C\u624D\u9700\u8981\u4F60\u7528 `memory_compact` \u505A\u8BED\u4E49\u538B\u7F29\u3002\n- **\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 \u2014\u2014 \u5B83\u4EEC\u5BF9\u540E\u7EED\u4F1A\u8BDD\u6CA1\u6709\u4EF7\u503C\uFF0C\u5199\u8FDB\u53BB\u53EA\u4F1A\u6324\u5360\u540E\u7EED\u4F1A\u8BDD\u7684\u4E0A\u4E0B\u6587\u3002",s=n?.longTerm?.trim();if(s){let a=s.length>or?`${s.slice(0,or)}
474
+ ${e.trim()}`),a}var or=1500;function _l(n,e){let r="\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=n?.longTerm?.trim();if(s){let a=s.length>or?`${s.slice(0,or)}
471
475
  \u2026\uFF08\u5DF2\u622A\u65AD\uFF0C\u53EF\u7528 memory_read \u67E5\u770B\u5B8C\u6574\u5185\u5BB9\uFF09`:s;r+=`
472
476
 
473
477
  ### \u73B0\u6709\u957F\u671F\u8BB0\u5FC6\uFF08\u8282\u9009\uFF09
474
478
  ${a}`}let i=e??me;s&&i>0&&s.length>i&&(r+=`
475
479
 
476
480
  ### \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\u4F46**\u81EA\u52A8\u7CBE\u7B80\u5DF2\u65E0\u6CD5\u7EE7\u7EED**\uFF08\u591A\u534A\u662F\u5355\u6761\u8BB0\u5F55\u672C\u8EAB\u5C31\u8FC7\u957F\uFF0C\u518D\u88C1\u5C31\u4F1A\u628A\u7ED3\u8BBA\u6574\u6761\u4E22\u6389\uFF09\u3002\u8BF7\uFF1A
481
+ \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
482
  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\uFF0C\u5220\u6389\u5DF2\u8FC7\u65F6\u6216\u88AB\u540E\u7EED\u7ED3\u8BBA\u63A8\u7FFB\u7684\u5185\u5BB9\uFF0C\u628A\u5197\u957F\u7684\u8FC7\u7A0B\u6D53\u7F29\u4E3A\u7ED3\u8BBA\uFF1B
483
+ 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
480
484
  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=n?.recentDaily?.trim();if(o){let a=o.length>or?`${o.slice(-or)}
481
485
  \u2026\uFF08\u5DF2\u622A\u65AD\uFF0C\u53EF\u7528 memory_read \u67E5\u770B\u5B8C\u6574\u5185\u5BB9\uFF09`:o;r+=`
482
486
 
483
487
  ### \u4ECA\u65E5\u65E5\u5FD7\uFF08\u8282\u9009\uFF09
484
- ${a}`}return r}var Qi=v(require("path")),kl=new Set(["read_file","list_dir","glob","grep"]),El=/(^|\/)(\.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,ar=400,_l=.5,Pn=1e6,Pl=4,Rl=1,Ml=new Set(["read_file","list_dir","glob","grep"]),Il=8,Dl=4e4,Rn=2e4,Ol=60,Ll=16,Nl=4,jl="[\u7CFB\u7EDF] \u672C\u6B21\u8C03\u7528\u5DF2\u8DF3\u8FC7",Bl=12,Zi=120,lr=class n{provider;config;cwd;events;systemPrompt;warnedTightContext=!1;history=[];activeModel;tools;systemPromptOverride;maxToolRoundsOverride;sessionFile;todos=[];deviceBridge;pendingMemoryNotices=[];constructor(e,r,s,i,o,a){this.provider=e,this.config=r,this.cwd=s,this.events=i,this.activeModel=o??je(r),this.tools=a?.tools,this.systemPromptOverride=a?.systemPrompt,this.maxToolRoundsOverride=a?.maxToolRounds,this.sessionFile=a?.sessionFile,this.systemPrompt=this.composeSystemPrompt()}getActiveModel(){return this.activeModel}composeSystemPrompt(){return this.systemPromptOverride?this.systemPromptOverride:(this.autoCompactMemory(),Yi(this.cwd,this.config.systemPromptExtra,ts(this.cwd),pt(this.cwd),this.config.memoryMaxChars))}autoCompactMemory(){let e=this.config.memoryMaxChars??me,r=Tt(this.cwd,e);if(!r||r.removedDuplicates===0&&r.removedOldest===0)return;let s=[];r.removedDuplicates>0&&s.push(`\u53BB\u9664 ${r.removedDuplicates} \u6761\u91CD\u590D\u8BB0\u5F55`),r.removedOldest>0&&s.push(`\u88C1\u526A ${r.removedOldest} \u6761\u6700\u65E7\u8BB0\u5F55`),this.pendingMemoryNotices.push(`\u957F\u671F\u8BB0\u5FC6\u5DF2\u81EA\u52A8\u7CBE\u7B80\uFF08${s.join("\u3001")}\uFF0C${r.before} \u2192 ${r.after} \u5B57\u7B26\uFF09\u3002\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.todos.length>0&&(this.todos=[],this.events.onTodos?.([]))}appendHistory(e){for(let r of e)this.history.push(r);this.sessionFile&&un(this.sessionFile,e)}restoreSession(e,r){this.history=[...e],this.sessionFile=r,un(r,e)}getTodos(){return this.todos}setDeviceBridge(e){this.deviceBridge=e}todoStore(){return{get:()=>this.todos,set:e=>{let r=!1;this.todos=e.map(s=>s.status!=="in_progress"?s:r?{...s,status:"pending"}:(r=!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,r,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&&Fr(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,r);if(r?.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()?ke: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(jl))continue;let b=P.get(w.toolCallId??"")??"",k=b.length>Zi?`${b.slice(0,Zi)}\u2026`:b;z.push(`${w.name??"\u5DE5\u5177"}(${k})`)}if(z.length===0)return null;let R=z.slice(0,Bl).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\u3002
488
+ ${a}`}return r}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,ar=400,Rl=.5,En=1e6,Ml=4,Il=1,Dl=new Set(["read_file","list_dir","glob","grep"]),Ol=8,Ll=4e4,Pn=2e4,Nl=60,jl=16,Bl=4,Ul="[\u7CFB\u7EDF] \u672C\u6B21\u8C03\u7528\u5DF2\u8DF3\u8FC7",Fl=12,Qi=120,lr=class n{provider;config;cwd;events;systemPrompt;warnedTightContext=!1;history=[];activeModel;tools;systemPromptOverride;maxToolRoundsOverride;sessionFile;todos=[];deviceBridge;pendingMemoryNotices=[];constructor(e,r,s,i,o,a){this.provider=e,this.config=r,this.cwd=s,this.events=i,this.activeModel=o??je(r),this.tools=a?.tools,this.systemPromptOverride=a?.systemPrompt,this.maxToolRoundsOverride=a?.maxToolRounds,this.sessionFile=a?.sessionFile,this.systemPrompt=this.composeSystemPrompt()}getActiveModel(){return this.activeModel}composeSystemPrompt(){return this.systemPromptOverride?this.systemPromptOverride:(this.autoCompactMemory(),Zi(this.cwd,this.config.systemPromptExtra,ts(this.cwd),Xe(this.cwd),this.config.memoryMaxChars))}autoCompactMemory(){let e=this.config.memoryMaxChars??me,r=Tt(this.cwd,e);if(!r||r.removedDuplicates===0&&r.removedOldest===0)return;let s=[];r.removedDuplicates>0&&s.push(`\u53BB\u9664 ${r.removedDuplicates} \u6761\u91CD\u590D\u8BB0\u5F55`),r.removedOldest>0&&s.push(`\u88C1\u526A ${r.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${r.before} \u2192 ${r.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.todos.length>0&&(this.todos=[],this.events.onTodos?.([]))}appendHistory(e){for(let r of e)this.history.push(r);this.sessionFile&&cn(this.sessionFile,e)}restoreSession(e,r){this.history=[...e],this.sessionFile=r,cn(r,e)}getTodos(){return this.todos}setDeviceBridge(e){this.deviceBridge=e}todoStore(){return{get:()=>this.todos,set:e=>{let r=!1;this.todos=e.map(s=>s.status!=="in_progress"?s:r?{...s,status:"pending"}:(r=!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,r,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&&Ur(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,r);if(r?.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()?ke: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\u3002
485
489
  \u4E2D\u6B62\u524D**\u5DF2\u7ECF\u771F\u5B9E\u6267\u884C**\u8FC7\u7684\u64CD\u4F5C\uFF08\u526F\u4F5C\u7528\u4ECD\u7136\u5B58\u5728\uFF0C\u4E0D\u8981\u91CD\u590D\u6267\u884C\uFF09\uFF1A
486
490
  `+R.join(`
487
491
  `)+`
488
- \u8BF7\u76F4\u63A5\u56DE\u5E94\u7528\u6237\u6700\u65B0\u7684\u6D88\u606F\uFF0C\u4E0D\u8981\u63A5\u7740\u5B8C\u6210\u88AB\u4E2D\u6B62\u7684\u65E7\u4EFB\u52A1\u3002`}},h=x=>{let P=u(x);a.length=0,P&&(this.appendHistory([P]),this.trimHistory())},d="",p=0,m=new Map,f=0,y=0,g=!1,S=!1,$=(x,P)=>g||S||!Ml.has(x)||(f++,y+=P.length,f<Il&&y<Dl)?"":(g=!0,this.events.onStatus("\u5EFA\u8BAE\u6539\u7528\u5B50\u4EE3\u7406",`\u672C\u8F6E\u5DF2\u8C03\u7814 ${f} \u6B21`),`
492
+ \u8BF7\u76F4\u63A5\u56DE\u5E94\u7528\u6237\u6700\u65B0\u7684\u6D88\u606F\uFF0C\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
493
 
490
494
  [\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
495
  \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(r?.aborted){h("\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(r?.aborted){h("\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(r,new Set,a);if(r?.aborted){h("\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 E=b[k],Ne=`${E.name}:${E.arguments}`;if(Ne===d?p++:(d=Ne,p=1),p>=Pl){if(A<Rl){A++;let L=p;p=0,d="",this.skipToolCalls(a,b,k,ae=>ae===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 \`${E.name}\`\uFF08\u53C2\u6570\u5B8C\u5168\u76F8\u540C\uFF09\uFF0C\u4F46\u4EFB\u52A1\u5E76\u6CA1\u6709\u56E0\u6B64\u63A8\u8FDB\u3002
496
+ \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(r?.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(r?.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(r,new Set,a);if(r?.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],Ne=`${_.name}:${_.arguments}`;if(Ne===d?h++:(d=Ne,h=1),h>=Ml){if(A<Il){A++;let L=h;h=0,d="",this.skipToolCalls(a,b,k,ae=>ae===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
497
 
494
498
  \u8BF7\u5148\u505C\u4E0B\u6765\u5206\u6790\uFF0C\u4E0D\u8981\u7EE7\u7EED\u8C03\u7528\u5DE5\u5177\uFF1A
495
499
  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
500
  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
501
  3. \u63A5\u4E0B\u6765\u5E94\u8BE5\u505A\u4EC0\u4E48**\u4E0D\u540C**\u7684\u4E8B\uFF1F
498
502
 
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 ${E.name} \u7684\u91CD\u590D`),this.events.onNotice?.(`\u68C0\u6D4B\u5230\u8FDE\u7EED ${L} \u6B21\u91CD\u590D\u8C03\u7528\uFF08${E.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 ${p} \u6B21\u5B8C\u5168\u76F8\u540C\u7684\u5DE5\u5177\u8C03\u7528\uFF08${E.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
503
+ \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
504
  \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
505
  \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 ${E.name}\u300D`),this.abortReason="\u9677\u5165\u91CD\u590D\u8C03\u7528\uFF08\u81EA\u6211\u4FEE\u6B63\u65E0\u6548\uFF09";return}if(this.isParallelTool(E.name)){let L=[E],ae=k+1;for(;ae<b.length&&L.length<this.parallelLimit()&&this.isParallelTool(b[ae].name)&&!L.some(We=>We.name===b[ae].name&&We.arguments===b[ae].arguments);)L.push(b[ae]),ae++;if(L.length>1){for(let ye=1;ye<L.length;ye++)d=`${L[ye].name}:${L[ye].arguments}`,p=1;this.events.onStatus("\u5E76\u884C\u6267\u884C",`${L.length} \u4E2A\u5B50\u4EE3\u7406`);let We=await this.runToolBatch(L,r);for(let ye=0;ye<L.length;ye++){let Ge=L[ye],Sr=We[ye];if(Ge.name==="task"&&(S=!0),Sr.ok){let Gn=`${Ge.name}:${Ge.arguments}`;m.set(Gn,(m.get(Gn)??0)+1)}a.push({role:"tool",content:Sr.content,toolCallId:Ge.id,name:Ge.name}),this.events.onToolEnd(Ge,Sr)}if(r?.aborted){h("\u88AB\u7528\u6237\u4E2D\u65AD"),this.events.onStatus("\u5DF2\u4E2D\u65AD");return}k=ae;continue}}let $e=await this.runTool(E,r);$e.ok&&m.set(Ne,(m.get(Ne)??0)+1);let xr=$e.content;if(p>=2&&$e.ok){let L=[...m.entries()].map(([ae,We])=>`${ae.split(":")[0]}\xD7${We}`).join("\u3001");xr+=`
506
+ \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=[_],ae=k+1;for(;ae<b.length&&L.length<this.parallelLimit()&&this.isParallelTool(b[ae].name)&&!L.some(We=>We.name===b[ae].name&&We.arguments===b[ae].arguments);)L.push(b[ae]),ae++;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,r);for(let ye=0;ye<L.length;ye++){let Ge=L[ye],Sr=We[ye];if(Ge.name==="task"&&(S=!0),Sr.ok){let Wn=`${Ge.name}:${Ge.arguments}`;m.set(Wn,(m.get(Wn)??0)+1)}a.push({role:"tool",content:Sr.content,toolCallId:Ge.id,name:Ge.name}),this.events.onToolEnd(Ge,Sr)}if(r?.aborted){p("\u88AB\u7528\u6237\u4E2D\u65AD"),this.events.onStatus("\u5DF2\u4E2D\u65AD");return}k=ae;continue}}let $e=await this.runTool(_,r);$e.ok&&m.set(Ne,(m.get(Ne)??0)+1);let xr=$e.content;if(h>=2&&$e.ok){let L=[...m.entries()].map(([ae,We])=>`${ae.split(":")[0]}\xD7${We}`).join("\u3001");xr+=`
503
507
 
504
- [\u7CFB\u7EDF\u63D0\u9192] \u8FD9\u662F\u8FDE\u7EED\u7B2C ${p} \u6B21\u8C03\u7528 \`${E.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
508
+ [\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
509
  \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",`${E.name} \xD7${p}`)}if(E.name==="task"&&(S=!0),xr+=$(E.name,$e.content),a.push({role:"tool",content:xr,toolCallId:E.id,name:E.name}),$e.images&&$e.images.length>0&&G.push({role:"user",content:`\uFF08\u4E0A\u9762 ${E.name} \u7684\u8FD4\u56DE\u9644\u5E26\u4E86 ${$e.images.length} \u5F20\u56FE\u7247\uFF09`,images:$e.images}),this.events.onToolEnd(E,$e),r?.aborted){h("\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
510
+ \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),xr+=$(_.name,$e.content),a.push({role:"tool",content:xr,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),r?.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
511
  `+(z?`\xB7 \u672C\u8F6E\u5171 ${P} \u6B21\u5DE5\u5177\u8C03\u7528\uFF1A${z}
508
512
  `:"")+`\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
513
  `+(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
514
  `:`\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(h(r?.aborted?"\u88AB\u7528\u6237\u4E2D\u65AD":"\u56E0\u51FA\u9519\u4E2D\u6B62"),r?.aborted){this.events.onStatus("\u5DF2\u4E2D\u65AD"),this.abortReason="\u5DF2\u88AB\u7528\u6237\u4E2D\u65AD";return}throw x}}async analyzeIntent(e,r){let s=this.config.intent?.prompt?.trim()||ss,i=is(s,e),o="";try{let l=this.provider.chat({messages:[{role:"user",content:i}],tools:[],temperature:this.config.temperature,signal:r});for await(let c of l)if(c.type==="text"&&(o+=c.text,o.length>Pn))break}catch(l){return r?.aborted||this.events.onNotice?.(`\u610F\u56FE\u5206\u6790\u8BF7\u6C42\u5931\u8D25\uFF08${ce(l).split(`
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,r=new Set,s=[],i=1,o=!1){this.activeModel&&r.add(this.activeModel.id);let a=this.buildConversation(s,i);o&&(a=Br(a));let l=[{role:"system",content:this.systemPrompt},...a],c=l.reduce((m,f)=>m+Ze(f),0),u="",h=[],d=!1,p=[...this.history,...s].some(m=>(m.images?.length??0)>0);try{let m=this.provider.chat({messages:l,tools:ir(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})`,ce(g).split(`
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>Pn)return this.events.onNotice?.(`\u6A21\u578B\u8F93\u51FA\u8D85\u8FC7 ${Pn} \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:h};break;case"reasoning":this.events.onReasoning?.(f.text);break;case"tool_call":h.push(f.toolCall);break;case"done":f.usage?.inputTokens&&this.tokenCalibrator().observe(c,f.usage.inputTokens);break}}return{text:u,toolCalls:h}}catch(m){if(e?.aborted)throw m;if(!d&&!e?.aborted&&i>=1&&At(m))return this.events.onStatus("\u4E0A\u4E0B\u6587\u8D85\u9650","\u5DF2\u6536\u655B\u5386\u53F2\uFF0C\u6B63\u5728\u91CD\u8BD5"),this.streamAssistant(e,r,s,_l,o);if(!d&&!e?.aborted&&!o&&p&&kt(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${ce(m).split(`
515
+ `)+"\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(r?.aborted?"\u88AB\u7528\u6237\u4E2D\u65AD":"\u56E0\u51FA\u9519\u4E2D\u6B62"),r?.aborted){this.events.onStatus("\u5DF2\u4E2D\u65AD"),this.abortReason="\u5DF2\u88AB\u7528\u6237\u4E2D\u65AD";return}throw x}}async analyzeIntent(e,r){let s=this.config.intent?.prompt?.trim()||is,i=os(s,e),o="";try{let l=this.provider.chat({messages:[{role:"user",content:i}],tools:[],temperature:this.config.temperature,signal:r});for await(let c of l)if(c.type==="text"&&(o+=c.text,o.length>En))break}catch(l){return r?.aborted||this.events.onNotice?.(`\u610F\u56FE\u5206\u6790\u8BF7\u6C42\u5931\u8D25\uFF08${ce(l).split(`
516
+ `)[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,r=new Set,s=[],i=1,o=!1){this.activeModel&&r.add(this.activeModel.id);let a=this.buildConversation(s,i);o&&(a=jr(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:ir(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})`,ce(g).split(`
517
+ `)[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>En)return this.events.onNotice?.(`\u6A21\u578B\u8F93\u51FA\u8D85\u8FC7 ${En} \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&&At(m))return this.events.onStatus("\u4E0A\u4E0B\u6587\u8D85\u9650","\u5DF2\u6536\u655B\u5386\u53F2\uFF0C\u6B63\u5728\u91CD\u8BD5"),this.streamAssistant(e,r,s,Rl,o);if(!d&&!e?.aborted&&!o&&h&&kt(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${ce(m).split(`
514
518
  `)[0]}\uFF09\uFF0C\u5DF2\u53BB\u6389\u56FE\u7247\u91CD\u8BD5\u4E00\u6B21\u3002
515
519
  \xB7 \u60F3\u5F7B\u5E95\u907F\u514D\u8FD9\u6B21\u767D\u8BD5\uFF1Axzh model vision <id> off
516
520
  \xB7 \u6216\u6539\u7528 glm-4v / qwen-vl / gpt-4o / claude / gemini \u7B49\u652F\u6301\u89C6\u89C9\u7684\u6A21\u578B`),this.streamAssistant(e,r,s,i,!0);if(this.handleModelFailure(m,r,!d))return this.streamAssistant(e,r,s,i);throw m}}handleModelFailure(e,r,s=!0){let i=this.activeModel;if(!i)return!1;r.add(i.id);let o=ce(e).split(`
517
- `)[0];if(_r(e)&&!Pr(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=as(this.config,i.id,r);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=Ot(this.config,a),this.activeModel=a,ls(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${ce(l)}`),!1}}persistConfig(){try{W(this.config)}catch{}}touchesSensitivePath(e,r){if(!kl.has(e))return!1;let s="";try{let i=JSON.parse(r);typeof i.path=="string"&&(s=i.path)}catch{return!1}return s?El.test(Qi.resolve(this.cwd,q(s))):!1}async runTool(e,r){let s=sr(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(r?.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:r,todos:this.todoStore(),memoryMaxChars:this.config.memoryMaxChars,spawnAgent:a=>this.spawnSubAgent(a,r),deviceBridge:this.deviceBridge};return Xi(e.name,e.arguments,o,this.tools)}isParallelTool(e){return sr(e,this.tools)?.parallelSafe===!0}parallelLimit(){let e=Math.floor(this.config.maxParallelAgents??Nl);return!Number.isFinite(e)||e<1?1:Math.min(e,Ll)}async runToolBatch(e,r){return Vi(e,this.parallelLimit(),async s=>{try{return await this.runTool(s,r)}catch(i){return{ok:!1,content:`\u5DE5\u5177\u6267\u884C\u5F02\u5E38\uFF1A${i instanceof Error?i.message:String(i)}`}}})}skipToolCalls(e,r,s,i){for(let o=s;o<r.length;o++)e.push({role:"tool",content:i(o),toolCallId:r[o].id,name:r[o].name})}async spawnSubAgent(e,r){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${xt().join("\u3001")}`};let i="",o=e.description.length>24?`${e.description.slice(0,24)}\u2026`:e.description,a=`[${s.name}: ${o}]`,l={onText:p=>{i+=p},onToolStart:p=>{let m=p.arguments.length>120?`${p.arguments.slice(0,120)}\u2026`:p.arguments;this.events.onNotice?.(`${a} ${p.name} ${m}`)},onToolEnd:()=>{},onStatus:p=>this.events.onStatus(`\u5B50\u4EE3\u7406\uFF1A${p}`,o),onNotice:p=>this.events.onNotice?.(`${a} ${p}`),confirm:p=>this.events.confirm(p),onRoundLimit:async()=>!1};this.events.onStatus(`\u5B50\u4EE3\u7406\u6267\u884C\u4E2D\uFF08${s.name}\uFF09`,o);let c=new n(this.provider,this.config,this.cwd,l,this.activeModel,{tools:Gi(s.toolNames),systemPrompt:s.systemPrompt({cwd:this.cwd,description:e.description,prompt:e.prompt}),maxToolRounds:Ol});try{await c.run(e.prompt,r)}catch(p){let m=c.abortReason?`\uFF08${c.abortReason}\uFF09`:"";throw new Error(`${m}${p instanceof Error?p.message:String(p)}`)}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
521
+ `)[0];if(_r(e)&&!Er(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=ls(this.config,i.id,r);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=Ot(this.config,a),this.activeModel=a,cs(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${ce(l)}`),!1}}persistConfig(){try{W(this.config)}catch{}}touchesSensitivePath(e,r){if(!El.has(e))return!1;let s="";try{let i=JSON.parse(r);typeof i.path=="string"&&(s=i.path)}catch{return!1}return s?Pl.test(eo.resolve(this.cwd,q(s))):!1}async runTool(e,r){let s=sr(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(r?.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:r,todos:this.todoStore(),memoryMaxChars:this.config.memoryMaxChars,spawnAgent:a=>this.spawnSubAgent(a,r),deviceBridge:this.deviceBridge};return Vi(e.name,e.arguments,o,this.tools)}isParallelTool(e){return sr(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,r){return Yi(e,this.parallelLimit(),async s=>{try{return await this.runTool(s,r)}catch(i){return{ok:!1,content:`\u5DE5\u5177\u6267\u884C\u5F02\u5E38\uFF1A${i instanceof Error?i.message:String(i)}`}}})}skipToolCalls(e,r,s,i){for(let o=s;o<r.length;o++)e.push({role:"tool",content:i(o),toolCallId:r[o].id,name:r[o].name})}async spawnSubAgent(e,r){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${xt().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 n(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,r)}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
522
 
519
- `:"",h=i.trim();if(!h)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=h.length>Rn?`${h.slice(0,Rn)}
523
+ `:"",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>Pn?`${p.slice(0,Pn)}
520
524
 
521
- \u2026\uFF08\u5B50\u4EE3\u7406\u62A5\u544A\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD ${h.length-Rn} \u5B57\u7B26\uFF09`:h;return{ok:!0,content:`${u}${s.name} \u5B50\u4EE3\u7406\u300C${e.description}\u300D\u7684\u7ED3\u8BBA\uFF1A
525
+ \u2026\uFF08\u5B50\u4EE3\u7406\u62A5\u544A\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD ${p.length-Pn} \u5B57\u7B26\uFF09`:p;return{ok:!0,content:`${u}${s.name} \u5B50\u4EE3\u7406\u300C${e.description}\u300D\u7684\u7ED3\u8BBA\uFF1A
522
526
 
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 Jr(e)}conversationBudget(){let e=Ur(this.activeModel?.contextWindow,this.activeModel?.model??"",this.systemPrompt);return zr(e,this.tokenCalibrator().factor())}buildConversation(e,r=1){let s=Nr([...this.history,...e],this.history.length),i=s.length>ar?s.slice(-ar):s,o=Math.max(1,Math.floor(this.conversationBudget()*r));return Mt(i,o)}trimHistory(){let e=Mt(this.history,this.conversationBudget());if(e.length>ar&&(e=Rt(e.slice(e.length-ar))),e.length===this.history.length)return 0;let r=this.history.length-e.length;return this.history=e,r}};var no=require("child_process"),cr=5*1024*1024,eo=1e4,Ul=["$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("; "),to="[Console]::Out.Write((Get-Clipboard -Raw))",Fl=3;function zl(){if(process.platform==="win32"){let n=e=>["-NoProfile","-NonInteractive",...e==="powershell.exe"?["-STA"]:[],"-Command",Ul];return[{command:"powershell.exe",args:n("powershell.exe"),output:"base64",label:"PowerShell"},{command:"pwsh",args:n("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 Jl(){return process.platform==="win32"?[{command:"powershell.exe",args:["-NoProfile","-NonInteractive","-Command",to],output:"binary",label:"PowerShell"},{command:"pwsh",args:["-NoProfile","-NonInteractive","-Command",to],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(n){return n.length===0?Buffer.alloc(0):Buffer.concat(n)}function so(n){return new Promise(e=>{let r=!1,s=l=>{r||(r=!0,e(l))},i;try{i=(0,no.spawn)(n.command,n.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${eo} ms\uFF09`})},eo);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 Mn(n){return n.length>=8&&n[0]===137&&n[1]===80&&n[2]===78&&n[3]===71?"image/png":n.length>=3&&n[0]===255&&n[1]===216&&n[2]===255?"image/jpeg":n.length>=6&&n.subarray(0,4).toString("latin1")==="GIF8"?"image/gif":n.length>=12&&n.subarray(0,4).toString("latin1")==="RIFF"&&n.subarray(8,12).toString("latin1")==="WEBP"?"image/webp":null}function Kl(n){let e=/«data\s+\w{4}([0-9A-Fa-f]+)»/.exec(n);if(!e)return null;let r=e[1];return r.length===0||r.length%2!==0?null:Buffer.from(r,"hex")}function Hl(n,e){if(e.code!==0)return e.code===Fl?{empty:!0}:{error:`${n.label} \u9000\u51FA\u7801 ${e.code??"\u672A\u77E5"}${e.error?`\uFF08${e.error}\uFF09`:""}`};let r=null;if(n.output==="binary")r=e.stdout;else if(n.output==="base64"){let i=e.stdout.toString("utf8").replace(/\s+/g,"");r=i.length>0?Buffer.from(i,"base64"):null}else r=Kl(e.stdout.toString("utf8"));if(!r||r.length===0)return{empty:!0};let s=Mn(r);return s?{image:{mimeType:s,base64:r.toString("base64"),bytes:r.length}}:{empty:!0}}async function In(){let n=[],e="";for(let r of zl()){n.push(r.label);let s=await so(r);if(s.missing)continue;let i=Hl(r,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${n.join("\u3001")}\uFF09\u3002`+(process.platform==="linux"?" \u8BF7\u5B89\u88C5 wl-clipboard\uFF08Wayland\uFF09\u6216 xclip\uFF08X11\uFF09\u3002":"")}}async function io(){for(let n of Jl()){let e=await so(n);if(e.missing||e.code!==0)continue;let r=e.stdout.toString("utf8");if(r.length>0)return r}return null}var ur=class{buffer="";inCodeBlock=!1;codeLang="";push(e){this.buffer+=e;let r=[],s=this.buffer.indexOf(`
527
+ ${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 zr(e)}conversationBudget(){let e=Br(this.activeModel?.contextWindow,this.activeModel?.model??"",this.systemPrompt);return Fr(e,this.tokenCalibrator().factor())}buildConversation(e,r=1){let s=Lr([...this.history,...e],this.history.length),i=s.length>ar?s.slice(-ar):s,o=Math.max(1,Math.floor(this.conversationBudget()*r));return Mt(i,o)}trimHistory(){let e=Mt(this.history,this.conversationBudget());if(e.length>ar&&(e=Rt(e.slice(e.length-ar))),e.length===this.history.length)return 0;let r=this.history.length-e.length;return this.history=e,r}};var so=require("child_process"),cr=5*1024*1024,to=1e4,zl=["$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("; "),ro="[Console]::Out.Write((Get-Clipboard -Raw))",Jl=3;function Kl(){if(process.platform==="win32"){let n=e=>["-NoProfile","-NonInteractive",...e==="powershell.exe"?["-STA"]:[],"-Command",zl];return[{command:"powershell.exe",args:n("powershell.exe"),output:"base64",label:"PowerShell"},{command:"pwsh",args:n("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 Hl(){return process.platform==="win32"?[{command:"powershell.exe",args:["-NoProfile","-NonInteractive","-Command",ro],output:"binary",label:"PowerShell"},{command:"pwsh",args:["-NoProfile","-NonInteractive","-Command",ro],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 no(n){return n.length===0?Buffer.alloc(0):Buffer.concat(n)}function io(n){return new Promise(e=>{let r=!1,s=l=>{r||(r=!0,e(l))},i;try{i=(0,so.spawn)(n.command,n.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:no(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:no(o)})})})}function Rn(n){return n.length>=8&&n[0]===137&&n[1]===80&&n[2]===78&&n[3]===71?"image/png":n.length>=3&&n[0]===255&&n[1]===216&&n[2]===255?"image/jpeg":n.length>=6&&n.subarray(0,4).toString("latin1")==="GIF8"?"image/gif":n.length>=12&&n.subarray(0,4).toString("latin1")==="RIFF"&&n.subarray(8,12).toString("latin1")==="WEBP"?"image/webp":null}function ql(n){let e=/«data\s+\w{4}([0-9A-Fa-f]+)»/.exec(n);if(!e)return null;let r=e[1];return r.length===0||r.length%2!==0?null:Buffer.from(r,"hex")}function Wl(n,e){if(e.code!==0)return e.code===Jl?{empty:!0}:{error:`${n.label} \u9000\u51FA\u7801 ${e.code??"\u672A\u77E5"}${e.error?`\uFF08${e.error}\uFF09`:""}`};let r=null;if(n.output==="binary")r=e.stdout;else if(n.output==="base64"){let i=e.stdout.toString("utf8").replace(/\s+/g,"");r=i.length>0?Buffer.from(i,"base64"):null}else r=ql(e.stdout.toString("utf8"));if(!r||r.length===0)return{empty:!0};let s=Rn(r);return s?{image:{mimeType:s,base64:r.toString("base64"),bytes:r.length}}:{empty:!0}}async function Mn(){let n=[],e="";for(let r of Kl()){n.push(r.label);let s=await io(r);if(s.missing)continue;let i=Wl(r,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${n.join("\u3001")}\uFF09\u3002`+(process.platform==="linux"?" \u8BF7\u5B89\u88C5 wl-clipboard\uFF08Wayland\uFF09\u6216 xclip\uFF08X11\uFF09\u3002":"")}}async function oo(){for(let n of Hl()){let e=await io(n);if(e.missing||e.code!==0)continue;let r=e.stdout.toString("utf8");if(r.length>0)return r}return null}var ur=class{buffer="";inCodeBlock=!1;codeLang="";push(e){this.buffer+=e;let r=[],s=this.buffer.indexOf(`
524
528
  `);for(;s!==-1;){let i=this.buffer.slice(0,s);this.buffer=this.buffer.slice(s+1),r.push(this.renderLine(i)),s=this.buffer.indexOf(`
525
- `)}return r}peek(){if(!this.buffer)return"";let e=this.inCodeBlock,r=this.codeLang;try{return this.renderLine(this.buffer)}finally{this.inCodeBlock=e,this.codeLang=r}}flush(){if(this.buffer.length===0)return this.inCodeBlock=!1,this.codeLang="",[];let e=this.buffer;this.buffer="";let r=this.renderLine(e);return this.inCodeBlock=!1,this.codeLang="",[r]}renderLine(e){let r=e.replace(/\r$/,""),s=r.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}${r}${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(r);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(r)}renderInline(e,r=""){let s=r?`${t.reset}${r}`: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 wt=require("child_process"),ct=v(require("fs")),pr=v(require("os")),oe=v(require("path"));var oo=2e3,ql=8192,Wl=1200,He;function Gl(){if(He!==void 0)return He;He=null;try{(0,wt.spawnSync)("script",["--version"],{timeout:2e3,stdio:"ignore"}).status===0?He="linux":He=(0,wt.spawnSync)("script",["-h"],{timeout:2e3,stdio:"ignore"}).error?null:"bsd"}catch{He=null}return He}function Xl(n,e){let r=Gl();return r==="linux"?{file:"script",args:["-qec",e,"/dev/null"]}:r==="bsd"?{file:"script",args:["-q","/dev/null",n,"-c",e]}:{file:n,args:["-c",e]}}var hr=class{lines=[];partial="";running;killTimer;cwd;onChange;parseState="text";parseSeq="";constructor(e,r){this.cwd=e,this.onChange=r,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 r=e.trim();if(!r)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(r==="clear"||r==="cls"){this.clear();return}if(this.handleCd(r))return;this.flushPartial(),this.pushLine(`${t.brightGreen}\u276F${t.reset} ${t.bold}${r}${t.reset}`);let s=process.env.SHELL||"/bin/bash",i=Xl(s,r),o;try{o=(0,wt.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 r=this.running;if(!(!r?.stdin||r.stdin.destroyed))try{r.stdin.write(e)}catch{}}interrupt(){let e=this.running;if(!e||e.pid===void 0)return;let r=e.pid,s=i=>{try{process.kill(-r,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")},Wl)}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 r=/^cd(?:\s+([\s\S]*))?$/.exec(e);if(!r)return!1;let s=(r[1]??"").trim().replace(/^['"]|['"]$/g,""),i;if(!s||s==="~")i=pr.homedir();else{let o=s.startsWith("~/")?oe.join(pr.homedir(),s.slice(2)):s;i=oe.isAbsolute(o)?o:oe.resolve(this.cwd,o)}try{if(!ct.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 r=e.replace(/\r\n/g,`
529
+ `)}return r}peek(){if(!this.buffer)return"";let e=this.inCodeBlock,r=this.codeLang;try{return this.renderLine(this.buffer)}finally{this.inCodeBlock=e,this.codeLang=r}}flush(){if(this.buffer.length===0)return this.inCodeBlock=!1,this.codeLang="",[];let e=this.buffer;this.buffer="";let r=this.renderLine(e);return this.inCodeBlock=!1,this.codeLang="",[r]}renderLine(e){let r=e.replace(/\r$/,""),s=r.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}${r}${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(r);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(r)}renderInline(e,r=""){let s=r?`${t.reset}${r}`: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 wt=require("child_process"),ut=v(require("fs")),pr=v(require("os")),oe=v(require("path"));var ao=2e3,Gl=8192,Xl=1200,He;function Vl(){if(He!==void 0)return He;He=null;try{(0,wt.spawnSync)("script",["--version"],{timeout:2e3,stdio:"ignore"}).status===0?He="linux":He=(0,wt.spawnSync)("script",["-h"],{timeout:2e3,stdio:"ignore"}).error?null:"bsd"}catch{He=null}return He}function Yl(n,e){let r=Vl();return r==="linux"?{file:"script",args:["-qec",e,"/dev/null"]}:r==="bsd"?{file:"script",args:["-q","/dev/null",n,"-c",e]}:{file:n,args:["-c",e]}}var hr=class{lines=[];partial="";running;killTimer;cwd;onChange;parseState="text";parseSeq="";constructor(e,r){this.cwd=e,this.onChange=r,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 r=e.trim();if(!r)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(r==="clear"||r==="cls"){this.clear();return}if(this.handleCd(r))return;this.flushPartial(),this.pushLine(`${t.brightGreen}\u276F${t.reset} ${t.bold}${r}${t.reset}`);let s=process.env.SHELL||"/bin/bash",i=Yl(s,r),o;try{o=(0,wt.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 r=this.running;if(!(!r?.stdin||r.stdin.destroyed))try{r.stdin.write(e)}catch{}}interrupt(){let e=this.running;if(!e||e.pid===void 0)return;let r=e.pid,s=i=>{try{process.kill(-r,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")},Xl)}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 r=/^cd(?:\s+([\s\S]*))?$/.exec(e);if(!r)return!1;let s=(r[1]??"").trim().replace(/^['"]|['"]$/g,""),i;if(!s||s==="~")i=pr.homedir();else{let o=s.startsWith("~/")?oe.join(pr.homedir(),s.slice(2)):s;i=oe.isAbsolute(o)?o:oe.resolve(this.cwd,o)}try{if(!ut.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 r=e.replace(/\r\n/g,`
526
530
  `),s=this.partial,i=this.parseState,o=this.parseSeq;for(let a of r){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===`
527
- `){this.pushLine(s),s="";continue}a==="\x07"||a==="\b"||(s+=a)}s.length>ql&&(this.pushLine(s),s=""),this.parseState=i,this.parseSeq=o,this.partial=s,this.onChange()}pushLine(e){this.lines.push(e),this.lines.length>oo&&this.lines.splice(0,this.lines.length-oo)}flushPartial(){this.partial&&(this.pushLine(this.partial),this.partial="")}},Vl=["alias","cd","clear","cls","echo","exit","export","false","history","pwd","set","source","true","type","unalias","unset","which"],dr=null;function Yl(){if(dr)return dr;let n=new Set(Vl);for(let e of(process.env.PATH??"").split(oe.delimiter)){if(!e)continue;let r;try{r=ct.readdirSync(e)}catch{continue}for(let s of r)n.add(s)}return dr=[...n].sort(),dr}function Zl(n){if(n.length===0)return"";let e=n[0];for(let r of n.slice(1)){let s=0;for(;s<e.length&&s<r.length&&e[s]===r[s];)s++;if(e=e.slice(0,s),!e)break}return e}function Ql(n,e){return e?e==="~"||e.startsWith("~/")?oe.join(pr.homedir(),e.slice(1)):oe.isAbsolute(e)?e:oe.resolve(n,e):n}function ao(n,e){if(n.isDirectory())return!0;if(!n.isSymbolicLink())return!1;try{return ct.statSync(oe.join(e,n.name)).isDirectory()}catch{return!1}}function ec(n,e,r){let s=e.lastIndexOf("/"),i=s>=0?e.slice(0,s+1):"",o=e.slice(s+1),a=Ql(n,i),l;try{l=ct.readdirSync(a,{withFileTypes:!0})}catch{return{dirPart:i,base:o,names:[]}}let c=l.filter(u=>r&&!ao(u,a)||u.name.startsWith(".")&&!o.startsWith(".")?!1:u.name.startsWith(o)).map(u=>u.name+(ao(u,a)?"/":"")).sort();return{dirPart:i,base:o,names:c}}function lo(n,e,r){let i=e.slice(0,r).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 h="";(a.startsWith('"')||a.startsWith("'"))&&(h=a[0],a=a.slice(1));let d=a.startsWith("./")||a.startsWith("../")||a.startsWith("/")||a.startsWith("~"),p=l.trim().length===0&&!d&&c.length===0,m=$=>`${c}${h}${$}`,f="",y;if(p)y=Yl().filter($=>$.startsWith(a));else{let $=l.trim().split(/\s+/)[0]??"",A=ec(n,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=h&&!A?h:"",x=A?"":" ",P=l+m($)+H+x;return{line:P+e.slice(r),cursor:P.length,candidates:[]}}let g=p?a:a.slice(f.length),S=Zl(y);if(S.length>g.length){let $=l+m(f+S);return{line:$+e.slice(r),cursor:$.length,candidates:[]}}return{line:e,cursor:r,candidates:y.map($=>m(f+$))}}function fr(){try{process.stdout.write("\x1B[?2004l\x1B[>4m\x1B[?1000l\x1B[?1002l\x1B[?1006l\x1B[?7h"+t.reset+ne.show+qt.exitAlt)}catch{}try{process.stdin.isTTY&&process.stdin.isRaw&&process.stdin.setRawMode(!1)}catch{}}var mr=class n{options;agent;markdown=new ur;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;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 hr(e.cwd,()=>this.scheduleRender());let r=Cr(e.cwd);r.created&&(this.projectDirCreated=r.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
531
+ `){this.pushLine(s),s="";continue}a==="\x07"||a==="\b"||(s+=a)}s.length>Gl&&(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="")}},Zl=["alias","cd","clear","cls","echo","exit","export","false","history","pwd","set","source","true","type","unalias","unset","which"],dr=null;function Ql(){if(dr)return dr;let n=new Set(Zl);for(let e of(process.env.PATH??"").split(oe.delimiter)){if(!e)continue;let r;try{r=ut.readdirSync(e)}catch{continue}for(let s of r)n.add(s)}return dr=[...n].sort(),dr}function ec(n){if(n.length===0)return"";let e=n[0];for(let r of n.slice(1)){let s=0;for(;s<e.length&&s<r.length&&e[s]===r[s];)s++;if(e=e.slice(0,s),!e)break}return e}function tc(n,e){return e?e==="~"||e.startsWith("~/")?oe.join(pr.homedir(),e.slice(1)):oe.isAbsolute(e)?e:oe.resolve(n,e):n}function lo(n,e){if(n.isDirectory())return!0;if(!n.isSymbolicLink())return!1;try{return ut.statSync(oe.join(e,n.name)).isDirectory()}catch{return!1}}function rc(n,e,r){let s=e.lastIndexOf("/"),i=s>=0?e.slice(0,s+1):"",o=e.slice(s+1),a=tc(n,i),l;try{l=ut.readdirSync(a,{withFileTypes:!0})}catch{return{dirPart:i,base:o,names:[]}}let c=l.filter(u=>r&&!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(n,e,r){let i=e.slice(0,r).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=Ql().filter($=>$.startsWith(a));else{let $=l.trim().split(/\s+/)[0]??"",A=rc(n,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(r),cursor:P.length,candidates:[]}}let g=h?a:a.slice(f.length),S=ec(y);if(S.length>g.length){let $=l+m(f+S);return{line:$+e.slice(r),cursor:$.length,candidates:[]}}return{line:e,cursor:r,candidates:y.map($=>m(f+$))}}function fr(){try{process.stdout.write("\x1B[?2004l\x1B[>4m\x1B[?1000l\x1B[?1002l\x1B[?1006l\x1B[?7h"+t.reset+ne.show+qt.exitAlt)}catch{}try{process.stdin.isTTY&&process.stdin.isRaw&&process.stdin.setRawMode(!1)}catch{}}var mr=class n{options;agent;markdown=new ur;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;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 hr(e.cwd,()=>this.scheduleRender());let r=wr(e.cwd);r.created&&(this.projectDirCreated=r.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
532
 
529
533
  \xB7 \u6309 y \u7EE7\u7EED\uFF1A\u518D\u8FFD\u52A0 ${this.options.config.maxToolRounds} \u8F6E
530
534
  \xB7 \u6309 n \u7ED3\u675F\uFF1A\u4FDD\u7559\u5DF2\u6709\u8FDB\u5C55\uFF0C\u672C\u8F6E\u5230\u6B64\u4E3A\u6B62
531
535
 
532
536
  \u60F3\u6C38\u4E45\u8C03\u6574\u4E0A\u9650\uFF1A\u7F16\u8F91\u914D\u7F6E\u6587\u4EF6\u7684 maxToolRounds \u5B57\u6BB5\u3002`,danger:!1})},i=bt(e.cwd,K);this.currentSessionFile=i,this.agent=new lr(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(`
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+ne.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=n.MAX_OUTPUT_LINES,r=this.lines.length-e;if(r<=0)return;this.lines.splice(0,r),this.lastAnswerStart>0&&(this.lastAnswerStart=Math.max(0,this.lastAnswerStart-r));let s=this.selectionAnchor,i=this.selectionHead;(s!==void 0||i!==void 0)&&(s!==void 0&&s<r||i!==void 0&&i<r?(this.selectionAnchor=void 0,this.selectionHead=void 0):(s!==void 0&&(this.selectionAnchor=s-r),i!==void 0&&(this.selectionHead=i-r)))}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+ne.show+qt.exitAlt)}extendedKeyRequest(){let e=process.env.TERM??"",r=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(r)?"":"\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 r=this.markdown.push(ge(e));r.length>0&&this.lines.push(...r),this.streamingPreview=this.markdown.peek(),this.scheduleRender()}handleToolStart(e){this.flushStreamingPreview();let r=cc(e);this.lines.push(`${t.magenta}\u23FA${t.reset} ${t.bold}${e.name}${t.reset} ${t.gray}${r}${t.reset}`),this.statusText=`\u6267\u884C ${e.name}`,this.scheduleRender()}handleToolEnd(e,r){this.flushStreamingPreview();let s=ge(r.summary??(r.ok?"\u5B8C\u6210":"\u5931\u8D25")).slice(0,60),i=r.denied?`${t.yellow}\u23BF \u5DF2\u62D2\u7EDD${t.reset}`:r.ok?`${t.green}\u23BF ${s}${t.reset}`:`${t.red}\u23BF ${s}${t.reset}`;if(this.lines.push(` ${i}`),!r.ok&&!r.denied&&r.content?.trim()){let o=ge(r.content).trim().split(`
537
+ `))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+ne.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=n.MAX_OUTPUT_LINES,r=this.lines.length-e;if(r<=0)return;this.lines.splice(0,r),this.lastAnswerStart>0&&(this.lastAnswerStart=Math.max(0,this.lastAnswerStart-r));let s=this.selectionAnchor,i=this.selectionHead;(s!==void 0||i!==void 0)&&(s!==void 0&&s<r||i!==void 0&&i<r?(this.selectionAnchor=void 0,this.selectionHead=void 0):(s!==void 0&&(this.selectionAnchor=s-r),i!==void 0&&(this.selectionHead=i-r)))}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+ne.show+qt.exitAlt)}extendedKeyRequest(){let e=process.env.TERM??"",r=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(r)?"":"\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 r=this.markdown.push(ge(e));r.length>0&&this.lines.push(...r),this.streamingPreview=this.markdown.peek(),this.scheduleRender()}handleToolStart(e){this.flushStreamingPreview();let r=dc(e);this.lines.push(`${t.magenta}\u23FA${t.reset} ${t.bold}${e.name}${t.reset} ${t.gray}${r}${t.reset}`),this.statusText=`\u6267\u884C ${e.name}`,this.scheduleRender()}handleToolEnd(e,r){this.flushStreamingPreview();let s=ge(r.summary??(r.ok?"\u5B8C\u6210":"\u5931\u8D25")).slice(0,60),i=r.denied?`${t.yellow}\u23BF \u5DF2\u62D2\u7EDD${t.reset}`:r.ok?`${t.green}\u23BF ${s}${t.reset}`:`${t.red}\u23BF ${s}${t.reset}`;if(this.lines.push(` ${i}`),!r.ok&&!r.denied&&r.content?.trim()){let o=ge(r.content).trim().split(`
534
538
  `),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 r=ge(e);for(let s of r.split(`
535
539
  `))s.trim().length>0&&this.lines.push(`${t.gray} ${s}${t.reset}`);this.scheduleRender()}handleIntent(e,r){let o=ge(e).split(`
536
540
  `).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(r.replace(/\s+/g," "),60)}${t.reset}`),this.scheduleRender()}handleModelChange(e){this.modelProviderLabel=we(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()}requestConfirm(e){let r=this.confirmChain.then(()=>new Promise(s=>{this.pendingConfirm={request:e,resolve:s,selected:!0},this.scheduleRender()}));return this.confirmChain=r.then(()=>{},()=>{}),r}handleData(e){process.env.XZH_DEBUG_KEYS&&this.logRawKeys(e),this.keyBuffer+=e,this.drainKeys()}logRawKeys(e){let r=[...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(Oe.join(T(),"keys.log"),`${new Date().toISOString()} hex=[${r}] raw=${JSON.stringify(s)}
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 r=this.keyBuffer;r.startsWith(qe)&&(this.keyBuffer="",this.insertPastedText(r.slice(qe.length)))},rc);return}e.startsWith("\x1B")&&(this.escTimer=setTimeout(()=>{this.escTimer=void 0;let r=this.keyBuffer;this.keyBuffer="",r==="\x1B"&&this.handleKey("\x1B")},tc))}readKey(){let e=this.keyBuffer;if(e.length===0)return null;if(e.startsWith(qe)){let i=e.indexOf(Ct,qe.length);return i===-1?null:(this.keyBuffer=e.slice(i+Ct.length),e.slice(0,i+Ct.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 r=e.codePointAt(0);if(r===void 0)return null;let s=String.fromCodePoint(r);return this.keyBuffer=e.slice(s.length),s}handleKey(e){if(e.startsWith(qe)&&e.endsWith(Ct)){this.insertPastedText(e.slice(qe.length,e.length-Ct.length));return}if(e===`
538
- `)return;let r=oc(e);if(this.pendingConfirm){this.handleConfirmKey(r);return}let s=/^\x1b\[<(\d+);(\d+);(\d+)([Mm])$/.exec(r);if(s){this.handleMouse(s);return}if(r==="\x1B[Z"){this.toggleFocus();return}if(this.termFocus){this.handleTermKey(r);return}switch(r){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`
541
+ `)}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 r=this.keyBuffer;r.startsWith(qe)&&(this.keyBuffer="",this.insertPastedText(r.slice(qe.length)))},sc);return}e.startsWith("\x1B")&&(this.escTimer=setTimeout(()=>{this.escTimer=void 0;let r=this.keyBuffer;this.keyBuffer="",r==="\x1B"&&this.handleKey("\x1B")},nc))}readKey(){let e=this.keyBuffer;if(e.length===0)return null;if(e.startsWith(qe)){let i=e.indexOf(Ct,qe.length);return i===-1?null:(this.keyBuffer=e.slice(i+Ct.length),e.slice(0,i+Ct.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 r=e.codePointAt(0);if(r===void 0)return null;let s=String.fromCodePoint(r);return this.keyBuffer=e.slice(s.length),s}handleKey(e){if(e.startsWith(qe)&&e.endsWith(Ct)){this.insertPastedText(e.slice(qe.length,e.length-Ct.length));return}if(e===`
542
+ `)return;let r=lc(e);if(this.pendingConfirm){this.handleConfirmKey(r);return}let s=/^\x1b\[<(\d+);(\d+);(\d+)([Mm])$/.exec(r);if(s){this.handleMouse(s);return}if(r==="\x1B[Z"){this.toggleFocus();return}if(this.termFocus){this.handleTermKey(r);return}switch(r){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
543
  `:this.insertText(`
540
544
  `);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:r.charCodeAt(0)>=32&&this.insertText(r)}}handleMouse(e){let r=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=${r} 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&&(r&64)===64){let u=(r&1)===0?3:-3;l?this.scrollTermBy(u):this.scrollBy(u);return}if(o&&(r&3)===0&&(r&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&&(r&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),r=Math.max(this.selectionAnchor,this.selectionHead),s=r-e+1,i=ge(this.lines.slice(e,r+1).join(`
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,r=this.termInput.charCodeAt(e);r>=56320&&r<=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=lo(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 r=this.pendingConfirm;if(r)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" ":r.selected=!r.selected,this.scheduleRender();return;default:return}}resolveConfirm(e){let r=this.pendingConfirm;if(!r)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}`),r.resolve(e),this.scheduleRender()}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 r=e.replace(/\r\n?/g,`
542
- `).replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g,"");r&&this.insertText(r)}async pasteFromClipboard(){if(!(this.busy||this.termFocus)){this.statusText="\u8BFB\u53D6\u526A\u8D34\u677F",this.statusDetail="",this.scheduleRender();try{let e=await In();if(e.kind==="image"){this.attachClipboardImage(e.image);return}let r=await io();if(r){this.insertText(r);return}if(e.kind==="unavailable"){if(await this.ensureClipboardTool()){let s=await In();if(s.kind==="image"){this.attachClipboardImage(s.image);return}}this.handleNotice(`\u672A\u80FD\u8BFB\u53D6\u526A\u8D34\u677F\uFF1A${e.detail}
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=An();if(e.length===0)return!1;for(let r of e){if(await Ke(r))return!0;let s=r.install[Te()];if(!s)continue;if(!await this.requestConfirm({tool:"clipboard_install",title:`\u9700\u8981\u5B89\u88C5\u526A\u8D34\u677F\u5DE5\u5177\uFF1A${r.name}`,detail:`Ctrl+V \u7C98\u8D34\u56FE\u7247\u9700\u8981\u8BFB\u53D6\u7CFB\u7EDF\u526A\u8D34\u677F\uFF0C\u5F53\u524D\u7F3A\u5C11\u5B83\u3002
545
+ `)).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,r=this.termInput.charCodeAt(e);r>=56320&&r<=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 r=this.pendingConfirm;if(r)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" ":r.selected=!r.selected,this.scheduleRender();return;default:return}}resolveConfirm(e){let r=this.pendingConfirm;if(!r)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}`),r.resolve(e),this.scheduleRender()}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 r=e.replace(/\r\n?/g,`
546
+ `).replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g,"");r&&this.insertText(r)}async pasteFromClipboard(){if(!(this.busy||this.termFocus)){this.statusText="\u8BFB\u53D6\u526A\u8D34\u677F",this.statusDetail="",this.scheduleRender();try{let e=await Mn();if(e.kind==="image"){this.attachClipboardImage(e.image);return}let r=await oo();if(r){this.insertText(r);return}if(e.kind==="unavailable"){if(await this.ensureClipboardTool()){let s=await Mn();if(s.kind==="image"){this.attachClipboardImage(s.image);return}}this.handleNotice(`\u672A\u80FD\u8BFB\u53D6\u526A\u8D34\u677F\uFF1A${e.detail}
547
+ \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=Tn();if(e.length===0)return!1;for(let r of e){if(await Ke(r))return!0;let s=r.install[Te()];if(!s)continue;if(!await this.requestConfirm({tool:"clipboard_install",title:`\u9700\u8981\u5B89\u88C5\u526A\u8D34\u677F\u5DE5\u5177\uFF1A${r.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
548
 
545
549
  \u5B89\u88C5\u547D\u4EE4\uFF1A
546
550
  ${s}
547
551
 
548
552
  \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 ${r.name} \u2026\uFF08\u53EF\u80FD\u9700\u8981\u8F93\u5165 sudo \u5BC6\u7801\uFF09`),this.suspendUi();let o;try{o=await En(s)}catch(a){o={ok:!1,output:String(a),timedOut:!1}}finally{this.resumeUi()}return o.ok?await Ke(r)?(this.handleNotice(`\u2713 ${r.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
553
+ ${s}`),!1;this.handleNotice(`\u6B63\u5728\u5B89\u88C5 ${r.name} \u2026\uFF08\u53EF\u80FD\u9700\u8981\u8F93\u5165 sudo \u5BC6\u7801\uFF09`),this.suspendUi();let o;try{o=await kn(s)}catch(a){o={ok:!1,output:String(a),timedOut:!1}}finally{this.resumeUi()}return o.ok?await Ke(r)?(this.handleNotice(`\u2713 ${r.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
554
  \u53EF\u624B\u52A8\u6267\u884C\uFF1A
551
555
  ${s}`),!1):(this.handleNotice(`\u5B89\u88C5\u5931\u8D25${o.timedOut?"\uFF08\u8D85\u65F6\uFF09":""}${o.output.trim()?`\uFF1A${o.output.trim()}`:""}
552
556
  \u53EF\u624B\u52A8\u6267\u884C\uFF1A
553
557
  ${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
558
 
555
- `)}resumeUi(){this.enterTerminal(),this.suspended=!1,this.lastPhysicalCount=-1,this.lastTermPhysicalCount=-1,this.scheduleRender()}attachClipboardImage(e){if(e.bytes>cr){this.handleNotice(`\u56FE\u7247\u8FC7\u5927\uFF08${Dn(e.bytes)}\uFF09\uFF0C\u8D85\u51FA\u4E0A\u9650 ${Dn(cr)}\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
559
+ `)}resumeUi(){this.enterTerminal(),this.suspended=!1,this.lastPhysicalCount=-1,this.lastTermPhysicalCount=-1,this.scheduleRender()}attachClipboardImage(e){if(e.bytes>cr){this.handleNotice(`\u56FE\u7247\u8FC7\u5927\uFF08${In(e.bytes)}\uFF09\uFF0C\u8D85\u51FA\u4E0A\u9650 ${In(cr)}\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
560
  \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 r=++this.imageSeq;this.pendingImages.set(r,{mimeType:e.mimeType,data:e.base64}),this.insertText(`[\u56FE\u7247${r}]`),this.handleNotice(`\u5DF2\u9644\u52A0\u56FE\u7247${r}\uFF08${Dn(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 r=[],s=e.replace(/\[图片(\d+)\]/g,(i,o)=>{let a=this.pendingImages.get(Number(o));return a&&r.push(a),""}).replace(/[ \t]{2,}/g," ").trim();return this.pendingImages.clear(),{text:s,images:r}}absorbImagePaths(e){if(!/\.(png|jpe?g|gif|webp)\b/i.test(e))return{text:e,images:[]};let r=[],s=[];for(let i of e.split(`
558
- `)){let o=ac(i),a=o?lc(o,this.cwd):null;a?r.push(a):s.push(i)}return{text:s.join(`
561
+ \xB7 \u6216\u8005\u5207\u6362\u5230 glm-4v / qwen-vl / gpt-4o / claude \u7B49\u652F\u6301\u89C6\u89C9\u7684\u6A21\u578B`);return}let r=++this.imageSeq;this.pendingImages.set(r,{mimeType:e.mimeType,data:e.base64}),this.insertText(`[\u56FE\u7247${r}]`),this.handleNotice(`\u5DF2\u9644\u52A0\u56FE\u7247${r}\uFF08${In(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 r=[],s=e.replace(/\[图片(\d+)\]/g,(i,o)=>{let a=this.pendingImages.get(Number(o));return a&&r.push(a),""}).replace(/[ \t]{2,}/g," ").trim();return this.pendingImages.clear(),{text:s,images:r}}absorbImagePaths(e){if(!/\.(png|jpe?g|gif|webp)\b/i.test(e))return{text:e,images:[]};let r=[],s=[];for(let i of e.split(`
562
+ `)){let o=cc(i),a=o?uc(o,this.cwd):null;a?r.push(a):s.push(i)}return{text:s.join(`
559
563
  `).trim(),images:r}}currentModelSupportsVision(){let e=this.agent.getActiveModel();return e?Be(e):!1}backspace(){if(this.inputCursor<=0)return;let e=this.inputCursor-1,r=this.input.charCodeAt(e);r>=56320&&r<=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 r=this.inputCursor+e;if(r=Math.max(0,Math.min(this.input.length,r)),e>0&&r>0&&r<this.input.length){let s=this.input.charCodeAt(r-1);s>=55296&&s<=56319&&(r+=1)}else if(e<0&&r<this.input.length){let s=this.input.charCodeAt(r);s>=56320&&s<=57343&&(r-=1)}this.inputCursor=Math.max(0,Math.min(this.input.length,r)),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:r,images:s}=this.takePendingImages(e),i=this.absorbImagePaths(r);if(i.images.length>0&&(r=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=[]),!r&&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(r||`${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?`${r}${r?`
560
564
  `:""}[\u56FE\u7247 \xD7 ${s.length}]`:r,[l,...c]=a.split(`
561
- `);this.lines.push(`${o} ${t.brightGreen}${t.bold}${l}${t.reset}`);for(let h of c)this.lines.push(`${t.brightGreen}${t.bold}\u2502${t.reset} ${t.brightGreen}${h}${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(r,this.abortController.signal,s.length>0?s:void 0)}catch(h){let[d,...p]=ce(h).split(`
562
- `);this.lines.push(`${t.red}\u2717 ${d}${t.reset}`);for(let m of p)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 h=this.markdown.flush();h.length>0&&this.lines.push(...h),this.streamingPreview="",this.lines.push(""),this.busy=!1,this.abortController=void 0,this.statusText="\u5C31\u7EEA",this.scheduleRender()}}handleCommand(e){let[r,...s]=e.slice(1).split(/\s+/),i=s.join(" ");switch(r){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=bt(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(li(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.lines.push(`${t.gray}\u5F53\u524D\u6A21\u578B\uFF1A${t.reset}${this.modelProviderLabel} / ${this.modelLabel}${t.reset}`);let o=U(this.options.config);o.length>0&&(this.lines.push(`${t.gray}\u5DF2\u914D\u7F6E\u6A21\u578B\uFF08\u6309\u56DE\u9000\u987A\u5E8F\uFF09\uFF1A${t.reset}`),o.forEach((a,l)=>{let c=a.model===this.modelLabel?" \u2190 \u5F53\u524D":"";this.lines.push(`${t.gray} ${l+1}. ${a.id}${c}${t.reset}`)})),this.lines.push(`${t.gray}\u7BA1\u7406\u6A21\u578B\uFF08\u65B0\u589E / \u5220\u9664\uFF09\uFF1A${t.reset}xzh model${t.reset}`);break}default:this.lines.push(`${t.yellow}\u672A\u77E5\u547D\u4EE4\uFF1A/${r}\uFF0C\u8F93\u5165 /help \u67E5\u770B\u5E2E\u52A9\u3002${t.reset}`)}this.scheduleRender()}handleResumeCommand(e){let r=dn(this.cwd).filter(l=>l.file!==this.currentSessionFile);if(r.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}`),r.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)?r[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=pn(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=bt(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 r=q(e.trim()),s=Oe.isAbsolute(r)?r:Oe.resolve(this.cwd,r);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=Cr(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=dn(i).filter(u=>u.file!==this.currentSessionFile)[0],l=a?pn(a.file):[],c=bt(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 r=e.trim().toLowerCase(),s=this.lines,i="";(r==="term"||r.startsWith("term "))&&(s=this.term.visibleLines(),i="\u7EC8\u7AEF\u8F93\u51FA ",r=r.slice(4).trim());let o=s.length,a,l;if(r==="all")a=s.slice(),l="\u5168\u90E8";else if(r==="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(r)){let[d,p]=r.split("-"),m=Math.max(1,Number(d)),f=Math.min(o,Number(p));if(m>f){this.lines.push(`${t.yellow}\u884C\u53F7\u8303\u56F4\u65E0\u6548\uFF1A${r}${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(r)?Number(r):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(`
563
- `)).trim();if(!c){let d=r==="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 h=c.split(`
564
- `).length;this.lines.push(`${t.green}\u2713 \u5DF2\u590D\u5236${l}\uFF08${h} \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:r=>this.term.notice(`${t.gray}${r}${t.reset}`),onDeviceAttach:r=>{let s=r.kind==="autojs6"?"AutoJs6":"AutoX.js";this.handleNotice(`\u8BBE\u5907\u5DF2\u8FDE\u63A5\uFF1A${r.name}\uFF08${s}\uFF09`),this.term.notice(`${t.brightGreen}\u25CF${t.reset} \u8BBE\u5907\u5DF2\u8FDE\u63A5\uFF1A${t.bold}${r.name}${t.reset}${t.gray}\uFF08${s}\uFF09${t.reset}`)},onDeviceDetach:r=>{this.handleNotice(`\u8BBE\u5907\u5DF2\u65AD\u5F00\uFF1A${r.name}`),this.term.notice(`${t.yellow}\u25CB${t.reset} \u8BBE\u5907\u5DF2\u65AD\u5F00\uFF1A${r.name}`)},onLog:r=>this.term.notice(`${t.gray}[${r.device}]${t.reset} ${ge(r.text)}`)})}pushDeviceSetupGuide(e){let r=Jt(),s=Ht({where:rt()?"phone":"pc",abi:r.abi,address:e,localApk:Kt(r.abi)});this.lines.push(`${t.yellow}\u9700\u8981\u5148\u88C5 AutoJs6${t.reset}${t.gray}\uFF08${r.detail}\uFF09${t.reset}`);for(let i of s.split(`
565
- `))i&&this.lines.push(`${t.gray} ${i}${t.reset}`)}async handleDeviceCommand(e){let[r,...s]=e.trim().split(/\s+/),i=s.join(" ").trim(),o=this.deviceBridge;switch(r){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 p=d?.[2]?Number.parseInt(d[2],10):NaN;Number.isFinite(p)&&(c=p)}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(Me());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 h=!1;for(let d=0;d<20&&!h;d++)h=u.status().autojs6?.connected??!1,h||await new Promise(p=>setTimeout(p,150));if(h)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):Me(),l=this.createDeviceBridge(Number.isFinite(a)&&a>0?a:Me());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 ${r} <\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=r==="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} ${r==="run"?"\u5DF2\u63A8\u9001\u5230\u8BBE\u5907\u5E76\u5F00\u59CB\u8FD0\u884C":"\u5DF2\u4FDD\u5B58\u5230\u8BBE\u5907"}\uFF1A${a.path}
565
+ `);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(r,this.abortController.signal,s.length>0?s:void 0)}catch(p){let[d,...h]=ce(p).split(`
566
+ `);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[r,...s]=e.slice(1).split(/\s+/),i=s.join(" ");switch(r){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=bt(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.lines.push(`${t.gray}\u5F53\u524D\u6A21\u578B\uFF1A${t.reset}${this.modelProviderLabel} / ${this.modelLabel}${t.reset}`);let o=U(this.options.config);o.length>0&&(this.lines.push(`${t.gray}\u5DF2\u914D\u7F6E\u6A21\u578B\uFF08\u6309\u56DE\u9000\u987A\u5E8F\uFF09\uFF1A${t.reset}`),o.forEach((a,l)=>{let c=a.model===this.modelLabel?" \u2190 \u5F53\u524D":"";this.lines.push(`${t.gray} ${l+1}. ${a.id}${c}${t.reset}`)})),this.lines.push(`${t.gray}\u7BA1\u7406\u6A21\u578B\uFF08\u65B0\u589E / \u5220\u9664\uFF09\uFF1A${t.reset}xzh model${t.reset}`);break}default:this.lines.push(`${t.yellow}\u672A\u77E5\u547D\u4EE4\uFF1A/${r}\uFF0C\u8F93\u5165 /help \u67E5\u770B\u5E2E\u52A9\u3002${t.reset}`)}this.scheduleRender()}handleResumeCommand(e){let r=un(this.cwd).filter(l=>l.file!==this.currentSessionFile);if(r.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}`),r.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)?r[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=dn(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=bt(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 r=q(e.trim()),s=Oe.isAbsolute(r)?r:Oe.resolve(this.cwd,r);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=wr(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=un(i).filter(u=>u.file!==this.currentSessionFile)[0],l=a?dn(a.file):[],c=bt(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 r=e.trim().toLowerCase(),s=this.lines,i="";(r==="term"||r.startsWith("term "))&&(s=this.term.visibleLines(),i="\u7EC8\u7AEF\u8F93\u51FA ",r=r.slice(4).trim());let o=s.length,a,l;if(r==="all")a=s.slice(),l="\u5168\u90E8";else if(r==="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(r)){let[d,h]=r.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${r}${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(r)?Number(r):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(`
567
+ `)).trim();if(!c){let d=r==="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(`
568
+ `).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:r=>this.term.notice(`${t.gray}${r}${t.reset}`),onDeviceAttach:r=>{let s=r.kind==="autojs6"?"AutoJs6":"AutoX.js";this.handleNotice(`\u8BBE\u5907\u5DF2\u8FDE\u63A5\uFF1A${r.name}\uFF08${s}\uFF09`),this.term.notice(`${t.brightGreen}\u25CF${t.reset} \u8BBE\u5907\u5DF2\u8FDE\u63A5\uFF1A${t.bold}${r.name}${t.reset}${t.gray}\uFF08${s}\uFF09${t.reset}`)},onDeviceDetach:r=>{this.handleNotice(`\u8BBE\u5907\u5DF2\u65AD\u5F00\uFF1A${r.name}`),this.term.notice(`${t.yellow}\u25CB${t.reset} \u8BBE\u5907\u5DF2\u65AD\u5F00\uFF1A${r.name}`)},onLog:r=>this.term.notice(`${t.gray}[${r.device}]${t.reset} ${ge(r.text)}`)})}pushDeviceSetupGuide(e){let r=Jt(),s=Ht({where:nt()?"phone":"pc",abi:r.abi,address:e,localApk:Kt(r.abi)});this.lines.push(`${t.yellow}\u9700\u8981\u5148\u88C5 AutoJs6${t.reset}${t.gray}\uFF08${r.detail}\uFF09${t.reset}`);for(let i of s.split(`
569
+ `))i&&this.lines.push(`${t.gray} ${i}${t.reset}`)}async handleDeviceCommand(e){let[r,...s]=e.trim().split(/\s+/),i=s.join(" ").trim(),o=this.deviceBridge;switch(r){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=nt(),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(Me());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):Me(),l=this.createDeviceBridge(Number.isFinite(a)&&a>0?a:Me());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 ${r} <\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=r==="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} ${r==="run"?"\u5DF2\u63A8\u9001\u5230\u8BBE\u5907\u5E76\u5F00\u59CB\u8FD0\u884C":"\u5DF2\u4FDD\u5B58\u5230\u8BBE\u5907"}\uFF1A${a.path}
566
570
  ${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=ir();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 r of e){let s=r.description.split(`
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(" "),p===a&&(h=l.length,d=u);continue}let f=N(m);u+f>e&&(l.push(c),c=" ",u=N(" ")),p===a&&(h=l.length,d=u),c+=m,u+=f}if(a>=o.length&&(h=l.length,d=u),l.push(c),l.length>i){let p=Math.max(0,h-i+1);return{lines:l.slice(p,p+i),cursorRow:h-p,cursorCol:d}}return{lines:l,cursorRow:h,cursorCol:d}}layoutConfirm(e){let r=this.pendingConfirm,{request:s}=r,i=[],o=s.danger;i.push(`${o?t.brightRed:t.brightYellow}\u26A0 ${s.title}${t.reset}`);let a=s.detail.split(`
569
- `).slice(0,12);for(let u of a)for(let h of yt(`${t.gray}${u}${t.reset}`,e-4))i.push(` ${h}`);let l=r.selected?`${t.inverse}${t.green} \u5141\u8BB8 ${t.reset}`:`${t.gray} \u5141\u8BB8 ${t.reset}`,c=r.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}}},qe="\x1B[200~",Ct="\x1B[201~",tc=40,rc=2e3,nc=1,sc=2,On=4;function ic(n,e){if((e&On)===0)return null;let r=n>=65&&n<=90?n+32:n;if(r>=97&&r<=122)return String.fromCharCode(r-96);switch(n){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 co(n,e){let r=(e&(nc|On|sc))!==0;switch(n){case 13:return r?`
570
- `:"\r";case 9:return r&&(e&On)===0?"\x1B[Z":" ";case 8:case 127:return"\x7F";default:return ic(n,e)}}function oc(n){if(n==="\x1B\r"||n===`\x1B
571
+ `)[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 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),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)),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,r-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=r-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 Ne=P[_];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=h+m,w=ne.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+=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),p=[];for(let w of this.term.visibleLines())p.push(...yt(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<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:""} `,p=` ${this.cwd} `,d=this.busy?`${t.brightYellow}\u25CF \u8FD0\u884C\u4E2D${t.reset}${t.bgBlue}`:"",h=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(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===`
572
+ `){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 r=this.pendingConfirm,{request:s}=r,i=[],o=s.danger;i.push(`${o?t.brightRed:t.brightYellow}\u26A0 ${s.title}${t.reset}`);let a=s.detail.split(`
573
+ `).slice(0,12);for(let u of a)for(let p of yt(`${t.gray}${u}${t.reset}`,e-4))i.push(` ${p}`);let l=r.selected?`${t.inverse}${t.green} \u5141\u8BB8 ${t.reset}`:`${t.gray} \u5141\u8BB8 ${t.reset}`,c=r.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}}},qe="\x1B[200~",Ct="\x1B[201~",nc=40,sc=2e3,ic=1,oc=2,Dn=4;function ac(n,e){if((e&Dn)===0)return null;let r=n>=65&&n<=90?n+32:n;if(r>=97&&r<=122)return String.fromCharCode(r-96);switch(n){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(n,e){let r=(e&(ic|Dn|oc))!==0;switch(n){case 13:return r?`
574
+ `:"\r";case 9:return r&&(e&Dn)===0?"\x1B[Z":" ";case 8:case 127:return"\x7F";default:return ac(n,e)}}function lc(n){if(n==="\x1B\r"||n===`\x1B
571
575
  `)return`
572
- `;let e=/^\x1b\[(\d+)(?::\d+)?(?:;(\d+))?u$/.exec(n);if(e){let s=e[2]?Number(e[2])-1:0;return co(Number(e[1]),s)??n}let r=/^\x1b\[27;(\d+)(?:;(\d+))?~$/.exec(n);if(r){let s=Number(r[1])-1,i=r[2]?Number(r[2]):27;return co(i,s)??n}return n}function Dn(n){return n<1024?`${n} B`:n<1024*1024?`${(n/1024).toFixed(1)} KB`:`${(n/(1024*1024)).toFixed(1)} MB`}function ac(n){let e=n.trim();if(!e)return null;let r=/^(['"])(.*)\1$/.exec(e);return r&&(e=r[2]),e.startsWith("file://")&&(e=e.slice(7)),e=e.replace(/\\ /g," "),/\.(png|jpe?g|gif|webp)$/i.test(e)?e:null}function lc(n,e){try{let r=Oe.isAbsolute(n)?n:Oe.resolve(e,q(n)),s=pe.statSync(r);if(!s.isFile()||s.size>cr)return null;let i=pe.readFileSync(r),o=Mn(i);return o?{mimeType:o,data:i.toString("base64")}:null}catch{return null}}function cc(n){let e={};try{let i=JSON.parse(n.arguments||"{}");typeof i=="object"&&i!==null&&(e=i)}catch{return O(n.arguments,60)}let r=i=>{let o=e[i];return typeof o=="string"?o:void 0},s=r("path")??r("pattern")??r("command")??r("dirPath")??"";return O(s.replace(/\s+/g," "),80)}var Y=v(require("fs")),Ln=v(require("path"));function Nn(){return Ln.join(T(),"session.lock")}function gr(){return Ln.join(T(),"crash.log")}function uo(n){let e=uc();try{Y.mkdirSync(T(),{recursive:!0}),Y.writeFileSync(Nn(),JSON.stringify({pid:process.pid,startedAt:new Date().toISOString(),version:n}),{mode:384})}catch{}return e}function uc(){let n;try{n=Y.readFileSync(Nn(),"utf8")}catch{return null}let e={};try{let r=JSON.parse(n);e.startedAt=r.startedAt,e.version=r.version}catch{}try{let r=Y.readFileSync(gr(),"utf8");e.crashLog=r.slice(-4e3)}catch{}return e}function jn(n,e){let r=e instanceof Error?e.stack??e.message:String(e),s=`
576
+ `;let e=/^\x1b\[(\d+)(?::\d+)?(?:;(\d+))?u$/.exec(n);if(e){let s=e[2]?Number(e[2])-1:0;return uo(Number(e[1]),s)??n}let r=/^\x1b\[27;(\d+)(?:;(\d+))?~$/.exec(n);if(r){let s=Number(r[1])-1,i=r[2]?Number(r[2]):27;return uo(i,s)??n}return n}function In(n){return n<1024?`${n} B`:n<1024*1024?`${(n/1024).toFixed(1)} KB`:`${(n/(1024*1024)).toFixed(1)} MB`}function cc(n){let e=n.trim();if(!e)return null;let r=/^(['"])(.*)\1$/.exec(e);return r&&(e=r[2]),e.startsWith("file://")&&(e=e.slice(7)),e=e.replace(/\\ /g," "),/\.(png|jpe?g|gif|webp)$/i.test(e)?e:null}function uc(n,e){try{let r=Oe.isAbsolute(n)?n:Oe.resolve(e,q(n)),s=pe.statSync(r);if(!s.isFile()||s.size>cr)return null;let i=pe.readFileSync(r),o=Rn(i);return o?{mimeType:o,data:i.toString("base64")}:null}catch{return null}}function dc(n){let e={};try{let i=JSON.parse(n.arguments||"{}");typeof i=="object"&&i!==null&&(e=i)}catch{return O(n.arguments,60)}let r=i=>{let o=e[i];return typeof o=="string"?o:void 0},s=r("path")??r("pattern")??r("command")??r("dirPath")??"";return O(s.replace(/\s+/g," "),80)}var Y=v(require("fs")),On=v(require("path"));function Ln(){return On.join(T(),"session.lock")}function gr(){return On.join(T(),"crash.log")}function po(n){let e=pc();try{Y.mkdirSync(T(),{recursive:!0}),Y.writeFileSync(Ln(),JSON.stringify({pid:process.pid,startedAt:new Date().toISOString(),version:n}),{mode:384})}catch{}return e}function pc(){let n;try{n=Y.readFileSync(Ln(),"utf8")}catch{return null}let e={};try{let r=JSON.parse(n);e.startedAt=r.startedAt,e.version=r.version}catch{}try{let r=Y.readFileSync(gr(),"utf8");e.crashLog=r.slice(-4e3)}catch{}return e}function Nn(n,e){let r=e instanceof Error?e.stack??e.message:String(e),s=`
573
577
  [${new Date().toISOString()}] ${n}
574
578
  \u7248\u672C: ${process.version} \u5E73\u53F0: ${process.platform} PID: ${process.pid}
575
579
  `+r.split(`
576
580
  `).map(i=>` ${i}`).join(`
577
581
  `)+`
578
- `;try{Y.mkdirSync(T(),{recursive:!0}),Y.appendFileSync(gr(),s,"utf8")}catch{}}function Bn(){try{Y.rmSync(Nn(),{force:!0}),Y.rmSync(gr(),{force:!0})}catch{}}function $r(){return gr()}var po=require("child_process"),ho=v(require("fs"));async function mo(n){let e=n[0];switch(e){case"edit":return pc();case"path":process.stdout.write(`${D()}
582
+ `;try{Y.mkdirSync(T(),{recursive:!0}),Y.appendFileSync(gr(),s,"utf8")}catch{}}function jn(){try{Y.rmSync(Ln(),{force:!0}),Y.rmSync(gr(),{force:!0})}catch{}}function $r(){return gr()}var ho=require("child_process"),mo=v(require("fs"));async function fo(n){let e=n[0];switch(e){case"edit":return mc();case"path":process.stdout.write(`${D()}
579
583
  `);return;case"init":{if(Z(T()),ht()){process.stdout.write(`${t.yellow}\u914D\u7F6E\u6587\u4EF6\u5DF2\u5B58\u5728\uFF1A${D()}${t.reset}
580
584
  `);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 dc();default:process.stdout.write(`${t.red}\u672A\u77E5\u5B50\u547D\u4EE4\uFF1A${e}${t.reset}
585
+ `);return}case void 0:return hc();default:process.stdout.write(`${t.red}\u672A\u77E5\u5B50\u547D\u4EE4\uFF1A${e}${t.reset}
582
586
  ${t.gray}\u7528\u6CD5\uFF1Axzh config [edit|path|init]${t.reset}
583
- `),process.exitCode=1;return}}function dc(){if(!ht()){process.stdout.write(`${t.yellow}\u5C1A\u672A\u521B\u5EFA\u914D\u7F6E\u6587\u4EF6\u3002${t.reset}
587
+ `),process.exitCode=1;return}}function hc(){if(!ht()){process.stdout.write(`${t.yellow}\u5C1A\u672A\u521B\u5EFA\u914D\u7F6E\u6587\u4EF6\u3002${t.reset}
584
588
  ${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 n=te(),e=os(n);process.stdout.write(`${t.bold}\u7384\u732A\u914D\u7F6E${t.reset} ${t.gray}(${D()})${t.reset}
589
+ `);return}let n=te(),e=as(n);process.stdout.write(`${t.bold}\u7384\u732A\u914D\u7F6E${t.reset} ${t.gray}(${D()})${t.reset}
586
590
 
587
591
  `),process.stdout.write(JSON.stringify(e,null,2)+`
588
592
  `),process.stdout.write(`
589
593
  ${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 pc(){Z(T());let n=D();ho.existsSync(n)||W({...B});let e=[process.env.XUANZHU_EDITOR,"nano",process.env.EDITOR,"vi","vim","code --wait"].filter(r=>!!r);for(let r of e){let[s,...i]=r.split(" "),o=(0,po.spawnSync)(s,[...i,n],{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}
594
+ `)}function mc(){Z(T());let n=D();mo.existsSync(n)||W({...B});let e=[process.env.XUANZHU_EDITOR,"nano",process.env.EDITOR,"vi","vim","code --wait"].filter(r=>!!r);for(let r of e){let[s,...i]=r.split(" "),o=(0,ho.spawnSync)(s,[...i,n],{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
595
  `),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
596
  `),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${n}${t.reset}
593
- `),process.exitCode=1}var yr=v(require("readline/promises")),fo=require("stream");var hc=new fo.Writable({write(n,e,r){r()}});function mc(n){return n.length<=8?"*".repeat(n.length):`${n.slice(0,4)}\u2026${n.slice(-4)}`}async function Le(n,e,r={}){let s=yr.createInterface({input:process.stdin,output:r.mask?hc:process.stdout});try{let i=e&&r.mask?mc(e):e,o=i?` ${t.gray}(${i})${t.reset}`:"",a=await Promise.race([s.question(`${n}${o}: `),new Promise(c=>s.once("close",()=>c("")))]);return r.mask&&process.stdout.write(`
594
- `),a.trim()||e||""}finally{s.close()}}async function Ae(n,e,r=0){return process.stdin.isTTY?gc(n,e,r):$c(n,e,r)}function fc(n,e,r){let s=e===r?`${t.brightGreen}\u276F${t.reset}`:" ",i=n.hint?` ${t.gray}${n.hint}${t.reset}`:"",o=`${t.gray}${String(e+1).padStart(2)}.${t.reset}`;return`\x1B[2K ${s} ${o} ${n.label}${i}
595
- `}async function gc(n,e,r){let i=Math.min(Math.max(r,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 p=0;p<e.length;p++)process.stdout.write(fc(e[p],p,i))},u=()=>{process.stdout.write(`\x1B[${a}A\x1B[1G\x1B[J`),c(),process.stdout.write(l())};process.stdout.write(`
597
+ `),process.exitCode=1}var yr=v(require("readline/promises")),go=require("stream");var fc=new go.Writable({write(n,e,r){r()}});function gc(n){return n.length<=8?"*".repeat(n.length):`${n.slice(0,4)}\u2026${n.slice(-4)}`}async function Le(n,e,r={}){let s=yr.createInterface({input:process.stdin,output:r.mask?fc:process.stdout});try{let i=e&&r.mask?gc(e):e,o=i?` ${t.gray}(${i})${t.reset}`:"",a=await Promise.race([s.question(`${n}${o}: `),new Promise(c=>s.once("close",()=>c("")))]);return r.mask&&process.stdout.write(`
598
+ `),a.trim()||e||""}finally{s.close()}}async function Ae(n,e,r=0){return process.stdin.isTTY?yc(n,e,r):vc(n,e,r)}function $c(n,e,r){let s=e===r?`${t.brightGreen}\u276F${t.reset}`:" ",i=n.hint?` ${t.gray}${n.hint}${t.reset}`:"",o=`${t.gray}${String(e+1).padStart(2)}.${t.reset}`;return`\x1B[2K ${s} ${o} ${n.label}${i}
599
+ `}async function yc(n,e,r){let i=Math.min(Math.max(r,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($c(e[h],h,i))},u=()=>{process.stdout.write(`\x1B[${a}A\x1B[1G\x1B[J`),c(),process.stdout.write(l())};process.stdout.write(`
596
600
  ${t.bold}${n}${t.reset}
597
- `),c(),process.stdout.write(l());let h=process.stdin,d=!!h.isRaw;return new Promise(p=>{let m=g=>{h.off("data",y),d||h.setRawMode(!1),h.pause(),process.stdout.write(`
598
- `),p(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[$]===`
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()};h.setRawMode(!0),h.resume(),h.setEncoding("utf8"),h.on("data",y)})}async function $c(n,e,r){process.stdout.write(`
601
+ `),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(`
602
+ `),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[$]===`
603
+ `){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 vc(n,e,r){process.stdout.write(`
600
604
  ${t.bold}${n}${t.reset}
601
605
  `),e.forEach((i,o)=>{let a=o===r?`${t.brightGreen}\u276F${t.reset}`:" ",l=i.hint?` ${t.gray}${i.hint}${t.reset}`:"";process.stdout.write(` ${a} ${o+1}. ${i.label}${l}
602
606
  `)});let s=yr.createInterface({input:process.stdin,output:process.stdout});try{let o=(await Promise.race([s.question(`${t.gray}\u8BF7\u8F93\u5165\u7F16\u53F7 [${r+1}]: ${t.reset}`),new Promise(l=>s.once("close",()=>l("")))])).trim();if(!o)return e[r].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}
603
- `),e[r].value):e[a].value}finally{s.close()}}async function vr(n,e=!1){let r=yr.createInterface({input:process.stdin,output:process.stdout});try{let s=e?"[Y/n]":"[y/N]",o=(await Promise.race([r.question(`${n} ${s} `),new Promise(a=>r.once("close",()=>a("")))])).trim().toLowerCase();return o?o==="y"||o==="yes":e}finally{r.close()}}async function go(n){switch(n[0]){case void 0:return xc();case"list":case"ls":return vc();case"all":case"available":case"providers":return bc();case"add":return Un(n.slice(1));case"remove":case"rm":case"delete":return $o(n.slice(1));case"context":case"ctx":return yo(n.slice(1));case"vision":case"image":return yc(n.slice(1));case"help":case"-h":case"--help":return Sc();default:return Un(n)}}async function Un(n){let e=te(),r=Xe(e),s=n[0]??await wc();if(!s){process.stdout.write(`${t.gray}\u5DF2\u53D6\u6D88\u3002${t.reset}
607
+ `),e[r].value):e[a].value}finally{s.close()}}async function vr(n,e=!1){let r=yr.createInterface({input:process.stdin,output:process.stdout});try{let s=e?"[Y/n]":"[y/N]",o=(await Promise.race([r.question(`${n} ${s} `),new Promise(a=>r.once("close",()=>a("")))])).trim().toLowerCase();return o?o==="y"||o==="yes":e}finally{r.close()}}async function $o(n){switch(n[0]){case void 0:return wc();case"list":case"ls":return xc();case"all":case"available":case"providers":return Sc();case"add":return Bn(n.slice(1));case"remove":case"rm":case"delete":return yo(n.slice(1));case"context":case"ctx":return vo(n.slice(1));case"vision":case"image":return bc(n.slice(1));case"help":case"-h":case"--help":return Cc();default:return Bn(n)}}async function Bn(n){let e=te(),r=Ve(e),s=n[0]??await Tc();if(!s){process.stdout.write(`${t.gray}\u5DF2\u53D6\u6D88\u3002${t.reset}
604
608
  `);return}let i=we(s);if(!i){process.stdout.write(`${t.red}\u672A\u77E5\u7684 provider\uFF1A${s}${t.reset}
605
- ${t.gray}\u53EF\u7528\uFF1A${Se.map(p=>p.id).join(", ")}${t.reset}
606
- `),process.exitCode=1;return}let o=n[1]??await Cc(i.id,i.models,e);if(!o){process.stdout.write(`${t.gray}\u5DF2\u53D6\u6D88\u3002${t.reset}
607
- `);return}let a=await Tc(i.id,i.requiresBaseUrl===!0,e),l=await Ec(i.id,i.envKey,e),c=await Ac(o,n[2]),u=await kc(i.id,o,n[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 h=r.some(p=>p.id===ve(i.id,o)),d=cs(e,{provider:i.id,model:o,contextWindow:c,vision:u,...a?{baseUrl:a}:{},...l?{apiKey:l}:{}});W(e),process.stdout.write(`
608
- ${t.green}\u2713 ${h?"\u5DF2\u66F4\u65B0":"\u5DF2\u65B0\u589E"}\u6A21\u578B${t.reset} ${t.bold}${d.id}${t.reset}
609
+ ${t.gray}\u53EF\u7528\uFF1A${Se.map(h=>h.id).join(", ")}${t.reset}
610
+ `),process.exitCode=1;return}let o=n[1]??await Ac(i.id,i.models,e);if(!o){process.stdout.write(`${t.gray}\u5DF2\u53D6\u6D88\u3002${t.reset}
611
+ `);return}let a=await kc(i.id,i.requiresBaseUrl===!0,e),l=await Pc(i.id,i.envKey,e),c=await _c(o,n[2]),u=await Ec(i.id,o,n[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=r.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(`
612
+ ${t.green}\u2713 ${p?"\u5DF2\u66F4\u65B0":"\u5DF2\u65B0\u589E"}\u6A21\u578B${t.reset} ${t.bold}${d.id}${t.reset}
609
613
  ${t.gray}provider\uFF1A${t.reset}${i.label}
610
614
  ${t.gray}model \uFF1A${t.reset}${d.model}
611
615
  ${t.gray}\u4E0A\u4E0B\u6587 \uFF1A${t.reset}${xe(d.contextWindow??32e3)} token
612
616
  ${t.gray}\u56FE\u7247\u8F93\u5165\uFF1A${t.reset}${Be(d)?"\u652F\u6301\uFF08Ctrl+V \u7C98\u8D34\u56FE\u7247\uFF09":"\u4E0D\u652F\u6301"}
613
617
  `+(a?` ${t.gray}baseUrl \uFF1A${t.reset}${a}
614
618
  `:"")+` ${t.gray}\u914D\u7F6E\u6587\u4EF6\uFF1A${t.reset}${D()}
615
- `),vo(e)}async function $o(n){let e=te(),r=U(e);if(r.length===0){process.stdout.write(`${t.yellow}\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\u3002${t.reset}
616
- `);return}let s=n[0]||await Hn(r,"\u9009\u62E9\u8981\u5220\u9664\u7684\u6A21\u578B\uFF1A");if(!s){process.stdout.write(`${t.gray}\u5DF2\u53D6\u6D88\u3002${t.reset}
617
- `);return}let i=Kn(e,s),o=i?us(e,i):null;if(!o){process.stdout.write(`${t.red}\u672A\u627E\u5230\u6A21\u578B\uFF1A${s}${t.reset}
619
+ `),bo(e)}async function yo(n){let e=te(),r=U(e);if(r.length===0){process.stdout.write(`${t.yellow}\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\u3002${t.reset}
620
+ `);return}let s=n[0]||await Kn(r,"\u9009\u62E9\u8981\u5220\u9664\u7684\u6A21\u578B\uFF1A");if(!s){process.stdout.write(`${t.gray}\u5DF2\u53D6\u6D88\u3002${t.reset}
621
+ `);return}let i=Jn(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
622
  ${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
623
  `),process.exitCode=1;return}W(e),process.stdout.write(`
620
624
  ${t.green}\u2713 \u5DF2\u5220\u9664\u6A21\u578B${t.reset} ${o.id}
621
- `),vo(e)}async function yo(n){let e=te(),r=U(e);if(r.length===0){process.stdout.write(`${t.yellow}\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\u3002${t.reset}
622
- `);return}let s=n[0]||await Hn(r,"\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}
623
- `);return}let i=Kn(e,s),o=i?r.find(h=>h.id===i):void 0;if(!o){process.stdout.write(`${t.red}\u672A\u627E\u5230\u6A21\u578B\uFF1A${s}${t.reset}
625
+ `),bo(e)}async function vo(n){let e=te(),r=U(e);if(r.length===0){process.stdout.write(`${t.yellow}\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\u3002${t.reset}
626
+ `);return}let s=n[0]||await Kn(r,"\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}
627
+ `);return}let i=Jn(e,s),o=i?r.find(p=>p.id===i):void 0;if(!o){process.stdout.write(`${t.red}\u672A\u627E\u5230\u6A21\u578B\uFF1A${s}${t.reset}
624
628
  ${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=n[1]??await Le(`\u8BF7\u8F93\u5165 ${o.id} \u7684\u4E0A\u4E0B\u6587\u7A97\u53E3\uFF08token\uFF0C\u5982 128000\uFF09`,String(a)),c=zn(l);if(c===void 0){process.stdout.write(`${t.red}\u65E0\u6CD5\u8BC6\u522B\u7684\u7A97\u53E3\u5927\u5C0F\uFF1A${l}${t.reset}
626
- `),process.exitCode=1;return}let u=Xe(e).find(h=>h.id===o.id);u&&(u.contextWindow=c),W(e),process.stdout.write(`
629
+ `),process.exitCode=1;return}let a=o.contextWindow??Ue(o.model),l=n[1]??await Le(`\u8BF7\u8F93\u5165 ${o.id} \u7684\u4E0A\u4E0B\u6587\u7A97\u53E3\uFF08token\uFF0C\u5982 128000\uFF09`,String(a)),c=Fn(l);if(c===void 0){process.stdout.write(`${t.red}\u65E0\u6CD5\u8BC6\u522B\u7684\u7A97\u53E3\u5927\u5C0F\uFF1A${l}${t.reset}
630
+ `),process.exitCode=1;return}let u=Ve(e).find(p=>p.id===o.id);u&&(u.contextWindow=c),W(e),process.stdout.write(`
627
631
  ${t.green}\u2713 \u5DF2\u66F4\u65B0\u4E0A\u4E0B\u6587\u7A97\u53E3${t.reset} ${o.id} \u2192 ${xe(c)} token
628
- `)}async function yc(n){let e=te(),r=U(e);if(r.length===0){process.stdout.write(`${t.yellow}\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\u3002${t.reset}
629
- `);return}let s=n[0]||await Hn(r,"\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}
630
- `);return}let i=Kn(e,s),o=i?r.find(h=>h.id===i):void 0;if(!o){process.stdout.write(`${t.red}\u672A\u627E\u5230\u6A21\u578B\uFF1A${s}${t.reset}
632
+ `)}async function bc(n){let e=te(),r=U(e);if(r.length===0){process.stdout.write(`${t.yellow}\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\u3002${t.reset}
633
+ `);return}let s=n[0]||await Kn(r,"\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}
634
+ `);return}let i=Jn(e,s),o=i?r.find(p=>p.id===i):void 0;if(!o){process.stdout.write(`${t.red}\u672A\u627E\u5230\u6A21\u578B\uFF1A${s}${t.reset}
631
635
  ${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=Dr(o.model),l=(n[1]??await Le(`\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=Jn(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}
633
- `),process.exitCode=1;return}let u=Xe(e).find(h=>h.id===o.id);if(!u){process.stdout.write(`${t.red}\u8BBE\u7F6E\u5931\u8D25\uFF1A${o.id}${t.reset}
636
+ `),process.exitCode=1;return}let a=Ir(o.model),l=(n[1]??await Le(`\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=zn(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}
637
+ `),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
638
  `),process.exitCode=1;return}u.vision=c,W(e),process.stdout.write(`
635
639
  ${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
640
  ${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 vc(){let n=te();Fn(n)}function bc(){let n=te(),e=new Set(U(n).map(o=>o.id)),r=Se.reduce((o,a)=>o+a.models.length,0);process.stdout.write(`
641
+ `)}function xc(){let n=te();Un(n)}function Sc(){let n=te(),e=new Set(U(n).map(o=>o.id)),r=Se.reduce((o,a)=>o+a.models.length,0);process.stdout.write(`
638
642
  ${t.bold}\u6240\u6709\u53EF\u7528\u6A21\u578B${t.reset}${t.gray}\uFF08${Se.length} \u4E2A\u670D\u52A1\u5546\uFF0C\u5171 ${r} \u4E2A\u5185\u7F6E\u6A21\u578B\uFF09${t.reset}
639
643
  `);for(let o of Se){let a=n.providers[o.id]!==void 0?` ${t.gray}\xB7 \u5DF2\u586B\u5199 Key${t.reset}`:"";if(process.stdout.write(`
640
644
  ${t.bold}${o.label}${t.reset} ${t.gray}(${o.id})${t.reset}${a}
641
645
  `),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),h=u?`${t.brightGreen}\u276F${t.reset}`:" ",d=[];l===o.defaultModel&&d.push("\u9ED8\u8BA4"),u&&d.push("\u5DF2\u914D\u7F6E");let p=d.length>0?` ${t.gray}\u2190 ${d.join(" \xB7 ")}${t.reset}`:"";process.stdout.write(` ${h} ${l}${p}
646
+ `);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}
643
647
  `)}}let s=new Set(Se.flatMap(o=>o.models.map(a=>ve(o.id,a)))),i=U(n).filter(o=>!s.has(o.id));if(i.length>0){process.stdout.write(`
644
648
  ${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
649
  `);for(let o of i)process.stdout.write(` ${t.brightGreen}\u276F${t.reset} ${o.id}
646
650
  `)}process.stdout.write(`
647
651
  ${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
652
  ${t.gray}\u67E5\u770B\u5DF2\u914D\u7F6E\u7684\u6A21\u578B\uFF1A${t.reset}xzh model list
649
- `)}async function xc(){for(;;){let n=te();switch(Fn(n),await Ae("\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 Un([]);break;case"list":Fn(n);break;case"remove":await $o([]);break;case"context":await yo([]);break;default:process.stdout.write(`
653
+ `)}async function wc(){for(;;){let n=te();switch(Un(n),await Ae("\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 Bn([]);break;case"list":Un(n);break;case"remove":await yo([]);break;case"context":await vo([]);break;default:process.stdout.write(`
650
654
  ${t.gray}\u5DF2\u9000\u51FA\u6A21\u578B\u7BA1\u7406\u3002${t.reset}
651
- `);return}}}function Fn(n){let e=U(n),r=je(n);if(process.stdout.write(`
655
+ `);return}}}function Un(n){let e=U(n),r=je(n);if(process.stdout.write(`
652
656
  ${t.bold}\u7384\u732A\u6A21\u578B\u5217\u8868${t.reset} ${t.gray}(${D()})${t.reset}
653
657
  `),e.length===0){process.stdout.write(` ${t.yellow}\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\u3002${t.reset}
654
658
  ${t.gray}\u8FD0\u884C ${t.reset}xzh model add <provider> <model>${t.gray} \u6DFB\u52A0\u3002${t.reset}
655
659
  `);return}e.forEach((s,i)=>{let o=r!==null&&s.id===r.id,a=o?`${t.brightGreen}\u276F${t.reset}`:" ",l=o?` ${t.gray}\u2190 \u5F53\u524D\u4F7F\u7528${t.reset}`:"",c=xe(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
660
  `)}),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 vo(n){let e=je(n);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}
661
+ `)}function bo(n){let e=je(n);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}
658
662
  `):(n.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
663
  `),process.stdout.write(`
660
664
  \u8FD0\u884C ${t.brightGreen}xzh${t.reset} \u5F00\u59CB\u4F7F\u7528\u3002
661
- `)}function Sc(){process.stdout.write(`
665
+ `)}function Cc(){process.stdout.write(`
662
666
  ${t.bold}xzh model \u2014\u2014 \u591A\u6A21\u578B\u7BA1\u7406${t.reset}
663
667
  ${t.green}xzh model${t.reset} \u4EA4\u4E92\u5F0F\u83DC\u5355
664
668
  ${t.green}xzh model list${t.reset} \u5217\u51FA\u5DF2\u914D\u7F6E\u7684\u6A21\u578B\uFF08\u6309\u56DE\u9000\u987A\u5E8F\uFF09
@@ -675,23 +679,23 @@ ${t.bold}\u591A\u6A21\u578B\u4E0E\u56DE\u9000${t.reset}
675
679
  \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
680
 
677
681
  ${t.gray}\u53EF\u7528 provider\uFF1A${Se.map(n=>n.id).join(", ")}${t.reset}
678
- `)}async function wc(){return Ae("\u9009\u62E9 AI \u670D\u52A1\u5546\uFF1A",[...Se.map(n=>({label:n.label,value:n.id,hint:n.id})),{label:"\u8FD4\u56DE",value:""}],0)}async function Cc(n,e,r){let s=r.providers[n]?.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 Ae(`\u9009\u62E9\u6A21\u578B\uFF08${n}\uFF09\uFF1A`,o,a);if(l!=="__custom__")return l}return await Le("\u8BF7\u8F93\u5165\u6A21\u578B\u540D\u79F0",s)}async function Tc(n,e,r){let s=r.providers[n]?.baseUrl;return e?await Le("\u8BF7\u8F93\u5165 API \u7AEF\u70B9 baseUrl",s):s??""}function zn(n){let e=n.trim().toLowerCase().replace(/[_,\s]/g,"");if(!e)return;let r=/^(\d+(?:\.\d+)?)(k|m|万)?$/.exec(e);if(!r)return;let s=Number(r[1]);if(!Number.isFinite(s)||s<=0)return;let i=r[2],a=Math.floor(s*(i==="k"?1e3:i==="m"?1e6:i==="\u4E07"?1e4:1));return a>0?a:void 0}async function Ac(n,e){let r=Ue(n);if(e!==void 0&&e.trim()!==""){let o=zn(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 ${xe(r)}\u3002${t.reset}
682
+ `)}async function Tc(){return Ae("\u9009\u62E9 AI \u670D\u52A1\u5546\uFF1A",[...Se.map(n=>({label:n.label,value:n.id,hint:n.id})),{label:"\u8FD4\u56DE",value:""}],0)}async function Ac(n,e,r){let s=r.providers[n]?.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 Ae(`\u9009\u62E9\u6A21\u578B\uFF08${n}\uFF09\uFF1A`,o,a);if(l!=="__custom__")return l}return await Le("\u8BF7\u8F93\u5165\u6A21\u578B\u540D\u79F0",s)}async function kc(n,e,r){let s=r.providers[n]?.baseUrl;return e?await Le("\u8BF7\u8F93\u5165 API \u7AEF\u70B9 baseUrl",s):s??""}function Fn(n){let e=n.trim().toLowerCase().replace(/[_,\s]/g,"");if(!e)return;let r=/^(\d+(?:\.\d+)?)(k|m|万)?$/.exec(e);if(!r)return;let s=Number(r[1]);if(!Number.isFinite(s)||s<=0)return;let i=r[2],a=Math.floor(s*(i==="k"?1e3:i==="m"?1e6:i==="\u4E07"?1e4:1));return a>0?a:void 0}async function _c(n,e){let r=Ue(n);if(e!==void 0&&e.trim()!==""){let o=Fn(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 ${xe(r)}\u3002${t.reset}
679
683
  `),r):o}process.stdout.write(`${t.gray} \u4E0A\u4E0B\u6587\u7A97\u53E3\uFF1A\u6309\u6A21\u578B\u540D\u63A8\u65AD\u4E3A ${xe(r)} token\u3002${t.reset}
680
- `);let s=await Le("\u8BF7\u8F93\u5165\u4E0A\u4E0B\u6587\u7A97\u53E3\u5927\u5C0F\uFF08token\uFF0C\u5982 128000\uFF1B\u56DE\u8F66\u4F7F\u7528\u63A8\u65AD\u503C\uFF09",String(r)),i=zn(s);return i===void 0?(process.stdout.write(`${t.yellow} \u65E0\u6CD5\u8BC6\u522B\u300C${s}\u300D\uFF0C\u5DF2\u4F7F\u7528\u63A8\u65AD\u503C ${xe(r)}\u3002${t.reset}
681
- `),r):i}function Jn(n){let e=n.trim().toLowerCase();if(["on","true","yes","y","1"].includes(e))return!0;if(["off","false","no","n","0"].includes(e))return!1}async function kc(n,e,r){let s=Be({provider:n,model:e}),i=s?"\u652F\u6301":"\u4E0D\u652F\u6301";if(r!==void 0&&r.trim()!==""){let c=Jn(r);return c!==void 0?c:(process.stdout.write(`${t.yellow}\u65E0\u6CD5\u8BC6\u522B\u56FE\u7247\u8F93\u5165\u8BBE\u7F6E\u300C${r}\u300D\uFF0C\u5DF2\u4F7F\u7528${i}\u3002${t.reset}
684
+ `);let s=await Le("\u8BF7\u8F93\u5165\u4E0A\u4E0B\u6587\u7A97\u53E3\u5927\u5C0F\uFF08token\uFF0C\u5982 128000\uFF1B\u56DE\u8F66\u4F7F\u7528\u63A8\u65AD\u503C\uFF09",String(r)),i=Fn(s);return i===void 0?(process.stdout.write(`${t.yellow} \u65E0\u6CD5\u8BC6\u522B\u300C${s}\u300D\uFF0C\u5DF2\u4F7F\u7528\u63A8\u65AD\u503C ${xe(r)}\u3002${t.reset}
685
+ `),r):i}function zn(n){let e=n.trim().toLowerCase();if(["on","true","yes","y","1"].includes(e))return!0;if(["off","false","no","n","0"].includes(e))return!1}async function Ec(n,e,r){let s=Be({provider:n,model:e}),i=s?"\u652F\u6301":"\u4E0D\u652F\u6301";if(r!==void 0&&r.trim()!==""){let c=zn(r);return c!==void 0?c:(process.stdout.write(`${t.yellow}\u65E0\u6CD5\u8BC6\u522B\u56FE\u7247\u8F93\u5165\u8BBE\u7F6E\u300C${r}\u300D\uFF0C\u5DF2\u4F7F\u7528${i}\u3002${t.reset}
682
686
  `),s)}let o=n==="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}
683
- `);let a=await Le("\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=Jn(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}
684
- `),s)}async function Ec(n,e,r){let s=we(n),i=r.providers[n]?.apiKey;return s?.requiresApiKey?(Dt(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}
685
- `),await Le("\u8BF7\u8F93\u5165 API Key",i??"",{mask:!0})):i??""}function Kn(n,e){let r=U(n),s=r.find(o=>o.id===e);if(s)return s.id;let i=r.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<=r.length)return r[o-1].id}return null}async function Hn(n,e){return await Ae(e,[...n.map(s=>({label:`${s.id} ctx ${xe(s.contextWindow??Ue(s.model))}`,value:s.id})),{label:"\u8FD4\u56DE",value:""}],0)}async function bo(){let n=Te();process.stdout.write(`
687
+ `);let a=await Le("\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=zn(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}
688
+ `),s)}async function Pc(n,e,r){let s=we(n),i=r.providers[n]?.apiKey;return s?.requiresApiKey?(Dt(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}
689
+ `),await Le("\u8BF7\u8F93\u5165 API Key",i??"",{mask:!0})):i??""}function Jn(n,e){let r=U(n),s=r.find(o=>o.id===e);if(s)return s.id;let i=r.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<=r.length)return r[o-1].id}return null}async function Kn(n,e){return await Ae(e,[...n.map(s=>({label:`${s.id} ctx ${xe(s.contextWindow??Ue(s.model))}`,value:s.id})),{label:"\u8FD4\u56DE",value:""}],0)}async function xo(){let n=Te();process.stdout.write(`
686
690
  ${t.bold}\u7384\u732A\u4F9D\u8D56\u68C0\u67E5${t.reset} ${t.gray}(\u5E73\u53F0\uFF1A${n})${t.reset}
687
691
 
688
- `);let e=[...ji(n).map(o=>({requirement:o,owner:"\u7384\u732A\uFF08Ctrl+V \u7C98\u8D34\u56FE\u7247\uFF09"})),...Li().flatMap(o=>lt(o).map(a=>({requirement:a,owner:`\u6280\u80FD ${o}`})))],r=[],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}
692
+ `);let e=[...Bi(n).map(o=>({requirement:o,owner:"\u7384\u732A\uFF08Ctrl+V \u7C98\u8D34\u56FE\u7247\uFF09"})),...Ni().flatMap(o=>ct(o).map(a=>({requirement:a,owner:`\u6280\u80FD ${o}`})))],r=[],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}
689
693
  `);continue}let l=o.install[n];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
694
  `),i.push(o.name);continue}if(process.stdout.write(`
691
695
  ${t.yellow}\u25CF${t.reset} ${t.bold}${o.name}${t.reset} ${t.gray}\u672A\u5B89\u88C5${t.reset}
692
696
  ${t.gray}\u6240\u5C5E\uFF1A${a}${t.reset}
693
697
  ${t.gray}\u5B89\u88C5\u547D\u4EE4\uFF1A${t.reset}${l}
694
- `),!await vr(" \u662F\u5426\u73B0\u5728\u5B89\u88C5\uFF1F",!0)){i.push(o.name);continue}(await _n(o,n,void 0,h=>process.stdout.write(`${t.gray} ${h}${t.reset}
698
+ `),!await vr(" \u662F\u5426\u73B0\u5728\u5B89\u88C5\uFF1F",!0)){i.push(o.name);continue}(await _n(o,n,void 0,p=>process.stdout.write(`${t.gray} ${p}${t.reset}
695
699
  `),{interactive:!0})).ok?(process.stdout.write(`${t.green} \u2713 ${o.name} \u5B89\u88C5\u5B8C\u6210${t.reset}
696
700
  `),r.push(o.name)):(process.stdout.write(`${t.red} \u2717 ${o.name} \u5B89\u88C5\u5931\u8D25${t.reset}
697
701
  `),s.push(o.name))}process.stdout.write(`
@@ -702,59 +706,59 @@ ${t.bold}\u7ED3\u679C${t.reset}
702
706
  `)),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
707
  `):r.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
708
  `),process.stdout.write(`
705
- `)}var wo=v(require("fs")),Wn=v(require("path"));var _c=52;async function Co(n){switch(n[0]?.trim().toLowerCase()){case void 0:await Pc();return;case"list":case"ls":To(!0);return;case"enable":case"on":await qn(n.slice(1),!0);return;case"disable":case"off":await qn(n.slice(1),!1);return;case"delete":case"remove":case"rm":await Ao(n.slice(1));return;case"help":case"-h":case"--help":So();return;default:process.stdout.write(`${t.red}\u672A\u77E5\u5B50\u547D\u4EE4\uFF1A${n[0]}${t.reset}
706
- `),So(),process.exitCode=1}}function To(n){let e=ie({includeDisabled:!0}),r=ie(),s=e.filter(a=>a.source==="builtin").length,i=e.length-s,o=Wn.join(T(),"skills.json");if(process.stdout.write(`
709
+ `)}var Co=v(require("fs")),qn=v(require("path"));var Rc=52;async function To(n){switch(n[0]?.trim().toLowerCase()){case void 0:await Mc();return;case"list":case"ls":Ao(!0);return;case"enable":case"on":await Hn(n.slice(1),!0);return;case"disable":case"off":await Hn(n.slice(1),!1);return;case"delete":case"remove":case"rm":await ko(n.slice(1));return;case"help":case"-h":case"--help":wo();return;default:process.stdout.write(`${t.red}\u672A\u77E5\u5B50\u547D\u4EE4\uFF1A${n[0]}${t.reset}
710
+ `),wo(),process.exitCode=1}}function Ao(n){let e=ie({includeDisabled:!0}),r=ie(),s=e.filter(a=>a.source==="builtin").length,i=e.length-s,o=qn.join(T(),"skills.json");if(process.stdout.write(`
707
711
  ${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-r.length} \xB7 ${o})${t.reset}
708
712
  `),e.length===0){process.stdout.write(` ${t.yellow}\u6CA1\u6709\u53D1\u73B0\u4EFB\u4F55\u6280\u80FD\u3002${t.reset}
709
713
  ${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=!r.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",h=l?`${t.gray}\uFF08\u5DF2\u7981\u7528\uFF09${t.reset} `:"",d=vt(a.name,22),p=l?`${t.gray}${d}${t.reset}`:`${t.bold}${d}${t.reset}`;process.stdout.write(` ${c} ${p} ${u} ${h}${t.gray}${O(a.description,_c)}${t.reset}
711
- `)}}async function qn(n,e){let r=e?"\u542F\u7528":"\u7981\u7528",s=n.find(c=>!c.startsWith("-"));if(s){let c=ie({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}
714
+ `);return}for(let a of e){let l=!r.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=vt(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,Rc)}${t.reset}
715
+ `)}}async function Hn(n,e){let r=e?"\u542F\u7528":"\u7981\u7528",s=n.find(c=>!c.startsWith("-"));if(s){let c=ie({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
716
  ${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}xo(c,e);return}let i=new Set(ie().map(c=>c.name)),o=ie({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${r}\u7684\u6280\u80FD\u3002${t.reset}
717
+ `),process.exitCode=1;return}So(c,e);return}let i=new Set(ie().map(c=>c.name)),o=ie({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${r}\u7684\u6280\u80FD\u3002${t.reset}
714
718
  ${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 Ae(`\u9009\u62E9\u8981${r}\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&&xo(l,e)}function xo(n,e){if(!er(n.name,!e)){process.stdout.write(`${t.yellow}\u6280\u80FD\u300C${n.name}\u300D\u672C\u6765\u5C31\u5904\u4E8E${e?"\u542F\u7528":"\u7981\u7528"}\u72B6\u6001\u3002${t.reset}
719
+ `);return}let a=await Ae(`\u9009\u62E9\u8981${r}\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(n,e){if(!er(n.name,!e)){process.stdout.write(`${t.yellow}\u6280\u80FD\u300C${n.name}\u300D\u672C\u6765\u5C31\u5904\u4E8E${e?"\u542F\u7528":"\u7981\u7528"}\u72B6\u6001\u3002${t.reset}
716
720
  `);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}${n.name}${t.reset}\u300D${t.gray}(\u6765\u6E90\uFF1A${n.source==="user"?"\u7528\u6237":"\u5185\u7F6E"})${t.reset}
717
721
  ${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 Ao(n){let e=n.some(i=>i==="--yes"||i==="-y"),r=n.find(i=>!i.startsWith("-")),s;if(r){if(s=ie({includeDisabled:!0}).find(i=>i.name.toLowerCase()===r.trim().toLowerCase()),!s){process.stdout.write(`${t.red}\u672A\u627E\u5230\u6280\u80FD\uFF1A${r}${t.reset}
722
+ `)}async function ko(n){let e=n.some(i=>i==="--yes"||i==="-y"),r=n.find(i=>!i.startsWith("-")),s;if(r){if(s=ie({includeDisabled:!0}).find(i=>i.name.toLowerCase()===r.trim().toLowerCase()),!s){process.stdout.write(`${t.red}\u672A\u627E\u5230\u6280\u80FD\uFF1A${r}${t.reset}
719
723
  ${t.gray}\u8FD0\u884C ${t.reset}xzh skill list${t.gray} \u67E5\u770B\u5168\u90E8\u6280\u80FD\u3002${t.reset}
720
724
  `),process.exitCode=1;return}}else{let i=ie({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
725
  ${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
726
  `);return}let o=await Ae("\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
727
  ${t.gray}\u5982\u9700\u9690\u85CF\uFF0C\u8FD0\u884C ${t.reset}xzh skill disable ${s.name}${t.gray}\u3002${t.reset}
724
728
  `),process.exitCode=1;return}if(!e&&!await vr(`\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}
725
- `);return}try{wo.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}
729
+ `);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}
726
730
  `),process.exitCode=1;return}er(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
731
  ${t.gray}\u76EE\u5F55\uFF1A${s.dir}${t.reset}
728
732
  ${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 Pc(){if(!process.stdin.isTTY){process.stdout.write(`${t.yellow}\u4EA4\u4E92\u5F0F\u6280\u80FD\u7BA1\u7406\u9700\u8981 TTY\u3002${t.reset}
733
+ `)}}async function Mc(){if(!process.stdin.isTTY){process.stdout.write(`${t.yellow}\u4EA4\u4E92\u5F0F\u6280\u80FD\u7BA1\u7406\u9700\u8981 TTY\u3002${t.reset}
730
734
  ${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(To(!0),await Ae("\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 qn([],!0);break;case"delete":await Ao([]);break;default:process.stdout.write(`
735
+ `),process.exitCode=1;return}for(;;)switch(Ao(!0),await Ae("\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 Hn([],!0);break;case"delete":await ko([]);break;default:process.stdout.write(`
732
736
  ${t.gray}\u5DF2\u9000\u51FA\u6280\u80FD\u7BA1\u7406\u3002${t.reset}
733
- `);return}}function So(){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}${Wn.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(`
734
- `))}process.stdout.on("error",n=>{n.code==="EPIPE"&&process.exit(0)});process.stderr.on("error",()=>{});for(let n of["SIGTERM","SIGHUP"])process.on(n,()=>{Bn(),fr(),process.exit(0)});process.on("uncaughtException",n=>{jn("\u672A\u6355\u83B7\u5F02\u5E38",n),fr(),process.stderr.write(`
737
+ `);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}${qn.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(`
738
+ `))}process.stdout.on("error",n=>{n.code==="EPIPE"&&process.exit(0)});process.stderr.on("error",()=>{});for(let n of["SIGTERM","SIGHUP"])process.on(n,()=>{jn(),fr(),process.exit(0)});process.on("uncaughtException",n=>{Nn("\u672A\u6355\u83B7\u5F02\u5E38",n),fr(),process.stderr.write(`
735
739
  \u672A\u6355\u83B7\u5F02\u5E38\uFF1A${n?.stack??String(n)}
736
740
  `),process.stderr.write(`\u8BE6\u60C5\u5DF2\u5199\u5165 ${$r()}
737
- `),process.exit(1)});process.on("unhandledRejection",n=>{jn("\u672A\u5904\u7406\u7684 Promise \u62D2\u7EDD",n),fr(),process.stderr.write(`
741
+ `),process.exit(1)});process.on("unhandledRejection",n=>{Nn("\u672A\u5904\u7406\u7684 Promise \u62D2\u7EDD",n),fr(),process.stderr.write(`
738
742
  \u672A\u5904\u7406\u7684 Promise \u62D2\u7EDD\uFF1A${String(n)}
739
743
  `),process.stderr.write(`\u8BE6\u60C5\u5DF2\u5199\u5165 ${$r()}
740
- `),process.exit(1)});async function Rc(){let n=Zn();n.migrated&&process.stdout.write(`${t.gray}\u5DF2\u5C06\u5168\u5C40\u76EE\u5F55\u8FC1\u79FB\u81F3 ${T()}${n.from?`\uFF08\u539F ${n.from}\uFF09`:""}${t.reset}
741
- `);let e=process.argv.slice(2),r;e.includes("--intent")?r=!0:e.includes("--no-intent")&&(r=!1);let s=e.filter(o=>o!=="--intent"&&o!=="--no-intent"),i=s[0];switch(i){case void 0:await ko(void 0,r);return;case"model":await go(s.slice(1));return;case"config":await mo(s.slice(1));return;case"setup":await bo();return;case"skill":await Co(s.slice(1));return;case"device":await Xs(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}
742
- `);return;default:{if(i.startsWith("-")){Eo();return}let o=Ic(i);if(o){await ko(o,r);return}if(Mc(i)){process.stdout.write(`${t.red}\u76EE\u5F55\u4E0D\u5B58\u5728\u6216\u4E0D\u662F\u76EE\u5F55\uFF1A${i}${t.reset}
744
+ `),process.exit(1)});async function Ic(){let n=Yn();n.migrated&&process.stdout.write(`${t.gray}\u5DF2\u5C06\u5168\u5C40\u76EE\u5F55\u8FC1\u79FB\u81F3 ${T()}${n.from?`\uFF08\u539F ${n.from}\uFF09`:""}${t.reset}
745
+ `);let e=process.argv.slice(2),r;e.includes("--intent")?r=!0:e.includes("--no-intent")&&(r=!1);let s=e.filter(o=>o!=="--intent"&&o!=="--no-intent"),i=s[0];switch(i){case void 0:await _o(void 0,r);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}
746
+ `);return;default:{if(i.startsWith("-")){Eo();return}let o=Oc(i);if(o){await _o(o,r);return}if(Dc(i)){process.stdout.write(`${t.red}\u76EE\u5F55\u4E0D\u5B58\u5728\u6216\u4E0D\u662F\u76EE\u5F55\uFF1A${i}${t.reset}
743
747
  `),process.exitCode=1;return}process.stdout.write(`${t.red}\u672A\u77E5\u547D\u4EE4\uFF1A${i}${t.reset}
744
748
  ${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 Mc(n){return n.startsWith("/")||n.startsWith("~")||n.startsWith("./")||n.startsWith("../")||n==="."||n===".."}function Ic(n){let e=q(n),r=br.isAbsolute(e)?e:br.resolve(process.cwd(),e);try{if(ut.existsSync(r)&&ut.statSync(r).isDirectory())return ut.realpathSync(r)}catch{}return null}async function ko(n,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}
749
+ `),process.exitCode=1}}}function Dc(n){return n.startsWith("/")||n.startsWith("~")||n.startsWith("./")||n.startsWith("../")||n==="."||n===".."}function Oc(n){let e=q(n),r=br.isAbsolute(e)?e:br.resolve(process.cwd(),e);try{if(dt.existsSync(r)&&dt.statSync(r).isDirectory())return dt.realpathSync(r)}catch{}return null}async function _o(n,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
750
  ${t.gray}\u8BF7\u5728\u771F\u5B9E\u7EC8\u7AEF\u4E2D\u8FD0\u884C xzh\u3002${t.reset}
747
751
  `),process.exitCode=1;return}let r=te(),s=je(r);if(!s){process.stdout.write(`${t.yellow}\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\u3002${t.reset}
748
752
  ${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=Kr(r,s);if(i.length>0){process.stdout.write(`${t.yellow}\u26A0 \u5F53\u524D\u6A21\u578B\u4E0D\u53EF\u7528\uFF1A${t.reset}
753
+ `),process.exitCode=1;return}let i=Jr(r,s);if(i.length>0){process.stdout.write(`${t.yellow}\u26A0 \u5F53\u524D\u6A21\u578B\u4E0D\u53EF\u7528\uFF1A${t.reset}
750
754
  `);for(let u of i)process.stdout.write(` ${t.gray}\xB7${t.reset} ${u}
751
755
  `);ht()?process.stdout.write(`
752
756
  ${t.gray}\u914D\u7F6E\u6587\u4EF6\uFF1A${D()}${t.reset}
753
757
  `):process.stdout.write(`
754
758
  ${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=As(r).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}
759
+ `),process.exitCode=1;return}let o=ks(r).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
760
  `);for(let u of o)process.stdout.write(` ${t.gray}\xB7${t.reset} ${u}
757
- `)}let a=we(s.provider),l=Ot(r,s);await new mr({provider:l,config:r,cwd:n??process.cwd(),providerLabel:a?.label??s.provider,model:s.model,activeModel:s,intentEnabled:e!==void 0?e:r.intent?.enabled===!0,autoApprove:r.autoApprove,startupNotice:Dc()}).start(),Bn()}function Dc(){let n=uo(K);if(!n)return;let e=n.startedAt?`\uFF08\u5F00\u59CB\u4E8E ${n.startedAt}\uFF09`:"",r=[`${t.yellow}\u26A0 \u4E0A\u6B21\u8FD0\u884C\u7591\u4F3C\u5F02\u5E38\u9000\u51FA${e}${t.reset}`];if(n.crashLog){r.push(`${t.gray} \u6700\u540E\u7684\u8BB0\u5F55\uFF1A${t.reset}`);for(let s of n.crashLog.trim().split(`
761
+ `)}let a=we(s.provider),l=Ot(r,s);await new mr({provider:l,config:r,cwd:n??process.cwd(),providerLabel:a?.label??s.provider,model:s.model,activeModel:s,intentEnabled:e!==void 0?e:r.intent?.enabled===!0,autoApprove:r.autoApprove,startupNotice:Lc()}).start(),jn()}function Lc(){let n=po(K);if(!n)return;let e=n.startedAt?`\uFF08\u5F00\u59CB\u4E8E ${n.startedAt}\uFF09`:"",r=[`${t.yellow}\u26A0 \u4E0A\u6B21\u8FD0\u884C\u7591\u4F3C\u5F02\u5E38\u9000\u51FA${e}${t.reset}`];if(n.crashLog){r.push(`${t.gray} \u6700\u540E\u7684\u8BB0\u5F55\uFF1A${t.reset}`);for(let s of n.crashLog.trim().split(`
758
762
  `).slice(-10))r.push(`${t.gray} ${s}${t.reset}`)}else r.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 r.push(`${t.gray} \u5B8C\u6574\u65E5\u5FD7\uFF1A${$r()}${t.reset}`,""),r.join(`
759
763
  `)}function Eo(){let n=`
760
764
  ${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}
@@ -807,6 +811,6 @@ ${t.bold}\u754C\u9762\u5185\u5FEB\u6377\u952E${t.reset}
807
811
  Enter \u63D0\u4EA4 \xB7 Ctrl+J \u6362\u884C \xB7 \u2191/\u2193 \u5386\u53F2 \xB7 PgUp/PgDn \u6EDA\u52A8
808
812
  Ctrl+C \u4E2D\u65AD\u4EFB\u52A1/\u9000\u51FA \xB7 Ctrl+L \u6E05\u5C4F \xB7 \u8F93\u5165 /help \u67E5\u770B\u5185\u7F6E\u547D\u4EE4
809
813
  \u5207\u6362\u9879\u76EE\u76EE\u5F55\uFF1A\u5728\u754C\u9762\u4E2D\u8F93\u5165 ${t.green}/switch <\u76EE\u5F55>${t.reset}
810
- `;process.stdout.write(n)}Rc().catch(n=>{process.stdout.write(`
814
+ `;process.stdout.write(n)}Ic().catch(n=>{process.stdout.write(`
811
815
  ${t.red}\u7384\u732A\u8FD0\u884C\u51FA\u9519\uFF1A${ce(n)}${t.reset}
812
816
  `),process.exit(1)});