ppagent 0.0.29 → 0.0.30

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.d.ts CHANGED
@@ -1610,7 +1610,7 @@ declare class PPAgent extends Emittery {
1610
1610
  roles: string[] | any[];
1611
1611
  }[];
1612
1612
  };
1613
- get onlinePlugins(): IterableIterator<IOnlinePluginInfo>;
1613
+ get onlinePlugins(): MapIterator<IOnlinePluginInfo>;
1614
1614
  get running(): boolean;
1615
1615
  get services(): Map<string, any>;
1616
1616
  private _createServer;
package/dist/lib.js CHANGED
@@ -1,4 +1,4 @@
1
- var fr=Object.defineProperty;var p=(i,e)=>fr(i,"name",{value:e,configurable:!0});import"reflect-metadata";import Hr from"emittery";import gr from"pino";import Zt from"node:process";import _r from"emittery";var yo={level:Zt.env.LOG_LEVEL??"debug"};Zt.env.NODE_ENV==="development"&&(yo.transport={target:"pino-pretty",options:{colorize:!0}});var _o=gr(yo),yr=class extends _r{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??Zt.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})}},be=p((i,e,t,o)=>{typeof t=="string"?(_o[i]("[%s] %s",e,t),o.emitString(i,e,t)):(_o[i]("[%s] %o",e,t),o.emitObject(i,e,t))},"log"),ge=new yr,y=p((i,e=!1)=>({trace:p(t=>be("trace",i,t,ge),"trace"),debug:p(t=>be("debug",i,t,ge),"debug"),info:p(t=>be("info",i,t,ge),"info"),warn:p(t=>be("warn",i,t,ge),"warn"),error:p(t=>be("error",i,t,ge),"error"),fatal:p(t=>be("fatal",i,t,ge),"fatal"),emitter:e?ge:void 0}),"getLogger");import{createReadStream as Lr,existsSync as Jo,mkdirSync as Vo,readFile as Ur,stat as Dr,writeFile as $r}from"node:fs";import{existsSync as xo,mkdirSync as Io}from"node:fs";import Se from"node:path";import S from"node:process";import{v4 as Ir}from"uuid";var eo="0.0.29";import{forward as wr}from"@ngrok/ngrok";var Zn=function(i){return i.text="text",i.number="number",i.boolean="boolean",i.radio="radio",i.check="check",i.select="select",i.date="date",i.image="image",i.video="video",i.audio="audio",i.url="url",i.email="email",i.phone="phone",i.ipv4="ipv4",i}({}),L={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"}}},$=y("config"),At=Number(S.env.PORT??5050),wo=String(S.env.HOST?.length?S.env.HOST:"0.0.0.0"),bo=String(S.env.PRIVATE_HOST?.length?S.env.PRIVATE_HOST:wo),br="http://"+bo+":"+At,vr="ws://"+bo+":"+At,ve,ke,pe=String(S.env.PUBLIC_HOST??"").trim();if(pe.length){let i=Number(S.env.PUBLIC_SSL)===1,e=80;S.env.PUBLIC_PORT?.length?e=Number(S.env.PUBLIC_PORT):i&&(e=443),pe.indexOf("$port")<0?(ve=(i?"wss://":"ws://")+pe+":"+e,ke=(i?"https://":"http://")+pe+":"+e):(ve=(i?"wss://":"ws://")+pe.replace("$port",e.toString()),ke=(i?"https://":"http://")+pe.replace("$port",e.toString()))}else{let i=S.env.PUBLIC_TUNNEL_NAME;i?.length||$.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 wr({addr:At,authtoken:e,domain:i}),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()=>{$.info("close ngrok tunnel"),t.close()});ke=o;let s=o.indexOf("https")===0;pe=o.replace("https://","").replace("http://",""),ve=(s?"wss://":"ws://")+pe,$.debug("auto generated public httpurl "+ke),$.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"),$.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"),$.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"),$.debug("auto generated public wsurl "+ve)}ke?.length||$.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 vo=S.env.PUBLIC_PATH?.length?S.env.PUBLIC_PATH:"/public",ko=Se.resolve(Se.join("./",vo));ve.length||$.warn("WS_URL not defined,if your message source need to connect with your http posted server url ,then error may occured!");var Ct=S.env.PUBLIC_TOKEN;Ct?.length||(Ct=Ir(),$.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"),$.warn("\u968F\u673Atoken\u4E3A\uFF1A"+Ct));var to=Se.resolve(ko,"temp");xo(to)||Io(to,{recursive:!0});var So=S.env.CONFIG_SERVER_URL,Co=S.env.CONFIG_SERVER_EMAIL,To=S.env.CONFIG_SERVER_PASSWORD,Ao=!!(S.env.OFFLINE??!1);(!So?.length||!To?.length||!Co?.length)&&($.warn("CONFIG SERVER\u76F8\u5173\u73AF\u5883\u53D8\u91CF\u672A\u914D\u7F6E\uFF0C\u65E0\u6CD5\u4F7F\u7528\u5728\u7EBF\u914D\u7F6E\u529F\u80FD\uFF01"),Ao=!0);var Tt=Se.resolve(Se.join("./","data"));xo(Tt)||Io(Tt,{recursive:!0});var _={port:At,host:wo,wsUrl:ve,httpUrl:ke,privateHttpUrl:br,privateWsUrl:vr,publicPath:ko,publicPathName:vo,tempDir:to,redisUrl:S.env.REDIS_URL,offline:Ao,configServerUrl:So,configServerEmail:Co,configServerPassword:To,publicToken:Ct,publicForceAuth:S.env.PUBLIC_FORCE_AUTH=="1",secretFile:S.env.SECRETS_FILE??"./config/.secrets.json",traceHttpRequest:S.env.TRACE_HTTP_REQUEST==="1",version:eo,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:Tt,dbProvider:S.env.DB_PROVIDER?.length?S.env.DB_PROVIDER:"sqlite",dbConnection:S.env.DB_CONNECTION?.length?S.env.DB_CONNECTION:Se.join(Tt,"chat.db"),minioMessageBucket:S.env.MINIO_MESSAGE_BUCKET??"messages"};$.warn("\u5F53\u524D\u516C\u7F51\u8BBF\u95EE\u5730\u5740\uFF1A"+_.httpUrl+" ,API TOKEN:"+_.publicToken);$.warn("\u8F6F\u4EF6\u7248\u672C "+eo);$.trace("\u5F53\u524D\u6574\u4F53\u914D\u7F6E\u4FE1\u606F\uFF1A");$.trace(_);import Y,{dirname as jr}from"node:path";import{v4 as qr}from"uuid";import{Buffer as Be}from"node:buffer";import Fo from"recorder-core";var g=function(i){return i.CHAT_MESSAGE="CHAT_MESSAGE",i.RESPONSE_MESSAGE="RESPONSE_MESSAGE",i.LOGIN="LOGIN",i.LOGOUT="LOGOUT",i.GROUP_INFO_CHANGED="GROUP_INFO_CHANGED",i.SYSTEM="SYSTEM",i.SELF_SEND="SELF_SEND",i.FIRST_CHAT="FIRST_CHAT",i.GROUP_NEW_USER="GROUP_NEW_USER",i.ENTER_CHAT="ENTER_CHAT",i.CUSTOM="CUSTOM",i}({}),l=function(i){return i.TEXT="TEXT",i.RICH_TEXT="RICH_TEXT",i.IMAGE="IMAGE",i.AUDIO="AUDIO",i.VIDEO="VIDEO",i.ARTICLE="ARTICLE",i.MUSIC="MUSIC",i.FILE="FILE",i.EMOTION="EMOTION",i.MP="MP",i.REF="REF",i.POSITION="POSITION",i.PHONE="PHONE",i.FRIEND_REQUEST="FRIEND_REQUEST",i.CONTACT_CARD="CONTACT_CARD",i.CARD="CARD",i.RECALL="RECALL",i.PAT="PAT",i.SYSTEM="SYSTEM",i.SUBSCRIBE="SUBSCRIBE",i.UNSUBSCRIBE="UNSUBSCRIBE",i.CUSTOM="CUSTOM",i}({}),Et=class extends Error{static{p(this,"SourceApiNotFoundError")}},Nt=class extends Error{static{p(this,"SourceApiMissingParamsError")}},Ft=class extends Error{static{p(this,"SourceApiUnAuthorizedError")}};import{v4 as _e}from"uuid";import{decodeWavFile as kr}from"wav-file-decoder";import Eo from"keyv";import Sr from"@keyv/redis";import Cr from"ffmpeg-static";import Mo from"fluent-ffmpeg";import{createReadStream as Tr,readFileSync as Ar}from"fs";import{fileTypeFromBuffer as Er,fileTypeFromStream as Nr}from"file-type";import{exec as Po}from"child_process";import Fr from"emittery";Mo.setFfmpegPath(Cr);var E=y("helper"),Mr=JSON.parse(await Ar(_.secretFile).toString());E.trace("secrets files path:"+_.secretFile);var Ce=p(function(i,e,t,o){let s=i.byteLength,r=new ArrayBuffer(44+s),a=new DataView(r);function n(h,f,w){for(let I=0;I<w.length;I++)h.setUint8(f+I,w.charCodeAt(I))}p(n,"writeString");let c=0;n(a,c,"RIFF"),c+=4,a.setUint32(c,36+s,!0),c+=4,n(a,c,"WAVE"),c+=4,n(a,c,"fmt "),c+=4,a.setUint32(c,16,!0),c+=4,a.setUint16(c,1,!0),c+=2,a.setUint16(c,o,!0),c+=2,a.setUint32(c,e,!0),c+=4,a.setUint32(c,e*o*(t/8),!0),c+=4,a.setUint16(c,o*(t/8),!0),c+=2,a.setUint16(c,t,!0),c+=2,n(a,c,"data"),c+=4,a.setUint32(c,s,!0),c+=4;function m(h,f,w){let I=new Int32Array(w);for(let b=0;b<I.length;b++,f+=4)h.setInt32(f,I[b],!0)}p(m,"floatTo32BitPCM");function d(h,f,w){let I=new Int16Array(w);for(let b=0;b<I.length;b++,f+=2)h.setInt16(f,I[b],!0)}p(d,"floatTo16BitPCM");function u(h,f,w){let I=new Int8Array(w);for(let b=0;b<I.length;b++,f++)h.setInt8(f,I[b])}return p(u,"floatTo8BitPCM"),t==16?d(a,44,i):t==8?u(a,44,i):m(a,44,i),a.buffer},"addWavHeader");function Oo(i){return i.replace(/[\p{Emoji_Presentation}\p{Emoji}\u200D]+/gu,"")}p(Oo,"removeEmoji");function Ro(i){return i.replace(/(#+\s*|\*\*\s*|\*\s*|-\s*|_)/g,"").replace(/\*\*(.*?)\*\*/g,"$1").replace(/_(.*?)_/g,"$1").replace(/`(.*?)`/g,"$1").replace(/$$(.*?)$$$$.*?$$/g,"$1").trim()}p(Ro,"removeMarkdown");function Bo(i){return/[\p{Emoji_Presentation}\p{Emoji}\u200D]+/gu.test(i)}p(Bo,"hasEmoji");function Lo(i){return[/^#{1,6}\s/,/\*\*.*\*\*/,/\*.*\*/,/~~.*~~/,/`{1,3}[^`](.*?)`{1,3}/,/^```[\s\S]*?^```/m,/\[.*?\]\(.*?\)/,/!\[.*?\]\(.*?\)/,/^>\s/,/^-+\s*$/,/^(\*|\-|\+)\s/].some(t=>t.test(i))}p(Lo,"hasMarkdown");function Uo(i){return`\u6807\u9898\uFF1A${i.title};\u4F5C\u8005\uFF1A${i.source};\u7F51\u5740\uFF1A${i.url}`}p(Uo,"extractArticleInfo");function oo(i){let e="";return i.placeName?.length&&(e+=i.placeName),i.placeDetail?.length&&(e+="("+i.placeDetail+")"),i.lat!==void 0&&(e+=`\u7ECF\u5EA6${i.lon}\uFF0C\u7EAC\u5EA6${i.lat}`),e}p(oo,"extractPositionInfo");function ce(i){let e=/\((https?:\/\/[^\s]+)\)/g,t,o=i;for(;(t=e.exec(i))!==null;){let s=t[1];o=o.replaceAll(s,` ${s} `)}return o}p(ce,"betterMarkdown");async function le(i){for(let e of i)if(e.dispose){let t=await e.dispose();t?.length&&E.error(t)}}p(le,"disposeObjects");async function ye(i){return new Promise((e,t)=>{Fo.amr2wav(i.buffer,o=>{e(v.fromBuffer(Buffer.from(o),_e()+".wav","binary"))},o=>{E.error(o),t(o)})})}p(ye,"arm2wav");async function ie(i){let e=(await i.asBuffer()).buffer,t=kr(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){E.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,a)=>{Fo({type:"amr",sampleRate:t.sampleRate,bitRate:12.2}).mock(s,t.sampleRate).stop(async(c,m)=>{let d=v.fromBuffer(Buffer.from(await c.arrayBuffer()),_e()+".amr");r({file:d,duration:m})},c=>{a(c)})})}p(ie,"wav2amr");function Mt(i){return _.redisUrl?.length?new Eo(new Sr(_.redisUrl),{namespace:i}):new Eo}p(Mt,"createCacheManager");function Q(i){if(!i.startsWith("__"))return i;let e=Mr[i.slice(2)];return e?.length||E.warn("\u672A\u80FD\u627E\u5230key\u4E3A"+i.slice(2)+"\u7684\u79D8\u94A5"),e}p(Q,"getSecret");function Pt(i){return/^1[3-9]\d{9}$/.test(i)}p(Pt,"isPhoneNumber");function me(i=16){let e="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",t="";for(let o=0;o<i;o++){let s=Math.floor(Math.random()*e.length);t+=e[s]}return t}p(me,"generateRandomString");async function Pr(i,e,t,o){return new Promise(s=>{let r=Mo(i);o&&(r=o(r)),r.toFormat(t).on("end",()=>{s(!0)}).on("error",a=>{E.debug(`\u4ECE${i}\u8F6C\u6362\u4E3A${t}\u5931\u8D25\uFF1A${a.message}`),s(!1)}).save(e)})}p(Pr,"transFormat");async function Oe(i,e,t){return new Promise(o=>{i.asLocalPath().then(s=>{let r=s+"."+e;Pr(s,r,e,t).then(a=>{if(a){let n=v.fromPath(r);o(n)}else o(void 0)})})})}p(Oe,"transFileFormat");function Or(i){let e=/!\[.*?\]\((.*?)\)/g,t=[],o;for(;(o=e.exec(i))!==null;)t.push(o[1]);return t}p(Or,"_extractMarkdonwImages");function Re(i,e=!1){if(i.indexOf("![")>=0)return Or(i);if(e)return[];let t=/(?:\(|"|'|\s|^)(https?:\/\/[^\s'"()]+(?:\.[^\s'"()]+)+(?:\/[^\s'"()]+)*\.(?:jpg|jpeg|png|gif|webp)(?:\?[^\s'"()]*)?)(?:\)|"|'|\s|$)/gi,o=i.match(t);return o?o.map(s=>s.trim().replace(/^[('" ]+|['") ]+$/g,"")):[]}p(Re,"extractImageUrls");function Do(i){let e=/!\[.*?\]\(.*?\)/g;return i.match(e)||[]}p(Do,"extractMarkdownImageTags");async function $o(i,e){let t=typeof i=="string"?await Nr(Tr(i)):await Er(i);if(!t)return E.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??_e()+"."+t.ext;return e}p($o,"detectName");async function jo(i){let e=[];for await(let t of i)e.push(t);return Buffer.concat(e)}p(jo,"stream2buffer");async function se(i,e){let t=i.getReader(),o=new TextDecoder("utf-8"),s="",r=p(async()=>{let{value:a,done:n}=await t.read();if(a){let c=o.decode(a)?.trim();if(c?.length){let m=c.split(`
1
+ var fr=Object.defineProperty;var p=(i,e)=>fr(i,"name",{value:e,configurable:!0});import"reflect-metadata";import Hr from"emittery";import gr from"pino";import Zt from"node:process";import _r from"emittery";var yo={level:Zt.env.LOG_LEVEL??"debug"};Zt.env.NODE_ENV==="development"&&(yo.transport={target:"pino-pretty",options:{colorize:!0}});var _o=gr(yo),yr=class extends _r{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??Zt.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})}},be=p((i,e,t,o)=>{typeof t=="string"?(_o[i]("[%s] %s",e,t),o.emitString(i,e,t)):(_o[i]("[%s] %o",e,t),o.emitObject(i,e,t))},"log"),ge=new yr,y=p((i,e=!1)=>({trace:p(t=>be("trace",i,t,ge),"trace"),debug:p(t=>be("debug",i,t,ge),"debug"),info:p(t=>be("info",i,t,ge),"info"),warn:p(t=>be("warn",i,t,ge),"warn"),error:p(t=>be("error",i,t,ge),"error"),fatal:p(t=>be("fatal",i,t,ge),"fatal"),emitter:e?ge:void 0}),"getLogger");import{createReadStream as Lr,existsSync as Jo,mkdirSync as Vo,readFile as Ur,stat as Dr,writeFile as $r}from"node:fs";import{existsSync as xo,mkdirSync as Io}from"node:fs";import Se from"node:path";import S from"node:process";import{v4 as Ir}from"uuid";var eo="0.0.30";import{forward as wr}from"@ngrok/ngrok";var Zn=function(i){return i.text="text",i.number="number",i.boolean="boolean",i.radio="radio",i.check="check",i.select="select",i.date="date",i.image="image",i.video="video",i.audio="audio",i.url="url",i.email="email",i.phone="phone",i.ipv4="ipv4",i}({}),L={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"}}},$=y("config"),At=Number(S.env.PORT??5050),wo=String(S.env.HOST?.length?S.env.HOST:"0.0.0.0"),bo=String(S.env.PRIVATE_HOST?.length?S.env.PRIVATE_HOST:wo),br="http://"+bo+":"+At,vr="ws://"+bo+":"+At,ve,ke,pe=String(S.env.PUBLIC_HOST??"").trim();if(pe.length){let i=Number(S.env.PUBLIC_SSL)===1,e=80;S.env.PUBLIC_PORT?.length?e=Number(S.env.PUBLIC_PORT):i&&(e=443),pe.indexOf("$port")<0?(ve=(i?"wss://":"ws://")+pe+":"+e,ke=(i?"https://":"http://")+pe+":"+e):(ve=(i?"wss://":"ws://")+pe.replace("$port",e.toString()),ke=(i?"https://":"http://")+pe.replace("$port",e.toString()))}else{let i=S.env.PUBLIC_TUNNEL_NAME;i?.length||$.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 wr({addr:At,authtoken:e,domain:i}),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()=>{$.info("close ngrok tunnel"),t.close()});ke=o;let s=o.indexOf("https")===0;pe=o.replace("https://","").replace("http://",""),ve=(s?"wss://":"ws://")+pe,$.debug("auto generated public httpurl "+ke),$.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"),$.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"),$.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"),$.debug("auto generated public wsurl "+ve)}ke?.length||$.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 vo=S.env.PUBLIC_PATH?.length?S.env.PUBLIC_PATH:"/public",ko=Se.resolve(Se.join("./",vo));ve.length||$.warn("WS_URL not defined,if your message source need to connect with your http posted server url ,then error may occured!");var Ct=S.env.PUBLIC_TOKEN;Ct?.length||(Ct=Ir(),$.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"),$.warn("\u968F\u673Atoken\u4E3A\uFF1A"+Ct));var to=Se.resolve(ko,"temp");xo(to)||Io(to,{recursive:!0});var So=S.env.CONFIG_SERVER_URL,Co=S.env.CONFIG_SERVER_EMAIL,To=S.env.CONFIG_SERVER_PASSWORD,Ao=!!(S.env.OFFLINE??!1);(!So?.length||!To?.length||!Co?.length)&&($.warn("CONFIG SERVER\u76F8\u5173\u73AF\u5883\u53D8\u91CF\u672A\u914D\u7F6E\uFF0C\u65E0\u6CD5\u4F7F\u7528\u5728\u7EBF\u914D\u7F6E\u529F\u80FD\uFF01"),Ao=!0);var Tt=Se.resolve(Se.join("./","data"));xo(Tt)||Io(Tt,{recursive:!0});var _={port:At,host:wo,wsUrl:ve,httpUrl:ke,privateHttpUrl:br,privateWsUrl:vr,publicPath:ko,publicPathName:vo,tempDir:to,redisUrl:S.env.REDIS_URL,offline:Ao,configServerUrl:So,configServerEmail:Co,configServerPassword:To,publicToken:Ct,publicForceAuth:S.env.PUBLIC_FORCE_AUTH=="1",secretFile:S.env.SECRETS_FILE??"./config/.secrets.json",traceHttpRequest:S.env.TRACE_HTTP_REQUEST==="1",version:eo,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:Tt,dbProvider:S.env.DB_PROVIDER?.length?S.env.DB_PROVIDER:"sqlite",dbConnection:S.env.DB_CONNECTION?.length?S.env.DB_CONNECTION:Se.join(Tt,"chat.db"),minioMessageBucket:S.env.MINIO_MESSAGE_BUCKET??"messages"};$.warn("\u5F53\u524D\u516C\u7F51\u8BBF\u95EE\u5730\u5740\uFF1A"+_.httpUrl+" ,API TOKEN:"+_.publicToken);$.warn("\u8F6F\u4EF6\u7248\u672C "+eo);$.trace("\u5F53\u524D\u6574\u4F53\u914D\u7F6E\u4FE1\u606F\uFF1A");$.trace(_);import Y,{dirname as jr}from"node:path";import{v4 as qr}from"uuid";import{Buffer as Be}from"node:buffer";import Fo from"recorder-core";var g=function(i){return i.CHAT_MESSAGE="CHAT_MESSAGE",i.RESPONSE_MESSAGE="RESPONSE_MESSAGE",i.LOGIN="LOGIN",i.LOGOUT="LOGOUT",i.GROUP_INFO_CHANGED="GROUP_INFO_CHANGED",i.SYSTEM="SYSTEM",i.SELF_SEND="SELF_SEND",i.FIRST_CHAT="FIRST_CHAT",i.GROUP_NEW_USER="GROUP_NEW_USER",i.ENTER_CHAT="ENTER_CHAT",i.CUSTOM="CUSTOM",i}({}),l=function(i){return i.TEXT="TEXT",i.RICH_TEXT="RICH_TEXT",i.IMAGE="IMAGE",i.AUDIO="AUDIO",i.VIDEO="VIDEO",i.ARTICLE="ARTICLE",i.MUSIC="MUSIC",i.FILE="FILE",i.EMOTION="EMOTION",i.MP="MP",i.REF="REF",i.POSITION="POSITION",i.PHONE="PHONE",i.FRIEND_REQUEST="FRIEND_REQUEST",i.CONTACT_CARD="CONTACT_CARD",i.CARD="CARD",i.RECALL="RECALL",i.PAT="PAT",i.SYSTEM="SYSTEM",i.SUBSCRIBE="SUBSCRIBE",i.UNSUBSCRIBE="UNSUBSCRIBE",i.CUSTOM="CUSTOM",i}({}),Et=class extends Error{static{p(this,"SourceApiNotFoundError")}},Nt=class extends Error{static{p(this,"SourceApiMissingParamsError")}},Ft=class extends Error{static{p(this,"SourceApiUnAuthorizedError")}};import{v4 as _e}from"uuid";import{decodeWavFile as kr}from"wav-file-decoder";import Eo from"keyv";import Sr from"@keyv/redis";import Cr from"ffmpeg-static";import Mo from"fluent-ffmpeg";import{createReadStream as Tr,readFileSync as Ar}from"fs";import{fileTypeFromBuffer as Er,fileTypeFromStream as Nr}from"file-type";import{exec as Po}from"child_process";import Fr from"emittery";Mo.setFfmpegPath(Cr);var E=y("helper"),Mr=JSON.parse(await Ar(_.secretFile).toString());E.trace("secrets files path:"+_.secretFile);var Ce=p(function(i,e,t,o){let s=i.byteLength,r=new ArrayBuffer(44+s),a=new DataView(r);function n(h,f,w){for(let I=0;I<w.length;I++)h.setUint8(f+I,w.charCodeAt(I))}p(n,"writeString");let c=0;n(a,c,"RIFF"),c+=4,a.setUint32(c,36+s,!0),c+=4,n(a,c,"WAVE"),c+=4,n(a,c,"fmt "),c+=4,a.setUint32(c,16,!0),c+=4,a.setUint16(c,1,!0),c+=2,a.setUint16(c,o,!0),c+=2,a.setUint32(c,e,!0),c+=4,a.setUint32(c,e*o*(t/8),!0),c+=4,a.setUint16(c,o*(t/8),!0),c+=2,a.setUint16(c,t,!0),c+=2,n(a,c,"data"),c+=4,a.setUint32(c,s,!0),c+=4;function m(h,f,w){let I=new Int32Array(w);for(let b=0;b<I.length;b++,f+=4)h.setInt32(f,I[b],!0)}p(m,"floatTo32BitPCM");function d(h,f,w){let I=new Int16Array(w);for(let b=0;b<I.length;b++,f+=2)h.setInt16(f,I[b],!0)}p(d,"floatTo16BitPCM");function u(h,f,w){let I=new Int8Array(w);for(let b=0;b<I.length;b++,f++)h.setInt8(f,I[b])}return p(u,"floatTo8BitPCM"),t==16?d(a,44,i):t==8?u(a,44,i):m(a,44,i),a.buffer},"addWavHeader");function Oo(i){return i.replace(/[\p{Emoji_Presentation}\p{Emoji}\u200D]+/gu,"")}p(Oo,"removeEmoji");function Ro(i){return i.replace(/(#+\s*|\*\*\s*|\*\s*|-\s*|_)/g,"").replace(/\*\*(.*?)\*\*/g,"$1").replace(/_(.*?)_/g,"$1").replace(/`(.*?)`/g,"$1").replace(/$$(.*?)$$$$.*?$$/g,"$1").trim()}p(Ro,"removeMarkdown");function Bo(i){return/[\p{Emoji_Presentation}\p{Emoji}\u200D]+/gu.test(i)}p(Bo,"hasEmoji");function Lo(i){return[/^#{1,6}\s/,/\*\*.*\*\*/,/\*.*\*/,/~~.*~~/,/`{1,3}[^`](.*?)`{1,3}/,/^```[\s\S]*?^```/m,/\[.*?\]\(.*?\)/,/!\[.*?\]\(.*?\)/,/^>\s/,/^-+\s*$/,/^(\*|\-|\+)\s/].some(t=>t.test(i))}p(Lo,"hasMarkdown");function Uo(i){return`\u6807\u9898\uFF1A${i.title};\u4F5C\u8005\uFF1A${i.source};\u7F51\u5740\uFF1A${i.url}`}p(Uo,"extractArticleInfo");function oo(i){let e="";return i.placeName?.length&&(e+=i.placeName),i.placeDetail?.length&&(e+="("+i.placeDetail+")"),i.lat!==void 0&&(e+=`\u7ECF\u5EA6${i.lon}\uFF0C\u7EAC\u5EA6${i.lat}`),e}p(oo,"extractPositionInfo");function ce(i){let e=/\((https?:\/\/[^\s]+)\)/g,t,o=i;for(;(t=e.exec(i))!==null;){let s=t[1];o=o.replaceAll(s,` ${s} `)}return o}p(ce,"betterMarkdown");async function le(i){for(let e of i)if(e.dispose){let t=await e.dispose();t?.length&&E.error(t)}}p(le,"disposeObjects");async function ye(i){return new Promise((e,t)=>{Fo.amr2wav(i.buffer,o=>{e(v.fromBuffer(Buffer.from(o),_e()+".wav","binary"))},o=>{E.error(o),t(o)})})}p(ye,"arm2wav");async function ie(i){let e=(await i.asBuffer()).buffer,t=kr(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){E.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,a)=>{Fo({type:"amr",sampleRate:t.sampleRate,bitRate:12.2}).mock(s,t.sampleRate).stop(async(c,m)=>{let d=v.fromBuffer(Buffer.from(await c.arrayBuffer()),_e()+".amr");r({file:d,duration:m})},c=>{a(c)})})}p(ie,"wav2amr");function Mt(i){return _.redisUrl?.length?new Eo(new Sr(_.redisUrl),{namespace:i}):new Eo}p(Mt,"createCacheManager");function Q(i){if(!i.startsWith("__"))return i;let e=Mr[i.slice(2)];return e?.length||E.warn("\u672A\u80FD\u627E\u5230key\u4E3A"+i.slice(2)+"\u7684\u79D8\u94A5"),e}p(Q,"getSecret");function Pt(i){return/^1[3-9]\d{9}$/.test(i)}p(Pt,"isPhoneNumber");function me(i=16){let e="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",t="";for(let o=0;o<i;o++){let s=Math.floor(Math.random()*e.length);t+=e[s]}return t}p(me,"generateRandomString");async function Pr(i,e,t,o){return new Promise(s=>{let r=Mo(i);o&&(r=o(r)),r.toFormat(t).on("end",()=>{s(!0)}).on("error",a=>{E.debug(`\u4ECE${i}\u8F6C\u6362\u4E3A${t}\u5931\u8D25\uFF1A${a.message}`),s(!1)}).save(e)})}p(Pr,"transFormat");async function Oe(i,e,t){return new Promise(o=>{i.asLocalPath().then(s=>{let r=s+"."+e;Pr(s,r,e,t).then(a=>{if(a){let n=v.fromPath(r);o(n)}else o(void 0)})})})}p(Oe,"transFileFormat");function Or(i){let e=/!\[.*?\]\((.*?)\)/g,t=[],o;for(;(o=e.exec(i))!==null;)t.push(o[1]);return t}p(Or,"_extractMarkdonwImages");function Re(i,e=!1){if(i.indexOf("![")>=0)return Or(i);if(e)return[];let t=/(?:\(|"|'|\s|^)(https?:\/\/[^\s'"()]+(?:\.[^\s'"()]+)+(?:\/[^\s'"()]+)*\.(?:jpg|jpeg|png|gif|webp)(?:\?[^\s'"()]*)?)(?:\)|"|'|\s|$)/gi,o=i.match(t);return o?o.map(s=>s.trim().replace(/^[('" ]+|['") ]+$/g,"")):[]}p(Re,"extractImageUrls");function Do(i){let e=/!\[.*?\]\(.*?\)/g;return i.match(e)||[]}p(Do,"extractMarkdownImageTags");async function $o(i,e){let t=typeof i=="string"?await Nr(Tr(i)):await Er(i);if(!t)return E.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??_e()+"."+t.ext;return e}p($o,"detectName");async function jo(i){let e=[];for await(let t of i)e.push(t);return Buffer.concat(e)}p(jo,"stream2buffer");async function se(i,e){let t=i.getReader(),o=new TextDecoder("utf-8"),s="",r=p(async()=>{let{value:a,done:n}=await t.read();if(a){let c=o.decode(a)?.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 u=JSON.parse(d);if(e(u),m.length>1){for(let h=1;h<m.length-1;h++)u=JSON.parse(m[h]),e(u);try{u=JSON.parse(m[m.length-1]),e(u)}catch{s=m[m.length-1]}}}catch{s=d}}}}n?E.debug("\u6D88\u606F\u6D41\u5173\u95ED"):await r()},"read");return r()}p(se,"sse");async function Ot(i){let e=`### ${i.title}`;for(let t of i.content)if(t.type==="text")e+=`
3
3
 
4
4
  ${t.data}
@@ -40,4 +40,4 @@ GET ${this._uri} HTTP/1.1`,o=tn(t,this._options.secretKey),s=or.stringify(o),r=`
40
40
  date: ${e}
41
41
  GET ${this._uri} HTTP/1.1`,o=sn(t,this._options.secretKey),s=rr.stringify(o),r=`api_key="${this._options.apiKey}", algorithm="hmac-sha256", headers="host date request-line", signature="${s}"`;return rr.stringify(nn.parse(r))}async getAudioBuffer(e){let t=new Date().toUTCString(),o=this._hostUrl+"?authorization="+this._getAuthStr(t)+"&date="+t+"&host="+this._host,s=new an(o);return new Promise(r=>{let a;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,u=Buffer.from(d,"base64");a?a=Buffer.concat([a,u]):a=u,m.data.status==2&&(this._logger.trace("audio generated"),a=Buffer.from(Ce(a.buffer,16e3,16,1)),s.close())}),s.on("close",()=>{this._logger.trace("connect close!"),r(a)}),s.on("error",n=>{this._logger.trace("websocket connect err: "+n),r(void 0)})})}};import pn from"tencentcloud-sdk-nodejs-asr";var cn=pn.asr.v20190614.Client,gt=class i extends U{static{p(this,"TencentSTTSkill")}_app;_options;static params={name:"tencent-stt",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}}}},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 cn({credential:{secretId:this._options.secretId,secretKey:this._options.secretKey},region:"",profile:{httpProfile:{endpoint:"asr.tencentcloudapi.com"}}})}get options(){return this._options}get params(){return i.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 ln from"tencentcloud-sdk-nodejs-tts";import{v4 as mn}from"uuid";var dn=ln.tts.v20190823.Client,_t=class i extends R{static{p(this,"TencentTTSSkill")}_app;_options;static params={name:"tencent-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...R.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 dn({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 i.params}async getAudioBuffer(e){try{let t=await this._client.TextToVoice({Text:e,SessionId:mn(),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 he=class i extends U{static{p(this,"OpenAISTTSkill")}_app;_options;static params={name:"openai-stt",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 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 i.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 yt=class i extends he{static{p(this,"SiliconFlowSTTSkill")}_app;_options;static params={name:"silicon-flow-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...he.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 i.params}};var fe=class i extends R{static{p(this,"OpenAITTSSkill")}_app;_options;static params={name:"openai-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...R.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 i.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 xt=class i extends fe{static{p(this,"SiliconFlowTTSSkill")}_app;_options;static params={name:"silicon-flow-tts-skill",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 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 i.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(Ce(t.buffer,16e3,16,1)):void 0}catch(t){this._logger.error(t.message);return}}};var It=class i extends R{static{p(this,"FishAudioTTSSkill")}_app;_options;static params={name:"openai-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...R.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 i.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 X=class i{static{p(this,"BaseDrawSkill")}_app;_options;static params={name:"base-draw-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...Ee,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 i.params}async init(){}async applyOnSource(e){let t=Ie(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,u={...d,type:l.TEXT,content:c,origin:void 0};e.message=u;try{let h=await m.prepareMessage(e),f="";await m.getResponse(e,{onContent:p((w,I)=>{I===l.TEXT&&(f+=w)},"onContent"),onError:p(w=>{this._logger.error(w)},"onError")},h,[]),r=f,this._logger.debug("\u4F18\u5316\u540E\u7684\u63D0\u793A\u8BCD\uFF1A"+r)}catch(h){this._logger.error(h.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 a=e.message.senderId,n=await this._draw(r,a,e);if(n?.url.length)if(e.message=void 0,this._options.replyFormat==="IMAGE"){let c={file:v.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:v.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:v.fromPath(n.url),previewImage:n.coverUrl?v.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+`
42
42
  `+(n.text??""),l.TEXT,void 0,!0):e.reply(`![\u70B9\u6211\u67E5\u770B\u7ED8\u56FE\u7ED3\u679C](${n})
43
- ${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 wt=class extends X{static{p(this,"CogviewDrawSkill")}_app;_options;static params={name:"cogview-skill",desc:"CogView\u7ED8\u56FE",optionsSchema:{type:"formily",formily:{type:"object",properties:{...X.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 bt=class extends X{static{p(this,"OpenAIDrawSkill")}_app;_options;static params={name:"openai-skill",desc:"OpenAI\u7ED8\u56FE",optionsSchema:{type:"formily",formily:{type:"object",properties:{...X.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 vt=class extends X{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:{...X.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 hn}from"uuid";var kt=class extends X{static{p(this,"CogVideoDrawSkill")}_app;_options;static params={name:"cogvideo-skill",desc:"CogVideo\u89C6\u9891\u751F\u6210",optionsSchema:{type:"formily",formily:{type:"object",properties:{...X.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:hn()})})).json();if(this._logger.debug(o),o?.id)return new Promise(s=>{try{let r=new Date().getTime(),a=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(a,3e3)},"q");a()}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 wn}from"typeorm";import{Column as H,Entity as yn,Index as ho,PrimaryGeneratedColumn as xn}from"typeorm";import{Client as fn}from"minio";import sr from"fs/promises";import Xt from"node:path";import{existsSync as gn}from"fs";import{basename as ir}from"path";var lo=class{static{p(this,"LocalFileOperator")}constructor(e,t){this._basePath=Xt.join(e,t)}_basePath;async writeFile(e,t){let o=e.startsWith("/")?e:Xt.join(this._basePath,e),s=Xt.dirname(o);gn(s)||await sr.mkdir(s,{recursive:!0}),await sr.writeFile(o,await t.asBuffer())}readFile(e){let t=e.startsWith("/")?e:Xt.join(this._basePath,e);return v.fromPath(t,"binary",ir(t))}},mo=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,a)=>{o.on("data",n=>{s.push(n)}),o.on("end",()=>{let n=Buffer.concat(s);r(n)}),o.on("error",n=>{a(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 v(async()=>({data:await this._downloadFileToBuffer(this._bucket,e),type:"buffer",name:ir(e)}),"binary")}},_n=y("file-operator"),nr,uo;process.env.MINIO_ENABLE==="1"?(_n.info("minio enabled"),nr=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}),uo=p(i=>new mo(nr,i),"_createFileOperator")):uo=p(i=>new lo(_.dataPath,i),"_createFileOperator");var ar=uo;function D(i,e,t,o){var s=arguments.length,r=s<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(i,e,t,o);else for(var n=i.length-1;n>=0;n--)(a=i[n])&&(r=(s<3?a(r):s>3?a(e,t,r):a(e,t))||r);return s>3&&r&&Object.defineProperty(e,t,r),r}p(D,"_ts_decorate");function q(i,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(i,e)}p(q,"_ts_metadata");var pr=ar(_.minioMessageBucket),In=y("chat-message-orm"),F=class i{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 i;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=Ie(e.content),o.raw=JSON.stringify(e,(s,r)=>{if(r?.asBuffer){let a=`${e.fromId}/${e.time.getFullYear()}/${e.time.getMonth()+1}-${e.time.getDate()}/${r.name}`;return pr.writeFile(a,r).then(()=>{In.trace("attach saved")}),"attach://"+a}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 a=r.substring(9);return pr.readFile(a)}return r}),time:new Date(e.createdAt)}}};D([xn("uuid"),q("design:type",String)],F.prototype,"id",void 0);D([H("varchar"),q("design:type",String)],F.prototype,"msgId",void 0);D([H("varchar"),q("design:type",String)],F.prototype,"type",void 0);D([ho(),H("varchar"),q("design:type",String)],F.prototype,"fromId",void 0);D([ho(),H("numeric"),q("design:type",Number)],F.prototype,"createdAt",void 0);D([H("varchar"),q("design:type",String)],F.prototype,"senderId",void 0);D([H("varchar",{nullable:!0}),q("design:type",String)],F.prototype,"senderName",void 0);D([H("varchar",{nullable:!0}),q("design:type",String)],F.prototype,"senderNickName",void 0);D([H("text",{nullable:!0}),q("design:type",String)],F.prototype,"senderAvatar",void 0);D([H("boolean",{nullable:!0}),q("design:type",Boolean)],F.prototype,"isGroupChat",void 0);D([H("boolean",{nullable:!0}),q("design:type",Boolean)],F.prototype,"isSender",void 0);D([H("varchar",{nullable:!0}),q("design:type",String)],F.prototype,"customType",void 0);D([H("text"),q("design:type",String)],F.prototype,"raw",void 0);D([H("varchar"),q("design:type",String)],F.prototype,"sourceName",void 0);D([ho(),H("varchar"),q("design:type",String)],F.prototype,"sourceInstanceName",void 0);D([H("text",{nullable:!0}),q("design:type",String)],F.prototype,"text",void 0);F=D([yn()],F);var cr=y("db-logger"),bn={sqlite:{npmName:"better-sqlite3",ormType:"better-sqlite3"},pg:{npmName:"pg",ormType:"postgres"},mysql:{npmName:"mysql"},mongodb:{npmName:"mongodb",version:"^5.2.0"}},Ne=bn[_.dbProvider];if(!Ne)throw new Error("DB_PROVIDER\u914D\u7F6E\u9519\u8BEF\uFF08\u4EC5\u652F\u6301mysql pg sqlite mongodb\uFF09\uFF1A"+_.dbProvider);try{await import(Ne.npmName)}catch{cr.warn("\u5F53\u524D\u5C1A\u672A\u5B89\u88C5"+_.dbProvider+"\u6570\u636E\u5E93\u5F15\u64CE\uFF0C\u5C06\u5C1D\u8BD5\u81EA\u52A8\u5B89\u88C5\uFF01"),await so(Ne.npmName,_.npmRegistry,Ne.version,!1),cr.info("\u6570\u636E\u5E93\u5F15\u64CE"+Ne.npmName+"\u5B89\u88C5\u6210\u529F\uFF01")}var fo=_.dbProvider==="sqlite"?{database:_.dbConnection,type:"better-sqlite3"}:{url:_.dbConnection,type:Ne.ormType??_.dbProvider};fo={maxQueryExecutionTime:5e3,synchronize:!0,entities:[F],...fo};var lr=new wn(fo);await lr.initialize();var mr=lr.getRepository(F);var St=class i{static{p(this,"ChatMessageTaskRunner")}_app;_options;static params={name:"chat-message-runner",triggerConstraints:void 0,optionsSchema:{type:"formily",formily:{type:"object",properties:{...Kt}}},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 i.params}async run(e){try{let t=e.data,o=F.fromMessage(t.message,t.source);return mr.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 Qu=p(async i=>({init:p(async()=>({skills:[{creator:p(e=>new Ze(e),"creator"),params:Ze.params},{creator:p(e=>new Ye(e),"creator"),params:Ye.params},{creator:p(e=>new dt(i,e),"creator"),params:dt.params},{creator:p(e=>new ut(i,e),"creator"),params:ut.params},{creator:p(e=>new ht(i,e),"creator"),params:ht.params},{creator:p(e=>new ft(i,e),"creator"),params:ft.params},{creator:p(e=>new gt(i,e),"creator"),params:gt.params},{creator:p(e=>new _t(i,e),"creator"),params:_t.params},{creator:p(e=>new he(i,e),"creator"),params:he.params},{creator:p(e=>new yt(i,e),"creator"),params:yt.params},{creator:p(e=>new fe(i,e),"creator"),params:fe.params},{creator:p(e=>new xt(i,e),"creator"),params:xt.params},{creator:p(e=>new It(i,e),"creator"),params:It.params},{creator:p(e=>new wt(i,e),"creator"),params:wt.params},{creator:p(e=>new bt(i,e),"creator"),params:bt.params},{creator:p(e=>new vt(i,e),"creator"),params:vt.params},{creator:p(e=>new kt(i,e),"creator"),params:kt.params}],bots:[{creator:p(e=>new De(e),"creator"),params:De.params},{creator:p(e=>new Ue(e),"creator"),params:Ue.params},{creator:p(e=>new O(e),"creator"),params:O.params},{creator:p(e=>new $e(e),"creator"),params:$e.params},{creator:p(e=>new Ge(e),"creator"),params:Ge.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 je(e),"creator"),params:je.params},{creator:p(e=>new qe(e),"creator"),params:qe.params},{creator:p(e=>new Xe(e),"creator"),params:Xe.params},{creator:p(e=>new Je(e),"creator"),params:Je.params},{creator:p(e=>new We(e),"creator"),params:We.params}],sources:[{creator:p(e=>new st(e),"creator"),params:st.params},{creator:p(e=>new tt(e),"creator"),params:tt.params},{creator:p(e=>new nt(i,e),"creator"),params:nt.params},{creator:p(e=>new it(i,e),"creator"),params:it.params},{creator:p(e=>new pt(i,e),"creator"),params:pt.params},{creator:p(e=>new lt(i,e),"creator"),params:lt.params},{creator:p(e=>new mt(i,e),"creator"),params:mt.params}],taskTriggers:[{creator:p(e=>new Ve(i,e),"creator"),params:Ve.params},{creator:p(e=>new Qe(i,e),"creator"),params:Qe.params},{creator:p(e=>new rt(i,e),"creator"),params:rt.params}],taskRunners:[{creator:p(e=>new ot(i,e),"creator"),params:ot.params},{creator:p(e=>new St(i,e),"creator"),params:St.params}]}),"init"),needOnline:!1,name:"\u9ED8\u8BA4\u63D2\u4EF6",dispose:p(async()=>{},"dispose")}),"defaultPlugin");var Jt=class extends Z{static{p(this,"SkillManager")}};var Vt=class extends Z{static{p(this,"SourceManager")}};var Qt=class extends Z{static{p(this,"TaskRunnerManager")}options;constructor(e){e.cacheInstance=!1,super(e),this.options=e}},Yt=class extends Z{static{p(this,"TaskTriggerManager")}options;constructor(e){e.cacheInstance=!1,super(e),this.options=e}};import vn from"fastify";import kn from"@fastify/websocket";import Sn from"@fastify/static";import Fe from"node:process";import Cn from"@fastify/formbody";import Tn from"emittery";import{XMLParser as An}from"fast-xml-parser";import dr from"fs";import go from"node:path";import{createReadStream as En,existsSync as Nn}from"node:fs";import{authentication as Fn,createDirectus as Mn,readItems as Pn,readMe as On,rest as Rn}from"@directus/sdk";import Bn from"@fastify/cors";import{v4 as ur}from"uuid";import Ln from"@fastify/compress";var hr=class i extends Tn{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 An,this._onlinePluginInfos=new Map,this._services=new Map,this._logger=y("app-"+this._options.name),this._globalEvent=new Dt(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=vn({logger:{level:"warn"}}),await this._server.register(kn),await this._server.register(Cn),await this._server.register(Bn,{origin:"*"}),_.serverCompress&&(this._logger.info("\u542F\u7528\u670D\u52A1\u5668gzip\u538B\u7F29"),await this._server.register(Ln,{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(),a=this._xmlParser.parse(r);o(null,a)}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 a=o.params["*"],n,c,m,d=new TextDecoder("utf-8");if(a==="normal")n=p(async u=>{u instanceof Buffer&&(u=d.decode(u));try{let h=JSON.parse(u),f=`${h?.instanceName}-${h?.action}`,w=this._wsRoutes[f];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 I=w.action;if(!I){this._logger.warn("unhandled message:"+u);return}let b=await I(h.data);if(b!=null){let C={id:h.id,data:b};return JSON.stringify(C)}}catch(h){return String(h)}},"onmessage");else{let u=a.replaceAll("/","-"),h=p(()=>{let f=this._wsRoutes[u];if(!f){t.send(String({error:"normal ws path:/ws/normal,custom ws path:/ws/instanceName/action\uFF01"}));return}if(f.needAuth&&!r){this._logger.debug("\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01"),t.close(403,"\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01");return}return f},"getInfo");n=p(async(f,w,I)=>{let b=h();if(!b)return;b.action.onMessage(f,w,I)},"onmessage"),c=p(async(f,w)=>{let I=h();if(!I)return;I.action.onOpen(f,w)},"onOpen"),m=p(async(f,w)=>{let I=h();if(!I)return;I.action.onClose(f,w)},"onClose")}t.on("message",async u=>{_.traceHttpRequest&&this._logger.trace("ws on meesage, type "+typeof u);try{let h=await n(u,o,t);h!=null&&t.send(h)}catch(h){this._logger.error(h)}}),c&&c(o,t),m&&t.on("close",()=>{m(o,t),this._logger.trace("ws closed,from "+o.hostname)}),t.on("error",u=>{this._logger.error(u)})})}),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(a){a instanceof Ft?(t.status(401),t.send(a.message)):a instanceof Nt?(t.status(400),t.send(a.message)):a instanceof Et?(t.status(404),t.send(a.message)):(t.status(500),t.send(String(a)))}}),await this._server.register(Sn,{root:_.publicPath,prefix:_.publicPathName}),Fe.env.VERIFY_FILE?.length){let e=go.resolve("."+Fe.env.VERIFY_FILE);Nn(e)?this._server.get(Fe.env.VERIFY_FILE,(t,o)=>{this._logger.trace("verify service requested from "+t.url),o.send(En(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??go.resolve(_.publicPath,"images","cover-default.png");(e.startsWith("http")||dr.existsSync(e))&&(this._sharedCover=v.fromPath(e,"binary","shared-cover.png"));let t=this._options.sharedLogoPath??go.resolve(_.publicPath,"images","logo-default.png");(t.startsWith("http")||dr.existsSync(t))&&(this._sharedLogo=v.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=Mn(_.configServerUrl).with(Fn("json")).with(Rn()),await this.client.login(_.configServerEmail,_.configServerPassword);let o=await this._client.request(On());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 jt,this._skillManager=new Jt,this._sourceManager=new Vt,this._taskTriggerManager=new Yt({cacheInstance:!1}),this._taskRunnerManager=new Qt({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 $t(this,this._options.agentServiceOptions)).init(),this._logger.trace("agent service created"),await(this._taskService=new Ht(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,Fe.on("unhandledRejection",o=>{this._logger.error(o),this.emit(i.EventNames.ERROR,o)});for(let o of["SIGINT","SIGTERM"])Fe.once(o,async()=>(this._logger.info("break signal received"),await this.stop(o)));this._globalEvent.emit(J.APP_STARTED,{title:"\u670D\u52A1\u542F\u52A8",id:ur()})}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(J.APP_RELOAD,{title:"\u670D\u52A1\u91CD\u8F7D",id:ur()})}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 le(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"}`),Fe.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{Te as Agent,$t as AgentService,v as AsyncFile,ut as BaiduSTTSkill,dt as BaiduTTSSkill,X as BaseDrawSkill,U as BaseSTTSkill,R as BaseTTSSkill,N as BasicBot,jt as BotManager,F as ChatMessage,St as ChatMessageTaskRunner,kt as CogVideoDrawSkill,wt as CogviewDrawSkill,Ue as CozeBot,qt as CozeService,rt as CronTaskTrigger,De as DifyAgentBot,nt as DingRobotSource,ot as EchoTaskRunner,zt as EventTaskTrigger,$e as FastGPTBot,pt as FeishuSource,It as FishAudioTTSSkill,Dt as GlobalEvent,J as GlobalEventNames,Qe as GlobalEventTaskTrigger,Lt as HistoryMessageManager,Z as InstanceBaseManager,je as OllamaBot,O as OpenAIBot,bt as OpenAIDrawSkill,he as OpenAISTTSkill,fe as OpenAITTSSkill,qe as OpenRouterBot,hr as PPAgent,Ge as QAnythingBot,lt as QQSource,L as SchemaBaseProperties,Ye as SenseVoiceSTTSkill,We as SiliconFlowBot,vt as SiliconFlowDrawSkill,yt as SiliconFlowSTTSkill,xt as SiliconFlowTTSSkill,Zn as SimpleSchemaType,Jt as SkillManager,Ee as SkillSchemaBaseProperties,Ut as SortedPromise,Nt as SourceApiMissingParamsError,Et as SourceApiNotFoundError,Ft as SourceApiUnAuthorizedError,l as SourceChatMessageType,Ve as SourceEventTaskTrigger,g as SourceEventType,Vt as SourceManager,Ze as SoviteTTSSkill,Qt as TaskRunnerManager,Kt as TaskRunnerSchemaBaseProperties,Ht as TaskService,Ae as TaskTrigger,Yt as TaskTriggerManager,gt as TencentSTTSkill,_t as TencentTTSSkill,mt as WCAISource,st as WCOASource,it as WeWorkSource,He as WenxinAgentBot,Xe as XunfeiBot,ht as XunfeiSTTSkill,ft as XunfeiTTSSkill,Ke as YuanQiBot,Je as ZhipuBot,ze as ZhipuQingyanBot,Ce as addWavHeader,Kp as apiPlugin,ye as arm2wav,ce as betterMarkdown,mr as chatMessageRepo,lr as chatSource,xe as checkMessageRule,_ as config,Mt as createCacheManager,Br as createFakeMessage,Ho as createFormilySchema,Qu as defaultPlugin,$o as detectName,Xo as directRunBot,le as disposeObjects,Uo as extractArticleInfo,Re as extractImageUrls,Do as extractMarkdownImageTags,Ie as extractMessageContentText,oo as extractPositionInfo,No as filterContentRule,me as generateRandomString,Rt as getEnvNumber,qo as getFromMessageSummary,y as getLogger,Q as getSecret,Go as getToMessageSummary,Bo as hasEmoji,Lo as hasMarkdown,zo as installAndGetPluginInfo,so as installDep,Pt as isPhoneNumber,Oo as removeEmoji,Ro as removeMarkdown,Rr as removeTextAt,Ot as richText2Markdown,ro as sleep,se as sse,jo as stream2buffer,Oe as transFileFormat,Pr as transFormat,Wo as uninstallDep,ie as wav2amr};
43
+ ${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 wt=class extends X{static{p(this,"CogviewDrawSkill")}_app;_options;static params={name:"cogview-skill",desc:"CogView\u7ED8\u56FE",optionsSchema:{type:"formily",formily:{type:"object",properties:{...X.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 bt=class extends X{static{p(this,"OpenAIDrawSkill")}_app;_options;static params={name:"openai-skill",desc:"OpenAI\u7ED8\u56FE",optionsSchema:{type:"formily",formily:{type:"object",properties:{...X.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 vt=class extends X{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:{...X.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 hn}from"uuid";var kt=class extends X{static{p(this,"CogVideoDrawSkill")}_app;_options;static params={name:"cogvideo-skill",desc:"CogVideo\u89C6\u9891\u751F\u6210",optionsSchema:{type:"formily",formily:{type:"object",properties:{...X.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:hn()})})).json();if(this._logger.debug(o),o?.id)return new Promise(s=>{try{let r=new Date().getTime(),a=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(a,3e3)},"q");a()}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 wn}from"typeorm";import{Column as H,Entity as yn,Index as ho,PrimaryGeneratedColumn as xn}from"typeorm";import{Client as fn}from"minio";import sr from"fs/promises";import Xt from"node:path";import{existsSync as gn}from"fs";import{basename as ir}from"path";var lo=class{static{p(this,"LocalFileOperator")}constructor(e,t){this._basePath=Xt.join(e,t)}_basePath;async writeFile(e,t){let o=e.startsWith("/")?e:Xt.join(this._basePath,e),s=Xt.dirname(o);gn(s)||await sr.mkdir(s,{recursive:!0}),await sr.writeFile(o,await t.asBuffer())}readFile(e){let t=e.startsWith("/")?e:Xt.join(this._basePath,e);return v.fromPath(t,"binary",ir(t))}},mo=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,a)=>{o.on("data",n=>{s.push(n)}),o.on("end",()=>{let n=Buffer.concat(s);r(n)}),o.on("error",n=>{a(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 v(async()=>({data:await this._downloadFileToBuffer(this._bucket,e),type:"buffer",name:ir(e)}),"binary")}},_n=y("file-operator"),nr,uo;process.env.MINIO_ENABLE==="1"?(_n.info("minio enabled"),nr=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}),uo=p(i=>new mo(nr,i),"_createFileOperator")):uo=p(i=>new lo(_.dataPath,i),"_createFileOperator");var ar=uo;function D(i,e,t,o){var s=arguments.length,r=s<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(i,e,t,o);else for(var n=i.length-1;n>=0;n--)(a=i[n])&&(r=(s<3?a(r):s>3?a(e,t,r):a(e,t))||r);return s>3&&r&&Object.defineProperty(e,t,r),r}p(D,"_ts_decorate");function q(i,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(i,e)}p(q,"_ts_metadata");var pr=ar(_.minioMessageBucket),In=y("chat-message-orm"),F=class i{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 i;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=Ie(e.content),o.raw=JSON.stringify(e,(s,r)=>{if(r?.asBuffer){let a=`${e.fromId}/${e.time.getFullYear()}/${e.time.getMonth()+1}-${e.time.getDate()}/${r.name}`;return pr.writeFile(a,r).then(()=>{In.trace("attach saved")}),"attach://"+a}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 a=r.substring(9);return pr.readFile(a)}return r}),time:new Date(e.createdAt)}}};D([xn("uuid"),q("design:type",String)],F.prototype,"id",void 0);D([H("varchar"),q("design:type",String)],F.prototype,"msgId",void 0);D([H("varchar"),q("design:type",String)],F.prototype,"type",void 0);D([ho(),H("varchar"),q("design:type",String)],F.prototype,"fromId",void 0);D([ho(),H("numeric"),q("design:type",Number)],F.prototype,"createdAt",void 0);D([H("varchar"),q("design:type",String)],F.prototype,"senderId",void 0);D([H("varchar",{nullable:!0}),q("design:type",String)],F.prototype,"senderName",void 0);D([H("varchar",{nullable:!0}),q("design:type",String)],F.prototype,"senderNickName",void 0);D([H("text",{nullable:!0}),q("design:type",String)],F.prototype,"senderAvatar",void 0);D([H("boolean",{nullable:!0}),q("design:type",Boolean)],F.prototype,"isGroupChat",void 0);D([H("boolean",{nullable:!0}),q("design:type",Boolean)],F.prototype,"isSender",void 0);D([H("varchar",{nullable:!0}),q("design:type",String)],F.prototype,"customType",void 0);D([H("text"),q("design:type",String)],F.prototype,"raw",void 0);D([H("varchar"),q("design:type",String)],F.prototype,"sourceName",void 0);D([ho(),H("varchar"),q("design:type",String)],F.prototype,"sourceInstanceName",void 0);D([H("text",{nullable:!0}),q("design:type",String)],F.prototype,"text",void 0);F=D([yn()],F);var cr=y("db-logger"),bn={sqlite:{npmName:"better-sqlite3",ormType:"better-sqlite3"},pg:{npmName:"pg",ormType:"postgres"},mysql:{npmName:"mysql"},mongodb:{npmName:"mongodb",version:"^5.2.0"}},Ne=bn[_.dbProvider];if(!Ne)throw new Error("DB_PROVIDER\u914D\u7F6E\u9519\u8BEF\uFF08\u4EC5\u652F\u6301mysql pg sqlite mongodb\uFF09\uFF1A"+_.dbProvider);try{await import(Ne.npmName)}catch{cr.warn("\u5F53\u524D\u5C1A\u672A\u5B89\u88C5"+_.dbProvider+"\u6570\u636E\u5E93\u5F15\u64CE\uFF0C\u5C06\u5C1D\u8BD5\u81EA\u52A8\u5B89\u88C5\uFF01"),await so(Ne.npmName,_.npmRegistry,Ne.version,!1),cr.info("\u6570\u636E\u5E93\u5F15\u64CE"+Ne.npmName+"\u5B89\u88C5\u6210\u529F\uFF01")}var fo=_.dbProvider==="sqlite"?{database:_.dbConnection,type:"better-sqlite3"}:{url:_.dbConnection,type:Ne.ormType??_.dbProvider};fo={maxQueryExecutionTime:5e3,synchronize:!0,entities:[F],...fo};var lr=new wn(fo);await lr.initialize();var mr=lr.getRepository(F);var St=class i{static{p(this,"ChatMessageTaskRunner")}_app;_options;static params={name:"chat-message-runner",triggerConstraints:void 0,optionsSchema:{type:"formily",formily:{type:"object",properties:{...Kt}}},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 i.params}async run(e){try{let t=e.data,o=F.fromMessage(t.message,t.source);return mr.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 Qu=p(async i=>({init:p(async()=>({skills:[{creator:p(e=>new Ze(e),"creator"),params:Ze.params},{creator:p(e=>new Ye(e),"creator"),params:Ye.params},{creator:p(e=>new dt(i,e),"creator"),params:dt.params},{creator:p(e=>new ut(i,e),"creator"),params:ut.params},{creator:p(e=>new ht(i,e),"creator"),params:ht.params},{creator:p(e=>new ft(i,e),"creator"),params:ft.params},{creator:p(e=>new gt(i,e),"creator"),params:gt.params},{creator:p(e=>new _t(i,e),"creator"),params:_t.params},{creator:p(e=>new he(i,e),"creator"),params:he.params},{creator:p(e=>new yt(i,e),"creator"),params:yt.params},{creator:p(e=>new fe(i,e),"creator"),params:fe.params},{creator:p(e=>new xt(i,e),"creator"),params:xt.params},{creator:p(e=>new It(i,e),"creator"),params:It.params},{creator:p(e=>new wt(i,e),"creator"),params:wt.params},{creator:p(e=>new bt(i,e),"creator"),params:bt.params},{creator:p(e=>new vt(i,e),"creator"),params:vt.params},{creator:p(e=>new kt(i,e),"creator"),params:kt.params}],bots:[{creator:p(e=>new De(e),"creator"),params:De.params},{creator:p(e=>new Ue(e),"creator"),params:Ue.params},{creator:p(e=>new O(e),"creator"),params:O.params},{creator:p(e=>new $e(e),"creator"),params:$e.params},{creator:p(e=>new Ge(e),"creator"),params:Ge.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 je(e),"creator"),params:je.params},{creator:p(e=>new qe(e),"creator"),params:qe.params},{creator:p(e=>new Xe(e),"creator"),params:Xe.params},{creator:p(e=>new Je(e),"creator"),params:Je.params},{creator:p(e=>new We(e),"creator"),params:We.params}],sources:[{creator:p(e=>new st(e),"creator"),params:st.params},{creator:p(e=>new tt(e),"creator"),params:tt.params},{creator:p(e=>new nt(i,e),"creator"),params:nt.params},{creator:p(e=>new it(i,e),"creator"),params:it.params},{creator:p(e=>new pt(i,e),"creator"),params:pt.params},{creator:p(e=>new lt(i,e),"creator"),params:lt.params},{creator:p(e=>new mt(i,e),"creator"),params:mt.params}],taskTriggers:[{creator:p(e=>new Ve(i,e),"creator"),params:Ve.params},{creator:p(e=>new Qe(i,e),"creator"),params:Qe.params},{creator:p(e=>new rt(i,e),"creator"),params:rt.params}],taskRunners:[{creator:p(e=>new ot(i,e),"creator"),params:ot.params},{creator:p(e=>new St(i,e),"creator"),params:St.params}]}),"init"),needOnline:!1,name:"\u9ED8\u8BA4\u63D2\u4EF6",dispose:p(async()=>{},"dispose")}),"defaultPlugin");var Jt=class extends Z{static{p(this,"SkillManager")}};var Vt=class extends Z{static{p(this,"SourceManager")}};var Qt=class extends Z{static{p(this,"TaskRunnerManager")}options;constructor(e){e.cacheInstance=!1,super(e),this.options=e}},Yt=class extends Z{static{p(this,"TaskTriggerManager")}options;constructor(e){e.cacheInstance=!1,super(e),this.options=e}};import vn from"fastify";import kn from"@fastify/websocket";import Sn from"@fastify/static";import Fe from"node:process";import Cn from"@fastify/formbody";import Tn from"emittery";import{XMLParser as An}from"fast-xml-parser";import dr from"fs";import go from"node:path";import{createReadStream as En,existsSync as Nn}from"node:fs";import{authentication as Fn,createDirectus as Mn,readItems as Pn,readMe as On,rest as Rn}from"@directus/sdk";import Bn from"@fastify/cors";import{v4 as ur}from"uuid";import Ln from"@fastify/compress";var hr=class i extends Tn{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 An,this._onlinePluginInfos=new Map,this._services=new Map,this._logger=y("app-"+this._options.name),this._globalEvent=new Dt(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=vn({logger:{level:"warn"}}),await this._server.register(kn),await this._server.register(Cn),await this._server.register(Bn,{origin:"*"}),_.serverCompress&&(this._logger.info("\u542F\u7528\u670D\u52A1\u5668gzip\u538B\u7F29"),await this._server.register(Ln,{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(),a=this._xmlParser.parse(r);o(null,a)}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 a=o.params["*"],n,c,m,d=new TextDecoder("utf-8");if(a==="normal")n=p(async u=>{u instanceof Buffer&&(u=d.decode(u));try{let h=JSON.parse(u),f=`${h?.instanceName}-${h?.action}`,w=this._wsRoutes[f];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 I=w.action;if(!I){this._logger.warn("unhandled message:"+u);return}let b=await I(h.data);if(b!=null){let C={id:h.id,data:b};return JSON.stringify(C)}}catch(h){return String(h)}},"onmessage");else{let u=a.replaceAll("/","-"),h=p(()=>{let f=this._wsRoutes[u];if(!f){t.send(String({error:"normal ws path:/ws/normal,custom ws path:/ws/instanceName/action\uFF01"}));return}if(f.needAuth&&!r){this._logger.debug("\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01"),t.close(403,"\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01");return}return f},"getInfo");n=p(async(f,w,I)=>{let b=h();if(!b)return;b.action.onMessage(f,w,I)},"onmessage"),c=p(async(f,w)=>{let I=h();if(!I)return;I.action.onOpen(f,w)},"onOpen"),m=p(async(f,w)=>{let I=h();if(!I)return;I.action.onClose(f,w)},"onClose")}t.on("message",async u=>{_.traceHttpRequest&&this._logger.trace("ws on meesage, type "+typeof u);try{let h=await n(u,o,t);h!=null&&t.send(h)}catch(h){this._logger.error(h.meesage)}}),c&&c(o,t),m&&t.on("close",()=>{m(o,t),this._logger.trace("ws closed,from "+o.hostname)}),t.on("error",u=>{this._logger.error(u.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(a){this._logger.error(a.message),a instanceof Ft?(t.status(401),t.send(a.message)):a instanceof Nt?(t.status(400),t.send(a.message)):a instanceof Et?(t.status(404),t.send(a.message)):(t.status(500),t.send(String(a)))}}),await this._server.register(Sn,{root:_.publicPath,prefix:_.publicPathName}),Fe.env.VERIFY_FILE?.length){let e=go.resolve("."+Fe.env.VERIFY_FILE);Nn(e)?this._server.get(Fe.env.VERIFY_FILE,(t,o)=>{this._logger.trace("verify service requested from "+t.url),o.send(En(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??go.resolve(_.publicPath,"images","cover-default.png");(e.startsWith("http")||dr.existsSync(e))&&(this._sharedCover=v.fromPath(e,"binary","shared-cover.png"));let t=this._options.sharedLogoPath??go.resolve(_.publicPath,"images","logo-default.png");(t.startsWith("http")||dr.existsSync(t))&&(this._sharedLogo=v.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=Mn(_.configServerUrl).with(Fn("json")).with(Rn()),await this.client.login(_.configServerEmail,_.configServerPassword);let o=await this._client.request(On());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 jt,this._skillManager=new Jt,this._sourceManager=new Vt,this._taskTriggerManager=new Yt({cacheInstance:!1}),this._taskRunnerManager=new Qt({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 $t(this,this._options.agentServiceOptions)).init(),this._logger.trace("agent service created"),await(this._taskService=new Ht(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,Fe.on("unhandledRejection",o=>{this._logger.error(o?.message??String(o)),this.emit(i.EventNames.ERROR,o)});for(let o of["SIGINT","SIGTERM"])Fe.once(o,async()=>(this._logger.info("break signal received"),await this.stop(o)));this._globalEvent.emit(J.APP_STARTED,{title:"\u670D\u52A1\u542F\u52A8",id:ur()})}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(J.APP_RELOAD,{title:"\u670D\u52A1\u91CD\u8F7D",id:ur()})}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 le(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"}`),Fe.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{Te as Agent,$t as AgentService,v as AsyncFile,ut as BaiduSTTSkill,dt as BaiduTTSSkill,X as BaseDrawSkill,U as BaseSTTSkill,R as BaseTTSSkill,N as BasicBot,jt as BotManager,F as ChatMessage,St as ChatMessageTaskRunner,kt as CogVideoDrawSkill,wt as CogviewDrawSkill,Ue as CozeBot,qt as CozeService,rt as CronTaskTrigger,De as DifyAgentBot,nt as DingRobotSource,ot as EchoTaskRunner,zt as EventTaskTrigger,$e as FastGPTBot,pt as FeishuSource,It as FishAudioTTSSkill,Dt as GlobalEvent,J as GlobalEventNames,Qe as GlobalEventTaskTrigger,Lt as HistoryMessageManager,Z as InstanceBaseManager,je as OllamaBot,O as OpenAIBot,bt as OpenAIDrawSkill,he as OpenAISTTSkill,fe as OpenAITTSSkill,qe as OpenRouterBot,hr as PPAgent,Ge as QAnythingBot,lt as QQSource,L as SchemaBaseProperties,Ye as SenseVoiceSTTSkill,We as SiliconFlowBot,vt as SiliconFlowDrawSkill,yt as SiliconFlowSTTSkill,xt as SiliconFlowTTSSkill,Zn as SimpleSchemaType,Jt as SkillManager,Ee as SkillSchemaBaseProperties,Ut as SortedPromise,Nt as SourceApiMissingParamsError,Et as SourceApiNotFoundError,Ft as SourceApiUnAuthorizedError,l as SourceChatMessageType,Ve as SourceEventTaskTrigger,g as SourceEventType,Vt as SourceManager,Ze as SoviteTTSSkill,Qt as TaskRunnerManager,Kt as TaskRunnerSchemaBaseProperties,Ht as TaskService,Ae as TaskTrigger,Yt as TaskTriggerManager,gt as TencentSTTSkill,_t as TencentTTSSkill,mt as WCAISource,st as WCOASource,it as WeWorkSource,He as WenxinAgentBot,Xe as XunfeiBot,ht as XunfeiSTTSkill,ft as XunfeiTTSSkill,Ke as YuanQiBot,Je as ZhipuBot,ze as ZhipuQingyanBot,Ce as addWavHeader,Kp as apiPlugin,ye as arm2wav,ce as betterMarkdown,mr as chatMessageRepo,lr as chatSource,xe as checkMessageRule,_ as config,Mt as createCacheManager,Br as createFakeMessage,Ho as createFormilySchema,Qu as defaultPlugin,$o as detectName,Xo as directRunBot,le as disposeObjects,Uo as extractArticleInfo,Re as extractImageUrls,Do as extractMarkdownImageTags,Ie as extractMessageContentText,oo as extractPositionInfo,No as filterContentRule,me as generateRandomString,Rt as getEnvNumber,qo as getFromMessageSummary,y as getLogger,Q as getSecret,Go as getToMessageSummary,Bo as hasEmoji,Lo as hasMarkdown,zo as installAndGetPluginInfo,so as installDep,Pt as isPhoneNumber,Oo as removeEmoji,Ro as removeMarkdown,Rr as removeTextAt,Ot as richText2Markdown,ro as sleep,se as sse,jo as stream2buffer,Oe as transFileFormat,Pr as transFormat,Wo as uninstallDep,ie as wav2amr};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ppagent",
3
- "version": "0.0.29",
3
+ "version": "0.0.30",
4
4
  "description": "an agent manager",
5
5
  "types": "dist/lib.d.ts",
6
6
  "main": "dist/lib.js",