@yunkeai/yunke-cli 2.0.0 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/bundle.js +370 -29
  2. package/package.json +2 -2
package/dist/bundle.js CHANGED
@@ -1,37 +1,378 @@
1
1
  #!/usr/bin/env node
2
- import{createRequire as L3}from"node:module";var G3=Object.create;var{getPrototypeOf:M3,defineProperty:rm,getOwnPropertyNames:x3}=Object;var l3=Object.prototype.hasOwnProperty;function u3(n){return this[n]}var j3,v3,D3=(n,m,i)=>{var b=n!=null&&typeof n==="object";if(b){var $=m?j3??=new WeakMap:v3??=new WeakMap,o=$.get(n);if(o)return o}i=n!=null?G3(M3(n)):{};let _=m||!n||!n.__esModule?rm(i,"default",{value:n,enumerable:!0}):i;for(let J of x3(n))if(!l3.call(_,J))rm(_,J,{get:u3.bind(n,J),enumerable:!0});if(b)$.set(n,_);return _};var T=(n,m)=>()=>(m||n((m={exports:{}}).exports,m),m.exports);var N3=(n)=>n;function V3(n,m){this[n]=N3.bind(null,m)}var ai=(n,m)=>{for(var i in m)rm(n,i,{get:m[i],enumerable:!0,configurable:!0,set:V3.bind(m,i)})};var ri=(n,m)=>()=>(n&&(m=n(n=0)),m);var F=L3(import.meta.url);import{readFileSync as ww}from"node:fs";import{join as Wi,dirname as $w}from"node:path";import{fileURLToPath as ow}from"node:url";function _w(){try{return"2.0.0"}catch{}let n=[];try{let m=$w(ow(import.meta.url));n.push(Wi(m,"..","..","..","package.json"),Wi(m,"..","..","package.json"))}catch{}n.push(Wi(process.cwd(),"package.json"));for(let m of n)try{let i=ww(m,"utf-8"),b=JSON.parse(i);if(b.version)return b.version}catch{}return"unknown"}var E;var bn=ri(()=>{E=_w()});var C6=T((UY,B6)=>{var x0=1000,l0=x0*60,u0=l0*60,rn=u0*24,pw=rn*7,Fw=rn*365.25;B6.exports=function(n,m){m=m||{};var i=typeof n;if(i==="string"&&n.length>0)return hw(n);else if(i==="number"&&isFinite(n))return m.long?kw(n):Pw(n);throw Error("val is not a non-empty string or a valid number. val="+JSON.stringify(n))};function hw(n){if(n=String(n),n.length>100)return;var m=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(n);if(!m)return;var i=parseFloat(m[1]),b=(m[2]||"ms").toLowerCase();switch(b){case"years":case"year":case"yrs":case"yr":case"y":return i*Fw;case"weeks":case"week":case"w":return i*pw;case"days":case"day":case"d":return i*rn;case"hours":case"hour":case"hrs":case"hr":case"h":return i*u0;case"minutes":case"minute":case"mins":case"min":case"m":return i*l0;case"seconds":case"second":case"secs":case"sec":case"s":return i*x0;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return i;default:return}}function Pw(n){var m=Math.abs(n);if(m>=rn)return Math.round(n/rn)+"d";if(m>=u0)return Math.round(n/u0)+"h";if(m>=l0)return Math.round(n/l0)+"m";if(m>=x0)return Math.round(n/x0)+"s";return n+"ms"}function kw(n){var m=Math.abs(n);if(m>=rn)return vm(n,m,rn,"day");if(m>=u0)return vm(n,m,u0,"hour");if(m>=l0)return vm(n,m,l0,"minute");if(m>=x0)return vm(n,m,x0,"second");return n+" ms"}function vm(n,m,i,b){var $=m>=i*1.5;return Math.round(n/i)+" "+b+($?"s":"")}});var ui=T((SY,K6)=>{function Tw(n){i.debug=i,i.default=i,i.coerce=X,i.disable=_,i.enable=$,i.enabled=J,i.humanize=C6(),i.destroy=Y,Object.keys(n).forEach((H)=>{i[H]=n[H]}),i.names=[],i.skips=[],i.formatters={};function m(H){let q=0;for(let M=0;M<H.length;M++)q=(q<<5)-q+H.charCodeAt(M),q|=0;return i.colors[Math.abs(q)%i.colors.length]}i.selectColor=m;function i(H){let q,M=null,j,h;function B(...N){if(!B.enabled)return;let f=B,P=Number(new Date),c=P-(q||P);if(f.diff=c,f.prev=q,f.curr=P,q=P,N[0]=i.coerce(N[0]),typeof N[0]!=="string")N.unshift("%O");let Nn=0;N[0]=N[0].replace(/%([a-zA-Z%])/g,(K0,kn)=>{if(K0==="%%")return"%";Nn++;let A0=i.formatters[kn];if(typeof A0==="function"){let O3=N[Nn];K0=A0.call(f,O3),N.splice(Nn,1),Nn--}return K0}),i.formatArgs.call(f,N),(f.log||i.log).apply(f,N)}if(B.namespace=H,B.useColors=i.useColors(),B.color=i.selectColor(H),B.extend=b,B.destroy=i.destroy,Object.defineProperty(B,"enabled",{enumerable:!0,configurable:!1,get:()=>{if(M!==null)return M;if(j!==i.namespaces)j=i.namespaces,h=i.enabled(H);return h},set:(N)=>{M=N}}),typeof i.init==="function")i.init(B);return B}function b(H,q){let M=i(this.namespace+(typeof q>"u"?":":q)+H);return M.log=this.log,M}function $(H){i.save(H),i.namespaces=H,i.names=[],i.skips=[];let q=(typeof H==="string"?H:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let M of q)if(M[0]==="-")i.skips.push(M.slice(1));else i.names.push(M)}function o(H,q){let M=0,j=0,h=-1,B=0;while(M<H.length)if(j<q.length&&(q[j]===H[M]||q[j]==="*"))if(q[j]==="*")h=j,B=M,j++;else M++,j++;else if(h!==-1)j=h+1,B++,M=B;else return!1;while(j<q.length&&q[j]==="*")j++;return j===q.length}function _(){let H=[...i.names,...i.skips.map((q)=>"-"+q)].join(",");return i.enable(""),H}function J(H){for(let q of i.skips)if(o(H,q))return!1;for(let q of i.names)if(o(H,q))return!0;return!1}function X(H){if(H instanceof Error)return H.stack||H.message;return H}function Y(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return i.enable(i.load()),i}K6.exports=Tw});var g6=T((A6,Dm)=>{A6.formatArgs=yw;A6.save=cw;A6.load=zw;A6.useColors=Iw;A6.storage=Zw();A6.destroy=(()=>{let n=!1;return()=>{if(!n)n=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}})();A6.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function Iw(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let n;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(n=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(n[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function yw(n){if(n[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+n[0]+(this.useColors?"%c ":" ")+"+"+Dm.exports.humanize(this.diff),!this.useColors)return;let m="color: "+this.color;n.splice(1,0,m,"color: inherit");let i=0,b=0;n[0].replace(/%[a-zA-Z%]/g,($)=>{if($==="%%")return;if(i++,$==="%c")b=i}),n.splice(b,0,m)}A6.log=console.debug||console.log||(()=>{});function cw(n){try{if(n)A6.storage.setItem("debug",n);else A6.storage.removeItem("debug")}catch(m){}}function zw(){let n;try{n=A6.storage.getItem("debug")||A6.storage.getItem("DEBUG")}catch(m){}if(!n&&typeof process<"u"&&"env"in process)n=process.env.DEBUG;return n}function Zw(){try{return localStorage}catch(n){}}Dm.exports=ui()(A6);var{formatters:tw}=Dm.exports;tw.j=function(n){try{return JSON.stringify(n)}catch(m){return"[UnexpectedJSONParseError]: "+m.message}}});var S6=T((E6,Vm)=>{var i9=F("tty"),Nm=F("util");E6.init=X9;E6.log=o9;E6.formatArgs=w9;E6.save=_9;E6.load=J9;E6.useColors=b9;E6.destroy=Nm.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");E6.colors=[6,2,3,4,5,1];try{let n=(()=>{throw new Error("Cannot require module "+"supports-color");})();if(n&&(n.stderr||n).level>=2)E6.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221]}catch(n){}E6.inspectOpts=Object.keys(process.env).filter((n)=>{return/^debug_/i.test(n)}).reduce((n,m)=>{let i=m.substring(6).toLowerCase().replace(/_([a-z])/g,($,o)=>{return o.toUpperCase()}),b=process.env[m];if(/^(yes|on|true|enabled)$/i.test(b))b=!0;else if(/^(no|off|false|disabled)$/i.test(b))b=!1;else if(b==="null")b=null;else b=Number(b);return n[i]=b,n},{});function b9(){return"colors"in E6.inspectOpts?Boolean(E6.inspectOpts.colors):i9.isatty(process.stderr.fd)}function w9(n){let{namespace:m,useColors:i}=this;if(i){let b=this.color,$="\x1B[3"+(b<8?b:"8;5;"+b),o=` ${$};1m${m} \x1B[0m`;n[0]=o+n[0].split(`
2
+ import{createRequire as Xw}from"node:module";var bw=Object.create;var{getPrototypeOf:ww,defineProperty:bo,getOwnPropertyNames:lw}=Object;var xw=Object.prototype.hasOwnProperty;function $w(n){return this[n]}var vw,Hw,_w=(n,i,o)=>{var b=n!=null&&typeof n==="object";if(b){var w=i?vw??=new WeakMap:Hw??=new WeakMap,l=w.get(n);if(l)return l}o=n!=null?bw(ww(n)):{};let x=i||!n||!n.__esModule?bo(o,"default",{value:n,enumerable:!0}):o;for(let $ of lw(n))if(!xw.call(x,$))bo(x,$,{get:$w.bind(n,$),enumerable:!0});if(b)w.set(n,x);return x};var P=(n,i)=>()=>(i||n((i={exports:{}}).exports,i),i.exports);var pw=(n)=>n;function Jw(n,i){this[n]=pw.bind(null,i)}var w1=(n,i)=>{for(var o in i)bo(n,o,{get:i[o],enumerable:!0,configurable:!0,set:Jw.bind(i,o)})};var l1=(n,i)=>()=>(n&&(i=n(n=0)),i);var c=Xw(import.meta.url);import{readFileSync as Il}from"node:fs";import{join as Mo,dirname as Zl}from"node:path";import{fileURLToPath as zl}from"node:url";function dl(){try{return"2.0.2"}catch{}let n=[];try{let i=Zl(zl(import.meta.url));n.push(Mo(i,"..","..","..","package.json"),Mo(i,"..","..","package.json"))}catch{}n.push(Mo(process.cwd(),"package.json"));for(let i of n)try{let o=Il(i,"utf-8"),b=JSON.parse(o);if(b.version)return b.version}catch{}return"unknown"}var R;var wn=l1(()=>{R=dl()});var cm=P((A_,Um)=>{var j0=1000,B0=j0*60,V0=B0*60,i0=V0*24,h3=i0*7,f3=i0*365.25;Um.exports=function(n,i){i=i||{};var o=typeof n;if(o==="string"&&n.length>0)return L3(n);else if(o==="number"&&isFinite(n))return i.long?D3(n):K3(n);throw Error("val is not a non-empty string or a valid number. val="+JSON.stringify(n))};function L3(n){if(n=String(n),n.length>100)return;var i=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(n);if(!i)return;var o=parseFloat(i[1]),b=(i[2]||"ms").toLowerCase();switch(b){case"years":case"year":case"yrs":case"yr":case"y":return o*f3;case"weeks":case"week":case"w":return o*h3;case"days":case"day":case"d":return o*i0;case"hours":case"hour":case"hrs":case"hr":case"h":return o*V0;case"minutes":case"minute":case"mins":case"min":case"m":return o*B0;case"seconds":case"second":case"secs":case"sec":case"s":return o*j0;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return o;default:return}}function K3(n){var i=Math.abs(n);if(i>=i0)return Math.round(n/i0)+"d";if(i>=V0)return Math.round(n/V0)+"h";if(i>=B0)return Math.round(n/B0)+"m";if(i>=j0)return Math.round(n/j0)+"s";return n+"ms"}function D3(n){var i=Math.abs(n);if(i>=i0)return Li(n,i,i0,"day");if(i>=V0)return Li(n,i,V0,"hour");if(i>=B0)return Li(n,i,B0,"minute");if(i>=j0)return Li(n,i,j0,"second");return n+" ms"}function Li(n,i,o,b){var w=i>=o*1.5;return Math.round(n/o)+" "+b+(w?"s":"")}});var fo=P((N_,km)=>{function A3(n){o.debug=o,o.default=o,o.coerce=v,o.disable=x,o.enable=w,o.enabled=$,o.humanize=cm(),o.destroy=H,Object.keys(n).forEach((_)=>{o[_]=n[_]}),o.names=[],o.skips=[],o.formatters={};function i(_){let X=0;for(let W=0;W<_.length;W++)X=(X<<5)-X+_.charCodeAt(W),X|=0;return o.colors[Math.abs(X)%o.colors.length]}o.selectColor=i;function o(_){let X,W=null,G,k;function L(...B){if(!L.enabled)return;let S=L,F=Number(new Date),I=F-(X||F);if(S.diff=I,S.prev=X,S.curr=F,X=F,B[0]=o.coerce(B[0]),typeof B[0]!=="string")B.unshift("%O");let hn=0;B[0]=B[0].replace(/%([a-zA-Z%])/g,(E0,tn)=>{if(E0==="%%")return"%";hn++;let S0=o.formatters[tn];if(typeof S0==="function"){let mw=B[hn];E0=S0.call(S,mw),B.splice(hn,1),hn--}return E0}),o.formatArgs.call(S,B),(S.log||o.log).apply(S,B)}if(L.namespace=_,L.useColors=o.useColors(),L.color=o.selectColor(_),L.extend=b,L.destroy=o.destroy,Object.defineProperty(L,"enabled",{enumerable:!0,configurable:!1,get:()=>{if(W!==null)return W;if(G!==o.namespaces)G=o.namespaces,k=o.enabled(_);return k},set:(B)=>{W=B}}),typeof o.init==="function")o.init(L);return L}function b(_,X){let W=o(this.namespace+(typeof X>"u"?":":X)+_);return W.log=this.log,W}function w(_){o.save(_),o.namespaces=_,o.names=[],o.skips=[];let X=(typeof _==="string"?_:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let W of X)if(W[0]==="-")o.skips.push(W.slice(1));else o.names.push(W)}function l(_,X){let W=0,G=0,k=-1,L=0;while(W<_.length)if(G<X.length&&(X[G]===_[W]||X[G]==="*"))if(X[G]==="*")k=G,L=W,G++;else W++,G++;else if(k!==-1)G=k+1,L++,W=L;else return!1;while(G<X.length&&X[G]==="*")G++;return G===X.length}function x(){let _=[...o.names,...o.skips.map((X)=>"-"+X)].join(",");return o.enable(""),_}function $(_){for(let X of o.skips)if(l(_,X))return!1;for(let X of o.names)if(l(_,X))return!0;return!1}function v(_){if(_ instanceof Error)return _.stack||_.message;return _}function H(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return o.enable(o.load()),o}km.exports=A3});var gm=P((Fm,Ki)=>{Fm.formatArgs=R3;Fm.save=E3;Fm.load=S3;Fm.useColors=N3;Fm.storage=U3();Fm.destroy=(()=>{let n=!1;return()=>{if(!n)n=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}})();Fm.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function N3(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let n;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(n=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(n[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function R3(n){if(n[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+n[0]+(this.useColors?"%c ":" ")+"+"+Ki.exports.humanize(this.diff),!this.useColors)return;let i="color: "+this.color;n.splice(1,0,i,"color: inherit");let o=0,b=0;n[0].replace(/%[a-zA-Z%]/g,(w)=>{if(w==="%%")return;if(o++,w==="%c")b=o}),n.splice(b,0,i)}Fm.log=console.debug||console.log||(()=>{});function E3(n){try{if(n)Fm.storage.setItem("debug",n);else Fm.storage.removeItem("debug")}catch(i){}}function S3(){let n;try{n=Fm.storage.getItem("debug")||Fm.storage.getItem("DEBUG")}catch(i){}if(!n&&typeof process<"u"&&"env"in process)n=process.env.DEBUG;return n}function U3(){try{return localStorage}catch(n){}}Ki.exports=fo()(Fm);var{formatters:c3}=Ki.exports;c3.j=function(n){try{return JSON.stringify(n)}catch(i){return"[UnexpectedJSONParseError]: "+i.message}}});var tm=P((ym,Ai)=>{var I3=c("tty"),Di=c("util");ym.init=s3;ym.log=a3;ym.formatArgs=z3;ym.save=r3;ym.load=e3;ym.useColors=Z3;ym.destroy=Di.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");ym.colors=[6,2,3,4,5,1];try{let n=(()=>{throw new Error("Cannot require module "+"supports-color");})();if(n&&(n.stderr||n).level>=2)ym.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221]}catch(n){}ym.inspectOpts=Object.keys(process.env).filter((n)=>{return/^debug_/i.test(n)}).reduce((n,i)=>{let o=i.substring(6).toLowerCase().replace(/_([a-z])/g,(w,l)=>{return l.toUpperCase()}),b=process.env[i];if(/^(yes|on|true|enabled)$/i.test(b))b=!0;else if(/^(no|off|false|disabled)$/i.test(b))b=!1;else if(b==="null")b=null;else b=Number(b);return n[o]=b,n},{});function Z3(){return"colors"in ym.inspectOpts?Boolean(ym.inspectOpts.colors):I3.isatty(process.stderr.fd)}function z3(n){let{namespace:i,useColors:o}=this;if(o){let b=this.color,w="\x1B[3"+(b<8?b:"8;5;"+b),l=` ${w};1m${i} \x1B[0m`;n[0]=l+n[0].split(`
3
3
  `).join(`
4
- `+o),n.push($+"m+"+Vm.exports.humanize(this.diff)+"\x1B[0m")}else n[0]=$9()+m+" "+n[0]}function $9(){if(E6.inspectOpts.hideDate)return"";return new Date().toISOString()+" "}function o9(...n){return process.stderr.write(Nm.formatWithOptions(E6.inspectOpts,...n)+`
5
- `)}function _9(n){if(n)process.env.DEBUG=n;else delete process.env.DEBUG}function J9(){return process.env.DEBUG}function X9(n){n.inspectOpts={};let m=Object.keys(E6.inspectOpts);for(let i=0;i<m.length;i++)n.inspectOpts[m[i]]=E6.inspectOpts[m[i]]}Vm.exports=ui()(E6);var{formatters:R6}=Vm.exports;R6.o=function(n){return this.inspectOpts.colors=this.useColors,Nm.inspect(n,this.inspectOpts).split(`
6
- `).map((m)=>m.trim()).join(" ")};R6.O=function(n){return this.inspectOpts.colors=this.useColors,Nm.inspect(n,this.inspectOpts)}});var f6=T((FY,ji)=>{if(typeof process>"u"||process.type==="renderer"||!1||process.__nwjs)ji.exports=g6();else ji.exports=S6()});var h6=T((hY,F6)=>{F6.exports=p6;function p6(n,m){if(n&&m)return p6(n)(m);if(typeof n!=="function")throw TypeError("need wrapper function");return Object.keys(n).forEach(function(b){i[b]=n[b]}),i;function i(){var b=Array(arguments.length);for(var $=0;$<b.length;$++)b[$]=arguments[$];var o=n.apply(this,b),_=b[b.length-1];if(typeof o==="function"&&o!==_)Object.keys(_).forEach(function(J){o[J]=_[J]});return o}}});var Di=T((PY,vi)=>{var P6=h6();vi.exports=P6(Lm);vi.exports.strict=P6(k6);Lm.proto=Lm(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return Lm(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return k6(this)},configurable:!0})});function Lm(n){var m=function(){if(m.called)return m.value;return m.called=!0,m.value=n.apply(this,arguments)};return m.called=!1,m}function k6(n){var m=function(){if(m.called)throw Error(m.onceError);return m.called=!0,m.value=n.apply(this,arguments)},i=n.name||"Function wrapped with `once`";return m.onceError=i+" shouldn't be called more than once",m.called=!1,m}});var y6=T((kY,I6)=>{var M9=Di(),x9=function(){},l9=global.Bare?queueMicrotask:process.nextTick.bind(process),u9=function(n){return n.setHeader&&typeof n.abort==="function"},j9=function(n){return n.stdio&&Array.isArray(n.stdio)&&n.stdio.length===3},T6=function(n,m,i){if(typeof m==="function")return T6(n,null,m);if(!m)m={};i=M9(i||x9);var{_writableState:b,_readableState:$}=n,o=m.readable||m.readable!==!1&&n.readable,_=m.writable||m.writable!==!1&&n.writable,J=!1,X=function(){if(!n.writable)Y()},Y=function(){if(_=!1,!o)i.call(n)},H=function(){if(o=!1,!_)i.call(n)},q=function(N){i.call(n,N?Error("exited with error code: "+N):null)},M=function(N){i.call(n,N)},j=function(){l9(h)},h=function(){if(J)return;if(o&&!($&&($.ended&&!$.destroyed)))return i.call(n,Error("premature close"));if(_&&!(b&&(b.ended&&!b.destroyed)))return i.call(n,Error("premature close"))},B=function(){n.req.on("finish",Y)};if(u9(n))if(n.on("complete",Y),n.on("abort",j),n.req)B();else n.on("request",B);else if(_&&!b)n.on("end",X),n.on("close",X);if(j9(n))n.on("exit",q);if(n.on("end",H),n.on("finish",Y),m.error!==!1)n.on("error",M);return n.on("close",j),function(){if(J=!0,n.removeListener("complete",Y),n.removeListener("abort",j),n.removeListener("request",B),n.req)n.req.removeListener("finish",Y);n.removeListener("end",X),n.removeListener("close",X),n.removeListener("finish",Y),n.removeListener("exit",q),n.removeListener("end",H),n.removeListener("error",M),n.removeListener("close",j)}};I6.exports=T6});var Z6=T((TY,z6)=>{var v9=Di(),D9=y6(),Bm;try{Bm=F("fs")}catch(n){}var y0=function(){},N9=typeof process>"u"?!1:/^v?\.0/.test(process.version),Cm=function(n){return typeof n==="function"},V9=function(n){if(!N9)return!1;if(!Bm)return!1;return(n instanceof(Bm.ReadStream||y0)||n instanceof(Bm.WriteStream||y0))&&Cm(n.close)},L9=function(n){return n.setHeader&&Cm(n.abort)},B9=function(n,m,i,b){b=v9(b);var $=!1;n.on("close",function(){$=!0}),D9(n,{readable:m,writable:i},function(_){if(_)return b(_);$=!0,b()});var o=!1;return function(_){if($)return;if(o)return;if(o=!0,V9(n))return n.close(y0);if(L9(n))return n.abort();if(Cm(n.destroy))return n.destroy();b(_||Error("stream was destroyed"))}},c6=function(n){n()},C9=function(n,m){return n.pipe(m)},K9=function(){var n=Array.prototype.slice.call(arguments),m=Cm(n[n.length-1]||y0)&&n.pop()||y0;if(Array.isArray(n[0]))n=n[0];if(n.length<2)throw Error("pump requires two streams per minimum");var i,b=n.map(function($,o){var _=o<n.length-1,J=o>0;return B9($,_,J,function(X){if(!i)i=X;if(X)b.forEach(c6);if(_)return;b.forEach(c6),m(i)})});return n.reduce(C9)};z6.exports=K9});var d6=T((IY,t6)=>{var{PassThrough:A9}=F("stream");t6.exports=(n)=>{n={...n};let{array:m}=n,{encoding:i}=n,b=i==="buffer",$=!1;if(m)$=!(i||b);else i=i||"utf8";if(b)i=null;let o=new A9({objectMode:$});if(i)o.setEncoding(i);let _=0,J=[];return o.on("data",(X)=>{if(J.push(X),$)_=J.length;else _+=X.length}),o.getBufferedValue=()=>{if(m)return J;return b?Buffer.concat(J,_):J.join("")},o.getBufferedLength=()=>_,o}});var a6=T((yY,j0)=>{var{constants:g9}=F("buffer"),R9=Z6(),E9=d6();class Ni extends Error{constructor(){super("maxBuffer exceeded");this.name="MaxBufferError"}}async function Km(n,m){if(!n)return Promise.reject(Error("Expected a stream"));m={maxBuffer:1/0,...m};let{maxBuffer:i}=m,b;return await new Promise(($,o)=>{let _=(J)=>{if(J&&b.getBufferedLength()<=g9.MAX_LENGTH)J.bufferedData=b.getBufferedValue();o(J)};b=R9(n,E9(m),(J)=>{if(J){_(J);return}$()}),b.on("data",()=>{if(b.getBufferedLength()>i)_(new Ni)})}),b.getBufferedValue()}j0.exports=Km;j0.exports.default=Km;j0.exports.buffer=(n,m)=>Km(n,{...m,encoding:"buffer"});j0.exports.array=(n,m)=>Km(n,{...m,array:!0});j0.exports.MaxBufferError=Ni});var n2=T((cY,s6)=>{s6.exports=Am;function Am(){this.pending=0,this.max=1/0,this.listeners=[],this.waiting=[],this.error=null}Am.prototype.go=function(n){if(this.pending<this.max)e6(this,n);else this.waiting.push(n)};Am.prototype.wait=function(n){if(this.pending===0)n(this.error);else this.listeners.push(n)};Am.prototype.hold=function(){return r6(this)};function r6(n){n.pending+=1;var m=!1;return i;function i($){if(m)throw Error("callback called twice");if(m=!0,n.error=n.error||$,n.pending-=1,n.waiting.length>0&&n.pending<n.max)e6(n,n.waiting.shift());else if(n.pending===0){var o=n.listeners;n.listeners=[],o.forEach(b)}}function b($){$(n.error)}}function e6(n,m){m(r6(n))}});var i2=T((F9)=>{var c0=F("fs"),gm=F("util"),Vi=F("stream"),m2=Vi.Readable,Li=Vi.Writable,U9=Vi.PassThrough,S9=n2(),Rm=F("events").EventEmitter;F9.createFromBuffer=f9;F9.createFromFd=p9;F9.BufferSlicer=vn;F9.FdSlicer=jn;gm.inherits(jn,Rm);function jn(n,m){m=m||{},Rm.call(this),this.fd=n,this.pend=new S9,this.pend.max=1,this.refCount=0,this.autoClose=!!m.autoClose}jn.prototype.read=function(n,m,i,b,$){var o=this;o.pend.go(function(_){c0.read(o.fd,n,m,i,b,function(J,X,Y){_(),$(J,X,Y)})})};jn.prototype.write=function(n,m,i,b,$){var o=this;o.pend.go(function(_){c0.write(o.fd,n,m,i,b,function(J,X,Y){_(),$(J,X,Y)})})};jn.prototype.createReadStream=function(n){return new Em(this,n)};jn.prototype.createWriteStream=function(n){return new Um(this,n)};jn.prototype.ref=function(){this.refCount+=1};jn.prototype.unref=function(){var n=this;if(n.refCount-=1,n.refCount>0)return;if(n.refCount<0)throw Error("invalid unref");if(n.autoClose)c0.close(n.fd,m);function m(i){if(i)n.emit("error",i);else n.emit("close")}};gm.inherits(Em,m2);function Em(n,m){m=m||{},m2.call(this,m),this.context=n,this.context.ref(),this.start=m.start||0,this.endOffset=m.end,this.pos=this.start,this.destroyed=!1}Em.prototype._read=function(n){var m=this;if(m.destroyed)return;var i=Math.min(m._readableState.highWaterMark,n);if(m.endOffset!=null)i=Math.min(i,m.endOffset-m.pos);if(i<=0){m.destroyed=!0,m.push(null),m.context.unref();return}m.context.pend.go(function(b){if(m.destroyed)return b();var $=new Buffer(i);c0.read(m.context.fd,$,0,i,m.pos,function(o,_){if(o)m.destroy(o);else if(_===0)m.destroyed=!0,m.push(null),m.context.unref();else m.pos+=_,m.push($.slice(0,_));b()})})};Em.prototype.destroy=function(n){if(this.destroyed)return;n=n||Error("stream destroyed"),this.destroyed=!0,this.emit("error",n),this.context.unref()};gm.inherits(Um,Li);function Um(n,m){m=m||{},Li.call(this,m),this.context=n,this.context.ref(),this.start=m.start||0,this.endOffset=m.end==null?1/0:+m.end,this.bytesWritten=0,this.pos=this.start,this.destroyed=!1,this.on("finish",this.destroy.bind(this))}Um.prototype._write=function(n,m,i){var b=this;if(b.destroyed)return;if(b.pos+n.length>b.endOffset){var $=Error("maximum file length exceeded");$.code="ETOOBIG",b.destroy(),i($);return}b.context.pend.go(function(o){if(b.destroyed)return o();c0.write(b.context.fd,n,0,n.length,b.pos,function(_,J){if(_)b.destroy(),o(),i(_);else b.bytesWritten+=J,b.pos+=J,b.emit("progress"),o(),i()})})};Um.prototype.destroy=function(){if(this.destroyed)return;this.destroyed=!0,this.context.unref()};gm.inherits(vn,Rm);function vn(n,m){Rm.call(this),m=m||{},this.refCount=0,this.buffer=n,this.maxChunkSize=m.maxChunkSize||Number.MAX_SAFE_INTEGER}vn.prototype.read=function(n,m,i,b,$){var o=b+i,_=o-this.buffer.length,J=_>0?_:i;this.buffer.copy(n,m,b,o),setImmediate(function(){$(null,J)})};vn.prototype.write=function(n,m,i,b,$){n.copy(this.buffer,b,m,m+i),setImmediate(function(){$(null,i,n)})};vn.prototype.createReadStream=function(n){n=n||{};var m=new U9(n);m.destroyed=!1,m.start=n.start||0,m.endOffset=n.end,m.pos=m.endOffset||this.buffer.length;var i=this.buffer.slice(m.start,m.pos),b=0;while(!0){var $=b+this.maxChunkSize;if($>=i.length){if(b<i.length)m.write(i.slice(b,i.length));break}m.write(i.slice(b,$)),b=$}return m.end(),m.destroy=function(){m.destroyed=!0},m};vn.prototype.createWriteStream=function(n){var m=this;n=n||{};var i=new Li(n);return i.start=n.start||0,i.endOffset=n.end==null?this.buffer.length:+n.end,i.bytesWritten=0,i.pos=i.start,i.destroyed=!1,i._write=function(b,$,o){if(i.destroyed)return;var _=i.pos+b.length;if(_>i.endOffset){var J=Error("maximum file length exceeded");J.code="ETOOBIG",i.destroyed=!0,o(J);return}b.copy(m.buffer,i.pos,0,b.length),i.bytesWritten+=b.length,i.pos=_,i.emit("progress"),o()},i.destroy=function(){i.destroyed=!0},i};vn.prototype.ref=function(){this.refCount+=1};vn.prototype.unref=function(){if(this.refCount-=1,this.refCount<0)throw Error("invalid unref")};function f9(n,m){return new vn(n,m)}function p9(n,m){return new jn(n,m)}});var $2=T((ZY,w2)=>{var Sn=F("buffer").Buffer,Bi=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918000,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];if(typeof Int32Array<"u")Bi=new Int32Array(Bi);function b2(n){if(Sn.isBuffer(n))return n;var m=typeof Sn.alloc==="function"&&typeof Sn.from==="function";if(typeof n==="number")return m?Sn.alloc(n):new Sn(n);else if(typeof n==="string")return m?Sn.from(n):new Sn(n);else throw Error("input must be buffer, number, or string, received "+typeof n)}function I9(n){var m=b2(4);return m.writeInt32BE(n,0),m}function Ci(n,m){if(n=b2(n),Sn.isBuffer(m))m=m.readUInt32BE(0);var i=~~m^-1;for(var b=0;b<n.length;b++)i=Bi[(i^n[b])&255]^i>>>8;return i^-1}function Ki(){return I9(Ci.apply(null,arguments))}Ki.signed=function(){return Ci.apply(null,arguments)};Ki.unsigned=function(){return Ci.apply(null,arguments)>>>0};w2.exports=Ki});var Q2=T((a9)=>{var Ai=F("fs"),y9=F("zlib"),o2=i2(),c9=$2(),pm=F("util"),Fm=F("events").EventEmitter,_2=F("stream").Transform,gi=F("stream").PassThrough,z9=F("stream").Writable;a9.open=Z9;a9.fromFd=J2;a9.fromBuffer=t9;a9.fromRandomAccessReader=Ri;a9.dosDateTimeToDate=Y2;a9.validateFileName=H2;a9.ZipFile=fn;a9.Entry=z0;a9.RandomAccessReader=pn;function Z9(n,m,i){if(typeof m==="function")i=m,m=null;if(m==null)m={};if(m.autoClose==null)m.autoClose=!0;if(m.lazyEntries==null)m.lazyEntries=!1;if(m.decodeStrings==null)m.decodeStrings=!0;if(m.validateEntrySizes==null)m.validateEntrySizes=!0;if(m.strictFileNames==null)m.strictFileNames=!1;if(i==null)i=fm;Ai.open(n,"r",function(b,$){if(b)return i(b);J2($,m,function(o,_){if(o)Ai.close($,fm);i(o,_)})})}function J2(n,m,i){if(typeof m==="function")i=m,m=null;if(m==null)m={};if(m.autoClose==null)m.autoClose=!1;if(m.lazyEntries==null)m.lazyEntries=!1;if(m.decodeStrings==null)m.decodeStrings=!0;if(m.validateEntrySizes==null)m.validateEntrySizes=!0;if(m.strictFileNames==null)m.strictFileNames=!1;if(i==null)i=fm;Ai.fstat(n,function(b,$){if(b)return i(b);var o=o2.createFromFd(n,{autoClose:!0});Ri(o,$.size,m,i)})}function t9(n,m,i){if(typeof m==="function")i=m,m=null;if(m==null)m={};if(m.autoClose=!1,m.lazyEntries==null)m.lazyEntries=!1;if(m.decodeStrings==null)m.decodeStrings=!0;if(m.validateEntrySizes==null)m.validateEntrySizes=!0;if(m.strictFileNames==null)m.strictFileNames=!1;var b=o2.createFromBuffer(n,{maxChunkSize:65536});Ri(b,n.length,m,i)}function Ri(n,m,i,b){if(typeof i==="function")b=i,i=null;if(i==null)i={};if(i.autoClose==null)i.autoClose=!0;if(i.lazyEntries==null)i.lazyEntries=!1;if(i.decodeStrings==null)i.decodeStrings=!0;var $=!!i.decodeStrings;if(i.validateEntrySizes==null)i.validateEntrySizes=!0;if(i.strictFileNames==null)i.strictFileNames=!1;if(b==null)b=fm;if(typeof m!=="number")throw Error("expected totalSize parameter to be a number");if(m>Number.MAX_SAFE_INTEGER)throw Error("zip file too large. only file sizes up to 2^52 are supported due to JavaScript's Number type being an IEEE 754 double.");n.ref();var o=22,_=65535,J=Math.min(o+_,m),X=qn(J),Y=m-X.length;v0(n,X,0,J,Y,function(H){if(H)return b(H);for(var q=J-o;q>=0;q-=1){if(X.readUInt32LE(q)!==101010256)continue;var M=X.slice(q),j=M.readUInt16LE(4);if(j!==0)return b(Error("multi-disk zip files are not supported: found disk number: "+j));var h=M.readUInt16LE(10),B=M.readUInt32LE(16),N=M.readUInt16LE(20),f=M.length-o;if(N!==f)return b(Error("invalid comment length. expected: "+f+". found: "+N));var P=$?Sm(M,22,M.length,!1):M.slice(22);if(!(h===65535||B===4294967295))return b(null,new fn(n,B,m,h,P,i.autoClose,i.lazyEntries,$,i.validateEntrySizes,i.strictFileNames));var c=qn(20),Nn=Y+q-c.length;v0(n,c,0,c.length,Nn,function(i0){if(i0)return b(i0);if(c.readUInt32LE(0)!==117853008)return b(Error("invalid zip64 end of central directory locator signature"));var K0=D0(c,8),kn=qn(56);v0(n,kn,0,kn.length,K0,function(A0){if(A0)return b(A0);if(kn.readUInt32LE(0)!==101075792)return b(Error("invalid zip64 end of central directory record signature"));return h=D0(kn,32),B=D0(kn,48),b(null,new fn(n,B,m,h,P,i.autoClose,i.lazyEntries,$,i.validateEntrySizes,i.strictFileNames))})});return}b(Error("end of central directory record signature not found"))})}pm.inherits(fn,Fm);function fn(n,m,i,b,$,o,_,J,X,Y){var H=this;if(Fm.call(H),H.reader=n,H.reader.on("error",function(q){X2(H,q)}),H.reader.once("close",function(){H.emit("close")}),H.readEntryCursor=m,H.fileSize=i,H.entryCount=b,H.comment=$,H.entriesRead=0,H.autoClose=!!o,H.lazyEntries=!!_,H.decodeStrings=!!J,H.validateEntrySizes=!!X,H.strictFileNames=!!Y,H.isOpen=!0,H.emittedError=!1,!H.lazyEntries)H._readEntry()}fn.prototype.close=function(){if(!this.isOpen)return;this.isOpen=!1,this.reader.unref()};function wn(n,m){if(n.autoClose)n.close();X2(n,m)}function X2(n,m){if(n.emittedError)return;n.emittedError=!0,n.emit("error",m)}fn.prototype.readEntry=function(){if(!this.lazyEntries)throw Error("readEntry() called without lazyEntries:true");this._readEntry()};fn.prototype._readEntry=function(){var n=this;if(n.entryCount===n.entriesRead){setImmediate(function(){if(n.autoClose)n.close();if(n.emittedError)return;n.emit("end")});return}if(n.emittedError)return;var m=qn(46);v0(n.reader,m,0,m.length,n.readEntryCursor,function(i){if(i)return wn(n,i);if(n.emittedError)return;var b=new z0,$=m.readUInt32LE(0);if($!==33639248)return wn(n,Error("invalid central directory file header signature: 0x"+$.toString(16)));if(b.versionMadeBy=m.readUInt16LE(4),b.versionNeededToExtract=m.readUInt16LE(6),b.generalPurposeBitFlag=m.readUInt16LE(8),b.compressionMethod=m.readUInt16LE(10),b.lastModFileTime=m.readUInt16LE(12),b.lastModFileDate=m.readUInt16LE(14),b.crc32=m.readUInt32LE(16),b.compressedSize=m.readUInt32LE(20),b.uncompressedSize=m.readUInt32LE(24),b.fileNameLength=m.readUInt16LE(28),b.extraFieldLength=m.readUInt16LE(30),b.fileCommentLength=m.readUInt16LE(32),b.internalFileAttributes=m.readUInt16LE(36),b.externalFileAttributes=m.readUInt32LE(38),b.relativeOffsetOfLocalHeader=m.readUInt32LE(42),b.generalPurposeBitFlag&64)return wn(n,Error("strong encryption is not supported"));n.readEntryCursor+=46,m=qn(b.fileNameLength+b.extraFieldLength+b.fileCommentLength),v0(n.reader,m,0,m.length,n.readEntryCursor,function(o){if(o)return wn(n,o);if(n.emittedError)return;var _=(b.generalPurposeBitFlag&2048)!==0;b.fileName=n.decodeStrings?Sm(m,0,b.fileNameLength,_):m.slice(0,b.fileNameLength);var J=b.fileNameLength+b.extraFieldLength,X=m.slice(b.fileNameLength,J);b.extraFields=[];var Y=0;while(Y<X.length-3){var H=X.readUInt16LE(Y+0),q=X.readUInt16LE(Y+2),M=Y+4,j=M+q;if(j>X.length)return wn(n,Error("extra field length exceeds extra field buffer size"));var h=qn(q);X.copy(h,0,M,j),b.extraFields.push({id:H,data:h}),Y=j}if(b.fileComment=n.decodeStrings?Sm(m,J,J+b.fileCommentLength,_):m.slice(J,J+b.fileCommentLength),b.comment=b.fileComment,n.readEntryCursor+=m.length,n.entriesRead+=1,b.uncompressedSize===4294967295||b.compressedSize===4294967295||b.relativeOffsetOfLocalHeader===4294967295){var B=null;for(var Y=0;Y<b.extraFields.length;Y++){var N=b.extraFields[Y];if(N.id===1){B=N.data;break}}if(B==null)return wn(n,Error("expected zip64 extended information extra field"));var f=0;if(b.uncompressedSize===4294967295){if(f+8>B.length)return wn(n,Error("zip64 extended information extra field does not include uncompressed size"));b.uncompressedSize=D0(B,f),f+=8}if(b.compressedSize===4294967295){if(f+8>B.length)return wn(n,Error("zip64 extended information extra field does not include compressed size"));b.compressedSize=D0(B,f),f+=8}if(b.relativeOffsetOfLocalHeader===4294967295){if(f+8>B.length)return wn(n,Error("zip64 extended information extra field does not include relative header offset"));b.relativeOffsetOfLocalHeader=D0(B,f),f+=8}}if(n.decodeStrings)for(var Y=0;Y<b.extraFields.length;Y++){var N=b.extraFields[Y];if(N.id===28789){if(N.data.length<6)continue;if(N.data.readUInt8(0)!==1)continue;var P=N.data.readUInt32LE(1);if(c9.unsigned(m.slice(0,b.fileNameLength))!==P)continue;b.fileName=Sm(N.data,5,N.data.length,!0);break}}if(n.validateEntrySizes&&b.compressionMethod===0){var c=b.uncompressedSize;if(b.isEncrypted())c+=12;if(b.compressedSize!==c){var Nn="compressed/uncompressed size mismatch for stored file: "+b.compressedSize+" != "+b.uncompressedSize;return wn(n,Error(Nn))}}if(n.decodeStrings){if(!n.strictFileNames)b.fileName=b.fileName.replace(/\\/g,"/");var i0=H2(b.fileName,n.validateFileNameOptions);if(i0!=null)return wn(n,Error(i0))}if(n.emit("entry",b),!n.lazyEntries)n._readEntry()})})};fn.prototype.openReadStream=function(n,m,i){var b=this,$=0,o=n.compressedSize;if(i==null)i=m,m={};else{if(m.decrypt!=null){if(!n.isEncrypted())throw Error("options.decrypt can only be specified for encrypted entries");if(m.decrypt!==!1)throw Error("invalid options.decrypt value: "+m.decrypt);if(n.isCompressed()){if(m.decompress!==!1)throw Error("entry is encrypted and compressed, and options.decompress !== false")}}if(m.decompress!=null){if(!n.isCompressed())throw Error("options.decompress can only be specified for compressed entries");if(!(m.decompress===!1||m.decompress===!0))throw Error("invalid options.decompress value: "+m.decompress)}if(m.start!=null||m.end!=null){if(n.isCompressed()&&m.decompress!==!1)throw Error("start/end range not allowed for compressed entry without options.decompress === false");if(n.isEncrypted()&&m.decrypt!==!1)throw Error("start/end range not allowed for encrypted entry without options.decrypt === false")}if(m.start!=null){if($=m.start,$<0)throw Error("options.start < 0");if($>n.compressedSize)throw Error("options.start > entry.compressedSize")}if(m.end!=null){if(o=m.end,o<0)throw Error("options.end < 0");if(o>n.compressedSize)throw Error("options.end > entry.compressedSize");if(o<$)throw Error("options.end < options.start")}}if(!b.isOpen)return i(Error("closed"));if(n.isEncrypted()){if(m.decrypt!==!1)return i(Error("entry is encrypted, and options.decrypt !== false"))}b.reader.ref();var _=qn(30);v0(b.reader,_,0,_.length,n.relativeOffsetOfLocalHeader,function(J){try{if(J)return i(J);var X=_.readUInt32LE(0);if(X!==67324752)return i(Error("invalid local file header signature: 0x"+X.toString(16)));var Y=_.readUInt16LE(26),H=_.readUInt16LE(28),q=n.relativeOffsetOfLocalHeader+_.length+Y+H,M;if(n.compressionMethod===0)M=!1;else if(n.compressionMethod===8)M=m.decompress!=null?m.decompress:!0;else return i(Error("unsupported compression method: "+n.compressionMethod));var j=q,h=j+n.compressedSize;if(n.compressedSize!==0){if(h>b.fileSize)return i(Error("file data overflows file bounds: "+j+" + "+n.compressedSize+" > "+b.fileSize))}var B=b.reader.createReadStream({start:j+$,end:j+o}),N=B;if(M){var f=!1,P=y9.createInflateRaw();if(B.on("error",function(c){setImmediate(function(){if(!f)P.emit("error",c)})}),B.pipe(P),b.validateEntrySizes)N=new Z0(n.uncompressedSize),P.on("error",function(c){setImmediate(function(){if(!f)N.emit("error",c)})}),P.pipe(N);else N=P;N.destroy=function(){if(f=!0,P!==N)P.unpipe(N);B.unpipe(P),B.destroy()}}i(null,N)}finally{b.reader.unref()}})};function z0(){}z0.prototype.getLastModDate=function(){return Y2(this.lastModFileDate,this.lastModFileTime)};z0.prototype.isEncrypted=function(){return(this.generalPurposeBitFlag&1)!==0};z0.prototype.isCompressed=function(){return this.compressionMethod===8};function Y2(n,m){var i=n&31,b=(n>>5&15)-1,$=(n>>9&127)+1980,o=0,_=(m&31)*2,J=m>>5&63,X=m>>11&31;return new Date($,b,i,X,J,_,o)}function H2(n){if(n.indexOf("\\")!==-1)return"invalid characters in fileName: "+n;if(/^[a-zA-Z]:/.test(n)||/^\//.test(n))return"absolute path: "+n;if(n.split("/").indexOf("..")!==-1)return"invalid relative path: "+n;return null}function v0(n,m,i,b,$,o){if(b===0)return setImmediate(function(){o(null,qn(0))});n.read(m,i,b,$,function(_,J){if(_)return o(_);if(J<b)return o(Error("unexpected EOF"));o()})}pm.inherits(Z0,_2);function Z0(n){_2.call(this),this.actualByteCount=0,this.expectedByteCount=n}Z0.prototype._transform=function(n,m,i){if(this.actualByteCount+=n.length,this.actualByteCount>this.expectedByteCount){var b="too many bytes in the stream. expected "+this.expectedByteCount+". got at least "+this.actualByteCount;return i(Error(b))}i(null,n)};Z0.prototype._flush=function(n){if(this.actualByteCount<this.expectedByteCount){var m="not enough bytes in the stream. expected "+this.expectedByteCount+". got only "+this.actualByteCount;return n(Error(m))}n()};pm.inherits(pn,Fm);function pn(){Fm.call(this),this.refCount=0}pn.prototype.ref=function(){this.refCount+=1};pn.prototype.unref=function(){var n=this;if(n.refCount-=1,n.refCount>0)return;if(n.refCount<0)throw Error("invalid unref");n.close(m);function m(i){if(i)return n.emit("error",i);n.emit("close")}};pn.prototype.createReadStream=function(n){var{start:m,end:i}=n;if(m===i){var b=new gi;return setImmediate(function(){b.end()}),b}var $=this._readStreamForRange(m,i),o=!1,_=new hm(this);$.on("error",function(X){setImmediate(function(){if(!o)_.emit("error",X)})}),_.destroy=function(){$.unpipe(_),_.unref(),$.destroy()};var J=new Z0(i-m);return _.on("error",function(X){setImmediate(function(){if(!o)J.emit("error",X)})}),J.destroy=function(){o=!0,_.unpipe(J),_.destroy()},$.pipe(_).pipe(J)};pn.prototype._readStreamForRange=function(n,m){throw Error("not implemented")};pn.prototype.read=function(n,m,i,b,$){var o=this.createReadStream({start:b,end:b+i}),_=new z9,J=0;_._write=function(X,Y,H){X.copy(n,m+J,0,X.length),J+=X.length,H()},_.on("finish",$),o.on("error",function(X){$(X)}),o.pipe(_)};pn.prototype.close=function(n){setImmediate(n)};pm.inherits(hm,gi);function hm(n){gi.call(this),this.context=n,this.context.ref(),this.unreffedYet=!1}hm.prototype._flush=function(n){this.unref(),n()};hm.prototype.unref=function(n){if(this.unreffedYet)return;this.unreffedYet=!0,this.context.unref()};var d9="\x00☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ";function Sm(n,m,i,b){if(b)return n.toString("utf8",m,i);else{var $="";for(var o=m;o<i;o++)$+=d9[n[o]];return $}}function D0(n,m){var i=n.readUInt32LE(m),b=n.readUInt32LE(m+4);return b*4294967296+i}var qn;if(typeof Buffer.allocUnsafe==="function")qn=function(n){return Buffer.allocUnsafe(n)};else qn=function(n){return new Buffer(n)};function fm(n){if(n)throw n}});var O2=T((dY,q2)=>{var $n=f6()("extract-zip"),{createWriteStream:o$,promises:N0}=F("fs"),_$=a6(),sn=F("path"),{promisify:Ei}=F("util"),J$=F("stream"),X$=Q2(),Y$=Ei(X$.open),H$=Ei(J$.pipeline);class W2{constructor(n,m){this.zipPath=n,this.opts=m}async extract(){return $n("opening",this.zipPath,"with opts",this.opts),this.zipfile=await Y$(this.zipPath,{lazyEntries:!0}),this.canceled=!1,new Promise((n,m)=>{this.zipfile.on("error",(i)=>{this.canceled=!0,m(i)}),this.zipfile.readEntry(),this.zipfile.on("close",()=>{if(!this.canceled)$n("zip extraction complete"),n()}),this.zipfile.on("entry",async(i)=>{if(this.canceled){$n("skipping entry",i.fileName,{cancelled:this.canceled});return}if($n("zipfile entry",i.fileName),i.fileName.startsWith("__MACOSX/")){this.zipfile.readEntry();return}let b=sn.dirname(sn.join(this.opts.dir,i.fileName));try{await N0.mkdir(b,{recursive:!0});let $=await N0.realpath(b);if(sn.relative(this.opts.dir,$).split(sn.sep).includes(".."))throw Error(`Out of bound path "${$}" found while processing file ${i.fileName}`);await this.extractEntry(i),$n("finished processing",i.fileName),this.zipfile.readEntry()}catch($){this.canceled=!0,this.zipfile.close(),m($)}})})}async extractEntry(n){if(this.canceled){$n("skipping entry extraction",n.fileName,{cancelled:this.canceled});return}if(this.opts.onEntry)this.opts.onEntry(n,this.zipfile);let m=sn.join(this.opts.dir,n.fileName),i=n.externalFileAttributes>>16&65535,b=61440,$=16384,o=40960,_=(i&b)===o,J=(i&b)===$;if(!J&&n.fileName.endsWith("/"))J=!0;let X=n.versionMadeBy>>8;if(!J)J=X===0&&n.externalFileAttributes===16;$n("extracting entry",{filename:n.fileName,isDir:J,isSymlink:_});let Y=this.getExtractedMode(i,J)&511,H=J?m:sn.dirname(m),q={recursive:!0};if(J)q.mode=Y;if($n("mkdir",{dir:H,...q}),await N0.mkdir(H,q),J)return;$n("opening read stream",m);let M=await Ei(this.zipfile.openReadStream.bind(this.zipfile))(n);if(_){let j=await _$(M);$n("creating symlink",j,m),await N0.symlink(j,m)}else await H$(M,o$(m,{mode:Y}))}getExtractedMode(n,m){let i=n;if(i===0)if(m){if(this.opts.defaultDirMode)i=parseInt(this.opts.defaultDirMode,10);if(!i)i=493}else{if(this.opts.defaultFileMode)i=parseInt(this.opts.defaultFileMode,10);if(!i)i=420}return i}}q2.exports=async function(n,m){if($n("creating target directory",m.dir),!sn.isAbsolute(m.dir))throw Error("Target directory is expected to be absolute");return await N0.mkdir(m.dir,{recursive:!0}),m.dir=await N0.realpath(m.dir),new W2(n,m).extract()}});var n3={};ai(n3,{rollbackFromLatestBackup:()=>Zi,listBackups:()=>C0,backupCurrentBinary:()=>zi,BACKUP_DIR:()=>Pn});import{copyFile as e8,readdir as L5,unlink as B5,mkdir as C5,rename as K5}from"node:fs/promises";import{existsSync as A5}from"node:fs";import{homedir as g5}from"node:os";import{join as tm,basename as R5}from"node:path";async function s8(){if(!A5(Pn))await C5(Pn,{recursive:!0})}async function zi(){await s8();let n=process.execPath,m=new Date().toISOString().replace(/[:.]/g,"-"),i=`${R5(n)}-${E}-${m}`,b=tm(Pn,i);return await e8(n,b),await U5(),b}async function C0(){return await s8(),(await L5(Pn)).filter((i)=>i.startsWith("yunke")).map((i)=>tm(Pn,i)).sort().reverse()}async function Zi(){let n=await C0();if(n.length===0)return null;let m=n[0],i=process.execPath,b=`${i}.rollback`;return await e8(m,b),await K5(b,i),m}async function U5(){let m=(await C0()).slice(E5);for(let i of m)try{await B5(i)}catch{}}var Pn,E5=3;var dm=ri(()=>{bn();Pn=tm(process.env.YUNKE_CONFIG_DIR??tm(g5(),".yunke"),"backups")});class l extends Error{code;details;constructor(n,m,i){super(m);this.code=n;this.details=i;this.name="YunkeError"}}class g0 extends l{constructor(n){super("COMMAND_NOT_FOUND",`Command '${n}' not found. Use 'yunke schema' to list available commands.`);this.name="CommandNotFoundError"}}class em extends l{constructor(n,m){super("VALIDATION_FAILED",n,m);this.name="ValidationError"}}class wm extends l{constructor(n,m){super("EXECUTION_FAILED",n,m);this.name="ExecutionError"}}class $m extends l{constructor(n,m,i){super("PLUGIN_LOAD_FAILED",`Failed to load plugin '${n}': ${m}`,i);this.name="PluginLoadError"}}class sm extends l{constructor(n,m,i){super("PLUGIN_CONFLICT",`Command '${n}' already registered by plugin '${m}', cannot register from '${i}'`);this.name="PluginConflictError"}}class om extends l{constructor(n,m){super("TIMEOUT",`Command '${n}' timed out after ${m}ms`);this.name="TimeoutError"}}class Tn{commands;constructor(n=new Map){this.commands=n}register(n){if(this.commands.has(n.name)){let i=this.commands.get(n.name);throw new sm(n.name,i.pluginName,n.pluginName)}let m=new Map(this.commands);return m.set(n.name,n),new Tn(m)}unregister(n){if(!this.commands.has(n))return this;let m=new Map(this.commands);return m.delete(n),new Tn(m)}get(n){return this.commands.get(n)}getAll(){return Array.from(this.commands.values())}getAllVisible(){return this.getAll().filter((n)=>!n.hidden)}getByPlugin(n){return this.getAll().filter((m)=>m.pluginName===n)}has(n){return this.commands.has(n)}get size(){return this.commands.size}}function ei(n,m,i){return{command:n,duration_ms:i,timestamp:new Date().toISOString(),plugin:m}}function si(n,m,i,b){let $={success:!0,data:i,error:null,metadata:ei(n,m,b)};return JSON.stringify($)}function Vn(n,m,i,b){let $={success:!1,data:null,error:{code:i instanceof l?i.code:"EXECUTION_FAILED",message:i instanceof Error?i.message:String(i),details:i instanceof l?i.details:void 0},metadata:ei(n,m,b)};return JSON.stringify($)}var w={};ai(w,{void:()=>Y4,util:()=>A,unknown:()=>J4,union:()=>q4,undefined:()=>$4,tuple:()=>M4,transformer:()=>B4,symbol:()=>w4,string:()=>J1,strictObject:()=>W4,setErrorMap:()=>K3,set:()=>u4,record:()=>x4,quotelessJson:()=>B3,promise:()=>L4,preprocess:()=>A4,pipeline:()=>g4,ostring:()=>R4,optional:()=>C4,onumber:()=>E4,oboolean:()=>U4,objectUtil:()=>ni,object:()=>Q4,number:()=>X1,nullable:()=>K4,null:()=>o4,never:()=>X4,nativeEnum:()=>V4,nan:()=>m4,map:()=>l4,makeIssue:()=>R0,literal:()=>D4,lazy:()=>v4,late:()=>s3,isValid:()=>Ln,isDirty:()=>Jm,isAsync:()=>w0,isAborted:()=>_m,intersection:()=>G4,instanceof:()=>n4,getParsedType:()=>Jn,getErrorMap:()=>b0,function:()=>j4,enum:()=>N4,effect:()=>B4,discriminatedUnion:()=>O4,defaultErrorMap:()=>Gn,datetimeRegex:()=>$1,date:()=>b4,custom:()=>_1,coerce:()=>S4,boolean:()=>Y1,bigint:()=>i4,array:()=>H4,any:()=>_4,addIssueToContext:()=>G,ZodVoid:()=>U0,ZodUnknown:()=>Bn,ZodUnion:()=>Y0,ZodUndefined:()=>J0,ZodType:()=>K,ZodTuple:()=>Yn,ZodTransformer:()=>s,ZodSymbol:()=>E0,ZodString:()=>d,ZodSet:()=>zn,ZodSchema:()=>K,ZodRecord:()=>S0,ZodReadonly:()=>G0,ZodPromise:()=>Zn,ZodPipeline:()=>F0,ZodParsedType:()=>O,ZodOptional:()=>a,ZodObject:()=>U,ZodNumber:()=>Cn,ZodNullable:()=>xn,ZodNull:()=>X0,ZodNever:()=>Xn,ZodNativeEnum:()=>q0,ZodNaN:()=>p0,ZodMap:()=>f0,ZodLiteral:()=>W0,ZodLazy:()=>Q0,ZodIssueCode:()=>Q,ZodIntersection:()=>H0,ZodFunction:()=>o0,ZodFirstPartyTypeKind:()=>W,ZodError:()=>z,ZodEnum:()=>An,ZodEffects:()=>s,ZodDiscriminatedUnion:()=>Xm,ZodDefault:()=>gn,ZodDate:()=>yn,ZodCatch:()=>O0,ZodBranded:()=>Ym,ZodBoolean:()=>_0,ZodBigInt:()=>Kn,ZodArray:()=>r,ZodAny:()=>cn,Schema:()=>K,ParseStatus:()=>k,OK:()=>I,NEVER:()=>f4,INVALID:()=>v,EMPTY_PATH:()=>A3,DIRTY:()=>In,BRAND:()=>e3});var A;(function(n){n.assertEqual=($)=>{};function m($){}n.assertIs=m;function i($){throw Error()}n.assertNever=i,n.arrayToEnum=($)=>{let o={};for(let _ of $)o[_]=_;return o},n.getValidEnumValues=($)=>{let o=n.objectKeys($).filter((J)=>typeof $[$[J]]!=="number"),_={};for(let J of o)_[J]=$[J];return n.objectValues(_)},n.objectValues=($)=>{return n.objectKeys($).map(function(o){return $[o]})},n.objectKeys=typeof Object.keys==="function"?($)=>Object.keys($):($)=>{let o=[];for(let _ in $)if(Object.prototype.hasOwnProperty.call($,_))o.push(_);return o},n.find=($,o)=>{for(let _ of $)if(o(_))return _;return},n.isInteger=typeof Number.isInteger==="function"?($)=>Number.isInteger($):($)=>typeof $==="number"&&Number.isFinite($)&&Math.floor($)===$;function b($,o=" | "){return $.map((_)=>typeof _==="string"?`'${_}'`:_).join(o)}n.joinValues=b,n.jsonStringifyReplacer=($,o)=>{if(typeof o==="bigint")return o.toString();return o}})(A||(A={}));var ni;(function(n){n.mergeShapes=(m,i)=>{return{...m,...i}}})(ni||(ni={}));var O=A.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),Jn=(n)=>{switch(typeof n){case"undefined":return O.undefined;case"string":return O.string;case"number":return Number.isNaN(n)?O.nan:O.number;case"boolean":return O.boolean;case"function":return O.function;case"bigint":return O.bigint;case"symbol":return O.symbol;case"object":if(Array.isArray(n))return O.array;if(n===null)return O.null;if(n.then&&typeof n.then==="function"&&n.catch&&typeof n.catch==="function")return O.promise;if(typeof Map<"u"&&n instanceof Map)return O.map;if(typeof Set<"u"&&n instanceof Set)return O.set;if(typeof Date<"u"&&n instanceof Date)return O.date;return O.object;default:return O.unknown}};var Q=A.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),B3=(n)=>{return JSON.stringify(n,null,2).replace(/"([^"]+)":/g,"$1:")};class z extends Error{get errors(){return this.issues}constructor(n){super();this.issues=[],this.addIssue=(i)=>{this.issues=[...this.issues,i]},this.addIssues=(i=[])=>{this.issues=[...this.issues,...i]};let m=new.target.prototype;if(Object.setPrototypeOf)Object.setPrototypeOf(this,m);else this.__proto__=m;this.name="ZodError",this.issues=n}format(n){let m=n||function($){return $.message},i={_errors:[]},b=($)=>{for(let o of $.issues)if(o.code==="invalid_union")o.unionErrors.map(b);else if(o.code==="invalid_return_type")b(o.returnTypeError);else if(o.code==="invalid_arguments")b(o.argumentsError);else if(o.path.length===0)i._errors.push(m(o));else{let _=i,J=0;while(J<o.path.length){let X=o.path[J];if(J!==o.path.length-1)_[X]=_[X]||{_errors:[]};else _[X]=_[X]||{_errors:[]},_[X]._errors.push(m(o));_=_[X],J++}}};return b(this),i}static assert(n){if(!(n instanceof z))throw Error(`Not a ZodError: ${n}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,A.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(n=(m)=>m.message){let m={},i=[];for(let b of this.issues)if(b.path.length>0){let $=b.path[0];m[$]=m[$]||[],m[$].push(n(b))}else i.push(n(b));return{formErrors:i,fieldErrors:m}}get formErrors(){return this.flatten()}}z.create=(n)=>{return new z(n)};var C3=(n,m)=>{let i;switch(n.code){case Q.invalid_type:if(n.received===O.undefined)i="Required";else i=`Expected ${n.expected}, received ${n.received}`;break;case Q.invalid_literal:i=`Invalid literal value, expected ${JSON.stringify(n.expected,A.jsonStringifyReplacer)}`;break;case Q.unrecognized_keys:i=`Unrecognized key(s) in object: ${A.joinValues(n.keys,", ")}`;break;case Q.invalid_union:i="Invalid input";break;case Q.invalid_union_discriminator:i=`Invalid discriminator value. Expected ${A.joinValues(n.options)}`;break;case Q.invalid_enum_value:i=`Invalid enum value. Expected ${A.joinValues(n.options)}, received '${n.received}'`;break;case Q.invalid_arguments:i="Invalid function arguments";break;case Q.invalid_return_type:i="Invalid function return type";break;case Q.invalid_date:i="Invalid date";break;case Q.invalid_string:if(typeof n.validation==="object")if("includes"in n.validation){if(i=`Invalid input: must include "${n.validation.includes}"`,typeof n.validation.position==="number")i=`${i} at one or more positions greater than or equal to ${n.validation.position}`}else if("startsWith"in n.validation)i=`Invalid input: must start with "${n.validation.startsWith}"`;else if("endsWith"in n.validation)i=`Invalid input: must end with "${n.validation.endsWith}"`;else A.assertNever(n.validation);else if(n.validation!=="regex")i=`Invalid ${n.validation}`;else i="Invalid";break;case Q.too_small:if(n.type==="array")i=`Array must contain ${n.exact?"exactly":n.inclusive?"at least":"more than"} ${n.minimum} element(s)`;else if(n.type==="string")i=`String must contain ${n.exact?"exactly":n.inclusive?"at least":"over"} ${n.minimum} character(s)`;else if(n.type==="number")i=`Number must be ${n.exact?"exactly equal to ":n.inclusive?"greater than or equal to ":"greater than "}${n.minimum}`;else if(n.type==="bigint")i=`Number must be ${n.exact?"exactly equal to ":n.inclusive?"greater than or equal to ":"greater than "}${n.minimum}`;else if(n.type==="date")i=`Date must be ${n.exact?"exactly equal to ":n.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(n.minimum))}`;else i="Invalid input";break;case Q.too_big:if(n.type==="array")i=`Array must contain ${n.exact?"exactly":n.inclusive?"at most":"less than"} ${n.maximum} element(s)`;else if(n.type==="string")i=`String must contain ${n.exact?"exactly":n.inclusive?"at most":"under"} ${n.maximum} character(s)`;else if(n.type==="number")i=`Number must be ${n.exact?"exactly":n.inclusive?"less than or equal to":"less than"} ${n.maximum}`;else if(n.type==="bigint")i=`BigInt must be ${n.exact?"exactly":n.inclusive?"less than or equal to":"less than"} ${n.maximum}`;else if(n.type==="date")i=`Date must be ${n.exact?"exactly":n.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(n.maximum))}`;else i="Invalid input";break;case Q.custom:i="Invalid input";break;case Q.invalid_intersection_types:i="Intersection results could not be merged";break;case Q.not_multiple_of:i=`Number must be a multiple of ${n.multipleOf}`;break;case Q.not_finite:i="Number must be finite";break;default:i=m.defaultError,A.assertNever(n)}return{message:i}},Gn=C3;var n1=Gn;function K3(n){n1=n}function b0(){return n1}var R0=(n)=>{let{data:m,path:i,errorMaps:b,issueData:$}=n,o=[...i,...$.path||[]],_={...$,path:o};if($.message!==void 0)return{...$,path:o,message:$.message};let J="",X=b.filter((Y)=>!!Y).slice().reverse();for(let Y of X)J=Y(_,{data:m,defaultError:J}).message;return{...$,path:o,message:J}},A3=[];function G(n,m){let i=b0(),b=R0({issueData:m,data:n.data,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,i,i===Gn?void 0:Gn].filter(($)=>!!$)});n.common.issues.push(b)}class k{constructor(){this.value="valid"}dirty(){if(this.value==="valid")this.value="dirty"}abort(){if(this.value!=="aborted")this.value="aborted"}static mergeArray(n,m){let i=[];for(let b of m){if(b.status==="aborted")return v;if(b.status==="dirty")n.dirty();i.push(b.value)}return{status:n.value,value:i}}static async mergeObjectAsync(n,m){let i=[];for(let b of m){let $=await b.key,o=await b.value;i.push({key:$,value:o})}return k.mergeObjectSync(n,i)}static mergeObjectSync(n,m){let i={};for(let b of m){let{key:$,value:o}=b;if($.status==="aborted")return v;if(o.status==="aborted")return v;if($.status==="dirty")n.dirty();if(o.status==="dirty")n.dirty();if($.value!=="__proto__"&&(typeof o.value<"u"||b.alwaysSet))i[$.value]=o.value}return{status:n.value,value:i}}}var v=Object.freeze({status:"aborted"}),In=(n)=>({status:"dirty",value:n}),I=(n)=>({status:"valid",value:n}),_m=(n)=>n.status==="aborted",Jm=(n)=>n.status==="dirty",Ln=(n)=>n.status==="valid",w0=(n)=>typeof Promise<"u"&&n instanceof Promise;var u;(function(n){n.errToObj=(m)=>typeof m==="string"?{message:m}:m||{},n.toString=(m)=>typeof m==="string"?m:m?.message})(u||(u={}));class e{constructor(n,m,i,b){this._cachedPath=[],this.parent=n,this.data=m,this._path=i,this._key=b}get path(){if(!this._cachedPath.length)if(Array.isArray(this._key))this._cachedPath.push(...this._path,...this._key);else this._cachedPath.push(...this._path,this._key);return this._cachedPath}}var m1=(n,m)=>{if(Ln(m))return{success:!0,data:m.value};else{if(!n.common.issues.length)throw Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let i=new z(n.common.issues);return this._error=i,this._error}}}};function V(n){if(!n)return{};let{errorMap:m,invalid_type_error:i,required_error:b,description:$}=n;if(m&&(i||b))throw Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);if(m)return{errorMap:m,description:$};return{errorMap:(_,J)=>{let{message:X}=n;if(_.code==="invalid_enum_value")return{message:X??J.defaultError};if(typeof J.data>"u")return{message:X??b??J.defaultError};if(_.code!=="invalid_type")return{message:J.defaultError};return{message:X??i??J.defaultError}},description:$}}class K{get description(){return this._def.description}_getType(n){return Jn(n.data)}_getOrReturnCtx(n,m){return m||{common:n.parent.common,data:n.data,parsedType:Jn(n.data),schemaErrorMap:this._def.errorMap,path:n.path,parent:n.parent}}_processInputParams(n){return{status:new k,ctx:{common:n.parent.common,data:n.data,parsedType:Jn(n.data),schemaErrorMap:this._def.errorMap,path:n.path,parent:n.parent}}}_parseSync(n){let m=this._parse(n);if(w0(m))throw Error("Synchronous parse encountered promise.");return m}_parseAsync(n){let m=this._parse(n);return Promise.resolve(m)}parse(n,m){let i=this.safeParse(n,m);if(i.success)return i.data;throw i.error}safeParse(n,m){let i={common:{issues:[],async:m?.async??!1,contextualErrorMap:m?.errorMap},path:m?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:n,parsedType:Jn(n)},b=this._parseSync({data:n,path:i.path,parent:i});return m1(i,b)}"~validate"(n){let m={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:n,parsedType:Jn(n)};if(!this["~standard"].async)try{let i=this._parseSync({data:n,path:[],parent:m});return Ln(i)?{value:i.value}:{issues:m.common.issues}}catch(i){if(i?.message?.toLowerCase()?.includes("encountered"))this["~standard"].async=!0;m.common={issues:[],async:!0}}return this._parseAsync({data:n,path:[],parent:m}).then((i)=>Ln(i)?{value:i.value}:{issues:m.common.issues})}async parseAsync(n,m){let i=await this.safeParseAsync(n,m);if(i.success)return i.data;throw i.error}async safeParseAsync(n,m){let i={common:{issues:[],contextualErrorMap:m?.errorMap,async:!0},path:m?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:n,parsedType:Jn(n)},b=this._parse({data:n,path:i.path,parent:i}),$=await(w0(b)?b:Promise.resolve(b));return m1(i,$)}refine(n,m){let i=(b)=>{if(typeof m==="string"||typeof m>"u")return{message:m};else if(typeof m==="function")return m(b);else return m};return this._refinement((b,$)=>{let o=n(b),_=()=>$.addIssue({code:Q.custom,...i(b)});if(typeof Promise<"u"&&o instanceof Promise)return o.then((J)=>{if(!J)return _(),!1;else return!0});if(!o)return _(),!1;else return!0})}refinement(n,m){return this._refinement((i,b)=>{if(!n(i))return b.addIssue(typeof m==="function"?m(i,b):m),!1;else return!0})}_refinement(n){return new s({schema:this,typeName:W.ZodEffects,effect:{type:"refinement",refinement:n}})}superRefine(n){return this._refinement(n)}constructor(n){this.spa=this.safeParseAsync,this._def=n,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:(m)=>this["~validate"](m)}}optional(){return a.create(this,this._def)}nullable(){return xn.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return r.create(this)}promise(){return Zn.create(this,this._def)}or(n){return Y0.create([this,n],this._def)}and(n){return H0.create(this,n,this._def)}transform(n){return new s({...V(this._def),schema:this,typeName:W.ZodEffects,effect:{type:"transform",transform:n}})}default(n){let m=typeof n==="function"?n:()=>n;return new gn({...V(this._def),innerType:this,defaultValue:m,typeName:W.ZodDefault})}brand(){return new Ym({typeName:W.ZodBranded,type:this,...V(this._def)})}catch(n){let m=typeof n==="function"?n:()=>n;return new O0({...V(this._def),innerType:this,catchValue:m,typeName:W.ZodCatch})}describe(n){return new this.constructor({...this._def,description:n})}pipe(n){return F0.create(this,n)}readonly(){return G0.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}var g3=/^c[^\s-]{8,}$/i,R3=/^[0-9a-z]+$/,E3=/^[0-9A-HJKMNP-TV-Z]{26}$/i,U3=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,S3=/^[a-z0-9_-]{21}$/i,f3=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,p3=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,F3=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,h3="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",mi,P3=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,k3=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,T3=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,I3=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,y3=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,c3=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,b1="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",z3=new RegExp(`^${b1}$`);function w1(n){let m="[0-5]\\d";if(n.precision)m=`${m}\\.\\d{${n.precision}}`;else if(n.precision==null)m=`${m}(\\.\\d+)?`;let i=n.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${m})${i}`}function Z3(n){return new RegExp(`^${w1(n)}$`)}function $1(n){let m=`${b1}T${w1(n)}`,i=[];if(i.push(n.local?"Z?":"Z"),n.offset)i.push("([+-]\\d{2}:?\\d{2})");return m=`${m}(${i.join("|")})`,new RegExp(`^${m}$`)}function t3(n,m){if((m==="v4"||!m)&&P3.test(n))return!0;if((m==="v6"||!m)&&T3.test(n))return!0;return!1}function d3(n,m){if(!f3.test(n))return!1;try{let[i]=n.split(".");if(!i)return!1;let b=i.replace(/-/g,"+").replace(/_/g,"/").padEnd(i.length+(4-i.length%4)%4,"="),$=JSON.parse(atob(b));if(typeof $!=="object"||$===null)return!1;if("typ"in $&&$?.typ!=="JWT")return!1;if(!$.alg)return!1;if(m&&$.alg!==m)return!1;return!0}catch{return!1}}function a3(n,m){if((m==="v4"||!m)&&k3.test(n))return!0;if((m==="v6"||!m)&&I3.test(n))return!0;return!1}class d extends K{_parse(n){if(this._def.coerce)n.data=String(n.data);if(this._getType(n)!==O.string){let $=this._getOrReturnCtx(n);return G($,{code:Q.invalid_type,expected:O.string,received:$.parsedType}),v}let i=new k,b=void 0;for(let $ of this._def.checks)if($.kind==="min"){if(n.data.length<$.value)b=this._getOrReturnCtx(n,b),G(b,{code:Q.too_small,minimum:$.value,type:"string",inclusive:!0,exact:!1,message:$.message}),i.dirty()}else if($.kind==="max"){if(n.data.length>$.value)b=this._getOrReturnCtx(n,b),G(b,{code:Q.too_big,maximum:$.value,type:"string",inclusive:!0,exact:!1,message:$.message}),i.dirty()}else if($.kind==="length"){let o=n.data.length>$.value,_=n.data.length<$.value;if(o||_){if(b=this._getOrReturnCtx(n,b),o)G(b,{code:Q.too_big,maximum:$.value,type:"string",inclusive:!0,exact:!0,message:$.message});else if(_)G(b,{code:Q.too_small,minimum:$.value,type:"string",inclusive:!0,exact:!0,message:$.message});i.dirty()}}else if($.kind==="email"){if(!F3.test(n.data))b=this._getOrReturnCtx(n,b),G(b,{validation:"email",code:Q.invalid_string,message:$.message}),i.dirty()}else if($.kind==="emoji"){if(!mi)mi=new RegExp(h3,"u");if(!mi.test(n.data))b=this._getOrReturnCtx(n,b),G(b,{validation:"emoji",code:Q.invalid_string,message:$.message}),i.dirty()}else if($.kind==="uuid"){if(!U3.test(n.data))b=this._getOrReturnCtx(n,b),G(b,{validation:"uuid",code:Q.invalid_string,message:$.message}),i.dirty()}else if($.kind==="nanoid"){if(!S3.test(n.data))b=this._getOrReturnCtx(n,b),G(b,{validation:"nanoid",code:Q.invalid_string,message:$.message}),i.dirty()}else if($.kind==="cuid"){if(!g3.test(n.data))b=this._getOrReturnCtx(n,b),G(b,{validation:"cuid",code:Q.invalid_string,message:$.message}),i.dirty()}else if($.kind==="cuid2"){if(!R3.test(n.data))b=this._getOrReturnCtx(n,b),G(b,{validation:"cuid2",code:Q.invalid_string,message:$.message}),i.dirty()}else if($.kind==="ulid"){if(!E3.test(n.data))b=this._getOrReturnCtx(n,b),G(b,{validation:"ulid",code:Q.invalid_string,message:$.message}),i.dirty()}else if($.kind==="url")try{new URL(n.data)}catch{b=this._getOrReturnCtx(n,b),G(b,{validation:"url",code:Q.invalid_string,message:$.message}),i.dirty()}else if($.kind==="regex"){if($.regex.lastIndex=0,!$.regex.test(n.data))b=this._getOrReturnCtx(n,b),G(b,{validation:"regex",code:Q.invalid_string,message:$.message}),i.dirty()}else if($.kind==="trim")n.data=n.data.trim();else if($.kind==="includes"){if(!n.data.includes($.value,$.position))b=this._getOrReturnCtx(n,b),G(b,{code:Q.invalid_string,validation:{includes:$.value,position:$.position},message:$.message}),i.dirty()}else if($.kind==="toLowerCase")n.data=n.data.toLowerCase();else if($.kind==="toUpperCase")n.data=n.data.toUpperCase();else if($.kind==="startsWith"){if(!n.data.startsWith($.value))b=this._getOrReturnCtx(n,b),G(b,{code:Q.invalid_string,validation:{startsWith:$.value},message:$.message}),i.dirty()}else if($.kind==="endsWith"){if(!n.data.endsWith($.value))b=this._getOrReturnCtx(n,b),G(b,{code:Q.invalid_string,validation:{endsWith:$.value},message:$.message}),i.dirty()}else if($.kind==="datetime"){if(!$1($).test(n.data))b=this._getOrReturnCtx(n,b),G(b,{code:Q.invalid_string,validation:"datetime",message:$.message}),i.dirty()}else if($.kind==="date"){if(!z3.test(n.data))b=this._getOrReturnCtx(n,b),G(b,{code:Q.invalid_string,validation:"date",message:$.message}),i.dirty()}else if($.kind==="time"){if(!Z3($).test(n.data))b=this._getOrReturnCtx(n,b),G(b,{code:Q.invalid_string,validation:"time",message:$.message}),i.dirty()}else if($.kind==="duration"){if(!p3.test(n.data))b=this._getOrReturnCtx(n,b),G(b,{validation:"duration",code:Q.invalid_string,message:$.message}),i.dirty()}else if($.kind==="ip"){if(!t3(n.data,$.version))b=this._getOrReturnCtx(n,b),G(b,{validation:"ip",code:Q.invalid_string,message:$.message}),i.dirty()}else if($.kind==="jwt"){if(!d3(n.data,$.alg))b=this._getOrReturnCtx(n,b),G(b,{validation:"jwt",code:Q.invalid_string,message:$.message}),i.dirty()}else if($.kind==="cidr"){if(!a3(n.data,$.version))b=this._getOrReturnCtx(n,b),G(b,{validation:"cidr",code:Q.invalid_string,message:$.message}),i.dirty()}else if($.kind==="base64"){if(!y3.test(n.data))b=this._getOrReturnCtx(n,b),G(b,{validation:"base64",code:Q.invalid_string,message:$.message}),i.dirty()}else if($.kind==="base64url"){if(!c3.test(n.data))b=this._getOrReturnCtx(n,b),G(b,{validation:"base64url",code:Q.invalid_string,message:$.message}),i.dirty()}else A.assertNever($);return{status:i.value,value:n.data}}_regex(n,m,i){return this.refinement((b)=>n.test(b),{validation:m,code:Q.invalid_string,...u.errToObj(i)})}_addCheck(n){return new d({...this._def,checks:[...this._def.checks,n]})}email(n){return this._addCheck({kind:"email",...u.errToObj(n)})}url(n){return this._addCheck({kind:"url",...u.errToObj(n)})}emoji(n){return this._addCheck({kind:"emoji",...u.errToObj(n)})}uuid(n){return this._addCheck({kind:"uuid",...u.errToObj(n)})}nanoid(n){return this._addCheck({kind:"nanoid",...u.errToObj(n)})}cuid(n){return this._addCheck({kind:"cuid",...u.errToObj(n)})}cuid2(n){return this._addCheck({kind:"cuid2",...u.errToObj(n)})}ulid(n){return this._addCheck({kind:"ulid",...u.errToObj(n)})}base64(n){return this._addCheck({kind:"base64",...u.errToObj(n)})}base64url(n){return this._addCheck({kind:"base64url",...u.errToObj(n)})}jwt(n){return this._addCheck({kind:"jwt",...u.errToObj(n)})}ip(n){return this._addCheck({kind:"ip",...u.errToObj(n)})}cidr(n){return this._addCheck({kind:"cidr",...u.errToObj(n)})}datetime(n){if(typeof n==="string")return this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:n});return this._addCheck({kind:"datetime",precision:typeof n?.precision>"u"?null:n?.precision,offset:n?.offset??!1,local:n?.local??!1,...u.errToObj(n?.message)})}date(n){return this._addCheck({kind:"date",message:n})}time(n){if(typeof n==="string")return this._addCheck({kind:"time",precision:null,message:n});return this._addCheck({kind:"time",precision:typeof n?.precision>"u"?null:n?.precision,...u.errToObj(n?.message)})}duration(n){return this._addCheck({kind:"duration",...u.errToObj(n)})}regex(n,m){return this._addCheck({kind:"regex",regex:n,...u.errToObj(m)})}includes(n,m){return this._addCheck({kind:"includes",value:n,position:m?.position,...u.errToObj(m?.message)})}startsWith(n,m){return this._addCheck({kind:"startsWith",value:n,...u.errToObj(m)})}endsWith(n,m){return this._addCheck({kind:"endsWith",value:n,...u.errToObj(m)})}min(n,m){return this._addCheck({kind:"min",value:n,...u.errToObj(m)})}max(n,m){return this._addCheck({kind:"max",value:n,...u.errToObj(m)})}length(n,m){return this._addCheck({kind:"length",value:n,...u.errToObj(m)})}nonempty(n){return this.min(1,u.errToObj(n))}trim(){return new d({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new d({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new d({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find((n)=>n.kind==="datetime")}get isDate(){return!!this._def.checks.find((n)=>n.kind==="date")}get isTime(){return!!this._def.checks.find((n)=>n.kind==="time")}get isDuration(){return!!this._def.checks.find((n)=>n.kind==="duration")}get isEmail(){return!!this._def.checks.find((n)=>n.kind==="email")}get isURL(){return!!this._def.checks.find((n)=>n.kind==="url")}get isEmoji(){return!!this._def.checks.find((n)=>n.kind==="emoji")}get isUUID(){return!!this._def.checks.find((n)=>n.kind==="uuid")}get isNANOID(){return!!this._def.checks.find((n)=>n.kind==="nanoid")}get isCUID(){return!!this._def.checks.find((n)=>n.kind==="cuid")}get isCUID2(){return!!this._def.checks.find((n)=>n.kind==="cuid2")}get isULID(){return!!this._def.checks.find((n)=>n.kind==="ulid")}get isIP(){return!!this._def.checks.find((n)=>n.kind==="ip")}get isCIDR(){return!!this._def.checks.find((n)=>n.kind==="cidr")}get isBase64(){return!!this._def.checks.find((n)=>n.kind==="base64")}get isBase64url(){return!!this._def.checks.find((n)=>n.kind==="base64url")}get minLength(){let n=null;for(let m of this._def.checks)if(m.kind==="min"){if(n===null||m.value>n)n=m.value}return n}get maxLength(){let n=null;for(let m of this._def.checks)if(m.kind==="max"){if(n===null||m.value<n)n=m.value}return n}}d.create=(n)=>{return new d({checks:[],typeName:W.ZodString,coerce:n?.coerce??!1,...V(n)})};function r3(n,m){let i=(n.toString().split(".")[1]||"").length,b=(m.toString().split(".")[1]||"").length,$=i>b?i:b,o=Number.parseInt(n.toFixed($).replace(".","")),_=Number.parseInt(m.toFixed($).replace(".",""));return o%_/10**$}class Cn extends K{constructor(){super(...arguments);this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(n){if(this._def.coerce)n.data=Number(n.data);if(this._getType(n)!==O.number){let $=this._getOrReturnCtx(n);return G($,{code:Q.invalid_type,expected:O.number,received:$.parsedType}),v}let i=void 0,b=new k;for(let $ of this._def.checks)if($.kind==="int"){if(!A.isInteger(n.data))i=this._getOrReturnCtx(n,i),G(i,{code:Q.invalid_type,expected:"integer",received:"float",message:$.message}),b.dirty()}else if($.kind==="min"){if($.inclusive?n.data<$.value:n.data<=$.value)i=this._getOrReturnCtx(n,i),G(i,{code:Q.too_small,minimum:$.value,type:"number",inclusive:$.inclusive,exact:!1,message:$.message}),b.dirty()}else if($.kind==="max"){if($.inclusive?n.data>$.value:n.data>=$.value)i=this._getOrReturnCtx(n,i),G(i,{code:Q.too_big,maximum:$.value,type:"number",inclusive:$.inclusive,exact:!1,message:$.message}),b.dirty()}else if($.kind==="multipleOf"){if(r3(n.data,$.value)!==0)i=this._getOrReturnCtx(n,i),G(i,{code:Q.not_multiple_of,multipleOf:$.value,message:$.message}),b.dirty()}else if($.kind==="finite"){if(!Number.isFinite(n.data))i=this._getOrReturnCtx(n,i),G(i,{code:Q.not_finite,message:$.message}),b.dirty()}else A.assertNever($);return{status:b.value,value:n.data}}gte(n,m){return this.setLimit("min",n,!0,u.toString(m))}gt(n,m){return this.setLimit("min",n,!1,u.toString(m))}lte(n,m){return this.setLimit("max",n,!0,u.toString(m))}lt(n,m){return this.setLimit("max",n,!1,u.toString(m))}setLimit(n,m,i,b){return new Cn({...this._def,checks:[...this._def.checks,{kind:n,value:m,inclusive:i,message:u.toString(b)}]})}_addCheck(n){return new Cn({...this._def,checks:[...this._def.checks,n]})}int(n){return this._addCheck({kind:"int",message:u.toString(n)})}positive(n){return this._addCheck({kind:"min",value:0,inclusive:!1,message:u.toString(n)})}negative(n){return this._addCheck({kind:"max",value:0,inclusive:!1,message:u.toString(n)})}nonpositive(n){return this._addCheck({kind:"max",value:0,inclusive:!0,message:u.toString(n)})}nonnegative(n){return this._addCheck({kind:"min",value:0,inclusive:!0,message:u.toString(n)})}multipleOf(n,m){return this._addCheck({kind:"multipleOf",value:n,message:u.toString(m)})}finite(n){return this._addCheck({kind:"finite",message:u.toString(n)})}safe(n){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:u.toString(n)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:u.toString(n)})}get minValue(){let n=null;for(let m of this._def.checks)if(m.kind==="min"){if(n===null||m.value>n)n=m.value}return n}get maxValue(){let n=null;for(let m of this._def.checks)if(m.kind==="max"){if(n===null||m.value<n)n=m.value}return n}get isInt(){return!!this._def.checks.find((n)=>n.kind==="int"||n.kind==="multipleOf"&&A.isInteger(n.value))}get isFinite(){let n=null,m=null;for(let i of this._def.checks)if(i.kind==="finite"||i.kind==="int"||i.kind==="multipleOf")return!0;else if(i.kind==="min"){if(m===null||i.value>m)m=i.value}else if(i.kind==="max"){if(n===null||i.value<n)n=i.value}return Number.isFinite(m)&&Number.isFinite(n)}}Cn.create=(n)=>{return new Cn({checks:[],typeName:W.ZodNumber,coerce:n?.coerce||!1,...V(n)})};class Kn extends K{constructor(){super(...arguments);this.min=this.gte,this.max=this.lte}_parse(n){if(this._def.coerce)try{n.data=BigInt(n.data)}catch{return this._getInvalidInput(n)}if(this._getType(n)!==O.bigint)return this._getInvalidInput(n);let i=void 0,b=new k;for(let $ of this._def.checks)if($.kind==="min"){if($.inclusive?n.data<$.value:n.data<=$.value)i=this._getOrReturnCtx(n,i),G(i,{code:Q.too_small,type:"bigint",minimum:$.value,inclusive:$.inclusive,message:$.message}),b.dirty()}else if($.kind==="max"){if($.inclusive?n.data>$.value:n.data>=$.value)i=this._getOrReturnCtx(n,i),G(i,{code:Q.too_big,type:"bigint",maximum:$.value,inclusive:$.inclusive,message:$.message}),b.dirty()}else if($.kind==="multipleOf"){if(n.data%$.value!==BigInt(0))i=this._getOrReturnCtx(n,i),G(i,{code:Q.not_multiple_of,multipleOf:$.value,message:$.message}),b.dirty()}else A.assertNever($);return{status:b.value,value:n.data}}_getInvalidInput(n){let m=this._getOrReturnCtx(n);return G(m,{code:Q.invalid_type,expected:O.bigint,received:m.parsedType}),v}gte(n,m){return this.setLimit("min",n,!0,u.toString(m))}gt(n,m){return this.setLimit("min",n,!1,u.toString(m))}lte(n,m){return this.setLimit("max",n,!0,u.toString(m))}lt(n,m){return this.setLimit("max",n,!1,u.toString(m))}setLimit(n,m,i,b){return new Kn({...this._def,checks:[...this._def.checks,{kind:n,value:m,inclusive:i,message:u.toString(b)}]})}_addCheck(n){return new Kn({...this._def,checks:[...this._def.checks,n]})}positive(n){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:u.toString(n)})}negative(n){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:u.toString(n)})}nonpositive(n){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:u.toString(n)})}nonnegative(n){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:u.toString(n)})}multipleOf(n,m){return this._addCheck({kind:"multipleOf",value:n,message:u.toString(m)})}get minValue(){let n=null;for(let m of this._def.checks)if(m.kind==="min"){if(n===null||m.value>n)n=m.value}return n}get maxValue(){let n=null;for(let m of this._def.checks)if(m.kind==="max"){if(n===null||m.value<n)n=m.value}return n}}Kn.create=(n)=>{return new Kn({checks:[],typeName:W.ZodBigInt,coerce:n?.coerce??!1,...V(n)})};class _0 extends K{_parse(n){if(this._def.coerce)n.data=Boolean(n.data);if(this._getType(n)!==O.boolean){let i=this._getOrReturnCtx(n);return G(i,{code:Q.invalid_type,expected:O.boolean,received:i.parsedType}),v}return I(n.data)}}_0.create=(n)=>{return new _0({typeName:W.ZodBoolean,coerce:n?.coerce||!1,...V(n)})};class yn extends K{_parse(n){if(this._def.coerce)n.data=new Date(n.data);if(this._getType(n)!==O.date){let $=this._getOrReturnCtx(n);return G($,{code:Q.invalid_type,expected:O.date,received:$.parsedType}),v}if(Number.isNaN(n.data.getTime())){let $=this._getOrReturnCtx(n);return G($,{code:Q.invalid_date}),v}let i=new k,b=void 0;for(let $ of this._def.checks)if($.kind==="min"){if(n.data.getTime()<$.value)b=this._getOrReturnCtx(n,b),G(b,{code:Q.too_small,message:$.message,inclusive:!0,exact:!1,minimum:$.value,type:"date"}),i.dirty()}else if($.kind==="max"){if(n.data.getTime()>$.value)b=this._getOrReturnCtx(n,b),G(b,{code:Q.too_big,message:$.message,inclusive:!0,exact:!1,maximum:$.value,type:"date"}),i.dirty()}else A.assertNever($);return{status:i.value,value:new Date(n.data.getTime())}}_addCheck(n){return new yn({...this._def,checks:[...this._def.checks,n]})}min(n,m){return this._addCheck({kind:"min",value:n.getTime(),message:u.toString(m)})}max(n,m){return this._addCheck({kind:"max",value:n.getTime(),message:u.toString(m)})}get minDate(){let n=null;for(let m of this._def.checks)if(m.kind==="min"){if(n===null||m.value>n)n=m.value}return n!=null?new Date(n):null}get maxDate(){let n=null;for(let m of this._def.checks)if(m.kind==="max"){if(n===null||m.value<n)n=m.value}return n!=null?new Date(n):null}}yn.create=(n)=>{return new yn({checks:[],coerce:n?.coerce||!1,typeName:W.ZodDate,...V(n)})};class E0 extends K{_parse(n){if(this._getType(n)!==O.symbol){let i=this._getOrReturnCtx(n);return G(i,{code:Q.invalid_type,expected:O.symbol,received:i.parsedType}),v}return I(n.data)}}E0.create=(n)=>{return new E0({typeName:W.ZodSymbol,...V(n)})};class J0 extends K{_parse(n){if(this._getType(n)!==O.undefined){let i=this._getOrReturnCtx(n);return G(i,{code:Q.invalid_type,expected:O.undefined,received:i.parsedType}),v}return I(n.data)}}J0.create=(n)=>{return new J0({typeName:W.ZodUndefined,...V(n)})};class X0 extends K{_parse(n){if(this._getType(n)!==O.null){let i=this._getOrReturnCtx(n);return G(i,{code:Q.invalid_type,expected:O.null,received:i.parsedType}),v}return I(n.data)}}X0.create=(n)=>{return new X0({typeName:W.ZodNull,...V(n)})};class cn extends K{constructor(){super(...arguments);this._any=!0}_parse(n){return I(n.data)}}cn.create=(n)=>{return new cn({typeName:W.ZodAny,...V(n)})};class Bn extends K{constructor(){super(...arguments);this._unknown=!0}_parse(n){return I(n.data)}}Bn.create=(n)=>{return new Bn({typeName:W.ZodUnknown,...V(n)})};class Xn extends K{_parse(n){let m=this._getOrReturnCtx(n);return G(m,{code:Q.invalid_type,expected:O.never,received:m.parsedType}),v}}Xn.create=(n)=>{return new Xn({typeName:W.ZodNever,...V(n)})};class U0 extends K{_parse(n){if(this._getType(n)!==O.undefined){let i=this._getOrReturnCtx(n);return G(i,{code:Q.invalid_type,expected:O.void,received:i.parsedType}),v}return I(n.data)}}U0.create=(n)=>{return new U0({typeName:W.ZodVoid,...V(n)})};class r extends K{_parse(n){let{ctx:m,status:i}=this._processInputParams(n),b=this._def;if(m.parsedType!==O.array)return G(m,{code:Q.invalid_type,expected:O.array,received:m.parsedType}),v;if(b.exactLength!==null){let o=m.data.length>b.exactLength.value,_=m.data.length<b.exactLength.value;if(o||_)G(m,{code:o?Q.too_big:Q.too_small,minimum:_?b.exactLength.value:void 0,maximum:o?b.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:b.exactLength.message}),i.dirty()}if(b.minLength!==null){if(m.data.length<b.minLength.value)G(m,{code:Q.too_small,minimum:b.minLength.value,type:"array",inclusive:!0,exact:!1,message:b.minLength.message}),i.dirty()}if(b.maxLength!==null){if(m.data.length>b.maxLength.value)G(m,{code:Q.too_big,maximum:b.maxLength.value,type:"array",inclusive:!0,exact:!1,message:b.maxLength.message}),i.dirty()}if(m.common.async)return Promise.all([...m.data].map((o,_)=>{return b.type._parseAsync(new e(m,o,m.path,_))})).then((o)=>{return k.mergeArray(i,o)});let $=[...m.data].map((o,_)=>{return b.type._parseSync(new e(m,o,m.path,_))});return k.mergeArray(i,$)}get element(){return this._def.type}min(n,m){return new r({...this._def,minLength:{value:n,message:u.toString(m)}})}max(n,m){return new r({...this._def,maxLength:{value:n,message:u.toString(m)}})}length(n,m){return new r({...this._def,exactLength:{value:n,message:u.toString(m)}})}nonempty(n){return this.min(1,n)}}r.create=(n,m)=>{return new r({type:n,minLength:null,maxLength:null,exactLength:null,typeName:W.ZodArray,...V(m)})};function $0(n){if(n instanceof U){let m={};for(let i in n.shape){let b=n.shape[i];m[i]=a.create($0(b))}return new U({...n._def,shape:()=>m})}else if(n instanceof r)return new r({...n._def,type:$0(n.element)});else if(n instanceof a)return a.create($0(n.unwrap()));else if(n instanceof xn)return xn.create($0(n.unwrap()));else if(n instanceof Yn)return Yn.create(n.items.map((m)=>$0(m)));else return n}class U extends K{constructor(){super(...arguments);this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let n=this._def.shape(),m=A.objectKeys(n);return this._cached={shape:n,keys:m},this._cached}_parse(n){if(this._getType(n)!==O.object){let X=this._getOrReturnCtx(n);return G(X,{code:Q.invalid_type,expected:O.object,received:X.parsedType}),v}let{status:i,ctx:b}=this._processInputParams(n),{shape:$,keys:o}=this._getCached(),_=[];if(!(this._def.catchall instanceof Xn&&this._def.unknownKeys==="strip")){for(let X in b.data)if(!o.includes(X))_.push(X)}let J=[];for(let X of o){let Y=$[X],H=b.data[X];J.push({key:{status:"valid",value:X},value:Y._parse(new e(b,H,b.path,X)),alwaysSet:X in b.data})}if(this._def.catchall instanceof Xn){let X=this._def.unknownKeys;if(X==="passthrough")for(let Y of _)J.push({key:{status:"valid",value:Y},value:{status:"valid",value:b.data[Y]}});else if(X==="strict"){if(_.length>0)G(b,{code:Q.unrecognized_keys,keys:_}),i.dirty()}else if(X==="strip");else throw Error("Internal ZodObject error: invalid unknownKeys value.")}else{let X=this._def.catchall;for(let Y of _){let H=b.data[Y];J.push({key:{status:"valid",value:Y},value:X._parse(new e(b,H,b.path,Y)),alwaysSet:Y in b.data})}}if(b.common.async)return Promise.resolve().then(async()=>{let X=[];for(let Y of J){let H=await Y.key,q=await Y.value;X.push({key:H,value:q,alwaysSet:Y.alwaysSet})}return X}).then((X)=>{return k.mergeObjectSync(i,X)});else return k.mergeObjectSync(i,J)}get shape(){return this._def.shape()}strict(n){return u.errToObj,new U({...this._def,unknownKeys:"strict",...n!==void 0?{errorMap:(m,i)=>{let b=this._def.errorMap?.(m,i).message??i.defaultError;if(m.code==="unrecognized_keys")return{message:u.errToObj(n).message??b};return{message:b}}}:{}})}strip(){return new U({...this._def,unknownKeys:"strip"})}passthrough(){return new U({...this._def,unknownKeys:"passthrough"})}extend(n){return new U({...this._def,shape:()=>({...this._def.shape(),...n})})}merge(n){return new U({unknownKeys:n._def.unknownKeys,catchall:n._def.catchall,shape:()=>({...this._def.shape(),...n._def.shape()}),typeName:W.ZodObject})}setKey(n,m){return this.augment({[n]:m})}catchall(n){return new U({...this._def,catchall:n})}pick(n){let m={};for(let i of A.objectKeys(n))if(n[i]&&this.shape[i])m[i]=this.shape[i];return new U({...this._def,shape:()=>m})}omit(n){let m={};for(let i of A.objectKeys(this.shape))if(!n[i])m[i]=this.shape[i];return new U({...this._def,shape:()=>m})}deepPartial(){return $0(this)}partial(n){let m={};for(let i of A.objectKeys(this.shape)){let b=this.shape[i];if(n&&!n[i])m[i]=b;else m[i]=b.optional()}return new U({...this._def,shape:()=>m})}required(n){let m={};for(let i of A.objectKeys(this.shape))if(n&&!n[i])m[i]=this.shape[i];else{let $=this.shape[i];while($ instanceof a)$=$._def.innerType;m[i]=$}return new U({...this._def,shape:()=>m})}keyof(){return o1(A.objectKeys(this.shape))}}U.create=(n,m)=>{return new U({shape:()=>n,unknownKeys:"strip",catchall:Xn.create(),typeName:W.ZodObject,...V(m)})};U.strictCreate=(n,m)=>{return new U({shape:()=>n,unknownKeys:"strict",catchall:Xn.create(),typeName:W.ZodObject,...V(m)})};U.lazycreate=(n,m)=>{return new U({shape:n,unknownKeys:"strip",catchall:Xn.create(),typeName:W.ZodObject,...V(m)})};class Y0 extends K{_parse(n){let{ctx:m}=this._processInputParams(n),i=this._def.options;function b($){for(let _ of $)if(_.result.status==="valid")return _.result;for(let _ of $)if(_.result.status==="dirty")return m.common.issues.push(..._.ctx.common.issues),_.result;let o=$.map((_)=>new z(_.ctx.common.issues));return G(m,{code:Q.invalid_union,unionErrors:o}),v}if(m.common.async)return Promise.all(i.map(async($)=>{let o={...m,common:{...m.common,issues:[]},parent:null};return{result:await $._parseAsync({data:m.data,path:m.path,parent:o}),ctx:o}})).then(b);else{let $=void 0,o=[];for(let J of i){let X={...m,common:{...m.common,issues:[]},parent:null},Y=J._parseSync({data:m.data,path:m.path,parent:X});if(Y.status==="valid")return Y;else if(Y.status==="dirty"&&!$)$={result:Y,ctx:X};if(X.common.issues.length)o.push(X.common.issues)}if($)return m.common.issues.push(...$.ctx.common.issues),$.result;let _=o.map((J)=>new z(J));return G(m,{code:Q.invalid_union,unionErrors:_}),v}}get options(){return this._def.options}}Y0.create=(n,m)=>{return new Y0({options:n,typeName:W.ZodUnion,...V(m)})};var Mn=(n)=>{if(n instanceof Q0)return Mn(n.schema);else if(n instanceof s)return Mn(n.innerType());else if(n instanceof W0)return[n.value];else if(n instanceof An)return n.options;else if(n instanceof q0)return A.objectValues(n.enum);else if(n instanceof gn)return Mn(n._def.innerType);else if(n instanceof J0)return[void 0];else if(n instanceof X0)return[null];else if(n instanceof a)return[void 0,...Mn(n.unwrap())];else if(n instanceof xn)return[null,...Mn(n.unwrap())];else if(n instanceof Ym)return Mn(n.unwrap());else if(n instanceof G0)return Mn(n.unwrap());else if(n instanceof O0)return Mn(n._def.innerType);else return[]};class Xm extends K{_parse(n){let{ctx:m}=this._processInputParams(n);if(m.parsedType!==O.object)return G(m,{code:Q.invalid_type,expected:O.object,received:m.parsedType}),v;let i=this.discriminator,b=m.data[i],$=this.optionsMap.get(b);if(!$)return G(m,{code:Q.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[i]}),v;if(m.common.async)return $._parseAsync({data:m.data,path:m.path,parent:m});else return $._parseSync({data:m.data,path:m.path,parent:m})}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(n,m,i){let b=new Map;for(let $ of m){let o=Mn($.shape[n]);if(!o.length)throw Error(`A discriminator value for key \`${n}\` could not be extracted from all schema options`);for(let _ of o){if(b.has(_))throw Error(`Discriminator property ${String(n)} has duplicate value ${String(_)}`);b.set(_,$)}}return new Xm({typeName:W.ZodDiscriminatedUnion,discriminator:n,options:m,optionsMap:b,...V(i)})}}function ii(n,m){let i=Jn(n),b=Jn(m);if(n===m)return{valid:!0,data:n};else if(i===O.object&&b===O.object){let $=A.objectKeys(m),o=A.objectKeys(n).filter((J)=>$.indexOf(J)!==-1),_={...n,...m};for(let J of o){let X=ii(n[J],m[J]);if(!X.valid)return{valid:!1};_[J]=X.data}return{valid:!0,data:_}}else if(i===O.array&&b===O.array){if(n.length!==m.length)return{valid:!1};let $=[];for(let o=0;o<n.length;o++){let _=n[o],J=m[o],X=ii(_,J);if(!X.valid)return{valid:!1};$.push(X.data)}return{valid:!0,data:$}}else if(i===O.date&&b===O.date&&+n===+m)return{valid:!0,data:n};else return{valid:!1}}class H0 extends K{_parse(n){let{status:m,ctx:i}=this._processInputParams(n),b=($,o)=>{if(_m($)||_m(o))return v;let _=ii($.value,o.value);if(!_.valid)return G(i,{code:Q.invalid_intersection_types}),v;if(Jm($)||Jm(o))m.dirty();return{status:m.value,value:_.data}};if(i.common.async)return Promise.all([this._def.left._parseAsync({data:i.data,path:i.path,parent:i}),this._def.right._parseAsync({data:i.data,path:i.path,parent:i})]).then(([$,o])=>b($,o));else return b(this._def.left._parseSync({data:i.data,path:i.path,parent:i}),this._def.right._parseSync({data:i.data,path:i.path,parent:i}))}}H0.create=(n,m,i)=>{return new H0({left:n,right:m,typeName:W.ZodIntersection,...V(i)})};class Yn extends K{_parse(n){let{status:m,ctx:i}=this._processInputParams(n);if(i.parsedType!==O.array)return G(i,{code:Q.invalid_type,expected:O.array,received:i.parsedType}),v;if(i.data.length<this._def.items.length)return G(i,{code:Q.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),v;if(!this._def.rest&&i.data.length>this._def.items.length)G(i,{code:Q.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),m.dirty();let $=[...i.data].map((o,_)=>{let J=this._def.items[_]||this._def.rest;if(!J)return null;return J._parse(new e(i,o,i.path,_))}).filter((o)=>!!o);if(i.common.async)return Promise.all($).then((o)=>{return k.mergeArray(m,o)});else return k.mergeArray(m,$)}get items(){return this._def.items}rest(n){return new Yn({...this._def,rest:n})}}Yn.create=(n,m)=>{if(!Array.isArray(n))throw Error("You must pass an array of schemas to z.tuple([ ... ])");return new Yn({items:n,typeName:W.ZodTuple,rest:null,...V(m)})};class S0 extends K{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(n){let{status:m,ctx:i}=this._processInputParams(n);if(i.parsedType!==O.object)return G(i,{code:Q.invalid_type,expected:O.object,received:i.parsedType}),v;let b=[],$=this._def.keyType,o=this._def.valueType;for(let _ in i.data)b.push({key:$._parse(new e(i,_,i.path,_)),value:o._parse(new e(i,i.data[_],i.path,_)),alwaysSet:_ in i.data});if(i.common.async)return k.mergeObjectAsync(m,b);else return k.mergeObjectSync(m,b)}get element(){return this._def.valueType}static create(n,m,i){if(m instanceof K)return new S0({keyType:n,valueType:m,typeName:W.ZodRecord,...V(i)});return new S0({keyType:d.create(),valueType:n,typeName:W.ZodRecord,...V(m)})}}class f0 extends K{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(n){let{status:m,ctx:i}=this._processInputParams(n);if(i.parsedType!==O.map)return G(i,{code:Q.invalid_type,expected:O.map,received:i.parsedType}),v;let b=this._def.keyType,$=this._def.valueType,o=[...i.data.entries()].map(([_,J],X)=>{return{key:b._parse(new e(i,_,i.path,[X,"key"])),value:$._parse(new e(i,J,i.path,[X,"value"]))}});if(i.common.async){let _=new Map;return Promise.resolve().then(async()=>{for(let J of o){let X=await J.key,Y=await J.value;if(X.status==="aborted"||Y.status==="aborted")return v;if(X.status==="dirty"||Y.status==="dirty")m.dirty();_.set(X.value,Y.value)}return{status:m.value,value:_}})}else{let _=new Map;for(let J of o){let{key:X,value:Y}=J;if(X.status==="aborted"||Y.status==="aborted")return v;if(X.status==="dirty"||Y.status==="dirty")m.dirty();_.set(X.value,Y.value)}return{status:m.value,value:_}}}}f0.create=(n,m,i)=>{return new f0({valueType:m,keyType:n,typeName:W.ZodMap,...V(i)})};class zn extends K{_parse(n){let{status:m,ctx:i}=this._processInputParams(n);if(i.parsedType!==O.set)return G(i,{code:Q.invalid_type,expected:O.set,received:i.parsedType}),v;let b=this._def;if(b.minSize!==null){if(i.data.size<b.minSize.value)G(i,{code:Q.too_small,minimum:b.minSize.value,type:"set",inclusive:!0,exact:!1,message:b.minSize.message}),m.dirty()}if(b.maxSize!==null){if(i.data.size>b.maxSize.value)G(i,{code:Q.too_big,maximum:b.maxSize.value,type:"set",inclusive:!0,exact:!1,message:b.maxSize.message}),m.dirty()}let $=this._def.valueType;function o(J){let X=new Set;for(let Y of J){if(Y.status==="aborted")return v;if(Y.status==="dirty")m.dirty();X.add(Y.value)}return{status:m.value,value:X}}let _=[...i.data.values()].map((J,X)=>$._parse(new e(i,J,i.path,X)));if(i.common.async)return Promise.all(_).then((J)=>o(J));else return o(_)}min(n,m){return new zn({...this._def,minSize:{value:n,message:u.toString(m)}})}max(n,m){return new zn({...this._def,maxSize:{value:n,message:u.toString(m)}})}size(n,m){return this.min(n,m).max(n,m)}nonempty(n){return this.min(1,n)}}zn.create=(n,m)=>{return new zn({valueType:n,minSize:null,maxSize:null,typeName:W.ZodSet,...V(m)})};class o0 extends K{constructor(){super(...arguments);this.validate=this.implement}_parse(n){let{ctx:m}=this._processInputParams(n);if(m.parsedType!==O.function)return G(m,{code:Q.invalid_type,expected:O.function,received:m.parsedType}),v;function i(_,J){return R0({data:_,path:m.path,errorMaps:[m.common.contextualErrorMap,m.schemaErrorMap,b0(),Gn].filter((X)=>!!X),issueData:{code:Q.invalid_arguments,argumentsError:J}})}function b(_,J){return R0({data:_,path:m.path,errorMaps:[m.common.contextualErrorMap,m.schemaErrorMap,b0(),Gn].filter((X)=>!!X),issueData:{code:Q.invalid_return_type,returnTypeError:J}})}let $={errorMap:m.common.contextualErrorMap},o=m.data;if(this._def.returns instanceof Zn){let _=this;return I(async function(...J){let X=new z([]),Y=await _._def.args.parseAsync(J,$).catch((M)=>{throw X.addIssue(i(J,M)),X}),H=await Reflect.apply(o,this,Y);return await _._def.returns._def.type.parseAsync(H,$).catch((M)=>{throw X.addIssue(b(H,M)),X})})}else{let _=this;return I(function(...J){let X=_._def.args.safeParse(J,$);if(!X.success)throw new z([i(J,X.error)]);let Y=Reflect.apply(o,this,X.data),H=_._def.returns.safeParse(Y,$);if(!H.success)throw new z([b(Y,H.error)]);return H.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...n){return new o0({...this._def,args:Yn.create(n).rest(Bn.create())})}returns(n){return new o0({...this._def,returns:n})}implement(n){return this.parse(n)}strictImplement(n){return this.parse(n)}static create(n,m,i){return new o0({args:n?n:Yn.create([]).rest(Bn.create()),returns:m||Bn.create(),typeName:W.ZodFunction,...V(i)})}}class Q0 extends K{get schema(){return this._def.getter()}_parse(n){let{ctx:m}=this._processInputParams(n);return this._def.getter()._parse({data:m.data,path:m.path,parent:m})}}Q0.create=(n,m)=>{return new Q0({getter:n,typeName:W.ZodLazy,...V(m)})};class W0 extends K{_parse(n){if(n.data!==this._def.value){let m=this._getOrReturnCtx(n);return G(m,{received:m.data,code:Q.invalid_literal,expected:this._def.value}),v}return{status:"valid",value:n.data}}get value(){return this._def.value}}W0.create=(n,m)=>{return new W0({value:n,typeName:W.ZodLiteral,...V(m)})};function o1(n,m){return new An({values:n,typeName:W.ZodEnum,...V(m)})}class An extends K{_parse(n){if(typeof n.data!=="string"){let m=this._getOrReturnCtx(n),i=this._def.values;return G(m,{expected:A.joinValues(i),received:m.parsedType,code:Q.invalid_type}),v}if(!this._cache)this._cache=new Set(this._def.values);if(!this._cache.has(n.data)){let m=this._getOrReturnCtx(n),i=this._def.values;return G(m,{received:m.data,code:Q.invalid_enum_value,options:i}),v}return I(n.data)}get options(){return this._def.values}get enum(){let n={};for(let m of this._def.values)n[m]=m;return n}get Values(){let n={};for(let m of this._def.values)n[m]=m;return n}get Enum(){let n={};for(let m of this._def.values)n[m]=m;return n}extract(n,m=this._def){return An.create(n,{...this._def,...m})}exclude(n,m=this._def){return An.create(this.options.filter((i)=>!n.includes(i)),{...this._def,...m})}}An.create=o1;class q0 extends K{_parse(n){let m=A.getValidEnumValues(this._def.values),i=this._getOrReturnCtx(n);if(i.parsedType!==O.string&&i.parsedType!==O.number){let b=A.objectValues(m);return G(i,{expected:A.joinValues(b),received:i.parsedType,code:Q.invalid_type}),v}if(!this._cache)this._cache=new Set(A.getValidEnumValues(this._def.values));if(!this._cache.has(n.data)){let b=A.objectValues(m);return G(i,{received:i.data,code:Q.invalid_enum_value,options:b}),v}return I(n.data)}get enum(){return this._def.values}}q0.create=(n,m)=>{return new q0({values:n,typeName:W.ZodNativeEnum,...V(m)})};class Zn extends K{unwrap(){return this._def.type}_parse(n){let{ctx:m}=this._processInputParams(n);if(m.parsedType!==O.promise&&m.common.async===!1)return G(m,{code:Q.invalid_type,expected:O.promise,received:m.parsedType}),v;let i=m.parsedType===O.promise?m.data:Promise.resolve(m.data);return I(i.then((b)=>{return this._def.type.parseAsync(b,{path:m.path,errorMap:m.common.contextualErrorMap})}))}}Zn.create=(n,m)=>{return new Zn({type:n,typeName:W.ZodPromise,...V(m)})};class s extends K{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===W.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(n){let{status:m,ctx:i}=this._processInputParams(n),b=this._def.effect||null,$={addIssue:(o)=>{if(G(i,o),o.fatal)m.abort();else m.dirty()},get path(){return i.path}};if($.addIssue=$.addIssue.bind($),b.type==="preprocess"){let o=b.transform(i.data,$);if(i.common.async)return Promise.resolve(o).then(async(_)=>{if(m.value==="aborted")return v;let J=await this._def.schema._parseAsync({data:_,path:i.path,parent:i});if(J.status==="aborted")return v;if(J.status==="dirty")return In(J.value);if(m.value==="dirty")return In(J.value);return J});else{if(m.value==="aborted")return v;let _=this._def.schema._parseSync({data:o,path:i.path,parent:i});if(_.status==="aborted")return v;if(_.status==="dirty")return In(_.value);if(m.value==="dirty")return In(_.value);return _}}if(b.type==="refinement"){let o=(_)=>{let J=b.refinement(_,$);if(i.common.async)return Promise.resolve(J);if(J instanceof Promise)throw Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return _};if(i.common.async===!1){let _=this._def.schema._parseSync({data:i.data,path:i.path,parent:i});if(_.status==="aborted")return v;if(_.status==="dirty")m.dirty();return o(_.value),{status:m.value,value:_.value}}else return this._def.schema._parseAsync({data:i.data,path:i.path,parent:i}).then((_)=>{if(_.status==="aborted")return v;if(_.status==="dirty")m.dirty();return o(_.value).then(()=>{return{status:m.value,value:_.value}})})}if(b.type==="transform")if(i.common.async===!1){let o=this._def.schema._parseSync({data:i.data,path:i.path,parent:i});if(!Ln(o))return v;let _=b.transform(o.value,$);if(_ instanceof Promise)throw Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:m.value,value:_}}else return this._def.schema._parseAsync({data:i.data,path:i.path,parent:i}).then((o)=>{if(!Ln(o))return v;return Promise.resolve(b.transform(o.value,$)).then((_)=>({status:m.value,value:_}))});A.assertNever(b)}}s.create=(n,m,i)=>{return new s({schema:n,typeName:W.ZodEffects,effect:m,...V(i)})};s.createWithPreprocess=(n,m,i)=>{return new s({schema:m,effect:{type:"preprocess",transform:n},typeName:W.ZodEffects,...V(i)})};class a extends K{_parse(n){if(this._getType(n)===O.undefined)return I(void 0);return this._def.innerType._parse(n)}unwrap(){return this._def.innerType}}a.create=(n,m)=>{return new a({innerType:n,typeName:W.ZodOptional,...V(m)})};class xn extends K{_parse(n){if(this._getType(n)===O.null)return I(null);return this._def.innerType._parse(n)}unwrap(){return this._def.innerType}}xn.create=(n,m)=>{return new xn({innerType:n,typeName:W.ZodNullable,...V(m)})};class gn extends K{_parse(n){let{ctx:m}=this._processInputParams(n),i=m.data;if(m.parsedType===O.undefined)i=this._def.defaultValue();return this._def.innerType._parse({data:i,path:m.path,parent:m})}removeDefault(){return this._def.innerType}}gn.create=(n,m)=>{return new gn({innerType:n,typeName:W.ZodDefault,defaultValue:typeof m.default==="function"?m.default:()=>m.default,...V(m)})};class O0 extends K{_parse(n){let{ctx:m}=this._processInputParams(n),i={...m,common:{...m.common,issues:[]}},b=this._def.innerType._parse({data:i.data,path:i.path,parent:{...i}});if(w0(b))return b.then(($)=>{return{status:"valid",value:$.status==="valid"?$.value:this._def.catchValue({get error(){return new z(i.common.issues)},input:i.data})}});else return{status:"valid",value:b.status==="valid"?b.value:this._def.catchValue({get error(){return new z(i.common.issues)},input:i.data})}}removeCatch(){return this._def.innerType}}O0.create=(n,m)=>{return new O0({innerType:n,typeName:W.ZodCatch,catchValue:typeof m.catch==="function"?m.catch:()=>m.catch,...V(m)})};class p0 extends K{_parse(n){if(this._getType(n)!==O.nan){let i=this._getOrReturnCtx(n);return G(i,{code:Q.invalid_type,expected:O.nan,received:i.parsedType}),v}return{status:"valid",value:n.data}}}p0.create=(n)=>{return new p0({typeName:W.ZodNaN,...V(n)})};var e3=Symbol("zod_brand");class Ym extends K{_parse(n){let{ctx:m}=this._processInputParams(n),i=m.data;return this._def.type._parse({data:i,path:m.path,parent:m})}unwrap(){return this._def.type}}class F0 extends K{_parse(n){let{status:m,ctx:i}=this._processInputParams(n);if(i.common.async)return(async()=>{let $=await this._def.in._parseAsync({data:i.data,path:i.path,parent:i});if($.status==="aborted")return v;if($.status==="dirty")return m.dirty(),In($.value);else return this._def.out._parseAsync({data:$.value,path:i.path,parent:i})})();else{let b=this._def.in._parseSync({data:i.data,path:i.path,parent:i});if(b.status==="aborted")return v;if(b.status==="dirty")return m.dirty(),{status:"dirty",value:b.value};else return this._def.out._parseSync({data:b.value,path:i.path,parent:i})}}static create(n,m){return new F0({in:n,out:m,typeName:W.ZodPipeline})}}class G0 extends K{_parse(n){let m=this._def.innerType._parse(n),i=(b)=>{if(Ln(b))b.value=Object.freeze(b.value);return b};return w0(m)?m.then((b)=>i(b)):i(m)}unwrap(){return this._def.innerType}}G0.create=(n,m)=>{return new G0({innerType:n,typeName:W.ZodReadonly,...V(m)})};function i1(n,m){let i=typeof n==="function"?n(m):typeof n==="string"?{message:n}:n;return typeof i==="string"?{message:i}:i}function _1(n,m={},i){if(n)return cn.create().superRefine((b,$)=>{let o=n(b);if(o instanceof Promise)return o.then((_)=>{if(!_){let J=i1(m,b),X=J.fatal??i??!0;$.addIssue({code:"custom",...J,fatal:X})}});if(!o){let _=i1(m,b),J=_.fatal??i??!0;$.addIssue({code:"custom",..._,fatal:J})}return});return cn.create()}var s3={object:U.lazycreate},W;(function(n){n.ZodString="ZodString",n.ZodNumber="ZodNumber",n.ZodNaN="ZodNaN",n.ZodBigInt="ZodBigInt",n.ZodBoolean="ZodBoolean",n.ZodDate="ZodDate",n.ZodSymbol="ZodSymbol",n.ZodUndefined="ZodUndefined",n.ZodNull="ZodNull",n.ZodAny="ZodAny",n.ZodUnknown="ZodUnknown",n.ZodNever="ZodNever",n.ZodVoid="ZodVoid",n.ZodArray="ZodArray",n.ZodObject="ZodObject",n.ZodUnion="ZodUnion",n.ZodDiscriminatedUnion="ZodDiscriminatedUnion",n.ZodIntersection="ZodIntersection",n.ZodTuple="ZodTuple",n.ZodRecord="ZodRecord",n.ZodMap="ZodMap",n.ZodSet="ZodSet",n.ZodFunction="ZodFunction",n.ZodLazy="ZodLazy",n.ZodLiteral="ZodLiteral",n.ZodEnum="ZodEnum",n.ZodEffects="ZodEffects",n.ZodNativeEnum="ZodNativeEnum",n.ZodOptional="ZodOptional",n.ZodNullable="ZodNullable",n.ZodDefault="ZodDefault",n.ZodCatch="ZodCatch",n.ZodPromise="ZodPromise",n.ZodBranded="ZodBranded",n.ZodPipeline="ZodPipeline",n.ZodReadonly="ZodReadonly"})(W||(W={}));var n4=(n,m={message:`Input not instance of ${n.name}`})=>_1((i)=>i instanceof n,m),J1=d.create,X1=Cn.create,m4=p0.create,i4=Kn.create,Y1=_0.create,b4=yn.create,w4=E0.create,$4=J0.create,o4=X0.create,_4=cn.create,J4=Bn.create,X4=Xn.create,Y4=U0.create,H4=r.create,Q4=U.create,W4=U.strictCreate,q4=Y0.create,O4=Xm.create,G4=H0.create,M4=Yn.create,x4=S0.create,l4=f0.create,u4=zn.create,j4=o0.create,v4=Q0.create,D4=W0.create,N4=An.create,V4=q0.create,L4=Zn.create,B4=s.create,C4=a.create,K4=xn.create,A4=s.createWithPreprocess,g4=F0.create,R4=()=>J1().optional(),E4=()=>X1().optional(),U4=()=>Y1().optional(),S4={string:(n)=>d.create({...n,coerce:!0}),number:(n)=>Cn.create({...n,coerce:!0}),boolean:(n)=>_0.create({...n,coerce:!0}),bigint:(n)=>Kn.create({...n,coerce:!0}),date:(n)=>yn.create({...n,coerce:!0})};var f4=v;function p4(n,m){if(!(m instanceof U))return n;let i=m.shape,b={...n};for(let[$,o]of Object.entries(i)){if(typeof b[$]!=="number")continue;let _=o;while(_ instanceof a||_ instanceof gn)_=_._def.innerType;if(_ instanceof d)b[$]=String(b[$])}return b}var F4=30000;class Hm{registry;constructor(n){this.registry=n}async execute(n){let m=Date.now(),{command:i,args:b}=n,$=this.registry.get(i);if(!$)return Vn(i,"core",new g0(i),Date.now()-m);let o=$.parameters.safeParse(p4(b,$.parameters));if(!o.success){let X=new em(`Invalid arguments for command '${i}'`,o.error.errors);return Vn(i,$.pluginName,X,Date.now()-m)}let _=$.timeout??F4,J;try{let X=await Promise.race([$.handler(o.data),new Promise((Y,H)=>{J=setTimeout(()=>H(new om(i,_)),_)})]);return clearTimeout(J),si(i,$.pluginName,X,Date.now()-m)}catch(X){if(clearTimeout(J),X instanceof om)return Vn(i,$.pluginName,X,Date.now()-m);if(X instanceof l)return Vn(i,$.pluginName,X,Date.now()-m);let Y=X instanceof Error?new wm(X.message,X.stack):new wm(String(X));return Vn(i,$.pluginName,Y,Date.now()-m)}}}function H1(n){if(n==="true")return!0;if(n==="false")return!1;if(n==="0"||/^0\.\d+$/.test(n))return Number(n);if(n.startsWith("0"))return n;if(n!==""&&!isNaN(Number(n)))return Number(n);return n}function W1(n){let m={},i="",b=0;if(n.length>0&&!n[0].startsWith("--"))i=n[0],b=1;while(b<n.length){let $=n[b];if($.startsWith("--")){let o=$.slice(2);if(o.includes("=")){let _=o.indexOf("="),J=o.slice(0,_),X=o.slice(_+1);Q1(m,J,H1(X))}else if(b+1<n.length&&!n[b+1].startsWith("--"))Q1(m,o,H1(n[b+1])),b++;else m[o]=!0}b++}return{command:i,args:m}}function Q1(n,m,i){let b=n[m];if(b===void 0)n[m]=i;else if(Array.isArray(b))n[m]=[...b,i];else if(typeof b==="string")n[m]=[b,i]}var h4={version:"1.0.0"};async function P4(n,m){try{if(n.initialize)await n.initialize(h4);let i=m;for(let b of n.commands)i=i.register(b);return{registry:i}}catch(i){let b=i instanceof Error?new $m(n.name,i.message,i):new $m(n.name,String(i));return{registry:m,error:b}}}async function bi(n,m=new Tn){let i=m,b=[];for(let $ of n){let o=await P4($,i);if(i=o.registry,o.error)b.push({pluginName:$.name,error:o.error})}return{registry:i,errors:b}}import{readFileSync as k4,writeFileSync as T4,mkdirSync as I4,existsSync as q1}from"node:fs";import{homedir as y4}from"node:os";import{join as O1}from"node:path";var wi=process.env.YUNKE_CONFIG_DIR??O1(y4(),".yunke"),Qm=O1(wi,"plugins.json");function G1(){if(!q1(wi))I4(wi,{recursive:!0})}function tn(){if(G1(),!q1(Qm))return{version:"1",plugins:[]};try{let n=k4(Qm,"utf-8");return JSON.parse(n)}catch(n){return process.stderr.write(`Warning: Failed to parse plugin config at ${Qm}: ${n instanceof Error?n.message:String(n)}
7
- `),{version:"1",plugins:[]}}}function Wm(n){G1(),T4(Qm,JSON.stringify(n,null,2),"utf-8")}function M1(n){let m=tn(),i=m.plugins.findIndex(($)=>$.name===n.name),b={...n,installedAt:new Date().toISOString()};if(i>=0){let $=[...m.plugins];$[i]=b,Wm({...m,plugins:$})}else Wm({...m,plugins:[...m.plugins,b]})}function x1(n){let m=tn(),i=m.plugins.filter((b)=>b.name!==n);if(i.length!==m.plugins.length)return Wm({...m,plugins:i}),!0;return!1}function $i(n,m){let i=tn();if(i.plugins.findIndex((o)=>o.name===n)<0)return!1;let $=i.plugins.map((o)=>o.name===n?{...o,enabled:m}:o);return Wm({...i,plugins:$}),!0}import{readFileSync as c4,writeFileSync as z4,existsSync as l1,mkdirSync as Z4}from"node:fs";import{homedir as t4}from"node:os";import{join as u1}from"node:path";var ln={agenphone:!1,weixiaozhu:!1},oi=process.env.YUNKE_CONFIG_DIR??u1(t4(),".yunke"),_i=u1(oi,"features.json");function qm(){if(!l1(_i))return{version:"1",features:{...ln}};try{let n=c4(_i,"utf-8"),m=JSON.parse(n);return{...m,features:{...ln,...m.features}}}catch{return{version:"1",features:{...ln}}}}function d4(n){if(!l1(oi))Z4(oi,{recursive:!0});z4(_i,JSON.stringify(n,null,2),"utf-8")}function j1(n){return qm().features[n]??!1}function Ji(n,m){let i=qm();d4({...i,features:{...i.features,[n]:m}})}var D1=Symbol("Let zodToJsonSchema decide on which parser to use");var v1={name:void 0,$refStrategy:"root",basePath:["#"],effectStrategy:"input",pipeStrategy:"all",dateStrategy:"format:date-time",mapStrategy:"entries",removeAdditionalStrategy:"passthrough",allowedAdditionalProperties:!0,rejectedAdditionalProperties:!1,definitionPath:"definitions",target:"jsonSchema7",strictUnions:!1,definitions:{},errorMessages:!1,markdownDescription:!1,patternStrategy:"escape",applyRegexFlags:!1,emailStrategy:"format:email",base64Strategy:"contentEncoding:base64",nameStrategy:"ref",openAiAnyTypeName:"OpenAiAnyType"},N1=(n)=>typeof n==="string"?{...v1,name:n}:{...v1,...n};var V1=(n)=>{let m=N1(n),i=m.name!==void 0?[...m.basePath,m.definitionPath,m.name]:m.basePath;return{...m,flags:{hasReferencedOpenAiAnyType:!1},currentPath:i,propertyPath:void 0,seen:new Map(Object.entries(m.definitions).map(([b,$])=>[$._def,{def:$._def,path:[...m.basePath,m.definitionPath,b],jsonSchema:void 0}]))}};function Xi(n,m,i,b){if(!b?.errorMessages)return;if(i)n.errorMessage={...n.errorMessage,[m]:i}}function R(n,m,i,b,$){n[m]=i,Xi(n,m,b,$)}var Om=(n,m)=>{let i=0;for(;i<n.length&&i<m.length;i++)if(n[i]!==m[i])break;return[(n.length-i).toString(),...m.slice(i)].join("/")};function p(n){if(n.target!=="openAi")return{};let m=[...n.basePath,n.definitionPath,n.openAiAnyTypeName];return n.flags.hasReferencedOpenAiAnyType=!0,{$ref:n.$refStrategy==="relative"?Om(m,n.currentPath):m.join("/")}}function L1(n,m){let i={type:"array"};if(n.type?._def&&n.type?._def?.typeName!==W.ZodAny)i.items=D(n.type._def,{...m,currentPath:[...m.currentPath,"items"]});if(n.minLength)R(i,"minItems",n.minLength.value,n.minLength.message,m);if(n.maxLength)R(i,"maxItems",n.maxLength.value,n.maxLength.message,m);if(n.exactLength)R(i,"minItems",n.exactLength.value,n.exactLength.message,m),R(i,"maxItems",n.exactLength.value,n.exactLength.message,m);return i}function B1(n,m){let i={type:"integer",format:"int64"};if(!n.checks)return i;for(let b of n.checks)switch(b.kind){case"min":if(m.target==="jsonSchema7")if(b.inclusive)R(i,"minimum",b.value,b.message,m);else R(i,"exclusiveMinimum",b.value,b.message,m);else{if(!b.inclusive)i.exclusiveMinimum=!0;R(i,"minimum",b.value,b.message,m)}break;case"max":if(m.target==="jsonSchema7")if(b.inclusive)R(i,"maximum",b.value,b.message,m);else R(i,"exclusiveMaximum",b.value,b.message,m);else{if(!b.inclusive)i.exclusiveMaximum=!0;R(i,"maximum",b.value,b.message,m)}break;case"multipleOf":R(i,"multipleOf",b.value,b.message,m);break}return i}function C1(){return{type:"boolean"}}function Gm(n,m){return D(n.type._def,m)}var K1=(n,m)=>{return D(n.innerType._def,m)};function Yi(n,m,i){let b=i??m.dateStrategy;if(Array.isArray(b))return{anyOf:b.map(($,o)=>Yi(n,m,$))};switch(b){case"string":case"format:date-time":return{type:"string",format:"date-time"};case"format:date":return{type:"string",format:"date"};case"integer":return a4(n,m)}}var a4=(n,m)=>{let i={type:"integer",format:"unix-time"};if(m.target==="openApi3")return i;for(let b of n.checks)switch(b.kind){case"min":R(i,"minimum",b.value,b.message,m);break;case"max":R(i,"maximum",b.value,b.message,m);break}return i};function A1(n,m){return{...D(n.innerType._def,m),default:n.defaultValue()}}function g1(n,m){return m.effectStrategy==="input"?D(n.schema._def,m):p(m)}function R1(n){return{type:"string",enum:Array.from(n.values)}}var r4=(n)=>{if("type"in n&&n.type==="string")return!1;return"allOf"in n};function E1(n,m){let i=[D(n.left._def,{...m,currentPath:[...m.currentPath,"allOf","0"]}),D(n.right._def,{...m,currentPath:[...m.currentPath,"allOf","1"]})].filter((o)=>!!o),b=m.target==="jsonSchema2019-09"?{unevaluatedProperties:!1}:void 0,$=[];return i.forEach((o)=>{if(r4(o)){if($.push(...o.allOf),o.unevaluatedProperties===void 0)b=void 0}else{let _=o;if("additionalProperties"in o&&o.additionalProperties===!1){let{additionalProperties:J,...X}=o;_=X}else b=void 0;$.push(_)}}),$.length?{allOf:$,...b}:void 0}function U1(n,m){let i=typeof n.value;if(i!=="bigint"&&i!=="number"&&i!=="boolean"&&i!=="string")return{type:Array.isArray(n.value)?"array":"object"};if(m.target==="openApi3")return{type:i==="bigint"?"integer":i,enum:[n.value]};return{type:i==="bigint"?"integer":i,const:n.value}}var Hi=void 0,nn={cuid:/^[cC][^\s-]{8,}$/,cuid2:/^[0-9a-z]+$/,ulid:/^[0-9A-HJKMNP-TV-Z]{26}$/,email:/^(?!\.)(?!.*\.\.)([a-zA-Z0-9_'+\-\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\-]*\.)+[a-zA-Z]{2,}$/,emoji:()=>{if(Hi===void 0)Hi=RegExp("^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$","u");return Hi},uuid:/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/,ipv4:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,ipv4Cidr:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,ipv6:/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,ipv6Cidr:/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,base64:/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,base64url:/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,nanoid:/^[a-zA-Z0-9_-]{21}$/,jwt:/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/};function Mm(n,m){let i={type:"string"};if(n.checks)for(let b of n.checks)switch(b.kind){case"min":R(i,"minLength",typeof i.minLength==="number"?Math.max(i.minLength,b.value):b.value,b.message,m);break;case"max":R(i,"maxLength",typeof i.maxLength==="number"?Math.min(i.maxLength,b.value):b.value,b.message,m);break;case"email":switch(m.emailStrategy){case"format:email":mn(i,"email",b.message,m);break;case"format:idn-email":mn(i,"idn-email",b.message,m);break;case"pattern:zod":y(i,nn.email,b.message,m);break}break;case"url":mn(i,"uri",b.message,m);break;case"uuid":mn(i,"uuid",b.message,m);break;case"regex":y(i,b.regex,b.message,m);break;case"cuid":y(i,nn.cuid,b.message,m);break;case"cuid2":y(i,nn.cuid2,b.message,m);break;case"startsWith":y(i,RegExp(`^${Qi(b.value,m)}`),b.message,m);break;case"endsWith":y(i,RegExp(`${Qi(b.value,m)}$`),b.message,m);break;case"datetime":mn(i,"date-time",b.message,m);break;case"date":mn(i,"date",b.message,m);break;case"time":mn(i,"time",b.message,m);break;case"duration":mn(i,"duration",b.message,m);break;case"length":R(i,"minLength",typeof i.minLength==="number"?Math.max(i.minLength,b.value):b.value,b.message,m),R(i,"maxLength",typeof i.maxLength==="number"?Math.min(i.maxLength,b.value):b.value,b.message,m);break;case"includes":{y(i,RegExp(Qi(b.value,m)),b.message,m);break}case"ip":{if(b.version!=="v6")mn(i,"ipv4",b.message,m);if(b.version!=="v4")mn(i,"ipv6",b.message,m);break}case"base64url":y(i,nn.base64url,b.message,m);break;case"jwt":y(i,nn.jwt,b.message,m);break;case"cidr":{if(b.version!=="v6")y(i,nn.ipv4Cidr,b.message,m);if(b.version!=="v4")y(i,nn.ipv6Cidr,b.message,m);break}case"emoji":y(i,nn.emoji(),b.message,m);break;case"ulid":{y(i,nn.ulid,b.message,m);break}case"base64":{switch(m.base64Strategy){case"format:binary":{mn(i,"binary",b.message,m);break}case"contentEncoding:base64":{R(i,"contentEncoding","base64",b.message,m);break}case"pattern:zod":{y(i,nn.base64,b.message,m);break}}break}case"nanoid":y(i,nn.nanoid,b.message,m);case"toLowerCase":case"toUpperCase":case"trim":break;default:(($)=>{})(b)}return i}function Qi(n,m){return m.patternStrategy==="escape"?s4(n):n}var e4=new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");function s4(n){let m="";for(let i=0;i<n.length;i++){if(!e4.has(n[i]))m+="\\";m+=n[i]}return m}function mn(n,m,i,b){if(n.format||n.anyOf?.some(($)=>$.format)){if(!n.anyOf)n.anyOf=[];if(n.format){if(n.anyOf.push({format:n.format,...n.errorMessage&&b.errorMessages&&{errorMessage:{format:n.errorMessage.format}}}),delete n.format,n.errorMessage){if(delete n.errorMessage.format,Object.keys(n.errorMessage).length===0)delete n.errorMessage}}n.anyOf.push({format:m,...i&&b.errorMessages&&{errorMessage:{format:i}}})}else R(n,"format",m,i,b)}function y(n,m,i,b){if(n.pattern||n.allOf?.some(($)=>$.pattern)){if(!n.allOf)n.allOf=[];if(n.pattern){if(n.allOf.push({pattern:n.pattern,...n.errorMessage&&b.errorMessages&&{errorMessage:{pattern:n.errorMessage.pattern}}}),delete n.pattern,n.errorMessage){if(delete n.errorMessage.pattern,Object.keys(n.errorMessage).length===0)delete n.errorMessage}}n.allOf.push({pattern:S1(m,b),...i&&b.errorMessages&&{errorMessage:{pattern:i}}})}else R(n,"pattern",S1(m,b),i,b)}function S1(n,m){if(!m.applyRegexFlags||!n.flags)return n.source;let i={i:n.flags.includes("i"),m:n.flags.includes("m"),s:n.flags.includes("s")},b=i.i?n.source.toLowerCase():n.source,$="",o=!1,_=!1,J=!1;for(let X=0;X<b.length;X++){if(o){$+=b[X],o=!1;continue}if(i.i){if(_){if(b[X].match(/[a-z]/)){if(J)$+=b[X],$+=`${b[X-2]}-${b[X]}`.toUpperCase(),J=!1;else if(b[X+1]==="-"&&b[X+2]?.match(/[a-z]/))$+=b[X],J=!0;else $+=`${b[X]}${b[X].toUpperCase()}`;continue}}else if(b[X].match(/[a-z]/)){$+=`[${b[X]}${b[X].toUpperCase()}]`;continue}}if(i.m){if(b[X]==="^"){$+=`(^|(?<=[\r
8
- ]))`;continue}else if(b[X]==="$"){$+=`($|(?=[\r
9
- ]))`;continue}}if(i.s&&b[X]==="."){$+=_?`${b[X]}\r
10
- `:`[${b[X]}\r
11
- ]`;continue}if($+=b[X],b[X]==="\\")o=!0;else if(_&&b[X]==="]")_=!1;else if(!_&&b[X]==="[")_=!0}try{new RegExp($)}catch{return console.warn(`Could not convert regex pattern at ${m.currentPath.join("/")} to a flag-independent form! Falling back to the flag-ignorant source`),n.source}return $}function xm(n,m){if(m.target==="openAi")console.warn("Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead.");if(m.target==="openApi3"&&n.keyType?._def.typeName===W.ZodEnum)return{type:"object",required:n.keyType._def.values,properties:n.keyType._def.values.reduce((b,$)=>({...b,[$]:D(n.valueType._def,{...m,currentPath:[...m.currentPath,"properties",$]})??p(m)}),{}),additionalProperties:m.rejectedAdditionalProperties};let i={type:"object",additionalProperties:D(n.valueType._def,{...m,currentPath:[...m.currentPath,"additionalProperties"]})??m.allowedAdditionalProperties};if(m.target==="openApi3")return i;if(n.keyType?._def.typeName===W.ZodString&&n.keyType._def.checks?.length){let{type:b,...$}=Mm(n.keyType._def,m);return{...i,propertyNames:$}}else if(n.keyType?._def.typeName===W.ZodEnum)return{...i,propertyNames:{enum:n.keyType._def.values}};else if(n.keyType?._def.typeName===W.ZodBranded&&n.keyType._def.type._def.typeName===W.ZodString&&n.keyType._def.type._def.checks?.length){let{type:b,...$}=Gm(n.keyType._def,m);return{...i,propertyNames:$}}return i}function f1(n,m){if(m.mapStrategy==="record")return xm(n,m);let i=D(n.keyType._def,{...m,currentPath:[...m.currentPath,"items","items","0"]})||p(m),b=D(n.valueType._def,{...m,currentPath:[...m.currentPath,"items","items","1"]})||p(m);return{type:"array",maxItems:125,items:{type:"array",items:[i,b],minItems:2,maxItems:2}}}function p1(n){let m=n.values,b=Object.keys(n.values).filter((o)=>{return typeof m[m[o]]!=="number"}).map((o)=>m[o]),$=Array.from(new Set(b.map((o)=>typeof o)));return{type:$.length===1?$[0]==="string"?"string":"number":["string","number"],enum:b}}function F1(n){return n.target==="openAi"?void 0:{not:p({...n,currentPath:[...n.currentPath,"not"]})}}function h1(n){return n.target==="openApi3"?{enum:["null"],nullable:!0}:{type:"null"}}var h0={ZodString:"string",ZodNumber:"number",ZodBigInt:"integer",ZodBoolean:"boolean",ZodNull:"null"};function k1(n,m){if(m.target==="openApi3")return P1(n,m);let i=n.options instanceof Map?Array.from(n.options.values()):n.options;if(i.every((b)=>(b._def.typeName in h0)&&(!b._def.checks||!b._def.checks.length))){let b=i.reduce(($,o)=>{let _=h0[o._def.typeName];return _&&!$.includes(_)?[...$,_]:$},[]);return{type:b.length>1?b:b[0]}}else if(i.every((b)=>b._def.typeName==="ZodLiteral"&&!b.description)){let b=i.reduce(($,o)=>{let _=typeof o._def.value;switch(_){case"string":case"number":case"boolean":return[...$,_];case"bigint":return[...$,"integer"];case"object":if(o._def.value===null)return[...$,"null"];case"symbol":case"undefined":case"function":default:return $}},[]);if(b.length===i.length){let $=b.filter((o,_,J)=>J.indexOf(o)===_);return{type:$.length>1?$:$[0],enum:i.reduce((o,_)=>{return o.includes(_._def.value)?o:[...o,_._def.value]},[])}}}else if(i.every((b)=>b._def.typeName==="ZodEnum"))return{type:"string",enum:i.reduce((b,$)=>[...b,...$._def.values.filter((o)=>!b.includes(o))],[])};return P1(n,m)}var P1=(n,m)=>{let i=(n.options instanceof Map?Array.from(n.options.values()):n.options).map((b,$)=>D(b._def,{...m,currentPath:[...m.currentPath,"anyOf",`${$}`]})).filter((b)=>!!b&&(!m.strictUnions||typeof b==="object"&&Object.keys(b).length>0));return i.length?{anyOf:i}:void 0};function T1(n,m){if(["ZodString","ZodNumber","ZodBigInt","ZodBoolean","ZodNull"].includes(n.innerType._def.typeName)&&(!n.innerType._def.checks||!n.innerType._def.checks.length)){if(m.target==="openApi3")return{type:h0[n.innerType._def.typeName],nullable:!0};return{type:[h0[n.innerType._def.typeName],"null"]}}if(m.target==="openApi3"){let b=D(n.innerType._def,{...m,currentPath:[...m.currentPath]});if(b&&"$ref"in b)return{allOf:[b],nullable:!0};return b&&{...b,nullable:!0}}let i=D(n.innerType._def,{...m,currentPath:[...m.currentPath,"anyOf","0"]});return i&&{anyOf:[i,{type:"null"}]}}function I1(n,m){let i={type:"number"};if(!n.checks)return i;for(let b of n.checks)switch(b.kind){case"int":i.type="integer",Xi(i,"type",b.message,m);break;case"min":if(m.target==="jsonSchema7")if(b.inclusive)R(i,"minimum",b.value,b.message,m);else R(i,"exclusiveMinimum",b.value,b.message,m);else{if(!b.inclusive)i.exclusiveMinimum=!0;R(i,"minimum",b.value,b.message,m)}break;case"max":if(m.target==="jsonSchema7")if(b.inclusive)R(i,"maximum",b.value,b.message,m);else R(i,"exclusiveMaximum",b.value,b.message,m);else{if(!b.inclusive)i.exclusiveMaximum=!0;R(i,"maximum",b.value,b.message,m)}break;case"multipleOf":R(i,"multipleOf",b.value,b.message,m);break}return i}function y1(n,m){let i=m.target==="openAi",b={type:"object",properties:{}},$=[],o=n.shape();for(let J in o){let X=o[J];if(X===void 0||X._def===void 0)continue;let Y=mw(X);if(Y&&i){if(X._def.typeName==="ZodOptional")X=X._def.innerType;if(!X.isNullable())X=X.nullable();Y=!1}let H=D(X._def,{...m,currentPath:[...m.currentPath,"properties",J],propertyPath:[...m.currentPath,"properties",J]});if(H===void 0)continue;if(b.properties[J]=H,!Y)$.push(J)}if($.length)b.required=$;let _=nw(n,m);if(_!==void 0)b.additionalProperties=_;return b}function nw(n,m){if(n.catchall._def.typeName!=="ZodNever")return D(n.catchall._def,{...m,currentPath:[...m.currentPath,"additionalProperties"]});switch(n.unknownKeys){case"passthrough":return m.allowedAdditionalProperties;case"strict":return m.rejectedAdditionalProperties;case"strip":return m.removeAdditionalStrategy==="strict"?m.allowedAdditionalProperties:m.rejectedAdditionalProperties}}function mw(n){try{return n.isOptional()}catch{return!0}}var c1=(n,m)=>{if(m.currentPath.toString()===m.propertyPath?.toString())return D(n.innerType._def,m);let i=D(n.innerType._def,{...m,currentPath:[...m.currentPath,"anyOf","1"]});return i?{anyOf:[{not:p(m)},i]}:p(m)};var z1=(n,m)=>{if(m.pipeStrategy==="input")return D(n.in._def,m);else if(m.pipeStrategy==="output")return D(n.out._def,m);let i=D(n.in._def,{...m,currentPath:[...m.currentPath,"allOf","0"]}),b=D(n.out._def,{...m,currentPath:[...m.currentPath,"allOf",i?"1":"0"]});return{allOf:[i,b].filter(($)=>$!==void 0)}};function Z1(n,m){return D(n.type._def,m)}function t1(n,m){let b={type:"array",uniqueItems:!0,items:D(n.valueType._def,{...m,currentPath:[...m.currentPath,"items"]})};if(n.minSize)R(b,"minItems",n.minSize.value,n.minSize.message,m);if(n.maxSize)R(b,"maxItems",n.maxSize.value,n.maxSize.message,m);return b}function d1(n,m){if(n.rest)return{type:"array",minItems:n.items.length,items:n.items.map((i,b)=>D(i._def,{...m,currentPath:[...m.currentPath,"items",`${b}`]})).reduce((i,b)=>b===void 0?i:[...i,b],[]),additionalItems:D(n.rest._def,{...m,currentPath:[...m.currentPath,"additionalItems"]})};else return{type:"array",minItems:n.items.length,maxItems:n.items.length,items:n.items.map((i,b)=>D(i._def,{...m,currentPath:[...m.currentPath,"items",`${b}`]})).reduce((i,b)=>b===void 0?i:[...i,b],[])}}function a1(n){return{not:p(n)}}function r1(n){return p(n)}var e1=(n,m)=>{return D(n.innerType._def,m)};var s1=(n,m,i)=>{switch(m){case W.ZodString:return Mm(n,i);case W.ZodNumber:return I1(n,i);case W.ZodObject:return y1(n,i);case W.ZodBigInt:return B1(n,i);case W.ZodBoolean:return C1();case W.ZodDate:return Yi(n,i);case W.ZodUndefined:return a1(i);case W.ZodNull:return h1(i);case W.ZodArray:return L1(n,i);case W.ZodUnion:case W.ZodDiscriminatedUnion:return k1(n,i);case W.ZodIntersection:return E1(n,i);case W.ZodTuple:return d1(n,i);case W.ZodRecord:return xm(n,i);case W.ZodLiteral:return U1(n,i);case W.ZodEnum:return R1(n);case W.ZodNativeEnum:return p1(n);case W.ZodNullable:return T1(n,i);case W.ZodOptional:return c1(n,i);case W.ZodMap:return f1(n,i);case W.ZodSet:return t1(n,i);case W.ZodLazy:return()=>n.getter()._def;case W.ZodPromise:return Z1(n,i);case W.ZodNaN:case W.ZodNever:return F1(i);case W.ZodEffects:return g1(n,i);case W.ZodAny:return p(i);case W.ZodUnknown:return r1(i);case W.ZodDefault:return A1(n,i);case W.ZodBranded:return Gm(n,i);case W.ZodReadonly:return e1(n,i);case W.ZodCatch:return K1(n,i);case W.ZodPipeline:return z1(n,i);case W.ZodFunction:case W.ZodVoid:case W.ZodSymbol:return;default:return((b)=>{return})(m)}};function D(n,m,i=!1){let b=m.seen.get(n);if(m.override){let J=m.override?.(n,m,b,i);if(J!==D1)return J}if(b&&!i){let J=iw(b,m);if(J!==void 0)return J}let $={def:n,path:m.currentPath,jsonSchema:void 0};m.seen.set(n,$);let o=s1(n,n.typeName,m),_=typeof o==="function"?D(o(),m):o;if(_)bw(n,m,_);if(m.postProcess){let J=m.postProcess(_,n,m);return $.jsonSchema=_,J}return $.jsonSchema=_,_}var iw=(n,m)=>{switch(m.$refStrategy){case"root":return{$ref:n.path.join("/")};case"relative":return{$ref:Om(m.currentPath,n.path)};case"none":case"seen":{if(n.path.length<m.currentPath.length&&n.path.every((i,b)=>m.currentPath[b]===i))return console.warn(`Recursive reference detected at ${m.currentPath.join("/")}! Defaulting to any`),p(m);return m.$refStrategy==="seen"?p(m):void 0}}},bw=(n,m,i)=>{if(n.description){if(i.description=n.description,m.markdownDescription)i.markdownDescription=n.description}return i};var lm=(n,m)=>{let i=V1(m),b=typeof m==="object"&&m.definitions?Object.entries(m.definitions).reduce((X,[Y,H])=>({...X,[Y]:D(H._def,{...i,currentPath:[...i.basePath,i.definitionPath,Y]},!0)??p(i)}),{}):void 0,$=typeof m==="string"?m:m?.nameStrategy==="title"?void 0:m?.name,o=D(n._def,$===void 0?i:{...i,currentPath:[...i.basePath,i.definitionPath,$]},!1)??p(i),_=typeof m==="object"&&m.name!==void 0&&m.nameStrategy==="title"?m.name:void 0;if(_!==void 0)o.title=_;if(i.flags.hasReferencedOpenAiAnyType){if(!b)b={};if(!b[i.openAiAnyTypeName])b[i.openAiAnyTypeName]={type:["string","number","integer","boolean","array","null"],items:{$ref:i.$refStrategy==="relative"?"1":[...i.basePath,i.definitionPath,i.openAiAnyTypeName].join("/")}}}let J=$===void 0?b?{...o,[i.definitionPath]:b}:o:{$ref:[...i.$refStrategy==="relative"?[]:i.basePath,i.definitionPath,$].join("/"),[i.definitionPath]:{...b,[$]:o}};if(i.target==="jsonSchema7")J.$schema="http://json-schema.org/draft-07/schema#";else if(i.target==="jsonSchema2019-09"||i.target==="openAi")J.$schema="https://json-schema.org/draft/2019-09/schema#";if(i.target==="openAi"&&(("anyOf"in J)||("oneOf"in J)||("allOf"in J)||("type"in J)&&Array.isArray(J.type)))console.warn("Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property.");return J};bn();function nb(n){return{name:n.name,description:n.description,category:n.category,pluginName:n.pluginName,sideEffects:n.sideEffects,timeout:n.timeout??30000,parameters:lm(n.parameters,{target:"jsonSchema7"}),returns:lm(n.returns,{target:"jsonSchema7"}),examples:n.examples}}function mb(n){return{version:E,totalCommands:n.length,commands:n.map((m)=>({name:m.name,description:m.description,category:m.category,pluginName:m.pluginName,sideEffects:m.sideEffects}))}}function ib(n){return{name:"builtin:schema",version:"1.0.0",commands:[{name:"schema",description:"List all available commands with their descriptions and categories",category:"introspection",pluginName:"builtin:schema",parameters:w.object({}),returns:w.unknown(),examples:[{description:"List all commands",input:{},output:{version:"1.0.0",totalCommands:3,commands:[]}}],sideEffects:["none"],handler:async()=>{let m=n();return mb(m.getAllVisible())}},{name:"schema.detail",description:"Get detailed JSON Schema for a specific command including parameters, returns, examples, and side effects",category:"introspection",pluginName:"builtin:schema",parameters:w.object({command:w.string().describe("The command name to get schema for")}),returns:w.unknown(),examples:[{description:"Get schema for schema.detail command",input:{command:"schema.detail"},output:{name:"schema.detail",parameters:{},returns:{}}}],sideEffects:["none"],handler:async({command:m})=>{let b=n().get(m);if(!b)throw new g0(m);return nb(b)}}]}}bn();function bb(n){return{name:"builtin:help",version:"1.0.0",commands:[{name:"help",description:"Show structured help information about YunkeCLI and available commands",category:"introspection",pluginName:"builtin:help",parameters:w.object({}),returns:w.unknown(),examples:[{description:"Get help",input:{},output:{name:"yunke-cli",version:"1.0.0",commands:[]}}],sideEffects:["none"],handler:async()=>{let i=n().getAllVisible(),b=[...new Set(i.map(($)=>$.category))];return{name:"yunke-cli",version:E,description:"AI-native pluggable CLI framework",usage:"yunke <command> [--option value]",globalOptions:[{name:"--help",description:"Show this help message"}],categories:b.map(($)=>({name:$,commands:i.filter((o)=>o.category===$).map((o)=>({name:o.name,description:o.description}))})),tips:["Use 'yunke schema' to get machine-readable command catalog","Use 'yunke schema.detail --command <name>' to get full JSON Schema for a command"]}}}]}}import{existsSync as Jw,realpathSync as Xw}from"node:fs";import{extname as Yw}from"node:path";function wb(){return{name:"builtin:plugin-manager",version:"1.0.0",commands:[{name:"plugin.list",description:"List all installed plugins with their status",category:"plugin-management",pluginName:"builtin:plugin-manager",parameters:w.object({}),returns:w.unknown(),examples:[{description:"List plugins",input:{},output:{plugins:[]}}],sideEffects:["filesystem"],handler:async()=>{return{plugins:tn().plugins}}},{name:"plugin.install",description:"Install a plugin from a file system path",category:"plugin-management",pluginName:"builtin:plugin-manager",parameters:w.object({path:w.string().describe("Absolute path to the plugin file (.js or .ts)"),name:w.string().optional().describe("Override plugin name")}),returns:w.unknown(),examples:[{description:"Install a plugin",input:{path:"/path/to/my-plugin.js"},output:{installed:!0,name:"my-plugin"}}],sideEffects:["filesystem"],handler:async({path:n,name:m})=>{if(!Jw(n))throw new l("CONFIG_ERROR",`Plugin file not found: ${n}`);let i=Xw(n),b=[".js",".mjs",".cjs"],$=Yw(i);if(!b.includes($))throw new l("CONFIG_ERROR",`Unsupported plugin file extension '${$}'. Allowed: ${b.join(", ")}`);let o=await import(i),_=o.default??o;if(!_||typeof _!=="object"||!_.name)throw new l("INVALID_PLUGIN","Plugin must export an object with a name field");let J=m??_.name;return M1({name:J,path:i,enabled:!0}),{installed:!0,name:J,path:i}}},{name:"plugin.remove",description:"Remove an installed plugin",category:"plugin-management",pluginName:"builtin:plugin-manager",parameters:w.object({name:w.string().describe("Plugin name to remove")}),returns:w.unknown(),examples:[{description:"Remove a plugin",input:{name:"my-plugin"},output:{removed:!0}}],sideEffects:["filesystem"],handler:async({name:n})=>{if(!x1(n))throw new l("CONFIG_ERROR",`Plugin '${n}' not found`);return{removed:!0,name:n}}},{name:"plugin.enable",description:"Enable a disabled plugin",category:"plugin-management",pluginName:"builtin:plugin-manager",parameters:w.object({name:w.string().describe("Plugin name to enable")}),returns:w.unknown(),examples:[{description:"Enable a plugin",input:{name:"my-plugin"},output:{enabled:!0}}],sideEffects:["filesystem"],handler:async({name:n})=>{if(!$i(n,!0))throw new l("CONFIG_ERROR",`Plugin '${n}' not found`);return{enabled:!0,name:n}}},{name:"plugin.disable",description:"Disable a plugin without removing it",category:"plugin-management",pluginName:"builtin:plugin-manager",parameters:w.object({name:w.string().describe("Plugin name to disable")}),returns:w.unknown(),examples:[{description:"Disable a plugin",input:{name:"my-plugin"},output:{disabled:!0}}],sideEffects:["filesystem"],handler:async({name:n})=>{if(!$i(n,!1))throw new l("CONFIG_ERROR",`Plugin '${n}' not found`);return{disabled:!0,name:n}}}]}}function $b(){return{name:"builtin:feature-manager",version:"1.0.0",commands:[{name:"feature.list",description:"List all available feature flags and their current status",category:"feature-management",pluginName:"builtin:feature-manager",parameters:w.object({}),returns:w.unknown(),examples:[{description:"List features",input:{},output:{features:[]}}],sideEffects:["filesystem"],handler:async()=>{let n=qm();return{features:Object.entries(n.features).map(([i,b])=>({name:i,enabled:b,default:ln[i]??!1}))}}},{name:"feature.enable",description:"Enable an optional feature (takes effect on next run)",category:"feature-management",pluginName:"builtin:feature-manager",parameters:w.object({name:w.string().describe('Feature flag name, e.g. "agenphone"')}),returns:w.unknown(),examples:[{description:"Enable agenphone",input:{name:"agenphone"},output:{enabled:!0}}],sideEffects:["filesystem"],handler:async({name:n})=>{if(!(n in ln))throw new l("CONFIG_ERROR",`Unknown feature flag: '${n}'. Available: ${Object.keys(ln).join(", ")}`);return Ji(n,!0),{enabled:!0,name:n,note:"Restart yunke-cli for changes to take effect"}}},{name:"feature.disable",description:"Disable an optional feature (takes effect on next run)",category:"feature-management",pluginName:"builtin:feature-manager",parameters:w.object({name:w.string().describe('Feature flag name, e.g. "agenphone"')}),returns:w.unknown(),examples:[{description:"Disable agenphone",input:{name:"agenphone"},output:{disabled:!0}}],sideEffects:["filesystem"],handler:async({name:n})=>{if(!(n in ln))throw new l("CONFIG_ERROR",`Unknown feature flag: '${n}'. Available: ${Object.keys(ln).join(", ")}`);return Ji(n,!1),{disabled:!0,name:n,note:"Restart yunke-cli for changes to take effect"}}}]}}import{readFileSync as Hw,writeFileSync as Qw,mkdirSync as Ww,existsSync as ob}from"node:fs";import{homedir as qw}from"node:os";import{join as _b}from"node:path";var qi=process.env.YUNKE_CONFIG_DIR??_b(qw(),".yunke"),Oi=_b(qi,"agenphone.json");function P0(){if(!ob(Oi))return null;try{let n=Hw(Oi,"utf-8");return JSON.parse(n)}catch{return null}}function Ow(n){if(!ob(qi))Ww(qi,{recursive:!0});Qw(Oi,JSON.stringify(n,null,2),"utf-8")}function Gi(n){let m=P0()??{access_token:"",expires_at:"",device_id:""};Ow({...m,...n})}function Jb(n){let m=new Date(n.expires_at).getTime(),i=Date.now(),b=300000;return i>=m-300000}function Gw(n=process.env.YUNKE_API_BASE_URL){let m=n?.replace(/\/$/,"");return m&&m.length>0?m:"https://agenphone-api.yunke.ai"}var dn=Gw();var Mw=["pending","sent","success","failed","timeout"];function g(n){return w.object({request_id:w.string(),status:w.enum(Mw),action:w.string(),device_id:w.string(),task_id:w.string().nullable(),response:n.nullable(),error:w.string().nullable(),sent_at:w.string(),completed_at:w.string().nullable()})}var L=g(w.null());function xw(){let n=P0();if(!n?.access_token)throw new l("CONFIG_ERROR","未登录,请先运行 'yunke agenphone.auth.login' 登录");if(Jb(n))throw new l("CONFIG_ERROR","登录已过期,请重新运行 'yunke agenphone.auth.login' 登录");return n.access_token}async function um(n,m={}){let i=xw(),b=`${dn}${n}`,$={"Content-Type":"application/json",Authorization:`Bearer ${i}`,...m.headers??{}},o=await fetch(b,{...m,headers:$});if(o.status===401)throw new l("CONFIG_ERROR","认证失败,请重新运行 'yunke agenphone.auth.login' 登录");if(!o.ok){let J=`HTTP ${o.status}`;try{let X=await o.json();if(X.message)J=X.message}catch{}throw new l("EXECUTION_FAILED",`AgenPhone API 错误: ${J}`)}return(await o.json()).data}async function Mi(n,m={}){let i=`${dn}${n}`,b={"Content-Type":"application/json",...m.headers??{}},$=await fetch(i,{...m,headers:b});if(!$.ok){let _=`HTTP ${$.status}`;try{let J=await $.json();if(J.message)_=J.message}catch{}throw new l("EXECUTION_FAILED",`AgenPhone API 错误: ${_}`)}return(await $.json()).data}async function x(n,m,i){return um("/api/v1/common/execute",{method:"POST",body:JSON.stringify({action:n,params:m??null,task_id:i??null})})}var xi="agenphone";function lw(){let n=P0();if(!n?.device_id)throw new l("CONFIG_ERROR","设备 ID 未配置,请先运行 'yunke agenphone.auth.setup --device_id <id>' 设置设备 ID");return n.device_id}var Xb={name:"agenphone.auth.setup",description:"Initialize AgenPhone config: Run this once before any other agenphone commands.",category:"agenphone",pluginName:xi,parameters:w.object({device_id:w.string().min(1).describe("Target device ID to control, e.g. dev_abc12345")}),returns:w.object({device_id:w.string(),saved:w.boolean()}),examples:[{description:"Setup AgenPhone",input:{device_id:"dev_abc12345"},output:{device_id:"dev_abc12345",saved:!0}}],sideEffects:["filesystem"],handler:async({device_id:n})=>{return Gi({device_id:n}),{device_id:n,saved:!0}}},Yb={name:"agenphone.auth.send-code",description:'Send SMS verification code to phone number for AgenPhone login. Requires agenphone.auth.setup to be run first. Returns both `token` and `sms_id` (same value); use `sms_id` if your agent redacts fields named "token", and pass the value as-is to agenphone.auth.login --token <sms_id>.',category:"agenphone",pluginName:xi,parameters:w.object({phone_number:w.string().describe("Chinese mobile phone number (11 digits)")}),returns:w.object({token:w.string().describe('SMS session token; may be redacted by agents that mask "token" fields'),sms_id:w.string().describe("Same value as `token`, exposed under a non-redacted name as a workaround for agent token masking")}),examples:[{description:"Send verification code",input:{phone_number:"13800138000"},output:{token:"sms_token_xxx",sms_id:"sms_token_xxx"}}],sideEffects:["network"],handler:async({phone_number:n})=>{let m=await Mi("/api/v1/sms/send",{method:"POST",body:JSON.stringify({phone_number:n})});return{token:m.token,sms_id:m.token}}},Hb={name:"agenphone.auth.login",description:"Login to AgenPhone with SMS verification code. Reads device_id from config (set via agenphone.auth.setup). Saves JWT token to ~/.yunke/agenphone.json.",category:"agenphone",pluginName:xi,parameters:w.object({token:w.string().describe("SMS token returned by agenphone.auth.send-code"),code:w.string().length(6).describe("6-digit SMS verification code")}),returns:w.object({success:w.boolean(),device_id:w.string(),expires_in:w.number()}),examples:[{description:"Login with SMS code",input:{token:"sms_token",code:"123456"},output:{success:!0,device_id:"dev_abc12345",expires_in:2592000}}],sideEffects:["filesystem","network"],handler:async({token:n,code:m})=>{let i=lw(),b=await Mi("/api/v1/auth/cli-login",{method:"POST",body:JSON.stringify({token:n,code:m,device_id:i})}),$=new Date(Date.now()+b.expires_in*1000).toISOString();return Gi({access_token:b.access_token,expires_at:$,device_id:b.device_id}),{success:!0,device_id:b.device_id,expires_in:b.expires_in}}};var an="agenphone",Qb={name:"agenphone.app.open",description:"Open an app by package name or URL. On success response is null.",category:"agenphone",pluginName:an,parameters:w.object({package_name:w.string().min(1).optional().describe("Android package name, e.g. com.tencent.mm"),url:w.string().optional().describe("URL scheme to open")}),returns:L,examples:[{description:"Open WeChat",input:{package_name:"com.tencent.mm"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>x("open_app",n)},Wb={name:"agenphone.app.list-packages",description:"List installed apps. Use thirdPartyOnly=true to skip system apps. response.packages contains the list.",category:"agenphone",pluginName:an,parameters:w.object({thirdPartyOnly:w.boolean().optional().describe("Only return third-party apps, default false"),includeVersions:w.boolean().optional().describe("Include version_name and version_code, default false")}),returns:g(w.object({packages:w.array(w.object({package_name:w.string(),app_name:w.string(),version_name:w.string().optional(),version_code:w.number().int().optional()}))})),examples:[{description:"List packages",input:{},output:{status:"success",response:{packages:[{package_name:"com.tencent.mm",app_name:"WeChat"}]},error:null}}],sideEffects:["network"],handler:async(n)=>x("list_packages",n)},qb={name:"agenphone.app.foreground",description:"Get the package name and class name of the currently visible foreground app.",category:"agenphone",pluginName:an,parameters:w.object({}),returns:g(w.object({foreground_package:w.string(),foreground_className:w.string()})),examples:[{description:"Get foreground app",input:{},output:{status:"success",response:{foreground_package:"com.tencent.mm",foreground_className:"com.tencent.mm.MainActivity"},error:null}}],sideEffects:["network"],handler:async()=>x("get_foreground_app")},Ob={name:"agenphone.app.info",description:"Get version and name info for a specific installed app.",category:"agenphone",pluginName:an,parameters:w.object({package_name:w.string().min(1).describe("App package name")}),returns:g(w.object({package_name:w.string(),app_name:w.string(),version_name:w.string(),version_code:w.number().int()})),examples:[{description:"Get WeChat info",input:{package_name:"com.tencent.mm"},output:{status:"success",response:{package_name:"com.tencent.mm",app_name:"WeChat",version_name:"8.0",version_code:800},error:null}}],sideEffects:["network"],handler:async(n)=>x("get_app_info",n)},Gb={name:"agenphone.app.force-stop",description:"Force stop a running app. Requires EnterpriseProvider or root. On success response is null.",category:"agenphone",pluginName:an,parameters:w.object({package_name:w.string().min(1).describe("App package name to force stop")}),returns:L,examples:[{description:"Force stop WeChat",input:{package_name:"com.tencent.mm"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>x("force_stop_app",n)},Mb={name:"agenphone.app.uninstall",description:"Silently uninstall an app. Requires EnterpriseProvider or root. On success response is null.",category:"agenphone",pluginName:an,parameters:w.object({package_name:w.string().min(1).describe("App package name to uninstall")}),returns:L,examples:[{description:"Uninstall app",input:{package_name:"com.example.app"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>x("uninstall_app",n)},xb={name:"agenphone.app.clear-data",description:"Clear all data and cache for an app. Requires EnterpriseProvider or root. On success response is null.",category:"agenphone",pluginName:an,parameters:w.object({package_name:w.string().min(1).describe("App package name to clear data for")}),returns:L,examples:[{description:"Clear WeChat data",input:{package_name:"com.tencent.mm"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>x("clear_app_data",n)};var Rn="agenphone",lb={name:"agenphone.comm.call",description:"Initiate a phone call. On success response is null.",category:"agenphone",pluginName:Rn,parameters:w.object({phone_number:w.string().describe("Phone number to call")}),returns:L,examples:[{description:"Call a number",input:{phone_number:"13800138000"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>x("call",n)},ub={name:"agenphone.comm.hang-up",description:"Hang up the current phone call. On success response is null.",category:"agenphone",pluginName:Rn,parameters:w.object({}),returns:L,examples:[{description:"Hang up call",input:{},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async()=>x("hang_up")},jb={name:"agenphone.comm.answer",description:"Answer an incoming phone call. On success response is null.",category:"agenphone",pluginName:Rn,parameters:w.object({}),returns:L,examples:[{description:"Answer call",input:{},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async()=>x("answer_call")},vb={name:"agenphone.comm.list-contacts",description:"List contacts (requires READ_CONTACTS). response.contact_list contains entries with id, display_name, numbers.",category:"agenphone",pluginName:Rn,parameters:w.object({limit:w.number().int().positive().optional().describe("Max results to return, default 50"),offset:w.number().int().min(0).optional().describe("Skip N entries, default 0")}),returns:g(w.object({contact_list:w.array(w.object({id:w.string(),display_name:w.string(),numbers:w.array(w.string())}))})),examples:[{description:"List contacts",input:{},output:{status:"success",response:{contact_list:[{id:"1",display_name:"Alice",numbers:["13800138000"]}]},error:null}}],sideEffects:["network"],handler:async(n)=>x("list_contacts",n)},Db={name:"agenphone.comm.search-contacts",description:"Search contacts by name or number. response.contacts contains matches.",category:"agenphone",pluginName:Rn,parameters:w.object({name:w.string().optional().describe("Fuzzy match on display name"),number:w.string().optional().describe("Filter by having this number"),limit:w.number().int().positive().optional().describe("Max results, default 20")}),returns:g(w.object({contacts:w.array(w.object({id:w.string(),display_name:w.string()}))})),examples:[{description:"Search by name",input:{name:"Alice"},output:{status:"success",response:{contacts:[{id:"1",display_name:"Alice"}]},error:null}}],sideEffects:["network"],handler:async(n)=>x("search_contacts",n)},Nb={name:"agenphone.comm.list-call-log",description:"List recent call log (requires READ_CALL_LOG). response.call_log contains entries with number, type_name (incoming/outgoing/missed), date (ms), duration (s).",category:"agenphone",pluginName:Rn,parameters:w.object({limit:w.number().int().positive().optional().describe("Max results, default 50"),offset:w.number().int().min(0).optional().describe("Skip N entries, default 0")}),returns:g(w.object({call_log:w.array(w.object({number:w.string(),type:w.number().int(),type_name:w.enum(["incoming","outgoing","missed"]),date:w.number(),duration:w.number().int(),name:w.string().optional()}))})),examples:[{description:"List call log",input:{},output:{status:"success",response:{call_log:[{number:"10086",type:1,type_name:"incoming",date:1709123456789,duration:120}]},error:null}}],sideEffects:["network"],handler:async(n)=>x("list_call_log",n)},Vb={name:"agenphone.comm.send-sms",description:"Send an SMS message. On success response is null.",category:"agenphone",pluginName:Rn,parameters:w.object({phone_number:w.string().describe("Recipient phone number"),message:w.string().min(1).describe("SMS message content")}),returns:L,examples:[{description:"Send SMS",input:{phone_number:"13800138000",message:"Hello"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>x("send_sms",n)},Lb={name:"agenphone.comm.read-sms",description:"Read SMS inbox (requires READ_SMS). response.sms_list contains entries with address, body, date (ms).",category:"agenphone",pluginName:Rn,parameters:w.object({limit:w.number().int().positive().optional().describe("Max results, default 50"),offset:w.number().int().min(0).optional().describe("Skip N entries, default 0")}),returns:g(w.object({sms_list:w.array(w.object({address:w.string(),body:w.string(),date:w.number()}))})),examples:[{description:"Read SMS",input:{},output:{status:"success",response:{sms_list:[{address:"10086",body:"余额10元",date:1709123456789}]},error:null}}],sideEffects:["network"],handler:async(n)=>x("read_sms",n)};var Z="agenphone",Bb={name:"agenphone.screen.tap",description:"Tap a coordinate on the screen. Requires accessibility or root. On success response is null.",category:"agenphone",pluginName:Z,parameters:w.object({x:w.number().int().describe("X coordinate in pixels"),y:w.number().int().describe("Y coordinate in pixels")}),returns:L,examples:[{description:"Tap center",input:{x:540,y:960},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>x("tap",n)},Cb={name:"agenphone.screen.swipe",description:"Swipe from one coordinate to another. On success response is null.",category:"agenphone",pluginName:Z,parameters:w.object({start_x:w.number().int().describe("Start X coordinate"),start_y:w.number().int().describe("Start Y coordinate"),end_x:w.number().int().describe("End X coordinate"),end_y:w.number().int().describe("End Y coordinate"),duration:w.number().int().positive().optional().describe("Swipe duration in ms, default 300")}),returns:L,examples:[{description:"Swipe up",input:{start_x:540,start_y:1500,end_x:540,end_y:500},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>x("swipe",n)},Kb={name:"agenphone.screen.drag",description:"Long-press drag from one position to another. On success response is null.",category:"agenphone",pluginName:Z,parameters:w.object({start_x:w.number().int().describe("Start X coordinate"),start_y:w.number().int().describe("Start Y coordinate"),end_x:w.number().int().describe("End X coordinate"),end_y:w.number().int().describe("End Y coordinate"),duration:w.number().int().positive().optional().describe("Drag duration in ms, default 400")}),returns:L,examples:[{description:"Drag element",input:{start_x:100,start_y:200,end_x:300,end_y:400},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>x("drag",n)},Ab={name:"agenphone.screen.input",description:"Tap a coordinate then input text into that field. Requires accessibility or root. On success response is null.",category:"agenphone",pluginName:Z,parameters:w.object({text:w.string().min(1).describe("Text to input"),x:w.number().int().optional().describe("X coordinate to tap first for focus"),y:w.number().int().optional().describe("Y coordinate to tap first for focus")}),returns:L,examples:[{description:"Type text",input:{text:"hello world",x:540,y:500},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>x("input_text",n)},gb={name:"agenphone.screen.long-press",description:"Long press at a coordinate. On success response is null.",category:"agenphone",pluginName:Z,parameters:w.object({x:w.number().int().describe("X coordinate"),y:w.number().int().describe("Y coordinate"),duration:w.number().int().positive().optional().describe("Long press duration in ms, default 1500")}),returns:L,examples:[{description:"Long press",input:{x:540,y:960},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>x("long_press",n)},Rb={name:"agenphone.screen.global-action",description:"Perform a system global action via accessibility. On success response is null.",category:"agenphone",pluginName:Z,parameters:w.object({action:w.enum(["back","home","recents"]).describe("System action: back=go back, home=go to home screen, recents=open recent apps")}),returns:L,examples:[{description:"Press home",input:{action:"home"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>x("global_action",n)},Eb={name:"agenphone.screen.screenshot",description:"Take a screenshot. Returns an OSS image URL (not base64). Use this to visually inspect the current screen state.",category:"agenphone",pluginName:Z,parameters:w.object({}),returns:w.object({image_url:w.string().url().describe("Screenshot image URL (hosted on OSS)"),width:w.number().int().describe("Image width in pixels"),height:w.number().int().describe("Image height in pixels")}),examples:[{description:"Take screenshot",input:{},output:{image_url:"https://oss.example.com/xxx.png",width:1080,height:1920}}],sideEffects:["network"],handler:async()=>um("/api/v1/device/screenshot",{method:"POST",body:JSON.stringify({})})},Ub={name:"agenphone.screen.ui-tree",description:"Get the accessibility node tree of the current screen. Requires accessibility service enabled. response.hierarchy is the full UI tree.",category:"agenphone",pluginName:Z,parameters:w.object({}),returns:g(w.object({hierarchy:w.record(w.unknown())})),examples:[{description:"Get UI tree",input:{},output:{status:"success",response:{hierarchy:{}},error:null}}],sideEffects:["network"],handler:async()=>x("get_screen_hierarchy")},Sb={name:"agenphone.screen.find-element",description:"Find a UI element by text or view_id. response.found indicates if found; response.center_x/center_y give the tap coordinates.",category:"agenphone",pluginName:Z,parameters:w.object({text:w.string().optional().describe("Element visible text to find"),view_id:w.string().optional().describe("Element resource view ID"),class_name:w.string().optional().describe("Limit to a specific widget class")}),returns:g(w.object({found:w.boolean(),center_x:w.number().optional(),center_y:w.number().optional()})),examples:[{description:"Find by text",input:{text:"登录"},output:{status:"success",response:{found:!0,center_x:540,center_y:960},error:null}}],sideEffects:["network"],handler:async(n)=>x("find_element",n)},fb={name:"agenphone.screen.click-by-text",description:"Find a UI element by its visible text and click it. On success response is null.",category:"agenphone",pluginName:Z,parameters:w.object({text:w.string().min(1).describe("Visible text of the element to click")}),returns:L,examples:[{description:"Click login button",input:{text:"登录"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>x("click_by_text",n)},pb={name:"agenphone.screen.click-by-id",description:"Find a UI element by its resource view_id and click it. On success response is null.",category:"agenphone",pluginName:Z,parameters:w.object({view_id:w.string().min(1).describe("Resource ID, e.g. com.example:id/btn_login")}),returns:L,examples:[{description:"Click by ID",input:{view_id:"com.example:id/btn_login"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>x("click_by_view_id",n)},Fb={name:"agenphone.screen.unlock",description:"Wake the screen and attempt to dismiss the lock screen. response.screen_woken indicates wake success; response.keyguard_dismissed indicates lock dismissed (may be false on Android 8+).",category:"agenphone",pluginName:Z,parameters:w.object({}),returns:g(w.object({screen_woken:w.boolean(),keyguard_dismissed:w.boolean()})),examples:[{description:"Unlock screen",input:{},output:{status:"success",response:{screen_woken:!0,keyguard_dismissed:!1},error:null}}],sideEffects:["network"],handler:async()=>x("unlock_device")},hb={name:"agenphone.screen.set-brightness",description:"Set screen brightness (requires WRITE_SETTINGS). response.brightness is the applied value.",category:"agenphone",pluginName:Z,parameters:w.object({brightness:w.number().int().min(0).max(255).describe("Brightness level 0–255")}),returns:g(w.object({brightness:w.number().int()})),examples:[{description:"Set brightness to 128",input:{brightness:128},output:{status:"success",response:{brightness:128},error:null}}],sideEffects:["network"],handler:async(n)=>x("set_brightness",n)},Pb={name:"agenphone.screen.gui-analyze",description:"Analyze a screenshot with the Doubao vision model and return the suggested next action. Does NOT execute the action — use tap/swipe/input/etc to execute. "+"Returns { thought, action_raw, action } where action.type ∈ {click, long_press, type, scroll, drag, open_app, press_home, press_back, hotkey, wait, finished, left_double, right_single, unknown}. "+"Coordinate actions carry x/y; type carries content; scroll carries x/y/direction; drag carries start_x/start_y/end_x/end_y; hotkey carries key; open_app carries package_name; finished carries content.",category:"agenphone",pluginName:Z,parameters:w.object({instruction:w.string().min(1).describe('Task instruction, e.g. "打开微信并给张三发消息"'),image_url:w.string().url().describe("Screenshot URL (OSS/HTTPS). Get one from agenphone.screen.screenshot first."),img_width:w.number().int().positive().describe("Screenshot width in pixels (pass `width` from agenphone.screen.screenshot)"),img_height:w.number().int().positive().describe("Screenshot height in pixels (pass `height` from agenphone.screen.screenshot)"),platform:w.enum(["phone","computer"]).optional().describe("GUI scene, default phone"),language:w.string().min(1).optional().describe("Language used in Thought, default Chinese"),history:w.array(w.object({role:w.enum(["user","assistant"]),content:w.unknown()})).optional().describe("Prior turns for multi-turn analysis")}),returns:w.object({thought:w.string().describe("Model reasoning / plan for the next step"),action_raw:w.string().describe("Raw model action string before parsing"),action:w.record(w.unknown()).describe("Parsed action. Always has `type`. See command description for type-specific fields.")}),examples:[{description:"Analyze a phone screenshot",input:{instruction:"打开微信",image_url:"https://oss.example.com/xxx.png",img_width:1080,img_height:1920},output:{thought:"我需要点击微信图标",action_raw:"click(point='<point>300 500</point>')",action:{type:"click",x:324,y:960}}}],sideEffects:["network"],handler:async(n)=>um("/api/v1/device/gui-analyze",{method:"POST",body:JSON.stringify(n)})};var Hn="agenphone",kb={name:"agenphone.device.status",description:"Get screen on/off status. response.screen_on: 0=screen on, 1=screen off.",category:"agenphone",pluginName:Hn,parameters:w.object({}),returns:g(w.object({screen_on:w.number().int().describe("0=screen on, 1=screen off")})),examples:[{description:"Get status",input:{},output:{status:"success",response:{screen_on:0},error:null}}],sideEffects:["network"],handler:async()=>x("get_status")},Tb={name:"agenphone.device.info",description:"Get comprehensive device info. response contains model, manufacturer, sdk, battery_level, battery_charging, network_type, wifi_connected, storage_total_mb, storage_available_mb, memory_total_mb, memory_available_mb, screen_brightness, locale, foreground_package, etc.",category:"agenphone",pluginName:Hn,parameters:w.object({}),returns:g(w.object({model:w.string(),manufacturer:w.string(),sdk:w.number().int(),release:w.string(),battery_level:w.number().int(),battery_charging:w.boolean(),network_type:w.string(),wifi_connected:w.boolean(),mobile_connected:w.boolean(),storage_total_mb:w.number(),storage_available_mb:w.number(),memory_total_mb:w.number(),memory_available_mb:w.number(),screen_rotation:w.number().int(),screen_orientation:w.string(),foreground_package:w.string(),foreground_className:w.string(),screen_brightness:w.number().int(),language:w.string(),language_country:w.string(),locale:w.string(),imei:w.string().optional()})),examples:[{description:"Get device info",input:{},output:{status:"success",response:{model:"Pixel 6",manufacturer:"Google",sdk:33,release:"13",battery_level:85,battery_charging:!1,network_type:"wifi",wifi_connected:!0,mobile_connected:!1,storage_total_mb:128000,storage_available_mb:64000,memory_total_mb:8192,memory_available_mb:2048,screen_rotation:0,screen_orientation:"portrait",foreground_package:"com.android.chrome",foreground_className:"...",screen_brightness:128,language:"zh",language_country:"CN",locale:"zh-CN"},error:null}}],sideEffects:["network"],handler:async()=>x("get_device_info")},Ib={name:"agenphone.device.battery",description:"Get battery level and charging status. response.battery_level is 0–100; response.battery_charging is true when charging.",category:"agenphone",pluginName:Hn,parameters:w.object({}),returns:g(w.object({battery_level:w.number().int(),battery_charging:w.boolean()})),examples:[{description:"Get battery",input:{},output:{status:"success",response:{battery_level:85,battery_charging:!1},error:null}}],sideEffects:["network"],handler:async()=>x("get_battery")},yb={name:"agenphone.device.volume",description:"Get current volume levels. response contains media_volume, media_max, alarm_volume, ring_volume.",category:"agenphone",pluginName:Hn,parameters:w.object({}),returns:g(w.object({media_volume:w.number().int(),media_max:w.number().int(),alarm_volume:w.number().int(),ring_volume:w.number().int()})),examples:[{description:"Get volume",input:{},output:{status:"success",response:{media_volume:10,media_max:15,alarm_volume:5,ring_volume:8},error:null}}],sideEffects:["network"],handler:async()=>x("get_volume")},cb={name:"agenphone.device.location",description:"Get last known GPS location (requires ACCESS_FINE_LOCATION). response.latitude and response.longitude are decimal degrees.",category:"agenphone",pluginName:Hn,parameters:w.object({}),returns:g(w.object({latitude:w.number(),longitude:w.number()})),examples:[{description:"Get location",input:{},output:{status:"success",response:{latitude:39.9042,longitude:116.4074},error:null}}],sideEffects:["network"],handler:async()=>x("get_location")},zb={name:"agenphone.device.lock-status",description:"Get screen and lock status. response.lock_type: none/pattern/pin/password/unknown.",category:"agenphone",pluginName:Hn,parameters:w.object({}),returns:g(w.object({screen_on:w.boolean(),is_locked:w.boolean(),lock_type:w.enum(["none","pattern","pin","password","unknown"])})),examples:[{description:"Get lock status",input:{},output:{status:"success",response:{screen_on:!0,is_locked:!0,lock_type:"pattern"},error:null}}],sideEffects:["network"],handler:async()=>x("get_lock_status")},Zb={name:"agenphone.device.reboot",description:"Reboot the device. Requires root or EnterpriseProvider. On success response is null.",category:"agenphone",pluginName:Hn,parameters:w.object({}),returns:L,examples:[{description:"Reboot",input:{},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async()=>x("reboot")},tb={name:"agenphone.device.shutdown",description:"Shut down the device. Requires root or EnterpriseProvider. On success response is null.",category:"agenphone",pluginName:Hn,parameters:w.object({}),returns:L,examples:[{description:"Shutdown",input:{},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async()=>x("shutdown")},db={name:"agenphone.device.set-volume",description:"Set volume for an audio stream. level must be 0 to the stream max (see agenphone.device.volume). On success response is null.",category:"agenphone",pluginName:Hn,parameters:w.object({stream:w.enum(["media","alarm","ring"]).optional().describe("Audio stream, default media"),level:w.number().int().min(0).describe("Volume level (0 to stream max)")}),returns:L,examples:[{description:"Set media volume",input:{stream:"media",level:10},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>x("set_volume",n)},ab={name:"agenphone.device.vibrate",description:"Vibrate the device (requires VIBRATE permission). On success response is null.",category:"agenphone",pluginName:Hn,parameters:w.object({duration:w.number().int().positive().optional().describe("Vibration duration in ms, default 200")}),returns:L,examples:[{description:"Vibrate 500ms",input:{duration:500},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>x("vibrate",n)};var rb="agenphone",eb={name:"agenphone.clipboard.get",description:"Read current clipboard text. response.clipboard_text is empty string if clipboard is empty.",category:"agenphone",pluginName:rb,parameters:w.object({}),returns:g(w.object({clipboard_text:w.string()})),examples:[{description:"Get clipboard",input:{},output:{status:"success",response:{clipboard_text:"copied text"},error:null}}],sideEffects:["network"],handler:async()=>x("get_clipboard")},sb={name:"agenphone.clipboard.set",description:"Set clipboard text on the device. On success response is null.",category:"agenphone",pluginName:rb,parameters:w.object({content:w.string().describe("Text to write to clipboard")}),returns:L,examples:[{description:"Set clipboard",input:{content:"hello"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>x("set_clipboard",n)};var En="agenphone",n6={name:"agenphone.file.list",description:"List files and subdirectories. response.files contains entries with name, path, is_dir, size (bytes).",category:"agenphone",pluginName:En,parameters:w.object({path:w.string().describe("Directory path on device, e.g. /sdcard/")}),returns:g(w.object({files:w.array(w.object({name:w.string(),path:w.string(),is_dir:w.boolean(),size:w.number()}))})),examples:[{description:"List sdcard",input:{path:"/sdcard/"},output:{status:"success",response:{files:[{name:"doc.txt",path:"/sdcard/doc.txt",is_dir:!1,size:1024}]},error:null}}],sideEffects:["network"],handler:async(n)=>x("list_files",n)},m6={name:"agenphone.file.read",description:'Read file content. Text files (≤512KB): response.content is UTF-8 string, response.encoding="utf-8". Image files (jpg/png/gif): response.content_base64 is base64, response.encoding="base64".',category:"agenphone",pluginName:En,parameters:w.object({path:w.string().describe("File path on device")}),returns:g(w.union([w.object({content:w.string(),encoding:w.literal("utf-8")}),w.object({content_base64:w.string(),encoding:w.literal("base64")})])),examples:[{description:"Read text file",input:{path:"/sdcard/note.txt"},output:{status:"success",response:{content:"hello",encoding:"utf-8"},error:null}}],sideEffects:["network"],handler:async(n)=>x("read_file",n)},i6={name:"agenphone.file.write",description:"Write text to a file (parent dirs created if needed). On success response is null.",category:"agenphone",pluginName:En,parameters:w.object({path:w.string().describe("File path on device"),content:w.string().optional().describe("Text content to write, default empty string")}),returns:L,examples:[{description:"Write file",input:{path:"/sdcard/note.txt",content:"hello"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>x("write_file",n)},b6={name:"agenphone.file.delete",description:"Delete a file on the device. On success response is null.",category:"agenphone",pluginName:En,parameters:w.object({path:w.string().describe("File path to delete")}),returns:L,examples:[{description:"Delete file",input:{path:"/sdcard/old.txt"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>x("delete_file",n)},w6={name:"agenphone.file.analyze-storage",description:"Analyze total size and file count in a directory. response contains path, total_bytes, file_count.",category:"agenphone",pluginName:En,parameters:w.object({path:w.string().describe("Directory path to analyze"),maxDepth:w.number().int().positive().optional().describe("Recursion depth, default 3"),minSizeMB:w.number().min(0).optional().describe("Only count files >= this size in MB, default 0")}),returns:g(w.object({path:w.string(),total_bytes:w.number(),file_count:w.number().int()})),examples:[{description:"Analyze sdcard",input:{path:"/sdcard"},output:{status:"success",response:{path:"/sdcard",total_bytes:104857600,file_count:50},error:null}}],sideEffects:["network"],handler:async(n)=>x("analyze_storage",n)},$6={name:"agenphone.file.find-large",description:"Find files larger than minSize bytes. response.files contains entries with path and size (bytes).",category:"agenphone",pluginName:En,parameters:w.object({path:w.string().describe("Root directory to search"),minSize:w.number().positive().optional().describe("Minimum file size in bytes, e.g. 10485760 for 10MB"),limit:w.number().int().positive().optional().describe("Max results, default 50")}),returns:g(w.object({files:w.array(w.object({path:w.string(),size:w.number()}))})),examples:[{description:"Find large files",input:{path:"/sdcard",minSize:10485760},output:{status:"success",response:{files:[{path:"/sdcard/video.mp4",size:52428800}]},error:null}}],sideEffects:["network"],handler:async(n)=>x("find_large_files",n)},o6={name:"agenphone.file.index-media",description:"Index image metadata from media library (up to 200 items). response.items contains entries with id, path, date_added.",category:"agenphone",pluginName:En,parameters:w.object({}),returns:g(w.object({items:w.array(w.object({id:w.string(),path:w.string(),date_added:w.number()}))})),examples:[{description:"Index media",input:{},output:{status:"success",response:{items:[{id:"1",path:"/sdcard/DCIM/photo.jpg",date_added:1709123456}]},error:null}}],sideEffects:["network"],handler:async()=>x("index_media_metadata")},_6={name:"agenphone.file.search-media",description:"Search media library by type and keyword. response.items contains entries with id, path, display_name.",category:"agenphone",pluginName:En,parameters:w.object({mediaType:w.enum(["image","video","audio"]).optional().describe("Media type, default image"),keyword:w.string().optional().describe("Filename or path keyword"),limit:w.number().int().positive().optional().describe("Max results, default 10")}),returns:g(w.object({items:w.array(w.object({id:w.string(),path:w.string(),display_name:w.string().optional()}))})),examples:[{description:"Search images",input:{mediaType:"image"},output:{status:"success",response:{items:[{id:"1",path:"/sdcard/DCIM/photo.jpg",display_name:"photo.jpg"}]},error:null}}],sideEffects:["network"],handler:async(n)=>x("search_media",n)};var J6="agenphone",X6={name:"agenphone.audio.play",description:"Play audio from a URI or local path. On success response is null.",category:"agenphone",pluginName:J6,parameters:w.object({uri:w.string().describe("Media URI or absolute local path, e.g. /sdcard/audio.mp3")}),returns:L,examples:[{description:"Play audio",input:{uri:"/sdcard/audio.mp3"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>x("play_audio",n)},Y6={name:"agenphone.audio.stop",description:"Stop the currently playing audio. On success response is null.",category:"agenphone",pluginName:J6,parameters:w.object({}),returns:L,examples:[{description:"Stop audio",input:{},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async()=>x("stop_audio")};var jm="agenphone",H6={name:"agenphone.notification.read",description:"Read notifications captured by NotificationListener. response.notifications contains entries with key, package_name, title, body, post_time (ms).",category:"agenphone",pluginName:jm,parameters:w.object({}),returns:g(w.object({notifications:w.array(w.object({key:w.string(),package_name:w.string(),title:w.string(),body:w.string(),post_time:w.number()}))})),examples:[{description:"Read notifications",input:{},output:{status:"success",response:{notifications:[{key:"pkg|1|tag",package_name:"com.example.app",title:"标题",body:"内容",post_time:1709123456789}]},error:null}}],sideEffects:["network"],handler:async()=>x("read_notifications")},Q6={name:"agenphone.notification.post",description:"Post a system notification from this app (useful for testing). On success response is null.",category:"agenphone",pluginName:jm,parameters:w.object({title:w.string().optional().describe('Notification title, default "DevSupport"'),body:w.string().optional().describe("Notification body content")}),returns:L,examples:[{description:"Post notification",input:{title:"Alert",body:"Hello"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>x("post_notification",n)},W6={name:"agenphone.notification.dismiss",description:"Dismiss a notification by key (requires NotificationListener). Use agenphone.notification.read to get keys. On success response is null.",category:"agenphone",pluginName:jm,parameters:w.object({key:w.string().describe("Notification key from read_notifications")}),returns:L,examples:[{description:"Dismiss notification",input:{key:"pkg|1|tag"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>x("dismiss_notification",n)},q6={name:"agenphone.notification.dismiss-all",description:"Dismiss all notifications posted by this app (does not affect other apps). On success response is null.",category:"agenphone",pluginName:jm,parameters:w.object({}),returns:L,examples:[{description:"Dismiss all",input:{},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async()=>x("dismiss_all_notifications")};var k0="agenphone",O6={name:"agenphone.overlay.toast",description:"Show a toast/instruction-log message on the device screen. On success response is null.",category:"agenphone",pluginName:k0,parameters:w.object({message:w.string().min(1).describe("Message text to display")}),returns:L,examples:[{description:"Show toast",input:{message:"Hello!"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>x("show_toast",n)},G6={name:"agenphone.overlay.show",description:"Show a floating overlay window. response.overlay_id is the ID needed to hide it later.",category:"agenphone",pluginName:k0,parameters:w.object({text:w.string().optional().describe("Text to display in the overlay")}),returns:g(w.object({overlay_id:w.string().describe("ID to use with agenphone.overlay.hide")})),examples:[{description:"Show overlay",input:{text:"Status: OK"},output:{status:"success",response:{overlay_id:"overlay_abc123"},error:null}}],sideEffects:["network"],handler:async(n)=>x("show_overlay",n)},M6={name:"agenphone.overlay.hide",description:"Hide a specific overlay by its ID (from agenphone.overlay.show). On success response is null.",category:"agenphone",pluginName:k0,parameters:w.object({overlay_id:w.string().describe("Overlay ID returned by agenphone.overlay.show")}),returns:L,examples:[{description:"Hide overlay",input:{overlay_id:"overlay_abc123"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>x("hide_overlay",n)},x6={name:"agenphone.overlay.hide-all",description:"Hide all overlays managed by this app. On success response is null.",category:"agenphone",pluginName:k0,parameters:w.object({}),returns:L,examples:[{description:"Hide all overlays",input:{},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async()=>x("hide_all_overlays")},l6={name:"agenphone.overlay.list",description:"List all currently visible overlays. response.overlays contains entries with overlay_id and text.",category:"agenphone",pluginName:k0,parameters:w.object({}),returns:g(w.object({overlays:w.array(w.object({overlay_id:w.string(),text:w.string()}))})),examples:[{description:"List overlays",input:{},output:{status:"success",response:{overlays:[{overlay_id:"overlay_abc123",text:"Status: OK"}]},error:null}}],sideEffects:["network"],handler:async()=>x("list_overlays")};var uw="agenphone",u6={name:"agenphone.tts.speak",description:"Speak text aloud using system TTS engine. On success response is null.",category:"agenphone",pluginName:uw,parameters:w.object({text:w.string().min(1).describe("Text to speak"),locale:w.string().optional().describe("Locale code, e.g. zh-CN, en-US"),speed:w.number().min(0.5).max(2).optional().describe("Speech speed 0.5–2.0, default 1.0")}),returns:L,examples:[{description:"Speak text",input:{text:"你好世界"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>x("speak_tts",n)};var j6={name:"agenphone",version:"2.0.0",featureFlag:"agenphone",commands:[Xb,Yb,Hb,Qb,Wb,qb,Ob,Gb,Mb,xb,lb,ub,jb,vb,Db,Nb,Vb,Lb,Bb,Cb,Kb,Ab,gb,Rb,Eb,Ub,Sb,fb,pb,Fb,hb,Pb,kb,Tb,Ib,yb,cb,zb,Zb,tb,db,ab,eb,sb,n6,m6,i6,b6,w6,$6,o6,_6,X6,Y6,H6,Q6,W6,q6,O6,G6,M6,x6,l6,u6]};import{readFileSync as vw,writeFileSync as OY,mkdirSync as GY,existsSync as Dw}from"node:fs";import{join as v6}from"node:path";import{homedir as jw}from"node:os";function Qn(){return process.env.YUNKE_HOME_OVERRIDE??jw()}function Nw(){return v6(Qn(),".yunke")}function Vw(){return v6(Nw(),"skillshub.json")}var T0={api_base_url:"https://skillshub.yunke.ai",channel:"stable",target:"generic"};function Wn(){let n=Vw();if(!Dw(n))return{...T0};try{let m=vw(n,"utf-8"),i=JSON.parse(m);return{api_base_url:i.api_base_url??T0.api_base_url,channel:i.channel??T0.channel,target:i.target??T0.target}}catch{return{...T0}}}var Lw="yunke-cli/1.0.0";function Bw(){return Wn().api_base_url.replace(/\/$/,"")}async function un(n,m){let b=`${Bw()}${n}`,$={"User-Agent":Lw,...m?.headers??{}},o=await fetch(b,{...m,headers:$});if(!o.ok){let _=`HTTP ${o.status}`;try{let J=await o.json();if(J.message)_=J.message}catch{}throw new l("EXECUTION_FAILED",`Skillshub API error: ${_}`)}return await o.json()}var Cw="skillshub",Kw=w.object({slug:w.string(),displayName:w.string(),summary:w.string(),type:w.string(),version:w.string(),targets:w.array(w.string()),channel:w.string()}),D6={name:"skillshub.search",description:"Search for skills and plugins on the Skillshub registry",category:"skillshub",pluginName:Cw,parameters:w.object({query:w.string().describe("搜索关键词"),limit:w.number().int().min(1).max(100).default(20).describe("返回数量上限"),type:w.string().optional().describe("按类型过滤,如 skill、plugin"),channel:w.enum(["stable","beta","canary"]).optional().describe("渠道,默认使用配置中的 channel")}),returns:w.object({results:w.array(Kw),total:w.number()}),examples:[{description:"Search for calendar-related skills",input:{query:"calendar"},output:{results:[],total:0}}],sideEffects:["network"],handler:async(n)=>{let m=Wn(),i=n.channel??m.channel,b=new URLSearchParams({q:n.query,channel:i,target:m.target,limit:String(n.limit),offset:"0"});if(n.type!==void 0)b.set("type",n.type);let $=await un(`/api/v1/search?${b.toString()}`);return{results:$.results,total:$.results.length}}};import{readFileSync as Aw,writeFileSync as gw,mkdirSync as Rw,existsSync as N6}from"node:fs";import{dirname as Ew,join as Uw}from"node:path";var Sw="skills-lock.json";function V6(){return Uw(Qn(),".yunke",Sw)}function li(){return{version:2,skills:{}}}function Un(){let n=V6();if(!N6(n))return li();try{let m=Aw(n,"utf-8"),i=JSON.parse(m);if(i.version!==2||typeof i.skills!=="object")return li();return{version:2,skills:{...i.skills}}}catch{return li()}}function M0(n){let m=V6(),i=Ew(m);if(!N6(i))Rw(i,{recursive:!0});gw(m,JSON.stringify(n,null,2),"utf-8")}var fw="skillshub",L6={name:"skillshub.list",description:"List locally installed skills from the lockfile",category:"skillshub",pluginName:fw,parameters:w.object({}),returns:w.object({skills:w.array(w.object({slug:w.string(),name:w.string(),version:w.string(),source:w.string()})),total:w.number()}),examples:[{description:"List all installed skills",input:{},output:{skills:[],total:0}}],sideEffects:["none"],handler:async()=>{let n=Un(),m=Object.entries(n.skills).map(([i,b])=>({slug:i,name:b.name,version:b.version,source:b.source}));return{skills:m,total:m.length}}};import{join as U$}from"node:path";import{createHash as D$,randomUUID as N$}from"node:crypto";import{createReadStream as V$,writeFileSync as L$,existsSync as B$,unlinkSync as C$}from"node:fs";import{tmpdir as K$}from"node:os";import{join as A$}from"node:path";var u2=D3(O2(),1);import{spawnSync as M$}from"node:child_process";import{cpSync as x2,existsSync as Pm,mkdirSync as l2,readdirSync as M2,rmSync as x$,statSync as l$}from"node:fs";import{dirname as u$,join as d0}from"node:path";import{appendFileSync as Q$,mkdirSync as W$}from"node:fs";import{dirname as q$}from"node:path";import{join as O$}from"node:path";function G$(){return O$(Qn(),".yunke","logs","skillshub.log")}function Ui(n,m){try{let i=G$();W$(q$(i),{recursive:!0});let b=new Date().toISOString();Q$(i,`${b} [${n.toUpperCase()}] ${m}
12
- `,"utf-8")}catch{}}var G2=(n)=>Ui("info",n),Si=(n)=>Ui("warn",n),t0=(n)=>Ui("error",n);function j$(){return d0(Qn(),".yunke","skill-cache")}function j2(n){return d0(j$(),n)}function V0(n){if(!Pm(n))return;if(M$(process.execPath,["-e",`require('fs').rmSync(${JSON.stringify(n)},{recursive:true,force:true})`],{env:{...process.env,NODE_OPTIONS:"",CODEBUDDY_SESSION_ID:"",CLAUDE_SESSION_ID:""},stdio:["ignore","ignore","pipe"]}).status!==0)x$(n,{recursive:!0,force:!0})}async function v2(n,m){let i=j2(m);if(Pm(i))try{V0(i)}catch(b){Si(`forceRmSync 清缓存失败已忽略: ${i} - ${b instanceof Error?b.message:String(b)}`)}return l2(i,{recursive:!0}),await u2.default(n,{dir:i}),v$(i),i}function v$(n){let m=M2(n);if(m.length!==1)return;let i=d0(n,m[0]);if(!l$(i).isDirectory())return;for(let b of M2(i))x2(d0(i,b),d0(n,b),{recursive:!0});V0(i)}function km(n,m,i=!1){if(Pm(m)&&!i)return!1;if(Pm(m))try{V0(m)}catch(b){Si(`forceRmSync 删旧目标失败已忽略: ${m} - ${b instanceof Error?b.message:String(b)}`)}return l2(u$(m),{recursive:!0}),x2(n,m,{recursive:!0,force:!0}),!0}function D2(n){V0(j2(n))}async function g$(n){let m=D$("sha256"),i=V$(n);return new Promise((b,$)=>{i.on("data",(o)=>m.update(o)),i.on("end",()=>b(m.digest("hex"))),i.on("error",$)})}async function Tm(n,m,i){let b=A$(K$(),`${N$()}.zip`);try{let $=await fetch(n);if(!$.ok)throw t0(`download failed: HTTP ${$.status} - ${n}`),new l("EXECUTION_FAILED",`下载失败: HTTP ${$.status} - ${n}`);if(!$.body)throw new l("EXECUTION_FAILED",`下载失败: 响应体为空 - ${n}`);let o=await $.arrayBuffer();if(L$(b,Buffer.from(o)),i){let _=await g$(b);if(_!==i)throw t0(`sha256 mismatch: expected ${i} got ${_}`),new l("EXECUTION_FAILED",`SHA-256 校验失败: 期望 ${i},实际 ${_}`)}return await v2(b,m)}finally{if(B$(b))C$(b)}}import{existsSync as R$}from"node:fs";import{join as fi}from"node:path";var E$=[{dir:".agents/skills",fallback:!0},{dir:".openclaw/skills"},{dir:".hermes/skills"},{dir:".workbuddy/skills"},{dir:".qoder/skills"},{dir:".trae/skills"},{dir:".claude/skills"},{dir:".cursor/skills"}];function L0(){let n=Qn(),m=[];for(let i of E$){if(i.fallback){m.push(fi(n,i.dir));continue}let b=i.dir.split("/")[0];if(R$(fi(n,b)))m.push(fi(n,i.dir))}return m}var S$="skillshub",N2={name:"skillshub.install",description:"Download and install a skill, distributing to all detected clients",category:"skillshub",pluginName:S$,parameters:w.object({slug:w.string().describe("skill 的 slug 标识"),force:w.boolean().default(!1).describe("覆盖已存在的 skill"),dir:w.string().optional().describe("单目录安装(escape hatch,默认多客户端分发)")}),returns:w.object({slug:w.string(),message:w.string()}),examples:[{description:"Install a skill by slug",input:{slug:"find-skills"},output:{slug:"find-skills",message:"Installed successfully"}}],sideEffects:["network","filesystem"],handler:async(n)=>{let m=Wn(),i=n.dir?[n.dir]:L0(),b=await un(`/api/v1/manifest/${encodeURIComponent(n.slug)}?target=${m.target}&channel=${m.channel}`),$=b.artifacts.find((q)=>q.target===m.target||q.target==="all");if(!$)throw new l("EXECUTION_FAILED",`无匹配的 artifact(target=${m.target})`);let o=await Tm($.downloadUrl,n.slug,$.sha256||void 0),_=0,J=[];for(let q of i)try{if(km(o,U$(q,n.slug),n.force))_++}catch(M){J.push(`${q}: ${M instanceof Error?M.message:String(M)}`)}if(J.length>0)t0(`${n.slug} copy failures: ${J.join(" | ")}`);if(G2(`${n.slug} installed to ${_}/${i.length} targets`),_===0&&J.length>0)throw new l("EXECUTION_FAILED",`所有目标安装失败:
13
- ${J.join(`
14
- `)}`);let X=Un(),Y={...X,skills:{...X.skills,[n.slug]:{name:n.slug,version:b.version,source:"skillshub"}}};M0(Y),await un(`/api/v1/install-record/${encodeURIComponent(n.slug)}`,{method:"POST"}).catch(()=>{});let H=J.length?`Installed to ${_} target(s); ${J.length} failed`:"Installed successfully";return{slug:n.slug,message:H}}};import{join as f$}from"node:path";var p$="skillshub",V2={name:"skillshub.remove",description:"Remove an installed skill from all clients and clean up its cache",category:"skillshub",pluginName:p$,parameters:w.object({slug:w.string().describe("要卸载的 skill slug"),dir:w.string().optional().describe("单目录卸载(escape hatch,默认移除所有客户端)"),force:w.boolean().optional().describe("跳过 lockfile 守卫,强制从各 agent 目录删除(用于清理孤儿/旧 slug)")}),returns:w.object({slug:w.string(),message:w.string()}),examples:[{description:"Remove a skill by slug",input:{slug:"find-skills"},output:{slug:"find-skills",message:"Removed successfully"}}],sideEffects:["filesystem"],handler:async(n)=>{let m=n.dir?[n.dir]:L0(),i=Un();if(!n.force&&!(n.slug in i.skills))throw new l("EXECUTION_FAILED",`skill '${n.slug}' 未安装`);for(let o of m)V0(f$(o,n.slug));let{[n.slug]:b,...$}=i.skills;return M0({...i,skills:$}),D2(n.slug),{slug:n.slug,message:"Removed successfully"}}};var F$="skillshub",L2={name:"skillshub.info",description:"Show detailed information about a skill from the registry",category:"skillshub",pluginName:F$,parameters:w.object({slug:w.string().describe("skill 的 slug")}),returns:w.object({slug:w.string(),capability:w.unknown(),versions:w.array(w.unknown()),artifacts:w.array(w.unknown())}),examples:[{description:"Get info for a skill",input:{slug:"find-skills"},output:{slug:"find-skills",capability:{},versions:[],artifacts:[]}}],sideEffects:["network"],handler:async(n)=>{let m=await un(`/api/v1/capabilities/${encodeURIComponent(n.slug)}`);return{slug:n.slug,capability:m.capability,versions:m.versions,artifacts:m.artifacts}}};import{join as h$}from"node:path";var P$="skillshub",k$=w.object({slug:w.string(),status:w.enum(["upgraded","skipped","failed"]),from_version:w.string(),to_version:w.string(),message:w.string().optional()}),B2={name:"skillshub.upgrade",description:"Check for and apply updates to installed skills",category:"skillshub",pluginName:P$,parameters:w.object({slug:w.string().optional().describe("指定升级的 skill,不填则升级所有已安装的"),dir:w.string().optional().describe("单目录升级(escape hatch,默认所有客户端)"),check_only:w.boolean().default(!1).describe("只检查更新,不实际安装")}),returns:w.object({checked:w.number(),upgraded:w.number(),skipped:w.number(),failed:w.number(),details:w.array(k$)}),examples:[{description:"Check for updates without installing",input:{check_only:!0},output:{checked:2,upgraded:1,skipped:1,failed:0,details:[]}}],sideEffects:["network","filesystem"],handler:async(n)=>{let m=Wn(),i=Un(),b=n.slug?[n.slug]:Object.keys(i.skills),$=[],o=0,_=0,J=0;for(let X of b){let Y=i.skills[X];if(!Y){$.push({slug:X,status:"failed",from_version:"",to_version:"",message:"skill 未安装"}),J++;continue}try{let H=await un(`/api/v1/manifest/${encodeURIComponent(X)}?target=${m.target}&channel=${m.channel}`),q=H.version,M=Y.version,j=H.artifacts.find((N)=>N.target===m.target||N.target==="all");if(!j){$.push({slug:X,status:"skipped",from_version:M,to_version:q,message:"无匹配的 artifact"}),_++;continue}if(M===q){$.push({slug:X,status:"skipped",from_version:M,to_version:q}),_++;continue}if(n.check_only){$.push({slug:X,status:"upgraded",from_version:M,to_version:q}),o++;continue}let h=await Tm(j.downloadUrl,X,j.sha256||void 0),B=n.dir?[n.dir]:L0();for(let N of B)try{km(h,h$(N,X),!0)}catch{}i={...i,skills:{...i.skills,[X]:{...Y,version:q}}},M0(i),$.push({slug:X,status:"upgraded",from_version:M,to_version:q}),o++}catch(H){let q=H instanceof Error?H.message:String(H);$.push({slug:X,status:"failed",from_version:Y.version,to_version:"",message:q}),J++}}return{checked:b.length,upgraded:o,skipped:_,failed:J,details:$}}};var C2={name:"skillshub",version:"1.0.0",commands:[D6,L6,N2,V2,L2,B2]};import{createServer as m5}from"node:http";var T$="/api/v1";async function B0(n,m){let i=`${dn}${T$}${n}`,b=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(m)});if(!b.ok){let o=`HTTP ${b.status}`;try{let _=await b.json();o=_.detail??_.message??o}catch{}throw new l("EXECUTION_FAILED",`云客服务错误: ${o}`)}return(await b.json()).data}import{readFileSync as I$,writeFileSync as y$,mkdirSync as c$,existsSync as Fi,unlinkSync as z$}from"node:fs";import{homedir as Z$}from"node:os";import{join as K2}from"node:path";var pi=process.env.YUNKE_CONFIG_DIR??K2(Z$(),".yunke"),a0=K2(pi,"crm.json");function On(){if(!Fi(a0))return null;try{let n=I$(a0,"utf-8");return JSON.parse(n)}catch{return null}}function Im(n){if(!Fi(pi))c$(pi,{recursive:!0});y$(a0,JSON.stringify(n,null,2),"utf-8")}function A2(n){let m=On()??{token:"",user_id:"",company:"",company_code:"",name:"",phone:"",role:"",login_id:""};Im({...m,...n})}function g2(){if(Fi(a0))z$(a0)}import{randomBytes as R2,createHash as t$}from"node:crypto";import{request as d$}from"node:http";import{request as a$}from"node:https";var r$="https://crm.yunkecn.com/pc";function e$(n=process.env.YUNKE_PC_OAUTH_BASE_URL){let m=n?.replace(/\/$/,"");return m&&m.length>0?m:r$}var hi=e$();function E2(n,m){if(!n)return m;let i;try{i=new URL(n).host}catch{throw Error(`invalid iss: ${n}`)}return n.replace(/\/$/,"")}function Pi(n){return n.toString("base64url")}function U2(){return Pi(R2(32))}function S2(n){return Pi(t$("sha256").update(n,"utf8").digest())}function f2(){return Pi(R2(16))}function p2(n,m,i){return new Promise((b,$)=>{let J=(new URL(n).protocol==="https:"?a$:d$)(n,{method:"POST",agent:!1,headers:{"content-type":i,"content-length":String(Buffer.byteLength(m))}},(X)=>{let Y="";X.setEncoding("utf8"),X.on("data",(H)=>Y+=H),X.on("end",()=>b({status:X.statusCode??0,text:Y}))});J.on("error",$),J.write(m),J.end()})}async function F2(n,m){let i=JSON.stringify({redirect_uris:[m],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none",scope:"read",client_name:"yunke-cli"}),{status:b,text:$}=await p2(`${n}/oauth/register`,i,"application/json");if(b<200||b>=300)throw Error(`OAuth register failed: HTTP ${b} ${$}`);let o;try{o=JSON.parse($)}catch{throw Error(`OAuth register failed: bad json ${$}`)}if(!o?.client_id)throw Error("OAuth register failed: missing client_id");return o}function h2(n){let m=new URL(`${n.baseUrl}/oauth/authorize`);if(m.searchParams.set("client_id",n.clientId),m.searchParams.set("redirect_uri",n.redirectUri),m.searchParams.set("response_type","code"),m.searchParams.set("code_challenge",n.codeChallenge),m.searchParams.set("code_challenge_method","S256"),m.searchParams.set("state",n.state),n.scope)m.searchParams.set("scope",n.scope);return m.toString()}class ym extends Error{error;constructor(n,m){super(m);this.name="OAuthTokenError",this.error=n}}async function P2(n){let m=new URLSearchParams({grant_type:"authorization_code",code:n.code,client_id:n.clientId,redirect_uri:n.redirectUri,code_verifier:n.codeVerifier});return T2(`${n.baseUrl}/oauth/token`,m)}async function k2(n){let m=new URLSearchParams({grant_type:"refresh_token",refresh_token:n.refreshToken,client_id:n.clientId});return T2(`${n.baseUrl}/oauth/token`,m)}async function T2(n,m){let{status:i,text:b}=await p2(n,m.toString(),"application/x-www-form-urlencoded"),$=null;try{$=JSON.parse(b)}catch{}if(i<200||i>=300||!$||$.error){let o=$?.error??"http_error",_=$?.error_description??`HTTP ${i}`;throw new ym(o,_)}return $}import{spawn as s$}from"node:child_process";function n5(n,m=process.platform){let i={detached:!0,stdio:"ignore"};if(m==="win32")return{cmd:"cmd",args:["/c","start",'""',`"${n}"`],opts:{...i,windowsVerbatimArguments:!0}};if(m==="darwin")return{cmd:"open",args:[n],opts:i};return{cmd:"xdg-open",args:[n],opts:i}}function I2(n){let{cmd:m,args:i,opts:b}=n5(n);try{s$(m,i,b).unref()}catch{}}import{writeSync as y2}from"node:fs";function cm(n){y2(1,n)}function r0(n){y2(2,n)}function Dn(n){process.exit(n)}var n0="crm",i5=/^1[3-9]\d{9}$/,Ti=w.string().regex(i5,"手机号格式不合法,需为 11 位中国大陆手机号"),z2=w.object({id:w.string(),cellphone:w.string(),company_id:w.string(),user_id:w.string(),user_type:w.number(),real_name:w.string(),user_bind_state:w.number(),auto_call:w.number(),download_limit:w.number(),create_time:w.string(),use_sea:w.number(),department_id:w.string(),power_type:w.number(),login_account:w.string(),role_id:w.string(),user_telephone:w.string(),user_address:w.string(),user_email:w.string(),user_status:w.number(),login_id:w.string(),role_name:w.string(),manage_department_names:w.string(),is_manager:w.boolean(),asr:w.number()}),Z2={name:"crm.auth.send-code",description:"向手机号发送云客 CRM 短信验证码,登录第一步。",category:"crm",pluginName:n0,parameters:w.object({phone:Ti.describe("11 位中国大陆手机号")}),returns:w.object({success:w.boolean(),message:w.string()}),examples:[{description:"发送验证码",input:{phone:"13800138000"},output:{success:!0,message:"发送成功"}}],sideEffects:["network"],hidden:!0,handler:async({phone:n})=>{let m=await B0("/pc/sms/send",{phone:n,timestamp:Date.now()});return{success:m.success,message:m.message}}},t2={name:"crm.auth.verify",description:"验证短信验证码,返回该手机号关联的企业列表,登录第二步。",category:"crm",pluginName:n0,parameters:w.object({phone:Ti.describe("11 位中国大陆手机号"),sms_code:w.string().min(1).describe("收到的短信验证码")}),returns:w.object({companies:w.array(w.object({user_id:w.string(),user_type:w.number(),company_code:w.string(),company:w.string(),domain:w.string()}))}),examples:[{description:"验证验证码,返回企业列表",input:{phone:"13800138000",sms_code:"123456"},output:{companies:[{user_id:"u001",user_type:1,company_code:"yk001",company:"云客",domain:"yunke.ai"}]}}],sideEffects:["network"],hidden:!0,handler:async({phone:n,sms_code:m})=>{return{companies:await B0("/pc/login/verify",{phone:n,sms_code:m})}}},d2={name:"crm.auth.login",description:"选择企业登录,获取 token,自动拉取用户详情,将凭证写入 ~/.yunke/crm.json,登录第三步。",category:"crm",pluginName:n0,parameters:w.object({phone:Ti.describe("11 位中国大陆手机号"),y_code:w.string().min(1).describe("短信验证码(同 sms_code)"),company_code:w.string().min(1).describe("从 verify 步骤返回的企业代码")}),returns:w.object({token:w.string(),user_id:w.string(),company:w.string(),company_code:w.string(),name:w.string(),phone:w.string(),role:w.string(),login_id:w.string(),user_info:z2}),examples:[{description:"选择企业登录",input:{phone:"13800138000",y_code:"123456",company_code:"yk001"},output:{token:"tok_xxx",user_id:"u001",company:"云客",company_code:"yk001",name:"张三",phone:"13800138000",role:"admin",login_id:"lid_001",user_info:{id:"u001",real_name:"张三"}}}],sideEffects:["filesystem","network"],hidden:!0,handler:async({phone:n,y_code:m,company_code:i})=>{let b=await B0("/pc/login/token",{phone:n,y_code:m,company_code:i}),$={token:b.token,user_id:b.user_id,company:b.company,company_code:b.company_code,name:b.name,phone:b.phone,role:b.role,login_id:b.login_id};Im($);let o=await B0("/pc/user/info",{user_id:b.user_id,token:b.token});return{...$,user_info:o}}},a2={name:"crm.auth.user-info",description:"从配置文件读取 token+user_id,查询完整用户信息(可随时刷新)。",category:"crm",pluginName:n0,parameters:w.object({}),returns:z2,examples:[{description:"获取当前登录用户信息",input:{},output:{id:"u001",real_name:"张三",role_name:"管理员"}}],sideEffects:["network"],hidden:!0,handler:async()=>{let n=On();if(!n?.token||!n?.user_id)throw new l("CONFIG_ERROR","未登录,请先运行 'yunke crm.auth.login' 登录");return B0("/pc/user/info",{user_id:n.user_id,token:n.token})}},r2=300000;function zm(n){return n instanceof Error?n.message:String(n)}function b5(n){return new Promise((m,i)=>{n.once("error",i),n.listen(0,"127.0.0.1",()=>{n.removeListener("error",i),m()})})}async function c2(n){n.closeAllConnections?.(),await new Promise((m)=>n.close(()=>m())),await new Promise((m)=>setImmediate(m))}function ki(n,m){let i=n?"登录成功":"登录失败",b=n?"<p>✅ 已登录,可关闭此页面。</p>":`<p>❌ ${w5(m??"")}</p>`;return`<!DOCTYPE html><html lang="zh"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>${i} - yunke-cli</title><style>body{font-family:sans-serif;max-width:420px;margin:80px auto;padding:0 16px;text-align:center}</style></head><body><h2>${i}</h2>${b}</body></html>`}function w5(n){return n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function $5(n,m){return new Promise((i)=>{let b=setTimeout(()=>i(null),r2);n.on("request",($,o)=>{let _=new URL($.url??"/","http://127.0.0.1");if(_.pathname!=="/callback"){o.statusCode=404,o.end("not found");return}clearTimeout(b);let J=_.searchParams.get("code"),X=_.searchParams.get("state"),Y=_.searchParams.get("error"),H=_.searchParams.get("iss");if(Y){let q=_.searchParams.get("error_description")??Y;o.end(ki(!1,q)),i(null);return}if(!J||X!==m){o.statusCode=400,o.end(ki(!1,"授权回调参数无效(state 不匹配或缺 code)")),i(null);return}o.end(ki(!0)),i({code:J,iss:H})})})}var e2={name:"crm.auth.login-web",description:"发起浏览器 OAuth 登录:CLI 自动打开系统浏览器(裸输出授权 URL 绕过 JSON 信封,spawn 失败时用户可手动打开打印的 URL),等待回调换 token 后落盘。",category:"crm",pluginName:n0,parameters:w.object({}),returns:w.object({url:w.string()}),examples:[{description:"发起 OAuth 登录(CLI 自己开浏览器)",input:{},output:{url:"https://yunke-pc.example.com/pc/oauth/authorize?client_id=wb_xxx&..."}}],sideEffects:["filesystem","network"],timeout:r2+1e4,handler:async()=>{let n=hi,m=U2(),i=S2(m),b=f2(),$=m5();try{await b5($)}catch(q){r0(`启动本地回调服务器失败: ${zm(q)}
15
- `),Dn(1);return}let _=`http://127.0.0.1:${$.address().port}/callback`,J;try{J=(await F2(n,_)).client_id}catch(q){await c2($),r0(`OAuth 客户端注册失败: ${zm(q)}
16
- `),Dn(1);return}let X=h2({baseUrl:n,clientId:J,redirectUri:_,state:b,codeChallenge:i});cm(`${X}
17
- `),I2(X);let Y=await $5($,b),H=1;if(Y)try{let q=E2(Y.iss,n),M=await P2({baseUrl:q,code:Y.code,clientId:J,redirectUri:_,codeVerifier:m});Im({token:M.access_token,user_id:M.user_id??"",company:"",company_code:M.company_code??"",name:M.name??"",phone:"",role:"",login_id:"",refresh_token:M.refresh_token,expires_at:Date.now()+(M.expires_in??3600)*1000,client_id:J,redirect_uri:_,base_url:q}),H=0}catch(q){let M=q instanceof ym&&q.error==="access_denied"?"(请先在云枢完成「AI 助手登录」生成 agentapp 登录凭证)":"";r0(`登录失败: ${zm(q)}${M}
18
- `),H=1}await c2($),Dn(H);return}},s2={name:"crm.auth.status",description:'WorkBuddy 对接:检测登录状态。已登录 exit 0 + 输出 "Logged in as <name>";未登录 exit 非0。token 过期自动 refresh。',category:"crm",pluginName:n0,parameters:w.object({}),returns:w.object({logged_in:w.boolean()}),examples:[{description:"已登录",input:{},output:{logged_in:!0}}],sideEffects:["filesystem","network"],handler:async()=>{let n=On();if(!n?.token||!n?.user_id){Dn(1);return}if(!(n.expires_at!=null&&Date.now()>=n.expires_at)){cm(`Logged in as ${n.name}
19
- `),Dn(0);return}if(n.refresh_token&&n.client_id){try{let i=await k2({baseUrl:n.base_url||hi,refreshToken:n.refresh_token,clientId:n.client_id});A2({token:i.access_token,expires_at:Date.now()+(i.expires_in??3600)*1000,...i.refresh_token?{refresh_token:i.refresh_token}:{}}),cm(`Logged in as ${n.name}
20
- `),Dn(0);return}catch(i){r0(`刷新凭证失败: ${zm(i)}
21
- `)}Dn(1);return}Dn(1);return}},n8={name:"crm.auth.logout",description:"WorkBuddy 对接:登出,删除本地凭证(幂等,未登录也 exit 0)。",category:"crm",pluginName:n0,parameters:w.object({}),returns:w.object({success:w.boolean()}),examples:[{description:"登出",input:{},output:{success:!0}}],sideEffects:["filesystem"],handler:async()=>{return g2(),{success:!0}}};function m8(){let n=On();if(n?.base_url)try{let m=new URL(n.base_url);return`${m.protocol}//${m.host}`}catch{}return process.env.YUNKE_CRM_BASE_URL||"https://crm.yunkecn.com"}var o5={source:"yunkepc",package:"agentapp"};function _5(){let n=On();if(!n?.token||!n?.user_id)throw new l("CONFIG_ERROR","未登录,请先运行 'yunke crm.auth.login' 登录");return{token:n.token,user_id:n.user_id,company_code:n.company_code||""}}async function C(n,m,i){let{token:b,user_id:$,company_code:o}=_5(),_={...o5,userid:$,token:b,company:o,"content-type":"application/json",...i?.headers};if(i?.needOrigin)_.origin=m8();if(i?.formData)_["content-type"]="application/x-www-form-urlencoded; charset=UTF-8";let J=`${m8()}${n}`;if(i?.method==="GET"){let q=new URLSearchParams;for(let[M,j]of Object.entries(m))if(j!==void 0&&j!==null)q.set(M,String(j));J+=`?${q.toString()}`}let X;if(i?.method!=="GET")if(i?.formData){let q=new URLSearchParams;for(let[M,j]of Object.entries(m))if(j!==void 0&&j!==null)q.set(M,String(j));X=q.toString()}else X=JSON.stringify(m);let Y=await fetch(J,{method:i?.method??"POST",headers:_,body:X});if(!Y.ok)throw new l("EXECUTION_FAILED",`CRM 请求失败: HTTP ${Y.status}`);let H=await Y.json();if(!H.success&&H.code!==1e4)throw new l("EXECUTION_FAILED",H.message||H.msg||"CRM 业务失败");if(i?.rawResponse)return H;return H.data??H}function Ii(){return On()?.company_code||""}async function S(){let m=(await C("/usercenter/dept/tree",{id:"",showUser:!1,showUserStatus:"",queryQywxStatus:!1})).find((i)=>i.isDept);if(!m)throw new l("EXECUTION_FAILED","无法获取默认部门 ID");return m.id}var i8="crm",J5=w.object({id:w.string(),pid:w.string(),name:w.string(),is_dept:w.boolean(),bind_qywx:w.boolean(),offline_days:w.number(),sort:w.number(),account:w.string().nullable().optional(),phone_number:w.string().nullable().optional(),user_type:w.number().nullable().optional()}),X5=w.object({id:w.string(),pid:w.string(),name:w.string(),is_dept:w.boolean(),department_path:w.string(),routes:w.array(w.string()),bind_qywx:w.boolean(),offline_days:w.number(),sort:w.number(),account:w.string().nullable().optional(),phone_number:w.string().nullable().optional(),has_phone:w.boolean().nullable().optional(),user_type:w.number().nullable().optional()}),b8={name:"crm.org.department-tree",description:"查询指定部门下的子部门和员工列表(单级,不递归)。dept_id 为空时查根节点。",category:"crm",pluginName:i8,parameters:w.object({dept_id:w.string().optional().default("").describe("父部门 ID,空字符串表示根节点"),show_user:w.boolean().optional().default(!0).describe("是否返回员工节点"),show_user_status:w.string().optional().default("").describe("过滤员工状态"),query_qywx_status:w.boolean().optional().default(!1).describe("是否查询企业微信绑定状态")}),returns:w.object({items:w.array(J5)}),examples:[{description:"查询根节点",input:{},output:{items:[{id:"dept001",pid:"",name:"销售部",is_dept:!0,bind_qywx:!1,offline_days:0,sort:1}]}},{description:"查询指定部门的子节点",input:{dept_id:"dept001"},output:{items:[{id:"u001",pid:"dept001",name:"张三",is_dept:!1,bind_qywx:!1,offline_days:0,sort:1,phone_number:"13800138000"}]}}],sideEffects:["network"],handler:async({dept_id:n,show_user:m,show_user_status:i,query_qywx_status:b})=>{return{items:(await C("/usercenter/dept/tree",{id:n,showUser:m,showUserStatus:i,queryQywxStatus:b})??[]).map((o)=>({id:String(o.id??""),pid:String(o.pid??""),name:String(o.name??""),is_dept:Boolean(o.isDept),bind_qywx:Boolean(o.bindQywx),offline_days:Number(o.offlineDays??0),sort:Number(o.sort??0),account:o.account??null,phone_number:o.phoneNumber??null,user_type:o.userType??null}))}}},w8={name:"crm.org.search",description:"通过关键词模糊搜索部门和员工。search_type: 1=仅部门, 2=仅员工, 3=全部(默认)。",category:"crm",pluginName:i8,parameters:w.object({keyword:w.string().min(1).describe("搜索关键词"),search_type:w.number().int().min(1).max(3).optional().default(3).describe("1=仅部门 2=仅员工 3=全部"),limit:w.number().int().min(1).max(100).optional().default(20).describe("返回条数上限"),phone_only:w.boolean().optional().default(!1).describe("仅返回有手机号的员工")}),returns:w.object({total:w.number(),results:w.array(X5)}),examples:[{description:'搜索关键词"张"',input:{keyword:"张"},output:{total:1,results:[{id:"u001",pid:"dept001",name:"张三",is_dept:!1,department_path:"销售部",routes:["dept001"],bind_qywx:!1,offline_days:0,sort:1}]}}],sideEffects:["network"],handler:async({keyword:n,search_type:m,limit:i,phone_only:b})=>{let $=await C("/usercenter/dept/search",{keyword:n.trim(),type:m,limit:i,phoneOnly:b,showUserStatus:"",queryQywxStatus:!1},{needOrigin:!0,rawResponse:!0}),o=($.data??[]).map((_)=>{let J=_.routes??[];return{id:String(_.id??""),pid:String(_.pid??""),name:String(_.name??""),is_dept:Boolean(_.isDept),routes:J,department_path:J.join("/"),bind_qywx:Boolean(_.bindQywx),offline_days:Number(_.offlineDays??0),sort:Number(_.sort??0),account:_.account??null,phone_number:_.phoneNumber??null,has_phone:Boolean(_.phoneNumber),user_type:_.userType??null}});return{total:$.total??o.length,results:o}}};var e0="crm";function $8(n){return String(n).padStart(2,"0")}function o8(n){return`${n.getFullYear()}-${$8(n.getMonth()+1)}-${$8(n.getDate())}`}var _8=w.object({show_name:w.string(),field_code:w.string(),module:w.string(),hidden:w.boolean()}),Y5=w.object({option:w.number(),modules:w.array(w.string()),columns:w.array(_8)}),J8={name:"crm.report.employee-statistics",description:"获取员工报表统计数据。option=department 为部门维度,option=employee 为员工维度。",category:"crm",pluginName:e0,parameters:w.object({option:w.enum(["department","employee"]).optional().default("department").describe("统计维度:department=部门维度,employee=员工维度"),depart_id:w.string().optional().default("").describe("部门 ID,空字符串表示全公司"),start_time:w.string().optional().default("").describe("开始时间,格式 YYYY-MM-DD,如 2026-04-01"),end_time:w.string().optional().default("").describe("结束时间,格式 YYYY-MM-DD,如 2026-04-08"),page:w.number().int().min(1).optional().default(1).describe("页码"),page_size:w.number().int().min(1).max(100).optional().default(10).describe("每页条数")}),returns:w.object({heads:Y5,total:w.number(),page:w.number(),page_size:w.number(),rows:w.array(w.record(w.unknown()))}),examples:[{description:"查询部门维度报表(第1页)",input:{option:"department",start_time:"2026-04-01",end_time:"2026-04-08"},output:{heads:{option:1,modules:["base"],columns:[{show_name:"部门",field_code:"dept_name",module:"base",hidden:!1}]},total:5,page:1,page_size:10,rows:[{dept_name:"销售部",total_calls:120}]}},{description:"查询员工维度报表",input:{option:"employee",start_time:"2026-04-01",end_time:"2026-04-08"},output:{heads:{option:2,modules:["base"],columns:[{show_name:"姓名",field_code:"name",module:"base",hidden:!1}]},total:20,page:1,page_size:10,rows:[{name:"张三",total_calls:50}]}}],sideEffects:["network"],handler:async({option:n,depart_id:m,start_time:i,end_time:b,page:$,page_size:o})=>{let _=n==="department"?1:2,J=new Date,X=b||o8(J),Y=i||o8(new Date(J.getTime()-518400000)),[H,q]=await Promise.all([C("/yunke-report-phone/custom/Report/getHead",{departId:m},{method:"GET"}),C("/yunke-report-phone/custom/Report/getDataView",{option:_,departId:m,pageSize:o,starttime:Y,endtime:X,page:$})]),M=(H.customShowHeads??[]).map((j)=>({show_name:String(j.showName??""),field_code:String(j.fieldCode??""),module:String(j.module??""),hidden:Number(j.hiddens)===1}));return{heads:{option:H.option??_,modules:H.modules??[],columns:M},total:q.total??0,page:$,page_size:o,rows:q.list??[]}}},yi=w.union([w.array(w.string()),w.string()]).transform((n)=>{if(Array.isArray(n))return n;try{return JSON.parse(n)}catch{return[n]}}),X8={name:"crm.report.custom-report-columns",description:"查询员工自定义报表的列配置(已启用字段及所有可配字段)。",category:"crm",pluginName:e0,parameters:w.object({depart_id:w.string().optional().default("").describe("部门 ID,空则取默认部门")}),returns:w.object({option:w.number(),modules:w.array(w.string()),columns:w.array(_8)}).passthrough(),examples:[{description:"查询默认部门报表列配置",input:{},output:{option:1,modules:["微信","短信","通话"],columns:[{show_name:"发送消息数量",field_code:"wechatOutMsg",module:"微信",hidden:!1}]}}],sideEffects:["network"],handler:async({depart_id:n})=>{let m=n||await S();return await C("/yunke-report-phone/custom/Report/getHead",{departId:m},{method:"GET"})}},Y8={name:"crm.report.set-custom-report-columns",description:"设置员工自定义报表的列配置(从 custom-report-columns 取得后修改 hiddens 再传入)。",category:"crm",pluginName:e0,parameters:w.object({custom_show_heads:w.string().describe("列配置 JSON 字符串(从 custom-report-columns 取得后修改)"),option:w.number().int().optional().default(1).describe("统计维度,默认 1"),modules:yi.optional().default(["微信","短信","通话"]).describe("启用模块"),max_rank:w.number().int().optional().default(8).describe("排名上限"),min_rank:w.number().int().optional().default(1).describe("排名下限")}),returns:w.object({}).passthrough(),examples:[{description:"设置列配置",input:{custom_show_heads:'[{"fieldCode":"wechatOutMsg","showName":"发送消息","module":"微信","hiddens":0,"userPower":false}]'},output:{}}],sideEffects:["network"],handler:async({custom_show_heads:n,option:m,modules:i,max_rank:b,min_rank:$})=>{let o;try{o=JSON.parse(n)}catch{throw new l("VALIDATION_FAILED","custom_show_heads 不是合法 JSON")}return await C("/yunke-report-phone/custom/Report/setHead",{option:m,modules:i,maxRank:b,minRank:$,customShowHeads:o})}},H8={name:"crm.report.customer-statistics",description:"查询客户统计(新增/跟进/待跟进/成交等指标,含环比对比)。",category:"crm",pluginName:e0,parameters:w.object({department_ids:yi.describe("部门 ID 列表(JSON 字符串或数组)"),user_ids:yi.optional().default([]).describe("用户 ID 列表,空则查部门下全部"),time_range:w.number().int().optional().default(2).describe("时间范围:2=昨日 3=近7日 4=近15日 5=近30日")}),returns:w.object({}).passthrough(),examples:[{description:"查询部门客户统计(近7日)",input:{department_ids:'["DEPT001"]',time_range:3},output:{}}],sideEffects:["network"],handler:async({department_ids:n,user_ids:m,time_range:i})=>{return await C("/pc/customer-metrics-stats/metrics",{userIds:m,departmentIds:n,timeRange:i})}},Q8={name:"crm.report.device-usage-statistics",description:"查询设备/应用使用时长统计。",category:"crm",pluginName:e0,parameters:w.object({page_num:w.number().int().min(1).optional().default(1).describe("页码"),page_size:w.number().int().min(1).max(10).optional().default(5).describe("每页条数"),search_type:w.number().int().optional().default(1).describe("搜索类型,默认 1"),sort_type:w.string().optional().default("desc").describe("排序:desc/asc"),user_id:w.string().optional().default("").describe("用户 ID,空则查部门下全部"),range:w.number().int().optional().default(0).describe("时间范围代码:0=今天 -1=昨天 -32=自定义"),range_str:w.string().optional().default("").describe('自定义时间范围,range=-32 时用,格式 "开始,结束"'),department_id:w.string().optional().default("").describe("部门 ID,空则取默认部门")}),returns:w.object({}).passthrough(),examples:[{description:"查询设备应用使用时长(今天)",input:{},output:{}}],sideEffects:["network"],handler:async(n)=>{let m=n.department_id||await S();return await C("/pc/appstatistics/apps",{pageNum:n.page_num,pageSize:n.page_size,searchType:n.search_type,sortType:n.sort_type,userId:n.user_id,range:n.range,rangeStr:n.range_str,departmentId:m})}};var H5="crm",W8={name:"crm.report.device-statistics",description:"查询设备统计(总数/已绑定/锁定/激活)。department_id 空则取默认部门。",category:"crm",pluginName:H5,parameters:w.object({department_id:w.string().optional().default("").describe("部门 ID,空则取默认部门"),user_id:w.string().optional().default("").describe("用户 ID,空则查部门下全部")}),returns:w.object({total:w.number(),has_bind:w.number(),locked:w.number(),actived:w.number()}),examples:[{description:"查询默认部门设备统计",input:{},output:{total:10,has_bind:8,locked:1,actived:7}}],sideEffects:["network"],handler:async({department_id:n,user_id:m})=>{let i=n||await S(),b=await C("/pc/setup/deviceStatistics",{departmentId:i,userId:m});return{total:b.total,has_bind:b.hasBind,locked:b.locked,actived:b.actived}}};var G8="crm";function q8(n){return String(n).padStart(2,"0")}function O8(n,m=!1){return`${n.getFullYear()}-${q8(n.getMonth()+1)}-${q8(n.getDate())} ${m?"23:59:59":"00:00:00"}`}var Q5=w.object({user_id:w.string(),user_name:w.string(),longitude:w.number().nullable(),latitude:w.number().nullable(),addr:w.string(),created_time:w.string(),last_online_time:w.string(),active_type:w.number(),in_or_out:w.number(),in_or_out_name:w.string(),loc_duration:w.number(),location_exception:w.number()}),M8={name:"crm.location.by-department",description:"查询指定部门所有员工的最后一次定位记录。建议先用 org.search 或 org.department-tree 缩小部门范围。",category:"crm",pluginName:G8,parameters:w.object({department_id:w.string().min(1).describe("部门 ID(可通过 org.search / org.department-tree 获取)"),device_code:w.string().optional().default("").describe("设备编码,空则不过滤")}),returns:w.object({total:w.number(),records:w.array(Q5)}),examples:[{description:"查询部门员工最后定位",input:{department_id:"DEPT001"},output:{total:1,records:[{user_id:"u001",user_name:"张三",longitude:116.4,latitude:39.9,addr:"北京市",created_time:"2026-08-01 10:00:00",last_online_time:"2026-08-01 10:00:00",active_type:1,in_or_out:3,in_or_out_name:"未知",loc_duration:0,location_exception:0}]}}],sideEffects:["network"],handler:async({department_id:n,device_code:m})=>{let b=(await C("/pc/location/getEveryoneLastRecord",{departmentId:n,deviceCode:m})??[]).map(($)=>({user_id:String($.userId??""),user_name:String($.userName??""),longitude:$.longitude??null,latitude:$.latitude??null,addr:String($.addr??""),created_time:String($.createdTime??""),last_online_time:String($.lastOnlineTime??""),active_type:Number($.activeType??0),in_or_out:Number($.inOrOut??3),in_or_out_name:String($.inOrOutName??"未知"),loc_duration:Number($.locDuration??0),location_exception:Number($.locationException??0)}));return{total:b.length,records:b}}},W5=w.object({user_id:w.string(),longitude:w.number().nullable(),latitude:w.number().nullable(),addr:w.string(),created_time:w.string(),start_time:w.string(),end_time:w.string(),loc_duration:w.number(),in_or_out:w.number(),in_or_out_name:w.string(),active_type:w.number(),location_exception:w.number()}),x8={name:"crm.location.by-user",description:"查询指定员工在时间段内的定位轨迹。建议显式传入较短时间范围,不要依赖默认近30天。",category:"crm",pluginName:G8,parameters:w.object({user_id:w.string().min(1).describe("员工用户 ID(可通过 org.search 获取)"),start_time:w.string().optional().default("").describe("开始时间 YYYY-MM-DD HH:mm:ss,空则默认近30天"),end_time:w.string().optional().default("").describe("结束时间 YYYY-MM-DD HH:mm:ss,空则默认今天"),device_code:w.string().optional().default("").describe("设备编码,空则不过滤")}),returns:w.object({total:w.number(),records:w.array(W5)}),examples:[{description:"查询员工某天轨迹",input:{user_id:"u001",start_time:"2026-08-01 00:00:00",end_time:"2026-08-01 23:59:59"},output:{total:1,records:[{user_id:"u001",longitude:116.4,latitude:39.9,addr:"北京市",created_time:"2026-08-01 10:00:00",start_time:"2026-08-01 09:00:00",end_time:"2026-08-01 12:00:00",loc_duration:10800000,in_or_out:3,in_or_out_name:"未知",active_type:1,location_exception:0}]}}],sideEffects:["network"],handler:async({user_id:n,start_time:m,end_time:i,device_code:b})=>{let $=new Date,o=i||O8($,!0),_=m||O8(new Date($.getTime()-2592000000),!1),J=await C("/pc/location/getLocRecordByUserId",{userId:n,createTimeRange:{start:_,end:o},deviceCode:b}),X=(J?.list??[]).map((Y)=>({user_id:String(Y.userId??n),longitude:Y.longitude??null,latitude:Y.latitude??null,addr:String(Y.addr??""),created_time:String(Y.createdTime??""),start_time:String(Y.starttime??""),end_time:String(Y.endtime??""),loc_duration:Number(Y.locDuration??0),in_or_out:Number(Y.inOrOut??3),in_or_out_name:String(Y.inOrOutName??"未知"),active_type:Number(Y.activeType??0),location_exception:Number(Y.locationException??0)}));return{total:J?.total??X.length,records:X}}};var l8="crm",ci=w.union([w.string(),w.number()]).transform((n)=>String(n)),u8={name:"crm.call.log-list",description:"获取通话记录列表。后端每页最多 10 条;pageCount > 当前页时需翻页取全后再汇总。",category:"crm",pluginName:l8,parameters:w.object({page:w.number().int().min(1).optional().default(1).describe("页码,从 1 开始"),page_size:w.number().int().min(1).max(10).optional().default(5).describe("每页条数,建议 5-10"),sales_progress:w.string().optional().default("").describe("销售进度"),start_voice_time:w.string().optional().default("").describe("语音开始时间 YYYY-MM-DD HH:mm:ss"),end_voice_time:w.string().optional().default("").describe("语音结束时间"),start_create_time:w.string().optional().default("").describe("创建开始时间"),end_create_time:w.string().optional().default("").describe("创建结束时间"),search_info:w.string().optional().default("").describe("搜索关键词(客户名/公司等)"),last_connect_time_start:w.string().optional().default("").describe("最后连接开始时间"),last_connect_time_end:w.string().optional().default("").describe("最后连接结束时间"),filter_user_id:ci.optional().default("").describe("按员工用户 ID 筛选"),tip_type:w.string().optional().default("").describe("提示类型"),progress:w.string().optional().default("").describe("进度状态"),call_seconds:w.string().optional().default("").describe("通话秒数筛选"),department_id:w.string().optional().default("").describe("部门 ID,空则取默认部门"),search_phone:ci.optional().default("").describe("按电话号码搜索"),call_id:ci.optional().default("").describe("通话记录 ID"),call_type:w.string().optional().default("s").describe("通话类型,默认 s")}),returns:w.object({page:w.number(),pageCount:w.number(),totalCount:w.number(),data:w.array(w.unknown())}).passthrough(),examples:[{description:"获取第 1 页通话记录",input:{page:1,page_size:5},output:{page:1,pageCount:3,totalCount:15,data:[]}}],sideEffects:["network"],handler:async(n)=>{let m=n.department_id||await S();return await C("/pc/callLog/list",{page:n.page,pageSize:n.page_size,salesProgress:n.sales_progress,startVoiceTime:n.start_voice_time,endVoiceTime:n.end_voice_time,startCreateTime:n.start_create_time,endCreateTime:n.end_create_time,searchInfo:n.search_info,lastConnectTimeStart:n.last_connect_time_start,lastConnectTimeEnd:n.last_connect_time_end,userId:n.filter_user_id,tipType:n.tip_type,progress:n.progress,callSeconds:n.call_seconds,departmentId:m,searchPhone:n.search_phone,id:n.call_id,callType:n.call_type})}},j8={name:"crm.call.asr-result",description:"获取通话录音的 ASR 语音转写结果。",category:"crm",pluginName:l8,parameters:w.object({call_action_id:w.string().min(1).describe("通话 ID"),audio_url:w.string().optional().default("").describe("音频文件 URL(可选)"),call_type:w.string().optional().default("1").describe("录音类型:1=通话,12=本地录音")}),returns:w.object({trans_complete:w.number(),asr_result:w.array(w.unknown()),message:w.string()}),examples:[{description:"获取通话录音的 ASR 转写结果",input:{call_action_id:"123456",call_type:"1"},output:{trans_complete:1,asr_result:[],message:""}}],sideEffects:["network"],handler:async({call_action_id:n,audio_url:m,call_type:i})=>{let b=await C("/pc/trans/transWord",{businessId:n,callActionId:n,isTrans:1,number:1,url:m,phone:"",type:i});return{trans_complete:b.transComplete??0,asr_result:b.asrResult??[],message:b.message??""}}};var s0="crm",q5=w.union([w.string(),w.number()]).transform((n)=>String(n)),v8=w.union([w.array(w.string()),w.string()]).transform((n)=>{if(Array.isArray(n))return n;try{return JSON.parse(n)}catch{return[n]}});function D8(n){return new Date(n.replace(" ","T")).getTime()}var N8={name:"crm.misc.fly-order-warning",description:"查询飞单预警分析列表,检测员工可能的飞单行为。",category:"crm",pluginName:s0,parameters:w.object({start_time:w.string().describe("开始时间 yyyy-MM-dd HH:mm:ss"),end_time:w.string().describe("结束时间 yyyy-MM-dd HH:mm:ss"),page_index:w.number().int().min(1).optional().default(1).describe("页码"),page_size:w.number().int().min(1).max(10).optional().default(5).describe("每页条数"),dept_id:w.string().optional().default("").describe("部门 ID,空则取默认部门"),user_id:w.string().optional().default("").describe("员工 ID"),user_ids:v8.optional().default([]).describe("员工 ID 列表"),search_type:w.number().int().optional().describe("搜索类型:1客户姓名 2客户手机号 3员工姓名 4员工手机号 5客户微信昵称 6客户微信号 7员工微信昵称 8员工微信号"),keyword:w.string().optional().default("").describe("搜索关键词"),ctype:w.number().int().optional().describe("沟通类型:1电话 2微信 3微信长语音"),sort_field:w.number().int().optional().describe("排序字段:1分析时间 2沟通时间"),sort_order:w.string().optional().default("").describe("排序:asc/desc"),range_field:w.number().int().optional().describe("过滤时间字段:1分析时间 2沟通时间"),call_second_type:w.number().int().optional().describe("通话时长类型"),call_percent:w.number().int().optional().describe("员工通话占比"),call_speed:w.number().int().optional().describe("语速"),missing_topic:v8.optional().default([]).describe("飞单话题筛选列表")}),returns:w.object({}).passthrough(),examples:[{description:"查询飞单预警",input:{start_time:"2026-07-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let m=n.dept_id||await S();return await C("/pc/ai/analyse/employee/orderMissing/list",{pageIndex:n.page_index,pageSize:n.page_size,startTime:n.start_time,endTime:n.end_time,dptId:m,userId:n.user_id,userIds:n.user_ids,type:n.search_type,keyword:n.keyword,ctype:n.ctype,sortField:n.sort_field,sortOrder:n.sort_order,rangeField:n.range_field,callSecondType:n.call_second_type,callPercent:n.call_percent,callSpeed:n.call_speed,missingTopic:n.missing_topic})}},V8={name:"crm.misc.sms-history",description:"查询短信历史记录列表。",category:"crm",pluginName:s0,parameters:w.object({page:w.number().int().min(1).optional().default(1).describe("页码"),page_size:w.number().int().min(1).max(10).optional().default(5).describe("每页条数"),customer_id:w.string().optional().default("").describe("客户 ID"),customer_name:w.string().optional().default("").describe("客户姓名"),customer_phone:q5.optional().default("").describe("客户手机号"),start_time:w.string().optional().default("").describe("开始时间"),end_time:w.string().optional().default("").describe("结束时间")}),returns:w.object({}).passthrough(),examples:[{description:"查询短信记录",input:{},output:{}}],sideEffects:["network"],handler:async({page:n,page_size:m,customer_id:i,customer_name:b,customer_phone:$,start_time:o,end_time:_})=>{return await C("/pc/customer/smsLogsList",{page:n,pageSize:m,customerId:i,customerName:b,customerPhone:$,startTime:o,endTime:_})}},L8={name:"crm.misc.site-recording",description:"查询现场录音或工牌录音列表。",category:"crm",pluginName:s0,parameters:w.object({start_time:w.string().describe("开始时间"),end_time:w.string().describe("结束时间"),page_index:w.number().int().min(1).optional().default(1).describe("页码"),page_size:w.number().int().min(1).max(10).optional().default(5).describe("每页条数"),device_type:w.number().int().optional().default(0).describe("设备类型:0=现场录音 1=工牌录音"),user_id:w.string().optional().default("").describe("员工 ID"),user_name:w.string().optional().default("").describe("员工姓名"),dept_id:w.string().optional().default("").describe("部门 ID,空则取默认部门")}),returns:w.object({}).passthrough(),examples:[{description:"查询现场录音",input:{start_time:"2026-07-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let m=n.dept_id||await S();return await C("/pc/voice/queryvoicelist",{pageIndex:n.page_index,pageSize:n.page_size,startTime:n.start_time,endTime:n.end_time,deviceType:n.device_type,userId:n.user_id,userName:n.user_name,deptId:m})}},B8={name:"crm.misc.control-logs",description:"查询管控日志列表(开始/结束时间转毫秒时间戳传后端)。",category:"crm",pluginName:s0,parameters:w.object({start_time:w.string().describe("开始时间 yyyy-MM-dd HH:mm:ss"),end_time:w.string().describe("结束时间 yyyy-MM-dd HH:mm:ss"),page_num:w.number().int().min(1).optional().default(1).describe("页码"),page_size:w.number().int().min(1).max(10).optional().default(5).describe("每页条数")}),returns:w.object({}).passthrough(),hidden:!0,examples:[{description:"查询管控日志",input:{start_time:"2026-08-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async({start_time:n,end_time:m,page_num:i,page_size:b})=>{return await C("/wxz/web/config/get_control_log_list",{pageNum:i,pageSize:b,phone:"",name:"",type:"",status:"",startTriggerTime:D8(n),endTriggerTime:D8(m),showTime:[]},{headers:{source:"h5",package:"com.applet.manage",channel:"4"}})}},O5=new Set(["menus","themeConfig","showfieldHead","showfieldHeadShow"]),C8={name:"crm.user.info",description:"获取当前登录用户的关键信息(基础身份、权限、部门、角色),已过滤 menus/themeConfig 等大字段。可作为需要 userId/departmentId 的前置调用。",category:"crm",pluginName:s0,parameters:w.object({}),returns:w.object({}).passthrough(),examples:[{description:"获取当前用户信息",input:{},output:{id:"u001",real_name:"张三",role_name:"管理员"}}],sideEffects:["network"],handler:async()=>{let n=await C("/pc/home/userInfo",{});return Object.fromEntries(Object.entries(n).filter(([m])=>!O5.has(m)))}};var t="crm",G5=w.union([w.string(),w.number()]).transform((n)=>String(n)),Fn=w.union([w.array(w.string()),w.string()]).transform((n)=>{if(Array.isArray(n))return n;try{return JSON.parse(n)}catch{return[n]}}),nm=w.union([w.array(w.number()),w.string()]).transform((n)=>{if(Array.isArray(n))return n;try{return JSON.parse(n)}catch{return[Number(n)]}}),on={start_time:w.string().describe("开始时间 yyyy-MM-dd HH:mm:ss"),end_time:w.string().describe("结束时间 yyyy-MM-dd HH:mm:ss"),page_index:w.number().int().min(1).optional().default(1).describe("页码"),page_size:w.number().int().min(1).max(10).optional().default(5).describe("每页条数"),dept_id:w.string().optional().default("").describe("部门 ID,空则取默认部门"),user_id:w.string().optional().default("").describe("员工 ID"),user_ids:Fn.optional().default([]).describe("员工 ID 列表"),search_type:w.number().int().optional().describe("搜索类型:1客户姓名 2客户手机号 3员工姓名 4员工手机号 5客户微信昵称 6客户微信号 7员工微信昵称 8员工微信号"),keyword:w.string().optional().default("").describe("搜索关键词"),ctype:w.number().int().optional().describe("沟通类型:1电话 2微信 3微信长语音"),sort_field:w.number().int().optional().describe("排序字段:1分析时间 2沟通时间"),sort_order:w.string().optional().default("").describe("排序:asc/desc"),range_field:w.number().int().optional().describe("过滤时间字段:1分析时间 2沟通时间"),call_second_type:w.number().int().optional().describe("通话时长类型")};function _n(n,m,i={}){return{pageIndex:n.page_index,pageSize:n.page_size,startTime:n.start_time,endTime:n.end_time,dptId:m,userId:n.user_id,userIds:n.user_ids,type:n.search_type,keyword:n.keyword,ctype:n.ctype,sortField:n.sort_field,sortOrder:n.sort_order,rangeField:n.range_field,callSecondType:n.call_second_type,...i}}var K8={name:"crm.ai.sop-analysis",description:"查询员工 SOP 分析列表,评估话术执行情况。",category:"crm",pluginName:t,parameters:w.object({...on,call_percent:w.number().int().optional().describe("通话占比"),call_speed:w.number().int().optional().describe("语速"),sop_id:w.string().optional().default("").describe("SOP 配置 ID"),sop_step_id:w.string().optional().default("").describe("SOP 步骤 ID"),sop_type:nm.optional().default([]).describe("SOP 评估类型列表")}),returns:w.object({}).passthrough(),examples:[{description:"查询 SOP 分析",input:{start_time:"2026-07-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let m=n.dept_id||await S();return await C("/pc/ai/analyse/employee/sop/list",_n(n,m,{callPercent:n.call_percent,callSpeed:n.call_speed,sopId:n.sop_id,sopStepId:n.sop_step_id,sopType:n.sop_type}))}},A8={name:"crm.ai.excellent-speech",description:"查询优秀话术列表。",category:"crm",pluginName:t,parameters:w.object({...on,call_percent:w.number().int().optional(),call_speed:w.number().int().optional(),good_speech_type:w.number().int().optional().describe("优秀话术类型")}),returns:w.object({}).passthrough(),examples:[{description:"查询优秀话术",input:{start_time:"2026-07-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let m=n.dept_id||await S();return await C("/pc/ai/analyse/employee/speech/list",_n(n,m,{callPercent:n.call_percent,callSpeed:n.call_speed,goodSpeechType:n.good_speech_type}))}},g8={name:"crm.ai.employee-analysis",description:"查询员工 AI 分析列表。",category:"crm",pluginName:t,parameters:w.object({...on,call_percent:w.number().int().optional(),call_speed:w.number().int().optional()}),returns:w.object({}).passthrough(),examples:[{description:"查询员工分析",input:{start_time:"2026-07-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let m=n.dept_id||await S();return await C("/pc/ai/analyse/employee/list",_n(n,m,{callPercent:n.call_percent,callSpeed:n.call_speed}))}},R8={name:"crm.ai.customer-objection",description:"查询客户异议分析列表。",category:"crm",pluginName:t,parameters:w.object({...on,objection:Fn.optional().default([]).describe("异议列表"),select_type:w.number().int().optional().describe("筛选类型"),solution_judge:w.string().optional().default("").describe("解决方案判定")}),returns:w.object({}).passthrough(),examples:[{description:"查询客户异议",input:{start_time:"2026-07-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let m=n.dept_id||await S();return await C("/pc/ai/customerInsights/objection/list",_n(n,m,{objection:n.objection,selectType:n.select_type,solutionJudge:n.solution_judge}))}},E8={name:"crm.ai.customer-pain-point",description:"查询客户痛点分析列表。",category:"crm",pluginName:t,parameters:w.object({...on,pain:Fn.optional().default([]).describe("痛点列表"),select_type:w.number().int().optional(),solution_judge:w.string().optional().default("")}),returns:w.object({}).passthrough(),examples:[{description:"查询客户痛点",input:{start_time:"2026-07-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let m=n.dept_id||await S();return await C("/pc/ai/customerInsights/pain/list",_n(n,m,{pain:n.pain,selectType:n.select_type,solutionJudge:n.solution_judge}))}},U8={name:"crm.ai.customer-issue",description:"查询客户问题分析列表。",category:"crm",pluginName:t,parameters:w.object({...on,issue:Fn.optional().default([]).describe("问题列表"),select_type:w.number().int().optional(),solution_judge:w.string().optional().default("")}),returns:w.object({}).passthrough(),examples:[{description:"查询客户问题",input:{start_time:"2026-07-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let m=n.dept_id||await S();return await C("/pc/ai/customerInsights/issue/list",_n(n,m,{issue:n.issue,selectType:n.select_type,solutionJudge:n.solution_judge}))}},S8={name:"crm.ai.customer-emotion",description:"查询客户情绪分析列表。",category:"crm",pluginName:t,parameters:w.object({...on,mood_type:nm.optional().default([]).describe("情绪类型列表"),select_type:w.number().int().optional()}),returns:w.object({}).passthrough(),examples:[{description:"查询客户情绪",input:{start_time:"2026-07-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let m=n.dept_id||await S();return await C("/pc/ai/customerInsights/mood/list",_n(n,m,{moodType:n.mood_type,selectType:n.select_type}))}},f8={name:"crm.ai.competitor-analysis",description:"查询竞品分析列表。",category:"crm",pluginName:t,parameters:w.object({...on,competitor:Fn.optional().default([]).describe("竞品列表"),select_type:w.number().int().optional()}),returns:w.object({}).passthrough(),examples:[{description:"查询竞品分析",input:{start_time:"2026-07-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let m=n.dept_id||await S();return await C("/pc/ai/customerInsights/competitor/list",_n(n,m,{competitor:n.competitor,selectType:n.select_type}))}},p8={name:"crm.ai.failure-analysis",description:"查询战败分析列表。",category:"crm",pluginName:t,parameters:w.object({...on,failure_reason:Fn.optional().default([]).describe("战败原因列表"),detail_reason:Fn.optional().default([]).describe("细分原因列表"),intention:nm.optional().default([]).describe("意向度列表"),clue_value:nm.optional().default([]).describe("线索价值列表:1高2中3低"),customer_id:w.string().optional().default("").describe("客户 ID")}),returns:w.object({}).passthrough(),examples:[{description:"查询战败分析",input:{start_time:"2026-07-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let m=n.dept_id||await S();return await C("/pc/ai/customerInsights/failureAnalyse/list",_n(n,m,{failureReason:n.failure_reason,detailReason:n.detail_reason,intention:n.intention,clueValue:n.clue_value,customerId:n.customer_id}))}},F8={name:"crm.ai.failure-detail",description:"查询战败详情列表(单通维度,customer_id 必填)。",category:"crm",pluginName:t,parameters:w.object({...on,customer_id:w.string().describe("客户 ID(必填)")}),returns:w.object({}).passthrough(),examples:[{description:"查询战败详情",input:{start_time:"2026-07-01 00:00:00",end_time:"2026-08-05 23:59:59",customer_id:"C001"},output:{}}],sideEffects:["network"],handler:async(n)=>{let m=n.dept_id||await S();return await C("/pc/ai/customerInsights/failureDetail/list",_n(n,m,{customerId:n.customer_id}))}},h8={name:"crm.ai.sop-quality-analysis",description:"查询 SOP 质检分析列表。",category:"crm",pluginName:t,parameters:w.object({...on,quality_type:w.number().int().optional().describe("质检类型:1关键词2SOP"),quality_result:w.number().int().optional().describe("质检结果:1合格3不合格5好7中9差"),comm_scenario_id:w.number().int().optional().describe("沟通场景 ID"),sop_id:w.number().int().optional().describe("SOP 配置 ID"),rule_id:w.number().int().optional().describe("规则模板 ID"),task_id:w.number().int().optional().describe("任务 ID"),call_id:w.string().optional().default("").describe("通话 ID")}),returns:w.object({}).passthrough(),examples:[{description:"查询 SOP 质检",input:{start_time:"2026-07-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let m=n.dept_id||await S();return await C("/pc/sopQualityAnalyse/list",_n(n,m,{qualityType:n.quality_type,qualityResult:n.quality_result,commScenarioId:n.comm_scenario_id,sopId:n.sop_id,ruleId:n.rule_id,taskId:n.task_id,callId:n.call_id}))}},P8={name:"crm.ai.employee-emotion",description:"分析员工沟通中的情绪表现。",category:"crm",pluginName:t,parameters:w.object({page_index:w.number().int().min(1).optional().default(1).describe("页码"),page_size:w.number().int().min(1).max(10).optional().default(5).describe("每页条数"),mood_types:nm.optional().default([]).describe("情绪类型列表(1喜悦3满足5兴奋7希望11耐心25平静27专业13愤怒15悲伤17焦虑21失望23挫折)"),start_time:w.string().optional().default("").describe("开始时间,空则不限制"),end_time:w.string().optional().default("").describe("结束时间,空则不限制"),communication_type:w.string().optional().default("").describe("沟通类型:1电话2微信3微信语音5企微聊天6企微语音11工牌12现场"),filter_user_id:w.string().optional().default("").describe("员工用户 ID"),dept_id:w.string().optional().default("").describe("部门 ID,空则取默认部门")}),returns:w.object({}).passthrough(),examples:[{description:"查询员工情绪",input:{},output:{}}],sideEffects:["network"],handler:async(n)=>{let m=n.dept_id||await S();return await C("/pc/ai/analyse/employee/list",{pageIndex:n.page_index,pageSize:n.page_size,startTime:n.start_time,endTime:n.end_time,type:"1",dptId:m,comCode:Ii(),userId:n.filter_user_id,ctype:n.communication_type,moodType:n.mood_types,rangeField:"1",selectType:3})}},k8={name:"crm.ai.customer-intention",description:"获取客户 AI 分析列表(意向/情绪/痛点/异议等)。",category:"crm",pluginName:t,parameters:w.object({page_index:w.number().int().min(1).optional().default(1).describe("页码"),page_size:w.number().int().min(1).max(10).optional().default(5).describe("每页条数"),intension_levels:Fn.optional().default([]).describe("意向等级列表(高意向/中意向/低意向/无意向/意向不明/需跟进),空则全部"),search_phone:G5.optional().default("").describe("手机号搜索"),search_name_and_company:w.string().optional().default("").describe("客户名/公司名搜索"),dept_id:w.string().optional().default("").describe("部门 ID,空则取默认部门")}),returns:w.object({}).passthrough(),examples:[{description:"查询客户意向",input:{},output:{}}],sideEffects:["network"],handler:async(n)=>{let m=n.dept_id||await S(),i=n.intension_levels.length?n.intension_levels:["高意向","中意向","低意向","无意向","意向不明"];return await C("/pc/newcustomer/aIAnalysisList",{moneyType:"",salesname:"",pageSize:n.page_size,page:n.page_index,searchPhone:n.search_phone,groupName:"全部客户",searchNameAndCompany:n.search_name_and_company,customerSerial:"",wechatID:"",relationContactCustomerName:"",intensionLevel:i,deptId:m,phoneCityId:"",phoneProvinceId:"",sort:{field:"createdTime",order:"desc"},tipNameList:null,tipTypeList:null,pageIndex:n.page_index})}},T8={name:"crm.ai.communication-keywords",description:"分析客户沟通中的关键词(情绪/痛点/需求)。",category:"crm",pluginName:t,parameters:w.object({page_index:w.number().int().min(1).optional().default(1).describe("页码"),page_size:w.number().int().min(1).max(10).optional().default(5).describe("每页条数"),start_time:w.string().optional().default("").describe("开始时间,空则不限制"),end_time:w.string().optional().default("").describe("结束时间,空则不限制"),keyword_type:w.string().optional().default("1").describe("关键词类型,默认 1"),communication_type:w.string().optional().default("").describe("沟通类型"),dept_id:w.string().optional().default("").describe("部门 ID,空则取默认部门"),filter_user_id:w.string().optional().default("").describe("员工用户 ID")}),returns:w.object({}).passthrough(),examples:[{description:"查询沟通关键词",input:{},output:{}}],sideEffects:["network"],handler:async(n)=>{let m=n.dept_id||await S();return await C("/pc/ai/customerInsights/keywords/list",{pageIndex:n.page_index,pageSize:n.page_size,startTime:n.start_time,endTime:n.end_time,type:n.keyword_type,dptId:m,comCode:Ii(),userId:n.filter_user_id,ctype:n.communication_type,rangeField:"1"})}};var I8={name:"crm",version:"1.0.0",commands:[Z2,t2,d2,a2,e2,s2,n8,b8,w8,J8,W8,M8,x8,u8,j8,X8,Y8,H8,Q8,N8,V8,L8,B8,C8,K8,A8,g8,R8,E8,U8,S8,f8,p8,F8,h8,P8,k8,T8]};var M5="ai_task_wx_circle_of_friends_config",x5="WECHAT_MOMENTS";function y8(){let n=new Date,m=(i)=>String(i).padStart(2,"0");return`${n.getFullYear()}-${m(n.getMonth()+1)}-${m(n.getDate())} ${m(n.getHours())}:${m(n.getMinutes())}:${m(n.getSeconds())}`}function l5(n,m){let i=new Date(n.replace(" ","T"));i.setHours(i.getHours()+m);let b=($)=>String($).padStart(2,"0");return`${i.getFullYear()}-${b(i.getMonth()+1)}-${b(i.getDate())} ${b(i.getHours())}:${b(i.getMinutes())}:${b(i.getSeconds())}`}function u5(n){let m=new Date,i=(o)=>String(o).padStart(2,"0"),b=`${m.getFullYear()}${i(m.getMonth()+1)}${i(m.getDate())}_${i(m.getHours())}${i(m.getMinutes())}${i(m.getSeconds())}`,$=n.slice(-8);return`朋友圈_${b}_${$}`}function j5(){let n=On();if(!n?.user_id)throw new l("CONFIG_ERROR","未登录,请先运行 'yunke crm.auth.login' 登录");return n.user_id}async function c8(n){let m=j5(),i=n.startTime??y8(),b=n.endTime??l5(i,1),$={taskType:x5,taskName:n.taskName,content:n.content,remark:n.remark,taskKey:u5(m),createTime:y8(),startTime:i,endTime:b},o=`${dn}/api/v1/weixiaozhu/message/send`,_;try{_=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user_id:m,push_type:M5,text:$})})}catch(X){let Y=X instanceof Error?X.message:String(X);throw new l("EXECUTION_FAILED",`微小助服务不可达: ${Y}`)}if(!_.ok){let X=`HTTP ${_.status}`;try{let Y=await _.json();X=Y.detail??Y.message??X}catch{}throw new l("EXECUTION_FAILED",`微小助服务错误: ${X}`)}return(await _.json()).data}var v5="weixiaozhu",z8={name:"weixiaozhu.moments.send",description:"发送一条朋友圈推送任务到微小助 broker。user_id 自动从 crm 登录凭证读取。",category:"weixiaozhu",pluginName:v5,hidden:!0,parameters:w.object({content:w.string().min(1).describe("朋友圈文案"),remark:w.string().min(1).describe("朋友圈图片 URL(微小助 broker 固定字段名为 remark)"),task_name:w.string().optional().default("测试发朋友圈").describe('任务名称,默认"测试发朋友圈"'),start_time:w.string().optional().describe("发送开始时间,格式 YYYY-MM-DD HH:mm:ss,默认当前时间"),end_time:w.string().optional().describe("发送结束时间,格式 YYYY-MM-DD HH:mm:ss,默认 start_time + 1小时")}),returns:w.object({success:w.boolean(),data:w.record(w.unknown()).nullable()}),examples:[{description:"发送朋友圈(最简调用)",input:{content:"今天天气真好!",remark:"https://example.com/img.jpg"},output:{success:!0,data:{}}},{description:"指定任务名和时间",input:{content:"新品上市!",remark:"https://example.com/product.jpg",task_name:"新品推广",start_time:"2026-04-15 10:00:00",end_time:"2026-04-15 11:00:00"},output:{success:!0,data:{}}}],sideEffects:["network"],handler:async({content:n,remark:m,task_name:i,start_time:b,end_time:$})=>{return{success:!0,data:await c8({content:n,remark:m,taskName:i,startTime:b,endTime:$})}}};var Z8={name:"weixiaozhu",version:"1.0.0",featureFlag:"weixiaozhu",commands:[z8]};bn();bn();var t8=`yunke-cli/${E}`;function d8(){return Wn().api_base_url.replace(/\/$/,"")}async function Zm(n,m){let i=`${d8()}${n}`,b=await fetch(i,{...m,headers:{"User-Agent":t8,...m?.headers??{}}});if(!b.ok){let $=`HTTP ${b.status}`;try{let o=await b.json();if(o.error)$=o.error;else if(o.message)$=o.message}catch{}throw new l("EXECUTION_FAILED",`CLI API error: ${$}`)}return await b.json()}async function a8(n){let m=`${d8()}${n}`,i=await fetch(m,{redirect:"manual",headers:{"User-Agent":t8}}),b=i.headers.get("location");if(!b)throw new l("EXECUTION_FAILED",`CLI API did not return a redirect for ${n} (status ${i.status})`);return b}bn();function mm(){let{platform:n,arch:m}=process;switch(n){case"darwin":return m==="arm64"?"darwin-arm64":"darwin-x64";case"linux":return"linux-x64";case"win32":return"windows-x64";default:throw Error(`不支持的平台: ${n}-${m}。`+"支持的平台: darwin-arm64, darwin-x64, linux-x64, windows-x64")}}var D5=(()=>{return"npm"})();function hn(){return D5==="npm"}bn();import{readFileSync as h5,writeFileSync as P5,mkdirSync as k5,existsSync as i3}from"node:fs";import{homedir as T5}from"node:os";import{join as b3}from"node:path";import{writeFile as S5,chmod as f5,rename as p5,unlink as F5}from"node:fs/promises";bn();import{createHash as N5}from"node:crypto";function V5(n){return N5("sha256").update(n).digest("hex")}function r8(n,m){let i=V5(n);if(!m)return{valid:!0,actual:i,expected:null};let b=m.toLowerCase().trim();return{valid:i===b,actual:i,expected:b}}dm();async function im(){let n=mm();return Zm(`/api/v1/cli/check-update?current=${encodeURIComponent(E)}&target=${encodeURIComponent(n)}`)}async function m3(){let n=mm(),m=await im();if(!m.hasUpdate)return{updated:!1,fromVersion:E,toVersion:m.latestVersion,message:"已是最新版本"};let i;try{i=await zi()}catch(Y){throw Error(`备份当前版本失败: ${Y instanceof Error?Y.message:String(Y)}`)}let b=await a8(`/api/v1/cli/download?target=${encodeURIComponent(n)}`),$=await fetch(b);if(!$.ok)throw Error(`下载失败: HTTP ${$.status}`);let o=Buffer.from(await $.arrayBuffer()),_=r8(o,m.checksum);if(!_.valid)throw Error(`完整性校验失败。期望: ${_.expected}, 实际: ${_.actual}`);let J=process.execPath,X=`${J}.new`;try{await S5(X,o),await f5(X,493),await p5(X,J)}catch(Y){try{await F5(X)}catch{}if(i)try{let{rollbackFromLatestBackup:H}=await Promise.resolve().then(() => (dm(),n3));await H()}catch{}throw Y}return{updated:!0,fromVersion:E,toVersion:m.latestVersion??"",backupPath:i,message:`已更新到 ${m.latestVersion}。请重启 CLI 以使用新版本。`}}var ti=process.env.YUNKE_CONFIG_DIR??b3(T5(),".yunke"),di=b3(ti,"update-check.json"),I5=86400000;function w3(){if(!i3(di))return null;try{let n=h5(di,"utf-8");return JSON.parse(n)}catch{return null}}function $3(n){if(!i3(ti))k5(ti,{recursive:!0});P5(di,JSON.stringify(n,null,2),"utf-8")}function am(n){if(!n)return!0;if(n.currentVersion!==E)return!0;return Date.now()-new Date(n.lastCheck).getTime()>=I5}function o3(){if(hn()){c5();return}let n=w3();if(n&&!am(n)&&n.hasUpdate){J3(n.latestVersion);return}if(am(n))y5().catch(()=>{})}async function y5(){try{let n=await im(),m=n.hasUpdate&&n.latestVersion!=null&&X3(n.latestVersion,E),i={lastCheck:new Date().toISOString(),hasUpdate:m,latestVersion:n.latestVersion,currentVersion:E};if($3(i),m)J3(n.latestVersion)}catch{}}function _3(n,m){return`
22
- 新版本可用: ${n} -> ${m}
4
+ `+l),n.push(w+"m+"+Ai.exports.humanize(this.diff)+"\x1B[0m")}else n[0]=d3()+i+" "+n[0]}function d3(){if(ym.inspectOpts.hideDate)return"";return new Date().toISOString()+" "}function a3(...n){return process.stderr.write(Di.formatWithOptions(ym.inspectOpts,...n)+`
5
+ `)}function r3(n){if(n)process.env.DEBUG=n;else delete process.env.DEBUG}function e3(){return process.env.DEBUG}function s3(n){n.inspectOpts={};let i=Object.keys(ym.inspectOpts);for(let o=0;o<i.length;o++)n.inspectOpts[i[o]]=ym.inspectOpts[i[o]]}Ai.exports=fo()(ym);var{formatters:Pm}=Ai.exports;Pm.o=function(n){return this.inspectOpts.colors=this.useColors,Di.inspect(n,this.inspectOpts).split(`
6
+ `).map((i)=>i.trim()).join(" ")};Pm.O=function(n){return this.inspectOpts.colors=this.useColors,Di.inspect(n,this.inspectOpts)}});var Im=P((S_,Lo)=>{if(typeof process>"u"||process.type==="renderer"||!1||process.__nwjs)Lo.exports=gm();else Lo.exports=tm()});var dm=P((U_,zm)=>{zm.exports=Zm;function Zm(n,i){if(n&&i)return Zm(n)(i);if(typeof n!=="function")throw TypeError("need wrapper function");return Object.keys(n).forEach(function(b){o[b]=n[b]}),o;function o(){var b=Array(arguments.length);for(var w=0;w<b.length;w++)b[w]=arguments[w];var l=n.apply(this,b),x=b[b.length-1];if(typeof l==="function"&&l!==x)Object.keys(x).forEach(function($){l[$]=x[$]});return l}}});var Do=P((c_,Ko)=>{var am=dm();Ko.exports=am(Ni);Ko.exports.strict=am(rm);Ni.proto=Ni(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return Ni(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return rm(this)},configurable:!0})});function Ni(n){var i=function(){if(i.called)return i.value;return i.called=!0,i.value=n.apply(this,arguments)};return i.called=!1,i}function rm(n){var i=function(){if(i.called)throw Error(i.onceError);return i.called=!0,i.value=n.apply(this,arguments)},o=n.name||"Function wrapped with `once`";return i.onceError=o+" shouldn't be called more than once",i.called=!1,i}});var nb=P((k_,sm)=>{var x8=Do(),$8=function(){},v8=global.Bare?queueMicrotask:process.nextTick.bind(process),H8=function(n){return n.setHeader&&typeof n.abort==="function"},_8=function(n){return n.stdio&&Array.isArray(n.stdio)&&n.stdio.length===3},em=function(n,i,o){if(typeof i==="function")return em(n,null,i);if(!i)i={};o=x8(o||$8);var{_writableState:b,_readableState:w}=n,l=i.readable||i.readable!==!1&&n.readable,x=i.writable||i.writable!==!1&&n.writable,$=!1,v=function(){if(!n.writable)H()},H=function(){if(x=!1,!l)o.call(n)},_=function(){if(l=!1,!x)o.call(n)},X=function(B){o.call(n,B?Error("exited with error code: "+B):null)},W=function(B){o.call(n,B)},G=function(){v8(k)},k=function(){if($)return;if(l&&!(w&&(w.ended&&!w.destroyed)))return o.call(n,Error("premature close"));if(x&&!(b&&(b.ended&&!b.destroyed)))return o.call(n,Error("premature close"))},L=function(){n.req.on("finish",H)};if(H8(n))if(n.on("complete",H),n.on("abort",G),n.req)L();else n.on("request",L);else if(x&&!b)n.on("end",v),n.on("close",v);if(_8(n))n.on("exit",X);if(n.on("end",_),n.on("finish",H),i.error!==!1)n.on("error",W);return n.on("close",G),function(){if($=!0,n.removeListener("complete",H),n.removeListener("abort",G),n.removeListener("request",L),n.req)n.req.removeListener("finish",H);n.removeListener("end",v),n.removeListener("close",v),n.removeListener("finish",H),n.removeListener("exit",X),n.removeListener("end",_),n.removeListener("error",W),n.removeListener("close",G)}};sm.exports=em});var mb=P((F_,ob)=>{var p8=Do(),J8=nb(),Ri;try{Ri=c("fs")}catch(n){}var d0=function(){},X8=typeof process>"u"?!1:/^v?\.0/.test(process.version),Ei=function(n){return typeof n==="function"},Y8=function(n){if(!X8)return!1;if(!Ri)return!1;return(n instanceof(Ri.ReadStream||d0)||n instanceof(Ri.WriteStream||d0))&&Ei(n.close)},Q8=function(n){return n.setHeader&&Ei(n.abort)},W8=function(n,i,o,b){b=p8(b);var w=!1;n.on("close",function(){w=!0}),J8(n,{readable:i,writable:o},function(x){if(x)return b(x);w=!0,b()});var l=!1;return function(x){if(w)return;if(l)return;if(l=!0,Y8(n))return n.close(d0);if(Q8(n))return n.abort();if(Ei(n.destroy))return n.destroy();b(x||Error("stream was destroyed"))}},ib=function(n){n()},q8=function(n,i){return n.pipe(i)},u8=function(){var n=Array.prototype.slice.call(arguments),i=Ei(n[n.length-1]||d0)&&n.pop()||d0;if(Array.isArray(n[0]))n=n[0];if(n.length<2)throw Error("pump requires two streams per minimum");var o,b=n.map(function(w,l){var x=l<n.length-1,$=l>0;return W8(w,x,$,function(v){if(!o)o=v;if(v)b.forEach(ib);if(x)return;b.forEach(ib),i(o)})});return n.reduce(q8)};ob.exports=u8});var wb=P((g_,bb)=>{var{PassThrough:M8}=c("stream");bb.exports=(n)=>{n={...n};let{array:i}=n,{encoding:o}=n,b=o==="buffer",w=!1;if(i)w=!(o||b);else o=o||"utf8";if(b)o=null;let l=new M8({objectMode:w});if(o)l.setEncoding(o);let x=0,$=[];return l.on("data",(v)=>{if($.push(v),w)x=$.length;else x+=v.length}),l.getBufferedValue=()=>{if(i)return $;return b?Buffer.concat($,x):$.join("")},l.getBufferedLength=()=>x,l}});var lb=P((P_,h0)=>{var{constants:O8}=c("buffer"),G8=mb(),C8=wb();class Ao extends Error{constructor(){super("maxBuffer exceeded");this.name="MaxBufferError"}}async function Si(n,i){if(!n)return Promise.reject(Error("Expected a stream"));i={maxBuffer:1/0,...i};let{maxBuffer:o}=i,b;return await new Promise((w,l)=>{let x=($)=>{if($&&b.getBufferedLength()<=O8.MAX_LENGTH)$.bufferedData=b.getBufferedValue();l($)};b=G8(n,C8(i),($)=>{if($){x($);return}w()}),b.on("data",()=>{if(b.getBufferedLength()>o)x(new Ao)})}),b.getBufferedValue()}h0.exports=Si;h0.exports.default=Si;h0.exports.buffer=(n,i)=>Si(n,{...i,encoding:"buffer"});h0.exports.array=(n,i)=>Si(n,{...i,array:!0});h0.exports.MaxBufferError=Ao});var Hb=P((y_,vb)=>{vb.exports=Ui;function Ui(){this.pending=0,this.max=1/0,this.listeners=[],this.waiting=[],this.error=null}Ui.prototype.go=function(n){if(this.pending<this.max)$b(this,n);else this.waiting.push(n)};Ui.prototype.wait=function(n){if(this.pending===0)n(this.error);else this.listeners.push(n)};Ui.prototype.hold=function(){return xb(this)};function xb(n){n.pending+=1;var i=!1;return o;function o(w){if(i)throw Error("callback called twice");if(i=!0,n.error=n.error||w,n.pending-=1,n.waiting.length>0&&n.pending<n.max)$b(n,n.waiting.shift());else if(n.pending===0){var l=n.listeners;n.listeners=[],l.forEach(b)}}function b(w){w(n.error)}}function $b(n,i){i(xb(n))}});var pb=P((f8)=>{var a0=c("fs"),ci=c("util"),No=c("stream"),_b=No.Readable,Ro=No.Writable,j8=No.PassThrough,B8=Hb(),ki=c("events").EventEmitter;f8.createFromBuffer=V8;f8.createFromFd=h8;f8.BufferSlicer=Bn;f8.FdSlicer=jn;ci.inherits(jn,ki);function jn(n,i){i=i||{},ki.call(this),this.fd=n,this.pend=new B8,this.pend.max=1,this.refCount=0,this.autoClose=!!i.autoClose}jn.prototype.read=function(n,i,o,b,w){var l=this;l.pend.go(function(x){a0.read(l.fd,n,i,o,b,function($,v,H){x(),w($,v,H)})})};jn.prototype.write=function(n,i,o,b,w){var l=this;l.pend.go(function(x){a0.write(l.fd,n,i,o,b,function($,v,H){x(),w($,v,H)})})};jn.prototype.createReadStream=function(n){return new Fi(this,n)};jn.prototype.createWriteStream=function(n){return new gi(this,n)};jn.prototype.ref=function(){this.refCount+=1};jn.prototype.unref=function(){var n=this;if(n.refCount-=1,n.refCount>0)return;if(n.refCount<0)throw Error("invalid unref");if(n.autoClose)a0.close(n.fd,i);function i(o){if(o)n.emit("error",o);else n.emit("close")}};ci.inherits(Fi,_b);function Fi(n,i){i=i||{},_b.call(this,i),this.context=n,this.context.ref(),this.start=i.start||0,this.endOffset=i.end,this.pos=this.start,this.destroyed=!1}Fi.prototype._read=function(n){var i=this;if(i.destroyed)return;var o=Math.min(i._readableState.highWaterMark,n);if(i.endOffset!=null)o=Math.min(o,i.endOffset-i.pos);if(o<=0){i.destroyed=!0,i.push(null),i.context.unref();return}i.context.pend.go(function(b){if(i.destroyed)return b();var w=new Buffer(o);a0.read(i.context.fd,w,0,o,i.pos,function(l,x){if(l)i.destroy(l);else if(x===0)i.destroyed=!0,i.push(null),i.context.unref();else i.pos+=x,i.push(w.slice(0,x));b()})})};Fi.prototype.destroy=function(n){if(this.destroyed)return;n=n||Error("stream destroyed"),this.destroyed=!0,this.emit("error",n),this.context.unref()};ci.inherits(gi,Ro);function gi(n,i){i=i||{},Ro.call(this,i),this.context=n,this.context.ref(),this.start=i.start||0,this.endOffset=i.end==null?1/0:+i.end,this.bytesWritten=0,this.pos=this.start,this.destroyed=!1,this.on("finish",this.destroy.bind(this))}gi.prototype._write=function(n,i,o){var b=this;if(b.destroyed)return;if(b.pos+n.length>b.endOffset){var w=Error("maximum file length exceeded");w.code="ETOOBIG",b.destroy(),o(w);return}b.context.pend.go(function(l){if(b.destroyed)return l();a0.write(b.context.fd,n,0,n.length,b.pos,function(x,$){if(x)b.destroy(),l(),o(x);else b.bytesWritten+=$,b.pos+=$,b.emit("progress"),l(),o()})})};gi.prototype.destroy=function(){if(this.destroyed)return;this.destroyed=!0,this.context.unref()};ci.inherits(Bn,ki);function Bn(n,i){ki.call(this),i=i||{},this.refCount=0,this.buffer=n,this.maxChunkSize=i.maxChunkSize||Number.MAX_SAFE_INTEGER}Bn.prototype.read=function(n,i,o,b,w){var l=b+o,x=l-this.buffer.length,$=x>0?x:o;this.buffer.copy(n,i,b,l),setImmediate(function(){w(null,$)})};Bn.prototype.write=function(n,i,o,b,w){n.copy(this.buffer,b,i,i+o),setImmediate(function(){w(null,o,n)})};Bn.prototype.createReadStream=function(n){n=n||{};var i=new j8(n);i.destroyed=!1,i.start=n.start||0,i.endOffset=n.end,i.pos=i.endOffset||this.buffer.length;var o=this.buffer.slice(i.start,i.pos),b=0;while(!0){var w=b+this.maxChunkSize;if(w>=o.length){if(b<o.length)i.write(o.slice(b,o.length));break}i.write(o.slice(b,w)),b=w}return i.end(),i.destroy=function(){i.destroyed=!0},i};Bn.prototype.createWriteStream=function(n){var i=this;n=n||{};var o=new Ro(n);return o.start=n.start||0,o.endOffset=n.end==null?this.buffer.length:+n.end,o.bytesWritten=0,o.pos=o.start,o.destroyed=!1,o._write=function(b,w,l){if(o.destroyed)return;var x=o.pos+b.length;if(x>o.endOffset){var $=Error("maximum file length exceeded");$.code="ETOOBIG",o.destroyed=!0,l($);return}b.copy(i.buffer,o.pos,0,b.length),o.bytesWritten+=b.length,o.pos=x,o.emit("progress"),l()},o.destroy=function(){o.destroyed=!0},o};Bn.prototype.ref=function(){this.refCount+=1};Bn.prototype.unref=function(){if(this.refCount-=1,this.refCount<0)throw Error("invalid unref")};function V8(n,i){return new Bn(n,i)}function h8(n,i){return new jn(n,i)}});var Yb=P((t_,Xb)=>{var cn=c("buffer").Buffer,Eo=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918000,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];if(typeof Int32Array<"u")Eo=new Int32Array(Eo);function Jb(n){if(cn.isBuffer(n))return n;var i=typeof cn.alloc==="function"&&typeof cn.from==="function";if(typeof n==="number")return i?cn.alloc(n):new cn(n);else if(typeof n==="string")return i?cn.from(n):new cn(n);else throw Error("input must be buffer, number, or string, received "+typeof n)}function N8(n){var i=Jb(4);return i.writeInt32BE(n,0),i}function So(n,i){if(n=Jb(n),cn.isBuffer(i))i=i.readUInt32BE(0);var o=~~i^-1;for(var b=0;b<n.length;b++)o=Eo[(o^n[b])&255]^o>>>8;return o^-1}function Uo(){return N8(So.apply(null,arguments))}Uo.signed=function(){return So.apply(null,arguments)};Uo.unsigned=function(){return So.apply(null,arguments)>>>0};Xb.exports=Uo});var Gb=P((F8)=>{var co=c("fs"),R8=c("zlib"),Qb=pb(),E8=Yb(),Ti=c("util"),ti=c("events").EventEmitter,Wb=c("stream").Transform,ko=c("stream").PassThrough,S8=c("stream").Writable;F8.open=U8;F8.fromFd=qb;F8.fromBuffer=c8;F8.fromRandomAccessReader=Fo;F8.dosDateTimeToDate=Mb;F8.validateFileName=Ob;F8.ZipFile=kn;F8.Entry=r0;F8.RandomAccessReader=Fn;function U8(n,i,o){if(typeof i==="function")o=i,i=null;if(i==null)i={};if(i.autoClose==null)i.autoClose=!0;if(i.lazyEntries==null)i.lazyEntries=!1;if(i.decodeStrings==null)i.decodeStrings=!0;if(i.validateEntrySizes==null)i.validateEntrySizes=!0;if(i.strictFileNames==null)i.strictFileNames=!1;if(o==null)o=yi;co.open(n,"r",function(b,w){if(b)return o(b);qb(w,i,function(l,x){if(l)co.close(w,yi);o(l,x)})})}function qb(n,i,o){if(typeof i==="function")o=i,i=null;if(i==null)i={};if(i.autoClose==null)i.autoClose=!1;if(i.lazyEntries==null)i.lazyEntries=!1;if(i.decodeStrings==null)i.decodeStrings=!0;if(i.validateEntrySizes==null)i.validateEntrySizes=!0;if(i.strictFileNames==null)i.strictFileNames=!1;if(o==null)o=yi;co.fstat(n,function(b,w){if(b)return o(b);var l=Qb.createFromFd(n,{autoClose:!0});Fo(l,w.size,i,o)})}function c8(n,i,o){if(typeof i==="function")o=i,i=null;if(i==null)i={};if(i.autoClose=!1,i.lazyEntries==null)i.lazyEntries=!1;if(i.decodeStrings==null)i.decodeStrings=!0;if(i.validateEntrySizes==null)i.validateEntrySizes=!0;if(i.strictFileNames==null)i.strictFileNames=!1;var b=Qb.createFromBuffer(n,{maxChunkSize:65536});Fo(b,n.length,i,o)}function Fo(n,i,o,b){if(typeof o==="function")b=o,o=null;if(o==null)o={};if(o.autoClose==null)o.autoClose=!0;if(o.lazyEntries==null)o.lazyEntries=!1;if(o.decodeStrings==null)o.decodeStrings=!0;var w=!!o.decodeStrings;if(o.validateEntrySizes==null)o.validateEntrySizes=!0;if(o.strictFileNames==null)o.strictFileNames=!1;if(b==null)b=yi;if(typeof i!=="number")throw Error("expected totalSize parameter to be a number");if(i>Number.MAX_SAFE_INTEGER)throw Error("zip file too large. only file sizes up to 2^52 are supported due to JavaScript's Number type being an IEEE 754 double.");n.ref();var l=22,x=65535,$=Math.min(l+x,i),v=qn($),H=i-v.length;f0(n,v,0,$,H,function(_){if(_)return b(_);for(var X=$-l;X>=0;X-=1){if(v.readUInt32LE(X)!==101010256)continue;var W=v.slice(X),G=W.readUInt16LE(4);if(G!==0)return b(Error("multi-disk zip files are not supported: found disk number: "+G));var k=W.readUInt16LE(10),L=W.readUInt32LE(16),B=W.readUInt16LE(20),S=W.length-l;if(B!==S)return b(Error("invalid comment length. expected: "+S+". found: "+B));var F=w?Pi(W,22,W.length,!1):W.slice(22);if(!(k===65535||L===4294967295))return b(null,new kn(n,L,i,k,F,o.autoClose,o.lazyEntries,w,o.validateEntrySizes,o.strictFileNames));var I=qn(20),hn=H+X-I.length;f0(n,I,0,I.length,hn,function(x0){if(x0)return b(x0);if(I.readUInt32LE(0)!==117853008)return b(Error("invalid zip64 end of central directory locator signature"));var E0=L0(I,8),tn=qn(56);f0(n,tn,0,tn.length,E0,function(S0){if(S0)return b(S0);if(tn.readUInt32LE(0)!==101075792)return b(Error("invalid zip64 end of central directory record signature"));return k=L0(tn,32),L=L0(tn,48),b(null,new kn(n,L,i,k,F,o.autoClose,o.lazyEntries,w,o.validateEntrySizes,o.strictFileNames))})});return}b(Error("end of central directory record signature not found"))})}Ti.inherits(kn,ti);function kn(n,i,o,b,w,l,x,$,v,H){var _=this;if(ti.call(_),_.reader=n,_.reader.on("error",function(X){ub(_,X)}),_.reader.once("close",function(){_.emit("close")}),_.readEntryCursor=i,_.fileSize=o,_.entryCount=b,_.comment=w,_.entriesRead=0,_.autoClose=!!l,_.lazyEntries=!!x,_.decodeStrings=!!$,_.validateEntrySizes=!!v,_.strictFileNames=!!H,_.isOpen=!0,_.emittedError=!1,!_.lazyEntries)_._readEntry()}kn.prototype.close=function(){if(!this.isOpen)return;this.isOpen=!1,this.reader.unref()};function ln(n,i){if(n.autoClose)n.close();ub(n,i)}function ub(n,i){if(n.emittedError)return;n.emittedError=!0,n.emit("error",i)}kn.prototype.readEntry=function(){if(!this.lazyEntries)throw Error("readEntry() called without lazyEntries:true");this._readEntry()};kn.prototype._readEntry=function(){var n=this;if(n.entryCount===n.entriesRead){setImmediate(function(){if(n.autoClose)n.close();if(n.emittedError)return;n.emit("end")});return}if(n.emittedError)return;var i=qn(46);f0(n.reader,i,0,i.length,n.readEntryCursor,function(o){if(o)return ln(n,o);if(n.emittedError)return;var b=new r0,w=i.readUInt32LE(0);if(w!==33639248)return ln(n,Error("invalid central directory file header signature: 0x"+w.toString(16)));if(b.versionMadeBy=i.readUInt16LE(4),b.versionNeededToExtract=i.readUInt16LE(6),b.generalPurposeBitFlag=i.readUInt16LE(8),b.compressionMethod=i.readUInt16LE(10),b.lastModFileTime=i.readUInt16LE(12),b.lastModFileDate=i.readUInt16LE(14),b.crc32=i.readUInt32LE(16),b.compressedSize=i.readUInt32LE(20),b.uncompressedSize=i.readUInt32LE(24),b.fileNameLength=i.readUInt16LE(28),b.extraFieldLength=i.readUInt16LE(30),b.fileCommentLength=i.readUInt16LE(32),b.internalFileAttributes=i.readUInt16LE(36),b.externalFileAttributes=i.readUInt32LE(38),b.relativeOffsetOfLocalHeader=i.readUInt32LE(42),b.generalPurposeBitFlag&64)return ln(n,Error("strong encryption is not supported"));n.readEntryCursor+=46,i=qn(b.fileNameLength+b.extraFieldLength+b.fileCommentLength),f0(n.reader,i,0,i.length,n.readEntryCursor,function(l){if(l)return ln(n,l);if(n.emittedError)return;var x=(b.generalPurposeBitFlag&2048)!==0;b.fileName=n.decodeStrings?Pi(i,0,b.fileNameLength,x):i.slice(0,b.fileNameLength);var $=b.fileNameLength+b.extraFieldLength,v=i.slice(b.fileNameLength,$);b.extraFields=[];var H=0;while(H<v.length-3){var _=v.readUInt16LE(H+0),X=v.readUInt16LE(H+2),W=H+4,G=W+X;if(G>v.length)return ln(n,Error("extra field length exceeds extra field buffer size"));var k=qn(X);v.copy(k,0,W,G),b.extraFields.push({id:_,data:k}),H=G}if(b.fileComment=n.decodeStrings?Pi(i,$,$+b.fileCommentLength,x):i.slice($,$+b.fileCommentLength),b.comment=b.fileComment,n.readEntryCursor+=i.length,n.entriesRead+=1,b.uncompressedSize===4294967295||b.compressedSize===4294967295||b.relativeOffsetOfLocalHeader===4294967295){var L=null;for(var H=0;H<b.extraFields.length;H++){var B=b.extraFields[H];if(B.id===1){L=B.data;break}}if(L==null)return ln(n,Error("expected zip64 extended information extra field"));var S=0;if(b.uncompressedSize===4294967295){if(S+8>L.length)return ln(n,Error("zip64 extended information extra field does not include uncompressed size"));b.uncompressedSize=L0(L,S),S+=8}if(b.compressedSize===4294967295){if(S+8>L.length)return ln(n,Error("zip64 extended information extra field does not include compressed size"));b.compressedSize=L0(L,S),S+=8}if(b.relativeOffsetOfLocalHeader===4294967295){if(S+8>L.length)return ln(n,Error("zip64 extended information extra field does not include relative header offset"));b.relativeOffsetOfLocalHeader=L0(L,S),S+=8}}if(n.decodeStrings)for(var H=0;H<b.extraFields.length;H++){var B=b.extraFields[H];if(B.id===28789){if(B.data.length<6)continue;if(B.data.readUInt8(0)!==1)continue;var F=B.data.readUInt32LE(1);if(E8.unsigned(i.slice(0,b.fileNameLength))!==F)continue;b.fileName=Pi(B.data,5,B.data.length,!0);break}}if(n.validateEntrySizes&&b.compressionMethod===0){var I=b.uncompressedSize;if(b.isEncrypted())I+=12;if(b.compressedSize!==I){var hn="compressed/uncompressed size mismatch for stored file: "+b.compressedSize+" != "+b.uncompressedSize;return ln(n,Error(hn))}}if(n.decodeStrings){if(!n.strictFileNames)b.fileName=b.fileName.replace(/\\/g,"/");var x0=Ob(b.fileName,n.validateFileNameOptions);if(x0!=null)return ln(n,Error(x0))}if(n.emit("entry",b),!n.lazyEntries)n._readEntry()})})};kn.prototype.openReadStream=function(n,i,o){var b=this,w=0,l=n.compressedSize;if(o==null)o=i,i={};else{if(i.decrypt!=null){if(!n.isEncrypted())throw Error("options.decrypt can only be specified for encrypted entries");if(i.decrypt!==!1)throw Error("invalid options.decrypt value: "+i.decrypt);if(n.isCompressed()){if(i.decompress!==!1)throw Error("entry is encrypted and compressed, and options.decompress !== false")}}if(i.decompress!=null){if(!n.isCompressed())throw Error("options.decompress can only be specified for compressed entries");if(!(i.decompress===!1||i.decompress===!0))throw Error("invalid options.decompress value: "+i.decompress)}if(i.start!=null||i.end!=null){if(n.isCompressed()&&i.decompress!==!1)throw Error("start/end range not allowed for compressed entry without options.decompress === false");if(n.isEncrypted()&&i.decrypt!==!1)throw Error("start/end range not allowed for encrypted entry without options.decrypt === false")}if(i.start!=null){if(w=i.start,w<0)throw Error("options.start < 0");if(w>n.compressedSize)throw Error("options.start > entry.compressedSize")}if(i.end!=null){if(l=i.end,l<0)throw Error("options.end < 0");if(l>n.compressedSize)throw Error("options.end > entry.compressedSize");if(l<w)throw Error("options.end < options.start")}}if(!b.isOpen)return o(Error("closed"));if(n.isEncrypted()){if(i.decrypt!==!1)return o(Error("entry is encrypted, and options.decrypt !== false"))}b.reader.ref();var x=qn(30);f0(b.reader,x,0,x.length,n.relativeOffsetOfLocalHeader,function($){try{if($)return o($);var v=x.readUInt32LE(0);if(v!==67324752)return o(Error("invalid local file header signature: 0x"+v.toString(16)));var H=x.readUInt16LE(26),_=x.readUInt16LE(28),X=n.relativeOffsetOfLocalHeader+x.length+H+_,W;if(n.compressionMethod===0)W=!1;else if(n.compressionMethod===8)W=i.decompress!=null?i.decompress:!0;else return o(Error("unsupported compression method: "+n.compressionMethod));var G=X,k=G+n.compressedSize;if(n.compressedSize!==0){if(k>b.fileSize)return o(Error("file data overflows file bounds: "+G+" + "+n.compressedSize+" > "+b.fileSize))}var L=b.reader.createReadStream({start:G+w,end:G+l}),B=L;if(W){var S=!1,F=R8.createInflateRaw();if(L.on("error",function(I){setImmediate(function(){if(!S)F.emit("error",I)})}),L.pipe(F),b.validateEntrySizes)B=new e0(n.uncompressedSize),F.on("error",function(I){setImmediate(function(){if(!S)B.emit("error",I)})}),F.pipe(B);else B=F;B.destroy=function(){if(S=!0,F!==B)F.unpipe(B);L.unpipe(F),L.destroy()}}o(null,B)}finally{b.reader.unref()}})};function r0(){}r0.prototype.getLastModDate=function(){return Mb(this.lastModFileDate,this.lastModFileTime)};r0.prototype.isEncrypted=function(){return(this.generalPurposeBitFlag&1)!==0};r0.prototype.isCompressed=function(){return this.compressionMethod===8};function Mb(n,i){var o=n&31,b=(n>>5&15)-1,w=(n>>9&127)+1980,l=0,x=(i&31)*2,$=i>>5&63,v=i>>11&31;return new Date(w,b,o,v,$,x,l)}function Ob(n){if(n.indexOf("\\")!==-1)return"invalid characters in fileName: "+n;if(/^[a-zA-Z]:/.test(n)||/^\//.test(n))return"absolute path: "+n;if(n.split("/").indexOf("..")!==-1)return"invalid relative path: "+n;return null}function f0(n,i,o,b,w,l){if(b===0)return setImmediate(function(){l(null,qn(0))});n.read(i,o,b,w,function(x,$){if(x)return l(x);if($<b)return l(Error("unexpected EOF"));l()})}Ti.inherits(e0,Wb);function e0(n){Wb.call(this),this.actualByteCount=0,this.expectedByteCount=n}e0.prototype._transform=function(n,i,o){if(this.actualByteCount+=n.length,this.actualByteCount>this.expectedByteCount){var b="too many bytes in the stream. expected "+this.expectedByteCount+". got at least "+this.actualByteCount;return o(Error(b))}o(null,n)};e0.prototype._flush=function(n){if(this.actualByteCount<this.expectedByteCount){var i="not enough bytes in the stream. expected "+this.expectedByteCount+". got only "+this.actualByteCount;return n(Error(i))}n()};Ti.inherits(Fn,ti);function Fn(){ti.call(this),this.refCount=0}Fn.prototype.ref=function(){this.refCount+=1};Fn.prototype.unref=function(){var n=this;if(n.refCount-=1,n.refCount>0)return;if(n.refCount<0)throw Error("invalid unref");n.close(i);function i(o){if(o)return n.emit("error",o);n.emit("close")}};Fn.prototype.createReadStream=function(n){var{start:i,end:o}=n;if(i===o){var b=new ko;return setImmediate(function(){b.end()}),b}var w=this._readStreamForRange(i,o),l=!1,x=new Ii(this);w.on("error",function(v){setImmediate(function(){if(!l)x.emit("error",v)})}),x.destroy=function(){w.unpipe(x),x.unref(),w.destroy()};var $=new e0(o-i);return x.on("error",function(v){setImmediate(function(){if(!l)$.emit("error",v)})}),$.destroy=function(){l=!0,x.unpipe($),x.destroy()},w.pipe(x).pipe($)};Fn.prototype._readStreamForRange=function(n,i){throw Error("not implemented")};Fn.prototype.read=function(n,i,o,b,w){var l=this.createReadStream({start:b,end:b+o}),x=new S8,$=0;x._write=function(v,H,_){v.copy(n,i+$,0,v.length),$+=v.length,_()},x.on("finish",w),l.on("error",function(v){w(v)}),l.pipe(x)};Fn.prototype.close=function(n){setImmediate(n)};Ti.inherits(Ii,ko);function Ii(n){ko.call(this),this.context=n,this.context.ref(),this.unreffedYet=!1}Ii.prototype._flush=function(n){this.unref(),n()};Ii.prototype.unref=function(n){if(this.unreffedYet)return;this.unreffedYet=!0,this.context.unref()};var k8="\x00☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ";function Pi(n,i,o,b){if(b)return n.toString("utf8",i,o);else{var w="";for(var l=i;l<o;l++)w+=k8[n[l]];return w}}function L0(n,i){var o=n.readUInt32LE(i),b=n.readUInt32LE(i+4);return b*4294967296+o}var qn;if(typeof Buffer.allocUnsafe==="function")qn=function(n){return Buffer.allocUnsafe(n)};else qn=function(n){return new Buffer(n)};function yi(n){if(n)throw n}});var Bb=P((Z_,jb)=>{var xn=Im()("extract-zip"),{createWriteStream:a8,promises:K0}=c("fs"),r8=lb(),m0=c("path"),{promisify:go}=c("util"),e8=c("stream"),s8=Gb(),n9=go(s8.open),i9=go(e8.pipeline);class Cb{constructor(n,i){this.zipPath=n,this.opts=i}async extract(){return xn("opening",this.zipPath,"with opts",this.opts),this.zipfile=await n9(this.zipPath,{lazyEntries:!0}),this.canceled=!1,new Promise((n,i)=>{this.zipfile.on("error",(o)=>{this.canceled=!0,i(o)}),this.zipfile.readEntry(),this.zipfile.on("close",()=>{if(!this.canceled)xn("zip extraction complete"),n()}),this.zipfile.on("entry",async(o)=>{if(this.canceled){xn("skipping entry",o.fileName,{cancelled:this.canceled});return}if(xn("zipfile entry",o.fileName),o.fileName.startsWith("__MACOSX/")){this.zipfile.readEntry();return}let b=m0.dirname(m0.join(this.opts.dir,o.fileName));try{await K0.mkdir(b,{recursive:!0});let w=await K0.realpath(b);if(m0.relative(this.opts.dir,w).split(m0.sep).includes(".."))throw Error(`Out of bound path "${w}" found while processing file ${o.fileName}`);await this.extractEntry(o),xn("finished processing",o.fileName),this.zipfile.readEntry()}catch(w){this.canceled=!0,this.zipfile.close(),i(w)}})})}async extractEntry(n){if(this.canceled){xn("skipping entry extraction",n.fileName,{cancelled:this.canceled});return}if(this.opts.onEntry)this.opts.onEntry(n,this.zipfile);let i=m0.join(this.opts.dir,n.fileName),o=n.externalFileAttributes>>16&65535,b=61440,w=16384,l=40960,x=(o&b)===l,$=(o&b)===w;if(!$&&n.fileName.endsWith("/"))$=!0;let v=n.versionMadeBy>>8;if(!$)$=v===0&&n.externalFileAttributes===16;xn("extracting entry",{filename:n.fileName,isDir:$,isSymlink:x});let H=this.getExtractedMode(o,$)&511,_=$?i:m0.dirname(i),X={recursive:!0};if($)X.mode=H;if(xn("mkdir",{dir:_,...X}),await K0.mkdir(_,X),$)return;xn("opening read stream",i);let W=await go(this.zipfile.openReadStream.bind(this.zipfile))(n);if(x){let G=await r8(W);xn("creating symlink",G,i),await K0.symlink(G,i)}else await i9(W,a8(i,{mode:H}))}getExtractedMode(n,i){let o=n;if(o===0)if(i){if(this.opts.defaultDirMode)o=parseInt(this.opts.defaultDirMode,10);if(!o)o=493}else{if(this.opts.defaultFileMode)o=parseInt(this.opts.defaultFileMode,10);if(!o)o=420}return o}}jb.exports=async function(n,i){if(xn("creating target directory",i.dir),!m0.isAbsolute(i.dir))throw Error("Target directory is expected to be absolute");return await K0.mkdir(i.dir,{recursive:!0}),i.dir=await K0.realpath(i.dir),new Cb(n,i).extract()}});var g6={};w1(g6,{rollbackFromLatestBackup:()=>o1,listBackups:()=>R0,backupCurrentBinary:()=>i1,BACKUP_DIR:()=>Tn});import{copyFile as k6,readdir as G5,unlink as C5,mkdir as j5,rename as B5}from"node:fs/promises";import{existsSync as V5}from"node:fs";import{homedir as h5}from"node:os";import{join as io,basename as f5}from"node:path";async function F6(){if(!V5(Tn))await j5(Tn,{recursive:!0})}async function i1(){await F6();let n=process.execPath,i=new Date().toISOString().replace(/[:.]/g,"-"),o=`${f5(n)}-${R}-${i}`,b=io(Tn,o);return await k6(n,b),await K5(),b}async function R0(){return await F6(),(await G5(Tn)).filter((o)=>o.startsWith("yunke")).map((o)=>io(Tn,o)).sort().reverse()}async function o1(){let n=await R0();if(n.length===0)return null;let i=n[0],o=process.execPath,b=`${o}.rollback`;return await k6(i,b),await B5(b,o),i}async function K5(){let i=(await R0()).slice(L5);for(let o of i)try{await C5(o)}catch{}}var Tn,L5=3;var oo=l1(()=>{wn();Tn=io(process.env.YUNKE_CONFIG_DIR??io(h5(),".yunke"),"backups")});class M extends Error{code;details;constructor(n,i,o){super(i);this.code=n;this.details=o;this.name="YunkeError"}}class $0 extends M{constructor(n){super("COMMAND_NOT_FOUND",`Command '${n}' not found. Use 'yunke schema' to list available commands.`);this.name="CommandNotFoundError"}}class wo extends M{constructor(n,i){super("VALIDATION_FAILED",n,i);this.name="ValidationError"}}class Hi extends M{constructor(n,i){super("EXECUTION_FAILED",n,i);this.name="ExecutionError"}}class _i extends M{constructor(n,i,o){super("PLUGIN_LOAD_FAILED",`Failed to load plugin '${n}': ${i}`,o);this.name="PluginLoadError"}}class lo extends M{constructor(n,i,o){super("PLUGIN_CONFLICT",`Command '${n}' already registered by plugin '${i}', cannot register from '${o}'`);this.name="PluginConflictError"}}class pi extends M{constructor(n,i){super("TIMEOUT",`Command '${n}' timed out after ${i}ms`);this.name="TimeoutError"}}class In{commands;constructor(n=new Map){this.commands=n}register(n){if(this.commands.has(n.name)){let o=this.commands.get(n.name);throw new lo(n.name,o.pluginName,n.pluginName)}let i=new Map(this.commands);return i.set(n.name,n),new In(i)}unregister(n){if(!this.commands.has(n))return this;let i=new Map(this.commands);return i.delete(n),new In(i)}get(n){return this.commands.get(n)}getAll(){return Array.from(this.commands.values())}getAllVisible(){return this.getAll().filter((n)=>!n.hidden)}getByPlugin(n){return this.getAll().filter((i)=>i.pluginName===n)}has(n){return this.commands.has(n)}get size(){return this.commands.size}}function x1(n,i,o){return{command:n,duration_ms:o,timestamp:new Date().toISOString(),plugin:i}}function $1(n,i,o,b){let w={success:!0,data:o,error:null,metadata:x1(n,i,b)};return JSON.stringify(w)}function fn(n,i,o,b){let w={success:!1,data:null,error:{code:o instanceof M?o.code:"EXECUTION_FAILED",message:o instanceof Error?o.message:String(o),details:o instanceof M?o.details:void 0},metadata:x1(n,i,b)};return JSON.stringify(w)}var m={};w1(m,{void:()=>ew,util:()=>D,unknown:()=>aw,union:()=>ol,undefined:()=>Zw,tuple:()=>wl,transformer:()=>Yl,symbol:()=>Iw,string:()=>W1,strictObject:()=>il,setErrorMap:()=>Ww,set:()=>$l,record:()=>ll,quotelessJson:()=>Yw,promise:()=>Xl,preprocess:()=>ql,pipeline:()=>ul,ostring:()=>Ml,optional:()=>Ql,onumber:()=>Ol,oboolean:()=>Gl,objectUtil:()=>xo,object:()=>nl,number:()=>q1,nullable:()=>Wl,null:()=>zw,never:()=>rw,nativeEnum:()=>Jl,nan:()=>yw,map:()=>xl,makeIssue:()=>U0,literal:()=>_l,lazy:()=>Hl,late:()=>gw,isValid:()=>Ln,isDirty:()=>Xi,isAsync:()=>H0,isAborted:()=>Ji,intersection:()=>bl,instanceof:()=>Pw,getParsedType:()=>pn,getErrorMap:()=>v0,function:()=>vl,enum:()=>pl,effect:()=>Yl,discriminatedUnion:()=>ml,defaultErrorMap:()=>un,datetimeRegex:()=>X1,date:()=>tw,custom:()=>Q1,coerce:()=>Cl,boolean:()=>u1,bigint:()=>Tw,array:()=>sw,any:()=>dw,addIssueToContext:()=>Q,ZodVoid:()=>k0,ZodUnknown:()=>Kn,ZodUnion:()=>Q0,ZodUndefined:()=>X0,ZodType:()=>K,ZodTuple:()=>Xn,ZodTransformer:()=>on,ZodSymbol:()=>c0,ZodString:()=>a,ZodSet:()=>an,ZodSchema:()=>K,ZodRecord:()=>F0,ZodReadonly:()=>G0,ZodPromise:()=>rn,ZodPipeline:()=>y0,ZodParsedType:()=>Y,ZodOptional:()=>r,ZodObject:()=>E,ZodNumber:()=>Dn,ZodNullable:()=>On,ZodNull:()=>Y0,ZodNever:()=>Jn,ZodNativeEnum:()=>M0,ZodNaN:()=>P0,ZodMap:()=>g0,ZodLiteral:()=>u0,ZodLazy:()=>q0,ZodIssueCode:()=>p,ZodIntersection:()=>W0,ZodFunction:()=>p0,ZodFirstPartyTypeKind:()=>J,ZodError:()=>Z,ZodEnum:()=>Nn,ZodEffects:()=>on,ZodDiscriminatedUnion:()=>Yi,ZodDefault:()=>Rn,ZodDate:()=>zn,ZodCatch:()=>O0,ZodBranded:()=>Qi,ZodBoolean:()=>J0,ZodBigInt:()=>An,ZodArray:()=>s,ZodAny:()=>dn,Schema:()=>K,ParseStatus:()=>g,OK:()=>y,NEVER:()=>jl,INVALID:()=>C,EMPTY_PATH:()=>qw,DIRTY:()=>Zn,BRAND:()=>Fw});var D;(function(n){n.assertEqual=(w)=>{};function i(w){}n.assertIs=i;function o(w){throw Error()}n.assertNever=o,n.arrayToEnum=(w)=>{let l={};for(let x of w)l[x]=x;return l},n.getValidEnumValues=(w)=>{let l=n.objectKeys(w).filter(($)=>typeof w[w[$]]!=="number"),x={};for(let $ of l)x[$]=w[$];return n.objectValues(x)},n.objectValues=(w)=>{return n.objectKeys(w).map(function(l){return w[l]})},n.objectKeys=typeof Object.keys==="function"?(w)=>Object.keys(w):(w)=>{let l=[];for(let x in w)if(Object.prototype.hasOwnProperty.call(w,x))l.push(x);return l},n.find=(w,l)=>{for(let x of w)if(l(x))return x;return},n.isInteger=typeof Number.isInteger==="function"?(w)=>Number.isInteger(w):(w)=>typeof w==="number"&&Number.isFinite(w)&&Math.floor(w)===w;function b(w,l=" | "){return w.map((x)=>typeof x==="string"?`'${x}'`:x).join(l)}n.joinValues=b,n.jsonStringifyReplacer=(w,l)=>{if(typeof l==="bigint")return l.toString();return l}})(D||(D={}));var xo;(function(n){n.mergeShapes=(i,o)=>{return{...i,...o}}})(xo||(xo={}));var Y=D.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),pn=(n)=>{switch(typeof n){case"undefined":return Y.undefined;case"string":return Y.string;case"number":return Number.isNaN(n)?Y.nan:Y.number;case"boolean":return Y.boolean;case"function":return Y.function;case"bigint":return Y.bigint;case"symbol":return Y.symbol;case"object":if(Array.isArray(n))return Y.array;if(n===null)return Y.null;if(n.then&&typeof n.then==="function"&&n.catch&&typeof n.catch==="function")return Y.promise;if(typeof Map<"u"&&n instanceof Map)return Y.map;if(typeof Set<"u"&&n instanceof Set)return Y.set;if(typeof Date<"u"&&n instanceof Date)return Y.date;return Y.object;default:return Y.unknown}};var p=D.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),Yw=(n)=>{return JSON.stringify(n,null,2).replace(/"([^"]+)":/g,"$1:")};class Z extends Error{get errors(){return this.issues}constructor(n){super();this.issues=[],this.addIssue=(o)=>{this.issues=[...this.issues,o]},this.addIssues=(o=[])=>{this.issues=[...this.issues,...o]};let i=new.target.prototype;if(Object.setPrototypeOf)Object.setPrototypeOf(this,i);else this.__proto__=i;this.name="ZodError",this.issues=n}format(n){let i=n||function(w){return w.message},o={_errors:[]},b=(w)=>{for(let l of w.issues)if(l.code==="invalid_union")l.unionErrors.map(b);else if(l.code==="invalid_return_type")b(l.returnTypeError);else if(l.code==="invalid_arguments")b(l.argumentsError);else if(l.path.length===0)o._errors.push(i(l));else{let x=o,$=0;while($<l.path.length){let v=l.path[$];if($!==l.path.length-1)x[v]=x[v]||{_errors:[]};else x[v]=x[v]||{_errors:[]},x[v]._errors.push(i(l));x=x[v],$++}}};return b(this),o}static assert(n){if(!(n instanceof Z))throw Error(`Not a ZodError: ${n}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,D.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(n=(i)=>i.message){let i={},o=[];for(let b of this.issues)if(b.path.length>0){let w=b.path[0];i[w]=i[w]||[],i[w].push(n(b))}else o.push(n(b));return{formErrors:o,fieldErrors:i}}get formErrors(){return this.flatten()}}Z.create=(n)=>{return new Z(n)};var Qw=(n,i)=>{let o;switch(n.code){case p.invalid_type:if(n.received===Y.undefined)o="Required";else o=`Expected ${n.expected}, received ${n.received}`;break;case p.invalid_literal:o=`Invalid literal value, expected ${JSON.stringify(n.expected,D.jsonStringifyReplacer)}`;break;case p.unrecognized_keys:o=`Unrecognized key(s) in object: ${D.joinValues(n.keys,", ")}`;break;case p.invalid_union:o="Invalid input";break;case p.invalid_union_discriminator:o=`Invalid discriminator value. Expected ${D.joinValues(n.options)}`;break;case p.invalid_enum_value:o=`Invalid enum value. Expected ${D.joinValues(n.options)}, received '${n.received}'`;break;case p.invalid_arguments:o="Invalid function arguments";break;case p.invalid_return_type:o="Invalid function return type";break;case p.invalid_date:o="Invalid date";break;case p.invalid_string:if(typeof n.validation==="object")if("includes"in n.validation){if(o=`Invalid input: must include "${n.validation.includes}"`,typeof n.validation.position==="number")o=`${o} at one or more positions greater than or equal to ${n.validation.position}`}else if("startsWith"in n.validation)o=`Invalid input: must start with "${n.validation.startsWith}"`;else if("endsWith"in n.validation)o=`Invalid input: must end with "${n.validation.endsWith}"`;else D.assertNever(n.validation);else if(n.validation!=="regex")o=`Invalid ${n.validation}`;else o="Invalid";break;case p.too_small:if(n.type==="array")o=`Array must contain ${n.exact?"exactly":n.inclusive?"at least":"more than"} ${n.minimum} element(s)`;else if(n.type==="string")o=`String must contain ${n.exact?"exactly":n.inclusive?"at least":"over"} ${n.minimum} character(s)`;else if(n.type==="number")o=`Number must be ${n.exact?"exactly equal to ":n.inclusive?"greater than or equal to ":"greater than "}${n.minimum}`;else if(n.type==="bigint")o=`Number must be ${n.exact?"exactly equal to ":n.inclusive?"greater than or equal to ":"greater than "}${n.minimum}`;else if(n.type==="date")o=`Date must be ${n.exact?"exactly equal to ":n.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(n.minimum))}`;else o="Invalid input";break;case p.too_big:if(n.type==="array")o=`Array must contain ${n.exact?"exactly":n.inclusive?"at most":"less than"} ${n.maximum} element(s)`;else if(n.type==="string")o=`String must contain ${n.exact?"exactly":n.inclusive?"at most":"under"} ${n.maximum} character(s)`;else if(n.type==="number")o=`Number must be ${n.exact?"exactly":n.inclusive?"less than or equal to":"less than"} ${n.maximum}`;else if(n.type==="bigint")o=`BigInt must be ${n.exact?"exactly":n.inclusive?"less than or equal to":"less than"} ${n.maximum}`;else if(n.type==="date")o=`Date must be ${n.exact?"exactly":n.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(n.maximum))}`;else o="Invalid input";break;case p.custom:o="Invalid input";break;case p.invalid_intersection_types:o="Intersection results could not be merged";break;case p.not_multiple_of:o=`Number must be a multiple of ${n.multipleOf}`;break;case p.not_finite:o="Number must be finite";break;default:o=i.defaultError,D.assertNever(n)}return{message:o}},un=Qw;var v1=un;function Ww(n){v1=n}function v0(){return v1}var U0=(n)=>{let{data:i,path:o,errorMaps:b,issueData:w}=n,l=[...o,...w.path||[]],x={...w,path:l};if(w.message!==void 0)return{...w,path:l,message:w.message};let $="",v=b.filter((H)=>!!H).slice().reverse();for(let H of v)$=H(x,{data:i,defaultError:$}).message;return{...w,path:l,message:$}},qw=[];function Q(n,i){let o=v0(),b=U0({issueData:i,data:n.data,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,o,o===un?void 0:un].filter((w)=>!!w)});n.common.issues.push(b)}class g{constructor(){this.value="valid"}dirty(){if(this.value==="valid")this.value="dirty"}abort(){if(this.value!=="aborted")this.value="aborted"}static mergeArray(n,i){let o=[];for(let b of i){if(b.status==="aborted")return C;if(b.status==="dirty")n.dirty();o.push(b.value)}return{status:n.value,value:o}}static async mergeObjectAsync(n,i){let o=[];for(let b of i){let w=await b.key,l=await b.value;o.push({key:w,value:l})}return g.mergeObjectSync(n,o)}static mergeObjectSync(n,i){let o={};for(let b of i){let{key:w,value:l}=b;if(w.status==="aborted")return C;if(l.status==="aborted")return C;if(w.status==="dirty")n.dirty();if(l.status==="dirty")n.dirty();if(w.value!=="__proto__"&&(typeof l.value<"u"||b.alwaysSet))o[w.value]=l.value}return{status:n.value,value:o}}}var C=Object.freeze({status:"aborted"}),Zn=(n)=>({status:"dirty",value:n}),y=(n)=>({status:"valid",value:n}),Ji=(n)=>n.status==="aborted",Xi=(n)=>n.status==="dirty",Ln=(n)=>n.status==="valid",H0=(n)=>typeof Promise<"u"&&n instanceof Promise;var O;(function(n){n.errToObj=(i)=>typeof i==="string"?{message:i}:i||{},n.toString=(i)=>typeof i==="string"?i:i?.message})(O||(O={}));class nn{constructor(n,i,o,b){this._cachedPath=[],this.parent=n,this.data=i,this._path=o,this._key=b}get path(){if(!this._cachedPath.length)if(Array.isArray(this._key))this._cachedPath.push(...this._path,...this._key);else this._cachedPath.push(...this._path,this._key);return this._cachedPath}}var H1=(n,i)=>{if(Ln(i))return{success:!0,data:i.value};else{if(!n.common.issues.length)throw Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let o=new Z(n.common.issues);return this._error=o,this._error}}}};function V(n){if(!n)return{};let{errorMap:i,invalid_type_error:o,required_error:b,description:w}=n;if(i&&(o||b))throw Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);if(i)return{errorMap:i,description:w};return{errorMap:(x,$)=>{let{message:v}=n;if(x.code==="invalid_enum_value")return{message:v??$.defaultError};if(typeof $.data>"u")return{message:v??b??$.defaultError};if(x.code!=="invalid_type")return{message:$.defaultError};return{message:v??o??$.defaultError}},description:w}}class K{get description(){return this._def.description}_getType(n){return pn(n.data)}_getOrReturnCtx(n,i){return i||{common:n.parent.common,data:n.data,parsedType:pn(n.data),schemaErrorMap:this._def.errorMap,path:n.path,parent:n.parent}}_processInputParams(n){return{status:new g,ctx:{common:n.parent.common,data:n.data,parsedType:pn(n.data),schemaErrorMap:this._def.errorMap,path:n.path,parent:n.parent}}}_parseSync(n){let i=this._parse(n);if(H0(i))throw Error("Synchronous parse encountered promise.");return i}_parseAsync(n){let i=this._parse(n);return Promise.resolve(i)}parse(n,i){let o=this.safeParse(n,i);if(o.success)return o.data;throw o.error}safeParse(n,i){let o={common:{issues:[],async:i?.async??!1,contextualErrorMap:i?.errorMap},path:i?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:n,parsedType:pn(n)},b=this._parseSync({data:n,path:o.path,parent:o});return H1(o,b)}"~validate"(n){let i={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:n,parsedType:pn(n)};if(!this["~standard"].async)try{let o=this._parseSync({data:n,path:[],parent:i});return Ln(o)?{value:o.value}:{issues:i.common.issues}}catch(o){if(o?.message?.toLowerCase()?.includes("encountered"))this["~standard"].async=!0;i.common={issues:[],async:!0}}return this._parseAsync({data:n,path:[],parent:i}).then((o)=>Ln(o)?{value:o.value}:{issues:i.common.issues})}async parseAsync(n,i){let o=await this.safeParseAsync(n,i);if(o.success)return o.data;throw o.error}async safeParseAsync(n,i){let o={common:{issues:[],contextualErrorMap:i?.errorMap,async:!0},path:i?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:n,parsedType:pn(n)},b=this._parse({data:n,path:o.path,parent:o}),w=await(H0(b)?b:Promise.resolve(b));return H1(o,w)}refine(n,i){let o=(b)=>{if(typeof i==="string"||typeof i>"u")return{message:i};else if(typeof i==="function")return i(b);else return i};return this._refinement((b,w)=>{let l=n(b),x=()=>w.addIssue({code:p.custom,...o(b)});if(typeof Promise<"u"&&l instanceof Promise)return l.then(($)=>{if(!$)return x(),!1;else return!0});if(!l)return x(),!1;else return!0})}refinement(n,i){return this._refinement((o,b)=>{if(!n(o))return b.addIssue(typeof i==="function"?i(o,b):i),!1;else return!0})}_refinement(n){return new on({schema:this,typeName:J.ZodEffects,effect:{type:"refinement",refinement:n}})}superRefine(n){return this._refinement(n)}constructor(n){this.spa=this.safeParseAsync,this._def=n,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:(i)=>this["~validate"](i)}}optional(){return r.create(this,this._def)}nullable(){return On.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return s.create(this)}promise(){return rn.create(this,this._def)}or(n){return Q0.create([this,n],this._def)}and(n){return W0.create(this,n,this._def)}transform(n){return new on({...V(this._def),schema:this,typeName:J.ZodEffects,effect:{type:"transform",transform:n}})}default(n){let i=typeof n==="function"?n:()=>n;return new Rn({...V(this._def),innerType:this,defaultValue:i,typeName:J.ZodDefault})}brand(){return new Qi({typeName:J.ZodBranded,type:this,...V(this._def)})}catch(n){let i=typeof n==="function"?n:()=>n;return new O0({...V(this._def),innerType:this,catchValue:i,typeName:J.ZodCatch})}describe(n){return new this.constructor({...this._def,description:n})}pipe(n){return y0.create(this,n)}readonly(){return G0.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}var uw=/^c[^\s-]{8,}$/i,Mw=/^[0-9a-z]+$/,Ow=/^[0-9A-HJKMNP-TV-Z]{26}$/i,Gw=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,Cw=/^[a-z0-9_-]{21}$/i,jw=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Bw=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,Vw=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,hw="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",$o,fw=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Lw=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,Kw=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,Dw=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Aw=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,Nw=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,p1="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",Rw=new RegExp(`^${p1}$`);function J1(n){let i="[0-5]\\d";if(n.precision)i=`${i}\\.\\d{${n.precision}}`;else if(n.precision==null)i=`${i}(\\.\\d+)?`;let o=n.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${i})${o}`}function Ew(n){return new RegExp(`^${J1(n)}$`)}function X1(n){let i=`${p1}T${J1(n)}`,o=[];if(o.push(n.local?"Z?":"Z"),n.offset)o.push("([+-]\\d{2}:?\\d{2})");return i=`${i}(${o.join("|")})`,new RegExp(`^${i}$`)}function Sw(n,i){if((i==="v4"||!i)&&fw.test(n))return!0;if((i==="v6"||!i)&&Kw.test(n))return!0;return!1}function Uw(n,i){if(!jw.test(n))return!1;try{let[o]=n.split(".");if(!o)return!1;let b=o.replace(/-/g,"+").replace(/_/g,"/").padEnd(o.length+(4-o.length%4)%4,"="),w=JSON.parse(atob(b));if(typeof w!=="object"||w===null)return!1;if("typ"in w&&w?.typ!=="JWT")return!1;if(!w.alg)return!1;if(i&&w.alg!==i)return!1;return!0}catch{return!1}}function cw(n,i){if((i==="v4"||!i)&&Lw.test(n))return!0;if((i==="v6"||!i)&&Dw.test(n))return!0;return!1}class a extends K{_parse(n){if(this._def.coerce)n.data=String(n.data);if(this._getType(n)!==Y.string){let w=this._getOrReturnCtx(n);return Q(w,{code:p.invalid_type,expected:Y.string,received:w.parsedType}),C}let o=new g,b=void 0;for(let w of this._def.checks)if(w.kind==="min"){if(n.data.length<w.value)b=this._getOrReturnCtx(n,b),Q(b,{code:p.too_small,minimum:w.value,type:"string",inclusive:!0,exact:!1,message:w.message}),o.dirty()}else if(w.kind==="max"){if(n.data.length>w.value)b=this._getOrReturnCtx(n,b),Q(b,{code:p.too_big,maximum:w.value,type:"string",inclusive:!0,exact:!1,message:w.message}),o.dirty()}else if(w.kind==="length"){let l=n.data.length>w.value,x=n.data.length<w.value;if(l||x){if(b=this._getOrReturnCtx(n,b),l)Q(b,{code:p.too_big,maximum:w.value,type:"string",inclusive:!0,exact:!0,message:w.message});else if(x)Q(b,{code:p.too_small,minimum:w.value,type:"string",inclusive:!0,exact:!0,message:w.message});o.dirty()}}else if(w.kind==="email"){if(!Vw.test(n.data))b=this._getOrReturnCtx(n,b),Q(b,{validation:"email",code:p.invalid_string,message:w.message}),o.dirty()}else if(w.kind==="emoji"){if(!$o)$o=new RegExp(hw,"u");if(!$o.test(n.data))b=this._getOrReturnCtx(n,b),Q(b,{validation:"emoji",code:p.invalid_string,message:w.message}),o.dirty()}else if(w.kind==="uuid"){if(!Gw.test(n.data))b=this._getOrReturnCtx(n,b),Q(b,{validation:"uuid",code:p.invalid_string,message:w.message}),o.dirty()}else if(w.kind==="nanoid"){if(!Cw.test(n.data))b=this._getOrReturnCtx(n,b),Q(b,{validation:"nanoid",code:p.invalid_string,message:w.message}),o.dirty()}else if(w.kind==="cuid"){if(!uw.test(n.data))b=this._getOrReturnCtx(n,b),Q(b,{validation:"cuid",code:p.invalid_string,message:w.message}),o.dirty()}else if(w.kind==="cuid2"){if(!Mw.test(n.data))b=this._getOrReturnCtx(n,b),Q(b,{validation:"cuid2",code:p.invalid_string,message:w.message}),o.dirty()}else if(w.kind==="ulid"){if(!Ow.test(n.data))b=this._getOrReturnCtx(n,b),Q(b,{validation:"ulid",code:p.invalid_string,message:w.message}),o.dirty()}else if(w.kind==="url")try{new URL(n.data)}catch{b=this._getOrReturnCtx(n,b),Q(b,{validation:"url",code:p.invalid_string,message:w.message}),o.dirty()}else if(w.kind==="regex"){if(w.regex.lastIndex=0,!w.regex.test(n.data))b=this._getOrReturnCtx(n,b),Q(b,{validation:"regex",code:p.invalid_string,message:w.message}),o.dirty()}else if(w.kind==="trim")n.data=n.data.trim();else if(w.kind==="includes"){if(!n.data.includes(w.value,w.position))b=this._getOrReturnCtx(n,b),Q(b,{code:p.invalid_string,validation:{includes:w.value,position:w.position},message:w.message}),o.dirty()}else if(w.kind==="toLowerCase")n.data=n.data.toLowerCase();else if(w.kind==="toUpperCase")n.data=n.data.toUpperCase();else if(w.kind==="startsWith"){if(!n.data.startsWith(w.value))b=this._getOrReturnCtx(n,b),Q(b,{code:p.invalid_string,validation:{startsWith:w.value},message:w.message}),o.dirty()}else if(w.kind==="endsWith"){if(!n.data.endsWith(w.value))b=this._getOrReturnCtx(n,b),Q(b,{code:p.invalid_string,validation:{endsWith:w.value},message:w.message}),o.dirty()}else if(w.kind==="datetime"){if(!X1(w).test(n.data))b=this._getOrReturnCtx(n,b),Q(b,{code:p.invalid_string,validation:"datetime",message:w.message}),o.dirty()}else if(w.kind==="date"){if(!Rw.test(n.data))b=this._getOrReturnCtx(n,b),Q(b,{code:p.invalid_string,validation:"date",message:w.message}),o.dirty()}else if(w.kind==="time"){if(!Ew(w).test(n.data))b=this._getOrReturnCtx(n,b),Q(b,{code:p.invalid_string,validation:"time",message:w.message}),o.dirty()}else if(w.kind==="duration"){if(!Bw.test(n.data))b=this._getOrReturnCtx(n,b),Q(b,{validation:"duration",code:p.invalid_string,message:w.message}),o.dirty()}else if(w.kind==="ip"){if(!Sw(n.data,w.version))b=this._getOrReturnCtx(n,b),Q(b,{validation:"ip",code:p.invalid_string,message:w.message}),o.dirty()}else if(w.kind==="jwt"){if(!Uw(n.data,w.alg))b=this._getOrReturnCtx(n,b),Q(b,{validation:"jwt",code:p.invalid_string,message:w.message}),o.dirty()}else if(w.kind==="cidr"){if(!cw(n.data,w.version))b=this._getOrReturnCtx(n,b),Q(b,{validation:"cidr",code:p.invalid_string,message:w.message}),o.dirty()}else if(w.kind==="base64"){if(!Aw.test(n.data))b=this._getOrReturnCtx(n,b),Q(b,{validation:"base64",code:p.invalid_string,message:w.message}),o.dirty()}else if(w.kind==="base64url"){if(!Nw.test(n.data))b=this._getOrReturnCtx(n,b),Q(b,{validation:"base64url",code:p.invalid_string,message:w.message}),o.dirty()}else D.assertNever(w);return{status:o.value,value:n.data}}_regex(n,i,o){return this.refinement((b)=>n.test(b),{validation:i,code:p.invalid_string,...O.errToObj(o)})}_addCheck(n){return new a({...this._def,checks:[...this._def.checks,n]})}email(n){return this._addCheck({kind:"email",...O.errToObj(n)})}url(n){return this._addCheck({kind:"url",...O.errToObj(n)})}emoji(n){return this._addCheck({kind:"emoji",...O.errToObj(n)})}uuid(n){return this._addCheck({kind:"uuid",...O.errToObj(n)})}nanoid(n){return this._addCheck({kind:"nanoid",...O.errToObj(n)})}cuid(n){return this._addCheck({kind:"cuid",...O.errToObj(n)})}cuid2(n){return this._addCheck({kind:"cuid2",...O.errToObj(n)})}ulid(n){return this._addCheck({kind:"ulid",...O.errToObj(n)})}base64(n){return this._addCheck({kind:"base64",...O.errToObj(n)})}base64url(n){return this._addCheck({kind:"base64url",...O.errToObj(n)})}jwt(n){return this._addCheck({kind:"jwt",...O.errToObj(n)})}ip(n){return this._addCheck({kind:"ip",...O.errToObj(n)})}cidr(n){return this._addCheck({kind:"cidr",...O.errToObj(n)})}datetime(n){if(typeof n==="string")return this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:n});return this._addCheck({kind:"datetime",precision:typeof n?.precision>"u"?null:n?.precision,offset:n?.offset??!1,local:n?.local??!1,...O.errToObj(n?.message)})}date(n){return this._addCheck({kind:"date",message:n})}time(n){if(typeof n==="string")return this._addCheck({kind:"time",precision:null,message:n});return this._addCheck({kind:"time",precision:typeof n?.precision>"u"?null:n?.precision,...O.errToObj(n?.message)})}duration(n){return this._addCheck({kind:"duration",...O.errToObj(n)})}regex(n,i){return this._addCheck({kind:"regex",regex:n,...O.errToObj(i)})}includes(n,i){return this._addCheck({kind:"includes",value:n,position:i?.position,...O.errToObj(i?.message)})}startsWith(n,i){return this._addCheck({kind:"startsWith",value:n,...O.errToObj(i)})}endsWith(n,i){return this._addCheck({kind:"endsWith",value:n,...O.errToObj(i)})}min(n,i){return this._addCheck({kind:"min",value:n,...O.errToObj(i)})}max(n,i){return this._addCheck({kind:"max",value:n,...O.errToObj(i)})}length(n,i){return this._addCheck({kind:"length",value:n,...O.errToObj(i)})}nonempty(n){return this.min(1,O.errToObj(n))}trim(){return new a({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new a({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new a({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find((n)=>n.kind==="datetime")}get isDate(){return!!this._def.checks.find((n)=>n.kind==="date")}get isTime(){return!!this._def.checks.find((n)=>n.kind==="time")}get isDuration(){return!!this._def.checks.find((n)=>n.kind==="duration")}get isEmail(){return!!this._def.checks.find((n)=>n.kind==="email")}get isURL(){return!!this._def.checks.find((n)=>n.kind==="url")}get isEmoji(){return!!this._def.checks.find((n)=>n.kind==="emoji")}get isUUID(){return!!this._def.checks.find((n)=>n.kind==="uuid")}get isNANOID(){return!!this._def.checks.find((n)=>n.kind==="nanoid")}get isCUID(){return!!this._def.checks.find((n)=>n.kind==="cuid")}get isCUID2(){return!!this._def.checks.find((n)=>n.kind==="cuid2")}get isULID(){return!!this._def.checks.find((n)=>n.kind==="ulid")}get isIP(){return!!this._def.checks.find((n)=>n.kind==="ip")}get isCIDR(){return!!this._def.checks.find((n)=>n.kind==="cidr")}get isBase64(){return!!this._def.checks.find((n)=>n.kind==="base64")}get isBase64url(){return!!this._def.checks.find((n)=>n.kind==="base64url")}get minLength(){let n=null;for(let i of this._def.checks)if(i.kind==="min"){if(n===null||i.value>n)n=i.value}return n}get maxLength(){let n=null;for(let i of this._def.checks)if(i.kind==="max"){if(n===null||i.value<n)n=i.value}return n}}a.create=(n)=>{return new a({checks:[],typeName:J.ZodString,coerce:n?.coerce??!1,...V(n)})};function kw(n,i){let o=(n.toString().split(".")[1]||"").length,b=(i.toString().split(".")[1]||"").length,w=o>b?o:b,l=Number.parseInt(n.toFixed(w).replace(".","")),x=Number.parseInt(i.toFixed(w).replace(".",""));return l%x/10**w}class Dn extends K{constructor(){super(...arguments);this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(n){if(this._def.coerce)n.data=Number(n.data);if(this._getType(n)!==Y.number){let w=this._getOrReturnCtx(n);return Q(w,{code:p.invalid_type,expected:Y.number,received:w.parsedType}),C}let o=void 0,b=new g;for(let w of this._def.checks)if(w.kind==="int"){if(!D.isInteger(n.data))o=this._getOrReturnCtx(n,o),Q(o,{code:p.invalid_type,expected:"integer",received:"float",message:w.message}),b.dirty()}else if(w.kind==="min"){if(w.inclusive?n.data<w.value:n.data<=w.value)o=this._getOrReturnCtx(n,o),Q(o,{code:p.too_small,minimum:w.value,type:"number",inclusive:w.inclusive,exact:!1,message:w.message}),b.dirty()}else if(w.kind==="max"){if(w.inclusive?n.data>w.value:n.data>=w.value)o=this._getOrReturnCtx(n,o),Q(o,{code:p.too_big,maximum:w.value,type:"number",inclusive:w.inclusive,exact:!1,message:w.message}),b.dirty()}else if(w.kind==="multipleOf"){if(kw(n.data,w.value)!==0)o=this._getOrReturnCtx(n,o),Q(o,{code:p.not_multiple_of,multipleOf:w.value,message:w.message}),b.dirty()}else if(w.kind==="finite"){if(!Number.isFinite(n.data))o=this._getOrReturnCtx(n,o),Q(o,{code:p.not_finite,message:w.message}),b.dirty()}else D.assertNever(w);return{status:b.value,value:n.data}}gte(n,i){return this.setLimit("min",n,!0,O.toString(i))}gt(n,i){return this.setLimit("min",n,!1,O.toString(i))}lte(n,i){return this.setLimit("max",n,!0,O.toString(i))}lt(n,i){return this.setLimit("max",n,!1,O.toString(i))}setLimit(n,i,o,b){return new Dn({...this._def,checks:[...this._def.checks,{kind:n,value:i,inclusive:o,message:O.toString(b)}]})}_addCheck(n){return new Dn({...this._def,checks:[...this._def.checks,n]})}int(n){return this._addCheck({kind:"int",message:O.toString(n)})}positive(n){return this._addCheck({kind:"min",value:0,inclusive:!1,message:O.toString(n)})}negative(n){return this._addCheck({kind:"max",value:0,inclusive:!1,message:O.toString(n)})}nonpositive(n){return this._addCheck({kind:"max",value:0,inclusive:!0,message:O.toString(n)})}nonnegative(n){return this._addCheck({kind:"min",value:0,inclusive:!0,message:O.toString(n)})}multipleOf(n,i){return this._addCheck({kind:"multipleOf",value:n,message:O.toString(i)})}finite(n){return this._addCheck({kind:"finite",message:O.toString(n)})}safe(n){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:O.toString(n)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:O.toString(n)})}get minValue(){let n=null;for(let i of this._def.checks)if(i.kind==="min"){if(n===null||i.value>n)n=i.value}return n}get maxValue(){let n=null;for(let i of this._def.checks)if(i.kind==="max"){if(n===null||i.value<n)n=i.value}return n}get isInt(){return!!this._def.checks.find((n)=>n.kind==="int"||n.kind==="multipleOf"&&D.isInteger(n.value))}get isFinite(){let n=null,i=null;for(let o of this._def.checks)if(o.kind==="finite"||o.kind==="int"||o.kind==="multipleOf")return!0;else if(o.kind==="min"){if(i===null||o.value>i)i=o.value}else if(o.kind==="max"){if(n===null||o.value<n)n=o.value}return Number.isFinite(i)&&Number.isFinite(n)}}Dn.create=(n)=>{return new Dn({checks:[],typeName:J.ZodNumber,coerce:n?.coerce||!1,...V(n)})};class An extends K{constructor(){super(...arguments);this.min=this.gte,this.max=this.lte}_parse(n){if(this._def.coerce)try{n.data=BigInt(n.data)}catch{return this._getInvalidInput(n)}if(this._getType(n)!==Y.bigint)return this._getInvalidInput(n);let o=void 0,b=new g;for(let w of this._def.checks)if(w.kind==="min"){if(w.inclusive?n.data<w.value:n.data<=w.value)o=this._getOrReturnCtx(n,o),Q(o,{code:p.too_small,type:"bigint",minimum:w.value,inclusive:w.inclusive,message:w.message}),b.dirty()}else if(w.kind==="max"){if(w.inclusive?n.data>w.value:n.data>=w.value)o=this._getOrReturnCtx(n,o),Q(o,{code:p.too_big,type:"bigint",maximum:w.value,inclusive:w.inclusive,message:w.message}),b.dirty()}else if(w.kind==="multipleOf"){if(n.data%w.value!==BigInt(0))o=this._getOrReturnCtx(n,o),Q(o,{code:p.not_multiple_of,multipleOf:w.value,message:w.message}),b.dirty()}else D.assertNever(w);return{status:b.value,value:n.data}}_getInvalidInput(n){let i=this._getOrReturnCtx(n);return Q(i,{code:p.invalid_type,expected:Y.bigint,received:i.parsedType}),C}gte(n,i){return this.setLimit("min",n,!0,O.toString(i))}gt(n,i){return this.setLimit("min",n,!1,O.toString(i))}lte(n,i){return this.setLimit("max",n,!0,O.toString(i))}lt(n,i){return this.setLimit("max",n,!1,O.toString(i))}setLimit(n,i,o,b){return new An({...this._def,checks:[...this._def.checks,{kind:n,value:i,inclusive:o,message:O.toString(b)}]})}_addCheck(n){return new An({...this._def,checks:[...this._def.checks,n]})}positive(n){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:O.toString(n)})}negative(n){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:O.toString(n)})}nonpositive(n){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:O.toString(n)})}nonnegative(n){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:O.toString(n)})}multipleOf(n,i){return this._addCheck({kind:"multipleOf",value:n,message:O.toString(i)})}get minValue(){let n=null;for(let i of this._def.checks)if(i.kind==="min"){if(n===null||i.value>n)n=i.value}return n}get maxValue(){let n=null;for(let i of this._def.checks)if(i.kind==="max"){if(n===null||i.value<n)n=i.value}return n}}An.create=(n)=>{return new An({checks:[],typeName:J.ZodBigInt,coerce:n?.coerce??!1,...V(n)})};class J0 extends K{_parse(n){if(this._def.coerce)n.data=Boolean(n.data);if(this._getType(n)!==Y.boolean){let o=this._getOrReturnCtx(n);return Q(o,{code:p.invalid_type,expected:Y.boolean,received:o.parsedType}),C}return y(n.data)}}J0.create=(n)=>{return new J0({typeName:J.ZodBoolean,coerce:n?.coerce||!1,...V(n)})};class zn extends K{_parse(n){if(this._def.coerce)n.data=new Date(n.data);if(this._getType(n)!==Y.date){let w=this._getOrReturnCtx(n);return Q(w,{code:p.invalid_type,expected:Y.date,received:w.parsedType}),C}if(Number.isNaN(n.data.getTime())){let w=this._getOrReturnCtx(n);return Q(w,{code:p.invalid_date}),C}let o=new g,b=void 0;for(let w of this._def.checks)if(w.kind==="min"){if(n.data.getTime()<w.value)b=this._getOrReturnCtx(n,b),Q(b,{code:p.too_small,message:w.message,inclusive:!0,exact:!1,minimum:w.value,type:"date"}),o.dirty()}else if(w.kind==="max"){if(n.data.getTime()>w.value)b=this._getOrReturnCtx(n,b),Q(b,{code:p.too_big,message:w.message,inclusive:!0,exact:!1,maximum:w.value,type:"date"}),o.dirty()}else D.assertNever(w);return{status:o.value,value:new Date(n.data.getTime())}}_addCheck(n){return new zn({...this._def,checks:[...this._def.checks,n]})}min(n,i){return this._addCheck({kind:"min",value:n.getTime(),message:O.toString(i)})}max(n,i){return this._addCheck({kind:"max",value:n.getTime(),message:O.toString(i)})}get minDate(){let n=null;for(let i of this._def.checks)if(i.kind==="min"){if(n===null||i.value>n)n=i.value}return n!=null?new Date(n):null}get maxDate(){let n=null;for(let i of this._def.checks)if(i.kind==="max"){if(n===null||i.value<n)n=i.value}return n!=null?new Date(n):null}}zn.create=(n)=>{return new zn({checks:[],coerce:n?.coerce||!1,typeName:J.ZodDate,...V(n)})};class c0 extends K{_parse(n){if(this._getType(n)!==Y.symbol){let o=this._getOrReturnCtx(n);return Q(o,{code:p.invalid_type,expected:Y.symbol,received:o.parsedType}),C}return y(n.data)}}c0.create=(n)=>{return new c0({typeName:J.ZodSymbol,...V(n)})};class X0 extends K{_parse(n){if(this._getType(n)!==Y.undefined){let o=this._getOrReturnCtx(n);return Q(o,{code:p.invalid_type,expected:Y.undefined,received:o.parsedType}),C}return y(n.data)}}X0.create=(n)=>{return new X0({typeName:J.ZodUndefined,...V(n)})};class Y0 extends K{_parse(n){if(this._getType(n)!==Y.null){let o=this._getOrReturnCtx(n);return Q(o,{code:p.invalid_type,expected:Y.null,received:o.parsedType}),C}return y(n.data)}}Y0.create=(n)=>{return new Y0({typeName:J.ZodNull,...V(n)})};class dn extends K{constructor(){super(...arguments);this._any=!0}_parse(n){return y(n.data)}}dn.create=(n)=>{return new dn({typeName:J.ZodAny,...V(n)})};class Kn extends K{constructor(){super(...arguments);this._unknown=!0}_parse(n){return y(n.data)}}Kn.create=(n)=>{return new Kn({typeName:J.ZodUnknown,...V(n)})};class Jn extends K{_parse(n){let i=this._getOrReturnCtx(n);return Q(i,{code:p.invalid_type,expected:Y.never,received:i.parsedType}),C}}Jn.create=(n)=>{return new Jn({typeName:J.ZodNever,...V(n)})};class k0 extends K{_parse(n){if(this._getType(n)!==Y.undefined){let o=this._getOrReturnCtx(n);return Q(o,{code:p.invalid_type,expected:Y.void,received:o.parsedType}),C}return y(n.data)}}k0.create=(n)=>{return new k0({typeName:J.ZodVoid,...V(n)})};class s extends K{_parse(n){let{ctx:i,status:o}=this._processInputParams(n),b=this._def;if(i.parsedType!==Y.array)return Q(i,{code:p.invalid_type,expected:Y.array,received:i.parsedType}),C;if(b.exactLength!==null){let l=i.data.length>b.exactLength.value,x=i.data.length<b.exactLength.value;if(l||x)Q(i,{code:l?p.too_big:p.too_small,minimum:x?b.exactLength.value:void 0,maximum:l?b.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:b.exactLength.message}),o.dirty()}if(b.minLength!==null){if(i.data.length<b.minLength.value)Q(i,{code:p.too_small,minimum:b.minLength.value,type:"array",inclusive:!0,exact:!1,message:b.minLength.message}),o.dirty()}if(b.maxLength!==null){if(i.data.length>b.maxLength.value)Q(i,{code:p.too_big,maximum:b.maxLength.value,type:"array",inclusive:!0,exact:!1,message:b.maxLength.message}),o.dirty()}if(i.common.async)return Promise.all([...i.data].map((l,x)=>{return b.type._parseAsync(new nn(i,l,i.path,x))})).then((l)=>{return g.mergeArray(o,l)});let w=[...i.data].map((l,x)=>{return b.type._parseSync(new nn(i,l,i.path,x))});return g.mergeArray(o,w)}get element(){return this._def.type}min(n,i){return new s({...this._def,minLength:{value:n,message:O.toString(i)}})}max(n,i){return new s({...this._def,maxLength:{value:n,message:O.toString(i)}})}length(n,i){return new s({...this._def,exactLength:{value:n,message:O.toString(i)}})}nonempty(n){return this.min(1,n)}}s.create=(n,i)=>{return new s({type:n,minLength:null,maxLength:null,exactLength:null,typeName:J.ZodArray,...V(i)})};function _0(n){if(n instanceof E){let i={};for(let o in n.shape){let b=n.shape[o];i[o]=r.create(_0(b))}return new E({...n._def,shape:()=>i})}else if(n instanceof s)return new s({...n._def,type:_0(n.element)});else if(n instanceof r)return r.create(_0(n.unwrap()));else if(n instanceof On)return On.create(_0(n.unwrap()));else if(n instanceof Xn)return Xn.create(n.items.map((i)=>_0(i)));else return n}class E extends K{constructor(){super(...arguments);this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let n=this._def.shape(),i=D.objectKeys(n);return this._cached={shape:n,keys:i},this._cached}_parse(n){if(this._getType(n)!==Y.object){let v=this._getOrReturnCtx(n);return Q(v,{code:p.invalid_type,expected:Y.object,received:v.parsedType}),C}let{status:o,ctx:b}=this._processInputParams(n),{shape:w,keys:l}=this._getCached(),x=[];if(!(this._def.catchall instanceof Jn&&this._def.unknownKeys==="strip")){for(let v in b.data)if(!l.includes(v))x.push(v)}let $=[];for(let v of l){let H=w[v],_=b.data[v];$.push({key:{status:"valid",value:v},value:H._parse(new nn(b,_,b.path,v)),alwaysSet:v in b.data})}if(this._def.catchall instanceof Jn){let v=this._def.unknownKeys;if(v==="passthrough")for(let H of x)$.push({key:{status:"valid",value:H},value:{status:"valid",value:b.data[H]}});else if(v==="strict"){if(x.length>0)Q(b,{code:p.unrecognized_keys,keys:x}),o.dirty()}else if(v==="strip");else throw Error("Internal ZodObject error: invalid unknownKeys value.")}else{let v=this._def.catchall;for(let H of x){let _=b.data[H];$.push({key:{status:"valid",value:H},value:v._parse(new nn(b,_,b.path,H)),alwaysSet:H in b.data})}}if(b.common.async)return Promise.resolve().then(async()=>{let v=[];for(let H of $){let _=await H.key,X=await H.value;v.push({key:_,value:X,alwaysSet:H.alwaysSet})}return v}).then((v)=>{return g.mergeObjectSync(o,v)});else return g.mergeObjectSync(o,$)}get shape(){return this._def.shape()}strict(n){return O.errToObj,new E({...this._def,unknownKeys:"strict",...n!==void 0?{errorMap:(i,o)=>{let b=this._def.errorMap?.(i,o).message??o.defaultError;if(i.code==="unrecognized_keys")return{message:O.errToObj(n).message??b};return{message:b}}}:{}})}strip(){return new E({...this._def,unknownKeys:"strip"})}passthrough(){return new E({...this._def,unknownKeys:"passthrough"})}extend(n){return new E({...this._def,shape:()=>({...this._def.shape(),...n})})}merge(n){return new E({unknownKeys:n._def.unknownKeys,catchall:n._def.catchall,shape:()=>({...this._def.shape(),...n._def.shape()}),typeName:J.ZodObject})}setKey(n,i){return this.augment({[n]:i})}catchall(n){return new E({...this._def,catchall:n})}pick(n){let i={};for(let o of D.objectKeys(n))if(n[o]&&this.shape[o])i[o]=this.shape[o];return new E({...this._def,shape:()=>i})}omit(n){let i={};for(let o of D.objectKeys(this.shape))if(!n[o])i[o]=this.shape[o];return new E({...this._def,shape:()=>i})}deepPartial(){return _0(this)}partial(n){let i={};for(let o of D.objectKeys(this.shape)){let b=this.shape[o];if(n&&!n[o])i[o]=b;else i[o]=b.optional()}return new E({...this._def,shape:()=>i})}required(n){let i={};for(let o of D.objectKeys(this.shape))if(n&&!n[o])i[o]=this.shape[o];else{let w=this.shape[o];while(w instanceof r)w=w._def.innerType;i[o]=w}return new E({...this._def,shape:()=>i})}keyof(){return Y1(D.objectKeys(this.shape))}}E.create=(n,i)=>{return new E({shape:()=>n,unknownKeys:"strip",catchall:Jn.create(),typeName:J.ZodObject,...V(i)})};E.strictCreate=(n,i)=>{return new E({shape:()=>n,unknownKeys:"strict",catchall:Jn.create(),typeName:J.ZodObject,...V(i)})};E.lazycreate=(n,i)=>{return new E({shape:n,unknownKeys:"strip",catchall:Jn.create(),typeName:J.ZodObject,...V(i)})};class Q0 extends K{_parse(n){let{ctx:i}=this._processInputParams(n),o=this._def.options;function b(w){for(let x of w)if(x.result.status==="valid")return x.result;for(let x of w)if(x.result.status==="dirty")return i.common.issues.push(...x.ctx.common.issues),x.result;let l=w.map((x)=>new Z(x.ctx.common.issues));return Q(i,{code:p.invalid_union,unionErrors:l}),C}if(i.common.async)return Promise.all(o.map(async(w)=>{let l={...i,common:{...i.common,issues:[]},parent:null};return{result:await w._parseAsync({data:i.data,path:i.path,parent:l}),ctx:l}})).then(b);else{let w=void 0,l=[];for(let $ of o){let v={...i,common:{...i.common,issues:[]},parent:null},H=$._parseSync({data:i.data,path:i.path,parent:v});if(H.status==="valid")return H;else if(H.status==="dirty"&&!w)w={result:H,ctx:v};if(v.common.issues.length)l.push(v.common.issues)}if(w)return i.common.issues.push(...w.ctx.common.issues),w.result;let x=l.map(($)=>new Z($));return Q(i,{code:p.invalid_union,unionErrors:x}),C}}get options(){return this._def.options}}Q0.create=(n,i)=>{return new Q0({options:n,typeName:J.ZodUnion,...V(i)})};var Mn=(n)=>{if(n instanceof q0)return Mn(n.schema);else if(n instanceof on)return Mn(n.innerType());else if(n instanceof u0)return[n.value];else if(n instanceof Nn)return n.options;else if(n instanceof M0)return D.objectValues(n.enum);else if(n instanceof Rn)return Mn(n._def.innerType);else if(n instanceof X0)return[void 0];else if(n instanceof Y0)return[null];else if(n instanceof r)return[void 0,...Mn(n.unwrap())];else if(n instanceof On)return[null,...Mn(n.unwrap())];else if(n instanceof Qi)return Mn(n.unwrap());else if(n instanceof G0)return Mn(n.unwrap());else if(n instanceof O0)return Mn(n._def.innerType);else return[]};class Yi extends K{_parse(n){let{ctx:i}=this._processInputParams(n);if(i.parsedType!==Y.object)return Q(i,{code:p.invalid_type,expected:Y.object,received:i.parsedType}),C;let o=this.discriminator,b=i.data[o],w=this.optionsMap.get(b);if(!w)return Q(i,{code:p.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[o]}),C;if(i.common.async)return w._parseAsync({data:i.data,path:i.path,parent:i});else return w._parseSync({data:i.data,path:i.path,parent:i})}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(n,i,o){let b=new Map;for(let w of i){let l=Mn(w.shape[n]);if(!l.length)throw Error(`A discriminator value for key \`${n}\` could not be extracted from all schema options`);for(let x of l){if(b.has(x))throw Error(`Discriminator property ${String(n)} has duplicate value ${String(x)}`);b.set(x,w)}}return new Yi({typeName:J.ZodDiscriminatedUnion,discriminator:n,options:i,optionsMap:b,...V(o)})}}function vo(n,i){let o=pn(n),b=pn(i);if(n===i)return{valid:!0,data:n};else if(o===Y.object&&b===Y.object){let w=D.objectKeys(i),l=D.objectKeys(n).filter(($)=>w.indexOf($)!==-1),x={...n,...i};for(let $ of l){let v=vo(n[$],i[$]);if(!v.valid)return{valid:!1};x[$]=v.data}return{valid:!0,data:x}}else if(o===Y.array&&b===Y.array){if(n.length!==i.length)return{valid:!1};let w=[];for(let l=0;l<n.length;l++){let x=n[l],$=i[l],v=vo(x,$);if(!v.valid)return{valid:!1};w.push(v.data)}return{valid:!0,data:w}}else if(o===Y.date&&b===Y.date&&+n===+i)return{valid:!0,data:n};else return{valid:!1}}class W0 extends K{_parse(n){let{status:i,ctx:o}=this._processInputParams(n),b=(w,l)=>{if(Ji(w)||Ji(l))return C;let x=vo(w.value,l.value);if(!x.valid)return Q(o,{code:p.invalid_intersection_types}),C;if(Xi(w)||Xi(l))i.dirty();return{status:i.value,value:x.data}};if(o.common.async)return Promise.all([this._def.left._parseAsync({data:o.data,path:o.path,parent:o}),this._def.right._parseAsync({data:o.data,path:o.path,parent:o})]).then(([w,l])=>b(w,l));else return b(this._def.left._parseSync({data:o.data,path:o.path,parent:o}),this._def.right._parseSync({data:o.data,path:o.path,parent:o}))}}W0.create=(n,i,o)=>{return new W0({left:n,right:i,typeName:J.ZodIntersection,...V(o)})};class Xn extends K{_parse(n){let{status:i,ctx:o}=this._processInputParams(n);if(o.parsedType!==Y.array)return Q(o,{code:p.invalid_type,expected:Y.array,received:o.parsedType}),C;if(o.data.length<this._def.items.length)return Q(o,{code:p.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),C;if(!this._def.rest&&o.data.length>this._def.items.length)Q(o,{code:p.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),i.dirty();let w=[...o.data].map((l,x)=>{let $=this._def.items[x]||this._def.rest;if(!$)return null;return $._parse(new nn(o,l,o.path,x))}).filter((l)=>!!l);if(o.common.async)return Promise.all(w).then((l)=>{return g.mergeArray(i,l)});else return g.mergeArray(i,w)}get items(){return this._def.items}rest(n){return new Xn({...this._def,rest:n})}}Xn.create=(n,i)=>{if(!Array.isArray(n))throw Error("You must pass an array of schemas to z.tuple([ ... ])");return new Xn({items:n,typeName:J.ZodTuple,rest:null,...V(i)})};class F0 extends K{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(n){let{status:i,ctx:o}=this._processInputParams(n);if(o.parsedType!==Y.object)return Q(o,{code:p.invalid_type,expected:Y.object,received:o.parsedType}),C;let b=[],w=this._def.keyType,l=this._def.valueType;for(let x in o.data)b.push({key:w._parse(new nn(o,x,o.path,x)),value:l._parse(new nn(o,o.data[x],o.path,x)),alwaysSet:x in o.data});if(o.common.async)return g.mergeObjectAsync(i,b);else return g.mergeObjectSync(i,b)}get element(){return this._def.valueType}static create(n,i,o){if(i instanceof K)return new F0({keyType:n,valueType:i,typeName:J.ZodRecord,...V(o)});return new F0({keyType:a.create(),valueType:n,typeName:J.ZodRecord,...V(i)})}}class g0 extends K{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(n){let{status:i,ctx:o}=this._processInputParams(n);if(o.parsedType!==Y.map)return Q(o,{code:p.invalid_type,expected:Y.map,received:o.parsedType}),C;let b=this._def.keyType,w=this._def.valueType,l=[...o.data.entries()].map(([x,$],v)=>{return{key:b._parse(new nn(o,x,o.path,[v,"key"])),value:w._parse(new nn(o,$,o.path,[v,"value"]))}});if(o.common.async){let x=new Map;return Promise.resolve().then(async()=>{for(let $ of l){let v=await $.key,H=await $.value;if(v.status==="aborted"||H.status==="aborted")return C;if(v.status==="dirty"||H.status==="dirty")i.dirty();x.set(v.value,H.value)}return{status:i.value,value:x}})}else{let x=new Map;for(let $ of l){let{key:v,value:H}=$;if(v.status==="aborted"||H.status==="aborted")return C;if(v.status==="dirty"||H.status==="dirty")i.dirty();x.set(v.value,H.value)}return{status:i.value,value:x}}}}g0.create=(n,i,o)=>{return new g0({valueType:i,keyType:n,typeName:J.ZodMap,...V(o)})};class an extends K{_parse(n){let{status:i,ctx:o}=this._processInputParams(n);if(o.parsedType!==Y.set)return Q(o,{code:p.invalid_type,expected:Y.set,received:o.parsedType}),C;let b=this._def;if(b.minSize!==null){if(o.data.size<b.minSize.value)Q(o,{code:p.too_small,minimum:b.minSize.value,type:"set",inclusive:!0,exact:!1,message:b.minSize.message}),i.dirty()}if(b.maxSize!==null){if(o.data.size>b.maxSize.value)Q(o,{code:p.too_big,maximum:b.maxSize.value,type:"set",inclusive:!0,exact:!1,message:b.maxSize.message}),i.dirty()}let w=this._def.valueType;function l($){let v=new Set;for(let H of $){if(H.status==="aborted")return C;if(H.status==="dirty")i.dirty();v.add(H.value)}return{status:i.value,value:v}}let x=[...o.data.values()].map(($,v)=>w._parse(new nn(o,$,o.path,v)));if(o.common.async)return Promise.all(x).then(($)=>l($));else return l(x)}min(n,i){return new an({...this._def,minSize:{value:n,message:O.toString(i)}})}max(n,i){return new an({...this._def,maxSize:{value:n,message:O.toString(i)}})}size(n,i){return this.min(n,i).max(n,i)}nonempty(n){return this.min(1,n)}}an.create=(n,i)=>{return new an({valueType:n,minSize:null,maxSize:null,typeName:J.ZodSet,...V(i)})};class p0 extends K{constructor(){super(...arguments);this.validate=this.implement}_parse(n){let{ctx:i}=this._processInputParams(n);if(i.parsedType!==Y.function)return Q(i,{code:p.invalid_type,expected:Y.function,received:i.parsedType}),C;function o(x,$){return U0({data:x,path:i.path,errorMaps:[i.common.contextualErrorMap,i.schemaErrorMap,v0(),un].filter((v)=>!!v),issueData:{code:p.invalid_arguments,argumentsError:$}})}function b(x,$){return U0({data:x,path:i.path,errorMaps:[i.common.contextualErrorMap,i.schemaErrorMap,v0(),un].filter((v)=>!!v),issueData:{code:p.invalid_return_type,returnTypeError:$}})}let w={errorMap:i.common.contextualErrorMap},l=i.data;if(this._def.returns instanceof rn){let x=this;return y(async function(...$){let v=new Z([]),H=await x._def.args.parseAsync($,w).catch((W)=>{throw v.addIssue(o($,W)),v}),_=await Reflect.apply(l,this,H);return await x._def.returns._def.type.parseAsync(_,w).catch((W)=>{throw v.addIssue(b(_,W)),v})})}else{let x=this;return y(function(...$){let v=x._def.args.safeParse($,w);if(!v.success)throw new Z([o($,v.error)]);let H=Reflect.apply(l,this,v.data),_=x._def.returns.safeParse(H,w);if(!_.success)throw new Z([b(H,_.error)]);return _.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...n){return new p0({...this._def,args:Xn.create(n).rest(Kn.create())})}returns(n){return new p0({...this._def,returns:n})}implement(n){return this.parse(n)}strictImplement(n){return this.parse(n)}static create(n,i,o){return new p0({args:n?n:Xn.create([]).rest(Kn.create()),returns:i||Kn.create(),typeName:J.ZodFunction,...V(o)})}}class q0 extends K{get schema(){return this._def.getter()}_parse(n){let{ctx:i}=this._processInputParams(n);return this._def.getter()._parse({data:i.data,path:i.path,parent:i})}}q0.create=(n,i)=>{return new q0({getter:n,typeName:J.ZodLazy,...V(i)})};class u0 extends K{_parse(n){if(n.data!==this._def.value){let i=this._getOrReturnCtx(n);return Q(i,{received:i.data,code:p.invalid_literal,expected:this._def.value}),C}return{status:"valid",value:n.data}}get value(){return this._def.value}}u0.create=(n,i)=>{return new u0({value:n,typeName:J.ZodLiteral,...V(i)})};function Y1(n,i){return new Nn({values:n,typeName:J.ZodEnum,...V(i)})}class Nn extends K{_parse(n){if(typeof n.data!=="string"){let i=this._getOrReturnCtx(n),o=this._def.values;return Q(i,{expected:D.joinValues(o),received:i.parsedType,code:p.invalid_type}),C}if(!this._cache)this._cache=new Set(this._def.values);if(!this._cache.has(n.data)){let i=this._getOrReturnCtx(n),o=this._def.values;return Q(i,{received:i.data,code:p.invalid_enum_value,options:o}),C}return y(n.data)}get options(){return this._def.values}get enum(){let n={};for(let i of this._def.values)n[i]=i;return n}get Values(){let n={};for(let i of this._def.values)n[i]=i;return n}get Enum(){let n={};for(let i of this._def.values)n[i]=i;return n}extract(n,i=this._def){return Nn.create(n,{...this._def,...i})}exclude(n,i=this._def){return Nn.create(this.options.filter((o)=>!n.includes(o)),{...this._def,...i})}}Nn.create=Y1;class M0 extends K{_parse(n){let i=D.getValidEnumValues(this._def.values),o=this._getOrReturnCtx(n);if(o.parsedType!==Y.string&&o.parsedType!==Y.number){let b=D.objectValues(i);return Q(o,{expected:D.joinValues(b),received:o.parsedType,code:p.invalid_type}),C}if(!this._cache)this._cache=new Set(D.getValidEnumValues(this._def.values));if(!this._cache.has(n.data)){let b=D.objectValues(i);return Q(o,{received:o.data,code:p.invalid_enum_value,options:b}),C}return y(n.data)}get enum(){return this._def.values}}M0.create=(n,i)=>{return new M0({values:n,typeName:J.ZodNativeEnum,...V(i)})};class rn extends K{unwrap(){return this._def.type}_parse(n){let{ctx:i}=this._processInputParams(n);if(i.parsedType!==Y.promise&&i.common.async===!1)return Q(i,{code:p.invalid_type,expected:Y.promise,received:i.parsedType}),C;let o=i.parsedType===Y.promise?i.data:Promise.resolve(i.data);return y(o.then((b)=>{return this._def.type.parseAsync(b,{path:i.path,errorMap:i.common.contextualErrorMap})}))}}rn.create=(n,i)=>{return new rn({type:n,typeName:J.ZodPromise,...V(i)})};class on extends K{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===J.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(n){let{status:i,ctx:o}=this._processInputParams(n),b=this._def.effect||null,w={addIssue:(l)=>{if(Q(o,l),l.fatal)i.abort();else i.dirty()},get path(){return o.path}};if(w.addIssue=w.addIssue.bind(w),b.type==="preprocess"){let l=b.transform(o.data,w);if(o.common.async)return Promise.resolve(l).then(async(x)=>{if(i.value==="aborted")return C;let $=await this._def.schema._parseAsync({data:x,path:o.path,parent:o});if($.status==="aborted")return C;if($.status==="dirty")return Zn($.value);if(i.value==="dirty")return Zn($.value);return $});else{if(i.value==="aborted")return C;let x=this._def.schema._parseSync({data:l,path:o.path,parent:o});if(x.status==="aborted")return C;if(x.status==="dirty")return Zn(x.value);if(i.value==="dirty")return Zn(x.value);return x}}if(b.type==="refinement"){let l=(x)=>{let $=b.refinement(x,w);if(o.common.async)return Promise.resolve($);if($ instanceof Promise)throw Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return x};if(o.common.async===!1){let x=this._def.schema._parseSync({data:o.data,path:o.path,parent:o});if(x.status==="aborted")return C;if(x.status==="dirty")i.dirty();return l(x.value),{status:i.value,value:x.value}}else return this._def.schema._parseAsync({data:o.data,path:o.path,parent:o}).then((x)=>{if(x.status==="aborted")return C;if(x.status==="dirty")i.dirty();return l(x.value).then(()=>{return{status:i.value,value:x.value}})})}if(b.type==="transform")if(o.common.async===!1){let l=this._def.schema._parseSync({data:o.data,path:o.path,parent:o});if(!Ln(l))return C;let x=b.transform(l.value,w);if(x instanceof Promise)throw Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:i.value,value:x}}else return this._def.schema._parseAsync({data:o.data,path:o.path,parent:o}).then((l)=>{if(!Ln(l))return C;return Promise.resolve(b.transform(l.value,w)).then((x)=>({status:i.value,value:x}))});D.assertNever(b)}}on.create=(n,i,o)=>{return new on({schema:n,typeName:J.ZodEffects,effect:i,...V(o)})};on.createWithPreprocess=(n,i,o)=>{return new on({schema:i,effect:{type:"preprocess",transform:n},typeName:J.ZodEffects,...V(o)})};class r extends K{_parse(n){if(this._getType(n)===Y.undefined)return y(void 0);return this._def.innerType._parse(n)}unwrap(){return this._def.innerType}}r.create=(n,i)=>{return new r({innerType:n,typeName:J.ZodOptional,...V(i)})};class On extends K{_parse(n){if(this._getType(n)===Y.null)return y(null);return this._def.innerType._parse(n)}unwrap(){return this._def.innerType}}On.create=(n,i)=>{return new On({innerType:n,typeName:J.ZodNullable,...V(i)})};class Rn extends K{_parse(n){let{ctx:i}=this._processInputParams(n),o=i.data;if(i.parsedType===Y.undefined)o=this._def.defaultValue();return this._def.innerType._parse({data:o,path:i.path,parent:i})}removeDefault(){return this._def.innerType}}Rn.create=(n,i)=>{return new Rn({innerType:n,typeName:J.ZodDefault,defaultValue:typeof i.default==="function"?i.default:()=>i.default,...V(i)})};class O0 extends K{_parse(n){let{ctx:i}=this._processInputParams(n),o={...i,common:{...i.common,issues:[]}},b=this._def.innerType._parse({data:o.data,path:o.path,parent:{...o}});if(H0(b))return b.then((w)=>{return{status:"valid",value:w.status==="valid"?w.value:this._def.catchValue({get error(){return new Z(o.common.issues)},input:o.data})}});else return{status:"valid",value:b.status==="valid"?b.value:this._def.catchValue({get error(){return new Z(o.common.issues)},input:o.data})}}removeCatch(){return this._def.innerType}}O0.create=(n,i)=>{return new O0({innerType:n,typeName:J.ZodCatch,catchValue:typeof i.catch==="function"?i.catch:()=>i.catch,...V(i)})};class P0 extends K{_parse(n){if(this._getType(n)!==Y.nan){let o=this._getOrReturnCtx(n);return Q(o,{code:p.invalid_type,expected:Y.nan,received:o.parsedType}),C}return{status:"valid",value:n.data}}}P0.create=(n)=>{return new P0({typeName:J.ZodNaN,...V(n)})};var Fw=Symbol("zod_brand");class Qi extends K{_parse(n){let{ctx:i}=this._processInputParams(n),o=i.data;return this._def.type._parse({data:o,path:i.path,parent:i})}unwrap(){return this._def.type}}class y0 extends K{_parse(n){let{status:i,ctx:o}=this._processInputParams(n);if(o.common.async)return(async()=>{let w=await this._def.in._parseAsync({data:o.data,path:o.path,parent:o});if(w.status==="aborted")return C;if(w.status==="dirty")return i.dirty(),Zn(w.value);else return this._def.out._parseAsync({data:w.value,path:o.path,parent:o})})();else{let b=this._def.in._parseSync({data:o.data,path:o.path,parent:o});if(b.status==="aborted")return C;if(b.status==="dirty")return i.dirty(),{status:"dirty",value:b.value};else return this._def.out._parseSync({data:b.value,path:o.path,parent:o})}}static create(n,i){return new y0({in:n,out:i,typeName:J.ZodPipeline})}}class G0 extends K{_parse(n){let i=this._def.innerType._parse(n),o=(b)=>{if(Ln(b))b.value=Object.freeze(b.value);return b};return H0(i)?i.then((b)=>o(b)):o(i)}unwrap(){return this._def.innerType}}G0.create=(n,i)=>{return new G0({innerType:n,typeName:J.ZodReadonly,...V(i)})};function _1(n,i){let o=typeof n==="function"?n(i):typeof n==="string"?{message:n}:n;return typeof o==="string"?{message:o}:o}function Q1(n,i={},o){if(n)return dn.create().superRefine((b,w)=>{let l=n(b);if(l instanceof Promise)return l.then((x)=>{if(!x){let $=_1(i,b),v=$.fatal??o??!0;w.addIssue({code:"custom",...$,fatal:v})}});if(!l){let x=_1(i,b),$=x.fatal??o??!0;w.addIssue({code:"custom",...x,fatal:$})}return});return dn.create()}var gw={object:E.lazycreate},J;(function(n){n.ZodString="ZodString",n.ZodNumber="ZodNumber",n.ZodNaN="ZodNaN",n.ZodBigInt="ZodBigInt",n.ZodBoolean="ZodBoolean",n.ZodDate="ZodDate",n.ZodSymbol="ZodSymbol",n.ZodUndefined="ZodUndefined",n.ZodNull="ZodNull",n.ZodAny="ZodAny",n.ZodUnknown="ZodUnknown",n.ZodNever="ZodNever",n.ZodVoid="ZodVoid",n.ZodArray="ZodArray",n.ZodObject="ZodObject",n.ZodUnion="ZodUnion",n.ZodDiscriminatedUnion="ZodDiscriminatedUnion",n.ZodIntersection="ZodIntersection",n.ZodTuple="ZodTuple",n.ZodRecord="ZodRecord",n.ZodMap="ZodMap",n.ZodSet="ZodSet",n.ZodFunction="ZodFunction",n.ZodLazy="ZodLazy",n.ZodLiteral="ZodLiteral",n.ZodEnum="ZodEnum",n.ZodEffects="ZodEffects",n.ZodNativeEnum="ZodNativeEnum",n.ZodOptional="ZodOptional",n.ZodNullable="ZodNullable",n.ZodDefault="ZodDefault",n.ZodCatch="ZodCatch",n.ZodPromise="ZodPromise",n.ZodBranded="ZodBranded",n.ZodPipeline="ZodPipeline",n.ZodReadonly="ZodReadonly"})(J||(J={}));var Pw=(n,i={message:`Input not instance of ${n.name}`})=>Q1((o)=>o instanceof n,i),W1=a.create,q1=Dn.create,yw=P0.create,Tw=An.create,u1=J0.create,tw=zn.create,Iw=c0.create,Zw=X0.create,zw=Y0.create,dw=dn.create,aw=Kn.create,rw=Jn.create,ew=k0.create,sw=s.create,nl=E.create,il=E.strictCreate,ol=Q0.create,ml=Yi.create,bl=W0.create,wl=Xn.create,ll=F0.create,xl=g0.create,$l=an.create,vl=p0.create,Hl=q0.create,_l=u0.create,pl=Nn.create,Jl=M0.create,Xl=rn.create,Yl=on.create,Ql=r.create,Wl=On.create,ql=on.createWithPreprocess,ul=y0.create,Ml=()=>W1().optional(),Ol=()=>q1().optional(),Gl=()=>u1().optional(),Cl={string:(n)=>a.create({...n,coerce:!0}),number:(n)=>Dn.create({...n,coerce:!0}),boolean:(n)=>J0.create({...n,coerce:!0}),bigint:(n)=>An.create({...n,coerce:!0}),date:(n)=>zn.create({...n,coerce:!0})};var jl=C;function Bl(n,i){if(!(i instanceof E))return n;let o=i.shape,b={...n};for(let[w,l]of Object.entries(o)){if(typeof b[w]!=="number")continue;let x=l;while(x instanceof r||x instanceof Rn)x=x._def.innerType;if(x instanceof a)b[w]=String(b[w])}return b}var Vl=30000;class Wi{registry;constructor(n){this.registry=n}async execute(n){let i=Date.now(),{command:o,args:b}=n,w=this.registry.get(o);if(!w)return fn(o,"core",new $0(o),Date.now()-i);let l=w.parameters.safeParse(Bl(b,w.parameters));if(!l.success){let v=new wo(`Invalid arguments for command '${o}'`,l.error.errors);return fn(o,w.pluginName,v,Date.now()-i)}let x=w.timeout??Vl,$;try{let v=await Promise.race([w.handler(l.data),new Promise((H,_)=>{$=setTimeout(()=>_(new pi(o,x)),x)})]);return clearTimeout($),$1(o,w.pluginName,v,Date.now()-i)}catch(v){if(clearTimeout($),v instanceof pi)return fn(o,w.pluginName,v,Date.now()-i);if(v instanceof M)return fn(o,w.pluginName,v,Date.now()-i);let H=v instanceof Error?new Hi(v.message,v.stack):new Hi(String(v));return fn(o,w.pluginName,H,Date.now()-i)}}}function M1(n){if(n==="true")return!0;if(n==="false")return!1;if(n==="0"||/^0\.\d+$/.test(n))return Number(n);if(n.startsWith("0"))return n;if(n!==""&&!isNaN(Number(n)))return Number(n);return n}function G1(n){let i={},o="",b=0;if(n.length>0&&!n[0].startsWith("--"))o=n[0],b=1;while(b<n.length){let w=n[b];if(w.startsWith("--")){let l=w.slice(2);if(l.includes("=")){let x=l.indexOf("="),$=l.slice(0,x),v=l.slice(x+1);O1(i,$,M1(v))}else if(b+1<n.length&&!n[b+1].startsWith("--"))O1(i,l,M1(n[b+1])),b++;else i[l]=!0}b++}return{command:o,args:i}}function O1(n,i,o){let b=n[i];if(b===void 0)n[i]=o;else if(Array.isArray(b))n[i]=[...b,o];else if(typeof b==="string")n[i]=[b,o]}var hl={version:"1.0.0"};async function fl(n,i){try{if(n.initialize)await n.initialize(hl);let o=i;for(let b of n.commands)o=o.register(b);return{registry:o}}catch(o){let b=o instanceof Error?new _i(n.name,o.message,o):new _i(n.name,String(o));return{registry:i,error:b}}}async function Ho(n,i=new In){let o=i,b=[];for(let w of n){let l=await fl(w,o);if(o=l.registry,l.error)b.push({pluginName:w.name,error:l.error})}return{registry:o,errors:b}}import{readFileSync as Ll,writeFileSync as Kl,mkdirSync as Dl,existsSync as C1}from"node:fs";import{homedir as Al}from"node:os";import{join as j1}from"node:path";var _o=process.env.YUNKE_CONFIG_DIR??j1(Al(),".yunke"),qi=j1(_o,"plugins.json");function B1(){if(!C1(_o))Dl(_o,{recursive:!0})}function en(){if(B1(),!C1(qi))return{version:"1",plugins:[]};try{let n=Ll(qi,"utf-8");return JSON.parse(n)}catch(n){return process.stderr.write(`Warning: Failed to parse plugin config at ${qi}: ${n instanceof Error?n.message:String(n)}
7
+ `),{version:"1",plugins:[]}}}function ui(n){B1(),Kl(qi,JSON.stringify(n,null,2),"utf-8")}function V1(n){let i=en(),o=i.plugins.findIndex((w)=>w.name===n.name),b={...n,installedAt:new Date().toISOString()};if(o>=0){let w=[...i.plugins];w[o]=b,ui({...i,plugins:w})}else ui({...i,plugins:[...i.plugins,b]})}function h1(n){let i=en(),o=i.plugins.filter((b)=>b.name!==n);if(o.length!==i.plugins.length)return ui({...i,plugins:o}),!0;return!1}function po(n,i){let o=en();if(o.plugins.findIndex((l)=>l.name===n)<0)return!1;let w=o.plugins.map((l)=>l.name===n?{...l,enabled:i}:l);return ui({...o,plugins:w}),!0}import{readFileSync as Nl,writeFileSync as Rl,existsSync as f1,mkdirSync as El}from"node:fs";import{homedir as Sl}from"node:os";import{join as L1}from"node:path";var Gn={agenphone:!1,weixiaozhu:!1},Jo=process.env.YUNKE_CONFIG_DIR??L1(Sl(),".yunke"),Xo=L1(Jo,"features.json");function Mi(){if(!f1(Xo))return{version:"1",features:{...Gn}};try{let n=Nl(Xo,"utf-8"),i=JSON.parse(n);return{...i,features:{...Gn,...i.features}}}catch{return{version:"1",features:{...Gn}}}}function Ul(n){if(!f1(Jo))El(Jo,{recursive:!0});Rl(Xo,JSON.stringify(n,null,2),"utf-8")}function K1(n){return Mi().features[n]??!1}function Yo(n,i){let o=Mi();Ul({...o,features:{...o.features,[n]:i}})}var A1=Symbol("Let zodToJsonSchema decide on which parser to use");var D1={name:void 0,$refStrategy:"root",basePath:["#"],effectStrategy:"input",pipeStrategy:"all",dateStrategy:"format:date-time",mapStrategy:"entries",removeAdditionalStrategy:"passthrough",allowedAdditionalProperties:!0,rejectedAdditionalProperties:!1,definitionPath:"definitions",target:"jsonSchema7",strictUnions:!1,definitions:{},errorMessages:!1,markdownDescription:!1,patternStrategy:"escape",applyRegexFlags:!1,emailStrategy:"format:email",base64Strategy:"contentEncoding:base64",nameStrategy:"ref",openAiAnyTypeName:"OpenAiAnyType"},N1=(n)=>typeof n==="string"?{...D1,name:n}:{...D1,...n};var R1=(n)=>{let i=N1(n),o=i.name!==void 0?[...i.basePath,i.definitionPath,i.name]:i.basePath;return{...i,flags:{hasReferencedOpenAiAnyType:!1},currentPath:o,propertyPath:void 0,seen:new Map(Object.entries(i.definitions).map(([b,w])=>[w._def,{def:w._def,path:[...i.basePath,i.definitionPath,b],jsonSchema:void 0}]))}};function Qo(n,i,o,b){if(!b?.errorMessages)return;if(o)n.errorMessage={...n.errorMessage,[i]:o}}function N(n,i,o,b,w){n[i]=o,Qo(n,i,b,w)}var Oi=(n,i)=>{let o=0;for(;o<n.length&&o<i.length;o++)if(n[o]!==i[o])break;return[(n.length-o).toString(),...i.slice(o)].join("/")};function U(n){if(n.target!=="openAi")return{};let i=[...n.basePath,n.definitionPath,n.openAiAnyTypeName];return n.flags.hasReferencedOpenAiAnyType=!0,{$ref:n.$refStrategy==="relative"?Oi(i,n.currentPath):i.join("/")}}function E1(n,i){let o={type:"array"};if(n.type?._def&&n.type?._def?.typeName!==J.ZodAny)o.items=j(n.type._def,{...i,currentPath:[...i.currentPath,"items"]});if(n.minLength)N(o,"minItems",n.minLength.value,n.minLength.message,i);if(n.maxLength)N(o,"maxItems",n.maxLength.value,n.maxLength.message,i);if(n.exactLength)N(o,"minItems",n.exactLength.value,n.exactLength.message,i),N(o,"maxItems",n.exactLength.value,n.exactLength.message,i);return o}function S1(n,i){let o={type:"integer",format:"int64"};if(!n.checks)return o;for(let b of n.checks)switch(b.kind){case"min":if(i.target==="jsonSchema7")if(b.inclusive)N(o,"minimum",b.value,b.message,i);else N(o,"exclusiveMinimum",b.value,b.message,i);else{if(!b.inclusive)o.exclusiveMinimum=!0;N(o,"minimum",b.value,b.message,i)}break;case"max":if(i.target==="jsonSchema7")if(b.inclusive)N(o,"maximum",b.value,b.message,i);else N(o,"exclusiveMaximum",b.value,b.message,i);else{if(!b.inclusive)o.exclusiveMaximum=!0;N(o,"maximum",b.value,b.message,i)}break;case"multipleOf":N(o,"multipleOf",b.value,b.message,i);break}return o}function U1(){return{type:"boolean"}}function Gi(n,i){return j(n.type._def,i)}var c1=(n,i)=>{return j(n.innerType._def,i)};function Wo(n,i,o){let b=o??i.dateStrategy;if(Array.isArray(b))return{anyOf:b.map((w,l)=>Wo(n,i,w))};switch(b){case"string":case"format:date-time":return{type:"string",format:"date-time"};case"format:date":return{type:"string",format:"date"};case"integer":return cl(n,i)}}var cl=(n,i)=>{let o={type:"integer",format:"unix-time"};if(i.target==="openApi3")return o;for(let b of n.checks)switch(b.kind){case"min":N(o,"minimum",b.value,b.message,i);break;case"max":N(o,"maximum",b.value,b.message,i);break}return o};function k1(n,i){return{...j(n.innerType._def,i),default:n.defaultValue()}}function F1(n,i){return i.effectStrategy==="input"?j(n.schema._def,i):U(i)}function g1(n){return{type:"string",enum:Array.from(n.values)}}var kl=(n)=>{if("type"in n&&n.type==="string")return!1;return"allOf"in n};function P1(n,i){let o=[j(n.left._def,{...i,currentPath:[...i.currentPath,"allOf","0"]}),j(n.right._def,{...i,currentPath:[...i.currentPath,"allOf","1"]})].filter((l)=>!!l),b=i.target==="jsonSchema2019-09"?{unevaluatedProperties:!1}:void 0,w=[];return o.forEach((l)=>{if(kl(l)){if(w.push(...l.allOf),l.unevaluatedProperties===void 0)b=void 0}else{let x=l;if("additionalProperties"in l&&l.additionalProperties===!1){let{additionalProperties:$,...v}=l;x=v}else b=void 0;w.push(x)}}),w.length?{allOf:w,...b}:void 0}function y1(n,i){let o=typeof n.value;if(o!=="bigint"&&o!=="number"&&o!=="boolean"&&o!=="string")return{type:Array.isArray(n.value)?"array":"object"};if(i.target==="openApi3")return{type:o==="bigint"?"integer":o,enum:[n.value]};return{type:o==="bigint"?"integer":o,const:n.value}}var qo=void 0,mn={cuid:/^[cC][^\s-]{8,}$/,cuid2:/^[0-9a-z]+$/,ulid:/^[0-9A-HJKMNP-TV-Z]{26}$/,email:/^(?!\.)(?!.*\.\.)([a-zA-Z0-9_'+\-\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\-]*\.)+[a-zA-Z]{2,}$/,emoji:()=>{if(qo===void 0)qo=RegExp("^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$","u");return qo},uuid:/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/,ipv4:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,ipv4Cidr:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,ipv6:/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,ipv6Cidr:/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,base64:/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,base64url:/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,nanoid:/^[a-zA-Z0-9_-]{21}$/,jwt:/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/};function Ci(n,i){let o={type:"string"};if(n.checks)for(let b of n.checks)switch(b.kind){case"min":N(o,"minLength",typeof o.minLength==="number"?Math.max(o.minLength,b.value):b.value,b.message,i);break;case"max":N(o,"maxLength",typeof o.maxLength==="number"?Math.min(o.maxLength,b.value):b.value,b.message,i);break;case"email":switch(i.emailStrategy){case"format:email":bn(o,"email",b.message,i);break;case"format:idn-email":bn(o,"idn-email",b.message,i);break;case"pattern:zod":t(o,mn.email,b.message,i);break}break;case"url":bn(o,"uri",b.message,i);break;case"uuid":bn(o,"uuid",b.message,i);break;case"regex":t(o,b.regex,b.message,i);break;case"cuid":t(o,mn.cuid,b.message,i);break;case"cuid2":t(o,mn.cuid2,b.message,i);break;case"startsWith":t(o,RegExp(`^${uo(b.value,i)}`),b.message,i);break;case"endsWith":t(o,RegExp(`${uo(b.value,i)}$`),b.message,i);break;case"datetime":bn(o,"date-time",b.message,i);break;case"date":bn(o,"date",b.message,i);break;case"time":bn(o,"time",b.message,i);break;case"duration":bn(o,"duration",b.message,i);break;case"length":N(o,"minLength",typeof o.minLength==="number"?Math.max(o.minLength,b.value):b.value,b.message,i),N(o,"maxLength",typeof o.maxLength==="number"?Math.min(o.maxLength,b.value):b.value,b.message,i);break;case"includes":{t(o,RegExp(uo(b.value,i)),b.message,i);break}case"ip":{if(b.version!=="v6")bn(o,"ipv4",b.message,i);if(b.version!=="v4")bn(o,"ipv6",b.message,i);break}case"base64url":t(o,mn.base64url,b.message,i);break;case"jwt":t(o,mn.jwt,b.message,i);break;case"cidr":{if(b.version!=="v6")t(o,mn.ipv4Cidr,b.message,i);if(b.version!=="v4")t(o,mn.ipv6Cidr,b.message,i);break}case"emoji":t(o,mn.emoji(),b.message,i);break;case"ulid":{t(o,mn.ulid,b.message,i);break}case"base64":{switch(i.base64Strategy){case"format:binary":{bn(o,"binary",b.message,i);break}case"contentEncoding:base64":{N(o,"contentEncoding","base64",b.message,i);break}case"pattern:zod":{t(o,mn.base64,b.message,i);break}}break}case"nanoid":t(o,mn.nanoid,b.message,i);case"toLowerCase":case"toUpperCase":case"trim":break;default:((w)=>{})(b)}return o}function uo(n,i){return i.patternStrategy==="escape"?gl(n):n}var Fl=new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");function gl(n){let i="";for(let o=0;o<n.length;o++){if(!Fl.has(n[o]))i+="\\";i+=n[o]}return i}function bn(n,i,o,b){if(n.format||n.anyOf?.some((w)=>w.format)){if(!n.anyOf)n.anyOf=[];if(n.format){if(n.anyOf.push({format:n.format,...n.errorMessage&&b.errorMessages&&{errorMessage:{format:n.errorMessage.format}}}),delete n.format,n.errorMessage){if(delete n.errorMessage.format,Object.keys(n.errorMessage).length===0)delete n.errorMessage}}n.anyOf.push({format:i,...o&&b.errorMessages&&{errorMessage:{format:o}}})}else N(n,"format",i,o,b)}function t(n,i,o,b){if(n.pattern||n.allOf?.some((w)=>w.pattern)){if(!n.allOf)n.allOf=[];if(n.pattern){if(n.allOf.push({pattern:n.pattern,...n.errorMessage&&b.errorMessages&&{errorMessage:{pattern:n.errorMessage.pattern}}}),delete n.pattern,n.errorMessage){if(delete n.errorMessage.pattern,Object.keys(n.errorMessage).length===0)delete n.errorMessage}}n.allOf.push({pattern:T1(i,b),...o&&b.errorMessages&&{errorMessage:{pattern:o}}})}else N(n,"pattern",T1(i,b),o,b)}function T1(n,i){if(!i.applyRegexFlags||!n.flags)return n.source;let o={i:n.flags.includes("i"),m:n.flags.includes("m"),s:n.flags.includes("s")},b=o.i?n.source.toLowerCase():n.source,w="",l=!1,x=!1,$=!1;for(let v=0;v<b.length;v++){if(l){w+=b[v],l=!1;continue}if(o.i){if(x){if(b[v].match(/[a-z]/)){if($)w+=b[v],w+=`${b[v-2]}-${b[v]}`.toUpperCase(),$=!1;else if(b[v+1]==="-"&&b[v+2]?.match(/[a-z]/))w+=b[v],$=!0;else w+=`${b[v]}${b[v].toUpperCase()}`;continue}}else if(b[v].match(/[a-z]/)){w+=`[${b[v]}${b[v].toUpperCase()}]`;continue}}if(o.m){if(b[v]==="^"){w+=`(^|(?<=[\r
8
+ ]))`;continue}else if(b[v]==="$"){w+=`($|(?=[\r
9
+ ]))`;continue}}if(o.s&&b[v]==="."){w+=x?`${b[v]}\r
10
+ `:`[${b[v]}\r
11
+ ]`;continue}if(w+=b[v],b[v]==="\\")l=!0;else if(x&&b[v]==="]")x=!1;else if(!x&&b[v]==="[")x=!0}try{new RegExp(w)}catch{return console.warn(`Could not convert regex pattern at ${i.currentPath.join("/")} to a flag-independent form! Falling back to the flag-ignorant source`),n.source}return w}function ji(n,i){if(i.target==="openAi")console.warn("Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead.");if(i.target==="openApi3"&&n.keyType?._def.typeName===J.ZodEnum)return{type:"object",required:n.keyType._def.values,properties:n.keyType._def.values.reduce((b,w)=>({...b,[w]:j(n.valueType._def,{...i,currentPath:[...i.currentPath,"properties",w]})??U(i)}),{}),additionalProperties:i.rejectedAdditionalProperties};let o={type:"object",additionalProperties:j(n.valueType._def,{...i,currentPath:[...i.currentPath,"additionalProperties"]})??i.allowedAdditionalProperties};if(i.target==="openApi3")return o;if(n.keyType?._def.typeName===J.ZodString&&n.keyType._def.checks?.length){let{type:b,...w}=Ci(n.keyType._def,i);return{...o,propertyNames:w}}else if(n.keyType?._def.typeName===J.ZodEnum)return{...o,propertyNames:{enum:n.keyType._def.values}};else if(n.keyType?._def.typeName===J.ZodBranded&&n.keyType._def.type._def.typeName===J.ZodString&&n.keyType._def.type._def.checks?.length){let{type:b,...w}=Gi(n.keyType._def,i);return{...o,propertyNames:w}}return o}function t1(n,i){if(i.mapStrategy==="record")return ji(n,i);let o=j(n.keyType._def,{...i,currentPath:[...i.currentPath,"items","items","0"]})||U(i),b=j(n.valueType._def,{...i,currentPath:[...i.currentPath,"items","items","1"]})||U(i);return{type:"array",maxItems:125,items:{type:"array",items:[o,b],minItems:2,maxItems:2}}}function I1(n){let i=n.values,b=Object.keys(n.values).filter((l)=>{return typeof i[i[l]]!=="number"}).map((l)=>i[l]),w=Array.from(new Set(b.map((l)=>typeof l)));return{type:w.length===1?w[0]==="string"?"string":"number":["string","number"],enum:b}}function Z1(n){return n.target==="openAi"?void 0:{not:U({...n,currentPath:[...n.currentPath,"not"]})}}function z1(n){return n.target==="openApi3"?{enum:["null"],nullable:!0}:{type:"null"}}var T0={ZodString:"string",ZodNumber:"number",ZodBigInt:"integer",ZodBoolean:"boolean",ZodNull:"null"};function a1(n,i){if(i.target==="openApi3")return d1(n,i);let o=n.options instanceof Map?Array.from(n.options.values()):n.options;if(o.every((b)=>(b._def.typeName in T0)&&(!b._def.checks||!b._def.checks.length))){let b=o.reduce((w,l)=>{let x=T0[l._def.typeName];return x&&!w.includes(x)?[...w,x]:w},[]);return{type:b.length>1?b:b[0]}}else if(o.every((b)=>b._def.typeName==="ZodLiteral"&&!b.description)){let b=o.reduce((w,l)=>{let x=typeof l._def.value;switch(x){case"string":case"number":case"boolean":return[...w,x];case"bigint":return[...w,"integer"];case"object":if(l._def.value===null)return[...w,"null"];case"symbol":case"undefined":case"function":default:return w}},[]);if(b.length===o.length){let w=b.filter((l,x,$)=>$.indexOf(l)===x);return{type:w.length>1?w:w[0],enum:o.reduce((l,x)=>{return l.includes(x._def.value)?l:[...l,x._def.value]},[])}}}else if(o.every((b)=>b._def.typeName==="ZodEnum"))return{type:"string",enum:o.reduce((b,w)=>[...b,...w._def.values.filter((l)=>!b.includes(l))],[])};return d1(n,i)}var d1=(n,i)=>{let o=(n.options instanceof Map?Array.from(n.options.values()):n.options).map((b,w)=>j(b._def,{...i,currentPath:[...i.currentPath,"anyOf",`${w}`]})).filter((b)=>!!b&&(!i.strictUnions||typeof b==="object"&&Object.keys(b).length>0));return o.length?{anyOf:o}:void 0};function r1(n,i){if(["ZodString","ZodNumber","ZodBigInt","ZodBoolean","ZodNull"].includes(n.innerType._def.typeName)&&(!n.innerType._def.checks||!n.innerType._def.checks.length)){if(i.target==="openApi3")return{type:T0[n.innerType._def.typeName],nullable:!0};return{type:[T0[n.innerType._def.typeName],"null"]}}if(i.target==="openApi3"){let b=j(n.innerType._def,{...i,currentPath:[...i.currentPath]});if(b&&"$ref"in b)return{allOf:[b],nullable:!0};return b&&{...b,nullable:!0}}let o=j(n.innerType._def,{...i,currentPath:[...i.currentPath,"anyOf","0"]});return o&&{anyOf:[o,{type:"null"}]}}function e1(n,i){let o={type:"number"};if(!n.checks)return o;for(let b of n.checks)switch(b.kind){case"int":o.type="integer",Qo(o,"type",b.message,i);break;case"min":if(i.target==="jsonSchema7")if(b.inclusive)N(o,"minimum",b.value,b.message,i);else N(o,"exclusiveMinimum",b.value,b.message,i);else{if(!b.inclusive)o.exclusiveMinimum=!0;N(o,"minimum",b.value,b.message,i)}break;case"max":if(i.target==="jsonSchema7")if(b.inclusive)N(o,"maximum",b.value,b.message,i);else N(o,"exclusiveMaximum",b.value,b.message,i);else{if(!b.inclusive)o.exclusiveMaximum=!0;N(o,"maximum",b.value,b.message,i)}break;case"multipleOf":N(o,"multipleOf",b.value,b.message,i);break}return o}function s1(n,i){let o=i.target==="openAi",b={type:"object",properties:{}},w=[],l=n.shape();for(let $ in l){let v=l[$];if(v===void 0||v._def===void 0)continue;let H=yl(v);if(H&&o){if(v._def.typeName==="ZodOptional")v=v._def.innerType;if(!v.isNullable())v=v.nullable();H=!1}let _=j(v._def,{...i,currentPath:[...i.currentPath,"properties",$],propertyPath:[...i.currentPath,"properties",$]});if(_===void 0)continue;if(b.properties[$]=_,!H)w.push($)}if(w.length)b.required=w;let x=Pl(n,i);if(x!==void 0)b.additionalProperties=x;return b}function Pl(n,i){if(n.catchall._def.typeName!=="ZodNever")return j(n.catchall._def,{...i,currentPath:[...i.currentPath,"additionalProperties"]});switch(n.unknownKeys){case"passthrough":return i.allowedAdditionalProperties;case"strict":return i.rejectedAdditionalProperties;case"strip":return i.removeAdditionalStrategy==="strict"?i.allowedAdditionalProperties:i.rejectedAdditionalProperties}}function yl(n){try{return n.isOptional()}catch{return!0}}var n2=(n,i)=>{if(i.currentPath.toString()===i.propertyPath?.toString())return j(n.innerType._def,i);let o=j(n.innerType._def,{...i,currentPath:[...i.currentPath,"anyOf","1"]});return o?{anyOf:[{not:U(i)},o]}:U(i)};var i2=(n,i)=>{if(i.pipeStrategy==="input")return j(n.in._def,i);else if(i.pipeStrategy==="output")return j(n.out._def,i);let o=j(n.in._def,{...i,currentPath:[...i.currentPath,"allOf","0"]}),b=j(n.out._def,{...i,currentPath:[...i.currentPath,"allOf",o?"1":"0"]});return{allOf:[o,b].filter((w)=>w!==void 0)}};function o2(n,i){return j(n.type._def,i)}function m2(n,i){let b={type:"array",uniqueItems:!0,items:j(n.valueType._def,{...i,currentPath:[...i.currentPath,"items"]})};if(n.minSize)N(b,"minItems",n.minSize.value,n.minSize.message,i);if(n.maxSize)N(b,"maxItems",n.maxSize.value,n.maxSize.message,i);return b}function b2(n,i){if(n.rest)return{type:"array",minItems:n.items.length,items:n.items.map((o,b)=>j(o._def,{...i,currentPath:[...i.currentPath,"items",`${b}`]})).reduce((o,b)=>b===void 0?o:[...o,b],[]),additionalItems:j(n.rest._def,{...i,currentPath:[...i.currentPath,"additionalItems"]})};else return{type:"array",minItems:n.items.length,maxItems:n.items.length,items:n.items.map((o,b)=>j(o._def,{...i,currentPath:[...i.currentPath,"items",`${b}`]})).reduce((o,b)=>b===void 0?o:[...o,b],[])}}function w2(n){return{not:U(n)}}function l2(n){return U(n)}var x2=(n,i)=>{return j(n.innerType._def,i)};var $2=(n,i,o)=>{switch(i){case J.ZodString:return Ci(n,o);case J.ZodNumber:return e1(n,o);case J.ZodObject:return s1(n,o);case J.ZodBigInt:return S1(n,o);case J.ZodBoolean:return U1();case J.ZodDate:return Wo(n,o);case J.ZodUndefined:return w2(o);case J.ZodNull:return z1(o);case J.ZodArray:return E1(n,o);case J.ZodUnion:case J.ZodDiscriminatedUnion:return a1(n,o);case J.ZodIntersection:return P1(n,o);case J.ZodTuple:return b2(n,o);case J.ZodRecord:return ji(n,o);case J.ZodLiteral:return y1(n,o);case J.ZodEnum:return g1(n);case J.ZodNativeEnum:return I1(n);case J.ZodNullable:return r1(n,o);case J.ZodOptional:return n2(n,o);case J.ZodMap:return t1(n,o);case J.ZodSet:return m2(n,o);case J.ZodLazy:return()=>n.getter()._def;case J.ZodPromise:return o2(n,o);case J.ZodNaN:case J.ZodNever:return Z1(o);case J.ZodEffects:return F1(n,o);case J.ZodAny:return U(o);case J.ZodUnknown:return l2(o);case J.ZodDefault:return k1(n,o);case J.ZodBranded:return Gi(n,o);case J.ZodReadonly:return x2(n,o);case J.ZodCatch:return c1(n,o);case J.ZodPipeline:return i2(n,o);case J.ZodFunction:case J.ZodVoid:case J.ZodSymbol:return;default:return((b)=>{return})(i)}};function j(n,i,o=!1){let b=i.seen.get(n);if(i.override){let $=i.override?.(n,i,b,o);if($!==A1)return $}if(b&&!o){let $=Tl(b,i);if($!==void 0)return $}let w={def:n,path:i.currentPath,jsonSchema:void 0};i.seen.set(n,w);let l=$2(n,n.typeName,i),x=typeof l==="function"?j(l(),i):l;if(x)tl(n,i,x);if(i.postProcess){let $=i.postProcess(x,n,i);return w.jsonSchema=x,$}return w.jsonSchema=x,x}var Tl=(n,i)=>{switch(i.$refStrategy){case"root":return{$ref:n.path.join("/")};case"relative":return{$ref:Oi(i.currentPath,n.path)};case"none":case"seen":{if(n.path.length<i.currentPath.length&&n.path.every((o,b)=>i.currentPath[b]===o))return console.warn(`Recursive reference detected at ${i.currentPath.join("/")}! Defaulting to any`),U(i);return i.$refStrategy==="seen"?U(i):void 0}}},tl=(n,i,o)=>{if(n.description){if(o.description=n.description,i.markdownDescription)o.markdownDescription=n.description}return o};var Bi=(n,i)=>{let o=R1(i),b=typeof i==="object"&&i.definitions?Object.entries(i.definitions).reduce((v,[H,_])=>({...v,[H]:j(_._def,{...o,currentPath:[...o.basePath,o.definitionPath,H]},!0)??U(o)}),{}):void 0,w=typeof i==="string"?i:i?.nameStrategy==="title"?void 0:i?.name,l=j(n._def,w===void 0?o:{...o,currentPath:[...o.basePath,o.definitionPath,w]},!1)??U(o),x=typeof i==="object"&&i.name!==void 0&&i.nameStrategy==="title"?i.name:void 0;if(x!==void 0)l.title=x;if(o.flags.hasReferencedOpenAiAnyType){if(!b)b={};if(!b[o.openAiAnyTypeName])b[o.openAiAnyTypeName]={type:["string","number","integer","boolean","array","null"],items:{$ref:o.$refStrategy==="relative"?"1":[...o.basePath,o.definitionPath,o.openAiAnyTypeName].join("/")}}}let $=w===void 0?b?{...l,[o.definitionPath]:b}:l:{$ref:[...o.$refStrategy==="relative"?[]:o.basePath,o.definitionPath,w].join("/"),[o.definitionPath]:{...b,[w]:l}};if(o.target==="jsonSchema7")$.$schema="http://json-schema.org/draft-07/schema#";else if(o.target==="jsonSchema2019-09"||o.target==="openAi")$.$schema="https://json-schema.org/draft/2019-09/schema#";if(o.target==="openAi"&&(("anyOf"in $)||("oneOf"in $)||("allOf"in $)||("type"in $)&&Array.isArray($.type)))console.warn("Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property.");return $};wn();function v2(n){return{name:n.name,description:n.description,category:n.category,pluginName:n.pluginName,sideEffects:n.sideEffects,timeout:n.timeout??30000,parameters:Bi(n.parameters,{target:"jsonSchema7"}),returns:Bi(n.returns,{target:"jsonSchema7"}),examples:n.examples}}function H2(n){return{version:R,totalCommands:n.length,commands:n.map((i)=>({name:i.name,description:i.description,category:i.category,pluginName:i.pluginName,sideEffects:i.sideEffects}))}}var al={C5BA0B7D310E45E68077A0D100F830EA:["crm.wechat.","weixiaozhu."]},rl=["crm.wechat.","weixiaozhu."];function _2(n){let i=n?.trim();if(!i)return rl;return al[i]??[]}function Oo(n,i){return _2(i).some((o)=>n.startsWith(o))}function Vi(n,i){if(_2(i).length===0)return[...n];return n.filter((o)=>!Oo(o.name,i))}function p2(n,i=()=>{return}){return{name:"builtin:schema",version:"1.0.0",commands:[{name:"schema",description:"List all available commands with their descriptions and categories",category:"introspection",pluginName:"builtin:schema",parameters:m.object({}),returns:m.unknown(),examples:[{description:"List all commands",input:{},output:{version:"1.0.0",totalCommands:3,commands:[]}}],sideEffects:["none"],handler:async()=>{let o=n();return H2(Vi(o.getAllVisible(),i()))}},{name:"schema.detail",description:"Get detailed JSON Schema for a specific command including parameters, returns, examples, and side effects",category:"introspection",pluginName:"builtin:schema",parameters:m.object({command:m.string().describe("The command name to get schema for")}),returns:m.unknown(),examples:[{description:"Get schema for schema.detail command",input:{command:"schema.detail"},output:{name:"schema.detail",parameters:{},returns:{}}}],sideEffects:["none"],handler:async({command:o})=>{let w=n().get(o);if(!w)throw new $0(o);if(Oo(w.name,i()))throw new $0(o);return v2(w)}}]}}wn();function J2(n,i=()=>{return}){return{name:"builtin:help",version:"1.0.0",commands:[{name:"help",description:"Show structured help information about YunkeCLI and available commands",category:"introspection",pluginName:"builtin:help",parameters:m.object({}),returns:m.unknown(),examples:[{description:"Get help",input:{},output:{name:"yunke-cli",version:"1.0.0",commands:[]}}],sideEffects:["none"],handler:async()=>{let o=n(),b=Vi(o.getAllVisible(),i()),w=[...new Set(b.map((l)=>l.category))];return{name:"yunke-cli",version:R,description:"AI-native pluggable CLI framework",usage:"yunke <command> [--option value]",globalOptions:[{name:"--help",description:"Show this help message"}],categories:w.map((l)=>({name:l,commands:b.filter((x)=>x.category===l).map((x)=>({name:x.name,description:x.description}))})),tips:["Use 'yunke schema' to get machine-readable command catalog","Use 'yunke schema.detail --command <name>' to get full JSON Schema for a command"]}}}]}}import{existsSync as el,realpathSync as sl}from"node:fs";import{extname as n3}from"node:path";function X2(){return{name:"builtin:plugin-manager",version:"1.0.0",commands:[{name:"plugin.list",description:"List all installed plugins with their status",category:"plugin-management",pluginName:"builtin:plugin-manager",parameters:m.object({}),returns:m.unknown(),examples:[{description:"List plugins",input:{},output:{plugins:[]}}],sideEffects:["filesystem"],handler:async()=>{return{plugins:en().plugins}}},{name:"plugin.install",description:"Install a plugin from a file system path",category:"plugin-management",pluginName:"builtin:plugin-manager",parameters:m.object({path:m.string().describe("Absolute path to the plugin file (.js or .ts)"),name:m.string().optional().describe("Override plugin name")}),returns:m.unknown(),examples:[{description:"Install a plugin",input:{path:"/path/to/my-plugin.js"},output:{installed:!0,name:"my-plugin"}}],sideEffects:["filesystem"],handler:async({path:n,name:i})=>{if(!el(n))throw new M("CONFIG_ERROR",`Plugin file not found: ${n}`);let o=sl(n),b=[".js",".mjs",".cjs"],w=n3(o);if(!b.includes(w))throw new M("CONFIG_ERROR",`Unsupported plugin file extension '${w}'. Allowed: ${b.join(", ")}`);let l=await import(o),x=l.default??l;if(!x||typeof x!=="object"||!x.name)throw new M("INVALID_PLUGIN","Plugin must export an object with a name field");let $=i??x.name;return V1({name:$,path:o,enabled:!0}),{installed:!0,name:$,path:o}}},{name:"plugin.remove",description:"Remove an installed plugin",category:"plugin-management",pluginName:"builtin:plugin-manager",parameters:m.object({name:m.string().describe("Plugin name to remove")}),returns:m.unknown(),examples:[{description:"Remove a plugin",input:{name:"my-plugin"},output:{removed:!0}}],sideEffects:["filesystem"],handler:async({name:n})=>{if(!h1(n))throw new M("CONFIG_ERROR",`Plugin '${n}' not found`);return{removed:!0,name:n}}},{name:"plugin.enable",description:"Enable a disabled plugin",category:"plugin-management",pluginName:"builtin:plugin-manager",parameters:m.object({name:m.string().describe("Plugin name to enable")}),returns:m.unknown(),examples:[{description:"Enable a plugin",input:{name:"my-plugin"},output:{enabled:!0}}],sideEffects:["filesystem"],handler:async({name:n})=>{if(!po(n,!0))throw new M("CONFIG_ERROR",`Plugin '${n}' not found`);return{enabled:!0,name:n}}},{name:"plugin.disable",description:"Disable a plugin without removing it",category:"plugin-management",pluginName:"builtin:plugin-manager",parameters:m.object({name:m.string().describe("Plugin name to disable")}),returns:m.unknown(),examples:[{description:"Disable a plugin",input:{name:"my-plugin"},output:{disabled:!0}}],sideEffects:["filesystem"],handler:async({name:n})=>{if(!po(n,!1))throw new M("CONFIG_ERROR",`Plugin '${n}' not found`);return{disabled:!0,name:n}}}]}}function Y2(){return{name:"builtin:feature-manager",version:"1.0.0",commands:[{name:"feature.list",description:"List all available feature flags and their current status",category:"feature-management",pluginName:"builtin:feature-manager",parameters:m.object({}),returns:m.unknown(),examples:[{description:"List features",input:{},output:{features:[]}}],sideEffects:["filesystem"],handler:async()=>{let n=Mi();return{features:Object.entries(n.features).map(([o,b])=>({name:o,enabled:b,default:Gn[o]??!1}))}}},{name:"feature.enable",description:"Enable an optional feature (takes effect on next run)",category:"feature-management",pluginName:"builtin:feature-manager",parameters:m.object({name:m.string().describe('Feature flag name, e.g. "agenphone"')}),returns:m.unknown(),examples:[{description:"Enable agenphone",input:{name:"agenphone"},output:{enabled:!0}}],sideEffects:["filesystem"],handler:async({name:n})=>{if(!(n in Gn))throw new M("CONFIG_ERROR",`Unknown feature flag: '${n}'. Available: ${Object.keys(Gn).join(", ")}`);return Yo(n,!0),{enabled:!0,name:n,note:"Restart yunke-cli for changes to take effect"}}},{name:"feature.disable",description:"Disable an optional feature (takes effect on next run)",category:"feature-management",pluginName:"builtin:feature-manager",parameters:m.object({name:m.string().describe('Feature flag name, e.g. "agenphone"')}),returns:m.unknown(),examples:[{description:"Disable agenphone",input:{name:"agenphone"},output:{disabled:!0}}],sideEffects:["filesystem"],handler:async({name:n})=>{if(!(n in Gn))throw new M("CONFIG_ERROR",`Unknown feature flag: '${n}'. Available: ${Object.keys(Gn).join(", ")}`);return Yo(n,!1),{disabled:!0,name:n,note:"Restart yunke-cli for changes to take effect"}}}]}}import{readFileSync as i3,writeFileSync as o3,mkdirSync as m3,existsSync as Q2}from"node:fs";import{homedir as b3}from"node:os";import{join as W2}from"node:path";var Go=process.env.YUNKE_CONFIG_DIR??W2(b3(),".yunke"),Co=W2(Go,"agenphone.json");function t0(){if(!Q2(Co))return null;try{let n=i3(Co,"utf-8");return JSON.parse(n)}catch{return null}}function w3(n){if(!Q2(Go))m3(Go,{recursive:!0});o3(Co,JSON.stringify(n,null,2),"utf-8")}function jo(n){let i=t0()??{access_token:"",expires_at:"",device_id:""};w3({...i,...n})}function q2(n){let i=new Date(n.expires_at).getTime(),o=Date.now(),b=300000;return o>=i-300000}function l3(n=process.env.YUNKE_API_BASE_URL){let i=n?.replace(/\/$/,"");return i&&i.length>0?i:"https://agenphone-api.yunke.ai"}var sn=l3();var x3=["pending","sent","success","failed","timeout"];function A(n){return m.object({request_id:m.string(),status:m.enum(x3),action:m.string(),device_id:m.string(),task_id:m.string().nullable(),response:n.nullable(),error:m.string().nullable(),sent_at:m.string(),completed_at:m.string().nullable()})}var h=A(m.null());function $3(){let n=t0();if(!n?.access_token)throw new M("CONFIG_ERROR","未登录,请先运行 'yunke agenphone.auth.login' 登录");if(q2(n))throw new M("CONFIG_ERROR","登录已过期,请重新运行 'yunke agenphone.auth.login' 登录");return n.access_token}async function hi(n,i={}){let o=$3(),b=`${sn}${n}`,w={"Content-Type":"application/json",Authorization:`Bearer ${o}`,...i.headers??{}},l=await fetch(b,{...i,headers:w});if(l.status===401)throw new M("CONFIG_ERROR","认证失败,请重新运行 'yunke agenphone.auth.login' 登录");if(!l.ok){let $=`HTTP ${l.status}`;try{let v=await l.json();if(v.message)$=v.message}catch{}throw new M("EXECUTION_FAILED",`AgenPhone API 错误: ${$}`)}return(await l.json()).data}async function Bo(n,i={}){let o=`${sn}${n}`,b={"Content-Type":"application/json",...i.headers??{}},w=await fetch(o,{...i,headers:b});if(!w.ok){let x=`HTTP ${w.status}`;try{let $=await w.json();if($.message)x=$.message}catch{}throw new M("EXECUTION_FAILED",`AgenPhone API 错误: ${x}`)}return(await w.json()).data}async function q(n,i,o){return hi("/api/v1/common/execute",{method:"POST",body:JSON.stringify({action:n,params:i??null,task_id:o??null})})}var Vo="agenphone";function v3(){let n=t0();if(!n?.device_id)throw new M("CONFIG_ERROR","设备 ID 未配置,请先运行 'yunke agenphone.auth.setup --device_id <id>' 设置设备 ID");return n.device_id}var u2={name:"agenphone.auth.setup",description:"Initialize AgenPhone config: Run this once before any other agenphone commands.",category:"agenphone",pluginName:Vo,parameters:m.object({device_id:m.string().min(1).describe("Target device ID to control, e.g. dev_abc12345")}),returns:m.object({device_id:m.string(),saved:m.boolean()}),examples:[{description:"Setup AgenPhone",input:{device_id:"dev_abc12345"},output:{device_id:"dev_abc12345",saved:!0}}],sideEffects:["filesystem"],handler:async({device_id:n})=>{return jo({device_id:n}),{device_id:n,saved:!0}}},M2={name:"agenphone.auth.send-code",description:'Send SMS verification code to phone number for AgenPhone login. Requires agenphone.auth.setup to be run first. Returns both `token` and `sms_id` (same value); use `sms_id` if your agent redacts fields named "token", and pass the value as-is to agenphone.auth.login --token <sms_id>.',category:"agenphone",pluginName:Vo,parameters:m.object({phone_number:m.string().describe("Chinese mobile phone number (11 digits)")}),returns:m.object({token:m.string().describe('SMS session token; may be redacted by agents that mask "token" fields'),sms_id:m.string().describe("Same value as `token`, exposed under a non-redacted name as a workaround for agent token masking")}),examples:[{description:"Send verification code",input:{phone_number:"13800138000"},output:{token:"sms_token_xxx",sms_id:"sms_token_xxx"}}],sideEffects:["network"],handler:async({phone_number:n})=>{let i=await Bo("/api/v1/sms/send",{method:"POST",body:JSON.stringify({phone_number:n})});return{token:i.token,sms_id:i.token}}},O2={name:"agenphone.auth.login",description:"Login to AgenPhone with SMS verification code. Reads device_id from config (set via agenphone.auth.setup). Saves JWT token to ~/.yunke/agenphone.json.",category:"agenphone",pluginName:Vo,parameters:m.object({token:m.string().describe("SMS token returned by agenphone.auth.send-code"),code:m.string().length(6).describe("6-digit SMS verification code")}),returns:m.object({success:m.boolean(),device_id:m.string(),expires_in:m.number()}),examples:[{description:"Login with SMS code",input:{token:"sms_token",code:"123456"},output:{success:!0,device_id:"dev_abc12345",expires_in:2592000}}],sideEffects:["filesystem","network"],handler:async({token:n,code:i})=>{let o=v3(),b=await Bo("/api/v1/auth/cli-login",{method:"POST",body:JSON.stringify({token:n,code:i,device_id:o})}),w=new Date(Date.now()+b.expires_in*1000).toISOString();return jo({access_token:b.access_token,expires_at:w,device_id:b.device_id}),{success:!0,device_id:b.device_id,expires_in:b.expires_in}}};var n0="agenphone",G2={name:"agenphone.app.open",description:"Open an app by package name or URL. On success response is null.",category:"agenphone",pluginName:n0,parameters:m.object({package_name:m.string().min(1).optional().describe("Android package name, e.g. com.tencent.mm"),url:m.string().optional().describe("URL scheme to open")}),returns:h,examples:[{description:"Open WeChat",input:{package_name:"com.tencent.mm"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>q("open_app",n)},C2={name:"agenphone.app.list-packages",description:"List installed apps. Use thirdPartyOnly=true to skip system apps. response.packages contains the list.",category:"agenphone",pluginName:n0,parameters:m.object({thirdPartyOnly:m.boolean().optional().describe("Only return third-party apps, default false"),includeVersions:m.boolean().optional().describe("Include version_name and version_code, default false")}),returns:A(m.object({packages:m.array(m.object({package_name:m.string(),app_name:m.string(),version_name:m.string().optional(),version_code:m.number().int().optional()}))})),examples:[{description:"List packages",input:{},output:{status:"success",response:{packages:[{package_name:"com.tencent.mm",app_name:"WeChat"}]},error:null}}],sideEffects:["network"],handler:async(n)=>q("list_packages",n)},j2={name:"agenphone.app.foreground",description:"Get the package name and class name of the currently visible foreground app.",category:"agenphone",pluginName:n0,parameters:m.object({}),returns:A(m.object({foreground_package:m.string(),foreground_className:m.string()})),examples:[{description:"Get foreground app",input:{},output:{status:"success",response:{foreground_package:"com.tencent.mm",foreground_className:"com.tencent.mm.MainActivity"},error:null}}],sideEffects:["network"],handler:async()=>q("get_foreground_app")},B2={name:"agenphone.app.info",description:"Get version and name info for a specific installed app.",category:"agenphone",pluginName:n0,parameters:m.object({package_name:m.string().min(1).describe("App package name")}),returns:A(m.object({package_name:m.string(),app_name:m.string(),version_name:m.string(),version_code:m.number().int()})),examples:[{description:"Get WeChat info",input:{package_name:"com.tencent.mm"},output:{status:"success",response:{package_name:"com.tencent.mm",app_name:"WeChat",version_name:"8.0",version_code:800},error:null}}],sideEffects:["network"],handler:async(n)=>q("get_app_info",n)},V2={name:"agenphone.app.force-stop",description:"Force stop a running app. Requires EnterpriseProvider or root. On success response is null.",category:"agenphone",pluginName:n0,parameters:m.object({package_name:m.string().min(1).describe("App package name to force stop")}),returns:h,examples:[{description:"Force stop WeChat",input:{package_name:"com.tencent.mm"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>q("force_stop_app",n)},h2={name:"agenphone.app.uninstall",description:"Silently uninstall an app. Requires EnterpriseProvider or root. On success response is null.",category:"agenphone",pluginName:n0,parameters:m.object({package_name:m.string().min(1).describe("App package name to uninstall")}),returns:h,examples:[{description:"Uninstall app",input:{package_name:"com.example.app"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>q("uninstall_app",n)},f2={name:"agenphone.app.clear-data",description:"Clear all data and cache for an app. Requires EnterpriseProvider or root. On success response is null.",category:"agenphone",pluginName:n0,parameters:m.object({package_name:m.string().min(1).describe("App package name to clear data for")}),returns:h,examples:[{description:"Clear WeChat data",input:{package_name:"com.tencent.mm"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>q("clear_app_data",n)};var En="agenphone",L2={name:"agenphone.comm.call",description:"Initiate a phone call. On success response is null.",category:"agenphone",pluginName:En,parameters:m.object({phone_number:m.string().describe("Phone number to call")}),returns:h,examples:[{description:"Call a number",input:{phone_number:"13800138000"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>q("call",n)},K2={name:"agenphone.comm.hang-up",description:"Hang up the current phone call. On success response is null.",category:"agenphone",pluginName:En,parameters:m.object({}),returns:h,examples:[{description:"Hang up call",input:{},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async()=>q("hang_up")},D2={name:"agenphone.comm.answer",description:"Answer an incoming phone call. On success response is null.",category:"agenphone",pluginName:En,parameters:m.object({}),returns:h,examples:[{description:"Answer call",input:{},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async()=>q("answer_call")},A2={name:"agenphone.comm.list-contacts",description:"List contacts (requires READ_CONTACTS). response.contact_list contains entries with id, display_name, numbers.",category:"agenphone",pluginName:En,parameters:m.object({limit:m.number().int().positive().optional().describe("Max results to return, default 50"),offset:m.number().int().min(0).optional().describe("Skip N entries, default 0")}),returns:A(m.object({contact_list:m.array(m.object({id:m.string(),display_name:m.string(),numbers:m.array(m.string())}))})),examples:[{description:"List contacts",input:{},output:{status:"success",response:{contact_list:[{id:"1",display_name:"Alice",numbers:["13800138000"]}]},error:null}}],sideEffects:["network"],handler:async(n)=>q("list_contacts",n)},N2={name:"agenphone.comm.search-contacts",description:"Search contacts by name or number. response.contacts contains matches.",category:"agenphone",pluginName:En,parameters:m.object({name:m.string().optional().describe("Fuzzy match on display name"),number:m.string().optional().describe("Filter by having this number"),limit:m.number().int().positive().optional().describe("Max results, default 20")}),returns:A(m.object({contacts:m.array(m.object({id:m.string(),display_name:m.string()}))})),examples:[{description:"Search by name",input:{name:"Alice"},output:{status:"success",response:{contacts:[{id:"1",display_name:"Alice"}]},error:null}}],sideEffects:["network"],handler:async(n)=>q("search_contacts",n)},R2={name:"agenphone.comm.list-call-log",description:"List recent call log (requires READ_CALL_LOG). response.call_log contains entries with number, type_name (incoming/outgoing/missed), date (ms), duration (s).",category:"agenphone",pluginName:En,parameters:m.object({limit:m.number().int().positive().optional().describe("Max results, default 50"),offset:m.number().int().min(0).optional().describe("Skip N entries, default 0")}),returns:A(m.object({call_log:m.array(m.object({number:m.string(),type:m.number().int(),type_name:m.enum(["incoming","outgoing","missed"]),date:m.number(),duration:m.number().int(),name:m.string().optional()}))})),examples:[{description:"List call log",input:{},output:{status:"success",response:{call_log:[{number:"10086",type:1,type_name:"incoming",date:1709123456789,duration:120}]},error:null}}],sideEffects:["network"],handler:async(n)=>q("list_call_log",n)},E2={name:"agenphone.comm.send-sms",description:"Send an SMS message. On success response is null.",category:"agenphone",pluginName:En,parameters:m.object({phone_number:m.string().describe("Recipient phone number"),message:m.string().min(1).describe("SMS message content")}),returns:h,examples:[{description:"Send SMS",input:{phone_number:"13800138000",message:"Hello"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>q("send_sms",n)},S2={name:"agenphone.comm.read-sms",description:"Read SMS inbox (requires READ_SMS). response.sms_list contains entries with address, body, date (ms).",category:"agenphone",pluginName:En,parameters:m.object({limit:m.number().int().positive().optional().describe("Max results, default 50"),offset:m.number().int().min(0).optional().describe("Skip N entries, default 0")}),returns:A(m.object({sms_list:m.array(m.object({address:m.string(),body:m.string(),date:m.number()}))})),examples:[{description:"Read SMS",input:{},output:{status:"success",response:{sms_list:[{address:"10086",body:"余额10元",date:1709123456789}]},error:null}}],sideEffects:["network"],handler:async(n)=>q("read_sms",n)};var z="agenphone",U2={name:"agenphone.screen.tap",description:"Tap a coordinate on the screen. Requires accessibility or root. On success response is null.",category:"agenphone",pluginName:z,parameters:m.object({x:m.number().int().describe("X coordinate in pixels"),y:m.number().int().describe("Y coordinate in pixels")}),returns:h,examples:[{description:"Tap center",input:{x:540,y:960},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>q("tap",n)},c2={name:"agenphone.screen.swipe",description:"Swipe from one coordinate to another. On success response is null.",category:"agenphone",pluginName:z,parameters:m.object({start_x:m.number().int().describe("Start X coordinate"),start_y:m.number().int().describe("Start Y coordinate"),end_x:m.number().int().describe("End X coordinate"),end_y:m.number().int().describe("End Y coordinate"),duration:m.number().int().positive().optional().describe("Swipe duration in ms, default 300")}),returns:h,examples:[{description:"Swipe up",input:{start_x:540,start_y:1500,end_x:540,end_y:500},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>q("swipe",n)},k2={name:"agenphone.screen.drag",description:"Long-press drag from one position to another. On success response is null.",category:"agenphone",pluginName:z,parameters:m.object({start_x:m.number().int().describe("Start X coordinate"),start_y:m.number().int().describe("Start Y coordinate"),end_x:m.number().int().describe("End X coordinate"),end_y:m.number().int().describe("End Y coordinate"),duration:m.number().int().positive().optional().describe("Drag duration in ms, default 400")}),returns:h,examples:[{description:"Drag element",input:{start_x:100,start_y:200,end_x:300,end_y:400},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>q("drag",n)},F2={name:"agenphone.screen.input",description:"Tap a coordinate then input text into that field. Requires accessibility or root. On success response is null.",category:"agenphone",pluginName:z,parameters:m.object({text:m.string().min(1).describe("Text to input"),x:m.number().int().optional().describe("X coordinate to tap first for focus"),y:m.number().int().optional().describe("Y coordinate to tap first for focus")}),returns:h,examples:[{description:"Type text",input:{text:"hello world",x:540,y:500},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>q("input_text",n)},g2={name:"agenphone.screen.long-press",description:"Long press at a coordinate. On success response is null.",category:"agenphone",pluginName:z,parameters:m.object({x:m.number().int().describe("X coordinate"),y:m.number().int().describe("Y coordinate"),duration:m.number().int().positive().optional().describe("Long press duration in ms, default 1500")}),returns:h,examples:[{description:"Long press",input:{x:540,y:960},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>q("long_press",n)},P2={name:"agenphone.screen.global-action",description:"Perform a system global action via accessibility. On success response is null.",category:"agenphone",pluginName:z,parameters:m.object({action:m.enum(["back","home","recents"]).describe("System action: back=go back, home=go to home screen, recents=open recent apps")}),returns:h,examples:[{description:"Press home",input:{action:"home"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>q("global_action",n)},y2={name:"agenphone.screen.screenshot",description:"Take a screenshot. Returns an OSS image URL (not base64). Use this to visually inspect the current screen state.",category:"agenphone",pluginName:z,parameters:m.object({}),returns:m.object({image_url:m.string().url().describe("Screenshot image URL (hosted on OSS)"),width:m.number().int().describe("Image width in pixels"),height:m.number().int().describe("Image height in pixels")}),examples:[{description:"Take screenshot",input:{},output:{image_url:"https://oss.example.com/xxx.png",width:1080,height:1920}}],sideEffects:["network"],handler:async()=>hi("/api/v1/device/screenshot",{method:"POST",body:JSON.stringify({})})},T2={name:"agenphone.screen.ui-tree",description:"Get the accessibility node tree of the current screen. Requires accessibility service enabled. response.hierarchy is the full UI tree.",category:"agenphone",pluginName:z,parameters:m.object({}),returns:A(m.object({hierarchy:m.record(m.unknown())})),examples:[{description:"Get UI tree",input:{},output:{status:"success",response:{hierarchy:{}},error:null}}],sideEffects:["network"],handler:async()=>q("get_screen_hierarchy")},t2={name:"agenphone.screen.find-element",description:"Find a UI element by text or view_id. response.found indicates if found; response.center_x/center_y give the tap coordinates.",category:"agenphone",pluginName:z,parameters:m.object({text:m.string().optional().describe("Element visible text to find"),view_id:m.string().optional().describe("Element resource view ID"),class_name:m.string().optional().describe("Limit to a specific widget class")}),returns:A(m.object({found:m.boolean(),center_x:m.number().optional(),center_y:m.number().optional()})),examples:[{description:"Find by text",input:{text:"登录"},output:{status:"success",response:{found:!0,center_x:540,center_y:960},error:null}}],sideEffects:["network"],handler:async(n)=>q("find_element",n)},I2={name:"agenphone.screen.click-by-text",description:"Find a UI element by its visible text and click it. On success response is null.",category:"agenphone",pluginName:z,parameters:m.object({text:m.string().min(1).describe("Visible text of the element to click")}),returns:h,examples:[{description:"Click login button",input:{text:"登录"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>q("click_by_text",n)},Z2={name:"agenphone.screen.click-by-id",description:"Find a UI element by its resource view_id and click it. On success response is null.",category:"agenphone",pluginName:z,parameters:m.object({view_id:m.string().min(1).describe("Resource ID, e.g. com.example:id/btn_login")}),returns:h,examples:[{description:"Click by ID",input:{view_id:"com.example:id/btn_login"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>q("click_by_view_id",n)},z2={name:"agenphone.screen.unlock",description:"Wake the screen and attempt to dismiss the lock screen. response.screen_woken indicates wake success; response.keyguard_dismissed indicates lock dismissed (may be false on Android 8+).",category:"agenphone",pluginName:z,parameters:m.object({}),returns:A(m.object({screen_woken:m.boolean(),keyguard_dismissed:m.boolean()})),examples:[{description:"Unlock screen",input:{},output:{status:"success",response:{screen_woken:!0,keyguard_dismissed:!1},error:null}}],sideEffects:["network"],handler:async()=>q("unlock_device")},d2={name:"agenphone.screen.set-brightness",description:"Set screen brightness (requires WRITE_SETTINGS). response.brightness is the applied value.",category:"agenphone",pluginName:z,parameters:m.object({brightness:m.number().int().min(0).max(255).describe("Brightness level 0–255")}),returns:A(m.object({brightness:m.number().int()})),examples:[{description:"Set brightness to 128",input:{brightness:128},output:{status:"success",response:{brightness:128},error:null}}],sideEffects:["network"],handler:async(n)=>q("set_brightness",n)},a2={name:"agenphone.screen.gui-analyze",description:"Analyze a screenshot with the Doubao vision model and return the suggested next action. Does NOT execute the action — use tap/swipe/input/etc to execute. "+"Returns { thought, action_raw, action } where action.type ∈ {click, long_press, type, scroll, drag, open_app, press_home, press_back, hotkey, wait, finished, left_double, right_single, unknown}. "+"Coordinate actions carry x/y; type carries content; scroll carries x/y/direction; drag carries start_x/start_y/end_x/end_y; hotkey carries key; open_app carries package_name; finished carries content.",category:"agenphone",pluginName:z,parameters:m.object({instruction:m.string().min(1).describe('Task instruction, e.g. "打开微信并给张三发消息"'),image_url:m.string().url().describe("Screenshot URL (OSS/HTTPS). Get one from agenphone.screen.screenshot first."),img_width:m.number().int().positive().describe("Screenshot width in pixels (pass `width` from agenphone.screen.screenshot)"),img_height:m.number().int().positive().describe("Screenshot height in pixels (pass `height` from agenphone.screen.screenshot)"),platform:m.enum(["phone","computer"]).optional().describe("GUI scene, default phone"),language:m.string().min(1).optional().describe("Language used in Thought, default Chinese"),history:m.array(m.object({role:m.enum(["user","assistant"]),content:m.unknown()})).optional().describe("Prior turns for multi-turn analysis")}),returns:m.object({thought:m.string().describe("Model reasoning / plan for the next step"),action_raw:m.string().describe("Raw model action string before parsing"),action:m.record(m.unknown()).describe("Parsed action. Always has `type`. See command description for type-specific fields.")}),examples:[{description:"Analyze a phone screenshot",input:{instruction:"打开微信",image_url:"https://oss.example.com/xxx.png",img_width:1080,img_height:1920},output:{thought:"我需要点击微信图标",action_raw:"click(point='<point>300 500</point>')",action:{type:"click",x:324,y:960}}}],sideEffects:["network"],handler:async(n)=>hi("/api/v1/device/gui-analyze",{method:"POST",body:JSON.stringify(n)})};var Yn="agenphone",r2={name:"agenphone.device.status",description:"Get screen on/off status. response.screen_on: 0=screen on, 1=screen off.",category:"agenphone",pluginName:Yn,parameters:m.object({}),returns:A(m.object({screen_on:m.number().int().describe("0=screen on, 1=screen off")})),examples:[{description:"Get status",input:{},output:{status:"success",response:{screen_on:0},error:null}}],sideEffects:["network"],handler:async()=>q("get_status")},e2={name:"agenphone.device.info",description:"Get comprehensive device info. response contains model, manufacturer, sdk, battery_level, battery_charging, network_type, wifi_connected, storage_total_mb, storage_available_mb, memory_total_mb, memory_available_mb, screen_brightness, locale, foreground_package, etc.",category:"agenphone",pluginName:Yn,parameters:m.object({}),returns:A(m.object({model:m.string(),manufacturer:m.string(),sdk:m.number().int(),release:m.string(),battery_level:m.number().int(),battery_charging:m.boolean(),network_type:m.string(),wifi_connected:m.boolean(),mobile_connected:m.boolean(),storage_total_mb:m.number(),storage_available_mb:m.number(),memory_total_mb:m.number(),memory_available_mb:m.number(),screen_rotation:m.number().int(),screen_orientation:m.string(),foreground_package:m.string(),foreground_className:m.string(),screen_brightness:m.number().int(),language:m.string(),language_country:m.string(),locale:m.string(),imei:m.string().optional()})),examples:[{description:"Get device info",input:{},output:{status:"success",response:{model:"Pixel 6",manufacturer:"Google",sdk:33,release:"13",battery_level:85,battery_charging:!1,network_type:"wifi",wifi_connected:!0,mobile_connected:!1,storage_total_mb:128000,storage_available_mb:64000,memory_total_mb:8192,memory_available_mb:2048,screen_rotation:0,screen_orientation:"portrait",foreground_package:"com.android.chrome",foreground_className:"...",screen_brightness:128,language:"zh",language_country:"CN",locale:"zh-CN"},error:null}}],sideEffects:["network"],handler:async()=>q("get_device_info")},s2={name:"agenphone.device.battery",description:"Get battery level and charging status. response.battery_level is 0–100; response.battery_charging is true when charging.",category:"agenphone",pluginName:Yn,parameters:m.object({}),returns:A(m.object({battery_level:m.number().int(),battery_charging:m.boolean()})),examples:[{description:"Get battery",input:{},output:{status:"success",response:{battery_level:85,battery_charging:!1},error:null}}],sideEffects:["network"],handler:async()=>q("get_battery")},nm={name:"agenphone.device.volume",description:"Get current volume levels. response contains media_volume, media_max, alarm_volume, ring_volume.",category:"agenphone",pluginName:Yn,parameters:m.object({}),returns:A(m.object({media_volume:m.number().int(),media_max:m.number().int(),alarm_volume:m.number().int(),ring_volume:m.number().int()})),examples:[{description:"Get volume",input:{},output:{status:"success",response:{media_volume:10,media_max:15,alarm_volume:5,ring_volume:8},error:null}}],sideEffects:["network"],handler:async()=>q("get_volume")},im={name:"agenphone.device.location",description:"Get last known GPS location (requires ACCESS_FINE_LOCATION). response.latitude and response.longitude are decimal degrees.",category:"agenphone",pluginName:Yn,parameters:m.object({}),returns:A(m.object({latitude:m.number(),longitude:m.number()})),examples:[{description:"Get location",input:{},output:{status:"success",response:{latitude:39.9042,longitude:116.4074},error:null}}],sideEffects:["network"],handler:async()=>q("get_location")},om={name:"agenphone.device.lock-status",description:"Get screen and lock status. response.lock_type: none/pattern/pin/password/unknown.",category:"agenphone",pluginName:Yn,parameters:m.object({}),returns:A(m.object({screen_on:m.boolean(),is_locked:m.boolean(),lock_type:m.enum(["none","pattern","pin","password","unknown"])})),examples:[{description:"Get lock status",input:{},output:{status:"success",response:{screen_on:!0,is_locked:!0,lock_type:"pattern"},error:null}}],sideEffects:["network"],handler:async()=>q("get_lock_status")},mm={name:"agenphone.device.reboot",description:"Reboot the device. Requires root or EnterpriseProvider. On success response is null.",category:"agenphone",pluginName:Yn,parameters:m.object({}),returns:h,examples:[{description:"Reboot",input:{},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async()=>q("reboot")},bm={name:"agenphone.device.shutdown",description:"Shut down the device. Requires root or EnterpriseProvider. On success response is null.",category:"agenphone",pluginName:Yn,parameters:m.object({}),returns:h,examples:[{description:"Shutdown",input:{},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async()=>q("shutdown")},wm={name:"agenphone.device.set-volume",description:"Set volume for an audio stream. level must be 0 to the stream max (see agenphone.device.volume). On success response is null.",category:"agenphone",pluginName:Yn,parameters:m.object({stream:m.enum(["media","alarm","ring"]).optional().describe("Audio stream, default media"),level:m.number().int().min(0).describe("Volume level (0 to stream max)")}),returns:h,examples:[{description:"Set media volume",input:{stream:"media",level:10},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>q("set_volume",n)},lm={name:"agenphone.device.vibrate",description:"Vibrate the device (requires VIBRATE permission). On success response is null.",category:"agenphone",pluginName:Yn,parameters:m.object({duration:m.number().int().positive().optional().describe("Vibration duration in ms, default 200")}),returns:h,examples:[{description:"Vibrate 500ms",input:{duration:500},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>q("vibrate",n)};var xm="agenphone",$m={name:"agenphone.clipboard.get",description:"Read current clipboard text. response.clipboard_text is empty string if clipboard is empty.",category:"agenphone",pluginName:xm,parameters:m.object({}),returns:A(m.object({clipboard_text:m.string()})),examples:[{description:"Get clipboard",input:{},output:{status:"success",response:{clipboard_text:"copied text"},error:null}}],sideEffects:["network"],handler:async()=>q("get_clipboard")},vm={name:"agenphone.clipboard.set",description:"Set clipboard text on the device. On success response is null.",category:"agenphone",pluginName:xm,parameters:m.object({content:m.string().describe("Text to write to clipboard")}),returns:h,examples:[{description:"Set clipboard",input:{content:"hello"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>q("set_clipboard",n)};var Sn="agenphone",Hm={name:"agenphone.file.list",description:"List files and subdirectories. response.files contains entries with name, path, is_dir, size (bytes).",category:"agenphone",pluginName:Sn,parameters:m.object({path:m.string().describe("Directory path on device, e.g. /sdcard/")}),returns:A(m.object({files:m.array(m.object({name:m.string(),path:m.string(),is_dir:m.boolean(),size:m.number()}))})),examples:[{description:"List sdcard",input:{path:"/sdcard/"},output:{status:"success",response:{files:[{name:"doc.txt",path:"/sdcard/doc.txt",is_dir:!1,size:1024}]},error:null}}],sideEffects:["network"],handler:async(n)=>q("list_files",n)},_m={name:"agenphone.file.read",description:'Read file content. Text files (≤512KB): response.content is UTF-8 string, response.encoding="utf-8". Image files (jpg/png/gif): response.content_base64 is base64, response.encoding="base64".',category:"agenphone",pluginName:Sn,parameters:m.object({path:m.string().describe("File path on device")}),returns:A(m.union([m.object({content:m.string(),encoding:m.literal("utf-8")}),m.object({content_base64:m.string(),encoding:m.literal("base64")})])),examples:[{description:"Read text file",input:{path:"/sdcard/note.txt"},output:{status:"success",response:{content:"hello",encoding:"utf-8"},error:null}}],sideEffects:["network"],handler:async(n)=>q("read_file",n)},pm={name:"agenphone.file.write",description:"Write text to a file (parent dirs created if needed). On success response is null.",category:"agenphone",pluginName:Sn,parameters:m.object({path:m.string().describe("File path on device"),content:m.string().optional().describe("Text content to write, default empty string")}),returns:h,examples:[{description:"Write file",input:{path:"/sdcard/note.txt",content:"hello"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>q("write_file",n)},Jm={name:"agenphone.file.delete",description:"Delete a file on the device. On success response is null.",category:"agenphone",pluginName:Sn,parameters:m.object({path:m.string().describe("File path to delete")}),returns:h,examples:[{description:"Delete file",input:{path:"/sdcard/old.txt"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>q("delete_file",n)},Xm={name:"agenphone.file.analyze-storage",description:"Analyze total size and file count in a directory. response contains path, total_bytes, file_count.",category:"agenphone",pluginName:Sn,parameters:m.object({path:m.string().describe("Directory path to analyze"),maxDepth:m.number().int().positive().optional().describe("Recursion depth, default 3"),minSizeMB:m.number().min(0).optional().describe("Only count files >= this size in MB, default 0")}),returns:A(m.object({path:m.string(),total_bytes:m.number(),file_count:m.number().int()})),examples:[{description:"Analyze sdcard",input:{path:"/sdcard"},output:{status:"success",response:{path:"/sdcard",total_bytes:104857600,file_count:50},error:null}}],sideEffects:["network"],handler:async(n)=>q("analyze_storage",n)},Ym={name:"agenphone.file.find-large",description:"Find files larger than minSize bytes. response.files contains entries with path and size (bytes).",category:"agenphone",pluginName:Sn,parameters:m.object({path:m.string().describe("Root directory to search"),minSize:m.number().positive().optional().describe("Minimum file size in bytes, e.g. 10485760 for 10MB"),limit:m.number().int().positive().optional().describe("Max results, default 50")}),returns:A(m.object({files:m.array(m.object({path:m.string(),size:m.number()}))})),examples:[{description:"Find large files",input:{path:"/sdcard",minSize:10485760},output:{status:"success",response:{files:[{path:"/sdcard/video.mp4",size:52428800}]},error:null}}],sideEffects:["network"],handler:async(n)=>q("find_large_files",n)},Qm={name:"agenphone.file.index-media",description:"Index image metadata from media library (up to 200 items). response.items contains entries with id, path, date_added.",category:"agenphone",pluginName:Sn,parameters:m.object({}),returns:A(m.object({items:m.array(m.object({id:m.string(),path:m.string(),date_added:m.number()}))})),examples:[{description:"Index media",input:{},output:{status:"success",response:{items:[{id:"1",path:"/sdcard/DCIM/photo.jpg",date_added:1709123456}]},error:null}}],sideEffects:["network"],handler:async()=>q("index_media_metadata")},Wm={name:"agenphone.file.search-media",description:"Search media library by type and keyword. response.items contains entries with id, path, display_name.",category:"agenphone",pluginName:Sn,parameters:m.object({mediaType:m.enum(["image","video","audio"]).optional().describe("Media type, default image"),keyword:m.string().optional().describe("Filename or path keyword"),limit:m.number().int().positive().optional().describe("Max results, default 10")}),returns:A(m.object({items:m.array(m.object({id:m.string(),path:m.string(),display_name:m.string().optional()}))})),examples:[{description:"Search images",input:{mediaType:"image"},output:{status:"success",response:{items:[{id:"1",path:"/sdcard/DCIM/photo.jpg",display_name:"photo.jpg"}]},error:null}}],sideEffects:["network"],handler:async(n)=>q("search_media",n)};var qm="agenphone",um={name:"agenphone.audio.play",description:"Play audio from a URI or local path. On success response is null.",category:"agenphone",pluginName:qm,parameters:m.object({uri:m.string().describe("Media URI or absolute local path, e.g. /sdcard/audio.mp3")}),returns:h,examples:[{description:"Play audio",input:{uri:"/sdcard/audio.mp3"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>q("play_audio",n)},Mm={name:"agenphone.audio.stop",description:"Stop the currently playing audio. On success response is null.",category:"agenphone",pluginName:qm,parameters:m.object({}),returns:h,examples:[{description:"Stop audio",input:{},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async()=>q("stop_audio")};var fi="agenphone",Om={name:"agenphone.notification.read",description:"Read notifications captured by NotificationListener. response.notifications contains entries with key, package_name, title, body, post_time (ms).",category:"agenphone",pluginName:fi,parameters:m.object({}),returns:A(m.object({notifications:m.array(m.object({key:m.string(),package_name:m.string(),title:m.string(),body:m.string(),post_time:m.number()}))})),examples:[{description:"Read notifications",input:{},output:{status:"success",response:{notifications:[{key:"pkg|1|tag",package_name:"com.example.app",title:"标题",body:"内容",post_time:1709123456789}]},error:null}}],sideEffects:["network"],handler:async()=>q("read_notifications")},Gm={name:"agenphone.notification.post",description:"Post a system notification from this app (useful for testing). On success response is null.",category:"agenphone",pluginName:fi,parameters:m.object({title:m.string().optional().describe('Notification title, default "DevSupport"'),body:m.string().optional().describe("Notification body content")}),returns:h,examples:[{description:"Post notification",input:{title:"Alert",body:"Hello"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>q("post_notification",n)},Cm={name:"agenphone.notification.dismiss",description:"Dismiss a notification by key (requires NotificationListener). Use agenphone.notification.read to get keys. On success response is null.",category:"agenphone",pluginName:fi,parameters:m.object({key:m.string().describe("Notification key from read_notifications")}),returns:h,examples:[{description:"Dismiss notification",input:{key:"pkg|1|tag"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>q("dismiss_notification",n)},jm={name:"agenphone.notification.dismiss-all",description:"Dismiss all notifications posted by this app (does not affect other apps). On success response is null.",category:"agenphone",pluginName:fi,parameters:m.object({}),returns:h,examples:[{description:"Dismiss all",input:{},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async()=>q("dismiss_all_notifications")};var I0="agenphone",Bm={name:"agenphone.overlay.toast",description:"Show a toast/instruction-log message on the device screen. On success response is null.",category:"agenphone",pluginName:I0,parameters:m.object({message:m.string().min(1).describe("Message text to display")}),returns:h,examples:[{description:"Show toast",input:{message:"Hello!"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>q("show_toast",n)},Vm={name:"agenphone.overlay.show",description:"Show a floating overlay window. response.overlay_id is the ID needed to hide it later.",category:"agenphone",pluginName:I0,parameters:m.object({text:m.string().optional().describe("Text to display in the overlay")}),returns:A(m.object({overlay_id:m.string().describe("ID to use with agenphone.overlay.hide")})),examples:[{description:"Show overlay",input:{text:"Status: OK"},output:{status:"success",response:{overlay_id:"overlay_abc123"},error:null}}],sideEffects:["network"],handler:async(n)=>q("show_overlay",n)},hm={name:"agenphone.overlay.hide",description:"Hide a specific overlay by its ID (from agenphone.overlay.show). On success response is null.",category:"agenphone",pluginName:I0,parameters:m.object({overlay_id:m.string().describe("Overlay ID returned by agenphone.overlay.show")}),returns:h,examples:[{description:"Hide overlay",input:{overlay_id:"overlay_abc123"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>q("hide_overlay",n)},fm={name:"agenphone.overlay.hide-all",description:"Hide all overlays managed by this app. On success response is null.",category:"agenphone",pluginName:I0,parameters:m.object({}),returns:h,examples:[{description:"Hide all overlays",input:{},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async()=>q("hide_all_overlays")},Lm={name:"agenphone.overlay.list",description:"List all currently visible overlays. response.overlays contains entries with overlay_id and text.",category:"agenphone",pluginName:I0,parameters:m.object({}),returns:A(m.object({overlays:m.array(m.object({overlay_id:m.string(),text:m.string()}))})),examples:[{description:"List overlays",input:{},output:{status:"success",response:{overlays:[{overlay_id:"overlay_abc123",text:"Status: OK"}]},error:null}}],sideEffects:["network"],handler:async()=>q("list_overlays")};var H3="agenphone",Km={name:"agenphone.tts.speak",description:"Speak text aloud using system TTS engine. On success response is null.",category:"agenphone",pluginName:H3,parameters:m.object({text:m.string().min(1).describe("Text to speak"),locale:m.string().optional().describe("Locale code, e.g. zh-CN, en-US"),speed:m.number().min(0.5).max(2).optional().describe("Speech speed 0.5–2.0, default 1.0")}),returns:h,examples:[{description:"Speak text",input:{text:"你好世界"},output:{status:"success",response:null,error:null}}],sideEffects:["network"],handler:async(n)=>q("speak_tts",n)};var Dm={name:"agenphone",version:"2.0.0",featureFlag:"agenphone",commands:[u2,M2,O2,G2,C2,j2,B2,V2,h2,f2,L2,K2,D2,A2,N2,R2,E2,S2,U2,c2,k2,F2,g2,P2,y2,T2,t2,I2,Z2,z2,d2,a2,r2,e2,s2,nm,im,om,mm,bm,wm,lm,$m,vm,Hm,_m,pm,Jm,Xm,Ym,Qm,Wm,um,Mm,Om,Gm,Cm,jm,Bm,Vm,hm,fm,Lm,Km]};import{readFileSync as p3,writeFileSync as J_,mkdirSync as X_,existsSync as J3}from"node:fs";import{join as Am}from"node:path";import{homedir as _3}from"node:os";function Qn(){return process.env.YUNKE_HOME_OVERRIDE??_3()}function X3(){return Am(Qn(),".yunke")}function Y3(){return Am(X3(),"skillshub.json")}var Z0={api_base_url:"https://skillshub.yunke.ai",channel:"stable",target:"generic"};function Wn(){let n=Y3();if(!J3(n))return{...Z0};try{let i=p3(n,"utf-8"),o=JSON.parse(i);return{api_base_url:o.api_base_url??Z0.api_base_url,channel:o.channel??Z0.channel,target:o.target??Z0.target}}catch{return{...Z0}}}var Q3="yunke-cli/1.0.0";function W3(){return Wn().api_base_url.replace(/\/$/,"")}async function Cn(n,i){let b=`${W3()}${n}`,w={"User-Agent":Q3,...i?.headers??{}},l=await fetch(b,{...i,headers:w});if(!l.ok){let x=`HTTP ${l.status}`;try{let $=await l.json();if($.message)x=$.message}catch{}throw new M("EXECUTION_FAILED",`Skillshub API error: ${x}`)}return await l.json()}var q3="skillshub",u3=m.object({slug:m.string(),displayName:m.string(),summary:m.string(),type:m.string(),version:m.string(),targets:m.array(m.string()),channel:m.string()}),Nm={name:"skillshub.search",description:"Search for skills and plugins on the Skillshub registry",category:"skillshub",pluginName:q3,parameters:m.object({query:m.string().describe("搜索关键词"),limit:m.number().int().min(1).max(100).default(20).describe("返回数量上限"),type:m.string().optional().describe("按类型过滤,如 skill、plugin"),channel:m.enum(["stable","beta","canary"]).optional().describe("渠道,默认使用配置中的 channel")}),returns:m.object({results:m.array(u3),total:m.number()}),examples:[{description:"Search for calendar-related skills",input:{query:"calendar"},output:{results:[],total:0}}],sideEffects:["network"],handler:async(n)=>{let i=Wn(),o=n.channel??i.channel,b=new URLSearchParams({q:n.query,channel:o,target:i.target,limit:String(n.limit),offset:"0"});if(n.type!==void 0)b.set("type",n.type);let w=await Cn(`/api/v1/search?${b.toString()}`);return{results:w.results,total:w.results.length}}};import{readFileSync as M3,writeFileSync as O3,mkdirSync as G3,existsSync as Rm}from"node:fs";import{dirname as C3,join as j3}from"node:path";var B3="skills-lock.json";function Em(){return j3(Qn(),".yunke",B3)}function ho(){return{version:2,skills:{}}}function Un(){let n=Em();if(!Rm(n))return ho();try{let i=M3(n,"utf-8"),o=JSON.parse(i);if(o.version!==2||typeof o.skills!=="object")return ho();return{version:2,skills:{...o.skills}}}catch{return ho()}}function C0(n){let i=Em(),o=C3(i);if(!Rm(o))G3(o,{recursive:!0});O3(i,JSON.stringify(n,null,2),"utf-8")}var V3="skillshub",Sm={name:"skillshub.list",description:"List locally installed skills from the lockfile",category:"skillshub",pluginName:V3,parameters:m.object({}),returns:m.object({skills:m.array(m.object({slug:m.string(),name:m.string(),version:m.string(),source:m.string()})),total:m.number()}),examples:[{description:"List all installed skills",input:{},output:{skills:[],total:0}}],sideEffects:["none"],handler:async()=>{let n=Un(),i=Object.entries(n.skills).map(([o,b])=>({slug:o,name:b.name,version:b.version,source:b.source}));return{skills:i,total:i.length}}};import{join as j9}from"node:path";import{createHash as J9,randomUUID as X9}from"node:crypto";import{createReadStream as Y9,writeFileSync as Q9,existsSync as W9,unlinkSync as q9}from"node:fs";import{tmpdir as u9}from"node:os";import{join as M9}from"node:path";var Kb=_w(Bb(),1);import{spawnSync as x9}from"node:child_process";import{cpSync as fb,existsSync as Zi,mkdirSync as Lb,readdirSync as hb,rmSync as $9,statSync as v9}from"node:fs";import{dirname as H9,join as ni}from"node:path";import{appendFileSync as o9,mkdirSync as m9}from"node:fs";import{dirname as b9}from"node:path";import{join as w9}from"node:path";function l9(){return w9(Qn(),".yunke","logs","skillshub.log")}function Po(n,i){try{let o=l9();m9(b9(o),{recursive:!0});let b=new Date().toISOString();o9(o,`${b} [${n.toUpperCase()}] ${i}
12
+ `,"utf-8")}catch{}}var Vb=(n)=>Po("info",n),yo=(n)=>Po("warn",n),s0=(n)=>Po("error",n);function _9(){return ni(Qn(),".yunke","skill-cache")}function Db(n){return ni(_9(),n)}function D0(n){if(!Zi(n))return;if(x9(process.execPath,["-e",`require('fs').rmSync(${JSON.stringify(n)},{recursive:true,force:true})`],{env:{...process.env,NODE_OPTIONS:"",CODEBUDDY_SESSION_ID:"",CLAUDE_SESSION_ID:""},stdio:["ignore","ignore","pipe"]}).status!==0)$9(n,{recursive:!0,force:!0})}async function Ab(n,i){let o=Db(i);if(Zi(o))try{D0(o)}catch(b){yo(`forceRmSync 清缓存失败已忽略: ${o} - ${b instanceof Error?b.message:String(b)}`)}return Lb(o,{recursive:!0}),await Kb.default(n,{dir:o}),p9(o),o}function p9(n){let i=hb(n);if(i.length!==1)return;let o=ni(n,i[0]);if(!v9(o).isDirectory())return;for(let b of hb(o))fb(ni(o,b),ni(n,b),{recursive:!0});D0(o)}function zi(n,i,o=!1){if(Zi(i)&&!o)return!1;if(Zi(i))try{D0(i)}catch(b){yo(`forceRmSync 删旧目标失败已忽略: ${i} - ${b instanceof Error?b.message:String(b)}`)}return Lb(H9(i),{recursive:!0}),fb(n,i,{recursive:!0,force:!0}),!0}function Nb(n){D0(Db(n))}async function O9(n){let i=J9("sha256"),o=Y9(n);return new Promise((b,w)=>{o.on("data",(l)=>i.update(l)),o.on("end",()=>b(i.digest("hex"))),o.on("error",w)})}async function di(n,i,o){let b=M9(u9(),`${X9()}.zip`);try{let w=await fetch(n);if(!w.ok)throw s0(`download failed: HTTP ${w.status} - ${n}`),new M("EXECUTION_FAILED",`下载失败: HTTP ${w.status} - ${n}`);if(!w.body)throw new M("EXECUTION_FAILED",`下载失败: 响应体为空 - ${n}`);let l=await w.arrayBuffer();if(Q9(b,Buffer.from(l)),o){let x=await O9(b);if(x!==o)throw s0(`sha256 mismatch: expected ${o} got ${x}`),new M("EXECUTION_FAILED",`SHA-256 校验失败: 期望 ${o},实际 ${x}`)}return await Ab(b,i)}finally{if(W9(b))q9(b)}}import{existsSync as G9}from"node:fs";import{join as To}from"node:path";var C9=[{dir:".agents/skills",fallback:!0},{dir:".openclaw/skills"},{dir:".hermes/skills"},{dir:".workbuddy/skills"},{dir:".codebuddy/skills"},{dir:".qoder/skills"},{dir:".qoder-cn/skills"},{dir:".trae/skills"},{dir:".trae-cn/skills"},{dir:".qwenwork/skills"},{dir:".qwenworkcn/skills"},{dir:".qwen/skills"},{dir:".claude/skills"},{dir:".lingma/skills"},{dir:".iflow/skills"}];function A0(){let n=Qn(),i=[];for(let o of C9){if(o.fallback){i.push(To(n,o.dir));continue}let b=o.dir.split("/")[0];if(G9(To(n,b)))i.push(To(n,o.dir))}return i}var B9="skillshub",Rb={name:"skillshub.install",description:"Download and install a skill, distributing to all detected clients",category:"skillshub",pluginName:B9,parameters:m.object({slug:m.string().describe("skill 的 slug 标识"),force:m.boolean().default(!1).describe("覆盖已存在的 skill"),dir:m.string().optional().describe("单目录安装(escape hatch,默认多客户端分发)")}),returns:m.object({slug:m.string(),message:m.string()}),examples:[{description:"Install a skill by slug",input:{slug:"find-skills"},output:{slug:"find-skills",message:"Installed successfully"}}],sideEffects:["network","filesystem"],handler:async(n)=>{let i=Wn(),o=n.dir?[n.dir]:A0(),b=await Cn(`/api/v1/manifest/${encodeURIComponent(n.slug)}?target=${i.target}&channel=${i.channel}`),w=b.artifacts.find((X)=>X.target===i.target||X.target==="all");if(!w)throw new M("EXECUTION_FAILED",`无匹配的 artifact(target=${i.target})`);let l=await di(w.downloadUrl,n.slug,w.sha256||void 0),x=0,$=[];for(let X of o)try{if(zi(l,j9(X,n.slug),n.force))x++}catch(W){$.push(`${X}: ${W instanceof Error?W.message:String(W)}`)}if($.length>0)s0(`${n.slug} copy failures: ${$.join(" | ")}`);if(Vb(`${n.slug} installed to ${x}/${o.length} targets`),x===0&&$.length>0)throw new M("EXECUTION_FAILED",`所有目标安装失败:
13
+ ${$.join(`
14
+ `)}`);let v=Un(),H={...v,skills:{...v.skills,[n.slug]:{name:n.slug,version:b.version,source:"skillshub"}}};C0(H),await Cn(`/api/v1/install-record/${encodeURIComponent(n.slug)}`,{method:"POST"}).catch(()=>{});let _=$.length?`Installed to ${x} target(s); ${$.length} failed`:"Installed successfully";return{slug:n.slug,message:_}}};import{join as V9}from"node:path";var h9="skillshub",Eb={name:"skillshub.remove",description:"Remove an installed skill from all clients and clean up its cache",category:"skillshub",pluginName:h9,parameters:m.object({slug:m.string().describe("要卸载的 skill slug"),dir:m.string().optional().describe("单目录卸载(escape hatch,默认移除所有客户端)"),force:m.boolean().optional().describe("跳过 lockfile 守卫,强制从各 agent 目录删除(用于清理孤儿/旧 slug)")}),returns:m.object({slug:m.string(),message:m.string()}),examples:[{description:"Remove a skill by slug",input:{slug:"find-skills"},output:{slug:"find-skills",message:"Removed successfully"}}],sideEffects:["filesystem"],handler:async(n)=>{let i=n.dir?[n.dir]:A0(),o=Un();if(!n.force&&!(n.slug in o.skills))throw new M("EXECUTION_FAILED",`skill '${n.slug}' 未安装`);for(let l of i)D0(V9(l,n.slug));let{[n.slug]:b,...w}=o.skills;return C0({...o,skills:w}),Nb(n.slug),{slug:n.slug,message:"Removed successfully"}}};var f9="skillshub",Sb={name:"skillshub.info",description:"Show detailed information about a skill from the registry",category:"skillshub",pluginName:f9,parameters:m.object({slug:m.string().describe("skill 的 slug")}),returns:m.object({slug:m.string(),capability:m.unknown(),versions:m.array(m.unknown()),artifacts:m.array(m.unknown())}),examples:[{description:"Get info for a skill",input:{slug:"find-skills"},output:{slug:"find-skills",capability:{},versions:[],artifacts:[]}}],sideEffects:["network"],handler:async(n)=>{let i=await Cn(`/api/v1/capabilities/${encodeURIComponent(n.slug)}`);return{slug:n.slug,capability:i.capability,versions:i.versions,artifacts:i.artifacts}}};import{join as L9}from"node:path";var K9="skillshub",D9=m.object({slug:m.string(),status:m.enum(["upgraded","skipped","failed"]),from_version:m.string(),to_version:m.string(),message:m.string().optional()}),Ub={name:"skillshub.upgrade",description:"Check for and apply updates to installed skills",category:"skillshub",pluginName:K9,parameters:m.object({slug:m.string().optional().describe("指定升级的 skill,不填则升级所有已安装的"),dir:m.string().optional().describe("单目录升级(escape hatch,默认所有客户端)"),check_only:m.boolean().default(!1).describe("只检查更新,不实际安装")}),returns:m.object({checked:m.number(),upgraded:m.number(),skipped:m.number(),failed:m.number(),details:m.array(D9)}),examples:[{description:"Check for updates without installing",input:{check_only:!0},output:{checked:2,upgraded:1,skipped:1,failed:0,details:[]}}],sideEffects:["network","filesystem"],handler:async(n)=>{let i=Wn(),o=Un(),b=n.slug?[n.slug]:Object.keys(o.skills),w=[],l=0,x=0,$=0;for(let v of b){let H=o.skills[v];if(!H){w.push({slug:v,status:"failed",from_version:"",to_version:"",message:"skill 未安装"}),$++;continue}try{let _=await Cn(`/api/v1/manifest/${encodeURIComponent(v)}?target=${i.target}&channel=${i.channel}`),X=_.version,W=H.version,G=_.artifacts.find((B)=>B.target===i.target||B.target==="all");if(!G){w.push({slug:v,status:"skipped",from_version:W,to_version:X,message:"无匹配的 artifact"}),x++;continue}if(W===X){w.push({slug:v,status:"skipped",from_version:W,to_version:X}),x++;continue}if(n.check_only){w.push({slug:v,status:"upgraded",from_version:W,to_version:X}),l++;continue}let k=await di(G.downloadUrl,v,G.sha256||void 0),L=n.dir?[n.dir]:A0();for(let B of L)try{zi(k,L9(B,v),!0)}catch{}o={...o,skills:{...o.skills,[v]:{...H,version:X}}},C0(o),w.push({slug:v,status:"upgraded",from_version:W,to_version:X}),l++}catch(_){let X=_ instanceof Error?_.message:String(_);w.push({slug:v,status:"failed",from_version:H.version,to_version:"",message:X}),$++}}return{checked:b.length,upgraded:l,skipped:x,failed:$,details:w}}};var cb={name:"skillshub",version:"1.0.0",commands:[Nm,Sm,Rb,Eb,Sb,Ub]};import{createServer as t9}from"node:http";var A9="/api/v1";async function N0(n,i){let o=`${sn}${A9}${n}`,b=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)});if(!b.ok){let l=`HTTP ${b.status}`;try{let x=await b.json();l=x.detail??x.message??l}catch{}throw new M("EXECUTION_FAILED",`云客服务错误: ${l}`)}return(await b.json()).data}import{readFileSync as N9,writeFileSync as R9,mkdirSync as E9,existsSync as Io,unlinkSync as S9}from"node:fs";import{homedir as U9}from"node:os";import{join as kb}from"node:path";var to=process.env.YUNKE_CONFIG_DIR??kb(U9(),".yunke"),ii=kb(to,"crm.json");function e(){if(!Io(ii))return null;try{let n=N9(ii,"utf-8");return JSON.parse(n)}catch{return null}}function ai(n){if(!Io(to))E9(to,{recursive:!0});R9(ii,JSON.stringify(n,null,2),"utf-8")}function Fb(n){let i=e()??{token:"",user_id:"",company:"",company_code:"",name:"",phone:"",role:"",login_id:""};ai({...i,...n})}function gb(){if(Io(ii))S9(ii)}import{randomBytes as Pb,createHash as c9}from"node:crypto";import{request as k9}from"node:http";import{request as F9}from"node:https";var g9="https://crm.yunkecn.com/pc";function P9(n=process.env.YUNKE_PC_OAUTH_BASE_URL){let i=n?.replace(/\/$/,"");return i&&i.length>0?i:g9}var Zo=P9();function yb(n,i){if(!n)return i;let o;try{o=new URL(n).host}catch{throw Error(`invalid iss: ${n}`)}return n.replace(/\/$/,"")}function zo(n){return n.toString("base64url")}function Tb(){return zo(Pb(32))}function tb(n){return zo(c9("sha256").update(n,"utf8").digest())}function Ib(){return zo(Pb(16))}function Zb(n,i,o){return new Promise((b,w)=>{let $=(new URL(n).protocol==="https:"?F9:k9)(n,{method:"POST",agent:!1,headers:{"content-type":o,"content-length":String(Buffer.byteLength(i))}},(v)=>{let H="";v.setEncoding("utf8"),v.on("data",(_)=>H+=_),v.on("end",()=>b({status:v.statusCode??0,text:H}))});$.on("error",w),$.write(i),$.end()})}async function zb(n,i){let o=JSON.stringify({redirect_uris:[i],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none",scope:"read",client_name:"yunke-cli"}),{status:b,text:w}=await Zb(`${n}/oauth/register`,o,"application/json");if(b<200||b>=300)throw Error(`OAuth register failed: HTTP ${b} ${w}`);let l;try{l=JSON.parse(w)}catch{throw Error(`OAuth register failed: bad json ${w}`)}if(!l?.client_id)throw Error("OAuth register failed: missing client_id");return l}function db(n){let i=new URL(`${n.baseUrl}/oauth/authorize`);if(i.searchParams.set("client_id",n.clientId),i.searchParams.set("redirect_uri",n.redirectUri),i.searchParams.set("response_type","code"),i.searchParams.set("code_challenge",n.codeChallenge),i.searchParams.set("code_challenge_method","S256"),i.searchParams.set("state",n.state),n.scope)i.searchParams.set("scope",n.scope);return i.toString()}class ri extends Error{error;constructor(n,i){super(i);this.name="OAuthTokenError",this.error=n}}async function ab(n){let i=new URLSearchParams({grant_type:"authorization_code",code:n.code,client_id:n.clientId,redirect_uri:n.redirectUri,code_verifier:n.codeVerifier});return eb(`${n.baseUrl}/oauth/token`,i)}async function rb(n){let i=new URLSearchParams({grant_type:"refresh_token",refresh_token:n.refreshToken,client_id:n.clientId});return eb(`${n.baseUrl}/oauth/token`,i)}async function eb(n,i){let{status:o,text:b}=await Zb(n,i.toString(),"application/x-www-form-urlencoded"),w=null;try{w=JSON.parse(b)}catch{}if(o<200||o>=300||!w||w.error){let l=w?.error??"http_error",x=w?.error_description??`HTTP ${o}`;throw new ri(l,x)}return w}import{spawn as y9}from"node:child_process";function T9(n,i=process.platform){let o={detached:!0,stdio:"ignore"};if(i==="win32")return{cmd:"cmd",args:["/c","start",'""',`"${n}"`],opts:{...o,windowsVerbatimArguments:!0}};if(i==="darwin")return{cmd:"open",args:[n],opts:o};return{cmd:"xdg-open",args:[n],opts:o}}function sb(n){let{cmd:i,args:o,opts:b}=T9(n);try{y9(i,o,b).unref()}catch{}}var n4=`<!DOCTYPE html>
15
+ <html lang="zh-CN">
16
+ <head>
17
+ <meta charset="UTF-8">
18
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
19
+ <title>云客 AI 工作手机 — 连接成功</title>
20
+ <style>
21
+ *,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
22
+ :root{
23
+ --blue:#2B5FE0;
24
+ --blue-hover:#1A4FCC;
25
+ --blue-pale:#EBF1FF;
26
+ --blue-bg:#F5F8FF;
27
+ --green:#00B755;
28
+ --ink:#1A1A2E;
29
+ --gray-1:#333;
30
+ --gray-2:#666;
31
+ --gray-3:#999;
32
+ --gray-4:#E8E8E8;
33
+ --gray-5:#F7F8FA;
34
+ --white:#fff;
35
+ --radius:16px;
36
+ --shadow-card:0 1px 3px rgba(0,0,0,.04),0 4px 12px rgba(0,0,0,.04);
37
+ --shadow-hover:0 2px 8px rgba(43,95,224,.08),0 8px 24px rgba(0,0,0,.06);
38
+ --shadow-lg:0 4px 24px rgba(0,0,0,.05),0 12px 48px rgba(0,0,0,.04);
39
+ --max-w:1080px;
40
+ }
41
+ html{font-size:16px;-webkit-font-smoothing:antialiased}
42
+ body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;background:var(--white);color:var(--ink);line-height:1.6;overflow-x:hidden;min-height:100vh;display:flex;flex-direction:column}
43
+ a{text-decoration:none;color:inherit}
44
+
45
+ /* ===== Header ===== */
46
+ .header{height:60px;background:var(--white);border-bottom:1px solid var(--gray-4);display:flex;align-items:center;flex-shrink:0}
47
+ .header-inner{max-width:var(--max-w);margin:0 auto;width:100%;padding:0 32px;display:flex;align-items:center;justify-content:space-between}
48
+ .logo{display:flex;align-items:center}
49
+ .logo img{height:30px;width:auto}
50
+ .header-right{display:flex;align-items:center;gap:16px}
51
+ .phone{font-size:15px;font-weight:600;color:var(--gray-1);white-space:nowrap}
52
+
53
+ /* ===== Hero ===== */
54
+ .hero{background:var(--blue-bg);flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:56px 32px 72px}
55
+
56
+ /* Login Success Card */
57
+ .success-card{background:var(--white);border-radius:24px;box-shadow:var(--shadow-lg);padding:56px 64px;text-align:center;max-width:560px;width:100%;margin-bottom:64px;animation:fadeUp .5s ease}
58
+ .success-icon{width:80px;height:80px;border-radius:50%;background:var(--green);display:flex;align-items:center;justify-content:center;margin:0 auto 24px;animation:pop .4s ease .15s both}
59
+ .success-icon svg{width:40px;height:40px;color:#fff}
60
+ .success-card h1{font-size:30px;font-weight:700;color:var(--ink);margin-bottom:12px;letter-spacing:-.01em}
61
+ .success-card p{font-size:16px;color:var(--gray-2);margin-bottom:32px;line-height:1.7}
62
+ .success-btn{display:inline-flex;align-items:center;gap:8px;background:var(--blue);color:#fff;padding:14px 40px;border-radius:10px;font-size:16px;font-weight:600;border:none;cursor:pointer;transition:background .15s}
63
+ .success-btn:hover{background:var(--blue-hover)}
64
+
65
+ /* ===== Scenarios ===== */
66
+ .scenarios{width:100%;max-width:var(--max-w)}
67
+ .scenarios-header{text-align:center;margin-bottom:40px}
68
+ .scenarios-title{font-size:22px;font-weight:700;color:var(--ink);letter-spacing:-.01em;margin-bottom:8px}
69
+ .scenarios-sub{font-size:15px;color:var(--gray-3)}
70
+
71
+ /* 3-column grid — wider cards, more breathing room */
72
+ .scenario-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}
73
+
74
+ .scenario-card{
75
+ background:var(--white);
76
+ border:1px solid var(--gray-4);
77
+ border-radius:var(--radius);
78
+ padding:32px 28px;
79
+ transition:box-shadow .2s,border-color .2s;
80
+ cursor:pointer;
81
+ position:relative;
82
+ display:flex;
83
+ flex-direction:column;
84
+ gap:16px;
85
+ }
86
+ .scenario-card:hover{border-color:var(--blue);box-shadow:var(--shadow-hover)}
87
+
88
+ /* Role tag */
89
+ .scenario-role{
90
+ display:inline-flex;
91
+ align-items:center;
92
+ gap:5px;
93
+ font-size:13px;
94
+ font-weight:600;
95
+ color:var(--blue);
96
+ background:var(--blue-pale);
97
+ padding:4px 12px;
98
+ border-radius:6px;
99
+ align-self:flex-start;
100
+ }
101
+ .scenario-role svg{width:13px;height:13px;flex-shrink:0}
102
+
103
+ /* Title */
104
+ .scenario-card h3{font-size:18px;font-weight:700;color:var(--ink);letter-spacing:-.01em}
105
+
106
+ /* Description */
107
+ .scenario-card .desc{font-size:14px;color:var(--gray-2);line-height:1.7;flex:1}
108
+
109
+ /* Prompt block */
110
+ .prompt-block{
111
+ background:var(--gray-5);
112
+ border-left:3px solid var(--blue);
113
+ border-radius:0 8px 8px 0;
114
+ padding:12px 16px;
115
+ font-size:13px;
116
+ color:var(--gray-1);
117
+ line-height:1.6;
118
+ font-family:"SF Mono",ui-monospace,"Cascadia Code",monospace;
119
+ display:flex;
120
+ align-items:flex-start;
121
+ justify-content:space-between;
122
+ gap:10px;
123
+ margin-top:auto;
124
+ }
125
+ .prompt-text{flex:1;word-break:break-word}
126
+ .copy-hint{
127
+ font-size:12px;
128
+ color:var(--gray-3);
129
+ white-space:nowrap;
130
+ display:flex;
131
+ align-items:center;
132
+ gap:4px;
133
+ padding-top:2px;
134
+ flex-shrink:0;
135
+ }
136
+ .copy-hint svg{width:12px;height:12px}
137
+
138
+ /* Toast */
139
+ .toast{
140
+ position:absolute;
141
+ top:12px;
142
+ right:12px;
143
+ background:var(--blue);
144
+ color:#fff;
145
+ font-size:13px;
146
+ font-weight:500;
147
+ padding:5px 14px;
148
+ border-radius:20px;
149
+ animation:fadeUp .3s ease;
150
+ z-index:10;
151
+ }
152
+
153
+ /* ===== Footer ===== */
154
+ .footer{text-align:center;padding:24px;font-size:13px;color:var(--gray-3);background:var(--white);border-top:1px solid var(--gray-4);flex-shrink:0}
155
+ .footer a{color:var(--gray-3);transition:color .15s}
156
+ .footer a:hover{color:var(--blue)}
157
+
158
+ /* Animations */
159
+ @keyframes fadeUp{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}
160
+ @keyframes pop{0%{transform:scale(0)}55%{transform:scale(1.08)}100%{transform:scale(1)}}
161
+
162
+ @media(prefers-reduced-motion:reduce){
163
+ *{animation:none!important;transition:none!important}
164
+ }
165
+
166
+ /* Responsive */
167
+ @media(max-width:900px){
168
+ .scenario-grid{grid-template-columns:repeat(2,1fr)}
169
+ }
170
+ @media(max-width:640px){
171
+ .scenario-grid{grid-template-columns:1fr}
172
+ .header-right .phone{display:none}
173
+ .success-card{padding:40px 28px}
174
+ .success-card h1{font-size:24px}
175
+ .hero{padding:40px 20px 56px}
176
+ .header-inner{padding:0 20px}
177
+ }
178
+ </style>
179
+ </head>
180
+ <body>
181
+
182
+ <!-- ===== Header ===== -->
183
+ <header class="header">
184
+ <div class="header-inner">
185
+ <a href="https://www.yunkecn.com" target="_blank" class="logo">
186
+ <img src="https://www.yunkecn.com/images/common/logo.webp" alt="云客工作手机" style="height:30px;width:auto" onerror="this.style.display='none';this.nextElementSibling.style.display='inline'">
187
+ <span style="display:none;font-size:20px;font-weight:800;color:#2B5FE0;letter-spacing:1px">云客</span>
188
+ </a>
189
+ <div class="header-right">
190
+ <span class="phone">
191
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="vertical-align:-3px;margin-right:5px"><path d="M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07 19.5 19.5 0 01-6-6 19.79 19.79 0 01-3.07-8.67A2 2 0 014.11 2h3a2 2 0 012 1.72 12.84 12.84 0 00.7 2.81 2 2 0 01-.45 2.11L8.09 9.91a16 16 0 006 6l1.27-1.27a2 2 0 012.11-.45 12.84 12.84 0 002.81.7A2 2 0 0122 16.92z"/></svg>
192
+ 400-626-9560
193
+ </span>
194
+ </div>
195
+ </div>
196
+ </header>
197
+
198
+ <!-- ===== Hero ===== -->
199
+ <section class="hero">
200
+ <!-- Success Card -->
201
+ <div class="success-card">
202
+ <div class="success-icon">
203
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg>
204
+ </div>
205
+ <h1>连接成功</h1>
206
+ <p>云客 AI 工作手机已成功连接<br>用自然语言对话即可调用云客全部能力</p>
207
+ <button class="success-btn" onclick="window.open('https://www.yunkecn.com','_blank')">
208
+ 访问云客官网
209
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M5 12h14M13 6l6 6-6 6"/></svg>
210
+ </button>
211
+ </div>
212
+
213
+ <!-- Scenarios -->
214
+ <div class="scenarios">
215
+ <div class="scenarios-header">
216
+ <div class="scenarios-title">场景示例</div>
217
+ <div class="scenarios-sub">点击卡片复制提示词,粘贴到 AI 助手对话即可</div>
218
+ </div>
219
+ <div class="scenario-grid">
220
+
221
+ <div class="scenario-card" onclick="sendPrompt('生成上周销售部的员工统计报表',this)">
222
+ <span class="scenario-role">
223
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 00-3-3.87"/></svg>
224
+ 销售团队负责人 · 每周五
225
+ </span>
226
+ <h3>周度团队复盘</h3>
227
+ <p class="desc">自动拉取部门统计数据,汇总通话量、客户数等关键指标,生成周报</p>
228
+ <div class="prompt-block">
229
+ <span class="prompt-text">生成上周销售部的员工统计报表</span>
230
+ <span class="copy-hint">
231
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="9" y="9" width="13" height="13" rx="2"/><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"/></svg>
232
+ 点击复制
233
+ </span>
234
+ </div>
235
+ </div>
236
+
237
+ <div class="scenario-card" onclick="sendPrompt('查询最近一周通话记录,分析客户情绪',this)">
238
+ <span class="scenario-role">
239
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 00-3-3.87"/></svg>
240
+ 客户成功经理 · 每日
241
+ </span>
242
+ <h3>客户情绪监控与预警</h3>
243
+ <p class="desc">筛查情绪偏负的通话,标注风险等级,输出建议跟进动作</p>
244
+ <div class="prompt-block">
245
+ <span class="prompt-text">查询最近一周通话记录,分析客户情绪</span>
246
+ <span class="copy-hint">
247
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="9" y="9" width="13" height="13" rx="2"/><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"/></svg>
248
+ 点击复制
249
+ </span>
250
+ </div>
251
+ </div>
252
+
253
+ <div class="scenario-card" onclick="sendPrompt('提取最近7天销售部优秀话术,整理成成单案例',this)">
254
+ <span class="scenario-role">
255
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 00-3-3.87"/></svg>
256
+ 培训负责人 · 每月初
257
+ </span>
258
+ <h3>优秀话术提取</h3>
259
+ <p class="desc">从高转化通话中提取话术片段,按场景分类,形成成单案例集</p>
260
+ <div class="prompt-block">
261
+ <span class="prompt-text">提取最近7天销售部优秀话术,整理成成单案例</span>
262
+ <span class="copy-hint">
263
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="9" y="9" width="13" height="13" rx="2"/><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"/></svg>
264
+ 点击复制
265
+ </span>
266
+ </div>
267
+ </div>
268
+
269
+ <div class="scenario-card" onclick="sendPrompt('分析张伟最近的沟通情况,给出辅导建议',this)">
270
+ <span class="scenario-role">
271
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 00-3-3.87"/></svg>
272
+ 销售主管 · 按需
273
+ </span>
274
+ <h3>员工针对性辅导</h3>
275
+ <p class="desc">分析员工 SOP 执行率、情绪状态、优秀片段,生成改进建议</p>
276
+ <div class="prompt-block">
277
+ <span class="prompt-text">分析张伟最近的沟通情况,给出辅导建议</span>
278
+ <span class="copy-hint">
279
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="9" y="9" width="13" height="13" rx="2"/><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"/></svg>
280
+ 点击复制
281
+ </span>
282
+ </div>
283
+ </div>
284
+
285
+ <div class="scenario-card" onclick="sendPrompt('分析客户情况,帮我规划本周拜访计划',this)">
286
+ <span class="scenario-role">
287
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 00-3-3.87"/></svg>
288
+ 区域销售 · 每周一
289
+ </span>
290
+ <h3>客户拜访规划</h3>
291
+ <p class="desc">基于客户意向与痛点,输出拜访优先级清单及建议沟通重点</p>
292
+ <div class="prompt-block">
293
+ <span class="prompt-text">分析客户情况,帮我规划本周拜访计划</span>
294
+ <span class="copy-hint">
295
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="9" y="9" width="13" height="13" rx="2"/><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"/></svg>
296
+ 点击复制
297
+ </span>
298
+ </div>
299
+ </div>
300
+
301
+ <!-- 6th: free exploration, dashed style -->
302
+ <div class="scenario-card" onclick="sendPrompt('搜索销售部,然后查询该部门最近一周的通话记录',this)" style="border-style:dashed;background:transparent">
303
+ <span class="scenario-role" style="background:transparent;color:var(--gray-3)">
304
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><path d="M12 8v8M8 12h8"/></svg>
305
+ 自由探索
306
+ </span>
307
+ <h3 style="color:var(--gray-2)">组合查询:先找部门再看通话</h3>
308
+ <p class="desc" style="color:var(--gray-3)">AI 会自动拆解步骤:先搜索部门获取 ID,再拉取通话记录</p>
309
+ <div class="prompt-block" style="background:transparent;border-left-color:var(--gray-4)">
310
+ <span class="prompt-text" style="color:var(--gray-2)">搜索销售部,然后查询该部门最近一周的通话记录</span>
311
+ </div>
312
+ </div>
313
+
314
+ </div>
315
+ </div>
316
+ </section>
317
+
318
+ <!-- ===== Footer ===== -->
319
+ <footer class="footer">
320
+ <div>北京联云天下科技有限公司 ©版权所有 <a href="https://beian.miit.gov.cn/#/Integrated/index" target="_blank">京ICP备15034400号-1</a></div>
321
+ </footer>
322
+
323
+ <script>
324
+ function sendPrompt(text,el){
325
+ var card=el.closest('.scenario-card');
326
+ if(!card)return;
327
+ function showToast(){
328
+ var old=card.querySelector('.toast');
329
+ if(old)old.remove();
330
+ var toast=document.createElement('div');
331
+ toast.className='toast';
332
+ toast.textContent='已复制';
333
+ card.appendChild(toast);
334
+ setTimeout(function(){toast.remove()},1500);
335
+ }
336
+ if(navigator.clipboard&&window.isSecureContext){
337
+ navigator.clipboard.writeText(text).then(showToast).catch(function(){fallbackCopy(text,showToast)});
338
+ }else{
339
+ fallbackCopy(text,showToast);
340
+ }
341
+ }
342
+ function fallbackCopy(text,cb){
343
+ var ta=document.createElement('textarea');
344
+ ta.value=text;
345
+ ta.style.cssText='position:fixed;left:-9999px;top:0;opacity:0';
346
+ document.body.appendChild(ta);
347
+ ta.focus();
348
+ ta.select();
349
+ try{document.execCommand('copy');cb()}catch(e){}
350
+ document.body.removeChild(ta);
351
+ }
352
+ </script>
353
+
354
+ </body>
355
+ </html>`;import{writeSync as i4}from"node:fs";function ei(n){i4(1,n)}function oi(n){i4(2,n)}function Vn(n){process.exit(n)}var b0="crm",I9=/^1[3-9]\d{9}$/,ro=m.string().regex(I9,"手机号格式不合法,需为 11 位中国大陆手机号"),m4=m.object({id:m.string(),cellphone:m.string(),company_id:m.string(),user_id:m.string(),user_type:m.number(),real_name:m.string(),user_bind_state:m.number(),auto_call:m.number(),download_limit:m.number(),create_time:m.string(),use_sea:m.number(),department_id:m.string(),power_type:m.number(),login_account:m.string(),role_id:m.string(),user_telephone:m.string(),user_address:m.string(),user_email:m.string(),user_status:m.number(),login_id:m.string(),role_name:m.string(),manage_department_names:m.string(),is_manager:m.boolean(),asr:m.number()}),b4={name:"crm.auth.send-code",description:"向手机号发送云客 CRM 短信验证码,登录第一步。",category:"crm",pluginName:b0,parameters:m.object({phone:ro.describe("11 位中国大陆手机号")}),returns:m.object({success:m.boolean(),message:m.string()}),examples:[{description:"发送验证码",input:{phone:"13800138000"},output:{success:!0,message:"发送成功"}}],sideEffects:["network"],hidden:!0,handler:async({phone:n})=>{let i=await N0("/pc/sms/send",{phone:n,timestamp:Date.now()});return{success:i.success,message:i.message}}},w4={name:"crm.auth.verify",description:"验证短信验证码,返回该手机号关联的企业列表,登录第二步。",category:"crm",pluginName:b0,parameters:m.object({phone:ro.describe("11 位中国大陆手机号"),sms_code:m.string().min(1).describe("收到的短信验证码")}),returns:m.object({companies:m.array(m.object({user_id:m.string(),user_type:m.number(),company_code:m.string(),company:m.string(),domain:m.string()}))}),examples:[{description:"验证验证码,返回企业列表",input:{phone:"13800138000",sms_code:"123456"},output:{companies:[{user_id:"u001",user_type:1,company_code:"yk001",company:"云客",domain:"yunke.ai"}]}}],sideEffects:["network"],hidden:!0,handler:async({phone:n,sms_code:i})=>{return{companies:await N0("/pc/login/verify",{phone:n,sms_code:i})}}},l4={name:"crm.auth.login",description:"选择企业登录,获取 token,自动拉取用户详情,将凭证写入 ~/.yunke/crm.json,登录第三步。",category:"crm",pluginName:b0,parameters:m.object({phone:ro.describe("11 位中国大陆手机号"),y_code:m.string().min(1).describe("短信验证码(同 sms_code)"),company_code:m.string().min(1).describe("从 verify 步骤返回的企业代码")}),returns:m.object({token:m.string(),user_id:m.string(),company:m.string(),company_code:m.string(),name:m.string(),phone:m.string(),role:m.string(),login_id:m.string(),user_info:m4}),examples:[{description:"选择企业登录",input:{phone:"13800138000",y_code:"123456",company_code:"yk001"},output:{token:"tok_xxx",user_id:"u001",company:"云客",company_code:"yk001",name:"张三",phone:"13800138000",role:"admin",login_id:"lid_001",user_info:{id:"u001",real_name:"张三"}}}],sideEffects:["filesystem","network"],hidden:!0,handler:async({phone:n,y_code:i,company_code:o})=>{let b=await N0("/pc/login/token",{phone:n,y_code:i,company_code:o}),w={token:b.token,user_id:b.user_id,company:b.company,company_code:b.company_code,name:b.name,phone:b.phone,role:b.role,login_id:b.login_id};ai(w);let l=await N0("/pc/user/info",{user_id:b.user_id,token:b.token});return{...w,user_info:l}}},x4={name:"crm.auth.user-info",description:"从配置文件读取 token+user_id,查询完整用户信息(可随时刷新)。",category:"crm",pluginName:b0,parameters:m.object({}),returns:m4,examples:[{description:"获取当前登录用户信息",input:{},output:{id:"u001",real_name:"张三",role_name:"管理员"}}],sideEffects:["network"],handler:async()=>{let n=e();if(!n?.token||!n?.user_id)throw new M("CONFIG_ERROR","未登录,请先运行 'yunke crm.auth.login' 登录");return N0("/pc/user/info",{user_id:n.user_id,token:n.token})}},$4=300000;function si(n){return n instanceof Error?n.message:String(n)}function Z9(n){return new Promise((i,o)=>{n.once("error",o),n.listen(0,"127.0.0.1",()=>{n.removeListener("error",o),i()})})}async function o4(n){n.closeAllConnections?.(),await new Promise((i)=>n.close(()=>i())),await new Promise((i)=>setImmediate(i))}function ao(n){return'<!DOCTYPE html><html lang="zh"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1">'+"<title>登录失败 - yunke-cli</title>"+"<style>body{font-family:sans-serif;max-width:420px;margin:80px auto;padding:0 16px;text-align:center}</style>"+`</head><body><h2>登录失败</h2><p>❌ ${z9(n)}</p></body></html>`}function z9(n){return n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function d9(n,i,o){return new Promise((b)=>{let w=setTimeout(()=>b(null),$4);n.on("request",(l,x)=>{let $=new URL(l.url??"/","http://127.0.0.1");if($.pathname!=="/callback"){x.statusCode=404,x.end("not found");return}clearTimeout(w);let v=$.searchParams.get("code"),H=$.searchParams.get("state"),_=$.searchParams.get("error"),X=$.searchParams.get("iss");if(_){let W=$.searchParams.get("error_description")??_;x.end(ao(W)),b(null);return}if(!v||H!==i){x.statusCode=400,x.end(ao("授权回调参数无效(state 不匹配或缺 code)")),b(null);return}b({code:v,iss:X,reply:(W,G)=>{try{if(W)x.setHeader("Content-Type","text/html; charset=utf-8"),x.end(o);else x.end(ao(G??""))}catch{}}})})})}var v4={name:"crm.auth.login-web",description:"发起浏览器 OAuth 登录:CLI 自动打开系统浏览器(裸输出授权 URL 绕过 JSON 信封,spawn 失败时用户可手动打开打印的 URL),等待回调换 token 后落盘。",category:"crm",pluginName:b0,parameters:m.object({}),returns:m.object({url:m.string()}),examples:[{description:"发起 OAuth 登录(CLI 自己开浏览器)",input:{},output:{url:"https://yunke-pc.example.com/pc/oauth/authorize?client_id=wb_xxx&..."}}],sideEffects:["filesystem","network"],timeout:$4+1e4,handler:async()=>{let n=Zo,i=Tb(),o=tb(i),b=Ib(),w=t9();try{await Z9(w)}catch(X){oi(`启动本地回调服务器失败: ${si(X)}
356
+ `),Vn(1);return}let x=`http://127.0.0.1:${w.address().port}/callback`,$;try{$=(await zb(n,x)).client_id}catch(X){await o4(w),oi(`OAuth 客户端注册失败: ${si(X)}
357
+ `),Vn(1);return}let v=db({baseUrl:n,clientId:$,redirectUri:x,state:b,codeChallenge:o});ei(`${v}
358
+ `),sb(v);let H=await d9(w,b,n4),_=1;if(H)try{let X=yb(H.iss,n),W=await ab({baseUrl:X,code:H.code,clientId:$,redirectUri:x,codeVerifier:i});ai({token:W.access_token,user_id:W.user_id??"",company:"",company_code:W.company_code??"",name:W.name??"",phone:"",role:"",login_id:"",refresh_token:W.refresh_token,expires_at:Date.now()+(W.expires_in??3600)*1000,client_id:$,redirect_uri:x,base_url:X}),H.reply(!0),_=0}catch(X){let W=X instanceof ri&&X.error==="access_denied"?"(请先在云枢完成「AI 助手登录」生成 agentapp 登录凭证)":"",G=`登录失败: ${si(X)}${W}`;oi(`${G}
359
+ `),H.reply(!1,G),_=1}await o4(w),Vn(_);return}},H4={name:"crm.auth.status",description:'WorkBuddy 对接:检测登录状态。已登录 exit 0 + 输出 "Logged in as <name>";未登录 exit 非0。token 过期自动 refresh。',category:"crm",pluginName:b0,parameters:m.object({}),returns:m.object({logged_in:m.boolean()}),examples:[{description:"已登录",input:{},output:{logged_in:!0}}],sideEffects:["filesystem","network"],handler:async()=>{let n=e();if(!n?.token||!n?.user_id){Vn(1);return}if(!(n.expires_at!=null&&Date.now()>=n.expires_at)){ei(`Logged in as ${n.name}
360
+ `),Vn(0);return}if(n.refresh_token&&n.client_id){try{let o=await rb({baseUrl:n.base_url||Zo,refreshToken:n.refresh_token,clientId:n.client_id});Fb({token:o.access_token,expires_at:Date.now()+(o.expires_in??3600)*1000,...o.refresh_token?{refresh_token:o.refresh_token}:{}}),ei(`Logged in as ${n.name}
361
+ `),Vn(0);return}catch(o){oi(`刷新凭证失败: ${si(o)}
362
+ `)}Vn(1);return}Vn(1);return}},_4={name:"crm.auth.logout",description:"WorkBuddy 对接:登出,删除本地凭证(幂等,未登录也 exit 0)。",category:"crm",pluginName:b0,parameters:m.object({}),returns:m.object({success:m.boolean()}),examples:[{description:"登出",input:{},output:{success:!0}}],sideEffects:["filesystem"],handler:async()=>{return gb(),{success:!0}}};function p4(){let n=e();if(n?.base_url)try{let i=new URL(n.base_url);return`${i.protocol}//${i.host}`}catch{}return process.env.YUNKE_CRM_BASE_URL||"https://crm.yunkecn.com"}var a9={source:"yunkepc",package:"agentapp"};function r9(){let n=e();if(!n?.token||!n?.user_id)throw new M("CONFIG_ERROR","未登录,请先运行 'yunke crm.auth.login' 登录");return{token:n.token,user_id:n.user_id,company_code:n.company_code||""}}async function u(n,i,o){let{token:b,user_id:w,company_code:l}=r9(),x={...a9,userid:w,token:b,company:l,"content-type":"application/json",...o?.headers};if(o?.needOrigin)x.origin=p4();if(o?.formData)x["content-type"]="application/x-www-form-urlencoded; charset=UTF-8";let $=`${p4()}${n}`;if(o?.method==="GET"){let X=new URLSearchParams;for(let[W,G]of Object.entries(i))if(G!==void 0&&G!==null)X.set(W,String(G));$+=`?${X.toString()}`}let v;if(o?.method!=="GET")if(o?.formData){let X=new URLSearchParams;for(let[W,G]of Object.entries(i))if(G!==void 0&&G!==null)X.set(W,String(G));v=X.toString()}else v=JSON.stringify(i);let H=await fetch($,{method:o?.method??"POST",headers:x,body:v});if(!H.ok)throw new M("EXECUTION_FAILED",`CRM 请求失败: HTTP ${H.status}`);let _=await H.json();if(!_.success&&_.code!==1e4)throw new M("EXECUTION_FAILED",_.message||_.msg||"CRM 业务失败");if(o?.rawResponse)return _;return _.data??_}function eo(){return e()?.company_code||""}async function f(){let i=(await u("/usercenter/dept/tree",{id:"",showUser:!1,showUserStatus:"",queryQywxStatus:!1})).find((o)=>o.isDept);if(!i)throw new M("EXECUTION_FAILED","无法获取默认部门 ID");return i.id}var J4="crm",e9=m.object({id:m.string(),pid:m.string(),name:m.string(),is_dept:m.boolean(),bind_qywx:m.boolean(),offline_days:m.number(),sort:m.number(),account:m.string().nullable().optional(),phone_number:m.string().nullable().optional(),user_type:m.number().nullable().optional()}),s9=m.object({id:m.string(),pid:m.string(),name:m.string(),is_dept:m.boolean(),department_path:m.string(),routes:m.array(m.string()),bind_qywx:m.boolean(),offline_days:m.number(),sort:m.number(),account:m.string().nullable().optional(),phone_number:m.string().nullable().optional(),has_phone:m.boolean().nullable().optional(),user_type:m.number().nullable().optional()}),X4={name:"crm.org.department-tree",description:"查询指定部门下的子部门和员工列表(单级,不递归)。dept_id 为空时查根节点。",category:"crm",pluginName:J4,parameters:m.object({dept_id:m.string().optional().default("").describe("父部门 ID,空字符串表示根节点"),show_user:m.boolean().optional().default(!0).describe("是否返回员工节点"),show_user_status:m.string().optional().default("").describe("过滤员工状态"),query_qywx_status:m.boolean().optional().default(!1).describe("是否查询企业微信绑定状态")}),returns:m.object({items:m.array(e9)}),examples:[{description:"查询根节点",input:{},output:{items:[{id:"dept001",pid:"",name:"销售部",is_dept:!0,bind_qywx:!1,offline_days:0,sort:1}]}},{description:"查询指定部门的子节点",input:{dept_id:"dept001"},output:{items:[{id:"u001",pid:"dept001",name:"张三",is_dept:!1,bind_qywx:!1,offline_days:0,sort:1,phone_number:"13800138000"}]}}],sideEffects:["network"],handler:async({dept_id:n,show_user:i,show_user_status:o,query_qywx_status:b})=>{return{items:(await u("/usercenter/dept/tree",{id:n,showUser:i,showUserStatus:o,queryQywxStatus:b})??[]).map((l)=>({id:String(l.id??""),pid:String(l.pid??""),name:String(l.name??""),is_dept:Boolean(l.isDept),bind_qywx:Boolean(l.bindQywx),offline_days:Number(l.offlineDays??0),sort:Number(l.sort??0),account:l.account??null,phone_number:l.phoneNumber??null,user_type:l.userType??null}))}}},Y4={name:"crm.org.search",description:"通过关键词模糊搜索部门和员工。search_type: 1=仅部门, 2=仅员工, 3=全部(默认)。",category:"crm",pluginName:J4,parameters:m.object({keyword:m.string().min(1).describe("搜索关键词"),search_type:m.number().int().min(1).max(3).optional().default(3).describe("1=仅部门 2=仅员工 3=全部"),limit:m.number().int().min(1).max(100).optional().default(20).describe("返回条数上限"),phone_only:m.boolean().optional().default(!1).describe("仅返回有手机号的员工")}),returns:m.object({total:m.number(),results:m.array(s9)}),examples:[{description:'搜索关键词"张"',input:{keyword:"张"},output:{total:1,results:[{id:"u001",pid:"dept001",name:"张三",is_dept:!1,department_path:"销售部",routes:["dept001"],bind_qywx:!1,offline_days:0,sort:1}]}}],sideEffects:["network"],handler:async({keyword:n,search_type:i,limit:o,phone_only:b})=>{let w=await u("/usercenter/dept/search",{keyword:n.trim(),type:i,limit:o,phoneOnly:b,showUserStatus:"",queryQywxStatus:!1},{needOrigin:!0,rawResponse:!0}),l=(w.data??[]).map((x)=>{let $=x.routes??[];return{id:String(x.id??""),pid:String(x.pid??""),name:String(x.name??""),is_dept:Boolean(x.isDept),routes:$,department_path:$.join("/"),bind_qywx:Boolean(x.bindQywx),offline_days:Number(x.offlineDays??0),sort:Number(x.sort??0),account:x.account??null,phone_number:x.phoneNumber??null,has_phone:Boolean(x.phoneNumber),user_type:x.userType??null}});return{total:w.total??l.length,results:l}}};var mi="crm";function Q4(n){return String(n).padStart(2,"0")}function W4(n){return`${n.getFullYear()}-${Q4(n.getMonth()+1)}-${Q4(n.getDate())}`}var q4=m.object({show_name:m.string(),field_code:m.string(),module:m.string(),hidden:m.boolean()}),n5=m.object({option:m.number(),modules:m.array(m.string()),columns:m.array(q4)}),u4={name:"crm.report.employee-statistics",description:"获取员工报表统计数据。option=department 为部门维度,option=employee 为员工维度。",category:"crm",pluginName:mi,parameters:m.object({option:m.enum(["department","employee"]).optional().default("employee").describe("统计维度:department=部门维度,employee=员工维度,默认 employee"),depart_id:m.string().optional().default("").describe("部门 ID,空字符串表示全公司"),start_time:m.string().optional().default("").describe("开始时间,格式 YYYY-MM-DD,如 2026-04-01"),end_time:m.string().optional().default("").describe("结束时间,格式 YYYY-MM-DD,如 2026-04-08"),page:m.number().int().min(1).optional().default(1).describe("页码"),page_size:m.number().int().min(1).max(100).optional().default(10).describe("每页条数")}),returns:m.object({heads:n5,total:m.number(),page:m.number(),page_size:m.number(),rows:m.array(m.record(m.unknown()))}),examples:[{description:"查询部门维度报表(第1页)",input:{option:"department",start_time:"2026-04-01",end_time:"2026-04-08"},output:{heads:{option:0,modules:["base"],columns:[{show_name:"部门",field_code:"dept_name",module:"base",hidden:!1}]},total:5,page:1,page_size:10,rows:[{dept_name:"销售部",total_calls:120}]}},{description:"查询员工维度报表",input:{option:"employee",start_time:"2026-04-01",end_time:"2026-04-08"},output:{heads:{option:1,modules:["base"],columns:[{show_name:"姓名",field_code:"name",module:"base",hidden:!1}]},total:20,page:1,page_size:10,rows:[{name:"张三",total_calls:50}]}}],sideEffects:["network"],handler:async({option:n,depart_id:i,start_time:o,end_time:b,page:w,page_size:l})=>{let x=n==="department"?0:1,$=new Date,v=b||W4($),H=o||W4(new Date($.getTime()-518400000)),[_,X]=await Promise.all([u("/yunke-report-phone/custom/Report/getHead",{departId:i,option:x},{method:"GET"}),u("/yunke-report-phone/custom/Report/getDataView",{option:x,departId:i,pageSize:l,starttime:H,endtime:v,page:w})]),W=(_.customShowHeads??[]).map((G)=>({show_name:String(G.showName??""),field_code:String(G.fieldCode??""),module:String(G.module??""),hidden:Number(G.hiddens)===1}));return{heads:{option:_.option??x,modules:_.modules??[],columns:W},total:X.total??0,page:w,page_size:l,rows:X.list??[]}}},so=m.union([m.array(m.string()),m.string()]).transform((n)=>{if(Array.isArray(n))return n;try{return JSON.parse(n)}catch{return[n]}}),M4={name:"crm.report.custom-report-columns",description:"查询员工自定义报表的列配置(已启用字段及所有可配字段)。",category:"crm",pluginName:mi,parameters:m.object({depart_id:m.string().optional().default("").describe("部门 ID,空则取默认部门")}),returns:m.object({option:m.number(),modules:m.array(m.string()),columns:m.array(q4)}).passthrough(),examples:[{description:"查询默认部门报表列配置",input:{},output:{option:1,modules:["微信","短信","通话"],columns:[{show_name:"发送消息数量",field_code:"wechatOutMsg",module:"微信",hidden:!1}]}}],sideEffects:["network"],handler:async({depart_id:n})=>{let i=n||await f();return await u("/yunke-report-phone/custom/Report/getHead",{departId:i},{method:"GET"})}},O4={name:"crm.report.set-custom-report-columns",description:"设置员工自定义报表的列配置(从 custom-report-columns 取得后修改 hiddens 再传入)。",category:"crm",pluginName:mi,parameters:m.object({custom_show_heads:m.string().describe("列配置 JSON 字符串(从 custom-report-columns 取得后修改)"),option:m.number().int().optional().default(1).describe("统计维度:0=部门,1=员工,默认 1"),modules:so.optional().default(["微信","短信","通话"]).describe("启用模块"),max_rank:m.number().int().optional().default(8).describe("排名上限"),min_rank:m.number().int().optional().default(1).describe("排名下限")}),returns:m.object({}).passthrough(),examples:[{description:"设置列配置",input:{custom_show_heads:'[{"fieldCode":"wechatOutMsg","showName":"发送消息","module":"微信","hiddens":0,"userPower":false}]'},output:{}}],sideEffects:["network"],handler:async({custom_show_heads:n,option:i,modules:o,max_rank:b,min_rank:w})=>{let l;try{l=JSON.parse(n)}catch{throw new M("VALIDATION_FAILED","custom_show_heads 不是合法 JSON")}return await u("/yunke-report-phone/custom/Report/setHead",{option:i,modules:o,maxRank:b,minRank:w,customShowHeads:l})}},G4={name:"crm.report.customer-statistics",description:"查询客户统计(新增/跟进/待跟进/成交等指标,含环比对比)。",category:"crm",pluginName:mi,parameters:m.object({department_ids:so.describe("部门 ID 列表(JSON 字符串或数组)"),user_ids:so.optional().default([]).describe("用户 ID 列表,空则查部门下全部"),time_range:m.number().int().optional().default(2).describe("时间范围:2=昨日 3=近7日 4=近15日 5=近30日")}),returns:m.object({}).passthrough(),examples:[{description:"查询部门客户统计(近7日)",input:{department_ids:'["DEPT001"]',time_range:3},output:{}}],sideEffects:["network"],handler:async({department_ids:n,user_ids:i,time_range:o})=>{return await u("/pc/customer-metrics-stats/metrics",{userIds:i,departmentIds:n,timeRange:o})}},C4={name:"crm.report.device-usage-statistics",description:"查询设备/应用使用时长统计。",category:"crm",pluginName:mi,parameters:m.object({page_num:m.number().int().min(1).optional().default(1).describe("页码"),page_size:m.number().int().min(1).max(10).optional().default(5).describe("每页条数"),search_type:m.number().int().optional().default(1).describe("搜索类型,默认 1"),sort_type:m.string().optional().default("desc").describe("排序:desc/asc"),user_id:m.string().optional().default("").describe("用户 ID,空则查部门下全部"),range:m.number().int().optional().default(0).describe("时间范围代码:0=今天 -1=昨天 -32=自定义"),range_str:m.string().optional().default("").describe('自定义时间范围,range=-32 时用,格式 "开始,结束"'),department_id:m.string().optional().default("").describe("部门 ID,空则取默认部门")}),returns:m.object({}).passthrough(),examples:[{description:"查询设备应用使用时长(今天)",input:{},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.department_id||await f();return await u("/pc/appstatistics/apps",{pageNum:n.page_num,pageSize:n.page_size,searchType:n.search_type,sortType:n.sort_type,userId:n.user_id,range:n.range,rangeStr:n.range_str,departmentId:i})}};var i5="crm",j4={name:"crm.report.device-statistics",description:"查询设备统计(总数/已绑定/锁定/激活)。department_id 空则取默认部门。",category:"crm",pluginName:i5,parameters:m.object({department_id:m.string().optional().default("").describe("部门 ID,空则取默认部门"),user_id:m.string().optional().default("").describe("用户 ID,空则查部门下全部")}),returns:m.object({total:m.number(),has_bind:m.number(),locked:m.number(),actived:m.number()}),examples:[{description:"查询默认部门设备统计",input:{},output:{total:10,has_bind:8,locked:1,actived:7}}],sideEffects:["network"],handler:async({department_id:n,user_id:i})=>{let o=n||await f(),b=await u("/pc/setup/deviceStatistics",{departmentId:o,userId:i});return{total:b.total,has_bind:b.hasBind,locked:b.locked,actived:b.actived}}};var h4="crm";function B4(n){return String(n).padStart(2,"0")}function V4(n,i=!1){return`${n.getFullYear()}-${B4(n.getMonth()+1)}-${B4(n.getDate())} ${i?"23:59:59":"00:00:00"}`}var o5=m.object({user_id:m.string(),user_name:m.string(),longitude:m.number().nullable(),latitude:m.number().nullable(),addr:m.string(),created_time:m.string(),last_online_time:m.string(),active_type:m.number(),in_or_out:m.number(),in_or_out_name:m.string(),loc_duration:m.number(),location_exception:m.number()}),f4={name:"crm.location.by-department",description:"查询指定部门所有员工的最后一次定位记录。建议先用 org.search 或 org.department-tree 缩小部门范围。",category:"crm",pluginName:h4,parameters:m.object({department_id:m.string().min(1).describe("部门 ID(可通过 org.search / org.department-tree 获取)"),device_code:m.string().optional().default("").describe("设备编码,空则不过滤")}),returns:m.object({total:m.number(),records:m.array(o5)}),examples:[{description:"查询部门员工最后定位",input:{department_id:"DEPT001"},output:{total:1,records:[{user_id:"u001",user_name:"张三",longitude:116.4,latitude:39.9,addr:"北京市",created_time:"2026-08-01 10:00:00",last_online_time:"2026-08-01 10:00:00",active_type:1,in_or_out:3,in_or_out_name:"未知",loc_duration:0,location_exception:0}]}}],sideEffects:["network"],handler:async({department_id:n,device_code:i})=>{let b=(await u("/pc/location/getEveryoneLastRecord",{departmentId:n,deviceCode:i})??[]).map((w)=>({user_id:String(w.userId??""),user_name:String(w.userName??""),longitude:w.longitude??null,latitude:w.latitude??null,addr:String(w.addr??""),created_time:String(w.createdTime??""),last_online_time:String(w.lastOnlineTime??""),active_type:Number(w.activeType??0),in_or_out:Number(w.inOrOut??3),in_or_out_name:String(w.inOrOutName??"未知"),loc_duration:Number(w.locDuration??0),location_exception:Number(w.locationException??0)}));return{total:b.length,records:b}}},m5=m.object({user_id:m.string(),longitude:m.number().nullable(),latitude:m.number().nullable(),addr:m.string(),created_time:m.string(),start_time:m.string(),end_time:m.string(),loc_duration:m.number(),in_or_out:m.number(),in_or_out_name:m.string(),active_type:m.number(),location_exception:m.number()}),L4={name:"crm.location.by-user",description:"查询指定员工在时间段内的定位轨迹。建议显式传入较短时间范围,不要依赖默认近30天。",category:"crm",pluginName:h4,parameters:m.object({user_id:m.string().min(1).describe("员工用户 ID(可通过 org.search 获取)"),start_time:m.string().optional().default("").describe("开始时间 YYYY-MM-DD HH:mm:ss,空则默认近30天"),end_time:m.string().optional().default("").describe("结束时间 YYYY-MM-DD HH:mm:ss,空则默认今天"),device_code:m.string().optional().default("").describe("设备编码,空则不过滤")}),returns:m.object({total:m.number(),records:m.array(m5)}),examples:[{description:"查询员工某天轨迹",input:{user_id:"u001",start_time:"2026-08-01 00:00:00",end_time:"2026-08-01 23:59:59"},output:{total:1,records:[{user_id:"u001",longitude:116.4,latitude:39.9,addr:"北京市",created_time:"2026-08-01 10:00:00",start_time:"2026-08-01 09:00:00",end_time:"2026-08-01 12:00:00",loc_duration:10800000,in_or_out:3,in_or_out_name:"未知",active_type:1,location_exception:0}]}}],sideEffects:["network"],handler:async({user_id:n,start_time:i,end_time:o,device_code:b})=>{let w=new Date,l=o||V4(w,!0),x=i||V4(new Date(w.getTime()-2592000000),!1),$=await u("/pc/location/getLocRecordByUserId",{userId:n,createTimeRange:{start:x,end:l},deviceCode:b}),v=($?.list??[]).map((H)=>({user_id:String(H.userId??n),longitude:H.longitude??null,latitude:H.latitude??null,addr:String(H.addr??""),created_time:String(H.createdTime??""),start_time:String(H.starttime??""),end_time:String(H.endtime??""),loc_duration:Number(H.locDuration??0),in_or_out:Number(H.inOrOut??3),in_or_out_name:String(H.inOrOutName??"未知"),active_type:Number(H.activeType??0),location_exception:Number(H.locationException??0)}));return{total:$?.total??v.length,records:v}}};var K4="crm",n1=m.union([m.string(),m.number()]).transform((n)=>String(n)),D4={name:"crm.call.log-list",description:"获取通话记录列表。后端每页最多 10 条;pageCount > 当前页时需翻页取全后再汇总。",category:"crm",pluginName:K4,parameters:m.object({page:m.number().int().min(1).optional().default(1).describe("页码,从 1 开始"),page_size:m.number().int().min(1).max(10).optional().default(5).describe("每页条数,建议 5-10"),sales_progress:m.string().optional().default("").describe("销售进度"),start_voice_time:m.string().optional().default("").describe("语音开始时间 YYYY-MM-DD HH:mm:ss"),end_voice_time:m.string().optional().default("").describe("语音结束时间"),start_create_time:m.string().optional().default("").describe("创建开始时间"),end_create_time:m.string().optional().default("").describe("创建结束时间"),search_info:m.string().optional().default("").describe("搜索关键词(客户名/公司等)"),last_connect_time_start:m.string().optional().default("").describe("最后连接开始时间"),last_connect_time_end:m.string().optional().default("").describe("最后连接结束时间"),filter_user_id:n1.optional().default("").describe("按员工用户 ID 筛选"),tip_type:m.string().optional().default("").describe("提示类型"),progress:m.string().optional().default("").describe("进度状态"),call_seconds:m.string().optional().default("").describe("通话秒数筛选"),department_id:m.string().optional().default("").describe("部门 ID,空则取默认部门"),search_phone:n1.optional().default("").describe("按电话号码搜索"),call_id:n1.optional().default("").describe("通话记录 ID"),call_type:m.string().optional().default("s").describe("通话类型,默认 s")}),returns:m.object({page:m.number(),pageCount:m.number(),totalCount:m.number(),data:m.array(m.unknown())}).passthrough(),examples:[{description:"获取第 1 页通话记录",input:{page:1,page_size:5},output:{page:1,pageCount:3,totalCount:15,data:[]}}],sideEffects:["network"],handler:async(n)=>{let i=n.department_id||await f();return await u("/pc/callLog/list",{page:n.page,pageSize:n.page_size,salesProgress:n.sales_progress,startVoiceTime:n.start_voice_time,endVoiceTime:n.end_voice_time,startCreateTime:n.start_create_time,endCreateTime:n.end_create_time,searchInfo:n.search_info,lastConnectTimeStart:n.last_connect_time_start,lastConnectTimeEnd:n.last_connect_time_end,userId:n.filter_user_id,tipType:n.tip_type,progress:n.progress,callSeconds:n.call_seconds,departmentId:i,searchPhone:n.search_phone,id:n.call_id,callType:n.call_type})}},A4={name:"crm.call.asr-result",description:"获取通话录音的 ASR 语音转写结果。",category:"crm",pluginName:K4,parameters:m.object({call_action_id:m.string().min(1).describe("通话 ID"),audio_url:m.string().optional().default("").describe("音频文件 URL(可选)"),call_type:m.string().optional().default("1").describe("录音类型:1=通话,12=本地录音")}),returns:m.object({trans_complete:m.number(),asr_result:m.array(m.unknown()),message:m.string()}),examples:[{description:"获取通话录音的 ASR 转写结果",input:{call_action_id:"123456",call_type:"1"},output:{trans_complete:1,asr_result:[],message:""}}],sideEffects:["network"],handler:async({call_action_id:n,audio_url:i,call_type:o})=>{let b=await u("/pc/trans/transWord",{businessId:n,callActionId:n,isTrans:1,number:1,url:i,phone:"",type:o});return{trans_complete:b.transComplete??0,asr_result:b.asrResult??[],message:b.message??""}}};var bi="crm",b5=m.union([m.string(),m.number()]).transform((n)=>String(n)),N4=m.union([m.array(m.string()),m.string()]).transform((n)=>{if(Array.isArray(n))return n;try{return JSON.parse(n)}catch{return[n]}});function R4(n){return new Date(n.replace(" ","T")).getTime()}var E4={name:"crm.misc.fly-order-warning",description:"查询飞单预警分析列表,检测员工可能的飞单行为。",category:"crm",pluginName:bi,parameters:m.object({start_time:m.string().describe("开始时间 yyyy-MM-dd HH:mm:ss"),end_time:m.string().describe("结束时间 yyyy-MM-dd HH:mm:ss"),page_index:m.number().int().min(1).optional().default(1).describe("页码"),page_size:m.number().int().min(1).max(10).optional().default(5).describe("每页条数"),dept_id:m.string().optional().default("").describe("部门 ID,空则取默认部门"),user_id:m.string().optional().default("").describe("员工 ID"),user_ids:N4.optional().default([]).describe("员工 ID 列表"),search_type:m.number().int().optional().describe("搜索类型:1客户姓名 2客户手机号 3员工姓名 4员工手机号 5客户微信昵称 6客户微信号 7员工微信昵称 8员工微信号"),keyword:m.string().optional().default("").describe("搜索关键词"),ctype:m.number().int().optional().describe("沟通类型:1电话 2微信 3微信长语音"),sort_field:m.number().int().optional().describe("排序字段:1分析时间 2沟通时间"),sort_order:m.string().optional().default("").describe("排序:asc/desc"),range_field:m.number().int().optional().describe("过滤时间字段:1分析时间 2沟通时间"),call_second_type:m.number().int().optional().describe("通话时长类型"),call_percent:m.number().int().optional().describe("员工通话占比"),call_speed:m.number().int().optional().describe("语速"),missing_topic:N4.optional().default([]).describe("飞单话题筛选列表")}),returns:m.object({}).passthrough(),examples:[{description:"查询飞单预警",input:{start_time:"2026-07-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.dept_id||await f();return await u("/pc/ai/analyse/employee/orderMissing/list",{pageIndex:n.page_index,pageSize:n.page_size,startTime:n.start_time,endTime:n.end_time,dptId:i,userId:n.user_id,userIds:n.user_ids,type:n.search_type,keyword:n.keyword,ctype:n.ctype,sortField:n.sort_field,sortOrder:n.sort_order,rangeField:n.range_field,callSecondType:n.call_second_type,callPercent:n.call_percent,callSpeed:n.call_speed,missingTopic:n.missing_topic})}},S4={name:"crm.misc.sms-history",description:"查询短信历史记录列表。",category:"crm",pluginName:bi,parameters:m.object({page:m.number().int().min(1).optional().default(1).describe("页码"),page_size:m.number().int().min(1).max(10).optional().default(5).describe("每页条数"),customer_id:m.string().optional().default("").describe("客户 ID"),customer_name:m.string().optional().default("").describe("客户姓名"),customer_phone:b5.optional().default("").describe("客户手机号"),start_time:m.string().optional().default("").describe("开始时间"),end_time:m.string().optional().default("").describe("结束时间")}),returns:m.object({}).passthrough(),examples:[{description:"查询短信记录",input:{},output:{}}],sideEffects:["network"],handler:async({page:n,page_size:i,customer_id:o,customer_name:b,customer_phone:w,start_time:l,end_time:x})=>{return await u("/pc/customer/smsLogsList",{page:n,pageSize:i,customerId:o,customerName:b,customerPhone:w,startTime:l,endTime:x})}},U4={name:"crm.misc.site-recording",description:"查询现场录音或工牌录音列表。",category:"crm",pluginName:bi,parameters:m.object({start_time:m.string().describe("开始时间"),end_time:m.string().describe("结束时间"),page_index:m.number().int().min(1).optional().default(1).describe("页码"),page_size:m.number().int().min(1).max(10).optional().default(5).describe("每页条数"),device_type:m.number().int().optional().default(0).describe("设备类型:0=现场录音 1=工牌录音"),user_id:m.string().optional().default("").describe("员工 ID"),user_name:m.string().optional().default("").describe("员工姓名"),dept_id:m.string().optional().default("").describe("部门 ID,空则取默认部门")}),returns:m.object({}).passthrough(),examples:[{description:"查询现场录音",input:{start_time:"2026-07-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.dept_id||await f();return await u("/pc/voice/queryvoicelist",{pageIndex:n.page_index,pageSize:n.page_size,startTime:n.start_time,endTime:n.end_time,deviceType:n.device_type,userId:n.user_id,userName:n.user_name,deptId:i})}},c4={name:"crm.misc.control-logs",description:"查询管控日志列表(开始/结束时间转毫秒时间戳传后端)。",category:"crm",pluginName:bi,parameters:m.object({start_time:m.string().describe("开始时间 yyyy-MM-dd HH:mm:ss"),end_time:m.string().describe("结束时间 yyyy-MM-dd HH:mm:ss"),page_num:m.number().int().min(1).optional().default(1).describe("页码"),page_size:m.number().int().min(1).max(10).optional().default(5).describe("每页条数")}),returns:m.object({}).passthrough(),hidden:!0,examples:[{description:"查询管控日志",input:{start_time:"2026-08-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async({start_time:n,end_time:i,page_num:o,page_size:b})=>{return await u("/wxz/web/config/get_control_log_list",{pageNum:o,pageSize:b,phone:"",name:"",type:"",status:"",startTriggerTime:R4(n),endTriggerTime:R4(i),showTime:[]},{headers:{source:"h5",package:"com.applet.manage",channel:"4"}})}},w5=new Set(["menus","themeConfig","showfieldHead","showfieldHeadShow"]),k4={name:"crm.user.info",description:"获取当前登录用户的关键信息(基础身份、权限、部门、角色),已过滤 menus/themeConfig 等大字段。可作为需要 userId/departmentId 的前置调用。",category:"crm",pluginName:bi,parameters:m.object({}),returns:m.object({}).passthrough(),examples:[{description:"获取当前用户信息",input:{},output:{id:"u001",real_name:"张三",role_name:"管理员"}}],sideEffects:["network"],handler:async()=>{let n=await u("/pc/home/userInfo",{});return Object.fromEntries(Object.entries(n).filter(([i])=>!w5.has(i)))}};var T="crm";function $n(n){return String(n).padStart(2,"0")}function g4(){let n=new Date;return`${n.getFullYear()}-${$n(n.getMonth()+1)}-${$n(n.getDate())}`}function P4(n){let i=new Date(Date.now()-n*86400000);return`${i.getFullYear()}-${$n(i.getMonth()+1)}-${$n(i.getDate())}`}function l5(){let n=new Date;return`${n.getFullYear()}-${$n(n.getMonth()+1)}-${$n(n.getDate())} ${$n(n.getHours())}:${$n(n.getMinutes())}:${$n(n.getSeconds())}`}function x5(n){let i=new Date(Date.now()-n*86400000);return`${i.getFullYear()}-${$n(i.getMonth()+1)}-${$n(i.getDate())} 00:00:00`}function F4(n,i){if(n.length>10)return n;return`${n} ${i?"23:59:59":"00:00:00"}`}var y4={name:"crm.wechat.customer-list",description:"查询微信客户列表(销售微信统计)。后端每页上限 10。",category:"crm",pluginName:T,parameters:m.object({page:m.number().int().min(1).optional().default(1).describe("页码"),page_size:m.number().int().min(1).max(10).optional().default(5).describe("每页条数,后端上限 10"),department_id:m.string().optional().default("").describe("部门 ID,空则取默认部门"),start_date:m.string().optional().default("").describe("开始日期 YYYY-MM-DD,空则近3天"),end_date:m.string().optional().default("").describe("结束日期 YYYY-MM-DD,空则今天"),sales_name:m.string().optional().default("").describe("销售名称"),user_id:m.string().optional().default("").describe("用户 ID"),wechat_nick_name:m.string().optional().default("").describe("微信昵称"),is_on_job:m.number().int().optional().default(1).describe("是否在职 1=在职 0=离职")}),returns:m.object({}).passthrough(),examples:[{description:"查询微信客户统计",input:{},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.department_id||await f(),o=n.end_date||g4(),b=n.start_date||P4(3);return await u("/pc/wechatcount/salesList",{salesname:n.sales_name,page:n.page,pageSize:n.page_size,isOnJob:n.is_on_job,departmentId:i,userId:n.user_id,startdate:b,enddate:o,weChatNickName:n.wechat_nick_name},{formData:!0})}},T4={name:"crm.wechat.moments-statistics",description:"查询微信朋友圈统计数据。",category:"crm",pluginName:T,parameters:m.object({page:m.number().int().min(1).optional().default(1).describe("页码"),page_size:m.number().int().min(1).max(10).optional().default(5).describe("每页条数"),department_id:m.string().optional().default("").describe("部门 ID,空则取默认部门"),start_date:m.string().optional().default("").describe("开始日期 YYYY-MM-DD,空则近3天"),end_date:m.string().optional().default("").describe("结束日期 YYYY-MM-DD,空则今天"),sales_name:m.string().optional().default("").describe("销售名称"),user_id:m.string().optional().default("").describe("用户 ID"),is_on_job:m.number().int().optional().default(1).describe("是否在职")}),returns:m.object({}).passthrough(),examples:[{description:"查询朋友圈统计",input:{},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.department_id||await f(),o=n.end_date||g4(),b=n.start_date||P4(3);return await u("/pc/wechatcount/friendsCircleStatisticsList",{isOnJob:n.is_on_job,departmentId:i,userId:n.user_id,salesname:n.sales_name,page:n.page,pageSize:n.page_size,startDate:b,endDate:o})}},t4={name:"crm.wechat.new-friends-list",description:"查询微信新增好友列表。",category:"crm",pluginName:T,parameters:m.object({page_num:m.number().int().min(1).optional().default(1).describe("页码"),page_size:m.number().int().min(1).max(10).optional().default(5).describe("每页条数"),department_id:m.string().optional().default("").describe("部门 ID,空则取默认部门"),start_time:m.string().optional().default("").describe("开始时间 YYYY-MM-DD HH:mm:ss,空则近3天"),end_time:m.string().optional().default("").describe("结束时间 YYYY-MM-DD HH:mm:ss,空则今天"),user_id:m.string().optional().default("").describe("用户 ID"),keyword:m.string().optional().default("").describe("关键词")}),returns:m.object({}).passthrough(),examples:[{description:"查询新增好友",input:{},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.department_id||await f(),o=n.end_time||l5(),b=n.start_time||x5(3);return await u("/pc/wechat/addFriendList",{departmentId:i,userId:n.user_id,keyword:n.keyword,pageNum:n.page_num,pageSize:n.page_size,start:b,end:o})}},I4={name:"crm.wechat.employee-wechat-list",description:"查询员工微信列表(企业微信绑定情况)。后端每页上限 100。",category:"crm",pluginName:T,parameters:m.object({start_date:m.string().describe("开始日期 YYYY-MM-DD"),end_date:m.string().describe("结束日期 YYYY-MM-DD"),page:m.number().int().min(1).optional().default(1).describe("页码"),page_size:m.number().int().min(1).max(100).optional().default(100).describe("每页条数,后端上限 100"),dept_id:m.string().optional().default("").describe("部门 ID,空则取默认部门"),user_name:m.string().optional().default("").describe("员工姓名")}),returns:m.object({}).passthrough(),examples:[{description:"查询员工微信列表",input:{start_date:"2026-08-01",end_date:"2026-08-05"},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.dept_id||await f();return await u("/pc/wechatcount/salesList",{page:n.page,pageSize:n.page_size,startdate:n.start_date,enddate:n.end_date,departmentId:i,userName:n.user_name},{formData:!0})}},Z4={name:"crm.wechat.daily-new-friends-time",description:"查询微信新增好友按时段统计。",category:"crm",pluginName:T,parameters:m.object({start_time:m.string().describe("开始时间 YYYY-MM-DD HH:mm:ss"),end_time:m.string().describe("结束时间 YYYY-MM-DD HH:mm:ss"),page:m.number().int().min(1).optional().default(1).describe("页码"),page_size:m.number().int().min(1).max(10).optional().default(5).describe("每页条数"),user_id:m.string().optional().default("").describe("用户 ID"),dept_id:m.string().optional().default("").describe("部门 ID,空则取默认部门")}),returns:m.object({}).passthrough(),examples:[{description:"查询新增好友时段",input:{start_time:"2026-08-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.dept_id||await f();return await u("/pc/wechat/addFriendHourList",{page:n.page,pageSize:n.page_size,start:n.start_time,end:n.end_time,userId:n.user_id,deptId:i})}},z4={name:"crm.wechat.voice-call-list",description:"查询微信语音通话列表。",category:"crm",pluginName:T,parameters:m.object({start_time:m.string().describe("开始时间 YYYY-MM-DD HH:mm:ss"),end_time:m.string().describe("结束时间 YYYY-MM-DD HH:mm:ss"),page_num:m.number().int().min(1).optional().default(1).describe("页码"),page_size:m.number().int().min(1).max(10).optional().default(5).describe("每页条数"),user_id:m.string().optional().default("").describe("用户 ID"),dept_id:m.string().optional().default("").describe("部门 ID,空则取默认部门")}),returns:m.object({}).passthrough(),examples:[{description:"查询微信语音通话",input:{start_time:"2026-08-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.dept_id||await f();return await u("/wechatweb/callRecord/queryWeChatVoiceList",{pageNum:n.page_num,pageSize:n.page_size,startTime:n.start_time,endTime:n.end_time,departmentId:i,userId:n.user_id,callSource:"0",isRoom:"0",duration:{},durationMin:"",durationMax:"",sort:"",ids:[]})}},d4={name:"crm.wechat.group-statistics",description:"查询微信群统计。时间可传日期或日期时间(自动补齐时分秒)。",category:"crm",pluginName:T,parameters:m.object({start_time:m.string().describe("开始时间 YYYY-MM-DD 或 YYYY-MM-DD HH:mm:ss"),end_time:m.string().describe("结束时间 YYYY-MM-DD 或 YYYY-MM-DD HH:mm:ss"),page_num:m.number().int().min(1).optional().default(1).describe("页码"),page_size:m.number().int().min(1).max(10).optional().default(5).describe("每页条数"),user_id:m.string().optional().default("").describe("用户 ID"),dept_id:m.string().optional().default("").describe("部门 ID,空则取默认部门")}),returns:m.object({}).passthrough(),examples:[{description:"查询微信群统计",input:{start_time:"2026-08-01",end_time:"2026-08-05"},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.dept_id||await f();return await u("/pc/wechatcount/getChatroomList",{pageNum:n.page_num,pageSize:n.page_size,startTime:F4(n.start_time,!1),endTime:F4(n.end_time,!0),userId:n.user_id,departmentId:i},{formData:!0})}},a4={name:"crm.wechat.repeat-friends-statistics",description:"查询重复好友统计。resolve_type: 0=未处理 1=已处理 2=已忽略。",category:"crm",pluginName:T,parameters:m.object({page_num:m.number().int().min(1).optional().default(1).describe("页码"),page_size:m.number().int().min(1).max(10).optional().default(5).describe("每页条数"),dept_id:m.string().optional().default("").describe("部门 ID,空则取默认部门"),resolve_type:m.number().int().optional().default(0).describe("0=未处理 1=已处理 2=已忽略")}),returns:m.object({}).passthrough(),examples:[{description:"查询重复好友",input:{},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.dept_id||await f();return await u("/wechatweb/wxFriends/repeat_friends/es",{pageNum:n.page_num,pageSize:n.page_size,deptId:i,resolveType:n.resolve_type})}},r4={name:"crm.wechat.verification-messages",description:"查询微信验证消息(好友申请)。",category:"crm",pluginName:T,parameters:m.object({start_time:m.string().describe("开始时间 YYYY-MM-DD HH:mm:ss"),end_time:m.string().describe("结束时间 YYYY-MM-DD HH:mm:ss"),page_num:m.number().int().min(1).optional().default(1).describe("页码"),page_size:m.number().int().min(1).max(10).optional().default(5).describe("每页条数"),user_id:m.string().optional().default("").describe("用户 ID"),dept_id:m.string().optional().default("").describe("部门 ID,空则取默认部门")}),returns:m.object({}).passthrough(),examples:[{description:"查询验证消息",input:{start_time:"2026-08-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.dept_id||await f();return await u("/pc/wechat/applyMsgTalkList",{pageNum:n.page_num,pageSize:n.page_size,startTime:n.start_time,endTime:n.end_time,userId:n.user_id,deptId:i})}},e4={name:"crm.wechat.risk-control-stats",description:"查询微信风控统计(看板汇总,无分页)。",category:"crm",pluginName:T,parameters:m.object({start_time:m.string().describe("开始日期 YYYY-MM-DD"),end_time:m.string().describe("结束日期 YYYY-MM-DD"),dept_id:m.string().optional().default("").describe("部门 ID,空则取默认部门")}),returns:m.object({}).passthrough(),examples:[{description:"查询风控统计",input:{start_time:"2026-08-01",end_time:"2026-08-05"},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.dept_id||await f();return await u("/pc/wechatcount/boardDate",{startdate:n.start_time,enddate:n.end_time,departmentId:i,userId:"",wechatId:"",type:"summary"},{formData:!0})}},s4={name:"crm.wechat.sensitive-operation-stats",description:"查询微信敏感操作统计。",category:"crm",pluginName:T,parameters:m.object({start_time:m.string().describe("开始时间 YYYY-MM-DD HH:mm:ss"),end_time:m.string().describe("结束时间 YYYY-MM-DD HH:mm:ss"),page_num:m.number().int().min(1).optional().default(1).describe("页码"),page_size:m.number().int().min(1).max(10).optional().default(5).describe("每页条数"),user_id:m.string().optional().default("").describe("用户 ID"),dept_id:m.string().optional().default("").describe("部门 ID,空则取默认部门")}),returns:m.object({}).passthrough(),examples:[{description:"查询敏感操作",input:{start_time:"2026-08-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.dept_id||await f();return await u("/wechatweb/sensitiveOperate/list",{pageNum:n.page_num,pageSize:n.page_size,startTime:n.start_time,endTime:n.end_time,userId:n.user_id,deptId:i})}},n6={name:"crm.wechat.sensitive-word-stats",description:"查询微信敏感词统计。",category:"crm",pluginName:T,parameters:m.object({start_time:m.string().describe("开始时间 YYYY-MM-DD HH:mm:ss"),end_time:m.string().describe("结束时间 YYYY-MM-DD HH:mm:ss"),page_num:m.number().int().min(1).optional().default(1).describe("页码"),page_size:m.number().int().min(1).max(10).optional().default(5).describe("每页条数"),dept_id:m.string().optional().default("").describe("部门 ID,空则取默认部门")}),returns:m.object({}).passthrough(),examples:[{description:"查询敏感词",input:{start_time:"2026-08-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.dept_id||await f();return await u("/wechatweb/sensitive/list",{pageNum:n.page_num,pageSize:n.page_size,start:n.start_time,end:n.end_time,departmentId:i,keyword:"",order:0,scopeStatistics:"",word:"",cateName:"",sensitiveStatus:"",messageType:1,needOriginalMsg:!0})}},i6={name:"crm.wechat.login-logs",description:"查询微信登录日志。",category:"crm",pluginName:T,parameters:m.object({start_time:m.string().describe("开始时间 YYYY-MM-DD HH:mm:ss"),end_time:m.string().describe("结束时间 YYYY-MM-DD HH:mm:ss"),page_num:m.number().int().min(1).optional().default(1).describe("页码"),page_size:m.number().int().min(1).max(10).optional().default(5).describe("每页条数"),user_id:m.string().optional().default("").describe("用户 ID"),dept_id:m.string().optional().default("").describe("部门 ID,空则取默认部门")}),returns:m.object({}).passthrough(),examples:[{description:"查询微信登录日志",input:{start_time:"2026-08-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.dept_id||await f();return await u("/wechatweb/log/get",{pageNum:n.page_num,pageSize:n.page_size,start:n.start_time,end:n.end_time,departmentId:i,userId:n.user_id})}},o6={name:"crm.wechat.friend-operation-logs",description:"查询微信好友操作日志。",category:"crm",pluginName:T,parameters:m.object({start_time:m.string().describe("开始时间 YYYY-MM-DD HH:mm:ss"),end_time:m.string().describe("结束时间 YYYY-MM-DD HH:mm:ss"),page_num:m.number().int().min(1).optional().default(1).describe("页码"),page_size:m.number().int().min(1).max(10).optional().default(5).describe("每页条数"),user_id:m.string().optional().default("").describe("用户 ID"),dept_id:m.string().optional().default("").describe("部门 ID,空则取默认部门")}),returns:m.object({}).passthrough(),examples:[{description:"查询好友操作日志",input:{start_time:"2026-08-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.dept_id||await f();return await u("/wechatweb/friendOperationLog/list",{pageNum:n.page_num,pageSize:n.page_size,startTime:n.start_time,endTime:n.end_time,userId:n.user_id,deptId:i})}},m6={name:"crm.wechat.banned-word-stats",description:"查询违禁词统计(/pc/wxz/ 接口,鉴权待验证)。",category:"crm",pluginName:T,parameters:m.object({start_time:m.string().describe("开始时间 YYYY-MM-DD HH:mm:ss"),end_time:m.string().describe("结束时间 YYYY-MM-DD HH:mm:ss"),page_num:m.number().int().min(1).optional().default(1).describe("页码"),page_size:m.number().int().min(1).max(10).optional().default(5).describe("每页条数"),user_id:m.string().optional().default("").describe("用户 ID"),dept_id:m.string().optional().default("").describe("部门 ID,空则取默认部门")}),returns:m.object({}).passthrough(),examples:[{description:"查询违禁词",input:{start_time:"2026-08-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.dept_id||await f();return await u("/pc/wzx/setting/get_words_trigger_list",{pageNum:n.page_num,pageSize:n.page_size,startTime:n.start_time,endTime:n.end_time,userId:n.user_id,deptId:i})}},b6={name:"crm.wechat.risk-message-stats",description:"查询微信风险消息统计(截图)。",category:"crm",pluginName:T,parameters:m.object({start_time:m.string().describe("开始时间 YYYY-MM-DD HH:mm:ss"),end_time:m.string().describe("结束时间 YYYY-MM-DD HH:mm:ss"),page_num:m.number().int().min(1).optional().default(1).describe("页码"),page_size:m.number().int().min(1).max(10).optional().default(5).describe("每页条数"),user_id:m.string().optional().default("").describe("用户 ID"),dept_id:m.string().optional().default("").describe("部门 ID,空则取默认部门")}),returns:m.object({}).passthrough(),examples:[{description:"查询风险消息",input:{start_time:"2026-08-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.dept_id||await f();return await u("/pc/wechat/weChatScreenshotList",{pageNum:n.page_num,pageSize:n.page_size,startTime:n.start_time,endTime:n.end_time,userId:n.user_id,deptId:i})}};var gn="crm",wi=m.union([m.string(),m.number()]).transform((n)=>String(n)),w0=m.union([m.string(),m.number()]).transform((n)=>String(n)).refine((n)=>n.length>0,"不能为空");function vn(n){return String(n).padStart(2,"0")}function x6(){let n=new Date;return`${n.getFullYear()}-${vn(n.getMonth()+1)}-${vn(n.getDate())}`}function $5(n){let i=new Date(Date.now()-n*86400000);return`${i.getFullYear()}-${vn(i.getMonth()+1)}-${vn(i.getDate())}`}function v5(){let n=new Date;return`${n.getFullYear()}-${vn(n.getMonth()+1)}-${vn(n.getDate())} ${vn(n.getHours())}:${vn(n.getMinutes())}:${vn(n.getSeconds())}`}function H5(n){let i=new Date(Date.now()-n*86400000);return`${i.getFullYear()}-${vn(i.getMonth()+1)}-${vn(i.getDate())} 00:00:00`}function w6(n,i){if(n.length>10)return n;return`${n} ${i?"23:59:59":"00:00:00"}`}function _5(n){if(typeof n==="number")return n;let i=n.includes(" ")?n.replace(" ","T"):`${n}T00:00:00`,o=Date.parse(`${i}+08:00`);if(Number.isNaN(o))throw Error(`无法解析时间: ${n}(支持 YYYY-MM-DD / YYYY-MM-DD HH:mm:ss / 毫秒时间戳)`);return o}var l6=m.union([m.number(),m.string()]).transform((n)=>{try{return _5(n)}catch{return Number.NaN}}).refine((n)=>!Number.isNaN(n),"时间格式无法解析(支持 YYYY-MM-DD / YYYY-MM-DD HH:mm:ss / 毫秒时间戳)").optional(),$6={name:"crm.wechat.wx-user-list",description:"查询员工微信列表(每员工一条,含 wechatId——后续微信会话/聊天/通讯录命令的必填入参)。日期区间不能超过 3 个月。",category:"crm",pluginName:gn,parameters:m.object({start_date:m.string().optional().default("").describe("开始日期 YYYY-MM-DD,空则近 3 天"),end_date:m.string().optional().default("").describe("结束日期 YYYY-MM-DD,空则今天"),is_on_job:m.number().int().optional().default(1).describe("1=在职 0=离职"),page:m.number().int().min(1).optional().default(1).describe("页码"),page_size:m.number().int().min(1).optional().default(20).describe("每页条数"),department_id:m.string().optional().default("").describe("部门 ID,空则全公司(管理员按管辖部门收敛)"),sales_name:m.string().optional().default("").describe("模糊搜索:员工姓名或手机号"),wechat_nick_name:m.string().optional().default("").describe("模糊搜索:员工微信昵称"),user_id:m.string().optional().default("").describe("指定员工用户 ID")}),returns:m.object({}).passthrough(),examples:[{description:"查询员工微信列表",input:{start_date:"2026-08-01",end_date:"2026-09-03"},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.end_date||x6(),o=n.start_date||$5(3);return await u("/pc/wechatcount/salesList",{startdate:o,enddate:i,page:n.page,pageSize:n.page_size,isOnJob:n.is_on_job,departmentId:n.department_id,salesname:n.sales_name,weChatNickName:n.wechat_nick_name,userId:n.user_id},{formData:!0})}},v6={name:"crm.wechat.search-talker",description:'按关键词模糊搜索某员工微信通讯录(匹配昵称/备注/显示名),单聊和群聊都会命中。返回裸数组(无分页)。行内 nickName 可能带 "(备注名)" 后缀。',category:"crm",pluginName:gn,parameters:m.object({wechat_id:w0.describe("员工微信 ID(来自 wx-user-list 的 wechatId 字段)"),keyword:m.string().min(1).describe("模糊搜索词,单字可命中;不支持表情")}),returns:m.array(m.unknown()),examples:[{description:"搜索通讯录",input:{wechat_id:"wxid_xxx",keyword:"张"},output:[]}],sideEffects:["network"],handler:async({wechat_id:n,keyword:i})=>{return await u("/pc/wechat/searchTalker",{wechatId:n,keyword:i},{formData:!0})}},H6={name:"crm.wechat.user-friend-info",description:'查"哪个员工(销售)的微信"和"指定好友"的一对一详情。friend_id 为空时只返回员工侧信息。员工头像字段为 HeadImageUrl(大写 H,后端历史拼写)。',category:"crm",pluginName:gn,parameters:m.object({wechat_id:w0.describe("员工微信 ID"),friend_id:wi.optional().default("").describe("好友微信 ID(来自 search-talker / talker-list / friend-list),空则只查员工侧")}),returns:m.object({}).passthrough(),examples:[{description:"查双方信息",input:{wechat_id:"wxid_xxx",friend_id:"wxid_yyy"},output:{}}],sideEffects:["network"],handler:async({wechat_id:n,friend_id:i})=>{return await u("/pc/wechat/getUserAndFriendInfo",{wechatId:n,friendId:i},{formData:!0})}},_6={name:"crm.wechat.talker-list",description:"查某员工微信的最近会话列表:type=1 单聊会话(首行可能是文件传输助手,属正常数据),type=2 群聊。翻页只看返回的 hasMore。",category:"crm",pluginName:gn,parameters:m.object({wechat_id:w0.describe("员工微信 ID"),type:m.number().int().refine((n)=>n===1||n===2,"type 必须为 1(单聊) 或 2(群聊)").describe("1=单聊会话 2=群聊"),page_number:m.number().int().min(1).optional().default(1).describe("页码,从 1 开始"),page_size:m.number().int().min(1).optional().default(20).describe("每页条数"),is_del:m.number().int().optional().default(0).describe("删除标记")}),returns:m.object({}).passthrough(),examples:[{description:"查会话列表",input:{wechat_id:"wxid_xxx",type:1},output:{}}],sideEffects:["network"],handler:async(n)=>{return await u("/pc/wechat/talkerList",{wechatId:n.wechat_id,type:String(n.type),pageNumber:n.page_number,pageSize:n.page_size,isDel:n.is_del},{formData:!0})}},p6={name:"crm.wechat.chat-history",description:"拉取某员工微信与指定好友(或群 xxx@chatroom、或文件传输助手 filehelper)的聊天记录,按时间升序。翻页取更早消息:把本页返回的 start 减 1 作为下次的 end 传入;hasLast=false 时没有更早消息。",category:"crm",pluginName:gn,parameters:m.object({wechat_id:w0.describe("员工微信 ID"),friend_id:w0.describe("好友微信 ID 或 xxx@chatroom(群)或 filehelper(文件传输助手)"),start:l6.describe("开始时间,毫秒时间戳或 YYYY-MM-DD[ HH:mm:ss](北京时间),空则 30 天前"),end:l6.describe("结束时间,毫秒时间戳或日期串,空则当前时间"),types:m.string().optional().default("").describe("消息类型筛选(逗号分隔的数字),空查全部")}),returns:m.object({}).passthrough(),examples:[{description:"拉最近 30 天聊天记录",input:{wechat_id:"wxid_xxx",friend_id:"wxid_yyy"},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.start??Date.now()-2592000000,o=n.end??Date.now();return await u("/pc/wechat/chatRecords-v2",{wechatId:n.wechat_id,friendId:n.friend_id,start:i,end:o,types:n.types},{formData:!0})}},J6={name:"crm.wechat.chat-search",description:"跨员工/跨会话的聊天记录全文搜索(跨度不可超过 3 个月),命中行自带会话定位信息,再用 chat-history 拉全量上下文。wx_id / search_user_id / search_dept_id 三选一必填。",category:"crm",pluginName:gn,parameters:m.object({page_num:m.number().int().min(1).optional().default(1).describe("页码,从 1 开始"),page_size:m.number().int().min(1).optional().default(20).describe("每页条数"),keyword:m.string().min(1).describe("搜索词"),start:m.string().optional().default("").describe("开始时间 YYYY-MM-DD HH:mm:ss,空则 30 天前 00:00:00"),end:m.string().optional().default("").describe("结束时间 YYYY-MM-DD HH:mm:ss,空则当前时间;与 start 跨度 ≤ 3 个月"),wx_id:wi.optional().default("").describe("范围限定:员工微信 ID(三选一)"),search_user_id:wi.optional().default("").describe("范围限定:员工用户 ID(三选一)"),search_dept_id:wi.optional().default("").describe("范围限定:部门 ID(三选一)"),friend_id:wi.optional().default("").describe("限定与某好友的会话(可选)")}).superRefine((n,i)=>{if(!n.wx_id&&!n.search_user_id&&!n.search_dept_id)i.addIssue({code:"custom",message:"wx_id / search_user_id / search_dept_id 三选一必填"})}),returns:m.object({}).passthrough(),examples:[{description:"全局搜索关键词",input:{keyword:"退款",search_dept_id:"42977E55..."},output:{}}],sideEffects:["network"],handler:async(n)=>{return await u("/pc/wechat/searchContent",{pageNum:n.page_num,pageSize:n.page_size,keyword:n.keyword,start:n.start||H5(30),end:n.end||v5(),wxId:n.wx_id,searchUserId:n.search_user_id,searchDeptId:n.search_dept_id,friendId:n.friend_id})}},X6={name:"crm.wechat.friend-list",description:"查某员工微信的好友全量列表(按最后聊天时间降序)。start_date/end_date 是加好友日期范围(不是聊天时间),空则不限。翻页依据返回的 pageCount/totalCount。行内 friendId 是 chat-history / user-friend-info 的 friend_id 入参。",category:"crm",pluginName:gn,parameters:m.object({wechat_id:w0.describe("员工微信 ID"),type:m.number().int().refine((n)=>n===1||n===2,"type 必须为 1(个人) 或 2(群)").optional().default(1).describe("好友类型:1 个人(默认)/ 2 群"),start_date:m.string().optional().default("").describe("加好友日期下限 YYYY-MM-DD,空则不限"),end_date:m.string().optional().default("").describe("加好友日期上限 YYYY-MM-DD,空则不限"),page:m.number().int().min(1).optional().default(1).describe("页码,从 1 开始"),page_size:m.number().int().optional().default(20).describe("每页条数"),sales_name:m.string().optional().default("").describe("好友姓名模糊搜索(匹配昵称/备注/微信号/手机号)")}),returns:m.object({}).passthrough(),examples:[{description:"查好友全量列表",input:{wechat_id:"wxid_xxx"},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.start_date?w6(n.start_date,!1):"0000-00-00 00:00:00",o=n.end_date?w6(n.end_date,!0):`${x6()} 23:59:59`;return await u("/pc/wechatcount/friendList",{wechatId:n.wechat_id,type:n.type,startdate:i,enddate:o,page:n.page,pageSize:n.page_size,salesname:n.sales_name},{formData:!0})}},Y6={name:"crm.wechat.moments-list",description:"查某员工微信发布的朋友圈列表。翻页看返回的 hashNext(字段名拼写如此)。注意:返回行内 createTime 为秒级时间戳字符串;图片地址如为签名 URL 有效期有限,需尽快取用。",category:"crm",pluginName:gn,parameters:m.object({wechat_id:w0.describe("员工微信 ID"),page_num:m.number().int().min(1).optional().default(1).describe("页码,从 1 开始"),page_size:m.number().int().min(1).optional().default(10).describe("每页条数"),start_time:m.string().optional().default("").describe("开始日期 YYYY-MM-DD(与 end_time 成对传,空则不限)"),end_time:m.string().optional().default("").describe("结束日期 YYYY-MM-DD(与 start_time 成对传)")}),returns:m.object({}).passthrough(),examples:[{description:"查朋友圈",input:{wechat_id:"wxid_xxx"},output:{}}],sideEffects:["network"],handler:async(n)=>{return await u("/pc/material/getFriendsterInfo",{wechatId:n.wechat_id,pageNum:n.page_num,pageSize:n.page_size,startTime:n.start_time,endTime:n.end_time},{formData:!0})}};var d="crm",p5=m.union([m.string(),m.number()]).transform((n)=>String(n)),Pn=m.union([m.array(m.string()),m.string()]).transform((n)=>{if(Array.isArray(n))return n;try{return JSON.parse(n)}catch{return[n]}}),li=m.union([m.array(m.number()),m.string()]).transform((n)=>{if(Array.isArray(n))return n;try{return JSON.parse(n)}catch{return[Number(n)]}}),Hn={start_time:m.string().describe("开始时间 yyyy-MM-dd HH:mm:ss"),end_time:m.string().describe("结束时间 yyyy-MM-dd HH:mm:ss"),page_index:m.number().int().min(1).optional().default(1).describe("页码"),page_size:m.number().int().min(1).max(10).optional().default(5).describe("每页条数"),dept_id:m.string().optional().default("").describe("部门 ID,空则取默认部门"),user_id:m.string().optional().default("").describe("员工 ID"),user_ids:Pn.optional().default([]).describe("员工 ID 列表"),search_type:m.number().int().optional().describe("搜索类型:1客户姓名 2客户手机号 3员工姓名 4员工手机号 5客户微信昵称 6客户微信号 7员工微信昵称 8员工微信号"),keyword:m.string().optional().default("").describe("搜索关键词"),ctype:m.number().int().optional().describe("沟通类型:1电话 2微信 3微信长语音"),sort_field:m.number().int().optional().describe("排序字段:1分析时间 2沟通时间"),sort_order:m.string().optional().default("").describe("排序:asc/desc"),range_field:m.number().int().optional().describe("过滤时间字段:1分析时间 2沟通时间"),call_second_type:m.number().int().optional().describe("通话时长类型")};function _n(n,i,o={}){return{pageIndex:n.page_index,pageSize:n.page_size,startTime:n.start_time,endTime:n.end_time,dptId:i,userId:n.user_id,userIds:n.user_ids,type:n.search_type,keyword:n.keyword,ctype:n.ctype,sortField:n.sort_field,sortOrder:n.sort_order,rangeField:n.range_field,callSecondType:n.call_second_type,...o}}var Q6={name:"crm.ai.sop-analysis",description:"查询员工 SOP 分析列表,评估话术执行情况。",category:"crm",pluginName:d,parameters:m.object({...Hn,call_percent:m.number().int().optional().describe("通话占比"),call_speed:m.number().int().optional().describe("语速"),sop_id:m.string().optional().default("").describe("SOP 配置 ID"),sop_step_id:m.string().optional().default("").describe("SOP 步骤 ID"),sop_type:li.optional().default([]).describe("SOP 评估类型列表")}),returns:m.object({}).passthrough(),examples:[{description:"查询 SOP 分析",input:{start_time:"2026-07-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.dept_id||await f();return await u("/pc/ai/analyse/employee/sop/list",_n(n,i,{callPercent:n.call_percent,callSpeed:n.call_speed,sopId:n.sop_id,sopStepId:n.sop_step_id,sopType:n.sop_type}))}},W6={name:"crm.ai.excellent-speech",description:"查询优秀话术列表。",category:"crm",pluginName:d,parameters:m.object({...Hn,call_percent:m.number().int().optional(),call_speed:m.number().int().optional(),good_speech_type:m.number().int().optional().describe("优秀话术类型")}),returns:m.object({}).passthrough(),examples:[{description:"查询优秀话术",input:{start_time:"2026-07-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.dept_id||await f();return await u("/pc/ai/analyse/employee/speech/list",_n(n,i,{callPercent:n.call_percent,callSpeed:n.call_speed,goodSpeechType:n.good_speech_type}))}},q6={name:"crm.ai.employee-analysis",description:"查询员工 AI 分析列表。",category:"crm",pluginName:d,parameters:m.object({...Hn,call_percent:m.number().int().optional(),call_speed:m.number().int().optional()}),returns:m.object({}).passthrough(),examples:[{description:"查询员工分析",input:{start_time:"2026-07-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.dept_id||await f();return await u("/pc/ai/analyse/employee/list",_n(n,i,{callPercent:n.call_percent,callSpeed:n.call_speed}))}},u6={name:"crm.ai.customer-objection",description:"查询客户异议分析列表。",category:"crm",pluginName:d,parameters:m.object({...Hn,objection:Pn.optional().default([]).describe("异议列表"),select_type:m.number().int().optional().describe("筛选类型"),solution_judge:m.string().optional().default("").describe("解决方案判定")}),returns:m.object({}).passthrough(),examples:[{description:"查询客户异议",input:{start_time:"2026-07-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.dept_id||await f();return await u("/pc/ai/customerInsights/objection/list",_n(n,i,{objection:n.objection,selectType:n.select_type,solutionJudge:n.solution_judge}))}},M6={name:"crm.ai.customer-pain-point",description:"查询客户痛点分析列表。",category:"crm",pluginName:d,parameters:m.object({...Hn,pain:Pn.optional().default([]).describe("痛点列表"),select_type:m.number().int().optional(),solution_judge:m.string().optional().default("")}),returns:m.object({}).passthrough(),examples:[{description:"查询客户痛点",input:{start_time:"2026-07-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.dept_id||await f();return await u("/pc/ai/customerInsights/pain/list",_n(n,i,{pain:n.pain,selectType:n.select_type,solutionJudge:n.solution_judge}))}},O6={name:"crm.ai.customer-issue",description:"查询客户问题分析列表。",category:"crm",pluginName:d,parameters:m.object({...Hn,issue:Pn.optional().default([]).describe("问题列表"),select_type:m.number().int().optional(),solution_judge:m.string().optional().default("")}),returns:m.object({}).passthrough(),examples:[{description:"查询客户问题",input:{start_time:"2026-07-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.dept_id||await f();return await u("/pc/ai/customerInsights/issue/list",_n(n,i,{issue:n.issue,selectType:n.select_type,solutionJudge:n.solution_judge}))}},G6={name:"crm.ai.customer-emotion",description:"查询客户情绪分析列表。",category:"crm",pluginName:d,parameters:m.object({...Hn,mood_type:li.optional().default([]).describe("情绪类型列表"),select_type:m.number().int().optional()}),returns:m.object({}).passthrough(),examples:[{description:"查询客户情绪",input:{start_time:"2026-07-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.dept_id||await f();return await u("/pc/ai/customerInsights/mood/list",_n(n,i,{moodType:n.mood_type,selectType:n.select_type}))}},C6={name:"crm.ai.competitor-analysis",description:"查询竞品分析列表。",category:"crm",pluginName:d,parameters:m.object({...Hn,competitor:Pn.optional().default([]).describe("竞品列表"),select_type:m.number().int().optional()}),returns:m.object({}).passthrough(),examples:[{description:"查询竞品分析",input:{start_time:"2026-07-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.dept_id||await f();return await u("/pc/ai/customerInsights/competitor/list",_n(n,i,{competitor:n.competitor,selectType:n.select_type}))}},j6={name:"crm.ai.failure-analysis",description:"查询战败分析列表。",category:"crm",pluginName:d,parameters:m.object({...Hn,failure_reason:Pn.optional().default([]).describe("战败原因列表"),detail_reason:Pn.optional().default([]).describe("细分原因列表"),intention:li.optional().default([]).describe("意向度列表"),clue_value:li.optional().default([]).describe("线索价值列表:1高2中3低"),customer_id:m.string().optional().default("").describe("客户 ID")}),returns:m.object({}).passthrough(),examples:[{description:"查询战败分析",input:{start_time:"2026-07-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.dept_id||await f();return await u("/pc/ai/customerInsights/failureAnalyse/list",_n(n,i,{failureReason:n.failure_reason,detailReason:n.detail_reason,intention:n.intention,clueValue:n.clue_value,customerId:n.customer_id}))}},B6={name:"crm.ai.failure-detail",description:"查询战败详情列表(单通维度,customer_id 必填)。",category:"crm",pluginName:d,parameters:m.object({...Hn,customer_id:m.string().describe("客户 ID(必填)")}),returns:m.object({}).passthrough(),examples:[{description:"查询战败详情",input:{start_time:"2026-07-01 00:00:00",end_time:"2026-08-05 23:59:59",customer_id:"C001"},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.dept_id||await f();return await u("/pc/ai/customerInsights/failureDetail/list",_n(n,i,{customerId:n.customer_id}))}},V6={name:"crm.ai.sop-quality-analysis",description:"查询 SOP 质检分析列表。",category:"crm",pluginName:d,parameters:m.object({...Hn,quality_type:m.number().int().optional().describe("质检类型:1关键词2SOP"),quality_result:m.number().int().optional().describe("质检结果:1合格3不合格5好7中9差"),comm_scenario_id:m.number().int().optional().describe("沟通场景 ID"),sop_id:m.number().int().optional().describe("SOP 配置 ID"),rule_id:m.number().int().optional().describe("规则模板 ID"),task_id:m.number().int().optional().describe("任务 ID"),call_id:m.string().optional().default("").describe("通话 ID")}),returns:m.object({}).passthrough(),examples:[{description:"查询 SOP 质检",input:{start_time:"2026-07-01 00:00:00",end_time:"2026-08-05 23:59:59"},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.dept_id||await f();return await u("/pc/sopQualityAnalyse/list",_n(n,i,{qualityType:n.quality_type,qualityResult:n.quality_result,commScenarioId:n.comm_scenario_id,sopId:n.sop_id,ruleId:n.rule_id,taskId:n.task_id,callId:n.call_id}))}},h6={name:"crm.ai.employee-emotion",description:"分析员工沟通中的情绪表现。",category:"crm",pluginName:d,parameters:m.object({page_index:m.number().int().min(1).optional().default(1).describe("页码"),page_size:m.number().int().min(1).max(10).optional().default(5).describe("每页条数"),mood_types:li.optional().default([]).describe("情绪类型列表(1喜悦3满足5兴奋7希望11耐心25平静27专业13愤怒15悲伤17焦虑21失望23挫折)"),start_time:m.string().optional().default("").describe("开始时间,空则不限制"),end_time:m.string().optional().default("").describe("结束时间,空则不限制"),communication_type:m.string().optional().default("").describe("沟通类型:1电话2微信3微信语音5企微聊天6企微语音11工牌12现场"),filter_user_id:m.string().optional().default("").describe("员工用户 ID"),dept_id:m.string().optional().default("").describe("部门 ID,空则取默认部门")}),returns:m.object({}).passthrough(),examples:[{description:"查询员工情绪",input:{},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.dept_id||await f();return await u("/pc/ai/analyse/employee/list",{pageIndex:n.page_index,pageSize:n.page_size,startTime:n.start_time,endTime:n.end_time,type:"1",dptId:i,comCode:eo(),userId:n.filter_user_id,ctype:n.communication_type,moodType:n.mood_types,rangeField:"1",selectType:3})}},f6={name:"crm.ai.customer-intention",description:"获取客户 AI 分析列表(意向/情绪/痛点/异议等)。",category:"crm",pluginName:d,parameters:m.object({page_index:m.number().int().min(1).optional().default(1).describe("页码"),page_size:m.number().int().min(1).max(10).optional().default(5).describe("每页条数"),intension_levels:Pn.optional().default([]).describe("意向等级列表(高意向/中意向/低意向/无意向/意向不明/需跟进),空则全部"),search_phone:p5.optional().default("").describe("手机号搜索"),search_name_and_company:m.string().optional().default("").describe("客户名/公司名搜索"),dept_id:m.string().optional().default("").describe("部门 ID,空则取默认部门")}),returns:m.object({}).passthrough(),examples:[{description:"查询客户意向",input:{},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.dept_id||await f(),o=n.intension_levels.length?n.intension_levels:["高意向","中意向","低意向","无意向","意向不明"];return await u("/pc/newcustomer/aIAnalysisList",{moneyType:"",salesname:"",pageSize:n.page_size,page:n.page_index,searchPhone:n.search_phone,groupName:"全部客户",searchNameAndCompany:n.search_name_and_company,customerSerial:"",wechatID:"",relationContactCustomerName:"",intensionLevel:o,deptId:i,phoneCityId:"",phoneProvinceId:"",sort:{field:"createdTime",order:"desc"},tipNameList:null,tipTypeList:null,pageIndex:n.page_index})}},L6={name:"crm.ai.communication-keywords",description:"分析客户沟通中的关键词(情绪/痛点/需求)。",category:"crm",pluginName:d,parameters:m.object({page_index:m.number().int().min(1).optional().default(1).describe("页码"),page_size:m.number().int().min(1).max(10).optional().default(5).describe("每页条数"),start_time:m.string().optional().default("").describe("开始时间,空则不限制"),end_time:m.string().optional().default("").describe("结束时间,空则不限制"),keyword_type:m.string().optional().default("1").describe("关键词类型,默认 1"),communication_type:m.string().optional().default("").describe("沟通类型"),dept_id:m.string().optional().default("").describe("部门 ID,空则取默认部门"),filter_user_id:m.string().optional().default("").describe("员工用户 ID")}),returns:m.object({}).passthrough(),examples:[{description:"查询沟通关键词",input:{},output:{}}],sideEffects:["network"],handler:async(n)=>{let i=n.dept_id||await f();return await u("/pc/ai/customerInsights/keywords/list",{pageIndex:n.page_index,pageSize:n.page_size,startTime:n.start_time,endTime:n.end_time,type:n.keyword_type,dptId:i,comCode:eo(),userId:n.filter_user_id,ctype:n.communication_type,rangeField:"1"})}};var K6={name:"crm",version:"1.0.0",commands:[b4,w4,l4,x4,v4,H4,_4,X4,Y4,u4,j4,f4,L4,D4,A4,M4,O4,G4,C4,E4,S4,U4,c4,k4,y4,T4,t4,I4,Z4,z4,d4,a4,r4,e4,s4,n6,i6,o6,m6,b6,$6,v6,H6,_6,p6,J6,X6,Y6,Q6,W6,q6,u6,M6,O6,G6,C6,j6,B6,V6,h6,f6,L6]};var J5="ai_task_wx_circle_of_friends_config",X5="WECHAT_MOMENTS";function D6(){let n=new Date,i=(o)=>String(o).padStart(2,"0");return`${n.getFullYear()}-${i(n.getMonth()+1)}-${i(n.getDate())} ${i(n.getHours())}:${i(n.getMinutes())}:${i(n.getSeconds())}`}function Y5(n,i){let o=new Date(n.replace(" ","T"));o.setHours(o.getHours()+i);let b=(w)=>String(w).padStart(2,"0");return`${o.getFullYear()}-${b(o.getMonth()+1)}-${b(o.getDate())} ${b(o.getHours())}:${b(o.getMinutes())}:${b(o.getSeconds())}`}function Q5(n){let i=new Date,o=(l)=>String(l).padStart(2,"0"),b=`${i.getFullYear()}${o(i.getMonth()+1)}${o(i.getDate())}_${o(i.getHours())}${o(i.getMinutes())}${o(i.getSeconds())}`,w=n.slice(-8);return`朋友圈_${b}_${w}`}function W5(){let n=e();if(!n?.user_id)throw new M("CONFIG_ERROR","未登录,请先运行 'yunke crm.auth.login' 登录");return n.user_id}async function A6(n){let i=W5(),o=n.startTime??D6(),b=n.endTime??Y5(o,1),w={taskType:X5,taskName:n.taskName,content:n.content,remark:n.remark,taskKey:Q5(i),createTime:D6(),startTime:o,endTime:b},l=`${sn}/api/v1/weixiaozhu/message/send`,x;try{x=await fetch(l,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user_id:i,push_type:J5,text:w})})}catch(v){let H=v instanceof Error?v.message:String(v);throw new M("EXECUTION_FAILED",`微小助服务不可达: ${H}`)}if(!x.ok){let v=`HTTP ${x.status}`;try{let H=await x.json();v=H.detail??H.message??v}catch{}throw new M("EXECUTION_FAILED",`微小助服务错误: ${v}`)}return(await x.json()).data}var q5="weixiaozhu",N6={name:"weixiaozhu.moments.send",description:"发送一条朋友圈推送任务到微小助 broker。user_id 自动从 crm 登录凭证读取。",category:"weixiaozhu",pluginName:q5,hidden:!0,parameters:m.object({content:m.string().min(1).describe("朋友圈文案"),remark:m.string().min(1).describe("朋友圈图片 URL(微小助 broker 固定字段名为 remark)"),task_name:m.string().optional().default("测试发朋友圈").describe('任务名称,默认"测试发朋友圈"'),start_time:m.string().optional().describe("发送开始时间,格式 YYYY-MM-DD HH:mm:ss,默认当前时间"),end_time:m.string().optional().describe("发送结束时间,格式 YYYY-MM-DD HH:mm:ss,默认 start_time + 1小时")}),returns:m.object({success:m.boolean(),data:m.record(m.unknown()).nullable()}),examples:[{description:"发送朋友圈(最简调用)",input:{content:"今天天气真好!",remark:"https://example.com/img.jpg"},output:{success:!0,data:{}}},{description:"指定任务名和时间",input:{content:"新品上市!",remark:"https://example.com/product.jpg",task_name:"新品推广",start_time:"2026-04-15 10:00:00",end_time:"2026-04-15 11:00:00"},output:{success:!0,data:{}}}],sideEffects:["network"],handler:async({content:n,remark:i,task_name:o,start_time:b,end_time:w})=>{return{success:!0,data:await A6({content:n,remark:i,taskName:o,startTime:b,endTime:w})}}};var R6={name:"weixiaozhu",version:"1.0.0",featureFlag:"weixiaozhu",commands:[N6]};wn();wn();var E6=`yunke-cli/${R}`;function S6(){return Wn().api_base_url.replace(/\/$/,"")}async function no(n,i){let o=`${S6()}${n}`,b=await fetch(o,{...i,headers:{"User-Agent":E6,...i?.headers??{}}});if(!b.ok){let w=`HTTP ${b.status}`;try{let l=await b.json();if(l.error)w=l.error;else if(l.message)w=l.message}catch{}throw new M("EXECUTION_FAILED",`CLI API error: ${w}`)}return await b.json()}async function U6(n){let i=`${S6()}${n}`,o=await fetch(i,{redirect:"manual",headers:{"User-Agent":E6}}),b=o.headers.get("location");if(!b)throw new M("EXECUTION_FAILED",`CLI API did not return a redirect for ${n} (status ${o.status})`);return b}wn();function xi(){let{platform:n,arch:i}=process;switch(n){case"darwin":return i==="arm64"?"darwin-arm64":"darwin-x64";case"linux":return"linux-x64";case"win32":return"windows-x64";default:throw Error(`不支持的平台: ${n}-${i}。`+"支持的平台: darwin-arm64, darwin-x64, linux-x64, windows-x64")}}var u5=(()=>{return"npm"})();function yn(){return u5==="npm"}wn();import{readFileSync as E5,writeFileSync as S5,mkdirSync as U5,existsSync as y6}from"node:fs";import{homedir as c5}from"node:os";import{join as T6}from"node:path";import{writeFile as D5,chmod as A5,rename as N5,unlink as R5}from"node:fs/promises";wn();import{createHash as M5}from"node:crypto";function O5(n){return M5("sha256").update(n).digest("hex")}function c6(n,i){let o=O5(n);if(!i)return{valid:!0,actual:o,expected:null};let b=i.toLowerCase().trim();return{valid:o===b,actual:o,expected:b}}oo();async function $i(){let n=xi();return no(`/api/v1/cli/check-update?current=${encodeURIComponent(R)}&target=${encodeURIComponent(n)}`)}async function P6(){let n=xi(),i=await $i();if(!i.hasUpdate)return{updated:!1,fromVersion:R,toVersion:i.latestVersion,message:"已是最新版本"};let o;try{o=await i1()}catch(H){throw Error(`备份当前版本失败: ${H instanceof Error?H.message:String(H)}`)}let b=await U6(`/api/v1/cli/download?target=${encodeURIComponent(n)}`),w=await fetch(b);if(!w.ok)throw Error(`下载失败: HTTP ${w.status}`);let l=Buffer.from(await w.arrayBuffer()),x=c6(l,i.checksum);if(!x.valid)throw Error(`完整性校验失败。期望: ${x.expected}, 实际: ${x.actual}`);let $=process.execPath,v=`${$}.new`;try{await D5(v,l),await A5(v,493),await N5(v,$)}catch(H){try{await R5(v)}catch{}if(o)try{let{rollbackFromLatestBackup:_}=await Promise.resolve().then(() => (oo(),g6));await _()}catch{}throw H}return{updated:!0,fromVersion:R,toVersion:i.latestVersion??"",backupPath:o,message:`已更新到 ${i.latestVersion}。请重启 CLI 以使用新版本。`}}var m1=process.env.YUNKE_CONFIG_DIR??T6(c5(),".yunke"),b1=T6(m1,"update-check.json"),k5=86400000;function t6(){if(!y6(b1))return null;try{let n=E5(b1,"utf-8");return JSON.parse(n)}catch{return null}}function I6(n){if(!y6(m1))U5(m1,{recursive:!0});S5(b1,JSON.stringify(n,null,2),"utf-8")}function mo(n){if(!n)return!0;if(n.currentVersion!==R)return!0;return Date.now()-new Date(n.lastCheck).getTime()>=k5}function Z6(){if(yn()){g5();return}let n=t6();if(n&&!mo(n)&&n.hasUpdate){d6(n.latestVersion);return}if(mo(n))F5().catch(()=>{})}async function F5(){try{let n=await $i(),i=n.hasUpdate&&n.latestVersion!=null&&a6(n.latestVersion,R),o={lastCheck:new Date().toISOString(),hasUpdate:i,latestVersion:n.latestVersion,currentVersion:R};if(I6(o),i)d6(n.latestVersion)}catch{}}function z6(n,i){return`
363
+ 新版本可用: ${n} -> ${i}
23
364
  `+` 运行以下命令更新:
24
365
  `+` npm install -g @yunkeai/yunke-cli
25
366
 
26
- `}function J3(n){if(!n)return;process.stderr.write(`
27
- 新版本可用: ${E} -> ${n}
367
+ `}function d6(n){if(!n)return;process.stderr.write(`
368
+ 新版本可用: ${R} -> ${n}
28
369
  `+` 运行 yunke self.update 进行更新
29
370
 
30
- `)}function c5(){let n=w3();if(n&&!am(n)&&n.hasUpdate){if(n.latestVersion)process.stderr.write(_3(E,n.latestVersion));return}if(am(n))z5().catch(()=>{})}async function z5(){try{let n=await bm(),m=n!==null&&X3(n,E),i={lastCheck:new Date().toISOString(),hasUpdate:m,latestVersion:n,currentVersion:E};if($3(i),m&&n)process.stderr.write(_3(E,n))}catch{}}function X3(n,m){let i=(Y)=>Y.split(".").map(Number),[b,$,o]=i(n),[_,J,X]=i(m);if(b!==_)return b>_;if($!==J)return $>J;return o>X}async function bm(){try{let n=await fetch("https://registry.npmjs.org/@yunkeai/yunke-cli/latest",{headers:{Accept:"application/json"}});if(!n.ok)return null;return(await n.json()).version??null}catch{return null}}var Y3={name:"self.check",description:"Check if a newer version of yunke-cli is available",category:"self",pluginName:"self",parameters:w.object({}),returns:w.object({hasUpdate:w.boolean(),currentVersion:w.string(),latestVersion:w.string().nullable()}),examples:[{description:"Check for updates",input:{},output:{hasUpdate:!0,currentVersion:"1.0.0",latestVersion:"1.1.0"}}],sideEffects:["network"],handler:async()=>{if(hn()){let i=await bm();return{hasUpdate:i!==null&&i!==E,currentVersion:E,latestVersion:i??null}}let n=mm(),m=await Zm(`/api/v1/cli/check-update?current=${encodeURIComponent(E)}&target=${encodeURIComponent(n)}`);return{hasUpdate:m.hasUpdate,currentVersion:E,latestVersion:m.latestVersion}}};bn();var H3={name:"self.update",description:"Download and install the latest version of yunke-cli (with backup & integrity check)",category:"self",pluginName:"self",parameters:w.object({check_only:w.boolean().default(!1).describe("只检查是否有更新,不实际安装")}),returns:w.object({updated:w.boolean(),fromVersion:w.string(),toVersion:w.string().nullable(),message:w.string().optional(),backupPath:w.string().optional()}),examples:[{description:"Check and install update",input:{},output:{updated:!0,fromVersion:"1.0.0",toVersion:"1.1.0"}}],sideEffects:["network","filesystem"],handler:async(n)=>{if(hn()){let m=await bm();return{updated:!1,fromVersion:E,toVersion:m??null,message:m!==null&&m!==E?`发现新版本 ${m},请运行: npm install -g @yunkeai/yunke-cli`:"已是最新版本"}}if(n.check_only){let m=await im();return{updated:!1,fromVersion:E,toVersion:m.latestVersion,message:m.hasUpdate?`发现新版本 ${m.latestVersion},使用 self.update 安装`:"已是最新版本"}}return m3()}};dm();var Q3={name:"self.rollback",description:"Rollback yunke-cli to the previous backed-up version",category:"self",pluginName:"self",parameters:w.object({}),returns:w.object({rolledBack:w.boolean(),restoredFrom:w.string().nullable(),message:w.string(),availableBackups:w.array(w.string())}),examples:[{description:"Rollback to previous version",input:{},output:{rolledBack:!0,restoredFrom:"yunke-1.0.0-2024-01-01T00-00-00-000Z",message:"已回滚,请重启 CLI",availableBackups:[]}}],sideEffects:["filesystem"],handler:async()=>{if(hn())return{rolledBack:!1,restoredFrom:null,message:`npm 分发版本不支持本地回滚。如需回滚,请运行:
31
- npm install -g @yunkeai/yunke-cli@<目标版本>`,availableBackups:[]};if((await C0()).length===0)return{rolledBack:!1,restoredFrom:null,message:`没有可用的备份。备份目录: ${Pn}`,availableBackups:[]};let m=await Zi(),i=await C0();return{rolledBack:!0,restoredFrom:m,message:"已回滚到上一个备份版本。请重启 CLI 以使用恢复的版本。",availableBackups:i}}};var W3={name:"self",version:E,commands:[Y3,H3,Q3]};bn();var m0=new Tn,q3=()=>m0;async function Z5(){let n=[ib(q3),bb(q3),wb(),$b(),C2,W3,I8],m=[j6,Z8].filter((o)=>!o.featureFlag||j1(o.featureFlag));m0=(await bi([...n,...m],m0)).registry;let $=tn().plugins.filter((o)=>o.enabled);for(let o of $)try{let _=await import(o.path),J=_.default??_,X=await bi([J],m0);if(m0=X.registry,X.errors.length>0)process.stderr.write(`Warning: Failed to load plugin '${o.name}': ${X.errors[0].error.message}
32
- `)}catch(_){process.stderr.write(`Warning: Failed to import plugin '${o.name}' from '${o.path}': ${_ instanceof Error?_.message:String(_)}
33
- `)}}async function t5(){await Z5(),o3();let n=process.argv.slice(2);if(n.length===0||n[0]==="--help"||n[0]==="-h"){let o=await new Hm(m0).execute({command:"help",args:{}});process.stdout.write(o+`
34
- `);return}if(n[0]==="--version"||n[0]==="-v"){process.stdout.write(JSON.stringify({version:E})+`
35
- `);return}let m=W1(n),b=await new Hm(m0).execute(m);process.stdout.write(b+`
36
- `),process.exit(0)}t5().catch((n)=>{let m=Vn("main","core",n instanceof Error?n:new l("EXECUTION_FAILED",String(n)),0);process.stdout.write(m+`
371
+ `)}function g5(){let n=t6();if(n&&!mo(n)&&n.hasUpdate){if(n.latestVersion)process.stderr.write(z6(R,n.latestVersion));return}if(mo(n))P5().catch(()=>{})}async function P5(){try{let n=await vi(),i=n!==null&&a6(n,R),o={lastCheck:new Date().toISOString(),hasUpdate:i,latestVersion:n,currentVersion:R};if(I6(o),i&&n)process.stderr.write(z6(R,n))}catch{}}function a6(n,i){let o=(H)=>H.split(".").map(Number),[b,w,l]=o(n),[x,$,v]=o(i);if(b!==x)return b>x;if(w!==$)return w>$;return l>v}async function vi(){try{let n=await fetch("https://registry.npmjs.org/@yunkeai/yunke-cli/latest",{headers:{Accept:"application/json"}});if(!n.ok)return null;return(await n.json()).version??null}catch{return null}}var r6={name:"self.check",description:"Check if a newer version of yunke-cli is available",category:"self",pluginName:"self",parameters:m.object({}),returns:m.object({hasUpdate:m.boolean(),currentVersion:m.string(),latestVersion:m.string().nullable()}),examples:[{description:"Check for updates",input:{},output:{hasUpdate:!0,currentVersion:"1.0.0",latestVersion:"1.1.0"}}],sideEffects:["network"],handler:async()=>{if(yn()){let o=await vi();return{hasUpdate:o!==null&&o!==R,currentVersion:R,latestVersion:o??null}}let n=xi(),i=await no(`/api/v1/cli/check-update?current=${encodeURIComponent(R)}&target=${encodeURIComponent(n)}`);return{hasUpdate:i.hasUpdate,currentVersion:R,latestVersion:i.latestVersion}}};wn();var e6={name:"self.update",description:"Download and install the latest version of yunke-cli (with backup & integrity check)",category:"self",pluginName:"self",parameters:m.object({check_only:m.boolean().default(!1).describe("只检查是否有更新,不实际安装")}),returns:m.object({updated:m.boolean(),fromVersion:m.string(),toVersion:m.string().nullable(),message:m.string().optional(),backupPath:m.string().optional()}),examples:[{description:"Check and install update",input:{},output:{updated:!0,fromVersion:"1.0.0",toVersion:"1.1.0"}}],sideEffects:["network","filesystem"],handler:async(n)=>{if(yn()){let i=await vi();return{updated:!1,fromVersion:R,toVersion:i??null,message:i!==null&&i!==R?`发现新版本 ${i},请运行: npm install -g @yunkeai/yunke-cli`:"已是最新版本"}}if(n.check_only){let i=await $i();return{updated:!1,fromVersion:R,toVersion:i.latestVersion,message:i.hasUpdate?`发现新版本 ${i.latestVersion},使用 self.update 安装`:"已是最新版本"}}return P6()}};oo();var s6={name:"self.rollback",description:"Rollback yunke-cli to the previous backed-up version",category:"self",pluginName:"self",parameters:m.object({}),returns:m.object({rolledBack:m.boolean(),restoredFrom:m.string().nullable(),message:m.string(),availableBackups:m.array(m.string())}),examples:[{description:"Rollback to previous version",input:{},output:{rolledBack:!0,restoredFrom:"yunke-1.0.0-2024-01-01T00-00-00-000Z",message:"已回滚,请重启 CLI",availableBackups:[]}}],sideEffects:["filesystem"],handler:async()=>{if(yn())return{rolledBack:!1,restoredFrom:null,message:`npm 分发版本不支持本地回滚。如需回滚,请运行:
372
+ npm install -g @yunkeai/yunke-cli@<目标版本>`,availableBackups:[]};if((await R0()).length===0)return{rolledBack:!1,restoredFrom:null,message:`没有可用的备份。备份目录: ${Tn}`,availableBackups:[]};let i=await o1(),o=await R0();return{rolledBack:!0,restoredFrom:i,message:"已回滚到上一个备份版本。请重启 CLI 以使用恢复的版本。",availableBackups:o}}};var nw={name:"self",version:R,commands:[r6,e6,s6]};wn();var l0=new In,iw=()=>l0,ow=()=>e()?.user_id;async function y5(){let n=[p2(iw,ow),J2(iw,ow),X2(),Y2(),cb,nw,K6],i=[Dm,R6].filter((l)=>!l.featureFlag||K1(l.featureFlag));l0=(await Ho([...n,...i],l0)).registry;let w=en().plugins.filter((l)=>l.enabled);for(let l of w)try{let x=await import(l.path),$=x.default??x,v=await Ho([$],l0);if(l0=v.registry,v.errors.length>0)process.stderr.write(`Warning: Failed to load plugin '${l.name}': ${v.errors[0].error.message}
373
+ `)}catch(x){process.stderr.write(`Warning: Failed to import plugin '${l.name}' from '${l.path}': ${x instanceof Error?x.message:String(x)}
374
+ `)}}async function T5(){await y5(),Z6();let n=process.argv.slice(2);if(n.length===0||n[0]==="--help"||n[0]==="-h"){let l=await new Wi(l0).execute({command:"help",args:{}});process.stdout.write(l+`
375
+ `);return}if(n[0]==="--version"||n[0]==="-v"){process.stdout.write(JSON.stringify({version:R})+`
376
+ `);return}let i=G1(n),b=await new Wi(l0).execute(i);process.stdout.write(b+`
377
+ `),process.exit(0)}T5().catch((n)=>{let i=fn("main","core",n instanceof Error?n:new M("EXECUTION_FAILED",String(n)),0);process.stdout.write(i+`
37
378
  `),process.exit(1)});