ppagent 0.0.32 → 0.0.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/lib.js CHANGED
@@ -1,4 +1,4 @@
1
- var _r=Object.defineProperty;var p=(a,e)=>_r(a,"name",{value:e,configurable:!0});import"reflect-metadata";import Kr from"emittery";import yr from"pino";import ro from"node:process";import xr from"emittery";var Io={level:ro.env.LOG_LEVEL??"debug"};ro.env.NODE_ENV==="development"&&(Io.transport={target:"pino-pretty",options:{colorize:!0}});var xo=yr(Io),Ir=class extends xr{static{p(this,"LogEmitter")}_levelMap={trace:0,debug:1,info:2,warn:3,error:4,fatal:5};_currentLevelVal;_currentLevel;get level(){return this._currentLevel}constructor(e){super(),this.setLevel(e??ro.env.LOG_LEVEL??"trace")}setLevel(e){this._currentLevelVal=this._levelMap[e],this._currentLevel=e}emitString(e,t,o){this._levelMap[e]>=this._currentLevelVal&&this.emit("log",{level:e,name:t,message:o})}emitObject(e,t,o){this._levelMap[e]>=this._currentLevelVal&&this.emit("log",{level:e,name:t,message:o})}},ve=p((a,e,t,o)=>{typeof t=="string"?(xo[a]("[%s] %s",e,t),o.emitString(a,e,t)):(xo[a]("[%s] %o",e,t),o.emitObject(a,e,t))},"log"),ye=new Ir,y=p((a,e=!1)=>({trace:p(t=>ve("trace",a,t,ye),"trace"),debug:p(t=>ve("debug",a,t,ye),"debug"),info:p(t=>ve("info",a,t,ye),"info"),warn:p(t=>ve("warn",a,t,ye),"warn"),error:p(t=>ve("error",a,t,ye),"error"),fatal:p(t=>ve("fatal",a,t,ye),"fatal"),emitter:e?ye:void 0}),"getLogger");import{createReadStream as Ur,existsSync as Qo,mkdirSync as Yo,readFile as Dr,stat as $r,writeFile as jr}from"node:fs";import{existsSync as wo,mkdirSync as bo}from"node:fs";import Ce from"node:path";import S from"node:process";import{v4 as wr}from"uuid";import{forward as br}from"@ngrok/ngrok";var Yn=function(a){return a.text="text",a.number="number",a.boolean="boolean",a.radio="radio",a.check="check",a.select="select",a.date="date",a.image="image",a.video="video",a.audio="audio",a.url="url",a.email="email",a.phone="phone",a.ipv4="ipv4",a}({}),$={instanceName:{type:"string",title:"\u5B9E\u4F8BID","x-order":1e3,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u5EFA\u8BAE\u4F7F\u7528\u5BB9\u6613\u8BC6\u522B\u7684\u6807\u8BC6\uFF0C\u53EF\u4EE5\u81EA\u5DF1\u4EFB\u610F\u6307\u5B9A\uFF0C\u5168\u5C40\u5B9E\u4F8B\u4E2D\u552F\u4E00\u5373\u53EF\uFF0C\u7559\u7A7A\u4F7F\u7528\u968F\u673A\u6570\u3002"},"x-decorator-props":{tooltip:"\u53EF\u4EE5\u81EA\u5DF1\u4EFB\u610F\u6307\u5B9A\uFF0C\u5168\u5C40\u5B9E\u4F8B\u4E2D\u552F\u4E00\u5373\u53EF\u3002\u7559\u7A7A\u4F7F\u7528\u968F\u673A\u6570\u3002"}}},K=y("config"),Mt=Number(S.env.PORT??5050),vo=String(S.env.HOST?.length?S.env.HOST:"0.0.0.0"),ko=String(S.env.PRIVATE_HOST?.length?S.env.PRIVATE_HOST:vo),vr="http://"+ko+":"+Mt,kr="ws://"+ko+":"+Mt,ke,Se,le=String(S.env.PUBLIC_HOST??"").trim();if(le.length){let a=Number(S.env.PUBLIC_SSL)===1,e=80;S.env.PUBLIC_PORT?.length?e=Number(S.env.PUBLIC_PORT):a&&(e=443),le.indexOf("$port")<0?(ke=(a?"wss://":"ws://")+le+":"+e,Se=(a?"https://":"http://")+le+":"+e):(ke=(a?"wss://":"ws://")+le.replace("$port",e.toString()),Se=(a?"https://":"http://")+le.replace("$port",e.toString()))}else{let a=S.env.PUBLIC_TUNNEL_NAME;a?.length||K.warn("\u672A\u914D\u7F6EPUBLIC_HOST\uFF0C\u4E14\u6CA1\u6709\u914D\u7F6EPUBLIC_TUNNEL_NAME\uFF0C\u5C06\u5C1D\u8BD5\u4F7F\u7528\u968F\u673A\u57DF\u540D\uFF01");let e=S.env.PUBLIC_TUNNEL_TOKEN;if(!e?.length)throw new Error("ngrok token\u672A\u914D\u7F6E\uFF0C\u65E0\u6CD5\u81EA\u52A8\u751F\u6210\u5916\u7F51\u6620\u5C04\u5730\u5740\uFF0C\u8BF7\u5148\u914D\u7F6EPUBLIC_HOST\u6216\u8005ngrok\u76F8\u5173\u4FE1\u606F\uFF01");let t=await br({addr:Mt,authtoken:e,domain:a}),o=t.url();if(!o?.length)throw new Error("\u542F\u52A8ngrok\u5931\u8D25\uFF0C\u8BF7\u914D\u7F6EPUBLIC_HOST\u6216\u8005\u68C0\u67E5ngrok\u76F8\u5173\u914D\u7F6E\uFF01");for(let r of["SIGINT","SIGTERM"])S.once(r,async()=>{K.info("close ngrok tunnel"),t.close()});Se=o;let s=o.indexOf("https")===0;le=o.replace("https://","").replace("http://",""),ke=(s?"wss://":"ws://")+le,K.debug("auto generated public httpurl "+Se),K.info("\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F"),K.warn("\u5982\u679C\u4F7F\u7528\u4E86\u5BA2\u6237\u7AEF\u505A\u53EF\u89C6\u5316\u914D\u7F6E\uFF0C\u60A8\u9700\u8981\u5728\u6D4F\u89C8\u5668\u4E2D\u624B\u52A8\u6253\u5F00\u4E00\u6B21\u8BE5\u5730\u5740\uFF0C\u89E3\u9664\u514D\u8D39\u8BBF\u95EE\u9650\u5236\uFF01"),K.info("\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F"),K.debug("auto generated public wsurl "+ke)}Se?.length||K.warn("PUBLIC_HOST\u672A\u914D\u7F6E\u4E14\u672A\u80FD\u81EA\u52A8\u751F\u6210\u516C\u7F51\u5730\u5740\uFF0C\u90E8\u5206\u670D\u52A1\u53EF\u80FD\u4F1A\u5F02\u5E38\uFF01");var So=S.env.PUBLIC_PATH?.length?S.env.PUBLIC_PATH:"/public",Co=Ce.resolve(Ce.join("./",So));ke.length||K.warn("WS_URL not defined,if your message source need to connect with your http posted server url ,then error may occured!");var Nt=S.env.PUBLIC_TOKEN;Nt?.length||(Nt=wr(),K.warn("\u5F53\u524D\u6CA1\u6709PUBLIC_TOKEN\u73AF\u5883\u53D8\u91CF\uFF0C\u5C06\u751F\u6210\u4E00\u4E2A\u968F\u673Atoken\uFF0C\u670D\u52A1\u91CD\u542F\u540E\u4F1A\u5931\u6548\uFF01"),K.warn("\u968F\u673Atoken\u4E3A\uFF1A"+Nt));var so=Ce.resolve(Co,"temp");wo(so)||bo(so,{recursive:!0});var To=S.env.CONFIG_SERVER_URL,Ao=S.env.CONFIG_SERVER_EMAIL,Eo=S.env.CONFIG_SERVER_PASSWORD,No=!!(S.env.OFFLINE??!1);(!To?.length||!Eo?.length||!Ao?.length)&&(K.warn("CONFIG SERVER\u76F8\u5173\u73AF\u5883\u53D8\u91CF\u672A\u914D\u7F6E\uFF0C\u65E0\u6CD5\u4F7F\u7528\u5728\u7EBF\u914D\u7F6E\u529F\u80FD\uFF01"),No=!0);var Ft=Ce.resolve(Ce.join("./","data"));wo(Ft)||bo(Ft,{recursive:!0});var _={port:Mt,host:vo,wsUrl:ke,httpUrl:Se,privateHttpUrl:vr,privateWsUrl:kr,publicPath:Co,publicPathName:So,tempDir:so,redisUrl:S.env.REDIS_URL,offline:No,configServerUrl:To,configServerEmail:Ao,configServerPassword:Eo,publicToken:Nt,publicForceAuth:S.env.PUBLIC_FORCE_AUTH=="1",secretFile:S.env.SECRETS_FILE??"./config/.secrets.json",traceHttpRequest:S.env.TRACE_HTTP_REQUEST==="1",npmRegistry:S.env.NPM_REGISTRY?.length?S.env.NPM_REGISTRY:"https://registry.npmjs.com",npmTimeout:parseInt(S.env.NPM_TIMEOUT??3e5),serverCompress:S.env.SERVER_COMPRESS==="1",serverCompressMinSize:S.env.SERVER_COMPRESS_MIN_SIZE?Number(S.env.SERVER_COMPRESS_MIN_SIZE):10240,serverCompressMime:(S.env.SERVER_COMPRESS_MIME??"text/plain,text/html,text/css,application/javascript,application/json").split(","),dataPath:Ft,dbProvider:S.env.DB_PROVIDER?.length?S.env.DB_PROVIDER:"sqlite",dbConnection:S.env.DB_CONNECTION?.length?S.env.DB_CONNECTION:Ce.join(Ft,"chat.db"),minioMessageBucket:S.env.MINIO_MESSAGE_BUCKET??"messages"};K.warn("\u5F53\u524D\u516C\u7F51\u8BBF\u95EE\u5730\u5740\uFF1A"+_.httpUrl+" ,API TOKEN:"+_.publicToken);K.trace("\u5F53\u524D\u6574\u4F53\u914D\u7F6E\u4FE1\u606F\uFF1A");K.trace(_);import oe,{dirname as qr}from"node:path";import{v4 as Gr}from"uuid";import{Buffer as Le}from"node:buffer";import Oo from"recorder-core";var f=function(a){return a.CHAT_MESSAGE="CHAT_MESSAGE",a.RESPONSE_MESSAGE="RESPONSE_MESSAGE",a.LOGIN="LOGIN",a.LOGOUT="LOGOUT",a.GROUP_INFO_CHANGED="GROUP_INFO_CHANGED",a.SYSTEM="SYSTEM",a.SELF_SEND="SELF_SEND",a.FIRST_CHAT="FIRST_CHAT",a.GROUP_NEW_USER="GROUP_NEW_USER",a.ENTER_CHAT="ENTER_CHAT",a.CUSTOM="CUSTOM",a}({}),l=function(a){return a.TEXT="TEXT",a.RICH_TEXT="RICH_TEXT",a.IMAGE="IMAGE",a.AUDIO="AUDIO",a.VIDEO="VIDEO",a.ARTICLE="ARTICLE",a.MUSIC="MUSIC",a.FILE="FILE",a.EMOTION="EMOTION",a.MP="MP",a.REF="REF",a.POSITION="POSITION",a.PHONE="PHONE",a.FRIEND_REQUEST="FRIEND_REQUEST",a.CONTACT_CARD="CONTACT_CARD",a.CARD="CARD",a.RECALL="RECALL",a.PAT="PAT",a.SYSTEM="SYSTEM",a.SUBSCRIBE="SUBSCRIBE",a.UNSUBSCRIBE="UNSUBSCRIBE",a.CUSTOM="CUSTOM",a}({}),Ot=class extends Error{static{p(this,"SourceApiNotFoundError")}},Pt=class extends Error{static{p(this,"SourceApiMissingParamsError")}},Rt=class extends Error{static{p(this,"SourceApiUnAuthorizedError")}};import{v4 as xe}from"uuid";import{decodeWavFile as Sr}from"wav-file-decoder";import Fo from"keyv";import Cr from"@keyv/redis";import Tr from"ffmpeg-static";import Po from"fluent-ffmpeg";import{createReadStream as Ar,readFileSync as Er}from"fs";import{fileTypeFromBuffer as Nr,fileTypeFromStream as Fr}from"file-type";import{exec as Ro}from"child_process";import Mr from"emittery";Po.setFfmpegPath(Tr);var N=y("helper"),Or=JSON.parse(await Er(_.secretFile).toString());N.trace("secrets files path:"+_.secretFile);var Te=p(function(a,e,t,o){let s=a.byteLength,r=new ArrayBuffer(44+s),i=new DataView(r);function n(u,g,w){for(let x=0;x<w.length;x++)u.setUint8(g+x,w.charCodeAt(x))}p(n,"writeString");let c=0;n(i,c,"RIFF"),c+=4,i.setUint32(c,36+s,!0),c+=4,n(i,c,"WAVE"),c+=4,n(i,c,"fmt "),c+=4,i.setUint32(c,16,!0),c+=4,i.setUint16(c,1,!0),c+=2,i.setUint16(c,o,!0),c+=2,i.setUint32(c,e,!0),c+=4,i.setUint32(c,e*o*(t/8),!0),c+=4,i.setUint16(c,o*(t/8),!0),c+=2,i.setUint16(c,t,!0),c+=2,n(i,c,"data"),c+=4,i.setUint32(c,s,!0),c+=4;function m(u,g,w){let x=new Int32Array(w);for(let v=0;v<x.length;v++,g+=4)u.setInt32(g,x[v],!0)}p(m,"floatTo32BitPCM");function d(u,g,w){let x=new Int16Array(w);for(let v=0;v<x.length;v++,g+=2)u.setInt16(g,x[v],!0)}p(d,"floatTo16BitPCM");function h(u,g,w){let x=new Int8Array(w);for(let v=0;v<x.length;v++,g++)u.setInt8(g,x[v])}return p(h,"floatTo8BitPCM"),t==16?d(i,44,a):t==8?h(i,44,a):m(i,44,a),i.buffer},"addWavHeader");function Bo(a){return a.replace(/[\p{Emoji_Presentation}\p{Emoji}\u200D]+/gu,"")}p(Bo,"removeEmoji");function Lo(a){return a.replace(/(#+\s*|\*\*\s*|\*\s*|-\s*|_)/g,"").replace(/\*\*(.*?)\*\*/g,"$1").replace(/_(.*?)_/g,"$1").replace(/`(.*?)`/g,"$1").replace(/$$(.*?)$$$$.*?$$/g,"$1").trim()}p(Lo,"removeMarkdown");function Uo(a){return/[\p{Emoji_Presentation}\p{Emoji}\u200D]+/gu.test(a)}p(Uo,"hasEmoji");function Do(a){return[/^#{1,6}\s/,/\*\*.*\*\*/,/\*.*\*/,/~~.*~~/,/`{1,3}[^`](.*?)`{1,3}/,/^```[\s\S]*?^```/m,/\[.*?\]\(.*?\)/,/!\[.*?\]\(.*?\)/,/^>\s/,/^-+\s*$/,/^(\*|\-|\+)\s/].some(t=>t.test(a))}p(Do,"hasMarkdown");function $o(a){return`\u6807\u9898\uFF1A${a.title};\u4F5C\u8005\uFF1A${a.source};\u7F51\u5740\uFF1A${a.url}`}p($o,"extractArticleInfo");function no(a){let e="";return a.placeName?.length&&(e+=a.placeName),a.placeDetail?.length&&(e+="("+a.placeDetail+")"),a.lat!==void 0&&(e+=`\u7ECF\u5EA6${a.lon}\uFF0C\u7EAC\u5EA6${a.lat}`),e}p(no,"extractPositionInfo");function me(a){let e=/\((https?:\/\/[^\s]+)\)/g,t,o=a;for(;(t=e.exec(a))!==null;){let s=t[1];o=o.replaceAll(s,` ${s} `)}return o}p(me,"betterMarkdown");async function de(a){for(let e of a)if(e.dispose){let t=await e.dispose();t?.length&&N.error(t)}}p(de,"disposeObjects");async function Ie(a){return new Promise((e,t)=>{Oo.amr2wav(a.buffer,o=>{e(b.fromBuffer(Buffer.from(o),xe()+".wav","binary"))},o=>{N.error(o),t(o)})})}p(Ie,"arm2wav");async function pe(a){let e=(await a.asBuffer()).buffer,t=Sr(e),o=t.channelData[0];if(t.numberOfChannels===2){o=new Float32Array(t.channelData[0].length);for(let r=0;r<o.length;r++)o[r]=(t.channelData[0][r]+t.channelData[1][r])/2}else if(t.numberOfChannels!==1){N.warn("\u4E0D\u652F\u6301\u7684\u901A\u9053\u6570\u91CF\uFF1A"+t.numberOfChannels);return}let s=new Int16Array(o.length);for(let r=0;r<o.length;r++)o[r]<-.999999?s[r]=-32768:o[r]>.999999?s[r]=32767:s[r]=Math.round(o[r]*32767);return new Promise((r,i)=>{Oo({type:"amr",sampleRate:t.sampleRate,bitRate:12.2}).mock(s,t.sampleRate).stop(async(c,m)=>{let d=b.fromBuffer(Buffer.from(await c.arrayBuffer()),xe()+".amr");r({file:d,duration:m})},c=>{i(c)})})}p(pe,"wav2amr");function Bt(a){return _.redisUrl?.length?new Fo(new Cr(_.redisUrl),{namespace:a}):new Fo}p(Bt,"createCacheManager");function Z(a){if(!a.startsWith("__"))return a;let e=Or[a.slice(2)];return e?.length||N.warn("\u672A\u80FD\u627E\u5230key\u4E3A"+a.slice(2)+"\u7684\u79D8\u94A5"),e}p(Z,"getSecret");function Lt(a){return/^1[3-9]\d{9}$/.test(a)}p(Lt,"isPhoneNumber");function he(a=16){let e="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",t="";for(let o=0;o<a;o++){let s=Math.floor(Math.random()*e.length);t+=e[s]}return t}p(he,"generateRandomString");async function Pr(a,e,t,o){return new Promise(s=>{let r=Po(a);o&&(r=o(r)),r.toFormat(t).on("end",()=>{s(!0)}).on("error",i=>{N.debug(`\u4ECE${a}\u8F6C\u6362\u4E3A${t}\u5931\u8D25\uFF1A${i.message}`),s(!1)}).save(e)})}p(Pr,"transFormat");async function Pe(a,e,t){return new Promise(o=>{a.asLocalPath().then(s=>{let r=s+"."+e;Pr(s,r,e,t).then(i=>{if(i){let n=b.fromPath(r);o(n)}else o(void 0)})})})}p(Pe,"transFileFormat");function Rr(a){let e=/!\[.*?\]\((.*?)\)/g,t=[],o;for(;(o=e.exec(a))!==null;)t.push(o[1]);return t}p(Rr,"_extractMarkdonwImages");function Re(a,e=!1){if(a.indexOf("![")>=0)return Rr(a);if(e)return[];let t=/(?:\(|"|'|\s|^)(https?:\/\/[^\s'"()]+(?:\.[^\s'"()]+)+(?:\/[^\s'"()]+)*\.(?:jpg|jpeg|png|gif|webp)(?:\?[^\s'"()]*)?)(?:\)|"|'|\s|$)/gi,o=a.match(t);return o?o.map(s=>s.trim().replace(/^[('" ]+|['") ]+$/g,"")):[]}p(Re,"extractImageUrls");function jo(a){let e=/!\[.*?\]\(.*?\)/g;return a.match(e)||[]}p(jo,"extractMarkdownImageTags");async function qo(a,e){let t=typeof a=="string"?await Fr(Ar(a)):await Nr(a);if(!t)return N.warn("\u672A\u80FD\u901A\u8FC7\u6587\u4EF6\u5185\u5BB9\u8BC6\u522BMIME\uFF0C\u5C06\u7EE7\u7EED\u4F7F\u7528\u539F\u6587\u4EF6\u540E\u7F00"),e;if(e){let o=e.lastIndexOf(".");o>0?e=e.substring(0,o)+"."+t.ext:e+="."+t.ext}else e=e??xe()+"."+t.ext;return e}p(qo,"detectName");async function Go(a){let e=[];for await(let t of a)e.push(t);return Buffer.concat(e)}p(Go,"stream2buffer");async function ee(a,e){let t=a.getReader(),o=new TextDecoder("utf-8"),s="",r=p(async()=>{let{value:i,done:n}=await t.read();if(i){let c=o.decode(i)?.trim();if(c?.length){let m=c.split(`
1
+ var _r=Object.defineProperty;var p=(a,e)=>_r(a,"name",{value:e,configurable:!0});import"reflect-metadata";import Kr from"emittery";import yr from"pino";import ro from"node:process";import xr from"emittery";var Io={level:ro.env.LOG_LEVEL??"debug"};ro.env.NODE_ENV==="development"&&(Io.transport={target:"pino-pretty",options:{colorize:!0}});var xo=yr(Io),Ir=class extends xr{static{p(this,"LogEmitter")}_levelMap={trace:0,debug:1,info:2,warn:3,error:4,fatal:5};_currentLevelVal;_currentLevel;get level(){return this._currentLevel}constructor(e){super(),this.setLevel(e??ro.env.LOG_LEVEL??"trace")}setLevel(e){this._currentLevelVal=this._levelMap[e],this._currentLevel=e}emitString(e,t,o){this._levelMap[e]>=this._currentLevelVal&&this.emit("log",{level:e,name:t,message:o})}emitObject(e,t,o){this._levelMap[e]>=this._currentLevelVal&&this.emit("log",{level:e,name:t,message:o})}},ke=p((a,e,t,o)=>{typeof t=="string"?(xo[a]("[%s] %s",e,t),o.emitString(a,e,t)):(xo[a]("[%s] %o",e,t),o.emitObject(a,e,t))},"log"),xe=new Ir,y=p((a,e=!1)=>({trace:p(t=>ke("trace",a,t,xe),"trace"),debug:p(t=>ke("debug",a,t,xe),"debug"),info:p(t=>ke("info",a,t,xe),"info"),warn:p(t=>ke("warn",a,t,xe),"warn"),error:p(t=>ke("error",a,t,xe),"error"),fatal:p(t=>ke("fatal",a,t,xe),"fatal"),emitter:e?xe:void 0}),"getLogger");import{createReadStream as Ur,existsSync as Qo,mkdirSync as Yo,readFile as Dr,stat as $r,writeFile as jr}from"node:fs";import{existsSync as wo,mkdirSync as bo}from"node:fs";import Ce from"node:path";import S from"node:process";import{v4 as wr}from"uuid";import{forward as br}from"@ngrok/ngrok";var Yn=function(a){return a.text="text",a.number="number",a.boolean="boolean",a.radio="radio",a.check="check",a.select="select",a.date="date",a.image="image",a.video="video",a.audio="audio",a.url="url",a.email="email",a.phone="phone",a.ipv4="ipv4",a}({}),$={instanceName:{type:"string",title:"\u5B9E\u4F8BID","x-order":1e3,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u5EFA\u8BAE\u4F7F\u7528\u5BB9\u6613\u8BC6\u522B\u7684\u6807\u8BC6\uFF0C\u53EF\u4EE5\u81EA\u5DF1\u4EFB\u610F\u6307\u5B9A\uFF0C\u5168\u5C40\u5B9E\u4F8B\u4E2D\u552F\u4E00\u5373\u53EF\uFF0C\u7559\u7A7A\u4F7F\u7528\u968F\u673A\u6570\u3002"},"x-decorator-props":{tooltip:"\u53EF\u4EE5\u81EA\u5DF1\u4EFB\u610F\u6307\u5B9A\uFF0C\u5168\u5C40\u5B9E\u4F8B\u4E2D\u552F\u4E00\u5373\u53EF\u3002\u7559\u7A7A\u4F7F\u7528\u968F\u673A\u6570\u3002"}}},H=y("config"),Pe=Number(S.env.PORT??5050),vo=String(S.env.HOST?.length?S.env.HOST:"0.0.0.0"),ko=String(S.env.PRIVATE_HOST?.length?S.env.PRIVATE_HOST:vo),vr="http://"+ko+":"+Pe,kr="ws://"+ko+":"+Pe,Se,ie,me=String(S.env.PUBLIC_HOST??"").trim();if(me.length){let a=Number(S.env.PUBLIC_SSL)===1,e=80;S.env.PUBLIC_PORT?.length?e=Number(S.env.PUBLIC_PORT):a&&(e=443),me.indexOf("$port")<0?(Se=(a?"wss://":"ws://")+me+":"+e,ie=(a?"https://":"http://")+me+":"+e):(Se=(a?"wss://":"ws://")+me.replace("$port",e.toString()),ie=(a?"https://":"http://")+me.replace("$port",e.toString()))}else{ie="http://localhost:"+Pe;let a=S.env.PUBLIC_TUNNEL_TOKEN;if(a?.length){let t=S.env.PUBLIC_TUNNEL_NAME;t?.length||H.warn("\u672A\u914D\u7F6EPUBLIC_HOST\uFF0C\u4E14\u6CA1\u6709\u914D\u7F6EPUBLIC_TUNNEL_NAME\uFF0C\u5C06\u5C1D\u8BD5\u4F7F\u7528\u968F\u673A\u57DF\u540D\uFF01");let o=await br({addr:Pe,authtoken:a,domain:t});if(ie=o.url(),!ie?.length)throw new Error("\u542F\u52A8ngrok\u5931\u8D25\uFF0C\u8BF7\u914D\u7F6EPUBLIC_HOST\u6216\u8005\u68C0\u67E5ngrok\u76F8\u5173\u914D\u7F6E\uFF01");for(let s of["SIGINT","SIGTERM"])S.once(s,async()=>{H.info("close ngrok tunnel"),o.close()});H.debug("auto generated public httpurl "+ie),H.info("\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F"),H.warn("\u5982\u679C\u4F7F\u7528\u4E86\u5BA2\u6237\u7AEF\u505A\u53EF\u89C6\u5316\u914D\u7F6E\uFF0C\u60A8\u9700\u8981\u5728\u6D4F\u89C8\u5668\u4E2D\u624B\u52A8\u6253\u5F00\u4E00\u6B21\u8BE5\u5730\u5740\uFF0C\u89E3\u9664\u514D\u8D39\u8BBF\u95EE\u9650\u5236\uFF01"),H.info("\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F")}else H.warn("\u60A8\u6CA1\u6709\u914D\u7F6EPUBLIC_HOST\uFF0C\u5F53\u524D\u4F7F\u7528\u672C\u5730\u5730\u5740\uFF0C\u90E8\u5206\u4F9D\u8D56\u5916\u7F51\u57DF\u540D\u7684\u529F\u80FD\u53EF\u80FD\u65E0\u6CD5\u4F7F\u7528\uFF0C\u5EFA\u8BAE\u914D\u7F6EPUBLIC_HOST\uFF0C\u6216\u8005\u5230ngrok\u5B98\u7F51\u6CE8\u518C\u4E00\u4E2A\u8D26\u53F7\uFF0C\u5E76\u914D\u7F6EPUBLIC_TUNNEL_TOKEN\uFF0C\u5373\u53EF\u81EA\u52A8\u7533\u8BF7\u57DF\u540D\uFF01");let e=ie.indexOf("https")===0;me=ie.replace("https://","").replace("http://",""),Se=(e?"wss://":"ws://")+me,H.debug("auto generated public wsurl "+Se)}ie?.length||H.warn("PUBLIC_HOST\u672A\u914D\u7F6E\u4E14\u672A\u80FD\u81EA\u52A8\u751F\u6210\u516C\u7F51\u5730\u5740\uFF0C\u90E8\u5206\u670D\u52A1\u53EF\u80FD\u4F1A\u5F02\u5E38\uFF01");var So=S.env.PUBLIC_PATH?.length?S.env.PUBLIC_PATH:"/public",Co=Ce.resolve(Ce.join("./",So));Se.length||H.warn("WS_URL not defined,if your message source need to connect with your http posted server url ,then error may occured!");var Ft=S.env.PUBLIC_TOKEN;Ft?.length||(Ft=wr(),H.warn("\u5F53\u524D\u6CA1\u6709PUBLIC_TOKEN\u73AF\u5883\u53D8\u91CF\uFF0C\u5C06\u751F\u6210\u4E00\u4E2A\u968F\u673Atoken\uFF0C\u670D\u52A1\u91CD\u542F\u540E\u4F1A\u5931\u6548\uFF01"),H.warn("\u968F\u673Atoken\u4E3A\uFF1A"+Ft));var so=Ce.resolve(Co,"temp");wo(so)||bo(so,{recursive:!0});var To=S.env.CONFIG_SERVER_URL,Ao=S.env.CONFIG_SERVER_EMAIL,Eo=S.env.CONFIG_SERVER_PASSWORD,No=!!(S.env.OFFLINE??!1);(!To?.length||!Eo?.length||!Ao?.length)&&(H.warn("CONFIG SERVER\u76F8\u5173\u73AF\u5883\u53D8\u91CF\u672A\u914D\u7F6E\uFF0C\u65E0\u6CD5\u4F7F\u7528\u5728\u7EBF\u914D\u7F6E\u529F\u80FD\uFF01"),No=!0);var Mt=Ce.resolve(Ce.join("./","data"));wo(Mt)||bo(Mt,{recursive:!0});var _={port:Pe,host:vo,wsUrl:Se,httpUrl:ie,privateHttpUrl:vr,privateWsUrl:kr,publicPath:Co,publicPathName:So,tempDir:so,redisUrl:S.env.REDIS_URL,offline:No,configServerUrl:To,configServerEmail:Ao,configServerPassword:Eo,publicToken:Ft,publicForceAuth:S.env.PUBLIC_FORCE_AUTH=="1",secretFile:S.env.SECRETS_FILE??"./config/.secrets.json",traceHttpRequest:S.env.TRACE_HTTP_REQUEST==="1",npmRegistry:S.env.NPM_REGISTRY?.length?S.env.NPM_REGISTRY:"https://registry.npmjs.com",npmTimeout:parseInt(S.env.NPM_TIMEOUT??3e5),serverCompress:S.env.SERVER_COMPRESS==="1",serverCompressMinSize:S.env.SERVER_COMPRESS_MIN_SIZE?Number(S.env.SERVER_COMPRESS_MIN_SIZE):10240,serverCompressMime:(S.env.SERVER_COMPRESS_MIME??"text/plain,text/html,text/css,application/javascript,application/json").split(","),dataPath:Mt,dbProvider:S.env.DB_PROVIDER?.length?S.env.DB_PROVIDER:"sqlite",dbConnection:S.env.DB_CONNECTION?.length?S.env.DB_CONNECTION:Ce.join(Mt,"chat.db"),minioMessageBucket:S.env.MINIO_MESSAGE_BUCKET??"messages"};H.warn("\u5F53\u524D\u516C\u7F51\u8BBF\u95EE\u5730\u5740\uFF1A"+_.httpUrl+" ,API TOKEN:"+_.publicToken);H.trace("\u5F53\u524D\u6574\u4F53\u914D\u7F6E\u4FE1\u606F\uFF1A");H.trace(_);import oe,{dirname as qr}from"node:path";import{v4 as Hr}from"uuid";import{Buffer as Ue}from"node:buffer";import Oo from"recorder-core";var f=function(a){return a.CHAT_MESSAGE="CHAT_MESSAGE",a.RESPONSE_MESSAGE="RESPONSE_MESSAGE",a.LOGIN="LOGIN",a.LOGOUT="LOGOUT",a.GROUP_INFO_CHANGED="GROUP_INFO_CHANGED",a.SYSTEM="SYSTEM",a.SELF_SEND="SELF_SEND",a.FIRST_CHAT="FIRST_CHAT",a.GROUP_NEW_USER="GROUP_NEW_USER",a.ENTER_CHAT="ENTER_CHAT",a.CUSTOM="CUSTOM",a}({}),l=function(a){return a.TEXT="TEXT",a.RICH_TEXT="RICH_TEXT",a.IMAGE="IMAGE",a.AUDIO="AUDIO",a.VIDEO="VIDEO",a.ARTICLE="ARTICLE",a.MUSIC="MUSIC",a.FILE="FILE",a.EMOTION="EMOTION",a.MP="MP",a.REF="REF",a.POSITION="POSITION",a.PHONE="PHONE",a.FRIEND_REQUEST="FRIEND_REQUEST",a.CONTACT_CARD="CONTACT_CARD",a.CARD="CARD",a.RECALL="RECALL",a.PAT="PAT",a.SYSTEM="SYSTEM",a.SUBSCRIBE="SUBSCRIBE",a.UNSUBSCRIBE="UNSUBSCRIBE",a.CUSTOM="CUSTOM",a}({}),Ot=class extends Error{static{p(this,"SourceApiNotFoundError")}},Pt=class extends Error{static{p(this,"SourceApiMissingParamsError")}},Rt=class extends Error{static{p(this,"SourceApiUnAuthorizedError")}};import{v4 as Ie}from"uuid";import{decodeWavFile as Sr}from"wav-file-decoder";import Fo from"keyv";import Cr from"@keyv/redis";import Tr from"ffmpeg-static";import Po from"fluent-ffmpeg";import{createReadStream as Ar,readFileSync as Er}from"fs";import{fileTypeFromBuffer as Nr,fileTypeFromStream as Fr}from"file-type";import{exec as Ro}from"child_process";import Mr from"emittery";Po.setFfmpegPath(Tr);var N=y("helper"),Or=JSON.parse(await Er(_.secretFile).toString());N.trace("secrets files path:"+_.secretFile);var Te=p(function(a,e,t,o){let s=a.byteLength,r=new ArrayBuffer(44+s),i=new DataView(r);function n(u,g,w){for(let x=0;x<w.length;x++)u.setUint8(g+x,w.charCodeAt(x))}p(n,"writeString");let c=0;n(i,c,"RIFF"),c+=4,i.setUint32(c,36+s,!0),c+=4,n(i,c,"WAVE"),c+=4,n(i,c,"fmt "),c+=4,i.setUint32(c,16,!0),c+=4,i.setUint16(c,1,!0),c+=2,i.setUint16(c,o,!0),c+=2,i.setUint32(c,e,!0),c+=4,i.setUint32(c,e*o*(t/8),!0),c+=4,i.setUint16(c,o*(t/8),!0),c+=2,i.setUint16(c,t,!0),c+=2,n(i,c,"data"),c+=4,i.setUint32(c,s,!0),c+=4;function m(u,g,w){let x=new Int32Array(w);for(let v=0;v<x.length;v++,g+=4)u.setInt32(g,x[v],!0)}p(m,"floatTo32BitPCM");function d(u,g,w){let x=new Int16Array(w);for(let v=0;v<x.length;v++,g+=2)u.setInt16(g,x[v],!0)}p(d,"floatTo16BitPCM");function h(u,g,w){let x=new Int8Array(w);for(let v=0;v<x.length;v++,g++)u.setInt8(g,x[v])}return p(h,"floatTo8BitPCM"),t==16?d(i,44,a):t==8?h(i,44,a):m(i,44,a),i.buffer},"addWavHeader");function Bo(a){return a.replace(/[\p{Emoji_Presentation}\p{Emoji}\u200D]+/gu,"")}p(Bo,"removeEmoji");function Lo(a){return a.replace(/(#+\s*|\*\*\s*|\*\s*|-\s*|_)/g,"").replace(/\*\*(.*?)\*\*/g,"$1").replace(/_(.*?)_/g,"$1").replace(/`(.*?)`/g,"$1").replace(/$$(.*?)$$$$.*?$$/g,"$1").trim()}p(Lo,"removeMarkdown");function Uo(a){return/[\p{Emoji_Presentation}\p{Emoji}\u200D]+/gu.test(a)}p(Uo,"hasEmoji");function Do(a){return[/^#{1,6}\s/,/\*\*.*\*\*/,/\*.*\*/,/~~.*~~/,/`{1,3}[^`](.*?)`{1,3}/,/^```[\s\S]*?^```/m,/\[.*?\]\(.*?\)/,/!\[.*?\]\(.*?\)/,/^>\s/,/^-+\s*$/,/^(\*|\-|\+)\s/].some(t=>t.test(a))}p(Do,"hasMarkdown");function $o(a){return`\u6807\u9898\uFF1A${a.title};\u4F5C\u8005\uFF1A${a.source};\u7F51\u5740\uFF1A${a.url}`}p($o,"extractArticleInfo");function no(a){let e="";return a.placeName?.length&&(e+=a.placeName),a.placeDetail?.length&&(e+="("+a.placeDetail+")"),a.lat!==void 0&&(e+=`\u7ECF\u5EA6${a.lon}\uFF0C\u7EAC\u5EA6${a.lat}`),e}p(no,"extractPositionInfo");function de(a){let e=/\((https?:\/\/[^\s]+)\)/g,t,o=a;for(;(t=e.exec(a))!==null;){let s=t[1];o=o.replaceAll(s,` ${s} `)}return o}p(de,"betterMarkdown");async function he(a){for(let e of a)if(e.dispose){let t=await e.dispose();t?.length&&N.error(t)}}p(he,"disposeObjects");async function we(a){return new Promise((e,t)=>{Oo.amr2wav(a.buffer,o=>{e(b.fromBuffer(Buffer.from(o),Ie()+".wav","binary"))},o=>{N.error(o),t(o)})})}p(we,"arm2wav");async function ce(a){let e=(await a.asBuffer()).buffer,t=Sr(e),o=t.channelData[0];if(t.numberOfChannels===2){o=new Float32Array(t.channelData[0].length);for(let r=0;r<o.length;r++)o[r]=(t.channelData[0][r]+t.channelData[1][r])/2}else if(t.numberOfChannels!==1){N.warn("\u4E0D\u652F\u6301\u7684\u901A\u9053\u6570\u91CF\uFF1A"+t.numberOfChannels);return}let s=new Int16Array(o.length);for(let r=0;r<o.length;r++)o[r]<-.999999?s[r]=-32768:o[r]>.999999?s[r]=32767:s[r]=Math.round(o[r]*32767);return new Promise((r,i)=>{Oo({type:"amr",sampleRate:t.sampleRate,bitRate:12.2}).mock(s,t.sampleRate).stop(async(c,m)=>{let d=b.fromBuffer(Buffer.from(await c.arrayBuffer()),Ie()+".amr");r({file:d,duration:m})},c=>{i(c)})})}p(ce,"wav2amr");function Bt(a){return _.redisUrl?.length?new Fo(new Cr(_.redisUrl),{namespace:a}):new Fo}p(Bt,"createCacheManager");function Z(a){if(!a.startsWith("__"))return a;let e=Or[a.slice(2)];return e?.length||N.warn("\u672A\u80FD\u627E\u5230key\u4E3A"+a.slice(2)+"\u7684\u79D8\u94A5"),e}p(Z,"getSecret");function Lt(a){return/^1[3-9]\d{9}$/.test(a)}p(Lt,"isPhoneNumber");function ue(a=16){let e="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",t="";for(let o=0;o<a;o++){let s=Math.floor(Math.random()*e.length);t+=e[s]}return t}p(ue,"generateRandomString");async function Pr(a,e,t,o){return new Promise(s=>{let r=Po(a);o&&(r=o(r)),r.toFormat(t).on("end",()=>{s(!0)}).on("error",i=>{N.debug(`\u4ECE${a}\u8F6C\u6362\u4E3A${t}\u5931\u8D25\uFF1A${i.message}`),s(!1)}).save(e)})}p(Pr,"transFormat");async function Re(a,e,t){return new Promise(o=>{a.asLocalPath().then(s=>{let r=s+"."+e;Pr(s,r,e,t).then(i=>{if(i){let n=b.fromPath(r);o(n)}else o(void 0)})})})}p(Re,"transFileFormat");function Rr(a){let e=/!\[.*?\]\((.*?)\)/g,t=[],o;for(;(o=e.exec(a))!==null;)t.push(o[1]);return t}p(Rr,"_extractMarkdonwImages");function Be(a,e=!1){if(a.indexOf("![")>=0)return Rr(a);if(e)return[];let t=/(?:\(|"|'|\s|^)(https?:\/\/[^\s'"()]+(?:\.[^\s'"()]+)+(?:\/[^\s'"()]+)*\.(?:jpg|jpeg|png|gif|webp)(?:\?[^\s'"()]*)?)(?:\)|"|'|\s|$)/gi,o=a.match(t);return o?o.map(s=>s.trim().replace(/^[('" ]+|['") ]+$/g,"")):[]}p(Be,"extractImageUrls");function jo(a){let e=/!\[.*?\]\(.*?\)/g;return a.match(e)||[]}p(jo,"extractMarkdownImageTags");async function qo(a,e){let t=typeof a=="string"?await Fr(Ar(a)):await Nr(a);if(!t)return N.warn("\u672A\u80FD\u901A\u8FC7\u6587\u4EF6\u5185\u5BB9\u8BC6\u522BMIME\uFF0C\u5C06\u7EE7\u7EED\u4F7F\u7528\u539F\u6587\u4EF6\u540E\u7F00"),e;if(e){let o=e.lastIndexOf(".");o>0?e=e.substring(0,o)+"."+t.ext:e+="."+t.ext}else e=e??Ie()+"."+t.ext;return e}p(qo,"detectName");async function Ho(a){let e=[];for await(let t of a)e.push(t);return Buffer.concat(e)}p(Ho,"stream2buffer");async function ee(a,e){let t=a.getReader(),o=new TextDecoder("utf-8"),s="",r=p(async()=>{let{value:i,done:n}=await t.read();if(i){let c=o.decode(i)?.trim();if(c?.length){let m=c.split(`
2
2
  `).map(d=>d.replace("data:","").trim()).filter(d=>d.length&&!d.startsWith("event:"));if(m.length){let d=s+m[0];try{let h=JSON.parse(d);if(e(h),m.length>1){for(let u=1;u<m.length-1;u++)h=JSON.parse(m[u]),e(h);try{h=JSON.parse(m[m.length-1]),e(h)}catch{s=m[m.length-1]}}}catch{s=d}}}}n?N.debug("\u6D88\u606F\u6D41\u5173\u95ED"):await r()},"read");return r()}p(ee,"sse");async function Ut(a){let e=`### ${a.title}`;for(let t of a.content)if(t.type==="text")e+=`
3
3
 
4
4
  ${t.data}
@@ -6,24 +6,24 @@ ${t.data}
6
6
  ![${o.file.name}](${await o.file.asUrl()})
7
7
  `}else if(t.type==="file"||t.type==="video"){let o=t.data;e+=`
8
8
  [${o.file.name}](${await o.file.asUrl()})
9
- `}else t.type==="at"?e+=`@${t.data}`:N.warn("\u4E0D\u652F\u6301custom\u7C7B\u578B\u7684richtext\u8F6Cmarkdown\uFF01");return e}p(Ut,"richText2Markdown");function Ho(a,e){let t=e?.options.instanceName?`[${e.options.instanceName}]`:"";return`chat message[id:${a.messageId}] from user id:${a.senderId},name:${a.senderName},nick:${a.senderInfo?.nickName} of source${t} ${a.isGroupChat?"[group id]":"[user id]"}:${a.fromId} with content:${typeof a.content=="string"?a.content:"none text content[type:"+a.type+"]"}`}p(Ho,"getFromMessageSummary");function Ko(a,e){let t=e?.options.instanceName?`[${e.options.instanceName}]`:"";return`send message[id:${a.messageId}] to user(s): [${a.toInfo?.map(o=>`(id:${o.userId},name:${o.userName},nick:${o.nickName})`).join(",")}] of source${t} ${a.isGroupChat?"[group id]":"[user id]"}:${a.fromId} with content:${typeof a.content=="string"?a.content:"none text content[type:"+a.type+"]"}`}p(Ko,"getToMessageSummary");function zo(a){return{type:"formily",formily:{type:"object",properties:a}}}p(zo,"createFormilySchema");function Br(a){if(a?.trim().startsWith("@")){let e=a.split(/\s+/);if(e.length<=1)return"";a=e.slice(1).join(""),N.trace("\u4EE5@\u5F00\u5934\uFF0C\u5904\u7406\u540E\u7684\u5185\u5BB9\uFF1A"+a)}return a}p(Br,"removeTextAt");function Mo(a,e){return a=Br(a),a?.trim().length?e.type==="startsWith"&&!a.startsWith(e.content)||e.type==="contains"&&a.indexOf(e.content)<0?!1:e.type==="in"?e.content.indexOf(a)>=0:a.match(e.content)!==null:(N.trace("\u5185\u5BB9\u4E3A\u7A7A\uFF01"),!1)}p(Mo,"filterContentRule");async function Be(a){return new Promise(e=>{setTimeout(()=>{e()},a)})}p(Be,"sleep");function we(a,e){if(N.trace("check rule "+a.instanceName),(e.message.type===l.TEXT||e.message.type===l.REF)&&e.message.isGroupChat&&a.respondTo){let t=!1;a.respondTo.at&&e.message.atList?.indexOf(e.me[e.source.params.fieldInAtList??"userId"])>=0&&(t=!0);let o=!1,s=((typeof e.message.content=="string"?e.message.content:e.message.content.text)??"").trim();s.length&&a.respondTo.names?.find(i=>s.startsWith(i))&&(o=!0);let r=!1;if(a.respondTo.refered&&e.message.type===l.REF&&e.message.content.refMessage?.senderId===e.me.userId&&(r=!0),!t&&!o&&!r)return N.trace("\u6CA1\u6709\u901A\u8FC7respond\u6761\u4EF6\u68C0\u67E5"),N.debug("at: "+t+";name: "+o+";content: "+r),!1}if(a.messageTypes?.length&&a.messageTypes.indexOf("ALL")<0&&a.messageTypes.indexOf(e.message.type)<0)return N.trace("\u6D88\u606F\u8FC7\u6EE4\u7C7B\u578B\u4E0D\u5339\u914D\uFF0C\u5F53\u524D"+e.message.type),!1;if(e.message.isGroupChat){let t=e.message;if(a.groupMode==="deny")return N.trace("\u5F53\u524D\u914D\u7F6E\u4E3A\u4E0D\u54CD\u5E94\u7FA4\u7EC4\u6D88\u606F"),!1;if(a.groupNameRule){let o=t.groupInfo?.nickName??t.groupInfo?.userName??t.groupInfo?.userId??t.fromId,s=Mo(o,a.groupNameRule);if(a.groupMode==="blacklist"&&s)return N.trace("\u5F53\u524D\u914D\u7F6E\u4E3A\u9ED1\u540D\u5355\uFF0C\u5339\u914D\u7FA4\u7EC4\u540D"+o),!1;if(a.groupMode==="whitelist"&&!s)return N.trace("\u5F53\u524D\u914D\u7F6E\u4E3A\u767D\u540D\u5355\uFF0C\u4E0D\u5339\u914D\u7FA4\u7EC4\u540D"+o),!1}}if(!e.message.isGroupChat||a.checkUserInGroup){if(a.userMode==="blacklist"&&(a.fromUserNames?.length&&a.fromUserNames.indexOf(e.message.senderName??e.message.senderId)>=0||a.fromNickNames?.length&&a.fromNickNames.indexOf(e.message.senderInfo?.nickName)>=0))return!1;if(a.userMode!=="all"&&(a.fromUserNames?.length&&a.fromUserNames.indexOf(e.message.senderName??e.message.senderId)<0||a.fromNickNames?.length&&a.fromNickNames.indexOf(e.message.senderInfo?.nickName)<0))return!1}if(a.contentFilter&&a.contentFilter.content?.length&&(typeof e.message.content=="string"||typeof e.message.content.text=="string")){let t=typeof e.message.content=="string"?e.message.content:e.message.content.text;if(!Mo(t,a.contentFilter))return!1}return N.debug("\u901A\u8FC7\u89C4\u5219\u68C0\u67E5"),!0}p(we,"checkMessageRule");async function io(a,e,t,o=!0){t=t??"latest";let s;if(o){let r=await fetch(`${e}/${a}/${t}`);if(r.status!==200)throw new Error(`\u540D\u4E3A ${a} \u7684\u5305\u5728npm(registry=${e})\u4E0A\u4E0D\u5B58\u5728\uFF0C\u8BF7\u68C0\u67E5\u5305\u540D\u662F\u5426\u6B63\u786E\uFF01`);if(s=await r.json(),!s.keywords?.includes("ppagent"))throw new Error(`\u540D\u4E3A ${a} \u7684\u5305\u5728npm(registry=${e})\u4E0A\u5B58\u5728\uFF0C\u4F46\u662F\u6CA1\u6709\u5305\u542Bppagent\u7684keyword\uFF0C\u8BF7\u5728package.json\u4E2D\u7684keywords\u5B57\u6BB5\u589E\u52A0ppagent\uFF01`)}return new Promise((r,i)=>{let n=`pnpm add ${a}@${t} ${e?.length?"--registry="+e:""}`;N.debug("RUN "+n),Ro(n,(c,m,d)=>{if(c||d&&!d.startsWith("Debug")){N.warn(String(c??d)),i(c);return}N.info(m),r(s)})})}p(io,"installDep");function Wo(a){return{author:a.author,homepage:a.homepage,keywords:a.keywords?.join(","),repo:a.repository?.url?.replace(/^git\+/,""),version:a.version,name:a.name,desc:a.description}}p(Wo,"_pkgInfo2PluginInfo");async function Xo(a,e,t){t=t??_.npmRegistry;let o=await io(a,t,e);return Wo(o)}p(Xo,"installAndGetPluginInfo");async function Jo(a){let e=await import(`${a}/package.json`,{assert:{type:"json"}});if(!e){N.info("\u672A\u80FD\u627E\u5230package.json\uFF0C\u63D2\u4EF6"+a+"\u53EF\u80FD\u5DF2\u7ECF\u88AB\u5378\u8F7D\uFF01");return}return new Promise((t,o)=>{let s=`pnpm remove ${a}`;N.debug("RUN "+s),Ro(s,{timeout:_.npmTimeout,windowsHide:!0},(r,i,n)=>{if(r||n&&!n.startsWith("Debug")){N.warn(String(r??n)),o(r);return}N.info(i),t(Wo(e))})})}p(Jo,"uninstallDep");function Dt(a){let e=process.env[a];if(e){let t=Number(e);return isNaN(t)?void 0:t}}p(Dt,"getEnvNumber");function be(a){return(typeof a=="string"?a:a.text)?.trim()??""}p(be,"extractMessageContentText");function Lr(a,e,t){let o=xe(),s=xe();return{type:a,content:e,time:new Date,fromId:o,senderId:o,senderInfo:{userId:o,userName:o,nickName:o},isGroupChat:!1,isSender:!1,toInfo:[{userId:s,userName:s,nickName:s}],messageId:xe(),...t?.message??{}}}p(Lr,"createFakeMessage");async function Vo(a,e,t,o,s){let r=Lr(e,t,o),i=[],n=[],c=p(async(h,u)=>{let g=be(h);return g.length&&i.push(g),n.push({content:h,type:u}),s?.(u,h),""},"addMessage"),m={me:p(()=>Promise.resolve(r.toInfo[0]),"me"),options:{instanceName:"fake-source-instance"},params:{name:"fake-source",optionsSchema:{},eventNames:[]},actions:[],event:new Mr,login:p(()=>Promise.resolve(),"login"),hasLogin:p(()=>!0,"hasLogin"),sendMessage:p(h=>c(h.content,h.type),"sendMessage"),getContacts:p(()=>Promise.resolve([]),"getContacts"),getContactDetail:p(h=>Promise.resolve(h),"getContactDetail")},d={reply:c,message:r,id:xe(),type:f.CHAT_MESSAGE,source:m,me:r.toInfo[0],...o??{}};try{let h=await a.prepareMessage(d);await a.getResponse(d,{onContent:p((u,g)=>{c(u,g)},"onContent"),onError:p(u=>{N.error(u.message)},"onError")},h,[])}catch(h){N.error(h.message),i.push("\u8FD0\u884C\u5931\u8D25\uFF1A"+h.message)}return{text:i.join(""),all:n}}p(Vo,"directRunBot");var $t=y("async-file"),b=class a{static{p(this,"AsyncFile")}loader;format;constructor(e,t){this.loader=e,this.format=t,this.tempDir="temp",this.loaded=!1}tempDir;buffer;path;localPath;base64;text;textEncoding;_name;url;_info;loaded;get name(){return this._name}async load(){if(this.loaded)return;this.loaded=!0;let e=await this.loader();await this.setSource(e)}async setSource({data:e,type:t,name:o,textEncoding:s}){if(this.buffer=this.path=this.localPath=this.base64=this.text=this.url=this._name=this.textEncoding=void 0,!e||!t)throw new Error("can't initialize async file!");if(t==="buffer")this.buffer=e;else if(t==="base64")this.base64=e;else if(t==="path")this.path=e;else if(t==="text")this.text=e;else throw new Error("erro file type:"+t);this._name||(this._name=o??Gr(),this._name.indexOf(".")<0&&(this._name=this._name+".dat")),this.textEncoding=s}async loadBufferFromPath(e){if(e.startsWith("http"))try{let t=await(await fetch(e)).arrayBuffer();return Le.from(t)}catch{return $t.debug("retry to get file "+e),new Promise(t=>{setTimeout(async()=>{let o=await(await fetch(e)).arrayBuffer();t(Le.from(o))},1e3)})}return new Promise((t,o)=>{Dr(e,(s,r)=>{if(s){o(s);return}t(r)})})}async saveFile(e){let t;return this.format==="text"?t=await this.asText():(t=await this.asBuffer(),e||(this._name=await qo(t,this._name))),new Promise((o,s)=>{try{let r=e??oe.join(_.publicPath,this.tempDir,this._name),i=qr(r);Qo(i)||Yo(i,{recursive:!0}),jr(r,t,()=>{o(oe.resolve(r))})}catch(r){s(r)}})}saveAs(e,t,o,s){(!e?.length||!t?.length)&&$t.warn("dir\u548Cbucket\u4E0D\u80FD\u4E3A\u7A7A\uFF01");let r=oe.join(e,t);return Qo(r)||Yo(r,{recursive:!0}),r=oe.join(r,o??this._name),this.saveFile(r).then(()=>{s?.()}),r}getFormat(){return this.format}async asBuffer(){if(await this.load(),this.buffer)return this.buffer;if(this.text)this.buffer=this.textEncoding?Le.from(this.text,this.textEncoding):Le.from(this.text);else if(this.base64)this.buffer=Le.from(this.base64,"base64");else if(this.path)this.buffer=await this.loadBufferFromPath(this.path);else{$t.warn("\u5F53\u524D\u6587\u4EF6\u65E0\u6CD5\u88AB\u52A0\u8F7D\uFF01");return}return this.buffer}async asPath(){return await this.load(),this.path?this.path:(this.path=await this.saveFile(),this.path)}async asBase64(){if(await this.load(),this.base64)return this.base64;let e=await this.asBuffer();return this.base64=e.toString("base64"),this.base64}async asText(){if(await this.load(),this.text)return this.text;let e=await this.asBuffer();if(!e){$t.warn("load file as buffer failed!");return}return this.text=this.textEncoding?e.toString(this.textEncoding):e.toString(),this.text}async asUrl(){if(await this.load(),this.url)return this.url;let e;return this.path&&!this.path.startsWith("http")&&oe.dirname(oe.resolve(this.path))===oe.dirname(oe.join(_.publicPath,`${this.tempDir}/`))?e=oe.resolve(this.path):e=await this.saveFile(),this.url=_.httpUrl+`${_.publicPathName}/${this.tempDir}/${oe.basename(e)}`,this.url}async asLocalPath(){return await this.load(),this.localPath?this.localPath:(this.path&&!this.path.startsWith("http")?this.localPath=this.path:this.localPath=await this.saveFile(),this.localPath)}async asReadStream(){await this.load();let e=await this.asLocalPath();return Ur(e)}async info(){if(this._info)return this._info;let e=await this.asLocalPath();return new Promise((t,o)=>{$r(e,(s,r)=>{s?o(s):t(r)})})}isAsyncFile(){return!0}toString(){return this.name}static fromPath(e,t="binary",o,s){let r=o??oe.basename(e);r.indexOf("?")>0&&(r=r.split("?")[0]);let i=p(async()=>({data:e,type:"path",name:r,textEncoding:s}),"loader"),n=new a(i,t);return n._name=r,n}static fromBuffer(e,t,o="binary",s){let r=p(async()=>({data:e,type:"buffer",name:t,textEncoding:s}),"loader"),i=new a(r,o);return i._name=t,i}};import{isWav as zr}from"silk-wasm";var jt=class a{static{p(this,"HistoryMessageManager")}options;static DefaultOptions={expireInSeconds:300,maxItemsCount:30,maxWordsCount:10240};constructor(e){this.options=e,this.messages=[],this.wordsCount=0,this.options={...a.DefaultOptions,...e}}messages;wordsCount;addMessage(e,t){this.messages.length===this.options.maxItemsCount&&this.messages.shift();let o={message:e,wordsCount:0,expiresAt:new Date().getTime()+this.options.expireInSeconds*1e3};this.messages.push(o);let s=(typeof t=="string"?t:t?.text)?.trim();if(s?.length&&(this.wordsCount+=s.length,o.wordsCount=s.length,this.wordsCount>this.options.maxWordsCount))for(;this.messages.length;){let r=this.messages.shift();if(this.wordsCount-=r.wordsCount,this.wordsCount<=this.options.maxWordsCount)break}}getHistoryMessages(){let e=new Date().getTime(),t=-1;for(let o=0;o<this.messages.length;o++){let s=this.messages[o];if(s.expiresAt>e){t=o;break}else this.wordsCount-=s.wordsCount}return t>0&&(this.messages=this.messages.splice(0,t)),this.messages.map(o=>o.message)}clearHistory(){this.messages=[],this.wordsCount=0}};import Hr from"emittery";var qt=class extends Hr{static{p(this,"SortedPromise")}_queue=Promise.resolve();_logger=y("sorted-promise");add(e){let t=this._queue.then(()=>e);return this._queue=t.catch(o=>{this._logger.error(o.message)}),t}};import{v4 as ao}from"uuid";var Ae=class extends Kr{static{p(this,"Agent")}app;_options;static params={name:"default",desc:"\u5185\u7F6E\u6784\u5EFA\u5668",optionsSchema:{type:"formily",formily:{type:"object",properties:{...$,sourceInstanceNames:{type:"array",title:"\u76D1\u542C\u7684\u6D88\u606F\u6E90","x-decorator":"FormItem","x-component":"SourceSelector","x-decorator-props":{tooltip:"\u4ECE\u6D88\u606F\u6E90\u4E2D\u9009\u62E9\u4E00\u4E2A\u6216\u8005\u591A\u4E2A\u8FDB\u884C\u76D1\u542C\uFF0C\u4E00\u4E2A\u540E\u7AEF\u652F\u6301\u54CD\u5E94\u591A\u4E2A\u6D88\u606F\u6E90\u3002"},required:!0},botResponseRule:{type:"object",title:"\u54CD\u5E94\u89C4\u5219","x-decorator":"FormItem","x-component":"MessageRule","x-component-props":{isForSkill:!1},"x-decorator-props":{tooltip:"\u8BBE\u7F6E\u540E\u7AEF\u7684\u54CD\u5E94\u6A21\u578B\uFF0C\u4EE5\u53CA\u7528\u6237\u3001\u6D88\u606F\u7B49\u7684\u8FC7\u6EE4\u89C4\u5219\u3002"},required:!0},skillRules:{type:"array",title:"\u6280\u80FD\u5217\u8868",items:{type:"void","x-component":"Space","x-decorator":"ArrayItems.Item",properties:{input:{type:"object","x-component":"MessageRule","x-component-props":{isForSkill:!0}},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove"}}},properties:{add:{type:"void",title:"\u6DFB\u52A0\u6280\u80FD","x-component":"ArrayItems.Addition"}},"x-decorator":"FormItem","x-component":"ArrayItems","x-component-props":{style:{width:300}},"x-decorator-props":{tooltip:"\u7528\u4E8E\u6DFB\u52A0\u6280\u80FD\uFF0C\u6765\u62E6\u622A\u7528\u6237\u6D88\u606F\u6216\u8005\u57FA\u4E8E\u540E\u7AEF\u6A21\u578B\u7684\u56DE\u590D\u518D\u6B21\u52A0\u5DE5\u3002"}},splitImageFromBotText:{type:"boolean",title:"\u4ECE\u6587\u672C\u6D88\u606F\u4E2D\u63D0\u53D6\u56FE\u7247\u5355\u72EC\u53D1\u9001","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u9489\u9489\u8FD9\u7C7B\u652F\u6301\u56FE\u6587\u6DF7\u7F16\u7684\u5EFA\u8BAE\u8BBE\u7F6E\u4E3Afalse\uFF0C\u5FAE\u4FE1\u8FD9\u79CD\u4E0D\u652F\u6301\u7684\u5EFA\u8BAE\u8BBE\u7F6E\u4E3Atrue\u3002"},default:!1},removeImageAfterSplit:{type:"boolean",title:"\u62C6\u5206\u56FE\u7247\u540E\u79FB\u9664\u56FE\u7247\u94FE\u63A5","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u56FE\u7247\u62C6\u51FA\u6765\u4E4B\u540E\uFF0C\u662F\u5426\u4ECE\u539F\u6765\u7684\u56DE\u590D\u4E2D\u5220\u9664\u56FE\u7247\u94FE\u63A5\uFF0C\u4EE5\u51CF\u5C11\u6D88\u606F\u957F\u5EA6"},default:!1},bufferWordsMinCount:{type:"number",title:"\u6BCF\u6761\u56DE\u590D\u4E0D\u4F4E\u4E8E\u591A\u5C11\u5B57\uFF08\u7EA6\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:0},default:70,"x-decorator-props":{tooltip:"\u7528\u6765\u907F\u514D\u6D88\u606F\u88AB\u62C6\u7684\u8FC7\u6563\u3002\u9ED8\u8BA470\u4E2A\u5B57\u7B26\u3002\u5B9E\u9645\u8FD4\u56DE\u6570\u91CF\u4E0D\u4E00\u5B9A\u521A\u597D\u7B49\u4E8E\u8BE5\u6570\u3002\u8BE5\u7279\u6027\u4EC5\u5BF9\u4E2D\u6587\u751F\u6548\u3002\u5982\u679C\u4E0D\u5E0C\u671B\u62C6\u5206\uFF0C\u53EF\u5C06\u6B64\u503C\u8BBE\u7F6E\u4E3A0\u3002"}},maxSplitCount:{type:"number",title:"\u6700\u5927\u62C6\u5206\u6761\u6570\uFF08\u4E0D\u542B\u601D\u8003\u8FC7\u7A0B\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:1},default:3,"x-decorator-props":{tooltip:"\u4E00\u6B21\u56DE\u590D\u6700\u591A\u88AB\u62C6\u5206\u6210\u591A\u5C11\u6761\uFF0C\u5982\u679C\u8D85\u8FC7\u4E86\uFF0C\u5219\u6700\u540E\u4E00\u6B21\u6027\u56DE\u590D\u3002\u907F\u514D\u88AB\u62C6\u5206\u7684\u592A\u96F6\u6563\uFF0C\u4E5F\u80FD\u7B26\u5408\u90E8\u5206\u5E73\u53F0\u5BF9\u56DE\u590D\u6570\u91CF\u7684\u8981\u6C42\uFF08\u5982\u516C\u4F17\u53F7\uFF0CQQ\u673A\u5668\u4EBA\uFF09\u3002"}},splitCharacters:{type:"array",title:"\u62C6\u5206\u53E5\u5B50\u7684\u6807\u8BB0",items:{type:"void","x-component":"Space",properties:{input:{type:"string","x-decorator":"FormItem","x-component":"Input"},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove"}}},properties:{add:{type:"void",title:"\u6DFB\u52A0\u5206\u9694\u6807\u8BB0\uFF08\u6BCF\u884C\u4E00\u4E2A\uFF09","x-component":"ArrayItems.Addition"}},"x-decorator":"FormItem","x-component":"ArrayItems",default:["\uFF01","\u3002","\uFF1F"],"x-decorator-props":{tooltip:'\u7528\u4E8E\u62C6\u5206\u53E5\u5B50\u7684\u6807\u8BB0\uFF0C\u9ED8\u8BA4["\uFF01","\u3002","\uFF1F"]\u3002\u5982\u679C\u7B2C\u4E00\u4E2A\u8981\u7D20\u8BBE\u7F6E\u4E3A["none"]\uFF0C\u5219\u8868\u793A\u53EA\u5173\u6CE8\u5B57\u6570\uFF0C\u4E0D\u8003\u8651\u5206\u53E5\uFF0C\u9002\u7528\u4E8E\u6D41\u5F0F\u56DE\u590D\u3002\u975E\u6D41\u5F0F\u56DE\u590D\u8BF7\u52A1\u5FC5\u8BBE\u7F6E\u5408\u7406\u503C\uFF0C\u5426\u5219\u5F02\u5E38\u7684\u65AD\u53E5\u53EF\u80FD\u5BFC\u81F4\u56FE\u7247\u65E0\u6CD5\u88AB\u8BC6\u522B\u6216\u8005\u9519\u8BEF\u8BC6\u522B\u3002'}},maxReasoningSplitCount:{type:"number",title:"\u601D\u8003\u8FC7\u7A0B\u6700\u5927\u7684\u62C6\u5206\u6570\u91CF","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:1},default:3,"x-decorator-props":{tooltip:"\u601D\u8003\u8FC7\u7A0B\u6700\u5927\u7684\u62C6\u5206\u6570\u91CF\uFF0C\u9ED8\u8BA4\u4E3A3\u3002\u5982\u679C\u8D85\u8FC7\u4E86\uFF0C\u5219\u6700\u540E\u4E00\u6B21\u6027\u56DE\u590D\u3002\u907F\u514D\u88AB\u62C6\u5206\u7684\u592A\u96F6\u6563\uFF0C\u4E5F\u80FD\u7B26\u5408\u90E8\u5206\u5E73\u53F0\u5BF9\u56DE\u590D\u6570\u91CF\u7684\u8981\u6C42\u3002"}},sendReasoning:{type:"boolean",title:"\u663E\u793A\u601D\u8003\u8FC7\u7A0B","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u662F\u5426\u663E\u793A\u601D\u8003\u8FC7\u7A0B\uFF08\u4EC5\u5BF9\u63A8\u7406\u6A21\u578B\u6709\u6548\uFF09\u3002\u6CE8\u610F\uFF0C\u5F00\u542F\u540E\uFF0C\u5982\u679C\u8BBE\u7F6E\u4E86\u62C6\u5206\u4E0A\u9650\uFF0C\u5219\u601D\u8003\u8FC7\u7A0B\u548C\u56DE\u590D\u5185\u5BB9\u4F7F\u7528\u540C\u6837\u591A\u7684\u4E0A\u9650"},default:!1},reasoningPrefix:{type:"string",title:"\u601D\u8003\u4E2D\u7684\u56DE\u590D\u524D\u7F00","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u524D\u7F00\uFF0C\u5982\u3010\u601D\u8003\u4E2D\u3011\uFF0C\u9ED8\u8BA4\u4E3A\u3010\u601D\u8003\u4E2D\u3011"},"x-decorator-props":{tooltip:"\u601D\u8003\u90E8\u5206\u5185\u5BB9\u7684\u524D\u7F00\uFF0C\u5982 \u3010\u601D\u8003\u4E2D\u3011"},default:"\u3010\u601D\u8003\u4E2D\u3011"},contentPrefix:{type:"string",title:"\u63A8\u7406\u540E\u5185\u5BB9\u7684\u56DE\u590D\u524D\u7F00","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u524D\u7F00\uFF0C\u5982\u3010\u56DE\u590D\u3011\uFF0C\u9ED8\u8BA4\u4E3A\u3010\u56DE\u590D\u3011"},"x-decorator-props":{tooltip:"\u56DE\u590D\u5185\u5BB9\u7684\u524D\u7F00\uFF0C\u5982 \u3010\u56DE\u590D\u3011\u3002\u4EC5\u5BF9\u63A8\u7406\u6A21\u578B\u751F\u6548\u3002\u6B63\u5E38\u5BF9\u5185\u5BB9\u7684\u4FEE\u6539\u53EF\u4EE5\u901A\u8FC7\u6DFB\u52A0\u6280\u80FD\u5B8C\u6210"},default:"\u3010\u56DE\u590D\u3011"},historyEnabled:{type:"boolean",title:"\u4F7F\u7528\u672C\u7A0B\u5E8F\u7684\u5386\u53F2\u6D88\u606F\u529F\u80FD","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:`\u5F53\u540E\u7AEF\u6A21\u677F\u6CA1\u6709\u81EA\u5E26\u5386\u53F2\u6D88\u606F\u7BA1\u7406\u65F6\uFF0C\u53EF\u4EE5\u5F00\u542Fagent\u5185\u7F6E\u7684\u5386\u53F2\u6D88\u606F\u529F\u80FD\uFF0C\u5982ChatGPT\uFF0COllama\u7B49\u7EAF\u5BF9\u8BDD\u6A21\u578B\u9700\u8981\u5F00\u542F\uFF0C\u5728\u53D1\u9001\u5230\u540E\u7AEF\u65F6\u4F1A\u5E26\u4E0A\u5386\u53F2\u6D88\u606F\u3002
10
- \u5982\u679C\u540E\u7AEF\u58F0\u660E\u4E86\u81EA\u5E26\u5386\u53F2\u6D88\u606F\u7BA1\u7406\uFF08\u5982dify\uFF0Ccoze\u7B49\uFF09\uFF0C\u5219\u6B64\u529F\u80FD\u5931\u6548\uFF0C\u6B64\u65F6\u65E0\u9700\u5F00\u542F\uFF0C\u5426\u5219\u4F1A\u6D6A\u8D39\u5185\u5B58\u3002`}},historyOptions:{type:"object",title:"\u5386\u53F2\u6D88\u606F\u5B58\u50A8\u914D\u7F6E","x-decorator":"FormItem",properties:{expireInSeconds:{type:"number",title:"\u8D85\u65F6\u65F6\u95F4\uFF08\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:60},default:300,"x-decorator-props":{tooltip:"\u5386\u53F2\u6D88\u606F\u5B58\u50A8\u591A\u4E45\u4F1A\u5931\u6548\uFF0C\u9ED8\u8BA4300\u79D2\u3002"}},maxWordsCount:{type:"number",title:"\u6700\u591A\u5B58\u50A8\u591A\u5C11\u4E2A\u5B57\u7B26","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:60},default:10240,"x-decorator-props":{tooltip:"\u5386\u53F2\u6D88\u606F\u5B58\u50A8\u591A\u4E45\u4F1A\u5931\u6548\uFF0C\u9ED8\u8BA4300\u79D2\u3002\u4EC5\u5BF9\u6587\u672C\u7C7B\u6D88\u606F\u6709\u6548\u3002"}},maxItemsCount:{type:"number",title:"\u6700\u591A\u5B58\u50A8\u591A\u5C11\u6761\u8BB0\u5F55\uFF08\u5355\u4E2A\u5BF9\u8BDD\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:3},default:30,"x-decorator-props":{tooltip:"\u8D85\u8FC7\u7684\u8BB0\u5F55\u4F1A\u88AB\u8986\u76D6\uFF0C\u9ED8\u8BA430\u6761\u3002\u540C\u4E00\u4E2A\u7FA4\u91CC\u9762\u7684\u804A\u5929\u89C6\u4E3A\u5355\u4E2A\u5BF9\u8BDD\u3002"}}}},sendMode:{type:"string",enum:[{label:"\u76F4\u63A5\u53D1\u9001",value:"now"},{label:"\u6392\u961F\u53D1\u9001\uFF08\u63A8\u8350\uFF09",value:"queue"}],title:"\u53D1\u9001\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select",default:"queue","x-decorator-props":{tooltip:"\u53D1\u9001\u6A21\u5F0F\uFF0Cnow\u662F\u6240\u6709\u6D88\u606F\u90FD\u9ED8\u8BA4\u7ACB\u5373\u53D1\u9001\uFF08\u5F53\u4F7F\u7528\u6280\u80FD\u65F6\uFF0C\u4E0D\u540C\u6587\u5B57\u5904\u7406\u7684\u987A\u5E8F\u53EF\u80FD\u4E0D\u540C\uFF0C\u6709\u53EF\u80FD\u5BFC\u81F4\u56DE\u590D\u4E71\u5E8F\uFF0C\u5EFA\u8BAE\u4F7F\u7528\u6392\u961F\u53D1\u9001\uFF09\uFF0Cqueue\u662F\u52A0\u5165\u53D1\u9001\u961F\u5217\uFF0C\u786E\u4FDD\u6309\u7167\u540E\u7AEF\u8F93\u51FA\u987A\u5E8F\u8FDB\u884C\u56DE\u590D\uFF0C\u540C\u65F6\u53EF\u4EE5\u901A\u8FC7\u8BBE\u7F6E\u961F\u5217\u95F4\u9694\u6765\u63A7\u5236\u53D1\u9001\u901F\u5EA6\uFF0C\u907F\u514D\u89E6\u53D1\u98CE\u63A7\u3002"}},minSendInterval:{type:"number",title:"\u6700\u5C0F\u53D1\u9001\u65F6\u95F4\u95F4\u9694\uFF08\u6BEB\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:0},default:1e3,"x-decorator-props":{tooltip:"\u6700\u5C0F\u53D1\u9001\u65F6\u95F4\u95F4\u9694\uFF0C\u5355\u4F4D\u662F\u6BEB\u79D2\u3002\u9632\u6B62\u53D1\u9001\u8FC7\u5FEB\u88AB\u8BC6\u522B\u4E3A\u5783\u573E\u6D88\u606F\u3002\u9ED8\u8BA4\u4E3A1000\u3002\u9700\u8981\u53D1\u9001\u6A21\u5F0F\u4E3A\u961F\u5217\uFF08queue\uFF09"}},timeoutInSeconds:{type:"number",title:"\u4F1A\u8BDD\u8D85\u65F6\u65F6\u95F4\uFF08\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:20,max:3600},default:60,"x-decorator-props":{tooltip:"\u5355\u4E2A\u4F1A\u8BDD\uFF08\u63D0\u95EE\uFF09\u7B49\u5F85\u7684\u6700\u957F\u65F6\u95F4\uFF0C\u9ED8\u8BA460\u79D2\u3002\u7531\u4E8E\u5927\u90E8\u5206\u667A\u80FD\u4F53\u4E3A\u4E86\u7EF4\u6301\u8FDE\u7EED\u4E0A\u4E0B\u6587\uFF0C\u4E0D\u652F\u6301\u5728\u540C\u4E00\u4E2A\u4E0A\u4E0B\u6587\u4E2D\u540C\u65F6\u6FC0\u6D3B\u591A\u4E2A\u5BF9\u8BDD\uFF0C\u56E0\u6B64\u7CFB\u7EDF\u5728\u51FA\u73B0\u540C\u4E00\u4E2A\u7528\u6237\uFF08\u7FA4\u7EC4\uFF09\u5728\u4E0A\u4E00\u4E2A\u95EE\u9898\u672A\u5B8C\u6210\u7EE7\u7EED\u63D0\u95EE\u65F6\uFF0C\u4F1A\u52A0\u5165\u961F\u5217\u7B49\u5F85\u3002\u8D85\u65F6\u540E\u5C06\u4E0D\u518D\u7B49\u5F85\uFF0C\u76F4\u63A5\u6267\u884C\u4E0B\u4E00\u4E2A\u63D0\u95EE\u3002"}},checkWavAudio:{type:"boolean",title:"\u68C0\u6D4B\u56DE\u590D\u7684\u97F3\u9891\u4E3Awav\u683C\u5F0F","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},default:!0,"x-decorator-props":{tooltip:"wav\u662F\u7CFB\u7EDF\u5185\u90E8\u9ED8\u8BA4\u7684\u8BED\u97F3\u683C\u5F0F\uFF0C\u5EFA\u8BAE\u5F00\u542F\uFF0C\u907F\u514D\u540E\u7AEF\u5904\u7406\u65F6\u629B\u51FA\u5F02\u5E38\u3002\u5982\u679C\u6CA1\u6709\u4F7F\u7528\u8BED\u97F3\u6280\u80FD\u53EF\u4EE5\u5173\u95ED\uFF0C\u5F00\u542F\u4E5F\u4E0D\u5F71\u54CD\u6027\u80FD\u3002"}},fallbackAnswer:{type:"string",title:"\u515C\u5E95\u56DE\u590D","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u515C\u5E95\u56DE\u590D\u5185\u5BB9"},"x-decorator-props":{tooltip:"\u5F53\u5339\u914D\u5230\u89C4\u5219\uFF0C\u4F46\u662Fbot\u65E0\u6CD5\u56DE\u590D\u7684\u65F6\u5019\u89E6\u53D1\u8BE5\u56DE\u590D\u3002\u5982\u679C\u4E0D\u8BBE\u7F6E\uFF0C\u5219\u4E0D\u56DE\u590D\u3002\u5982\u679C\u6D88\u606F\u88AB\u6280\u80FD\u53D6\u6D88\u56DE\u590D\uFF0C\u4E0D\u4F1A\u89E6\u53D1\u8BE5\u56DE\u590D\u3002"},default:"\u{1F979}\uFF0C\u6211\u8FD8\u4E0D\u652F\u6301\u8FD9\u4E2A\u6D88\u606F\u7C7B\u578B\u5462\uFF01"},multiActiveChatInConversationMode:{type:"string",enum:[{label:"\u6392\u961F\u5904\u7406\uFF0C\u4E0D\u63D0\u9192",value:"pool"},{label:"\u63D0\u9192\u540E\u76F4\u63A5\u8FD4\u56DE\uFF0C\u4E0D\u5904\u7406",value:"tips"},{label:"\u63D0\u9192\u540E\u6392\u961F\u5904\u7406",value:"pool_tips"}],title:"\u591A\u6D3B\u8DC3\u4F1A\u8BDD\u5904\u7406\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select",default:"pool_tips","x-decorator-props":{tooltip:"\u5982\u679C\u4E00\u4E2A\u7528\u6237\u540C\u65F6\u5728\u4E00\u4E2Abot\u8FD8\u6CA1\u6709\u56DE\u7B54\u7ED3\u675F\u65F6\u53C8\u63D0\u95EE\uFF0C\u4E14bot\u4E0D\u652F\u6301\u4E00\u4E2A\u4F1A\u8BDD\u4E2D\u591A\u4E2A\u6D3B\u8DC3\u5BF9\u8BDD\u65F6\uFF08\u57FA\u672C\u90FD\u4E0D\u652F\u6301\uFF0C\u5982dify\uFF0Ccoze\uFF09\uFF0C\u8981\u91C7\u53D6\u7684\u63AA\u65BD\uFF0Cpool\u662F\u76F4\u63A5\u653E\u5165\u7B49\u5F85\u533A\uFF0C\u7B49\u4E0A\u4E00\u8F6E\u56DE\u590D\u7ED3\u675F\u540E\u7EE7\u7EED\u5904\u7406\uFF0C\u4E0D\u8F93\u51FA\u63D0\u793A\uFF1Btips\u662F\u7ED9\u51FA\u63D0\u793A\u4E0D\u63D0\u4EA4\u5230\u540E\u7AEF\u76F4\u63A5\u8FD4\u56DE\uFF1Bpool_tips\u662F\u653E\u5165\u7B49\u5F85\u533A\u4E14\u7ED9\u51FA\u63D0\u793A\u3002"}},multiActiveChatInConversationTips:{type:"string",title:"\u591A\u6D3B\u8DC3\u4F1A\u8BDD\u63D0\u793A\u8BCD","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u591A\u6D3B\u8DC3\u4F1A\u8BDD\u63D0\u793A\u8BCD\uFF08\u4E0D\u6E05\u695A\u8BF7\u7559\u7A7A\uFF09"},"x-decorator-props":{tooltip:"\u51FA\u73B0\u591A\u4E2A\u6D3B\u8DC3\u5BF9\u8BDD\u65F6\uFF0C\u8F93\u51FA\u7684\u56DE\u590D\u3002\u5F53\u591A\u6D3B\u8DC3\u4F1A\u8BDD\u6A21\u5F0F\u914D\u7F6E\u4E3A\u53D1\u9001\u63D0\u793A\u65F6\uFF08tips\u6216\u8005pool_tips\uFF09\u624D\u4F1A\u751F\u6548\u3002"},default:""},sendErrorLog:{type:"boolean",title:"\u53D1\u9001\u5F02\u5E38\u65E5\u5FD7\u5230\u5BA2\u6237\u7AEF","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},default:!1,"x-decorator-props":{tooltip:"\u662F\u5426\u53D1\u9001\u6D88\u606F\u5904\u7406\u5F02\u5E38\u7684\u65E5\u5FD7\u5230\u5BA2\u6237\u7AEF\uFF0C\u9ED8\u8BA4false"}}}}}};constructor(e,t){if(super(),this.app=e,this._options=t,this._initialized=!1,this._textEndId=ao(),this._historyManagers={},this._sendMessagePool=new Map,this._sourceMessagePool=new Map,this.processChatMessage=async o=>{this._logger.trace("message received"),this._logger.trace(Ho(o.message,o.source));let s,r;try{if(!we(this._responseRule,o)){this._logger.debug("\u5F53\u524D\u6D88\u606F\u4E0D\u5728"+this._options.instanceName+"\u56DE\u590D\u7684\u6761\u4EF6\u5185");return}let i=this.app.botManager.getInstance(this._responseRule.instanceName);if(!i){this._logger.warn("\u540D\u4E3A"+this._responseRule.instanceName+"\u7684\u673A\u5668\u4EBA\u5B9E\u4F8B\u4E0D\u5B58\u5728\uFF01");return}if(s=this._wrapEventWithChatReply(o),r=s.source.options.instanceName+"-"+s.message.fromId,!i.params.allowMultiActiveChat)if(this._sourceMessagePool.get(r)?.busy){if(this._options.multiActiveChatInConversationMode==="tips"){s.reply(this._options.multiActiveChatInConversationTips,l.TEXT,void 0,!0),this._logger.debug("\u540C\u4E00\u4E2A\u540E\u7AEF\u670D\u52A1\u4E0D\u5141\u8BB8\u591A\u4E2A\u6D3B\u52A8\u4E2D\u7684\u5BF9\u8BDD\uFF0C\u8FD4\u56DEtips\uFF1A"+this._options.multiActiveChatInConversationTips);return}this._sourceMessagePool.get(r).pool.push(s),this._options.multiActiveChatInConversationMode==="pool_tips"&&s.reply(this._options.multiActiveChatInConversationTips,l.TEXT,void 0,!0),this._logger.debug("\u5F53\u524D\u7528\u6237\u5B58\u5728\u6B63\u5728\u6267\u884C\u7684\u4F1A\u8BDD\uFF0C\u653E\u5165\u7B49\u5F85\u533A\uFF0C\u5F85\u6267\u884C\u5B8C\u540E\u7EE7\u7EED\uFF01");return}else this._sourceMessagePool.set(r,{busy:!0,pool:[]});let n=!1,c=setTimeout(()=>{n=!0,this._logger.debug("\u5F53\u524D\u7528\u6237\u63D0\u95EE\u6267\u884C\u8D85\u8FC7"+this._options.timeoutInSeconds+"\u79D2\uFF0C\u7EE7\u7EED\u6267\u884C\u4E0B\u4E00\u4E2A\uFF01"),this._nextQuestion(r)},this._options.timeoutInSeconds*1e3);if(await this.onChatMessage(s),n){this._logger.debug("\u5F53\u524D\u7528\u6237\u63D0\u95EE\u6267\u884C\u8D85\u8FC7"+this._options.timeoutInSeconds+"\u79D2\uFF0C\u4E0B\u4E00\u4E2A\u4EFB\u52A1\u5DF2\u88AB\u63D0\u524D\u6267\u884C\uFF0C\u76F4\u63A5\u8FD4\u56DE\uFF01");return}clearTimeout(c),this._logger.debug("\u5F53\u524D\u7528\u6237\u63D0\u95EE\u6267\u884C\u5B8C\u6210"),this._nextQuestion(r)}catch(i){this._logger.warn("\u6D88\u606F\u5904\u7406\u51FA\u9519"),this._logger.error(i.message),r&&this._nextQuestion(r)}},this.onChatMessage=async o=>{this._logger.debug(`process chat message[id:${o.message.messageId}] of channel ${o.source.options.instanceName}`),this.emit(f.CHAT_MESSAGE,o);let s=this._findRules(o,this._skillRules,!0);if(await this._applyBeforeSkills(s,o),!o.message){this._logger.info("skill\u8FD4\u56DE\u7684message\u4E3A\u7A7A\uFF0C\u6B64\u6D88\u606F\u65E0\u9700\u4F7F\u7528bot\u54CD\u5E94\uFF01");return}let r=this.app.botManager.getInstance(this._responseRule.instanceName),i=this._getBotMessageManager(o.source.options.instanceName,o.message.fromId);if(o.message.type===l.TEXT){let X=o.message.content?.trim();if(X.startsWith("#reset")||X.startsWith("#\u91CD\u7F6E")){i.clearHistory();let F=await r.clearHistoryRequested(o);F?(o.reply("\u91CD\u7F6E\u5931\u8D25\uFF01",l.TEXT,void 0,!0),this._logger.error(F)):o.reply("\u91CD\u7F6E\u6210\u529F\uFF01",l.TEXT,void 0,!0);return}}let n=await r.prepareMessage(o);if(!n?.forSend){this._logger.debug("reply denied by bot"),this._options.fallbackAnswer?.length&&o.reply(this._options.fallbackAnswer,l.TEXT,void 0,!0);return}o.source.beforeSend&&(await o.source.beforeSend(o.message),this._logger.debug("before reply hook"));let c=[];r.params.needHistoryMessage&&this._options.historyEnabled&&(c=i.getHistoryMessages(),n.forHistory&&(n.forHistory.type="user",i.addMessage(n.forHistory,o.message.content)));let m=new qt,d=o.message.isGroupChat&&o.message.type!==l.PAT,h=!o.message.isGroupChat,u=!1,g="",w=0,x="",v="",R="",ce=0;try{let X=await r.getResponse(o,{onReasoning:p(async F=>{if(!this._options.sendReasoning)return;h&&!u&&(u=!0,o.onGenerating?.());let P="";R+=F;let I=this._splitWords(R,ce,this._options.maxReasoningSplitCount);if(P=I.extract,R=I.remaining,I.extract?.length&&ce++,P?.trim().length){let J={status:"reasoning"};this._options.reasoningPrefix?.length&&!v?.trim().length&&(P=this._options.reasoningPrefix+P),await o.reply(P,l.TEXT,J),v+=P}},"onReasoning"),onContent:p(async(F,P)=>{if(R?.length){let C={status:"reasoning"};this._options.reasoningPrefix?.length&&!v?.trim().length&&(R=this._options.reasoningPrefix+R),await o.reply(R,l.TEXT,C),v+=R,R=""}if(h&&!u&&(u=!0,o.onGenerating?.()),!F)return;let I=typeof F=="string"?F:F?.text,J="",te;if(typeof I=="string"){x+=I,g+=I;let C=this._splitWords(g,w,this._options.maxSplitCount);J=C.extract,g=C.remaining,C.extract?.length&&w++,P=l.TEXT}else te=F;if(J.trim().length){let C=await m.add(this._applyAfterSkills(s,o,J,l.TEXT,void 0,"part"));if(C){let ae={status:"content"};d&&(d=!1,C.messageType===l.TEXT&&o.message.senderInfo?.nickName&&o.source.params.autoAppendAt&&(C.content="@"+o.message.senderInfo.nickName+" "+C.content,ae.atList=[o.message.senderInfo?.[o.source.params.fieldInAtList??"userId"]])),v?.trim().length&&typeof C.content=="string"&&(this._options.contentPrefix?.length&&(C.content=this._options.contentPrefix+C.content),C.content=`
11
- `+C.content,v=""),await o.reply(C.content,C.messageType,ae)}}if(te){this._logger.debug("process none text content,content type:"+P);let C=await m.add(this._applyAfterSkills(s,o,F,P,void 0,"part"));C?.content&&await o.reply(C.content,C.messageType)}},"onContent"),onError:p(F=>{throw F},"onError")},n,c);if(x.trim().length){this._logger.debug("all words:"+x);let F=g,P=l.TEXT,I=await m.add(this._applyAfterSkills(s,o,g,l.TEXT,x,"part"));if(F=I.content,P=I.messageType,F&&P===l.TEXT){let te=await m.add(this._applyAfterSkills(s,o,g,l.TEXT,x,"complete"));F=te.content,P=te.messageType}let J=typeof F=="string"?F:F.text;F&&(!J||J.length)&&await o.reply(F,P)}r.params.needHistoryMessage&&this._options.historyEnabled&&X&&(X.type="bot",i.addMessage(X,x))}catch(X){if(this._logger.warn("process message error"),this._logger.error(X.message),await o.reply(`\u5904\u7406\u6D88\u606F\u65F6\u9047\u5230\u5F02\u5E38
12
- `,l.TEXT,void 0,!0),this._options.sendErrorLog&&await o.reply(String(X),l.TEXT,void 0,!1),process.env.LOG_LEVEL==="debug")throw X}finally{o.source.afterSend&&await o.reply(this._textEndId,l.TEXT,void 0,!1)}},this.onSelfChatMessage=o=>{this._logger.debug("self send message"),o.message.type===l.TEXT&&this._logger.debug(o.message.content),this.emit(f.SELF_SEND,this._wrapEventWithChatReply(o))},!t.instanceName)throw new Error("anget\u540D\u79F0\u672A\u914D\u7F6E\uFF01");if(!t.botResponseRule)throw new Error("\u54CD\u5E94\u89C4\u5219\u672A\u914D\u7F6E\uFF01");this._logger=y(t.instanceName),this._options.checkWavAudio=this._options.checkWavAudio??!0,this._options.bufferWordsMinCount=this._options.bufferWordsMinCount??70,this._options.maxSplitCount=this._options.maxSplitCount??3,this._options.historyEnabled=this._options.historyEnabled??!0,this._options.minSendInterval=Math.max(this._options.minSendInterval??1e3,100),this._options.sendMode=this._options.sendMode??"queue",this._options.splitCharacters=this._options.splitCharacters?.length>0?this._options.splitCharacters:["\u3002","\uFF01","\uFF1F"],this._responseRule=t.botResponseRule,this._options.multiActiveChatInConversationMode=this._options.multiActiveChatInConversationMode??"pool",this._options.multiActiveChatInConversationTips=this._options.multiActiveChatInConversationTips??(this._options.multiActiveChatInConversationMode==="pool_tips"?"\u6211\u5F53\u524D\u56DE\u590D\u5B8C\u6210\u540E\u5C31\u4F1A\u56DE\u7B54\u8FD9\u4E2A\u95EE\u9898\u{1F600}\uFF01":"\u8BF7\u7B49\u6211\u4E0A\u4E00\u4E2A\u56DE\u590D\u5B8C\u6210\u540E\u518D\u63D0\u95EE\u{1F600}\uFF01"),this._options.timeoutInSeconds=this._options.timeoutInSeconds??60,this._initAgent()}_initialized;_logger;_responseRule;_skillRules;_textEndId;_historyManagers;_sendMessagePool;_sourceMessagePool;get options(){return this._options}get name(){return this._options.instanceName}async sendMessage(e,t,o=!1,s){if(this._options.sendMode==="queue"&&!o){let n=this._sendMessagePool.size===0,c=t.options.instanceName;this._sendMessagePool.has(c)||this._sendMessagePool.set(c,[]),this._sendMessagePool.get(c).push({message:e,to:t,fromMessage:s}),n&&setTimeout(()=>{this._sendFromPool()},this._options.minSendInterval);return}if(e.type===l.AUDIO){this._logger.trace("audio message,check format");let n=e.content.file;if(this._options.checkWavAudio&&!zr(await n.asBuffer()))return this._logger.warn("\u97F3\u9891\u683C\u5F0F\u9519\u8BEF\uFF01\u505C\u6B62\u6D88\u606F\u53D1\u9001\uFF01"),"\u97F3\u9891\u683C\u5F0F\u9519\u8BEF\uFF01\u505C\u6B62\u6D88\u606F\u53D1\u9001\uFF01"}if(e.type===l.TEXT&&e.content===this._textEndId){t.afterSend(s);return}let r=[];if(e.type===l.TEXT&&this._options.splitImageFromBotText){let n=e.content,c=Re(n);if(c?.length)for(let m of c){let d={...e},h={file:b.fromPath(m,"binary",ao()+".png")};d.content=h,d.type=l.IMAGE,r.push(t.sendMessage(d,s)),this._options.removeImageAfterSplit&&(e.content=n.replace(m,"[\u56FE\u7247\u7A0D\u540E\u53D1\u9001]")),this._logger.trace("image extracted from url:"+m)}}let i=await t.sendMessage(e,s);return await Promise.allSettled(r),this._logger.debug(`message sent to ${e.toInfo[0].nickName??e.toInfo[0].userId} with channel ${t.options.instanceName}`),this._logger.trace(Ko(e,t)),i}async dispose(){for(let e of this._options.sourceInstanceNames){let t=this.app.sourceManager.getInstance(e);t&&(t.event.off(f.CHAT_MESSAGE,this.processChatMessage),t.event.off(f.SELF_SEND,this.onSelfChatMessage))}}processChatMessage;onChatMessage;onSelfChatMessage;async _applyAfterSkills(e,t,o,s,r,i){for(let n of e){let c=this.app.skillManager.getInstance(n.instanceName);if(!(c?.options.disabled||n.skillApplyOn==="source"||!we(n,t))&&(this._logger.warn("status:"+i),!(n.skillWhenReplyStatus?.length&&n.skillWhenReplyStatus!==i)&&(this._logger.warn("status checked"),c?.applyOnReply))){this._logger.trace("apply after skill:"+n.instanceName+" for message from "+t.message.senderInfo.nickName);let m=await c.applyOnReply(n.skillWhenReplyStatus==="complete"?void 0:o,s,t,r);m?.content!==void 0&&m?.messageType!==void 0&&(o=m.content,s=m.messageType)}}return{content:o,messageType:s}}async _applyBeforeSkills(e,t){for(let o of e){let s=this.app.skillManager.getInstance(o.instanceName);if(!(s?.options.disabled||o.skillApplyOn==="reply")&&s?.applyOnSource&&(this._logger.trace("apply before skill:"+o.instanceName+" for message from "+t.message.senderInfo.nickName),await s.applyOnSource(t),!t.message)){this._logger.trace("\u6280\u80FD"+s.options.instanceName+"\u53D6\u6D88\u4E86\u540E\u7EED\u6280\u80FD\u7EE7\u7EED\u6267\u884C!");break}}}async _nextQuestion(e){let t=this._sourceMessagePool.get(e);if(!t){this._logger.trace("\u5F53\u524D\u7B49\u5F85\u6267\u884C\u7684\u5BF9\u8BDD\u5747\u5DF2\u5B8C\u6210\uFF01");return}if(!t.pool.length){this._sourceMessagePool.delete(e),this._logger.debug(e+"\u7528\u6237\u7684\u6240\u6709\u6D88\u606F\u5904\u7406\u5B8C\u6210\uFF01");return}let o=t.pool.shift();this._logger.debug("\u7EE7\u7EED\u56DE\u7B54\u7B49\u5F85\u533A\u7684\u4E0B\u4E00\u4E2A\u95EE\u9898");try{await this.onChatMessage(o)}catch(s){if(this._logger.error("\u5904\u7406\u6D88\u606F\u51FA\u9519"),this._logger.error(s),process.env.LOG_LEVEL==="debug")throw s}finally{this._nextQuestion(e)}}_findRules(e,t,o){if(o){let r=[];return t.forEach(i=>{we(i,e)&&r.push(i)}),r}return[t.find(r=>we(r,e))]}_getBotMessageManager(e,t){if(this._historyManagers[e]){if(this._historyManagers[e][t])return this._historyManagers[e][t]}else this._historyManagers[e]={};let o=new jt(this._options.historyOptions??{});return this._historyManagers[e][t]=o,o}_wrapEventWithChatReply(e){return{...e,reply:p((o,s=l.TEXT,r={},i=!1)=>{let n=e.message,c={messageId:ao(),senderName:e.me?.userName,senderId:e.me?.userId,senderInfo:e.me,fromId:n.isGroupChat?n.fromId:e.me?.userId,type:s,content:o,toInfo:[n.isGroupChat?n.groupInfo:n.senderInfo],isGroupChat:n.isGroupChat,time:new Date,isSender:!0,...r};return this.sendMessage(c,e.source,i,e.message)},"reply")}}async _sendFromPool(){let e=[];for(let t of this._sendMessagePool.keys()){let o=this._sendMessagePool.get(t);if(o?.length){let s=o.shift();e.push(this.sendMessage(s.message,s.to,!0,s.fromMessage))}o.length===0&&this._sendMessagePool.delete(t)}await Promise.allSettled(e),this._sendMessagePool.size>0&&setTimeout(()=>{this._sendFromPool()},this._options.minSendInterval)}_splitWords(e,t,o){if(this._options.bufferWordsMinCount<=0||e.length<=this._options.bufferWordsMinCount||t>=o-1)return{extract:"",remaining:e};let s=e.substring(0,this._options.bufferWordsMinCount),r=e.substring(this._options.bufferWordsMinCount);if(this._options.splitCharacters[0]!=="none"){let i=1/0;for(let n of this._options.splitCharacters){let c=r.indexOf(n);c<0||(i=Math.min(c,i))}if(i===1/0)return{extract:"",remaining:e};s+=r.substring(0,i+1),r=r.substring(i+1)}return{extract:s,remaining:r}}_initAgent(){if(this._initialized){this._logger.error("current source is defined,can't reinit!");return}if(this._logger.trace("agent init"),this._initialized=!0,this._options.skillRules?.length){let e=[...this._options.skillRules];this._skillRules=e.filter(t=>t!=null&&t!==null).sort((t,o)=>(t.order??100)-(o.order??100))}else this._skillRules=[];for(let e of this._options.sourceInstanceNames){let t=this.app.sourceManager.getInstance(e);if(!t){this._logger.error(`can't find source instance of key ${e},please create in admin page first!`);continue}t.event.on(f.CHAT_MESSAGE,this.processChatMessage),t.event.on(f.SELF_SEND,this.onSelfChatMessage)}}};import{readItems as Jr}from"@directus/sdk";import Wr from"emittery";import{v4 as Xr}from"uuid";var Y=function(a){return a.APP_STARTED="APP_STARED",a.APP_RELOAD="APP_REALOD",a.APP_RESTARTED="APP_RESTARTED",a.APP_NOTIFY="APP_NOTIFY",a}({}),Gt=class extends Wr{static{p(this,"GlobalEvent")}constructor(e){super(),this._logger=y(e+"-global-trigger")}_logger;_eventNames=["APP_REALOD","APP_STARED","APP_RESTARTED","APP_NOTIFY"];get eventNames(){return[...this._eventNames]}async emit(e,t){return t=t??{},t.id=t.id??Xr(),t.time=t.time??new Date,super.emit(e,t)}registerGlobalEventNames(e){if(this._eventNames.indexOf(e)>=0){this._logger.error("\u91CD\u590D\u7684\u6D88\u606F\u540D\u79F0\u6CE8\u518C\uFF1A"+e);return}this._eventNames.push(e)}};var B=y("agent-service"),Ht=class{static{p(this,"AgentService")}_app;_options;constructor(e,t={}){this._app=e,this._options=t,this._initialized=!1,this._agents=[],this._tableNames={SOURCES:"sources",BOTS:"bots",SKILLS:"skills",AGENTS:"agents"},this._resourceCount={agents:0,bots:0,sources:0,skills:0},this._options.maxRecords=this._options.maxRecords??1e3,this._options.models=this._options.models??{},this._options.models.agents=this._options.models.agents??[],this._options.models.bots=this._options.models.bots??[],this._options.models.skills=this._options.models.skills??[],this._options.models.sources=this._options.models.sources??[]}_initialized;_agents;_tableNames;_resourceCount;get resourceCount(){return this._resourceCount}get agents(){return[...this._agents]}async init(){if(this._initialized){B.warn("agent service\u5DF2\u7ECF\u521D\u59CB\u5316\uFF0C\u8BF7\u52FF\u91CD\u590D\u8C03\u7528\uFF01");return}return this._initialized=!0,B.trace("agent service initializing..."),this._loadInstances()}getAgentByName(e){return this._agents?.find(t=>t.name===e)}async reload(){return B.trace("dispose agents,bots,skills,sources"),await this.dispose(),this._agents=[],B.trace("reinit instances"),this._loadInstances()}async _loadConfig(){let e=await this._loadTableConfig(this._tableNames.AGENTS),t=[...this._options.models.agents,...e.map(m=>({...m.options}))??[]],o=await this._loadTableConfig(this._tableNames.BOTS),s=[...this._options.models.bots,...o.map(m=>({name:m.name,options:m.options}))??[]],r=await this._loadTableConfig(this._tableNames.SKILLS),i=[...this._options.models.skills,...r.map(m=>({name:m.name,options:m.options}))??[]],n=await this._loadTableConfig(this._tableNames.SOURCES),c=[...this._options.models.sources,...n.map(m=>({name:m.name,options:m.options}))??[]];return{agents:t,bots:s,skills:i,sources:c}}async _loadTableConfig(e){if(this._app.offlineMode)return[];let t=await this._app.client.request(Jr(e,{limit:this._options.maxRecords,filter:{status:{_neq:"archived"},user_created:{_eq:this._app.me?.id}}}));return t?.length?t:(B.warn("\u6CA1\u6709\u4ECE\u5728\u7EBF"+e+"\u83B7\u53D6\u5230\u6570\u636E\uFF01"),B.warn(t),[])}async _loadInstances(){let e=await this._loadConfig(),t=[];this._loadSkills(e.skills,t),this._loadBots(e.bots,t),this._loadSources(e.sources),B.info(`${e.sources.length}\u4E2Asource\u5B9E\u4F8B\uFF0C${e.bots.length}\u4E2Abot\u5B9E\u4F8B\uFF0C${e.skills.length}\u4E2Askill\u5B9E\u4F8B\u521D\u59CB\u5316\u5B8C\u6210\uFF01`),await Promise.allSettled(t),t=[],this._loadAgents(e.agents),await Promise.allSettled(t),B.info(`${e.agents.length}\u4E2Aagent\u521D\u59CB\u5316\u5B8C\u6210\uFF01`),this._resourceCount.agents=e.agents.length,this._resourceCount.bots=e.bots.length,this._resourceCount.skills=e.skills.length,this._resourceCount.sources=e.sources.length}_loadSources(e){let t=[];for(let o of e){o.options.instanceName||(B.trace("\u81EA\u52A8\u751F\u6210"+o.name+"\u7684\u5B9E\u4F8BID"),o.options.instanceName=he(10));let s=this._app.sourceManager.createInstance(o.name,o.options);if(!s){B.info("\u6CA1\u6709\u627E\u5230\u540D\u4E3A"+o.name+"\u7684\u6D88\u606F\u6E90");continue}B.trace("source "+s.options.instanceName+"created");let r=o.options.instanceName,i=s.actions;i&&i.forEach(n=>{n.type==="api"?this._app.registerRoutes(r,n):n.type==="ws"?this._app.registerWSHandler(r,n):B.warn("\u4E0D\u80FD\u8BC6\u522B\u7684action\u7C7B\u578B\uFF1A"+n.type)}),t.push(s)}this._app.running?t.forEach(o=>o.login()):this._app.globalEvent.once(Y.APP_STARTED).then(()=>{t.forEach(o=>o.login())})}_loadBots(e,t){e.forEach(o=>{B.trace(o),o.options.instanceName||(B.trace("\u81EA\u52A8\u751F\u6210"+o.name+"\u7684\u5B9E\u4F8BID"),o.options.instanceName=he(10));let s=this._app.botManager.createInstance(o.name,o.options);if(!s){B.info("load bot failed:"+o.options.instanceName);return}B.trace("bot "+o.options.instanceName+" created"),t.push(s.init())})}_loadSkills(e,t){e.forEach(o=>{B.trace(o),o.options.instanceName||(B.trace("\u81EA\u52A8\u751F\u6210"+o.name+"\u7684\u5B9E\u4F8BID"),o.options.instanceName=he(10));let s=this._app.skillManager.createInstance(o.name,o.options);if(!s){B.info("load skill failed:"+o.options.instanceName);return}B.trace("skill "+s.options.instanceName+" created"),t.push(s.init())})}_loadAgents(e){B.trace(e),this._agents=e.map(t=>(t.instanceName||(B.trace("\u81EA\u52A8\u751F\u6210agent\u7684\u5B9E\u4F8BID"),t.instanceName=he(10)),new Ae(this._app,t)))}async dispose(){await de(this._agents),await this._app.botManager.clearInstances(),await this._app.skillManager.clearInstances(),await this._app.sourceManager.clearInstances()}};import Vr from"emittery";var A=class extends Vr{static{p(this,"BasicBot")}_options;static params={name:"basic bot",optionsSchema:{type:"formily",formily:{type:"object",properties:{...$,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740"},"x-validator":{format:"url"},"x-decorator-props":{tooltip:"\u4E00\u822C\u5728\u5E94\u7528\u53D1\u5E03\u9875\u9762\u6216\u8005API\u914D\u7F6E\u9875\u9762\u53EF\u4EE5\u770B\u5230\u3002"}},apiKey:{type:"string",title:"\u670D\u52A1\u5BC6\u94A5","x-index":2,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5BC6\u94A5"},"x-validator":{required:!0,message:"\u670D\u52A1\u5BC6\u94A5\u4E0D\u80FD\u4E3A\u7A7A"},"x-decorator-props":{tooltip:"\u4E00\u822C\u5728\u5E94\u7528\u53D1\u5E03\u9875\u9762\u6216\u8005API\u914D\u7F6E\u9875\u9762\u53EF\u4EE5\u770B\u5230\u3002"}},onlyText:{type:"boolean",title:"\u662F\u5426\u4E3A\u7EAF\u6587\u672C\u6A21\u578B","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u5982\u679C\u4E0D\u652F\u6301\u591A\u6A21\u6001\uFF0C\u8BBE\u7F6E\u4E3Atrue\uFF0C\u5426\u5219\u8BBE\u7F6E\u4E3Afalse\uFF0C\u9ED8\u8BA4\u662Ffalse\u3002"},default:!1},historyExipresInSeconds:{type:"number",title:"\u540E\u7AEF\u7BA1\u7406\u7684\u5386\u53F2\u6D88\u606F\u8FC7\u671F\u65F6\u95F4\uFF08\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5386\u53F2\u6D88\u606F\u8FC7\u671F\u65F6\u95F4\uFF08\u79D2\uFF09"},"x-decorator-props":{min:60,tooltip:"\u5F53\u7531\u540E\u7AEF\u7BA1\u7406\u5386\u53F2\u6D88\u606F\u65F6\u5019\uFF08\u975E\u81EA\u5EFA\u5BA2\u6237\u7AEF\u7BA1\u7406\uFF09\uFF0C\u591A\u4E45\u540E\u91CD\u65B0\u5F00\u542F\u65B0\u7684\u5BF9\u8BDDsession\u3002\u9ED8\u8BA41800\u79D2\uFF0C\u537330\u5206\u949F\u3002\u5F53\u4F7F\u7528\u81EA\u5EFA\u540E\u7AEF\u5E26\u7684\u5386\u53F2\u6D88\u606F\u65F6\uFF0C\u8FC7\u671F\u76F8\u5173\u9009\u9879\u5728agent\u4E2D\u914D\u7F6E\u3002"},default:1800},attachSendMode:{type:"string",enum:["now","later"],title:"\u9644\u4EF6\u53D1\u9001\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u9644\u4EF6\u53D1\u9001\u6A21\u5F0F"},"x-decorator-props":{tooltip:"\u6536\u5230\u56FE\u7247\u9644\u4EF6\u65F6\uFF0C\u5982\u679C\u8981\u7B49\u5F85\u7528\u6237\u63D0\u95EE\u518D\u4E00\u8D77\u53D1\u5F80\u540E\u7AEF\uFF08\u5EFA\u8BAE\uFF09\uFF0C\u5219\u8BBE\u7F6E\u4E3Alater\uFF0C\u5426\u5219\u8BBE\u7F6E\u4E3Anow\u3002\u9ED8\u8BA4later\u3002"},default:"later"},maxAttachCount:{type:"number",title:"\u6700\u5927\u9644\u4EF6\u6570\u91CF","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:1,placeholder:"\u8BF7\u8F93\u5165\u6700\u5927\u9644\u4EF6\u6570\u91CF"},"x-decorator-props":{tooltip:"\u9ED8\u8BA43\u5F20\uFF0C\u540Cdify\u8BBE\u7F6E"},default:3},subscribeWelcome:{type:"string",title:"\u8BA2\u9605\u6B22\u8FCE\u8BED","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6B22\u8FCE\u8BED\uFF08\u4E3B\u8981\u7528\u4E8E\u516C\u4F17\u53F7\u8BA2\u9605\u540E\u7684\u81EA\u52A8\u56DE\u590D\uFF09"},"x-decorator-props":{tooltip:`\u5F53\u6536\u5230\u8BA2\u9605\u6D88\u606F\u65F6\uFF0C\u8981\u5BF9\u7528\u6237\u8BF4\u7684\u6B22\u8FCE\u8BCD\uFF0C\u5982\u679C\u6B22\u8FCE\u8BCD\u4EE5\u53CC\u4E0B\u5212\u7EBF__\u5F00\u5934\uFF0C\u8868\u793A\u4F7F\u7528\u56FA\u5B9A\u8BCD\u8BED\uFF0C\u5982 __\u6B22\u8FCE\u5173\u6CE8\uFF01\uFF0C\u5426\u5219\u5C06\u4F7F\u7528\u914D\u7F6E\u7684\u8BCD\u4F5C\u4E3A\u63D0\u793A\u8BCD\u8BA9\u540E\u7AEF\u7ED9\u51FA\u6B22\u8FCE\u8BCD
9
+ `}else t.type==="at"?e+=`@${t.data}`:N.warn("\u4E0D\u652F\u6301custom\u7C7B\u578B\u7684richtext\u8F6Cmarkdown\uFF01");return e}p(Ut,"richText2Markdown");function Go(a,e){let t=e?.options.instanceName?`[${e.options.instanceName}]`:"";return`chat message[id:${a.messageId}] from user id:${a.senderId},name:${a.senderName},nick:${a.senderInfo?.nickName} of source${t} ${a.isGroupChat?"[group id]":"[user id]"}:${a.fromId} with content:${typeof a.content=="string"?a.content:"none text content[type:"+a.type+"]"}`}p(Go,"getFromMessageSummary");function Ko(a,e){let t=e?.options.instanceName?`[${e.options.instanceName}]`:"";return`send message[id:${a.messageId}] to user(s): [${a.toInfo?.map(o=>`(id:${o.userId},name:${o.userName},nick:${o.nickName})`).join(",")}] of source${t} ${a.isGroupChat?"[group id]":"[user id]"}:${a.fromId} with content:${typeof a.content=="string"?a.content:"none text content[type:"+a.type+"]"}`}p(Ko,"getToMessageSummary");function zo(a){return{type:"formily",formily:{type:"object",properties:a}}}p(zo,"createFormilySchema");function Br(a){if(a?.trim().startsWith("@")){let e=a.split(/\s+/);if(e.length<=1)return"";a=e.slice(1).join(""),N.trace("\u4EE5@\u5F00\u5934\uFF0C\u5904\u7406\u540E\u7684\u5185\u5BB9\uFF1A"+a)}return a}p(Br,"removeTextAt");function Mo(a,e){return a=Br(a),a?.trim().length?e.type==="startsWith"&&!a.startsWith(e.content)||e.type==="contains"&&a.indexOf(e.content)<0?!1:e.type==="in"?e.content.indexOf(a)>=0:a.match(e.content)!==null:(N.trace("\u5185\u5BB9\u4E3A\u7A7A\uFF01"),!1)}p(Mo,"filterContentRule");async function Le(a){return new Promise(e=>{setTimeout(()=>{e()},a)})}p(Le,"sleep");function be(a,e){if(N.trace("check rule "+a.instanceName),(e.message.type===l.TEXT||e.message.type===l.REF)&&e.message.isGroupChat&&a.respondTo){let t=!1;a.respondTo.at&&e.message.atList?.indexOf(e.me[e.source.params.fieldInAtList??"userId"])>=0&&(t=!0);let o=!1,s=((typeof e.message.content=="string"?e.message.content:e.message.content.text)??"").trim();s.length&&a.respondTo.names?.find(i=>s.startsWith(i))&&(o=!0);let r=!1;if(a.respondTo.refered&&e.message.type===l.REF&&e.message.content.refMessage?.senderId===e.me.userId&&(r=!0),!t&&!o&&!r)return N.trace("\u6CA1\u6709\u901A\u8FC7respond\u6761\u4EF6\u68C0\u67E5"),N.debug("at: "+t+";name: "+o+";content: "+r),!1}if(a.messageTypes?.length&&a.messageTypes.indexOf("ALL")<0&&a.messageTypes.indexOf(e.message.type)<0)return N.trace("\u6D88\u606F\u8FC7\u6EE4\u7C7B\u578B\u4E0D\u5339\u914D\uFF0C\u5F53\u524D"+e.message.type),!1;if(e.message.isGroupChat){let t=e.message;if(a.groupMode==="deny")return N.trace("\u5F53\u524D\u914D\u7F6E\u4E3A\u4E0D\u54CD\u5E94\u7FA4\u7EC4\u6D88\u606F"),!1;if(a.groupNameRule){let o=t.groupInfo?.nickName??t.groupInfo?.userName??t.groupInfo?.userId??t.fromId,s=Mo(o,a.groupNameRule);if(a.groupMode==="blacklist"&&s)return N.trace("\u5F53\u524D\u914D\u7F6E\u4E3A\u9ED1\u540D\u5355\uFF0C\u5339\u914D\u7FA4\u7EC4\u540D"+o),!1;if(a.groupMode==="whitelist"&&!s)return N.trace("\u5F53\u524D\u914D\u7F6E\u4E3A\u767D\u540D\u5355\uFF0C\u4E0D\u5339\u914D\u7FA4\u7EC4\u540D"+o),!1}}if(!e.message.isGroupChat||a.checkUserInGroup){if(a.userMode==="blacklist"&&(a.fromUserNames?.length&&a.fromUserNames.indexOf(e.message.senderName??e.message.senderId)>=0||a.fromNickNames?.length&&a.fromNickNames.indexOf(e.message.senderInfo?.nickName)>=0))return!1;if(a.userMode!=="all"&&(a.fromUserNames?.length&&a.fromUserNames.indexOf(e.message.senderName??e.message.senderId)<0||a.fromNickNames?.length&&a.fromNickNames.indexOf(e.message.senderInfo?.nickName)<0))return!1}if(a.contentFilter&&a.contentFilter.content?.length&&(typeof e.message.content=="string"||typeof e.message.content.text=="string")){let t=typeof e.message.content=="string"?e.message.content:e.message.content.text;if(!Mo(t,a.contentFilter))return!1}return N.debug("\u901A\u8FC7\u89C4\u5219\u68C0\u67E5"),!0}p(be,"checkMessageRule");async function io(a,e,t,o=!0){t=t??"latest";let s;if(o){let r=await fetch(`${e}/${a}/${t}`);if(r.status!==200)throw new Error(`\u540D\u4E3A ${a} \u7684\u5305\u5728npm(registry=${e})\u4E0A\u4E0D\u5B58\u5728\uFF0C\u8BF7\u68C0\u67E5\u5305\u540D\u662F\u5426\u6B63\u786E\uFF01`);if(s=await r.json(),!s.keywords?.includes("ppagent"))throw new Error(`\u540D\u4E3A ${a} \u7684\u5305\u5728npm(registry=${e})\u4E0A\u5B58\u5728\uFF0C\u4F46\u662F\u6CA1\u6709\u5305\u542Bppagent\u7684keyword\uFF0C\u8BF7\u5728package.json\u4E2D\u7684keywords\u5B57\u6BB5\u589E\u52A0ppagent\uFF01`)}return new Promise((r,i)=>{let n=`pnpm add ${a}@${t} ${e?.length?"--registry="+e:""}`;N.debug("RUN "+n),Ro(n,(c,m,d)=>{if(c||d&&!d.startsWith("Debug")){N.warn(String(c??d)),i(c);return}N.info(m),r(s)})})}p(io,"installDep");function Wo(a){return{author:a.author,homepage:a.homepage,keywords:a.keywords?.join(","),repo:a.repository?.url?.replace(/^git\+/,""),version:a.version,name:a.name,desc:a.description}}p(Wo,"_pkgInfo2PluginInfo");async function Xo(a,e,t){t=t??_.npmRegistry;let o=await io(a,t,e);return Wo(o)}p(Xo,"installAndGetPluginInfo");async function Jo(a){let e=await import(`${a}/package.json`,{assert:{type:"json"}});if(!e){N.info("\u672A\u80FD\u627E\u5230package.json\uFF0C\u63D2\u4EF6"+a+"\u53EF\u80FD\u5DF2\u7ECF\u88AB\u5378\u8F7D\uFF01");return}return new Promise((t,o)=>{let s=`pnpm remove ${a}`;N.debug("RUN "+s),Ro(s,{timeout:_.npmTimeout,windowsHide:!0},(r,i,n)=>{if(r||n&&!n.startsWith("Debug")){N.warn(String(r??n)),o(r);return}N.info(i),t(Wo(e))})})}p(Jo,"uninstallDep");function Dt(a){let e=process.env[a];if(e){let t=Number(e);return isNaN(t)?void 0:t}}p(Dt,"getEnvNumber");function ve(a){return(typeof a=="string"?a:a.text)?.trim()??""}p(ve,"extractMessageContentText");function Lr(a,e,t){let o=Ie(),s=Ie();return{type:a,content:e,time:new Date,fromId:o,senderId:o,senderInfo:{userId:o,userName:o,nickName:o},isGroupChat:!1,isSender:!1,toInfo:[{userId:s,userName:s,nickName:s}],messageId:Ie(),...t?.message??{}}}p(Lr,"createFakeMessage");async function Vo(a,e,t,o,s){let r=Lr(e,t,o),i=[],n=[],c=p(async(h,u)=>{let g=ve(h);return g.length&&i.push(g),n.push({content:h,type:u}),s?.(u,h),""},"addMessage"),m={me:p(()=>Promise.resolve(r.toInfo[0]),"me"),options:{instanceName:"fake-source-instance"},params:{name:"fake-source",optionsSchema:{},eventNames:[]},actions:[],event:new Mr,login:p(()=>Promise.resolve(),"login"),hasLogin:p(()=>!0,"hasLogin"),sendMessage:p(h=>c(h.content,h.type),"sendMessage"),getContacts:p(()=>Promise.resolve([]),"getContacts"),getContactDetail:p(h=>Promise.resolve(h),"getContactDetail")},d={reply:c,message:r,id:Ie(),type:f.CHAT_MESSAGE,source:m,me:r.toInfo[0],...o??{}};try{let h=await a.prepareMessage(d);await a.getResponse(d,{onContent:p((u,g)=>{c(u,g)},"onContent"),onError:p(u=>{N.error(u.message)},"onError")},h,[])}catch(h){N.error(h.message),i.push("\u8FD0\u884C\u5931\u8D25\uFF1A"+h.message)}return{text:i.join(""),all:n}}p(Vo,"directRunBot");var $t=y("async-file"),b=class a{static{p(this,"AsyncFile")}loader;format;constructor(e,t){this.loader=e,this.format=t,this.tempDir="temp",this.loaded=!1}tempDir;buffer;path;localPath;base64;text;textEncoding;_name;url;_info;loaded;get name(){return this._name}async load(){if(this.loaded)return;this.loaded=!0;let e=await this.loader();await this.setSource(e)}async setSource({data:e,type:t,name:o,textEncoding:s}){if(this.buffer=this.path=this.localPath=this.base64=this.text=this.url=this._name=this.textEncoding=void 0,!e||!t)throw new Error("can't initialize async file!");if(t==="buffer")this.buffer=e;else if(t==="base64")this.base64=e;else if(t==="path")this.path=e;else if(t==="text")this.text=e;else throw new Error("erro file type:"+t);this._name||(this._name=o??Hr(),this._name.indexOf(".")<0&&(this._name=this._name+".dat")),this.textEncoding=s}async loadBufferFromPath(e){if(e.startsWith("http"))try{let t=await(await fetch(e)).arrayBuffer();return Ue.from(t)}catch{return $t.debug("retry to get file "+e),new Promise(t=>{setTimeout(async()=>{let o=await(await fetch(e)).arrayBuffer();t(Ue.from(o))},1e3)})}return new Promise((t,o)=>{Dr(e,(s,r)=>{if(s){o(s);return}t(r)})})}async saveFile(e){let t;return this.format==="text"?t=await this.asText():(t=await this.asBuffer(),e||(this._name=await qo(t,this._name))),new Promise((o,s)=>{try{let r=e??oe.join(_.publicPath,this.tempDir,this._name),i=qr(r);Qo(i)||Yo(i,{recursive:!0}),jr(r,t,()=>{o(oe.resolve(r))})}catch(r){s(r)}})}saveAs(e,t,o,s){(!e?.length||!t?.length)&&$t.warn("dir\u548Cbucket\u4E0D\u80FD\u4E3A\u7A7A\uFF01");let r=oe.join(e,t);return Qo(r)||Yo(r,{recursive:!0}),r=oe.join(r,o??this._name),this.saveFile(r).then(()=>{s?.()}),r}getFormat(){return this.format}async asBuffer(){if(await this.load(),this.buffer)return this.buffer;if(this.text)this.buffer=this.textEncoding?Ue.from(this.text,this.textEncoding):Ue.from(this.text);else if(this.base64)this.buffer=Ue.from(this.base64,"base64");else if(this.path)this.buffer=await this.loadBufferFromPath(this.path);else{$t.warn("\u5F53\u524D\u6587\u4EF6\u65E0\u6CD5\u88AB\u52A0\u8F7D\uFF01");return}return this.buffer}async asPath(){return await this.load(),this.path?this.path:(this.path=await this.saveFile(),this.path)}async asBase64(){if(await this.load(),this.base64)return this.base64;let e=await this.asBuffer();return this.base64=e.toString("base64"),this.base64}async asText(){if(await this.load(),this.text)return this.text;let e=await this.asBuffer();if(!e){$t.warn("load file as buffer failed!");return}return this.text=this.textEncoding?e.toString(this.textEncoding):e.toString(),this.text}async asUrl(){if(await this.load(),this.url)return this.url;let e;return this.path&&!this.path.startsWith("http")&&oe.dirname(oe.resolve(this.path))===oe.dirname(oe.join(_.publicPath,`${this.tempDir}/`))?e=oe.resolve(this.path):e=await this.saveFile(),this.url=_.httpUrl+`${_.publicPathName}/${this.tempDir}/${oe.basename(e)}`,this.url}async asLocalPath(){return await this.load(),this.localPath?this.localPath:(this.path&&!this.path.startsWith("http")?this.localPath=this.path:this.localPath=await this.saveFile(),this.localPath)}async asReadStream(){await this.load();let e=await this.asLocalPath();return Ur(e)}async info(){if(this._info)return this._info;let e=await this.asLocalPath();return new Promise((t,o)=>{$r(e,(s,r)=>{s?o(s):t(r)})})}isAsyncFile(){return!0}toString(){return this.name}static fromPath(e,t="binary",o,s){let r=o??oe.basename(e);r.indexOf("?")>0&&(r=r.split("?")[0]);let i=p(async()=>({data:e,type:"path",name:r,textEncoding:s}),"loader"),n=new a(i,t);return n._name=r,n}static fromBuffer(e,t,o="binary",s){let r=p(async()=>({data:e,type:"buffer",name:t,textEncoding:s}),"loader"),i=new a(r,o);return i._name=t,i}};import{isWav as zr}from"silk-wasm";var jt=class a{static{p(this,"HistoryMessageManager")}options;static DefaultOptions={expireInSeconds:300,maxItemsCount:30,maxWordsCount:10240};constructor(e){this.options=e,this.messages=[],this.wordsCount=0,this.options={...a.DefaultOptions,...e}}messages;wordsCount;addMessage(e,t){this.messages.length===this.options.maxItemsCount&&this.messages.shift();let o={message:e,wordsCount:0,expiresAt:new Date().getTime()+this.options.expireInSeconds*1e3};this.messages.push(o);let s=(typeof t=="string"?t:t?.text)?.trim();if(s?.length&&(this.wordsCount+=s.length,o.wordsCount=s.length,this.wordsCount>this.options.maxWordsCount))for(;this.messages.length;){let r=this.messages.shift();if(this.wordsCount-=r.wordsCount,this.wordsCount<=this.options.maxWordsCount)break}}getHistoryMessages(){let e=new Date().getTime(),t=-1;for(let o=0;o<this.messages.length;o++){let s=this.messages[o];if(s.expiresAt>e){t=o;break}else this.wordsCount-=s.wordsCount}return t>0&&(this.messages=this.messages.splice(0,t)),this.messages.map(o=>o.message)}clearHistory(){this.messages=[],this.wordsCount=0}};import Gr from"emittery";var qt=class extends Gr{static{p(this,"SortedPromise")}_queue=Promise.resolve();_logger=y("sorted-promise");add(e){let t=this._queue.then(()=>e);return this._queue=t.catch(o=>{this._logger.error(o.message)}),t}};import{v4 as ao}from"uuid";var Ae=class extends Kr{static{p(this,"Agent")}app;_options;static params={name:"default",desc:"\u5185\u7F6E\u6784\u5EFA\u5668",optionsSchema:{type:"formily",formily:{type:"object",properties:{...$,sourceInstanceNames:{type:"array",title:"\u76D1\u542C\u7684\u6D88\u606F\u6E90","x-decorator":"FormItem","x-component":"SourceSelector","x-decorator-props":{tooltip:"\u4ECE\u6D88\u606F\u6E90\u4E2D\u9009\u62E9\u4E00\u4E2A\u6216\u8005\u591A\u4E2A\u8FDB\u884C\u76D1\u542C\uFF0C\u4E00\u4E2A\u540E\u7AEF\u652F\u6301\u54CD\u5E94\u591A\u4E2A\u6D88\u606F\u6E90\u3002"},required:!0},botResponseRule:{type:"object",title:"\u54CD\u5E94\u89C4\u5219","x-decorator":"FormItem","x-component":"MessageRule","x-component-props":{isForSkill:!1},"x-decorator-props":{tooltip:"\u8BBE\u7F6E\u540E\u7AEF\u7684\u54CD\u5E94\u6A21\u578B\uFF0C\u4EE5\u53CA\u7528\u6237\u3001\u6D88\u606F\u7B49\u7684\u8FC7\u6EE4\u89C4\u5219\u3002"},required:!0},skillRules:{type:"array",title:"\u6280\u80FD\u5217\u8868",items:{type:"void","x-component":"Space","x-decorator":"ArrayItems.Item",properties:{input:{type:"object","x-component":"MessageRule","x-component-props":{isForSkill:!0}},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove"}}},properties:{add:{type:"void",title:"\u6DFB\u52A0\u6280\u80FD","x-component":"ArrayItems.Addition"}},"x-decorator":"FormItem","x-component":"ArrayItems","x-component-props":{style:{width:300}},"x-decorator-props":{tooltip:"\u7528\u4E8E\u6DFB\u52A0\u6280\u80FD\uFF0C\u6765\u62E6\u622A\u7528\u6237\u6D88\u606F\u6216\u8005\u57FA\u4E8E\u540E\u7AEF\u6A21\u578B\u7684\u56DE\u590D\u518D\u6B21\u52A0\u5DE5\u3002"}},splitImageFromBotText:{type:"boolean",title:"\u4ECE\u6587\u672C\u6D88\u606F\u4E2D\u63D0\u53D6\u56FE\u7247\u5355\u72EC\u53D1\u9001","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u9489\u9489\u8FD9\u7C7B\u652F\u6301\u56FE\u6587\u6DF7\u7F16\u7684\u5EFA\u8BAE\u8BBE\u7F6E\u4E3Afalse\uFF0C\u5FAE\u4FE1\u8FD9\u79CD\u4E0D\u652F\u6301\u7684\u5EFA\u8BAE\u8BBE\u7F6E\u4E3Atrue\u3002"},default:!1},removeImageAfterSplit:{type:"boolean",title:"\u62C6\u5206\u56FE\u7247\u540E\u79FB\u9664\u56FE\u7247\u94FE\u63A5","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u56FE\u7247\u62C6\u51FA\u6765\u4E4B\u540E\uFF0C\u662F\u5426\u4ECE\u539F\u6765\u7684\u56DE\u590D\u4E2D\u5220\u9664\u56FE\u7247\u94FE\u63A5\uFF0C\u4EE5\u51CF\u5C11\u6D88\u606F\u957F\u5EA6"},default:!1},bufferWordsMinCount:{type:"number",title:"\u6BCF\u6761\u56DE\u590D\u4E0D\u4F4E\u4E8E\u591A\u5C11\u5B57\uFF08\u7EA6\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:0},default:70,"x-decorator-props":{tooltip:"\u7528\u6765\u907F\u514D\u6D88\u606F\u88AB\u62C6\u7684\u8FC7\u6563\u3002\u9ED8\u8BA470\u4E2A\u5B57\u7B26\u3002\u5B9E\u9645\u8FD4\u56DE\u6570\u91CF\u4E0D\u4E00\u5B9A\u521A\u597D\u7B49\u4E8E\u8BE5\u6570\u3002\u8BE5\u7279\u6027\u4EC5\u5BF9\u4E2D\u6587\u751F\u6548\u3002\u5982\u679C\u4E0D\u5E0C\u671B\u62C6\u5206\uFF0C\u53EF\u5C06\u6B64\u503C\u8BBE\u7F6E\u4E3A0\u3002"}},maxSplitCount:{type:"number",title:"\u6700\u5927\u62C6\u5206\u6761\u6570\uFF08\u4E0D\u542B\u601D\u8003\u8FC7\u7A0B\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:1},default:3,"x-decorator-props":{tooltip:"\u4E00\u6B21\u56DE\u590D\u6700\u591A\u88AB\u62C6\u5206\u6210\u591A\u5C11\u6761\uFF0C\u5982\u679C\u8D85\u8FC7\u4E86\uFF0C\u5219\u6700\u540E\u4E00\u6B21\u6027\u56DE\u590D\u3002\u907F\u514D\u88AB\u62C6\u5206\u7684\u592A\u96F6\u6563\uFF0C\u4E5F\u80FD\u7B26\u5408\u90E8\u5206\u5E73\u53F0\u5BF9\u56DE\u590D\u6570\u91CF\u7684\u8981\u6C42\uFF08\u5982\u516C\u4F17\u53F7\uFF0CQQ\u673A\u5668\u4EBA\uFF09\u3002"}},splitCharacters:{type:"array",title:"\u62C6\u5206\u53E5\u5B50\u7684\u6807\u8BB0",items:{type:"void","x-component":"Space",properties:{input:{type:"string","x-decorator":"FormItem","x-component":"Input"},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove"}}},properties:{add:{type:"void",title:"\u6DFB\u52A0\u5206\u9694\u6807\u8BB0\uFF08\u6BCF\u884C\u4E00\u4E2A\uFF09","x-component":"ArrayItems.Addition"}},"x-decorator":"FormItem","x-component":"ArrayItems",default:["\uFF01","\u3002","\uFF1F"],"x-decorator-props":{tooltip:'\u7528\u4E8E\u62C6\u5206\u53E5\u5B50\u7684\u6807\u8BB0\uFF0C\u9ED8\u8BA4["\uFF01","\u3002","\uFF1F"]\u3002\u5982\u679C\u7B2C\u4E00\u4E2A\u8981\u7D20\u8BBE\u7F6E\u4E3A["none"]\uFF0C\u5219\u8868\u793A\u53EA\u5173\u6CE8\u5B57\u6570\uFF0C\u4E0D\u8003\u8651\u5206\u53E5\uFF0C\u9002\u7528\u4E8E\u6D41\u5F0F\u56DE\u590D\u3002\u975E\u6D41\u5F0F\u56DE\u590D\u8BF7\u52A1\u5FC5\u8BBE\u7F6E\u5408\u7406\u503C\uFF0C\u5426\u5219\u5F02\u5E38\u7684\u65AD\u53E5\u53EF\u80FD\u5BFC\u81F4\u56FE\u7247\u65E0\u6CD5\u88AB\u8BC6\u522B\u6216\u8005\u9519\u8BEF\u8BC6\u522B\u3002'}},maxReasoningSplitCount:{type:"number",title:"\u601D\u8003\u8FC7\u7A0B\u6700\u5927\u7684\u62C6\u5206\u6570\u91CF","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:1},default:3,"x-decorator-props":{tooltip:"\u601D\u8003\u8FC7\u7A0B\u6700\u5927\u7684\u62C6\u5206\u6570\u91CF\uFF0C\u9ED8\u8BA4\u4E3A3\u3002\u5982\u679C\u8D85\u8FC7\u4E86\uFF0C\u5219\u6700\u540E\u4E00\u6B21\u6027\u56DE\u590D\u3002\u907F\u514D\u88AB\u62C6\u5206\u7684\u592A\u96F6\u6563\uFF0C\u4E5F\u80FD\u7B26\u5408\u90E8\u5206\u5E73\u53F0\u5BF9\u56DE\u590D\u6570\u91CF\u7684\u8981\u6C42\u3002"}},sendReasoning:{type:"boolean",title:"\u663E\u793A\u601D\u8003\u8FC7\u7A0B","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u662F\u5426\u663E\u793A\u601D\u8003\u8FC7\u7A0B\uFF08\u4EC5\u5BF9\u63A8\u7406\u6A21\u578B\u6709\u6548\uFF09\u3002\u6CE8\u610F\uFF0C\u5F00\u542F\u540E\uFF0C\u5982\u679C\u8BBE\u7F6E\u4E86\u62C6\u5206\u4E0A\u9650\uFF0C\u5219\u601D\u8003\u8FC7\u7A0B\u548C\u56DE\u590D\u5185\u5BB9\u4F7F\u7528\u540C\u6837\u591A\u7684\u4E0A\u9650"},default:!1},reasoningPrefix:{type:"string",title:"\u601D\u8003\u4E2D\u7684\u56DE\u590D\u524D\u7F00","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u524D\u7F00\uFF0C\u5982\u3010\u601D\u8003\u4E2D\u3011\uFF0C\u9ED8\u8BA4\u4E3A\u3010\u601D\u8003\u4E2D\u3011"},"x-decorator-props":{tooltip:"\u601D\u8003\u90E8\u5206\u5185\u5BB9\u7684\u524D\u7F00\uFF0C\u5982 \u3010\u601D\u8003\u4E2D\u3011"},default:"\u3010\u601D\u8003\u4E2D\u3011"},contentPrefix:{type:"string",title:"\u63A8\u7406\u540E\u5185\u5BB9\u7684\u56DE\u590D\u524D\u7F00","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u524D\u7F00\uFF0C\u5982\u3010\u56DE\u590D\u3011\uFF0C\u9ED8\u8BA4\u4E3A\u3010\u56DE\u590D\u3011"},"x-decorator-props":{tooltip:"\u56DE\u590D\u5185\u5BB9\u7684\u524D\u7F00\uFF0C\u5982 \u3010\u56DE\u590D\u3011\u3002\u4EC5\u5BF9\u63A8\u7406\u6A21\u578B\u751F\u6548\u3002\u6B63\u5E38\u5BF9\u5185\u5BB9\u7684\u4FEE\u6539\u53EF\u4EE5\u901A\u8FC7\u6DFB\u52A0\u6280\u80FD\u5B8C\u6210"},default:"\u3010\u56DE\u590D\u3011"},historyEnabled:{type:"boolean",title:"\u4F7F\u7528\u672C\u7A0B\u5E8F\u7684\u5386\u53F2\u6D88\u606F\u529F\u80FD","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:`\u5F53\u540E\u7AEF\u6A21\u677F\u6CA1\u6709\u81EA\u5E26\u5386\u53F2\u6D88\u606F\u7BA1\u7406\u65F6\uFF0C\u53EF\u4EE5\u5F00\u542Fagent\u5185\u7F6E\u7684\u5386\u53F2\u6D88\u606F\u529F\u80FD\uFF0C\u5982ChatGPT\uFF0COllama\u7B49\u7EAF\u5BF9\u8BDD\u6A21\u578B\u9700\u8981\u5F00\u542F\uFF0C\u5728\u53D1\u9001\u5230\u540E\u7AEF\u65F6\u4F1A\u5E26\u4E0A\u5386\u53F2\u6D88\u606F\u3002
10
+ \u5982\u679C\u540E\u7AEF\u58F0\u660E\u4E86\u81EA\u5E26\u5386\u53F2\u6D88\u606F\u7BA1\u7406\uFF08\u5982dify\uFF0Ccoze\u7B49\uFF09\uFF0C\u5219\u6B64\u529F\u80FD\u5931\u6548\uFF0C\u6B64\u65F6\u65E0\u9700\u5F00\u542F\uFF0C\u5426\u5219\u4F1A\u6D6A\u8D39\u5185\u5B58\u3002`}},historyOptions:{type:"object",title:"\u5386\u53F2\u6D88\u606F\u5B58\u50A8\u914D\u7F6E","x-decorator":"FormItem",properties:{expireInSeconds:{type:"number",title:"\u8D85\u65F6\u65F6\u95F4\uFF08\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:60},default:300,"x-decorator-props":{tooltip:"\u5386\u53F2\u6D88\u606F\u5B58\u50A8\u591A\u4E45\u4F1A\u5931\u6548\uFF0C\u9ED8\u8BA4300\u79D2\u3002"}},maxWordsCount:{type:"number",title:"\u6700\u591A\u5B58\u50A8\u591A\u5C11\u4E2A\u5B57\u7B26","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:60},default:10240,"x-decorator-props":{tooltip:"\u5386\u53F2\u6D88\u606F\u5B58\u50A8\u591A\u4E45\u4F1A\u5931\u6548\uFF0C\u9ED8\u8BA4300\u79D2\u3002\u4EC5\u5BF9\u6587\u672C\u7C7B\u6D88\u606F\u6709\u6548\u3002"}},maxItemsCount:{type:"number",title:"\u6700\u591A\u5B58\u50A8\u591A\u5C11\u6761\u8BB0\u5F55\uFF08\u5355\u4E2A\u5BF9\u8BDD\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:3},default:30,"x-decorator-props":{tooltip:"\u8D85\u8FC7\u7684\u8BB0\u5F55\u4F1A\u88AB\u8986\u76D6\uFF0C\u9ED8\u8BA430\u6761\u3002\u540C\u4E00\u4E2A\u7FA4\u91CC\u9762\u7684\u804A\u5929\u89C6\u4E3A\u5355\u4E2A\u5BF9\u8BDD\u3002"}}}},sendMode:{type:"string",enum:[{label:"\u76F4\u63A5\u53D1\u9001",value:"now"},{label:"\u6392\u961F\u53D1\u9001\uFF08\u63A8\u8350\uFF09",value:"queue"}],title:"\u53D1\u9001\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select",default:"queue","x-decorator-props":{tooltip:"\u53D1\u9001\u6A21\u5F0F\uFF0Cnow\u662F\u6240\u6709\u6D88\u606F\u90FD\u9ED8\u8BA4\u7ACB\u5373\u53D1\u9001\uFF08\u5F53\u4F7F\u7528\u6280\u80FD\u65F6\uFF0C\u4E0D\u540C\u6587\u5B57\u5904\u7406\u7684\u987A\u5E8F\u53EF\u80FD\u4E0D\u540C\uFF0C\u6709\u53EF\u80FD\u5BFC\u81F4\u56DE\u590D\u4E71\u5E8F\uFF0C\u5EFA\u8BAE\u4F7F\u7528\u6392\u961F\u53D1\u9001\uFF09\uFF0Cqueue\u662F\u52A0\u5165\u53D1\u9001\u961F\u5217\uFF0C\u786E\u4FDD\u6309\u7167\u540E\u7AEF\u8F93\u51FA\u987A\u5E8F\u8FDB\u884C\u56DE\u590D\uFF0C\u540C\u65F6\u53EF\u4EE5\u901A\u8FC7\u8BBE\u7F6E\u961F\u5217\u95F4\u9694\u6765\u63A7\u5236\u53D1\u9001\u901F\u5EA6\uFF0C\u907F\u514D\u89E6\u53D1\u98CE\u63A7\u3002"}},minSendInterval:{type:"number",title:"\u6700\u5C0F\u53D1\u9001\u65F6\u95F4\u95F4\u9694\uFF08\u6BEB\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:0},default:1e3,"x-decorator-props":{tooltip:"\u6700\u5C0F\u53D1\u9001\u65F6\u95F4\u95F4\u9694\uFF0C\u5355\u4F4D\u662F\u6BEB\u79D2\u3002\u9632\u6B62\u53D1\u9001\u8FC7\u5FEB\u88AB\u8BC6\u522B\u4E3A\u5783\u573E\u6D88\u606F\u3002\u9ED8\u8BA4\u4E3A1000\u3002\u9700\u8981\u53D1\u9001\u6A21\u5F0F\u4E3A\u961F\u5217\uFF08queue\uFF09"}},timeoutInSeconds:{type:"number",title:"\u4F1A\u8BDD\u8D85\u65F6\u65F6\u95F4\uFF08\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:20,max:3600},default:60,"x-decorator-props":{tooltip:"\u5355\u4E2A\u4F1A\u8BDD\uFF08\u63D0\u95EE\uFF09\u7B49\u5F85\u7684\u6700\u957F\u65F6\u95F4\uFF0C\u9ED8\u8BA460\u79D2\u3002\u7531\u4E8E\u5927\u90E8\u5206\u667A\u80FD\u4F53\u4E3A\u4E86\u7EF4\u6301\u8FDE\u7EED\u4E0A\u4E0B\u6587\uFF0C\u4E0D\u652F\u6301\u5728\u540C\u4E00\u4E2A\u4E0A\u4E0B\u6587\u4E2D\u540C\u65F6\u6FC0\u6D3B\u591A\u4E2A\u5BF9\u8BDD\uFF0C\u56E0\u6B64\u7CFB\u7EDF\u5728\u51FA\u73B0\u540C\u4E00\u4E2A\u7528\u6237\uFF08\u7FA4\u7EC4\uFF09\u5728\u4E0A\u4E00\u4E2A\u95EE\u9898\u672A\u5B8C\u6210\u7EE7\u7EED\u63D0\u95EE\u65F6\uFF0C\u4F1A\u52A0\u5165\u961F\u5217\u7B49\u5F85\u3002\u8D85\u65F6\u540E\u5C06\u4E0D\u518D\u7B49\u5F85\uFF0C\u76F4\u63A5\u6267\u884C\u4E0B\u4E00\u4E2A\u63D0\u95EE\u3002"}},checkWavAudio:{type:"boolean",title:"\u68C0\u6D4B\u56DE\u590D\u7684\u97F3\u9891\u4E3Awav\u683C\u5F0F","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},default:!0,"x-decorator-props":{tooltip:"wav\u662F\u7CFB\u7EDF\u5185\u90E8\u9ED8\u8BA4\u7684\u8BED\u97F3\u683C\u5F0F\uFF0C\u5EFA\u8BAE\u5F00\u542F\uFF0C\u907F\u514D\u540E\u7AEF\u5904\u7406\u65F6\u629B\u51FA\u5F02\u5E38\u3002\u5982\u679C\u6CA1\u6709\u4F7F\u7528\u8BED\u97F3\u6280\u80FD\u53EF\u4EE5\u5173\u95ED\uFF0C\u5F00\u542F\u4E5F\u4E0D\u5F71\u54CD\u6027\u80FD\u3002"}},fallbackAnswer:{type:"string",title:"\u515C\u5E95\u56DE\u590D","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u515C\u5E95\u56DE\u590D\u5185\u5BB9"},"x-decorator-props":{tooltip:"\u5F53\u5339\u914D\u5230\u89C4\u5219\uFF0C\u4F46\u662Fbot\u65E0\u6CD5\u56DE\u590D\u7684\u65F6\u5019\u89E6\u53D1\u8BE5\u56DE\u590D\u3002\u5982\u679C\u4E0D\u8BBE\u7F6E\uFF0C\u5219\u4E0D\u56DE\u590D\u3002\u5982\u679C\u6D88\u606F\u88AB\u6280\u80FD\u53D6\u6D88\u56DE\u590D\uFF0C\u4E0D\u4F1A\u89E6\u53D1\u8BE5\u56DE\u590D\u3002"},default:"\u{1F979}\uFF0C\u6211\u8FD8\u4E0D\u652F\u6301\u8FD9\u4E2A\u6D88\u606F\u7C7B\u578B\u5462\uFF01"},multiActiveChatInConversationMode:{type:"string",enum:[{label:"\u6392\u961F\u5904\u7406\uFF0C\u4E0D\u63D0\u9192",value:"pool"},{label:"\u63D0\u9192\u540E\u76F4\u63A5\u8FD4\u56DE\uFF0C\u4E0D\u5904\u7406",value:"tips"},{label:"\u63D0\u9192\u540E\u6392\u961F\u5904\u7406",value:"pool_tips"}],title:"\u591A\u6D3B\u8DC3\u4F1A\u8BDD\u5904\u7406\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select",default:"pool_tips","x-decorator-props":{tooltip:"\u5982\u679C\u4E00\u4E2A\u7528\u6237\u540C\u65F6\u5728\u4E00\u4E2Abot\u8FD8\u6CA1\u6709\u56DE\u7B54\u7ED3\u675F\u65F6\u53C8\u63D0\u95EE\uFF0C\u4E14bot\u4E0D\u652F\u6301\u4E00\u4E2A\u4F1A\u8BDD\u4E2D\u591A\u4E2A\u6D3B\u8DC3\u5BF9\u8BDD\u65F6\uFF08\u57FA\u672C\u90FD\u4E0D\u652F\u6301\uFF0C\u5982dify\uFF0Ccoze\uFF09\uFF0C\u8981\u91C7\u53D6\u7684\u63AA\u65BD\uFF0Cpool\u662F\u76F4\u63A5\u653E\u5165\u7B49\u5F85\u533A\uFF0C\u7B49\u4E0A\u4E00\u8F6E\u56DE\u590D\u7ED3\u675F\u540E\u7EE7\u7EED\u5904\u7406\uFF0C\u4E0D\u8F93\u51FA\u63D0\u793A\uFF1Btips\u662F\u7ED9\u51FA\u63D0\u793A\u4E0D\u63D0\u4EA4\u5230\u540E\u7AEF\u76F4\u63A5\u8FD4\u56DE\uFF1Bpool_tips\u662F\u653E\u5165\u7B49\u5F85\u533A\u4E14\u7ED9\u51FA\u63D0\u793A\u3002"}},multiActiveChatInConversationTips:{type:"string",title:"\u591A\u6D3B\u8DC3\u4F1A\u8BDD\u63D0\u793A\u8BCD","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u591A\u6D3B\u8DC3\u4F1A\u8BDD\u63D0\u793A\u8BCD\uFF08\u4E0D\u6E05\u695A\u8BF7\u7559\u7A7A\uFF09"},"x-decorator-props":{tooltip:"\u51FA\u73B0\u591A\u4E2A\u6D3B\u8DC3\u5BF9\u8BDD\u65F6\uFF0C\u8F93\u51FA\u7684\u56DE\u590D\u3002\u5F53\u591A\u6D3B\u8DC3\u4F1A\u8BDD\u6A21\u5F0F\u914D\u7F6E\u4E3A\u53D1\u9001\u63D0\u793A\u65F6\uFF08tips\u6216\u8005pool_tips\uFF09\u624D\u4F1A\u751F\u6548\u3002"},default:""},sendErrorLog:{type:"boolean",title:"\u53D1\u9001\u5F02\u5E38\u65E5\u5FD7\u5230\u5BA2\u6237\u7AEF","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},default:!1,"x-decorator-props":{tooltip:"\u662F\u5426\u53D1\u9001\u6D88\u606F\u5904\u7406\u5F02\u5E38\u7684\u65E5\u5FD7\u5230\u5BA2\u6237\u7AEF\uFF0C\u9ED8\u8BA4false"}}}}}};constructor(e,t){if(super(),this.app=e,this._options=t,this._initialized=!1,this._textEndId=ao(),this._historyManagers={},this._sendMessagePool=new Map,this._sourceMessagePool=new Map,this.processChatMessage=async o=>{this._logger.trace("message received"),this._logger.trace(Go(o.message,o.source));let s,r;try{if(!be(this._responseRule,o)){this._logger.debug("\u5F53\u524D\u6D88\u606F\u4E0D\u5728"+this._options.instanceName+"\u56DE\u590D\u7684\u6761\u4EF6\u5185");return}let i=this.app.botManager.getInstance(this._responseRule.instanceName);if(!i){this._logger.warn("\u540D\u4E3A"+this._responseRule.instanceName+"\u7684\u673A\u5668\u4EBA\u5B9E\u4F8B\u4E0D\u5B58\u5728\uFF01");return}if(s=this._wrapEventWithChatReply(o),r=s.source.options.instanceName+"-"+s.message.fromId,!i.params.allowMultiActiveChat)if(this._sourceMessagePool.get(r)?.busy){if(this._options.multiActiveChatInConversationMode==="tips"){s.reply(this._options.multiActiveChatInConversationTips,l.TEXT,void 0,!0),this._logger.debug("\u540C\u4E00\u4E2A\u540E\u7AEF\u670D\u52A1\u4E0D\u5141\u8BB8\u591A\u4E2A\u6D3B\u52A8\u4E2D\u7684\u5BF9\u8BDD\uFF0C\u8FD4\u56DEtips\uFF1A"+this._options.multiActiveChatInConversationTips);return}this._sourceMessagePool.get(r).pool.push(s),this._options.multiActiveChatInConversationMode==="pool_tips"&&s.reply(this._options.multiActiveChatInConversationTips,l.TEXT,void 0,!0),this._logger.debug("\u5F53\u524D\u7528\u6237\u5B58\u5728\u6B63\u5728\u6267\u884C\u7684\u4F1A\u8BDD\uFF0C\u653E\u5165\u7B49\u5F85\u533A\uFF0C\u5F85\u6267\u884C\u5B8C\u540E\u7EE7\u7EED\uFF01");return}else this._sourceMessagePool.set(r,{busy:!0,pool:[]});let n=!1,c=setTimeout(()=>{n=!0,this._logger.debug("\u5F53\u524D\u7528\u6237\u63D0\u95EE\u6267\u884C\u8D85\u8FC7"+this._options.timeoutInSeconds+"\u79D2\uFF0C\u7EE7\u7EED\u6267\u884C\u4E0B\u4E00\u4E2A\uFF01"),this._nextQuestion(r)},this._options.timeoutInSeconds*1e3);if(await this.onChatMessage(s),n){this._logger.debug("\u5F53\u524D\u7528\u6237\u63D0\u95EE\u6267\u884C\u8D85\u8FC7"+this._options.timeoutInSeconds+"\u79D2\uFF0C\u4E0B\u4E00\u4E2A\u4EFB\u52A1\u5DF2\u88AB\u63D0\u524D\u6267\u884C\uFF0C\u76F4\u63A5\u8FD4\u56DE\uFF01");return}clearTimeout(c),this._logger.debug("\u5F53\u524D\u7528\u6237\u63D0\u95EE\u6267\u884C\u5B8C\u6210"),this._nextQuestion(r)}catch(i){this._logger.warn("\u6D88\u606F\u5904\u7406\u51FA\u9519"),this._logger.error(i.message),r&&this._nextQuestion(r)}},this.onChatMessage=async o=>{this._logger.debug(`process chat message[id:${o.message.messageId}] of channel ${o.source.options.instanceName}`),this.emit(f.CHAT_MESSAGE,o);let s=this._findRules(o,this._skillRules,!0);if(await this._applyBeforeSkills(s,o),!o.message){this._logger.info("skill\u8FD4\u56DE\u7684message\u4E3A\u7A7A\uFF0C\u6B64\u6D88\u606F\u65E0\u9700\u4F7F\u7528bot\u54CD\u5E94\uFF01");return}let r=this.app.botManager.getInstance(this._responseRule.instanceName),i=this._getBotMessageManager(o.source.options.instanceName,o.message.fromId);if(o.message.type===l.TEXT){let X=o.message.content?.trim();if(X.startsWith("#reset")||X.startsWith("#\u91CD\u7F6E")){i.clearHistory();let F=await r.clearHistoryRequested(o);F?(o.reply("\u91CD\u7F6E\u5931\u8D25\uFF01",l.TEXT,void 0,!0),this._logger.error(F)):o.reply("\u91CD\u7F6E\u6210\u529F\uFF01",l.TEXT,void 0,!0);return}}let n=await r.prepareMessage(o);if(!n?.forSend){this._logger.debug("reply denied by bot"),this._options.fallbackAnswer?.length&&o.reply(this._options.fallbackAnswer,l.TEXT,void 0,!0);return}o.source.beforeSend&&(await o.source.beforeSend(o.message),this._logger.debug("before reply hook"));let c=[];r.params.needHistoryMessage&&this._options.historyEnabled&&(c=i.getHistoryMessages(),n.forHistory&&(n.forHistory.type="user",i.addMessage(n.forHistory,o.message.content)));let m=new qt,d=o.message.isGroupChat&&o.message.type!==l.PAT,h=!o.message.isGroupChat,u=!1,g="",w=0,x="",v="",R="",le=0;try{let X=await r.getResponse(o,{onReasoning:p(async F=>{if(!this._options.sendReasoning)return;h&&!u&&(u=!0,o.onGenerating?.());let P="";R+=F;let I=this._splitWords(R,le,this._options.maxReasoningSplitCount);if(P=I.extract,R=I.remaining,I.extract?.length&&le++,P?.trim().length){let J={status:"reasoning"};this._options.reasoningPrefix?.length&&!v?.trim().length&&(P=this._options.reasoningPrefix+P),await o.reply(P,l.TEXT,J),v+=P}},"onReasoning"),onContent:p(async(F,P)=>{if(R?.length){let C={status:"reasoning"};this._options.reasoningPrefix?.length&&!v?.trim().length&&(R=this._options.reasoningPrefix+R),await o.reply(R,l.TEXT,C),v+=R,R=""}if(h&&!u&&(u=!0,o.onGenerating?.()),!F)return;let I=typeof F=="string"?F:F?.text,J="",te;if(typeof I=="string"){x+=I,g+=I;let C=this._splitWords(g,w,this._options.maxSplitCount);J=C.extract,g=C.remaining,C.extract?.length&&w++,P=l.TEXT}else te=F;if(J.trim().length){let C=await m.add(this._applyAfterSkills(s,o,J,l.TEXT,void 0,"part"));if(C){let pe={status:"content"};d&&(d=!1,C.messageType===l.TEXT&&o.message.senderInfo?.nickName&&o.source.params.autoAppendAt&&(C.content="@"+o.message.senderInfo.nickName+" "+C.content,pe.atList=[o.message.senderInfo?.[o.source.params.fieldInAtList??"userId"]])),v?.trim().length&&typeof C.content=="string"&&(this._options.contentPrefix?.length&&(C.content=this._options.contentPrefix+C.content),C.content=`
11
+ `+C.content,v=""),await o.reply(C.content,C.messageType,pe)}}if(te){this._logger.debug("process none text content,content type:"+P);let C=await m.add(this._applyAfterSkills(s,o,F,P,void 0,"part"));C?.content&&await o.reply(C.content,C.messageType)}},"onContent"),onError:p(F=>{throw F},"onError")},n,c);if(x.trim().length){this._logger.debug("all words:"+x);let F=g,P=l.TEXT,I=await m.add(this._applyAfterSkills(s,o,g,l.TEXT,x,"part"));if(F=I.content,P=I.messageType,F&&P===l.TEXT){let te=await m.add(this._applyAfterSkills(s,o,g,l.TEXT,x,"complete"));F=te.content,P=te.messageType}let J=typeof F=="string"?F:F.text;F&&(!J||J.length)&&await o.reply(F,P)}r.params.needHistoryMessage&&this._options.historyEnabled&&X&&(X.type="bot",i.addMessage(X,x))}catch(X){if(this._logger.warn("process message error"),this._logger.error(X.message),await o.reply(`\u5904\u7406\u6D88\u606F\u65F6\u9047\u5230\u5F02\u5E38
12
+ `,l.TEXT,void 0,!0),this._options.sendErrorLog&&await o.reply(String(X),l.TEXT,void 0,!1),process.env.LOG_LEVEL==="debug")throw X}finally{o.source.afterSend&&await o.reply(this._textEndId,l.TEXT,void 0,!1)}},this.onSelfChatMessage=o=>{this._logger.debug("self send message"),o.message.type===l.TEXT&&this._logger.debug(o.message.content),this.emit(f.SELF_SEND,this._wrapEventWithChatReply(o))},!t.instanceName)throw new Error("anget\u540D\u79F0\u672A\u914D\u7F6E\uFF01");if(!t.botResponseRule)throw new Error("\u54CD\u5E94\u89C4\u5219\u672A\u914D\u7F6E\uFF01");this._logger=y(t.instanceName),this._options.checkWavAudio=this._options.checkWavAudio??!0,this._options.bufferWordsMinCount=this._options.bufferWordsMinCount??70,this._options.maxSplitCount=this._options.maxSplitCount??3,this._options.historyEnabled=this._options.historyEnabled??!0,this._options.minSendInterval=Math.max(this._options.minSendInterval??1e3,100),this._options.sendMode=this._options.sendMode??"queue",this._options.splitCharacters=this._options.splitCharacters?.length>0?this._options.splitCharacters:["\u3002","\uFF01","\uFF1F"],this._responseRule=t.botResponseRule,this._options.multiActiveChatInConversationMode=this._options.multiActiveChatInConversationMode??"pool",this._options.multiActiveChatInConversationTips=this._options.multiActiveChatInConversationTips??(this._options.multiActiveChatInConversationMode==="pool_tips"?"\u6211\u5F53\u524D\u56DE\u590D\u5B8C\u6210\u540E\u5C31\u4F1A\u56DE\u7B54\u8FD9\u4E2A\u95EE\u9898\u{1F600}\uFF01":"\u8BF7\u7B49\u6211\u4E0A\u4E00\u4E2A\u56DE\u590D\u5B8C\u6210\u540E\u518D\u63D0\u95EE\u{1F600}\uFF01"),this._options.timeoutInSeconds=this._options.timeoutInSeconds??60,this._initAgent()}_initialized;_logger;_responseRule;_skillRules;_textEndId;_historyManagers;_sendMessagePool;_sourceMessagePool;get options(){return this._options}get name(){return this._options.instanceName}async sendMessage(e,t,o=!1,s){if(this._options.sendMode==="queue"&&!o){let n=this._sendMessagePool.size===0,c=t.options.instanceName;this._sendMessagePool.has(c)||this._sendMessagePool.set(c,[]),this._sendMessagePool.get(c).push({message:e,to:t,fromMessage:s}),n&&setTimeout(()=>{this._sendFromPool()},this._options.minSendInterval);return}if(e.type===l.AUDIO){this._logger.trace("audio message,check format");let n=e.content.file;if(this._options.checkWavAudio&&!zr(await n.asBuffer()))return this._logger.warn("\u97F3\u9891\u683C\u5F0F\u9519\u8BEF\uFF01\u505C\u6B62\u6D88\u606F\u53D1\u9001\uFF01"),"\u97F3\u9891\u683C\u5F0F\u9519\u8BEF\uFF01\u505C\u6B62\u6D88\u606F\u53D1\u9001\uFF01"}if(e.type===l.TEXT&&e.content===this._textEndId){t.afterSend(s);return}let r=[];if(e.type===l.TEXT&&this._options.splitImageFromBotText){let n=e.content,c=Be(n);if(c?.length)for(let m of c){let d={...e},h={file:b.fromPath(m,"binary",ao()+".png")};d.content=h,d.type=l.IMAGE,r.push(t.sendMessage(d,s)),this._options.removeImageAfterSplit&&(e.content=n.replace(m,"[\u56FE\u7247\u7A0D\u540E\u53D1\u9001]")),this._logger.trace("image extracted from url:"+m)}}let i=await t.sendMessage(e,s);return await Promise.allSettled(r),this._logger.debug(`message sent to ${e.toInfo[0].nickName??e.toInfo[0].userId} with channel ${t.options.instanceName}`),this._logger.trace(Ko(e,t)),i}async dispose(){for(let e of this._options.sourceInstanceNames){let t=this.app.sourceManager.getInstance(e);t&&(t.event.off(f.CHAT_MESSAGE,this.processChatMessage),t.event.off(f.SELF_SEND,this.onSelfChatMessage))}}processChatMessage;onChatMessage;onSelfChatMessage;async _applyAfterSkills(e,t,o,s,r,i){for(let n of e){let c=this.app.skillManager.getInstance(n.instanceName);if(!(c?.options.disabled||n.skillApplyOn==="source"||!be(n,t))&&(this._logger.warn("status:"+i),!(n.skillWhenReplyStatus?.length&&n.skillWhenReplyStatus!==i)&&(this._logger.warn("status checked"),c?.applyOnReply))){this._logger.trace("apply after skill:"+n.instanceName+" for message from "+t.message.senderInfo.nickName);let m=await c.applyOnReply(n.skillWhenReplyStatus==="complete"?void 0:o,s,t,r);m?.content!==void 0&&m?.messageType!==void 0&&(o=m.content,s=m.messageType)}}return{content:o,messageType:s}}async _applyBeforeSkills(e,t){for(let o of e){let s=this.app.skillManager.getInstance(o.instanceName);if(!(s?.options.disabled||o.skillApplyOn==="reply")&&s?.applyOnSource&&(this._logger.trace("apply before skill:"+o.instanceName+" for message from "+t.message.senderInfo.nickName),await s.applyOnSource(t),!t.message)){this._logger.trace("\u6280\u80FD"+s.options.instanceName+"\u53D6\u6D88\u4E86\u540E\u7EED\u6280\u80FD\u7EE7\u7EED\u6267\u884C!");break}}}async _nextQuestion(e){let t=this._sourceMessagePool.get(e);if(!t){this._logger.trace("\u5F53\u524D\u7B49\u5F85\u6267\u884C\u7684\u5BF9\u8BDD\u5747\u5DF2\u5B8C\u6210\uFF01");return}if(!t.pool.length){this._sourceMessagePool.delete(e),this._logger.debug(e+"\u7528\u6237\u7684\u6240\u6709\u6D88\u606F\u5904\u7406\u5B8C\u6210\uFF01");return}let o=t.pool.shift();this._logger.debug("\u7EE7\u7EED\u56DE\u7B54\u7B49\u5F85\u533A\u7684\u4E0B\u4E00\u4E2A\u95EE\u9898");try{await this.onChatMessage(o)}catch(s){if(this._logger.error("\u5904\u7406\u6D88\u606F\u51FA\u9519"),this._logger.error(s),process.env.LOG_LEVEL==="debug")throw s}finally{this._nextQuestion(e)}}_findRules(e,t,o){if(o){let r=[];return t.forEach(i=>{be(i,e)&&r.push(i)}),r}return[t.find(r=>be(r,e))]}_getBotMessageManager(e,t){if(this._historyManagers[e]){if(this._historyManagers[e][t])return this._historyManagers[e][t]}else this._historyManagers[e]={};let o=new jt(this._options.historyOptions??{});return this._historyManagers[e][t]=o,o}_wrapEventWithChatReply(e){return{...e,reply:p((o,s=l.TEXT,r={},i=!1)=>{let n=e.message,c={messageId:ao(),senderName:e.me?.userName,senderId:e.me?.userId,senderInfo:e.me,fromId:n.isGroupChat?n.fromId:e.me?.userId,type:s,content:o,toInfo:[n.isGroupChat?n.groupInfo:n.senderInfo],isGroupChat:n.isGroupChat,time:new Date,isSender:!0,...r};return this.sendMessage(c,e.source,i,e.message)},"reply")}}async _sendFromPool(){let e=[];for(let t of this._sendMessagePool.keys()){let o=this._sendMessagePool.get(t);if(o?.length){let s=o.shift();e.push(this.sendMessage(s.message,s.to,!0,s.fromMessage))}o.length===0&&this._sendMessagePool.delete(t)}await Promise.allSettled(e),this._sendMessagePool.size>0&&setTimeout(()=>{this._sendFromPool()},this._options.minSendInterval)}_splitWords(e,t,o){if(this._options.bufferWordsMinCount<=0||e.length<=this._options.bufferWordsMinCount||t>=o-1)return{extract:"",remaining:e};let s=e.substring(0,this._options.bufferWordsMinCount),r=e.substring(this._options.bufferWordsMinCount);if(this._options.splitCharacters[0]!=="none"){let i=1/0;for(let n of this._options.splitCharacters){let c=r.indexOf(n);c<0||(i=Math.min(c,i))}if(i===1/0)return{extract:"",remaining:e};s+=r.substring(0,i+1),r=r.substring(i+1)}return{extract:s,remaining:r}}_initAgent(){if(this._initialized){this._logger.error("current source is defined,can't reinit!");return}if(this._logger.trace("agent init"),this._initialized=!0,this._options.skillRules?.length){let e=[...this._options.skillRules];this._skillRules=e.filter(t=>t!=null&&t!==null).sort((t,o)=>(t.order??100)-(o.order??100))}else this._skillRules=[];for(let e of this._options.sourceInstanceNames){let t=this.app.sourceManager.getInstance(e);if(!t){this._logger.error(`can't find source instance of key ${e},please create in admin page first!`);continue}t.event.on(f.CHAT_MESSAGE,this.processChatMessage),t.event.on(f.SELF_SEND,this.onSelfChatMessage)}}};import{readItems as Jr}from"@directus/sdk";import Wr from"emittery";import{v4 as Xr}from"uuid";var Y=function(a){return a.APP_STARTED="APP_STARED",a.APP_RELOAD="APP_REALOD",a.APP_RESTARTED="APP_RESTARTED",a.APP_NOTIFY="APP_NOTIFY",a}({}),Ht=class extends Wr{static{p(this,"GlobalEvent")}constructor(e){super(),this._logger=y(e+"-global-trigger")}_logger;_eventNames=["APP_REALOD","APP_STARED","APP_RESTARTED","APP_NOTIFY"];get eventNames(){return[...this._eventNames]}async emit(e,t){return t=t??{},t.id=t.id??Xr(),t.time=t.time??new Date,super.emit(e,t)}registerGlobalEventNames(e){if(this._eventNames.indexOf(e)>=0){this._logger.error("\u91CD\u590D\u7684\u6D88\u606F\u540D\u79F0\u6CE8\u518C\uFF1A"+e);return}this._eventNames.push(e)}};var B=y("agent-service"),Gt=class{static{p(this,"AgentService")}_app;_options;constructor(e,t={}){this._app=e,this._options=t,this._initialized=!1,this._agents=[],this._tableNames={SOURCES:"sources",BOTS:"bots",SKILLS:"skills",AGENTS:"agents"},this._resourceCount={agents:0,bots:0,sources:0,skills:0},this._options.maxRecords=this._options.maxRecords??1e3,this._options.models=this._options.models??{},this._options.models.agents=this._options.models.agents??[],this._options.models.bots=this._options.models.bots??[],this._options.models.skills=this._options.models.skills??[],this._options.models.sources=this._options.models.sources??[]}_initialized;_agents;_tableNames;_resourceCount;get resourceCount(){return this._resourceCount}get agents(){return[...this._agents]}async init(){if(this._initialized){B.warn("agent service\u5DF2\u7ECF\u521D\u59CB\u5316\uFF0C\u8BF7\u52FF\u91CD\u590D\u8C03\u7528\uFF01");return}return this._initialized=!0,B.trace("agent service initializing..."),this._loadInstances()}getAgentByName(e){return this._agents?.find(t=>t.name===e)}async reload(){return B.trace("dispose agents,bots,skills,sources"),await this.dispose(),this._agents=[],B.trace("reinit instances"),this._loadInstances()}async _loadConfig(){let e=await this._loadTableConfig(this._tableNames.AGENTS),t=[...this._options.models.agents,...e.map(m=>({...m.options}))??[]],o=await this._loadTableConfig(this._tableNames.BOTS),s=[...this._options.models.bots,...o.map(m=>({name:m.name,options:m.options}))??[]],r=await this._loadTableConfig(this._tableNames.SKILLS),i=[...this._options.models.skills,...r.map(m=>({name:m.name,options:m.options}))??[]],n=await this._loadTableConfig(this._tableNames.SOURCES),c=[...this._options.models.sources,...n.map(m=>({name:m.name,options:m.options}))??[]];return{agents:t,bots:s,skills:i,sources:c}}async _loadTableConfig(e){if(this._app.offlineMode)return[];let t=await this._app.client.request(Jr(e,{limit:this._options.maxRecords,filter:{status:{_neq:"archived"},user_created:{_eq:this._app.me?.id}}}));return t?.length?t:(B.warn("\u6CA1\u6709\u4ECE\u5728\u7EBF"+e+"\u83B7\u53D6\u5230\u6570\u636E\uFF01"),B.warn(t),[])}async _loadInstances(){let e=await this._loadConfig(),t=[];this._loadSkills(e.skills,t),this._loadBots(e.bots,t),this._loadSources(e.sources),B.info(`${e.sources.length}\u4E2Asource\u5B9E\u4F8B\uFF0C${e.bots.length}\u4E2Abot\u5B9E\u4F8B\uFF0C${e.skills.length}\u4E2Askill\u5B9E\u4F8B\u521D\u59CB\u5316\u5B8C\u6210\uFF01`),await Promise.allSettled(t),t=[],this._loadAgents(e.agents),await Promise.allSettled(t),B.info(`${e.agents.length}\u4E2Aagent\u521D\u59CB\u5316\u5B8C\u6210\uFF01`),this._resourceCount.agents=e.agents.length,this._resourceCount.bots=e.bots.length,this._resourceCount.skills=e.skills.length,this._resourceCount.sources=e.sources.length}_loadSources(e){let t=[];for(let o of e){o.options.instanceName||(B.trace("\u81EA\u52A8\u751F\u6210"+o.name+"\u7684\u5B9E\u4F8BID"),o.options.instanceName=ue(10));let s=this._app.sourceManager.createInstance(o.name,o.options);if(!s){B.info("\u6CA1\u6709\u627E\u5230\u540D\u4E3A"+o.name+"\u7684\u6D88\u606F\u6E90");continue}B.trace("source "+s.options.instanceName+"created");let r=o.options.instanceName,i=s.actions;i&&i.forEach(n=>{n.type==="api"?this._app.registerRoutes(r,n):n.type==="ws"?this._app.registerWSHandler(r,n):B.warn("\u4E0D\u80FD\u8BC6\u522B\u7684action\u7C7B\u578B\uFF1A"+n.type)}),t.push(s)}this._app.running?t.forEach(o=>o.login()):this._app.globalEvent.once(Y.APP_STARTED).then(()=>{t.forEach(o=>o.login())})}_loadBots(e,t){e.forEach(o=>{B.trace(o),o.options.instanceName||(B.trace("\u81EA\u52A8\u751F\u6210"+o.name+"\u7684\u5B9E\u4F8BID"),o.options.instanceName=ue(10));let s=this._app.botManager.createInstance(o.name,o.options);if(!s){B.info("load bot failed:"+o.options.instanceName);return}B.trace("bot "+o.options.instanceName+" created"),t.push(s.init())})}_loadSkills(e,t){e.forEach(o=>{B.trace(o),o.options.instanceName||(B.trace("\u81EA\u52A8\u751F\u6210"+o.name+"\u7684\u5B9E\u4F8BID"),o.options.instanceName=ue(10));let s=this._app.skillManager.createInstance(o.name,o.options);if(!s){B.info("load skill failed:"+o.options.instanceName);return}B.trace("skill "+s.options.instanceName+" created"),t.push(s.init())})}_loadAgents(e){B.trace(e),this._agents=e.map(t=>(t.instanceName||(B.trace("\u81EA\u52A8\u751F\u6210agent\u7684\u5B9E\u4F8BID"),t.instanceName=ue(10)),new Ae(this._app,t)))}async dispose(){await he(this._agents),await this._app.botManager.clearInstances(),await this._app.skillManager.clearInstances(),await this._app.sourceManager.clearInstances()}};import Vr from"emittery";var A=class extends Vr{static{p(this,"BasicBot")}_options;static params={name:"basic bot",optionsSchema:{type:"formily",formily:{type:"object",properties:{...$,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740"},"x-validator":{format:"url"},"x-decorator-props":{tooltip:"\u4E00\u822C\u5728\u5E94\u7528\u53D1\u5E03\u9875\u9762\u6216\u8005API\u914D\u7F6E\u9875\u9762\u53EF\u4EE5\u770B\u5230\u3002"}},apiKey:{type:"string",title:"\u670D\u52A1\u5BC6\u94A5","x-index":2,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5BC6\u94A5"},"x-validator":{required:!0,message:"\u670D\u52A1\u5BC6\u94A5\u4E0D\u80FD\u4E3A\u7A7A"},"x-decorator-props":{tooltip:"\u4E00\u822C\u5728\u5E94\u7528\u53D1\u5E03\u9875\u9762\u6216\u8005API\u914D\u7F6E\u9875\u9762\u53EF\u4EE5\u770B\u5230\u3002"}},onlyText:{type:"boolean",title:"\u662F\u5426\u4E3A\u7EAF\u6587\u672C\u6A21\u578B","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u5982\u679C\u4E0D\u652F\u6301\u591A\u6A21\u6001\uFF0C\u8BBE\u7F6E\u4E3Atrue\uFF0C\u5426\u5219\u8BBE\u7F6E\u4E3Afalse\uFF0C\u9ED8\u8BA4\u662Ffalse\u3002"},default:!1},historyExipresInSeconds:{type:"number",title:"\u540E\u7AEF\u7BA1\u7406\u7684\u5386\u53F2\u6D88\u606F\u8FC7\u671F\u65F6\u95F4\uFF08\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5386\u53F2\u6D88\u606F\u8FC7\u671F\u65F6\u95F4\uFF08\u79D2\uFF09"},"x-decorator-props":{min:60,tooltip:"\u5F53\u7531\u540E\u7AEF\u7BA1\u7406\u5386\u53F2\u6D88\u606F\u65F6\u5019\uFF08\u975E\u81EA\u5EFA\u5BA2\u6237\u7AEF\u7BA1\u7406\uFF09\uFF0C\u591A\u4E45\u540E\u91CD\u65B0\u5F00\u542F\u65B0\u7684\u5BF9\u8BDDsession\u3002\u9ED8\u8BA41800\u79D2\uFF0C\u537330\u5206\u949F\u3002\u5F53\u4F7F\u7528\u81EA\u5EFA\u540E\u7AEF\u5E26\u7684\u5386\u53F2\u6D88\u606F\u65F6\uFF0C\u8FC7\u671F\u76F8\u5173\u9009\u9879\u5728agent\u4E2D\u914D\u7F6E\u3002"},default:1800},attachSendMode:{type:"string",enum:["now","later"],title:"\u9644\u4EF6\u53D1\u9001\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u9644\u4EF6\u53D1\u9001\u6A21\u5F0F"},"x-decorator-props":{tooltip:"\u6536\u5230\u56FE\u7247\u9644\u4EF6\u65F6\uFF0C\u5982\u679C\u8981\u7B49\u5F85\u7528\u6237\u63D0\u95EE\u518D\u4E00\u8D77\u53D1\u5F80\u540E\u7AEF\uFF08\u5EFA\u8BAE\uFF09\uFF0C\u5219\u8BBE\u7F6E\u4E3Alater\uFF0C\u5426\u5219\u8BBE\u7F6E\u4E3Anow\u3002\u9ED8\u8BA4later\u3002"},default:"later"},maxAttachCount:{type:"number",title:"\u6700\u5927\u9644\u4EF6\u6570\u91CF","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:1,placeholder:"\u8BF7\u8F93\u5165\u6700\u5927\u9644\u4EF6\u6570\u91CF"},"x-decorator-props":{tooltip:"\u9ED8\u8BA43\u5F20\uFF0C\u540Cdify\u8BBE\u7F6E"},default:3},subscribeWelcome:{type:"string",title:"\u8BA2\u9605\u6B22\u8FCE\u8BED","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6B22\u8FCE\u8BED\uFF08\u4E3B\u8981\u7528\u4E8E\u516C\u4F17\u53F7\u8BA2\u9605\u540E\u7684\u81EA\u52A8\u56DE\u590D\uFF09"},"x-decorator-props":{tooltip:`\u5F53\u6536\u5230\u8BA2\u9605\u6D88\u606F\u65F6\uFF0C\u8981\u5BF9\u7528\u6237\u8BF4\u7684\u6B22\u8FCE\u8BCD\uFF0C\u5982\u679C\u6B22\u8FCE\u8BCD\u4EE5\u53CC\u4E0B\u5212\u7EBF__\u5F00\u5934\uFF0C\u8868\u793A\u4F7F\u7528\u56FA\u5B9A\u8BCD\u8BED\uFF0C\u5982 __\u6B22\u8FCE\u5173\u6CE8\uFF01\uFF0C\u5426\u5219\u5C06\u4F7F\u7528\u914D\u7F6E\u7684\u8BCD\u4F5C\u4E3A\u63D0\u793A\u8BCD\u8BA9\u540E\u7AEF\u7ED9\u51FA\u6B22\u8FCE\u8BCD
13
13
  \u53EF\u4EE5\u4F7F\u7528\u8BE5\u529F\u80FD\u63D0\u4F9B\u5BF9\u6A21\u578B\u80FD\u529B\u7684\u4ECB\u7ECD\u3002`},default:"\u8BF7\u5BF9\u7528\u6237\u7684\u4F7F\u7528\u8868\u793A\u6B22\u8FCE\uFF0C\u5E76\u4E14\u7B80\u5355\u7684\u4ECB\u7ECD\u4F60\u81EA\u5DF1\uFF0C\u91CD\u70B9\u662F\u4F60\u7684\u80FD\u529B\u3002"}}}}};constructor(e){super(),this._options=e,this.commandText={attach:"_command_attach",position:"_command_position",article:"_command_article",subscribe:"_command_subscribe"},this.chatAttachCache={},this.logger=y(this._options.instanceName),this._options.historyExipresInSeconds=this._options.historyExipresInSeconds??30*60,this._options.attachSendMode=this._options.attachSendMode??"later",this._options.maxAttachCount=this._options.maxAttachCount??3,this._options.subscribeWelcome=this._options.subscribeWelcome??"\u8BF7\u5BF9\u7528\u6237\u7684\u4F7F\u7528\u8868\u793A\u6B22\u8FCE\uFF0C\u5E76\u4E14\u7B80\u5355\u7684\u4ECB\u7ECD\u4F60\u81EA\u5DF1\uFF0C\u91CD\u70B9\u662F\u4F60\u7684\u80FD\u529B\u3002",this.chatIdCache=Bt(this._options.instanceName),this._options.onlyText=this._options.onlyText??!1}commandText;chatIdCache;chatAttachCache;logger;get options(){return this._options}checkCommand(e,t,o){return e===this.commandText.attach?(this.chatAttachCache[t]||this.logger.warn("\u6709\u6536\u5230\u56FE\u7247\u6D88\u606F\uFF0C\u4F46\u662F\u6CA1\u6709\u7F13\u5B58\u6210\u529F\uFF01"),!1):e===this.commandText.position||e===this.commandText.article?!1:e===this.commandText.subscribe?(o.reply(this._options.subscribeWelcome.slice(2),l.TEXT),!1):!0}async getLastInfo(e){let t=await this.chatIdCache.get(e);if(!t&&this.supportConversationOnline){let o=await this.getLatestConversationId(e);if(o?.length&&this._options.historyExipresInSeconds>0){let s=await this.getLatestChatTime(o,e);if(this.logger.debug("server time hours "+new Date().getHours()),s){let r=(s+this._options.historyExipresInSeconds)*1e3;new Date().getTime()>r?(await this.deleteConversation(o,e),this.logger.debug("\u65E7\u7684\u4F1A\u8BDD\u8FC7\u671F\uFF0C\u5220\u9664")):t={conversationId:o,timeInSeconds:s}}else t={conversationId:o,timeInSeconds:void 0}}else t={conversationId:o,timeInSeconds:void 0}}else if(this._options.historyExipresInSeconds>0&&t?.timeInSeconds){let o=(t.timeInSeconds+this._options.historyExipresInSeconds)*1e3;new Date().getTime()>o&&(this.supportConversationOnline&&await this.deleteConversation(t.conversationId,e),await this.chatIdCache.delete(e),t=void 0,this.logger.debug("\u65E7\u7684\u4F1A\u8BDD\u7F13\u5B58\u8FC7\u671F\uFF0C\u5220\u9664"))}return t}async clearHistoryRequested(e){try{let t=e.source.options.instanceName+"-"+e.message.fromId;delete this.chatAttachCache[t];let o=(await this.chatIdCache.get(t))?.conversationId;if(o?await this.chatIdCache.delete(t):o=await this.getLatestConversationId(t),!o){this.logger.debug("\u6CA1\u6709\u5386\u53F2\u6D88\u606F\u8981\u5220\u9664\uFF01");return}await this.deleteConversation(o,t)}catch(t){return String(t)}}async prepareMessage(e){let t=e.source.options.instanceName+"-"+e.message.fromId;try{let o=e.message,s=[],r;switch(o.type){case l.RECALL:case l.FRIEND_REQUEST:case l.SYSTEM:case l.CUSTOM:case l.PHONE:return;case l.TEXT:r=o.content;break;case l.REF:{let n=o.content;if(r=n.text,n.refMessage?.type===l.TEXT||n.refMessage?.type===l.REF||n.refMessage?.type===l.AUDIO){let c=typeof n.refMessage.content=="string"?n.refMessage.content:n.refMessage.content.text;c?.length&&(r=`\u6839\u636E\u4E0A\u4E0B\u6587\u5185\u5BB9\uFF0C\u5E76\u91CD\u70B9\u9488\u5BF9\u201C${c}\u201D\u8FD9\u6BB5\u8BDD\u56DE\u7B54\u8FD9\u4E2A\u95EE\u9898\uFF1A${r}`)}else if(n.refMessage?.type===l.POSITION){let c=no(n.refMessage.content);c.length&&(r=`\u6839\u636E\u4EE5\u4E0B\u4F4D\u7F6E\u4FE1\u606F\u3010${c}\u3011\u9488\u5BF9\u8BE5\u95EE\u9898\u8FDB\u884C\u56DE\u590D\uFF1A${r}`)}else n.refMessage?.type===l.ARTICLE?r=`\u6839\u636E\u8BE5\u6587\u7AE0\u7684\u4FE1\u606F\uFF08${$o(n.refMessage.content)}\uFF09,\u6293\u53D6\u5176\u8BE6\u7EC6\u5185\u5BB9\uFF0C\u7136\u540E\u56DE\u7B54\u4EE5\u4E0B\u95EE\u9898\uFF08\u6CE8\u610F\u5982\u679C\u662F\u603B\u7ED3\u5185\u5BB9\uFF0C\u5219\u5148\u6982\u8FF0\uFF0C\u518D\u5206\u51E0\u4E2A\u91CD\u70B9\u8BE6\u7EC6\u63CF\u8FF0\uFF09\uFF1A${r}`:r="\u8BF7\u56DE\u590D\u4E00\u6BB5\u8BDD\u53CB\u597D\u7684\u8868\u8FBE\u4F60\u6682\u65F6\u8FD8\u4E0D\u652F\u6301\u8FD9\u4E2A\u529F\u80FD\uFF01";this.logger.debug("ref message"),this.logger.debug(r);break}case l.AUDIO:{let n=e.message.content;n.text?.length?r=n.text:this.logger.info("\u5F53\u524D\u8BED\u97F3\u6CA1\u6709\u88AB\u8F6C\u6362\u4E3A\u6587\u672C\uFF0C\u65E0\u6CD5\u53D1\u9001\u5230dify\u540E\u7AEF\uFF01\u8BF7\u8003\u8651\u4F7F\u7528skill\u8FDB\u884C\u8F6C\u6362\uFF01");break}case l.POSITION:{if(e.message.isGroupChat)r=this.commandText.position;else{let n=no(e.message.content);n.length&&(r=`\u8FD9\u662F\u4E00\u4E2A\u4F4D\u7F6E\u4FE1\u606F\uFF1A\u3010${n}\u3011\uFF0C\u6211\u7A0D\u540E\u53EF\u80FD\u4F1A\u95EE\u4F60\u5173\u4E8E\u8FD9\u4E2A\u4F4D\u7F6E\u7684\u95EE\u9898\u3002`)}break}case l.PAT:{let n=e.message.content;e.message.isGroupChat?r="\u6709\u4E2A\u4EBA\u8F7B\u8F7B\u7684\u62CD\u4E86\u62CD\u4F60\uFF0C\u7ED9\u4E2A\u53CB\u597D\u7684\u56DE\u590D\u5427\uFF01":r=`\u6709\u4E2A\u4EBA\u8F7B\u8F7B\u5730\u62CD\u4E86\u62CD\u4F60\uFF0C\u5177\u4F53\u6D88\u606F\u5185\u5BB9\u662F\uFF1A\u3010${n.text}\u3011\u3002\u6765\u4E00\u4E2A\u53CB\u597D\u7684\u56DE\u590D\u5427\uFF01`;break}case l.ARTICLE:{if(e.message.isGroupChat)r=this.commandText.article;else{let n=e.message.content.url;n.length&&(r=`\u8FD9\u662F\u4E00\u4E2A\u7F51\u5740\uFF1A${n}\uFF0C\u8BF7\u7B49\u5F85\u6211\u7684\u63D0\u95EE\uFF08\u5982\u679C\u540E\u7EED\u8981\u6C42\u603B\u7ED3\uFF0C\u5219\u5148\u6982\u62EC\u6574\u4F53\u63CF\u8FF0\uFF0C\u7136\u540E\u52063-5\u70B9\u5C55\u5F00\u63CF\u8FF0\u91CD\u70B9\u5185\u5BB9\uFF0C\u53EF\u4EE5\u4F7F\u7528\u4E00\u4E9B\u8868\u60C5\u7B26\u53F7\u6765\u589E\u5F3A\u63CF\u8FF0\u7684\u8DA3\u5473\u6027\uFF0C\u4E0D\u7528\u8BF4\u4F60\u77E5\u9053\u8FD9\u4E2A\u8981\u6C42\uFF09\u3002`)}break}case l.UNSUBSCRIBE:{this.logger.debug("\u7528\u6237\u53D6\u6D88\u8BA2\u9605\uFF0C\u65E0\u9700\u56DE\u590D\uFF01");break}case l.SUBSCRIBE:{this._options.subscribeWelcome.startsWith("__")?r=this.commandText.subscribe:r=this._options.subscribeWelcome;break}}if(!this._options.onlyText)switch(o.type){case l.RICH_TEXT:{let n=o.content;r="";for(let c of n.content)c.type==="text"?r+=c.data+`
14
- `:c.type==="image"||c.type==="file"?s.push({file:c.data.file,messageId:e.message.messageId,type:c.type}):(this.logger.warn("\u65E0\u6CD5\u8BC6\u522B\u7684rich text content\u7C7B\u578B"),this.logger.warn(c));break}case l.REF:{let n=o.content;if(n.refMessage?.type===l.IMAGE||n.refMessage?.type===l.EMOTION||n.refMessage?.type===l.FILE||n.refMessage?.type===l.VIDEO){r=n.text;let c=n.refMessage.content,m=await e.source.me();if(!this.chatAttachCache[t]?.some(h=>h.messageId===n.refMessage.messageId)||n.refMessage.senderId===m.userId&&c?.file){this.logger.info("update file now");let h="image";n.refMessage?.type===l.VIDEO?h="video":n.refMessage?.type===l.FILE&&(h="file"),s.push({file:c.file,messageId:n.refMessage.messageId,type:h})}else n.refMessage?.messageId&&(r=`\u6309\u6B64\u8981\u6C42\u5206\u6790\u7F16\u53F7\u4E3A${n.refMessage.messageId}\u7684\u9644\u4EF6\uFF08\u56DE\u590D\u4E2D\u4E0D\u8981\u51FA\u73B0\u7F16\u53F7\uFF09\uFF1A${r}`);this.logger.debug("ref mutil model message"),this.logger.debug(r)}break}case l.FILE:case l.VIDEO:case l.IMAGE:case l.EMOTION:{let n={file:o.content.file,messageId:e.message.messageId,type:"image"};o.type===l.VIDEO?n.type="video":o.type===l.FILE&&(n.type="file"),this._options.attachSendMode==="now"?s.push(n):(this.chatAttachCache[t]=this.chatAttachCache[t]??[],this.chatAttachCache[t].push(n),this.chatAttachCache[t].length>this._options.maxAttachCount&&(this.chatAttachCache[t].shift(),this.logger.debug("\u7F13\u5B58\u7684\u5185\u5BB9\u6570\u91CF\u5927\u4E8E\u4E86\u8BBE\u7F6E\u7684"+this._options.maxAttachCount+"\u4EFD\uFF0C\u65E7\u7684\u88AB\u79FB\u9664\uFF01")),r=this.commandText.attach),this.logger.debug(r);break}}if(!r){this.logger.debug("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+o.type);return}if(r.startsWith("_command_"))return{forSend:{},forHistory:void 0,chatId:t,plainText:r};let i=[...s??[]];if(this.chatAttachCache[t]?.length&&i.push(...this.chatAttachCache[t]),s.length){let n="\u8FD9\u51E0\u4E2A\u6587\u4EF6\u7684\u7F16\u53F7\u5206\u522B\u662F";for(let c of i)n+=c.messageId+"\uFF0C";r=n+`\u540E\u7EED\u5982\u679C\u6211\u63D0\u5230\u8FD9\u4E9B\u7F16\u53F7\uFF0C\u4E5F\u9700\u8981\u9488\u5BF9\u6307\u5B9A\u7F16\u53F7\u7684\u6587\u4EF6\u8FDB\u884C\u56DE\u7B54\uFF0C\u5982\u679C\u540E\u7EED\u63D0\u5230\u5206\u6790\u6587\u4EF6\uFF0C\u4E00\u822C\u6307\u5206\u6790\u6700\u8FD1\u4E00\u6761\u6D88\u606F\u7684\u6587\u4EF6\uFF0C\u6CE8\u610F\u6240\u6709\u7684\u56DE\u7B54\u90FD\u4E0D\u8981\u51FA\u73B0\u7F16\u53F7\u4FE1\u606F\uFF0C\u53EF\u4EE5\u7528\u7B2C\u51E0\u4E2A\u6587\u4EF6\u6765\u4EE3\u66FF\u3002\u73B0\u5728\u8BF7\u6839\u636E\u5982\u4E0B\u63D0\u95EE\u5BF9\u6587\u4EF6\u8FDB\u884C\u5206\u6790\u5E76\u56DE\u7B54\uFF1A${r}\uFF08\u76F4\u63A5\u56DE\u7B54\u95EE\u9898\uFF0C\u4E0D\u8981\u8BF4\u4F60\u77E5\u9053\u8FD9\u4E2A\u89C4\u5219\u4E86\uFF09`}return s=i,this.generateReadyMessage(t,r,s,e)}catch(o){throw delete this.chatAttachCache[t],o}}async getResponse(e,t,o,s){let r=o.forSend,i=o.chatId;if(!this.checkCommand(o.plainText,i,e))return;let n;s?.length&&(n=s.map(d=>d.data)),this.chatAttachCache[i]=[];let c=await this.getLastInfo(i),m=await this.sendMessageBody(r,n,{onReasoning:p(d=>{t.onReasoning?.(d)},"onReasoning"),onContent:p((d,h)=>{t.onContent(d,h)},"onContent"),onCompleted:p((d,h)=>{this.supportConversationOnline&&this.chatIdCache.set(i,{conversationId:d,timeInSeconds:h})},"onCompleted"),onError:p(d=>{throw d},"onError")},c,e);return this.logger.debug(this._options.instanceName+" reply completed"),m}};var po=y("instance-manager"),re=class{static{p(this,"InstanceBaseManager")}options;_instances;_creators;_params;constructor(e){this.options=e,this._instances={},this._creators={},this._params={},this.options=this.options??{},this.options.cacheInstance=this.options.cacheInstance??!0}registerInstanceCreator(e,t){this._creators[t.name]&&po.warn(`\u540D\u4E3A${t.name}\u7684bot\u5DF2\u7ECF\u88AB\u6CE8\u518C\uFF0C\u5C06\u88AB\u66F4\u65B0\u4E3A\u6700\u65B0\u503C\uFF01`),this._creators[t.name]=e,this._params[t.name]=t}getParams(e){return this._params[e]}getAllParams(){return this._params}getAllParamsArray(){return Object.values(this._params)}getInstance(e){return this._instances[e]}getInstances(e){return e?.length?Object.values(this._instances).filter(t=>t.params.name===e):Object.values(this._instances)}createInstance(e,t){let o=t.instanceName;if(!o?.length){po.error("instanceKey\u672A\u8BBE\u7F6E\uFF1A"+e+"\uFF0C\u65E0\u6CD5\u521B\u5EFA\u5B9E\u4F8B\uFF01");return}if(this.options.cacheInstance&&this._instances[o])return this._instances[o];if(typeof this._creators[e]!="function"){po.error("\u672A\u80FD\u627E\u5230\u540D\u4E3A"+e+"\u7684\u5B9E\u4F8B\u6784\u5EFA\u5668\uFF01");return}let s=this._creators[e](t);return this.options.cacheInstance&&(this._instances[o]=s),s}async clearInstances(){await de(Object.values(this._instances)),this._instances={}}};var Kt=class extends re{static{p(this,"BotManager")}async runBot(e,t,o,s,r){let i=this.getInstance(e);return i?Vo(i,t,o,s,r):{text:`\u540E\u7AEF\u6A21\u578B${e}\u4E0D\u5B58\u5728\uFF01`}}};import{RoleType as ts}from"@coze/api";import{existsSync as Qr}from"fs";import{v4 as Yr}from"uuid";import Zr from"jsonwebtoken";import{ChatEventType as Ue,CozeAPI as es}from"@coze/api";var co=y("coze-service"),zt=class{static{p(this,"CozeService")}_options;constructor(e){this._options=e,this._options.apiBase=this._options.apiBase??"https://api.coze.cn",this._options.apiBase.endsWith("/")&&(this._options.apiBase=this._options.apiBase.slice(0,this._options.apiBase.length-1))}_token;_client;get client(){return this._client}async _loadToken(){let e=Z(this._options.privateKeyPath),t;Qr(e)?t=await b.fromPath(e,"text").asText():(co.warn("coze\u79C1\u94A5\u8DEF\u5F84\u4E0D\u5B58\u5728\uFF0C\u5C1D\u8BD5\u5C06\u5185\u5BB9\u76F4\u63A5\u4F5C\u4E3A\u79C1\u94A5\u4F7F\u7528\u3002"),t=e);let o=parseInt(new Date().getTime()/1e3),s={iss:Z(this._options.appId),aud:this._options.apiBase.replace("https://","").replace("http://",""),iat:o,exp:o+86399,jti:Yr()},r={alg:"RS256",typ:"JWT",kid:Z(this._options.publicKey)},i=Zr.sign(s,t,{algorithm:"RS256",header:r}),n=await(await fetch(this._options.apiBase+"/api/permission/oauth2/token",{method:"post",headers:{"content-type":"application/json",authorization:`Bearer ${i}`},body:JSON.stringify({duration_seconds:86399,grant_type:"urn:ietf:params:oauth:grant-type:jwt-bearer"})})).json();this._token=n.access_token;let c=n.expires_in;co.trace("\u6210\u529F\u83B7\u53D6coze\u5E94\u7528token\uFF1A"+this._token),this._client=new es({baseURL:this._options.apiBase,token:this._token});let m=(c-o)*1e3;setTimeout(()=>{this._loadToken()},m/1.2)}async init(){await this._loadToken()}async conversations(e){return await this._get("/v1/conversations",{bot_id:e})}async createConversation(e,t){let o=await this._post("/v1/conversation/create",{messages:e,meta_data:t});return co.debug(o),o}async streamChat(e,t){let o=await this._client.chat.stream(e),s;for await(let r of o)switch(r.event){case Ue.CONVERSATION_CHAT_CREATED:{t.onStart?.(r.data);break}case Ue.CONVERSATION_MESSAGE_DELTA:{t.onReply(r.data.content,r);break}case Ue.CONVERSATION_MESSAGE_COMPLETED:{s||(s=r.data.content,t.onReplyCompleted?.(s,r));break}case Ue.CONVERSATION_CHAT_COMPLETED:{t.onCompleted?.(s,r.data);break}case Ue.CONVERSATION_CHAT_FAILED:throw new Error(JSON.stringify(r.data));default:t.others?.(r);break}}async _post(e,t,o){return o&&(e=e+"?"+new URLSearchParams(o).toString()),(await fetch(this._options.apiBase+e,{method:"post",headers:{"content-type":"application/json",authorization:`Bearer ${this._token}`},body:JSON.stringify(t)})).json()}async _get(e,t){return t&&(e=e+"?"+new URLSearchParams(t).toString()),(await fetch(this._options.apiBase+e,{method:"get",headers:{authorization:`Bearer ${this._token}`}})).json()}};var De=class a extends A{static{p(this,"CozeBot")}_options;static params={name:"coze-bot",desc:"\u5B57\u8282\u6263\u5B50\u667A\u80FD\u4F53",needHistoryMessage:!1,optionsSchema:{type:"formily",formily:{type:"object",properties:{...A.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u9ED8\u8BA4\u4F7F\u7528https://api.coze.cn"},"x-validator":{format:"url"}},appId:{type:"string",title:"Coze\u5E73\u53F0\u5E94\u7528ID","x-index":30,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165Coze\u5E73\u53F0\u4E0A\u7684\u5E94\u7528ID"},"x-decorator-props":{tooltip:"\u5E94\u7528\u53D1\u5E03\u9875\u9762\uFF0C\u53D1\u5E03\u4E3AAPI\uFF0C\u4ECEOAuth\u9009\u9879\u5361\u4E2D\u83B7\u5F97"},required:!0},botId:{type:"string",title:"Coze\u5E73\u53F0\u7684BotID","x-index":35,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165Coze\u5E73\u53F0\u4E0A\u7684BotID"},"x-decorator-props":{tooltip:"\u5E94\u7528\u7F16\u8F91\u9875\u9762\uFF0C\u6D4F\u89C8\u5668\u5730\u5740bot/xxx\uFF0Cxxx\u5C31\u662FbotId\u3002"},required:!0},apiKey:{type:"string",title:"\u5E94\u7528\u516C\u94A5","x-index":40,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u516C\u94A5"},"x-decorator-props":{tooltip:"\u5E94\u7528\u53D1\u5E03\u9875\u9762\uFF0C\u53D1\u5E03\u4E3AAPI\uFF0C\u521B\u5EFA\u65B0\u7684\u5E94\u7528\u540E\u53EF\u4EE5\u83B7\u5F97"},required:!0},privateKey:{type:"string",title:"\u5E94\u7528\u79C1\u94A5","x-index":50,"x-decorator":"FormItem","x-component":"Input.TextArea","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u79C1\u94A5",rows:4},"x-decorator-props":{tooltip:"\u5E94\u7528\u53D1\u5E03\u9875\u9762\uFF0C\u53D1\u5E03\u4E3AAPI\uFF0C\u521B\u5EFA\u65B0\u7684\u5E94\u7528\u540E\u53EF\u4EE5\u83B7\u5F97\uFF0C\u76F4\u63A5\u586B\u5165pem\u6587\u4EF6\u4E2D\u7684\u6240\u6709\u5185\u5BB9\u5373\u53EF"},required:!0},preferLocalAttach:{type:"boolean",title:"\u662F\u5426\u4F7F\u7528\u672C\u5730\u56FE\u7247\u5730\u5740\uFF1F","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},default:!1,"x-decorator-props":{tooltip:"\u662F\u5426\u4F18\u5148\u4F7F\u7528\u672C\u5730\u6587\u4EF6\uFF0C\u800C\u4E0D\u662F\u5C06\u6587\u4EF6\u4E0A\u4F20\u5230dify\u670D\u52A1\u5668\uFF0C\u9ED8\u8BA4false\u3002\u5982\u679C\u4F18\u5148\u4F7F\u7528\u672C\u5730\u6587\u4EF6\uFF0C\u67D0\u4E9B\u5E73\u53F0\u53EF\u80FD\u65E0\u6CD5\u540E\u7EED\u8FDB\u884C\u8FFD\u95EE\u3002"}},customVars:{type:"object",title:"\u81EA\u5B9A\u4E49\u53D8\u91CF","x-decorator":"FormItem","x-component":"Code","x-component-props":{},"x-decorator-props":{tooltip:"\u81EA\u5B9A\u4E49\u53D8\u91CF\uFF0C\u53EF\u4EE5\u8F93\u5165JSON\u683C\u5F0F\u7684\u6570\u636E\uFF0C\u5BF9\u5E94dify\u4E2D\u7684\u53D8\u91CF\u3002"}}}}}};constructor(e){super(e),this._options=e}_service;async init(){let e=new zt({privateKeyPath:this._options.privateKey,publicKey:this._options.apiKey,appId:this._options.appId,apiBase:this._options.apiBase});await e.init(),this._service=e}get options(){return this._options}get params(){return a.params}get supportConversationOnline(){return!0}async _loadFileInfo(e,t){let o;if(_.httpUrl&&this._options.preferLocalAttach)o={file_url:await e.asUrl(),type:t};else{let s=await this._service.client.files.upload({file:await e.asReadStream()});if(s)o={file_id:s.id,type:t};else return}return o}async generateReadyMessage(e,t,o){let s={role:ts.User,type:"question",content_type:"text"},r=[],i={bot_id:this._options.botId,user_id:e,auto_save_history:!0,additional_messages:[s],custom_variables:this._options.customVars};if(o.length){for(let n of o){if(n.type!=="image"&&n.type!=="file")continue;let c=await this._loadFileInfo(n.file,n.type);r.push(c)}t.length&&(r.push({type:"text",text:t}),t=JSON.stringify(r)),s.content_type="object_string"}return s.content=t,{forSend:i,chatId:e,plainText:t}}async getLatestChatTime(){}async getLatestConversationId(){}async deleteConversation(){}async sendMessageBody(e,t,o,s){s?.conversationId?.length&&(e.conversation_id=s.conversationId),await this._service.streamChat(e,{onReply:p(r=>{o.onContent(r,l.TEXT)},"onReply"),onCompleted:p((r,i)=>{o.onCompleted(i.conversation_id,i.completed_at)},"onCompleted")})}};import os from"axios";import rs from"form-data";var ss=1e5,Zo={json:"application/json",stream:"text/event-stream",form:"application/x-www-form-urlencoded; charset=UTF-8",download:"application/octet-stream"};function ns(a){return a.replace(/\\u[0-9a-f]{4}/g,(e,t)=>String.fromCharCode(parseInt(t,16)))}p(ns,"unicodeToChar");var Wt=class{static{p(this,"DifyService")}_options;constructor(e){this._options=e,this._baseOptions={method:"GET",mode:"cors",headers:new Headers({"Content-Type":Zo.json}),redirect:"follow"},this._handleStream=async(o,s,r,i,n,c,m,d,h,u,g,w,x,v,R,ce)=>{if(!o.ok)throw new Error("Network response was not ok");let X=o.body?.getReader(),F=new TextDecoder("utf-8"),P="",I,J=!0;async function te(){let C=!1;return X?.read().then(ae=>{if(ae.done){r&&r();return}P+=F.decode(ae.value,{stream:!0});let Oe=P.split(`
15
- `);try{Oe.forEach(ne=>{ne.startsWith("data: ")&&(ne=ne.substring(6));try{I=JSON.parse(ne)}catch{s("",J,{conversationId:I?.conversation_id,messageId:I?.message_id,sourceBuffer:I});return}if(I.status===400||!I.event){s("",!1,{conversationId:void 0,messageId:"",errorMessage:I?.message,errorCode:I?.code,sourceBuffer:I}),C=!0,r?.(!0);return}I.event==="message"||I.event==="agent_message"?(s(ns(I.answer),J,{conversationId:I.conversation_id,taskId:I.task_id,messageId:I.id,sourceBuffer:I}),J=!1):I.event==="agent_thought"?i?.(I):I.event==="message_file"?m?.(I):I.event==="message_end"?n?.(I):I.event==="message_replace"?c?.(I):I.event==="workflow_started"?d?.(I):I.event==="workflow_finished"?h?.(I):I.event==="node_started"?u?.(I):I.event==="node_finished"?g?.(I):I.event==="iteration_started"?w?.(I):I.event==="iteration_next"?x?.(I):I.event==="iteration_completed"?v?.(I):I.event==="text_chunk"?R?.(I):I.event==="text_replace"&&ce?.(I)}),P=Oe[Oe.length-1]}catch(ne){s("",!1,{conversationId:void 0,messageId:"",errorMessage:`${ne}`,sourceBuffer:I}),C=!0,r?.(!0);return}if(!C)return te()})}return p(te,"read"),te()},this._baseFetch=(o,s,{needAllResponseContent:r})=>{let i=Object.assign({},this._baseOptions,s),c=`${this._apiUrl}${o.startsWith("/")?o:`/${o}`}`,{params:m,body:d}=i;if(m=m??{},m){let h=[];Object.keys(m).forEach(u=>h.push(`${u}=${encodeURIComponent(m[u])}`)),c.search(/\?/)===-1?c+=`?${h.join("&")}`:c+=`&${h.join("&")}`,delete i.params}return d&&(i.body=JSON.stringify(d)),Promise.race([new Promise((h,u)=>{setTimeout(()=>{u(new Error("request timeout"))},ss)}),new Promise((h,u)=>{globalThis.fetch(c,i).then(g=>{let w=g.clone();if(!/^(2|3)\d{2}$/.test(g.status)){try{let v=g.json();switch(g.status){case 401:{this._options.onError?.("Invalid token");return}default:new Promise(()=>{v.then(R=>{this._options.onError?.(R.message)})})}}catch(v){this._options.onError?.(String(v))}return Promise.reject(w)}if(g.status===204){h({result:"success"});return}let x=i.headers.get("Content-type")===Zo.download?g.blob():g.json();h(r?w:x)}).catch(g=>{this._options.onError?.(String(g)),u(g)})})])},this._upload=async o=>{let n={...{method:"POST",url:`${`${this._apiUrl}/files/upload`}`,data:{}},...o},c=n.data;c.append("user",o.user),this.options.appKey&&(n.headers=n.headers??{},n.headers.Authorization=`Bearer ${this.options.appKey}`),n.headers={...c.getHeaders(),...n.headers};let m=await os({method:n.method,url:n.url,headers:n.headers,data:n.data,responseType:"json",withCredentials:!0,onUploadProgress:n.onprogress});if(m.status===201)return m.data;throw new Error(`Request failed with status ${m.status}`)},this._ssePost=async(o,s,{onData:r,onCompleted:i,onThought:n,onFile:c,onMessageEnd:m,onMessageReplace:d,onWorkflowStarted:h,onWorkflowFinished:u,onNodeStarted:g,onNodeFinished:w,onError:x,onIterationStart:v,onIterationNext:R,onIterationFinish:ce,onTextChunk:X,onTextReplace:F})=>{let P=Object.assign({},this._baseOptions,{method:"POST"},s),J=`${this._apiUrl}${o.startsWith("/")?o:`/${o}`}`,{body:te}=P;return te&&(P.body=JSON.stringify(te)),P.credentials="omit",fetch(J,P).then(C=>{if(!/^(2|3)\d{2}$/.test(C.status)){new Promise(()=>{C.json().then(ae=>{this._options.onError?.(ae.message||"Server Error")})}),x?.("Server Error");return}return this._handleStream(C,(ae,Oe,ne)=>{if(ne.errorMessage){this._options.onError?.(ne.errorMessage);return}r?.(ae,Oe,ne)},()=>{i?.()},n,m,d,c,h,u,g,w,v,R,ce,X,F)}).catch(C=>{this._options.onError?.(String(C)),x?.(C)})},this._request=(o,s={},r)=>this._baseFetch(o,s,r||{}),this._get=(o,s={},r)=>this._request(o,Object.assign({},s,{method:"GET"}),r),this._patch=(o,s={},r)=>this._request(o,Object.assign({},s,{method:"PATCH"}),r),this._post=(o,s={},r)=>this._request(o,Object.assign({},s,{method:"POST"}),r),this._put=(o,s={},r)=>this._request(o,Object.assign({},s,{method:"PUT"}),r),this._del=(o,s={},r)=>this._request(o,Object.assign({},s,{method:"DELETE"}),r),this.imageUpload=({file:o,onProgressCallback:s,user:r,fileName:i})=>{let n=new rs;i?n.append("file",o,i):n.append("file",o);let c=p(m=>{if(m.lengthComputable){let d=Math.floor(m.loaded/m.total*100);s?.(d)}},"onProgress");return this._upload({data:n,onprogress:c,user:r})},this.sendChatMessage=async(o,{onData:s,onCompleted:r,onThought:i,onFile:n,onError:c,getAbortController:m,onMessageEnd:d,onMessageReplace:h,onWorkflowStarted:u,onNodeStarted:g,onNodeFinished:w,onWorkflowFinished:x})=>this._ssePost("chat-messages",{body:{...o,response_mode:o.response_mode??"streaming",user:o.user}},{onData:s,onCompleted:r,onThought:i,onFile:n,onError:c,getAbortController:m,onMessageEnd:d,onMessageReplace:h,onNodeStarted:g,onWorkflowStarted:u,onWorkflowFinished:x,onNodeFinished:w}),this.sendWorkflowMessage=async(o,{onWorkflowStarted:s,onNodeStarted:r,onNodeFinished:i,onWorkflowFinished:n,onIterationStart:c,onIterationNext:m,onIterationFinish:d,onTextChunk:h,onTextReplace:u})=>this._ssePost("workflows/run",{body:{...o,response_mode:"streaming",user:o.user}},{onNodeStarted:r,onWorkflowStarted:s,onWorkflowFinished:n,onNodeFinished:i,onIterationStart:c,onIterationNext:m,onIterationFinish:d,onTextChunk:h,onTextReplace:u}),this.stopChatMessageResponding=(o,s)=>this._post(`chat-messages/${o}/stop`,{body:{user:s}}),this.fetchSuggestedQuestions=(o,s)=>this._get(`messages/${o}/suggested`,{params:{user:s}}),this.fetchConversations=async(o,s=!1,r=100)=>this._get("conversations",{params:{limit:r,first_id:"",pinned:s,user:o}}),this.fetchChatList=async(o,s,r=20)=>this._get("messages",{params:{conversation_id:o,limit:r,last_id:"",user:s}}),this.fetchAppParams=async o=>this._get("parameters",{params:{user:o}}),this.updateFeedback=async({url:o,body:s,user:r})=>this._post(o,{body:{...s,user:r}}),this.generationConversationName=async(o,s,r)=>this._post(`conversations/${o}/name`,{body:{auto_generate:!r,name:r,user:s}}),this.deleteConversation=async(o,s)=>this._del(`conversations/${o}`,{body:{user:s}}),this.pinConversation=async(o,s)=>this._patch(`conversations/${o}/pin`,{params:{user:s}}),this.unpinConversation=async(o,s)=>this._patch(`conversations/${o}/unpin`,{params:{user:s}});let t=this._options.appKey;t&&this._baseOptions.headers.append("Authorization",`Bearer ${t}`),this._options.appServiceBase.endsWith("/")&&(this._options.appServiceBase=this._options.appServiceBase.substring(0,this._options.appServiceBase.length-1)),this._options.appServiceBase.endsWith("/v1")&&(this._options.appServiceBase=this._options.appServiceBase.substring(0,this._options.appServiceBase.length-3)),this._apiUrl=this._options.appServiceBase+"/v1"}_apiUrl;_baseOptions;_handleStream;_baseFetch;_upload;_ssePost;_request;_get;_patch;_post;_put;_del;get options(){return this._options}imageUpload;sendChatMessage;sendWorkflowMessage;stopChatMessageResponding;fetchSuggestedQuestions;fetchConversations;fetchChatList;fetchAppParams;updateFeedback;generationConversationName;deleteConversation;pinConversation;unpinConversation;getFilesUrl(e){return e.startsWith("/")?this._options.appServiceBase+e:e}};var $e=class a extends A{static{p(this,"DifyAgentBot")}_options;static params={name:"dify-agent-bot",desc:"Dify\u667A\u80FD\u4F53",needHistoryMessage:!1,optionsSchema:{type:"formily",formily:{type:"object",properties:{...A.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u4E0D\u5E26/v1\uFF0C\u9ED8\u8BA4\u4F7F\u7528https://api.dify.ai"},"x-validator":{format:"url"}},preferLocalAttach:{type:"boolean",title:"\u662F\u5426\u4F7F\u7528\u672C\u5730\u56FE\u7247\u5730\u5740\uFF1F","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},default:!1,"x-decorator-props":{tooltip:"\u662F\u5426\u4F18\u5148\u4F7F\u7528\u672C\u5730\u6587\u4EF6\uFF0C\u800C\u4E0D\u662F\u5C06\u6587\u4EF6\u4E0A\u4F20\u5230dify\u670D\u52A1\u5668\uFF0C\u9ED8\u8BA4false\u3002\u5982\u679C\u4F18\u5148\u4F7F\u7528\u672C\u5730\u6587\u4EF6\uFF0C\u67D0\u4E9B\u5E73\u53F0\u53EF\u80FD\u65E0\u6CD5\u540E\u7EED\u8FDB\u884C\u8FFD\u95EE\u3002"}},customVars:{type:"object",title:"\u81EA\u5B9A\u4E49\u53D8\u91CF","x-decorator":"FormItem","x-component":"Code","x-component-props":{},"x-decorator-props":{tooltip:"\u81EA\u5B9A\u4E49\u53D8\u91CF\uFF0C\u53EF\u4EE5\u8F93\u5165JSON\u683C\u5F0F\u7684\u6570\u636E\uFF0C\u5BF9\u5E94dify\u4E2D\u7684\u53D8\u91CF\u3002"}}}}}};constructor(e){super(e),this._options=e,this._options.apiBase||(this.logger.warn("\u5F53\u524D\u6CA1\u6709\u914D\u7F6Edify\u670D\u52A1\u5668\u5730\u5740\uFF0C\u5C06\u4F7F\u7528\u5B98\u7F51\u5730\u5740\uFF1Ahttps://api.dify.ai"),this._options.apiBase="https://api.dify.ai")}_service;get params(){return a.params}get options(){return this._options}get supportConversationOnline(){return!0}async _uploadImage(e,t){let o=await e.asReadStream();try{return(await this._service.imageUpload({file:o,user:t})).id}catch(s){this.logger.error(s);return}}async _loadFileInfo(e,t){let o;if(_.httpUrl&&this._options.preferLocalAttach)o={transfer_method:"remote_url",url:await e.asUrl(),type:"image"};else{let s=await this._uploadImage(e,t);if(s)o={transfer_method:"local_file",upload_file_id:s,type:"image"};else return}return o}async init(){this._service=new Wt({appKey:this._options.apiKey,appServiceBase:this._options.apiBase})}async generateReadyMessage(e,t,o){let s={query:t,inputs:this._options.customVars??{},user:e};if(o.length){s.files=[];for(let r of o){if(r.type!=="image"){this.logger.warn("dify\u5F53\u524D\u4EC5\u652F\u6301\u56FE\u7247\u9644\u4EF6\uFF01");continue}s.files.push(await this._loadFileInfo(r.file,e))}}return{forSend:s,chatId:e,plainText:t}}async getLatestConversationId(e){this.logger.debug("get conversation id "+e);let t=await this._service.fetchConversations(e,!1,1);if(t.data?.length)return t.data[0].id}async getLatestChatTime(e,t){return(await this._service.fetchChatList(e,t,1)).data?.[0]?.created_at}async deleteConversation(e,t){await this._service.deleteConversation(e,t)}async sendMessageBody(e,t,o,s){e.conversation_id=s?.conversationId,await this._service.sendChatMessage(e,{onData:p(r=>{o.onContent(r,l.TEXT)},"onData"),onMessageEnd:p(r=>{o.onCompleted(r.conversation_id,r.created_at)},"onMessageEnd"),onThought:p(r=>{this.logger.debug(r.tool_input)},"onThought"),onError:p(r=>{throw r},"onError")})}};import is from"openai";var M=class a extends A{static{p(this,"OpenAIBot")}_options;static params={name:"openai-bot",desc:"OpenAI\u517C\u5BB9\u6A21\u578B",needHistoryMessage:!0,optionsSchema:{type:"formily",formily:{type:"object",properties:{...A.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"eg: https://your.domain.com/v1 \u4F7F\u7528OpenAI\u5B98\u65B9\u670D\u52A1\u8BF7\u7559\u7A7A\u3002"},"x-validator":{format:"url"}},chatOptions:{type:"object",title:"\u5BF9\u8BDD\u914D\u7F6E","x-index":4,properties:{model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-index":5,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6A21\u578B\u540D\u79F0\uFF0C\u5982 gtp4o-mini"},required:!0}},required:!0},systemPrompt:{type:"string",title:"\u7CFB\u7EDF\u63D0\u793A\u8BCD","x-index":10,"x-decorator":"FormItem","x-component":"Input.TextArea","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u7CFB\u7EDF\u89D2\u8272\u8BBE\u5B9A\u7684\u63D0\u793A\u8BCD\uFF0C\u9ED8\u8BA4\u4E3A\u7A7A",rows:4}}}}}};constructor(e){super(e),this._options=e,this._options.clientOptions=this._options.clientOptions??{},this._options.chatOptions?.model?.length||this.logger.warn("\u5F53\u524D\u672A\u8BBE\u7F6E\u4F7F\u7528\u7684\u6A21\u578B\u540D\u79F0\uFF0C\u8BE5bot\u6267\u884C\u53EF\u80FD\u4F1A\u5F02\u5E38:"+this._options.instanceName),this._options.apiBase?.length||this.logger.warn("\u5F53\u524D\u4F7F\u7528\u7684open ai\u5B98\u65B9\u5730\u5740\uFF0C\u8BF7\u786E\u4FDD\u7F51\u7EDC\u80FD\u591F\u8BBF\u95EE\uFF01"),this._options.apiBase?.length&&!this._options.apiBase.endsWith("/v1")&&this.logger.warn("openai\u7684\u63A5\u53E3\u5730\u5740\u4E00\u822C\u4EE5/V1\u7ED3\u5C3E\uFF0C\u5F53\u524D\u662F\uFF1A"+this._options.apiBase)}client;get options(){return this._options}get params(){return a.params}get supportConversationOnline(){return!1}async _loadFileInfo(e,t){let o=await e.asUrl();if(this.logger.debug("\u9644\u4EF6\u5730\u5740\uFF1A"+o),t==="image")return{type:"image_url",image_url:{url:o}};if(t==="video")return{type:"video_url",video_url:{url:o}}}async generateReadyMessage(e,t,o){let s;if(this._options.onlyText)s={role:"user",content:t};else{let i=[];if(s={role:"user",content:i},o.length)for(let n of o){let c=await this._loadFileInfo(n.file,n.type);if(!c){this.logger.debug("\u4E0D\u652F\u6301\u7684\u9644\u4EF6\u7C7B\u578B\uFF1A"+n.type);continue}i.push(c)}t?.length&&i.push({type:"text",text:t})}let r={...this._options.chatOptions,stream:!0,messages:[s]};return r.user=e,{forHistory:{type:"user",data:s},forSend:r,chatId:e,plainText:t}}getLatestConversationId(e){}getLatestChatTime(e,t){}deleteConversation(e,t){}async sendMessageBody(e,t,o){t?.length&&(e.messages=[...t,...e.messages]),this._options.systemPrompt?.length&&(e.messages=[{role:"system",content:this._options.systemPrompt},...e.messages]);let s=await this.client.chat.completions.create(e),r=!1,i="";for await(let n of s){let c="",m="";for(let d of n.choices)if(d.delta.reasoning_content?.length&&(m+=d.delta.reasoning_content),d.delta.content?.length&&(c+=d.delta.content),d.finish_reason?.length){d.finish_reason==="content_filter"?c+="\u3010\u56DE\u590D\u4E2D\u65AD\uFF1A\u60A8\u7684\u5185\u5BB9\u88AB\u68C0\u6D4B\u4E3A\u4E0D\u5408\u89C4\u3002\u3011":d.finish_reason!=="stop"&&this.logger.warn("\u9047\u5230\u672A\u77E5\u7684\u539F\u56E0\u56DE\u590D\u7ED3\u675F\uFF1A"+d.finish_reason),r=!0;break}if(i+=c,m.length&&o.onReasoning?.(m),c.length&&o.onContent(c,l.TEXT),r)break}return{type:"bot",data:{role:"assistant",content:i}}}async init(){this.client=new is({...this._options.clientOptions,baseURL:this._options.apiBase,apiKey:this._options.apiKey})}};var je=class extends M{static{p(this,"FastGPTBot")}_options;static params={name:"fastgpt-bot",desc:"fastgpt\u667A\u80FD\u4F53",needHistoryMessage:!1,optionsSchema:{type:"formily",formily:{type:"object",properties:{...M.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u9ED8\u8BA4\u4F7F\u7528https://cloud.fastgpt.cn/api"},"x-validator":{format:"url"}},appId:{type:"string",title:"appId","x-index":3,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7684ID"},required:!0,"x-decorator-props":{tooltip:"\u5728\u5E94\u7528\u7F16\u8F91\u9875\u9762\u7684url\u5730\u5740\u680F\u53EF\u4EE5\u770B\u5230\u6240\u9009\u5E94\u7528\u7684appId"}},disableHistory:{type:"string",title:"\u662F\u5426\u7981\u7528\u5728\u7EBF\u5386\u53F2\u6D88\u606F","x-index":4,"x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u7981\u7528\u540E\u6BCF\u6B21\u5BF9\u8BDD\u90FD\u662F\u65B0\u7684\uFF0C\u6CA1\u6709\u4E0A\u4E0B\u6587"},default:!1},chatOptions:{type:"object",title:"\u5BF9\u8BDD\u914D\u7F6E",properties:{model:{type:"string",title:"\u6A21\u578B\u540D\u79F0\uFF08\u65E0\u9700\u586B\u5199\uFF09","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u65E0\u9700\u586B\u5199"},"x-disabled":!0}},"x-display":!1}}}}};constructor(e){let t;e.apiBase?.length||(e.apiBase="https://cloud.fastgpt.cn/api"),e.apiBase.endsWith("/v1")?t=e.apiBase.slice(0,e.apiBase.length-3):(t=e.apiBase,e.apiBase=e.apiBase+"/v1"),e.chatOptions?.model?.length&&(e.chatOptions=e.chatOptions??{},e.chatOptions.model="gpt-4"),super(e),this._options=e,this._options.disableHistory=this._options.disableHistory??!1,this._commonApiBase=t}_commonApiBase;get options(){return this._options}get supportConversationOnline(){return!0}async generateReadyMessage(e,t,o){let s=await super.generateReadyMessage(e,t,o);return this._options.disableHistory||(s.forSend.chatId=e),s}async getLatestConversationId(e){return e}async getLatestChatTime(e,t){let s=((await(await fetch(this._commonApiBase+"/core/chat/getHistories",{method:"post",headers:{"content-type":"application/json",authorization:`Bearer ${this._options.apiKey}`},body:JSON.stringify({appId:this._options.appId,offset:0,pageSize:1e3,source:"api"})})).json()).data?.list).find(r=>r.chatId===t);if(s)return new Date(s.updateTime).getTime()/1e3}async deleteConversation(e,t){let o=await await fetch(this._commonApiBase+`/core/chat/delHistory?chatId=${t}&appId=${this._options.appId}`,{method:"delete",headers:{authorization:`Bearer ${this._options.apiKey}`}});this.logger.debug(o)}};var qe=class a extends A{static{p(this,"OllamaBot")}_options;static params={name:"ollama-bot",desc:"Ollama\u6A21\u578B",needHistoryMessage:!0,optionsSchema:{type:"formily",formily:{type:"object",properties:{...A.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u5982 https://your.domain.com"},"x-validator":{format:"url"},required:!0},apiKey:{type:"string",title:"\u670D\u52A1\u5BC6\u94A5","x-index":2,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5BC6\u94A5"},"x-validator":{required:!0,message:"\u670D\u52A1\u5BC6\u94A5\u4E0D\u80FD\u4E3A\u7A7A"},"x-decorator-props":{tooltip:"\u4E00\u822C\u5728\u5E94\u7528\u53D1\u5E03\u9875\u9762\u6216\u8005API\u914D\u7F6E\u9875\u9762\u53EF\u4EE5\u770B\u5230\u3002"},"x-visible":!1},model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-index":4,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6A21\u578B\u540D\u79F0\uFF0C\u5982 qwen2"},required:!0},authType:{type:"string",enum:["basic","token","none"],title:"\u6388\u6743\u8BA4\u8BC1\u65B9\u5F0F","x-index":5,"x-decorator":"FormItem","x-component":"Select","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u6388\u6743\u8BA4\u8BC1\u65B9\u5F0F"},"x-decorator-props":{tooltip:"basic\u8BA4\u8BC1\u65F6\u9700\u8981\u914D\u7F6E\u57FA\u7840\u6388\u6743\u4FE1\u606F\uFF0Ctoken\u65F6\u5019\u9700\u8981\u914D\u7F6Etoken\u6388\u6743\u4FE1\u606F\u3002none\u65F6\u65E0\u9700\u586B\u5199\u3002"},default:"basic"},basicOptions:{type:"object",title:"\u57FA\u7840\u6388\u6743\u4FE1\u606F","x-index":6,properties:{name:{type:"string",title:"Basic\u7528\u6237\u540D","x-index":7,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u7528\u6237\u540D"}},password:{type:"string",title:"Basic\u5BC6\u7801","x-index":8,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5BC6\u7801"}}}},tokenOptions:{type:"object",title:"Token\u6388\u6743\u4FE1\u606F","x-index":9,properties:{in:{type:"string",enum:["header","query"],title:"Token\u4FE1\u606F\u4F4D\u7F6E","x-index":10,"x-decorator":"FormItem","x-component":"Select","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u6388\u6743\u4FE1\u606F\u4F4D\u7F6E"},"x-decorator-props":{tooltip:"\u6388\u6743\u4FE1\u606F\u5B58\u5728\u4E8Eheader\u8FD8\u662Furl\u7684query\u4E32\u4E2D\u3002"},default:"header"},key:{type:"string",title:"Token Key","x-index":11,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165TokenKey"},"x-decorator-props":{tooltip:"\u6BD4\u5982Header\u4E2D\u7684Key\u901A\u5E38\u4E3AAuthorization\uFF0CUrl\u4E2D\u7684\u53EF\u80FD\u4E3Atoken\uFF0C\u6839\u636E\u5B9E\u9645\u60C5\u51B5\u586B\u5199\u3002"},default:"Authorization"},token:{type:"string",title:"Token Value","x-index":12,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165Token\u503C"}}}},onlyText:{type:"boolean",title:"\u662F\u5426\u4E3A\u7EAF\u6587\u672C\u6A21\u578B?","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u5982\u679C\u4E0D\u652F\u6301\u591A\u6A21\u6001\uFF0C\u8BBE\u7F6E\u4E3Atrue\uFF0C\u5426\u5219\u8BBE\u7F6E\u4E3Afalse\uFF0C\u9ED8\u8BA4\u662Ffalse\u3002"},default:!0},options:{type:"object",title:"Ollama\u7684\u53EF\u9009\u53C2\u6570","x-decorator":"FormItem","x-component":"Code","x-component-props":{},"x-decorator-props":{tooltip:"\u81EA\u5B9A\u4E49\u53D8\u91CF\uFF0C\u53EF\u4EE5\u8F93\u5165JSON\u683C\u5F0F\u7684\u6570\u636E\uFF0C\u5BF9\u5E94Ollama\u4E2D\u6E29\u5EA6\uFF0CTop P\u7B49\u914D\u7F6E\u53C2\u6570\u3002"}},systemPrompt:{type:"string",title:"\u7CFB\u7EDF\u63D0\u793A\u8BCD","x-index":3,"x-decorator":"FormItem","x-component":"Input.TextArea","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u7CFB\u7EDF\u89D2\u8272\u8BBE\u5B9A\u7684\u63D0\u793A\u8BCD\uFF0C\u9ED8\u8BA4\u4E3A\u7A7A",rows:4}}}}}};constructor(e){if(super(e),this._options=e,!this._options.apiBase)throw new Error("\u6CA1\u6709\u914D\u7F6EapiBase!")}get options(){return this._options}get params(){return a.params}get supportConversationOnline(){return!1}async generateReadyMessage(e,t,o){let s={model:this._options.model,messages:[],options:this._options.options},r=[];if(o.length)for(let n of o)if(n.type==="image"){let c=await n.file.asBase64();r.push(c)}else this.logger.debug("\u4E0D\u652F\u6301\u7684\u6587\u4EF6");let i={role:"user",content:t,images:r};return s.messages.push(i),{forSend:s,chatId:e,plainText:t,forHistory:{type:"user",data:i}}}getLatestConversationId(e){}getLatestChatTime(e,t){}deleteConversation(e,t){}async sendMessageBody(e,t,o){t?.length&&(e.messages=[...t,e.messages[0]]),this._options.systemPrompt?.length&&(e.messages=[{role:"system",content:this._options.systemPrompt},...e.messages]);let s=this._options.apiBase+"/api/chat";this._options.authType==="token"&&this._options.tokenOptions.in==="query"&&(s+=`?${this._options.tokenOptions.key}=${this._options.tokenOptions.token}`);let r={"Content-Type":"application/json"};if(this._options.authType==="token"&&this._options.tokenOptions.in==="header")r.Authorization=this._options.tokenOptions.token;else if(this._options.authType==="basic"){let c=`${this._options.basicOptions.name}:${this._options.basicOptions.password}`;r.Authorization=`Basic ${btoa(c)}`}let i=await fetch(s,{method:"post",keepalive:!0,headers:r,body:JSON.stringify(e)}),n="";if(await ee(i.body,c=>{let m=c.message?.content;m?.length&&(n+=m,o.onContent(m,l.TEXT))}),n?.length)return this.logger.debug(n),{type:"bot",data:{role:"assistant",content:n}}}async init(){}};var Ge=class extends M{static{p(this,"OpenRouterBot")}static params={name:"openrouter-bot",desc:"OpenRouter\u6A21\u578B",optionsSchema:{type:"formily",formily:{type:"object",properties:{...M.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"eg: https://openrouter.ai/api/v1 \u4F7F\u7528OpenRouter\u5B98\u65B9\u670D\u52A1\u53EF\u7559\u7A7A\u3002"},"x-validator":{format:"url"},"x-decorator-props":{tooltip:"\u57FA\u4E8EOpenAI\u517C\u5BB9\u63A5\u53E3\u6269\u5C55\uFF0C\u8BF7\u4F7F\u7528OpenAI\u517C\u5BB9\u63A5\u53E3\u7684\u5730\u5740\uFF0C\u4F7F\u7528OpenRouter\u5B98\u65B9\u5730\u5740\u53EF\u7559\u7A7A\u3002"}},chatOptions:{type:"object",title:"\u5BF9\u8BDD\u914D\u7F6E","x-index":4,properties:{model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-index":5,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"meta-llama/llama-3.1-70b-instruct:free"},required:!0}},required:!0}}}}};constructor(e){e.apiBase?.length||(e.apiBase="https://openrouter.ai/api/v1"),super(e)}};var He=class a extends A{static{p(this,"QAnythingBot")}_options;static params={name:"qanything-bot",desc:"\u7F51\u6613\u6709\u9053\u77E5\u8BC6\u5E93\u667A\u80FD\u4F53",needHistoryMessage:!0,optionsSchema:{type:"formily",formily:{type:"object",properties:{...A.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u9ED8\u8BA4\u4F7F\u7528https://openapi.youdao.com/q_anything/api"},"x-validator":{format:"url"}},botId:{type:"string",title:"botId","x-index":3,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165bot\u7684id"},required:!0,"x-decorator-props":{tooltip:"\u5728Agents\u9875\u9762\u7684\u53F3\u4E0A\u89D2\u6216\u8005\u6D4F\u89C8\u5668\u7684URL\u4E2D\u90FD\u53EF\u4EE5\u770B\u5230botId"}},onlyText:{type:"boolean",title:"\u662F\u5426\u4E3A\u7EAF\u6587\u672C\u6A21\u578B?","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u5982\u679C\u4E0D\u652F\u6301\u591A\u6A21\u6001\uFF0C\u8BBE\u7F6E\u4E3Atrue\uFF0C\u5426\u5219\u8BBE\u7F6E\u4E3Afalse\uFF0C\u9ED8\u8BA4\u662Ffalse\u3002"},"x-display":!1}}}}};constructor(e){e.onlyText=e.onlyText??!0,super(e),this._options=e,this._options.apiBase||(this.logger.warn("\u6CA1\u6709\u914D\u7F6EapiBase\uFF0C\u5C06\u4F7F\u7528\u9ED8\u8BA4\u7684https://openapi.youdao.com/q_anything/api"),this._options.apiBase="https://openapi.youdao.com/q_anything/api")}get options(){return this._options}get params(){return a.params}get supportConversationOnline(){return!1}async generateReadyMessage(e,t){return{forSend:{uuid:this._options.botId,question:t,sourceNeeded:!1},chatId:e,plainText:t}}getLatestConversationId(e){}getLatestChatTime(e,t){}deleteConversation(e,t){}async sendMessageBody(e,t,o){t?.length?e.history=[...t]:e.history=[];let s=await fetch(this._options.apiBase+"/bot/chat_stream",{method:"post",keepalive:!0,headers:{"Content-Type":"application/json",Authorization:this._options.apiKey},body:JSON.stringify(e)}),r;if(await ee(s.body,i=>{let n=i.result.response;i.result.singleQAId!==null?r=n:n?.length&&o.onContent(n,l.TEXT)}),r?.length)return this.logger.debug(r),{type:"bot",data:{question:e.question,response:r}}}async init(){}};import{v4 as as}from"uuid";var Ke=class a extends A{static{p(this,"WenxinAgentBot")}_options;static params={name:"wenxin-agent-bot",desc:"\u767E\u5EA6\u6587\u5FC3\u667A\u80FD\u4F53",needHistoryMessage:!1,optionsSchema:{type:"formily",formily:{type:"object",properties:{...A.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u9ED8\u8BA4\u4F7F\u7528https://agentapi.baidu.com"},"x-validator":{format:"url"}},appId:{type:"string",title:"appId","x-index":3,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7684ID"},required:!0,"x-decorator-props":{tooltip:"\u5728\u5E94\u7528\u8BE6\u60C5\u9875\u9762\u53EF\u4EE5\u770B\u5230\u5E94\u7528\u7684appId\u3002"}}}}}};constructor(e){e.apiBase=e.apiBase??"https://agentapi.baidu.com",super(e),this._options=e}get options(){return this._options}get params(){return a.params}get supportConversationOnline(){return!0}async _loadFileInfo(e,t){let o=await e.asUrl(),s=e.name.substring(e.name.lastIndexOf(".")+1);if(t==="image")return{imageName:e.name,imageType:s,imageUrl:o};{let r=await e.info();return{fileId:as(),fileName:e.name,fileSize:r.size,fileType:s,fileUrl:o}}}async generateReadyMessage(e,t,o){let s={},r={openId:e,message:{content:s},source:this._options.appId,from:"openapi"};if(o.length){s.type="multimodal",s.value=[];for(let i of o)s.value.push({type:i.type,value:await this._loadFileInfo(i.file,i.type)});s.value.push({type:"text",value:{showText:t,text:t}})}else s.type="text",s.value={showText:t,text:t};return{forSend:r,chatId:e,plainText:t}}getLatestConversationId(e){}getLatestChatTime(e,t){}deleteConversation(e,t){}async sendMessageBody(e,t,o,s){e.threadId=s?.conversationId;let r=await fetch(this._options.apiBase+`/assistant/conversation?appId=${this._options.appId}&secretKey=${this._options.apiKey}`,{method:"post",keepalive:!0,headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),i="";await ee(r.body,n=>{let c=n.data?.message?.content[0]?.data?.text;c?.length&&(i+=c,o.onContent(c,l.TEXT)),n.data?.message?.endTurn&&o.onCompleted(n.data.message.threadId,new Date().getTime()/1e3)}),this.logger.debug(i)}async init(){}};var ze=class a extends A{static{p(this,"YuanQiBot")}_options;static params={name:"yuanqi-bot",needHistoryMessage:!0,desc:"\u817E\u8BAF\u5143\u5668\u667A\u80FD\u4F53",optionsSchema:{type:"formily",formily:{type:"object",properties:{...A.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u9ED8\u8BA4\u4F7F\u7528https://open.hunyuan.tencent.com"},"x-validator":{format:"url"}},apiKey:{type:"string",title:"\u670D\u52A1\u5BC6\u94A5","x-index":2,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5BC6\u94A5"},"x-validator":{required:!0,message:"\u670D\u52A1\u5BC6\u94A5\u4E0D\u80FD\u4E3A\u7A7A"},"x-decorator-props":{tooltip:"\u5728\u6211\u521B\u5EFA\u7684\u9875\u9762\u4E2D\uFF0C\u6BCF\u4E2A\u667A\u80FD\u4F53\u5361\u7247\u53F3\u4E0B\u89D2\u7684\u4E09\u4E2A\u5C0F\u70B9\uFF0C\u70B9\u5F00\u9009\u62E9API\u8C03\u7528\uFF0C\u5373\u53EF\u770B\u5230\u3002"}},appId:{type:"string",title:"appId","x-index":3,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7684ID"},required:!0,"x-decorator-props":{tooltip:"\u5728\u6211\u521B\u5EFA\u7684\u9875\u9762\u4E2D\uFF0C\u6BCF\u4E2A\u667A\u80FD\u4F53\u5361\u7247\u53F3\u4E0B\u89D2\u7684\u4E09\u4E2A\u5C0F\u70B9\uFF0C\u70B9\u5F00\u9009\u62E9API\u8C03\u7528\uFF0C\u5373\u53EF\u770B\u5230\u3002"}}}}}};constructor(e){e.apiBase=e.apiBase??"https://yuanqi.tencent.com",super(e),this._options=e}get options(){return this._options}get params(){return a.params}get supportConversationOnline(){return!1}async _loadFileInfo(e,t){let o=await e.asUrl(),s=e.name.substring(e.name.lastIndexOf(".")+1);return t==="image"?{type:"image",url:o}:(this.logger.info("\u5F53\u524D\u5E73\u53F0\u53EF\u80FD\u4E0D\u652F\u6301\u8BE5\u7C7B\u578B\u6570\u636E\u89E3\u6790\uFF1A"+s),{type:s,url:o})}async generateReadyMessage(e,t,o){let s=[],r={role:"user",content:s},i={assistant_id:this._options.appId,user_id:e,stream:!0,messages:[r]};if(t?.length&&s.push({type:"text",text:t}),o.length)for(let n of o)s.push({type:"file_url",file_url:await this._loadFileInfo(n.file,n.type)});return{forSend:i,chatId:e,plainText:t,forHistory:r}}getLatestConversationId(e){}getLatestChatTime(e,t){}deleteConversation(e,t){}async sendMessageBody(e,t,o){let s=await fetch(this._options.apiBase+"/openapi/v1/agent/chat/completions",{method:"post",keepalive:!0,headers:{"Content-Type":"application/json","X-Source":"openapi",Authorization:`Bearer ${this._options.apiKey}`},body:JSON.stringify(e)}),r="";return await ee(s.body,i=>{if(i.choices?.[0]?.delta.role!=="assistant")return;let n=i.choices?.[0]?.delta.content;n?.length&&(r+=n,o.onContent(n,l.TEXT))}),this.logger.debug(r),{type:"bot",data:{role:"assistant",content:[{type:"text",text:r}]}}}async init(){}};import ps from"form-data";import cs from"axios";var We=class a extends A{static{p(this,"ZhipuQingyanBot")}_options;static params={name:"zhipu-qingyan-agent",desc:"\u667A\u8C31\u6E05\u8A00\u667A\u80FD\u4F53",needHistoryMessage:!1,optionsSchema:{type:"formily",formily:{type:"object",properties:{...A.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u7559\u7A7A\u4F7F\u7528 https://chatglm.cn/chatglm/assistant-api/v1"},"x-validator":{format:"url"},"x-decorator-props":{tooltip:"\u53EF\u7559\u7A7A\u3002"}},apiKey:{type:"string",title:"\u670D\u52A1Key","x-index":3,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1key"},"x-validator":{required:!0,message:"\u670D\u52A1Key\u4E0D\u80FD\u4E3A\u7A7A"},"x-decorator-props":{tooltip:"\u667A\u80FD\u4F53\u7F16\u8F91\u9875\u9762\u70B9\u51FB\u53D1\u5E03\u6309\u94AE\uFF0C\u70B9\u51FB\u7ACB\u5373\u914D\u7F6E\uFF0C\u9009\u62E9\u81EA\u5B9A\u4E49\u5E73\u53F0\u5373\u53EF\u521B\u5EFA\u3002"}},apiSecret:{type:"string",title:"\u670D\u52A1Secret","x-index":4,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u79C1\u94A5"},"x-validator":{required:!0,message:"\u670D\u52A1\u5BC6\u94A5\u4E0D\u80FD\u4E3A\u7A7A"},"x-decorator-props":{tooltip:"\u667A\u80FD\u4F53\u7F16\u8F91\u9875\u9762\u70B9\u51FB\u53D1\u5E03\u6309\u94AE\uFF0C\u70B9\u51FB\u7ACB\u5373\u914D\u7F6E\uFF0C\u9009\u62E9\u81EA\u5B9A\u4E49\u5E73\u53F0\u5373\u53EF\u521B\u5EFA\u3002"}},assistantId:{type:"string",title:"assistantId","x-index":5,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7684ID"},required:!0,"x-decorator-props":{tooltip:"\u5728\u667A\u80FD\u4F53\u7684\u5BF9\u8BDD\u6216\u8005\u7F16\u8F91\u9875\u9762\u7684url\u5730\u5740\u4E0A\u53EF\u4EE5\u770B\u5230\uFF0Cid=xxx\uFF0Cxxx\u5C31\u662Fid\u3002"}}}}}};constructor(e){e.apiBase||(e.apiBase="https://chatglm.cn/chatglm/assistant-api/v1"),super(e),this._options=e}_token;get options(){return this._options}get params(){return a.params}get supportConversationOnline(){return!0}async _loadToken(){let e=await(await fetch(`${this._options.apiBase}/get_token`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({api_key:this._options.apiKey,api_secret:this._options.apiSecret})})).json();this._token=e.result?.access_token,this.logger.trace("\u5DF2\u83B7\u53D6\u667A\u8C31\u6E05\u8A00\u667A\u80FD\u4F53token\uFF1A"+this._token);let t=parseInt(e.result?.expires_in??24*60*60);setTimeout(()=>{this._loadToken()},t*1e3/1.1)}async _loadFileInfo(e){let t=new ps,o=await e.asReadStream();t.append("file",o);let s={...t.getHeaders(),Authorization:`Bearer ${this._token}`},r=await cs({method:"post",url:this._options.apiBase+"/file_upload",headers:s,data:t,responseType:"json"});if(r.status!==200)throw new Error("\u4E0A\u4F20\u6587\u4EF6\u5931\u8D25:"+r.statusText);return{file_id:r.data.result.file_id}}async generateReadyMessage(e,t,o){let s=[],r={assistant_id:this._options.assistantId,prompt:t,file_list:s,meta_data:this._options.metaData};if(o.length)for(let i of o)s.push(await this._loadFileInfo(i.file));return{forSend:r,chatId:e,plainText:t}}getLatestConversationId(e){}getLatestChatTime(e,t){}deleteConversation(e,t){}async sendMessageBody(e,t,o,s){e.conversation_id=s?.conversationId;let r=await fetch(this._options.apiBase+"/stream",{method:"post",keepalive:!0,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this._token}`},body:JSON.stringify(e)}),i="";await ee(r.body,n=>{if(n.status==="init")return;let c=n.message.content,m="";switch(c.type){case"text":m=c.text;break;case"image":{let d=0;for(let h of c.image)m+=`![\u56FE\u7247${d++}](${h.image_url})`;break}case"code":{m=c.code;break}}if(m?.length){let d=i;i=m,m=m.replace(d,""),o.onContent(m,l.TEXT)}if((n.status==="finish"||n.status==="error")&&(o.onCompleted(n.conversation_id,new Date().getTime()/1e3),n.status==="error"))throw new Error(n.last_error)}),this.logger.debug(i)}async init(){await this._loadToken()}};var Xe=class extends M{static{p(this,"SiliconFlowBot")}static params={name:"siliconflow-bot",desc:"\u7845\u57FA\u6D41\u52A8",optionsSchema:{type:"formily",formily:{type:"object",properties:{...M.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"eg: https://api.siliconflow.cn/v1 \u4F7F\u7528\u7845\u57FA\u6D41\u52A8\u5B98\u65B9\u670D\u52A1\u53EF\u7559\u7A7A\u3002"},"x-validator":{format:"url"},"x-decorator-props":{tooltip:"\u57FA\u4E8EOpenAI\u517C\u5BB9\u63A5\u53E3\u6269\u5C55\uFF0C\u8BF7\u4F7F\u7528OpenAI\u517C\u5BB9\u63A5\u53E3\u7684\u5730\u5740\uFF0C\u4F7F\u7528\u7845\u57FA\u6D41\u52A8\u5B98\u65B9\u5730\u5740\u53EF\u7559\u7A7A\u3002"}},chatOptions:{type:"object",title:"\u5BF9\u8BDD\u914D\u7F6E","x-index":4,properties:{model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-index":5,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"Qwen/Qwen2.5-7B-Instruct"},required:!0}},required:!0}}}}};constructor(e){e.apiBase?.length||(e.apiBase="https://api.siliconflow.cn/v1"),super(e)}};var Je=class extends M{static{p(this,"XunfeiBot")}static params={name:"xunfei-bot",desc:"\u8BAF\u98DE\u661F\u706B\u8BA4\u77E5\u6A21\u578B",optionsSchema:{type:"formily",formily:{type:"object",properties:{...M.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"eg: https://spark-api-open.xf-yun.com/v1 \u4F7F\u7528\u79D1\u5927\u8BAF\u98DE\u5B98\u65B9\u670D\u52A1\u53EF\u7559\u7A7A\u3002"},"x-validator":{format:"url"},"x-decorator-props":{tooltip:"\u57FA\u4E8EOpenAI\u517C\u5BB9\u63A5\u53E3\u6269\u5C55\uFF0C\u8BF7\u4F7F\u7528OpenAI\u517C\u5BB9\u63A5\u53E3\u7684\u5730\u5740\uFF0C\u4F7F\u7528\u79D1\u5927\u8BAF\u98DE\u5B98\u65B9\u5730\u5740\u53EF\u7559\u7A7A\u3002"}},modelName:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-index":4,"x-decorator":"FormItem","x-component":"AutoComplete",enum:[{label:"lite(Spark Lite)",value:"lite"},{label:"generalv3(Spark Pro)",value:"generalv3"},{label:"pro-128k(Spark Pro-128K)",value:"pro-128k"},{label:"generalv3.5(Spark Max)",value:"generalv3.5"},{label:"max-32k(Spark Max-32K)",value:"max-32k"},{label:"4.0Ultr(Spark4.0 Ultra)",value:"4.0Ultra"}],"x-component-props":{allowClear:!0,placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u6A21\u578B\u7684\u540D\u79F0"},default:"lite","x-decorator-props":{tooltip:"\u6A21\u578B\u540D\u79F0\uFF0C\u53C2\u8003\u8BAF\u98DE\u63A7\u5236\u53F0-\u661F\u706B\u8C03\u8BD5\u4E2D\u5FC3-\uFF08\u53F3\u4FA7\uFF09\u8F6C\u6362\u6A21\u7248\u4E3A\u4EE3\u7801\u3002"},required:!0},chatOptions:{type:"object",title:"\u5176\u4ED6\u5BF9\u8BDD\u914D\u7F6E","x-index":5,"x-decorator":"FormItem","x-component":"Code","x-decorator-props":{tooltip:"\u9664\u6A21\u578B\u540D\u79F0\u4E4B\u5916\u7684\u5176\u4ED6\u5BF9\u8BDD\u914D\u7F6E\uFF0C\u53C2\u8003\u8BAF\u98DE\u5B98\u7F51"},required:!1},onlyText:{type:"boolean",title:"\u662F\u5426\u4E3A\u7EAF\u6587\u672C\u6A21\u578B","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u5982\u679C\u4E0D\u652F\u6301\u591A\u6A21\u6001\uFF0C\u8BBE\u7F6E\u4E3Atrue\uFF0C\u5426\u5219\u8BBE\u7F6E\u4E3Afalse\uFF0C\u9ED8\u8BA4\u662Ffalse\u3002"},default:!1,"x-display":!1}}}}};constructor(e){e.apiBase?.length||(e.apiBase="https://spark-api-open.xf-yun.com/v1"),e.onlyText=!0,e.chatOptions.model=e.modelName??e.chatOptions.model??"lite",super(e),this.logger.trace("\u5F53\u524D\u8BAF\u98DE\u661F\u706B\u6A21\u578B\uFF1A"+e.chatOptions.model)}};var Ve=class extends M{static{p(this,"ZhipuBot")}static params={name:"zhipu-bot",desc:"\u667A\u666EAI\u5927\u6A21\u578B",optionsSchema:{type:"formily",formily:{type:"object",properties:{...M.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"eg: https://open.bigmodel.cn/api/paas/v4 \u4F7F\u7528\u667A\u666EAI\u5B98\u65B9\u670D\u52A1\u53EF\u7559\u7A7A\u3002"},"x-validator":{format:"url"},"x-decorator-props":{tooltip:"\u4F7F\u7528\u667A\u666EAI\u5B98\u65B9\u5730\u5740\u53EF\u7559\u7A7A\u3002"}},modelName:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-index":4,"x-decorator":"FormItem","x-component":"AutoComplete",enum:[{value:"glm-4-flash",label:"glm-4-flash(free)"},{value:"glm-4v-flash",label:"glm-4v-flash(free)"},{value:"glm-4-0520",label:"glm-4-0520"},{value:"glm-4",label:"glm-4"},{value:"glm-4-air",label:"glm-4-air"},{value:"glm-4-airx",label:"glm-4-airx"},{value:"glm-4-long",label:"glm-4-long"},{value:"glm-4-flashx",label:"glm-4-flashx"},{value:"glm-4v-plus",label:"glm-4v-plus"},{value:"glm-4v",label:"glm-4v"},{value:"charglm-4",label:"charglm-4"}],"x-component-props":{allowClear:!0,placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u6A21\u578B\u7684\u540D\u79F0"},default:"glm-4-flash","x-decorator-props":{tooltip:"\u6A21\u578B\u540D\u79F0\uFF0C\u53C2\u8003 https://bigmodel.cn/dev/api/normal-model/glm-4 \u3002"},required:!0},chatOptions:{type:"object",title:"\u5176\u4ED6\u5BF9\u8BDD\u914D\u7F6E","x-index":5,"x-decorator":"FormItem","x-component":"Code","x-decorator-props":{tooltip:"\u9664\u6A21\u578B\u540D\u79F0\u4E4B\u5916\u7684\u5176\u4ED6\u5BF9\u8BDD\u914D\u7F6E\uFF0C\u53C2\u8003\u667A\u666EAI\u5B98\u7F51"},required:!1}}}}};constructor(e){e.apiBase?.length||(e.apiBase="https://open.bigmodel.cn/api/paas/v4"),e.chatOptions.model=e.modelName??e.chatOptions.model??"glm-4-flash",super(e),this.logger.trace("\u5F53\u524D\u667A\u666EAI\u6A21\u578B\uFF1A"+e.chatOptions.model)}};import{createItem as ls,deleteItem as ms,readItems as er,updateItem as ds}from"@directus/sdk";var D=y("api-plugin",!0);function L(a,e){return{data:a,err:e}}p(L,"withRes");var Hp=p(async(a,e)=>{e=e||{},e.checkNotifyFequencySeconds=Math.max(e.checkNotifyFequencySeconds??Dt("PLUGIN_API_CHECK_NOTIFY_FEQ_SECONDS")??20,0),e.expiresInSeconds=Math.max(e.expiresInSeconds??Dt("PLUGIN_API_NOTIFY_EXPIRES_SECONDS")??3600,0),e.maxNotifyCount=Math.max(e.maxNotifyCount??Dt("PLUGIN_API_MAX_NOTIFY_COUNT")??100,5);let t=a.options.name,o=[],s,r=7*24*3600,i=p(()=>{s!==void 0&&(clearInterval(s),s=void 0),s=setInterval(()=>{let c=o.filter(m=>{let h=Math.min(m.info?.expireInSeconds??e.expiresInSeconds,r)*1e3+m.time.getTime();return new Date().getTime()<=h});if(c.length>e.maxNotifyCount){let m=c.length-e.maxNotifyCount;o=c.slice(m,m+e.maxNotifyCount)}else o=c;o.length===0&&(clearInterval(s),s=void 0)},e.checkNotifyFequencySeconds*1e3)},"startNotifyInterval"),n=p(c=>{if(!(c.time instanceof Date)||!c.id){D.warn("\u6536\u5230\u6CA1\u6709id\u6216\u8005time\u7684\u901A\u77E5\uFF0C\u5C06\u4E0D\u4F1A\u53D1\u9001\u5230\u5BA2\u6237\u7AEF\uFF01"),D.warn(c);return}o.length===0&&i(),o.push(c)},"notifyHandler");return a.globalEvent.on(Y.APP_NOTIFY,n),{name:"\u901A\u7528API\u670D\u52A1\u63D2\u4EF6",needOnline:!1,schema:{type:"object",properties:{}},init:p(async()=>({}),"init"),beforeStart:p(async()=>{D.debug("api\u63D2\u4EF6\u5F00\u59CB\u6CE8\u518C"),a.registerRoutes(t,{actionName:"ping",action:{type:"normal",handler:p(async d=>{let h={status:"ok"},u=d.body.needNotify==="true",g=parseInt(d.body.notifyCursor);return L(u?{...h,notifies:{data:isNaN(g)?o:o.filter(w=>w.time.getTime()>g),cursor:new Date().getTime()}}:h)},"handler")},type:"api",needAuth:!0}),a.registerRoutes(t,{actionName:"resource-summary",action:{type:"normal",handler:p(async()=>{let d=a.botManager.getAllParamsArray().length,h=a.sourceManager.getAllParamsArray().length,u=a.skillManager.getAllParamsArray().length;return L({sources:{count:h,created:a.agentService.resourceCount.sources},bots:{count:d,created:a.agentService.resourceCount.bots},agents:{running:a.agentService.resourceCount.agents},skills:{count:u,created:a.agentService.resourceCount.skills},tasks:{running:a.taskService.onlineCount}})},"handler")},type:"api",needAuth:!0}),a.registerRoutes(t,{actionName:"bot-creators",action:{type:"normal",handler:p(async()=>{let d=a.botManager.getAllParamsArray();return L(d)},"handler")},type:"api",needAuth:!0}),a.registerRoutes(t,{actionName:"source-creators",action:{type:"normal",handler:p(async()=>{let d=a.sourceManager.getAllParamsArray();return L(d)},"handler")},type:"api",needAuth:!0}),a.registerRoutes(t,{actionName:"skill-creators",action:{type:"normal",handler:p(async()=>{let d=a.skillManager.getAllParamsArray();return L(d)},"handler")},type:"api",needAuth:!0}),a.registerRoutes(t,{actionName:"agent-creators",action:{type:"normal",handler:p(async()=>L([Ae.params]),"handler")},type:"api",needAuth:!0}),a.registerRoutes(t,{actionName:"task-runner-creators",action:{type:"normal",handler:p(async()=>{let d=a.taskRunnerManager.getAllParamsArray();return L(d)},"handler")},type:"api",needAuth:!0}),a.registerRoutes(t,{actionName:"task-trigger-creators",action:{type:"normal",handler:p(async()=>{let d=a.taskTriggerManager.getAllParamsArray();return L(d)},"handler")},type:"api",needAuth:!0}),a.registerRoutes(t,{actionName:"users",action:{type:"normal",handler:p(async d=>{let h=d.body,u=h.instanceName,g=a.sourceManager.getInstance(u);if(!g)return L([],"\u6D88\u606F\u6E90"+u+"\u4E0D\u5B58\u5728\uFF01");let w=h.type??"user";return D.trace("get "+u+" contacts"),L(await g.getContacts(w))},"handler")},type:"api",needAuth:!0});let c=new TextDecoder("utf-8"),m=p(d=>h=>{d.readyState===d.OPEN&&(typeof h.message=="object"&&(h={...h,message:JSON.stringify(h.message)}),d.send(JSON.stringify(h)))},"createLogHandler");a.registerWSHandler(t,{actionName:"logs",action:{onMessage:p(async(d,h,u)=>{if(d instanceof Buffer&&(d=c.decode(d)),typeof d!="string"){D.warn("\u65E0\u6CD5\u8BC6\u522B\u7684\u6D88\u606F\u7C7B\u578B\uFF01"),u.send("error message format");return}if(d==="ping"){u.send("pong"),D.trace("ping received");return}if(["fatal","error","warn","info","debug","trace"].includes(d)){D.emitter.setLevel(d),u.send("log level set to "+d),u.send(d);return}D.trace("ws log - client message received:"+d)},"onMessage"),onOpen:p(async(d,h)=>{let u=m(h);D.emitter.on("log",u),h.handler=u,h.send(D.emitter.level)},"onOpen"),onClose:p(async(d,h)=>{h.handler?D.emitter.off("log",h.handler):D.emitter.clearListeners("log")},"onClose")},type:"ws",needAuth:!0}),a.registerRoutes(t,{actionName:"sync-config",type:"api",needAuth:!0,action:{type:"normal",handler:p(async()=>(await a.reload(),L("success")),"handler")}}),a.registerRoutes(t,{actionName:"restart",type:"api",needAuth:!0,action:{type:"normal",handler:p(async()=>(a.globalEvent.emit("restart",void 0),L("success")),"handler")}}),a.registerRoutes(t,{actionName:"using",type:"api",needAuth:!0,action:{type:"normal",handler:p(async d=>{let h=d.body,u=h.instanceName,g=h.type,w=a.agentService.agents,x=!1;return g==="bots"?x=w.some(v=>v.options.botResponseRule.instanceName===u):g==="sources"?x=w.some(v=>v.options.sourceInstanceNames.includes(u)):g==="skills"&&(x=w.some(v=>v.options.skillRules?.some(R=>R.instanceName===u))),L(x)},"handler")}}),a.registerRoutes(t,{actionName:"install-plugin",type:"api",needAuth:!0,action:{type:"normal",handler:p(async d=>{let h=d.body;if(!h.name)return L(void 0,"\u63D2\u4EF6\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A");h.name=h.name.trim();try{h=await Xo(h.name,h.version?.trim(),h.registry),h.options=h.options??{},h.displayName=h.displayName??h.name,D.trace(h);let u=await a.client.request(er("plugins",{filter:{name:{_eq:h.name}}}));if(u?.length>0){let g=await a.client.request(ds("plugins",u[0].id,h));D.debug("update plugin res:"+JSON.stringify(g))}else{let g=await a.client.request(ls("plugins",h));D.debug("create plugin res:"+JSON.stringify(g))}return L({type:u?.length?"update":"create",info:h})}catch(u){let g=JSON.stringify(u);return D.error("\u5B89\u88C5\u63D2\u4EF6\u5931\u8D25\uFF1A"+u),L(void 0,g)}},"handler")}}),a.registerRoutes(t,{actionName:"uninstall-plugin",type:"api",needAuth:!0,action:{type:"normal",handler:p(async d=>{let h=d.body;if(!h.name)return L(void 0,"\u63D2\u4EF6\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A");h.name=h.name.trim();let u=await a.client.request(er("plugins",{filter:{name:{_eq:h.name}}}));if(!u?.length)return L(void 0,`\u672A\u80FD\u5728\u5B89\u88C5\u8BB0\u5F55\u4E2D\u627E\u5230\u63D2\u4EF6 ${h.name} \uFF0C\u5982\u679C\u786E\u5B9A\u5DF2\u7ECF\u5B89\u88C5\uFF0C\u53EF\u4EE5\u767B\u5F55\u670D\u52A1\u5668\u624B\u52A8\u5378\u8F7D\uFF01`);h=u[0];let g=await a.client.request(ms("plugins",u[0].id));D.debug("delete plugin res:"+JSON.stringify(g));try{return await Jo(h.name),L({type:"delete",info:h})}catch(w){let x=JSON.stringify(w);return D.error("\u5378\u8F7D\u63D2\u4EF6\u5931\u8D25\uFF08\u914D\u7F6E\u5DF2\u5220\u9664\uFF09\uFF1A"+x),L(void 0,x)}},"handler")}}),a.registerRoutes(t,{actionName:"plugins",type:"api",needAuth:!0,action:{type:"normal",handler:p(async()=>{let d=[];for(let h of a.onlinePlugins)h.schecma&&d.push({name:h.name,optionsSchema:{type:"formily",formily:h.schecma}});return L(d)},"handler")}})},"beforeStart"),dispose:p(async()=>{s!==void 0&&(clearInterval(s),s=void 0),a.globalEvent.off(Y.APP_NOTIFY,n),D.trace("api plugin desposed")},"dispose")}},"apiPlugin");import{readItems as hs}from"@directus/sdk";var Jt={disabled:{type:"boolean",title:"\u662F\u5426\u7981\u7528","x-decorator":"FormItem","x-component":"Switch","x-decorator-props":{tooltip:"\u7981\u7528\u540E\uFF0C\u4EFB\u52A1\u4E0D\u4F1A\u88AB\u8FD0\u884C\uFF0C\u4F46\u4ECD\u4F1A\u88AB\u89E6\u53D1\u3002"},default:!1,required:!1}},Ee=class{static{p(this,"TaskTrigger")}app;_options;constructor(e,t){this.app=e,this._options=t}},se=y("task-service"),Xt=class{static{p(this,"TaskService")}_app;_options;constructor(e,t={}){this._app=e,this._options=t,this._initialized=!1,this._taskTriggers=[],this._onlineCount=0,this._options.maxRecords=this._options.maxRecords??1e3}_initialized;_taskTriggers;_onlineCount;get onlineCount(){return this._onlineCount}async init(){if(this._initialized){se.warn("task service\u5DF2\u7ECF\u521D\u59CB\u5316\uFF0C\u8BF7\u52FF\u91CD\u590D\u8C03\u7528\uFF01");return}return this._initialized=!0,this._loadTasks()}async reload(){return se.trace("dispose tasks"),await this.dispose(),this._taskTriggers=[],se.trace("create tasks"),this._loadTasks()}async _loadTasks(){if(this._app.offlineMode)return;let e=await this._app.client.request(hs("tasks",{filter:{status:{_neq:"archived"},user_created:{_eq:this._app.me?.id}}}));e?.length?this._onlineCount=e.length:(se.warn("\u5F53\u524D\u6CA1\u6709\u5728\u7EBF\u914D\u7F6E\u7684\u4EFB\u52A1\uFF01"),se.warn(e));let t=[...e??[],...this._options.tasks??[]];t.forEach(o=>{o.runnerOptions.instanceName||(se.trace("\u81EA\u52A8\u751F\u6210"+o.runnerName+"\u7684\u5B9E\u4F8BID"),o.runnerOptions.instanceName=he(10));let s=this._app.taskRunnerManager.createInstance(o.runnerName,o.runnerOptions);o.triggerOptions.instanceName||(se.trace("\u81EA\u52A8\u751F\u6210"+o.triggerName+"\u7684\u5B9E\u4F8BID"),o.triggerOptions.instanceName=he(10));let r={...o.triggerOptions,onTask:p(async n=>{if(s.options.disabled){se.trace("\u5F53\u524D\u4EFB\u52A1\u5DF2\u88AB\u7981\u7528\uFF0C\u7EC8\u6B62\u8FD0\u884C\uFF01");return}let c=new Date,m=await s.run(n)??{};m.startTime=c,m.endTime=new Date,se.trace("task "+r.instanceName+" run by "+s.options.instanceName+",costs "+(m.endTime.getTime()-m.startTime.getTime())+" ms")},"onTask")},i=this._app.taskTriggerManager.createInstance(o.triggerName,r);se.trace("create task trigger instance "+r.instanceName),this._taskTriggers.push(i)}),se.info(t.length+" tasks loaded!")}async dispose(){await de(this._taskTriggers),await this._app.taskTriggerManager.clearInstances(),await this._app.taskRunnerManager.clearInstances()}};var Vt=class extends Ee{static{p(this,"EventTaskTrigger")}app;_options;constructor(e,t){super(e,t),this.app=e,this._options=t,this._initialized=!1,this._disposers=[],this._options.eventNames=this._options.eventNames??[],this.init()}_initialized;_logger;_disposers;get logger(){return this._logger?this._logger:this._logger=y(this.loggerName)}async dispose(){this._disposers?.forEach(e=>e()),this._disposers=void 0}init(){if(!this._disposers){this._logger.error("\u5F53\u524D\u5B9E\u4F8B\u5DF2\u88AB\u91CA\u653E\uFF0C\u65E0\u6CD5\u91CD\u65B0\u521D\u59CB\u5316\uFF01\u8BF7\u91CD\u65B0\u521B\u5EFA\u65B0\u7684\u5B9E\u4F8B");return}if(this._initialized){this.logger.warn("\u5F53\u524D\u5B9E\u4F8B\u5DF2\u7ECF\u521D\u59CB\u5316\uFF0C\u8BF7\u52FF\u91CD\u590D\u8C03\u7528\uFF01");return}this._initialized=!0,this.getEventTriggers()?.forEach(t=>{let o=t.name;this._options.eventNames.forEach(s=>{let r=p(i=>{let n={triggerName:o,eventName:s,data:i,from:o};this.options.onTask(n)},"action");t.trigger.on(s,r),this._disposers.push(()=>{t.trigger.off(s,r)})})})}},Qe=class a extends Vt{static{p(this,"SourceEventTaskTrigger")}app;_options;static params={name:"source-trigger",desc:"\u804A\u5929\u6D88\u606F",optionsSchema:{type:"formily",formily:{type:"object",properties:{eventNames:{type:"array",enum:[{label:"\u804A\u5929\u63A5\u6536\u7684\u6D88\u606F",value:f.CHAT_MESSAGE},{label:"\u804A\u5929\u53D1\u9001\u7684\u6D88\u606F",value:f.RESPONSE_MESSAGE},{label:"\u65B0\u7528\u6237\u8FDB\u7FA4",value:f.GROUP_NEW_USER},{label:"\u81EA\u5B9A\u4E49\u4E8B\u4EF6",value:f.CUSTOM}],title:"\u54CD\u5E94\u6D88\u606F\u7C7B\u578B","x-decorator":"FormItem","x-component":"Select","x-decorator-props":{tooltip:"\u6CE8\u610F\uFF0C\u5B9E\u9645\u54CD\u5E94\u54EA\u4E9B\u7C7B\u578B\uFF0C\u53D6\u51B3\u4E8E\u6D88\u606F\u6E90\u80FD\u5426\u652F\u6301\u8FD9\u4E9B\u7C7B\u578B\u7684\u6D88\u606F\u53D1\u5E03\u3002\u5373\u8FD9\u91CC\u914D\u7F6E\u7684\u662F\u9488\u5BF9\u6D88\u606F\u6E90\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\u7684\u4E8C\u6B21\u8FC7\u6EE4\u3002\u8981\u8FC7\u6EE4\u524D\u8BF7\u5148\u53D6\u6D88\u9009\u62E9\u6240\u6709\u3002"},"x-component-props":{mode:"multiple",allowClear:!0},default:[f.CHAT_MESSAGE,f.RESPONSE_MESSAGE],required:!0},sourceNames:{type:"string",title:"\u6D88\u606F\u6765\u6E90\uFF08\u6309\u6A21\u677F\uFF09","x-decorator":"FormItem","x-component":"CNameSelector","x-component-props":{resourceType:"sources",size:"small"},"x-decorator-props":{tooltip:"\u6240\u9009\u7684\u6A21\u677F\u4E0B\u7684\u6240\u6709\u7684\u6D88\u606F\u6E90\u90FD\u4F1A\u88AB\u76D1\u542C\uFF0C\u4E0E\u5B9E\u4F8B\u4E8C\u8005\u81F3\u5C11\u914D\u7F6E\u4E00\u4E2A\u3002"},required:!1},sourceInstanceNames:{type:"array",title:"\u6D88\u606F\u6765\u6E90\uFF08\u6309\u5B9E\u4F8B\uFF09","x-decorator":"FormItem","x-component":"SourceSelector","x-decorator-props":{tooltip:"\u6240\u9009\u5B9E\u4F8B\u7684\u6D88\u606F\u4F1A\u88AB\u76D1\u542C\uFF0C\u652F\u6301\u591A\u9009\u3002\u4E0E\u6A21\u677F\u4E8C\u8005\u81F3\u5C11\u914D\u7F6E\u4E00\u4E2A\u3002"},required:!1},messageRule:{type:"object",title:"\u6D88\u606F\u54CD\u5E94\u89C4\u5219","x-decorator":"FormItem","x-component":"MessageRule","x-component-props":{isForTask:!0},"x-decorator-props":{tooltip:"\u53EA\u6709\u9009\u62E9\u7C7B\u578B\u4E3A\u804A\u5929\u63A5\u6536\u6D88\u606F\u7684\u65F6\u5019\uFF0C\u8FC7\u6EE4\u624D\u4F1A\u751F\u6548\uFF0C\u4E0D\u7B26\u5408\u8FC7\u6EE4\u6761\u4EF6\u7684\u6D88\u606F\u4E0D\u4F1A\u89E6\u53D1\u6267\u884C\u5668\u6267\u884C\u3002"}}}}}};constructor(e,t){super(e,t),this.app=e,this._options=t;let o=this._options.onTask;if(!o)throw new Error("\u5F53\u524Dtrigger\u6CA1\u6709\u7ED1\u5B9A\u4EFB\u52A1\uFF01");let s=p(r=>{let i=r.data;if(i&&i.type===f.CHAT_MESSAGE&&this._options.messageRule&&!we(this._options.messageRule,i)){this.logger.debug("\u6D88\u606F\u4E0D\u5339\u914D\u4EFB\u52A1\u89C4\u5219\uFF01");return}o(r)},"onTask");this._options.onTask=s}get loggerName(){return"source-event-task-trigger"}get options(){return this._options}get params(){return a.params}getEventTriggers(){let e=this.app.sourceManager,t=[],o=this.options.sourceNames;return typeof o=="string"&&(o=[o]),o?.forEach(s=>{t.push(...e.getInstances(s)??[])}),this.options.sourceInstanceNames?.forEach(s=>{let r=e.getInstance(s);r?t.push(r):this.logger.error(`\u672A\u627E\u5230\u540D\u4E3A${s}\u7684\u6D88\u606F\u6E90\u5B9E\u4F8B\uFF01`)}),t.map(s=>({name:s.params.name,trigger:s.event}))}},Ye=class a extends Vt{static{p(this,"GlobalEventTaskTrigger")}app;_options;static params={name:"global-trigger",desc:"\u5168\u5C40\u6D88\u606F",optionsSchema:{type:"formily",formily:{type:"object",properties:{eventNames:{type:"array",enum:[{label:"\u5E94\u7528\u901A\u77E5",value:Y.APP_NOTIFY},{label:"\u914D\u7F6E\u91CD\u8F7D",value:Y.APP_RELOAD},{label:"\u5E94\u7528\u91CD\u542F",value:Y.APP_RESTARTED},{label:"\u5E94\u7528\u542F\u52A8",value:Y.APP_STARTED}],title:"\u54CD\u5E94\u6D88\u606F\u7C7B\u578B","x-decorator":"FormItem","x-component":"Select","x-decorator-props":{tooltip:"\u652F\u6301\u81EA\u5B9A\u4E49\u4E8B\u4EF6\u7C7B\u578B\uFF0C\u76F4\u63A5\u8F93\u5165\u81EA\u5B9A\u4E49\u4E8B\u4EF6\u7684\u540D\u79F0\u5373\u53EF\u3002"},"x-component-props":{mode:"tags",allowClear:!0,placeholder:"\u652F\u6301\u624B\u52A8\u8F93\u5165\u81EA\u5B9A\u4E49\u4E8B\u4EF6"},required:!0}}}}};constructor(e,t){super(e,t),this.app=e,this._options=t}get loggerName(){return"global-event-task-trigger"}get options(){return this._options}get params(){return a.params}getEventTriggers(){return[{name:a.params.name,trigger:this.app.globalEvent}]}};import us from"axios";import gs from"form-data";var Ne={...$,disabled:{type:"boolean",title:"\u662F\u5426\u7981\u7528","x-decorator":"FormItem","x-component":"Switch","x-decorator-props":{tooltip:"\u7981\u7528\u540E\u8BE5\u6280\u80FD\u5B9E\u4F8B\u5C06\u4F1A\u4E0D\u53EF\u7528"}}};var j=class a{static{p(this,"BaseSTTSkill")}_options;static params={name:"base-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...Ne,ensureAudioFormat:{type:"boolean","x-index":10,title:"\u68C0\u67E5\u5E76\u8F6C\u6362\u975E\u6807\u51C6\u97F3\u9891","x-component":"Switch",default:!0,"x-decorator":"FormItem","x-decorator-props":{tooltip:"\u5927\u90E8\u5206\u8BC6\u522B\u5F15\u64CE\u8BED\u97F3\u652F\u63018k\u548C16k\u7684\u5355\u58F0\u9053\u97F3\u9891\uFF0C\u5982\u679C\u5F00\u542F\u68C0\u67E5\uFF0C\u6240\u6709\u4E0D\u662F\u8BE5\u7C7B\u578B\u7684\u97F3\u9891\u5C06\u88AB\u8F6C\u6362\uFF0C\u68C0\u67E5\u4F1A\u589E\u52A0\u7CFB\u7EDF\u5904\u7406\u65F6\u95F4\uFF0C\u5982\u679C\u5DF2\u7ECF\u786E\u5B9A\u97F3\u9891\u662F\u652F\u6301\uFF0C\u5EFA\u8BAE\u5173\u95ED\u68C0\u67E5\u3002"}}}}},desc:"\u8BED\u97F3\u8BC6\u522B\u57FA\u7840\u7C7B"};constructor(e){this._options=e,this._targetFormat="wav",this._logger=y(this._options.instanceName),this._options.ensureAudioFormat=this._options.ensureAudioFormat??!0}_logger;_targetFormat;get options(){return this._options}get params(){return a.params}init(){return Promise.resolve()}async _transpileContent(e){let t=e;if(t?.text?.length){this._logger.debug("\u5F53\u524D\u8BED\u97F3\u6D88\u606F\u5DF2\u7ECF\u88AB\u8F6C\u4E3A\u6587\u672C\uFF0C\u5C06\u53D6\u6D88\u672C\u6B21\u8F6C\u6362\uFF01");return}let o=t?.file;if(!o){this._logger.warn("\u672A\u68C0\u6D4B\u5230\u97F3\u9891\u6587\u4EF6\uFF01");return}if(this._options.ensureAudioFormat&&(this._logger.trace("\u8F6C\u6362\u97F3\u9891\u683C\u5F0F\u4E3A\u5355\u901A\u905316k\u7684"+this._targetFormat),o=await Pe(o,this._targetFormat,r=>(r.audioFrequency(16e3),r.audioChannels(1),r))),t.text=await this._getText(o),!t.text?.length){this._logger.warn("\u8F6C\u6362\u5931\u8D25\uFF01");return}this._logger.debug("\u8F6C\u6362\u5B8C\u6210\uFF1A"+t.text)}async applyOnSource(e){if(e.message.type!==l.AUDIO){this._logger.debug("\u5F53\u524D\u6D88\u606F\u4E0D\u662F\u97F3\u9891\u7C7B\u578B\uFF0C\u65E0\u6CD5\u8F6C\u6362\u4E3A\u6587\u672C\uFF01");return}await this._transpileContent(e.message.content)}async applyOnReply(e,t){return t!==l.AUDIO?(this._logger.debug("\u5F53\u524D\u54CD\u5E94\u6D88\u606F\u4E0D\u662F\u97F3\u9891\u7C7B\u578B\uFF0C\u65E0\u6CD5\u8F6C\u6362\u4E3A\u6587\u672C\uFF01"),{content:e,messageType:t}):(await this._transpileContent(e),{content:e,messageType:t})}};var Ze=class a extends j{static{p(this,"SenseVoiceSTTSkill")}_options;static params={name:"sensevoice-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...j.params.optionsSchema.formily.properties,apiHost:{type:"string",title:"API\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u5982 https://your.domain.com \u65E0\u9700\u5E26 extract_text"},"x-decorator-props":{tooltip:"API \u6765\u81EAhttps://github.com/HG-ha/SenseVoice-Api"},required:!0},authType:{type:"string",enum:[{label:"Basic In Header",value:"basic"},{label:"Bearer JWT In Heaer",value:"jwt"},{label:"\u65E0\u9700\u6388\u6743",value:"none"}],title:"\u6388\u6743\u8BA4\u8BC1\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select",default:"none","x-decorator-props":{tooltip:"\u5185\u7F51\u5EFA\u8BAE\u65E0\u9700\u6388\u6743\uFF0C\u5176\u4ED6\u5EFA\u8BAE\u4F7F\u7528\u6388\u6743\u8BA4\u8BC1\u3002"},required:!0},userName:{type:"string",title:"Basic\u7684\u7528\u6237\u540D","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"},"x-decorator-props":{tooltip:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"}},password:{type:"string",title:"Basic\u8BA4\u8BC1\u5BC6\u7801","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"},"x-decorator-props":{tooltip:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"}},jwt:{type:"string",title:"\u6388\u6743\u7801","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5199\u6388\u6743\u7801\uFF0C\u4EC5Jwt\u8BA4\u8BC1\u9700\u8981\u586B\u5199\uFF0C\u65E0\u9700\u5E26Bearer "},"x-decorator-props":{tooltip:"\u8BF7\u586B\u5199\u6388\u6743\u7801\uFF0C\u4EC5Jwt\u8BA4\u8BC1\u9700\u8981\u586B\u5199\uFF0C\u65E0\u9700\u5E26Bearer "}}}}},desc:"SenseVoice\u8BED\u97F3\u8BC6\u522B"};constructor(e){if(super(e),this._options=e,this._headers={"content-type":"multipart/form-data"},this._options.authType.toLowerCase()==="basic"){let t=`${this._options.userName}:${this._options.password}`;this._headers.authorization=`Basic ${btoa(t)}`}else this._options.authType.toLowerCase()==="jwt"&&(this._headers.authorization=`Bearer ${this._options.jwt}`);this._options.apiHost.indexOf("extract_text")>0&&this._logger.warn("api\u5730\u5740\u65E0\u9700\u5305\u542Bextract_text\uFF0C\u5982\u679C\u662F\u6709\u610F\u4E3A\u4E4B\uFF0C\u8BF7\u5FFD\u7565\uFF01"),this._options.apiHost.endsWith("/")||(this._options.apiHost+="/")}_headers;get options(){return this._options}get params(){return a.params}async _getText(e){this._logger.debug("\u5F00\u59CB\u8F6C\u6362\u8BED\u97F3\u5230\u6587\u672C");let t=new gs;return t.append("file",await e.asReadStream()),(await us({method:"post",url:this._options.apiHost+"extract_text",headers:{...this._headers,...t.getHeaders()},data:t,responseType:"json"})).data?.results}};import{v4 as fs}from"uuid";var U=class a{static{p(this,"BaseTTSSkill")}_options;static params={name:"sovite-tts",optionsSchema:{type:"formily",formily:{type:"object",properties:{...Ne,probability:{type:"number","x-index":100,title:"\u89E6\u53D1\u8BED\u97F3\u7684\u6982\u7387\uFF080-1\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:0,max:1,placeholder:"\u8BF7\u8F93\u5165\u8BED\u97F3\u7684\u89E6\u53D1\u6982\u7387"},"x-decorator-props":{tooltip:"\u6CE8\u610F\uFF0C\u5982\u679C\u6587\u672C\u4E2D\u5B58\u5728emoji\uFF0CMarkdown\uFF0C\u7F51\u5740\u7B49\u4E0D\u53EF\u8BFB\u7684\u5185\u5BB9\uFF0C\u5C06\u4E0D\u4F1A\u88AB\u8F6C\u8BD1\uFF0C\u9664\u975E\u914D\u7F6E\u81EA\u52A8\u53BB\u9664\u8FD9\u4E9B\u5185\u5BB9\u3002"},default:1,required:!0},deleteUnreadableText:{type:"boolean","x-index":110,title:"\u81EA\u52A8\u79FB\u9664\u4E0D\u53EF\u9605\u8BFB\u5185\u5BB9","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u662F\u5426\u81EA\u52A8\u79FB\u9664emoji\u548CMarkdown\u6807\u7B7E\uFF0C\u5982\u679C\u4E0D\u79FB\u9664\uFF0C\u5728\u9047\u5230\u8FD9\u4E9B\u6587\u672C\u65F6\uFF0C\u5C06\u4E0D\u4F1A\u89E6\u53D1\u8F6C\u6362\u3002"},default:!1}}}}};constructor(e){this._options=e,this._options.probability=this._options.probability??.5,this._logger=y(this._options.instanceName)}_logger;get options(){return this._options}get params(){return a.params}init(){return Promise.resolve()}async applyOnReply(e,t,o,s){this._logger.debug("check whether apply tts skill");let r=be(e);if(!r?.length){if(this._logger.warn("\u6CA1\u6709\u4ECEcontent\u4E2D\u68C0\u6D4B\u5230\u5185\u5BB9"),!s?.length)return{content:e,messageType:t};this._logger.debug("\u4F7F\u7528allContent"),this._logger.debug("allContent:"+s),this._logger.debug("content"+e)}if(!r?.length||r.length<3||this._options.probability<=0)return{content:e,messageType:t};if(r.length>=this._maxToken)return this._logger.warn(`\u6587\u672C\u957F\u5EA6\u4E3A${r.length}\uFF0C\u8D85\u8FC7\u4E86\u5141\u8BB8\u7684\u6700\u5927\u957F\u5EA6\uFF1A${this._maxToken}`),{content:e,messageType:t};if(this._options.probability<1&&Math.random()>this._options.probability)return{content:e,messageType:t};if(Uo(r)||Do(r))if(this._logger.trace("\u68C0\u6D4B\u5230\u5185\u5BB9\u4E2D\u53EF\u80FD\u542B\u6709emoji\u6216\u8005Markdown\u7B49\u65E0\u6CD5\u8F6C\u6362\u4E3A\u8BED\u97F3\u7684\u5185\u5BB9"),this._options.deleteUnreadableText)this._logger.trace("\u6839\u636E\u914D\u7F6E\uFF0C\u6B63\u5728\u79FB\u9664\u76F8\u5173\u4E0D\u53EF\u9605\u8BFB\u5185\u5BB9"),r=Bo(r),r=Lo(r);else return this._logger.trace("\u6839\u636E\u914D\u7F6E\uFF0C\u53D6\u6D88\u8BED\u97F3\u8F6C\u6362"),{content:e,messageType:t};this._logger.debug("tts skill need apply"),this._logger.debug("text:"+r);let i=await this.getAudioBuffer(r,o);if(i?.length){let n={file:b.fromBuffer(i,fs()+".wav"),text:r};return this._logger.debug("tts skill applyed"),await n.file.asLocalPath(),{content:n,messageType:l.AUDIO}}return this._logger.warn("tts skill apply failed"),{content:e,messageType:t}}};var et=class a extends U{static{p(this,"SoviteTTSSkill")}_options;static params={name:"sovite-tts",optionsSchema:{type:"formily",formily:{type:"object",properties:{...U.params.optionsSchema.formily.properties,apiHost:{type:"string",title:"API\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u5982 https://your.domain.com"},"x-decorator-props":{tooltip:"\u542F\u52A8\u5B98\u65B9docker-compose\u4E4B\u540E\uFF0C\u8FDB\u5165\u5BB9\u5668\u6309api.py\u63D0\u793A\uFF0C\u542F\u52A8api.py\u811A\u672C\uFF0C\u5E76\u6620\u5C04\u51FA\u5916\u7F51\u7AEF\u53E3\u57DF\u540D\u5373\u53EF\u3002"},required:!0},authType:{type:"string",enum:[{label:"Basic In Header",value:"basic"},{label:"Bearer JWT In Heaer",value:"JWT"},{label:"\u65E0\u9700\u6388\u6743",value:"none"}],title:"\u6388\u6743\u8BA4\u8BC1\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select",default:"none","x-decorator-props":{tooltip:"\u5185\u7F51\u5EFA\u8BAE\u65E0\u9700\u6388\u6743\uFF0C\u5176\u4ED6\u5EFA\u8BAE\u4F7F\u7528\u6388\u6743\u8BA4\u8BC1\u3002"},required:!0},userName:{type:"string",title:"Basic\u7684\u7528\u6237\u540D","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"},"x-decorator-props":{tooltip:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"}},password:{type:"string",title:"Basic\u8BA4\u8BC1\u5BC6\u7801","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"},"x-decorator-props":{tooltip:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"}},jwt:{type:"string",title:"\u6388\u6743\u7801","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5199\u6388\u6743\u7801\uFF0C\u4EC5Jwt\u8BA4\u8BC1\u9700\u8981\u586B\u5199\uFF0C\u65E0\u9700\u5E26Bearer "},"x-decorator-props":{tooltip:"\u8BF7\u586B\u5199\u6388\u6743\u7801\uFF0C\u4EC5Jwt\u8BA4\u8BC1\u9700\u8981\u586B\u5199\uFF0C\u65E0\u9700\u5E26Bearer "}},probability:{type:"number",title:"\u89E6\u53D1\u8BED\u97F3\u7684\u6982\u7387\uFF080-1\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:0,max:1,placeholder:"\u8BF7\u8F93\u5165\u8BED\u97F3\u7684\u89E6\u53D1\u6982\u7387"},"x-decorator-props":{tooltip:"\u6CE8\u610F\uFF0C\u5982\u679C\u6587\u672C\u4E2D\u5B58\u5728emoji\uFF0CMarkdown\uFF0C\u7F51\u5740\u7B49\u4E0D\u53EF\u8BFB\u7684\u5185\u5BB9\uFF0C\u5C06\u4E0D\u4F1A\u88AB\u8F6C\u8BD1\uFF0C\u9664\u975E\u914D\u7F6E\u81EA\u52A8\u53BB\u9664\u8FD9\u4E9B\u5185\u5BB9\u3002"},default:1,required:!0},deleteUnreadableText:{type:"boolean",title:"\u81EA\u52A8\u79FB\u9664\u4E0D\u53EF\u9605\u8BFB\u5185\u5BB9","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u662F\u5426\u81EA\u52A8\u79FB\u9664emoji\u548CMarkdown\u6807\u7B7E\uFF0C\u5982\u679C\u4E0D\u79FB\u9664\uFF0C\u5728\u9047\u5230\u8FD9\u4E9B\u6587\u672C\u65F6\uFF0C\u5C06\u4E0D\u4F1A\u89E6\u53D1\u8F6C\u6362\u3002"},default:!1},customReqOptions:{type:"object",title:"\u81EA\u5B9A\u4E49\u53C2\u6570","x-decorator":"FormItem","x-component":"Code","x-component-props":{},"x-decorator-props":{tooltip:"\u81EA\u5B9A\u4E49\u53D8\u91CF\uFF0C\u53EF\u4EE5\u8F93\u5165JSON\u683C\u5F0F\u7684\u6570\u636E\uFF0C\u5982\u8BED\u8A00\uFF08\u9ED8\u8BA4\u4E3A\u4E2D\u6587\uFF09\uFF0Ctop_k\u7B49\u3002"}}}}},desc:"Sovits\u8BED\u97F3\u5408\u6210"};constructor(e){if(super(e),this._options=e,this._headers={"Content-Type":"application/json"},this._options.authType.toLowerCase()==="basic"){let t=`${this._options.userName}:${this._options.password}`;this._headers.authorization=`Basic ${btoa(t)}`}else this._options.authType.toLowerCase()==="jwt"&&(this._headers.authorization=`Bearer ${this._options.jwt}`)}_headers;get _maxToken(){return 10240}get options(){return this._options}get params(){return a.params}init(){return Promise.resolve()}async getAudioBuffer(e){let t=this._options.customReqOptions??{},o={text:e,...t,text_language:t.text_language??"zh"},r=await(await fetch(this._options.apiHost,{body:JSON.stringify(o),headers:this._headers,method:"post"})).arrayBuffer();return Buffer.from(r)}};import _s from"emittery";import{v4 as tt}from"uuid";var G=y("worktool"),ot=class a{static{p(this,"WorkToolSource")}_options;static params={name:"worktool",optionsSchema:{type:"formily",formily:{type:"object",properties:{robotId:{type:"string",title:"Robot ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 Robot ID"},"x-decorator-props":{tooltip:"\u5728worktool\u7AD9\u70B9\u53EF\u4EE5\u770B\u5230"}},apiHost:{type:"string",title:"API Host","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 API Host"},"x-decorator-props":{tooltip:"\u9ED8\u8BA4 https://api.worktool.ymdyes.cn\uFF0C\u65E0\u9700 / \u7ED3\u5C3E"},default:"https://api.worktool.ymdyes.cn"},me:{type:"object",title:"\u4E2A\u4EBA\u4FE1\u606F","x-decorator":"FormItem","x-component":"Object","x-decorator-props":{tooltip:"\u8BE5\u6D88\u606F\u6E90\u65E0\u6CD5\u901A\u8FC7 API \u83B7\u53D6\u4E2A\u4EBA\u4FE1\u606F\uFF0C\u9700\u8981\u624B\u52A8\u586B\u5165\uFF0CuserId \u548C userName \u5747\u914D\u7F6E\u4E3A nickName"},properties:{nickName:{type:"string",title:"Nick Name","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6635\u79F0\uFF0C\u9700\u8981\u4E0E\u5FAE\u4FE1\u4E2D\u81EA\u5DF1\u7684\u6635\u79F0\u5B8C\u5168\u4E00\u81F4"},"x-decorator-props":{tooltip:"\u6D88\u606F\u6E90\u7528\u6237\u7684\u6635\u79F0"},required:!0},userId:{type:"string",title:"User ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u7528\u6237 ID\uFF0C\u5EFA\u8BAE\u4E0ENickName\u4E00\u81F4"},required:!0},userName:{type:"string",title:"User Name","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u7528\u6237 ID\uFF0C\u5EFA\u8BAE\u4E0ENickName\u4E00\u81F4"},required:!0}},required:!0},commandCallback:{type:"boolean",title:"\u6CE8\u518C\u547D\u4EE4\u56DE\u8C03","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u5F00\u542F",unCheckedChildren:"\u5173\u95ED"},"x-decorator-props":{tooltip:"\u662F\u5426\u6CE8\u518C\u547D\u4EE4\u56DE\u8C03\uFF0C\u9ED8\u8BA4 false\u3002\u5F00\u542F\u540E\u53EF\u4EE5\u5B9E\u73B0\u4E00\u4E9B\u8C03\u8BD5\u4FE1\u606F\u8BB0\u5F55\uFF0C\u65E0\u5176\u4ED6\u5B9E\u9645\u7528\u9014\u3002"},default:!1}}}},fieldInAtList:"nickName",autoAppendAt:!0,eventNames:[f.CHAT_MESSAGE,f.LOGIN,f.LOGOUT,f.SELF_SEND],desc:"WorkTool\u65E0\u969C\u788D\u670D\u52A1"};constructor(e){if(this._options=e,this._actionNames={CHAT_CALLBACK_ACTION:"chat",COMMAND_CALLBACK_ACTION:"command",LOGIN_CALLBACK_ACTION:"login",LOGOUT_CALLBACK_ACTION:"logout"},this._online=!1,!this._options.robotId)throw new Error("\u673A\u5668\u4EBAID\u672A\u914D\u7F6E\uFF0C\u65E0\u6CD5\u542F\u52A8\u8BE5\u6D88\u606F\u6E90\uFF01");if(!this._options.me.nickName)throw new Error("\u673A\u5668\u4EBA\u8D26\u53F7\u81EA\u8EAB\u7684\u4FE1\u606F\u672A\u914D\u7F6E\uFF01");this._options.me.userId=this._options.me.userId??this._options.me.nickName,this._options.me.userName=this._options.me.userName??this._options.me.nickName,this._options.apiHost=this._options.apiHost??"https://api.worktool.ymdyes.cn",this._options.apiHost.endsWith("/")&&(this._options.apiHost=this._options.apiHost.slice(0,this._options.apiHost.length-1)),this.event=new _s,this._init()}_actionNames;_online;get params(){return a.params}get options(){return this._options}get actions(){return[{type:"api",actionName:this._actionNames.CHAT_CALLBACK_ACTION,action:{type:"normal",handler:p(e=>this._onChatMessage(e),"handler")}},{type:"api",actionName:this._actionNames.COMMAND_CALLBACK_ACTION,action:{type:"normal",handler:p(e=>this._onCommandMessage(e),"handler")}},{type:"api",actionName:this._actionNames.LOGIN_CALLBACK_ACTION,action:{type:"normal",handler:p(e=>this._onLoginMessage(e),"handler")}},{type:"api",actionName:this._actionNames.LOGOUT_CALLBACK_ACTION,action:{type:"normal",handler:p(e=>this._onLogoutMessage(e),"handler")}}]}event;async me(){if(this._online)return this._options.me}hasLogin(){return this._online}async login(){if(!this._online&&(await this._get("/robot/robotInfo/online")).data?.data===!0){this._fireLogin();return}}async sendMessage(e,t){this.event.emit(f.RESPONSE_MESSAGE,{id:tt(),type:f.CHAT_MESSAGE,message:e,fromMessage:t,source:this,me:this._options.me});let o;switch(e.type){case l.TEXT:case l.AUDIO:case l.REF:{let s=typeof e.content=="string"?e.content:e.content.text;if(!s?.length){G.debug("text is empty");break}s.indexOf("(http")>=0&&(s=me(s)),o=await this._post("/wework/sendRawMessage",{socketType:2,list:[{type:203,titleList:[...e.toInfo.map(r=>r.nickName?.length?r.nickName:r.userName)],receivedContent:s}]});break}case l.IMAGE:case l.EMOTION:case l.MUSIC:case l.VIDEO:case l.FILE:{let s=e.content.file,r=await s.asUrl();G.debug(r);let i=e.type===(l.IMAGE||e.type===l.EMOTION)?"image":e.type===l.VIDEO?"video":e.type===l.MUSIC?"audio":"*";o=await this._post("/wework/sendRawMessage",{socketType:2,list:[{type:218,titleList:[...e.toInfo.map(n=>n.nickName)],objectName:s.name,fileUrl:r,fileType:i}]});break}default:return G.warn("\u4E0D\u652F\u6301\u53D1\u9001\u7684\u6D88\u606F\u7C7B\u578B\uFF01"),G.warn(e),"\u4E0D\u652F\u6301\u53D1\u9001\u7684\u6D88\u606F\u7C7B\u578B\uFF01"}G.debug(o)}async getContacts(e,t=!1){return[]}async getContactDetail(e){return e}async _init(){this._post("/robot/robotInfo/update",{openCallback:1,callbackUrl:`${_.httpUrl}/api/${this._options.instanceName}/${this._actionNames.CHAT_CALLBACK_ACTION}`}),this._post("/robot/robotInfo/callBack/bind",{type:5,callBackUrl:`${_.httpUrl}/api/${this._options.instanceName}/${this._actionNames.LOGIN_CALLBACK_ACTION}`}),this._post("/robot/robotInfo/callBack/bind",{type:6,callBackUrl:`${_.httpUrl}/api/${this._options.instanceName}/${this._actionNames.LOGOUT_CALLBACK_ACTION}`}),this._options.commandCallback&&this._post("/robot/robotInfo/callBack/bind",{type:1,callBackUrl:`${_.httpUrl}/api/${this._options.instanceName}/${this._actionNames.COMMAND_CALLBACK_ACTION}`})}_getUrl(e){return this._options.apiHost+e+"?robotId="+this._options.robotId}async _get(e){let t=await fetch(this._getUrl(e));return{data:await t.json(),status:t.status}}async _post(e,t){try{return await(await fetch(this._getUrl(e),{method:"post",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})).json()}catch(o){G.error(o);return}}async _processChatMessage(e){let t,o;switch(e.textType){case 0:case 1:case 15:case 3:{if(e.spoken==="\u4E2A\u4EBA\u540D\u7247"&&e.rawSpoken==="\u4E2A\u4EBA\u540D\u7247")return;t=e.spoken,o=l.TEXT;break}default:{G.debug("unsupported message"),G.debug(e);return}}G.debug(e);let s=e.roomType===1||e.roomType===3,r={content:t,type:o,time:new Date,isGroupChat:s,atList:e.atMe==="true"?[this._options.me.nickName]:[],fromId:s?e.groupRemark.length?e.groupRemark:e.groupName:e.receivedName,senderId:e.receivedName,senderName:e.receivedName,senderInfo:{userId:e.receivedName,userName:e.receivedName,nickName:e.receivedName},toInfo:[this._options.me],messageId:tt(),origin:e};if(s){let c=r;c.groupInfo={userId:e.groupName,userName:e.groupName,nickName:e.groupRemark?.length?e.groupRemark:e.groupName,isGroup:!0},c.toInfo=[e.atMe?this._options.me:c.groupInfo]}let i=e.receivedName===this._options.me.nickName,n={id:tt(),type:f.CHAT_MESSAGE,message:r,source:this,me:this._options.me};i?(n.type=f.SELF_SEND,this.event.emit(n.type,n)):this.event.emit(n.type,n)}async _onChatMessage(e){let t=e.body;return t.receivedName==="WorkTool"?(G.debug("received system test chat message"),{code:0,message:"success"}):(this._processChatMessage(t),{code:0,message:"success"})}async _onCommandMessage(e){return G.debug("command message"),G.debug(e.body),{code:0,message:"success"}}async _onLoginMessage(e){return G.debug("login message"),G.debug(e.body),this._fireLogin(),{code:0,message:"success"}}async _onLogoutMessage(e){G.debug("logout message"),G.debug(e.body);let t={type:f.LOGOUT,user:this._options.me,id:tt(),source:this,me:this._options.me};return this.event.emit(t.type,t),{code:0,message:"success"}}_fireLogin(){let e={type:f.LOGIN,user:this._options.me,id:tt(),source:this,me:this._options.me};this.event.emit(e.type,e)}};var tr=y("echo-runner"),rt=class a{static{p(this,"EchoTaskRunner")}_app;_options;static params={name:"test-echo-runner",triggerConstraints:void 0,optionsSchema:{type:"formily",formily:{type:"object",properties:{...Jt}}},desc:"\u6D4B\u8BD5\u8F93\u51FA\u6267\u884C\u5668"};constructor(e,t){this._app=e,this._options=t}get options(){return this._options}get params(){return a.params}async run(e){let t=e.data;return t.me?tr.debug(t.me.nickName+"\u767B\u9646"):tr.debug("\u6536\u5230echo\u6D88\u606F\uFF1A"+e.from),{}}};import{scheduleJob as ys}from"node-schedule";var st=class a extends Ee{static{p(this,"CronTaskTrigger")}app;_options;static params={name:"cron-task-trigger",desc:"\u5B9A\u65F6\u4EFB\u52A1",optionsSchema:{type:"formily",formily:{type:"object",properties:{cron:{type:"string",title:"Cron\u8868\u8FBE\u5F0F","x-decorator":"FormItem","x-component":"CronEditor","x-component-props":{placeholder:"\u8BF7\u70B9\u51FB\u7F16\u8F91\u6309\u94AE\u8FDB\u884C\u7F16\u8F91",noYear:!0}},context:{type:"object",title:"\u4F20\u7ED9\u6267\u884C\u5668\u7684\u6570\u636E","x-decorator":"FormItem","x-component":"Code","x-decorator-props":{tooltip:"trigger\u53EF\u4EE5\u62FF\u5230\u8FD9\u91CC\u81EA\u5B9A\u4E49\u7684\u5185\u5BB9\uFF0C\u4E0D\u6E05\u695A\u5219\u65E0\u9700\u8BBE\u7F6E\u3002"}}}}}};constructor(e,t){super(e,t),this.app=e,this._options=t,this._logger=y(this._options.instanceName);let o=this._options.cron,s=this._options.cron?.trim().split(/\s+/);if(!s||s.length<5||s.length>7)throw new Error("cron\u8868\u8FBE\u5F0F\u4E0D\u6B63\u786E\uFF0C\u8BF7\u68C0\u67E5\u3002");s.length===7&&(s.splice(6,1),o=s.join(" "),this._logger.debug("cron\u8868\u8FBE\u5F0F\u5DF2\u5FFD\u7565\u5E74\u4EFD\uFF1A"+o)),this._job=ys(o,()=>this._options.onTask({from:a.params.name,data:this._options.context}))}_job;_logger;get options(){return this._options}get params(){return a.params}async dispose(){this._job.cancel()}};import xs from"emittery";import{createHash as Is}from"node:crypto";import{v4 as ue}from"uuid";import"recorder-core/src/engine/beta-amr.js";import"recorder-core/src/engine/beta-amr-engine.js";import"recorder-core/src/engine/wav.js";import ws from"form-data";import bs from"axios";var V=y("wcoa"),nt=class a{static{p(this,"WCOASource")}_options;static params={name:"wcoa",optionsSchema:{type:"formily",formily:{type:"object",properties:{...$,appId:{type:"string",title:"\u5F00\u53D1\u8005ID\uFF08App ID\uFF09","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5F00\u53D1\u63A5\u53E3\u7BA1\u7406\u4E2D\u7684\u5F00\u53D1\u8005ID"},"x-decorator-props":{tooltip:"\u5728\u5FAE\u4FE1\u5F00\u653E\u5E73\u53F0\u7684 \u8BBE\u7F6E\u4E0E\u5F00\u53D1-\u5F00\u53D1\u63A5\u53E3\u7BA1\u7406\u4E2D\u67E5\u770B\u3002"},required:!0},appSecret:{type:"string",title:"\u5F00\u53D1\u8005\u5BC6\u7801\uFF08App Secret\uFF09","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7ED1\u5B9A\u7684\u5F00\u653EAPI\u7684 Token"},"x-decorator-props":{tooltip:"\u5728\u5FAE\u4FE1\u5F00\u653E\u5E73\u53F0\u7684 \u8BBE\u7F6E\u4E0E\u5F00\u53D1-\u5F00\u53D1\u63A5\u53E3\u7BA1\u7406\u4E2D\u67E5\u770B\u3002\u53EF\u4EE5\u4F7F\u7528__\u53D8\u91CF\uFF0C \u5982\uFF1A __wechat_oa_secret\u3002\u53EA\u9700\u5728\u5BA2\u6237\u7AEF\u7684.secret.json\u4E2D\u914D\u7F6E\u5BF9\u5E94\u7684\u53D8\u91CF\u5373\u53EF\u3002"},required:!0},token:{type:"string",title:"Token","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7ED1\u5B9A\u7684\u5F00\u653EAPI\u7684 Token"},"x-decorator-props":{tooltip:"\u5728\u5FAE\u4FE1\u5F00\u653E\u5E73\u53F0\u7684 \u8BBE\u7F6E\u4E0E\u5F00\u53D1-\u5F00\u53D1\u63A5\u53E3\u7BA1\u7406-\u670D\u52A1\u5668\u914D\u7F6E\u4E2D\u67E5\u770B\u3002"},required:!0},aesKey:{type:"string",title:"AES Key","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7ED1\u5B9A\u7684\u5F00\u653EAPI\u7684 AES Key\uFF08\u5F53\u524D\u4EC5\u652F\u6301\u660E\u6587\u6A21\u5F0F\uFF0C\u65E0\u9700\u8F93\u5165\uFF09"},"x-decorator-props":{tooltip:"\u5F53\u524D\u5C1A\u672A\u652F\u6301\u52A0\u5BC6\u6A21\u5F0F\uFF0C\u8BF7\u5728\u5FAE\u4FE1\u516C\u4F17\u53F7\u540E\u53F0\u8BBE\u7F6E\u670D\u52A1\u5668\u914D\u7F6E\u4E3A\u660E\u6587\u6A21\u5F0F\u3002"},required:!1,"x-disabled":!0},apiBase:{type:"string",title:"API \u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 API \u5730\u5740\uFF0C\u9ED8\u8BA4 https://api.weixin.qq.com"},"x-decorator-props":{tooltip:""},default:"https://api.weixin.qq.com"}}}},eventNames:[f.CHAT_MESSAGE],desc:"\u5FAE\u4FE1\u516C\u4F17\u5E73\u53F0"};constructor(e){if(this._options=e,!this._options.token||!this._options.appId)throw new Error("appId\u3001token\u548CaesKey\u672A\u914D\u7F6E\u5B8C\u6574\uFF01");this.options.apiBase=this._options.apiBase??"https://api.weixin.qq.com",this.event=new xs}_token;_sendMessageUrl;_me;get params(){return a.params}get options(){return this._options}get actions(){return[{type:"api",actionName:"receive",action:{type:"normal",handler:p(e=>this._onChatMessage(e),"handler")}}]}event;async _onCheckSignature(e){let t=e.query,o=t.signature,s=this._options.token,r=t.echostr,i=t.timestamp,n=t.nonce,c=[s,i,n].sort().join(""),m=Is("sha1");if(m.update(c),m.digest("hex")==o)return r}async _loadToken(){let e=`${this._options.apiBase}/cgi-bin/token?grant_type=client_credential&appid=${this._options.appId}&secret=${Z(this._options.appSecret)}`,t=await(await fetch(e)).json();if(t.errmsg?.length){V.error(t.errmsg),setTimeout(()=>{this._loadToken()},10*60*1e3);return}this._token=t.access_token,this._sendMessageUrl=`${this._options.apiBase}/cgi-bin/message/custom/send?access_token=${this._token}`,V.trace("\u6210\u529F\u83B7\u53D6\u516C\u4F17\u53F7token:"+this._token);let o=Number(t.expires_in);return setTimeout(()=>{this._loadToken()},o/2*1e3),!0}async _loadMediaFile(e,t){let o=`${this._options.apiBase}/cgi-bin/media/get?access_token=${this._token}&media_id=${e}`,s=await fetch(o),r;if(s.headers.get("Content-Type").indexOf("json")>=0){let i=await s.json();if(i.errcode!==0){V.error(i.errmsg);return}r=b.fromPath(i.video_url,"binary",t)}else{let i=await s.arrayBuffer();r=b.fromBuffer(Buffer.from(i),t,"binary")}return r}async _uploadMediaFile(e,t){let o=`${this._options.apiBase}/cgi-bin/media/upload?access_token=${this._token}&type=${t}`,s=new ws,r=await e.asReadStream();s.append("media",r);let i={...s.getHeaders()};return(await bs({method:"post",url:o,headers:i,data:s,responseType:"json"})).data?.media_id}async _processMessage(e){this._me={userId:e.ToUserName,userName:e.ToUserName,nickName:e.ToUserName};let t={atList:[],time:new Date(e.CreateTime*1e3),senderId:e.FromUserName,fromId:e.FromUserName,isGroupChat:!1,isSender:!1,senderName:e.FromUserName,senderInfo:{userName:e.FromUserName,userId:e.FromUserName,nickName:e.FromUserName,origin:e.FromUserName},toInfo:[this._me],origin:e,messageId:e.MsgId,type:void 0,content:void 0};switch(e.MsgType){case"text":{let s=e;t.type=l.TEXT,t.content=s.Content;break}case"image":{t.type=l.IMAGE;let s=e,i={file:b.fromPath(s.PicUrl,"binary",ue()+".png")};t.content=i;break}case"voice":{let s=e;if(s.Format.toLowerCase()!=="amr"){V.warn("\u4E0D\u652F\u6301\u7684\u8BED\u97F3\u683C\u5F0F\uFF1A"+s.Format);break}t.type=l.AUDIO;let r=await this._loadMediaFile(s.MediaId,ue()+".amr"),i=await Ie(await r.asBuffer());await i.asLocalPath();let n={file:i};t.content=n;break}case"video":case"shortvideo":{let s=e;t.type=l.VIDEO;let r=await this._loadMediaFile(s.MediaId,ue()+".mp4"),i=await this._loadMediaFile(s.ThumbMediaId,ue()+".png"),n={file:r,previewImage:i};t.content=n;break}case"link":{t.type=l.ARTICLE;let s=e,r={url:s.Url,title:s.Title,desc:s.Description};t.content=r;break}case"location":{t.type=l.POSITION;let s=e,r={placeName:s.Label,placeDetail:s.Label,lon:s.Location_X,lat:s.Location_Y,mapLevel:s.Scale};t.content=r;break}case"event":{let s=e;switch(s.Event){case"subscribe":t.type=l.SUBSCRIBE,t.content={isSubscribe:!0};break;case"unsubscribe":t.type=l.UNSUBSCRIBE,t.content={isSubscribe:!1};break;default:V.warn("\u6536\u5230\u4E0D\u652F\u6301\u7684\u4E8B\u4EF6\u7C7B\u578B\uFF1A"+s.Event);return}break}default:{V.warn("\u6536\u5230\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e.MsgType);return}}let o={id:ue(),type:f.CHAT_MESSAGE,message:t,source:this,me:this._me,onGenerating:p(()=>this._setTyping(t.fromId),"onGenerating")};this.event.emit(o.type,o)}async _onChatMessage(e){if(this._onCheckSignature(e)){if(e.method.toLowerCase()==="get")return e.query.echostr}else return V.warn("\u68C0\u6D4B\u5230\u975E\u6CD5\u8BF7\u6C42\uFF01"),V.debug(e.body),"error";return this._processMessage(e.body.xml),"success"}async _setTyping(e){try{let t=`${this._options.apiBase}/cgi-bin/message/custom/typing?access_token=${this._token}`,o=await(await fetch(t,{method:"post",body:JSON.stringify({touser:e,command:"Typing"})})).json()}catch{V.info("\u8BBE\u7F6Etyping\u72B6\u6001\u5931\u8D25\uFF01")}}async me(){return this._me??{userId:"gh",userName:"gh",nickName:"gh-\u6536\u5230\u6D88\u606F\u540E\u624D\u80FD\u66F4\u65B0"}}hasLogin(){return!!this._token?.length}async login(){if(await this._loadToken()){let e={type:f.LOGIN,user:this._me,id:ue(),source:this,me:this._me};this.event.emit(e.type,e)}}async sendMessage(e,t){this.event.emit(f.RESPONSE_MESSAGE,{id:ue(),type:f.CHAT_MESSAGE,message:e,fromMessage:t,source:this,me:this._me});let o={touser:e.toInfo[0].userId};switch(e.type){case l.TEXT:{o.msgtype="text";let r=e.content;r.indexOf("(http")>=0&&(r=me(r)),o.text={content:r};break}case l.IMAGE:{o.msgtype="image";let r=await this._uploadMediaFile(e.content.file,"image");if(!r){V.warn("\u4E0A\u4F20\u56FE\u7247\u5931\u8D25\uFF01");return}o.image={media_id:r};break}case l.AUDIO:{o.msgtype="voice";let r=e.content.file,{file:i}=await pe(r),n=await this._uploadMediaFile(i,"voice");if(!n){V.warn("\u4E0A\u4F20\u8BED\u97F3\u5931\u8D25\uFF01");return}o.voice={media_id:n};break}case l.VIDEO:{o.msgtype="video";let r=e.content;if(!r.previewImage){V.warn("\u89C6\u9891\u6CA1\u6709\u9884\u89C8\u56FE\uFF0C\u65E0\u6CD5\u53D1\u9001\uFF01");return}let i=await this._uploadMediaFile(r.file,"video"),n=await this._uploadMediaFile(r.previewImage,"image");o.video={media_id:i,thumb_media_id:n,title:r.title??ue()+".mp4",description:r.desc??"\u4E00\u4E2A\u89C6\u9891"};break}case l.ARTICLE:{o.msgtype="news";let r=e.content,i=r.coverFile??r.thumbFile,n;i&&(n=await i.asUrl()),o.news={articles:[{title:r.title,description:r.desc??r.title,url:r.url,picurl:n}]};break}default:V.warn("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e.type);break}let s=await(await fetch(this._sendMessageUrl,{method:"post",headers:{"content-type":"application/json"},body:JSON.stringify(o)})).json();s.errcode!==0&&V.error(s.errmsg)}async getContacts(e,t=!1){return[]}async getContactDetail(e){return e}};import vs from"emittery";import{DWClient as ks,TOPIC_ROBOT as or}from"dingtalk-stream";import{v4 as ie}from"uuid";import Ss from"form-data";import Cs from"axios";import{getWavFileInfo as Ts}from"wav-file-decoder";import As from"node-video-lib";var T=y("ding-robot"),it=class a{static{p(this,"DingRobotSource")}_app;_options;static params={name:"dingbot",optionsSchema:zo({...$,clientId:{type:"string",title:"\u5BA2\u6237\u7AEFID","x-decorator":"FormItem","x-component":"Input","x-validator":{required:!0,message:"\u5BA2\u6237\u7AEFID\u4E0D\u80FD\u4E3A\u7A7A"},"x-component-props":{placeholder:"\u8BF7\u586B\u5165Client ID\uFF0C\u975EApp ID"},"x-decorator-props":{tooltip:"\u5728\u5E94\u7528\u5217\u8868\u4E2D\uFF0C\u8FDB\u5165\u5E94\u7528\u7BA1\u7406\uFF0C\u5DE6\u4FA7\u57FA\u7840\u4FE1\u606F-\u51ED\u8BC1\u4E0E\u57FA\u7840\u4FE1\u606F\u9875\u9762\u67E5\u770B\u3002"}},clientSecret:{type:"string",title:"\u5BA2\u6237\u7AEF\u5BC6\u94A5","x-decorator":"FormItem","x-component":"Input","x-validator":{required:!0,message:"\u5BA2\u6237\u7AEF\u5BC6\u94A5\u4E0D\u80FD\u4E3A\u7A7A"},"x-component-props":{placeholder:"\u8BF7\u586B\u5165Client Secret"},"x-decorator-props":{tooltip:"\u5728\u5E94\u7528\u5217\u8868\u4E2D\uFF0C\u8FDB\u5165\u5E94\u7528\u7BA1\u7406\uFF0C\u5DE6\u4FA7\u57FA\u7840\u4FE1\u606F-\u51ED\u8BC1\u4E0E\u57FA\u7840\u4FE1\u606F\u9875\u9762\u67E5\u770B\u3002"}},corpId:{type:"string",title:"\u4F01\u4E1AID","x-decorator":"FormItem","x-component":"Input","x-validator":{required:!0,message:"\u4F01\u4E1AID\u4E0D\u80FD\u4E3A\u7A7A"},"x-component-props":{placeholder:"\u8BF7\u586B\u5165Corp ID"},"x-decorator-props":{tooltip:"\u4F01\u4E1AID\uFF0C\u53EF\u4EE5\u5728\u9489\u9489\u5F00\u653E\u5E73\u53F0\u9996\u9875\u770B\u5230\u3002\u4E00\u822C\u4EE5ding\u5F00\u5934\u3002"}},apiHost:{type:"string",title:"API\u4E3B\u673A\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u4E3B\u673A\u5730\u5740"},default:"https://api.dingtalk.com"},oldApiHost:{type:"string",title:"\u65E7API\u4E3B\u673A\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u65E7API\u4E3B\u673A\u5730\u5740"},default:"https://oapi.dingtalk.com"},agentId:{type:"number",title:"Agent ID","x-decorator":"FormItem","x-component":"NumberPicker","x-validator":{required:!0,message:"Agent ID\u4E0D\u80FD\u4E3A\u7A7A"},"x-decorator-props":{tooltip:"\u5728\u5E94\u7528\u5217\u8868\u4E2D\uFF0C\u8FDB\u5165\u5E94\u7528\u7BA1\u7406\uFF0C\u5DE6\u4FA7\u57FA\u7840\u4FE1\u606F-\u51ED\u8BC1\u4E0E\u57FA\u7840\u4FE1\u606F\u9875\u9762\u67E5\u770B\uFF0C\u540D\u4E3A \u539F\u4F01\u4E1A\u5185\u90E8\u5E94\u7528AgentId \u3002"}},robotCode:{type:"string",title:"\u673A\u5668\u4EBA\u4EE3\u7801","x-decorator":"FormItem","x-component":"Input","x-validator":{required:!0,message:"\u673A\u5668\u4EBA\u4EE3\u7801\u4E0D\u80FD\u4E3A\u7A7A"},"x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u673A\u5668\u4EBA\u7684\u4EE3\u7801"},"x-decorator-props":{tooltip:"\u5728\u5E94\u7528\u5217\u8868\u4E2D\uFF0C\u8FDB\u5165\u5E94\u7528\u7BA1\u7406\uFF0C\u5DE6\u4FA7\u5E94\u7528\u80FD\u529B-\u673A\u5668\u4EBA\u9875\u9762\uFF0C\u70B9\u51FB\u590D\u5236 RobotCode \u5373\u53EF\u3002"}},markdownMsgTitle:{type:"string",title:"Markdown\u6D88\u606F\u6807\u9898","x-decorator":"FormItem","x-component":"Input","x-decorator-props":{tooltip:"\u5F53\u53D1\u9001\u6587\u672C\u7C7B\u6D88\u606F\u7684\u65F6\u5019\uFF0C\u9489\u9489\u652F\u6301\u63D0\u4F9B\u4E00\u4E2A\u6807\u9898\uFF0C\u6807\u9898\u4F1A\u5728\u5217\u8868\u4E2D\u5C55\u793A\u3002\u9ED8\u8BA4\u662FAI\u56DE\u590D\u7684\u524D16\u4E2A\u5B57\u3002\u5982\u679C\u914D\u7F6E\u8FD9\u4E2A\u53C2\u6570\uFF0C\u5219\u4F1A\u56FA\u5B9A\u7528\u8FD9\u4E2A\u6807\u9898\u3002\u9ED8\u8BA4\u6536\u5230\u7684\u6D88\u606F\u5185\u5BB9\u7684\u524D16\u4E2A\u5B57\u3002"}},sendAudioFormat:{type:"string",enum:["wav","amr"],title:"\u53D1\u9001\u97F3\u9891\u683C\u5F0F","x-decorator":"FormItem","x-component":"Select","x-decorator-props":{tooltip:"\u53D1\u9001\u97F3\u9891\u65F6\u7684\u683C\u5F0F\uFF0C\u9ED8\u8BA4amr\uFF0C\u53EF\u9009wav\uFF0Camr\u6587\u4EF6\u5C3A\u5BF8\u5C0F\uFF0C\u6548\u679C\u7565\u4F4E\u4E8Ewav\u3002"},default:"amr"},streamTemplateId:{type:"string",title:"\u6D41\u5F0F\u6A21\u677FID","x-decorator":"FormItem","x-component":"Input","x-decorator-props":{tooltip:"\u5982\u679C\u914D\u7F6E\u4E86\u8BE5\u53C2\u6570\uFF0C\u5219\u5F00\u542F\u6D41\u5F0F\u56DE\u590D\u3002\u9700\u8981\u5F00\u653E\u5E94\u7528\u7684\u5361\u7247\u76F8\u5173\u6743\u9650\u3002\u5361\u7247\u521B\u5EFA\u5730\u5740\uFF1Ahttps://open-dev.dingtalk.com/fe/card?spm=ding_open_doc.document.0.0.33e01934gUydw0"}},contactsCacheTime:{type:"number",title:"\u8054\u7CFB\u4EBA\u7F13\u5B58\u65F6\u95F4\uFF08\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-decorator-props":{tooltip:"\u8054\u7CFB\u4EBA\u7F13\u5B58\u65F6\u95F4\uFF0C\u5355\u4F4D\u662F\u79D2\uFF0C\u9ED8\u8BA424\u5C0F\u65F6"},"x-component-props":{min:60*60},default:24*60*60},contactDepartId:{type:"number",title:"\u8054\u7CFB\u4EBA\u5217\u8868ID","x-decorator":"FormItem","x-component":"InputNumber","x-decorator-props":{tooltip:"\u8054\u7CFB\u4EBA\u7684\u5217\u8868ID\uFF0C\u53EF\u4EE5\u4ECE\u9489\u9489API Explorer\u76F8\u5173\u63A5\u53E3\u83B7\u53D6\uFF08\u4ECE\u6839\u8DEF\u5F84\u5F00\u59CB\u4E00\u5C42\u5C42\u83B7\u53D6\uFF09\u3002\u9ED8\u8BA41\uFF0C\u8868\u793A\u6839\u8DEF\u5F84\u3002\u5982\u679C\u5E0C\u671B\u53EA\u6709\u90E8\u5206\u90E8\u95E8\u7684\u7528\u6237\u53EF\u88AB\u524D\u7AEF\u9009\u53D6\uFF0C\u53EF\u4EE5\u8BBE\u7F6E\u4E0A\u7EA7\u90E8\u95E8ID\u3002"},default:1},contactAutoloadOnStart:{type:"boolean",title:"\u542F\u52A8\u65F6\u81EA\u52A8\u52A0\u8F7D\u8054\u7CFB\u4EBA","x-decorator":"FormItem","x-component":"Switch","x-decorator-props":{tooltip:"\u662F\u5426\u5728\u7CFB\u7EDF\u542F\u52A8\u7684\u65F6\u5019\u5C31\u81EA\u52A8\u83B7\u53D6\u8054\u7CFB\u4EBA\u3002\u9ED8\u8BA4true\u3002\u5982\u679C\u5458\u5DE5\u8F83\u591A\uFF0C\u5EFA\u8BAE\u542F\u52A8\u65F6\u83B7\u53D6\uFF0C\u907F\u514D\u7B2C\u4E00\u6B21\u4F7F\u7528\u7B49\u5F85\u65F6\u95F4\u8FC7\u957F\u3002"},default:!0},contactSleepMS:{type:"number",title:"\u8054\u7CFB\u4EBA\u83B7\u53D6\u95F4\u9694\uFF08\u6BEB\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-decorator-props":{tooltip:"\u9012\u5F52\u8C03\u7528\u83B7\u53D6\u7528\u6237\u63A5\u53E3\u53EF\u80FD\u89E6\u53D1\u9650\u6D41\uFF0C\u6B64\u65F6\u53EF\u4EE5\u8BBE\u7F6E\u83B7\u53D6\u95F4\u9694\uFF0C\u9ED8\u8BA4\u662F30ms\u4E00\u6B21\uFF0C\u5982\u679C\u4ECD\u7136\u89E6\u53D1\uFF0C\u53EF\u4EE5\u8C03\u5927\u3002"},default:30}}),eventNames:[f.CHAT_MESSAGE],supportedFileExts:["xlsx","pdf","zip","rar","doc","docx"],desc:"\u9489\u9489\u5E94\u7528"};constructor(e,t){this._app=e,this._options=t,this._trackIdCache={},this._contacts=[],this._departIdNameMap=new Map,this._options.apiHost=this._options.apiHost??"https://api.dingtalk.com",this._options.oldApiHost=this._options.oldApiHost??"https://oapi.dingtalk.com",this._options.sendAudioFormat=this._options.sendAudioFormat??"amr",this._options.streamTemplateId?.length||T.info("\u60A8\u53EF\u4EE5\u53C2\u8003\u4EE5\u4E0B\u94FE\u63A5\uFF0C\u521B\u5EFA\u5361\u7247\u6A21\u677F\u540E\uFF0C\u5C06\u6A21\u677FID\u914D\u7F6E\u5230source\u9009\u9879\u4E2D\uFF0C\u652F\u6301\u6D41\u5F0F\u56DE\u590D\uFF1Ahttps://open.dingtalk.com/document/orgapp/typewriter-effect-streaming-ai-card"),this._options.contactsCacheTime=this._options.contactsCacheTime??24*60*60,T.trace("\u8054\u7CFB\u4EBA\u7F13\u5B58\u6709\u6548\u671F\uFF1A"+this._options.contactsCacheTime/60/60+"\u5C0F\u65F6"),this._options.contactDepartId=this._options.contactDepartId??1,this._options.contactSleepMS=this._options.contactSleepMS??30,this._options.contactAutoloadOnStart=this._options.contactAutoloadOnStart??!0,this.event=new vs}_token;_oldToken;_talkClient;_me;_trackIdCache;_contacts;_contactLoadingPromise;_departIdNameMap;get params(){return a.params}get options(){return this._options}get actions(){return[]}event;async _loadToken(){try{let e=`${this._options.apiHost}/v1.0/oauth2/${this._options.corpId}/token`,t=await(await fetch(e,{method:"post",body:JSON.stringify({client_id:this._options.clientId,client_secret:this._options.clientSecret,grant_type:"client_credentials"}),headers:{"Content-Type":"application/json"}})).json();if(!t.access_token){T.warn("\u83B7\u53D6\u9489\u9489\u5E94\u7528token\u5931\u8D25\uFF1A"+t.message),setTimeout(()=>{this._loadToken()},10*60*1e3);return}let o=Number(t.expires_in);this._token=t.access_token,T.trace("\u6210\u529F\u83B7\u53D6\u9489\u9489\u5E94\u7528token\uFF1A"+this._token),e=`${this._options.oldApiHost}/gettoken?appkey=${this._options.clientId}&appsecret=${this._options.clientSecret}`;let s=await(await fetch(e)).json();if(!s.access_token){T.warn("\u83B7\u53D6\u9489\u9489\u5E94\u7528token\u5931\u8D25\uFF1A"+s.errmsg),setTimeout(()=>{this._loadToken()},10*60*1e3);return}this._oldToken=s.access_token,T.trace("\u6210\u529F\u83B7\u53D6\u9489\u9489\u5F15\u7528\u65E7\u7248token\uFF1A"+this._oldToken),o=Math.min(Number(t.expires_in),o),setTimeout(()=>{this._loadToken()},o/2*1e3)}catch(e){T.error(e),setTimeout(()=>{this._loadToken()},10*60*1e3)}}async _api(e,t,o=void 0){let s=`${this._options.apiHost}${e}`,r;return t==="get"?r=await(await fetch(s,{headers:{"x-acs-dingtalk-access-token":this._token}})).json():r=await(await fetch(s,{headers:{"x-acs-dingtalk-access-token":this._token,"Content-Type":"application/json"},method:t,body:JSON.stringify(o)})).json(),r}async _oldApi(e,t,o=void 0){let s=`${this._options.oldApiHost}${e}?access_token=${this._oldToken}`,r;return t==="get"?r=await(await fetch(s)).json():r=await(await fetch(s,{headers:{"Content-Type":"application/json"},method:t,body:JSON.stringify(o)})).json(),r.errcode!==0&&T.error(r.errmsg),r.result}async _downloadMedia(e,t){let o=await this._api("/v1.0/robot/messageFiles/download","post",{robotCode:this._options.robotCode,downloadCode:e});if(o.downloadUrl?.length)return b.fromPath(o.downloadUrl,"binary",t)}async _onChatMessage(e){let t={time:new Date(e.createAt),senderId:e.senderStaffId,fromId:e.senderStaffId,isGroupChat:!1,isSender:!1,senderName:e.senderStaffId,senderInfo:{userId:e.senderStaffId,userName:e.senderStaffId,nickName:e.senderNick},toInfo:[this._me],origin:e,messageId:e.msgId,type:void 0,content:void 0};switch(e.conversationType==="2"&&(t.fromId=e.conversationId,t.isGroupChat=!0,t.atList=[this._me.userId],t.groupInfo={userId:e.conversationId,userName:e.conversationId,nickName:e.conversationTitle}),e.msgtype){case"text":{t.type=l.TEXT,t.content=e.text.content;break}case"audio":{let o=e.content,r={file:await this._downloadMedia(o.downloadCode,ie()+".ogg"),text:o.recognition};t.type=l.AUDIO,t.content=r;break}case"richText":{let o={content:[]},s=e.content;for(let r of s.richText)if(r.downloadCode?.length){let i=r,c={file:await this._downloadMedia(i.downloadCode,ie()+".png")};o.content.push({type:"image",data:c})}else if(typeof r.text=="string"){let i=r;o.content.push({type:"text",data:i.text})}else T.warn("\u4E0D\u80FD\u8BC6\u522B\u7684rich text content"),T.warn(r);t.type=l.RICH_TEXT,t.content=o;break}case"file":{let o=e.content,r={file:await this._downloadMedia(o.downloadCode,o.fileName),title:o.fileName,desc:o.fileName};t.type=l.FILE,t.content=r;break}case"picture":{let o=e.content,r={file:await this._downloadMedia(o.downloadCode,ie()+".png")};t.type=l.IMAGE,t.content=r;break}case"video":{let o=e.content,r={file:await this._downloadMedia(o.downloadCode,ie()+"."+o.videoType)};t.type=l.VIDEO,t.content=r;break}default:T.warn("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e.msgtype),T.debug(e);return}if(t.content){let o={id:ie(),type:f.CHAT_MESSAGE,message:t,source:this,me:this._me};this.event.emit(o.type,o)}}async _sendByWebhook(e){let t=Z(e.toInfo[0].userId??e.toInfo[0].userName);if(!t.startsWith("http")){T.warn("\u7FA4\u673A\u5668\u4EBA\u7684webhook\u4FE1\u606F\u914D\u7F6E\u6709\u8BEF\uFF01");return}let o={at:{}};if(e.atList?.length)if(e.atList[0]==="@all")o.at.isAtAll=!0;else{let s=[],r=[];e.atList.forEach(i=>{Lt(i)?s.push(i):r.push(i)}),o.at.atMobiles=s,o.at.atUserIds=r}switch(e.type){case l.TEXT:{o.msgtype="markdown";let s=e.content;o.markdown={text:s,title:this._options.markdownMsgTitle??e.content.slice(0,Math.min(e.content.length,16))};break}case l.AUDIO:{let s=e.content;if(!s.text?.length){T.warn("\u5F53\u524D\u97F3\u9891\u6CA1\u6709\u5BF9\u5E94\u7684\u6587\u5B57\uFF0C\u5C06\u4E0D\u4F1A\u88AB\u9489\u9489\u673A\u5668\u4EBA\u53D1\u9001\uFF01");return}o.msgtype="markdown",o.markdown={text:s.text,title:this._options.markdownMsgTitle??s.text.slice(0,Math.min(s.text.length,16))};break}case l.IMAGE:{let s=e.content,r=await this._getPublicUrl(s.file);o.msgtype="markdown",o.markdown={text:`![\u56FE\u7247](${r})`,title:"\u6536\u5230\u4E00\u5F20\u56FE\u7247"};break}case l.ARTICLE:{let s=e.content;o.msgtype="link",o.link={title:s.title,messageUrl:s.url,text:s.desc??s.title,picUrl:await(s.coverFile??s.thumbFile??this._app.sharedLogo).asUrl()};break}}o.msgtype&&await fetch(t,{method:"post",headers:{"content-type":"application/json"},body:JSON.stringify(o)})}async _getPublicUrl(e){if(e)return await e.asUrl()}async _uploadMediaFile(e,t){let o=`${this._options.oldApiHost}/media/upload?access_token=${this._oldToken}`,s=new Ss,r=await e.asReadStream();s.append("media",r),s.append("type",t);let i={...s.getHeaders()},n=await Cs({method:"post",url:o,headers:i,data:s,responseType:"json"});if(n.data?.errcode!==0){T.error("\u4E0A\u4F20\u6587\u4EF6\u5931\u8D25\uFF01");return}return n.data?.media_id}async _sendByAPI(e,t){let o={robotCode:this._options.robotCode},s;if(e.isGroupChat)s="/v1.0/robot/groupMessages/send",o.openConversationId=e.toInfo[0].userId;else{let r=e.toInfo.map(i=>i.userId);o.userIds=r,s="/v1.0/robot/oToMessages/batchSend"}switch(e.type){case l.TEXT:if(this._options.streamTemplateId?.length&&t?.origin?.outTrackId?.length){let r=t.origin.outTrackId,i=(this._trackIdCache[r]??"")+e.content;this._trackIdCache[r]=i,await this._api("/v1.0/card/streaming","put",{outTrackId:r,guid:ie(),key:"content",content:i,isFull:!0,isFinalize:!1,isError:!1});return}else{o.msgKey="sampleMarkdown",o.msgParam={title:this._options.markdownMsgTitle??e.content.slice(0,Math.min(e.content.length,16)),text:`${e.content}`};break}case l.IMAGE:{o.msgKey="sampleImageMsg";let r=e.content;o.msgParam={photoURL:await this._getPublicUrl(r.file)};break}case l.ARTICLE:{o.msgKey="sampleLink";let r=e.content,i=await this._getPublicUrl(r.coverFile??this._app.sharedCover);o.msgParam={text:r.desc??r.title,title:r.title,picUrl:i,messageUrl:r.url};break}case l.AUDIO:{let r=e.content,i,n;if(this._options.sendAudioFormat==="amr"){let c=await pe(r.file);i=await this._uploadMediaFile(c.file,"voice"),n=c.duration}else{i=await this._uploadMediaFile(r.file,"voice");let c=Ts((await r.file.asBuffer()).buffer);n=parseInt(c.chunkInfo[1].dataLength/c.fmt.bytesPerSec*1e3)}o.msgKey="sampleAudio",o.msgParam={mediaId:i,duration:n};break}case l.FILE:{let r=e.content,i=r.file.name.slice(r.file.name.lastIndexOf(".")+1);a.params.supportedFileExts.indexOf(i)<0&&(i=r.title?.slice(r.title.lastIndexOf(".")+1),a.params.supportedFileExts.indexOf(i)<0&&(T.warn("\u4E0D\u652F\u6301\u7684\u6587\u4EF6\u7C7B\u578B\uFF1A"+i+",\u6765\u81EA\u6587\u4EF6\uFF1A"+r.file.name),T.warn("\u6587\u4EF6\u6807\u9898\uFF1A"+r.title),T.warn("\u76EE\u524D\u652F\u6301\u7684\u7C7B\u578B\uFF1A"+a.params.supportedFileExts.join(","))));let n=await this._uploadMediaFile(r.file,"file");o.msgKey="sampleFile",o.msgParam={mediaId:n,fileName:r.title??r.file.name,fileType:i};break}case l.VIDEO:{let r=e.content;if(!r.file.name.endsWith(".mp4")&&!r.title?.endsWith(".mp4")){T.warn("\u5F53\u524D\u9489\u9489\u4EC5\u652F\u6301mp4\u6587\u4EF6\u4E0A\u4F20\uFF01");return}r.previewImage?.name||T.info("mp4\u6587\u4EF6\u5EFA\u8BAE\u63D0\u4F9B\u9884\u89C8\u56FE\uFF01");let i=As.MovieParser.parse(await r.file.asBuffer()),n=await this._uploadMediaFile(r.file,"video");if(o.msgKey="sampleVideo",o.msgParam={duration:String(i.duration/1e3),videoMediaId:n,videoType:"mp4"},r.previewImage?.name){let c=await this._uploadMediaFile(r.previewImage,"image");o.msgParam.picMediaId=c}break}default:{T.warn("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e.type);return}}o.msgParam&&(o.msgParam=JSON.stringify(o.msgParam),this._api(s,"post",o))}async _getDepartList(e,t){this._options.contactSleepMS>0&&await Be(this._options.contactSleepMS),T.debug("get depart of "+e);let o=await this._oldApi("/topapi/v2/department/listsub","post",{dept_id:e});if(t.push(e),o?.length)for(let s of o)this._departIdNameMap.set(s.dept_id,s.name),await this._getDepartList(s.dept_id,t)}async _getDepartUsers(e,t){this._options.contactSleepMS>0&&await Be(this._options.contactSleepMS);let o=await this._oldApi("/topapi/v2/user/list","post",{dept_id:e,cursor:t,size:100}),s=[];if(o?.list.length){for(let r of o.list)s.push({userId:r.userid,userName:r.userid,nickName:r.name,avatarUrl:r.avatar,bigAvatarUrl:r.avatar,signature:r.remark,origin:r});o.has_more&&s.push(...await this._getDepartUsers(e,o.next_cursor))}return T.debug("\u90E8\u95E8 id "+e+",name "+this._departIdNameMap.get(e)+" \u4E0B\u5171\u6709"+s.length+"\u4E2A\u8054\u7CFB\u4EBA"),s}async me(){if(this._me)return this._me;if(!this._options.clientId||!this._options.clientSecret)return this._me={userId:"\u533F\u540D\u673A\u5668\u4EBA",userName:"\u533F\u540D\u673A\u5668\u4EBA",nickName:"\u533F\u540D\u673A\u5668\u4EBA"},this._me;try{let t=(await this._api("/v1.0/microApp/allInnerApps","get")).appList.find(o=>o.agentId===Number(this._options.agentId));this._me={userId:t.agentId??this._options.agentId,userName:t.name??this._options.agentId,avatarUrl:t.icon,bigAvatarUrl:t.icon,nickName:t.name??this._options.agentId,origin:t}}catch{T.warn("\u6CA1\u6709\u627E\u5230agentId\u4E3A"+this._options.agentId+"\u5E94\u7528\uFF0C\u8BF7\u68C0\u67E5\u662F\u5426\u5F00\u901A\u4E86\u5E94\u7528\u7BA1\u7406\u76F8\u5173\u6743\u9650\u6216\u8005id\u662F\u5426\u6B63\u786E\uFF01"),this._me={userId:this._options.agentId.toString(),userName:this._options.agentId.toString(),nickName:"\u9489\u9489\u5E94\u7528-"+this._options.agentId}}return this._me}hasLogin(){return!!(this._options.clientId&&this._options.clientSecret&&this._talkClient?.connected||!this._options.clientId||!this._options.clientSecret)}async login(){if(this._talkClient?.connected){T.warn("\u5F53\u524D\u8FDE\u63A5\u5DF2\u7ECF\u5F00\u542F\uFF0C\u65E0\u9700\u91CD\u590D\u767B\u5F55\uFF01");return}this._options.clientId&&this._options.clientSecret?(this._talkClient?this._talkClient.removeAllListeners(or):(await this._loadToken(),this._talkClient=new ks({clientId:this._options.clientId,clientSecret:this._options.clientSecret,debug:this._options.debug??process.env.LOG_LEVEL==="debug"})),this._talkClient.registerCallbackListener(or,o=>{this._talkClient.socketCallBackResponse(o.headers.messageId,"success");let s=JSON.parse(o.data);this._onChatMessage(s)}),await this._talkClient.connect()):T.info("\u6CA1\u6709\u914D\u7F6E\u9489\u9489\u5E94\u7528\u7684client\u4FE1\u606F\uFF0C\u53EA\u80FD\u4F7F\u7528\u7FA4\u673A\u5668\u4EBA\u53D1\u9001\u6D88\u606F\uFF0C\u65E0\u6CD5\u63A5\u6536\u6D88\u606F\uFF01");let e=await this.me();this._options.contactAutoloadOnStart&&!this._contacts.length&&(T.debug("get contacts from login method"),await this.getContacts("all"));let t={id:ie(),source:this,me:e,user:e,type:f.LOGIN};!this._talkClient||this._talkClient.connected?this.event.emit(t.type,t):this._talkClient.socket.on("open",()=>{this.event.emit(t.type,t)})}async beforeSend(e){if((e.type===l.TEXT||e.type===l.RICH_TEXT||e.type===l.AUDIO||e.type===l.REF)&&this._options.streamTemplateId?.length){let t=ie(),o;e.isGroupChat?o={cardTemplateId:this._options.streamTemplateId,outTrackId:t,cardData:{cardParamMap:{}},imGroupOpenSpaceModel:{supportForward:!1},imGroupOpenDeliverModel:{robotCode:this._options.robotCode},openSpaceId:`dtv1.card//IM_GROUP.${e.fromId}`}:o={cardTemplateId:this._options.streamTemplateId,outTrackId:t,cardData:{cardParamMap:{}},imRobotOpenSpaceModel:{supportForward:!1},imRobotOpenDeliverModel:{spaceType:"IM_ROBOT",robotCode:this._options.robotCode},openSpaceId:`dtv1.card//IM_ROBOT.${e.fromId}`},(await this._api("/v1.0/card/instances/createAndDeliver","post",o)).success&&(e.origin.outTrackId=t)}}async afterSend(e){let t=e.origin?.outTrackId;if(!t?.length)return;let o=this._trackIdCache[t]??"";await this._api("/v1.0/card/streaming","put",{outTrackId:t,guid:ie(),key:"content",content:o,isFull:!0,isFinalize:!0,isError:!1}),delete this._trackIdCache[t]}sendMessage(e,t){this.event.emit(f.RESPONSE_MESSAGE,{id:ie(),type:f.CHAT_MESSAGE,message:e,fromMessage:t,source:this,me:this._me});let o=e.toInfo[0];return(o.userId??o.userName).startsWith("http")||o.userId.startsWith("__")?this._sendByWebhook(e):this._sendByAPI(e,t)}async getContacts(e,t=!1){return T.trace("=========================================================="),e==="group"?(T.warn("\u9489\u9489\u6682\u4E0D\u652F\u6301\u83B7\u53D6\u4F1A\u8BDD\u7FA4\u7EC4\uFF01"),[]):this._contacts.length&&!t?(T.trace("get contacts from cache"),this._contacts):this._contactLoadingPromise?this._contactLoadingPromise:(this._contactLoadingPromise=(async()=>{T.trace("loading ding contacts");let o=[];await this._getDepartList(this._options.contactDepartId,o);let s=new Set;for(let r of o)(await this._getDepartUsers(r,0)).forEach(n=>{s.add(n)});return this._contacts=Array.from(s),this._contactLoadingPromise=void 0,T.debug("\u5171\u83B7\u53D6\u5230"+this._contacts.length+"\u4E2A\u9489\u9489\u8054\u7CFB\u4EBA"),this._contacts})(),setTimeout(()=>{this.getContacts("all",!0)},this._options.contactsCacheTime*1e3),this._contactLoadingPromise)}async getContactDetail(e){return e}dispose(){this._talkClient?.connected&&this._talkClient.disconnect()}};import Es from"emittery";import{decrypt as rr,getSignature as Ns}from"@wecom/crypto";import{v4 as z}from"uuid";import{XMLParser as Fs}from"fast-xml-parser";import Ms from"form-data";import Os from"axios";import Ps from"md5";var k=y("wework-app"),at=class a{static{p(this,"WeWorkSource")}_app;_options;static params={name:"wework-app",optionsSchema:{type:"formily",formily:{type:"object",properties:{...$,corpId:{type:"string",title:"\u4F01\u4E1AID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u4F01\u4E1AID"},"x-decorator-props":{tooltip:"\u4F01\u5FAE\u540E\u53F0-\u6211\u7684\u4F01\u4E1A \u6700\u4E0B\u65B9\u67E5\u770B"},required:!0},agentId:{type:"string",title:"Agent ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7684 Agent ID"},"x-decorator-props":{tooltip:"\u4F01\u5FAE\u540E\u53F0-\u5E94\u7528\u7BA1\u7406-\u81EA\u5EFA \u5E94\u7528\u9875\u9762\u8BE6\u60C5\u67E5\u770B"},required:!0},secret:{type:"string",title:"Secret","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7684 Secret"},"x-decorator-props":{tooltip:"\u4F01\u5FAE\u540E\u53F0-\u5E94\u7528\u7BA1\u7406-\u81EA\u5EFA \u5E94\u7528\u9875\u9762\u8BE6\u60C5\u67E5\u770B"},required:!0},token:{type:"string",title:"Token","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u63A5\u53E3\u6D88\u606F\u7684 Token"},"x-decorator-props":{tooltip:"\u4F01\u5FAE\u540E\u53F0-\u5E94\u7528\u7BA1\u7406-\u81EA\u5EFA-\u5E94\u7528\u8BE6\u60C5\u9875-\u529F\u80FD-\u6D88\u606F\u63A5\u6536-\u542F\u7528API\u63A5\u53E3 \u4E2D\u914D\u7F6E\u67E5\u770B"},required:!0},aesKey:{type:"string",title:"AES Key","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u63A5\u6536\u6D88\u606F\u7684 AES Key"},"x-decorator-props":{tooltip:"\u4F01\u5FAE\u540E\u53F0-\u5E94\u7528\u7BA1\u7406-\u81EA\u5EFA-\u5E94\u7528\u8BE6\u60C5\u9875-\u529F\u80FD-\u6D88\u606F\u63A5\u6536-\u542F\u7528API\u63A5\u53E3 \u4E2D\u914D\u7F6E\u67E5\u770B"},required:!0},apiHost:{type:"string",title:"API Host","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 API Host"},"x-decorator-props":{tooltip:"API \u5730\u5740"},default:"https://qyapi.weixin.qq.com"},welcomeInKfMode:{type:"boolean",title:"\u5BA2\u670D\u6A21\u5F0F\u63A5\u5165\u7684\u6B22\u8FCE\u8BED","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u5F00\u542F",unCheckedChildren:"\u5173\u95ED"},"x-decorator-props":{tooltip:"\u5BA2\u670D\u6A21\u5F0F\u4E0B\uFF0C\u7528\u6237\u7B2C\u4E00\u6B21\u8FDB\u5165\u65F6\u662F\u5426\u53D1\u9001\u6B22\u8FCE\u8BED\uFF0C\u9ED8\u8BA4 false"},default:!1},welcomePrompt:{type:"string",title:"\u5BA2\u670D\u6A21\u5F0F\u751F\u6210\u6B22\u8FCE\u8BCD\u7684\u63D0\u793A\u8BED","x-decorator":"FormItem","x-component":"Input.TextArea","x-component-props":{placeholder:"\u5982 __\u6B22\u8FCE{nickName}\uFF0C\u6709\u4EFB\u4F55\u95EE\u9898\u90FD\u53EF\u4EE5\u8DDF\u6211\u54A8\u8BE2"},"x-decorator-props":{tooltip:"\u6B22\u8FCE\u8BCD\u7684\u63D0\u793A\u8BED\uFF0C\u53EF\u4EE5\u4F7F\u7528 {nickName} \u5BF9\u7528\u6237\u7684\u6635\u79F0\u8FDB\u884C\u5360\u4F4D\uFF0C\u5982\u679C\u4EE5 __\u5F00\u5934\uFF0C\u8868\u793A\u76F4\u63A5\u53D1\u9001\u8BE5\u6B22\u8FCE\u8BCD\uFF0C\u800C\u4E0D\u662F\u9001\u5230\u540E\u7AEF\u8FDB\u884C\u751F\u6210\u3002"}},appChatGroups:{type:"array",title:"\u8981\u81EA\u52A8\u521B\u5EFA\u7684\u7FA4\u804A","x-decorator":"FormItem","x-component":"ArrayItems","x-decorator-props":{tooltip:"\u4EC5\u4F7F\u7528\u5E94\u7528\u5355\u804A\u5BF9\u8BDD\uFF0C\u65E0\u9700\u8BBE\u7F6E\u3002\u9700\u8981\u8BE5\u5E94\u7528\u81EA\u52A8\u521B\u5EFA\u7684\u7FA4\u804A\uFF08\u5DF2\u5B58\u5728\u65F6\u4E0D\u4F1A\u91CD\u590D\u521B\u5EFA\uFF09\u3002\u7531\u4E8E\u53EA\u6709\u5E94\u7528\u521B\u5EFA\u7684\u7FA4\u804A\u624D\u80FD\u4E3B\u52A8\u63A8\u9001\u6D88\u606F\uFF0C\u56E0\u6B64\u9700\u8981\u5148\u521B\u5EFA\u7FA4\u804A\u3002\u5F80\u7FA4\u91CC\u63A8\u6D88\u606F\u5EFA\u8BAE\u4F7F\u7528webhook\u673A\u5668\u4EBA\uFF0C\u800C\u4E0D\u662F\u5E94\u7528\u673A\u5668\u4EBA\uFF0Cwebhook\u652F\u6301Markdown\u6D88\u606F\u3002"},items:{type:"object","x-component":"ArrayItems.Item",properties:{userlist:{type:"array",title:"\u7FA4\u6210\u5458\u5217\u8868","x-decorator":"FormItem","x-component":"ArrayItems",items:{type:"void","x-component":"Space",properties:{input:{type:"string","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6210\u5458\u7684ID\uFF0C\u53EF\u5728\u540E\u53F0\u901A\u8BAF\u5F55\u67E5\u770B"}},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove"}}},properties:{add:{type:"void",title:"\u6DFB\u52A0\u4E00\u4E2A\u6210\u5458","x-component":"ArrayItems.Addition"}}},chatid:{type:"string",title:"\u7FA4\u804A ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u7FA4\u804A ID\uFF0C\u5EFA\u8BAE\u968F\u673A\u751F\u6210\u4E00\u4E2A"}},name:{type:"string",title:"\u7FA4\u540D\u79F0","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u7FA4\u540D\u79F0"}},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove"}}},properties:{add:{type:"void",title:"\u6DFB\u52A0\u4E00\u4E2A\u7FA4","x-component":"ArrayItems.Addition"}}}}}},eventNames:[f.CHAT_MESSAGE,f.LOGIN],desc:"\u4F01\u4E1A\u5FAE\u4FE1\u5E94\u7528/\u5BA2\u670D"};constructor(e,t){this._app=e,this._options=t,this._apiHost=this._options.apiHost??"https://qyapi.weixin.qq.com",this._cacheManager=Bt(this._options.instanceName),this.event=new Es}_apiHost;_token;_me;_cacheManager;get params(){return a.params}get options(){return this._options}get actions(){return[{type:"api",actionName:"receive",action:{type:"normal",handler:p(e=>this._onMessage(e),"handler")}}]}event;async _loadToken(){if(!this._options.corpId||!this._options.secret)return k.info("\u5F53\u524D\u4F01\u5FAE\u6E90\u672A\u914D\u7F6E\u4F01\u4E1A\u4FE1\u606F\uFF0C\u53EA\u80FD\u4F7F\u7528webhook\u673A\u5668\u4EBA\u53D1\u9001\u6D88\u606F\uFF0C\u65E0\u6CD5\u63A5\u6536\u6D88\u606F\uFF01"),!0;let e=`${this._apiHost}/cgi-bin/gettoken?corpid=${this._options.corpId}&corpsecret=${this._options.secret}`,t=await(await fetch(e)).json();if(t.errcode!==0){k.error(t.errmsg),setTimeout(()=>{this._loadToken()},10*60*1e3);return}this._token=t.access_token,k.debug("\u6210\u529F\u83B7\u53D6\u4F01\u5FAE\u5E94\u7528token:"+this._token);let o=Number(t.expires_in);return setTimeout(()=>{this._loadToken()},o/2*1e3),!0}_checkSignature(e,t,o,s){let r=Ns(this._options.token,t,o,s);return e===r}async _loadMediaFile(e,t){let o=`${this._apiHost}/cgi-bin/media/get?access_token=${this._token}&media_id=${e}`,s=await fetch(o),r;if(s.headers.get("Content-Type").indexOf("json")>=0){let i=await s.json();if(i.errcode!==0){k.error(i.errmsg);return}r=b.fromPath(i.video_url,"binary",t)}else{let i=await s.arrayBuffer();r=b.fromBuffer(Buffer.from(i),t,"binary")}return r}async _uploadMediaFile(e,t){let o=new Ms,s=await t.asReadStream();o.append("media",s);let r={...o.getHeaders()},i=await Os({method:"post",url:e,headers:r,data:o,responseType:"json"});return i.data?.errcode!==0&&k.error("\u4E0A\u4F20\u6587\u4EF6\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u6587\u4EF6\u5927\u5C0F\u548C\u7C7B\u578B\u662F\u5426\u652F\u6301\uFF01"),i.data?.media_id}async _uploadAppMediaFile(e,t){let o=`${this._apiHost}/cgi-bin/media/upload?access_token=${this._token}&type=${t}`;return this._uploadMediaFile(o,e)}async _uploadRobotMediaFile(e,t,o){let s=`${this._apiHost}/cgi-bin/webhook/upload_media?key=${o}&type=${t}`;return this._uploadMediaFile(s,e)}async _processKfMessage(e,t){let o=e.external_userid??e.event?.external_userid;if(!o?.length){k.warn("\u8BE5\u6D88\u606F\u6CA1\u6709userid\uFF0C\u65E0\u6CD5\u56DE\u590D\uFF01"),k.warn(e);return}e.external_userid=o,e.open_kfid=e.open_kfid??e.event?.open_kfid;let s=await this._cacheManager.get(o);if(!s){let n=await this._api("/cgi-bin/kf/customer/batchget","post",{external_userid_list:[o],need_enter_session_context:0});if(n?.customer_list?.length){let c=n.customer_list[0];s={userId:o,userName:o,avatarUrl:c.avatar,bigAvatarUrl:c.avatar,nickName:c.nicname,origin:c},this._cacheManager.set(o,s)}}s||(k.warn("\u672A\u80FD\u83B7\u53D6\u5230\u8BE5\u7528\u6237\u7684\u4FE1\u606F\uFF0C\u53EF\u80FD\u8BE5\u7528\u6237\u7B2C\u4E00\u6B21\u8FDB\u5165\u5BA2\u670D\u5DF2\u7ECF\u8D85\u8FC748\u5C0F\u65F6\uFF01"),s={userId:o,userName:o,nickName:o});let r={atList:[],time:new Date(e.send_time*1e3),senderId:e.external_userid,fromId:e.external_userid,isGroupChat:!1,isSender:!1,senderName:s.userName,senderInfo:s,toInfo:[this._me],messageId:e.msgid,origin:{...t,data:{...e}},type:void 0,content:void 0};switch(e.msgtype){case"text":{let n=e.text;r.type=l.TEXT,r.content=n.content;break}case"image":{r.type=l.IMAGE;let n=e.image,m={file:await this._loadMediaFile(n.media_id,z()+".png")};r.content=m;break}case"voice":{let n=e.voice;r.type=l.AUDIO;let c=await this._loadMediaFile(n.media_id,z()+".amr"),m=await Ie(await c.asBuffer());await m.asLocalPath();let d={file:m};r.content=d;break}case"video":{let n=e.video;r.type=l.VIDEO;let c=await this._loadMediaFile(n.media_id,z()+".mp4"),m=await this._app.sharedCover,d={file:c,previewImage:m};r.content=d;break}case"link":{r.type=l.ARTICLE;let n=e.link,c={url:n.url,title:n.title,desc:n.desc,coverFile:n.pic_url?.length?b.fromPath(n.pic_url,"binary",z()+".png"):this._app.sharedCover};r.content=c;break}case"location":{r.type=l.POSITION;let n=e.location,c={placeName:n.name,placeDetail:n.address,lon:n.longitude,lat:n.latitude,mapLevel:void 0};r.content=c;break}case"event":{e.event.external_userid?.length&&await this._processKfUserEventMessage(e,r);break}default:break}if(!r.content){k.warn("\u6536\u5230\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B"),k.warn(r);return}let i={id:z(),type:f.CHAT_MESSAGE,message:r,source:this,me:this._me};this.event.emit(i.type,i)}async _processKfUserEventMessage(e,t){switch(e.event.event_type){case"enter_session":{if(this._options.welcomeInKfMode){let o=this._options.welcomePrompt??"__\u6B22\u8FCE{nickName}\uFF0C\u6709\u4EFB\u4F55\u95EE\u9898\u90FD\u53EF\u4EE5\u8DDF\u6211\u54A8\u8BE2";if(o=o.replaceAll("{nickName}",t.senderInfo.nickName),t.type=l.TEXT,t.content=o,o.startsWith("__")){let s={type:l.TEXT,content:o,toInfo:[t.senderInfo],isGroupChat:!1};await this._sendKfMessage(s,t),t.type=void 0,t.content=void 0}}break}}}async _onKfMessage(e){let t=await this._cacheManager.get("cursor"),o;if(t?.length)o=await this._api("/cgi-bin/kf/sync_msg","post",{token:e.Token,open_kfid:e.OpenKfId,cursor:t});else for(o=await this._api("/cgi-bin/kf/sync_msg","post",{token:e.Token,open_kfid:e.OpenKfId});o.has_more===1;){let i=await this._api("/cgi-bin/kf/sync_msg","post",{token:e.Token,open_kfid:e.OpenKfId,cursor:o.next_cursor});if(i.msg_list?.length){let n=o.msg_list;n.push(...i.msg_list),i.msg_list=n,o=i}else break}if(!o?.next_cursor){k.warn("\u83B7\u53D6\u6700\u65B0\u6D88\u606F\u5931\u8D25\uFF01");return}if(await this._cacheManager.get("cursor")!==t){k.info("\u6709\u65B0\u7684\u6D88\u606F\u8986\u76D6\u4E86\u672C\u6B21\u8FDE\u63A5\uFF0C\u5185\u5BB9\u5C06\u5728\u65B0\u7684\u8BF7\u6C42\u4E2D\u5904\u7406");return}if(await this._cacheManager.set("cursor",t),!o.msg_list.length)return;let r=o.msg_list.toReversed();if(!t?.length)this._processKfMessage(r[0],e);else{let i=[];for(let n of r)if(n.msgtype==="event"){if(n.event.external_userid?.length){let c=n.event.external_userid;i.indexOf(c)<0&&(i.push(c),this._processKfMessage(n,e))}}else i.indexOf(n.external_userid)<0&&(i.push(n.external_userid),this._processKfMessage(n,e))}}async _processEventMessage(e,t){switch(e.Event){case"subscribe":t.type=l.SUBSCRIBE,t.content={isSubscribe:!0};break;case"unsubscribe":t.type=l.UNSUBSCRIBE,t.content={isSubscribe:!1};break;case"LOCATION":break;default:break}}async _processAppMessage(e){let t={atList:[],time:new Date(e.CreateTime*1e3),senderId:e.FromUserName,fromId:e.FromUserName,isGroupChat:!1,isSender:!1,senderName:e.FromUserName,senderInfo:{userName:e.FromUserName,userId:e.FromUserName,nickName:e.FromUserName,origin:e.FromUserName},toInfo:[this._me],origin:e,messageId:e.MsgId,type:void 0,content:void 0};switch(e.MsgType){case"text":{let s=e;t.type=l.TEXT,t.content=s.Content;break}case"image":{t.type=l.IMAGE;let s=e,i={file:b.fromPath(s.PicUrl,"binary",z()+".png")};t.content=i;break}case"voice":{let s=e;if(s.Format.toLowerCase()!=="amr"){k.warn("\u4E0D\u652F\u6301\u7684\u8BED\u97F3\u683C\u5F0F\uFF1A"+s.Format);break}t.type=l.AUDIO;let r=await this._loadMediaFile(s.MediaId,z()+".amr"),i=await Ie(await r.asBuffer());await i.asLocalPath();let n={file:i};t.content=n;break}case"video":{let s=e;t.type=l.VIDEO;let r=await this._loadMediaFile(s.MediaId,z()+".mp4"),i=await this._loadMediaFile(s.ThumbMediaId,z()+".png"),n={file:r,previewImage:i};t.content=n;break}case"link":{t.type=l.ARTICLE;let s=e,r={url:s.Url,title:s.Title,desc:s.Description,coverFile:b.fromPath(s.PicUrl,"binary",z()+".png")};t.content=r;break}case"location":{t.type=l.POSITION;let s=e,r={placeName:s.Label,placeDetail:s.Label,lon:s.Location_X,lat:s.Location_Y,mapLevel:s.Scale};t.content=r;break}case"event":{await this._processEventMessage(e,t);break}default:break}if(!t.content){k.warn("\u6536\u5230\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B"),k.warn(t);return}let o={id:z(),type:f.CHAT_MESSAGE,message:t,source:this,me:this._me};this.event.emit(o.type,o)}async _onMessage(e){let t=e.query,{msg_signature:o,timestamp:s,nonce:r}=t;if(e.method.toLowerCase()==="get")return this._checkSignature(o,Number(s),r,t.echostr)?rr(this._options.aesKey,t.echostr).message:(k.warn("\u6536\u5230\u975E\u6CD5GET\u8BF7\u6C42\uFF01"),k.warn(t),"\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01");let i=e.body.xml;if(!this._checkSignature(o,Number(s),r,i.Encrypt))return k.warn("\u6536\u5230\u975E\u6CD5\u8BF7\u6C42\uFF01"),k.warn(t),"\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01";let n=rr(this._options.aesKey,i.Encrypt),c=new Fs().parse(n.message).xml;return c.MsgType==="event"&&c.Event==="kf_msg_or_event"?this._onKfMessage(c):this._processAppMessage(c),""}async _api(e,t,o=void 0,s,r="application/json"){let i=`${this._apiHost}${e}?access_token=${this._token}`;s&&(s=new URLSearchParams(s)),s?.size>0&&(i=i+`&${s.toString()}`);let n;if(t==="get"?n=await(await fetch(i)).json():n=await(await fetch(i,{headers:{"Content-Type":r},method:t,body:JSON.stringify(o)})).json(),n.errcode!==0){k.error(n.errmsg);return}return n}async _sendAppGroupMessage(e){let t=e.toInfo[0],o=t.userId??t.userName;o?.length||(k.warn("chatid\u914D\u7F6E\u5F02\u5E38\uFF01"),k.warn(t));let s={chatid:o,safe:0};switch(e.type){case l.TEXT:{s.msgtype="text";let r=e.content;if(!r?.length){k.info("\u8981\u53D1\u9001\u7684\u6587\u672C\u5185\u5BB9\u4E3A\u7A7A\uFF01");return}s.text={content:r};break}case l.IMAGE:{s.msgtype="image";let r=await this._uploadAppMediaFile(e.content.file,"image");if(!r){k.warn("\u4E0A\u4F20\u56FE\u7247\u5931\u8D25\uFF01");return}s.image={media_id:r};break}case l.AUDIO:{s.msgtype="voice";let r=e.content.file,{file:i}=await pe(r),n=await this._uploadAppMediaFile(i,"voice");if(!n){k.warn("\u4E0A\u4F20\u8BED\u97F3\u5931\u8D25\uFF01");return}s.voice={media_id:n};break}case l.VIDEO:{s.msgtype="video";let r=e.content;if(!r.previewImage){k.warn("\u89C6\u9891\u6CA1\u6709\u9884\u89C8\u56FE\uFF0C\u65E0\u6CD5\u53D1\u9001\uFF01");return}let i=await this._uploadAppMediaFile(r.file,"video");s.video={media_id:i,title:r.title??z()+".mp4",description:r.desc??"\u4E00\u4E2A\u89C6\u9891"};break}case l.FILE:{s.msgtype="file";let r=e.content,i=await this._uploadAppMediaFile(r.file,"file");s.file={media_id:i};break}case l.ARTICLE:{let r=e.content;if(r.coverFile||r.thumbFile){s.msgtype="news";let n=await(r.coverFile??r.thumbFile).asUrl();s.news={articles:[{title:r.title,description:r.desc??r.title,url:r.url,picurl:n}]}}else s.msgtype="textcard",s.textcard={title:r.title,description:r.desc??r.title,url:r.url??_.httpUrl,btntxt:r.url?.length?"\u67E5\u770B\u8BE6\u60C5":""};break}case l.MUSIC:{s.msgtype="news";let r=e.content;s.news={articles:[{title:r.title,description:r.desc??r.title,url:r.url??await r.file.asUrl(),picurl:r.coverUrl}]};break}default:k.warn("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e.type);break}s.msgtype&&await this._api("/cgi-bin/appchat/send","post",s)}async _sendRobotMessage(e){let t=e.toInfo[0],o=Z(t.userId??t.userName);if(!o?.startsWith("http")){k.warn("\u673A\u5668\u4EBA\u6D88\u606F\u914D\u7F6E\u7684webhook\u5730\u5740\u5F02\u5E38\uFF01"),k.warn(e);return}let r=new URLSearchParams(o.split("?")[1]).get("key"),i={};switch(e.type){case l.TEXT:{i.msgtype="markdown";let n=e.content;if(!n?.length){k.info("\u8981\u53D1\u9001\u7684\u6587\u672C\u5185\u5BB9\u4E3A\u7A7A\uFF01");return}if(i.markdown={content:n},e.atList?.length){let c=[];e.atList.forEach(m=>{Lt(m)?c.push(m):i.markdown.content=i.markdown.content+` <@${m}>`}),c.length&&(i.markdown.mentioned_mobile_list=c)}break}case l.IMAGE:{i.msgtype="image";let n=e.content.file,c=await n.asBuffer(),m=Ps(c),d=await n.asBase64();i.image={base64:d,md5:m};break}case l.AUDIO:{i.msgtype="voice";let n=e.content.file,{file:c}=await pe(n),m=await this._uploadRobotMediaFile(c,"voice",r);if(!m){k.warn("\u4E0A\u4F20\u8BED\u97F3\u5931\u8D25\uFF01");return}i.voice={media_id:m};break}case l.FILE:{i.msgtype="file";let n=e.content,c=await this._uploadRobotMediaFile(n.file,"file",r);i.file={media_id:c};break}case l.ARTICLE:{i.msgtype="news";let n=e.content,c=n.coverFile??n.thumbFile,m;c&&(m=await c.asUrl()),i.news={articles:[{title:n.title,description:n.desc??n.title,url:n.url,picurl:m}]};break}case l.MUSIC:{i.msgtype="news";let n=e.content;i.news={articles:[{title:n.title,description:n.desc??n.title,url:n.url??await n.file.asUrl(),picurl:n.coverUrl}]};break}default:k.warn("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e.type);break}i.msgtype&&await(await fetch(o,{headers:{"Content-Type":"application/json"},method:"post",body:JSON.stringify(i)})).json()}async _sendKfMessage(e,t){let o=t?.origin?.data;o||k.warn("fromMesage\u4E2D\u6CA1\u6709origin.data\uFF0C\u65E0\u6CD5\u83B7\u77E5open_kfid\uFF01"),e.toInfo.length>1&&k.warn("\u5F53\u524D\u6D88\u606F\u6E90\u4E0D\u652F\u6301\u540C\u65F6\u53D1\u9001\u591A\u4E2A\u5BF9\u8C61\uFF0C\u5C06\u53EA\u53D1\u9001\u7B2C\u4E00\u4E2A\uFF01");let s={touser:e.toInfo[0].userId,open_kfid:o.open_kfid};switch(e.type){case l.TEXT:{s.msgtype="text";let r=e.content;if(!r?.length){k.info("\u8981\u53D1\u9001\u7684\u6587\u672C\u5185\u5BB9\u4E3A\u7A7A\uFF01");return}s.text={content:me(r)};break}case l.IMAGE:{s.msgtype="image";let r=await this._uploadAppMediaFile(e.content.file,"image");if(!r){k.warn("\u4E0A\u4F20\u56FE\u7247\u5931\u8D25\uFF01");return}s.image={media_id:r};break}case l.AUDIO:{s.msgtype="voice";let r=e.content.file,{file:i}=await pe(r),n=await this._uploadAppMediaFile(i,"voice");if(!n){k.warn("\u4E0A\u4F20\u8BED\u97F3\u5931\u8D25\uFF01");return}s.voice={media_id:n};break}case l.VIDEO:{s.msgtype="video";let r=e.content;if(!r.previewImage){k.warn("\u89C6\u9891\u6CA1\u6709\u9884\u89C8\u56FE\uFF0C\u65E0\u6CD5\u53D1\u9001\uFF01");return}let i=await this._uploadAppMediaFile(r.file,"video");s.video={media_id:i};break}case l.FILE:{s.msgtype="file";let r=e.content,i=await this._uploadAppMediaFile(r.file,"file");s.file={media_id:i};break}case l.ARTICLE:{s.msgtype="link";let r=e.content,i=r.coverFile??r.thumbFile??this._app.sharedCover,n=await this._uploadAppMediaFile(i,"image");s.link={title:r.title,desc:r.desc??r.title,url:r.url,thumb_media_id:n};break}case l.MP:{s.msgtype="miniprogram";let r=e.content,i=r.cover??this._app.sharedCover,n=await this._uploadAppMediaFile(i,"image");s.miniprogram={appid:r.id,title:r.title,thumb_media_id:n,pagepath:r.openUrl??r.openRelativePath};break}case l.POSITION:{s.msgtype="location";let r=e.content;s.location={name:r.placeName,address:r.placeDetail,latitude:r.lat,longitude:r.lon};break}case l.CUSTOM:{e.customType==="ca_link"&&(s.msgtype="ca_link",s.ca_link={link_url:e.content});break}default:k.warn("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e.type);break}s.msgtype&&await this._api("/cgi-bin/kf/send_msg","post",s)}async _sendAppMessage(e,t){let s={touser:e.toInfo.map(r=>r.userId).join("|"),toparty:e.origin?.toparty,totag:e.origin?.totag,agentid:this._options.agentId,safe:e.origin?.safe};switch(e.type){case l.TEXT:{s.msgtype="markdown";let r=e.content;if(!r?.length){k.info("\u8981\u53D1\u9001\u7684\u6587\u672C\u5185\u5BB9\u4E3A\u7A7A\uFF01");return}s.markdown={content:r};break}case l.IMAGE:{s.msgtype="image";let r=await this._uploadAppMediaFile(e.content.file,"image");if(!r){k.warn("\u4E0A\u4F20\u56FE\u7247\u5931\u8D25\uFF01");return}s.image={media_id:r};break}case l.AUDIO:{s.msgtype="voice";let r=e.content.file,{file:i}=await pe(r),n=await this._uploadAppMediaFile(i,"voice");if(!n){k.warn("\u4E0A\u4F20\u8BED\u97F3\u5931\u8D25\uFF01");return}s.voice={media_id:n};break}case l.VIDEO:{s.msgtype="video";let r=e.content;if(!r.previewImage){k.warn("\u89C6\u9891\u6CA1\u6709\u9884\u89C8\u56FE\uFF0C\u65E0\u6CD5\u53D1\u9001\uFF01");return}let i=await this._uploadAppMediaFile(r.file,"video");s.video={media_id:i,title:r.title??z()+".mp4",description:r.desc??"\u4E00\u4E2A\u89C6\u9891"};break}case l.FILE:{s.msgtype="file";let r=e.content,i=await this._uploadAppMediaFile(r.file,"file");s.file={media_id:i};break}case l.ARTICLE:{let r=e.content;if(r.coverFile||r.thumbFile){s.msgtype="news";let n=await(r.coverFile??r.thumbFile).asUrl();s.news={articles:[{title:r.title,description:r.desc??r.title,url:r.url,picurl:n}]}}else s.msgtype="textcard",s.textcard={title:r.title,description:r.desc??r.title,url:r.url??_.httpUrl,btntxt:r.url?.length?"\u67E5\u770B\u8BE6\u60C5":""};break}case l.MUSIC:{s.msgtype="news";let r=e.content;s.news={articles:[{title:r.title,description:r.desc??r.title,url:r.url??await r.file.asUrl(),picurl:r.coverUrl}]};break}default:k.warn("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e.type);break}s.msgtype&&await this._api("/cgi-bin/message/send","post",s)}async me(e){if(this._me&&!e)return this._me;if(!this._token?.length)return{userId:"\u533F\u540D\u673A\u5668\u4EBA",userName:"\u533F\u540D\u673A\u5668\u4EBA",nickName:"\u533F\u540D\u673A\u5668\u4EBA"};let t=await this._api("/cgi-bin/agent/get","get",void 0,{agentId:this._options.agentId});if(t)return this._me={userId:this._options.agentId,userName:this._options.agentId,nickName:t.name,avatarUrl:t.square_logo_url,signature:t.description,origin:t},this._me}hasLogin(){return!!(this._options.secret&&this._token?.length||!this._options.secret||!this._options.agentId||!this._options.token)}async login(){if(!this._token){if(await this._loadToken()){let e=await this.me(),t={type:f.LOGIN,user:e,id:z(),source:this,me:e};this.event.emit(t.type,t)}this._options.appChatGroups?.length&&(await this.createAppGroupChats(this._options.appChatGroups),k.info("\u7FA4\u804A\u521B\u5EFA\u5B8C\u6210\uFF0C\u5982\u679C\u63D0\u793A\u7FA4\u804A\u5DF2\u5B58\u5728\uFF0C\u53EF\u4EE5\u5FFD\u7565"))}}async sendMessage(e,t){this.event.emit(f.RESPONSE_MESSAGE,{id:z(),type:f.CHAT_MESSAGE,message:e,fromMessage:t,source:this,me:this._me});let o=t?.origin;return e.isGroupChat||e.toInfo[0].isGroup?e.toInfo[0].app?this._sendAppGroupMessage(e):this._sendRobotMessage(e):o&&o.MsgType==="event"&&o.Event==="kf_msg_or_event"?this._sendKfMessage(e,t):this._sendAppMessage(e,t)}async getContacts(e,t=!1){return[]}async getContactDetail(e){return e}async createAppGroupChats(e){for(let t of e)await this._api("/cgi-bin/appchat/create","post",{...t,owner:t.userlist[0]})}};import Rs from"emittery";import{AppType as Bs,Client as Ls,EventDispatcher as Us,LoggerLevel as lo,WSClient as Ds}from"@larksuiteoapi/node-sdk";import{v4 as ge}from"uuid";import{getWavFileInfo as $s}from"wav-file-decoder";var pt={article:{config:{update_multi:!0},i18n_elements:{zh_cn:[{tag:"img",img_key:"{image_key}",preview:!0,transparent:!1,scale_type:"fit_horizontal",alt:{tag:"plain_text",content:""}},{tag:"column_set",flex_mode:"none",horizontal_spacing:"8px",horizontal_align:"left",columns:[{tag:"column",width:"weighted",vertical_align:"top",vertical_spacing:"8px",elements:[{tag:"markdown",content:"{desc}",text_align:"left",text_size:"normal",icon:{tag:"standard_icon",token:"describe_outlined",color:"grey"}}],weight:3},{tag:"column",width:"weighted",vertical_align:"top",vertical_spacing:"8px",elements:[{tag:"markdown",content:"{link}",text_align:"left",text_size:"normal"}],weight:1}],margin:"16px 0px 0px 0px"}]},i18n_header:{zh_cn:{title:{tag:"plain_text",content:"{title}"},subtitle:{tag:"plain_text",content:""},template:"blue"}}},stream:{config:{update_multi:!0},i18n_elements:{zh_cn:[{tag:"markdown",content:"{content}",text_align:"left",text_size:"normal"}]},i18n_header:{zh_cn:{title:{tag:"plain_text",content:"{title}"},subtitle:{tag:"plain_text",content:""},template:"blue",ud_icon:{tag:"standard_icon",token:"reply_filled"}}}},textImage:{config:{update_multi:!0},i18n_elements:{zh_cn:[{tag:"column_set",flex_mode:"none",columns:[{tag:"column",width:"weighted",vertical_align:"top",elements:[{tag:"markdown",content:"{content}",text_align:"left",text_size:"normal"}],weight:1},{tag:"column",width:"auto",vertical_align:"top",elements:[{tag:"img",img_key:"{image_key}",preview:!0,scale_type:"crop_center",size:"medium",alt:{tag:"plain_text",content:""}}]}],margin:"16px 0px 0px 0px"}]},i18n_header:{}}};import{fileTypeFromBuffer as js}from"file-type";var E=y("feishu-source"),ct=class a{static{p(this,"FeishuSource")}_app;_options;static params={name:"feishu",optionsSchema:{type:"formily",formily:{type:"object",properties:{...$,appId:{type:"string",title:"App ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u98DE\u4E66\u5E94\u7528\u7684 App ID"},"x-decorator-props":{tooltip:"\u98DE\u4E66\u5F00\u53D1\u8005\u540E\u53F0\u5E94\u7528\u7BA1\u7406\u9875\u9762\u7684 \u57FA\u7840\u4FE1\u606F-\u51ED\u8BC1\u4E0E\u57FA\u7840\u4FE1\u606F\u9875\u9762\u83B7\u53D6\u3002"},required:!0},appSecret:{type:"string",title:"App Secret","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u98DE\u4E66\u5E94\u7528\u7684 App Secret"},"x-decorator-props":{tooltip:"\u98DE\u4E66\u5F00\u53D1\u8005\u540E\u53F0\u5E94\u7528\u7BA1\u7406\u9875\u9762\u7684 \u57FA\u7840\u4FE1\u606F-\u51ED\u8BC1\u4E0E\u57FA\u7840\u4FE1\u606F\u9875\u9762\u83B7\u53D6\u3002"},required:!0},verificationToken:{type:"string",title:"Verification Token","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 Verification Token\uFF0C\u98DE\u4E66\u540E\u53F0\u5E94\u7528\u4E0E\u56DE\u8C03\u4E2D\u5F00\u542F\u4E86\u52A0\u5BC6\u7B56\u7565\u624D\u9700\u8981\u586B\u5199"},"x-decorator-props":{tooltip:"\u98DE\u4E66\u5E94\u7528\u7BA1\u7406\u9875\u9762 \u5F00\u53D1\u914D\u7F6E-\u4E8B\u4EF6\u4E0E\u56DE\u8C03\u4E2D\u9009\u62E9\u52A0\u5BC6\u7B56\u7565\uFF0C\u5982\u679C\u5F00\u542F\u7684\u8BDD\u9700\u8981\u586B\u5165\u6B64\u9879\u3002"}},encryptKey:{type:"string",title:"Encrypt Key","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 Encrypt Key\uFF0C\u98DE\u4E66\u540E\u53F0\u5E94\u7528\u4E0E\u56DE\u8C03\u4E2D\u5F00\u542F\u4E86\u52A0\u5BC6\u7B56\u7565\u624D\u9700\u8981\u586B\u5199"},"x-decorator-props":{tooltip:"\u98DE\u4E66\u5E94\u7528\u7BA1\u7406\u9875\u9762 \u5F00\u53D1\u914D\u7F6E-\u4E8B\u4EF6\u4E0E\u56DE\u8C03\u4E2D\u9009\u62E9\u52A0\u5BC6\u7B56\u7565\uFF0C\u5982\u679C\u5F00\u542F\u7684\u8BDD\u9700\u8981\u586B\u5165\u6B64\u9879\u3002"}},domain:{type:"string",title:"Domain","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u9ED8\u8BA4\u4E3A https://open.feishu.cn"},"x-decorator-props":{tooltip:"\u98DE\u4E66\u5F00\u653E\u5E73\u53F0\u7684 API \u57DF\u540D\uFF0C\u9ED8\u8BA4\u662F https://open.feishu.cn"},default:"https://open.feishu.cn"},contactsCacheTime:{type:"number",title:"\u8054\u7CFB\u4EBA\u7F13\u5B58\u65F6\u95F4 (\u79D2)","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:60*60,placeholder:"\u8BF7\u8F93\u5165\u8054\u7CFB\u4EBA\u7F13\u5B58\u65F6\u95F4"},"x-decorator-props":{tooltip:"\u8054\u7CFB\u4EBA\u7F13\u5B58\u65F6\u95F4\uFF0C\u5355\u4F4D\u662F\u79D2\uFF0C\u9ED8\u8BA424\u5C0F\u65F6"},default:24*60*60},contactDepartId:{type:"string",title:"\u8054\u7CFB\u4EBA\u5217\u8868 ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u8054\u7CFB\u4EBA\u5217\u8868 ID\uFF0C\u9ED8\u8BA4\u4F7F\u7528\u8DDF\u5217\u8868\u3002"},"x-decorator-props":{tooltip:"\u8054\u7CFB\u4EBA\u5217\u8868\u7684 ID\uFF0C\u5982\u679C\u4EE5 od- \u5F00\u5934\u8868\u793A\u98DE\u4E66\u81EA\u52A8\u751F\u6210\u7684\u5F00\u653E ID\uFF0C\u5426\u5219\u4E3A\u81EA\u5B9A\u4E49 ID"}},ignoreNoneUserMessage:{type:"boolean",title:"\u5FFD\u7565\u975E\u7528\u6237\u6D88\u606F","x-decorator":"FormItem","x-component":"Switch","x-decorator-props":{tooltip:"\u662F\u5426\u5FFD\u7565\u975E\u7528\u6237\u53D1\u9001\u7684\u6D88\u606F\uFF0C\u9ED8\u8BA4 true"},default:!0},replayTextMode:{type:"string",enum:[{label:"\u666E\u901A\u56DE\u590D",value:"text"},{label:"\u56FE\u6587\u6DF7\u6392",value:"rich_text"},{label:"\u6D41\u5F0F\u56DE\u590D",value:"stream"}],title:"\u6D88\u606F\u56DE\u590D\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u6D88\u606F\u56DE\u590D\u6A21\u5F0F"},"x-decorator-props":{tooltip:"\u6D88\u606F\u7684\u56DE\u590D\u65B9\u5F0F\uFF0C\u9ED8\u8BA4\u4F7F\u7528 \u666E\u901A\u56DE\u590D \u6A21\u5F0F\u3002\u56DE\u590D\u65F6\uFF0C\u5982\u679C\u6709\u8BED\u97F3\u5C06\u4F1A\u5355\u72EC\u53D1\u9001\u3002"},default:"text"},cardId:{type:"string",title:"\u5361\u7247\u6A21\u677F ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5361\u7247\u6A21\u677F ID\uFF08\u7559\u7A7A\u4F7F\u7528\u9ED8\u8BA4\u6A21\u677F\uFF09"},"x-decorator-props":{tooltip:"\u5F53\u914D\u7F6E\u4E3A\u6D41\u5F0F\u56DE\u590D\u65F6\uFF0C\u53EF\u63D0\u4F9B\u81EA\u5B9A\u4E49\u5361\u7247 ID\uFF0C\u5426\u5219\u5C06\u4F7F\u7528\u9ED8\u8BA4\u6A21\u677F"}},richTextTitle:{type:"boolean",title:"\u542F\u7528\u56FE\u6587\u6DF7\u6392\u6807\u9898","x-decorator":"FormItem","x-component":"Switch","x-decorator-props":{tooltip:"\u5F53\u4F7F\u7528\u56FE\u6587\u6DF7\u6392\u6A21\u5F0F\u56DE\u590D\u65F6\uFF0C\u662F\u5426\u542F\u7528\u6807\u9898\uFF0C\u9ED8\u8BA4 false\u3002\u9700\u8BBE\u7F6E\u4E3A\u4F7F\u7528\u56FE\u6587\u6DF7\u6392\u624D\u751F\u6548\u3002"},default:!1},richTextTitleTemplate:{type:"string",title:"\u56FE\u6587\u6DF7\u6392\u6807\u9898\u6A21\u677F","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"RE:{title}"},"x-decorator-props":{tooltip:"\u56FE\u6587\u6DF7\u6392\u6A21\u5F0F\u6807\u9898\u6A21\u677F\uFF0C\u9ED8\u8BA4\u662F RE:{title} \uFF0C\u5176\u4E2Dtitle\u662F\u6839\u636E\u6A21\u578B\u56DE\u590D\u5185\u5BB9\u751F\u6210\u7684\u6807\u9898\u3002\u9700\u5F00\u542F\u6807\u9898\u624D\u751F\u6548\u3002"},default:"RE:{title}"},thinkingTips:{type:"string",title:"\u601D\u8003\u63D0\u793A\u8BED","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u601D\u8003\u63D0\u793A\u8BED\uFF0C\u5982 \u6B63\u5728\u601D\u8003\u4E2D..."},"x-decorator-props":{tooltip:"\u542F\u7528\u6D41\u5F0F\u56DE\u590D\u65F6\uFF0C\u6B63\u5728\u601D\u8003\u7684\u63D0\u793A\u8BED\uFF0C\u9ED8\u8BA4\u662F\u201C\u6B63\u5728\u601D\u8003\u4E2D...\u201D"}},wavChannel:{type:"number",title:"\u8F6Cwav\u97F3\u9891\u901A\u9053\u6570","x-decorator":"FormItem","x-decorator-props":{tooltip:"\u5F53\u5BF9\u63A5\u67D0\u4E9B\u97F3\u9891\u8F6C\u6362skill\u65F6\u5019\uFF0C\u9700\u8981\u7279\u5B9A\u7684\u53C2\u6570\uFF0C\u8FD9\u91CC\u53EF\u4EE5\u63D0\u524D\u5728\u8F6C\u6362\u65F6\u8BBE\u5B9A\uFF0C\u5982\u767E\u5EA6\u8BED\u97F3\u8F6C\u6587\u672C\u9700\u8981\u5355\u901A\u905316k\u6216\u80058k\u3002"},"x-component":"Select",enum:[{value:1},{value:2}],default:1},wavSampleRate:{type:"number",title:"\u8F6Cwav\u97F3\u9891\u91C7\u6837\u7387","x-decorator":"FormItem","x-decorator-props":{tooltip:"\u5F53\u5BF9\u63A5\u67D0\u4E9B\u97F3\u9891\u8F6C\u6362skill\u65F6\u5019\uFF0C\u9700\u8981\u7279\u5B9A\u7684\u53C2\u6570\uFF0C\u8FD9\u91CC\u53EF\u4EE5\u63D0\u524D\u5728\u8F6C\u6362\u65F6\u8BBE\u5B9A\uFF0C\u5982\u767E\u5EA6\u8BED\u97F3\u8F6C\u6587\u672C\u9700\u8981\u5355\u901A\u905316k\u6216\u80058k\u3002"},"x-component":"Select",enum:[8e3,12e3,16e3,24e3,32e3,44100,48e3],default:16e3}}}},eventNames:[f.CHAT_MESSAGE,f.LOGIN],desc:"\u98DE\u4E66\u5E94\u7528"};constructor(e,t){this._app=e,this._options=t,this._trackIdCache={},this._options.ignoreNoneUserMessage=this._options.ignoreNoneUserMessage??!0,this._options.replayTextMode=this._options.replayTextMode??"rich_text",this._options.richTextTitleTemplate=this._options.richTextTitleTemplate??"RE:{title}",this._options.contactsCacheTime=this._options.contactsCacheTime??24*60*60,this._options.thinkingTips=this._options.thinkingTips??"\u6B63\u5728\u601D\u8003\u4E2D...",this._options.domain=this._options.domain??"https://open.feishu.cn",this.event=new Rs}_me;_client;_wsClient;_connected;_departCache;_userCache;_trackIdCache;get params(){return a.params}get options(){return this._options}get actions(){return[]}event;_getResourceFile(e,t,o,s){let r=p(async()=>{let i=await this._client.im.messageResource.get({params:{type:o},path:{file_key:t,message_id:e}}),n=await Go(i.getReadableStream());if(!s){let c=await js(n);s=ge()+"."+c.ext}return{data:n,type:"buffer",name:s}},"loader");return new b(r,"binary")}async _getRichTextContent(e,t){let o={title:t.title,content:[]};return t.content.forEach(s=>{s.forEach(r=>{switch(r.tag){case"text":o.content.push({type:"text",data:r.text});break;case"a":o.content.push({type:"text",data:r.text});break;case"code_block":o.content.push({type:"text",data:r.text+`(\u4EE3\u7801\u8BED\u8A00\uFF1A${r.language})`});break;case"emotion":{o.content.push({type:"text",data:r.emoji_type});break}case"img":{o.content.push({data:{file:this._getResourceFile(e,r.image_key,"image")},type:"image"});break}case"media":{let i=r;i.image_key?.length&&o.content.push({data:{file:this._getResourceFile(e,i.image_key,"file")},type:"image"});break}default:E.debug("\u65E0\u9700\u5904\u7406\u7684\u5BCC\u6587\u672Ctag\uFF1A"+r.tag);break}})}),o}async _processChatMessage(e,t,o){switch(e){case"text":{let s=t;o.type=l.TEXT;let r=s.text;o.atList?.length&&o.origin.mentions.forEach(i=>{r=r.replaceAll(i.key,"")}),o.content=r.trim();break}case"post":{o.type=l.RICH_TEXT,o.content=await this._getRichTextContent(o.messageId,t);break}case"image":{o.type=l.IMAGE;let s={file:this._getResourceFile(o.messageId,t.image_key,"image")};o.content=s;break}case"file":{o.type=l.FILE;let s=t,r={file:this._getResourceFile(o.messageId,s.file_key,"file",s.file_name),title:s.file_name};o.content=r;break}case"audio":{o.type=l.AUDIO;let s=t,r=ge()+".opus",i=this._getResourceFile(o.messageId,s.file_key,"file",r),c={file:await Pe(i,"wav",m=>(this._options.wavChannel&&(E.trace("custom wav channel "+this._options.wavChannel),m.withAudioChannels(this._options.wavChannel)),this._options.wavSampleRate&&(E.trace("custom wav sample rate "+this._options.wavSampleRate),m.withAudioFrequency(this._options.wavSampleRate)),m))};o.content=c;break}case"media":{o.type=l.VIDEO;let s=t,r=this._getResourceFile(o.messageId,s.file_key,"file",ge()+s.file_name),i=s.image_key.length&&this._getResourceFile(o.messageId,s.image_key,"image"),n={file:r,previewImage:i};o.content=n;break}case"interactive":{let s=t,r={content:[],title:s.title};s.elements.forEach(i=>{i.forEach(n=>{n.elements.length?n.elements.forEach(c=>{c.tag==="text"?r.content.push({type:"text",data:c.text}):c.tag==="img"&&r.content.push({type:"image",data:{file:this._getResourceFile(o.messageId,c.image_key,"image")}})}):n.tag==="text"?r.content.push({type:"text",data:n.text}):n.tag==="img"&&r.content.push({type:"image",data:{file:this._getResourceFile(o.messageId,n.image_key,"image")}})})});break}case"hongbao":{o.type=l.TEXT,o.content="\u6211\u6536\u5230\u4E00\u4E2A\u7EA2\u5305";break}case"calendar":case"general_calendar":case"share_calendar_event":{o.type=l.TEXT;let s=t;o.content=JSON.stringify({content:"\u6211\u6536\u5230\u4E00\u4E2A\u65E5\u7A0B\u5206\u4EAB\u4FE1\u606F",data:s});break}case"share_chat":{let s=t,r=await this._client.im.chat.get({path:{chat_id:s.chat_id}});o.type=l.TEXT,o.content=JSON.stringify({title:"\u6211\u6536\u5230\u4E00\u4E2A\u7FA4\u7EC4\u5206\u4EAB",data:r.data});break}case"share_user":{let s=t,r=this._userCache.get(s.user_id);if(!r)E.warn("\u5F53\u524D\u5206\u4EAB\u6765\u7684\u7528\u6237\u4E0D\u5728\u7F13\u5B58\u4E2D\uFF0C\u4E0D\u5904\u7406\uFF01");else{o.type=l.CONTACT_CARD;let i={display:r.nickName??r.userId,smallImageUrl:r.avatarUrl,bigImageUrl:r.bigAvatarUrl,custom:r};o.content=i}break}case"system":{let s=t;o.type=l.SYSTEM;let r={data:s};o.content=r;break}case"location":{let s=t;o.type=l.POSITION;let r={placeName:s.name,placeDetail:s.name,lon:Number(s.longitude),lat:Number(s.latitude)};o.content=r;break}case"video_chat":{let s=t;o.type=l.PHONE;let r={title:s.topic,time:new Date(Number(s.start_time))};o.content=r;break}case"todo":{let s=t;o.type=l.TEXT,o.content=JSON.stringify({title:"\u6211\u6536\u5230\u4E00\u4E2A\u5F85\u529E\u6D88\u606F",data:s});break}case"vote":{let s=t;o.type=l.TEXT,o.content=JSON.stringify({title:"\u6211\u6536\u5230\u4E00\u4E2A\u6295\u7968\u6D88\u606F",data:s});break}default:E.info("\u6682\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e);return}return o}async _handleChatMessage(e){return this._wsClient.start({eventDispatcher:new Us({verificationToken:this._options.verificationToken,encryptKey:this._options.encryptKey,loggerLevel:e}).register({"im.message.receive_v1":p(async t=>{if(t.sender.sender_type!=="user"&&(E.debug("\u6536\u5230\u6765\u81EA\u975E\u7528\u6237\u7684\u4FE1\u606F\uFF01"),this._options.ignoreNoneUserMessage))return;let o=t.sender.sender_id.open_id,s=this._userCache.get(o);s||(E.warn("\u672A\u80FD\u83B7\u53D6\u5230\u5F53\u524D\u53D1\u9001\u6D88\u606F\u7528\u6237\u7684\u57FA\u672C\u4FE1\u606F\uFF01"),s={userId:o,userName:o,nickName:o});let r={time:new Date(Number(t.message.create_time)),senderId:t.sender.sender_id.open_id,fromId:t.message.chat_id,isGroupChat:t.message.chat_type==="group",isSender:!1,senderName:s.userName,senderInfo:s,toInfo:[this._me],origin:t.message,messageId:t.message.message_id,type:void 0,content:void 0};if(r.isGroupChat){let i=r;if(i.groupInfo={userId:t.message.chat_id,userName:t.message.chat_id,nickName:t.message.chat_id},t.message.mentions?.length){let n=t.message.mentions.map(c=>c.id.open_id);i.atList=n}}E.debug(t);try{this._processChatMessage(t.message.message_type,JSON.parse(t.message.content),r).then(async i=>{if(!i.content){E.debug("\u6682\u4E0D\u652F\u6301\u7684\u6D88\u606F");return}if(t.message.parent_id){let c=await this._client.im.message.get({path:{message_id:t.message.parent_id},params:{user_id_type:"open_id"}});if(c.data?.items?.[0].body?.content.length){let m=c.data.items[0],d={time:new Date(Number(m.create_time)),senderId:m.sender.id,fromId:t.message.chat_id,isGroupChat:t.message.chat_type==="group",isSender:!1,senderName:m.sender.id,senderInfo:{userId:m.sender.id,userName:m.sender.id,nickName:m.sender.id},origin:m,messageId:t.message.parent_id,type:void 0,content:void 0,toInfo:[this._me]};if(i.isGroupChat){let u=i;u.groupInfo={userId:t.message.chat_id,userName:t.message.chat_id,nickName:t.message.chat_id}}let h=JSON.parse(c.data.items[0].body?.content);await this._processChatMessage(c.data.items[0].msg_type,h,d),E.debug("ref message content "+c.data.items[0].body?.content),d.content?(i.type=l.REF,i.content={text:i.content,refMessage:d}):E.debug("\u6682\u4E0D\u652F\u6301\u7684\u5F15\u7528\u6D88\u606F\u5185\u5BB9")}}E.trace("begin send feishu message event");let n={id:ge(),type:f.CHAT_MESSAGE,message:i,source:this,me:this._me};E.trace("listener count "+this.event.listenerCount()),this.event.emit(n.type,n)})}catch(i){E.error(i.message)}return""},"im.message.receive_v1"),"im.chat.access_event.bot_p2p_chat_entered_v1":p(async()=>"","im.chat.access_event.bot_p2p_chat_entered_v1")})})}async _getDepartList(e){let t=await this._client.contact.department.listWithIterator({params:{user_id_type:"open_id",department_id_type:!this._options.contactDepartId||this._options.contactDepartId?.startsWith("od-")?"open_department_id":"department_id",parent_department_id:e,page_size:50,fetch_child:!0}}),o=[];for await(let s of t)for(let r of s.items){let i={userId:r.open_department_id,userName:r.department_id,nickName:r.name,origin:r,isGroup:!0};o.push(i),this._departCache.set(i.userId,i)}return o}async _getDepartUsers(e){let t=await this._client.contact.user.findByDepartmentWithIterator({params:{user_id_type:"open_id",department_id_type:!this._options.contactDepartId||this._options.contactDepartId?.startsWith("od-")?"open_department_id":"department_id",department_id:e,page_size:50}}),o=[];for await(let s of t)for(let r of s.items){let i={...r},n={userId:i.open_id,userName:i.user_id?.length>0?i.user_id:i.open_id,nickName:i.name??i.open_id,avatarUrl:i.avatar?.avatar_240,bigAvatarUrl:i.avatar?.avatar_origin,signature:i.nickname,origin:i};o.push(n),delete i.department_path,this._userCache.set(n.userId,n)}return o}async _uploadImage(e){return(await this._client.im.image.create({data:{image_type:"message",image:await e.asReadStream()}})).image_key}async _uploadFile(e,t,o,s){let r={data:{file_type:t,file_name:o??e.name,file:await e.asReadStream()}};return t==="opus"&&s&&(r.data.duration=s),(await this._client.im.file.create(r)).file_key}async _getSimpleLinkContent(e,t,o,s){let r,i;return s?(r="interactive",i=JSON.stringify(pt.article).replace("{title}",e).replace("{desc}",o??"").replace("{image_key}",await this._uploadImage(s)).replaceAll("{link}",`[\u70B9\u51FB\u67E5\u770B\u8BE6\u60C5](${t})`)):o?.length?(r="post",i={zh_cn:{title:e??"\u94FE\u63A5",content:[[{tag:"md",text:o},{tag:"a",text:"\u70B9\u51FB\u67E5\u770B\u8BE6\u60C5",href:t}]]}}):(r="text",i={text:`[${e??"\u70B9\u51FB\u6B64\u94FE\u63A5\u67E5\u770B\u8BE6\u60C5"}](${t})`}),{msgType:r,content:i}}async _getSendMessageContent(e,t){let o,s,r=e.atList??[],i=this._options.replayTextMode;switch(e.type){case l.TEXT:{let n=e.content;if(!n?.trim().length){E.debug("\u7A7A\u5B57\u7B26\u4E32\uFF0C\u4E0D\u53D1\u9001");return}if(i==="stream"&&t?.origin.trackId?.length){o="interactive";let m=t.origin.trackId;n=(this._trackIdCache[m]??"")+n;let d=Re(n,!0);for(let g of d){let w=b.fromPath(g,"binary",ge()+".png");await w.asLocalPath();let x=await this._uploadImage(w);n=n.replace(g,x)}this._trackIdCache[m]=n;let h=(typeof t?.content=="string"?t.content.length>10?t.content.slice(0,10)+"...":t.content:e.toInfo[0].nickName)??"";r.length&&r.forEach(g=>{n=n+`<at id=${g}></at>`});let u={title:h,content:n};this._options.cardId?.length?s={type:"template",data:{template_id:this._options.cardId,template_variable:u}}:s=JSON.stringify(pt.stream).replace("{title}",u.title).replace("{content}",u.content);break}let c=[];if(i==="rich_text"){o="post";let m=jo(n);for(let d of m){let h=Re(d,!0)?.[0];if(!h?.length)continue;let u=n.split(d),g={tag:"md",text:u[0]};c.push(g);let w=b.fromPath(h,"binary",ge()+".png");await w.asLocalPath();let v={tag:"img",image_key:await this._uploadImage(w)};c.push(v),u.length>1?n=u[1]:n=""}if(n?.trim().length){let d={tag:"md",text:n};c.push(d)}if(e.atList?.length&&e.atList.forEach(d=>{c.push({tag:"at",user_id:d})}),s={zh_cn:{title:"",content:[c]}},this._options.richTextTitle&&this._options.richTextTitleTemplate?.length){let d=typeof t?.content=="string"?t.content.length>10?t.content.slice(0,10)+"...":t.content:e.toInfo[0].nickName;s.zh_cn.title=this._options.richTextTitleTemplate.replaceAll("{title}",d)}}else{o="text";let m=/!\[([^]*?)\]\((.*?)\)/g;n=n.replace(m,"[$1]($2)"),r.length&&r.forEach(d=>{n=n+`<at user_id="${d}"></at>`}),s={text:n}}break}case l.EMOTION:case l.IMAGE:{o="image",s={image_key:await this._uploadImage(e.content.file)};break}case l.AUDIO:{o="audio";let n=e.content.file,c=$s((await n.asBuffer()).buffer),m=parseInt(c.chunkInfo[1].dataLength/c.fmt.bytesPerSec*1e3),d=await Pe(n,"opus");s={file_key:await this._uploadFile(d,"opus",void 0,m)};break}case l.VIDEO:{o="media";let n=e.content;s={file_key:await this._uploadFile(n.file,"mp4",n.title),image_key:n.previewImage?await this._uploadImage(n.previewImage):void 0};break}case l.FILE:{o="file";let n=e.content,c=n.title??n.file.name,m=c.slice(c.lastIndexOf(".")+1);["ppt","xls","doc","pdf"].indexOf(m)<0&&(m="stream"),s={file_key:await this._uploadFile(n.file,m,c)};break}case l.ARTICLE:{let n=e.content,c=await this._getSimpleLinkContent(n.title,n.url,n.desc,n.coverFile);o=c.msgType,s=c.content;break}case l.POSITION:{let n=e.content;o="text",s={text:`\u5730\u540D:${n.placeName}
14
+ `:c.type==="image"||c.type==="file"?s.push({file:c.data.file,messageId:e.message.messageId,type:c.type}):(this.logger.warn("\u65E0\u6CD5\u8BC6\u522B\u7684rich text content\u7C7B\u578B"),this.logger.warn(c));break}case l.REF:{let n=o.content;if(n.refMessage?.type===l.IMAGE||n.refMessage?.type===l.EMOTION||n.refMessage?.type===l.FILE||n.refMessage?.type===l.VIDEO){r=n.text;let c=n.refMessage.content,m=await e.source.me();if(!this.chatAttachCache[t]?.some(h=>h.messageId===n.refMessage.messageId)||n.refMessage.senderId===m.userId&&c?.file){this.logger.info("update file now");let h="image";n.refMessage?.type===l.VIDEO?h="video":n.refMessage?.type===l.FILE&&(h="file"),s.push({file:c.file,messageId:n.refMessage.messageId,type:h})}else n.refMessage?.messageId&&(r=`\u6309\u6B64\u8981\u6C42\u5206\u6790\u7F16\u53F7\u4E3A${n.refMessage.messageId}\u7684\u9644\u4EF6\uFF08\u56DE\u590D\u4E2D\u4E0D\u8981\u51FA\u73B0\u7F16\u53F7\uFF09\uFF1A${r}`);this.logger.debug("ref mutil model message"),this.logger.debug(r)}break}case l.FILE:case l.VIDEO:case l.IMAGE:case l.EMOTION:{let n={file:o.content.file,messageId:e.message.messageId,type:"image"};o.type===l.VIDEO?n.type="video":o.type===l.FILE&&(n.type="file"),this._options.attachSendMode==="now"?s.push(n):(this.chatAttachCache[t]=this.chatAttachCache[t]??[],this.chatAttachCache[t].push(n),this.chatAttachCache[t].length>this._options.maxAttachCount&&(this.chatAttachCache[t].shift(),this.logger.debug("\u7F13\u5B58\u7684\u5185\u5BB9\u6570\u91CF\u5927\u4E8E\u4E86\u8BBE\u7F6E\u7684"+this._options.maxAttachCount+"\u4EFD\uFF0C\u65E7\u7684\u88AB\u79FB\u9664\uFF01")),r=this.commandText.attach),this.logger.debug(r);break}}if(!r){this.logger.debug("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+o.type);return}if(r.startsWith("_command_"))return{forSend:{},forHistory:void 0,chatId:t,plainText:r};let i=[...s??[]];if(this.chatAttachCache[t]?.length&&i.push(...this.chatAttachCache[t]),s.length){let n="\u8FD9\u51E0\u4E2A\u6587\u4EF6\u7684\u7F16\u53F7\u5206\u522B\u662F";for(let c of i)n+=c.messageId+"\uFF0C";r=n+`\u540E\u7EED\u5982\u679C\u6211\u63D0\u5230\u8FD9\u4E9B\u7F16\u53F7\uFF0C\u4E5F\u9700\u8981\u9488\u5BF9\u6307\u5B9A\u7F16\u53F7\u7684\u6587\u4EF6\u8FDB\u884C\u56DE\u7B54\uFF0C\u5982\u679C\u540E\u7EED\u63D0\u5230\u5206\u6790\u6587\u4EF6\uFF0C\u4E00\u822C\u6307\u5206\u6790\u6700\u8FD1\u4E00\u6761\u6D88\u606F\u7684\u6587\u4EF6\uFF0C\u6CE8\u610F\u6240\u6709\u7684\u56DE\u7B54\u90FD\u4E0D\u8981\u51FA\u73B0\u7F16\u53F7\u4FE1\u606F\uFF0C\u53EF\u4EE5\u7528\u7B2C\u51E0\u4E2A\u6587\u4EF6\u6765\u4EE3\u66FF\u3002\u73B0\u5728\u8BF7\u6839\u636E\u5982\u4E0B\u63D0\u95EE\u5BF9\u6587\u4EF6\u8FDB\u884C\u5206\u6790\u5E76\u56DE\u7B54\uFF1A${r}\uFF08\u76F4\u63A5\u56DE\u7B54\u95EE\u9898\uFF0C\u4E0D\u8981\u8BF4\u4F60\u77E5\u9053\u8FD9\u4E2A\u89C4\u5219\u4E86\uFF09`}return s=i,this.generateReadyMessage(t,r,s,e)}catch(o){throw delete this.chatAttachCache[t],o}}async getResponse(e,t,o,s){let r=o.forSend,i=o.chatId;if(!this.checkCommand(o.plainText,i,e))return;let n;s?.length&&(n=s.map(d=>d.data)),this.chatAttachCache[i]=[];let c=await this.getLastInfo(i),m=await this.sendMessageBody(r,n,{onReasoning:p(d=>{t.onReasoning?.(d)},"onReasoning"),onContent:p((d,h)=>{t.onContent(d,h)},"onContent"),onCompleted:p((d,h)=>{this.supportConversationOnline&&this.chatIdCache.set(i,{conversationId:d,timeInSeconds:h})},"onCompleted"),onError:p(d=>{throw d},"onError")},c,e);return this.logger.debug(this._options.instanceName+" reply completed"),m}};var po=y("instance-manager"),re=class{static{p(this,"InstanceBaseManager")}options;_instances;_creators;_params;constructor(e){this.options=e,this._instances={},this._creators={},this._params={},this.options=this.options??{},this.options.cacheInstance=this.options.cacheInstance??!0}registerInstanceCreator(e,t){this._creators[t.name]&&po.warn(`\u540D\u4E3A${t.name}\u7684bot\u5DF2\u7ECF\u88AB\u6CE8\u518C\uFF0C\u5C06\u88AB\u66F4\u65B0\u4E3A\u6700\u65B0\u503C\uFF01`),this._creators[t.name]=e,this._params[t.name]=t}getParams(e){return this._params[e]}getAllParams(){return this._params}getAllParamsArray(){return Object.values(this._params)}getInstance(e){return this._instances[e]}getInstances(e){return e?.length?Object.values(this._instances).filter(t=>t.params.name===e):Object.values(this._instances)}createInstance(e,t){let o=t.instanceName;if(!o?.length){po.error("instanceKey\u672A\u8BBE\u7F6E\uFF1A"+e+"\uFF0C\u65E0\u6CD5\u521B\u5EFA\u5B9E\u4F8B\uFF01");return}if(this.options.cacheInstance&&this._instances[o])return this._instances[o];if(typeof this._creators[e]!="function"){po.error("\u672A\u80FD\u627E\u5230\u540D\u4E3A"+e+"\u7684\u5B9E\u4F8B\u6784\u5EFA\u5668\uFF01");return}let s=this._creators[e](t);return this.options.cacheInstance&&(this._instances[o]=s),s}async clearInstances(){await he(Object.values(this._instances)),this._instances={}}};var Kt=class extends re{static{p(this,"BotManager")}async runBot(e,t,o,s,r){let i=this.getInstance(e);return i?Vo(i,t,o,s,r):{text:`\u540E\u7AEF\u6A21\u578B${e}\u4E0D\u5B58\u5728\uFF01`}}};import{RoleType as ts}from"@coze/api";import{existsSync as Qr}from"fs";import{v4 as Yr}from"uuid";import Zr from"jsonwebtoken";import{ChatEventType as De,CozeAPI as es}from"@coze/api";var co=y("coze-service"),zt=class{static{p(this,"CozeService")}_options;constructor(e){this._options=e,this._options.apiBase=this._options.apiBase??"https://api.coze.cn",this._options.apiBase.endsWith("/")&&(this._options.apiBase=this._options.apiBase.slice(0,this._options.apiBase.length-1))}_token;_client;get client(){return this._client}async _loadToken(){let e=Z(this._options.privateKeyPath),t;Qr(e)?t=await b.fromPath(e,"text").asText():(co.warn("coze\u79C1\u94A5\u8DEF\u5F84\u4E0D\u5B58\u5728\uFF0C\u5C1D\u8BD5\u5C06\u5185\u5BB9\u76F4\u63A5\u4F5C\u4E3A\u79C1\u94A5\u4F7F\u7528\u3002"),t=e);let o=parseInt(new Date().getTime()/1e3),s={iss:Z(this._options.appId),aud:this._options.apiBase.replace("https://","").replace("http://",""),iat:o,exp:o+86399,jti:Yr()},r={alg:"RS256",typ:"JWT",kid:Z(this._options.publicKey)},i=Zr.sign(s,t,{algorithm:"RS256",header:r}),n=await(await fetch(this._options.apiBase+"/api/permission/oauth2/token",{method:"post",headers:{"content-type":"application/json",authorization:`Bearer ${i}`},body:JSON.stringify({duration_seconds:86399,grant_type:"urn:ietf:params:oauth:grant-type:jwt-bearer"})})).json();this._token=n.access_token;let c=n.expires_in;co.trace("\u6210\u529F\u83B7\u53D6coze\u5E94\u7528token\uFF1A"+this._token),this._client=new es({baseURL:this._options.apiBase,token:this._token});let m=(c-o)*1e3;setTimeout(()=>{this._loadToken()},m/1.2)}async init(){await this._loadToken()}async conversations(e){return await this._get("/v1/conversations",{bot_id:e})}async createConversation(e,t){let o=await this._post("/v1/conversation/create",{messages:e,meta_data:t});return co.debug(o),o}async streamChat(e,t){let o=await this._client.chat.stream(e),s;for await(let r of o)switch(r.event){case De.CONVERSATION_CHAT_CREATED:{t.onStart?.(r.data);break}case De.CONVERSATION_MESSAGE_DELTA:{t.onReply(r.data.content,r);break}case De.CONVERSATION_MESSAGE_COMPLETED:{s||(s=r.data.content,t.onReplyCompleted?.(s,r));break}case De.CONVERSATION_CHAT_COMPLETED:{t.onCompleted?.(s,r.data);break}case De.CONVERSATION_CHAT_FAILED:throw new Error(JSON.stringify(r.data));default:t.others?.(r);break}}async _post(e,t,o){return o&&(e=e+"?"+new URLSearchParams(o).toString()),(await fetch(this._options.apiBase+e,{method:"post",headers:{"content-type":"application/json",authorization:`Bearer ${this._token}`},body:JSON.stringify(t)})).json()}async _get(e,t){return t&&(e=e+"?"+new URLSearchParams(t).toString()),(await fetch(this._options.apiBase+e,{method:"get",headers:{authorization:`Bearer ${this._token}`}})).json()}};var $e=class a extends A{static{p(this,"CozeBot")}_options;static params={name:"coze-bot",desc:"\u5B57\u8282\u6263\u5B50\u667A\u80FD\u4F53",needHistoryMessage:!1,optionsSchema:{type:"formily",formily:{type:"object",properties:{...A.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u9ED8\u8BA4\u4F7F\u7528https://api.coze.cn"},"x-validator":{format:"url"}},appId:{type:"string",title:"Coze\u5E73\u53F0\u5E94\u7528ID","x-index":30,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165Coze\u5E73\u53F0\u4E0A\u7684\u5E94\u7528ID"},"x-decorator-props":{tooltip:"\u5E94\u7528\u53D1\u5E03\u9875\u9762\uFF0C\u53D1\u5E03\u4E3AAPI\uFF0C\u4ECEOAuth\u9009\u9879\u5361\u4E2D\u83B7\u5F97"},required:!0},botId:{type:"string",title:"Coze\u5E73\u53F0\u7684BotID","x-index":35,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165Coze\u5E73\u53F0\u4E0A\u7684BotID"},"x-decorator-props":{tooltip:"\u5E94\u7528\u7F16\u8F91\u9875\u9762\uFF0C\u6D4F\u89C8\u5668\u5730\u5740bot/xxx\uFF0Cxxx\u5C31\u662FbotId\u3002"},required:!0},apiKey:{type:"string",title:"\u5E94\u7528\u516C\u94A5","x-index":40,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u516C\u94A5"},"x-decorator-props":{tooltip:"\u5E94\u7528\u53D1\u5E03\u9875\u9762\uFF0C\u53D1\u5E03\u4E3AAPI\uFF0C\u521B\u5EFA\u65B0\u7684\u5E94\u7528\u540E\u53EF\u4EE5\u83B7\u5F97"},required:!0},privateKey:{type:"string",title:"\u5E94\u7528\u79C1\u94A5","x-index":50,"x-decorator":"FormItem","x-component":"Input.TextArea","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u79C1\u94A5",rows:4},"x-decorator-props":{tooltip:"\u5E94\u7528\u53D1\u5E03\u9875\u9762\uFF0C\u53D1\u5E03\u4E3AAPI\uFF0C\u521B\u5EFA\u65B0\u7684\u5E94\u7528\u540E\u53EF\u4EE5\u83B7\u5F97\uFF0C\u76F4\u63A5\u586B\u5165pem\u6587\u4EF6\u4E2D\u7684\u6240\u6709\u5185\u5BB9\u5373\u53EF"},required:!0},preferLocalAttach:{type:"boolean",title:"\u662F\u5426\u4F7F\u7528\u672C\u5730\u56FE\u7247\u5730\u5740\uFF1F","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},default:!1,"x-decorator-props":{tooltip:"\u662F\u5426\u4F18\u5148\u4F7F\u7528\u672C\u5730\u6587\u4EF6\uFF0C\u800C\u4E0D\u662F\u5C06\u6587\u4EF6\u4E0A\u4F20\u5230dify\u670D\u52A1\u5668\uFF0C\u9ED8\u8BA4false\u3002\u5982\u679C\u4F18\u5148\u4F7F\u7528\u672C\u5730\u6587\u4EF6\uFF0C\u67D0\u4E9B\u5E73\u53F0\u53EF\u80FD\u65E0\u6CD5\u540E\u7EED\u8FDB\u884C\u8FFD\u95EE\u3002"}},customVars:{type:"object",title:"\u81EA\u5B9A\u4E49\u53D8\u91CF","x-decorator":"FormItem","x-component":"Code","x-component-props":{},"x-decorator-props":{tooltip:"\u81EA\u5B9A\u4E49\u53D8\u91CF\uFF0C\u53EF\u4EE5\u8F93\u5165JSON\u683C\u5F0F\u7684\u6570\u636E\uFF0C\u5BF9\u5E94dify\u4E2D\u7684\u53D8\u91CF\u3002"}}}}}};constructor(e){super(e),this._options=e}_service;async init(){let e=new zt({privateKeyPath:this._options.privateKey,publicKey:this._options.apiKey,appId:this._options.appId,apiBase:this._options.apiBase});await e.init(),this._service=e}get options(){return this._options}get params(){return a.params}get supportConversationOnline(){return!0}async _loadFileInfo(e,t){let o;if(_.httpUrl&&this._options.preferLocalAttach)o={file_url:await e.asUrl(),type:t};else{let s=await this._service.client.files.upload({file:await e.asReadStream()});if(s)o={file_id:s.id,type:t};else return}return o}async generateReadyMessage(e,t,o){let s={role:ts.User,type:"question",content_type:"text"},r=[],i={bot_id:this._options.botId,user_id:e,auto_save_history:!0,additional_messages:[s],custom_variables:this._options.customVars};if(o.length){for(let n of o){if(n.type!=="image"&&n.type!=="file")continue;let c=await this._loadFileInfo(n.file,n.type);r.push(c)}t.length&&(r.push({type:"text",text:t}),t=JSON.stringify(r)),s.content_type="object_string"}return s.content=t,{forSend:i,chatId:e,plainText:t}}async getLatestChatTime(){}async getLatestConversationId(){}async deleteConversation(){}async sendMessageBody(e,t,o,s){s?.conversationId?.length&&(e.conversation_id=s.conversationId),await this._service.streamChat(e,{onReply:p(r=>{o.onContent(r,l.TEXT)},"onReply"),onCompleted:p((r,i)=>{o.onCompleted(i.conversation_id,i.completed_at)},"onCompleted")})}};import os from"axios";import rs from"form-data";var ss=1e5,Zo={json:"application/json",stream:"text/event-stream",form:"application/x-www-form-urlencoded; charset=UTF-8",download:"application/octet-stream"};function ns(a){return a.replace(/\\u[0-9a-f]{4}/g,(e,t)=>String.fromCharCode(parseInt(t,16)))}p(ns,"unicodeToChar");var Wt=class{static{p(this,"DifyService")}_options;constructor(e){this._options=e,this._baseOptions={method:"GET",mode:"cors",headers:new Headers({"Content-Type":Zo.json}),redirect:"follow"},this._handleStream=async(o,s,r,i,n,c,m,d,h,u,g,w,x,v,R,le)=>{if(!o.ok)throw new Error("Network response was not ok");let X=o.body?.getReader(),F=new TextDecoder("utf-8"),P="",I,J=!0;async function te(){let C=!1;return X?.read().then(pe=>{if(pe.done){r&&r();return}P+=F.decode(pe.value,{stream:!0});let Oe=P.split(`
15
+ `);try{Oe.forEach(ne=>{ne.startsWith("data: ")&&(ne=ne.substring(6));try{I=JSON.parse(ne)}catch{s("",J,{conversationId:I?.conversation_id,messageId:I?.message_id,sourceBuffer:I});return}if(I.status===400||!I.event){s("",!1,{conversationId:void 0,messageId:"",errorMessage:I?.message,errorCode:I?.code,sourceBuffer:I}),C=!0,r?.(!0);return}I.event==="message"||I.event==="agent_message"?(s(ns(I.answer),J,{conversationId:I.conversation_id,taskId:I.task_id,messageId:I.id,sourceBuffer:I}),J=!1):I.event==="agent_thought"?i?.(I):I.event==="message_file"?m?.(I):I.event==="message_end"?n?.(I):I.event==="message_replace"?c?.(I):I.event==="workflow_started"?d?.(I):I.event==="workflow_finished"?h?.(I):I.event==="node_started"?u?.(I):I.event==="node_finished"?g?.(I):I.event==="iteration_started"?w?.(I):I.event==="iteration_next"?x?.(I):I.event==="iteration_completed"?v?.(I):I.event==="text_chunk"?R?.(I):I.event==="text_replace"&&le?.(I)}),P=Oe[Oe.length-1]}catch(ne){s("",!1,{conversationId:void 0,messageId:"",errorMessage:`${ne}`,sourceBuffer:I}),C=!0,r?.(!0);return}if(!C)return te()})}return p(te,"read"),te()},this._baseFetch=(o,s,{needAllResponseContent:r})=>{let i=Object.assign({},this._baseOptions,s),c=`${this._apiUrl}${o.startsWith("/")?o:`/${o}`}`,{params:m,body:d}=i;if(m=m??{},m){let h=[];Object.keys(m).forEach(u=>h.push(`${u}=${encodeURIComponent(m[u])}`)),c.search(/\?/)===-1?c+=`?${h.join("&")}`:c+=`&${h.join("&")}`,delete i.params}return d&&(i.body=JSON.stringify(d)),Promise.race([new Promise((h,u)=>{setTimeout(()=>{u(new Error("request timeout"))},ss)}),new Promise((h,u)=>{globalThis.fetch(c,i).then(g=>{let w=g.clone();if(!/^(2|3)\d{2}$/.test(g.status)){try{let v=g.json();switch(g.status){case 401:{this._options.onError?.("Invalid token");return}default:new Promise(()=>{v.then(R=>{this._options.onError?.(R.message)})})}}catch(v){this._options.onError?.(String(v))}return Promise.reject(w)}if(g.status===204){h({result:"success"});return}let x=i.headers.get("Content-type")===Zo.download?g.blob():g.json();h(r?w:x)}).catch(g=>{this._options.onError?.(String(g)),u(g)})})])},this._upload=async o=>{let n={...{method:"POST",url:`${`${this._apiUrl}/files/upload`}`,data:{}},...o},c=n.data;c.append("user",o.user),this.options.appKey&&(n.headers=n.headers??{},n.headers.Authorization=`Bearer ${this.options.appKey}`),n.headers={...c.getHeaders(),...n.headers};let m=await os({method:n.method,url:n.url,headers:n.headers,data:n.data,responseType:"json",withCredentials:!0,onUploadProgress:n.onprogress});if(m.status===201)return m.data;throw new Error(`Request failed with status ${m.status}`)},this._ssePost=async(o,s,{onData:r,onCompleted:i,onThought:n,onFile:c,onMessageEnd:m,onMessageReplace:d,onWorkflowStarted:h,onWorkflowFinished:u,onNodeStarted:g,onNodeFinished:w,onError:x,onIterationStart:v,onIterationNext:R,onIterationFinish:le,onTextChunk:X,onTextReplace:F})=>{let P=Object.assign({},this._baseOptions,{method:"POST"},s),J=`${this._apiUrl}${o.startsWith("/")?o:`/${o}`}`,{body:te}=P;return te&&(P.body=JSON.stringify(te)),P.credentials="omit",fetch(J,P).then(C=>{if(!/^(2|3)\d{2}$/.test(C.status)){new Promise(()=>{C.json().then(pe=>{this._options.onError?.(pe.message||"Server Error")})}),x?.("Server Error");return}return this._handleStream(C,(pe,Oe,ne)=>{if(ne.errorMessage){this._options.onError?.(ne.errorMessage);return}r?.(pe,Oe,ne)},()=>{i?.()},n,m,d,c,h,u,g,w,v,R,le,X,F)}).catch(C=>{this._options.onError?.(String(C)),x?.(C)})},this._request=(o,s={},r)=>this._baseFetch(o,s,r||{}),this._get=(o,s={},r)=>this._request(o,Object.assign({},s,{method:"GET"}),r),this._patch=(o,s={},r)=>this._request(o,Object.assign({},s,{method:"PATCH"}),r),this._post=(o,s={},r)=>this._request(o,Object.assign({},s,{method:"POST"}),r),this._put=(o,s={},r)=>this._request(o,Object.assign({},s,{method:"PUT"}),r),this._del=(o,s={},r)=>this._request(o,Object.assign({},s,{method:"DELETE"}),r),this.imageUpload=({file:o,onProgressCallback:s,user:r,fileName:i})=>{let n=new rs;i?n.append("file",o,i):n.append("file",o);let c=p(m=>{if(m.lengthComputable){let d=Math.floor(m.loaded/m.total*100);s?.(d)}},"onProgress");return this._upload({data:n,onprogress:c,user:r})},this.sendChatMessage=async(o,{onData:s,onCompleted:r,onThought:i,onFile:n,onError:c,getAbortController:m,onMessageEnd:d,onMessageReplace:h,onWorkflowStarted:u,onNodeStarted:g,onNodeFinished:w,onWorkflowFinished:x})=>this._ssePost("chat-messages",{body:{...o,response_mode:o.response_mode??"streaming",user:o.user}},{onData:s,onCompleted:r,onThought:i,onFile:n,onError:c,getAbortController:m,onMessageEnd:d,onMessageReplace:h,onNodeStarted:g,onWorkflowStarted:u,onWorkflowFinished:x,onNodeFinished:w}),this.sendWorkflowMessage=async(o,{onWorkflowStarted:s,onNodeStarted:r,onNodeFinished:i,onWorkflowFinished:n,onIterationStart:c,onIterationNext:m,onIterationFinish:d,onTextChunk:h,onTextReplace:u})=>this._ssePost("workflows/run",{body:{...o,response_mode:"streaming",user:o.user}},{onNodeStarted:r,onWorkflowStarted:s,onWorkflowFinished:n,onNodeFinished:i,onIterationStart:c,onIterationNext:m,onIterationFinish:d,onTextChunk:h,onTextReplace:u}),this.stopChatMessageResponding=(o,s)=>this._post(`chat-messages/${o}/stop`,{body:{user:s}}),this.fetchSuggestedQuestions=(o,s)=>this._get(`messages/${o}/suggested`,{params:{user:s}}),this.fetchConversations=async(o,s=!1,r=100)=>this._get("conversations",{params:{limit:r,first_id:"",pinned:s,user:o}}),this.fetchChatList=async(o,s,r=20)=>this._get("messages",{params:{conversation_id:o,limit:r,last_id:"",user:s}}),this.fetchAppParams=async o=>this._get("parameters",{params:{user:o}}),this.updateFeedback=async({url:o,body:s,user:r})=>this._post(o,{body:{...s,user:r}}),this.generationConversationName=async(o,s,r)=>this._post(`conversations/${o}/name`,{body:{auto_generate:!r,name:r,user:s}}),this.deleteConversation=async(o,s)=>this._del(`conversations/${o}`,{body:{user:s}}),this.pinConversation=async(o,s)=>this._patch(`conversations/${o}/pin`,{params:{user:s}}),this.unpinConversation=async(o,s)=>this._patch(`conversations/${o}/unpin`,{params:{user:s}});let t=this._options.appKey;t&&this._baseOptions.headers.append("Authorization",`Bearer ${t}`),this._options.appServiceBase.endsWith("/")&&(this._options.appServiceBase=this._options.appServiceBase.substring(0,this._options.appServiceBase.length-1)),this._options.appServiceBase.endsWith("/v1")&&(this._options.appServiceBase=this._options.appServiceBase.substring(0,this._options.appServiceBase.length-3)),this._apiUrl=this._options.appServiceBase+"/v1"}_apiUrl;_baseOptions;_handleStream;_baseFetch;_upload;_ssePost;_request;_get;_patch;_post;_put;_del;get options(){return this._options}imageUpload;sendChatMessage;sendWorkflowMessage;stopChatMessageResponding;fetchSuggestedQuestions;fetchConversations;fetchChatList;fetchAppParams;updateFeedback;generationConversationName;deleteConversation;pinConversation;unpinConversation;getFilesUrl(e){return e.startsWith("/")?this._options.appServiceBase+e:e}};var je=class a extends A{static{p(this,"DifyAgentBot")}_options;static params={name:"dify-agent-bot",desc:"Dify\u667A\u80FD\u4F53",needHistoryMessage:!1,optionsSchema:{type:"formily",formily:{type:"object",properties:{...A.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u4E0D\u5E26/v1\uFF0C\u9ED8\u8BA4\u4F7F\u7528https://api.dify.ai"},"x-validator":{format:"url"}},preferLocalAttach:{type:"boolean",title:"\u662F\u5426\u4F7F\u7528\u672C\u5730\u56FE\u7247\u5730\u5740\uFF1F","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},default:!1,"x-decorator-props":{tooltip:"\u662F\u5426\u4F18\u5148\u4F7F\u7528\u672C\u5730\u6587\u4EF6\uFF0C\u800C\u4E0D\u662F\u5C06\u6587\u4EF6\u4E0A\u4F20\u5230dify\u670D\u52A1\u5668\uFF0C\u9ED8\u8BA4false\u3002\u5982\u679C\u4F18\u5148\u4F7F\u7528\u672C\u5730\u6587\u4EF6\uFF0C\u67D0\u4E9B\u5E73\u53F0\u53EF\u80FD\u65E0\u6CD5\u540E\u7EED\u8FDB\u884C\u8FFD\u95EE\u3002"}},customVars:{type:"object",title:"\u81EA\u5B9A\u4E49\u53D8\u91CF","x-decorator":"FormItem","x-component":"Code","x-component-props":{},"x-decorator-props":{tooltip:"\u81EA\u5B9A\u4E49\u53D8\u91CF\uFF0C\u53EF\u4EE5\u8F93\u5165JSON\u683C\u5F0F\u7684\u6570\u636E\uFF0C\u5BF9\u5E94dify\u4E2D\u7684\u53D8\u91CF\u3002"}}}}}};constructor(e){super(e),this._options=e,this._options.apiBase||(this.logger.warn("\u5F53\u524D\u6CA1\u6709\u914D\u7F6Edify\u670D\u52A1\u5668\u5730\u5740\uFF0C\u5C06\u4F7F\u7528\u5B98\u7F51\u5730\u5740\uFF1Ahttps://api.dify.ai"),this._options.apiBase="https://api.dify.ai")}_service;get params(){return a.params}get options(){return this._options}get supportConversationOnline(){return!0}async _uploadImage(e,t){let o=await e.asReadStream();try{return(await this._service.imageUpload({file:o,user:t})).id}catch(s){this.logger.error(s);return}}async _loadFileInfo(e,t){let o;if(_.httpUrl&&this._options.preferLocalAttach)o={transfer_method:"remote_url",url:await e.asUrl(),type:"image"};else{let s=await this._uploadImage(e,t);if(s)o={transfer_method:"local_file",upload_file_id:s,type:"image"};else return}return o}async init(){this._service=new Wt({appKey:this._options.apiKey,appServiceBase:this._options.apiBase})}async generateReadyMessage(e,t,o){let s={query:t,inputs:this._options.customVars??{},user:e};if(o.length){s.files=[];for(let r of o){if(r.type!=="image"){this.logger.warn("dify\u5F53\u524D\u4EC5\u652F\u6301\u56FE\u7247\u9644\u4EF6\uFF01");continue}s.files.push(await this._loadFileInfo(r.file,e))}}return{forSend:s,chatId:e,plainText:t}}async getLatestConversationId(e){this.logger.debug("get conversation id "+e);let t=await this._service.fetchConversations(e,!1,1);if(t.data?.length)return t.data[0].id}async getLatestChatTime(e,t){return(await this._service.fetchChatList(e,t,1)).data?.[0]?.created_at}async deleteConversation(e,t){await this._service.deleteConversation(e,t)}async sendMessageBody(e,t,o,s){e.conversation_id=s?.conversationId,await this._service.sendChatMessage(e,{onData:p(r=>{o.onContent(r,l.TEXT)},"onData"),onMessageEnd:p(r=>{o.onCompleted(r.conversation_id,r.created_at)},"onMessageEnd"),onThought:p(r=>{this.logger.debug(r.tool_input)},"onThought"),onError:p(r=>{throw r},"onError")})}};import is from"openai";var M=class a extends A{static{p(this,"OpenAIBot")}_options;static params={name:"openai-bot",desc:"OpenAI\u517C\u5BB9\u6A21\u578B",needHistoryMessage:!0,optionsSchema:{type:"formily",formily:{type:"object",properties:{...A.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"eg: https://your.domain.com/v1 \u4F7F\u7528OpenAI\u5B98\u65B9\u670D\u52A1\u8BF7\u7559\u7A7A\u3002"},"x-validator":{format:"url"}},chatOptions:{type:"object",title:"\u5BF9\u8BDD\u914D\u7F6E","x-index":4,properties:{model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-index":5,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6A21\u578B\u540D\u79F0\uFF0C\u5982 gtp4o-mini"},required:!0}},required:!0},systemPrompt:{type:"string",title:"\u7CFB\u7EDF\u63D0\u793A\u8BCD","x-index":10,"x-decorator":"FormItem","x-component":"Input.TextArea","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u7CFB\u7EDF\u89D2\u8272\u8BBE\u5B9A\u7684\u63D0\u793A\u8BCD\uFF0C\u9ED8\u8BA4\u4E3A\u7A7A",rows:4}}}}}};constructor(e){super(e),this._options=e,this._options.clientOptions=this._options.clientOptions??{},this._options.chatOptions?.model?.length||this.logger.warn("\u5F53\u524D\u672A\u8BBE\u7F6E\u4F7F\u7528\u7684\u6A21\u578B\u540D\u79F0\uFF0C\u8BE5bot\u6267\u884C\u53EF\u80FD\u4F1A\u5F02\u5E38:"+this._options.instanceName),this._options.apiBase?.length||this.logger.warn("\u5F53\u524D\u4F7F\u7528\u7684open ai\u5B98\u65B9\u5730\u5740\uFF0C\u8BF7\u786E\u4FDD\u7F51\u7EDC\u80FD\u591F\u8BBF\u95EE\uFF01"),this._options.apiBase?.length&&!this._options.apiBase.endsWith("/v1")&&this.logger.warn("openai\u7684\u63A5\u53E3\u5730\u5740\u4E00\u822C\u4EE5/V1\u7ED3\u5C3E\uFF0C\u5F53\u524D\u662F\uFF1A"+this._options.apiBase)}client;get options(){return this._options}get params(){return a.params}get supportConversationOnline(){return!1}async _loadFileInfo(e,t){let o=await e.asUrl();if(this.logger.debug("\u9644\u4EF6\u5730\u5740\uFF1A"+o),t==="image")return{type:"image_url",image_url:{url:o}};if(t==="video")return{type:"video_url",video_url:{url:o}}}async generateReadyMessage(e,t,o){let s;if(this._options.onlyText)s={role:"user",content:t};else{let i=[];if(s={role:"user",content:i},o.length)for(let n of o){let c=await this._loadFileInfo(n.file,n.type);if(!c){this.logger.debug("\u4E0D\u652F\u6301\u7684\u9644\u4EF6\u7C7B\u578B\uFF1A"+n.type);continue}i.push(c)}t?.length&&i.push({type:"text",text:t})}let r={...this._options.chatOptions,stream:!0,messages:[s]};return r.user=e,{forHistory:{type:"user",data:s},forSend:r,chatId:e,plainText:t}}getLatestConversationId(e){}getLatestChatTime(e,t){}deleteConversation(e,t){}async sendMessageBody(e,t,o){t?.length&&(e.messages=[...t,...e.messages]),this._options.systemPrompt?.length&&(e.messages=[{role:"system",content:this._options.systemPrompt},...e.messages]);let s=await this.client.chat.completions.create(e),r=!1,i="";for await(let n of s){let c="",m="";for(let d of n.choices)if(d.delta.reasoning_content?.length&&(m+=d.delta.reasoning_content),d.delta.content?.length&&(c+=d.delta.content),d.finish_reason?.length){d.finish_reason==="content_filter"?c+="\u3010\u56DE\u590D\u4E2D\u65AD\uFF1A\u60A8\u7684\u5185\u5BB9\u88AB\u68C0\u6D4B\u4E3A\u4E0D\u5408\u89C4\u3002\u3011":d.finish_reason!=="stop"&&this.logger.warn("\u9047\u5230\u672A\u77E5\u7684\u539F\u56E0\u56DE\u590D\u7ED3\u675F\uFF1A"+d.finish_reason),r=!0;break}if(i+=c,m.length&&o.onReasoning?.(m),c.length&&o.onContent(c,l.TEXT),r)break}return{type:"bot",data:{role:"assistant",content:i}}}async init(){this.client=new is({...this._options.clientOptions,baseURL:this._options.apiBase,apiKey:this._options.apiKey})}};var qe=class extends M{static{p(this,"FastGPTBot")}_options;static params={name:"fastgpt-bot",desc:"fastgpt\u667A\u80FD\u4F53",needHistoryMessage:!1,optionsSchema:{type:"formily",formily:{type:"object",properties:{...M.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u9ED8\u8BA4\u4F7F\u7528https://cloud.fastgpt.cn/api"},"x-validator":{format:"url"}},appId:{type:"string",title:"appId","x-index":3,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7684ID"},required:!0,"x-decorator-props":{tooltip:"\u5728\u5E94\u7528\u7F16\u8F91\u9875\u9762\u7684url\u5730\u5740\u680F\u53EF\u4EE5\u770B\u5230\u6240\u9009\u5E94\u7528\u7684appId"}},disableHistory:{type:"string",title:"\u662F\u5426\u7981\u7528\u5728\u7EBF\u5386\u53F2\u6D88\u606F","x-index":4,"x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u7981\u7528\u540E\u6BCF\u6B21\u5BF9\u8BDD\u90FD\u662F\u65B0\u7684\uFF0C\u6CA1\u6709\u4E0A\u4E0B\u6587"},default:!1},chatOptions:{type:"object",title:"\u5BF9\u8BDD\u914D\u7F6E",properties:{model:{type:"string",title:"\u6A21\u578B\u540D\u79F0\uFF08\u65E0\u9700\u586B\u5199\uFF09","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u65E0\u9700\u586B\u5199"},"x-disabled":!0}},"x-display":!1}}}}};constructor(e){let t;e.apiBase?.length||(e.apiBase="https://cloud.fastgpt.cn/api"),e.apiBase.endsWith("/v1")?t=e.apiBase.slice(0,e.apiBase.length-3):(t=e.apiBase,e.apiBase=e.apiBase+"/v1"),e.chatOptions?.model?.length&&(e.chatOptions=e.chatOptions??{},e.chatOptions.model="gpt-4"),super(e),this._options=e,this._options.disableHistory=this._options.disableHistory??!1,this._commonApiBase=t}_commonApiBase;get options(){return this._options}get supportConversationOnline(){return!0}async generateReadyMessage(e,t,o){let s=await super.generateReadyMessage(e,t,o);return this._options.disableHistory||(s.forSend.chatId=e),s}async getLatestConversationId(e){return e}async getLatestChatTime(e,t){let s=((await(await fetch(this._commonApiBase+"/core/chat/getHistories",{method:"post",headers:{"content-type":"application/json",authorization:`Bearer ${this._options.apiKey}`},body:JSON.stringify({appId:this._options.appId,offset:0,pageSize:1e3,source:"api"})})).json()).data?.list).find(r=>r.chatId===t);if(s)return new Date(s.updateTime).getTime()/1e3}async deleteConversation(e,t){let o=await await fetch(this._commonApiBase+`/core/chat/delHistory?chatId=${t}&appId=${this._options.appId}`,{method:"delete",headers:{authorization:`Bearer ${this._options.apiKey}`}});this.logger.debug(o)}};var He=class a extends A{static{p(this,"OllamaBot")}_options;static params={name:"ollama-bot",desc:"Ollama\u6A21\u578B",needHistoryMessage:!0,optionsSchema:{type:"formily",formily:{type:"object",properties:{...A.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u5982 https://your.domain.com"},"x-validator":{format:"url"},required:!0},apiKey:{type:"string",title:"\u670D\u52A1\u5BC6\u94A5","x-index":2,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5BC6\u94A5"},"x-validator":{required:!0,message:"\u670D\u52A1\u5BC6\u94A5\u4E0D\u80FD\u4E3A\u7A7A"},"x-decorator-props":{tooltip:"\u4E00\u822C\u5728\u5E94\u7528\u53D1\u5E03\u9875\u9762\u6216\u8005API\u914D\u7F6E\u9875\u9762\u53EF\u4EE5\u770B\u5230\u3002"},"x-visible":!1},model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-index":4,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6A21\u578B\u540D\u79F0\uFF0C\u5982 qwen2"},required:!0},authType:{type:"string",enum:["basic","token","none"],title:"\u6388\u6743\u8BA4\u8BC1\u65B9\u5F0F","x-index":5,"x-decorator":"FormItem","x-component":"Select","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u6388\u6743\u8BA4\u8BC1\u65B9\u5F0F"},"x-decorator-props":{tooltip:"basic\u8BA4\u8BC1\u65F6\u9700\u8981\u914D\u7F6E\u57FA\u7840\u6388\u6743\u4FE1\u606F\uFF0Ctoken\u65F6\u5019\u9700\u8981\u914D\u7F6Etoken\u6388\u6743\u4FE1\u606F\u3002none\u65F6\u65E0\u9700\u586B\u5199\u3002"},default:"basic"},basicOptions:{type:"object",title:"\u57FA\u7840\u6388\u6743\u4FE1\u606F","x-index":6,properties:{name:{type:"string",title:"Basic\u7528\u6237\u540D","x-index":7,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u7528\u6237\u540D"}},password:{type:"string",title:"Basic\u5BC6\u7801","x-index":8,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5BC6\u7801"}}}},tokenOptions:{type:"object",title:"Token\u6388\u6743\u4FE1\u606F","x-index":9,properties:{in:{type:"string",enum:["header","query"],title:"Token\u4FE1\u606F\u4F4D\u7F6E","x-index":10,"x-decorator":"FormItem","x-component":"Select","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u6388\u6743\u4FE1\u606F\u4F4D\u7F6E"},"x-decorator-props":{tooltip:"\u6388\u6743\u4FE1\u606F\u5B58\u5728\u4E8Eheader\u8FD8\u662Furl\u7684query\u4E32\u4E2D\u3002"},default:"header"},key:{type:"string",title:"Token Key","x-index":11,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165TokenKey"},"x-decorator-props":{tooltip:"\u6BD4\u5982Header\u4E2D\u7684Key\u901A\u5E38\u4E3AAuthorization\uFF0CUrl\u4E2D\u7684\u53EF\u80FD\u4E3Atoken\uFF0C\u6839\u636E\u5B9E\u9645\u60C5\u51B5\u586B\u5199\u3002"},default:"Authorization"},token:{type:"string",title:"Token Value","x-index":12,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165Token\u503C"}}}},onlyText:{type:"boolean",title:"\u662F\u5426\u4E3A\u7EAF\u6587\u672C\u6A21\u578B?","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u5982\u679C\u4E0D\u652F\u6301\u591A\u6A21\u6001\uFF0C\u8BBE\u7F6E\u4E3Atrue\uFF0C\u5426\u5219\u8BBE\u7F6E\u4E3Afalse\uFF0C\u9ED8\u8BA4\u662Ffalse\u3002"},default:!0},options:{type:"object",title:"Ollama\u7684\u53EF\u9009\u53C2\u6570","x-decorator":"FormItem","x-component":"Code","x-component-props":{},"x-decorator-props":{tooltip:"\u81EA\u5B9A\u4E49\u53D8\u91CF\uFF0C\u53EF\u4EE5\u8F93\u5165JSON\u683C\u5F0F\u7684\u6570\u636E\uFF0C\u5BF9\u5E94Ollama\u4E2D\u6E29\u5EA6\uFF0CTop P\u7B49\u914D\u7F6E\u53C2\u6570\u3002"}},systemPrompt:{type:"string",title:"\u7CFB\u7EDF\u63D0\u793A\u8BCD","x-index":3,"x-decorator":"FormItem","x-component":"Input.TextArea","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u7CFB\u7EDF\u89D2\u8272\u8BBE\u5B9A\u7684\u63D0\u793A\u8BCD\uFF0C\u9ED8\u8BA4\u4E3A\u7A7A",rows:4}}}}}};constructor(e){if(super(e),this._options=e,!this._options.apiBase)throw new Error("\u6CA1\u6709\u914D\u7F6EapiBase!")}get options(){return this._options}get params(){return a.params}get supportConversationOnline(){return!1}async generateReadyMessage(e,t,o){let s={model:this._options.model,messages:[],options:this._options.options},r=[];if(o.length)for(let n of o)if(n.type==="image"){let c=await n.file.asBase64();r.push(c)}else this.logger.debug("\u4E0D\u652F\u6301\u7684\u6587\u4EF6");let i={role:"user",content:t,images:r};return s.messages.push(i),{forSend:s,chatId:e,plainText:t,forHistory:{type:"user",data:i}}}getLatestConversationId(e){}getLatestChatTime(e,t){}deleteConversation(e,t){}async sendMessageBody(e,t,o){t?.length&&(e.messages=[...t,e.messages[0]]),this._options.systemPrompt?.length&&(e.messages=[{role:"system",content:this._options.systemPrompt},...e.messages]);let s=this._options.apiBase+"/api/chat";this._options.authType==="token"&&this._options.tokenOptions.in==="query"&&(s+=`?${this._options.tokenOptions.key}=${this._options.tokenOptions.token}`);let r={"Content-Type":"application/json"};if(this._options.authType==="token"&&this._options.tokenOptions.in==="header")r.Authorization=this._options.tokenOptions.token;else if(this._options.authType==="basic"){let c=`${this._options.basicOptions.name}:${this._options.basicOptions.password}`;r.Authorization=`Basic ${btoa(c)}`}let i=await fetch(s,{method:"post",keepalive:!0,headers:r,body:JSON.stringify(e)}),n="";if(await ee(i.body,c=>{let m=c.message?.content;m?.length&&(n+=m,o.onContent(m,l.TEXT))}),n?.length)return this.logger.debug(n),{type:"bot",data:{role:"assistant",content:n}}}async init(){}};var Ge=class extends M{static{p(this,"OpenRouterBot")}static params={name:"openrouter-bot",desc:"OpenRouter\u6A21\u578B",optionsSchema:{type:"formily",formily:{type:"object",properties:{...M.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"eg: https://openrouter.ai/api/v1 \u4F7F\u7528OpenRouter\u5B98\u65B9\u670D\u52A1\u53EF\u7559\u7A7A\u3002"},"x-validator":{format:"url"},"x-decorator-props":{tooltip:"\u57FA\u4E8EOpenAI\u517C\u5BB9\u63A5\u53E3\u6269\u5C55\uFF0C\u8BF7\u4F7F\u7528OpenAI\u517C\u5BB9\u63A5\u53E3\u7684\u5730\u5740\uFF0C\u4F7F\u7528OpenRouter\u5B98\u65B9\u5730\u5740\u53EF\u7559\u7A7A\u3002"}},chatOptions:{type:"object",title:"\u5BF9\u8BDD\u914D\u7F6E","x-index":4,properties:{model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-index":5,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"meta-llama/llama-3.1-70b-instruct:free"},required:!0}},required:!0}}}}};constructor(e){e.apiBase?.length||(e.apiBase="https://openrouter.ai/api/v1"),super(e)}};var Ke=class a extends A{static{p(this,"QAnythingBot")}_options;static params={name:"qanything-bot",desc:"\u7F51\u6613\u6709\u9053\u77E5\u8BC6\u5E93\u667A\u80FD\u4F53",needHistoryMessage:!0,optionsSchema:{type:"formily",formily:{type:"object",properties:{...A.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u9ED8\u8BA4\u4F7F\u7528https://openapi.youdao.com/q_anything/api"},"x-validator":{format:"url"}},botId:{type:"string",title:"botId","x-index":3,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165bot\u7684id"},required:!0,"x-decorator-props":{tooltip:"\u5728Agents\u9875\u9762\u7684\u53F3\u4E0A\u89D2\u6216\u8005\u6D4F\u89C8\u5668\u7684URL\u4E2D\u90FD\u53EF\u4EE5\u770B\u5230botId"}},onlyText:{type:"boolean",title:"\u662F\u5426\u4E3A\u7EAF\u6587\u672C\u6A21\u578B?","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u5982\u679C\u4E0D\u652F\u6301\u591A\u6A21\u6001\uFF0C\u8BBE\u7F6E\u4E3Atrue\uFF0C\u5426\u5219\u8BBE\u7F6E\u4E3Afalse\uFF0C\u9ED8\u8BA4\u662Ffalse\u3002"},"x-display":!1}}}}};constructor(e){e.onlyText=e.onlyText??!0,super(e),this._options=e,this._options.apiBase||(this.logger.warn("\u6CA1\u6709\u914D\u7F6EapiBase\uFF0C\u5C06\u4F7F\u7528\u9ED8\u8BA4\u7684https://openapi.youdao.com/q_anything/api"),this._options.apiBase="https://openapi.youdao.com/q_anything/api")}get options(){return this._options}get params(){return a.params}get supportConversationOnline(){return!1}async generateReadyMessage(e,t){return{forSend:{uuid:this._options.botId,question:t,sourceNeeded:!1},chatId:e,plainText:t}}getLatestConversationId(e){}getLatestChatTime(e,t){}deleteConversation(e,t){}async sendMessageBody(e,t,o){t?.length?e.history=[...t]:e.history=[];let s=await fetch(this._options.apiBase+"/bot/chat_stream",{method:"post",keepalive:!0,headers:{"Content-Type":"application/json",Authorization:this._options.apiKey},body:JSON.stringify(e)}),r;if(await ee(s.body,i=>{let n=i.result.response;i.result.singleQAId!==null?r=n:n?.length&&o.onContent(n,l.TEXT)}),r?.length)return this.logger.debug(r),{type:"bot",data:{question:e.question,response:r}}}async init(){}};import{v4 as as}from"uuid";var ze=class a extends A{static{p(this,"WenxinAgentBot")}_options;static params={name:"wenxin-agent-bot",desc:"\u767E\u5EA6\u6587\u5FC3\u667A\u80FD\u4F53",needHistoryMessage:!1,optionsSchema:{type:"formily",formily:{type:"object",properties:{...A.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u9ED8\u8BA4\u4F7F\u7528https://agentapi.baidu.com"},"x-validator":{format:"url"}},appId:{type:"string",title:"appId","x-index":3,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7684ID"},required:!0,"x-decorator-props":{tooltip:"\u5728\u5E94\u7528\u8BE6\u60C5\u9875\u9762\u53EF\u4EE5\u770B\u5230\u5E94\u7528\u7684appId\u3002"}}}}}};constructor(e){e.apiBase=e.apiBase??"https://agentapi.baidu.com",super(e),this._options=e}get options(){return this._options}get params(){return a.params}get supportConversationOnline(){return!0}async _loadFileInfo(e,t){let o=await e.asUrl(),s=e.name.substring(e.name.lastIndexOf(".")+1);if(t==="image")return{imageName:e.name,imageType:s,imageUrl:o};{let r=await e.info();return{fileId:as(),fileName:e.name,fileSize:r.size,fileType:s,fileUrl:o}}}async generateReadyMessage(e,t,o){let s={},r={openId:e,message:{content:s},source:this._options.appId,from:"openapi"};if(o.length){s.type="multimodal",s.value=[];for(let i of o)s.value.push({type:i.type,value:await this._loadFileInfo(i.file,i.type)});s.value.push({type:"text",value:{showText:t,text:t}})}else s.type="text",s.value={showText:t,text:t};return{forSend:r,chatId:e,plainText:t}}getLatestConversationId(e){}getLatestChatTime(e,t){}deleteConversation(e,t){}async sendMessageBody(e,t,o,s){e.threadId=s?.conversationId;let r=await fetch(this._options.apiBase+`/assistant/conversation?appId=${this._options.appId}&secretKey=${this._options.apiKey}`,{method:"post",keepalive:!0,headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),i="";await ee(r.body,n=>{let c=n.data?.message?.content[0]?.data?.text;c?.length&&(i+=c,o.onContent(c,l.TEXT)),n.data?.message?.endTurn&&o.onCompleted(n.data.message.threadId,new Date().getTime()/1e3)}),this.logger.debug(i)}async init(){}};var We=class a extends A{static{p(this,"YuanQiBot")}_options;static params={name:"yuanqi-bot",needHistoryMessage:!0,desc:"\u817E\u8BAF\u5143\u5668\u667A\u80FD\u4F53",optionsSchema:{type:"formily",formily:{type:"object",properties:{...A.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u9ED8\u8BA4\u4F7F\u7528https://open.hunyuan.tencent.com"},"x-validator":{format:"url"}},apiKey:{type:"string",title:"\u670D\u52A1\u5BC6\u94A5","x-index":2,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5BC6\u94A5"},"x-validator":{required:!0,message:"\u670D\u52A1\u5BC6\u94A5\u4E0D\u80FD\u4E3A\u7A7A"},"x-decorator-props":{tooltip:"\u5728\u6211\u521B\u5EFA\u7684\u9875\u9762\u4E2D\uFF0C\u6BCF\u4E2A\u667A\u80FD\u4F53\u5361\u7247\u53F3\u4E0B\u89D2\u7684\u4E09\u4E2A\u5C0F\u70B9\uFF0C\u70B9\u5F00\u9009\u62E9API\u8C03\u7528\uFF0C\u5373\u53EF\u770B\u5230\u3002"}},appId:{type:"string",title:"appId","x-index":3,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7684ID"},required:!0,"x-decorator-props":{tooltip:"\u5728\u6211\u521B\u5EFA\u7684\u9875\u9762\u4E2D\uFF0C\u6BCF\u4E2A\u667A\u80FD\u4F53\u5361\u7247\u53F3\u4E0B\u89D2\u7684\u4E09\u4E2A\u5C0F\u70B9\uFF0C\u70B9\u5F00\u9009\u62E9API\u8C03\u7528\uFF0C\u5373\u53EF\u770B\u5230\u3002"}}}}}};constructor(e){e.apiBase=e.apiBase??"https://yuanqi.tencent.com",super(e),this._options=e}get options(){return this._options}get params(){return a.params}get supportConversationOnline(){return!1}async _loadFileInfo(e,t){let o=await e.asUrl(),s=e.name.substring(e.name.lastIndexOf(".")+1);return t==="image"?{type:"image",url:o}:(this.logger.info("\u5F53\u524D\u5E73\u53F0\u53EF\u80FD\u4E0D\u652F\u6301\u8BE5\u7C7B\u578B\u6570\u636E\u89E3\u6790\uFF1A"+s),{type:s,url:o})}async generateReadyMessage(e,t,o){let s=[],r={role:"user",content:s},i={assistant_id:this._options.appId,user_id:e,stream:!0,messages:[r]};if(t?.length&&s.push({type:"text",text:t}),o.length)for(let n of o)s.push({type:"file_url",file_url:await this._loadFileInfo(n.file,n.type)});return{forSend:i,chatId:e,plainText:t,forHistory:r}}getLatestConversationId(e){}getLatestChatTime(e,t){}deleteConversation(e,t){}async sendMessageBody(e,t,o){let s=await fetch(this._options.apiBase+"/openapi/v1/agent/chat/completions",{method:"post",keepalive:!0,headers:{"Content-Type":"application/json","X-Source":"openapi",Authorization:`Bearer ${this._options.apiKey}`},body:JSON.stringify(e)}),r="";return await ee(s.body,i=>{if(i.choices?.[0]?.delta.role!=="assistant")return;let n=i.choices?.[0]?.delta.content;n?.length&&(r+=n,o.onContent(n,l.TEXT))}),this.logger.debug(r),{type:"bot",data:{role:"assistant",content:[{type:"text",text:r}]}}}async init(){}};import ps from"form-data";import cs from"axios";var Xe=class a extends A{static{p(this,"ZhipuQingyanBot")}_options;static params={name:"zhipu-qingyan-agent",desc:"\u667A\u8C31\u6E05\u8A00\u667A\u80FD\u4F53",needHistoryMessage:!1,optionsSchema:{type:"formily",formily:{type:"object",properties:{...A.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740\uFF0C\u7559\u7A7A\u4F7F\u7528 https://chatglm.cn/chatglm/assistant-api/v1"},"x-validator":{format:"url"},"x-decorator-props":{tooltip:"\u53EF\u7559\u7A7A\u3002"}},apiKey:{type:"string",title:"\u670D\u52A1Key","x-index":3,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1key"},"x-validator":{required:!0,message:"\u670D\u52A1Key\u4E0D\u80FD\u4E3A\u7A7A"},"x-decorator-props":{tooltip:"\u667A\u80FD\u4F53\u7F16\u8F91\u9875\u9762\u70B9\u51FB\u53D1\u5E03\u6309\u94AE\uFF0C\u70B9\u51FB\u7ACB\u5373\u914D\u7F6E\uFF0C\u9009\u62E9\u81EA\u5B9A\u4E49\u5E73\u53F0\u5373\u53EF\u521B\u5EFA\u3002"}},apiSecret:{type:"string",title:"\u670D\u52A1Secret","x-index":4,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u79C1\u94A5"},"x-validator":{required:!0,message:"\u670D\u52A1\u5BC6\u94A5\u4E0D\u80FD\u4E3A\u7A7A"},"x-decorator-props":{tooltip:"\u667A\u80FD\u4F53\u7F16\u8F91\u9875\u9762\u70B9\u51FB\u53D1\u5E03\u6309\u94AE\uFF0C\u70B9\u51FB\u7ACB\u5373\u914D\u7F6E\uFF0C\u9009\u62E9\u81EA\u5B9A\u4E49\u5E73\u53F0\u5373\u53EF\u521B\u5EFA\u3002"}},assistantId:{type:"string",title:"assistantId","x-index":5,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7684ID"},required:!0,"x-decorator-props":{tooltip:"\u5728\u667A\u80FD\u4F53\u7684\u5BF9\u8BDD\u6216\u8005\u7F16\u8F91\u9875\u9762\u7684url\u5730\u5740\u4E0A\u53EF\u4EE5\u770B\u5230\uFF0Cid=xxx\uFF0Cxxx\u5C31\u662Fid\u3002"}}}}}};constructor(e){e.apiBase||(e.apiBase="https://chatglm.cn/chatglm/assistant-api/v1"),super(e),this._options=e}_token;get options(){return this._options}get params(){return a.params}get supportConversationOnline(){return!0}async _loadToken(){let e=await(await fetch(`${this._options.apiBase}/get_token`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({api_key:this._options.apiKey,api_secret:this._options.apiSecret})})).json();this._token=e.result?.access_token,this.logger.trace("\u5DF2\u83B7\u53D6\u667A\u8C31\u6E05\u8A00\u667A\u80FD\u4F53token\uFF1A"+this._token);let t=parseInt(e.result?.expires_in??24*60*60);setTimeout(()=>{this._loadToken()},t*1e3/1.1)}async _loadFileInfo(e){let t=new ps,o=await e.asReadStream();t.append("file",o);let s={...t.getHeaders(),Authorization:`Bearer ${this._token}`},r=await cs({method:"post",url:this._options.apiBase+"/file_upload",headers:s,data:t,responseType:"json"});if(r.status!==200)throw new Error("\u4E0A\u4F20\u6587\u4EF6\u5931\u8D25:"+r.statusText);return{file_id:r.data.result.file_id}}async generateReadyMessage(e,t,o){let s=[],r={assistant_id:this._options.assistantId,prompt:t,file_list:s,meta_data:this._options.metaData};if(o.length)for(let i of o)s.push(await this._loadFileInfo(i.file));return{forSend:r,chatId:e,plainText:t}}getLatestConversationId(e){}getLatestChatTime(e,t){}deleteConversation(e,t){}async sendMessageBody(e,t,o,s){e.conversation_id=s?.conversationId;let r=await fetch(this._options.apiBase+"/stream",{method:"post",keepalive:!0,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this._token}`},body:JSON.stringify(e)}),i="";await ee(r.body,n=>{if(n.status==="init")return;let c=n.message.content,m="";switch(c.type){case"text":m=c.text;break;case"image":{let d=0;for(let h of c.image)m+=`![\u56FE\u7247${d++}](${h.image_url})`;break}case"code":{m=c.code;break}}if(m?.length){let d=i;i=m,m=m.replace(d,""),o.onContent(m,l.TEXT)}if((n.status==="finish"||n.status==="error")&&(o.onCompleted(n.conversation_id,new Date().getTime()/1e3),n.status==="error"))throw new Error(n.last_error)}),this.logger.debug(i)}async init(){await this._loadToken()}};var Je=class extends M{static{p(this,"SiliconFlowBot")}static params={name:"siliconflow-bot",desc:"\u7845\u57FA\u6D41\u52A8",optionsSchema:{type:"formily",formily:{type:"object",properties:{...M.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"eg: https://api.siliconflow.cn/v1 \u4F7F\u7528\u7845\u57FA\u6D41\u52A8\u5B98\u65B9\u670D\u52A1\u53EF\u7559\u7A7A\u3002"},"x-validator":{format:"url"},"x-decorator-props":{tooltip:"\u57FA\u4E8EOpenAI\u517C\u5BB9\u63A5\u53E3\u6269\u5C55\uFF0C\u8BF7\u4F7F\u7528OpenAI\u517C\u5BB9\u63A5\u53E3\u7684\u5730\u5740\uFF0C\u4F7F\u7528\u7845\u57FA\u6D41\u52A8\u5B98\u65B9\u5730\u5740\u53EF\u7559\u7A7A\u3002"}},chatOptions:{type:"object",title:"\u5BF9\u8BDD\u914D\u7F6E","x-index":4,properties:{model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-index":5,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"Qwen/Qwen2.5-7B-Instruct"},required:!0}},required:!0}}}}};constructor(e){e.apiBase?.length||(e.apiBase="https://api.siliconflow.cn/v1"),super(e)}};var Ve=class extends M{static{p(this,"XunfeiBot")}static params={name:"xunfei-bot",desc:"\u8BAF\u98DE\u661F\u706B\u8BA4\u77E5\u6A21\u578B",optionsSchema:{type:"formily",formily:{type:"object",properties:{...M.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"eg: https://spark-api-open.xf-yun.com/v1 \u4F7F\u7528\u79D1\u5927\u8BAF\u98DE\u5B98\u65B9\u670D\u52A1\u53EF\u7559\u7A7A\u3002"},"x-validator":{format:"url"},"x-decorator-props":{tooltip:"\u57FA\u4E8EOpenAI\u517C\u5BB9\u63A5\u53E3\u6269\u5C55\uFF0C\u8BF7\u4F7F\u7528OpenAI\u517C\u5BB9\u63A5\u53E3\u7684\u5730\u5740\uFF0C\u4F7F\u7528\u79D1\u5927\u8BAF\u98DE\u5B98\u65B9\u5730\u5740\u53EF\u7559\u7A7A\u3002"}},modelName:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-index":4,"x-decorator":"FormItem","x-component":"AutoComplete",enum:[{label:"lite(Spark Lite)",value:"lite"},{label:"generalv3(Spark Pro)",value:"generalv3"},{label:"pro-128k(Spark Pro-128K)",value:"pro-128k"},{label:"generalv3.5(Spark Max)",value:"generalv3.5"},{label:"max-32k(Spark Max-32K)",value:"max-32k"},{label:"4.0Ultr(Spark4.0 Ultra)",value:"4.0Ultra"}],"x-component-props":{allowClear:!0,placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u6A21\u578B\u7684\u540D\u79F0"},default:"lite","x-decorator-props":{tooltip:"\u6A21\u578B\u540D\u79F0\uFF0C\u53C2\u8003\u8BAF\u98DE\u63A7\u5236\u53F0-\u661F\u706B\u8C03\u8BD5\u4E2D\u5FC3-\uFF08\u53F3\u4FA7\uFF09\u8F6C\u6362\u6A21\u7248\u4E3A\u4EE3\u7801\u3002"},required:!0},chatOptions:{type:"object",title:"\u5176\u4ED6\u5BF9\u8BDD\u914D\u7F6E","x-index":5,"x-decorator":"FormItem","x-component":"Code","x-decorator-props":{tooltip:"\u9664\u6A21\u578B\u540D\u79F0\u4E4B\u5916\u7684\u5176\u4ED6\u5BF9\u8BDD\u914D\u7F6E\uFF0C\u53C2\u8003\u8BAF\u98DE\u5B98\u7F51"},required:!1},onlyText:{type:"boolean",title:"\u662F\u5426\u4E3A\u7EAF\u6587\u672C\u6A21\u578B","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u5982\u679C\u4E0D\u652F\u6301\u591A\u6A21\u6001\uFF0C\u8BBE\u7F6E\u4E3Atrue\uFF0C\u5426\u5219\u8BBE\u7F6E\u4E3Afalse\uFF0C\u9ED8\u8BA4\u662Ffalse\u3002"},default:!1,"x-display":!1}}}}};constructor(e){e.apiBase?.length||(e.apiBase="https://spark-api-open.xf-yun.com/v1"),e.onlyText=!0,e.chatOptions.model=e.modelName??e.chatOptions.model??"lite",super(e),this.logger.trace("\u5F53\u524D\u8BAF\u98DE\u661F\u706B\u6A21\u578B\uFF1A"+e.chatOptions.model)}};var Qe=class extends M{static{p(this,"ZhipuBot")}static params={name:"zhipu-bot",desc:"\u667A\u666EAI\u5927\u6A21\u578B",optionsSchema:{type:"formily",formily:{type:"object",properties:{...M.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"eg: https://open.bigmodel.cn/api/paas/v4 \u4F7F\u7528\u667A\u666EAI\u5B98\u65B9\u670D\u52A1\u53EF\u7559\u7A7A\u3002"},"x-validator":{format:"url"},"x-decorator-props":{tooltip:"\u4F7F\u7528\u667A\u666EAI\u5B98\u65B9\u5730\u5740\u53EF\u7559\u7A7A\u3002"}},modelName:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-index":4,"x-decorator":"FormItem","x-component":"AutoComplete",enum:[{value:"glm-4-flash",label:"glm-4-flash(free)"},{value:"glm-4v-flash",label:"glm-4v-flash(free)"},{value:"glm-4-0520",label:"glm-4-0520"},{value:"glm-4",label:"glm-4"},{value:"glm-4-air",label:"glm-4-air"},{value:"glm-4-airx",label:"glm-4-airx"},{value:"glm-4-long",label:"glm-4-long"},{value:"glm-4-flashx",label:"glm-4-flashx"},{value:"glm-4v-plus",label:"glm-4v-plus"},{value:"glm-4v",label:"glm-4v"},{value:"charglm-4",label:"charglm-4"}],"x-component-props":{allowClear:!0,placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u6A21\u578B\u7684\u540D\u79F0"},default:"glm-4-flash","x-decorator-props":{tooltip:"\u6A21\u578B\u540D\u79F0\uFF0C\u53C2\u8003 https://bigmodel.cn/dev/api/normal-model/glm-4 \u3002"},required:!0},chatOptions:{type:"object",title:"\u5176\u4ED6\u5BF9\u8BDD\u914D\u7F6E","x-index":5,"x-decorator":"FormItem","x-component":"Code","x-decorator-props":{tooltip:"\u9664\u6A21\u578B\u540D\u79F0\u4E4B\u5916\u7684\u5176\u4ED6\u5BF9\u8BDD\u914D\u7F6E\uFF0C\u53C2\u8003\u667A\u666EAI\u5B98\u7F51"},required:!1}}}}};constructor(e){e.apiBase?.length||(e.apiBase="https://open.bigmodel.cn/api/paas/v4"),e.chatOptions.model=e.modelName??e.chatOptions.model??"glm-4-flash",super(e),this.logger.trace("\u5F53\u524D\u667A\u666EAI\u6A21\u578B\uFF1A"+e.chatOptions.model)}};import{createItem as ls,deleteItem as ms,readItems as er,updateItem as ds}from"@directus/sdk";var D=y("api-plugin",!0);function L(a,e){return{data:a,err:e}}p(L,"withRes");var Gp=p(async(a,e)=>{e=e||{},e.checkNotifyFequencySeconds=Math.max(e.checkNotifyFequencySeconds??Dt("PLUGIN_API_CHECK_NOTIFY_FEQ_SECONDS")??20,0),e.expiresInSeconds=Math.max(e.expiresInSeconds??Dt("PLUGIN_API_NOTIFY_EXPIRES_SECONDS")??3600,0),e.maxNotifyCount=Math.max(e.maxNotifyCount??Dt("PLUGIN_API_MAX_NOTIFY_COUNT")??100,5);let t=a.options.name,o=[],s,r=7*24*3600,i=p(()=>{s!==void 0&&(clearInterval(s),s=void 0),s=setInterval(()=>{let c=o.filter(m=>{let h=Math.min(m.info?.expireInSeconds??e.expiresInSeconds,r)*1e3+m.time.getTime();return new Date().getTime()<=h});if(c.length>e.maxNotifyCount){let m=c.length-e.maxNotifyCount;o=c.slice(m,m+e.maxNotifyCount)}else o=c;o.length===0&&(clearInterval(s),s=void 0)},e.checkNotifyFequencySeconds*1e3)},"startNotifyInterval"),n=p(c=>{if(!(c.time instanceof Date)||!c.id){D.warn("\u6536\u5230\u6CA1\u6709id\u6216\u8005time\u7684\u901A\u77E5\uFF0C\u5C06\u4E0D\u4F1A\u53D1\u9001\u5230\u5BA2\u6237\u7AEF\uFF01"),D.warn(c);return}o.length===0&&i(),o.push(c)},"notifyHandler");return a.globalEvent.on(Y.APP_NOTIFY,n),{name:"\u901A\u7528API\u670D\u52A1\u63D2\u4EF6",needOnline:!1,schema:{type:"object",properties:{}},init:p(async()=>({}),"init"),beforeStart:p(async()=>{D.debug("api\u63D2\u4EF6\u5F00\u59CB\u6CE8\u518C"),a.registerRoutes(t,{actionName:"ping",action:{type:"normal",handler:p(async d=>{let h={status:"ok"},u=d.body.needNotify==="true",g=parseInt(d.body.notifyCursor);return L(u?{...h,notifies:{data:isNaN(g)?o:o.filter(w=>w.time.getTime()>g),cursor:new Date().getTime()}}:h)},"handler")},type:"api",needAuth:!0}),a.registerRoutes(t,{actionName:"resource-summary",action:{type:"normal",handler:p(async()=>{let d=a.botManager.getAllParamsArray().length,h=a.sourceManager.getAllParamsArray().length,u=a.skillManager.getAllParamsArray().length;return L({sources:{count:h,created:a.agentService.resourceCount.sources},bots:{count:d,created:a.agentService.resourceCount.bots},agents:{running:a.agentService.resourceCount.agents},skills:{count:u,created:a.agentService.resourceCount.skills},tasks:{running:a.taskService.onlineCount}})},"handler")},type:"api",needAuth:!0}),a.registerRoutes(t,{actionName:"bot-creators",action:{type:"normal",handler:p(async()=>{let d=a.botManager.getAllParamsArray();return L(d)},"handler")},type:"api",needAuth:!0}),a.registerRoutes(t,{actionName:"source-creators",action:{type:"normal",handler:p(async()=>{let d=a.sourceManager.getAllParamsArray();return L(d)},"handler")},type:"api",needAuth:!0}),a.registerRoutes(t,{actionName:"skill-creators",action:{type:"normal",handler:p(async()=>{let d=a.skillManager.getAllParamsArray();return L(d)},"handler")},type:"api",needAuth:!0}),a.registerRoutes(t,{actionName:"agent-creators",action:{type:"normal",handler:p(async()=>L([Ae.params]),"handler")},type:"api",needAuth:!0}),a.registerRoutes(t,{actionName:"task-runner-creators",action:{type:"normal",handler:p(async()=>{let d=a.taskRunnerManager.getAllParamsArray();return L(d)},"handler")},type:"api",needAuth:!0}),a.registerRoutes(t,{actionName:"task-trigger-creators",action:{type:"normal",handler:p(async()=>{let d=a.taskTriggerManager.getAllParamsArray();return L(d)},"handler")},type:"api",needAuth:!0}),a.registerRoutes(t,{actionName:"users",action:{type:"normal",handler:p(async d=>{let h=d.body,u=h.instanceName,g=a.sourceManager.getInstance(u);if(!g)return L([],"\u6D88\u606F\u6E90"+u+"\u4E0D\u5B58\u5728\uFF01");let w=h.type??"user";return D.trace("get "+u+" contacts"),L(await g.getContacts(w))},"handler")},type:"api",needAuth:!0});let c=new TextDecoder("utf-8"),m=p(d=>h=>{d.readyState===d.OPEN&&(typeof h.message=="object"&&(h={...h,message:JSON.stringify(h.message)}),d.send(JSON.stringify(h)))},"createLogHandler");a.registerWSHandler(t,{actionName:"logs",action:{onMessage:p(async(d,h,u)=>{if(d instanceof Buffer&&(d=c.decode(d)),typeof d!="string"){D.warn("\u65E0\u6CD5\u8BC6\u522B\u7684\u6D88\u606F\u7C7B\u578B\uFF01"),u.send("error message format");return}if(d==="ping"){u.send("pong"),D.trace("ping received");return}if(["fatal","error","warn","info","debug","trace"].includes(d)){D.emitter.setLevel(d),u.send("log level set to "+d),u.send(d);return}D.trace("ws log - client message received:"+d)},"onMessage"),onOpen:p(async(d,h)=>{let u=m(h);D.emitter.on("log",u),h.handler=u,h.send(D.emitter.level)},"onOpen"),onClose:p(async(d,h)=>{h.handler?D.emitter.off("log",h.handler):D.emitter.clearListeners("log")},"onClose")},type:"ws",needAuth:!0}),a.registerRoutes(t,{actionName:"sync-config",type:"api",needAuth:!0,action:{type:"normal",handler:p(async()=>(await a.reload(),L("success")),"handler")}}),a.registerRoutes(t,{actionName:"restart",type:"api",needAuth:!0,action:{type:"normal",handler:p(async()=>(a.globalEvent.emit("restart",void 0),L("success")),"handler")}}),a.registerRoutes(t,{actionName:"using",type:"api",needAuth:!0,action:{type:"normal",handler:p(async d=>{let h=d.body,u=h.instanceName,g=h.type,w=a.agentService.agents,x=!1;return g==="bots"?x=w.some(v=>v.options.botResponseRule.instanceName===u):g==="sources"?x=w.some(v=>v.options.sourceInstanceNames.includes(u)):g==="skills"&&(x=w.some(v=>v.options.skillRules?.some(R=>R.instanceName===u))),L(x)},"handler")}}),a.registerRoutes(t,{actionName:"install-plugin",type:"api",needAuth:!0,action:{type:"normal",handler:p(async d=>{let h=d.body;if(!h.name)return L(void 0,"\u63D2\u4EF6\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A");h.name=h.name.trim();try{h=await Xo(h.name,h.version?.trim(),h.registry),h.options=h.options??{},h.displayName=h.displayName??h.name,D.trace(h);let u=await a.client.request(er("plugins",{filter:{name:{_eq:h.name}}}));if(u?.length>0){let g=await a.client.request(ds("plugins",u[0].id,h));D.debug("update plugin res:"+JSON.stringify(g))}else{let g=await a.client.request(ls("plugins",h));D.debug("create plugin res:"+JSON.stringify(g))}return L({type:u?.length?"update":"create",info:h})}catch(u){let g=JSON.stringify(u);return D.error("\u5B89\u88C5\u63D2\u4EF6\u5931\u8D25\uFF1A"+u),L(void 0,g)}},"handler")}}),a.registerRoutes(t,{actionName:"uninstall-plugin",type:"api",needAuth:!0,action:{type:"normal",handler:p(async d=>{let h=d.body;if(!h.name)return L(void 0,"\u63D2\u4EF6\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A");h.name=h.name.trim();let u=await a.client.request(er("plugins",{filter:{name:{_eq:h.name}}}));if(!u?.length)return L(void 0,`\u672A\u80FD\u5728\u5B89\u88C5\u8BB0\u5F55\u4E2D\u627E\u5230\u63D2\u4EF6 ${h.name} \uFF0C\u5982\u679C\u786E\u5B9A\u5DF2\u7ECF\u5B89\u88C5\uFF0C\u53EF\u4EE5\u767B\u5F55\u670D\u52A1\u5668\u624B\u52A8\u5378\u8F7D\uFF01`);h=u[0];let g=await a.client.request(ms("plugins",u[0].id));D.debug("delete plugin res:"+JSON.stringify(g));try{return await Jo(h.name),L({type:"delete",info:h})}catch(w){let x=JSON.stringify(w);return D.error("\u5378\u8F7D\u63D2\u4EF6\u5931\u8D25\uFF08\u914D\u7F6E\u5DF2\u5220\u9664\uFF09\uFF1A"+x),L(void 0,x)}},"handler")}}),a.registerRoutes(t,{actionName:"plugins",type:"api",needAuth:!0,action:{type:"normal",handler:p(async()=>{let d=[];for(let h of a.onlinePlugins)h.schecma&&d.push({name:h.name,optionsSchema:{type:"formily",formily:h.schecma}});return L(d)},"handler")}})},"beforeStart"),dispose:p(async()=>{s!==void 0&&(clearInterval(s),s=void 0),a.globalEvent.off(Y.APP_NOTIFY,n),D.trace("api plugin desposed")},"dispose")}},"apiPlugin");import{readItems as hs}from"@directus/sdk";var Jt={disabled:{type:"boolean",title:"\u662F\u5426\u7981\u7528","x-decorator":"FormItem","x-component":"Switch","x-decorator-props":{tooltip:"\u7981\u7528\u540E\uFF0C\u4EFB\u52A1\u4E0D\u4F1A\u88AB\u8FD0\u884C\uFF0C\u4F46\u4ECD\u4F1A\u88AB\u89E6\u53D1\u3002"},default:!1,required:!1}},Ee=class{static{p(this,"TaskTrigger")}app;_options;constructor(e,t){this.app=e,this._options=t}},se=y("task-service"),Xt=class{static{p(this,"TaskService")}_app;_options;constructor(e,t={}){this._app=e,this._options=t,this._initialized=!1,this._taskTriggers=[],this._onlineCount=0,this._options.maxRecords=this._options.maxRecords??1e3}_initialized;_taskTriggers;_onlineCount;get onlineCount(){return this._onlineCount}async init(){if(this._initialized){se.warn("task service\u5DF2\u7ECF\u521D\u59CB\u5316\uFF0C\u8BF7\u52FF\u91CD\u590D\u8C03\u7528\uFF01");return}return this._initialized=!0,this._loadTasks()}async reload(){return se.trace("dispose tasks"),await this.dispose(),this._taskTriggers=[],se.trace("create tasks"),this._loadTasks()}async _loadTasks(){if(this._app.offlineMode)return;let e=await this._app.client.request(hs("tasks",{filter:{status:{_neq:"archived"},user_created:{_eq:this._app.me?.id}}}));e?.length?this._onlineCount=e.length:(se.warn("\u5F53\u524D\u6CA1\u6709\u5728\u7EBF\u914D\u7F6E\u7684\u4EFB\u52A1\uFF01"),se.warn(e));let t=[...e??[],...this._options.tasks??[]];t.forEach(o=>{o.runnerOptions.instanceName||(se.trace("\u81EA\u52A8\u751F\u6210"+o.runnerName+"\u7684\u5B9E\u4F8BID"),o.runnerOptions.instanceName=ue(10));let s=this._app.taskRunnerManager.createInstance(o.runnerName,o.runnerOptions);o.triggerOptions.instanceName||(se.trace("\u81EA\u52A8\u751F\u6210"+o.triggerName+"\u7684\u5B9E\u4F8BID"),o.triggerOptions.instanceName=ue(10));let r={...o.triggerOptions,onTask:p(async n=>{if(s.options.disabled){se.trace("\u5F53\u524D\u4EFB\u52A1\u5DF2\u88AB\u7981\u7528\uFF0C\u7EC8\u6B62\u8FD0\u884C\uFF01");return}let c=new Date,m=await s.run(n)??{};m.startTime=c,m.endTime=new Date,se.trace("task "+r.instanceName+" run by "+s.options.instanceName+",costs "+(m.endTime.getTime()-m.startTime.getTime())+" ms")},"onTask")},i=this._app.taskTriggerManager.createInstance(o.triggerName,r);se.trace("create task trigger instance "+r.instanceName),this._taskTriggers.push(i)}),se.info(t.length+" tasks loaded!")}async dispose(){await he(this._taskTriggers),await this._app.taskTriggerManager.clearInstances(),await this._app.taskRunnerManager.clearInstances()}};var Vt=class extends Ee{static{p(this,"EventTaskTrigger")}app;_options;constructor(e,t){super(e,t),this.app=e,this._options=t,this._initialized=!1,this._disposers=[],this._options.eventNames=this._options.eventNames??[],this.init()}_initialized;_logger;_disposers;get logger(){return this._logger?this._logger:this._logger=y(this.loggerName)}async dispose(){this._disposers?.forEach(e=>e()),this._disposers=void 0}init(){if(!this._disposers){this._logger.error("\u5F53\u524D\u5B9E\u4F8B\u5DF2\u88AB\u91CA\u653E\uFF0C\u65E0\u6CD5\u91CD\u65B0\u521D\u59CB\u5316\uFF01\u8BF7\u91CD\u65B0\u521B\u5EFA\u65B0\u7684\u5B9E\u4F8B");return}if(this._initialized){this.logger.warn("\u5F53\u524D\u5B9E\u4F8B\u5DF2\u7ECF\u521D\u59CB\u5316\uFF0C\u8BF7\u52FF\u91CD\u590D\u8C03\u7528\uFF01");return}this._initialized=!0,this.getEventTriggers()?.forEach(t=>{let o=t.name;this._options.eventNames.forEach(s=>{let r=p(i=>{let n={triggerName:o,eventName:s,data:i,from:o};this.options.onTask(n)},"action");t.trigger.on(s,r),this._disposers.push(()=>{t.trigger.off(s,r)})})})}},Ye=class a extends Vt{static{p(this,"SourceEventTaskTrigger")}app;_options;static params={name:"source-trigger",desc:"\u804A\u5929\u6D88\u606F",optionsSchema:{type:"formily",formily:{type:"object",properties:{eventNames:{type:"array",enum:[{label:"\u804A\u5929\u63A5\u6536\u7684\u6D88\u606F",value:f.CHAT_MESSAGE},{label:"\u804A\u5929\u53D1\u9001\u7684\u6D88\u606F",value:f.RESPONSE_MESSAGE},{label:"\u65B0\u7528\u6237\u8FDB\u7FA4",value:f.GROUP_NEW_USER},{label:"\u81EA\u5B9A\u4E49\u4E8B\u4EF6",value:f.CUSTOM}],title:"\u54CD\u5E94\u6D88\u606F\u7C7B\u578B","x-decorator":"FormItem","x-component":"Select","x-decorator-props":{tooltip:"\u6CE8\u610F\uFF0C\u5B9E\u9645\u54CD\u5E94\u54EA\u4E9B\u7C7B\u578B\uFF0C\u53D6\u51B3\u4E8E\u6D88\u606F\u6E90\u80FD\u5426\u652F\u6301\u8FD9\u4E9B\u7C7B\u578B\u7684\u6D88\u606F\u53D1\u5E03\u3002\u5373\u8FD9\u91CC\u914D\u7F6E\u7684\u662F\u9488\u5BF9\u6D88\u606F\u6E90\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\u7684\u4E8C\u6B21\u8FC7\u6EE4\u3002\u8981\u8FC7\u6EE4\u524D\u8BF7\u5148\u53D6\u6D88\u9009\u62E9\u6240\u6709\u3002"},"x-component-props":{mode:"multiple",allowClear:!0},default:[f.CHAT_MESSAGE,f.RESPONSE_MESSAGE],required:!0},sourceNames:{type:"string",title:"\u6D88\u606F\u6765\u6E90\uFF08\u6309\u6A21\u677F\uFF09","x-decorator":"FormItem","x-component":"CNameSelector","x-component-props":{resourceType:"sources",size:"small"},"x-decorator-props":{tooltip:"\u6240\u9009\u7684\u6A21\u677F\u4E0B\u7684\u6240\u6709\u7684\u6D88\u606F\u6E90\u90FD\u4F1A\u88AB\u76D1\u542C\uFF0C\u4E0E\u5B9E\u4F8B\u4E8C\u8005\u81F3\u5C11\u914D\u7F6E\u4E00\u4E2A\u3002"},required:!1},sourceInstanceNames:{type:"array",title:"\u6D88\u606F\u6765\u6E90\uFF08\u6309\u5B9E\u4F8B\uFF09","x-decorator":"FormItem","x-component":"SourceSelector","x-decorator-props":{tooltip:"\u6240\u9009\u5B9E\u4F8B\u7684\u6D88\u606F\u4F1A\u88AB\u76D1\u542C\uFF0C\u652F\u6301\u591A\u9009\u3002\u4E0E\u6A21\u677F\u4E8C\u8005\u81F3\u5C11\u914D\u7F6E\u4E00\u4E2A\u3002"},required:!1},messageRule:{type:"object",title:"\u6D88\u606F\u54CD\u5E94\u89C4\u5219","x-decorator":"FormItem","x-component":"MessageRule","x-component-props":{isForTask:!0},"x-decorator-props":{tooltip:"\u53EA\u6709\u9009\u62E9\u7C7B\u578B\u4E3A\u804A\u5929\u63A5\u6536\u6D88\u606F\u7684\u65F6\u5019\uFF0C\u8FC7\u6EE4\u624D\u4F1A\u751F\u6548\uFF0C\u4E0D\u7B26\u5408\u8FC7\u6EE4\u6761\u4EF6\u7684\u6D88\u606F\u4E0D\u4F1A\u89E6\u53D1\u6267\u884C\u5668\u6267\u884C\u3002"}}}}}};constructor(e,t){super(e,t),this.app=e,this._options=t;let o=this._options.onTask;if(!o)throw new Error("\u5F53\u524Dtrigger\u6CA1\u6709\u7ED1\u5B9A\u4EFB\u52A1\uFF01");let s=p(r=>{let i=r.data;if(i&&i.type===f.CHAT_MESSAGE&&this._options.messageRule&&!be(this._options.messageRule,i)){this.logger.debug("\u6D88\u606F\u4E0D\u5339\u914D\u4EFB\u52A1\u89C4\u5219\uFF01");return}o(r)},"onTask");this._options.onTask=s}get loggerName(){return"source-event-task-trigger"}get options(){return this._options}get params(){return a.params}getEventTriggers(){let e=this.app.sourceManager,t=[],o=this.options.sourceNames;return typeof o=="string"&&(o=[o]),o?.forEach(s=>{t.push(...e.getInstances(s)??[])}),this.options.sourceInstanceNames?.forEach(s=>{let r=e.getInstance(s);r?t.push(r):this.logger.error(`\u672A\u627E\u5230\u540D\u4E3A${s}\u7684\u6D88\u606F\u6E90\u5B9E\u4F8B\uFF01`)}),t.map(s=>({name:s.params.name,trigger:s.event}))}},Ze=class a extends Vt{static{p(this,"GlobalEventTaskTrigger")}app;_options;static params={name:"global-trigger",desc:"\u5168\u5C40\u6D88\u606F",optionsSchema:{type:"formily",formily:{type:"object",properties:{eventNames:{type:"array",enum:[{label:"\u5E94\u7528\u901A\u77E5",value:Y.APP_NOTIFY},{label:"\u914D\u7F6E\u91CD\u8F7D",value:Y.APP_RELOAD},{label:"\u5E94\u7528\u91CD\u542F",value:Y.APP_RESTARTED},{label:"\u5E94\u7528\u542F\u52A8",value:Y.APP_STARTED}],title:"\u54CD\u5E94\u6D88\u606F\u7C7B\u578B","x-decorator":"FormItem","x-component":"Select","x-decorator-props":{tooltip:"\u652F\u6301\u81EA\u5B9A\u4E49\u4E8B\u4EF6\u7C7B\u578B\uFF0C\u76F4\u63A5\u8F93\u5165\u81EA\u5B9A\u4E49\u4E8B\u4EF6\u7684\u540D\u79F0\u5373\u53EF\u3002"},"x-component-props":{mode:"tags",allowClear:!0,placeholder:"\u652F\u6301\u624B\u52A8\u8F93\u5165\u81EA\u5B9A\u4E49\u4E8B\u4EF6"},required:!0}}}}};constructor(e,t){super(e,t),this.app=e,this._options=t}get loggerName(){return"global-event-task-trigger"}get options(){return this._options}get params(){return a.params}getEventTriggers(){return[{name:a.params.name,trigger:this.app.globalEvent}]}};import us from"axios";import gs from"form-data";var Ne={...$,disabled:{type:"boolean",title:"\u662F\u5426\u7981\u7528","x-decorator":"FormItem","x-component":"Switch","x-decorator-props":{tooltip:"\u7981\u7528\u540E\u8BE5\u6280\u80FD\u5B9E\u4F8B\u5C06\u4F1A\u4E0D\u53EF\u7528"}}};var j=class a{static{p(this,"BaseSTTSkill")}_options;static params={name:"base-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...Ne,ensureAudioFormat:{type:"boolean","x-index":10,title:"\u68C0\u67E5\u5E76\u8F6C\u6362\u975E\u6807\u51C6\u97F3\u9891","x-component":"Switch",default:!0,"x-decorator":"FormItem","x-decorator-props":{tooltip:"\u5927\u90E8\u5206\u8BC6\u522B\u5F15\u64CE\u8BED\u97F3\u652F\u63018k\u548C16k\u7684\u5355\u58F0\u9053\u97F3\u9891\uFF0C\u5982\u679C\u5F00\u542F\u68C0\u67E5\uFF0C\u6240\u6709\u4E0D\u662F\u8BE5\u7C7B\u578B\u7684\u97F3\u9891\u5C06\u88AB\u8F6C\u6362\uFF0C\u68C0\u67E5\u4F1A\u589E\u52A0\u7CFB\u7EDF\u5904\u7406\u65F6\u95F4\uFF0C\u5982\u679C\u5DF2\u7ECF\u786E\u5B9A\u97F3\u9891\u662F\u652F\u6301\uFF0C\u5EFA\u8BAE\u5173\u95ED\u68C0\u67E5\u3002"}}}}},desc:"\u8BED\u97F3\u8BC6\u522B\u57FA\u7840\u7C7B"};constructor(e){this._options=e,this._targetFormat="wav",this._logger=y(this._options.instanceName),this._options.ensureAudioFormat=this._options.ensureAudioFormat??!0}_logger;_targetFormat;get options(){return this._options}get params(){return a.params}init(){return Promise.resolve()}async _transpileContent(e){let t=e;if(t?.text?.length){this._logger.debug("\u5F53\u524D\u8BED\u97F3\u6D88\u606F\u5DF2\u7ECF\u88AB\u8F6C\u4E3A\u6587\u672C\uFF0C\u5C06\u53D6\u6D88\u672C\u6B21\u8F6C\u6362\uFF01");return}let o=t?.file;if(!o){this._logger.warn("\u672A\u68C0\u6D4B\u5230\u97F3\u9891\u6587\u4EF6\uFF01");return}if(this._options.ensureAudioFormat&&(this._logger.trace("\u8F6C\u6362\u97F3\u9891\u683C\u5F0F\u4E3A\u5355\u901A\u905316k\u7684"+this._targetFormat),o=await Re(o,this._targetFormat,r=>(r.audioFrequency(16e3),r.audioChannels(1),r))),t.text=await this._getText(o),!t.text?.length){this._logger.warn("\u8F6C\u6362\u5931\u8D25\uFF01");return}this._logger.debug("\u8F6C\u6362\u5B8C\u6210\uFF1A"+t.text)}async applyOnSource(e){if(e.message.type!==l.AUDIO){this._logger.debug("\u5F53\u524D\u6D88\u606F\u4E0D\u662F\u97F3\u9891\u7C7B\u578B\uFF0C\u65E0\u6CD5\u8F6C\u6362\u4E3A\u6587\u672C\uFF01");return}await this._transpileContent(e.message.content)}async applyOnReply(e,t){return t!==l.AUDIO?(this._logger.debug("\u5F53\u524D\u54CD\u5E94\u6D88\u606F\u4E0D\u662F\u97F3\u9891\u7C7B\u578B\uFF0C\u65E0\u6CD5\u8F6C\u6362\u4E3A\u6587\u672C\uFF01"),{content:e,messageType:t}):(await this._transpileContent(e),{content:e,messageType:t})}};var et=class a extends j{static{p(this,"SenseVoiceSTTSkill")}_options;static params={name:"sensevoice-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...j.params.optionsSchema.formily.properties,apiHost:{type:"string",title:"API\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u5982 https://your.domain.com \u65E0\u9700\u5E26 extract_text"},"x-decorator-props":{tooltip:"API \u6765\u81EAhttps://github.com/HG-ha/SenseVoice-Api"},required:!0},authType:{type:"string",enum:[{label:"Basic In Header",value:"basic"},{label:"Bearer JWT In Heaer",value:"jwt"},{label:"\u65E0\u9700\u6388\u6743",value:"none"}],title:"\u6388\u6743\u8BA4\u8BC1\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select",default:"none","x-decorator-props":{tooltip:"\u5185\u7F51\u5EFA\u8BAE\u65E0\u9700\u6388\u6743\uFF0C\u5176\u4ED6\u5EFA\u8BAE\u4F7F\u7528\u6388\u6743\u8BA4\u8BC1\u3002"},required:!0},userName:{type:"string",title:"Basic\u7684\u7528\u6237\u540D","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"},"x-decorator-props":{tooltip:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"}},password:{type:"string",title:"Basic\u8BA4\u8BC1\u5BC6\u7801","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"},"x-decorator-props":{tooltip:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"}},jwt:{type:"string",title:"\u6388\u6743\u7801","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5199\u6388\u6743\u7801\uFF0C\u4EC5Jwt\u8BA4\u8BC1\u9700\u8981\u586B\u5199\uFF0C\u65E0\u9700\u5E26Bearer "},"x-decorator-props":{tooltip:"\u8BF7\u586B\u5199\u6388\u6743\u7801\uFF0C\u4EC5Jwt\u8BA4\u8BC1\u9700\u8981\u586B\u5199\uFF0C\u65E0\u9700\u5E26Bearer "}}}}},desc:"SenseVoice\u8BED\u97F3\u8BC6\u522B"};constructor(e){if(super(e),this._options=e,this._headers={"content-type":"multipart/form-data"},this._options.authType.toLowerCase()==="basic"){let t=`${this._options.userName}:${this._options.password}`;this._headers.authorization=`Basic ${btoa(t)}`}else this._options.authType.toLowerCase()==="jwt"&&(this._headers.authorization=`Bearer ${this._options.jwt}`);this._options.apiHost.indexOf("extract_text")>0&&this._logger.warn("api\u5730\u5740\u65E0\u9700\u5305\u542Bextract_text\uFF0C\u5982\u679C\u662F\u6709\u610F\u4E3A\u4E4B\uFF0C\u8BF7\u5FFD\u7565\uFF01"),this._options.apiHost.endsWith("/")||(this._options.apiHost+="/")}_headers;get options(){return this._options}get params(){return a.params}async _getText(e){this._logger.debug("\u5F00\u59CB\u8F6C\u6362\u8BED\u97F3\u5230\u6587\u672C");let t=new gs;return t.append("file",await e.asReadStream()),(await us({method:"post",url:this._options.apiHost+"extract_text",headers:{...this._headers,...t.getHeaders()},data:t,responseType:"json"})).data?.results}};import{v4 as fs}from"uuid";var U=class a{static{p(this,"BaseTTSSkill")}_options;static params={name:"base-tts",optionsSchema:{type:"formily",formily:{type:"object",properties:{...Ne,probability:{type:"number","x-index":100,title:"\u89E6\u53D1\u8BED\u97F3\u7684\u6982\u7387\uFF080-1\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:0,max:1,placeholder:"\u8BF7\u8F93\u5165\u8BED\u97F3\u7684\u89E6\u53D1\u6982\u7387"},"x-decorator-props":{tooltip:"\u6CE8\u610F\uFF0C\u5982\u679C\u6587\u672C\u4E2D\u5B58\u5728emoji\uFF0CMarkdown\uFF0C\u7F51\u5740\u7B49\u4E0D\u53EF\u8BFB\u7684\u5185\u5BB9\uFF0C\u5C06\u4E0D\u4F1A\u88AB\u8F6C\u8BD1\uFF0C\u9664\u975E\u914D\u7F6E\u81EA\u52A8\u53BB\u9664\u8FD9\u4E9B\u5185\u5BB9\u3002"},default:1,required:!0},deleteUnreadableText:{type:"boolean","x-index":110,title:"\u81EA\u52A8\u79FB\u9664\u4E0D\u53EF\u9605\u8BFB\u5185\u5BB9","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u662F\u5426\u81EA\u52A8\u79FB\u9664emoji\u548CMarkdown\u6807\u7B7E\uFF0C\u5982\u679C\u4E0D\u79FB\u9664\uFF0C\u5728\u9047\u5230\u8FD9\u4E9B\u6587\u672C\u65F6\uFF0C\u5C06\u4E0D\u4F1A\u89E6\u53D1\u8F6C\u6362\u3002"},default:!1}}}}};constructor(e){this._options=e,this._options.probability=this._options.probability??.5,this._logger=y(this._options.instanceName)}_logger;get options(){return this._options}get params(){return a.params}init(){return Promise.resolve()}async applyOnReply(e,t,o,s){this._logger.debug("check whether apply tts skill");let r=ve(e);if(!r?.length){if(this._logger.warn("\u6CA1\u6709\u4ECEcontent\u4E2D\u68C0\u6D4B\u5230\u5185\u5BB9"),!s?.length)return{content:e,messageType:t};this._logger.debug("\u4F7F\u7528allContent"),this._logger.debug("allContent:"+s),this._logger.debug("content"+e)}if(!r?.length||r.length<3||this._options.probability<=0)return{content:e,messageType:t};if(r.length>=this._maxToken)return this._logger.warn(`\u6587\u672C\u957F\u5EA6\u4E3A${r.length}\uFF0C\u8D85\u8FC7\u4E86\u5141\u8BB8\u7684\u6700\u5927\u957F\u5EA6\uFF1A${this._maxToken}`),{content:e,messageType:t};if(this._options.probability<1&&Math.random()>this._options.probability)return{content:e,messageType:t};if(Uo(r)||Do(r))if(this._logger.trace("\u68C0\u6D4B\u5230\u5185\u5BB9\u4E2D\u53EF\u80FD\u542B\u6709emoji\u6216\u8005Markdown\u7B49\u65E0\u6CD5\u8F6C\u6362\u4E3A\u8BED\u97F3\u7684\u5185\u5BB9"),this._options.deleteUnreadableText)this._logger.trace("\u6839\u636E\u914D\u7F6E\uFF0C\u6B63\u5728\u79FB\u9664\u76F8\u5173\u4E0D\u53EF\u9605\u8BFB\u5185\u5BB9"),r=Bo(r),r=Lo(r);else return this._logger.trace("\u6839\u636E\u914D\u7F6E\uFF0C\u53D6\u6D88\u8BED\u97F3\u8F6C\u6362"),{content:e,messageType:t};this._logger.debug("tts skill need apply"),this._logger.debug("text:"+r);let i=await this.getAudioBuffer(r,o);if(i?.length){let n={file:b.fromBuffer(i,fs()+".wav"),text:r};return this._logger.debug("tts skill applyed"),await n.file.asLocalPath(),{content:n,messageType:l.AUDIO}}return this._logger.warn("tts skill apply failed"),{content:e,messageType:t}}};var tt=class a extends U{static{p(this,"SoviteTTSSkill")}_options;static params={name:"sovite-tts",optionsSchema:{type:"formily",formily:{type:"object",properties:{...U.params.optionsSchema.formily.properties,apiHost:{type:"string",title:"API\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u5982 https://your.domain.com"},"x-decorator-props":{tooltip:"\u542F\u52A8\u5B98\u65B9docker-compose\u4E4B\u540E\uFF0C\u8FDB\u5165\u5BB9\u5668\u6309api.py\u63D0\u793A\uFF0C\u542F\u52A8api.py\u811A\u672C\uFF0C\u5E76\u6620\u5C04\u51FA\u5916\u7F51\u7AEF\u53E3\u57DF\u540D\u5373\u53EF\u3002"},required:!0},authType:{type:"string",enum:[{label:"Basic In Header",value:"basic"},{label:"Bearer JWT In Heaer",value:"JWT"},{label:"\u65E0\u9700\u6388\u6743",value:"none"}],title:"\u6388\u6743\u8BA4\u8BC1\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select",default:"none","x-decorator-props":{tooltip:"\u5185\u7F51\u5EFA\u8BAE\u65E0\u9700\u6388\u6743\uFF0C\u5176\u4ED6\u5EFA\u8BAE\u4F7F\u7528\u6388\u6743\u8BA4\u8BC1\u3002"},required:!0},userName:{type:"string",title:"Basic\u7684\u7528\u6237\u540D","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"},"x-decorator-props":{tooltip:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"}},password:{type:"string",title:"Basic\u8BA4\u8BC1\u5BC6\u7801","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"},"x-decorator-props":{tooltip:"\u4EC5Basic\u8BA4\u8BC1\u9700\u8981\u586B\u5199"}},jwt:{type:"string",title:"\u6388\u6743\u7801","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5199\u6388\u6743\u7801\uFF0C\u4EC5Jwt\u8BA4\u8BC1\u9700\u8981\u586B\u5199\uFF0C\u65E0\u9700\u5E26Bearer "},"x-decorator-props":{tooltip:"\u8BF7\u586B\u5199\u6388\u6743\u7801\uFF0C\u4EC5Jwt\u8BA4\u8BC1\u9700\u8981\u586B\u5199\uFF0C\u65E0\u9700\u5E26Bearer "}},probability:{type:"number",title:"\u89E6\u53D1\u8BED\u97F3\u7684\u6982\u7387\uFF080-1\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:0,max:1,placeholder:"\u8BF7\u8F93\u5165\u8BED\u97F3\u7684\u89E6\u53D1\u6982\u7387"},"x-decorator-props":{tooltip:"\u6CE8\u610F\uFF0C\u5982\u679C\u6587\u672C\u4E2D\u5B58\u5728emoji\uFF0CMarkdown\uFF0C\u7F51\u5740\u7B49\u4E0D\u53EF\u8BFB\u7684\u5185\u5BB9\uFF0C\u5C06\u4E0D\u4F1A\u88AB\u8F6C\u8BD1\uFF0C\u9664\u975E\u914D\u7F6E\u81EA\u52A8\u53BB\u9664\u8FD9\u4E9B\u5185\u5BB9\u3002"},default:1,required:!0},deleteUnreadableText:{type:"boolean",title:"\u81EA\u52A8\u79FB\u9664\u4E0D\u53EF\u9605\u8BFB\u5185\u5BB9","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u662F\u5426\u81EA\u52A8\u79FB\u9664emoji\u548CMarkdown\u6807\u7B7E\uFF0C\u5982\u679C\u4E0D\u79FB\u9664\uFF0C\u5728\u9047\u5230\u8FD9\u4E9B\u6587\u672C\u65F6\uFF0C\u5C06\u4E0D\u4F1A\u89E6\u53D1\u8F6C\u6362\u3002"},default:!1},customReqOptions:{type:"object",title:"\u81EA\u5B9A\u4E49\u53C2\u6570","x-decorator":"FormItem","x-component":"Code","x-component-props":{},"x-decorator-props":{tooltip:"\u81EA\u5B9A\u4E49\u53D8\u91CF\uFF0C\u53EF\u4EE5\u8F93\u5165JSON\u683C\u5F0F\u7684\u6570\u636E\uFF0C\u5982\u8BED\u8A00\uFF08\u9ED8\u8BA4\u4E3A\u4E2D\u6587\uFF09\uFF0Ctop_k\u7B49\u3002"}}}}},desc:"Sovits\u8BED\u97F3\u5408\u6210"};constructor(e){if(super(e),this._options=e,this._headers={"Content-Type":"application/json"},this._options.authType.toLowerCase()==="basic"){let t=`${this._options.userName}:${this._options.password}`;this._headers.authorization=`Basic ${btoa(t)}`}else this._options.authType.toLowerCase()==="jwt"&&(this._headers.authorization=`Bearer ${this._options.jwt}`)}_headers;get _maxToken(){return 10240}get options(){return this._options}get params(){return a.params}init(){return Promise.resolve()}async getAudioBuffer(e){let t=this._options.customReqOptions??{},o={text:e,...t,text_language:t.text_language??"zh"},r=await(await fetch(this._options.apiHost,{body:JSON.stringify(o),headers:this._headers,method:"post"})).arrayBuffer();return Buffer.from(r)}};import _s from"emittery";import{v4 as ot}from"uuid";var G=y("worktool"),rt=class a{static{p(this,"WorkToolSource")}_options;static params={name:"worktool",optionsSchema:{type:"formily",formily:{type:"object",properties:{robotId:{type:"string",title:"Robot ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 Robot ID"},"x-decorator-props":{tooltip:"\u5728worktool\u7AD9\u70B9\u53EF\u4EE5\u770B\u5230"}},apiHost:{type:"string",title:"API Host","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 API Host"},"x-decorator-props":{tooltip:"\u9ED8\u8BA4 https://api.worktool.ymdyes.cn\uFF0C\u65E0\u9700 / \u7ED3\u5C3E"},default:"https://api.worktool.ymdyes.cn"},me:{type:"object",title:"\u4E2A\u4EBA\u4FE1\u606F","x-decorator":"FormItem","x-component":"Object","x-decorator-props":{tooltip:"\u8BE5\u6D88\u606F\u6E90\u65E0\u6CD5\u901A\u8FC7 API \u83B7\u53D6\u4E2A\u4EBA\u4FE1\u606F\uFF0C\u9700\u8981\u624B\u52A8\u586B\u5165\uFF0CuserId \u548C userName \u5747\u914D\u7F6E\u4E3A nickName"},properties:{nickName:{type:"string",title:"Nick Name","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6635\u79F0\uFF0C\u9700\u8981\u4E0E\u5FAE\u4FE1\u4E2D\u81EA\u5DF1\u7684\u6635\u79F0\u5B8C\u5168\u4E00\u81F4"},"x-decorator-props":{tooltip:"\u6D88\u606F\u6E90\u7528\u6237\u7684\u6635\u79F0"},required:!0},userId:{type:"string",title:"User ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u7528\u6237 ID\uFF0C\u5EFA\u8BAE\u4E0ENickName\u4E00\u81F4"},required:!0},userName:{type:"string",title:"User Name","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u7528\u6237 ID\uFF0C\u5EFA\u8BAE\u4E0ENickName\u4E00\u81F4"},required:!0}},required:!0},commandCallback:{type:"boolean",title:"\u6CE8\u518C\u547D\u4EE4\u56DE\u8C03","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u5F00\u542F",unCheckedChildren:"\u5173\u95ED"},"x-decorator-props":{tooltip:"\u662F\u5426\u6CE8\u518C\u547D\u4EE4\u56DE\u8C03\uFF0C\u9ED8\u8BA4 false\u3002\u5F00\u542F\u540E\u53EF\u4EE5\u5B9E\u73B0\u4E00\u4E9B\u8C03\u8BD5\u4FE1\u606F\u8BB0\u5F55\uFF0C\u65E0\u5176\u4ED6\u5B9E\u9645\u7528\u9014\u3002"},default:!1}}}},fieldInAtList:"nickName",autoAppendAt:!0,eventNames:[f.CHAT_MESSAGE,f.LOGIN,f.LOGOUT,f.SELF_SEND],desc:"WorkTool\u65E0\u969C\u788D\u670D\u52A1"};constructor(e){if(this._options=e,this._actionNames={CHAT_CALLBACK_ACTION:"chat",COMMAND_CALLBACK_ACTION:"command",LOGIN_CALLBACK_ACTION:"login",LOGOUT_CALLBACK_ACTION:"logout"},this._online=!1,!this._options.robotId)throw new Error("\u673A\u5668\u4EBAID\u672A\u914D\u7F6E\uFF0C\u65E0\u6CD5\u542F\u52A8\u8BE5\u6D88\u606F\u6E90\uFF01");if(!this._options.me.nickName)throw new Error("\u673A\u5668\u4EBA\u8D26\u53F7\u81EA\u8EAB\u7684\u4FE1\u606F\u672A\u914D\u7F6E\uFF01");this._options.me.userId=this._options.me.userId??this._options.me.nickName,this._options.me.userName=this._options.me.userName??this._options.me.nickName,this._options.apiHost=this._options.apiHost??"https://api.worktool.ymdyes.cn",this._options.apiHost.endsWith("/")&&(this._options.apiHost=this._options.apiHost.slice(0,this._options.apiHost.length-1)),this.event=new _s,this._init()}_actionNames;_online;get params(){return a.params}get options(){return this._options}get actions(){return[{type:"api",actionName:this._actionNames.CHAT_CALLBACK_ACTION,action:{type:"normal",handler:p(e=>this._onChatMessage(e),"handler")}},{type:"api",actionName:this._actionNames.COMMAND_CALLBACK_ACTION,action:{type:"normal",handler:p(e=>this._onCommandMessage(e),"handler")}},{type:"api",actionName:this._actionNames.LOGIN_CALLBACK_ACTION,action:{type:"normal",handler:p(e=>this._onLoginMessage(e),"handler")}},{type:"api",actionName:this._actionNames.LOGOUT_CALLBACK_ACTION,action:{type:"normal",handler:p(e=>this._onLogoutMessage(e),"handler")}}]}event;async me(){if(this._online)return this._options.me}hasLogin(){return this._online}async login(){if(!this._online&&(await this._get("/robot/robotInfo/online")).data?.data===!0){this._fireLogin();return}}async sendMessage(e,t){this.event.emit(f.RESPONSE_MESSAGE,{id:ot(),type:f.CHAT_MESSAGE,message:e,fromMessage:t,source:this,me:this._options.me});let o;switch(e.type){case l.TEXT:case l.AUDIO:case l.REF:{let s=typeof e.content=="string"?e.content:e.content.text;if(!s?.length){G.debug("text is empty");break}s.indexOf("(http")>=0&&(s=de(s)),o=await this._post("/wework/sendRawMessage",{socketType:2,list:[{type:203,titleList:[...e.toInfo.map(r=>r.nickName?.length?r.nickName:r.userName)],receivedContent:s}]});break}case l.IMAGE:case l.EMOTION:case l.MUSIC:case l.VIDEO:case l.FILE:{let s=e.content.file,r=await s.asUrl();G.debug(r);let i=e.type===(l.IMAGE||e.type===l.EMOTION)?"image":e.type===l.VIDEO?"video":e.type===l.MUSIC?"audio":"*";o=await this._post("/wework/sendRawMessage",{socketType:2,list:[{type:218,titleList:[...e.toInfo.map(n=>n.nickName)],objectName:s.name,fileUrl:r,fileType:i}]});break}default:return G.warn("\u4E0D\u652F\u6301\u53D1\u9001\u7684\u6D88\u606F\u7C7B\u578B\uFF01"),G.warn(e),"\u4E0D\u652F\u6301\u53D1\u9001\u7684\u6D88\u606F\u7C7B\u578B\uFF01"}G.debug(o)}async getContacts(e,t=!1){return[]}async getContactDetail(e){return e}async _init(){this._post("/robot/robotInfo/update",{openCallback:1,callbackUrl:`${_.httpUrl}/api/${this._options.instanceName}/${this._actionNames.CHAT_CALLBACK_ACTION}`}),this._post("/robot/robotInfo/callBack/bind",{type:5,callBackUrl:`${_.httpUrl}/api/${this._options.instanceName}/${this._actionNames.LOGIN_CALLBACK_ACTION}`}),this._post("/robot/robotInfo/callBack/bind",{type:6,callBackUrl:`${_.httpUrl}/api/${this._options.instanceName}/${this._actionNames.LOGOUT_CALLBACK_ACTION}`}),this._options.commandCallback&&this._post("/robot/robotInfo/callBack/bind",{type:1,callBackUrl:`${_.httpUrl}/api/${this._options.instanceName}/${this._actionNames.COMMAND_CALLBACK_ACTION}`})}_getUrl(e){return this._options.apiHost+e+"?robotId="+this._options.robotId}async _get(e){let t=await fetch(this._getUrl(e));return{data:await t.json(),status:t.status}}async _post(e,t){try{return await(await fetch(this._getUrl(e),{method:"post",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})).json()}catch(o){G.error(o);return}}async _processChatMessage(e){let t,o;switch(e.textType){case 0:case 1:case 15:case 3:{if(e.spoken==="\u4E2A\u4EBA\u540D\u7247"&&e.rawSpoken==="\u4E2A\u4EBA\u540D\u7247")return;t=e.spoken,o=l.TEXT;break}default:{G.debug("unsupported message"),G.debug(e);return}}G.debug(e);let s=e.roomType===1||e.roomType===3,r={content:t,type:o,time:new Date,isGroupChat:s,atList:e.atMe==="true"?[this._options.me.nickName]:[],fromId:s?e.groupRemark.length?e.groupRemark:e.groupName:e.receivedName,senderId:e.receivedName,senderName:e.receivedName,senderInfo:{userId:e.receivedName,userName:e.receivedName,nickName:e.receivedName},toInfo:[this._options.me],messageId:ot(),origin:e};if(s){let c=r;c.groupInfo={userId:e.groupName,userName:e.groupName,nickName:e.groupRemark?.length?e.groupRemark:e.groupName,isGroup:!0},c.toInfo=[e.atMe?this._options.me:c.groupInfo]}let i=e.receivedName===this._options.me.nickName,n={id:ot(),type:f.CHAT_MESSAGE,message:r,source:this,me:this._options.me};i?(n.type=f.SELF_SEND,this.event.emit(n.type,n)):this.event.emit(n.type,n)}async _onChatMessage(e){let t=e.body;return t.receivedName==="WorkTool"?(G.debug("received system test chat message"),{code:0,message:"success"}):(this._processChatMessage(t),{code:0,message:"success"})}async _onCommandMessage(e){return G.debug("command message"),G.debug(e.body),{code:0,message:"success"}}async _onLoginMessage(e){return G.debug("login message"),G.debug(e.body),this._fireLogin(),{code:0,message:"success"}}async _onLogoutMessage(e){G.debug("logout message"),G.debug(e.body);let t={type:f.LOGOUT,user:this._options.me,id:ot(),source:this,me:this._options.me};return this.event.emit(t.type,t),{code:0,message:"success"}}_fireLogin(){let e={type:f.LOGIN,user:this._options.me,id:ot(),source:this,me:this._options.me};this.event.emit(e.type,e)}};var tr=y("echo-runner"),st=class a{static{p(this,"EchoTaskRunner")}_app;_options;static params={name:"test-echo-runner",triggerConstraints:void 0,optionsSchema:{type:"formily",formily:{type:"object",properties:{...Jt}}},desc:"\u6D4B\u8BD5\u8F93\u51FA\u6267\u884C\u5668"};constructor(e,t){this._app=e,this._options=t}get options(){return this._options}get params(){return a.params}async run(e){let t=e.data;return t.me?tr.debug(t.me.nickName+"\u767B\u9646"):tr.debug("\u6536\u5230echo\u6D88\u606F\uFF1A"+e.from),{}}};import{scheduleJob as ys}from"node-schedule";var nt=class a extends Ee{static{p(this,"CronTaskTrigger")}app;_options;static params={name:"cron-task-trigger",desc:"\u5B9A\u65F6\u4EFB\u52A1",optionsSchema:{type:"formily",formily:{type:"object",properties:{cron:{type:"string",title:"Cron\u8868\u8FBE\u5F0F","x-decorator":"FormItem","x-component":"CronEditor","x-component-props":{placeholder:"\u8BF7\u70B9\u51FB\u7F16\u8F91\u6309\u94AE\u8FDB\u884C\u7F16\u8F91",noYear:!0}},context:{type:"object",title:"\u4F20\u7ED9\u6267\u884C\u5668\u7684\u6570\u636E","x-decorator":"FormItem","x-component":"Code","x-decorator-props":{tooltip:"trigger\u53EF\u4EE5\u62FF\u5230\u8FD9\u91CC\u81EA\u5B9A\u4E49\u7684\u5185\u5BB9\uFF0C\u4E0D\u6E05\u695A\u5219\u65E0\u9700\u8BBE\u7F6E\u3002"}}}}}};constructor(e,t){super(e,t),this.app=e,this._options=t,this._logger=y(this._options.instanceName);let o=this._options.cron,s=this._options.cron?.trim().split(/\s+/);if(!s||s.length<5||s.length>7)throw new Error("cron\u8868\u8FBE\u5F0F\u4E0D\u6B63\u786E\uFF0C\u8BF7\u68C0\u67E5\u3002");s.length===7&&(s.splice(6,1),o=s.join(" "),this._logger.debug("cron\u8868\u8FBE\u5F0F\u5DF2\u5FFD\u7565\u5E74\u4EFD\uFF1A"+o)),this._job=ys(o,()=>this._options.onTask({from:a.params.name,data:this._options.context}))}_job;_logger;get options(){return this._options}get params(){return a.params}async dispose(){this._job.cancel()}};import xs from"emittery";import{createHash as Is}from"node:crypto";import{v4 as ge}from"uuid";import"recorder-core/src/engine/beta-amr.js";import"recorder-core/src/engine/beta-amr-engine.js";import"recorder-core/src/engine/wav.js";import ws from"form-data";import bs from"axios";var V=y("wcoa"),it=class a{static{p(this,"WCOASource")}_options;static params={name:"wcoa",optionsSchema:{type:"formily",formily:{type:"object",properties:{...$,appId:{type:"string",title:"\u5F00\u53D1\u8005ID\uFF08App ID\uFF09","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5F00\u53D1\u63A5\u53E3\u7BA1\u7406\u4E2D\u7684\u5F00\u53D1\u8005ID"},"x-decorator-props":{tooltip:"\u5728\u5FAE\u4FE1\u5F00\u653E\u5E73\u53F0\u7684 \u8BBE\u7F6E\u4E0E\u5F00\u53D1-\u5F00\u53D1\u63A5\u53E3\u7BA1\u7406\u4E2D\u67E5\u770B\u3002"},required:!0},appSecret:{type:"string",title:"\u5F00\u53D1\u8005\u5BC6\u7801\uFF08App Secret\uFF09","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7ED1\u5B9A\u7684\u5F00\u653EAPI\u7684 Token"},"x-decorator-props":{tooltip:"\u5728\u5FAE\u4FE1\u5F00\u653E\u5E73\u53F0\u7684 \u8BBE\u7F6E\u4E0E\u5F00\u53D1-\u5F00\u53D1\u63A5\u53E3\u7BA1\u7406\u4E2D\u67E5\u770B\u3002\u53EF\u4EE5\u4F7F\u7528__\u53D8\u91CF\uFF0C \u5982\uFF1A __wechat_oa_secret\u3002\u53EA\u9700\u5728\u5BA2\u6237\u7AEF\u7684.secret.json\u4E2D\u914D\u7F6E\u5BF9\u5E94\u7684\u53D8\u91CF\u5373\u53EF\u3002"},required:!0},token:{type:"string",title:"Token","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7ED1\u5B9A\u7684\u5F00\u653EAPI\u7684 Token"},"x-decorator-props":{tooltip:"\u5728\u5FAE\u4FE1\u5F00\u653E\u5E73\u53F0\u7684 \u8BBE\u7F6E\u4E0E\u5F00\u53D1-\u5F00\u53D1\u63A5\u53E3\u7BA1\u7406-\u670D\u52A1\u5668\u914D\u7F6E\u4E2D\u67E5\u770B\u3002"},required:!0},aesKey:{type:"string",title:"AES Key","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7ED1\u5B9A\u7684\u5F00\u653EAPI\u7684 AES Key\uFF08\u5F53\u524D\u4EC5\u652F\u6301\u660E\u6587\u6A21\u5F0F\uFF0C\u65E0\u9700\u8F93\u5165\uFF09"},"x-decorator-props":{tooltip:"\u5F53\u524D\u5C1A\u672A\u652F\u6301\u52A0\u5BC6\u6A21\u5F0F\uFF0C\u8BF7\u5728\u5FAE\u4FE1\u516C\u4F17\u53F7\u540E\u53F0\u8BBE\u7F6E\u670D\u52A1\u5668\u914D\u7F6E\u4E3A\u660E\u6587\u6A21\u5F0F\u3002"},required:!1,"x-disabled":!0},apiBase:{type:"string",title:"API \u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 API \u5730\u5740\uFF0C\u9ED8\u8BA4 https://api.weixin.qq.com"},"x-decorator-props":{tooltip:""},default:"https://api.weixin.qq.com"}}}},eventNames:[f.CHAT_MESSAGE],desc:"\u5FAE\u4FE1\u516C\u4F17\u5E73\u53F0"};constructor(e){if(this._options=e,!this._options.token||!this._options.appId)throw new Error("appId\u3001token\u548CaesKey\u672A\u914D\u7F6E\u5B8C\u6574\uFF01");this.options.apiBase=this._options.apiBase??"https://api.weixin.qq.com",this.event=new xs}_token;_sendMessageUrl;_me;get params(){return a.params}get options(){return this._options}get actions(){return[{type:"api",actionName:"receive",action:{type:"normal",handler:p(e=>this._onChatMessage(e),"handler")}}]}event;async _onCheckSignature(e){let t=e.query,o=t.signature,s=this._options.token,r=t.echostr,i=t.timestamp,n=t.nonce,c=[s,i,n].sort().join(""),m=Is("sha1");if(m.update(c),m.digest("hex")==o)return r}async _loadToken(){let e=`${this._options.apiBase}/cgi-bin/token?grant_type=client_credential&appid=${this._options.appId}&secret=${Z(this._options.appSecret)}`,t=await(await fetch(e)).json();if(t.errmsg?.length){V.error(t.errmsg),setTimeout(()=>{this._loadToken()},10*60*1e3);return}this._token=t.access_token,this._sendMessageUrl=`${this._options.apiBase}/cgi-bin/message/custom/send?access_token=${this._token}`,V.trace("\u6210\u529F\u83B7\u53D6\u516C\u4F17\u53F7token:"+this._token);let o=Number(t.expires_in);return setTimeout(()=>{this._loadToken()},o/2*1e3),!0}async _loadMediaFile(e,t){let o=`${this._options.apiBase}/cgi-bin/media/get?access_token=${this._token}&media_id=${e}`,s=await fetch(o),r;if(s.headers.get("Content-Type").indexOf("json")>=0){let i=await s.json();if(i.errcode!==0){V.error(i.errmsg);return}r=b.fromPath(i.video_url,"binary",t)}else{let i=await s.arrayBuffer();r=b.fromBuffer(Buffer.from(i),t,"binary")}return r}async _uploadMediaFile(e,t){let o=`${this._options.apiBase}/cgi-bin/media/upload?access_token=${this._token}&type=${t}`,s=new ws,r=await e.asReadStream();s.append("media",r);let i={...s.getHeaders()};return(await bs({method:"post",url:o,headers:i,data:s,responseType:"json"})).data?.media_id}async _processMessage(e){this._me={userId:e.ToUserName,userName:e.ToUserName,nickName:e.ToUserName};let t={atList:[],time:new Date(e.CreateTime*1e3),senderId:e.FromUserName,fromId:e.FromUserName,isGroupChat:!1,isSender:!1,senderName:e.FromUserName,senderInfo:{userName:e.FromUserName,userId:e.FromUserName,nickName:e.FromUserName,origin:e.FromUserName},toInfo:[this._me],origin:e,messageId:e.MsgId,type:void 0,content:void 0};switch(e.MsgType){case"text":{let s=e;t.type=l.TEXT,t.content=s.Content;break}case"image":{t.type=l.IMAGE;let s=e,i={file:b.fromPath(s.PicUrl,"binary",ge()+".png")};t.content=i;break}case"voice":{let s=e;if(s.Format.toLowerCase()!=="amr"){V.warn("\u4E0D\u652F\u6301\u7684\u8BED\u97F3\u683C\u5F0F\uFF1A"+s.Format);break}t.type=l.AUDIO;let r=await this._loadMediaFile(s.MediaId,ge()+".amr"),i=await we(await r.asBuffer());await i.asLocalPath();let n={file:i};t.content=n;break}case"video":case"shortvideo":{let s=e;t.type=l.VIDEO;let r=await this._loadMediaFile(s.MediaId,ge()+".mp4"),i=await this._loadMediaFile(s.ThumbMediaId,ge()+".png"),n={file:r,previewImage:i};t.content=n;break}case"link":{t.type=l.ARTICLE;let s=e,r={url:s.Url,title:s.Title,desc:s.Description};t.content=r;break}case"location":{t.type=l.POSITION;let s=e,r={placeName:s.Label,placeDetail:s.Label,lon:s.Location_X,lat:s.Location_Y,mapLevel:s.Scale};t.content=r;break}case"event":{let s=e;switch(s.Event){case"subscribe":t.type=l.SUBSCRIBE,t.content={isSubscribe:!0};break;case"unsubscribe":t.type=l.UNSUBSCRIBE,t.content={isSubscribe:!1};break;default:V.warn("\u6536\u5230\u4E0D\u652F\u6301\u7684\u4E8B\u4EF6\u7C7B\u578B\uFF1A"+s.Event);return}break}default:{V.warn("\u6536\u5230\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e.MsgType);return}}let o={id:ge(),type:f.CHAT_MESSAGE,message:t,source:this,me:this._me,onGenerating:p(()=>this._setTyping(t.fromId),"onGenerating")};this.event.emit(o.type,o)}async _onChatMessage(e){if(this._onCheckSignature(e)){if(e.method.toLowerCase()==="get")return e.query.echostr}else return V.warn("\u68C0\u6D4B\u5230\u975E\u6CD5\u8BF7\u6C42\uFF01"),V.debug(e.body),"error";return this._processMessage(e.body.xml),"success"}async _setTyping(e){try{let t=`${this._options.apiBase}/cgi-bin/message/custom/typing?access_token=${this._token}`,o=await(await fetch(t,{method:"post",body:JSON.stringify({touser:e,command:"Typing"})})).json()}catch{V.info("\u8BBE\u7F6Etyping\u72B6\u6001\u5931\u8D25\uFF01")}}async me(){return this._me??{userId:"gh",userName:"gh",nickName:"gh-\u6536\u5230\u6D88\u606F\u540E\u624D\u80FD\u66F4\u65B0"}}hasLogin(){return!!this._token?.length}async login(){if(await this._loadToken()){let e={type:f.LOGIN,user:this._me,id:ge(),source:this,me:this._me};this.event.emit(e.type,e)}}async sendMessage(e,t){this.event.emit(f.RESPONSE_MESSAGE,{id:ge(),type:f.CHAT_MESSAGE,message:e,fromMessage:t,source:this,me:this._me});let o={touser:e.toInfo[0].userId};switch(e.type){case l.TEXT:{o.msgtype="text";let r=e.content;r.indexOf("(http")>=0&&(r=de(r)),o.text={content:r};break}case l.IMAGE:{o.msgtype="image";let r=await this._uploadMediaFile(e.content.file,"image");if(!r){V.warn("\u4E0A\u4F20\u56FE\u7247\u5931\u8D25\uFF01");return}o.image={media_id:r};break}case l.AUDIO:{o.msgtype="voice";let r=e.content.file,{file:i}=await ce(r),n=await this._uploadMediaFile(i,"voice");if(!n){V.warn("\u4E0A\u4F20\u8BED\u97F3\u5931\u8D25\uFF01");return}o.voice={media_id:n};break}case l.VIDEO:{o.msgtype="video";let r=e.content;if(!r.previewImage){V.warn("\u89C6\u9891\u6CA1\u6709\u9884\u89C8\u56FE\uFF0C\u65E0\u6CD5\u53D1\u9001\uFF01");return}let i=await this._uploadMediaFile(r.file,"video"),n=await this._uploadMediaFile(r.previewImage,"image");o.video={media_id:i,thumb_media_id:n,title:r.title??ge()+".mp4",description:r.desc??"\u4E00\u4E2A\u89C6\u9891"};break}case l.ARTICLE:{o.msgtype="news";let r=e.content,i=r.coverFile??r.thumbFile,n;i&&(n=await i.asUrl()),o.news={articles:[{title:r.title,description:r.desc??r.title,url:r.url,picurl:n}]};break}default:V.warn("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e.type);break}let s=await(await fetch(this._sendMessageUrl,{method:"post",headers:{"content-type":"application/json"},body:JSON.stringify(o)})).json();s.errcode!==0&&V.error(s.errmsg)}async getContacts(e,t=!1){return[]}async getContactDetail(e){return e}};import vs from"emittery";import{DWClient as ks,TOPIC_ROBOT as or}from"dingtalk-stream";import{v4 as ae}from"uuid";import Ss from"form-data";import Cs from"axios";import{getWavFileInfo as Ts}from"wav-file-decoder";import As from"node-video-lib";var T=y("ding-robot"),at=class a{static{p(this,"DingRobotSource")}_app;_options;static params={name:"dingbot",optionsSchema:zo({...$,clientId:{type:"string",title:"\u5BA2\u6237\u7AEFID","x-decorator":"FormItem","x-component":"Input","x-validator":{required:!0,message:"\u5BA2\u6237\u7AEFID\u4E0D\u80FD\u4E3A\u7A7A"},"x-component-props":{placeholder:"\u8BF7\u586B\u5165Client ID\uFF0C\u975EApp ID"},"x-decorator-props":{tooltip:"\u5728\u5E94\u7528\u5217\u8868\u4E2D\uFF0C\u8FDB\u5165\u5E94\u7528\u7BA1\u7406\uFF0C\u5DE6\u4FA7\u57FA\u7840\u4FE1\u606F-\u51ED\u8BC1\u4E0E\u57FA\u7840\u4FE1\u606F\u9875\u9762\u67E5\u770B\u3002"}},clientSecret:{type:"string",title:"\u5BA2\u6237\u7AEF\u5BC6\u94A5","x-decorator":"FormItem","x-component":"Input","x-validator":{required:!0,message:"\u5BA2\u6237\u7AEF\u5BC6\u94A5\u4E0D\u80FD\u4E3A\u7A7A"},"x-component-props":{placeholder:"\u8BF7\u586B\u5165Client Secret"},"x-decorator-props":{tooltip:"\u5728\u5E94\u7528\u5217\u8868\u4E2D\uFF0C\u8FDB\u5165\u5E94\u7528\u7BA1\u7406\uFF0C\u5DE6\u4FA7\u57FA\u7840\u4FE1\u606F-\u51ED\u8BC1\u4E0E\u57FA\u7840\u4FE1\u606F\u9875\u9762\u67E5\u770B\u3002"}},corpId:{type:"string",title:"\u4F01\u4E1AID","x-decorator":"FormItem","x-component":"Input","x-validator":{required:!0,message:"\u4F01\u4E1AID\u4E0D\u80FD\u4E3A\u7A7A"},"x-component-props":{placeholder:"\u8BF7\u586B\u5165Corp ID"},"x-decorator-props":{tooltip:"\u4F01\u4E1AID\uFF0C\u53EF\u4EE5\u5728\u9489\u9489\u5F00\u653E\u5E73\u53F0\u9996\u9875\u770B\u5230\u3002\u4E00\u822C\u4EE5ding\u5F00\u5934\u3002"}},apiHost:{type:"string",title:"API\u4E3B\u673A\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u4E3B\u673A\u5730\u5740"},default:"https://api.dingtalk.com"},oldApiHost:{type:"string",title:"\u65E7API\u4E3B\u673A\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u65E7API\u4E3B\u673A\u5730\u5740"},default:"https://oapi.dingtalk.com"},agentId:{type:"number",title:"Agent ID","x-decorator":"FormItem","x-component":"NumberPicker","x-validator":{required:!0,message:"Agent ID\u4E0D\u80FD\u4E3A\u7A7A"},"x-decorator-props":{tooltip:"\u5728\u5E94\u7528\u5217\u8868\u4E2D\uFF0C\u8FDB\u5165\u5E94\u7528\u7BA1\u7406\uFF0C\u5DE6\u4FA7\u57FA\u7840\u4FE1\u606F-\u51ED\u8BC1\u4E0E\u57FA\u7840\u4FE1\u606F\u9875\u9762\u67E5\u770B\uFF0C\u540D\u4E3A \u539F\u4F01\u4E1A\u5185\u90E8\u5E94\u7528AgentId \u3002"}},robotCode:{type:"string",title:"\u673A\u5668\u4EBA\u4EE3\u7801","x-decorator":"FormItem","x-component":"Input","x-validator":{required:!0,message:"\u673A\u5668\u4EBA\u4EE3\u7801\u4E0D\u80FD\u4E3A\u7A7A"},"x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u673A\u5668\u4EBA\u7684\u4EE3\u7801"},"x-decorator-props":{tooltip:"\u5728\u5E94\u7528\u5217\u8868\u4E2D\uFF0C\u8FDB\u5165\u5E94\u7528\u7BA1\u7406\uFF0C\u5DE6\u4FA7\u5E94\u7528\u80FD\u529B-\u673A\u5668\u4EBA\u9875\u9762\uFF0C\u70B9\u51FB\u590D\u5236 RobotCode \u5373\u53EF\u3002"}},markdownMsgTitle:{type:"string",title:"Markdown\u6D88\u606F\u6807\u9898","x-decorator":"FormItem","x-component":"Input","x-decorator-props":{tooltip:"\u5F53\u53D1\u9001\u6587\u672C\u7C7B\u6D88\u606F\u7684\u65F6\u5019\uFF0C\u9489\u9489\u652F\u6301\u63D0\u4F9B\u4E00\u4E2A\u6807\u9898\uFF0C\u6807\u9898\u4F1A\u5728\u5217\u8868\u4E2D\u5C55\u793A\u3002\u9ED8\u8BA4\u662FAI\u56DE\u590D\u7684\u524D16\u4E2A\u5B57\u3002\u5982\u679C\u914D\u7F6E\u8FD9\u4E2A\u53C2\u6570\uFF0C\u5219\u4F1A\u56FA\u5B9A\u7528\u8FD9\u4E2A\u6807\u9898\u3002\u9ED8\u8BA4\u6536\u5230\u7684\u6D88\u606F\u5185\u5BB9\u7684\u524D16\u4E2A\u5B57\u3002"}},sendAudioFormat:{type:"string",enum:["wav","amr"],title:"\u53D1\u9001\u97F3\u9891\u683C\u5F0F","x-decorator":"FormItem","x-component":"Select","x-decorator-props":{tooltip:"\u53D1\u9001\u97F3\u9891\u65F6\u7684\u683C\u5F0F\uFF0C\u9ED8\u8BA4amr\uFF0C\u53EF\u9009wav\uFF0Camr\u6587\u4EF6\u5C3A\u5BF8\u5C0F\uFF0C\u6548\u679C\u7565\u4F4E\u4E8Ewav\u3002"},default:"amr"},streamTemplateId:{type:"string",title:"\u6D41\u5F0F\u6A21\u677FID","x-decorator":"FormItem","x-component":"Input","x-decorator-props":{tooltip:"\u5982\u679C\u914D\u7F6E\u4E86\u8BE5\u53C2\u6570\uFF0C\u5219\u5F00\u542F\u6D41\u5F0F\u56DE\u590D\u3002\u9700\u8981\u5F00\u653E\u5E94\u7528\u7684\u5361\u7247\u76F8\u5173\u6743\u9650\u3002\u5361\u7247\u521B\u5EFA\u5730\u5740\uFF1Ahttps://open-dev.dingtalk.com/fe/card?spm=ding_open_doc.document.0.0.33e01934gUydw0"}},contactsCacheTime:{type:"number",title:"\u8054\u7CFB\u4EBA\u7F13\u5B58\u65F6\u95F4\uFF08\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-decorator-props":{tooltip:"\u8054\u7CFB\u4EBA\u7F13\u5B58\u65F6\u95F4\uFF0C\u5355\u4F4D\u662F\u79D2\uFF0C\u9ED8\u8BA424\u5C0F\u65F6"},"x-component-props":{min:60*60},default:24*60*60},contactDepartId:{type:"number",title:"\u8054\u7CFB\u4EBA\u5217\u8868ID","x-decorator":"FormItem","x-component":"InputNumber","x-decorator-props":{tooltip:"\u8054\u7CFB\u4EBA\u7684\u5217\u8868ID\uFF0C\u53EF\u4EE5\u4ECE\u9489\u9489API Explorer\u76F8\u5173\u63A5\u53E3\u83B7\u53D6\uFF08\u4ECE\u6839\u8DEF\u5F84\u5F00\u59CB\u4E00\u5C42\u5C42\u83B7\u53D6\uFF09\u3002\u9ED8\u8BA41\uFF0C\u8868\u793A\u6839\u8DEF\u5F84\u3002\u5982\u679C\u5E0C\u671B\u53EA\u6709\u90E8\u5206\u90E8\u95E8\u7684\u7528\u6237\u53EF\u88AB\u524D\u7AEF\u9009\u53D6\uFF0C\u53EF\u4EE5\u8BBE\u7F6E\u4E0A\u7EA7\u90E8\u95E8ID\u3002"},default:1},contactAutoloadOnStart:{type:"boolean",title:"\u542F\u52A8\u65F6\u81EA\u52A8\u52A0\u8F7D\u8054\u7CFB\u4EBA","x-decorator":"FormItem","x-component":"Switch","x-decorator-props":{tooltip:"\u662F\u5426\u5728\u7CFB\u7EDF\u542F\u52A8\u7684\u65F6\u5019\u5C31\u81EA\u52A8\u83B7\u53D6\u8054\u7CFB\u4EBA\u3002\u9ED8\u8BA4true\u3002\u5982\u679C\u5458\u5DE5\u8F83\u591A\uFF0C\u5EFA\u8BAE\u542F\u52A8\u65F6\u83B7\u53D6\uFF0C\u907F\u514D\u7B2C\u4E00\u6B21\u4F7F\u7528\u7B49\u5F85\u65F6\u95F4\u8FC7\u957F\u3002"},default:!0},contactSleepMS:{type:"number",title:"\u8054\u7CFB\u4EBA\u83B7\u53D6\u95F4\u9694\uFF08\u6BEB\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-decorator-props":{tooltip:"\u9012\u5F52\u8C03\u7528\u83B7\u53D6\u7528\u6237\u63A5\u53E3\u53EF\u80FD\u89E6\u53D1\u9650\u6D41\uFF0C\u6B64\u65F6\u53EF\u4EE5\u8BBE\u7F6E\u83B7\u53D6\u95F4\u9694\uFF0C\u9ED8\u8BA4\u662F30ms\u4E00\u6B21\uFF0C\u5982\u679C\u4ECD\u7136\u89E6\u53D1\uFF0C\u53EF\u4EE5\u8C03\u5927\u3002"},default:30}}),eventNames:[f.CHAT_MESSAGE],supportedFileExts:["xlsx","pdf","zip","rar","doc","docx"],desc:"\u9489\u9489\u5E94\u7528"};constructor(e,t){this._app=e,this._options=t,this._trackIdCache={},this._contacts=[],this._departIdNameMap=new Map,this._options.apiHost=this._options.apiHost??"https://api.dingtalk.com",this._options.oldApiHost=this._options.oldApiHost??"https://oapi.dingtalk.com",this._options.sendAudioFormat=this._options.sendAudioFormat??"amr",this._options.streamTemplateId?.length||T.info("\u60A8\u53EF\u4EE5\u53C2\u8003\u4EE5\u4E0B\u94FE\u63A5\uFF0C\u521B\u5EFA\u5361\u7247\u6A21\u677F\u540E\uFF0C\u5C06\u6A21\u677FID\u914D\u7F6E\u5230source\u9009\u9879\u4E2D\uFF0C\u652F\u6301\u6D41\u5F0F\u56DE\u590D\uFF1Ahttps://open.dingtalk.com/document/orgapp/typewriter-effect-streaming-ai-card"),this._options.contactsCacheTime=this._options.contactsCacheTime??24*60*60,T.trace("\u8054\u7CFB\u4EBA\u7F13\u5B58\u6709\u6548\u671F\uFF1A"+this._options.contactsCacheTime/60/60+"\u5C0F\u65F6"),this._options.contactDepartId=this._options.contactDepartId??1,this._options.contactSleepMS=this._options.contactSleepMS??30,this._options.contactAutoloadOnStart=this._options.contactAutoloadOnStart??!0,this.event=new vs}_token;_oldToken;_talkClient;_me;_trackIdCache;_contacts;_contactLoadingPromise;_departIdNameMap;get params(){return a.params}get options(){return this._options}get actions(){return[]}event;async _loadToken(){try{let e=`${this._options.apiHost}/v1.0/oauth2/${this._options.corpId}/token`,t=await(await fetch(e,{method:"post",body:JSON.stringify({client_id:this._options.clientId,client_secret:this._options.clientSecret,grant_type:"client_credentials"}),headers:{"Content-Type":"application/json"}})).json();if(!t.access_token){T.warn("\u83B7\u53D6\u9489\u9489\u5E94\u7528token\u5931\u8D25\uFF1A"+t.message),setTimeout(()=>{this._loadToken()},10*60*1e3);return}let o=Number(t.expires_in);this._token=t.access_token,T.trace("\u6210\u529F\u83B7\u53D6\u9489\u9489\u5E94\u7528token\uFF1A"+this._token),e=`${this._options.oldApiHost}/gettoken?appkey=${this._options.clientId}&appsecret=${this._options.clientSecret}`;let s=await(await fetch(e)).json();if(!s.access_token){T.warn("\u83B7\u53D6\u9489\u9489\u5E94\u7528token\u5931\u8D25\uFF1A"+s.errmsg),setTimeout(()=>{this._loadToken()},10*60*1e3);return}this._oldToken=s.access_token,T.trace("\u6210\u529F\u83B7\u53D6\u9489\u9489\u5F15\u7528\u65E7\u7248token\uFF1A"+this._oldToken),o=Math.min(Number(t.expires_in),o),setTimeout(()=>{this._loadToken()},o/2*1e3)}catch(e){T.error(e),setTimeout(()=>{this._loadToken()},10*60*1e3)}}async _api(e,t,o=void 0){let s=`${this._options.apiHost}${e}`,r;return t==="get"?r=await(await fetch(s,{headers:{"x-acs-dingtalk-access-token":this._token}})).json():r=await(await fetch(s,{headers:{"x-acs-dingtalk-access-token":this._token,"Content-Type":"application/json"},method:t,body:JSON.stringify(o)})).json(),r}async _oldApi(e,t,o=void 0){let s=`${this._options.oldApiHost}${e}?access_token=${this._oldToken}`,r;return t==="get"?r=await(await fetch(s)).json():r=await(await fetch(s,{headers:{"Content-Type":"application/json"},method:t,body:JSON.stringify(o)})).json(),r.errcode!==0&&T.error(r.errmsg),r.result}async _downloadMedia(e,t){let o=await this._api("/v1.0/robot/messageFiles/download","post",{robotCode:this._options.robotCode,downloadCode:e});if(o.downloadUrl?.length)return b.fromPath(o.downloadUrl,"binary",t)}async _onChatMessage(e){let t={time:new Date(e.createAt),senderId:e.senderStaffId,fromId:e.senderStaffId,isGroupChat:!1,isSender:!1,senderName:e.senderStaffId,senderInfo:{userId:e.senderStaffId,userName:e.senderStaffId,nickName:e.senderNick},toInfo:[this._me],origin:e,messageId:e.msgId,type:void 0,content:void 0};switch(e.conversationType==="2"&&(t.fromId=e.conversationId,t.isGroupChat=!0,t.atList=[this._me.userId],t.groupInfo={userId:e.conversationId,userName:e.conversationId,nickName:e.conversationTitle}),e.msgtype){case"text":{t.type=l.TEXT,t.content=e.text.content;break}case"audio":{let o=e.content,r={file:await this._downloadMedia(o.downloadCode,ae()+".ogg"),text:o.recognition};t.type=l.AUDIO,t.content=r;break}case"richText":{let o={content:[]},s=e.content;for(let r of s.richText)if(r.downloadCode?.length){let i=r,c={file:await this._downloadMedia(i.downloadCode,ae()+".png")};o.content.push({type:"image",data:c})}else if(typeof r.text=="string"){let i=r;o.content.push({type:"text",data:i.text})}else T.warn("\u4E0D\u80FD\u8BC6\u522B\u7684rich text content"),T.warn(r);t.type=l.RICH_TEXT,t.content=o;break}case"file":{let o=e.content,r={file:await this._downloadMedia(o.downloadCode,o.fileName),title:o.fileName,desc:o.fileName};t.type=l.FILE,t.content=r;break}case"picture":{let o=e.content,r={file:await this._downloadMedia(o.downloadCode,ae()+".png")};t.type=l.IMAGE,t.content=r;break}case"video":{let o=e.content,r={file:await this._downloadMedia(o.downloadCode,ae()+"."+o.videoType)};t.type=l.VIDEO,t.content=r;break}default:T.warn("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e.msgtype),T.debug(e);return}if(t.content){let o={id:ae(),type:f.CHAT_MESSAGE,message:t,source:this,me:this._me};this.event.emit(o.type,o)}}async _sendByWebhook(e){let t=Z(e.toInfo[0].userId??e.toInfo[0].userName);if(!t.startsWith("http")){T.warn("\u7FA4\u673A\u5668\u4EBA\u7684webhook\u4FE1\u606F\u914D\u7F6E\u6709\u8BEF\uFF01");return}let o={at:{}};if(e.atList?.length)if(e.atList[0]==="@all")o.at.isAtAll=!0;else{let s=[],r=[];e.atList.forEach(i=>{Lt(i)?s.push(i):r.push(i)}),o.at.atMobiles=s,o.at.atUserIds=r}switch(e.type){case l.TEXT:{o.msgtype="markdown";let s=e.content;o.markdown={text:s,title:this._options.markdownMsgTitle??e.content.slice(0,Math.min(e.content.length,16))};break}case l.AUDIO:{let s=e.content;if(!s.text?.length){T.warn("\u5F53\u524D\u97F3\u9891\u6CA1\u6709\u5BF9\u5E94\u7684\u6587\u5B57\uFF0C\u5C06\u4E0D\u4F1A\u88AB\u9489\u9489\u673A\u5668\u4EBA\u53D1\u9001\uFF01");return}o.msgtype="markdown",o.markdown={text:s.text,title:this._options.markdownMsgTitle??s.text.slice(0,Math.min(s.text.length,16))};break}case l.IMAGE:{let s=e.content,r=await this._getPublicUrl(s.file);o.msgtype="markdown",o.markdown={text:`![\u56FE\u7247](${r})`,title:"\u6536\u5230\u4E00\u5F20\u56FE\u7247"};break}case l.ARTICLE:{let s=e.content;o.msgtype="link",o.link={title:s.title,messageUrl:s.url,text:s.desc??s.title,picUrl:await(s.coverFile??s.thumbFile??this._app.sharedLogo).asUrl()};break}}o.msgtype&&await fetch(t,{method:"post",headers:{"content-type":"application/json"},body:JSON.stringify(o)})}async _getPublicUrl(e){if(e)return await e.asUrl()}async _uploadMediaFile(e,t){let o=`${this._options.oldApiHost}/media/upload?access_token=${this._oldToken}`,s=new Ss,r=await e.asReadStream();s.append("media",r),s.append("type",t);let i={...s.getHeaders()},n=await Cs({method:"post",url:o,headers:i,data:s,responseType:"json"});if(n.data?.errcode!==0){T.error("\u4E0A\u4F20\u6587\u4EF6\u5931\u8D25\uFF01");return}return n.data?.media_id}async _sendByAPI(e,t){let o={robotCode:this._options.robotCode},s;if(e.isGroupChat)s="/v1.0/robot/groupMessages/send",o.openConversationId=e.toInfo[0].userId;else{let r=e.toInfo.map(i=>i.userId);o.userIds=r,s="/v1.0/robot/oToMessages/batchSend"}switch(e.type){case l.TEXT:if(this._options.streamTemplateId?.length&&t?.origin?.outTrackId?.length){let r=t.origin.outTrackId,i=(this._trackIdCache[r]??"")+e.content;this._trackIdCache[r]=i,await this._api("/v1.0/card/streaming","put",{outTrackId:r,guid:ae(),key:"content",content:i,isFull:!0,isFinalize:!1,isError:!1});return}else{o.msgKey="sampleMarkdown",o.msgParam={title:this._options.markdownMsgTitle??e.content.slice(0,Math.min(e.content.length,16)),text:`${e.content}`};break}case l.IMAGE:{o.msgKey="sampleImageMsg";let r=e.content;o.msgParam={photoURL:await this._getPublicUrl(r.file)};break}case l.ARTICLE:{o.msgKey="sampleLink";let r=e.content,i=await this._getPublicUrl(r.coverFile??this._app.sharedCover);o.msgParam={text:r.desc??r.title,title:r.title,picUrl:i,messageUrl:r.url};break}case l.AUDIO:{let r=e.content,i,n;if(this._options.sendAudioFormat==="amr"){let c=await ce(r.file);i=await this._uploadMediaFile(c.file,"voice"),n=c.duration}else{i=await this._uploadMediaFile(r.file,"voice");let c=Ts((await r.file.asBuffer()).buffer);n=parseInt(c.chunkInfo[1].dataLength/c.fmt.bytesPerSec*1e3)}o.msgKey="sampleAudio",o.msgParam={mediaId:i,duration:n};break}case l.FILE:{let r=e.content,i=r.file.name.slice(r.file.name.lastIndexOf(".")+1);a.params.supportedFileExts.indexOf(i)<0&&(i=r.title?.slice(r.title.lastIndexOf(".")+1),a.params.supportedFileExts.indexOf(i)<0&&(T.warn("\u4E0D\u652F\u6301\u7684\u6587\u4EF6\u7C7B\u578B\uFF1A"+i+",\u6765\u81EA\u6587\u4EF6\uFF1A"+r.file.name),T.warn("\u6587\u4EF6\u6807\u9898\uFF1A"+r.title),T.warn("\u76EE\u524D\u652F\u6301\u7684\u7C7B\u578B\uFF1A"+a.params.supportedFileExts.join(","))));let n=await this._uploadMediaFile(r.file,"file");o.msgKey="sampleFile",o.msgParam={mediaId:n,fileName:r.title??r.file.name,fileType:i};break}case l.VIDEO:{let r=e.content;if(!r.file.name.endsWith(".mp4")&&!r.title?.endsWith(".mp4")){T.warn("\u5F53\u524D\u9489\u9489\u4EC5\u652F\u6301mp4\u6587\u4EF6\u4E0A\u4F20\uFF01");return}r.previewImage?.name||T.info("mp4\u6587\u4EF6\u5EFA\u8BAE\u63D0\u4F9B\u9884\u89C8\u56FE\uFF01");let i=As.MovieParser.parse(await r.file.asBuffer()),n=await this._uploadMediaFile(r.file,"video");if(o.msgKey="sampleVideo",o.msgParam={duration:String(i.duration/1e3),videoMediaId:n,videoType:"mp4"},r.previewImage?.name){let c=await this._uploadMediaFile(r.previewImage,"image");o.msgParam.picMediaId=c}break}default:{T.warn("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e.type);return}}o.msgParam&&(o.msgParam=JSON.stringify(o.msgParam),this._api(s,"post",o))}async _getDepartList(e,t){this._options.contactSleepMS>0&&await Le(this._options.contactSleepMS),T.debug("get depart of "+e);let o=await this._oldApi("/topapi/v2/department/listsub","post",{dept_id:e});if(t.push(e),o?.length)for(let s of o)this._departIdNameMap.set(s.dept_id,s.name),await this._getDepartList(s.dept_id,t)}async _getDepartUsers(e,t){this._options.contactSleepMS>0&&await Le(this._options.contactSleepMS);let o=await this._oldApi("/topapi/v2/user/list","post",{dept_id:e,cursor:t,size:100}),s=[];if(o?.list.length){for(let r of o.list)s.push({userId:r.userid,userName:r.userid,nickName:r.name,avatarUrl:r.avatar,bigAvatarUrl:r.avatar,signature:r.remark,origin:r});o.has_more&&s.push(...await this._getDepartUsers(e,o.next_cursor))}return T.debug("\u90E8\u95E8 id "+e+",name "+this._departIdNameMap.get(e)+" \u4E0B\u5171\u6709"+s.length+"\u4E2A\u8054\u7CFB\u4EBA"),s}async me(){if(this._me)return this._me;if(!this._options.clientId||!this._options.clientSecret)return this._me={userId:"\u533F\u540D\u673A\u5668\u4EBA",userName:"\u533F\u540D\u673A\u5668\u4EBA",nickName:"\u533F\u540D\u673A\u5668\u4EBA"},this._me;try{let t=(await this._api("/v1.0/microApp/allInnerApps","get")).appList.find(o=>o.agentId===Number(this._options.agentId));this._me={userId:t.agentId??this._options.agentId,userName:t.name??this._options.agentId,avatarUrl:t.icon,bigAvatarUrl:t.icon,nickName:t.name??this._options.agentId,origin:t}}catch{T.warn("\u6CA1\u6709\u627E\u5230agentId\u4E3A"+this._options.agentId+"\u5E94\u7528\uFF0C\u8BF7\u68C0\u67E5\u662F\u5426\u5F00\u901A\u4E86\u5E94\u7528\u7BA1\u7406\u76F8\u5173\u6743\u9650\u6216\u8005id\u662F\u5426\u6B63\u786E\uFF01"),this._me={userId:this._options.agentId.toString(),userName:this._options.agentId.toString(),nickName:"\u9489\u9489\u5E94\u7528-"+this._options.agentId}}return this._me}hasLogin(){return!!(this._options.clientId&&this._options.clientSecret&&this._talkClient?.connected||!this._options.clientId||!this._options.clientSecret)}async login(){if(this._talkClient?.connected){T.warn("\u5F53\u524D\u8FDE\u63A5\u5DF2\u7ECF\u5F00\u542F\uFF0C\u65E0\u9700\u91CD\u590D\u767B\u5F55\uFF01");return}this._options.clientId&&this._options.clientSecret?(this._talkClient?this._talkClient.removeAllListeners(or):(await this._loadToken(),this._talkClient=new ks({clientId:this._options.clientId,clientSecret:this._options.clientSecret,debug:this._options.debug??process.env.LOG_LEVEL==="debug"})),this._talkClient.registerCallbackListener(or,o=>{this._talkClient.socketCallBackResponse(o.headers.messageId,"success");let s=JSON.parse(o.data);this._onChatMessage(s)}),await this._talkClient.connect()):T.info("\u6CA1\u6709\u914D\u7F6E\u9489\u9489\u5E94\u7528\u7684client\u4FE1\u606F\uFF0C\u53EA\u80FD\u4F7F\u7528\u7FA4\u673A\u5668\u4EBA\u53D1\u9001\u6D88\u606F\uFF0C\u65E0\u6CD5\u63A5\u6536\u6D88\u606F\uFF01");let e=await this.me();this._options.contactAutoloadOnStart&&!this._contacts.length&&(T.debug("get contacts from login method"),await this.getContacts("all"));let t={id:ae(),source:this,me:e,user:e,type:f.LOGIN};!this._talkClient||this._talkClient.connected?this.event.emit(t.type,t):this._talkClient.socket.on("open",()=>{this.event.emit(t.type,t)})}async beforeSend(e){if((e.type===l.TEXT||e.type===l.RICH_TEXT||e.type===l.AUDIO||e.type===l.REF)&&this._options.streamTemplateId?.length){let t=ae(),o;e.isGroupChat?o={cardTemplateId:this._options.streamTemplateId,outTrackId:t,cardData:{cardParamMap:{}},imGroupOpenSpaceModel:{supportForward:!1},imGroupOpenDeliverModel:{robotCode:this._options.robotCode},openSpaceId:`dtv1.card//IM_GROUP.${e.fromId}`}:o={cardTemplateId:this._options.streamTemplateId,outTrackId:t,cardData:{cardParamMap:{}},imRobotOpenSpaceModel:{supportForward:!1},imRobotOpenDeliverModel:{spaceType:"IM_ROBOT",robotCode:this._options.robotCode},openSpaceId:`dtv1.card//IM_ROBOT.${e.fromId}`},(await this._api("/v1.0/card/instances/createAndDeliver","post",o)).success&&(e.origin.outTrackId=t)}}async afterSend(e){let t=e.origin?.outTrackId;if(!t?.length)return;let o=this._trackIdCache[t]??"";await this._api("/v1.0/card/streaming","put",{outTrackId:t,guid:ae(),key:"content",content:o,isFull:!0,isFinalize:!0,isError:!1}),delete this._trackIdCache[t]}sendMessage(e,t){this.event.emit(f.RESPONSE_MESSAGE,{id:ae(),type:f.CHAT_MESSAGE,message:e,fromMessage:t,source:this,me:this._me});let o=e.toInfo[0];return(o.userId??o.userName).startsWith("http")||o.userId.startsWith("__")?this._sendByWebhook(e):this._sendByAPI(e,t)}async getContacts(e,t=!1){return T.trace("=========================================================="),e==="group"?(T.warn("\u9489\u9489\u6682\u4E0D\u652F\u6301\u83B7\u53D6\u4F1A\u8BDD\u7FA4\u7EC4\uFF01"),[]):this._contacts.length&&!t?(T.trace("get contacts from cache"),this._contacts):this._contactLoadingPromise?this._contactLoadingPromise:(this._contactLoadingPromise=(async()=>{T.trace("loading ding contacts");let o=[];await this._getDepartList(this._options.contactDepartId,o);let s=new Set;for(let r of o)(await this._getDepartUsers(r,0)).forEach(n=>{s.add(n)});return this._contacts=Array.from(s),this._contactLoadingPromise=void 0,T.debug("\u5171\u83B7\u53D6\u5230"+this._contacts.length+"\u4E2A\u9489\u9489\u8054\u7CFB\u4EBA"),this._contacts})(),setTimeout(()=>{this.getContacts("all",!0)},this._options.contactsCacheTime*1e3),this._contactLoadingPromise)}async getContactDetail(e){return e}dispose(){this._talkClient?.connected&&this._talkClient.disconnect()}};import Es from"emittery";import{decrypt as rr,getSignature as Ns}from"@wecom/crypto";import{v4 as z}from"uuid";import{XMLParser as Fs}from"fast-xml-parser";import Ms from"form-data";import Os from"axios";import Ps from"md5";var k=y("wework-app"),pt=class a{static{p(this,"WeWorkSource")}_app;_options;static params={name:"wework-app",optionsSchema:{type:"formily",formily:{type:"object",properties:{...$,corpId:{type:"string",title:"\u4F01\u4E1AID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u4F01\u4E1AID"},"x-decorator-props":{tooltip:"\u4F01\u5FAE\u540E\u53F0-\u6211\u7684\u4F01\u4E1A \u6700\u4E0B\u65B9\u67E5\u770B"},required:!0},agentId:{type:"string",title:"Agent ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7684 Agent ID"},"x-decorator-props":{tooltip:"\u4F01\u5FAE\u540E\u53F0-\u5E94\u7528\u7BA1\u7406-\u81EA\u5EFA \u5E94\u7528\u9875\u9762\u8BE6\u60C5\u67E5\u770B"},required:!0},secret:{type:"string",title:"Secret","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7684 Secret"},"x-decorator-props":{tooltip:"\u4F01\u5FAE\u540E\u53F0-\u5E94\u7528\u7BA1\u7406-\u81EA\u5EFA \u5E94\u7528\u9875\u9762\u8BE6\u60C5\u67E5\u770B"},required:!0},token:{type:"string",title:"Token","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u63A5\u53E3\u6D88\u606F\u7684 Token"},"x-decorator-props":{tooltip:"\u4F01\u5FAE\u540E\u53F0-\u5E94\u7528\u7BA1\u7406-\u81EA\u5EFA-\u5E94\u7528\u8BE6\u60C5\u9875-\u529F\u80FD-\u6D88\u606F\u63A5\u6536-\u542F\u7528API\u63A5\u53E3 \u4E2D\u914D\u7F6E\u67E5\u770B"},required:!0},aesKey:{type:"string",title:"AES Key","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u63A5\u6536\u6D88\u606F\u7684 AES Key"},"x-decorator-props":{tooltip:"\u4F01\u5FAE\u540E\u53F0-\u5E94\u7528\u7BA1\u7406-\u81EA\u5EFA-\u5E94\u7528\u8BE6\u60C5\u9875-\u529F\u80FD-\u6D88\u606F\u63A5\u6536-\u542F\u7528API\u63A5\u53E3 \u4E2D\u914D\u7F6E\u67E5\u770B"},required:!0},apiHost:{type:"string",title:"API Host","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 API Host"},"x-decorator-props":{tooltip:"API \u5730\u5740"},default:"https://qyapi.weixin.qq.com"},welcomeInKfMode:{type:"boolean",title:"\u5BA2\u670D\u6A21\u5F0F\u63A5\u5165\u7684\u6B22\u8FCE\u8BED","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u5F00\u542F",unCheckedChildren:"\u5173\u95ED"},"x-decorator-props":{tooltip:"\u5BA2\u670D\u6A21\u5F0F\u4E0B\uFF0C\u7528\u6237\u7B2C\u4E00\u6B21\u8FDB\u5165\u65F6\u662F\u5426\u53D1\u9001\u6B22\u8FCE\u8BED\uFF0C\u9ED8\u8BA4 false"},default:!1},welcomePrompt:{type:"string",title:"\u5BA2\u670D\u6A21\u5F0F\u751F\u6210\u6B22\u8FCE\u8BCD\u7684\u63D0\u793A\u8BED","x-decorator":"FormItem","x-component":"Input.TextArea","x-component-props":{placeholder:"\u5982 __\u6B22\u8FCE{nickName}\uFF0C\u6709\u4EFB\u4F55\u95EE\u9898\u90FD\u53EF\u4EE5\u8DDF\u6211\u54A8\u8BE2"},"x-decorator-props":{tooltip:"\u6B22\u8FCE\u8BCD\u7684\u63D0\u793A\u8BED\uFF0C\u53EF\u4EE5\u4F7F\u7528 {nickName} \u5BF9\u7528\u6237\u7684\u6635\u79F0\u8FDB\u884C\u5360\u4F4D\uFF0C\u5982\u679C\u4EE5 __\u5F00\u5934\uFF0C\u8868\u793A\u76F4\u63A5\u53D1\u9001\u8BE5\u6B22\u8FCE\u8BCD\uFF0C\u800C\u4E0D\u662F\u9001\u5230\u540E\u7AEF\u8FDB\u884C\u751F\u6210\u3002"}},appChatGroups:{type:"array",title:"\u8981\u81EA\u52A8\u521B\u5EFA\u7684\u7FA4\u804A","x-decorator":"FormItem","x-component":"ArrayItems","x-decorator-props":{tooltip:"\u4EC5\u4F7F\u7528\u5E94\u7528\u5355\u804A\u5BF9\u8BDD\uFF0C\u65E0\u9700\u8BBE\u7F6E\u3002\u9700\u8981\u8BE5\u5E94\u7528\u81EA\u52A8\u521B\u5EFA\u7684\u7FA4\u804A\uFF08\u5DF2\u5B58\u5728\u65F6\u4E0D\u4F1A\u91CD\u590D\u521B\u5EFA\uFF09\u3002\u7531\u4E8E\u53EA\u6709\u5E94\u7528\u521B\u5EFA\u7684\u7FA4\u804A\u624D\u80FD\u4E3B\u52A8\u63A8\u9001\u6D88\u606F\uFF0C\u56E0\u6B64\u9700\u8981\u5148\u521B\u5EFA\u7FA4\u804A\u3002\u5F80\u7FA4\u91CC\u63A8\u6D88\u606F\u5EFA\u8BAE\u4F7F\u7528webhook\u673A\u5668\u4EBA\uFF0C\u800C\u4E0D\u662F\u5E94\u7528\u673A\u5668\u4EBA\uFF0Cwebhook\u652F\u6301Markdown\u6D88\u606F\u3002"},items:{type:"object","x-component":"ArrayItems.Item",properties:{userlist:{type:"array",title:"\u7FA4\u6210\u5458\u5217\u8868","x-decorator":"FormItem","x-component":"ArrayItems",items:{type:"void","x-component":"Space",properties:{input:{type:"string","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6210\u5458\u7684ID\uFF0C\u53EF\u5728\u540E\u53F0\u901A\u8BAF\u5F55\u67E5\u770B"}},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove"}}},properties:{add:{type:"void",title:"\u6DFB\u52A0\u4E00\u4E2A\u6210\u5458","x-component":"ArrayItems.Addition"}}},chatid:{type:"string",title:"\u7FA4\u804A ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u7FA4\u804A ID\uFF0C\u5EFA\u8BAE\u968F\u673A\u751F\u6210\u4E00\u4E2A"}},name:{type:"string",title:"\u7FA4\u540D\u79F0","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u7FA4\u540D\u79F0"}},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove"}}},properties:{add:{type:"void",title:"\u6DFB\u52A0\u4E00\u4E2A\u7FA4","x-component":"ArrayItems.Addition"}}}}}},eventNames:[f.CHAT_MESSAGE,f.LOGIN],desc:"\u4F01\u4E1A\u5FAE\u4FE1\u5E94\u7528/\u5BA2\u670D"};constructor(e,t){this._app=e,this._options=t,this._apiHost=this._options.apiHost??"https://qyapi.weixin.qq.com",this._cacheManager=Bt(this._options.instanceName),this.event=new Es}_apiHost;_token;_me;_cacheManager;get params(){return a.params}get options(){return this._options}get actions(){return[{type:"api",actionName:"receive",action:{type:"normal",handler:p(e=>this._onMessage(e),"handler")}}]}event;async _loadToken(){if(!this._options.corpId||!this._options.secret)return k.info("\u5F53\u524D\u4F01\u5FAE\u6E90\u672A\u914D\u7F6E\u4F01\u4E1A\u4FE1\u606F\uFF0C\u53EA\u80FD\u4F7F\u7528webhook\u673A\u5668\u4EBA\u53D1\u9001\u6D88\u606F\uFF0C\u65E0\u6CD5\u63A5\u6536\u6D88\u606F\uFF01"),!0;let e=`${this._apiHost}/cgi-bin/gettoken?corpid=${this._options.corpId}&corpsecret=${this._options.secret}`,t=await(await fetch(e)).json();if(t.errcode!==0){k.error(t.errmsg),setTimeout(()=>{this._loadToken()},10*60*1e3);return}this._token=t.access_token,k.debug("\u6210\u529F\u83B7\u53D6\u4F01\u5FAE\u5E94\u7528token:"+this._token);let o=Number(t.expires_in);return setTimeout(()=>{this._loadToken()},o/2*1e3),!0}_checkSignature(e,t,o,s){let r=Ns(this._options.token,t,o,s);return e===r}async _loadMediaFile(e,t){let o=`${this._apiHost}/cgi-bin/media/get?access_token=${this._token}&media_id=${e}`,s=await fetch(o),r;if(s.headers.get("Content-Type").indexOf("json")>=0){let i=await s.json();if(i.errcode!==0){k.error(i.errmsg);return}r=b.fromPath(i.video_url,"binary",t)}else{let i=await s.arrayBuffer();r=b.fromBuffer(Buffer.from(i),t,"binary")}return r}async _uploadMediaFile(e,t){let o=new Ms,s=await t.asReadStream();o.append("media",s);let r={...o.getHeaders()},i=await Os({method:"post",url:e,headers:r,data:o,responseType:"json"});return i.data?.errcode!==0&&k.error("\u4E0A\u4F20\u6587\u4EF6\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u6587\u4EF6\u5927\u5C0F\u548C\u7C7B\u578B\u662F\u5426\u652F\u6301\uFF01"),i.data?.media_id}async _uploadAppMediaFile(e,t){let o=`${this._apiHost}/cgi-bin/media/upload?access_token=${this._token}&type=${t}`;return this._uploadMediaFile(o,e)}async _uploadRobotMediaFile(e,t,o){let s=`${this._apiHost}/cgi-bin/webhook/upload_media?key=${o}&type=${t}`;return this._uploadMediaFile(s,e)}async _processKfMessage(e,t){let o=e.external_userid??e.event?.external_userid;if(!o?.length){k.warn("\u8BE5\u6D88\u606F\u6CA1\u6709userid\uFF0C\u65E0\u6CD5\u56DE\u590D\uFF01"),k.warn(e);return}e.external_userid=o,e.open_kfid=e.open_kfid??e.event?.open_kfid;let s=await this._cacheManager.get(o);if(!s){let n=await this._api("/cgi-bin/kf/customer/batchget","post",{external_userid_list:[o],need_enter_session_context:0});if(n?.customer_list?.length){let c=n.customer_list[0];s={userId:o,userName:o,avatarUrl:c.avatar,bigAvatarUrl:c.avatar,nickName:c.nicname,origin:c},this._cacheManager.set(o,s)}}s||(k.warn("\u672A\u80FD\u83B7\u53D6\u5230\u8BE5\u7528\u6237\u7684\u4FE1\u606F\uFF0C\u53EF\u80FD\u8BE5\u7528\u6237\u7B2C\u4E00\u6B21\u8FDB\u5165\u5BA2\u670D\u5DF2\u7ECF\u8D85\u8FC748\u5C0F\u65F6\uFF01"),s={userId:o,userName:o,nickName:o});let r={atList:[],time:new Date(e.send_time*1e3),senderId:e.external_userid,fromId:e.external_userid,isGroupChat:!1,isSender:!1,senderName:s.userName,senderInfo:s,toInfo:[this._me],messageId:e.msgid,origin:{...t,data:{...e}},type:void 0,content:void 0};switch(e.msgtype){case"text":{let n=e.text;r.type=l.TEXT,r.content=n.content;break}case"image":{r.type=l.IMAGE;let n=e.image,m={file:await this._loadMediaFile(n.media_id,z()+".png")};r.content=m;break}case"voice":{let n=e.voice;r.type=l.AUDIO;let c=await this._loadMediaFile(n.media_id,z()+".amr"),m=await we(await c.asBuffer());await m.asLocalPath();let d={file:m};r.content=d;break}case"video":{let n=e.video;r.type=l.VIDEO;let c=await this._loadMediaFile(n.media_id,z()+".mp4"),m=await this._app.sharedCover,d={file:c,previewImage:m};r.content=d;break}case"link":{r.type=l.ARTICLE;let n=e.link,c={url:n.url,title:n.title,desc:n.desc,coverFile:n.pic_url?.length?b.fromPath(n.pic_url,"binary",z()+".png"):this._app.sharedCover};r.content=c;break}case"location":{r.type=l.POSITION;let n=e.location,c={placeName:n.name,placeDetail:n.address,lon:n.longitude,lat:n.latitude,mapLevel:void 0};r.content=c;break}case"event":{e.event.external_userid?.length&&await this._processKfUserEventMessage(e,r);break}default:break}if(!r.content){k.warn("\u6536\u5230\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B"),k.warn(r);return}let i={id:z(),type:f.CHAT_MESSAGE,message:r,source:this,me:this._me};this.event.emit(i.type,i)}async _processKfUserEventMessage(e,t){switch(e.event.event_type){case"enter_session":{if(this._options.welcomeInKfMode){let o=this._options.welcomePrompt??"__\u6B22\u8FCE{nickName}\uFF0C\u6709\u4EFB\u4F55\u95EE\u9898\u90FD\u53EF\u4EE5\u8DDF\u6211\u54A8\u8BE2";if(o=o.replaceAll("{nickName}",t.senderInfo.nickName),t.type=l.TEXT,t.content=o,o.startsWith("__")){let s={type:l.TEXT,content:o,toInfo:[t.senderInfo],isGroupChat:!1};await this._sendKfMessage(s,t),t.type=void 0,t.content=void 0}}break}}}async _onKfMessage(e){let t=await this._cacheManager.get("cursor"),o;if(t?.length)o=await this._api("/cgi-bin/kf/sync_msg","post",{token:e.Token,open_kfid:e.OpenKfId,cursor:t});else for(o=await this._api("/cgi-bin/kf/sync_msg","post",{token:e.Token,open_kfid:e.OpenKfId});o.has_more===1;){let i=await this._api("/cgi-bin/kf/sync_msg","post",{token:e.Token,open_kfid:e.OpenKfId,cursor:o.next_cursor});if(i.msg_list?.length){let n=o.msg_list;n.push(...i.msg_list),i.msg_list=n,o=i}else break}if(!o?.next_cursor){k.warn("\u83B7\u53D6\u6700\u65B0\u6D88\u606F\u5931\u8D25\uFF01");return}if(await this._cacheManager.get("cursor")!==t){k.info("\u6709\u65B0\u7684\u6D88\u606F\u8986\u76D6\u4E86\u672C\u6B21\u8FDE\u63A5\uFF0C\u5185\u5BB9\u5C06\u5728\u65B0\u7684\u8BF7\u6C42\u4E2D\u5904\u7406");return}if(await this._cacheManager.set("cursor",t),!o.msg_list.length)return;let r=o.msg_list.toReversed();if(!t?.length)this._processKfMessage(r[0],e);else{let i=[];for(let n of r)if(n.msgtype==="event"){if(n.event.external_userid?.length){let c=n.event.external_userid;i.indexOf(c)<0&&(i.push(c),this._processKfMessage(n,e))}}else i.indexOf(n.external_userid)<0&&(i.push(n.external_userid),this._processKfMessage(n,e))}}async _processEventMessage(e,t){switch(e.Event){case"subscribe":t.type=l.SUBSCRIBE,t.content={isSubscribe:!0};break;case"unsubscribe":t.type=l.UNSUBSCRIBE,t.content={isSubscribe:!1};break;case"LOCATION":break;default:break}}async _processAppMessage(e){let t={atList:[],time:new Date(e.CreateTime*1e3),senderId:e.FromUserName,fromId:e.FromUserName,isGroupChat:!1,isSender:!1,senderName:e.FromUserName,senderInfo:{userName:e.FromUserName,userId:e.FromUserName,nickName:e.FromUserName,origin:e.FromUserName},toInfo:[this._me],origin:e,messageId:e.MsgId,type:void 0,content:void 0};switch(e.MsgType){case"text":{let s=e;t.type=l.TEXT,t.content=s.Content;break}case"image":{t.type=l.IMAGE;let s=e,i={file:b.fromPath(s.PicUrl,"binary",z()+".png")};t.content=i;break}case"voice":{let s=e;if(s.Format.toLowerCase()!=="amr"){k.warn("\u4E0D\u652F\u6301\u7684\u8BED\u97F3\u683C\u5F0F\uFF1A"+s.Format);break}t.type=l.AUDIO;let r=await this._loadMediaFile(s.MediaId,z()+".amr"),i=await we(await r.asBuffer());await i.asLocalPath();let n={file:i};t.content=n;break}case"video":{let s=e;t.type=l.VIDEO;let r=await this._loadMediaFile(s.MediaId,z()+".mp4"),i=await this._loadMediaFile(s.ThumbMediaId,z()+".png"),n={file:r,previewImage:i};t.content=n;break}case"link":{t.type=l.ARTICLE;let s=e,r={url:s.Url,title:s.Title,desc:s.Description,coverFile:b.fromPath(s.PicUrl,"binary",z()+".png")};t.content=r;break}case"location":{t.type=l.POSITION;let s=e,r={placeName:s.Label,placeDetail:s.Label,lon:s.Location_X,lat:s.Location_Y,mapLevel:s.Scale};t.content=r;break}case"event":{await this._processEventMessage(e,t);break}default:break}if(!t.content){k.warn("\u6536\u5230\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B"),k.warn(t);return}let o={id:z(),type:f.CHAT_MESSAGE,message:t,source:this,me:this._me};this.event.emit(o.type,o)}async _onMessage(e){let t=e.query,{msg_signature:o,timestamp:s,nonce:r}=t;if(e.method.toLowerCase()==="get")return this._checkSignature(o,Number(s),r,t.echostr)?rr(this._options.aesKey,t.echostr).message:(k.warn("\u6536\u5230\u975E\u6CD5GET\u8BF7\u6C42\uFF01"),k.warn(t),"\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01");let i=e.body.xml;if(!this._checkSignature(o,Number(s),r,i.Encrypt))return k.warn("\u6536\u5230\u975E\u6CD5\u8BF7\u6C42\uFF01"),k.warn(t),"\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01";let n=rr(this._options.aesKey,i.Encrypt),c=new Fs().parse(n.message).xml;return c.MsgType==="event"&&c.Event==="kf_msg_or_event"?this._onKfMessage(c):this._processAppMessage(c),""}async _api(e,t,o=void 0,s,r="application/json"){let i=`${this._apiHost}${e}?access_token=${this._token}`;s&&(s=new URLSearchParams(s)),s?.size>0&&(i=i+`&${s.toString()}`);let n;if(t==="get"?n=await(await fetch(i)).json():n=await(await fetch(i,{headers:{"Content-Type":r},method:t,body:JSON.stringify(o)})).json(),n.errcode!==0){k.error(n.errmsg);return}return n}async _sendAppGroupMessage(e){let t=e.toInfo[0],o=t.userId??t.userName;o?.length||(k.warn("chatid\u914D\u7F6E\u5F02\u5E38\uFF01"),k.warn(t));let s={chatid:o,safe:0};switch(e.type){case l.TEXT:{s.msgtype="text";let r=e.content;if(!r?.length){k.info("\u8981\u53D1\u9001\u7684\u6587\u672C\u5185\u5BB9\u4E3A\u7A7A\uFF01");return}s.text={content:r};break}case l.IMAGE:{s.msgtype="image";let r=await this._uploadAppMediaFile(e.content.file,"image");if(!r){k.warn("\u4E0A\u4F20\u56FE\u7247\u5931\u8D25\uFF01");return}s.image={media_id:r};break}case l.AUDIO:{s.msgtype="voice";let r=e.content.file,{file:i}=await ce(r),n=await this._uploadAppMediaFile(i,"voice");if(!n){k.warn("\u4E0A\u4F20\u8BED\u97F3\u5931\u8D25\uFF01");return}s.voice={media_id:n};break}case l.VIDEO:{s.msgtype="video";let r=e.content;if(!r.previewImage){k.warn("\u89C6\u9891\u6CA1\u6709\u9884\u89C8\u56FE\uFF0C\u65E0\u6CD5\u53D1\u9001\uFF01");return}let i=await this._uploadAppMediaFile(r.file,"video");s.video={media_id:i,title:r.title??z()+".mp4",description:r.desc??"\u4E00\u4E2A\u89C6\u9891"};break}case l.FILE:{s.msgtype="file";let r=e.content,i=await this._uploadAppMediaFile(r.file,"file");s.file={media_id:i};break}case l.ARTICLE:{let r=e.content;if(r.coverFile||r.thumbFile){s.msgtype="news";let n=await(r.coverFile??r.thumbFile).asUrl();s.news={articles:[{title:r.title,description:r.desc??r.title,url:r.url,picurl:n}]}}else s.msgtype="textcard",s.textcard={title:r.title,description:r.desc??r.title,url:r.url??_.httpUrl,btntxt:r.url?.length?"\u67E5\u770B\u8BE6\u60C5":""};break}case l.MUSIC:{s.msgtype="news";let r=e.content;s.news={articles:[{title:r.title,description:r.desc??r.title,url:r.url??await r.file.asUrl(),picurl:r.coverUrl}]};break}default:k.warn("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e.type);break}s.msgtype&&await this._api("/cgi-bin/appchat/send","post",s)}async _sendRobotMessage(e){let t=e.toInfo[0],o=Z(t.userId??t.userName);if(!o?.startsWith("http")){k.warn("\u673A\u5668\u4EBA\u6D88\u606F\u914D\u7F6E\u7684webhook\u5730\u5740\u5F02\u5E38\uFF01"),k.warn(e);return}let r=new URLSearchParams(o.split("?")[1]).get("key"),i={};switch(e.type){case l.TEXT:{i.msgtype="markdown";let n=e.content;if(!n?.length){k.info("\u8981\u53D1\u9001\u7684\u6587\u672C\u5185\u5BB9\u4E3A\u7A7A\uFF01");return}if(i.markdown={content:n},e.atList?.length){let c=[];e.atList.forEach(m=>{Lt(m)?c.push(m):i.markdown.content=i.markdown.content+` <@${m}>`}),c.length&&(i.markdown.mentioned_mobile_list=c)}break}case l.IMAGE:{i.msgtype="image";let n=e.content.file,c=await n.asBuffer(),m=Ps(c),d=await n.asBase64();i.image={base64:d,md5:m};break}case l.AUDIO:{i.msgtype="voice";let n=e.content.file,{file:c}=await ce(n),m=await this._uploadRobotMediaFile(c,"voice",r);if(!m){k.warn("\u4E0A\u4F20\u8BED\u97F3\u5931\u8D25\uFF01");return}i.voice={media_id:m};break}case l.FILE:{i.msgtype="file";let n=e.content,c=await this._uploadRobotMediaFile(n.file,"file",r);i.file={media_id:c};break}case l.ARTICLE:{i.msgtype="news";let n=e.content,c=n.coverFile??n.thumbFile,m;c&&(m=await c.asUrl()),i.news={articles:[{title:n.title,description:n.desc??n.title,url:n.url,picurl:m}]};break}case l.MUSIC:{i.msgtype="news";let n=e.content;i.news={articles:[{title:n.title,description:n.desc??n.title,url:n.url??await n.file.asUrl(),picurl:n.coverUrl}]};break}default:k.warn("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e.type);break}i.msgtype&&await(await fetch(o,{headers:{"Content-Type":"application/json"},method:"post",body:JSON.stringify(i)})).json()}async _sendKfMessage(e,t){let o=t?.origin?.data;o||k.warn("fromMesage\u4E2D\u6CA1\u6709origin.data\uFF0C\u65E0\u6CD5\u83B7\u77E5open_kfid\uFF01"),e.toInfo.length>1&&k.warn("\u5F53\u524D\u6D88\u606F\u6E90\u4E0D\u652F\u6301\u540C\u65F6\u53D1\u9001\u591A\u4E2A\u5BF9\u8C61\uFF0C\u5C06\u53EA\u53D1\u9001\u7B2C\u4E00\u4E2A\uFF01");let s={touser:e.toInfo[0].userId,open_kfid:o.open_kfid};switch(e.type){case l.TEXT:{s.msgtype="text";let r=e.content;if(!r?.length){k.info("\u8981\u53D1\u9001\u7684\u6587\u672C\u5185\u5BB9\u4E3A\u7A7A\uFF01");return}s.text={content:de(r)};break}case l.IMAGE:{s.msgtype="image";let r=await this._uploadAppMediaFile(e.content.file,"image");if(!r){k.warn("\u4E0A\u4F20\u56FE\u7247\u5931\u8D25\uFF01");return}s.image={media_id:r};break}case l.AUDIO:{s.msgtype="voice";let r=e.content.file,{file:i}=await ce(r),n=await this._uploadAppMediaFile(i,"voice");if(!n){k.warn("\u4E0A\u4F20\u8BED\u97F3\u5931\u8D25\uFF01");return}s.voice={media_id:n};break}case l.VIDEO:{s.msgtype="video";let r=e.content;if(!r.previewImage){k.warn("\u89C6\u9891\u6CA1\u6709\u9884\u89C8\u56FE\uFF0C\u65E0\u6CD5\u53D1\u9001\uFF01");return}let i=await this._uploadAppMediaFile(r.file,"video");s.video={media_id:i};break}case l.FILE:{s.msgtype="file";let r=e.content,i=await this._uploadAppMediaFile(r.file,"file");s.file={media_id:i};break}case l.ARTICLE:{s.msgtype="link";let r=e.content,i=r.coverFile??r.thumbFile??this._app.sharedCover,n=await this._uploadAppMediaFile(i,"image");s.link={title:r.title,desc:r.desc??r.title,url:r.url,thumb_media_id:n};break}case l.MP:{s.msgtype="miniprogram";let r=e.content,i=r.cover??this._app.sharedCover,n=await this._uploadAppMediaFile(i,"image");s.miniprogram={appid:r.id,title:r.title,thumb_media_id:n,pagepath:r.openUrl??r.openRelativePath};break}case l.POSITION:{s.msgtype="location";let r=e.content;s.location={name:r.placeName,address:r.placeDetail,latitude:r.lat,longitude:r.lon};break}case l.CUSTOM:{e.customType==="ca_link"&&(s.msgtype="ca_link",s.ca_link={link_url:e.content});break}default:k.warn("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e.type);break}s.msgtype&&await this._api("/cgi-bin/kf/send_msg","post",s)}async _sendAppMessage(e,t){let s={touser:e.toInfo.map(r=>r.userId).join("|"),toparty:e.origin?.toparty,totag:e.origin?.totag,agentid:this._options.agentId,safe:e.origin?.safe};switch(e.type){case l.TEXT:{s.msgtype="markdown";let r=e.content;if(!r?.length){k.info("\u8981\u53D1\u9001\u7684\u6587\u672C\u5185\u5BB9\u4E3A\u7A7A\uFF01");return}s.markdown={content:r};break}case l.IMAGE:{s.msgtype="image";let r=await this._uploadAppMediaFile(e.content.file,"image");if(!r){k.warn("\u4E0A\u4F20\u56FE\u7247\u5931\u8D25\uFF01");return}s.image={media_id:r};break}case l.AUDIO:{s.msgtype="voice";let r=e.content.file,{file:i}=await ce(r),n=await this._uploadAppMediaFile(i,"voice");if(!n){k.warn("\u4E0A\u4F20\u8BED\u97F3\u5931\u8D25\uFF01");return}s.voice={media_id:n};break}case l.VIDEO:{s.msgtype="video";let r=e.content;if(!r.previewImage){k.warn("\u89C6\u9891\u6CA1\u6709\u9884\u89C8\u56FE\uFF0C\u65E0\u6CD5\u53D1\u9001\uFF01");return}let i=await this._uploadAppMediaFile(r.file,"video");s.video={media_id:i,title:r.title??z()+".mp4",description:r.desc??"\u4E00\u4E2A\u89C6\u9891"};break}case l.FILE:{s.msgtype="file";let r=e.content,i=await this._uploadAppMediaFile(r.file,"file");s.file={media_id:i};break}case l.ARTICLE:{let r=e.content;if(r.coverFile||r.thumbFile){s.msgtype="news";let n=await(r.coverFile??r.thumbFile).asUrl();s.news={articles:[{title:r.title,description:r.desc??r.title,url:r.url,picurl:n}]}}else s.msgtype="textcard",s.textcard={title:r.title,description:r.desc??r.title,url:r.url??_.httpUrl,btntxt:r.url?.length?"\u67E5\u770B\u8BE6\u60C5":""};break}case l.MUSIC:{s.msgtype="news";let r=e.content;s.news={articles:[{title:r.title,description:r.desc??r.title,url:r.url??await r.file.asUrl(),picurl:r.coverUrl}]};break}default:k.warn("\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e.type);break}s.msgtype&&await this._api("/cgi-bin/message/send","post",s)}async me(e){if(this._me&&!e)return this._me;if(!this._token?.length)return{userId:"\u533F\u540D\u673A\u5668\u4EBA",userName:"\u533F\u540D\u673A\u5668\u4EBA",nickName:"\u533F\u540D\u673A\u5668\u4EBA"};let t=await this._api("/cgi-bin/agent/get","get",void 0,{agentId:this._options.agentId});if(t)return this._me={userId:this._options.agentId,userName:this._options.agentId,nickName:t.name,avatarUrl:t.square_logo_url,signature:t.description,origin:t},this._me}hasLogin(){return!!(this._options.secret&&this._token?.length||!this._options.secret||!this._options.agentId||!this._options.token)}async login(){if(!this._token){if(await this._loadToken()){let e=await this.me(),t={type:f.LOGIN,user:e,id:z(),source:this,me:e};this.event.emit(t.type,t)}this._options.appChatGroups?.length&&(await this.createAppGroupChats(this._options.appChatGroups),k.info("\u7FA4\u804A\u521B\u5EFA\u5B8C\u6210\uFF0C\u5982\u679C\u63D0\u793A\u7FA4\u804A\u5DF2\u5B58\u5728\uFF0C\u53EF\u4EE5\u5FFD\u7565"))}}async sendMessage(e,t){this.event.emit(f.RESPONSE_MESSAGE,{id:z(),type:f.CHAT_MESSAGE,message:e,fromMessage:t,source:this,me:this._me});let o=t?.origin;return e.isGroupChat||e.toInfo[0].isGroup?e.toInfo[0].app?this._sendAppGroupMessage(e):this._sendRobotMessage(e):o&&o.MsgType==="event"&&o.Event==="kf_msg_or_event"?this._sendKfMessage(e,t):this._sendAppMessage(e,t)}async getContacts(e,t=!1){return[]}async getContactDetail(e){return e}async createAppGroupChats(e){for(let t of e)await this._api("/cgi-bin/appchat/create","post",{...t,owner:t.userlist[0]})}};import Rs from"emittery";import{AppType as Bs,Client as Ls,EventDispatcher as Us,LoggerLevel as lo,WSClient as Ds}from"@larksuiteoapi/node-sdk";import{v4 as fe}from"uuid";import{getWavFileInfo as $s}from"wav-file-decoder";var ct={article:{config:{update_multi:!0},i18n_elements:{zh_cn:[{tag:"img",img_key:"{image_key}",preview:!0,transparent:!1,scale_type:"fit_horizontal",alt:{tag:"plain_text",content:""}},{tag:"column_set",flex_mode:"none",horizontal_spacing:"8px",horizontal_align:"left",columns:[{tag:"column",width:"weighted",vertical_align:"top",vertical_spacing:"8px",elements:[{tag:"markdown",content:"{desc}",text_align:"left",text_size:"normal",icon:{tag:"standard_icon",token:"describe_outlined",color:"grey"}}],weight:3},{tag:"column",width:"weighted",vertical_align:"top",vertical_spacing:"8px",elements:[{tag:"markdown",content:"{link}",text_align:"left",text_size:"normal"}],weight:1}],margin:"16px 0px 0px 0px"}]},i18n_header:{zh_cn:{title:{tag:"plain_text",content:"{title}"},subtitle:{tag:"plain_text",content:""},template:"blue"}}},stream:{config:{update_multi:!0},i18n_elements:{zh_cn:[{tag:"markdown",content:"{content}",text_align:"left",text_size:"normal"}]},i18n_header:{zh_cn:{title:{tag:"plain_text",content:"{title}"},subtitle:{tag:"plain_text",content:""},template:"blue",ud_icon:{tag:"standard_icon",token:"reply_filled"}}}},textImage:{config:{update_multi:!0},i18n_elements:{zh_cn:[{tag:"column_set",flex_mode:"none",columns:[{tag:"column",width:"weighted",vertical_align:"top",elements:[{tag:"markdown",content:"{content}",text_align:"left",text_size:"normal"}],weight:1},{tag:"column",width:"auto",vertical_align:"top",elements:[{tag:"img",img_key:"{image_key}",preview:!0,scale_type:"crop_center",size:"medium",alt:{tag:"plain_text",content:""}}]}],margin:"16px 0px 0px 0px"}]},i18n_header:{}}};import{fileTypeFromBuffer as js}from"file-type";var E=y("feishu-source"),lt=class a{static{p(this,"FeishuSource")}_app;_options;static params={name:"feishu",optionsSchema:{type:"formily",formily:{type:"object",properties:{...$,appId:{type:"string",title:"App ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u98DE\u4E66\u5E94\u7528\u7684 App ID"},"x-decorator-props":{tooltip:"\u98DE\u4E66\u5F00\u53D1\u8005\u540E\u53F0\u5E94\u7528\u7BA1\u7406\u9875\u9762\u7684 \u57FA\u7840\u4FE1\u606F-\u51ED\u8BC1\u4E0E\u57FA\u7840\u4FE1\u606F\u9875\u9762\u83B7\u53D6\u3002"},required:!0},appSecret:{type:"string",title:"App Secret","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u98DE\u4E66\u5E94\u7528\u7684 App Secret"},"x-decorator-props":{tooltip:"\u98DE\u4E66\u5F00\u53D1\u8005\u540E\u53F0\u5E94\u7528\u7BA1\u7406\u9875\u9762\u7684 \u57FA\u7840\u4FE1\u606F-\u51ED\u8BC1\u4E0E\u57FA\u7840\u4FE1\u606F\u9875\u9762\u83B7\u53D6\u3002"},required:!0},verificationToken:{type:"string",title:"Verification Token","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 Verification Token\uFF0C\u98DE\u4E66\u540E\u53F0\u5E94\u7528\u4E0E\u56DE\u8C03\u4E2D\u5F00\u542F\u4E86\u52A0\u5BC6\u7B56\u7565\u624D\u9700\u8981\u586B\u5199"},"x-decorator-props":{tooltip:"\u98DE\u4E66\u5E94\u7528\u7BA1\u7406\u9875\u9762 \u5F00\u53D1\u914D\u7F6E-\u4E8B\u4EF6\u4E0E\u56DE\u8C03\u4E2D\u9009\u62E9\u52A0\u5BC6\u7B56\u7565\uFF0C\u5982\u679C\u5F00\u542F\u7684\u8BDD\u9700\u8981\u586B\u5165\u6B64\u9879\u3002"}},encryptKey:{type:"string",title:"Encrypt Key","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 Encrypt Key\uFF0C\u98DE\u4E66\u540E\u53F0\u5E94\u7528\u4E0E\u56DE\u8C03\u4E2D\u5F00\u542F\u4E86\u52A0\u5BC6\u7B56\u7565\u624D\u9700\u8981\u586B\u5199"},"x-decorator-props":{tooltip:"\u98DE\u4E66\u5E94\u7528\u7BA1\u7406\u9875\u9762 \u5F00\u53D1\u914D\u7F6E-\u4E8B\u4EF6\u4E0E\u56DE\u8C03\u4E2D\u9009\u62E9\u52A0\u5BC6\u7B56\u7565\uFF0C\u5982\u679C\u5F00\u542F\u7684\u8BDD\u9700\u8981\u586B\u5165\u6B64\u9879\u3002"}},domain:{type:"string",title:"Domain","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u9ED8\u8BA4\u4E3A https://open.feishu.cn"},"x-decorator-props":{tooltip:"\u98DE\u4E66\u5F00\u653E\u5E73\u53F0\u7684 API \u57DF\u540D\uFF0C\u9ED8\u8BA4\u662F https://open.feishu.cn"},default:"https://open.feishu.cn"},contactsCacheTime:{type:"number",title:"\u8054\u7CFB\u4EBA\u7F13\u5B58\u65F6\u95F4 (\u79D2)","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:60*60,placeholder:"\u8BF7\u8F93\u5165\u8054\u7CFB\u4EBA\u7F13\u5B58\u65F6\u95F4"},"x-decorator-props":{tooltip:"\u8054\u7CFB\u4EBA\u7F13\u5B58\u65F6\u95F4\uFF0C\u5355\u4F4D\u662F\u79D2\uFF0C\u9ED8\u8BA424\u5C0F\u65F6"},default:24*60*60},contactDepartId:{type:"string",title:"\u8054\u7CFB\u4EBA\u5217\u8868 ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u8054\u7CFB\u4EBA\u5217\u8868 ID\uFF0C\u9ED8\u8BA4\u4F7F\u7528\u8DDF\u5217\u8868\u3002"},"x-decorator-props":{tooltip:"\u8054\u7CFB\u4EBA\u5217\u8868\u7684 ID\uFF0C\u5982\u679C\u4EE5 od- \u5F00\u5934\u8868\u793A\u98DE\u4E66\u81EA\u52A8\u751F\u6210\u7684\u5F00\u653E ID\uFF0C\u5426\u5219\u4E3A\u81EA\u5B9A\u4E49 ID"}},ignoreNoneUserMessage:{type:"boolean",title:"\u5FFD\u7565\u975E\u7528\u6237\u6D88\u606F","x-decorator":"FormItem","x-component":"Switch","x-decorator-props":{tooltip:"\u662F\u5426\u5FFD\u7565\u975E\u7528\u6237\u53D1\u9001\u7684\u6D88\u606F\uFF0C\u9ED8\u8BA4 true"},default:!0},replayTextMode:{type:"string",enum:[{label:"\u666E\u901A\u56DE\u590D",value:"text"},{label:"\u56FE\u6587\u6DF7\u6392",value:"rich_text"},{label:"\u6D41\u5F0F\u56DE\u590D",value:"stream"}],title:"\u6D88\u606F\u56DE\u590D\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u6D88\u606F\u56DE\u590D\u6A21\u5F0F"},"x-decorator-props":{tooltip:"\u6D88\u606F\u7684\u56DE\u590D\u65B9\u5F0F\uFF0C\u9ED8\u8BA4\u4F7F\u7528 \u666E\u901A\u56DE\u590D \u6A21\u5F0F\u3002\u56DE\u590D\u65F6\uFF0C\u5982\u679C\u6709\u8BED\u97F3\u5C06\u4F1A\u5355\u72EC\u53D1\u9001\u3002"},default:"text"},cardId:{type:"string",title:"\u5361\u7247\u6A21\u677F ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5361\u7247\u6A21\u677F ID\uFF08\u7559\u7A7A\u4F7F\u7528\u9ED8\u8BA4\u6A21\u677F\uFF09"},"x-decorator-props":{tooltip:"\u5F53\u914D\u7F6E\u4E3A\u6D41\u5F0F\u56DE\u590D\u65F6\uFF0C\u53EF\u63D0\u4F9B\u81EA\u5B9A\u4E49\u5361\u7247 ID\uFF0C\u5426\u5219\u5C06\u4F7F\u7528\u9ED8\u8BA4\u6A21\u677F"}},richTextTitle:{type:"boolean",title:"\u542F\u7528\u56FE\u6587\u6DF7\u6392\u6807\u9898","x-decorator":"FormItem","x-component":"Switch","x-decorator-props":{tooltip:"\u5F53\u4F7F\u7528\u56FE\u6587\u6DF7\u6392\u6A21\u5F0F\u56DE\u590D\u65F6\uFF0C\u662F\u5426\u542F\u7528\u6807\u9898\uFF0C\u9ED8\u8BA4 false\u3002\u9700\u8BBE\u7F6E\u4E3A\u4F7F\u7528\u56FE\u6587\u6DF7\u6392\u624D\u751F\u6548\u3002"},default:!1},richTextTitleTemplate:{type:"string",title:"\u56FE\u6587\u6DF7\u6392\u6807\u9898\u6A21\u677F","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"RE:{title}"},"x-decorator-props":{tooltip:"\u56FE\u6587\u6DF7\u6392\u6A21\u5F0F\u6807\u9898\u6A21\u677F\uFF0C\u9ED8\u8BA4\u662F RE:{title} \uFF0C\u5176\u4E2Dtitle\u662F\u6839\u636E\u6A21\u578B\u56DE\u590D\u5185\u5BB9\u751F\u6210\u7684\u6807\u9898\u3002\u9700\u5F00\u542F\u6807\u9898\u624D\u751F\u6548\u3002"},default:"RE:{title}"},thinkingTips:{type:"string",title:"\u601D\u8003\u63D0\u793A\u8BED","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u601D\u8003\u63D0\u793A\u8BED\uFF0C\u5982 \u6B63\u5728\u601D\u8003\u4E2D..."},"x-decorator-props":{tooltip:"\u542F\u7528\u6D41\u5F0F\u56DE\u590D\u65F6\uFF0C\u6B63\u5728\u601D\u8003\u7684\u63D0\u793A\u8BED\uFF0C\u9ED8\u8BA4\u662F\u201C\u6B63\u5728\u601D\u8003\u4E2D...\u201D"}},wavChannel:{type:"number",title:"\u8F6Cwav\u97F3\u9891\u901A\u9053\u6570","x-decorator":"FormItem","x-decorator-props":{tooltip:"\u5F53\u5BF9\u63A5\u67D0\u4E9B\u97F3\u9891\u8F6C\u6362skill\u65F6\u5019\uFF0C\u9700\u8981\u7279\u5B9A\u7684\u53C2\u6570\uFF0C\u8FD9\u91CC\u53EF\u4EE5\u63D0\u524D\u5728\u8F6C\u6362\u65F6\u8BBE\u5B9A\uFF0C\u5982\u767E\u5EA6\u8BED\u97F3\u8F6C\u6587\u672C\u9700\u8981\u5355\u901A\u905316k\u6216\u80058k\u3002"},"x-component":"Select",enum:[{value:1},{value:2}],default:1},wavSampleRate:{type:"number",title:"\u8F6Cwav\u97F3\u9891\u91C7\u6837\u7387","x-decorator":"FormItem","x-decorator-props":{tooltip:"\u5F53\u5BF9\u63A5\u67D0\u4E9B\u97F3\u9891\u8F6C\u6362skill\u65F6\u5019\uFF0C\u9700\u8981\u7279\u5B9A\u7684\u53C2\u6570\uFF0C\u8FD9\u91CC\u53EF\u4EE5\u63D0\u524D\u5728\u8F6C\u6362\u65F6\u8BBE\u5B9A\uFF0C\u5982\u767E\u5EA6\u8BED\u97F3\u8F6C\u6587\u672C\u9700\u8981\u5355\u901A\u905316k\u6216\u80058k\u3002"},"x-component":"Select",enum:[8e3,12e3,16e3,24e3,32e3,44100,48e3],default:16e3}}}},eventNames:[f.CHAT_MESSAGE,f.LOGIN],desc:"\u98DE\u4E66\u5E94\u7528"};constructor(e,t){this._app=e,this._options=t,this._trackIdCache={},this._options.ignoreNoneUserMessage=this._options.ignoreNoneUserMessage??!0,this._options.replayTextMode=this._options.replayTextMode??"rich_text",this._options.richTextTitleTemplate=this._options.richTextTitleTemplate??"RE:{title}",this._options.contactsCacheTime=this._options.contactsCacheTime??24*60*60,this._options.thinkingTips=this._options.thinkingTips??"\u6B63\u5728\u601D\u8003\u4E2D...",this._options.domain=this._options.domain??"https://open.feishu.cn",this.event=new Rs}_me;_client;_wsClient;_connected;_departCache;_userCache;_trackIdCache;get params(){return a.params}get options(){return this._options}get actions(){return[]}event;_getResourceFile(e,t,o,s){let r=p(async()=>{let i=await this._client.im.messageResource.get({params:{type:o},path:{file_key:t,message_id:e}}),n=await Ho(i.getReadableStream());if(!s){let c=await js(n);s=fe()+"."+c.ext}return{data:n,type:"buffer",name:s}},"loader");return new b(r,"binary")}async _getRichTextContent(e,t){let o={title:t.title,content:[]};return t.content.forEach(s=>{s.forEach(r=>{switch(r.tag){case"text":o.content.push({type:"text",data:r.text});break;case"a":o.content.push({type:"text",data:r.text});break;case"code_block":o.content.push({type:"text",data:r.text+`(\u4EE3\u7801\u8BED\u8A00\uFF1A${r.language})`});break;case"emotion":{o.content.push({type:"text",data:r.emoji_type});break}case"img":{o.content.push({data:{file:this._getResourceFile(e,r.image_key,"image")},type:"image"});break}case"media":{let i=r;i.image_key?.length&&o.content.push({data:{file:this._getResourceFile(e,i.image_key,"file")},type:"image"});break}default:E.debug("\u65E0\u9700\u5904\u7406\u7684\u5BCC\u6587\u672Ctag\uFF1A"+r.tag);break}})}),o}async _processChatMessage(e,t,o){switch(e){case"text":{let s=t;o.type=l.TEXT;let r=s.text;o.atList?.length&&o.origin.mentions.forEach(i=>{r=r.replaceAll(i.key,"")}),o.content=r.trim();break}case"post":{o.type=l.RICH_TEXT,o.content=await this._getRichTextContent(o.messageId,t);break}case"image":{o.type=l.IMAGE;let s={file:this._getResourceFile(o.messageId,t.image_key,"image")};o.content=s;break}case"file":{o.type=l.FILE;let s=t,r={file:this._getResourceFile(o.messageId,s.file_key,"file",s.file_name),title:s.file_name};o.content=r;break}case"audio":{o.type=l.AUDIO;let s=t,r=fe()+".opus",i=this._getResourceFile(o.messageId,s.file_key,"file",r),c={file:await Re(i,"wav",m=>(this._options.wavChannel&&(E.trace("custom wav channel "+this._options.wavChannel),m.withAudioChannels(this._options.wavChannel)),this._options.wavSampleRate&&(E.trace("custom wav sample rate "+this._options.wavSampleRate),m.withAudioFrequency(this._options.wavSampleRate)),m))};o.content=c;break}case"media":{o.type=l.VIDEO;let s=t,r=this._getResourceFile(o.messageId,s.file_key,"file",fe()+s.file_name),i=s.image_key.length&&this._getResourceFile(o.messageId,s.image_key,"image"),n={file:r,previewImage:i};o.content=n;break}case"interactive":{let s=t,r={content:[],title:s.title};s.elements.forEach(i=>{i.forEach(n=>{n.elements.length?n.elements.forEach(c=>{c.tag==="text"?r.content.push({type:"text",data:c.text}):c.tag==="img"&&r.content.push({type:"image",data:{file:this._getResourceFile(o.messageId,c.image_key,"image")}})}):n.tag==="text"?r.content.push({type:"text",data:n.text}):n.tag==="img"&&r.content.push({type:"image",data:{file:this._getResourceFile(o.messageId,n.image_key,"image")}})})});break}case"hongbao":{o.type=l.TEXT,o.content="\u6211\u6536\u5230\u4E00\u4E2A\u7EA2\u5305";break}case"calendar":case"general_calendar":case"share_calendar_event":{o.type=l.TEXT;let s=t;o.content=JSON.stringify({content:"\u6211\u6536\u5230\u4E00\u4E2A\u65E5\u7A0B\u5206\u4EAB\u4FE1\u606F",data:s});break}case"share_chat":{let s=t,r=await this._client.im.chat.get({path:{chat_id:s.chat_id}});o.type=l.TEXT,o.content=JSON.stringify({title:"\u6211\u6536\u5230\u4E00\u4E2A\u7FA4\u7EC4\u5206\u4EAB",data:r.data});break}case"share_user":{let s=t,r=this._userCache.get(s.user_id);if(!r)E.warn("\u5F53\u524D\u5206\u4EAB\u6765\u7684\u7528\u6237\u4E0D\u5728\u7F13\u5B58\u4E2D\uFF0C\u4E0D\u5904\u7406\uFF01");else{o.type=l.CONTACT_CARD;let i={display:r.nickName??r.userId,smallImageUrl:r.avatarUrl,bigImageUrl:r.bigAvatarUrl,custom:r};o.content=i}break}case"system":{let s=t;o.type=l.SYSTEM;let r={data:s};o.content=r;break}case"location":{let s=t;o.type=l.POSITION;let r={placeName:s.name,placeDetail:s.name,lon:Number(s.longitude),lat:Number(s.latitude)};o.content=r;break}case"video_chat":{let s=t;o.type=l.PHONE;let r={title:s.topic,time:new Date(Number(s.start_time))};o.content=r;break}case"todo":{let s=t;o.type=l.TEXT,o.content=JSON.stringify({title:"\u6211\u6536\u5230\u4E00\u4E2A\u5F85\u529E\u6D88\u606F",data:s});break}case"vote":{let s=t;o.type=l.TEXT,o.content=JSON.stringify({title:"\u6211\u6536\u5230\u4E00\u4E2A\u6295\u7968\u6D88\u606F",data:s});break}default:E.info("\u6682\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e);return}return o}async _handleChatMessage(e){return this._wsClient.start({eventDispatcher:new Us({verificationToken:this._options.verificationToken,encryptKey:this._options.encryptKey,loggerLevel:e}).register({"im.message.receive_v1":p(async t=>{if(t.sender.sender_type!=="user"&&(E.debug("\u6536\u5230\u6765\u81EA\u975E\u7528\u6237\u7684\u4FE1\u606F\uFF01"),this._options.ignoreNoneUserMessage))return;let o=t.sender.sender_id.open_id,s=this._userCache.get(o);s||(E.warn("\u672A\u80FD\u83B7\u53D6\u5230\u5F53\u524D\u53D1\u9001\u6D88\u606F\u7528\u6237\u7684\u57FA\u672C\u4FE1\u606F\uFF01"),s={userId:o,userName:o,nickName:o});let r={time:new Date(Number(t.message.create_time)),senderId:t.sender.sender_id.open_id,fromId:t.message.chat_id,isGroupChat:t.message.chat_type==="group",isSender:!1,senderName:s.userName,senderInfo:s,toInfo:[this._me],origin:t.message,messageId:t.message.message_id,type:void 0,content:void 0};if(r.isGroupChat){let i=r;if(i.groupInfo={userId:t.message.chat_id,userName:t.message.chat_id,nickName:t.message.chat_id},t.message.mentions?.length){let n=t.message.mentions.map(c=>c.id.open_id);i.atList=n}}E.debug(t);try{this._processChatMessage(t.message.message_type,JSON.parse(t.message.content),r).then(async i=>{if(!i.content){E.debug("\u6682\u4E0D\u652F\u6301\u7684\u6D88\u606F");return}if(t.message.parent_id){let c=await this._client.im.message.get({path:{message_id:t.message.parent_id},params:{user_id_type:"open_id"}});if(c.data?.items?.[0].body?.content.length){let m=c.data.items[0],d={time:new Date(Number(m.create_time)),senderId:m.sender.id,fromId:t.message.chat_id,isGroupChat:t.message.chat_type==="group",isSender:!1,senderName:m.sender.id,senderInfo:{userId:m.sender.id,userName:m.sender.id,nickName:m.sender.id},origin:m,messageId:t.message.parent_id,type:void 0,content:void 0,toInfo:[this._me]};if(i.isGroupChat){let u=i;u.groupInfo={userId:t.message.chat_id,userName:t.message.chat_id,nickName:t.message.chat_id}}let h=JSON.parse(c.data.items[0].body?.content);await this._processChatMessage(c.data.items[0].msg_type,h,d),E.debug("ref message content "+c.data.items[0].body?.content),d.content?(i.type=l.REF,i.content={text:i.content,refMessage:d}):E.debug("\u6682\u4E0D\u652F\u6301\u7684\u5F15\u7528\u6D88\u606F\u5185\u5BB9")}}E.trace("begin send feishu message event");let n={id:fe(),type:f.CHAT_MESSAGE,message:i,source:this,me:this._me};E.trace("listener count "+this.event.listenerCount()),this.event.emit(n.type,n)})}catch(i){E.error(i.message)}return""},"im.message.receive_v1"),"im.chat.access_event.bot_p2p_chat_entered_v1":p(async()=>"","im.chat.access_event.bot_p2p_chat_entered_v1")})})}async _getDepartList(e){let t=await this._client.contact.department.listWithIterator({params:{user_id_type:"open_id",department_id_type:!this._options.contactDepartId||this._options.contactDepartId?.startsWith("od-")?"open_department_id":"department_id",parent_department_id:e,page_size:50,fetch_child:!0}}),o=[];for await(let s of t)for(let r of s.items){let i={userId:r.open_department_id,userName:r.department_id,nickName:r.name,origin:r,isGroup:!0};o.push(i),this._departCache.set(i.userId,i)}return o}async _getDepartUsers(e){let t=await this._client.contact.user.findByDepartmentWithIterator({params:{user_id_type:"open_id",department_id_type:!this._options.contactDepartId||this._options.contactDepartId?.startsWith("od-")?"open_department_id":"department_id",department_id:e,page_size:50}}),o=[];for await(let s of t)for(let r of s.items){let i={...r},n={userId:i.open_id,userName:i.user_id?.length>0?i.user_id:i.open_id,nickName:i.name??i.open_id,avatarUrl:i.avatar?.avatar_240,bigAvatarUrl:i.avatar?.avatar_origin,signature:i.nickname,origin:i};o.push(n),delete i.department_path,this._userCache.set(n.userId,n)}return o}async _uploadImage(e){return(await this._client.im.image.create({data:{image_type:"message",image:await e.asReadStream()}})).image_key}async _uploadFile(e,t,o,s){let r={data:{file_type:t,file_name:o??e.name,file:await e.asReadStream()}};return t==="opus"&&s&&(r.data.duration=s),(await this._client.im.file.create(r)).file_key}async _getSimpleLinkContent(e,t,o,s){let r,i;return s?(r="interactive",i=JSON.stringify(ct.article).replace("{title}",e).replace("{desc}",o??"").replace("{image_key}",await this._uploadImage(s)).replaceAll("{link}",`[\u70B9\u51FB\u67E5\u770B\u8BE6\u60C5](${t})`)):o?.length?(r="post",i={zh_cn:{title:e??"\u94FE\u63A5",content:[[{tag:"md",text:o},{tag:"a",text:"\u70B9\u51FB\u67E5\u770B\u8BE6\u60C5",href:t}]]}}):(r="text",i={text:`[${e??"\u70B9\u51FB\u6B64\u94FE\u63A5\u67E5\u770B\u8BE6\u60C5"}](${t})`}),{msgType:r,content:i}}async _getSendMessageContent(e,t){let o,s,r=e.atList??[],i=this._options.replayTextMode;switch(e.type){case l.TEXT:{let n=e.content;if(!n?.trim().length){E.debug("\u7A7A\u5B57\u7B26\u4E32\uFF0C\u4E0D\u53D1\u9001");return}if(i==="stream"&&t?.origin.trackId?.length){o="interactive";let m=t.origin.trackId;n=(this._trackIdCache[m]??"")+n;let d=Be(n,!0);for(let g of d){let w=b.fromPath(g,"binary",fe()+".png");await w.asLocalPath();let x=await this._uploadImage(w);n=n.replace(g,x)}this._trackIdCache[m]=n;let h=(typeof t?.content=="string"?t.content.length>10?t.content.slice(0,10)+"...":t.content:e.toInfo[0].nickName)??"";r.length&&r.forEach(g=>{n=n+`<at id=${g}></at>`});let u={title:h,content:n};this._options.cardId?.length?s={type:"template",data:{template_id:this._options.cardId,template_variable:u}}:s=JSON.stringify(ct.stream).replace("{title}",u.title).replace("{content}",u.content);break}let c=[];if(i==="rich_text"){o="post";let m=jo(n);for(let d of m){let h=Be(d,!0)?.[0];if(!h?.length)continue;let u=n.split(d),g={tag:"md",text:u[0]};c.push(g);let w=b.fromPath(h,"binary",fe()+".png");await w.asLocalPath();let v={tag:"img",image_key:await this._uploadImage(w)};c.push(v),u.length>1?n=u[1]:n=""}if(n?.trim().length){let d={tag:"md",text:n};c.push(d)}if(e.atList?.length&&e.atList.forEach(d=>{c.push({tag:"at",user_id:d})}),s={zh_cn:{title:"",content:[c]}},this._options.richTextTitle&&this._options.richTextTitleTemplate?.length){let d=typeof t?.content=="string"?t.content.length>10?t.content.slice(0,10)+"...":t.content:e.toInfo[0].nickName;s.zh_cn.title=this._options.richTextTitleTemplate.replaceAll("{title}",d)}}else{o="text";let m=/!\[([^]*?)\]\((.*?)\)/g;n=n.replace(m,"[$1]($2)"),r.length&&r.forEach(d=>{n=n+`<at user_id="${d}"></at>`}),s={text:n}}break}case l.EMOTION:case l.IMAGE:{o="image",s={image_key:await this._uploadImage(e.content.file)};break}case l.AUDIO:{o="audio";let n=e.content.file,c=$s((await n.asBuffer()).buffer),m=parseInt(c.chunkInfo[1].dataLength/c.fmt.bytesPerSec*1e3),d=await Re(n,"opus");s={file_key:await this._uploadFile(d,"opus",void 0,m)};break}case l.VIDEO:{o="media";let n=e.content;s={file_key:await this._uploadFile(n.file,"mp4",n.title),image_key:n.previewImage?await this._uploadImage(n.previewImage):void 0};break}case l.FILE:{o="file";let n=e.content,c=n.title??n.file.name,m=c.slice(c.lastIndexOf(".")+1);["ppt","xls","doc","pdf"].indexOf(m)<0&&(m="stream"),s={file_key:await this._uploadFile(n.file,m,c)};break}case l.ARTICLE:{let n=e.content,c=await this._getSimpleLinkContent(n.title,n.url,n.desc,n.coverFile);o=c.msgType,s=c.content;break}case l.POSITION:{let n=e.content;o="text",s={text:`\u5730\u540D:${n.placeName}
16
16
  \u8BE6\u60C5:${n.placeDetail??""}
17
17
  \u7ECF\u5EA6:${n.lon.toFixed(4)}
18
- \u7EAC\u5EA6:${n.lat.toFixed(4)}`};break}case l.MUSIC:{let n=e.content,c=n.url?.length?n.url:await n.file.asUrl(),m=await this._getSimpleLinkContent(n.title,c,n.desc,n.coverUrl&&b.fromPath(n.coverUrl));o=m.msgType,s=m.content;break}case l.RICH_TEXT:{let n=e.content,c=[];for(let m of n.content)if(m.type==="text")c.push({tag:"text",text:m.data});else if(m.type==="image"){let d=m.data,h=await this._uploadImage(d.file);c.push({tag:"img",image_key:h})}else if(m.type==="video"){let d=m.data,u={tag:"media",file_key:await this._uploadFile(d.file,"mp4",d.title??d.file.name)};d.previewImage&&(u.image_key=await this._uploadImage(d.previewImage)),c.push(u)}else if(m.type==="at"){let d=m.data;c.push({tag:"at",user_id:d})}else E.warn("\u6682\u4E0D\u652F\u6301\u7684\u5BCC\u6587\u672C\u6807\u7B7E\uFF1A"+m.type);r.length&&r.forEach(m=>{c.push({tag:"at",user_id:m})}),o="post",s={zh_cn:{title:n.title??"",content:[c]}};break}case l.CONTACT_CARD:{let n=e.content;o="interactive";let c=await this._uploadImage(b.fromPath(n.bigImageUrl??n.smallImageUrl));s=JSON.stringify(pt.textImage).replace("{content}",n.display).replace("{image_key}",c);break}case l.CARD:{let n=e.content;if(o="interactive",n.type==="templateId")s={type:"template",data:{template_id:n.template,template_variable:n.content}};else if(n.type==="template"){let c=n.template;for(let m in n.content)c=c.replaceAll(`{${m}}`,n.content[m]);s=c}else n.type==="content"&&(s=n.content);break}default:break}return s&&typeof s!="string"&&(s=JSON.stringify(s)),{msg_type:o,content:s}}async _sendWebhookMessage(e){if(!Z(e.toInfo[0].userId??e.toInfo[0].userName).startsWith("http")){E.warn("\u7FA4\u673A\u5668\u4EBA\u7684webhook\u4FE1\u606F\u914D\u7F6E\u6709\u8BEF\uFF01");return}let o,s;switch(e.type){case l.AUDIO:case l.TEXT:{let c=typeof e.content=="string"?e.content:e.content.text;if(!c?.trim().length){E.debug("\u7A7A\u5B57\u7B26\u4E32\u6216\u8005\u8BED\u97F3\u672A\u8F6C\u6587\u5B57\uFF0C\u4E0D\u53D1\u9001");return}o="text";let m=/!\[([^]*?)\]\((.*?)\)/g;c=c.replace(m,"[$1]($2)"),s={text:c};break}case l.ARTICLE:{let c=e.content,m=await this._getSimpleLinkContent(c.title,c.url,c.desc);o=m.msgType,s=m.content;break}case l.POSITION:{let c=e.content;o="text",s={text:`\u5730\u540D:${c.placeName}
18
+ \u7EAC\u5EA6:${n.lat.toFixed(4)}`};break}case l.MUSIC:{let n=e.content,c=n.url?.length?n.url:await n.file.asUrl(),m=await this._getSimpleLinkContent(n.title,c,n.desc,n.coverUrl&&b.fromPath(n.coverUrl));o=m.msgType,s=m.content;break}case l.RICH_TEXT:{let n=e.content,c=[];for(let m of n.content)if(m.type==="text")c.push({tag:"text",text:m.data});else if(m.type==="image"){let d=m.data,h=await this._uploadImage(d.file);c.push({tag:"img",image_key:h})}else if(m.type==="video"){let d=m.data,u={tag:"media",file_key:await this._uploadFile(d.file,"mp4",d.title??d.file.name)};d.previewImage&&(u.image_key=await this._uploadImage(d.previewImage)),c.push(u)}else if(m.type==="at"){let d=m.data;c.push({tag:"at",user_id:d})}else E.warn("\u6682\u4E0D\u652F\u6301\u7684\u5BCC\u6587\u672C\u6807\u7B7E\uFF1A"+m.type);r.length&&r.forEach(m=>{c.push({tag:"at",user_id:m})}),o="post",s={zh_cn:{title:n.title??"",content:[c]}};break}case l.CONTACT_CARD:{let n=e.content;o="interactive";let c=await this._uploadImage(b.fromPath(n.bigImageUrl??n.smallImageUrl));s=JSON.stringify(ct.textImage).replace("{content}",n.display).replace("{image_key}",c);break}case l.CARD:{let n=e.content;if(o="interactive",n.type==="templateId")s={type:"template",data:{template_id:n.template,template_variable:n.content}};else if(n.type==="template"){let c=n.template;for(let m in n.content)c=c.replaceAll(`{${m}}`,n.content[m]);s=c}else n.type==="content"&&(s=n.content);break}default:break}return s&&typeof s!="string"&&(s=JSON.stringify(s)),{msg_type:o,content:s}}async _sendWebhookMessage(e){if(!Z(e.toInfo[0].userId??e.toInfo[0].userName).startsWith("http")){E.warn("\u7FA4\u673A\u5668\u4EBA\u7684webhook\u4FE1\u606F\u914D\u7F6E\u6709\u8BEF\uFF01");return}let o,s;switch(e.type){case l.AUDIO:case l.TEXT:{let c=typeof e.content=="string"?e.content:e.content.text;if(!c?.trim().length){E.debug("\u7A7A\u5B57\u7B26\u4E32\u6216\u8005\u8BED\u97F3\u672A\u8F6C\u6587\u5B57\uFF0C\u4E0D\u53D1\u9001");return}o="text";let m=/!\[([^]*?)\]\((.*?)\)/g;c=c.replace(m,"[$1]($2)"),s={text:c};break}case l.ARTICLE:{let c=e.content,m=await this._getSimpleLinkContent(c.title,c.url,c.desc);o=m.msgType,s=m.content;break}case l.POSITION:{let c=e.content;o="text",s={text:`\u5730\u540D:${c.placeName}
19
19
  \u8BE6\u60C5:${c.placeDetail??""}
20
20
  \u7ECF\u5EA6:${c.lon.toFixed(4)}
21
- \u7EAC\u5EA6:${c.lat.toFixed(4)}`};break}case l.MUSIC:{let c=e.content,m=c.url?.length?c.url:await c.file.asUrl(),d=await this._getSimpleLinkContent(c.title,m,c.desc);o=d.msgType,s=d.content;break}case l.RICH_TEXT:{let c=e.content,m=[];for(let d of c.content)if(d.type==="text")m.push({tag:"text",text:d.data});else if(d.type==="image")E.warn("webhook\u673A\u5668\u4EBA\u4E0D\u652F\u6301\u56FE\u7247\u4E0A\u4F20\uFF01");else if(d.type==="video")E.warn("webhook\u673A\u5668\u4EBA\u4E0D\u652F\u6301\u89C6\u9891\u4E0A\u4F20\uFF01");else if(d.type==="at"){let h=d.data;m.push({tag:"at",user_id:h})}else E.info("webhook\u4E0D\u652F\u6301\u7684\u6807\u7B7E\u7C7B\u578B\uFF1A"+d.type);e.atList?.length&&e.atList.forEach(d=>{m.push({tag:"at",user_id:d})}),o="post",s={post:{zh_cn:{title:c.title??"",content:[m]}}};break}case l.CARD:{let c=e.content;if(o="interactive",c.type==="content")s=c.content;else if(c.type==="template"){let m=c.template;for(let d in c.content)m=m.replaceAll(`{${d}}`,c.content[d]);s=m}else{E.warn("\u81EA\u5B9A\u4E49\u673A\u5668\u4EBA\u4E0D\u652F\u6301\u6A21\u677F\u5361\u7247\uFF0C\u8BF7\u4F7F\u7528\u5B8C\u6574\u7684\u5361\u7247\u5B9A\u4E49\u53D1\u9001\uFF01"),E.warn("https://open.feishu.cn/document/client-docs/bot-v3/add-custom-bot#4996824a");return}break}default:break}let r={msg_type:o};o==="interactive"?r.card=s:r.content=s;let i=e.toInfo[0].userId??e.toInfo[0].userName;if(!i.startsWith("http")){E.warn("\u9519\u8BEF\u7684webhook\u5730\u5740\uFF1A"+i);return}let n=await(await fetch(i,{method:"post",headers:{"content-type":"application/json"},body:JSON.stringify(r)})).json();E.debug(n)}async me(e){if(this._me&&!e)return this._me;if(!this._options.appId||!this._options.appSecret)this._me={userId:"\u533F\u540D\u673A\u5668\u4EBA",userName:"\u533F\u540D\u673A\u5668\u4EBA",nickName:"\u533F\u540D\u673A\u5668\u4EBA"};else{let t=await this._client.request({method:"get",url:"/open-apis/bot/v3/info"});t.code!==0?(E.error("\u8BF7\u6C42\u5E94\u7528\u673A\u5668\u4EBA\u4FE1\u606F\u5931\u8D25\uFF01"),this._me={userId:this._options.appId,userName:this._options.appId,nickName:"\u533F\u540D\u673A\u5668\u4EBA"}):this._me={userId:t.bot.open_id,userName:t.bot.open_id,nickName:t.bot.app_name,avatarUrl:t.bot.avatar_url,bigAvatarUrl:t.bot.avatar_url}}return this._me}hasLogin(){return!!(this._connected||!this._options.appId||!this._options.appSecret)}async login(){if(this._wsClient&&this._connected)return;if(this._options.appId&&this._options.appSecret){let o={fatal:0,error:1,warn:2,info:3,debug:4,trace:5},s=process.env.LOG_LEVEL,r=o[s]??lo.warn;r===lo.trace&&(r=lo.debug);let i={appId:this._options.appId,appSecret:this._options.appSecret,loggerLevel:r,domain:this._options.domain,appType:Bs.SelfBuild};this._client=new Ls(i),this._wsClient=new Ds(i),await this._handleChatMessage(r),this._connected=!0}let e=await this.me();await this.getContacts("all");let t={id:ge(),source:this,me:e,user:e,type:f.LOGIN};this.event.emit(t.type,t)}async beforeSend(e){if(this._options.replayTextMode==="stream"&&(e.type===l.TEXT||e.type===l.RICH_TEXT||e.type===l.AUDIO||e.type===l.REF)){let t=e.fromId,o="chat_id",r={title:(typeof e?.content=="string"?e.content.length>10?e.content.slice(0,10)+"...":e.content:e.senderInfo?.nickName)??"",content:this._options.thinkingTips},i;this._options.cardId?.length?i=JSON.stringify({type:"template",data:{template_id:this._options.cardId,template_variable:r}}):i=JSON.stringify(pt.stream).replace("{title}",r.title).replace("{content}",r.content);let n=await this._client.im.message.create({params:{receive_id_type:o},data:{receive_id:t,content:i,msg_type:"interactive"}});n.data?.message_id?.length&&(e.origin.trackId=n.data.message_id)}}async afterSend(e){e.origin?.trackId?.length&&delete this._trackIdCache[e.origin?.trackId]}async sendMessage(e,t){this.event.emit(f.RESPONSE_MESSAGE,{id:ge(),type:f.CHAT_MESSAGE,message:e,fromMessage:t,source:this,me:this._me});let o=e.toInfo[0].userId,s=e.isGroupChat?"chat_id":"open_id",r=e.toInfo[0];if((r.userId??r.userName).startsWith("http")||r.userId.startsWith("__"))return this._sendWebhookMessage(e);{let i=await this._getSendMessageContent(e,t);i.content?.length?i.msg_type==="interactive"&&t?.origin?.trackId?.length&&this._options.replayTextMode==="stream"?await this._client.im.message.patch({data:{content:i.content.replaceAll(`
22
- `,"<br>")},path:{message_id:t.origin.trackId}}):await this._client.im.message.create({params:{receive_id_type:s},data:{receive_id:o,content:i.content,msg_type:i.msg_type}}):E.warn("\u4E0D\u652F\u6301\u53D1\u9001\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e.type)}}async getContacts(e,t=!1){if(e==="group")return E.warn("\u98DE\u4E66\u6682\u4E0D\u652F\u6301\u83B7\u53D6\u4F1A\u8BDD\u7FA4\u7EC4\uFF01"),[];if(!this._userCache||t){this._departCache=new Map,this._userCache=new Map;let s=await this._getDepartList(this._options.contactDepartId??"0"),r=[];for(let i of s)r.push(this._getDepartUsers(i.userId));await Promise.allSettled(r),E.trace("\u8054\u7CFB\u4EBA\u4FE1\u606F\u83B7\u53D6\u5B8C\u6BD5\uFF0C\u5171\u6709"+this._userCache.size+"\u4E2A\u7528\u6237\u3002"),setTimeout(()=>{this.getContacts("all",!0)},this._options.contactsCacheTime*1e3)}let o=[];return this._userCache.forEach(s=>o.push(s)),o}async getContactDetail(e){return e}async dispose(){this._wsClient&&(this._wsClient.wsConfig.wsInstance.close(),delete this._wsClient,await Be(500))}};import qs from"emittery";import lt from"tweetnacl";import{v4 as Qt}from"uuid";import{decode as Gs,encode as Hs,getWavFileInfo as Ks,isSilk as zs}from"silk-wasm";import Ws from"remove-markdown";var mt=class a{static{p(this,"QQSource")}_app;_options;static params={name:"qq",optionsSchema:{type:"formily",formily:{type:"object",properties:{...$,appId:{type:"string",title:"App ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 App ID"},"x-decorator-props":{tooltip:"QQ\u5F00\u653E\u5E73\u53F0\uFF0C\u673A\u5668\u4EBA\u5E94\u7528\u540E\u53F0-\u5F00\u53D1\u8BBE\u7F6E \u4E2D\u53EF\u4EE5\u770B\u5230"},required:!0},appSecret:{type:"string",title:"App Secret","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 App Secret"},"x-decorator-props":{tooltip:"QQ\u5F00\u653E\u5E73\u53F0\uFF0C\u673A\u5668\u4EBA\u5E94\u7528\u540E\u53F0-\u5F00\u53D1\u8BBE\u7F6E \u4E2D\u53EF\u4EE5\u770B\u5230"},required:!0},apiBase:{type:"string",title:"API \u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 API \u5730\u5740\uFF0C\u6CE8\u610F\u6C99\u7BB1\u73AF\u5883\u548C\u6B63\u5F0F\u73AF\u5883\u6709\u533A\u522B\uFF0C\u9ED8\u8BA4\u6839\u636E\u73AF\u5883\u53D8\u91CF\u81EA\u52A8\u8BBE\u7F6E\u3002\u5982\u679C\u662F\u6C99\u7BB1\u6A21\u5F0F\u7684\u673A\u5668\u4EBA\uFF0C\u5EFA\u8BAE\u624B\u52A8\u6307\u5B9A\u4E3Ahttps://sandbox.api.sgroup.qq.com\u3002"},"x-decorator-props":{tooltip:"\u5F53\u73AF\u5883\u53D8\u91CF\u7684NODE_ENV\u662Fdevelopment\u65F6\u5019\uFF0C\u4F7F\u7528\u6C99\u7BB1\u5730\u5740\u3002\u5982\u679C\u662Fprod\u6A21\u5F0F\u76F4\u63A5\u8FD0\u884C\u7684\u6846\u67B6\uFF0C\u5728\u6C99\u7BB1\u8FD0\u884C\u65F6\uFF0C\u9700\u8981\u8FD9\u91CC\u624B\u52A8\u914D\u7F6E\u5730\u5740\u4E3A\uFF1Ahttps://sandbox.api.sgroup.qq.com \uFF0C\u6B63\u5F0F\u73AF\u5883\u5730\u5740\u4E3A\uFF1Ahttps://api.sgroup.qq.com"}},tokenBase:{type:"string",title:"Token API \u57DF\u540D","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u9ED8\u8BA4\u4E3A https://bots.qq.com"},"x-decorator-props":{tooltip:"\u7528\u4E8E\u83B7\u53D6 token \u7684 API \u57DF\u540D\uFF0C\u9ED8\u8BA4\u662F https://bots.qq.com"},default:"https://bots.qq.com"},audioEncodeRate:{type:"number",title:"\u97F3\u9891\u7F16\u7801\u7801\u7387","x-decorator":"FormItem","x-component":"Select",enum:[8e3,12e3,16e3,24e3,32e3,44100,48e3],"x-decorator-props":{tooltip:"\u97F3\u9891\u7F16\u7801\u7684\u7801\u7387\uFF0C\u5982\u679C\u4F7F\u7528\u9ED8\u8BA4\u503C\u51FA\u73B0\u8BED\u901F\u8FC7\u6162\u6216\u8005\u8FC7\u5FEB\uFF0C\u53EF\u4EE5\u5C1D\u8BD5\u8C03\u6574\u3002"},default:32e3},audioDecodeRate:{type:"number",title:"\u97F3\u9891\u89E3\u7801\u7801\u7387","x-decorator":"FormItem","x-component":"Select",enum:[8e3,12e3,16e3,24e3,32e3,44100,48e3],"x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u97F3\u9891\u89E3\u7801\u7801\u7387"},"x-decorator-props":{tooltip:"\u97F3\u9891\u89E3\u7801\u7684\u7801\u7387\uFF0C\u5982\u679C\u4F7F\u7528\u9ED8\u8BA4\u503C\u51FA\u73B0\u8BED\u901F\u8FC7\u6162\u6216\u8005\u8FC7\u5FEB\uFF0C\u53EF\u4EE5\u5C1D\u8BD5\u8C03\u6574\u3002"},default:32e3},canUseMarkdown:{type:"boolean",title:"\u542F\u7528 Markdown","x-decorator":"FormItem","x-component":"Switch","x-decorator-props":{tooltip:"\u662F\u5426\u83B7\u9080\u4F7F\u7528 Markdown \u529F\u80FD\uFF0C\u9ED8\u8BA4\u4E3A false\uFF0CMarkdown\u76EE\u524D\u53EA\u6709\u5185\u6D4B\u7528\u6237\u80FD\u53D1\u9001\u3002"}},messageIdCacheHourPeriod:{type:"number",title:"\u6D88\u606F ID \u7F13\u5B58\u6709\u6548\u671F (\u5C0F\u65F6)","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:1,placeholder:"\u8BF7\u8F93\u5165\u7F13\u5B58\u6709\u6548\u671F"},"x-decorator-props":{tooltip:"\u6D88\u606F ID \u7F13\u5B58\u7684\u6709\u6548\u671F\uFF0C\u9ED8\u8BA4\u662F 20 \u5C0F\u65F6\uFF0C\u5355\u4F4D\u662F\u5C0F\u65F6"},default:20}}}},eventNames:[f.CHAT_MESSAGE,f.LOGIN],fieldInAtList:"userId",desc:"QQ\u7FA4\u673A\u5668\u4EBA"};constructor(e,t){this._app=e,this._options=t,this._logger=y("qq-source"),this._msgIdCache=new Set,t.apiBase||(t.apiBase=process.env.NODE_ENV==="development"?"https://sandbox.api.sgroup.qq.com":"https://api.sgroup.qq.com");let o=this._options.appSecret;for(;o.length<lt.sign.seedLength;)o=o.repeat(2);o=o.slice(0,lt.sign.seedLength);let s=Buffer.from(o,"utf-8");this._signKeyPair=lt.sign.keyPair.fromSeed(s),this._options.audioEncodeRate=this._options.audioEncodeRate??32e3,this._options.audioDecodeRate=this._options.audioDecodeRate??32e3,this._options.tokenBase=this._options.tokenBase??"https://bots.qq.com",this._options.messageIdCacheHourPeriod=this._options.messageIdCacheHourPeriod??20,this.event=new qs,setTimeout(()=>{this._msgIdCache.clear()},this._options.messageIdCacheHourPeriod*60*60*1e3)}_logger;_accessToken;_signKeyPair;_msgIdCache;event;get params(){return a.params}get options(){return this._options}get actions(){return[{type:"api",actionName:"receive",action:{type:"normal",handler:p(e=>this._onMessage(e),"handler")}}]}_checkSignature(e){let t=e.headers["x-signature-timestamp"]??e.headers["X-Signature-Timestamp"];if(!t)return!1;let o=e.headers["x-signature-ed25519"]??e.headers["X-Signature-Ed25519"];if(!o)return!1;let s=Buffer.from(t,"utf-8"),r=JSON.stringify(e.body),i=Buffer.from(r,"utf-8"),n=Buffer.concat([s,i]),c=Buffer.from(lt.sign.detached(n,this._signKeyPair.secretKey)).toString("hex");return o===c?!0:r.indexOf("multimedia.nt.qq.com.cn")>0}_verifyCallback(e,t){try{let o=t+e,s=Buffer.from(o,"utf-8"),r=lt.sign.detached(s,this._signKeyPair.secretKey);return{plain_token:e,signature:Buffer.from(r).toString("hex")}}catch(o){this._logger.error(o)}}async _processChatMessage(e,t){let o=t==="GROUP_AT_MESSAGE_CREATE",s=o?e.author.member_openid:e.author.user_openid,r={time:new Date(e.timestamp),senderId:s,fromId:o?e.group_openid:e.author.user_openid,isGroupChat:o,isSender:!1,senderName:s,senderInfo:{userId:s,userName:s,nickName:s},toInfo:[this._options.me],origin:e,messageId:e.id,type:void 0,content:void 0};if(r.isGroupChat){let i=r;i.groupInfo={userId:e.group_openid,userName:e.group_openid,nickName:e.group_openid},i.atList=[this._options.me.userId]}if(e.attachments?.length)if(e.content?.trim().length||e.attachments.length>1){let i=e.content?.trim().length?e.content?.trim():"\u8BF7\u5206\u6790\u6B64\u5185\u5BB9";r.type=l.RICH_TEXT;let n={content:[{type:"text",data:i}]};for(let c of e.attachments){let m,d;c.content_type.startsWith("image")?(m="image",d={file:b.fromPath(c.url,"binary",c.filename)}):c.content_type!=="voice"?(m="file",d={file:b.fromPath(c.url,"binary",c.filename),title:c.filename,sizeInBytes:c.size}):this._logger.info("\u6682\u4E0D\u652F\u6301voice\u7C7B\u578B\u7684richtext"),n.content.push({type:m,data:d})}}else{let i=e.attachments[0];if(i.content_type.startsWith("image"))r.type=l.IMAGE,r.content={file:b.fromPath(i.url,"binary",i.filename)};else if(i.content_type==="voice"){r.type=l.AUDIO;let n=b.fromPath(i.url,"binary",i.filename),c=await n.asBuffer();if(zs(c)){let m=await Gs(c,this._options.audioDecodeRate),d=Te(m.data.buffer,this._options.audioEncodeRate,16,1),h=b.fromBuffer(Buffer.from(d),n.name.replace(".silk","")+".wav");r.content={file:h}}else{this._logger.warn("\u5F53\u524D\u97F3\u9891\u6587\u4EF6\u4E0D\u662Fsilk\u683C\u5F0F\uFF0C\u65E0\u6CD5\u5904\u7406");return}}else r.type=l.FILE,r.content={file:b.fromPath(i.url,"binary",i.filename),title:i.filename,sizeInBytes:i.size}}else if(e.content?.trim().length)r.type=l.TEXT,r.content=e.content;else{this._logger.info("\u6536\u5230\u7A7A\u767D\u6D88\u606F");return}if(r.content){let i={id:Qt(),type:f.CHAT_MESSAGE,message:r,source:this,me:this._options.me};this.event.emit(i.type,i)}else this._logger.warn("\u4E0D\u80FD\u8BC6\u522B\u7684\u6D88\u606F"),this._logger.warn(e)}async _onMessage(e){let t=e.body;if(t.op===13){this._logger.debug("receive verify callback request"),this._logger.debug(t);let o=this._verifyCallback(t.d.plain_token,t.d.event_ts);return this._logger.debug(o),o}else if(t.op===0){if(!this._checkSignature(e))return this._logger.warn("\u68C0\u6D4B\u5230\u975E\u6CD5\u8BF7\u6C42\uFF01"),this._logger.debug(e.body),"error";if(this._logger.debug("\u7B7E\u540D\u9A8C\u8BC1\u901A\u8FC7"),this._msgIdCache.has(t.d.id)){this._logger.info("\u91CD\u590D\u7684\u6D88\u606FID");return}return this._msgIdCache.add(t.d.id),t.t==="GROUP_AT_MESSAGE_CREATE"||t.t==="C2C_MESSAGE_CREATE"?this._processChatMessage(t.d,t.t):(this._logger.debug("\u6682\u4E0D\u652F\u6301\u7684\u6D88\u606F\u4E8B\u4EF6\u7C7B\u578B"),this._logger.debug(t)),{op:12}}else this._logger.debug("\u6682\u4E0D\u652F\u6301\u7684op\u7C7B\u578B"),this._logger.debug(e.body);return{op:12}}async _initToken(){try{let t=await(await fetch(`${this._options.tokenBase}/app/getAppAccessToken`,{method:"post",headers:{"content-type":"application/json"},body:JSON.stringify({appId:this._options.appId,clientSecret:this._options.appSecret})})).json();if(t.access_token?.length){this._accessToken=t.access_token;let o=Number(t.expires_in)/1.1;setTimeout(()=>{this._initToken()},o*1e3),this._logger.trace("\u6210\u529F\u83B7\u53D6QQ\u673A\u5668\u4EBAtoken\uFF1A"+this._accessToken)}else this._logger.warn("\u83B7\u53D6QQ\u673A\u5668\u4EBAtoken\u5931\u8D25\uFF01")}catch(e){this._logger.error(e)}}async _uploadFile(e,t,o){let s,r=e.name.toLowerCase();if(r.endsWith("png")||r.endsWith("jpg"))s=1;else if(r.endsWith("mp4"))s=2;else if(r.endsWith("wav")){let m=await e.asBuffer(),d=Ks(m);await e.asLocalPath();let h=await Hs(m,d.fmt.sampleRate);e=b.fromBuffer(Buffer.from(h.data),Qt()+".silk"),s=3}else{this._logger.warn("\u4E0D\u652F\u6301\u4E0A\u4F20\u5230QQ\u673A\u5668\u4EBA\u7684\u6587\u4EF6\uFF1A"+e.name);return}let i=await e.asUrl(),n=o?`${this._options.apiBase}/v2/groups/${t}/files`:`${this._options.apiBase}/v2/users/${t}/files`;return await(await fetch(n,{method:"post",headers:{"content-type":"application/json",authorization:`QQBot ${this._accessToken}`},body:JSON.stringify({file_type:s,url:i,srv_send_msg:!1})})).json()}_getArkContent(e,t,o,s,r,i){let n={template_id:void 0,kv:void 0};return s?.length?(n.template_id=37,n.kv=[{key:"#PROMPT#",value:e?.slice(0,8)??"\u901A\u77E5"},{key:"#METATITLE#",value:e??" "},{key:"#METASUBTITLE#",value:t??" "},{key:"#METACOVER#",value:s},{key:"#METAURL#",vale:o??""}]):r?.length?(n.template_id=24,n.kv=[{key:"#DESC#",value:t??" "},{key:"#PROMPT#",value:e?.slice(0,8)??"\u901A\u77E5"},{key:"#TITLE#",value:e??" "},{key:"#METADESC#",value:t??" "},{key:"#IMG#",value:r},{key:"#LINK#",value:o??""},{key:"#SUBTITLE#",value:i??" "}]):(n.template_id=23,n.kv=[{key:"#DESC#",value:t??" "},{key:"#PROMPT#",value:e?.slice(0,8)??" "},{key:"#LIST#",obj:[{obj_kv:{key:"desc",value:e}}]}]),n}hasLogin(){return this._accessToken!==void 0}async me(){return this._options.me}async login(){await this._initToken();let e={id:Qt(),source:this,me:this._options.me,user:this._options.me,type:f.LOGIN};this._accessToken||this.event.emit(e.type,e)}async sendMessage(e,t){this.event.emit(f.RESPONSE_MESSAGE,{id:Qt(),type:f.CHAT_MESSAGE,message:e,fromMessage:t,source:this,me:this._options.me}),t.origin=t.origin??{},t.origin.seq=t.origin.seq??0,t.origin.seq++;let o={msg_id:t.messageId,msg_seq:t.origin.seq},s=e.toInfo[0].userId;switch(e.type){case l.TEXT:{this._options.canUseMarkdown?(o.markdown={content:e.content},o.msg_type=2):(o.content=e.content,o.msg_type=0);break}case l.EMOTION:case l.IMAGE:case l.VIDEO:case l.AUDIO:{o.msg_type=7,o.content=" ",o.media=await this._uploadFile(e.content.file,s,e.isGroupChat);break}case l.FILE:{let r=e.content,i=r.title??r.file.name,n=await r.file.asUrl();this._options.canUseMarkdown?(o.markdown={content:`### \u6536\u5230\u6587\u4EF6
21
+ \u7EAC\u5EA6:${c.lat.toFixed(4)}`};break}case l.MUSIC:{let c=e.content,m=c.url?.length?c.url:await c.file.asUrl(),d=await this._getSimpleLinkContent(c.title,m,c.desc);o=d.msgType,s=d.content;break}case l.RICH_TEXT:{let c=e.content,m=[];for(let d of c.content)if(d.type==="text")m.push({tag:"text",text:d.data});else if(d.type==="image")E.warn("webhook\u673A\u5668\u4EBA\u4E0D\u652F\u6301\u56FE\u7247\u4E0A\u4F20\uFF01");else if(d.type==="video")E.warn("webhook\u673A\u5668\u4EBA\u4E0D\u652F\u6301\u89C6\u9891\u4E0A\u4F20\uFF01");else if(d.type==="at"){let h=d.data;m.push({tag:"at",user_id:h})}else E.info("webhook\u4E0D\u652F\u6301\u7684\u6807\u7B7E\u7C7B\u578B\uFF1A"+d.type);e.atList?.length&&e.atList.forEach(d=>{m.push({tag:"at",user_id:d})}),o="post",s={post:{zh_cn:{title:c.title??"",content:[m]}}};break}case l.CARD:{let c=e.content;if(o="interactive",c.type==="content")s=c.content;else if(c.type==="template"){let m=c.template;for(let d in c.content)m=m.replaceAll(`{${d}}`,c.content[d]);s=m}else{E.warn("\u81EA\u5B9A\u4E49\u673A\u5668\u4EBA\u4E0D\u652F\u6301\u6A21\u677F\u5361\u7247\uFF0C\u8BF7\u4F7F\u7528\u5B8C\u6574\u7684\u5361\u7247\u5B9A\u4E49\u53D1\u9001\uFF01"),E.warn("https://open.feishu.cn/document/client-docs/bot-v3/add-custom-bot#4996824a");return}break}default:break}let r={msg_type:o};o==="interactive"?r.card=s:r.content=s;let i=e.toInfo[0].userId??e.toInfo[0].userName;if(!i.startsWith("http")){E.warn("\u9519\u8BEF\u7684webhook\u5730\u5740\uFF1A"+i);return}let n=await(await fetch(i,{method:"post",headers:{"content-type":"application/json"},body:JSON.stringify(r)})).json();E.debug(n)}async me(e){if(this._me&&!e)return this._me;if(!this._options.appId||!this._options.appSecret)this._me={userId:"\u533F\u540D\u673A\u5668\u4EBA",userName:"\u533F\u540D\u673A\u5668\u4EBA",nickName:"\u533F\u540D\u673A\u5668\u4EBA"};else{let t=await this._client.request({method:"get",url:"/open-apis/bot/v3/info"});t.code!==0?(E.error("\u8BF7\u6C42\u5E94\u7528\u673A\u5668\u4EBA\u4FE1\u606F\u5931\u8D25\uFF01"),this._me={userId:this._options.appId,userName:this._options.appId,nickName:"\u533F\u540D\u673A\u5668\u4EBA"}):this._me={userId:t.bot.open_id,userName:t.bot.open_id,nickName:t.bot.app_name,avatarUrl:t.bot.avatar_url,bigAvatarUrl:t.bot.avatar_url}}return this._me}hasLogin(){return!!(this._connected||!this._options.appId||!this._options.appSecret)}async login(){if(this._wsClient&&this._connected)return;if(this._options.appId&&this._options.appSecret){let o={fatal:0,error:1,warn:2,info:3,debug:4,trace:5},s=process.env.LOG_LEVEL,r=o[s]??lo.warn;r===lo.trace&&(r=lo.debug);let i={appId:this._options.appId,appSecret:this._options.appSecret,loggerLevel:r,domain:this._options.domain,appType:Bs.SelfBuild};this._client=new Ls(i),this._wsClient=new Ds(i),await this._handleChatMessage(r),this._connected=!0}let e=await this.me();await this.getContacts("all");let t={id:fe(),source:this,me:e,user:e,type:f.LOGIN};this.event.emit(t.type,t)}async beforeSend(e){if(this._options.replayTextMode==="stream"&&(e.type===l.TEXT||e.type===l.RICH_TEXT||e.type===l.AUDIO||e.type===l.REF)){let t=e.fromId,o="chat_id",r={title:(typeof e?.content=="string"?e.content.length>10?e.content.slice(0,10)+"...":e.content:e.senderInfo?.nickName)??"",content:this._options.thinkingTips},i;this._options.cardId?.length?i=JSON.stringify({type:"template",data:{template_id:this._options.cardId,template_variable:r}}):i=JSON.stringify(ct.stream).replace("{title}",r.title).replace("{content}",r.content);let n=await this._client.im.message.create({params:{receive_id_type:o},data:{receive_id:t,content:i,msg_type:"interactive"}});n.data?.message_id?.length&&(e.origin.trackId=n.data.message_id)}}async afterSend(e){e.origin?.trackId?.length&&delete this._trackIdCache[e.origin?.trackId]}async sendMessage(e,t){this.event.emit(f.RESPONSE_MESSAGE,{id:fe(),type:f.CHAT_MESSAGE,message:e,fromMessage:t,source:this,me:this._me});let o=e.toInfo[0].userId,s=e.isGroupChat?"chat_id":"open_id",r=e.toInfo[0];if((r.userId??r.userName).startsWith("http")||r.userId.startsWith("__"))return this._sendWebhookMessage(e);{let i=await this._getSendMessageContent(e,t);i.content?.length?i.msg_type==="interactive"&&t?.origin?.trackId?.length&&this._options.replayTextMode==="stream"?await this._client.im.message.patch({data:{content:i.content.replaceAll(`
22
+ `,"<br>")},path:{message_id:t.origin.trackId}}):await this._client.im.message.create({params:{receive_id_type:s},data:{receive_id:o,content:i.content,msg_type:i.msg_type}}):E.warn("\u4E0D\u652F\u6301\u53D1\u9001\u7684\u6D88\u606F\u7C7B\u578B\uFF1A"+e.type)}}async getContacts(e,t=!1){if(e==="group")return E.warn("\u98DE\u4E66\u6682\u4E0D\u652F\u6301\u83B7\u53D6\u4F1A\u8BDD\u7FA4\u7EC4\uFF01"),[];if(!this._userCache||t){this._departCache=new Map,this._userCache=new Map;let s=await this._getDepartList(this._options.contactDepartId??"0"),r=[];for(let i of s)r.push(this._getDepartUsers(i.userId));await Promise.allSettled(r),E.trace("\u8054\u7CFB\u4EBA\u4FE1\u606F\u83B7\u53D6\u5B8C\u6BD5\uFF0C\u5171\u6709"+this._userCache.size+"\u4E2A\u7528\u6237\u3002"),setTimeout(()=>{this.getContacts("all",!0)},this._options.contactsCacheTime*1e3)}let o=[];return this._userCache.forEach(s=>o.push(s)),o}async getContactDetail(e){return e}async dispose(){this._wsClient&&(this._wsClient.wsConfig.wsInstance.close(),delete this._wsClient,await Le(500))}};import qs from"emittery";import mt from"tweetnacl";import{v4 as Qt}from"uuid";import{decode as Hs,encode as Gs,getWavFileInfo as Ks,isSilk as zs}from"silk-wasm";import Ws from"remove-markdown";var dt=class a{static{p(this,"QQSource")}_app;_options;static params={name:"qq",optionsSchema:{type:"formily",formily:{type:"object",properties:{...$,appId:{type:"string",title:"App ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 App ID"},"x-decorator-props":{tooltip:"QQ\u5F00\u653E\u5E73\u53F0\uFF0C\u673A\u5668\u4EBA\u5E94\u7528\u540E\u53F0-\u5F00\u53D1\u8BBE\u7F6E \u4E2D\u53EF\u4EE5\u770B\u5230"},required:!0},appSecret:{type:"string",title:"App Secret","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 App Secret"},"x-decorator-props":{tooltip:"QQ\u5F00\u653E\u5E73\u53F0\uFF0C\u673A\u5668\u4EBA\u5E94\u7528\u540E\u53F0-\u5F00\u53D1\u8BBE\u7F6E \u4E2D\u53EF\u4EE5\u770B\u5230"},required:!0},apiBase:{type:"string",title:"API \u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 API \u5730\u5740\uFF0C\u6CE8\u610F\u6C99\u7BB1\u73AF\u5883\u548C\u6B63\u5F0F\u73AF\u5883\u6709\u533A\u522B\uFF0C\u9ED8\u8BA4\u6839\u636E\u73AF\u5883\u53D8\u91CF\u81EA\u52A8\u8BBE\u7F6E\u3002\u5982\u679C\u662F\u6C99\u7BB1\u6A21\u5F0F\u7684\u673A\u5668\u4EBA\uFF0C\u5EFA\u8BAE\u624B\u52A8\u6307\u5B9A\u4E3Ahttps://sandbox.api.sgroup.qq.com\u3002"},"x-decorator-props":{tooltip:"\u5F53\u73AF\u5883\u53D8\u91CF\u7684NODE_ENV\u662Fdevelopment\u65F6\u5019\uFF0C\u4F7F\u7528\u6C99\u7BB1\u5730\u5740\u3002\u5982\u679C\u662Fprod\u6A21\u5F0F\u76F4\u63A5\u8FD0\u884C\u7684\u6846\u67B6\uFF0C\u5728\u6C99\u7BB1\u8FD0\u884C\u65F6\uFF0C\u9700\u8981\u8FD9\u91CC\u624B\u52A8\u914D\u7F6E\u5730\u5740\u4E3A\uFF1Ahttps://sandbox.api.sgroup.qq.com \uFF0C\u6B63\u5F0F\u73AF\u5883\u5730\u5740\u4E3A\uFF1Ahttps://api.sgroup.qq.com"}},tokenBase:{type:"string",title:"Token API \u57DF\u540D","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u9ED8\u8BA4\u4E3A https://bots.qq.com"},"x-decorator-props":{tooltip:"\u7528\u4E8E\u83B7\u53D6 token \u7684 API \u57DF\u540D\uFF0C\u9ED8\u8BA4\u662F https://bots.qq.com"},default:"https://bots.qq.com"},audioEncodeRate:{type:"number",title:"\u97F3\u9891\u7F16\u7801\u7801\u7387","x-decorator":"FormItem","x-component":"Select",enum:[8e3,12e3,16e3,24e3,32e3,44100,48e3],"x-decorator-props":{tooltip:"\u97F3\u9891\u7F16\u7801\u7684\u7801\u7387\uFF0C\u5982\u679C\u4F7F\u7528\u9ED8\u8BA4\u503C\u51FA\u73B0\u8BED\u901F\u8FC7\u6162\u6216\u8005\u8FC7\u5FEB\uFF0C\u53EF\u4EE5\u5C1D\u8BD5\u8C03\u6574\u3002"},default:32e3},audioDecodeRate:{type:"number",title:"\u97F3\u9891\u89E3\u7801\u7801\u7387","x-decorator":"FormItem","x-component":"Select",enum:[8e3,12e3,16e3,24e3,32e3,44100,48e3],"x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u97F3\u9891\u89E3\u7801\u7801\u7387"},"x-decorator-props":{tooltip:"\u97F3\u9891\u89E3\u7801\u7684\u7801\u7387\uFF0C\u5982\u679C\u4F7F\u7528\u9ED8\u8BA4\u503C\u51FA\u73B0\u8BED\u901F\u8FC7\u6162\u6216\u8005\u8FC7\u5FEB\uFF0C\u53EF\u4EE5\u5C1D\u8BD5\u8C03\u6574\u3002"},default:32e3},canUseMarkdown:{type:"boolean",title:"\u542F\u7528 Markdown","x-decorator":"FormItem","x-component":"Switch","x-decorator-props":{tooltip:"\u662F\u5426\u83B7\u9080\u4F7F\u7528 Markdown \u529F\u80FD\uFF0C\u9ED8\u8BA4\u4E3A false\uFF0CMarkdown\u76EE\u524D\u53EA\u6709\u5185\u6D4B\u7528\u6237\u80FD\u53D1\u9001\u3002"}},messageIdCacheHourPeriod:{type:"number",title:"\u6D88\u606F ID \u7F13\u5B58\u6709\u6548\u671F (\u5C0F\u65F6)","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:1,placeholder:"\u8BF7\u8F93\u5165\u7F13\u5B58\u6709\u6548\u671F"},"x-decorator-props":{tooltip:"\u6D88\u606F ID \u7F13\u5B58\u7684\u6709\u6548\u671F\uFF0C\u9ED8\u8BA4\u662F 20 \u5C0F\u65F6\uFF0C\u5355\u4F4D\u662F\u5C0F\u65F6"},default:20}}}},eventNames:[f.CHAT_MESSAGE,f.LOGIN],fieldInAtList:"userId",desc:"QQ\u7FA4\u673A\u5668\u4EBA"};constructor(e,t){this._app=e,this._options=t,this._logger=y("qq-source"),this._msgIdCache=new Set,t.apiBase||(t.apiBase=process.env.NODE_ENV==="development"?"https://sandbox.api.sgroup.qq.com":"https://api.sgroup.qq.com");let o=this._options.appSecret;for(;o.length<mt.sign.seedLength;)o=o.repeat(2);o=o.slice(0,mt.sign.seedLength);let s=Buffer.from(o,"utf-8");this._signKeyPair=mt.sign.keyPair.fromSeed(s),this._options.audioEncodeRate=this._options.audioEncodeRate??32e3,this._options.audioDecodeRate=this._options.audioDecodeRate??32e3,this._options.tokenBase=this._options.tokenBase??"https://bots.qq.com",this._options.messageIdCacheHourPeriod=this._options.messageIdCacheHourPeriod??20,this.event=new qs,setTimeout(()=>{this._msgIdCache.clear()},this._options.messageIdCacheHourPeriod*60*60*1e3)}_logger;_accessToken;_signKeyPair;_msgIdCache;event;get params(){return a.params}get options(){return this._options}get actions(){return[{type:"api",actionName:"receive",action:{type:"normal",handler:p(e=>this._onMessage(e),"handler")}}]}_checkSignature(e){let t=e.headers["x-signature-timestamp"]??e.headers["X-Signature-Timestamp"];if(!t)return!1;let o=e.headers["x-signature-ed25519"]??e.headers["X-Signature-Ed25519"];if(!o)return!1;let s=Buffer.from(t,"utf-8"),r=JSON.stringify(e.body),i=Buffer.from(r,"utf-8"),n=Buffer.concat([s,i]),c=Buffer.from(mt.sign.detached(n,this._signKeyPair.secretKey)).toString("hex");return o===c?!0:r.indexOf("multimedia.nt.qq.com.cn")>0}_verifyCallback(e,t){try{let o=t+e,s=Buffer.from(o,"utf-8"),r=mt.sign.detached(s,this._signKeyPair.secretKey);return{plain_token:e,signature:Buffer.from(r).toString("hex")}}catch(o){this._logger.error(o)}}async _processChatMessage(e,t){let o=t==="GROUP_AT_MESSAGE_CREATE",s=o?e.author.member_openid:e.author.user_openid,r={time:new Date(e.timestamp),senderId:s,fromId:o?e.group_openid:e.author.user_openid,isGroupChat:o,isSender:!1,senderName:s,senderInfo:{userId:s,userName:s,nickName:s},toInfo:[this._options.me],origin:e,messageId:e.id,type:void 0,content:void 0};if(r.isGroupChat){let i=r;i.groupInfo={userId:e.group_openid,userName:e.group_openid,nickName:e.group_openid},i.atList=[this._options.me.userId]}if(e.attachments?.length)if(e.content?.trim().length||e.attachments.length>1){let i=e.content?.trim().length?e.content?.trim():"\u8BF7\u5206\u6790\u6B64\u5185\u5BB9";r.type=l.RICH_TEXT;let n={content:[{type:"text",data:i}]};for(let c of e.attachments){let m,d;c.content_type.startsWith("image")?(m="image",d={file:b.fromPath(c.url,"binary",c.filename)}):c.content_type!=="voice"?(m="file",d={file:b.fromPath(c.url,"binary",c.filename),title:c.filename,sizeInBytes:c.size}):this._logger.info("\u6682\u4E0D\u652F\u6301voice\u7C7B\u578B\u7684richtext"),n.content.push({type:m,data:d})}}else{let i=e.attachments[0];if(i.content_type.startsWith("image"))r.type=l.IMAGE,r.content={file:b.fromPath(i.url,"binary",i.filename)};else if(i.content_type==="voice"){r.type=l.AUDIO;let n=b.fromPath(i.url,"binary",i.filename),c=await n.asBuffer();if(zs(c)){let m=await Hs(c,this._options.audioDecodeRate),d=Te(m.data.buffer,this._options.audioEncodeRate,16,1),h=b.fromBuffer(Buffer.from(d),n.name.replace(".silk","")+".wav");r.content={file:h}}else{this._logger.warn("\u5F53\u524D\u97F3\u9891\u6587\u4EF6\u4E0D\u662Fsilk\u683C\u5F0F\uFF0C\u65E0\u6CD5\u5904\u7406");return}}else r.type=l.FILE,r.content={file:b.fromPath(i.url,"binary",i.filename),title:i.filename,sizeInBytes:i.size}}else if(e.content?.trim().length)r.type=l.TEXT,r.content=e.content;else{this._logger.info("\u6536\u5230\u7A7A\u767D\u6D88\u606F");return}if(r.content){let i={id:Qt(),type:f.CHAT_MESSAGE,message:r,source:this,me:this._options.me};this.event.emit(i.type,i)}else this._logger.warn("\u4E0D\u80FD\u8BC6\u522B\u7684\u6D88\u606F"),this._logger.warn(e)}async _onMessage(e){let t=e.body;if(t.op===13){this._logger.debug("receive verify callback request"),this._logger.debug(t);let o=this._verifyCallback(t.d.plain_token,t.d.event_ts);return this._logger.debug(o),o}else if(t.op===0){if(!this._checkSignature(e))return this._logger.warn("\u68C0\u6D4B\u5230\u975E\u6CD5\u8BF7\u6C42\uFF01"),this._logger.debug(e.body),"error";if(this._logger.debug("\u7B7E\u540D\u9A8C\u8BC1\u901A\u8FC7"),this._msgIdCache.has(t.d.id)){this._logger.info("\u91CD\u590D\u7684\u6D88\u606FID");return}return this._msgIdCache.add(t.d.id),t.t==="GROUP_AT_MESSAGE_CREATE"||t.t==="C2C_MESSAGE_CREATE"?this._processChatMessage(t.d,t.t):(this._logger.debug("\u6682\u4E0D\u652F\u6301\u7684\u6D88\u606F\u4E8B\u4EF6\u7C7B\u578B"),this._logger.debug(t)),{op:12}}else this._logger.debug("\u6682\u4E0D\u652F\u6301\u7684op\u7C7B\u578B"),this._logger.debug(e.body);return{op:12}}async _initToken(){try{let t=await(await fetch(`${this._options.tokenBase}/app/getAppAccessToken`,{method:"post",headers:{"content-type":"application/json"},body:JSON.stringify({appId:this._options.appId,clientSecret:this._options.appSecret})})).json();if(t.access_token?.length){this._accessToken=t.access_token;let o=Number(t.expires_in)/1.1;setTimeout(()=>{this._initToken()},o*1e3),this._logger.trace("\u6210\u529F\u83B7\u53D6QQ\u673A\u5668\u4EBAtoken\uFF1A"+this._accessToken)}else this._logger.warn("\u83B7\u53D6QQ\u673A\u5668\u4EBAtoken\u5931\u8D25\uFF01")}catch(e){this._logger.error(e)}}async _uploadFile(e,t,o){let s,r=e.name.toLowerCase();if(r.endsWith("png")||r.endsWith("jpg"))s=1;else if(r.endsWith("mp4"))s=2;else if(r.endsWith("wav")){let m=await e.asBuffer(),d=Ks(m);await e.asLocalPath();let h=await Gs(m,d.fmt.sampleRate);e=b.fromBuffer(Buffer.from(h.data),Qt()+".silk"),s=3}else{this._logger.warn("\u4E0D\u652F\u6301\u4E0A\u4F20\u5230QQ\u673A\u5668\u4EBA\u7684\u6587\u4EF6\uFF1A"+e.name);return}let i=await e.asUrl(),n=o?`${this._options.apiBase}/v2/groups/${t}/files`:`${this._options.apiBase}/v2/users/${t}/files`;return await(await fetch(n,{method:"post",headers:{"content-type":"application/json",authorization:`QQBot ${this._accessToken}`},body:JSON.stringify({file_type:s,url:i,srv_send_msg:!1})})).json()}_getArkContent(e,t,o,s,r,i){let n={template_id:void 0,kv:void 0};return s?.length?(n.template_id=37,n.kv=[{key:"#PROMPT#",value:e?.slice(0,8)??"\u901A\u77E5"},{key:"#METATITLE#",value:e??" "},{key:"#METASUBTITLE#",value:t??" "},{key:"#METACOVER#",value:s},{key:"#METAURL#",vale:o??""}]):r?.length?(n.template_id=24,n.kv=[{key:"#DESC#",value:t??" "},{key:"#PROMPT#",value:e?.slice(0,8)??"\u901A\u77E5"},{key:"#TITLE#",value:e??" "},{key:"#METADESC#",value:t??" "},{key:"#IMG#",value:r},{key:"#LINK#",value:o??""},{key:"#SUBTITLE#",value:i??" "}]):(n.template_id=23,n.kv=[{key:"#DESC#",value:t??" "},{key:"#PROMPT#",value:e?.slice(0,8)??" "},{key:"#LIST#",obj:[{obj_kv:{key:"desc",value:e}}]}]),n}hasLogin(){return this._accessToken!==void 0}async me(){return this._options.me}async login(){await this._initToken();let e={id:Qt(),source:this,me:this._options.me,user:this._options.me,type:f.LOGIN};this._accessToken||this.event.emit(e.type,e)}async sendMessage(e,t){this.event.emit(f.RESPONSE_MESSAGE,{id:Qt(),type:f.CHAT_MESSAGE,message:e,fromMessage:t,source:this,me:this._options.me}),t.origin=t.origin??{},t.origin.seq=t.origin.seq??0,t.origin.seq++;let o={msg_id:t.messageId,msg_seq:t.origin.seq},s=e.toInfo[0].userId;switch(e.type){case l.TEXT:{this._options.canUseMarkdown?(o.markdown={content:e.content},o.msg_type=2):(o.content=e.content,o.msg_type=0);break}case l.EMOTION:case l.IMAGE:case l.VIDEO:case l.AUDIO:{o.msg_type=7,o.content=" ",o.media=await this._uploadFile(e.content.file,s,e.isGroupChat);break}case l.FILE:{let r=e.content,i=r.title??r.file.name,n=await r.file.asUrl();this._options.canUseMarkdown?(o.markdown={content:`### \u6536\u5230\u6587\u4EF6
23
23
  \u8BF7\u70B9\u51FB\u4E0B\u8F7D[${i}](${n})`},o.msg_type=2):(o.content=`\u60A8\u6536\u5230\u4E00\u4E2A\u6587\u4EF6(${i})\uFF0C\u8BF7\u70B9\u51FB\u4E0B\u8F7D\uFF1A${n}`,o.msg_type=0);break}case l.ARTICLE:{let r=e.content;o.msg_type=3,o.ark=this._getArkContent(r.title,r.desc,r.url,await r.coverFile?.asUrl(),await r.thumbFile?.asUrl(),r.source);break}case l.POSITION:{let r=e.content;o.msg_type=0,o.content=`\u5730\u540D:${r.placeName}
24
24
  \u8BE6\u60C5:${r.placeDetail??""}
25
25
  \u7ECF\u5EA6:${r.lon.toFixed(4)}
26
- \u7EAC\u5EA6:${r.lat.toFixed(4)}`;break}case l.MUSIC:{let r=e.content,i=r.url?.length?r.url:await r.file.asUrl();o.msg_type=3,o.ark=this._getArkContent(r.title,r.desc,i,r.coverUrl,r.album,r.signer);break}case l.RICH_TEXT:{this._options.canUseMarkdown?(o.msg_type=2,o.markdown=await Ut(e.content)):(this._logger.warn("QQ\u673A\u5668\u4EBA\u6682\u4E0D\u652F\u6301rich text\u56DE\u590D\uFF0C\u5982\u679C\u60A8\u6709markdown\u6743\u9650\uFF0C\u8BF7\u5728\u914D\u7F6E\u4E2D\u5F00\u542F\uFF01"),o.msg_type=0,o.content="\u60A8\u6536\u5230\u4E86\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF0C\u8BE6\u60C5\u53EF\u4EE5\u8054\u7CFB\u7BA1\u7406\u5458\u5728\u63A7\u5236\u53F0\u4E2D\u67E5\u770B\uFF01");break}case l.CONTACT_CARD:{let r=e.content;o.msg_type=3,o.ark=await this._getArkContent("\u60A8\u6536\u5230\u4E00\u4E2A\u8054\u7CFB\u4EBA\u63A8\u9001",String(r.custom??""),void 0,r.bigImageUrl,r.smallImageUrl,"");break}default:break}if(o.content?.length||o.ark||o.markdown||o.media){o.content?.length&&(o.content=Ws(o.content));let r=e.isGroupChat?`${this._options.apiBase}/v2/groups/${s}/messages`:`${this._options.apiBase}/v2/users/${s}/messages`,n=await(await fetch(r,{method:"post",headers:{"content-type":"application/json",authorization:`QQBot ${this._accessToken}`},body:JSON.stringify(o)})).json();this._logger.trace(n)}}async getContacts(){return this._logger.info("QQ\u673A\u5668\u4EBA\u4E0D\u652F\u6301\u83B7\u53D6\u7528\u6237\u63A5\u53E3\uFF01"),[]}async getContactDetail(e){return e}};import Xs from"emittery";import{XMLBuilder as Js,XMLParser as Vs}from"fast-xml-parser";import{v4 as mo}from"uuid";import Qs from"remove-markdown";import{decrypt as Ys,encrypt as Zs}from"@wecom/crypto";var dt=class a{static{p(this,"WCAISource")}_app;_options;static params={name:"wcai",optionsSchema:{type:"formily",formily:{type:"object",properties:{...$,appId:{type:"string",title:"App ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7ED1\u5B9A\u7684\u5F00\u653EAPI\u7684 App ID"},"x-decorator-props":{tooltip:"\u5728\u5FAE\u4FE1\u5BF9\u8BDD\u5F00\u653E\u5E73\u53F0\u7684 \u7BA1\u7406-\u5E94\u7528\u7ED1\u5B9A-\u5F00\u653EAPI \u4E2D\u5F00\u542F\u5F00\u653EAPI\u529F\u80FD\u540E\u53EF\u89C1"},required:!0},token:{type:"string",title:"Token","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7ED1\u5B9A\u7684\u5F00\u653EAPI\u7684 Token"},"x-decorator-props":{tooltip:"\u5728\u5FAE\u4FE1\u5BF9\u8BDD\u5F00\u653E\u5E73\u53F0\u7684 \u7BA1\u7406-\u5E94\u7528\u7ED1\u5B9A-\u5F00\u653EAPI \u4E2D\u5F00\u542F\u5F00\u653EAPI\u529F\u80FD\u540E\u53EF\u89C1"},required:!0},aesKey:{type:"string",title:"AES Key","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7ED1\u5B9A\u7684\u5F00\u653EAPI\u7684 AES Key"},"x-decorator-props":{tooltip:"\u5728\u5FAE\u4FE1\u5BF9\u8BDD\u5F00\u653E\u5E73\u53F0\u7684 \u7BA1\u7406-\u5E94\u7528\u7ED1\u5B9A-\u5F00\u653EAPI \u4E2D\u5F00\u542F\u5F00\u653EAPI\u529F\u80FD\u540E\u53EF\u89C1"},required:!0},me:{type:"object",title:"\u673A\u5668\u4EBA\u4FE1\u606F\uFF08\u53EF\u4EFB\u610F\u586B\u5199\uFF09","x-decorator":"FormItem","x-decorator-props":{tooltip:"\u7528\u6765\u7ED9\u6280\u80FD\u7B49\u8BC6\u522B\u516C\u4F17\u5E73\u53F0\u6D88\u606F\u6E90\uFF08\u673A\u5668\u4EBA\uFF09\u7684\u4FE1\u606F\uFF0C\u7531\u4E8E\u5FAE\u4FE1\u5BF9\u8BDD\u673A\u5668\u4EBA\u4E0D\u5B58\u5728\u7FA4\u804A\uFF0C\u65E0\u9700\u5224\u65AD@me\u80FD\u529B\uFF0C\u56E0\u6B64\u6B64\u5904\u53EF\u4EE5\u586B\u5199\u4EFB\u610F\u503C\u5373\u53EF\u3002"},properties:{userId:{type:"string",title:"\u673A\u5668\u4EBAID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u81EA\u5B9A\u4E49ID"},required:!0},userName:{type:"string",title:"\u673A\u5668\u4EBA\u540D\u79F0","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u81EA\u5B9A\u4E49\u540D\u79F0"},required:!0},nickName:{type:"string",title:"\u673A\u5668\u4EBA\u6635\u79F0","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u81EA\u5B9A\u4E49\u6635\u79F0"},required:!0}},required:!0},apiBase:{type:"string",title:"API \u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 API \u5730\u5740\uFF0C\u9ED8\u8BA4 https://chatbot.weixin.qq.com"},"x-decorator-props":{tooltip:""},default:"https://chatbot.weixin.qq.com"}}}},eventNames:[f.CHAT_MESSAGE],desc:"\u5FAE\u4FE1\u5BF9\u8BDD\u5F00\u653E\u5E73\u53F0"};constructor(e,t){if(this._app=e,this._options=t,!this._options.token||!this._options.aesKey)throw new Error("appId\u3001token\u548CaesKey\u672A\u914D\u7F6E\u5B8C\u6574\uFF01");this._options.apiBase=this._options.apiBase??"https://chatbot.weixin.qq.com",this._logger=y(this._options.instanceName),this.event=new Xs}_logger;get params(){return a.params}get options(){return this._options}get actions(){return[{type:"api",actionName:"api",action:{type:"normal",handler:p(e=>this._onChatMessage(e),"handler")}}]}event;async _processMessage(e){let t=e.userid,o={time:new Date(e.createtime),senderId:t,fromId:t,isGroupChat:!1,isSender:!1,senderName:t,senderInfo:{userId:t,userName:t,nickName:t},toInfo:[this._options.me],origin:e,messageId:mo(),type:void 0,content:void 0};switch(e.msgtype){case"text":{if(e.content.msg==="location"){this._logger.info("\u5FAE\u4FE1\u5BF9\u8BDD\u5F00\u653E\u5E73\u53F0\u4E0D\u652F\u6301\u4F20\u8F93\u4F4D\u7F6E\u6D88\u606F\uFF01");return}if(typeof e.content.msg=="string")o.type=l.TEXT,o.content=e.content.msg;else if(e.content.msg){let s=e.content.msg;o.type=l.ARTICLE;let r={title:s.link.title,desc:s.link.description,url:s.link.url};o.content=r}break}case"image":{o.type=l.IMAGE;let s=e.content.msg,r={file:b.fromPath(s.image.url)};o.content=r;break}case"voice":{let s=e.content.msg;if(!s.voice.url?.length){this._logger.warn("\u97F3\u9891\u6587\u4EF6\u4E2D\u6CA1\u6709\u97F3\u9891\u4E0B\u8F7D\u5730\u5740\uFF0C\u65E0\u6CD5\u5904\u7406\uFF01");return}let i=await b.fromPath(s.voice.url).asBuffer(),c={file:await Ie(i),text:s.voice.recognition};o.type=l.AUDIO,o.content=c;break}}if(o.content){let s={id:mo(),type:f.CHAT_MESSAGE,message:o,source:this,me:this._options.me};this.event.emit(s.type,s)}else this._logger.info("\u65E0\u6CD5\u5904\u7406\u7684\u6D88\u606F"),this._logger.info(e)}async _onChatMessage(e){if(e.method.toLowerCase()==="get")return this._logger.debug("wechat get request"),"success";let t=Ys(this._options.aesKey,e.body.encrypted),o=new Vs().parse(t.message),s=o.xml;return s.from!==0&&(this._logger.debug("\u6536\u5230\u975E\u987E\u5BA2\u6D88\u606F"),this._logger.debug(s)),s.msgtype?.length?(this._processMessage(o.xml),"success"):(this._logger.debug("\u6682\u4E0D\u5904\u7406\u7684\u6D88\u606F"),this._logger.debug(s),"success")}async me(){return this._options.me}hasLogin(){return!1}async login(){}async sendMessage(e,t){this.event.emit(f.RESPONSE_MESSAGE,{id:mo(),type:f.CHAT_MESSAGE,message:e,fromMessage:t,source:this,me:this._options.me});let o={appid:t.origin?.appid,openid:e.toInfo[0].userId,msg:void 0,channel:t.origin?.channel};switch(e.type){case l.TEXT:{o.msg=me(e.content);break}case l.EMOTION:case l.IMAGE:{let r=await e.content.file.asUrl();o.msg={image:{url:r}};break}case l.VIDEO:{let s=e.content,r=await s.file.asUrl(),i=await s.previewImage?.asUrl();o.msg={news:{articles:[{title:s.title??"\u6536\u5230\u4E00\u4E2A\u89C6\u9891",description:s.desc??"\u70B9\u51FB\u67E5\u770B",url:r,picurl:i??await this._app.sharedCover.asUrl(),type:"h5"}]}};break}case l.AUDIO:{let s=e.content;s.text?.length?(this._logger.debug("\u4F7F\u7528\u97F3\u9891\u7684\u6587\u5B57\u8FDB\u884C\u53D1\u9001"),o.msg=s.text):o.msg={news:{articles:[{title:"\u6536\u5230\u4E00\u6BB5\u97F3\u9891",description:"\u70B9\u51FB\u6536\u542C",url:await s.file.asUrl(),picurl:await this._app.sharedCover.asUrl(),type:"h5"}]}};break}case l.FILE:{let s=e.content;o.msg={news:{articles:[{title:s.title??"\u6536\u5230\u4E00\u4E2A\u6587\u4EF6",description:s.desc??"\u70B9\u51FB\u67E5\u770B",url:await s.file.asUrl(),picurl:await this._app.sharedCover.asUrl(),type:"h5"}]}};break}case l.ARTICLE:{let s=e.content;o.msg={news:{articles:[{title:s.title??"\u6536\u5230\u4E00\u7BC7\u6587\u7AE0",description:s.desc??"\u70B9\u51FB\u67E5\u770B",url:s.url,picurl:await(s.coverFile??s.thumbFile??this._app.sharedCover).asUrl(),type:"h5"}]}};break}case l.POSITION:{let s=e.content;o.msg=`\u5730\u540D:${s.placeName}
26
+ \u7EAC\u5EA6:${r.lat.toFixed(4)}`;break}case l.MUSIC:{let r=e.content,i=r.url?.length?r.url:await r.file.asUrl();o.msg_type=3,o.ark=this._getArkContent(r.title,r.desc,i,r.coverUrl,r.album,r.signer);break}case l.RICH_TEXT:{this._options.canUseMarkdown?(o.msg_type=2,o.markdown=await Ut(e.content)):(this._logger.warn("QQ\u673A\u5668\u4EBA\u6682\u4E0D\u652F\u6301rich text\u56DE\u590D\uFF0C\u5982\u679C\u60A8\u6709markdown\u6743\u9650\uFF0C\u8BF7\u5728\u914D\u7F6E\u4E2D\u5F00\u542F\uFF01"),o.msg_type=0,o.content="\u60A8\u6536\u5230\u4E86\u4E0D\u652F\u6301\u7684\u6D88\u606F\u7C7B\u578B\uFF0C\u8BE6\u60C5\u53EF\u4EE5\u8054\u7CFB\u7BA1\u7406\u5458\u5728\u63A7\u5236\u53F0\u4E2D\u67E5\u770B\uFF01");break}case l.CONTACT_CARD:{let r=e.content;o.msg_type=3,o.ark=await this._getArkContent("\u60A8\u6536\u5230\u4E00\u4E2A\u8054\u7CFB\u4EBA\u63A8\u9001",String(r.custom??""),void 0,r.bigImageUrl,r.smallImageUrl,"");break}default:break}if(o.content?.length||o.ark||o.markdown||o.media){o.content?.length&&(o.content=Ws(o.content));let r=e.isGroupChat?`${this._options.apiBase}/v2/groups/${s}/messages`:`${this._options.apiBase}/v2/users/${s}/messages`,n=await(await fetch(r,{method:"post",headers:{"content-type":"application/json",authorization:`QQBot ${this._accessToken}`},body:JSON.stringify(o)})).json();this._logger.trace(n)}}async getContacts(){return this._logger.info("QQ\u673A\u5668\u4EBA\u4E0D\u652F\u6301\u83B7\u53D6\u7528\u6237\u63A5\u53E3\uFF01"),[]}async getContactDetail(e){return e}};import Xs from"emittery";import{XMLBuilder as Js,XMLParser as Vs}from"fast-xml-parser";import{v4 as mo}from"uuid";import Qs from"remove-markdown";import{decrypt as Ys,encrypt as Zs}from"@wecom/crypto";var ht=class a{static{p(this,"WCAISource")}_app;_options;static params={name:"wcai",optionsSchema:{type:"formily",formily:{type:"object",properties:{...$,appId:{type:"string",title:"App ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7ED1\u5B9A\u7684\u5F00\u653EAPI\u7684 App ID"},"x-decorator-props":{tooltip:"\u5728\u5FAE\u4FE1\u5BF9\u8BDD\u5F00\u653E\u5E73\u53F0\u7684 \u7BA1\u7406-\u5E94\u7528\u7ED1\u5B9A-\u5F00\u653EAPI \u4E2D\u5F00\u542F\u5F00\u653EAPI\u529F\u80FD\u540E\u53EF\u89C1"},required:!0},token:{type:"string",title:"Token","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7ED1\u5B9A\u7684\u5F00\u653EAPI\u7684 Token"},"x-decorator-props":{tooltip:"\u5728\u5FAE\u4FE1\u5BF9\u8BDD\u5F00\u653E\u5E73\u53F0\u7684 \u7BA1\u7406-\u5E94\u7528\u7ED1\u5B9A-\u5F00\u653EAPI \u4E2D\u5F00\u542F\u5F00\u653EAPI\u529F\u80FD\u540E\u53EF\u89C1"},required:!0},aesKey:{type:"string",title:"AES Key","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5E94\u7528\u7ED1\u5B9A\u7684\u5F00\u653EAPI\u7684 AES Key"},"x-decorator-props":{tooltip:"\u5728\u5FAE\u4FE1\u5BF9\u8BDD\u5F00\u653E\u5E73\u53F0\u7684 \u7BA1\u7406-\u5E94\u7528\u7ED1\u5B9A-\u5F00\u653EAPI \u4E2D\u5F00\u542F\u5F00\u653EAPI\u529F\u80FD\u540E\u53EF\u89C1"},required:!0},me:{type:"object",title:"\u673A\u5668\u4EBA\u4FE1\u606F\uFF08\u53EF\u4EFB\u610F\u586B\u5199\uFF09","x-decorator":"FormItem","x-decorator-props":{tooltip:"\u7528\u6765\u7ED9\u6280\u80FD\u7B49\u8BC6\u522B\u516C\u4F17\u5E73\u53F0\u6D88\u606F\u6E90\uFF08\u673A\u5668\u4EBA\uFF09\u7684\u4FE1\u606F\uFF0C\u7531\u4E8E\u5FAE\u4FE1\u5BF9\u8BDD\u673A\u5668\u4EBA\u4E0D\u5B58\u5728\u7FA4\u804A\uFF0C\u65E0\u9700\u5224\u65AD@me\u80FD\u529B\uFF0C\u56E0\u6B64\u6B64\u5904\u53EF\u4EE5\u586B\u5199\u4EFB\u610F\u503C\u5373\u53EF\u3002"},properties:{userId:{type:"string",title:"\u673A\u5668\u4EBAID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u81EA\u5B9A\u4E49ID"},required:!0},userName:{type:"string",title:"\u673A\u5668\u4EBA\u540D\u79F0","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u81EA\u5B9A\u4E49\u540D\u79F0"},required:!0},nickName:{type:"string",title:"\u673A\u5668\u4EBA\u6635\u79F0","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u81EA\u5B9A\u4E49\u6635\u79F0"},required:!0}},required:!0},apiBase:{type:"string",title:"API \u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165 API \u5730\u5740\uFF0C\u9ED8\u8BA4 https://chatbot.weixin.qq.com"},"x-decorator-props":{tooltip:""},default:"https://chatbot.weixin.qq.com"}}}},eventNames:[f.CHAT_MESSAGE],desc:"\u5FAE\u4FE1\u5BF9\u8BDD\u5F00\u653E\u5E73\u53F0"};constructor(e,t){if(this._app=e,this._options=t,!this._options.token||!this._options.aesKey)throw new Error("appId\u3001token\u548CaesKey\u672A\u914D\u7F6E\u5B8C\u6574\uFF01");this._options.apiBase=this._options.apiBase??"https://chatbot.weixin.qq.com",this._logger=y(this._options.instanceName),this.event=new Xs}_logger;get params(){return a.params}get options(){return this._options}get actions(){return[{type:"api",actionName:"api",action:{type:"normal",handler:p(e=>this._onChatMessage(e),"handler")}}]}event;async _processMessage(e){let t=e.userid,o={time:new Date(e.createtime),senderId:t,fromId:t,isGroupChat:!1,isSender:!1,senderName:t,senderInfo:{userId:t,userName:t,nickName:t},toInfo:[this._options.me],origin:e,messageId:mo(),type:void 0,content:void 0};switch(e.msgtype){case"text":{if(e.content.msg==="location"){this._logger.info("\u5FAE\u4FE1\u5BF9\u8BDD\u5F00\u653E\u5E73\u53F0\u4E0D\u652F\u6301\u4F20\u8F93\u4F4D\u7F6E\u6D88\u606F\uFF01");return}if(typeof e.content.msg=="string")o.type=l.TEXT,o.content=e.content.msg;else if(e.content.msg){let s=e.content.msg;o.type=l.ARTICLE;let r={title:s.link.title,desc:s.link.description,url:s.link.url};o.content=r}break}case"image":{o.type=l.IMAGE;let s=e.content.msg,r={file:b.fromPath(s.image.url)};o.content=r;break}case"voice":{let s=e.content.msg;if(!s.voice.url?.length){this._logger.warn("\u97F3\u9891\u6587\u4EF6\u4E2D\u6CA1\u6709\u97F3\u9891\u4E0B\u8F7D\u5730\u5740\uFF0C\u65E0\u6CD5\u5904\u7406\uFF01");return}let i=await b.fromPath(s.voice.url).asBuffer(),c={file:await we(i),text:s.voice.recognition};o.type=l.AUDIO,o.content=c;break}}if(o.content){let s={id:mo(),type:f.CHAT_MESSAGE,message:o,source:this,me:this._options.me};this.event.emit(s.type,s)}else this._logger.info("\u65E0\u6CD5\u5904\u7406\u7684\u6D88\u606F"),this._logger.info(e)}async _onChatMessage(e){if(e.method.toLowerCase()==="get")return this._logger.debug("wechat get request"),"success";let t=Ys(this._options.aesKey,e.body.encrypted),o=new Vs().parse(t.message),s=o.xml;return s.from!==0&&(this._logger.debug("\u6536\u5230\u975E\u987E\u5BA2\u6D88\u606F"),this._logger.debug(s)),s.msgtype?.length?(this._processMessage(o.xml),"success"):(this._logger.debug("\u6682\u4E0D\u5904\u7406\u7684\u6D88\u606F"),this._logger.debug(s),"success")}async me(){return this._options.me}hasLogin(){return!1}async login(){}async sendMessage(e,t){this.event.emit(f.RESPONSE_MESSAGE,{id:mo(),type:f.CHAT_MESSAGE,message:e,fromMessage:t,source:this,me:this._options.me});let o={appid:t.origin?.appid,openid:e.toInfo[0].userId,msg:void 0,channel:t.origin?.channel};switch(e.type){case l.TEXT:{o.msg=de(e.content);break}case l.EMOTION:case l.IMAGE:{let r=await e.content.file.asUrl();o.msg={image:{url:r}};break}case l.VIDEO:{let s=e.content,r=await s.file.asUrl(),i=await s.previewImage?.asUrl();o.msg={news:{articles:[{title:s.title??"\u6536\u5230\u4E00\u4E2A\u89C6\u9891",description:s.desc??"\u70B9\u51FB\u67E5\u770B",url:r,picurl:i??await this._app.sharedCover.asUrl(),type:"h5"}]}};break}case l.AUDIO:{let s=e.content;s.text?.length?(this._logger.debug("\u4F7F\u7528\u97F3\u9891\u7684\u6587\u5B57\u8FDB\u884C\u53D1\u9001"),o.msg=s.text):o.msg={news:{articles:[{title:"\u6536\u5230\u4E00\u6BB5\u97F3\u9891",description:"\u70B9\u51FB\u6536\u542C",url:await s.file.asUrl(),picurl:await this._app.sharedCover.asUrl(),type:"h5"}]}};break}case l.FILE:{let s=e.content;o.msg={news:{articles:[{title:s.title??"\u6536\u5230\u4E00\u4E2A\u6587\u4EF6",description:s.desc??"\u70B9\u51FB\u67E5\u770B",url:await s.file.asUrl(),picurl:await this._app.sharedCover.asUrl(),type:"h5"}]}};break}case l.ARTICLE:{let s=e.content;o.msg={news:{articles:[{title:s.title??"\u6536\u5230\u4E00\u7BC7\u6587\u7AE0",description:s.desc??"\u70B9\u51FB\u67E5\u770B",url:s.url,picurl:await(s.coverFile??s.thumbFile??this._app.sharedCover).asUrl(),type:"h5"}]}};break}case l.POSITION:{let s=e.content;o.msg=`\u5730\u540D:${s.placeName}
27
27
  \u8BE6\u60C5:${s.placeDetail??""}
28
28
  \u7ECF\u5EA6:${s.lon.toFixed(4)}
29
29
  \u7EAC\u5EA6:${s.lat.toFixed(4)}`;break}case l.MUSIC:{let s=e.content;o.msg={news:{articles:[{title:s.title??"\u6536\u5230\u4E00\u9996\u6B4C",description:s.desc??"\u70B9\u51FB\u67E5\u770B",url:s.url??await s.file?.asUrl(),picurl:s.coverUrl??await this._app.sharedCover.asUrl(),type:"h5"}]}};break}case l.RICH_TEXT:{let s=await Ut(e.content);o.msg=Qs(s);break}case l.CONTACT_CARD:{let s=e.content;o.msg={news:{articles:[{title:"\u6536\u5230\u4E00\u4E2A\u540D\u7247",description:s.display??"\u70B9\u51FB\u67E5\u770B",url:s.bigImageUrl,picurl:s.bigImageUrl??s.smallImageUrl,type:"h5"}]}};break}default:break}if(o.msg){let s=typeof o.msg=="string"?o.msg:JSON.stringify(o.msg),r=`<xml>
@@ -36,10 +36,10 @@ ${t.data}
36
36
  <ans_node_name></ans_node_name>
37
37
  </xml>`,i=`<xml>
38
38
  ${new Js().build(o)}
39
- </xml>`,n=Zs(this._options.aesKey,r,this._options.appId),c=`${this._options.apiBase}/openapi/sendmsg/${this._options.token}`;try{let m=await fetch(c,{method:"post",headers:{"content-type":"application/json"},body:JSON.stringify({encrypt:n})});this._logger.debug(await m.text())}catch(m){this._logger.error(m)}}else this._logger.info("\u5185\u5BB9\u4E3A\u7A7A\u6216\u8005\u65E0\u6CD5\u53D1\u9001\u7684\u6D88\u606F"),this._logger.info(e)}async getContacts(e,t=!1){return[]}async getContactDetail(e){return e}};import en from"baidu-aip-sdk";var ht=class a extends U{static{p(this,"BaiduTTSSkill")}_app;_options;static params={name:"baidu-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...U.params.optionsSchema.formily.properties,appId:{type:"string",title:"AppID","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u767E\u5EA6\u8BED\u97F3\u5E94\u7528\u7684AppID"},"x-decorator":"FormItem",required:!0},apiKey:{type:"string",title:"API Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u767E\u5EA6\u8BED\u97F3\u5E94\u7528\u7684API Key"},"x-decorator":"FormItem",required:!0},secretKey:{type:"string",title:"Secret Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u767E\u5EA6\u8BED\u97F3\u5E94\u7528\u7684API Secret"},"x-decorator":"FormItem",required:!0},per:{type:"number",title:"\u53D1\u97F3\u4EBA","x-index":4,"x-decorator":"FormItem","x-component":"AutoComplete",enum:[{label:"\u57FA\u7840-\u5EA6\u5C0F\u7F8E-\u6807\u51C6\u5973\u4E3B\u64AD",value:0},{label:"\u57FA\u7840-\u5EA6\u5C0F\u5B87-\u4EB2\u5207\u7537\u58F0",value:1},{label:"\u57FA\u7840-\u5EA6\u900D\u9065-\u60C5\u611F\u7537\u58F0",value:3},{label:"\u57FA\u7840-\u5EA6\u4E2B\u4E2B-\u7AE5\u58F0",value:4},{label:"\u7CBE\u54C1-\u5EA6\u900D\u9065-\u60C5\u611F\u7537\u58F0",value:5003},{label:"\u7CBE\u54C1-\u5EA6\u5C0F\u9E7F-\u751C\u7F8E\u5973\u58F0",value:5118},{label:"\u7CBE\u54C1-\u5EA6\u535A\u6587-\u4E13\u4E1A\u7537\u4E3B\u64AD",value:106},{label:"\u7CBE\u54C1-\u5EA6\u7C73\u6735-\u53EF\u7231\u7AE5\u58F0",value:103},{label:"\u7CBE\u54C1-\u5EA6\u5C0F\u7AE5-\u7AE5\u58F0\u4E3B\u64AD",value:110},{label:"\u7CBE\u54C1-\u5EA6\u5C0F\u840C-\u8F6F\u840C\u59B9\u5B50",value:111},{label:"\u7CBE\u54C1-\u5EA6\u5C0F\u5A07-\u6210\u719F\u5973\u4E3B\u64AD",value:5},{label:"\u81FB\u54C1-\u5EA6\u900D\u9065-\u60C5\u611F\u7537\u58F0",value:4003},{label:"\u81FB\u54C1-\u5EA6\u535A\u6587-\u4E13\u4E1A\u7537\u4E3B\u64AD",value:4106},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u8D24-\u7535\u53F0\u7537\u4E3B\u64AD",value:4115},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u9E7F-\u751C\u7F8E\u5973\u58F0",value:4119},{label:"\u81FB\u54C1-\u5EA6\u7075\u513F-\u6E05\u6FC0\u5973\u58F0",value:4105},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u4E54-\u6D3B\u6CFC\u5973\u58F0",value:4117},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u96EF-\u6D3B\u529B\u5973\u4E3B\u64AD",value:4100},{label:"\u81FB\u54C1-\u5EA6\u7C73\u6735-\u53EF\u7231\u5973\u58F0",value:4103},{label:"\u81FB\u54C1-\u5EA6\u59D7\u59D7-\u5A31\u4E50\u5973\u58F0",value:4144},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u8D1D-\u77E5\u8BC6\u5973\u4E3B\u64AD",value:4278},{label:"\u81FB\u54C1-\u5EA6\u6E05\u98CE-\u914D\u97F3\u7537\u58F0",value:4143},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u65B0-\u4E13\u4E1A\u5973\u4E3B\u64AD",value:4140},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u5F66-\u77E5\u8BC6\u7537\u4E3B\u64AD",value:4129},{label:"\u81FB\u54C1-\u5EA6\u661F\u6CB3-\u5E7F\u544A\u7537\u58F0",value:4149},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u6E05-\u5E7F\u544A\u5973\u58F0",value:4254},{label:"\u81FB\u54C1-\u5EA6\u535A\u6587-\u7EFC\u827A\u7537\u58F0",value:4206},{label:"\u81FB\u54C1-\u5357\u65B9-\u7535\u53F0\u5973\u4E3B\u64AD",value:4226}],"x-component-props":{autoclear:!0,placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u53D1\u97F3\u4EBA\u7684\u7F16\u53F7"},default:0,"x-decorator-props":{tooltip:"\u53D1\u97F3\u4EBA\u7684\u7F16\u53F7\u9009\u62E9\uFF0C\u8BE6\u89C1 https://ai.baidu.com/ai-doc/SPEECH/Rluv3uq3d \u3002"}},spd:{type:"number",title:"\u8BED\u901F","x-decorator":"FormItem","x-component":"Select",enum:[{value:0},{value:1},{value:2},{value:3},{value:4},{value:5},{value:6},{value:7},{value:8},{value:9}],default:5,"x-decorator-props":{tooltip:"\u8BED\u901F\uFF0C\u53D6\u503C0-9\uFF0C\u9ED8\u8BA4\u4E3A5\u4E2D\u8BED\u901F"}},pit:{type:"number",title:"\u97F3\u8C03","x-decorator":"FormItem","x-component":"Select",enum:[{value:0},{value:1},{value:2},{value:3},{value:4},{value:5},{value:6},{value:7},{value:8},{value:9}],default:5,"x-decorator-props":{tooltip:"\u97F3\u8C03\uFF0C\u53D6\u503C0-9\uFF0C\u9ED8\u8BA4\u4E3A5\u4E2D\u8BED\u8C03"}},vol:{type:"number",title:"\u97F3\u91CF","x-decorator":"FormItem","x-component":"NumberPicker",default:5,"x-component-props":{min:0,max:15},"x-decorator-props":{tooltip:"\u97F3\u91CF\uFF0C\u53D6\u503C0-15\uFF0C\u9ED8\u8BA4\u4E3A5\u4E2D\u97F3\u91CF\u3002\u6CE8\u610F\u7CBE\u54C1\u5E93\u624D\u652F\u630110-15\u7684\u97F3\u91CF\uFF0C\u5176\u4ED6\u53EA\u80FD\u8BBE\u7F6E0-9\u3002"}},aue:{type:"string",title:"\u8BED\u97F3\u683C\u5F0F","x-decorator":"FormItem","x-component":"Select",enum:[{value:3,label:"mp3"},{value:4,label:"pcm-16k"},{value:5,label:"pcm-8k"},{value:6,label:"wav(default)"}],default:6,"x-decorator-props":{tooltip:"\u5982\u679C\u4E3A\u7279\u5B9A\u7A0B\u5E8F\u5F00\u542F\uFF0C\u9700\u8981\u6307\u5B9A\u5408\u6210\u540E\u7684\u97F3\u9891\u683C\u5F0F\uFF0C\u53EF\u4EE5\u5728\u6B64\u9009\u62E9\u3002"}}}}},desc:"\u767E\u5EA6\u8BED\u97F3\u5408\u6210"};constructor(e,t){if(!t.appId?.length||!t.apiKey?.length||!t.secretKey?.length)throw new Error("Baidu TTS skill need appId,apiKey,secretKey to work.");t.aue=t.aue??6,t.per=t.per??0,t.spd=t.spd??5,t.pit=t.pit??5,t.vol=t.vol??5,super(t),this._app=e,this._options=t,this._client=new en.speech(this._options.appId,this._options.apiKey,this._options.secretKey)}_client;get _maxToken(){return 1024}get options(){return this._options}get params(){return a.params}async getAudioBuffer(e,t){let o={aue:this._options.aue,per:this._options.per,spd:this._options.spd,pit:this._options.pit,vol:this._options.vol,cuid:`${t.source.options.instanceName}-${t.message.fromId}`},s=await this._client.text2audio(e,o);if(s.data)return s.data;this._logger.error(s?.err_msg??s)}};import tn from"baidu-aip-sdk";var ut=class a extends j{static{p(this,"BaiduSTTSkill")}_app;_options;static params={name:"baidu-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...j.params.optionsSchema.formily.properties,appId:{type:"string",title:"AppID","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u767E\u5EA6\u8BED\u97F3\u5E94\u7528\u7684AppID"},"x-decorator":"FormItem",required:!0},apiKey:{type:"string",title:"API Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u767E\u5EA6\u8BED\u97F3\u5E94\u7528\u7684API Key"},"x-decorator":"FormItem",required:!0},secretKey:{type:"string",title:"Secret Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u767E\u5EA6\u8BED\u97F3\u5E94\u7528\u7684API Secret"},"x-decorator":"FormItem",required:!0}}}},desc:"\u767E\u5EA6\u8BED\u97F3\u8BC6\u522B"};constructor(e,t){if(super(t),this._app=e,this._options=t,!t.appId?.length||!t.apiKey?.length||!t.secretKey?.length)throw new Error("Baidu STT skill need appId,apiKey,secretKey to work.");this._client=new tn.speech(this._options.appId,this._options.apiKey,this._options.secretKey)}_client;get options(){return this._options}get params(){return a.params}async _getText(e){this._logger.debug("\u5F00\u59CB\u8F6C\u6362\u8BED\u97F3\u5230\u6587\u672C");try{let t=await e.asBuffer(),o=await this._client.recognize(t,"wav",16e3,{len:t.length,cuid:"ppagent-baidu-stt",channel:1});if(o.err_no!==0){this._logger.error(o.err_msg);return}if(!o.result?.length){this._logger.warn("\u8F6C\u6362\u7ED3\u679C\u4E3A\u7A7A\uFF01");return}return o.result[0]}catch(t){this._logger.error(t.message);return}}};import on from"crypto-js/hmac-sha256.js";import sr from"crypto-js/enc-base64.js";import rn from"crypto-js/enc-utf8.js";import{WebSocket as sn}from"ws";var gt=class a extends j{static{p(this,"XunfeiSTTSkill")}_app;_options;static params={name:"xunfei-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...j.params.optionsSchema.formily.properties,appId:{type:"string",title:"AppID","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u8BAF\u98DE\u5E94\u7528\u7684AppID"},"x-decorator":"FormItem",required:!0},secretKey:{type:"string",title:"Secret Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u8BAF\u98DE\u5E94\u7528\u7684API Secret"},"x-decorator":"FormItem",required:!0},apiKey:{type:"string",title:"API Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u8BAF\u98DE\u5E94\u7528\u7684API Key"},"x-decorator":"FormItem",required:!0}}}},desc:"\u8BAF\u98DE\u8BED\u97F3\u8BC6\u522B"};constructor(e,t){if(super(t),this._app=e,this._options=t,this._hostUrl="wss://iat-api.xfyun.cn/v2/iat",this._host="iat-api.xfyun.cn",this._uri="/v2/iat",this._frame={STATUS_FIRST_FRAME:0,STATUS_CONTINUE_FRAME:1,STATUS_LAST_FRAME:2},!t.appId?.length||!t.apiKey?.length||!t.secretKey?.length)throw new Error("Xunfei STT skill need appId,apiKey,secretKey to work.");this._targetFormat="s16le"}_hostUrl;_host;_uri;_frame;get options(){return this._options}get params(){return a.params}_getAuthStr(e){let t=`host: ${this._host}
39
+ </xml>`,n=Zs(this._options.aesKey,r,this._options.appId),c=`${this._options.apiBase}/openapi/sendmsg/${this._options.token}`;try{let m=await fetch(c,{method:"post",headers:{"content-type":"application/json"},body:JSON.stringify({encrypt:n})});this._logger.debug(await m.text())}catch(m){this._logger.error(m)}}else this._logger.info("\u5185\u5BB9\u4E3A\u7A7A\u6216\u8005\u65E0\u6CD5\u53D1\u9001\u7684\u6D88\u606F"),this._logger.info(e)}async getContacts(e,t=!1){return[]}async getContactDetail(e){return e}};import en from"baidu-aip-sdk";var ut=class a extends U{static{p(this,"BaiduTTSSkill")}_app;_options;static params={name:"baidu-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...U.params.optionsSchema.formily.properties,appId:{type:"string",title:"AppID","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u767E\u5EA6\u8BED\u97F3\u5E94\u7528\u7684AppID"},"x-decorator":"FormItem",required:!0},apiKey:{type:"string",title:"API Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u767E\u5EA6\u8BED\u97F3\u5E94\u7528\u7684API Key"},"x-decorator":"FormItem",required:!0},secretKey:{type:"string",title:"Secret Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u767E\u5EA6\u8BED\u97F3\u5E94\u7528\u7684API Secret"},"x-decorator":"FormItem",required:!0},per:{type:"number",title:"\u53D1\u97F3\u4EBA","x-index":4,"x-decorator":"FormItem","x-component":"AutoComplete",enum:[{label:"\u57FA\u7840-\u5EA6\u5C0F\u7F8E-\u6807\u51C6\u5973\u4E3B\u64AD",value:0},{label:"\u57FA\u7840-\u5EA6\u5C0F\u5B87-\u4EB2\u5207\u7537\u58F0",value:1},{label:"\u57FA\u7840-\u5EA6\u900D\u9065-\u60C5\u611F\u7537\u58F0",value:3},{label:"\u57FA\u7840-\u5EA6\u4E2B\u4E2B-\u7AE5\u58F0",value:4},{label:"\u7CBE\u54C1-\u5EA6\u900D\u9065-\u60C5\u611F\u7537\u58F0",value:5003},{label:"\u7CBE\u54C1-\u5EA6\u5C0F\u9E7F-\u751C\u7F8E\u5973\u58F0",value:5118},{label:"\u7CBE\u54C1-\u5EA6\u535A\u6587-\u4E13\u4E1A\u7537\u4E3B\u64AD",value:106},{label:"\u7CBE\u54C1-\u5EA6\u7C73\u6735-\u53EF\u7231\u7AE5\u58F0",value:103},{label:"\u7CBE\u54C1-\u5EA6\u5C0F\u7AE5-\u7AE5\u58F0\u4E3B\u64AD",value:110},{label:"\u7CBE\u54C1-\u5EA6\u5C0F\u840C-\u8F6F\u840C\u59B9\u5B50",value:111},{label:"\u7CBE\u54C1-\u5EA6\u5C0F\u5A07-\u6210\u719F\u5973\u4E3B\u64AD",value:5},{label:"\u81FB\u54C1-\u5EA6\u900D\u9065-\u60C5\u611F\u7537\u58F0",value:4003},{label:"\u81FB\u54C1-\u5EA6\u535A\u6587-\u4E13\u4E1A\u7537\u4E3B\u64AD",value:4106},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u8D24-\u7535\u53F0\u7537\u4E3B\u64AD",value:4115},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u9E7F-\u751C\u7F8E\u5973\u58F0",value:4119},{label:"\u81FB\u54C1-\u5EA6\u7075\u513F-\u6E05\u6FC0\u5973\u58F0",value:4105},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u4E54-\u6D3B\u6CFC\u5973\u58F0",value:4117},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u96EF-\u6D3B\u529B\u5973\u4E3B\u64AD",value:4100},{label:"\u81FB\u54C1-\u5EA6\u7C73\u6735-\u53EF\u7231\u5973\u58F0",value:4103},{label:"\u81FB\u54C1-\u5EA6\u59D7\u59D7-\u5A31\u4E50\u5973\u58F0",value:4144},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u8D1D-\u77E5\u8BC6\u5973\u4E3B\u64AD",value:4278},{label:"\u81FB\u54C1-\u5EA6\u6E05\u98CE-\u914D\u97F3\u7537\u58F0",value:4143},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u65B0-\u4E13\u4E1A\u5973\u4E3B\u64AD",value:4140},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u5F66-\u77E5\u8BC6\u7537\u4E3B\u64AD",value:4129},{label:"\u81FB\u54C1-\u5EA6\u661F\u6CB3-\u5E7F\u544A\u7537\u58F0",value:4149},{label:"\u81FB\u54C1-\u5EA6\u5C0F\u6E05-\u5E7F\u544A\u5973\u58F0",value:4254},{label:"\u81FB\u54C1-\u5EA6\u535A\u6587-\u7EFC\u827A\u7537\u58F0",value:4206},{label:"\u81FB\u54C1-\u5357\u65B9-\u7535\u53F0\u5973\u4E3B\u64AD",value:4226}],"x-component-props":{autoclear:!0,placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u53D1\u97F3\u4EBA\u7684\u7F16\u53F7"},default:0,"x-decorator-props":{tooltip:"\u53D1\u97F3\u4EBA\u7684\u7F16\u53F7\u9009\u62E9\uFF0C\u8BE6\u89C1 https://ai.baidu.com/ai-doc/SPEECH/Rluv3uq3d \u3002"}},spd:{type:"number",title:"\u8BED\u901F","x-decorator":"FormItem","x-component":"Select",enum:[{value:0},{value:1},{value:2},{value:3},{value:4},{value:5},{value:6},{value:7},{value:8},{value:9}],default:5,"x-decorator-props":{tooltip:"\u8BED\u901F\uFF0C\u53D6\u503C0-9\uFF0C\u9ED8\u8BA4\u4E3A5\u4E2D\u8BED\u901F"}},pit:{type:"number",title:"\u97F3\u8C03","x-decorator":"FormItem","x-component":"Select",enum:[{value:0},{value:1},{value:2},{value:3},{value:4},{value:5},{value:6},{value:7},{value:8},{value:9}],default:5,"x-decorator-props":{tooltip:"\u97F3\u8C03\uFF0C\u53D6\u503C0-9\uFF0C\u9ED8\u8BA4\u4E3A5\u4E2D\u8BED\u8C03"}},vol:{type:"number",title:"\u97F3\u91CF","x-decorator":"FormItem","x-component":"NumberPicker",default:5,"x-component-props":{min:0,max:15},"x-decorator-props":{tooltip:"\u97F3\u91CF\uFF0C\u53D6\u503C0-15\uFF0C\u9ED8\u8BA4\u4E3A5\u4E2D\u97F3\u91CF\u3002\u6CE8\u610F\u7CBE\u54C1\u5E93\u624D\u652F\u630110-15\u7684\u97F3\u91CF\uFF0C\u5176\u4ED6\u53EA\u80FD\u8BBE\u7F6E0-9\u3002"}},aue:{type:"string",title:"\u8BED\u97F3\u683C\u5F0F","x-decorator":"FormItem","x-component":"Select",enum:[{value:3,label:"mp3"},{value:4,label:"pcm-16k"},{value:5,label:"pcm-8k"},{value:6,label:"wav(default)"}],default:6,"x-decorator-props":{tooltip:"\u5982\u679C\u4E3A\u7279\u5B9A\u7A0B\u5E8F\u5F00\u542F\uFF0C\u9700\u8981\u6307\u5B9A\u5408\u6210\u540E\u7684\u97F3\u9891\u683C\u5F0F\uFF0C\u53EF\u4EE5\u5728\u6B64\u9009\u62E9\u3002"}}}}},desc:"\u767E\u5EA6\u8BED\u97F3\u5408\u6210"};constructor(e,t){if(!t.appId?.length||!t.apiKey?.length||!t.secretKey?.length)throw new Error("Baidu TTS skill need appId,apiKey,secretKey to work.");t.aue=t.aue??6,t.per=t.per??0,t.spd=t.spd??5,t.pit=t.pit??5,t.vol=t.vol??5,super(t),this._app=e,this._options=t,this._client=new en.speech(this._options.appId,this._options.apiKey,this._options.secretKey)}_client;get _maxToken(){return 1024}get options(){return this._options}get params(){return a.params}async getAudioBuffer(e,t){let o={aue:this._options.aue,per:this._options.per,spd:this._options.spd,pit:this._options.pit,vol:this._options.vol,cuid:`${t.source.options.instanceName}-${t.message.fromId}`},s=await this._client.text2audio(e,o);if(s.data)return s.data;this._logger.error(s?.err_msg??s)}};import tn from"baidu-aip-sdk";var gt=class a extends j{static{p(this,"BaiduSTTSkill")}_app;_options;static params={name:"baidu-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...j.params.optionsSchema.formily.properties,appId:{type:"string",title:"AppID","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u767E\u5EA6\u8BED\u97F3\u5E94\u7528\u7684AppID"},"x-decorator":"FormItem",required:!0},apiKey:{type:"string",title:"API Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u767E\u5EA6\u8BED\u97F3\u5E94\u7528\u7684API Key"},"x-decorator":"FormItem",required:!0},secretKey:{type:"string",title:"Secret Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u767E\u5EA6\u8BED\u97F3\u5E94\u7528\u7684API Secret"},"x-decorator":"FormItem",required:!0}}}},desc:"\u767E\u5EA6\u8BED\u97F3\u8BC6\u522B"};constructor(e,t){if(super(t),this._app=e,this._options=t,!t.appId?.length||!t.apiKey?.length||!t.secretKey?.length)throw new Error("Baidu STT skill need appId,apiKey,secretKey to work.");this._client=new tn.speech(this._options.appId,this._options.apiKey,this._options.secretKey)}_client;get options(){return this._options}get params(){return a.params}async _getText(e){this._logger.debug("\u5F00\u59CB\u8F6C\u6362\u8BED\u97F3\u5230\u6587\u672C");try{let t=await e.asBuffer(),o=await this._client.recognize(t,"wav",16e3,{len:t.length,cuid:"ppagent-baidu-stt",channel:1});if(o.err_no!==0){this._logger.error(o.err_msg);return}if(!o.result?.length){this._logger.warn("\u8F6C\u6362\u7ED3\u679C\u4E3A\u7A7A\uFF01");return}return o.result[0]}catch(t){this._logger.error(t.message);return}}};import on from"crypto-js/hmac-sha256.js";import sr from"crypto-js/enc-base64.js";import rn from"crypto-js/enc-utf8.js";import{WebSocket as sn}from"ws";var ft=class a extends j{static{p(this,"XunfeiSTTSkill")}_app;_options;static params={name:"xunfei-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...j.params.optionsSchema.formily.properties,appId:{type:"string",title:"AppID","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u8BAF\u98DE\u5E94\u7528\u7684AppID"},"x-decorator":"FormItem",required:!0},secretKey:{type:"string",title:"Secret Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u8BAF\u98DE\u5E94\u7528\u7684API Secret"},"x-decorator":"FormItem",required:!0},apiKey:{type:"string",title:"API Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u8BAF\u98DE\u5E94\u7528\u7684API Key"},"x-decorator":"FormItem",required:!0}}}},desc:"\u8BAF\u98DE\u8BED\u97F3\u8BC6\u522B"};constructor(e,t){if(super(t),this._app=e,this._options=t,this._hostUrl="wss://iat-api.xfyun.cn/v2/iat",this._host="iat-api.xfyun.cn",this._uri="/v2/iat",this._frame={STATUS_FIRST_FRAME:0,STATUS_CONTINUE_FRAME:1,STATUS_LAST_FRAME:2},!t.appId?.length||!t.apiKey?.length||!t.secretKey?.length)throw new Error("Xunfei STT skill need appId,apiKey,secretKey to work.");this._targetFormat="s16le"}_hostUrl;_host;_uri;_frame;get options(){return this._options}get params(){return a.params}_getAuthStr(e){let t=`host: ${this._host}
40
40
  date: ${e}
41
- GET ${this._uri} HTTP/1.1`,o=on(t,this._options.secretKey),s=sr.stringify(o),r=`api_key="${this._options.apiKey}", algorithm="hmac-sha256", headers="host date request-line", signature="${s}"`;return sr.stringify(rn.parse(r))}_getFrame(e,t){let o,s={status:t,format:"audio/L16;rate=16000",audio:e.toString("base64"),encoding:"raw"};switch(t){case this._frame.STATUS_FIRST_FRAME:o={common:{app_id:this._options.appId},business:{language:"zh_cn",domain:"iat",accent:"mandarin",dwa:"wpgs"},data:s},t=this._frame.STATUS_CONTINUE_FRAME;break;case this._frame.STATUS_CONTINUE_FRAME:case this._frame.STATUS_LAST_FRAME:o={data:s};break}return o}async _getText(e){this._logger.debug("\u5F00\u59CB\u8F6C\u6362\u8BED\u97F3\u5230\u6587\u672C");try{let t=new Date().toUTCString(),o=this._frame.STATUS_FIRST_FRAME,s="",r=[],i=this._hostUrl+"?authorization="+this._getAuthStr(t)+"&date="+t+"&host="+this._host,n=new sn(i),c=await e.asBuffer();return new Promise(m=>{n.on("open",()=>{this._logger.trace("xunfei websocket connect!");let h=this._getFrame(c,o);n.send(JSON.stringify(h)),o=this._frame.STATUS_LAST_FRAME,h=this._getFrame("",o),n.send(JSON.stringify(h))});let d;n.on("message",(h,u)=>{if(u){this._logger.error(`err:${u}`),n.close();return}let g=JSON.parse(h);if(g.code!=0){this._logger.error(`error code ${g.code}, reason ${g.message}`),n.close();return}let w="",x=!1;g.data.status==2?(s=g.sid,x=!0):w+="\u4E2D\u95F4\u8BC6\u522B\u7ED3\u679C\uFF1A",r[g.data.result.sn]=g.data.result,g.data.result.pgs=="rpl"&&g.data.result.rg.forEach(v=>{r[v]=null}),r.forEach(v=>{v?.ws.forEach(R=>{R.cw.forEach(ce=>{w+=ce.w})})}),x?(d=w,n.close()):this._logger.debug(w)}),n.on("close",()=>{this._logger.trace(`\u672C\u6B21\u8BC6\u522Bsid\uFF1A${s}`),this._logger.trace("connect close!"),m(d)}),n.on("error",h=>{this._logger.warn("websocket connect err: "+h),m(void 0)})})}catch(t){this._logger.error(t.message);return}}};import nn from"crypto-js/hmac-sha256.js";import nr from"crypto-js/enc-base64.js";import an from"crypto-js/enc-utf8.js";import{WebSocket as pn}from"ws";var ft=class a extends U{static{p(this,"XunfeiTTSSkill")}_app;_options;static params={name:"xunfei-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...U.params.optionsSchema.formily.properties,appId:{type:"string",title:"AppID","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u8BAF\u98DE\u5E94\u7528\u7684AppID"},"x-decorator":"FormItem",required:!0},secretKey:{type:"string",title:"Secret Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u8BAF\u98DE\u5E94\u7528\u7684API Secret"},"x-decorator":"FormItem",required:!0},apiKey:{type:"string",title:"API Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u8BAF\u98DE\u5E94\u7528\u7684API Key"},"x-decorator":"FormItem",required:!0},vcn:{type:"string",title:"\u53D1\u97F3\u4EBA","x-index":4,"x-decorator":"FormItem","x-component":"AutoComplete",enum:[{label:"\u5C0F\u71D5",value:"xiaoyan"},{label:"\u8BB8\u4E45",value:"aisjiuxu"},{label:"\u5C0F\u840D",value:"aisxping"},{label:"\u5C0F\u5A67",value:"aisjinger"},{label:"\u8BB8\u5C0F\u5B9D",value:"aisbabyxu"}],"x-component-props":{autoclear:!0,placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u53D1\u97F3\u4EBA\u7684\u7F16\u53F7"},default:"xiaoyan","x-decorator-props":{tooltip:"\u53D1\u97F3\u4EBA\u7684\u7F16\u53F7\u9009\u62E9\uFF0C\u8BE6\u89C1\u8BAF\u98DE\u63A7\u5236\u53F0 https://console.xfyun.cn/services/tts \u3002"}},speed:{type:"number",title:"\u8BED\u901F","x-decorator":"FormItem","x-component":"NumberPicker",default:50,"x-component-props":{min:0,max:100},"x-decorator-props":{tooltip:"\u8BED\u901F\uFF0C\u53D6\u503C0-100\uFF0C\u9ED8\u8BA4\u4E3A50\u4E2D\u8BED\u901F"}},pitch:{type:"number",title:"\u97F3\u8C03","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:0,max:100},default:50,"x-decorator-props":{tooltip:"\u97F3\u8C03\uFF0C\u53D6\u503C0-100\uFF0C\u9ED8\u8BA4\u4E3A50\u4E2D\u8BED\u8C03"}},volume:{type:"number",title:"\u97F3\u91CF","x-decorator":"FormItem","x-component":"NumberPicker",default:50,"x-component-props":{min:0,max:100},"x-decorator-props":{tooltip:"\u97F3\u91CF\uFF0C\u53D6\u503C0-100\uFF0C\u9ED8\u8BA4\u4E3A50\u4E2D\u97F3\u91CF\u3002"}}}}},desc:"\u8BAF\u98DE\u8BED\u97F3\u5408\u6210"};constructor(e,t){if(!t.appId?.length||!t.apiKey?.length||!t.secretKey?.length)throw new Error("Baidu TTS skill need appId,apiKey,secretKey to work.");t.vcn=t.vcn??"xiaoyan",t.speed=t.speed??50,t.pitch=t.pitch??50,t.volume=t.volume??50,super(t),this._app=e,this._options=t,this._hostUrl="wss://tts-api.xfyun.cn/v2/tts",this._host="iat-api.xfyun.cn",this._uri="/v2/tts"}_hostUrl;_host;_uri;get options(){return this._options}get params(){return a.params}get _maxToken(){return 2e3}_getAuthStr(e){let t=`host: ${this._host}
41
+ GET ${this._uri} HTTP/1.1`,o=on(t,this._options.secretKey),s=sr.stringify(o),r=`api_key="${this._options.apiKey}", algorithm="hmac-sha256", headers="host date request-line", signature="${s}"`;return sr.stringify(rn.parse(r))}_getFrame(e,t){let o,s={status:t,format:"audio/L16;rate=16000",audio:e.toString("base64"),encoding:"raw"};switch(t){case this._frame.STATUS_FIRST_FRAME:o={common:{app_id:this._options.appId},business:{language:"zh_cn",domain:"iat",accent:"mandarin",dwa:"wpgs"},data:s},t=this._frame.STATUS_CONTINUE_FRAME;break;case this._frame.STATUS_CONTINUE_FRAME:case this._frame.STATUS_LAST_FRAME:o={data:s};break}return o}async _getText(e){this._logger.debug("\u5F00\u59CB\u8F6C\u6362\u8BED\u97F3\u5230\u6587\u672C");try{let t=new Date().toUTCString(),o=this._frame.STATUS_FIRST_FRAME,s="",r=[],i=this._hostUrl+"?authorization="+this._getAuthStr(t)+"&date="+t+"&host="+this._host,n=new sn(i),c=await e.asBuffer();return new Promise(m=>{n.on("open",()=>{this._logger.trace("xunfei websocket connect!");let h=this._getFrame(c,o);n.send(JSON.stringify(h)),o=this._frame.STATUS_LAST_FRAME,h=this._getFrame("",o),n.send(JSON.stringify(h))});let d;n.on("message",(h,u)=>{if(u){this._logger.error(`err:${u}`),n.close();return}let g=JSON.parse(h);if(g.code!=0){this._logger.error(`error code ${g.code}, reason ${g.message}`),n.close();return}let w="",x=!1;g.data.status==2?(s=g.sid,x=!0):w+="\u4E2D\u95F4\u8BC6\u522B\u7ED3\u679C\uFF1A",r[g.data.result.sn]=g.data.result,g.data.result.pgs=="rpl"&&g.data.result.rg.forEach(v=>{r[v]=null}),r.forEach(v=>{v?.ws.forEach(R=>{R.cw.forEach(le=>{w+=le.w})})}),x?(d=w,n.close()):this._logger.debug(w)}),n.on("close",()=>{this._logger.trace(`\u672C\u6B21\u8BC6\u522Bsid\uFF1A${s}`),this._logger.trace("connect close!"),m(d)}),n.on("error",h=>{this._logger.warn("websocket connect err: "+h),m(void 0)})})}catch(t){this._logger.error(t.message);return}}};import nn from"crypto-js/hmac-sha256.js";import nr from"crypto-js/enc-base64.js";import an from"crypto-js/enc-utf8.js";import{WebSocket as pn}from"ws";var _t=class a extends U{static{p(this,"XunfeiTTSSkill")}_app;_options;static params={name:"xunfei-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...U.params.optionsSchema.formily.properties,appId:{type:"string",title:"AppID","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u8BAF\u98DE\u5E94\u7528\u7684AppID"},"x-decorator":"FormItem",required:!0},secretKey:{type:"string",title:"Secret Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u8BAF\u98DE\u5E94\u7528\u7684API Secret"},"x-decorator":"FormItem",required:!0},apiKey:{type:"string",title:"API Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u8BAF\u98DE\u5E94\u7528\u7684API Key"},"x-decorator":"FormItem",required:!0},vcn:{type:"string",title:"\u53D1\u97F3\u4EBA","x-index":4,"x-decorator":"FormItem","x-component":"AutoComplete",enum:[{label:"\u5C0F\u71D5",value:"xiaoyan"},{label:"\u8BB8\u4E45",value:"aisjiuxu"},{label:"\u5C0F\u840D",value:"aisxping"},{label:"\u5C0F\u5A67",value:"aisjinger"},{label:"\u8BB8\u5C0F\u5B9D",value:"aisbabyxu"}],"x-component-props":{autoclear:!0,placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u53D1\u97F3\u4EBA\u7684\u7F16\u53F7"},default:"xiaoyan","x-decorator-props":{tooltip:"\u53D1\u97F3\u4EBA\u7684\u7F16\u53F7\u9009\u62E9\uFF0C\u8BE6\u89C1\u8BAF\u98DE\u63A7\u5236\u53F0 https://console.xfyun.cn/services/tts \u3002"}},speed:{type:"number",title:"\u8BED\u901F","x-decorator":"FormItem","x-component":"NumberPicker",default:50,"x-component-props":{min:0,max:100},"x-decorator-props":{tooltip:"\u8BED\u901F\uFF0C\u53D6\u503C0-100\uFF0C\u9ED8\u8BA4\u4E3A50\u4E2D\u8BED\u901F"}},pitch:{type:"number",title:"\u97F3\u8C03","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:0,max:100},default:50,"x-decorator-props":{tooltip:"\u97F3\u8C03\uFF0C\u53D6\u503C0-100\uFF0C\u9ED8\u8BA4\u4E3A50\u4E2D\u8BED\u8C03"}},volume:{type:"number",title:"\u97F3\u91CF","x-decorator":"FormItem","x-component":"NumberPicker",default:50,"x-component-props":{min:0,max:100},"x-decorator-props":{tooltip:"\u97F3\u91CF\uFF0C\u53D6\u503C0-100\uFF0C\u9ED8\u8BA4\u4E3A50\u4E2D\u97F3\u91CF\u3002"}}}}},desc:"\u8BAF\u98DE\u8BED\u97F3\u5408\u6210"};constructor(e,t){if(!t.appId?.length||!t.apiKey?.length||!t.secretKey?.length)throw new Error("Baidu TTS skill need appId,apiKey,secretKey to work.");t.vcn=t.vcn??"xiaoyan",t.speed=t.speed??50,t.pitch=t.pitch??50,t.volume=t.volume??50,super(t),this._app=e,this._options=t,this._hostUrl="wss://tts-api.xfyun.cn/v2/tts",this._host="iat-api.xfyun.cn",this._uri="/v2/tts"}_hostUrl;_host;_uri;get options(){return this._options}get params(){return a.params}get _maxToken(){return 2e3}_getAuthStr(e){let t=`host: ${this._host}
42
42
  date: ${e}
43
- GET ${this._uri} HTTP/1.1`,o=nn(t,this._options.secretKey),s=nr.stringify(o),r=`api_key="${this._options.apiKey}", algorithm="hmac-sha256", headers="host date request-line", signature="${s}"`;return nr.stringify(an.parse(r))}async getAudioBuffer(e){let t=new Date().toUTCString(),o=this._hostUrl+"?authorization="+this._getAuthStr(t)+"&date="+t+"&host="+this._host,s=new pn(o);return new Promise(r=>{let i;s.on("open",()=>{this._logger.trace("websocket connect!");let n={common:{app_id:this._options.appId},business:{aue:"raw",auf:"audio/L16;rate=16000",vcn:this._options.vcn,speed:this._options.speed,volume:this._options.volume,pitch:this._options.pitch,tte:"UTF8"},data:{text:Buffer.from(e).toString("base64"),status:2}};s.send(JSON.stringify(n))}),s.on("message",(n,c)=>{if(c){this._logger.error("message error: "+c),s.close();return}let m=JSON.parse(n);if(m.code!=0){this._logger.error(`${m.code}: ${m.message}`),s.close();return}let d=m.data.audio,h=Buffer.from(d,"base64");i?i=Buffer.concat([i,h]):i=h,m.data.status==2&&(this._logger.trace("audio generated"),i=Buffer.from(Te(i.buffer,16e3,16,1)),s.close())}),s.on("close",()=>{this._logger.trace("connect close!"),r(i)}),s.on("error",n=>{this._logger.trace("websocket connect err: "+n),r(void 0)})})}};import cn from"tencentcloud-sdk-nodejs-asr";var ln=cn.asr.v20190614.Client,_t=class a extends j{static{p(this,"TencentSTTSkill")}_app;_options;static params={name:"tencent-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...j.params.optionsSchema.formily.properties,secretId:{type:"string",title:"Secret Id","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u817E\u8BAF\u7684SecretId"},"x-decorator":"FormItem",required:!0},secretKey:{type:"string",title:"Secret Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u817E\u8BAF\u7684SecretKey"},"x-decorator":"FormItem",required:!0}}}},desc:"\u817E\u8BAF\u8BED\u97F3\u8BC6\u522B"};constructor(e,t){if(super(t),this._app=e,this._options=t,!t.secretId?.length||!t.secretKey?.length)throw new Error("Tencent STT skill need appId,apiKey,secretKey to work.")}_client;async init(){this._client=new ln({credential:{secretId:this._options.secretId,secretKey:this._options.secretKey},region:"",profile:{httpProfile:{endpoint:"asr.tencentcloudapi.com"}}})}get options(){return this._options}get params(){return a.params}async _getText(e){this._logger.debug("\u5F00\u59CB\u8F6C\u6362\u8BED\u97F3\u5230\u6587\u672C");try{let t=await e.asBase64(),o=this._options.ensureAudioFormat?"wav":e.name.slice(e.name.lastIndexOf(".")+1);o==="ogg"&&(o="ogg-opus");let s={EngSerViceType:"16k_zh",SourceType:1,VoiceFormat:o,Data:t},r=await this._client.SentenceRecognition(s);if(!r.Result?.length){this._logger.warn("\u8BC6\u522B\u7ED3\u679C\u4E3A\u7A7A");return}return r.Result}catch(t){this._logger.error(t.message);return}}};import mn from"tencentcloud-sdk-nodejs-tts";import{v4 as dn}from"uuid";var hn=mn.tts.v20190823.Client,yt=class a extends U{static{p(this,"TencentTTSSkill")}_app;_options;static params={name:"tencent-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...U.params.optionsSchema.formily.properties,secretId:{type:"string",title:"Secret Id","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u817E\u8BAF\u7684SecretId"},"x-decorator":"FormItem",required:!0},secretKey:{type:"string",title:"Secret Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u817E\u8BAF\u7684SecretKey"},"x-decorator":"FormItem",required:!0},voice:{type:"number",title:"\u53D1\u97F3\u4EBA","x-index":4,"x-decorator":"FormItem","x-component":"AutoComplete",enum:[{label:"\u6807\u51C6\u97F3\u8272-\u7075\u60A6(\u901A\u7528\u5973\u58F0)",value:0},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u97F3(\u901A\u7528\u5973\u58F0)",value:1},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u5747(\u901A\u7528\u7537\u58F0)",value:2},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u79C0(\u5BA2\u670D\u5973\u58F0)",value:3},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u6167(\u5BA2\u670D\u5973\u58F0)",value:4},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u6717(\u901A\u7528\u7537\u58F0)",value:5},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u6E05(\u901A\u7528\u5973\u58F0)",value:6},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u667A(\u901A\u7528\u5973\u58F0)",value:7},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u777F(\u901A\u7528\u7537\u58F0)",value:8},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u6653(\u901A\u7528\u5973\u58F0)",value:9},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u79C0(\u7CA4\u8BED\u5973\u58F0)",value:10},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u900D\u9065(\u9605\u8BFB\u7537\u58F0)",value:10051e4},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u745C(\u60C5\u611F\u5973\u58F0)",value:101001},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u8046(\u901A\u7528\u5973\u58F0)",value:101002},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u7F8E(\u5BA2\u670D\u5973\u58F0)",value:101003},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u4E91(\u901A\u7528\u7537\u58F0)",value:101004},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u8389(\u901A\u7528\u5973\u58F0)",value:101005},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u742A(\u5BA2\u670D\u5973\u58F0)",value:101008},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u82B8(\u77E5\u6027\u5973\u58F0)",value:101009},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u534E(\u901A\u7528\u7537\u58F0)",value:101010},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u71D5(\u65B0\u95FB\u5973\u58F0)",value:101011},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u4E39(\u65B0\u95FB\u5973\u58F0)",value:101012},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u8F89(\u65B0\u95FB\u7537\u58F0)",value:101013},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u5B81(\u65B0\u95FB\u7537\u58F0)",value:101014},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u840C(\u7537\u7AE5\u58F0)",value:101015},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u751C(\u5973\u7AE5\u58F0)",value:101016},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u84C9(\u60C5\u611F\u5973\u58F0)",value:101017},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u9756(\u60C5\u611F\u7537\u58F0)",value:101018},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u5F64(\u7CA4\u8BED\u5973\u58F0)",value:101019},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u521A(\u65B0\u95FB\u7537\u58F0)",value:101020},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u745E(\u65B0\u95FB\u7537\u58F0)",value:101021},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u8679(\u65B0\u95FB\u5973\u58F0)",value:101022},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u8431(\u804A\u5929\u5973\u58F0)",value:101023},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u7693(\u804A\u5929\u7537\u58F0)",value:101024},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u8587(\u804A\u5929\u5973\u58F0)",value:101025},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u5E0C(\u901A\u7528\u5973\u58F0)",value:101026},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u6885(\u901A\u7528\u5973\u58F0)",value:101027},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u6D01(\u901A\u7528\u5973\u58F0)",value:101028},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u51EF(\u901A\u7528\u7537\u58F0)",value:101029},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u67EF(\u901A\u7528\u7537\u58F0)",value:101030},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u594E(\u901A\u7528\u7537\u58F0)",value:101031},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u82B3(\u901A\u7528\u5973\u58F0)",value:101032},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u84D3(\u5BA2\u670D\u5973\u58F0)",value:101033},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u4F73(\u5BA2\u670D\u5973\u58F0)",value:101081},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u82F1(\u5BA2\u670D\u5973\u58F0)",value:101080}],"x-component-props":{autoclear:!0,placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u53D1\u97F3\u4EBA\u7684\u7F16\u53F7"},default:0,"x-decorator-props":{tooltip:"\u53D1\u97F3\u4EBA\u7684\u7F16\u53F7\u9009\u62E9\uFF0C\u8BE6\u89C1 https://cloud.tencent.com/document/product/1073/92668#55924b56-1a73-4663-a7a1-a8dd82d6e823 \u3002"}},spd:{type:"number",title:"\u8BED\u901F","x-decorator":"FormItem","x-component":"NumberPicker",default:0,"x-decorator-props":{tooltip:"\u8BED\u901F\uFF0C\u53D6\u503C[-2,6]\uFF0C\u9ED8\u8BA4\u4E3A0\u4E2D\u8BED\u901F\uFF0C\u652F\u6301\u5C0F\u6570\u70B9\u4E24\u4F4D"},"x-component-props":{min:-2,max:6}},vol:{type:"number",title:"\u97F3\u91CF","x-decorator":"FormItem","x-component":"NumberPicker",default:0,"x-component-props":{min:-10,max:10},"x-decorator-props":{tooltip:"\u97F3\u91CF\uFF0C\u53D6\u503C[-10,10]\uFF0C\u9ED8\u8BA4\u4E3A0\u4E2D\u97F3\u91CF\u3002"}}}}},desc:"\u817E\u8BAF\u8BED\u97F3\u5408\u6210"};constructor(e,t){if(!t.secretId?.length||!t.secretKey?.length)throw new Error("Tencent TTS skill need appId,apiKey,secretKey to work.");t.spd=t.spd??0,t.vol=t.vol??0,t.voice=t.voice??0,super(t),this._app=e,this._options=t}_client;get _maxToken(){return 150}async init(){let e=new hn({credential:{secretId:this._options.secretId,secretKey:this._options.secretKey},region:"",profile:{httpProfile:{endpoint:"tts.tencentcloudapi.com"}}});this._client=e}get options(){return this._options}get params(){return a.params}async getAudioBuffer(e){try{let t=await this._client.TextToVoice({Text:e,SessionId:dn(),Volume:this._options.vol,Speed:this._options.spd,VoiceType:this._options.voice,SampleRate:16e3,Codec:"wav"});if(t?.Audio?.length)return Buffer.from(t.Audio,"base64");this._logger.error("\u5408\u6210\u5931\u8D25\uFF01");return}catch(t){this._logger.error(t.message);return}}};import un from"openai";var fe=class a extends j{static{p(this,"OpenAISTTSkill")}_app;_options;static params={name:"openai-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...j.params.optionsSchema.formily.properties,apiKey:{type:"string",title:"API Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5BC6\u94A5"},"x-decorator":"FormItem",required:!0},model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6A21\u578B\u7684\u540D\u79F0\uFF0C\u5982 whisper-1"},"x-decorator":"FormItem",required:!0},baseUrl:{type:"string",title:"Base Url","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5730\u5740\uFF08\u5305\u542B/v1)\uFF0C\u7559\u7A7A\u5C06\u4F7F\u7528OpenAI\u5B98\u65B9\u670D\u52A1\u3002"},"x-decorator":"FormItem"}}}},desc:"OpenAI\uFF08\u517C\u5BB9\uFF09\u8BED\u97F3\u8BC6\u522B"};constructor(e,t){if(super(t),this._app=e,this._options=t,!t.apiKey?.length)throw new Error("OpenAI STT skill need api key to work.");if(!t.model?.length)throw new Error("\u6A21\u578B\u540D\u79F0\u672A\u914D\u7F6E\uFF01")}_client;async init(){this._client=new un({apiKey:this._options.apiKey,baseURL:this._options.baseUrl})}get options(){return this._options}get params(){return a.params}async _getText(e){this._logger.debug("\u5F00\u59CB\u8F6C\u6362\u8BED\u97F3\u5230\u6587\u672C");try{let t=this._options.ensureAudioFormat?"wav":e.name.slice(e.name.lastIndexOf(".")+1);if(!["flac","mp3","mp4","mpeg","mpga","m4a","ogg","wav","webm"].includes(t.toLowerCase())){this._logger.warn("\u4E0D\u652F\u6301\u7684\u683C\u5F0F\u7C7B\u578B\uFF1A"+t);return}let o=await this._client.audio.transcriptions.create({file:await e.asReadStream(),model:this._options.model});if(!o.text?.length){this._logger.warn("\u8BC6\u522B\u7ED3\u679C\u4E3A\u7A7A");return}return o.text}catch(t){this._logger.error(t.message);return}}};var xt=class a extends fe{static{p(this,"SiliconFlowSTTSkill")}_app;_options;static params={name:"silicon-flow-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...fe.params.optionsSchema.formily.properties,model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6A21\u578B\u7684\u540D\u79F0\uFF0C\u5982 FunAudioLLM/SenseVoiceSmall"},"x-decorator":"FormItem",default:"FunAudioLLM/SenseVoiceSmall",required:!0},baseUrl:{type:"string",title:"Base Url","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5730\u5740\uFF08\u5305\u542B/v1)\uFF0C\u7559\u7A7A\u5C06\u4F7F\u7528\u7845\u57FA\u6D41\u52A8\u5B98\u65B9\u670D\u52A1\u3002"},"x-decorator":"FormItem",default:"https://api.siliconflow.cn/v1"}}}},desc:"\u7845\u57FA\u6D41\u52A8\u8BED\u97F3\u8BC6\u522B"};constructor(e,t){if(!t.apiKey?.length)throw new Error("Silicon Flow STT skill need api key to work.");if(t.baseUrl=t.baseUrl??"https://api.siliconflow.cn/v1",super(e,t),this._app=e,this._options=t,!t.model?.length)throw new Error("\u6A21\u578B\u540D\u79F0\u672A\u914D\u7F6E\uFF01")}get options(){return this._options}get params(){return a.params}};var _e=class a extends U{static{p(this,"OpenAITTSSkill")}_app;_options;static params={name:"openai-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...U.params.optionsSchema.formily.properties,apiKey:{type:"string",title:"API Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5BC6\u94A5"},"x-decorator":"FormItem",required:!0},model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6A21\u578B\u7684\u540D\u79F0\uFF0C\u5982 tts-1"},"x-decorator":"FormItem",required:!0},baseUrl:{type:"string",title:"Base Url","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5730\u5740\uFF08\u5305\u542B/v1)\uFF0C\u7559\u7A7A\u5C06\u4F7F\u7528OpenAI\u5B98\u65B9\u670D\u52A1\u3002"},"x-decorator":"FormItem"},voice:{type:"string",title:"\u53D1\u97F3\u4EBA","x-index":4,"x-decorator":"FormItem","x-component":"AutoComplete",enum:["alloy","ash","coral","echo","fable","onyx","nova","sage","shimmer"],"x-component-props":{autoclear:!0,placeholder:"\u8BF7\u8F93\u5165\u6216\u8005\u9009\u62E9\u53D1\u97F3\u4EBA\u7684\u540D\u79F0"},"x-decorator-props":{tooltip:"\u53D1\u97F3\u4EBA\u7684\u540D\u79F0\u9009\u62E9\uFF0C\u8BE6\u89C1 https://platform.openai.com/docs/api-reference/audio/createSpeech \u3002"}},speed:{type:"number",title:"\u8BED\u901F","x-decorator":"FormItem","x-component":"NumberPicker",default:1,"x-decorator-props":{tooltip:"\u8BED\u901F\uFF0C\u53D6\u503C[-0.25,4]\uFF0C\u9ED8\u8BA4\u4E3A1\u4E2D\u8BED\u901F"},"x-component-props":{min:.25,max:4}}}}},desc:"OpenAI\uFF08\u517C\u5BB9\uFF09\u8BED\u97F3\u5408\u6210"};constructor(e,t){if(!t.apiKey?.length||!t.model?.length||!t.voice?.length)throw new Error("OpenAI TTS skill need API KEY,model and voice to work.");super(t),this._app=e,this._options=t,this._format="wav"}_format;get _maxToken(){return 10240}get options(){return this._options}get params(){return a.params}_updateBody(e){return e}async getAudioBuffer(e){try{let t=await fetch(`${this._options.baseUrl}/audio/speech`,{method:"post",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this._options.apiKey}`},body:JSON.stringify(this._updateBody({model:this._options.model,input:e,voice:this._options.voice,response_format:this._format,speed:this._options.speed}))});if(t.ok)return Buffer.from(await t.arrayBuffer());this._logger.error("\u5408\u6210\u5931\u8D25\uFF01");return}catch(t){this._logger.error(t.message);return}}};var It=class a extends _e{static{p(this,"SiliconFlowTTSSkill")}_app;_options;static params={name:"silicon-flow-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{..._e.params.optionsSchema.formily.properties,model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6A21\u578B\u7684\u540D\u79F0\uFF0C\u5982 fishaudio/fish-speech-1.5"},"x-decorator":"FormItem",required:!0,default:"fishaudio/fish-speech-1.5"},baseUrl:{type:"string",title:"Base Url","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5730\u5740\uFF08\u5305\u542B/v1)\uFF0C\u7559\u7A7A\u5C06\u4F7F\u7528SiliconFlow\u5B98\u65B9\u670D\u52A1\u3002"},"x-decorator":"FormItem",default:"https://api.siliconflow.cn/v1"},voice:{type:"string",title:"\u53D1\u97F3\u4EBA","x-index":4,"x-decorator":"FormItem","x-component":"Input","x-component-props":{autoclear:!0,placeholder:"\u8BF7\u8F93\u5165\u53D1\u97F3\u4EBA\u7684\u540D\u79F0\uFF0C\u53EF\u4EE5\u5728\u5B98\u7F51\u6587\u6863\u67E5\u770B\u3002"},"x-decorator-props":{tooltip:"\u53D1\u97F3\u4EBA\u7684\u540D\u79F0\u9009\u62E9\uFF0C\u8BE6\u89C1 https://docs.siliconflow.cn/api-reference/audio/create-speech#body-sample-rate \u3002"},required:!0}}}},desc:"\u7845\u57FA\u6D41\u52A8\u8BED\u97F3\u5408\u6210"};constructor(e,t){t.baseUrl=t.baseUrl??"https://api.siliconflow.cn/v1",super(e,t),this._app=e,this._options=t,this._format="pcm"}_format;get options(){return this._options}get params(){return a.params}_updateBody(e){return e.sample_rate=16e3,e.stream=!1,e}async getAudioBuffer(e){try{let t=await super.getAudioBuffer(e);return t?Buffer.from(Te(t.buffer,16e3,16,1)):void 0}catch(t){this._logger.error(t.message);return}}};var wt=class a extends U{static{p(this,"FishAudioTTSSkill")}_app;_options;static params={name:"openai-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...U.params.optionsSchema.formily.properties,apiKey:{type:"string",title:"API Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5BC6\u94A5"},"x-decorator":"FormItem",required:!0},baseUrl:{type:"string",title:"Base Url","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5730\u5740\uFF0C\u5982 https://api.fish.audio\uFF0C\u7559\u7A7A\u5C06\u4F7F\u7528FishAudio\u5B98\u65B9\u670D\u52A1\u3002"},"x-decorator":"FormItem",default:"https://api.fish.audio"},referenceId:{type:"string",title:"\u53D1\u97F3\u4EBAID","x-index":4,"x-decorator":"FormItem","x-component":"Input","x-component-props":{autoclear:!0,placeholder:"\u8BF7\u8F93\u5165\u53D1\u97F3\u4EBA\u7684\u53C2\u8003ID\uFF0C\u5B98\u65B9API\u53EF\u4ECE\u5B98\u7F51\u67E5\u770B"},"x-decorator-props":{tooltip:"\u53D1\u97F3\u4EBA\u7684\u540D\u79F0\u9009\u62E9\uFF0C\u8BE6\u89C1 https://fish.audio/zh-CN/discovery/ \uFF0C\u9009\u62E9\u9700\u8981\u7684\u58F0\u97F3\u540E\u70B9\u51FB\u67E5\u770B\u8BE6\u60C5\uFF0C\u6D4F\u89C8\u5668\u5730\u5740\u4E2D\u7684\u4E00\u957F\u4E32MD5\u5C31\u662FID\uFF0C\u6216\u8005\u70B9\u51FB\u4E09\u4E2A\u5C0F\u70B9\u540E\u70B9\u51FB\u590D\u5236ID \u3002"}}}}},desc:"FishAudio\u8BED\u97F3\u5408\u6210"};constructor(e,t){if(!t.apiKey?.length||!t.referenceId?.length)throw new Error("Fish Audio TTS skill need API KEY,reference id voice to work.");t.baseUrl=t.baseUrl??"https://api.fish.audio",super(t),this._app=e,this._options=t}get _maxToken(){return 10240}get options(){return this._options}get params(){return a.params}async getAudioBuffer(e){try{let t=await fetch(`${this._options.baseUrl}/v1/tts`,{method:"post",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this._options.apiKey}`},body:JSON.stringify({reference_id:this._options.referenceId,text:e,format:"wav",sample_rate:16e3})});if(t.ok)return Buffer.from(await t.arrayBuffer());this._logger.error("\u5408\u6210\u5931\u8D25\uFF01");return}catch(t){this._logger.error(t.message),this._logger.error("\u8BF7\u68C0\u67E5\u60A8\u7684\u7F51\u7EDC\u662F\u5426\u80FD\u591F\u8FDE\u63A5\u5230fish audio\u3002");return}}};var Q=class a{static{p(this,"BaseDrawSkill")}_app;_options;static params={name:"base-draw-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...Ne,apiKey:{type:"string",title:"API Key","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5199\u60A8\u7684ApiKey"},"x-decorator-props":{tooltip:"\u8BF7\u786E\u8BA4\u60A8\u7684ApiKey\u5177\u5907\u76F8\u5173\u6743\u9650"},required:!0},apiBase:{type:"string",title:"API\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5165\u60A8\u7684API\u5730\u5740"},"x-decorator-props":{tooltip:"\u7ED8\u56FE\u7684API\u5730\u5740\u3002"}},model:{type:"string",title:"\u7ED8\u56FE\u6A21\u578B","x-decorator":"FormItem","x-component":"Input","x-decorator-props":{tooltip:"\u7ED8\u56FE\u6A21\u578B\uFF0C\u5FC5\u586B"}},size:{type:"string",title:"\u7ED8\u56FE\u5C3A\u5BF8","x-decorator":"FormItem","x-component":"Input"},triggerWords:{type:"string",title:"\u89E6\u53D1\u8BCD","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5199\u60A8\u7684\u6280\u80FD\u89E6\u53D1\u8BCD\uFF0C\u4EE5\u7A7A\u683C\u5206\u9694\u3002"},"x-decorator-props":{tooltip:"\u4EE5\u7A7A\u683C\u5206\u9694"},default:"\u753B\u56FE \u753B\u4E2A\u56FE \u753B\u753B \u753B\u5F20\u56FE \u7ED8\u56FE \u753B\u4E2A\u753B \u753B draw",required:!0},replyFormat:{type:"string",title:"\u56DE\u590D\u6D88\u606F\u683C\u5F0F","x-decorator":"FormItem","x-component":"Select",enum:[{label:"\u56FE\u7247",value:"IMAGE"},{label:"MarkDown",value:"TEXT"}],"x-decorator-props":{tooltip:"\u652F\u6301Markdown\u7684\u6D88\u606F\u6E90\u5EFA\u8BAE\u4F7F\u7528\u6587\u5B57"},default:"TEXT"},useLLM:{type:"boolean",title:"\u662F\u5426\u4F7F\u7528\u5927\u6A21\u578B\u8FDB\u884C\u63D0\u793A\u8BCD\u4F18\u5316","x-decorator":"FormItem","x-component":"Switch",default:!1,"x-decorator-props":{tooltip:"\u5982\u679C\u9009\u62E9\u4F7F\u7528\u5927\u6A21\u578B\u4F18\u5316\uFF0C\u4F46\u662F\u6CA1\u6709\u9009\u62E9\u7528\u4E8E\u4F18\u5316\u7684\u5927\u6A21\u578B\uFF0C\u5219\u4E5F\u4E0D\u4F1A\u751F\u6548\u3002"}},optimizer:{type:"string",title:"\u7528\u4E8E\u4F18\u5316\u7684\u5927\u6A21\u578B","x-decorator":"FormItem","x-component":"BotSelector","x-decorator-props":{tooltip:"\u8BF7\u9009\u62E9\u4E00\u4E2A\u7528\u6765\u4F18\u5316\u63D0\u793A\u8BCD\u7684\u540E\u7AEF\u5927\u6A21\u578B\u5B9E\u4F8B\uFF0C\u5F3A\u70C8\u5EFA\u8BAE\u5355\u72EC\u4E3A\u6B64\u529F\u80FD\u521B\u5EFA\u72EC\u7ACB\u5927\u6A21\u578B\u7684\u5B9E\u4F8B\uFF0C\u4EE5\u907F\u514D\u4E0A\u4E0B\u6587\u5E72\u6270\u3002\u4F18\u5316\u7684\u63D0\u793A\u8BCD\u7B49\u5185\u5BB9\u5728\u540E\u7AEF\u6A21\u578B\u521B\u5EFA\u7684\u65F6\u5019\u53EF\u4EE5\u8BBE\u5B9A\uFF0C\u5982\u679C\u662F\u667A\u80FD\u4F53\u6A21\u578B\uFF0C\u53EF\u4EE5\u5728\u667A\u80FD\u4F53\u5E73\u53F0\u8FDB\u884C\u8BBE\u5B9A\u3002"}}}}},desc:"\u57FA\u7840\u7ED8\u56FE\u6280\u80FD"};constructor(e,t){this._app=e,this._options=t,this._logger=y(this._options.instanceName)}_logger;get options(){return this._options}get params(){return a.params}async init(){}async applyOnSource(e){let t=be(e.message.content);if(!t?.trim().length){this._logger.trace("\u5F53\u524D\u7ED8\u56FE\u6307\u4EE4\u4E3A\u7A7A");return}t=t.trim(),t.startsWith(e.me?.nickName)&&(t=t.slice(e.me.nickName.length+1),this._logger.trace("remove nick name:"+e.me.nickName));let o=t.split(/\s+/),s=this._options.triggerWords.split(/\s+/);if(this._options.triggerWords?.indexOf(o[0])>=0||s.some(r=>t.startsWith(r))){let r=o.length>1?o.slice(1).join(","):t;if(!r?.length){this._logger.warn("\u7ED8\u56FE\u63D0\u793A\u8BCD\u4E3A\u7A7A\uFF01");return}if(this._options.useLLM)if(this._options.optimizer?.length){this._logger.debug("\u6B63\u5728\u4F18\u5316\u63D0\u793A\u8BCD");let c="\u8BF7\u5BF9\u4EE5\u4E0B\u7ED8\u56FE\u6216\u8005\u89C6\u9891\u751F\u6210\u7684\u63D0\u793A\u8BCD\u8FDB\u884C\u4F18\u5316\uFF1A"+r,m=this._app.botManager.getInstance(this._options.optimizer);if(!m)this._logger.error("\u7528\u4E8E\u4F18\u5316\u63D0\u793A\u8BCD\u7684\u5927\u6A21\u578B"+this._options.optimizer+"\u4E0D\u5B58\u5728!");else{let d=e.message,h={...d,type:l.TEXT,content:c,origin:void 0};e.message=h;try{let u=await m.prepareMessage(e),g="";await m.getResponse(e,{onContent:p((w,x)=>{x===l.TEXT&&(g+=w)},"onContent"),onError:p(w=>{this._logger.error(w)},"onError")},u,[]),r=g,this._logger.debug("\u4F18\u5316\u540E\u7684\u63D0\u793A\u8BCD\uFF1A"+r)}catch(u){this._logger.error(u.message)}finally{e.message=d}}}else this._logger.warn("\u60A8\u8BBE\u7F6E\u4E86\u4F7F\u7528\u5927\u6A21\u578B\u4F18\u5316\u63D0\u793A\u8BCD\uFF0C\u4F46\u662F\u6CA1\u6709\u8BBE\u5B9A\u7528\u4E8E\u4F18\u5316\u7684\u5927\u6A21\u578B\uFF01");this._logger.trace("draw with prompt "+r);let i=e.message.senderId,n=await this._draw(r,i,e);if(n?.url.length)if(e.message=void 0,this._options.replyFormat==="IMAGE"){let c={file:b.fromPath(n.url)};e.reply(c,l.IMAGE,void 0,!0),n.text?.length&&e.reply(n.text,l.TEXT,void 0,!0)}else if(this._options.replyFormat==="FILE"){let c={file:b.fromPath(n.url)};e.reply(c,l.FILE,void 0,!0),n.text?.length&&e.reply(n.text,l.TEXT,void 0,!0)}else if(this._options.replyFormat==="VIDEO"){let c={file:b.fromPath(n.url),previewImage:n.coverUrl?b.fromPath(n.coverUrl):void 0};e.reply(c,l.VIDEO,void 0,!0),n.text?.length&&e.reply(n.text,l.TEXT,void 0,!0)}else this._options.replyFormat==="URL"?e.reply(n.url+`
43
+ GET ${this._uri} HTTP/1.1`,o=nn(t,this._options.secretKey),s=nr.stringify(o),r=`api_key="${this._options.apiKey}", algorithm="hmac-sha256", headers="host date request-line", signature="${s}"`;return nr.stringify(an.parse(r))}async getAudioBuffer(e){let t=new Date().toUTCString(),o=this._hostUrl+"?authorization="+this._getAuthStr(t)+"&date="+t+"&host="+this._host,s=new pn(o);return new Promise(r=>{let i;s.on("open",()=>{this._logger.trace("websocket connect!");let n={common:{app_id:this._options.appId},business:{aue:"raw",auf:"audio/L16;rate=16000",vcn:this._options.vcn,speed:this._options.speed,volume:this._options.volume,pitch:this._options.pitch,tte:"UTF8"},data:{text:Buffer.from(e).toString("base64"),status:2}};s.send(JSON.stringify(n))}),s.on("message",(n,c)=>{if(c){this._logger.error("message error: "+c),s.close();return}let m=JSON.parse(n);if(m.code!=0){this._logger.error(`${m.code}: ${m.message}`),s.close();return}let d=m.data.audio,h=Buffer.from(d,"base64");i?i=Buffer.concat([i,h]):i=h,m.data.status==2&&(this._logger.trace("audio generated"),i=Buffer.from(Te(i.buffer,16e3,16,1)),s.close())}),s.on("close",()=>{this._logger.trace("connect close!"),r(i)}),s.on("error",n=>{this._logger.trace("websocket connect err: "+n),r(void 0)})})}};import cn from"tencentcloud-sdk-nodejs-asr";var ln=cn.asr.v20190614.Client,yt=class a extends j{static{p(this,"TencentSTTSkill")}_app;_options;static params={name:"tencent-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...j.params.optionsSchema.formily.properties,secretId:{type:"string",title:"Secret Id","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u817E\u8BAF\u7684SecretId"},"x-decorator":"FormItem",required:!0},secretKey:{type:"string",title:"Secret Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u817E\u8BAF\u7684SecretKey"},"x-decorator":"FormItem",required:!0}}}},desc:"\u817E\u8BAF\u8BED\u97F3\u8BC6\u522B"};constructor(e,t){if(super(t),this._app=e,this._options=t,!t.secretId?.length||!t.secretKey?.length)throw new Error("Tencent STT skill need appId,apiKey,secretKey to work.")}_client;async init(){this._client=new ln({credential:{secretId:this._options.secretId,secretKey:this._options.secretKey},region:"",profile:{httpProfile:{endpoint:"asr.tencentcloudapi.com"}}})}get options(){return this._options}get params(){return a.params}async _getText(e){this._logger.debug("\u5F00\u59CB\u8F6C\u6362\u8BED\u97F3\u5230\u6587\u672C");try{let t=await e.asBase64(),o=this._options.ensureAudioFormat?"wav":e.name.slice(e.name.lastIndexOf(".")+1);o==="ogg"&&(o="ogg-opus");let s={EngSerViceType:"16k_zh",SourceType:1,VoiceFormat:o,Data:t},r=await this._client.SentenceRecognition(s);if(!r.Result?.length){this._logger.warn("\u8BC6\u522B\u7ED3\u679C\u4E3A\u7A7A");return}return r.Result}catch(t){this._logger.error(t.message);return}}};import mn from"tencentcloud-sdk-nodejs-tts";import{v4 as dn}from"uuid";var hn=mn.tts.v20190823.Client,xt=class a extends U{static{p(this,"TencentTTSSkill")}_app;_options;static params={name:"tencent-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...U.params.optionsSchema.formily.properties,secretId:{type:"string",title:"Secret Id","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u817E\u8BAF\u7684SecretId"},"x-decorator":"FormItem",required:!0},secretKey:{type:"string",title:"Secret Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u817E\u8BAF\u7684SecretKey"},"x-decorator":"FormItem",required:!0},voice:{type:"number",title:"\u53D1\u97F3\u4EBA","x-index":4,"x-decorator":"FormItem","x-component":"AutoComplete",enum:[{label:"\u6807\u51C6\u97F3\u8272-\u7075\u60A6(\u901A\u7528\u5973\u58F0)",value:0},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u97F3(\u901A\u7528\u5973\u58F0)",value:1},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u5747(\u901A\u7528\u7537\u58F0)",value:2},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u79C0(\u5BA2\u670D\u5973\u58F0)",value:3},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u6167(\u5BA2\u670D\u5973\u58F0)",value:4},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u6717(\u901A\u7528\u7537\u58F0)",value:5},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u6E05(\u901A\u7528\u5973\u58F0)",value:6},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u667A(\u901A\u7528\u5973\u58F0)",value:7},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u777F(\u901A\u7528\u7537\u58F0)",value:8},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u6653(\u901A\u7528\u5973\u58F0)",value:9},{label:"\u6807\u51C6\u97F3\u8272-\u7075\u79C0(\u7CA4\u8BED\u5973\u58F0)",value:10},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u900D\u9065(\u9605\u8BFB\u7537\u58F0)",value:10051e4},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u745C(\u60C5\u611F\u5973\u58F0)",value:101001},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u8046(\u901A\u7528\u5973\u58F0)",value:101002},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u7F8E(\u5BA2\u670D\u5973\u58F0)",value:101003},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u4E91(\u901A\u7528\u7537\u58F0)",value:101004},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u8389(\u901A\u7528\u5973\u58F0)",value:101005},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u742A(\u5BA2\u670D\u5973\u58F0)",value:101008},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u82B8(\u77E5\u6027\u5973\u58F0)",value:101009},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u534E(\u901A\u7528\u7537\u58F0)",value:101010},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u71D5(\u65B0\u95FB\u5973\u58F0)",value:101011},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u4E39(\u65B0\u95FB\u5973\u58F0)",value:101012},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u8F89(\u65B0\u95FB\u7537\u58F0)",value:101013},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u5B81(\u65B0\u95FB\u7537\u58F0)",value:101014},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u840C(\u7537\u7AE5\u58F0)",value:101015},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u751C(\u5973\u7AE5\u58F0)",value:101016},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u84C9(\u60C5\u611F\u5973\u58F0)",value:101017},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u9756(\u60C5\u611F\u7537\u58F0)",value:101018},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u5F64(\u7CA4\u8BED\u5973\u58F0)",value:101019},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u521A(\u65B0\u95FB\u7537\u58F0)",value:101020},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u745E(\u65B0\u95FB\u7537\u58F0)",value:101021},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u8679(\u65B0\u95FB\u5973\u58F0)",value:101022},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u8431(\u804A\u5929\u5973\u58F0)",value:101023},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u7693(\u804A\u5929\u7537\u58F0)",value:101024},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u8587(\u804A\u5929\u5973\u58F0)",value:101025},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u5E0C(\u901A\u7528\u5973\u58F0)",value:101026},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u6885(\u901A\u7528\u5973\u58F0)",value:101027},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u6D01(\u901A\u7528\u5973\u58F0)",value:101028},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u51EF(\u901A\u7528\u7537\u58F0)",value:101029},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u67EF(\u901A\u7528\u7537\u58F0)",value:101030},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u594E(\u901A\u7528\u7537\u58F0)",value:101031},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u82B3(\u901A\u7528\u5973\u58F0)",value:101032},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u84D3(\u5BA2\u670D\u5973\u58F0)",value:101033},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u4F73(\u5BA2\u670D\u5973\u58F0)",value:101081},{label:"\u7CBE\u54C1\u97F3\u8272-\u667A\u82F1(\u5BA2\u670D\u5973\u58F0)",value:101080}],"x-component-props":{autoclear:!0,placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u53D1\u97F3\u4EBA\u7684\u7F16\u53F7"},default:0,"x-decorator-props":{tooltip:"\u53D1\u97F3\u4EBA\u7684\u7F16\u53F7\u9009\u62E9\uFF0C\u8BE6\u89C1 https://cloud.tencent.com/document/product/1073/92668#55924b56-1a73-4663-a7a1-a8dd82d6e823 \u3002"}},spd:{type:"number",title:"\u8BED\u901F","x-decorator":"FormItem","x-component":"NumberPicker",default:0,"x-decorator-props":{tooltip:"\u8BED\u901F\uFF0C\u53D6\u503C[-2,6]\uFF0C\u9ED8\u8BA4\u4E3A0\u4E2D\u8BED\u901F\uFF0C\u652F\u6301\u5C0F\u6570\u70B9\u4E24\u4F4D"},"x-component-props":{min:-2,max:6}},vol:{type:"number",title:"\u97F3\u91CF","x-decorator":"FormItem","x-component":"NumberPicker",default:0,"x-component-props":{min:-10,max:10},"x-decorator-props":{tooltip:"\u97F3\u91CF\uFF0C\u53D6\u503C[-10,10]\uFF0C\u9ED8\u8BA4\u4E3A0\u4E2D\u97F3\u91CF\u3002"}}}}},desc:"\u817E\u8BAF\u8BED\u97F3\u5408\u6210"};constructor(e,t){if(!t.secretId?.length||!t.secretKey?.length)throw new Error("Tencent TTS skill need appId,apiKey,secretKey to work.");t.spd=t.spd??0,t.vol=t.vol??0,t.voice=t.voice??0,super(t),this._app=e,this._options=t}_client;get _maxToken(){return 150}async init(){let e=new hn({credential:{secretId:this._options.secretId,secretKey:this._options.secretKey},region:"",profile:{httpProfile:{endpoint:"tts.tencentcloudapi.com"}}});this._client=e}get options(){return this._options}get params(){return a.params}async getAudioBuffer(e){try{let t=await this._client.TextToVoice({Text:e,SessionId:dn(),Volume:this._options.vol,Speed:this._options.spd,VoiceType:this._options.voice,SampleRate:16e3,Codec:"wav"});if(t?.Audio?.length)return Buffer.from(t.Audio,"base64");this._logger.error("\u5408\u6210\u5931\u8D25\uFF01");return}catch(t){this._logger.error(t.message);return}}};import un from"openai";var _e=class a extends j{static{p(this,"OpenAISTTSkill")}_app;_options;static params={name:"openai-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...j.params.optionsSchema.formily.properties,apiKey:{type:"string",title:"API Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5BC6\u94A5"},"x-decorator":"FormItem",required:!0},model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6A21\u578B\u7684\u540D\u79F0\uFF0C\u5982 whisper-1"},"x-decorator":"FormItem",required:!0},baseUrl:{type:"string",title:"Base Url","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5730\u5740\uFF08\u5305\u542B/v1)\uFF0C\u7559\u7A7A\u5C06\u4F7F\u7528OpenAI\u5B98\u65B9\u670D\u52A1\u3002"},"x-decorator":"FormItem"}}}},desc:"OpenAI\uFF08\u517C\u5BB9\uFF09\u8BED\u97F3\u8BC6\u522B"};constructor(e,t){if(super(t),this._app=e,this._options=t,!t.apiKey?.length)throw new Error("OpenAI STT skill need api key to work.");if(!t.model?.length)throw new Error("\u6A21\u578B\u540D\u79F0\u672A\u914D\u7F6E\uFF01")}_client;async init(){this._client=new un({apiKey:this._options.apiKey,baseURL:this._options.baseUrl})}get options(){return this._options}get params(){return a.params}async _getText(e){this._logger.debug("\u5F00\u59CB\u8F6C\u6362\u8BED\u97F3\u5230\u6587\u672C");try{let t=this._options.ensureAudioFormat?"wav":e.name.slice(e.name.lastIndexOf(".")+1);if(!["flac","mp3","mp4","mpeg","mpga","m4a","ogg","wav","webm"].includes(t.toLowerCase())){this._logger.warn("\u4E0D\u652F\u6301\u7684\u683C\u5F0F\u7C7B\u578B\uFF1A"+t);return}let o=await this._client.audio.transcriptions.create({file:await e.asReadStream(),model:this._options.model});if(!o.text?.length){this._logger.warn("\u8BC6\u522B\u7ED3\u679C\u4E3A\u7A7A");return}return o.text}catch(t){this._logger.error(t.message);return}}};var It=class a extends _e{static{p(this,"SiliconFlowSTTSkill")}_app;_options;static params={name:"silicon-flow-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{..._e.params.optionsSchema.formily.properties,model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6A21\u578B\u7684\u540D\u79F0\uFF0C\u5982 FunAudioLLM/SenseVoiceSmall"},"x-decorator":"FormItem",default:"FunAudioLLM/SenseVoiceSmall",required:!0},baseUrl:{type:"string",title:"Base Url","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5730\u5740\uFF08\u5305\u542B/v1)\uFF0C\u7559\u7A7A\u5C06\u4F7F\u7528\u7845\u57FA\u6D41\u52A8\u5B98\u65B9\u670D\u52A1\u3002"},"x-decorator":"FormItem",default:"https://api.siliconflow.cn/v1"}}}},desc:"\u7845\u57FA\u6D41\u52A8\u8BED\u97F3\u8BC6\u522B"};constructor(e,t){if(!t.apiKey?.length)throw new Error("Silicon Flow STT skill need api key to work.");if(t.baseUrl=t.baseUrl??"https://api.siliconflow.cn/v1",super(e,t),this._app=e,this._options=t,!t.model?.length)throw new Error("\u6A21\u578B\u540D\u79F0\u672A\u914D\u7F6E\uFF01")}get options(){return this._options}get params(){return a.params}};var ye=class a extends U{static{p(this,"OpenAITTSSkill")}_app;_options;static params={name:"openai-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...U.params.optionsSchema.formily.properties,apiKey:{type:"string",title:"API Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5BC6\u94A5"},"x-decorator":"FormItem",required:!0},model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6A21\u578B\u7684\u540D\u79F0\uFF0C\u5982 tts-1"},"x-decorator":"FormItem",required:!0},baseUrl:{type:"string",title:"Base Url","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5730\u5740\uFF08\u5305\u542B/v1)\uFF0C\u7559\u7A7A\u5C06\u4F7F\u7528OpenAI\u5B98\u65B9\u670D\u52A1\u3002"},"x-decorator":"FormItem"},voice:{type:"string",title:"\u53D1\u97F3\u4EBA","x-index":4,"x-decorator":"FormItem","x-component":"AutoComplete",enum:["alloy","ash","coral","echo","fable","onyx","nova","sage","shimmer"],"x-component-props":{autoclear:!0,placeholder:"\u8BF7\u8F93\u5165\u6216\u8005\u9009\u62E9\u53D1\u97F3\u4EBA\u7684\u540D\u79F0"},"x-decorator-props":{tooltip:"\u53D1\u97F3\u4EBA\u7684\u540D\u79F0\u9009\u62E9\uFF0C\u8BE6\u89C1 https://platform.openai.com/docs/api-reference/audio/createSpeech \u3002"}},speed:{type:"number",title:"\u8BED\u901F","x-decorator":"FormItem","x-component":"NumberPicker",default:1,"x-decorator-props":{tooltip:"\u8BED\u901F\uFF0C\u53D6\u503C[-0.25,4]\uFF0C\u9ED8\u8BA4\u4E3A1\u4E2D\u8BED\u901F"},"x-component-props":{min:.25,max:4}}}}},desc:"OpenAI\uFF08\u517C\u5BB9\uFF09\u8BED\u97F3\u5408\u6210"};constructor(e,t){if(!t.apiKey?.length||!t.model?.length||!t.voice?.length)throw new Error("OpenAI TTS skill need API KEY,model and voice to work.");super(t),this._app=e,this._options=t,this._format="wav"}_format;get _maxToken(){return 10240}get options(){return this._options}get params(){return a.params}_updateBody(e){return e}async getAudioBuffer(e){try{let t=await fetch(`${this._options.baseUrl}/audio/speech`,{method:"post",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this._options.apiKey}`},body:JSON.stringify(this._updateBody({model:this._options.model,input:e,voice:this._options.voice,response_format:this._format,speed:this._options.speed}))});if(t.ok)return Buffer.from(await t.arrayBuffer());this._logger.error("\u5408\u6210\u5931\u8D25\uFF01");return}catch(t){this._logger.error(t.message);return}}};var wt=class a extends ye{static{p(this,"SiliconFlowTTSSkill")}_app;_options;static params={name:"silicon-flow-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...ye.params.optionsSchema.formily.properties,model:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6A21\u578B\u7684\u540D\u79F0\uFF0C\u5982 fishaudio/fish-speech-1.5"},"x-decorator":"FormItem",required:!0,default:"fishaudio/fish-speech-1.5"},baseUrl:{type:"string",title:"Base Url","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5730\u5740\uFF08\u5305\u542B/v1)\uFF0C\u7559\u7A7A\u5C06\u4F7F\u7528SiliconFlow\u5B98\u65B9\u670D\u52A1\u3002"},"x-decorator":"FormItem",default:"https://api.siliconflow.cn/v1"},voice:{type:"string",title:"\u53D1\u97F3\u4EBA","x-index":4,"x-decorator":"FormItem","x-component":"Input","x-component-props":{autoclear:!0,placeholder:"\u8BF7\u8F93\u5165\u53D1\u97F3\u4EBA\u7684\u540D\u79F0\uFF0C\u53EF\u4EE5\u5728\u5B98\u7F51\u6587\u6863\u67E5\u770B\u3002"},"x-decorator-props":{tooltip:"\u53D1\u97F3\u4EBA\u7684\u540D\u79F0\u9009\u62E9\uFF0C\u8BE6\u89C1 https://docs.siliconflow.cn/api-reference/audio/create-speech#body-sample-rate \u3002"},required:!0}}}},desc:"\u7845\u57FA\u6D41\u52A8\u8BED\u97F3\u5408\u6210"};constructor(e,t){t.baseUrl=t.baseUrl??"https://api.siliconflow.cn/v1",super(e,t),this._app=e,this._options=t,this._format="pcm"}_format;get options(){return this._options}get params(){return a.params}_updateBody(e){return e.sample_rate=16e3,e.stream=!1,e}async getAudioBuffer(e){try{let t=await super.getAudioBuffer(e);return t?Buffer.from(Te(t.buffer,16e3,16,1)):void 0}catch(t){this._logger.error(t.message);return}}};var bt=class a extends U{static{p(this,"FishAudioTTSSkill")}_app;_options;static params={name:"fish-audio-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...U.params.optionsSchema.formily.properties,apiKey:{type:"string",title:"API Key","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5BC6\u94A5"},"x-decorator":"FormItem",required:!0},baseUrl:{type:"string",title:"Base Url","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5730\u5740\uFF0C\u5982 https://api.fish.audio\uFF0C\u7559\u7A7A\u5C06\u4F7F\u7528FishAudio\u5B98\u65B9\u670D\u52A1\u3002"},"x-decorator":"FormItem",default:"https://api.fish.audio"},referenceId:{type:"string",title:"\u53D1\u97F3\u4EBAID","x-index":4,"x-decorator":"FormItem","x-component":"Input","x-component-props":{autoclear:!0,placeholder:"\u8BF7\u8F93\u5165\u53D1\u97F3\u4EBA\u7684\u53C2\u8003ID\uFF0C\u5B98\u65B9API\u53EF\u4ECE\u5B98\u7F51\u67E5\u770B"},"x-decorator-props":{tooltip:"\u53D1\u97F3\u4EBA\u7684\u540D\u79F0\u9009\u62E9\uFF0C\u8BE6\u89C1 https://fish.audio/zh-CN/discovery/ \uFF0C\u9009\u62E9\u9700\u8981\u7684\u58F0\u97F3\u540E\u70B9\u51FB\u67E5\u770B\u8BE6\u60C5\uFF0C\u6D4F\u89C8\u5668\u5730\u5740\u4E2D\u7684\u4E00\u957F\u4E32MD5\u5C31\u662FID\uFF0C\u6216\u8005\u70B9\u51FB\u4E09\u4E2A\u5C0F\u70B9\u540E\u70B9\u51FB\u590D\u5236ID \u3002"}}}}},desc:"FishAudio\u8BED\u97F3\u5408\u6210"};constructor(e,t){if(!t.apiKey?.length||!t.referenceId?.length)throw new Error("Fish Audio TTS skill need API KEY,reference id voice to work.");t.baseUrl=t.baseUrl??"https://api.fish.audio",super(t),this._app=e,this._options=t}get _maxToken(){return 10240}get options(){return this._options}get params(){return a.params}async getAudioBuffer(e){try{let t=await fetch(`${this._options.baseUrl}/v1/tts`,{method:"post",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this._options.apiKey}`},body:JSON.stringify({reference_id:this._options.referenceId,text:e,format:"wav",sample_rate:16e3})});if(t.ok)return Buffer.from(await t.arrayBuffer());this._logger.error("\u5408\u6210\u5931\u8D25\uFF01");return}catch(t){this._logger.error(t.message),this._logger.error("\u8BF7\u68C0\u67E5\u60A8\u7684\u7F51\u7EDC\u662F\u5426\u80FD\u591F\u8FDE\u63A5\u5230fish audio\u3002");return}}};var Q=class a{static{p(this,"BaseDrawSkill")}_app;_options;static params={name:"base-draw-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...Ne,apiKey:{type:"string",title:"API Key","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5199\u60A8\u7684ApiKey"},"x-decorator-props":{tooltip:"\u8BF7\u786E\u8BA4\u60A8\u7684ApiKey\u5177\u5907\u76F8\u5173\u6743\u9650"},required:!0},apiBase:{type:"string",title:"API\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5165\u60A8\u7684API\u5730\u5740"},"x-decorator-props":{tooltip:"\u7ED8\u56FE\u7684API\u5730\u5740\u3002"}},model:{type:"string",title:"\u7ED8\u56FE\u6A21\u578B","x-decorator":"FormItem","x-component":"Input","x-decorator-props":{tooltip:"\u7ED8\u56FE\u6A21\u578B\uFF0C\u5FC5\u586B"}},size:{type:"string",title:"\u7ED8\u56FE\u5C3A\u5BF8","x-decorator":"FormItem","x-component":"Input"},triggerWords:{type:"string",title:"\u89E6\u53D1\u8BCD","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5199\u60A8\u7684\u6280\u80FD\u89E6\u53D1\u8BCD\uFF0C\u4EE5\u7A7A\u683C\u5206\u9694\u3002"},"x-decorator-props":{tooltip:"\u4EE5\u7A7A\u683C\u5206\u9694"},default:"\u753B\u56FE \u753B\u4E2A\u56FE \u753B\u753B \u753B\u5F20\u56FE \u7ED8\u56FE \u753B\u4E2A\u753B \u753B draw",required:!0},replyFormat:{type:"string",title:"\u56DE\u590D\u6D88\u606F\u683C\u5F0F","x-decorator":"FormItem","x-component":"Select",enum:[{label:"\u56FE\u7247",value:"IMAGE"},{label:"MarkDown",value:"TEXT"}],"x-decorator-props":{tooltip:"\u652F\u6301Markdown\u7684\u6D88\u606F\u6E90\u5EFA\u8BAE\u4F7F\u7528\u6587\u5B57"},default:"TEXT"},useLLM:{type:"boolean",title:"\u662F\u5426\u4F7F\u7528\u5927\u6A21\u578B\u8FDB\u884C\u63D0\u793A\u8BCD\u4F18\u5316","x-decorator":"FormItem","x-component":"Switch",default:!1,"x-decorator-props":{tooltip:"\u5982\u679C\u9009\u62E9\u4F7F\u7528\u5927\u6A21\u578B\u4F18\u5316\uFF0C\u4F46\u662F\u6CA1\u6709\u9009\u62E9\u7528\u4E8E\u4F18\u5316\u7684\u5927\u6A21\u578B\uFF0C\u5219\u4E5F\u4E0D\u4F1A\u751F\u6548\u3002"}},optimizer:{type:"string",title:"\u7528\u4E8E\u4F18\u5316\u7684\u5927\u6A21\u578B","x-decorator":"FormItem","x-component":"BotSelector","x-decorator-props":{tooltip:"\u8BF7\u9009\u62E9\u4E00\u4E2A\u7528\u6765\u4F18\u5316\u63D0\u793A\u8BCD\u7684\u540E\u7AEF\u5927\u6A21\u578B\u5B9E\u4F8B\uFF0C\u5F3A\u70C8\u5EFA\u8BAE\u5355\u72EC\u4E3A\u6B64\u529F\u80FD\u521B\u5EFA\u72EC\u7ACB\u5927\u6A21\u578B\u7684\u5B9E\u4F8B\uFF0C\u4EE5\u907F\u514D\u4E0A\u4E0B\u6587\u5E72\u6270\u3002\u4F18\u5316\u7684\u63D0\u793A\u8BCD\u7B49\u5185\u5BB9\u5728\u540E\u7AEF\u6A21\u578B\u521B\u5EFA\u7684\u65F6\u5019\u53EF\u4EE5\u8BBE\u5B9A\uFF0C\u5982\u679C\u662F\u667A\u80FD\u4F53\u6A21\u578B\uFF0C\u53EF\u4EE5\u5728\u667A\u80FD\u4F53\u5E73\u53F0\u8FDB\u884C\u8BBE\u5B9A\u3002"}}}}},desc:"\u57FA\u7840\u7ED8\u56FE\u6280\u80FD"};constructor(e,t){this._app=e,this._options=t,this._logger=y(this._options.instanceName)}_logger;get options(){return this._options}get params(){return a.params}async init(){}async applyOnSource(e){let t=ve(e.message.content);if(!t?.trim().length){this._logger.trace("\u5F53\u524D\u7ED8\u56FE\u6307\u4EE4\u4E3A\u7A7A");return}t=t.trim(),t.startsWith(e.me?.nickName)&&(t=t.slice(e.me.nickName.length+1),this._logger.trace("remove nick name:"+e.me.nickName));let o=t.split(/\s+/),s=this._options.triggerWords.split(/\s+/);if(this._options.triggerWords?.indexOf(o[0])>=0||s.some(r=>t.startsWith(r))){let r=o.length>1?o.slice(1).join(","):t;if(!r?.length){this._logger.warn("\u7ED8\u56FE\u63D0\u793A\u8BCD\u4E3A\u7A7A\uFF01");return}if(this._options.useLLM)if(this._options.optimizer?.length){this._logger.debug("\u6B63\u5728\u4F18\u5316\u63D0\u793A\u8BCD");let c="\u8BF7\u5BF9\u4EE5\u4E0B\u7ED8\u56FE\u6216\u8005\u89C6\u9891\u751F\u6210\u7684\u63D0\u793A\u8BCD\u8FDB\u884C\u4F18\u5316\uFF1A"+r,m=this._app.botManager.getInstance(this._options.optimizer);if(!m)this._logger.error("\u7528\u4E8E\u4F18\u5316\u63D0\u793A\u8BCD\u7684\u5927\u6A21\u578B"+this._options.optimizer+"\u4E0D\u5B58\u5728!");else{let d=e.message,h={...d,type:l.TEXT,content:c,origin:void 0};e.message=h;try{let u=await m.prepareMessage(e),g="";await m.getResponse(e,{onContent:p((w,x)=>{x===l.TEXT&&(g+=w)},"onContent"),onError:p(w=>{this._logger.error(w)},"onError")},u,[]),r=g,this._logger.debug("\u4F18\u5316\u540E\u7684\u63D0\u793A\u8BCD\uFF1A"+r)}catch(u){this._logger.error(u.message)}finally{e.message=d}}}else this._logger.warn("\u60A8\u8BBE\u7F6E\u4E86\u4F7F\u7528\u5927\u6A21\u578B\u4F18\u5316\u63D0\u793A\u8BCD\uFF0C\u4F46\u662F\u6CA1\u6709\u8BBE\u5B9A\u7528\u4E8E\u4F18\u5316\u7684\u5927\u6A21\u578B\uFF01");this._logger.trace("draw with prompt "+r);let i=e.message.senderId,n=await this._draw(r,i,e);if(n?.url.length)if(e.message=void 0,this._options.replyFormat==="IMAGE"){let c={file:b.fromPath(n.url)};e.reply(c,l.IMAGE,void 0,!0),n.text?.length&&e.reply(n.text,l.TEXT,void 0,!0)}else if(this._options.replyFormat==="FILE"){let c={file:b.fromPath(n.url)};e.reply(c,l.FILE,void 0,!0),n.text?.length&&e.reply(n.text,l.TEXT,void 0,!0)}else if(this._options.replyFormat==="VIDEO"){let c={file:b.fromPath(n.url),previewImage:n.coverUrl?b.fromPath(n.coverUrl):void 0};e.reply(c,l.VIDEO,void 0,!0),n.text?.length&&e.reply(n.text,l.TEXT,void 0,!0)}else this._options.replyFormat==="URL"?e.reply(n.url+`
44
44
  `+(n.text??""),l.TEXT,void 0,!0):e.reply(`![\u70B9\u6211\u67E5\u770B\u7ED8\u56FE\u7ED3\u679C](${n})
45
- ${n.text??""}`,l.TEXT,void 0,!0);else this._logger.warn("\u56FE\u7247\u6216\u89C6\u9891\u751F\u6210\u5931\u8D25\uFF01")}else this._logger.trace("\u63D0\u793A\u8BCD\u6CA1\u6709\u4EE5\u6307\u5B9A\u7684\u89E6\u53D1\u8BCD\u5F00\u5934")}};var bt=class extends Q{static{p(this,"CogviewDrawSkill")}_app;_options;static params={name:"cogview-skill",desc:"CogView\u7ED8\u56FE",optionsSchema:{type:"formily",formily:{type:"object",properties:{...Q.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"API\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5165API\u5730\u5740\uFF0C\u7559\u7A7A\u4E3A\u667A\u8C31AI\u7684\u5B98\u65B9API\u5730\u5740"},"x-decorator-props":{tooltip:"\u7ED8\u56FE\u7684API\u5730\u5740"},default:"https://open.bigmodel.cn"},model:{type:"string",title:"\u7ED8\u56FE\u6A21\u578B","x-decorator":"FormItem","x-component":"AutoComplete","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u6A21\u578B\u540D\u79F0"},enum:["cogview-3-plus","cogview-3"],default:"cogview-3-plus","x-decorator-props":{tooltip:"\u7ED8\u56FE\u6A21\u578B\uFF0C\u5FC5\u586B"},required:!0},size:{type:"string",title:"\u7ED8\u56FE\u5C3A\u5BF8\uFF08\u4EC5\u5BF9plus\u6A21\u578B\u751F\u6548\uFF09","x-decorator":"FormItem","x-component":"Select",enum:["1024x1024","768x1344","864x1152","1344x768","1152x864","1440x720","720x1440"],default:"1024x1024"}}}}};constructor(e,t){t.apiBase=t.apiBase?.length?t.apiBase:"https://open.bigmodel.cn",super(e,t),this._app=e,this._options=t}async _draw(e,t){if(!e?.length){this._logger.warn("\u7ED8\u56FE\u63D0\u793A\u8BCD\u4E3A\u7A7A\uFF01");return}let o=await(await fetch(`${this._options.apiBase}/api/paas/v4/images/generations`,{method:"post",headers:{"Content-Type":"application/json",Authorization:"Bearer "+this._options.apiKey},body:JSON.stringify({prompt:e,model:this._options.model,size:this._options.size,user_id:t})})).json();return this._logger.debug(o),{url:o?.data?.[0].url}}};var vt=class extends Q{static{p(this,"OpenAIDrawSkill")}_app;_options;static params={name:"openai-skill",desc:"OpenAI\u7ED8\u56FE",optionsSchema:{type:"formily",formily:{type:"object",properties:{...Q.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"API\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5165API\u5730\u5740\uFF0C\u7559\u7A7A\u4E3AOpenAI\u5B98\u65B9API\u5730\u5740"},"x-decorator-props":{tooltip:"\u7ED8\u56FE\u7684API\u5730\u5740"}},model:{type:"string",title:"\u7ED8\u56FE\u6A21\u578B","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6A21\u578B\u540D\u79F0"},default:"dall-e-3","x-decorator-props":{tooltip:"\u7ED8\u56FE\u6A21\u578B\uFF0C\u5FC5\u586B"},required:!0},size:{type:"string",title:"\u7ED8\u56FE\u5C3A\u5BF8\uFF08\u4EC5\u5BF9dall-e-3\u751F\u6548\uFF09","x-decorator":"FormItem","x-component":"Select",enum:["1024x1024","1792x1024","1024x1792"],default:"1024x1024"},quality:{type:"string",title:"\u7ED8\u56FE\u8D28\u91CF\uFF08\u4EC5\u5BF9dall-e-3\u751F\u6548\uFF09","x-decorator":"FormItem","x-component":"Select",enum:["standard","hd"],default:"standard"}}}}};constructor(e,t){super(e,t),this._app=e,this._options=t}async _draw(e,t){let o=await(await fetch(`${this._options.apiBase}/images/generations`,{method:"post",headers:{"Content-Type":"application/json",Authorization:"Bearer "+this._options.apiKey},body:JSON.stringify({prompt:e,model:this._options.model,size:this._options.size,user:t})})).json();return this._logger.debug(o),{url:o.data?.[0].url}}};var kt=class extends Q{static{p(this,"SiliconFlowDrawSkill")}_app;_options;static params={name:"silicon-flow-draw-skill",desc:"\u7845\u57FA\u6D41\u52A8\u7ED8\u56FE",optionsSchema:{type:"formily",formily:{type:"object",properties:{...Q.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"API\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5165API\u5730\u5740\uFF0C\u7559\u7A7A\u4E3A\u7845\u57FA\u6D41\u52A8\u5B98\u65B9API\u5730\u5740"},"x-decorator-props":{tooltip:"\u7ED8\u56FE\u7684API\u5730\u5740"},default:"https://api.siliconflow.cn/v1"},model:{type:"string",title:"\u7ED8\u56FE\u6A21\u578B","x-decorator":"FormItem","x-component":"AutoComplete","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u6216\u8F93\u5165\u6A21\u578B\u540D\u79F0"},enum:["stabilityai/stable-diffusion-3-5-large","stabilityai/stable-diffusion-3-5-large-turbo","black-forest-labs/FLUX.1-schnell","Pro/black-forest-labs/FLUX.1-schnell","black-forest-labs/FLUX.1-dev","black-forest-labs/FLUX.1-pro","stabilityai/stable-diffusion-3-medium","stabilityai/stable-diffusion-xl-base-1.0","stabilityai/stable-diffusion-2-1"],default:"stabilityai/stable-diffusion-3-5-large","x-decorator-props":{tooltip:"\u7ED8\u56FE\u6A21\u578B\uFF0C\u5FC5\u586B"},required:!0},size:{type:"string",title:"\u7ED8\u56FE\u5C3A\u5BF8\uFF08\u4E0D\u540C\u6A21\u578B\u652F\u6301\u4E0D\u540C\uFF09","x-decorator":"FormItem","x-component":"AutoComplete",enum:["1024x1024","512x1024","1024x512","768x512","768x1024","1024x576","576x1024"],default:"1024x1024","x-decorator-props":{tooltip:"\u4E0D\u540C\u6A21\u578B\u4E0D\u76F8\u540C\uFF0C\u5177\u4F53\u8BF7\u67E5\u770B\u5B98\u7F51\u3002"}},customOptions:{type:"object",title:"\u81EA\u5B9A\u4E49\u914D\u7F6E","x-decorator":"FormItem","x-component":"Code",default:"{}"}}}}};constructor(e,t){t.apiBase=t?.apiBase?.length?t.apiBase:"https://api.siliconflow.cn/v1",super(e,t),this._app=e,this._options=t}async _draw(e){let t=await(await fetch(`${this._options.apiBase}/images/generations`,{method:"post",headers:{"Content-Type":"application/json",Authorization:"Bearer "+this._options.apiKey},body:JSON.stringify({prompt:e,model:this._options.model,image_size:this._options.size,...this._options.customOptions??{}})})).json();if(this._logger.debug(t),t.images?.length)return{url:t.images?.[0].url};this._logger.error(t)}};import{v4 as gn}from"uuid";var St=class extends Q{static{p(this,"CogVideoDrawSkill")}_app;_options;static params={name:"cogvideo-skill",desc:"CogVideo\u89C6\u9891\u751F\u6210",optionsSchema:{type:"formily",formily:{type:"object",properties:{...Q.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"API\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5165API\u5730\u5740\uFF0C\u7559\u7A7A\u4E3A\u667A\u8C31AI\u7684\u5B98\u65B9API\u5730\u5740"},"x-decorator-props":{tooltip:"\u89C6\u9891\u751F\u6210\u7684API\u5730\u5740"},default:"https://open.bigmodel.cn"},model:{type:"string",title:"\u89C6\u9891\u6A21\u578B","x-decorator":"FormItem","x-component":"AutoComplete","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u6A21\u578B\u540D\u79F0"},enum:["cogvideox-flash","cogvideox"],default:"cogvideox-flash","x-decorator-props":{tooltip:"\u89C6\u9891\u7ED8\u5236\u6A21\u578B\uFF0C\u5FC5\u586B"},required:!0},triggerWords:{type:"string",title:"\u89C6\u9891\u89E6\u53D1\u8BCD","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5199\u60A8\u7684\u6280\u80FD\u89E6\u53D1\u8BCD\uFF0C\u4EE5\u7A7A\u683C\u5206\u9694\u3002"},"x-decorator-props":{tooltip:"\u4EE5\u7A7A\u683C\u5206\u9694"},default:"\u751F\u6210\u89C6\u9891 \u89C6\u9891 video",required:!0},replyFormat:{type:"string",title:"\u56DE\u590D\u6D88\u606F\u683C\u5F0F","x-decorator":"FormItem","x-component":"Select",enum:[{label:"\u89C6\u9891",value:"VIDEO"},{label:"\u6587\u4EF6",value:"FILE"},{label:"Url",value:"URL"}],"x-decorator-props":{tooltip:"\u4E0D\u652F\u6301\u89C6\u9891\u53D1\u9001\u7684\u5EFA\u8BAE\u4F7F\u7528URL"},default:"VIDEO"},withAudo:{type:"boolean",title:"\u662F\u5426\u751F\u6210\u97F3\u9891","x-decorator":"FormItem","x-component":"Switch",default:!1},size:{type:"string",title:"\u89C6\u9891\u5C3A\u5BF8\uFF08\u4EC5\u5BF9plus\u6A21\u578B\u751F\u6548\uFF09","x-decorator":"FormItem","x-component":"Select",enum:["1024x1024","768x1344","864x1152","1344x768","1152x864","1440x720","720x1440"],default:"1024x1024","x-display":!1},timeout:{type:"number",title:"\u8D85\u65F6\u65F6\u95F4\uFF08\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker",default:180}}}}};constructor(e,t){t.apiBase=t.apiBase?.length?t.apiBase:"https://open.bigmodel.cn",t.timeout=Math.max(t.timeout??180,30),super(e,t),this._app=e,this._options=t}async _draw(e,t){let o=await(await fetch(`${this._options.apiBase}/api/paas/v4/videos/generations`,{method:"post",headers:{"Content-Type":"application/json",Authorization:"Bearer "+this._options.apiKey},body:JSON.stringify({prompt:e,model:this._options.model,user_id:t,with_audio:this._options.withAudio??!1,request_id:gn()})})).json();if(this._logger.debug(o),o?.id)return new Promise(s=>{try{let r=new Date().getTime(),i=p(async()=>{let n=await(await fetch(`${this._options.apiBase}/api/paas/v4/async-result/${o.id}`,{method:"get",headers:{Authorization:"Bearer "+this._options.apiKey}})).json();if(n.task_status==="SUCCESS"){s({url:n.video_result?.[0].url,coverUrl:n.video_result?.[0].cover_image_url});return}else this._logger.trace("current video status for "+e+": "+JSON.stringify(n));if((new Date().getTime()-r)/1e3>this._options.timeout){this._logger.warn("\u89C6\u9891\u751F\u6210\u8D85\u65F6\uFF01"),s(void 0);return}setTimeout(i,3e3)},"q");i()}catch(r){this._logger.error(r.message),s(void 0)}});this._logger.error("\u751F\u6210\u5931\u8D25\uFF01"),this._logger.error(o)}};import{DataSource as bn}from"typeorm";import{Column as W,Entity as xn,Index as fo,PrimaryGeneratedColumn as In}from"typeorm";import{Client as fn}from"minio";import ir from"fs/promises";import Yt from"node:path";import{existsSync as _n}from"fs";import{basename as pr}from"path";var ho=class{static{p(this,"LocalFileOperator")}constructor(e,t){this._basePath=Yt.join(e,t)}_basePath;async writeFile(e,t){let o=e.startsWith("/")?e:Yt.join(this._basePath,e),s=Yt.dirname(o);_n(s)||await ir.mkdir(s,{recursive:!0}),await ir.writeFile(o,await t.asBuffer())}readFile(e){let t=e.startsWith("/")?e:Yt.join(this._basePath,e);return b.fromPath(t,"binary",pr(t))}},uo=class{static{p(this,"MinioFileOperator")}_minioClient;_bucket;constructor(e,t){this._minioClient=e,this._bucket=t}async _downloadFileToBuffer(e,t){try{let o=await this._minioClient.getObject(e,t),s=[];return new Promise((r,i)=>{o.on("data",n=>{s.push(n)}),o.on("end",()=>{let n=Buffer.concat(s);r(n)}),o.on("error",n=>{i(n)})})}catch(o){throw console.error("\u83B7\u53D6\u5BF9\u8C61\u65F6\u53D1\u751F\u9519\u8BEF:",o),o}}async writeFile(e,t){await this._minioClient.putObject(this._bucket,e,await t.asBuffer())}readFile(e){return new b(async()=>({data:await this._downloadFileToBuffer(this._bucket,e),type:"buffer",name:pr(e)}),"binary")}},yn=y("file-operator"),ar,go;process.env.MINIO_ENABLE==="1"?(yn.info("minio enabled"),ar=new fn({endPoint:process.env.MINIO_ENDPOINT,port:parseInt(process.env.MINIO_PORT??"9000"),useSSL:process.env.MINIO_SSL==="1",accessKey:process.env.MINIO_ACCESS_KEY,secretKey:process.env.MINIO_SECRET_KEY}),go=p(a=>new uo(ar,a),"_createFileOperator")):go=p(a=>new ho(_.dataPath,a),"_createFileOperator");var cr=go;function q(a,e,t,o){var s=arguments.length,r=s<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(a,e,t,o);else for(var n=a.length-1;n>=0;n--)(i=a[n])&&(r=(s<3?i(r):s>3?i(e,t,r):i(e,t))||r);return s>3&&r&&Object.defineProperty(e,t,r),r}p(q,"_ts_decorate");function H(a,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(a,e)}p(H,"_ts_metadata");var lr=cr(_.minioMessageBucket),wn=y("chat-message-orm"),O=class a{static{p(this,"ChatMessage")}id;msgId;type;fromId;createdAt;senderId;senderName;senderNickName;senderAvatar;isGroupChat;isSender;customType;raw;sourceName;sourceInstanceName;text;static fromMessage(e,t){let o=new a;return o.msgId=e.messageId,o.type=e.type,o.fromId=e.fromId,o.createdAt=e.time?.getTime()??new Date().getTime(),o.senderId=e.senderId,o.senderName=e.senderName,o.senderNickName=e.senderInfo?.nickName,o.senderAvatar=e.senderInfo?.bigAvatarUrl??e.senderInfo?.avatarUrl,o.isGroupChat=e.isGroupChat,o.isSender=e.isSender,o.customType=e.customType,o.text=be(e.content),o.raw=JSON.stringify(e,(s,r)=>{if(r?.asBuffer){let i=`${e.fromId}/${e.time.getFullYear()}/${e.time.getMonth()+1}-${e.time.getDate()}/${r.name}`;return lr.writeFile(i,r).then(()=>{wn.trace("attach saved")}),"attach://"+i}else if(s==="origin")return{};return r}),o.sourceName=t.params.name,o.sourceInstanceName=t.options.instanceName,o}static toMessage(e){return{...JSON.parse(e.raw,(s,r)=>{if(typeof r=="string"&&r.startsWith("attach://")){let i=r.substring(9);return lr.readFile(i)}return r}),time:new Date(e.createdAt)}}};q([In("uuid"),H("design:type",String)],O.prototype,"id",void 0);q([W("varchar"),H("design:type",String)],O.prototype,"msgId",void 0);q([W("varchar"),H("design:type",String)],O.prototype,"type",void 0);q([fo(),W("varchar"),H("design:type",String)],O.prototype,"fromId",void 0);q([fo(),W("numeric"),H("design:type",Number)],O.prototype,"createdAt",void 0);q([W("varchar"),H("design:type",String)],O.prototype,"senderId",void 0);q([W("varchar",{nullable:!0}),H("design:type",String)],O.prototype,"senderName",void 0);q([W("varchar",{nullable:!0}),H("design:type",String)],O.prototype,"senderNickName",void 0);q([W("text",{nullable:!0}),H("design:type",String)],O.prototype,"senderAvatar",void 0);q([W("boolean",{nullable:!0}),H("design:type",Boolean)],O.prototype,"isGroupChat",void 0);q([W("boolean",{nullable:!0}),H("design:type",Boolean)],O.prototype,"isSender",void 0);q([W("varchar",{nullable:!0}),H("design:type",String)],O.prototype,"customType",void 0);q([W("text"),H("design:type",String)],O.prototype,"raw",void 0);q([W("varchar"),H("design:type",String)],O.prototype,"sourceName",void 0);q([fo(),W("varchar"),H("design:type",String)],O.prototype,"sourceInstanceName",void 0);q([W("text",{nullable:!0}),H("design:type",String)],O.prototype,"text",void 0);O=q([xn()],O);var mr=y("db-logger"),vn={sqlite:{npmName:"better-sqlite3",ormType:"better-sqlite3"},pg:{npmName:"pg",ormType:"postgres"},mysql:{npmName:"mysql"},mongodb:{npmName:"mongodb",version:"^5.2.0"}},Fe=vn[_.dbProvider];if(!Fe)throw new Error("DB_PROVIDER\u914D\u7F6E\u9519\u8BEF\uFF08\u4EC5\u652F\u6301mysql pg sqlite mongodb\uFF09\uFF1A"+_.dbProvider);try{await import(Fe.npmName)}catch{mr.warn("\u5F53\u524D\u5C1A\u672A\u5B89\u88C5"+_.dbProvider+"\u6570\u636E\u5E93\u5F15\u64CE\uFF0C\u5C06\u5C1D\u8BD5\u81EA\u52A8\u5B89\u88C5\uFF01"),await io(Fe.npmName,_.npmRegistry,Fe.version,!1),mr.info("\u6570\u636E\u5E93\u5F15\u64CE"+Fe.npmName+"\u5B89\u88C5\u6210\u529F\uFF01")}var _o=_.dbProvider==="sqlite"?{database:_.dbConnection,type:"better-sqlite3"}:{url:_.dbConnection,type:Fe.ormType??_.dbProvider};_o={maxQueryExecutionTime:5e3,synchronize:!0,entities:[O],..._o};var dr=new bn(_o);await dr.initialize();var hr=dr.getRepository(O);var Ct=class a{static{p(this,"ChatMessageTaskRunner")}_app;_options;static params={name:"chat-message-runner",triggerConstraints:void 0,optionsSchema:{type:"formily",formily:{type:"object",properties:{...Jt}}},desc:"\u804A\u5929\u6D88\u606F\u4FDD\u5B58"};constructor(e,t){this._app=e,this._options=t,this._logger=y(this._options.instanceName)}_logger;get options(){return this._options}get params(){return a.params}async run(e){try{let t=e.data,o=O.fromMessage(t.message,t.source);return hr.save(o),this._logger.trace("message saved"),{detail:(o.isSender?"send":"received")+"message "+o.msgId+" saved"}}catch(t){return this._logger.error(t.message),{detail:"message save failed",error:t.message}}}};var Tt=class a extends A{static{p(this,"RagFlowAgentBot")}_options;static params={name:"ragflow-bot",desc:"RagFlow\u52A9\u7406/\u667A\u80FD\u4F53",needHistoryMessage:!1,optionsSchema:{type:"formily",formily:{type:"object",properties:{...A.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740,\u5FC5\u586B"},"x-validator":{format:"url"},required:!0},mode:{type:"string","x-index":3,title:"\u804A\u5929\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u804A\u5929\u6A21\u5F0F"},enum:[{label:"Chat Assitant",value:"chat"},{label:"Agent",value:"agent"}],required:!0,default:"chat"},chatOrAgentId:{type:"string","x-index":4,title:"\u804A\u5929ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165ChatId,\u5FC5\u586B"},"x-decorator-props":{tooltip:"\u4ECERagFlow\u7684\u804A\u5929\u9875\u9762\u7684url\u5730\u5740\u6216\u8005AgentId\u6309\u94AE/\u5DE6\u4FA7\u804A\u5929\u5217\u8868\u7684\u540D\u79F0\u540E\u6309\u94AE\u53EF\u4EE5\u770B\u5230"},required:!0},onlyText:{type:"boolean",title:"\u662F\u5426\u4E3A\u7EAF\u6587\u672C\u6A21\u578B","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u5982\u679C\u4E0D\u652F\u6301\u591A\u6A21\u6001\uFF0C\u8BBE\u7F6E\u4E3Atrue\uFF0C\u5426\u5219\u8BBE\u7F6E\u4E3Afalse\uFF0C\u9ED8\u8BA4\u662Ffalse\u3002"},default:!0,"x-visible":!1},attachSendMode:{type:"string",enum:["now","later"],title:"\u9644\u4EF6\u53D1\u9001\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u9644\u4EF6\u53D1\u9001\u6A21\u5F0F"},"x-decorator-props":{tooltip:"\u6536\u5230\u56FE\u7247\u9644\u4EF6\u65F6\uFF0C\u5982\u679C\u8981\u7B49\u5F85\u7528\u6237\u63D0\u95EE\u518D\u4E00\u8D77\u53D1\u5F80\u540E\u7AEF\uFF08\u5EFA\u8BAE\uFF09\uFF0C\u5219\u8BBE\u7F6E\u4E3Alater\uFF0C\u5426\u5219\u8BBE\u7F6E\u4E3Anow\u3002\u9ED8\u8BA4later\u3002"},default:"later","x-visible":!1},maxAttachCount:{type:"number",title:"\u6700\u5927\u9644\u4EF6\u6570\u91CF","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:1,placeholder:"\u8BF7\u8F93\u5165\u6700\u5927\u9644\u4EF6\u6570\u91CF"},"x-decorator-props":{tooltip:"\u9ED8\u8BA43\u5F20\uFF0C\u540Cdify\u8BBE\u7F6E"},default:3,"x-visible":!1},customVars:{type:"object",title:"\u81EA\u5B9A\u4E49\u53D8\u91CF","x-decorator":"FormItem","x-component":"Code","x-component-props":{},"x-decorator-props":{tooltip:"\u81EA\u5B9A\u4E49\u53D8\u91CF\uFF0C\u53EF\u4EE5\u8F93\u5165JSON\u683C\u5F0F\u7684\u6570\u636E\uFF0C\u5BF9\u5E94RagFlow\u4E2D\u7684begin\u53D8\u91CF\u3002"}}}}}};constructor(e){if(super(e),this._options=e,!this._options.apiBase)throw new Error("RagFlow\u7684\u670D\u52A1\u5730\u5740\u672A\u8BBE\u7F6E\uFF01");if(!this._options.mode?.length)throw new Error("\u672A\u63D0\u4F9BRagFlow\u7684\u6267\u884C\u65B9\u5F0F\uFF08mode\uFF09");if(!this._options.chatOrAgentId?.length)throw new Error("\u60A8\u6CA1\u6709\u8BBE\u7F6E\u804A\u5929\u52A9\u7406\u6216\u8005\u667A\u80FD\u4F53ID\uFF01");this._options.onlyText===!1&&(this.logger.warn("RagFlow\u4EC5\u652F\u6301\u63A5\u6536\u6587\u672C\u6D88\u606F\uFF0ConlyText\u5DF2\u81EA\u52A8\u8BBE\u7F6E\u4E3Atrue\uFF01"),this._options.onlyText=!0)}get params(){return a.params}get options(){return this._options}get supportConversationOnline(){return!0}async init(){}_latestSessionTime;async generateReadyMessage(e,t,o){let s={...this._options.customVars??{},question:t,stream:!0,user_id:e};return o.length&&this.logger.trace("RagFlow\u6682\u4E0D\u652F\u6301\u9644\u4EF6\uFF01"),{forSend:s,chatId:e,plainText:t}}async getLatestConversationId(e){this.logger.debug("get session id of "+e);let t="agents";this._options.mode==="chat"&&(t="chats");let o=await(await fetch(`${this._options.apiBase}/api/v1/${t}/${this._options.chatOrAgentId}/sessions?page_size=1&orderby=update_time`,{method:this._options.mode==="chat"?"get":"post",headers:{Authorization:"Bearer "+this._options.apiKey}})).json();if(o.code!==0){this.logger.error("\u83B7\u53D6\u4F1A\u8BDDID\u5931\u8D25\uFF01"),this.logger.error(o.message);return}return this._latestSessionTime=o.data?.[0]?.update_time??new Date(1971,1,1).getTime(),this._latestSessionTime=parseInt(this._latestSessionTime/1e3),this._options.mode==="chat"?o.data?.[0]?.id:o.data.id}async getLatestChatTime(e,t){this._latestSessionTime||await this.getLatestConversationId(t);let o=this._latestSessionTime;return this._latestSessionTime=void 0,o}async deleteConversation(e){if(this._options.mode!=="agent")try{let t=await(await fetch(`${this._options.apiBase}/api/v1/chats/${this._options.chatOrAgentId}/sessions`,{method:"DELETE",headers:{"Content-Type":"application/json",Authorization:"Bearer "+this._options.apiKey},body:JSON.stringify({ids:[e]})})).json();t.code!==0&&(this.logger.error("\u5220\u9664\u4F1A\u8BDD\u5931\u8D25\uFF01"),this.logger.error(t.message))}catch(t){this.logger.error("\u5220\u9664\u4F1A\u8BDD\u5931\u8D25\uFF01"),this.logger.error(t.message)}}async sendMessageBody(e,t,o,s){e.session_id=s?.conversationId;let r=this._options.mode==="agent"?"agents":"chats",i=await fetch(this._options.apiBase+`/api/v1/${r}/${this._options.chatOrAgentId}/completions`,{method:"post",keepalive:!0,headers:{"Content-Type":"application/json",Authorization:"Bearer "+this._options.apiKey},body:JSON.stringify(e)}),n="",c;await ee(i.body,m=>{if(!m){this.logger.warn("empty content");return}if(m.code!==0){this.logger.warn(m.message);return}if(m.data===!0&&o.onCompleted(c,new Date().getTime()/1e3),m.data?.answer?.length){if(m.data.running_status){this.logger.trace(m.data.answer);return}c=m.data.session_id;let d=m.data.answer.slice(n.length);n=m.data.answer,o.onContent(d,l.TEXT)}}),this.logger.debug(n)}};var At=class extends M{static{p(this,"DeepSeekBot")}static params={name:"deepseek-bot",desc:"DeepSeek",optionsSchema:{type:"formily",formily:{type:"object",properties:{...M.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"eg: https://api.deepseek.com/v1 \u4F7F\u7528DeekSeek\u5B98\u65B9\u670D\u52A1\u53EF\u7559\u7A7A\u3002"},"x-validator":{format:"url"},"x-decorator-props":{tooltip:"\u57FA\u4E8EOpenAI\u517C\u5BB9\u63A5\u53E3\u6269\u5C55\uFF0C\u8BF7\u4F7F\u7528OpenAI\u517C\u5BB9\u63A5\u53E3\u7684\u5730\u5740\uFF0C\u4F7F\u7528DeepSeek\u5B98\u65B9\u5730\u5740\u53EF\u7559\u7A7A\u3002"}},modelName:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-index":4,"x-decorator":"FormItem","x-component":"AutoComplete",enum:[{value:"deepseek-chat",label:"deepseek-chat(V3)"},{value:"deepseek-reasoner",label:"deepseek-reasoner(R1)"}],"x-component-props":{allowClear:!0,placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u6A21\u578B\u7684\u540D\u79F0"},default:"deepseek-chat","x-decorator-props":{tooltip:"\u6A21\u578B\u540D\u79F0\uFF0C\u53C2\u8003 https://api-docs.deepseek.com/zh-cn/ \u3002"},required:!0},chatOptions:{type:"object",title:"\u5176\u4ED6\u5BF9\u8BDD\u914D\u7F6E","x-index":5,"x-decorator":"FormItem","x-component":"Code","x-decorator-props":{tooltip:"\u9664\u6A21\u578B\u540D\u79F0\u4E4B\u5916\u7684\u5176\u4ED6\u5BF9\u8BDD\u914D\u7F6E\uFF0C\u53C2\u8003DeepSeek\u5B98\u7F51"},required:!1}}}}};constructor(e){e.apiBase?.length||(e.apiBase="https://api.deepseek.com/v1"),e.chatOptions.model=e.modelName??e.chatOptions.model??"deepseek-chat",super(e),this.logger.trace("\u5F53\u524DDeepSeek\u6A21\u578B\uFF1A"+e.chatOptions.model)}};var Et=class extends M{static{p(this,"TencentBot")}static params={name:"tencent-bot",desc:"\u817E\u8BAF\u77E5\u8BC6\u5F15\u64CE",optionsSchema:{type:"formily",formily:{type:"object",properties:{...M.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"eg: https://api.lkeap.cloud.tencent.com/v1 \u4F7F\u7528\u817E\u8BAF\u5B98\u65B9\u670D\u52A1\u53EF\u7559\u7A7A\u3002"},"x-validator":{format:"url"},"x-decorator-props":{tooltip:"\u4F7F\u7528\u817E\u8BAF\u5B98\u65B9\u5730\u5740\u53EF\u7559\u7A7A\u3002"}},modelName:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-index":4,"x-decorator":"FormItem","x-component":"AutoComplete",enum:[{value:"deepseek-v3",label:"DeepSeek-V3"},{value:"deepseek-r1",label:"DeepSeek-R1"}],"x-component-props":{allowClear:!0,placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u6A21\u578B\u7684\u540D\u79F0"},default:"deepseek-v3","x-decorator-props":{tooltip:"\u6A21\u578B\u540D\u79F0\uFF0C\u53C2\u8003 https://cloud.tencent.com/document/product/1772/115969 \u3002"},required:!0},chatOptions:{type:"object",title:"\u5176\u4ED6\u5BF9\u8BDD\u914D\u7F6E","x-index":5,"x-decorator":"FormItem","x-component":"Code","x-decorator-props":{tooltip:"\u9664\u6A21\u578B\u540D\u79F0\u4E4B\u5916\u7684\u5176\u4ED6\u5BF9\u8BDD\u914D\u7F6E\uFF0C\u53C2\u8003\u817E\u8BAF\u77E5\u8BC6\u5F15\u64CE\u5B98\u7F51"},required:!1}}}}};constructor(e){e.apiBase?.length||(e.apiBase="https://api.lkeap.cloud.tencent.com/v1"),e.chatOptions.model=e.modelName??e.chatOptions.model??"deepseek-v3",super(e),this.logger.trace("\u5F53\u524D\u817E\u8BAF\u77E5\u8BC6\u5F15\u64CE\u6A21\u578B\uFF1A"+e.chatOptions.model)}};var lu=p(async a=>({init:p(async()=>({skills:[{creator:p(e=>new et(e),"creator"),params:et.params},{creator:p(e=>new Ze(e),"creator"),params:Ze.params},{creator:p(e=>new ht(a,e),"creator"),params:ht.params},{creator:p(e=>new ut(a,e),"creator"),params:ut.params},{creator:p(e=>new gt(a,e),"creator"),params:gt.params},{creator:p(e=>new ft(a,e),"creator"),params:ft.params},{creator:p(e=>new _t(a,e),"creator"),params:_t.params},{creator:p(e=>new yt(a,e),"creator"),params:yt.params},{creator:p(e=>new fe(a,e),"creator"),params:fe.params},{creator:p(e=>new xt(a,e),"creator"),params:xt.params},{creator:p(e=>new _e(a,e),"creator"),params:_e.params},{creator:p(e=>new It(a,e),"creator"),params:It.params},{creator:p(e=>new wt(a,e),"creator"),params:wt.params},{creator:p(e=>new bt(a,e),"creator"),params:bt.params},{creator:p(e=>new vt(a,e),"creator"),params:vt.params},{creator:p(e=>new kt(a,e),"creator"),params:kt.params},{creator:p(e=>new St(a,e),"creator"),params:St.params}],bots:[{creator:p(e=>new $e(e),"creator"),params:$e.params},{creator:p(e=>new De(e),"creator"),params:De.params},{creator:p(e=>new M(e),"creator"),params:M.params},{creator:p(e=>new je(e),"creator"),params:je.params},{creator:p(e=>new He(e),"creator"),params:He.params},{creator:p(e=>new Ke(e),"creator"),params:Ke.params},{creator:p(e=>new ze(e),"creator"),params:ze.params},{creator:p(e=>new We(e),"creator"),params:We.params},{creator:p(e=>new qe(e),"creator"),params:qe.params},{creator:p(e=>new Ge(e),"creator"),params:Ge.params},{creator:p(e=>new Je(e),"creator"),params:Je.params},{creator:p(e=>new Ve(e),"creator"),params:Ve.params},{creator:p(e=>new Xe(e),"creator"),params:Xe.params},{creator:p(e=>new Tt(e),"creator"),params:Tt.params},{creator:p(e=>new At(e),"creator"),params:At.params},{creator:p(e=>new Et(e),"creator"),params:Et.params}],sources:[{creator:p(e=>new nt(e),"creator"),params:nt.params},{creator:p(e=>new ot(e),"creator"),params:ot.params},{creator:p(e=>new it(a,e),"creator"),params:it.params},{creator:p(e=>new at(a,e),"creator"),params:at.params},{creator:p(e=>new ct(a,e),"creator"),params:ct.params},{creator:p(e=>new mt(a,e),"creator"),params:mt.params},{creator:p(e=>new dt(a,e),"creator"),params:dt.params}],taskTriggers:[{creator:p(e=>new Qe(a,e),"creator"),params:Qe.params},{creator:p(e=>new Ye(a,e),"creator"),params:Ye.params},{creator:p(e=>new st(a,e),"creator"),params:st.params}],taskRunners:[{creator:p(e=>new rt(a,e),"creator"),params:rt.params},{creator:p(e=>new Ct(a,e),"creator"),params:Ct.params}]}),"init"),needOnline:!1,name:"\u9ED8\u8BA4\u63D2\u4EF6",dispose:p(async()=>{},"dispose")}),"defaultPlugin");var Zt=class extends re{static{p(this,"SkillManager")}};var eo=class extends re{static{p(this,"SourceManager")}};var to=class extends re{static{p(this,"TaskRunnerManager")}options;constructor(e){e.cacheInstance=!1,super(e),this.options=e}},oo=class extends re{static{p(this,"TaskTriggerManager")}options;constructor(e){e.cacheInstance=!1,super(e),this.options=e}};import kn from"fastify";import Sn from"@fastify/websocket";import Cn from"@fastify/static";import Me from"node:process";import Tn from"@fastify/formbody";import An from"emittery";import{XMLParser as En}from"fast-xml-parser";import ur from"fs";import yo from"node:path";import{createReadStream as Nn,existsSync as Fn}from"node:fs";import{authentication as Mn,createDirectus as On,readItems as Pn,readMe as Rn,rest as Bn}from"@directus/sdk";import Ln from"@fastify/cors";import{v4 as gr}from"uuid";import Un from"@fastify/compress";var fr=class a extends An{static{p(this,"PPAgent")}_options;static EventNames={ERROR:"error"};constructor(e={name:"default"}){super(),this._options=e,this._pluginHandlers=[],this._wsRoutes={},this._httpRoutes=new Map,this._starting=!1,this._stopping=!1,this._stopped=!1,this._running=!1,this._xmlParser=new En,this._onlinePluginInfos=new Map,this._services=new Map,this._logger=y("app-"+this._options.name),this._globalEvent=new Gt(this._options.name)}_server;_pluginHandlers;_wsRoutes;_httpRoutes;_starting;_stopping;_stopped;_running;_agentService;_skillManager;_sourceManager;_botManager;_taskService;_taskTriggerManager;_taskRunnerManager;_xmlParser;_sharedCover;_sharedLogo;_client;_me;_globalEvent;_logger;_onlinePluginInfos;_services;get server(){return this._server}get skillManager(){return this._skillManager}get sourceManager(){return this._sourceManager}get botManager(){return this._botManager}get taskTriggerManager(){return this._taskTriggerManager}get taskRunnerManager(){return this._taskRunnerManager}get agentService(){return this._agentService}get offlineMode(){return this._options.offline??!1}get sharedCover(){return this._sharedCover}get sharedLogo(){return this._sharedLogo}get client(){return this._client||this._logger.warn("\u914D\u7F6E\u670D\u52A1client\u5C1A\u672A\u521B\u5EFA\uFF0C\u8BF7\u7B49\u5F85\u670D\u52A1\u521D\u59CB\u5316\u4E4B\u540E\u518D\u8C03\u7528\uFF01"),this._client}get options(){return JSON.parse(JSON.stringify(this._options))}get taskService(){return this._taskService}get globalEvent(){return this._globalEvent}get plugins(){return[...this._pluginHandlers]}get me(){return this._me}get onlinePlugins(){return this._onlinePluginInfos.values()}get running(){return this._running}get services(){return this._services}async _createServer(){this._logger.trace("create fastify server"),this._server=kn({logger:{level:"warn"}}),await this._server.register(Sn),await this._server.register(Tn),await this._server.register(Ln,{origin:"*"}),_.serverCompress&&(this._logger.info("\u542F\u7528\u670D\u52A1\u5668gzip\u538B\u7F29"),await this._server.register(Un,{global:!0,threshold:_.serverCompressMinSize,customTypes:p(e=>_.serverCompressMime.includes(e),"customTypes")})),this._server.addContentTypeParser(["text/xml","application/xml"],(e,t,o)=>{let s=[];t.on("data",r=>{s.push(r)}),t.on("end",()=>{try{let r=Buffer.concat(s).toString(),i=this._xmlParser.parse(r);o(null,i)}catch(r){o(r)}})}),this._logger.trace("fastify server created")}async _initServer(){if(this._logger.trace("register fastify server plugins"),await this._server.register(async e=>{e.get("/ws/*",{websocket:!0},(t,o)=>{_.traceHttpRequest&&this._logger.trace("ws request,ip"+o.ip+",host:"+o.hostname+",path:"+o.url);let r=(o.query.token??o.headers.authorization?.replace("Bearer","").trim())===_.publicToken;if(_.publicForceAuth&&!r){this._logger.debug("\u672A\u6388\u6743\u7684\u8BBF\u95EE"),this._logger.debug(o.url),t.close(403,"\u672A\u6388\u6743\u7684\u8BBF\u95EE");return}let i=o.params["*"],n,c,m,d=new TextDecoder("utf-8");if(i==="normal")n=p(async h=>{h instanceof Buffer&&(h=d.decode(h));try{let u=JSON.parse(h),g=`${u?.instanceName}-${u?.action}`,w=this._wsRoutes[g];if(w.needAuth&&!r)return this._logger.debug("\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01"),"\u60A8\u672A\u88AB\u5141\u8BB8\u8BBF\u95EE\u8BE5\u65B9\u6CD5\uFF01";let x=w.action;if(!x){this._logger.warn("unhandled message:"+h);return}let v=await x(u.data);if(v!=null){let R={id:u.id,data:v};return JSON.stringify(R)}}catch(u){return String(u)}},"onmessage");else{let h=i.replaceAll("/","-"),u=p(()=>{let g=this._wsRoutes[h];if(!g){t.send(String({error:"normal ws path:/ws/normal,custom ws path:/ws/instanceName/action\uFF01"}));return}if(g.needAuth&&!r){this._logger.debug("\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01"),t.close(403,"\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01");return}return g},"getInfo");n=p(async(g,w,x)=>{let v=u();if(!v)return;v.action.onMessage(g,w,x)},"onmessage"),c=p(async(g,w)=>{let x=u();if(!x)return;x.action.onOpen(g,w)},"onOpen"),m=p(async(g,w)=>{let x=u();if(!x)return;x.action.onClose(g,w)},"onClose")}t.on("message",async h=>{_.traceHttpRequest&&this._logger.trace("ws on meesage, type "+typeof h);try{let u=await n(h,o,t);u!=null&&t.send(u)}catch(u){this._logger.error(u.meesage)}}),c&&c(o,t),m&&t.on("close",()=>{m(o,t),this._logger.trace("ws closed,from "+o.hostname)}),t.on("error",h=>{this._logger.error(h.message)})})}),this._server.all("/api/*",async(e,t)=>{_.traceHttpRequest&&this._logger.trace("api request,ip"+e.ip+",host:"+e.hostname+",path:"+e.url);let o=e.params["*"].replaceAll("/","-");if(!this._httpRoutes.has(o)){t.send("success");return}let s=this._httpRoutes.get(o);if((s.needAuth||_.publicForceAuth)&&(e.query.token??e.headers.authorization?.replace("Bearer","").trim())!==_.publicToken){this._logger.warn("\u672A\u6388\u6743\u7684\u8BBF\u95EE"),this._logger.warn(e.url),t.status(401),t.send("\u672A\u88AB\u6388\u6743\u7684\u8BBF\u95EE\uFF01");return}let r=s.action;try{return r.type==="normal"?t.send(await r.handler(e)):(r.handler(e,t),t)}catch(i){this._logger.error(i.message),i instanceof Rt?(t.status(401),t.send(i.message)):i instanceof Pt?(t.status(400),t.send(i.message)):i instanceof Ot?(t.status(404),t.send(i.message)):(t.status(500),t.send(String(i)))}}),await this._server.register(Cn,{root:_.publicPath,prefix:_.publicPathName}),Me.env.VERIFY_FILE?.length){let e=yo.resolve("."+Me.env.VERIFY_FILE);Fn(e)?this._server.get(Me.env.VERIFY_FILE,(t,o)=>{this._logger.trace("verify service requested from "+t.url),o.send(Nn(e))}):this._logger.warn("\u8DEF\u5F84"+e+"\u4E0D\u5B58\u5728\uFF0C\u65E0\u6CD5\u521B\u5EFA\u7528\u4E8E\u9A8C\u8BC1\u7AD9\u70B9\u5F52\u5C5E\u7684\u8DEF\u7531\uFF01")}await this._server.ready(),await this._server.listen({host:_.host,port:_.port}),this._logger.info("http server started on port "+_.port)}_checkRegister(){return this._stopped?(this._logger.error("\u5F53\u524D\u670D\u52A1\u5DF2\u505C\u6B62\uFF0C\u65E0\u6CD5\u6CE8\u518C\u65B0\u7684\u8DEF\u7531\u6216\u8005\u63D2\u4EF6\uFF01"),!1):this._running?(this._logger.error("\u5F53\u524D\u670D\u52A1\u5DF2\u7ECF\u542F\u52A8\uFF0C\u65E0\u6CD5\u6CE8\u518C\u65B0\u7684\u8DEF\u7531\u6216\u8005\u63D2\u4EF6\uFF0C\u8BF7\u5728\u8C03\u7528start\u65B9\u6CD5\u4E4B\u524D\u6CE8\u518C\uFF01"),!1):!0}async _initResources(){let e=this._options.sharedCoverPath??yo.resolve(_.publicPath,"images","cover-default.png");(e.startsWith("http")||ur.existsSync(e))&&(this._sharedCover=b.fromPath(e,"binary","shared-cover.png"));let t=this._options.sharedLogoPath??yo.resolve(_.publicPath,"images","logo-default.png");(t.startsWith("http")||ur.existsSync(t))&&(this._sharedLogo=b.fromPath(t,"binary","shared-logo.png"))}async _loadOnlinePlugins(){this._logger.info("loading online plugins...");let e=await this._client.request(Pn("plugins",{filter:{status:{_neq:"archived"}},user_created:{_eq:this._me?.id}}));this._logger.info(e);let t=0;for(let o of e)try{let s=await import(o.name);s=s.default??s.plugin??s,await this.use(s,o),t++}catch(s){this._logger.warn(`\u8F7D\u5165\u63D2\u4EF6${o.name}\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u662F\u5426\u5DF2\u7ECF\u5B89\u88C5\u76F8\u5173npm\u4F9D\u8D56\uFF01`),this._logger.warn(s)}this._logger.info(`${t} online plugin(s) loaded`)}async use(e,t){if(typeof e!="function"){this._logger.warn("\u63D2\u4EF6\u9700\u8981\u5B9E\u73B0\u6307\u5B9A\u63A5\u53E3\uFF0C\u68C0\u6D4B\u5230\u65E0\u6548\u7684\u63D2\u4EF6\uFF1A"),this._logger.warn(e);return}let o=await e(this,t?.options);if(typeof o?.init!="function"){this._logger.warn("\u63D2\u4EF6\u6CA1\u6709\u5B9E\u73B0init\u63A5\u53E3"),this._logger.warn(o);return}if(o.needOnline&&this.offlineMode){this._logger.error("\u63D2\u4EF6"+o.name+"\u9700\u8981\u4F7F\u7528\u5728\u7EBF\u914D\u7F6E\uFF0C\u65E0\u6CD5\u79BB\u7EBF\u6A21\u5F0F\u542F\u52A8\uFF0C\u8BE5\u63D2\u4EF6\u5C06\u88AB\u5FFD\u7565\uFF01");return}return t?.name&&o.name!==t.name&&(this._logger.warn("\u5728\u7EBF\u63D2\u4EF6"+o.name+"\u7684\u4EE3\u7801\u4E0E\u63D2\u4EF6\u5305\u4E2D\u7684\u540D\u79F0\u4E0D\u5339\u914D\uFF0C\u5DF2\u81EA\u52A8\u8986\u76D6\u4E3Anpm\u5305\u4E2D\u7684\u540D\u79F0\uFF01"),o.name=t.name),t?.id&&(t.schecma=o.schema,t.options=t.options??{},this._onlinePluginInfos.set(t.name,t)),this._pluginHandlers.push(o),this._logger.trace("plugin "+o.name+" registered"),o}async start(){if(this._stopped){this._logger.error("\u5F53\u524D\u670D\u52A1\u5DF2\u505C\u6B62\uFF0C\u5982\u9700\u542F\u52A8\uFF0C\u8BF7\u91CD\u65B0\u521B\u5EFA\u65B0\u7684\u5B9E\u4F8B\uFF01");return}if(this._starting||this._running){this._logger.warn("\u670D\u52A1\u5668\u6B63\u5FD9\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5\uFF01");return}if(this._starting=!0,!this._options.offline){this._logger.debug("\u5F53\u524D\u670D\u52A1\u5C06\u542F\u7528\u5728\u7EBF\u914D\u7F6E\uFF0C\u8BF7\u786E\u4FDD\u60A8\u6CE8\u518C\u4E86\u914D\u7F6E\u670D\u52A1\u5668\u7684\u8D26\u53F7\uFF01\u5426\u5219\u8BF7\u5173\u95ED\u5728\u7EBF\u914D\u7F6E\u670D\u52A1\uFF08\u8BBE\u7F6EOFFLINE=true\uFF09"),this._client=On(_.configServerUrl).with(Mn("json")).with(Bn()),await this.client.login(_.configServerEmail,_.configServerPassword);let o=await this._client.request(Rn());this._logger.debug("\u914D\u7F6E\u670D\u52A1\u5668\u8FDE\u63A5\u6210\u529F"),this._logger.debug(`\u5F53\u524D\u767B\u5F55\u8D26\u53F7\uFF1A${o.email}`),this._me=o,await this._loadOnlinePlugins()}this._botManager=new Kt,this._skillManager=new Zt,this._sourceManager=new eo,this._taskTriggerManager=new oo({cacheInstance:!1}),this._taskRunnerManager=new to({cacheInstance:!1}),await this._initResources(),this._logger.trace("default resources loaded");for(let o of this._pluginHandlers)if(o.init){let s=await o.init();s&&(s.bots?.forEach(r=>this._botManager.registerInstanceCreator(r.creator,r.params)),s.sources?.forEach(r=>this._sourceManager.registerInstanceCreator(r.creator,r.params)),s.skills?.forEach(r=>this._skillManager.registerInstanceCreator(r.creator,r.params)),s.taskTriggers?.forEach(r=>this._taskTriggerManager.registerInstanceCreator(r.creator,r.params)),s.taskRunners?.forEach(r=>this._taskRunnerManager.registerInstanceCreator(r.creator,r.params))),this._logger.trace("plugin "+o.name+" init")}await this._createServer(),this._logger.trace("http server created"),await(this._agentService=new Ht(this,this._options.agentServiceOptions)).init(),this._logger.trace("agent service created"),await(this._taskService=new Xt(this,this._options.taskServiceOptions)).init(),this._logger.trace("task service created");for(let o of this._pluginHandlers)o.beforeStart&&(await o.beforeStart(),this._logger.trace(`plugin ${o.name} beforeStart`));await this._initServer(),this._running=!0;for(let o of this._pluginHandlers)o.afterStart&&(await o.afterStart(),this._logger.trace(`plugin ${o.name} afterStart`));this._starting=!1,Me.on("unhandledRejection",o=>{this._logger.error(o?.message??String(o)),this.emit(a.EventNames.ERROR,o)});for(let o of["SIGINT","SIGTERM"])Me.once(o,async()=>(this._logger.info("break signal received"),await this.stop(o)));this._globalEvent.emit(Y.APP_STARTED,{title:"\u670D\u52A1\u542F\u52A8",id:gr()})}async reload(){this._logger.info("agent and task service is reloading,service may unavailable for a while..."),await this._agentService.reload(),await this._taskService.reload(),this._logger.info("agent and task service reload completed"),this._logger.info("if you want to reload plugins,please restart server"),this._globalEvent.emit(Y.APP_RELOAD,{title:"\u670D\u52A1\u91CD\u8F7D",id:gr()})}async stop(e){if(this._logger.trace("stop server"),this._stopping){this._logger.warn("\u670D\u52A1\u5668\u6B63\u5FD9\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5\uFF01");return}this._stopping=!0;for(let t of this._pluginHandlers)t.beforeClose&&await t.beforeClose();await de(this._pluginHandlers),this._pluginHandlers=[],await this._agentService.dispose(),await this._taskService.dispose(),await this._server.close(),this._stopping=!1,this._stopped=!0,this._running=!1,this._logger.trace("server stopped"),e?.length&&(this._logger.warn(`close application on ${e??"stop call"}`),Me.exit(0))}registerRoutes(e,t){let o=`${e}-${t.actionName}`;this._httpRoutes.has(o)&&this._logger.warn("\u8DEF\u7531"+o+"\u5DF2\u88AB\u8986\u76D6"),this._logger.info(`${_.httpUrl}/api/${e}/${t.actionName}\u7684http\u8DEF\u7531\u5DF2\u521B\u5EFA`),this._httpRoutes.set(o,t)}registerWSHandler(e,t){let o=`${e}-${t.actionName}`;this._wsRoutes[o]&&this._logger.warn("ws\u8DEF\u7531"+o+"\u5DF2\u88AB\u8986\u76D6"),this._wsRoutes[o]=t}};export{Ae as Agent,Ht as AgentService,b as AsyncFile,ut as BaiduSTTSkill,ht as BaiduTTSSkill,Q as BaseDrawSkill,j as BaseSTTSkill,U as BaseTTSSkill,A as BasicBot,Kt as BotManager,O as ChatMessage,Ct as ChatMessageTaskRunner,St as CogVideoDrawSkill,bt as CogviewDrawSkill,De as CozeBot,zt as CozeService,st as CronTaskTrigger,$e as DifyAgentBot,it as DingRobotSource,rt as EchoTaskRunner,Vt as EventTaskTrigger,je as FastGPTBot,ct as FeishuSource,wt as FishAudioTTSSkill,Gt as GlobalEvent,Y as GlobalEventNames,Ye as GlobalEventTaskTrigger,jt as HistoryMessageManager,re as InstanceBaseManager,qe as OllamaBot,M as OpenAIBot,vt as OpenAIDrawSkill,fe as OpenAISTTSkill,_e as OpenAITTSSkill,Ge as OpenRouterBot,fr as PPAgent,He as QAnythingBot,mt as QQSource,$ as SchemaBaseProperties,Ze as SenseVoiceSTTSkill,Xe as SiliconFlowBot,kt as SiliconFlowDrawSkill,xt as SiliconFlowSTTSkill,It as SiliconFlowTTSSkill,Yn as SimpleSchemaType,Zt as SkillManager,Ne as SkillSchemaBaseProperties,qt as SortedPromise,Pt as SourceApiMissingParamsError,Ot as SourceApiNotFoundError,Rt as SourceApiUnAuthorizedError,l as SourceChatMessageType,Qe as SourceEventTaskTrigger,f as SourceEventType,eo as SourceManager,et as SoviteTTSSkill,to as TaskRunnerManager,Jt as TaskRunnerSchemaBaseProperties,Xt as TaskService,Ee as TaskTrigger,oo as TaskTriggerManager,_t as TencentSTTSkill,yt as TencentTTSSkill,dt as WCAISource,nt as WCOASource,at as WeWorkSource,Ke as WenxinAgentBot,Je as XunfeiBot,gt as XunfeiSTTSkill,ft as XunfeiTTSSkill,ze as YuanQiBot,Ve as ZhipuBot,We as ZhipuQingyanBot,Te as addWavHeader,Hp as apiPlugin,Ie as arm2wav,me as betterMarkdown,hr as chatMessageRepo,dr as chatSource,we as checkMessageRule,_ as config,Bt as createCacheManager,Lr as createFakeMessage,zo as createFormilySchema,lu as defaultPlugin,qo as detectName,Vo as directRunBot,de as disposeObjects,$o as extractArticleInfo,Re as extractImageUrls,jo as extractMarkdownImageTags,be as extractMessageContentText,no as extractPositionInfo,Mo as filterContentRule,he as generateRandomString,Dt as getEnvNumber,Ho as getFromMessageSummary,y as getLogger,Z as getSecret,Ko as getToMessageSummary,Uo as hasEmoji,Do as hasMarkdown,Xo as installAndGetPluginInfo,io as installDep,Lt as isPhoneNumber,Bo as removeEmoji,Lo as removeMarkdown,Br as removeTextAt,Ut as richText2Markdown,Be as sleep,ee as sse,Go as stream2buffer,Pe as transFileFormat,Pr as transFormat,Jo as uninstallDep,pe as wav2amr};
45
+ ${n.text??""}`,l.TEXT,void 0,!0);else this._logger.warn("\u56FE\u7247\u6216\u89C6\u9891\u751F\u6210\u5931\u8D25\uFF01")}else this._logger.trace("\u63D0\u793A\u8BCD\u6CA1\u6709\u4EE5\u6307\u5B9A\u7684\u89E6\u53D1\u8BCD\u5F00\u5934")}};var vt=class extends Q{static{p(this,"CogviewDrawSkill")}_app;_options;static params={name:"cogview-skill",desc:"CogView\u7ED8\u56FE",optionsSchema:{type:"formily",formily:{type:"object",properties:{...Q.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"API\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5165API\u5730\u5740\uFF0C\u7559\u7A7A\u4E3A\u667A\u8C31AI\u7684\u5B98\u65B9API\u5730\u5740"},"x-decorator-props":{tooltip:"\u7ED8\u56FE\u7684API\u5730\u5740"},default:"https://open.bigmodel.cn"},model:{type:"string",title:"\u7ED8\u56FE\u6A21\u578B","x-decorator":"FormItem","x-component":"AutoComplete","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u6A21\u578B\u540D\u79F0"},enum:["cogview-3-plus","cogview-3"],default:"cogview-3-plus","x-decorator-props":{tooltip:"\u7ED8\u56FE\u6A21\u578B\uFF0C\u5FC5\u586B"},required:!0},size:{type:"string",title:"\u7ED8\u56FE\u5C3A\u5BF8\uFF08\u4EC5\u5BF9plus\u6A21\u578B\u751F\u6548\uFF09","x-decorator":"FormItem","x-component":"Select",enum:["1024x1024","768x1344","864x1152","1344x768","1152x864","1440x720","720x1440"],default:"1024x1024"}}}}};constructor(e,t){t.apiBase=t.apiBase?.length?t.apiBase:"https://open.bigmodel.cn",super(e,t),this._app=e,this._options=t}async _draw(e,t){if(!e?.length){this._logger.warn("\u7ED8\u56FE\u63D0\u793A\u8BCD\u4E3A\u7A7A\uFF01");return}let o=await(await fetch(`${this._options.apiBase}/api/paas/v4/images/generations`,{method:"post",headers:{"Content-Type":"application/json",Authorization:"Bearer "+this._options.apiKey},body:JSON.stringify({prompt:e,model:this._options.model,size:this._options.size,user_id:t})})).json();return this._logger.debug(o),{url:o?.data?.[0].url}}};var kt=class extends Q{static{p(this,"OpenAIDrawSkill")}_app;_options;static params={name:"openai-skill",desc:"OpenAI\u7ED8\u56FE",optionsSchema:{type:"formily",formily:{type:"object",properties:{...Q.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"API\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5165API\u5730\u5740\uFF0C\u7559\u7A7A\u4E3AOpenAI\u5B98\u65B9API\u5730\u5740"},"x-decorator-props":{tooltip:"\u7ED8\u56FE\u7684API\u5730\u5740"}},model:{type:"string",title:"\u7ED8\u56FE\u6A21\u578B","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6A21\u578B\u540D\u79F0"},default:"dall-e-3","x-decorator-props":{tooltip:"\u7ED8\u56FE\u6A21\u578B\uFF0C\u5FC5\u586B"},required:!0},size:{type:"string",title:"\u7ED8\u56FE\u5C3A\u5BF8\uFF08\u4EC5\u5BF9dall-e-3\u751F\u6548\uFF09","x-decorator":"FormItem","x-component":"Select",enum:["1024x1024","1792x1024","1024x1792"],default:"1024x1024"},quality:{type:"string",title:"\u7ED8\u56FE\u8D28\u91CF\uFF08\u4EC5\u5BF9dall-e-3\u751F\u6548\uFF09","x-decorator":"FormItem","x-component":"Select",enum:["standard","hd"],default:"standard"}}}}};constructor(e,t){super(e,t),this._app=e,this._options=t}async _draw(e,t){let o=await(await fetch(`${this._options.apiBase}/images/generations`,{method:"post",headers:{"Content-Type":"application/json",Authorization:"Bearer "+this._options.apiKey},body:JSON.stringify({prompt:e,model:this._options.model,size:this._options.size,user:t})})).json();return this._logger.debug(o),{url:o.data?.[0].url}}};var St=class extends Q{static{p(this,"SiliconFlowDrawSkill")}_app;_options;static params={name:"silicon-flow-draw-skill",desc:"\u7845\u57FA\u6D41\u52A8\u7ED8\u56FE",optionsSchema:{type:"formily",formily:{type:"object",properties:{...Q.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"API\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5165API\u5730\u5740\uFF0C\u7559\u7A7A\u4E3A\u7845\u57FA\u6D41\u52A8\u5B98\u65B9API\u5730\u5740"},"x-decorator-props":{tooltip:"\u7ED8\u56FE\u7684API\u5730\u5740"},default:"https://api.siliconflow.cn/v1"},model:{type:"string",title:"\u7ED8\u56FE\u6A21\u578B","x-decorator":"FormItem","x-component":"AutoComplete","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u6216\u8F93\u5165\u6A21\u578B\u540D\u79F0"},enum:["stabilityai/stable-diffusion-3-5-large","stabilityai/stable-diffusion-3-5-large-turbo","black-forest-labs/FLUX.1-schnell","Pro/black-forest-labs/FLUX.1-schnell","black-forest-labs/FLUX.1-dev","black-forest-labs/FLUX.1-pro","stabilityai/stable-diffusion-3-medium","stabilityai/stable-diffusion-xl-base-1.0","stabilityai/stable-diffusion-2-1"],default:"stabilityai/stable-diffusion-3-5-large","x-decorator-props":{tooltip:"\u7ED8\u56FE\u6A21\u578B\uFF0C\u5FC5\u586B"},required:!0},size:{type:"string",title:"\u7ED8\u56FE\u5C3A\u5BF8\uFF08\u4E0D\u540C\u6A21\u578B\u652F\u6301\u4E0D\u540C\uFF09","x-decorator":"FormItem","x-component":"AutoComplete",enum:["1024x1024","512x1024","1024x512","768x512","768x1024","1024x576","576x1024"],default:"1024x1024","x-decorator-props":{tooltip:"\u4E0D\u540C\u6A21\u578B\u4E0D\u76F8\u540C\uFF0C\u5177\u4F53\u8BF7\u67E5\u770B\u5B98\u7F51\u3002"}},customOptions:{type:"object",title:"\u81EA\u5B9A\u4E49\u914D\u7F6E","x-decorator":"FormItem","x-component":"Code",default:"{}"}}}}};constructor(e,t){t.apiBase=t?.apiBase?.length?t.apiBase:"https://api.siliconflow.cn/v1",super(e,t),this._app=e,this._options=t}async _draw(e){let t=await(await fetch(`${this._options.apiBase}/images/generations`,{method:"post",headers:{"Content-Type":"application/json",Authorization:"Bearer "+this._options.apiKey},body:JSON.stringify({prompt:e,model:this._options.model,image_size:this._options.size,...this._options.customOptions??{}})})).json();if(this._logger.debug(t),t.images?.length)return{url:t.images?.[0].url};this._logger.error(t)}};import{v4 as gn}from"uuid";var Ct=class extends Q{static{p(this,"CogVideoDrawSkill")}_app;_options;static params={name:"cogvideo-skill",desc:"CogVideo\u89C6\u9891\u751F\u6210",optionsSchema:{type:"formily",formily:{type:"object",properties:{...Q.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"API\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5165API\u5730\u5740\uFF0C\u7559\u7A7A\u4E3A\u667A\u8C31AI\u7684\u5B98\u65B9API\u5730\u5740"},"x-decorator-props":{tooltip:"\u89C6\u9891\u751F\u6210\u7684API\u5730\u5740"},default:"https://open.bigmodel.cn"},model:{type:"string",title:"\u89C6\u9891\u6A21\u578B","x-decorator":"FormItem","x-component":"AutoComplete","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u6A21\u578B\u540D\u79F0"},enum:["cogvideox-flash","cogvideox"],default:"cogvideox-flash","x-decorator-props":{tooltip:"\u89C6\u9891\u7ED8\u5236\u6A21\u578B\uFF0C\u5FC5\u586B"},required:!0},triggerWords:{type:"string",title:"\u89C6\u9891\u89E6\u53D1\u8BCD","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5199\u60A8\u7684\u6280\u80FD\u89E6\u53D1\u8BCD\uFF0C\u4EE5\u7A7A\u683C\u5206\u9694\u3002"},"x-decorator-props":{tooltip:"\u4EE5\u7A7A\u683C\u5206\u9694"},default:"\u751F\u6210\u89C6\u9891 \u89C6\u9891 video",required:!0},replyFormat:{type:"string",title:"\u56DE\u590D\u6D88\u606F\u683C\u5F0F","x-decorator":"FormItem","x-component":"Select",enum:[{label:"\u89C6\u9891",value:"VIDEO"},{label:"\u6587\u4EF6",value:"FILE"},{label:"Url",value:"URL"}],"x-decorator-props":{tooltip:"\u4E0D\u652F\u6301\u89C6\u9891\u53D1\u9001\u7684\u5EFA\u8BAE\u4F7F\u7528URL"},default:"VIDEO"},withAudo:{type:"boolean",title:"\u662F\u5426\u751F\u6210\u97F3\u9891","x-decorator":"FormItem","x-component":"Switch",default:!1},size:{type:"string",title:"\u89C6\u9891\u5C3A\u5BF8\uFF08\u4EC5\u5BF9plus\u6A21\u578B\u751F\u6548\uFF09","x-decorator":"FormItem","x-component":"Select",enum:["1024x1024","768x1344","864x1152","1344x768","1152x864","1440x720","720x1440"],default:"1024x1024","x-display":!1},timeout:{type:"number",title:"\u8D85\u65F6\u65F6\u95F4\uFF08\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker",default:180}}}}};constructor(e,t){t.apiBase=t.apiBase?.length?t.apiBase:"https://open.bigmodel.cn",t.timeout=Math.max(t.timeout??180,30),super(e,t),this._app=e,this._options=t}async _draw(e,t){let o=await(await fetch(`${this._options.apiBase}/api/paas/v4/videos/generations`,{method:"post",headers:{"Content-Type":"application/json",Authorization:"Bearer "+this._options.apiKey},body:JSON.stringify({prompt:e,model:this._options.model,user_id:t,with_audio:this._options.withAudio??!1,request_id:gn()})})).json();if(this._logger.debug(o),o?.id)return new Promise(s=>{try{let r=new Date().getTime(),i=p(async()=>{let n=await(await fetch(`${this._options.apiBase}/api/paas/v4/async-result/${o.id}`,{method:"get",headers:{Authorization:"Bearer "+this._options.apiKey}})).json();if(n.task_status==="SUCCESS"){s({url:n.video_result?.[0].url,coverUrl:n.video_result?.[0].cover_image_url});return}else this._logger.trace("current video status for "+e+": "+JSON.stringify(n));if((new Date().getTime()-r)/1e3>this._options.timeout){this._logger.warn("\u89C6\u9891\u751F\u6210\u8D85\u65F6\uFF01"),s(void 0);return}setTimeout(i,3e3)},"q");i()}catch(r){this._logger.error(r.message),s(void 0)}});this._logger.error("\u751F\u6210\u5931\u8D25\uFF01"),this._logger.error(o)}};import{DataSource as bn}from"typeorm";import{Column as W,Entity as xn,Index as fo,PrimaryGeneratedColumn as In}from"typeorm";import{Client as fn}from"minio";import ir from"fs/promises";import Yt from"node:path";import{existsSync as _n}from"fs";import{basename as pr}from"path";var ho=class{static{p(this,"LocalFileOperator")}constructor(e,t){this._basePath=Yt.join(e,t)}_basePath;async writeFile(e,t){let o=e.startsWith("/")?e:Yt.join(this._basePath,e),s=Yt.dirname(o);_n(s)||await ir.mkdir(s,{recursive:!0}),await ir.writeFile(o,await t.asBuffer())}readFile(e){let t=e.startsWith("/")?e:Yt.join(this._basePath,e);return b.fromPath(t,"binary",pr(t))}},uo=class{static{p(this,"MinioFileOperator")}_minioClient;_bucket;constructor(e,t){this._minioClient=e,this._bucket=t}async _downloadFileToBuffer(e,t){try{let o=await this._minioClient.getObject(e,t),s=[];return new Promise((r,i)=>{o.on("data",n=>{s.push(n)}),o.on("end",()=>{let n=Buffer.concat(s);r(n)}),o.on("error",n=>{i(n)})})}catch(o){throw console.error("\u83B7\u53D6\u5BF9\u8C61\u65F6\u53D1\u751F\u9519\u8BEF:",o),o}}async writeFile(e,t){await this._minioClient.putObject(this._bucket,e,await t.asBuffer())}readFile(e){return new b(async()=>({data:await this._downloadFileToBuffer(this._bucket,e),type:"buffer",name:pr(e)}),"binary")}},yn=y("file-operator"),ar,go;process.env.MINIO_ENABLE==="1"?(yn.info("minio enabled"),ar=new fn({endPoint:process.env.MINIO_ENDPOINT,port:parseInt(process.env.MINIO_PORT??"9000"),useSSL:process.env.MINIO_SSL==="1",accessKey:process.env.MINIO_ACCESS_KEY,secretKey:process.env.MINIO_SECRET_KEY}),go=p(a=>new uo(ar,a),"_createFileOperator")):go=p(a=>new ho(_.dataPath,a),"_createFileOperator");var cr=go;function q(a,e,t,o){var s=arguments.length,r=s<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(a,e,t,o);else for(var n=a.length-1;n>=0;n--)(i=a[n])&&(r=(s<3?i(r):s>3?i(e,t,r):i(e,t))||r);return s>3&&r&&Object.defineProperty(e,t,r),r}p(q,"_ts_decorate");function K(a,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(a,e)}p(K,"_ts_metadata");var lr=cr(_.minioMessageBucket),wn=y("chat-message-orm"),O=class a{static{p(this,"ChatMessage")}id;msgId;type;fromId;createdAt;senderId;senderName;senderNickName;senderAvatar;isGroupChat;isSender;customType;raw;sourceName;sourceInstanceName;text;static fromMessage(e,t){let o=new a;return o.msgId=e.messageId,o.type=e.type,o.fromId=e.fromId,o.createdAt=e.time?.getTime()??new Date().getTime(),o.senderId=e.senderId,o.senderName=e.senderName,o.senderNickName=e.senderInfo?.nickName,o.senderAvatar=e.senderInfo?.bigAvatarUrl??e.senderInfo?.avatarUrl,o.isGroupChat=e.isGroupChat,o.isSender=e.isSender,o.customType=e.customType,o.text=ve(e.content),o.raw=JSON.stringify(e,(s,r)=>{if(r?.asBuffer){let i=`${e.fromId}/${e.time.getFullYear()}/${e.time.getMonth()+1}-${e.time.getDate()}/${r.name}`;return lr.writeFile(i,r).then(()=>{wn.trace("attach saved")}),"attach://"+i}else if(s==="origin")return{};return r}),o.sourceName=t.params.name,o.sourceInstanceName=t.options.instanceName,o}static toMessage(e){return{...JSON.parse(e.raw,(s,r)=>{if(typeof r=="string"&&r.startsWith("attach://")){let i=r.substring(9);return lr.readFile(i)}return r}),time:new Date(e.createdAt)}}};q([In("uuid"),K("design:type",String)],O.prototype,"id",void 0);q([W("varchar"),K("design:type",String)],O.prototype,"msgId",void 0);q([W("varchar"),K("design:type",String)],O.prototype,"type",void 0);q([fo(),W("varchar"),K("design:type",String)],O.prototype,"fromId",void 0);q([fo(),W("numeric"),K("design:type",Number)],O.prototype,"createdAt",void 0);q([W("varchar"),K("design:type",String)],O.prototype,"senderId",void 0);q([W("varchar",{nullable:!0}),K("design:type",String)],O.prototype,"senderName",void 0);q([W("varchar",{nullable:!0}),K("design:type",String)],O.prototype,"senderNickName",void 0);q([W("text",{nullable:!0}),K("design:type",String)],O.prototype,"senderAvatar",void 0);q([W("boolean",{nullable:!0}),K("design:type",Boolean)],O.prototype,"isGroupChat",void 0);q([W("boolean",{nullable:!0}),K("design:type",Boolean)],O.prototype,"isSender",void 0);q([W("varchar",{nullable:!0}),K("design:type",String)],O.prototype,"customType",void 0);q([W("text"),K("design:type",String)],O.prototype,"raw",void 0);q([W("varchar"),K("design:type",String)],O.prototype,"sourceName",void 0);q([fo(),W("varchar"),K("design:type",String)],O.prototype,"sourceInstanceName",void 0);q([W("text",{nullable:!0}),K("design:type",String)],O.prototype,"text",void 0);O=q([xn()],O);var mr=y("db-logger"),vn={sqlite:{npmName:"better-sqlite3",ormType:"better-sqlite3"},pg:{npmName:"pg",ormType:"postgres"},mysql:{npmName:"mysql"},mongodb:{npmName:"mongodb",version:"^5.2.0"}},Fe=vn[_.dbProvider];if(!Fe)throw new Error("DB_PROVIDER\u914D\u7F6E\u9519\u8BEF\uFF08\u4EC5\u652F\u6301mysql pg sqlite mongodb\uFF09\uFF1A"+_.dbProvider);try{await import(Fe.npmName)}catch{mr.warn("\u5F53\u524D\u5C1A\u672A\u5B89\u88C5"+_.dbProvider+"\u6570\u636E\u5E93\u5F15\u64CE\uFF0C\u5C06\u5C1D\u8BD5\u81EA\u52A8\u5B89\u88C5\uFF01"),await io(Fe.npmName,_.npmRegistry,Fe.version,!1),mr.info("\u6570\u636E\u5E93\u5F15\u64CE"+Fe.npmName+"\u5B89\u88C5\u6210\u529F\uFF01")}var _o=_.dbProvider==="sqlite"?{database:_.dbConnection,type:"better-sqlite3"}:{url:_.dbConnection,type:Fe.ormType??_.dbProvider};_o={maxQueryExecutionTime:5e3,synchronize:!0,entities:[O],..._o};var dr=new bn(_o);await dr.initialize();var hr=dr.getRepository(O);var Tt=class a{static{p(this,"ChatMessageTaskRunner")}_app;_options;static params={name:"chat-message-runner",triggerConstraints:void 0,optionsSchema:{type:"formily",formily:{type:"object",properties:{...Jt}}},desc:"\u804A\u5929\u6D88\u606F\u4FDD\u5B58"};constructor(e,t){this._app=e,this._options=t,this._logger=y(this._options.instanceName)}_logger;get options(){return this._options}get params(){return a.params}async run(e){try{let t=e.data,o=O.fromMessage(t.message,t.source);return hr.save(o),this._logger.trace("message saved"),{detail:(o.isSender?"send":"received")+"message "+o.msgId+" saved"}}catch(t){return this._logger.error(t.message),{detail:"message save failed",error:t.message}}}};var At=class a extends A{static{p(this,"RagFlowAgentBot")}_options;static params={name:"ragflow-bot",desc:"RagFlow\u52A9\u7406/\u667A\u80FD\u4F53",needHistoryMessage:!1,optionsSchema:{type:"formily",formily:{type:"object",properties:{...A.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740,\u5FC5\u586B"},"x-validator":{format:"url"},required:!0},mode:{type:"string","x-index":3,title:"\u804A\u5929\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u804A\u5929\u6A21\u5F0F"},enum:[{label:"Chat Assitant",value:"chat"},{label:"Agent",value:"agent"}],required:!0,default:"chat"},chatOrAgentId:{type:"string","x-index":4,title:"\u804A\u5929ID","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165ChatId,\u5FC5\u586B"},"x-decorator-props":{tooltip:"\u4ECERagFlow\u7684\u804A\u5929\u9875\u9762\u7684url\u5730\u5740\u6216\u8005AgentId\u6309\u94AE/\u5DE6\u4FA7\u804A\u5929\u5217\u8868\u7684\u540D\u79F0\u540E\u6309\u94AE\u53EF\u4EE5\u770B\u5230"},required:!0},onlyText:{type:"boolean",title:"\u662F\u5426\u4E3A\u7EAF\u6587\u672C\u6A21\u578B","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u5982\u679C\u4E0D\u652F\u6301\u591A\u6A21\u6001\uFF0C\u8BBE\u7F6E\u4E3Atrue\uFF0C\u5426\u5219\u8BBE\u7F6E\u4E3Afalse\uFF0C\u9ED8\u8BA4\u662Ffalse\u3002"},default:!0,"x-visible":!1},attachSendMode:{type:"string",enum:["now","later"],title:"\u9644\u4EF6\u53D1\u9001\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u9644\u4EF6\u53D1\u9001\u6A21\u5F0F"},"x-decorator-props":{tooltip:"\u6536\u5230\u56FE\u7247\u9644\u4EF6\u65F6\uFF0C\u5982\u679C\u8981\u7B49\u5F85\u7528\u6237\u63D0\u95EE\u518D\u4E00\u8D77\u53D1\u5F80\u540E\u7AEF\uFF08\u5EFA\u8BAE\uFF09\uFF0C\u5219\u8BBE\u7F6E\u4E3Alater\uFF0C\u5426\u5219\u8BBE\u7F6E\u4E3Anow\u3002\u9ED8\u8BA4later\u3002"},default:"later","x-visible":!1},maxAttachCount:{type:"number",title:"\u6700\u5927\u9644\u4EF6\u6570\u91CF","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:1,placeholder:"\u8BF7\u8F93\u5165\u6700\u5927\u9644\u4EF6\u6570\u91CF"},"x-decorator-props":{tooltip:"\u9ED8\u8BA43\u5F20\uFF0C\u540Cdify\u8BBE\u7F6E"},default:3,"x-visible":!1},customVars:{type:"object",title:"\u81EA\u5B9A\u4E49\u53D8\u91CF","x-decorator":"FormItem","x-component":"Code","x-component-props":{},"x-decorator-props":{tooltip:"\u81EA\u5B9A\u4E49\u53D8\u91CF\uFF0C\u53EF\u4EE5\u8F93\u5165JSON\u683C\u5F0F\u7684\u6570\u636E\uFF0C\u5BF9\u5E94RagFlow\u4E2D\u7684begin\u53D8\u91CF\u3002"}}}}}};constructor(e){if(super(e),this._options=e,!this._options.apiBase)throw new Error("RagFlow\u7684\u670D\u52A1\u5730\u5740\u672A\u8BBE\u7F6E\uFF01");if(!this._options.mode?.length)throw new Error("\u672A\u63D0\u4F9BRagFlow\u7684\u6267\u884C\u65B9\u5F0F\uFF08mode\uFF09");if(!this._options.chatOrAgentId?.length)throw new Error("\u60A8\u6CA1\u6709\u8BBE\u7F6E\u804A\u5929\u52A9\u7406\u6216\u8005\u667A\u80FD\u4F53ID\uFF01");this._options.onlyText===!1&&(this.logger.warn("RagFlow\u4EC5\u652F\u6301\u63A5\u6536\u6587\u672C\u6D88\u606F\uFF0ConlyText\u5DF2\u81EA\u52A8\u8BBE\u7F6E\u4E3Atrue\uFF01"),this._options.onlyText=!0)}get params(){return a.params}get options(){return this._options}get supportConversationOnline(){return!0}async init(){}_latestSessionTime;async generateReadyMessage(e,t,o){let s={...this._options.customVars??{},question:t,stream:!0,user_id:e};return o.length&&this.logger.trace("RagFlow\u6682\u4E0D\u652F\u6301\u9644\u4EF6\uFF01"),{forSend:s,chatId:e,plainText:t}}async getLatestConversationId(e){this.logger.debug("get session id of "+e);let t="agents";this._options.mode==="chat"&&(t="chats");let o=await(await fetch(`${this._options.apiBase}/api/v1/${t}/${this._options.chatOrAgentId}/sessions?page_size=1&orderby=update_time`,{method:this._options.mode==="chat"?"get":"post",headers:{Authorization:"Bearer "+this._options.apiKey}})).json();if(o.code!==0){this.logger.error("\u83B7\u53D6\u4F1A\u8BDDID\u5931\u8D25\uFF01"),this.logger.error(o.message);return}return this._latestSessionTime=o.data?.[0]?.update_time??new Date(1971,1,1).getTime(),this._latestSessionTime=parseInt(this._latestSessionTime/1e3),this._options.mode==="chat"?o.data?.[0]?.id:o.data.id}async getLatestChatTime(e,t){this._latestSessionTime||await this.getLatestConversationId(t);let o=this._latestSessionTime;return this._latestSessionTime=void 0,o}async deleteConversation(e){if(this._options.mode!=="agent")try{let t=await(await fetch(`${this._options.apiBase}/api/v1/chats/${this._options.chatOrAgentId}/sessions`,{method:"DELETE",headers:{"Content-Type":"application/json",Authorization:"Bearer "+this._options.apiKey},body:JSON.stringify({ids:[e]})})).json();t.code!==0&&(this.logger.error("\u5220\u9664\u4F1A\u8BDD\u5931\u8D25\uFF01"),this.logger.error(t.message))}catch(t){this.logger.error("\u5220\u9664\u4F1A\u8BDD\u5931\u8D25\uFF01"),this.logger.error(t.message)}}async sendMessageBody(e,t,o,s){e.session_id=s?.conversationId;let r=this._options.mode==="agent"?"agents":"chats",i=await fetch(this._options.apiBase+`/api/v1/${r}/${this._options.chatOrAgentId}/completions`,{method:"post",keepalive:!0,headers:{"Content-Type":"application/json",Authorization:"Bearer "+this._options.apiKey},body:JSON.stringify(e)}),n="",c;await ee(i.body,m=>{if(!m){this.logger.warn("empty content");return}if(m.code!==0){this.logger.warn(m.message);return}if(m.data===!0&&o.onCompleted(c,new Date().getTime()/1e3),m.data?.answer?.length){if(m.data.running_status){this.logger.trace(m.data.answer);return}c=m.data.session_id;let d=m.data.answer.slice(n.length);n=m.data.answer,o.onContent(d,l.TEXT)}}),this.logger.debug(n)}};var Et=class extends M{static{p(this,"DeepSeekBot")}static params={name:"deepseek-bot",desc:"DeepSeek",optionsSchema:{type:"formily",formily:{type:"object",properties:{...M.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"eg: https://api.deepseek.com/v1 \u4F7F\u7528DeekSeek\u5B98\u65B9\u670D\u52A1\u53EF\u7559\u7A7A\u3002"},"x-validator":{format:"url"},"x-decorator-props":{tooltip:"\u57FA\u4E8EOpenAI\u517C\u5BB9\u63A5\u53E3\u6269\u5C55\uFF0C\u8BF7\u4F7F\u7528OpenAI\u517C\u5BB9\u63A5\u53E3\u7684\u5730\u5740\uFF0C\u4F7F\u7528DeepSeek\u5B98\u65B9\u5730\u5740\u53EF\u7559\u7A7A\u3002"}},modelName:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-index":4,"x-decorator":"FormItem","x-component":"AutoComplete",enum:[{value:"deepseek-chat",label:"deepseek-chat(V3)"},{value:"deepseek-reasoner",label:"deepseek-reasoner(R1)"}],"x-component-props":{allowClear:!0,placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u6A21\u578B\u7684\u540D\u79F0"},default:"deepseek-chat","x-decorator-props":{tooltip:"\u6A21\u578B\u540D\u79F0\uFF0C\u53C2\u8003 https://api-docs.deepseek.com/zh-cn/ \u3002"},required:!0},chatOptions:{type:"object",title:"\u5176\u4ED6\u5BF9\u8BDD\u914D\u7F6E","x-index":5,"x-decorator":"FormItem","x-component":"Code","x-decorator-props":{tooltip:"\u9664\u6A21\u578B\u540D\u79F0\u4E4B\u5916\u7684\u5176\u4ED6\u5BF9\u8BDD\u914D\u7F6E\uFF0C\u53C2\u8003DeepSeek\u5B98\u7F51"},required:!1}}}}};constructor(e){e.apiBase?.length||(e.apiBase="https://api.deepseek.com/v1"),e.chatOptions.model=e.modelName??e.chatOptions.model??"deepseek-chat",super(e),this.logger.trace("\u5F53\u524DDeepSeek\u6A21\u578B\uFF1A"+e.chatOptions.model)}};var Nt=class extends M{static{p(this,"TencentBot")}static params={name:"tencent-bot",desc:"\u817E\u8BAF\u77E5\u8BC6\u5F15\u64CE",optionsSchema:{type:"formily",formily:{type:"object",properties:{...M.params.optionsSchema.formily.properties,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"eg: https://api.lkeap.cloud.tencent.com/v1 \u4F7F\u7528\u817E\u8BAF\u5B98\u65B9\u670D\u52A1\u53EF\u7559\u7A7A\u3002"},"x-validator":{format:"url"},"x-decorator-props":{tooltip:"\u4F7F\u7528\u817E\u8BAF\u5B98\u65B9\u5730\u5740\u53EF\u7559\u7A7A\u3002"}},modelName:{type:"string",title:"\u6A21\u578B\u540D\u79F0","x-index":4,"x-decorator":"FormItem","x-component":"AutoComplete",enum:[{value:"deepseek-v3",label:"DeepSeek-V3"},{value:"deepseek-r1",label:"DeepSeek-R1"}],"x-component-props":{allowClear:!0,placeholder:"\u8BF7\u9009\u62E9\u6216\u8005\u8F93\u5165\u6A21\u578B\u7684\u540D\u79F0"},default:"deepseek-v3","x-decorator-props":{tooltip:"\u6A21\u578B\u540D\u79F0\uFF0C\u53C2\u8003 https://cloud.tencent.com/document/product/1772/115969 \u3002"},required:!0},chatOptions:{type:"object",title:"\u5176\u4ED6\u5BF9\u8BDD\u914D\u7F6E","x-index":5,"x-decorator":"FormItem","x-component":"Code","x-decorator-props":{tooltip:"\u9664\u6A21\u578B\u540D\u79F0\u4E4B\u5916\u7684\u5176\u4ED6\u5BF9\u8BDD\u914D\u7F6E\uFF0C\u53C2\u8003\u817E\u8BAF\u77E5\u8BC6\u5F15\u64CE\u5B98\u7F51"},required:!1}}}}};constructor(e){e.apiBase?.length||(e.apiBase="https://api.lkeap.cloud.tencent.com/v1"),e.chatOptions.model=e.modelName??e.chatOptions.model??"deepseek-v3",super(e),this.logger.trace("\u5F53\u524D\u817E\u8BAF\u77E5\u8BC6\u5F15\u64CE\u6A21\u578B\uFF1A"+e.chatOptions.model)}};var lu=p(async a=>({init:p(async()=>({skills:[{creator:p(e=>new tt(e),"creator"),params:tt.params},{creator:p(e=>new et(e),"creator"),params:et.params},{creator:p(e=>new ut(a,e),"creator"),params:ut.params},{creator:p(e=>new gt(a,e),"creator"),params:gt.params},{creator:p(e=>new ft(a,e),"creator"),params:ft.params},{creator:p(e=>new _t(a,e),"creator"),params:_t.params},{creator:p(e=>new yt(a,e),"creator"),params:yt.params},{creator:p(e=>new xt(a,e),"creator"),params:xt.params},{creator:p(e=>new _e(a,e),"creator"),params:_e.params},{creator:p(e=>new It(a,e),"creator"),params:It.params},{creator:p(e=>new ye(a,e),"creator"),params:ye.params},{creator:p(e=>new wt(a,e),"creator"),params:wt.params},{creator:p(e=>new bt(a,e),"creator"),params:bt.params},{creator:p(e=>new vt(a,e),"creator"),params:vt.params},{creator:p(e=>new kt(a,e),"creator"),params:kt.params},{creator:p(e=>new St(a,e),"creator"),params:St.params},{creator:p(e=>new Ct(a,e),"creator"),params:Ct.params}],bots:[{creator:p(e=>new je(e),"creator"),params:je.params},{creator:p(e=>new $e(e),"creator"),params:$e.params},{creator:p(e=>new M(e),"creator"),params:M.params},{creator:p(e=>new qe(e),"creator"),params:qe.params},{creator:p(e=>new Ke(e),"creator"),params:Ke.params},{creator:p(e=>new ze(e),"creator"),params:ze.params},{creator:p(e=>new We(e),"creator"),params:We.params},{creator:p(e=>new Xe(e),"creator"),params:Xe.params},{creator:p(e=>new He(e),"creator"),params:He.params},{creator:p(e=>new Ge(e),"creator"),params:Ge.params},{creator:p(e=>new Ve(e),"creator"),params:Ve.params},{creator:p(e=>new Qe(e),"creator"),params:Qe.params},{creator:p(e=>new Je(e),"creator"),params:Je.params},{creator:p(e=>new At(e),"creator"),params:At.params},{creator:p(e=>new Et(e),"creator"),params:Et.params},{creator:p(e=>new Nt(e),"creator"),params:Nt.params}],sources:[{creator:p(e=>new it(e),"creator"),params:it.params},{creator:p(e=>new rt(e),"creator"),params:rt.params},{creator:p(e=>new at(a,e),"creator"),params:at.params},{creator:p(e=>new pt(a,e),"creator"),params:pt.params},{creator:p(e=>new lt(a,e),"creator"),params:lt.params},{creator:p(e=>new dt(a,e),"creator"),params:dt.params},{creator:p(e=>new ht(a,e),"creator"),params:ht.params}],taskTriggers:[{creator:p(e=>new Ye(a,e),"creator"),params:Ye.params},{creator:p(e=>new Ze(a,e),"creator"),params:Ze.params},{creator:p(e=>new nt(a,e),"creator"),params:nt.params}],taskRunners:[{creator:p(e=>new st(a,e),"creator"),params:st.params},{creator:p(e=>new Tt(a,e),"creator"),params:Tt.params}]}),"init"),needOnline:!1,name:"\u9ED8\u8BA4\u63D2\u4EF6",dispose:p(async()=>{},"dispose")}),"defaultPlugin");var Zt=class extends re{static{p(this,"SkillManager")}};var eo=class extends re{static{p(this,"SourceManager")}};var to=class extends re{static{p(this,"TaskRunnerManager")}options;constructor(e){e.cacheInstance=!1,super(e),this.options=e}},oo=class extends re{static{p(this,"TaskTriggerManager")}options;constructor(e){e.cacheInstance=!1,super(e),this.options=e}};import kn from"fastify";import Sn from"@fastify/websocket";import Cn from"@fastify/static";import Me from"node:process";import Tn from"@fastify/formbody";import An from"emittery";import{XMLParser as En}from"fast-xml-parser";import ur from"fs";import yo from"node:path";import{createReadStream as Nn,existsSync as Fn}from"node:fs";import{authentication as Mn,createDirectus as On,readItems as Pn,readMe as Rn,rest as Bn}from"@directus/sdk";import Ln from"@fastify/cors";import{v4 as gr}from"uuid";import Un from"@fastify/compress";var fr=class a extends An{static{p(this,"PPAgent")}_options;static EventNames={ERROR:"error"};constructor(e={name:"default"}){super(),this._options=e,this._pluginHandlers=[],this._wsRoutes={},this._httpRoutes=new Map,this._starting=!1,this._stopping=!1,this._stopped=!1,this._running=!1,this._xmlParser=new En,this._onlinePluginInfos=new Map,this._services=new Map,this._logger=y("app-"+this._options.name),this._globalEvent=new Ht(this._options.name)}_server;_pluginHandlers;_wsRoutes;_httpRoutes;_starting;_stopping;_stopped;_running;_agentService;_skillManager;_sourceManager;_botManager;_taskService;_taskTriggerManager;_taskRunnerManager;_xmlParser;_sharedCover;_sharedLogo;_client;_me;_globalEvent;_logger;_onlinePluginInfos;_services;get server(){return this._server}get skillManager(){return this._skillManager}get sourceManager(){return this._sourceManager}get botManager(){return this._botManager}get taskTriggerManager(){return this._taskTriggerManager}get taskRunnerManager(){return this._taskRunnerManager}get agentService(){return this._agentService}get offlineMode(){return this._options.offline??!1}get sharedCover(){return this._sharedCover}get sharedLogo(){return this._sharedLogo}get client(){return this._client||this._logger.warn("\u914D\u7F6E\u670D\u52A1client\u5C1A\u672A\u521B\u5EFA\uFF0C\u8BF7\u7B49\u5F85\u670D\u52A1\u521D\u59CB\u5316\u4E4B\u540E\u518D\u8C03\u7528\uFF01"),this._client}get options(){return JSON.parse(JSON.stringify(this._options))}get taskService(){return this._taskService}get globalEvent(){return this._globalEvent}get plugins(){return[...this._pluginHandlers]}get me(){return this._me}get onlinePlugins(){return this._onlinePluginInfos.values()}get running(){return this._running}get services(){return this._services}async _createServer(){this._logger.trace("create fastify server"),this._server=kn({logger:{level:"warn"}}),await this._server.register(Sn),await this._server.register(Tn),await this._server.register(Ln,{origin:"*"}),_.serverCompress&&(this._logger.info("\u542F\u7528\u670D\u52A1\u5668gzip\u538B\u7F29"),await this._server.register(Un,{global:!0,threshold:_.serverCompressMinSize,customTypes:p(e=>_.serverCompressMime.includes(e),"customTypes")})),this._server.addContentTypeParser(["text/xml","application/xml"],(e,t,o)=>{let s=[];t.on("data",r=>{s.push(r)}),t.on("end",()=>{try{let r=Buffer.concat(s).toString(),i=this._xmlParser.parse(r);o(null,i)}catch(r){o(r)}})}),this._logger.trace("fastify server created")}async _initServer(){if(this._logger.trace("register fastify server plugins"),await this._server.register(async e=>{e.get("/ws/*",{websocket:!0},(t,o)=>{_.traceHttpRequest&&this._logger.trace("ws request,ip"+o.ip+",host:"+o.hostname+",path:"+o.url);let r=(o.query.token??o.headers.authorization?.replace("Bearer","").trim())===_.publicToken;if(_.publicForceAuth&&!r){this._logger.debug("\u672A\u6388\u6743\u7684\u8BBF\u95EE"),this._logger.debug(o.url),t.close(403,"\u672A\u6388\u6743\u7684\u8BBF\u95EE");return}let i=o.params["*"],n,c,m,d=new TextDecoder("utf-8");if(i==="normal")n=p(async h=>{h instanceof Buffer&&(h=d.decode(h));try{let u=JSON.parse(h),g=`${u?.instanceName}-${u?.action}`,w=this._wsRoutes[g];if(w.needAuth&&!r)return this._logger.debug("\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01"),"\u60A8\u672A\u88AB\u5141\u8BB8\u8BBF\u95EE\u8BE5\u65B9\u6CD5\uFF01";let x=w.action;if(!x){this._logger.warn("unhandled message:"+h);return}let v=await x(u.data);if(v!=null){let R={id:u.id,data:v};return JSON.stringify(R)}}catch(u){return String(u)}},"onmessage");else{let h=i.replaceAll("/","-"),u=p(()=>{let g=this._wsRoutes[h];if(!g){t.send(String({error:"normal ws path:/ws/normal,custom ws path:/ws/instanceName/action\uFF01"}));return}if(g.needAuth&&!r){this._logger.debug("\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01"),t.close(403,"\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01");return}return g},"getInfo");n=p(async(g,w,x)=>{let v=u();if(!v)return;v.action.onMessage(g,w,x)},"onmessage"),c=p(async(g,w)=>{let x=u();if(!x)return;x.action.onOpen(g,w)},"onOpen"),m=p(async(g,w)=>{let x=u();if(!x)return;x.action.onClose(g,w)},"onClose")}t.on("message",async h=>{_.traceHttpRequest&&this._logger.trace("ws on meesage, type "+typeof h);try{let u=await n(h,o,t);u!=null&&t.send(u)}catch(u){this._logger.error(u.meesage)}}),c&&c(o,t),m&&t.on("close",()=>{m(o,t),this._logger.trace("ws closed,from "+o.hostname)}),t.on("error",h=>{this._logger.error(h.message)})})}),this._server.all("/api/*",async(e,t)=>{_.traceHttpRequest&&this._logger.trace("api request,ip"+e.ip+",host:"+e.hostname+",path:"+e.url);let o=e.params["*"].replaceAll("/","-");if(!this._httpRoutes.has(o)){t.send("success");return}let s=this._httpRoutes.get(o);if((s.needAuth||_.publicForceAuth)&&(e.query.token??e.headers.authorization?.replace("Bearer","").trim())!==_.publicToken){this._logger.warn("\u672A\u6388\u6743\u7684\u8BBF\u95EE"),this._logger.warn(e.url),t.status(401),t.send("\u672A\u88AB\u6388\u6743\u7684\u8BBF\u95EE\uFF01");return}let r=s.action;try{return r.type==="normal"?t.send(await r.handler(e)):(r.handler(e,t),t)}catch(i){this._logger.error(i.message),i instanceof Rt?(t.status(401),t.send(i.message)):i instanceof Pt?(t.status(400),t.send(i.message)):i instanceof Ot?(t.status(404),t.send(i.message)):(t.status(500),t.send(String(i)))}}),await this._server.register(Cn,{root:_.publicPath,prefix:_.publicPathName}),Me.env.VERIFY_FILE?.length){let e=yo.resolve("."+Me.env.VERIFY_FILE);Fn(e)?this._server.get(Me.env.VERIFY_FILE,(t,o)=>{this._logger.trace("verify service requested from "+t.url),o.send(Nn(e))}):this._logger.warn("\u8DEF\u5F84"+e+"\u4E0D\u5B58\u5728\uFF0C\u65E0\u6CD5\u521B\u5EFA\u7528\u4E8E\u9A8C\u8BC1\u7AD9\u70B9\u5F52\u5C5E\u7684\u8DEF\u7531\uFF01")}await this._server.ready(),await this._server.listen({host:_.host,port:_.port}),this._logger.info("http server started on port "+_.port)}_checkRegister(){return this._stopped?(this._logger.error("\u5F53\u524D\u670D\u52A1\u5DF2\u505C\u6B62\uFF0C\u65E0\u6CD5\u6CE8\u518C\u65B0\u7684\u8DEF\u7531\u6216\u8005\u63D2\u4EF6\uFF01"),!1):this._running?(this._logger.error("\u5F53\u524D\u670D\u52A1\u5DF2\u7ECF\u542F\u52A8\uFF0C\u65E0\u6CD5\u6CE8\u518C\u65B0\u7684\u8DEF\u7531\u6216\u8005\u63D2\u4EF6\uFF0C\u8BF7\u5728\u8C03\u7528start\u65B9\u6CD5\u4E4B\u524D\u6CE8\u518C\uFF01"),!1):!0}async _initResources(){let e=this._options.sharedCoverPath??yo.resolve(_.publicPath,"images","cover-default.png");(e.startsWith("http")||ur.existsSync(e))&&(this._sharedCover=b.fromPath(e,"binary","shared-cover.png"));let t=this._options.sharedLogoPath??yo.resolve(_.publicPath,"images","logo-default.png");(t.startsWith("http")||ur.existsSync(t))&&(this._sharedLogo=b.fromPath(t,"binary","shared-logo.png"))}async _loadOnlinePlugins(){this._logger.info("loading online plugins...");let e=await this._client.request(Pn("plugins",{filter:{status:{_neq:"archived"}},user_created:{_eq:this._me?.id}}));this._logger.info(e);let t=0;for(let o of e)try{let s=await import(o.name);s=s.default??s.plugin??s,await this.use(s,o),t++}catch(s){this._logger.warn(`\u8F7D\u5165\u63D2\u4EF6${o.name}\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u662F\u5426\u5DF2\u7ECF\u5B89\u88C5\u76F8\u5173npm\u4F9D\u8D56\uFF01`),this._logger.warn(s)}this._logger.info(`${t} online plugin(s) loaded`)}async use(e,t){if(typeof e!="function"){this._logger.warn("\u63D2\u4EF6\u9700\u8981\u5B9E\u73B0\u6307\u5B9A\u63A5\u53E3\uFF0C\u68C0\u6D4B\u5230\u65E0\u6548\u7684\u63D2\u4EF6\uFF1A"),this._logger.warn(e);return}let o=await e(this,t?.options);if(typeof o?.init!="function"){this._logger.warn("\u63D2\u4EF6\u6CA1\u6709\u5B9E\u73B0init\u63A5\u53E3"),this._logger.warn(o);return}if(o.needOnline&&this.offlineMode){this._logger.error("\u63D2\u4EF6"+o.name+"\u9700\u8981\u4F7F\u7528\u5728\u7EBF\u914D\u7F6E\uFF0C\u65E0\u6CD5\u79BB\u7EBF\u6A21\u5F0F\u542F\u52A8\uFF0C\u8BE5\u63D2\u4EF6\u5C06\u88AB\u5FFD\u7565\uFF01");return}return t?.name&&o.name!==t.name&&(this._logger.warn("\u5728\u7EBF\u63D2\u4EF6"+o.name+"\u7684\u4EE3\u7801\u4E0E\u63D2\u4EF6\u5305\u4E2D\u7684\u540D\u79F0\u4E0D\u5339\u914D\uFF0C\u5DF2\u81EA\u52A8\u8986\u76D6\u4E3Anpm\u5305\u4E2D\u7684\u540D\u79F0\uFF01"),o.name=t.name),t?.id&&(t.schecma=o.schema,t.options=t.options??{},this._onlinePluginInfos.set(t.name,t)),this._pluginHandlers.push(o),this._logger.trace("plugin "+o.name+" registered"),o}async start(){if(this._stopped){this._logger.error("\u5F53\u524D\u670D\u52A1\u5DF2\u505C\u6B62\uFF0C\u5982\u9700\u542F\u52A8\uFF0C\u8BF7\u91CD\u65B0\u521B\u5EFA\u65B0\u7684\u5B9E\u4F8B\uFF01");return}if(this._starting||this._running){this._logger.warn("\u670D\u52A1\u5668\u6B63\u5FD9\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5\uFF01");return}if(this._starting=!0,!this._options.offline){this._logger.debug("\u5F53\u524D\u670D\u52A1\u5C06\u542F\u7528\u5728\u7EBF\u914D\u7F6E\uFF0C\u8BF7\u786E\u4FDD\u60A8\u6CE8\u518C\u4E86\u914D\u7F6E\u670D\u52A1\u5668\u7684\u8D26\u53F7\uFF01\u5426\u5219\u8BF7\u5173\u95ED\u5728\u7EBF\u914D\u7F6E\u670D\u52A1\uFF08\u8BBE\u7F6EOFFLINE=true\uFF09"),this._client=On(_.configServerUrl).with(Mn("json")).with(Bn()),await this.client.login(_.configServerEmail,_.configServerPassword);let o=await this._client.request(Rn());this._logger.debug("\u914D\u7F6E\u670D\u52A1\u5668\u8FDE\u63A5\u6210\u529F"),this._logger.debug(`\u5F53\u524D\u767B\u5F55\u8D26\u53F7\uFF1A${o.email}`),this._me=o,await this._loadOnlinePlugins()}this._botManager=new Kt,this._skillManager=new Zt,this._sourceManager=new eo,this._taskTriggerManager=new oo({cacheInstance:!1}),this._taskRunnerManager=new to({cacheInstance:!1}),await this._initResources(),this._logger.trace("default resources loaded");for(let o of this._pluginHandlers)if(o.init){let s=await o.init();s&&(s.bots?.forEach(r=>this._botManager.registerInstanceCreator(r.creator,r.params)),s.sources?.forEach(r=>this._sourceManager.registerInstanceCreator(r.creator,r.params)),s.skills?.forEach(r=>this._skillManager.registerInstanceCreator(r.creator,r.params)),s.taskTriggers?.forEach(r=>this._taskTriggerManager.registerInstanceCreator(r.creator,r.params)),s.taskRunners?.forEach(r=>this._taskRunnerManager.registerInstanceCreator(r.creator,r.params))),this._logger.trace("plugin "+o.name+" init")}await this._createServer(),this._logger.trace("http server created"),await(this._agentService=new Gt(this,this._options.agentServiceOptions)).init(),this._logger.trace("agent service created"),await(this._taskService=new Xt(this,this._options.taskServiceOptions)).init(),this._logger.trace("task service created");for(let o of this._pluginHandlers)o.beforeStart&&(await o.beforeStart(),this._logger.trace(`plugin ${o.name} beforeStart`));await this._initServer(),this._running=!0;for(let o of this._pluginHandlers)o.afterStart&&(await o.afterStart(),this._logger.trace(`plugin ${o.name} afterStart`));this._starting=!1,Me.on("unhandledRejection",o=>{this._logger.error(o?.message??String(o)),this.emit(a.EventNames.ERROR,o)});for(let o of["SIGINT","SIGTERM"])Me.once(o,async()=>(this._logger.info("break signal received"),await this.stop(o)));this._globalEvent.emit(Y.APP_STARTED,{title:"\u670D\u52A1\u542F\u52A8",id:gr()})}async reload(){this._logger.info("agent and task service is reloading,service may unavailable for a while..."),await this._agentService.reload(),await this._taskService.reload(),this._logger.info("agent and task service reload completed"),this._logger.info("if you want to reload plugins,please restart server"),this._globalEvent.emit(Y.APP_RELOAD,{title:"\u670D\u52A1\u91CD\u8F7D",id:gr()})}async stop(e){if(this._logger.trace("stop server"),this._stopping){this._logger.warn("\u670D\u52A1\u5668\u6B63\u5FD9\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5\uFF01");return}this._stopping=!0;for(let t of this._pluginHandlers)t.beforeClose&&await t.beforeClose();await he(this._pluginHandlers),this._pluginHandlers=[],await this._agentService.dispose(),await this._taskService.dispose(),await this._server.close(),this._stopping=!1,this._stopped=!0,this._running=!1,this._logger.trace("server stopped"),e?.length&&(this._logger.warn(`close application on ${e??"stop call"}`),Me.exit(0))}registerRoutes(e,t){let o=`${e}-${t.actionName}`;this._httpRoutes.has(o)&&this._logger.warn("\u8DEF\u7531"+o+"\u5DF2\u88AB\u8986\u76D6"),this._logger.info(`${_.httpUrl}/api/${e}/${t.actionName}\u7684http\u8DEF\u7531\u5DF2\u521B\u5EFA`),this._httpRoutes.set(o,t)}registerWSHandler(e,t){let o=`${e}-${t.actionName}`;this._wsRoutes[o]&&this._logger.warn("ws\u8DEF\u7531"+o+"\u5DF2\u88AB\u8986\u76D6"),this._wsRoutes[o]=t}};export{Ae as Agent,Gt as AgentService,b as AsyncFile,gt as BaiduSTTSkill,ut as BaiduTTSSkill,Q as BaseDrawSkill,j as BaseSTTSkill,U as BaseTTSSkill,A as BasicBot,Kt as BotManager,O as ChatMessage,Tt as ChatMessageTaskRunner,Ct as CogVideoDrawSkill,vt as CogviewDrawSkill,$e as CozeBot,zt as CozeService,nt as CronTaskTrigger,je as DifyAgentBot,at as DingRobotSource,st as EchoTaskRunner,Vt as EventTaskTrigger,qe as FastGPTBot,lt as FeishuSource,bt as FishAudioTTSSkill,Ht as GlobalEvent,Y as GlobalEventNames,Ze as GlobalEventTaskTrigger,jt as HistoryMessageManager,re as InstanceBaseManager,He as OllamaBot,M as OpenAIBot,kt as OpenAIDrawSkill,_e as OpenAISTTSkill,ye as OpenAITTSSkill,Ge as OpenRouterBot,fr as PPAgent,Ke as QAnythingBot,dt as QQSource,$ as SchemaBaseProperties,et as SenseVoiceSTTSkill,Je as SiliconFlowBot,St as SiliconFlowDrawSkill,It as SiliconFlowSTTSkill,wt as SiliconFlowTTSSkill,Yn as SimpleSchemaType,Zt as SkillManager,Ne as SkillSchemaBaseProperties,qt as SortedPromise,Pt as SourceApiMissingParamsError,Ot as SourceApiNotFoundError,Rt as SourceApiUnAuthorizedError,l as SourceChatMessageType,Ye as SourceEventTaskTrigger,f as SourceEventType,eo as SourceManager,tt as SoviteTTSSkill,to as TaskRunnerManager,Jt as TaskRunnerSchemaBaseProperties,Xt as TaskService,Ee as TaskTrigger,oo as TaskTriggerManager,yt as TencentSTTSkill,xt as TencentTTSSkill,ht as WCAISource,it as WCOASource,pt as WeWorkSource,ze as WenxinAgentBot,Ve as XunfeiBot,ft as XunfeiSTTSkill,_t as XunfeiTTSSkill,We as YuanQiBot,Qe as ZhipuBot,Xe as ZhipuQingyanBot,Te as addWavHeader,Gp as apiPlugin,we as arm2wav,de as betterMarkdown,hr as chatMessageRepo,dr as chatSource,be as checkMessageRule,_ as config,Bt as createCacheManager,Lr as createFakeMessage,zo as createFormilySchema,lu as defaultPlugin,qo as detectName,Vo as directRunBot,he as disposeObjects,$o as extractArticleInfo,Be as extractImageUrls,jo as extractMarkdownImageTags,ve as extractMessageContentText,no as extractPositionInfo,Mo as filterContentRule,ue as generateRandomString,Dt as getEnvNumber,Go as getFromMessageSummary,y as getLogger,Z as getSecret,Ko as getToMessageSummary,Uo as hasEmoji,Do as hasMarkdown,Xo as installAndGetPluginInfo,io as installDep,Lt as isPhoneNumber,Bo as removeEmoji,Lo as removeMarkdown,Br as removeTextAt,Ut as richText2Markdown,Le as sleep,ee as sse,Ho as stream2buffer,Re as transFileFormat,Pr as transFormat,Jo as uninstallDep,ce as wav2amr};