ppagent 0.0.12 → 0.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib.d.ts +1 -1
- package/dist/lib.js +4 -4
- package/package.json +1 -1
package/dist/lib.d.ts
CHANGED
|
@@ -1585,7 +1585,7 @@ declare class PPAgent extends Emittery {
|
|
|
1585
1585
|
roles: string[] | any[];
|
|
1586
1586
|
}[];
|
|
1587
1587
|
};
|
|
1588
|
-
get onlinePlugins():
|
|
1588
|
+
get onlinePlugins(): IterableIterator<IOnlinePluginInfo>;
|
|
1589
1589
|
get running(): boolean;
|
|
1590
1590
|
get services(): Map<string, any>;
|
|
1591
1591
|
private _createServer;
|
package/dist/lib.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import Sr from"emittery";import Wo from"pino";import Ht from"node:process";import Vo from"emittery";var ro={level:Ht.env.LOG_LEVEL??"debug"};Ht.env.NODE_ENV==="development"&&(ro.transport={target:"pino-pretty",options:{colorize:!0}});var oo=Wo(ro),$t=class extends Vo{_levelMap={trace:0,debug:1,info:2,warn:3,error:4,fatal:5};_currentLevelVal;_currentLevel;get level(){return this._currentLevel}constructor(t){super(),this.setLevel(t??Ht.env.LOG_LEVEL??"trace")}setLevel(t){this._currentLevelVal=this._levelMap[t],this._currentLevel=t}emitString(t,e,o){this._levelMap[t]>=this._currentLevelVal&&this.emit("log",{level:t,name:e,message:o})}emitObject(t,e,o){this._levelMap[t]>=this._currentLevelVal&&this.emit("log",{level:t,name:e,message:o})}},fe=(c,t,e,o)=>{typeof e=="string"?(oo[c]("[%s] %s",t,e),o.emitString(c,t,e)):(oo[c]("[%s] %o",t,e),o.emitObject(c,t,e))},le=new $t,y=(c,t=!1)=>({trace:e=>fe("trace",c,e,le),debug:e=>fe("debug",c,e,le),info:e=>fe("info",c,e,le),warn:e=>fe("warn",c,e,le),error:e=>fe("error",c,e,le),fatal:e=>fe("fatal",c,e,le),emitter:t?le:void 0});import{createReadStream as ur,existsSync as dr,mkdirSync as gr,readFile as hr,stat as fr,writeFile as Ir}from"node:fs";import{mkdirSync as Xo}from"node:fs";import qt from"node:path";import v from"node:process";import{v4 as Jo}from"uuid";var jt="0.0.12";import{forward as Qo}from"@ngrok/ngrok";var Yo=(d=>(d.text="text",d.number="number",d.boolean="boolean",d.radio="radio",d.check="check",d.select="select",d.date="date",d.image="image",d.video="video",d.audio="audio",d.url="url",d.email="email",d.phone="phone",d.ipv4="ipv4",d))(Yo||{}),N={instanceName:{type:"string",title:"\u5B9E\u4F8BID","x-order":1e3,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u5EFA\u8BAE\u4F7F\u7528\u5BB9\u6613\u8BC6\u522B\u7684\u6807\u8BC6\uFF0C\u53EF\u4EE5\u81EA\u5DF1\u4EFB\u610F\u6307\u5B9A\uFF0C\u5168\u5C40\u5B9E\u4F8B\u4E2D\u552F\u4E00\u5373\u53EF\uFF0C\u7559\u7A7A\u4F7F\u7528\u968F\u673A\u6570\u3002"},"x-decorator-props":{tooltip:"\u53EF\u4EE5\u81EA\u5DF1\u4EFB\u610F\u6307\u5B9A\uFF0C\u5168\u5C40\u5B9E\u4F8B\u4E2D\u552F\u4E00\u5373\u53EF\u3002\u7559\u7A7A\u4F7F\u7528\u968F\u673A\u6570\u3002"}}},H=y("config"),It=Number(v.env.PORT??5050),no=String(v.env.HOST?.length?v.env.HOST:"0.0.0.0"),so=String(v.env.PRIVATE_HOST?.length?v.env.PRIVATE_HOST:no),Zo="http://"+so+":"+It,er="ws://"+so+":"+It,Ie,ye,ne=String(v.env.PUBLIC_HOST??"").trim();if(ne.length){let c=Number(v.env.PUBLIC_SSL)===1,t=80;v.env.PUBLIC_PORT?.length?t=Number(v.env.PUBLIC_PORT):c&&(t=443),ne.indexOf("$port")<0?(Ie=(c?"wss://":"ws://")+ne+":"+t,ye=(c?"https://":"http://")+ne+":"+t):(Ie=(c?"wss://":"ws://")+ne.replace("$port",t.toString()),ye=(c?"https://":"http://")+ne.replace("$port",t.toString()))}else{let c=v.env.PUBLIC_TUNNEL_NAME;c?.length||H.warn("\u672A\u914D\u7F6EPUBLIC_HOST\uFF0C\u4E14\u6CA1\u6709\u914D\u7F6EPUBLIC_TUNNEL_NAME\uFF0C\u5C06\u5C1D\u8BD5\u4F7F\u7528\u968F\u673A\u57DF\u540D\uFF01");let t=v.env.PUBLIC_TUNNEL_TOKEN;if(!t?.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 e=await Qo({addr:It,authtoken:t,domain:c}),o=e.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 n of["SIGINT","SIGTERM"])v.once(n,async()=>{H.info("close ngrok tunnel"),e.close()});ye=o;let r=o.indexOf("https")===0;ne=o.replace("https://","").replace("http://",""),Ie=(r?"wss://":"ws://")+ne,H.debug("auto generated public httpurl "+ye),H.info("\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F"),H.warn("\u5982\u679C\u4F7F\u7528\u4E86\u5BA2\u6237\u7AEF\u505A\u53EF\u89C6\u5316\u914D\u7F6E\uFF0C\u60A8\u9700\u8981\u5728\u6D4F\u89C8\u5668\u4E2D\u624B\u52A8\u6253\u5F00\u4E00\u6B21\u8BE5\u5730\u5740\uFF0C\u89E3\u9664\u514D\u8D39\u8BBF\u95EE\u9650\u5236\uFF01"),H.info("\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F"),H.debug("auto generated public wsurl "+Ie)}ye?.length||H.warn("PUBLIC_HOST\u672A\u914D\u7F6E\u4E14\u672A\u80FD\u81EA\u52A8\u751F\u6210\u516C\u7F51\u5730\u5740\uFF0C\u90E8\u5206\u670D\u52A1\u53EF\u80FD\u4F1A\u5F02\u5E38\uFF01");var io=v.env.PUBLIC_PATH?.length?v.env.PUBLIC_PATH:"/public",ao=qt.resolve(qt.join("./",io));Ie.length||H.warn("WS_URL not defined,if your message source need to connect with your http posted server url ,then error may occured!");var ft=v.env.PUBLIC_TOKEN;ft?.length||(ft=Jo(),H.warn("\u5F53\u524D\u6CA1\u6709PUBLIC_TOKEN\u73AF\u5883\u53D8\u91CF\uFF0C\u5C06\u751F\u6210\u4E00\u4E2A\u968F\u673Atoken\uFF0C\u670D\u52A1\u91CD\u542F\u540E\u4F1A\u5931\u6548\uFF01"),H.warn("\u968F\u673Atoken\u4E3A\uFF1A"+ft));var co=qt.resolve(ao,"temp");Xo(co,{recursive:!0});var po=v.env.CONFIG_SERVER_URL,lo=v.env.CONFIG_SERVER_EMAIL,mo=v.env.CONFIG_SERVER_PASSWORD,uo=!!(v.env.OFFLINE??!1);(!po?.length||!mo?.length||!lo?.length)&&(H.warn("CONFIG SERVER\u76F8\u5173\u73AF\u5883\u53D8\u91CF\u672A\u914D\u7F6E\uFF0C\u65E0\u6CD5\u4F7F\u7528\u5728\u7EBF\u914D\u7F6E\u529F\u80FD\uFF01"),uo=!0);var _={port:It,host:no,wsUrl:Ie,httpUrl:ye,privateHttpUrl:Zo,privateWsUrl:er,publicPath:ao,publicPathName:io,tempDir:co,redisUrl:v.env.REDIS_URL,offline:uo,configServerUrl:po,configServerEmail:lo,configServerPassword:mo,publicToken:ft,publicForceAuth:v.env.PUBLIC_FORCE_AUTH=="1",secretFile:v.env.SECRETS_FILE??"./config/.secrets.json",traceHttpRequest:v.env.TRACE_HTTP_REQUEST==="1",version:jt,npmRegistry:v.env.NPM_REGISTRY?.length?v.env.NPM_REGISTRY:"https://registry.npmjs.com",npmTimeout:parseInt(v.env.NPM_TIMEOUT??3e5),serverCompress:v.env.SERVER_COMPRESS==="1",serverCompressMinSize:v.env.SERVER_COMPRESS_MIN_SIZE?Number(v.env.SERVER_COMPRESS_MIN_SIZE):10240,serverCompressMime:(v.env.SERVER_COMPRESS_MIME??"text/plain,text/html,text/css,application/javascript,application/json").split(",")};H.warn("\u5F53\u524D\u516C\u7F51\u8BBF\u95EE\u5730\u5740\uFF1A"+_.httpUrl+" ,API TOKEN:"+_.publicToken);H.warn("\u8F6F\u4EF6\u7248\u672C "+jt);H.trace("\u5F53\u524D\u6574\u4F53\u914D\u7F6E\u4FE1\u606F\uFF1A");H.trace(_);import oe,{dirname as yr}from"node:path";import{v4 as _r}from"uuid";import{Buffer as Te}from"node:buffer";import fo from"recorder-core";var V=(l=>(l.CHAT_MESSAGE="CHAT_MESSAGE",l.LOGIN="LOGIN",l.LOGOUT="LOGOUT",l.GROUP_INFO_CHANGED="GROUP_INFO_CHANGED",l.SYSTEM="SYSTEM",l.SELF_SEND="SELF_SEND",l.FIRST_CHAT="FIRST_CHAT",l.GROUP_NEW_USER="GROUP_NEW_USER",l.ENTER_CHAT="ENTER_CHAT",l.CUSTOM="CUSTOM",l))(V||{}),P=(b=>(b.TEXT="TEXT",b.RICH_TEXT="RICH_TEXT",b.IMAGE="IMAGE",b.AUDIO="AUDIO",b.VIDEO="VIDEO",b.ARTICLE="ARTICLE",b.MUSIC="MUSIC",b.FILE="FILE",b.EMOTION="EMOTION",b.MP="MP",b.REF="REF",b.POSITION="POSITION",b.PHONE="PHONE",b.FRIEND_REQUEST="FRIEND_REQUEST",b.CONTACT_CARD="CONTACT_CARD",b.CARD="CARD",b.RECALL="RECALL",b.PAT="PAT",b.SYSTEM="SYSTEM",b.SUBSCRIBE="SUBSCRIBE",b.UNSUBSCRIBE="UNSUBSCRIBE",b.CUSTOM="CUSTOM",b))(P||{}),yt=class extends Error{},_t=class extends Error{},xt=class extends Error{};import{v4 as Gt}from"uuid";import{decodeWavFile as tr}from"wav-file-decoder";import go from"keyv";import or from"@keyv/redis";import rr from"ffmpeg-static";import Io from"fluent-ffmpeg";import{createReadStream as nr,readFileSync as sr}from"fs";import{fileTypeFromBuffer as ir,fileTypeFromStream as ar}from"file-type";import{exec as yo}from"child_process";Io.setFfmpegPath(rr);var M=y("helper"),cr=JSON.parse(await sr(_.secretFile).toString());M.trace("secrets files path:"+_.secretFile);var se=function(c,t,e,o){let r=c.byteLength,n=new ArrayBuffer(44+r),s=new DataView(n);function i(u,g,d){for(let I=0;I<d.length;I++)u.setUint8(g+I,d.charCodeAt(I))}let a=0;i(s,a,"RIFF"),a+=4,s.setUint32(a,36+r,!0),a+=4,i(s,a,"WAVE"),a+=4,i(s,a,"fmt "),a+=4,s.setUint32(a,16,!0),a+=4,s.setUint16(a,1,!0),a+=2,s.setUint16(a,o,!0),a+=2,s.setUint32(a,t,!0),a+=4,s.setUint32(a,t*o*(e/8),!0),a+=4,s.setUint16(a,o*(e/8),!0),a+=2,s.setUint16(a,e,!0),a+=2,i(s,a,"data"),a+=4,s.setUint32(a,r,!0),a+=4;function p(u,g,d){let I=new Int32Array(d);for(let f=0;f<I.length;f++,g+=4)u.setInt32(g,I[f],!0)}function l(u,g,d){let I=new Int16Array(d);for(let f=0;f<I.length;f++,g+=2)u.setInt16(g,I[f],!0)}function m(u,g,d){let I=new Int8Array(d);for(let f=0;f<I.length;f++,g++)u.setInt8(g,I[f])}return e==16?l(s,44,c):e==8?m(s,44,c):p(s,44,c),s.buffer};function _o(c){return c.replace(/[\p{Emoji_Presentation}\p{Emoji}\u200D]+/gu,"")}function xo(c){return c.replace(/(#+\s*|\*\*\s*|\*\s*|-\s*|_)/g,"").replace(/\*\*(.*?)\*\*/g,"$1").replace(/_(.*?)_/g,"$1").replace(/`(.*?)`/g,"$1").replace(/$$(.*?)$$$$.*?$$/g,"$1").trim()}function So(c){return/[\p{Emoji_Presentation}\p{Emoji}\u200D]+/gu.test(c)}function Co(c){return[/^#{1,6}\s/,/\*\*.*\*\*/,/\*.*\*/,/~~.*~~/,/`{1,3}[^`](.*?)`{1,3}/,/^```[\s\S]*?^```/m,/\[.*?\]\(.*?\)/,/!\[.*?\]\(.*?\)/,/^>\s/,/^-+\s*$/,/^(\*|\-|\+)\s/,/^\d+\.\s/].some(e=>e.test(c))}function bo(c){return`\u6807\u9898\uFF1A${c.title};\u4F5C\u8005\uFF1A${c.source};\u7F51\u5740\uFF1A${c.url}`}function Kt(c){let t="";return c.placeName?.length&&(t+=c.placeName),c.placeDetail?.length&&(t+="("+c.placeDetail+")"),c.lat!==void 0&&(t+=`\u7ECF\u5EA6${c.lon}\uFF0C\u7EAC\u5EA6${c.lat}`),t}function Z(c){let t=/\((https?:\/\/[^\s]+)\)/g,e,o=c;for(;(e=t.exec(c))!==null;){let r=e[1];o=o.replaceAll(r,` ${r} `)}return o}async function ie(c){for(let t of c)if(t.dispose){let e=await t.dispose();e?.length&&M.error(e)}}async function me(c){return new Promise((t,e)=>{fo.amr2wav(c.buffer,o=>{t(h.fromBuffer(Buffer.from(o),Gt()+".wav","binary"))},o=>{M.error(o),e(o)})})}async function te(c){let t=(await c.asBuffer()).buffer,e=tr(t),o=e.channelData[0];if(e.numberOfChannels===2){o=new Float32Array(e.channelData[0].length);for(let n=0;n<o.length;n++)o[n]=(e.channelData[0][n]+e.channelData[1][n])/2}else if(e.numberOfChannels!==1){M.warn("\u4E0D\u652F\u6301\u7684\u901A\u9053\u6570\u91CF\uFF1A"+e.numberOfChannels);return}let r=new Int16Array(o.length);for(let n=0;n<o.length;n++)o[n]<-.999999?r[n]=-32768:o[n]>.999999?r[n]=32767:r[n]=Math.round(o[n]*32767);return new Promise((n,s)=>{fo({type:"amr",sampleRate:e.sampleRate,bitRate:12.2}).mock(r,e.sampleRate).stop(async(a,p)=>{let l=h.fromBuffer(Buffer.from(await a.arrayBuffer()),Gt()+".amr");n({file:l,duration:p})},a=>{s(a)})})}function St(c){return _.redisUrl?.length?new go(new or(_.redisUrl),{namespace:c}):new go}function W(c){if(!c.startsWith("__"))return c;let t=cr[c.slice(2)];return t?.length||M.warn("\u672A\u80FD\u627E\u5230key\u4E3A"+c.slice(2)+"\u7684\u79D8\u94A5"),t}function Ct(c){return/^1[3-9]\d{9}$/.test(c)}function ae(c=16){let t="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",e="";for(let o=0;o<c;o++){let r=Math.floor(Math.random()*t.length);e+=t[r]}return e}async function pr(c,t,e,o){return new Promise(r=>{let n=Io(c);o&&(n=o(n)),n.toFormat(e).on("end",()=>{r(!0)}).on("error",s=>{M.debug(`\u4ECE${c}\u8F6C\u6362\u4E3A${e}\u5931\u8D25\uFF1A${s.message}`),r(!1)}).save(t)})}async function ke(c,t,e){return new Promise(o=>{c.asLocalPath().then(r=>{let n=r+"."+t;pr(r,n,t,e).then(s=>{if(s){let i=h.fromPath(n);o(i)}else o(void 0)})})})}function lr(c){let t=/!\[.*?\]\((.*?)\)/g,e=[],o;for(;(o=t.exec(c))!==null;)e.push(o[1]);return e}function we(c,t=!1){if(c.indexOf("![")>=0)return lr(c);if(t)return[];let e=/(?:\(|"|'|\s|^)(https?:\/\/[^\s'"()]+(?:\.[^\s'"()]+)+(?:\/[^\s'"()]+)*\.(?:jpg|jpeg|png|gif|webp)(?:\?[^\s'"()]*)?)(?:\)|"|'|\s|$)/gi,o=c.match(e);return o?o.map(r=>r.trim().replace(/^[('" ]+|['") ]+$/g,"")):[]}function vo(c){let t=/!\[.*?\]\(.*?\)/g;return c.match(t)||[]}async function ko(c,t){let e=typeof c=="string"?await ar(nr(c)):await ir(c);if(t){let o=t.lastIndexOf(".");o>0?t=t.substring(0,o)+"."+e.ext:t+="."+e.ext}else t=t??Gt()+"."+e.ext;return t}async function wo(c){let t=[];for await(let e of c)t.push(e);return Buffer.concat(t)}async function ee(c,t){let e=c.getReader(),o=new TextDecoder("utf-8"),r="",n=async()=>{let{value:s,done:i}=await e.read();if(s){let a=o.decode(s)?.trim();if(a?.length){let p=a.split(`
|
|
2
|
-
`).map(l=>l.replace("data:","").trim()).filter(l=>l.length&&!l.startsWith("event:"));if(p.length){let l=r+p[0];try{let m=JSON.parse(l);if(t(m),p.length>1){for(let u=1;u<p.length-1;u++)m=JSON.parse(p[u]),t(m);try{m=JSON.parse(p[p.length-1]),t(m)}catch{r=p[p.length-1]}}}catch{r=l}}}}i?
|
|
1
|
+
import Sr from"emittery";import Wo from"pino";import Ht from"node:process";import Vo from"emittery";var ro={level:Ht.env.LOG_LEVEL??"debug"};Ht.env.NODE_ENV==="development"&&(ro.transport={target:"pino-pretty",options:{colorize:!0}});var oo=Wo(ro),$t=class extends Vo{_levelMap={trace:0,debug:1,info:2,warn:3,error:4,fatal:5};_currentLevelVal;_currentLevel;get level(){return this._currentLevel}constructor(t){super(),this.setLevel(t??Ht.env.LOG_LEVEL??"trace")}setLevel(t){this._currentLevelVal=this._levelMap[t],this._currentLevel=t}emitString(t,e,o){this._levelMap[t]>=this._currentLevelVal&&this.emit("log",{level:t,name:e,message:o})}emitObject(t,e,o){this._levelMap[t]>=this._currentLevelVal&&this.emit("log",{level:t,name:e,message:o})}},fe=(c,t,e,o)=>{typeof e=="string"?(oo[c]("[%s] %s",t,e),o.emitString(c,t,e)):(oo[c]("[%s] %o",t,e),o.emitObject(c,t,e))},le=new $t,y=(c,t=!1)=>({trace:e=>fe("trace",c,e,le),debug:e=>fe("debug",c,e,le),info:e=>fe("info",c,e,le),warn:e=>fe("warn",c,e,le),error:e=>fe("error",c,e,le),fatal:e=>fe("fatal",c,e,le),emitter:t?le:void 0});import{createReadStream as ur,existsSync as dr,mkdirSync as gr,readFile as hr,stat as fr,writeFile as Ir}from"node:fs";import{mkdirSync as Xo}from"node:fs";import qt from"node:path";import v from"node:process";import{v4 as Jo}from"uuid";var jt="0.0.13";import{forward as Qo}from"@ngrok/ngrok";var Yo=(d=>(d.text="text",d.number="number",d.boolean="boolean",d.radio="radio",d.check="check",d.select="select",d.date="date",d.image="image",d.video="video",d.audio="audio",d.url="url",d.email="email",d.phone="phone",d.ipv4="ipv4",d))(Yo||{}),N={instanceName:{type:"string",title:"\u5B9E\u4F8BID","x-order":1e3,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u5EFA\u8BAE\u4F7F\u7528\u5BB9\u6613\u8BC6\u522B\u7684\u6807\u8BC6\uFF0C\u53EF\u4EE5\u81EA\u5DF1\u4EFB\u610F\u6307\u5B9A\uFF0C\u5168\u5C40\u5B9E\u4F8B\u4E2D\u552F\u4E00\u5373\u53EF\uFF0C\u7559\u7A7A\u4F7F\u7528\u968F\u673A\u6570\u3002"},"x-decorator-props":{tooltip:"\u53EF\u4EE5\u81EA\u5DF1\u4EFB\u610F\u6307\u5B9A\uFF0C\u5168\u5C40\u5B9E\u4F8B\u4E2D\u552F\u4E00\u5373\u53EF\u3002\u7559\u7A7A\u4F7F\u7528\u968F\u673A\u6570\u3002"}}},H=y("config"),It=Number(v.env.PORT??5050),no=String(v.env.HOST?.length?v.env.HOST:"0.0.0.0"),so=String(v.env.PRIVATE_HOST?.length?v.env.PRIVATE_HOST:no),Zo="http://"+so+":"+It,er="ws://"+so+":"+It,Ie,ye,ne=String(v.env.PUBLIC_HOST??"").trim();if(ne.length){let c=Number(v.env.PUBLIC_SSL)===1,t=80;v.env.PUBLIC_PORT?.length?t=Number(v.env.PUBLIC_PORT):c&&(t=443),ne.indexOf("$port")<0?(Ie=(c?"wss://":"ws://")+ne+":"+t,ye=(c?"https://":"http://")+ne+":"+t):(Ie=(c?"wss://":"ws://")+ne.replace("$port",t.toString()),ye=(c?"https://":"http://")+ne.replace("$port",t.toString()))}else{let c=v.env.PUBLIC_TUNNEL_NAME;c?.length||H.warn("\u672A\u914D\u7F6EPUBLIC_HOST\uFF0C\u4E14\u6CA1\u6709\u914D\u7F6EPUBLIC_TUNNEL_NAME\uFF0C\u5C06\u5C1D\u8BD5\u4F7F\u7528\u968F\u673A\u57DF\u540D\uFF01");let t=v.env.PUBLIC_TUNNEL_TOKEN;if(!t?.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 e=await Qo({addr:It,authtoken:t,domain:c}),o=e.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 n of["SIGINT","SIGTERM"])v.once(n,async()=>{H.info("close ngrok tunnel"),e.close()});ye=o;let r=o.indexOf("https")===0;ne=o.replace("https://","").replace("http://",""),Ie=(r?"wss://":"ws://")+ne,H.debug("auto generated public httpurl "+ye),H.info("\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F"),H.warn("\u5982\u679C\u4F7F\u7528\u4E86\u5BA2\u6237\u7AEF\u505A\u53EF\u89C6\u5316\u914D\u7F6E\uFF0C\u60A8\u9700\u8981\u5728\u6D4F\u89C8\u5668\u4E2D\u624B\u52A8\u6253\u5F00\u4E00\u6B21\u8BE5\u5730\u5740\uFF0C\u89E3\u9664\u514D\u8D39\u8BBF\u95EE\u9650\u5236\uFF01"),H.info("\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F\u26A0\uFE0F"),H.debug("auto generated public wsurl "+Ie)}ye?.length||H.warn("PUBLIC_HOST\u672A\u914D\u7F6E\u4E14\u672A\u80FD\u81EA\u52A8\u751F\u6210\u516C\u7F51\u5730\u5740\uFF0C\u90E8\u5206\u670D\u52A1\u53EF\u80FD\u4F1A\u5F02\u5E38\uFF01");var io=v.env.PUBLIC_PATH?.length?v.env.PUBLIC_PATH:"/public",ao=qt.resolve(qt.join("./",io));Ie.length||H.warn("WS_URL not defined,if your message source need to connect with your http posted server url ,then error may occured!");var ft=v.env.PUBLIC_TOKEN;ft?.length||(ft=Jo(),H.warn("\u5F53\u524D\u6CA1\u6709PUBLIC_TOKEN\u73AF\u5883\u53D8\u91CF\uFF0C\u5C06\u751F\u6210\u4E00\u4E2A\u968F\u673Atoken\uFF0C\u670D\u52A1\u91CD\u542F\u540E\u4F1A\u5931\u6548\uFF01"),H.warn("\u968F\u673Atoken\u4E3A\uFF1A"+ft));var co=qt.resolve(ao,"temp");Xo(co,{recursive:!0});var po=v.env.CONFIG_SERVER_URL,lo=v.env.CONFIG_SERVER_EMAIL,mo=v.env.CONFIG_SERVER_PASSWORD,uo=!!(v.env.OFFLINE??!1);(!po?.length||!mo?.length||!lo?.length)&&(H.warn("CONFIG SERVER\u76F8\u5173\u73AF\u5883\u53D8\u91CF\u672A\u914D\u7F6E\uFF0C\u65E0\u6CD5\u4F7F\u7528\u5728\u7EBF\u914D\u7F6E\u529F\u80FD\uFF01"),uo=!0);var _={port:It,host:no,wsUrl:Ie,httpUrl:ye,privateHttpUrl:Zo,privateWsUrl:er,publicPath:ao,publicPathName:io,tempDir:co,redisUrl:v.env.REDIS_URL,offline:uo,configServerUrl:po,configServerEmail:lo,configServerPassword:mo,publicToken:ft,publicForceAuth:v.env.PUBLIC_FORCE_AUTH=="1",secretFile:v.env.SECRETS_FILE??"./config/.secrets.json",traceHttpRequest:v.env.TRACE_HTTP_REQUEST==="1",version:jt,npmRegistry:v.env.NPM_REGISTRY?.length?v.env.NPM_REGISTRY:"https://registry.npmjs.com",npmTimeout:parseInt(v.env.NPM_TIMEOUT??3e5),serverCompress:v.env.SERVER_COMPRESS==="1",serverCompressMinSize:v.env.SERVER_COMPRESS_MIN_SIZE?Number(v.env.SERVER_COMPRESS_MIN_SIZE):10240,serverCompressMime:(v.env.SERVER_COMPRESS_MIME??"text/plain,text/html,text/css,application/javascript,application/json").split(",")};H.warn("\u5F53\u524D\u516C\u7F51\u8BBF\u95EE\u5730\u5740\uFF1A"+_.httpUrl+" ,API TOKEN:"+_.publicToken);H.warn("\u8F6F\u4EF6\u7248\u672C "+jt);H.trace("\u5F53\u524D\u6574\u4F53\u914D\u7F6E\u4FE1\u606F\uFF1A");H.trace(_);import oe,{dirname as yr}from"node:path";import{v4 as _r}from"uuid";import{Buffer as Te}from"node:buffer";import fo from"recorder-core";var V=(l=>(l.CHAT_MESSAGE="CHAT_MESSAGE",l.LOGIN="LOGIN",l.LOGOUT="LOGOUT",l.GROUP_INFO_CHANGED="GROUP_INFO_CHANGED",l.SYSTEM="SYSTEM",l.SELF_SEND="SELF_SEND",l.FIRST_CHAT="FIRST_CHAT",l.GROUP_NEW_USER="GROUP_NEW_USER",l.ENTER_CHAT="ENTER_CHAT",l.CUSTOM="CUSTOM",l))(V||{}),M=(b=>(b.TEXT="TEXT",b.RICH_TEXT="RICH_TEXT",b.IMAGE="IMAGE",b.AUDIO="AUDIO",b.VIDEO="VIDEO",b.ARTICLE="ARTICLE",b.MUSIC="MUSIC",b.FILE="FILE",b.EMOTION="EMOTION",b.MP="MP",b.REF="REF",b.POSITION="POSITION",b.PHONE="PHONE",b.FRIEND_REQUEST="FRIEND_REQUEST",b.CONTACT_CARD="CONTACT_CARD",b.CARD="CARD",b.RECALL="RECALL",b.PAT="PAT",b.SYSTEM="SYSTEM",b.SUBSCRIBE="SUBSCRIBE",b.UNSUBSCRIBE="UNSUBSCRIBE",b.CUSTOM="CUSTOM",b))(M||{}),yt=class extends Error{},_t=class extends Error{},xt=class extends Error{};import{v4 as Gt}from"uuid";import{decodeWavFile as tr}from"wav-file-decoder";import go from"keyv";import or from"@keyv/redis";import rr from"ffmpeg-static";import Io from"fluent-ffmpeg";import{createReadStream as nr,readFileSync as sr}from"fs";import{fileTypeFromBuffer as ir,fileTypeFromStream as ar}from"file-type";import{exec as yo}from"child_process";Io.setFfmpegPath(rr);var P=y("helper"),cr=JSON.parse(await sr(_.secretFile).toString());P.trace("secrets files path:"+_.secretFile);var se=function(c,t,e,o){let r=c.byteLength,n=new ArrayBuffer(44+r),s=new DataView(n);function i(u,g,d){for(let I=0;I<d.length;I++)u.setUint8(g+I,d.charCodeAt(I))}let a=0;i(s,a,"RIFF"),a+=4,s.setUint32(a,36+r,!0),a+=4,i(s,a,"WAVE"),a+=4,i(s,a,"fmt "),a+=4,s.setUint32(a,16,!0),a+=4,s.setUint16(a,1,!0),a+=2,s.setUint16(a,o,!0),a+=2,s.setUint32(a,t,!0),a+=4,s.setUint32(a,t*o*(e/8),!0),a+=4,s.setUint16(a,o*(e/8),!0),a+=2,s.setUint16(a,e,!0),a+=2,i(s,a,"data"),a+=4,s.setUint32(a,r,!0),a+=4;function p(u,g,d){let I=new Int32Array(d);for(let f=0;f<I.length;f++,g+=4)u.setInt32(g,I[f],!0)}function l(u,g,d){let I=new Int16Array(d);for(let f=0;f<I.length;f++,g+=2)u.setInt16(g,I[f],!0)}function m(u,g,d){let I=new Int8Array(d);for(let f=0;f<I.length;f++,g++)u.setInt8(g,I[f])}return e==16?l(s,44,c):e==8?m(s,44,c):p(s,44,c),s.buffer};function _o(c){return c.replace(/[\p{Emoji_Presentation}\p{Emoji}\u200D]+/gu,"")}function xo(c){return c.replace(/(#+\s*|\*\*\s*|\*\s*|-\s*|_)/g,"").replace(/\*\*(.*?)\*\*/g,"$1").replace(/_(.*?)_/g,"$1").replace(/`(.*?)`/g,"$1").replace(/$$(.*?)$$$$.*?$$/g,"$1").trim()}function So(c){return/[\p{Emoji_Presentation}\p{Emoji}\u200D]+/gu.test(c)}function Co(c){return[/^#{1,6}\s/,/\*\*.*\*\*/,/\*.*\*/,/~~.*~~/,/`{1,3}[^`](.*?)`{1,3}/,/^```[\s\S]*?^```/m,/\[.*?\]\(.*?\)/,/!\[.*?\]\(.*?\)/,/^>\s/,/^-+\s*$/,/^(\*|\-|\+)\s/].some(e=>e.test(c))}function bo(c){return`\u6807\u9898\uFF1A${c.title};\u4F5C\u8005\uFF1A${c.source};\u7F51\u5740\uFF1A${c.url}`}function Kt(c){let t="";return c.placeName?.length&&(t+=c.placeName),c.placeDetail?.length&&(t+="("+c.placeDetail+")"),c.lat!==void 0&&(t+=`\u7ECF\u5EA6${c.lon}\uFF0C\u7EAC\u5EA6${c.lat}`),t}function Z(c){let t=/\((https?:\/\/[^\s]+)\)/g,e,o=c;for(;(e=t.exec(c))!==null;){let r=e[1];o=o.replaceAll(r,` ${r} `)}return o}async function ie(c){for(let t of c)if(t.dispose){let e=await t.dispose();e?.length&&P.error(e)}}async function me(c){return new Promise((t,e)=>{fo.amr2wav(c.buffer,o=>{t(h.fromBuffer(Buffer.from(o),Gt()+".wav","binary"))},o=>{P.error(o),e(o)})})}async function te(c){let t=(await c.asBuffer()).buffer,e=tr(t),o=e.channelData[0];if(e.numberOfChannels===2){o=new Float32Array(e.channelData[0].length);for(let n=0;n<o.length;n++)o[n]=(e.channelData[0][n]+e.channelData[1][n])/2}else if(e.numberOfChannels!==1){P.warn("\u4E0D\u652F\u6301\u7684\u901A\u9053\u6570\u91CF\uFF1A"+e.numberOfChannels);return}let r=new Int16Array(o.length);for(let n=0;n<o.length;n++)o[n]<-.999999?r[n]=-32768:o[n]>.999999?r[n]=32767:r[n]=Math.round(o[n]*32767);return new Promise((n,s)=>{fo({type:"amr",sampleRate:e.sampleRate,bitRate:12.2}).mock(r,e.sampleRate).stop(async(a,p)=>{let l=h.fromBuffer(Buffer.from(await a.arrayBuffer()),Gt()+".amr");n({file:l,duration:p})},a=>{s(a)})})}function St(c){return _.redisUrl?.length?new go(new or(_.redisUrl),{namespace:c}):new go}function W(c){if(!c.startsWith("__"))return c;let t=cr[c.slice(2)];return t?.length||P.warn("\u672A\u80FD\u627E\u5230key\u4E3A"+c.slice(2)+"\u7684\u79D8\u94A5"),t}function Ct(c){return/^1[3-9]\d{9}$/.test(c)}function ae(c=16){let t="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",e="";for(let o=0;o<c;o++){let r=Math.floor(Math.random()*t.length);e+=t[r]}return e}async function pr(c,t,e,o){return new Promise(r=>{let n=Io(c);o&&(n=o(n)),n.toFormat(e).on("end",()=>{r(!0)}).on("error",s=>{P.debug(`\u4ECE${c}\u8F6C\u6362\u4E3A${e}\u5931\u8D25\uFF1A${s.message}`),r(!1)}).save(t)})}async function ke(c,t,e){return new Promise(o=>{c.asLocalPath().then(r=>{let n=r+"."+t;pr(r,n,t,e).then(s=>{if(s){let i=h.fromPath(n);o(i)}else o(void 0)})})})}function lr(c){let t=/!\[.*?\]\((.*?)\)/g,e=[],o;for(;(o=t.exec(c))!==null;)e.push(o[1]);return e}function we(c,t=!1){if(c.indexOf("![")>=0)return lr(c);if(t)return[];let e=/(?:\(|"|'|\s|^)(https?:\/\/[^\s'"()]+(?:\.[^\s'"()]+)+(?:\/[^\s'"()]+)*\.(?:jpg|jpeg|png|gif|webp)(?:\?[^\s'"()]*)?)(?:\)|"|'|\s|$)/gi,o=c.match(e);return o?o.map(r=>r.trim().replace(/^[('" ]+|['") ]+$/g,"")):[]}function vo(c){let t=/!\[.*?\]\(.*?\)/g;return c.match(t)||[]}async function ko(c,t){let e=typeof c=="string"?await ar(nr(c)):await ir(c);if(!e)return P.warn("\u672A\u80FD\u901A\u8FC7\u6587\u4EF6\u5185\u5BB9\u8BC6\u522BMIME\uFF0C\u5C06\u7EE7\u7EED\u4F7F\u7528\u539F\u6587\u4EF6\u540E\u7F00"),t;if(t){let o=t.lastIndexOf(".");o>0?t=t.substring(0,o)+"."+e.ext:t+="."+e.ext}else t=t??Gt()+"."+e.ext;return t}async function wo(c){let t=[];for await(let e of c)t.push(e);return Buffer.concat(t)}async function ee(c,t){let e=c.getReader(),o=new TextDecoder("utf-8"),r="",n=async()=>{let{value:s,done:i}=await e.read();if(s){let a=o.decode(s)?.trim();if(a?.length){let p=a.split(`
|
|
2
|
+
`).map(l=>l.replace("data:","").trim()).filter(l=>l.length&&!l.startsWith("event:"));if(p.length){let l=r+p[0];try{let m=JSON.parse(l);if(t(m),p.length>1){for(let u=1;u<p.length-1;u++)m=JSON.parse(p[u]),t(m);try{m=JSON.parse(p[p.length-1]),t(m)}catch{r=p[p.length-1]}}}catch{r=l}}}}i?P.debug("\u6D88\u606F\u6D41\u5173\u95ED"):await n()};return n()}async function bt(c){let t=`### ${c.title}`;for(let e of c.content)if(e.type==="text")t+=`
|
|
3
3
|
|
|
4
4
|
${e.data}
|
|
5
5
|
`;else if(e.type==="image"){let o=e.data;t+=`
|
|
6
6
|
})
|
|
7
7
|
`}else if(e.type==="file"||e.type==="video"){let o=e.data;t+=`
|
|
8
8
|
[${o.file.name}](${await o.file.asUrl()})
|
|
9
|
-
`}else e.type==="at"?t+=`@${e.data}`:M.warn("\u4E0D\u652F\u6301custom\u7C7B\u578B\u7684richtext\u8F6Cmarkdown\uFF01");return t}function To(c,t){let e=t?.options.instanceName?`[${t.options.instanceName}]`:"";return`chat message[id:${c.messageId}] from user id:${c.senderId},name:${c.senderName},nick:${c.senderInfo?.nickName} of source${e} ${c.isGroupChat?"[group id]":"[user id]"}:${c.fromId} with content:${typeof c.content=="string"?c.content:"none text content[type:"+c.type+"]"}`}function Ao(c,t){let e=t?.options.instanceName?`[${t.options.instanceName}]`:"";return`send message[id:${c.messageId}] to user(s): [${c.toInfo?.map(o=>`(id:${o.userId},name:${o.userName},nick:${o.nickName})`).join(",")}] of source${e} ${c.isGroupChat?"[group id]":"[user id]"}:${c.fromId} with content:${typeof c.content=="string"?c.content:"none text content[type:"+c.type+"]"}`}function Po(c){return{type:"formily",formily:{type:"object",properties:c}}}function ho(c,t){return t.type==="startsWith"&&!c.startsWith(t.content)||t.type==="contains"&&c.indexOf(t.content)<0?!1:t.type==="in"?t.content.indexOf(c)<0:c.match(t.content)!==null}async function Wt(c){return new Promise(t=>{setTimeout(()=>{t()},c)})}function ue(c,t){if(M.trace("check rule "+c.instanceName),(t.message.type==="TEXT"||t.message.type==="REF")&&t.message.isGroupChat&&c.respondTo){let e=!1;c.respondTo.at&&t.message.atList?.indexOf(t.me[t.source.params.fieldInAtList??"userId"])>=0&&(e=!0);let o=!1,r=((typeof t.message.content=="string"?t.message.content:t.message.content.text)??"").trim();r.length&&c.respondTo.names?.find(s=>r.startsWith(s))&&(o=!0);let n=!1;if(c.respondTo.refered&&t.message.type==="REF"&&t.message.content.refMessage?.senderId===t.me.userId&&(n=!0),!e&&!o&&!n)return M.trace("\u6CA1\u6709\u901A\u8FC7respond\u6761\u4EF6\u68C0\u67E5"),M.debug("at: "+e+";name: "+o+";content: "+n),!1}if(c.messageTypes?.length&&c.messageTypes.indexOf("ALL")<0&&c.messageTypes.indexOf(t.message.type)<0)return M.trace("\u6D88\u606F\u8FC7\u6EE4\u7C7B\u578B\u4E0D\u5339\u914D\uFF0C\u5F53\u524D"+t.message.type),!1;if(t.message.isGroupChat){let e=t.message;if(c.groupMode==="deny")return M.trace("\u5F53\u524D\u914D\u7F6E\u4E3A\u4E0D\u54CD\u5E94\u7FA4\u7EC4\u6D88\u606F"),!1;if(c.groupNameRule){let o=e.groupInfo?.nickName??e.groupInfo?.userName??e.groupInfo?.userId??e.fromId,r=ho(o,c.groupNameRule);if(c.groupMode==="blacklist"&&r)return M.trace("\u5F53\u524D\u914D\u7F6E\u4E3A\u9ED1\u540D\u5355\uFF0C\u5339\u914D\u7FA4\u7EC4\u540D"+o),!1;if(c.groupNameRule&&!r)return M.trace("\u5F53\u524D\u914D\u7F6E\u4E3A\u767D\u540D\u5355\uFF0C\u4E0D\u5339\u914D\u7FA4\u7EC4\u540D"+o),!1}}if(!t.message.isGroupChat||c.checkUserInGroup){if(c.userMode==="blacklist"&&c.fromUserNames?.length&&c.fromUserNames.indexOf(t.message.senderName??t.message.senderId)>=0)return!1;if(c.userMode!=="all"&&c.fromUserNames?.length&&c.fromUserNames.indexOf(t.message.senderName??t.message.senderId)<0)return!1}if(c.contentFilter&&c.contentFilter.content?.length&&(typeof t.message.content=="string"||typeof t.message.content.text=="string")){let e=typeof t.message.content=="string"?t.message.content:t.message.content.text;if(!ho(e,c.contentFilter))return!1}return M.debug("\u901A\u8FC7\u89C4\u5219\u68C0\u67E5"),!0}async function mr(c,t,e){e=e??"latest";let o=await fetch(`${t}/${c}/${e}`);if(o.status!==200)throw new Error(`\u540D\u4E3A ${c} \u7684\u5305\u5728npm(registry=${t})\u4E0A\u4E0D\u5B58\u5728\uFF0C\u8BF7\u68C0\u67E5\u5305\u540D\u662F\u5426\u6B63\u786E\uFF01`);let r=await o.json();if(!r.keywords?.includes("ppagent"))throw new Error(`\u540D\u4E3A ${c} \u7684\u5305\u5728npm(registry=${t})\u4E0A\u5B58\u5728\uFF0C\u4F46\u662F\u6CA1\u6709\u5305\u542Bppagent\u7684keyword\uFF0C\u8BF7\u5728package.json\u4E2D\u7684keywords\u5B57\u6BB5\u589E\u52A0ppagent\uFF01`);return new Promise((n,s)=>{let i=`pnpm add ${c}@${e} ${t?.length?"--registry="+t:""}`;M.debug("RUN "+i),yo(i,(a,p,l)=>{if(a||l&&!l.startsWith("Debug")){M.warn(String(a??l)),s(a);return}M.info(p),n(r)})})}function Mo(c){return{author:c.author,homepage:c.homepage,keywords:c.keywords?.join(","),repo:c.repository?.url?.replace(/^git\+/,""),version:c.version,name:c.name,desc:c.description}}async function Oo(c,t,e){e=e??_.npmRegistry;let o=await mr(c,e,t);return Mo(o)}async function Eo(c){let t=await import(`${c}/package.json`);if(!t){M.info("\u672A\u80FD\u627E\u5230package.json\uFF0C\u63D2\u4EF6"+c+"\u53EF\u80FD\u5DF2\u7ECF\u88AB\u5378\u8F7D\uFF01");return}return new Promise((e,o)=>{let r=`pnpm remove ${c}`;M.debug("RUN "+r),yo(r,{timeout:_.npmTimeout,windowsHide:!0},(n,s,i)=>{if(n||i&&!i.startsWith("Debug")){M.warn(String(n??i)),o(n);return}M.info(s),e(Mo(t))})})}function vt(c){let t=process.env[c];if(t){let e=Number(t);return isNaN(e)?void 0:e}}function kt(c){return(typeof c=="string"?c:c.text)?.trim()??""}var Vt=y("async-file"),h=class c{constructor(t,e){this.loader=t;this.format=e}tempDir="temp";buffer;path;localPath;base64;text;textEncoding;_name;url;_info;loaded=!1;get name(){return this._name}async load(){if(this.loaded)return;this.loaded=!0;let t=await this.loader();await this.setSource(t)}async setSource({data:t,type:e,name:o,textEncoding:r}){if(this.buffer=this.path=this.localPath=this.base64=this.text=this.url=this._name=this.textEncoding=void 0,!t||!e)throw new Error("can't initialize async file!");if(e==="buffer")this.buffer=t;else if(e==="base64")this.base64=t;else if(e==="path")this.path=t;else if(e==="text")this.text=t;else throw new Error("erro file type:"+e);this._name||(this._name=o??_r(),this._name.indexOf(".")<0&&(this._name=this._name+".dat")),this.textEncoding=r}async loadBufferFromPath(t){if(t.startsWith("http"))try{let e=await(await fetch(t)).arrayBuffer();return Te.from(e)}catch{return Vt.debug("retry to get file "+t),new Promise(e=>{setTimeout(async()=>{let o=await(await fetch(t)).arrayBuffer();e(Te.from(o))},1e3)})}return new Promise((e,o)=>{hr(t,(r,n)=>{if(r){o(r);return}e(n)})})}async saveFile(){let t;return this.format==="text"?t=await this.asText():(t=await this.asBuffer(),this._name=await ko(t,this._name)),new Promise((e,o)=>{try{let r=oe.join(_.publicPath,this.tempDir,this._name),n=yr(r);dr(n)||gr(n,{recursive:!0}),Ir(r,t,()=>{e(oe.resolve(r))})}catch(r){o(r)}})}getFormat(){return this.format}async asBuffer(){if(await this.load(),this.buffer)return this.buffer;if(this.text)this.buffer=this.textEncoding?Te.from(this.text,this.textEncoding):Te.from(this.text);else if(this.base64)this.buffer=Te.from(this.base64,"base64");else if(this.path)this.buffer=await this.loadBufferFromPath(this.path);else{Vt.warn("\u5F53\u524D\u6587\u4EF6\u65E0\u6CD5\u88AB\u52A0\u8F7D\uFF01");return}return this.buffer}async asPath(){return await this.load(),this.path?this.path:(this.path=await this.saveFile(),this.path)}async asBase64(){if(await this.load(),this.base64)return this.base64;let t=await this.asBuffer();return this.base64=t.toString("base64"),this.base64}async asText(){if(await this.load(),this.text)return this.text;let t=await this.asBuffer();if(!t){Vt.warn("load file as buffer failed!");return}return this.text=this.textEncoding?t.toString(this.textEncoding):t.toString(),this.text}async asUrl(){if(await this.load(),this.url)return this.url;let t;return this.path&&!this.path.startsWith("http")&&oe.dirname(oe.resolve(this.path))===oe.dirname(oe.join(_.publicPath,`${this.tempDir}/`))?t=oe.resolve(this.path):t=await this.saveFile(),this.url=_.httpUrl+`${_.publicPathName}/${this.tempDir}/${oe.basename(t)}`,this.url}async asLocalPath(){return await this.load(),this.localPath?this.localPath:(this.path&&!this.path.startsWith("http")?this.localPath=this.path:this.localPath=await this.saveFile(),this.localPath)}async asReadStream(){await this.load();let t=await this.asLocalPath();return ur(t)}async info(){if(this._info)return this._info;let t=await this.asLocalPath();return new Promise((e,o)=>{fr(t,(r,n)=>{r?o(r):e(n)})})}toString(){return this.name}static fromPath(t,e="binary",o,r){let n=o??oe.basename(t);n.indexOf("?")>0&&(n=n.split("?")[0]);let s=async()=>({data:t,type:"path",name:n,textEncoding:r}),i=new c(s,e);return i._name=n,i}static fromBuffer(t,e,o="binary",r){let n=async()=>({data:t,type:"buffer",name:e,textEncoding:r}),s=new c(n,o);return s._name=e,s}};import{isWav as Cr}from"silk-wasm";var wt=class c{constructor(t){this.options=t;this.options={...c.DefaultOptions,...t}}static DefaultOptions={expireInSeconds:300,maxItemsCount:30,maxWordsCount:10240};messages=[];wordsCount=0;addMessage(t,e){this.messages.length===this.options.maxItemsCount&&this.messages.shift();let o={message:t,wordsCount:0,expiresAt:new Date().getTime()+this.options.expireInSeconds*1e3};this.messages.push(o);let r=(typeof e=="string"?e:e?.text)?.trim();if(r?.length&&(this.wordsCount+=r.length,o.wordsCount=r.length,this.wordsCount>this.options.maxWordsCount))for(;this.messages.length;){let n=this.messages.shift();if(this.wordsCount-=n.wordsCount,this.wordsCount<=this.options.maxWordsCount)break}}getHistoryMessages(){let t=new Date().getTime(),e=-1;for(let o=0;o<this.messages.length;o++){let r=this.messages[o];if(r.expiresAt>t){e=o;break}else this.wordsCount-=r.wordsCount}return e>0&&(this.messages=this.messages.splice(0,e)),this.messages.map(o=>o.message)}clearHistory(){this.messages=[],this.wordsCount=0}};import xr from"emittery";var Tt=class extends xr{_queue=Promise.resolve();_logger=y("sorted-promise");add(t){let e=this._queue.then(()=>t);return this._queue=e.catch(o=>{this._logger.error(o.message)}),e}};import{v4 as zt}from"uuid";var _e=class extends Sr{constructor(e,o){super();this.app=e;this._options=o;if(!o.instanceName)throw new Error("anget\u540D\u79F0\u672A\u914D\u7F6E\uFF01");if(!o.botResponseRule)throw new Error("\u54CD\u5E94\u89C4\u5219\u672A\u914D\u7F6E\uFF01");this._logger=y(o.instanceName),this._options.checkWavAudio=this._options.checkWavAudio??!0,this._options.bufferWordsMinCount=this._options.bufferWordsMinCount??70,this._options.maxSplitCount=this._options.maxSplitCount??3,this._options.historyEnabled=this._options.historyEnabled??!0,this._options.minSendInterval=Math.max(this._options.minSendInterval??1e3,100),this._options.sendMode=this._options.sendMode??"queue",this._options.splitCharacters=this._options.splitCharacters?.length>0?this._options.splitCharacters:["\u3002","\uFF01","\uFF1F"],this._responseRule=o.botResponseRule,this._options.multiActiveChatInConversationMode=this._options.multiActiveChatInConversationMode??"pool",this._options.multiActiveChatInConversationTips=this._options.multiActiveChatInConversationTips??(this._options.multiActiveChatInConversationMode==="pool_tips"?"\u6211\u5F53\u524D\u56DE\u590D\u5B8C\u6210\u540E\u5C31\u4F1A\u56DE\u7B54\u8FD9\u4E2A\u95EE\u9898\u{1F600}\uFF01":"\u8BF7\u7B49\u6211\u4E0A\u4E00\u4E2A\u56DE\u590D\u5B8C\u6210\u540E\u518D\u63D0\u95EE\u{1F600}\uFF01"),this._options.timeoutInSeconds=this._options.timeoutInSeconds??60,this._initAgent()}static params={name:"default",desc:"\u5185\u7F6E\u6784\u5EFA\u5668",optionsSchema:{type:"formily",formily:{type:"object",properties:{...N,sourceInstanceNames:{type:"array",title:"\u76D1\u542C\u7684\u6D88\u606F\u6E90","x-decorator":"FormItem","x-component":"SourceSelector","x-decorator-props":{tooltip:"\u4ECE\u6D88\u606F\u6E90\u4E2D\u9009\u62E9\u4E00\u4E2A\u6216\u8005\u591A\u4E2A\u8FDB\u884C\u76D1\u542C\uFF0C\u4E00\u4E2A\u540E\u7AEF\u652F\u6301\u54CD\u5E94\u591A\u4E2A\u6D88\u606F\u6E90\u3002"},required:!0},botResponseRule:{type:"object",title:"\u540E\u7AEF\u6A21\u578B\u54CD\u5E94\u89C4\u5219","x-decorator":"FormItem","x-component":"MessageRule","x-component-props":{isForSkill:!1},required:!0},skillRules:{type:"array",title:"\u6280\u80FD\u89C4\u5219\u5217\u8868",items:{type:"void","x-component":"Space",properties:{input:{type:"object","x-decorator":"FormItem","x-component":"MessageRule","x-component-props":{isForSkill:!0}},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove"}}},properties:{add:{type:"void",title:"\u6DFB\u52A0\u6280\u80FD","x-component":"ArrayItems.Addition"}},"x-decorator":"FormItem","x-component":"ArrayItems","x-decorator-props":{tooltip:"\u7528\u4E8E\u6DFB\u52A0\u6280\u80FD\uFF0C\u6765\u62E6\u622A\u7528\u6237\u6D88\u606F\u6216\u8005\u57FA\u4E8E\u540E\u7AEF\u6A21\u578B\u7684\u56DE\u590D\u518D\u6B21\u52A0\u5DE5\u3002"}},splitImageFromBotText:{type:"boolean",title:"\u4ECE\u6587\u672C\u6D88\u606F\u4E2D\u63D0\u53D6\u56FE\u7247\u5355\u72EC\u53D1\u9001","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u9489\u9489\u8FD9\u7C7B\u652F\u6301\u56FE\u6587\u6DF7\u7F16\u7684\u5EFA\u8BAE\u8BBE\u7F6E\u4E3Afalse\uFF0C\u5FAE\u4FE1\u8FD9\u79CD\u4E0D\u652F\u6301\u7684\u5EFA\u8BAE\u8BBE\u7F6E\u4E3Atrue\u3002"},default:!1},removeImageAfterSplit:{type:"boolean",title:"\u62C6\u5206\u56FE\u7247\u540E\u79FB\u9664\u56FE\u7247\u94FE\u63A5","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u56FE\u7247\u62C6\u51FA\u6765\u4E4B\u540E\uFF0C\u662F\u5426\u4ECE\u539F\u6765\u7684\u56DE\u590D\u4E2D\u5220\u9664\u56FE\u7247\u94FE\u63A5\uFF0C\u4EE5\u51CF\u5C11\u6D88\u606F\u957F\u5EA6"},default:!1},bufferWordsMinCount:{type:"number",title:"\u6BCF\u6761\u56DE\u590D\u4E0D\u4F4E\u4E8E\u591A\u5C11\u5B57\uFF08\u7EA6\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:0},default:70,"x-decorator-props":{tooltip:"\u7528\u6765\u907F\u514D\u6D88\u606F\u88AB\u62C6\u7684\u8FC7\u6563\u3002\u9ED8\u8BA470\u4E2A\u5B57\u7B26\u3002\u5B9E\u9645\u8FD4\u56DE\u6570\u91CF\u4E0D\u4E00\u5B9A\u521A\u597D\u7B49\u4E8E\u8BE5\u6570\u3002\u8BE5\u7279\u6027\u4EC5\u5BF9\u4E2D\u6587\u751F\u6548\u3002\u5982\u679C\u4E0D\u5E0C\u671B\u62C6\u5206\uFF0C\u53EF\u5C06\u6B64\u503C\u8BBE\u7F6E\u4E3A0\u3002"}},maxSplitCount:{type:"number",title:"\u6700\u5927\u62C6\u5206\u6761\u6570","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:1},default:3,"x-decorator-props":{tooltip:"\u4E00\u6B21\u56DE\u590D\u6700\u591A\u88AB\u62C6\u5206\u6210\u591A\u5C11\u6761\uFF0C\u5982\u679C\u8D85\u8FC7\u4E86\uFF0C\u5219\u6700\u540E\u4E00\u6B21\u6027\u56DE\u590D\u3002\u907F\u514D\u88AB\u62C6\u5206\u7684\u592A\u96F6\u6563\uFF0C\u4E5F\u80FD\u7B26\u5408\u90E8\u5206\u5E73\u53F0\u5BF9\u56DE\u590D\u6570\u91CF\u7684\u8981\u6C42\uFF08\u5982\u516C\u4F17\u53F7\uFF0CQQ\u673A\u5668\u4EBA\uFF09\u3002"}},splitCharacters:{type:"array",title:"\u62C6\u5206\u53E5\u5B50\u7684\u6807\u8BB0",items:{type:"void","x-component":"Space",properties:{input:{type:"string","x-decorator":"FormItem","x-component":"Input"},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove"}}},properties:{add:{type:"void",title:"\u6DFB\u52A0\u5206\u9694\u6807\u8BB0\uFF08\u6BCF\u884C\u4E00\u4E2A\uFF09","x-component":"ArrayItems.Addition"}},"x-decorator":"FormItem","x-component":"ArrayItems",default:["\uFF01","\u3002","\uFF1F"],"x-decorator-props":{tooltip:'\u7528\u4E8E\u62C6\u5206\u53E5\u5B50\u7684\u6807\u8BB0\uFF0C\u9ED8\u8BA4["\uFF01","\u3002","\uFF1F"]\u3002\u5982\u679C\u7B2C\u4E00\u4E2A\u8981\u7D20\u8BBE\u7F6E\u4E3A["none"]\uFF0C\u5219\u8868\u793A\u53EA\u5173\u6CE8\u5B57\u6570\uFF0C\u4E0D\u8003\u8651\u5206\u53E5\uFF0C\u9002\u7528\u4E8E\u6D41\u5F0F\u56DE\u590D\u3002\u975E\u6D41\u5F0F\u56DE\u590D\u8BF7\u52A1\u5FC5\u8BBE\u7F6E\u5408\u7406\u503C\uFF0C\u5426\u5219\u5F02\u5E38\u7684\u65AD\u53E5\u53EF\u80FD\u5BFC\u81F4\u56FE\u7247\u65E0\u6CD5\u88AB\u8BC6\u522B\u6216\u8005\u9519\u8BEF\u8BC6\u522B\u3002'}},historyEnabled:{type:"boolean",title:"\u4F7F\u7528\u672C\u7A0B\u5E8F\u7684\u5386\u53F2\u6D88\u606F\u529F\u80FD","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:`\u5F53\u540E\u7AEF\u6A21\u677F\u6CA1\u6709\u81EA\u5E26\u5386\u53F2\u6D88\u606F\u7BA1\u7406\u65F6\uFF0C\u53EF\u4EE5\u5F00\u542Fagent\u5185\u7F6E\u7684\u5386\u53F2\u6D88\u606F\u529F\u80FD\uFF0C\u5982ChatGPT\uFF0COllama\u7B49\u7EAF\u5BF9\u8BDD\u6A21\u578B\u9700\u8981\u5F00\u542F\uFF0C\u5728\u53D1\u9001\u5230\u540E\u7AEF\u65F6\u4F1A\u5E26\u4E0A\u5386\u53F2\u6D88\u606F\u3002
|
|
9
|
+
`}else e.type==="at"?t+=`@${e.data}`:P.warn("\u4E0D\u652F\u6301custom\u7C7B\u578B\u7684richtext\u8F6Cmarkdown\uFF01");return t}function To(c,t){let e=t?.options.instanceName?`[${t.options.instanceName}]`:"";return`chat message[id:${c.messageId}] from user id:${c.senderId},name:${c.senderName},nick:${c.senderInfo?.nickName} of source${e} ${c.isGroupChat?"[group id]":"[user id]"}:${c.fromId} with content:${typeof c.content=="string"?c.content:"none text content[type:"+c.type+"]"}`}function Ao(c,t){let e=t?.options.instanceName?`[${t.options.instanceName}]`:"";return`send message[id:${c.messageId}] to user(s): [${c.toInfo?.map(o=>`(id:${o.userId},name:${o.userName},nick:${o.nickName})`).join(",")}] of source${e} ${c.isGroupChat?"[group id]":"[user id]"}:${c.fromId} with content:${typeof c.content=="string"?c.content:"none text content[type:"+c.type+"]"}`}function Po(c){return{type:"formily",formily:{type:"object",properties:c}}}function ho(c,t){return t.type==="startsWith"&&!c.startsWith(t.content)||t.type==="contains"&&c.indexOf(t.content)<0?!1:t.type==="in"?t.content.indexOf(c)<0:c.match(t.content)!==null}async function Wt(c){return new Promise(t=>{setTimeout(()=>{t()},c)})}function ue(c,t){if(P.trace("check rule "+c.instanceName),(t.message.type==="TEXT"||t.message.type==="REF")&&t.message.isGroupChat&&c.respondTo){let e=!1;c.respondTo.at&&t.message.atList?.indexOf(t.me[t.source.params.fieldInAtList??"userId"])>=0&&(e=!0);let o=!1,r=((typeof t.message.content=="string"?t.message.content:t.message.content.text)??"").trim();r.length&&c.respondTo.names?.find(s=>r.startsWith(s))&&(o=!0);let n=!1;if(c.respondTo.refered&&t.message.type==="REF"&&t.message.content.refMessage?.senderId===t.me.userId&&(n=!0),!e&&!o&&!n)return P.trace("\u6CA1\u6709\u901A\u8FC7respond\u6761\u4EF6\u68C0\u67E5"),P.debug("at: "+e+";name: "+o+";content: "+n),!1}if(c.messageTypes?.length&&c.messageTypes.indexOf("ALL")<0&&c.messageTypes.indexOf(t.message.type)<0)return P.trace("\u6D88\u606F\u8FC7\u6EE4\u7C7B\u578B\u4E0D\u5339\u914D\uFF0C\u5F53\u524D"+t.message.type),!1;if(t.message.isGroupChat){let e=t.message;if(c.groupMode==="deny")return P.trace("\u5F53\u524D\u914D\u7F6E\u4E3A\u4E0D\u54CD\u5E94\u7FA4\u7EC4\u6D88\u606F"),!1;if(c.groupNameRule){let o=e.groupInfo?.nickName??e.groupInfo?.userName??e.groupInfo?.userId??e.fromId,r=ho(o,c.groupNameRule);if(c.groupMode==="blacklist"&&r)return P.trace("\u5F53\u524D\u914D\u7F6E\u4E3A\u9ED1\u540D\u5355\uFF0C\u5339\u914D\u7FA4\u7EC4\u540D"+o),!1;if(c.groupNameRule&&!r)return P.trace("\u5F53\u524D\u914D\u7F6E\u4E3A\u767D\u540D\u5355\uFF0C\u4E0D\u5339\u914D\u7FA4\u7EC4\u540D"+o),!1}}if(!t.message.isGroupChat||c.checkUserInGroup){if(c.userMode==="blacklist"&&c.fromUserNames?.length&&c.fromUserNames.indexOf(t.message.senderName??t.message.senderId)>=0)return!1;if(c.userMode!=="all"&&c.fromUserNames?.length&&c.fromUserNames.indexOf(t.message.senderName??t.message.senderId)<0)return!1}if(c.contentFilter&&c.contentFilter.content?.length&&(typeof t.message.content=="string"||typeof t.message.content.text=="string")){let e=typeof t.message.content=="string"?t.message.content:t.message.content.text;if(!ho(e,c.contentFilter))return!1}return P.debug("\u901A\u8FC7\u89C4\u5219\u68C0\u67E5"),!0}async function mr(c,t,e){e=e??"latest";let o=await fetch(`${t}/${c}/${e}`);if(o.status!==200)throw new Error(`\u540D\u4E3A ${c} \u7684\u5305\u5728npm(registry=${t})\u4E0A\u4E0D\u5B58\u5728\uFF0C\u8BF7\u68C0\u67E5\u5305\u540D\u662F\u5426\u6B63\u786E\uFF01`);let r=await o.json();if(!r.keywords?.includes("ppagent"))throw new Error(`\u540D\u4E3A ${c} \u7684\u5305\u5728npm(registry=${t})\u4E0A\u5B58\u5728\uFF0C\u4F46\u662F\u6CA1\u6709\u5305\u542Bppagent\u7684keyword\uFF0C\u8BF7\u5728package.json\u4E2D\u7684keywords\u5B57\u6BB5\u589E\u52A0ppagent\uFF01`);return new Promise((n,s)=>{let i=`pnpm add ${c}@${e} ${t?.length?"--registry="+t:""}`;P.debug("RUN "+i),yo(i,(a,p,l)=>{if(a||l&&!l.startsWith("Debug")){P.warn(String(a??l)),s(a);return}P.info(p),n(r)})})}function Mo(c){return{author:c.author,homepage:c.homepage,keywords:c.keywords?.join(","),repo:c.repository?.url?.replace(/^git\+/,""),version:c.version,name:c.name,desc:c.description}}async function Oo(c,t,e){e=e??_.npmRegistry;let o=await mr(c,e,t);return Mo(o)}async function Eo(c){let t=await import(`${c}/package.json`);if(!t){P.info("\u672A\u80FD\u627E\u5230package.json\uFF0C\u63D2\u4EF6"+c+"\u53EF\u80FD\u5DF2\u7ECF\u88AB\u5378\u8F7D\uFF01");return}return new Promise((e,o)=>{let r=`pnpm remove ${c}`;P.debug("RUN "+r),yo(r,{timeout:_.npmTimeout,windowsHide:!0},(n,s,i)=>{if(n||i&&!i.startsWith("Debug")){P.warn(String(n??i)),o(n);return}P.info(s),e(Mo(t))})})}function vt(c){let t=process.env[c];if(t){let e=Number(t);return isNaN(e)?void 0:e}}function kt(c){return(typeof c=="string"?c:c.text)?.trim()??""}var Vt=y("async-file"),h=class c{constructor(t,e){this.loader=t;this.format=e}tempDir="temp";buffer;path;localPath;base64;text;textEncoding;_name;url;_info;loaded=!1;get name(){return this._name}async load(){if(this.loaded)return;this.loaded=!0;let t=await this.loader();await this.setSource(t)}async setSource({data:t,type:e,name:o,textEncoding:r}){if(this.buffer=this.path=this.localPath=this.base64=this.text=this.url=this._name=this.textEncoding=void 0,!t||!e)throw new Error("can't initialize async file!");if(e==="buffer")this.buffer=t;else if(e==="base64")this.base64=t;else if(e==="path")this.path=t;else if(e==="text")this.text=t;else throw new Error("erro file type:"+e);this._name||(this._name=o??_r(),this._name.indexOf(".")<0&&(this._name=this._name+".dat")),this.textEncoding=r}async loadBufferFromPath(t){if(t.startsWith("http"))try{let e=await(await fetch(t)).arrayBuffer();return Te.from(e)}catch{return Vt.debug("retry to get file "+t),new Promise(e=>{setTimeout(async()=>{let o=await(await fetch(t)).arrayBuffer();e(Te.from(o))},1e3)})}return new Promise((e,o)=>{hr(t,(r,n)=>{if(r){o(r);return}e(n)})})}async saveFile(){let t;return this.format==="text"?t=await this.asText():(t=await this.asBuffer(),this._name=await ko(t,this._name)),new Promise((e,o)=>{try{let r=oe.join(_.publicPath,this.tempDir,this._name),n=yr(r);dr(n)||gr(n,{recursive:!0}),Ir(r,t,()=>{e(oe.resolve(r))})}catch(r){o(r)}})}getFormat(){return this.format}async asBuffer(){if(await this.load(),this.buffer)return this.buffer;if(this.text)this.buffer=this.textEncoding?Te.from(this.text,this.textEncoding):Te.from(this.text);else if(this.base64)this.buffer=Te.from(this.base64,"base64");else if(this.path)this.buffer=await this.loadBufferFromPath(this.path);else{Vt.warn("\u5F53\u524D\u6587\u4EF6\u65E0\u6CD5\u88AB\u52A0\u8F7D\uFF01");return}return this.buffer}async asPath(){return await this.load(),this.path?this.path:(this.path=await this.saveFile(),this.path)}async asBase64(){if(await this.load(),this.base64)return this.base64;let t=await this.asBuffer();return this.base64=t.toString("base64"),this.base64}async asText(){if(await this.load(),this.text)return this.text;let t=await this.asBuffer();if(!t){Vt.warn("load file as buffer failed!");return}return this.text=this.textEncoding?t.toString(this.textEncoding):t.toString(),this.text}async asUrl(){if(await this.load(),this.url)return this.url;let t;return this.path&&!this.path.startsWith("http")&&oe.dirname(oe.resolve(this.path))===oe.dirname(oe.join(_.publicPath,`${this.tempDir}/`))?t=oe.resolve(this.path):t=await this.saveFile(),this.url=_.httpUrl+`${_.publicPathName}/${this.tempDir}/${oe.basename(t)}`,this.url}async asLocalPath(){return await this.load(),this.localPath?this.localPath:(this.path&&!this.path.startsWith("http")?this.localPath=this.path:this.localPath=await this.saveFile(),this.localPath)}async asReadStream(){await this.load();let t=await this.asLocalPath();return ur(t)}async info(){if(this._info)return this._info;let t=await this.asLocalPath();return new Promise((e,o)=>{fr(t,(r,n)=>{r?o(r):e(n)})})}toString(){return this.name}static fromPath(t,e="binary",o,r){let n=o??oe.basename(t);n.indexOf("?")>0&&(n=n.split("?")[0]);let s=async()=>({data:t,type:"path",name:n,textEncoding:r}),i=new c(s,e);return i._name=n,i}static fromBuffer(t,e,o="binary",r){let n=async()=>({data:t,type:"buffer",name:e,textEncoding:r}),s=new c(n,o);return s._name=e,s}};import{isWav as Cr}from"silk-wasm";var wt=class c{constructor(t){this.options=t;this.options={...c.DefaultOptions,...t}}static DefaultOptions={expireInSeconds:300,maxItemsCount:30,maxWordsCount:10240};messages=[];wordsCount=0;addMessage(t,e){this.messages.length===this.options.maxItemsCount&&this.messages.shift();let o={message:t,wordsCount:0,expiresAt:new Date().getTime()+this.options.expireInSeconds*1e3};this.messages.push(o);let r=(typeof e=="string"?e:e?.text)?.trim();if(r?.length&&(this.wordsCount+=r.length,o.wordsCount=r.length,this.wordsCount>this.options.maxWordsCount))for(;this.messages.length;){let n=this.messages.shift();if(this.wordsCount-=n.wordsCount,this.wordsCount<=this.options.maxWordsCount)break}}getHistoryMessages(){let t=new Date().getTime(),e=-1;for(let o=0;o<this.messages.length;o++){let r=this.messages[o];if(r.expiresAt>t){e=o;break}else this.wordsCount-=r.wordsCount}return e>0&&(this.messages=this.messages.splice(0,e)),this.messages.map(o=>o.message)}clearHistory(){this.messages=[],this.wordsCount=0}};import xr from"emittery";var Tt=class extends xr{_queue=Promise.resolve();_logger=y("sorted-promise");add(t){let e=this._queue.then(()=>t);return this._queue=e.catch(o=>{this._logger.error(o.message)}),e}};import{v4 as zt}from"uuid";var _e=class extends Sr{constructor(e,o){super();this.app=e;this._options=o;if(!o.instanceName)throw new Error("anget\u540D\u79F0\u672A\u914D\u7F6E\uFF01");if(!o.botResponseRule)throw new Error("\u54CD\u5E94\u89C4\u5219\u672A\u914D\u7F6E\uFF01");this._logger=y(o.instanceName),this._options.checkWavAudio=this._options.checkWavAudio??!0,this._options.bufferWordsMinCount=this._options.bufferWordsMinCount??70,this._options.maxSplitCount=this._options.maxSplitCount??3,this._options.historyEnabled=this._options.historyEnabled??!0,this._options.minSendInterval=Math.max(this._options.minSendInterval??1e3,100),this._options.sendMode=this._options.sendMode??"queue",this._options.splitCharacters=this._options.splitCharacters?.length>0?this._options.splitCharacters:["\u3002","\uFF01","\uFF1F"],this._responseRule=o.botResponseRule,this._options.multiActiveChatInConversationMode=this._options.multiActiveChatInConversationMode??"pool",this._options.multiActiveChatInConversationTips=this._options.multiActiveChatInConversationTips??(this._options.multiActiveChatInConversationMode==="pool_tips"?"\u6211\u5F53\u524D\u56DE\u590D\u5B8C\u6210\u540E\u5C31\u4F1A\u56DE\u7B54\u8FD9\u4E2A\u95EE\u9898\u{1F600}\uFF01":"\u8BF7\u7B49\u6211\u4E0A\u4E00\u4E2A\u56DE\u590D\u5B8C\u6210\u540E\u518D\u63D0\u95EE\u{1F600}\uFF01"),this._options.timeoutInSeconds=this._options.timeoutInSeconds??60,this._initAgent()}static params={name:"default",desc:"\u5185\u7F6E\u6784\u5EFA\u5668",optionsSchema:{type:"formily",formily:{type:"object",properties:{...N,sourceInstanceNames:{type:"array",title:"\u76D1\u542C\u7684\u6D88\u606F\u6E90","x-decorator":"FormItem","x-component":"SourceSelector","x-decorator-props":{tooltip:"\u4ECE\u6D88\u606F\u6E90\u4E2D\u9009\u62E9\u4E00\u4E2A\u6216\u8005\u591A\u4E2A\u8FDB\u884C\u76D1\u542C\uFF0C\u4E00\u4E2A\u540E\u7AEF\u652F\u6301\u54CD\u5E94\u591A\u4E2A\u6D88\u606F\u6E90\u3002"},required:!0},botResponseRule:{type:"object",title:"\u540E\u7AEF\u6A21\u578B\u54CD\u5E94\u89C4\u5219","x-decorator":"FormItem","x-component":"MessageRule","x-component-props":{isForSkill:!1},required:!0},skillRules:{type:"array",title:"\u6280\u80FD\u89C4\u5219\u5217\u8868",items:{type:"void","x-component":"Space",properties:{input:{type:"object","x-decorator":"FormItem","x-component":"MessageRule","x-component-props":{isForSkill:!0}},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove"}}},properties:{add:{type:"void",title:"\u6DFB\u52A0\u6280\u80FD","x-component":"ArrayItems.Addition"}},"x-decorator":"FormItem","x-component":"ArrayItems","x-decorator-props":{tooltip:"\u7528\u4E8E\u6DFB\u52A0\u6280\u80FD\uFF0C\u6765\u62E6\u622A\u7528\u6237\u6D88\u606F\u6216\u8005\u57FA\u4E8E\u540E\u7AEF\u6A21\u578B\u7684\u56DE\u590D\u518D\u6B21\u52A0\u5DE5\u3002"}},splitImageFromBotText:{type:"boolean",title:"\u4ECE\u6587\u672C\u6D88\u606F\u4E2D\u63D0\u53D6\u56FE\u7247\u5355\u72EC\u53D1\u9001","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u9489\u9489\u8FD9\u7C7B\u652F\u6301\u56FE\u6587\u6DF7\u7F16\u7684\u5EFA\u8BAE\u8BBE\u7F6E\u4E3Afalse\uFF0C\u5FAE\u4FE1\u8FD9\u79CD\u4E0D\u652F\u6301\u7684\u5EFA\u8BAE\u8BBE\u7F6E\u4E3Atrue\u3002"},default:!1},removeImageAfterSplit:{type:"boolean",title:"\u62C6\u5206\u56FE\u7247\u540E\u79FB\u9664\u56FE\u7247\u94FE\u63A5","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u56FE\u7247\u62C6\u51FA\u6765\u4E4B\u540E\uFF0C\u662F\u5426\u4ECE\u539F\u6765\u7684\u56DE\u590D\u4E2D\u5220\u9664\u56FE\u7247\u94FE\u63A5\uFF0C\u4EE5\u51CF\u5C11\u6D88\u606F\u957F\u5EA6"},default:!1},bufferWordsMinCount:{type:"number",title:"\u6BCF\u6761\u56DE\u590D\u4E0D\u4F4E\u4E8E\u591A\u5C11\u5B57\uFF08\u7EA6\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:0},default:70,"x-decorator-props":{tooltip:"\u7528\u6765\u907F\u514D\u6D88\u606F\u88AB\u62C6\u7684\u8FC7\u6563\u3002\u9ED8\u8BA470\u4E2A\u5B57\u7B26\u3002\u5B9E\u9645\u8FD4\u56DE\u6570\u91CF\u4E0D\u4E00\u5B9A\u521A\u597D\u7B49\u4E8E\u8BE5\u6570\u3002\u8BE5\u7279\u6027\u4EC5\u5BF9\u4E2D\u6587\u751F\u6548\u3002\u5982\u679C\u4E0D\u5E0C\u671B\u62C6\u5206\uFF0C\u53EF\u5C06\u6B64\u503C\u8BBE\u7F6E\u4E3A0\u3002"}},maxSplitCount:{type:"number",title:"\u6700\u5927\u62C6\u5206\u6761\u6570","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:1},default:3,"x-decorator-props":{tooltip:"\u4E00\u6B21\u56DE\u590D\u6700\u591A\u88AB\u62C6\u5206\u6210\u591A\u5C11\u6761\uFF0C\u5982\u679C\u8D85\u8FC7\u4E86\uFF0C\u5219\u6700\u540E\u4E00\u6B21\u6027\u56DE\u590D\u3002\u907F\u514D\u88AB\u62C6\u5206\u7684\u592A\u96F6\u6563\uFF0C\u4E5F\u80FD\u7B26\u5408\u90E8\u5206\u5E73\u53F0\u5BF9\u56DE\u590D\u6570\u91CF\u7684\u8981\u6C42\uFF08\u5982\u516C\u4F17\u53F7\uFF0CQQ\u673A\u5668\u4EBA\uFF09\u3002"}},splitCharacters:{type:"array",title:"\u62C6\u5206\u53E5\u5B50\u7684\u6807\u8BB0",items:{type:"void","x-component":"Space",properties:{input:{type:"string","x-decorator":"FormItem","x-component":"Input"},remove:{type:"void","x-decorator":"FormItem","x-component":"ArrayItems.Remove"}}},properties:{add:{type:"void",title:"\u6DFB\u52A0\u5206\u9694\u6807\u8BB0\uFF08\u6BCF\u884C\u4E00\u4E2A\uFF09","x-component":"ArrayItems.Addition"}},"x-decorator":"FormItem","x-component":"ArrayItems",default:["\uFF01","\u3002","\uFF1F"],"x-decorator-props":{tooltip:'\u7528\u4E8E\u62C6\u5206\u53E5\u5B50\u7684\u6807\u8BB0\uFF0C\u9ED8\u8BA4["\uFF01","\u3002","\uFF1F"]\u3002\u5982\u679C\u7B2C\u4E00\u4E2A\u8981\u7D20\u8BBE\u7F6E\u4E3A["none"]\uFF0C\u5219\u8868\u793A\u53EA\u5173\u6CE8\u5B57\u6570\uFF0C\u4E0D\u8003\u8651\u5206\u53E5\uFF0C\u9002\u7528\u4E8E\u6D41\u5F0F\u56DE\u590D\u3002\u975E\u6D41\u5F0F\u56DE\u590D\u8BF7\u52A1\u5FC5\u8BBE\u7F6E\u5408\u7406\u503C\uFF0C\u5426\u5219\u5F02\u5E38\u7684\u65AD\u53E5\u53EF\u80FD\u5BFC\u81F4\u56FE\u7247\u65E0\u6CD5\u88AB\u8BC6\u522B\u6216\u8005\u9519\u8BEF\u8BC6\u522B\u3002'}},historyEnabled:{type:"boolean",title:"\u4F7F\u7528\u672C\u7A0B\u5E8F\u7684\u5386\u53F2\u6D88\u606F\u529F\u80FD","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:`\u5F53\u540E\u7AEF\u6A21\u677F\u6CA1\u6709\u81EA\u5E26\u5386\u53F2\u6D88\u606F\u7BA1\u7406\u65F6\uFF0C\u53EF\u4EE5\u5F00\u542Fagent\u5185\u7F6E\u7684\u5386\u53F2\u6D88\u606F\u529F\u80FD\uFF0C\u5982ChatGPT\uFF0COllama\u7B49\u7EAF\u5BF9\u8BDD\u6A21\u578B\u9700\u8981\u5F00\u542F\uFF0C\u5728\u53D1\u9001\u5230\u540E\u7AEF\u65F6\u4F1A\u5E26\u4E0A\u5386\u53F2\u6D88\u606F\u3002
|
|
10
10
|
\u5982\u679C\u540E\u7AEF\u58F0\u660E\u4E86\u81EA\u5E26\u5386\u53F2\u6D88\u606F\u7BA1\u7406\uFF08\u5982dify\uFF0Ccoze\u7B49\uFF09\uFF0C\u5219\u6B64\u529F\u80FD\u5931\u6548\uFF0C\u6B64\u65F6\u65E0\u9700\u5F00\u542F\uFF0C\u5426\u5219\u4F1A\u6D6A\u8D39\u5185\u5B58\u3002`}},historyOptions:{type:"object",title:"\u5386\u53F2\u6D88\u606F\u5B58\u50A8\u914D\u7F6E","x-decorator":"FormItem",properties:{expireInSeconds:{type:"number",title:"\u8D85\u65F6\u65F6\u95F4\uFF08\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:60},default:300,"x-decorator-props":{tooltip:"\u5386\u53F2\u6D88\u606F\u5B58\u50A8\u591A\u4E45\u4F1A\u5931\u6548\uFF0C\u9ED8\u8BA4300\u79D2\u3002"}},maxWordsCount:{type:"number",title:"\u6700\u591A\u5B58\u50A8\u591A\u5C11\u4E2A\u5B57\u7B26","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:60},default:10240,"x-decorator-props":{tooltip:"\u5386\u53F2\u6D88\u606F\u5B58\u50A8\u591A\u4E45\u4F1A\u5931\u6548\uFF0C\u9ED8\u8BA4300\u79D2\u3002\u4EC5\u5BF9\u6587\u672C\u7C7B\u6D88\u606F\u6709\u6548\u3002"}},maxItemsCount:{type:"number",title:"\u6700\u591A\u5B58\u50A8\u591A\u5C11\u6761\u8BB0\u5F55\uFF08\u5355\u4E2A\u5BF9\u8BDD\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:3},default:30,"x-decorator-props":{tooltip:"\u8D85\u8FC7\u7684\u8BB0\u5F55\u4F1A\u88AB\u8986\u76D6\uFF0C\u9ED8\u8BA430\u6761\u3002\u540C\u4E00\u4E2A\u7FA4\u91CC\u9762\u7684\u804A\u5929\u89C6\u4E3A\u5355\u4E2A\u5BF9\u8BDD\u3002"}}}},sendMode:{type:"string",enum:[{label:"\u76F4\u63A5\u53D1\u9001",value:"now"},{label:"\u6392\u961F\u53D1\u9001\uFF08\u63A8\u8350\uFF09",value:"queue"}],title:"\u53D1\u9001\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select",default:"queue","x-decorator-props":{tooltip:"\u53D1\u9001\u6A21\u5F0F\uFF0Cnow\u662F\u6240\u6709\u6D88\u606F\u90FD\u9ED8\u8BA4\u7ACB\u5373\u53D1\u9001\uFF08\u5F53\u4F7F\u7528\u6280\u80FD\u65F6\uFF0C\u4E0D\u540C\u6587\u5B57\u5904\u7406\u7684\u987A\u5E8F\u53EF\u80FD\u4E0D\u540C\uFF0C\u6709\u53EF\u80FD\u5BFC\u81F4\u56DE\u590D\u4E71\u5E8F\uFF0C\u5EFA\u8BAE\u4F7F\u7528\u6392\u961F\u53D1\u9001\uFF09\uFF0Cqueue\u662F\u52A0\u5165\u53D1\u9001\u961F\u5217\uFF0C\u786E\u4FDD\u6309\u7167\u540E\u7AEF\u8F93\u51FA\u987A\u5E8F\u8FDB\u884C\u56DE\u590D\uFF0C\u540C\u65F6\u53EF\u4EE5\u901A\u8FC7\u8BBE\u7F6E\u961F\u5217\u95F4\u9694\u6765\u63A7\u5236\u53D1\u9001\u901F\u5EA6\uFF0C\u907F\u514D\u89E6\u53D1\u98CE\u63A7\u3002"}},minSendInterval:{type:"number",title:"\u6700\u5C0F\u53D1\u9001\u65F6\u95F4\u95F4\u9694\uFF08\u6BEB\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:0},default:1e3,"x-decorator-props":{tooltip:"\u6700\u5C0F\u53D1\u9001\u65F6\u95F4\u95F4\u9694\uFF0C\u5355\u4F4D\u662F\u6BEB\u79D2\u3002\u9632\u6B62\u53D1\u9001\u8FC7\u5FEB\u88AB\u8BC6\u522B\u4E3A\u5783\u573E\u6D88\u606F\u3002\u9ED8\u8BA4\u4E3A1000\u3002\u9700\u8981\u53D1\u9001\u6A21\u5F0F\u4E3A\u961F\u5217\uFF08queue\uFF09"}},timeoutInSeconds:{type:"number",title:"\u4F1A\u8BDD\u8D85\u65F6\u65F6\u95F4\uFF08\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:20,max:3600},default:60,"x-decorator-props":{tooltip:"\u5355\u4E2A\u4F1A\u8BDD\uFF08\u63D0\u95EE\uFF09\u7B49\u5F85\u7684\u6700\u957F\u65F6\u95F4\uFF0C\u9ED8\u8BA460\u79D2\u3002\u7531\u4E8E\u5927\u90E8\u5206\u667A\u80FD\u4F53\u4E3A\u4E86\u7EF4\u6301\u8FDE\u7EED\u4E0A\u4E0B\u6587\uFF0C\u4E0D\u652F\u6301\u5728\u540C\u4E00\u4E2A\u4E0A\u4E0B\u6587\u4E2D\u540C\u65F6\u6FC0\u6D3B\u591A\u4E2A\u5BF9\u8BDD\uFF0C\u56E0\u6B64\u7CFB\u7EDF\u5728\u51FA\u73B0\u540C\u4E00\u4E2A\u7528\u6237\uFF08\u7FA4\u7EC4\uFF09\u5728\u4E0A\u4E00\u4E2A\u95EE\u9898\u672A\u5B8C\u6210\u7EE7\u7EED\u63D0\u95EE\u65F6\uFF0C\u4F1A\u52A0\u5165\u961F\u5217\u7B49\u5F85\u3002\u8D85\u65F6\u540E\u5C06\u4E0D\u518D\u7B49\u5F85\uFF0C\u76F4\u63A5\u6267\u884C\u4E0B\u4E00\u4E2A\u63D0\u95EE\u3002"}},checkWavAudio:{type:"boolean",title:"\u68C0\u6D4B\u56DE\u590D\u7684\u97F3\u9891\u4E3Awav\u683C\u5F0F","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},default:!0,"x-decorator-props":{tooltip:"wav\u662F\u7CFB\u7EDF\u5185\u90E8\u9ED8\u8BA4\u7684\u8BED\u97F3\u683C\u5F0F\uFF0C\u5EFA\u8BAE\u5F00\u542F\uFF0C\u907F\u514D\u540E\u7AEF\u5904\u7406\u65F6\u629B\u51FA\u5F02\u5E38\u3002\u5982\u679C\u6CA1\u6709\u4F7F\u7528\u8BED\u97F3\u6280\u80FD\u53EF\u4EE5\u5173\u95ED\uFF0C\u5F00\u542F\u4E5F\u4E0D\u5F71\u54CD\u6027\u80FD\u3002"}},fallbackAnswer:{type:"string",title:"\u515C\u5E95\u56DE\u590D","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u515C\u5E95\u56DE\u590D\u5185\u5BB9"},"x-decorator-props":{tooltip:"\u5F53\u5339\u914D\u5230\u89C4\u5219\uFF0C\u4F46\u662Fbot\u65E0\u6CD5\u56DE\u590D\u7684\u65F6\u5019\u89E6\u53D1\u8BE5\u56DE\u590D\u3002\u5982\u679C\u4E0D\u8BBE\u7F6E\uFF0C\u5219\u4E0D\u56DE\u590D\u3002\u5982\u679C\u6D88\u606F\u88AB\u6280\u80FD\u53D6\u6D88\u56DE\u590D\uFF0C\u4E0D\u4F1A\u89E6\u53D1\u8BE5\u56DE\u590D\u3002"},default:"\u{1F979}\uFF0C\u6211\u8FD8\u4E0D\u652F\u6301\u8FD9\u4E2A\u6D88\u606F\u7C7B\u578B\u5462\uFF01"},multiActiveChatInConversationMode:{type:"string",enum:[{label:"\u6392\u961F\u5904\u7406\uFF0C\u4E0D\u63D0\u9192",value:"pool"},{label:"\u63D0\u9192\u540E\u76F4\u63A5\u8FD4\u56DE\uFF0C\u4E0D\u5904\u7406",value:"tips"},{label:"\u63D0\u9192\u540E\u6392\u961F\u5904\u7406",value:"pool_tips"}],title:"\u591A\u6D3B\u8DC3\u4F1A\u8BDD\u5904\u7406\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select",default:"pool_tips","x-decorator-props":{tooltip:"\u5982\u679C\u4E00\u4E2A\u7528\u6237\u540C\u65F6\u5728\u4E00\u4E2Abot\u8FD8\u6CA1\u6709\u56DE\u7B54\u7ED3\u675F\u65F6\u53C8\u63D0\u95EE\uFF0C\u4E14bot\u4E0D\u652F\u6301\u4E00\u4E2A\u4F1A\u8BDD\u4E2D\u591A\u4E2A\u6D3B\u8DC3\u5BF9\u8BDD\u65F6\uFF08\u57FA\u672C\u90FD\u4E0D\u652F\u6301\uFF0C\u5982dify\uFF0Ccoze\uFF09\uFF0C\u8981\u91C7\u53D6\u7684\u63AA\u65BD\uFF0Cpool\u662F\u76F4\u63A5\u653E\u5165\u7B49\u5F85\u533A\uFF0C\u7B49\u4E0A\u4E00\u8F6E\u56DE\u590D\u7ED3\u675F\u540E\u7EE7\u7EED\u5904\u7406\uFF0C\u4E0D\u8F93\u51FA\u63D0\u793A\uFF1Btips\u662F\u7ED9\u51FA\u63D0\u793A\u4E0D\u63D0\u4EA4\u5230\u540E\u7AEF\u76F4\u63A5\u8FD4\u56DE\uFF1Bpool_tips\u662F\u653E\u5165\u7B49\u5F85\u533A\u4E14\u7ED9\u51FA\u63D0\u793A\u3002"}},multiActiveChatInConversationTips:{type:"string",title:"\u591A\u6D3B\u8DC3\u4F1A\u8BDD\u63D0\u793A\u8BCD","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u591A\u6D3B\u8DC3\u4F1A\u8BDD\u63D0\u793A\u8BCD\uFF08\u4E0D\u6E05\u695A\u8BF7\u7559\u7A7A\uFF09"},"x-decorator-props":{tooltip:"\u51FA\u73B0\u591A\u4E2A\u6D3B\u8DC3\u5BF9\u8BDD\u65F6\uFF0C\u8F93\u51FA\u7684\u56DE\u590D\u3002\u5F53\u591A\u6D3B\u8DC3\u4F1A\u8BDD\u6A21\u5F0F\u914D\u7F6E\u4E3A\u53D1\u9001\u63D0\u793A\u65F6\uFF08tips\u6216\u8005pool_tips\uFF09\u624D\u4F1A\u751F\u6548\u3002"},default:""},sendErrorLog:{type:"boolean",title:"\u53D1\u9001\u5F02\u5E38\u65E5\u5FD7\u5230\u5BA2\u6237\u7AEF","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},default:!1,"x-decorator-props":{tooltip:"\u662F\u5426\u53D1\u9001\u6D88\u606F\u5904\u7406\u5F02\u5E38\u7684\u65E5\u5FD7\u5230\u5BA2\u6237\u7AEF\uFF0C\u9ED8\u8BA4false"}}}}}};_initialized=!1;_logger;_responseRule;_skillRules;_textEndId=zt();_historyManagers={};_sendMessagePool=new Map;_sourceMessagePool=new Map;get options(){return this._options}get name(){return this._options.instanceName}async sendMessage(e,o,r=!1,n){if(this._options.sendMode==="queue"&&!r){let a=this._sendMessagePool.size===0,p=o.options.instanceName;this._sendMessagePool.has(p)||this._sendMessagePool.set(p,[]),this._sendMessagePool.get(p).push({message:e,to:o,fromMessage:n}),a&&setTimeout(()=>{this._sendFromPool()},this._options.minSendInterval);return}if(e.type==="AUDIO"){this._logger.trace("audio message,check format");let a=e.content.file;if(this._options.checkWavAudio&&!Cr(await a.asBuffer()))return this._logger.warn("\u97F3\u9891\u683C\u5F0F\u9519\u8BEF\uFF01\u505C\u6B62\u6D88\u606F\u53D1\u9001\uFF01"),"\u97F3\u9891\u683C\u5F0F\u9519\u8BEF\uFF01\u505C\u6B62\u6D88\u606F\u53D1\u9001\uFF01"}if(e.type==="TEXT"&&e.content===this._textEndId){o.afterSend(n);return}let s=[];if(e.type==="TEXT"&&this._options.splitImageFromBotText){let a=e.content,p=we(a);if(p?.length)for(let l of p){let m={...e},u={file:h.fromPath(l,"binary",zt()+".png")};m.content=u,m.type="IMAGE",s.push(o.sendMessage(m,n)),this._options.removeImageAfterSplit&&(e.content=a.replace(l,"[\u56FE\u7247\u7A0D\u540E\u53D1\u9001]")),this._logger.trace("image extracted from url:"+l)}}let i=await o.sendMessage(e,n);return await Promise.allSettled(s),this._logger.debug(`message sent to ${e.toInfo[0].nickName??e.toInfo[0].userId} with channel ${o.options.instanceName}`),this._logger.trace(Ao(e,o)),i}async dispose(){for(let e of this._options.sourceInstanceNames){let o=this.app.sourceManager.getInstance(e);o&&(o.event.off("CHAT_MESSAGE",this.processChatMessage),o.event.off("SELF_SEND",this.onSelfChatMessage))}}processChatMessage=async e=>{this._logger.trace("message received"),this._logger.trace(To(e.message,e.source));let o,r;try{if(!ue(this._responseRule,e)){this._logger.debug("\u5F53\u524D\u6D88\u606F\u4E0D\u5728"+this._options.instanceName+"\u56DE\u590D\u7684\u6761\u4EF6\u5185");return}let n=this.app.botManager.getInstance(this._responseRule.instanceName);if(!n){this._logger.warn("\u540D\u4E3A"+this._responseRule.instanceName+"\u7684\u673A\u5668\u4EBA\u5B9E\u4F8B\u4E0D\u5B58\u5728\uFF01");return}if(o=this._wrapEventWithChatReply(e),r=o.source.options.instanceName+"-"+o.message.fromId,!n.params.allowMultiActiveChat)if(this._sourceMessagePool.get(r)?.busy){if(this._options.multiActiveChatInConversationMode==="tips"){o.reply(this._options.multiActiveChatInConversationTips,"TEXT",void 0,!0),this._logger.debug("\u540C\u4E00\u4E2A\u540E\u7AEF\u670D\u52A1\u4E0D\u5141\u8BB8\u591A\u4E2A\u6D3B\u52A8\u4E2D\u7684\u5BF9\u8BDD\uFF0C\u8FD4\u56DEtips\uFF1A"+this._options.multiActiveChatInConversationTips);return}this._sourceMessagePool.get(r).pool.push(o),this._options.multiActiveChatInConversationMode==="pool_tips"&&o.reply(this._options.multiActiveChatInConversationTips,"TEXT",void 0,!0),this._logger.debug("\u5F53\u524D\u7528\u6237\u5B58\u5728\u6B63\u5728\u6267\u884C\u7684\u4F1A\u8BDD\uFF0C\u653E\u5165\u7B49\u5F85\u533A\uFF0C\u5F85\u6267\u884C\u5B8C\u540E\u7EE7\u7EED\uFF01");return}else this._sourceMessagePool.set(r,{busy:!0,pool:[]});let s=!1,i=setTimeout(()=>{s=!0,this._logger.debug("\u5F53\u524D\u7528\u6237\u63D0\u95EE\u6267\u884C\u8D85\u8FC7"+this._options.timeoutInSeconds+"\u79D2\uFF0C\u7EE7\u7EED\u6267\u884C\u4E0B\u4E00\u4E2A\uFF01"),this._nextQuestion(r)},this._options.timeoutInSeconds*1e3);if(await this.onChatMessage(o),s){this._logger.debug("\u5F53\u524D\u7528\u6237\u63D0\u95EE\u6267\u884C\u8D85\u8FC7"+this._options.timeoutInSeconds+"\u79D2\uFF0C\u4E0B\u4E00\u4E2A\u4EFB\u52A1\u5DF2\u88AB\u63D0\u524D\u6267\u884C\uFF0C\u76F4\u63A5\u8FD4\u56DE\uFF01");return}clearTimeout(i),this._logger.debug("\u5F53\u524D\u7528\u6237\u63D0\u95EE\u6267\u884C\u5B8C\u6210"),this._nextQuestion(r)}catch(n){this._logger.warn("\u6D88\u606F\u5904\u7406\u51FA\u9519"),this._logger.error(n.message),r&&this._nextQuestion(r)}};onChatMessage=async e=>{this._logger.debug(`process chat message[id:${e.message.messageId}] of channel ${e.source.options.instanceName}`),this.emit("CHAT_MESSAGE",e);let o=this._findRules(e,this._skillRules,!0);if(await this._applyBeforeSkills(o,e),!e.message){this._logger.info("skill\u8FD4\u56DE\u7684message\u4E3A\u7A7A\uFF0C\u6B64\u6D88\u606F\u65E0\u9700\u4F7F\u7528bot\u54CD\u5E94\uFF01");return}let r=this.app.botManager.getInstance(this._responseRule.instanceName),n=this._getBotMessageManager(e.source.options.instanceName,e.message.fromId);if(e.message.type==="TEXT"){let I=e.message.content?.trim();if(I.startsWith("#reset")||I.startsWith("#\u91CD\u7F6E")){n.clearHistory();let f=await r.clearHistoryRequested(e);f?(e.reply("\u91CD\u7F6E\u5931\u8D25\uFF01","TEXT",void 0,!0),this._logger.error(f)):e.reply("\u91CD\u7F6E\u6210\u529F\uFF01","TEXT",void 0,!0);return}}let s=await r.prepareMessage(e);if(!s?.forSend){this._logger.debug("reply denied by bot"),this._options.fallbackAnswer?.length&&e.reply(this._options.fallbackAnswer,"TEXT",void 0,!0);return}e.source.beforeSend&&(await e.source.beforeSend(e.message),this._logger.debug("before reply hook"));let i=[];r.params.needHistoryMessage&&this._options.historyEnabled&&(i=n.getHistoryMessages(),s.forHistory&&(s.forHistory.type="user",n.addMessage(s.forHistory,e.message.content)));let a=new Tt,p=e.message.isGroupChat&&e.message.type!=="PAT",l=!e.message.isGroupChat,m=!1,u="",g=0,d="";try{let I=await r.getResponse(e,{onContent:async(f,T)=>{if(l&&!m&&(m=!0,e.onGenerating?.()),!f)return;let L=typeof f=="string"?f:f?.text,U="",x;if(typeof L=="string"){L=L.trimStart(),d+=L,u+=L;let F=this._splitWords(u,g);U=F.extract,u=F.remaining,F.extract?.length&&g++,T="TEXT"}else x=f;if(U.trim().length){let F=await a.add(this._applyAfterSkills(o,e,U,"TEXT",void 0,"part"));if(F){let b={};p&&(p=!1,F.messageType==="TEXT"&&e.message.senderInfo?.nickName&&e.source.params.autoAppendAt&&(F.content="@"+e.message.senderInfo.nickName+" "+F.content,b.atList=[e.message.senderInfo?.[e.source.params.fieldInAtList??"userId"]])),await e.reply(F.content,F.messageType,b)}}if(x){this._logger.debug("process none text content,content type:"+T);let F=await a.add(this._applyAfterSkills(o,e,f,T,void 0,"part"));F?.content&&await e.reply(F.content,F.messageType)}},onError:f=>{throw f}},s,i);if(d.trim().length){this._logger.debug("all words:"+d);let f=u,T="TEXT",L=await a.add(this._applyAfterSkills(o,e,u,"TEXT",d,"part"));if(f=L.content,T=L.messageType,f&&T==="TEXT"){let x=await a.add(this._applyAfterSkills(o,e,u,"TEXT",d,"complete"));f=x.content,T=x.messageType}let U=typeof f=="string"?f:f.text;f&&(!U||U.length)&&await e.reply(f,T)}r.params.needHistoryMessage&&this._options.historyEnabled&&I&&(I.type="bot",n.addMessage(I,d))}catch(I){if(this._logger.warn("process message error"),this._logger.error(I.message),await e.reply(`\u5904\u7406\u6D88\u606F\u65F6\u9047\u5230\u5F02\u5E38
|
|
11
11
|
`,"TEXT",void 0,!0),this._options.sendErrorLog&&await e.reply(String(I),"TEXT",void 0,!1),process.env.LOG_LEVEL==="debug")throw I}finally{e.source.afterSend&&await e.reply(this._textEndId,"TEXT",void 0,!1)}};onSelfChatMessage=e=>{this._logger.debug("self send message"),e.message.type==="TEXT"&&this._logger.debug(e.message.content),this.emit("SELF_SEND",this._wrapEventWithChatReply(e))};async _applyAfterSkills(e,o,r,n,s,i){for(let a of e){let p=this.app.skillManager.getInstance(a.instanceName);if(!(p?.options.disabled||a.skillApplyOn==="source"||!ue(a,o))&&(this._logger.warn("status:"+i),!(a.skillWhenReplyStatus?.length&&a.skillWhenReplyStatus!==i)&&(this._logger.warn("status checked"),p?.applyOnReply))){this._logger.trace("apply after skill:"+a.instanceName+" for message from "+o.message.senderInfo.nickName);let l=await p.applyOnReply(a.skillWhenReplyStatus==="complete"?void 0:r,n,o,s);l?.content!==void 0&&l?.messageType!==void 0&&(r=l.content,n=l.messageType)}}return{content:r,messageType:n}}async _applyBeforeSkills(e,o){for(let r of e){let n=this.app.skillManager.getInstance(r.instanceName);if(!(n?.options.disabled||r.skillApplyOn==="reply")&&n?.applyOnSource&&(this._logger.trace("apply before skill:"+r.instanceName+" for message from "+o.message.senderInfo.nickName),await n.applyOnSource(o),!o.message)){this._logger.trace("\u6280\u80FD"+n.options.instanceName+"\u53D6\u6D88\u4E86\u540E\u7EED\u6280\u80FD\u7EE7\u7EED\u6267\u884C!");break}}}async _nextQuestion(e){let o=this._sourceMessagePool.get(e);if(!o){this._logger.trace("\u5F53\u524D\u7B49\u5F85\u6267\u884C\u7684\u5BF9\u8BDD\u5747\u5DF2\u5B8C\u6210\uFF01");return}if(!o.pool.length){this._sourceMessagePool.delete(e),this._logger.debug(e+"\u7528\u6237\u7684\u6240\u6709\u6D88\u606F\u5904\u7406\u5B8C\u6210\uFF01");return}let r=o.pool.shift();this._logger.debug("\u7EE7\u7EED\u56DE\u7B54\u7B49\u5F85\u533A\u7684\u4E0B\u4E00\u4E2A\u95EE\u9898");try{await this.onChatMessage(r)}catch(n){if(this._logger.error("\u5904\u7406\u6D88\u606F\u51FA\u9519"),this._logger.error(n),process.env.LOG_LEVEL==="debug")throw n}finally{this._nextQuestion(e)}}_findRules(e,o,r){if(r){let s=[];return o.forEach(i=>{ue(i,e)&&s.push(i)}),s}return[o.find(s=>ue(s,e))]}_getBotMessageManager(e,o){if(this._historyManagers[e]){if(this._historyManagers[e][o])return this._historyManagers[e][o]}else this._historyManagers[e]={};let r=new wt(this._options.historyOptions??{});return this._historyManagers[e][o]=r,r}_wrapEventWithChatReply(e){return{...e,reply:(r,n="TEXT",s={},i=!1)=>{let a=e.message,p={messageId:zt(),senderName:e.me?.userName,senderId:e.me?.userId,senderInfo:e.me,fromId:a.isGroupChat?a.fromId:e.me?.userId,type:n,content:r,toInfo:[a.isGroupChat?a.groupInfo:a.senderInfo],isGroupChat:a.isGroupChat,...s};return this.sendMessage(p,e.source,i,e.message)}}}async _sendFromPool(){let e=[];for(let o of this._sendMessagePool.keys()){let r=this._sendMessagePool.get(o);if(r?.length){let n=r.shift();e.push(this.sendMessage(n.message,n.to,!0,n.fromMessage))}r.length===0&&this._sendMessagePool.delete(o)}await Promise.allSettled(e),this._sendMessagePool.size>0&&setTimeout(()=>{this._sendFromPool()},this._options.minSendInterval)}_splitWords(e,o){if(this._options.bufferWordsMinCount<=0||e.length<=this._options.bufferWordsMinCount||o>=this._options.maxSplitCount-1)return{extract:"",remaining:e};let r=e.substring(0,this._options.bufferWordsMinCount),n=e.substring(this._options.bufferWordsMinCount);if(this._options.splitCharacters[0]!=="none"){let s=1/0;for(let i of this._options.splitCharacters){let a=n.indexOf(i);a<0||(s=Math.min(a,s))}if(s===1/0)return{extract:"",remaining:e};r+=n.substring(0,s+1),n=n.substring(s+1)}return{extract:r,remaining:n}}_initAgent(){if(this._initialized){this._logger.error("current source is defined,can't reinit!");return}if(this._logger.trace("agent init"),this._initialized=!0,this._options.skillRules?.length){let e=[...this._options.skillRules];this._skillRules=e.sort((o,r)=>(o.order??100)-(r.order??100))}else this._skillRules=[];for(let e of this._options.sourceInstanceNames){let o=this.app.sourceManager.getInstance(e);if(!o){this._logger.error(`can't find source instance of key ${e},please create in admin page first!`);continue}o.event.on("CHAT_MESSAGE",this.processChatMessage),o.event.on("SELF_SEND",this.onSelfChatMessage)}}};import{readItems as kr}from"@directus/sdk";import br from"emittery";import{v4 as vr}from"uuid";var xe=(r=>(r.APP_STARTED="APP_STARED",r.APP_RELOAD="APP_REALOD",r.APP_RESTARTED="APP_RESTARTED",r.APP_NOTIFY="APP_NOTIFY",r))(xe||{}),At=class extends br{constructor(t){super(),this._logger=y(t+"-global-trigger")}_logger;_eventNames=["APP_REALOD","APP_STARED","APP_RESTARTED","APP_NOTIFY"];get eventNames(){return[...this._eventNames]}async emit(t,e){return e=e??{},e.id=e.id??vr(),e.time=e.time??new Date,super.emit(t,e)}registerGlobalEventNames(t){if(this._eventNames.indexOf(t)>=0){this._logger.error("\u91CD\u590D\u7684\u6D88\u606F\u540D\u79F0\u6CE8\u518C\uFF1A"+t);return}this._eventNames.push(t)}};var O=y("agent-service"),Pt=class{constructor(t,e={}){this._app=t;this._options=e;this._options.maxRecords=this._options.maxRecords??1e3,this._options.models=this._options.models??{},this._options.models.agents=this._options.models.agents??[],this._options.models.bots=this._options.models.bots??[],this._options.models.skills=this._options.models.skills??[],this._options.models.sources=this._options.models.sources??[]}_initialized=!1;_agents=[];_tableNames={SOURCES:"sources",BOTS:"bots",SKILLS:"skills",AGENTS:"agents"};_resourceCount={agents:0,bots:0,sources:0,skills:0};get resourceCount(){return this._resourceCount}get agents(){return[...this._agents]}async init(){if(this._initialized){O.warn("agent service\u5DF2\u7ECF\u521D\u59CB\u5316\uFF0C\u8BF7\u52FF\u91CD\u590D\u8C03\u7528\uFF01");return}return this._initialized=!0,O.trace("agent service initializing..."),this._loadInstances()}getAgentByName(t){return this._agents?.find(e=>e.name===t)}async reload(){return O.trace("dispose agents,bots,skills,sources"),await this.dispose(),this._agents=[],O.trace("reinit instances"),this._loadInstances()}async _loadConfig(){let t=await this._loadTableConfig(this._tableNames.AGENTS),e=[...this._options.models.agents,...t.map(p=>({...p.options}))??[]],o=await this._loadTableConfig(this._tableNames.BOTS),r=[...this._options.models.bots,...o.map(p=>({name:p.name,options:p.options}))??[]],n=await this._loadTableConfig(this._tableNames.SKILLS),s=[...this._options.models.skills,...n.map(p=>({name:p.name,options:p.options}))??[]],i=await this._loadTableConfig(this._tableNames.SOURCES),a=[...this._options.models.sources,...i.map(p=>({name:p.name,options:p.options}))??[]];return{agents:e,bots:r,skills:s,sources:a}}async _loadTableConfig(t){if(this._app.offlineMode)return[];let e=await this._app.client.request(kr(t,{limit:this._options.maxRecords,filter:{status:{_neq:"archived"},user_created:{_eq:this._app.me?.id}}}));return e?.length?e:(O.warn("\u6CA1\u6709\u4ECE\u5728\u7EBF"+t+"\u83B7\u53D6\u5230\u6570\u636E\uFF01"),O.warn(e),[])}async _loadInstances(){let t=await this._loadConfig(),e=[];this._loadSkills(t.skills,e),this._loadBots(t.bots,e),this._loadSources(t.sources),O.info(`${t.sources.length}\u4E2Asource\u5B9E\u4F8B\uFF0C${t.bots.length}\u4E2Abot\u5B9E\u4F8B\uFF0C${t.skills.length}\u4E2Askill\u5B9E\u4F8B\u521D\u59CB\u5316\u5B8C\u6210\uFF01`),await Promise.allSettled(e),e=[],this._loadAgents(t.agents),await Promise.allSettled(e),O.info(`${t.agents.length}\u4E2Aagent\u521D\u59CB\u5316\u5B8C\u6210\uFF01`),this._resourceCount.agents=t.agents.length,this._resourceCount.bots=t.bots.length,this._resourceCount.skills=t.skills.length,this._resourceCount.sources=t.sources.length}_loadSources(t){let e=[];for(let o of t){o.options.instanceName||(O.trace("\u81EA\u52A8\u751F\u6210"+o.name+"\u7684\u5B9E\u4F8BID"),o.options.instanceName=ae(10));let r=this._app.sourceManager.createInstance(o.name,o.options);if(!r){O.info("\u6CA1\u6709\u627E\u5230\u540D\u4E3A"+o.name+"\u7684\u6D88\u606F\u6E90");return}O.trace("source "+r.options.instanceName+"created");let n=o.options.instanceName,s=r.actions;s&&s.forEach(i=>{i.type==="api"?this._app.registerRoutes(n,i):i.type==="ws"?this._app.registerWSHandler(n,i):O.warn("\u4E0D\u80FD\u8BC6\u522B\u7684action\u7C7B\u578B\uFF1A"+i.type)}),e.push(r)}this._app.running?e.forEach(o=>o.login()):this._app.globalEvent.once("APP_STARED").then(()=>{e.forEach(o=>o.login())})}_loadBots(t,e){t.forEach(o=>{O.trace(o),o.options.instanceName||(O.trace("\u81EA\u52A8\u751F\u6210"+o.name+"\u7684\u5B9E\u4F8BID"),o.options.instanceName=ae(10));let r=this._app.botManager.createInstance(o.name,o.options);if(!r){O.info("load bot failed:"+o.options.instanceName);return}O.trace("bot "+o.options.instanceName+" created"),e.push(r.init())})}_loadSkills(t,e){t.forEach(o=>{O.trace(o),o.options.instanceName||(O.trace("\u81EA\u52A8\u751F\u6210"+o.name+"\u7684\u5B9E\u4F8BID"),o.options.instanceName=ae(10));let r=this._app.skillManager.createInstance(o.name,o.options);if(!r){O.info("load skill failed:"+o.options.instanceName);return}O.trace("skill "+r.options.instanceName+" created"),e.push(r.init())})}_loadAgents(t){O.trace(t),this._agents=t.map(e=>(e.instanceName||(O.trace("\u81EA\u52A8\u751F\u6210agent\u7684\u5B9E\u4F8BID"),e.instanceName=ae(10)),new _e(this._app,e)))}async dispose(){await ie(this._agents),await this._app.botManager.clearInstances(),await this._app.skillManager.clearInstances(),await this._app.sourceManager.clearInstances()}};import wr from"emittery";var A=class extends wr{constructor(e){super();this._options=e;this.logger=y(this._options.instanceName),this._options.historyExipresInSeconds=this._options.historyExipresInSeconds??30*60,this._options.attachSendMode=this._options.attachSendMode??"later",this._options.maxAttachCount=this._options.maxAttachCount??3,this._options.subscribeWelcome=this._options.subscribeWelcome??"\u8BF7\u5BF9\u7528\u6237\u7684\u4F7F\u7528\u8868\u793A\u6B22\u8FCE\uFF0C\u5E76\u4E14\u7B80\u5355\u7684\u4ECB\u7ECD\u4F60\u81EA\u5DF1\uFF0C\u91CD\u70B9\u662F\u4F60\u7684\u80FD\u529B\u3002",this.chatIdCache=St(this._options.instanceName),this._options.onlyText=this._options.onlyText??!1}static params={name:"basic bot",optionsSchema:{type:"formily",formily:{type:"object",properties:{...N,apiBase:{type:"string",title:"\u670D\u52A1URL","x-index":1,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165API\u670D\u52A1\u5730\u5740"},"x-validator":{format:"url"},"x-decorator-props":{tooltip:"\u4E00\u822C\u5728\u5E94\u7528\u53D1\u5E03\u9875\u9762\u6216\u8005API\u914D\u7F6E\u9875\u9762\u53EF\u4EE5\u770B\u5230\u3002"}},apiKey:{type:"string",title:"\u670D\u52A1\u5BC6\u94A5","x-index":2,"x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u670D\u52A1\u5BC6\u94A5"},"x-validator":{required:!0,message:"\u670D\u52A1\u5BC6\u94A5\u4E0D\u80FD\u4E3A\u7A7A"},"x-decorator-props":{tooltip:"\u4E00\u822C\u5728\u5E94\u7528\u53D1\u5E03\u9875\u9762\u6216\u8005API\u914D\u7F6E\u9875\u9762\u53EF\u4EE5\u770B\u5230\u3002"}},onlyText:{type:"boolean",title:"\u662F\u5426\u4E3A\u7EAF\u6587\u672C\u6A21\u578B","x-decorator":"FormItem","x-component":"Switch","x-component-props":{checkedChildren:"\u662F",unCheckedChildren:"\u5426"},"x-decorator-props":{tooltip:"\u5982\u679C\u4E0D\u652F\u6301\u591A\u6A21\u6001\uFF0C\u8BBE\u7F6E\u4E3Atrue\uFF0C\u5426\u5219\u8BBE\u7F6E\u4E3Afalse\uFF0C\u9ED8\u8BA4\u662Ffalse\u3002"},default:!1},historyExipresInSeconds:{type:"number",title:"\u540E\u7AEF\u7BA1\u7406\u7684\u5386\u53F2\u6D88\u606F\u8FC7\u671F\u65F6\u95F4\uFF08\u79D2\uFF09","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u5386\u53F2\u6D88\u606F\u8FC7\u671F\u65F6\u95F4\uFF08\u79D2\uFF09"},"x-decorator-props":{min:60,tooltip:"\u5F53\u7531\u540E\u7AEF\u7BA1\u7406\u5386\u53F2\u6D88\u606F\u65F6\u5019\uFF08\u975E\u81EA\u5EFA\u5BA2\u6237\u7AEF\u7BA1\u7406\uFF09\uFF0C\u591A\u4E45\u540E\u91CD\u65B0\u5F00\u542F\u65B0\u7684\u5BF9\u8BDDsession\u3002\u9ED8\u8BA41800\u79D2\uFF0C\u537330\u5206\u949F\u3002\u5F53\u4F7F\u7528\u81EA\u5EFA\u540E\u7AEF\u5E26\u7684\u5386\u53F2\u6D88\u606F\u65F6\uFF0C\u8FC7\u671F\u76F8\u5173\u9009\u9879\u5728agent\u4E2D\u914D\u7F6E\u3002"},default:1800},attachSendMode:{type:"string",enum:["now","later"],title:"\u9644\u4EF6\u53D1\u9001\u6A21\u5F0F","x-decorator":"FormItem","x-component":"Select","x-component-props":{placeholder:"\u8BF7\u9009\u62E9\u9644\u4EF6\u53D1\u9001\u6A21\u5F0F"},"x-decorator-props":{tooltip:"\u6536\u5230\u56FE\u7247\u9644\u4EF6\u65F6\uFF0C\u5982\u679C\u8981\u7B49\u5F85\u7528\u6237\u63D0\u95EE\u518D\u4E00\u8D77\u53D1\u5F80\u540E\u7AEF\uFF08\u5EFA\u8BAE\uFF09\uFF0C\u5219\u8BBE\u7F6E\u4E3Alater\uFF0C\u5426\u5219\u8BBE\u7F6E\u4E3Anow\u3002\u9ED8\u8BA4later\u3002"},default:"later"},maxAttachCount:{type:"number",title:"\u6700\u5927\u9644\u4EF6\u6570\u91CF","x-decorator":"FormItem","x-component":"NumberPicker","x-component-props":{min:1,placeholder:"\u8BF7\u8F93\u5165\u6700\u5927\u9644\u4EF6\u6570\u91CF"},"x-decorator-props":{tooltip:"\u9ED8\u8BA43\u5F20\uFF0C\u540Cdify\u8BBE\u7F6E"},default:3},subscribeWelcome:{type:"string",title:"\u8BA2\u9605\u6B22\u8FCE\u8BED","x-decorator":"FormItem","x-component":"Input","x-component-props":{placeholder:"\u8BF7\u8F93\u5165\u6B22\u8FCE\u8BED\uFF08\u4E3B\u8981\u7528\u4E8E\u516C\u4F17\u53F7\u8BA2\u9605\u540E\u7684\u81EA\u52A8\u56DE\u590D\uFF09"},"x-decorator-props":{tooltip:`\u5F53\u6536\u5230\u8BA2\u9605\u6D88\u606F\u65F6\uFF0C\u8981\u5BF9\u7528\u6237\u8BF4\u7684\u6B22\u8FCE\u8BCD\uFF0C\u5982\u679C\u6B22\u8FCE\u8BCD\u4EE5\u53CC\u4E0B\u5212\u7EBF__\u5F00\u5934\uFF0C\u8868\u793A\u4F7F\u7528\u56FA\u5B9A\u8BCD\u8BED\uFF0C\u5982 __\u6B22\u8FCE\u5173\u6CE8\uFF01\uFF0C\u5426\u5219\u5C06\u4F7F\u7528\u914D\u7F6E\u7684\u8BCD\u4F5C\u4E3A\u63D0\u793A\u8BCD\u8BA9\u540E\u7AEF\u7ED9\u51FA\u6B22\u8FCE\u8BCD
|
|
12
12
|
\u53EF\u4EE5\u4F7F\u7528\u8BE5\u529F\u80FD\u63D0\u4F9B\u5BF9\u6A21\u578B\u80FD\u529B\u7684\u4ECB\u7ECD\u3002`},default:"\u8BF7\u5BF9\u7528\u6237\u7684\u4F7F\u7528\u8868\u793A\u6B22\u8FCE\uFF0C\u5E76\u4E14\u7B80\u5355\u7684\u4ECB\u7ECD\u4F60\u81EA\u5DF1\uFF0C\u91CD\u70B9\u662F\u4F60\u7684\u80FD\u529B\u3002"}}}}};commandText={attach:"_command_attach",position:"_command_position",article:"_command_article",subscribe:"_command_subscribe"};chatIdCache;chatAttachCache={};logger;get options(){return this._options}checkCommand(e,o,r){return e===this.commandText.attach?(this.chatAttachCache[o]||this.logger.warn("\u6709\u6536\u5230\u56FE\u7247\u6D88\u606F\uFF0C\u4F46\u662F\u6CA1\u6709\u7F13\u5B58\u6210\u529F\uFF01"),!1):e===this.commandText.position||e===this.commandText.article?!1:e===this.commandText.subscribe?(r.reply(this._options.subscribeWelcome.slice(2),"TEXT"),!1):!0}async getLastInfo(e){let o=await this.chatIdCache.get(e);if(!o&&this.supportConversationOnline){let r=await this.getLatestConversationId(e);if(r?.length&&this._options.historyExipresInSeconds>0){let n=await this.getLatestChatTime(r,e);if(this.logger.debug("server time hours "+new Date().getHours()),n){let s=(n+this._options.historyExipresInSeconds)*1e3;new Date().getTime()>s?(await this.deleteConversation(r,e),this.logger.debug("\u65E7\u7684\u4F1A\u8BDD\u8FC7\u671F\uFF0C\u5220\u9664")):o={conversationId:r,timeInSeconds:n}}else o={conversationId:r,timeInSeconds:void 0}}else o={conversationId:r,timeInSeconds:void 0}}else if(this._options.historyExipresInSeconds>0&&o?.timeInSeconds){let r=(o.timeInSeconds+this._options.historyExipresInSeconds)*1e3;new Date().getTime()>r&&(this.supportConversationOnline&&await this.deleteConversation(o.conversationId,e),await this.chatIdCache.delete(e),o=void 0,this.logger.debug("\u65E7\u7684\u4F1A\u8BDD\u7F13\u5B58\u8FC7\u671F\uFF0C\u5220\u9664"))}return o}async clearHistoryRequested(e){try{let o=e.source.options.instanceName+"-"+e.message.fromId;delete this.chatAttachCache[o];let r=(await this.chatIdCache.get(o))?.conversationId;if(r?await this.chatIdCache.delete(o):r=await this.getLatestConversationId(o),!r){this.logger.debug("\u6CA1\u6709\u5386\u53F2\u6D88\u606F\u8981\u5220\u9664\uFF01");return}await this.deleteConversation(r,o)}catch(o){return String(o)}}async prepareMessage(e){let o=e.source.options.instanceName+"-"+e.message.fromId;try{let r=e.message,n=[],s;switch(r.type){case"RECALL":case"FRIEND_REQUEST":case"SYSTEM":case"CUSTOM":case"PHONE":return;case"TEXT":s=r.content;break;case"REF":{let a=r.content;if(s=a.text,a.refMessage?.type==="TEXT"||a.refMessage?.type==="REF"||a.refMessage?.type==="AUDIO"){let p=typeof a.refMessage.content=="string"?a.refMessage.content:a.refMessage.content.text;p?.length&&(s=`\u6839\u636E\u4E0A\u4E0B\u6587\u5185\u5BB9\uFF0C\u5E76\u91CD\u70B9\u9488\u5BF9\u201C${p}\u201D\u8FD9\u6BB5\u8BDD\u56DE\u7B54\u8FD9\u4E2A\u95EE\u9898\uFF1A${s}`)}else if(a.refMessage?.type==="POSITION"){let p=Kt(a.refMessage.content);p.length&&(s=`\u6839\u636E\u4EE5\u4E0B\u4F4D\u7F6E\u4FE1\u606F\u3010${p}\u3011\u9488\u5BF9\u8BE5\u95EE\u9898\u8FDB\u884C\u56DE\u590D\uFF1A${s}`)}else a.refMessage?.type==="ARTICLE"?s=`\u6839\u636E\u8BE5\u6587\u7AE0\u7684\u4FE1\u606F\uFF08${bo(a.refMessage.content)}\uFF09,\u6293\u53D6\u5176\u8BE6\u7EC6\u5185\u5BB9\uFF0C\u7136\u540E\u56DE\u7B54\u4EE5\u4E0B\u95EE\u9898\uFF08\u6CE8\u610F\u5982\u679C\u662F\u603B\u7ED3\u5185\u5BB9\uFF0C\u5219\u5148\u6982\u8FF0\uFF0C\u518D\u5206\u51E0\u4E2A\u91CD\u70B9\u8BE6\u7EC6\u63CF\u8FF0\uFF09\uFF1A${s}`:s="\u8BF7\u56DE\u590D\u4E00\u6BB5\u8BDD\u53CB\u597D\u7684\u8868\u8FBE\u4F60\u6682\u65F6\u8FD8\u4E0D\u652F\u6301\u8FD9\u4E2A\u529F\u80FD\uFF01";this.logger.debug("ref message"),this.logger.debug(s);break}case"AUDIO":{let a=e.message.content;a.text?.length?s=a.text:this.logger.info("\u5F53\u524D\u8BED\u97F3\u6CA1\u6709\u88AB\u8F6C\u6362\u4E3A\u6587\u672C\uFF0C\u65E0\u6CD5\u53D1\u9001\u5230dify\u540E\u7AEF\uFF01\u8BF7\u8003\u8651\u4F7F\u7528skill\u8FDB\u884C\u8F6C\u6362\uFF01");break}case"POSITION":{if(e.message.isGroupChat)s=this.commandText.position;else{let a=Kt(e.message.content);a.length&&(s=`\u8FD9\u662F\u4E00\u4E2A\u4F4D\u7F6E\u4FE1\u606F\uFF1A\u3010${a}\u3011\uFF0C\u6211\u7A0D\u540E\u53EF\u80FD\u4F1A\u95EE\u4F60\u5173\u4E8E\u8FD9\u4E2A\u4F4D\u7F6E\u7684\u95EE\u9898\u3002`)}break}case"PAT":{let a=e.message.content;e.message.isGroupChat?s="\u6709\u4E2A\u4EBA\u8F7B\u8F7B\u7684\u62CD\u4E86\u62CD\u4F60\uFF0C\u7ED9\u4E2A\u53CB\u597D\u7684\u56DE\u590D\u5427\uFF01":s=`\u6709\u4E2A\u4EBA\u8F7B\u8F7B\u5730\u62CD\u4E86\u62CD\u4F60\uFF0C\u5177\u4F53\u6D88\u606F\u5185\u5BB9\u662F\uFF1A\u3010${a.text}\u3011\u3002\u6765\u4E00\u4E2A\u53CB\u597D\u7684\u56DE\u590D\u5427\uFF01`;break}case"ARTICLE":{if(e.message.isGroupChat)s=this.commandText.article;else{let a=e.message.content.url;a.length&&(s=`\u8FD9\u662F\u4E00\u4E2A\u7F51\u5740\uFF1A${a}\uFF0C\u8BF7\u7B49\u5F85\u6211\u7684\u63D0\u95EE\uFF08\u5982\u679C\u540E\u7EED\u8981\u6C42\u603B\u7ED3\uFF0C\u5219\u5148\u6982\u62EC\u6574\u4F53\u63CF\u8FF0\uFF0C\u7136\u540E\u52063-5\u70B9\u5C55\u5F00\u63CF\u8FF0\u91CD\u70B9\u5185\u5BB9\uFF0C\u53EF\u4EE5\u4F7F\u7528\u4E00\u4E9B\u8868\u60C5\u7B26\u53F7\u6765\u589E\u5F3A\u63CF\u8FF0\u7684\u8DA3\u5473\u6027\uFF0C\u4E0D\u7528\u8BF4\u4F60\u77E5\u9053\u8FD9\u4E2A\u8981\u6C42\uFF09\u3002`)}break}case"UNSUBSCRIBE":{this.logger.debug("\u7528\u6237\u53D6\u6D88\u8BA2\u9605\uFF0C\u65E0\u9700\u56DE\u590D\uFF01");break}case"SUBSCRIBE":{this._options.subscribeWelcome.startsWith("__")?s=this.commandText.subscribe:s=this._options.subscribeWelcome;break}}if(!this._options.onlyText)switch(r.type){case"RICH_TEXT":{let a=r.content;s="";for(let p of a.content)p.type==="text"?s+=p.data+`
|
|
@@ -42,4 +42,4 @@ GET ${this._uri} HTTP/1.1`,r=Un(o,this._options.secretKey),n=Ho.stringify(r),s=`
|
|
|
42
42
|
date: ${e}
|
|
43
43
|
GET ${this._uri} HTTP/1.1`,r=jn(o,this._options.secretKey),n=jo.stringify(r),s=`api_key="${this._options.apiKey}", algorithm="hmac-sha256", headers="host date request-line", signature="${n}"`;return jo.stringify(qn.parse(s))}async getAudioBuffer(e){let o=new Date().toUTCString(),r=this._hostUrl+"?authorization="+this._getAuthStr(o)+"&date="+o+"&host="+this._host,n=new Gn(r);return new Promise(s=>{let i;n.on("open",()=>{this._logger.trace("websocket connect!");let a={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}};n.send(JSON.stringify(a))}),n.on("message",(a,p)=>{if(p){this._logger.error("message error: "+p),n.close();return}let l=JSON.parse(a);if(l.code!=0){this._logger.error(`${l.code}: ${l.message}`),n.close();return}let m=l.data.audio,u=Buffer.from(m,"base64");i?i=Buffer.concat([i,u]):i=u,l.data.status==2&&(this._logger.trace("audio generated"),i=Buffer.from(se(i.buffer,16e3,16,1)),n.close())}),n.on("close",()=>{this._logger.trace("connect close!"),s(i)}),n.on("error",a=>{this._logger.trace("websocket connect err: "+a),s(void 0)})})}};import Kn from"tencentcloud-sdk-nodejs-asr";var Wn=Kn.asr.v20190614.Client,at=class c extends ${constructor(e,o){super(o);this._app=e;this._options=o;if(!o.secretId?.length||!o.secretKey?.length)throw new Error("Tencent STT skill need appId,apiKey,secretKey to work.")}static params={name:"tencent-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...$.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"};_client;async init(){this._client=new Wn({credential:{secretId:this._options.secretId,secretKey:this._options.secretKey},region:"",profile:{httpProfile:{endpoint:"asr.tencentcloudapi.com"}}})}get options(){return this._options}get params(){return c.params}async _getText(e){this._logger.debug("\u5F00\u59CB\u8F6C\u6362\u8BED\u97F3\u5230\u6587\u672C");try{let o=await e.asBase64(),r=this._options.ensureAudioFormat?"wav":e.name.slice(e.name.lastIndexOf(".")+1);r==="ogg"&&(r="ogg-opus");let n={EngSerViceType:"16k_zh",SourceType:1,VoiceFormat:r,Data:o},s=await this._client.SentenceRecognition(n);if(!s.Result?.length){this._logger.warn("\u8BC6\u522B\u7ED3\u679C\u4E3A\u7A7A");return}return s.Result}catch(o){this._logger.error(o.message);return}}};import Vn from"tencentcloud-sdk-nodejs-tts";import{v4 as zn}from"uuid";var Xn=Vn.tts.v20190823.Client,ct=class c extends B{constructor(e,o){if(!o.secretId?.length||!o.secretKey?.length)throw new Error("Tencent TTS skill need appId,apiKey,secretKey to work.");o.spd=o.spd??0,o.vol=o.vol??0,o.voice=o.voice??0;super(o);this._app=e;this._options=o}static params={name:"tencent-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...B.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"};_client;get _maxToken(){return 150}async init(){let e=new Xn({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 c.params}async getAudioBuffer(e){try{let o=await this._client.TextToVoice({Text:e,SessionId:zn(),Volume:this._options.vol,Speed:this._options.spd,VoiceType:this._options.voice,SampleRate:16e3,Codec:"wav"});if(o?.Audio?.length)return Buffer.from(o.Audio,"base64");this._logger.error("\u5408\u6210\u5931\u8D25\uFF01");return}catch(o){this._logger.error(o.message);return}}};import Jn from"openai";var ce=class c extends ${constructor(e,o){super(o);this._app=e;this._options=o;if(!o.apiKey?.length)throw new Error("OpenAI STT skill need api key to work.");if(!o.model?.length)throw new Error("\u6A21\u578B\u540D\u79F0\u672A\u914D\u7F6E\uFF01")}static params={name:"openai-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...$.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"};_client;async init(){this._client=new Jn({apiKey:this._options.apiKey,baseURL:this._options.baseUrl})}get options(){return this._options}get params(){return c.params}async _getText(e){this._logger.debug("\u5F00\u59CB\u8F6C\u6362\u8BED\u97F3\u5230\u6587\u672C");try{let o=this._options.ensureAudioFormat?"wav":e.name.slice(e.name.lastIndexOf(".")+1);if(!["flac","mp3","mp4","mpeg","mpga","m4a","ogg","wav","webm"].includes(o.toLowerCase())){this._logger.warn("\u4E0D\u652F\u6301\u7684\u683C\u5F0F\u7C7B\u578B\uFF1A"+o);return}let r=await this._client.audio.transcriptions.create({file:await e.asReadStream(),model:this._options.model});if(!r.text?.length){this._logger.warn("\u8BC6\u522B\u7ED3\u679C\u4E3A\u7A7A");return}return r.text}catch(o){this._logger.error(o.message);return}}};var pt=class c extends ce{constructor(e,o){if(!o.apiKey?.length)throw new Error("Silicon Flow STT skill need api key to work.");o.baseUrl=o.baseUrl??"https://api.siliconflow.cn/v1";super(e,o);this._app=e;this._options=o;if(!o.model?.length)throw new Error("\u6A21\u578B\u540D\u79F0\u672A\u914D\u7F6E\uFF01")}static params={name:"silicon-flow-stt",optionsSchema:{type:"formily",formily:{type:"object",properties:{...ce.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"};get options(){return this._options}get params(){return c.params}};var pe=class c extends B{constructor(e,o){if(!o.apiKey?.length||!o.model?.length||!o.voice?.length)throw new Error("OpenAI TTS skill need API KEY,model and voice to work.");super(o);this._app=e;this._options=o}static params={name:"openai-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...B.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"};_format="wav";get _maxToken(){return 10240}get options(){return this._options}get params(){return c.params}_updateBody(e){return e}async getAudioBuffer(e){try{let o=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(o.ok)return Buffer.from(await o.arrayBuffer());this._logger.error("\u5408\u6210\u5931\u8D25\uFF01");return}catch(o){this._logger.error(o.message);return}}};var lt=class c extends pe{constructor(e,o){o.baseUrl=o.baseUrl??"https://api.siliconflow.cn/v1";super(e,o);this._app=e;this._options=o}static params={name:"silicon-flow-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...pe.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"};_format="pcm";get options(){return this._options}get params(){return c.params}_updateBody(e){return e.sample_rate=16e3,e.stream=!1,e}async getAudioBuffer(e){try{let o=await super.getAudioBuffer(e);return o?Buffer.from(se(o.buffer,16e3,16,1)):void 0}catch(o){this._logger.error(o.message);return}}};var mt=class c extends B{constructor(e,o){if(!o.apiKey?.length||!o.referenceId?.length)throw new Error("Fish Audio TTS skill need API KEY,reference id voice to work.");o.baseUrl=o.baseUrl??"https://api.fish.audio";super(o);this._app=e;this._options=o}static params={name:"openai-tts-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...B.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"};get _maxToken(){return 10240}get options(){return this._options}get params(){return c.params}async getAudioBuffer(e){try{let o=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(o.ok)return Buffer.from(await o.arrayBuffer());this._logger.error("\u5408\u6210\u5931\u8D25\uFF01");return}catch(o){this._logger.error(o.message),this._logger.error("\u8BF7\u68C0\u67E5\u60A8\u7684\u7F51\u7EDC\u662F\u5426\u80FD\u591F\u8FDE\u63A5\u5230fish audio\u3002");return}}};var K=class c{constructor(t,e){this._app=t;this._options=e;this._logger=y(this._options.instanceName)}static params={name:"base-draw-skill",optionsSchema:{type:"formily",formily:{type:"object",properties:{...Ce,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"};_logger;get options(){return this._options}get params(){return c.params}async init(){}async applyOnSource(t){let e=kt(t.message.content);if(!e?.trim().length){this._logger.trace("\u5F53\u524D\u7ED8\u56FE\u6307\u4EE4\u4E3A\u7A7A");return}e=e.trim(),e.startsWith(t.me?.nickName)&&(e=e.slice(t.me.nickName.length+1),this._logger.trace("remove nick name:"+t.me.nickName));let o=e.split(/\s+/),r=this._options.triggerWords.split(/\s+/);if(this._options.triggerWords?.indexOf(o[0])>=0||r.some(n=>e.startsWith(n))){let n=o.length>1?o.slice(1).join(","):e;if(!n?.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 a="\u8BF7\u5BF9\u4EE5\u4E0B\u7ED8\u56FE\u6216\u8005\u89C6\u9891\u751F\u6210\u7684\u63D0\u793A\u8BCD\u8FDB\u884C\u4F18\u5316\uFF1A"+n,p=this._app.botManager.getInstance(this._options.optimizer);if(!p)this._logger.error("\u7528\u4E8E\u4F18\u5316\u63D0\u793A\u8BCD\u7684\u5927\u6A21\u578B"+this._options.optimizer+"\u4E0D\u5B58\u5728!");else{let l=t.message,m={...l,type:"TEXT",content:a,origin:void 0};t.message=m;try{let u=await p.prepareMessage(t),g="";await p.getResponse(t,{onContent:(d,I)=>{I==="TEXT"&&(g+=d)},onError:d=>{this._logger.error(d)}},u,[]),n=g,this._logger.debug("\u4F18\u5316\u540E\u7684\u63D0\u793A\u8BCD\uFF1A"+n)}catch(u){this._logger.error(u.message)}finally{t.message=l}}}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 "+n);let s=t.message.senderId,i=await this._draw(n,s,t);if(i?.url.length)if(t.message=void 0,this._options.replyFormat==="IMAGE"){let a={file:h.fromPath(i.url)};t.reply(a,"IMAGE",void 0,!0),i.text?.length&&t.reply(i.text,"TEXT",void 0,!0)}else if(this._options.replyFormat==="FILE"){let a={file:h.fromPath(i.url)};t.reply(a,"FILE",void 0,!0),i.text?.length&&t.reply(i.text,"TEXT",void 0,!0)}else if(this._options.replyFormat==="VIDEO"){let a={file:h.fromPath(i.url),previewImage:i.coverUrl?h.fromPath(i.coverUrl):void 0};t.reply(a,"VIDEO",void 0,!0),i.text?.length&&t.reply(i.text,"TEXT",void 0,!0)}else this._options.replyFormat==="URL"?t.reply(i.url+`
|
|
44
44
|
`+(i.text??""),"TEXT",void 0,!0):t.reply(`
|
|
45
|
-
${i.text??""}`,"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 ut=class extends K{constructor(e,o){o.apiBase=o.apiBase?.length?o.apiBase:"https://open.bigmodel.cn";super(e,o);this._app=e;this._options=o}static params={name:"cogview-skill",desc:"CogView\u7ED8\u56FE",optionsSchema:{type:"formily",formily:{type:"object",properties:{...K.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"}}}}};async _draw(e,o){if(!e?.length){this._logger.warn("\u7ED8\u56FE\u63D0\u793A\u8BCD\u4E3A\u7A7A\uFF01");return}let r=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:o})})).json();return this._logger.debug(r),{url:r?.data?.[0].url}}};var dt=class extends K{constructor(e,o){super(e,o);this._app=e;this._options=o}static params={name:"openai-skill",desc:"OpenAI\u7ED8\u56FE",optionsSchema:{type:"formily",formily:{type:"object",properties:{...K.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"}}}}};async _draw(e,o){let r=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:o})})).json();return this._logger.debug(r),{url:r.data?.[0].url}}};var gt=class extends K{constructor(e,o){o.apiBase=o?.apiBase?.length?o.apiBase:"https://api.siliconflow.cn/v1";super(e,o);this._app=e;this._options=o}static params={name:"silicon-flow-draw-skill",desc:"\u7845\u57FA\u6D41\u52A8\u7ED8\u56FE",optionsSchema:{type:"formily",formily:{type:"object",properties:{...K.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:"{}"}}}}};async _draw(e){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,image_size:this._options.size,...this._options.customOptions??{}})})).json();if(this._logger.debug(o),o.images?.length)return{url:o.images?.[0].url};this._logger.error(o)}};import{v4 as Qn}from"uuid";var ht=class extends K{constructor(e,o){o.apiBase=o.apiBase?.length?o.apiBase:"https://open.bigmodel.cn",o.timeout=Math.max(o.timeout??180,30);super(e,o);this._app=e;this._options=o}static params={name:"cogvideo-skill",desc:"CogVideo\u89C6\u9891\u751F\u6210",optionsSchema:{type:"formily",formily:{type:"object",properties:{...K.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}}}}};async _draw(e,o){let r=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:o,with_audio:this._options.withAudio??!1,request_id:Qn()})})).json();if(this._logger.debug(r),r?.id)return new Promise(n=>{try{let s=new Date().getTime(),i=async()=>{let a=await(await fetch(`${this._options.apiBase}/api/paas/v4/async-result/${r.id}`,{method:"get",headers:{Authorization:"Bearer "+this._options.apiKey}})).json();if(a.task_status==="SUCCESS"){n({url:a.video_result?.[0].url,coverUrl:a.video_result?.[0].cover_image_url});return}else this._logger.trace("current video status for "+e+": "+JSON.stringify(a));if((new Date().getTime()-s)/1e3>this._options.timeout){this._logger.warn("\u89C6\u9891\u751F\u6210\u8D85\u65F6\uFF01"),n(void 0);return}setTimeout(i,3e3)};i()}catch(s){this._logger.error(s.message),n(void 0)}});this._logger.error("\u751F\u6210\u5931\u8D25\uFF01"),this._logger.error(r)}};var HI=async c=>({init:async()=>({skills:[{creator:t=>new Ge(t),params:Ge.params},{creator:t=>new qe(t),params:qe.params},{creator:t=>new rt(c,t),params:rt.params},{creator:t=>new nt(c,t),params:nt.params},{creator:t=>new st(c,t),params:st.params},{creator:t=>new it(c,t),params:it.params},{creator:t=>new at(c,t),params:at.params},{creator:t=>new ct(c,t),params:ct.params},{creator:t=>new ce(c,t),params:ce.params},{creator:t=>new pt(c,t),params:pt.params},{creator:t=>new pe(c,t),params:pe.params},{creator:t=>new lt(c,t),params:lt.params},{creator:t=>new mt(c,t),params:mt.params},{creator:t=>new ut(c,t),params:ut.params},{creator:t=>new dt(c,t),params:dt.params},{creator:t=>new gt(c,t),params:gt.params},{creator:t=>new ht(c,t),params:ht.params}],bots:[{creator:t=>new Me(t),params:Me.params},{creator:t=>new Pe(t),params:Pe.params},{creator:t=>new R(t),params:R.params},{creator:t=>new Oe(t),params:Oe.params},{creator:t=>new Ne(t),params:Ne.params},{creator:t=>new Re(t),params:Re.params},{creator:t=>new Be(t),params:Be.params},{creator:t=>new De(t),params:De.params},{creator:t=>new Ee(t),params:Ee.params},{creator:t=>new Fe(t),params:Fe.params},{creator:t=>new Ue(t),params:Ue.params},{creator:t=>new $e(t),params:$e.params},{creator:t=>new Le(t),params:Le.params}],sources:[{creator:t=>new Xe(t),params:Xe.params},{creator:t=>new Ke(c,t),params:Ke.params},{creator:t=>new We(t),params:We.params},{creator:t=>new Je(c,t),params:Je.params},{creator:t=>new Qe(c,t),params:Qe.params},{creator:t=>new Ze(c,t),params:Ze.params},{creator:t=>new tt(c,t),params:tt.params},{creator:t=>new ot(c,t),params:ot.params}],taskTriggers:[{creator:t=>new He(c,t),params:He.params},{creator:t=>new je(c,t),params:je.params},{creator:t=>new ze(c,t),params:ze.params}],taskRunners:[{creator:t=>new Ve(c,t),params:Ve.params}]}),needOnline:!1,name:"\u9ED8\u8BA4\u63D2\u4EF6",dispose:async()=>{}});var Bt=class extends z{};var Dt=class extends z{};var Lt=class extends z{constructor(e){e.cacheInstance=!1;super(e);this.options=e}},Ut=class extends z{constructor(e){e.cacheInstance=!1;super(e);this.options=e}};import Yn from"fastify";import Zn from"@fastify/websocket";import es from"@fastify/static";import be from"node:process";import ts from"@fastify/formbody";import os from"emittery";import{XMLParser as rs}from"fast-xml-parser";import qo from"fs";import to from"node:path";import{createReadStream as ns,existsSync as ss}from"node:fs";import{authentication as is,createDirectus as as,readItems as cs,readMe as ps,rest as ls}from"@directus/sdk";import ms from"@fastify/cors";import{v4 as Go}from"uuid";import us from"@fastify/compress";var Ko=class c extends os{constructor(e={name:"default"}){super();this._options=e;this._logger=y("app-"+this._options.name),this._globalEvent=new At(this._options.name)}static EventNames={ERROR:"error"};_server;_pluginHandlers=[];_wsRoutes={};_httpRoutes=new Map;_starting=!1;_stopping=!1;_stopped=!1;_running=!1;_agentService;_skillManager;_sourceManager;_botManager;_taskService;_taskTriggerManager;_taskRunnerManager;_xmlParser=new rs;_sharedCover;_sharedLogo;_client;_me;_globalEvent;_logger;_onlinePluginInfos=new Map;_services=new Map;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=Yn({logger:{level:"warn"}}),await this._server.register(Zn),await this._server.register(ts),await this._server.register(ms,{origin:"*"}),_.serverCompress&&(this._logger.info("\u542F\u7528\u670D\u52A1\u5668gzip\u538B\u7F29"),await this._server.register(us,{global:!0,threshold:_.serverCompressMinSize,customTypes:e=>_.serverCompressMime.includes(e)})),this._server.addContentTypeParser(["text/xml","application/xml"],(e,o,r)=>{let n=[];o.on("data",s=>{n.push(s)}),o.on("end",()=>{try{let s=Buffer.concat(n).toString(),i=this._xmlParser.parse(s);r(null,i)}catch(s){r(s)}})}),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},(o,r)=>{_.traceHttpRequest&&this._logger.trace("ws request,ip"+r.ip+",host:"+r.hostname+",path:"+r.url);let s=(r.query.token??r.headers.authorization?.replace("Bearer","").trim())===_.publicToken;if(_.publicForceAuth&&!s){this._logger.debug("\u672A\u6388\u6743\u7684\u8BBF\u95EE"),this._logger.debug(r.url),o.close(403,"\u672A\u6388\u6743\u7684\u8BBF\u95EE");return}let i=r.params["*"],a,p,l,m=new TextDecoder("utf-8");if(i==="normal")a=async u=>{u instanceof Buffer&&(u=m.decode(u));try{let g=JSON.parse(u),d=`${g?.instanceName}-${g?.action}`,I=this._wsRoutes[d];if(I.needAuth&&!s)return this._logger.debug("\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01"),"\u60A8\u672A\u88AB\u5141\u8BB8\u8BBF\u95EE\u8BE5\u65B9\u6CD5\uFF01";let f=I.action;if(!f){this._logger.warn("unhandled message:"+u);return}let T=await f(g.data);if(T!=null){let L={id:g.id,data:T};return JSON.stringify(L)}}catch(g){return String(g)}};else{let u=i.replaceAll("/","-"),g=()=>{let d=this._wsRoutes[u];if(!d){o.send(String({error:"normal ws path:/ws/normal,custom ws path:/ws/instanceName/action\uFF01"}));return}if(d.needAuth&&!s){this._logger.debug("\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01"),o.close(403,"\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01");return}return d};a=async(d,I,f)=>{let T=g();if(!T)return;T.action.onMessage(d,I,f)},p=async(d,I)=>{let f=g();if(!f)return;f.action.onOpen(d,I)},l=async(d,I)=>{let f=g();if(!f)return;f.action.onClose(d,I)}}o.on("message",async u=>{_.traceHttpRequest&&this._logger.trace("ws on meesage, type "+typeof u);try{let g=await a(u,r,o);g!=null&&o.send(g)}catch(g){this._logger.error(g)}}),p&&p(r,o),l&&o.on("close",()=>{l(r,o),this._logger.trace("ws closed,from "+r.hostname)}),o.on("error",u=>{this._logger.error(u)})})}),this._server.all("/api/*",async(e,o)=>{_.traceHttpRequest&&this._logger.trace("api request,ip"+e.ip+",host:"+e.hostname+",path:"+e.url);let r=e.params["*"].replaceAll("/","-");if(!this._httpRoutes.has(r)){o.send("success");return}let n=this._httpRoutes.get(r);if((n.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),o.status(401),o.send("\u672A\u88AB\u6388\u6743\u7684\u8BBF\u95EE\uFF01");return}let s=n.action;try{return s.type==="normal"?o.send(await s.handler(e)):(s.handler(e,o),o)}catch(i){i instanceof xt?(o.status(401),o.send(i.message)):i instanceof _t?(o.status(400),o.send(i.message)):i instanceof yt?(o.status(404),o.send(i.message)):(o.status(500),o.send(String(i)))}}),await this._server.register(es,{root:_.publicPath,prefix:_.publicPathName}),be.env.VERIFY_FILE?.length){let e=to.resolve("."+be.env.VERIFY_FILE);ss(e)?this._server.get(be.env.VERIFY_FILE,(o,r)=>{this._logger.trace("verify service requested from "+o.url),r.send(ns(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??to.resolve(_.publicPath,"images","cover-default.png");(e.startsWith("http")||qo.existsSync(e))&&(this._sharedCover=h.fromPath(e,"binary","shared-cover.png"));let o=this._options.sharedLogoPath??to.resolve(_.publicPath,"images","logo-default.png");(o.startsWith("http")||qo.existsSync(o))&&(this._sharedLogo=h.fromPath(o,"binary","shared-logo.png"))}async _loadOnlinePlugins(){this._logger.info("loading online plugins...");let e=await this._client.request(cs("plugins",{filter:{status:{_neq:"archived"}},user_created:{_eq:this._me?.id}}));this._logger.info(e);let o=0;for(let r of e)try{let n=await import(r.name);n=n.default??n.plugin??n,await this.use(n,r),o++}catch(n){this._logger.warn(`\u8F7D\u5165\u63D2\u4EF6${r.name}\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u662F\u5426\u5DF2\u7ECF\u5B89\u88C5\u76F8\u5173npm\u4F9D\u8D56\uFF01`),this._logger.warn(n)}this._logger.info(`${o} online plugin(s) loaded`)}async use(e,o){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 r=await e(this,o?.options);if(typeof r?.init!="function"){this._logger.warn("\u63D2\u4EF6\u6CA1\u6709\u5B9E\u73B0init\u63A5\u53E3"),this._logger.warn(r);return}if(r.needOnline&&this.offlineMode){this._logger.error("\u63D2\u4EF6"+r.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 o?.name&&r.name!==o.name&&(this._logger.warn("\u5728\u7EBF\u63D2\u4EF6"+r.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"),r.name=o.name),o?.id&&(o.schecma=r.schema,o.options=o.options??{},this._onlinePluginInfos.set(o.name,o)),this._pluginHandlers.push(r),this._logger.trace("plugin "+r.name+" registered"),r}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=as(_.configServerUrl).with(is("json")).with(ls()),await this.client.login(_.configServerEmail,_.configServerPassword);let r=await this._client.request(ps());this._logger.debug("\u914D\u7F6E\u670D\u52A1\u5668\u8FDE\u63A5\u6210\u529F"),this._logger.debug(`\u5F53\u524D\u767B\u5F55\u8D26\u53F7\uFF1A${r.email}`),this._me=r,await this._loadOnlinePlugins()}this._botManager=new Mt,this._skillManager=new Bt,this._sourceManager=new Dt,this._taskTriggerManager=new Ut({cacheInstance:!1}),this._taskRunnerManager=new Lt({cacheInstance:!1}),await this._initResources(),this._logger.trace("default resources loaded");for(let r of this._pluginHandlers)if(r.init){let n=await r.init();n&&(n.bots?.forEach(s=>this._botManager.registerInstanceCreator(s.creator,s.params)),n.sources?.forEach(s=>this._sourceManager.registerInstanceCreator(s.creator,s.params)),n.skills?.forEach(s=>this._skillManager.registerInstanceCreator(s.creator,s.params)),n.taskTriggers?.forEach(s=>this._taskTriggerManager.registerInstanceCreator(s.creator,s.params)),n.taskRunners?.forEach(s=>this._taskRunnerManager.registerInstanceCreator(s.creator,s.params))),this._logger.trace("plugin "+r.name+" init")}await this._createServer(),this._logger.trace("http server created"),await(this._agentService=new Pt(this,this._options.agentServiceOptions)).init(),this._logger.trace("agent service created"),await(this._taskService=new Ft(this,this._options.taskServiceOptions)).init(),this._logger.trace("task service created");for(let r of this._pluginHandlers)r.beforeStart&&(await r.beforeStart(),this._logger.trace(`plugin ${r.name} beforeStart`));await this._initServer(),this._running=!0;for(let r of this._pluginHandlers)r.afterStart&&(await r.afterStart(),this._logger.trace(`plugin ${r.name} afterStart`));this._starting=!1,be.on("unhandledRejection",r=>{this._logger.error(r),this.emit(c.EventNames.ERROR,r)});for(let r of["SIGINT","SIGTERM"])this._logger.info("break signal received"),be.once(r,async()=>await this.stop(r));this._globalEvent.emit("APP_STARED",{title:"\u670D\u52A1\u542F\u52A8",id:Go()})}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("APP_REALOD",{title:"\u670D\u52A1\u91CD\u8F7D",id:Go()})}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 o of this._pluginHandlers)o.beforeClose&&await o.beforeClose();await ie(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"}`),be.exit(0))}registerRoutes(e,o){let r=`${e}-${o.actionName}`;this._httpRoutes.has(r)&&this._logger.warn("\u8DEF\u7531"+r+"\u5DF2\u88AB\u8986\u76D6"),this._logger.info(`${_.httpUrl}/api/${e}/${o.actionName}\u7684http\u8DEF\u7531\u5DF2\u521B\u5EFA`),this._httpRoutes.set(r,o)}registerWSHandler(e,o){let r=`${e}-${o.actionName}`;this._wsRoutes[r]&&this._logger.warn("ws\u8DEF\u7531"+r+"\u5DF2\u88AB\u8986\u76D6"),this._wsRoutes[r]=o}};export{_e as Agent,Pt as AgentService,h as AsyncFile,nt as BaiduSTTSkill,rt as BaiduTTSSkill,K as BaseDrawSkill,$ as BaseSTTSkill,B as BaseTTSSkill,A as BasicBot,Mt as BotManager,ht as CogVideoDrawSkill,ut as CogviewDrawSkill,Pe as CozeBot,Ot as CozeService,ze as CronTaskTrigger,Me as DifyAgentBot,Je as DingRobotSource,Ve as EchoTaskRunner,Nt as EventTaskTrigger,Oe as FastGPTBot,Ze as FeishuSource,mt as FishAudioTTSSkill,At as GlobalEvent,xe as GlobalEventNames,je as GlobalEventTaskTrigger,wt as HistoryMessageManager,z as InstanceBaseManager,Ee as OllamaBot,R as OpenAIBot,dt as OpenAIDrawSkill,ce as OpenAISTTSkill,pe as OpenAITTSSkill,Fe as OpenRouterBot,Ko as PPAgent,Ne as QAnythingBot,tt as QQSource,N as SchemaBaseProperties,qe as SenseVoiceSTTSkill,Le as SiliconFlowBot,gt as SiliconFlowDrawSkill,pt as SiliconFlowSTTSkill,lt as SiliconFlowTTSSkill,Yo as SimpleSchemaType,Bt as SkillManager,Ce as SkillSchemaBaseProperties,Tt as SortedPromise,_t as SourceApiMissingParamsError,yt as SourceApiNotFoundError,xt as SourceApiUnAuthorizedError,P as SourceChatMessageType,He as SourceEventTaskTrigger,V as SourceEventType,Dt as SourceManager,Ge as SoviteTTSSkill,Lt as TaskRunnerManager,Ro as TaskRunnerSchemaBaseProperties,Ft as TaskService,Se as TaskTrigger,Ut as TaskTriggerManager,at as TencentSTTSkill,ct as TencentTTSSkill,ot as WCAISource,Xe as WCOASource,Qe as WeWorkSource,Re as WenxinAgentBot,Ue as XunfeiBot,st as XunfeiSTTSkill,it as XunfeiTTSSkill,Be as YuanQiBot,$e as ZhipuBot,De as ZhipuQingyanBot,se as addWavHeader,op as apiPlugin,me as arm2wav,Z as betterMarkdown,ue as checkMessageRule,_ as config,St as createCacheManager,Po as createFormilySchema,HI as defaultPlugin,ko as detectName,ie as disposeObjects,bo as extractArticleInfo,we as extractImageUrls,vo as extractMarkdownImageTags,kt as extractMessageContentText,Kt as extractPositionInfo,ho as filterContentRule,ae as generateRandomString,vt as getEnvNumber,To as getFromMessageSummary,y as getLogger,W as getSecret,Ao as getToMessageSummary,So as hasEmoji,Co as hasMarkdown,Oo as installAndGetPluginInfo,Ct as isPhoneNumber,_o as removeEmoji,xo as removeMarkdown,bt as richText2Markdown,Wt as sleep,ee as sse,wo as stream2buffer,ke as transFileFormat,pr as transFormat,Eo as uninstallDep,te as wav2amr};
|
|
45
|
+
${i.text??""}`,"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 ut=class extends K{constructor(e,o){o.apiBase=o.apiBase?.length?o.apiBase:"https://open.bigmodel.cn";super(e,o);this._app=e;this._options=o}static params={name:"cogview-skill",desc:"CogView\u7ED8\u56FE",optionsSchema:{type:"formily",formily:{type:"object",properties:{...K.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"}}}}};async _draw(e,o){if(!e?.length){this._logger.warn("\u7ED8\u56FE\u63D0\u793A\u8BCD\u4E3A\u7A7A\uFF01");return}let r=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:o})})).json();return this._logger.debug(r),{url:r?.data?.[0].url}}};var dt=class extends K{constructor(e,o){super(e,o);this._app=e;this._options=o}static params={name:"openai-skill",desc:"OpenAI\u7ED8\u56FE",optionsSchema:{type:"formily",formily:{type:"object",properties:{...K.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"}}}}};async _draw(e,o){let r=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:o})})).json();return this._logger.debug(r),{url:r.data?.[0].url}}};var gt=class extends K{constructor(e,o){o.apiBase=o?.apiBase?.length?o.apiBase:"https://api.siliconflow.cn/v1";super(e,o);this._app=e;this._options=o}static params={name:"silicon-flow-draw-skill",desc:"\u7845\u57FA\u6D41\u52A8\u7ED8\u56FE",optionsSchema:{type:"formily",formily:{type:"object",properties:{...K.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:"{}"}}}}};async _draw(e){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,image_size:this._options.size,...this._options.customOptions??{}})})).json();if(this._logger.debug(o),o.images?.length)return{url:o.images?.[0].url};this._logger.error(o)}};import{v4 as Qn}from"uuid";var ht=class extends K{constructor(e,o){o.apiBase=o.apiBase?.length?o.apiBase:"https://open.bigmodel.cn",o.timeout=Math.max(o.timeout??180,30);super(e,o);this._app=e;this._options=o}static params={name:"cogvideo-skill",desc:"CogVideo\u89C6\u9891\u751F\u6210",optionsSchema:{type:"formily",formily:{type:"object",properties:{...K.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}}}}};async _draw(e,o){let r=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:o,with_audio:this._options.withAudio??!1,request_id:Qn()})})).json();if(this._logger.debug(r),r?.id)return new Promise(n=>{try{let s=new Date().getTime(),i=async()=>{let a=await(await fetch(`${this._options.apiBase}/api/paas/v4/async-result/${r.id}`,{method:"get",headers:{Authorization:"Bearer "+this._options.apiKey}})).json();if(a.task_status==="SUCCESS"){n({url:a.video_result?.[0].url,coverUrl:a.video_result?.[0].cover_image_url});return}else this._logger.trace("current video status for "+e+": "+JSON.stringify(a));if((new Date().getTime()-s)/1e3>this._options.timeout){this._logger.warn("\u89C6\u9891\u751F\u6210\u8D85\u65F6\uFF01"),n(void 0);return}setTimeout(i,3e3)};i()}catch(s){this._logger.error(s.message),n(void 0)}});this._logger.error("\u751F\u6210\u5931\u8D25\uFF01"),this._logger.error(r)}};var HI=async c=>({init:async()=>({skills:[{creator:t=>new Ge(t),params:Ge.params},{creator:t=>new qe(t),params:qe.params},{creator:t=>new rt(c,t),params:rt.params},{creator:t=>new nt(c,t),params:nt.params},{creator:t=>new st(c,t),params:st.params},{creator:t=>new it(c,t),params:it.params},{creator:t=>new at(c,t),params:at.params},{creator:t=>new ct(c,t),params:ct.params},{creator:t=>new ce(c,t),params:ce.params},{creator:t=>new pt(c,t),params:pt.params},{creator:t=>new pe(c,t),params:pe.params},{creator:t=>new lt(c,t),params:lt.params},{creator:t=>new mt(c,t),params:mt.params},{creator:t=>new ut(c,t),params:ut.params},{creator:t=>new dt(c,t),params:dt.params},{creator:t=>new gt(c,t),params:gt.params},{creator:t=>new ht(c,t),params:ht.params}],bots:[{creator:t=>new Me(t),params:Me.params},{creator:t=>new Pe(t),params:Pe.params},{creator:t=>new R(t),params:R.params},{creator:t=>new Oe(t),params:Oe.params},{creator:t=>new Ne(t),params:Ne.params},{creator:t=>new Re(t),params:Re.params},{creator:t=>new Be(t),params:Be.params},{creator:t=>new De(t),params:De.params},{creator:t=>new Ee(t),params:Ee.params},{creator:t=>new Fe(t),params:Fe.params},{creator:t=>new Ue(t),params:Ue.params},{creator:t=>new $e(t),params:$e.params},{creator:t=>new Le(t),params:Le.params}],sources:[{creator:t=>new Xe(t),params:Xe.params},{creator:t=>new Ke(c,t),params:Ke.params},{creator:t=>new We(t),params:We.params},{creator:t=>new Je(c,t),params:Je.params},{creator:t=>new Qe(c,t),params:Qe.params},{creator:t=>new Ze(c,t),params:Ze.params},{creator:t=>new tt(c,t),params:tt.params},{creator:t=>new ot(c,t),params:ot.params}],taskTriggers:[{creator:t=>new He(c,t),params:He.params},{creator:t=>new je(c,t),params:je.params},{creator:t=>new ze(c,t),params:ze.params}],taskRunners:[{creator:t=>new Ve(c,t),params:Ve.params}]}),needOnline:!1,name:"\u9ED8\u8BA4\u63D2\u4EF6",dispose:async()=>{}});var Bt=class extends z{};var Dt=class extends z{};var Lt=class extends z{constructor(e){e.cacheInstance=!1;super(e);this.options=e}},Ut=class extends z{constructor(e){e.cacheInstance=!1;super(e);this.options=e}};import Yn from"fastify";import Zn from"@fastify/websocket";import es from"@fastify/static";import be from"node:process";import ts from"@fastify/formbody";import os from"emittery";import{XMLParser as rs}from"fast-xml-parser";import qo from"fs";import to from"node:path";import{createReadStream as ns,existsSync as ss}from"node:fs";import{authentication as is,createDirectus as as,readItems as cs,readMe as ps,rest as ls}from"@directus/sdk";import ms from"@fastify/cors";import{v4 as Go}from"uuid";import us from"@fastify/compress";var Ko=class c extends os{constructor(e={name:"default"}){super();this._options=e;this._logger=y("app-"+this._options.name),this._globalEvent=new At(this._options.name)}static EventNames={ERROR:"error"};_server;_pluginHandlers=[];_wsRoutes={};_httpRoutes=new Map;_starting=!1;_stopping=!1;_stopped=!1;_running=!1;_agentService;_skillManager;_sourceManager;_botManager;_taskService;_taskTriggerManager;_taskRunnerManager;_xmlParser=new rs;_sharedCover;_sharedLogo;_client;_me;_globalEvent;_logger;_onlinePluginInfos=new Map;_services=new Map;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=Yn({logger:{level:"warn"}}),await this._server.register(Zn),await this._server.register(ts),await this._server.register(ms,{origin:"*"}),_.serverCompress&&(this._logger.info("\u542F\u7528\u670D\u52A1\u5668gzip\u538B\u7F29"),await this._server.register(us,{global:!0,threshold:_.serverCompressMinSize,customTypes:e=>_.serverCompressMime.includes(e)})),this._server.addContentTypeParser(["text/xml","application/xml"],(e,o,r)=>{let n=[];o.on("data",s=>{n.push(s)}),o.on("end",()=>{try{let s=Buffer.concat(n).toString(),i=this._xmlParser.parse(s);r(null,i)}catch(s){r(s)}})}),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},(o,r)=>{_.traceHttpRequest&&this._logger.trace("ws request,ip"+r.ip+",host:"+r.hostname+",path:"+r.url);let s=(r.query.token??r.headers.authorization?.replace("Bearer","").trim())===_.publicToken;if(_.publicForceAuth&&!s){this._logger.debug("\u672A\u6388\u6743\u7684\u8BBF\u95EE"),this._logger.debug(r.url),o.close(403,"\u672A\u6388\u6743\u7684\u8BBF\u95EE");return}let i=r.params["*"],a,p,l,m=new TextDecoder("utf-8");if(i==="normal")a=async u=>{u instanceof Buffer&&(u=m.decode(u));try{let g=JSON.parse(u),d=`${g?.instanceName}-${g?.action}`,I=this._wsRoutes[d];if(I.needAuth&&!s)return this._logger.debug("\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01"),"\u60A8\u672A\u88AB\u5141\u8BB8\u8BBF\u95EE\u8BE5\u65B9\u6CD5\uFF01";let f=I.action;if(!f){this._logger.warn("unhandled message:"+u);return}let T=await f(g.data);if(T!=null){let L={id:g.id,data:T};return JSON.stringify(L)}}catch(g){return String(g)}};else{let u=i.replaceAll("/","-"),g=()=>{let d=this._wsRoutes[u];if(!d){o.send(String({error:"normal ws path:/ws/normal,custom ws path:/ws/instanceName/action\uFF01"}));return}if(d.needAuth&&!s){this._logger.debug("\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01"),o.close(403,"\u672A\u6388\u6743\u7684\u8BBF\u95EE\uFF01");return}return d};a=async(d,I,f)=>{let T=g();if(!T)return;T.action.onMessage(d,I,f)},p=async(d,I)=>{let f=g();if(!f)return;f.action.onOpen(d,I)},l=async(d,I)=>{let f=g();if(!f)return;f.action.onClose(d,I)}}o.on("message",async u=>{_.traceHttpRequest&&this._logger.trace("ws on meesage, type "+typeof u);try{let g=await a(u,r,o);g!=null&&o.send(g)}catch(g){this._logger.error(g)}}),p&&p(r,o),l&&o.on("close",()=>{l(r,o),this._logger.trace("ws closed,from "+r.hostname)}),o.on("error",u=>{this._logger.error(u)})})}),this._server.all("/api/*",async(e,o)=>{_.traceHttpRequest&&this._logger.trace("api request,ip"+e.ip+",host:"+e.hostname+",path:"+e.url);let r=e.params["*"].replaceAll("/","-");if(!this._httpRoutes.has(r)){o.send("success");return}let n=this._httpRoutes.get(r);if((n.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),o.status(401),o.send("\u672A\u88AB\u6388\u6743\u7684\u8BBF\u95EE\uFF01");return}let s=n.action;try{return s.type==="normal"?o.send(await s.handler(e)):(s.handler(e,o),o)}catch(i){i instanceof xt?(o.status(401),o.send(i.message)):i instanceof _t?(o.status(400),o.send(i.message)):i instanceof yt?(o.status(404),o.send(i.message)):(o.status(500),o.send(String(i)))}}),await this._server.register(es,{root:_.publicPath,prefix:_.publicPathName}),be.env.VERIFY_FILE?.length){let e=to.resolve("."+be.env.VERIFY_FILE);ss(e)?this._server.get(be.env.VERIFY_FILE,(o,r)=>{this._logger.trace("verify service requested from "+o.url),r.send(ns(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??to.resolve(_.publicPath,"images","cover-default.png");(e.startsWith("http")||qo.existsSync(e))&&(this._sharedCover=h.fromPath(e,"binary","shared-cover.png"));let o=this._options.sharedLogoPath??to.resolve(_.publicPath,"images","logo-default.png");(o.startsWith("http")||qo.existsSync(o))&&(this._sharedLogo=h.fromPath(o,"binary","shared-logo.png"))}async _loadOnlinePlugins(){this._logger.info("loading online plugins...");let e=await this._client.request(cs("plugins",{filter:{status:{_neq:"archived"}},user_created:{_eq:this._me?.id}}));this._logger.info(e);let o=0;for(let r of e)try{let n=await import(r.name);n=n.default??n.plugin??n,await this.use(n,r),o++}catch(n){this._logger.warn(`\u8F7D\u5165\u63D2\u4EF6${r.name}\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u662F\u5426\u5DF2\u7ECF\u5B89\u88C5\u76F8\u5173npm\u4F9D\u8D56\uFF01`),this._logger.warn(n)}this._logger.info(`${o} online plugin(s) loaded`)}async use(e,o){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 r=await e(this,o?.options);if(typeof r?.init!="function"){this._logger.warn("\u63D2\u4EF6\u6CA1\u6709\u5B9E\u73B0init\u63A5\u53E3"),this._logger.warn(r);return}if(r.needOnline&&this.offlineMode){this._logger.error("\u63D2\u4EF6"+r.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 o?.name&&r.name!==o.name&&(this._logger.warn("\u5728\u7EBF\u63D2\u4EF6"+r.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"),r.name=o.name),o?.id&&(o.schecma=r.schema,o.options=o.options??{},this._onlinePluginInfos.set(o.name,o)),this._pluginHandlers.push(r),this._logger.trace("plugin "+r.name+" registered"),r}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=as(_.configServerUrl).with(is("json")).with(ls()),await this.client.login(_.configServerEmail,_.configServerPassword);let r=await this._client.request(ps());this._logger.debug("\u914D\u7F6E\u670D\u52A1\u5668\u8FDE\u63A5\u6210\u529F"),this._logger.debug(`\u5F53\u524D\u767B\u5F55\u8D26\u53F7\uFF1A${r.email}`),this._me=r,await this._loadOnlinePlugins()}this._botManager=new Mt,this._skillManager=new Bt,this._sourceManager=new Dt,this._taskTriggerManager=new Ut({cacheInstance:!1}),this._taskRunnerManager=new Lt({cacheInstance:!1}),await this._initResources(),this._logger.trace("default resources loaded");for(let r of this._pluginHandlers)if(r.init){let n=await r.init();n&&(n.bots?.forEach(s=>this._botManager.registerInstanceCreator(s.creator,s.params)),n.sources?.forEach(s=>this._sourceManager.registerInstanceCreator(s.creator,s.params)),n.skills?.forEach(s=>this._skillManager.registerInstanceCreator(s.creator,s.params)),n.taskTriggers?.forEach(s=>this._taskTriggerManager.registerInstanceCreator(s.creator,s.params)),n.taskRunners?.forEach(s=>this._taskRunnerManager.registerInstanceCreator(s.creator,s.params))),this._logger.trace("plugin "+r.name+" init")}await this._createServer(),this._logger.trace("http server created"),await(this._agentService=new Pt(this,this._options.agentServiceOptions)).init(),this._logger.trace("agent service created"),await(this._taskService=new Ft(this,this._options.taskServiceOptions)).init(),this._logger.trace("task service created");for(let r of this._pluginHandlers)r.beforeStart&&(await r.beforeStart(),this._logger.trace(`plugin ${r.name} beforeStart`));await this._initServer(),this._running=!0;for(let r of this._pluginHandlers)r.afterStart&&(await r.afterStart(),this._logger.trace(`plugin ${r.name} afterStart`));this._starting=!1,be.on("unhandledRejection",r=>{this._logger.error(r),this.emit(c.EventNames.ERROR,r)});for(let r of["SIGINT","SIGTERM"])this._logger.info("break signal received"),be.once(r,async()=>await this.stop(r));this._globalEvent.emit("APP_STARED",{title:"\u670D\u52A1\u542F\u52A8",id:Go()})}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("APP_REALOD",{title:"\u670D\u52A1\u91CD\u8F7D",id:Go()})}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 o of this._pluginHandlers)o.beforeClose&&await o.beforeClose();await ie(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"}`),be.exit(0))}registerRoutes(e,o){let r=`${e}-${o.actionName}`;this._httpRoutes.has(r)&&this._logger.warn("\u8DEF\u7531"+r+"\u5DF2\u88AB\u8986\u76D6"),this._logger.info(`${_.httpUrl}/api/${e}/${o.actionName}\u7684http\u8DEF\u7531\u5DF2\u521B\u5EFA`),this._httpRoutes.set(r,o)}registerWSHandler(e,o){let r=`${e}-${o.actionName}`;this._wsRoutes[r]&&this._logger.warn("ws\u8DEF\u7531"+r+"\u5DF2\u88AB\u8986\u76D6"),this._wsRoutes[r]=o}};export{_e as Agent,Pt as AgentService,h as AsyncFile,nt as BaiduSTTSkill,rt as BaiduTTSSkill,K as BaseDrawSkill,$ as BaseSTTSkill,B as BaseTTSSkill,A as BasicBot,Mt as BotManager,ht as CogVideoDrawSkill,ut as CogviewDrawSkill,Pe as CozeBot,Ot as CozeService,ze as CronTaskTrigger,Me as DifyAgentBot,Je as DingRobotSource,Ve as EchoTaskRunner,Nt as EventTaskTrigger,Oe as FastGPTBot,Ze as FeishuSource,mt as FishAudioTTSSkill,At as GlobalEvent,xe as GlobalEventNames,je as GlobalEventTaskTrigger,wt as HistoryMessageManager,z as InstanceBaseManager,Ee as OllamaBot,R as OpenAIBot,dt as OpenAIDrawSkill,ce as OpenAISTTSkill,pe as OpenAITTSSkill,Fe as OpenRouterBot,Ko as PPAgent,Ne as QAnythingBot,tt as QQSource,N as SchemaBaseProperties,qe as SenseVoiceSTTSkill,Le as SiliconFlowBot,gt as SiliconFlowDrawSkill,pt as SiliconFlowSTTSkill,lt as SiliconFlowTTSSkill,Yo as SimpleSchemaType,Bt as SkillManager,Ce as SkillSchemaBaseProperties,Tt as SortedPromise,_t as SourceApiMissingParamsError,yt as SourceApiNotFoundError,xt as SourceApiUnAuthorizedError,M as SourceChatMessageType,He as SourceEventTaskTrigger,V as SourceEventType,Dt as SourceManager,Ge as SoviteTTSSkill,Lt as TaskRunnerManager,Ro as TaskRunnerSchemaBaseProperties,Ft as TaskService,Se as TaskTrigger,Ut as TaskTriggerManager,at as TencentSTTSkill,ct as TencentTTSSkill,ot as WCAISource,Xe as WCOASource,Qe as WeWorkSource,Re as WenxinAgentBot,Ue as XunfeiBot,st as XunfeiSTTSkill,it as XunfeiTTSSkill,Be as YuanQiBot,$e as ZhipuBot,De as ZhipuQingyanBot,se as addWavHeader,op as apiPlugin,me as arm2wav,Z as betterMarkdown,ue as checkMessageRule,_ as config,St as createCacheManager,Po as createFormilySchema,HI as defaultPlugin,ko as detectName,ie as disposeObjects,bo as extractArticleInfo,we as extractImageUrls,vo as extractMarkdownImageTags,kt as extractMessageContentText,Kt as extractPositionInfo,ho as filterContentRule,ae as generateRandomString,vt as getEnvNumber,To as getFromMessageSummary,y as getLogger,W as getSecret,Ao as getToMessageSummary,So as hasEmoji,Co as hasMarkdown,Oo as installAndGetPluginInfo,Ct as isPhoneNumber,_o as removeEmoji,xo as removeMarkdown,bt as richText2Markdown,Wt as sleep,ee as sse,wo as stream2buffer,ke as transFileFormat,pr as transFormat,Eo as uninstallDep,te as wav2amr};
|