xuanzhu 0.6.1 → 0.6.2
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 +289 -288
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var
|
|
2
|
+
"use strict";var Ua=Object.create;var As=Object.defineProperty;var za=Object.getOwnPropertyDescriptor;var Ga=Object.getOwnPropertyNames;var Ja=Object.getPrototypeOf,Ha=Object.prototype.hasOwnProperty;var Ka=(r,e,n,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ga(e))!Ha.call(r,i)&&i!==n&&As(r,i,{get:()=>e[i],enumerable:!(s=za(e,i))||s.enumerable});return r};var v=(r,e,n)=>(n=r!=null?Ua(Ja(r)):{},Ka(e||!r||!r.__esModule?As(n,"default",{value:r,enumerable:!0}):n,r));var At=v(require("fs")),Zn=v(require("path"));var ue=v(require("fs"));var V=v(require("fs")),Et=v(require("os")),$e=v(require("path"));function E(){let r=process.env.XZH_HOME?.trim();return r?$e.resolve(ee(r)):$e.join(Et.homedir(),".xzh")}function qa(){return!!process.env.XZH_HOME?.trim()}function Wa(){return $e.join(Et.homedir(),".xuanzhu")}function z(){return $e.join(E(),"config.json")}function Es(){return $e.join(__dirname,"skills")}function _s(){return $e.join(E(),"skills")}function Rs(){if(qa())return{migrated:!1};let r=Wa(),e=E();if($e.resolve(r)===$e.resolve(e))return{migrated:!1};try{if(V.existsSync(e)||!V.existsSync(r))return{migrated:!1}}catch{return{migrated:!1}}try{return V.renameSync(r,e),{migrated:!0,from:r,to:e}}catch{}let n=`${e}.migrating-${process.pid}`;try{V.rmSync(n,{recursive:!0,force:!0}),V.cpSync(r,n,{recursive:!0}),V.renameSync(n,e)}catch{try{V.rmSync(n,{recursive:!0,force:!0})}catch{}return{migrated:!1}}try{V.rmSync(r,{recursive:!0,force:!0})}catch{}return{migrated:!0,from:r,to:e}}function le(r){V.existsSync(r)||V.mkdirSync(r,{recursive:!0})}function ee(r){return r&&(r==="~"?Et.homedir():r.startsWith("~/")||r.startsWith("~\\")?$e.join(Et.homedir(),r.slice(2)):r)}var x=v(require("fs")),ce=v(require("path")),Xa=".xuanzhu",Is="MEMORY.md",Va=`# \u9879\u76EE\u89C4\u5219
|
|
3
3
|
|
|
4
4
|
> \u672C\u6587\u4EF6\u5185\u5BB9\u4F1A\u4F5C\u4E3A\u300C\u9879\u76EE\u7EA7\u6307\u4EE4\u300D\u8FFD\u52A0\u5230\u7384\u732A\u7684\u7CFB\u7EDF\u63D0\u793A\u8BCD\u4E2D\uFF0C\u7528\u4E8E\u7EA6\u5B9A\u672C\u9879\u76EE\u7684
|
|
5
5
|
> \u7F16\u7801\u89C4\u8303\u3001\u76EE\u5F55\u7ED3\u6784\u3001\u6784\u5EFA\u4E0E\u6D4B\u8BD5\u547D\u4EE4\u7B49\u3002\u7559\u7A7A\u6216\u5220\u9664\u672C\u6587\u4EF6\u5373\u8868\u793A\u4E0D\u4F7F\u7528\u9879\u76EE\u89C4\u5219\u3002
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
- \u5B89\u88C5\u4F9D\u8D56\uFF1A
|
|
12
12
|
- \u8FD0\u884C\u6D4B\u8BD5\uFF1A
|
|
13
13
|
- \u4EE3\u7801\u98CE\u683C\uFF1A
|
|
14
|
-
`,
|
|
14
|
+
`,Ya="AGENTS.md";function Ds(r){try{return x.existsSync(r)&&x.readFileSync(r,"utf8").trim()||null}catch{return null}}var Za=`# \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
|
|
26
|
-
`}function
|
|
25
|
+
\u8BF7\u91CD\u65B0\u8BFB\u53D6\u4EE5\u83B7\u53D6\u6700\u65B0\u5185\u5BB9 \u2014\u2014 \u5B83\u59CB\u7EC8\u662F\u672C\u9879\u76EE\u7EA6\u5B9A\u7684\u552F\u4E00\u6765\u6E90\u3002`;function Ps(r){return Ds(ce.join(r,Ya))===null?Va:`${Za}
|
|
26
|
+
`}function Qa(r){let e=ce.join(r,Xa),n=ce.join(e,"memory");return{root:r,dir:e,memoryDir:n,longTermFile:ce.join(n,Is),rulesFile:ce.join(e,"rules.md")}}function G(r){return Qa(ce.resolve(r))}function er(r){let e=G(r);if(x.existsSync(e.dir)){x.mkdirSync(e.memoryDir,{recursive:!0});try{x.existsSync(e.rulesFile)||x.writeFileSync(e.rulesFile,Ps(e.root),"utf8")}catch{}return{paths:e,created:!1}}try{return x.mkdirSync(e.memoryDir,{recursive:!0}),x.writeFileSync(e.rulesFile,Ps(e.root),"utf8"),{paths:e,created:!0}}catch{return{paths:e,created:!1}}}function Os(r){return Ds(G(r).rulesFile)}function el(r,e=new Date){let n=`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`;return ce.join(G(r).memoryDir,`${n}.md`)}function ot(r){let e=G(r),n="",s="",i="";try{x.existsSync(e.longTermFile)&&(n=x.readFileSync(e.longTermFile,"utf8").trim())}catch{}try{if(x.existsSync(e.memoryDir)){let o=x.readdirSync(e.memoryDir).filter(a=>/^\d{4}-\d{2}-\d{2}\.md$/.test(a)).sort().reverse();o.length>0&&(i=o[0],s=x.readFileSync(ce.join(e.memoryDir,o[0]),"utf8").trim())}}catch{}return{longTerm:n,recentDailyName:i,recentDaily:s}}function Ls(r,e,n){let s=G(r);x.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=n==="long"?s.longTermFile:el(r,i),c=`
|
|
27
27
|
|
|
28
28
|
## ${a}
|
|
29
29
|
|
|
30
30
|
${e.trim()}
|
|
31
|
-
`,u=
|
|
31
|
+
`,u=x.existsSync(l)?"":n==="long"?`# \u9879\u76EE\u957F\u671F\u8BB0\u5FC6
|
|
32
32
|
`:`# \u6BCF\u65E5\u8BB0\u5F55
|
|
33
|
-
`;return
|
|
33
|
+
`;return x.appendFileSync(l,`${u}${c}`,"utf8"),l}var we=12e3;function Ns(r){return/^##\s+\d{4}-\d{2}-\d{2}(\s+\d{2}:\d{2})?\s*$/.test(r)}function tl(r){for(let e=r.length-1;e>=0;e--)if(Ns(r[e].title))return e;return-1}function nl(r){let e=r.split(`
|
|
34
34
|
`),n=-1;for(let c=0;c<e.length;c++)if(/^##\s/.test(e[c])){n=c;break}if(n<0)return{header:r.trim(),blocks:[]};let s=e.slice(0,n).join(`
|
|
35
35
|
`).trim(),i=[],o="",a=[],l=()=>{o&&i.push({title:o,body:a.join(`
|
|
36
|
-
`).trim()})};for(let c=n;c<e.length;c++){let u=e[c];/^##\s/.test(u)?(l(),o=u.trim(),a=[]):a.push(u)}return l(),{header:s,blocks:i}}function
|
|
36
|
+
`).trim()})};for(let c=n;c<e.length;c++){let u=e[c];/^##\s/.test(u)?(l(),o=u.trim(),a=[]):a.push(u)}return l(),{header:s,blocks:i}}function Ms(r,e){let n=r||"# \u9879\u76EE\u957F\u671F\u8BB0\u5FC6";if(e.length===0)return`${n}
|
|
37
37
|
`;let s=e.map(i=>`${i.title}
|
|
38
38
|
|
|
39
39
|
${i.body}`);return`${n}
|
|
@@ -41,48 +41,48 @@ ${i.body}`);return`${n}
|
|
|
41
41
|
${s.join(`
|
|
42
42
|
|
|
43
43
|
`)}
|
|
44
|
-
`}function
|
|
45
|
-
`:"",i=`${n.longTermFile}.${process.pid}.tmp`;return
|
|
46
|
-
\u6D88\u606F\uFF1A${e}`}var
|
|
47
|
-
`,s=`${e}.${process.pid}.tmp`;
|
|
44
|
+
`}function rl(r){return r.replace(/\s+/g," ").trim()}function sl(r,e=we){let n=G(r);if(!x.existsSync(n.longTermFile))return null;let s;try{s=x.readFileSync(n.longTermFile,"utf8")}catch{return null}let i=s.trim().length,{header:o,blocks:a}=nl(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=rl(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)),m=Ms(o,c).trim().length;for(;m>p;){let y=tl(c),g=c.findIndex((b,$)=>Ns(b.title)&&$!==y);if(g<0)break;let f=c.splice(g,1)[0];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=Ms(o,c);return tr(r,d),{before:i,after:d.trim().length,removedDuplicates:u,removedOldest:h}}function Wt(r,e=we){let n=!(e>0),s=G(r),i;try{if(!x.existsSync(s.longTermFile))return null;i=x.readFileSync(s.longTermFile,"utf8").trim().length}catch{return null}return!n&&i<=e?null:sl(r,e)}function tr(r,e){let n=G(r);x.mkdirSync(n.memoryDir,{recursive:!0});let s=e.trim()?`${e.trim()}
|
|
45
|
+
`:"",i=`${n.longTermFile}.${process.pid}.tmp`;return x.writeFileSync(i,s,"utf8"),x.renameSync(i,n.longTermFile),n.longTermFile}function il(r){return r===Is||/^\d{4}-\d{2}-\d{2}\.md$/.test(r)}function js(r){let e=G(r),n={dir:e.memoryDir,hasLongTerm:!1,longTermChars:0,dailyFiles:[],totalBytes:0,longTermBytes:0};try{if(x.existsSync(e.longTermFile)){let s=x.readFileSync(e.longTermFile,"utf8");n.hasLongTerm=!0,n.longTermChars=s.trim().length,n.longTermBytes=Buffer.byteLength(s,"utf8"),n.totalBytes+=n.longTermBytes}}catch{}try{let s=x.readdirSync(e.memoryDir).filter(i=>/^\d{4}-\d{2}-\d{2}\.md$/.test(i)).sort();for(let i of s)try{let o=ce.join(e.memoryDir,i),a=x.statSync(o);if(!a.isFile())continue;n.dailyFiles.push({name:i,bytes:a.size}),n.totalBytes+=a.size}catch{}}catch{}return n}function Fs(r){let e=G(r),n=[],s=0,i;try{i=x.readdirSync(e.memoryDir).filter(il).sort()}catch{return{files:n,totalBytes:s}}for(let o of i){let a=ce.join(e.memoryDir,o);try{let l=x.statSync(a);if(!l.isFile())continue;x.unlinkSync(a),n.push({name:o,bytes:l.size}),s+=l.size}catch{}}return{files:n,totalBytes:s}}var nr="{{'\u7528\u6237\u53D1\u9001\u8FC7\u6765\u7684\u6D88\u606F'}}",Us=`\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 ${nr}`;function zs(r,e){if(r.includes(nr))return r.replace(nr,()=>e);let n=/\{\{\s*[^{}]*\s*\}\}/;return n.test(r)?r.replace(n,()=>e):`${r}
|
|
46
|
+
\u6D88\u606F\uFF1A${e}`}var ol=1,q={version:ol,provider:"deepseek",model:"deepseek-chat",models:[],intent:{enabled:!1},providers:{},maxToolRounds:200,autoApprove:!0,mouseCapture:!0,confirmSensitiveRead:!1,memoryMaxChars:we,maxParallelAgents:4,temperature:.2};function de(){let r=z();try{if(!ue.existsSync(r))return{...q,provider:"",model:"",models:[]};let e=ue.readFileSync(r,"utf8"),n=JSON.parse(e);return ll(n)}catch(e){throw new Error(`\u8BFB\u53D6\u914D\u7F6E\u5931\u8D25\uFF08${r}\uFF09\uFF1A${e instanceof Error?e.message:String(e)}`)}}function al(r){let e={id:r.id||Ee(r.provider,r.model),provider:r.provider,model:r.model};return r.apiKey&&(e.apiKey=r.apiKey),r.baseUrl&&(e.baseUrl=r.baseUrl),rr(r.contextWindow)&&(e.contextWindow=Math.floor(r.contextWindow)),typeof r.vision=="boolean"&&(e.vision=r.vision),e}function ll(r){let e=Array.isArray(r.models)?r.models.filter(n=>!!n&&typeof n.provider=="string"&&typeof n.model=="string").map(n=>al(n)):q.models;return{...q,...r,models:e,intent:{enabled:r.intent?.enabled===!0,...r.intent?.prompt?{prompt:r.intent.prompt}:{}},providers:{...q.providers,...r.providers??{}},maxToolRounds:r.maxToolRounds??q.maxToolRounds,autoApprove:r.autoApprove??q.autoApprove,mouseCapture:r.mouseCapture??q.mouseCapture,confirmSensitiveRead:r.confirmSensitiveRead??q.confirmSensitiveRead,memoryMaxChars:r.memoryMaxChars??q.memoryMaxChars,maxParallelAgents:r.maxParallelAgents??q.maxParallelAgents,temperature:r.temperature??q.temperature}}function te(r){le(E());let e=z(),n=JSON.stringify(r,null,2)+`
|
|
47
|
+
`,s=`${e}.${process.pid}.tmp`;ue.writeFileSync(s,n,{mode:384});try{ue.chmodSync(s,384)}catch{}ue.renameSync(s,e);try{ue.chmodSync(e,384)}catch{}}function _t(){return ue.existsSync(z())}function Bs(r){return r?r.length<=8?"****":`${r.slice(0,4)}...${r.slice(-4)}`:"(\u672A\u8BBE\u7F6E)"}function Gs(r){let e={};for(let[n,s]of Object.entries(r.providers))e[n]={...s,apiKey:Bs(s.apiKey)};return{version:r.version,provider:r.provider,model:r.model,models:W(r).map(n=>({id:n.id,...n.contextWindow?{contextWindow:n.contextWindow}:{},...n.vision===void 0?{}:{vision:n.vision},...n.baseUrl?{baseUrl:n.baseUrl}:{},...n.apiKey?{apiKey:Bs(n.apiKey)}:{}})),intent:{enabled:r.intent?.enabled===!0,...r.intent?.prompt?{prompt:r.intent.prompt}:{}},temperature:r.temperature,maxToolRounds:r.maxToolRounds,autoApprove:r.autoApprove,memoryMaxChars:r.memoryMaxChars??q.memoryMaxChars,maxParallelAgents:r.maxParallelAgents??q.maxParallelAgents,systemPromptExtra:r.systemPromptExtra??"",providers:e}}function Ee(r,e){return`${r}/${e}`}function W(r){if(r.models&&r.models.length>0)return r.models.map(s=>({...s}));let e=r.provider,n=r.providers[e]?.model||r.model;return e&&n?[{id:Ee(e,n),provider:e,model:n}]:[]}function _e(r){let e=W(r);if(e.length===0)return null;let n=r.provider&&r.model?Ee(r.provider,r.model):"";return e.find(s=>s.id===n)??e[0]}function Js(r,e,n=[]){let s=W(r);if(s.length===0)return null;let i=new Set(n);i.add(e);let o=s.findIndex(a=>a.id===e);for(let a=1;a<=s.length;a++){let l=s[(o+a+s.length)%s.length];if(!i.has(l.id))return l}return null}function sr(r,e){r.provider=e.provider,r.model=e.model,r.providers={...r.providers,[e.provider]:{...r.providers[e.provider]??{},model:e.model}}}function at(r){return(!r.models||r.models.length===0)&&(r.models=W(r)),r.models}function rr(r){return typeof r=="number"&&Number.isFinite(r)&&r>0}function Hs(r,e){let n=at(r),s=Ee(e.provider,e.model),i=n.find(a=>a.id===s);if(i)return e.apiKey&&(i.apiKey=e.apiKey),e.baseUrl&&(i.baseUrl=e.baseUrl),rr(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}:{},...rr(e.contextWindow)?{contextWindow:Math.floor(e.contextWindow)}:{},...typeof e.vision=="boolean"?{vision:e.vision}:{}};return n.push(o),o}function cl(r,e){let n=r.findIndex(o=>o.id===e);if(n>=0)return n;let s=r.findIndex(o=>o.model===e);if(s>=0)return s;let i=Number.parseInt(e,10);return!Number.isNaN(i)&&i>=1&&i<=r.length?i-1:-1}function Ks(r,e){let n=at(r),s=cl(n,e);if(s<0)return null;let[i]=n.splice(s,1),o=r.provider&&r.model?Ee(r.provider,r.model):"";if(i&&i.id===o){let a=n[0];r.provider=a?a.provider:"",r.model=a?a.model:""}return i??null}var ei=v(require("@anthropic-ai/sdk"));var Ws=v(require("http")),Xs=v(require("https")),ul=12e4;function Rt(){let r=Number(process.env.XZH_LLM_TIMEOUT_MS);return Number.isFinite(r)&&r>=5e3?r:ul}function Vs(r){let e=!/^http:\/\//i.test(r),n={keepAlive:!1,timeout:Rt()};return e?new Xs.Agent(n):new Ws.Agent(n)}async function*Xt(r,e){let n=r[Symbol.asyncIterator]();try{for(;;){let s,i=new Promise(o=>{s=setTimeout(()=>o("timeout"),e),s.unref?.()});try{let o=await Promise.race([n.next(),i]);if(o==="timeout")throw new Error(`LLM request timeout\uFF1A${Math.round(e/1e3)}s \u5185\u6CA1\u6709\u6536\u5230\u4EFB\u4F55\u6570\u636E\uFF08\u8FDE\u63A5\u53EF\u80FD\u5361\u6B7B\uFF09`);if(o.done)return;yield o.value}finally{s&&clearTimeout(s)}}}finally{try{n.return?.(void 0)?.catch?.(()=>{})}catch{}}}var qs=new Set(["ECONNRESET","ECONNREFUSED","ECONNABORTED","ETIMEDOUT","EPIPE","ENOTFOUND","EAI_AGAIN","UND_ERR_SOCKET","UND_ERR_CONNECT_TIMEOUT","ERR_STREAM_PREMATURE_CLOSE"]),dl=["premature close","socket hang up","other side closed","fetch failed","network error","connection error","connection reset","terminated","timeout","timed out"];function pl(r){return r&&r.replace(/\b(Bearer|Basic|Token)\s+[A-Za-z0-9._~+/=-]{6,}/gi,"$1 ***").replace(/\b(sk|pk|rk|api|key|token)[-_][A-Za-z0-9._-]{6,}/gi,"$1-***").replace(/([?&](?:api[-_]?key|key|token|access_token|authorization)=)[^&\s"']+/gi,"$1***").replace(/("(?:api[-_]?key|apikey|token|secret|password|authorization)"\s*:\s*")[^"]*/gi,"$1***")}function F(r){return typeof r=="string"?r:typeof r=="number"||typeof r=="boolean"?String(r):""}function lt(r){if(typeof r=="number"&&Number.isFinite(r))return r;if(typeof r=="string"){let e=Number.parseInt(r,10);if(!Number.isNaN(e))return e}}function hl(r){let e=r,n=F(e?.message);if(n)return n;let s=e?.error,i=F(s?.message);if(i)return i;let o=e?.cause,a=F(o?.message);if(a)return a;if(r instanceof Error&&r.message)return r.message;try{let c=JSON.stringify(r);if(c&&c!=="{}")return c}catch{}let l=String(r);return l==="[object Object]"?"\u672A\u77E5\u9519\u8BEF\uFF08\u65E0\u6CD5\u89E3\u6790\u9519\u8BEF\u8BE6\u60C5\uFF09":l}function Pt(r){let e=r,n=lt(e?.status);if(n!==void 0){if(n===408||n===409||n===429||n>=500&&n<=599)return!0;if(n>=400&&n<500)return!1}let s=F(e?.code).toUpperCase();if(s&&qs.has(s))return!0;let i=e?.cause,o=F(i?.code).toUpperCase();if(o&&qs.has(o))return!0;let a=(F(e?.message)||F(i?.message)||String(r)).toLowerCase();return dl.some(l=>a.includes(l))}function ne(r){return pl(ml(r))}function Vt(r){let e=r,n=lt(e?.status);if(n===401||n===403||n===404)return!0;let s=(F(e?.message)||F(e?.error?.message)||F(e?.cause?.message)||String(r)).toLowerCase();return["invalid api key","incorrect api key","api key not valid","authentication","unauthorized","\u672A\u77E5 provider","unknown provider","model not found","unknown model","no such model","invalid base url","\u7F3A\u5C11 api key"].some(i=>s.includes(i))}function ir(r){return lt(r?.status)===404}function Yt(r){let e=r,n=lt(e?.status);if(n!==void 0&&(n<400||n>=500))return!1;let s=F(e?.code)||F(e?.error?.code);if(/context[_ ]?length|context[_ ]?size|max[_ ]?tokens?_exceeded|token[_ ]?limit/i.test(s))return!0;let i=(F(e?.message)||F(e?.error?.message)||F(e?.cause?.message)||String(r)).toLowerCase();return["context length","context_length","maximum context","context window","prompt is too long","exceed context limit","exceeds the maximum number of tokens","reduce the length","too many tokens","context size","context_size","exceeds the available context","input length exceeds","exceeds the context","n_ctx","n_keep","too long"].some(o=>i.includes(o))}function Zt(r){let e=r,n=lt(e?.status);if(n!==void 0&&(n<400||n>=500))return!1;let s=(F(e?.message)||F(e?.error?.message)||F(e?.cause?.message)||String(r)).toLowerCase();if(["does not support image","doesn't support image","not support image","unsupported image","image input is not supported","images are not supported","vision is not supported","does not support vision","not a multimodal","not support multimodal","unsupported content type","invalid content type","image_url is only supported","only supported by certain models","\u4E0D\u652F\u6301\u56FE\u7247","\u4E0D\u652F\u6301\u56FE\u50CF","\u4E0D\u652F\u6301\u591A\u6A21\u6001","\u4E0D\u652F\u6301\u89C6\u89C9"].some(l=>s.includes(l)))return!0;let o=/image|vision|multimodal|图片|图像|视觉/.test(s),a=/not support|unsupported|only supported|不支持|无法处理/.test(s);return o&&a}function ml(r){let e=r,n=hl(r),s=n.toLowerCase(),i=F(e?.code).toUpperCase(),o=lt(e?.status);if(Yt(r))return"\u4E0A\u4E0B\u6587\u8D85\u51FA\u6A21\u578B\u7A97\u53E3\uFF1A\u672C\u6B21\u8BF7\u6C42\u7684\u5185\u5BB9\u6BD4\u6A21\u578B\u80FD\u63A5\u53D7\u7684\u957F\u5EA6\u66F4\u957F\u3002\n\u7384\u732A\u5DF2\u81EA\u52A8\u6536\u655B\u5386\u53F2\u540E\u91CD\u8BD5\uFF1B\u82E5\u4ECD\u5931\u8D25\uFF0C\u53EF\u51CF\u5C11\u4E00\u6B21\u6027\u8BFB\u53D6\u7684\u5185\u5BB9\u91CF\uFF0C\u6216\u7528 `xzh model context <id> <\u5927\u5C0F>` \u8C03\u5927\u8BE5\u6A21\u578B\u7684\u4E0A\u4E0B\u6587\u7A97\u53E3\u3002";if(s.includes("premature close"))return`\u8FDE\u63A5\u88AB\u63D0\u524D\u5173\u95ED\uFF08Premature close\uFF09\uFF1A\u7F51\u7EDC\u6216\u4EE3\u7406\u4E2D\u65AD\u4E86\u54CD\u5E94\u6D41\u3002
|
|
48
48
|
\u7384\u732A\u5DF2\u81EA\u52A8\u91CD\u8BD5\uFF1B\u82E5\u4ECD\u9891\u7E41\u51FA\u73B0\uFF0C\u901A\u5E38\u662F\u4EE3\u7406/\u7F51\u7EDC\u4E0D\u7A33\u5B9A\u5BFC\u81F4\uFF0C\u53EF\u68C0\u67E5\u4EE3\u7406\u6216\u7A0D\u540E\u518D\u8BD5\u3002`;if(i==="ECONNRESET"||s.includes("socket hang up"))return"\u8FDE\u63A5\u88AB\u5BF9\u7AEF\u91CD\u7F6E\uFF08ECONNRESET\uFF09\uFF1A\u7F51\u7EDC\u6216\u4EE3\u7406\u4E2D\u65AD\u4E86\u8FDE\u63A5\uFF0C\u8BF7\u91CD\u8BD5\u3002";if(i==="ETIMEDOUT"||s.includes("timed out"))return"\u8BF7\u6C42\u8D85\u65F6\uFF1A\u7F51\u7EDC\u8F83\u6162\u6216\u6A21\u578B\u670D\u52A1\u672A\u54CD\u5E94\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002";if(i==="ENOTFOUND"||i==="EAI_AGAIN")return"\u65E0\u6CD5\u89E3\u6790\u670D\u52A1\u5730\u5740\uFF1A\u8BF7\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5\u4E0E\u4EE3\u7406\u8BBE\u7F6E\uFF08DNS \u53EF\u80FD\u88AB\u62E6\u622A\uFF09\u3002";if(i==="ECONNREFUSED")return"\u8FDE\u63A5\u88AB\u62D2\u7EDD\uFF1A\u76EE\u6807\u5730\u5740\u6216\u7AEF\u53E3\u4E0D\u53EF\u8FBE\uFF0C\u8BF7\u68C0\u67E5 baseUrl \u4E0E\u4EE3\u7406\u8BBE\u7F6E\u3002";if(o===401||s.includes("unauthorized")||s.includes("invalid api key")||s.includes("authentication"))return"\u8BA4\u8BC1\u5931\u8D25\uFF1AAPI Key \u65E0\u6548\u6216\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u8FD0\u884C `xzh model` \u91CD\u65B0\u914D\u7F6E\u3002";if(o===403)return"\u8BBF\u95EE\u88AB\u62D2\u7EDD\uFF08403\uFF09\uFF1A\u8BF7\u68C0\u67E5 API Key \u6743\u9650\u6216\u670D\u52A1\u5546\u533A\u57DF\u9650\u5236\u3002";if(o===402||s.includes("insufficient")||s.includes("balance"))return"\u8D26\u6237\u989D\u5EA6\u4E0D\u8DB3\uFF1A\u8BF7\u68C0\u67E5\u670D\u52A1\u5546\u4F59\u989D\u6216\u914D\u989D\u3002";if(o===429||s.includes("rate limit"))return"\u8BF7\u6C42\u8FC7\u4E8E\u9891\u7E41\uFF08\u9650\u6D41\uFF09\uFF1A\u8BF7\u7A0D\u540E\u518D\u8BD5\u3002";if(/out\s*of\s*(device\s*)?memory|outofdevicememory|outofmemory|vk::|cuda.*error|hip.*error|cannot allocate|insufficient memory/i.test(n))return`${n}
|
|
49
49
|
\u4EE5\u4E0A\u662F\u6A21\u578B\u670D\u52A1\u7AEF\uFF08llama.cpp / LM Studio \u7B49\uFF09\u62A5\u51FA\u7684\u8D44\u6E90\u9519\u8BEF\uFF1A\u663E\u5B58\u6216\u5185\u5B58\u4E0D\u8DB3\uFF0C\u4E0E\u7384\u732A\u65E0\u5173\u3002
|
|
50
50
|
\u53EF\u5C1D\u8BD5\uFF1A\u51CF\u5C0F\u4E0A\u4E0B\u6587\u957F\u5EA6\uFF08llama.cpp \u7684 -c\uFF0C\u4F8B\u5982 -c 8192\uFF09\u3001\u964D\u4F4E KV cache \u7CBE\u5EA6
|
|
51
51
|
\uFF08--cache-type-k q8_0 --cache-type-v q8_0\uFF09\u3001\u51CF\u5C11 GPU \u5378\u8F7D\u5C42\u6570\uFF08-ngl\uFF09\u3001
|
|
52
52
|
\u6362\u66F4\u5C0F\u7684\u6A21\u578B / \u91CF\u5316\uFF0C\u6216\u5148\u91CA\u653E\u88AB\u5176\u4ED6\u8FDB\u7A0B\u5360\u7528\u7684\u663E\u5B58\u3002
|
|
53
|
-
\u4FEE\u597D\u670D\u52A1\u7AEF\u540E\u91CD\u8BD5\u5373\u53EF\uFF1B\u82E5\u672C\u8F6E\u5DF2\u6CBF\u6A21\u578B\u5217\u8868\u56DE\u9000\u5230\u522B\u7684\u6A21\u578B\uFF0C\u4E0B\u6B21\u542F\u52A8\u4F1A\u63A5\u7740\u7528\u5B83\u3002`;if(typeof o=="number"&&o>=500)return`\u6A21\u578B\u670D\u52A1\u7AEF\u9519\u8BEF\uFF08HTTP ${o}\uFF09\uFF1A\u670D\u52A1\u6682\u65F6\u4E0D\u53EF\u7528\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002`;if(
|
|
53
|
+
\u4FEE\u597D\u670D\u52A1\u7AEF\u540E\u91CD\u8BD5\u5373\u53EF\uFF1B\u82E5\u672C\u8F6E\u5DF2\u6CBF\u6A21\u578B\u5217\u8868\u56DE\u9000\u5230\u522B\u7684\u6A21\u578B\uFF0C\u4E0B\u6B21\u542F\u52A8\u4F1A\u63A5\u7740\u7528\u5B83\u3002`;if(typeof o=="number"&&o>=500)return`\u6A21\u578B\u670D\u52A1\u7AEF\u9519\u8BEF\uFF08HTTP ${o}\uFF09\uFF1A\u670D\u52A1\u6682\u65F6\u4E0D\u53EF\u7528\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002`;if(Zt(r))return`${n}
|
|
54
54
|
\u8BE5\u6A21\u578B\u4E0D\u652F\u6301\u56FE\u7247\u8F93\u5165\uFF08\u7384\u732A\u5DF2\u81EA\u52A8\u53BB\u6389\u56FE\u7247\u91CD\u8BD5\u4E00\u6B21\uFF0C\u672C\u8F6E\u6B63\u6587\u4E0D\u53D7\u5F71\u54CD\uFF09\u3002
|
|
55
55
|
\xB7 \u60F3\u5F7B\u5E95\u907F\u514D\u8FD9\u6B21\u767D\u8BD5\uFF1A\`xzh model vision <id> off\`
|
|
56
|
-
\xB7 \u6216\u6539\u7528 glm-4v / qwen-vl / gpt-4o / claude / gemini \u7B49\u652F\u6301\u89C6\u89C9\u7684\u6A21\u578B`;if(o===400){let a=n.replace(/^4\d\d\s*/,""),l=/model/i.test(a)?"\n\u63D0\u793A\uFF1A\u591A\u534A\u662F\u6A21\u578B\u540D\u4E0D\u88AB\u8BE5\u7AEF\u70B9\u652F\u6301\u3002\u53EF\u7528 `curl <baseUrl>/models` \u67E5\u770B\u7AEF\u70B9\u652F\u6301\u7684\u6A21\u578B id\uFF0C\u518D\u7528 `xzh model remove <id>` + `xzh model add <provider> <model>` \u66F4\u6B63\u6A21\u578B\u540D\u3002":"";return`\u8BF7\u6C42\u88AB\u62D2\u7EDD\uFF08HTTP 400\uFF09\uFF1A${a}${l}`}return s.includes("fetch failed")||s.includes("network")?`\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25\uFF1A${n}`:n}function
|
|
56
|
+
\xB7 \u6216\u6539\u7528 glm-4v / qwen-vl / gpt-4o / claude / gemini \u7B49\u652F\u6301\u89C6\u89C9\u7684\u6A21\u578B`;if(o===400){let a=n.replace(/^4\d\d\s*/,""),l=/model/i.test(a)?"\n\u63D0\u793A\uFF1A\u591A\u534A\u662F\u6A21\u578B\u540D\u4E0D\u88AB\u8BE5\u7AEF\u70B9\u652F\u6301\u3002\u53EF\u7528 `curl <baseUrl>/models` \u67E5\u770B\u7AEF\u70B9\u652F\u6301\u7684\u6A21\u578B id\uFF0C\u518D\u7528 `xzh model remove <id>` + `xzh model add <provider> <model>` \u66F4\u6B63\u6A21\u578B\u540D\u3002":"";return`\u8BF7\u6C42\u88AB\u62D2\u7EDD\uFF08HTTP 400\uFF09\uFF1A${a}${l}`}return s.includes("fetch failed")||s.includes("network")?`\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25\uFF1A${n}`:n}function Ys(r){return new Promise(e=>setTimeout(e,r))}var fl=3,gl=r=>r*600,Mt=class extends Error{constructor(){super("\u7EED\u4F20\u524D\u7F00\u4E0E\u5DF2\u8F93\u51FA\u5185\u5BB9\u4E0D\u4E00\u81F4"),this.name="ResumeMismatchError"}},or=class{text="";reasoning="";toolCalls=0;get hasDeliveredContent(){return this.text.length>0||this.reasoning.length>0}},ar=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 n=this.collected.slice(this.previous.length);return this.collected="",n.length>0?n:null}finish(){if(!this.settled)throw new Mt}},lr=class{constructor(e){this.ledger=e;this.textPrefix=new ar(e.text),this.suppressReasoning=e.reasoning.length>0,this.remainingToolCallSkips=e.toolCalls}textPrefix;suppressReasoning;remainingToolCallSkips;text(e){let n=this.textPrefix.accept(e);return n&&(this.ledger.text+=n),n}reasoning(e){return this.suppressReasoning?null:(this.ledger.reasoning+=e,e)}toolCall(){return this.remainingToolCallSkips>0?(this.remainingToolCallSkips--,!1):(this.ledger.toolCalls++,!0)}finish(){this.textPrefix.finish()}};async function*ct(r,e,n={}){let s=n.maxAttempts??fl,i=n.backoffMs??gl,o=new or,a;for(let l=1;l<=s;l++){let c=new lr(o);try{yield*e(c),c.finish();return}catch(u){if(u instanceof Mt)throw a??u;if(a=u,!(!r.signal?.aborted&&l<s&&o.toolCalls===0&&Pt(u)))throw u;let d=o.hasDeliveredContent;r.onRetry?.(l,s,u instanceof Error?u:new Error(String(u)),{resumed:d}),await Ys(i(l))}}throw a}var $l=[/^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],yl=[/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 cr(r){let e=r.trim();if(!e)return!1;for(let n of $l)if(n.test(e))return!1;for(let n of yl)if(n.test(e))return!0;return!1}var vl="custom";function Xe(r){return typeof r.vision=="boolean"?r.vision:r.provider===vl?!0:cr(r.model)}var bl=new Set(["image/png","image/jpeg","image/gif","image/webp"]);function Zs(r){let e=r.trim().toLowerCase();return bl.has(e)?e:"image/png"}var Ne="\u8BF7\u770B\u8FD9\u5F20\u56FE\u7247\u3002";var Qt=class{id;model;client;maxTokens;constructor(e){this.id=e.id,this.model=e.model,this.maxTokens=e.maxTokens??8192,this.client=new ei.default({apiKey:e.apiKey,baseURL:e.baseUrl,maxRetries:0})}async*chat(e){yield*ct(e,n=>Xt(this.streamOnce(e,n),Rt()))}async*streamOnce(e,n){let{system:s,messages:i}=Sl(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=n.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 y=n.reasoning(m);y&&(yield{type:"reasoning",text:y})}}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&&n.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 Sl(r){let e=[],n=[];for(let s of r){if(s.role==="system"){e.push(s.content);continue}if(s.role==="user"){if(s.images&&s.images.length>0){let i=[{type:"text",text:s.content||Ne}];for(let o of s.images)i.push({type:"image",source:{type:"base64",media_type:Zs(o.mimeType),data:o.data}});n.push({role:"user",content:i});continue}n.push({role:"user",content:s.content});continue}if(s.role==="assistant"){if(s.toolCalls&&s.toolCalls.length>0){let i=[];s.content&&i.push({type:"text",text:s.content});for(let o of s.toolCalls)i.push({type:"tool_use",id:o.id,name:o.name,input:wl(o.arguments)});n.push({role:"assistant",content:i})}else n.push({role:"assistant",content:s.content});continue}if(s.role==="tool"){let i={type:"tool_result",tool_use_id:s.toolCallId??"",content:s.content},o=n[n.length-1];o&&o.role==="user"&&Array.isArray(o.content)&&o.content.every(a=>a.type==="tool_result")?o.content.push(i):n.push({role:"user",content:[i]})}}return{system:e.join(`
|
|
57
57
|
|
|
58
|
-
`),messages:
|
|
58
|
+
`),messages:xl(n)}}function Qs(r){return typeof r=="string"?[{type:"text",text:r}]:r}function xl(r){let e=[];for(let n of r){let s=e[e.length-1];if(s&&s.role===n.role){n.role==="user"?e[e.length-1]={role:"user",content:[...Qs(s.content),...Qs(n.content)]}:e[e.length-1]=n;continue}e.push(n)}for(;e.length>0&&e[0].role!=="user";)e.shift();return e}function wl(r){try{let e=JSON.parse(r||"{}");return typeof e=="object"&&e!==null?e:{}}catch{return{}}}var Re=require("@google/generative-ai");var en=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*ct(e,n=>this.streamOnce(e,n))}async*streamOnce(e,n){let s=new Re.GoogleGenerativeAI(this.apiKey),{system:i,contents:o}=kl(e.messages),a=e.tools.length>0?[{functionDeclarations:e.tools.map(El)}]: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=Tl(p);if(m){let f=n.text(m);f&&(yield{type:"text",text:f})}let y=Cl(p);for(let f of y)h=!0,n.toolCall()&&(yield{type:"tool_call",toolCall:{id:`gemini_call_${Date.now()}_${d++}`,name:f.name,arguments:JSON.stringify(f.args??{})}});let g=p.usageMetadata;g&&(u={inputTokens:g.promptTokenCount,outputTokens:g.candidatesTokenCount})}yield{type:"done",finishReason:h?"tool_calls":"stop",usage:u}}};function Tl(r){try{return r.text()??""}catch{return""}}function Cl(r){try{return r.functionCalls?.()??[]}catch{return[]}}function kl(r){let e=[],n=[];for(let s of r){if(s.role==="system"){e.push(s.content);continue}if(s.role==="user"){if(s.images&&s.images.length>0){let i=[{text:s.content||Ne}];for(let o of s.images)i.push({inlineData:{mimeType:o.mimeType,data:o.data}});n.push({role:"user",parts:i});continue}n.push({role:"user",parts:[{text:s.content}]});continue}if(s.role==="assistant"){let i=[];s.content&&i.push({text:s.content});for(let o of s.toolCalls??[])i.push({functionCall:{name:o.name,args:Rl(o.arguments)}});i.length>0&&n.push({role:"model",parts:i});continue}if(s.role==="tool"){let i={functionResponse:{name:s.name??"unknown",response:{result:s.content}}},o=n[n.length-1];o&&o.role==="user"&&o.parts?.some(a=>"functionResponse"in a)?o.parts.push(i):n.push({role:"user",parts:[i]})}}return{system:e.join(`
|
|
59
59
|
|
|
60
|
-
`),contents:
|
|
60
|
+
`),contents:Al(n)}}function Al(r){let e=[];for(let n of r){let s=e[e.length-1];if(s&&s.role===n.role){s.parts=[...s.parts??[],...n.parts??[]];continue}e.push({role:n.role,parts:[...n.parts??[]]})}for(;e.length>0&&e[0].role!=="user";)e.shift();return e}function El(r){return{name:r.name,description:r.description,parameters:ur(r.parameters)}}function ur(r){let e={type:_l(r.type)};if(r.description&&(e.description=r.description),r.enum&&(e.enum=r.enum),r.required&&(e.required=r.required),r.items&&(e.items=ur(r.items)),r.properties){let n={};for(let[s,i]of Object.entries(r.properties))n[s]=ur(i);e.properties=n}return e}function _l(r){switch(r.toLowerCase()){case"string":return Re.SchemaType.STRING;case"number":return Re.SchemaType.NUMBER;case"integer":return Re.SchemaType.INTEGER;case"boolean":return Re.SchemaType.BOOLEAN;case"array":return Re.SchemaType.ARRAY;default:return Re.SchemaType.OBJECT}}function Rl(r){try{let e=JSON.parse(r||"{}");return typeof e=="object"&&e!==null?e:{}}catch{return{}}}var ti=v(require("openai"));var tn=class{id;model;client;constructor(e){this.id=e.id,this.model=e.model;let n=e.baseUrl||"https://api.openai.com/v1";this.client=new ti.default({apiKey:e.apiKey||"not-needed",baseURL:e.baseUrl,httpAgent:Vs(n),maxRetries:0})}async*chat(e){yield*ct(e,n=>Xt(this.streamOnce(e,n),Rt()))}async*streamOnce(e,n){let s=e.messages.map(Pl),i=e.tools.length>0?e.tools.map(Ml):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 f=n.text(m);f&&(yield{type:"text",text:f})}let y=p.reasoning_content;if(typeof y=="string"&&y.length>0){let f=n.reasoning(y);f&&(yield{type:"reasoning",text:f})}let g=p.tool_calls;if(g){u=!0;for(let f of g){let b=f.index??0,$=a.get(b)??{id:"",name:"",args:""};f.id&&($.id=f.id),f.function?.name&&($.name+=f.function.name),f.function?.arguments&&($.args+=f.function.arguments),a.set(b,$)}}}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||"{}"};n.toolCall()&&(yield{type:"tool_call",toolCall:p})}yield{type:"done",finishReason:u?"tool_calls":l,usage:c}}};function Pl(r){switch(r.role){case"system":return{role:"system",content:r.content};case"user":{if(r.images&&r.images.length>0){let e=[{type:"text",text:r.content||Ne}];for(let n of r.images)e.push({type:"image_url",image_url:{url:`data:${n.mimeType};base64,${n.data}`}});return{role:"user",content:e}}return{role:"user",content:r.content}}case"assistant":return r.toolCalls&&r.toolCalls.length>0?{role:"assistant",content:r.content||null,tool_calls:r.toolCalls.map(e=>({id:e.id,type:"function",function:{name:e.name,arguments:e.arguments}}))}:{role:"assistant",content:r.content};case"tool":return{role:"tool",content:r.content,tool_call_id:r.toolCallId??""};default:return{role:"user",content:r.content}}}function Ml(r){return{type:"function",function:{name:r.name,description:r.description,parameters:r.parameters}}}function je(r){if(!r)return 0;let e=0,n=0;for(let s of r)s.codePointAt(0)<128?e++:n++;return Math.ceil(e/3.5)+n}var ni=1600;function ut(r){let e=4+je(r.content??"");if(r.toolCalls)for(let n of r.toolCalls)e+=10+je(n.name)+je(n.arguments);return r.images&&r.images.length>0&&(e+=r.images.length*ni),e}function pr(r,e=0){if(r.length===0)return r;let n=Math.max(0,Math.min(e,r.length)),s=-1;for(let i=r.length-1;i>=n;i--)if(r[i]?.images?.length){s=i;break}return r.map((i,o)=>{if(o===s)return i;let a=i.images;if(!a||a.length===0)return i;let c=`
|
|
61
61
|
|
|
62
|
-
[\u56FE\u7247\u5DF2\u7701\u7565\uFF1A${[...new Set(a.map(u=>u.mimeType))].join("\u3001")}${a.length>1?`\uFF0C\u5171 ${a.length} \u5F20`:""}]`;return{...i,content:`${i.content}${c}`,images:void 0}})}function
|
|
62
|
+
[\u56FE\u7247\u5DF2\u7701\u7565\uFF1A${[...new Set(a.map(u=>u.mimeType))].join("\u3001")}${a.length>1?`\uFF0C\u5171 ${a.length} \u5F20`:""}]`;return{...i,content:`${i.content}${c}`,images:void 0}})}function hr(r,e){if(e<=0)return"";let n=0,s=0,i=0;for(let o of r){let a=o.codePointAt(0)<128,l=n+(a?1:0),c=s+(a?0:1);if(Math.ceil(l/3.5)+c>e)break;n=l,s=c,i+=o.length}return r.slice(0,i)}function Il(r,e){let n=s=>{let i=s?30:50,o=s?r:{...r,images:void 0},a=ut({...o,content:""});if(a+i>=e)return null;let l=r.content??"",c=e-a-i;if(je(l)<=c)return s?r:{...o,content:`${l}
|
|
63
63
|
|
|
64
|
-
[\u56FE\u7247\u5DF2\u7701\u7565\uFF1A\u56E0\u8D85\u51FA\u4E0A\u4E0B\u6587\u9884\u7B97]`};let u=
|
|
64
|
+
[\u56FE\u7247\u5DF2\u7701\u7565\uFF1A\u56E0\u8D85\u51FA\u4E0A\u4E0B\u6587\u9884\u7B97]`};let u=hr(l,c),h=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 n(!0)??n(!1)}function
|
|
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 n(!0)??n(!1)}function ri(r){if(r.length<=6)return r;let e=r.length-6;return r.map((n,s)=>{if(s>=e||n.role!=="tool")return n;let i=n.content??"";if(je(i)<=600)return n;let o=Math.floor(600*.6),a=600-o,l=hr(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}
|
|
67
67
|
|
|
68
68
|
\u2026\uFF08\u6B64\u5904\u7701\u7565 ${h} \u5B57\u7B26\u7684\u4E2D\u95F4\u5185\u5BB9\uFF09
|
|
69
69
|
|
|
70
|
-
${u}`;return h<=0||d.length>=i.length?n:{...n,content:d}})}function
|
|
70
|
+
${u}`;return h<=0||d.length>=i.length?n:{...n,content:d}})}function mr(r){return r.map(e=>{let n=e.images;if(!n||n.length===0)return e;let s=[...new Set(n.map(i=>i.mimeType))].join("\u3001");return{...e,content:`${e.content}
|
|
71
71
|
|
|
72
|
-
[\u56FE\u7247\u5DF2\u7701\u7565\uFF1A${s}\uFF08\u5F53\u524D\u6A21\u578B\u4E0D\u652F\u6301\u56FE\u7247\u8F93\u5165\uFF09]`,images:void 0}})}function en(r){let e=0;for(;e<r.length;){let n=r[e].role;if(n!=="assistant"&&n!=="tool")break;e++}return e===0?r:r.slice(e)}function tn(r,e){let n=ti(r),s=n.length,i=0;for(let a=n.length-1;a>=0;a--){let l=ut(n[a]);if(s<n.length&&i+l>e)break;i+=l,s=a}let o=en(n.slice(s));if(o.length===0){for(let a=r.length-1;a>=0;a--)if(r[a].role==="user"){o=[r[a]];break}}if(o.length===1&&ut(o[0])>e){let l=Rl(o[0],e);if(l===null)return[];o[0]=l}return o}function hr(r,e,n){let s=ni(r,e),i=je(n)+4,o=s-i;return Math.max(1,Math.min(Math.max(o,1e3),s))}function ni(r,e){let n=r&&r>0?r:Ve(e);return Math.floor(n*.8)}function mr(r,e,n){let s=ni(r,e);return je(n)+4>=s*.5}var cr={"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},Pl=[[/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 Ve(r){let e=r.trim();if(!e)return 32e3;let n=e.toLowerCase(),s=cr[n];if(s)return s;let i=n.replace(/[-_]?(latest|preview|stable|beta|exp)$/,"").replace(/[-_]\d{6,8}$/,"").replace(/[:@].*$/,""),o=cr[i]??Object.entries(cr).find(([a])=>i.startsWith(a)||i===a)?.[1];if(o)return o;for(let[a,l]of Pl)if(a.test(i))return l;return 32e3}function Re(r){return!Number.isFinite(r)||r<=0?"\u672A\u8BBE\u7F6E":String(Math.floor(r))}var nn=class{ratio=1;samples=0;observe(e,n){if(!Number.isFinite(e)||!Number.isFinite(n)||e<=0||n<=0)return;let s=n/e;s<.1||s>8||(this.ratio=this.samples===0?s:this.ratio*(1-.3)+s*.3,this.samples++)}factor(){return this.samples<2?1:Math.min(Math.max(this.ratio,1),4)}get observationCount(){return this.samples}reset(){this.ratio=1,this.samples=0}};function fr(r,e){return e>1?Math.max(1,Math.floor(r/e)):r}var ri=new Map;function gr(r){let e=r||"",n=ri.get(e);if(n)return n;let s=new nn;return ri.set(e,s),s}var Pe=[{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 Me(r){return Pe.find(e=>e.id===r)}function rn(r,e){return e||(r.envKey?process.env[r.envKey]??"":"")}function ii(r,e){return e||r.defaultBaseUrl}function $r(r,e){let n=[],s=Me(e.provider);if(!s)return[`\u6A21\u578B ${e.id} \u4F7F\u7528\u4E86\u672A\u77E5 provider\uFF1A${e.provider}`];let i=r.providers[e.provider]??{};return s.requiresApiKey&&!rn(s,e.apiKey??i.apiKey)&&n.push(`\u6A21\u578B ${e.id} \u7F3A\u5C11 API Key\uFF0C\u8BF7\u8FD0\u884C \`xzh model\` \u6216\u8BBE\u7F6E\u73AF\u5883\u53D8\u91CF ${s.envKey}`),s.requiresBaseUrl&&!ii(s,e.baseUrl??i.baseUrl)&&n.push(`\u6A21\u578B ${e.id} \u9700\u8981\u914D\u7F6E baseUrl`),e.model||n.push(`\u6A21\u578B ${e.id} \u672A\u6307\u5B9A\u6A21\u578B\u540D`),n}function oi(r){let e=K(r);return e.length===0?["\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\uFF0C\u8BF7\u8FD0\u884C `xzh model add` \u6DFB\u52A0"]:e.flatMap(n=>$r(r,n))}function Mt(r,e){let n=e?.provider??r.provider,s=Me(n);if(!s)throw new Error(`\u672A\u77E5\u7684 provider\uFF1A${n}`);let i=r.providers[n]??{},o=rn(s,e?.apiKey??i.apiKey),a=ii(s,e?.baseUrl??i.baseUrl),l=e?.model||i.model||r.model||s.defaultModel;if(s.requiresBaseUrl&&!a)throw new Error(`provider "${s.label}" \u9700\u8981\u914D\u7F6E API \u7AEF\u70B9 baseUrl\u3002\u8FD0\u884C \`xzh model\` \u8865\u9F50\u540E\u518D\u8BD5\u3002`);if(s.requiresApiKey&&!o)throw new Error(`provider "${s.label}" \u7F3A\u5C11 API Key\u3002\u8FD0\u884C \`xzh model\` \u8FDB\u884C\u914D\u7F6E\uFF0C\u6216\u8BBE\u7F6E\u73AF\u5883\u53D8\u91CF ${s.envKey}\u3002`);if(!l)throw new Error(`provider "${s.label}" \u672A\u6307\u5B9A\u6A21\u578B\u3002\u8FD0\u884C \`xzh model\` \u9009\u62E9\u6A21\u578B\u3002`);switch(s.kind){case"anthropic":return new Yt({id:s.id,apiKey:o,baseUrl:a,model:l});case"gemini":return new Zt({id:s.id,apiKey:o,baseUrl:a,model:l});case"openai":default:return new Qt({id:s.id,apiKey:o,baseUrl:a,model:l})}}var gt=v(require("fs")),Ei=v(require("os")),Or=v(require("path"));var j="0.6.1";var Fe=9317,yr=1e4,vr=process.env.XZH_DEVICE_PLUGIN_VERSION?.trim()||"1.110.0",ai=j;function br(){return`${Date.now()}_${Math.random()}`}function li(r){let e=br();return r>=629?JSON.stringify({message_id:e,data:"ok",version:vr,debug:!1,type:"hello"}):JSON.stringify({message_id:e,data:"\u8FDE\u63A5\u6210\u529F",debug:!1,type:"hello"})}function ci(r){return JSON.stringify({type:"pong",data:r})}function ui(r,e,n){return JSON.stringify({type:"command",message_id:br(),data:{command:r,id:e,name:e,script:n}})}function xr(r,e={}){return JSON.stringify({type:"command",message_id:br(),data:{command:r,...e}})}function di(r){try{let e=JSON.parse(r);if(!e||typeof e!="object")return null;let n=typeof e.type=="string"?e.type:"";return n?{type:n,data:e.data}:null}catch{return null}}function Sr(r){let e=r??{},n=typeof e.device_name=="string"&&e.device_name.trim()?e.device_name.trim():"",s=typeof e.app_version_code=="number"&&Number.isFinite(e.app_version_code)?e.app_version_code:0;return{name:n,appVersionCode:s}}function pi(r){if(typeof r=="string")return r;let e=r??{};return typeof e.log=="string"?e.log:""}var Ue=v(require("fs")),wi=v(require("http")),pt=v(require("os")),Ie=v(require("path")),Ot=require("ws");var vi=v(require("net"));var Cr=r=>r,sn=r=>Cr(r);function wr(r){return Buffer.from(Cr(r))}function mi(r){return Buffer.concat(r.map(Cr))}var dt=8,fi=1,Ml=2,hi=64*1024*1024;var Se=6347,te=7347,It=process.env.XZH_AUTOJS6_EXT_VERSION?.trim()||"1.0.13";function Il(r,e){let n=Buffer.alloc(dt);return n.writeInt32BE(r,0),n.writeInt32BE(e,4),n}function on(r){let e=Buffer.from(r,"utf8");return mi([Il(e.length,fi),e])}var Ye=class{buffer=Buffer.alloc(0);push(e){let n=wr(e);this.buffer=this.buffer.length===0?n:mi([this.buffer,n]);let s=[];for(;this.buffer.length>=dt;){let i=this.buffer.readInt32BE(0),o=this.buffer.readInt32BE(4);if(i<0||i>hi)throw new Error(`AutoJs6 \u5E27\u957F\u5EA6\u975E\u6CD5\uFF1A${i}\uFF08\u4E0A\u9650 ${hi}\uFF09\uFF0C\u8FDE\u63A5\u53EF\u80FD\u4E0D\u662F AutoJs6 \u534F\u8BAE`);if(this.buffer.length<dt+i)break;let a=wr(this.buffer.subarray(dt,dt+i));this.buffer=wr(this.buffer.subarray(dt+i)),o===fi?s.push({kind:"json",payload:a.toString("utf8")}):o===Ml&&s.push({kind:"bytes",payload:a})}return s}get pendingBytes(){return this.buffer.length}};function an(r){try{let e=JSON.parse(r);if(!e||typeof e!="object"||typeof e.type!="string"||!e.type)return null;let n=e.data&&typeof e.data=="object"?e.data:{};return{type:e.type,data:n}}catch{return null}}function gi(r=It){return JSON.stringify({type:"hello",data:{extensionVersion:r}})}function $i(r){let e=s=>typeof s=="string"?s:"",n=s=>typeof s=="number"&&Number.isFinite(s)?s:0;return{deviceName:e(r.device_name).trim(),appVersion:e(r.app_version).trim(),appVersionCode:n(r.app_version_code),deviceId:e(r.device_id).trim()}}function Be(r,e={}){return JSON.stringify({type:"command",data:{command:r,...e}})}function ln(r){if(r.type!=="log")return null;let e=r.data.log;return typeof e=="string"?e:null}function cn(r){let e=r.data["\xA0cmd\xA0"];return typeof e=="string"?e:null}var Dl=2e3,Tr=3,Ol=15e3,yi=5e3,un=class{host;port;options;socket=null;decoder=new Ye;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??te}getAddress(){return`${this.host}:${this.port}`}isConnected(){return this.connected}isRetrying(){return this.active}start(){this.active||(this.active=!0,this.attempt=0,this.quickFailures=0,this.connectOnce())}close(){this.active=!1,this.retryTimer&&(clearTimeout(this.retryTimer),this.retryTimer=null);let e=this.socket,n=this.connected;if(this.socket=null,this.connected=!1,this.connecting=!1,e){e.removeAllListeners();try{e.destroy()}catch{}}n&&this.options.onDisconnect?.()}runScript(e,n,s){return this.sendJson(Be("run",{id:n,name:s,script:e}))}saveScript(e,n){return this.sendJson(Be("save",{name:n,script:e}))}stopScript(e){return this.sendJson(Be("stop",{id:e}))}stopAllScripts(){return this.sendJson(Be("stopAll"))}sendJson(e){let n=this.socket;if(!this.connected||!n)return!1;try{return n.write(sn(on(e))),!0}catch{return!1}}connectOnce(){if(!this.active||this.socket||this.connecting)return;this.connecting=!0,this.decoder=new Ye;let e=new vi.Socket;this.socket=e,e.setNoDelay(!0),e.setKeepAlive(!0,15e3);let n=setTimeout(()=>{this.connected||(this.options.onStatus?.(`\u8FDE\u63A5 ${this.getAddress()} \u8D85\u65F6\uFF08${yi} ms\uFF09`),e.destroy())},yi),s=()=>clearTimeout(n);e.once("close",s),e.connect(this.port,this.host),e.on("connect",()=>{s(),this.connecting=!1,this.connected=!0,this.connectedAt=Date.now(),this.attempt=0,this.sendHello(),this.options.onStatus?.(`\u5DF2\u8FDE\u63A5\u624B\u673A ${this.getAddress()}\uFF08AutoJs6 \u670D\u52A1\u5668\u6A21\u5F0F\uFF09`),this.options.onConnect?.()}),e.on("data",i=>this.handleData(i)),e.on("error",i=>{this.options.onStatus?.(i.code==="ECONNREFUSED"?`\u8FDE\u63A5\u88AB\u62D2\u7EDD\uFF08${this.getAddress()}\uFF09\uFF1A\u624B\u673A\u4E0A AutoJs6 \u7684\u300C\u670D\u52A1\u5668\u6A21\u5F0F\u300D\u6CA1\u5F00\uFF0C\u6216\u5730\u5740\u4E0D\u5BF9`:`\u8FDE\u63A5\u51FA\u9519\uFF1A${i.message}`)}),e.on("close",()=>this.handleDisconnect())}sendHello(){this.sendJson(JSON.stringify({type:"hello",data:{device_name:`xzh ${j}`,app_version:j,app_version_code:0,device_id:"",extensionVersion:It}}))}handleData(e){let n;try{n=this.decoder.push(e)}catch(s){this.options.onStatus?.(`${this.getAddress()} \u8FD4\u56DE\u7684\u6570\u636E\u4E0D\u662F AutoJs6 \u534F\u8BAE\uFF1A${s instanceof Error?s.message:String(s)}`),this.active=!1,this.close();return}for(let s of n){if(s.kind!=="json")continue;let i=an(String(s.payload));if(!i)continue;let o=ln(i);if(o!==null){this.options.onLog?.(o);continue}let a=cn(i);a!==null&&this.options.onPhoneCommand?.(a,i.data)}}handleDisconnect(){let e=this.connected,n=this.connectedAt>0?Date.now()-this.connectedAt:Number.MAX_SAFE_INTEGER;if(this.socket=null,this.connected=!1,this.connecting=!1,e&&this.options.onDisconnect?.(),!!this.active){if(e&&n<Dl){if(this.quickFailures++,this.quickFailures>=Tr){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<Tr&&(this.quickFailures++,this.quickFailures>=Tr)){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 ${te}\uFF09\u3002`);return}this.scheduleReconnect()}}scheduleReconnect(){let e=this.options.reconnectDelayMs??1500;if(e<=0||this.retryTimer)return;let n=Math.min(e*2**this.attempt,Ol);this.attempt++,this.retryTimer=setTimeout(()=>{this.retryTimer=null,this.options.onStatus?.(`\u6B63\u5728\u91CD\u8FDE ${this.getAddress()}\u2026\uFF08\u7B2C ${this.attempt} \u6B21\uFF09`),this.connectOnce()},n)}};var xi=v(require("net"));var bi=1e4,Dt=class{options;port;server=null;connections=new Map;constructor(e={}){this.options=e,this.port=e.port??Se}isRunning(){return this.server!==null}getPort(){return this.port}start(){if(this.server)return Promise.resolve();let e=xi.createServer(n=>this.handleConnection(n));return new Promise((n,s)=>{let i=a=>{if(e.removeListener("listening",o),a.code==="EADDRINUSE"){s(new Error(`\u7AEF\u53E3 ${this.port} \u5DF2\u88AB\u5360\u7528 \u2014\u2014 \u8FD9\u662F AutoJs6\u300C\u5BA2\u6237\u7AEF\u6A21\u5F0F\u300D\u7684\u7AEF\u53E3\u3002\u4E24\u79CD\u53EF\u80FD\uFF1A\u2460 VSCode \u91CC\u7684 AutoJs6 \u6269\u5C55\uFF08003.autojs6-vscode-ext\uFF09\u6B63\u5728\u8FD0\u884C\uFF0C\u8BF7\u5728 VSCode \u91CC\u7981\u7528\u5B83\uFF1B\u2461 \u5DF2\u7ECF\u6709\u53E6\u4E00\u4E2A xzh \u8BBE\u5907\u6865\u5728\u8DD1\u3002\u540C\u4E00\u4E2A\u7AEF\u53E3\u4E0A\u7684\u4E24\u4E2A\u670D\u52A1\u4F1A\u4E92\u76F8\u62A2\u624B\u673A\u8FDE\u63A5\u3002`));return}s(a)},o=()=>{e.removeListener("error",i),e.on("error",a=>this.options.onStatus?.(`AutoJs6 \u76D1\u542C\u51FA\u9519\uFF1A${a.message}`)),n()};e.once("error",i),e.once("listening",o),e.listen(this.port,"0.0.0.0")}).then(()=>{this.server=e,this.options.onStatus?.(`AutoJs6 \u76D1\u542C\u5DF2\u5C31\u7EEA\uFF08\u7AEF\u53E3 ${this.port}\uFF09\uFF1A\u624B\u673A\u4E0A\u300C\u8FDE\u63A5\u7535\u8111 \u2192 \u5BA2\u6237\u7AEF\u6A21\u5F0F\u300D\u586B\u672C\u673A IP \u5373\u53EF`)})}async stop(){for(let n of[...this.connections.values()])this.dispose(n);this.connections.clear();let e=this.server;this.server=null,e&&await new Promise(n=>e.close(()=>n()))}listDevices(){return[...this.connections.values()].map(e=>e.peer).filter(e=>e!==null)}sendTo(e,n){let s=this.connections.get(e);return!s||!s.peer?!1:this.write(s,n)}broadcast(e){let n=0;for(let s of this.connections.values())s.peer&&this.write(s,e)&&n++;return n}closeDevice(e){let n=this.connections.get(e);n&&this.dispose(n)}handleConnection(e){let n=e.remoteAddress??"unknown",i=`${n.startsWith("::ffff:")?n.slice(7):n}:${e.remotePort??0}`,o={socket:e,id:i,decoder:new Ye,peer:null,handshakeTimer:setTimeout(()=>{o.peer||(this.options.onStatus?.(`\u8FDE\u63A5 ${i} \u672A\u5728 ${bi/1e3} \u79D2\u5185\u63E1\u624B\uFF0C\u5DF2\u65AD\u5F00\u3002`),this.dispose(o))},bi)};this.connections.set(i,o),e.setNoDelay(!0),e.setKeepAlive(!0,15e3),e.on("data",a=>this.handleData(o,a)),e.on("error",a=>{this.options.onStatus?.(`\u4E0E ${i} \u7684\u8FDE\u63A5\u51FA\u9519\uFF1A${a.message}`),this.dispose(o)}),e.on("close",()=>this.dispose(o))}handleData(e,n){let s;try{s=e.decoder.push(n)}catch(i){this.options.onStatus?.(`${e.id} \u53D1\u6765\u7684\u6570\u636E\u4E0D\u662F AutoJs6 \u534F\u8BAE\uFF1A${i instanceof Error?i.message:String(i)}`),this.dispose(e);return}for(let i of s){if(i.kind!=="json")continue;let o=an(String(i.payload));if(!o)continue;if(o.type==="hello"){this.handleHello(e,o.data,String(i.payload));continue}let a=ln(o);if(a!==null&&e.peer){this.options.onLog?.(e.peer,a);continue}let l=cn(o);l!==null&&e.peer&&this.options.onPhoneCommand?.(e.peer,l,o.data)}}handleHello(e,n,s){let i=$i(n);e.peer={id:e.id,name:i.deviceName||e.id,appVersion:i.appVersion,appVersionCode:i.appVersionCode},clearTimeout(e.handshakeTimer);let o=gi(),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 ${It}`),this.options.onStatus?.(` \u624B\u673A\u539F\u59CB hello\uFF1A${Ll(s,240)}`),this.options.onAttach?.(e.peer)}write(e,n){if(e.socket.destroyed)return!1;try{return e.socket.write(sn(on(n))),!0}catch{return!1}}dispose(e){clearTimeout(e.handshakeTimer);let n=this.connections.delete(e.id),s=e.peer;e.peer=null;try{e.socket.destroy()}catch{}n&&s&&this.options.onDetach?.(s)}};function Ll(r,e){let n=r.replace(/\s+/g," ").trim();return n.length>e?`${n.slice(0,e)}\u2026`:n}function kr(r){let e=r.scale??.3,n=r.quality??55,s=`http://${r.host}:${r.port}/shot`;return["// \u7531 xzh \u751F\u6210\uFF1A\u622A\u56FE\u5E76\u6309\u6388\u6743\u6846\u3001\u56DE\u4F20\u5230\u6865\uFF08\u52FF\u624B\u6539\uFF0C\u6A21\u677F\u89C1 src/device/screenshot.ts\uFF09","try {"," auto.waitFor(8000);"," var clicked = false;"," var auth = threads.start(function () {",' var btn = text("\u7ACB\u5373\u5F00\u59CB").findOne(3000);',' if (!btn) btn = text("\u5F00\u59CB\u73B0\u5728").findOne(300);',' if (!btn) btn = text("\u5141\u8BB8").findOne(300);'," if (!btn) btn = textMatches(/START NOW|Allow/i).findOne(300);"," if (btn) { clicked = true; btn.click(); }"," });",' console.log("\u3010\u622A\u56FE\u3011\u7B49\u5F85\u5C4F\u5E55\u6388\u6743\u2026");'," var img = captureScreen();"," auth.join(1500);",' if (!img) { console.log("\u3010\u622A\u56FE\u3011\u672A\u62FF\u5230\u56FE\u50CF\uFF08\u6388\u6743\u88AB\u62D2\u6216\u8D85\u65F6\uFF0C\u70B9\u5230\u6388\u6743\u6846=" + clicked + "\uFF09"); exit(); }',` var small = images.scale(img, ${e}, ${e});`,` var b64 = images.toBase64(small, "jpg", ${n});`,` var r = http.post("${s}", b64, { contentType: "text/plain" });`,' console.log("\u3010\u622A\u56FE\u3011" + img.width + "x" + img.height + " \u2192 " + small.width + "x" + small.height + "\uFF0C\u56DE\u4F20=" + r.statusCode);',"} catch (e) {",' console.log("\u3010\u622A\u56FE\u3011\u5931\u8D25\uFF1A" + e);',"}",""].join(`
|
|
73
|
-
`)}var
|
|
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 nn(r){let e=0;for(;e<r.length;){let n=r[e].role;if(n!=="assistant"&&n!=="tool")break;e++}return e===0?r:r.slice(e)}function rn(r,e){let n=ri(r),s=n.length,i=0;for(let a=n.length-1;a>=0;a--){let l=ut(n[a]);if(s<n.length&&i+l>e)break;i+=l,s=a}let o=nn(n.slice(s));if(o.length===0){for(let a=r.length-1;a>=0;a--)if(r[a].role==="user"){o=[r[a]];break}}if(o.length===1&&ut(o[0])>e){let l=Il(o[0],e);if(l===null)return[];o[0]=l}return o}function fr(r,e,n){let s=si(r,e),i=je(n)+4,o=s-i;return Math.max(1,Math.min(Math.max(o,1e3),s))}function si(r,e){let n=r&&r>0?r:Ve(e);return Math.floor(n*.8)}function gr(r,e,n){let s=si(r,e);return je(n)+4>=s*.5}var dr={"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},Dl=[[/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 Ve(r){let e=r.trim();if(!e)return 32e3;let n=e.toLowerCase(),s=dr[n];if(s)return s;let i=n.replace(/[-_]?(latest|preview|stable|beta|exp)$/,"").replace(/[-_]\d{6,8}$/,"").replace(/[:@].*$/,""),o=dr[i]??Object.entries(dr).find(([a])=>i.startsWith(a)||i===a)?.[1];if(o)return o;for(let[a,l]of Dl)if(a.test(i))return l;return 32e3}function Pe(r){return!Number.isFinite(r)||r<=0?"\u672A\u8BBE\u7F6E":String(Math.floor(r))}var sn=class{ratio=1;samples=0;observe(e,n){if(!Number.isFinite(e)||!Number.isFinite(n)||e<=0||n<=0)return;let s=n/e;s<.1||s>8||(this.ratio=this.samples===0?s:this.ratio*(1-.3)+s*.3,this.samples++)}factor(){return this.samples<2?1:Math.min(Math.max(this.ratio,1),4)}get observationCount(){return this.samples}reset(){this.ratio=1,this.samples=0}};function $r(r,e){return e>1?Math.max(1,Math.floor(r/e)):r}var ii=new Map;function yr(r){let e=r||"",n=ii.get(e);if(n)return n;let s=new sn;return ii.set(e,s),s}var Me=[{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 Ie(r){return Me.find(e=>e.id===r)}function on(r,e){return e||(r.envKey?process.env[r.envKey]??"":"")}function ai(r,e){return e||r.defaultBaseUrl}function vr(r,e){let n=[],s=Ie(e.provider);if(!s)return[`\u6A21\u578B ${e.id} \u4F7F\u7528\u4E86\u672A\u77E5 provider\uFF1A${e.provider}`];let i=r.providers[e.provider]??{};return s.requiresApiKey&&!on(s,e.apiKey??i.apiKey)&&n.push(`\u6A21\u578B ${e.id} \u7F3A\u5C11 API Key\uFF0C\u8BF7\u8FD0\u884C \`xzh model\` \u6216\u8BBE\u7F6E\u73AF\u5883\u53D8\u91CF ${s.envKey}`),s.requiresBaseUrl&&!ai(s,e.baseUrl??i.baseUrl)&&n.push(`\u6A21\u578B ${e.id} \u9700\u8981\u914D\u7F6E baseUrl`),e.model||n.push(`\u6A21\u578B ${e.id} \u672A\u6307\u5B9A\u6A21\u578B\u540D`),n}function li(r){let e=W(r);return e.length===0?["\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\uFF0C\u8BF7\u8FD0\u884C `xzh model add` \u6DFB\u52A0"]:e.flatMap(n=>vr(r,n))}function It(r,e){let n=e?.provider??r.provider,s=Ie(n);if(!s)throw new Error(`\u672A\u77E5\u7684 provider\uFF1A${n}`);let i=r.providers[n]??{},o=on(s,e?.apiKey??i.apiKey),a=ai(s,e?.baseUrl??i.baseUrl),l=e?.model||i.model||r.model||s.defaultModel;if(s.requiresBaseUrl&&!a)throw new Error(`provider "${s.label}" \u9700\u8981\u914D\u7F6E API \u7AEF\u70B9 baseUrl\u3002\u8FD0\u884C \`xzh model\` \u8865\u9F50\u540E\u518D\u8BD5\u3002`);if(s.requiresApiKey&&!o)throw new Error(`provider "${s.label}" \u7F3A\u5C11 API Key\u3002\u8FD0\u884C \`xzh model\` \u8FDB\u884C\u914D\u7F6E\uFF0C\u6216\u8BBE\u7F6E\u73AF\u5883\u53D8\u91CF ${s.envKey}\u3002`);if(!l)throw new Error(`provider "${s.label}" \u672A\u6307\u5B9A\u6A21\u578B\u3002\u8FD0\u884C \`xzh model\` \u9009\u62E9\u6A21\u578B\u3002`);switch(s.kind){case"anthropic":return new Qt({id:s.id,apiKey:o,baseUrl:a,model:l});case"gemini":return new en({id:s.id,apiKey:o,baseUrl:a,model:l});case"openai":default:return new tn({id:s.id,apiKey:o,baseUrl:a,model:l})}}var gt=v(require("fs")),Ri=v(require("os")),Nr=v(require("path"));var B="0.6.2";var Fe=9317,br=1e4,Sr=process.env.XZH_DEVICE_PLUGIN_VERSION?.trim()||"1.110.0",ci=B;function xr(){return`${Date.now()}_${Math.random()}`}function ui(r){let e=xr();return r>=629?JSON.stringify({message_id:e,data:"ok",version:Sr,debug:!1,type:"hello"}):JSON.stringify({message_id:e,data:"\u8FDE\u63A5\u6210\u529F",debug:!1,type:"hello"})}function di(r){return JSON.stringify({type:"pong",data:r})}function pi(r,e,n){return JSON.stringify({type:"command",message_id:xr(),data:{command:r,id:e,name:e,script:n}})}function wr(r,e={}){return JSON.stringify({type:"command",message_id:xr(),data:{command:r,...e}})}function hi(r){try{let e=JSON.parse(r);if(!e||typeof e!="object")return null;let n=typeof e.type=="string"?e.type:"";return n?{type:n,data:e.data}:null}catch{return null}}function Tr(r){let e=r??{},n=typeof e.device_name=="string"&&e.device_name.trim()?e.device_name.trim():"",s=typeof e.app_version_code=="number"&&Number.isFinite(e.app_version_code)?e.app_version_code:0;return{name:n,appVersionCode:s}}function mi(r){if(typeof r=="string")return r;let e=r??{};return typeof e.log=="string"?e.log:""}var Ue=v(require("fs")),Ci=v(require("http")),pt=v(require("os")),De=v(require("path")),Lt=require("ws");var Si=v(require("net"));var kr=r=>r,an=r=>kr(r);function Cr(r){return Buffer.from(kr(r))}function gi(r){return Buffer.concat(r.map(kr))}var dt=8,$i=1,Ol=2,fi=64*1024*1024;var Te=6347,re=7347,Dt=process.env.XZH_AUTOJS6_EXT_VERSION?.trim()||"1.0.13";function Ll(r,e){let n=Buffer.alloc(dt);return n.writeInt32BE(r,0),n.writeInt32BE(e,4),n}function ln(r){let e=Buffer.from(r,"utf8");return gi([Ll(e.length,$i),e])}var Ye=class{buffer=Buffer.alloc(0);push(e){let n=Cr(e);this.buffer=this.buffer.length===0?n:gi([this.buffer,n]);let s=[];for(;this.buffer.length>=dt;){let i=this.buffer.readInt32BE(0),o=this.buffer.readInt32BE(4);if(i<0||i>fi)throw new Error(`AutoJs6 \u5E27\u957F\u5EA6\u975E\u6CD5\uFF1A${i}\uFF08\u4E0A\u9650 ${fi}\uFF09\uFF0C\u8FDE\u63A5\u53EF\u80FD\u4E0D\u662F AutoJs6 \u534F\u8BAE`);if(this.buffer.length<dt+i)break;let a=Cr(this.buffer.subarray(dt,dt+i));this.buffer=Cr(this.buffer.subarray(dt+i)),o===$i?s.push({kind:"json",payload:a.toString("utf8")}):o===Ol&&s.push({kind:"bytes",payload:a})}return s}get pendingBytes(){return this.buffer.length}};function cn(r){try{let e=JSON.parse(r);if(!e||typeof e!="object"||typeof e.type!="string"||!e.type)return null;let n=e.data&&typeof e.data=="object"?e.data:{};return{type:e.type,data:n}}catch{return null}}function yi(r=Dt){return JSON.stringify({type:"hello",data:{extensionVersion:r}})}function vi(r){let e=s=>typeof s=="string"?s:"",n=s=>typeof s=="number"&&Number.isFinite(s)?s:0;return{deviceName:e(r.device_name).trim(),appVersion:e(r.app_version).trim(),appVersionCode:n(r.app_version_code),deviceId:e(r.device_id).trim()}}function Be(r,e={}){return JSON.stringify({type:"command",data:{command:r,...e}})}function un(r){if(r.type!=="log")return null;let e=r.data.log;return typeof e=="string"?e:null}function dn(r){let e=r.data["\xA0cmd\xA0"];return typeof e=="string"?e:null}var Nl=2e3,Ar=3,jl=15e3,bi=5e3,pn=class{host;port;options;socket=null;decoder=new Ye;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??re}getAddress(){return`${this.host}:${this.port}`}isConnected(){return this.connected}isRetrying(){return this.active}start(){this.active||(this.active=!0,this.attempt=0,this.quickFailures=0,this.connectOnce())}close(){this.active=!1,this.retryTimer&&(clearTimeout(this.retryTimer),this.retryTimer=null);let e=this.socket,n=this.connected;if(this.socket=null,this.connected=!1,this.connecting=!1,e){e.removeAllListeners();try{e.destroy()}catch{}}n&&this.options.onDisconnect?.()}runScript(e,n,s){return this.sendJson(Be("run",{id:n,name:s,script:e}))}saveScript(e,n){return this.sendJson(Be("save",{name:n,script:e}))}stopScript(e){return this.sendJson(Be("stop",{id:e}))}stopAllScripts(){return this.sendJson(Be("stopAll"))}sendJson(e){let n=this.socket;if(!this.connected||!n)return!1;try{return n.write(an(ln(e))),!0}catch{return!1}}connectOnce(){if(!this.active||this.socket||this.connecting)return;this.connecting=!0,this.decoder=new Ye;let e=new Si.Socket;this.socket=e,e.setNoDelay(!0),e.setKeepAlive(!0,15e3);let n=setTimeout(()=>{this.connected||(this.options.onStatus?.(`\u8FDE\u63A5 ${this.getAddress()} \u8D85\u65F6\uFF08${bi} ms\uFF09`),e.destroy())},bi),s=()=>clearTimeout(n);e.once("close",s),e.connect(this.port,this.host),e.on("connect",()=>{s(),this.connecting=!1,this.connected=!0,this.connectedAt=Date.now(),this.attempt=0,this.sendHello(),this.options.onStatus?.(`\u5DF2\u8FDE\u63A5\u624B\u673A ${this.getAddress()}\uFF08AutoJs6 \u670D\u52A1\u5668\u6A21\u5F0F\uFF09`),this.options.onConnect?.()}),e.on("data",i=>this.handleData(i)),e.on("error",i=>{this.options.onStatus?.(i.code==="ECONNREFUSED"?`\u8FDE\u63A5\u88AB\u62D2\u7EDD\uFF08${this.getAddress()}\uFF09\uFF1A\u624B\u673A\u4E0A AutoJs6 \u7684\u300C\u670D\u52A1\u5668\u6A21\u5F0F\u300D\u6CA1\u5F00\uFF0C\u6216\u5730\u5740\u4E0D\u5BF9`:`\u8FDE\u63A5\u51FA\u9519\uFF1A${i.message}`)}),e.on("close",()=>this.handleDisconnect())}sendHello(){this.sendJson(JSON.stringify({type:"hello",data:{device_name:`xzh ${B}`,app_version:B,app_version_code:0,device_id:"",extensionVersion:Dt}}))}handleData(e){let n;try{n=this.decoder.push(e)}catch(s){this.options.onStatus?.(`${this.getAddress()} \u8FD4\u56DE\u7684\u6570\u636E\u4E0D\u662F AutoJs6 \u534F\u8BAE\uFF1A${s instanceof Error?s.message:String(s)}`),this.active=!1,this.close();return}for(let s of n){if(s.kind!=="json")continue;let i=cn(String(s.payload));if(!i)continue;let o=un(i);if(o!==null){this.options.onLog?.(o);continue}let a=dn(i);a!==null&&this.options.onPhoneCommand?.(a,i.data)}}handleDisconnect(){let e=this.connected,n=this.connectedAt>0?Date.now()-this.connectedAt:Number.MAX_SAFE_INTEGER;if(this.socket=null,this.connected=!1,this.connecting=!1,e&&this.options.onDisconnect?.(),!!this.active){if(e&&n<Nl){if(this.quickFailures++,this.quickFailures>=Ar){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<Ar&&(this.quickFailures++,this.quickFailures>=Ar)){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 ${re}\uFF09\u3002`);return}this.scheduleReconnect()}}scheduleReconnect(){let e=this.options.reconnectDelayMs??1500;if(e<=0||this.retryTimer)return;let n=Math.min(e*2**this.attempt,jl);this.attempt++,this.retryTimer=setTimeout(()=>{this.retryTimer=null,this.options.onStatus?.(`\u6B63\u5728\u91CD\u8FDE ${this.getAddress()}\u2026\uFF08\u7B2C ${this.attempt} \u6B21\uFF09`),this.connectOnce()},n)}};var wi=v(require("net"));var xi=1e4,Ot=class{options;port;server=null;connections=new Map;constructor(e={}){this.options=e,this.port=e.port??Te}isRunning(){return this.server!==null}getPort(){return this.port}start(){if(this.server)return Promise.resolve();let e=wi.createServer(n=>this.handleConnection(n));return new Promise((n,s)=>{let i=a=>{if(e.removeListener("listening",o),a.code==="EADDRINUSE"){s(new Error(`\u7AEF\u53E3 ${this.port} \u5DF2\u88AB\u5360\u7528 \u2014\u2014 \u8FD9\u662F AutoJs6\u300C\u5BA2\u6237\u7AEF\u6A21\u5F0F\u300D\u7684\u7AEF\u53E3\u3002\u4E24\u79CD\u53EF\u80FD\uFF1A\u2460 VSCode \u91CC\u7684 AutoJs6 \u6269\u5C55\uFF08003.autojs6-vscode-ext\uFF09\u6B63\u5728\u8FD0\u884C\uFF0C\u8BF7\u5728 VSCode \u91CC\u7981\u7528\u5B83\uFF1B\u2461 \u5DF2\u7ECF\u6709\u53E6\u4E00\u4E2A xzh \u8BBE\u5907\u6865\u5728\u8DD1\u3002\u540C\u4E00\u4E2A\u7AEF\u53E3\u4E0A\u7684\u4E24\u4E2A\u670D\u52A1\u4F1A\u4E92\u76F8\u62A2\u624B\u673A\u8FDE\u63A5\u3002`));return}s(a)},o=()=>{e.removeListener("error",i),e.on("error",a=>this.options.onStatus?.(`AutoJs6 \u76D1\u542C\u51FA\u9519\uFF1A${a.message}`)),n()};e.once("error",i),e.once("listening",o),e.listen(this.port,"0.0.0.0")}).then(()=>{this.server=e,this.options.onStatus?.(`AutoJs6 \u76D1\u542C\u5DF2\u5C31\u7EEA\uFF08\u7AEF\u53E3 ${this.port}\uFF09\uFF1A\u624B\u673A\u4E0A\u300C\u8FDE\u63A5\u7535\u8111 \u2192 \u5BA2\u6237\u7AEF\u6A21\u5F0F\u300D\u586B\u672C\u673A IP \u5373\u53EF`)})}async stop(){for(let n of[...this.connections.values()])this.dispose(n);this.connections.clear();let e=this.server;this.server=null,e&&await new Promise(n=>e.close(()=>n()))}listDevices(){return[...this.connections.values()].map(e=>e.peer).filter(e=>e!==null)}sendTo(e,n){let s=this.connections.get(e);return!s||!s.peer?!1:this.write(s,n)}broadcast(e){let n=0;for(let s of this.connections.values())s.peer&&this.write(s,e)&&n++;return n}closeDevice(e){let n=this.connections.get(e);n&&this.dispose(n)}handleConnection(e){let n=e.remoteAddress??"unknown",i=`${n.startsWith("::ffff:")?n.slice(7):n}:${e.remotePort??0}`,o={socket:e,id:i,decoder:new Ye,peer:null,handshakeTimer:setTimeout(()=>{o.peer||(this.options.onStatus?.(`\u8FDE\u63A5 ${i} \u672A\u5728 ${xi/1e3} \u79D2\u5185\u63E1\u624B\uFF0C\u5DF2\u65AD\u5F00\u3002`),this.dispose(o))},xi)};this.connections.set(i,o),e.setNoDelay(!0),e.setKeepAlive(!0,15e3),e.on("data",a=>this.handleData(o,a)),e.on("error",a=>{this.options.onStatus?.(`\u4E0E ${i} \u7684\u8FDE\u63A5\u51FA\u9519\uFF1A${a.message}`),this.dispose(o)}),e.on("close",()=>this.dispose(o))}handleData(e,n){let s;try{s=e.decoder.push(n)}catch(i){this.options.onStatus?.(`${e.id} \u53D1\u6765\u7684\u6570\u636E\u4E0D\u662F AutoJs6 \u534F\u8BAE\uFF1A${i instanceof Error?i.message:String(i)}`),this.dispose(e);return}for(let i of s){if(i.kind!=="json")continue;let o=cn(String(i.payload));if(!o)continue;if(o.type==="hello"){this.handleHello(e,o.data,String(i.payload));continue}let a=un(o);if(a!==null&&e.peer){this.options.onLog?.(e.peer,a);continue}let l=dn(o);l!==null&&e.peer&&this.options.onPhoneCommand?.(e.peer,l,o.data)}}handleHello(e,n,s){let i=vi(n);e.peer={id:e.id,name:i.deviceName||e.id,appVersion:i.appVersion,appVersionCode:i.appVersionCode},clearTimeout(e.handshakeTimer);let o=yi(),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 ${Dt}`),this.options.onStatus?.(` \u624B\u673A\u539F\u59CB hello\uFF1A${Fl(s,240)}`),this.options.onAttach?.(e.peer)}write(e,n){if(e.socket.destroyed)return!1;try{return e.socket.write(an(ln(n))),!0}catch{return!1}}dispose(e){clearTimeout(e.handshakeTimer);let n=this.connections.delete(e.id),s=e.peer;e.peer=null;try{e.socket.destroy()}catch{}n&&s&&this.options.onDetach?.(s)}};function Fl(r,e){let n=r.replace(/\s+/g," ").trim();return n.length>e?`${n.slice(0,e)}\u2026`:n}function Er(r){let e=r.scale??.3,n=r.quality??55,s=`http://${r.host}:${r.port}/shot`;return["// \u7531 xzh \u751F\u6210\uFF1A\u622A\u56FE\u5E76\u6309\u6388\u6743\u6846\u3001\u56DE\u4F20\u5230\u6865\uFF08\u52FF\u624B\u6539\uFF0C\u6A21\u677F\u89C1 src/device/screenshot.ts\uFF09","try {"," auto.waitFor(8000);"," var clicked = false;"," var auth = threads.start(function () {",' var btn = text("\u7ACB\u5373\u5F00\u59CB").findOne(3000);',' if (!btn) btn = text("\u5F00\u59CB\u73B0\u5728").findOne(300);',' if (!btn) btn = text("\u5141\u8BB8").findOne(300);'," if (!btn) btn = textMatches(/START NOW|Allow/i).findOne(300);"," if (btn) { clicked = true; btn.click(); }"," });",' console.log("\u3010\u622A\u56FE\u3011\u7B49\u5F85\u5C4F\u5E55\u6388\u6743\u2026");'," var img = captureScreen();"," auth.join(1500);",' if (!img) { console.log("\u3010\u622A\u56FE\u3011\u672A\u62FF\u5230\u56FE\u50CF\uFF08\u6388\u6743\u88AB\u62D2\u6216\u8D85\u65F6\uFF0C\u70B9\u5230\u6388\u6743\u6846=" + clicked + "\uFF09"); exit(); }',` var small = images.scale(img, ${e}, ${e});`,` var b64 = images.toBase64(small, "jpg", ${n});`,` var r = http.post("${s}", b64, { contentType: "text/plain" });`,' console.log("\u3010\u622A\u56FE\u3011" + img.width + "x" + img.height + " \u2192 " + small.width + "x" + small.height + "\uFF0C\u56DE\u4F20=" + r.statusCode);',"} catch (e) {",' console.log("\u3010\u622A\u56FE\u3011\u5931\u8D25\uFF1A" + e);',"}",""].join(`
|
|
73
|
+
`)}var Ti=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??Fe,this.baseDir=e.baseDir??process.cwd(),this.logBufferSize=Math.max(50,e.logBufferSize??500)}async start(e={}){if(this.httpServer)return;let n=Ci.createServer((i,o)=>this.handleHttp(i,o)),s=new Lt.WebSocketServer({server:n});s.on("error",()=>{}),s.on("connection",(i,o)=>this.handleConnection(i,o)),await new Promise((i,o)=>{let a=c=>{if(n.removeListener("listening",l),c.code==="EADDRINUSE"){o(new Error(`\u7AEF\u53E3 ${this.port} \u5DF2\u88AB\u5360\u7528\u3002\u53EF\u80FD\u662F\uFF1A
|
|
74
74
|
\xB7 \u7384\u732A\u81EA\u5DF1\u5DF2\u7ECF\u6709\u4E00\u4E2A\u8BBE\u5907\u6865\u5728\u8DD1\uFF08\u7528 \`xzh device status\` \u770B\u4E00\u773C\uFF0C\u540C\u4E00\u4E2A\u63A7\u5236\u7AEF\u53E3\u540C\u65F6\u53EA\u80FD\u6709\u4E00\u4E2A\u6865\uFF09\uFF1B
|
|
75
75
|
\xB7 VSCode \u7684 Auto.js / AutoX.js \u63D2\u4EF6\u6B63\u5728\u8FD0\u884C\uFF08\u5B83\u7528 9317\uFF0C\u4E24\u8005\u4E0D\u80FD\u540C\u65F6\u5F00\uFF09\u3002
|
|
76
|
-
\u6362\u7AEF\u53E3\u518D\u8BD5\uFF1A--port <\u7AEF\u53E3>\u3002`));return}o(c)},l=()=>{n.removeListener("error",a),i()};n.once("error",a),n.once("listening",l),n.listen(this.port,"0.0.0.0")}),this.httpServer=n,this.wss=s,this.options.onStatus?.(e.announceUrls===!1?`\u63A7\u5236\u901A\u9053\u5DF2\u5C31\u7EEA\uFF08\u7AEF\u53E3 ${this.port}\uFF09`:`\u8BBE\u5907\u6865\u5DF2\u542F\u52A8\uFF0C\u76D1\u542C ${this.port}\u3002\u624B\u673A\u4E0A\u7684 AutoX.js \u586B\uFF1A${this.urls().join(" \u6216 ")}`)}async stop(){this.disconnectAutoJs6(),await this.stopAutoJs6Listener();for(let s of this.sessions)try{s.close()}catch{}this.sessions.clear();let e=this.wss;this.wss=null,e&&await new Promise(s=>e.close(()=>s()));let n=this.httpServer;this.httpServer=null,n&&await new Promise(s=>n.close(()=>s())),this.options.onStatus?.("\u8BBE\u5907\u6865\u5DF2\u505C\u6B62\u3002")}isRunning(){return this.httpServer!==null||this.autojs6Server!==null}getPort(){return this.port}urls(){let e=Er();return(e.length>0?e:["127.0.0.1"]).map(n=>`ws://${n}:${this.port}`)}listDevices(){return[...this.sessions].map(e=>e.info).filter(e=>e!==null).sort((e,n)=>e.attachedAt-n.attachedAt)}status(){return{running:this.isRunning(),port:this.port,urls:this.isRunning()?this.urls():[],devices:this.listDevices(),autojs6:this.autojs6?{address:this.autojs6.address,connected:this.autojs6.client.isConnected(),retrying:this.autojs6.client.isRetrying()}:null,autojs6Listener:this.autojs6Server?{port:this.autojs6Server.getPort(),urls:this.listenerUrls()}:null}}async connectAutoJs6(e,n=te){await this.start({announceUrls:!1}),this.disconnectAutoJs6();let s=`${e.trim()}:${n}`,i=new un({host:e.trim(),port:n,onStatus:a=>this.options.onStatus?.(a),onLog:a=>this.appendLog(s,a),onPhoneCommand:(a,l)=>{let c=typeof l.id=="string"?l.id:"";a==="rerun"&&c&&(this.options.onStatus?.(`\u624B\u673A\u8BF7\u6C42\u91CD\u8DD1\uFF1A${c}`),this.runScript(c))},onConnect:()=>{o.info={kind:"autojs6",id:s,name:s,appVersionCode:0,attachedAt:Date.now()},this.options.onDeviceAttach?.(o.info)},onDisconnect:()=>{let a=o.info;o.info=null,a&&this.options.onDeviceDetach?.(a)}}),o={kind:"autojs6",origin:"dial",id:s,info:null,sendJson:a=>i.sendJson(a),isAlive:()=>i.isConnected(),close:()=>i.close()};this.autojs6={client:i,address:s},this.sessions.add(o),i.start()}disconnectAutoJs6(){this.autojs6=null;for(let e of[...this.sessions])e.kind!=="autojs6"||e.origin!=="dial"||(this.sessions.delete(e),e.close())}async startAutoJs6Listener(e=Se){if(this.autojs6Server)return;let n=new Dt({port:e,onStatus:s=>this.options.onStatus?.(s),onLog:(s,i)=>this.appendLog(s.name,i),onPhoneCommand:(s,i,o)=>{let a=typeof o.id=="string"?o.id:"";i==="rerun"&&a&&(this.options.onStatus?.(`\u624B\u673A\u8BF7\u6C42\u91CD\u8DD1\uFF1A${a}`),this.runScript(a))},onAttach:s=>{let i={kind:"autojs6",origin:"listen",id:s.id,info:{kind:"autojs6",id:s.id,name:s.name,appVersionCode:s.appVersionCode,attachedAt:Date.now()},sendJson:o=>n.sendTo(s.id,o),isAlive:()=>n.listDevices().some(o=>o.id===s.id),close:()=>n.closeDevice(s.id)};this.sessions.add(i),this.options.onDeviceAttach?.(i.info)},onDetach:s=>{let i=[...this.sessions].find(a=>a.kind==="autojs6"&&a.origin==="listen"&&a.id===s.id);if(!i)return;this.sessions.delete(i);let o=i.info;i.info=null,o&&this.options.onDeviceDetach?.(o)}});this.autojs6Server=n;try{await n.start()}catch(s){throw this.autojs6Server=null,s}}async stopAutoJs6Listener(){let e=this.autojs6Server;if(this.autojs6Server=null,!!e){for(let n of[...this.sessions]){if(n.kind!=="autojs6"||n.origin!=="listen")continue;this.sessions.delete(n);let s=n.info;n.info=null,s&&this.options.onDeviceDetach?.(s)}await e.stop()}}listenerUrls(){if(!this.autojs6Server)return[];let e=this.autojs6Server.getPort(),n=Er();return(n.length>0?n:["127.0.0.1"]).map(s=>`${s}:${e}`)}async screenshot(e=2e4){let n=this.listDevices();if(n.length===0)return{ok:!1,message:this.noDeviceMessage()};if(!this.httpServer)return{ok:!1,message:"\u63A7\u5236\u901A\u9053\u6CA1\u6709\u8FD0\u884C\uFF0C\u65E0\u6CD5\u63A5\u6536\u624B\u673A\u56DE\u4F20\u7684\u622A\u56FE\u3002"};let s=n[0],i=kr({host:this.preferredHostFor(s.id),port:this.port}),o=Ie.join(pt.tmpdir(),`xzh-shot-${Date.now()}.js`),a;try{Ue.writeFileSync(o,i,"utf8"),a=this.sendScript("run",o)}finally{Ue.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=Er();return i.find(o=>o.startsWith(`${s}.`))??i[0]??"127.0.0.1"}pushScript(e,n){return this.sendScript("save",e,n)}runScript(e,n){return this.sendScript("run",e,n)}stopScript(e,n){let s=this.selectSessions(n);if(s.length===0)return{ok:!1,message:this.noDeviceMessage()};let i=e?this.resolvePath(e):"",o=0;for(let a of s)this.sendTo(a,a.kind==="autojs6"?Be(e?"stop":"stopAll",e?{id:i}:{}):e?xr("stop",{id:i}):xr("stopAll"))&&o++;return{ok:!0,path:e?this.resolvePath(e):"",delivered:o,devices:s.map(a=>Ar(a.info))}}sendScript(e,n,s){if(!this.isRunning())return{ok:!1,message:"\u8BBE\u5907\u6865\u5C1A\u672A\u542F\u52A8\u3002\u8BF7\u5728 xzh \u91CC\u6267\u884C /device serve\uFF0C\u6216\u5728\u53E6\u4E00\u4E2A\u7EC8\u7AEF\u8FD0\u884C `xzh device serve`\u3002"};let i=this.resolvePath(n),o;try{let c=Ue.statSync(i);if(!c.isFile())return{ok:!1,message:`\u4E0D\u662F\u6587\u4EF6\uFF1A${i}`};if(c.size>Si)return{ok:!1,message:`\u811A\u672C\u8FC7\u5927\uFF08${Math.round(c.size/1024)} KB\uFF09\uFF0C\u4E0A\u9650 ${Math.round(Si/1024)} KB\u3002\u9879\u76EE\u7EA7\u540C\u6B65\u8BF7\u6539\u7528 VSCode \u63D2\u4EF6\u3002`};o=Ue.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"?Be(e,{id:i,name:Ie.basename(i),script:o}):ui(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=>Ar(c.info))}}appendLog(e,n){let s={device:e,text:n,at:Date.now()};this.logs.push(s),this.logs.length>this.logBufferSize&&this.logs.splice(0,this.logs.length-this.logBufferSize),this.options.onLog?.(s)}recentLogs(e=50){let n=Math.max(1,e);return this.logs.slice(-n)}clearLogs(){this.logs.length=0}handleConnection(e,n){let i=`${n.socket.remoteAddress??"unknown"}:${n.socket.remotePort??0}`,o,a={kind:"autoxjs",origin:"listen",id:i,info:null,sendJson:l=>{if(e.readyState!==Ot.WebSocket.OPEN)return!1;try{return e.send(l),!0}catch{return!1}},isAlive:()=>e.readyState===Ot.WebSocket.OPEN,close:()=>{o&&clearTimeout(o);try{e.close()}catch{}}};o=setTimeout(()=>{a.info||(this.options.onStatus?.(`\u8FDE\u63A5 ${i} \u672A\u5728 ${yr/1e3} \u79D2\u5185\u63E1\u624B\uFF0C\u5DF2\u65AD\u5F00\u3002`),a.close())},yr),this.sessions.add(a),e.on("message",l=>{let c=l.toString(),u=di(c);if(!u){this.options.onStatus?.(`\u6536\u5230\u65E0\u6CD5\u89E3\u6790\u7684\u6D88\u606F\uFF08\u5DF2\u5FFD\u7565\uFF09\uFF1A${dn(c,200)}`);return}this.handleDeviceMessage(a,u.type,u.data,c)}),e.on("close",()=>this.detach(a)),e.on("error",()=>this.detach(a))}handleDeviceMessage(e,n,s,i){switch(n){case"hello":{let{name:o,appVersionCode:a}=Sr(s);e.info={kind:"autoxjs",id:e.id,name:o||e.id,appVersionCode:a,attachedAt:Date.now()};let l=li(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 ${vr}\uFF08\u5B9E\u73B0 v${ai}\uFF09`),this.options.onStatus?.(` \u624B\u673A\u539F\u59CB hello\uFF1A${dn(i,240)}`),this.options.onStatus?.(` \u5DF2\u56DE\u5E94\uFF1A${dn(l,240)}`),this.options.onDeviceAttach?.(e.info);return}case"ping":this.sendTo(e,ci(s));return;case"device_name":{let{name:o}=Sr(s);e.info&&o&&(e.info.name=o);return}case"log":{let o=pi(s);if(!o)return;this.appendLog(Ar(e.info),o);return}default:this.options.onStatus?.(`\u6536\u5230\u672A\u77E5\u6D88\u606F\u7C7B\u578B\u300C${n}\u300D\uFF0C\u5DF2\u5FFD\u7565\uFF1A${dn(i,200)}`);return}}detach(e){this.sessions.delete(e)&&(e.info&&(this.options.onDeviceDetach?.(e.info),e.info=null),e.close())}sendTo(e,n){return e.isAlive()&&e.sendJson(n)}selectSessions(e){let n=[...this.sessions].filter(i=>i.info!==null);if(!e)return n;let s=e.trim().toLowerCase();return n.filter(i=>{let o=i.info;return i.id.toLowerCase()===s||o.name.toLowerCase().includes(s)})}noDeviceMessage(){return this.autojs6Server?`AutoJs6 \u5C1A\u672A\u8FDE\u63A5\uFF08\u672C\u673A\u6B63\u5728\u76D1\u542C ${this.listenerUrls().join(" \u6216 ")}\uFF09\u3002\u8BF7\u786E\u8BA4\uFF1A\u2460 \u624B\u673A\u4E0A AutoJs6 \u6253\u5F00\u300C\u8FDE\u63A5\u7535\u8111 \u2192 \u5BA2\u6237\u7AEF\u6A21\u5F0F\u300D\uFF0C\u586B\u5165\u4E0A\u9762\u7684\u5730\u5740\uFF1B\u2461 \u7AEF\u53E3\u7528\u9ED8\u8BA4\u7684 ${Se}\uFF1B\u2462 \u624B\u673A\u4E0E\u7535\u8111\u5728\u540C\u4E00\u7F51\u7EDC\u3002`:this.autojs6?`AutoJs6 \u5C1A\u672A\u8FDE\u63A5\uFF08${this.autojs6.address}\uFF09\u3002\u8BF7\u786E\u8BA4\uFF1A\u2460 \u624B\u673A\u4E0A AutoJs6 \u6253\u5F00\u300C\u8FDE\u63A5\u7535\u8111 \u2192 \u670D\u52A1\u5668\u6A21\u5F0F\u300D\uFF08\u9ED8\u8BA4\u7AEF\u53E3 7347\uFF09\uFF1B\u2461 \u5730\u5740\u586B\u7684\u662F\u624B\u673A IP\uFF0C\u624B\u673A\u672C\u673A\u8FD0\u884C xzh \u65F6\u7528 127.0.0.1\uFF1B\u2462 \u4E24\u8005\u5728\u540C\u4E00\u7F51\u7EDC\u3002`:`\u5F53\u524D\u6CA1\u6709\u5DF2\u8FDE\u63A5\u7684\u8BBE\u5907\u3002\u8BF7\u786E\u8BA4\uFF1A\u2460 \u624B\u673A\u4E0E\u7535\u8111\u5728\u540C\u4E00\u7F51\u7EDC\uFF1B\u2461 \u624B\u673A AutoX.js \u91CC\u586B\u4E86 ${this.urls().join(" \u6216 ")||`ws://<\u7535\u8111IP>:${this.port}`} \u5E76\u70B9\u4E86\u8FDE\u63A5\u3002`}resolvePath(e){let n=e.startsWith("~")?Ie.join(pt.homedir(),e.slice(1)):e;return Ie.isAbsolute(n)?n:Ie.resolve(this.baseDir,n)}handleHttp(e,n){let s=new URL(e.url??"/",`http://127.0.0.1:${this.port}`),i=(o,a=200)=>{n.writeHead(a,{"content-type":"application/json; charset=utf-8"}),n.end(JSON.stringify(o))};switch(s.pathname){case"/":n.writeHead(200,{"content-type":"text/plain; charset=utf-8"}),n.end(`xzh device bridge
|
|
76
|
+
\u6362\u7AEF\u53E3\u518D\u8BD5\uFF1A--port <\u7AEF\u53E3>\u3002`));return}o(c)},l=()=>{n.removeListener("error",a),i()};n.once("error",a),n.once("listening",l),n.listen(this.port,"0.0.0.0")}),this.httpServer=n,this.wss=s,this.options.onStatus?.(e.announceUrls===!1?`\u63A7\u5236\u901A\u9053\u5DF2\u5C31\u7EEA\uFF08\u7AEF\u53E3 ${this.port}\uFF09`:`\u8BBE\u5907\u6865\u5DF2\u542F\u52A8\uFF0C\u76D1\u542C ${this.port}\u3002\u624B\u673A\u4E0A\u7684 AutoX.js \u586B\uFF1A${this.urls().join(" \u6216 ")}`)}async stop(){this.disconnectAutoJs6(),await this.stopAutoJs6Listener();for(let s of this.sessions)try{s.close()}catch{}this.sessions.clear();let e=this.wss;this.wss=null,e&&await new Promise(s=>e.close(()=>s()));let n=this.httpServer;this.httpServer=null,n&&await new Promise(s=>n.close(()=>s())),this.options.onStatus?.("\u8BBE\u5907\u6865\u5DF2\u505C\u6B62\u3002")}isRunning(){return this.httpServer!==null||this.autojs6Server!==null}getPort(){return this.port}urls(){let e=Rr();return(e.length>0?e:["127.0.0.1"]).map(n=>`ws://${n}:${this.port}`)}listDevices(){return[...this.sessions].map(e=>e.info).filter(e=>e!==null).sort((e,n)=>e.attachedAt-n.attachedAt)}status(){return{running:this.isRunning(),port:this.port,urls:this.isRunning()?this.urls():[],devices:this.listDevices(),autojs6:this.autojs6?{address:this.autojs6.address,connected:this.autojs6.client.isConnected(),retrying:this.autojs6.client.isRetrying()}:null,autojs6Listener:this.autojs6Server?{port:this.autojs6Server.getPort(),urls:this.listenerUrls()}:null}}async connectAutoJs6(e,n=re){await this.start({announceUrls:!1}),this.disconnectAutoJs6();let s=`${e.trim()}:${n}`,i=new pn({host:e.trim(),port:n,onStatus:a=>this.options.onStatus?.(a),onLog:a=>this.appendLog(s,a),onPhoneCommand:(a,l)=>{let c=typeof l.id=="string"?l.id:"";a==="rerun"&&c&&(this.options.onStatus?.(`\u624B\u673A\u8BF7\u6C42\u91CD\u8DD1\uFF1A${c}`),this.runScript(c))},onConnect:()=>{o.info={kind:"autojs6",id:s,name:s,appVersionCode:0,attachedAt:Date.now()},this.options.onDeviceAttach?.(o.info)},onDisconnect:()=>{let a=o.info;o.info=null,a&&this.options.onDeviceDetach?.(a)}}),o={kind:"autojs6",origin:"dial",id:s,info:null,sendJson:a=>i.sendJson(a),isAlive:()=>i.isConnected(),close:()=>i.close()};this.autojs6={client:i,address:s},this.sessions.add(o),i.start()}disconnectAutoJs6(){this.autojs6=null;for(let e of[...this.sessions])e.kind!=="autojs6"||e.origin!=="dial"||(this.sessions.delete(e),e.close())}async startAutoJs6Listener(e=Te){if(this.autojs6Server)return;let n=new Ot({port:e,onStatus:s=>this.options.onStatus?.(s),onLog:(s,i)=>this.appendLog(s.name,i),onPhoneCommand:(s,i,o)=>{let a=typeof o.id=="string"?o.id:"";i==="rerun"&&a&&(this.options.onStatus?.(`\u624B\u673A\u8BF7\u6C42\u91CD\u8DD1\uFF1A${a}`),this.runScript(a))},onAttach:s=>{let i={kind:"autojs6",origin:"listen",id:s.id,info:{kind:"autojs6",id:s.id,name:s.name,appVersionCode:s.appVersionCode,attachedAt:Date.now()},sendJson:o=>n.sendTo(s.id,o),isAlive:()=>n.listDevices().some(o=>o.id===s.id),close:()=>n.closeDevice(s.id)};this.sessions.add(i),this.options.onDeviceAttach?.(i.info)},onDetach:s=>{let i=[...this.sessions].find(a=>a.kind==="autojs6"&&a.origin==="listen"&&a.id===s.id);if(!i)return;this.sessions.delete(i);let o=i.info;i.info=null,o&&this.options.onDeviceDetach?.(o)}});this.autojs6Server=n;try{await n.start()}catch(s){throw this.autojs6Server=null,s}}async stopAutoJs6Listener(){let e=this.autojs6Server;if(this.autojs6Server=null,!!e){for(let n of[...this.sessions]){if(n.kind!=="autojs6"||n.origin!=="listen")continue;this.sessions.delete(n);let s=n.info;n.info=null,s&&this.options.onDeviceDetach?.(s)}await e.stop()}}listenerUrls(){if(!this.autojs6Server)return[];let e=this.autojs6Server.getPort(),n=Rr();return(n.length>0?n:["127.0.0.1"]).map(s=>`${s}:${e}`)}async screenshot(e=2e4){let n=this.listDevices();if(n.length===0)return{ok:!1,message:this.noDeviceMessage()};if(!this.httpServer)return{ok:!1,message:"\u63A7\u5236\u901A\u9053\u6CA1\u6709\u8FD0\u884C\uFF0C\u65E0\u6CD5\u63A5\u6536\u624B\u673A\u56DE\u4F20\u7684\u622A\u56FE\u3002"};let s=n[0],i=Er({host:this.preferredHostFor(s.id),port:this.port}),o=De.join(pt.tmpdir(),`xzh-shot-${Date.now()}.js`),a;try{Ue.writeFileSync(o,i,"utf8"),a=this.sendScript("run",o)}finally{Ue.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=Rr();return i.find(o=>o.startsWith(`${s}.`))??i[0]??"127.0.0.1"}pushScript(e,n){return this.sendScript("save",e,n)}runScript(e,n){return this.sendScript("run",e,n)}stopScript(e,n){let s=this.selectSessions(n);if(s.length===0)return{ok:!1,message:this.noDeviceMessage()};let i=e?this.resolvePath(e):"",o=0;for(let a of s)this.sendTo(a,a.kind==="autojs6"?Be(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=>_r(a.info))}}sendScript(e,n,s){if(!this.isRunning())return{ok:!1,message:"\u8BBE\u5907\u6865\u5C1A\u672A\u542F\u52A8\u3002\u8BF7\u5728 xzh \u91CC\u6267\u884C /device serve\uFF0C\u6216\u5728\u53E6\u4E00\u4E2A\u7EC8\u7AEF\u8FD0\u884C `xzh device serve`\u3002"};let i=this.resolvePath(n),o;try{let c=Ue.statSync(i);if(!c.isFile())return{ok:!1,message:`\u4E0D\u662F\u6587\u4EF6\uFF1A${i}`};if(c.size>Ti)return{ok:!1,message:`\u811A\u672C\u8FC7\u5927\uFF08${Math.round(c.size/1024)} KB\uFF09\uFF0C\u4E0A\u9650 ${Math.round(Ti/1024)} KB\u3002\u9879\u76EE\u7EA7\u540C\u6B65\u8BF7\u6539\u7528 VSCode \u63D2\u4EF6\u3002`};o=Ue.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"?Be(e,{id:i,name:De.basename(i),script:o}):pi(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=>_r(c.info))}}appendLog(e,n){let s={device:e,text:n,at:Date.now()};this.logs.push(s),this.logs.length>this.logBufferSize&&this.logs.splice(0,this.logs.length-this.logBufferSize),this.options.onLog?.(s)}recentLogs(e=50){let n=Math.max(1,e);return this.logs.slice(-n)}clearLogs(){this.logs.length=0}handleConnection(e,n){let i=`${n.socket.remoteAddress??"unknown"}:${n.socket.remotePort??0}`,o,a={kind:"autoxjs",origin:"listen",id:i,info:null,sendJson:l=>{if(e.readyState!==Lt.WebSocket.OPEN)return!1;try{return e.send(l),!0}catch{return!1}},isAlive:()=>e.readyState===Lt.WebSocket.OPEN,close:()=>{o&&clearTimeout(o);try{e.close()}catch{}}};o=setTimeout(()=>{a.info||(this.options.onStatus?.(`\u8FDE\u63A5 ${i} \u672A\u5728 ${br/1e3} \u79D2\u5185\u63E1\u624B\uFF0C\u5DF2\u65AD\u5F00\u3002`),a.close())},br),this.sessions.add(a),e.on("message",l=>{let c=l.toString(),u=hi(c);if(!u){this.options.onStatus?.(`\u6536\u5230\u65E0\u6CD5\u89E3\u6790\u7684\u6D88\u606F\uFF08\u5DF2\u5FFD\u7565\uFF09\uFF1A${hn(c,200)}`);return}this.handleDeviceMessage(a,u.type,u.data,c)}),e.on("close",()=>this.detach(a)),e.on("error",()=>this.detach(a))}handleDeviceMessage(e,n,s,i){switch(n){case"hello":{let{name:o,appVersionCode:a}=Tr(s);e.info={kind:"autoxjs",id:e.id,name:o||e.id,appVersionCode:a,attachedAt:Date.now()};let l=ui(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 ${Sr}\uFF08\u5B9E\u73B0 v${ci}\uFF09`),this.options.onStatus?.(` \u624B\u673A\u539F\u59CB hello\uFF1A${hn(i,240)}`),this.options.onStatus?.(` \u5DF2\u56DE\u5E94\uFF1A${hn(l,240)}`),this.options.onDeviceAttach?.(e.info);return}case"ping":this.sendTo(e,di(s));return;case"device_name":{let{name:o}=Tr(s);e.info&&o&&(e.info.name=o);return}case"log":{let o=mi(s);if(!o)return;this.appendLog(_r(e.info),o);return}default:this.options.onStatus?.(`\u6536\u5230\u672A\u77E5\u6D88\u606F\u7C7B\u578B\u300C${n}\u300D\uFF0C\u5DF2\u5FFD\u7565\uFF1A${hn(i,200)}`);return}}detach(e){this.sessions.delete(e)&&(e.info&&(this.options.onDeviceDetach?.(e.info),e.info=null),e.close())}sendTo(e,n){return e.isAlive()&&e.sendJson(n)}selectSessions(e){let n=[...this.sessions].filter(i=>i.info!==null);if(!e)return n;let s=e.trim().toLowerCase();return n.filter(i=>{let o=i.info;return i.id.toLowerCase()===s||o.name.toLowerCase().includes(s)})}noDeviceMessage(){return this.autojs6Server?`AutoJs6 \u5C1A\u672A\u8FDE\u63A5\uFF08\u672C\u673A\u6B63\u5728\u76D1\u542C ${this.listenerUrls().join(" \u6216 ")}\uFF09\u3002\u8BF7\u786E\u8BA4\uFF1A\u2460 \u624B\u673A\u4E0A AutoJs6 \u6253\u5F00\u300C\u8FDE\u63A5\u7535\u8111 \u2192 \u5BA2\u6237\u7AEF\u6A21\u5F0F\u300D\uFF0C\u586B\u5165\u4E0A\u9762\u7684\u5730\u5740\uFF1B\u2461 \u7AEF\u53E3\u7528\u9ED8\u8BA4\u7684 ${Te}\uFF1B\u2462 \u624B\u673A\u4E0E\u7535\u8111\u5728\u540C\u4E00\u7F51\u7EDC\u3002`:this.autojs6?`AutoJs6 \u5C1A\u672A\u8FDE\u63A5\uFF08${this.autojs6.address}\uFF09\u3002\u8BF7\u786E\u8BA4\uFF1A\u2460 \u624B\u673A\u4E0A AutoJs6 \u6253\u5F00\u300C\u8FDE\u63A5\u7535\u8111 \u2192 \u670D\u52A1\u5668\u6A21\u5F0F\u300D\uFF08\u9ED8\u8BA4\u7AEF\u53E3 7347\uFF09\uFF1B\u2461 \u5730\u5740\u586B\u7684\u662F\u624B\u673A IP\uFF0C\u624B\u673A\u672C\u673A\u8FD0\u884C xzh \u65F6\u7528 127.0.0.1\uFF1B\u2462 \u4E24\u8005\u5728\u540C\u4E00\u7F51\u7EDC\u3002`:`\u5F53\u524D\u6CA1\u6709\u5DF2\u8FDE\u63A5\u7684\u8BBE\u5907\u3002\u8BF7\u786E\u8BA4\uFF1A\u2460 \u624B\u673A\u4E0E\u7535\u8111\u5728\u540C\u4E00\u7F51\u7EDC\uFF1B\u2461 \u624B\u673A AutoX.js \u91CC\u586B\u4E86 ${this.urls().join(" \u6216 ")||`ws://<\u7535\u8111IP>:${this.port}`} \u5E76\u70B9\u4E86\u8FDE\u63A5\u3002`}resolvePath(e){let n=e.startsWith("~")?De.join(pt.homedir(),e.slice(1)):e;return De.isAbsolute(n)?n:De.resolve(this.baseDir,n)}handleHttp(e,n){let s=new URL(e.url??"/",`http://127.0.0.1:${this.port}`),i=(o,a=200)=>{n.writeHead(a,{"content-type":"application/json; charset=utf-8"}),n.end(JSON.stringify(o))};switch(s.pathname){case"/":n.writeHead(200,{"content-type":"text/plain; charset=utf-8"}),n.end(`xzh device bridge
|
|
77
77
|
devices: ${this.listDevices().length}
|
|
78
78
|
url: ${this.urls().join(" ")}
|
|
79
79
|
endpoints: /status /devices /logs /exec?cmd=save|run|rerun|stop|stopAll&path=<\u811A\u672C>
|
|
80
80
|
`);return;case"/status":i(this.status());return;case"/devices":i({devices:this.listDevices()});return;case"/logs":{let o=Number(s.searchParams.get("limit")??"50");i({logs:this.recentLogs(Number.isFinite(o)?o:50)});return}case"/exec":{let o=(s.searchParams.get("cmd")??"").trim(),a=(s.searchParams.get("path")??"").trim(),l=(s.searchParams.get("device")??"").trim()||void 0;switch(o){case"save":case"push":i(a?this.pushScript(a,l):{ok:!1,message:"\u7F3A\u5C11 path \u53C2\u6570"});return;case"run":i(a?this.runScript(a,l):{ok:!1,message:"\u7F3A\u5C11 path \u53C2\u6570"});return;case"rerun":{if(!a){i({ok:!1,message:"\u7F3A\u5C11 path \u53C2\u6570"});return}this.stopScript(void 0,l),setTimeout(()=>this.runScript(a,l),800),i({ok:!0,path:this.resolvePath(a),action:"rerun"});return}case"stop":i(this.stopScript(a||void 0,l));return;case"stopAll":i(this.stopScript(void 0,l));return;default:i({ok:!1,message:`\u672A\u77E5 cmd\uFF1A${o}`},400);return}}case"/shot":{if(e.method!=="POST"){i({ok:!1,message:"\u8BF7\u7528 POST \u4E0A\u4F20\u622A\u56FE"},405);return}let o=[];e.on("data",a=>o.push(a)),e.on("end",()=>{let a=Buffer.concat(o),l=Buffer.from(a.toString("utf8").trim(),"base64");if(l.length===0){i({ok:!1,message:"\u622A\u56FE\u5185\u5BB9\u4E3A\u7A7A"},400);return}this.latestShot={data:l,at:Date.now()},i({ok:!0,bytes:l.length})});return}case"/screenshot":{this.screenshot().then(o=>{if(!o.ok){i({ok:!1,message:o.message},504);return}n.writeHead(200,{"content-type":"image/jpeg","content-length":String(o.data.length)}),n.end(o.data)}).catch(o=>i({ok:!1,message:String(o)},500));return}default:{n.writeHead(404,{"content-type":"text/plain; charset=utf-8"}),n.end(`not found
|
|
81
|
-
`);return}}}};function
|
|
82
|
-
`).slice(1).map(n=>n.trim()).filter(n=>n.endsWith(" device"));if(e.length>0){let n=(0,
|
|
83
|
-
`)}function
|
|
84
|
-
`)}var t={reset:"\x1B[0m",bold:"\x1B[1m",dim:"\x1B[2m",italic:"\x1B[3m",underline:"\x1B[4m",inverse:"\x1B[7m",black:"\x1B[30m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",cyan:"\x1B[36m",white:"\x1B[37m",gray:"\x1B[90m",brightRed:"\x1B[91m",brightGreen:"\x1B[92m",brightYellow:"\x1B[93m",brightBlue:"\x1B[94m",brightMagenta:"\x1B[95m",brightCyan:"\x1B[96m",brightWhite:"\x1B[97m",bgRed:"\x1B[41m",bgGreen:"\x1B[42m",bgYellow:"\x1B[43m",bgBlue:"\x1B[44m",bgMagenta:"\x1B[45m",bgCyan:"\x1B[46m",bgGray:"\x1B[100m"},
|
|
85
|
-
`)){if(s===""){n.push("");continue}let i="",o=0,a=[],l=s.match(/\x1b\[[0-9;?]*[A-Za-z]|./gu)??[];for(let c of l){let u=
|
|
81
|
+
`);return}}}};function hn(r,e){let n=r.replace(/\s+/g," ").trim();return n.length>e?`${n.slice(0,e)}\u2026`:n}function _r(r){return r?r.name||r.id:"\u672A\u63E1\u624B\u8FDE\u63A5"}function Rr(){let r=[],e=pt.networkInterfaces();for(let n of Object.keys(e))for(let s of e[n]??[])s.family==="IPv4"&&!s.internal&&r.push(s.address);return r}var Pr=v(require("http"));var Bl=5e3;function ze(r){if(typeof r=="number"&&r>0&&r<=65535)return r;let e=Number.parseInt(process.env.XZH_DEVICE_PORT??"",10);return Number.isFinite(e)&&e>0&&e<=65535?e:Fe}var pe=class{port;constructor(e=Fe){this.port=e}getPort(){return this.port}screenshot(e=4e4){return new Promise(n=>{let s=Pr.request({host:"127.0.0.1",port:this.port,path:"/screenshot",method:"POST",timeout:e},i=>{let o=[];i.on("data",a=>o.push(a)),i.on("end",()=>{let a=Buffer.concat(o);if(i.statusCode===200){n({ok:!0,data:a});return}let l=`\u622A\u56FE\u5931\u8D25\uFF08HTTP ${i.statusCode}\uFF09`;try{let c=JSON.parse(a.toString("utf8"));c.message&&(l=c.message)}catch{}n({ok:!1,message:l})})});s.on("error",i=>n({ok:!1,message:String(i)})),s.on("timeout",()=>{s.destroy(),n({ok:!1,message:`\u622A\u56FE\u8D85\u65F6\uFF08${e}ms\uFF09`})}),s.end()})}async status(){return this.request("/status")}async isRunning(){return await this.status()!==null}async devices(){let e=await this.request("/devices");return e?e.devices:null}async logs(e=50){let n=await this.request(`/logs?limit=${encodeURIComponent(String(e))}`);return n?n.logs:null}async exec(e,n,s){let i=new URLSearchParams({cmd:e});n&&i.set("path",n),s&&i.set("device",s);let o=await this.request(`/exec?${i.toString()}`);return o||{ok:!1,message:`\u8FDE\u4E0D\u4E0A\u8BBE\u5907\u6865\uFF08127.0.0.1:${this.port}\uFF09\u3002\u5148\u5728\u53E6\u4E00\u4E2A\u7EC8\u7AEF\u8FD0\u884C \`xzh device serve\`\uFF0C\u6216\u5728 xzh \u91CC\u6267\u884C /device serve\u3002`}}request(e){return new Promise(n=>{let s=Pr.request({host:"127.0.0.1",port:this.port,path:e,method:"GET",timeout:Bl},i=>{let o=[];i.on("data",a=>o.push(a)),i.on("end",()=>{try{n(JSON.parse(Buffer.concat(o).toString("utf8")))}catch{n(null)}})});s.on("timeout",()=>{s.destroy(),n(null)}),s.on("error",()=>n(null)),s.end()})}};var Mr=require("child_process"),ht=v(require("fs")),Ir=v(require("path"));var Dr="https://github.com/SuperMonster003/AutoJs6/releases/";function ki(){return Ir.join(E(),"apks")}var Ul=["arm64-v8a","armeabi-v7a","x86_64","x86"];function mn(){try{let e=(0,Mr.execFileSync)("adb",["devices"],{timeout:5e3,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).split(`
|
|
82
|
+
`).slice(1).map(n=>n.trim()).filter(n=>n.endsWith(" device"));if(e.length>0){let n=(0,Mr.execFileSync)("adb",["shell","getprop","ro.product.cpu.abi"],{timeout:5e3,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim();if(Ul.includes(n))return{abi:n,source:"adb",detail:`\u7531 adb \u8BFB\u53D6\u8BBE\u5907\u4FE1\u606F\u5F97\u5230\uFF08${e.length} \u53F0\u8BBE\u5907\u5728\u7EBF\uFF09`}}}catch{}return{abi:"arm64-v8a",source:"default",detail:"\u672A\u68C0\u6D4B\u5230 adb \u8BBE\u5907\uFF0C\u6309\u4E3B\u6D41\u673A\u578B\u9ED8\u8BA4\u9009\u62E9\uFF08\u6A21\u62DF\u5668\u8BF7\u9009 x86_64\uFF09"}}function fn(r,e=ki()){let n;try{n=ht.readdirSync(e)}catch{return null}for(let s of n){if(!s.toLowerCase().endsWith(".apk")||!s.toLowerCase().includes(r.toLowerCase()))continue;let i=Ir.join(e,s);try{let o=ht.statSync(i);if(o.isFile())return{path:i,sizeBytes:o.size}}catch{}}return null}function mt(){if(process.env.PREFIX?.includes("com.termux")||process.env.ANDROID_ROOT||process.env.ANDROID_DATA)return!0;try{return ht.existsSync("/system/build.prop")}catch{return!1}}function zl(r){return r<1024*1024?`${Math.round(r/1024)} KB`:`${(r/(1024*1024)).toFixed(0)} MB`}function gn(r){let{where:e,abi:n,address:s,localApk:i}=r,o=[];return o.push("\u9996\u6B21\u8FDE\u63A5\u624B\u673A\u9700\u8981\u88C5 AutoJs6\uFF08\u5B83\u63D0\u4F9B\u65E0\u969C\u788D\u80FD\u529B\uFF0Cxzh \u901A\u8FC7\u5B83\u64CD\u4F5C\u624B\u673A\uFF09\uFF1A"),o.push(""),o.push(` 1. \u624B\u673A\u5B89\u88C5 AutoJs6 \u2014\u2014 \u4E0B\u8F7D\u9875\uFF1A${Dr}`),o.push(` \u9009 ${n} \u7248\u672C${n==="arm64-v8a"?"\uFF08\u7EDD\u5927\u591A\u6570\u624B\u673A\uFF09":"\uFF08\u6A21\u62DF\u5668/\u7279\u6B8A\u673A\u578B\uFF09"}`),i?o.push(` \u672C\u673A\u5DF2\u6709\u73B0\u6210\u5B89\u88C5\u5305\uFF1A${i.path}\uFF08${zl(i.sizeBytes)}\uFF09`):o.push(` \u4E5F\u53EF\u4EE5\u628A\u5B89\u88C5\u5305\u653E\u5230 ${ki()}/\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 Or(r=60,e=""){return["// \u7531 xzh \u751F\u6210\uFF1A\u8BFB\u53D6\u5F53\u524D\u754C\u9762\u5185\u5BB9\uFF08\u6A21\u677F\u89C1 src/device/ui-dump.ts\uFF09","try {",` console.log("\u3010\u5F00\u59CB\u3011${e}");`," auto.waitFor(8000);"," if (!auto.isRunning()) {",' console.log("\u3010\u754C\u9762\u3011\u65E0\u969C\u788D\u672A\u5C31\u7EEA\uFF0C\u65E0\u6CD5\u8BFB\u53D6\u754C\u9762");'," exit();"," }",' console.log("\u3010\u754C\u9762\u3011" + currentPackage() + " / " + currentActivity());'," var lines = [];"," classNameMatches(/.*/).find().forEach(function (el) {"," try {"," var t = el.text();"," var d = el.desc();"," var label = (t && t.trim()) || (d && d.trim());"," if (!label) return;",' if (label.indexOf("\u3010") === 0) return;'," var b = el.bounds();",' lines.push(el.className().replace(/^android\\.widget\\./, "") + " | " + label +',' " | click=" + (el.clickable() ? "Y" : "N") +',' " | [" + b.left + "," + b.top + "," + b.right + "," + b.bottom + "]");'," } catch (e) {}"," });",` console.log("\u3010\u63A7\u4EF6\u3011\u5171 " + lines.length + " \u4E2A" + (lines.length > ${r} ? "\uFF08\u53EA\u5217\u524D ${r} \u4E2A\uFF09" : ""));`,` lines.slice(0, ${r}).forEach(function (line) { console.log("\u3010\u63A7\u4EF6\u3011" + line); });`," if (lines.length < 3) {",' console.log("\u3010\u5224\u65AD\u3011\u53EF\u7528\u63A7\u4EF6\u6570=" + lines.length + " \u21D2 \u8BE5\u754C\u9762\u65E0\u6CD5\u901A\u8FC7\u65E0\u969C\u788D\u8BFB\u53D6");',' console.log("\u3010\u539F\u56E0\u3011\u5FAE\u4FE1\u3001\u5E94\u7528\u5206\u8EAB\u3001\u6E38\u620F\u7B49\u81EA\u7ED8/\u8DE8\u7528\u6237\u754C\u9762\u4E0D\u66B4\u9732\u65E0\u969C\u788D\u8282\u70B9\uFF08\u5E94\u7528\u5206\u8EAB\u8DD1\u5728\u72EC\u7ACB\u7528\u6237\u7A7A\u95F4\uFF09");',' console.log("\u3010\u63D0\u9192\u3011\u6B64\u65F6 currentPackage()/currentActivity() **\u4E5F\u4E0D\u53EF\u4FE1**\uFF08\u540C\u6837\u6765\u81EA\u65E0\u969C\u788D\u4E8B\u4EF6\uFF0C\u53EF\u80FD\u662F\u8FC7\u671F\u4FE1\u606F\uFF09");',' console.log("\u3010\u5EFA\u8BAE\u3011\u6539\u7528 device_screenshot \u622A\u56FE\uFF1A\u8BA9\u5177\u5907\u89C6\u89C9\u80FD\u529B\u7684\u6A21\u578B\u770B\u56FE\u5224\u65AD\uFF0C\u6216\u628A\u56FE\u7ED9\u7528\u6237\u770B\uFF1B\u518D\u6309\u5750\u6807 click(x,y) \u64CD\u4F5C");'," }",' console.log("\u3010\u5B8C\u6210\u3011\u754C\u9762\u5185\u5BB9\u5DF2\u8F93\u51FA");',"} catch (e) {",' console.log("\u3010\u754C\u9762\u3011\u8BFB\u53D6\u5931\u8D25\uFF1A" + e);',"}",""].join(`
|
|
84
|
+
`)}var t={reset:"\x1B[0m",bold:"\x1B[1m",dim:"\x1B[2m",italic:"\x1B[3m",underline:"\x1B[4m",inverse:"\x1B[7m",black:"\x1B[30m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",cyan:"\x1B[36m",white:"\x1B[37m",gray:"\x1B[90m",brightRed:"\x1B[91m",brightGreen:"\x1B[92m",brightYellow:"\x1B[93m",brightBlue:"\x1B[94m",brightMagenta:"\x1B[95m",brightCyan:"\x1B[96m",brightWhite:"\x1B[97m",bgRed:"\x1B[41m",bgGreen:"\x1B[42m",bgYellow:"\x1B[43m",bgBlue:"\x1B[44m",bgMagenta:"\x1B[45m",bgCyan:"\x1B[46m",bgGray:"\x1B[100m"},he={hide:"\x1B[?25l",show:"\x1B[?25h",up:(r=1)=>`\x1B[${r}A`,down:(r=1)=>`\x1B[${r}B`,right:(r=1)=>`\x1B[${r}C`,left:(r=1)=>`\x1B[${r}D`,to:(r,e)=>`\x1B[${r};${e}H`,col:r=>`\x1B[${r}G`,clearLine:"\x1B[2K",clearToEnd:"\x1B[0K",clearScreen:"\x1B[2J"},$n={enterAlt:"\x1B[?1049h",exitAlt:"\x1B[?1049l",save:"\x1B[s",restore:"\x1B[u"};function Gl(r){return r>=4352&&r<=4447||r>=11904&&r<=12350||r>=12353&&r<=13311||r>=13312&&r<=19903||r>=19968&&r<=40959||r>=40960&&r<=42191||r>=44032&&r<=55203||r>=63744&&r<=64255||r>=65072&&r<=65103||r>=65280&&r<=65376||r>=65504&&r<=65510||r>=127744&&r<=129791||r>=131072&&r<=262141}function H(r){let e=0;for(let n=0;n<r.length;n++){let s=r.codePointAt(n);if(s!==void 0){if(s===27){let i=/^\x1b\[[0-9;?]*[ -/]*[@-~]/.exec(r.slice(n));if(i){n+=i[0].length-1;continue}let o=/^\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)?/.exec(r.slice(n));if(o){n+=o[0].length-1;continue}}if(s>65535&&n++,s===9){e+=8-e%8;continue}s<32||s>=768&&s<=879||s>=8400&&s<=8447||s>=65024&&s<=65039||(e+=Gl(s)?2:1)}}return e}function Jl(r){return/^\x1b\[[0-9;]*m$/.test(r)}function ft(r,e){let n=[];for(let s of r.split(`
|
|
85
|
+
`)){if(s===""){n.push("");continue}let i="",o=0,a=[],l=s.match(/\x1b\[[0-9;?]*[A-Za-z]|./gu)??[];for(let c of l){let u=H(c);o+u>e&&i!==""&&(n.push(a.length>0?`${i}${t.reset}`:i),i=a.join(""),o=0),Jl(c)&&(c===t.reset||c==="\x1B[m"?a=[]:a.push(c)),i+=c,o+=u}n.push(a.length>0?`${i}${t.reset}`:i)}return n}function O(r,e){if(H(r)<=e)return r;let n=r.match(/\x1b\[[0-9;?]*[A-Za-z]|[\s\S]/gu)??[],s="",i=0,o=Math.max(0,e-1);for(let a of n){let l=H(a);if(i+l>o)break;s+=a,i+=l}return`${s}${t.reset}\u2026`}function Nt(r,e){let n=H(r);return r+" ".repeat(Math.max(0,e-n))}function ye(r){return r&&r.replace(/\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)?/g,"").replace(/\x1b\[[0-9;?]*[ -/]*[@-~]/g,"").replace(/\x1b[@-Z\\-_]/g,"").replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g,"")}async function Pi(r){let e=sc(r);if(e.error){K(e.error);return}switch(e.sub){case"serve":case"start":return Hl(e);case"connect":return Kl(e);case"apk":return ql(e);case"check":return Xl(e);case"shot":case"screenshot":return Wl(e);case"status":return Yl(e);case"list":case"ls":case"devices":return Zl(e);case"push":case"save":return Ei(e,"save");case"run":return Ei(e,"run");case"stop":return Ql(e);case"logs":case"log":return ec(e);case"help":case"-h":case"--help":case void 0:tc();return;default:K(`\u672A\u77E5\u5B50\u547D\u4EE4\uFF1A${e.sub}`,"\u53EF\u7528\uFF1Aserve / status / list / push / run / stop / logs");return}}async function Hl(r){let e=r.port,n=new Ze({port:e,baseDir:process.cwd(),onStatus:o=>process.stdout.write(`${t.gray}${o}${t.reset}
|
|
86
86
|
`),onDeviceAttach:o=>process.stdout.write(`
|
|
87
87
|
${t.green}\u25CF${t.reset} \u8BBE\u5907\u5DF2\u8FDE\u63A5\uFF1A${t.bold}${o.name}${t.reset}${t.gray}\uFF08${o.kind==="autojs6"?"AutoJs6":"AutoX.js"}${o.appVersionCode?` versionCode ${o.appVersionCode}`:""}\uFF09${t.reset}
|
|
88
88
|
`),onDeviceDetach:o=>process.stdout.write(`
|
|
@@ -99,33 +99,33 @@ ${t.bold}\u8BBE\u5907\u6865\u5DF2\u542F\u52A8${t.reset}
|
|
|
99
99
|
${t.yellow}\u26A0 AutoJs6 \u76D1\u542C\u672A\u542F\u52A8${t.reset}
|
|
100
100
|
${t.gray}${o instanceof Error?o.message:String(o)}${t.reset}
|
|
101
101
|
${t.gray}\uFF08AutoX.js \u90A3\u4FA7\u4E0D\u53D7\u5F71\u54CD\uFF0C\u4ECD\u53EF\u6B63\u5E38\u4F7F\u7528\uFF09${t.reset}
|
|
102
|
-
`)}if(i&&process.stdout.write(` ${t.gray}AutoJs6 \u76D1\u542C\u7AEF\u53E3\uFF1A${t.reset}${
|
|
102
|
+
`)}if(i&&process.stdout.write(` ${t.gray}AutoJs6 \u76D1\u542C\u7AEF\u53E3\uFF1A${t.reset}${Te}${t.gray}\uFF08\u624B\u673A\u70B9\u300C\u8FDE\u63A5\u7535\u8111 \u2192 \u5BA2\u6237\u7AEF\u6A21\u5F0F\u300D\u586B\u4E0B\u9762\u5730\u5740\uFF09${t.reset}
|
|
103
103
|
`+n.listenerUrls().map(o=>` ${t.gray}\u624B\u673A AutoJs6 \u586B\uFF1A${t.reset}${t.brightGreen}${o}${t.reset}
|
|
104
|
-
`).join("")),!s&&!i){
|
|
104
|
+
`).join("")),!s&&!i){K("\u8BBE\u5907\u6865\u6CA1\u80FD\u542F\u52A8\uFF1A\u4E24\u4E2A\u76D1\u542C\u7AEF\u53E3\u90FD\u4E0D\u53EF\u7528\u3002","\u5206\u522B\u88AB VSCode \u7684 Auto.js \u63D2\u4EF6\uFF089317\uFF09\u4E0E AutoJs6 \u6269\u5C55\uFF086347\uFF09\u5360\u7528\u65F6\u4F1A\u8FD9\u6837 \u2014\u2014 \u7981\u7528\u5176\u4E00\u5373\u53EF\u3002"),await n.stop(),process.exitCode=1;return}process.stdout.write(` ${t.gray}\u624B\u673A\u8FDE\u4E0A\u540E\u5373\u53EF\u63A8\u9001\u811A\u672C\uFF1B\u65E5\u5FD7\u4F1A\u663E\u793A\u5728\u8FD9\u91CC\u3002\u4FDD\u6301\u672C\u7A97\u53E3\u5F00\u542F\uFF0C\u505C\u6B62\uFF1ACtrl+C${t.reset}
|
|
105
105
|
|
|
106
|
-
`),await
|
|
106
|
+
`),await Mi(()=>n.stop())}async function Kl(r){let e=mt(),n=r.positional[0]?.trim()??"",s="",i=re;if(n){let a=/^(.*?)(?::(\d+))?$/.exec(n);s=(a?.[1]??n).trim();let l=a?.[2]?Number.parseInt(a[2],10):NaN;Number.isFinite(l)&&(i=l)}else e&&(s="127.0.0.1");if(!s){K("\u7F3A\u5C11\u624B\u673A\u5730\u5740",`\u7528\u6CD5\uFF1Axzh device connect <\u624B\u673AIP>[:\u7AEF\u53E3]\uFF08\u9ED8\u8BA4 ${re}\uFF09`),Lr({where:e?"phone":"pc"});return}let o=new Ze({port:r.port,baseDir:process.cwd(),onStatus:a=>process.stdout.write(`${t.gray}${a}${t.reset}
|
|
107
107
|
`),onDeviceAttach:a=>process.stdout.write(`
|
|
108
108
|
${t.green}\u25CF${t.reset} \u624B\u673A\u5DF2\u5C31\u7EEA\uFF1A${a.name}
|
|
109
109
|
`),onDeviceDetach:()=>process.stdout.write(`
|
|
110
110
|
${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
|
-
`)});try{await o.connectAutoJs6(s,i)}catch(a){
|
|
112
|
+
`)});try{await o.connectAutoJs6(s,i)}catch(a){K(a instanceof Error?a.message:String(a));return}if(process.stdout.write(`
|
|
113
113
|
${t.bold}\u6B63\u5728\u8FDE\u63A5\u624B\u673A${t.reset} ${t.brightGreen}${s}:${i}${t.reset}${t.gray}\uFF08AutoJs6 \u670D\u52A1\u5668\u6A21\u5F0F\uFF09${t.reset}
|
|
114
|
-
`),await
|
|
114
|
+
`),await Vl(o,6e3))process.stdout.write(`${t.green}\u2713${t.reset} \u5DF2\u8FDE\u63A5\u3002\u53EF\u4EE5\u63A8\u9001\u811A\u672C\u4E86\uFF1A${t.gray}xzh device run <\u811A\u672C>${t.reset}
|
|
115
115
|
|
|
116
116
|
`);else{let a=o.status().autojs6?.retrying??!1;if(process.stdout.write(a?`${t.yellow}\u6682\u65F6\u6CA1\u8FDE\u4E0A${t.reset}${t.gray}\uFF0C\u4ECD\u5728\u540E\u53F0\u6309\u9000\u907F\u91CD\u8BD5\u3002${t.reset}
|
|
117
117
|
|
|
118
118
|
`:`${t.red}\u8FDE\u4E0D\u4E0A\u624B\u673A${t.reset}${t.gray}\uFF08\u5DF2\u505C\u6B62\u91CD\u8BD5\uFF09\u3002${t.reset}
|
|
119
119
|
|
|
120
|
-
`),
|
|
120
|
+
`),Lr({where:e?"phone":"pc",address:`${s}:${i}`}),!a){await o.stop(),process.exitCode=1;return}process.stdout.write(`
|
|
121
121
|
${t.gray}\uFF08Ctrl+C \u9000\u51FA\uFF09${t.reset}
|
|
122
122
|
|
|
123
|
-
`)}await
|
|
123
|
+
`)}await Mi(()=>o.stop())}async function ql(r){Lr({where:mt()?"phone":"pc"})}async function Wl(r){let e=new pe(r.port),n=await e.devices();if(!n){K(`\u8FDE\u4E0D\u4E0A\u8BBE\u5907\u6865\uFF08127.0.0.1:${r.port}\uFF09`,"\u5148\u542F\u52A8\uFF1Axzh device serve");return}if(n.length===0){K("\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){
|
|
125
|
+
`);let s=await e.screenshot();if(!s.ok){K(s.message);return}let i=r.positional.find(o=>!o.startsWith("-"))??Nr.join(process.cwd(),`xzh-shot-${new Date().toISOString().replace(/[:.]/g,"-")}.jpg`);try{gt.writeFileSync(i,s.data)}catch(o){K(`\u4FDD\u5B58\u622A\u56FE\u5931\u8D25\uFF1A${o instanceof Error?o.message:String(o)}`);return}process.stdout.write(`${t.green}\u2713 \u5DF2\u4FDD\u5B58${t.reset} ${i} ${t.gray}\uFF08${Math.round(s.data.length/1024)} KB\uFF0CJPEG\uFF09${t.reset}
|
|
126
126
|
|
|
127
|
-
`)}async function
|
|
128
|
-
`),"utf8");let i=(await e.logs(1))?.length??0,o=await e.exec("run",s);if(!o.ok){gt.rmSync(s,{force:!0}),
|
|
127
|
+
`)}async function Xl(r){let e=new pe(r.port),n=await e.devices();if(!n){K(`\u8FDE\u4E0D\u4E0A\u8BBE\u5907\u6865\uFF08127.0.0.1:${r.port}\uFF09`,"\u5148\u542F\u52A8\uFF1Axzh device serve");return}if(n.length===0){K("\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=Nr.join(Ri.tmpdir(),`xzh-device-check-${Date.now()}.js`);gt.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){gt.rmSync(s,{force:!0}),K(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
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(gt.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}
|
|
@@ -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
|
|
144
|
+
`),process.exitCode=1}function Lr(r){let e=mn(),n=gn({where:r.where,abi:e.abi,address:r.address,localApk:fn(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 n.split(`
|
|
148
148
|
`))process.stdout.write(`${s?`${t.gray}${s}${t.reset}`:""}
|
|
149
149
|
`);process.stdout.write(`
|
|
150
|
-
`)}async function
|
|
150
|
+
`)}async function Vl(r,e){let n=Date.now()+e;for(;Date.now()<n;){if(r.status().autojs6?.connected)return!0;await new Promise(s=>setTimeout(s,200))}return r.status().autojs6?.connected??!1}function Mi(r){return new Promise(e=>{let n=!1,s=()=>{n||(n=!0,process.stdout.write(`
|
|
151
151
|
${t.gray}\u6B63\u5728\u505C\u6B62\u8BBE\u5907\u6865\u2026${t.reset}
|
|
152
|
-
`),r().finally(()=>e()))};process.once("SIGINT",s),process.once("SIGTERM",s)})}async function
|
|
152
|
+
`),r().finally(()=>e()))};process.once("SIGINT",s),process.once("SIGTERM",s)})}async function Yl(r){let n=await new pe(r.port).status();if(!n){process.stdout.write(`${t.yellow}\u8BBE\u5907\u6865\u672A\u8FD0\u884C${t.reset}${t.gray}\uFF08127.0.0.1:${r.port}\uFF09${t.reset}
|
|
153
153
|
${t.gray}\u542F\u52A8\uFF1Axzh device serve${t.reset}
|
|
154
154
|
`),process.exitCode=1;return}process.stdout.write(`
|
|
155
155
|
${t.green}\u25CF${t.reset} \u8BBE\u5907\u6865\u8FD0\u884C\u4E2D
|
|
@@ -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}${n.devices.length}
|
|
164
164
|
`);for(let s of n.devices){let i=s.kind==="autojs6"?"AutoJs6":"AutoX.js";process.stdout.write(` ${t.cyan}${s.name}${t.reset} ${t.gray}${s.id} \xB7 ${i}${s.appVersionCode?` versionCode ${s.appVersionCode}`:""}${t.reset}
|
|
165
165
|
`)}process.stdout.write(`
|
|
166
|
-
`)}async function
|
|
166
|
+
`)}async function Zl(r){let e=new pe(r.port),n=await e.devices();if(!n){K(`\u8FDE\u4E0D\u4E0A\u8BBE\u5907\u6865\uFF08127.0.0.1:${r.port}\uFF09`,"\u5148\u542F\u52A8\uFF1Axzh device serve");return}if(n.length===0){let s=await e.status();process.stdout.write(`${t.yellow}\u5F53\u524D\u6CA1\u6709\u5DF2\u8FDE\u63A5\u7684\u8BBE\u5907${t.reset}
|
|
167
167
|
`),s?.autojs6Listener&&process.stdout.write(`${t.gray}\u624B\u673A AutoJs6\u300C\u8FDE\u63A5\u7535\u8111 \u2192 \u5BA2\u6237\u7AEF\u6A21\u5F0F\u300D\u586B\uFF1A${t.reset}${s.autojs6Listener.urls.join(" \u6216 ")}
|
|
168
168
|
`),s?.urls.length&&process.stdout.write(`${t.gray}\u624B\u673A AutoX.js \u586B\uFF1A${t.reset}${s.urls.join(" \u6216 ")}
|
|
169
169
|
`),s?.autojs6&&process.stdout.write(`${t.gray}AutoJs6 \u51FA\u7AD9\u8FDE\u63A5\uFF1A${t.reset}${s.autojs6.address} `+(s.autojs6.retrying?"\uFF08\u8FDE\u63A5\u4E2D/\u7B49\u5F85\u91CD\u8BD5\uFF09":"\uFF08\u5DF2\u653E\u5F03\u91CD\u8BD5\uFF09")+`
|
|
@@ -171,21 +171,21 @@ ${t.green}\u25CF${t.reset} \u8BBE\u5907\u6865\u8FD0\u884C\u4E2D
|
|
|
171
171
|
${t.bold}\u5DF2\u8FDE\u63A5\u8BBE\u5907\uFF08${n.length}\uFF09${t.reset}
|
|
172
172
|
`);for(let s of n){let i=s.kind==="autojs6"?"AutoJs6":"AutoX.js";process.stdout.write(` ${t.cyan}${s.name}${t.reset} ${t.gray}${s.id} \xB7 ${i}${s.appVersionCode?` versionCode ${s.appVersionCode}`:""}${t.reset}
|
|
173
173
|
`)}process.stdout.write(`
|
|
174
|
-
`)}async function
|
|
174
|
+
`)}async function Ei(r,e){let n=r.positional[0];if(!n){K(`\u7528\u6CD5\uFF1Axzh device ${r.sub} <\u811A\u672C\u6587\u4EF6>`);return}let i=await new pe(r.port).exec(e,n,r.device);if(!i.ok){K(i.message??"\u6307\u4EE4\u5931\u8D25");return}let o=e==="run"?"\u5DF2\u63A8\u9001\u5230\u8BBE\u5907\u5E76\u5F00\u59CB\u8FD0\u884C":"\u5DF2\u4FDD\u5B58\u5230\u8BBE\u5907";process.stdout.write(`${t.green}\u2713${t.reset} ${o}\uFF1A${i.path}
|
|
175
175
|
${t.gray} \u76EE\u6807\u8BBE\u5907\uFF08${i.delivered}\uFF09\uFF1A${(i.devices??[]).join("\u3001")}${t.reset}
|
|
176
176
|
`+(e==="run"?`${t.gray} \u67E5\u770B\u8F93\u51FA\uFF1Axzh device logs${t.reset}
|
|
177
|
-
`:""))}async function
|
|
178
|
-
`)}async function
|
|
177
|
+
`:""))}async function Ql(r){let e=new pe(r.port),n=r.all?void 0:r.positional[0],s=await e.exec(n?"stop":"stopAll",n,r.device);if(!s.ok){K(s.message??"\u505C\u6B62\u5931\u8D25");return}process.stdout.write(`${t.green}\u2713${t.reset} ${n?`\u5DF2\u505C\u6B62 ${n}`:"\u5DF2\u505C\u6B62\u5168\u90E8\u811A\u672C"}
|
|
178
|
+
`)}async function ec(r){let n=await new pe(r.port).logs(r.limit);if(!n){K(`\u8FDE\u4E0D\u4E0A\u8BBE\u5907\u6865\uFF08127.0.0.1:${r.port}\uFF09`,"\u5148\u542F\u52A8\uFF1Axzh device serve");return}if(n.length===0){process.stdout.write(`${t.gray}\u6682\u65E0\u8BBE\u5907\u65E5\u5FD7\u3002${t.reset}
|
|
179
179
|
`);return}process.stdout.write(`
|
|
180
180
|
${t.bold}\u6700\u8FD1 ${n.length} \u6761\u8BBE\u5907\u65E5\u5FD7${t.reset}
|
|
181
181
|
`);for(let s of n){let i=new Date(s.at).toLocaleTimeString();process.stdout.write(`${t.gray}${i} [${s.device}]${t.reset} ${s.text}
|
|
182
182
|
`)}process.stdout.write(`
|
|
183
|
-
`)}function
|
|
183
|
+
`)}function tc(){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}
|
|
187
187
|
${t.green}xzh device connect <\u624B\u673AIP>${t.reset} ${t.gray}[:\u7AEF\u53E3]${t.reset}
|
|
188
|
-
\u8FDE\u63A5\u624B\u673A\u4E0A\u7684 AutoJs6\uFF08\u670D\u52A1\u5668\u6A21\u5F0F\uFF0C\u9ED8\u8BA4 ${
|
|
188
|
+
\u8FDE\u63A5\u624B\u673A\u4E0A\u7684 AutoJs6\uFF08\u670D\u52A1\u5668\u6A21\u5F0F\uFF0C\u9ED8\u8BA4 ${re}\uFF09\u5E76\u5E38\u9A7B\u3002
|
|
189
189
|
\u624B\u673A\u672C\u673A\u8FD0\u884C\u65F6\u53EF\u7701\u7565\u5730\u5740\uFF08\u81EA\u52A8\u7528 127.0.0.1\uFF09
|
|
190
190
|
${t.green}xzh device serve${t.reset} ${t.gray}[--port 9317]${t.reset}
|
|
191
191
|
\u53CD\u5411\uFF1A\u7B49\u624B\u673A\u4E0A\u7684 AutoX.js \u8FDE\u8FC7\u6765\uFF08\u624B\u673A\u7AEF\u586B\u5B83\u6253\u5370\u7684 ws:// \u5730\u5740\uFF09
|
|
@@ -214,17 +214,17 @@ ${t.bold}\u4E24\u79CD\u8FDE\u63A5\u65B9\u5F0F${t.reset}
|
|
|
214
214
|
${t.bold}\u6CE8\u610F${t.reset}
|
|
215
215
|
\xB7 serve \u4F1A\u5360\u7528 ${Fe} \u7AEF\u53E3\uFF1A${t.yellow}VSCode \u7684 Auto.js \u63D2\u4EF6\u7528\u540C\u4E00\u4E2A\u7AEF\u53E3\uFF0C\u4E24\u8005\u4E0D\u80FD\u540C\u65F6\u5F00${t.reset}\u3002
|
|
216
216
|
\xB7 \u53EA\u505A\u5355\u6587\u4EF6\u63A8\u9001\uFF08\u8FD0\u884C / \u4FDD\u5B58 / \u505C\u6B62 / \u65E5\u5FD7\uFF09\uFF0C\u9879\u76EE\u7EA7\uFF08zip\uFF09\u540C\u6B65\u8BF7\u7528 VSCode \u63D2\u4EF6\u3002
|
|
217
|
-
\xB7 \u7384\u732A\u4E0D\u6253\u5305 AutoJs6 \u5B89\u88C5\u5305\uFF08\u6BCF\u4E2A ABI \u7EA6 130 MB\uFF09\uFF0C\u7531 ${t.reset}${
|
|
217
|
+
\xB7 \u7384\u732A\u4E0D\u6253\u5305 AutoJs6 \u5B89\u88C5\u5305\uFF08\u6BCF\u4E2A ABI \u7EA6 130 MB\uFF09\uFF0C\u7531 ${t.reset}${Dr}${t.gray} \u81EA\u884C\u4E0B\u8F7D\u3002
|
|
218
218
|
\xB7 \u5728 xzh \u754C\u9762\u5185\u4E5F\u53EF\u4EE5\u64CD\u4F5C\uFF1A${t.green}/device${t.reset}\uFF08\u89C1 /help\uFF09\u3002
|
|
219
|
-
`)}var
|
|
219
|
+
`)}var nc=new Set(["--port","--device","-n","--limit"]),rc=new Set(["--all","-h","--help"]);function sc(r){let e={sub:void 0,positional:[],port:ze(),limit:50,all:!1},n=[...r];for(e.sub=n.shift();n.length>0;){let s=n.shift();if(rc.has(s)){s==="--all"?e.all=!0:e.positional.push(s);continue}if(s==="--"){e.positional.push(...n);break}let i=/^(--[a-z-]+)=(.*)$/.exec(s);if(i){if(_i(e,i[1],i[2]),e.error)return e;continue}if(nc.has(s)){let o=n.shift();if(o===void 0)return{...e,error:`${s} \u7F3A\u5C11\u53D6\u503C`};if(_i(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 _i(r,e,n){switch(e){case"--port":{let s=Number.parseInt(n,10);if(!Number.isFinite(s)||s<1||s>65535){r.error=`\u7AEF\u53E3\u4E0D\u5408\u6CD5\uFF1A${n}`;return}r.port=s;return}case"--device":r.device=n;return;case"-n":case"--limit":{let s=Number.parseInt(n,10);if(!Number.isFinite(s)||s<1){r.error=`\u6761\u6570\u4E0D\u5408\u6CD5\uFF1A${n}`;return}r.limit=s;return}default:r.error=`\u672A\u77E5\u53C2\u6570\uFF1A${e}`}}function K(r,e){process.stdout.write(`${t.red}\u2717 ${r}${t.reset}
|
|
220
220
|
`),e&&process.stdout.write(`${t.gray} ${e}${t.reset}
|
|
221
|
-
`),process.exitCode=1}var
|
|
222
|
-
`)}catch{}return i}function
|
|
221
|
+
`),process.exitCode=1}var xe=v(require("fs")),He=v(require("path"));var Ii=v(require("crypto")),se=v(require("fs")),ve=v(require("path"));function ic(){return ve.join(E(),"sessions")}function Di(r){let e=Ii.createHash("sha1").update(ve.resolve(r)).digest("hex").slice(0,10),n=ve.basename(r)||"project";return ve.join(ic(),`${n}-${e}`)}function jt(r,e){let n=Di(r);le(n);let s=new Date().toISOString().replace(/[:.]/g,"-"),i=ve.join(n,`${s}.jsonl`);for(let o=2;se.existsSync(i);o++)i=ve.join(n,`${s}-${o}.jsonl`);try{se.writeFileSync(i,`${JSON.stringify({type:"meta",cwd:ve.resolve(r),version:e,startedAt:new Date().toISOString()})}
|
|
222
|
+
`)}catch{}return i}function Ft(r,e){if(e.length!==0)try{let n=e.map(s=>{let i=s.images&&s.images.length>0?{...s,images:void 0,content:`${s.content??""}
|
|
223
223
|
|
|
224
224
|
[\u56FE\u7247\u5DF2\u7701\u7565\uFF1A\u4F1A\u8BDD\u6587\u4EF6\u4E0D\u4FDD\u5B58\u56FE\u7247]`}:s;return`${JSON.stringify({type:"message",message:i})}
|
|
225
|
-
`});
|
|
226
|
-
`)[0]??"";try{a=JSON.parse(l).startedAt??null}catch{}s.push({file:o,startedAt:a,bytes:
|
|
227
|
-
`))if(n.trim())try{let s=JSON.parse(n);s.type==="message"&&s.message?.role&&e.push(s.message)}catch{}}catch{}return e}var
|
|
225
|
+
`});se.appendFileSync(r,n.join(""))}catch{}}function jr(r){let e=Di(r),n;try{n=se.readdirSync(e).filter(i=>i.endsWith(".jsonl")).sort().reverse()}catch{return[]}let s=[];for(let i of n){let o=ve.join(e,i);try{let a=null,l=se.readFileSync(o,"utf8").split(`
|
|
226
|
+
`)[0]??"";try{a=JSON.parse(l).startedAt??null}catch{}s.push({file:o,startedAt:a,bytes:se.statSync(o).size})}catch{}}return s}function Fr(r){let e=[];try{for(let n of se.readFileSync(r,"utf8").split(`
|
|
227
|
+
`))if(n.trim())try{let s=JSON.parse(n);s.type==="message"&&s.message?.role&&e.push(s.message)}catch{}}catch{}return e}var Oi={name:"code-explorer",description:'Fast subagent specialized in codebase exploration. Use it whenever the task requires searching across multiple files, directories, or patterns, or when the scope of code exploration is too large for a single read_file or grep call. When calling it, state the desired thoroughness level in the prompt: "quick" for a basic lookup, "medium" for moderate exploration, or "very thorough" for comprehensive analysis across multiple locations and naming conventions. \u5B83\u662F**\u53EA\u8BFB**\u5B50\u4EE3\u7406\uFF1A\u53EA\u56DE\u62A5\u53D1\u73B0\u4E0E\u8BC1\u636E\uFF0C\u4E0D\u4F1A\u4FEE\u6539\u4EFB\u4F55\u6587\u4EF6\uFF1B\u9700\u8981\u5B9E\u9645\u6539\u4EE3\u7801\u65F6\u4E0D\u8981\u6D3E\u5B83\uFF0C\u81EA\u5DF1\u52A8\u624B\u3002',toolNames:["read_file","list_dir","glob","grep","list_skills","load_skill"],systemPrompt({cwd:r,description:e,prompt:n}){return`\u4F60\u662F\u300C\u7384\u732A\u300D\u6D3E\u51FA\u7684 **code-explorer\uFF08\u4EE3\u7801\u5E93\u63A2\u7D22\uFF09\u5B50\u4EE3\u7406**\uFF0C\u53EA\u505A\u8C03\u7814\u5E76\u56DE\u62A5\u53D1\u73B0\u3002
|
|
228
228
|
|
|
229
229
|
\u5DE5\u4F5C\u76EE\u5F55\uFF1A${r}
|
|
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
|
-
${n.trim()}`}};var
|
|
254
|
+
${n.trim()}`}};var Li={name:"test-runner",description:"Run the project's tests (full suite or specific files) and report a verified pass/fail summary: failing cases, causes with exact file:line references, and the exact commands to reproduce. Use it whenever test output would be long, when you need to know whether the suite passes after your changes, or when you want failures triaged (assertion vs environment vs code bug) without reading raw logs yourself. \u5B83\u662F**\u53EA\u8FD0\u884C\u3001\u4E0D\u4FEE\u6539**\u7684\u5B50\u4EE3\u7406\uFF1A\u4E0D\u6539\u4EE3\u7801\u3001\u4E0D\u88C5\u4F9D\u8D56\u3001\u4E0D\u505A git \u5199\u64CD\u4F5C\uFF1B\u9700\u8981\u6839\u636E\u5931\u8D25\u4FEE\u6539\u4EE3\u7801\u65F6\u4E0D\u8981\u6D3E\u5B83\uFF0C\u81EA\u5DF1\u52A8\u624B\u3002\u5728 prompt \u91CC\u5199\u6E05\u695A\u8981\u8DD1\u54EA\u4E9B\u6D4B\u8BD5\uFF08\u5168\u90E8\u8FD8\u662F\u6307\u5B9A\u6587\u4EF6\uFF09\u4E0E\u4F60\u5DF2\u77E5\u7684\u6D4B\u8BD5\u547D\u4EE4\uFF08\u5982\u679C\u6709\u7684\u8BDD\uFF09\u3002",toolNames:["bash","read_file","glob","grep","list_dir"],systemPrompt({cwd:r,description:e,prompt:n}){return`\u4F60\u662F\u300C\u7384\u732A\u300D\u6D3E\u51FA\u7684 **test-runner\uFF08\u6D4B\u8BD5\u8FD0\u884C\uFF09\u5B50\u4EE3\u7406**\uFF0C\u53EA\u8D1F\u8D23\u8FD0\u884C\u6D4B\u8BD5\u3001\u89E3\u8BFB\u7ED3\u679C\u5E76\u6C47\u62A5\u3002
|
|
255
255
|
|
|
256
256
|
\u5DE5\u4F5C\u76EE\u5F55\uFF1A${r}
|
|
257
257
|
\u5B50\u4EFB\u52A1\uFF1A${e}
|
|
@@ -280,8 +280,8 @@ ${n.trim()}`}};var Di={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
|
-
${n.trim()}`}};var $t=[
|
|
284
|
-
`),
|
|
283
|
+
${n.trim()}`}};var $t=[Oi,Li],Br=$t[0].name;function Bt(){return $t.map(r=>r.name)}function yn(r){let e=r?.trim();return e?$t.find(n=>n.name===e):$t.find(n=>n.name===Br)}var oc=$t.map(r=>`- ${r.name}: ${r.description}`).join(`
|
|
284
|
+
`),Ni={name:"task",description:`\u6D3E\u751F\u4E00\u4E2A**\u5B50\u4EE3\u7406**\u53BB\u72EC\u7ACB\u5B8C\u6210\u4E00\u4EF6\u5B50\u4EFB\u52A1\uFF0C\u53EA\u628A\u6700\u7EC8\u7ED3\u8BBA\u8FD4\u56DE\u7ED9\u4F60\uFF08\u4E2D\u95F4\u8FC7\u7A0B\u4E0D\u8FDB\u4F60\u7684\u4E0A\u4E0B\u6587\uFF09\u3002
|
|
285
285
|
|
|
286
286
|
**\u4EC0\u4E48\u65F6\u5019\u8BE5\u7528\u5B83**\uFF08\u6EE1\u8DB3\u4EFB\u4E00\u6761\u5C31\u8BE5\u7528\uFF0C\u4E0D\u8981\u56E0\u4E3A\u300C\u81EA\u5DF1\u505A\u66F4\u7701\u4E8B\u300D\u800C\u7565\u8FC7\uFF09\uFF1A
|
|
287
287
|
\xB7 \u4E00\u4EF6\u5B50\u4EFB\u52A1\u9884\u8BA1\u8981\u8BFB **3 \u4E2A\u4EE5\u4E0A\u6587\u4EF6**\uFF1B
|
|
@@ -293,59 +293,59 @@ ${n.trim()}`}};var $t=[Ii,Di],jr=$t[0].name;function Ft(){return $t.map(r=>r.nam
|
|
|
293
293
|
**prompt \u5FC5\u987B\u81EA\u5305\u542B**\uFF08\u5B50\u4EE3\u7406\u770B\u4E0D\u5230\u6211\u4EEC\u7684\u5BF9\u8BDD\u5386\u53F2\uFF09\uFF1A\u80CC\u666F\u3001\u76EE\u6807\u3001\u5DF2\u77E5\u7EBF\u7D22\u3001\u671F\u671B\u7684\u8F93\u51FA\u683C\u5F0F\u4E0E\u8FB9\u754C\uFF08\u54EA\u4E9B\u4E8B\u4E0D\u8981\u505A\uFF09\u3002
|
|
294
294
|
|
|
295
295
|
\u53EF\u7528\u5B50\u4EE3\u7406\uFF1A
|
|
296
|
-
${
|
|
296
|
+
${oc}
|
|
297
297
|
|
|
298
|
-
\u5B50\u4EE3\u7406\u4E0D\u4F1A\u5199\u5165\u9879\u76EE\u8BB0\u5FC6 \u2014\u2014 \u8BB0\u5FC6\u7531\u4F60\u6839\u636E\u5B83\u7684\u7ED3\u8BBA\u7EDF\u4E00\u8BB0\u5F55\u3002`,parallelSafe:!0,parameters:{type:"object",properties:{subagent_name:{type:"string",enum:
|
|
298
|
+
\u5B50\u4EE3\u7406\u4E0D\u4F1A\u5199\u5165\u9879\u76EE\u8BB0\u5FC6 \u2014\u2014 \u8BB0\u5FC6\u7531\u4F60\u6839\u636E\u5B83\u7684\u7ED3\u8BBA\u7EDF\u4E00\u8BB0\u5F55\u3002`,parallelSafe:!0,parameters:{type:"object",properties:{subagent_name:{type:"string",enum:Bt(),description:`\u8981\u6D3E\u751F\u7684\u5B50\u4EE3\u7406\u540D\u79F0\uFF0C\u9ED8\u8BA4 ${Br}\u3002`},description:{type:"string",description:"\u5B50\u4EFB\u52A1\u7684\u4E00\u53E5\u8BDD\u8BF4\u660E\uFF083-5 \u4E2A\u8BCD\uFF09\uFF0C\u7528\u4E8E\u754C\u9762\u663E\u793A\u4E0E\u7ED3\u679C\u6458\u8981"},prompt:{type:"string",description:"\u4EA4\u7ED9\u5B50\u4EE3\u7406\u7684\u5B8C\u6574\u4EFB\u52A1\u63CF\u8FF0\u3002\u5B50\u4EE3\u7406\u770B\u4E0D\u5230\u5F53\u524D\u5BF9\u8BDD\uFF0C\u5FC5\u987B\u81EA\u5305\u542B\uFF1A\u80CC\u666F\u3001\u76EE\u6807\u3001\u5DF2\u77E5\u7EBF\u7D22\u3001\u8981\u4EA7\u51FA\u7684\u7ED3\u8BBA\u4E0E\u683C\u5F0F\u3001\u4E0D\u8981\u505A\u4EC0\u4E48\u3002"}},required:["description","prompt"]},async execute(r,e){if(!e.spawnAgent)return{ok:!1,content:"\u9519\u8BEF\uFF1A\u5F53\u524D\u73AF\u5883\u4E0D\u652F\u6301\u6D3E\u751F\u5B50\u4EE3\u7406\u3002"};let n=typeof r.description=="string"?r.description.trim():"",s=typeof r.prompt=="string"?r.prompt.trim():"";if(!n||!s)return{ok:!1,content:"\u9519\u8BEF\uFF1Adescription \u4E0E prompt \u5747\u4E0D\u80FD\u4E3A\u7A7A\u3002"};let i=typeof r.subagent_name=="string"?r.subagent_name.trim():"";if(i&&!yn(i))return{ok:!1,content:`\u9519\u8BEF\uFF1A\u672A\u77E5\u5B50\u4EE3\u7406 "${i}"\u3002\u53EF\u7528\uFF1A${Bt().join("\u3001")}`};try{return await e.spawnAgent({subagentName:i||void 0,description:n,prompt:s})}catch(o){return{ok:!1,content:`\u5B50\u4EE3\u7406\u6267\u884C\u5931\u8D25\uFF1A${o instanceof Error?o.message:String(o)}`}}}};var ji=require("child_process"),vn=v(require("path"));var yt=3e4,ac=12e4,lc=6e5,cc=1500,uc=`[\u8F93\u51FA\u88AB\u622A\u65AD] \u5355\u6761\u547D\u4EE4\u7684\u6355\u83B7\u4E0A\u9650\u4E3A ${yt} \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 dc(r,e,n,s){return new Promise(i=>{if(s?.aborted){i({stdout:"",stderr:"\u547D\u4EE4\u5DF2\u88AB\u4E2D\u65AD\uFF08\u5728\u6267\u884C\u524D\uFF09\u3002",code:null,timedOut:!1,aborted:!0,truncated:!1});return}let o=process.platform==="win32",a=o?"cmd.exe":process.env.SHELL||"bash",c=(0,ji.spawn)(a,o?["/d","/s","/c",r]:["-lc",r],{cwd:e,env:process.env,windowsHide:!0,detached:!o}),u="",h="",d=!1,p=!1,m=!1,y=!1,g,f=R=>{let w=c.pid;if(w!==void 0)try{process.kill(-w,R)}catch{try{c.kill(R)}catch{}}},b=R=>{m||(m=!0,clearTimeout(N),g&&clearTimeout(g),s?.removeEventListener("abort",P),i({stdout:u,stderr:h,code:R,timedOut:d,aborted:p,truncated:y}))},$=()=>{g&&clearTimeout(g),g=setTimeout(()=>b(null),cc)},P=()=>{p=!0,f("SIGKILL"),$()},N=setTimeout(()=>{d=!0,f("SIGKILL"),$()},n);s?.addEventListener("abort",P,{once:!0}),c.stdout?.on("data",R=>{if(u.length>=yt){y=!0;return}u+=R.toString(),u.length>=yt&&(y=!0)}),c.stderr?.on("data",R=>{if(h.length>=yt){y=!0;return}h+=R.toString(),h.length>=yt&&(y=!0)}),c.on("error",R=>{h+=String(R),b(-1)}),c.on("exit",R=>{g&&clearTimeout(g),g=setTimeout(()=>b(R),120)}),c.on("close",R=>b(R))})}var Fi={name:"bash",description:"\u5728\u7EC8\u7AEF\u4E2D\u6267\u884C shell \u547D\u4EE4\u5E76\u8FD4\u56DE\u8F93\u51FA\u3002\u9002\u7528\u4E8E\u8FD0\u884C\u6D4B\u8BD5\u3001\u6784\u5EFA\u3001\u5B89\u88C5\u4F9D\u8D56\u3001git \u64CD\u4F5C\u7B49\u3002\u547D\u4EE4\u5728\u975E\u4EA4\u4E92\u5F0F shell \u4E2D\u6267\u884C\uFF0C\u957F\u65F6\u95F4\u8FD0\u884C\u7684\u547D\u4EE4\u8BF7\u8BBE\u7F6E timeout\u3002",requiresConfirmation:!0,danger:!0,parameters:{type:"object",properties:{command:{type:"string",description:"\u8981\u6267\u884C\u7684 shell \u547D\u4EE4"},timeout:{type:"integer",description:"\u8D85\u65F6\u65F6\u95F4\uFF08\u6BEB\u79D2\uFF0C\u9ED8\u8BA4 120000\uFF0C\u6700\u5927 600000\uFF09"},cwd:{type:"string",description:"\u547D\u4EE4\u6267\u884C\u76EE\u5F55\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\uFF09"}},required:["command"]},async execute(r,e){let n=typeof r.command=="string"?r.command:"";if(!n.trim())return{ok:!1,content:"\u9519\u8BEF\uFF1Acommand \u4E0D\u80FD\u4E3A\u7A7A"};let s=e.cwd;if(typeof r.cwd=="string"&&r.cwd){let u=ee(r.cwd);s=vn.isAbsolute(u)?u:vn.resolve(e.cwd,u)}let i=typeof r.timeout=="number"?r.timeout:ac,o=Math.min(Math.max(1e3,i),lc),a=await dc(n,s,o,e.signal),l=[];a.stdout.trim()&&l.push(a.stdout.trimEnd()),a.stderr.trim()&&l.push(`[stderr]
|
|
299
299
|
${a.stderr.trimEnd()}`),a.aborted&&l.push("[\u4E2D\u65AD] \u547D\u4EE4\u5DF2\u88AB\u7528\u6237\u4E2D\u65AD\uFF0C\u5176\u8FDB\u7A0B\u7EC4\u5DF2\u7EC8\u6B62\u3002"),a.timedOut&&l.push(`[\u8B66\u544A] \u547D\u4EE4\u5728 ${o}ms \u540E\u8D85\u65F6\u5E76\u88AB\u7EC8\u6B62\u3002`),l.push(`[\u9000\u51FA\u7801] ${a.code??"\u672A\u77E5"}`);let c=l.join(`
|
|
300
300
|
|
|
301
|
-
`);return{ok:a.code===0&&!a.timedOut&&!a.aborted,content:(a.truncated?`${
|
|
301
|
+
`);return{ok:a.code===0&&!a.timedOut&&!a.aborted,content:(a.truncated?`${uc}
|
|
302
302
|
|
|
303
|
-
`:"")+c.slice(0,yt),summary:a.aborted?"\u5DF2\u4E2D\u65AD":a.timedOut?"\u8D85\u65F6":a.code===0?"\u6267\u884C\u6210\u529F":`\u9000\u51FA\u7801 ${a.code}`}}};var
|
|
304
|
-
`))if(s.trim())try{let i=JSON.parse(s);typeof i.file=="string"&&n.push({file:i.file,backup:typeof i.backup=="string"?i.backup:null,time:typeof i.time=="string"?i.time:""})}catch{}return n}catch{return[]}}function
|
|
303
|
+
`:"")+c.slice(0,yt),summary:a.aborted?"\u5DF2\u4E2D\u65AD":a.timedOut?"\u8D85\u65F6":a.code===0?"\u6267\u884C\u6210\u529F":`\u9000\u51FA\u7801 ${a.code}`}}};var I=v(require("fs")),L=v(require("path"));var Bi=v(require("crypto")),X=v(require("fs")),be=v(require("path"));var pc=50,hc=0;function vt(r){let e=Bi.createHash("sha1").update(be.resolve(r)).digest("hex").slice(0,10),n=be.basename(r)||"project";return be.join(E(),"backups",`${n}-${e}`)}function Ui(r){return be.join(vt(r),"manifest.jsonl")}function zi(r){try{let e=X.readFileSync(Ui(r),"utf8"),n=[];for(let s of e.split(`
|
|
304
|
+
`))if(s.trim())try{let i=JSON.parse(s);typeof i.file=="string"&&n.push({file:i.file,backup:typeof i.backup=="string"?i.backup:null,time:typeof i.time=="string"?i.time:""})}catch{}return n}catch{return[]}}function Gi(r,e){for(le(vt(r));e.length>pc;){let n=e.shift();if(n?.backup)try{X.rmSync(be.join(vt(r),n.backup),{force:!0})}catch{}}X.writeFileSync(Ui(r),e.map(n=>JSON.stringify(n)).join(`
|
|
305
305
|
`)+`
|
|
306
|
-
`)}function
|
|
307
|
-
`).map(n=>n.trim()).filter(n=>n&&!n.startsWith("#")&&!n.startsWith("!")):[]}catch{return[]}}function
|
|
308
|
-
`),a=Math.max(1,
|
|
306
|
+
`)}function Ur(r,e){try{le(vt(e));let n=zi(e),s=null;if(X.existsSync(r)){let i=!1;try{i=X.statSync(r).isFile()}catch{i=!1}if(i){let o=new Date().toISOString().replace(/[:.]/g,"-");s=`${be.basename(r)}.${o}-${++hc}.bak`,X.copyFileSync(r,be.join(vt(e),s))}}n.push({file:r,backup:s,time:new Date().toISOString()}),Gi(e,n)}catch{}}function Ji(r){let e=zi(r),n=e[e.length-1];if(!n)return"\u6CA1\u6709\u53EF\u64A4\u9500\u7684\u4FEE\u6539\u3002";try{if(n.backup){let s=be.join(vt(r),n.backup);if(!X.existsSync(s))return`\u64A4\u9500\u5931\u8D25\uFF1A\u5FEB\u7167\u6587\u4EF6\u5DF2\u4E0D\u5B58\u5728\uFF08${n.backup}\uFF09\u3002`;X.copyFileSync(s,n.file)}else X.existsSync(n.file)&&X.rmSync(n.file,{force:!0})}catch(s){return`\u64A4\u9500\u5931\u8D25\uFF1A${s instanceof Error?s.message:String(s)}`}return e.pop(),Gi(r,e),n.backup?`\u2713 \u5DF2\u64A4\u9500\u5BF9 ${n.file} \u7684\u4FEE\u6539\uFF08\u6062\u590D\u4E3A\u4FEE\u6539\u524D\u7684\u5185\u5BB9\uFF09\u3002`:`\u2713 \u5DF2\u64A4\u9500\uFF1A\u5220\u9664\u4E86\u7384\u732A\u65B0\u5EFA\u7684\u6587\u4EF6 ${n.file}\u3002`}var Hi=2e3,Gr=2*1024*1024,zr=200,bn=200,mc=1024*1024,Ki=2e3;function fc(r){return/\((?:[^()\\]|\\.)*[+*](?:[^()\\]|\\.)*\)\s*[+*{]/.test(r)?!0:/\((?:[^()\\]|\\.)*\|(?:[^()\\]|\\.)*\)\s*[+*{]/.test(r)}function Xi(r){let e;try{e=I.statSync(r)}catch{return null}return e.isDirectory()?{problem:`\u9519\u8BEF\uFF1A${r} \u662F\u4E00\u4E2A\u76EE\u5F55\uFF0C\u4E0D\u80FD\u4F5C\u4E3A\u6587\u4EF6\u5199\u5165`}:e.isFile()?e.size>Gr?{problem:`\u9519\u8BEF\uFF1A\u6587\u4EF6\u8FC7\u5927\uFF08${(e.size/1024/1024).toFixed(1)}MB\uFF09\uFF0C\u8D85\u51FA ${Gr/1024/1024}MB \u9650\u5236`}:null:{problem:`\u9519\u8BEF\uFF1A${r} \u4E0D\u662F\u666E\u901A\u6587\u4EF6\uFF08\u8BBE\u5907\u6587\u4EF6 / \u7BA1\u9053 / socket\uFF09\uFF0C\u62D2\u7EDD\u5199\u5165`}}var Vi=new Set([".git","node_modules","dist","build","out",".next",".nuxt",".cache","coverage",".venv","venv","__pycache__",".idea",".vscode-test"]);function gc(r){try{let e=L.join(r,".gitignore");return I.existsSync(e)?I.readFileSync(e,"utf8").split(`
|
|
307
|
+
`).map(n=>n.trim()).filter(n=>n&&!n.startsWith("#")&&!n.startsWith("!")):[]}catch{return[]}}function $c(r,e){let n=r.split(L.sep).join("/"),s=L.basename(n);for(let i of e){let o=i.replace(/^\//,"").replace(/\/$/,"");if(o){if(o.includes("*")){try{if(Sn(o).test(n)||Sn(o).test(s))return!0}catch{}continue}if(n===o||n.startsWith(`${o}/`)||s===o)return!0}}return!1}function bt(r,e){let n=ee(r);return L.isAbsolute(n)?n:L.resolve(e,n)}function me(r,e=""){return typeof r=="string"?r:e}function qi(r,e){return typeof r=="number"&&Number.isFinite(r)?r:e}function Jr(r){return r.subarray(0,8e3).includes(0)}var Yi={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 ${Hi}\uFF09`}},required:["path"]},async execute(r,e){let n=bt(me(r.path),e.cwd);if(!I.existsSync(n))return{ok:!1,content:`\u9519\u8BEF\uFF1A\u6587\u4EF6\u4E0D\u5B58\u5728\uFF1A${n}`};let s=I.statSync(n);if(s.isDirectory())return{ok:!1,content:`\u9519\u8BEF\uFF1A${n} \u662F\u4E00\u4E2A\u76EE\u5F55\uFF0C\u8BF7\u4F7F\u7528 list_dir`};if(!s.isFile())return{ok:!1,content:`\u9519\u8BEF\uFF1A${n} \u4E0D\u662F\u666E\u901A\u6587\u4EF6\uFF08\u8BBE\u5907\u6587\u4EF6 / \u7BA1\u9053 / socket\uFF09\uFF0C\u62D2\u7EDD\u8BFB\u53D6`};if(s.size>Gr)return{ok:!1,content:`\u9519\u8BEF\uFF1A\u6587\u4EF6\u8FC7\u5927\uFF08${(s.size/1024/1024).toFixed(1)}MB\uFF09\uFF0C\u8D85\u51FA 2MB \u9650\u5236`};let i=I.readFileSync(n);if(Jr(i))return{ok:!1,content:`\u9519\u8BEF\uFF1A${n} \u662F\u4E8C\u8FDB\u5236\u6587\u4EF6\uFF0C\u65E0\u6CD5\u4F5C\u4E3A\u6587\u672C\u8BFB\u53D6`};let o=i.toString("utf8").split(`
|
|
308
|
+
`),a=Math.max(1,qi(r.offset,1)),l=Math.max(1,qi(r.limit,Hi)),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
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`}}},
|
|
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`}}},Zi={name:"write_file",description:"\u5199\u5165\uFF08\u8986\u76D6\uFF09\u6587\u4EF6\u3002\u4F1A\u521B\u5EFA\u7F3A\u5931\u7684\u7236\u76EE\u5F55\u3002\u8BF7\u8C28\u614E\u4F7F\u7528\uFF0C\u4F18\u5148\u4F7F\u7528 edit_file \u505A\u5C40\u90E8\u4FEE\u6539\u3002",requiresConfirmation:!0,parameters:{type:"object",properties:{path:{type:"string",description:"\u6587\u4EF6\u8DEF\u5F84"},content:{type:"string",description:"\u8981\u5199\u5165\u7684\u5B8C\u6574\u6587\u4EF6\u5185\u5BB9"}},required:["path","content"]},async execute(r,e){let n=bt(me(r.path),e.cwd),s=me(r.content),i=Xi(n);if(i)return{ok:!1,content:i.problem};try{return Ur(n,e.cwd),I.mkdirSync(L.dirname(n),{recursive:!0}),I.writeFileSync(n,s,"utf8"),{ok:!0,content:`\u5DF2\u5199\u5165 ${n}\uFF08${s.length} \u5B57\u7B26\uFF09`,summary:"\u5199\u5165\u6210\u529F"}}catch(o){return{ok:!1,content:`\u5199\u5165\u5931\u8D25\uFF1A${o instanceof Error?o.message:String(o)}`}}}},Qi={name:"edit_file",description:"\u7CBE\u786E\u66FF\u6362\u6587\u4EF6\u4E2D\u7684\u6587\u672C\u3002\u5C06 search \u6307\u5B9A\u7684\u6587\u672C\u66FF\u6362\u4E3A replace\u3002search \u5FC5\u987B\u4E0E\u6587\u4EF6\u5185\u5BB9\u5B8C\u5168\u4E00\u81F4\uFF08\u542B\u7F29\u8FDB\uFF09\uFF1B\u82E5 search \u5339\u914D\u5230\u591A\u5904\u5219\u9ED8\u8BA4\u62D2\u7EDD\u6267\u884C\uFF0C\u9700\u63D0\u4F9B\u66F4\u7CBE\u786E\u7684 search \u6216\u8BBE\u7F6E replace_all \u4E3A true\u3002",requiresConfirmation:!0,parameters:{type:"object",properties:{path:{type:"string",description:"\u6587\u4EF6\u8DEF\u5F84"},search:{type:"string",description:"\u8981\u88AB\u66FF\u6362\u7684\u539F\u6587\uFF08\u9700\u7CBE\u786E\u5339\u914D\uFF09"},replace:{type:"string",description:"\u66FF\u6362\u540E\u7684\u65B0\u6587\u672C"},replace_all:{type:"boolean",description:"\u662F\u5426\u66FF\u6362\u6240\u6709\u5339\u914D\u9879\uFF08\u9ED8\u8BA4 false\uFF09"}},required:["path","search","replace"]},async execute(r,e){let n=bt(me(r.path),e.cwd);if(!I.existsSync(n))return{ok:!1,content:`\u9519\u8BEF\uFF1A\u6587\u4EF6\u4E0D\u5B58\u5728\uFF1A${n}`};let s=Xi(n);if(s)return{ok:!1,content:s.problem};let i=me(r.search),o=me(r.replace),a=r.replace_all===!0;if(!i)return{ok:!1,content:"\u9519\u8BEF\uFF1Asearch \u4E0D\u80FD\u4E3A\u7A7A"};let l=I.readFileSync(n);if(Jr(l))return{ok:!1,content:`\u9519\u8BEF\uFF1A${n} \u662F\u4E8C\u8FDB\u5236\u6587\u4EF6\uFF0Cedit_file \u53EA\u5904\u7406\u6587\u672C\uFF1B\u786E\u5B9E\u8981\u6574\u4F53\u66FF\u6362\u8BF7\u7528 write_file`};let c=l.toString("utf8");if(!c.includes(i)){let d=g=>g.replace(/\s+/g," ").trim(),p=/^\s*\d+\s*[:|]/m.test(i),m=!p&&d(c).includes(d(i)),y="";return p?y="\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&&(y=`
|
|
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 ${n} \u4E2D\u672A\u627E\u5230\u5339\u914D\u6587\u672C\u3002\u8BF7\u5148\u7528 read_file \u786E\u8BA4\u5185\u5BB9\uFF08\u6CE8\u610F\u7F29\u8FDB\u4E0E\u6362\u884C\u9700\u5B8C\u5168\u4E00\u81F4\uFF09\u3002`+y}}let u=c.split(i).length-1;if(u>1&&!a)return{ok:!1,content:`\u9519\u8BEF\uFF1Asearch \u5728 ${n} \u4E2D\u51FA\u73B0 ${u} \u5904\uFF0C\u4E3A\u907F\u514D\u8BEF\u6539\u672A\u6267\u884C\u3002
|
|
312
|
-
\u8BF7\u63D0\u4F9B\u66F4\u7CBE\u786E\u7684 search\uFF08\u5E26\u4E0A\u524D\u540E\u6587\uFF09\uFF0C\u6216\u663E\u5F0F\u8BBE\u7F6E replace_all: true \u4EE5\u66FF\u6362\u5168\u90E8\u5339\u914D\u3002`};let h=a?c.split(i).join(o):c.replace(i,()=>o);return
|
|
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 Ur(n,e.cwd),I.writeFileSync(n,h,"utf8"),{ok:!0,content:`\u5DF2\u66F4\u65B0 ${n}\uFF08\u66FF\u6362 ${a?u:1} \u5904\uFF09`,summary:`\u66FF\u6362 ${a?u:1} \u5904`}}},eo={name:"list_dir",description:"\u5217\u51FA\u76EE\u5F55\u4E2D\u7684\u6587\u4EF6\u4E0E\u5B50\u76EE\u5F55\u3002\u7701\u7565 path \u65F6\u5217\u51FA\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\u3002",parameters:{type:"object",properties:{path:{type:"string",description:"\u76EE\u5F55\u8DEF\u5F84\uFF08\u53EF\u9009\uFF09"}},required:[]},async execute(r,e){let n=r.path?bt(me(r.path),e.cwd):e.cwd;if(!I.existsSync(n))return{ok:!1,content:`\u9519\u8BEF\uFF1A\u76EE\u5F55\u4E0D\u5B58\u5728\uFF1A${n}`};if(!I.statSync(n).isDirectory())return{ok:!1,content:`\u9519\u8BEF\uFF1A${n} \u4E0D\u662F\u76EE\u5F55`};let s=I.readdirSync(n,{withFileTypes:!0}).filter(o=>!Vi.has(o.name)).sort((o,a)=>o.isDirectory()!==a.isDirectory()?o.isDirectory()?-1:1:o.name.localeCompare(a.name)),i=s.map(o=>{let a=o.isDirectory()?"/":"";return`${o.isDirectory()?"DIR ":"FILE"} ${o.name}${a}`});return{ok:!0,content:`${n}
|
|
313
313
|
${i.join(`
|
|
314
|
-
`)||"(\u7A7A\u76EE\u5F55)"}`,summary:`${s.length} \u9879`}}},
|
|
315
|
-
\u2026\uFF08\u5DF2\u8FBE ${
|
|
316
|
-
`)+a,summary:`${o.length} \u4E2A\u6587\u4EF6`}}},
|
|
317
|
-
\u8BF7\u6539\u5199\u4E3A\u7B49\u4EF7\u4F46\u66F4\u5B89\u5168\u7684\u6A21\u5F0F\uFF0C\u4F8B\u5982\u7528 [^x]* \u4EE3\u66FF (.*)+\u3002`};let s;try{s=new RegExp(n)}catch(u){return{ok:!1,content:`\u9519\u8BEF\uFF1A\u65E0\u6548\u7684\u6B63\u5219\u8868\u8FBE\u5F0F\uFF1A${u instanceof Error?u.message:String(u)}`}}let i=r.path?bt(
|
|
318
|
-
`);for(let y=0;y<m.length;y++){if(l.length>=
|
|
319
|
-
\u2026\uFF08\u5DF2\u8FBE ${
|
|
320
|
-
`)+c,summary:`${l.length} \u6761\u5339\u914D`}}};function
|
|
314
|
+
`)||"(\u7A7A\u76EE\u5F55)"}`,summary:`${s.length} \u9879`}}},to={name:"glob",description:"\u6309\u901A\u914D\u7B26\u67E5\u627E\u6587\u4EF6\uFF0C\u652F\u6301 **\u3001*\u3001? \u8BED\u6CD5\u3002\u4F8B\u5982 'src/**/*.ts'\u3002\u8FD4\u56DE\u5339\u914D\u7684\u6587\u4EF6\u8DEF\u5F84\u3002",parameters:{type:"object",properties:{pattern:{type:"string",description:"glob \u6A21\u5F0F\uFF0C\u5982 '**/*.ts'"},path:{type:"string",description:"\u641C\u7D22\u8D77\u59CB\u76EE\u5F55\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4\u5F53\u524D\u76EE\u5F55\uFF09"}},required:["pattern"]},async execute(r,e){let n=me(r.pattern);if(!n)return{ok:!1,content:"\u9519\u8BEF\uFF1Apattern \u4E0D\u80FD\u4E3A\u7A7A"};let s=r.path?bt(me(r.path),e.cwd):e.cwd,i=Sn(n),o=[];if(Hr(s,l=>{if(o.length>=zr)return;let c=L.relative(s,l).split(L.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>=zr?`
|
|
315
|
+
\u2026\uFF08\u5DF2\u8FBE ${zr} \u6761\u4E0A\u9650\uFF09`:"";return{ok:!0,content:o.join(`
|
|
316
|
+
`)+a,summary:`${o.length} \u4E2A\u6587\u4EF6`}}},no={name:"grep",description:"\u5728\u6587\u4EF6\u4E2D\u6309\u6B63\u5219\u8868\u8FBE\u5F0F\u641C\u7D22\u6587\u672C\u5185\u5BB9\u3002\u8FD4\u56DE \u6587\u4EF6:\u884C\u53F7:\u5185\u5BB9\u3002\u53EF\u901A\u8FC7 include \u9650\u5B9A\u6587\u4EF6\u7C7B\u578B\uFF08\u5982 '*.ts'\uFF09\u3002",parameters:{type:"object",properties:{pattern:{type:"string",description:"\u6B63\u5219\u8868\u8FBE\u5F0F"},path:{type:"string",description:"\u641C\u7D22\u76EE\u5F55\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4\u5F53\u524D\u76EE\u5F55\uFF09"},include:{type:"string",description:"\u6587\u4EF6\u540D\u901A\u914D\u7B26\u8FC7\u6EE4\uFF0C\u5982 '*.ts'\uFF08\u53EF\u9009\uFF09"}},required:["pattern"]},async execute(r,e){let n=me(r.pattern);if(!n)return{ok:!1,content:"\u9519\u8BEF\uFF1Apattern \u4E0D\u80FD\u4E3A\u7A7A"};if(fc(n))return{ok:!1,content:`\u9519\u8BEF\uFF1A\u6B63\u5219\u53EF\u80FD\u5B58\u5728\u707E\u96BE\u6027\u56DE\u6EAF\uFF08\u5D4C\u5957\u91CF\u8BCD\uFF0C\u5982 (a+)+\uFF09\uFF0C\u5DF2\u62D2\u7EDD\u6267\u884C\u4EE5\u514D\u5361\u6B7B\u8FDB\u7A0B\u3002
|
|
317
|
+
\u8BF7\u6539\u5199\u4E3A\u7B49\u4EF7\u4F46\u66F4\u5B89\u5168\u7684\u6A21\u5F0F\uFF0C\u4F8B\u5982\u7528 [^x]* \u4EE3\u66FF (.*)+\u3002`};let s;try{s=new RegExp(n)}catch(u){return{ok:!1,content:`\u9519\u8BEF\uFF1A\u65E0\u6548\u7684\u6B63\u5219\u8868\u8FBE\u5F0F\uFF1A${u instanceof Error?u.message:String(u)}`}}let i=r.path?bt(me(r.path),e.cwd):e.cwd,o=r.include?Sn(me(r.include)):null,a=gc(i),l=[];if(Hr(i,u=>{if(l.length>=bn||a.length>0&&$c(L.relative(i,u),a))return;let h=L.relative(i,u).split(L.sep).join("/");if(o&&!o.test(h)&&!o.test(L.basename(u)))return;let d;try{d=I.statSync(u)}catch{return}if(d.size>mc||d.size===0)return;let p;try{p=I.readFileSync(u)}catch{return}if(Jr(p))return;let m=p.toString("utf8").split(`
|
|
318
|
+
`);for(let y=0;y<m.length;y++){if(l.length>=bn)return;let g=m[y],f=g.length>Ki?g.slice(0,Ki):g;s.test(f)&&l.push(`${h}:${y+1}: ${g.trim().slice(0,300)}`)}}),l.length===0)return{ok:!0,content:"\u672A\u627E\u5230\u5339\u914D\u5185\u5BB9\u3002"};let c=l.length>=bn?`
|
|
319
|
+
\u2026\uFF08\u5DF2\u8FBE ${bn} \u6761\u4E0A\u9650\uFF09`:"";return{ok:!0,content:l.join(`
|
|
320
|
+
`)+c,summary:`${l.length} \u6761\u5339\u914D`}}};function Hr(r,e){let n;try{n=I.readdirSync(r,{withFileTypes:!0})}catch{return}for(let s of n){if(Vi.has(s.name))continue;let i=L.join(r,s.name);s.isDirectory()?Hr(i,e):(s.isFile()||s.isSymbolicLink())&&e(i)}}function Sn(r){let e="",n=r.split(L.sep).join("/");for(let s=0;s<n.length;s++){let i=n[s];if(i==="*")n[s+1]==="*"?(s++,n[s+1]==="/"?(s++,e+="(?:.*/)?"):e+=".*"):e+="[^/]*";else if(i==="?")e+="[^/]";else if(i==="{"){let o=n.indexOf("}",s);if(o!==-1){let a=n.slice(s+1,o).split(",").map(Wi).join("|");e+=`(?:${a})`,s=o}else e+="\\{"}else e+=Wi(i)}return new RegExp(`^${e}$`)}function Wi(r){return r.replace(/[.+^${}()|[\]\\]/g,"\\$&")}var Ut=v(require("fs")),Kr=v(require("os")),Ge=v(require("path"));function Qe(r){let e=r.deviceBridge;if(e?.isRunning())return{source:`xzh \u5185\u7F6E\u8BBE\u5907\u6865\uFF08\u7AEF\u53E3 ${e.getPort()}\uFF09`,list:async()=>e.listDevices().map(i=>({name:i.name,id:i.id,appVersionCode:i.appVersionCode})),push:async(i,o)=>e.pushScript(i,o),run:async(i,o)=>e.runScript(i,o),stop:async(i,o)=>e.stopScript(i,o),logs:async i=>e.recentLogs(i).map(o=>({device:o.device,text:o.text})),screenshot:async()=>e.screenshot()};let n=ze(),s=new pe(n);return{source:`\u8BBE\u5907\u6865\uFF08127.0.0.1:${n}\uFF09`,list:async()=>{let i=await s.devices();return i?i.map(o=>({name:o.name,id:o.id,appVersionCode:o.appVersionCode})):null},push:async(i,o)=>s.exec("save",i,o),run:async(i,o)=>s.exec("run",i,o),stop:async(i,o)=>s.exec(i?"stop":"stopAll",i,o),screenshot:async()=>s.screenshot(),logs:async i=>{let o=await s.logs(i);return o?o.map(a=>({device:a.device,text:a.text})):null}}}function ro(r){return{ok:!1,content:`\u8BBE\u5907\u6865\u4E0D\u53EF\u7528\uFF08${r.source}\uFF09\u3002
|
|
321
321
|
\u8BF7\u8BA9\u7528\u6237\u5148\u628A\u624B\u673A\u8FDE\u4E0A\uFF0C\u4EFB\u9009\u5176\u4E00\uFF1A
|
|
322
322
|
\xB7 AutoJs6\uFF08\u63A8\u8350\uFF09\uFF1A\u624B\u673A\u4E0A\u6253\u5F00\u300C\u8FDE\u63A5\u7535\u8111 \u2192 \u670D\u52A1\u5668\u6A21\u5F0F\u300D\uFF0C\u7136\u540E\u5728 xzh \u91CC\u6267\u884C \`/device connect <\u624B\u673AIP>\`\uFF08\u624B\u673A\u672C\u673A\u8FD0\u884C\u65F6\u4E0D\u7528\u586B IP\uFF09\uFF1B
|
|
323
323
|
\xB7 AutoX.js\uFF1A\`/device serve\`\uFF0C\u518D\u8BA9\u624B\u673A\u586B\u5B83\u6253\u5370\u51FA\u7684 ws:// \u5730\u5740\u3002
|
|
324
324
|
\u53E6\u5F00\u4E00\u4E2A\u7EC8\u7AEF\u8DD1 \`xzh device connect <\u624B\u673AIP>\` / \`xzh device serve\` \u4E5F\u53EF\u4EE5\u3002
|
|
325
|
-
\u82E5\u624B\u673A\u8FD8\u6CA1\u88C5 AutoJs6\uFF0C\u7528 \`xzh device apk\` \u67E5\u770B\u8BE5\u88C5\u54EA\u4E2A\u7248\u672C\uFF08\u7384\u732A\u4E0D\u6253\u5305\u5B89\u88C5\u5305\uFF09\u3002`}}function
|
|
326
|
-
`)}var
|
|
327
|
-
${
|
|
325
|
+
\u82E5\u624B\u673A\u8FD8\u6CA1\u88C5 AutoJs6\uFF0C\u7528 \`xzh device apk\` \u67E5\u770B\u8BE5\u88C5\u54EA\u4E2A\u7248\u672C\uFF08\u7384\u732A\u4E0D\u6253\u5305\u5B89\u88C5\u5305\uFF09\u3002`}}function xn(r,e){let n=e.startsWith("~")?Ge.join(process.env.HOME??process.env.USERPROFILE??"",e.slice(1)):e;return Ge.isAbsolute(n)?n:Ge.resolve(r.cwd,ee(n))}function yc(r){return r.map(e=>`- ${e.name}\uFF08${e.id}\uFF0CAutoX.js versionCode ${e.appVersionCode}\uFF09`).join(`
|
|
326
|
+
`)}var vc={name:"device_list",description:"\u5217\u51FA\u5F53\u524D\u5DF2\u8FDE\u63A5\u7684\u624B\u673A\u8BBE\u5907\uFF08\u901A\u8FC7\u8BBE\u5907\u6865\u8FDE\u4E0A\u6765\u7684 AutoX.js / Auto.js\uFF09\u3002\u63A8\u811A\u672C\u6216\u8FD0\u884C\u811A\u672C\u4E4B\u524D\u5148\u770B\u4E00\u773C\uFF0C\u786E\u8BA4\u624B\u673A\u662F\u5426\u5DF2\u8FDE\u4E0A\u3002",parameters:{type:"object",properties:{}},async execute(r,e){let n=Qe(e),s=await n.list();return s?s.length===0?{ok:!0,content:`\u6CA1\u6709\u5DF2\u8FDE\u63A5\u7684\u8BBE\u5907\uFF08${n.source}\uFF09\u3002\u8BF7\u786E\u8BA4\u624B\u673A\u4E0E\u7535\u8111\u5728\u540C\u4E00\u7F51\u7EDC\uFF0C\u4E14\u624B\u673A\u4E0A\u7684 AutoX.js \u5DF2\u8FDE\u63A5\u5230\u6865\u6253\u5370\u51FA\u7684 ws:// \u5730\u5740\u3002`,summary:"0 \u53F0\u8BBE\u5907"}:{ok:!0,content:`\u5DF2\u8FDE\u63A5 ${s.length} \u53F0\u8BBE\u5907\uFF1A
|
|
327
|
+
${yc(s)}`,summary:`${s.length} \u53F0\u8BBE\u5907`}:ro(n)}},bc={name:"device_push",description:"\u628A\u4E00\u4E2A\u811A\u672C\u6587\u4EF6**\u4FDD\u5B58**\u5230\u624B\u673A\uFF08\u4E0D\u8FD0\u884C\uFF09\u3002\u624B\u673A\u4E0A\u8DD1\u7684\u662F AutoX.js \u811A\u672C\u65F6\u7528\u8FD9\u4E2A\u628A\u672C\u5730\u6539\u597D\u7684\u4EE3\u7801\u540C\u6B65\u8FC7\u53BB\uFF1B\u53EA\u60F3\u770B\u6548\u679C\u5C31\u76F4\u63A5\u7528 device_run\u3002",parameters:{type:"object",properties:{path:{type:"string",description:"\u8981\u63A8\u9001\u7684\u811A\u672C\u6587\u4EF6\u8DEF\u5F84\uFF08\u76F8\u5BF9\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\u6216\u7EDD\u5BF9\u8DEF\u5F84\uFF09"},device:{type:"string",description:"\u53EA\u63A8\u9001\u5230\u6307\u5B9A\u8BBE\u5907\uFF08\u8BBE\u5907\u540D\u6216\u8FDE\u63A5 id\uFF09\uFF1B\u4E0D\u4F20\u8868\u793A\u6240\u6709\u5DF2\u8FDE\u63A5\u8BBE\u5907"}},required:["path"]},requiresConfirmation:!0,async execute(r,e){if(!r.path)return{ok:!1,content:"\u7F3A\u5C11\u5FC5\u586B\u53C2\u6570\uFF1Apath"};let n=xn(e,String(r.path).trim()),s=Qe(e),i=await s.push(n,r.device?String(r.device):void 0);return qr(i,s,`\u5DF2\u4FDD\u5B58\u5230 ${i.delivered??0} \u53F0\u8BBE\u5907`)}},Sc={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(r,e){if(!r.path)return{ok:!1,content:"\u7F3A\u5C11\u5FC5\u586B\u53C2\u6570\uFF1Apath"};let n=
|
|
329
|
+
\u4E09\u6761\u8981\u70B9\uFF1A\u2460 \u811A\u672C\u5728**\u624B\u673A\u4E0A**\u8DD1\uFF0C\u8FD4\u56DE\u503C\u4E0D\u4F1A\u56DE\u6765\uFF0C\u56E0\u6B64\u6BCF\u6B65\u90FD\u8981 toastLog \u56DE\u62A5\uFF0C\u518D\u7528 device_logs \u8BFB\uFF1B\u2461 \u672C\u5DE5\u5177**\u53D1\u51FA\u5373\u8FD4\u56DE**\uFF0C\u4E0D\u7B49\u4E8E\u811A\u672C\u8DD1\u5B8C \u2014\u2014 \u5148 sleep 1~3 \u79D2\u518D\u8BFB\u65E5\u5FD7\uFF1B\u2462 \u9700\u8981 UI \u64CD\u4F5C\u7684\u811A\u672C**\u5FC5\u987B**\u4EE5 auto.waitFor(8000) \u5F00\u5934\uFF08auto() \u5728\u670D\u52A1\u672A\u771F\u6B63\u8FD0\u884C\u65F6\u76F4\u63A5\u629B\u9519\uFF09\u3002`,parameters:{type:"object",properties:{path:{type:"string",description:"\u8981\u8FD0\u884C\u7684\u811A\u672C\u6587\u4EF6\u8DEF\u5F84\uFF08\u76F8\u5BF9\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\u6216\u7EDD\u5BF9\u8DEF\u5F84\uFF09"},device:{type:"string",description:"\u53EA\u5728\u6307\u5B9A\u8BBE\u5907\u4E0A\u8FD0\u884C\uFF08\u8BBE\u5907\u540D\u6216\u8FDE\u63A5 id\uFF09\uFF1B\u4E0D\u4F20\u8868\u793A\u6240\u6709\u5DF2\u8FDE\u63A5\u8BBE\u5907"}},required:["path"]},requiresConfirmation:!0,async execute(r,e){if(!r.path)return{ok:!1,content:"\u7F3A\u5C11\u5FC5\u586B\u53C2\u6570\uFF1Apath"};let n=xn(e,String(r.path).trim()),s=Qe(e),i=await s.run(n,r.device?String(r.device):void 0);return qr(i,s,`\u5DF2\u5728 ${i.delivered??0} \u53F0\u8BBE\u5907\u4E0A\u542F\u52A8\uFF08\u7528 device_logs \u770B\u8F93\u51FA\uFF09`)}},xc={name:"device_stop",description:"\u505C\u6B62\u624B\u673A\u4E0A\u6B63\u5728\u8FD0\u884C\u7684\u811A\u672C\u3002\u4E0D\u4F20 path \u8868\u793A\u505C\u6B62\u5168\u90E8\uFF08AutoX.js \u7684\u300C\u505C\u6B62\u6240\u6709\u811A\u672C\u300D\uFF09\u2014\u2014\u811A\u672C\u662F\u6B7B\u5FAA\u73AF\u65F6\u8FD9\u662F\u552F\u4E00\u7684\u6536\u5C3E\u624B\u6BB5\u3002",parameters:{type:"object",properties:{path:{type:"string",description:"\u53EA\u505C\u6B62\u8FD9\u4E2A\u811A\u672C\uFF1B\u4E0D\u4F20\u8868\u793A\u505C\u6B62\u5168\u90E8\u811A\u672C"},device:{type:"string",description:"\u53EA\u5BF9\u6307\u5B9A\u8BBE\u5907\u751F\u6548\uFF08\u8BBE\u5907\u540D\u6216\u8FDE\u63A5 id\uFF09"}}},requiresConfirmation:!0,async execute(r,e){let n=Qe(e),s=r.path?xn(e,String(r.path).trim()):void 0,i=await n.stop(s,r.device?String(r.device):void 0);return qr(i,n,s?"\u5DF2\u8BF7\u6C42\u505C\u6B62\u8BE5\u811A\u672C":"\u5DF2\u8BF7\u6C42\u505C\u6B62\u5168\u90E8\u811A\u672C")}},wc={name:"device_logs",description:"\u8BFB\u53D6\u624B\u673A\u4E0A\u811A\u672C\u6700\u8FD1\u6253\u5370\u7684\u65E5\u5FD7\uFF08AutoX.js \u91CC console.log / toast \u4E4B\u7C7B\u7684\u5185\u5BB9\u4F1A\u56DE\u5230\u8FD9\u91CC\uFF09\u3002\u8FD0\u884C\u811A\u672C\u540E\u7528\u5B83\u786E\u8BA4\u6267\u884C\u7ED3\u679C\uFF0C\u6BD4\u8BA9\u7528\u6237\u8089\u773C\u76EF\u624B\u673A\u9760\u8C31\u3002",parameters:{type:"object",properties:{limit:{type:"integer",description:"\u6700\u591A\u8FD4\u56DE\u591A\u5C11\u884C\uFF0C\u9ED8\u8BA4 50"}}},async execute(r,e){let n=Number(r.limit??50),s=Number.isFinite(n)&&n>0?Math.min(Math.floor(n),500):50,i=Qe(e),o=await i.logs(s);if(!o)return ro(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
|
|
331
|
+
${a}`,summary:`${o.length} \u884C\u65E5\u5FD7`}}};function qr(r,e,n){if(!r.ok)return{ok:!1,content:r.message??"\u64CD\u4F5C\u5931\u8D25"};let s=(r.devices??[]).join("\u3001");return{ok:!0,content:`${n}${s?`\uFF1A${s}`:""}
|
|
332
332
|
${r.path?`\u811A\u672C\uFF1A${r.path}
|
|
333
|
-
`:""}\u6765\u6E90\uFF1A${e.source}`,summary:n}}var
|
|
333
|
+
`:""}\u6765\u6E90\uFF1A${e.source}`,summary:n}}var Tc={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(r,e){let n=Qe(e),s=await n.screenshot();if(!s.ok)return{ok:!1,content:`${s.message}
|
|
338
|
-
\uFF08\u6765\u6E90\uFF1A${n.source}\uFF09`};let i=typeof r.path=="string"&&r.path.trim()?
|
|
338
|
+
\uFF08\u6765\u6E90\uFF1A${n.source}\uFF09`};let i=typeof r.path=="string"&&r.path.trim()?xn(e,r.path.trim()):Ge.join(Kr.tmpdir(),`xzh-device-shot-${Date.now()}.jpg`);try{Ut.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${n.source}\uFF09`,images:[{mimeType:"image/jpeg",data:s.data.toString("base64")}]}}},
|
|
341
|
+
\uFF08\u6765\u6E90\uFF1A${n.source}\uFF09`,images:[{mimeType:"image/jpeg",data:s.data.toString("base64")}]}}},Cc={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(r,e){let n=Qe(e),s=`r${Date.now()}`,i=`\u3010\u5F00\u59CB\u3011${s}`,o=Ge.join(
|
|
344
|
-
\uFF08\u6765\u6E90\uFF1A${n.source}\uFF09`}}finally{
|
|
343
|
+
\uFF08device_screenshot \u53EA\u4EA7\u51FA\u4F60\u770B\u4E0D\u5230\u7684\u56FE\u7247\u6587\u4EF6\uFF0C\u7ED9\u7528\u6237\u770B\u7528\uFF1B\u8981\u81EA\u5DF1\u5224\u65AD\u754C\u9762\u4E00\u5F8B\u7528\u672C\u5DE5\u5177\u3002\uFF09`,parameters:{type:"object",properties:{}},async execute(r,e){let n=Qe(e),s=`r${Date.now()}`,i=`\u3010\u5F00\u59CB\u3011${s}`,o=Ge.join(Kr.tmpdir(),`xzh-ui-dump-${Date.now()}.js`);try{Ut.writeFileSync(o,Or(60,s),"utf8");let c=await n.run(o);if(!c.ok)return{ok:!1,content:`${c.message??"\u8BFB\u53D6\u754C\u9762\u5931\u8D25"}
|
|
344
|
+
\uFF08\u6765\u6E90\uFF1A${n.source}\uFF09`}}finally{Ut.rmSync(o,{force:!0})}let a=Date.now()+45e3,l=[];for(;Date.now()<a;){let c=(await n.logs(200)??[]).map(d=>d.text),u=c.map(d=>d.includes(i)).lastIndexOf(!0);if(l=u<0?[]:c.slice(u).filter(d=>d.includes("\u3010")),l.some(d=>d.includes("\u3010\u5B8C\u6210\u3011")||d.includes("\u8BFB\u53D6\u5931\u8D25")||d.includes("\u65E0\u969C\u788D\u672A\u5C31\u7EEA")))break;await new Promise(d=>setTimeout(d,700))}return l.length===0?{ok:!1,content:`\u6CA1\u6709\u4ECE\u624B\u673A\u8BFB\u56DE\u754C\u9762\u5185\u5BB9\uFF08\u811A\u672C\u53EF\u80FD\u6CA1\u8DD1\u8D77\u6765\uFF0C\u6216\u5361\u5728\u7B49\u5F85\u65E0\u969C\u788D\u670D\u52A1\uFF09\u3002
|
|
345
345
|
\u53EF\u5148\u8DD1 xzh device check \u4F53\u68C0\uFF0C\u6216\u7528 device_stop \u6536\u6389\u6302\u4F4F\u7684\u811A\u672C\u3002
|
|
346
346
|
\uFF08\u6765\u6E90\uFF1A${n.source}\uFF09`}:{ok:!0,content:`${l.join(`
|
|
347
347
|
`)}
|
|
348
|
-
\uFF08\u6765\u6E90\uFF1A${n.source}\uFF09`}}},
|
|
348
|
+
\uFF08\u6765\u6E90\uFF1A${n.source}\uFF09`}}},Wr=[vc,bc,Sc,xc,wc,Cc,Tc];var so={name:"goal_complete",description:"\u58F0\u660E\u5F53\u524D /goal \u76EE\u6807\u5DF2\u5168\u90E8\u5B8C\u6210\uFF08**\u4EC5\u76EE\u6807\u6A21\u5F0F\u4F7F\u7528**\uFF09\u3002\u53EA\u6709\u5F53\u4F60\u786E\u8BA4\u76EE\u6807\u771F\u6B63\u5B8C\u6210\u5E76\u901A\u8FC7\u9A8C\u8BC1\uFF08\u6784\u5EFA / \u6D4B\u8BD5 / \u5B9E\u9645\u8FD0\u884C\uFF09\u65F6\u624D\u8C03\u7528\uFF1B\u76EE\u6807\u786E\u5B9E\u65E0\u6CD5\u5B8C\u6210\uFF08\u7F3A\u51ED\u636E\u3001\u5916\u90E8\u4F9D\u8D56\u4E0D\u53EF\u7528\uFF09\u65F6\u4E5F\u8C03\u7528\u5B83\uFF0C\u5E76\u5728 summary \u91CC\u5199\u660E\u963B\u585E\u539F\u56E0\u3002\u8C03\u7528\u540E\u76EE\u6807\u6A21\u5F0F\u7ED3\u675F\uFF0C\u4E0D\u4F1A\u518D\u81EA\u52A8\u7EE7\u7EED\u3002\u5F53\u524D\u6CA1\u6709\u8FDB\u884C\u4E2D\u7684\u76EE\u6807\u65F6\u4E0D\u8981\u8C03\u7528\u3002",parameters:{type:"object",properties:{summary:{type:"string",description:"\u5B8C\u6210\u60C5\u51B5\u603B\u7ED3\uFF1A\u505A\u4E86\u4EC0\u4E48\u3001\u5982\u4F55\u9A8C\u8BC1\u7684\u3001\u8FD8\u6709\u54EA\u4E9B\u672A\u505A\u6216\u963B\u585E\uFF08\u82E5\u6709\uFF09\u3002\u4F1A\u5C55\u793A\u7ED9\u7528\u6237\u3002"}},required:["summary"]},async execute(r,e){let n=typeof r.summary=="string"?r.summary.trim():"";return n?!e.goal||!e.goal.active()?{ok:!1,content:"\u5F53\u524D\u6CA1\u6709\u8FDB\u884C\u4E2D\u7684\u76EE\u6807\uFF08/goal\uFF09\uFF0C\u65E0\u9700\u8C03\u7528 goal_complete\u3002\u76F4\u63A5\u7ED9\u7528\u6237\u6700\u7EC8\u7B54\u590D\u5373\u53EF\u3002"}:(e.goal.complete(n),{ok:!0,content:"\u5DF2\u8BB0\u5F55\u76EE\u6807\u5B8C\u6210\uFF0C\u76EE\u6807\u6A21\u5F0F\u7ED3\u675F\u3002\u8BF7\u7528\u4E00\u6BB5\u7B80\u77ED\u7684\u6700\u7EC8\u603B\u7ED3\u56DE\u590D\u7528\u6237\uFF0C\u4E0D\u8981\u518D\u5F00\u59CB\u65B0\u5DE5\u4F5C\u3002",summary:"\u76EE\u6807\u5B8C\u6210"}):{ok:!1,content:"\u9519\u8BEF\uFF1Asummary \u4E0D\u80FD\u4E3A\u7A7A\uFF0C\u8BF7\u8BF4\u660E\u5B8C\u6210\u60C5\u51B5\u4E0E\u9A8C\u8BC1\u65B9\u5F0F\u3002"}}};var io=12e3,oo={name:"memory_read",description:"\u8BFB\u53D6\u5F53\u524D\u9879\u76EE\u7684\u8BB0\u5FC6\uFF08\u5B58\u653E\u5728 <\u9879\u76EE>/.xuanzhu/memory/\uFF09\uFF1A\u5305\u542B\u957F\u671F\u8BB0\u5FC6 MEMORY.md\uFF08\u6309\u4E3B\u9898\u6574\u7406\u7684\u7ED3\u8BBA\u5E93\uFF09\u4E0E\u6700\u8FD1\u4E00\u4EFD\u6BCF\u65E5\u65E5\u5FD7\u3002\u5728\u5F00\u59CB\u5904\u7406\u9700\u8981\u9879\u76EE\u80CC\u666F\u7684\u4EFB\u52A1\u524D\u8C03\u7528\u5B83\uFF0C\u53EF\u4EE5\u4E86\u89E3\u6B64\u524D\u79EF\u7D2F\u7684\u7EA6\u5B9A\u4E0E\u7ED3\u8BBA\u3002\u5199\u957F\u671F\u8BB0\u5FC6\uFF08scope=long\uFF09\u4E4B\u524D\u4E5F\u5E94\u5F53\u5148\u8BFB\uFF0C\u786E\u8BA4\u65B0\u7ED3\u8BBA\u5C5E\u4E8E\u54EA\u4E2A\u4E3B\u9898\u5C0F\u8282\u3002\u5F53\u7CFB\u7EDF\u63D0\u793A\u8BCD\u63D0\u793A\u300C\u957F\u671F\u8BB0\u5FC6\u8FC7\u957F\u300D\u65F6\uFF0C\u4E5F\u5E94\u5148\u7528\u5B83\u8BFB\u53D6\u5168\u6587\uFF0C\u518D\u8C03\u7528 memory_compact \u7CBE\u7B80\u3002",parameters:{type:"object",properties:{},required:[]},async execute(r,e){let n=ot(e.cwd),s=G(e.cwd);if(!n.longTerm&&!n.recentDaily)return{ok:!0,content:`\u9879\u76EE\u8BB0\u5FC6\u4E3A\u7A7A\uFF08\u76EE\u5F55\uFF1A${s.memoryDir}\uFF09\u3002`,summary:"\u6682\u65E0\u8BB0\u5FC6"};let i=[];n.longTerm&&i.push(`## \u957F\u671F\u8BB0\u5FC6\uFF08MEMORY.md\uFF09
|
|
349
349
|
|
|
350
350
|
${n.longTerm}`),n.recentDaily&&i.push(`## \u6700\u8FD1\u65E5\u5FD7\uFF08${n.recentDailyName}\uFF09
|
|
351
351
|
|
|
@@ -353,35 +353,35 @@ ${n.recentDaily}`);let o=i.join(`
|
|
|
353
353
|
|
|
354
354
|
---
|
|
355
355
|
|
|
356
|
-
`);return{ok:!0,content:o.length>
|
|
356
|
+
`);return{ok:!0,content:o.length>io?`${o.slice(0,io)}
|
|
357
357
|
|
|
358
|
-
\u2026\uFF08\u5185\u5BB9\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD\uFF09`:o,summary:"\u5DF2\u8BFB\u53D6\u9879\u76EE\u8BB0\u5FC6"}}},
|
|
358
|
+
\u2026\uFF08\u5185\u5BB9\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD\uFF09`:o,summary:"\u5DF2\u8BFB\u53D6\u9879\u76EE\u8BB0\u5FC6"}}},ao={name:"memory_write",description:"\u628A\u503C\u5F97\u8DE8\u4F1A\u8BDD\u4FDD\u7559\u7684\u4FE1\u606F\u5199\u5165\u9879\u76EE\u8BB0\u5FC6\uFF08<\u9879\u76EE>/.xuanzhu/memory/\uFF09\u3002\u5728\u5B8C\u6210\u5B9E\u8D28\u5DE5\u4F5C\uFF08\u5B9E\u73B0\u529F\u80FD\u3001\u4FEE\u590D\u7F3A\u9677\u3001\u786E\u5B9A\u6280\u672F\u65B9\u6848\u3001\u7EA6\u5B9A\u9879\u76EE\u89C4\u8303\uFF09\u540E\u8C03\u7528\uFF0C\u4EE5\u4FBF\u540E\u7EED\u4F1A\u8BDD\u590D\u7528\u3002scope=daily \u8FFD\u52A0\u5230\u5F53\u65E5\u65E5\u5FD7\uFF08\u9ED8\u8BA4\uFF0C\u9002\u5408\u5F53\u5929\u7684\u8FDB\u5C55\u4E0E\u8FC7\u7A0B\u8BB0\u5F55\uFF09\uFF1Bscope=long \u5728\u957F\u671F\u8BB0\u5FC6 MEMORY.md \u672B\u5C3E\u8FFD\u52A0\u4E00\u5757 \u2014\u2014 **\u53EA\u9002\u5408\u5168\u65B0\u4E3B\u9898**\uFF1A\u82E5\u65B0\u7ED3\u8BBA\u5C5E\u4E8E\u5DF2\u6709\u7684\u4E3B\u9898\u5C0F\u8282\uFF0C\u5E94\u5148 memory_read \u518D\u7528 memory_compact \u5E76\u8FDB\u90A3\u4E2A\u5C0F\u8282\uFF0C\u5426\u5219\u957F\u671F\u8BB0\u5FC6\u4F1A\u9000\u5316\u6210\u6309\u65F6\u95F4\u5806\u53E0\u3001\u8D8A\u7528\u8D8A\u4E71\u7684\u6D41\u6C34\u8D26\u3002\u8BF7\u5199\u7B80\u6D01\u7684\u4E8B\u5B9E\u6027\u5185\u5BB9\uFF0C\u4E0D\u8981\u8BB0\u5F55\u77AC\u65F6\u4FE1\u606F\uFF08\u4E34\u65F6\u8DEF\u5F84\u3001\u5DE5\u5177\u62A5\u9519\u7B49\uFF09\u3002\u957F\u671F\u8BB0\u5FC6\u8D85\u51FA\u4E0A\u9650\u65F6\u4F1A\u81EA\u52A8\u53BB\u91CD\u4E0E\u7CBE\u7B80\uFF0C\u6458\u8981\u4E2D\u4F1A\u8BF4\u660E\u7CBE\u7B80\u7ED3\u679C\u3002",parameters:{type:"object",properties:{content:{type:"string",description:"\u8981\u8BB0\u5F55\u7684\u5185\u5BB9\uFF08Markdown\uFF0C\u5EFA\u8BAE\u7B80\u6D01\u3001\u5206\u70B9\uFF09"},scope:{type:"string",enum:["daily","long"],description:"daily=\u5F53\u65E5\u65E5\u5FD7\uFF08\u9ED8\u8BA4\uFF09\uFF1Blong=\u957F\u671F\u8BB0\u5FC6 MEMORY.md\uFF08\u4EC5\u7528\u4E8E\u5168\u65B0\u4E3B\u9898\uFF1B\u5DF2\u6709\u4E3B\u9898\u8BF7\u7528 memory_compact \u5E76\u5165\uFF09"}},required:["content"]},async execute(r,e){let n=typeof r.content=="string"?r.content.trim():"";if(!n)return{ok:!1,content:"\u9519\u8BEF\uFF1Acontent \u4E0D\u80FD\u4E3A\u7A7A\u3002"};let s=r.scope==="long"?"long":"daily";try{let i=Ls(e.cwd,n,s),o=s==="long"?"\u957F\u671F\u8BB0\u5FC6":"\u5F53\u65E5\u65E5\u5FD7",a="";if(s==="long"){let l=e.memoryMaxChars??we,c=Wt(e.cwd,l);if(c&&(c.removedDuplicates>0||c.removedOldest>0)){let h=[];c.removedDuplicates>0&&h.push(`\u53BB\u9664 ${c.removedDuplicates} \u6761\u91CD\u590D\u8BB0\u5F55`),c.removedOldest>0&&h.push(`\u4E22\u5F03 ${c.removedOldest} \u6761\u6700\u65E7\u7684\u8FFD\u52A0\u8BB0\u5F55`),a=`
|
|
359
359
|
|
|
360
360
|
\uFF08\u957F\u671F\u8BB0\u5FC6\u5DF2\u81EA\u52A8\u7CBE\u7B80\uFF1A${h.join("\u3001")}\uFF0C${c.before} \u2192 ${c.after} \u5B57\u7B26\uFF09`}let u=ot(e.cwd).longTerm.length;l>0&&u>l&&(a+=`
|
|
361
361
|
|
|
362
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}
|
|
363
363
|
|
|
364
|
-
\uFF08\u8BB0\u5FC6\u76EE\u5F55\uFF1A${
|
|
365
|
-
\uFF08\u76EE\u6807\u76EE\u5F55\uFF1A${
|
|
366
|
-
\uFF08${s} \u2192 ${n.length} \u5B57\u7B26\uFF09`,summary:`\u957F\u671F\u8BB0\u5FC6\u5DF2\u7CBE\u7B80\uFF08${s} \u2192 ${n.length} \u5B57\u7B26\uFF09`}}catch(s){return{ok:!1,content:`\u91CD\u5199\u957F\u671F\u8BB0\u5FC6\u5931\u8D25\uFF1A${s instanceof Error?s.message:String(s)}`}}}};var
|
|
367
|
-
\u76EE\u6807\u5C06\u6682\u505C\u5E76\u628A\u8FD9\u6761\u4FE1\u606F\u663E\u793A\u7ED9\u7528\u6237\u3002\u8BF7\u7528\u4E00\u5C0F\u6BB5\u8BDD\u8BF4\u660E\u73B0\u72B6\uFF08\u5DF2\u5C1D\u8BD5\u4EC0\u4E48\u3001\u7F3A\u4EC0\u4E48\u3001\u5EFA\u8BAE\u600E\u4E48\u505A\uFF09\uFF0C\u7136\u540E\u7ED3\u675F\u672C\u8F6E\u3002`,summary:`${
|
|
368
|
-
`)}function
|
|
364
|
+
\uFF08\u8BB0\u5FC6\u76EE\u5F55\uFF1A${G(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)}
|
|
365
|
+
\uFF08\u76EE\u6807\u76EE\u5F55\uFF1A${G(e.cwd).memoryDir}\uFF09`}}}},lo={name:"memory_compact",description:"\u7528\u4E00\u4EFD**\u7CBE\u7B80\u540E\u7684\u5B8C\u6574\u5185\u5BB9**\u8986\u76D6\u957F\u671F\u8BB0\u5FC6 MEMORY.md\uFF08\u8BED\u4E49\u538B\u7F29\uFF09\u3002\u4E24\u4E2A\u7528\u9014\uFF1A\u2460 \u628A\u65B0\u7ED3\u8BBA**\u5E76\u8FDB\u5DF2\u6709\u4E3B\u9898\u5C0F\u8282**\uFF08\u8FD9\u662F\u957F\u671F\u8BB0\u5FC6\u7684\u5E38\u89C4\u66F4\u65B0\u65B9\u5F0F\uFF0C\u56E0\u4E3A memory_write \u53EA\u4F1A\u5728\u6587\u672B\u8FFD\u52A0\uFF09\uFF1B\u2461 \u957F\u671F\u8BB0\u5FC6\u8FC7\u957F / \u91CD\u590D / \u6709\u8FC7\u65F6\u6761\u76EE\u65F6\u505A\u6574\u4F53\u6574\u7406\u3002\u505A\u6CD5\uFF1A\u5148 memory_read \u8BFB\u53D6\u5168\u6587\uFF0C\u518D\u6309\u4E3B\u9898\u5408\u5E76\u6761\u76EE\u3001\u5220\u9664\u5DF2\u8FC7\u65F6\u6216\u88AB\u540E\u7EED\u7ED3\u8BBA\u63A8\u7FFB\u7684\u5185\u5BB9\u3001\u628A\u5197\u957F\u7684\u8FC7\u7A0B\u6D53\u7F29\u4E3A\u7ED3\u8BBA\uFF08\u7EC6\u8282\u7559\u5728\u9879\u76EE\u6587\u6863\u91CC\u3001\u8FD9\u91CC\u53EA\u7559\u6307\u9488\uFF09\uFF0C\u6700\u540E\u628A\u91CD\u5199\u7ED3\u679C\u901A\u8FC7\u672C\u5DE5\u5177\u63D0\u4EA4\u3002\u6CE8\u610F\uFF1A\u63D0\u4EA4\u7684\u662F**\u5B8C\u6574\u7684\u65B0\u7248\u672C**\uFF08\u4F1A\u6574\u4F53\u8986\u76D6\uFF09\uFF0C\u4E0D\u8981\u53EA\u63D0\u4EA4\u589E\u91CF\uFF1B\u7ED3\u6784\u4E0A\u4FDD\u7559\u300C\u6587\u9996\u7EF4\u62A4\u8BF4\u660E + `## \u4E3B\u9898` \u5C0F\u8282\u300D\u7684\u7EC4\u7EC7\u65B9\u5F0F\uFF0C\u4E0D\u8981\u9000\u56DE\u6309\u65F6\u95F4\u5806\u53E0\u7684\u65E5\u671F\u5757\uFF1B\u5FC5\u987B\u4FDD\u7559\u4ECD\u7136\u6709\u6548\u7684\u5173\u952E\u7ED3\u8BBA\u3001\u9879\u76EE\u7EA6\u5B9A\u4E0E\u8E29\u5751\u7ECF\u9A8C\u3002",parameters:{type:"object",properties:{content:{type:"string",description:"\u7CBE\u7B80\u540E\u7684\u957F\u671F\u8BB0\u5FC6\u5168\u6587\uFF08Markdown\uFF1A\u6587\u9996\u4E00\u884C\u7EF4\u62A4\u8BF4\u660E\uFF0C\u6B63\u6587\u6309 `## \u4E3B\u9898` \u5206\u8282\uFF09"}},required:["content"]},async execute(r,e){let n=typeof r.content=="string"?r.content.trim():"";if(!n)return{ok:!1,content:"\u9519\u8BEF\uFF1Acontent \u4E0D\u80FD\u4E3A\u7A7A\u3002\u82E5\u8981\u6E05\u7A7A\u957F\u671F\u8BB0\u5FC6\uFF0C\u8BF7\u63D0\u4EA4\u975E\u7A7A\u8BF4\u660E\u5185\u5BB9\u3002"};try{let s=ot(e.cwd).longTerm.length;return{ok:!0,content:`\u5DF2\u91CD\u5199\u957F\u671F\u8BB0\u5FC6\uFF1A${tr(e.cwd,n)}
|
|
366
|
+
\uFF08${s} \u2192 ${n.length} \u5B57\u7B26\uFF09`,summary:`\u957F\u671F\u8BB0\u5FC6\u5DF2\u7CBE\u7B80\uFF08${s} \u2192 ${n.length} \u5B57\u7B26\uFF09`}}catch(s){return{ok:!1,content:`\u91CD\u5199\u957F\u671F\u8BB0\u5FC6\u5931\u8D25\uFF1A${s instanceof Error?s.message:String(s)}`}}}};var Xr=["blocked","needs_input","low_confidence"],co={blocked:"\u53D7\u963B",needs_input:"\u7B49\u5F85\u7528\u6237\u51B3\u5B9A",low_confidence:"\u7F6E\u4FE1\u5EA6\u4F4E"},uo={name:"report_status",description:"\u7ED3\u6784\u5316\u4E0A\u62A5\u5F53\u524D\u72B6\u6001\uFF0C\u7528\u4E8E\u300C\u5361\u4F4F / \u5FC5\u987B\u7531\u7528\u6237\u51B3\u5B9A / \u628A\u63E1\u4E0D\u8DB3\u300D\u4E09\u7C7B\u60C5\u5F62\uFF1Ablocked=\u5916\u90E8\u6761\u4EF6\u4E0D\u6EE1\u8DB3\uFF08\u7F3A\u51ED\u636E\u3001\u6743\u9650\u3001\u7F51\u7EDC\u3001\u4F9D\u8D56\uFF09\uFF0C\u65E0\u6CD5\u7EE7\u7EED\uFF1Bneeds_input=\u5FC5\u987B\u7531\u7528\u6237\u505A\u51FA\u9009\u62E9\u624D\u80FD\u7EE7\u7EED\uFF1Blow_confidence=\u8FD8\u80FD\u7EE7\u7EED\uFF0C\u4F46\u7ED3\u8BBA/\u5224\u65AD\u6CA1\u6709\u628A\u63E1\u3002blocked / needs_input \u4F1A\u8BA9\u76EE\u6807\u6682\u505C\u5E76\u628A\u539F\u56E0\u663E\u793A\u7ED9\u7528\u6237\uFF1Blow_confidence \u4E0D\u6253\u65AD\uFF0C\u53EA\u505A\u6807\u6CE8\u3002**\u80FD\u7528\u5DE5\u5177\u81EA\u5DF1\u89E3\u51B3\u7684\u4E8B\u4E0D\u8981\u4E0A\u62A5**\uFF1B\u4E5F\u4E0D\u8981\u7528\u5B83\u9003\u907F\u56F0\u96BE\u6B65\u9AA4\uFF08\u76EE\u6807\u6A21\u5F0F\u4E0B\uFF0C\u672C\u8F6E\u4E00\u6B21\u5DE5\u5177\u90FD\u6CA1\u8C03\u7528\u5C31\u62A5\u524D\u4E24\u7C7B\u4F1A\u88AB\u62D2\u7EDD\uFF09\u3002\u5982\u679C\u76EE\u6807\u53EA\u662F\u300C\u90E8\u5206\u5B8C\u6210\u300D\uFF0C\u7EE7\u7EED\u505A\uFF1B\u53EA\u6709\u771F\u7684\u65E0\u6CD5\u63A8\u8FDB\u65F6\u624D\u7528\u5B83\u3002",parameters:{type:"object",properties:{kind:{type:"string",enum:Xr,description:"blocked=\u65E0\u6CD5\u7EE7\u7EED\uFF08\u5916\u90E8\u6761\u4EF6\uFF09\uFF1Bneeds_input=\u9700\u8981\u7528\u6237\u51B3\u5B9A\uFF1Blow_confidence=\u80FD\u7EE7\u7EED\u4F46\u6CA1\u628A\u63E1"},summary:{type:"string",description:"\u4E00\u53E5\u8BDD\u8BF4\u660E\uFF1A\u5361\u5728\u54EA / \u9700\u8981\u7528\u6237\u51B3\u5B9A\u4EC0\u4E48 / \u54EA\u90E8\u5206\u6CA1\u628A\u63E1"},detail:{type:"string",description:"\u53EF\u9009\uFF1A\u5DF2\u7ECF\u5C1D\u8BD5\u8FC7\u4EC0\u4E48\u3001\u7F3A\u4EC0\u4E48\u3001\u5EFA\u8BAE\u7528\u6237\u600E\u4E48\u5904\u7406\uFF08needs_input \u65F6\u8BF7\u7ED9\u51FA\u5177\u4F53\u9009\u9879\uFF09"}},required:["kind","summary"]},async execute(r,e){let n=r.kind;if(!Xr.includes(n))return{ok:!1,content:`\u9519\u8BEF\uFF1Akind \u5FC5\u987B\u662F ${Xr.join(" / ")} \u4E4B\u4E00\u3002`};let s=typeof r.summary=="string"?r.summary.trim():"";if(!s)return{ok:!1,content:"\u9519\u8BEF\uFF1Asummary \u4E0D\u80FD\u4E3A\u7A7A\uFF0C\u8BF7\u4E00\u53E5\u8BDD\u8BF4\u660E\u5361\u70B9\u3002"};let i=typeof r.detail=="string"&&r.detail.trim()?r.detail.trim():void 0;return e.status?n!=="low_confidence"&&e.status.goalActive()&&e.status.toolCalls()===0?{ok:!1,content:"\u9519\u8BEF\uFF1A\u672C\u8F6E\u8FD8\u6CA1\u6709\u6267\u884C\u4EFB\u4F55\u5DE5\u5177\u8C03\u7528\u3002\u8BF7\u5148\u5B9E\u9645\u5C1D\u8BD5\uFF08\u8BFB\u6587\u4EF6\u3001\u8DD1\u547D\u4EE4\u3001\u67E5\u6587\u6863\uFF09\uFF0C\u786E\u8BA4\u771F\u7684\u65E0\u6CD5\u63A8\u8FDB\u540E\u518D\u4E0A\u62A5\uFF1B\u5982\u679C\u662F\u7B2C\u4E00\u6B65\u5C31\u7F3A\u5C11\u5FC5\u8981\u4FE1\u606F\uFF0C\u5148\u7528\u5DE5\u5177\u786E\u8BA4\u73B0\u72B6\uFF0C\u6216\u628A\u9700\u8981\u7528\u6237\u51B3\u5B9A\u7684\u4E8B\u9879\u5199\u8FDB\u6700\u7EC8\u7B54\u590D\u3002"}:(e.status.report({kind:n,summary:s,detail:i}),n==="low_confidence"?{ok:!0,content:"\u5DF2\u8BB0\u5F55\u300C\u7F6E\u4FE1\u5EA6\u4F4E\u300D\u3002\u53EF\u4EE5\u7EE7\u7EED\u63A8\u8FDB\uFF1B\u8BF7\u5728\u6700\u7EC8\u7B54\u590D\u91CC\u660E\u786E\u6807\u6CE8\u54EA\u4E9B\u7ED3\u8BBA\u6CA1\u6709\u628A\u63E1\u3001\u4F9D\u636E\u662F\u4EC0\u4E48\u3002",summary:`\u7F6E\u4FE1\u5EA6\u4F4E\uFF1A${s}`}:{ok:!0,content:`\u5DF2\u8BB0\u5F55\u300C${co[n]}\u300D\uFF1A${s}
|
|
367
|
+
\u76EE\u6807\u5C06\u6682\u505C\u5E76\u628A\u8FD9\u6761\u4FE1\u606F\u663E\u793A\u7ED9\u7528\u6237\u3002\u8BF7\u7528\u4E00\u5C0F\u6BB5\u8BDD\u8BF4\u660E\u73B0\u72B6\uFF08\u5DF2\u5C1D\u8BD5\u4EC0\u4E48\u3001\u7F3A\u4EC0\u4E48\u3001\u5EFA\u8BAE\u600E\u4E48\u505A\uFF09\uFF0C\u7136\u540E\u7ED3\u675F\u672C\u8F6E\u3002`,summary:`${co[n]}\uFF1A${s}`}):{ok:!1,content:"\u9519\u8BEF\uFF1A\u5F53\u524D\u73AF\u5883\u4E0D\u652F\u6301\u72B6\u6001\u4E0A\u62A5\u3002"}}};var Je=v(require("fs")),kn=v(require("path"));var Tn=v(require("fs")),ho=v(require("path"));var wn=1;function Vr(){return ho.join(E(),"skills.json")}function mo(){try{let r=Tn.readFileSync(Vr(),"utf8"),e=JSON.parse(r),n=Array.isArray(e.disabled)?e.disabled.filter(s=>typeof s=="string"&&s.trim()!==""):[];return{version:wn,disabled:n}}catch{return{version:wn,disabled:[]}}}function po(r){le(E()),Tn.writeFileSync(Vr(),`${JSON.stringify(r,null,2)}
|
|
368
|
+
`)}function Yr(){return mo().disabled}function Cn(r,e){let n=mo(),s=r.trim().toLowerCase(),i=n.disabled.filter(o=>o.toLowerCase()!==s);return e?i.length!==n.disabled.length?!1:(po({version:wn,disabled:[...i,r.trim()]}),!0):i.length===n.disabled.length?!1:(po({version:wn,disabled:i}),!0)}var fo="SKILL.md",go=8e4;function yo(r){return r.replace(/^["']|["']$/g,"").trim()}function kc(r){let e=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?/.exec(r);if(!e)return{meta:{},body:r};let n=e[1],s=r.slice(e[0].length),i=/^name:\s*(.+)$/m.exec(n)?.[1];return{meta:{name:i?yo(i):void 0,description:Ac(n)},body:s}}function Ac(r){let e=/^description:\s*(.*)$/m.exec(r)?.[1]?.trim();if(e&&e!==">"&&e!=="|"&&e!==">-"&&e!=="|-")return yo(e);let n=/^description:\s*[>|]-?\s*\n((?:[ \t]+\S.*\n?)+)/m.exec(r)?.[1];return n?n.replace(/\s+/g," ").trim():""}function Ec(r){let e=kn.join(r,fo);if(Je.existsSync(e))return e;try{let n=Je.readdirSync(r).find(s=>s.toLowerCase()===fo.toLowerCase());return n?kn.join(r,n):null}catch{return null}}function $o(r,e,n){let s;try{s=Je.readdirSync(r,{withFileTypes:!0})}catch{return}for(let i of s){if(!i.isDirectory())continue;let o=kn.join(r,i.name),a=Ec(o);if(!a)continue;let l;try{l=Je.readFileSync(a,"utf8")}catch{continue}let{meta:c}=kc(l),u=(c.name||i.name).trim();u&&n.set(u,{name:u,description:c.description??"",dir:o,file:a,source:e})}}function fe(r={}){let e=new Map;$o(Es(),"builtin",e),$o(_s(),"user",e);let n=[...e.values()].sort((i,o)=>i.name.localeCompare(o.name));if(r.includeDisabled)return n;let s=new Set(Yr().map(i=>i.toLowerCase()));return n.filter(i=>!s.has(i.name.toLowerCase()))}function vo(r,e={}){let n=r.trim().toLowerCase();if(n)return fe(e).find(s=>s.name.toLowerCase()===n)}function bo(r){let e=Je.readFileSync(r.file,"utf8");return e.length<=go?e:`${e.slice(0,go)}
|
|
369
369
|
|
|
370
|
-
\u2026\uFF08\u6280\u80FD\u5185\u5BB9\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD\uFF09`}function
|
|
371
|
-
[\u6267\u884C\u8D85\u65F6 ${e}ms]`:c,timedOut:u})},
|
|
370
|
+
\u2026\uFF08\u6280\u80FD\u5185\u5BB9\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD\uFF09`}function Oe(){return process.platform==="darwin"?"darwin":process.platform==="win32"?"win32":"linux"}var Zr="npm install -g @playwright/cli@latest",Qr="npx --yes playwright@latest install chromium",_c={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"'},So={playwright:[{name:"Playwright CLI\uFF08playwright-cli\uFF09",check:"playwright-cli --version",install:{linux:Zr,darwin:Zr,win32:Zr},postInstall:{linux:Qr,darwin:Qr,win32:Qr}}],officecli:[{name:"OfficeCLI\uFF08officecli\uFF09",check:"officecli --version",install:_c}]};function St(r){return So[r.trim().toLowerCase()]??[]}function xo(){return Object.keys(So)}function wo(r){return['SUDO="sudo -n"; [ -t 0 ] && SUDO="sudo"',`if command -v apt-get >/dev/null 2>&1; then $SUDO apt-get install -y ${r}`,`elif command -v dnf >/dev/null 2>&1; then $SUDO dnf install -y ${r}`,`elif command -v yum >/dev/null 2>&1; then $SUDO yum install -y ${r}`,`elif command -v pacman >/dev/null 2>&1; then $SUDO pacman -S --noconfirm ${r}`,`elif command -v zypper >/dev/null 2>&1; then $SUDO zypper --non-interactive install ${r}`,`elif command -v apk >/dev/null 2>&1; then $SUDO apk add ${r}`,'else echo "\u672A\u8BC6\u522B\u5230\u53D7\u652F\u6301\u7684\u5305\u7BA1\u7406\u5668\uFF08apt / dnf / yum / pacman / zypper / apk\uFF09" >&2; exit 1; fi'].join("; ")}var Rc={name:"xclip\uFF08X11 \u526A\u8D34\u677F\u5DE5\u5177\uFF09",check:"command -v xclip",install:{linux:wo("xclip")}},Pc={name:"wl-clipboard\uFF08Wayland \u526A\u8D34\u677F\u5DE5\u5177\uFF09",check:"command -v wl-paste",install:{linux:wo("wl-clipboard")}};function es(r=Oe()){return r!=="linux"?[]:[!!(process.env.WAYLAND_DISPLAY||process.env.WAYLAND_SOCKET)?Pc:Rc]}function To(r=Oe()){return es(r)}var ts=require("child_process");var Mc=15e3,An=9e5,Ic=2e4,ko=120,Ao=1500;function Eo(r,e,n){return new Promise(s=>{let i=process.platform==="win32",o=i?"cmd.exe":process.env.SHELL||"bash",l=(0,ts.spawn)(o,i?["/d","/s","/c",r]:["-lc",r],{env:process.env,windowsHide:!0,detached:!i}),c="",u=!1,h=!1,d,p=$=>{c.length<Ic&&(c+=$.toString())},m=$=>{h||(h=!0,clearTimeout(f),d&&clearTimeout(d),n?.removeEventListener("abort",b),s($))},y=()=>{if(!i&&l.pid)try{process.kill(-l.pid,"SIGKILL");return}catch{}try{l.kill("SIGKILL")}catch{}},g=()=>{d&&clearTimeout(d),d=setTimeout(()=>{m({ok:!1,output:u?`${c}
|
|
371
|
+
[\u6267\u884C\u8D85\u65F6 ${e}ms]`:c,timedOut:u})},Ao)},f=setTimeout(()=>{u=!0,y(),g()},e),b=()=>{y(),m({ok:!1,output:c+`
|
|
372
372
|
[\u5DF2\u53D6\u6D88]`,timedOut:!1})};if(n){if(n.aborted){b();return}n.addEventListener("abort",b,{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}
|
|
373
|
-
[\u6267\u884C\u8D85\u65F6 ${e}ms]`:c,timedOut:u})},
|
|
374
|
-
[\u6267\u884C\u8D85\u65F6 ${e}ms]`:c,timedOut:u})})})}function
|
|
375
|
-
`)};let h=r.postInstall?.[e];if(h){l(`$ ${h}`);let p=await c(h);for(let m of
|
|
373
|
+
[\u6267\u884C\u8D85\u65F6 ${e}ms]`:c,timedOut:u})},ko)}),l.on("close",$=>{m({ok:$===0&&!u,output:u?`${c}
|
|
374
|
+
[\u6267\u884C\u8D85\u65F6 ${e}ms]`:c,timedOut:u})})})}function ns(r,e=An,n){return new Promise(s=>{let i=process.platform==="win32",o=i?"cmd.exe":process.env.SHELL||"bash",l=(0,ts.spawn)(o,i?["/d","/s","/c",r]:["-lc",r],{stdio:"inherit",env:process.env,windowsHide:!0}),c=!1,u=!1,h,d=f=>{u||(u=!0,clearTimeout(y),h&&clearTimeout(h),n?.removeEventListener("abort",g),s(f))},p=()=>{try{l.kill("SIGKILL")}catch{}},m=()=>{h&&clearTimeout(h),h=setTimeout(()=>d({ok:!1,output:"",timedOut:c}),Ao)},y=setTimeout(()=>{c=!0,p(),m()},e),g=()=>{p(),m()};if(n){if(n.aborted){g();return}n.addEventListener("abort",g,{once:!0})}l.on("error",f=>{d({ok:!1,output:String(f),timedOut:!1})}),l.on("exit",f=>{h&&clearTimeout(h),h=setTimeout(()=>d({ok:f===0&&!c,output:"",timedOut:c}),ko)}),l.on("close",f=>{d({ok:f===0&&!c,output:"",timedOut:c})})})}async function et(r,e){return(await Eo(r.check,Mc,e)).ok}async function rs(r,e=Oe(),n,s,i={}){let o=r.install[e];if(!o)return{ok:!1,log:`\u5F53\u524D\u5E73\u53F0\uFF08${e}\uFF09\u6CA1\u6709\u53EF\u7528\u7684\u81EA\u52A8\u5B89\u88C5\u547D\u4EE4\u3002`};let a=[],l=p=>{let m=p.trim();m&&(a.push(m),s?.(m))},c=async p=>{if(!i.interactive)return Eo(p,An,n);let m=await ns(p,An,n);return m.ok||l(m.timedOut?`[\u6267\u884C\u8D85\u65F6 ${An}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 Co(u.output,12))l(p);if(!u.ok)return{ok:!1,log:a.join(`
|
|
375
|
+
`)};let h=r.postInstall?.[e];if(h){l(`$ ${h}`);let p=await c(h);for(let m of Co(p.output,12))l(m);if(!p.ok)return{ok:!1,log:a.join(`
|
|
376
376
|
`)}}return await et(r,n)?(l(`\u2713 ${r.name} \u5DF2\u5C31\u7EEA`),{ok:!0,log:a.join(`
|
|
377
377
|
`)}):(l(`\u26A0 \u5B89\u88C5\u547D\u4EE4\u5DF2\u6267\u884C\uFF0C\u4F46 \u201C${r.check}\u201D \u4ECD\u672A\u901A\u8FC7\uFF1B\u53EF\u80FD\u662F PATH \u5C1A\u672A\u5237\u65B0\uFF0C\u8BF7\u91CD\u65B0\u6253\u5F00\u7EC8\u7AEF\u540E\u518D\u8BD5\u3002`),{ok:!1,log:a.join(`
|
|
378
|
-
`)})}async function
|
|
379
|
-
`).slice(-2).join(" ");s.failed.push(`${i.name} \u2192 ${c}`)}}return s}function
|
|
380
|
-
`).map(s=>s.trimEnd()).filter(s=>s.trim().length>0).slice(-e)}var
|
|
378
|
+
`)})}async function _o(r,e={}){return Dc(St(r),e)}async function Dc(r,e={}){let n=e.platform??Oe(),s={installed:[],skipped:[],failed:[]};for(let i of r){if(await et(i,e.signal))continue;let o=i.install[n];if(!o){s.skipped.push(`${i.name}\uFF08\u5F53\u524D\u5E73\u53F0\u65E0\u81EA\u52A8\u5B89\u88C5\u547D\u4EE4\uFF09`);continue}if(!(e.confirm?await e.confirm(i,o):!1)){s.skipped.push(`${i.name}`);continue}e.onOutput?.(`\u6B63\u5728\u5B89\u88C5 ${i.name} \u2026\uFF08\u53EF\u80FD\u9700\u8981\u6570\u5206\u949F\uFF09`);let l=await rs(i,n,e.signal,e.onOutput);if(l.ok)s.installed.push(i.name);else{let c=l.log.split(`
|
|
379
|
+
`).slice(-2).join(" ");s.failed.push(`${i.name} \u2192 ${c}`)}}return s}function Co(r,e){return r.split(`
|
|
380
|
+
`).map(s=>s.trimEnd()).filter(s=>s.trim().length>0).slice(-e)}var Ro={name:"list_skills",description:"\u5217\u51FA\u7384\u732A\u5F53\u524D\u53EF\u7528\u7684\u5168\u90E8\u6280\u80FD\uFF08\u540D\u79F0\u4E0E\u7528\u9014\uFF09\u3002\u6280\u80FD\u662F\u4E00\u4EFD\u6307\u5BFC\u4F60\u4F7F\u7528\u7279\u5B9A\u5916\u90E8 CLI \u5DE5\u5177\u7684\u6307\u5357\u3002\u5F53\u4EFB\u52A1\u53EF\u80FD\u6D89\u53CA\u67D0\u4E2A\u9886\u57DF\uFF08\u6D4F\u89C8\u5668\u81EA\u52A8\u5316\u3001Office \u6587\u6863\u3001GitHub\u3001\u6570\u636E\u5E93\u7B49\uFF09\u65F6\uFF0C\u5148\u8C03\u7528\u672C\u5DE5\u5177\u67E5\u770B\u662F\u5426\u6709\u5BF9\u5E94\u6280\u80FD\u3002",parameters:{type:"object",properties:{},required:[]},async execute(r,e){let n=fe();if(n.length===0)return{ok:!0,content:"\u5F53\u524D\u6CA1\u6709\u53EF\u7528\u6280\u80FD\u3002"};let s=n.map(i=>{let o=i.source==="user"?"\uFF08\u7528\u6237\uFF09":"";return`- ${i.name}${o}\uFF1A${i.description||"\uFF08\u65E0\u63CF\u8FF0\uFF09"}`});return{ok:!0,content:`\u53EF\u7528\u6280\u80FD\uFF08${n.length} \u4E2A\uFF09\uFF1A
|
|
381
381
|
${s.join(`
|
|
382
|
-
`)}`,summary:`${n.length} \u4E2A\u6280\u80FD`}}},
|
|
382
|
+
`)}`,summary:`${n.length} \u4E2A\u6280\u80FD`}}},Po={name:"load_skill",description:"\u52A0\u8F7D\u6307\u5B9A\u6280\u80FD\u7684\u5B8C\u6574\u6307\u5357\uFF08SKILL.md \u5168\u6587\uFF09\uFF0C\u968F\u540E\u8BF7\u4E25\u683C\u6309\u6307\u5357\u4E2D\u7684\u6B65\u9AA4\u4E0E\u547D\u4EE4\u64CD\u4F5C\u3002\u82E5\u8BE5\u6280\u80FD\u4F9D\u8D56\u7684\u5916\u90E8\u547D\u4EE4\u5C1A\u672A\u5B89\u88C5\uFF0C\u7384\u732A\u4F1A\u81EA\u52A8\u5B89\u88C5\uFF08\u53EF\u80FD\u9700\u8981\u7528\u6237\u786E\u8BA4\u4E00\u6B21\uFF09\u3002\u6307\u5357\u5728\u672C\u6B21\u5BF9\u8BDD\u4E2D\u6301\u7EED\u6709\u6548\uFF0C\u540C\u4E00\u4E2A\u6280\u80FD\u65E0\u9700\u91CD\u590D\u52A0\u8F7D\u3002",parameters:{type:"object",properties:{name:{type:"string",description:"\u6280\u80FD\u540D\u79F0\uFF0C\u4F8B\u5982 playwright\u3001officecli"}},required:["name"]},async execute(r,e){let n=typeof r.name=="string"?r.name:"";if(!n.trim())return{ok:!1,content:"\u9519\u8BEF\uFF1A\u7F3A\u5C11\u6280\u80FD\u540D\u79F0\u53C2\u6570 name\u3002"};let s=vo(n);if(!s){let c=fe().map(u=>u.name).join(", ");return{ok:!1,content:`\u672A\u627E\u5230\u6280\u80FD "${n}"\u3002\u53EF\u7528\u6280\u80FD\uFF1A${c||"\uFF08\u65E0\uFF09"}\u3002\u53EF\u5148\u8C03\u7528 list_skills \u67E5\u770B\u3002`}}let i=[];if(St(s.name).length>0){let c=await _o(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
|
|
383
383
|
|
|
384
|
-
${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=
|
|
384
|
+
${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=bo(s),a=i.length>0?`> \u4F9D\u8D56\u5904\u7406\uFF1A
|
|
385
385
|
${i.map(c=>`> ${c}`).join(`
|
|
386
386
|
`)}
|
|
387
387
|
|
|
@@ -390,12 +390,12 @@ ${i.map(c=>`> ${c}`).join(`
|
|
|
390
390
|
> \u6280\u80FD\u76EE\u5F55\uFF1A${s.dir}
|
|
391
391
|
> \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
|
|
392
392
|
|
|
393
|
-
${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
|
|
394
|
-
`)}function
|
|
395
|
-
${
|
|
393
|
+
${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 Mo=["pending","in_progress","completed","cancelled"],Oc={pending:"[ ]",in_progress:"[~]",completed:"[x]",cancelled:"[-]"};function Lc(r){if(!Array.isArray(r))return"\u9519\u8BEF\uFF1Atodos \u5FC5\u987B\u662F\u6570\u7EC4\u3002";let e=[];for(let s=0;s<r.length;s++){let i=r[s];if(typeof i!="object"||i===null||Array.isArray(i))return`\u9519\u8BEF\uFF1Atodos[${s}] \u5FC5\u987B\u662F\u5BF9\u8C61\uFF08{content, status}\uFF09\u3002`;let{content:o,status:a}=i;if(typeof o!="string"||!o.trim())return`\u9519\u8BEF\uFF1Atodos[${s}].content \u4E0D\u80FD\u4E3A\u7A7A\u3002`;let l=Mo.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 Nc(r){return r.length===0?"\uFF08\u4EFB\u52A1\u5217\u8868\u4E3A\u7A7A\uFF09":r.map(e=>`${Oc[e.status]} ${e.content}`).join(`
|
|
394
|
+
`)}function jc(r){let e=r.filter(i=>i.status==="completed").length,n=r.find(i=>i.status==="in_progress"),s=r.filter(i=>i.status!=="cancelled").length;return n?`\u4EFB\u52A1 ${e}/${s} \xB7 \u8FDB\u884C\u4E2D\uFF1A${n.content}`:`\u4EFB\u52A1 ${e}/${s}`}var Io={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:Mo,description:"pending=\u5F85\u529E\uFF1Bin_progress=\u8FDB\u884C\u4E2D\uFF08\u540C\u65F6\u53EA\u80FD\u6709\u4E00\u4E2A\uFF09\uFF1Bcompleted=\u5DF2\u5B8C\u6210\uFF1Bcancelled=\u5DF2\u53D6\u6D88"}},required:["content","status"]}}},required:["todos"]},async execute(r,e){if(!e.todos)return{ok:!1,content:"\u9519\u8BEF\uFF1A\u5F53\u524D\u73AF\u5883\u4E0D\u652F\u6301\u4EFB\u52A1\u5217\u8868\u3002"};let n=Lc(r.todos);return typeof n=="string"?{ok:!1,content:n}:(e.todos.set(n),{ok:!0,content:`\u5DF2\u66F4\u65B0\u4EFB\u52A1\u5217\u8868\uFF1A
|
|
395
|
+
${Nc(n)}`,summary:jc(n)})}};var Do=v(require("crypto")),ie=v(require("fs")),zt=v(require("path"));function Se(){return zt.join(E(),"errors")}var En=50,Fc=200,Bc=6,Uc=4e3,zc=[[/sk-[A-Za-z0-9_-]{8,}/g,"sk-***"],[/AIza[A-Za-z0-9_-]{10,}/g,"AIza***"],[/(gh[pousr]_)[A-Za-z0-9]{10,}/g,"$1***"],[/(Bearer\s+)[A-Za-z0-9._-]{8,}/gi,"$1***"],[/((?:api[_-]?key|token|password|secret)\s*[":=]+\s*)[^\s",]{6,}/gi,"$1***"]];function is(r){let e=r;for(let[n,s]of zc)e=e.replace(n,s);return e}function os(r,e){return r.length>e?`${r.slice(0,e)}\u2026`:r}function Gc(r){if(r instanceof Error)return r.message||r.name;if(typeof r=="string")return r;try{return JSON.stringify(r)}catch{return String(r)}}function Jc(r){return r instanceof Error&&r.stack?os(is(r.stack),Uc):void 0}function Hc(r,e,n,s){let i=(s??"").split(`
|
|
396
396
|
`).slice(0,3).join(`
|
|
397
|
-
`);return
|
|
398
|
-
`,{mode:384}),
|
|
397
|
+
`);return Do.createHash("sha1").update(`${r}|${e??""}|${n}|${i}`).digest("hex").slice(0,10)}var ss=!1;function tt(r){if(ss)return null;ss=!0;try{let e=new Date().toISOString(),n=os(is(Gc(r.error)),800),s=Jc(r.error),i=Hc(r.kind,r.tool,n,s),o=Se();ie.mkdirSync(o,{recursive:!0});let a=zt.join(o,`${i}.json`),l=r.recent?.slice(-Bc).map(d=>({role:d.role,content:os(is(d.content??""),Fc)})),c={kind:r.kind,category:r.category??"unknown",message:n,version:B,node:process.version,platform:process.platform,arch:process.arch,pid:process.pid,cwd:r.cwd??process.cwd(),project:r.project,model:r.model,provider:r.provider,tool:r.tool,note:r.note,recent:l},u=Oo(a),h=u?{...u,...c,signature:i,stack:u.stack??s,firstTime:u.firstTime,lastTime:e,count:u.count+1}:{signature:i,...c,stack:s,firstTime:e,lastTime:e,count:1};return Kc(a,h),qc(),a}catch{return null}finally{ss=!1}}function Oo(r){try{let e=JSON.parse(ie.readFileSync(r,"utf8"));return!e||typeof e.signature!="string"?null:e}catch{return null}}function Kc(r,e){let n=`${r}.${process.pid}.tmp`;ie.writeFileSync(n,`${JSON.stringify(e,null,2)}
|
|
398
|
+
`,{mode:384}),ie.renameSync(n,r)}function qc(){let r=xt();if(!(r.length<=En))for(let e of r.slice(En))try{ie.rmSync(zt.join(Se(),`${e.signature}.json`),{force:!0})}catch{}}function xt(){let r;try{r=ie.readdirSync(Se()).filter(n=>n.endsWith(".json"))}catch{return[]}let e=[];for(let n of r){let s=Oo(zt.join(Se(),n));s&&e.push(s)}return e.sort((n,s)=>s.lastTime.localeCompare(n.lastTime))}function Lo(r,e=xt()){let n=r.trim().replace(/\.json$/,"");if(n)return/^\d+$/.test(n)?e[Number(n)-1]:e.find(s=>s.signature===n)??e.find(s=>s.signature.startsWith(n))}function No(){let r=xt();try{ie.rmSync(Se(),{recursive:!0,force:!0})}catch{return 0}return r.length}var _n=[Ro,Po,oo,ao,lo,Io,so,uo,Ni,Yi,eo,to,no,Zi,Qi,Fi,...Wr],Wc=new Set(["task","todo_write","goal_complete","report_status","memory_write","memory_compact",...Wr.map(r=>r.name)]);function Rn(r,e=_n){return e.find(n=>n.name===r)}function Pn(r=_n){return r.map(e=>({name:e.name,description:e.description,parameters:e.parameters}))}function jo(r){return _n.filter(e=>Wc.has(e.name)?!1:r?r.includes(e.name):!0)}async function Fo(r,e,n,s=_n){let i=Rn(r,s);if(!i)return{ok:!1,content:`\u9519\u8BEF\uFF1A\u672A\u77E5\u5DE5\u5177 "${r}"`};let o={};if(e&&e.trim())try{let d=JSON.parse(e);typeof d=="object"&&d!==null&&!Array.isArray(d)&&(o=d)}catch(d){return{ok:!1,content:`\u9519\u8BEF\uFF1A\u5DE5\u5177\u53C2\u6570\u4E0D\u662F\u5408\u6CD5 JSON\uFF1A${d instanceof Error?d.message:String(d)}`}}let a=i.parameters,l=a.properties??{},c=Array.isArray(a.required)?a.required:[],u=Object.keys(o).filter(d=>!(d in l));if(u.length>0){let d=Object.keys(l);return{ok:!1,content:`\u9519\u8BEF\uFF1A${r} \u6536\u5230\u672A\u77E5\u53C2\u6570 ${u.map(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${r} \u7F3A\u5C11\u5FC5\u586B\u53C2\u6570 ${h.map(d=>`"${d}"`).join("\u3001")}\u3002`};try{return await i.execute(o,n)}catch(d){return tt({kind:"tool-error",category:"bug",error:d,tool:r,cwd:n.cwd,project:G(n.cwd).dir}),{ok:!1,content:`\u5DE5\u5177\u6267\u884C\u5F02\u5E38\uFF1A${d instanceof Error?d.message:String(d)}`}}}async function Bo(r,e,n){let s=new Array(r.length);if(r.length===0)return s;let i=Number.isFinite(e)?Math.floor(e):1,o=Math.min(Math.max(1,i),r.length),a=0;return await Promise.all(Array.from({length:o},async()=>{for(;;){let l=a++;if(l>=r.length)return;s[l]=await n(r[l],l)}})),s}function Uo(r){return`## \u76EE\u6807\u6A21\u5F0F\uFF08/goal\uFF09
|
|
399
399
|
\u7528\u6237\u8BBE\u5B9A\u4E86\u4E00\u4E2A\u76EE\u6807\uFF0C\u7CFB\u7EDF\u4F1A\u5728\u4F60**\u6BCF\u6B21\u7ED9\u51FA\u7B54\u590D\u540E\u81EA\u52A8\u7EE7\u7EED**\uFF0C\u76F4\u5230\u4F60\u8C03\u7528 \`goal_complete\` \u58F0\u660E\u5B8C\u6210\u3002
|
|
400
400
|
\u56E0\u6B64**\u4E0D\u8981\u5728\u4E2D\u9014\u505C\u4E0B\u6765\u5F81\u6C42\u786E\u8BA4**\u2014\u2014\u672C\u6A21\u5F0F\u4E0B\u6CA1\u6709\u4EBA\u4F1A\u56DE\u7B54\u4F60\u3002
|
|
401
401
|
|
|
@@ -416,7 +416,7 @@ ${r}
|
|
|
416
416
|
**\u4E0D\u8981\u628A\u53D7\u963B\u5F53\u6210\u5B8C\u6210**\uFF1A\u82E5\u786E\u8BA4\u65E0\u6CD5\u7EE7\u7EED\uFF08\u7F3A\u51ED\u636E\u3001\u5916\u90E8\u4F9D\u8D56\u4E0D\u53EF\u7528\u3001\u5FC5\u987B\u7531\u7528\u6237\u51B3\u5B9A\uFF09\uFF0C
|
|
417
417
|
\u8C03\u7528 \`report_status(blocked | needs_input)\` \u8BF4\u660E\u5DF2\u5C1D\u8BD5\u4EC0\u4E48\u3001\u7F3A\u4EC0\u4E48 \u2014\u2014 \u76EE\u6807\u4F1A\u6682\u505C\u5E76\u4FDD\u7559\uFF0C
|
|
418
418
|
\u7B49\u4F60\u8865\u5145\u6761\u4EF6\u540E\u7528 \`/goal continue\` \u7EE7\u7EED\uFF1B\`goal_complete\` \u53EA\u7528\u4E8E\u771F\u6B63\u5B8C\u6210\u3002
|
|
419
|
-
6. \u8C03\u7528 \`goal_complete\` \u4E4B\u540E\uFF0C\u7528\u4E00\u6BB5\u7B80\u77ED\u7684\u6700\u7EC8\u603B\u7ED3\u6536\u5C3E\uFF0C\u4E0D\u8981\u518D\u5F00\u59CB\u65B0\u5DE5\u4F5C\u3002`}function
|
|
419
|
+
6. \u8C03\u7528 \`goal_complete\` \u4E4B\u540E\uFF0C\u7528\u4E00\u6BB5\u7B80\u77ED\u7684\u6700\u7EC8\u603B\u7ED3\u6536\u5C3E\uFF0C\u4E0D\u8981\u518D\u5F00\u59CB\u65B0\u5DE5\u4F5C\u3002`}function zo(r){return`[\u76EE\u6807\u6A21\u5F0F] \u8BF7\u628A\u4E0B\u9762\u8FD9\u4EF6\u4E8B\u4F5C\u4E3A\u76EE\u6807\uFF0C\u6301\u7EED\u63A8\u8FDB\u76F4\u5230\u5B8C\u6210\u3002\u672C\u6A21\u5F0F\u4E0B\u7CFB\u7EDF\u4F1A\u81EA\u52A8\u7EE7\u7EED\uFF0C\u4E0D\u4F1A\u4E2D\u9014\u505C\u4E0B\u3002
|
|
420
420
|
|
|
421
421
|
## \u76EE\u6807
|
|
422
422
|
${r}
|
|
@@ -427,7 +427,7 @@ ${r}
|
|
|
427
427
|
3. \u76EE\u6807\u5168\u90E8\u5B8C\u6210\u5E76\u9A8C\u8BC1\u901A\u8FC7\u540E\uFF0C\u8C03\u7528 \`goal_complete\`\uFF0C\u518D\u7ED9\u51FA\u7B80\u77ED\u7684\u6700\u7EC8\u603B\u7ED3\u3002
|
|
428
428
|
4. \u4E2D\u9014\u4E0D\u8981\u505C\u4E0B\u6765\u8BE2\u95EE\u786E\u8BA4 \u2014\u2014 \u9700\u8981\u51B3\u5B9A\u65F6\u81EA\u5DF1\u9009\u6700\u5408\u7406\u7684\u65B9\u6848\uFF0C\u5E76\u8BF4\u660E\u7406\u7531\u3002
|
|
429
429
|
5. \u82E5\u786E\u5B9E\u65E0\u6CD5\u63A8\u8FDB\uFF08\u7F3A\u51ED\u636E\u3001\u6743\u9650\u3001\u5916\u90E8\u4F9D\u8D56\uFF09\uFF0C\u8C03\u7528 \`report_status(blocked)\` \u8BF4\u660E\u539F\u56E0\uFF0C
|
|
430
|
-
\u4E0D\u8981\u5047\u88C5\u5B8C\u6210\uFF0C\u4E5F\u4E0D\u8981\u7A7A\u8F6C\u3002`}function
|
|
430
|
+
\u4E0D\u8981\u5047\u88C5\u5B8C\u6210\uFF0C\u4E5F\u4E0D\u8981\u7A7A\u8F6C\u3002`}function Go(r,e,n=[]){let s=n.filter(o=>o.status!=="completed"&&o.status!=="cancelled"),i=n.length===0?"":`
|
|
431
431
|
|
|
432
432
|
## \u4EFB\u52A1\u6E05\u5355\uFF08todo_write\uFF09
|
|
433
433
|
${n.map(o=>`${o.status==="completed"?"[x]":o.status==="in_progress"?"[~]":o.status==="cancelled"?"[-]":"[ ]"} ${o.content}`).join(`
|
|
@@ -442,7 +442,7 @@ ${r}${i}
|
|
|
442
442
|
- \u6BCF\u8F6E\u90FD\u8981\u6709\u5B9E\u9645\u4EA7\u51FA\uFF08\u6539\u4EE3\u7801\u3001\u8DD1\u547D\u4EE4\u3001\u9A8C\u8BC1\u7ED3\u679C\uFF09\uFF0C\u4E0D\u8981\u53EA\u8F93\u51FA\u8BF4\u660E\u3002
|
|
443
443
|
- \u53EA\u6709\u76EE\u6807\u771F\u6B63\u5B8C\u6210\u5E76\u9A8C\u8BC1\u901A\u8FC7\uFF0C\u624D\u8C03\u7528 \`goal_complete\`\uFF1B\u786E\u5B9E\u65E0\u6CD5\u7EE7\u7EED\u65F6\u6539\u7528
|
|
444
444
|
\`report_status(blocked | needs_input)\`\uFF08\u76EE\u6807\u4F1A\u6682\u505C\u5E76\u4FDD\u7559\uFF09\uFF0C\u4E0D\u8981\u628A\u5B83\u5F53\u6210\u5B8C\u6210\u3002
|
|
445
|
-
${s.length>0?`- \u5F53\u524D\u8FD8\u6709 ${s.length} \u9879\u672A\u5B8C\u6210\uFF0C\u4F18\u5148\u63A8\u8FDB\u5B83\u4EEC\u3002`:""}`}function
|
|
445
|
+
${s.length>0?`- \u5F53\u524D\u8FD8\u6709 ${s.length} \u9879\u672A\u5B8C\u6210\uFF0C\u4F18\u5148\u63A8\u8FDB\u5B83\u4EEC\u3002`:""}`}function Jo(r,e,n,s,i){let a=`\u4F60\u662F\u300C\u7384\u732A\u300D\uFF08XuanZhu\uFF09\uFF0C\u4E00\u6B3E\u8FD0\u884C\u5728\u7EC8\u7AEF\u4E2D\u7684 AI \u7F16\u7801 Agent\u3002
|
|
446
446
|
|
|
447
447
|
\u4F60\u7684\u5DE5\u4F5C\u76EE\u5F55\uFF1A${r}
|
|
448
448
|
|
|
@@ -529,26 +529,26 @@ ${s.length>0?`- \u5F53\u524D\u8FD8\u6709 ${s.length} \u9879\u672A\u5B8C\u6210\uF
|
|
|
529
529
|
- \u82E5\u4EFB\u52A1\u65E0\u6CD5\u5B8C\u6210\uFF0C\u8BF4\u660E\u539F\u56E0\u548C\u6240\u9700\u4FE1\u606F\u3002`;return n&&n.trim()&&(a+=`
|
|
530
530
|
|
|
531
531
|
## \u9879\u76EE\u89C4\u5219\uFF08\u6765\u81EA\u9879\u76EE\u6839 .xuanzhu/rules.md\uFF0C\u8BF7\u4F18\u5148\u9075\u5B88\uFF09
|
|
532
|
-
${n.trim()}`),a+=
|
|
532
|
+
${n.trim()}`),a+=Xc(s,i),e&&e.trim()&&(a+=`
|
|
533
533
|
|
|
534
534
|
## \u9644\u52A0\u6307\u4EE4
|
|
535
|
-
${e.trim()}`),a}var
|
|
535
|
+
${e.trim()}`),a}var Mn=1500;function Xc(r,e){let n="\n\n## \u9879\u76EE\u8BB0\u5FC6\n\u672C\u9879\u76EE\u5728 `.xuanzhu/memory/` \u4E2D\u4FDD\u5B58\u8DE8\u4F1A\u8BDD\u8BB0\u5FC6\uFF0C\u5206\u4E24\u5C42\uFF1A\n- **\u957F\u671F\u8BB0\u5FC6 `MEMORY.md`**\uFF1A**\u6309\u4E3B\u9898\u6574\u7406\u7684\u7ED3\u8BBA\u5E93** \u2014\u2014 \u8DE8\u4F1A\u8BDD\u7A33\u5B9A\u7684\u4E8B\u5B9E\u3001\u53E3\u5F84\u4E0E\u8E29\u5751\u3002\n- **\u5F53\u65E5\u65E5\u5FD7 `YYYY-MM-DD.md`**\uFF1A\u5F53\u5929\u7684\u8FDB\u5C55\u4E0E\u8FC7\u7A0B\u8BB0\u5F55\u3002\n\u5DE5\u5177\uFF1A\n- **`memory_read`**\uFF1A\u8BFB\u53D6\u957F\u671F\u8BB0\u5FC6\u5168\u6587\u4E0E\u6700\u8FD1\u4E00\u4EFD\u65E5\u5FD7\u3002\u5F00\u59CB\u4E00\u9879\u9700\u8981\u9879\u76EE\u80CC\u666F\u7684\u4EFB\u52A1\u524D**\u5E94\u5F53\u5148\u8BFB**\uFF0C\u907F\u514D\u91CD\u590D\u6478\u7D22\u3001\u91CD\u590D\u8E29\u5751\u3002\n- **`memory_write`**\uFF1A\u5199\u5165\u503C\u5F97\u8DE8\u4F1A\u8BDD\u4FDD\u7559\u7684\u4FE1\u606F\uFF0C**\u6BCF\u5B8C\u6210\u4E00\u4EF6\u5B9E\u8D28\u5DE5\u4F5C\u90FD\u5FC5\u987B\u5199**\u3002`scope=daily`\uFF08\u9ED8\u8BA4\uFF09\u8FFD\u52A0\u5F53\u65E5\u8FDB\u5C55\uFF1B`scope=long` \u8FFD\u52A0\u4E00\u6761\u957F\u671F\u8BB0\u5FC6\u5757\u3002\n- **`memory_compact`**\uFF1A\u7528\u7CBE\u7B80\u540E\u7684**\u5B8C\u6574\u5185\u5BB9**\u91CD\u5199\u957F\u671F\u8BB0\u5FC6\u3002**\u8981\u628A\u65B0\u7ED3\u8BBA\u5E76\u8FDB\u5DF2\u6709\u5C0F\u8282\u65F6\u7528\u5B83\uFF0C\u800C\u4E0D\u662F\u518D\u8FFD\u52A0\u4E00\u5757\u3002**\n\n**\u957F\u671F\u8BB0\u5FC6\u600E\u4E48\u5199\uFF08\u51B3\u5B9A\u5B83\u5728\u540E\u7EED\u4F1A\u8BDD\u91CC\u662F\u5426\u771F\u7684\u6709\u7528\uFF09**\uFF1A\n1. **\u6309\u4E3B\u9898\u5206\u8282\uFF0C\u4E0D\u6309\u65F6\u95F4\u5806\u780C**\uFF1A\u5982 `## \u73AF\u5883\u4E0E\u90E8\u7F72`\u3001`## \u6743\u9650\u673A\u5236`\u3001`## \u5E38\u89C1\u5751`\uFF1B\u540C\u4E00\u4E3B\u9898\u7684\u65B0\u53D1\u73B0\u8981**\u5E76\u8FDB\u5DF2\u6709\u5C0F\u8282**\uFF08`memory_read` \u2192 `memory_compact` \u91CD\u5199\uFF09\uFF0C\u4E0D\u8981\u5728\u6587\u672B\u518D\u6302\u4E00\u6761\u65E5\u671F\u5757\u3002\u6587\u9996\u7559\u4E00\u884C\u7EF4\u62A4\u8BF4\u660E\uFF1A\u8FD9\u4EFD\u6587\u4EF6\u653E\u4EC0\u4E48 + \u6700\u8FD1\u4E00\u6B21\u6574\u7406\u65E5\u671F\u3002\u5C0F\u8282**\u6309\u91CD\u8981\u6027\u4ECE\u524D\u5F80\u540E\u6392**\uFF08\u6CE8\u5165\u63D0\u793A\u8BCD\u7684\u53EA\u662F\u5F00\u5934\u4E00\u8282\u9009\uFF09\u3002\n2. **\u53EA\u5199\u8DE8\u4F1A\u8BDD\u7A33\u5B9A\u3001\u53EF\u590D\u7528\u7684\u5185\u5BB9**\uFF1A\u7ED3\u8BBA\u4E0E\u53E3\u5F84\u3001\u9879\u76EE\u7EA6\u5B9A\u3001\u7528\u6237\u7684\u504F\u597D\u4E0E\u8981\u6C42\u3001\u8E29\u8FC7\u7684\u5751\u53CA\u5176**\u539F\u56E0\u4E0E\u89E3\u6CD5**\u3001\u5173\u952E\u8DEF\u5F84 / \u547D\u4EE4 / \u7AEF\u53E3\u4E4B\u7C7B\u7684\u73AF\u5883\u4E8B\u5B9E\u3002\n3. **\u6761\u76EE\u683C\u5F0F\uFF1A\u5148\u7ED3\u8BBA\uFF0C\u518D\u8BF4\u4F9D\u636E** \u2014\u2014 \u5177\u4F53\u5230 `file.ts::func()`\u3001\u8868\u540D\u6216\u53EF\u76F4\u63A5\u6267\u884C\u7684\u547D\u4EE4\uFF0C\u5FC5\u8981\u65F6\u5E26\u65E5\u671F / \u7248\u672C\u951A\u70B9\uFF1B**\u5371\u9669\u6216\u4E0D\u53EF\u9006\u7684\u64CD\u4F5C\u6807 `\u26A0`**\u3002\n4. **\u7EC6\u8282\u5916\u7F6E**\uFF1A\u7248\u672C\u53D9\u4E8B\u4E0E\u957F\u7BC7\u8BBA\u8BC1\u7559\u5728\u9879\u76EE\u6587\u6863\u548C\u4EE3\u7801\u91CC\uFF0C\u957F\u671F\u8BB0\u5FC6\u53EA\u7559\u7ED3\u8BBA + \u6307\u9488\uFF08\u5982 `\u8BE6\u89C1 docs/xxx.md`\uFF09\u2014\u2014 \u8BB0\u5FC6\u8981\u77ED\u5230\u80FD\u6574\u7BC7\u8BFB\u5B8C\uFF0C\u7EC6\u8282\u9760\u5DE5\u5177\u53BB\u53D6\u3002\n5. **\u5220\u9664\u548C\u5199\u5165\u4E00\u6837\u91CD\u8981**\uFF1A\u5DF2\u8FC7\u65F6\u3001\u5DF2\u88AB\u63A8\u7FFB\u3001\u5DF2\u5199\u8FDB\u9879\u76EE\u6587\u6863\u7684\u5185\u5BB9\u8981\u5220\u6389\uFF0C\u65B0\u65E7\u7ED3\u8BBA\u5E76\u5B58\u53EA\u4F1A\u8BA9\u8BB0\u5FC6\u628A\u4EBA\u5E26\u504F\u3002\n6. **\u4E0D\u8981\u8BB0\u5F55**\uFF1A\u4E34\u65F6\u8DEF\u5F84\u3001\u4E00\u6B21\u6027\u547D\u4EE4\u8F93\u51FA\u3001\u5DE5\u5177\u62A5\u9519\u3001\u7EAF\u63A2\u7D22\u8FC7\u7A0B\u3001\u5F53\u5929\u7684\u6D41\u6C34\u8FDB\u5C55\uFF08\u8FD9\u4E9B\u8FDB\u5F53\u65E5\u65E5\u5FD7\uFF09\u2014\u2014 \u5199\u8FDB\u53BB\u53EA\u4F1A\u6324\u5360\u540E\u7EED\u4F1A\u8BDD\u7684\u4E0A\u4E0B\u6587\u3002\n- \u957F\u671F\u8BB0\u5FC6\u8D85\u51FA\u4E0A\u9650\u65F6\u4F1A\u88AB**\u81EA\u52A8\u7CBE\u7B80**\uFF1A\u53BB\u9664\u5B8C\u5168\u91CD\u590D\u7684\u8BB0\u5F55 + \u88C1\u526A\u6700\u65E7\u7684\u8FFD\u52A0\u5757\uFF08`## \u65F6\u95F4\u6233`\uFF0C\u6700\u65B0\u7684\u4E00\u5757\u4FDD\u7559\uFF09\uFF1B**\u6309\u4E3B\u9898\u6574\u7406\u7684\u7A33\u5B9A\u5C0F\u8282\u4E0D\u4F1A\u88AB\u81EA\u52A8\u5220\u9664**\uFF0C\u4ECD\u8D85\u9650\u65F6\u4F1A\u63D0\u793A\u4F60\u7528 `memory_compact` \u505A\u8BED\u4E49\u538B\u7F29\u3002",s=r?.longTerm?.trim();if(s){let a=s.length>Mn?`${s.slice(0,Mn)}
|
|
536
536
|
\u2026\uFF08\u5DF2\u622A\u65AD\uFF0C\u53EF\u7528 memory_read \u67E5\u770B\u5B8C\u6574\u5185\u5BB9\uFF09`:s;n+=`
|
|
537
537
|
|
|
538
538
|
### \u73B0\u6709\u957F\u671F\u8BB0\u5FC6\uFF08\u8282\u9009\uFF09
|
|
539
|
-
${a}`}let i=e??
|
|
539
|
+
${a}`}let i=e??we;s&&i>0&&s.length>i&&(n+=`
|
|
540
540
|
|
|
541
541
|
### \u26A0 \u957F\u671F\u8BB0\u5FC6\u4ECD\u7136\u8FC7\u957F
|
|
542
542
|
\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
|
|
543
543
|
1. \u7528 \`memory_read\` \u8BFB\u53D6\u957F\u671F\u8BB0\u5FC6\u5168\u6587\uFF1B
|
|
544
544
|
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
|
|
545
|
-
3. \u7528 \`memory_compact\` \u63D0\u4EA4\u7CBE\u7B80\u540E\u7684**\u5B8C\u6574**\u7248\u672C \u2014\u2014 \u5FC5\u987B\u4FDD\u7559\u4ECD\u7136\u6709\u6548\u7684\u7ED3\u8BBA\u3001\u9879\u76EE\u7EA6\u5B9A\u4E0E\u8E29\u5751\u7ECF\u9A8C\u3002`);let o=r?.recentDaily?.trim();if(o){let a=o.length>
|
|
545
|
+
3. \u7528 \`memory_compact\` \u63D0\u4EA4\u7CBE\u7B80\u540E\u7684**\u5B8C\u6574**\u7248\u672C \u2014\u2014 \u5FC5\u987B\u4FDD\u7559\u4ECD\u7136\u6709\u6548\u7684\u7ED3\u8BBA\u3001\u9879\u76EE\u7EA6\u5B9A\u4E0E\u8E29\u5751\u7ECF\u9A8C\u3002`);let o=r?.recentDaily?.trim();if(o){let a=o.length>Mn?`${o.slice(-Mn)}
|
|
546
546
|
\u2026\uFF08\u5DF2\u622A\u65AD\uFF0C\u53EF\u7528 memory_read \u67E5\u770B\u5B8C\u6574\u5185\u5BB9\uFF09`:o;n+=`
|
|
547
547
|
|
|
548
548
|
### \u4ECA\u65E5\u65E5\u5FD7\uFF08\u8282\u9009\uFF09
|
|
549
|
-
${a}`}return n}var
|
|
549
|
+
${a}`}return n}var Vc={blocked:"\u53D7\u963B",needs_input:"\u7B49\u5F85\u7528\u6237\u51B3\u5B9A",low_confidence:"\u7F6E\u4FE1\u5EA6\u4F4E"},Yc=120,Zc=3,Qc=5,Ho=4,eu=.5;function Gt(r,e){let n=r.replace(/\s+/g," ").trim();return n.length>e?`${n.slice(0,e)}\u2026`:n}function tu(r){let e=Date.parse(r);if(!Number.isFinite(e))return null;let n=Math.max(0,Math.floor((Date.now()-e)/1e3));if(n<60)return`${n}s`;let s=Math.floor(n/60);return s<60?`${s}m`:`${Math.floor(s/60)}h${String(s%60).padStart(2,"0")}m`}function Ko(r){let e=[];if(r.goal){let s=r.goal.completed?"\u5DF2\u5B8C\u6210":"\u8FDB\u884C\u4E2D",i=tu(r.goal.startedAt);e.push(`- \u76EE\u6807\uFF1A${Gt(r.goal.text,Yc)}\uFF08${s}${i?` \xB7 \u5DF2\u7528 ${i}`:""}\uFF09`)}r.status&&e.push(`- \u72B6\u6001\uFF1A${Vc[r.status.kind]} \u2014\u2014 ${Gt(r.status.summary,100)}`);let n=r.todos.filter(s=>s.status!=="cancelled");if(n.length>0){let s=n.filter(l=>l.status==="completed").length,i=n.find(l=>l.status==="in_progress"),o=n.filter(l=>l.status==="pending").slice(0,Zc),a=`- \u4EFB\u52A1\uFF1A${s}/${n.length} \u5B8C\u6210`;if(i&&(a+=`\uFF1B\u8FDB\u884C\u4E2D\uFF1A${Gt(i.content,60)}`),o.length>0){a+=`\uFF1B\u5F85\u529E\uFF1A${o.map(c=>Gt(c.content,40)).join("\u3001")}`;let l=n.filter(c=>c.status==="pending").length-o.length;l>0&&(a+=` \u7B49 ${l+o.length} \u9879`)}e.push(a)}if(r.recentActions.length>0&&e.push(`- \u6700\u8FD1\u52A8\u4F5C\uFF1A${r.recentActions.slice(-Qc).map(s=>`${s.name} ${s.ok?"\u2713":"\u2717"}`).join("\u3001")}`),r.changedFiles.length>0){let s=r.changedFiles.slice(-Ho).map(o=>Gt(o,48)),i=r.changedFiles.length>Ho?` \u7B49 ${r.changedFiles.length} \u4E2A\u6587\u4EF6`:"";e.push(`- \u672C\u6B21\u4F1A\u8BDD\u5DF2\u6539\u52A8\uFF1A${s.join("\u3001")}${i}`)}if(typeof r.contextUsage=="number"&&r.contextUsage>=eu){let s=Math.min(100,Math.round(r.contextUsage*100));e.push(`- \u4E0A\u4E0B\u6587\uFF1A\u7EA6 ${s}%\uFF08\u8F83\u65E9\u5185\u5BB9\u53EF\u80FD\u5DF2\u88AB\u88C1\u526A\uFF09`)}return e.length===0?null:`[\u5F53\u524D\u72B6\u6001 \xB7 \u7CFB\u7EDF\u6839\u636E\u786E\u5B9A\u4E8B\u5B9E\u751F\u6210\uFF0C\u4EC5\u4F9B\u53C2\u8003\uFF0C\u4E0D\u8981\u590D\u8FF0]
|
|
550
550
|
${e.join(`
|
|
551
|
-
`)}`}function
|
|
551
|
+
`)}`}function qo(r){return/(^|[\s/])(npm|pnpm|yarn|bun)\s+(run\s+)?(test|build|typecheck|lint|check)\b|vitest|jest|pytest|py_compile|tsc\b|go\s+(test|build|vet)|cargo\s+(test|build|check|clippy)|mvn\s+test|gradlew?\s+\S*(test|build|check)|make\s+(test|check|build)|dotnet\s+(test|build)|ruff\b|eslint\b|mypy\b|flake8\b|phpunit|rspec\b|bats\b/i.test(r)}function Wo(r){let e=[],n=r.incompleteTodos??[];if(n.length>0){let i=n.slice(0,5).map(a=>` - [${a.status==="in_progress"?"\u8FDB\u884C\u4E2D":"\u5F85\u529E"}] ${a.content}`).join(`
|
|
552
552
|
`),o=n.length>5?`
|
|
553
553
|
\u2026\u8FD8\u6709 ${n.length-5} \u9879`:"";e.push(`\u4EFB\u52A1\u6E05\u5355\u91CC\u8FD8\u6709 ${n.length} \u9879\u672A\u5B8C\u6210\uFF1A
|
|
554
554
|
${i}${o}
|
|
@@ -562,89 +562,89 @@ ${e.join(`
|
|
|
562
562
|
|
|
563
563
|
`)}
|
|
564
564
|
|
|
565
|
-
\u82E5\u786E\u5B9E\u9700\u8981\u73B0\u5728\u505C\u4E0B\uFF0C\u8BF7\u5728\u7B54\u590D\u91CC\u8BF4\u660E\u5C5E\u4E8E\u54EA\u79CD\u60C5\u51B5\uFF08\u53D7\u963B / \u9700\u8981\u7528\u6237\u51B3\u5B9A / \u6709\u610F\u6682\u505C\uFF09\u4E0E\u539F\u56E0\u3002`}var
|
|
565
|
+
\u82E5\u786E\u5B9E\u9700\u8981\u73B0\u5728\u505C\u4E0B\uFF0C\u8BF7\u5728\u7B54\u590D\u91CC\u8BF4\u660E\u5C5E\u4E8E\u54EA\u79CD\u60C5\u51B5\uFF08\u53D7\u963B / \u9700\u8981\u7528\u6237\u51B3\u5B9A / \u6709\u610F\u6682\u505C\uFF09\u4E0E\u539F\u56E0\u3002`}var Vo=v(require("path")),nu=new Set(["read_file","list_dir","glob","grep"]),ru=/(^|\/)(\.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,In=400,su=.5,as=1e6,iu=4,ou=1,au=new Set(["read_file","list_dir","glob","grep"]),lu=8,cu=4e4,ls=2e4,uu=60,du=16,pu=4,hu=3,mu="[\u7CFB\u7EDF] \u672C\u6B21\u8C03\u7528\u5DF2\u8DF3\u8FC7",fu=12,Xo=120;function gu(){return{role:"system",content:`[\u4E0A\u4E0B\u6587\u63D0\u9192] \u66F4\u65E9\u7684\u5BF9\u8BDD\u5DF2\u56E0\u8D85\u51FA\u4E0A\u4E0B\u6587\u7A97\u53E3\u88AB\u88C1\u526A\uFF0C\u4F60\u770B\u5230\u7684**\u4E0D\u662F\u5B8C\u6574\u5386\u53F2**\uFF1A
|
|
566
566
|
\xB7 \u88AB\u88C1\u6389\u7684\u5185\u5BB9\u4E0D\u8981\u63A8\u6D4B\u3001\u4E0D\u8981\u8865\u505A\uFF1B
|
|
567
567
|
\xB7 \u4E0A\u6587\u91CC\u90A3\u4E9B\u6CA1\u6709\u7ED3\u8BBA\u7684\u65E7\u4EFB\u52A1\u53EA\u662F\u6B8B\u7247\uFF0C**\u4E0D\u4EE3\u8868\u8981\u63A5\u7740\u505A**\uFF1B
|
|
568
568
|
\xB7 \u53EA\u6709\u5F53\u7528\u6237\u6700\u65B0\u4E00\u6761\u6D88\u606F\u660E\u786E\u8981\u6C42\u7EE7\u7EED\u65F6\u624D\u7EED\u505A\uFF0C\u5426\u5219\u5148\u56DE\u7B54\u4ED6\u5F53\u524D\u8FD9\u6761\u6D88\u606F\uFF1B
|
|
569
|
-
\xB7 \u82E5\u5F53\u524D\u6D88\u606F\u6307\u5411\u4F60\u5DF2\u7ECF\u770B\u4E0D\u5230\u7684\u4E0A\u4E0B\u6587\uFF0C\u5148\u95EE\u6E05\u695A\uFF0C\u518D\u52A8\u624B\u3002`}}var
|
|
569
|
+
\xB7 \u82E5\u5F53\u524D\u6D88\u606F\u6307\u5411\u4F60\u5DF2\u7ECF\u770B\u4E0D\u5230\u7684\u4E0A\u4E0B\u6587\uFF0C\u5148\u95EE\u6E05\u695A\uFF0C\u518D\u52A8\u624B\u3002`}}var Dn=class r{provider;config;cwd;events;systemPrompt;warnedTightContext=!1;historyTrimmed=!1;history=[];activeModel;tools;systemPromptOverride;maxToolRoundsOverride;sessionFile;todos=[];goal;recentActions=[];sessionChangedFiles=new Set;contextUsage;runChangedFiles=new Set;runActionSeq=0;runLastChangeSeq=0;runLastVerifySeq=0;finishGateUsed=!1;runTouchedTodos=!1;runStatus;deviceBridge;pendingMemoryNotices=[];constructor(e,n,s,i,o,a){this.provider=e,this.config=n,this.cwd=s,this.events=i,this.activeModel=o??_e(n),this.tools=a?.tools,this.systemPromptOverride=a?.systemPrompt,this.maxToolRoundsOverride=a?.maxToolRounds,this.sessionFile=a?.sessionFile,this.systemPrompt=this.composeSystemPrompt()}getActiveModel(){return this.activeModel}switchModel(e){return this.activeModel&&this.activeModel.id===e.id?!1:(this.provider=It(this.config,e),this.activeModel=e,sr(this.config,e),this.persistConfig(),!0)}composeSystemPrompt(){return this.systemPromptOverride?this.systemPromptOverride:(this.autoCompactMemory(),Jo(this.cwd,this.config.systemPromptExtra,Os(this.cwd),ot(this.cwd),this.config.memoryMaxChars))}effectiveSystemPrompt(){return!this.goal||this.goal.completed?this.systemPrompt:`${this.systemPrompt}
|
|
570
570
|
|
|
571
|
-
${
|
|
571
|
+
${Uo(this.goal.text)}`}autoCompactMemory(){let e=this.config.memoryMaxChars??we,n=Wt(this.cwd,e);if(!n||n.removedDuplicates===0&&n.removedOldest===0)return;let s=[];n.removedDuplicates>0&&s.push(`\u53BB\u9664 ${n.removedDuplicates} \u6761\u91CD\u590D\u8BB0\u5F55`),n.removedOldest>0&&s.push(`\u88C1\u526A ${n.removedOldest} \u6761\u6700\u65E7\u7684\u8FFD\u52A0\u8BB0\u5F55`),this.pendingMemoryNotices.push(`\u957F\u671F\u8BB0\u5FC6\u5DF2\u81EA\u52A8\u7CBE\u7B80\uFF08${s.join("\u3001")}\uFF0C${n.before} \u2192 ${n.after} \u5B57\u7B26\uFF09\u3002\u6309\u4E3B\u9898\u6574\u7406\u7684\u7A33\u5B9A\u5C0F\u8282\u4E0D\u53D7\u81EA\u52A8\u88C1\u526A\u5F71\u54CD\uFF1B\u82E5\u9700\u8981\u66F4\u5F7B\u5E95\u7684\u538B\u7F29\uFF0C\u53EF\u8BA9\u7384\u732A\u7528 memory_compact \u91CD\u5199\u4E3A\u7CBE\u7B80\u7248\u672C\u3002`)}get messages(){return this.history}reset(){this.history=[],this.historyTrimmed=!1,this.todos.length>0&&(this.todos=[],this.events.onTodos?.([])),this.clearGoal(),this.recentActions=[],this.sessionChangedFiles.clear(),this.contextUsage=void 0,this.runStatus=void 0}appendHistory(e){for(let n of e)this.history.push(n);this.sessionFile&&Ft(this.sessionFile,e)}restoreSession(e,n){this.history=[...e],this.sessionFile=n,this.historyTrimmed=!1,this.clearGoal(),this.recentActions=[],this.sessionChangedFiles.clear(),this.contextUsage=void 0,this.runStatus=void 0,Ft(n,e)}getTodos(){return this.todos}setGoal(e){return this.goal={text:e.trim(),startedAt:new Date().toISOString(),completed:!1},this.goal}clearGoal(){this.goal=void 0}getGoal(){return this.goal}markGoalComplete(e){return!this.goal||this.goal.completed?!1:(this.goal.completed=!0,this.goal.summary=e.trim(),!0)}goalStore(){return{active:()=>!!(this.goal&&!this.goal.completed),complete:e=>{this.markGoalComplete(e)}}}getAbortReason(){return this.abortReason}getLastRunToolCallCount(){return this.lastRunToolCalls}getRunStatus(){return this.runStatus}statusStore(){return{report:e=>{this.runStatus={...e,at:new Date().toISOString()}},toolCalls:()=>this.lastRunToolCalls,goalActive:()=>!!(this.goal&&!this.goal.completed)}}buildSelfStateBlock(){return Ko({goal:this.goal,todos:this.todos,recentActions:this.recentActions,changedFiles:[...this.sessionChangedFiles],contextUsage:this.contextUsage,status:this.runStatus})}reloadSystemPrompt(){this.systemPrompt=this.composeSystemPrompt()}setDeviceBridge(e){this.deviceBridge=e}todoStore(){return{get:()=>this.todos,set:e=>{let n=!1;this.todos=e.map(s=>s.status!=="in_progress"?s:n?{...s,status:"pending"}:(n=!0,s)),this.events.onTodos?.(this.todos)}}}get messageCount(){return this.history.length}getCwd(){return this.cwd}setCwd(e){this.cwd=e,this.systemPrompt=this.composeSystemPrompt()}abortReason;lastRunToolCalls=0;async run(e,n,s){this.abortReason=void 0,this.lastRunToolCalls=0,this.runChangedFiles.clear(),this.runActionSeq=0,this.runLastChangeSeq=0,this.runLastVerifySeq=0,this.finishGateUsed=!1,this.runTouchedTodos=!1,this.runStatus=void 0;let i=e;if(this.pendingMemoryNotices.length>0){for(let w of this.pendingMemoryNotices)this.events.onNotice?.(w);this.pendingMemoryNotices=[]}if(!this.warnedTightContext&&gr(this.activeModel?.contextWindow,this.activeModel?.model??"",this.effectiveSystemPrompt())&&(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.goal){this.events.onStatus("\u5206\u6790\u610F\u56FE\u4E2D");let w=await this.analyzeIntent(e,n);if(n?.aborted){this.events.onStatus("\u5DF2\u4E2D\u65AD");return}w?(i=w,this.events.onIntent?.(w,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()?Ne: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=w=>{let U=new Map;for(let S of a)for(let T of S.toolCalls??[])U.set(T.id,T.arguments);let J=[];for(let S of a){if(S.role!=="tool"||S.content.startsWith(mu))continue;let T=U.get(S.toolCallId??"")??"",C=T.length>Xo?`${T.slice(0,Xo)}\u2026`:T;J.push(`${S.name??"\u5DE5\u5177"}(${C})`)}if(J.length===0)return null;let _=J.slice(0,fu).map(S=>`\xB7 ${S}`);return J.length>_.length&&_.push(`\xB7 \u2026\u7B49\u5171 ${J.length} \u6B21\u8C03\u7528`),{role:"system",content:`[\u4E0A\u4E00\u8F6E\u5DF2\u4E2D\u6B62] \u4E0A\u4E00\u8F6E${w}\uFF0C\u6CA1\u6709\u7ED9\u51FA\u7ED3\u8BBA\uFF0C\u8BE5\u8F6E\u5BF9\u8BDD\u5DF2\u4F5C\u5E9F \u2014\u2014 **\u4E0D\u4F1A\u88AB\u81EA\u52A8\u63A5\u7740\u505A**\uFF0C\u9664\u975E\u7528\u6237\u660E\u786E\u8981\u6C42\u7EE7\u7EED\u3002
|
|
572
572
|
\u4E2D\u6B62\u524D**\u5DF2\u7ECF\u771F\u5B9E\u6267\u884C**\u8FC7\u7684\u64CD\u4F5C\uFF08\u4EE5\u4E0B\u662F**\u5DF2\u6267\u884C\u8BB0\u5F55\uFF0C\u4E0D\u662F\u5F85\u529E\u6E05\u5355**\uFF0C\u526F\u4F5C\u7528\u4ECD\u7136\u5B58\u5728\uFF0C\u4E0D\u8981\u91CD\u590D\u6267\u884C\uFF09\uFF1A
|
|
573
|
-
`+
|
|
573
|
+
`+_.join(`
|
|
574
574
|
`)+`
|
|
575
|
-
\u8BF7\u76F4\u63A5\u56DE\u5E94\u7528\u6237**\u6700\u65B0\u7684\u90A3\u6761\u6D88\u606F**\uFF1A\u82E5\u5B83\u53EA\u662F\u5BD2\u6684\uFF08\u300C\u5728\u5417\u300D\u300C\u4F60\u597D\u300D\uFF09\u6216\u53E6\u4E00\u4EF6\u4E8B\uFF0C\u5C31\u7167\u5B83\u56DE\u7B54\uFF1B\u4E0D\u8981\u63A5\u7740\u5B8C\u6210\u88AB\u4E2D\u6B62\u7684\u65E7\u4EFB\u52A1\u3002`}},h=
|
|
575
|
+
\u8BF7\u76F4\u63A5\u56DE\u5E94\u7528\u6237**\u6700\u65B0\u7684\u90A3\u6761\u6D88\u606F**\uFF1A\u82E5\u5B83\u53EA\u662F\u5BD2\u6684\uFF08\u300C\u5728\u5417\u300D\u300C\u4F60\u597D\u300D\uFF09\u6216\u53E6\u4E00\u4EF6\u4E8B\uFF0C\u5C31\u7167\u5B83\u56DE\u7B54\uFF1B\u4E0D\u8981\u63A5\u7740\u5B8C\u6210\u88AB\u4E2D\u6B62\u7684\u65E7\u4EFB\u52A1\u3002`}},h=w=>{let U=u(w);a.length=0,U&&(this.appendHistory([U]),this.trimHistory())},d="",p=0,m=new Map,y=0,g=0,f=!1,b=!1,$=(w,U)=>f||b||!au.has(w)||(y++,g+=U.length,y<lu&&g<cu)?"":(f=!0,this.events.onStatus("\u5EFA\u8BAE\u6539\u7528\u5B50\u4EE3\u7406",`\u672C\u8F6E\u5DF2\u8C03\u7814 ${y} \u6B21`),`
|
|
576
576
|
|
|
577
577
|
[\u7CFB\u7EDF\u63D0\u9192] \u672C\u8F6E\u4F60\u5DF2\u7ECF\u505A\u4E86 ${y} \u6B21\u53EA\u8BFB\u8C03\u7814\uFF08\u7D2F\u8BA1\u7EA6 ${Math.round(g/1e3)}k \u5B57\u7B26\uFF09\uFF0C\u8FD9\u4E9B\u5185\u5BB9\u4F1A\u4E00\u76F4\u5360\u7528\u4F60\u7684\u4E0A\u4E0B\u6587\u7A97\u53E3\u3002
|
|
578
578
|
\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
|
|
579
|
-
\xB7 \u82E5\u53EA\u5269\u6536\u5C3E\u5DE5\u4F5C\uFF0C\u5FFD\u7565\u672C\u6761\u5373\u53EF\u3002`),
|
|
579
|
+
\xB7 \u82E5\u53EA\u5269\u6536\u5C3E\u5DE5\u4F5C\uFF0C\u5FFD\u7565\u672C\u6761\u5373\u53EF\u3002`),P=0,N=l,R=0;try{for(let _=0;;_++){if(_>=N){if(n?.aborted){h("\u88AB\u7528\u6237\u4E2D\u65AD"),this.events.onStatus("\u5DF2\u4E2D\u65AD");return}if(!!(this.goal&&!this.goal.completed)&&R>=hu||!(this.events.onRoundLimit?await this.events.onRoundLimit(_):!1))break;N+=l,R+=1}if(n?.aborted){h("\u88AB\u7528\u6237\u4E2D\u65AD"),this.events.onStatus("\u5DF2\u4E2D\u65AD");return}this.trimHistory(),this.events.onStatus("\u601D\u8003\u4E2D",`\u7B2C ${_+1} \u8F6E`);let{text:S,toolCalls:T}=await this.streamAssistant(n,new Set,a);if(n?.aborted){h("\u88AB\u7528\u6237\u4E2D\u65AD"),this.events.onStatus("\u5DF2\u4E2D\u65AD");return}if(a.push({role:"assistant",content:S,toolCalls:T.length>0?T:void 0}),T.length===0){let k=!!(this.goal&&!this.goal.completed),ae=this.getRunStatus(),Q=ae!==void 0&&ae.kind!=="low_confidence";if(!this.finishGateUsed&&!Q){let We=this.runChangedFiles.size>0&&this.runLastChangeSeq>this.runLastVerifySeq?[...this.runChangedFiles]:[],D=!k&&this.runTouchedTodos?this.todos.filter(j=>j.status==="in_progress"||j.status==="pending"):[];if(We.length>0||D.length>0){this.finishGateUsed=!0,a.push({role:"user",content:Wo({verificationFiles:We,incompleteTodos:D})});let j=[];D.length>0&&j.push(`${D.length} \u9879\u4EFB\u52A1\u672A\u5B8C\u6210`),We.length>0&&j.push("\u6539\u52A8\u5C1A\u672A\u9A8C\u8BC1"),this.events.onStatus("\u6536\u5C3E\u68C0\u67E5",j.join(" \xB7 ")),this.events.onNotice?.(`\u6536\u5C3E\u524D\u68C0\u6D4B\u5230 ${j.join("\u3001")}\uFF0C\u5DF2\u8981\u6C42\u6A21\u578B\u7EE7\u7EED\u5B8C\u6210\u6216\u8BF4\u660E\u505C\u4E0B\u539F\u56E0\u3002`);continue}}c(),this.events.onStatus("\u5C31\u7EEA");return}let C=0,M=[];for(;C<T.length;){let k=T[C],ae=`${k.name}:${k.arguments}`;if(ae===d?p++:(d=ae,p=1),p>=iu){if(P<ou){P++;let D=p;p=0,d="",this.skipToolCalls(a,T,C,j=>j===C?`[\u7CFB\u7EDF] \u672C\u6B21\u8C03\u7528\u5DF2\u8DF3\u8FC7\uFF1A\u5B83\u4E0E\u524D\u9762 ${D} \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 ${D} \u6B21\u8C03\u7528\u4E86 \`${k.name}\`\uFF08\u53C2\u6570\u5B8C\u5168\u76F8\u540C\uFF09\uFF0C\u4F46\u4EFB\u52A1\u5E76\u6CA1\u6709\u56E0\u6B64\u63A8\u8FDB\u3002
|
|
580
580
|
|
|
581
581
|
\u8BF7\u5148\u505C\u4E0B\u6765\u5206\u6790\uFF0C\u4E0D\u8981\u7EE7\u7EED\u8C03\u7528\u5DE5\u5177\uFF1A
|
|
582
582
|
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
|
|
583
583
|
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
|
|
584
584
|
3. \u63A5\u4E0B\u6765\u5E94\u8BE5\u505A\u4EC0\u4E48**\u4E0D\u540C**\u7684\u4E8B\uFF1F
|
|
585
585
|
|
|
586
|
-
\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 ${
|
|
586
|
+
\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 ${k.name} \u7684\u91CD\u590D`),this.events.onNotice?.(`\u68C0\u6D4B\u5230\u8FDE\u7EED ${D} \u6B21\u91CD\u590D\u8C03\u7528\uFF08${k.name}\uFF09\uFF0C\u5DF2\u8BF7\u6C42\u6A21\u578B\u81EA\u884C\u5206\u6790\u539F\u56E0\u5E76\u8C03\u6574\u65B9\u6848\u3002`);break}this.skipToolCalls(a,T,C,()=>"[\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${k.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
|
|
587
587
|
\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
|
|
588
588
|
\xB7 \u53EF\u8C03\u5927\u8BE5\u6A21\u578B\u7684\u4E0A\u4E0B\u6587\u7A97\u53E3\uFF1Axzh model context <id> <\u5927\u5C0F>
|
|
589
|
-
\xB7 \u4E5F\u53EF\u4EE5\u628A\u4EFB\u52A1\u62C6\u5C0F\uFF0C\u6216\u76F4\u63A5\u8BF4\u300C\u4E0D\u8981\u91CD\u590D\u8C03\u7528 ${
|
|
589
|
+
\xB7 \u4E5F\u53EF\u4EE5\u628A\u4EFB\u52A1\u62C6\u5C0F\uFF0C\u6216\u76F4\u63A5\u8BF4\u300C\u4E0D\u8981\u91CD\u590D\u8C03\u7528 ${k.name}\u300D`),this.abortReason="\u9677\u5165\u91CD\u590D\u8C03\u7528\uFF08\u81EA\u6211\u4FEE\u6B63\u65E0\u6548\uFF09";return}if(this.isParallelTool(k.name)){let D=[k],j=C+1;for(;j<T.length&&D.length<this.parallelLimit()&&this.isParallelTool(T[j].name)&&!D.some(st=>st.name===T[j].name&&st.arguments===T[j].arguments);)D.push(T[j]),j++;if(D.length>1){for(let Ae=1;Ae<D.length;Ae++)d=`${D[Ae].name}:${D[Ae].arguments}`,p=1;this.events.onStatus("\u5E76\u884C\u6267\u884C",`${D.length} \u4E2A\u5B50\u4EE3\u7406`);let st=await this.runToolBatch(D,n);for(let Ae=0;Ae<D.length;Ae++){let it=D[Ae],Qn=st[Ae];if(it.name==="task"&&(b=!0),Qn.ok){let ks=`${it.name}:${it.arguments}`;m.set(ks,(m.get(ks)??0)+1)}a.push({role:"tool",content:Qn.content,toolCallId:it.id,name:it.name}),this.lastRunToolCalls+=1,this.events.onToolEnd(it,Qn)}if(n?.aborted){h("\u88AB\u7528\u6237\u4E2D\u65AD"),this.events.onStatus("\u5DF2\u4E2D\u65AD");return}C=j;continue}}let Q=await this.runTool(k,n);Q.ok&&m.set(ae,(m.get(ae)??0)+1);let We=Q.content;if(p>=2&&Q.ok){let D=[...m.entries()].map(([j,st])=>`${j.split(":")[0]}\xD7${st}`).join("\u3001");We+=`
|
|
590
590
|
|
|
591
|
-
[\u7CFB\u7EDF\u63D0\u9192] \u8FD9\u662F\u8FDE\u7EED\u7B2C ${p} \u6B21\u8C03\u7528 \`${
|
|
592
|
-
\u672C\u8F6E\u5DF2\u6210\u529F\u6267\u884C\u7684\u8C03\u7528\uFF1A${
|
|
593
|
-
\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",`${
|
|
594
|
-
`+(
|
|
591
|
+
[\u7CFB\u7EDF\u63D0\u9192] \u8FD9\u662F\u8FDE\u7EED\u7B2C ${p} \u6B21\u8C03\u7528 \`${k.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
|
|
592
|
+
\u672C\u8F6E\u5DF2\u6210\u529F\u6267\u884C\u7684\u8C03\u7528\uFF1A${D}
|
|
593
|
+
\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",`${k.name} \xD7${p}`)}if(k.name==="task"&&(b=!0),We+=$(k.name,Q.content),a.push({role:"tool",content:We,toolCallId:k.id,name:k.name}),this.lastRunToolCalls+=1,Q.images&&Q.images.length>0&&M.push({role:"user",content:`\uFF08\u4E0A\u9762 ${k.name} \u7684\u8FD4\u56DE\u9644\u5E26\u4E86 ${Q.images.length} \u5F20\u56FE\u7247\uFF09`,images:Q.images}),this.events.onToolEnd(k,Q),n?.aborted){h("\u88AB\u7528\u6237\u4E2D\u65AD"),this.events.onStatus("\u5DF2\u4E2D\u65AD");return}C++}M.length>0&&a.push(...M)}c(),this.events.onStatus("\u5DF2\u8FBE\u5DE5\u5177\u8C03\u7528\u4E0A\u9650",`\u5171 ${N} \u8F6E`);let w=new Map;for(let _ of a)for(let S of _.toolCalls??[])w.set(S.name,(w.get(S.name)??0)+1);let U=[...w.values()].reduce((_,S)=>_+S,0),J=[...w.entries()].sort((_,S)=>S[1]-_[1]).map(([_,S])=>`${_} \xD7${S}`).join("\u3001");this.events.onNotice?.(`\u5DF2\u8FBE\u5DE5\u5177\u8C03\u7528\u4E0A\u9650\uFF08\u5171 ${N} \u8F6E\uFF09\u800C\u4E2D\u6B62\u672C\u8F6E\u3002
|
|
594
|
+
`+(J?`\xB7 \u672C\u8F6E\u5171 ${U} \u6B21\u5DE5\u5177\u8C03\u7528\uFF1A${J}
|
|
595
595
|
`:"")+`\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
|
|
596
596
|
`+(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
|
|
597
|
-
`:`\xB7 \u60F3\u8C03\u5927\u4E0A\u9650\uFF1A\u7F16\u8F91 ${
|
|
598
|
-
`)+"\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(
|
|
599
|
-
`)[0]}\uFF09\uFF0C\u5DF2\u6309\u539F\u59CB\u8F93\u5165\u7EE7\u7EED\u3002`),null}let a=o.trim();return a.length>0?a:null}async streamAssistant(e,n=new Set,s=[],i=1,o=!1){this.activeModel&&n.add(this.activeModel.id);let a=this.buildConversation(s,i);o&&(a=
|
|
597
|
+
`:`\xB7 \u60F3\u8C03\u5927\u4E0A\u9650\uFF1A\u7F16\u8F91 ${z()} \u91CC\u7684 maxToolRounds\uFF08\u5F53\u524D ${this.config.maxToolRounds}\uFF09
|
|
598
|
+
`)+"\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(w){let U=[...this.history,...a].map(_=>({role:_.role,content:_.content??""}));if(h(n?.aborted?"\u88AB\u7528\u6237\u4E2D\u65AD":"\u56E0\u51FA\u9519\u4E2D\u6B62"),n?.aborted){this.events.onStatus("\u5DF2\u4E2D\u65AD"),this.abortReason="\u5DF2\u88AB\u7528\u6237\u4E2D\u65AD";return}let J=tt({kind:"turn-failed",category:Vt(w)?"config":Pt(w)?"provider":"unknown",error:w,cwd:this.cwd,project:G(this.cwd).dir,model:this.activeModel?.id,provider:this.activeModel?.provider,note:"\u672C\u8F6E\u5BF9\u8BDD\u5931\u8D25\uFF08\u5DF2\u5C1D\u8BD5\u8FC7\u5168\u90E8\u56DE\u9000\u6A21\u578B\uFF09",recent:U});throw J&&this.events.onNotice?.(`\u5DF2\u8BB0\u5F55\u9519\u8BEF\u62A5\u544A\uFF1A${J}\uFF08\u8FD0\u884C xzh errors \u67E5\u770B\uFF09`),w}}async analyzeIntent(e,n){let s=this.config.intent?.prompt?.trim()||Us,i=zs(s,e),o="";try{let l=this.provider.chat({messages:[{role:"user",content:i}],tools:[],temperature:this.config.temperature,signal:n});for await(let c of l)if(c.type==="text"&&(o+=c.text,o.length>as))break}catch(l){return n?.aborted||this.events.onNotice?.(`\u610F\u56FE\u5206\u6790\u8BF7\u6C42\u5931\u8D25\uFF08${ne(l).split(`
|
|
599
|
+
`)[0]}\uFF09\uFF0C\u5DF2\u6309\u539F\u59CB\u8F93\u5165\u7EE7\u7EED\u3002`),null}let a=o.trim();return a.length>0?a:null}async streamAssistant(e,n=new Set,s=[],i=1,o=!1){this.activeModel&&n.add(this.activeModel.id);let a=this.buildConversation(s,i);o&&(a=mr(a));let l=this.buildSelfStateBlock(),u=[{role:"system",content:l?`${this.effectiveSystemPrompt()}
|
|
600
600
|
|
|
601
|
-
${l}`:this.effectiveSystemPrompt()},...a],h=u.reduce((g,f)=>g+ut(f),0),d="",p=[],m=!1,y=[...this.history,...s].some(g=>(g.images?.length??0)>0);try{let g=this.provider.chat({messages:u,tools:
|
|
602
|
-
`)[0])}});for await(let f of g){if(e?.aborted)break;switch(m=!0,f.type){case"text":if(d+=f.text,this.events.onText(f.text),d.length>
|
|
601
|
+
${l}`:this.effectiveSystemPrompt()},...a],h=u.reduce((g,f)=>g+ut(f),0),d="",p=[],m=!1,y=[...this.history,...s].some(g=>(g.images?.length??0)>0);try{let g=this.provider.chat({messages:u,tools:Pn(this.tools),temperature:this.config.temperature,signal:e,onRetry:(f,b,$,P)=>{this.events.onStatus(P.resumed?`\u54CD\u5E94\u4E2D\u65AD\uFF0C\u6B63\u5728\u7EED\u4F20 (${f}/${b})`:`\u7F51\u7EDC\u4E2D\u65AD\uFF0C\u6B63\u5728\u91CD\u8BD5 (${f}/${b})`,ne($).split(`
|
|
602
|
+
`)[0])}});for await(let f of g){if(e?.aborted)break;switch(m=!0,f.type){case"text":if(d+=f.text,this.events.onText(f.text),d.length>as)return this.events.onNotice?.(`\u6A21\u578B\u8F93\u51FA\u8D85\u8FC7 ${as} \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:d,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(h,f.usage.inputTokens);{let b=this.activeModel?.contextWindow;if(b&&b>0){let $=f.usage?.inputTokens??h;this.contextUsage=Math.min(1,$/b)}}break}}return{text:d,toolCalls:p}}catch(g){if(e?.aborted)throw g;if(!m&&!e?.aborted&&i>=1&&Yt(g))return this.events.onStatus("\u4E0A\u4E0B\u6587\u8D85\u9650","\u5DF2\u6536\u655B\u5386\u53F2\uFF0C\u6B63\u5728\u91CD\u8BD5"),this.streamAssistant(e,n,s,su,o);if(!m&&!e?.aborted&&!o&&y&&Zt(g))return this.events.onStatus("\u6A21\u578B\u4E0D\u652F\u6301\u56FE\u7247","\u5DF2\u53BB\u6389\u56FE\u7247\u91CD\u8BD5"),this.events.onNotice?.(`\u5F53\u524D\u6A21\u578B\u4E0D\u652F\u6301\u56FE\u7247\u8F93\u5165\uFF08${ne(g).split(`
|
|
603
603
|
`)[0]}\uFF09\uFF0C\u5DF2\u53BB\u6389\u56FE\u7247\u91CD\u8BD5\u4E00\u6B21\u3002
|
|
604
604
|
\xB7 \u60F3\u5F7B\u5E95\u907F\u514D\u8FD9\u6B21\u767D\u8BD5\uFF1Axzh model vision <id> off
|
|
605
|
-
\xB7 \u6216\u6539\u7528 glm-4v / qwen-vl / gpt-4o / claude / gemini \u7B49\u652F\u6301\u89C6\u89C9\u7684\u6A21\u578B`),this.streamAssistant(e,n,s,i,!0);if(this.handleModelFailure(g,n,!m))return this.streamAssistant(e,n,s,i);throw g}}handleModelFailure(e,n,s=!0){let i=this.activeModel;if(!i)return!1;n.add(i.id);let o=
|
|
606
|
-
`)[0];if(
|
|
605
|
+
\xB7 \u6216\u6539\u7528 glm-4v / qwen-vl / gpt-4o / claude / gemini \u7B49\u652F\u6301\u89C6\u89C9\u7684\u6A21\u578B`),this.streamAssistant(e,n,s,i,!0);if(this.handleModelFailure(g,n,!m))return this.streamAssistant(e,n,s,i);throw g}}handleModelFailure(e,n,s=!0){let i=this.activeModel;if(!i)return!1;n.add(i.id);let o=ne(e).split(`
|
|
606
|
+
`)[0];if(Vt(e)&&!ir(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=Js(this.config,i.id,n);if(!a)return this.events.onNotice?.(`\u26A0 ${i.id} \u8C03\u7528\u5931\u8D25\uFF08${o}\uFF09\uFF0C\u4E14\u5DF2\u914D\u7F6E\u7684\u6A21\u578B\u90FD\u8BD5\u8FC7\u4E86 \u2014\u2014 \u672C\u8F6E\u65E0\u6CD5\u5B8C\u6210\u3002`),!1;try{return this.provider=It(this.config,a),this.activeModel=a,sr(this.config,a),this.persistConfig(),this.events.onNotice?.(`\u21BB ${i.id} \u8C03\u7528\u5931\u8D25\uFF08${o}\uFF09\uFF0C\u5DF2\u5207\u6362\u5230 ${a.id} \u91CD\u8BD5\u3002`),this.events.onModelChange?.({provider:a.provider,model:a.model,reason:"\u8C03\u7528\u5931\u8D25\u56DE\u9000"}),!0}catch(l){return this.events.onNotice?.(`\u5207\u6362\u6A21\u578B\u5931\u8D25\uFF1A${ne(l)}`),!1}}persistConfig(){try{te(this.config)}catch{}}touchesSensitivePath(e,n){if(!nu.has(e))return!1;let s="";try{let i=JSON.parse(n);typeof i.path=="string"&&(s=i.path)}catch{return!1}return s?ru.test(Vo.resolve(this.cwd,ee(s))):!1}async runTool(e,n){let s=Rn(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 l=e.arguments;try{l=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:l,danger:!!s.danger}))return{ok:!1,denied:!0,content:"\u7528\u6237\u62D2\u7EDD\u4E86\u6B64\u64CD\u4F5C\u3002"}}if(n?.aborted)return{ok:!1,content:"\u64CD\u4F5C\u5DF2\u88AB\u4E2D\u65AD\u3002"};this.events.onToolStart(e);let o={cwd:this.cwd,autoApprove:this.config.autoApprove,emit:l=>this.events.onNotice?.(l),confirm:l=>this.events.confirm(l),signal:n,todos:this.todoStore(),goal:this.goalStore(),status:this.statusStore(),memoryMaxChars:this.config.memoryMaxChars,spawnAgent:l=>this.spawnSubAgent(l,n),deviceBridge:this.deviceBridge},a=await Fo(e.name,e.arguments,o,this.tools);return this.recordToolResult(e.name,e.arguments,a),a}recordToolResult(e,n,s){this.recentActions.push({name:e,ok:s.ok}),this.recentActions.length>8&&this.recentActions.shift(),this.runActionSeq+=1;let i={};try{let o=JSON.parse(n);o&&typeof o=="object"&&!Array.isArray(o)&&(i=o)}catch{}if(e==="write_file"||e==="edit_file"){let o=typeof i.path=="string"?i.path.trim():"";o&&(this.sessionChangedFiles.add(o),this.runChangedFiles.add(o),this.runLastChangeSeq=this.runActionSeq)}if(e==="bash"){let o=typeof i.command=="string"?i.command:"";o&&qo(o)&&(this.runLastVerifySeq=this.runActionSeq)}e==="todo_write"&&s.ok&&(this.runTouchedTodos=!0)}isParallelTool(e){return Rn(e,this.tools)?.parallelSafe===!0}parallelLimit(){let e=Math.floor(this.config.maxParallelAgents??pu);return!Number.isFinite(e)||e<1?1:Math.min(e,du)}async runToolBatch(e,n){return Bo(e,this.parallelLimit(),async s=>{try{return await this.runTool(s,n)}catch(i){return{ok:!1,content:`\u5DE5\u5177\u6267\u884C\u5F02\u5E38\uFF1A${i instanceof Error?i.message:String(i)}`}}})}skipToolCalls(e,n,s,i){for(let o=s;o<n.length;o++)e.push({role:"tool",content:i(o),toolCallId:n[o].id,name:n[o].name})}async spawnSubAgent(e,n){let s=yn(e.subagentName);if(!s)return{ok:!1,content:`\u9519\u8BEF\uFF1A\u672A\u77E5\u5B50\u4EE3\u7406 "${e.subagentName}"\u3002\u53EF\u7528\uFF1A${Bt().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 r(this.provider,this.config,this.cwd,l,this.activeModel,{tools:jo(s.toolNames),systemPrompt:s.systemPrompt({cwd:this.cwd,description:e.description,prompt:e.prompt}),maxToolRounds:uu});try{await c.run(e.prompt,n)}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
|
|
607
607
|
|
|
608
|
-
`:"",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>
|
|
608
|
+
`:"",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>ls?`${h.slice(0,ls)}
|
|
609
609
|
|
|
610
|
-
\u2026\uFF08\u5B50\u4EE3\u7406\u62A5\u544A\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD ${h.length-
|
|
610
|
+
\u2026\uFF08\u5B50\u4EE3\u7406\u62A5\u544A\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD ${h.length-ls} \u5B57\u7B26\uFF09`:h;return{ok:!0,content:`${u}${s.name} \u5B50\u4EE3\u7406\u300C${e.description}\u300D\u7684\u7ED3\u8BBA\uFF1A
|
|
611
611
|
|
|
612
|
-
${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
|
|
613
|
-
`)){let a=o.trim();if(!(!a||a.startsWith("#")||a.startsWith("!")||a.startsWith("<")))return a.replace(/[*_`]/g,"").slice(0,200)}}}function
|
|
614
|
-
`)){let a=/^([A-Za-z0-9_.-]+)\s*:(?!=)/.exec(o);a&&n.add(a[1])}let s=[{names:["install","deps"],label:"\u5B89\u88C5\u4F9D\u8D56"},{names:["build","all"],label:"\u6784\u5EFA"},{names:["test","check"],label:"\u6D4B\u8BD5"},{names:["lint"],label:"lint"},{names:["dev","run"],label:"\u5F00\u53D1"}],i=[];for(let o of s){let a=o.names.find(l=>n.has(l));a&&(i.some(l=>l.name===o.label)||i.push({name:o.label,command:`make ${a}`,source:`Makefile:${a}`}))}return i}function
|
|
615
|
-
`)}function
|
|
616
|
-
`)}function
|
|
612
|
+
${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 yr(e)}conversationBudget(){let e=fr(this.activeModel?.contextWindow,this.activeModel?.model??"",this.effectiveSystemPrompt());return $r(e,this.tokenCalibrator().factor())}buildConversation(e,n=1){let s=pr([...this.history,...e],this.history.length),i=s.length>In?s.slice(-In):s,o=Math.max(1,Math.floor(this.conversationBudget()*n)),a=rn(i,o);return a.length<i.length&&(this.historyTrimmed=!0),this.historyTrimmed?[gu(),...a]:a}trimHistory(){let e=rn(this.history,this.conversationBudget());if(e.length>In&&(e=nn(e.slice(e.length-In))),e.length===this.history.length)return 0;let n=this.history.length-e.length;return this.history=e,this.historyTrimmed=!0,n}};var ke=v(require("fs")),Tt=v(require("path"));var Qo=v(require("fs")),Ln=v(require("path"));var Ce=v(require("fs")),Y=v(require("path")),On=new Set(["node_modules",".git",".hg",".svn","dist","build","out","coverage",".next",".nuxt",".turbo",".cache","venv",".venv","env","__pycache__",".pytest_cache",".mypy_cache",".ruff_cache","target","vendor",".idea",".vscode",".xuanzhu",".codebuddy",".claude","tmp","temp"]),$u=["README.md","README.en.md","CHANGELOG.md","CONTRIBUTING.md","SECURITY.md","AGENTS.md","docs/ARCHITECTURE.md","docs/README.md"],yu=[{file:"tsconfig.json",label:"TypeScript"},{file:"package.json",label:"Node.js"},{file:"pyproject.toml",label:"Python"},{file:"requirements.txt",label:"Python"},{file:"setup.py",label:"Python"},{file:"manage.py",label:"Python"},{file:"go.mod",label:"Go"},{file:"Cargo.toml",label:"Rust"},{file:"pom.xml",label:"Java (Maven)"},{file:"build.gradle",label:"Java (Gradle)"},{file:"build.gradle.kts",label:"Kotlin (Gradle)"},{file:"composer.json",label:"PHP"},{file:"Gemfile",label:"Ruby"},{file:"CMakeLists.txt",label:"C/C++ (CMake)"}],vu=[".editorconfig",".gitignore",".eslintrc",".eslintrc.js",".eslintrc.cjs",".eslintrc.json","eslint.config.js","eslint.config.mjs",".prettierrc",".prettierrc.json",".prettierrc.js","prettier.config.js","tsconfig.json","pyproject.toml","requirements.txt","go.mod","Cargo.toml","Makefile","Dockerfile","docker-compose.yml",".github/workflows"];function A(r,e){try{return Ce.existsSync(Y.join(r,e))}catch{return!1}}function bu(r){try{let e=JSON.parse(Ce.readFileSync(r,"utf8"));return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:null}catch{return null}}function Jt(r,e=4e3){try{return Ce.readFileSync(r,"utf8").slice(0,e)}catch{return null}}function Su(r,e){let n=typeof e?.description=="string"?e.description.trim():"";if(n)return n;for(let s of["README.md","readme.md","Readme.md"]){let i=Jt(Y.join(r,s),4e3);if(i)for(let o of i.split(`
|
|
613
|
+
`)){let a=o.trim();if(!(!a||a.startsWith("#")||a.startsWith("!")||a.startsWith("<")))return a.replace(/[*_`]/g,"").slice(0,200)}}}function xu(r){if(A(r,"pnpm-lock.yaml"))return"pnpm";if(A(r,"yarn.lock"))return"yarn";if(A(r,"bun.lockb")||A(r,"bun.lock"))return"bun";if(A(r,"package-lock.json")||A(r,"package.json"))return"npm"}var wu=[{keys:["dev","develop","serve"],name:"\u5F00\u53D1"},{keys:["build","compile"],name:"\u6784\u5EFA"},{keys:["test","tests"],name:"\u6D4B\u8BD5"},{keys:["typecheck","check-types","tsc"],name:"\u7C7B\u578B\u68C0\u67E5"},{keys:["lint"],name:"lint"},{keys:["format","fmt"],name:"\u683C\u5F0F\u5316"},{keys:["check"],name:"\u68C0\u67E5"}];function Tu(r,e,n){if(!e)return[];let s=e.scripts??{},i=[],o=n??"npm";o!=="bun"?i.push({name:"\u5B89\u88C5\u4F9D\u8D56",command:o==="yarn"?"yarn install":`${o} install`,source:o}):i.push({name:"\u5B89\u88C5\u4F9D\u8D56",command:"bun install",source:"bun"});for(let{keys:a,name:l}of wu){let c=a.find(u=>typeof s[u]=="string");c&&i.push({name:l,command:`${o} run ${c}`,source:`package.json scripts.${c}`})}return i}function Cu(r){let e=Jt(Y.join(r,"Makefile"),2e4)??Jt(Y.join(r,"makefile"),2e4);if(!e)return[];let n=new Set;for(let o of e.split(`
|
|
614
|
+
`)){let a=/^([A-Za-z0-9_.-]+)\s*:(?!=)/.exec(o);a&&n.add(a[1])}let s=[{names:["install","deps"],label:"\u5B89\u88C5\u4F9D\u8D56"},{names:["build","all"],label:"\u6784\u5EFA"},{names:["test","check"],label:"\u6D4B\u8BD5"},{names:["lint"],label:"lint"},{names:["dev","run"],label:"\u5F00\u53D1"}],i=[];for(let o of s){let a=o.names.find(l=>n.has(l));a&&(i.some(l=>l.name===o.label)||i.push({name:o.label,command:`make ${a}`,source:`Makefile:${a}`}))}return i}function ku(r){let e=[];if(A(r,"go.mod")&&(e.push({name:"\u6784\u5EFA",command:"go build ./...",source:"go.mod"}),e.push({name:"\u6D4B\u8BD5",command:"go test ./...",source:"go.mod"})),A(r,"Cargo.toml")&&(e.push({name:"\u6784\u5EFA",command:"cargo build",source:"Cargo.toml"}),e.push({name:"\u6D4B\u8BD5",command:"cargo test",source:"Cargo.toml"})),A(r,"pyproject.toml")||A(r,"requirements.txt")||A(r,"setup.py")){if(A(r,"requirements.txt"))e.push({name:"\u5B89\u88C5\u4F9D\u8D56",command:"pip install -r requirements.txt",source:"requirements.txt"});else if(A(r,"pyproject.toml")){let n=Jt(Y.join(r,"pyproject.toml"),2e4)??"";/\[tool\.poetry\]/.test(n)?e.push({name:"\u5B89\u88C5\u4F9D\u8D56",command:"poetry install",source:"pyproject.toml"}):e.push({name:"\u5B89\u88C5\u4F9D\u8D56",command:"pip install -e .",source:"pyproject.toml"}),A(r,"poetry.lock")&&(e[e.length-1]={name:"\u5B89\u88C5\u4F9D\u8D56",command:"poetry install",source:"poetry.lock"})}(A(r,"pytest.ini")||A(r,"tox.ini")||A(r,"tests")||A(r,"test")||/pytest/.test(Jt(Y.join(r,"pyproject.toml"),2e4)??""))&&e.push({name:"\u6D4B\u8BD5",command:"pytest",source:"pytest \u914D\u7F6E / tests \u76EE\u5F55"})}return A(r,"pom.xml")&&e.push({name:"\u6D4B\u8BD5",command:"mvn test",source:"pom.xml"}),(A(r,"build.gradle")||A(r,"build.gradle.kts"))&&e.push({name:"\u6D4B\u8BD5",command:"./gradlew test",source:"Gradle"}),e}function Au(...r){let e=new Set,n=[];for(let i of r)for(let o of i)e.has(o.name)||(e.add(o.name),n.push(o));let s=["\u5B89\u88C5\u4F9D\u8D56","\u5F00\u53D1","\u6784\u5EFA","\u6D4B\u8BD5","\u7C7B\u578B\u68C0\u67E5","lint","\u683C\u5F0F\u5316","\u68C0\u67E5"];return n.sort((i,o)=>{let a=s.indexOf(i.name),l=s.indexOf(o.name);return(a<0?99:a)-(l<0?99:l)})}function Eu(r,e){let n={...e?.dependencies??{},...e?.devDependencies??{}};for(let s of["vitest","jest","mocha","ava","node:test"])if(s in n)return s;if((A(r,"pytest.ini")||A(r,"tests")||A(r,"test"))&&(A(r,"pyproject.toml")||A(r,"requirements.txt")))return"pytest";if(A(r,"go.mod"))return"go test";if(A(r,"Cargo.toml"))return"cargo test"}function cs(r,e=0){let n=0,s=0;if(e>8)return{files:n,dirs:s};let i;try{i=Ce.readdirSync(r,{withFileTypes:!0})}catch{return{files:n,dirs:s}}for(let o of i)if(!(o.name.startsWith(".")&&o.name!==".github"))if(o.isDirectory()){if(On.has(o.name))continue;s+=1;let a=cs(Y.join(r,o.name),e+1);n+=a.files,s+=a.dirs}else o.isFile()&&(n+=1);return{files:n,dirs:s}}function _u(r){let e;try{e=Ce.readdirSync(r,{withFileTypes:!0})}catch{return[]}return e.filter(n=>n.isDirectory()).filter(n=>!On.has(n.name)).map(n=>{let s=cs(Y.join(r,n.name));return{name:n.name,files:s.files,dirs:s.dirs}}).sort((n,s)=>n.name.localeCompare(s.name)).slice(0,20)}function Ru(r){let e=[];for(let n of $u)A(r,n)&&e.push(n);try{let n=Ce.readdirSync(Y.join(r,"docs"),{withFileTypes:!0});for(let s of n.sort((i,o)=>i.name.localeCompare(o.name))){if(!s.isFile()||!/\.(md|mdx)$/i.test(s.name))continue;let i=`docs/${s.name}`;if(e.includes(i)||e.push(i),e.length>=20)break}}catch{}return e}function Yo(r){let e=Y.resolve(r),n=Y.join(e,"package.json"),s=A(e,"package.json")?bu(n):null,i=typeof s?.name=="string"&&s.name.trim()||Y.basename(e)||"project",o=typeof s?.version=="string"?s.version:void 0,a=Su(e,s),l=xu(e),c=[];for(let b of yu)A(e,b.file)&&(c.includes(b.label)||c.push(b.label));if(s){let b={...s.dependencies??{},...s.devDependencies??{}};"react"in b&&!c.includes("React")&&c.push("React"),"vue"in b&&!c.includes("Vue")&&c.push("Vue"),"express"in b&&!c.includes("Express")&&c.push("Express"),"next"in b&&!c.includes("Next.js")&&c.push("Next.js")}let u=Au(Tu(e,s,l),Cu(e),ku(e)),h=vu.filter(b=>A(e,b)),d=[];try{d=Ce.readdirSync(e)}catch{}let p=d.some(b=>b.toLowerCase()==="agents.md"),m=d.some(b=>b.toLowerCase()==="docs")&&A(e,"docs"),y=cs(e),g={},f=s?.scripts??{};for(let[b,$]of Object.entries(f))typeof $=="string"&&(g[b]=$);return{root:e,name:i,version:o,description:a,languages:c,packageManager:l,testFramework:Eu(e,s),commands:u,directories:_u(e),docs:Ru(e),configs:h,hasAgents:p,hasDocsDir:m,fileCount:y.files,rawScripts:Object.keys(g).length>0?g:void 0}}var Pu="AGENTS.md",ea="docs/ARCHITECTURE.md",ta="docs/COMMANDS.md",na="docs/CONVENTIONS.md",Nn=(r,e)=>`> \u672C\u6587\u4EF6\u7531 \`xzh init\` \u626B\u63CF\u751F\u6210\uFF08xzh v${r}\uFF0C${e}\uFF09\u3002\u53EF\u76F4\u63A5\u7F16\u8F91\uFF1B\u518D\u6B21\u8FD0\u884C\u53EA\u4F1A\u8865\u5145\u7F3A\u5931\u7684 \`## \u5C0F\u8282\`\uFF0C\u4E0D\u4F1A\u8986\u76D6\u5DF2\u6709\u5185\u5BB9\u3002`;function wt(r){return r.replace(/\|/g,"\\|").replace(/\n/g," ")}function ra(r){return r.commands.length===0?"\uFF08\u672A\u68C0\u6D4B\u5230\u53EF\u7528\u7684\u6784\u5EFA / \u6D4B\u8BD5\u547D\u4EE4\uFF0C\u8BF7\u5728\u6B64\u8865\u5145\uFF09":["| \u7528\u9014 | \u547D\u4EE4 | \u6765\u6E90 |","| --- | --- | --- |",...r.commands.map(e=>`| ${e.name} | \`${wt(e.command)}\` | ${wt(e.source)} |`)].join(`
|
|
615
|
+
`)}function Zo(r,e,n,s){return`${r}${s?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 "}${e}${n}`}function sa(r,e=2,n=40){let s=[`${Ln.basename(r)||"project"}/`],i=0,o=(a,l,c)=>{if(i>=n)return;let u;try{u=Qo.readdirSync(a,{withFileTypes:!0})}catch{return}let h=u.filter(d=>!On.has(d.name)).filter(d=>!d.name.startsWith(".")||d.name===".github").sort((d,p)=>d.isDirectory()!==p.isDirectory()?d.isDirectory()?-1:1:d.name.localeCompare(p.name)).slice(0,24);h.forEach((d,p)=>{if(i>=n)return;i+=1;let m=p===h.length-1;d.isDirectory()?(s.push(Zo(l,`${d.name}/`,"",m)),c<e&&o(Ln.join(a,d.name),`${l}${m?" ":"\u2502 "}`,c+1)):s.push(Zo(l,d.name,"",m))})};return o(r,"",1),s.join(`
|
|
616
|
+
`)}function Mu(r){let e={"README.md":"\u9879\u76EE\u8BF4\u660E","README.en.md":"\u82F1\u6587\u8BF4\u660E","CHANGELOG.md":"\u53D8\u66F4\u8BB0\u5F55","CONTRIBUTING.md":"\u8D21\u732E\u6307\u5357","SECURITY.md":"\u5B89\u5168\u7B56\u7565",[ea]:"\u67B6\u6784\u4E0E\u76EE\u5F55\u8BF4\u660E\uFF08\u672C\u6587\u4EF6\uFF09",[ta]:"\u547D\u4EE4\u624B\u518C",[na]:"\u7F16\u7801\u4E0E\u5DE5\u7A0B\u7EA6\u5B9A"};return`- \`${r}\`${e[r]?` \u2014 ${e[r]}`:""}`}function Iu(r,e){let n=[];for(let s of[...r.docs,...e])s.toLowerCase()!=="agents.md"&&(n.includes(s)||n.push(s));return n.length===0?"":`## \u6587\u6863\u7D22\u5F15
|
|
617
617
|
|
|
618
|
-
${n.map(
|
|
619
|
-
`)}`}function
|
|
618
|
+
${n.map(Mu).join(`
|
|
619
|
+
`)}`}function Du(r,e){let n=[];n.push(`- \u9879\u76EE\uFF1A\`${r.name}\`${r.version?`\uFF08v${r.version}\uFF09`:""}`),r.description&&n.push(`- \u7B80\u4ECB\uFF1A${r.description}`),r.languages.length>0&&n.push(`- \u6280\u672F\u6808\uFF1A${r.languages.join("\u3001")}`),r.packageManager&&n.push(`- \u5305\u7BA1\u7406\u5668\uFF1A${r.packageManager}`),r.testFramework&&n.push(`- \u6D4B\u8BD5\uFF1A${r.testFramework}`),n.push(`- \u89C4\u6A21\uFF1A\u7EA6 ${r.fileCount} \u4E2A\u6587\u4EF6\u3001${r.directories.length} \u4E2A\u9876\u5C42\u76EE\u5F55\uFF08\u4E0D\u542B\u4F9D\u8D56\u4E0E\u6784\u5EFA\u4EA7\u7269\uFF09`);let s=[],i=r.commands.find(u=>u.name==="\u6D4B\u8BD5"),o=r.commands.find(u=>u.name==="\u6784\u5EFA"),a=r.commands.find(u=>u.name==="\u7C7B\u578B\u68C0\u67E5");i&&s.push(`- \u4FEE\u6539\u4EE3\u7801\u540E\u8FD0\u884C \`${i.command}\` \u9A8C\u8BC1\u3002`),o&&s.push(`- \u63D0\u4EA4\u524D\u786E\u4FDD\u6784\u5EFA\u901A\u8FC7\uFF1A\`${o.command}\`\u3002`),a&&a.command!==i?.command&&s.push(`- \u7C7B\u578B\u68C0\u67E5\uFF1A\`${a.command}\`\u3002`),(i||o||a)&&s.push("- \u82E5\u786E\u5B9E\u65E0\u6CD5\u8FD0\u884C\u9A8C\u8BC1\uFF0C\u5728\u7ED3\u8BBA\u91CC\u8BF4\u660E\u539F\u56E0\u4E0E\u672A\u9A8C\u8BC1\u7684\u98CE\u9669\u3002"),s.push("- \u5177\u4F53\u6A21\u5757\u804C\u8D23\u3001\u5165\u53E3\u4E0E\u6570\u636E\u6D41\u89C1 `docs/ARCHITECTURE.md`\uFF1B\u547D\u4EE4\u7EC6\u8282\u89C1 `docs/COMMANDS.md`\u3002"),s.push("- \u672C\u6587\u4EF6\u4E0E `docs/` \u7531\u9879\u76EE\u7EF4\u62A4\u8005\u8D1F\u8D23\uFF1B`xzh init` \u53EA\u505A\u589E\u91CF\u8865\u5145\u3002");let l=[`# ${r.name} \u5F00\u53D1\u89C4\u8303`,Nn(e.version,e.date),`## \u9879\u76EE\u6982\u89C8
|
|
620
620
|
|
|
621
621
|
${n.join(`
|
|
622
622
|
`)}`,`## \u5E38\u7528\u547D\u4EE4
|
|
623
623
|
|
|
624
|
-
${
|
|
624
|
+
${ra(r)}
|
|
625
625
|
|
|
626
626
|
> \u547D\u4EE4\u6765\u81EA package.json scripts / Makefile / \u6784\u5EFA\u6587\u4EF6\uFF1B\u5982\u4E0E\u5B9E\u9645\u4E0D\u7B26\uFF0C\u8BF7\u76F4\u63A5\u4FEE\u6539\u672C\u6587\u4EF6\u3002`,`## \u76EE\u5F55\u7ED3\u6784
|
|
627
627
|
|
|
628
628
|
\`\`\`
|
|
629
|
-
${
|
|
629
|
+
${sa(r.root)}
|
|
630
630
|
\`\`\`
|
|
631
631
|
|
|
632
632
|
> \u53EA\u5217\u4E3B\u8981\u76EE\u5F55\uFF1B\u8BE6\u7EC6\u8BF4\u660E\u89C1 \`docs/ARCHITECTURE.md\`\u3002`,`## \u5F00\u53D1\u7EA6\u5B9A
|
|
633
633
|
|
|
634
634
|
${s.join(`
|
|
635
|
-
`)}`],c=
|
|
635
|
+
`)}`],c=Iu(r,e.generatedDocs);return c&&l.push(c),`${l.join(`
|
|
636
636
|
|
|
637
637
|
`)}
|
|
638
|
-
`}function
|
|
638
|
+
`}function Ou(r,e){let n=r.directories.length===0?"\uFF08\u672A\u68C0\u6D4B\u5230\u5B50\u76EE\u5F55\uFF09":["| \u76EE\u5F55 | \u6587\u4EF6\u6570 | \u8BF4\u660E |","| --- | --- | --- |",...r.directories.map(i=>`| \`${wt(i.name)}/\` | ${i.files} | \u5F85\u8865\u5145 |`)].join(`
|
|
639
639
|
`),s=r.commands.length===0?"\uFF08\u672A\u68C0\u6D4B\u5230\u8FD0\u884C / \u6784\u5EFA\u547D\u4EE4\uFF09":r.commands.map(i=>`- **${i.name}**\uFF1A\`${i.command}\``).join(`
|
|
640
640
|
`);return`# ${r.name} \u67B6\u6784\u8BF4\u660E
|
|
641
641
|
|
|
642
|
-
${
|
|
642
|
+
${Nn(e.version,e.date)}
|
|
643
643
|
|
|
644
644
|
## \u76EE\u5F55\u7ED3\u6784
|
|
645
645
|
|
|
646
646
|
\`\`\`
|
|
647
|
-
${
|
|
647
|
+
${sa(r.root,2,60)}
|
|
648
648
|
\`\`\`
|
|
649
649
|
|
|
650
650
|
## \u6A21\u5757\u6982\u89C8
|
|
@@ -661,14 +661,14 @@ ${s}
|
|
|
661
661
|
- \u5F85\u8865\u5145\uFF1A\u5173\u952E\u8BBE\u8BA1\u53D6\u820D\uFF08\u4E3A\u4EC0\u4E48\u8FD9\u6837\u5206\u5C42\u3001\u6709\u54EA\u4E9B\u7EA6\u675F\uFF09\u3002
|
|
662
662
|
|
|
663
663
|
> \u672C\u6587\u4EF6\u53EA\u5199\u5165\u53EF\u786E\u5B9A\u7684\u4E8B\u5B9E\uFF1B\u300C\u5F85\u8865\u5145\u300D\u90E8\u5206\u9700\u8981\u9879\u76EE\u7EF4\u62A4\u8005\u5B8C\u5584\u3002
|
|
664
|
-
`}function
|
|
664
|
+
`}function Lu(r,e){let n=r.rawScripts?["## package.json scripts\uFF08\u539F\u59CB\uFF09","","| script | \u5185\u5BB9 |","| --- | --- |",...Object.entries(r.rawScripts).map(([s,i])=>`| \`${wt(s)}\` | \`${wt(i)}\` |`)].join(`
|
|
665
665
|
`):"";return`# ${r.name} \u547D\u4EE4\u624B\u518C
|
|
666
666
|
|
|
667
|
-
${
|
|
667
|
+
${Nn(e.version,e.date)}
|
|
668
668
|
|
|
669
669
|
## \u5E38\u7528\u547D\u4EE4
|
|
670
670
|
|
|
671
|
-
${
|
|
671
|
+
${ra(r)}
|
|
672
672
|
${n?`
|
|
673
673
|
${n}
|
|
674
674
|
`:""}
|
|
@@ -676,10 +676,10 @@ ${n}
|
|
|
676
676
|
|
|
677
677
|
- \u547D\u4EE4\u6309\u539F\u6837\u63D0\u53D6\uFF1B\u5982\u4E0E\u5B9E\u9645\u4E0D\u7B26\u8BF7\u76F4\u63A5\u4FEE\u6539\u672C\u6587\u4EF6\u3002
|
|
678
678
|
- \u5B89\u88C5\u4F9D\u8D56\u540E\uFF0C\u6784\u5EFA / \u6D4B\u8BD5\u547D\u4EE4\u901A\u5E38\u9700\u8981\u5728\u9879\u76EE\u6839\u76EE\u5F55\u6267\u884C\u3002
|
|
679
|
-
`}function
|
|
679
|
+
`}function Nu(r,e){let n={".editorconfig":"\u7F29\u8FDB\u3001\u6362\u884C\u7B26\u4E0E\u5B57\u7B26\u96C6\u7B49\u57FA\u7840\u98CE\u683C",".gitignore":"\u5FFD\u7565\u89C4\u5219\uFF08\u6784\u5EFA\u4EA7\u7269\u3001\u4F9D\u8D56\u3001\u672C\u5730\u914D\u7F6E\uFF09",".eslintrc":"JavaScript / TypeScript \u9759\u6001\u68C0\u67E5",".eslintrc.js":"JavaScript / TypeScript \u9759\u6001\u68C0\u67E5",".eslintrc.cjs":"JavaScript / TypeScript \u9759\u6001\u68C0\u67E5",".eslintrc.json":"JavaScript / TypeScript \u9759\u6001\u68C0\u67E5","eslint.config.js":"JavaScript / TypeScript \u9759\u6001\u68C0\u67E5","eslint.config.mjs":"JavaScript / TypeScript \u9759\u6001\u68C0\u67E5",".prettierrc":"\u4EE3\u7801\u683C\u5F0F\u5316",".prettierrc.json":"\u4EE3\u7801\u683C\u5F0F\u5316",".prettierrc.js":"\u4EE3\u7801\u683C\u5F0F\u5316","prettier.config.js":"\u4EE3\u7801\u683C\u5F0F\u5316","tsconfig.json":"TypeScript \u7F16\u8BD1\u9009\u9879\uFF08strict / target / paths \u7B49\uFF09","pyproject.toml":"Python \u4F9D\u8D56\u4E0E\u5DE5\u5177\u914D\u7F6E","requirements.txt":"Python \u4F9D\u8D56","go.mod":"Go \u6A21\u5757\u4E0E\u4F9D\u8D56","Cargo.toml":"Rust \u4F9D\u8D56\u4E0E\u6784\u5EFA",Makefile:"\u5E38\u7528\u4EFB\u52A1\u5165\u53E3",Dockerfile:"\u5BB9\u5668\u955C\u50CF\u6784\u5EFA","docker-compose.yml":"\u672C\u5730\u591A\u670D\u52A1\u7F16\u6392",".github/workflows":"CI \u6D41\u7A0B"},s=r.configs.length===0?"\uFF08\u672A\u68C0\u6D4B\u5230\u914D\u7F6E\u6587\u4EF6\uFF09":["| \u914D\u7F6E\u6587\u4EF6 | \u7528\u9014 |","| --- | --- |",...r.configs.map(o=>`| \`${wt(o)}\` | ${n[o]??"\u9879\u76EE\u914D\u7F6E"} |`)].join(`
|
|
680
680
|
`),i=[];return r.configs.includes(".editorconfig")&&i.push("- \u7F29\u8FDB\u4E0E\u6362\u884C\u4EE5 `.editorconfig` \u4E3A\u51C6\u3002"),r.configs.some(o=>o.includes("eslint"))&&i.push("- \u63D0\u4EA4\u524D\u8FD0\u884C lint\uFF08\u89C1 `docs/COMMANDS.md` \u6216 AGENTS.md\uFF09\u3002"),r.configs.some(o=>o.includes("prettier"))&&i.push("- \u683C\u5F0F\u5316\u4EE5 Prettier \u914D\u7F6E\u4E3A\u51C6\u3002"),r.configs.includes("tsconfig.json")&&i.push("- TypeScript \u7F16\u8BD1\u9009\u9879\u4EE5 `tsconfig.json` \u4E3A\u51C6\uFF1B\u4E0D\u8981\u7ED5\u8FC7\u7C7B\u578B\u68C0\u67E5\u63D0\u4EA4\u3002"),i.length===0&&i.push("- \u5F85\u8865\u5145\uFF1A\u7F29\u8FDB\u3001\u547D\u540D\u3001\u63D0\u4EA4\u4FE1\u606F\u4E0E\u8BC4\u5BA1\u8981\u6C42\u3002"),`# ${r.name} \u7F16\u7801\u4E0E\u5DE5\u7A0B\u7EA6\u5B9A
|
|
681
681
|
|
|
682
|
-
${
|
|
682
|
+
${Nn(e.version,e.date)}
|
|
683
683
|
|
|
684
684
|
## \u914D\u7F6E\u6587\u4EF6
|
|
685
685
|
|
|
@@ -695,120 +695,121 @@ ${i.join(`
|
|
|
695
695
|
- \u63D0\u4EA4\u4FE1\u606F\u683C\u5F0F\uFF08\u5982 Conventional Commits\uFF09
|
|
696
696
|
- \u5206\u652F\u7B56\u7565\u4E0E\u8BC4\u5BA1\u8981\u6C42
|
|
697
697
|
- \u6D4B\u8BD5\u8986\u76D6\u8981\u6C42\u4E0E\u4E0D\u5141\u8BB8\u7684\u505A\u6CD5
|
|
698
|
-
`}function
|
|
698
|
+
`}function ia(r,e){let n=[{relPath:ea,content:Ou(r,e)}];return(r.commands.length>0||r.rawScripts)&&n.push({relPath:ta,content:Lu(r,e)}),r.configs.length>0&&n.push({relPath:na,content:Nu(r,e)}),n.push({relPath:Pu,content:Du(r,{...e,generatedDocs:n.map(s=>s.relPath)})}),n}function ju(){let r=new Date,e=n=>String(n).padStart(2,"0");return`${r.getFullYear()}-${e(r.getMonth()+1)}-${e(r.getDate())}`}function Fu(r){let e=r.split(/^(?=##\s)/m),n=(e.shift()??"").trimEnd(),s=[];for(let i of e){let o=i.trimEnd(),a=/^##\s+(.+)$/m.exec(o);a&&s.push({heading:a[1].trim(),raw:o})}return{preamble:n,sections:s}}function oa(r){return r.replace(/\s+/g," ").trim().toLowerCase()}function Bu(r){let e=new Set;for(let n of r.matchAll(/^##\s+(.+)$/gm))e.add(oa(n[1]));return e}function Uu(r,e){let{sections:n}=Fu(e),s=Bu(r),i=[],o=[],a=[];for(let c of n){if(s.has(oa(c.heading))){o.push(c.heading);continue}i.push(c.heading),a.push(c.raw)}if(a.length===0)return{content:r,appended:i,kept:o};let l=r.trimEnd();return{content:`${l}${l?`
|
|
699
699
|
|
|
700
700
|
`:""}${a.join(`
|
|
701
701
|
|
|
702
702
|
`)}
|
|
703
|
-
`,appended:i,kept:o}}function
|
|
703
|
+
`,appended:i,kept:o}}function jn(r,e={}){let n=Tt.resolve(r),s=Yo(n),i=ia(s,{version:B,date:ju()}),o=[];for(let a of i){let l=Tt.join(n,a.relPath),c="",u=0;try{c=ke.readFileSync(l,"utf8"),u=Buffer.byteLength(c,"utf8")}catch{}if(!c){o.push({relPath:a.relPath,absPath:l,action:"create",content:a.content,appendedSections:[],keptSections:[],existingBytes:0});continue}if(e.force){o.push({relPath:a.relPath,absPath:l,action:"overwrite",content:a.content,appendedSections:[],keptSections:[],existingBytes:u});continue}let h=Uu(c,a.content);o.push({relPath:a.relPath,absPath:l,action:h.appended.length>0?"append":"skip",content:h.content,appendedSections:h.appended,keptSections:h.kept,existingBytes:u})}return{cwd:n,facts:s,files:o}}function Fn(r){let e=[],n=[],s=new Date().toISOString().replace(/[:.]/g,"-");for(let i of r.files)if(i.action!=="skip"){if(ke.mkdirSync(Tt.dirname(i.absPath),{recursive:!0}),i.action==="overwrite"&&ke.existsSync(i.absPath)){let o=`${i.absPath}.bak-${s}`;try{ke.copyFileSync(i.absPath,o),n.push(o)}catch{throw new Error(`\u5907\u4EFD\u5931\u8D25\uFF0C\u5DF2\u53D6\u6D88\u8986\u76D6\uFF1A${i.relPath}`)}}ke.writeFileSync(i.absPath,i.content,"utf8"),e.push({relPath:i.relPath,action:i.action})}return{written:e,backups:n}}function Bn(r){let e={create:0,append:0,overwrite:0,skip:0};for(let i of r.files)e[i.action]+=1;let n=[],s=[];e.create>0&&s.push(`\u65B0\u5EFA ${e.create}`),e.append>0&&s.push(`\u8865\u5145 ${e.append}`),e.overwrite>0&&s.push(`\u8986\u76D6 ${e.overwrite}`),e.skip>0&&s.push(`\u8DF3\u8FC7 ${e.skip}`),n.push(`\u9879\u76EE\uFF1A${r.facts.name}${r.facts.version?`\uFF08v${r.facts.version}\uFF09`:""} \xB7 \u626B\u63CF\u5230 ${r.facts.fileCount} \u4E2A\u6587\u4EF6\u3001${r.facts.directories.length} \u4E2A\u9876\u5C42\u76EE\u5F55`),n.push(`\u53D8\u66F4\uFF1A${s.length>0?s.join(" \xB7 "):"\u65E0"}`);for(let i of r.files){let o=i.action==="create"?"+":i.action==="append"?"~":i.action==="overwrite"?"!":"\xB7",a="";i.action==="append"&&i.appendedSections.length>0?a=`\uFF08\u8865\u5145\uFF1A${i.appendedSections.join("\u3001")}\uFF09`:i.action==="overwrite"?a="\uFF08--force\uFF1A\u8986\u76D6\u524D\u4F1A\u5907\u4EFD\uFF09":i.action==="skip"&&(a=i.keptSections.length>0?"\uFF08\u5DF2\u5B58\u5728\uFF0C\u4FDD\u7559\u539F\u5185\u5BB9\uFF09":"\uFF08\u65E0\u53D8\u5316\uFF09"),n.push(` ${o} ${i.relPath}${a}`)}return n}function aa(r){return r.files.filter(e=>e.action!=="skip").map(e=>({relPath:e.relPath,content:e.content}))}var da=require("child_process"),Un=5*1024*1024,la=1e4,zu=["$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("; "),ca="[Console]::Out.Write((Get-Clipboard -Raw))",Gu=3;function Ju(){if(process.platform==="win32"){let r=e=>["-NoProfile","-NonInteractive",...e==="powershell.exe"?["-STA"]:[],"-Command",zu];return[{command:"powershell.exe",args:r("powershell.exe"),output:"base64",label:"PowerShell"},{command:"pwsh",args:r("pwsh"),output:"base64",label:"PowerShell 7"}]}return process.platform==="darwin"?[{command:"pngpaste",args:["-"],output:"binary",label:"pngpaste"},{command:"osascript",args:["-e","the clipboard as \xABclass PNGf\xBB"],output:"applescript-hex",label:"osascript"}]:[{command:"wl-paste",args:["--no-newline","--type","image/png"],output:"binary",label:"wl-paste\uFF08wl-clipboard\uFF09"},{command:"xclip",args:["-selection","clipboard","-t","image/png","-o"],output:"binary",label:"xclip"}]}function Hu(){return process.platform==="win32"?[{command:"powershell.exe",args:["-NoProfile","-NonInteractive","-Command",ca],output:"binary",label:"PowerShell"},{command:"pwsh",args:["-NoProfile","-NonInteractive","-Command",ca],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 ua(r){return r.length===0?Buffer.alloc(0):Buffer.concat(r)}function pa(r){return new Promise(e=>{let n=!1,s=l=>{n||(n=!0,e(l))},i;try{i=(0,da.spawn)(r.command,r.args,{stdio:["ignore","pipe","ignore"],windowsHide:!0})}catch(l){s({missing:!0,code:null,stdout:Buffer.alloc(0),error:l instanceof Error?l.message:String(l)});return}let o=[],a=setTimeout(()=>{try{i.kill()}catch{}s({missing:!1,code:null,stdout:ua(o),error:`\u8D85\u65F6\uFF08${la} ms\uFF09`})},la);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:ua(o)})})})}function us(r){return r.length>=8&&r[0]===137&&r[1]===80&&r[2]===78&&r[3]===71?"image/png":r.length>=3&&r[0]===255&&r[1]===216&&r[2]===255?"image/jpeg":r.length>=6&&r.subarray(0,4).toString("latin1")==="GIF8"?"image/gif":r.length>=12&&r.subarray(0,4).toString("latin1")==="RIFF"&&r.subarray(8,12).toString("latin1")==="WEBP"?"image/webp":null}function Ku(r){let e=/«data\s+\w{4}([0-9A-Fa-f]+)»/.exec(r);if(!e)return null;let n=e[1];return n.length===0||n.length%2!==0?null:Buffer.from(n,"hex")}function qu(r,e){if(e.code!==0)return e.code===Gu?{empty:!0}:{error:`${r.label} \u9000\u51FA\u7801 ${e.code??"\u672A\u77E5"}${e.error?`\uFF08${e.error}\uFF09`:""}`};let n=null;if(r.output==="binary")n=e.stdout;else if(r.output==="base64"){let i=e.stdout.toString("utf8").replace(/\s+/g,"");n=i.length>0?Buffer.from(i,"base64"):null}else n=Ku(e.stdout.toString("utf8"));if(!n||n.length===0)return{empty:!0};let s=us(n);return s?{image:{mimeType:s,base64:n.toString("base64"),bytes:n.length}}:{empty:!0}}async function ds(){let r=[],e="";for(let n of Ju()){r.push(n.label);let s=await pa(n);if(s.missing)continue;let i=qu(n,s);if("image"in i)return{kind:"image",image:i.image};if("empty"in i)return{kind:"empty"};e=i.error}return{kind:"unavailable",detail:e||`\u672A\u627E\u5230\u53EF\u7528\u7684\u526A\u8D34\u677F\u5DE5\u5177\uFF08\u5DF2\u5C1D\u8BD5\uFF1A${r.join("\u3001")}\uFF09\u3002`+(process.platform==="linux"?" \u8BF7\u5B89\u88C5 wl-clipboard\uFF08Wayland\uFF09\u6216 xclip\uFF08X11\uFF09\u3002":"")}}async function ha(){for(let r of Hu()){let e=await pa(r);if(e.missing||e.code!==0)continue;let n=e.stdout.toString("utf8");if(n.length>0)return n}return null}var zn=class{buffer="";inCodeBlock=!1;codeLang="";push(e){this.buffer+=e;let n=[],s=this.buffer.indexOf(`
|
|
704
704
|
`);for(;s!==-1;){let i=this.buffer.slice(0,s);this.buffer=this.buffer.slice(s+1),n.push(this.renderLine(i)),s=this.buffer.indexOf(`
|
|
705
|
-
`)}return n}peek(){if(!this.buffer)return"";let e=this.inCodeBlock,n=this.codeLang;try{return this.renderLine(this.buffer)}finally{this.inCodeBlock=e,this.codeLang=n}}flush(){if(this.buffer.length===0)return this.inCodeBlock=!1,this.codeLang="",[];let e=this.buffer;this.buffer="";let n=this.renderLine(e);return this.inCodeBlock=!1,this.codeLang="",[n]}renderLine(e){let n=e.replace(/\r$/,""),s=n.trimStart();if(s.startsWith("```")){if(!this.inCodeBlock){this.inCodeBlock=!0,this.codeLang=s.slice(3).trim();let a=this.codeLang?` ${this.codeLang} `:"";return`${t.gray}\u250C\u2500${a}${"\u2500".repeat(Math.max(0,6-a.length))}${t.reset}`}return this.inCodeBlock=!1,this.codeLang="",`${t.gray}\u2514\u2500\u2500${t.reset}`}if(this.inCodeBlock)return`${t.cyan}${n}${t.reset}`;let i=/^(#{1,6})\s+(.*)$/.exec(s);if(i){let a=i[2];return i[1].length<=2?`${t.bold}${t.brightWhite}${a}${t.reset}`:`${t.bold}${a}${t.reset}`}if(s.startsWith("> "))return`${t.gray}\u2502 ${this.renderInline(s.slice(2),t.gray)}${t.reset}`;let o=/^(\s*)([-*+]|\d+\.)\s+(.*)$/.exec(n);return o?`${o[1]}${t.blue}${o[2]}${t.reset} ${this.renderInline(o[3])}`:/^(-{3,}|\*{3,}|_{3,})$/.test(s)?`${t.gray}${"\u2500".repeat(20)}${t.reset}`:this.renderInline(n)}renderInline(e,n=""){let s=n?`${t.reset}${n}`:t.reset,i=e;return i=i.replace(/`([^`]+)`/g,(o,a)=>`${t.cyan}${a}${s}`),i=i.replace(/\*\*([^*]+)\*\*/g,(o,a)=>`${t.bold}${a}${s}`),i=i.replace(/(^|\s)\*([^*\s][^*]*)\*(?=\s|$)/g,"$1$2"),i}};var
|
|
705
|
+
`)}return n}peek(){if(!this.buffer)return"";let e=this.inCodeBlock,n=this.codeLang;try{return this.renderLine(this.buffer)}finally{this.inCodeBlock=e,this.codeLang=n}}flush(){if(this.buffer.length===0)return this.inCodeBlock=!1,this.codeLang="",[];let e=this.buffer;this.buffer="";let n=this.renderLine(e);return this.inCodeBlock=!1,this.codeLang="",[n]}renderLine(e){let n=e.replace(/\r$/,""),s=n.trimStart();if(s.startsWith("```")){if(!this.inCodeBlock){this.inCodeBlock=!0,this.codeLang=s.slice(3).trim();let a=this.codeLang?` ${this.codeLang} `:"";return`${t.gray}\u250C\u2500${a}${"\u2500".repeat(Math.max(0,6-a.length))}${t.reset}`}return this.inCodeBlock=!1,this.codeLang="",`${t.gray}\u2514\u2500\u2500${t.reset}`}if(this.inCodeBlock)return`${t.cyan}${n}${t.reset}`;let i=/^(#{1,6})\s+(.*)$/.exec(s);if(i){let a=i[2];return i[1].length<=2?`${t.bold}${t.brightWhite}${a}${t.reset}`:`${t.bold}${a}${t.reset}`}if(s.startsWith("> "))return`${t.gray}\u2502 ${this.renderInline(s.slice(2),t.gray)}${t.reset}`;let o=/^(\s*)([-*+]|\d+\.)\s+(.*)$/.exec(n);return o?`${o[1]}${t.blue}${o[2]}${t.reset} ${this.renderInline(o[3])}`:/^(-{3,}|\*{3,}|_{3,})$/.test(s)?`${t.gray}${"\u2500".repeat(20)}${t.reset}`:this.renderInline(n)}renderInline(e,n=""){let s=n?`${t.reset}${n}`:t.reset,i=e;return i=i.replace(/`([^`]+)`/g,(o,a)=>`${t.cyan}${a}${s}`),i=i.replace(/\*\*([^*]+)\*\*/g,(o,a)=>`${t.bold}${a}${s}`),i=i.replace(/(^|\s)\*([^*\s][^*]*)\*(?=\s|$)/g,"$1$2"),i}};var Ht=require("child_process"),Ct=v(require("fs")),Jn=v(require("os")),ge=v(require("path"));var ma=2e3,Wu=8192,Xu=1200,nt;function Vu(){if(nt!==void 0)return nt;nt=null;try{(0,Ht.spawnSync)("script",["--version"],{timeout:2e3,stdio:"ignore"}).status===0?nt="linux":nt=(0,Ht.spawnSync)("script",["-h"],{timeout:2e3,stdio:"ignore"}).error?null:"bsd"}catch{nt=null}return nt}function Yu(r,e){let n=Vu();return n==="linux"?{file:"script",args:["-qec",e,"/dev/null"]}:n==="bsd"?{file:"script",args:["-q","/dev/null",r,"-c",e]}:{file:r,args:["-c",e]}}var Hn=class{lines=[];partial="";running;killTimer;cwd;onChange;parseState="text";parseSeq="";constructor(e,n){this.cwd=e,this.onChange=n,this.pushLine(`${t.gray}\u7EC8\u7AEF\u5C31\u7EEA \xB7 \u547D\u4EE4\u5728\u5F53\u524D\u9879\u76EE\u76EE\u5F55\u4E0B\u6267\u884C${t.reset}`)}getCwd(){return this.cwd}isRunning(){return this.running!==void 0}setCwd(e){this.cwd=e,this.pushLine(`${t.gray}\u2500\u2500 \u5DE5\u4F5C\u76EE\u5F55\u5DF2\u5207\u6362\uFF1A${e}${t.reset}`),this.onChange()}clear(){this.lines=[],this.partial="",this.onChange()}notice(e){this.pushLine(e),this.onChange()}visibleLines(){return this.partial?[...this.lines,this.partial]:this.lines}run(e){let n=e.trim();if(!n)return;if(this.running){this.pushLine(`${t.yellow}\u26A0 \u4E0A\u4E00\u6761\u547D\u4EE4\u4ECD\u5728\u8FD0\u884C\uFF0C\u8BF7\u5148 Ctrl+C \u4E2D\u65AD${t.reset}`),this.onChange();return}if(n==="clear"||n==="cls"){this.clear();return}if(this.handleCd(n))return;this.flushPartial(),this.pushLine(`${t.brightGreen}\u276F${t.reset} ${t.bold}${n}${t.reset}`);let s=process.env.SHELL||"/bin/bash",i=Yu(s,n),o;try{o=(0,Ht.spawn)(i.file,i.args,{cwd:this.cwd,env:{...process.env,TERM:"xterm-256color",CLICOLOR_FORCE:"1",FORCE_COLOR:"1"},stdio:["pipe","pipe","pipe"],detached:!0})}catch(l){this.pushLine(`${t.red}\u2717 \u542F\u52A8\u5931\u8D25\uFF1A${l instanceof Error?l.message:String(l)}${t.reset}`),this.onChange();return}this.running=o;let a=l=>this.feed(l.toString("utf8"));o.stdout?.on("data",a),o.stderr?.on("data",a),o.on("error",l=>{this.flushPartial(),this.pushLine(`${t.red}\u2717 \u6267\u884C\u51FA\u9519\uFF1A${l.message}${t.reset}`),this.running=void 0,this.onChange()}),o.on("close",(l,c)=>{this.flushPartial(),c?this.pushLine(`${t.yellow}\u23F9 \u5DF2\u4E2D\u65AD\uFF08${c}\uFF09${t.reset}`):l===0?this.pushLine(`${t.gray}\u2713 \u5B8C\u6210${t.reset}`):this.pushLine(`${t.red}\u2717 \u9000\u51FA\u7801 ${l}${t.reset}`),this.running=void 0,this.onChange()}),this.onChange()}write(e){let n=this.running;if(!(!n?.stdin||n.stdin.destroyed))try{n.stdin.write(e)}catch{}}interrupt(){let e=this.running;if(!e||e.pid===void 0)return;let n=e.pid,s=i=>{try{process.kill(-n,i)}catch{try{e.kill(i)}catch{}}};s("SIGINT"),this.killTimer&&clearTimeout(this.killTimer),this.killTimer=setTimeout(()=>{this.killTimer=void 0,this.running===e&&s("SIGKILL")},Xu)}dispose(){this.killTimer&&(clearTimeout(this.killTimer),this.killTimer=void 0);let e=this.running;if(this.running=void 0,!(!e||e.pid===void 0))try{process.kill(-e.pid,"SIGKILL")}catch{try{e.kill("SIGKILL")}catch{}}}handleCd(e){let n=/^cd(?:\s+([\s\S]*))?$/.exec(e);if(!n)return!1;let s=(n[1]??"").trim().replace(/^['"]|['"]$/g,""),i;if(!s||s==="~")i=Jn.homedir();else{let o=s.startsWith("~/")?ge.join(Jn.homedir(),s.slice(2)):s;i=ge.isAbsolute(o)?o:ge.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 n=e.replace(/\r\n/g,`
|
|
706
706
|
`),s=this.partial,i=this.parseState,o=this.parseSeq;for(let a of n){if(i==="osc"){(a==="\x07"||a==="\\"&&o.endsWith("\x1B"))&&(i="text"),o+=a;continue}if(i==="esc"){if(a==="["){i="csi",o="\x1B[";continue}if(a==="]"){i="osc",o="\x1B]";continue}i="text";continue}if(i==="csi"){o+=a,a>="@"&&a<="~"&&(a==="m"&&(s+=o),i="text");continue}if(a==="\x1B"){i="esc",o="\x1B";continue}if(a==="\r"){s="";continue}if(a===`
|
|
707
|
-
`){this.pushLine(s),s="";continue}a==="\x07"||a==="\b"||(s+=a)}s.length>
|
|
707
|
+
`){this.pushLine(s),s="";continue}a==="\x07"||a==="\b"||(s+=a)}s.length>Wu&&(this.pushLine(s),s=""),this.parseState=i,this.parseSeq=o,this.partial=s,this.onChange()}pushLine(e){this.lines.push(e),this.lines.length>ma&&this.lines.splice(0,this.lines.length-ma)}flushPartial(){this.partial&&(this.pushLine(this.partial),this.partial="")}},Zu=["alias","cd","clear","cls","echo","exit","export","false","history","pwd","set","source","true","type","unalias","unset","which"],Gn=null;function Qu(){if(Gn)return Gn;let r=new Set(Zu);for(let e of(process.env.PATH??"").split(ge.delimiter)){if(!e)continue;let n;try{n=Ct.readdirSync(e)}catch{continue}for(let s of n)r.add(s)}return Gn=[...r].sort(),Gn}function ed(r){if(r.length===0)return"";let e=r[0];for(let n of r.slice(1)){let s=0;for(;s<e.length&&s<n.length&&e[s]===n[s];)s++;if(e=e.slice(0,s),!e)break}return e}function td(r,e){return e?e==="~"||e.startsWith("~/")?ge.join(Jn.homedir(),e.slice(1)):ge.isAbsolute(e)?e:ge.resolve(r,e):r}function fa(r,e){if(r.isDirectory())return!0;if(!r.isSymbolicLink())return!1;try{return Ct.statSync(ge.join(e,r.name)).isDirectory()}catch{return!1}}function nd(r,e,n){let s=e.lastIndexOf("/"),i=s>=0?e.slice(0,s+1):"",o=e.slice(s+1),a=td(r,i),l;try{l=Ct.readdirSync(a,{withFileTypes:!0})}catch{return{dirPart:i,base:o,names:[]}}let c=l.filter(u=>n&&!fa(u,a)||u.name.startsWith(".")&&!o.startsWith(".")?!1:u.name.startsWith(o)).map(u=>u.name+(fa(u,a)?"/":"")).sort();return{dirPart:i,base:o,names:c}}function ga(r,e,n){let i=e.slice(0,n).replace(/\s+$/,""),o=i.lastIndexOf(" ")+1,a=i.slice(o),l=i.slice(0,o),c="",u=a.lastIndexOf("=");u>=0&&/^[A-Za-z_][A-Za-z0-9_]*$/.test(a.slice(0,u))&&(c=a.slice(0,u+1),a=a.slice(u+1));let 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}${$}`,y="",g;if(p)g=Qu().filter($=>$.startsWith(a));else{let $=l.trim().split(/\s+/)[0]??"",P=nd(r,a,$==="cd");y=P.dirPart,g=P.names}if(g.length===0)return null;if(g.length===1){let $=y+g[0],P=$.endsWith("/"),N=h&&!P?h:"",R=P?"":" ",w=l+m($)+N+R;return{line:w+e.slice(n),cursor:w.length,candidates:[]}}let f=p?a:a.slice(y.length),b=ed(g);if(b.length>f.length){let $=l+m(y+b);return{line:$+e.slice(n),cursor:$.length,candidates:[]}}return{line:e,cursor:n,candidates:g.map($=>m(y+$))}}var $a=40,rd=3;function sd(r){let e=Math.max(0,Math.floor(r/1e3));if(e<60)return`${e}s`;let n=Math.floor(e/60);return n<60?`${n}m`:`${Math.floor(n/60)}h${String(n%60).padStart(2,"0")}m`}function Kt(r){return r<1024?`${r} B`:r<1024*1024?`${(r/1024).toFixed(1)} KB`:`${(r/1024/1024).toFixed(1)} MB`}function kt(){try{process.stdout.write("\x1B[?2004l\x1B[>4m\x1B[?1000l\x1B[?1002l\x1B[?1006l\x1B[?7h"+t.reset+he.show+$n.exitAlt)}catch{}try{process.stdin.isTTY&&process.stdin.isRaw&&process.stdin.setRawMode(!1)}catch{}}var Kn=class r{options;agent;markdown=new zn;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;shutdownReason;autoApprove;intentEnabled;goalLoopActive=!1;goalCancelled=!1;goalIterations=0;goalIdleRounds=0;history=[];historyIndex=-1;pendingConfirm;pendingSelect;confirmChain=Promise.resolve();abortController;keyBuffer="";escTimer;projectDirCreated;needsRender=!1;mouseCapture;lastAnswerStart=0;streamingPreview="";termVisible=!0;termFocus=!1;termScroll=0;lastLeftWidth=0;lastPhysicalCount=0;lastPhysicalMap=[];screenToLogical=[];selectionAnchor;selectionRegion;outputTopRow=0;outputBottomRow=0;autoScrollTimer;autoScrollDir=0;autoScrollRegion="output";termScreenToLogical=[];termLogicalSnapshot=[];termTopRow=0;termBottomRow=0;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 Hn(e.cwd,()=>this.scheduleRender());let n=er(e.cwd);n.created&&(this.projectDirCreated=n.paths.dir);let s={onText:o=>this.handleTextDelta(o),onReasoning:()=>{},onToolStart:o=>this.handleToolStart(o),onToolEnd:(o,a)=>this.handleToolEnd(o,a),onStatus:(o,a)=>{this.statusText=o,this.statusDetail=a??"",this.scheduleRender()},onNotice:o=>this.handleNotice(o),onTodos:o=>{this.todoItems=o,this.scheduleRender()},onIntent:(o,a)=>this.handleIntent(o,a),onModelChange:o=>this.handleModelChange(o),confirm:o=>this.requestConfirm(o),onRoundLimit:o=>this.goalLoopActive?(this.lines.push(`${t.gray}\u76EE\u6807\u6A21\u5F0F\uFF1A\u5DF2\u7528\u6EE1 ${o} \u8F6E\u5DE5\u5177\u8C03\u7528\uFF0C\u81EA\u52A8\u8FFD\u52A0\u914D\u989D\u7EE7\u7EED\u3002${t.reset}`),this.scheduleRender(),Promise.resolve(!0)):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
|
|
708
708
|
|
|
709
709
|
\xB7 \u6309 y \u7EE7\u7EED\uFF1A\u518D\u8FFD\u52A0 ${this.options.config.maxToolRounds} \u8F6E
|
|
710
710
|
\xB7 \u6309 n \u7ED3\u675F\uFF1A\u4FDD\u7559\u5DF2\u6709\u8FDB\u5C55\uFF0C\u672C\u8F6E\u5230\u6B64\u4E3A\u6B62
|
|
711
711
|
|
|
712
|
-
\u60F3\u6C38\u4E45\u8C03\u6574\u4E0A\u9650\uFF1A\u7F16\u8F91\u914D\u7F6E\u6587\u4EF6\u7684 maxToolRounds \u5B57\u6BB5\u3002`,danger:!1})},i=
|
|
713
|
-
`))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(
|
|
714
|
-
\u4E2D\u6B62\u524D\u5DF2\u7ECF\u771F\u5B9E\u6267\u884C\u8FC7\u7684\u64CD\u4F5C\u53EF\u80FD\u6539\u53D8\u4E86\u6587\u4EF6\u6216\u670D\u52A1\u72B6\u6001\uFF0C\u4E0D\u8981\u51ED\u5047\u8BBE\u91CD\u590D\u6267\u884C\uFF1B\u8BF7\u56DE\u5E94\u7528\u6237\u6700\u65B0\u7684\u6D88\u606F\u3002`}])}catch{}}handleTextDelta(e){let n=this.markdown.push(
|
|
715
|
-
`),a=o.length<=6?o:[...o.slice(0,3),`\u2026\uFF08\u7701\u7565 ${o.length-6} \u884C\uFF09`,...o.slice(-3)];for(let l of a)this.lines.push(` ${t.gray}${l.slice(0,120)}${t.reset}`)}this.statusText="\u601D\u8003\u4E2D",this.scheduleRender()}handleNotice(e){this.flushStreamingPreview();let n=
|
|
716
|
-
`))s.trim().length>0&&this.lines.push(`${t.gray} ${s}${t.reset}`);this.scheduleRender()}handleIntent(e,n){let o=
|
|
717
|
-
`).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${
|
|
718
|
-
`)}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(rt)){this.escTimer=setTimeout(()=>{this.escTimer=void 0;let n=this.keyBuffer;n.startsWith(rt)&&(this.keyBuffer="",this.insertPastedText(n.slice(rt.length)))},
|
|
719
|
-
`)return;let n=
|
|
712
|
+
\u60F3\u6C38\u4E45\u8C03\u6574\u4E0A\u9650\uFF1A\u7F16\u8F91\u914D\u7F6E\u6587\u4EF6\u7684 maxToolRounds \u5B57\u6BB5\u3002`,danger:!1})},i=jt(e.cwd,B);this.currentSessionFile=i,this.agent=new Dn(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(`
|
|
713
|
+
`))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($n.enterAlt+he.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.stdin.on("end",this.onInputClosed),process.stdin.on("close",this.onInputClosed),process.stdout.on("resize",this.onResize)}flushStreamingPreview(){this.streamingPreview&&(this.lines.push(this.streamingPreview),this.streamingPreview="")}static MAX_OUTPUT_LINES=4e3;trimOutputLines(){let e=r.MAX_OUTPUT_LINES,n=this.lines.length-e;if(n<=0)return;this.lines.splice(0,n),this.lastAnswerStart>0&&(this.lastAnswerStart=Math.max(0,this.lastAnswerStart-n));let s=this.selectionAnchor,i=this.selectionHead;(s!==void 0||i!==void 0)&&(s!==void 0&&s<n||i!==void 0&&i<n?(this.selectionAnchor=void 0,this.selectionHead=void 0):(s!==void 0&&(this.selectionAnchor=s-n),i!==void 0&&(this.selectionHead=i-n)))}exitTerminal(){this.escTimer&&(clearTimeout(this.escTimer),this.escTimer=void 0),process.stdin.off("data",this.onData),process.stdin.off("end",this.onInputClosed),process.stdin.off("close",this.onInputClosed),process.stdout.off("resize",this.onResize);try{process.stdin.isTTY&&process.stdin.setRawMode(!1),process.stdin.pause()}catch{}try{process.stdout.write("\x1B[?2004l\x1B[>4m\x1B[?1000l\x1B[?1002l\x1B[?1006l\x1B[?7h"+t.reset+he.show+$n.exitAlt)}catch{}}extendedKeyRequest(){let e=process.env.TERM??"",n=process.env.TERM_PROGRAM??"";return process.env.XZH_KITTY_KEYS?"\x1B[>1u":process.env.KITTY_WINDOW_ID||/kitty|ghostty/i.test(e)||/kitty|ghostty/i.test(n)?"":"\x1B[>4;2m"}requestShutdown(e){if(!this.exited){this.shutdownReason=e,this.abortController?.abort();try{this.shutdown()}catch{this.exited=!0;try{kt()}catch{}this.resolveExit?.()}}}onInputClosed=()=>this.requestShutdown("\u7EC8\u7AEF\u8FDE\u63A5\u5DF2\u5173\u95ED");shutdown(){if(this.exited)return;this.exited=!0,this.noteInterruptedTurn();let e=this.deviceBridge;this.deviceBridge=void 0,this.agent.setDeviceBridge(void 0),e?.stop(),this.stopAutoScroll(),this.term.dispose(),this.exitTerminal(),this.resolveExit?.()}noteInterruptedTurn(){if(this.busy)try{Ft(this.currentSessionFile,[{role:"system",content:`[\u4E0A\u4E00\u8F6E\u5DF2\u4E2D\u6B62] ${this.shutdownReason??"\u4F1A\u8BDD\u5728\u8FD0\u884C\u4E2D\u88AB\u7ED3\u675F"}\uFF1A\u4E0A\u4E00\u8F6E\u6CA1\u6709\u7ED9\u51FA\u7ED3\u8BBA\uFF0C\u8BE5\u8F6E\u5BF9\u8BDD\u5DF2\u4F5C\u5E9F\u3002
|
|
714
|
+
\u4E2D\u6B62\u524D\u5DF2\u7ECF\u771F\u5B9E\u6267\u884C\u8FC7\u7684\u64CD\u4F5C\u53EF\u80FD\u6539\u53D8\u4E86\u6587\u4EF6\u6216\u670D\u52A1\u72B6\u6001\uFF0C\u4E0D\u8981\u51ED\u5047\u8BBE\u91CD\u590D\u6267\u884C\uFF1B\u8BF7\u56DE\u5E94\u7528\u6237\u6700\u65B0\u7684\u6D88\u606F\u3002`}])}catch{}}handleTextDelta(e){let n=this.markdown.push(ye(e));n.length>0&&this.lines.push(...n),this.streamingPreview=this.markdown.peek(),this.scheduleRender()}handleToolStart(e){this.flushStreamingPreview();let n=gd(e);this.lines.push(`${t.magenta}\u23FA${t.reset} ${t.bold}${e.name}${t.reset} ${t.gray}${n}${t.reset}`),this.statusText=`\u6267\u884C ${e.name}`,this.scheduleRender()}handleToolEnd(e,n){this.flushStreamingPreview();let s=ye(n.summary??(n.ok?"\u5B8C\u6210":"\u5931\u8D25")).slice(0,60),i=n.denied?`${t.yellow}\u23BF \u5DF2\u62D2\u7EDD${t.reset}`:n.ok?`${t.green}\u23BF ${s}${t.reset}`:`${t.red}\u23BF ${s}${t.reset}`;if(this.lines.push(` ${i}`),!n.ok&&!n.denied&&n.content?.trim()){let o=ye(n.content).trim().split(`
|
|
715
|
+
`),a=o.length<=6?o:[...o.slice(0,3),`\u2026\uFF08\u7701\u7565 ${o.length-6} \u884C\uFF09`,...o.slice(-3)];for(let l of a)this.lines.push(` ${t.gray}${l.slice(0,120)}${t.reset}`)}this.statusText="\u601D\u8003\u4E2D",this.scheduleRender()}handleNotice(e){this.flushStreamingPreview();let n=ye(e);for(let s of n.split(`
|
|
716
|
+
`))s.trim().length>0&&this.lines.push(`${t.gray} ${s}${t.reset}`);this.scheduleRender()}handleIntent(e,n){let o=ye(e).split(`
|
|
717
|
+
`).map(a=>a.trim()).filter(a=>a.length>0);this.lines.push(`${t.gray}\u2301 \u610F\u56FE\u5206\u6790\u7ED3\u679C\uFF08\u5C06\u4F5C\u4E3A\u672C\u6B21\u8F93\u5165\uFF09${t.reset}`);for(let a of o.slice(0,14))this.lines.push(`${t.gray} ${a}${t.reset}`);o.length>14&&this.lines.push(`${t.gray} \u2026\uFF08\u5171 ${o.length} \u884C\uFF0C\u5B8C\u6574\u5185\u5BB9\u5DF2\u4F5C\u4E3A\u8F93\u5165\u53D1\u9001\uFF09${t.reset}`),this.lines.push(`${t.gray} \u539F\u59CB\u6D88\u606F\uFF1A${O(n.replace(/\s+/g," "),60)}${t.reset}`),this.scheduleRender()}handleModelChange(e){this.modelProviderLabel=Ie(e.provider)?.label??e.provider,this.modelLabel=e.model,this.lines.push(`${t.yellow}\u21C4 \u6A21\u578B\u5DF2\u5207\u6362\u4E3A ${e.provider}/${e.model}\uFF08${e.reason}\uFF09${t.reset}`),this.scheduleRender()}async handleModelCommand(e){let n=W(this.options.config);if(n.length===0){this.lines.push(`${t.yellow}\u8FD8\u6CA1\u6709\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B${t.reset}${t.gray} \u2014\u2014 \u7528 ${t.reset}xzh model${t.gray} \u6DFB\u52A0\u3002${t.reset}`),this.scheduleRender();return}let s=_e(this.options.config);if(e){let l=ad(n,e);if(!l){this.lines.push(`${t.yellow}\u6CA1\u627E\u5230\u6A21\u578B\u300C${e}\u300D${t.reset}${t.gray} \u2014\u2014 \u8F93\u5165 ${t.reset}/model${t.gray} \u67E5\u770B\u5217\u8868\u3002${t.reset}`),this.scheduleRender();return}this.applyModelSwitch(l);return}if(n.length===1){this.lines.push(`${t.gray}\u53EA\u914D\u7F6E\u4E86\u4E00\u4E2A\u6A21\u578B\uFF1A${t.reset}${n[0].id}${t.gray}\uFF08\u7528 ${t.reset}xzh model${t.gray} \u6DFB\u52A0\u66F4\u591A\uFF09${t.reset}`),this.scheduleRender();return}let i=Math.max(0,n.findIndex(l=>l.id===s?.id)),o=await this.requestSelect("\u9009\u62E9\u6A21\u578B",n.map(l=>({label:l.id,hint:l.id===s?.id?"\u5F53\u524D\u4F7F\u7528\u4E2D":void 0,value:l.id})),"\u987A\u5E8F\u5373\u56DE\u9000\u4F18\u5148\u7EA7\uFF1B\u9009\u4E2D\u7684\u6A21\u578B\u4F1A\u8BB0\u5165\u914D\u7F6E\uFF0C\u4E0B\u6B21\u542F\u52A8\u7EE7\u7EED\u7528\u5B83",i);if(o===void 0){this.lines.push(`${t.gray}\u5DF2\u53D6\u6D88\uFF0C\u4ECD\u4F7F\u7528 ${s?.id??this.modelLabel}${t.reset}`),this.scheduleRender();return}let a=n.find(l=>l.id===o);a&&this.applyModelSwitch(a)}applyModelSwitch(e){if(this.busy){this.lines.push(`${t.yellow}\u672C\u8F6E\u5BF9\u8BDD\u8FDB\u884C\u4E2D \u2014\u2014 \u5148\u7B49\u5B83\u7ED3\u675F\u6216 Ctrl+C \u4E2D\u65AD\uFF0C\u518D\u5207\u6362\u6A21\u578B\u3002${t.reset}`),this.scheduleRender();return}try{if(!this.agent.switchModel(e)){this.lines.push(`${t.gray}\u5DF2\u7ECF\u662F\u5F53\u524D\u6A21\u578B\uFF1A${e.id}${t.reset}`),this.scheduleRender();return}this.handleModelChange({provider:e.provider,model:e.model,reason:"\u624B\u52A8\u5207\u6362"})}catch(n){this.lines.push(`${t.yellow}\u5207\u6362\u6A21\u578B\u5931\u8D25\uFF1A${t.reset}${ne(n)}`),this.scheduleRender()}}requestConfirm(e,n=!0){let s=this.confirmChain.then(()=>new Promise(i=>{this.pendingConfirm={request:e,resolve:i,selected:n},this.scheduleRender()}));return this.confirmChain=s.then(()=>{},()=>{}),s}handleData(e){process.env.XZH_DEBUG_KEYS&&this.logRawKeys(e),this.keyBuffer+=e,this.drainKeys()}logRawKeys(e){let n=[...e].map(i=>i.codePointAt(0).toString(16).padStart(2,"0")).join(" "),s=e.replace(/\x1b/g,"\\e").replace(/\r/g,"\\r").replace(/\n/g,"\\n");try{xe.appendFileSync(He.join(E(),"keys.log"),`${new Date().toISOString()} hex=[${n}] raw=${JSON.stringify(s)}
|
|
718
|
+
`)}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(rt)){this.escTimer=setTimeout(()=>{this.escTimer=void 0;let n=this.keyBuffer;n.startsWith(rt)&&(this.keyBuffer="",this.insertPastedText(n.slice(rt.length)))},cd);return}e.startsWith("\x1B")&&(this.escTimer=setTimeout(()=>{this.escTimer=void 0;let n=this.keyBuffer;this.keyBuffer="",n==="\x1B"&&this.handleKey("\x1B")},ld))}readKey(){let e=this.keyBuffer;if(e.length===0)return null;if(e.startsWith(rt)){let i=e.indexOf(qt,rt.length);return i===-1?null:(this.keyBuffer=e.slice(i+qt.length),e.slice(0,i+qt.length))}if(e[0]==="\x1B"){let i=/^\x1b\[[0-9:;<=>?]*[@-~]/.exec(e);if(i)return this.keyBuffer=e.slice(i[0].length),i[0];let o=/^\x1bO[A-Za-z]/.exec(e);return o?(this.keyBuffer=e.slice(o[0].length),o[0]):/^\x1b\[?[0-9:;<=>?]*$/.test(e)?null:e.length>=2?(this.keyBuffer=e.slice(2),e.slice(0,2)):null}let n=e.codePointAt(0);if(n===void 0)return null;let s=String.fromCodePoint(n);return this.keyBuffer=e.slice(s.length),s}handleKey(e){if(e.startsWith(rt)&&e.endsWith(qt)){this.insertPastedText(e.slice(rt.length,e.length-qt.length));return}if(e===`
|
|
719
|
+
`)return;let n=hd(e);if(this.pendingConfirm){this.handleConfirmKey(n);return}if(this.pendingSelect){this.handleSelectKey(n);return}let s=/^\x1b\[<(\d+);(\d+);(\d+)([Mm])$/.exec(n);if(s){this.handleMouse(s);return}if(n==="\x1B[Z"){this.toggleFocus();return}if(this.termFocus){this.handleTermKey(n);return}switch(n){case"":this.busy?(this.goalLoopActive&&(this.goalCancelled=!0),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.goalLoopActive&&(this.goalCancelled=!0),this.abortController?.abort(),this.statusText="\u4E2D\u65AD\u4E2D\u2026",this.scheduleRender());return;case"":this.pasteFromClipboard();return;case"\r":this.submit();return;case`
|
|
720
720
|
`:this.insertText(`
|
|
721
|
-
`);return;case"\x7F":case"\b":this.backspace();return;case"":this.inputCursor=0,this.scheduleRender();return;case"":this.inputCursor=this.input.length,this.scheduleRender();return;case"\f":this.lines=[],this.scrollOffset=0,this.scheduleRender();return;case"\x1B[A":this.navigateHistory(-1);return;case"\x1B[B":this.navigateHistory(1);return;case"\x1B[C":this.moveCursor(1);return;case"\x1B[D":this.moveCursor(-1);return;case"\x1B[5~":this.scrollBy(5);return;case"\x1B[6~":this.scrollBy(-5);return;case"\x1B[1;2A":this.scrollBy(1);return;case"\x1B[1;2B":this.scrollBy(-1);return;case"\x1B[H":case"\x1B[1~":case"\x1B[7~":this.scrollToTop();return;case"\x1B[F":case"\x1B[4~":case"\x1B[8~":this.scrollToBottom();return;default:n.charCodeAt(0)>=32&&this.insertText(n)}}handleMouse(e){let n=Number(e[1]),s=Number(e[2]),i=Number(e[3]),o=e[4]==="M",a=this.resolveTermWidth(process.stdout.columns||80),l=this.lastLeftWidth>0&&a>0&&s>this.lastLeftWidth+1;if(process.env.XZH_DEBUG_KEYS&&this.logRawKeys(`MOUSE btn=${n} col=${s} row=${i} ${o?"press":"release"} inTerm=${l} logical=${this.logicalAtScreenRow(i)} mapLen=${this.screenToLogical.length} anchor=${this.selectionAnchor} head=${this.selectionHead} drag=${this.dragging}`),o&&(n&64)===64){let u=(n&1)===0?3:-3;l?this.scrollTermBy(u):this.scrollBy(u);return}if(o&&(n&3)===0&&(n&32)===0){let c=this.logicalAtScreenRow(i);if(!l&&c!==void 0){this.selectionAnchor=c,this.selectionHead=c,this.dragging=!1,this.scheduleRender();return}l!==this.termFocus&&(this.termFocus=l,this.scheduleRender());return}if(o&&(n&32)===32&&this.selectionAnchor!==void 0){let c=this.
|
|
722
|
-
`)).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()}
|
|
723
|
-
`).
|
|
724
|
-
\
|
|
721
|
+
`);return;case"\x7F":case"\b":this.backspace();return;case"":this.inputCursor=0,this.scheduleRender();return;case"":this.inputCursor=this.input.length,this.scheduleRender();return;case"\f":this.lines=[],this.scrollOffset=0,this.scheduleRender();return;case"\x1B[A":this.navigateHistory(-1);return;case"\x1B[B":this.navigateHistory(1);return;case"\x1B[C":this.moveCursor(1);return;case"\x1B[D":this.moveCursor(-1);return;case"\x1B[5~":this.scrollBy(5);return;case"\x1B[6~":this.scrollBy(-5);return;case"\x1B[1;2A":this.scrollBy(1);return;case"\x1B[1;2B":this.scrollBy(-1);return;case"\x1B[H":case"\x1B[1~":case"\x1B[7~":this.scrollToTop();return;case"\x1B[F":case"\x1B[4~":case"\x1B[8~":this.scrollToBottom();return;default:n.charCodeAt(0)>=32&&this.insertText(n)}}handleMouse(e){let n=Number(e[1]),s=Number(e[2]),i=Number(e[3]),o=e[4]==="M",a=this.resolveTermWidth(process.stdout.columns||80),l=this.lastLeftWidth>0&&a>0&&s>this.lastLeftWidth+1;if(process.env.XZH_DEBUG_KEYS&&this.logRawKeys(`MOUSE btn=${n} col=${s} row=${i} ${o?"press":"release"} shift=${(n&4)===4?"y":"n"} inTerm=${l} logical=${this.logicalAtScreenRow(i)} mapLen=${this.screenToLogical.length} anchor=${this.selectionAnchor} head=${this.selectionHead} drag=${this.dragging}`),o&&(n&64)===64){let u=(n&1)===0?3:-3;l?this.scrollTermBy(u):this.scrollBy(u);return}if(o&&(n&3)===0&&(n&32)===0){let c=this.logicalAtScreenRow(i);if(!l&&c!==void 0){this.selectionAnchor=c,this.selectionHead=c,this.selectionRegion="output",this.dragging=!1,this.stopAutoScroll(),this.scheduleRender();return}if(l){let u=this.termLogicalAtScreenRow(i);if(u!==void 0){this.selectionRegion="term",this.selectionAnchor=u,this.selectionHead=u,this.dragging=!1,this.stopAutoScroll(),this.termFocus=!0,this.scheduleRender();return}}l!==this.termFocus&&(this.termFocus=l,this.scheduleRender());return}if(o&&(n&32)===32&&this.selectionAnchor!==void 0){let c=this.selectionRegion??"output",u=c==="term"?this.termTopRow:this.outputTopRow,h=c==="term"?this.termBottomRow:this.outputBottomRow,d=id(i,u,h);d.scroll!==0?this.startAutoScroll(d.scroll,c):this.stopAutoScroll();let p=c==="term"?this.termLogicalAtScreenRow(d.row):this.logicalAtScreenRow(d.row);p!==void 0&&p!==this.selectionHead&&(this.selectionHead=p,this.dragging=!0,this.scheduleRender());return}!o&&this.selectionAnchor!==void 0&&(this.stopAutoScroll(),this.dragging?this.selectionRegion==="term"?this.finishTermSelection():this.finishSelection():this.clearSelection())}logicalAtScreenRow(e){return this.screenToLogical[e-1]}termLogicalAtScreenRow(e){return this.termScreenToLogical[e-1]}finishTermSelection(){let e=Math.min(this.selectionAnchor,this.selectionHead),n=Math.max(this.selectionAnchor,this.selectionHead),s=n-e+1,i=ye(this.termLogicalSnapshot.slice(e,n+1).join(`
|
|
722
|
+
`)).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\u4ECE\u7EC8\u7AEF\u9762\u677F\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()}clearSelection(){this.stopAutoScroll(),this.selectionAnchor!==void 0&&(this.selectionAnchor=void 0,this.selectionHead=void 0,this.selectionRegion=void 0,this.dragging=!1,this.scheduleRender())}startAutoScroll(e,n="output"){this.autoScrollDir===e&&this.autoScrollRegion===n&&this.autoScrollTimer||(this.stopAutoScroll(),this.autoScrollDir=e,this.autoScrollRegion=n,this.autoScrollTimer=setInterval(()=>{if(this.selectionAnchor===void 0){this.stopAutoScroll();return}n==="term"?this.scrollTermBy(e):this.setScrollOffset(this.scrollOffset+e);let s=e>0?n==="term"?this.termTopRow:this.outputTopRow:n==="term"?this.termBottomRow:this.outputBottomRow,i=n==="term"?this.termLogicalAtScreenRow(s):this.logicalAtScreenRow(s);i!==void 0&&(this.selectionHead=i,this.dragging=!0),this.scheduleRender()},60),this.autoScrollTimer.unref?.())}stopAutoScroll(){this.autoScrollTimer&&(clearInterval(this.autoScrollTimer),this.autoScrollTimer=void 0),this.autoScrollDir=0}finishSelection(){let e=Math.min(this.selectionAnchor,this.selectionHead),n=Math.max(this.selectionAnchor,this.selectionHead),s=n-e+1,i=ye(this.lines.slice(e,n+1).join(`
|
|
723
|
+
`)).trim();if(this.dragging=!1,!i){this.scheduleRender();return}let o=Buffer.from(i,"utf8").toString("base64");process.stdout.write(`\x1B]52;c;${o}\x07`),this.lines.push(`${t.green}\u2713 \u5DF2\u590D\u5236 ${s} \u884C\u5230\u526A\u8D34\u677F${t.reset}${t.gray}\uFF08\u9009\u4E2D\u5904\u4ECD\u4FDD\u6301\u9AD8\u4EAE\uFF09\u3002\u82E5\u7C98\u8D34\u51FA\u6765\u662F\u7A7A\u7684\uFF0C\u8BF4\u660E\u672C\u7EC8\u7AEF\u7981\u7528\u4E86 OSC 52\uFF0C\u8BF7\u6539\u7528 ${t.reset}/copy${t.gray} \u6216 Shift+\u62D6\u62FD\u3002${t.reset}`),this.scheduleRender()}toggleFocus(){if(!this.termVisible){this.lines.push(`${t.gray}\u7EC8\u7AEF\u9762\u677F\u5DF2\u9690\u85CF\uFF0C\u8F93\u5165 /term \u53EF\u91CD\u65B0\u663E\u793A\u3002${t.reset}`),this.scheduleRender();return}this.termFocus=!this.termFocus,this.scheduleRender()}handleTermKey(e){if(this.term.isRunning()){if(e===""||e===""){this.term.interrupt(),this.scheduleRender();return}this.term.write(e);return}switch(e){case"":return;case"":this.term.isRunning()?this.term.interrupt():this.termInput.length>0?(this.termInput="",this.termInputCursor=0):this.termFocus=!1,this.scheduleRender();return;case"\r":this.submitTermCommand();return;case" ":this.applyTermCompletion();return;case"\x7F":case"\b":this.termBackspace();return;case"":this.termInputCursor=0,this.scheduleRender();return;case"":this.termInputCursor=this.termInput.length,this.scheduleRender();return;case"\f":this.term.clear(),this.scrollTermToBottom();return;case"\x1B[A":this.navigateTermHistory(-1);return;case"\x1B[B":this.navigateTermHistory(1);return;case"\x1B[C":this.termInputCursor=Math.min(this.termInput.length,this.termInputCursor+1),this.scheduleRender();return;case"\x1B[D":this.termInputCursor=Math.max(0,this.termInputCursor-1),this.scheduleRender();return;case"\x1B[5~":this.scrollTermBy(5);return;case"\x1B[6~":this.scrollTermBy(-5);return;case"\x1B[1;2A":this.scrollTermBy(1);return;case"\x1B[1;2B":this.scrollTermBy(-1);return;case"\x1B[H":case"\x1B[1~":case"\x1B[7~":this.scrollTermToTop();return;case"\x1B[F":case"\x1B[4~":case"\x1B[8~":this.scrollTermToBottom();return;default:e.charCodeAt(0)>=32&&(this.termInput=this.termInput.slice(0,this.termInputCursor)+e+this.termInput.slice(this.termInputCursor),this.termInputCursor+=e.length,this.termScroll=0,this.scheduleRender())}}termBackspace(){if(this.termInputCursor<=0)return;let e=this.termInputCursor-1,n=this.termInput.charCodeAt(e);n>=56320&&n<=57343&&e>0&&(e-=1),this.termInput=this.termInput.slice(0,e)+this.termInput.slice(this.termInputCursor),this.termInputCursor=e,this.scheduleRender()}navigateTermHistory(e){this.termHistory.length!==0&&(this.termHistoryIndex===-1&&(this.termHistoryIndex=this.termHistory.length),this.termHistoryIndex+=e,this.termHistoryIndex<0&&(this.termHistoryIndex=0),this.termHistoryIndex>=this.termHistory.length?(this.termHistoryIndex=-1,this.termInput="",this.termInputCursor=0):(this.termInput=this.termHistory[this.termHistoryIndex],this.termInputCursor=this.termInput.length),this.scheduleRender())}submitTermCommand(){let e=this.termInput.trim();e&&(this.termInput="",this.termInputCursor=0,this.termScroll=0,this.termHistory.push(e),this.termHistoryIndex=-1,this.term.run(e),this.scheduleRender())}applyTermCompletion(){let e=ga(this.term.getCwd(),this.termInput,this.termInputCursor);if(e){if(e.candidates.length>0){let s=e.candidates.slice(0,24),i=e.candidates.length>s.length?` \u2026\uFF08\u5171 ${e.candidates.length} \u9879\uFF09`:"";this.term.notice(`${t.gray}${s.join(" ")}${i}${t.reset}`)}else this.termInput=e.line,this.termInputCursor=e.cursor,this.termScroll=0;this.scheduleRender()}}handleConfirmKey(e){let n=this.pendingConfirm;if(n)switch(e){case"y":case"Y":this.resolveConfirm(!0);return;case"\r":this.resolveConfirm(n.selected);return;case"":this.abortController?.abort(),this.resolveConfirm(!1);return;case"n":case"N":case"\x1B":case"":this.resolveConfirm(!1);return;case"\x1B[C":case"\x1B[D":case" ":n.selected=!n.selected,this.scheduleRender();return;default:return}}resolveConfirm(e){let n=this.pendingConfirm;if(!n)return;this.pendingConfirm=void 0;let s=e?"\u5DF2\u5141\u8BB8":"\u5DF2\u62D2\u7EDD";this.lines.push(` ${e?t.green:t.yellow}${s}${t.reset}`),n.resolve(e),this.scheduleRender()}requestSelect(e,n,s,i=0){return new Promise(o=>{this.pendingSelect={title:e,detail:s,options:n,index:Math.min(Math.max(0,i),Math.max(0,n.length-1)),resolve:o},this.scheduleRender()})}resolveSelect(e){let n=this.pendingSelect;n&&(this.pendingSelect=void 0,n.resolve(e),this.scheduleRender())}handleSelectKey(e){let n=this.pendingSelect,s=n.options.length;switch(e){case"\x1B[A":case"k":n.index=(n.index-1+s)%s,this.scheduleRender();return;case"\x1B[B":case"j":n.index=(n.index+1)%s,this.scheduleRender();return;case"\r":this.resolveSelect(n.options[n.index]?.value);return;case"\x1B":case"":this.resolveSelect(void 0);return;default:if(/^[1-9]$/.test(e)){let i=Number(e)-1;i<s&&this.resolveSelect(n.options[i].value)}}}insertText(e){this.input=this.input.slice(0,this.inputCursor)+e+this.input.slice(this.inputCursor),this.inputCursor+=e.length,this.scrollOffset=0,this.scheduleRender()}insertPastedText(e){let n=e.replace(/\r\n?/g,`
|
|
724
|
+
`).replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g,"");n&&this.insertText(n)}async pasteFromClipboard(){if(!(this.busy||this.termFocus)){this.statusText="\u8BFB\u53D6\u526A\u8D34\u677F",this.statusDetail="",this.scheduleRender();try{let e=await ds();if(e.kind==="image"){this.attachClipboardImage(e.image);return}let n=await ha();if(n){this.insertText(n);return}if(e.kind==="unavailable"){if(await this.ensureClipboardTool()){let s=await ds();if(s.kind==="image"){this.attachClipboardImage(s.image);return}}this.handleNotice(`\u672A\u80FD\u8BFB\u53D6\u526A\u8D34\u677F\uFF1A${e.detail}
|
|
725
|
+
\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=es();if(e.length===0)return!1;for(let n of e){if(await et(n))return!0;let s=n.install[Oe()];if(!s)continue;if(!await this.requestConfirm({tool:"clipboard_install",title:`\u9700\u8981\u5B89\u88C5\u526A\u8D34\u677F\u5DE5\u5177\uFF1A${n.name}`,detail:`Ctrl+V \u7C98\u8D34\u56FE\u7247\u9700\u8981\u8BFB\u53D6\u7CFB\u7EDF\u526A\u8D34\u677F\uFF0C\u5F53\u524D\u7F3A\u5C11\u5B83\u3002
|
|
725
726
|
|
|
726
727
|
\u5B89\u88C5\u547D\u4EE4\uFF1A
|
|
727
728
|
${s}
|
|
728
729
|
|
|
729
730
|
\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
|
|
730
|
-
${s}`),!1;this.handleNotice(`\u6B63\u5728\u5B89\u88C5 ${n.name} \u2026\uFF08\u53EF\u80FD\u9700\u8981\u8F93\u5165 sudo \u5BC6\u7801\uFF09`),this.suspendUi();let o;try{o=await
|
|
731
|
+
${s}`),!1;this.handleNotice(`\u6B63\u5728\u5B89\u88C5 ${n.name} \u2026\uFF08\u53EF\u80FD\u9700\u8981\u8F93\u5165 sudo \u5BC6\u7801\uFF09`),this.suspendUi();let o;try{o=await ns(s)}catch(a){o={ok:!1,output:String(a),timedOut:!1}}finally{this.resumeUi()}return o.ok?await et(n)?(this.handleNotice(`\u2713 ${n.name} \u5B89\u88C5\u5B8C\u6210`),!0):(this.handleNotice(`\u5B89\u88C5\u547D\u4EE4\u5DF2\u6267\u884C\uFF0C\u4F46\u68C0\u6D4B\u4ECD\u672A\u901A\u8FC7\uFF08\u53EF\u80FD\u9700\u8981\u91CD\u5F00\u7EC8\u7AEF\u5237\u65B0 PATH\uFF09\u3002
|
|
731
732
|
\u53EF\u624B\u52A8\u6267\u884C\uFF1A
|
|
732
733
|
${s}`),!1):(this.handleNotice(`\u5B89\u88C5\u5931\u8D25${o.timedOut?"\uFF08\u8D85\u65F6\uFF09":""}${o.output.trim()?`\uFF1A${o.output.trim()}`:""}
|
|
733
734
|
\u53EF\u624B\u52A8\u6267\u884C\uFF1A
|
|
734
735
|
${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}
|
|
735
736
|
|
|
736
|
-
`)}resumeUi(){this.enterTerminal(),this.suspended=!1,this.lastPhysicalCount=-1,this.lastTermPhysicalCount=-1,this.scheduleRender()}attachClipboardImage(e){if(e.bytes>
|
|
737
|
+
`)}resumeUi(){this.enterTerminal(),this.suspended=!1,this.lastPhysicalCount=-1,this.lastTermPhysicalCount=-1,this.scheduleRender()}attachClipboardImage(e){if(e.bytes>Un){this.handleNotice(`\u56FE\u7247\u8FC7\u5927\uFF08${ps(e.bytes)}\uFF09\uFF0C\u8D85\u51FA\u4E0A\u9650 ${ps(Un)}\uFF0C\u5DF2\u5FFD\u7565\u3002`);return}if(!this.currentModelSupportsVision()){this.handleNotice(`\u5F53\u524D\u6A21\u578B ${this.modelLabel} \u672A\u6807\u6CE8\u652F\u6301\u56FE\u7247\u8F93\u5165\uFF0C\u672A\u9644\u52A0\u56FE\u7247\u3002
|
|
737
738
|
\xB7 \u82E5\u8BE5\u6A21\u578B\u786E\u5B9E\u652F\u6301\u89C6\u89C9\uFF1Axzh model vision <id> on
|
|
738
|
-
\xB7 \u6216\u8005\u5207\u6362\u5230 glm-4v / qwen-vl / gpt-4o / claude \u7B49\u652F\u6301\u89C6\u89C9\u7684\u6A21\u578B`);return}let n=++this.imageSeq;this.pendingImages.set(n,{mimeType:e.mimeType,data:e.base64}),this.insertText(`[\u56FE\u7247${n}]`),this.handleNotice(`\u5DF2\u9644\u52A0\u56FE\u7247${n}\uFF08${
|
|
739
|
-
`)){let o=
|
|
739
|
+
\xB7 \u6216\u8005\u5207\u6362\u5230 glm-4v / qwen-vl / gpt-4o / claude \u7B49\u652F\u6301\u89C6\u89C9\u7684\u6A21\u578B`);return}let n=++this.imageSeq;this.pendingImages.set(n,{mimeType:e.mimeType,data:e.base64}),this.insertText(`[\u56FE\u7247${n}]`),this.handleNotice(`\u5DF2\u9644\u52A0\u56FE\u7247${n}\uFF08${ps(e.bytes)}\uFF0C${e.mimeType}\uFF09\uFF1B\u56DE\u8F66\u53D1\u9001\uFF0C\u9000\u683C\u5220\u6389\u5360\u4F4D\u5373\u53EF\u79FB\u9664\u3002`)}takePendingImages(e){let n=[],s=e.replace(/\[图片(\d+)\]/g,(i,o)=>{let a=this.pendingImages.get(Number(o));return a&&n.push(a),""}).replace(/[ \t]{2,}/g," ").trim();return this.pendingImages.clear(),{text:s,images:n}}absorbImagePaths(e){if(!/\.(png|jpe?g|gif|webp)\b/i.test(e))return{text:e,images:[]};let n=[],s=[];for(let i of e.split(`
|
|
740
|
+
`)){let o=md(i),a=o?fd(o,this.cwd):null;a?n.push(a):s.push(i)}return{text:s.join(`
|
|
740
741
|
`).trim(),images:n}}currentModelSupportsVision(){let e=this.agent.getActiveModel();return e?Xe(e):!1}backspace(){if(this.inputCursor<=0)return;let e=this.inputCursor-1,n=this.input.charCodeAt(e);n>=56320&&n<=57343&&e>0&&(e-=1),this.input=this.input.slice(0,e)+this.input.slice(this.inputCursor),this.inputCursor=e,this.scheduleRender()}moveCursor(e){let n=this.inputCursor+e;if(n=Math.max(0,Math.min(this.input.length,n)),e>0&&n>0&&n<this.input.length){let s=this.input.charCodeAt(n-1);s>=55296&&s<=56319&&(n+=1)}else if(e<0&&n<this.input.length){let s=this.input.charCodeAt(n);s>=56320&&s<=57343&&(n-=1)}this.inputCursor=Math.max(0,Math.min(this.input.length,n)),this.scheduleRender()}navigateHistory(e){this.history.length!==0&&(this.historyIndex===-1&&(this.historyIndex=this.history.length),this.historyIndex+=e,this.historyIndex<0&&(this.historyIndex=0),this.historyIndex>=this.history.length?(this.historyIndex=-1,this.input="",this.inputCursor=0):(this.input=this.history[this.historyIndex],this.inputCursor=this.input.length),this.scheduleRender())}scrollBy(e){this.setScrollOffset(this.scrollOffset+e)}setScrollOffset(e){this.scrollOffset=Math.max(0,Math.round(e)),this.scheduleRender()}scrollToTop(){this.setScrollOffset(Number.MAX_SAFE_INTEGER)}scrollToBottom(){this.setScrollOffset(0)}scrollTermBy(e){this.termScroll=Math.max(0,Math.round(this.termScroll+e)),this.scheduleRender()}scrollTermToTop(){this.termScroll=Number.MAX_SAFE_INTEGER,this.scheduleRender()}scrollTermToBottom(){this.termScroll=0,this.scheduleRender()}async submit(){if(this.busy)return;let e=this.input.trim();if(!e)return;if(this.input="",this.inputCursor=0,this.scrollOffset=0,this.historyIndex=-1,e.startsWith("/")){this.history.push(e),this.pendingImages.clear(),this.handleCommand(e);return}let{text:n,images:s}=this.takePendingImages(e),i=this.absorbImagePaths(n);if(i.images.length>0&&(n=i.text,s=[...s,...i.images]),s.length>0&&!this.currentModelSupportsVision()&&(this.lines.push(`${t.yellow}\u26A0 \u5F53\u524D\u6A21\u578B ${this.modelLabel} \u672A\u6807\u6CE8\u652F\u6301\u56FE\u7247\u8F93\u5165\uFF0C\u5DF2\u5FFD\u7565 ${s.length} \u5F20\u56FE\u7247\u3002${t.reset}`),this.lines.push(`${t.gray} \xB7 \u82E5\u8BE5\u6A21\u578B\u786E\u5B9E\u652F\u6301\u89C6\u89C9\uFF1Axzh model vision <id> on${t.reset}`),this.lines.push(`${t.gray} \xB7 \u6216\u6539\u7528 glm-4v / qwen-vl / gpt-4o / claude \u7B49\u652F\u6301\u89C6\u89C9\u7684\u6A21\u578B${t.reset}`),s=[]),!n&&s.length===0){this.lines.push(`${t.gray}\uFF08\u6CA1\u6709\u53EF\u53D1\u9001\u7684\u5185\u5BB9\uFF09${t.reset}`),this.scheduleRender();return}this.history.push(n||`${s.length} \u5F20\u56FE\u7247`),this.lastAnswerStart=this.lines.length;let o=`${t.bgGreen}${t.black}${t.bold} \u276F ${t.reset}`,a=s.length>0?`${n}${n?`
|
|
741
742
|
`:""}[\u56FE\u7247 \xD7 ${s.length}]`:n,[l,...c]=a.split(`
|
|
742
|
-
`);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(n,this.abortController.signal,s.length>0?s:void 0)}catch(h){let[d,...p]=
|
|
743
|
-
`);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="";let d=this.agent.getRunStatus();d&&this.printRunStatus(d),this.lines.push(""),this.busy=!1,this.abortController=void 0,this.statusText="\u5C31\u7EEA",this.scheduleRender()}}handleCommand(e){let[n,...s]=e.slice(1).split(/\s+/),i=s.join(" ");switch(n){case"help":case"h":this.printHelp();break;case"clear":this.lines=[];break;case"tools":this.printTools();break;case"device":this.handleDeviceCommand(i);break;case"copy":this.copyOutput(i);break;case"image":case"img":case"paste":this.pasteFromClipboard();break;case"mouse":this.toggleMouseCapture();break;case"reset":this.agent.reset(),this.goalIterations=0,this.currentSessionFile=
|
|
743
|
+
`);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(n,this.abortController.signal,s.length>0?s:void 0)}catch(h){let[d,...p]=ne(h).split(`
|
|
744
|
+
`);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="";let d=this.agent.getRunStatus();d&&this.printRunStatus(d),this.lines.push(""),this.busy=!1,this.abortController=void 0,this.statusText="\u5C31\u7EEA",this.scheduleRender()}}handleCommand(e){let[n,...s]=e.slice(1).split(/\s+/),i=s.join(" ");switch(n){case"help":case"h":this.printHelp();break;case"clear":this.lines=[];break;case"tools":this.printTools();break;case"device":this.handleDeviceCommand(i);break;case"copy":this.copyOutput(i);break;case"image":case"img":case"paste":this.pasteFromClipboard();break;case"mouse":this.toggleMouseCapture();break;case"reset":this.agent.reset(),this.goalIterations=0,this.currentSessionFile=jt(this.cwd,B),this.agent.restoreSession([],this.currentSessionFile),this.lines.push(`${t.gray}\u4F1A\u8BDD\u5DF2\u91CD\u7F6E\u3002${t.reset}`);break;case"undo":this.lines.push(Ji(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{te(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{te(this.options.config)}catch(a){this.lines.push(`${t.yellow}\u26A0 \u914D\u7F6E\u4FDD\u5B58\u5931\u8D25\uFF1A${a instanceof Error?a.message:String(a)}${t.reset}`)}this.lines.push(o?`${t.gray}\u610F\u56FE\u5206\u6790\uFF1A${t.brightGreen}\u5F00${t.reset}${t.gray} \u2014\u2014 \u6BCF\u6761\u6D88\u606F\u4F1A\u5148\u7528\u6A21\u677F\u5305\u88F9\u5E76\u8BF7\u6C42\u6A21\u578B\uFF0C\u8FD4\u56DE\u7684\u5206\u6790\u7ED3\u679C\u4F5C\u4E3A\u672C\u6B21\u8F93\u5165\uFF1B\u5DF2\u5199\u5165\u914D\u7F6E\u3002${t.reset}`:`${t.gray}\u610F\u56FE\u5206\u6790\uFF1A\u5173 \u2014\u2014 \u76F4\u63A5\u4F7F\u7528\u4F60\u8F93\u5165\u7684\u5185\u5BB9\uFF1B\u5DF2\u5199\u5165\u914D\u7F6E\u3002${t.reset}`);break}case"model":this.handleModelCommand(i);break;case"goal":this.handleGoalCommand(i);break;case"memory":this.handleMemoryCommand(i);break;case"init":this.handleInitCommand(i);break;default:this.lines.push(`${t.yellow}\u672A\u77E5\u547D\u4EE4\uFF1A/${n}\uFF0C\u8F93\u5165 /help \u67E5\u770B\u5E2E\u52A9\u3002${t.reset}`)}this.scheduleRender()}async handleInitCommand(e){let n=new Set(e.split(/\s+/).filter(Boolean)),s=new Set(["--dry-run","-n","--force","-f"]),i=[...n].filter(p=>!s.has(p));if(i.length>0){this.lines.push(`${t.yellow}\u672A\u77E5\u53C2\u6570\uFF1A${i.join(" ")}${t.reset}`),this.lines.push(`${t.gray} \xB7 \u7528\u6CD5\uFF1A/init [--dry-run|--force]${t.reset}`);return}let o=n.has("--dry-run")||n.has("-n"),a=n.has("--force")||n.has("-f"),l=jn(this.cwd,{force:a}),c=p=>p.startsWith("+")?`${t.green}${p}${t.reset}`:p.startsWith("~")?`${t.cyan}${p}${t.reset}`:p.startsWith("!")?`${t.brightYellow}${p}${t.reset}`:p.startsWith("\xB7")?`${t.gray}${p}${t.reset}`:`${t.gray}${p}${t.reset}`;for(let p of Bn(l))this.lines.push(c(p));if(l.files.every(p=>p.action==="skip")){this.lines.push(`${t.gray}\u9879\u76EE\u89C4\u8303\u5DF2\u662F\u6700\u65B0\uFF0C\u672A\u4FEE\u6539\u4EFB\u4F55\u6587\u4EF6\u3002${t.reset}`);return}if(o){this.lines.push(`${t.gray} \xB7 \u672A\u5199\u5165\u4EFB\u4F55\u6587\u4EF6\uFF1B\u8981\u770B\u5B8C\u6574\u9884\u89C8\u8BF7\u5728\u547D\u4EE4\u884C\u8FD0\u884C ${t.reset}xzh init --dry-run${t.reset}`);return}let u=l.files.some(p=>p.action==="overwrite"),h=l.files.filter(p=>p.action!=="skip");if(!await this.requestConfirm({tool:"init",title:"\u5199\u5165\u9879\u76EE\u89C4\u8303\uFF1F",detail:`\u76EE\u5F55\uFF1A${this.cwd}
|
|
744
745
|
\u5C06\u5199\u5165 ${h.length} \u4E2A\u6587\u4EF6\uFF1A
|
|
745
746
|
`+h.map(p=>` ${p.relPath}`).join(`
|
|
746
747
|
`)+`
|
|
747
748
|
|
|
748
|
-
\u5DF2\u6709\u6587\u4EF6\u53EA\u4F1A\u8865\u5145\u7F3A\u5931\u5C0F\u8282\uFF0C\u4E0D\u4F1A\u8986\u76D6\u539F\u5185\u5BB9`+(u?"\uFF1B`--force` \u4F1A\u6574\u4F53\u8986\u76D6\uFF0C\u8986\u76D6\u524D\u81EA\u52A8\u5907\u4EFD\u3002":"\u3002"),danger:u},!u)){this.lines.push(`${t.gray}\u5DF2\u53D6\u6D88\uFF0C\u672A\u4FEE\u6539\u4EFB\u4F55\u6587\u4EF6\u3002${t.reset}`);return}try{let p=
|
|
749
|
+
\u5DF2\u6709\u6587\u4EF6\u53EA\u4F1A\u8865\u5145\u7F3A\u5931\u5C0F\u8282\uFF0C\u4E0D\u4F1A\u8986\u76D6\u539F\u5185\u5BB9`+(u?"\uFF1B`--force` \u4F1A\u6574\u4F53\u8986\u76D6\uFF0C\u8986\u76D6\u524D\u81EA\u52A8\u5907\u4EFD\u3002":"\u3002"),danger:u},!u)){this.lines.push(`${t.gray}\u5DF2\u53D6\u6D88\uFF0C\u672A\u4FEE\u6539\u4EFB\u4F55\u6587\u4EF6\u3002${t.reset}`);return}try{let p=Fn(l);for(let m of p.written){let y=m.action==="create"?"\u5DF2\u65B0\u5EFA":m.action==="append"?"\u5DF2\u8865\u5145":"\u5DF2\u8986\u76D6";this.lines.push(`${t.green}\u2713 ${y} ${m.relPath}${t.reset}`)}for(let m of p.backups)this.lines.push(`${t.gray} \u5907\u4EFD\uFF1A${m}${t.reset}`);this.lines.push(`${t.gray} \u540E\u7EED\u53EF\u76F4\u63A5\u7F16\u8F91 AGENTS.md \u4E0E docs/\uFF1B\u518D\u6B21 /init \u53EA\u8865\u5145\u7F3A\u5931\u5C0F\u8282\u3002${t.reset}`)}catch(p){this.lines.push(`${t.red}\u2717 \u5199\u5165\u5931\u8D25\uFF1A${p instanceof Error?p.message:String(p)}${t.reset}`)}}handleGoalCommand(e){let n=e.trim(),s=n.toLowerCase(),i=this.agent.getGoal();if(!n||s==="status"){if(!i){this.lines.push(`${t.bold}\u76EE\u6807\u6A21\u5F0F${t.reset} ${t.gray}\uFF08\u5F53\u524D\u6CA1\u6709\u76EE\u6807\uFF09${t.reset}`),this.lines.push(`${t.gray}\u7528\u6CD5\uFF1A/goal <\u76EE\u6807\u63CF\u8FF0> \u2014\u2014 \u8BBE\u5B9A\u540E\u7384\u732A\u4F1A\u6301\u7EED\u81EA\u52A8\u63A8\u8FDB\uFF0C\u76F4\u5230\u5B83\u8C03\u7528 goal_complete \u58F0\u660E\u5B8C\u6210\uFF1BCtrl+C \u53EF\u968F\u65F6\u4E2D\u65AD\u3002${t.reset}`);return}let o=i.completed?"\u5DF2\u5B8C\u6210":this.goalLoopActive?"\u6267\u884C\u4E2D":"\u5DF2\u6682\u505C";this.lines.push(`${t.bold}\u5F53\u524D\u76EE\u6807${t.reset} ${t.gray}\uFF08${o} \xB7 \u7B2C ${this.goalIterations} \u8F6E \xB7 \u5DF2\u7528 ${this.goalElapsedText()}\uFF09${t.reset}`);for(let a of i.text.split(`
|
|
749
750
|
`))this.lines.push(` ${a}`);i.completed||this.lines.push(`${t.gray} \xB7 /goal continue \u7EE7\u7EED\u81EA\u52A8\u6267\u884C \xB7 /goal off \u6E05\u9664\u76EE\u6807${t.reset}`);return}if(["off","stop","clear","cancel","end"].includes(s)){this.goalLoopActive&&(this.goalCancelled=!0,this.abortController?.abort()),this.agent.clearGoal(),this.lines.push(`${t.gray}\u5DF2\u6E05\u9664\u76EE\u6807${this.goalLoopActive?"\uFF0C\u6B63\u5728\u4E2D\u65AD\u6267\u884C\u2026":"\u3002"}${t.reset}`);return}if(["continue","resume","go"].includes(s)){if(!i){this.lines.push(`${t.yellow}\u5F53\u524D\u6CA1\u6709\u76EE\u6807\u3002\u7528\u6CD5\uFF1A/goal <\u76EE\u6807\u63CF\u8FF0>${t.reset}`);return}if(i.completed){this.lines.push(`${t.gray}\u8BE5\u76EE\u6807\u5DF2\u5B8C\u6210\uFF1B\u8981\u5F00\u59CB\u65B0\u76EE\u6807\u8BF7\u7528 /goal <\u76EE\u6807\u63CF\u8FF0>\u3002${t.reset}`);return}if(this.busy){this.lines.push(`${t.yellow}\u672C\u8F6E\u5BF9\u8BDD\u8FDB\u884C\u4E2D \u2014\u2014 \u5148\u7B49\u5B83\u7ED3\u675F\uFF0C\u6216\u6309 Ctrl+C \u4E2D\u65AD\u540E\u518D\u7EE7\u7EED\u76EE\u6807\u3002${t.reset}`);return}this.runGoalLoop();return}if(this.busy){this.lines.push(`${t.yellow}\u672C\u8F6E\u5BF9\u8BDD\u8FDB\u884C\u4E2D \u2014\u2014 \u5148\u7B49\u5B83\u7ED3\u675F\uFF0C\u6216\u6309 Ctrl+C \u4E2D\u65AD\u540E\u518D\u8BBE\u5B9A\u76EE\u6807\u3002${t.reset}`);return}i&&!i.completed&&this.lines.push(`${t.gray}\u5DF2\u7528\u65B0\u76EE\u6807\u66FF\u6362\u539F\u76EE\u6807\u3002${t.reset}`),this.agent.setGoal(n),this.goalCancelled=!1,this.goalIterations=0,this.printGoalBanner(n),this.options.config.autoApprove||this.lines.push(`${t.gray} \xB7 \u5F53\u524D\u672A\u5F00\u542F\u81EA\u52A8\u6279\u51C6\uFF1A\u9047\u5230\u5199\u6587\u4EF6 / \u6267\u884C\u547D\u4EE4\u65F6\u4F1A\u8BF7\u6C42\u786E\u8BA4\uFF0C\u786E\u8BA4\u540E\u7EE7\u7EED\u81EA\u52A8\u63A8\u8FDB\u3002${t.reset}`),this.runGoalLoop()}printGoalBanner(e){let n=`${t.bgMagenta}${t.brightWhite}${t.bold} \u25CE GOAL ${t.reset}`,[s,...i]=e.split(`
|
|
750
751
|
`);this.lines.push(`${n} ${t.brightMagenta}${t.bold}${s}${t.reset}`);for(let o of i)this.lines.push(`${t.brightMagenta}${t.bold}\u2502${t.reset} ${o}`);this.lines.push(`${t.gray} \u76EE\u6807\u6A21\u5F0F\uFF1A\u7384\u732A\u4F1A\u6301\u7EED\u81EA\u52A8\u63A8\u8FDB\uFF0C\u76F4\u5230\u8C03\u7528 goal_complete \u58F0\u660E\u5B8C\u6210\u3002Ctrl+C \u4E2D\u65AD\uFF08\u76EE\u6807\u4FDD\u7559\uFF0C/goal continue \u53EF\u7EE7\u7EED\uFF09\u3002${t.reset}`),this.lines.push("")}printRunStatus(e){let n=e.kind==="blocked"?"\u53D7\u963B":e.kind==="needs_input"?"\u9700\u8981\u4F60\u7684\u51B3\u5B9A":"\u7F6E\u4FE1\u5EA6\u4F4E",s=e.kind==="low_confidence"?t.yellow:t.brightYellow;if(this.lines.push(`${s}\u26A0 ${n}\uFF1A${e.summary}${t.reset}`),e.detail)for(let i of e.detail.split(`
|
|
751
|
-
`).slice(0,6))this.lines.push(`${t.gray} ${i}${t.reset}`);e.kind==="needs_input"?this.lines.push(`${t.gray} \xB7 \u76F4\u63A5\u56DE\u590D\u4F60\u7684\u9009\u62E9\u5373\u53EF${this.agent.getGoal()?"\uFF1B\u4E4B\u540E /goal continue \u7EE7\u7EED\u76EE\u6807":""}${t.reset}`):e.kind==="blocked"&&this.lines.push(`${t.gray} \xB7 ${this.agent.getGoal()?"\u8865\u9F50\u6761\u4EF6\u540E /goal continue \u7EE7\u7EED\u76EE\u6807":"\u8865\u9F50\u6761\u4EF6\u540E\u76F4\u63A5\u56DE\u590D\u5373\u53EF"}${t.reset}`)}goalElapsedText(){let e=this.agent.getGoal();if(!e)return"\u2014";let n=Date.parse(e.startedAt);return Number.isFinite(n)?
|
|
752
|
-
`);this.lines.push(`${t.red}\u2717 ${y}${t.reset}`);for(let f of g)this.lines.push(`${t.gray} ${f}${t.reset}`)}finally{this.abortController=void 0;let m=this.markdown.flush();m.length>0&&this.lines.push(...m),this.streamingPreview="",this.lines.push("")}let h=this.agent.getGoal();if(h?.completed){s=!0;break}if(this.goalCancelled){i=!0;break}if(!h||h.text!==n)break;let d=this.agent.getRunStatus();if(d&&d.kind!=="low_confidence"){i=!0,this.printRunStatus(d);break}let p=this.agent.getAbortReason();if(u||p){i=!0,this.lines.push(`${t.yellow}\u26A0 \u76EE\u6807\u5DF2\u6682\u505C${p?`\uFF08${p}\uFF09`:""}\uFF1A\u81EA\u52A8\u7EE7\u7EED\u4F1A\u653E\u5927\u540C\u4E00\u4E2A\u95EE\u9898\uFF0C\u6545\u505C\u4E0B\u7B49\u4F60\u5904\u7406\u3002${t.reset}`);break}if(this.agent.getLastRunToolCallCount()===0?this.goalIdleRounds+=1:this.goalIdleRounds=0,this.goalIdleRounds>=
|
|
753
|
-
`))this.lines.push(`${t.gray} ${c}${t.reset}`);let l=this.agent.getRunStatus();l?.kind==="low_confidence"&&this.printRunStatus(l),this.agent.clearGoal()}else if(a&&!a.completed){let l=this.agent.getRunStatus();this.statusText=l?.kind==="needs_input"?"\u76EE\u6807\u7B49\u5F85\u51B3\u5B9A":l?.kind==="blocked"?"\u76EE\u6807\u53D7\u963B":"\u76EE\u6807\u5DF2\u6682\u505C",this.statusDetail=`\u7B2C ${this.goalIterations} \u8F6E \xB7 ${this.goalElapsedText()}`,o&&this.lines.push(`${t.yellow}\u5DF2\u8FBE\u76EE\u6807\u6A21\u5F0F\u7684\u5B89\u5168\u4E0A\u9650\uFF08${
|
|
752
|
+
`).slice(0,6))this.lines.push(`${t.gray} ${i}${t.reset}`);e.kind==="needs_input"?this.lines.push(`${t.gray} \xB7 \u76F4\u63A5\u56DE\u590D\u4F60\u7684\u9009\u62E9\u5373\u53EF${this.agent.getGoal()?"\uFF1B\u4E4B\u540E /goal continue \u7EE7\u7EED\u76EE\u6807":""}${t.reset}`):e.kind==="blocked"&&this.lines.push(`${t.gray} \xB7 ${this.agent.getGoal()?"\u8865\u9F50\u6761\u4EF6\u540E /goal continue \u7EE7\u7EED\u76EE\u6807":"\u8865\u9F50\u6761\u4EF6\u540E\u76F4\u63A5\u56DE\u590D\u5373\u53EF"}${t.reset}`)}goalElapsedText(){let e=this.agent.getGoal();if(!e)return"\u2014";let n=Date.parse(e.startedAt);return Number.isFinite(n)?sd(Date.now()-n):"\u2014"}async runGoalLoop(){let e=this.agent.getGoal();if(!e||e.completed||this.busy)return;let n=e.text;this.goalLoopActive=!0,this.goalCancelled=!1,this.goalIdleRounds=0,this.busy=!0,this.statusText="\u76EE\u6807\u6267\u884C\u4E2D",this.statusDetail="",this.scheduleRender();let s=!1,i=!1,o=!1;try{for(;;){let a=this.agent.getGoal();if(this.goalCancelled||!a||a.completed||a.text!==n)break;if(this.goalIterations>=$a){o=!0;break}this.goalIterations+=1;let l=this.goalIterations===1;l||this.lines.push(`${t.gray}\u25B7 \u76EE\u6807\u672A\u5B8C\u6210\uFF0C\u81EA\u52A8\u7EE7\u7EED\uFF08\u7B2C ${this.goalIterations} \u8F6E\uFF09${t.reset}`);let c=l?zo(n):Go(n,this.goalIterations-1,this.agent.getTodos());this.statusText=l?"\u76EE\u6807\u6267\u884C\u4E2D":"\u76EE\u6807\u81EA\u52A8\u7EE7\u7EED",this.statusDetail=`\u7B2C ${this.goalIterations} \u8F6E \xB7 ${this.goalElapsedText()}`,this.abortController=new AbortController,this.scheduleRender();let u=!1;try{await this.agent.run(c,this.abortController.signal)}catch(m){u=!0;let[y,...g]=ne(m).split(`
|
|
753
|
+
`);this.lines.push(`${t.red}\u2717 ${y}${t.reset}`);for(let f of g)this.lines.push(`${t.gray} ${f}${t.reset}`)}finally{this.abortController=void 0;let m=this.markdown.flush();m.length>0&&this.lines.push(...m),this.streamingPreview="",this.lines.push("")}let h=this.agent.getGoal();if(h?.completed){s=!0;break}if(this.goalCancelled){i=!0;break}if(!h||h.text!==n)break;let d=this.agent.getRunStatus();if(d&&d.kind!=="low_confidence"){i=!0,this.printRunStatus(d);break}let p=this.agent.getAbortReason();if(u||p){i=!0,this.lines.push(`${t.yellow}\u26A0 \u76EE\u6807\u5DF2\u6682\u505C${p?`\uFF08${p}\uFF09`:""}\uFF1A\u81EA\u52A8\u7EE7\u7EED\u4F1A\u653E\u5927\u540C\u4E00\u4E2A\u95EE\u9898\uFF0C\u6545\u505C\u4E0B\u7B49\u4F60\u5904\u7406\u3002${t.reset}`);break}if(this.agent.getLastRunToolCallCount()===0?this.goalIdleRounds+=1:this.goalIdleRounds=0,this.goalIdleRounds>=rd){i=!0,this.lines.push(`${t.yellow}\u26A0 \u76EE\u6807\u5DF2\u6682\u505C\uFF1A\u8FDE\u7EED ${this.goalIdleRounds} \u8F6E\u6CA1\u6709\u6267\u884C\u4EFB\u4F55\u5DE5\u5177\uFF08\u53EA\u8F93\u51FA\u6587\u5B57\uFF09\uFF0C\u81EA\u52A8\u7EE7\u7EED\u5DF2\u65E0\u610F\u4E49\u3002${t.reset}`),this.lines.push(`${t.gray} \xB7 \u8BF7\u8865\u5145\u66F4\u5177\u4F53\u7684\u8981\u6C42\u540E /goal continue\uFF0C\u6216 /goal off \u7ED3\u675F\u76EE\u6807\u3002${t.reset}`);break}}}finally{this.goalLoopActive=!1,this.busy=!1,this.abortController=void 0;let a=this.agent.getGoal();if(s&&a){if(this.statusText="\u5C31\u7EEA",this.statusDetail="",this.lines.push(`${t.brightGreen}${t.bold}\u2713 \u76EE\u6807\u5DF2\u5B8C\u6210${t.reset}`),this.lines.push(`${t.gray} \u5171\u6267\u884C ${this.goalIterations} \u8F6E \xB7 \u7528\u65F6 ${this.goalElapsedText()}\u3002${t.reset}`),a.summary)for(let c of a.summary.split(`
|
|
754
|
+
`))this.lines.push(`${t.gray} ${c}${t.reset}`);let l=this.agent.getRunStatus();l?.kind==="low_confidence"&&this.printRunStatus(l),this.agent.clearGoal()}else if(a&&!a.completed){let l=this.agent.getRunStatus();this.statusText=l?.kind==="needs_input"?"\u76EE\u6807\u7B49\u5F85\u51B3\u5B9A":l?.kind==="blocked"?"\u76EE\u6807\u53D7\u963B":"\u76EE\u6807\u5DF2\u6682\u505C",this.statusDetail=`\u7B2C ${this.goalIterations} \u8F6E \xB7 ${this.goalElapsedText()}`,o&&this.lines.push(`${t.yellow}\u5DF2\u8FBE\u76EE\u6807\u6A21\u5F0F\u7684\u5B89\u5168\u4E0A\u9650\uFF08${$a} \u8F6E\uFF09\uFF0C\u5DF2\u6682\u505C\u3002${t.reset}`),i&&!o&&this.lines.push(`${t.gray}\u76EE\u6807\u5DF2\u6682\u505C\uFF1A${a.text}${t.reset}`),this.lines.push(`${t.gray} \xB7 /goal continue \u7EE7\u7EED\u81EA\u52A8\u6267\u884C \xB7 /goal off \u6E05\u9664\u76EE\u6807 \xB7 /goal \u67E5\u770B\u72B6\u6001${t.reset}`)}else this.statusText="\u5C31\u7EEA",this.statusDetail="";this.scheduleRender()}}async handleMemoryCommand(e){let n=e.trim().toLowerCase(),s=js(this.cwd);if(!n||n==="status"){if(!s.hasLongTerm&&s.dailyFiles.length===0)this.lines.push(`${t.bold}\u9879\u76EE\u8BB0\u5FC6${t.reset} ${t.gray}\uFF08\u4E3A\u7A7A\uFF09${t.reset}`),this.lines.push(`${t.gray} \u76EE\u5F55\uFF1A${s.dir}${t.reset}`);else{let i=s.dailyFiles.length>0?`${s.dailyFiles.length} \u4EFD\uFF08${s.dailyFiles[0].name.replace(/\.md$/,"")} ~ ${s.dailyFiles[s.dailyFiles.length-1].name.replace(/\.md$/,"")}\uFF09`:"\u65E0";this.lines.push(`${t.bold}\u9879\u76EE\u8BB0\u5FC6${t.reset} ${t.gray}${s.dir}${t.reset}`),this.lines.push(`${t.gray} \u957F\u671F\u8BB0\u5FC6 MEMORY.md\uFF1A${t.reset}`+(s.hasLongTerm?`${s.longTermChars} \u5B57\u7B26 / ${Kt(s.longTermBytes)}`:`${t.gray}\u672A\u521B\u5EFA${t.reset}`)),this.lines.push(`${t.gray} \u6BCF\u65E5\u65E5\u5FD7\uFF1A${t.reset}${i}`),this.lines.push(`${t.gray} \u5408\u8BA1\uFF1A${t.reset}${Kt(s.totalBytes)}`)}this.lines.push(`${t.gray} \xB7 /memory clear \u6E05\u7A7A\u8BB0\u5FC6\uFF08\u9700\u518D\u6B21\u786E\u8BA4\uFF1B\u4E0D\u4F1A\u5220\u9664 ~/.xzh/sessions \u7684\u4F1A\u8BDD\u5B58\u6863\uFF09${t.reset}`);return}if(["clear","reset","rm","delete"].includes(n)){if(!s.hasLongTerm&&s.dailyFiles.length===0){this.lines.push(`${t.gray}\u9879\u76EE\u8BB0\u5FC6\u5DF2\u7ECF\u662F\u7A7A\u7684\uFF08${s.dir}\uFF09\u3002${t.reset}`);return}let i=[...s.hasLongTerm?[{name:"MEMORY.md",bytes:s.longTermBytes}]:[],...s.dailyFiles],o=8,a=i.slice(0,o).map(h=>` ${h.name} ${Kt(h.bytes)}`).join(`
|
|
754
755
|
`),l=i.length>o?`
|
|
755
756
|
\u2026\u8FD8\u6709 ${i.length-o} \u4E2A\u6587\u4EF6`:"";if(!await this.requestConfirm({tool:"memory_clear",title:"\u6E05\u7A7A\u9879\u76EE\u8BB0\u5FC6\uFF1F",detail:`\u76EE\u5F55\uFF1A${s.dir}
|
|
756
|
-
\u5C06\u5220\u9664 ${i.length} \u4E2A\u6587\u4EF6\uFF08\u5171 ${
|
|
757
|
+
\u5C06\u5220\u9664 ${i.length} \u4E2A\u6587\u4EF6\uFF08\u5171 ${Kt(s.totalBytes)}\uFF09\uFF1A
|
|
757
758
|
${a}${l}
|
|
758
759
|
|
|
759
760
|
\u26A0 \u6B64\u64CD\u4F5C\u4E0D\u53EF\u6062\u590D\uFF1B\u4E0D\u4F1A\u5220\u9664 ~/.xzh/sessions \u91CC\u7684\u4F1A\u8BDD\u5B58\u6863\u3002
|
|
760
|
-
\u6309 y\uFF08\u6216 \u2190 \u2192 \u5207\u5230\u300C\u5141\u8BB8\u300D\u518D\u56DE\u8F66\uFF09\u624D\u4F1A\u6267\u884C\u3002`,danger:!0},!1)){this.lines.push(`${t.gray}\u5DF2\u53D6\u6D88\uFF0C\u9879\u76EE\u8BB0\u5FC6\u672A\u6539\u52A8\u3002${t.reset}`);return}let u=
|
|
761
|
+
\u6309 y\uFF08\u6216 \u2190 \u2192 \u5207\u5230\u300C\u5141\u8BB8\u300D\u518D\u56DE\u8F66\uFF09\u624D\u4F1A\u6267\u884C\u3002`,danger:!0},!1)){this.lines.push(`${t.gray}\u5DF2\u53D6\u6D88\uFF0C\u9879\u76EE\u8BB0\u5FC6\u672A\u6539\u52A8\u3002${t.reset}`);return}let u=Fs(this.cwd);if(this.agent.reloadSystemPrompt(),u.files.length===0){this.lines.push(`${t.yellow}\u26A0 \u6CA1\u6709\u5220\u9664\u4EFB\u4F55\u6587\u4EF6\uFF08\u53EF\u80FD\u6CA1\u6709\u5199\u6743\u9650\uFF09\uFF1A${s.dir}${t.reset}`);return}this.lines.push(`${t.green}\u2713 \u5DF2\u6E05\u7A7A\u9879\u76EE\u8BB0\u5FC6\uFF1A\u5220\u9664 ${u.files.length} \u4E2A\u6587\u4EF6\uFF08${Kt(u.totalBytes)}\uFF09\u3002${t.reset}`),this.lines.push(`${t.gray} \u540E\u7EED\u8BF7\u6C42\u4E0D\u518D\u6CE8\u5165\u65E7\u8BB0\u5FC6\uFF1B\u4F1A\u8BDD\u5B58\u6863\u4ECD\u4FDD\u7559\uFF0C\u53EF\u7528 /resume \u627E\u56DE\u5386\u53F2\u5BF9\u8BDD\u3002${t.reset}`);return}this.lines.push(`${t.yellow}\u672A\u77E5\u7528\u6CD5\uFF1A/memory ${e}${t.reset}`),this.lines.push(`${t.gray} \xB7 /memory \u67E5\u770B\u73B0\u72B6 \xB7 /memory clear \u6E05\u7A7A\uFF08\u9700\u786E\u8BA4\uFF09${t.reset}`)}handleResumeCommand(e){let n=jr(this.cwd).filter(l=>l.file!==this.currentSessionFile);if(n.length===0){this.lines.push(`${t.gray}\u6CA1\u6709\u53EF\u6062\u590D\u7684\u5386\u53F2\u4F1A\u8BDD\u3002${t.reset}`);return}if(!e){this.lines.push(`${t.bold}\u5386\u53F2\u4F1A\u8BDD${t.reset} ${t.gray}(\u65B0\u7684\u5728\u524D\uFF0C\u8F93\u5165 /resume <\u7F16\u53F7> \u6062\u590D)${t.reset}`),n.slice(0,10).forEach((l,c)=>{let u=l.startedAt??"\u672A\u77E5\u65F6\u95F4";this.lines.push(` ${c+1}. ${t.cyan}${u}${t.reset} ${t.gray}\xB7 ${t.reset}${(l.bytes/1024).toFixed(1)} KB`)});return}let s=Number.parseInt(e,10)-1,i=Number.isInteger(s)?n[s]:void 0;if(!i){this.lines.push(`${t.yellow}\u65E0\u6548\u7F16\u53F7\uFF1A${e}\u3002\u5148\u8FD0\u884C /resume \u67E5\u770B\u5217\u8868\u3002${t.reset}`);return}let o=Fr(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=jt(this.cwd,B);this.currentSessionFile=a,this.agent.restoreSession(o,a),this.goalIterations=0,this.lines.push(`${t.green}\u2713 \u5DF2\u6062\u590D ${o.length} \u6761\u6D88\u606F\u7684\u5BF9\u8BDD\u5386\u53F2\u3002${t.reset}`,`${t.gray}\u7EE7\u7EED\u5BF9\u8BDD\u5373\u53EF\uFF1B\u6B64\u540E\u5185\u5BB9\u4F1A\u5199\u5165\u65B0\u7684\u4F1A\u8BDD\u6587\u4EF6\u3002${t.reset}`)}switchDirectory(e){let n=ee(e.trim()),s=He.isAbsolute(n)?n:He.resolve(this.cwd,n);if(!xe.existsSync(s)){this.lines.push(`${t.red}\u2717 \u76EE\u5F55\u4E0D\u5B58\u5728\uFF1A${s}${t.reset}`),this.scheduleRender();return}if(!xe.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=xe.realpathSync(s)}catch{}this.cwd=i;let o=er(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=jr(i).filter(u=>u.file!==this.currentSessionFile)[0],l=a?Fr(a.file):[],c=jt(i,B);this.currentSessionFile=c,this.agent.restoreSession(l,c),this.goalIterations=0,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{te(this.options.config)}catch{}process.stdout.write(this.mouseCapture?"\x1B[?1000h\x1B[?1002h\x1B[?1006h":"\x1B[?1000l\x1B[?1002l\x1B[?1006l"),this.lines.push(this.mouseCapture?`${t.gray}\u9F20\u6807\u6355\u83B7\uFF1A${t.reset}\u5F00 ${t.gray}\u2014 \u6EDA\u8F6E\u53EF\u6EDA\u52A8\u8F93\u51FA\u533A\u3002\u4F46\u53F3\u952E\u83DC\u5355\u4E0E\u539F\u751F\u6846\u9009\u4F1A\u88AB\u63A5\u7BA1\uFF0C\u8981\u9009\u6587\u672C\u8BF7\u6309\u4F4F ${t.reset}Shift${t.gray} \u62D6\u62FD\u3002\u518D\u8F93\u5165 ${t.reset}/mouse${t.gray} \u5173\u95ED\u3002${t.reset}`:`${t.gray}\u9F20\u6807\u6355\u83B7\uFF1A${t.reset}${t.brightGreen}\u5173${t.reset}${t.gray} \u2014 \u9F20\u6807\u5168\u90E8\u529F\u80FD\u53EF\u7528\uFF08\u53F3\u952E\u83DC\u5355\u3001\u6846\u9009\u590D\u5236\u3001\u6EDA\u8F6E\u7531\u7EC8\u7AEF\u5904\u7406\uFF09\u3002\u6EDA\u52A8\u8F93\u51FA\u533A\u8BF7\u7528 ${t.reset}PgUp/PgDn${t.gray}\uFF0C\u6216\u7528 ${t.reset}/mouse${t.gray} \u6362\u56DE\u6EDA\u8F6E\u3002${t.reset}`)}copyOutput(e){let n=e.trim().toLowerCase(),s=this.lines,i="";(n==="term"||n.startsWith("term "))&&(s=this.term.visibleLines(),i="\u7EC8\u7AEF\u8F93\u51FA ",n=n.slice(4).trim());let o=s.length,a,l;if(n==="all")a=s.slice(),l="\u5168\u90E8";else if(n==="last")a=s===this.lines?this.lines.slice(Math.min(this.lastAnswerStart,o)):s.slice(-30),l=s===this.lines?"\u6700\u8FD1\u4E00\u6B21\u5BF9\u8BDD":"\u6700\u8FD1 30 \u884C";else if(/^\d+-\d+$/.test(n)){let[d,p]=n.split("-"),m=Math.max(1,Number(d)),y=Math.min(o,Number(p));if(m>y){this.lines.push(`${t.yellow}\u884C\u53F7\u8303\u56F4\u65E0\u6548\uFF1A${n}${t.reset}${t.gray}\uFF08${i||"\u8F93\u51FA\u533A"}\u5F53\u524D ${o} \u884C\uFF09${t.reset}`);return}a=s.slice(m-1,y),l=`\u7B2C ${m}-${y} \u884C`}else{let d=/^\d+$/.test(n)?Number(n):30;a=s.slice(-Math.max(1,d)),l=`\u6700\u8FD1 ${Math.min(Math.max(1,d),o)} \u884C`}l=i+l;let c=ye(a.join(`
|
|
761
762
|
`)).trim();if(!c){let d=n==="last"&&o===0&&s===this.lines?"\uFF0C\u5C1A\u672A\u8FDB\u884C\u8FC7\u5BF9\u8BDD":"";this.lines.push(`${t.yellow}\u6CA1\u6709\u53EF\u590D\u5236\u7684\u5185\u5BB9${t.reset}${t.gray}\uFF08\u8F93\u51FA\u533A\u5F53\u524D ${o} \u884C${d}\uFF09\u3002${t.reset}`);return}let u=Buffer.from(c,"utf8").toString("base64");process.stdout.write(`\x1B]52;c;${u}\x07`);let h=c.split(`
|
|
762
|
-
`).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:n=>this.term.notice(`${t.gray}${n}${t.reset}`),onDeviceAttach:n=>{let s=n.kind==="autojs6"?"AutoJs6":"AutoX.js";this.handleNotice(`\u8BBE\u5907\u5DF2\u8FDE\u63A5\uFF1A${n.name}\uFF08${s}\uFF09`),this.term.notice(`${t.brightGreen}\u25CF${t.reset} \u8BBE\u5907\u5DF2\u8FDE\u63A5\uFF1A${t.bold}${n.name}${t.reset}${t.gray}\uFF08${s}\uFF09${t.reset}`)},onDeviceDetach:n=>{this.handleNotice(`\u8BBE\u5907\u5DF2\u65AD\u5F00\uFF1A${n.name}`),this.term.notice(`${t.yellow}\u25CB${t.reset} \u8BBE\u5907\u5DF2\u65AD\u5F00\uFF1A${n.name}`)},onLog:n=>this.term.notice(`${t.gray}[${n.device}]${t.reset} ${
|
|
763
|
-
`))i&&this.lines.push(`${t.gray} ${i}${t.reset}`)}async handleDeviceCommand(e){let[n,...s]=e.trim().split(/\s+/),i=s.join(" ").trim(),o=this.deviceBridge;switch(n){case"":case"status":{if(!o?.isRunning()&&!o?.status().autojs6){this.lines.push(`${t.yellow}\u8BBE\u5907\u6865\u672A\u542F\u52A8${t.reset}`),this.lines.push(`${t.gray} \xB7 \u8FDE\u63A5 AutoJs6\uFF08\u63A8\u8350\uFF09\uFF1A/device connect <\u624B\u673AIP>\uFF08\u624B\u673A\u672C\u673A\u8FD0\u884C\u65F6\u4E0D\u7528\u586B\uFF09${t.reset}`),this.lines.push(`${t.gray} \xB7 \u6216\u7B49 AutoX.js \u8FDE\u8FC7\u6765\uFF1A/device serve${t.reset}`);break}let a=o.status();this.lines.push(`${t.brightGreen}\u25CF${t.reset} \u8BBE\u5907\u6865\u8FD0\u884C\u4E2D ${t.gray}\u7AEF\u53E3 ${a.port}${t.reset}`),a.autojs6&&this.lines.push(`${t.gray} AutoJs6\uFF1A${t.reset}${a.autojs6.address} `+(a.autojs6.connected?`${t.brightGreen}\u5DF2\u8FDE\u63A5${t.reset}`:`${t.yellow}\u8FDE\u63A5\u4E2D/\u7B49\u5F85\u91CD\u8BD5${t.reset}`));for(let l of a.urls)this.lines.push(`${t.gray} \u624B\u673A\u7AEF AutoX.js \u586B\u5199\uFF1A${t.reset}${l}`);this.lines.push(`${t.gray} \u5DF2\u8FDE\u63A5\u8BBE\u5907\uFF1A${t.reset}${a.devices.length}`);for(let l of a.devices){let c=l.kind==="autojs6"?"AutoJs6":"AutoX.js";this.lines.push(` ${t.cyan}${l.name}${t.reset} ${t.gray}${l.id} \xB7 ${c}${t.reset}`)}break}case"connect":{if(o?.isRunning()||o?.status().autojs6){this.lines.push(`${t.yellow}\u8BBE\u5907\u6865\u5DF2\u5728\u8FD0\u884C${t.reset}${t.gray}\uFF08\u5148 /device stop \u518D\u8FDE\uFF09${t.reset}`);break}let a=mt(),l="",c=
|
|
764
|
-
${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} ${
|
|
765
|
-
`)[0].replace(/\*\*/g,"");this.lines.push(` ${t.cyan}${n.name.padEnd(16)}${t.reset} ${t.gray}${I(s,60)}${t.reset}`)}this.lines.push(`${t.gray} \u662F\u5426\u88AB\u8C03\u7528\u7531\u6A21\u578B\u51B3\u5B9A\uFF1B\u60F3\u5F3A\u8C03\u67D0\u4E2A\u5DE5\u5177\uFF0C\u53EF\u5199\u8FDB\u9879\u76EE\u89C4\u5219\uFF08.xuanzhu/rules.md\uFF09\u3002${t.reset}`),this.scheduleRender()}printHelp(){let e=[`${t.bold}\u7384\u732A \u5185\u7F6E\u547D\u4EE4${t.reset}`," /help \u663E\u793A\u672C\u5E2E\u52A9"," /clear \u6E05\u7A7A\u5C4F\u5E55"," /tools \u5217\u51FA\u672C\u8F6E\u53D1\u7ED9\u6A21\u578B\u7684\u5DE5\u5177\uFF08\u6392\u67E5\u300C\u67D0\u4E2A\u5DE5\u5177\u4F3C\u4E4E\u6CA1\u88AB\u8C03\u7528\u8FC7\u300D\uFF09"," /device \u624B\u673A\u8BBE\u5907\u6865\uFF08\u5148 /device serve \u6216 /device connect <\u624B\u673AIP>\uFF09"," \u5B50\u547D\u4EE4\uFF1Aconnect\uFF5Cserve\uFF5Cstop\uFF5Clist\uFF5Cpush <\u6587\u4EF6>\uFF5Crun <\u6587\u4EF6>\uFF5Clogs [N]"," \u4F53\u68C0\u4E0E\u622A\u56FE\u8BF7\u7528\u547D\u4EE4\u884C\uFF1Axzh device check / xzh device shot"," /copy [N|A-B|last|all] \u590D\u5236\u5DE6\u4FA7\u5BF9\u8BDD\u5230\u7CFB\u7EDF\u526A\u8D34\u677F\uFF08\u9ED8\u8BA4\u6700\u8FD1 30 \u884C\uFF09"," /copy term [N|A-B|all] \u590D\u5236\u53F3\u4FA7\u7EC8\u7AEF\u8F93\u51FA\uFF08\u6309\u680F\u53D6\u5185\u5BB9\uFF0C\u4E0D\u4F1A\u4E32\u680F\uFF09"," /image \u628A\u7CFB\u7EDF\u526A\u8D34\u677F\u91CC\u7684\u56FE\u7247\u52A0\u4E3A\u672C\u8F6E\u9644\u4EF6\uFF08\u540C Ctrl+V\uFF1B\u522B\u540D /paste\uFF09"," /mouse \u5207\u6362\u9F20\u6807\u6355\u83B7\uFF1A\u5F00\u542F\u540E\u53EF\u5728\u8F93\u51FA\u533A\u62D6\u62FD\u9009\u62E9\uFF08\u6309\u6574\u884C\uFF09"," /reset \u91CD\u7F6E\u5BF9\u8BDD\u4E0A\u4E0B\u6587"," /undo \u64A4\u9500\u7384\u732A\u5BF9\u6587\u4EF6\u7684\u6700\u8FD1\u4E00\u6B21\u4FEE\u6539\uFF08\u6539\u524D\u81EA\u52A8\u5907\u4EFD\uFF09"," /resume [\u7F16\u53F7] \u5217\u51FA / \u6062\u590D\u5386\u53F2\u4F1A\u8BDD\uFF08\u5BF9\u8BDD\u5386\u53F2\u4F1A\u81EA\u52A8\u4FDD\u5B58\uFF09"," /cwd \u663E\u793A\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55"," /switch <\u76EE\u5F55> \u5207\u6362\u9879\u76EE\uFF08\u8F7D\u5165\u8BE5\u9879\u76EE\u4E0A\u6B21\u4F1A\u8BDD\u63A5\u7740\u804A\uFF09"," /term \u663E\u793A/\u9690\u85CF\u53F3\u4FA7\u7EC8\u7AEF\u9762\u677F\uFF08/term clear \u6E05\u7A7A\u8F93\u51FA\uFF09"," /model [\u7F16\u53F7|id|\u6A21\u578B\u540D] \u67E5\u770B / \u5207\u6362\u5F53\u524D\u6A21\u578B\uFF08\u4E0D\u5E26\u53C2\u6570\uFF1A\u2191 \u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4\uFF09"," /goal <\u76EE\u6807> \u76EE\u6807\u6A21\u5F0F\uFF1A\u6301\u7EED\u81EA\u52A8\u6267\u884C\u76F4\u5230\u5B8C\u6210\uFF08Ctrl+C \u4E2D\u65AD\uFF1B/goal off \u6E05\u9664\uFF09"," /goal [status|continue|off] \u67E5\u770B\u5F53\u524D\u76EE\u6807 / \u7EE7\u7EED\u5DF2\u6682\u505C\u7684\u76EE\u6807 / \u6E05\u9664\u76EE\u6807"," /memory \u67E5\u770B\u9879\u76EE\u8BB0\u5FC6\uFF08\u957F\u671F\u8BB0\u5FC6 / \u6BCF\u65E5\u65E5\u5FD7\uFF09\uFF1B/memory clear \u6E05\u7A7A\uFF08\u9700\u786E\u8BA4\uFF09"," /init [--dry-run|--force] \u626B\u63CF\u9879\u76EE\u5E76\u751F\u6210 / \u8865\u5168 AGENTS.md \u4E0E docs/\uFF08\u5199\u5165\u524D\u786E\u8BA4\uFF09"," /auto [on|off] \u5207\u6362\u81EA\u52A8\u6279\u51C6\uFF08on\uFF1A\u6240\u6709\u5DE5\u5177\u76F4\u63A5\u6267\u884C\uFF0C\u5199\u5165\u914D\u7F6E\uFF09"," /intent [on|off] \u5207\u6362\u610F\u56FE\u5206\u6790\uFF08on\uFF1A\u6BCF\u6761\u6D88\u606F\u5148\u505A\u610F\u56FE\u5206\u6790\u518D\u5904\u7406\uFF0C\u5199\u5165\u914D\u7F6E\uFF09"," /exit \u9000\u51FA\u7384\u732A",`${t.bold}\u5FEB\u6377\u952E${t.reset}`,` Enter \u63D0\u4EA4 \xB7 ${t.bold}Alt+Enter${t.reset} \u6362\u884C\uFF08Ctrl/Shift+Enter \u89C6\u7EC8\u7AEF\u800C\u5B9A\uFF09`," \u2191/\u2193 \u5386\u53F2 \xB7 Ctrl+A/Ctrl+E \u884C\u9996/\u884C\u5C3E \xB7 PgUp/PgDn \u7FFB\u9875 \xB7 Shift+\u2191/\u2193 \u9010\u884C"," Home/End \u8DF3\u5230\u6700\u65E9/\u6700\u65B0",` ${t.gray}\u9F20\u6807${t.reset}\uFF1A\u6EDA\u8F6E\u6EDA\u52A8\u8F93\u51FA\u533A\uFF1B${t.bold}\u5728\u8F93\u51FA\u533A\u62D6\u62FD\u5373\u53EF\u9009\u4E2D\u5E76\u590D\u5236${t.reset}${t.gray}\uFF08\u677E\u5F00\u5199\u5165\u526A\u8D34\u677F\uFF09\u3002${t.reset}`,` \u60F3\u7528\u7EC8\u7AEF\u539F\u751F\u6846\u9009/\u53F3\u952E\u83DC\u5355\uFF1A${t.reset}Shift+\u62D6\u62FD${t.gray} \u7ED5\u8FC7\uFF0C\u6216 ${t.reset}/mouse${t.gray} \u4EA4\u8FD8\u9F20\u6807\uFF08\u6EDA\u52A8\u6539\u7528 PgUp/PgDn\uFF09\u3002${t.reset}`,` \u26A0 \u62D6\u9009\u662F\u77E9\u5F62\u9009\u62E9\uFF0C\u8DE8\u8FC7\u4E2D\u7F1D\u4F1A\u628A\u53E6\u4E00\u680F\u4E00\u8D77\u5E26\u8D70 \u2014\u2014\u8DE8\u680F\u5185\u5BB9\u8BF7\u6539\u7528 ${t.reset}/copy${t.gray}\uFF08\u5DE6\u680F\uFF09\u6216 ${t.reset}/copy term${t.gray}\uFF08\u53F3\u680F\uFF09\u3002${t.reset}`,` ${t.gray}\u7C98\u8D34${t.reset}\uFF1A\u652F\u6301\u591A\u884C\u6574\u6BB5\u7C98\u8D34\uFF08\u4E0D\u4F1A\u9010\u884C\u63D0\u4EA4\uFF09\uFF1B\u4E5F\u53EF\u7528 ${t.reset}/copy${t.gray} \u590D\u5236\u8F93\u51FA\u533A\u3002${t.reset}`,` ${t.bold}Ctrl+V${t.reset} ${t.gray}\u7C98\u8D34\u56FE\u7247\uFF1A\u8BFB\u53D6\u7CFB\u7EDF\u526A\u8D34\u677F\u91CC\u7684\u56FE\u7247\u4F5C\u4E3A\u9644\u4EF6\uFF08\u8F93\u5165\u6846\u663E\u793A${t.reset}[\u56FE\u7247N]${t.gray}\uFF0C\u56DE\u8F66\u53D1\u9001\uFF09\u3002${t.reset}`,` ${t.gray}\u7EC8\u7AEF\u53EA\u4F1A\u4F20\u6587\u672C\uFF0C\u56FE\u7247\u62FF\u4E0D\u5230\uFF0C\u56E0\u6B64\u7531\u7384\u732A\u4E3B\u52A8\u8BFB\u526A\u8D34\u677F\uFF1A${t.reset}`,` ${t.gray}Linux \u7F3A ${t.reset}wl-clipboard${t.gray}/${t.reset}xclip${t.gray} \u65F6\u4F1A\u8BE2\u95EE\u540E\u81EA\u52A8\u5B89\u88C5\uFF1BWindows \u7528\u5185\u7F6E PowerShell\uFF1BmacOS \u7528 ${t.reset}pngpaste${t.gray} \u6216\u5185\u7F6E osascript\u3002${t.reset}`,` ${t.gray}\u82E5\u672C\u7EC8\u7AEF\u628A Ctrl+V \u5F53\u81EA\u5DF1\u7684\u7C98\u8D34\u952E\uFF08\u5982 Windows Terminal\uFF09\uFF0C\u6539\u7528 ${t.reset}/image${t.gray}\u3002${t.reset}`,` ${t.gray}\u9700\u8981\u6A21\u578B\u652F\u6301\u89C6\u89C9\uFF08glm-4v / qwen-vl / gpt-4o / claude \u7B49\uFF09\uFF1B\u53EF\u7528 ${t.reset}xzh model vision <id> on${t.gray} \u624B\u52A8\u6807\u6CE8\u3002${t.reset}`," Shift+Tab \u5207\u6362\u7126\u70B9\uFF08\u5BF9\u8BDD \u21C4 \u53F3\u4FA7\u7EC8\u7AEF\uFF09\xB7 \u9F20\u6807\u70B9\u51FB\u4EA6\u53EF"," Ctrl+C \u4E2D\u65AD\u4EFB\u52A1 / \u6E05\u7A7A\u8F93\u5165 / \u9000\u51FA\uFF08\u7A7A\u95F2\u4E14\u8F93\u5165\u4E3A\u7A7A\u65F6\u9000\u51FA\uFF09"," Ctrl+D \u7ED3\u675F\u672C\u8F6E\u6B63\u5728\u8FDB\u884C\u7684\u5BF9\u8BDD \xB7 \u4EFB\u4F55\u60C5\u51B5\u4E0B\u90FD\u4E0D\u4F1A\u9000\u51FA\u7384\u732A"," Ctrl+L \u6E05\u5C4F",` \u6CE8\uFF1A${t.bold}Alt+Enter${t.reset} \u8D70\u7EC8\u7AEF\u539F\u751F\u7F16\u7801\uFF0C\u5404\u7EC8\u7AEF\u901A\u7528\uFF1B`," Ctrl/Shift+Enter \u9700\u8981\u7EC8\u7AEF\u652F\u6301\u6269\u5C55\u952E\u76D8\u534F\u8BAE\uFF0C\u90E8\u5206\u7EC8\u7AEF\uFF08\u5C24\u5176 IDE \u5185\u7F6E\uFF09\u4E0D\u652F\u6301\u3002",`${t.bold}\u53F3\u4FA7\u7EC8\u7AEF${t.reset}`," Enter \u6267\u884C\u547D\u4EE4 \xB7 \u2191/\u2193 \u547D\u4EE4\u5386\u53F2 \xB7 Ctrl+C / Ctrl+D \u4E2D\u65AD\u8FD0\u884C\u4E2D\u7684\u547D\u4EE4 \xB7 Ctrl+L \u6E05\u7A7A"," PgUp/PgDn / Shift+\u2191\u2193 / Home/End \u56DE\u770B\u5386\u53F2\u8F93\u51FA\uFF08\u6EDA\u52A8\u4E0D\u5F71\u54CD\u6B63\u5728\u8FD0\u884C\u7684\u547D\u4EE4\uFF09"," \u547D\u4EE4\u5728\u5F53\u524D\u9879\u76EE\u76EE\u5F55\u4E0B\u6267\u884C\uFF1Bcd \u751F\u6548\uFF08\u9762\u677F\u81EA\u884C\u7EF4\u62A4\u5DE5\u4F5C\u76EE\u5F55\uFF09"];this.lines.push(...e.map(n=>`${t.gray}${n}${t.reset}`)),this.lines.push("")}buildHeaderLines(e){let n=I(`${this.modelProviderLabel} / ${this.modelLabel}`,Math.max(10,e-8)),s=I(this.cwd,Math.max(10,e-8)),i=`${t.gray}${"\u2500".repeat(Math.max(0,e))}${t.reset}`,o=this.agent.getGoal(),a=o?o.completed?"\u5DF2\u5B8C\u6210":this.goalLoopActive?`\u6267\u884C\u4E2D \xB7 \u7B2C ${this.goalIterations} \u8F6E \xB7 ${this.goalElapsedText()}`:`\u5DF2\u6682\u505C \xB7 \u7B2C ${this.goalIterations} \u8F6E \xB7 ${this.goalElapsedText()}`:"",l=o?`${t.gray} \u76EE\u6807\uFF1A${t.reset}${t.brightMagenta}${I(o.text.replace(/\s+/g," "),Math.max(10,e-18))}${t.reset}${t.gray}\uFF08${a}\uFF09${t.reset}`:null;return{info:[`${t.brightMagenta}${t.bold} \u7384\u732A XuanZhu${t.reset} ${t.gray}v${j} \xB7 \u7EC8\u7AEF AI \u7F16\u7801 Agent${t.reset}`,`${t.gray} \u6A21\u578B\uFF1A${t.reset}${n}${t.reset}`,`${t.gray} \u76EE\u5F55\uFF1A${t.reset}${s}${t.reset}`,...l?[l]:[],...this.todoHeaderLines(e),`${t.gray} \u8F93\u5165 ${t.reset}${t.brightGreen}/help${t.reset}${t.gray} \u67E5\u770B\u547D\u4EE4\u4E0E\u5FEB\u6377\u952E${t.reset}`,`${t.gray} ${t.reset}Ctrl+D${t.gray} \u7ED3\u675F\u672C\u8F6E\u5BF9\u8BDD\uFF08\u4E0D\u9000\u51FA\uFF09\xB7 ${t.reset}Ctrl+C${t.gray} \u4E2D\u65AD/\u6E05\u7A7A/\u9000\u51FA${t.reset}`,`${t.gray} ${t.reset}Shift+Tab${t.gray} \u5207\u7EC8\u7AEF \xB7 ${t.reset}PgUp${t.gray}/\u6EDA\u8F6E\u56DE\u770B\u5386\u53F2${t.reset}`],divider:i}}todoHeaderLines(e){if(this.todoItems.length===0)return[];let n=this.todoItems.filter(u=>u.status==="completed").length,s=this.todoItems.filter(u=>u.status==="cancelled").length,i=this.todoItems.length-s,o=`\u4EFB\u52A1 ${n}/${i}`+(s>0?` \xB7 \u53D6\u6D88 ${s}`:""),a=[`${t.gray} ${t.reset}${t.bold}${o}${t.reset}`],l=this.todoItems.filter(u=>u.status==="in_progress"||u.status==="pending"),c=3;for(let u of l.slice(0,c)){let h=u.status==="in_progress",d=h?`${t.brightCyan}\u25B8${t.reset}`:`${t.gray}\xB7${t.reset}`,p=I(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),n=Math.max(8,process.stdout.rows||24),s=this.resolveTermWidth(e),i=s>0?Math.max(20,e-s-1):e;this.lastLeftWidth=i;let o=this.pendingConfirm?this.layoutConfirm(i):this.pendingSelect?this.layoutSelect(i):this.layoutInput(i),a=o.lines.length,l=1,c=this.buildHeaderLines(i),u=Math.max(1,Math.floor(n/3)),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,n-p-a-l),y=this.physicalLines(i),g=y.length;this.lastPhysicalCount>=0&&this.scrollOffset>0&&g>this.lastPhysicalCount&&(this.scrollOffset+=g-this.lastPhysicalCount),this.lastPhysicalCount=g;let f=Math.max(0,g-m);this.scrollOffset>f&&(this.scrollOffset=f);let b=g-this.scrollOffset,$=Math.max(0,b-m),E=y.slice($,b);for(;E.length<m;)E.unshift("");let Y=n-1,_=Math.max(0,m-(b-$)),C=this.lastPhysicalMap;this.screenToLogical=[];for(let x=0;x<Y;x++){let w=x-p;if(w<0||w>=m){this.screenToLogical.push(void 0);continue}let O=$+w-_,be=O>=0&&O<C.length?C[O]:-1;this.screenToLogical.push(be>=0?be:void 0)}if(this.selectionAnchor!==void 0&&this.selectionHead!==void 0){let x=Math.min(this.selectionAnchor,this.selectionHead),w=Math.max(this.selectionAnchor,this.selectionHead);for(let O=0;O<E.length;O++){let be=$+O-_;if(be<0||be>=C.length)continue;let R=C[be];R>=x&&R<=w&&(E[O]=`${t.inverse}${E[O]}${t.reset}`)}}let F=s>0?this.buildTermPanel(s,Y):{rows:[],cursorRow:0,cursorCol:0},z=p+m,T=ue.hide;for(let x=0;x<Y;x++){let w;x<p?w=d[x]:x<p+m?w=E[x-p]:x<z+a?w=o.lines[x-z]:w="",T+=ue.to(x+1,1)+"\x1B[2K",s>0?T+=Lt(I(w,i),i)+`${t.gray}\u2502${t.reset}`+I(F.rows[x]??"",s):T+=Lt(I(w,e),e)}if(T+=ue.to(n,1)+"\x1B[2K"+this.renderStatus(e),this.pendingConfirm||this.pendingSelect)T+=ue.hide;else if(this.termFocus&&s>0&&F.cursorRow>0){let x=F.cursorRow,w=Math.min(e,i+1+F.cursorCol);T+=ue.to(x,w)+ue.show}else{let x=z+o.cursorRow+1,w=Math.min(i,o.cursorCol+1);T+=ue.to(x,w)+ue.show}process.stdout.write(T)}resolveTermWidth(e){return!this.termVisible||e<80?0:Math.min(64,Math.max(32,Math.floor(e*.4)))}buildTermPanel(e,n){if(e<=0||n<=0)return{rows:[],cursorRow:0,cursorCol:0};let s=[],i=this.term.isRunning(),o=this.termFocus?`${t.bgBlue}${t.brightWhite} \u7EC8\u7AEF ${t.reset}`:`${t.gray} \u7EC8\u7AEF ${t.reset}`,a=i?`${t.brightYellow} \u25CF \u8FD0\u884C\u4E2D${t.reset}`:"",l=G(o)+G(a),c=Math.max(6,e-l);s.push(`${o}${t.gray}${I(this.term.getCwd(),c)}${t.reset}${a}`);let u=Math.max(1,n-3),h=[];for(let T of this.term.visibleLines())h.push(...ft(T,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),y=h.slice(m,p);for(;y.length<u;)y.unshift("");s.push(...y),s.push(`${t.gray}${"\u2500".repeat(e)}${t.reset}`);let g=2,f=Math.max(1,e-g),b=Array.from(this.termInput),$=b.length;{let T=0;for(let x=0;x<b.length;x++){if(T>=this.termInputCursor){$=x;break}T+=b[x].length}}let E=0;for(;E<$&&G(b.slice(E,$).join(""))>f;)E++;let Y=b.slice(E).join(""),_=G(b.slice(E,$).join("")),C=this.termFocus?`${t.brightCyan}\u276F${t.reset} `:`${t.gray}\u276F${t.reset} `;s.push(I(`${C}${Y}`,e));let F=s.length,z=Math.min(e,g+_+1);for(;s.length<n;)s.push("");return{rows:s.slice(0,n),cursorRow:F,cursorCol:z}}physicalLines(e){let n=[],s=[];for(let i=0;i<this.lines.length;i++){let o=ft(this.lines[i],e);n.push(...o);for(let a=0;a<o.length;a++)s.push(i)}if(this.streamingPreview){let i=ft(this.streamingPreview,e);n.push(...i);for(let o=0;o<i.length;o++)s.push(-1)}return this.lastPhysicalMap=s,n}renderStatus(e){let n=" \u7384\u732A ",s=this.autoApprove?"\u26A1auto \xB7 ":"",i=this.intentEnabled?"\u2301intent \xB7 ":"",o=this.agent.getGoal()?"\u25CEgoal \xB7 ":"",a=this.termVisible?this.termFocus?"\u7EC8\u7AEF\u25B8 ":"\u5BF9\u8BDD\u25B8 ":"",l=this.scrollOffset>0?`${t.brightYellow}\u2191${this.scrollOffset}${t.reset}${t.bgBlue} `:"",c=this.termScroll>0?`${t.brightYellow}\u21E1${this.termScroll}${t.reset}${t.bgBlue} `:"",u=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} `:"",h=` ${s}${i}${o}${a}${u}${l}${c}${this.modelLabel} \u2502 ${this.statusText}${this.statusDetail?" \xB7 "+this.statusDetail:""} `,d=` ${this.cwd} `,p=this.busy?`${t.brightYellow}\u25CF \u8FD0\u884C\u4E2D${t.reset}${t.bgBlue}`:"",m=G(n)+G(h)+G(p)+6,y=`${t.bgBlue}${t.brightWhite}${n}${t.reset}${t.bgBlue}${t.brightWhite}${p}${t.bgBlue}${t.gray}${I(d,Math.max(0,e-m))}${t.bgBlue}${t.brightWhite}${h}${t.reset}`,g=G(y);return g<e?y+=`${t.bgBlue}${" ".repeat(e-g)}${t.reset}`:g>e&&(y=`${I(y,e)}${t.reset}`),y}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=G("\u276F "),h=0,d=u;for(let p=0;p<o.length;p++){let m=o[p];if(m===`
|
|
766
|
-
`){l.push(c),c=" ",u=
|
|
767
|
-
`).slice(0,12);for(let u of a)for(let h of ft(`${t.gray}${u}${t.reset}`,e-4))i.push(` ${h}`);let l=n.selected?`${t.inverse}${t.green} \u5141\u8BB8 ${t.reset}`:`${t.gray} \u5141\u8BB8 ${t.reset}`,c=n.selected?`${t.gray} \u62D2\u7EDD ${t.reset}`:`${t.inverse}${t.yellow} \u62D2\u7EDD ${t.reset}`;return i.push(` ${l} ${c} ${t.gray}\u2190 \u2192 \u5207\u6362 \xB7 Enter \u786E\u8BA4 \xB7 y/n \u5FEB\u6377${t.reset}`),{lines:i,cursorRow:0,cursorCol:0}}layoutSelect(e){let n=this.pendingSelect,s=[];if(s.push(`${t.bold}${n.title}${t.reset}`),n.detail)for(let c of ft(`${t.gray}${n.detail}${t.reset}`,e-4))s.push(` ${c}`);let i=10,o=n.options.length,{start:a,end:l}=
|
|
768
|
-
`:"\r";case 9:return n&&(e&
|
|
763
|
+
`).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:n=>this.term.notice(`${t.gray}${n}${t.reset}`),onDeviceAttach:n=>{let s=n.kind==="autojs6"?"AutoJs6":"AutoX.js";this.handleNotice(`\u8BBE\u5907\u5DF2\u8FDE\u63A5\uFF1A${n.name}\uFF08${s}\uFF09`),this.term.notice(`${t.brightGreen}\u25CF${t.reset} \u8BBE\u5907\u5DF2\u8FDE\u63A5\uFF1A${t.bold}${n.name}${t.reset}${t.gray}\uFF08${s}\uFF09${t.reset}`)},onDeviceDetach:n=>{this.handleNotice(`\u8BBE\u5907\u5DF2\u65AD\u5F00\uFF1A${n.name}`),this.term.notice(`${t.yellow}\u25CB${t.reset} \u8BBE\u5907\u5DF2\u65AD\u5F00\uFF1A${n.name}`)},onLog:n=>this.term.notice(`${t.gray}[${n.device}]${t.reset} ${ye(n.text)}`)})}pushDeviceSetupGuide(e){let n=mn(),s=gn({where:mt()?"phone":"pc",abi:n.abi,address:e,localApk:fn(n.abi)});this.lines.push(`${t.yellow}\u9700\u8981\u5148\u88C5 AutoJs6${t.reset}${t.gray}\uFF08${n.detail}\uFF09${t.reset}`);for(let i of s.split(`
|
|
764
|
+
`))i&&this.lines.push(`${t.gray} ${i}${t.reset}`)}async handleDeviceCommand(e){let[n,...s]=e.trim().split(/\s+/),i=s.join(" ").trim(),o=this.deviceBridge;switch(n){case"":case"status":{if(!o?.isRunning()&&!o?.status().autojs6){this.lines.push(`${t.yellow}\u8BBE\u5907\u6865\u672A\u542F\u52A8${t.reset}`),this.lines.push(`${t.gray} \xB7 \u8FDE\u63A5 AutoJs6\uFF08\u63A8\u8350\uFF09\uFF1A/device connect <\u624B\u673AIP>\uFF08\u624B\u673A\u672C\u673A\u8FD0\u884C\u65F6\u4E0D\u7528\u586B\uFF09${t.reset}`),this.lines.push(`${t.gray} \xB7 \u6216\u7B49 AutoX.js \u8FDE\u8FC7\u6765\uFF1A/device serve${t.reset}`);break}let a=o.status();this.lines.push(`${t.brightGreen}\u25CF${t.reset} \u8BBE\u5907\u6865\u8FD0\u884C\u4E2D ${t.gray}\u7AEF\u53E3 ${a.port}${t.reset}`),a.autojs6&&this.lines.push(`${t.gray} AutoJs6\uFF1A${t.reset}${a.autojs6.address} `+(a.autojs6.connected?`${t.brightGreen}\u5DF2\u8FDE\u63A5${t.reset}`:`${t.yellow}\u8FDE\u63A5\u4E2D/\u7B49\u5F85\u91CD\u8BD5${t.reset}`));for(let l of a.urls)this.lines.push(`${t.gray} \u624B\u673A\u7AEF AutoX.js \u586B\u5199\uFF1A${t.reset}${l}`);this.lines.push(`${t.gray} \u5DF2\u8FDE\u63A5\u8BBE\u5907\uFF1A${t.reset}${a.devices.length}`);for(let l of a.devices){let c=l.kind==="autojs6"?"AutoJs6":"AutoX.js";this.lines.push(` ${t.cyan}${l.name}${t.reset} ${t.gray}${l.id} \xB7 ${c}${t.reset}`)}break}case"connect":{if(o?.isRunning()||o?.status().autojs6){this.lines.push(`${t.yellow}\u8BBE\u5907\u6865\u5DF2\u5728\u8FD0\u884C${t.reset}${t.gray}\uFF08\u5148 /device stop \u518D\u8FDE\uFF09${t.reset}`);break}let a=mt(),l="",c=re;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 ${re}\uFF09${t.reset}`),this.pushDeviceSetupGuide();break}let u=this.createDeviceBridge(ze());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):ze(),l=this.createDeviceBridge(Number.isFinite(a)&&a>0?a:ze());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 ${Te}\uFF09${t.reset}`);for(let c of l.listenerUrls())this.lines.push(`${t.gray} \u624B\u673A AutoJs6\u300C\u5BA2\u6237\u7AEF\u6A21\u5F0F\u300D\u586B\uFF1A${t.reset}${t.brightGreen}${c}${t.reset}`)}catch(c){this.lines.push(`${t.yellow}\u26A0 AutoJs6 \u76D1\u542C\u672A\u542F\u52A8${t.reset}${t.gray}\uFF1A${c instanceof Error?c.message:String(c)}${t.reset}`)}this.lines.push(`${t.gray} \u811A\u672C\u65E5\u5FD7\u663E\u793A\u5728\u53F3\u4FA7\u7EC8\u7AEF\u9762\u677F\uFF1B\u63A8\u9001\u811A\u672C\uFF1A/device run <\u6587\u4EF6>\uFF08\u6216 /device push\uFF09\u3002${t.reset}`),this.lines.push(`${t.gray} \u505C\u6B62\uFF1A/device stop${t.reset}`);break}case"stop":{if(!o?.isRunning()){this.lines.push(`${t.gray}\u8BBE\u5907\u6865\u672A\u5728\u8FD0\u884C\u3002${t.reset}`);break}await o.stop(),this.deviceBridge=void 0,this.agent.setDeviceBridge(void 0),this.lines.push(`${t.gray}\u8BBE\u5907\u6865\u5DF2\u505C\u6B62\u3002${t.reset}`);break}case"list":case"devices":{if(!o?.isRunning()){this.lines.push(`${t.yellow}\u8BBE\u5907\u6865\u672A\u542F\u52A8${t.reset}${t.gray}\uFF08/device serve\uFF09${t.reset}`);break}let a=o.listDevices();if(a.length===0){this.lines.push(`${t.gray}\u5F53\u524D\u6CA1\u6709\u5DF2\u8FDE\u63A5\u7684\u8BBE\u5907\u3002${t.reset}`);break}this.lines.push(`${t.gray}\u5DF2\u8FDE\u63A5\u8BBE\u5907\uFF08${a.length}\uFF09\uFF1A${t.reset}`);for(let l of a)this.lines.push(` ${t.cyan}${l.name}${t.reset} ${t.gray}${l.id} \xB7 versionCode ${l.appVersionCode}${t.reset}`);break}case"push":case"run":{if(!i){this.lines.push(`${t.gray}\u7528\u6CD5\uFF1A/device ${n} <\u811A\u672C\u6587\u4EF6>${t.reset}`);break}if(!o?.isRunning()){this.lines.push(`${t.yellow}\u8BBE\u5907\u6865\u672A\u542F\u52A8${t.reset}${t.gray}\uFF08/device serve\uFF09${t.reset}`);break}let a=n==="run"?o.runScript(i):o.pushScript(i);if(!a.ok){this.lines.push(`${t.red}\u2717 ${a.message}${t.reset}`);break}this.lines.push(`${t.green}\u2713${t.reset} ${n==="run"?"\u5DF2\u63A8\u9001\u5230\u8BBE\u5907\u5E76\u5F00\u59CB\u8FD0\u884C":"\u5DF2\u4FDD\u5B58\u5230\u8BBE\u5907"}\uFF1A${a.path}
|
|
765
|
+
${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} ${ye(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=Pn();this.lines.push(`${t.bold}\u53D1\u7ED9\u6A21\u578B\u7684\u5DE5\u5177\uFF08\u5171 ${e.length} \u4E2A\uFF09${t.reset}${t.gray}\uFF08\u6BCF\u6B21\u8BF7\u6C42\u90FD\u4F1A\u5E26\u4E0A\uFF0C\u65E0\u5F00\u5173\uFF09${t.reset}`);for(let n of e){let s=n.description.split(`
|
|
766
|
+
`)[0].replace(/\*\*/g,"");this.lines.push(` ${t.cyan}${n.name.padEnd(16)}${t.reset} ${t.gray}${O(s,60)}${t.reset}`)}this.lines.push(`${t.gray} \u662F\u5426\u88AB\u8C03\u7528\u7531\u6A21\u578B\u51B3\u5B9A\uFF1B\u60F3\u5F3A\u8C03\u67D0\u4E2A\u5DE5\u5177\uFF0C\u53EF\u5199\u8FDB\u9879\u76EE\u89C4\u5219\uFF08.xuanzhu/rules.md\uFF09\u3002${t.reset}`),this.scheduleRender()}printHelp(){let e=[`${t.bold}\u7384\u732A \u5185\u7F6E\u547D\u4EE4${t.reset}`," /help \u663E\u793A\u672C\u5E2E\u52A9"," /clear \u6E05\u7A7A\u5C4F\u5E55"," /tools \u5217\u51FA\u672C\u8F6E\u53D1\u7ED9\u6A21\u578B\u7684\u5DE5\u5177\uFF08\u6392\u67E5\u300C\u67D0\u4E2A\u5DE5\u5177\u4F3C\u4E4E\u6CA1\u88AB\u8C03\u7528\u8FC7\u300D\uFF09"," /device \u624B\u673A\u8BBE\u5907\u6865\uFF08\u5148 /device serve \u6216 /device connect <\u624B\u673AIP>\uFF09"," \u5B50\u547D\u4EE4\uFF1Aconnect\uFF5Cserve\uFF5Cstop\uFF5Clist\uFF5Cpush <\u6587\u4EF6>\uFF5Crun <\u6587\u4EF6>\uFF5Clogs [N]"," \u4F53\u68C0\u4E0E\u622A\u56FE\u8BF7\u7528\u547D\u4EE4\u884C\uFF1Axzh device check / xzh device shot"," /copy [N|A-B|last|all] \u590D\u5236\u5DE6\u4FA7\u5BF9\u8BDD\u5230\u7CFB\u7EDF\u526A\u8D34\u677F\uFF08\u9ED8\u8BA4\u6700\u8FD1 30 \u884C\uFF09"," /copy term [N|A-B|all] \u590D\u5236\u53F3\u4FA7\u7EC8\u7AEF\u8F93\u51FA\uFF08\u6309\u680F\u53D6\u5185\u5BB9\uFF0C\u4E0D\u4F1A\u4E32\u680F\uFF09"," /image \u628A\u7CFB\u7EDF\u526A\u8D34\u677F\u91CC\u7684\u56FE\u7247\u52A0\u4E3A\u672C\u8F6E\u9644\u4EF6\uFF08\u540C Ctrl+V\uFF1B\u522B\u540D /paste\uFF09"," /mouse \u5207\u6362\u9F20\u6807\u6355\u83B7\uFF1A\u5F00\u542F\u540E\u53EF\u5728\u8F93\u51FA\u533A\u62D6\u62FD\u9009\u62E9\uFF08\u6309\u6574\u884C\uFF09"," /reset \u91CD\u7F6E\u5BF9\u8BDD\u4E0A\u4E0B\u6587"," /undo \u64A4\u9500\u7384\u732A\u5BF9\u6587\u4EF6\u7684\u6700\u8FD1\u4E00\u6B21\u4FEE\u6539\uFF08\u6539\u524D\u81EA\u52A8\u5907\u4EFD\uFF09"," /resume [\u7F16\u53F7] \u5217\u51FA / \u6062\u590D\u5386\u53F2\u4F1A\u8BDD\uFF08\u5BF9\u8BDD\u5386\u53F2\u4F1A\u81EA\u52A8\u4FDD\u5B58\uFF09"," /cwd \u663E\u793A\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55"," /switch <\u76EE\u5F55> \u5207\u6362\u9879\u76EE\uFF08\u8F7D\u5165\u8BE5\u9879\u76EE\u4E0A\u6B21\u4F1A\u8BDD\u63A5\u7740\u804A\uFF09"," /term \u663E\u793A/\u9690\u85CF\u53F3\u4FA7\u7EC8\u7AEF\u9762\u677F\uFF08/term clear \u6E05\u7A7A\u8F93\u51FA\uFF09"," /model [\u7F16\u53F7|id|\u6A21\u578B\u540D] \u67E5\u770B / \u5207\u6362\u5F53\u524D\u6A21\u578B\uFF08\u4E0D\u5E26\u53C2\u6570\uFF1A\u2191 \u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4\uFF09"," /goal <\u76EE\u6807> \u76EE\u6807\u6A21\u5F0F\uFF1A\u6301\u7EED\u81EA\u52A8\u6267\u884C\u76F4\u5230\u5B8C\u6210\uFF08Ctrl+C \u4E2D\u65AD\uFF1B/goal off \u6E05\u9664\uFF09"," /goal [status|continue|off] \u67E5\u770B\u5F53\u524D\u76EE\u6807 / \u7EE7\u7EED\u5DF2\u6682\u505C\u7684\u76EE\u6807 / \u6E05\u9664\u76EE\u6807"," /memory \u67E5\u770B\u9879\u76EE\u8BB0\u5FC6\uFF08\u957F\u671F\u8BB0\u5FC6 / \u6BCF\u65E5\u65E5\u5FD7\uFF09\uFF1B/memory clear \u6E05\u7A7A\uFF08\u9700\u786E\u8BA4\uFF09"," /init [--dry-run|--force] \u626B\u63CF\u9879\u76EE\u5E76\u751F\u6210 / \u8865\u5168 AGENTS.md \u4E0E docs/\uFF08\u5199\u5165\u524D\u786E\u8BA4\uFF09"," /auto [on|off] \u5207\u6362\u81EA\u52A8\u6279\u51C6\uFF08on\uFF1A\u6240\u6709\u5DE5\u5177\u76F4\u63A5\u6267\u884C\uFF0C\u5199\u5165\u914D\u7F6E\uFF09"," /intent [on|off] \u5207\u6362\u610F\u56FE\u5206\u6790\uFF08on\uFF1A\u6BCF\u6761\u6D88\u606F\u5148\u505A\u610F\u56FE\u5206\u6790\u518D\u5904\u7406\uFF0C\u5199\u5165\u914D\u7F6E\uFF09"," /exit \u9000\u51FA\u7384\u732A",`${t.bold}\u5FEB\u6377\u952E${t.reset}`,` Enter \u63D0\u4EA4 \xB7 ${t.bold}Alt+Enter${t.reset} \u6362\u884C\uFF08Ctrl/Shift+Enter \u89C6\u7EC8\u7AEF\u800C\u5B9A\uFF09`," \u2191/\u2193 \u5386\u53F2 \xB7 Ctrl+A/Ctrl+E \u884C\u9996/\u884C\u5C3E \xB7 PgUp/PgDn \u7FFB\u9875 \xB7 Shift+\u2191/\u2193 \u9010\u884C"," Home/End \u8DF3\u5230\u6700\u65E9/\u6700\u65B0",` ${t.gray}\u9F20\u6807${t.reset}\uFF1A\u6EDA\u8F6E\u6EDA\u52A8\u8F93\u51FA\u533A\uFF1B${t.bold}\u5728\u8F93\u51FA\u533A\u62D6\u62FD\u5373\u53EF\u9009\u4E2D\u5E76\u590D\u5236${t.reset}${t.gray}\uFF08\u677E\u5F00\u5199\u5165\u526A\u8D34\u677F\uFF09\u3002${t.reset}`,` \u60F3\u7528\u7EC8\u7AEF\u539F\u751F\u6846\u9009/\u53F3\u952E\u83DC\u5355\uFF1A${t.reset}Shift+\u62D6\u62FD${t.gray} \u7ED5\u8FC7\uFF0C\u6216 ${t.reset}/mouse${t.gray} \u4EA4\u8FD8\u9F20\u6807\uFF08\u6EDA\u52A8\u6539\u7528 PgUp/PgDn\uFF09\u3002${t.reset}`,` \u26A0 \u62D6\u9009\u662F\u77E9\u5F62\u9009\u62E9\uFF0C\u8DE8\u8FC7\u4E2D\u7F1D\u4F1A\u628A\u53E6\u4E00\u680F\u4E00\u8D77\u5E26\u8D70 \u2014\u2014\u8DE8\u680F\u5185\u5BB9\u8BF7\u6539\u7528 ${t.reset}/copy${t.gray}\uFF08\u5DE6\u680F\uFF09\u6216 ${t.reset}/copy term${t.gray}\uFF08\u53F3\u680F\uFF09\u3002${t.reset}`,` ${t.gray}\u7C98\u8D34${t.reset}\uFF1A\u652F\u6301\u591A\u884C\u6574\u6BB5\u7C98\u8D34\uFF08\u4E0D\u4F1A\u9010\u884C\u63D0\u4EA4\uFF09\uFF1B\u4E5F\u53EF\u7528 ${t.reset}/copy${t.gray} \u590D\u5236\u8F93\u51FA\u533A\u3002${t.reset}`,` ${t.bold}Ctrl+V${t.reset} ${t.gray}\u7C98\u8D34\u56FE\u7247\uFF1A\u8BFB\u53D6\u7CFB\u7EDF\u526A\u8D34\u677F\u91CC\u7684\u56FE\u7247\u4F5C\u4E3A\u9644\u4EF6\uFF08\u8F93\u5165\u6846\u663E\u793A${t.reset}[\u56FE\u7247N]${t.gray}\uFF0C\u56DE\u8F66\u53D1\u9001\uFF09\u3002${t.reset}`,` ${t.gray}\u7EC8\u7AEF\u53EA\u4F1A\u4F20\u6587\u672C\uFF0C\u56FE\u7247\u62FF\u4E0D\u5230\uFF0C\u56E0\u6B64\u7531\u7384\u732A\u4E3B\u52A8\u8BFB\u526A\u8D34\u677F\uFF1A${t.reset}`,` ${t.gray}Linux \u7F3A ${t.reset}wl-clipboard${t.gray}/${t.reset}xclip${t.gray} \u65F6\u4F1A\u8BE2\u95EE\u540E\u81EA\u52A8\u5B89\u88C5\uFF1BWindows \u7528\u5185\u7F6E PowerShell\uFF1BmacOS \u7528 ${t.reset}pngpaste${t.gray} \u6216\u5185\u7F6E osascript\u3002${t.reset}`,` ${t.gray}\u82E5\u672C\u7EC8\u7AEF\u628A Ctrl+V \u5F53\u81EA\u5DF1\u7684\u7C98\u8D34\u952E\uFF08\u5982 Windows Terminal\uFF09\uFF0C\u6539\u7528 ${t.reset}/image${t.gray}\u3002${t.reset}`,` ${t.gray}\u9700\u8981\u6A21\u578B\u652F\u6301\u89C6\u89C9\uFF08glm-4v / qwen-vl / gpt-4o / claude \u7B49\uFF09\uFF1B\u53EF\u7528 ${t.reset}xzh model vision <id> on${t.gray} \u624B\u52A8\u6807\u6CE8\u3002${t.reset}`," Shift+Tab \u5207\u6362\u7126\u70B9\uFF08\u5BF9\u8BDD \u21C4 \u53F3\u4FA7\u7EC8\u7AEF\uFF09\xB7 \u9F20\u6807\u70B9\u51FB\u4EA6\u53EF"," Ctrl+C \u4E2D\u65AD\u4EFB\u52A1 / \u6E05\u7A7A\u8F93\u5165 / \u9000\u51FA\uFF08\u7A7A\u95F2\u4E14\u8F93\u5165\u4E3A\u7A7A\u65F6\u9000\u51FA\uFF09"," Ctrl+D \u7ED3\u675F\u672C\u8F6E\u6B63\u5728\u8FDB\u884C\u7684\u5BF9\u8BDD \xB7 \u4EFB\u4F55\u60C5\u51B5\u4E0B\u90FD\u4E0D\u4F1A\u9000\u51FA\u7384\u732A"," Ctrl+L \u6E05\u5C4F",` \u6CE8\uFF1A${t.bold}Alt+Enter${t.reset} \u8D70\u7EC8\u7AEF\u539F\u751F\u7F16\u7801\uFF0C\u5404\u7EC8\u7AEF\u901A\u7528\uFF1B`," Ctrl/Shift+Enter \u9700\u8981\u7EC8\u7AEF\u652F\u6301\u6269\u5C55\u952E\u76D8\u534F\u8BAE\uFF0C\u90E8\u5206\u7EC8\u7AEF\uFF08\u5C24\u5176 IDE \u5185\u7F6E\uFF09\u4E0D\u652F\u6301\u3002",`${t.bold}\u53F3\u4FA7\u7EC8\u7AEF${t.reset}`," Enter \u6267\u884C\u547D\u4EE4 \xB7 \u2191/\u2193 \u547D\u4EE4\u5386\u53F2 \xB7 Ctrl+C / Ctrl+D \u4E2D\u65AD\u8FD0\u884C\u4E2D\u7684\u547D\u4EE4 \xB7 Ctrl+L \u6E05\u7A7A"," PgUp/PgDn / Shift+\u2191\u2193 / Home/End \u56DE\u770B\u5386\u53F2\u8F93\u51FA\uFF08\u6EDA\u52A8\u4E0D\u5F71\u54CD\u6B63\u5728\u8FD0\u884C\u7684\u547D\u4EE4\uFF09"," \u547D\u4EE4\u5728\u5F53\u524D\u9879\u76EE\u76EE\u5F55\u4E0B\u6267\u884C\uFF1Bcd \u751F\u6548\uFF08\u9762\u677F\u81EA\u884C\u7EF4\u62A4\u5DE5\u4F5C\u76EE\u5F55\uFF09"];this.lines.push(...e.map(n=>`${t.gray}${n}${t.reset}`)),this.lines.push("")}buildHeaderLines(e){let n=O(`${this.modelProviderLabel} / ${this.modelLabel}`,Math.max(10,e-8)),s=O(this.cwd,Math.max(10,e-8)),i=`${t.gray}${"\u2500".repeat(Math.max(0,e))}${t.reset}`,o=this.agent.getGoal(),a=o?o.completed?"\u5DF2\u5B8C\u6210":this.goalLoopActive?`\u6267\u884C\u4E2D \xB7 \u7B2C ${this.goalIterations} \u8F6E \xB7 ${this.goalElapsedText()}`:`\u5DF2\u6682\u505C \xB7 \u7B2C ${this.goalIterations} \u8F6E \xB7 ${this.goalElapsedText()}`:"",l=o?`${t.gray} \u76EE\u6807\uFF1A${t.reset}${t.brightMagenta}${O(o.text.replace(/\s+/g," "),Math.max(10,e-18))}${t.reset}${t.gray}\uFF08${a}\uFF09${t.reset}`:null;return{info:[`${t.brightMagenta}${t.bold} \u7384\u732A XuanZhu${t.reset} ${t.gray}v${B} \xB7 \u7EC8\u7AEF AI \u7F16\u7801 Agent${t.reset}`,`${t.gray} \u6A21\u578B\uFF1A${t.reset}${n}${t.reset}`,`${t.gray} \u76EE\u5F55\uFF1A${t.reset}${s}${t.reset}`,...l?[l]:[],...this.todoHeaderLines(e),`${t.gray} \u8F93\u5165 ${t.reset}${t.brightGreen}/help${t.reset}${t.gray} \u67E5\u770B\u547D\u4EE4\u4E0E\u5FEB\u6377\u952E${t.reset}`,`${t.gray} ${t.reset}Ctrl+D${t.gray} \u7ED3\u675F\u672C\u8F6E\u5BF9\u8BDD\uFF08\u4E0D\u9000\u51FA\uFF09\xB7 ${t.reset}Ctrl+C${t.gray} \u4E2D\u65AD/\u6E05\u7A7A/\u9000\u51FA${t.reset}`,`${t.gray} ${t.reset}Shift+Tab${t.gray} \u5207\u7EC8\u7AEF \xB7 ${t.reset}PgUp${t.gray}/\u6EDA\u8F6E\u56DE\u770B\u5386\u53F2${t.reset}`],divider:i}}todoHeaderLines(e){if(this.todoItems.length===0)return[];let n=this.todoItems.filter(u=>u.status==="completed").length,s=this.todoItems.filter(u=>u.status==="cancelled").length,i=this.todoItems.length-s,o=`\u4EFB\u52A1 ${n}/${i}`+(s>0?` \xB7 \u53D6\u6D88 ${s}`:""),a=[`${t.gray} ${t.reset}${t.bold}${o}${t.reset}`],l=this.todoItems.filter(u=>u.status==="in_progress"||u.status==="pending"),c=3;for(let u of l.slice(0,c)){let 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),n=Math.max(8,process.stdout.rows||24),s=this.resolveTermWidth(e),i=s>0?Math.max(20,e-s-1):e;this.lastLeftWidth=i;let o=this.pendingConfirm?this.layoutConfirm(i):this.pendingSelect?this.layoutSelect(i):this.layoutInput(i),a=o.lines.length,l=1,c=this.buildHeaderLines(i),u=Math.max(1,Math.floor(n/3)),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,n-p-a-l),y=this.physicalLines(i),g=y.length;this.lastPhysicalCount>=0&&this.scrollOffset>0&&g>this.lastPhysicalCount&&(this.scrollOffset+=g-this.lastPhysicalCount),this.lastPhysicalCount=g;let f=Math.max(0,g-m);this.scrollOffset>f&&(this.scrollOffset=f);let b=g-this.scrollOffset,$=Math.max(0,b-m),P=y.slice($,b);for(;P.length<m;)P.unshift("");let N=n-1;this.outputTopRow=p+1,this.outputBottomRow=p+m;let R=Math.max(0,m-(b-$)),w=this.lastPhysicalMap;this.screenToLogical=[];for(let S=0;S<N;S++){let T=S-p;if(T<0||T>=m){this.screenToLogical.push(void 0);continue}let C=$+T-R,M=C>=0&&C<w.length?w[C]:-1;this.screenToLogical.push(M>=0?M:void 0)}if(this.selectionAnchor!==void 0&&this.selectionHead!==void 0){let S=Math.min(this.selectionAnchor,this.selectionHead),T=Math.max(this.selectionAnchor,this.selectionHead);for(let C=0;C<P.length;C++){let M=$+C-R;if(M<0||M>=w.length)continue;let k=w[M];k>=S&&k<=T&&(P[C]=`${t.inverse}${P[C]}${t.reset}`)}}let U=s>0?this.buildTermPanel(s,N):{rows:[],cursorRow:0,cursorCol:0};s<=0&&(this.termScreenToLogical=[],this.termTopRow=0,this.termBottomRow=0,this.selectionRegion==="term"&&this.clearSelection());let J=p+m,_=he.hide;for(let S=0;S<N;S++){let T;S<p?T=d[S]:S<p+m?T=P[S-p]:S<J+a?T=o.lines[S-J]:T="",_+=he.to(S+1,1)+"\x1B[2K",s>0?_+=Nt(O(T,i),i)+`${t.gray}\u2502${t.reset}`+O(U.rows[S]??"",s):_+=Nt(O(T,e),e)}if(_+=he.to(n,1)+"\x1B[2K"+this.renderStatus(e),this.pendingConfirm||this.pendingSelect)_+=he.hide;else if(this.termFocus&&s>0&&U.cursorRow>0){let S=U.cursorRow,T=Math.min(e,i+1+U.cursorCol);_+=he.to(S,T)+he.show}else{let S=J+o.cursorRow+1,T=Math.min(i,o.cursorCol+1);_+=he.to(S,T)+he.show}process.stdout.write(_)}resolveTermWidth(e){return!this.termVisible||e<80?0:Math.min(64,Math.max(32,Math.floor(e*.4)))}buildTermPanel(e,n){if(e<=0||n<=0)return{rows:[],cursorRow:0,cursorCol:0};let s=[],i=this.term.isRunning(),o=this.termFocus?`${t.bgBlue}${t.brightWhite} \u7EC8\u7AEF ${t.reset}`:`${t.gray} \u7EC8\u7AEF ${t.reset}`,a=i?`${t.brightYellow} \u25CF \u8FD0\u884C\u4E2D${t.reset}`:"",l=H(o)+H(a),c=Math.max(6,e-l);s.push(`${o}${t.gray}${O(this.term.getCwd(),c)}${t.reset}${a}`);let u=Math.max(1,n-3),h=[],d=[],p=this.term.visibleLines();for(let C=0;C<p.length;C++)for(let M of ft(p[C],e))h.push(M),d.push(C);this.termLogicalSnapshot=p,this.lastTermPhysicalCount>=0&&this.termScroll>0&&h.length>this.lastTermPhysicalCount&&(this.termScroll+=h.length-this.lastTermPhysicalCount),this.lastTermPhysicalCount=h.length;let m=Math.max(0,h.length-u);this.termScroll>m&&(this.termScroll=m);let y=h.length-this.termScroll,g=Math.max(0,y-u),f=h.slice(g,y);for(;f.length<u;)f.unshift("");let b=Math.max(0,u-(y-g));this.termScreenToLogical=[];for(let C=0;C<n;C++)this.termScreenToLogical.push(void 0);for(let C=0;C<u;C++){let M=g+C-b,k=M>=0&&M<d.length?d[M]:-1;this.termScreenToLogical[1+C]=k>=0?k:void 0}if(this.termTopRow=2,this.termBottomRow=1+u,this.selectionRegion==="term"&&this.selectionAnchor!==void 0&&this.selectionHead!==void 0){let C=Math.min(this.selectionAnchor,this.selectionHead),M=Math.max(this.selectionAnchor,this.selectionHead);for(let k=0;k<f.length;k++){let ae=g+k-b;if(ae<0||ae>=d.length)continue;let Q=d[ae];Q>=C&&Q<=M&&(f[k]=`${t.inverse}${f[k]}${t.reset}`)}}s.push(...f),s.push(`${t.gray}${"\u2500".repeat(e)}${t.reset}`);let $=2,P=Math.max(1,e-$),N=Array.from(this.termInput),R=N.length;{let C=0;for(let M=0;M<N.length;M++){if(C>=this.termInputCursor){R=M;break}C+=N[M].length}}let w=0;for(;w<R&&H(N.slice(w,R).join(""))>P;)w++;let U=N.slice(w).join(""),J=H(N.slice(w,R).join("")),_=this.termFocus?`${t.brightCyan}\u276F${t.reset} `:`${t.gray}\u276F${t.reset} `;s.push(O(`${_}${U}`,e));let S=s.length,T=Math.min(e,$+J+1);for(;s.length<n;)s.push("");return{rows:s.slice(0,n),cursorRow:S,cursorCol:T}}physicalLines(e){let n=[],s=[];for(let i=0;i<this.lines.length;i++){let o=ft(this.lines[i],e);n.push(...o);for(let a=0;a<o.length;a++)s.push(i)}if(this.streamingPreview){let i=ft(this.streamingPreview,e);n.push(...i);for(let o=0;o<i.length;o++)s.push(-1)}return this.lastPhysicalMap=s,n}renderStatus(e){let n=" \u7384\u732A ",s=this.autoApprove?"\u26A1auto \xB7 ":"",i=this.intentEnabled?"\u2301intent \xB7 ":"",o=this.agent.getGoal()?"\u25CEgoal \xB7 ":"",a=this.termVisible?this.termFocus?"\u7EC8\u7AEF\u25B8 ":"\u5BF9\u8BDD\u25B8 ":"",l=this.scrollOffset>0?`${t.brightYellow}\u2191${this.scrollOffset}${t.reset}${t.bgBlue} `:"",c=this.termScroll>0?`${t.brightYellow}\u21E1${this.termScroll}${t.reset}${t.bgBlue} `:"",u=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} `:"",h=` ${s}${i}${o}${a}${u}${l}${c}${this.modelLabel} \u2502 ${this.statusText}${this.statusDetail?" \xB7 "+this.statusDetail:""} `,d=` ${this.cwd} `,p=this.busy?`${t.brightYellow}\u25CF \u8FD0\u884C\u4E2D${t.reset}${t.bgBlue}`:"",m=H(n)+H(h)+H(p)+6,y=`${t.bgBlue}${t.brightWhite}${n}${t.reset}${t.bgBlue}${t.brightWhite}${p}${t.bgBlue}${t.gray}${O(d,Math.max(0,e-m))}${t.bgBlue}${t.brightWhite}${h}${t.reset}`,g=H(y);return g<e?y+=`${t.bgBlue}${" ".repeat(e-g)}${t.reset}`:g>e&&(y=`${O(y,e)}${t.reset}`),y}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=H("\u276F "),h=0,d=u;for(let p=0;p<o.length;p++){let m=o[p];if(m===`
|
|
767
|
+
`){l.push(c),c=" ",u=H(" "),p===a&&(h=l.length,d=u);continue}let y=H(m);u+y>e&&(l.push(c),c=" ",u=H(" ")),p===a&&(h=l.length,d=u),c+=m,u+=y}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 n=this.pendingConfirm,{request:s}=n,i=[],o=s.danger;i.push(`${o?t.brightRed:t.brightYellow}\u26A0 ${s.title}${t.reset}`);let a=s.detail.split(`
|
|
768
|
+
`).slice(0,12);for(let u of a)for(let h of ft(`${t.gray}${u}${t.reset}`,e-4))i.push(` ${h}`);let l=n.selected?`${t.inverse}${t.green} \u5141\u8BB8 ${t.reset}`:`${t.gray} \u5141\u8BB8 ${t.reset}`,c=n.selected?`${t.gray} \u62D2\u7EDD ${t.reset}`:`${t.inverse}${t.yellow} \u62D2\u7EDD ${t.reset}`;return i.push(` ${l} ${c} ${t.gray}\u2190 \u2192 \u5207\u6362 \xB7 Enter \u786E\u8BA4 \xB7 y/n \u5FEB\u6377${t.reset}`),{lines:i,cursorRow:0,cursorCol:0}}layoutSelect(e){let n=this.pendingSelect,s=[];if(s.push(`${t.bold}${n.title}${t.reset}`),n.detail)for(let c of ft(`${t.gray}${n.detail}${t.reset}`,e-4))s.push(` ${c}`);let i=10,o=n.options.length,{start:a,end:l}=od(o,n.index,i);return n.options.slice(a,l).forEach((c,u)=>{let h=a+u,d=c.hint?` ${t.gray}${c.hint}${t.reset}`:"",p=` ${h+1}. ${c.label}`;s.push(h===n.index?`${t.inverse}${p}${t.reset}${d}`:`${t.gray}${p}${t.reset}${d}`)}),o>i&&s.push(` ${t.gray}\u2026\u5171 ${o} \u4E2A\u6A21\u578B${t.reset}`),s.push(` ${t.gray}\u2191 \u2193 \u9009\u62E9 \xB7 \u6570\u5B57\u76F4\u9009 \xB7 Enter \u786E\u8BA4 \xB7 Esc \u53D6\u6D88${t.reset}`),{lines:s,cursorRow:0,cursorCol:0}}};function id(r,e,n){return Number.isFinite(r)?n<e?{row:e,scroll:0}:r<e?{row:e,scroll:1}:r>n?{row:n,scroll:-1}:{row:r,scroll:0}:{row:e,scroll:0}}function od(r,e,n){if(r<=n)return{start:0,end:Math.max(0,r)};let s=Math.min(Math.max(0,e-Math.floor(n/2)),r-n);return{start:s,end:s+n}}function ad(r,e){let n=e.trim();if(/^\d+$/.test(n))return r[Number(n)-1];let s=n.toLowerCase();return r.find(i=>i.id===n)??r.find(i=>i.model===n)??r.find(i=>i.id.toLowerCase()===s)}var rt="\x1B[200~",qt="\x1B[201~",ld=40,cd=2e3,ud=1,dd=2,hs=4;function pd(r,e){if((e&hs)===0)return null;let n=r>=65&&r<=90?r+32:r;if(n>=97&&n<=122)return String.fromCharCode(n-96);switch(r){case 32:case 64:return"\0";case 91:return"\x1B";case 92:return"";case 93:return"";case 94:return"";case 95:case 47:return"";default:return null}}function ya(r,e){let n=(e&(ud|hs|dd))!==0;switch(r){case 13:return n?`
|
|
769
|
+
`:"\r";case 9:return n&&(e&hs)===0?"\x1B[Z":" ";case 8:case 127:return"\x7F";default:return pd(r,e)}}function hd(r){if(r==="\x1B\r"||r===`\x1B
|
|
769
770
|
`)return`
|
|
770
|
-
`;let e=/^\x1b\[(\d+)(?::\d+)?(?:;(\d+))?u$/.exec(r);if(e){let s=e[2]?Number(e[2])-1:0;return
|
|
771
|
+
`;let e=/^\x1b\[(\d+)(?::\d+)?(?:;(\d+))?u$/.exec(r);if(e){let s=e[2]?Number(e[2])-1:0;return ya(Number(e[1]),s)??r}let n=/^\x1b\[27;(\d+)(?:;(\d+))?~$/.exec(r);if(n){let s=Number(n[1])-1,i=n[2]?Number(n[2]):27;return ya(i,s)??r}return r}function ps(r){return r<1024?`${r} B`:r<1024*1024?`${(r/1024).toFixed(1)} KB`:`${(r/(1024*1024)).toFixed(1)} MB`}function md(r){let e=r.trim();if(!e)return null;let n=/^(['"])(.*)\1$/.exec(e);return n&&(e=n[2]),e.startsWith("file://")&&(e=e.slice(7)),e=e.replace(/\\ /g," "),/\.(png|jpe?g|gif|webp)$/i.test(e)?e:null}function fd(r,e){try{let n=He.isAbsolute(r)?r:He.resolve(e,ee(r)),s=xe.statSync(n);if(!s.isFile()||s.size>Un)return null;let i=xe.readFileSync(n),o=us(i);return o?{mimeType:o,data:i.toString("base64")}:null}catch{return null}}function gd(r){let e={};try{let i=JSON.parse(r.arguments||"{}");typeof i=="object"&&i!==null&&(e=i)}catch{return O(r.arguments,60)}let n=i=>{let o=e[i];return typeof o=="string"?o:void 0},s=n("path")??n("pattern")??n("command")??n("dirPath")??"";return O(s.replace(/\s+/g," "),80)}var oe=v(require("fs")),ms=v(require("path"));function fs(){return ms.join(E(),"session.lock")}function qn(){return ms.join(E(),"crash.log")}function va(r){let e=$d();try{oe.mkdirSync(E(),{recursive:!0}),oe.writeFileSync(fs(),JSON.stringify({pid:process.pid,startedAt:new Date().toISOString(),version:r}),{mode:384})}catch{}return e}function $d(){let r;try{r=oe.readFileSync(fs(),"utf8")}catch{return null}let e={};try{let n=JSON.parse(r);e.startedAt=n.startedAt,e.version=n.version}catch{}try{let n=oe.readFileSync(qn(),"utf8");e.crashLog=n.slice(-4e3)}catch{}return e}function gs(r,e){let n=e instanceof Error?e.stack??e.message:String(e),s=`
|
|
771
772
|
[${new Date().toISOString()}] ${r}
|
|
772
773
|
\u7248\u672C: ${process.version} \u5E73\u53F0: ${process.platform} PID: ${process.pid}
|
|
773
774
|
`+n.split(`
|
|
774
775
|
`).map(i=>` ${i}`).join(`
|
|
775
776
|
`)+`
|
|
776
|
-
`;try{
|
|
777
|
-
`);return;case"init":{if(
|
|
778
|
-
`);return}
|
|
779
|
-
`);return}case void 0:return
|
|
777
|
+
`;try{oe.mkdirSync(E(),{recursive:!0}),oe.appendFileSync(qn(),s,"utf8")}catch{}}function Wn(){try{oe.rmSync(fs(),{force:!0}),oe.rmSync(qn(),{force:!0})}catch{}}function Xn(){return qn()}var ba=require("child_process"),Sa=v(require("fs"));async function xa(r){let e=r[0];switch(e){case"edit":return vd();case"path":process.stdout.write(`${z()}
|
|
778
|
+
`);return;case"init":{if(le(E()),_t()){process.stdout.write(`${t.yellow}\u914D\u7F6E\u6587\u4EF6\u5DF2\u5B58\u5728\uFF1A${z()}${t.reset}
|
|
779
|
+
`);return}te({...q}),process.stdout.write(`${t.green}\u2713 \u5DF2\u751F\u6210\u9ED8\u8BA4\u914D\u7F6E\uFF1A${z()}${t.reset}
|
|
780
|
+
`);return}case void 0:return yd();default:process.stdout.write(`${t.red}\u672A\u77E5\u5B50\u547D\u4EE4\uFF1A${e}${t.reset}
|
|
780
781
|
${t.gray}\u7528\u6CD5\uFF1Axzh config [edit|path|init]${t.reset}
|
|
781
|
-
`),process.exitCode=1;return}}function
|
|
782
|
+
`),process.exitCode=1;return}}function yd(){if(!_t()){process.stdout.write(`${t.yellow}\u5C1A\u672A\u521B\u5EFA\u914D\u7F6E\u6587\u4EF6\u3002${t.reset}
|
|
782
783
|
${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}
|
|
783
|
-
`);return}let r=
|
|
784
|
+
`);return}let r=de(),e=Gs(r);process.stdout.write(`${t.bold}\u7384\u732A\u914D\u7F6E${t.reset} ${t.gray}(${z()})${t.reset}
|
|
784
785
|
|
|
785
786
|
`),process.stdout.write(JSON.stringify(e,null,2)+`
|
|
786
787
|
`),process.stdout.write(`
|
|
787
788
|
${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}
|
|
788
|
-
`)}function
|
|
789
|
+
`)}function vd(){le(E());let r=z();Sa.existsSync(r)||te({...q});let e=[process.env.XUANZHU_EDITOR,"nano",process.env.EDITOR,"vi","vim","code --wait"].filter(n=>!!n);for(let n of e){let[s,...i]=n.split(" "),o=(0,ba.spawnSync)(s,[...i,r],{stdio:"inherit"});if(o.error){if(o.error.code==="ENOENT")continue;process.stdout.write(`${t.red}\u7F16\u8F91\u5668\u542F\u52A8\u5931\u8D25\uFF1A${o.error.message}${t.reset}
|
|
789
790
|
`),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}
|
|
790
791
|
`),process.exitCode=1);return}process.stdout.write(`${t.yellow}\u672A\u627E\u5230\u53EF\u7528\u7684\u6587\u672C\u7F16\u8F91\u5668\uFF0C\u8BF7\u624B\u52A8\u7F16\u8F91\uFF1A${r}${t.reset}
|
|
791
|
-
`),process.exitCode=1}var
|
|
792
|
-
`),a.trim()||e||""}finally{s.close()}}async function
|
|
793
|
-
`}async function
|
|
792
|
+
`),process.exitCode=1}var Ta=v(require("fs")),Ca=v(require("path"));var Vn=v(require("readline/promises")),wa=require("stream");var bd=new wa.Writable({write(r,e,n){n()}});function Sd(r){return r.length<=8?"*".repeat(r.length):`${r.slice(0,4)}\u2026${r.slice(-4)}`}async function Ke(r,e,n={}){let s=Vn.createInterface({input:process.stdin,output:n.mask?bd:process.stdout});try{let i=e&&n.mask?Sd(e):e,o=i?` ${t.gray}(${i})${t.reset}`:"",a=await Promise.race([s.question(`${r}${o}: `),new Promise(c=>s.once("close",()=>c("")))]);return n.mask&&process.stdout.write(`
|
|
793
|
+
`),a.trim()||e||""}finally{s.close()}}async function Le(r,e,n=0){return process.stdin.isTTY?wd(r,e,n):Td(r,e,n)}function xd(r,e,n){let s=e===n?`${t.brightGreen}\u276F${t.reset}`:" ",i=r.hint?` ${t.gray}${r.hint}${t.reset}`:"",o=`${t.gray}${String(e+1).padStart(2)}.${t.reset}`;return`\x1B[2K ${s} ${o} ${r.label}${i}
|
|
794
|
+
`}async function wd(r,e,n){let i=Math.min(Math.max(n,0),e.length-1),o="",a=e.length,l=()=>o?`${t.gray}\u2191/\u2193 \u9009\u62E9 \xB7 ${t.reset}\u7F16\u53F7 ${t.brightCyan}${o}${t.reset}${t.gray} \xB7 Enter \u786E\u8BA4 \xB7 Esc \u53D6\u6D88${t.reset}`:`${t.gray}\u2191/\u2193 \u9009\u62E9 \xB7 \u6570\u5B57\u76F4\u8FBE \xB7 Enter \u786E\u8BA4 \xB7 Esc \u53D6\u6D88${t.reset}`,c=()=>{for(let p=0;p<e.length;p++)process.stdout.write(xd(e[p],p,i))},u=()=>{process.stdout.write(`\x1B[${a}A\x1B[1G\x1B[J`),c(),process.stdout.write(l())};process.stdout.write(`
|
|
794
795
|
${t.bold}${r}${t.reset}
|
|
795
796
|
`),c(),process.stdout.write(l());let h=process.stdin,d=!!h.isRaw;return new Promise(p=>{let m=f=>{h.off("data",g),d||h.setRawMode(!1),h.pause(),process.stdout.write(`
|
|
796
797
|
`),p(f)},y=()=>{let f=o?Number.parseInt(o,10)-1:i;f>=0&&f<e.length?m(e[f].value):o?(o="",u()):m(e[i].value)},g=f=>{let b=!1,$=0;for(;$<f.length;)if(f.startsWith("\x1B[A",$)||f[$]==="k")i=(i-1+e.length)%e.length,b=!0,$+=f.startsWith("\x1B[A",$)?3:1;else if(f.startsWith("\x1B[B",$)||f[$]==="j")i=(i+1)%e.length,b=!0,$+=f.startsWith("\x1B[B",$)?3:1;else if(f[$]==="\r"||f[$]===`
|
|
797
|
-
`){y();return}else if(f[$]===""){m(void 0);return}else if(f[$]==="\x1B"){m(void 0);return}else if(f[$]==="\x7F"||f[$]==="\b")o=o.slice(0,-1),b=!0,$+=1;else if(/\d/.test(f[$])){let
|
|
798
|
+
`){y();return}else if(f[$]===""){m(void 0);return}else if(f[$]==="\x1B"){m(void 0);return}else if(f[$]==="\x7F"||f[$]==="\b")o=o.slice(0,-1),b=!0,$+=1;else if(/\d/.test(f[$])){let P=o+f[$];o=P.length>2?f[$]:P,b=!0,$+=1}else $+=1;b&&u()};h.setRawMode(!0),h.resume(),h.setEncoding("utf8"),h.on("data",g)})}async function Td(r,e,n){process.stdout.write(`
|
|
798
799
|
${t.bold}${r}${t.reset}
|
|
799
800
|
`),e.forEach((i,o)=>{let a=o===n?`${t.brightGreen}\u276F${t.reset}`:" ",l=i.hint?` ${t.gray}${i.hint}${t.reset}`:"";process.stdout.write(` ${a} ${o+1}. ${i.label}${l}
|
|
800
|
-
`)});let s=
|
|
801
|
-
`),e[n].value):e[a].value}finally{s.close()}}async function qe(r,e=!1){let n=
|
|
802
|
-
`)}function
|
|
803
|
-
`),process.exitCode=1}function
|
|
801
|
+
`)});let s=Vn.createInterface({input:process.stdin,output:process.stdout});try{let o=(await Promise.race([s.question(`${t.gray}\u8BF7\u8F93\u5165\u7F16\u53F7 [${n+1}]: ${t.reset}`),new Promise(l=>s.once("close",()=>l("")))])).trim();if(!o)return e[n].value;let a=Number.parseInt(o,10)-1;return Number.isNaN(a)||a<0||a>=e.length?(process.stdout.write(`${t.yellow}\u65E0\u6548\u7F16\u53F7\uFF0C\u4F7F\u7528\u9ED8\u8BA4\u9009\u9879\u3002${t.reset}
|
|
802
|
+
`),e[n].value):e[a].value}finally{s.close()}}async function qe(r,e=!1){let n=Vn.createInterface({input:process.stdin,output:process.stdout});try{let s=e?"[Y/n]":"[y/N]",o=(await Promise.race([n.question(`${r} ${s} `),new Promise(a=>n.once("close",()=>a("")))])).trim().toLowerCase();return o?o==="y"||o==="yes":e}finally{n.close()}}function Z(r){process.stdout.write(`${r}
|
|
803
|
+
`)}function $s(r){process.stderr.write(`${t.red}${r}${t.reset}
|
|
804
|
+
`),process.exitCode=1}function Cd(r){let e=new Date(r);if(Number.isNaN(e.getTime()))return r;let n=s=>String(s).padStart(2,"0");return`${n(e.getMonth()+1)}-${n(e.getDate())} ${n(e.getHours())}:${n(e.getMinutes())}:${n(e.getSeconds())}`}function kd(r){switch(r.kind){case"tool-error":return r.tool?`\u5DE5\u5177 ${r.tool}`:"\u5DE5\u5177";case"turn-failed":return"\u6574\u8F6E\u5931\u8D25";case"unhandled-rejection":return"Promise \u62D2\u7EDD";default:return"\u672A\u6355\u83B7\u5F02\u5E38"}}function Ad(r){switch(r.category){case"bug":return`${t.red}bug${t.reset}`;case"provider":return`${t.yellow}\u670D\u52A1\u7AEF${t.reset}`;case"config":return`${t.yellow}\u914D\u7F6E${t.reset}`;default:return`${t.gray}\u672A\u77E5${t.reset}`}}function Ed(){let r=xt();if(r.length===0){Z(`${t.gray}\u8FD8\u6CA1\u6709\u9519\u8BEF\u62A5\u544A\uFF08\u76EE\u5F55\uFF1A${Se()}\uFF09\u3002${t.reset}`);return}Z(`${t.bold}\u7384\u732A\u9519\u8BEF\u62A5\u544A${t.reset} ${t.gray}\uFF08${r.length}/${En} \u4EFD\uFF0C\u6700\u8FD1\u7684\u5728\u524D\uFF09${t.reset}`),Z(`${t.gray} \u5E8F\u53F7 \u6700\u540E\u51FA\u73B0 \u6B21\u6570 \u7C7B\u522B \u6458\u8981${t.reset}`),r.forEach((e,n)=>{let s=String(n+1).padStart(3),i=String(e.count).padStart(3),o=O(`${kd(e)}\uFF5C${e.message}`,44);Z(` ${t.cyan}${s}${t.reset} ${t.gray}${Cd(e.lastTime)}${t.reset} ${i} ${Ad(e)} ${o}`)}),Z(""),Z(`${t.gray}\u770B\u8BE6\u60C5\uFF1A${t.reset}xzh errors show <\u5E8F\u53F7>${t.gray}\u3000\u76EE\u5F55\uFF1A${t.reset}${Se()}`)}function _d(r){let e=Ca.join(Se(),`${r.signature}.json`);Z(`${t.gray}\u6587\u4EF6\uFF1A${t.reset}${e}`),Z("");try{Z(Ta.readFileSync(e,"utf8").trimEnd())}catch{Z(JSON.stringify(r,null,2))}}function Rd(r){if(!r){$s("\u7528\u6CD5\uFF1Axzh errors show <\u5E8F\u53F7|\u7B7E\u540D>");return}let e=Lo(r);if(!e){$s(`\u6CA1\u6709\u627E\u5230\u62A5\u544A\u300C${r}\u300D\u3002\u5148\u8FD0\u884C xzh errors \u770B\u5217\u8868\u3002`);return}_d(e)}async function Pd(r){let e=xt();if(e.length===0){Z(`${t.gray}\u6CA1\u6709\u9700\u8981\u6E05\u7406\u7684\u62A5\u544A\u3002${t.reset}`);return}if(!r&&!await qe(`\u5220\u9664\u5168\u90E8 ${e.length} \u4EFD\u9519\u8BEF\u62A5\u544A\uFF08${Se()}\uFF09\uFF1F`,!1)){Z(`${t.gray}\u5DF2\u53D6\u6D88\u3002${t.reset}`);return}let n=No();Z(`${t.gray}\u5DF2\u5220\u9664 ${n} \u4EFD\u62A5\u544A\u3002${t.reset}`)}function Md(){Z(`${t.bold}xzh errors${t.reset} \u2014\u2014 \u67E5\u770B\u7384\u732A\u8BB0\u5F55\u7684\u9519\u8BEF\u62A5\u544A\uFF08~/.xzh/errors/\uFF09
|
|
804
805
|
${t.green}xzh errors${t.reset} \u5217\u51FA\u62A5\u544A\uFF08\u6700\u8FD1\u7684\u5728\u524D\uFF09
|
|
805
806
|
${t.green}xzh errors show <\u5E8F\u53F7|\u7B7E\u540D>${t.reset} \u67E5\u770B\u4E00\u4EFD\u62A5\u544A\u7684\u5B8C\u6574\u5185\u5BB9\uFF08JSON\uFF09
|
|
806
807
|
${t.green}xzh errors path${t.reset} \u6253\u5370\u62A5\u544A\u76EE\u5F55
|
|
807
808
|
${t.green}xzh errors clear [--yes]${t.reset} \u5220\u9664\u5168\u90E8\u62A5\u544A
|
|
808
809
|
|
|
809
810
|
${t.gray}\u62A5\u544A\u5728\u51FA\u73B0\u672A\u6355\u83B7\u5F02\u5E38\u3001\u5DE5\u5177\u629B\u9519\u6216\u6574\u8F6E\u8BF7\u6C42\u5931\u8D25\u65F6\u81EA\u52A8\u5199\u5165\uFF08\u5DF2\u505A\u5BC6\u94A5\u8131\u654F\uFF09\u3002
|
|
810
|
-
\u53CD\u9988\u95EE\u9898\u65F6\u628A ${t.reset}xzh errors show <\u5E8F\u53F7>${t.gray} \u7684\u8F93\u51FA\u8D34\u51FA\u6765\u5373\u53EF\u3002${t.reset}`)}async function
|
|
811
|
-
\u7528\u6CD5\uFF1Axzh errors [list|show|path|clear]`)}}function
|
|
811
|
+
\u53CD\u9988\u95EE\u9898\u65F6\u628A ${t.reset}xzh errors show <\u5E8F\u53F7>${t.gray} \u7684\u8F93\u51FA\u8D34\u51FA\u6765\u5373\u53EF\u3002${t.reset}`)}async function ka(r){let[e,...n]=r;switch(e){case void 0:case"list":case"ls":Ed();return;case"show":case"cat":Rd(n[0]);return;case"path":Z(Se());return;case"clear":case"rm":await Pd(n.includes("--yes")||n.includes("-y"));return;case"help":case"-h":case"--help":Md();return;default:$s(`\u672A\u77E5\u5B50\u547D\u4EE4\uFF1A${e}
|
|
812
|
+
\u7528\u6CD5\uFF1Axzh errors [list|show|path|clear]`)}}function Id(r){return r.startsWith("+")?`${t.green}${r}${t.reset}`:r.startsWith("~")?`${t.cyan}${r}${t.reset}`:r.startsWith("!")?`${t.brightYellow}${r}${t.reset}`:r.startsWith("\xB7")?`${t.gray}${r}${t.reset}`:r}function Dd(){process.stdout.write(`
|
|
812
813
|
${t.bold}xzh init${t.reset} ${t.gray}\u2014\u2014 \u626B\u63CF\u9879\u76EE\u5E76\u751F\u6210 / \u8865\u5168\u5F00\u53D1\u89C4\u8303${t.reset}
|
|
813
814
|
|
|
814
815
|
${t.bold}\u7528\u6CD5${t.reset}
|
|
@@ -822,13 +823,13 @@ ${t.bold}\u8BF4\u660E${t.reset}
|
|
|
822
823
|
\xB7 \u4E0D\u8C03\u7528\u6A21\u578B\u3001\u4E0D\u731C\u6D4B\u547D\u4EE4\uFF1BAGENTS.md \u53EA\u653E\u5165\u53E3\u7EA7\u7EA6\u5B9A\uFF0C\u7EC6\u8282\u5199\u5165 docs/\uFF1B
|
|
823
824
|
\xB7 \u5DF2\u5B58\u5728\u7684\u6587\u4EF6\u6309 \`## \u5C0F\u8282\` \u5408\u5E76\uFF1A\u540C\u540D\u5C0F\u8282\u4FDD\u7559\u539F\u5185\u5BB9\uFF0C\u53EA\u8FFD\u52A0\u7F3A\u5931\u7684\uFF1B
|
|
824
825
|
\xB7 \u91CD\u590D\u8FD0\u884C\u662F\u5E42\u7B49\u7684\uFF1A\u5185\u5BB9\u65E0\u53D8\u5316\u65F6\u4E0D\u5199\u76D8\u3002
|
|
825
|
-
`)}async function
|
|
826
|
+
`)}async function Aa(r){let e=new Set(r);if(e.has("--help")||e.has("-h")){Dd();return}let n=new Set(["--dry-run","-n","--force","-f","--yes","-y"]),s=r.filter(u=>!n.has(u));if(s.length>0){process.stdout.write(`${t.red}\u672A\u77E5\u53C2\u6570\uFF1A${s.join(" ")}${t.reset}
|
|
826
827
|
${t.gray}\u7528\u6CD5\uFF1Axzh init [--dry-run] [--force] [--yes]${t.reset}
|
|
827
|
-
`),process.exitCode=1;return}let i=e.has("--dry-run")||e.has("-n"),o=e.has("--force")||e.has("-f"),a=e.has("--yes")||e.has("-y"),l=
|
|
828
|
-
`);for(let u of
|
|
828
|
+
`),process.exitCode=1;return}let i=e.has("--dry-run")||e.has("-n"),o=e.has("--force")||e.has("-f"),a=e.has("--yes")||e.has("-y"),l=jn(process.cwd(),{force:o});process.stdout.write(`
|
|
829
|
+
`);for(let u of Bn(l))process.stdout.write(`${Id(u)}
|
|
829
830
|
`);if(l.files.every(u=>u.action==="skip")){process.stdout.write(`${t.gray}\u9879\u76EE\u89C4\u8303\u5DF2\u662F\u6700\u65B0\uFF0C\u672A\u4FEE\u6539\u4EFB\u4F55\u6587\u4EF6\u3002${t.reset}
|
|
830
831
|
|
|
831
|
-
`);return}if(i){for(let u of
|
|
832
|
+
`);return}if(i){for(let u of aa(l)){process.stdout.write(`
|
|
832
833
|
${t.bold}----- ${u.relPath} -----${t.reset}
|
|
833
834
|
`);let h=u.content.length>6e3?`${u.content.slice(0,6e3)}
|
|
834
835
|
\u2026\uFF08\u5DF2\u622A\u65AD\uFF09`:u.content;process.stdout.write(`${h}
|
|
@@ -837,7 +838,7 @@ ${t.bold}----- ${u.relPath} -----${t.reset}
|
|
|
837
838
|
|
|
838
839
|
`);return}if(!a&&!await qe(`\u4EE5\u4E0A\u53D8\u66F4\u5C06\u5199\u5165\u9879\u76EE\uFF08${l.cwd}\uFF09\uFF0C\u7EE7\u7EED\uFF1F`,!1)){process.stdout.write(`${t.gray}\u5DF2\u53D6\u6D88\uFF0C\u672A\u4FEE\u6539\u4EFB\u4F55\u6587\u4EF6\u3002${t.reset}
|
|
839
840
|
|
|
840
|
-
`);return}let c;try{c=
|
|
841
|
+
`);return}let c;try{c=Fn(l)}catch(u){process.stdout.write(`${t.red}\u5199\u5165\u5931\u8D25\uFF1A${u instanceof Error?u.message:String(u)}${t.reset}
|
|
841
842
|
|
|
842
843
|
`),process.exitCode=1;return}process.stdout.write(`
|
|
843
844
|
`);for(let u of c.written){let h=u.action==="create"?"\u5DF2\u65B0\u5EFA":u.action==="append"?"\u5DF2\u8865\u5145":"\u5DF2\u8986\u76D6";process.stdout.write(`${t.green}\u2713 ${h} ${u.relPath}${t.reset}
|
|
@@ -845,65 +846,65 @@ ${t.bold}----- ${u.relPath} -----${t.reset}
|
|
|
845
846
|
`);process.stdout.write(`${t.gray}
|
|
846
847
|
\u540E\u7EED\u53EF\u76F4\u63A5\u7F16\u8F91 AGENTS.md \u4E0E docs/\uFF1B\u518D\u6B21\u8FD0\u884C xzh init \u53EA\u4F1A\u8865\u5145\u7F3A\u5931\u5C0F\u8282\u3002${t.reset}
|
|
847
848
|
|
|
848
|
-
`)}async function
|
|
849
|
-
`);return}let i=
|
|
850
|
-
${t.gray}\u53EF\u7528\uFF1A${
|
|
851
|
-
`),process.exitCode=1;return}let o=r[1]??await
|
|
852
|
-
`);return}let a=await
|
|
849
|
+
`)}async function Ea(r){switch(r[0]){case void 0:return jd();case"list":case"ls":return Ld();case"all":case"available":case"providers":return Nd();case"add":return ys(r.slice(1));case"remove":case"rm":case"delete":return _a(r.slice(1));case"context":case"ctx":return Ra(r.slice(1));case"vision":case"image":return Od(r.slice(1));case"help":case"-h":case"--help":return Fd();default:return ys(r)}}async function ys(r){let e=de(),n=at(e),s=r[0]??await Bd();if(!s){process.stdout.write(`${t.gray}\u5DF2\u53D6\u6D88\u3002${t.reset}
|
|
850
|
+
`);return}let i=Ie(s);if(!i){process.stdout.write(`${t.red}\u672A\u77E5\u7684 provider\uFF1A${s}${t.reset}
|
|
851
|
+
${t.gray}\u53EF\u7528\uFF1A${Me.map(p=>p.id).join(", ")}${t.reset}
|
|
852
|
+
`),process.exitCode=1;return}let o=r[1]??await Ud(i.id,i.models,e);if(!o){process.stdout.write(`${t.gray}\u5DF2\u53D6\u6D88\u3002${t.reset}
|
|
853
|
+
`);return}let a=await zd(i.id,i.requiresBaseUrl===!0,e),l=await Hd(i.id,i.envKey,e),c=await Gd(o,r[2]),u=await Jd(i.id,o,r[3]);e.providers={...e.providers,[i.id]:{...e.providers[i.id]??{},model:o,...a?{baseUrl:a}:{},...l?{apiKey:l}:{}}},e.provider=i.id,e.model=o;let h=n.some(p=>p.id===Ee(i.id,o)),d=Hs(e,{provider:i.id,model:o,contextWindow:c,vision:u,...a?{baseUrl:a}:{},...l?{apiKey:l}:{}});te(e),process.stdout.write(`
|
|
853
854
|
${t.green}\u2713 ${h?"\u5DF2\u66F4\u65B0":"\u5DF2\u65B0\u589E"}\u6A21\u578B${t.reset} ${t.bold}${d.id}${t.reset}
|
|
854
855
|
${t.gray}provider\uFF1A${t.reset}${i.label}
|
|
855
856
|
${t.gray}model \uFF1A${t.reset}${d.model}
|
|
856
|
-
${t.gray}\u4E0A\u4E0B\u6587 \uFF1A${t.reset}${
|
|
857
|
+
${t.gray}\u4E0A\u4E0B\u6587 \uFF1A${t.reset}${Pe(d.contextWindow??32e3)} token
|
|
857
858
|
${t.gray}\u56FE\u7247\u8F93\u5165\uFF1A${t.reset}${Xe(d)?"\u652F\u6301\uFF08Ctrl+V \u7C98\u8D34\u56FE\u7247\uFF09":"\u4E0D\u652F\u6301"}
|
|
858
859
|
`+(a?` ${t.gray}baseUrl \uFF1A${t.reset}${a}
|
|
859
|
-
`:"")+` ${t.gray}\u914D\u7F6E\u6587\u4EF6\uFF1A${t.reset}${
|
|
860
|
-
`),
|
|
861
|
-
`);return}let s=r[0]||await
|
|
862
|
-
`);return}let i=
|
|
860
|
+
`:"")+` ${t.gray}\u914D\u7F6E\u6587\u4EF6\uFF1A${t.reset}${z()}
|
|
861
|
+
`),Pa(e)}async function _a(r){let e=de(),n=W(e);if(n.length===0){process.stdout.write(`${t.yellow}\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\u3002${t.reset}
|
|
862
|
+
`);return}let s=r[0]||await ws(n,"\u9009\u62E9\u8981\u5220\u9664\u7684\u6A21\u578B\uFF1A");if(!s){process.stdout.write(`${t.gray}\u5DF2\u53D6\u6D88\u3002${t.reset}
|
|
863
|
+
`);return}let i=xs(e,s),o=i?Ks(e,i):null;if(!o){process.stdout.write(`${t.red}\u672A\u627E\u5230\u6A21\u578B\uFF1A${s}${t.reset}
|
|
863
864
|
${t.gray}\u63D0\u793A\uFF1A\u53EF\u4F7F\u7528 ${t.reset}xzh model list${t.gray} \u67E5\u770B id \u4E0E\u5E8F\u53F7\u3002${t.reset}
|
|
864
|
-
`),process.exitCode=1;return}
|
|
865
|
+
`),process.exitCode=1;return}te(e),process.stdout.write(`
|
|
865
866
|
${t.green}\u2713 \u5DF2\u5220\u9664\u6A21\u578B${t.reset} ${o.id}
|
|
866
|
-
`),
|
|
867
|
-
`);return}let s=r[0]||await
|
|
868
|
-
`);return}let i=
|
|
867
|
+
`),Pa(e)}async function Ra(r){let e=de(),n=W(e);if(n.length===0){process.stdout.write(`${t.yellow}\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\u3002${t.reset}
|
|
868
|
+
`);return}let s=r[0]||await ws(n,"\u9009\u62E9\u8981\u8BBE\u7F6E\u4E0A\u4E0B\u6587\u7A97\u53E3\u7684\u6A21\u578B\uFF1A");if(!s){process.stdout.write(`${t.gray}\u5DF2\u53D6\u6D88\u3002${t.reset}
|
|
869
|
+
`);return}let i=xs(e,s),o=i?n.find(h=>h.id===i):void 0;if(!o){process.stdout.write(`${t.red}\u672A\u627E\u5230\u6A21\u578B\uFF1A${s}${t.reset}
|
|
869
870
|
${t.gray}\u63D0\u793A\uFF1A\u53EF\u4F7F\u7528 ${t.reset}xzh model list${t.gray} \u67E5\u770B id \u4E0E\u5E8F\u53F7\u3002${t.reset}
|
|
870
|
-
`),process.exitCode=1;return}let a=o.contextWindow??Ve(o.model),l=r[1]??await Ke(`\u8BF7\u8F93\u5165 ${o.id} \u7684\u4E0A\u4E0B\u6587\u7A97\u53E3\uFF08token\uFF0C\u5982 128000\uFF09`,String(a)),c=
|
|
871
|
-
`),process.exitCode=1;return}let u=at(e).find(h=>h.id===o.id);u&&(u.contextWindow=c),
|
|
872
|
-
${t.green}\u2713 \u5DF2\u66F4\u65B0\u4E0A\u4E0B\u6587\u7A97\u53E3${t.reset} ${o.id} \u2192 ${
|
|
873
|
-
`)}async function
|
|
874
|
-
`);return}let s=r[0]||await
|
|
875
|
-
`);return}let i=
|
|
871
|
+
`),process.exitCode=1;return}let a=o.contextWindow??Ve(o.model),l=r[1]??await Ke(`\u8BF7\u8F93\u5165 ${o.id} \u7684\u4E0A\u4E0B\u6587\u7A97\u53E3\uFF08token\uFF0C\u5982 128000\uFF09`,String(a)),c=bs(l);if(c===void 0){process.stdout.write(`${t.red}\u65E0\u6CD5\u8BC6\u522B\u7684\u7A97\u53E3\u5927\u5C0F\uFF1A${l}${t.reset}
|
|
872
|
+
`),process.exitCode=1;return}let u=at(e).find(h=>h.id===o.id);u&&(u.contextWindow=c),te(e),process.stdout.write(`
|
|
873
|
+
${t.green}\u2713 \u5DF2\u66F4\u65B0\u4E0A\u4E0B\u6587\u7A97\u53E3${t.reset} ${o.id} \u2192 ${Pe(c)} token
|
|
874
|
+
`)}async function Od(r){let e=de(),n=W(e);if(n.length===0){process.stdout.write(`${t.yellow}\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\u3002${t.reset}
|
|
875
|
+
`);return}let s=r[0]||await ws(n,"\u9009\u62E9\u8981\u6807\u6CE8\u89C6\u89C9\u80FD\u529B\u7684\u6A21\u578B\uFF1A");if(!s){process.stdout.write(`${t.gray}\u5DF2\u53D6\u6D88\u3002${t.reset}
|
|
876
|
+
`);return}let i=xs(e,s),o=i?n.find(h=>h.id===i):void 0;if(!o){process.stdout.write(`${t.red}\u672A\u627E\u5230\u6A21\u578B\uFF1A${s}${t.reset}
|
|
876
877
|
${t.gray}\u63D0\u793A\uFF1A\u53EF\u4F7F\u7528 ${t.reset}xzh model list${t.gray} \u67E5\u770B id \u4E0E\u5E8F\u53F7\u3002${t.reset}
|
|
877
|
-
`),process.exitCode=1;return}let a=
|
|
878
|
+
`),process.exitCode=1;return}let a=cr(o.model),l=(r[1]??await Ke(`\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=Ss(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}
|
|
878
879
|
`),process.exitCode=1;return}let u=at(e).find(h=>h.id===o.id);if(!u){process.stdout.write(`${t.red}\u8BBE\u7F6E\u5931\u8D25\uFF1A${o.id}${t.reset}
|
|
879
|
-
`),process.exitCode=1;return}u.vision=c,
|
|
880
|
+
`),process.exitCode=1;return}u.vision=c,te(e),process.stdout.write(`
|
|
880
881
|
${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"}
|
|
881
882
|
${t.gray} \u751F\u6548\u7ED3\u679C\uFF1A${Xe(u)?"\u53EF\u4EE5\u7C98\u8D34\u56FE\u7247":"\u7C98\u8D34\u56FE\u7247\u4F1A\u88AB\u62D2\u7EDD"}\uFF08Ctrl+V \u6216 /image\uFF09${t.reset}
|
|
882
|
-
`)}function
|
|
883
|
-
${t.bold}\u6240\u6709\u53EF\u7528\u6A21\u578B${t.reset}${t.gray}\uFF08${
|
|
884
|
-
`);for(let o of
|
|
883
|
+
`)}function Ld(){let r=de();vs(r)}function Nd(){let r=de(),e=new Set(W(r).map(o=>o.id)),n=Me.reduce((o,a)=>o+a.models.length,0);process.stdout.write(`
|
|
884
|
+
${t.bold}\u6240\u6709\u53EF\u7528\u6A21\u578B${t.reset}${t.gray}\uFF08${Me.length} \u4E2A\u670D\u52A1\u5546\uFF0C\u5171 ${n} \u4E2A\u5185\u7F6E\u6A21\u578B\uFF09${t.reset}
|
|
885
|
+
`);for(let o of Me){let a=r.providers[o.id]!==void 0?` ${t.gray}\xB7 \u5DF2\u586B\u5199 Key${t.reset}`:"";if(process.stdout.write(`
|
|
885
886
|
${t.bold}${o.label}${t.reset} ${t.gray}(${o.id})${t.reset}${a}
|
|
886
887
|
`),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}
|
|
887
|
-
`);continue}for(let l of o.models){let c=
|
|
888
|
-
`)}}let s=new Set(
|
|
888
|
+
`);continue}for(let l of o.models){let c=Ee(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}
|
|
889
|
+
`)}}let s=new Set(Me.flatMap(o=>o.models.map(a=>Ee(o.id,a)))),i=W(r).filter(o=>!s.has(o.id));if(i.length>0){process.stdout.write(`
|
|
889
890
|
${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}
|
|
890
891
|
`);for(let o of i)process.stdout.write(` ${t.brightGreen}\u276F${t.reset} ${o.id}
|
|
891
892
|
`)}process.stdout.write(`
|
|
892
893
|
${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}
|
|
893
894
|
${t.gray}\u67E5\u770B\u5DF2\u914D\u7F6E\u7684\u6A21\u578B\uFF1A${t.reset}xzh model list
|
|
894
|
-
`)}async function
|
|
895
|
+
`)}async function jd(){for(;;){let r=de();switch(vs(r),await Le("\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 ys([]);break;case"list":vs(r);break;case"remove":await _a([]);break;case"context":await Ra([]);break;default:process.stdout.write(`
|
|
895
896
|
${t.gray}\u5DF2\u9000\u51FA\u6A21\u578B\u7BA1\u7406\u3002${t.reset}
|
|
896
|
-
`);return}}}function
|
|
897
|
-
${t.bold}\u7384\u732A\u6A21\u578B\u5217\u8868${t.reset} ${t.gray}(${
|
|
897
|
+
`);return}}}function vs(r){let e=W(r),n=_e(r);if(process.stdout.write(`
|
|
898
|
+
${t.bold}\u7384\u732A\u6A21\u578B\u5217\u8868${t.reset} ${t.gray}(${z()})${t.reset}
|
|
898
899
|
`),e.length===0){process.stdout.write(` ${t.yellow}\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\u3002${t.reset}
|
|
899
900
|
${t.gray}\u8FD0\u884C ${t.reset}xzh model add <provider> <model>${t.gray} \u6DFB\u52A0\u3002${t.reset}
|
|
900
|
-
`);return}e.forEach((s,i)=>{let o=n!==null&&s.id===n.id,a=o?`${t.brightGreen}\u276F${t.reset}`:" ",l=o?` ${t.gray}\u2190 \u5F53\u524D\u4F7F\u7528${t.reset}`:"",c=
|
|
901
|
+
`);return}e.forEach((s,i)=>{let o=n!==null&&s.id===n.id,a=o?`${t.brightGreen}\u276F${t.reset}`:" ",l=o?` ${t.gray}\u2190 \u5F53\u524D\u4F7F\u7528${t.reset}`:"",c=Pe(s.contextWindow??Ve(s.model)),u=Xe(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}
|
|
901
902
|
`)}),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}
|
|
902
|
-
`)}function
|
|
903
|
+
`)}function Pa(r){let e=_e(r);e?process.stdout.write(`${t.gray}\u4E0B\u6B21\u542F\u52A8\u5C06\u4F7F\u7528\u4E0A\u6B21\u7528\u8FC7\u7684\u6A21\u578B\uFF1A${t.reset}${t.bold}${e.id}${t.reset}
|
|
903
904
|
`):(r.models??[]).length===0&&process.stdout.write(`${t.yellow}\u26A0 \u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\uFF0C\u8FD0\u884C ${t.reset}xzh model add <provider> <model>${t.yellow} \u6DFB\u52A0\u3002${t.reset}
|
|
904
905
|
`),process.stdout.write(`
|
|
905
906
|
\u8FD0\u884C ${t.brightGreen}xzh${t.reset} \u5F00\u59CB\u4F7F\u7528\u3002
|
|
906
|
-
`)}function
|
|
907
|
+
`)}function Fd(){process.stdout.write(`
|
|
907
908
|
${t.bold}xzh model \u2014\u2014 \u591A\u6A21\u578B\u7BA1\u7406${t.reset}
|
|
908
909
|
${t.green}xzh model${t.reset} \u4EA4\u4E92\u5F0F\u83DC\u5355
|
|
909
910
|
${t.green}xzh model list${t.reset} \u5217\u51FA\u5DF2\u914D\u7F6E\u7684\u6A21\u578B\uFF08\u6309\u56DE\u9000\u987A\u5E8F\uFF09
|
|
@@ -919,24 +920,24 @@ ${t.bold}\u591A\u6A21\u578B\u4E0E\u56DE\u9000${t.reset}
|
|
|
919
920
|
\u76F4\u5230\u6240\u6709\u6A21\u578B\u90FD\u8BD5\u8FC7\u624D\u62A5\u9519\u3002**\u5217\u8868\u987A\u5E8F\u5373\u4F18\u5148\u7EA7**\uFF0C\u4E0D\u518D\u6709\u6743\u91CD\u8BBE\u7F6E \u2014\u2014
|
|
920
921
|
\u4E0D\u60F3\u8BA9\u67D0\u4E2A\u6A21\u578B\u53C2\u4E0E\uFF0C\u76F4\u63A5 ${t.green}xzh model remove${t.reset} \u5220\u6389\u5373\u53EF\u3002
|
|
921
922
|
|
|
922
|
-
${t.gray}\u53EF\u7528 provider\uFF1A${
|
|
923
|
-
`)}async function
|
|
924
|
-
`),n):o}process.stdout.write(`${t.gray} \u4E0A\u4E0B\u6587\u7A97\u53E3\uFF1A\u6309\u6A21\u578B\u540D\u63A8\u65AD\u4E3A ${
|
|
925
|
-
`);let s=await Ke("\u8BF7\u8F93\u5165\u4E0A\u4E0B\u6587\u7A97\u53E3\u5927\u5C0F\uFF08token\uFF0C\u5982 128000\uFF1B\u56DE\u8F66\u4F7F\u7528\u63A8\u65AD\u503C\uFF09",String(n)),i=
|
|
926
|
-
`),n):i}function
|
|
923
|
+
${t.gray}\u53EF\u7528 provider\uFF1A${Me.map(r=>r.id).join(", ")}${t.reset}
|
|
924
|
+
`)}async function Bd(){return Le("\u9009\u62E9 AI \u670D\u52A1\u5546\uFF1A",[...Me.map(r=>({label:r.label,value:r.id,hint:r.id})),{label:"\u8FD4\u56DE",value:""}],0)}async function Ud(r,e,n){let s=n.providers[r]?.model;if(e.length>0){let o=[...e.map(c=>({label:c,value:c})),{label:"\u624B\u52A8\u8F93\u5165\u6A21\u578B\u540D",value:"__custom__"},{label:"\u8FD4\u56DE",value:""}],a=s?Math.max(0,e.indexOf(s)):0,l=await Le(`\u9009\u62E9\u6A21\u578B\uFF08${r}\uFF09\uFF1A`,o,a);if(l!=="__custom__")return l}return await Ke("\u8BF7\u8F93\u5165\u6A21\u578B\u540D\u79F0",s)}async function zd(r,e,n){let s=n.providers[r]?.baseUrl;return e?await Ke("\u8BF7\u8F93\u5165 API \u7AEF\u70B9 baseUrl",s):s??""}function bs(r){let e=r.trim().toLowerCase().replace(/[_,\s]/g,"");if(!e)return;let n=/^(\d+(?:\.\d+)?)(k|m|万)?$/.exec(e);if(!n)return;let s=Number(n[1]);if(!Number.isFinite(s)||s<=0)return;let i=n[2],a=Math.floor(s*(i==="k"?1e3:i==="m"?1e6:i==="\u4E07"?1e4:1));return a>0?a:void 0}async function Gd(r,e){let n=Ve(r);if(e!==void 0&&e.trim()!==""){let o=bs(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 ${Pe(n)}\u3002${t.reset}
|
|
925
|
+
`),n):o}process.stdout.write(`${t.gray} \u4E0A\u4E0B\u6587\u7A97\u53E3\uFF1A\u6309\u6A21\u578B\u540D\u63A8\u65AD\u4E3A ${Pe(n)} token\u3002${t.reset}
|
|
926
|
+
`);let s=await Ke("\u8BF7\u8F93\u5165\u4E0A\u4E0B\u6587\u7A97\u53E3\u5927\u5C0F\uFF08token\uFF0C\u5982 128000\uFF1B\u56DE\u8F66\u4F7F\u7528\u63A8\u65AD\u503C\uFF09",String(n)),i=bs(s);return i===void 0?(process.stdout.write(`${t.yellow} \u65E0\u6CD5\u8BC6\u522B\u300C${s}\u300D\uFF0C\u5DF2\u4F7F\u7528\u63A8\u65AD\u503C ${Pe(n)}\u3002${t.reset}
|
|
927
|
+
`),n):i}function Ss(r){let e=r.trim().toLowerCase();if(["on","true","yes","y","1"].includes(e))return!0;if(["off","false","no","n","0"].includes(e))return!1}async function Jd(r,e,n){let s=Xe({provider:r,model:e}),i=s?"\u652F\u6301":"\u4E0D\u652F\u6301";if(n!==void 0&&n.trim()!==""){let c=Ss(n);return c!==void 0?c:(process.stdout.write(`${t.yellow}\u65E0\u6CD5\u8BC6\u522B\u56FE\u7247\u8F93\u5165\u8BBE\u7F6E\u300C${n}\u300D\uFF0C\u5DF2\u4F7F\u7528${i}\u3002${t.reset}
|
|
927
928
|
`),s)}let o=r==="custom"?"\uFF08\u81EA\u5B9A\u4E49\u7AEF\u70B9\u9ED8\u8BA4\u6309\u652F\u6301\u5904\u7406\uFF09":`\uFF08\u6309\u6A21\u578B\u540D\u63A8\u65AD\u4E3A${i}\uFF09`;process.stdout.write(`${t.gray} \u56FE\u7247\u8F93\u5165\uFF1A${o}\u3002${t.reset}
|
|
928
|
-
`);let a=await Ke("\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=
|
|
929
|
-
`),s)}async function
|
|
930
|
-
`),await Ke("\u8BF7\u8F93\u5165 API Key",i??"",{mask:!0})):i??""}function
|
|
929
|
+
`);let a=await Ke("\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=Ss(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}
|
|
930
|
+
`),s)}async function Hd(r,e,n){let s=Ie(r),i=n.providers[r]?.apiKey;return s?.requiresApiKey?(on(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}
|
|
931
|
+
`),await Ke("\u8BF7\u8F93\u5165 API Key",i??"",{mask:!0})):i??""}function xs(r,e){let n=W(r),s=n.find(o=>o.id===e);if(s)return s.id;let i=n.find(o=>o.model===e);if(i)return i.id;if(/^\d+$/.test(e.trim())){let o=Number.parseInt(e,10);if(o>=1&&o<=n.length)return n[o-1].id}return null}async function ws(r,e){return await Le(e,[...r.map(s=>({label:`${s.id} ctx ${Pe(s.contextWindow??Ve(s.model))}`,value:s.id})),{label:"\u8FD4\u56DE",value:""}],0)}async function Ma(){let r=Oe();process.stdout.write(`
|
|
931
932
|
${t.bold}\u7384\u732A\u4F9D\u8D56\u68C0\u67E5${t.reset} ${t.gray}(\u5E73\u53F0\uFF1A${r})${t.reset}
|
|
932
933
|
|
|
933
|
-
`);let e=[...
|
|
934
|
+
`);let e=[...To(r).map(o=>({requirement:o,owner:"\u7384\u732A\uFF08Ctrl+V \u7C98\u8D34\u56FE\u7247\uFF09"})),...xo().flatMap(o=>St(o).map(a=>({requirement:a,owner:`\u6280\u80FD ${o}`})))],n=[],s=[],i=[];for(let{requirement:o,owner:a}of e){if(await et(o)){process.stdout.write(`${t.green}\u2713${t.reset} ${o.name} ${t.gray}\u5DF2\u5B89\u88C5${t.reset}
|
|
934
935
|
`);continue}let l=o.install[r];if(!l){process.stdout.write(`${t.yellow}\u26A0${t.reset} ${o.name} ${t.gray}\u5F53\u524D\u5E73\u53F0\u65E0\u81EA\u52A8\u5B89\u88C5\u547D\u4EE4${t.reset}
|
|
935
936
|
`),i.push(o.name);continue}if(process.stdout.write(`
|
|
936
937
|
${t.yellow}\u25CF${t.reset} ${t.bold}${o.name}${t.reset} ${t.gray}\u672A\u5B89\u88C5${t.reset}
|
|
937
938
|
${t.gray}\u6240\u5C5E\uFF1A${a}${t.reset}
|
|
938
939
|
${t.gray}\u5B89\u88C5\u547D\u4EE4\uFF1A${t.reset}${l}
|
|
939
|
-
`),!await qe(" \u662F\u5426\u73B0\u5728\u5B89\u88C5\uFF1F",!0)){i.push(o.name);continue}(await
|
|
940
|
+
`),!await qe(" \u662F\u5426\u73B0\u5728\u5B89\u88C5\uFF1F",!0)){i.push(o.name);continue}(await rs(o,r,void 0,h=>process.stdout.write(`${t.gray} ${h}${t.reset}
|
|
940
941
|
`),{interactive:!0})).ok?(process.stdout.write(`${t.green} \u2713 ${o.name} \u5B89\u88C5\u5B8C\u6210${t.reset}
|
|
941
942
|
`),n.push(o.name)):(process.stdout.write(`${t.red} \u2717 ${o.name} \u5B89\u88C5\u5931\u8D25${t.reset}
|
|
942
943
|
`),s.push(o.name))}process.stdout.write(`
|
|
@@ -947,64 +948,64 @@ ${t.bold}\u7ED3\u679C${t.reset}
|
|
|
947
948
|
`)),e.length===0?process.stdout.write(` ${t.gray}\u5F53\u524D\u5E73\u53F0\u6CA1\u6709\u9700\u8981\u68C0\u67E5\u7684\u4F9D\u8D56\u3002${t.reset}
|
|
948
949
|
`):n.length===0&&i.length===0&&s.length===0&&process.stdout.write(` ${t.green}\u6240\u6709\u4F9D\u8D56\u5747\u5DF2\u5C31\u7EEA\u3002${t.reset}
|
|
949
950
|
`),process.stdout.write(`
|
|
950
|
-
`)}var
|
|
951
|
-
`),
|
|
951
|
+
`)}var Oa=v(require("fs")),Cs=v(require("path"));var Kd=52;async function La(r){switch(r[0]?.trim().toLowerCase()){case void 0:await qd();return;case"list":case"ls":Na(!0);return;case"enable":case"on":await Ts(r.slice(1),!0);return;case"disable":case"off":await Ts(r.slice(1),!1);return;case"delete":case"remove":case"rm":await ja(r.slice(1));return;case"help":case"-h":case"--help":Da();return;default:process.stdout.write(`${t.red}\u672A\u77E5\u5B50\u547D\u4EE4\uFF1A${r[0]}${t.reset}
|
|
952
|
+
`),Da(),process.exitCode=1}}function Na(r){let e=fe({includeDisabled:!0}),n=fe(),s=e.filter(a=>a.source==="builtin").length,i=e.length-s,o=Cs.join(E(),"skills.json");if(process.stdout.write(`
|
|
952
953
|
${t.bold}\u7384\u732A\u6280\u80FD\u5217\u8868${t.reset} ${t.gray}(\u5185\u7F6E ${s} \xB7 \u7528\u6237 ${i} \xB7 \u5DF2\u7981\u7528 ${e.length-n.length} \xB7 ${o})${t.reset}
|
|
953
954
|
`),e.length===0){process.stdout.write(` ${t.yellow}\u6CA1\u6709\u53D1\u73B0\u4EFB\u4F55\u6280\u80FD\u3002${t.reset}
|
|
954
955
|
${t.gray}\u628A\u542B SKILL.md \u7684\u76EE\u5F55\u653E\u8FDB ${t.reset}~/.xzh/skills/<name>${t.gray} \u5373\u53EF\u3002${t.reset}
|
|
955
|
-
`);return}for(let a of e){let l=!n.some(m=>m.name===a.name),c=l?`${t.yellow}\u2717${t.reset}`:`${t.green}\u2713${t.reset}`,u=a.source==="user"?`${t.cyan}\u7528\u6237${t.reset}`:"\u5185\u7F6E",h=l?`${t.gray}\uFF08\u5DF2\u7981\u7528\uFF09${t.reset} `:"",d=
|
|
956
|
-
`)}}async function
|
|
956
|
+
`);return}for(let a of e){let l=!n.some(m=>m.name===a.name),c=l?`${t.yellow}\u2717${t.reset}`:`${t.green}\u2713${t.reset}`,u=a.source==="user"?`${t.cyan}\u7528\u6237${t.reset}`:"\u5185\u7F6E",h=l?`${t.gray}\uFF08\u5DF2\u7981\u7528\uFF09${t.reset} `:"",d=Nt(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,Kd)}${t.reset}
|
|
957
|
+
`)}}async function Ts(r,e){let n=e?"\u542F\u7528":"\u7981\u7528",s=r.find(c=>!c.startsWith("-"));if(s){let c=fe({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}
|
|
957
958
|
${t.gray}\u8FD0\u884C ${t.reset}xzh skill list${t.gray} \u67E5\u770B\u5168\u90E8\u6280\u80FD\u3002${t.reset}
|
|
958
|
-
`),process.exitCode=1;return}
|
|
959
|
+
`),process.exitCode=1;return}Ia(c,e);return}let i=new Set(fe().map(c=>c.name)),o=fe({includeDisabled:!0}).filter(c=>e?!i.has(c.name):i.has(c.name));if(o.length===0){process.stdout.write(`${t.yellow}\u6CA1\u6709\u53EF${n}\u7684\u6280\u80FD\u3002${t.reset}
|
|
959
960
|
${t.gray}\u8FD0\u884C ${t.reset}xzh skill list${t.gray} \u67E5\u770B\u5F53\u524D\u72B6\u6001\u3002${t.reset}
|
|
960
|
-
`);return}let a=await
|
|
961
|
+
`);return}let a=await Le(`\u9009\u62E9\u8981${n}\u7684\u6280\u80FD\uFF1A`,[...o.map(c=>({label:c.name,value:c.name,hint:`${c.source==="user"?"\u7528\u6237":"\u5185\u7F6E"} \xB7 ${O(c.description,36)}`})),{label:"\u53D6\u6D88",value:""}],0);if(!a)return;let l=o.find(c=>c.name===a);l&&Ia(l,e)}function Ia(r,e){if(!Cn(r.name,!e)){process.stdout.write(`${t.yellow}\u6280\u80FD\u300C${r.name}\u300D\u672C\u6765\u5C31\u5904\u4E8E${e?"\u542F\u7528":"\u7981\u7528"}\u72B6\u6001\u3002${t.reset}
|
|
961
962
|
`);return}let s=e?`${t.green}\u5DF2\u542F\u7528${t.reset}`:`${t.yellow}\u5DF2\u7981\u7528${t.reset}`;process.stdout.write(`${s}\u6280\u80FD\u300C${t.bold}${r.name}${t.reset}\u300D${t.gray}(\u6765\u6E90\uFF1A${r.source==="user"?"\u7528\u6237":"\u5185\u7F6E"})${t.reset}
|
|
962
963
|
${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}
|
|
963
|
-
`)}async function
|
|
964
|
+
`)}async function ja(r){let e=r.some(i=>i==="--yes"||i==="-y"),n=r.find(i=>!i.startsWith("-")),s;if(n){if(s=fe({includeDisabled:!0}).find(i=>i.name.toLowerCase()===n.trim().toLowerCase()),!s){process.stdout.write(`${t.red}\u672A\u627E\u5230\u6280\u80FD\uFF1A${n}${t.reset}
|
|
964
965
|
${t.gray}\u8FD0\u884C ${t.reset}xzh skill list${t.gray} \u67E5\u770B\u5168\u90E8\u6280\u80FD\u3002${t.reset}
|
|
965
|
-
`),process.exitCode=1;return}}else{let i=
|
|
966
|
+
`),process.exitCode=1;return}}else{let i=fe({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}
|
|
966
967
|
${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}
|
|
967
|
-
`);return}let o=await
|
|
968
|
+
`);return}let o=await Le("\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}
|
|
968
969
|
${t.gray}\u5982\u9700\u9690\u85CF\uFF0C\u8FD0\u884C ${t.reset}xzh skill disable ${s.name}${t.gray}\u3002${t.reset}
|
|
969
970
|
`),process.exitCode=1;return}if(!e&&!await qe(`\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}
|
|
970
|
-
`);return}try{
|
|
971
|
-
`),process.exitCode=1;return}
|
|
971
|
+
`);return}try{Oa.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}
|
|
972
|
+
`),process.exitCode=1;return}Cn(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}
|
|
972
973
|
${t.gray}\u76EE\u5F55\uFF1A${s.dir}${t.reset}
|
|
973
974
|
${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}
|
|
974
|
-
`)}}async function
|
|
975
|
+
`)}}async function qd(){if(!process.stdin.isTTY){process.stdout.write(`${t.yellow}\u4EA4\u4E92\u5F0F\u6280\u80FD\u7BA1\u7406\u9700\u8981 TTY\u3002${t.reset}
|
|
975
976
|
${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}
|
|
976
|
-
`),process.exitCode=1;return}for(;;)switch(
|
|
977
|
+
`),process.exitCode=1;return}for(;;)switch(Na(!0),await Le("\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 Ts([],!0);break;case"delete":await ja([]);break;default:process.stdout.write(`
|
|
977
978
|
${t.gray}\u5DF2\u9000\u51FA\u6280\u80FD\u7BA1\u7406\u3002${t.reset}
|
|
978
|
-
`);return}}function
|
|
979
|
-
`))}process.stdout.on("error",r=>{r.code==="EPIPE"&&process.exit(0)});process.stderr.on("error",()=>{});var
|
|
979
|
+
`);return}}function Da(){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}${Cs.join(E(),"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(`
|
|
980
|
+
`))}process.stdout.on("error",r=>{r.code==="EPIPE"&&process.exit(0)});process.stderr.on("error",()=>{});var Yn;for(let r of["SIGTERM","SIGHUP"])process.on(r,()=>{if(Yn){Yn.requestShutdown(r==="SIGHUP"?"\u7EC8\u7AEF\u8FDE\u63A5\u5DF2\u65AD\u5F00":`\u6536\u5230 ${r}`),setTimeout(()=>{Wn(),kt(),process.exit(0)},1500).unref();return}Wn(),kt(),process.exit(0)});process.on("uncaughtException",r=>{gs("\u672A\u6355\u83B7\u5F02\u5E38",r);let e=tt({kind:"uncaught-exception",category:"bug",error:r,cwd:process.cwd()});kt(),process.stderr.write(`
|
|
980
981
|
\u672A\u6355\u83B7\u5F02\u5E38\uFF1A${r?.stack??String(r)}
|
|
981
|
-
`),process.stderr.write(`\u8BE6\u60C5\u5DF2\u5199\u5165 ${
|
|
982
|
+
`),process.stderr.write(`\u8BE6\u60C5\u5DF2\u5199\u5165 ${Xn()}
|
|
982
983
|
`),e&&process.stderr.write(`\u9519\u8BEF\u62A5\u544A\uFF1A${e}
|
|
983
|
-
`),process.exit(1)});process.on("unhandledRejection",r=>{
|
|
984
|
+
`),process.exit(1)});process.on("unhandledRejection",r=>{gs("\u672A\u5904\u7406\u7684 Promise \u62D2\u7EDD",r);let e=tt({kind:"unhandled-rejection",category:"bug",error:r,cwd:process.cwd()});kt(),process.stderr.write(`
|
|
984
985
|
\u672A\u5904\u7406\u7684 Promise \u62D2\u7EDD\uFF1A${String(r)}
|
|
985
|
-
`),process.stderr.write(`\u8BE6\u60C5\u5DF2\u5199\u5165 ${
|
|
986
|
+
`),process.stderr.write(`\u8BE6\u60C5\u5DF2\u5199\u5165 ${Xn()}
|
|
986
987
|
`),e&&process.stderr.write(`\u9519\u8BEF\u62A5\u544A\uFF1A${e}
|
|
987
|
-
`),process.exit(1)});async function
|
|
988
|
-
`);let e=process.argv.slice(2),n;e.includes("--intent")?n=!0:e.includes("--no-intent")&&(n=!1);let s=e.filter(o=>o!=="--intent"&&o!=="--no-intent"),i=s[0];switch(i){case void 0:await
|
|
989
|
-
`);return;default:{if(i.startsWith("-")){
|
|
988
|
+
`),process.exit(1)});async function Wd(){let r=Rs();r.migrated&&process.stdout.write(`${t.gray}\u5DF2\u5C06\u5168\u5C40\u76EE\u5F55\u8FC1\u79FB\u81F3 ${E()}${r.from?`\uFF08\u539F ${r.from}\uFF09`:""}${t.reset}
|
|
989
|
+
`);let e=process.argv.slice(2),n;e.includes("--intent")?n=!0:e.includes("--no-intent")&&(n=!1);let s=e.filter(o=>o!=="--intent"&&o!=="--no-intent"),i=s[0];switch(i){case void 0:await Fa(void 0,n);return;case"model":await Ea(s.slice(1));return;case"config":await xa(s.slice(1));return;case"setup":await Ma();return;case"init":await Aa(s.slice(1));return;case"skill":await La(s.slice(1));return;case"errors":await ka(s.slice(1));return;case"device":await Pi(s.slice(1));return;case"help":case"-h":case"--help":Ba();return;case"version":case"-v":case"--version":process.stdout.write(`\u7384\u732A xzh v${B}
|
|
990
|
+
`);return;default:{if(i.startsWith("-")){Ba();return}let o=Vd(i);if(o){await Fa(o,n);return}if(Xd(i)){process.stdout.write(`${t.red}\u76EE\u5F55\u4E0D\u5B58\u5728\u6216\u4E0D\u662F\u76EE\u5F55\uFF1A${i}${t.reset}
|
|
990
991
|
`),process.exitCode=1;return}process.stdout.write(`${t.red}\u672A\u77E5\u547D\u4EE4\uFF1A${i}${t.reset}
|
|
991
992
|
${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}
|
|
992
|
-
`),process.exitCode=1}}}function
|
|
993
|
+
`),process.exitCode=1}}}function Xd(r){return r.startsWith("/")||r.startsWith("~")||r.startsWith("./")||r.startsWith("../")||r==="."||r===".."}function Vd(r){let e=ee(r),n=Zn.isAbsolute(e)?e:Zn.resolve(process.cwd(),e);try{if(At.existsSync(n)&&At.statSync(n).isDirectory())return At.realpathSync(n)}catch{}return null}async function Fa(r,e){if(!process.stdin.isTTY||!process.stdout.isTTY){process.stdout.write(`${t.red}\u7384\u732A\u9700\u8981\u4EA4\u4E92\u5F0F\u7EC8\u7AEF\uFF08TTY\uFF09\u3002${t.reset}
|
|
993
994
|
${t.gray}\u8BF7\u5728\u771F\u5B9E\u7EC8\u7AEF\u4E2D\u8FD0\u884C xzh\u3002${t.reset}
|
|
994
|
-
`),process.exitCode=1;return}let n=
|
|
995
|
+
`),process.exitCode=1;return}let n=de(),s=_e(n);if(!s){process.stdout.write(`${t.yellow}\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\u3002${t.reset}
|
|
995
996
|
${t.gray}\u8BF7\u5148\u8FD0\u884C ${t.reset}xzh model add <provider> <model>${t.gray} \u6DFB\u52A0\u6A21\u578B\u3002${t.reset}
|
|
996
|
-
`),process.exitCode=1;return}let i
|
|
997
|
+
`),process.exitCode=1;return}let i=vr(n,s);if(i.length>0){process.stdout.write(`${t.yellow}\u26A0 \u5F53\u524D\u6A21\u578B\u4E0D\u53EF\u7528\uFF1A${t.reset}
|
|
997
998
|
`);for(let u of i)process.stdout.write(` ${t.gray}\xB7${t.reset} ${u}
|
|
998
999
|
`);_t()?process.stdout.write(`
|
|
999
|
-
${t.gray}\u914D\u7F6E\u6587\u4EF6\uFF1A${
|
|
1000
|
+
${t.gray}\u914D\u7F6E\u6587\u4EF6\uFF1A${z()}${t.reset}
|
|
1000
1001
|
`):process.stdout.write(`
|
|
1001
1002
|
${t.gray}\u63D0\u793A\uFF1A\u8FD0\u884C ${t.reset}xzh model${t.gray} \u5B8C\u6210\u521D\u59CB\u5316\u914D\u7F6E\u3002${t.reset}
|
|
1002
|
-
`),process.exitCode=1;return}let o=
|
|
1003
|
+
`),process.exitCode=1;return}let o=li(n).filter(u=>!i.includes(u));if(o.length>0){process.stdout.write(`${t.yellow}\u26A0 ${o.length} \u4E2A\u5907\u7528\u6A21\u578B\u6682\u4E0D\u53EF\u7528\uFF08\u4E0D\u5F71\u54CD\u672C\u6B21\u542F\u52A8\uFF09\uFF1A${t.reset}
|
|
1003
1004
|
`);for(let u of o)process.stdout.write(` ${t.gray}\xB7${t.reset} ${u}
|
|
1004
|
-
`)}let a=
|
|
1005
|
-
`).slice(-10))n.push(`${t.gray} ${s}${t.reset}`)}else n.push(`${t.gray} \u672A\u7559\u4E0B\u65E5\u5FD7 \u2014\u2014 \u591A\u4E3A\u8FDB\u7A0B\u88AB\u5F3A\u5236\u7EC8\u6B62\uFF08\u4F8B\u5982\u5185\u5B58\u4E0D\u8DB3\u88AB\u7CFB\u7EDF\u6740\u6389\uFF09${t.reset}`);return n.push(`${t.gray} \u5B8C\u6574\u65E5\u5FD7\uFF1A${
|
|
1006
|
-
`)}function
|
|
1007
|
-
${t.brightMagenta}${t.bold}\u7384\u732A XuanZhu${t.reset} ${t.gray}v${
|
|
1005
|
+
`)}let a=Ie(s.provider),l=It(n,s),c=new Kn({provider:l,config:n,cwd:r??process.cwd(),providerLabel:a?.label??s.provider,model:s.model,activeModel:s,intentEnabled:e!==void 0?e:n.intent?.enabled===!0,autoApprove:n.autoApprove,startupNotice:Yd()});Yn=c,await c.start(),Yn=void 0,Wn()}function Yd(){let r=va(B);if(!r)return;let e=r.startedAt?`\uFF08\u5F00\u59CB\u4E8E ${r.startedAt}\uFF09`:"",n=[`${t.yellow}\u26A0 \u4E0A\u6B21\u8FD0\u884C\u7591\u4F3C\u5F02\u5E38\u9000\u51FA${e}${t.reset}`];if(r.crashLog){n.push(`${t.gray} \u6700\u540E\u7684\u8BB0\u5F55\uFF1A${t.reset}`);for(let s of r.crashLog.trim().split(`
|
|
1006
|
+
`).slice(-10))n.push(`${t.gray} ${s}${t.reset}`)}else n.push(`${t.gray} \u672A\u7559\u4E0B\u65E5\u5FD7 \u2014\u2014 \u591A\u4E3A\u8FDB\u7A0B\u88AB\u5F3A\u5236\u7EC8\u6B62\uFF08\u4F8B\u5982\u5185\u5B58\u4E0D\u8DB3\u88AB\u7CFB\u7EDF\u6740\u6389\uFF09${t.reset}`);return n.push(`${t.gray} \u5B8C\u6574\u65E5\u5FD7\uFF1A${Xn()}${t.reset}`,""),n.join(`
|
|
1007
|
+
`)}function Ba(){let r=`
|
|
1008
|
+
${t.brightMagenta}${t.bold}\u7384\u732A XuanZhu${t.reset} ${t.gray}v${B} \u2014\u2014 \u4E13\u4E3A\u7EC8\u7AEF\u6253\u9020\u7684 AI \u7F16\u7801 Agent${t.reset}
|
|
1008
1009
|
|
|
1009
1010
|
${t.bold}\u7528\u6CD5${t.reset}
|
|
1010
1011
|
${t.green}xzh${t.reset} \u5728\u5F53\u524D\u76EE\u5F55\u542F\u52A8\u4EA4\u4E92\u5F0F\u7EC8\u7AEF\u754C\u9762
|
|
@@ -1060,7 +1061,7 @@ ${t.bold}\u652F\u6301\u7684 Provider${t.reset}
|
|
|
1060
1061
|
deepseek \xB7 anthropic \xB7 openai \xB7 gemini \xB7 glm \xB7 qwen \xB7 groq \xB7 ollama \xB7 custom
|
|
1061
1062
|
|
|
1062
1063
|
${t.bold}\u914D\u7F6E${t.reset}
|
|
1063
|
-
\u914D\u7F6E\u6587\u4EF6\uFF1A${t.gray}${
|
|
1064
|
+
\u914D\u7F6E\u6587\u4EF6\uFF1A${t.gray}${z()}${t.reset}
|
|
1064
1065
|
API Key \u4E5F\u53EF\u901A\u8FC7\u73AF\u5883\u53D8\u91CF\u63D0\u4F9B\uFF08\u5982 DEEPSEEK_API_KEY / ANTHROPIC_API_KEY\uFF09\u3002
|
|
1065
1066
|
|
|
1066
1067
|
${t.bold}\u610F\u56FE\u5206\u6790${t.reset}
|
|
@@ -1078,6 +1079,6 @@ ${t.bold}\u754C\u9762\u5185\u5FEB\u6377\u952E${t.reset}
|
|
|
1078
1079
|
Ctrl+L \u6E05\u5C4F \xB7 Ctrl+V \u7C98\u8D34\u56FE\u7247 \xB7 Shift+Tab \u5207\u6362\u53F3\u4FA7\u7EC8\u7AEF \xB7 \u8F93\u5165 /help \u67E5\u770B\u5185\u7F6E\u547D\u4EE4
|
|
1079
1080
|
\u5207\u6362\u9879\u76EE\u76EE\u5F55\uFF1A\u5728\u754C\u9762\u4E2D\u8F93\u5165 ${t.green}/switch <\u76EE\u5F55>${t.reset}
|
|
1080
1081
|
\u4E34\u65F6\u6362\u6A21\u578B\uFF1A${t.green}/model${t.reset}\uFF08\u2191 \u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4\uFF09
|
|
1081
|
-
`;process.stdout.write(r)}
|
|
1082
|
-
${t.red}\u7384\u732A\u8FD0\u884C\u51FA\u9519\uFF1A${
|
|
1082
|
+
`;process.stdout.write(r)}Wd().catch(r=>{process.stdout.write(`
|
|
1083
|
+
${t.red}\u7384\u732A\u8FD0\u884C\u51FA\u9519\uFF1A${ne(r)}${t.reset}
|
|
1083
1084
|
`),process.exit(1)});
|