diff --git a/README.md b/README.md index 6d0e9710..c9bfe2d4 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,4 @@ -![chatgpt-plugin](https://user-images.githubusercontent.com/21212372/232115814-de9a0633-371f-4733-8da0-dd6e912c8a1e.png) -

云崽系机器人的智能聊天插件

+![chatgpt-plugin](https://socialify.git.ci/ikechan8370/chatgpt-plugin/image?description=1&font=Jost&forks=1&issues=1&language=1&name=1&owner=1&pulls=1&stargazers=1&theme=Light)
@@ -43,6 +42,9 @@ * 2023-09-10 支持来自claude.ai的claude-2模型 * 2023-10-19 支持读取文件,(目前适配必应模式和Claude2模式) * 2023-10-25 增加支持通义千问官方API +* 2023-12-01 持续优先适配Shamrock +* 2023-12-14 增加支持Gemini 官方API + ### 如果觉得这个插件有趣或者对你有帮助,请点一个star吧! ## 版本要求 diff --git a/apps/chat.js b/apps/chat.js index 631d2f24..87a0dd0f 100644 --- a/apps/chat.js +++ b/apps/chat.js @@ -1,83 +1,91 @@ import plugin from '../../../lib/plugins/plugin.js' import _ from 'lodash' -import {Config, defaultOpenAIAPI} from '../utils/config.js' -import {v4 as uuid} from 'uuid' +import { Config, defaultOpenAIAPI } from '../utils/config.js' +import { v4 as uuid } from 'uuid' import delay from 'delay' -import {ChatGPTAPI} from '../utils/openai/chatgpt-api.js' -import {BingAIClient} from '@waylaidwanderer/chatgpt-api' +import { ChatGPTAPI } from '../utils/openai/chatgpt-api.js' import SydneyAIClient from '../utils/SydneyAIClient.js' -import {PoeClient} from '../utils/poe/index.js' +import { PoeClient } from '../utils/poe/index.js' import AzureTTS from '../utils/tts/microsoft-azure.js' import VoiceVoxTTS from '../utils/tts/voicevox.js' import Version from '../utils/version.js' import { - completeJSON, - extractContentFromFile, - formatDate, - formatDate2, - generateAudio, - getDefaultReplySetting, - getImageOcrText, - getImg, - getMasterQQ, - getMaxModelTokens, - getMessageById, - getUin, - getUserData, - getUserReplySetting, - isCN, - isImage, - makeForwardMsg, - randomString, - render, - renderUrl, - upsertMessage + completeJSON, + extractContentFromFile, + formatDate, + formatDate2, + generateAudio, + getDefaultReplySetting, + getImageOcrText, + getImg, + getMasterQQ, + getMaxModelTokens, + getMessageById, + getOrDownloadFile, + getUin, + getUserData, + getUserReplySetting, + isCN, + isImage, + makeForwardMsg, + randomString, + render, + renderUrl, + upsertMessage } from '../utils/common.js' -import {ChatGPTPuppeteer} from '../utils/browser.js' -import {KeyvFile} from 'keyv-file' -import {OfficialChatGPTClient} from '../utils/message.js' +import { ChatGPTPuppeteer } from '../utils/browser.js' +import { KeyvFile } from 'keyv-file' +import { OfficialChatGPTClient } from '../utils/message.js' import fetch from 'node-fetch' -import {deleteConversation, getConversations, getLatestMessageIdByConversationId} from '../utils/conversation.js' -import {convertSpeaker, speakers} from '../utils/tts.js' +import { deleteConversation, getConversations, getLatestMessageIdByConversationId } from '../utils/conversation.js' +import { convertSpeaker, speakers } from '../utils/tts.js' import ChatGLMClient from '../utils/chatglm.js' -import {convertFaces} from '../utils/face.js' -import {SlackClaudeClient} from '../utils/slack/slackClient.js' -import {getPromptByName} from '../utils/prompts.js' +import { convertFaces } from '../utils/face.js' +import { SlackClaudeClient } from '../utils/slack/slackClient.js' +import { getPromptByName } from '../utils/prompts.js' import BingDrawClient from '../utils/BingDraw.js' import XinghuoClient from '../utils/xinghuo/xinghuo.js' import Bard from '../utils/bard.js' -import {JinyanTool} from '../utils/tools/JinyanTool.js' -import {SendVideoTool} from '../utils/tools/SendBilibiliTool.js' -import {KickOutTool} from '../utils/tools/KickOutTool.js' -import {EditCardTool} from '../utils/tools/EditCardTool.js' -import {SearchVideoTool} from '../utils/tools/SearchBilibiliTool.js' -import {SearchMusicTool} from '../utils/tools/SearchMusicTool.js' -import {QueryStarRailTool} from '../utils/tools/QueryStarRailTool.js' -import {WebsiteTool} from '../utils/tools/WebsiteTool.js' -import {WeatherTool} from '../utils/tools/WeatherTool.js' -import {SerpTool} from '../utils/tools/SerpTool.js' -import {SerpIkechan8370Tool} from '../utils/tools/SerpIkechan8370Tool.js' -import {SendPictureTool} from '../utils/tools/SendPictureTool.js' -import {SerpImageTool} from '../utils/tools/SearchImageTool.js' -import {ImageCaptionTool} from '../utils/tools/ImageCaptionTool.js' -import {SendAudioMessageTool} from '../utils/tools/SendAudioMessageTool.js' -import {ProcessPictureTool} from '../utils/tools/ProcessPictureTool.js' -import {APTool} from '../utils/tools/APTool.js' -import {QueryGenshinTool} from '../utils/tools/QueryGenshinTool.js' -import {HandleMessageMsgTool} from '../utils/tools/HandleMessageMsgTool.js' -import {QueryUserinfoTool} from '../utils/tools/QueryUserinfoTool.js' -import {EliMovieTool} from '../utils/tools/EliMovieTool.js' -import {EliMusicTool} from '../utils/tools/EliMusicTool.js' -import {SendMusicTool} from '../utils/tools/SendMusicTool.js' -import {SendDiceTool} from '../utils/tools/SendDiceTool.js' -import {SendAvatarTool} from '../utils/tools/SendAvatarTool.js' -import {SendMessageToSpecificGroupOrUserTool} from '../utils/tools/SendMessageToSpecificGroupOrUserTool.js' -import {SetTitleTool} from '../utils/tools/SetTitleTool.js' -import {solveCaptchaOneShot} from '../utils/bingCaptcha.js' -import {ClaudeAIClient} from '../utils/claude.ai/index.js' -import {getProxy} from '../utils/proxy.js' -import {QwenApi} from '../utils/alibaba/qwen-api.js' -import {getChatHistoryGroup} from '../utils/chat.js' +import { JinyanTool } from '../utils/tools/JinyanTool.js' +import { SendVideoTool } from '../utils/tools/SendBilibiliTool.js' +import { KickOutTool } from '../utils/tools/KickOutTool.js' +import { EditCardTool } from '../utils/tools/EditCardTool.js' +import { SearchVideoTool } from '../utils/tools/SearchBilibiliTool.js' +import { SearchMusicTool } from '../utils/tools/SearchMusicTool.js' +import { QueryStarRailTool } from '../utils/tools/QueryStarRailTool.js' +import { WebsiteTool } from '../utils/tools/WebsiteTool.js' +import { WeatherTool } from '../utils/tools/WeatherTool.js' +import { SerpTool } from '../utils/tools/SerpTool.js' +import { SerpIkechan8370Tool } from '../utils/tools/SerpIkechan8370Tool.js' +import { SendPictureTool } from '../utils/tools/SendPictureTool.js' +import { SerpImageTool } from '../utils/tools/SearchImageTool.js' +import { ImageCaptionTool } from '../utils/tools/ImageCaptionTool.js' +import { SendAudioMessageTool } from '../utils/tools/SendAudioMessageTool.js' +import { ProcessPictureTool } from '../utils/tools/ProcessPictureTool.js' +import { APTool } from '../utils/tools/APTool.js' +import { QueryGenshinTool } from '../utils/tools/QueryGenshinTool.js' +import { HandleMessageMsgTool } from '../utils/tools/HandleMessageMsgTool.js' +import { QueryUserinfoTool } from '../utils/tools/QueryUserinfoTool.js' +import { EliMovieTool } from '../utils/tools/EliMovieTool.js' +import { EliMusicTool } from '../utils/tools/EliMusicTool.js' +import { SendMusicTool } from '../utils/tools/SendMusicTool.js' +import { SendDiceTool } from '../utils/tools/SendDiceTool.js' +import { SendAvatarTool } from '../utils/tools/SendAvatarTool.js' +import { SendMessageToSpecificGroupOrUserTool } from '../utils/tools/SendMessageToSpecificGroupOrUserTool.js' +import { SetTitleTool } from '../utils/tools/SetTitleTool.js' +import { solveCaptchaOneShot } from '../utils/bingCaptcha.js' +import { ClaudeAIClient } from '../utils/claude.ai/index.js' +import { getProxy } from '../utils/proxy.js' +import { QwenApi } from '../utils/alibaba/qwen-api.js' +import { getChatHistoryGroup } from '../utils/chat.js' +import { CustomGoogleGeminiClient } from '../client/CustomGoogleGeminiClient.js' +import { resizeAndCropImage } from '../utils/dalle.js' +import fs from 'fs' + +const roleMap = { + owner: 'group owner', + admin: 'group administrator' +} try { await import('@azure/openai') @@ -97,6 +105,9 @@ try { } let version = Config.version let proxy = getProxy() + +const originalValues = ['星火', '通义千问', '克劳德', '克劳德2', '必应', 'api', 'API', 'api3', 'API3', 'glm', '巴德'] +const correspondingValues = ['xh', 'qwen', 'claude', 'claude2', 'bing', 'api', 'api', 'api3', 'api3', 'chatglm', 'bard'] /** * 每个对话保留的时长。单个对话内ai是保留上下文的。超时后销毁对话,再次对话创建新的对话。 * 单位:秒 @@ -191,6 +202,12 @@ export class chatgpt extends plugin { /** 执行方法 */ fnc: 'qwen' }, + { + /** 命令正则匹配 */ + reg: '^#gemini[sS]*', + /** 执行方法 */ + fnc: 'gemini' + }, { /** 命令正则匹配 */ reg: toggleMode === 'at' ? '^[^#][sS]*' : '^#chat[^gpt][sS]*', @@ -204,11 +221,11 @@ export class chatgpt extends plugin { permission: 'master' }, { - reg: '^#(chatgpt)?(结束|新开|摧毁|毁灭|完结)对话([sS]*)', + reg: '^#(chatgpt|星火|通义千问|克劳德|克劳德2|必应|api|API|api3|API3|glm|巴德)?(结束|新开|摧毁|毁灭|完结)对话([sS]*)', fnc: 'destroyConversations' }, { - reg: '^#(chatgpt)?(结束|新开|摧毁|毁灭|完结)全部对话$', + reg: '^#(chatgpt|星火|通义千问|克劳德|克劳德2|必应|api|API|api3|API3|glm|巴德)?(结束|新开|摧毁|毁灭|完结)全部对话$', fnc: 'endAllConversations', permission: 'master' }, @@ -299,7 +316,15 @@ export class chatgpt extends plugin { */ async destroyConversations (e) { const userData = await getUserData(e.user_id) - const use = (userData.mode === 'default' ? null : userData.mode) || await redis.get('CHATGPT:USE') + const match = e.msg.trim().match('^#?(.*)(结束|新开|摧毁|毁灭|完结)对话') + console.log(match[1]) + let use + if (match[1] && match[1] != 'chatgpt') { + use = correspondingValues[originalValues.indexOf(match[1])] + } else { + use = (userData.mode === 'default' ? null : userData.mode) || await redis.get('CHATGPT:USE') + } + console.log(use) await redis.del(`CHATGPT:WRONG_EMOTION:${(e.isGroup && Config.groupMerge) ? e.group_id.toString() : e.sender.user_id}`) if (use === 'claude') { // let client = new SlackClaudeClient({ @@ -386,6 +411,14 @@ export class chatgpt extends plugin { await redis.del(`CHATGPT:CONVERSATIONS_QWEN:${e.sender.user_id}`) await this.reply('已结束当前对话,请@我进行聊天以开启新的对话', true) } + } else if (use === 'gemini') { + let c = await redis.get(`CHATGPT:CONVERSATIONS_GEMINI:${e.sender.user_id}`) + if (!c) { + await this.reply('当前没有开启对话', true) + } else { + await redis.del(`CHATGPT:CONVERSATIONS_GEMINI:${e.sender.user_id}`) + await this.reply('已结束当前对话,请@我进行聊天以开启新的对话', true) + } } else if (use === 'bing') { let c = await redis.get(`CHATGPT:CONVERSATIONS_BING:${e.sender.user_id}`) if (!c) { @@ -455,6 +488,14 @@ export class chatgpt extends plugin { await redis.del(`CHATGPT:CONVERSATIONS_QWEN:${qq}`) await this.reply(`已结束${atUser}的对话,TA仍可以@我进行聊天以开启新的对话`, true) } + } else if (use === 'gemini') { + let c = await redis.get(`CHATGPT:CONVERSATIONS_GEMINI:${qq}`) + if (!c) { + await this.reply(`当前${atUser}没有开启对话`, true) + } else { + await redis.del(`CHATGPT:CONVERSATIONS_GEMINI:${qq}`) + await this.reply(`已结束${atUser}的对话,TA仍可以@我进行聊天以开启新的对话`, true) + } } else if (use === 'bing') { let c = await redis.get(`CHATGPT:CONVERSATIONS_BING:${qq}`) if (!c) { @@ -476,7 +517,15 @@ export class chatgpt extends plugin { } async endAllConversations (e) { - let use = await redis.get('CHATGPT:USE') || 'api' + const match = e.msg.trim().match('^#?(.*)(结束|新开|摧毁|毁灭|完结)全部对话') + console.log(match[1]) + let use + if (match[1] && match[1] != 'chatgpt') { + use = correspondingValues[originalValues.indexOf(match[1])] + } else { + use = await redis.get('CHATGPT:USE') || 'api' + } + console.log(use) let deleted = 0 switch (use) { case 'claude': { @@ -578,6 +627,18 @@ export class chatgpt extends plugin { } break } + case 'gemini': { + let qcs = await redis.keys('CHATGPT:CONVERSATIONS_GEMINI:*') + for (let i = 0; i < qcs.length; i++) { + await redis.del(qcs[i]) + // todo clean last message id + if (Config.debug) { + logger.info('delete gemini conversation bind: ' + qcs[i]) + } + deleted++ + } + break + } } await this.reply(`结束了${deleted}个用户的对话。`, true) } @@ -797,7 +858,7 @@ export class chatgpt extends plugin { * #chatgpt */ async chatgpt (e) { - let msg = Version.isTrss ? e.msg : e.raw_message + let msg = (Version.isTrss || e.adapter === 'shamrock') ? e.msg : e.raw_message let prompt if (this.toggleMode === 'at') { if (!msg || e.msg?.startsWith('#')) { @@ -1073,6 +1134,10 @@ export class chatgpt extends plugin { key = `CHATGPT:CONVERSATIONS_QWEN:${(e.isGroup && Config.groupMerge) ? e.group_id.toString() : e.sender.user_id}` break } + case 'gemini': { + key = `CHATGPT:CONVERSATIONS_GEMINI:${(e.isGroup && Config.groupMerge) ? e.group_id.toString() : e.sender.user_id}` + break + } } let ctime = new Date() previousConversation = (key ? await redis.get(key) : null) || JSON.stringify({ @@ -1368,155 +1433,39 @@ export class chatgpt extends plugin { } async chatgpt1 (e) { - if (!Config.allowOtherMode) { - return false - } - let ats = e.message.filter(m => m.type === 'at') - if (!(e.atme || e.atBot) && ats.length > 0) { - if (Config.debug) { - logger.mark('艾特别人了,没艾特我,忽略#chat1') - } - return false - } - let prompt = _.replace(e.raw_message.trimStart(), '#chat1', '').trim() - if (prompt.length === 0) { - return false - } - await this.abstractChat(e, prompt, 'api') - return true + return await this.otherMode(e, 'api', '#chat1') } async chatgpt3 (e) { - if (!Config.allowOtherMode) { - return false - } - let ats = e.message.filter(m => m.type === 'at') - if (!(e.atme || e.atBot) && ats.length > 0) { - if (Config.debug) { - logger.mark('艾特别人了,没艾特我,忽略#chat3') - } - return false - } - let prompt = _.replace(e.raw_message.trimStart(), '#chat3', '').trim() - if (prompt.length === 0) { - return false - } - await this.abstractChat(e, prompt, 'api3') - return true + return await this.otherMode(e, 'api3', '#chat3') } async chatglm (e) { - if (!Config.allowOtherMode) { - return false - } - let ats = e.message.filter(m => m.type === 'at') - if (!(e.atme || e.atBot) && ats.length > 0) { - if (Config.debug) { - logger.mark('艾特别人了,没艾特我,忽略#chatglm') - } - return false - } - let prompt = _.replace(e.raw_message.trimStart(), '#chatglm', '').trim() - if (prompt.length === 0) { - return false - } - await this.abstractChat(e, prompt, 'chatglm') - return true + return await this.otherMode(e, 'chatglm') } async bing (e) { - if (!Config.allowOtherMode) { - return false - } - let ats = e.message.filter(m => m.type === 'at') - if (!(e.atme || e.atBot) && ats.length > 0) { - if (Config.debug) { - logger.mark('艾特别人了,没艾特我,忽略#bing') - } - return false - } - let prompt = _.replace(e.raw_message.trimStart(), '#bing', '').trim() - if (prompt.length === 0) { - return false - } - await this.abstractChat(e, prompt, 'bing') - return true + return await this.otherMode(e, 'bing') } async claude2 (e) { - if (!Config.allowOtherMode) { - return false - } - let ats = e.message.filter(m => m.type === 'at') - if (!(e.atme || e.atBot) && ats.length > 0) { - if (Config.debug) { - logger.mark('艾特别人了,没艾特我,忽略#claude2') - } - return false - } - let prompt = _.replace(e.raw_message.trimStart(), '#claude2', '').trim() - if (prompt.length === 0) { - return false - } - await this.abstractChat(e, prompt, 'claude2') - return true + return await this.otherMode(e, 'claude2') } async claude (e) { - if (!Config.allowOtherMode) { - return false - } - let ats = e.message.filter(m => m.type === 'at') - if (!(e.atme || e.atBot) && ats.length > 0) { - if (Config.debug) { - logger.mark('艾特别人了,没艾特我,忽略#claude') - } - return false - } - let prompt = _.replace(e.raw_message.trimStart(), '#claude', '').trim() - if (prompt.length === 0) { - return false - } - await this.abstractChat(e, prompt, 'claude') - return true + return await this.otherMode(e, 'claude') } async qwen (e) { - if (!Config.allowOtherMode) { - return false - } - let ats = e.message.filter(m => m.type === 'at') - if (!(e.atme || e.atBot) && ats.length > 0) { - if (Config.debug) { - logger.mark('艾特别人了,没艾特我,忽略#xh') - } - return false - } - let prompt = _.replace(e.raw_message.trimStart(), '#qwen', '').trim() - if (prompt.length === 0) { - return false - } - await this.abstractChat(e, prompt, 'qwen') - return true + return await this.otherMode(e, 'gemini') + } + + async gemini (e) { + return await this.otherMode(e, 'gemini') } async xh (e) { - if (!Config.allowOtherMode) { - return false - } - let ats = e.message.filter(m => m.type === 'at') - if (!(e.atme || e.atBot) && ats.length > 0) { - if (Config.debug) { - logger.mark('艾特别人了,没艾特我,忽略#xh') - } - return false - } - let prompt = _.replace(e.raw_message.trimStart(), '#xh', '').trim() - if (prompt.length === 0) { - return false - } - await this.abstractChat(e, prompt, 'xh') - return true + return await this.otherMode(e, 'xh') } async cacheContent (e, use, content, prompt, quote = [], mood = '', suggest = '', imgUrls = []) { @@ -1576,48 +1525,38 @@ export class chatgpt extends plugin { } const userData = await getUserData(e.user_id) const useCast = userData.cast || {} - switch (use) { - case 'browser': { + if (use === 'browser') { + { return await this.chatgptBrowserBased(prompt, conversation) } - case 'bing': { + } else if (use === 'bing') { + { let throttledTokens = [] - let { bingToken, allThrottled } = await getAvailableBingToken(conversation, throttledTokens) + let { + bingToken, + allThrottled + } = await getAvailableBingToken(conversation, throttledTokens) let cookies if (bingToken?.indexOf('=') > -1) { cookies = bingToken } let bingAIClient - if (Config.toneStyle === 'Sydney' || Config.toneStyle === 'Custom') { - const cacheOptions = { - namespace: Config.toneStyle, - store: new KeyvFile({ filename: 'cache.json' }) - } - bingAIClient = new SydneyAIClient({ - userToken: bingToken, // "_U" cookie from bing.com - cookies, - debug: Config.debug, - cache: cacheOptions, - user: e.sender.user_id, - proxy: Config.proxy - }) - // Sydney不实现上下文传递,删除上下文索引 - delete conversation.clientId - delete conversation.invocationId - delete conversation.conversationSignature - } else { - let bingOption = { - userToken: bingToken, // "_U" cookie from bing.com - cookies, - debug: Config.debug, - proxy: Config.proxy, - host: Config.sydneyReverseProxy - } - if (Config.proxy && Config.sydneyReverseProxy && !Config.sydneyForceUseReverse) { - delete bingOption.host - } - bingAIClient = new BingAIClient(bingOption) + const cacheOptions = { + namespace: Config.toneStyle, + store: new KeyvFile({ filename: 'cache.json' }) } + bingAIClient = new SydneyAIClient({ + userToken: bingToken, // "_U" cookie from bing.com + cookies, + debug: Config.debug, + cache: cacheOptions, + user: e.sender.user_id, + proxy: Config.proxy + }) + // Sydney不实现上下文传递,删除上下文索引 + delete conversation.clientId + delete conversation.invocationId + delete conversation.conversationSignature let response let reply = '' let retry = 3 @@ -1634,74 +1573,85 @@ export class chatgpt extends plugin { } // 重新拿存储的token,因为可能之前有过期的被删了 let abtrs = await getAvailableBingToken(conversation, throttledTokens) - if (Config.toneStyle === 'Sydney' || Config.toneStyle === 'Custom') { - bingToken = abtrs.bingToken - // eslint-disable-next-line no-unused-vars - allThrottled = abtrs.allThrottled - if (bingToken?.indexOf('=') > -1) { - cookies = bingToken - } - if (!bingAIClient.opts) { - bingAIClient.opts = {} - } - bingAIClient.opts.userToken = bingToken - bingAIClient.opts.cookies = cookies - // opt.messageType = allThrottled ? 'Chat' : 'SearchQuery' - if (Config.enableGroupContext && e.isGroup && typeof e.group.getMemberMap === 'function') { - try { - opt.groupId = e.group_id - opt.qq = e.sender.user_id - opt.nickname = e.sender.card - opt.groupName = e.group.name || e.group_name - opt.botName = e.isGroup ? (e.group.pickMember(getUin(e)).card || e.group.pickMember(getUin(e)).nickname) : e.bot.nickname - let master = (await getMasterQQ())[0] - if (master && e.group) { - opt.masterName = e.group.pickMember(parseInt(master)).card || e.group.pickMember(parseInt(master)).nickname - } - if (master && !e.group) { - opt.masterName = e.bot.getFriendList().get(parseInt(master))?.nickname - } - opt.chats = await getChatHistoryGroup(e, Config.groupContextLength) - } catch (err) { - logger.warn('获取群聊聊天记录失败,本次对话不携带聊天记录', err) - } - } - let toSummaryFileContent + bingToken = abtrs.bingToken + // eslint-disable-next-line no-unused-vars + allThrottled = abtrs.allThrottled + if (bingToken?.indexOf('=') > -1) { + cookies = bingToken + } + if (!bingAIClient.opts) { + bingAIClient.opts = {} + } + bingAIClient.opts.userToken = bingToken + bingAIClient.opts.cookies = cookies + // opt.messageType = allThrottled ? 'Chat' : 'SearchQuery' + if (Config.enableGroupContext && e.isGroup && typeof e.group.getMemberMap === 'function') { try { - if (e.source) { - let msgs = e.isGroup ? await e.group.getChatHistory(e.source.seq, 1) : await e.friend.getChatHistory(e.source.time, 1) - let sourceMsg = msgs[0] - let fileMsgElem = sourceMsg.message.find(msg => msg.type === 'file') - if (fileMsgElem) { - toSummaryFileContent = await extractContentFromFile(fileMsgElem, e) - } + opt.groupId = e.group_id + opt.qq = e.sender.user_id + opt.nickname = e.sender.card + opt.groupName = e.group.name || e.group_name + opt.botName = e.isGroup ? (e.group.pickMember(getUin(e)).card || e.group.pickMember(getUin(e)).nickname) : e.bot.nickname + let master = (await getMasterQQ())[0] + if (master && e.group) { + opt.masterName = e.group.pickMember(parseInt(master)).card || e.group.pickMember(parseInt(master)).nickname + } + if (master && !e.group) { + opt.masterName = e.bot.getFriendList().get(parseInt(master))?.nickname } + opt.chats = await getChatHistoryGroup(e, Config.groupContextLength) } catch (err) { - logger.warn('读取文件内容出错, 忽略文件内容', err) - } - opt.toSummaryFileContent = toSummaryFileContent - } else { - // 重新创建client,因为token可能换到别的了 - if (bingToken?.indexOf('=') > -1) { - cookies = bingToken + logger.warn('获取群聊聊天记录失败,本次对话不携带聊天记录', err) } - let bingOption = { - userToken: abtrs.bingToken, // "_U" cookie from bing.com - cookies, - debug: Config.debug, - proxy: Config.proxy, - host: Config.sydneyReverseProxy - } - if (Config.proxy && Config.sydneyReverseProxy && !Config.sydneyForceUseReverse) { - delete bingOption.host + } + let toSummaryFileContent + try { + if (e.source) { + let seq = e.isGroup ? e.source.seq : e.source.time + if (e.adapter === 'shamrock') { + seq = e.source.message_id + } + let msgs = e.isGroup ? await e.group.getChatHistory(seq, 1) : await e.friend.getChatHistory(seq, 1) + let sourceMsg = msgs[msgs.length - 1] + let fileMsgElem = sourceMsg.file || sourceMsg.message.find(msg => msg.type === 'file') + if (fileMsgElem) { + toSummaryFileContent = await extractContentFromFile(fileMsgElem, e) + } } - bingAIClient = new BingAIClient(bingOption) + } catch (err) { + logger.warn('读取文件内容出错, 忽略文件内容', err) } + opt.toSummaryFileContent = toSummaryFileContent // 写入图片数据 if (Config.sydneyImageRecognition) { const image = await getImg(e) opt.imageUrl = image ? image[0] : undefined } + if (Config.enableGenerateContents) { + opt.onImageCreateRequest = prompt => { + logger.mark(`开始生成内容:${prompt}`) + if (Config.bingAPDraw) { + // 调用第三方API进行绘图 + let apDraw = new APTool() + apDraw.func({ + prompt + }, e) + } else { + let client = new BingDrawClient({ + baseUrl: Config.sydneyReverseProxy, + userToken: bingToken + }) + redis.set(`CHATGPT:DRAW:${e.sender.user_id}`, 'c', { EX: 30 }).then(() => { + try { + client.getImages(prompt, e) + } catch (err) { + redis.del(`CHATGPT:DRAW:${e.sender.user_id}`) + e.reply('绘图失败:' + err) + } + }) + } + } + } response = await bingAIClient.sendMessage(prompt, opt, (token) => { reply += token }) @@ -1727,32 +1677,6 @@ export class chatgpt extends plugin { }) } } - // 处理内容生成的图片 - if (response.details.imageTag) { - if (Config.debug) { - logger.mark(`开始生成内容:${response.details.imageTag}`) - } - if (Config.bingAPDraw) { - // 调用第三方API进行绘图 - let apDraw = new APTool() - apDraw.func({ - prompt: response.details.imageTag - }, e) - } else { - let client = new BingDrawClient({ - baseUrl: Config.sydneyReverseProxy, - userToken: bingToken - }) - await redis.set(`CHATGPT:DRAW:${e.sender.user_id}`, 'c', { EX: 30 }) - try { - await client.getImages(response.details.imageTag, e) - } catch (err) { - await redis.del(`CHATGPT:DRAW:${e.sender.user_id}`) - await e.reply('绘图失败:' + err) - } - } - } - // 如果token曾经有异常,则清除异常 let Tokens = JSON.parse((await redis.get('CHATGPT:BING_TOKENS')) || '[]') const TokenIndex = Tokens?.findIndex(element => element.Token === abtrs.bingToken) @@ -1768,7 +1692,7 @@ export class chatgpt extends plugin { const { maxConv } = error if (message && typeof message === 'string' && message.indexOf('CaptchaChallenge') > -1) { if (bingToken) { - if (maxConv >= 20) { + if (maxConv >= 20 && Config.bingCaptchaOneShotUrl) { // maxConv为30说明token有效,可以通过解验证码码服务过码 await e.reply('出现必应验证码,尝试解决中') try { @@ -1777,6 +1701,7 @@ export class chatgpt extends plugin { await e.reply('验证码已解决') } else { logger.error(captchaResolveResult) + errorMessage = message await e.reply('验证码解决失败: ' + captchaResolveResult.error) retry = 0 } @@ -1787,60 +1712,60 @@ export class chatgpt extends plugin { } } else { // 未登录用户maxConv目前为5或10,出验证码没救 - logger.warn(`token [${bingToken}] 无效或已过期,如确认token无误,请前往网页版必应对话一次`) + logger.warn(`token [${bingToken}] 出现必应验证码,请前往网页版或app手动解决`) + errorMessage = message retry = 0 } } else { retry = 0 } - } else - if (message && typeof message === 'string' && message.indexOf('限流') > -1) { - throttledTokens.push(bingToken) - let bingTokens = JSON.parse(await redis.get('CHATGPT:BING_TOKENS')) - const badBingToken = bingTokens.findIndex(element => element.Token === bingToken) - const now = new Date() - const hours = now.getHours() - now.setHours(hours + 6) - bingTokens[badBingToken].State = '受限' - bingTokens[badBingToken].DisactivationTime = now - await redis.set('CHATGPT:BING_TOKENS', JSON.stringify(bingTokens)) + } else if (message && typeof message === 'string' && message.indexOf('限流') > -1) { + throttledTokens.push(bingToken) + let bingTokens = JSON.parse(await redis.get('CHATGPT:BING_TOKENS')) + const badBingToken = bingTokens.findIndex(element => element.Token === bingToken) + const now = new Date() + const hours = now.getHours() + now.setHours(hours + 6) + bingTokens[badBingToken].State = '受限' + bingTokens[badBingToken].DisactivationTime = now + await redis.set('CHATGPT:BING_TOKENS', JSON.stringify(bingTokens)) // 不减次数 - } else if (message && typeof message === 'string' && message.indexOf('UnauthorizedRequest') > -1) { + } else if (message && typeof message === 'string' && message.indexOf('UnauthorizedRequest') > -1) { // token过期了 - let bingTokens = JSON.parse(await redis.get('CHATGPT:BING_TOKENS')) - const badBingToken = bingTokens.findIndex(element => element.Token === bingToken) - if (badBingToken > 0) { - // 可能是微软抽风,给三次机会 - if (bingTokens[badBingToken]?.exception) { - if (bingTokens[badBingToken].exception <= 3) { - bingTokens[badBingToken].exception += 1 - } else { - bingTokens[badBingToken].exception = 0 - bingTokens[badBingToken].State = '过期' - } + let bingTokens = JSON.parse(await redis.get('CHATGPT:BING_TOKENS')) + const badBingToken = bingTokens.findIndex(element => element.Token === bingToken) + if (badBingToken > 0) { + // 可能是微软抽风,给三次机会 + if (bingTokens[badBingToken]?.exception) { + if (bingTokens[badBingToken].exception <= 3) { + bingTokens[badBingToken].exception += 1 } else { - bingTokens[badBingToken].exception = 1 + bingTokens[badBingToken].exception = 0 + bingTokens[badBingToken].State = '过期' } - await redis.set('CHATGPT:BING_TOKENS', JSON.stringify(bingTokens)) } else { - retry = retry - 1 + bingTokens[badBingToken].exception = 1 } - errorMessage = 'UnauthorizedRequest:必应token不正确或已过期' - // logger.warn(`token${bingToken}疑似不存在或已过期,再试试`) - // retry = retry - 1 + await redis.set('CHATGPT:BING_TOKENS', JSON.stringify(bingTokens)) } else { - retry-- - errorMessage = message === 'Timed out waiting for response. Try enabling debug mode to see more information.' ? (reply ? `${reply}\n不行了,我的大脑过载了,处理不过来了!` : '必应的小脑瓜不好使了,不知道怎么回答!') : message + retry = retry - 1 } + errorMessage = 'UnauthorizedRequest:必应token不正确或已过期' + // logger.warn(`token${bingToken}疑似不存在或已过期,再试试`) + // retry = retry - 1 + } else { + retry-- + errorMessage = message === 'Timed out waiting for response. Try enabling debug mode to see more information.' ? (reply ? `${reply}\n不行了,我的大脑过载了,处理不过来了!` : '必应的小脑瓜不好使了,不知道怎么回答!') : message + } } } while (retry > 0) if (errorMessage) { response = response || {} if (errorMessage.includes('CaptchaChallenge')) { if (bingToken) { - errorMessage = '出现验证码,请使用当前账户前往https://www.bing.com/chat或Edge侧边栏手动解除验证码' + errorMessage = '出现验证码,请使用当前账户前往https://www.bing.com/chat或Edge侧边栏或移动端APP手动解除验证码' } else { - errorMessage = '出现验证码,且未配置必应账户,请尝试更换代理/反代或绑定必应账户以解除验证码' + errorMessage = '未配置必应账户,请绑定必应账户再使用必应模式' } } return { @@ -1866,7 +1791,8 @@ export class chatgpt extends plugin { } } } - case 'api3': { + } else if (use === 'api3') { + { // official without cloudflare let accessToken = await redis.get('CHATGPT:TOKEN') if (!accessToken) { @@ -1890,7 +1816,8 @@ export class chatgpt extends plugin { } return sendMessageResult } - case 'chatglm': { + } else if (use === 'chatglm') { + { const cacheOptions = { namespace: 'chatglm_6b', store: new KeyvFile({ filename: 'cache.json' }) @@ -1902,7 +1829,8 @@ export class chatgpt extends plugin { let sendMessageResult = await this.chatGPTApi.sendMessage(prompt, conversation) return sendMessageResult } - case 'poe': { + } else if (use === 'poe') { + { const cookie = await redis.get('CHATGPT:POE_TOKEN') if (!cookie) { throw new Error('未绑定Poe Cookie,请使用#chatgpt设置Poe token命令绑定cookie') @@ -1920,7 +1848,8 @@ export class chatgpt extends plugin { text: response.data } } - case 'claude': { + } else if (use === 'claude') { + { let client = new SlackClaudeClient({ slackUserToken: Config.slackUserToken, slackChannelId: Config.slackChannelId @@ -1944,7 +1873,8 @@ export class chatgpt extends plugin { text } } - case 'claude2': { + } else if (use === 'claude2') { + { let { conversationId } = conversation let client = new ClaudeAIClient({ organizationId: Config.claudeAIOrganizationId, @@ -1984,7 +1914,8 @@ export class chatgpt extends plugin { return await client.sendMessage(prompt, conv.uuid, attachments) } } - case 'xh': { + } else if (use === 'xh') { + { const cacheOptions = { namespace: 'xh', store: new KeyvFile({ filename: 'cache.json' }) @@ -2007,7 +1938,8 @@ export class chatgpt extends plugin { }) return response } - case 'azure': { + } else if (use === 'azure') { + { let azureModel try { azureModel = await import('@azure/openai') @@ -2017,15 +1949,22 @@ export class chatgpt extends plugin { let OpenAIClient = azureModel.OpenAIClient let AzureKeyCredential = azureModel.AzureKeyCredential let msg = conversation.messages - let content = { role: 'user', content: prompt } + let content = { + role: 'user', + content: prompt + } msg.push(content) const client = new OpenAIClient(Config.azureUrl, new AzureKeyCredential(Config.azApiKey)) const deploymentName = Config.azureDeploymentName const { choices } = await client.getChatCompletions(deploymentName, msg) let completion = choices[0].message - return { text: completion.content, message: completion } + return { + text: completion.content, + message: completion + } } - case 'qwen': { + } else if (use === 'qwen') { + { let completionParams = { parameters: { top_p: Config.qwenTopP || 0.5, @@ -2039,12 +1978,15 @@ export class chatgpt extends plugin { completionParams.model = Config.qwenModel } const currentDate = new Date().toISOString().split('T')[0] - async function um (message) { + + async function um(message) { return await upsertMessage(message, 'QWEN') } - async function gm (id) { + + async function gm(id) { return await getMessageById(id, 'QWEN') } + let opts = { apiKey: Config.qwenApiKey, debug: false, @@ -2076,7 +2018,8 @@ export class chatgpt extends plugin { } return msg } - case 'bard': { + } else if (use === 'bard') { + { // 处理cookie const matchesPSID = /__Secure-1PSID=([^;]+)/.exec(Config.bardPsid) const matchesPSIDTS = /__Secure-1PSIDTS=([^;]+)/.exec(Config.bardPsid) @@ -2106,13 +2049,13 @@ export class chatgpt extends plugin { bardURL: Config.bardForceUseReverse ? Config.bardReverseProxy : 'https://bard.google.com' }) let chat = await bot.createChat(conversation?.conversationId - ? { + ? { conversationID: conversation.conversationId, responseID: conversation.parentMessageId, choiceID: conversation.clientId, _reqID: conversation.invocationId } - : {}) + : {}) let response = await chat.ask(prompt, { image: imageBuff, format: Bard.JSON @@ -2126,7 +2069,126 @@ export class chatgpt extends plugin { images: response.images } } - default: { + } else if (use === 'gemini') { + { + let client = new CustomGoogleGeminiClient({ + e, + userId: e.sender.user_id, + key: Config.geminiKey, + model: Config.geminiModel, + baseUrl: Config.geminiBaseUrl, + debug: Config.debug + }) + let option = { + stream: false, + onProgress: (data) => { + if (Config.debug) { + logger.info(data) + } + }, + parentMessageId: conversation.parentMessageId, + conversationId: conversation.conversationId + } + if (Config.geminiModel.includes('vision')) { + const image = await getImg(e) + let imageUrl = image ? image[0] : undefined + if (imageUrl) { + let md5 = imageUrl.split(/[/-]/).find(s => s.length === 32)?.toUpperCase() + let imageLoc = await getOrDownloadFile(`ocr/${md5}.png`, imageUrl) + let outputLoc = imageLoc.replace(`${md5}.png`, `${md5}_512.png`) + await resizeAndCropImage(imageLoc, outputLoc, 512) + let buffer = fs.readFileSync(outputLoc) + option.image = buffer.toString('base64') + } + } + if (Config.smartMode) { + /** + * @type {AbstractTool[]} + */ + let tools = [ + new QueryStarRailTool(), + new WebsiteTool(), + new SendPictureTool(), + new SendVideoTool(), + // new ImageCaptionTool(), + new SearchVideoTool(), + new SendAvatarTool(), + new SerpImageTool(), + new SearchMusicTool(), + new SendMusicTool(), + // new SerpIkechan8370Tool(), + // new SerpTool(), + new SendAudioMessageTool(), + // new ProcessPictureTool(), + new APTool(), + // new HandleMessageMsgTool(), + new SendMessageToSpecificGroupOrUserTool(), + // new SendDiceTool(), + new QueryGenshinTool() + ] + if (Config.amapKey) { + tools.push(new WeatherTool()) + } + if (e.isGroup) { + tools.push(new QueryUserinfoTool()) + // let self = e.group.pickMember(e.self_id) + if (e.group.is_admin || e.group.is_owner) { + tools.push(new EditCardTool()) + tools.push(new JinyanTool()) + tools.push(new KickOutTool()) + } + if (e.group.is_owner) { + tools.push(new SetTitleTool()) + } + } + switch (Config.serpSource) { + case 'ikechan8370': { + tools.push(new SerpIkechan8370Tool()) + break + } + case 'azure': { + if (!Config.azSerpKey) { + logger.warn('未配置bing搜索密钥,转为使用ikechan8370搜索源') + tools.push(new SerpIkechan8370Tool()) + } else { + tools.push(new SerpTool()) + } + break + } + default: { + tools.push(new SerpIkechan8370Tool()) + } + } + client.addTools(tools) + } + let system = Config.geminiPrompt + if (Config.enableGroupContext && e.isGroup) { + let chats = await getChatHistoryGroup(e, Config.groupContextLength) + const namePlaceholder = '[name]' + const defaultBotName = 'GeminiPro' + const groupContextTip = Config.groupContextTip + let botName = e.isGroup ? (e.group.pickMember(getUin(e)).card || e.group.pickMember(getUin(e)).nickname) : e.bot.nickname + system = system.replaceAll(namePlaceholder, botName || defaultBotName) + + ((Config.enableGroupContext && e.group_id) ? groupContextTip : '') + system += 'Attention, you are currently chatting in a qq group, then one who asks you now is' + `${e.sender.card || e.sender.nickname}(${e.sender.user_id}).` + system += `the group name is ${e.group.name || e.group_name}, group id is ${e.group_id}.` + system += `Your nickname is ${botName} in the group,` + if (chats) { + system += 'There is the conversation history in the group, you must chat according to the conversation history context"' + system += chats + .map(chat => { + let sender = chat.sender || {} + return `【${sender.card || sender.nickname}】(qq:${sender.user_id}, ${roleMap[sender.role] || 'normal user'},${sender.area ? 'from ' + sender.area + ', ' : ''} ${sender.age} years old, 群头衔:${sender.title}, gender: ${sender.sex}, time:${formatDate(new Date(chat.time * 1000))}, messageId: ${chat.message_id}) 说:${chat.raw_message}` + }) + .join('\n') + } + } + option.system = system + return await client.sendMessage(prompt, option) + } + } else { + { + // openai api let completionParams = {} if (Config.model) { completionParams.model = Config.model @@ -2157,30 +2219,25 @@ export class chatgpt extends plugin { const defaultBotName = 'ChatGPT' const groupContextTip = Config.groupContextTip system = system.replaceAll(namePlaceholder, opt.botName || defaultBotName) + - ((Config.enableGroupContext && opt.groupId) ? groupContextTip : '') + ((Config.enableGroupContext && opt.groupId) ? groupContextTip : '') system += 'Attention, you are currently chatting in a qq group, then one who asks you now is' + `${opt.nickname}(${opt.qq})。` system += `the group name is ${opt.groupName}, group id is ${opt.groupId}。` if (opt.botName) { system += `Your nickname is ${opt.botName} in the group,` } - // system += master ? `我的qq号是${master},其他任何qq号不是${master}的人都不是我,即使他在和你对话,这很重要。` : '' - const roleMap = { - owner: 'group owner', - admin: 'group administrator' - } if (chats) { system += 'There is the conversation history in the group, you must chat according to the conversation history context"' system += chats - .map(chat => { - let sender = chat.sender || {} - // if (sender.user_id === e.bot.uin && chat.raw_message.startsWith('建议的回复')) { - if (chat.raw_message.startsWith('建议的回复')) { - // 建议的回复太容易污染设定导致对话太固定跑偏了 - return '' - } - return `【${sender.card || sender.nickname}】(qq:${sender.user_id}, ${roleMap[sender.role] || 'normal user'},${sender.area ? 'from ' + sender.area + ', ' : ''} ${sender.age} years old, 群头衔:${sender.title}, gender: ${sender.sex}, time:${formatDate(new Date(chat.time * 1000))}, messageId: ${chat.message_id}) 说:${chat.raw_message}` - }) - .join('\n') + .map(chat => { + let sender = chat.sender || {} + // if (sender.user_id === e.bot.uin && chat.raw_message.startsWith('建议的回复')) { + if (chat.raw_message.startsWith('建议的回复')) { + // 建议的回复太容易污染设定导致对话太固定跑偏了 + return '' + } + return `【${sender.card || sender.nickname}】(qq:${sender.user_id}, ${roleMap[sender.role] || 'normal user'},${sender.area ? 'from ' + sender.area + ', ' : ''} ${sender.age} years old, 群头衔:${sender.title}, gender: ${sender.sex}, time:${formatDate(new Date(chat.time * 1000))}, messageId: ${chat.message_id}) 说:${chat.raw_message}` + }) + .join('\n') } } catch (err) { if (e.isGroup) { @@ -2317,28 +2374,8 @@ export class chatgpt extends plugin { } } } - let img = [] - if (e.source) { - // 优先从回复找图 - let reply - if (e.isGroup) { - reply = (await e.group.getChatHistory(e.source.seq, 1)).pop()?.message - } else { - reply = (await e.friend.getChatHistory(e.source.time, 1)).pop()?.message - } - if (reply) { - for (let val of reply) { - if (val.type === 'image') { - console.log(val) - img.push(val.url) - } - } - } - } - if (e.img) { - img.push(...e.img) - } - if (img.length > 0 && Config.extraUrl) { + let img = await getImg(e) + if (img?.length > 0 && Config.extraUrl) { tools.push(new ImageCaptionTool()) tools.push(new ProcessPictureTool()) prompt += `\nthe url of the picture(s) above: ${img.join(', ')}` @@ -2373,7 +2410,10 @@ export class chatgpt extends plugin { if (msg.text) { await e.reply(msg.text.replace('\n\n\n', '\n')) } - let { name, arguments: args } = msg.functionCall + let { + name, + arguments: args + } = msg.functionCall args = JSON.parse(args) // 感觉换成targetGroupIdOrUserQQNumber这种表意比较清楚的变量名,效果会好一丢丢 if (!args.groupId) { @@ -2384,7 +2424,10 @@ export class chatgpt extends plugin { } catch (err) { args.groupId = e.group_id + '' || e.sender.user_id + '' } - let functionResult = await fullFuncMap[name.trim()].exec(Object.assign({ isAdmin, sender }, args), e) + let functionResult = await fullFuncMap[name.trim()].exec(Object.assign({ + isAdmin, + sender + }, args), e) logger.mark(`function ${name} execution result: ${functionResult}`) option.parentMessageId = msg.id option.name = name @@ -2712,6 +2755,25 @@ export class chatgpt extends plugin { } return await this.chatGPTApi.sendMessage(prompt, sendMessageOption) } + + async otherMode (e, mode, pattern = `#${mode}`) { + if (!Config.allowOtherMode) { + return false + } + let ats = e.message.filter(m => m.type === 'at') + if (!(e.atme || e.atBot) && ats.length > 0) { + if (Config.debug) { + logger.mark('艾特别人了,没艾特我,忽略' + pattern) + } + return false + } + let prompt = _.replace(e.raw_message.trimStart(), pattern, '').trim() + if (prompt.length === 0) { + return false + } + await this.abstractChat(e, prompt, mode) + return true + } } async function getAvailableBingToken (conversation, throttled = []) { diff --git a/apps/draw.js b/apps/draw.js index 10eed610..f45722b5 100644 --- a/apps/draw.js +++ b/apps/draw.js @@ -277,7 +277,7 @@ export class dalle extends plugin { await client.getImages(prompt, e) } catch (err) { await redis.del(`CHATGPT:DRAW:${e.sender.user_id}`) - await e.reply('绘图失败:' + err) + await e.reply('❌绘图失败:' + err) } } } diff --git a/apps/management.js b/apps/management.js index 689dd285..ff74a30f 100644 --- a/apps/management.js +++ b/apps/management.js @@ -1,4 +1,5 @@ import plugin from '../../../lib/plugins/plugin.js' +import { exec } from 'child_process' import { Config } from '../utils/config.js' import { formatDuration, @@ -126,6 +127,11 @@ export class ChatgptManagement extends plugin { fnc: 'useClaudeAISolution', permission: 'master' }, + { + reg: '^#chatgpt切换(Gemini|gemini)$', + fnc: 'useGeminiSolution', + permission: 'master' + }, { reg: '^#chatgpt切换星火$', fnc: 'useXinghuoBasedSolution', @@ -184,6 +190,11 @@ export class ChatgptManagement extends plugin { fnc: 'setAPIKey', permission: 'master' }, + { + reg: '^#chatgpt设置(Gemini|gemini)(Key|key)$', + fnc: 'setGeminiKey', + permission: 'master' + }, { reg: '^#chatgpt设置(API|api)设定$', fnc: 'setAPIPromptPrefix', @@ -314,6 +325,11 @@ export class ChatgptManagement extends plugin { reg: '^#chatgpt设置星火模型$', fnc: 'setXinghuoModel', permission: 'master' + }, + { + reg: '^#chatgpt修补Gemini$', + fnc: 'patchGemini', + permission: 'master' } ] }) @@ -902,6 +918,16 @@ azure语音:Azure 语音是微软 Azure 平台提供的一项语音服务, } } + async useGeminiSolution () { + let use = await redis.get('CHATGPT:USE') + if (use !== 'gemini') { + await redis.set('CHATGPT:USE', 'gemini') + await this.reply('已切换到基于Google Gemini的解决方案') + } else { + await this.reply('当前已经是gemini模式了') + } + } + async useXinghuoBasedSolution () { let use = await redis.get('CHATGPT:USE') if (use !== 'xh') { @@ -932,6 +958,57 @@ azure语音:Azure 语音是微软 Azure 平台提供的一项语音服务, } } + async patchGemini () { + const _path = process.cwd() + let packageJson = fs.readFileSync(`${_path}/package.json`) + packageJson = JSON.parse(String(packageJson)) + const packageName = '@google/generative-ai@0.1.1' + const patchLoc = 'plugins/chatgpt-plugin/patches/@google__generative-ai@0.1.1.patch' + if (!packageJson.pnpm) { + packageJson.pnpm = { + patchedDependencies: { + [packageName]: patchLoc + } + } + } else { + if (packageJson.pnpm.patchedDependencies) { + packageJson.pnpm.patchedDependencies[packageName] = patchLoc + } else { + packageJson.pnpm.patchedDependencies = { + [packageName]: patchLoc + } + } + } + fs.writeFileSync(`${_path}/package.json`, JSON.stringify(packageJson, null, 2)) + + function execSync (cmd) { + return new Promise((resolve, reject) => { + exec(cmd, (error, stdout, stderr) => { + resolve({ error, stdout, stderr }) + }) + }) + } + async function checkPnpm () { + let npm = 'npm' + let ret = await execSync('pnpm -v') + if (ret.stdout) npm = 'pnpm' + return npm + } + let npmv = await checkPnpm() + if (npmv === 'pnpm') { + exec('pnpm i', {}, (error, stdout, stderr) => { + if (error) { + logger.error(error) + logger.error(stderr) + logger.info(stdout) + this.e.reply('失败,请查看日志手动操作') + } else { + this.e.reply('修补完成,请手动重启') + } + }) + } + } + async useQwenSolution () { let use = await redis.get('CHATGPT:USE') if (use !== 'qwen') { @@ -1148,6 +1225,21 @@ azure语音:Azure 语音是微软 Azure 平台提供的一项语音服务, this.finish('saveAPIKey') } + async setGeminiKey (e) { + this.setContext('saveGeminiKey') + await this.reply('请发送Gemini API Key.获取地址:https://makersuite.google.com/app/apikey', true) + return false + } + + async saveGeminiKey () { + if (!this.e.msg) return + let token = this.e.msg + // todo + Config.geminiKey = token + await this.reply('请发送Gemini API Key设置成功', true) + this.finish('saveGeminiKey') + } + async setXinghuoToken () { this.setContext('saveXinghuoToken') await this.reply('请发送星火的ssoSessionId', true) diff --git a/apps/prompts.js b/apps/prompts.js index a2b2809e..a78e4d33 100644 --- a/apps/prompts.js +++ b/apps/prompts.js @@ -158,7 +158,8 @@ export class help extends plugin { api: 'promptPrefixOverride', Custom: 'sydney', claude: 'slackClaudeGlobalPreset', - qwen: 'promptPrefixOverride' + qwen: 'promptPrefixOverride', + gemini: 'geminiPrompt' } if (keyMap[use]) { @@ -171,7 +172,7 @@ export class help extends plugin { await redis.set(`CHATGPT:PROMPT_USE_${use}`, promptName) await e.reply(`你当前正在使用${use}模式,已将该模式设定应用为"${promptName}"。更该设定后建议结束对话以使设定更好生效`, true) } else { - await e.reply(`你当前正在使用${use}模式,该模式不支持设定。支持设定的模式有:API、自定义、Claude`, true) + await e.reply(`你当前正在使用${use}模式,该模式不支持设定。支持设定的模式有:API、自定义、Claude、通义千问和Gemini`, true) } } diff --git a/client/BaseClient.js b/client/BaseClient.js index 46232df0..1b8eebb9 100644 --- a/client/BaseClient.js +++ b/client/BaseClient.js @@ -14,13 +14,18 @@ export class BaseClient { constructor (props = {}) { this.supportFunction = false this.maxToken = 4096 + /** + * @type {Array} + */ this.tools = [] const { - e, getMessageById, upsertMessage + e, getMessageById, upsertMessage, deleteMessageById, userId } = props this.e = e this.getMessageById = getMessageById this.upsertMessage = upsertMessage + this.deleteMessageById = deleteMessageById || (() => {}) + this.userId = userId } /** @@ -36,20 +41,28 @@ export class BaseClient { * insert or update a message with the id * * @type function - * @param {string} id * @param {object} message * @return {Promise} */ upsertMessage + /** + * delete a message with the id + * + * @type function + * @param {string} id + * @return {Promise} + */ + deleteMessageById + /** * Send prompt message with history and return response message \ * if function called, handled internally \ * override this method to implement logic of sending and receiving message * - * @param msg - * @param opt other options, optional fields: [conversationId, parentMessageId], if not set, random uuid instead - * @returns {Promise} required fields: [text, conversationId, parentMessageId, id] + * @param {string} msg + * @param {{conversationId: string?, parentMessageId: string?, stream: boolean?, onProgress: function?}} opt other options, optional fields: [conversationId, parentMessageId], if not set, random uuid instead + * @returns {Promise<{text, conversationId, parentMessageId, id}>} required fields: [text, conversationId, parentMessageId, id] */ async sendMessage (msg, opt = {}) { throw new Error('not implemented in abstract client') @@ -60,11 +73,12 @@ export class BaseClient { * override this method to implement logic of getting history * keyv with local file or redis recommended * - * @param userId such as qq number - * @param opt other options - * @returns {Promise} + * @param userId optional, such as qq number + * @param parentMessageId if blank, no history + * @param opt optional, other options + * @returns {Promise} */ - async getHistory (userId, opt = {}) { + async getHistory (parentMessageId, userId = this.userId, opt = {}) { throw new Error('not implemented in abstract client') } @@ -78,14 +92,18 @@ export class BaseClient { throw new Error('not implemented in abstract client') } - addTools (...tools) { + /** + * 增加tools + * @param {[AbstractTool]} tools + */ + addTools (tools) { if (!this.isSupportFunction) { throw new Error('function not supported') } if (!this.tools) { this.tools = [] } - this.tools.push(tools) + this.tools.push(...tools) } getTools () { diff --git a/client/CustomGoogleGeminiClient.js b/client/CustomGoogleGeminiClient.js new file mode 100644 index 00000000..7953764c --- /dev/null +++ b/client/CustomGoogleGeminiClient.js @@ -0,0 +1,264 @@ +import crypto from 'crypto' +import { GoogleGeminiClient } from './GoogleGeminiClient.js' +import { newFetch } from '../utils/proxy.js' +import _ from 'lodash' + +const BASEURL = 'https://generativelanguage.googleapis.com' + +export const HarmCategory = { + HARM_CATEGORY_UNSPECIFIED: 'HARM_CATEGORY_UNSPECIFIED', + HARM_CATEGORY_HATE_SPEECH: 'HARM_CATEGORY_HATE_SPEECH', + HARM_CATEGORY_SEXUALLY_EXPLICIT: 'HARM_CATEGORY_SEXUALLY_EXPLICIT', + HARM_CATEGORY_HARASSMENT: 'HARM_CATEGORY_HARASSMENT', + HARM_CATEGORY_DANGEROUS_CONTENT: 'HARM_CATEGORY_DANGEROUS_CONTENT' +} + +export const HarmBlockThreshold = { + HARM_BLOCK_THRESHOLD_UNSPECIFIED: 'HARM_BLOCK_THRESHOLD_UNSPECIFIED', + BLOCK_LOW_AND_ABOVE: 'BLOCK_LOW_AND_ABOVE', + BLOCK_MEDIUM_AND_ABOVE: 'BLOCK_MEDIUM_AND_ABOVE', + BLOCK_ONLY_HIGH: 'BLOCK_ONLY_HIGH', + BLOCK_NONE: 'BLOCK_NONE' +} + +/** + * @typedef {{ + * role: string, + * parts: Array<{ + * text?: string, + * functionCall?: FunctionCall, + * functionResponse?: FunctionResponse + * }> + * }} Content + * + * Gemini消息的基本格式 + */ + +/** + * @typedef {{ + * name: string, + * args: {} + * }} FunctionCall + * + * Gemini的FunctionCall + */ + +/** + * @typedef {{ + * name: string, + * response: { + * name: string, + * content: {} + * } + * }} FunctionResponse + * + * Gemini的Function执行结果包裹 + * 其中response可以为任意,本项目根据官方示例封装为name和content两个字段 + */ + +export class CustomGoogleGeminiClient extends GoogleGeminiClient { + constructor (props) { + super(props) + this.model = props.model + this.baseUrl = props.baseUrl || BASEURL + this.supportFunction = true + this.debug = props.debug + } + + /** + * + * @param text + * @param {{conversationId: string?, parentMessageId: string?, stream: boolean?, onProgress: function?, functionResponse: FunctionResponse?, system: string?, image: string?}} opt + * @returns {Promise<{conversationId: string?, parentMessageId: string, text: string, id: string}>} + */ + async sendMessage (text, opt) { + let history = await this.getHistory(opt.parentMessageId) + let systemMessage = opt.system + if (systemMessage) { + history = history.reverse() + history.push({ + role: 'model', + parts: [ + { + text: 'ok' + } + ] + }) + history.push({ + role: 'user', + parts: [ + { + text: systemMessage + } + ] + }) + history = history.reverse() + } + const idThis = crypto.randomUUID() + const idModel = crypto.randomUUID() + const thisMessage = opt.functionResponse + ? { + role: 'function', + parts: [{ + functionResponse: opt.functionResponse + }], + id: idThis, + parentMessageId: opt.parentMessageId || undefined + } + : { + role: 'user', + parts: [{ text }], + id: idThis, + parentMessageId: opt.parentMessageId || undefined + } + if (opt.image) { + thisMessage.parts.push({ + inline_data: { + mime_type: 'image/jpeg', + data: opt.image + } + }) + } + history.push(_.cloneDeep(thisMessage)) + let url = `${this.baseUrl}/v1beta/models/${this.model}:generateContent?key=${this._key}` + let body = { + // 不去兼容官方的简单格式了,直接用,免得function还要转换 + /** + * @type Array + */ + contents: history, + safetySettings: [ + { + category: HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT, + threshold: HarmBlockThreshold.BLOCK_NONE + }, + { + category: HarmCategory.HARM_CATEGORY_HARASSMENT, + threshold: HarmBlockThreshold.BLOCK_NONE + }, + { + category: HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT, + threshold: HarmBlockThreshold.BLOCK_NONE + }, + { + category: HarmCategory.HARM_CATEGORY_HATE_SPEECH, + threshold: HarmBlockThreshold.BLOCK_NONE + } + ], + generationConfig: { + maxOutputTokens: 1000, + temperature: 0.9, + topP: 0.95, + topK: 16 + }, + tools: [ + { + functionDeclarations: this.tools.map(tool => tool.function()) + } + ] + } + body.contents.forEach(content => { + delete content.id + delete content.parentMessageId + delete content.conversationId + }) + let result = await newFetch(url, { + method: 'POST', + body: JSON.stringify(body) + }) + if (result.status !== 200) { + throw new Error(await result.text()) + } + /** + * @type {Content | undefined} + */ + let responseContent + /** + * @type {{candidates: Array<{content: Content}>}} + */ + let response = await result.json() + if (this.debug) { + console.log(JSON.stringify(response)) + } + responseContent = response.candidates[0].content + if (responseContent.parts[0].functionCall) { + // functionCall + const functionCall = responseContent.parts[0].functionCall + // Gemini有时候只回复一个空的functionCall,无语死了 + if (functionCall.name) { + logger.info(JSON.stringify(functionCall)) + const funcName = functionCall.name + let chosenTool = this.tools.find(t => t.name === funcName) + /** + * @type {FunctionResponse} + */ + let functionResponse = { + name: funcName, + response: { + name: funcName, + content: null + } + } + if (!chosenTool) { + // 根本没有这个工具! + functionResponse.response.content = { + error: `Function ${funcName} doesn't exist` + } + } else { + // execute function + try { + let args = Object.assign(functionCall.args, { + isAdmin: this.e.group.is_admin, + isOwner: this.e.group.is_owner, + sender: this.e.sender + }) + functionResponse.response.content = await chosenTool.func(args, this.e) + if (this.debug) { + logger.info(JSON.stringify(functionResponse.response.content)) + } + } catch (err) { + logger.error(err) + functionResponse.response.content = { + error: `Function execute error: ${err.message}` + } + } + } + let responseOpt = _.cloneDeep(opt) + responseOpt.parentMessageId = idModel + responseOpt.functionResponse = functionResponse + // 递归直到返回text + // 先把这轮的消息存下来 + await this.upsertMessage(thisMessage) + const respMessage = Object.assign(responseContent, { + id: idModel, + parentMessageId: idThis + }) + await this.upsertMessage(respMessage) + return await this.sendMessage('', responseOpt) + } else { + // 谷歌抽风了,瞎调函数,不保存这轮,直接返回 + return { + text: '', + conversationId: '', + parentMessageId: opt.parentMessageId, + id: '', + error: true + } + } + } + if (responseContent) { + await this.upsertMessage(thisMessage) + const respMessage = Object.assign(responseContent, { + id: idModel, + parentMessageId: idThis + }) + await this.upsertMessage(respMessage) + } + return { + text: responseContent.parts[0].text, + conversationId: '', + parentMessageId: idThis, + id: idModel + } + } +} diff --git a/client/GoogleGeminiClient.js b/client/GoogleGeminiClient.js new file mode 100644 index 00000000..5197cf39 --- /dev/null +++ b/client/GoogleGeminiClient.js @@ -0,0 +1,158 @@ +import { BaseClient } from './BaseClient.js' + +import { getMessageById, upsertMessage } from '../utils/common.js' +import crypto from 'crypto' +let GoogleGenerativeAI, HarmBlockThreshold, HarmCategory +try { + const GenerativeAI = await import('@google/generative-ai') + GoogleGenerativeAI = GenerativeAI.GoogleGenerativeAI + HarmBlockThreshold = GenerativeAI.HarmBlockThreshold + HarmCategory = GenerativeAI.HarmCategory +} catch (err) { + console.warn('未安装@google/generative-ai,无法使用Gemini,请在chatgpt-plugin目录下执行pnpm i安装新依赖') +} +export class GoogleGeminiClient extends BaseClient { + constructor (props) { + if (!GoogleGenerativeAI) { + throw new Error('未安装@google/generative-ai,无法使用Gemini,请在chatgpt-plugin目录下执行pnpm i安装新依赖') + } + if (!props.upsertMessage) { + props.upsertMessage = async function umGemini (message) { + return await upsertMessage(message, 'Gemini') + } + } + if (!props.getMessageById) { + props.getMessageById = async function umGemini (message) { + return await getMessageById(message, 'Gemini') + } + } + super(props) + this._key = props.key + this._client = new GoogleGenerativeAI(this._key) + this.model = this._client.getGenerativeModel({ model: props.model }) + this.supportFunction = false + } + + async getHistory (parentMessageId, userId = this.userId, opt = {}) { + const history = [] + let cursor = parentMessageId + if (!cursor) { + return history + } + do { + let parentMessage = await this.getMessageById(cursor) + if (!parentMessage) { + break + } else { + history.push(parentMessage) + cursor = parentMessage.parentMessageId + if (!cursor) { + break + } + } + } while (true) + return history.reverse() + } + + async sendMessage (text, opt) { + let history = await this.getHistory(opt.parentMessageId) + let systemMessage = opt.system + if (systemMessage) { + history = history.reverse() + history.push({ + role: 'model', + parts: 'ok' + }) + history.push({ + role: 'user', + parts: systemMessage + }) + history = history.reverse() + } + const idUser = crypto.randomUUID() + const idModel = crypto.randomUUID() + let responseText = '' + try { + const chat = this.model.startChat({ + history, + // [ + // { + // role: 'user', + // parts: 'Hello, I have 2 dogs in my house.' + // }, + // { + // role: 'model', + // parts: 'Great to meet you. What would you like to know?' + // } + // ], + generationConfig: { + // todo configuration + maxOutputTokens: 1000, + temperature: 0.9, + topP: 0.95, + topK: 16 + }, + safetySettings: [ + // todo configuration + { + category: HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT, + threshold: HarmBlockThreshold.BLOCK_NONE + }, + { + category: HarmCategory.HARM_CATEGORY_HARASSMENT, + threshold: HarmBlockThreshold.BLOCK_NONE + }, + { + category: HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT, + threshold: HarmBlockThreshold.BLOCK_NONE + }, + { + category: HarmCategory.HARM_CATEGORY_HATE_SPEECH, + threshold: HarmBlockThreshold.BLOCK_NONE + } + ] + }) + if (opt.stream && (typeof opt.onProgress === 'function')) { + const result = await chat.sendMessageStream(text) + responseText = '' + for await (const chunk of result.stream) { + const chunkText = chunk.text() + responseText += chunkText + await opt.onProgress(responseText) + } + return { + text: responseText, + conversationId: '', + parentMessageId: idUser, + id: idModel + } + } + const result = await chat.sendMessage(text) + const response = await result.response + responseText = response.text() + return { + text: responseText, + conversationId: '', + parentMessageId: idUser, + id: idModel + } + } finally { + await this.upsertMessage({ + role: 'user', + parts: text, + id: idUser, + parentMessageId: opt.parentMessageId || undefined + }) + await this.upsertMessage({ + role: 'model', + parts: responseText, + id: idModel, + parentMessageId: idUser + }) + } + } + + async destroyHistory (conversationId, opt = {}) { + // todo clean history + } +} diff --git a/client/GoogleGeminiClientTest.js b/client/GoogleGeminiClientTest.js new file mode 100644 index 00000000..d55bb793 --- /dev/null +++ b/client/GoogleGeminiClientTest.js @@ -0,0 +1,10 @@ +import { GoogleGeminiClient } from './GoogleGeminiClient.js' + +async function test () { + const client = new GoogleGeminiClient({ + e: {}, + userId: 'test', + key: '', + model: 'gemini-pro' + }) +} diff --git a/guoba.support.js b/guoba.support.js index 84d4256b..c5c0c30a 100644 --- a/guoba.support.js +++ b/guoba.support.js @@ -743,15 +743,42 @@ export function supportGuoba () { component: 'Switch' }, { - label: '以下为杂七杂八的配置', + label: '以下为Gemini方式的配置', component: 'Divider' }, { - field: '2captchaToken', - label: '验证码平台Token', - bottomHelpMessage: '可注册2captcha实现跳过验证码,收费服务但很便宜。否则可能会遇到验证码而卡住', + field: 'geminiKey', + label: 'API密钥', + bottomHelpMessage: '前往https://makersuite.google.com/app/apikey获取', component: 'InputPassword' }, + { + field: 'geminiModel', + label: '模型', + bottomHelpMessage: '目前仅支持gemini-pro', + component: 'Input' + }, + { + field: 'geminiPrompt', + label: '设定', + component: 'InputTextArea' + }, + { + field: 'geminiBaseUrl', + label: 'Gemini反代', + bottomHelpMessage: '对https://generativelanguage.googleapis.com的反代', + component: 'Input' + }, + { + label: '以下为杂七杂八的配置', + component: 'Divider' + }, + // { + // field: '2captchaToken', + // label: '验证码平台Token', + // bottomHelpMessage: '可注册2captcha实现跳过验证码,收费服务但很便宜。否则可能会遇到验证码而卡住', + // component: 'InputPassword' + // }, { field: 'ttsSpace', label: 'vits-uma-genshin-honkai语音转换API地址', diff --git a/package-lock.json b/package-lock.json index c29e27ca..2536ec51 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,11 +11,9 @@ "@fastify/cors": "^8.2.0", "@fastify/static": "^6.9.0", "@fastify/websocket": "^8.2.0", + "@google/generative-ai": "^0.1.1", "@slack/bolt": "^3.13.2", - "@waylaidwanderer/chatgpt-api": "^1.37.1", "asn1.js": "^5.0.0", - "chatgpt": "^5.2.4", - "crypto": "^1.0.1", "delay": "^6.0.0", "diff": "^5.1.0", "emoji-strip": "^1.0.1", @@ -27,7 +25,8 @@ "js-tiktoken": "^1.0.5", "keyv": "^4.5.3", "keyv-file": "^0.2.0", - "microsoft-cognitiveservices-speech-sdk": "^1.30.1", + "lodash": "^4.17.21", + "microsoft-cognitiveservices-speech-sdk": "1.32.0", "node-fetch": "^3.3.1", "openai": "^3.2.1", "p-timeout": "^6.1.2", @@ -272,83 +271,6 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, - "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", - "dependencies": { - "@babel/highlight": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmmirror.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -361,11 +283,6 @@ "node": ">=12" } }, - "node_modules/@dqbd/tiktoken": { - "version": "1.0.7", - "resolved": "https://registry.npmmirror.com/@dqbd/tiktoken/-/tiktoken-1.0.7.tgz", - "integrity": "sha512-bhR5k5W+8GLzysjk8zTMVygQZsgvf7W1F0IlL4ZQ5ugjo5rCyiwGM5d8DYriXspytfu98tv59niang3/T+FoDw==" - }, "node_modules/@fastify/accept-negotiator": { "version": "1.1.0", "resolved": "https://registry.npmmirror.com/@fastify/accept-negotiator/-/accept-negotiator-1.1.0.tgz", @@ -455,6 +372,14 @@ "ws": "^8.0.0" } }, + "node_modules/@google/generative-ai": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@google/generative-ai/-/generative-ai-0.1.1.tgz", + "integrity": "sha512-cbzKa8mT9YkTrT4XUuENIuvlqiJjwDgcD2Ks4L99Az9dWLgdXn8xnETEAZLOpqzoGx+1PuATZqlUnVRAeLbMgA==", + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@jimp/bmp": { "version": "0.22.8", "resolved": "https://registry.npmmirror.com/@jimp/bmp/-/bmp-0.22.8.tgz", @@ -1431,15 +1356,6 @@ "node": ">=8" } }, - "node_modules/@timefox/bic-sydney": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/@timefox/bic-sydney/-/bic-sydney-1.1.4.tgz", - "integrity": "sha512-ONeS0weT+ZoE471TDdzPqkKRk+VFr7sEL5+qEq1nIur6XMuVZ8cvlBicUNHfhYKIavkOM8xmBnk2dfVFQ54aiQ==", - "dependencies": { - "fetch-undici": "^3.0.1", - "undici": "^5.22.1" - } - }, "node_modules/@tokenizer/token": { "version": "0.3.0", "resolved": "https://registry.npmmirror.com/@tokenizer/token/-/token-0.3.0.tgz", @@ -1558,11 +1474,6 @@ "resolved": "https://registry.npmmirror.com/@types/node/-/node-18.16.0.tgz", "integrity": "sha512-BsAaKhB+7X+H4GnSjGhJG9Qi8Tw+inU9nJDwmD5CgOmBLEI6ArdhikpLX7DjbjDRDTbqZzU2LSQNZg8WGPiSZQ==" }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmmirror.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" - }, "node_modules/@types/p-queue": { "version": "2.3.2", "resolved": "https://registry.npmmirror.com/@types/p-queue/-/p-queue-2.3.2.tgz", @@ -1619,56 +1530,6 @@ "@types/node": "*" } }, - "node_modules/@waylaidwanderer/chatgpt-api": { - "version": "1.37.2", - "resolved": "https://registry.npmjs.org/@waylaidwanderer/chatgpt-api/-/chatgpt-api-1.37.2.tgz", - "integrity": "sha512-7b/++pAaNtFXU91/+1ajZCMp7OD9AjfygDy1WSI21w83d2jSofmuJbZbL+oOWuqkUapncOEa9Lcqkl9XZ9THCg==", - "dependencies": { - "@dqbd/tiktoken": "^1.0.2", - "@fastify/cors": "^8.2.0", - "@timefox/bic-sydney": "^1.1.2", - "@waylaidwanderer/fastify-sse-v2": "^3.1.0", - "@waylaidwanderer/fetch-event-source": "^3.0.1", - "boxen": "^7.0.1", - "clipboardy": "^3.0.0", - "dotenv": "^16.0.3", - "fastify": "^4.11.0", - "fetch-undici": "^3.0.1", - "https-proxy-agent": "^7.0.0", - "inquirer": "^9.1.4", - "inquirer-autocomplete-prompt": "^3.0.0", - "keyv": "^4.5.2", - "keyv-file": "^0.2.0", - "ora": "^6.1.2", - "undici": "^5.20.0", - "ws": "^8.12.0" - }, - "bin": { - "chatgpt-api": "bin/server.js", - "chatgpt-cli": "bin/cli.js" - } - }, - "node_modules/@waylaidwanderer/fastify-sse-v2": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/@waylaidwanderer/fastify-sse-v2/-/fastify-sse-v2-3.1.0.tgz", - "integrity": "sha512-R6/VT14+iGZmyp7Jih7FYZuWr0B0gJ9uym1xoVPlKjZBngzFS2bL8yvZyEIPbMrTjrC8syZY2z2WuMHsipRfpw==", - "dependencies": { - "fastify-plugin": "^4.3.0", - "it-pushable": "^1.4.2", - "it-to-stream": "^1.0.0" - }, - "peerDependencies": { - "fastify": ">=4" - } - }, - "node_modules/@waylaidwanderer/fetch-event-source": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/@waylaidwanderer/fetch-event-source/-/fetch-event-source-3.0.1.tgz", - "integrity": "sha512-gkc7vmBW9uulRj7tY30/1D8iBrpcgphBpI+e7LP744x/hAzaQxUuyF+n4O5dctKx+dE3i4BFuCWMEz9fAx2jlQ==", - "engines": { - "node": ">=16.15" - } - }, "node_modules/@xmldom/xmldom": { "version": "0.8.10", "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", @@ -1801,67 +1662,15 @@ } } }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-align/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "engines": { - "node": ">=10" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "optional": true, "engines": { "node": ">=8" } }, - "node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "engines": { - "node": ">=12" - } - }, "node_modules/any-base": { "version": "1.1.0", "resolved": "https://registry.npmmirror.com/any-base/-/any-base-1.1.0.tgz", @@ -1874,11 +1683,6 @@ "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "optional": true }, - "node_modules/arch": { - "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==" - }, "node_modules/archy": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/archy/-/archy-1.0.0.tgz", @@ -2015,15 +1819,6 @@ "node": ">=8.0.0" } }, - "node_modules/atomically": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/atomically/-/atomically-2.0.1.tgz", - "integrity": "sha512-sxBhVZUFBFhqSAsYMM3X2oaUi2NVDJ8U026FsIusM8gYXls9AYs/eXzgGrufs1Qjpkxi9zunds+75QUFz+m7UQ==", - "dependencies": { - "stubborn-fs": "^1.2.4", - "when-exit": "^2.0.0" - } - }, "node_modules/available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmmirror.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", @@ -2130,29 +1925,6 @@ "node": ">=8" } }, - "node_modules/bl": { - "version": "5.1.0", - "resolved": "https://registry.npmmirror.com/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", - "dependencies": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/bluebird": { "version": "3.4.7", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", @@ -2207,24 +1979,6 @@ "node": ">= 0.8" } }, - "node_modules/boxen": { - "version": "7.1.0", - "resolved": "https://registry.npmmirror.com/boxen/-/boxen-7.1.0.tgz", - "integrity": "sha512-ScG8CDo8dj7McqCZ5hz4dIBp20xj4unQ2lXIDa7ff6RcZElCpuNzutdwzKVvRikfNjm7CFAlR3HJHcoHkDOExQ==", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^7.0.1", - "chalk": "^5.2.0", - "cli-boxes": "^3.0.0", - "string-width": "^5.1.2", - "type-fest": "^2.13.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.1.0" - }, - "engines": { - "node": ">=14.16" - } - }, "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -2289,14 +2043,6 @@ "resolved": "https://registry.npmmirror.com/bytesish/-/bytesish-0.4.4.tgz", "integrity": "sha512-i4uu6M4zuMUiyfZN4RU2+i9+peJh//pXhd9x1oSe1LBkZ3LEbCoygu8W0bXTukU1Jme2txKuotpCZRaC3FLxcQ==" }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmmirror.com/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "engines": { - "node": ">=8" - } - }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz", @@ -2306,14 +2052,6 @@ "get-intrinsic": "^1.0.2" } }, - "node_modules/camelcase": { - "version": "7.0.1", - "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-7.0.1.tgz", - "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", - "engines": { - "node": ">=14.16" - } - }, "node_modules/canvas": { "version": "2.11.2", "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz", @@ -2382,41 +2120,6 @@ "node": ">=0.8" } }, - "node_modules/chalk": { - "version": "5.2.0", - "resolved": "https://registry.npmmirror.com/chalk/-/chalk-5.2.0.tgz", - "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmmirror.com/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - }, - "node_modules/chatgpt": { - "version": "5.2.5", - "resolved": "https://registry.npmmirror.com/chatgpt/-/chatgpt-5.2.5.tgz", - "integrity": "sha512-DNhBzPb2zTDjJADY44XfngMvsvrvHRq1md2VPXLmnKeP1UCeA1B6pV3s9ZRwlcgjVT0RyM77fRj1xj5V11Vctg==", - "dependencies": { - "cac": "^6.7.14", - "conf": "^11.0.1", - "eventsource-parser": "^1.0.0", - "js-tiktoken": "^1.0.5", - "keyv": "^4.5.2", - "p-timeout": "^6.1.1", - "quick-lru": "^6.1.1", - "read-pkg-up": "^9.1.0", - "uuid": "^9.0.0" - }, - "bin": { - "chatgpt": "bin/cli.js" - }, - "engines": { - "node": ">=14" - } - }, "node_modules/chownr": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/chownr/-/chownr-2.0.0.tgz", @@ -2426,62 +2129,6 @@ "node": ">=10" } }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", - "engines": { - "node": ">=10" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-width": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/cli-width/-/cli-width-4.0.0.tgz", - "integrity": "sha512-ZksGS2xpa/bYkNzN3BAw1wEjsLV/ZKOf/CCrJ/QOBsxx6fOARIkwTutxp1XIOIohi6HKmOFjMoK/XaqDVUpEEw==", - "engines": { - "node": ">= 12" - } - }, - "node_modules/clipboardy": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/clipboardy/-/clipboardy-3.0.0.tgz", - "integrity": "sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==", - "dependencies": { - "arch": "^2.2.0", - "execa": "^5.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "engines": { - "node": ">=0.8" - } - }, "node_modules/clone-deep": { "version": "0.2.4", "resolved": "https://registry.npmmirror.com/clone-deep/-/clone-deep-0.2.4.tgz", @@ -2524,6 +2171,7 @@ "version": "2.0.1", "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "optional": true, "dependencies": { "color-name": "~1.1.4" }, @@ -2534,7 +2182,8 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "optional": true }, "node_modules/color-string": { "version": "1.9.1", @@ -2572,24 +2221,6 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "optional": true }, - "node_modules/conf": { - "version": "11.0.1", - "resolved": "https://registry.npmmirror.com/conf/-/conf-11.0.1.tgz", - "integrity": "sha512-WlLiQboEjKx0bYx2IIRGedBgNjLAxtwPaCSnsjWPST5xR0DB4q8lcsO/bEH9ZRYNcj63Y9vj/JG/5Fg6uWzI0Q==", - "dependencies": { - "ajv": "^8.12.0", - "ajv-formats": "^2.1.1", - "atomically": "^2.0.0", - "debounce-fn": "^5.1.2", - "dot-prop": "^7.2.0", - "env-paths": "^3.0.0", - "json-schema-typed": "^8.0.1", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=14.16" - } - }, "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmmirror.com/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -2652,25 +2283,6 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", - "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==", - "deprecated": "This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in." - }, "node_modules/cycletls": { "version": "1.0.21", "resolved": "https://registry.npmjs.org/cycletls/-/cycletls-1.0.21.tgz", @@ -2728,17 +2340,6 @@ "node": ">= 12" } }, - "node_modules/debounce-fn": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/debounce-fn/-/debounce-fn-5.1.2.tgz", - "integrity": "sha512-Sr4SdOZ4vw6eQDvPYNxHogvrxmCIld/VenC5JbNrFwMiwd7lY/Z18ZFfo+EWNG4DD9nFlAujWAo/wGuOPHmy5A==", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", @@ -2777,14 +2378,6 @@ "node": ">=0.10.0" } }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dependencies": { - "clone": "^1.0.2" - } - }, "node_modules/define-properties": { "version": "1.2.0", "resolved": "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.0.tgz", @@ -2868,25 +2461,6 @@ "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", "optional": true }, - "node_modules/dot-prop": { - "version": "7.2.0", - "resolved": "https://registry.npmmirror.com/dot-prop/-/dot-prop-7.2.0.tgz", - "integrity": "sha512-Ol/IPXUARn9CSbkrdV4VJo7uCy1I3VuSiWCaFSg+8BdUOzF9n3jefIpcgAydvUZbTdEBZs2vEiTiS9m61ssiDA==", - "dependencies": { - "type-fest": "^2.11.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/dotenv": { - "version": "16.3.0", - "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-16.3.0.tgz", - "integrity": "sha512-tHB+hmf8MRCkT3VVivGiG8kq9HiGTmQ3FzOKgztfpJQH1IWuZTOvKSJmHNnQPowecAmkCJhLrxdPhOr06LLqIQ==", - "engines": { - "node": ">=12" - } - }, "node_modules/duck": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/duck/-/duck-0.1.12.tgz", @@ -2896,11 +2470,6 @@ "underscore": "^1.13.1" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -2954,22 +2523,6 @@ "once": "^1.4.0" } }, - "node_modules/env-paths": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/env-paths/-/env-paths-3.0.0.tgz", - "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, "node_modules/es-abstract": { "version": "1.21.2", "resolved": "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.21.2.tgz", @@ -3066,14 +2619,6 @@ "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, - "node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "engines": { - "node": ">=12" - } - }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz", @@ -3119,33 +2664,6 @@ "node": ">=14.18" } }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/execa/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - } - }, "node_modules/exif-parser": { "version": "0.1.12", "resolved": "https://registry.npmmirror.com/exif-parser/-/exif-parser-0.1.12.tgz", @@ -3213,19 +2731,6 @@ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "optional": true }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -3253,7 +2758,8 @@ "node_modules/fast-fifo": { "version": "1.2.0", "resolved": "https://registry.npmmirror.com/fast-fifo/-/fast-fifo-1.2.0.tgz", - "integrity": "sha512-NcvQXt7Cky1cNau15FWy64IjuO8X0JijhTBBrJj1YlxlDfRkJXNaK9RFUjwpfDPzMdv7wB38jr53l9tkNLxnWg==" + "integrity": "sha512-NcvQXt7Cky1cNau15FWy64IjuO8X0JijhTBBrJj1YlxlDfRkJXNaK9RFUjwpfDPzMdv7wB38jr53l9tkNLxnWg==", + "optional": true }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", @@ -3343,29 +2849,6 @@ "node": "^12.20 || >= 14.13" } }, - "node_modules/fetch-undici": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/fetch-undici/-/fetch-undici-3.0.1.tgz", - "integrity": "sha512-UHHu1HqW22ZhK6C/1Zmjf7mQpOwPwLYZ+xcsOgpzistONU8QqvCop6Od29p/kw1GUVoq2Ihu6ItpKLtlojx4FQ==", - "dependencies": { - "undici": "^5.0.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/figures": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/figures/-/figures-5.0.0.tgz", - "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", - "dependencies": { - "escape-string-regexp": "^5.0.0", - "is-unicode-supported": "^1.2.0" - }, - "engines": { - "node": ">=14" - } - }, "node_modules/file-type": { "version": "16.5.4", "resolved": "https://registry.npmmirror.com/file-type/-/file-type-16.5.4.tgz", @@ -3410,18 +2893,6 @@ "node": ">=14" } }, - "node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmmirror.com/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, "node_modules/finity": { "version": "0.5.4", "resolved": "https://registry.npmmirror.com/finity/-/finity-0.5.4.tgz", @@ -3647,19 +3118,6 @@ "has-symbols": "^1.0.3" } }, - "node_modules/get-iterator": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/get-iterator/-/get-iterator-1.0.2.tgz", - "integrity": "sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg==" - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - } - }, "node_modules/get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz", @@ -3807,14 +3265,6 @@ "resolved": "https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, "node_modules/has-property-descriptors": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", @@ -3856,17 +3306,6 @@ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "optional": true }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz", @@ -3974,14 +3413,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "engines": { - "node": ">=10.17.0" - } - }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -4051,240 +3482,6 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "optional": true }, - "node_modules/inquirer": { - "version": "9.2.7", - "resolved": "https://registry.npmmirror.com/inquirer/-/inquirer-9.2.7.tgz", - "integrity": "sha512-Bf52lnfvNxGPJPltiNO2tLBp3zC339KNlGMqOkW+dsvNikBhcVDK5kqU2lVX2FTPzuXUFX5WJDlsw//w3ZwoTw==", - "dependencies": { - "ansi-escapes": "^4.3.2", - "chalk": "^5.2.0", - "cli-cursor": "^3.1.0", - "cli-width": "^4.0.0", - "external-editor": "^3.0.3", - "figures": "^5.0.0", - "lodash": "^4.17.21", - "mute-stream": "1.0.0", - "ora": "^5.4.1", - "run-async": "^3.0.0", - "rxjs": "^7.8.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" - }, - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/inquirer-autocomplete-prompt": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-3.0.0.tgz", - "integrity": "sha512-nsPWllBQB3qhvpVgV1UIJN4xo3yz7Qv8y1+zrNVpJUNPxtUZ7btCum/4UCAs5apPCe/FVhKH1V6Wx0cAwkreyg==", - "dependencies": { - "ansi-escapes": "^6.0.0", - "figures": "^5.0.0", - "picocolors": "^1.0.0", - "run-async": "^2.4.1", - "rxjs": "^7.5.6" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "inquirer": "^9.1.0" - } - }, - "node_modules/inquirer-autocomplete-prompt/node_modules/ansi-escapes": { - "version": "6.2.0", - "resolved": "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-6.2.0.tgz", - "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", - "dependencies": { - "type-fest": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/inquirer-autocomplete-prompt/node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmmirror.com/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/inquirer-autocomplete-prompt/node_modules/type-fest": { - "version": "3.12.0", - "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-3.12.0.tgz", - "integrity": "sha512-qj9wWsnFvVEMUDbESiilKeXeHL7FwwiFcogfhfyjmvT968RXSvnl23f1JOClTHYItsi7o501C/7qVllscUP3oA==", - "engines": { - "node": ">=14.16" - } - }, - "node_modules/inquirer/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/inquirer/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/inquirer/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/inquirer/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/inquirer/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/inquirer/node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/inquirer/node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmmirror.com/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/inquirer/node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/inquirer/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/inquirer/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/internal-slot": { "version": "1.0.5", "resolved": "https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.5.tgz", @@ -4328,11 +3525,6 @@ "is-typed-array": "^1.1.10" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmmirror.com/is-bigint/-/is-bigint-1.0.4.tgz", @@ -4367,14 +3559,6 @@ "node": ">= 0.4" } }, - "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dependencies": { - "has": "^1.0.3" - } - }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz", @@ -4386,17 +3570,6 @@ "node": ">= 0.4" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/is-electron": { "version": "2.2.0", "resolved": "https://registry.npmmirror.com/is-electron/-/is-electron-2.2.0.tgz", @@ -4415,6 +3588,7 @@ "version": "3.0.0", "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "optional": true, "engines": { "node": ">=8" } @@ -4425,14 +3599,6 @@ "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", "optional": true }, - "node_modules/is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", - "engines": { - "node": ">=12" - } - }, "node_modules/is-map": { "version": "2.0.2", "resolved": "https://registry.npmmirror.com/is-map/-/is-map-2.0.2.tgz", @@ -4545,14 +3711,6 @@ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "optional": true }, - "node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", - "engines": { - "node": ">=12" - } - }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz", @@ -4561,27 +3719,11 @@ "call-bind": "^1.0.2" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmmirror.com/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz", @@ -4627,40 +3769,6 @@ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", "optional": true }, - "node_modules/it-pushable": { - "version": "1.4.2", - "resolved": "https://registry.npmmirror.com/it-pushable/-/it-pushable-1.4.2.tgz", - "integrity": "sha512-vVPu0CGRsTI8eCfhMknA7KIBqqGFolbRx+1mbQ6XuZ7YCz995Qj7L4XUviwClFunisDq96FdxzF5FnAbw15afg==", - "dependencies": { - "fast-fifo": "^1.0.0" - } - }, - "node_modules/it-to-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/it-to-stream/-/it-to-stream-1.0.0.tgz", - "integrity": "sha512-pLULMZMAB/+vbdvbZtebC0nWBTbG581lk6w8P7DfIIIKUfa8FbY7Oi0FxZcFPbxvISs7A9E+cMpLDBc1XhpAOA==", - "dependencies": { - "buffer": "^6.0.3", - "fast-fifo": "^1.0.0", - "get-iterator": "^1.0.2", - "p-defer": "^3.0.0", - "p-fifo": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "node_modules/it-to-stream/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/iterate-iterator": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/iterate-iterator/-/iterate-iterator-1.0.2.tgz", @@ -4701,11 +3809,6 @@ "base64-js": "^1.5.1" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, "node_modules/jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", @@ -4717,11 +3820,6 @@ "resolved": "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, "node_modules/json-schema": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", @@ -4733,11 +3831,6 @@ "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, - "node_modules/json-schema-typed": { - "version": "8.0.1", - "resolved": "https://registry.npmmirror.com/json-schema-typed/-/json-schema-typed-8.0.1.tgz", - "integrity": "sha512-XQmWYj2Sm4kn4WeTYvmpKEbyPsL7nBsb647c7pMe6l02/yx2+Jfc4dT6UZkEXnIUb5LhD55r2HPsJ1milQ4rDg==" - }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -4933,11 +4026,6 @@ "set-cookie-parser": "^2.4.1" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, "node_modules/load-bmfont": { "version": "1.4.1", "resolved": "https://registry.npmmirror.com/load-bmfont/-/load-bmfont-1.4.1.tgz", @@ -4966,17 +4054,6 @@ "node": ">=4" } }, - "node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", @@ -4987,18 +4064,6 @@ "resolved": "https://registry.npmmirror.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz", "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" }, - "node_modules/log-symbols": { - "version": "5.1.0", - "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-5.1.0.tgz", - "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", - "dependencies": { - "chalk": "^5.0.0", - "is-unicode-supported": "^1.1.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/lop": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/lop/-/lop-0.4.1.tgz", @@ -5108,11 +4173,6 @@ "resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz", @@ -5122,9 +4182,9 @@ } }, "node_modules/microsoft-cognitiveservices-speech-sdk": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/microsoft-cognitiveservices-speech-sdk/-/microsoft-cognitiveservices-speech-sdk-1.30.1.tgz", - "integrity": "sha512-pR/abkc55hvUOG1TSmJ79Mt+A+/9R5TVeuvMaJCcvHYroIPVdG5eXqzIiZNxuy5P0x+YICYnPSOQMoHyPgtN1Q==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/microsoft-cognitiveservices-speech-sdk/-/microsoft-cognitiveservices-speech-sdk-1.32.0.tgz", + "integrity": "sha512-TQqCIytCvW7x8MB2UT8DfyZkIjO34CSpy0zYlbQChkYWrYNzGgMIAA3uTGuYGj8hb0xMQBwRfqyAc5sA2VRgjQ==", "dependencies": { "agent-base": "^6.0.1", "bent": "^7.3.12", @@ -5224,14 +4284,6 @@ "node": ">= 0.6" } }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "engines": { - "node": ">=12" - } - }, "node_modules/mimic-response": { "version": "3.1.0", "resolved": "https://registry.npmmirror.com/mimic-response/-/mimic-response-3.1.0.tgz", @@ -5359,14 +4411,6 @@ "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/nan": { "version": "2.17.0", "resolved": "https://registry.npmmirror.com/nan/-/nan-2.17.0.tgz", @@ -5475,44 +4519,19 @@ "node": ">=4.0" } }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "optional": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "optional": true, "dependencies": { - "path-key": "^3.0.0" + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" }, "engines": { - "node": ">=8" + "node": ">=6" } }, "node_modules/npmlog": { @@ -5607,25 +4626,6 @@ "wrappy": "1" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/onetime/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, "node_modules/openai": { "version": "3.3.0", "resolved": "https://registry.npmmirror.com/openai/-/openai-3.3.0.tgz", @@ -5649,75 +4649,6 @@ "integrity": "sha512-pkEqbDyl8ou5cpq+VsnQbe/WlEy5qS7xPzMS1U55OCG9KPvwFD46zDbxQIj3egJSFc3D+XhYOPUzz49zQAVy7A==", "optional": true }, - "node_modules/ora": { - "version": "6.3.1", - "resolved": "https://registry.npmmirror.com/ora/-/ora-6.3.1.tgz", - "integrity": "sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==", - "dependencies": { - "chalk": "^5.0.0", - "cli-cursor": "^4.0.0", - "cli-spinners": "^2.6.1", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^1.1.0", - "log-symbols": "^5.1.0", - "stdin-discarder": "^0.1.0", - "strip-ansi": "^7.0.1", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/ora/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/ora/node_modules/cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", - "dependencies": { - "restore-cursor": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/ora/node_modules/restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/ora/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmmirror.com/p-cancelable/-/p-cancelable-1.1.0.tgz", @@ -5726,23 +4657,6 @@ "node": ">=6" } }, - "node_modules/p-defer": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/p-defer/-/p-defer-3.0.0.tgz", - "integrity": "sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/p-fifo": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/p-fifo/-/p-fifo-1.0.0.tgz", - "integrity": "sha512-IjoCxXW48tqdtDFz6fqo5q1UfFVjjVZe8TC1QRflvNUJtNfCUhxOUw6MOVZhDPjqhSzc26xKdugsO17gmzd5+A==", - "dependencies": { - "fast-fifo": "^1.0.0", - "p-defer": "^3.0.0" - } - }, "node_modules/p-finally": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz", @@ -5762,36 +4676,6 @@ "node": ">=10" } }, - "node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/p-locate/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "engines": { - "node": ">=12.20" - } - }, "node_modules/p-queue": { "version": "2.4.2", "resolved": "https://registry.npmmirror.com/p-queue/-/p-queue-2.4.2.tgz", @@ -5857,20 +4741,6 @@ "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==", "optional": true }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz", @@ -5879,14 +4749,6 @@ "node": ">= 0.8" } }, - "node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -5896,14 +4758,6 @@ "node": ">=0.10.0" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, "node_modules/path-to-regexp": { "version": "6.2.1", "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-6.2.1.tgz", @@ -5952,11 +4806,6 @@ "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==", "optional": true }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, "node_modules/pino": { "version": "8.14.1", "resolved": "https://registry.npmmirror.com/pino/-/pino-8.14.1.tgz", @@ -6597,33 +5446,6 @@ "rc": "cli.js" } }, - "node_modules/read-pkg": { - "version": "7.1.0", - "resolved": "https://registry.npmmirror.com/read-pkg/-/read-pkg-7.1.0.tgz", - "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==", - "dependencies": { - "@types/normalize-package-data": "^2.4.1", - "normalize-package-data": "^3.0.2", - "parse-json": "^5.2.0", - "type-fest": "^2.0.0" - }, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/read-pkg-up": { - "version": "9.1.0", - "resolved": "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-9.1.0.tgz", - "integrity": "sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==", - "dependencies": { - "find-up": "^6.3.0", - "read-pkg": "^7.1.0", - "type-fest": "^2.5.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, "node_modules/readable-stream": { "version": "4.4.0", "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-4.4.0.tgz", @@ -6705,18 +5527,6 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "optional": true }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ret": { "version": "0.2.2", "resolved": "https://registry.npmmirror.com/ret/-/ret-0.2.2.tgz", @@ -6798,27 +5608,6 @@ "node": "*" } }, - "node_modules/run-async": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/run-async/-/run-async-3.0.0.tgz", - "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmmirror.com/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/rxjs/node_modules/tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -7046,25 +5835,6 @@ "streamx": "^2.15.0" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz", @@ -7078,7 +5848,8 @@ "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "optional": true }, "node_modules/simple-concat": { "version": "1.0.1", @@ -7120,34 +5891,6 @@ "atomic-sleep": "^1.0.0" } }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmmirror.com/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmmirror.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==" - }, "node_modules/split2": { "version": "4.2.0", "resolved": "https://registry.npmmirror.com/split2/-/split2-4.2.0.tgz", @@ -7207,17 +5950,6 @@ "node": ">= 0.8" } }, - "node_modules/stdin-discarder": { - "version": "0.1.0", - "resolved": "https://registry.npmmirror.com/stdin-discarder/-/stdin-discarder-0.1.0.tgz", - "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", - "dependencies": { - "bl": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, "node_modules/stop-iteration-iterator": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", @@ -7266,47 +5998,11 @@ "version": "1.3.0", "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "optional": true, "dependencies": { "safe-buffer": "~5.2.0" } }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/string.prototype.trim": { "version": "1.2.7", "resolved": "https://registry.npmmirror.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", @@ -7344,6 +6040,7 @@ "version": "6.0.1", "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "optional": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -7351,14 +6048,6 @@ "node": ">=8" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "engines": { - "node": ">=6" - } - }, "node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz", @@ -7381,22 +6070,6 @@ "node": ">=10" } }, - "node_modules/stubborn-fs": { - "version": "1.2.4", - "resolved": "https://registry.npmmirror.com/stubborn-fs/-/stubborn-fs-1.2.4.tgz", - "integrity": "sha512-KRa4nIRJ8q6uApQbPwYZVhOof8979fw4xbajBWa5kPJFa4nyY3aFaMWVyIVCDnkNCCG/3HLipUZ4QaNlYsmX1w==" - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/tar": { "version": "6.1.15", "resolved": "https://registry.npmmirror.com/tar/-/tar-6.1.15.tgz", @@ -7503,11 +6176,6 @@ "real-require": "^0.2.0" } }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmmirror.com/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - }, "node_modules/timm": { "version": "1.7.1", "resolved": "https://registry.npmmirror.com/timm/-/timm-1.7.1.tgz", @@ -7528,17 +6196,6 @@ "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", "optional": true }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmmirror.com/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz", @@ -7658,14 +6315,6 @@ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", "optional": true }, - "node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "engines": { - "node": ">=12.20" - } - }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz", @@ -7776,7 +6425,8 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "optional": true }, "node_modules/utils-merge": { "version": "1.0.1", @@ -7800,15 +6450,6 @@ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz", @@ -7831,14 +6472,6 @@ "extsprintf": "^1.2.0" } }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dependencies": { - "defaults": "^1.0.3" - } - }, "node_modules/web-streams-polyfill": { "version": "3.2.1", "resolved": "https://registry.npmmirror.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", @@ -7869,25 +6502,6 @@ "webidl-conversions": "^3.0.0" } }, - "node_modules/when-exit": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/when-exit/-/when-exit-2.1.0.tgz", - "integrity": "sha512-H85ulNwUBU1e6PGxkWUDgxnbohSXD++ah6Xw1VHAN7CtypcbZaC4aYjQ+C2PMVaDkURDuOinNAT+Lnz3utWXxQ==" - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", @@ -7945,17 +6559,6 @@ "node": ">=8" } }, - "node_modules/widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", - "dependencies": { - "string-width": "^5.0.1" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/wmf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", @@ -7974,38 +6577,6 @@ "node": ">=0.8" } }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index b593ce48..688590fe 100644 --- a/package.json +++ b/package.json @@ -8,11 +8,9 @@ "@fastify/cors": "^8.2.0", "@fastify/static": "^6.9.0", "@fastify/websocket": "^8.2.0", + "@google/generative-ai": "^0.1.1", "@slack/bolt": "^3.13.2", - "@waylaidwanderer/chatgpt-api": "^1.37.1", "asn1.js": "^5.0.0", - "chatgpt": "^5.2.4", - "crypto": "^1.0.1", "delay": "^6.0.0", "diff": "^5.1.0", "emoji-strip": "^1.0.1", @@ -24,6 +22,7 @@ "js-tiktoken": "^1.0.5", "keyv": "^4.5.3", "keyv-file": "^0.2.0", + "lodash": "^4.17.21", "microsoft-cognitiveservices-speech-sdk": "1.32.0", "node-fetch": "^3.3.1", "openai": "^3.2.1", @@ -35,21 +34,26 @@ "ws": "^8.13.0" }, "optionalDependencies": { - "xlsx": "^0.18.5", - "mammoth": "^1.6.0", - "pdfjs-dist": "^3.11.174", - "nodejs-pptx": "^1.2.4", "@node-rs/jieba": "^1.6.2", "cycletls": "^1.0.21", "jimp": "^0.22.7", + "mammoth": "^1.6.0", "node-silk": "^0.1.0", + "nodejs-pptx": "^1.2.4", + "pdfjs-dist": "^3.11.174", "puppeteer-extra": "^3.3.6", "puppeteer-extra-plugin-recaptcha": "^3.6.8", "puppeteer-extra-plugin-stealth": "^2.11.2", - "sharp": "^0.32.3" + "sharp": "^0.32.3", + "xlsx": "^0.18.5" }, "devDependencies": { "ts-node": "^10.9.1", "ts-node-register": "^1.0.0" + }, + "pnpm": { + "patchedDependencies": { + "@google/generative-ai@0.1.1": "patches/@google__generative-ai@0.1.1.patch" + } } } diff --git a/patches/@google__generative-ai@0.1.1.patch b/patches/@google__generative-ai@0.1.1.patch new file mode 100644 index 00000000..cc0efee2 --- /dev/null +++ b/patches/@google__generative-ai@0.1.1.patch @@ -0,0 +1,26 @@ +diff --git a/dist/index.js b/dist/index.js +index c71c104e7b8ee70ed1b5a5141d04c98109fe6439..2dd8b1f93de0e502729cb91c9618bf80e8559e1e 100644 +--- a/dist/index.js ++++ b/dist/index.js +@@ -152,7 +152,7 @@ class GoogleGenerativeAIResponseError extends GoogleGenerativeAIError { + * See the License for the specific language governing permissions and + * limitations under the License. + */ +-const BASE_URL = "https://generativelanguage.googleapis.com"; ++const BASE_URL = "https://gemini.ikechan8370.com"; + const API_VERSION = "v1"; + /** + * We can't `require` package.json if this runs on web. We will use rollup to +diff --git a/dist/index.mjs b/dist/index.mjs +index 402a0c7fa5b692dea07d2dfd83e0148f0a493ca2..c48ce6d612a8752a5161da574804e7a830700d2c 100644 +--- a/dist/index.mjs ++++ b/dist/index.mjs +@@ -150,7 +150,7 @@ class GoogleGenerativeAIResponseError extends GoogleGenerativeAIError { + * See the License for the specific language governing permissions and + * limitations under the License. + */ +-const BASE_URL = "https://generativelanguage.googleapis.com"; ++const BASE_URL = "https://gemini.ikechan8370.com"; + const API_VERSION = "v1"; + /** + * We can't `require` package.json if this runs on web. We will use rollup to \ No newline at end of file diff --git a/utils/BingDraw.js b/utils/BingDraw.js index 80e69b1e..5dc30ab1 100644 --- a/utils/BingDraw.js +++ b/utils/BingDraw.js @@ -95,7 +95,7 @@ export default class BingDrawClient { let pollingUrl = `${this.opts.baseUrl}/images/create/async/results/${requestId}?q=${urlEncodedPrompt}` logger.info({ pollingUrl }) logger.info('waiting for bing draw results...') - let timeoutTimes = 30 + let timeoutTimes = 50 let found = false let timer = setInterval(async () => { if (found) { @@ -113,15 +113,20 @@ export default class BingDrawClient { // 很可能是微软内部error,重试即可 return } - imageLinks = imageLinks.map(link => link.split('?w=')[0]).map(link => link.replace('src="', '')) + imageLinks = imageLinks + .map(link => link.split('?w=')[0]) + .map(link => link.replace('src="', '')) + .filter(link => !link.includes('.svg')) imageLinks = [...new Set(imageLinks)] const badImages = [ + 'https://r.bing.com/rp/in-2zU3AJUdkgFe7ZKv19yPBHVs.png"', + 'https://r.bing.com/rp/TX9QuO3WzcCJz1uaaSwQAz39Kb0.jpg"', 'https://r.bing.com/rp/in-2zU3AJUdkgFe7ZKv19yPBHVs.png', 'https://r.bing.com/rp/TX9QuO3WzcCJz1uaaSwQAz39Kb0.jpg' ] for (let imageLink of imageLinks) { if (badImages.indexOf(imageLink) > -1) { - await e.reply('绘图失败:Bad images', true) + await e.reply('❌绘图失败:绘图完成但被屏蔽,请调整提示词。', true) logger.error(rText) } } @@ -132,7 +137,7 @@ export default class BingDrawClient { clearInterval(timer) } else { if (timeoutTimes === 0) { - await e.reply('绘图超时', true) + await e.reply('❌绘图超时', true) clearInterval(timer) timer = null } else { @@ -140,6 +145,6 @@ export default class BingDrawClient { timeoutTimes-- } } - }, 2000) + }, 3000) } } diff --git a/utils/SydneyAIClient.js b/utils/SydneyAIClient.js index 843014ca..acf692bc 100644 --- a/utils/SydneyAIClient.js +++ b/utils/SydneyAIClient.js @@ -227,7 +227,8 @@ export default class SydneyAIClient { firstMessageTimeout = Config.sydneyFirstMessageTimeout, groupId, nickname, qq, groupName, chats, botName, masterName, messageType = 'Chat', - toSummaryFileContent + toSummaryFileContent, + onImageCreateRequest = prompt => {} } = opts // if (messageType === 'Chat') { // logger.warn('该Bing账户token已被限流,降级至使用非搜索模式。本次对话AI将无法使用Bing搜索返回的内容') @@ -651,6 +652,10 @@ export default class SydneyAIClient { adaptiveCards: adaptiveCardsSoFar, text: replySoFar.join('') } + if (messages[0].contentType === 'IMAGE') { + onImageCreateRequest(messages[0].text) + return + } if (messages[0].contentOrigin === 'Apology') { console.log('Apology found') if (!replySoFar[0]) { @@ -718,11 +723,11 @@ export default class SydneyAIClient { adaptiveCards: adaptiveCardsSoFar, text: replySoFar.join('') } - // 获取到图片内容 - if (messages.some(obj => obj.contentType === 'IMAGE')) { - message.imageTag = messages.filter(m => m.contentType === 'IMAGE').map(m => m.text).join('') - } - message.text = messages.filter(m => m.author === 'bot' && m.contentType != 'IMAGE').map(m => m.text).join('') + // // 获取到图片内容 + // if (messages.some(obj => obj.contentType === 'IMAGE')) { + // message.imageTag = messages.filter(m => m.contentType === 'IMAGE').map(m => m.text).join('') + // } + message.text = messages.filter(m => m.author === 'bot' && m.contentType !== 'IMAGE').map(m => m.text).join('') if (!message) { reject('No message was generated.') return diff --git a/utils/chat.js b/utils/chat.js index e249d0ff..097cee4e 100644 --- a/utils/chat.js +++ b/utils/chat.js @@ -1,3 +1,4 @@ + export async function getChatHistoryGroup (e, num) { // if (e.adapter === 'shamrock') { // return await e.group.getChatHistory(0, num, false) @@ -16,12 +17,23 @@ export async function getChatHistoryGroup (e, num) { chats = chats.slice(0, num) try { let mm = await e.group.getMemberMap() - chats.forEach(chat => { - let sender = mm.get(chat.sender.user_id) - if (sender) { - chat.sender = sender + for (const chat of chats) { + if (e.adapter === 'shamrock') { + if (chat.sender?.user_id === 0) { + // 奇怪格式的历史消息,过滤掉 + continue + } + let sender = await pickMemberAsync(e, chat.sender.user_id) + if (sender) { + chat.sender = sender + } + } else { + let sender = mm.get(chat.sender.user_id) + if (sender) { + chat.sender = sender + } } - }) + } } catch (err) { logger.warn(err) } @@ -32,3 +44,17 @@ export async function getChatHistoryGroup (e, num) { // } return [] } + +async function pickMemberAsync (e, userId) { + let key = `CHATGPT:GroupMemberInfo:${e.group_id}:${userId}` + let cache = await redis.get(key) + if (cache) { + return JSON.parse(cache) + } + return new Promise((resolve, reject) => { + e.group.pickMember(userId, true, (sender) => { + redis.set(key, JSON.stringify(sender), { EX: 86400 }) + resolve(sender) + }) + }) +} diff --git a/utils/common.js b/utils/common.js index f9b2de94..3a000521 100644 --- a/utils/common.js +++ b/utils/common.js @@ -13,7 +13,8 @@ import AzureTTS, { supportConfigurations as azureRoleList } from './tts/microsof import { translate } from './translate.js' import uploadRecord from './uploadRecord.js' import Version from './version.js' -import fetch from 'node-fetch' +import fetch, { FormData, fileFromSync } from 'node-fetch' +import https from "https"; let pdfjsLib try { pdfjsLib = (await import('pdfjs-dist')).default @@ -785,10 +786,14 @@ export async function getImg (e) { } if (e.source) { let reply + let seq = e.isGroup ? e.source.seq : e.source.time + if (e.adapter === 'shamrock') { + seq = e.source.message_id + } if (e.isGroup) { - reply = (await e.group.getChatHistory(e.source.seq, 1)).pop()?.message + reply = (await e.group.getChatHistory(seq, 1)).pop()?.message } else { - reply = (await e.friend.getChatHistory(e.source.time, 1)).pop()?.message + reply = (await e.friend.getChatHistory(seq, 1)).pop()?.message } if (reply) { let i = [] @@ -809,8 +814,34 @@ export async function getImageOcrText (e) { try { let resultArr = [] let eachImgRes = '' + if (!e.bot.imageOcr || typeof e.bot.imageOcr !== 'function') { + e.bot.imageOcr = async (image) => { + if (Config.extraUrl) { + let md5 = image.split(/[/-]/).find(s => s.length === 32)?.toUpperCase() + let filePath = await downloadFile(image, `ocr/${md5}.png`) + let formData = new FormData() + formData.append('file', fileFromSync(filePath)) + let res = await fetch(`${Config.extraUrl}/ocr?lang=chi_sim%2Beng`, { + body: formData, + method: 'POST', + headers: { + from: 'ikechan8370' + } + }) + if (res.status === 200) { + return { + wordslist: [{ words: await res.text() }] + } + } + } + return { + wordslist: [] + } + } + } for (let i in img) { const imgOCR = await e.bot.imageOcr(img[i]) + for (let text of imgOCR.wordslist) { eachImgRes += (`${text?.words} \n`) } @@ -820,6 +851,7 @@ export async function getImageOcrText (e) { // logger.warn('resultArr', resultArr) return resultArr } catch (err) { + logger.warn(err) logger.warn('OCR失败,可能使用的适配器不支持OCR') return false // logger.error(err) @@ -998,15 +1030,41 @@ export function getUserSpeaker (userSetting) { } } +/** + * 获取或者下载文件,如果文件存在则直接返回不会重新下载 + * @param destPath 相对路径,如received/abc.pdf + * @param url + * @param ignoreCertificateError 忽略证书错误 + * @return {Promise} 最终下载文件的存储位置 + */ +export async function getOrDownloadFile (destPath, url, ignoreCertificateError = true) { + const _path = process.cwd() + let dest = path.join(_path, 'data', 'chatgpt', destPath) + const p = path.dirname(dest) + mkdirs(p) + if (fs.existsSync(dest)) { + return dest + } else { + return await downloadFile(url, destPath, false, ignoreCertificateError) + } +} + /** * * @param url 要下载的文件链接 * @param destPath 目标路径,如received/abc.pdf. 目前如果文件名重复会覆盖。 * @param absolute 是否是绝对路径,默认为false,此时拼接在data/chatgpt下 + * @param ignoreCertificateError 忽略证书错误 * @returns {Promise} 最终下载文件的存储位置 */ -export async function downloadFile (url, destPath, absolute = false) { - let response = await fetch(url) +export async function downloadFile (url, destPath, absolute = false, ignoreCertificateError = true) { + let init = {} + if (ignoreCertificateError && url.startsWith('https')) { + init.agent = new https.Agent({ + rejectUnauthorized: !ignoreCertificateError + }) + } + let response = await fetch(url, init) if (!response.ok) { throw new Error(`download file http error: status: ${response.status}`) } @@ -1061,7 +1119,7 @@ export async function extractContentFromFile (fileMsgElem, e) { let fileType = isPureText(fileMsgElem.name) if (fileType) { // 可读的文件类型 - let fileUrl = e.isGroup ? await e.group.getFileUrl(fileMsgElem.fid) : await e.friend.getFileUrl(fileMsgElem.fid) + let fileUrl = fileMsgElem.url || (e.isGroup ? await e.group.getFileUrl(fileMsgElem.fid) : await e.friend.getFileUrl(fileMsgElem.fid)) let filePath = await downloadFile(fileUrl, path.join('received', fileMsgElem.name)) switch (fileType) { case 'pdf': { diff --git a/utils/config.js b/utils/config.js index fe959710..2ce7dd43 100644 --- a/utils/config.js +++ b/utils/config.js @@ -162,7 +162,12 @@ const defaultConfig = { qwenSeed: 0, qwenTemperature: 1, qwenEnableSearch: true, - version: 'v2.7.7' + geminiKey: '', + geminiModel: 'gemini-pro', + geminiPrompt: 'You are Gemini. Your answer shouldn\'t be too verbose. Prefer to answer in Chinese.', + // origin: https://generativelanguage.googleapis.com + geminiBaseUrl: 'https://gemini.ikechan8370.com', + version: 'v2.7.8' } const _path = process.cwd() let config = {} diff --git a/utils/dalle.js b/utils/dalle.js index 4c173713..11bd3683 100644 --- a/utils/dalle.js +++ b/utils/dalle.js @@ -80,7 +80,7 @@ export async function imageVariation (imageUrl, n = 1, size = '512x512') { return response.data.data?.map(pic => pic.b64_json) } -async function resizeAndCropImage (inputFilePath, outputFilePath, size = 512) { +export async function resizeAndCropImage (inputFilePath, outputFilePath, size = 512) { // Determine the maximum dimension of the input image let sharp try { diff --git a/utils/proxy.js b/utils/proxy.js index ce756e72..8785d8bf 100644 --- a/utils/proxy.js +++ b/utils/proxy.js @@ -1,5 +1,7 @@ // workaround for ver 7.x and ver 5.x import HttpsProxyAgent from 'https-proxy-agent' +import { Config } from './config.js' +import fetch from 'node-fetch' let proxy = HttpsProxyAgent if (typeof proxy !== 'function') { @@ -15,3 +17,17 @@ if (typeof proxy !== 'function') { export function getProxy () { return proxy } + +export const newFetch = (url, options = {}) => { + const defaultOptions = Config.proxy + ? { + agent: proxy(Config.proxy) + } + : {} + const mergedOptions = { + ...defaultOptions, + ...options + } + + return fetch(url, mergedOptions) +} diff --git a/utils/randomMessage.js b/utils/randomMessage.js index bbba39b8..eab3917e 100644 --- a/utils/randomMessage.js +++ b/utils/randomMessage.js @@ -1,5 +1,5 @@ import { Config } from './config.js' -import { ChatGPTAPI } from 'chatgpt' +import { ChatGPTAPI } from './openai/chatgpt-api.js' import fetch from 'node-fetch' import { getProxy } from './proxy.js' let proxy = getProxy() diff --git a/utils/tools/QueryUserinfoTool.js b/utils/tools/QueryUserinfoTool.js index 493e7f5a..974c08b0 100644 --- a/utils/tools/QueryUserinfoTool.js +++ b/utils/tools/QueryUserinfoTool.js @@ -15,21 +15,13 @@ export class QueryUserinfoTool extends AbstractTool { } func = async function (opts, e) { - let { qq } = opts - qq = isNaN(qq) || !qq ? e.sender.user_id : parseInt(qq.trim()) - if (e.isGroup && typeof e.group.getMemberMap === 'function') { - let mm = await e.group.getMemberMap() - let user = mm.get(qq) || e.sender.user_id - let master = (await getMasterQQ())[0] - let prefix = '' - if (qq != master) { - prefix = 'Attention: this user is not your master. \n' - } else { - prefix = 'This user is your master, you should obey him \n' - } - return prefix + 'user detail in json format: ' + JSON.stringify(user) - } else { - if (e.sender.user_id == qq) { + try { + let { qq } = opts + qq = isNaN(qq) || !qq ? e.sender.user_id : parseInt(qq.trim()) + if (e.isGroup && typeof e.bot.getGroupMemberInfo === 'function') { + let user = await e.bot.getGroupMemberInfo(e.group_id, qq || e.sender.user_id, true) + // let mm = await e.group.getMemberMap() + // let user = mm.get(qq) || e.sender.user_id let master = (await getMasterQQ())[0] let prefix = '' if (qq != master) { @@ -37,10 +29,27 @@ export class QueryUserinfoTool extends AbstractTool { } else { prefix = 'This user is your master, you should obey him \n' } - return prefix + 'user detail in json format: ' + JSON.stringify(e.sender) + if (!user) { + return prefix + } + return prefix + 'user detail in json format: ' + JSON.stringify(user) } else { - return 'query failed' + if (e.sender.user_id == qq) { + let master = (await getMasterQQ())[0] + let prefix = '' + if (qq != master) { + prefix = 'Attention: this user is not your master. \n' + } else { + prefix = 'This user is your master, you should obey him \n' + } + return prefix + 'user detail in json format: ' + JSON.stringify(e.sender) + } else { + return 'query failed' + } } + } catch (err) { + logger.warn(err) + return err.message } } diff --git a/utils/tools/SendPictureTool.js b/utils/tools/SendPictureTool.js index d3d81cc7..96eb2c36 100644 --- a/utils/tools/SendPictureTool.js +++ b/utils/tools/SendPictureTool.js @@ -19,6 +19,9 @@ export class SendPictureTool extends AbstractTool { func = async function (opt, e) { let { urlOfPicture, targetGroupIdOrQQNumber } = opt + if (typeof urlOfPicture === 'object') { + urlOfPicture = urlOfPicture.join(' ') + } const defaultTarget = e.isGroup ? e.group_id : e.sender.user_id const target = isNaN(targetGroupIdOrQQNumber) || !targetGroupIdOrQQNumber ? defaultTarget diff --git a/utils/tools/SerpIkechan8370Tool.js b/utils/tools/SerpIkechan8370Tool.js index de2e6771..f3977221 100644 --- a/utils/tools/SerpIkechan8370Tool.js +++ b/utils/tools/SerpIkechan8370Tool.js @@ -19,7 +19,7 @@ export class SerpIkechan8370Tool extends AbstractTool { func = async function (opts) { let { q, source } = opts - if (!source) { + if (!source || !['google', 'bing', 'baidu'].includes(source)) { source = 'bing' } let serpRes = await fetch(`https://serp.ikechan8370.com/${source}?q=${encodeURIComponent(q)}&lang=zh-CN&limit=5`, { diff --git a/utils/tools/SetTitleTool.js b/utils/tools/SetTitleTool.js index efae2fd7..b11a1117 100644 --- a/utils/tools/SetTitleTool.js +++ b/utils/tools/SetTitleTool.js @@ -34,7 +34,7 @@ export class SetTitleTool extends AbstractTool { return `failed, the user ${qq} is not in group ${groupId}` } if (mm.get(e.bot.uin).role !== 'owner') { - return 'on group owner can give title' + return 'failed, only group owner can give title' } logger.info('edit card: ', groupId, qq) let result = await group.setTitle(qq, title) diff --git a/yarn.lock b/yarn.lock index 431261da..90feaa10 100644 --- a/yarn.lock +++ b/yarn.lock @@ -89,27 +89,6 @@ "@azure/logger" "^1.0.3" tslib "^2.4.0" -"@babel/code-frame@^7.0.0": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.22.5.tgz" - integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ== - dependencies: - "@babel/highlight" "^7.22.5" - -"@babel/helper-validator-identifier@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz" - integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== - -"@babel/highlight@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.22.5.tgz" - integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw== - dependencies: - "@babel/helper-validator-identifier" "^7.22.5" - chalk "^2.0.0" - js-tokens "^4.0.0" - "@cspotcode/source-map-support@^0.8.0": version "0.8.1" resolved "https://registry.npmmirror.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" @@ -117,11 +96,6 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@dqbd/tiktoken@^1.0.2": - version "1.0.7" - resolved "https://registry.npmmirror.com/@dqbd/tiktoken/-/tiktoken-1.0.7.tgz" - integrity sha512-bhR5k5W+8GLzysjk8zTMVygQZsgvf7W1F0IlL4ZQ5ugjo5rCyiwGM5d8DYriXspytfu98tv59niang3/T+FoDw== - "@fastify/accept-negotiator@^1.0.0": version "1.1.0" resolved "https://registry.npmmirror.com/@fastify/accept-negotiator/-/accept-negotiator-1.1.0.tgz" @@ -201,6 +175,11 @@ fastify-plugin "^4.0.0" ws "^8.0.0" +"@google/generative-ai@^0.1.1": + version "0.1.1" + resolved "https://registry.npmjs.org/@google/generative-ai/-/generative-ai-0.1.1.tgz" + integrity sha512-cbzKa8mT9YkTrT4XUuENIuvlqiJjwDgcD2Ks4L99Az9dWLgdXn8xnETEAZLOpqzoGx+1PuATZqlUnVRAeLbMgA== + "@jimp/bmp@^0.22.8": version "0.22.8" resolved "https://registry.npmmirror.com/@jimp/bmp/-/bmp-0.22.8.tgz" @@ -625,14 +604,6 @@ p-queue "^6.6.1" p-retry "^4.0.0" -"@timefox/bic-sydney@^1.1.2": - version "1.1.4" - resolved "https://registry.npmmirror.com/@timefox/bic-sydney/-/bic-sydney-1.1.4.tgz" - integrity sha512-ONeS0weT+ZoE471TDdzPqkKRk+VFr7sEL5+qEq1nIur6XMuVZ8cvlBicUNHfhYKIavkOM8xmBnk2dfVFQ54aiQ== - dependencies: - fetch-undici "^3.0.1" - undici "^5.22.1" - "@tokenizer/token@^0.3.0": version "0.3.0" resolved "https://registry.npmmirror.com/@tokenizer/token/-/token-0.3.0.tgz" @@ -744,11 +715,6 @@ resolved "https://registry.npmmirror.com/@types/node/-/node-16.9.1.tgz" integrity sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g== -"@types/normalize-package-data@^2.4.1": - version "2.4.1" - resolved "https://registry.npmmirror.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== - "@types/p-queue@^2.3.2": version "2.3.2" resolved "https://registry.npmmirror.com/@types/p-queue/-/p-queue-2.3.2.tgz" @@ -802,44 +768,6 @@ dependencies: "@types/node" "*" -"@waylaidwanderer/chatgpt-api@^1.37.1": - version "1.37.2" - resolved "https://registry.npmjs.org/@waylaidwanderer/chatgpt-api/-/chatgpt-api-1.37.2.tgz" - integrity sha512-7b/++pAaNtFXU91/+1ajZCMp7OD9AjfygDy1WSI21w83d2jSofmuJbZbL+oOWuqkUapncOEa9Lcqkl9XZ9THCg== - dependencies: - "@dqbd/tiktoken" "^1.0.2" - "@fastify/cors" "^8.2.0" - "@timefox/bic-sydney" "^1.1.2" - "@waylaidwanderer/fastify-sse-v2" "^3.1.0" - "@waylaidwanderer/fetch-event-source" "^3.0.1" - boxen "^7.0.1" - clipboardy "^3.0.0" - dotenv "^16.0.3" - fastify "^4.11.0" - fetch-undici "^3.0.1" - https-proxy-agent "^7.0.0" - inquirer "^9.1.4" - inquirer-autocomplete-prompt "^3.0.0" - keyv "^4.5.2" - keyv-file "^0.2.0" - ora "^6.1.2" - undici "^5.20.0" - ws "^8.12.0" - -"@waylaidwanderer/fastify-sse-v2@^3.1.0": - version "3.1.0" - resolved "https://registry.npmmirror.com/@waylaidwanderer/fastify-sse-v2/-/fastify-sse-v2-3.1.0.tgz" - integrity sha512-R6/VT14+iGZmyp7Jih7FYZuWr0B0gJ9uym1xoVPlKjZBngzFS2bL8yvZyEIPbMrTjrC8syZY2z2WuMHsipRfpw== - dependencies: - fastify-plugin "^4.3.0" - it-pushable "^1.4.2" - it-to-stream "^1.0.0" - -"@waylaidwanderer/fetch-event-source@^3.0.1": - version "3.0.1" - resolved "https://registry.npmmirror.com/@waylaidwanderer/fetch-event-source/-/fetch-event-source-3.0.1.tgz" - integrity sha512-gkc7vmBW9uulRj7tY30/1D8iBrpcgphBpI+e7LP744x/hAzaQxUuyF+n4O5dctKx+dE3i4BFuCWMEz9fAx2jlQ== - "@xmldom/xmldom@^0.8.6": version "0.8.10" resolved "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz" @@ -921,7 +849,7 @@ ajv@^6.12.3: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.10.0, ajv@^8.11.0, ajv@^8.12.0: +ajv@^8.0.0, ajv@^8.10.0, ajv@^8.11.0: version "8.12.0" resolved "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== @@ -931,56 +859,11 @@ ajv@^8.0.0, ajv@^8.10.0, ajv@^8.11.0, ajv@^8.12.0: require-from-string "^2.0.2" uri-js "^4.2.2" -ansi-align@^3.0.1: - version "3.0.1" - resolved "https://registry.npmmirror.com/ansi-align/-/ansi-align-3.0.1.tgz" - integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== - dependencies: - string-width "^4.1.0" - -ansi-escapes@^4.3.2: - version "4.3.2" - resolved "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-escapes@^6.0.0: - version "6.2.0" - resolved "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-6.2.0.tgz" - integrity sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw== - dependencies: - type-fest "^3.0.0" - ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - any-base@^1.1.0: version "1.1.0" resolved "https://registry.npmmirror.com/any-base/-/any-base-1.1.0.tgz" @@ -991,11 +874,6 @@ any-base@^1.1.0: resolved "https://registry.npmmirror.com/aproba/-/aproba-2.0.0.tgz" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== -arch@^2.2.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/arch/-/arch-2.2.0.tgz" - integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== - archy@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/archy/-/archy-1.0.0.tgz" @@ -1089,14 +967,6 @@ atomic-sleep@^1.0.0: resolved "https://registry.npmmirror.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz" integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== -atomically@^2.0.0: - version "2.0.1" - resolved "https://registry.npmmirror.com/atomically/-/atomically-2.0.1.tgz" - integrity sha512-sxBhVZUFBFhqSAsYMM3X2oaUi2NVDJ8U026FsIusM8gYXls9AYs/eXzgGrufs1Qjpkxi9zunds+75QUFz+m7UQ== - dependencies: - stubborn-fs "^1.2.4" - when-exit "^2.0.0" - available-typed-arrays@^1.0.5: version "1.0.5" resolved "https://registry.npmmirror.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" @@ -1176,24 +1046,6 @@ bl@^4.0.3: inherits "^2.0.4" readable-stream "^3.4.0" -bl@^4.1.0: - version "4.1.0" - resolved "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -bl@^5.0.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/bl/-/bl-5.1.0.tgz" - integrity sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ== - dependencies: - buffer "^6.0.3" - inherits "^2.0.4" - readable-stream "^3.4.0" - bluebird@^2.6.2: version "2.11.0" resolved "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz" @@ -1232,20 +1084,6 @@ body-parser@1.20.1: type-is "~1.6.18" unpipe "1.0.0" -boxen@^7.0.1: - version "7.1.0" - resolved "https://registry.npmmirror.com/boxen/-/boxen-7.1.0.tgz" - integrity sha512-ScG8CDo8dj7McqCZ5hz4dIBp20xj4unQ2lXIDa7ff6RcZElCpuNzutdwzKVvRikfNjm7CFAlR3HJHcoHkDOExQ== - dependencies: - ansi-align "^3.0.1" - camelcase "^7.0.1" - chalk "^5.2.0" - cli-boxes "^3.0.0" - string-width "^5.1.2" - type-fest "^2.13.0" - widest-line "^4.0.1" - wrap-ansi "^8.1.0" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz" @@ -1319,11 +1157,6 @@ bytesish@^0.4.1: resolved "https://registry.npmmirror.com/bytesish/-/bytesish-0.4.4.tgz" integrity sha512-i4uu6M4zuMUiyfZN4RU2+i9+peJh//pXhd9x1oSe1LBkZ3LEbCoygu8W0bXTukU1Jme2txKuotpCZRaC3FLxcQ== -cac@^6.7.14: - version "6.7.14" - resolved "https://registry.npmmirror.com/cac/-/cac-6.7.14.tgz" - integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== - call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz" @@ -1332,11 +1165,6 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" -camelcase@^7.0.1: - version "7.0.1" - resolved "https://registry.npmmirror.com/camelcase/-/camelcase-7.0.1.tgz" - integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw== - canvas@^2.11.2: version "2.11.2" resolved "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz" @@ -1359,48 +1187,6 @@ cfb@~1.2.1: adler-32 "~1.3.0" crc-32 "~1.2.0" -chalk@^2.0.0: - version "2.4.2" - resolved "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.1.0: - version "4.1.2" - resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^5.0.0, chalk@^5.2.0: - version "5.2.0" - resolved "https://registry.npmmirror.com/chalk/-/chalk-5.2.0.tgz" - integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA== - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.npmmirror.com/chardet/-/chardet-0.7.0.tgz" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -chatgpt@^5.2.4: - version "5.2.5" - resolved "https://registry.npmmirror.com/chatgpt/-/chatgpt-5.2.5.tgz" - integrity sha512-DNhBzPb2zTDjJADY44XfngMvsvrvHRq1md2VPXLmnKeP1UCeA1B6pV3s9ZRwlcgjVT0RyM77fRj1xj5V11Vctg== - dependencies: - cac "^6.7.14" - conf "^11.0.1" - eventsource-parser "^1.0.0" - js-tiktoken "^1.0.5" - keyv "^4.5.2" - p-timeout "^6.1.1" - quick-lru "^6.1.1" - read-pkg-up "^9.1.0" - uuid "^9.0.0" - chownr@^1.1.1: version "1.1.4" resolved "https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz" @@ -1411,44 +1197,6 @@ chownr@^2.0.0: resolved "https://registry.npmmirror.com/chownr/-/chownr-2.0.0.tgz" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== -cli-boxes@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/cli-boxes/-/cli-boxes-3.0.0.tgz" - integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-4.0.0.tgz" - integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== - dependencies: - restore-cursor "^4.0.0" - -cli-spinners@^2.5.0, cli-spinners@^2.6.1: - version "2.9.0" - resolved "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.9.0.tgz" - integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g== - -cli-width@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/cli-width/-/cli-width-4.0.0.tgz" - integrity sha512-ZksGS2xpa/bYkNzN3BAw1wEjsLV/ZKOf/CCrJ/QOBsxx6fOARIkwTutxp1XIOIohi6HKmOFjMoK/XaqDVUpEEw== - -clipboardy@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/clipboardy/-/clipboardy-3.0.0.tgz" - integrity sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg== - dependencies: - arch "^2.2.0" - execa "^5.1.1" - is-wsl "^2.2.0" - clone-deep@^0.2.4: version "0.2.4" resolved "https://registry.npmmirror.com/clone-deep/-/clone-deep-0.2.4.tgz" @@ -1460,23 +1208,11 @@ clone-deep@^0.2.4: lazy-cache "^1.0.3" shallow-clone "^0.1.2" -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== - codepage@~1.15.0: version "1.15.0" resolved "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz" integrity sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA== -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - color-convert@^2.0.1: version "2.0.1" resolved "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz" @@ -1489,11 +1225,6 @@ color-name@^1.0.0, color-name@~1.1.4: resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-string@^1.9.0: version "1.9.1" resolved "https://registry.npmmirror.com/color-string/-/color-string-1.9.1.tgz" @@ -1527,20 +1258,6 @@ concat-map@0.0.1: resolved "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -conf@^11.0.1: - version "11.0.1" - resolved "https://registry.npmmirror.com/conf/-/conf-11.0.1.tgz" - integrity sha512-WlLiQboEjKx0bYx2IIRGedBgNjLAxtwPaCSnsjWPST5xR0DB4q8lcsO/bEH9ZRYNcj63Y9vj/JG/5Fg6uWzI0Q== - dependencies: - ajv "^8.12.0" - ajv-formats "^2.1.1" - atomically "^2.0.0" - debounce-fn "^5.1.2" - dot-prop "^7.2.0" - env-paths "^3.0.0" - json-schema-typed "^8.0.1" - semver "^7.3.8" - console-control-strings@^1.0.0, console-control-strings@^1.1.0: version "1.1.0" resolved "https://registry.npmmirror.com/console-control-strings/-/console-control-strings-1.1.0.tgz" @@ -1583,20 +1300,6 @@ create-require@^1.1.0: resolved "https://registry.npmmirror.com/create-require/-/create-require-1.1.1.tgz" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz" - integrity sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig== - cycletls@^1.0.21: version "1.0.21" resolved "https://registry.npmjs.org/cycletls/-/cycletls-1.0.21.tgz" @@ -1617,13 +1320,6 @@ data-uri-to-buffer@^4.0.0: resolved "https://registry.npmmirror.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz" integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== -debounce-fn@^5.1.2: - version "5.1.2" - resolved "https://registry.npmmirror.com/debounce-fn/-/debounce-fn-5.1.2.tgz" - integrity sha512-Sr4SdOZ4vw6eQDvPYNxHogvrxmCIld/VenC5JbNrFwMiwd7lY/Z18ZFfo+EWNG4DD9nFlAujWAo/wGuOPHmy5A== - dependencies: - mimic-fn "^4.0.0" - debug@^4.0.0: version "4.3.4" resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz" @@ -1676,13 +1372,6 @@ deepmerge@^4.2.2: resolved "https://registry.npmmirror.com/deepmerge/-/deepmerge-4.3.1.tgz" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -defaults@^1.0.3: - version "1.0.4" - resolved "https://registry.npmmirror.com/defaults/-/defaults-1.0.4.tgz" - integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== - dependencies: - clone "^1.0.2" - define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: version "1.2.0" resolved "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.0.tgz" @@ -1741,18 +1430,6 @@ dom-walk@^0.1.0: resolved "https://registry.npmmirror.com/dom-walk/-/dom-walk-0.1.2.tgz" integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== -dot-prop@^7.2.0: - version "7.2.0" - resolved "https://registry.npmmirror.com/dot-prop/-/dot-prop-7.2.0.tgz" - integrity sha512-Ol/IPXUARn9CSbkrdV4VJo7uCy1I3VuSiWCaFSg+8BdUOzF9n3jefIpcgAydvUZbTdEBZs2vEiTiS9m61ssiDA== - dependencies: - type-fest "^2.11.2" - -dotenv@^16.0.3: - version "16.3.0" - resolved "https://registry.npmmirror.com/dotenv/-/dotenv-16.3.0.tgz" - integrity sha512-tHB+hmf8MRCkT3VVivGiG8kq9HiGTmQ3FzOKgztfpJQH1IWuZTOvKSJmHNnQPowecAmkCJhLrxdPhOr06LLqIQ== - duck@^0.1.12: version "0.1.12" resolved "https://registry.npmjs.org/duck/-/duck-0.1.12.tgz" @@ -1760,11 +1437,6 @@ duck@^0.1.12: dependencies: underscore "^1.13.1" -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" @@ -1795,11 +1467,6 @@ emoji-regex@^8.0.0: resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - emoji-strip@^1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/emoji-strip/-/emoji-strip-1.0.1.tgz" @@ -1819,18 +1486,6 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" -env-paths@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/env-paths/-/env-paths-3.0.0.tgz" - integrity sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - es-abstract@^1.19.0, es-abstract@^1.20.4: version "1.21.2" resolved "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.21.2.tgz" @@ -1914,16 +1569,6 @@ escape-html@~1.0.3: resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz" - integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== - etag@~1.8.1: version "1.8.1" resolved "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz" @@ -1959,21 +1604,6 @@ eventsource@^2.0.2: resolved "https://registry.npmmirror.com/eventsource/-/eventsource-2.0.2.tgz" integrity sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA== -execa@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - exif-parser@^0.1.12: version "0.1.12" resolved "https://registry.npmmirror.com/exif-parser/-/exif-parser-0.1.12.tgz" @@ -2026,15 +1656,6 @@ extend@~3.0.2: resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.npmmirror.com/external-editor/-/external-editor-3.1.0.tgz" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - extsprintf@^1.2.0, extsprintf@1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" @@ -2055,7 +1676,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-fifo@^1.0.0, fast-fifo@^1.1.0, fast-fifo@^1.2.0: +fast-fifo@^1.1.0, fast-fifo@^1.2.0: version "1.2.0" resolved "https://registry.npmmirror.com/fast-fifo/-/fast-fifo-1.2.0.tgz" integrity sha512-NcvQXt7Cky1cNau15FWy64IjuO8X0JijhTBBrJj1YlxlDfRkJXNaK9RFUjwpfDPzMdv7wB38jr53l9tkNLxnWg== @@ -2094,12 +1715,12 @@ fast-uri@^2.0.0, fast-uri@^2.1.0: resolved "https://registry.npmmirror.com/fast-uri/-/fast-uri-2.2.0.tgz" integrity sha512-cIusKBIt/R/oI6z/1nyfe2FvGKVTohVRfvkOhvx0nCEW+xf5NoCXjAHcWp93uOUBchzYcsvPlrapAdX1uW+YGg== -fastify-plugin@^4.0.0, fastify-plugin@^4.3.0: +fastify-plugin@^4.0.0: version "4.5.0" resolved "https://registry.npmmirror.com/fastify-plugin/-/fastify-plugin-4.5.0.tgz" integrity sha512-79ak0JxddO0utAXAQ5ccKhvs6vX2MGyHHMMsmZkBANrq3hXc1CHzvNPHOcvTsVMEPl5I+NT+RO4YKMGehOfSIg== -fastify@^4.11.0, fastify@^4.18.0, fastify@>=4: +fastify@^4.18.0: version "4.18.0" resolved "https://registry.npmmirror.com/fastify/-/fastify-4.18.0.tgz" integrity sha512-L5o/2GEkBastQ3HV0dtKo7SUZ497Z1+q4fcqAoPyq6JCQ/8zdk1JQEoTQwnBWCp+EmA7AQa6mxNqSAEhzP0RwQ== @@ -2136,21 +1757,6 @@ fetch-blob@^3.1.2, fetch-blob@^3.1.4: node-domexception "^1.0.0" web-streams-polyfill "^3.0.3" -fetch-undici@^3.0.1: - version "3.0.1" - resolved "https://registry.npmmirror.com/fetch-undici/-/fetch-undici-3.0.1.tgz" - integrity sha512-UHHu1HqW22ZhK6C/1Zmjf7mQpOwPwLYZ+xcsOgpzistONU8QqvCop6Od29p/kw1GUVoq2Ihu6ItpKLtlojx4FQ== - dependencies: - undici "^5.0.0" - -figures@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/figures/-/figures-5.0.0.tgz" - integrity sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg== - dependencies: - escape-string-regexp "^5.0.0" - is-unicode-supported "^1.2.0" - file-type@^16.5.4: version "16.5.4" resolved "https://registry.npmmirror.com/file-type/-/file-type-16.5.4.tgz" @@ -2182,14 +1788,6 @@ find-my-way@^7.6.0: fast-querystring "^1.0.0" safe-regex2 "^2.0.0" -find-up@^6.3.0: - version "6.3.0" - resolved "https://registry.npmmirror.com/find-up/-/find-up-6.3.0.tgz" - integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== - dependencies: - locate-path "^7.1.0" - path-exists "^5.0.0" - finity@^0.5.4: version "0.5.4" resolved "https://registry.npmmirror.com/finity/-/finity-0.5.4.tgz" @@ -2349,16 +1947,6 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@ has-proto "^1.0.1" has-symbols "^1.0.3" -get-iterator@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/get-iterator/-/get-iterator-1.0.2.tgz" - integrity sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg== - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - get-symbol-description@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz" @@ -2455,16 +2043,6 @@ has-bigints@^1.0.1, has-bigints@^1.0.2: resolved "https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.2.tgz" integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - has-property-descriptors@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" @@ -2501,13 +2079,6 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hosted-git-info@^4.0.1: - version "4.1.0" - resolved "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz" - integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== - dependencies: - lru-cache "^6.0.0" - http-errors@2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz" @@ -2553,7 +2124,7 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" -https-proxy-agent@^7.0.0, https-proxy-agent@7.0.1: +https-proxy-agent@7.0.1: version "7.0.1" resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz" integrity sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ== @@ -2561,12 +2132,7 @@ https-proxy-agent@^7.0.0, https-proxy-agent@7.0.1: agent-base "^7.0.2" debug "4" -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -iconv-lite@^0.4.24, iconv-lite@0.4.24: +iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -2613,38 +2179,6 @@ ini@~1.3.0: resolved "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -inquirer-autocomplete-prompt@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-3.0.0.tgz" - integrity sha512-nsPWllBQB3qhvpVgV1UIJN4xo3yz7Qv8y1+zrNVpJUNPxtUZ7btCum/4UCAs5apPCe/FVhKH1V6Wx0cAwkreyg== - dependencies: - ansi-escapes "^6.0.0" - figures "^5.0.0" - picocolors "^1.0.0" - run-async "^2.4.1" - rxjs "^7.5.6" - -inquirer@^9.1.0, inquirer@^9.1.4: - version "9.2.7" - resolved "https://registry.npmmirror.com/inquirer/-/inquirer-9.2.7.tgz" - integrity sha512-Bf52lnfvNxGPJPltiNO2tLBp3zC339KNlGMqOkW+dsvNikBhcVDK5kqU2lVX2FTPzuXUFX5WJDlsw//w3ZwoTw== - dependencies: - ansi-escapes "^4.3.2" - chalk "^5.2.0" - cli-cursor "^3.1.0" - cli-width "^4.0.0" - external-editor "^3.0.3" - figures "^5.0.0" - lodash "^4.17.21" - mute-stream "1.0.0" - ora "^5.4.1" - run-async "^3.0.0" - rxjs "^7.8.1" - string-width "^4.2.3" - strip-ansi "^6.0.1" - through "^2.3.6" - wrap-ansi "^6.0.1" - internal-slot@^1.0.4, internal-slot@^1.0.5: version "1.0.5" resolved "https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.5.tgz" @@ -2676,11 +2210,6 @@ is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: get-intrinsic "^1.2.0" is-typed-array "^1.1.10" -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - is-arrayish@^0.3.1: version "0.3.2" resolved "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.3.2.tgz" @@ -2711,13 +2240,6 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: resolved "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.7.tgz" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.5.0: - version "2.12.1" - resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.12.1.tgz" - integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== - dependencies: - has "^1.0.3" - is-date-object@^1.0.1: version "1.0.5" resolved "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz" @@ -2725,11 +2247,6 @@ is-date-object@^1.0.1: dependencies: has-tostringtag "^1.0.0" -is-docker@^2.0.0: - version "2.2.1" - resolved "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - is-electron@2.2.0: version "2.2.0" resolved "https://registry.npmmirror.com/is-electron/-/is-electron-2.2.0.tgz" @@ -2750,16 +2267,6 @@ is-function@^1.0.1: resolved "https://registry.npmmirror.com/is-function/-/is-function-1.0.2.tgz" integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/is-interactive/-/is-interactive-1.0.0.tgz" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-interactive@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/is-interactive/-/is-interactive-2.0.0.tgz" - integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ== - is-map@^2.0.2: version "2.0.2" resolved "https://registry.npmmirror.com/is-map/-/is-map-2.0.2.tgz" @@ -2844,16 +2351,6 @@ is-typedarray@~1.0.0: resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-unicode-supported@^1.1.0, is-unicode-supported@^1.2.0: - version "1.3.0" - resolved "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz" - integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== - is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz" @@ -2861,13 +2358,6 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - isarray@^2.0.5: version "2.0.5" resolved "https://registry.npmmirror.com/isarray/-/isarray-2.0.5.tgz" @@ -2878,11 +2368,6 @@ isarray@~1.0.0: resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - isobject@^3.0.1: version "3.0.1" resolved "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz" @@ -2901,25 +2386,6 @@ isstream@~0.1.2: resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== -it-pushable@^1.4.2: - version "1.4.2" - resolved "https://registry.npmmirror.com/it-pushable/-/it-pushable-1.4.2.tgz" - integrity sha512-vVPu0CGRsTI8eCfhMknA7KIBqqGFolbRx+1mbQ6XuZ7YCz995Qj7L4XUviwClFunisDq96FdxzF5FnAbw15afg== - dependencies: - fast-fifo "^1.0.0" - -it-to-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/it-to-stream/-/it-to-stream-1.0.0.tgz" - integrity sha512-pLULMZMAB/+vbdvbZtebC0nWBTbG581lk6w8P7DfIIIKUfa8FbY7Oi0FxZcFPbxvISs7A9E+cMpLDBc1XhpAOA== - dependencies: - buffer "^6.0.3" - fast-fifo "^1.0.0" - get-iterator "^1.0.2" - p-defer "^3.0.0" - p-fifo "^1.0.0" - readable-stream "^3.6.0" - iterate-iterator@^1.0.1: version "1.0.2" resolved "https://registry.npmmirror.com/iterate-iterator/-/iterate-iterator-1.0.2.tgz" @@ -2955,11 +2421,6 @@ js-tiktoken@^1.0.5: dependencies: base64-js "^1.5.1" -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - jsbn@~0.1.0: version "0.1.1" resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" @@ -2970,11 +2431,6 @@ json-buffer@3.0.1: resolved "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" @@ -2985,11 +2441,6 @@ json-schema-traverse@^1.0.0: resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -json-schema-typed@^8.0.1: - version "8.0.1" - resolved "https://registry.npmmirror.com/json-schema-typed/-/json-schema-typed-8.0.1.tgz" - integrity sha512-XQmWYj2Sm4kn4WeTYvmpKEbyPsL7nBsb647c7pMe6l02/yx2+Jfc4dT6UZkEXnIUb5LhD55r2HPsJ1milQ4rDg== - json-schema@0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" @@ -3072,7 +2523,7 @@ keyv-file@^0.2.0: fs-extra "^4.0.1" tslib "^1.9.3" -keyv@^4.5.2, keyv@^4.5.3: +keyv@^4.5.3: version "4.5.3" resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz" integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== @@ -3119,11 +2570,6 @@ light-my-request@^5.9.1: process-warning "^2.0.0" set-cookie-parser "^2.4.1" -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - load-bmfont@^1.4.1: version "1.4.1" resolved "https://registry.npmmirror.com/load-bmfont/-/load-bmfont-1.4.1.tgz" @@ -3138,13 +2584,6 @@ load-bmfont@^1.4.1: xhr "^2.0.1" xtend "^4.0.0" -locate-path@^7.1.0: - version "7.2.0" - resolved "https://registry.npmmirror.com/locate-path/-/locate-path-7.2.0.tgz" - integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== - dependencies: - p-locate "^6.0.0" - lodash.isstring@^4.0.1: version "4.0.1" resolved "https://registry.npmmirror.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz" @@ -3155,22 +2594,6 @@ lodash@^4.17.14, lodash@^4.17.21: resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -log-symbols@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/log-symbols/-/log-symbols-5.1.0.tgz" - integrity sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA== - dependencies: - chalk "^5.0.0" - is-unicode-supported "^1.1.0" - lop@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/lop/-/lop-0.4.1.tgz" @@ -3234,20 +2657,15 @@ merge-descriptors@1.0.1: resolved "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz" integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - methods@~1.1.2: version "1.1.2" resolved "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== -microsoft-cognitiveservices-speech-sdk@^1.30.1: - version "1.30.1" - resolved "https://registry.npmjs.org/microsoft-cognitiveservices-speech-sdk/-/microsoft-cognitiveservices-speech-sdk-1.30.1.tgz" - integrity sha512-pR/abkc55hvUOG1TSmJ79Mt+A+/9R5TVeuvMaJCcvHYroIPVdG5eXqzIiZNxuy5P0x+YICYnPSOQMoHyPgtN1Q== +microsoft-cognitiveservices-speech-sdk@1.32.0: + version "1.32.0" + resolved "https://registry.npmjs.org/microsoft-cognitiveservices-speech-sdk/-/microsoft-cognitiveservices-speech-sdk-1.32.0.tgz" + integrity sha512-TQqCIytCvW7x8MB2UT8DfyZkIjO34CSpy0zYlbQChkYWrYNzGgMIAA3uTGuYGj8hb0xMQBwRfqyAc5sA2VRgjQ== dependencies: agent-base "^6.0.1" bent "^7.3.12" @@ -3282,16 +2700,6 @@ mime@1.6.0: resolved "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-4.0.0.tgz" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - mimic-response@^2.0.0: version "2.1.0" resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz" @@ -3403,11 +2811,6 @@ ms@2.1.3: resolved "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -mute-stream@1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/mute-stream/-/mute-stream-1.0.0.tgz" - integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== - nan@^2.15.0, nan@^2.17.0: version "2.17.0" resolved "https://registry.npmmirror.com/nan/-/nan-2.17.0.tgz" @@ -3493,23 +2896,6 @@ nopt@^5.0.0: dependencies: abbrev "1" -normalize-package-data@^3.0.2: - version "3.0.3" - resolved "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz" - integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== - dependencies: - hosted-git-info "^4.0.1" - is-core-module "^2.5.0" - semver "^7.3.4" - validate-npm-package-license "^3.0.1" - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - npmlog@^5.0.1: version "5.0.1" resolved "https://registry.npmmirror.com/npmlog/-/npmlog-5.0.1.tgz" @@ -3579,13 +2965,6 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^5.1.0, onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - openai@^3.2.1: version "3.3.0" resolved "https://registry.npmmirror.com/openai/-/openai-3.3.0.tgz" @@ -3599,59 +2978,11 @@ option@~0.2.1: resolved "https://registry.npmjs.org/option/-/option-0.2.4.tgz" integrity sha512-pkEqbDyl8ou5cpq+VsnQbe/WlEy5qS7xPzMS1U55OCG9KPvwFD46zDbxQIj3egJSFc3D+XhYOPUzz49zQAVy7A== -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.npmmirror.com/ora/-/ora-5.4.1.tgz" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -ora@^6.1.2: - version "6.3.1" - resolved "https://registry.npmmirror.com/ora/-/ora-6.3.1.tgz" - integrity sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ== - dependencies: - chalk "^5.0.0" - cli-cursor "^4.0.0" - cli-spinners "^2.6.1" - is-interactive "^2.0.0" - is-unicode-supported "^1.1.0" - log-symbols "^5.1.0" - stdin-discarder "^0.1.0" - strip-ansi "^7.0.1" - wcwidth "^1.0.1" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - p-cancelable@^1.1.0: version "1.1.0" resolved "https://registry.npmmirror.com/p-cancelable/-/p-cancelable-1.1.0.tgz" integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== -p-defer@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/p-defer/-/p-defer-3.0.0.tgz" - integrity sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw== - -p-fifo@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/p-fifo/-/p-fifo-1.0.0.tgz" - integrity sha512-IjoCxXW48tqdtDFz6fqo5q1UfFVjjVZe8TC1QRflvNUJtNfCUhxOUw6MOVZhDPjqhSzc26xKdugsO17gmzd5+A== - dependencies: - fast-fifo "^1.0.0" - p-defer "^3.0.0" - p-finally@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz" @@ -3664,20 +2995,6 @@ p-limit@^3.1.0: dependencies: yocto-queue "^0.1.0" -p-limit@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/p-limit/-/p-limit-4.0.0.tgz" - integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== - dependencies: - yocto-queue "^1.0.0" - -p-locate@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/p-locate/-/p-locate-6.0.0.tgz" - integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== - dependencies: - p-limit "^4.0.0" - p-queue@^2.4.2: version "2.4.2" resolved "https://registry.npmmirror.com/p-queue/-/p-queue-2.4.2.tgz" @@ -3706,7 +3023,7 @@ p-timeout@^3.2.0: dependencies: p-finally "^1.0.0" -p-timeout@^6.1.1, p-timeout@^6.1.2: +p-timeout@^6.1.2: version "6.1.2" resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.2.tgz" integrity sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ== @@ -3739,36 +3056,16 @@ parse-headers@^2.0.0: resolved "https://registry.npmmirror.com/parse-headers/-/parse-headers-2.0.5.tgz" integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA== -parse-json@^5.2.0: - version "5.2.0" - resolved "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - parseurl@~1.3.3: version "1.3.3" resolved "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== -path-exists@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/path-exists/-/path-exists-5.0.0.tgz" - integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== - path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - path-to-regexp@^6.2.1: version "6.2.1" resolved "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-6.2.1.tgz" @@ -3807,11 +3104,6 @@ phin@^2.9.1: resolved "https://registry.npmmirror.com/phin/-/phin-2.9.3.tgz" integrity sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA== -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - pino-abstract-transport@v1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/pino-abstract-transport/-/pino-abstract-transport-1.0.0.tgz" @@ -4048,7 +3340,7 @@ quick-format-unescaped@^4.0.3: resolved "https://registry.npmmirror.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz" integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== -quick-lru@^6.1.1, quick-lru@6.1.1: +quick-lru@6.1.1: version "6.1.1" resolved "https://registry.npmmirror.com/quick-lru/-/quick-lru-6.1.1.tgz" integrity sha512-S27GBT+F0NTRiehtbrgaSE1idUAJ5bX8dPAQTdylEyNlrdcH5X4Lz7Edz3DYzecbsCluD5zO8ZNEe04z3D3u6Q== @@ -4095,25 +3387,6 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -read-pkg-up@^9.1.0: - version "9.1.0" - resolved "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-9.1.0.tgz" - integrity sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg== - dependencies: - find-up "^6.3.0" - read-pkg "^7.1.0" - type-fest "^2.5.0" - -read-pkg@^7.1.0: - version "7.1.0" - resolved "https://registry.npmmirror.com/read-pkg/-/read-pkg-7.1.0.tgz" - integrity sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg== - dependencies: - "@types/normalize-package-data" "^2.4.1" - normalize-package-data "^3.0.2" - parse-json "^5.2.0" - type-fest "^2.0.0" - readable-stream@^3.1.1, readable-stream@^3.4.0: version "3.6.2" resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz" @@ -4191,22 +3464,6 @@ requires-port@^1.0.0: resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -restore-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-4.0.0.tgz" - integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - ret@~0.2.0: version "0.2.2" resolved "https://registry.npmmirror.com/ret/-/ret-0.2.2.tgz" @@ -4234,23 +3491,6 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -run-async@^2.4.1: - version "2.4.1" - resolved "https://registry.npmmirror.com/run-async/-/run-async-2.4.1.tgz" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-async@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/run-async/-/run-async-3.0.0.tgz" - integrity sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q== - -rxjs@^7.5.6, rxjs@^7.8.1: - version "7.8.1" - resolved "https://registry.npmmirror.com/rxjs/-/rxjs-7.8.1.tgz" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0, safe-buffer@5.2.1: version "5.2.1" resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz" @@ -4312,7 +3552,7 @@ semver@^6.0.0: resolved "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.4, semver@^7.3.5, semver@^7.3.8, semver@^7.5.0, semver@^7.5.4: +semver@^7.3.5, semver@^7.3.8, semver@^7.5.0, semver@^7.5.4: version "7.5.4" resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -4392,18 +3632,6 @@ sharp@^0.32.3: tar-fs "^3.0.4" tunnel-agent "^0.6.0" -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - side-channel@^1.0.4: version "1.0.4" resolved "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz" @@ -4413,7 +3641,7 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: +signal-exit@^3.0.0: version "3.0.7" resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -4455,32 +3683,6 @@ sonic-boom@^3.1.0: dependencies: atomic-sleep "^1.0.0" -spdx-correct@^3.0.0: - version "3.2.0" - resolved "https://registry.npmmirror.com/spdx-correct/-/spdx-correct-3.2.0.tgz" - integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.npmmirror.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.13" - resolved "https://registry.npmmirror.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz" - integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== - split2@^4.0.0: version "4.2.0" resolved "https://registry.npmmirror.com/split2/-/split2-4.2.0.tgz" @@ -4518,13 +3720,6 @@ statuses@2.0.1: resolved "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -stdin-discarder@^0.1.0: - version "0.1.0" - resolved "https://registry.npmmirror.com/stdin-discarder/-/stdin-discarder-0.1.0.tgz" - integrity sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ== - dependencies: - bl "^5.0.0" - stop-iteration-iterator@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz" @@ -4575,7 +3770,7 @@ string_decoder@~1.1.1: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^4.1.0, string-width@^4.2.3: +string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -4584,15 +3779,6 @@ string-width@^4.1.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - string.prototype.trim@^1.2.7: version "1.2.7" resolved "https://registry.npmmirror.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz" @@ -4620,25 +3806,13 @@ string.prototype.trimstart@^1.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" -strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz" @@ -4652,25 +3826,6 @@ strtok3@^6.2.4: "@tokenizer/token" "^0.3.0" peek-readable "^4.1.0" -stubborn-fs@^1.2.4: - version "1.2.4" - resolved "https://registry.npmmirror.com/stubborn-fs/-/stubborn-fs-1.2.4.tgz" - integrity sha512-KRa4nIRJ8q6uApQbPwYZVhOof8979fw4xbajBWa5kPJFa4nyY3aFaMWVyIVCDnkNCCG/3HLipUZ4QaNlYsmX1w== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - tar-fs@^2.0.0: version "2.1.1" resolved "https://registry.npmmirror.com/tar-fs/-/tar-fs-2.1.1.tgz" @@ -4729,11 +3884,6 @@ thread-stream@^2.0.0: dependencies: real-require "^0.2.0" -through@^2.3.6: - version "2.3.8" - resolved "https://registry.npmmirror.com/through/-/through-2.3.8.tgz" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - timm@^1.6.1: version "1.7.1" resolved "https://registry.npmmirror.com/timm/-/timm-1.7.1.tgz" @@ -4749,13 +3899,6 @@ tinycolor2@^1.6.0: resolved "https://registry.npmmirror.com/tinycolor2/-/tinycolor2-1.6.0.tgz" integrity sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw== -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.npmmirror.com/tmp/-/tmp-0.0.33.tgz" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - toidentifier@1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz" @@ -4805,11 +3948,6 @@ tslib@^1.9.3: resolved "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.1.0: - version "2.5.3" - resolved "https://registry.npmmirror.com/tslib/-/tslib-2.5.3.tgz" - integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w== - tslib@^2.2.0: version "2.6.2" resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" @@ -4837,21 +3975,6 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.21.3.tgz" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^2.0.0, type-fest@^2.11.2, type-fest@^2.13.0, type-fest@^2.5.0: - version "2.19.0" - resolved "https://registry.npmmirror.com/type-fest/-/type-fest-2.19.0.tgz" - integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== - -type-fest@^3.0.0: - version "3.12.0" - resolved "https://registry.npmmirror.com/type-fest/-/type-fest-3.12.0.tgz" - integrity sha512-qj9wWsnFvVEMUDbESiilKeXeHL7FwwiFcogfhfyjmvT968RXSvnl23f1JOClTHYItsi7o501C/7qVllscUP3oA== - type-is@~1.6.18: version "1.6.18" resolved "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz" @@ -4889,7 +4012,7 @@ underscore@^1.13.1: resolved "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz" integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== -undici@^5.0.0, undici@^5.20.0, undici@^5.21.0, undici@^5.22.1: +undici@^5.21.0: version "5.22.1" resolved "https://registry.npmmirror.com/undici/-/undici-5.22.1.tgz" integrity sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw== @@ -4968,14 +4091,6 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.npmmirror.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - vary@~1.1.2: version "1.1.2" resolved "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz" @@ -4990,13 +4105,6 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== - dependencies: - defaults "^1.0.3" - web-streams-polyfill@^3.0.3: version "3.2.1" resolved "https://registry.npmmirror.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz" @@ -5020,11 +4128,6 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -when-exit@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/when-exit/-/when-exit-2.1.0.tgz" - integrity sha512-H85ulNwUBU1e6PGxkWUDgxnbohSXD++ah6Xw1VHAN7CtypcbZaC4aYjQ+C2PMVaDkURDuOinNAT+Lnz3utWXxQ== - which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" @@ -5048,13 +4151,6 @@ which-typed-array@^1.1.9: has-tostringtag "^1.0.0" is-typed-array "^1.1.10" -which@^2.0.1: - version "2.0.2" - resolved "https://registry.npmmirror.com/which/-/which-2.0.2.tgz" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - wide-align@^1.1.2: version "1.1.5" resolved "https://registry.npmmirror.com/wide-align/-/wide-align-1.1.5.tgz" @@ -5062,13 +4158,6 @@ wide-align@^1.1.2: dependencies: string-width "^1.0.2 || 2 || 3 || 4" -widest-line@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/widest-line/-/widest-line-4.0.1.tgz" - integrity sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig== - dependencies: - string-width "^5.0.1" - wmf@~1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz" @@ -5079,24 +4168,6 @@ word@~0.3.0: resolved "https://registry.npmjs.org/word/-/word-0.3.0.tgz" integrity sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA== -wrap-ansi@^6.0.1: - version "6.2.0" - resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - wrappy@1: version "1.0.2" resolved "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz" @@ -5117,7 +4188,7 @@ ws@^7.5.7: resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== -ws@^8.0.0, ws@^8.12.0, ws@^8.13.0: +ws@^8.0.0, ws@^8.13.0: version "8.13.0" resolved "https://registry.npmmirror.com/ws/-/ws-8.13.0.tgz" integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== @@ -5204,8 +4275,3 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -yocto-queue@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-1.0.0.tgz" - integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==