ppagent 0.0.19 → 0.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib.js +2 -2
- package/package.json +1 -1
package/dist/lib.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var hr=Object.defineProperty;var c=(a,e)=>hr(a,"name",{value:e,configurable:!0});import"reflect-metadata";import $r from"emittery";import fr from"pino";import Yt from"node:process";import gr from"emittery";var _o={level:Yt.env.LOG_LEVEL??"debug"};Yt.env.NODE_ENV==="development"&&(_o.transport={target:"pino-pretty",options:{colorize:!0}});var go=fr(_o),_r=class extends gr{static{c(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??Yt.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})}},Ie=c((a,e,t,o)=>{typeof t=="string"?(go[a]("[%s] %s",e,t),o.emitString(a,e,t)):(go[a]("[%s] %o",e,t),o.emitObject(a,e,t))},"log"),ge=new _r,y=c((a,e=!1)=>({trace:c(t=>Ie("trace",a,t,ge),"trace"),debug:c(t=>Ie("debug",a,t,ge),"debug"),info:c(t=>Ie("info",a,t,ge),"info"),warn:c(t=>Ie("warn",a,t,ge),"warn"),error:c(t=>Ie("error",a,t,ge),"error"),fatal:c(t=>Ie("fatal",a,t,ge),"fatal"),emitter:e?ge:void 0}),"getLogger");import{createReadStream as Or,existsSync as Wo,mkdirSync as Xo,readFile as Pr,stat as Rr,writeFile as Br}from"node:fs";import{existsSync as yo,mkdirSync as xo}from"node:fs";import ve from"node:path";import S from"node:process";import{v4 as xr}from"uuid";var Zt="0.0.19";import{forward as Ir}from"@ngrok/ngrok";var Jn=function(a){return a.text="text",a.number="number",a.boolean="boolean",a.radio="radio",a.check="check",a.select="select",a.date="date",a.image="image",a.video="video",a.audio="audio",a.url="url",a.email="email",a.phone="phone",a.ipv4="ipv4",a}({}),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"}}},D=y("config"),Ct=Number(S.env.PORT??5050),Io=String(S.env.HOST?.length?S.env.HOST:"0.0.0.0"),wo=String(S.env.PRIVATE_HOST?.length?S.env.PRIVATE_HOST:Io),wr="http://"+wo+":"+Ct,br="ws://"+wo+":"+Ct,we,be,pe=String(S.env.PUBLIC_HOST??"").trim();if(pe.length){let a=Number(S.env.PUBLIC_SSL)===1,e=80;S.env.PUBLIC_PORT?.length?e=Number(S.env.PUBLIC_PORT):a&&(e=443),pe.indexOf("$port")<0?(we=(a?"wss://":"ws://")+pe+":"+e,be=(a?"https://":"http://")+pe+":"+e):(we=(a?"wss://":"ws://")+pe.replace("$port",e.toString()),be=(a?"https://":"http://")+pe.replace("$port",e.toString()))}else{let a=S.env.PUBLIC_TUNNEL_NAME;a?.length||D.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 Ir({addr:Ct,authtoken:e,domain:a}),o=t.url();if(!o?.length)throw new Error("\u542F\u52A8ngrok\u5931\u8D25\uFF0C\u8BF7\u914D\u7F6EPUBLIC_HOST\u6216\u8005\u68C0\u67E5ngrok\u76F8\u5173\u914D\u7F6E\uFF01");for(let r of["SIGINT","SIGTERM"])S.once(r,async()=>{D.info("close ngrok tunnel"),t.close()});be=o;let s=o.indexOf("https")===0;pe=o.replace("https://","").replace("http://",""),we=(s?"wss://":"ws://")+pe,D.debug("auto generated public httpurl "+be),D.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"),D.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"),D.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"),D.debug("auto generated public wsurl "+we)}be?.length||D.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 bo=S.env.PUBLIC_PATH?.length?S.env.PUBLIC_PATH:"/public",vo=ve.resolve(ve.join("./",bo));we.length||D.warn("WS_URL not defined,if your message source need to connect with your http posted server url ,then error may occured!");var kt=S.env.PUBLIC_TOKEN;kt?.length||(kt=xr(),D.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"),D.warn("\u968F\u673Atoken\u4E3A\uFF1A"+kt));var eo=ve.resolve(vo,"temp");yo(eo)||xo(eo,{recursive:!0});var ko=S.env.CONFIG_SERVER_URL,So=S.env.CONFIG_SERVER_EMAIL,Co=S.env.CONFIG_SERVER_PASSWORD,To=!!(S.env.OFFLINE??!1);(!ko?.length||!Co?.length||!So?.length)&&(D.warn("CONFIG SERVER\u76F8\u5173\u73AF\u5883\u53D8\u91CF\u672A\u914D\u7F6E\uFF0C\u65E0\u6CD5\u4F7F\u7528\u5728\u7EBF\u914D\u7F6E\u529F\u80FD\uFF01"),To=!0);var St=ve.resolve(ve.join("./","data"));yo(St)||xo(St,{recursive:!0});var _={port:Ct,host:Io,wsUrl:we,httpUrl:be,privateHttpUrl:wr,privateWsUrl:br,publicPath:vo,publicPathName:bo,tempDir:eo,redisUrl:S.env.REDIS_URL,offline:To,configServerUrl:ko,configServerEmail:So,configServerPassword:Co,publicToken:kt,publicForceAuth:S.env.PUBLIC_FORCE_AUTH=="1",secretFile:S.env.SECRETS_FILE??"./config/.secrets.json",traceHttpRequest:S.env.TRACE_HTTP_REQUEST==="1",version:Zt,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:St,dbProvider:S.env.DB_PROVIDER?.length?S.env.DB_PROVIDER:"sqlite",dbConnection:S.env.DB_CONNECTION?.length?S.env.DB_CONNECTION:ve.join(St,"chat.db"),minioMessageBucket:S.env.MINIO_MESSAGE_BUCKET??"messages"};D.warn("\u5F53\u524D\u516C\u7F51\u8BBF\u95EE\u5730\u5740\uFF1A"+_.httpUrl+" ,API TOKEN:"+_.publicToken);D.warn("\u8F6F\u4EF6\u7248\u672C "+Zt);D.trace("\u5F53\u524D\u6574\u4F53\u914D\u7F6E\u4FE1\u606F\uFF1A");D.trace(_);import Y,{dirname as Lr}from"node:path";import{v4 as Ur}from"uuid";import{Buffer as Pe}from"node:buffer";import No from"recorder-core";var g=function(a){return a.CHAT_MESSAGE="CHAT_MESSAGE",a.RESPONSE_MESSAGE="RESPONSE_MESSAGE",a.LOGIN="LOGIN",a.LOGOUT="LOGOUT",a.GROUP_INFO_CHANGED="GROUP_INFO_CHANGED",a.SYSTEM="SYSTEM",a.SELF_SEND="SELF_SEND",a.FIRST_CHAT="FIRST_CHAT",a.GROUP_NEW_USER="GROUP_NEW_USER",a.ENTER_CHAT="ENTER_CHAT",a.CUSTOM="CUSTOM",a}({}),l=function(a){return a.TEXT="TEXT",a.RICH_TEXT="RICH_TEXT",a.IMAGE="IMAGE",a.AUDIO="AUDIO",a.VIDEO="VIDEO",a.ARTICLE="ARTICLE",a.MUSIC="MUSIC",a.FILE="FILE",a.EMOTION="EMOTION",a.MP="MP",a.REF="REF",a.POSITION="POSITION",a.PHONE="PHONE",a.FRIEND_REQUEST="FRIEND_REQUEST",a.CONTACT_CARD="CONTACT_CARD",a.CARD="CARD",a.RECALL="RECALL",a.PAT="PAT",a.SYSTEM="SYSTEM",a.SUBSCRIBE="SUBSCRIBE",a.UNSUBSCRIBE="UNSUBSCRIBE",a.CUSTOM="CUSTOM",a}({}),Tt=class extends Error{static{c(this,"SourceApiNotFoundError")}},At=class extends Error{static{c(this,"SourceApiMissingParamsError")}},Et=class extends Error{static{c(this,"SourceApiUnAuthorizedError")}};import{v4 as to}from"uuid";import{decodeWavFile as vr}from"wav-file-decoder";import Ao from"keyv";import kr from"@keyv/redis";import Sr from"ffmpeg-static";import Fo from"fluent-ffmpeg";import{createReadStream as Cr,readFileSync as Tr}from"fs";import{fileTypeFromBuffer as Ar,fileTypeFromStream as Er}from"file-type";import{exec as Mo}from"child_process";Fo.setFfmpegPath(Sr);var N=y("helper"),Nr=JSON.parse(await Tr(_.secretFile).toString());N.trace("secrets files path:"+_.secretFile);var ke=c(function(a,e,t,o){let s=a.byteLength,r=new ArrayBuffer(44+s),i=new DataView(r);function n(h,f,w){for(let I=0;I<w.length;I++)h.setUint8(f+I,w.charCodeAt(I))}c(n,"writeString");let p=0;n(i,p,"RIFF"),p+=4,i.setUint32(p,36+s,!0),p+=4,n(i,p,"WAVE"),p+=4,n(i,p,"fmt "),p+=4,i.setUint32(p,16,!0),p+=4,i.setUint16(p,1,!0),p+=2,i.setUint16(p,o,!0),p+=2,i.setUint32(p,e,!0),p+=4,i.setUint32(p,e*o*(t/8),!0),p+=4,i.setUint16(p,o*(t/8),!0),p+=2,i.setUint16(p,t,!0),p+=2,n(i,p,"data"),p+=4,i.setUint32(p,s,!0),p+=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)}c(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)}c(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 c(u,"floatTo8BitPCM"),t==16?d(i,44,a):t==8?u(i,44,a):m(i,44,a),i.buffer},"addWavHeader");function Oo(a){return a.replace(/[\p{Emoji_Presentation}\p{Emoji}\u200D]+/gu,"")}c(Oo,"removeEmoji");function Po(a){return a.replace(/(#+\s*|\*\*\s*|\*\s*|-\s*|_)/g,"").replace(/\*\*(.*?)\*\*/g,"$1").replace(/_(.*?)_/g,"$1").replace(/`(.*?)`/g,"$1").replace(/$$(.*?)$$$$.*?$$/g,"$1").trim()}c(Po,"removeMarkdown");function Ro(a){return/[\p{Emoji_Presentation}\p{Emoji}\u200D]+/gu.test(a)}c(Ro,"hasEmoji");function Bo(a){return[/^#{1,6}\s/,/\*\*.*\*\*/,/\*.*\*/,/~~.*~~/,/`{1,3}[^`](.*?)`{1,3}/,/^```[\s\S]*?^```/m,/\[.*?\]\(.*?\)/,/!\[.*?\]\(.*?\)/,/^>\s/,/^-+\s*$/,/^(\*|\-|\+)\s/].some(t=>t.test(a))}c(Bo,"hasMarkdown");function Lo(a){return`\u6807\u9898\uFF1A${a.title};\u4F5C\u8005\uFF1A${a.source};\u7F51\u5740\uFF1A${a.url}`}c(Lo,"extractArticleInfo");function oo(a){let e="";return a.placeName?.length&&(e+=a.placeName),a.placeDetail?.length&&(e+="("+a.placeDetail+")"),a.lat!==void 0&&(e+=`\u7ECF\u5EA6${a.lon}\uFF0C\u7EAC\u5EA6${a.lat}`),e}c(oo,"extractPositionInfo");function ce(a){let e=/\((https?:\/\/[^\s]+)\)/g,t,o=a;for(;(t=e.exec(a))!==null;){let s=t[1];o=o.replaceAll(s,` ${s} `)}return o}c(ce,"betterMarkdown");async function le(a){for(let e of a)if(e.dispose){let t=await e.dispose();t?.length&&N.error(t)}}c(le,"disposeObjects");async function _e(a){return new Promise((e,t)=>{No.amr2wav(a.buffer,o=>{e(v.fromBuffer(Buffer.from(o),to()+".wav","binary"))},o=>{N.error(o),t(o)})})}c(_e,"arm2wav");async function ie(a){let e=(await a.asBuffer()).buffer,t=vr(e),o=t.channelData[0];if(t.numberOfChannels===2){o=new Float32Array(t.channelData[0].length);for(let r=0;r<o.length;r++)o[r]=(t.channelData[0][r]+t.channelData[1][r])/2}else if(t.numberOfChannels!==1){N.warn("\u4E0D\u652F\u6301\u7684\u901A\u9053\u6570\u91CF\uFF1A"+t.numberOfChannels);return}let s=new Int16Array(o.length);for(let r=0;r<o.length;r++)o[r]<-.999999?s[r]=-32768:o[r]>.999999?s[r]=32767:s[r]=Math.round(o[r]*32767);return new Promise((r,i)=>{No({type:"amr",sampleRate:t.sampleRate,bitRate:12.2}).mock(s,t.sampleRate).stop(async(p,m)=>{let d=v.fromBuffer(Buffer.from(await p.arrayBuffer()),to()+".amr");r({file:d,duration:m})},p=>{i(p)})})}c(ie,"wav2amr");function Nt(a){return _.redisUrl?.length?new Ao(new kr(_.redisUrl),{namespace:a}):new Ao}c(Nt,"createCacheManager");function Q(a){if(!a.startsWith("__"))return a;let e=Nr[a.slice(2)];return e?.length||N.warn("\u672A\u80FD\u627E\u5230key\u4E3A"+a.slice(2)+"\u7684\u79D8\u94A5"),e}c(Q,"getSecret");function Ft(a){return/^1[3-9]\d{9}$/.test(a)}c(Ft,"isPhoneNumber");function me(a=16){let e="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",t="";for(let o=0;o<a;o++){let s=Math.floor(Math.random()*e.length);t+=e[s]}return t}c(me,"generateRandomString");async function Fr(a,e,t,o){return new Promise(s=>{let r=Fo(a);o&&(r=o(r)),r.toFormat(t).on("end",()=>{s(!0)}).on("error",i=>{N.debug(`\u4ECE${a}\u8F6C\u6362\u4E3A${t}\u5931\u8D25\uFF1A${i.message}`),s(!1)}).save(e)})}c(Fr,"transFormat");async function Me(a,e,t){return new Promise(o=>{a.asLocalPath().then(s=>{let r=s+"."+e;Fr(s,r,e,t).then(i=>{if(i){let n=v.fromPath(r);o(n)}else o(void 0)})})})}c(Me,"transFileFormat");function Mr(a){let e=/!\[.*?\]\((.*?)\)/g,t=[],o;for(;(o=e.exec(a))!==null;)t.push(o[1]);return t}c(Mr,"_extractMarkdonwImages");function Oe(a,e=!1){if(a.indexOf("![")>=0)return Mr(a);if(e)return[];let t=/(?:\(|"|'|\s|^)(https?:\/\/[^\s'"()]+(?:\.[^\s'"()]+)+(?:\/[^\s'"()]+)*\.(?:jpg|jpeg|png|gif|webp)(?:\?[^\s'"()]*)?)(?:\)|"|'|\s|$)/gi,o=a.match(t);return o?o.map(s=>s.trim().replace(/^[('" ]+|['") ]+$/g,"")):[]}c(Oe,"extractImageUrls");function Uo(a){let e=/!\[.*?\]\(.*?\)/g;return a.match(e)||[]}c(Uo,"extractMarkdownImageTags");async function Do(a,e){let t=typeof a=="string"?await Er(Cr(a)):await Ar(a);if(!t)return N.warn("\u672A\u80FD\u901A\u8FC7\u6587\u4EF6\u5185\u5BB9\u8BC6\u522BMIME\uFF0C\u5C06\u7EE7\u7EED\u4F7F\u7528\u539F\u6587\u4EF6\u540E\u7F00"),e;if(e){let o=e.lastIndexOf(".");o>0?e=e.substring(0,o)+"."+t.ext:e+="."+t.ext}else e=e??to()+"."+t.ext;return e}c(Do,"detectName");async function $o(a){let e=[];for await(let t of a)e.push(t);return Buffer.concat(e)}c($o,"stream2buffer");async function se(a,e){let t=a.getReader(),o=new TextDecoder("utf-8"),s="",r=c(async()=>{let{value:i,done:n}=await t.read();if(i){let p=o.decode(i)?.trim();if(p?.length){let m=p.split(`
|
|
1
|
+
var hr=Object.defineProperty;var c=(a,e)=>hr(a,"name",{value:e,configurable:!0});import"reflect-metadata";import $r from"emittery";import fr from"pino";import Yt from"node:process";import gr from"emittery";var _o={level:Yt.env.LOG_LEVEL??"debug"};Yt.env.NODE_ENV==="development"&&(_o.transport={target:"pino-pretty",options:{colorize:!0}});var go=fr(_o),_r=class extends gr{static{c(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??Yt.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})}},Ie=c((a,e,t,o)=>{typeof t=="string"?(go[a]("[%s] %s",e,t),o.emitString(a,e,t)):(go[a]("[%s] %o",e,t),o.emitObject(a,e,t))},"log"),ge=new _r,y=c((a,e=!1)=>({trace:c(t=>Ie("trace",a,t,ge),"trace"),debug:c(t=>Ie("debug",a,t,ge),"debug"),info:c(t=>Ie("info",a,t,ge),"info"),warn:c(t=>Ie("warn",a,t,ge),"warn"),error:c(t=>Ie("error",a,t,ge),"error"),fatal:c(t=>Ie("fatal",a,t,ge),"fatal"),emitter:e?ge:void 0}),"getLogger");import{createReadStream as Or,existsSync as Wo,mkdirSync as Xo,readFile as Pr,stat as Rr,writeFile as Br}from"node:fs";import{existsSync as yo,mkdirSync as xo}from"node:fs";import ve from"node:path";import S from"node:process";import{v4 as xr}from"uuid";var Zt="0.0.20";import{forward as Ir}from"@ngrok/ngrok";var Jn=function(a){return a.text="text",a.number="number",a.boolean="boolean",a.radio="radio",a.check="check",a.select="select",a.date="date",a.image="image",a.video="video",a.audio="audio",a.url="url",a.email="email",a.phone="phone",a.ipv4="ipv4",a}({}),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"}}},D=y("config"),Ct=Number(S.env.PORT??5050),Io=String(S.env.HOST?.length?S.env.HOST:"0.0.0.0"),wo=String(S.env.PRIVATE_HOST?.length?S.env.PRIVATE_HOST:Io),wr="http://"+wo+":"+Ct,br="ws://"+wo+":"+Ct,we,be,pe=String(S.env.PUBLIC_HOST??"").trim();if(pe.length){let a=Number(S.env.PUBLIC_SSL)===1,e=80;S.env.PUBLIC_PORT?.length?e=Number(S.env.PUBLIC_PORT):a&&(e=443),pe.indexOf("$port")<0?(we=(a?"wss://":"ws://")+pe+":"+e,be=(a?"https://":"http://")+pe+":"+e):(we=(a?"wss://":"ws://")+pe.replace("$port",e.toString()),be=(a?"https://":"http://")+pe.replace("$port",e.toString()))}else{let a=S.env.PUBLIC_TUNNEL_NAME;a?.length||D.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 Ir({addr:Ct,authtoken:e,domain:a}),o=t.url();if(!o?.length)throw new Error("\u542F\u52A8ngrok\u5931\u8D25\uFF0C\u8BF7\u914D\u7F6EPUBLIC_HOST\u6216\u8005\u68C0\u67E5ngrok\u76F8\u5173\u914D\u7F6E\uFF01");for(let r of["SIGINT","SIGTERM"])S.once(r,async()=>{D.info("close ngrok tunnel"),t.close()});be=o;let s=o.indexOf("https")===0;pe=o.replace("https://","").replace("http://",""),we=(s?"wss://":"ws://")+pe,D.debug("auto generated public httpurl "+be),D.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"),D.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"),D.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"),D.debug("auto generated public wsurl "+we)}be?.length||D.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 bo=S.env.PUBLIC_PATH?.length?S.env.PUBLIC_PATH:"/public",vo=ve.resolve(ve.join("./",bo));we.length||D.warn("WS_URL not defined,if your message source need to connect with your http posted server url ,then error may occured!");var kt=S.env.PUBLIC_TOKEN;kt?.length||(kt=xr(),D.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"),D.warn("\u968F\u673Atoken\u4E3A\uFF1A"+kt));var eo=ve.resolve(vo,"temp");yo(eo)||xo(eo,{recursive:!0});var ko=S.env.CONFIG_SERVER_URL,So=S.env.CONFIG_SERVER_EMAIL,Co=S.env.CONFIG_SERVER_PASSWORD,To=!!(S.env.OFFLINE??!1);(!ko?.length||!Co?.length||!So?.length)&&(D.warn("CONFIG SERVER\u76F8\u5173\u73AF\u5883\u53D8\u91CF\u672A\u914D\u7F6E\uFF0C\u65E0\u6CD5\u4F7F\u7528\u5728\u7EBF\u914D\u7F6E\u529F\u80FD\uFF01"),To=!0);var St=ve.resolve(ve.join("./","data"));yo(St)||xo(St,{recursive:!0});var _={port:Ct,host:Io,wsUrl:we,httpUrl:be,privateHttpUrl:wr,privateWsUrl:br,publicPath:vo,publicPathName:bo,tempDir:eo,redisUrl:S.env.REDIS_URL,offline:To,configServerUrl:ko,configServerEmail:So,configServerPassword:Co,publicToken:kt,publicForceAuth:S.env.PUBLIC_FORCE_AUTH=="1",secretFile:S.env.SECRETS_FILE??"./config/.secrets.json",traceHttpRequest:S.env.TRACE_HTTP_REQUEST==="1",version:Zt,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:St,dbProvider:S.env.DB_PROVIDER?.length?S.env.DB_PROVIDER:"sqlite",dbConnection:S.env.DB_CONNECTION?.length?S.env.DB_CONNECTION:ve.join(St,"chat.db"),minioMessageBucket:S.env.MINIO_MESSAGE_BUCKET??"messages"};D.warn("\u5F53\u524D\u516C\u7F51\u8BBF\u95EE\u5730\u5740\uFF1A"+_.httpUrl+" ,API TOKEN:"+_.publicToken);D.warn("\u8F6F\u4EF6\u7248\u672C "+Zt);D.trace("\u5F53\u524D\u6574\u4F53\u914D\u7F6E\u4FE1\u606F\uFF1A");D.trace(_);import Y,{dirname as Lr}from"node:path";import{v4 as Ur}from"uuid";import{Buffer as Pe}from"node:buffer";import No from"recorder-core";var g=function(a){return a.CHAT_MESSAGE="CHAT_MESSAGE",a.RESPONSE_MESSAGE="RESPONSE_MESSAGE",a.LOGIN="LOGIN",a.LOGOUT="LOGOUT",a.GROUP_INFO_CHANGED="GROUP_INFO_CHANGED",a.SYSTEM="SYSTEM",a.SELF_SEND="SELF_SEND",a.FIRST_CHAT="FIRST_CHAT",a.GROUP_NEW_USER="GROUP_NEW_USER",a.ENTER_CHAT="ENTER_CHAT",a.CUSTOM="CUSTOM",a}({}),l=function(a){return a.TEXT="TEXT",a.RICH_TEXT="RICH_TEXT",a.IMAGE="IMAGE",a.AUDIO="AUDIO",a.VIDEO="VIDEO",a.ARTICLE="ARTICLE",a.MUSIC="MUSIC",a.FILE="FILE",a.EMOTION="EMOTION",a.MP="MP",a.REF="REF",a.POSITION="POSITION",a.PHONE="PHONE",a.FRIEND_REQUEST="FRIEND_REQUEST",a.CONTACT_CARD="CONTACT_CARD",a.CARD="CARD",a.RECALL="RECALL",a.PAT="PAT",a.SYSTEM="SYSTEM",a.SUBSCRIBE="SUBSCRIBE",a.UNSUBSCRIBE="UNSUBSCRIBE",a.CUSTOM="CUSTOM",a}({}),Tt=class extends Error{static{c(this,"SourceApiNotFoundError")}},At=class extends Error{static{c(this,"SourceApiMissingParamsError")}},Et=class extends Error{static{c(this,"SourceApiUnAuthorizedError")}};import{v4 as to}from"uuid";import{decodeWavFile as vr}from"wav-file-decoder";import Ao from"keyv";import kr from"@keyv/redis";import Sr from"ffmpeg-static";import Fo from"fluent-ffmpeg";import{createReadStream as Cr,readFileSync as Tr}from"fs";import{fileTypeFromBuffer as Ar,fileTypeFromStream as Er}from"file-type";import{exec as Mo}from"child_process";Fo.setFfmpegPath(Sr);var N=y("helper"),Nr=JSON.parse(await Tr(_.secretFile).toString());N.trace("secrets files path:"+_.secretFile);var ke=c(function(a,e,t,o){let s=a.byteLength,r=new ArrayBuffer(44+s),i=new DataView(r);function n(h,f,w){for(let I=0;I<w.length;I++)h.setUint8(f+I,w.charCodeAt(I))}c(n,"writeString");let p=0;n(i,p,"RIFF"),p+=4,i.setUint32(p,36+s,!0),p+=4,n(i,p,"WAVE"),p+=4,n(i,p,"fmt "),p+=4,i.setUint32(p,16,!0),p+=4,i.setUint16(p,1,!0),p+=2,i.setUint16(p,o,!0),p+=2,i.setUint32(p,e,!0),p+=4,i.setUint32(p,e*o*(t/8),!0),p+=4,i.setUint16(p,o*(t/8),!0),p+=2,i.setUint16(p,t,!0),p+=2,n(i,p,"data"),p+=4,i.setUint32(p,s,!0),p+=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)}c(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)}c(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 c(u,"floatTo8BitPCM"),t==16?d(i,44,a):t==8?u(i,44,a):m(i,44,a),i.buffer},"addWavHeader");function Oo(a){return a.replace(/[\p{Emoji_Presentation}\p{Emoji}\u200D]+/gu,"")}c(Oo,"removeEmoji");function Po(a){return a.replace(/(#+\s*|\*\*\s*|\*\s*|-\s*|_)/g,"").replace(/\*\*(.*?)\*\*/g,"$1").replace(/_(.*?)_/g,"$1").replace(/`(.*?)`/g,"$1").replace(/$$(.*?)$$$$.*?$$/g,"$1").trim()}c(Po,"removeMarkdown");function Ro(a){return/[\p{Emoji_Presentation}\p{Emoji}\u200D]+/gu.test(a)}c(Ro,"hasEmoji");function Bo(a){return[/^#{1,6}\s/,/\*\*.*\*\*/,/\*.*\*/,/~~.*~~/,/`{1,3}[^`](.*?)`{1,3}/,/^```[\s\S]*?^```/m,/\[.*?\]\(.*?\)/,/!\[.*?\]\(.*?\)/,/^>\s/,/^-+\s*$/,/^(\*|\-|\+)\s/].some(t=>t.test(a))}c(Bo,"hasMarkdown");function Lo(a){return`\u6807\u9898\uFF1A${a.title};\u4F5C\u8005\uFF1A${a.source};\u7F51\u5740\uFF1A${a.url}`}c(Lo,"extractArticleInfo");function oo(a){let e="";return a.placeName?.length&&(e+=a.placeName),a.placeDetail?.length&&(e+="("+a.placeDetail+")"),a.lat!==void 0&&(e+=`\u7ECF\u5EA6${a.lon}\uFF0C\u7EAC\u5EA6${a.lat}`),e}c(oo,"extractPositionInfo");function ce(a){let e=/\((https?:\/\/[^\s]+)\)/g,t,o=a;for(;(t=e.exec(a))!==null;){let s=t[1];o=o.replaceAll(s,` ${s} `)}return o}c(ce,"betterMarkdown");async function le(a){for(let e of a)if(e.dispose){let t=await e.dispose();t?.length&&N.error(t)}}c(le,"disposeObjects");async function _e(a){return new Promise((e,t)=>{No.amr2wav(a.buffer,o=>{e(v.fromBuffer(Buffer.from(o),to()+".wav","binary"))},o=>{N.error(o),t(o)})})}c(_e,"arm2wav");async function ie(a){let e=(await a.asBuffer()).buffer,t=vr(e),o=t.channelData[0];if(t.numberOfChannels===2){o=new Float32Array(t.channelData[0].length);for(let r=0;r<o.length;r++)o[r]=(t.channelData[0][r]+t.channelData[1][r])/2}else if(t.numberOfChannels!==1){N.warn("\u4E0D\u652F\u6301\u7684\u901A\u9053\u6570\u91CF\uFF1A"+t.numberOfChannels);return}let s=new Int16Array(o.length);for(let r=0;r<o.length;r++)o[r]<-.999999?s[r]=-32768:o[r]>.999999?s[r]=32767:s[r]=Math.round(o[r]*32767);return new Promise((r,i)=>{No({type:"amr",sampleRate:t.sampleRate,bitRate:12.2}).mock(s,t.sampleRate).stop(async(p,m)=>{let d=v.fromBuffer(Buffer.from(await p.arrayBuffer()),to()+".amr");r({file:d,duration:m})},p=>{i(p)})})}c(ie,"wav2amr");function Nt(a){return _.redisUrl?.length?new Ao(new kr(_.redisUrl),{namespace:a}):new Ao}c(Nt,"createCacheManager");function Q(a){if(!a.startsWith("__"))return a;let e=Nr[a.slice(2)];return e?.length||N.warn("\u672A\u80FD\u627E\u5230key\u4E3A"+a.slice(2)+"\u7684\u79D8\u94A5"),e}c(Q,"getSecret");function Ft(a){return/^1[3-9]\d{9}$/.test(a)}c(Ft,"isPhoneNumber");function me(a=16){let e="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",t="";for(let o=0;o<a;o++){let s=Math.floor(Math.random()*e.length);t+=e[s]}return t}c(me,"generateRandomString");async function Fr(a,e,t,o){return new Promise(s=>{let r=Fo(a);o&&(r=o(r)),r.toFormat(t).on("end",()=>{s(!0)}).on("error",i=>{N.debug(`\u4ECE${a}\u8F6C\u6362\u4E3A${t}\u5931\u8D25\uFF1A${i.message}`),s(!1)}).save(e)})}c(Fr,"transFormat");async function Me(a,e,t){return new Promise(o=>{a.asLocalPath().then(s=>{let r=s+"."+e;Fr(s,r,e,t).then(i=>{if(i){let n=v.fromPath(r);o(n)}else o(void 0)})})})}c(Me,"transFileFormat");function Mr(a){let e=/!\[.*?\]\((.*?)\)/g,t=[],o;for(;(o=e.exec(a))!==null;)t.push(o[1]);return t}c(Mr,"_extractMarkdonwImages");function Oe(a,e=!1){if(a.indexOf("![")>=0)return Mr(a);if(e)return[];let t=/(?:\(|"|'|\s|^)(https?:\/\/[^\s'"()]+(?:\.[^\s'"()]+)+(?:\/[^\s'"()]+)*\.(?:jpg|jpeg|png|gif|webp)(?:\?[^\s'"()]*)?)(?:\)|"|'|\s|$)/gi,o=a.match(t);return o?o.map(s=>s.trim().replace(/^[('" ]+|['") ]+$/g,"")):[]}c(Oe,"extractImageUrls");function Uo(a){let e=/!\[.*?\]\(.*?\)/g;return a.match(e)||[]}c(Uo,"extractMarkdownImageTags");async function Do(a,e){let t=typeof a=="string"?await Er(Cr(a)):await Ar(a);if(!t)return N.warn("\u672A\u80FD\u901A\u8FC7\u6587\u4EF6\u5185\u5BB9\u8BC6\u522BMIME\uFF0C\u5C06\u7EE7\u7EED\u4F7F\u7528\u539F\u6587\u4EF6\u540E\u7F00"),e;if(e){let o=e.lastIndexOf(".");o>0?e=e.substring(0,o)+"."+t.ext:e+="."+t.ext}else e=e??to()+"."+t.ext;return e}c(Do,"detectName");async function $o(a){let e=[];for await(let t of a)e.push(t);return Buffer.concat(e)}c($o,"stream2buffer");async function se(a,e){let t=a.getReader(),o=new TextDecoder("utf-8"),s="",r=c(async()=>{let{value:i,done:n}=await t.read();if(i){let p=o.decode(i)?.trim();if(p?.length){let m=p.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?N.debug("\u6D88\u606F\u6D41\u5173\u95ED"):await r()},"read");return r()}c(se,"sse");async function Mt(a){let e=`### ${a.title}`;for(let t of a.content)if(t.type==="text")e+=`
|
|
3
3
|
|
|
4
4
|
${t.data}
|
|
@@ -40,4 +40,4 @@ GET ${this._uri} HTTP/1.1`,o=Qs(t,this._options.secretKey),s=er.stringify(o),r=`
|
|
|
40
40
|
date: ${e}
|
|
41
41
|
GET ${this._uri} HTTP/1.1`,o=en(t,this._options.secretKey),s=tr.stringify(o),r=`api_key="${this._options.apiKey}", algorithm="hmac-sha256", headers="host date request-line", signature="${s}"`;return tr.stringify(tn.parse(r))}async getAudioBuffer(e){let t=new Date().toUTCString(),o=this._hostUrl+"?authorization="+this._getAuthStr(t)+"&date="+t+"&host="+this._host,s=new on(o);return new Promise(r=>{let i;s.on("open",()=>{this._logger.trace("websocket connect!");let n={common:{app_id:this._options.appId},business:{aue:"raw",auf:"audio/L16;rate=16000",vcn:this._options.vcn,speed:this._options.speed,volume:this._options.volume,pitch:this._options.pitch,tte:"UTF8"},data:{text:Buffer.from(e).toString("base64"),status:2}};s.send(JSON.stringify(n))}),s.on("message",(n,p)=>{if(p){this._logger.error("message error: "+p),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");i?i=Buffer.concat([i,u]):i=u,m.data.status==2&&(this._logger.trace("audio generated"),i=Buffer.from(ke(i.buffer,16e3,16,1)),s.close())}),s.on("close",()=>{this._logger.trace("connect close!"),r(i)}),s.on("error",n=>{this._logger.trace("websocket connect err: "+n),r(void 0)})})}};import rn from"tencentcloud-sdk-nodejs-asr";var sn=rn.asr.v20190614.Client,ht=class a extends U{static{c(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 sn({credential:{secretId:this._options.secretId,secretKey:this._options.secretKey},region:"",profile:{httpProfile:{endpoint:"asr.tencentcloudapi.com"}}})}get options(){return this._options}get params(){return a.params}async _getText(e){this._logger.debug("\u5F00\u59CB\u8F6C\u6362\u8BED\u97F3\u5230\u6587\u672C");try{let t=await e.asBase64(),o=this._options.ensureAudioFormat?"wav":e.name.slice(e.name.lastIndexOf(".")+1);o==="ogg"&&(o="ogg-opus");let s={EngSerViceType:"16k_zh",SourceType:1,VoiceFormat:o,Data:t},r=await this._client.SentenceRecognition(s);if(!r.Result?.length){this._logger.warn("\u8BC6\u522B\u7ED3\u679C\u4E3A\u7A7A");return}return r.Result}catch(t){this._logger.error(t.message);return}}};import nn from"tencentcloud-sdk-nodejs-tts";import{v4 as an}from"uuid";var pn=nn.tts.v20190823.Client,ft=class a extends R{static{c(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 pn({credential:{secretId:this._options.secretId,secretKey:this._options.secretKey},region:"",profile:{httpProfile:{endpoint:"tts.tencentcloudapi.com"}}});this._client=e}get options(){return this._options}get params(){return a.params}async getAudioBuffer(e){try{let t=await this._client.TextToVoice({Text:e,SessionId:an(),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 cn from"openai";var he=class a extends U{static{c(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 cn({apiKey:this._options.apiKey,baseURL:this._options.baseUrl})}get options(){return this._options}get params(){return a.params}async _getText(e){this._logger.debug("\u5F00\u59CB\u8F6C\u6362\u8BED\u97F3\u5230\u6587\u672C");try{let t=this._options.ensureAudioFormat?"wav":e.name.slice(e.name.lastIndexOf(".")+1);if(!["flac","mp3","mp4","mpeg","mpga","m4a","ogg","wav","webm"].includes(t.toLowerCase())){this._logger.warn("\u4E0D\u652F\u6301\u7684\u683C\u5F0F\u7C7B\u578B\uFF1A"+t);return}let o=await this._client.audio.transcriptions.create({file:await e.asReadStream(),model:this._options.model});if(!o.text?.length){this._logger.warn("\u8BC6\u522B\u7ED3\u679C\u4E3A\u7A7A");return}return o.text}catch(t){this._logger.error(t.message);return}}};var gt=class a extends he{static{c(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 a.params}};var fe=class a extends R{static{c(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 a.params}_updateBody(e){return e}async getAudioBuffer(e){try{let t=await fetch(`${this._options.baseUrl}/audio/speech`,{method:"post",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this._options.apiKey}`},body:JSON.stringify(this._updateBody({model:this._options.model,input:e,voice:this._options.voice,response_format:this._format,speed:this._options.speed}))});if(t.ok)return Buffer.from(await t.arrayBuffer());this._logger.error("\u5408\u6210\u5931\u8D25\uFF01");return}catch(t){this._logger.error(t.message);return}}};var _t=class a extends fe{static{c(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 a.params}_updateBody(e){return e.sample_rate=16e3,e.stream=!1,e}async getAudioBuffer(e){try{let t=await super.getAudioBuffer(e);return t?Buffer.from(ke(t.buffer,16e3,16,1)):void 0}catch(t){this._logger.error(t.message);return}}};var yt=class a extends R{static{c(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 a.params}async getAudioBuffer(e){try{let t=await fetch(`${this._options.baseUrl}/v1/tts`,{method:"post",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this._options.apiKey}`},body:JSON.stringify({reference_id:this._options.referenceId,text:e,format:"wav",sample_rate:16e3})});if(t.ok)return Buffer.from(await t.arrayBuffer());this._logger.error("\u5408\u6210\u5931\u8D25\uFF01");return}catch(t){this._logger.error(t.message),this._logger.error("\u8BF7\u68C0\u67E5\u60A8\u7684\u7F51\u7EDC\u662F\u5426\u80FD\u591F\u8FDE\u63A5\u5230fish audio\u3002");return}}};var W=class a{static{c(this,"BaseDrawSkill")}_app;_options;static params={name:"base-draw-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...Te,apiKey:{type:"string",title:"API Key","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5199\u60A8\u7684ApiKey"},"x-decorator-props":{tooltip:"\u8BF7\u786E\u8BA4\u60A8\u7684ApiKey\u5177\u5907\u76F8\u5173\u6743\u9650"},required:!0},apiBase:{type:"string",title:"API\u5730\u5740","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5165\u60A8\u7684API\u5730\u5740"},"x-decorator-props":{tooltip:"\u7ED8\u56FE\u7684API\u5730\u5740\u3002"}},model:{type:"string",title:"\u7ED8\u56FE\u6A21\u578B","x-decorator":"FormItem","x-component":"Input","x-decorator-props":{tooltip:"\u7ED8\u56FE\u6A21\u578B\uFF0C\u5FC5\u586B"}},size:{type:"string",title:"\u7ED8\u56FE\u5C3A\u5BF8","x-decorator":"FormItem","x-component":"Input"},triggerWords:{type:"string",title:"\u89E6\u53D1\u8BCD","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u586B\u5199\u60A8\u7684\u6280\u80FD\u89E6\u53D1\u8BCD\uFF0C\u4EE5\u7A7A\u683C\u5206\u9694\u3002"},"x-decorator-props":{tooltip:"\u4EE5\u7A7A\u683C\u5206\u9694"},default:"\u753B\u56FE \u753B\u4E2A\u56FE \u753B\u753B \u753B\u5F20\u56FE \u7ED8\u56FE \u753B\u4E2A\u753B \u753B draw",required:!0},replyFormat:{type:"string",title:"\u56DE\u590D\u6D88\u606F\u683C\u5F0F","x-decorator":"FormItem","x-component":"Select",enum:[{label:"\u56FE\u7247",value:"IMAGE"},{label:"MarkDown",value:"TEXT"}],"x-decorator-props":{tooltip:"\u652F\u6301Markdown\u7684\u6D88\u606F\u6E90\u5EFA\u8BAE\u4F7F\u7528\u6587\u5B57"},default:"TEXT"},useLLM:{type:"boolean",title:"\u662F\u5426\u4F7F\u7528\u5927\u6A21\u578B\u8FDB\u884C\u63D0\u793A\u8BCD\u4F18\u5316","x-decorator":"FormItem","x-component":"Switch",default:!1,"x-decorator-props":{tooltip:"\u5982\u679C\u9009\u62E9\u4F7F\u7528\u5927\u6A21\u578B\u4F18\u5316\uFF0C\u4F46\u662F\u6CA1\u6709\u9009\u62E9\u7528\u4E8E\u4F18\u5316\u7684\u5927\u6A21\u578B\uFF0C\u5219\u4E5F\u4E0D\u4F1A\u751F\u6548\u3002"}},optimizer:{type:"string",title:"\u7528\u4E8E\u4F18\u5316\u7684\u5927\u6A21\u578B","x-decorator":"FormItem","x-component":"BotSelector","x-decorator-props":{tooltip:"\u8BF7\u9009\u62E9\u4E00\u4E2A\u7528\u6765\u4F18\u5316\u63D0\u793A\u8BCD\u7684\u540E\u7AEF\u5927\u6A21\u578B\u5B9E\u4F8B\uFF0C\u5F3A\u70C8\u5EFA\u8BAE\u5355\u72EC\u4E3A\u6B64\u529F\u80FD\u521B\u5EFA\u72EC\u7ACB\u5927\u6A21\u578B\u7684\u5B9E\u4F8B\uFF0C\u4EE5\u907F\u514D\u4E0A\u4E0B\u6587\u5E72\u6270\u3002\u4F18\u5316\u7684\u63D0\u793A\u8BCD\u7B49\u5185\u5BB9\u5728\u540E\u7AEF\u6A21\u578B\u521B\u5EFA\u7684\u65F6\u5019\u53EF\u4EE5\u8BBE\u5B9A\uFF0C\u5982\u679C\u662F\u667A\u80FD\u4F53\u6A21\u578B\uFF0C\u53EF\u4EE5\u5728\u667A\u80FD\u4F53\u5E73\u53F0\u8FDB\u884C\u8BBE\u5B9A\u3002"}}}}},desc:"\u57FA\u7840\u7ED8\u56FE\u6280\u80FD"};constructor(e,t){this._app=e,this._options=t,this._logger=y(this._options.instanceName)}_logger;get options(){return this._options}get params(){return a.params}async init(){}async applyOnSource(e){let t=Pt(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 p="\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:p,origin:void 0};e.message=u;try{let h=await m.prepareMessage(e),f="";await m.getResponse(e,{onContent:c((w,I)=>{I===l.TEXT&&(f+=w)},"onContent"),onError:c(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 i=e.message.senderId,n=await this._draw(r,i,e);if(n?.url.length)if(e.message=void 0,this._options.replyFormat==="IMAGE"){let p={file:v.fromPath(n.url)};e.reply(p,l.IMAGE,void 0,!0),n.text?.length&&e.reply(n.text,l.TEXT,void 0,!0)}else if(this._options.replyFormat==="FILE"){let p={file:v.fromPath(n.url)};e.reply(p,l.FILE,void 0,!0),n.text?.length&&e.reply(n.text,l.TEXT,void 0,!0)}else if(this._options.replyFormat==="VIDEO"){let p={file:v.fromPath(n.url),previewImage:n.coverUrl?v.fromPath(n.coverUrl):void 0};e.reply(p,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(`
|
|
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 xt=class extends W{static{c(this,"CogviewDrawSkill")}_app;_options;static params={name:"cogview-skill",desc:"CogView\u7ED8\u56FE",optionsSchema:{type:"formily",formily:{type:"object",properties:{...W.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 It=class extends W{static{c(this,"OpenAIDrawSkill")}_app;_options;static params={name:"openai-skill",desc:"OpenAI\u7ED8\u56FE",optionsSchema:{type:"formily",formily:{type:"object",properties:{...W.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 wt=class extends W{static{c(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:{...W.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 ln}from"uuid";var bt=class extends W{static{c(this,"CogVideoDrawSkill")}_app;_options;static params={name:"cogvideo-skill",desc:"CogVideo\u89C6\u9891\u751F\u6210",optionsSchema:{type:"formily",formily:{type:"object",properties:{...W.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:ln()})})).json();if(this._logger.debug(o),o?.id)return new Promise(s=>{try{let r=new Date().getTime(),i=c(async()=>{let n=await(await fetch(`${this._options.apiBase}/api/paas/v4/async-result/${o.id}`,{method:"get",headers:{Authorization:"Bearer "+this._options.apiKey}})).json();if(n.task_status==="SUCCESS"){s({url:n.video_result?.[0].url,coverUrl:n.video_result?.[0].cover_image_url});return}else this._logger.trace("current video status for "+e+": "+JSON.stringify(n));if((new Date().getTime()-r)/1e3>this._options.timeout){this._logger.warn("\u89C6\u9891\u751F\u6210\u8D85\u65F6\uFF01"),s(void 0);return}setTimeout(i,3e3)},"q");i()}catch(r){this._logger.error(r.message),s(void 0)}});this._logger.error("\u751F\u6210\u5931\u8D25\uFF01"),this._logger.error(o)}};import{DataSource as _n}from"typeorm";import{Column as X,Entity as hn,Index as ar,PrimaryGeneratedColumn as fn}from"typeorm";import{Client as mn}from"minio";import or from"fs/promises";import Wt from"node:path";import{existsSync as dn}from"fs";import{basename as sr}from"path";var lo=class{static{c(this,"LocalFileOperator")}constructor(e,t){this._basePath=Wt.join(e,t)}_basePath;async writeFile(e,t){let o=e.startsWith("/")?e:Wt.join(this._basePath,e),s=Wt.dirname(o);dn(s)||await or.mkdir(s,{recursive:!0}),await or.writeFile(o,await t.asBuffer())}readFile(e){let t=e.startsWith("/")?e:Wt.join(this._basePath,e);return v.fromPath(t,"binary",sr(t))}},mo=class{static{c(this,"MinioFileOperator")}_minioClient;_bucket;constructor(e,t){this._minioClient=e,this._bucket=t}async _downloadFileToBuffer(e,t){try{let o=await this._minioClient.getObject(e,t),s=[];return new Promise((r,i)=>{o.on("data",n=>{s.push(n)}),o.on("end",()=>{let n=Buffer.concat(s);r(n)}),o.on("error",n=>{i(n)})})}catch(o){throw console.error("\u83B7\u53D6\u5BF9\u8C61\u65F6\u53D1\u751F\u9519\u8BEF:",o),o}}async writeFile(e,t){await this._minioClient.putObject(this._bucket,e,await t.asBuffer())}readFile(e){return new v(async()=>({data:await this._downloadFileToBuffer(this._bucket,e),type:"buffer",name:sr(e)}),"binary")}},un=y("file-operator"),rr,uo;process.env.MINIO_ENABLE==="1"?(un.info("minio enabled"),rr=new mn({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=c(a=>new mo(rr,a),"_createFileOperator")):uo=c(a=>new lo(_.dataPath,a),"_createFileOperator");var nr=uo;function j(a,e,t,o){var s=arguments.length,r=s<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(a,e,t,o);else for(var n=a.length-1;n>=0;n--)(i=a[n])&&(r=(s<3?i(r):s>3?i(e,t,r):i(e,t))||r);return s>3&&r&&Object.defineProperty(e,t,r),r}c(j,"_ts_decorate");function G(a,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(a,e)}c(G,"_ts_metadata");var ir=nr(_.minioMessageBucket),gn=y("chat-message-orm"),F=class a{static{c(this,"ChatMessage")}id;msgId;type;fromId;createdAt;senderId;senderName;senderNickName;senderAvatar;isGroupChat;isSender;customType;raw;sourceName;sourceInstanceName;static fromMessage(e,t){let o=new a;return o.msgId=e.messageId,o.type=e.type,o.fromId=e.fromId,o.createdAt=e.time?.getTime()??new Date().getTime(),o.senderId=e.senderId,o.senderName=e.senderName,o.senderNickName=e.senderInfo?.nickName,o.senderAvatar=e.senderInfo?.bigAvatarUrl??e.senderInfo?.avatarUrl,o.isGroupChat=e.isGroupChat,o.isSender=e.isSender,o.customType=e.customType,o.raw=JSON.stringify(e,(s,r)=>{if(r.asBuffer){let i=`${e.fromId}/${e.time.getFullYear()}/${e.time.getMonth()+1}-${e.time.getDate()}/${r.name}`;return ir.writeFile(i,r).then(()=>{gn.trace("attach saved")}),"attach://"+i}else if(s==="origin")return{};return r}),o.sourceName=t.params.name,o.sourceInstanceName=t.options.instanceName,o}static toMessage(e){return{...JSON.parse(e.raw,(s,r)=>{if(typeof r=="string"&&r.startsWith("attach://")){let i=r.substring(9);return ir.readFile(i)}return r}),time:new Date(e.createdAt)}}};j([fn("uuid"),G("design:type",String)],F.prototype,"id",void 0);j([X("varchar"),G("design:type",String)],F.prototype,"msgId",void 0);j([X("varchar"),G("design:type",String)],F.prototype,"type",void 0);j([ar(),X("varchar"),G("design:type",String)],F.prototype,"fromId",void 0);j([X("numeric"),G("design:type",Number)],F.prototype,"createdAt",void 0);j([X("varchar"),G("design:type",String)],F.prototype,"senderId",void 0);j([X("varchar",{nullable:!0}),G("design:type",String)],F.prototype,"senderName",void 0);j([X("varchar",{nullable:!0}),G("design:type",String)],F.prototype,"senderNickName",void 0);j([X("text",{nullable:!0}),G("design:type",String)],F.prototype,"senderAvatar",void 0);j([X("boolean",{nullable:!0}),G("design:type",Boolean)],F.prototype,"isGroupChat",void 0);j([X("boolean",{nullable:!0}),G("design:type",Boolean)],F.prototype,"isSender",void 0);j([X("varchar",{nullable:!0}),G("design:type",String)],F.prototype,"customType",void 0);j([X("text"),G("design:type",String)],F.prototype,"raw",void 0);j([X("varchar"),G("design:type",String)],F.prototype,"sourceName",void 0);j([ar(),X("varchar"),G("design:type",String)],F.prototype,"sourceInstanceName",void 0);F=j([hn()],F);var pr=y("db-logger"),yn={sqlite:{npmName:"better-sqlite3",ormType:"better-sqlite3"},pg:{npmName:"pg",ormType:"postgres"},mysql:{npmName:"mysql"},mongodb:{npmName:"mongodb",version:"^5.2.0"}},Ae=yn[_.dbProvider];if(!Ae)throw new Error("DB_PROVIDER\u914D\u7F6E\u9519\u8BEF\uFF08\u4EC5\u652F\u6301mysql pg sqlite mongodb\uFF09\uFF1A"+_.dbProvider);try{await import(Ae.npmName)}catch{pr.warn("\u5F53\u524D\u5C1A\u672A\u5B89\u88C5"+_.dbProvider+"\u6570\u636E\u5E93\u5F15\u64CE\uFF0C\u5C06\u5C1D\u8BD5\u81EA\u52A8\u5B89\u88C5\uFF01"),await so(Ae.npmName,_.npmRegistry,Ae.version,!1),pr.info("\u6570\u636E\u5E93\u5F15\u64CE"+Ae.npmName+"\u5B89\u88C5\u6210\u529F\uFF01")}var ho=_.dbProvider==="sqlite"?{database:_.dbConnection,type:"better-sqlite3"}:{url:_.dbConnection,type:Ae.ormType??_.dbProvider};ho={maxQueryExecutionTime:5e3,synchronize:!0,entities:[F],...ho};var cr=new _n(ho);await cr.initialize();var lr=cr.getRepository(F);var vt=class a{static{c(this,"ChatMessageTaskRunner")}_app;_options;static params={name:"chat-message-runner",triggerConstraints:void 0,optionsSchema:{type:"formily",formily:{type:"object",properties:{...Ht}}},desc:"\u804A\u5929\u6D88\u606F\u4FDD\u5B58"};constructor(e,t){this._app=e,this._options=t,this._logger=y(this._options.instanceName)}_logger;get options(){return this._options}get params(){return a.params}async run(e){try{let t=e.data,o=F.fromMessage(t.message,t.source);return lr.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 Hu=c(async a=>({init:c(async()=>({skills:[{creator:c(e=>new Qe(e),"creator"),params:Qe.params},{creator:c(e=>new Ve(e),"creator"),params:Ve.params},{creator:c(e=>new lt(a,e),"creator"),params:lt.params},{creator:c(e=>new mt(a,e),"creator"),params:mt.params},{creator:c(e=>new dt(a,e),"creator"),params:dt.params},{creator:c(e=>new ut(a,e),"creator"),params:ut.params},{creator:c(e=>new ht(a,e),"creator"),params:ht.params},{creator:c(e=>new ft(a,e),"creator"),params:ft.params},{creator:c(e=>new he(a,e),"creator"),params:he.params},{creator:c(e=>new gt(a,e),"creator"),params:gt.params},{creator:c(e=>new fe(a,e),"creator"),params:fe.params},{creator:c(e=>new _t(a,e),"creator"),params:_t.params},{creator:c(e=>new yt(a,e),"creator"),params:yt.params},{creator:c(e=>new xt(a,e),"creator"),params:xt.params},{creator:c(e=>new It(a,e),"creator"),params:It.params},{creator:c(e=>new wt(a,e),"creator"),params:wt.params},{creator:c(e=>new bt(a,e),"creator"),params:bt.params}],bots:[{creator:c(e=>new Le(e),"creator"),params:Le.params},{creator:c(e=>new Be(e),"creator"),params:Be.params},{creator:c(e=>new P(e),"creator"),params:P.params},{creator:c(e=>new Ue(e),"creator"),params:Ue.params},{creator:c(e=>new je(e),"creator"),params:je.params},{creator:c(e=>new qe(e),"creator"),params:qe.params},{creator:c(e=>new Ge(e),"creator"),params:Ge.params},{creator:c(e=>new He(e),"creator"),params:He.params},{creator:c(e=>new De(e),"creator"),params:De.params},{creator:c(e=>new $e(e),"creator"),params:$e.params},{creator:c(e=>new ze(e),"creator"),params:ze.params},{creator:c(e=>new We(e),"creator"),params:We.params},{creator:c(e=>new Ke(e),"creator"),params:Ke.params}],sources:[{creator:c(e=>new ot(e),"creator"),params:ot.params},{creator:c(e=>new Ze(e),"creator"),params:Ze.params},{creator:c(e=>new rt(a,e),"creator"),params:rt.params},{creator:c(e=>new st(a,e),"creator"),params:st.params},{creator:c(e=>new it(a,e),"creator"),params:it.params},{creator:c(e=>new pt(a,e),"creator"),params:pt.params},{creator:c(e=>new ct(a,e),"creator"),params:ct.params}],taskTriggers:[{creator:c(e=>new Xe(a,e),"creator"),params:Xe.params},{creator:c(e=>new Je(a,e),"creator"),params:Je.params},{creator:c(e=>new tt(a,e),"creator"),params:tt.params}],taskRunners:[{creator:c(e=>new et(a,e),"creator"),params:et.params},{creator:c(e=>new vt(a,e),"creator"),params:vt.params}]}),"init"),needOnline:!1,name:"\u9ED8\u8BA4\u63D2\u4EF6",dispose:c(async()=>{},"dispose")}),"defaultPlugin");var Xt=class extends Z{static{c(this,"SkillManager")}};var Jt=class extends Z{static{c(this,"SourceManager")}};var Vt=class extends Z{static{c(this,"TaskRunnerManager")}options;constructor(e){e.cacheInstance=!1,super(e),this.options=e}},Qt=class extends Z{static{c(this,"TaskTriggerManager")}options;constructor(e){e.cacheInstance=!1,super(e),this.options=e}};import xn from"fastify";import In from"@fastify/websocket";import wn from"@fastify/static";import Ee from"node:process";import bn from"@fastify/formbody";import vn from"emittery";import{XMLParser as kn}from"fast-xml-parser";import mr from"fs";import fo from"node:path";import{createReadStream as Sn,existsSync as Cn}from"node:fs";import{authentication as Tn,createDirectus as An,readItems as En,readMe as Nn,rest as Fn}from"@directus/sdk";import Mn from"@fastify/cors";import{v4 as dr}from"uuid";import On from"@fastify/compress";var ur=class a extends vn{static{c(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 kn,this._onlinePluginInfos=new Map,this._services=new Map,this._logger=y("app-"+this._options.name),this._globalEvent=new Ut(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=xn({logger:{level:"warn"}}),await this._server.register(In),await this._server.register(bn),await this._server.register(Mn,{origin:"*"}),_.serverCompress&&(this._logger.info("\u542F\u7528\u670D\u52A1\u5668gzip\u538B\u7F29"),await this._server.register(On,{global:!0,threshold:_.serverCompressMinSize,customTypes:c(e=>_.serverCompressMime.includes(e),"customTypes")})),this._server.addContentTypeParser(["text/xml","application/xml"],(e,t,o)=>{let s=[];t.on("data",r=>{s.push(r)}),t.on("end",()=>{try{let r=Buffer.concat(s).toString(),i=this._xmlParser.parse(r);o(null,i)}catch(r){o(r)}})}),this._logger.trace("fastify server created")}async _initServer(){if(this._logger.trace("register fastify server plugins"),await this._server.register(async e=>{e.get("/ws/*",{websocket:!0},(t,o)=>{_.traceHttpRequest&&this._logger.trace("ws request,ip"+o.ip+",host:"+o.hostname+",path:"+o.url);let r=(o.query.token??o.headers.authorization?.replace("Bearer","").trim())===_.publicToken;if(_.publicForceAuth&&!r){this._logger.debug("\u672A\u6388\u6743\u7684\u8BBF\u95EE"),this._logger.debug(o.url),t.close(403,"\u672A\u6388\u6743\u7684\u8BBF\u95EE");return}let i=o.params["*"],n,p,m,d=new TextDecoder("utf-8");if(i==="normal")n=c(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=i.replaceAll("/","-"),h=c(()=>{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=c(async(f,w,I)=>{let b=h();if(!b)return;b.action.onMessage(f,w,I)},"onmessage"),p=c(async(f,w)=>{let I=h();if(!I)return;I.action.onOpen(f,w)},"onOpen"),m=c(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)}}),p&&p(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(i){i instanceof Et?(t.status(401),t.send(i.message)):i instanceof At?(t.status(400),t.send(i.message)):i instanceof Tt?(t.status(404),t.send(i.message)):(t.status(500),t.send(String(i)))}}),await this._server.register(wn,{root:_.publicPath,prefix:_.publicPathName}),Ee.env.VERIFY_FILE?.length){let e=fo.resolve("."+Ee.env.VERIFY_FILE);Cn(e)?this._server.get(Ee.env.VERIFY_FILE,(t,o)=>{this._logger.trace("verify service requested from "+t.url),o.send(Sn(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??fo.resolve(_.publicPath,"images","cover-default.png");(e.startsWith("http")||mr.existsSync(e))&&(this._sharedCover=v.fromPath(e,"binary","shared-cover.png"));let t=this._options.sharedLogoPath??fo.resolve(_.publicPath,"images","logo-default.png");(t.startsWith("http")||mr.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(En("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=An(_.configServerUrl).with(Tn("json")).with(Fn()),await this.client.login(_.configServerEmail,_.configServerPassword);let o=await this._client.request(Nn());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 $t,this._skillManager=new Xt,this._sourceManager=new Jt,this._taskTriggerManager=new Qt({cacheInstance:!1}),this._taskRunnerManager=new Vt({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 Dt(this,this._options.agentServiceOptions)).init(),this._logger.trace("agent service created"),await(this._taskService=new Gt(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,Ee.on("unhandledRejection",o=>{this._logger.error(o),this.emit(a.EventNames.ERROR,o)});for(let o of["SIGINT","SIGTERM"])Ee.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:dr()})}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:dr()})}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"}`),Ee.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{Se as Agent,Dt as AgentService,v as AsyncFile,mt as BaiduSTTSkill,lt as BaiduTTSSkill,W as BaseDrawSkill,U as BaseSTTSkill,R as BaseTTSSkill,E as BasicBot,$t as BotManager,F as ChatMessage,vt as ChatMessageTaskRunner,bt as CogVideoDrawSkill,xt as CogviewDrawSkill,Be as CozeBot,jt as CozeService,tt as CronTaskTrigger,Le as DifyAgentBot,rt as DingRobotSource,et as EchoTaskRunner,Kt as EventTaskTrigger,Ue as FastGPTBot,it as FeishuSource,yt as FishAudioTTSSkill,Ut as GlobalEvent,J as GlobalEventNames,Je as GlobalEventTaskTrigger,Bt as HistoryMessageManager,Z as InstanceBaseManager,De as OllamaBot,P as OpenAIBot,It as OpenAIDrawSkill,he as OpenAISTTSkill,fe as OpenAITTSSkill,$e as OpenRouterBot,ur as PPAgent,je as QAnythingBot,pt as QQSource,L as SchemaBaseProperties,Ve as SenseVoiceSTTSkill,Ke as SiliconFlowBot,wt as SiliconFlowDrawSkill,gt as SiliconFlowSTTSkill,_t as SiliconFlowTTSSkill,Jn as SimpleSchemaType,Xt as SkillManager,Te as SkillSchemaBaseProperties,Lt as SortedPromise,At as SourceApiMissingParamsError,Tt as SourceApiNotFoundError,Et as SourceApiUnAuthorizedError,l as SourceChatMessageType,Xe as SourceEventTaskTrigger,g as SourceEventType,Jt as SourceManager,Qe as SoviteTTSSkill,Vt as TaskRunnerManager,Ht as TaskRunnerSchemaBaseProperties,Gt as TaskService,Ce as TaskTrigger,Qt as TaskTriggerManager,ht as TencentSTTSkill,ft as TencentTTSSkill,ct as WCAISource,ot as WCOASource,st as WeWorkSource,qe as WenxinAgentBot,ze as XunfeiBot,dt as XunfeiSTTSkill,ut as XunfeiTTSSkill,Ge as YuanQiBot,We as ZhipuBot,He as ZhipuQingyanBot,ke as addWavHeader,Dp as apiPlugin,_e as arm2wav,ce as betterMarkdown,lr as chatMessageRepo,cr as chatSource,ye as checkMessageRule,_ as config,Nt as createCacheManager,Go as createFormilySchema,Hu as defaultPlugin,Do as detectName,le as disposeObjects,Lo as extractArticleInfo,Oe as extractImageUrls,Uo as extractMarkdownImageTags,Pt as extractMessageContentText,oo as extractPositionInfo,Eo as filterContentRule,me as generateRandomString,Ot as getEnvNumber,jo as getFromMessageSummary,y as getLogger,Q as getSecret,qo as getToMessageSummary,Ro as hasEmoji,Bo as hasMarkdown,Ko as installAndGetPluginInfo,so as installDep,Ft as isPhoneNumber,Oo as removeEmoji,Po as removeMarkdown,Mt as richText2Markdown,ro as sleep,se as sse,$o as stream2buffer,Me as transFileFormat,Fr as transFormat,zo 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 xt=class extends W{static{c(this,"CogviewDrawSkill")}_app;_options;static params={name:"cogview-skill",desc:"CogView\u7ED8\u56FE",optionsSchema:{type:"formily",formily:{type:"object",properties:{...W.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 It=class extends W{static{c(this,"OpenAIDrawSkill")}_app;_options;static params={name:"openai-skill",desc:"OpenAI\u7ED8\u56FE",optionsSchema:{type:"formily",formily:{type:"object",properties:{...W.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 wt=class extends W{static{c(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:{...W.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 ln}from"uuid";var bt=class extends W{static{c(this,"CogVideoDrawSkill")}_app;_options;static params={name:"cogvideo-skill",desc:"CogVideo\u89C6\u9891\u751F\u6210",optionsSchema:{type:"formily",formily:{type:"object",properties:{...W.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:ln()})})).json();if(this._logger.debug(o),o?.id)return new Promise(s=>{try{let r=new Date().getTime(),i=c(async()=>{let n=await(await fetch(`${this._options.apiBase}/api/paas/v4/async-result/${o.id}`,{method:"get",headers:{Authorization:"Bearer "+this._options.apiKey}})).json();if(n.task_status==="SUCCESS"){s({url:n.video_result?.[0].url,coverUrl:n.video_result?.[0].cover_image_url});return}else this._logger.trace("current video status for "+e+": "+JSON.stringify(n));if((new Date().getTime()-r)/1e3>this._options.timeout){this._logger.warn("\u89C6\u9891\u751F\u6210\u8D85\u65F6\uFF01"),s(void 0);return}setTimeout(i,3e3)},"q");i()}catch(r){this._logger.error(r.message),s(void 0)}});this._logger.error("\u751F\u6210\u5931\u8D25\uFF01"),this._logger.error(o)}};import{DataSource as _n}from"typeorm";import{Column as X,Entity as hn,Index as ar,PrimaryGeneratedColumn as fn}from"typeorm";import{Client as mn}from"minio";import or from"fs/promises";import Wt from"node:path";import{existsSync as dn}from"fs";import{basename as sr}from"path";var lo=class{static{c(this,"LocalFileOperator")}constructor(e,t){this._basePath=Wt.join(e,t)}_basePath;async writeFile(e,t){let o=e.startsWith("/")?e:Wt.join(this._basePath,e),s=Wt.dirname(o);dn(s)||await or.mkdir(s,{recursive:!0}),await or.writeFile(o,await t.asBuffer())}readFile(e){let t=e.startsWith("/")?e:Wt.join(this._basePath,e);return v.fromPath(t,"binary",sr(t))}},mo=class{static{c(this,"MinioFileOperator")}_minioClient;_bucket;constructor(e,t){this._minioClient=e,this._bucket=t}async _downloadFileToBuffer(e,t){try{let o=await this._minioClient.getObject(e,t),s=[];return new Promise((r,i)=>{o.on("data",n=>{s.push(n)}),o.on("end",()=>{let n=Buffer.concat(s);r(n)}),o.on("error",n=>{i(n)})})}catch(o){throw console.error("\u83B7\u53D6\u5BF9\u8C61\u65F6\u53D1\u751F\u9519\u8BEF:",o),o}}async writeFile(e,t){await this._minioClient.putObject(this._bucket,e,await t.asBuffer())}readFile(e){return new v(async()=>({data:await this._downloadFileToBuffer(this._bucket,e),type:"buffer",name:sr(e)}),"binary")}},un=y("file-operator"),rr,uo;process.env.MINIO_ENABLE==="1"?(un.info("minio enabled"),rr=new mn({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=c(a=>new mo(rr,a),"_createFileOperator")):uo=c(a=>new lo(_.dataPath,a),"_createFileOperator");var nr=uo;function j(a,e,t,o){var s=arguments.length,r=s<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,t):o,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(a,e,t,o);else for(var n=a.length-1;n>=0;n--)(i=a[n])&&(r=(s<3?i(r):s>3?i(e,t,r):i(e,t))||r);return s>3&&r&&Object.defineProperty(e,t,r),r}c(j,"_ts_decorate");function G(a,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(a,e)}c(G,"_ts_metadata");var ir=nr(_.minioMessageBucket),gn=y("chat-message-orm"),F=class a{static{c(this,"ChatMessage")}id;msgId;type;fromId;createdAt;senderId;senderName;senderNickName;senderAvatar;isGroupChat;isSender;customType;raw;sourceName;sourceInstanceName;static fromMessage(e,t){let o=new a;return o.msgId=e.messageId,o.type=e.type,o.fromId=e.fromId,o.createdAt=e.time?.getTime()??new Date().getTime(),o.senderId=e.senderId,o.senderName=e.senderName,o.senderNickName=e.senderInfo?.nickName,o.senderAvatar=e.senderInfo?.bigAvatarUrl??e.senderInfo?.avatarUrl,o.isGroupChat=e.isGroupChat,o.isSender=e.isSender,o.customType=e.customType,o.raw=JSON.stringify(e,(s,r)=>{if(r?.asBuffer){let i=`${e.fromId}/${e.time.getFullYear()}/${e.time.getMonth()+1}-${e.time.getDate()}/${r.name}`;return ir.writeFile(i,r).then(()=>{gn.trace("attach saved")}),"attach://"+i}else if(s==="origin")return{};return r}),o.sourceName=t.params.name,o.sourceInstanceName=t.options.instanceName,o}static toMessage(e){return{...JSON.parse(e.raw,(s,r)=>{if(typeof r=="string"&&r.startsWith("attach://")){let i=r.substring(9);return ir.readFile(i)}return r}),time:new Date(e.createdAt)}}};j([fn("uuid"),G("design:type",String)],F.prototype,"id",void 0);j([X("varchar"),G("design:type",String)],F.prototype,"msgId",void 0);j([X("varchar"),G("design:type",String)],F.prototype,"type",void 0);j([ar(),X("varchar"),G("design:type",String)],F.prototype,"fromId",void 0);j([X("numeric"),G("design:type",Number)],F.prototype,"createdAt",void 0);j([X("varchar"),G("design:type",String)],F.prototype,"senderId",void 0);j([X("varchar",{nullable:!0}),G("design:type",String)],F.prototype,"senderName",void 0);j([X("varchar",{nullable:!0}),G("design:type",String)],F.prototype,"senderNickName",void 0);j([X("text",{nullable:!0}),G("design:type",String)],F.prototype,"senderAvatar",void 0);j([X("boolean",{nullable:!0}),G("design:type",Boolean)],F.prototype,"isGroupChat",void 0);j([X("boolean",{nullable:!0}),G("design:type",Boolean)],F.prototype,"isSender",void 0);j([X("varchar",{nullable:!0}),G("design:type",String)],F.prototype,"customType",void 0);j([X("text"),G("design:type",String)],F.prototype,"raw",void 0);j([X("varchar"),G("design:type",String)],F.prototype,"sourceName",void 0);j([ar(),X("varchar"),G("design:type",String)],F.prototype,"sourceInstanceName",void 0);F=j([hn()],F);var pr=y("db-logger"),yn={sqlite:{npmName:"better-sqlite3",ormType:"better-sqlite3"},pg:{npmName:"pg",ormType:"postgres"},mysql:{npmName:"mysql"},mongodb:{npmName:"mongodb",version:"^5.2.0"}},Ae=yn[_.dbProvider];if(!Ae)throw new Error("DB_PROVIDER\u914D\u7F6E\u9519\u8BEF\uFF08\u4EC5\u652F\u6301mysql pg sqlite mongodb\uFF09\uFF1A"+_.dbProvider);try{await import(Ae.npmName)}catch{pr.warn("\u5F53\u524D\u5C1A\u672A\u5B89\u88C5"+_.dbProvider+"\u6570\u636E\u5E93\u5F15\u64CE\uFF0C\u5C06\u5C1D\u8BD5\u81EA\u52A8\u5B89\u88C5\uFF01"),await so(Ae.npmName,_.npmRegistry,Ae.version,!1),pr.info("\u6570\u636E\u5E93\u5F15\u64CE"+Ae.npmName+"\u5B89\u88C5\u6210\u529F\uFF01")}var ho=_.dbProvider==="sqlite"?{database:_.dbConnection,type:"better-sqlite3"}:{url:_.dbConnection,type:Ae.ormType??_.dbProvider};ho={maxQueryExecutionTime:5e3,synchronize:!0,entities:[F],...ho};var cr=new _n(ho);await cr.initialize();var lr=cr.getRepository(F);var vt=class a{static{c(this,"ChatMessageTaskRunner")}_app;_options;static params={name:"chat-message-runner",triggerConstraints:void 0,optionsSchema:{type:"formily",formily:{type:"object",properties:{...Ht}}},desc:"\u804A\u5929\u6D88\u606F\u4FDD\u5B58"};constructor(e,t){this._app=e,this._options=t,this._logger=y(this._options.instanceName)}_logger;get options(){return this._options}get params(){return a.params}async run(e){try{let t=e.data,o=F.fromMessage(t.message,t.source);return lr.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 Hu=c(async a=>({init:c(async()=>({skills:[{creator:c(e=>new Qe(e),"creator"),params:Qe.params},{creator:c(e=>new Ve(e),"creator"),params:Ve.params},{creator:c(e=>new lt(a,e),"creator"),params:lt.params},{creator:c(e=>new mt(a,e),"creator"),params:mt.params},{creator:c(e=>new dt(a,e),"creator"),params:dt.params},{creator:c(e=>new ut(a,e),"creator"),params:ut.params},{creator:c(e=>new ht(a,e),"creator"),params:ht.params},{creator:c(e=>new ft(a,e),"creator"),params:ft.params},{creator:c(e=>new he(a,e),"creator"),params:he.params},{creator:c(e=>new gt(a,e),"creator"),params:gt.params},{creator:c(e=>new fe(a,e),"creator"),params:fe.params},{creator:c(e=>new _t(a,e),"creator"),params:_t.params},{creator:c(e=>new yt(a,e),"creator"),params:yt.params},{creator:c(e=>new xt(a,e),"creator"),params:xt.params},{creator:c(e=>new It(a,e),"creator"),params:It.params},{creator:c(e=>new wt(a,e),"creator"),params:wt.params},{creator:c(e=>new bt(a,e),"creator"),params:bt.params}],bots:[{creator:c(e=>new Le(e),"creator"),params:Le.params},{creator:c(e=>new Be(e),"creator"),params:Be.params},{creator:c(e=>new P(e),"creator"),params:P.params},{creator:c(e=>new Ue(e),"creator"),params:Ue.params},{creator:c(e=>new je(e),"creator"),params:je.params},{creator:c(e=>new qe(e),"creator"),params:qe.params},{creator:c(e=>new Ge(e),"creator"),params:Ge.params},{creator:c(e=>new He(e),"creator"),params:He.params},{creator:c(e=>new De(e),"creator"),params:De.params},{creator:c(e=>new $e(e),"creator"),params:$e.params},{creator:c(e=>new ze(e),"creator"),params:ze.params},{creator:c(e=>new We(e),"creator"),params:We.params},{creator:c(e=>new Ke(e),"creator"),params:Ke.params}],sources:[{creator:c(e=>new ot(e),"creator"),params:ot.params},{creator:c(e=>new Ze(e),"creator"),params:Ze.params},{creator:c(e=>new rt(a,e),"creator"),params:rt.params},{creator:c(e=>new st(a,e),"creator"),params:st.params},{creator:c(e=>new it(a,e),"creator"),params:it.params},{creator:c(e=>new pt(a,e),"creator"),params:pt.params},{creator:c(e=>new ct(a,e),"creator"),params:ct.params}],taskTriggers:[{creator:c(e=>new Xe(a,e),"creator"),params:Xe.params},{creator:c(e=>new Je(a,e),"creator"),params:Je.params},{creator:c(e=>new tt(a,e),"creator"),params:tt.params}],taskRunners:[{creator:c(e=>new et(a,e),"creator"),params:et.params},{creator:c(e=>new vt(a,e),"creator"),params:vt.params}]}),"init"),needOnline:!1,name:"\u9ED8\u8BA4\u63D2\u4EF6",dispose:c(async()=>{},"dispose")}),"defaultPlugin");var Xt=class extends Z{static{c(this,"SkillManager")}};var Jt=class extends Z{static{c(this,"SourceManager")}};var Vt=class extends Z{static{c(this,"TaskRunnerManager")}options;constructor(e){e.cacheInstance=!1,super(e),this.options=e}},Qt=class extends Z{static{c(this,"TaskTriggerManager")}options;constructor(e){e.cacheInstance=!1,super(e),this.options=e}};import xn from"fastify";import In from"@fastify/websocket";import wn from"@fastify/static";import Ee from"node:process";import bn from"@fastify/formbody";import vn from"emittery";import{XMLParser as kn}from"fast-xml-parser";import mr from"fs";import fo from"node:path";import{createReadStream as Sn,existsSync as Cn}from"node:fs";import{authentication as Tn,createDirectus as An,readItems as En,readMe as Nn,rest as Fn}from"@directus/sdk";import Mn from"@fastify/cors";import{v4 as dr}from"uuid";import On from"@fastify/compress";var ur=class a extends vn{static{c(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 kn,this._onlinePluginInfos=new Map,this._services=new Map,this._logger=y("app-"+this._options.name),this._globalEvent=new Ut(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=xn({logger:{level:"warn"}}),await this._server.register(In),await this._server.register(bn),await this._server.register(Mn,{origin:"*"}),_.serverCompress&&(this._logger.info("\u542F\u7528\u670D\u52A1\u5668gzip\u538B\u7F29"),await this._server.register(On,{global:!0,threshold:_.serverCompressMinSize,customTypes:c(e=>_.serverCompressMime.includes(e),"customTypes")})),this._server.addContentTypeParser(["text/xml","application/xml"],(e,t,o)=>{let s=[];t.on("data",r=>{s.push(r)}),t.on("end",()=>{try{let r=Buffer.concat(s).toString(),i=this._xmlParser.parse(r);o(null,i)}catch(r){o(r)}})}),this._logger.trace("fastify server created")}async _initServer(){if(this._logger.trace("register fastify server plugins"),await this._server.register(async e=>{e.get("/ws/*",{websocket:!0},(t,o)=>{_.traceHttpRequest&&this._logger.trace("ws request,ip"+o.ip+",host:"+o.hostname+",path:"+o.url);let r=(o.query.token??o.headers.authorization?.replace("Bearer","").trim())===_.publicToken;if(_.publicForceAuth&&!r){this._logger.debug("\u672A\u6388\u6743\u7684\u8BBF\u95EE"),this._logger.debug(o.url),t.close(403,"\u672A\u6388\u6743\u7684\u8BBF\u95EE");return}let i=o.params["*"],n,p,m,d=new TextDecoder("utf-8");if(i==="normal")n=c(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=i.replaceAll("/","-"),h=c(()=>{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=c(async(f,w,I)=>{let b=h();if(!b)return;b.action.onMessage(f,w,I)},"onmessage"),p=c(async(f,w)=>{let I=h();if(!I)return;I.action.onOpen(f,w)},"onOpen"),m=c(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)}}),p&&p(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(i){i instanceof Et?(t.status(401),t.send(i.message)):i instanceof At?(t.status(400),t.send(i.message)):i instanceof Tt?(t.status(404),t.send(i.message)):(t.status(500),t.send(String(i)))}}),await this._server.register(wn,{root:_.publicPath,prefix:_.publicPathName}),Ee.env.VERIFY_FILE?.length){let e=fo.resolve("."+Ee.env.VERIFY_FILE);Cn(e)?this._server.get(Ee.env.VERIFY_FILE,(t,o)=>{this._logger.trace("verify service requested from "+t.url),o.send(Sn(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??fo.resolve(_.publicPath,"images","cover-default.png");(e.startsWith("http")||mr.existsSync(e))&&(this._sharedCover=v.fromPath(e,"binary","shared-cover.png"));let t=this._options.sharedLogoPath??fo.resolve(_.publicPath,"images","logo-default.png");(t.startsWith("http")||mr.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(En("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=An(_.configServerUrl).with(Tn("json")).with(Fn()),await this.client.login(_.configServerEmail,_.configServerPassword);let o=await this._client.request(Nn());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 $t,this._skillManager=new Xt,this._sourceManager=new Jt,this._taskTriggerManager=new Qt({cacheInstance:!1}),this._taskRunnerManager=new Vt({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 Dt(this,this._options.agentServiceOptions)).init(),this._logger.trace("agent service created"),await(this._taskService=new Gt(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,Ee.on("unhandledRejection",o=>{this._logger.error(o),this.emit(a.EventNames.ERROR,o)});for(let o of["SIGINT","SIGTERM"])Ee.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:dr()})}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:dr()})}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"}`),Ee.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{Se as Agent,Dt as AgentService,v as AsyncFile,mt as BaiduSTTSkill,lt as BaiduTTSSkill,W as BaseDrawSkill,U as BaseSTTSkill,R as BaseTTSSkill,E as BasicBot,$t as BotManager,F as ChatMessage,vt as ChatMessageTaskRunner,bt as CogVideoDrawSkill,xt as CogviewDrawSkill,Be as CozeBot,jt as CozeService,tt as CronTaskTrigger,Le as DifyAgentBot,rt as DingRobotSource,et as EchoTaskRunner,Kt as EventTaskTrigger,Ue as FastGPTBot,it as FeishuSource,yt as FishAudioTTSSkill,Ut as GlobalEvent,J as GlobalEventNames,Je as GlobalEventTaskTrigger,Bt as HistoryMessageManager,Z as InstanceBaseManager,De as OllamaBot,P as OpenAIBot,It as OpenAIDrawSkill,he as OpenAISTTSkill,fe as OpenAITTSSkill,$e as OpenRouterBot,ur as PPAgent,je as QAnythingBot,pt as QQSource,L as SchemaBaseProperties,Ve as SenseVoiceSTTSkill,Ke as SiliconFlowBot,wt as SiliconFlowDrawSkill,gt as SiliconFlowSTTSkill,_t as SiliconFlowTTSSkill,Jn as SimpleSchemaType,Xt as SkillManager,Te as SkillSchemaBaseProperties,Lt as SortedPromise,At as SourceApiMissingParamsError,Tt as SourceApiNotFoundError,Et as SourceApiUnAuthorizedError,l as SourceChatMessageType,Xe as SourceEventTaskTrigger,g as SourceEventType,Jt as SourceManager,Qe as SoviteTTSSkill,Vt as TaskRunnerManager,Ht as TaskRunnerSchemaBaseProperties,Gt as TaskService,Ce as TaskTrigger,Qt as TaskTriggerManager,ht as TencentSTTSkill,ft as TencentTTSSkill,ct as WCAISource,ot as WCOASource,st as WeWorkSource,qe as WenxinAgentBot,ze as XunfeiBot,dt as XunfeiSTTSkill,ut as XunfeiTTSSkill,Ge as YuanQiBot,We as ZhipuBot,He as ZhipuQingyanBot,ke as addWavHeader,Dp as apiPlugin,_e as arm2wav,ce as betterMarkdown,lr as chatMessageRepo,cr as chatSource,ye as checkMessageRule,_ as config,Nt as createCacheManager,Go as createFormilySchema,Hu as defaultPlugin,Do as detectName,le as disposeObjects,Lo as extractArticleInfo,Oe as extractImageUrls,Uo as extractMarkdownImageTags,Pt as extractMessageContentText,oo as extractPositionInfo,Eo as filterContentRule,me as generateRandomString,Ot as getEnvNumber,jo as getFromMessageSummary,y as getLogger,Q as getSecret,qo as getToMessageSummary,Ro as hasEmoji,Bo as hasMarkdown,Ko as installAndGetPluginInfo,so as installDep,Ft as isPhoneNumber,Oo as removeEmoji,Po as removeMarkdown,Mt as richText2Markdown,ro as sleep,se as sse,$o as stream2buffer,Me as transFileFormat,Fr as transFormat,zo as uninstallDep,ie as wav2amr};
|