xuanzhu 0.1.9 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -2
- package/dist/cli.js +138 -121
- package/docs/README.en.md +16 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -457,8 +457,20 @@ kitty / Ghostty 会把该 xterm 兼容序列映射成「所有按键都用转义
|
|
|
457
457
|
| --- | --- |
|
|
458
458
|
| **在输出区拖拽** | 玄猪自己实现的选择(按整行)。松开即复制,不需按键、不占 `/mouse` |
|
|
459
459
|
| 按住 **Shift** 拖拽 | 使用**终端原生**框选(多数终端用 Shift 绕过应用级捕获),需要精确到字符时用 |
|
|
460
|
-
| `/copy [N\|A-B\|last\|all]` |
|
|
461
|
-
| `/
|
|
460
|
+
| `/copy [N\|A-B\|last\|all]` | 主动复制**左侧对话区**。支持 `/copy 100`(最近 100 行)、`/copy 100-200`(行号范围)、`/copy last`(最近一次对话)、`/copy all`(全部) |
|
|
461
|
+
| `/copy term [N\|A-B\|all]` | 主动复制**右侧终端输出**(默认最近 30 行) |
|
|
462
|
+
| `/mouse` | 切换鼠标捕获(默认**开启**:滚轮滚动输出区 + 拖拽选择)。关掉则把鼠标完全交还终端 |
|
|
463
|
+
|
|
464
|
+
> **为什么多行拖选会把两栏内容混在一起**:终端原生的选择是**矩形选择** ——
|
|
465
|
+
> 它只知道「从第几列到第几列」,**看不到应用的分栏**。所以从左侧拖到右侧、
|
|
466
|
+
> 或反向拖动时,同一个屏幕行上的两栏文字都会被纳入。这是协议层面的限制,
|
|
467
|
+
> 应用无法干预。
|
|
468
|
+
>
|
|
469
|
+
> 要复制**单栏**内容,用命令式复制(`/copy` 左栏、`/copy term` 右栏)——
|
|
470
|
+
> 它们按栏取内容,绝不会串栏。玄猪自己的拖拽选择(`/mouse` 开启时)也限定在左栏。
|
|
471
|
+
>
|
|
472
|
+
> 反之,若只想要终端原生的框选与右键菜单:按 `Shift` 拖拽临时绕过,
|
|
473
|
+
> 或用 `/mouse` 关闭捕获(此时滚动输出区改用 `PgUp`/`PgDn`)。
|
|
462
474
|
|
|
463
475
|
> **为什么拖拽选择要自己实现**:终端协议里的 `?1000h` 是**整体开关** ——
|
|
464
476
|
> 开启后终端把所有鼠标事件都交给程序,原生选择随之失效;关闭后滚轮又没用了
|
package/dist/cli.js
CHANGED
|
@@ -1,39 +1,40 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var bn=Object.create;var Ft=Object.defineProperty;var wn=Object.getOwnPropertyDescriptor;var vn=Object.getOwnPropertyNames;var Cn=Object.getPrototypeOf,Sn=Object.prototype.hasOwnProperty;var Tn=(n,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of vn(e))!Sn.call(n,i)&&i!==r&&Ft(n,i,{get:()=>e[i],enumerable:!(s=wn(e,i))||s.enumerable});return n};var
|
|
3
|
-
\u6D88\u606F\uFF1A${e}`}var _n=1,
|
|
4
|
-
`,s=`${e}.${process.pid}.tmp`;
|
|
2
|
+
"use strict";var bn=Object.create;var Ft=Object.defineProperty;var wn=Object.getOwnPropertyDescriptor;var vn=Object.getOwnPropertyNames;var Cn=Object.getPrototypeOf,Sn=Object.prototype.hasOwnProperty;var Tn=(n,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of vn(e))!Sn.call(n,i)&&i!==r&&Ft(n,i,{get:()=>e[i],enumerable:!(s=wn(e,i))||s.enumerable});return n};var v=(n,e,r)=>(r=n!=null?bn(Cn(n)):{},Tn(e||!n||!n.__esModule?Ft(r,"default",{value:n,enumerable:!0}):r,n));var ve=v(require("fs")),at=v(require("path"));var B=v(require("fs"));var L=v(require("fs")),Se=v(require("os")),z=v(require("path"));function R(){let n=process.env.XZH_HOME?.trim();return n?z.resolve(q(n)):z.join(Se.homedir(),".xzh")}function En(){return!!process.env.XZH_HOME?.trim()}function kn(){return z.join(Se.homedir(),".xuanzhu")}function _(){return z.join(R(),"config.json")}function Ht(){return z.join(__dirname,"skills")}function jt(){return z.join(R(),"skills")}function zt(){if(En())return{migrated:!1};let n=kn(),e=R();if(z.resolve(n)===z.resolve(e))return{migrated:!1};try{if(L.existsSync(e)||!L.existsSync(n))return{migrated:!1}}catch{return{migrated:!1}}try{return L.renameSync(n,e),{migrated:!0,from:n,to:e}}catch{}let r=`${e}.migrating-${process.pid}`;try{L.rmSync(r,{recursive:!0,force:!0}),L.cpSync(n,r,{recursive:!0}),L.renameSync(r,e)}catch{try{L.rmSync(r,{recursive:!0,force:!0})}catch{}return{migrated:!1}}try{L.rmSync(n,{recursive:!0,force:!0})}catch{}return{migrated:!0,from:n,to:e}}function Te(n){L.existsSync(n)||L.mkdirSync(n,{recursive:!0})}function q(n){return n&&(n==="~"?Se.homedir():n.startsWith("~/")||n.startsWith("~\\")?z.join(Se.homedir(),n.slice(2)):n)}var T=10,lt="{{'\u7528\u6237\u53D1\u9001\u8FC7\u6765\u7684\u6D88\u606F'}}",Xt=`\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 ${lt}`;function Zt(n,e){if(n.includes(lt))return n.replace(lt,()=>e);let r=/\{\{\s*[^{}]*\s*\}\}/;return r.test(n)?n.replace(r,()=>e):`${n}
|
|
3
|
+
\u6D88\u606F\uFF1A${e}`}var _n=1,K={version:_n,provider:"deepseek",model:"deepseek-chat",models:[],intent:{enabled:!1},providers:{},maxToolRounds:200,autoApprove:!0,mouseCapture:!0,confirmSensitiveRead:!1,temperature:.2};function D(){let n=_();try{if(!B.existsSync(n))return{...K,provider:"",model:"",models:[]};let e=B.readFileSync(n,"utf8"),r=JSON.parse(e);return Mn(r)}catch(e){throw new Error(`\u8BFB\u53D6\u914D\u7F6E\u5931\u8D25\uFF08${n}\uFF09\uFF1A${e instanceof Error?e.message:String(e)}`)}}function Mn(n){let e=Array.isArray(n.models)?n.models.filter(r=>!!r&&typeof r.provider=="string"&&typeof r.model=="string").map(r=>({...r,id:r.id||ue(r.provider,r.model),weight:typeof r.weight=="number"&&Number.isFinite(r.weight)?r.weight:T})):K.models;return{...K,...n,models:e,intent:{enabled:n.intent?.enabled===!0,...n.intent?.prompt?{prompt:n.intent.prompt}:{}},providers:{...K.providers,...n.providers??{}},maxToolRounds:n.maxToolRounds??K.maxToolRounds,autoApprove:n.autoApprove??K.autoApprove,mouseCapture:n.mouseCapture??K.mouseCapture,confirmSensitiveRead:n.confirmSensitiveRead??K.confirmSensitiveRead,temperature:n.temperature??K.temperature}}function P(n){Te(R());let e=_(),r=JSON.stringify(n,null,2)+`
|
|
4
|
+
`,s=`${e}.${process.pid}.tmp`;B.writeFileSync(s,r,{mode:384});try{B.chmodSync(s,384)}catch{}B.renameSync(s,e);try{B.chmodSync(e,384)}catch{}}function Ee(){return B.existsSync(_())}function qt(n){return n?n.length<=8?"****":`${n.slice(0,4)}...${n.slice(-4)}`:"(\u672A\u8BBE\u7F6E)"}function Yt(n){let e={};for(let[r,s]of Object.entries(n.providers))e[r]={...s,apiKey:qt(s.apiKey)};return{version:n.version,provider:n.provider,model:n.model,models:M(n).map(r=>({id:r.id,weight:r.weight,...r.baseUrl?{baseUrl:r.baseUrl}:{},...r.apiKey?{apiKey:qt(r.apiKey)}:{}})),intent:{enabled:n.intent?.enabled===!0,...n.intent?.prompt?{prompt:n.intent.prompt}:{}},temperature:n.temperature,maxToolRounds:n.maxToolRounds,autoApprove:n.autoApprove,systemPromptExtra:n.systemPromptExtra??"",providers:e}}function ue(n,e){return`${n}/${e}`}function M(n){if(n.models&&n.models.length>0)return n.models.map(s=>({...s}));let e=n.provider,r=n.providers[e]?.model||n.model;return e&&r?[{id:ue(e,r),provider:e,model:r,weight:T}]:[]}function Rn(n){return M(n).filter(e=>e.weight>0).sort((e,r)=>r.weight-e.weight)}function se(n,e){let r=new Set(e??[]);return Rn(n).find(s=>!r.has(s.id))??null}function ie(n){return(!n.models||n.models.length===0)&&(n.models=M(n)),n.models}function Jt(n,e){let r=ie(n),s=r.find(a=>a.id===e);if(!s)return null;s.weight=Math.max(0,s.weight-1),s.decayed=!0;let i=s.weight,o=r.filter(a=>a.decayed===!0);if(o.length>0&&o.every(a=>a.weight<=0)){for(let a of o)a.weight=T,a.decayed=!1;return{id:e,weight:0,reset:!0}}return{id:e,weight:i,reset:!1}}function Pe(n){for(let e of ie(n))e.weight=T,e.decayed=!1}function Gt(n){return typeof n=="number"&&Number.isFinite(n)&&n>0}function Vt(n,e){let r=ie(n),s=ue(e.provider,e.model),i=typeof e.weight=="number"&&Number.isFinite(e.weight),o=r.find(l=>l.id===s);if(o)return i&&(o.weight=Math.max(0,Math.floor(e.weight)),o.decayed=!1),e.apiKey&&(o.apiKey=e.apiKey),e.baseUrl&&(o.baseUrl=e.baseUrl),Gt(e.contextWindow)&&(o.contextWindow=Math.floor(e.contextWindow)),o;let a={id:s,provider:e.provider,model:e.model,weight:i?Math.max(0,Math.floor(e.weight)):T,...e.apiKey?{apiKey:e.apiKey}:{},...e.baseUrl?{baseUrl:e.baseUrl}:{},...Gt(e.contextWindow)?{contextWindow:Math.floor(e.contextWindow)}:{}};return r.push(a),a}function Qt(n,e){let r=n.findIndex(o=>o.id===e);if(r>=0)return r;let s=n.findIndex(o=>o.model===e);if(s>=0)return s;let i=Number.parseInt(e,10);return!Number.isNaN(i)&&i>=1&&i<=n.length?i-1:-1}function er(n,e){let r=ie(n),s=Qt(r,e);if(s<0)return null;let[i]=r.splice(s,1);return i??null}function tr(n,e,r){let s=ie(n),i=Qt(s,e);return i<0?null:(s[i].weight=Math.max(0,Math.floor(r)),s[i].decayed=!1,s[i])}var ar=v(require("@anthropic-ai/sdk"));var nr=v(require("http")),sr=v(require("https"));function ir(n){let e=!/^http:\/\//i.test(n),r={keepAlive:!1};return e?new sr.Agent(r):new nr.Agent(r)}var rr=new Set(["ECONNRESET","ECONNREFUSED","ECONNABORTED","ETIMEDOUT","EPIPE","ENOTFOUND","EAI_AGAIN","UND_ERR_SOCKET","UND_ERR_CONNECT_TIMEOUT","ERR_STREAM_PREMATURE_CLOSE"]),Pn=["premature close","socket hang up","other side closed","fetch failed","network error","connection error","connection reset","terminated","timeout","timed out"];function An(n){return n&&n.replace(/\b(Bearer|Basic|Token)\s+[A-Za-z0-9._~+/=-]{6,}/gi,"$1 ***").replace(/\b(sk|pk|rk|api|key|token)[-_][A-Za-z0-9._-]{6,}/gi,"$1-***").replace(/([?&](?:api[-_]?key|key|token|access_token|authorization)=)[^&\s"']+/gi,"$1***").replace(/("(?:api[-_]?key|apikey|token|secret|password|authorization)"\s*:\s*")[^"]*/gi,"$1***")}function I(n){return typeof n=="string"?n:typeof n=="number"||typeof n=="boolean"?String(n):""}function Ae(n){if(typeof n=="number"&&Number.isFinite(n))return n;if(typeof n=="string"){let e=Number.parseInt(n,10);if(!Number.isNaN(e))return e}}function In(n){let e=n,r=I(e?.message);if(r)return r;let s=e?.error,i=I(s?.message);if(i)return i;let o=e?.cause,a=I(o?.message);if(a)return a;if(n instanceof Error&&n.message)return n.message;try{let c=JSON.stringify(n);if(c&&c!=="{}")return c}catch{}let l=String(n);return l==="[object Object]"?"\u672A\u77E5\u9519\u8BEF\uFF08\u65E0\u6CD5\u89E3\u6790\u9519\u8BEF\u8BE6\u60C5\uFF09":l}function de(n){let e=n,r=Ae(e?.status);if(r!==void 0){if(r===408||r===409||r===429||r>=500&&r<=599)return!0;if(r>=400&&r<500)return!1}let s=I(e?.code).toUpperCase();if(s&&rr.has(s))return!0;let i=e?.cause,o=I(i?.code).toUpperCase();if(o&&rr.has(o))return!0;let a=(I(e?.message)||I(i?.message)||String(n)).toLowerCase();return Pn.some(l=>a.includes(l))}function Y(n){return An(Ln(n))}function ct(n){let e=n,r=Ae(e?.status);if(r===401||r===403||r===404)return!0;let s=(I(e?.message)||I(e?.error?.message)||I(e?.cause?.message)||String(n)).toLowerCase();return["invalid api key","incorrect api key","api key not valid","authentication","unauthorized","\u672A\u77E5 provider","unknown provider","model not found","unknown model","no such model","invalid base url","\u7F3A\u5C11 api key"].some(i=>s.includes(i))}function Ie(n){let e=n,r=Ae(e?.status);if(r!==void 0&&(r<400||r>=500))return!1;let s=I(e?.code)||I(e?.error?.code);if(/context[_ ]?length|context[_ ]?size|max[_ ]?tokens?_exceeded|token[_ ]?limit/i.test(s))return!0;let i=(I(e?.message)||I(e?.error?.message)||I(e?.cause?.message)||String(n)).toLowerCase();return["context length","context_length","maximum context","context window","prompt is too long","exceed context limit","exceeds the maximum number of tokens","reduce the length","too many tokens","context size","context_size","exceeds the available context","input length exceeds","exceeds the context","n_ctx","n_keep","too long"].some(o=>i.includes(o))}function Ln(n){let e=n,r=In(n),s=r.toLowerCase(),i=I(e?.code).toUpperCase(),o=Ae(e?.status);if(Ie(n))return"\u4E0A\u4E0B\u6587\u8D85\u51FA\u6A21\u578B\u7A97\u53E3\uFF1A\u672C\u6B21\u8BF7\u6C42\u7684\u5185\u5BB9\u6BD4\u6A21\u578B\u80FD\u63A5\u53D7\u7684\u957F\u5EA6\u66F4\u957F\u3002\n\u7384\u732A\u5DF2\u81EA\u52A8\u6536\u655B\u5386\u53F2\u540E\u91CD\u8BD5\uFF1B\u82E5\u4ECD\u5931\u8D25\uFF0C\u53EF\u51CF\u5C11\u4E00\u6B21\u6027\u8BFB\u53D6\u7684\u5185\u5BB9\u91CF\uFF0C\u6216\u7528 `xzh model context <id> <\u5927\u5C0F>` \u8C03\u5927\u8BE5\u6A21\u578B\u7684\u4E0A\u4E0B\u6587\u7A97\u53E3\u3002";if(s.includes("premature close"))return`\u8FDE\u63A5\u88AB\u63D0\u524D\u5173\u95ED\uFF08Premature close\uFF09\uFF1A\u7F51\u7EDC\u6216\u4EE3\u7406\u4E2D\u65AD\u4E86\u54CD\u5E94\u6D41\u3002
|
|
5
5
|
\u7384\u732A\u5DF2\u81EA\u52A8\u91CD\u8BD5\uFF1B\u82E5\u4ECD\u9891\u7E41\u51FA\u73B0\uFF0C\u901A\u5E38\u662F\u4EE3\u7406/\u7F51\u7EDC\u4E0D\u7A33\u5B9A\u5BFC\u81F4\uFF0C\u53EF\u68C0\u67E5\u4EE3\u7406\u6216\u7A0D\u540E\u518D\u8BD5\u3002`;if(i==="ECONNRESET"||s.includes("socket hang up"))return"\u8FDE\u63A5\u88AB\u5BF9\u7AEF\u91CD\u7F6E\uFF08ECONNRESET\uFF09\uFF1A\u7F51\u7EDC\u6216\u4EE3\u7406\u4E2D\u65AD\u4E86\u8FDE\u63A5\uFF0C\u8BF7\u91CD\u8BD5\u3002";if(i==="ETIMEDOUT"||s.includes("timed out"))return"\u8BF7\u6C42\u8D85\u65F6\uFF1A\u7F51\u7EDC\u8F83\u6162\u6216\u6A21\u578B\u670D\u52A1\u672A\u54CD\u5E94\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002";if(i==="ENOTFOUND"||i==="EAI_AGAIN")return"\u65E0\u6CD5\u89E3\u6790\u670D\u52A1\u5730\u5740\uFF1A\u8BF7\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5\u4E0E\u4EE3\u7406\u8BBE\u7F6E\uFF08DNS \u53EF\u80FD\u88AB\u62E6\u622A\uFF09\u3002";if(i==="ECONNREFUSED")return"\u8FDE\u63A5\u88AB\u62D2\u7EDD\uFF1A\u76EE\u6807\u5730\u5740\u6216\u7AEF\u53E3\u4E0D\u53EF\u8FBE\uFF0C\u8BF7\u68C0\u67E5 baseUrl \u4E0E\u4EE3\u7406\u8BBE\u7F6E\u3002";if(o===401||s.includes("unauthorized")||s.includes("invalid api key")||s.includes("authentication"))return"\u8BA4\u8BC1\u5931\u8D25\uFF1AAPI Key \u65E0\u6548\u6216\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u8FD0\u884C `xzh model` \u91CD\u65B0\u914D\u7F6E\u3002";if(o===403)return"\u8BBF\u95EE\u88AB\u62D2\u7EDD\uFF08403\uFF09\uFF1A\u8BF7\u68C0\u67E5 API Key \u6743\u9650\u6216\u670D\u52A1\u5546\u533A\u57DF\u9650\u5236\u3002";if(o===402||s.includes("insufficient")||s.includes("balance"))return"\u8D26\u6237\u989D\u5EA6\u4E0D\u8DB3\uFF1A\u8BF7\u68C0\u67E5\u670D\u52A1\u5546\u4F59\u989D\u6216\u914D\u989D\u3002";if(o===429||s.includes("rate limit"))return"\u8BF7\u6C42\u8FC7\u4E8E\u9891\u7E41\uFF08\u9650\u6D41\uFF09\uFF1A\u8BF7\u7A0D\u540E\u518D\u8BD5\u3002";if(/out\s*of\s*(device\s*)?memory|outofdevicememory|outofmemory|vk::|cuda.*error|hip.*error|cannot allocate|insufficient memory/i.test(r))return`${r}
|
|
6
6
|
\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
|
|
7
7
|
\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
|
|
8
8
|
\uFF08--cache-type-k q8_0 --cache-type-v q8_0\uFF09\u3001\u51CF\u5C11 GPU \u5378\u8F7D\u5C42\u6570\uFF08-ngl\uFF09\u3001
|
|
9
9
|
\u6362\u66F4\u5C0F\u7684\u6A21\u578B / \u91CF\u5316\uFF0C\u6216\u5148\u91CA\u653E\u88AB\u5176\u4ED6\u8FDB\u7A0B\u5360\u7528\u7684\u663E\u5B58\u3002
|
|
10
|
-
\u4FEE\u597D\u670D\u52A1\u7AEF\u540E\u53EF\u7528 \`xzh model reset\` \u628A\u88AB\u964D\u6389\u7684\u6743\u91CD\u6062\u590D\u4E3A\u9ED8\u8BA4\u503C\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(o===400){let a=r.replace(/^4\d\d\s*/,""),l=/model/i.test(a)?"\n\u63D0\u793A\uFF1A\u591A\u534A\u662F\u6A21\u578B\u540D\u4E0D\u88AB\u8BE5\u7AEF\u70B9\u652F\u6301\u3002\u53EF\u7528 `curl <baseUrl>/models` \u67E5\u770B\u7AEF\u70B9\u652F\u6301\u7684\u6A21\u578B id\uFF0C\u518D\u7528 `xzh model weight <id> 10` \u540E\u7684 `xzh model` \u66F4\u6B63\u6A21\u578B\u540D\u3002":"";return`\u8BF7\u6C42\u88AB\u62D2\u7EDD\uFF08HTTP 400\uFF09\uFF1A${a}${l}`}return s.includes("fetch failed")||s.includes("network")?`\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25\uFF1A${r}`:r}function
|
|
10
|
+
\u4FEE\u597D\u670D\u52A1\u7AEF\u540E\u53EF\u7528 \`xzh model reset\` \u628A\u88AB\u964D\u6389\u7684\u6743\u91CD\u6062\u590D\u4E3A\u9ED8\u8BA4\u503C\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(o===400){let a=r.replace(/^4\d\d\s*/,""),l=/model/i.test(a)?"\n\u63D0\u793A\uFF1A\u591A\u534A\u662F\u6A21\u578B\u540D\u4E0D\u88AB\u8BE5\u7AEF\u70B9\u652F\u6301\u3002\u53EF\u7528 `curl <baseUrl>/models` \u67E5\u770B\u7AEF\u70B9\u652F\u6301\u7684\u6A21\u578B id\uFF0C\u518D\u7528 `xzh model weight <id> 10` \u540E\u7684 `xzh model` \u66F4\u6B63\u6A21\u578B\u540D\u3002":"";return`\u8BF7\u6C42\u88AB\u62D2\u7EDD\uFF08HTTP 400\uFF09\uFF1A${a}${l}`}return s.includes("fetch failed")||s.includes("network")?`\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25\uFF1A${r}`:r}function ge(n){return new Promise(e=>setTimeout(e,n))}var ut=3,Le=class{id;model;client;maxTokens;constructor(e){this.id=e.id,this.model=e.model,this.maxTokens=e.maxTokens??8192,this.client=new ar.default({apiKey:e.apiKey,baseURL:e.baseUrl,maxRetries:0})}async*chat(e){let r;for(let s=1;s<=ut;s++){let i=!1;try{yield*this.streamOnce(e,()=>{i=!0});return}catch(o){if(r=o,i||e.signal?.aborted||s>=ut||!de(o))throw o;e.onRetry?.(s,ut,o instanceof Error?o:new Error(String(o))),await ge(s*600)}}throw r}async*streamOnce(e,r){let{system:s,messages:i}=On(e.messages),o=e.tools.length>0?e.tools.map(h=>({name:h.name,description:h.description,input_schema:h.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,d=!1;for await(let h of a)switch(h.type){case"message_start":{let p=h.message?.usage?.input_tokens;typeof p=="number"&&(c={inputTokens:p});break}case"content_block_start":{let p=h.content_block;p.type==="tool_use"&&(d=!0,l.set(h.index,{id:p.id,name:p.name,json:""}));break}case"content_block_delta":{let p=h.delta;if(p.type==="text_delta"&&p.text)r(),yield{type:"text",text:p.text};else if(p.type==="input_json_delta"){let f=l.get(h.index);f&&(f.json+=p.partial_json??"")}else if(p.type==="thinking_delta"){let f=p.thinking;f&&(r(),yield{type:"reasoning",text:f})}break}case"message_delta":{h.delta?.stop_reason&&(u=h.delta.stop_reason);let p=h.usage?.output_tokens;typeof p=="number"&&(c={...c??{},outputTokens:p});break}default:break}for(let h of l.values())h.name&&(r(),yield{type:"tool_call",toolCall:{id:h.id,name:h.name,arguments:h.json||"{}"}});d&&r(),yield{type:"done",finishReason:d?"tool_calls":u,usage:c}}};function On(n){let e=[],r=[];for(let s of n){if(s.role==="system"){e.push(s.content);continue}if(s.role==="user"){r.push({role:"user",content:s.content});continue}if(s.role==="assistant"){if(s.toolCalls&&s.toolCalls.length>0){let i=[];s.content&&i.push({type:"text",text:s.content});for(let o of s.toolCalls)i.push({type:"tool_use",id:o.id,name:o.name,input:Dn(o.arguments)});r.push({role:"assistant",content:i})}else r.push({role:"assistant",content:s.content});continue}if(s.role==="tool"){let i={type:"tool_result",tool_use_id:s.toolCallId??"",content:s.content},o=r[r.length-1];o&&o.role==="user"&&Array.isArray(o.content)&&o.content.every(a=>a.type==="tool_result")?o.content.push(i):r.push({role:"user",content:[i]})}}return{system:e.join(`
|
|
11
11
|
|
|
12
|
-
`),messages:Nn(r)}}function or(n){return typeof n=="string"?[{type:"text",text:n}]:n}function Nn(n){let e=[];for(let r of n){let s=e[e.length-1];if(s&&s.role===r.role){r.role==="user"?e[e.length-1]={role:"user",content:[...or(s.content),...or(r.content)]}:e[e.length-1]=r;continue}e.push(r)}for(;e.length>0&&e[0].role!=="user";)e.shift();return e}function Dn(n){try{let e=JSON.parse(n||"{}");return typeof e=="object"&&e!==null?e:{}}catch{return{}}}var
|
|
12
|
+
`),messages:Nn(r)}}function or(n){return typeof n=="string"?[{type:"text",text:n}]:n}function Nn(n){let e=[];for(let r of n){let s=e[e.length-1];if(s&&s.role===r.role){r.role==="user"?e[e.length-1]={role:"user",content:[...or(s.content),...or(r.content)]}:e[e.length-1]=r;continue}e.push(r)}for(;e.length>0&&e[0].role!=="user";)e.shift();return e}function Dn(n){try{let e=JSON.parse(n||"{}");return typeof e=="object"&&e!==null?e:{}}catch{return{}}}var Q=require("@google/generative-ai");var dt=3,Oe=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){let r;for(let s=1;s<=dt;s++){let i=!1;try{yield*this.streamOnce(e,()=>{i=!0});return}catch(o){if(r=o,i||e.signal?.aborted||s>=dt||!de(o))throw o;e.onRetry?.(s,dt,o instanceof Error?o:new Error(String(o))),await ge(s*600)}}throw r}async*streamOnce(e,r){let s=new Q.GoogleGenerativeAI(this.apiKey),{system:i,contents:o}=Bn(e.messages),a=e.tools.length>0?[{functionDeclarations:e.tools.map(Fn)}]: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,d=!1,h=0;for await(let p of c.stream){if(e.signal?.aborted)break;let f=Un(p);f&&(r(),yield{type:"text",text:f});let $=Kn(p);for(let m of $)d=!0,r(),yield{type:"tool_call",toolCall:{id:`gemini_call_${Date.now()}_${h++}`,name:m.name,arguments:JSON.stringify(m.args??{})}};let y=p.usageMetadata;y&&(u={inputTokens:y.promptTokenCount,outputTokens:y.candidatesTokenCount})}d&&r(),yield{type:"done",finishReason:d?"tool_calls":"stop",usage:u}}};function Un(n){try{return n.text()??""}catch{return""}}function Kn(n){try{return n.functionCalls?.()??[]}catch{return[]}}function Bn(n){let e=[],r=[];for(let s of n){if(s.role==="system"){e.push(s.content);continue}if(s.role==="user"){r.push({role:"user",parts:[{text:s.content}]});continue}if(s.role==="assistant"){let i=[];s.content&&i.push({text:s.content});for(let o of s.toolCalls??[])i.push({functionCall:{name:o.name,args:jn(o.arguments)}});i.length>0&&r.push({role:"model",parts:i});continue}if(s.role==="tool"){let i={functionResponse:{name:s.name??"unknown",response:{result:s.content}}},o=r[r.length-1];o&&o.role==="user"&&o.parts?.some(a=>"functionResponse"in a)?o.parts.push(i):r.push({role:"user",parts:[i]})}}return{system:e.join(`
|
|
13
13
|
|
|
14
|
-
`),contents:Wn(r)}}function Wn(n){let e=[];for(let r of n){let s=e[e.length-1];if(s&&s.role===r.role){s.parts=[...s.parts??[],...r.parts??[]];continue}e.push({role:r.role,parts:[...r.parts??[]]})}for(;e.length>0&&e[0].role!=="user";)e.shift();return e}function Fn(n){return{name:n.name,description:n.description,parameters:ht(n.parameters)}}function ht(n){let e={type:Hn(n.type)};if(n.description&&(e.description=n.description),n.enum&&(e.enum=n.enum),n.required&&(e.required=n.required),n.items&&(e.items=ht(n.items)),n.properties){let r={};for(let[s,i]of Object.entries(n.properties))r[s]=ht(i);e.properties=r}return e}function Hn(n){switch(n.toLowerCase()){case"string":return
|
|
14
|
+
`),contents:Wn(r)}}function Wn(n){let e=[];for(let r of n){let s=e[e.length-1];if(s&&s.role===r.role){s.parts=[...s.parts??[],...r.parts??[]];continue}e.push({role:r.role,parts:[...r.parts??[]]})}for(;e.length>0&&e[0].role!=="user";)e.shift();return e}function Fn(n){return{name:n.name,description:n.description,parameters:ht(n.parameters)}}function ht(n){let e={type:Hn(n.type)};if(n.description&&(e.description=n.description),n.enum&&(e.enum=n.enum),n.required&&(e.required=n.required),n.items&&(e.items=ht(n.items)),n.properties){let r={};for(let[s,i]of Object.entries(n.properties))r[s]=ht(i);e.properties=r}return e}function Hn(n){switch(n.toLowerCase()){case"string":return Q.SchemaType.STRING;case"number":return Q.SchemaType.NUMBER;case"integer":return Q.SchemaType.INTEGER;case"boolean":return Q.SchemaType.BOOLEAN;case"array":return Q.SchemaType.ARRAY;default:return Q.SchemaType.OBJECT}}function jn(n){try{let e=JSON.parse(n||"{}");return typeof e=="object"&&e!==null?e:{}}catch{return{}}}var lr=v(require("openai"));var pt=3,Ne=class{id;model;client;constructor(e){this.id=e.id,this.model=e.model;let r=e.baseUrl||"https://api.openai.com/v1";this.client=new lr.default({apiKey:e.apiKey||"not-needed",baseURL:e.baseUrl,httpAgent:ir(r),maxRetries:0})}async*chat(e){let r;for(let s=1;s<=pt;s++){let i=!1;try{yield*this.streamOnce(e,()=>{i=!0});return}catch(o){if(r=o,i||e.signal?.aborted||s>=pt||!de(o))throw o;e.onRetry?.(s,pt,o instanceof Error?o:new Error(String(o))),await ge(s*600)}}throw r}async*streamOnce(e,r){let s=e.messages.map(zn),i=e.tools.length>0?e.tools.map(qn):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 d of o){d.usage&&(c={inputTokens:d.usage.prompt_tokens,outputTokens:d.usage.completion_tokens});let h=d.choices?.[0];if(!h)continue;let p=h.delta;if(p){let f=p.content;typeof f=="string"&&f.length>0&&(r(),yield{type:"text",text:f});let $=p.reasoning_content;typeof $=="string"&&$.length>0&&(r(),yield{type:"reasoning",text:$});let y=p.tool_calls;if(y){u=!0;for(let m of y){let x=m.index??0,g=a.get(x)??{id:"",name:"",args:""};m.id&&(g.id=m.id),m.function?.name&&(g.name+=m.function.name),m.function?.arguments&&(g.args+=m.function.arguments),a.set(x,g)}}}h.finish_reason&&(l=h.finish_reason)}for(let[d,h]of a){if(!h.name)continue;let p={id:h.id||`call_${Date.now()}_${d}`,name:h.name,arguments:h.args||"{}"};r(),yield{type:"tool_call",toolCall:p}}u&&r(),yield{type:"done",finishReason:u?"tool_calls":l,usage:c}}};function zn(n){switch(n.role){case"system":return{role:"system",content:n.content};case"user":return{role:"user",content:n.content};case"assistant":return n.toolCalls&&n.toolCalls.length>0?{role:"assistant",content:n.content||null,tool_calls:n.toolCalls.map(e=>({id:e.id,type:"function",function:{name:e.name,arguments:e.arguments}}))}:{role:"assistant",content:n.content};case"tool":return{role:"tool",content:n.content,tool_call_id:n.toolCallId??""};default:return{role:"user",content:n.content}}}function qn(n){return{type:"function",function:{name:n.name,description:n.description,parameters:n.parameters}}}function oe(n){if(!n)return 0;let e=0,r=0;for(let s of n)s.codePointAt(0)<128?e++:r++;return Math.ceil(e/3.5)+r}function De(n){let e=4+oe(n.content??"");if(n.toolCalls)for(let r of n.toolCalls)e+=10+oe(r.name)+oe(r.arguments);return e}function mt(n,e){if(e<=0)return"";let r=0,s=0,i=0;for(let o of n){let a=o.codePointAt(0)<128,l=r+(a?1:0),c=s+(a?0:1);if(Math.ceil(l/3.5)+c>e)break;r=l,s=c,i+=o.length}return n.slice(0,i)}function Gn(n,e){let r=De({...n,content:""}),s=30;if(r+s>=e)return null;let i=n.content??"",o=e-r-s;if(oe(i)<=o)return n;let a=mt(i,o),l=i.length-a.length;return{...n,content:`${a}
|
|
15
15
|
|
|
16
|
-
\u2026\uFF08\u5185\u5BB9\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD ${l} \u5B57\u7B26\u4EE5\u9002\u914D\u6A21\u578B\u4E0A\u4E0B\u6587\u7A97\u53E3\uFF09`}}function cr(n){if(n.length<=6)return n;let e=n.length-6;return n.map((r,s)=>{if(s>=e||r.role!=="tool")return r;let i=r.content??"";if(
|
|
16
|
+
\u2026\uFF08\u5185\u5BB9\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD ${l} \u5B57\u7B26\u4EE5\u9002\u914D\u6A21\u578B\u4E0A\u4E0B\u6587\u7A97\u53E3\uFF09`}}function cr(n){if(n.length<=6)return n;let e=n.length-6;return n.map((r,s)=>{if(s>=e||r.role!=="tool")return r;let i=r.content??"";if(oe(i)<=600)return r;let o=Math.floor(600*.6),a=600-o,l=mt(i,o),c=Math.min(i.length-l.length,Math.max(0,a)*3),u=c>0?i.slice(-c):"",d=i.length-l.length-u.length;return{...r,content:`${l}
|
|
17
17
|
|
|
18
18
|
\u2026\uFF08\u6B64\u5904\u7701\u7565 ${d} \u5B57\u7B26\u7684\u4E2D\u95F4\u5185\u5BB9\uFF09
|
|
19
19
|
|
|
20
|
-
${u}`}})}function
|
|
20
|
+
${u}`}})}function Ue(n,e){let r=cr(n),s=r.length,i=0;for(let a=r.length-1;a>=0;a--){let l=De(r[a]);if(s<r.length&&i+l>e)break;i+=l,s=a}let o=r.slice(s);for(;o.length>0&&o[0].role==="tool";)o.shift();if(o.length===0){for(let a=n.length-1;a>=0;a--)if(n[a].role==="user"){o=[n[a]];break}}if(o.length===1&&De(o[0])>e){let l=Gn(o[0],e);if(l===null)return[];o[0]=l}return o}function gt(n,e,r){let s=ur(n,e),i=oe(r)+4,o=s-i;return Math.max(1,Math.min(Math.max(o,1e3),s))}function ur(n,e){let r=n&&n>0?n:he(e);return Math.floor(r*.8)}function $t(n,e,r){let s=ur(n,e);return oe(r)+4>=s*.5}var ft={"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},Xn=[[/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 he(n){let e=n.trim();if(!e)return 32e3;let r=e.toLowerCase(),s=ft[r];if(s)return s;let i=r.replace(/[-_]?(latest|preview|stable|beta|exp)$/,"").replace(/[-_]\d{6,8}$/,"").replace(/[:@].*$/,""),o=ft[i]??Object.entries(ft).find(([a])=>i.startsWith(a)||i===a)?.[1];if(o)return o;for(let[a,l]of Xn)if(a.test(i))return l;return 32e3}function ee(n){return!Number.isFinite(n)||n<=0?"\u672A\u8BBE\u7F6E":String(Math.floor(n))}var te=[{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 re(n){return te.find(e=>e.id===n)}function Ke(n,e){return e||(n.envKey?process.env[n.envKey]??"":"")}function hr(n,e){return e||n.defaultBaseUrl}function yt(n,e){let r=[],s=re(e.provider);if(!s)return[`\u6A21\u578B ${e.id} \u4F7F\u7528\u4E86\u672A\u77E5 provider\uFF1A${e.provider}`];let i=n.providers[e.provider]??{};return s.requiresApiKey&&!Ke(s,e.apiKey??i.apiKey)&&r.push(`\u6A21\u578B ${e.id} \u7F3A\u5C11 API Key\uFF0C\u8BF7\u8FD0\u884C \`xzh model\` \u6216\u8BBE\u7F6E\u73AF\u5883\u53D8\u91CF ${s.envKey}`),s.requiresBaseUrl&&!hr(s,e.baseUrl??i.baseUrl)&&r.push(`\u6A21\u578B ${e.id} \u9700\u8981\u914D\u7F6E baseUrl`),e.model||r.push(`\u6A21\u578B ${e.id} \u672A\u6307\u5B9A\u6A21\u578B\u540D`),r}function pr(n){let e=M(n);return e.length===0?["\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\uFF0C\u8BF7\u8FD0\u884C `xzh model add` \u6DFB\u52A0"]:e.flatMap(r=>yt(n,r))}function Be(n,e){let r=e?.provider??n.provider,s=re(r);if(!s)throw new Error(`\u672A\u77E5\u7684 provider\uFF1A${r}`);let i=n.providers[r]??{},o=Ke(s,e?.apiKey??i.apiKey),a=hr(s,e?.baseUrl??i.baseUrl),l=e?.model||i.model||n.model||s.defaultModel;if(s.requiresBaseUrl&&!a)throw new Error(`provider "${s.label}" \u9700\u8981\u914D\u7F6E API \u7AEF\u70B9 baseUrl\u3002\u8FD0\u884C \`xzh model\` \u8865\u9F50\u540E\u518D\u8BD5\u3002`);if(s.requiresApiKey&&!o)throw new Error(`provider "${s.label}" \u7F3A\u5C11 API Key\u3002\u8FD0\u884C \`xzh model\` \u8FDB\u884C\u914D\u7F6E\uFF0C\u6216\u8BBE\u7F6E\u73AF\u5883\u53D8\u91CF ${s.envKey}\u3002`);if(!l)throw new Error(`provider "${s.label}" \u672A\u6307\u5B9A\u6A21\u578B\u3002\u8FD0\u884C \`xzh model\` \u9009\u62E9\u6A21\u578B\u3002`);switch(s.kind){case"anthropic":return new Le({id:s.id,apiKey:o,baseUrl:a,model:l});case"gemini":return new Oe({id:s.id,apiKey:o,baseUrl:a,model:l});case"openai":default:return new Ne({id:s.id,apiKey:o,baseUrl:a,model:l})}}var ce=v(require("fs")),we=v(require("path"));var fr=require("child_process"),We=v(require("path"));var xt=3e4,Zn=12e4,Yn=6e5,Jn=1500;function Vn(n,e,r,s){return new Promise(i=>{if(s?.aborted){i({stdout:"",stderr:"\u547D\u4EE4\u5DF2\u88AB\u4E2D\u65AD\uFF08\u5728\u6267\u884C\u524D\uFF09\u3002",code:null,timedOut:!1,aborted:!0});return}let o=process.platform==="win32",a=o?"cmd.exe":process.env.SHELL||"bash",c=(0,fr.spawn)(a,o?["/d","/s","/c",n]:["-lc",n],{cwd:e,env:process.env,windowsHide:!0,detached:!o}),u="",d="",h=!1,p=!1,f=!1,$,y=w=>{let N=c.pid;if(N!==void 0)try{process.kill(-N,w)}catch{try{c.kill(w)}catch{}}},m=w=>{f||(f=!0,clearTimeout(b),$&&clearTimeout($),s?.removeEventListener("abort",g),i({stdout:u,stderr:d,code:w,timedOut:h,aborted:p}))},x=()=>{$&&clearTimeout($),$=setTimeout(()=>m(null),Jn)},g=()=>{p=!0,y("SIGKILL"),x()},b=setTimeout(()=>{h=!0,y("SIGKILL"),x()},r);s?.addEventListener("abort",g,{once:!0}),c.stdout?.on("data",w=>{u.length<xt&&(u+=w.toString())}),c.stderr?.on("data",w=>{d.length<xt&&(d+=w.toString())}),c.on("error",w=>{d+=String(w),m(-1)}),c.on("exit",w=>{$&&clearTimeout($),$=setTimeout(()=>m(w),120)}),c.on("close",w=>m(w))})}var mr={name:"bash",description:"\u5728\u7EC8\u7AEF\u4E2D\u6267\u884C shell \u547D\u4EE4\u5E76\u8FD4\u56DE\u8F93\u51FA\u3002\u9002\u7528\u4E8E\u8FD0\u884C\u6D4B\u8BD5\u3001\u6784\u5EFA\u3001\u5B89\u88C5\u4F9D\u8D56\u3001git \u64CD\u4F5C\u7B49\u3002\u547D\u4EE4\u5728\u975E\u4EA4\u4E92\u5F0F shell \u4E2D\u6267\u884C\uFF0C\u957F\u65F6\u95F4\u8FD0\u884C\u7684\u547D\u4EE4\u8BF7\u8BBE\u7F6E timeout\u3002",requiresConfirmation:!0,danger:!0,parameters:{type:"object",properties:{command:{type:"string",description:"\u8981\u6267\u884C\u7684 shell \u547D\u4EE4"},timeout:{type:"integer",description:"\u8D85\u65F6\u65F6\u95F4\uFF08\u6BEB\u79D2\uFF0C\u9ED8\u8BA4 120000\uFF0C\u6700\u5927 600000\uFF09"},cwd:{type:"string",description:"\u547D\u4EE4\u6267\u884C\u76EE\u5F55\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\uFF09"}},required:["command"]},async execute(n,e){let r=typeof n.command=="string"?n.command:"";if(!r.trim())return{ok:!1,content:"\u9519\u8BEF\uFF1Acommand \u4E0D\u80FD\u4E3A\u7A7A"};let s=e.cwd;if(typeof n.cwd=="string"&&n.cwd){let u=q(n.cwd);s=We.isAbsolute(u)?u:We.resolve(e.cwd,u)}let i=typeof n.timeout=="number"?n.timeout:Zn,o=Math.min(Math.max(1e3,i),Yn),a=await Vn(r,s,o,e.signal),l=[];a.stdout.trim()&&l.push(a.stdout.trimEnd()),a.stderr.trim()&&l.push(`[stderr]
|
|
21
21
|
${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(`
|
|
22
22
|
|
|
23
|
-
`);return{ok:a.code===0&&!a.timedOut&&!a.aborted,content:c.slice(0,xt),summary:a.aborted?"\u5DF2\u4E2D\u65AD":a.timedOut?"\u8D85\u65F6":a.code===0?"\u6267\u884C\u6210\u529F":`\u9000\u51FA\u7801 ${a.code}`}}};var C=
|
|
24
|
-
`).map(r=>r.trim()).filter(r=>r&&!r.startsWith("#")&&!r.startsWith("!")):[]}catch{return[]}}function ns(n,e){let r=n.split(E.sep).join("/"),s=E.basename(r);for(let i of e){let o=i.replace(/^\//,"").replace(/\/$/,"");if(o){if(o.includes("*")){try{if(
|
|
23
|
+
`);return{ok:a.code===0&&!a.timedOut&&!a.aborted,content:c.slice(0,xt),summary:a.aborted?"\u5DF2\u4E2D\u65AD":a.timedOut?"\u8D85\u65F6":a.code===0?"\u6267\u884C\u6210\u529F":`\u9000\u51FA\u7801 ${a.code}`}}};var C=v(require("fs")),E=v(require("path"));var gr=2e3,Qn=2*1024*1024,bt=200,Fe=200,es=1024*1024,$r=2e3;function ts(n){return/\((?:[^()\\]|\\.)*[+*](?:[^()\\]|\\.)*\)\s*[+*{]/.test(n)}var br=new Set([".git","node_modules","dist","build","out",".next",".nuxt",".cache","coverage",".venv","venv","__pycache__",".idea",".vscode-test"]);function rs(n){try{let e=E.join(n,".gitignore");return C.existsSync(e)?C.readFileSync(e,"utf8").split(`
|
|
24
|
+
`).map(r=>r.trim()).filter(r=>r&&!r.startsWith("#")&&!r.startsWith("!")):[]}catch{return[]}}function ns(n,e){let r=n.split(E.sep).join("/"),s=E.basename(r);for(let i of e){let o=i.replace(/^\//,"").replace(/\/$/,"");if(o){if(o.includes("*")){try{if(He(o).test(r)||He(o).test(s))return!0}catch{}continue}if(r===o||r.startsWith(`${o}/`)||s===o)return!0}}return!1}function $e(n,e){let r=q(n);return E.isAbsolute(r)?r:E.resolve(e,r)}function W(n,e=""){return typeof n=="string"?n:e}function yr(n,e){return typeof n=="number"&&Number.isFinite(n)?n:e}function wr(n){return n.subarray(0,8e3).includes(0)}var vr={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 ${gr}\uFF09`}},required:["path"]},async execute(n,e){let r=$e(W(n.path),e.cwd);if(!C.existsSync(r))return{ok:!1,content:`\u9519\u8BEF\uFF1A\u6587\u4EF6\u4E0D\u5B58\u5728\uFF1A${r}`};let s=C.statSync(r);if(s.isDirectory())return{ok:!1,content:`\u9519\u8BEF\uFF1A${r} \u662F\u4E00\u4E2A\u76EE\u5F55\uFF0C\u8BF7\u4F7F\u7528 list_dir`};if(!s.isFile())return{ok:!1,content:`\u9519\u8BEF\uFF1A${r} \u4E0D\u662F\u666E\u901A\u6587\u4EF6\uFF08\u8BBE\u5907\u6587\u4EF6 / \u7BA1\u9053 / socket\uFF09\uFF0C\u62D2\u7EDD\u8BFB\u53D6`};if(s.size>Qn)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=C.readFileSync(r);if(wr(i))return{ok:!1,content:`\u9519\u8BEF\uFF1A${r} \u662F\u4E8C\u8FDB\u5236\u6587\u4EF6\uFF0C\u65E0\u6CD5\u4F5C\u4E3A\u6587\u672C\u8BFB\u53D6`};let o=i.toString("utf8").split(`
|
|
25
25
|
`),a=Math.max(1,yr(n.offset,1)),l=Math.max(1,yr(n.limit,gr)),c=o.slice(a-1,a-1+l),u=c.map((h,p)=>{let f=a+p;return`${String(f).padStart(6," ")}| ${h}`}).join(`
|
|
26
26
|
`),d=a-1+l<o.length?`
|
|
27
|
-
\u2026\uFF08\u6587\u4EF6\u5171 ${o.length} \u884C\uFF0C\u5DF2\u622A\u65AD\uFF09`:"";return{ok:!0,content:u+d,summary:`\u8BFB\u53D6 ${c.length} \u884C`}}},Cr={name:"write_file",description:"\u5199\u5165\uFF08\u8986\u76D6\uFF09\u6587\u4EF6\u3002\u4F1A\u521B\u5EFA\u7F3A\u5931\u7684\u7236\u76EE\u5F55\u3002\u8BF7\u8C28\u614E\u4F7F\u7528\uFF0C\u4F18\u5148\u4F7F\u7528 edit_file \u505A\u5C40\u90E8\u4FEE\u6539\u3002",requiresConfirmation:!0,parameters:{type:"object",properties:{path:{type:"string",description:"\u6587\u4EF6\u8DEF\u5F84"},content:{type:"string",description:"\u8981\u5199\u5165\u7684\u5B8C\u6574\u6587\u4EF6\u5185\u5BB9"}},required:["path","content"]},async execute(n,e){let r
|
|
28
|
-
\
|
|
27
|
+
\u2026\uFF08\u6587\u4EF6\u5171 ${o.length} \u884C\uFF0C\u5DF2\u622A\u65AD\uFF09`:"";return{ok:!0,content:u+d,summary:`\u8BFB\u53D6 ${c.length} \u884C`}}},Cr={name:"write_file",description:"\u5199\u5165\uFF08\u8986\u76D6\uFF09\u6587\u4EF6\u3002\u4F1A\u521B\u5EFA\u7F3A\u5931\u7684\u7236\u76EE\u5F55\u3002\u8BF7\u8C28\u614E\u4F7F\u7528\uFF0C\u4F18\u5148\u4F7F\u7528 edit_file \u505A\u5C40\u90E8\u4FEE\u6539\u3002",requiresConfirmation:!0,parameters:{type:"object",properties:{path:{type:"string",description:"\u6587\u4EF6\u8DEF\u5F84"},content:{type:"string",description:"\u8981\u5199\u5165\u7684\u5B8C\u6574\u6587\u4EF6\u5185\u5BB9"}},required:["path","content"]},async execute(n,e){let r=$e(W(n.path),e.cwd),s=W(n.content);try{return C.mkdirSync(E.dirname(r),{recursive:!0}),C.writeFileSync(r,s,"utf8"),{ok:!0,content:`\u5DF2\u5199\u5165 ${r}\uFF08${s.length} \u5B57\u7B26\uFF09`,summary:"\u5199\u5165\u6210\u529F"}}catch(i){return{ok:!1,content:`\u5199\u5165\u5931\u8D25\uFF1A${i instanceof Error?i.message:String(i)}`}}}},Sr={name:"edit_file",description:"\u7CBE\u786E\u66FF\u6362\u6587\u4EF6\u4E2D\u7684\u6587\u672C\u3002\u5C06 search \u6307\u5B9A\u7684\u6587\u672C\u66FF\u6362\u4E3A replace\u3002search \u5FC5\u987B\u4E0E\u6587\u4EF6\u5185\u5BB9\u5B8C\u5168\u4E00\u81F4\uFF08\u542B\u7F29\u8FDB\uFF09\uFF1B\u82E5 search \u5339\u914D\u5230\u591A\u5904\u5219\u9ED8\u8BA4\u62D2\u7EDD\u6267\u884C\uFF0C\u9700\u63D0\u4F9B\u66F4\u7CBE\u786E\u7684 search \u6216\u8BBE\u7F6E replace_all \u4E3A true\u3002",requiresConfirmation:!0,parameters:{type:"object",properties:{path:{type:"string",description:"\u6587\u4EF6\u8DEF\u5F84"},search:{type:"string",description:"\u8981\u88AB\u66FF\u6362\u7684\u539F\u6587\uFF08\u9700\u7CBE\u786E\u5339\u914D\uFF09"},replace:{type:"string",description:"\u66FF\u6362\u540E\u7684\u65B0\u6587\u672C"},replace_all:{type:"boolean",description:"\u662F\u5426\u66FF\u6362\u6240\u6709\u5339\u914D\u9879\uFF08\u9ED8\u8BA4 false\uFF09"}},required:["path","search","replace"]},async execute(n,e){let r=$e(W(n.path),e.cwd);if(!C.existsSync(r))return{ok:!1,content:`\u9519\u8BEF\uFF1A\u6587\u4EF6\u4E0D\u5B58\u5728\uFF1A${r}`};let s=W(n.search),i=W(n.replace),o=n.replace_all===!0;if(!s)return{ok:!1,content:"\u9519\u8BEF\uFF1Asearch \u4E0D\u80FD\u4E3A\u7A7A"};let a=C.readFileSync(r,"utf8");if(!a.includes(s)){let u=f=>f.replace(/\s+/g," ").trim(),d=/^\s*\d+\s*[:|]/m.test(s),h=!d&&u(a).includes(u(s)),p="";return d?p="\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":h&&(p=`
|
|
28
|
+
\u6CE8\u610F\uFF1A\u5FFD\u7565\u7A7A\u767D\u540E\u80FD\u627E\u5230\u76F8\u4F3C\u5185\u5BB9 \u2014\u2014 \u5F88\u53EF\u80FD\u53EA\u662F\u7F29\u8FDB\uFF08\u7A7A\u683C/\u5236\u8868\u7B26\uFF09\u6216\u6362\u884C\u4E0D\u4E00\u81F4\u3002\u8BF7\u91CD\u65B0 read_file \u8BE5\u533A\u57DF\uFF0C\u7528\u6587\u4EF6\u91CC**\u539F\u6837**\u7684\u7A7A\u767D\u91CD\u5199 search\u3002`),{ok:!1,content:`\u9519\u8BEF\uFF1A\u5728 ${r} \u4E2D\u672A\u627E\u5230\u5339\u914D\u6587\u672C\u3002\u8BF7\u5148\u7528 read_file \u786E\u8BA4\u5185\u5BB9\uFF08\u6CE8\u610F\u7F29\u8FDB\u4E0E\u6362\u884C\u9700\u5B8C\u5168\u4E00\u81F4\uFF09\u3002`+p}}let l=a.split(s).length-1;if(l>1&&!o)return{ok:!1,content:`\u9519\u8BEF\uFF1Asearch \u5728 ${r} \u4E2D\u51FA\u73B0 ${l} \u5904\uFF0C\u4E3A\u907F\u514D\u8BEF\u6539\u672A\u6267\u884C\u3002
|
|
29
|
+
\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 c=o?a.split(s).join(i):a.replace(s,()=>i);return C.writeFileSync(r,c,"utf8"),{ok:!0,content:`\u5DF2\u66F4\u65B0 ${r}\uFF08\u66FF\u6362 ${o?l:1} \u5904\uFF09`,summary:`\u66FF\u6362 ${o?l:1} \u5904`}}},Tr={name:"list_dir",description:"\u5217\u51FA\u76EE\u5F55\u4E2D\u7684\u6587\u4EF6\u4E0E\u5B50\u76EE\u5F55\u3002\u7701\u7565 path \u65F6\u5217\u51FA\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\u3002",parameters:{type:"object",properties:{path:{type:"string",description:"\u76EE\u5F55\u8DEF\u5F84\uFF08\u53EF\u9009\uFF09"}},required:[]},async execute(n,e){let r=n.path?$e(W(n.path),e.cwd):e.cwd;if(!C.existsSync(r))return{ok:!1,content:`\u9519\u8BEF\uFF1A\u76EE\u5F55\u4E0D\u5B58\u5728\uFF1A${r}`};if(!C.statSync(r).isDirectory())return{ok:!1,content:`\u9519\u8BEF\uFF1A${r} \u4E0D\u662F\u76EE\u5F55`};let s=C.readdirSync(r,{withFileTypes:!0}).filter(o=>!br.has(o.name)).sort((o,a)=>o.isDirectory()!==a.isDirectory()?o.isDirectory()?-1:1:o.name.localeCompare(a.name)),i=s.map(o=>{let a=o.isDirectory()?"/":"";return`${o.isDirectory()?"DIR ":"FILE"} ${o.name}${a}`});return{ok:!0,content:`${r}
|
|
29
30
|
${i.join(`
|
|
30
|
-
`)||"(\u7A7A\u76EE\u5F55)"}`,summary:`${s.length} \u9879`}}},Er={name:"glob",description:"\u6309\u901A\u914D\u7B26\u67E5\u627E\u6587\u4EF6\uFF0C\u652F\u6301 **\u3001*\u3001? \u8BED\u6CD5\u3002\u4F8B\u5982 'src/**/*.ts'\u3002\u8FD4\u56DE\u5339\u914D\u7684\u6587\u4EF6\u8DEF\u5F84\u3002",parameters:{type:"object",properties:{pattern:{type:"string",description:"glob \u6A21\u5F0F\uFF0C\u5982 '**/*.ts'"},path:{type:"string",description:"\u641C\u7D22\u8D77\u59CB\u76EE\u5F55\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4\u5F53\u524D\u76EE\u5F55\uFF09"}},required:["pattern"]},async execute(n,e){let r=
|
|
31
|
+
`)||"(\u7A7A\u76EE\u5F55)"}`,summary:`${s.length} \u9879`}}},Er={name:"glob",description:"\u6309\u901A\u914D\u7B26\u67E5\u627E\u6587\u4EF6\uFF0C\u652F\u6301 **\u3001*\u3001? \u8BED\u6CD5\u3002\u4F8B\u5982 'src/**/*.ts'\u3002\u8FD4\u56DE\u5339\u914D\u7684\u6587\u4EF6\u8DEF\u5F84\u3002",parameters:{type:"object",properties:{pattern:{type:"string",description:"glob \u6A21\u5F0F\uFF0C\u5982 '**/*.ts'"},path:{type:"string",description:"\u641C\u7D22\u8D77\u59CB\u76EE\u5F55\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4\u5F53\u524D\u76EE\u5F55\uFF09"}},required:["pattern"]},async execute(n,e){let r=W(n.pattern);if(!r)return{ok:!1,content:"\u9519\u8BEF\uFF1Apattern \u4E0D\u80FD\u4E3A\u7A7A"};let s=n.path?$e(W(n.path),e.cwd):e.cwd,i=He(r),o=[];if(wt(s,l=>{if(o.length>=bt)return;let c=E.relative(s,l).split(E.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>=bt?`
|
|
31
32
|
\u2026\uFF08\u5DF2\u8FBE ${bt} \u6761\u4E0A\u9650\uFF09`:"";return{ok:!0,content:o.join(`
|
|
32
|
-
`)+a,summary:`${o.length} \u4E2A\u6587\u4EF6`}}},kr={name:"grep",description:"\u5728\u6587\u4EF6\u4E2D\u6309\u6B63\u5219\u8868\u8FBE\u5F0F\u641C\u7D22\u6587\u672C\u5185\u5BB9\u3002\u8FD4\u56DE \u6587\u4EF6:\u884C\u53F7:\u5185\u5BB9\u3002\u53EF\u901A\u8FC7 include \u9650\u5B9A\u6587\u4EF6\u7C7B\u578B\uFF08\u5982 '*.ts'\uFF09\u3002",parameters:{type:"object",properties:{pattern:{type:"string",description:"\u6B63\u5219\u8868\u8FBE\u5F0F"},path:{type:"string",description:"\u641C\u7D22\u76EE\u5F55\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4\u5F53\u524D\u76EE\u5F55\uFF09"},include:{type:"string",description:"\u6587\u4EF6\u540D\u901A\u914D\u7B26\u8FC7\u6EE4\uFF0C\u5982 '*.ts'\uFF08\u53EF\u9009\uFF09"}},required:["pattern"]},async execute(n,e){let r=
|
|
33
|
-
\u8BF7\u6539\u5199\u4E3A\u7B49\u4EF7\u4F46\u66F4\u5B89\u5168\u7684\u6A21\u5F0F\uFF0C\u4F8B\u5982\u7528 [^x]* \u4EE3\u66FF (.*)+\u3002`};let s;try{s=new RegExp(r)}catch(u){return{ok:!1,content:`\u9519\u8BEF\uFF1A\u65E0\u6548\u7684\u6B63\u5219\u8868\u8FBE\u5F0F\uFF1A${u instanceof Error?u.message:String(u)}`}}let i=n.path
|
|
34
|
-
`);for(let
|
|
35
|
-
\u2026\uFF08\u5DF2\u8FBE ${
|
|
36
|
-
`)+c,summary:`${l.length} \u6761\u5339\u914D`}}};function wt(n,e){let r;try{r=C.readdirSync(n,{withFileTypes:!0})}catch{return}for(let s of r){if(br.has(s.name))continue;let i=E.join(n,s.name);s.isDirectory()?wt(i,e):(s.isFile()||s.isSymbolicLink())&&e(i)}}function
|
|
33
|
+
`)+a,summary:`${o.length} \u4E2A\u6587\u4EF6`}}},kr={name:"grep",description:"\u5728\u6587\u4EF6\u4E2D\u6309\u6B63\u5219\u8868\u8FBE\u5F0F\u641C\u7D22\u6587\u672C\u5185\u5BB9\u3002\u8FD4\u56DE \u6587\u4EF6:\u884C\u53F7:\u5185\u5BB9\u3002\u53EF\u901A\u8FC7 include \u9650\u5B9A\u6587\u4EF6\u7C7B\u578B\uFF08\u5982 '*.ts'\uFF09\u3002",parameters:{type:"object",properties:{pattern:{type:"string",description:"\u6B63\u5219\u8868\u8FBE\u5F0F"},path:{type:"string",description:"\u641C\u7D22\u76EE\u5F55\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4\u5F53\u524D\u76EE\u5F55\uFF09"},include:{type:"string",description:"\u6587\u4EF6\u540D\u901A\u914D\u7B26\u8FC7\u6EE4\uFF0C\u5982 '*.ts'\uFF08\u53EF\u9009\uFF09"}},required:["pattern"]},async execute(n,e){let r=W(n.pattern);if(!r)return{ok:!1,content:"\u9519\u8BEF\uFF1Apattern \u4E0D\u80FD\u4E3A\u7A7A"};if(ts(r))return{ok:!1,content:`\u9519\u8BEF\uFF1A\u6B63\u5219\u53EF\u80FD\u5B58\u5728\u707E\u96BE\u6027\u56DE\u6EAF\uFF08\u5D4C\u5957\u91CF\u8BCD\uFF0C\u5982 (a+)+\uFF09\uFF0C\u5DF2\u62D2\u7EDD\u6267\u884C\u4EE5\u514D\u5361\u6B7B\u8FDB\u7A0B\u3002
|
|
34
|
+
\u8BF7\u6539\u5199\u4E3A\u7B49\u4EF7\u4F46\u66F4\u5B89\u5168\u7684\u6A21\u5F0F\uFF0C\u4F8B\u5982\u7528 [^x]* \u4EE3\u66FF (.*)+\u3002`};let s;try{s=new RegExp(r)}catch(u){return{ok:!1,content:`\u9519\u8BEF\uFF1A\u65E0\u6548\u7684\u6B63\u5219\u8868\u8FBE\u5F0F\uFF1A${u instanceof Error?u.message:String(u)}`}}let i=n.path?$e(W(n.path),e.cwd):e.cwd,o=n.include?He(W(n.include)):null,a=rs(i),l=[];if(wt(i,u=>{if(l.length>=Fe||a.length>0&&ns(E.relative(i,u),a))return;let d=E.relative(i,u).split(E.sep).join("/");if(o&&!o.test(d)&&!o.test(E.basename(u)))return;let h;try{h=C.statSync(u)}catch{return}if(h.size>es||h.size===0)return;let p;try{p=C.readFileSync(u)}catch{return}if(wr(p))return;let f=p.toString("utf8").split(`
|
|
35
|
+
`);for(let $=0;$<f.length;$++){if(l.length>=Fe)return;let y=f[$],m=y.length>$r?y.slice(0,$r):y;s.test(m)&&l.push(`${d}:${$+1}: ${y.trim().slice(0,300)}`)}}),l.length===0)return{ok:!0,content:"\u672A\u627E\u5230\u5339\u914D\u5185\u5BB9\u3002"};let c=l.length>=Fe?`
|
|
36
|
+
\u2026\uFF08\u5DF2\u8FBE ${Fe} \u6761\u4E0A\u9650\uFF09`:"";return{ok:!0,content:l.join(`
|
|
37
|
+
`)+c,summary:`${l.length} \u6761\u5339\u914D`}}};function wt(n,e){let r;try{r=C.readdirSync(n,{withFileTypes:!0})}catch{return}for(let s of r){if(br.has(s.name))continue;let i=E.join(n,s.name);s.isDirectory()?wt(i,e):(s.isFile()||s.isSymbolicLink())&&e(i)}}function He(n){let e="",r=n.split(E.sep).join("/");for(let s=0;s<r.length;s++){let i=r[s];if(i==="*")r[s+1]==="*"?(s++,r[s+1]==="/"?(s++,e+="(?:.*/)?"):e+=".*"):e+="[^/]*";else if(i==="?")e+="[^/]";else if(i==="{"){let o=r.indexOf("}",s);if(o!==-1){let a=r.slice(s+1,o).split(",").map(xr).join("|");e+=`(?:${a})`,s=o}else e+="\\{"}else e+=xr(i)}return new RegExp(`^${e}$`)}function xr(n){return n.replace(/[.+^${}()|[\]\\]/g,"\\$&")}var S=v(require("fs")),J=v(require("path")),ss=".xuanzhu",is="MEMORY.md",os=`# \u9879\u76EE\u89C4\u5219
|
|
37
38
|
|
|
38
39
|
> \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
|
|
39
40
|
> \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
|
|
@@ -56,15 +57,15 @@ ${i.join(`
|
|
|
56
57
|
\u76EE\u5F55\u7ED3\u6784\u7B49\uFF09\u3002**\u4F60\u5FC5\u987B\u4E25\u683C\u6309\u7167 \`AGENTS.md\` \u6267\u884C\u3002**
|
|
57
58
|
|
|
58
59
|
\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
|
|
59
|
-
\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 _r(n){return Mr(
|
|
60
|
-
`}function cs(n){let e=
|
|
60
|
+
\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 _r(n){return Mr(J.join(n,as))===null?os:`${ls}
|
|
61
|
+
`}function cs(n){let e=J.join(n,ss),r=J.join(e,"memory");return{root:n,dir:e,memoryDir:r,longTermFile:J.join(r,is),rulesFile:J.join(e,"rules.md")}}function ne(n){return cs(J.resolve(n))}function vt(n){let e=ne(n);if(S.existsSync(e.dir)){S.mkdirSync(e.memoryDir,{recursive:!0});try{S.existsSync(e.rulesFile)||S.writeFileSync(e.rulesFile,_r(e.root),"utf8")}catch{}return{paths:e,created:!1}}try{return S.mkdirSync(e.memoryDir,{recursive:!0}),S.writeFileSync(e.rulesFile,_r(e.root),"utf8"),{paths:e,created:!0}}catch{return{paths:e,created:!1}}}function Rr(n){return Mr(ne(n).rulesFile)}function us(n,e=new Date){let r=`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`;return J.join(ne(n).memoryDir,`${r}.md`)}function je(n){let e=ne(n),r="",s="",i="";try{S.existsSync(e.longTermFile)&&(r=S.readFileSync(e.longTermFile,"utf8").trim())}catch{}try{if(S.existsSync(e.memoryDir)){let o=S.readdirSync(e.memoryDir).filter(a=>/^\d{4}-\d{2}-\d{2}\.md$/.test(a)).sort().reverse();o.length>0&&(i=o[0],s=S.readFileSync(J.join(e.memoryDir,o[0]),"utf8").trim())}}catch{}return{longTerm:r,recentDailyName:i,recentDaily:s}}function Pr(n,e,r){let s=ne(n);S.mkdirSync(s.memoryDir,{recursive:!0});let i=new Date,o=d=>String(d).padStart(2,"0"),a=`${i.getFullYear()}-${o(i.getMonth()+1)}-${o(i.getDate())} ${o(i.getHours())}:${o(i.getMinutes())}`,l=r==="long"?s.longTermFile:us(n,i),c=`
|
|
61
62
|
|
|
62
63
|
## ${a}
|
|
63
64
|
|
|
64
65
|
${e.trim()}
|
|
65
66
|
`,u=S.existsSync(l)?"":r==="long"?`# \u9879\u76EE\u957F\u671F\u8BB0\u5FC6
|
|
66
67
|
`:`# \u6BCF\u65E5\u8BB0\u5F55
|
|
67
|
-
`;return S.appendFileSync(l,`${u}${c}`,"utf8"),l}var Ar=12e3,Ir={name:"memory_read",description:"\u8BFB\u53D6\u5F53\u524D\u9879\u76EE\u7684\u8BB0\u5FC6\uFF08\u5B58\u653E\u5728 <\u9879\u76EE>/.xuanzhu/memory/\uFF09\uFF1A\u5305\u542B\u957F\u671F\u8BB0\u5FC6 MEMORY.md \u4E0E\u6700\u8FD1\u4E00\u4EFD\u6BCF\u65E5\u65E5\u5FD7\u3002\u5728\u5F00\u59CB\u5904\u7406\u9700\u8981\u9879\u76EE\u80CC\u666F\u7684\u4EFB\u52A1\u524D\u8C03\u7528\u5B83\uFF0C\u53EF\u4EE5\u4E86\u89E3\u6B64\u524D\u79EF\u7D2F\u7684\u7EA6\u5B9A\u4E0E\u7ED3\u8BBA\u3002",parameters:{type:"object",properties:{},required:[]},async execute(n,e){let r=
|
|
68
|
+
`;return S.appendFileSync(l,`${u}${c}`,"utf8"),l}var Ar=12e3,Ir={name:"memory_read",description:"\u8BFB\u53D6\u5F53\u524D\u9879\u76EE\u7684\u8BB0\u5FC6\uFF08\u5B58\u653E\u5728 <\u9879\u76EE>/.xuanzhu/memory/\uFF09\uFF1A\u5305\u542B\u957F\u671F\u8BB0\u5FC6 MEMORY.md \u4E0E\u6700\u8FD1\u4E00\u4EFD\u6BCF\u65E5\u65E5\u5FD7\u3002\u5728\u5F00\u59CB\u5904\u7406\u9700\u8981\u9879\u76EE\u80CC\u666F\u7684\u4EFB\u52A1\u524D\u8C03\u7528\u5B83\uFF0C\u53EF\u4EE5\u4E86\u89E3\u6B64\u524D\u79EF\u7D2F\u7684\u7EA6\u5B9A\u4E0E\u7ED3\u8BBA\u3002",parameters:{type:"object",properties:{},required:[]},async execute(n,e){let r=je(e.cwd),s=ne(e.cwd);if(!r.longTerm&&!r.recentDaily)return{ok:!0,content:`\u9879\u76EE\u8BB0\u5FC6\u4E3A\u7A7A\uFF08\u76EE\u5F55\uFF1A${s.memoryDir}\uFF09\u3002`,summary:"\u6682\u65E0\u8BB0\u5FC6"};let i=[];r.longTerm&&i.push(`## \u957F\u671F\u8BB0\u5FC6\uFF08MEMORY.md\uFF09
|
|
68
69
|
|
|
69
70
|
${r.longTerm}`),r.recentDaily&&i.push(`## \u6700\u8FD1\u65E5\u5FD7\uFF08${r.recentDailyName}\uFF09
|
|
70
71
|
|
|
@@ -76,20 +77,20 @@ ${r.recentDaily}`);let o=i.join(`
|
|
|
76
77
|
|
|
77
78
|
\u2026\uFF08\u5185\u5BB9\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD\uFF09`:o,summary:"\u5DF2\u8BFB\u53D6\u9879\u76EE\u8BB0\u5FC6"}}},Lr={name:"memory_write",description:"\u628A\u503C\u5F97\u8DE8\u4F1A\u8BDD\u4FDD\u7559\u7684\u4FE1\u606F\u5199\u5165\u9879\u76EE\u8BB0\u5FC6\uFF08<\u9879\u76EE>/.xuanzhu/memory/\uFF09\u3002\u5728\u5B8C\u6210\u5B9E\u8D28\u5DE5\u4F5C\uFF08\u5B9E\u73B0\u529F\u80FD\u3001\u4FEE\u590D\u7F3A\u9677\u3001\u786E\u5B9A\u6280\u672F\u65B9\u6848\u3001\u7EA6\u5B9A\u9879\u76EE\u89C4\u8303\uFF09\u540E\u8C03\u7528\uFF0C\u4EE5\u4FBF\u540E\u7EED\u4F1A\u8BDD\u590D\u7528\u3002scope=daily \u8FFD\u52A0\u5230\u5F53\u65E5\u65E5\u5FD7\uFF08\u9ED8\u8BA4\uFF0C\u9002\u5408\u8FC7\u7A0B\u8BB0\u5F55\uFF09\uFF1Bscope=long \u8FFD\u52A0\u5230\u957F\u671F\u8BB0\u5FC6 MEMORY.md\uFF08\u9002\u5408\u7A33\u5B9A\u7684\u7ED3\u8BBA\u4E0E\u7EA6\u5B9A\uFF09\u3002\u8BF7\u5199\u7B80\u6D01\u7684\u4E8B\u5B9E\u6027\u5185\u5BB9\uFF0C\u4E0D\u8981\u8BB0\u5F55\u77AC\u65F6\u4FE1\u606F\uFF08\u4E34\u65F6\u8DEF\u5F84\u3001\u5DE5\u5177\u62A5\u9519\u7B49\uFF09\u3002",parameters:{type:"object",properties:{content:{type:"string",description:"\u8981\u8BB0\u5F55\u7684\u5185\u5BB9\uFF08Markdown\uFF0C\u5EFA\u8BAE\u7B80\u6D01\u3001\u5206\u70B9\uFF09"},scope:{type:"string",enum:["daily","long"],description:"daily=\u5F53\u65E5\u65E5\u5FD7\uFF08\u9ED8\u8BA4\uFF09\uFF1Blong=\u957F\u671F\u8BB0\u5FC6 MEMORY.md"}},required:["content"]},async execute(n,e){let r=typeof n.content=="string"?n.content.trim():"";if(!r)return{ok:!1,content:"\u9519\u8BEF\uFF1Acontent \u4E0D\u80FD\u4E3A\u7A7A\u3002"};let s=n.scope==="long"?"long":"daily";try{let i=Pr(e.cwd,r,s),o=s==="long"?"\u957F\u671F\u8BB0\u5FC6":"\u5F53\u65E5\u65E5\u5FD7";return{ok:!0,content:`\u5DF2\u5199\u5165${o}\uFF1A${i}
|
|
78
79
|
|
|
79
|
-
\uFF08\u8BB0\u5FC6\u76EE\u5F55\uFF1A${
|
|
80
|
-
\uFF08\u76EE\u6807\u76EE\u5F55\uFF1A${
|
|
80
|
+
\uFF08\u8BB0\u5FC6\u76EE\u5F55\uFF1A${ne(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)}
|
|
81
|
+
\uFF08\u76EE\u6807\u76EE\u5F55\uFF1A${ne(e.cwd).memoryDir}\uFF09`}}}};var ae=v(require("fs")),ze=v(require("path"));var Or="SKILL.md",Nr=8e4;function Ur(n){return n.replace(/^["']|["']$/g,"").trim()}function ds(n){let e=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?/.exec(n);if(!e)return{meta:{},body:n};let r=e[1],s=n.slice(e[0].length),i=/^name:\s*(.+)$/m.exec(r)?.[1];return{meta:{name:i?Ur(i):void 0,description:hs(r)},body:s}}function hs(n){let e=/^description:\s*(.*)$/m.exec(n)?.[1]?.trim();if(e&&e!==">"&&e!=="|"&&e!==">-"&&e!=="|-")return Ur(e);let r=/^description:\s*[>|]-?\s*\n((?:[ \t]+\S.*\n?)+)/m.exec(n)?.[1];return r?r.replace(/\s+/g," ").trim():""}function ps(n){let e=ze.join(n,Or);if(ae.existsSync(e))return e;try{let r=ae.readdirSync(n).find(s=>s.toLowerCase()===Or.toLowerCase());return r?ze.join(n,r):null}catch{return null}}function Dr(n,e,r){let s;try{s=ae.readdirSync(n,{withFileTypes:!0})}catch{return}for(let i of s){if(!i.isDirectory())continue;let o=ze.join(n,i.name),a=ps(o);if(!a)continue;let l;try{l=ae.readFileSync(a,"utf8")}catch{continue}let{meta:c}=ds(l),u=(c.name||i.name).trim();u&&r.set(u,{name:u,description:c.description??"",dir:o,file:a,source:e})}}function qe(){let n=new Map;return Dr(Ht(),"builtin",n),Dr(jt(),"user",n),[...n.values()].sort((e,r)=>e.name.localeCompare(r.name))}function Kr(n){let e=n.trim().toLowerCase();if(e)return qe().find(r=>r.name.toLowerCase()===e)}function Br(n){let e=ae.readFileSync(n.file,"utf8");return e.length<=Nr?e:`${e.slice(0,Nr)}
|
|
81
82
|
|
|
82
|
-
\u2026\uFF08\u6280\u80FD\u5185\u5BB9\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD\uFF09`}function
|
|
83
|
-
[\u5DF2\u53D6\u6D88]`,timedOut:!1})};if(r){if(r.aborted){
|
|
84
|
-
[\u6267\u884C\u8D85\u65F6 ${e}ms]`:c,timedOut:u})})})}async function
|
|
83
|
+
\u2026\uFF08\u6280\u80FD\u5185\u5BB9\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD\uFF09`}function ke(){return process.platform==="darwin"?"darwin":process.platform==="win32"?"win32":"linux"}var Ct="npm install -g @playwright/cli@latest",St="npx --yes playwright@latest install chromium",fs={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"'},Wr={playwright:[{name:"Playwright CLI\uFF08playwright-cli\uFF09",check:"playwright-cli --version",install:{linux:Ct,darwin:Ct,win32:Ct},postInstall:{linux:St,darwin:St,win32:St}}],officecli:[{name:"OfficeCLI\uFF08officecli\uFF09",check:"officecli --version",install:fs}]};function ye(n){return Wr[n.trim().toLowerCase()]??[]}function Fr(){return Object.keys(Wr)}var zr=require("child_process");var ms=15e3,Hr=9e5,gs=2e4;function Tt(n,e,r){return new Promise(s=>{let i=process.platform==="win32",o=i?"cmd.exe":process.env.SHELL||"bash",l=(0,zr.spawn)(o,i?["/d","/s","/c",n]:["-lc",n],{env:process.env,windowsHide:!0,detached:!i}),c="",u=!1,d=!1,h=m=>{c.length<gs&&(c+=m.toString())},p=m=>{d||(d=!0,clearTimeout($),r?.removeEventListener("abort",y),s(m))},f=()=>{if(!i&&l.pid)try{process.kill(-l.pid,"SIGKILL");return}catch{}try{l.kill("SIGKILL")}catch{}},$=setTimeout(()=>{u=!0,f()},e),y=()=>{f(),p({ok:!1,output:c+`
|
|
84
|
+
[\u5DF2\u53D6\u6D88]`,timedOut:!1})};if(r){if(r.aborted){y();return}r.addEventListener("abort",y,{once:!0})}l.stdout?.on("data",h),l.stderr?.on("data",h),l.on("error",m=>{p({ok:!1,output:c+String(m),timedOut:u})}),l.on("close",m=>{p({ok:m===0&&!u,output:u?`${c}
|
|
85
|
+
[\u6267\u884C\u8D85\u65F6 ${e}ms]`:c,timedOut:u})})})}async function Ge(n,e){return(await Tt(n.check,ms,e)).ok}async function Et(n,e=ke(),r,s){let i=n.install[e];if(!i)return{ok:!1,log:`\u5F53\u524D\u5E73\u53F0\uFF08${e}\uFF09\u6CA1\u6709\u53EF\u7528\u7684\u81EA\u52A8\u5B89\u88C5\u547D\u4EE4\u3002`};let o=[],a=d=>{let h=d.trim();h&&(o.push(h),s?.(h))};a(`$ ${i}`);let l=await Tt(i,Hr,r);for(let d of jr(l.output,12))a(d);if(!l.ok)return{ok:!1,log:o.join(`
|
|
85
86
|
`)};let c=n.postInstall?.[e];if(c){a(`$ ${c}`);let d=await Tt(c,Hr,r);for(let h of jr(d.output,12))a(h);if(!d.ok)return{ok:!1,log:o.join(`
|
|
86
|
-
`)}}return await
|
|
87
|
+
`)}}return await Ge(n,r)?(a(`\u2713 ${n.name} \u5DF2\u5C31\u7EEA`),{ok:!0,log:o.join(`
|
|
87
88
|
`)}):(a(`\u26A0 \u5B89\u88C5\u547D\u4EE4\u5DF2\u6267\u884C\uFF0C\u4F46 \u201C${n.check}\u201D \u4ECD\u672A\u901A\u8FC7\uFF1B\u53EF\u80FD\u662F PATH \u5C1A\u672A\u5237\u65B0\uFF0C\u8BF7\u91CD\u65B0\u6253\u5F00\u7EC8\u7AEF\u540E\u518D\u8BD5\u3002`),{ok:!1,log:o.join(`
|
|
88
|
-
`)})}async function qr(n,e={}){let r=e.platform??
|
|
89
|
+
`)})}async function qr(n,e={}){let r=e.platform??ke(),s={installed:[],skipped:[],failed:[]};for(let i of ye(n)){if(await Ge(i,e.signal))continue;let o=i.install[r];if(!o){s.skipped.push(`${i.name}\uFF08\u5F53\u524D\u5E73\u53F0\u65E0\u81EA\u52A8\u5B89\u88C5\u547D\u4EE4\uFF09`);continue}if(!(e.confirm?await e.confirm(i,o):!1)){s.skipped.push(`${i.name}`);continue}e.onOutput?.(`\u6B63\u5728\u5B89\u88C5 ${i.name} \u2026\uFF08\u53EF\u80FD\u9700\u8981\u6570\u5206\u949F\uFF09`);let l=await Et(i,r,e.signal,e.onOutput);if(l.ok)s.installed.push(i.name);else{let c=l.log.split(`
|
|
89
90
|
`).slice(-2).join(" ");s.failed.push(`${i.name} \u2192 ${c}`)}}return s}function jr(n,e){return n.split(`
|
|
90
|
-
`).map(s=>s.trimEnd()).filter(s=>s.trim().length>0).slice(-e)}var Gr={name:"list_skills",description:"\u5217\u51FA\u7384\u732A\u5F53\u524D\u53EF\u7528\u7684\u5168\u90E8\u6280\u80FD\uFF08\u540D\u79F0\u4E0E\u7528\u9014\uFF09\u3002\u6280\u80FD\u662F\u4E00\u4EFD\u6307\u5BFC\u4F60\u4F7F\u7528\u7279\u5B9A\u5916\u90E8 CLI \u5DE5\u5177\u7684\u6307\u5357\u3002\u5F53\u4EFB\u52A1\u53EF\u80FD\u6D89\u53CA\u67D0\u4E2A\u9886\u57DF\uFF08\u6D4F\u89C8\u5668\u81EA\u52A8\u5316\u3001Office \u6587\u6863\u3001GitHub\u3001\u6570\u636E\u5E93\u7B49\uFF09\u65F6\uFF0C\u5148\u8C03\u7528\u672C\u5DE5\u5177\u67E5\u770B\u662F\u5426\u6709\u5BF9\u5E94\u6280\u80FD\u3002",parameters:{type:"object",properties:{},required:[]},async execute(n,e){let r=
|
|
91
|
+
`).map(s=>s.trimEnd()).filter(s=>s.trim().length>0).slice(-e)}var Gr={name:"list_skills",description:"\u5217\u51FA\u7384\u732A\u5F53\u524D\u53EF\u7528\u7684\u5168\u90E8\u6280\u80FD\uFF08\u540D\u79F0\u4E0E\u7528\u9014\uFF09\u3002\u6280\u80FD\u662F\u4E00\u4EFD\u6307\u5BFC\u4F60\u4F7F\u7528\u7279\u5B9A\u5916\u90E8 CLI \u5DE5\u5177\u7684\u6307\u5357\u3002\u5F53\u4EFB\u52A1\u53EF\u80FD\u6D89\u53CA\u67D0\u4E2A\u9886\u57DF\uFF08\u6D4F\u89C8\u5668\u81EA\u52A8\u5316\u3001Office \u6587\u6863\u3001GitHub\u3001\u6570\u636E\u5E93\u7B49\uFF09\u65F6\uFF0C\u5148\u8C03\u7528\u672C\u5DE5\u5177\u67E5\u770B\u662F\u5426\u6709\u5BF9\u5E94\u6280\u80FD\u3002",parameters:{type:"object",properties:{},required:[]},async execute(n,e){let r=qe();if(r.length===0)return{ok:!0,content:"\u5F53\u524D\u6CA1\u6709\u53EF\u7528\u6280\u80FD\u3002"};let s=r.map(i=>{let o=i.source==="user"?"\uFF08\u7528\u6237\uFF09":"";return`- ${i.name}${o}\uFF1A${i.description||"\uFF08\u65E0\u63CF\u8FF0\uFF09"}`});return{ok:!0,content:`\u53EF\u7528\u6280\u80FD\uFF08${r.length} \u4E2A\uFF09\uFF1A
|
|
91
92
|
${s.join(`
|
|
92
|
-
`)}`,summary:`${r.length} \u4E2A\u6280\u80FD`}}},Xr={name:"load_skill",description:"\u52A0\u8F7D\u6307\u5B9A\u6280\u80FD\u7684\u5B8C\u6574\u6307\u5357\uFF08SKILL.md \u5168\u6587\uFF09\uFF0C\u968F\u540E\u8BF7\u4E25\u683C\u6309\u6307\u5357\u4E2D\u7684\u6B65\u9AA4\u4E0E\u547D\u4EE4\u64CD\u4F5C\u3002\u82E5\u8BE5\u6280\u80FD\u4F9D\u8D56\u7684\u5916\u90E8\u547D\u4EE4\u5C1A\u672A\u5B89\u88C5\uFF0C\u7384\u732A\u4F1A\u81EA\u52A8\u5B89\u88C5\uFF08\u53EF\u80FD\u9700\u8981\u7528\u6237\u786E\u8BA4\u4E00\u6B21\uFF09\u3002\u6307\u5357\u5728\u672C\u6B21\u5BF9\u8BDD\u4E2D\u6301\u7EED\u6709\u6548\uFF0C\u540C\u4E00\u4E2A\u6280\u80FD\u65E0\u9700\u91CD\u590D\u52A0\u8F7D\u3002",parameters:{type:"object",properties:{name:{type:"string",description:"\u6280\u80FD\u540D\u79F0\uFF0C\u4F8B\u5982 playwright\u3001officecli"}},required:["name"]},async execute(n,e){let r=typeof n.name=="string"?n.name:"";if(!r.trim())return{ok:!1,content:"\u9519\u8BEF\uFF1A\u7F3A\u5C11\u6280\u80FD\u540D\u79F0\u53C2\u6570 name\u3002"};let s=Kr(r);if(!s){let c=
|
|
93
|
+
`)}`,summary:`${r.length} \u4E2A\u6280\u80FD`}}},Xr={name:"load_skill",description:"\u52A0\u8F7D\u6307\u5B9A\u6280\u80FD\u7684\u5B8C\u6574\u6307\u5357\uFF08SKILL.md \u5168\u6587\uFF09\uFF0C\u968F\u540E\u8BF7\u4E25\u683C\u6309\u6307\u5357\u4E2D\u7684\u6B65\u9AA4\u4E0E\u547D\u4EE4\u64CD\u4F5C\u3002\u82E5\u8BE5\u6280\u80FD\u4F9D\u8D56\u7684\u5916\u90E8\u547D\u4EE4\u5C1A\u672A\u5B89\u88C5\uFF0C\u7384\u732A\u4F1A\u81EA\u52A8\u5B89\u88C5\uFF08\u53EF\u80FD\u9700\u8981\u7528\u6237\u786E\u8BA4\u4E00\u6B21\uFF09\u3002\u6307\u5357\u5728\u672C\u6B21\u5BF9\u8BDD\u4E2D\u6301\u7EED\u6709\u6548\uFF0C\u540C\u4E00\u4E2A\u6280\u80FD\u65E0\u9700\u91CD\u590D\u52A0\u8F7D\u3002",parameters:{type:"object",properties:{name:{type:"string",description:"\u6280\u80FD\u540D\u79F0\uFF0C\u4F8B\u5982 playwright\u3001officecli"}},required:["name"]},async execute(n,e){let r=typeof n.name=="string"?n.name:"";if(!r.trim())return{ok:!1,content:"\u9519\u8BEF\uFF1A\u7F3A\u5C11\u6280\u80FD\u540D\u79F0\u53C2\u6570 name\u3002"};let s=Kr(r);if(!s){let c=qe().map(u=>u.name).join(", ");return{ok:!1,content:`\u672A\u627E\u5230\u6280\u80FD "${r}"\u3002\u53EF\u7528\u6280\u80FD\uFF1A${c||"\uFF08\u65E0\uFF09"}\u3002\u53EF\u5148\u8C03\u7528 list_skills \u67E5\u770B\u3002`}}let i=[];if(ye(s.name).length>0){let c=await qr(s.name,{signal:e.signal,onOutput:u=>e.emit?.(u),confirm:async(u,d)=>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
|
|
93
94
|
|
|
94
95
|
${d}`,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=Br(s),a=i.length>0?`> \u4F9D\u8D56\u5904\u7406\uFF1A
|
|
95
96
|
${i.map(c=>`> ${c}`).join(`
|
|
@@ -112,6 +113,10 @@ ${a}${o}`,summary:l>0?`\u5DF2\u52A0\u8F7D ${s.name}\uFF08\u5B89\u88C5 ${l} \u987
|
|
|
112
113
|
\u53EA\u8981\u6709\uFF0C\u5C31**\u5FC5\u987B\u5148\u8C03\u7528 memory_write \u8BB0\u5F55\uFF0C\u518D\u7ED3\u675F\u672C\u8F6E**\u3002
|
|
113
114
|
\u4E0D\u8981\u7559\u5230"\u4E0B\u6B21\u518D\u8BF4"\u2014\u2014\u672C\u8F6E\u7ED3\u675F\u540E\u4E0A\u4E0B\u6587\u5C31\u6CA1\u4E86\uFF0C\u8FD9\u4E9B\u7ED3\u8BBA\u4F1A\u6C38\u4E45\u4E22\u5931\u3002
|
|
114
115
|
\u7410\u788E\u7684\u8FC7\u7A0B\u7EC6\u8282\u3001\u4E34\u65F6\u8DEF\u5F84\u3001\u5DE5\u5177\u62A5\u9519\u4E0D\u5FC5\u8BB0\u5F55\u3002
|
|
116
|
+
7. \u4E0D\u8981\u91CD\u590D\u5DF2\u5B8C\u6210\u7684\u5DE5\u4F5C\uFF1A\u52A8\u624B\u524D\u5148\u770B\u5BF9\u8BDD\u91CC**\u5DF2\u7ECF\u505A\u8FC7\u4EC0\u4E48**\uFF0C\u4ECE\u4E0A\u6B21\u505C\u4E0B\u7684\u5730\u65B9\u7EE7\u7EED\uFF0C
|
|
117
|
+
\u4E0D\u8981\u6BCF\u6B21\u90FD\u4ECE\u5934\u91CD\u8FF0\u8BA1\u5212\u3001\u91CD\u8DD1\u540C\u6837\u7684\u8C03\u7528\u3002\u82E5\u5DE5\u5177\u8FD4\u56DE\u91CC\u51FA\u73B0
|
|
118
|
+
\u300C[\u7CFB\u7EDF\u63D0\u9192] \u8FD9\u4E00\u6B65\u5DF2\u7ECF\u5B8C\u6210\u300D\uFF0C\u8BF4\u660E\u4F60\u6B63\u5728\u91CD\u590D\uFF0C\u8BF7\u7ACB\u5373\u8F6C\u5411\u672A\u5B8C\u6210\u7684\u90E8\u5206 \u2014\u2014
|
|
119
|
+
\u957F\u4EFB\u52A1\u91CC\u6700\u5BB9\u6613\u51FA\u7684\u95EE\u9898\u5C31\u662F\u300C\u5FD8\u8BB0\u8FDB\u5EA6\u540E\u91CD\u65B0\u5F00\u59CB\u300D\u3002
|
|
115
120
|
|
|
116
121
|
## \u5DE5\u5177\u4F7F\u7528\u89C4\u8303
|
|
117
122
|
- read_file\uFF1A\u8BFB\u53D6\u6587\u4EF6\uFF08\u5E26\u884C\u53F7\uFF09\uFF0C\u4FEE\u6539\u524D\u5FC5\u8BFB
|
|
@@ -138,142 +143,154 @@ ${a}${o}`,summary:l>0?`\u5DF2\u52A0\u8F7D ${s.name}\uFF08\u5B89\u88C5 ${l} \u987
|
|
|
138
143
|
${r.trim()}`),o+=$s(s),e&&e.trim()&&(o+=`
|
|
139
144
|
|
|
140
145
|
## \u9644\u52A0\u6307\u4EE4
|
|
141
|
-
${e.trim()}`),o}var
|
|
146
|
+
${e.trim()}`),o}var Xe=1500;function $s(n){let e="\n\n## \u9879\u76EE\u8BB0\u5FC6\n\u672C\u9879\u76EE\u5728 `.xuanzhu/memory/` \u4E2D\u4FDD\u5B58\u8DE8\u4F1A\u8BDD\u8BB0\u5FC6\uFF08\u957F\u671F\u8BB0\u5FC6 `MEMORY.md` + \u6309\u65E5\u671F\u7684\u65E5\u5FD7\uFF09\uFF1A\n- **`memory_read`**\uFF1A\u8BFB\u53D6\u6B64\u524D\u79EF\u7D2F\u7684\u7ED3\u8BBA\u4E0E\u7EA6\u5B9A\u3002\u5F00\u59CB\u4E00\u9879\u9700\u8981\u9879\u76EE\u80CC\u666F\u7684\u4EFB\u52A1\u524D**\u5E94\u5F53\u5148\u8BFB**\uFF0C\u907F\u514D\u91CD\u590D\u6478\u7D22\u3001\u91CD\u590D\u8E29\u5751\u3002\n- **`memory_write`**\uFF1A\u5199\u5165\u503C\u5F97\u8DE8\u4F1A\u8BDD\u4FDD\u7559\u7684\u4FE1\u606F\u3002**\u6BCF\u5B8C\u6210\u4E00\u4EF6\u5B9E\u8D28\u5DE5\u4F5C\u90FD\u5FC5\u987B\u5199**\uFF0C\u4F8B\u5982\uFF1A\u786E\u5B9A\u7684\u6280\u672F\u65B9\u6848\u3001\u9879\u76EE\u7EA6\u5B9A\u3001\u7528\u6237\u7684\u504F\u597D\u4E0E\u8981\u6C42\u3001\u8E29\u8FC7\u7684\u5751\u53CA\u5176\u89E3\u6CD5\u3001\u91CD\u8981\u53D1\u73B0\u3002\n- \u8303\u56F4\u9009\u62E9\uFF1A`scope=long` \u5199\u957F\u671F\u8BB0\u5FC6\uFF08\u7A33\u5B9A\u7ED3\u8BBA\u4E0E\u7EA6\u5B9A\uFF09\uFF1B`scope=daily`\uFF08\u9ED8\u8BA4\uFF09\u5199\u5F53\u65E5\u65E5\u5FD7\uFF08\u8FC7\u7A0B\u8BB0\u5F55\u3001\u5F53\u5929\u7684\u8FDB\u5C55\uFF09\u3002\n- **\u4E0D\u8981\u8BB0\u5F55**\uFF1A\u4E34\u65F6\u8DEF\u5F84\u3001\u4E00\u6B21\u6027\u547D\u4EE4\u8F93\u51FA\u3001\u5DE5\u5177\u62A5\u9519\u3001\u7EAF\u63A2\u7D22\u8FC7\u7A0B \u2014\u2014 \u5B83\u4EEC\u5BF9\u540E\u7EED\u4F1A\u8BDD\u6CA1\u6709\u4EF7\u503C\uFF0C\u5199\u8FDB\u53BB\u53EA\u4F1A\u6324\u5360\u540E\u7EED\u4F1A\u8BDD\u7684\u4E0A\u4E0B\u6587\u3002",r=n?.longTerm?.trim();if(r){let i=r.length>Xe?`${r.slice(0,Xe)}
|
|
142
147
|
\u2026\uFF08\u5DF2\u622A\u65AD\uFF0C\u53EF\u7528 memory_read \u67E5\u770B\u5B8C\u6574\u5185\u5BB9\uFF09`:r;e+=`
|
|
143
148
|
|
|
144
149
|
### \u73B0\u6709\u957F\u671F\u8BB0\u5FC6\uFF08\u8282\u9009\uFF09
|
|
145
|
-
${i}`}let s=n?.recentDaily?.trim();if(s){let i=s.length>
|
|
150
|
+
${i}`}let s=n?.recentDaily?.trim();if(s){let i=s.length>Xe?`${s.slice(-Xe)}
|
|
146
151
|
\u2026\uFF08\u5DF2\u622A\u65AD\uFF0C\u53EF\u7528 memory_read \u67E5\u770B\u5B8C\u6574\u5185\u5BB9\uFF09`:s;e+=`
|
|
147
152
|
|
|
148
153
|
### \u4ECA\u65E5\u65E5\u5FD7\uFF08\u8282\u9009\uFF09
|
|
149
|
-
${i}`}return e}var en=
|
|
150
|
-
|
|
151
|
-
\
|
|
152
|
-
|
|
153
|
-
|
|
154
|
+
${i}`}return e}var en=v(require("path")),ys=new Set(["read_file","list_dir","glob","grep"]),xs=/(^|\/)(\.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,Qr=400,bs=.5,_t=1e6,ws=4,vs=1,Cs=3,Ze=class{provider;config;cwd;events;systemPrompt;warnedTightContext=!1;history=[];activeModel;constructor(e,r,s,i,o){this.provider=e,this.config=r,this.cwd=s,this.events=i,this.activeModel=o??se(r),this.systemPrompt=this.composeSystemPrompt()}getActiveModel(){return this.activeModel}composeSystemPrompt(){return Vr(this.cwd,this.config.systemPromptExtra,Rr(this.cwd),je(this.cwd))}get messages(){return this.history}reset(){this.history=[]}get messageCount(){return this.history.length}getCwd(){return this.cwd}setCwd(e){this.cwd=e,this.systemPrompt=this.composeSystemPrompt()}async run(e,r){let s=e;if(!this.warnedTightContext&&$t(this.activeModel?.contextWindow,this.activeModel?.model??"",this.systemPrompt)&&(this.warnedTightContext=!0,this.events.onNotice?.("\u5F53\u524D\u6A21\u578B\u53EF\u7528\u4E0A\u4E0B\u6587\u8FC7\u5C0F\uFF1A\u7CFB\u7EDF\u63D0\u793A\u8BCD\u5DF2\u5360\u53BB\u7EDD\u5927\u90E8\u5206\u7A97\u53E3\uFF0C\u5386\u53F2\u4E0E\u5DE5\u5177\u8F93\u51FA\u5C06\u65E0\u6CD5\u53D1\u9001\u3002\u53EF\u7CBE\u7B80\u9879\u76EE\u89C4\u5219\uFF08.xuanzhu/rules.md\uFF09\u6216 systemPromptExtra\uFF0C\u6216\u6539\u7528\u7A97\u53E3\u66F4\u5927\u7684\u6A21\u578B\uFF08xzh model context <id> <\u5927\u5C0F>\uFF09\u3002")),this.config.intent?.enabled){this.events.onStatus("\u5206\u6790\u610F\u56FE\u4E2D");let f=await this.analyzeIntent(e,r);if(r?.aborted){this.events.onStatus("\u5DF2\u4E2D\u65AD");return}f?(s=f,this.events.onIntent?.(f,e)):this.events.onNotice?.("\u610F\u56FE\u5206\u6790\u672A\u8FD4\u56DE\u5185\u5BB9\uFF0C\u5DF2\u6309\u539F\u59CB\u8F93\u5165\u7EE7\u7EED\u3002")}let i=[{role:"user",content:s}],o=Math.max(1,Math.floor(this.config.maxToolRounds)||1),a=()=>{for(let f of i)this.history.push(f);this.trimHistory()},l=()=>{let f=[];for(let $=0;$<i.length;$++){let y=i[$];if(f.push(y),y.role!=="assistant"||!y.toolCalls?.length)continue;let m=y.toolCalls.length,x=0;for(let g=$+1;g<i.length&&x<m;g++)i[g].role==="tool"&&x++;if(x<m){f.pop();break}}if(f.length>1){for(let $ of f)this.history.push($);this.trimHistory()}},c="",u=0,d=new Map,h=0,p=o;try{for(let m=0;;m++){if(m>=p){if(r?.aborted){l(),this.events.onStatus("\u5DF2\u4E2D\u65AD");return}if(!(this.events.onRoundLimit?await this.events.onRoundLimit(m):!1))break;p+=o}if(r?.aborted){l(),this.events.onStatus("\u5DF2\u4E2D\u65AD");return}this.trimHistory(),this.events.onStatus("\u601D\u8003\u4E2D",`\u7B2C ${m+1} \u8F6E`);let{text:x,toolCalls:g}=await this.streamAssistant(r,0,new Set,i);if(r?.aborted){l(),this.events.onStatus("\u5DF2\u4E2D\u65AD");return}if(i.push({role:"assistant",content:x,toolCalls:g.length>0?g:void 0}),g.length===0){a(),this.events.onStatus("\u5C31\u7EEA");return}for(let b of g){let w=`${b.name}:${b.arguments}`;if(w===c?u++:(c=w,u=1),u>=ws){if(h<vs){h++;let X=u;u=0,c="",i.push({role:"tool",content:`[\u7CFB\u7EDF] \u672C\u6B21\u8C03\u7528\u5DF2\u8DF3\u8FC7\uFF1A\u5B83\u4E0E\u524D\u9762 ${X} \u6B21\u5B8C\u5168\u76F8\u540C\u3002`,toolCallId:b.id,name:b.name}),i.push({role:"user",content:`[\u7CFB\u7EDF\u68C0\u6D4B] \u4F60\u8FDE\u7EED ${X} \u6B21\u8C03\u7528\u4E86 \`${b.name}\`\uFF08\u53C2\u6570\u5B8C\u5168\u76F8\u540C\uFF09\uFF0C\u4F46\u4EFB\u52A1\u5E76\u6CA1\u6709\u56E0\u6B64\u63A8\u8FDB\u3002
|
|
155
|
+
|
|
156
|
+
\u8BF7\u5148\u505C\u4E0B\u6765\u5206\u6790\uFF0C\u4E0D\u8981\u7EE7\u7EED\u8C03\u7528\u5DE5\u5177\uFF1A
|
|
157
|
+
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
|
|
158
|
+
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
|
|
159
|
+
3. \u63A5\u4E0B\u6765\u5E94\u8BE5\u505A\u4EC0\u4E48**\u4E0D\u540C**\u7684\u4E8B\uFF1F
|
|
160
|
+
|
|
161
|
+
\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 ${b.name} \u7684\u91CD\u590D`),this.events.onNotice?.(`\u68C0\u6D4B\u5230\u8FDE\u7EED ${X} \u6B21\u91CD\u590D\u8C03\u7528\uFF08${b.name}\uFF09\uFF0C\u5DF2\u8BF7\u6C42\u6A21\u578B\u81EA\u884C\u5206\u6790\u539F\u56E0\u5E76\u8C03\u6574\u65B9\u6848\u3002`);break}a(),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 ${u} \u6B21\u5B8C\u5168\u76F8\u540C\u7684\u5DE5\u5177\u8C03\u7528\uFF08${b.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
|
|
162
|
+
\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
|
|
163
|
+
\xB7 \u53EF\u8C03\u5927\u8BE5\u6A21\u578B\u7684\u4E0A\u4E0B\u6587\u7A97\u53E3\uFF1Axzh model context <id> <\u5927\u5C0F>
|
|
164
|
+
\xB7 \u4E5F\u53EF\u4EE5\u628A\u4EFB\u52A1\u62C6\u5C0F\uFF0C\u6216\u76F4\u63A5\u8BF4\u300C\u4E0D\u8981\u91CD\u590D\u8C03\u7528 ${b.name}\u300D`);return}let N=await this.runTool(b,r);N.ok&&d.set(w,(d.get(w)??0)+1);let G=N.content;if(u>=2&&N.ok){let X=[...d.entries()].map(([Ce,Z])=>`${Ce.split(":")[0]}\xD7${Z}`).join("\u3001");G+=`
|
|
165
|
+
|
|
166
|
+
[\u7CFB\u7EDF\u63D0\u9192] \u8FD9\u662F\u8FDE\u7EED\u7B2C ${u} \u6B21\u8C03\u7528 \`${b.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
|
|
167
|
+
\u672C\u8F6E\u5DF2\u6210\u529F\u6267\u884C\u7684\u8C03\u7528\uFF1A${X}
|
|
168
|
+
\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",`${b.name} \xD7${u}`)}if(i.push({role:"tool",content:G,toolCallId:b.id,name:b.name}),this.events.onToolEnd(b,N),r?.aborted){l(),this.events.onStatus("\u5DF2\u4E2D\u65AD");return}}}a(),this.events.onStatus("\u5DF2\u8FBE\u5DE5\u5177\u8C03\u7528\u4E0A\u9650",`\u5171 ${p} \u8F6E`);let f=new Map;for(let m of i)for(let x of m.toolCalls??[])f.set(x.name,(f.get(x.name)??0)+1);let $=[...f.values()].reduce((m,x)=>m+x,0),y=[...f.entries()].sort((m,x)=>x[1]-m[1]).map(([m,x])=>`${m} \xD7${x}`).join("\u3001");this.events.onNotice?.(`\u5DF2\u8FBE\u5DE5\u5177\u8C03\u7528\u4E0A\u9650\uFF08\u5171 ${p} \u8F6E\uFF09\u800C\u4E2D\u6B62\u672C\u8F6E\u3002
|
|
169
|
+
`+(y?`\xB7 \u672C\u8F6E\u5171 ${$} \u6B21\u5DE5\u5177\u8C03\u7528\uFF1A${y}
|
|
154
170
|
`:"")+`\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
|
|
155
171
|
\xB7 \u60F3\u8C03\u5927\u4E0A\u9650\uFF1A\u7F16\u8F91 ${_()} \u91CC\u7684 maxToolRounds\uFF08\u5F53\u524D ${this.config.maxToolRounds}\uFF09
|
|
156
|
-
\xB7 \u6216\u628A\u4EFB\u52A1\u62C6\u6210\u66F4\u5C0F\u7684\u6B65\u9AA4\uFF0C\u6BCF\u6B65\u5355\u72EC\u63D0\u4E00\u6B21`)}catch(
|
|
157
|
-
`)[0]}\uFF09\uFF0C\u5DF2\u6309\u539F\u59CB\u8F93\u5165\u7EE7\u7EED\u3002`),null}let a=o.trim();return a.length>0?a:null}async streamAssistant(e,r=0,s=new Set,i=[],o=1){this.activeModel&&s.add(this.activeModel.id);let a=[{role:"system",content:this.systemPrompt},...this.buildConversation(i,o)],l="",c=[],u=!1;try{let d=this.provider.chat({messages:a,tools:Yr(),temperature:this.config.temperature,signal:e,onRetry:(h,p,f)=>{this.events.onStatus(`\u7F51\u7EDC\u4E2D\u65AD\uFF0C\u6B63\u5728\u91CD\u8BD5 (${h}/${p})`,
|
|
158
|
-
`)[0])}});for await(let h of d){if(e?.aborted)break;switch(u=!0,h.type){case"text":if(l+=h.text,this.events.onText(h.text),l.length>_t)return this.events.onNotice?.(`\u6A21\u578B\u8F93\u51FA\u8D85\u8FC7 ${_t} \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:l,toolCalls:c};break;case"reasoning":this.events.onReasoning?.(h.text);break;case"tool_call":c.push(h.toolCall);break;case"done":break}}return{text:l,toolCalls:c}}catch(d){if(e?.aborted)throw d;if(!u&&!e?.aborted&&o>=1&&
|
|
159
|
-
`)[0];if(ct(e))return this.events.onNotice?.(`\u26A0 \u6A21\u578B ${i.id} \u7684\u914D\u7F6E\u53EF\u80FD\u6709\u8BEF\uFF08${o}\uFF09\u3002\u5DF2\u8DF3\u8FC7\u6743\u91CD\u8870\u51CF \u2014\u2014 \u8BF7\u68C0\u67E5 provider\u3001API Key \u4E0E baseUrl\u3002`),!1;let a=Jt(this.config,i.id);if(!a||(this.persistConfig(),a.reset?(this.events.onNotice?.(`\u26A0 \u6A21\u578B ${i.id} \u8C03\u7528\u5931\u8D25\uFF08${o}\uFF09\uFF1B\u6240\u6709\u6A21\u578B\u6743\u91CD\u5747\u5DF2\u8017\u5C3D\uFF0C\u5DF2\u628A\u5168\u90E8\u6743\u91CD\u91CD\u7F6E\u4E3A ${T}\u3002`),this.events.onStatus("\u6743\u91CD\u5DF2\u91CD\u7F6E")):this.events.onNotice?.(`\u26A0 \u6A21\u578B ${i.id} \u8C03\u7528\u5931\u8D25\uFF08${o}\uFF09\uFF0C\u6743\u91CD\u964D\u4E3A ${a.weight}\u3002`),this.events.onModelChange?.({provider:i.provider,model:i.model,weight:a.reset?T:a.weight,reason:"\u8C03\u7528\u5931\u8D25\u964D\u6743"}),!s))return!1;let l=
|
|
160
|
-
`)){if(s===""){r.push("");continue}let i="",o=0,a=s.match(/\x1b\[[0-9;?]*[A-Za-z]|./gu)??[];for(let l of a){let c=O(l);o+c>e&&i!==""&&(r.push(i),i="",o=0),i+=l,o+=c}r.push(i)}return r}function
|
|
172
|
+
\xB7 \u6216\u628A\u4EFB\u52A1\u62C6\u6210\u66F4\u5C0F\u7684\u6B65\u9AA4\uFF0C\u6BCF\u6B65\u5355\u72EC\u63D0\u4E00\u6B21`)}catch(f){if(l(),r?.aborted){this.events.onStatus("\u5DF2\u4E2D\u65AD");return}throw f}}async analyzeIntent(e,r){let s=this.config.intent?.prompt?.trim()||Xt,i=Zt(s,e),o="";try{let l=this.provider.chat({messages:[{role:"user",content:i}],tools:[],temperature:this.config.temperature,signal:r});for await(let c of l)if(c.type==="text"&&(o+=c.text,o.length>_t))break}catch(l){return r?.aborted||this.events.onNotice?.(`\u610F\u56FE\u5206\u6790\u8BF7\u6C42\u5931\u8D25\uFF08${Y(l).split(`
|
|
173
|
+
`)[0]}\uFF09\uFF0C\u5DF2\u6309\u539F\u59CB\u8F93\u5165\u7EE7\u7EED\u3002`),null}let a=o.trim();return a.length>0?a:null}async streamAssistant(e,r=0,s=new Set,i=[],o=1){this.activeModel&&s.add(this.activeModel.id);let a=[{role:"system",content:this.systemPrompt},...this.buildConversation(i,o)],l="",c=[],u=!1;try{let d=this.provider.chat({messages:a,tools:Yr(),temperature:this.config.temperature,signal:e,onRetry:(h,p,f)=>{this.events.onStatus(`\u7F51\u7EDC\u4E2D\u65AD\uFF0C\u6B63\u5728\u91CD\u8BD5 (${h}/${p})`,Y(f).split(`
|
|
174
|
+
`)[0])}});for await(let h of d){if(e?.aborted)break;switch(u=!0,h.type){case"text":if(l+=h.text,this.events.onText(h.text),l.length>_t)return this.events.onNotice?.(`\u6A21\u578B\u8F93\u51FA\u8D85\u8FC7 ${_t} \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:l,toolCalls:c};break;case"reasoning":this.events.onReasoning?.(h.text);break;case"tool_call":c.push(h.toolCall);break;case"done":break}}return{text:l,toolCalls:c}}catch(d){if(e?.aborted)throw d;if(!u&&!e?.aborted&&o>=1&&Ie(d))return this.events.onStatus("\u4E0A\u4E0B\u6587\u8D85\u9650","\u5DF2\u6536\u655B\u5386\u53F2\uFF0C\u6B63\u5728\u91CD\u8BD5"),this.streamAssistant(e,r,s,i,bs);if(this.handleModelFailure(d,s,!u)&&r<Cs)return this.streamAssistant(e,r+1,s,i,o);throw d}}handleModelFailure(e,r,s=!0){let i=this.activeModel;if(!i)return!1;let o=Y(e).split(`
|
|
175
|
+
`)[0];if(ct(e))return this.events.onNotice?.(`\u26A0 \u6A21\u578B ${i.id} \u7684\u914D\u7F6E\u53EF\u80FD\u6709\u8BEF\uFF08${o}\uFF09\u3002\u5DF2\u8DF3\u8FC7\u6743\u91CD\u8870\u51CF \u2014\u2014 \u8BF7\u68C0\u67E5 provider\u3001API Key \u4E0E baseUrl\u3002`),!1;let a=Jt(this.config,i.id);if(!a||(this.persistConfig(),a.reset?(this.events.onNotice?.(`\u26A0 \u6A21\u578B ${i.id} \u8C03\u7528\u5931\u8D25\uFF08${o}\uFF09\uFF1B\u6240\u6709\u6A21\u578B\u6743\u91CD\u5747\u5DF2\u8017\u5C3D\uFF0C\u5DF2\u628A\u5168\u90E8\u6743\u91CD\u91CD\u7F6E\u4E3A ${T}\u3002`),this.events.onStatus("\u6743\u91CD\u5DF2\u91CD\u7F6E")):this.events.onNotice?.(`\u26A0 \u6A21\u578B ${i.id} \u8C03\u7528\u5931\u8D25\uFF08${o}\uFF09\uFF0C\u6743\u91CD\u964D\u4E3A ${a.weight}\u3002`),this.events.onModelChange?.({provider:i.provider,model:i.model,weight:a.reset?T:a.weight,reason:"\u8C03\u7528\u5931\u8D25\u964D\u6743"}),!s))return!1;let l=se(this.config,r);if(!l||l.id===i.id)return l&&(this.activeModel=l),!1;try{return this.provider=Be(this.config,l),this.activeModel=l,this.events.onNotice?.(`\u21BB \u5DF2\u5207\u6362\u5230\u6A21\u578B ${l.id}\uFF08\u6743\u91CD ${l.weight}\uFF09\u91CD\u8BD5\u3002`),this.events.onModelChange?.({provider:l.provider,model:l.model,weight:l.weight,reason:"\u8C03\u7528\u5931\u8D25\u964D\u7EA7"}),!0}catch(c){return this.events.onNotice?.(`\u5207\u6362\u6A21\u578B\u5931\u8D25\uFF1A${Y(c)}`),!1}}persistConfig(){try{P(this.config)}catch{}}touchesSensitivePath(e,r){if(!ys.has(e))return!1;let s="";try{let i=JSON.parse(r);typeof i.path=="string"&&(s=i.path)}catch{return!1}return s?xs.test(en.resolve(this.cwd,q(s))):!1}async runTool(e,r){let s=kt(e.name);if(!s)return{ok:!1,content:`\u9519\u8BEF\uFF1A\u672A\u77E5\u5DE5\u5177 "${e.name}"`};if(this.config.confirmSensitiveRead===!0&&this.touchesSensitivePath(s.name,e.arguments)||!!s.requiresConfirmation&&!this.config.autoApprove){let a=e.arguments;try{a=JSON.stringify(JSON.parse(e.arguments),null,2)}catch{}if(!await this.events.confirm({tool:e.name,title:`\u6267\u884C\u5DE5\u5177\uFF1A${e.name}`,detail:a,danger:!!s.danger}))return{ok:!1,denied:!0,content:"\u7528\u6237\u62D2\u7EDD\u4E86\u6B64\u64CD\u4F5C\u3002"}}if(r?.aborted)return{ok:!1,content:"\u64CD\u4F5C\u5DF2\u88AB\u4E2D\u65AD\u3002"};this.events.onToolStart(e);let o={cwd:this.cwd,autoApprove:this.config.autoApprove,emit:a=>this.events.onNotice?.(a),confirm:a=>this.events.confirm(a),signal:r};return Jr(e.name,e.arguments,o)}conversationBudget(){return gt(this.activeModel?.contextWindow,this.activeModel?.model??"",this.systemPrompt)}buildConversation(e,r=1){let s=[...this.history,...e],i=s.length>Qr?s.slice(-Qr):s,o=Math.max(1,Math.floor(this.conversationBudget()*r));return Ue(i,o)}trimHistory(){let e=Ue(this.history,this.conversationBudget());if(e.length===this.history.length)return 0;let r=this.history.length-e.length;return this.history=e,r}};var xe="0.2.0";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"},F={hide:"\x1B[?25l",show:"\x1B[?25h",up:(n=1)=>`\x1B[${n}A`,down:(n=1)=>`\x1B[${n}B`,right:(n=1)=>`\x1B[${n}C`,left:(n=1)=>`\x1B[${n}D`,to:(n,e)=>`\x1B[${n};${e}H`,col:n=>`\x1B[${n}G`,clearLine:"\x1B[2K",clearToEnd:"\x1B[0K",clearScreen:"\x1B[2J"},Ye={enterAlt:"\x1B[?1049h",exitAlt:"\x1B[?1049l",save:"\x1B[s",restore:"\x1B[u"};function Ss(n){return n>=4352&&n<=4447||n>=11904&&n<=12350||n>=12353&&n<=13311||n>=13312&&n<=19903||n>=19968&&n<=40959||n>=40960&&n<=42191||n>=44032&&n<=55203||n>=63744&&n<=64255||n>=65072&&n<=65103||n>=65280&&n<=65376||n>=65504&&n<=65510||n>=127744&&n<=129791||n>=131072&&n<=262141}function O(n){let e=0;for(let r=0;r<n.length;r++){let s=n.codePointAt(r);if(s!==void 0){if(s===27){let i=/^\x1b\[[0-9;?]*[ -/]*[@-~]/.exec(n.slice(r));if(i){r+=i[0].length-1;continue}let o=/^\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)?/.exec(n.slice(r));if(o){r+=o[0].length-1;continue}}if(s>65535&&r++,s===9){e+=8-e%8;continue}s<32||s>=768&&s<=879||s>=8400&&s<=8447||s>=65024&&s<=65039||(e+=Ss(s)?2:1)}}return e}function _e(n,e){let r=[];for(let s of n.split(`
|
|
176
|
+
`)){if(s===""){r.push("");continue}let i="",o=0,a=s.match(/\x1b\[[0-9;?]*[A-Za-z]|./gu)??[];for(let l of a){let c=O(l);o+c>e&&i!==""&&(r.push(i),i="",o=0),i+=l,o+=c}r.push(i)}return r}function H(n,e){if(O(n)<=e)return n;let r=n.match(/\x1b\[[0-9;?]*[A-Za-z]|[\s\S]/gu)??[],s="",i=0,o=Math.max(0,e-1);for(let a of r){let l=O(a);if(i+l>o)break;s+=a,i+=l}return`${s}${t.reset}\u2026`}function tn(n,e){let r=O(n);return n+" ".repeat(Math.max(0,e-r))}function le(n){return n&&n.replace(/\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)?/g,"").replace(/\x1b\[[0-9;?]*[ -/]*[@-~]/g,"").replace(/\x1b[@-Z\\-_]/g,"").replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g,"")}var Je=class{buffer="";inCodeBlock=!1;codeLang="";push(e){this.buffer+=e;let r=[],s=this.buffer.indexOf(`
|
|
161
177
|
`);for(;s!==-1;){let i=this.buffer.slice(0,s);this.buffer=this.buffer.slice(s+1),r.push(this.renderLine(i)),s=this.buffer.indexOf(`
|
|
162
|
-
`)}return r}peek(){return this.buffer?this.inCodeBlock?`${t.cyan}${this.buffer}${t.reset}`:this.buffer:""}flush(){if(this.buffer.length===0)return this.inCodeBlock=!1,this.codeLang="",[];let e=this.buffer;this.buffer="";let r=this.renderLine(e);return this.inCodeBlock=!1,this.codeLang="",[r]}renderLine(e){let r=e.replace(/\r$/,""),s=r.trimStart();if(s.startsWith("```")){if(!this.inCodeBlock){this.inCodeBlock=!0,this.codeLang=s.slice(3).trim();let a=this.codeLang?` ${this.codeLang} `:"";return`${t.gray}\u250C\u2500${a}${"\u2500".repeat(Math.max(0,6-a.length))}${t.reset}`}return this.inCodeBlock=!1,this.codeLang="",`${t.gray}\u2514\u2500\u2500${t.reset}`}if(this.inCodeBlock)return`${t.cyan}${r}${t.reset}`;let i=/^(#{1,6})\s+(.*)$/.exec(s);if(i){let a=i[2];return i[1].length<=2?`${t.bold}${t.brightWhite}${a}${t.reset}`:`${t.bold}${a}${t.reset}`}if(s.startsWith("> "))return`${t.gray}\u2502 ${s.slice(2)}${t.reset}`;let o=/^(\s*)([-*+]|\d+\.)\s+(.*)$/.exec(r);return o?`${o[1]}${t.blue}${o[2]}${t.reset} ${o[3]}`:/^(-{3,}|\*{3,}|_{3,})$/.test(s)?`${t.gray}${"\u2500".repeat(20)}${t.reset}`:this.renderInline(r)}renderInline(e){let r=e;return r=r.replace(/`([^`]+)`/g,(s,i)=>`${t.cyan}${i}${t.reset}`),r=r.replace(/\*\*([^*]+)\*\*/g,(s,i)=>`${t.bold}${i}${t.reset}`),r=r.replace(/(^|\s)\*([^*\s][^*]*)\*(?=\s|$)/g,"$1$2"),r}};var
|
|
178
|
+
`)}return r}peek(){return this.buffer?this.inCodeBlock?`${t.cyan}${this.buffer}${t.reset}`:this.buffer:""}flush(){if(this.buffer.length===0)return this.inCodeBlock=!1,this.codeLang="",[];let e=this.buffer;this.buffer="";let r=this.renderLine(e);return this.inCodeBlock=!1,this.codeLang="",[r]}renderLine(e){let r=e.replace(/\r$/,""),s=r.trimStart();if(s.startsWith("```")){if(!this.inCodeBlock){this.inCodeBlock=!0,this.codeLang=s.slice(3).trim();let a=this.codeLang?` ${this.codeLang} `:"";return`${t.gray}\u250C\u2500${a}${"\u2500".repeat(Math.max(0,6-a.length))}${t.reset}`}return this.inCodeBlock=!1,this.codeLang="",`${t.gray}\u2514\u2500\u2500${t.reset}`}if(this.inCodeBlock)return`${t.cyan}${r}${t.reset}`;let i=/^(#{1,6})\s+(.*)$/.exec(s);if(i){let a=i[2];return i[1].length<=2?`${t.bold}${t.brightWhite}${a}${t.reset}`:`${t.bold}${a}${t.reset}`}if(s.startsWith("> "))return`${t.gray}\u2502 ${s.slice(2)}${t.reset}`;let o=/^(\s*)([-*+]|\d+\.)\s+(.*)$/.exec(r);return o?`${o[1]}${t.blue}${o[2]}${t.reset} ${o[3]}`:/^(-{3,}|\*{3,}|_{3,})$/.test(s)?`${t.gray}${"\u2500".repeat(20)}${t.reset}`:this.renderInline(r)}renderInline(e){let r=e;return r=r.replace(/`([^`]+)`/g,(s,i)=>`${t.cyan}${i}${t.reset}`),r=r.replace(/\*\*([^*]+)\*\*/g,(s,i)=>`${t.bold}${i}${t.reset}`),r=r.replace(/(^|\s)\*([^*\s][^*]*)\*(?=\s|$)/g,"$1$2"),r}};var Me=require("child_process"),be=v(require("fs")),Qe=v(require("os")),j=v(require("path"));var rn=2e3,Ts=8192,Es=1200,pe;function ks(){if(pe!==void 0)return pe;pe=null;try{(0,Me.spawnSync)("script",["--version"],{timeout:2e3,stdio:"ignore"}).status===0?pe="linux":pe=(0,Me.spawnSync)("script",["-h"],{timeout:2e3,stdio:"ignore"}).error?null:"bsd"}catch{pe=null}return pe}function _s(n,e){let r=ks();return r==="linux"?{file:"script",args:["-qec",e,"/dev/null"]}:r==="bsd"?{file:"script",args:["-q","/dev/null",n,"-c",e]}:{file:n,args:["-c",e]}}var et=class{lines=[];partial="";running;killTimer;cwd;onChange;parseState="text";parseSeq="";constructor(e,r){this.cwd=e,this.onChange=r,this.pushLine(`${t.gray}\u7EC8\u7AEF\u5C31\u7EEA \xB7 \u547D\u4EE4\u5728\u5F53\u524D\u9879\u76EE\u76EE\u5F55\u4E0B\u6267\u884C${t.reset}`)}getCwd(){return this.cwd}isRunning(){return this.running!==void 0}setCwd(e){this.cwd=e,this.pushLine(`${t.gray}\u2500\u2500 \u5DE5\u4F5C\u76EE\u5F55\u5DF2\u5207\u6362\uFF1A${e}${t.reset}`),this.onChange()}clear(){this.lines=[],this.partial="",this.onChange()}notice(e){this.pushLine(e),this.onChange()}visibleLines(){return this.partial?[...this.lines,this.partial]:this.lines}run(e){let r=e.trim();if(!r)return;if(this.running){this.pushLine(`${t.yellow}\u26A0 \u4E0A\u4E00\u6761\u547D\u4EE4\u4ECD\u5728\u8FD0\u884C\uFF0C\u8BF7\u5148 Ctrl+C \u4E2D\u65AD${t.reset}`),this.onChange();return}if(r==="clear"||r==="cls"){this.clear();return}if(this.handleCd(r))return;this.flushPartial(),this.pushLine(`${t.brightGreen}\u276F${t.reset} ${t.bold}${r}${t.reset}`);let s=process.env.SHELL||"/bin/bash",i=_s(s,r),o;try{o=(0,Me.spawn)(i.file,i.args,{cwd:this.cwd,env:{...process.env,TERM:"xterm-256color",CLICOLOR_FORCE:"1",FORCE_COLOR:"1"},stdio:["pipe","pipe","pipe"],detached:!0})}catch(l){this.pushLine(`${t.red}\u2717 \u542F\u52A8\u5931\u8D25\uFF1A${l instanceof Error?l.message:String(l)}${t.reset}`),this.onChange();return}this.running=o;let a=l=>this.feed(l.toString("utf8"));o.stdout?.on("data",a),o.stderr?.on("data",a),o.on("error",l=>{this.flushPartial(),this.pushLine(`${t.red}\u2717 \u6267\u884C\u51FA\u9519\uFF1A${l.message}${t.reset}`),this.running=void 0,this.onChange()}),o.on("close",(l,c)=>{this.flushPartial(),c?this.pushLine(`${t.yellow}\u23F9 \u5DF2\u4E2D\u65AD\uFF08${c}\uFF09${t.reset}`):l===0?this.pushLine(`${t.gray}\u2713 \u5B8C\u6210${t.reset}`):this.pushLine(`${t.red}\u2717 \u9000\u51FA\u7801 ${l}${t.reset}`),this.running=void 0,this.onChange()}),this.onChange()}write(e){let r=this.running;if(!(!r?.stdin||r.stdin.destroyed))try{r.stdin.write(e)}catch{}}interrupt(){let e=this.running;if(!e||e.pid===void 0)return;let r=e.pid,s=i=>{try{process.kill(-r,i)}catch{try{e.kill(i)}catch{}}};s("SIGINT"),this.killTimer&&clearTimeout(this.killTimer),this.killTimer=setTimeout(()=>{this.killTimer=void 0,this.running===e&&s("SIGKILL")},Es)}dispose(){this.killTimer&&(clearTimeout(this.killTimer),this.killTimer=void 0);let e=this.running;if(this.running=void 0,!(!e||e.pid===void 0))try{process.kill(-e.pid,"SIGKILL")}catch{try{e.kill("SIGKILL")}catch{}}}handleCd(e){let r=/^cd(?:\s+([\s\S]*))?$/.exec(e);if(!r)return!1;let s=(r[1]??"").trim().replace(/^['"]|['"]$/g,""),i;if(!s||s==="~")i=Qe.homedir();else{let o=s.startsWith("~/")?j.join(Qe.homedir(),s.slice(2)):s;i=j.isAbsolute(o)?o:j.resolve(this.cwd,o)}try{if(!be.statSync(i).isDirectory())return this.pushLine(`${t.red}cd: \u4E0D\u662F\u76EE\u5F55\uFF1A${i}${t.reset}`),this.onChange(),!0}catch{return this.pushLine(`${t.red}cd: \u76EE\u5F55\u4E0D\u5B58\u5728\uFF1A${i}${t.reset}`),this.onChange(),!0}return this.cwd=i,this.flushPartial(),this.pushLine(`${t.gray}cd ${this.cwd}${t.reset}`),this.onChange(),!0}feed(e){let r=e.replace(/\r\n/g,`
|
|
163
179
|
`),s=this.partial,i=this.parseState,o=this.parseSeq;for(let a of r){if(i==="osc"){(a==="\x07"||a==="\\"&&o.endsWith("\x1B"))&&(i="text"),o+=a;continue}if(i==="esc"){if(a==="["){i="csi",o="\x1B[";continue}if(a==="]"){i="osc",o="\x1B]";continue}i="text";continue}if(i==="csi"){o+=a,a>="@"&&a<="~"&&(a==="m"&&(s+=o),i="text");continue}if(a==="\x1B"){i="esc",o="\x1B";continue}if(a==="\r"){s="";continue}if(a===`
|
|
164
|
-
`){this.pushLine(s),s="";continue}a==="\x07"||a==="\b"||(s+=a)}s.length>
|
|
180
|
+
`){this.pushLine(s),s="";continue}a==="\x07"||a==="\b"||(s+=a)}s.length>Ts&&(this.pushLine(s),s=""),this.parseState=i,this.parseSeq=o,this.partial=s,this.onChange()}pushLine(e){this.lines.push(e),this.lines.length>rn&&this.lines.splice(0,this.lines.length-rn)}flushPartial(){this.partial&&(this.pushLine(this.partial),this.partial="")}},Ms=["alias","cd","clear","cls","echo","exit","export","false","history","pwd","set","source","true","type","unalias","unset","which"],Ve=null;function Rs(){if(Ve)return Ve;let n=new Set(Ms);for(let e of(process.env.PATH??"").split(j.delimiter)){if(!e)continue;let r;try{r=be.readdirSync(e)}catch{continue}for(let s of r)n.add(s)}return Ve=[...n].sort(),Ve}function Ps(n){if(n.length===0)return"";let e=n[0];for(let r of n.slice(1)){let s=0;for(;s<e.length&&s<r.length&&e[s]===r[s];)s++;if(e=e.slice(0,s),!e)break}return e}function As(n,e){return e?e==="~"||e.startsWith("~/")?j.join(Qe.homedir(),e.slice(1)):j.isAbsolute(e)?e:j.resolve(n,e):n}function nn(n,e){if(n.isDirectory())return!0;if(!n.isSymbolicLink())return!1;try{return be.statSync(j.join(e,n.name)).isDirectory()}catch{return!1}}function Is(n,e,r){let s=e.lastIndexOf("/"),i=s>=0?e.slice(0,s+1):"",o=e.slice(s+1),a=As(n,i),l;try{l=be.readdirSync(a,{withFileTypes:!0})}catch{return{dirPart:i,base:o,names:[]}}let c=l.filter(u=>r&&!nn(u,a)||u.name.startsWith(".")&&!o.startsWith(".")?!1:u.name.startsWith(o)).map(u=>u.name+(nn(u,a)?"/":"")).sort();return{dirPart:i,base:o,names:c}}function sn(n,e,r){let i=e.slice(0,r).replace(/\s+$/,""),o=i.lastIndexOf(" ")+1,a=i.slice(o),l=i.slice(0,o),c="",u=a.lastIndexOf("=");u>=0&&/^[A-Za-z_][A-Za-z0-9_]*$/.test(a.slice(0,u))&&(c=a.slice(0,u+1),a=a.slice(u+1));let d="";(a.startsWith('"')||a.startsWith("'"))&&(d=a[0],a=a.slice(1));let h=a.startsWith("./")||a.startsWith("../")||a.startsWith("/")||a.startsWith("~"),p=l.trim().length===0&&!h&&c.length===0,f=g=>`${c}${d}${g}`,$="",y;if(p)y=Rs().filter(g=>g.startsWith(a));else{let g=l.trim().split(/\s+/)[0]??"",b=Is(n,a,g==="cd");$=b.dirPart,y=b.names}if(y.length===0)return null;if(y.length===1){let g=$+y[0],b=g.endsWith("/"),w=d&&!b?d:"",N=b?"":" ",G=l+f(g)+w+N;return{line:G+e.slice(r),cursor:G.length,candidates:[]}}let m=p?a:a.slice($.length),x=Ps(y);if(x.length>m.length){let g=l+f($+x);return{line:g+e.slice(r),cursor:g.length,candidates:[]}}return{line:e,cursor:r,candidates:y.map(g=>f($+g))}}function rt(){try{process.stdout.write("\x1B[?2004l\x1B[>4m\x1B[?1000l\x1B[?1002l\x1B[?1006l\x1B[?7h"+t.reset+F.show+Ye.exitAlt)}catch{}try{process.stdin.isTTY&&process.stdin.isRaw&&process.stdin.setRawMode(!1)}catch{}}var tt=class n{options;agent;markdown=new Je;cwd;modelProviderLabel;modelLabel;modelWeight;lines=[];input="";inputCursor=0;scrollOffset=0;statusText="\u5C31\u7EEA";statusDetail="";busy=!1;exited=!1;autoApprove;intentEnabled;history=[];historyIndex=-1;pendingConfirm;abortController;keyBuffer="";escTimer;projectDirCreated;needsRender=!1;mouseCapture;lastAnswerStart=0;streamingPreview="";termVisible=!0;termFocus=!1;termScroll=0;lastLeftWidth=0;lastPhysicalCount=0;lastPhysicalMap=[];screenToLogical=[];selectionAnchor;selectionHead;dragging=!1;lastTermPhysicalCount=0;termInput="";termInputCursor=0;termHistory=[];termHistoryIndex=-1;term;onData=e=>this.handleData(e);onResize=()=>{this.lastPhysicalCount=-1,this.lastTermPhysicalCount=-1,this.scheduleRender()};constructor(e){this.options=e,this.cwd=e.cwd,this.autoApprove=e.autoApprove,this.mouseCapture=e.config.mouseCapture===!0,this.intentEnabled=e.intentEnabled??e.config.intent?.enabled===!0,e.config.intent={...e.config.intent??{enabled:!1},enabled:this.intentEnabled},this.modelProviderLabel=e.providerLabel,this.modelLabel=e.model,this.modelWeight=e.modelWeight,this.term=new et(e.cwd,()=>this.scheduleRender());let r=vt(e.cwd);r.created&&(this.projectDirCreated=r.paths.dir);let s={onText:i=>this.handleTextDelta(i),onReasoning:()=>{},onToolStart:i=>this.handleToolStart(i),onToolEnd:(i,o)=>this.handleToolEnd(i,o),onStatus:(i,o)=>{this.statusText=i,this.statusDetail=o??"",this.scheduleRender()},onNotice:i=>this.handleNotice(i),onIntent:(i,o)=>this.handleIntent(i,o),onModelChange:i=>this.handleModelChange(i),confirm:i=>this.requestConfirm(i),onRoundLimit:i=>this.requestConfirm({tool:"round_limit",title:`\u5DF2\u8C03\u7528 ${i} \u8F6E\u5DE5\u5177\uFF0C\u662F\u5426\u7EE7\u7EED\uFF1F`,detail:`\u672C\u8F6E\u5BF9\u8BDD\u5DF2\u6267\u884C ${i} \u8F6E\u5DE5\u5177\u8C03\u7528\uFF08\u8FBE\u5230\u5F53\u524D\u4E0A\u9650\uFF09\uFF0C\u4EFB\u52A1\u53EF\u80FD\u5C1A\u672A\u5B8C\u6210\u3002
|
|
165
181
|
|
|
166
182
|
\xB7 \u6309 y \u7EE7\u7EED\uFF1A\u518D\u8FFD\u52A0 ${this.options.config.maxToolRounds} \u8F6E
|
|
167
183
|
\xB7 \u6309 n \u7ED3\u675F\uFF1A\u4FDD\u7559\u5DF2\u6709\u8FDB\u5C55\uFF0C\u672C\u8F6E\u5230\u6B64\u4E3A\u6B62
|
|
168
184
|
|
|
169
|
-
\u60F3\u6C38\u4E45\u8C03\u6574\u4E0A\u9650\uFF1A\u7F16\u8F91\u914D\u7F6E\u6587\u4EF6\u7684 maxToolRounds \u5B57\u6BB5\u3002`,danger:!1})};this.agent=new
|
|
170
|
-
`))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(
|
|
171
|
-
`)
|
|
172
|
-
`).
|
|
185
|
+
\u60F3\u6C38\u4E45\u8C03\u6574\u4E0A\u9650\uFF1A\u7F16\u8F91\u914D\u7F6E\u6587\u4EF6\u7684 maxToolRounds \u5B57\u6BB5\u3002`,danger:!1})};this.agent=new Ze(e.provider,e.config,e.cwd,s,e.activeModel)}async start(){if(this.enterTerminal(),this.options.startupNotice){for(let e of this.options.startupNotice.split(`
|
|
186
|
+
`))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(Ye.enterAlt+F.hide+"\x1B[?7l"+(this.mouseCapture?"\x1B[?1000h\x1B[?1002h\x1B[?1006h":"\x1B[?1000l\x1B[?1002l\x1B[?1006l")+"\x1B[?2004h"+this.extendedKeyRequest()),process.stdin.isTTY&&process.stdin.setRawMode(!0),process.stdin.resume(),process.stdin.setEncoding("utf8"),process.stdin.on("data",this.onData),process.stdout.on("resize",this.onResize)}flushStreamingPreview(){this.streamingPreview&&(this.lines.push(this.streamingPreview),this.streamingPreview="")}static MAX_OUTPUT_LINES=4e3;trimOutputLines(){let e=n.MAX_OUTPUT_LINES;this.lines.length>e&&this.lines.splice(0,this.lines.length-e)}exitTerminal(){this.escTimer&&(clearTimeout(this.escTimer),this.escTimer=void 0),process.stdin.off("data",this.onData),process.stdout.off("resize",this.onResize),process.stdin.isTTY&&process.stdin.setRawMode(!1),process.stdin.pause(),process.stdout.write("\x1B[?2004l\x1B[>4m\x1B[?1000l\x1B[?1002l\x1B[?1006l\x1B[?7h"+t.reset+F.show+Ye.exitAlt)}extendedKeyRequest(){let e=process.env.TERM??"",r=process.env.TERM_PROGRAM??"";return process.env.XZH_KITTY_KEYS?"\x1B[>1u":process.env.KITTY_WINDOW_ID||/kitty|ghostty/i.test(e)||/kitty|ghostty/i.test(r)?"":"\x1B[>4;2m"}shutdown(){this.exited||(this.exited=!0,this.term.dispose(),this.exitTerminal(),this.resolveExit?.())}handleTextDelta(e){let r=this.markdown.push(le(e));r.length>0&&this.lines.push(...r),this.streamingPreview=this.markdown.peek(),this.scheduleRender()}handleToolStart(e){this.flushStreamingPreview();let r=Us(e);this.lines.push(`${t.magenta}\u23FA${t.reset} ${t.bold}${e.name}${t.reset} ${t.gray}${r}${t.reset}`),this.statusText=`\u6267\u884C ${e.name}`,this.scheduleRender()}handleToolEnd(e,r){this.flushStreamingPreview();let s=le(r.summary??(r.ok?"\u5B8C\u6210":"\u5931\u8D25")).slice(0,60),i=r.denied?`${t.yellow}\u23BF \u5DF2\u62D2\u7EDD${t.reset}`:r.ok?`${t.green}\u23BF ${s}${t.reset}`:`${t.red}\u23BF ${s}${t.reset}`;if(this.lines.push(` ${i}`),!r.ok&&!r.denied&&r.content?.trim()){let o=le(r.content).trim().split(`
|
|
187
|
+
`),a=o.length<=6?o:[...o.slice(0,3),`\u2026\uFF08\u7701\u7565 ${o.length-6} \u884C\uFF09`,...o.slice(-3)];for(let l of a)this.lines.push(` ${t.gray}${l.slice(0,120)}${t.reset}`)}this.statusText="\u601D\u8003\u4E2D",this.scheduleRender()}handleNotice(e){this.flushStreamingPreview();let r=le(e);for(let s of r.split(`
|
|
188
|
+
`))s.trim().length>0&&this.lines.push(`${t.gray} ${s}${t.reset}`);this.scheduleRender()}handleIntent(e,r){let o=le(e).split(`
|
|
189
|
+
`).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${H(r.replace(/\s+/g," "),60)}${t.reset}`),this.scheduleRender()}handleModelChange(e){this.modelProviderLabel=re(e.provider)?.label??e.provider,this.modelLabel=e.model,this.modelWeight=e.weight,e.reason!=="\u8C03\u7528\u5931\u8D25\u964D\u6743"&&this.lines.push(`${t.yellow}\u21C4 \u6A21\u578B\u5DF2\u5207\u6362\u4E3A ${e.provider}/${e.model}\uFF08\u6743\u91CD ${e.weight}\uFF09${t.reset}`),this.scheduleRender()}requestConfirm(e){return new Promise(r=>{this.pendingConfirm={request:e,resolve:r,selected:!0},this.scheduleRender()})}handleData(e){process.env.XZH_DEBUG_KEYS&&this.logRawKeys(e),this.keyBuffer+=e,this.drainKeys()}logRawKeys(e){let r=[...e].map(i=>i.codePointAt(0).toString(16).padStart(2,"0")).join(" "),s=e.replace(/\x1b/g,"\\e").replace(/\r/g,"\\r").replace(/\n/g,"\\n");try{ce.appendFileSync(we.join(R(),"keys.log"),`${new Date().toISOString()} hex=[${r}] raw=${JSON.stringify(s)}
|
|
173
190
|
`)}catch{}}drainKeys(){for(;;){let e=this.readKey();if(e===null){this.keyBuffer.startsWith("\x1B")&&(this.escTimer&&clearTimeout(this.escTimer),this.escTimer=setTimeout(()=>{this.escTimer=void 0;let r=this.keyBuffer;this.keyBuffer="",r==="\x1B"&&this.handleKey("\x1B")},40));return}if(this.escTimer&&(clearTimeout(this.escTimer),this.escTimer=void 0),this.handleKey(e),this.exited)return}}readKey(){let e=this.keyBuffer;if(e.length===0)return null;if(e.startsWith("\x1B[200~")){let i=e.indexOf("\x1B[201~",6);return i===-1?null:(this.keyBuffer=e.slice(i+6),e.slice(0,i+6))}if(e[0]==="\x1B"){let i=/^\x1b\[[0-9:;<=>?]*[@-~]/.exec(e);if(i)return this.keyBuffer=e.slice(i[0].length),i[0];let o=/^\x1bO[A-Za-z]/.exec(e);return o?(this.keyBuffer=e.slice(o[0].length),o[0]):/^\x1b\[?[0-9:;<=>?]*$/.test(e)?null:e.length>=2?(this.keyBuffer=e.slice(2),e.slice(0,2)):null}let r=e.codePointAt(0);if(r===void 0)return null;let s=String.fromCodePoint(r);return this.keyBuffer=e.slice(s.length),s}handleKey(e){if(e.startsWith("\x1B[200~")&&e.endsWith("\x1B[201~")){let i=e.slice(6,e.length-6).replace(/\r\n?/g,`
|
|
174
|
-
`).replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g,"");i&&this.insertText(i);return}let r=
|
|
191
|
+
`).replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g,"");i&&this.insertText(i);return}let r=Ds(e);if(this.pendingConfirm){this.handleConfirmKey(r);return}let s=/^\x1b\[<(\d+);(\d+);(\d+)([Mm])$/.exec(r);if(s){this.handleMouse(s);return}if(r==="\x1B[Z"){this.toggleFocus();return}if(this.termFocus){this.handleTermKey(r);return}switch(r){case"":this.busy?(this.abortController?.abort(),this.statusText="\u4E2D\u65AD\u4E2D\u2026",this.scheduleRender()):this.input.length>0?(this.input="",this.inputCursor=0,this.scheduleRender()):this.shutdown();return;case"":this.busy&&(this.abortController?.abort(),this.statusText="\u4E2D\u65AD\u4E2D\u2026",this.scheduleRender());return;case"\r":this.submit();return;case"\x7F":case"\b":this.backspace();return;case"":this.inputCursor=0,this.scheduleRender();return;case"":this.inputCursor=this.input.length,this.scheduleRender();return;case"\f":this.lines=[],this.scrollOffset=0,this.scheduleRender();return;case"\x1B[A":this.navigateHistory(-1);return;case"\x1B[B":this.navigateHistory(1);return;case"\x1B[C":this.moveCursor(1);return;case"\x1B[D":this.moveCursor(-1);return;case"\x1B[5~":this.scrollBy(5);return;case"\x1B[6~":this.scrollBy(-5);return;case"\x1B[1;2A":this.scrollBy(1);return;case"\x1B[1;2B":this.scrollBy(-1);return;case"\x1B[H":case"\x1B[1~":case"\x1B[7~":this.scrollToTop();return;case"\x1B[F":case"\x1B[4~":case"\x1B[8~":this.scrollToBottom();return;default:r.charCodeAt(0)>=32&&this.insertText(r)}}handleMouse(e){let r=Number(e[1]),s=Number(e[2]),i=Number(e[3]),o=e[4]==="M",a=this.resolveTermWidth(process.stdout.columns||80),l=this.lastLeftWidth>0&&a>0&&s>this.lastLeftWidth+1;if(process.env.XZH_DEBUG_KEYS&&this.logRawKeys(`MOUSE btn=${r} col=${s} row=${i} ${o?"press":"release"} inTerm=${l} logical=${this.logicalAtScreenRow(i)} mapLen=${this.screenToLogical.length} anchor=${this.selectionAnchor} head=${this.selectionHead} drag=${this.dragging}`),o&&(r&64)===64){let u=(r&1)===0?3:-3;l?this.scrollTermBy(u):this.scrollBy(u);return}if(o&&(r&3)===0&&(r&32)===0){let c=this.logicalAtScreenRow(i);if(!l&&c!==void 0){this.selectionAnchor=c,this.selectionHead=c,this.dragging=!1,this.scheduleRender();return}l!==this.termFocus&&(this.termFocus=l,this.scheduleRender());return}if(o&&(r&32)===32&&this.selectionAnchor!==void 0){let c=this.logicalAtScreenRow(i);c!==void 0&&c!==this.selectionHead&&(this.selectionHead=c,this.dragging=!0,this.scheduleRender());return}!o&&this.selectionAnchor!==void 0&&(this.dragging?this.finishSelection():this.clearSelection())}logicalAtScreenRow(e){return this.screenToLogical[e-1]}clearSelection(){this.selectionAnchor!==void 0&&(this.selectionAnchor=void 0,this.selectionHead=void 0,this.dragging=!1,this.scheduleRender())}finishSelection(){let e=Math.min(this.selectionAnchor,this.selectionHead),r=Math.max(this.selectionAnchor,this.selectionHead),s=r-e+1,i=le(this.lines.slice(e,r+1).join(`
|
|
175
192
|
`)).trim();if(this.dragging=!1,!i){this.scheduleRender();return}let o=Buffer.from(i,"utf8").toString("base64");process.stdout.write(`\x1B]52;c;${o}\x07`),this.lines.push(`${t.green}\u2713 \u5DF2\u590D\u5236 ${s} \u884C\u5230\u526A\u8D34\u677F${t.reset}${t.gray}\uFF08\u9009\u4E2D\u5904\u4ECD\u4FDD\u6301\u9AD8\u4EAE\uFF09\u3002\u82E5\u7C98\u8D34\u51FA\u6765\u662F\u7A7A\u7684\uFF0C\u8BF4\u660E\u672C\u7EC8\u7AEF\u7981\u7528\u4E86 OSC 52\uFF0C\u8BF7\u6539\u7528 ${t.reset}/copy${t.gray} \u6216 Shift+\u62D6\u62FD\u3002${t.reset}`),this.scheduleRender()}toggleFocus(){if(!this.termVisible){this.lines.push(`${t.gray}\u7EC8\u7AEF\u9762\u677F\u5DF2\u9690\u85CF\uFF0C\u8F93\u5165 /term \u53EF\u91CD\u65B0\u663E\u793A\u3002${t.reset}`),this.scheduleRender();return}this.termFocus=!this.termFocus,this.scheduleRender()}handleTermKey(e){if(this.term.isRunning()){if(e===""||e===""){this.term.interrupt(),this.scheduleRender();return}this.term.write(e);return}switch(e){case"":return;case"":this.term.isRunning()?this.term.interrupt():this.termInput.length>0?(this.termInput="",this.termInputCursor=0):this.termFocus=!1,this.scheduleRender();return;case"\r":this.submitTermCommand();return;case" ":this.applyTermCompletion();return;case"\x7F":case"\b":this.termBackspace();return;case"":this.termInputCursor=0,this.scheduleRender();return;case"":this.termInputCursor=this.termInput.length,this.scheduleRender();return;case"\f":this.term.clear(),this.scrollTermToBottom();return;case"\x1B[A":this.navigateTermHistory(-1);return;case"\x1B[B":this.navigateTermHistory(1);return;case"\x1B[C":this.termInputCursor=Math.min(this.termInput.length,this.termInputCursor+1),this.scheduleRender();return;case"\x1B[D":this.termInputCursor=Math.max(0,this.termInputCursor-1),this.scheduleRender();return;case"\x1B[5~":this.scrollTermBy(5);return;case"\x1B[6~":this.scrollTermBy(-5);return;case"\x1B[1;2A":this.scrollTermBy(1);return;case"\x1B[1;2B":this.scrollTermBy(-1);return;case"\x1B[H":case"\x1B[1~":case"\x1B[7~":this.scrollTermToTop();return;case"\x1B[F":case"\x1B[4~":case"\x1B[8~":this.scrollTermToBottom();return;default:e.charCodeAt(0)>=32&&(this.termInput=this.termInput.slice(0,this.termInputCursor)+e+this.termInput.slice(this.termInputCursor),this.termInputCursor+=e.length,this.termScroll=0,this.scheduleRender())}}termBackspace(){if(this.termInputCursor<=0)return;let e=this.termInputCursor-1,r=this.termInput.charCodeAt(e);r>=56320&&r<=57343&&e>0&&(e-=1),this.termInput=this.termInput.slice(0,e)+this.termInput.slice(this.termInputCursor),this.termInputCursor=e,this.scheduleRender()}navigateTermHistory(e){this.termHistory.length!==0&&(this.termHistoryIndex===-1&&(this.termHistoryIndex=this.termHistory.length),this.termHistoryIndex+=e,this.termHistoryIndex<0&&(this.termHistoryIndex=0),this.termHistoryIndex>=this.termHistory.length?(this.termHistoryIndex=-1,this.termInput="",this.termInputCursor=0):(this.termInput=this.termHistory[this.termHistoryIndex],this.termInputCursor=this.termInput.length),this.scheduleRender())}submitTermCommand(){let e=this.termInput.trim();e&&(this.termInput="",this.termInputCursor=0,this.termScroll=0,this.termHistory.push(e),this.termHistoryIndex=-1,this.term.run(e),this.scheduleRender())}applyTermCompletion(){let e=sn(this.term.getCwd(),this.termInput,this.termInputCursor);if(e){if(e.candidates.length>0){let s=e.candidates.slice(0,24),i=e.candidates.length>s.length?` \u2026\uFF08\u5171 ${e.candidates.length} \u9879\uFF09`:"";this.term.notice(`${t.gray}${s.join(" ")}${i}${t.reset}`)}else this.termInput=e.line,this.termInputCursor=e.cursor,this.termScroll=0;this.scheduleRender()}}handleConfirmKey(e){let r=this.pendingConfirm;if(r)switch(e){case"y":case"Y":case"\r":this.resolveConfirm(!0);return;case"":this.abortController?.abort(),this.resolveConfirm(!1);return;case"n":case"N":case"\x1B":case"":this.resolveConfirm(!1);return;case"\x1B[C":case"\x1B[D":case" ":r.selected=!r.selected,this.scheduleRender();return;default:return}}resolveConfirm(e){let r=this.pendingConfirm;if(!r)return;this.pendingConfirm=void 0;let s=e?"\u5DF2\u5141\u8BB8":"\u5DF2\u62D2\u7EDD";this.lines.push(` ${e?t.green:t.yellow}${s}${t.reset}`),r.resolve(e),this.scheduleRender()}insertText(e){this.input=this.input.slice(0,this.inputCursor)+e+this.input.slice(this.inputCursor),this.inputCursor+=e.length,this.scrollOffset=0,this.scheduleRender()}backspace(){if(this.inputCursor<=0)return;let e=this.inputCursor-1,r=this.input.charCodeAt(e);r>=56320&&r<=57343&&e>0&&(e-=1),this.input=this.input.slice(0,e)+this.input.slice(this.inputCursor),this.inputCursor=e,this.scheduleRender()}moveCursor(e){let r=this.inputCursor+e;this.inputCursor=Math.max(0,Math.min(this.input.length,r)),this.scheduleRender()}navigateHistory(e){this.history.length!==0&&(this.historyIndex===-1&&(this.historyIndex=this.history.length),this.historyIndex+=e,this.historyIndex<0&&(this.historyIndex=0),this.historyIndex>=this.history.length?(this.historyIndex=-1,this.input="",this.inputCursor=0):(this.input=this.history[this.historyIndex],this.inputCursor=this.input.length),this.scheduleRender())}scrollBy(e){this.setScrollOffset(this.scrollOffset+e)}setScrollOffset(e){this.scrollOffset=Math.max(0,Math.round(e)),this.scheduleRender()}scrollToTop(){this.setScrollOffset(Number.MAX_SAFE_INTEGER)}scrollToBottom(){this.setScrollOffset(0)}scrollTermBy(e){this.termScroll=Math.max(0,Math.round(this.termScroll+e)),this.scheduleRender()}scrollTermToTop(){this.termScroll=Number.MAX_SAFE_INTEGER,this.scheduleRender()}scrollTermToBottom(){this.termScroll=0,this.scheduleRender()}async submit(){if(this.busy)return;let e=this.input.trim();if(!e)return;if(this.input="",this.inputCursor=0,this.scrollOffset=0,this.history.push(e),this.historyIndex=-1,e.startsWith("/")){this.handleCommand(e);return}this.lastAnswerStart=this.lines.length;let r=`${t.bgGreen}${t.black}${t.bold} \u276F ${t.reset}`,[s,...i]=e.split(`
|
|
176
|
-
`);this.lines.push(`${r} ${t.brightGreen}${t.bold}${s}${t.reset}`);for(let a of i)this.lines.push(`${t.brightGreen}${t.bold}\u2502${t.reset} ${t.brightGreen}${a}${t.reset}`);this.lines.push(""),this.busy=!0,this.statusText="\u601D\u8003\u4E2D",this.statusDetail="",this.abortController=new AbortController,this.scheduleRender();let o={label:this.modelLabel,weight:this.modelWeight};try{await this.agent.run(e,this.abortController.signal)}catch(a){let[l,...c]=
|
|
177
|
-
`);this.lines.push(`${t.red}\u2717 ${l}${t.reset}`);for(let d of c)this.lines.push(`${t.gray} ${d}${t.reset}`);let u=o.weight!==void 0?`\uFF08\u6743\u91CD ${o.weight}\uFF09`:"";this.lines.push(`${t.gray} \u672C\u6B21\u8BF7\u6C42\u4F7F\u7528\u7684\u6A21\u578B\uFF1A${this.modelProviderLabel} / ${o.label}${u}${t.reset}`)}finally{let a=this.markdown.flush();a.length>0&&this.lines.push(...a),this.streamingPreview="",this.lines.push(""),this.busy=!1,this.abortController=void 0,this.statusText="\u5C31\u7EEA",this.scheduleRender()}}handleCommand(e){let[r,...s]=e.slice(1).split(/\s+/),i=s.join(" ");switch(r){case"help":case"h":this.printHelp();break;case"clear":this.lines=[];break;case"copy":this.copyOutput(i);break;case"mouse":this.toggleMouseCapture();break;case"reset":this.agent.reset(),this.lines.push(`${t.gray}\u4F1A\u8BDD\u5DF2\u91CD\u7F6E\u3002${t.reset}`);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{P(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{P(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":{let o=M(this.options.config).sort((l,c)=>c.weight-l.weight),a=this.modelWeight!==void 0?`\uFF08\u6743\u91CD ${this.modelWeight}\uFF09`:"";if(this.lines.push(`${t.gray}\u5F53\u524D\u6A21\u578B\uFF1A${t.reset}${this.modelProviderLabel} / ${this.modelLabel}${t.gray}${a}${t.reset}`),o.length>0){this.lines.push(`${t.gray}\u5DF2\u914D\u7F6E\u6A21\u578B\uFF08\u6309\u6743\u91CD\u964D\u5E8F\uFF09\uFF1A${t.reset}`);for(let l of o){let c=l.model===this.modelLabel?" \u2190 \u5F53\u524D":"";this.lines.push(`${t.gray} \xB7 ${l.id}\u3000\u6743\u91CD ${l.weight}${c}${t.reset}`)}}this.lines.push(`${t.gray}\u7BA1\u7406\u6A21\u578B\uFF08\u65B0\u589E / \u5220\u9664 / \u8C03\u6574\u6743\u91CD\uFF09\uFF1A${t.reset}xzh model${t.reset}`);break}default:this.lines.push(`${t.yellow}\u672A\u77E5\u547D\u4EE4\uFF1A/${r}\uFF0C\u8F93\u5165 /help \u67E5\u770B\u5E2E\u52A9\u3002${t.reset}`)}this.scheduleRender()}switchDirectory(e){let r=
|
|
178
|
-
`)).trim();if(!
|
|
179
|
-
`).length;this.lines.push(`${t.green}\u2713 \u5DF2\u590D\u5236${o}\uFF08${c} \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}`)}printHelp(){let e=[`${t.bold}\u7384\u732A \u5185\u7F6E\u547D\u4EE4${t.reset}`," /help \u663E\u793A\u672C\u5E2E\u52A9"," /clear \u6E05\u7A7A\u5C4F\u5E55"," /copy [N|A-B|last|all] \u590D\u5236\u8F93\u51FA\u533A\u5230\u7CFB\u7EDF\u526A\u8D34\u677F\uFF08\u9ED8\u8BA4\u6700\u8FD1 30 \u884C\uFF09"," /mouse \u5207\u6362\u9F20\u6807\u6355\u83B7\uFF1A\u5173\u95ED\u540E\u53EF\u7528\u9F20\u6807\u76F4\u63A5\u6846\u9009\u590D\u5236"," /reset \u91CD\u7F6E\u5BF9\u8BDD\u4E0A\u4E0B\u6587"," /cwd \u663E\u793A\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55"," /switch <\u76EE\u5F55> \u5207\u6362\u5F53\u524D\u5BF9\u8BDD\u7684\u9879\u76EE\u76EE\u5F55"," /term \u663E\u793A/\u9690\u85CF\u53F3\u4FA7\u7EC8\u7AEF\u9762\u677F\uFF08/term clear \u6E05\u7A7A\u8F93\u51FA\uFF09"," /model \u663E\u793A\u5F53\u524D\u6A21\u578B\u4E0E\u6743\u91CD\u3001\u5DF2\u914D\u7F6E\u6A21\u578B\u5217\u8868"," /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}`,` ${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}`," Shift+Tab \u5207\u6362\u7126\u70B9\uFF08\u5BF9\u8BDD \u21C4 \u53F3\u4FA7\u7EC8\u7AEF\uFF09\xB7 \u9F20\u6807\u70B9\u51FB\u4EA6\u53EF"," Ctrl+C \u4E2D\u65AD\u4EFB\u52A1 / \u6E05\u7A7A\u8F93\u5165 / \u9000\u51FA\uFF08\u7A7A\u95F2\u4E14\u8F93\u5165\u4E3A\u7A7A\u65F6\u9000\u51FA\uFF09"," Ctrl+D \u7ED3\u675F\u672C\u8F6E\u6B63\u5728\u8FDB\u884C\u7684\u5BF9\u8BDD \xB7 \u4EFB\u4F55\u60C5\u51B5\u4E0B\u90FD\u4E0D\u4F1A\u9000\u51FA\u7384\u732A"," Ctrl+L \u6E05\u5C4F",` \u6CE8\uFF1A${t.bold}Alt+Enter${t.reset} \u8D70\u7EC8\u7AEF\u539F\u751F\u7F16\u7801\uFF0C\u5404\u7EC8\u7AEF\u901A\u7528\uFF1B`," Ctrl/Shift+Enter \u9700\u8981\u7EC8\u7AEF\u652F\u6301\u6269\u5C55\u952E\u76D8\u534F\u8BAE\uFF0C\u90E8\u5206\u7EC8\u7AEF\uFF08\u5C24\u5176 IDE \u5185\u7F6E\uFF09\u4E0D\u652F\u6301\u3002",`${t.bold}\u53F3\u4FA7\u7EC8\u7AEF${t.reset}`," Enter \u6267\u884C\u547D\u4EE4 \xB7 \u2191/\u2193 \u547D\u4EE4\u5386\u53F2 \xB7 Ctrl+C / Ctrl+D \u4E2D\u65AD\u8FD0\u884C\u4E2D\u7684\u547D\u4EE4 \xB7 Ctrl+L \u6E05\u7A7A"," PgUp/PgDn / Shift+\u2191\u2193 / Home/End \u56DE\u770B\u5386\u53F2\u8F93\u51FA\uFF08\u6EDA\u52A8\u4E0D\u5F71\u54CD\u6B63\u5728\u8FD0\u884C\u7684\u547D\u4EE4\uFF09"," \u547D\u4EE4\u5728\u5F53\u524D\u9879\u76EE\u76EE\u5F55\u4E0B\u6267\u884C\uFF1Bcd \u751F\u6548\uFF08\u9762\u677F\u81EA\u884C\u7EF4\u62A4\u5DE5\u4F5C\u76EE\u5F55\uFF09"];this.lines.push(...e.map(r=>`${t.gray}${r}${t.reset}`)),this.lines.push("")}buildHeaderLines(e){let r=this.modelWeight!==void 0?` \xB7 \u6743\u91CD ${this.modelWeight}`:"",s=F(`${this.modelProviderLabel} / ${this.modelLabel}${r}`,Math.max(10,e-8)),i=F(this.cwd,Math.max(10,e-8)),o=`${t.gray}${"\u2500".repeat(Math.max(0,e))}${t.reset}`;return{info:[`${t.brightMagenta}${t.bold} \u7384\u732A XuanZhu${t.reset} ${t.gray}v${ye} \xB7 \u7EC8\u7AEF AI \u7F16\u7801 Agent${t.reset}`,`${t.gray} \u6A21\u578B\uFF1A${t.reset}${s}${t.reset}`,`${t.gray} \u76EE\u5F55\uFF1A${t.reset}${i}${t.reset}`,`${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:o}}scheduleRender(){this.needsRender||this.exited||(this.needsRender=!0,setTimeout(()=>{this.needsRender=!1,this.render()},16))}render(){if(this.exited)return;this.trimOutputLines();let e=Math.max(40,process.stdout.columns||80),r=Math.max(8,process.stdout.rows||24),s=this.resolveTermWidth(e),i=s>0?Math.max(20,e-s-1):e;this.lastLeftWidth=i;let o=this.pendingConfirm?this.layoutConfirm(i):this.layoutInput(i),a=o.lines.length,l=1,c=this.buildHeaderLines(i),u=Math.max(1,Math.floor(r/3)),d=Math.min(c.info.length,Math.max(0,u-1)),h=[...c.info.slice(0,d),c.divider],p=h.length,f=Math.max(3,r-p-a-l),g=this.physicalLines(i),$=g.length;this.lastPhysicalCount>=0&&this.scrollOffset>0&&$>this.lastPhysicalCount&&(this.scrollOffset+=$-this.lastPhysicalCount),this.lastPhysicalCount=$;let m=Math.max(0,$-f);this.scrollOffset>m&&(this.scrollOffset=m);let x=$-this.scrollOffset,y=Math.max(0,x-f),w=g.slice(y,x);for(;w.length<f;)w.unshift("");let v=r-1,X=Math.max(0,f-(x-y)),ae=this.lastPhysicalMap;this.screenToLogical=[];for(let k=0;k<v;k++){let A=k-p;if(A<0||A>=f){this.screenToLogical.push(void 0);continue}let Z=y+A-X,fe=Z>=0&&Z<ae.length?ae[Z]:-1;this.screenToLogical.push(fe>=0?fe:void 0)}if(this.selectionAnchor!==void 0&&this.selectionHead!==void 0){let k=Math.min(this.selectionAnchor,this.selectionHead),A=Math.max(this.selectionAnchor,this.selectionHead);for(let Z=0;Z<w.length;Z++){let fe=y+Z-X;if(fe<0||fe>=ae.length)continue;let Wt=ae[fe];Wt>=k&&Wt<=A&&(w[Z]=`${t.inverse}${w[Z]}${t.reset}`)}}let Me=s>0?this.buildTermPanel(s,v):{rows:[],cursorRow:0,cursorCol:0},at=p+f,te=W.hide;for(let k=0;k<v;k++){let A;k<p?A=h[k]:k<p+f?A=w[k-p]:k<at+a?A=o.lines[k-at]:A="",te+=W.to(k+1,1)+"\x1B[2K",s>0?te+=tn(F(A,i),i)+`${t.gray}\u2502${t.reset}`+F(Me.rows[k]??"",s):te+=A}if(te+=W.to(r,1)+"\x1B[2K"+this.renderStatus(e),this.pendingConfirm)te+=W.hide;else if(this.termFocus&&s>0&&Me.cursorRow>0){let k=Me.cursorRow,A=Math.min(e,i+1+Me.cursorCol);te+=W.to(k,A)+W.show}else{let k=at+o.cursorRow+1,A=Math.min(i,o.cursorCol+1);te+=W.to(k,A)+W.show}process.stdout.write(te)}resolveTermWidth(e){return!this.termVisible||e<80?0:Math.min(64,Math.max(32,Math.floor(e*.4)))}buildTermPanel(e,r){if(e<=0||r<=0)return{rows:[],cursorRow:0,cursorCol:0};let s=[],i=this.term.isRunning(),o=this.termFocus?`${t.bgBlue}${t.brightWhite} \u7EC8\u7AEF ${t.reset}`:`${t.gray} \u7EC8\u7AEF ${t.reset}`,a=i?`${t.brightYellow} \u25CF \u8FD0\u884C\u4E2D${t.reset}`:"",l=Math.max(6,e-9-(i?5:0));s.push(`${o}${t.gray}${F(this.term.getCwd(),l)}${t.reset}${a}`);let c=Math.max(1,r-3),u=[];for(let X of this.term.visibleLines())u.push(...Ee(X,e));this.lastTermPhysicalCount>=0&&this.termScroll>0&&u.length>this.lastTermPhysicalCount&&(this.termScroll+=u.length-this.lastTermPhysicalCount),this.lastTermPhysicalCount=u.length;let d=Math.max(0,u.length-c);this.termScroll>d&&(this.termScroll=d);let h=u.length-this.termScroll,p=Math.max(0,h-c),f=u.slice(p,h);for(;f.length<c;)f.unshift("");s.push(...f),s.push(`${t.gray}${"\u2500".repeat(e)}${t.reset}`);let g=2,$=Math.max(1,e-g),m=this.termInput,x=O(m.slice(0,this.termInputCursor));for(;x>$&&m.length>0;)m=m.slice(1),x=O(m.slice(0,this.termInputCursor));let y=this.termFocus?`${t.brightCyan}\u276F${t.reset} `:`${t.gray}\u276F${t.reset} `;s.push(F(`${y}${m}`,e));let w=s.length,v=Math.min(e,g+x+1);for(;s.length<r;)s.push("");return{rows:s.slice(0,r),cursorRow:w,cursorCol:v}}physicalLines(e){let r=[],s=[];for(let i=0;i<this.lines.length;i++){let o=Ee(this.lines[i],e);r.push(...o);for(let a=0;a<o.length;a++)s.push(i)}if(this.streamingPreview){let i=Ee(this.streamingPreview,e);r.push(...i);for(let o=0;o<i.length;o++)s.push(-1)}return this.lastPhysicalMap=s,r}renderStatus(e){let r=" \u7384\u732A ",s=this.autoApprove?"\u26A1auto \xB7 ":"",i=this.intentEnabled?"\u2301intent \xB7 ":"",o=this.termVisible?this.termFocus?"\u7EC8\u7AEF\u25B8 ":"\u5BF9\u8BDD\u25B8 ":"",a=this.modelWeight!==void 0?` w${this.modelWeight}`:"",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} `:"",d=` ${s}${i}${o}${u}${l}${c}${this.modelLabel}${a} \u2502 ${this.statusText}${this.statusDetail?" \xB7 "+this.statusDetail:""} `,h=` ${this.cwd} `,p=this.busy?`${t.brightYellow}\u25CF \u8FD0\u884C\u4E2D${t.reset}${t.bgBlue}`:"",f=O(r)+O(d)+O(p)+6,g=`${t.bgBlue}${t.brightWhite}${r}${t.reset}${t.bgBlue}${t.brightWhite}${p}${t.bgBlue}${t.gray}${F(h,Math.max(0,e-f))}${t.bgBlue}${t.brightWhite}${d}${t.reset}`,$=O(g);return $<e?g+=`${t.bgBlue}${" ".repeat(e-$)}${t.reset}`:$>e&&(g=`${F(g,e)}${t.reset}`),g}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 f=0;f<o.length;f++){if(p>=this.inputCursor){a=f;break}p+=o[f].length}}let l=[],c="\u276F ",u=O("\u276F "),d=0,h=u;for(let p=0;p<o.length;p++){let f=o[p];if(f===`
|
|
180
|
-
`){l.push(c),c=" ",u=O(" "),p===a&&(d=l.length,h=u);continue}let
|
|
181
|
-
`).slice(0,12);for(let u of a)for(let d of
|
|
182
|
-
`:"\r";case 9:return r&&(e&Mt)===0?"\x1B[Z":" ";case 8:case 127:return"\x7F";default:return
|
|
193
|
+
`);this.lines.push(`${r} ${t.brightGreen}${t.bold}${s}${t.reset}`);for(let a of i)this.lines.push(`${t.brightGreen}${t.bold}\u2502${t.reset} ${t.brightGreen}${a}${t.reset}`);this.lines.push(""),this.busy=!0,this.statusText="\u601D\u8003\u4E2D",this.statusDetail="",this.abortController=new AbortController,this.scheduleRender();let o={label:this.modelLabel,weight:this.modelWeight};try{await this.agent.run(e,this.abortController.signal)}catch(a){let[l,...c]=Y(a).split(`
|
|
194
|
+
`);this.lines.push(`${t.red}\u2717 ${l}${t.reset}`);for(let d of c)this.lines.push(`${t.gray} ${d}${t.reset}`);let u=o.weight!==void 0?`\uFF08\u6743\u91CD ${o.weight}\uFF09`:"";this.lines.push(`${t.gray} \u672C\u6B21\u8BF7\u6C42\u4F7F\u7528\u7684\u6A21\u578B\uFF1A${this.modelProviderLabel} / ${o.label}${u}${t.reset}`)}finally{let a=this.markdown.flush();a.length>0&&this.lines.push(...a),this.streamingPreview="",this.lines.push(""),this.busy=!1,this.abortController=void 0,this.statusText="\u5C31\u7EEA",this.scheduleRender()}}handleCommand(e){let[r,...s]=e.slice(1).split(/\s+/),i=s.join(" ");switch(r){case"help":case"h":this.printHelp();break;case"clear":this.lines=[];break;case"copy":this.copyOutput(i);break;case"mouse":this.toggleMouseCapture();break;case"reset":this.agent.reset(),this.lines.push(`${t.gray}\u4F1A\u8BDD\u5DF2\u91CD\u7F6E\u3002${t.reset}`);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{P(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{P(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":{let o=M(this.options.config).sort((l,c)=>c.weight-l.weight),a=this.modelWeight!==void 0?`\uFF08\u6743\u91CD ${this.modelWeight}\uFF09`:"";if(this.lines.push(`${t.gray}\u5F53\u524D\u6A21\u578B\uFF1A${t.reset}${this.modelProviderLabel} / ${this.modelLabel}${t.gray}${a}${t.reset}`),o.length>0){this.lines.push(`${t.gray}\u5DF2\u914D\u7F6E\u6A21\u578B\uFF08\u6309\u6743\u91CD\u964D\u5E8F\uFF09\uFF1A${t.reset}`);for(let l of o){let c=l.model===this.modelLabel?" \u2190 \u5F53\u524D":"";this.lines.push(`${t.gray} \xB7 ${l.id}\u3000\u6743\u91CD ${l.weight}${c}${t.reset}`)}}this.lines.push(`${t.gray}\u7BA1\u7406\u6A21\u578B\uFF08\u65B0\u589E / \u5220\u9664 / \u8C03\u6574\u6743\u91CD\uFF09\uFF1A${t.reset}xzh model${t.reset}`);break}default:this.lines.push(`${t.yellow}\u672A\u77E5\u547D\u4EE4\uFF1A/${r}\uFF0C\u8F93\u5165 /help \u67E5\u770B\u5E2E\u52A9\u3002${t.reset}`)}this.scheduleRender()}switchDirectory(e){let r=q(e.trim()),s=we.isAbsolute(r)?r:we.resolve(this.cwd,r);if(!ce.existsSync(s)){this.lines.push(`${t.red}\u2717 \u76EE\u5F55\u4E0D\u5B58\u5728\uFF1A${s}${t.reset}`),this.scheduleRender();return}if(!ce.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=ce.realpathSync(s)}catch{}this.cwd=i;let o=vt(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}`),this.lines.push(`${t.gray} \u540E\u7EED\u6587\u4EF6\u4E0E\u547D\u4EE4\u64CD\u4F5C\u5C06\u57FA\u4E8E\u8BE5\u76EE\u5F55\uFF1B\u5BF9\u8BDD\u4E0A\u4E0B\u6587\u5DF2\u4FDD\u7559\uFF08\u53EF\u7528 /reset \u6E05\u7A7A\uFF09\u3002${t.reset}`),this.scheduleRender()}toggleMouseCapture(){this.mouseCapture=!this.mouseCapture,this.options.config.mouseCapture=this.mouseCapture;try{P(this.options.config)}catch{}process.stdout.write(this.mouseCapture?"\x1B[?1000h\x1B[?1002h\x1B[?1006h":"\x1B[?1000l\x1B[?1002l\x1B[?1006l"),this.lines.push(this.mouseCapture?`${t.gray}\u9F20\u6807\u6355\u83B7\uFF1A${t.reset}\u5F00 ${t.gray}\u2014 \u6EDA\u8F6E\u53EF\u6EDA\u52A8\u8F93\u51FA\u533A\u3002\u4F46\u53F3\u952E\u83DC\u5355\u4E0E\u539F\u751F\u6846\u9009\u4F1A\u88AB\u63A5\u7BA1\uFF0C\u8981\u9009\u6587\u672C\u8BF7\u6309\u4F4F ${t.reset}Shift${t.gray} \u62D6\u62FD\u3002\u518D\u8F93\u5165 ${t.reset}/mouse${t.gray} \u5173\u95ED\u3002${t.reset}`:`${t.gray}\u9F20\u6807\u6355\u83B7\uFF1A${t.reset}${t.brightGreen}\u5173${t.reset}${t.gray} \u2014 \u9F20\u6807\u5168\u90E8\u529F\u80FD\u53EF\u7528\uFF08\u53F3\u952E\u83DC\u5355\u3001\u6846\u9009\u590D\u5236\u3001\u6EDA\u8F6E\u7531\u7EC8\u7AEF\u5904\u7406\uFF09\u3002\u6EDA\u52A8\u8F93\u51FA\u533A\u8BF7\u7528 ${t.reset}PgUp/PgDn${t.gray}\uFF0C\u6216\u7528 ${t.reset}/mouse${t.gray} \u6362\u56DE\u6EDA\u8F6E\u3002${t.reset}`)}copyOutput(e){let r=e.trim().toLowerCase(),s=this.lines,i="";(r==="term"||r.startsWith("term "))&&(s=this.term.visibleLines(),i="\u7EC8\u7AEF\u8F93\u51FA ",r=r.slice(4).trim());let o=s.length,a,l;if(r==="all")a=s.slice(),l="\u5168\u90E8";else if(r==="last")a=s===this.lines?this.lines.slice(Math.min(this.lastAnswerStart,o)):s.slice(-30),l=s===this.lines?"\u6700\u8FD1\u4E00\u6B21\u5BF9\u8BDD":"\u6700\u8FD1 30 \u884C";else if(/^\d+-\d+$/.test(r)){let[h,p]=r.split("-"),f=Math.max(1,Number(h)),$=Math.min(o,Number(p));if(f>$){this.lines.push(`${t.yellow}\u884C\u53F7\u8303\u56F4\u65E0\u6548\uFF1A${r}${t.reset}${t.gray}\uFF08${i||"\u8F93\u51FA\u533A"}\u5F53\u524D ${o} \u884C\uFF09${t.reset}`);return}a=s.slice(f-1,$),l=`\u7B2C ${f}-${$} \u884C`}else{let h=/^\d+$/.test(r)?Number(r):30;a=s.slice(-Math.max(1,h)),l=`\u6700\u8FD1 ${Math.min(Math.max(1,h),o)} \u884C`}l=i+l;let c=le(a.join(`
|
|
195
|
+
`)).trim();if(!c){let h=r==="last"&&o===0&&s===this.lines?"\uFF0C\u5C1A\u672A\u8FDB\u884C\u8FC7\u5BF9\u8BDD":"";this.lines.push(`${t.yellow}\u6CA1\u6709\u53EF\u590D\u5236\u7684\u5185\u5BB9${t.reset}${t.gray}\uFF08\u8F93\u51FA\u533A\u5F53\u524D ${o} \u884C${h}\uFF09\u3002${t.reset}`);return}let u=Buffer.from(c,"utf8").toString("base64");process.stdout.write(`\x1B]52;c;${u}\x07`);let d=c.split(`
|
|
196
|
+
`).length;this.lines.push(`${t.green}\u2713 \u5DF2\u590D\u5236${l}\uFF08${d} \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}`)}printHelp(){let e=[`${t.bold}\u7384\u732A \u5185\u7F6E\u547D\u4EE4${t.reset}`," /help \u663E\u793A\u672C\u5E2E\u52A9"," /clear \u6E05\u7A7A\u5C4F\u5E55"," /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"," /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"," /cwd \u663E\u793A\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55"," /switch <\u76EE\u5F55> \u5207\u6362\u5F53\u524D\u5BF9\u8BDD\u7684\u9879\u76EE\u76EE\u5F55"," /term \u663E\u793A/\u9690\u85CF\u53F3\u4FA7\u7EC8\u7AEF\u9762\u677F\uFF08/term clear \u6E05\u7A7A\u8F93\u51FA\uFF09"," /model \u663E\u793A\u5F53\u524D\u6A21\u578B\u4E0E\u6743\u91CD\u3001\u5DF2\u914D\u7F6E\u6A21\u578B\u5217\u8868"," /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}`," Shift+Tab \u5207\u6362\u7126\u70B9\uFF08\u5BF9\u8BDD \u21C4 \u53F3\u4FA7\u7EC8\u7AEF\uFF09\xB7 \u9F20\u6807\u70B9\u51FB\u4EA6\u53EF"," Ctrl+C \u4E2D\u65AD\u4EFB\u52A1 / \u6E05\u7A7A\u8F93\u5165 / \u9000\u51FA\uFF08\u7A7A\u95F2\u4E14\u8F93\u5165\u4E3A\u7A7A\u65F6\u9000\u51FA\uFF09"," Ctrl+D \u7ED3\u675F\u672C\u8F6E\u6B63\u5728\u8FDB\u884C\u7684\u5BF9\u8BDD \xB7 \u4EFB\u4F55\u60C5\u51B5\u4E0B\u90FD\u4E0D\u4F1A\u9000\u51FA\u7384\u732A"," Ctrl+L \u6E05\u5C4F",` \u6CE8\uFF1A${t.bold}Alt+Enter${t.reset} \u8D70\u7EC8\u7AEF\u539F\u751F\u7F16\u7801\uFF0C\u5404\u7EC8\u7AEF\u901A\u7528\uFF1B`," Ctrl/Shift+Enter \u9700\u8981\u7EC8\u7AEF\u652F\u6301\u6269\u5C55\u952E\u76D8\u534F\u8BAE\uFF0C\u90E8\u5206\u7EC8\u7AEF\uFF08\u5C24\u5176 IDE \u5185\u7F6E\uFF09\u4E0D\u652F\u6301\u3002",`${t.bold}\u53F3\u4FA7\u7EC8\u7AEF${t.reset}`," Enter \u6267\u884C\u547D\u4EE4 \xB7 \u2191/\u2193 \u547D\u4EE4\u5386\u53F2 \xB7 Ctrl+C / Ctrl+D \u4E2D\u65AD\u8FD0\u884C\u4E2D\u7684\u547D\u4EE4 \xB7 Ctrl+L \u6E05\u7A7A"," PgUp/PgDn / Shift+\u2191\u2193 / Home/End \u56DE\u770B\u5386\u53F2\u8F93\u51FA\uFF08\u6EDA\u52A8\u4E0D\u5F71\u54CD\u6B63\u5728\u8FD0\u884C\u7684\u547D\u4EE4\uFF09"," \u547D\u4EE4\u5728\u5F53\u524D\u9879\u76EE\u76EE\u5F55\u4E0B\u6267\u884C\uFF1Bcd \u751F\u6548\uFF08\u9762\u677F\u81EA\u884C\u7EF4\u62A4\u5DE5\u4F5C\u76EE\u5F55\uFF09"];this.lines.push(...e.map(r=>`${t.gray}${r}${t.reset}`)),this.lines.push("")}buildHeaderLines(e){let r=this.modelWeight!==void 0?` \xB7 \u6743\u91CD ${this.modelWeight}`:"",s=H(`${this.modelProviderLabel} / ${this.modelLabel}${r}`,Math.max(10,e-8)),i=H(this.cwd,Math.max(10,e-8)),o=`${t.gray}${"\u2500".repeat(Math.max(0,e))}${t.reset}`;return{info:[`${t.brightMagenta}${t.bold} \u7384\u732A XuanZhu${t.reset} ${t.gray}v${xe} \xB7 \u7EC8\u7AEF AI \u7F16\u7801 Agent${t.reset}`,`${t.gray} \u6A21\u578B\uFF1A${t.reset}${s}${t.reset}`,`${t.gray} \u76EE\u5F55\uFF1A${t.reset}${i}${t.reset}`,`${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:o}}scheduleRender(){this.needsRender||this.exited||(this.needsRender=!0,setTimeout(()=>{this.needsRender=!1,this.render()},16))}render(){if(this.exited)return;this.trimOutputLines();let e=Math.max(40,process.stdout.columns||80),r=Math.max(8,process.stdout.rows||24),s=this.resolveTermWidth(e),i=s>0?Math.max(20,e-s-1):e;this.lastLeftWidth=i;let o=this.pendingConfirm?this.layoutConfirm(i):this.layoutInput(i),a=o.lines.length,l=1,c=this.buildHeaderLines(i),u=Math.max(1,Math.floor(r/3)),d=Math.min(c.info.length,Math.max(0,u-1)),h=[...c.info.slice(0,d),c.divider],p=h.length,f=Math.max(3,r-p-a-l),$=this.physicalLines(i),y=$.length;this.lastPhysicalCount>=0&&this.scrollOffset>0&&y>this.lastPhysicalCount&&(this.scrollOffset+=y-this.lastPhysicalCount),this.lastPhysicalCount=y;let m=Math.max(0,y-f);this.scrollOffset>m&&(this.scrollOffset=m);let x=y-this.scrollOffset,g=Math.max(0,x-f),b=$.slice(g,x);for(;b.length<f;)b.unshift("");let w=r-1,N=Math.max(0,f-(x-g)),G=this.lastPhysicalMap;this.screenToLogical=[];for(let k=0;k<w;k++){let A=k-p;if(A<0||A>=f){this.screenToLogical.push(void 0);continue}let V=g+A-N,me=V>=0&&V<G.length?G[V]:-1;this.screenToLogical.push(me>=0?me:void 0)}if(this.selectionAnchor!==void 0&&this.selectionHead!==void 0){let k=Math.min(this.selectionAnchor,this.selectionHead),A=Math.max(this.selectionAnchor,this.selectionHead);for(let V=0;V<b.length;V++){let me=g+V-N;if(me<0||me>=G.length)continue;let Wt=G[me];Wt>=k&&Wt<=A&&(b[V]=`${t.inverse}${b[V]}${t.reset}`)}}let X=s>0?this.buildTermPanel(s,w):{rows:[],cursorRow:0,cursorCol:0},Ce=p+f,Z=F.hide;for(let k=0;k<w;k++){let A;k<p?A=h[k]:k<p+f?A=b[k-p]:k<Ce+a?A=o.lines[k-Ce]:A="",Z+=F.to(k+1,1)+"\x1B[2K",s>0?Z+=tn(H(A,i),i)+`${t.gray}\u2502${t.reset}`+H(X.rows[k]??"",s):Z+=A}if(Z+=F.to(r,1)+"\x1B[2K"+this.renderStatus(e),this.pendingConfirm)Z+=F.hide;else if(this.termFocus&&s>0&&X.cursorRow>0){let k=X.cursorRow,A=Math.min(e,i+1+X.cursorCol);Z+=F.to(k,A)+F.show}else{let k=Ce+o.cursorRow+1,A=Math.min(i,o.cursorCol+1);Z+=F.to(k,A)+F.show}process.stdout.write(Z)}resolveTermWidth(e){return!this.termVisible||e<80?0:Math.min(64,Math.max(32,Math.floor(e*.4)))}buildTermPanel(e,r){if(e<=0||r<=0)return{rows:[],cursorRow:0,cursorCol:0};let s=[],i=this.term.isRunning(),o=this.termFocus?`${t.bgBlue}${t.brightWhite} \u7EC8\u7AEF ${t.reset}`:`${t.gray} \u7EC8\u7AEF ${t.reset}`,a=i?`${t.brightYellow} \u25CF \u8FD0\u884C\u4E2D${t.reset}`:"",l=Math.max(6,e-9-(i?5:0));s.push(`${o}${t.gray}${H(this.term.getCwd(),l)}${t.reset}${a}`);let c=Math.max(1,r-3),u=[];for(let N of this.term.visibleLines())u.push(..._e(N,e));this.lastTermPhysicalCount>=0&&this.termScroll>0&&u.length>this.lastTermPhysicalCount&&(this.termScroll+=u.length-this.lastTermPhysicalCount),this.lastTermPhysicalCount=u.length;let d=Math.max(0,u.length-c);this.termScroll>d&&(this.termScroll=d);let h=u.length-this.termScroll,p=Math.max(0,h-c),f=u.slice(p,h);for(;f.length<c;)f.unshift("");s.push(...f),s.push(`${t.gray}${"\u2500".repeat(e)}${t.reset}`);let $=2,y=Math.max(1,e-$),m=this.termInput,x=O(m.slice(0,this.termInputCursor));for(;x>y&&m.length>0;)m=m.slice(1),x=O(m.slice(0,this.termInputCursor));let g=this.termFocus?`${t.brightCyan}\u276F${t.reset} `:`${t.gray}\u276F${t.reset} `;s.push(H(`${g}${m}`,e));let b=s.length,w=Math.min(e,$+x+1);for(;s.length<r;)s.push("");return{rows:s.slice(0,r),cursorRow:b,cursorCol:w}}physicalLines(e){let r=[],s=[];for(let i=0;i<this.lines.length;i++){let o=_e(this.lines[i],e);r.push(...o);for(let a=0;a<o.length;a++)s.push(i)}if(this.streamingPreview){let i=_e(this.streamingPreview,e);r.push(...i);for(let o=0;o<i.length;o++)s.push(-1)}return this.lastPhysicalMap=s,r}renderStatus(e){let r=" \u7384\u732A ",s=this.autoApprove?"\u26A1auto \xB7 ":"",i=this.intentEnabled?"\u2301intent \xB7 ":"",o=this.termVisible?this.termFocus?"\u7EC8\u7AEF\u25B8 ":"\u5BF9\u8BDD\u25B8 ":"",a=this.modelWeight!==void 0?` w${this.modelWeight}`:"",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} `:"",d=` ${s}${i}${o}${u}${l}${c}${this.modelLabel}${a} \u2502 ${this.statusText}${this.statusDetail?" \xB7 "+this.statusDetail:""} `,h=` ${this.cwd} `,p=this.busy?`${t.brightYellow}\u25CF \u8FD0\u884C\u4E2D${t.reset}${t.bgBlue}`:"",f=O(r)+O(d)+O(p)+6,$=`${t.bgBlue}${t.brightWhite}${r}${t.reset}${t.bgBlue}${t.brightWhite}${p}${t.bgBlue}${t.gray}${H(h,Math.max(0,e-f))}${t.bgBlue}${t.brightWhite}${d}${t.reset}`,y=O($);return y<e?$+=`${t.bgBlue}${" ".repeat(e-y)}${t.reset}`:y>e&&($=`${H($,e)}${t.reset}`),$}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 f=0;f<o.length;f++){if(p>=this.inputCursor){a=f;break}p+=o[f].length}}let l=[],c="\u276F ",u=O("\u276F "),d=0,h=u;for(let p=0;p<o.length;p++){let f=o[p];if(f===`
|
|
197
|
+
`){l.push(c),c=" ",u=O(" "),p===a&&(d=l.length,h=u);continue}let $=O(f);u+$>e&&(l.push(c),c=" ",u=O(" ")),p===a&&(d=l.length,h=u),c+=f,u+=$}if(a>=o.length&&(d=l.length,h=u),l.push(c),l.length>i){let p=Math.max(0,d-i+1);return{lines:l.slice(p,p+i),cursorRow:d-p,cursorCol:h}}return{lines:l,cursorRow:d,cursorCol:h}}layoutConfirm(e){let r=this.pendingConfirm,{request:s}=r,i=[],o=s.danger;i.push(`${o?t.brightRed:t.brightYellow}\u26A0 ${s.title}${t.reset}`);let a=s.detail.split(`
|
|
198
|
+
`).slice(0,12);for(let u of a)for(let d of _e(`${t.gray}${u}${t.reset}`,e-4))i.push(` ${d}`);let l=r.selected?`${t.inverse}${t.green} \u5141\u8BB8 ${t.reset}`:`${t.gray} \u5141\u8BB8 ${t.reset}`,c=r.selected?`${t.gray} \u62D2\u7EDD ${t.reset}`:`${t.inverse}${t.yellow} \u62D2\u7EDD ${t.reset}`;return i.push(` ${l} ${c} ${t.gray}\u2190 \u2192 \u5207\u6362 \xB7 Enter \u786E\u8BA4 \xB7 y/n \u5FEB\u6377${t.reset}`),{lines:i,cursorRow:0,cursorCol:0}}},Ls=1,Os=2,Mt=4;function Ns(n,e){if((e&Mt)===0)return null;let r=n>=65&&n<=90?n+32:n;if(r>=97&&r<=122)return String.fromCharCode(r-96);switch(n){case 32:case 64:return"\0";case 91:return"\x1B";case 92:return"";case 93:return"";case 94:return"";case 95:case 47:return"";default:return null}}function on(n,e){let r=(e&(Ls|Mt|Os))!==0;switch(n){case 13:return r?`
|
|
199
|
+
`:"\r";case 9:return r&&(e&Mt)===0?"\x1B[Z":" ";case 8:case 127:return"\x7F";default:return Ns(n,e)}}function Ds(n){if(n==="\x1B\r"||n===`\x1B
|
|
183
200
|
`)return`
|
|
184
|
-
`;let e=/^\x1b\[(\d+)(?::\d+)?(?:;(\d+))?u$/.exec(n);if(e){let s=e[2]?Number(e[2])-1:0;return on(Number(e[1]),s)??n}let r=/^\x1b\[27;(\d+)(?:;(\d+))?~$/.exec(n);if(r){let s=Number(r[1])-1,i=r[2]?Number(r[2]):27;return on(i,s)??n}return n}function
|
|
201
|
+
`;let e=/^\x1b\[(\d+)(?::\d+)?(?:;(\d+))?u$/.exec(n);if(e){let s=e[2]?Number(e[2])-1:0;return on(Number(e[1]),s)??n}let r=/^\x1b\[27;(\d+)(?:;(\d+))?~$/.exec(n);if(r){let s=Number(r[1])-1,i=r[2]?Number(r[2]):27;return on(i,s)??n}return n}function Us(n){let e={};try{let i=JSON.parse(n.arguments||"{}");typeof i=="object"&&i!==null&&(e=i)}catch{return H(n.arguments,60)}let r=i=>{let o=e[i];return typeof o=="string"?o:void 0},s=r("path")??r("pattern")??r("command")??r("dirPath")??"";return H(s.replace(/\s+/g," "),80)}var U=v(require("fs")),Rt=v(require("path"));function Pt(){return Rt.join(R(),"session.lock")}function nt(){return Rt.join(R(),"crash.log")}function an(n){let e=Ks();try{U.mkdirSync(R(),{recursive:!0}),U.writeFileSync(Pt(),JSON.stringify({pid:process.pid,startedAt:new Date().toISOString(),version:n}),{mode:384})}catch{}return e}function Ks(){let n;try{n=U.readFileSync(Pt(),"utf8")}catch{return null}let e={};try{let r=JSON.parse(n);e.startedAt=r.startedAt,e.version=r.version}catch{}try{let r=U.readFileSync(nt(),"utf8");e.crashLog=r.slice(-4e3)}catch{}return e}function At(n,e){let r=e instanceof Error?e.stack??e.message:String(e),s=`
|
|
185
202
|
[${new Date().toISOString()}] ${n}
|
|
186
203
|
\u7248\u672C: ${process.version} \u5E73\u53F0: ${process.platform} PID: ${process.pid}
|
|
187
204
|
`+r.split(`
|
|
188
205
|
`).map(i=>` ${i}`).join(`
|
|
189
206
|
`)+`
|
|
190
|
-
`;try{
|
|
191
|
-
`);return;case"init":{if(
|
|
192
|
-
`);return}P({...
|
|
193
|
-
`);return}case void 0:return
|
|
207
|
+
`;try{U.mkdirSync(R(),{recursive:!0}),U.appendFileSync(nt(),s,"utf8")}catch{}}function It(){try{U.rmSync(Pt(),{force:!0}),U.rmSync(nt(),{force:!0})}catch{}}function st(){return nt()}var ln=require("child_process"),cn=v(require("fs"));async function un(n){let e=n[0];switch(e){case"edit":return Ws();case"path":process.stdout.write(`${_()}
|
|
208
|
+
`);return;case"init":{if(Te(R()),Ee()){process.stdout.write(`${t.yellow}\u914D\u7F6E\u6587\u4EF6\u5DF2\u5B58\u5728\uFF1A${_()}${t.reset}
|
|
209
|
+
`);return}P({...K}),process.stdout.write(`${t.green}\u2713 \u5DF2\u751F\u6210\u9ED8\u8BA4\u914D\u7F6E\uFF1A${_()}${t.reset}
|
|
210
|
+
`);return}case void 0:return Bs();default:process.stdout.write(`${t.red}\u672A\u77E5\u5B50\u547D\u4EE4\uFF1A${e}${t.reset}
|
|
194
211
|
${t.gray}\u7528\u6CD5\uFF1Axzh config [edit|path|init]${t.reset}
|
|
195
|
-
`),process.exitCode=1;return}}function
|
|
212
|
+
`),process.exitCode=1;return}}function Bs(){if(!Ee()){process.stdout.write(`${t.yellow}\u5C1A\u672A\u521B\u5EFA\u914D\u7F6E\u6587\u4EF6\u3002${t.reset}
|
|
196
213
|
${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}
|
|
197
|
-
`);return}let n=
|
|
214
|
+
`);return}let n=D(),e=Yt(n);process.stdout.write(`${t.bold}\u7384\u732A\u914D\u7F6E${t.reset} ${t.gray}(${_()})${t.reset}
|
|
198
215
|
|
|
199
216
|
`),process.stdout.write(JSON.stringify(e,null,2)+`
|
|
200
217
|
`),process.stdout.write(`
|
|
201
218
|
${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}
|
|
202
|
-
`)}function
|
|
219
|
+
`)}function Ws(){Te(R());let n=_();cn.existsSync(n)||P({...K});let e=[process.env.XUANZHU_EDITOR,"nano",process.env.EDITOR,"vi","vim","code --wait"].filter(r=>!!r);for(let r of e){let[s,...i]=r.split(" "),o=(0,ln.spawnSync)(s,[...i,n],{stdio:"inherit"});if(o.error){if(o.error.code==="ENOENT")continue;process.stdout.write(`${t.red}\u7F16\u8F91\u5668\u542F\u52A8\u5931\u8D25\uFF1A${o.error.message}${t.reset}
|
|
203
220
|
`);return}return}process.stdout.write(`${t.yellow}\u672A\u627E\u5230\u53EF\u7528\u7684\u6587\u672C\u7F16\u8F91\u5668\uFF0C\u8BF7\u624B\u52A8\u7F16\u8F91\uFF1A${n}${t.reset}
|
|
204
|
-
`)}var
|
|
205
|
-
`),a.trim()||e||""}finally{s.close()}}async function
|
|
206
|
-
`}async function
|
|
221
|
+
`)}var it=v(require("readline/promises")),dn=require("stream");var Fs=new dn.Writable({write(n,e,r){r()}});function Hs(n){return n.length<=8?"*".repeat(n.length):`${n.slice(0,4)}\u2026${n.slice(-4)}`}async function fe(n,e,r={}){let s=it.createInterface({input:process.stdin,output:r.mask?Fs:process.stdout});try{let i=e&&r.mask?Hs(e):e,o=i?` ${t.gray}(${i})${t.reset}`:"",a=await Promise.race([s.question(`${n}${o}: `),new Promise(c=>s.once("close",()=>c("")))]);return r.mask&&process.stdout.write(`
|
|
222
|
+
`),a.trim()||e||""}finally{s.close()}}async function Re(n,e,r=0){return process.stdin.isTTY?zs(n,e,r):qs(n,e,r)}function js(n,e,r){let s=e===r?`${t.brightGreen}\u276F${t.reset}`:" ",i=n.hint?` ${t.gray}${n.hint}${t.reset}`:"",o=`${t.gray}${String(e+1).padStart(2)}.${t.reset}`;return`\x1B[2K ${s} ${o} ${n.label}${i}
|
|
223
|
+
`}async function zs(n,e,r){let i=Math.min(Math.max(r,0),e.length-1),o="",a=e.length,l=()=>o?`${t.gray}\u2191/\u2193 \u9009\u62E9 \xB7 ${t.reset}\u7F16\u53F7 ${t.brightCyan}${o}${t.reset}${t.gray} \xB7 Enter \u786E\u8BA4 \xB7 Esc \u53D6\u6D88${t.reset}`:`${t.gray}\u2191/\u2193 \u9009\u62E9 \xB7 \u6570\u5B57\u76F4\u8FBE \xB7 Enter \u786E\u8BA4 \xB7 Esc \u53D6\u6D88${t.reset}`,c=()=>{for(let p=0;p<e.length;p++)process.stdout.write(js(e[p],p,i))},u=()=>{process.stdout.write(`\x1B[${a}A\x1B[1G\x1B[J`),c(),process.stdout.write(l())};process.stdout.write(`
|
|
207
224
|
${t.bold}${n}${t.reset}
|
|
208
|
-
`),c(),process.stdout.write(l());let d=process.stdin,h=!!d.isRaw;return new Promise(p=>{let f=m=>{d.off("data"
|
|
209
|
-
`),p(m)}
|
|
210
|
-
`){
|
|
225
|
+
`),c(),process.stdout.write(l());let d=process.stdin,h=!!d.isRaw;return new Promise(p=>{let f=m=>{d.off("data",y),h||d.setRawMode(!1),d.pause(),process.stdout.write(`
|
|
226
|
+
`),p(m)},$=()=>{let m=o?Number.parseInt(o,10)-1:i;m>=0&&m<e.length?f(e[m].value):o?(o="",u()):f(e[i].value)},y=m=>{let x=!1,g=0;for(;g<m.length;)if(m.startsWith("\x1B[A",g)||m[g]==="k")i=(i-1+e.length)%e.length,x=!0,g+=m.startsWith("\x1B[A",g)?3:1;else if(m.startsWith("\x1B[B",g)||m[g]==="j")i=(i+1)%e.length,x=!0,g+=m.startsWith("\x1B[B",g)?3:1;else if(m[g]==="\r"||m[g]===`
|
|
227
|
+
`){$();return}else if(m[g]===""){f(void 0);return}else if(m[g]==="\x1B"){f(void 0);return}else if(m[g]==="\x7F"||m[g]==="\b")o=o.slice(0,-1),x=!0,g+=1;else if(/\d/.test(m[g])){let b=o+m[g];o=b.length>2?m[g]:b,x=!0,g+=1}else g+=1;x&&u()};d.setRawMode(!0),d.resume(),d.setEncoding("utf8"),d.on("data",y)})}async function qs(n,e,r){process.stdout.write(`
|
|
211
228
|
${t.bold}${n}${t.reset}
|
|
212
229
|
`),e.forEach((i,o)=>{let a=o===r?`${t.brightGreen}\u276F${t.reset}`:" ",l=i.hint?` ${t.gray}${i.hint}${t.reset}`:"";process.stdout.write(` ${a} ${o+1}. ${i.label}${l}
|
|
213
|
-
`)});let s=
|
|
214
|
-
`),e[r].value):e[a].value}finally{s.close()}}async function
|
|
215
|
-
`);return}let i=
|
|
216
|
-
${t.gray}\u53EF\u7528\uFF1A${
|
|
217
|
-
`),process.exitCode=1;return}let o=n[1]??await
|
|
230
|
+
`)});let s=it.createInterface({input:process.stdin,output:process.stdout});try{let o=(await Promise.race([s.question(`${t.gray}\u8BF7\u8F93\u5165\u7F16\u53F7 [${r+1}]: ${t.reset}`),new Promise(l=>s.once("close",()=>l("")))])).trim();if(!o)return e[r].value;let a=Number.parseInt(o,10)-1;return Number.isNaN(a)||a<0||a>=e.length?(process.stdout.write(`${t.yellow}\u65E0\u6548\u7F16\u53F7\uFF0C\u4F7F\u7528\u9ED8\u8BA4\u9009\u9879\u3002${t.reset}
|
|
231
|
+
`),e[r].value):e[a].value}finally{s.close()}}async function ot(n,e=!1){let r=it.createInterface({input:process.stdin,output:process.stdout});try{let s=e?"[Y/n]":"[y/N]",o=(await Promise.race([r.question(`${n} ${s} `),new Promise(a=>r.once("close",()=>a("")))])).trim().toLowerCase();return o?o==="y"||o==="yes":e}finally{r.close()}}async function hn(n){switch(n[0]){case void 0:return Zs();case"list":case"ls":return Gs();case"all":case"available":case"providers":return Xs();case"add":return Lt(n.slice(1));case"remove":case"rm":case"delete":return pn(n.slice(1));case"weight":case"w":return fn(n.slice(1));case"context":case"ctx":return mn(n.slice(1));case"reset":return gn();case"help":case"-h":case"--help":return Ys();default:return Lt(n)}}async function Lt(n){let e=D(),r=ie(e),s=n[0]??await Js();if(!s){process.stdout.write(`${t.gray}\u5DF2\u53D6\u6D88\u3002${t.reset}
|
|
232
|
+
`);return}let i=re(s);if(!i){process.stdout.write(`${t.red}\u672A\u77E5\u7684 provider\uFF1A${s}${t.reset}
|
|
233
|
+
${t.gray}\u53EF\u7528\uFF1A${te.map(f=>f.id).join(", ")}${t.reset}
|
|
234
|
+
`),process.exitCode=1;return}let o=n[1]??await Vs(i.id,i.models,e);if(!o){process.stdout.write(`${t.gray}\u5DF2\u53D6\u6D88\u3002${t.reset}
|
|
218
235
|
`);return}let a=n[2],l;if(a!==void 0){let f=/^\d+$/.test(a.trim())?Number.parseInt(a.trim(),10):Number.NaN;if(Number.isNaN(f)||f<0){process.stdout.write(`${t.red}\u6743\u91CD\u5FC5\u987B\u662F \u2265 0 \u7684\u6574\u6570\uFF1A${a}${t.reset}
|
|
219
|
-
`),process.exitCode=1;return}l=f}let c=await
|
|
236
|
+
`),process.exitCode=1;return}l=f}let c=await Qs(i.id,i.requiresBaseUrl===!0,e),u=await ti(i.id,i.envKey,e),d=await ei(o,n[3]);e.providers={...e.providers,[i.id]:{...e.providers[i.id]??{},model:o,...c?{baseUrl:c}:{},...u?{apiKey:u}:{}}},e.provider=i.id,e.model=o;let h=r.some(f=>f.id===ue(i.id,o)),p=Vt(e,{provider:i.id,model:o,weight:l,contextWindow:d,...c?{baseUrl:c}:{},...u?{apiKey:u}:{}});P(e),process.stdout.write(`
|
|
220
237
|
${t.green}\u2713 ${h?"\u5DF2\u66F4\u65B0":"\u5DF2\u65B0\u589E"}\u6A21\u578B${t.reset} ${t.bold}${p.id}${t.reset}
|
|
221
238
|
${t.gray}provider\uFF1A${t.reset}${i.label}
|
|
222
239
|
${t.gray}model \uFF1A${t.reset}${p.model}
|
|
223
240
|
${t.gray}\u6743\u91CD \uFF1A${t.reset}${p.weight}
|
|
224
|
-
${t.gray}\u4E0A\u4E0B\u6587 \uFF1A${t.reset}${
|
|
241
|
+
${t.gray}\u4E0A\u4E0B\u6587 \uFF1A${t.reset}${ee(p.contextWindow??32e3)} token
|
|
225
242
|
`+(c?` ${t.gray}baseUrl \uFF1A${t.reset}${c}
|
|
226
243
|
`:"")+` ${t.gray}\u914D\u7F6E\u6587\u4EF6\uFF1A${t.reset}${_()}
|
|
227
|
-
`),Dt(e)}async function pn(n){let e=
|
|
244
|
+
`),Dt(e)}async function pn(n){let e=D(),r=M(e);if(r.length===0){process.stdout.write(`${t.yellow}\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\u3002${t.reset}
|
|
228
245
|
`);return}let s=n[0]||await Bt(r,"\u9009\u62E9\u8981\u5220\u9664\u7684\u6A21\u578B\uFF1A");if(!s){process.stdout.write(`${t.gray}\u5DF2\u53D6\u6D88\u3002${t.reset}
|
|
229
246
|
`);return}let i=Kt(e,s),o=i?er(e,i):null;if(!o){process.stdout.write(`${t.red}\u672A\u627E\u5230\u6A21\u578B\uFF1A${s}${t.reset}
|
|
230
247
|
${t.gray}\u63D0\u793A\uFF1A\u53EF\u4F7F\u7528 ${t.reset}xzh model list${t.gray} \u67E5\u770B id \u4E0E\u5E8F\u53F7\u3002${t.reset}
|
|
231
248
|
`),process.exitCode=1;return}Ut(e),P(e),process.stdout.write(`
|
|
232
249
|
${t.green}\u2713 \u5DF2\u5220\u9664\u6A21\u578B${t.reset} ${o.id}
|
|
233
|
-
`),Dt(e)}async function fn(n){let e=
|
|
250
|
+
`),Dt(e)}async function fn(n){let e=D(),r=M(e);if(r.length===0){process.stdout.write(`${t.yellow}\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\u3002${t.reset}
|
|
234
251
|
`);return}let s=n[0]||await Bt(r,"\u9009\u62E9\u8981\u8C03\u6574\u6743\u91CD\u7684\u6A21\u578B\uFF1A");if(!s){process.stdout.write(`${t.gray}\u5DF2\u53D6\u6D88\u3002${t.reset}
|
|
235
252
|
`);return}let i=Kt(e,s),o=i?r.find(d=>d.id===i):void 0;if(!o){process.stdout.write(`${t.red}\u672A\u627E\u5230\u6A21\u578B\uFF1A${s}${t.reset}
|
|
236
253
|
${t.gray}\u63D0\u793A\uFF1A\u53EF\u4F7F\u7528 ${t.reset}xzh model list${t.gray} \u67E5\u770B id \u4E0E\u5E8F\u53F7\u3002${t.reset}
|
|
237
|
-
`),process.exitCode=1;return}let a=n[1]??await
|
|
254
|
+
`),process.exitCode=1;return}let a=n[1]??await fe(`\u8BF7\u8F93\u5165 ${o.id} \u7684\u65B0\u6743\u91CD\uFF080 \u8868\u793A\u6682\u4E0D\u4F7F\u7528\uFF09`,String(o.weight)),l=a.trim(),c=/^\d+$/.test(l)?Number(l):Number.NaN;if(Number.isNaN(c)){process.stdout.write(`${t.red}\u6743\u91CD\u5FC5\u987B\u662F \u2265 0 \u7684\u6574\u6570\uFF1A${a}${t.reset}
|
|
238
255
|
`),process.exitCode=1;return}let u=tr(e,o.id,c);if(!u){process.stdout.write(`${t.red}\u8BBE\u7F6E\u5931\u8D25\uFF1A${o.id}${t.reset}
|
|
239
256
|
`),process.exitCode=1;return}Ut(e),P(e),process.stdout.write(`
|
|
240
257
|
${t.green}\u2713 \u5DF2\u66F4\u65B0\u6743\u91CD${t.reset} ${u.id} \u2192 ${u.weight}
|
|
241
|
-
`),Dt(e)}async function mn(n){let e=
|
|
258
|
+
`),Dt(e)}async function mn(n){let e=D(),r=M(e);if(r.length===0){process.stdout.write(`${t.yellow}\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\u3002${t.reset}
|
|
242
259
|
`);return}let s=n[0]||await Bt(r,"\u9009\u62E9\u8981\u8BBE\u7F6E\u4E0A\u4E0B\u6587\u7A97\u53E3\u7684\u6A21\u578B\uFF1A");if(!s){process.stdout.write(`${t.gray}\u5DF2\u53D6\u6D88\u3002${t.reset}
|
|
243
260
|
`);return}let i=Kt(e,s),o=i?r.find(d=>d.id===i):void 0;if(!o){process.stdout.write(`${t.red}\u672A\u627E\u5230\u6A21\u578B\uFF1A${s}${t.reset}
|
|
244
261
|
${t.gray}\u63D0\u793A\uFF1A\u53EF\u4F7F\u7528 ${t.reset}xzh model list${t.gray} \u67E5\u770B id \u4E0E\u5E8F\u53F7\u3002${t.reset}
|
|
245
|
-
`),process.exitCode=1;return}let a=o.contextWindow??
|
|
246
|
-
`),process.exitCode=1;return}let u=
|
|
247
|
-
${t.green}\u2713 \u5DF2\u66F4\u65B0\u4E0A\u4E0B\u6587\u7A97\u53E3${t.reset} ${o.id} \u2192 ${
|
|
248
|
-
`)}async function gn(){let n=
|
|
249
|
-
`);return}if(!await
|
|
250
|
-
`);return}
|
|
251
|
-
`)}function
|
|
252
|
-
${t.bold}\u6240\u6709\u53EF\u7528\u6A21\u578B${t.reset}${t.gray}\uFF08${
|
|
253
|
-
`);for(let o of
|
|
262
|
+
`),process.exitCode=1;return}let a=o.contextWindow??he(o.model),l=n[1]??await fe(`\u8BF7\u8F93\u5165 ${o.id} \u7684\u4E0A\u4E0B\u6587\u7A97\u53E3\uFF08token\uFF0C\u5982 128000\uFF09`,String(a)),c=Nt(l);if(c===void 0){process.stdout.write(`${t.red}\u65E0\u6CD5\u8BC6\u522B\u7684\u7A97\u53E3\u5927\u5C0F\uFF1A${l}${t.reset}
|
|
263
|
+
`),process.exitCode=1;return}let u=ie(e).find(d=>d.id===o.id);u&&(u.contextWindow=c),P(e),process.stdout.write(`
|
|
264
|
+
${t.green}\u2713 \u5DF2\u66F4\u65B0\u4E0A\u4E0B\u6587\u7A97\u53E3${t.reset} ${o.id} \u2192 ${ee(c)} token
|
|
265
|
+
`)}async function gn(){let n=D(),e=M(n);if(e.length===0){process.stdout.write(`${t.yellow}\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\u3002${t.reset}
|
|
266
|
+
`);return}if(!await ot(`\u5C06\u628A ${e.length} \u4E2A\u6A21\u578B\u7684\u6743\u91CD\u5168\u90E8\u91CD\u7F6E\u4E3A ${T}\uFF0C\u7EE7\u7EED\uFF1F`)){process.stdout.write(`${t.gray}\u5DF2\u53D6\u6D88\u3002${t.reset}
|
|
267
|
+
`);return}Pe(n),Ut(n),P(n),process.stdout.write(`${t.green}\u2713 \u5DF2\u628A ${e.length} \u4E2A\u6A21\u578B\u7684\u6743\u91CD\u91CD\u7F6E\u4E3A ${T}\u3002${t.reset}
|
|
268
|
+
`)}function Gs(){let n=D();Ot(n)}function Xs(){let n=D(),e=new Set(M(n).map(o=>o.id)),r=te.reduce((o,a)=>o+a.models.length,0);process.stdout.write(`
|
|
269
|
+
${t.bold}\u6240\u6709\u53EF\u7528\u6A21\u578B${t.reset}${t.gray}\uFF08${te.length} \u4E2A\u670D\u52A1\u5546\uFF0C\u5171 ${r} \u4E2A\u5185\u7F6E\u6A21\u578B\uFF09${t.reset}
|
|
270
|
+
`);for(let o of te){let a=n.providers[o.id]!==void 0?` ${t.gray}\xB7 \u5DF2\u586B\u5199 Key${t.reset}`:"";if(process.stdout.write(`
|
|
254
271
|
${t.bold}${o.label}${t.reset} ${t.gray}(${o.id})${t.reset}${a}
|
|
255
272
|
`),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}
|
|
256
|
-
`);continue}for(let l of o.models){let c=
|
|
257
|
-
`)}}let s=new Set(
|
|
273
|
+
`);continue}for(let l of o.models){let c=ue(o.id,l),u=e.has(c),d=u?`${t.brightGreen}\u276F${t.reset}`:" ",h=[];l===o.defaultModel&&h.push("\u9ED8\u8BA4"),u&&h.push("\u5DF2\u914D\u7F6E");let p=h.length>0?` ${t.gray}\u2190 ${h.join(" \xB7 ")}${t.reset}`:"";process.stdout.write(` ${d} ${l}${p}
|
|
274
|
+
`)}}let s=new Set(te.flatMap(o=>o.models.map(a=>ue(o.id,a)))),i=M(n).filter(o=>!s.has(o.id));if(i.length>0){process.stdout.write(`
|
|
258
275
|
${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}
|
|
259
276
|
`);for(let o of i)process.stdout.write(` ${t.brightGreen}\u276F${t.reset} ${o.id} ${t.gray}\u2190 \u6743\u91CD ${o.weight}${t.reset}
|
|
260
277
|
`)}process.stdout.write(`
|
|
261
278
|
${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}
|
|
262
279
|
${t.gray}\u67E5\u770B\u5DF2\u914D\u7F6E\u7684\u6A21\u578B\u4E0E\u6743\u91CD\uFF1A${t.reset}xzh model list
|
|
263
|
-
`)}async function
|
|
280
|
+
`)}async function Zs(){for(;;){let n=D();switch(Ot(n),await Re("\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\u8C03\u7528\u6743\u91CD",value:"weight",hint:"weight"},{label:"\u8C03\u6574\u4E0A\u4E0B\u6587\u7A97\u53E3",value:"context",hint:"context"},{label:`\u6062\u590D\u5168\u90E8\u6743\u91CD\u4E3A ${T}`,value:"reset",hint:"reset"},{label:"\u9000\u51FA",value:"exit"}],0)){case"add":await Lt([]);break;case"list":Ot(n);break;case"remove":await pn([]);break;case"weight":await fn([]);break;case"context":await mn([]);break;case"reset":await gn();break;default:process.stdout.write(`
|
|
264
281
|
${t.gray}\u5DF2\u9000\u51FA\u6A21\u578B\u7BA1\u7406\u3002${t.reset}
|
|
265
|
-
`);return}}}function Ot(n){let e=M(n),r=
|
|
282
|
+
`);return}}}function Ot(n){let e=M(n),r=se(n);if(process.stdout.write(`
|
|
266
283
|
${t.bold}\u7384\u732A\u6A21\u578B\u5217\u8868${t.reset} ${t.gray}(${_()})${t.reset}
|
|
267
284
|
`),e.length===0){process.stdout.write(` ${t.yellow}\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\u3002${t.reset}
|
|
268
285
|
${t.gray}\u8FD0\u884C ${t.reset}xzh model add <provider> <model>${t.gray} \u6DFB\u52A0\u3002${t.reset}
|
|
269
|
-
`);return}e.slice().sort((i,o)=>o.weight-i.weight).forEach((i,o)=>{let a=r!==null&&i.id===r.id,l=a?`${t.brightGreen}\u276F${t.reset}`:" ",c=i.weight<=0?t.red:i.weight<T?t.yellow:t.green,u=a?` ${t.gray}\u2190 \u5F53\u524D\u4F7F\u7528${t.reset}`:"",d=
|
|
286
|
+
`);return}e.slice().sort((i,o)=>o.weight-i.weight).forEach((i,o)=>{let a=r!==null&&i.id===r.id,l=a?`${t.brightGreen}\u276F${t.reset}`:" ",c=i.weight<=0?t.red:i.weight<T?t.yellow:t.green,u=a?` ${t.gray}\u2190 \u5F53\u524D\u4F7F\u7528${t.reset}`:"",d=ee(i.contextWindow??he(i.model));process.stdout.write(` ${l} ${o+1}. ${i.id.padEnd(34)} ${t.gray}\u6743\u91CD${t.reset} ${c}${String(i.weight).padStart(3)}${t.reset} ${t.gray}ctx ${d.padStart(5)}${t.reset}${u}
|
|
270
287
|
`)}),process.stdout.write(`${t.gray} \u6743\u91CD\u8D8A\u9AD8\u8D8A\u4F18\u5148\uFF1B\u8C03\u7528\u5931\u8D25 -1\uFF0C\u5168\u90E8\u4E3A 0 \u65F6\u81EA\u52A8\u91CD\u7F6E\u4E3A ${T}\u3002${t.reset}
|
|
271
|
-
`)}function Dt(n){let e=
|
|
288
|
+
`)}function Dt(n){let e=se(n);e?process.stdout.write(`${t.gray}\u4E0B\u6B21\u542F\u52A8\u5C06\u4F7F\u7528\u6743\u91CD\u6700\u9AD8\u7684\u6A21\u578B\uFF1A${t.reset}${t.bold}${e.id}${t.reset} ${t.gray}(\u6743\u91CD ${e.weight})${t.reset}
|
|
272
289
|
`):(n.models??[]).length===0?process.stdout.write(`${t.yellow}\u26A0 \u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\uFF0C\u8FD0\u884C ${t.reset}xzh model add <provider> <model>${t.yellow} \u6DFB\u52A0\u3002${t.reset}
|
|
273
290
|
`):process.stdout.write(`${t.yellow}\u26A0 \u6240\u6709\u6A21\u578B\u6743\u91CD\u5747\u4E3A 0\uFF08\u5DF2\u505C\u7528\uFF09\uFF0C\u8FD0\u884C ${t.reset}xzh model weight <id> <\u6743\u91CD>${t.yellow} \u542F\u7528\u5176\u4E2D\u4E00\u4E2A\u3002${t.reset}
|
|
274
291
|
`),process.stdout.write(`
|
|
275
292
|
\u8FD0\u884C ${t.brightGreen}xzh${t.reset} \u5F00\u59CB\u4F7F\u7528\u3002
|
|
276
|
-
`)}function
|
|
293
|
+
`)}function Ys(){process.stdout.write(`
|
|
277
294
|
${t.bold}xzh model \u2014\u2014 \u591A\u6A21\u578B\u7BA1\u7406${t.reset}
|
|
278
295
|
${t.green}xzh model${t.reset} \u4EA4\u4E92\u5F0F\u83DC\u5355
|
|
279
296
|
${t.green}xzh model list${t.reset} \u5217\u51FA\u5DF2\u914D\u7F6E\u7684\u6A21\u578B\u4E0E\u6743\u91CD
|
|
@@ -288,21 +305,21 @@ ${t.bold}\u6743\u91CD\u673A\u5236${t.reset}
|
|
|
288
305
|
\u542F\u52A8\u65F6\u4F18\u5148\u52A0\u8F7D\u6743\u91CD\u6700\u9AD8\u7684\u6A21\u578B\uFF1B\u8C03\u7528\u5931\u8D25\u65F6\u8BE5\u6A21\u578B\u6743\u91CD -1\uFF0C\u5E76\u81EA\u52A8\u5207\u6362\u5230\u4E0B\u4E00\u4E2A\u53EF\u7528\u6A21\u578B\uFF1B
|
|
289
306
|
\u5F53\u6240\u6709\u6A21\u578B\u6743\u91CD\u90FD\u4E3A 0 \u65F6\uFF0C\u4F1A\u5728\u7EC8\u7AEF\u8B66\u544A\u5E76\u628A\u5168\u90E8\u6743\u91CD\u91CD\u7F6E\u4E3A ${T}\u3002
|
|
290
307
|
|
|
291
|
-
${t.gray}\u53EF\u7528 provider\uFF1A${
|
|
292
|
-
`)}function Ut(n){let e=n.models??[],r=e.length>0?e.slice().sort((s,i)=>i.weight-s.weight||s.id.localeCompare(i.id))[0]:null;n.provider=r?r.provider:"",n.model=r?r.model:""}async function
|
|
293
|
-
`),r):o}process.stdout.write(`${t.gray} \u4E0A\u4E0B\u6587\u7A97\u53E3\uFF1A\u6309\u6A21\u578B\u540D\u63A8\u65AD\u4E3A ${
|
|
294
|
-
`);let s=await
|
|
295
|
-
`),r):i}async function
|
|
296
|
-
`),await
|
|
308
|
+
${t.gray}\u53EF\u7528 provider\uFF1A${te.map(n=>n.id).join(", ")}${t.reset}
|
|
309
|
+
`)}function Ut(n){let e=n.models??[],r=e.length>0?e.slice().sort((s,i)=>i.weight-s.weight||s.id.localeCompare(i.id))[0]:null;n.provider=r?r.provider:"",n.model=r?r.model:""}async function Js(){return Re("\u9009\u62E9 AI \u670D\u52A1\u5546\uFF1A",[...te.map(n=>({label:n.label,value:n.id,hint:n.id})),{label:"\u8FD4\u56DE",value:""}],0)}async function Vs(n,e,r){let s=r.providers[n]?.model;if(e.length>0){let o=[...e.map(c=>({label:c,value:c})),{label:"\u624B\u52A8\u8F93\u5165\u6A21\u578B\u540D",value:"__custom__"},{label:"\u8FD4\u56DE",value:""}],a=s?Math.max(0,e.indexOf(s)):0,l=await Re(`\u9009\u62E9\u6A21\u578B\uFF08${n}\uFF09\uFF1A`,o,a);if(l!=="__custom__")return l}return await fe("\u8BF7\u8F93\u5165\u6A21\u578B\u540D\u79F0",s)}async function Qs(n,e,r){let s=r.providers[n]?.baseUrl;return e?await fe("\u8BF7\u8F93\u5165 API \u7AEF\u70B9 baseUrl",s):s??""}function Nt(n){let e=n.trim().toLowerCase().replace(/[_,\s]/g,"");if(!e)return;let r=/^(\d+(?:\.\d+)?)(k|m|万)?$/.exec(e);if(!r)return;let s=Number(r[1]);if(!Number.isFinite(s)||s<=0)return;let i=r[2],a=Math.floor(s*(i==="k"?1e3:i==="m"?1e6:i==="\u4E07"?1e4:1));return a>0?a:void 0}async function ei(n,e){let r=he(n);if(e!==void 0&&e.trim()!==""){let o=Nt(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 ${ee(r)}\u3002${t.reset}
|
|
310
|
+
`),r):o}process.stdout.write(`${t.gray} \u4E0A\u4E0B\u6587\u7A97\u53E3\uFF1A\u6309\u6A21\u578B\u540D\u63A8\u65AD\u4E3A ${ee(r)} token\u3002${t.reset}
|
|
311
|
+
`);let s=await fe("\u8BF7\u8F93\u5165\u4E0A\u4E0B\u6587\u7A97\u53E3\u5927\u5C0F\uFF08token\uFF0C\u5982 128000\uFF1B\u56DE\u8F66\u4F7F\u7528\u63A8\u65AD\u503C\uFF09",String(r)),i=Nt(s);return i===void 0?(process.stdout.write(`${t.yellow} \u65E0\u6CD5\u8BC6\u522B\u300C${s}\u300D\uFF0C\u5DF2\u4F7F\u7528\u63A8\u65AD\u503C ${ee(r)}\u3002${t.reset}
|
|
312
|
+
`),r):i}async function ti(n,e,r){let s=re(n),i=r.providers[n]?.apiKey;return s?.requiresApiKey?(Ke(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}
|
|
313
|
+
`),await fe("\u8BF7\u8F93\u5165 API Key",i??"",{mask:!0})):i??""}function Kt(n,e){let r=M(n),s=r.find(o=>o.id===e);if(s)return s.id;let i=r.find(o=>o.model===e);if(i)return i.id;if(/^\d+$/.test(e.trim())){let o=r.slice().sort((l,c)=>c.weight-l.weight),a=Number.parseInt(e,10);if(a>=1&&a<=o.length)return o[a-1].id}return null}async function Bt(n,e){let r=n.slice().sort((i,o)=>o.weight-i.weight);return await Re(e,[...r.map(i=>({label:`${i.id} \u6743\u91CD ${i.weight} ctx ${ee(i.contextWindow??he(i.model))}`,value:i.id})),{label:"\u8FD4\u56DE",value:""}],0)}async function $n(){let n=ke();process.stdout.write(`
|
|
297
314
|
${t.bold}\u7384\u732A\u6280\u80FD\u4F9D\u8D56\u68C0\u67E5${t.reset} ${t.gray}(\u5E73\u53F0\uFF1A${n})${t.reset}
|
|
298
315
|
|
|
299
|
-
`);let e=[],r=[],s=[],i=0;for(let o of Fr())for(let a of
|
|
316
|
+
`);let e=[],r=[],s=[],i=0;for(let o of Fr())for(let a of ye(o)){if(i++,await Ge(a)){process.stdout.write(`${t.green}\u2713${t.reset} ${a.name} ${t.gray}\u5DF2\u5B89\u88C5${t.reset}
|
|
300
317
|
`);continue}let l=a.install[n];if(!l){process.stdout.write(`${t.yellow}\u26A0${t.reset} ${a.name} ${t.gray}\u5F53\u524D\u5E73\u53F0\u65E0\u81EA\u52A8\u5B89\u88C5\u547D\u4EE4${t.reset}
|
|
301
318
|
`),s.push(a.name);continue}if(process.stdout.write(`
|
|
302
319
|
${t.yellow}\u25CF${t.reset} ${t.bold}${a.name}${t.reset} ${t.gray}\u672A\u5B89\u88C5${t.reset}
|
|
303
320
|
${t.gray}\u6240\u5C5E\u6280\u80FD\uFF1A${o}${t.reset}
|
|
304
321
|
${t.gray}\u5B89\u88C5\u547D\u4EE4\uFF1A${t.reset}${l}
|
|
305
|
-
`),!await
|
|
322
|
+
`),!await ot(" \u662F\u5426\u73B0\u5728\u5B89\u88C5\uFF1F",!0)){s.push(a.name);continue}(await Et(a,n,void 0,d=>process.stdout.write(`${t.gray} ${d}${t.reset}
|
|
306
323
|
`))).ok?(process.stdout.write(`${t.green} \u2713 ${a.name} \u5B89\u88C5\u5B8C\u6210${t.reset}
|
|
307
324
|
`),e.push(a.name)):(process.stdout.write(`${t.red} \u2717 ${a.name} \u5B89\u88C5\u5931\u8D25${t.reset}
|
|
308
325
|
`),r.push(a.name))}process.stdout.write(`
|
|
@@ -313,36 +330,36 @@ ${t.bold}\u7ED3\u679C${t.reset}
|
|
|
313
330
|
`)),i===0?process.stdout.write(` ${t.gray}\u6CA1\u6709\u58F0\u660E\u5916\u90E8\u4F9D\u8D56\u7684\u5185\u7F6E\u6280\u80FD\u3002${t.reset}
|
|
314
331
|
`):e.length===0&&s.length===0&&r.length===0&&process.stdout.write(` ${t.green}\u6240\u6709\u6280\u80FD\u4F9D\u8D56\u5747\u5DF2\u5C31\u7EEA\u3002${t.reset}
|
|
315
332
|
`),process.stdout.write(`
|
|
316
|
-
`)}process.stdout.on("error",n=>{n.code==="EPIPE"&&process.exit(0)});process.stderr.on("error",()=>{});for(let n of["SIGTERM","SIGHUP"])process.on(n,()=>{It(),
|
|
333
|
+
`)}process.stdout.on("error",n=>{n.code==="EPIPE"&&process.exit(0)});process.stderr.on("error",()=>{});for(let n of["SIGTERM","SIGHUP"])process.on(n,()=>{It(),rt(),process.exit(0)});process.on("uncaughtException",n=>{At("\u672A\u6355\u83B7\u5F02\u5E38",n),rt(),process.stderr.write(`
|
|
317
334
|
\u672A\u6355\u83B7\u5F02\u5E38\uFF1A${n?.stack??String(n)}
|
|
318
|
-
`),process.stderr.write(`\u8BE6\u60C5\u5DF2\u5199\u5165 ${
|
|
319
|
-
`),process.exit(1)});process.on("unhandledRejection",n=>{At("\u672A\u5904\u7406\u7684 Promise \u62D2\u7EDD",n),
|
|
335
|
+
`),process.stderr.write(`\u8BE6\u60C5\u5DF2\u5199\u5165 ${st()}
|
|
336
|
+
`),process.exit(1)});process.on("unhandledRejection",n=>{At("\u672A\u5904\u7406\u7684 Promise \u62D2\u7EDD",n),rt(),process.stderr.write(`
|
|
320
337
|
\u672A\u5904\u7406\u7684 Promise \u62D2\u7EDD\uFF1A${String(n)}
|
|
321
|
-
`),process.stderr.write(`\u8BE6\u60C5\u5DF2\u5199\u5165 ${
|
|
322
|
-
`),process.exit(1)});async function
|
|
323
|
-
`);let e=process.argv.slice(2),r;e.includes("--intent")?r=!0:e.includes("--no-intent")&&(r=!1);let s=e.filter(o=>o!=="--intent"&&o!=="--no-intent"),i=s[0];switch(i){case void 0:await yn(void 0,r);return;case"model":await hn(s.slice(1));return;case"config":await un(s.slice(1));return;case"setup":await $n();return;case"help":case"-h":case"--help":xn();return;case"version":case"-v":case"--version":process.stdout.write(`\u7384\u732A xzh v${
|
|
324
|
-
`);return;default:{if(i.startsWith("-")){xn();return}let o=
|
|
338
|
+
`),process.stderr.write(`\u8BE6\u60C5\u5DF2\u5199\u5165 ${st()}
|
|
339
|
+
`),process.exit(1)});async function ri(){let n=zt();n.migrated&&process.stdout.write(`${t.gray}\u5DF2\u5C06\u5168\u5C40\u76EE\u5F55\u8FC1\u79FB\u81F3 ${R()}${n.from?`\uFF08\u539F ${n.from}\uFF09`:""}${t.reset}
|
|
340
|
+
`);let e=process.argv.slice(2),r;e.includes("--intent")?r=!0:e.includes("--no-intent")&&(r=!1);let s=e.filter(o=>o!=="--intent"&&o!=="--no-intent"),i=s[0];switch(i){case void 0:await yn(void 0,r);return;case"model":await hn(s.slice(1));return;case"config":await un(s.slice(1));return;case"setup":await $n();return;case"help":case"-h":case"--help":xn();return;case"version":case"-v":case"--version":process.stdout.write(`\u7384\u732A xzh v${xe}
|
|
341
|
+
`);return;default:{if(i.startsWith("-")){xn();return}let o=si(i);if(o){await yn(o,r);return}if(ni(i)){process.stdout.write(`${t.red}\u76EE\u5F55\u4E0D\u5B58\u5728\u6216\u4E0D\u662F\u76EE\u5F55\uFF1A${i}${t.reset}
|
|
325
342
|
`),process.exitCode=1;return}process.stdout.write(`${t.red}\u672A\u77E5\u547D\u4EE4\uFF1A${i}${t.reset}
|
|
326
343
|
${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}
|
|
327
|
-
`),process.exitCode=1}}}function
|
|
344
|
+
`),process.exitCode=1}}}function ni(n){return n.startsWith("/")||n.startsWith("~")||n.startsWith("./")||n.startsWith("../")||n==="."||n===".."}function si(n){let e=q(n),r=at.isAbsolute(e)?e:at.resolve(process.cwd(),e);try{if(ve.existsSync(r)&&ve.statSync(r).isDirectory())return ve.realpathSync(r)}catch{}return null}async function yn(n,e){if(!process.stdin.isTTY||!process.stdout.isTTY){process.stdout.write(`${t.red}\u7384\u732A\u9700\u8981\u4EA4\u4E92\u5F0F\u7EC8\u7AEF\uFF08TTY\uFF09\u3002${t.reset}
|
|
328
345
|
${t.gray}\u8BF7\u5728\u771F\u5B9E\u7EC8\u7AEF\u4E2D\u8FD0\u884C xzh\u3002${t.reset}
|
|
329
|
-
`),process.exitCode=1;return}let r=
|
|
330
|
-
`));let i=
|
|
346
|
+
`),process.exitCode=1;return}let r=D(),s=M(r);s.length>0&&s.every(d=>d.weight<=0&&d.decayed===!0)&&(Pe(r),P(r),process.stdout.write(`${t.yellow}\u26A0 \u6240\u6709\u6A21\u578B\u6743\u91CD\u5747\u4E3A 0\uFF0C\u5DF2\u91CD\u7F6E\u4E3A ${T}\u3002${t.reset}
|
|
347
|
+
`));let i=se(r);if(!i){process.stdout.write(s.length===0?`${t.yellow}\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u6A21\u578B\u3002${t.reset}
|
|
331
348
|
${t.gray}\u8BF7\u5148\u8FD0\u884C ${t.reset}xzh model add <provider> <model>${t.gray} \u6DFB\u52A0\u6A21\u578B\u3002${t.reset}
|
|
332
349
|
`:`${t.red}\u6CA1\u6709\u53EF\u7528\u7684\u6A21\u578B\uFF08\u5168\u90E8\u6743\u91CD\u4E3A 0\uFF09\u3002${t.reset}
|
|
333
350
|
${t.gray}\u8FD0\u884C ${t.reset}xzh model${t.gray} \u67E5\u770B\u4E0E\u7BA1\u7406\u6A21\u578B\u3002${t.reset}
|
|
334
351
|
`),process.exitCode=1;return}let o=yt(r,i);if(o.length>0){process.stdout.write(`${t.yellow}\u26A0 \u5F53\u524D\u6A21\u578B\u4E0D\u53EF\u7528\uFF1A${t.reset}
|
|
335
352
|
`);for(let d of o)process.stdout.write(` ${t.gray}\xB7${t.reset} ${d}
|
|
336
|
-
`);
|
|
353
|
+
`);Ee()?process.stdout.write(`
|
|
337
354
|
${t.gray}\u914D\u7F6E\u6587\u4EF6\uFF1A${_()}${t.reset}
|
|
338
355
|
`):process.stdout.write(`
|
|
339
356
|
${t.gray}\u63D0\u793A\uFF1A\u8FD0\u884C ${t.reset}xzh model${t.gray} \u5B8C\u6210\u521D\u59CB\u5316\u914D\u7F6E\u3002${t.reset}
|
|
340
357
|
`),process.exitCode=1;return}let a=pr(r).filter(d=>!o.includes(d));if(a.length>0){process.stdout.write(`${t.yellow}\u26A0 ${a.length} \u4E2A\u5907\u7528\u6A21\u578B\u6682\u4E0D\u53EF\u7528\uFF08\u4E0D\u5F71\u54CD\u672C\u6B21\u542F\u52A8\uFF09\uFF1A${t.reset}
|
|
341
358
|
`);for(let d of a)process.stdout.write(` ${t.gray}\xB7${t.reset} ${d}
|
|
342
|
-
`)}let l=
|
|
343
|
-
`).slice(-10))r.push(`${t.gray} ${s}${t.reset}`)}else r.push(`${t.gray} \u672A\u7559\u4E0B\u65E5\u5FD7 \u2014\u2014 \u591A\u4E3A\u8FDB\u7A0B\u88AB\u5F3A\u5236\u7EC8\u6B62\uFF08\u4F8B\u5982\u5185\u5B58\u4E0D\u8DB3\u88AB\u7CFB\u7EDF\u6740\u6389\uFF09${t.reset}`);return r.push(`${t.gray} \u5B8C\u6574\u65E5\u5FD7\uFF1A${
|
|
359
|
+
`)}let l=re(i.provider),c=Be(r,i);await new tt({provider:c,config:r,cwd:n??process.cwd(),providerLabel:l?.label??i.provider,model:i.model,modelWeight:i.weight,activeModel:i,intentEnabled:e!==void 0?e:r.intent?.enabled===!0,autoApprove:r.autoApprove,startupNotice:ii()}).start(),It()}function ii(){let n=an(xe);if(!n)return;let e=n.startedAt?`\uFF08\u5F00\u59CB\u4E8E ${n.startedAt}\uFF09`:"",r=[`${t.yellow}\u26A0 \u4E0A\u6B21\u8FD0\u884C\u7591\u4F3C\u5F02\u5E38\u9000\u51FA${e}${t.reset}`];if(n.crashLog){r.push(`${t.gray} \u6700\u540E\u7684\u8BB0\u5F55\uFF1A${t.reset}`);for(let s of n.crashLog.trim().split(`
|
|
360
|
+
`).slice(-10))r.push(`${t.gray} ${s}${t.reset}`)}else r.push(`${t.gray} \u672A\u7559\u4E0B\u65E5\u5FD7 \u2014\u2014 \u591A\u4E3A\u8FDB\u7A0B\u88AB\u5F3A\u5236\u7EC8\u6B62\uFF08\u4F8B\u5982\u5185\u5B58\u4E0D\u8DB3\u88AB\u7CFB\u7EDF\u6740\u6389\uFF09${t.reset}`);return r.push(`${t.gray} \u5B8C\u6574\u65E5\u5FD7\uFF1A${st()}${t.reset}`,""),r.join(`
|
|
344
361
|
`)}function xn(){let n=`
|
|
345
|
-
${t.brightMagenta}${t.bold}\u7384\u732A XuanZhu${t.reset} ${t.gray}v${
|
|
362
|
+
${t.brightMagenta}${t.bold}\u7384\u732A XuanZhu${t.reset} ${t.gray}v${xe} \u2014\u2014 \u4E13\u4E3A\u7EC8\u7AEF\u6253\u9020\u7684 AI \u7F16\u7801 Agent${t.reset}
|
|
346
363
|
|
|
347
364
|
${t.bold}\u7528\u6CD5${t.reset}
|
|
348
365
|
${t.green}xzh${t.reset} \u5728\u5F53\u524D\u76EE\u5F55\u542F\u52A8\u4EA4\u4E92\u5F0F\u7EC8\u7AEF\u754C\u9762
|
|
@@ -385,6 +402,6 @@ ${t.bold}\u754C\u9762\u5185\u5FEB\u6377\u952E${t.reset}
|
|
|
385
402
|
Enter \u63D0\u4EA4 \xB7 Ctrl+J \u6362\u884C \xB7 \u2191/\u2193 \u5386\u53F2 \xB7 PgUp/PgDn \u6EDA\u52A8
|
|
386
403
|
Ctrl+C \u4E2D\u65AD\u4EFB\u52A1/\u9000\u51FA \xB7 Ctrl+L \u6E05\u5C4F \xB7 \u8F93\u5165 /help \u67E5\u770B\u5185\u7F6E\u547D\u4EE4
|
|
387
404
|
\u5207\u6362\u9879\u76EE\u76EE\u5F55\uFF1A\u5728\u754C\u9762\u4E2D\u8F93\u5165 ${t.green}/switch <\u76EE\u5F55>${t.reset}
|
|
388
|
-
`;process.stdout.write(n)}
|
|
389
|
-
${t.red}\u7384\u732A\u8FD0\u884C\u51FA\u9519\uFF1A${
|
|
405
|
+
`;process.stdout.write(n)}ri().catch(n=>{process.stdout.write(`
|
|
406
|
+
${t.red}\u7384\u732A\u8FD0\u884C\u51FA\u9519\uFF1A${Y(n)}${t.reset}
|
|
390
407
|
`),process.exit(1)});
|
package/docs/README.en.md
CHANGED
|
@@ -423,9 +423,24 @@ In the output area, **hold the left button and drag** across the lines you want;
|
|
|
423
423
|
| --- | --- |
|
|
424
424
|
| **Drag in the output area** | Selection implemented by XuanZhu itself (whole lines). Releasing copies; no key press needed and it does not require `/mouse` |
|
|
425
425
|
| Hold **Shift** and drag | Uses the **terminal's native** selection (most terminals let Shift bypass application-level capture); use this when you need character precision |
|
|
426
|
-
| `/copy [N\|A-B\|last\|all]` | Copy the
|
|
426
|
+
| `/copy [N\|A-B\|last\|all]` | Copy the **left conversation pane** on demand. Supports `/copy 100` (last 100 lines), `/copy 100-200` (line range), `/copy last` (the most recent conversation), `/copy all` (everything) |
|
|
427
|
+
| `/copy term [N\|A-B\|all]` | Copy the **right terminal pane's** output (last 30 lines by default) |
|
|
427
428
|
| `/mouse` | Hands the mouse **entirely back to the terminal** (switching to native selection and the right-click menu; scrolling the output area then uses `PgUp`/`PgDn`). The change is written back to the config |
|
|
428
429
|
|
|
430
|
+
> **Why a multi-line drag mixes the two panes** — the terminal's native selection is a
|
|
431
|
+
> **rectangular** selection: it only knows "from column X to column Y" and **cannot see
|
|
432
|
+
> the application's split panes**. Dragging from the left pane into the right (or back)
|
|
433
|
+
> therefore picks up text from both, because they share the same screen rows. This is a
|
|
434
|
+
> protocol-level limitation the application cannot intervene in.
|
|
435
|
+
>
|
|
436
|
+
> To copy **one pane** only, use the command forms (`/copy` for the left pane,
|
|
437
|
+
> `/copy term` for the right) — they take content per pane and can never mix. XuanZhu's
|
|
438
|
+
> own drag-selection (with `/mouse` enabled) is likewise confined to the left pane.
|
|
439
|
+
>
|
|
440
|
+
> Conversely, if you want the terminal's native selection and context menu: hold `Shift`
|
|
441
|
+
> while dragging to bypass capture temporarily, or use `/mouse` to turn capture off
|
|
442
|
+
> (scrolling the output area then uses `PgUp`/`PgDn`).
|
|
443
|
+
>
|
|
429
444
|
> **Why drag-selection is implemented in-house**: in the terminal protocol, `?1000h` is an **all-or-nothing switch** — once enabled, the terminal hands every mouse event to the program and native selection stops working; once disabled, the wheel is useless too (XuanZhu runs on the **alternate screen**, where the terminal has no scrollback history). Since the events are already in the program's hands, XuanZhu records the selection itself and writes it to the clipboard, so "scroll with the wheel" and "select and copy" coexist.
|
|
430
445
|
>
|
|
431
446
|
> Selection works by **whole lines**: long lines in the output area wrap, and the text contains ANSI colors and wide characters, so character-level mapping costs far more than it is worth — and in practice what you want to copy is a whole passage. What gets copied is the **original logical line** (not the wrapped rendering), so long lines are not cut off.
|